1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved.
2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file.
4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/extensions/extension_apitest.h"
61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/test/extension_test_message_listener.h"
7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)using extensions::Extension;
9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
10010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// NB: We use LoadExtension instead of InstallExtension for shared modules so
11010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// the public-keys in their manifests are used to generate the extension ID, so
12010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// it can be imported correctly.  We use InstallExtension otherwise so the loads
13010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// happen through the CRX installer which validates imports.
14010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
1503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ExtensionApiTest, SharedModule) {
16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // import_pass depends on this shared module.
17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_TRUE(LoadExtension(
18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      test_data_dir_.AppendASCII("shared_module").AppendASCII("shared")));
19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_TRUE(RunExtensionTest("shared_module/import_pass"));
21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_FALSE(InstallExtension(
23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      test_data_dir_.AppendASCII("shared_module")
24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          .AppendASCII("import_wrong_version"), 0));
25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_FALSE(InstallExtension(
26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      test_data_dir_.AppendASCII("shared_module")
27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          .AppendASCII("import_non_existent"), 0));
28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
29010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
30010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(ExtensionApiTest, SharedModuleWhitelist) {
31010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  ASSERT_TRUE(LoadExtension(
32010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      test_data_dir_.AppendASCII("shared_module")
33010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)          .AppendASCII("shared_whitelist")));
34010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
35010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_FALSE(InstallExtension(
36010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      test_data_dir_.AppendASCII("shared_module")
37010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)          .AppendASCII("import_not_in_whitelist"), 0));
38010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
39f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
4003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ExtensionApiTest, SharedModuleInstallEvent) {
41f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  ExtensionTestMessageListener listener1("ready", false);
42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
43f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  const Extension* extension = LoadExtension(
44f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      test_data_dir_.AppendASCII("shared_module").AppendASCII("shared"));
45f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  ASSERT_TRUE(extension);
46f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  ASSERT_TRUE(InstallExtension(
47f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      test_data_dir_.AppendASCII("shared_module").AppendASCII("import_pass"),
48f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      1));
49f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
50f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_TRUE(listener1.WaitUntilSatisfied());
51f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
52f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  ExtensionTestMessageListener listener2("shared_module_updated", false);
53f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  ReloadExtension(extension->id());
54f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
55f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_TRUE(listener2.WaitUntilSatisfied());
56f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
57