Chromium Code Reviews| Index: chrome/browser/policy/policy_browsertest.cc |
| diff --git a/chrome/browser/policy/policy_browsertest.cc b/chrome/browser/policy/policy_browsertest.cc |
| index 1040ae19fdf3f147eb960fd2d4010814b98a4e0c..c0f9cbe0a988e7548517eee93e70b39fb3c39dfd 100644 |
| --- a/chrome/browser/policy/policy_browsertest.cc |
| +++ b/chrome/browser/policy/policy_browsertest.cc |
| @@ -38,6 +38,7 @@ |
| #include "chrome/browser/extensions/crx_installer.h" |
| #include "chrome/browser/extensions/extension_management_constants.h" |
| #include "chrome/browser/extensions/extension_service.h" |
| +#include "chrome/browser/extensions/shared_module_service.h" |
| #include "chrome/browser/extensions/unpacked_installer.h" |
| #include "chrome/browser/extensions/updater/extension_cache_fake.h" |
| #include "chrome/browser/extensions/updater/extension_updater.h" |
| @@ -124,12 +125,15 @@ |
| #include "content/public/test/test_navigation_observer.h" |
| #include "content/public/test/test_utils.h" |
| #include "extensions/browser/extension_host.h" |
| +#include "extensions/browser/extension_registry.h" |
| #include "extensions/browser/extension_system.h" |
| #include "extensions/browser/process_manager.h" |
| +#include "extensions/browser/test_extension_registry_observer.h" |
| #include "extensions/browser/uninstall_reason.h" |
| #include "extensions/common/constants.h" |
| #include "extensions/common/extension.h" |
| #include "extensions/common/extension_set.h" |
| +#include "extensions/common/manifest_handlers/shared_module_info.h" |
| #include "net/base/net_errors.h" |
| #include "net/base/net_util.h" |
| #include "net/base/url_util.h" |
| @@ -1604,6 +1608,74 @@ IN_PROC_BROWSER_TEST_F(PolicyTest, MAYBE_ExtensionInstallBlacklistWildcard) { |
| EXPECT_FALSE(service->GetExtensionById(kGoodCrxId, true)); |
| } |
| +IN_PROC_BROWSER_TEST_F(PolicyTest, ExtensionInstallBlacklistSharedModules) { |
| + // Verifies that shared_modules are not affected by the blacklist. |
| + |
| + const char kImporterId[] = "pchakhniekfaeoddkifplhnfbffomabh"; |
| + const char kSharedModuleId[] = "nfgclafboonjbiafbllihiailjlhelpm"; |
|
elijahtaylor1
2014/10/22 16:40:01
be careful if you are using a new ID that is not w
Joao da Silva
2014/10/22 18:31:05
Thanks for the tip. I'll fake the channel.
|
| + |
| + // Verify that the extensions are not installed initially. |
| + ExtensionService* service = extension_service(); |
| + ASSERT_FALSE(service->GetExtensionById(kImporterId, true)); |
| + ASSERT_FALSE(service->GetExtensionById(kSharedModuleId, true)); |
| + |
| + // Mock the webstore update URL. This is where the shared module extension |
| + // will be installed from. |
| + base::FilePath update_xml_path = base::FilePath(kTestExtensionsDir) |
| + .Append("policy_shared_module") |
| + .Append("update.xml"); |
| + GURL update_xml_url(URLRequestMockHTTPJob::GetMockUrl(update_xml_path)); |
| + CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
| + switches::kAppsGalleryUpdateURL, update_xml_url.spec()); |
| + ui_test_utils::NavigateToURL(browser(), update_xml_url); |
| + |
| + // Blacklist "*" but force-install the importer extension. The shared module |
| + // should be automatically installed too. |
| + base::ListValue blacklist; |
| + blacklist.AppendString("*"); |
| + base::ListValue forcelist; |
| + forcelist.AppendString( |
| + base::StringPrintf("%s;%s", kImporterId, update_xml_url.spec().c_str())); |
| + PolicyMap policies; |
| + policies.Set(key::kExtensionInstallBlacklist, POLICY_LEVEL_MANDATORY, |
| + POLICY_SCOPE_USER, blacklist.DeepCopy(), NULL); |
| + policies.Set(key::kExtensionInstallForcelist, POLICY_LEVEL_MANDATORY, |
| + POLICY_SCOPE_USER, forcelist.DeepCopy(), NULL); |
| + |
| + extensions::ExtensionRegistry* registry = |
| + extensions::ExtensionRegistry::Get(browser()->profile()); |
| + extensions::TestExtensionRegistryObserver observe_importer( |
| + registry, kImporterId); |
| + extensions::TestExtensionRegistryObserver observe_shared_module( |
| + registry, kSharedModuleId); |
| + UpdateProviderPolicy(policies); |
| + observe_importer.WaitForExtensionLoaded(); |
| + observe_shared_module.WaitForExtensionLoaded(); |
| + |
| + // Verify that both extensions got installed. |
| + const extensions::Extension* importer = |
| + service->GetExtensionById(kImporterId, true); |
| + ASSERT_TRUE(importer); |
| + EXPECT_EQ(kImporterId, importer->id()); |
| + const extensions::Extension* shared_module = |
| + service->GetExtensionById(kSharedModuleId, true); |
| + ASSERT_TRUE(shared_module); |
| + EXPECT_EQ(kSharedModuleId, shared_module->id()); |
| + EXPECT_TRUE(shared_module->is_shared_module()); |
| + |
| + // Verify the dependency. |
| + scoped_ptr<extensions::ExtensionSet> set = |
| + service->shared_module_service()->GetDependentExtensions(shared_module); |
| + ASSERT_TRUE(set); |
| + EXPECT_EQ(1u, set->size()); |
| + EXPECT_TRUE(set->Contains(importer->id())); |
| + |
| + std::vector<extensions::SharedModuleInfo::ImportInfo> imports = |
| + extensions::SharedModuleInfo::GetImports(importer); |
| + ASSERT_EQ(1u, imports.size()); |
| + EXPECT_EQ(kSharedModuleId, imports[0].extension_id); |
| +} |
| + |
| IN_PROC_BROWSER_TEST_F(PolicyTest, ExtensionInstallWhitelist) { |
| // Verifies that the whitelist can open exceptions to the blacklist. |
| ExtensionService* service = extension_service(); |