1// Copyright (c) 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "chrome/browser/extensions/extension_apitest.h"
6#include "extensions/test/extension_test_message_listener.h"
7
8using extensions::Extension;
9
10// NB: We use LoadExtension instead of InstallExtension for shared modules so
11// the public-keys in their manifests are used to generate the extension ID, so
12// it can be imported correctly.  We use InstallExtension otherwise so the loads
13// happen through the CRX installer which validates imports.
14
15IN_PROC_BROWSER_TEST_F(ExtensionApiTest, SharedModule) {
16  // import_pass depends on this shared module.
17  ASSERT_TRUE(LoadExtension(
18      test_data_dir_.AppendASCII("shared_module").AppendASCII("shared")));
19
20  EXPECT_TRUE(RunExtensionTest("shared_module/import_pass"));
21
22  EXPECT_FALSE(InstallExtension(
23      test_data_dir_.AppendASCII("shared_module")
24          .AppendASCII("import_wrong_version"), 0));
25  EXPECT_FALSE(InstallExtension(
26      test_data_dir_.AppendASCII("shared_module")
27          .AppendASCII("import_non_existent"), 0));
28}
29
30IN_PROC_BROWSER_TEST_F(ExtensionApiTest, SharedModuleWhitelist) {
31  ASSERT_TRUE(LoadExtension(
32      test_data_dir_.AppendASCII("shared_module")
33          .AppendASCII("shared_whitelist")));
34
35  EXPECT_FALSE(InstallExtension(
36      test_data_dir_.AppendASCII("shared_module")
37          .AppendASCII("import_not_in_whitelist"), 0));
38}
39
40IN_PROC_BROWSER_TEST_F(ExtensionApiTest, SharedModuleInstallEvent) {
41  ExtensionTestMessageListener listener1("ready", false);
42
43  const Extension* extension = LoadExtension(
44      test_data_dir_.AppendASCII("shared_module").AppendASCII("shared"));
45  ASSERT_TRUE(extension);
46  ASSERT_TRUE(InstallExtension(
47      test_data_dir_.AppendASCII("shared_module").AppendASCII("import_pass"),
48      1));
49
50  EXPECT_TRUE(listener1.WaitUntilSatisfied());
51
52  ExtensionTestMessageListener listener2("shared_module_updated", false);
53  ReloadExtension(extension->id());
54
55  EXPECT_TRUE(listener2.WaitUntilSatisfied());
56}
57