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