Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(610)

Unified Diff: chrome/browser/policy/policy_browsertest.cc

Issue 666223005: Don't block shared_module extensions by the policy blacklist. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fixed FilePath Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..1b369fbc667c3595711eb230159f98bcd9af6152 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"
@@ -75,6 +76,7 @@
#include "chrome/common/chrome_paths.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/common/extensions/extension_constants.h"
+#include "chrome/common/extensions/features/feature_channel.h"
#include "chrome/common/pref_names.h"
#include "chrome/common/url_constants.h"
#include "chrome/grit/generated_resources.h"
@@ -124,12 +126,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 +1609,78 @@ 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";
+
+ // Make sure that "import" and "export" are available to these extension IDs
+ // by mocking the release channel.
+ extensions::ScopedCurrentChannel channel(chrome::VersionInfo::CHANNEL_DEV);
+
+ // 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)
+ .AppendASCII("policy_shared_module")
+ .AppendASCII("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();

Powered by Google App Engine
This is Rietveld 408576698