| Index: chrome/browser/extensions/api/management/management_browsertest.cc
|
| diff --git a/chrome/browser/extensions/api/management/management_browsertest.cc b/chrome/browser/extensions/api/management/management_browsertest.cc
|
| index 9656e9d3edb9cdf8f63163c2292642aa214a0ead..e793265670109fcbafaba5c3b4163256e479ff9b 100644
|
| --- a/chrome/browser/extensions/api/management/management_browsertest.cc
|
| +++ b/chrome/browser/extensions/api/management/management_browsertest.cc
|
| @@ -5,13 +5,14 @@
|
| #include "base/bind.h"
|
| #include "base/bind_helpers.h"
|
| #include "base/memory/ref_counted.h"
|
| -#include "base/prefs/pref_service.h"
|
| #include "base/prefs/scoped_user_pref_update.h"
|
| +#include "base/run_loop.h"
|
| #include "base/stl_util.h"
|
| +#include "base/strings/stringprintf.h"
|
| #include "chrome/browser/extensions/extension_browsertest.h"
|
| +#include "chrome/browser/extensions/extension_management.h"
|
| #include "chrome/browser/extensions/extension_service.h"
|
| #include "chrome/browser/extensions/extension_test_message_listener.h"
|
| -#include "chrome/browser/extensions/external_policy_loader.h"
|
| #include "chrome/browser/extensions/updater/extension_downloader.h"
|
| #include "chrome/browser/extensions/updater/extension_updater.h"
|
| #include "chrome/browser/profiles/profile.h"
|
| @@ -19,6 +20,9 @@
|
| #include "chrome/common/pref_names.h"
|
| #include "chrome/common/url_constants.h"
|
| #include "chrome/test/base/ui_test_utils.h"
|
| +#include "components/policy/core/browser/browser_policy_connector.h"
|
| +#include "components/policy/core/common/mock_configuration_policy_provider.h"
|
| +#include "components/policy/core/common/policy_map.h"
|
| #include "content/public/browser/notification_service.h"
|
| #include "content/public/browser/render_view_host.h"
|
| #include "content/public/test/browser_test_utils.h"
|
| @@ -28,15 +32,41 @@
|
| #include "extensions/browser/extension_registry.h"
|
| #include "extensions/browser/extension_system.h"
|
| #include "extensions/browser/notification_types.h"
|
| -#include "extensions/browser/pref_names.h"
|
| #include "net/url_request/url_fetcher.h"
|
| +#include "policy/policy_constants.h"
|
| +#include "testing/gmock/include/gmock/gmock.h"
|
|
|
| using extensions::Extension;
|
| using extensions::ExtensionRegistry;
|
| using extensions::Manifest;
|
| +using policy::PolicyMap;
|
| +using testing::Return;
|
| +using testing::_;
|
| +
|
| +namespace {
|
| +
|
| +std::string BuildForceInstallPolicyValue(const char* extension_id,
|
| + const char* update_url) {
|
| + return base::StringPrintf("%s;%s", extension_id, update_url);
|
| +}
|
| +
|
| +} // namespace
|
|
|
| class ExtensionManagementTest : public ExtensionBrowserTest {
|
| + public:
|
| + virtual void SetUpInProcessBrowserTestFixture() OVERRIDE {
|
| + EXPECT_CALL(policy_provider_, IsInitializationComplete(_))
|
| + .WillRepeatedly(Return(true));
|
| + policy::BrowserPolicyConnector::SetPolicyProviderForTesting(
|
| + &policy_provider_);
|
| + }
|
| +
|
| protected:
|
| + void UpdateProviderPolicy(const PolicyMap& policy) {
|
| + policy_provider_.UpdateChromePolicy(policy);
|
| + base::RunLoop().RunUntilIdle();
|
| + }
|
| +
|
| // Helper method that returns whether the extension is at the given version.
|
| // This calls version(), which must be defined in the extension's bg page,
|
| // as well as asking the extension itself.
|
| @@ -71,6 +101,9 @@ class ExtensionManagementTest : public ExtensionBrowserTest {
|
| return false;
|
| return true;
|
| }
|
| +
|
| + private:
|
| + policy::MockConfigurationPolicyProvider policy_provider_;
|
| };
|
|
|
| #if defined(OS_LINUX)
|
| @@ -508,19 +541,22 @@ IN_PROC_BROWSER_TEST_F(ExtensionManagementTest, ExternalPolicyRefresh) {
|
| const size_t size_before = registry->enabled_extensions().size();
|
| ASSERT_TRUE(registry->disabled_extensions().is_empty());
|
|
|
| - PrefService* prefs = browser()->profile()->GetPrefs();
|
| - const base::DictionaryValue* forcelist =
|
| - prefs->GetDictionary(extensions::pref_names::kInstallForceList);
|
| - ASSERT_TRUE(forcelist->empty()) << kForceInstallNotEmptyHelp;
|
| -
|
| - {
|
| - // Set the policy as a user preference and fire notification observers.
|
| - DictionaryPrefUpdate pref_update(prefs,
|
| - extensions::pref_names::kInstallForceList);
|
| - base::DictionaryValue* forcelist = pref_update.Get();
|
| - extensions::ExternalPolicyLoader::AddExtension(
|
| - forcelist, kExtensionId, "http://localhost/autoupdate/manifest");
|
| - }
|
| + ASSERT_TRUE(extensions::ExtensionManagementFactory::GetForBrowserContext(
|
| + browser()->profile())
|
| + ->GetForceInstallList()
|
| + ->empty())
|
| + << kForceInstallNotEmptyHelp;
|
| +
|
| + base::ListValue forcelist;
|
| + forcelist.AppendString(BuildForceInstallPolicyValue(
|
| + kExtensionId, "http://localhost/autoupdate/manifest"));
|
| + PolicyMap policies;
|
| + policies.Set(policy::key::kExtensionInstallForcelist,
|
| + policy::POLICY_LEVEL_MANDATORY,
|
| + policy::POLICY_SCOPE_USER,
|
| + forcelist.DeepCopy(),
|
| + NULL);
|
| + UpdateProviderPolicy(policies);
|
|
|
| // Check if the extension got installed.
|
| ASSERT_TRUE(WaitForExtensionInstall());
|
| @@ -547,7 +583,8 @@ IN_PROC_BROWSER_TEST_F(ExtensionManagementTest, ExternalPolicyRefresh) {
|
| EXPECT_EQ(0u, registry->disabled_extensions().size());
|
|
|
| // Check that emptying the list triggers uninstall.
|
| - prefs->ClearPref(extensions::pref_names::kInstallForceList);
|
| + policies.Erase(policy::key::kExtensionInstallForcelist);
|
| + UpdateProviderPolicy(policies);
|
| EXPECT_EQ(size_before + 1, registry->enabled_extensions().size());
|
| EXPECT_FALSE(service->GetExtensionById(kExtensionId, true));
|
| }
|
| @@ -582,10 +619,11 @@ IN_PROC_BROWSER_TEST_F(ExtensionManagementTest,
|
| basedir.AppendASCII("v2.crx"));
|
|
|
| // Check that the policy is initially empty.
|
| - PrefService* prefs = browser()->profile()->GetPrefs();
|
| - const base::DictionaryValue* forcelist =
|
| - prefs->GetDictionary(extensions::pref_names::kInstallForceList);
|
| - ASSERT_TRUE(forcelist->empty()) << kForceInstallNotEmptyHelp;
|
| + ASSERT_TRUE(extensions::ExtensionManagementFactory::GetForBrowserContext(
|
| + browser()->profile())
|
| + ->GetForceInstallList()
|
| + ->empty())
|
| + << kForceInstallNotEmptyHelp;
|
|
|
| // User install of the extension.
|
| ASSERT_TRUE(InstallExtension(basedir.AppendASCII("v2.crx"), 1));
|
| @@ -596,13 +634,17 @@ IN_PROC_BROWSER_TEST_F(ExtensionManagementTest,
|
| EXPECT_TRUE(service->IsExtensionEnabled(kExtensionId));
|
|
|
| // Setup the force install policy. It should override the location.
|
| - {
|
| - DictionaryPrefUpdate pref_update(prefs,
|
| - extensions::pref_names::kInstallForceList);
|
| - extensions::ExternalPolicyLoader::AddExtension(
|
| - pref_update.Get(), kExtensionId,
|
| - "http://localhost/autoupdate/manifest");
|
| - }
|
| + base::ListValue forcelist;
|
| + forcelist.AppendString(BuildForceInstallPolicyValue(
|
| + kExtensionId, "http://localhost/autoupdate/manifest"));
|
| + PolicyMap policies;
|
| + policies.Set(policy::key::kExtensionInstallForcelist,
|
| + policy::POLICY_LEVEL_MANDATORY,
|
| + policy::POLICY_SCOPE_USER,
|
| + forcelist.DeepCopy(),
|
| + NULL);
|
| + UpdateProviderPolicy(policies);
|
| +
|
| ASSERT_TRUE(WaitForExtensionInstall());
|
| ASSERT_EQ(size_before + 1, registry->enabled_extensions().size());
|
| extension = service->GetExtensionById(kExtensionId, false);
|
| @@ -614,7 +656,8 @@ IN_PROC_BROWSER_TEST_F(ExtensionManagementTest,
|
| // TODO(joaodasilva): it would be nicer if the extension was kept instead,
|
| // and reverted location to INTERNAL or whatever it was before the policy
|
| // was applied.
|
| - prefs->ClearPref(extensions::pref_names::kInstallForceList);
|
| + policies.Erase(policy::key::kExtensionInstallForcelist);
|
| + UpdateProviderPolicy(policies);
|
| ASSERT_EQ(size_before, registry->enabled_extensions().size());
|
| extension = service->GetExtensionById(kExtensionId, true);
|
| EXPECT_FALSE(extension);
|
| @@ -636,13 +679,13 @@ IN_PROC_BROWSER_TEST_F(ExtensionManagementTest,
|
|
|
| // Install the policy again. It should overwrite the extension's location,
|
| // and force enable it too.
|
| - {
|
| - DictionaryPrefUpdate pref_update(prefs,
|
| - extensions::pref_names::kInstallForceList);
|
| - base::DictionaryValue* forcelist = pref_update.Get();
|
| - extensions::ExternalPolicyLoader::AddExtension(
|
| - forcelist, kExtensionId, "http://localhost/autoupdate/manifest");
|
| - }
|
| + policies.Set(policy::key::kExtensionInstallForcelist,
|
| + policy::POLICY_LEVEL_MANDATORY,
|
| + policy::POLICY_SCOPE_USER,
|
| + forcelist.DeepCopy(),
|
| + NULL);
|
| + UpdateProviderPolicy(policies);
|
| +
|
| ASSERT_TRUE(WaitForExtensionInstall());
|
| ASSERT_EQ(size_before + 1, registry->enabled_extensions().size());
|
| extension = service->GetExtensionById(kExtensionId, false);
|
|
|