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 c7502c792a6b4c5a49d57033e257c413f390c511..d9e064dd9daeeb54ecaaad1a88eb163a06c25b3a 100644 |
| --- a/chrome/browser/policy/policy_browsertest.cc |
| +++ b/chrome/browser/policy/policy_browsertest.cc |
| @@ -36,6 +36,7 @@ |
| #include "chrome/browser/download/download_prefs.h" |
| #include "chrome/browser/extensions/api/messaging/native_message_process_host.h" |
| #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/unpacked_installer.h" |
| #include "chrome/browser/extensions/updater/extension_cache_fake.h" |
| @@ -733,6 +734,15 @@ class PolicyTest : public InProcessBrowserTest { |
| observer.Wait(); |
| } |
| + void DisableExtension(const std::string& id) { |
| + content::WindowedNotificationObserver observer( |
| + extensions::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED, |
| + content::NotificationService::AllSources()); |
| + extension_service()->DisableExtension(id, |
| + extensions::Extension::DISABLE_NONE); |
| + observer.Wait(); |
| + } |
| + |
| void UpdateProviderPolicy(const PolicyMap& policy) { |
| provider_.UpdateChromePolicy(policy); |
| DCHECK(base::MessageLoop::current()); |
| @@ -1731,6 +1741,47 @@ IN_PROC_BROWSER_TEST_F(PolicyTest, ExtensionInstallForcelist) { |
| extension_loaded_observer.Wait(); |
| } |
| +IN_PROC_BROWSER_TEST_F(PolicyTest, ExtensionRecommendedInstallationMode) { |
| + // Verifies that extensions that are recommended-installed by policies are |
| + // installed, can be disabled but not uninstalled. |
| + ExtensionService* service = extension_service(); |
| + ASSERT_FALSE(service->GetExtensionById(kGoodCrxId, true)); |
| + |
| + base::FilePath path = |
| + base::FilePath(kTestExtensionsDir).Append(kGoodV1CrxManifestName); |
| + GURL url(URLRequestMockHTTPJob::GetMockUrl(path)); |
| + |
| + // Setting the forcelist extension should install "good_v1.crx". |
| + base::DictionaryValue dict_value; |
| + dict_value.SetString(std::string(kGoodCrxId) + "." + |
| + extensions::schema_constants::kInstallationMode, |
| + extensions::schema_constants::kNormalInstalled); |
| + dict_value.SetString( |
| + std::string(kGoodCrxId) + "." + extensions::schema_constants::kUpdateUrl, |
| + url.spec()); |
| + PolicyMap policies; |
| + policies.Set(key::kExtensionSettings, |
| + POLICY_LEVEL_MANDATORY, |
| + POLICY_SCOPE_USER, |
| + dict_value.DeepCopy(), |
| + NULL); |
| + content::WindowedNotificationObserver observer( |
| + extensions::NOTIFICATION_EXTENSION_WILL_BE_INSTALLED_DEPRECATED, |
| + content::NotificationService::AllSources()); |
| + UpdateProviderPolicy(policies); |
| + observer.Wait(); |
| + |
| + EXPECT_TRUE(service->GetExtensionById(kGoodCrxId, true)); |
| + |
| + // The user is not allowed to uninstall recommended-installed extensions. |
| + UninstallExtension(kGoodCrxId, false); |
| + |
| + // But the user are allowed to disable them. |
|
Joao da Silva
2014/10/08 16:52:30
is allowed
binjin
2014/10/09 12:05:20
Done.
|
| + EXPECT_TRUE(service->IsExtensionEnabled(kGoodCrxId)); |
| + DisableExtension(kGoodCrxId); |
| + EXPECT_FALSE(service->IsExtensionEnabled(kGoodCrxId)); |
| +} |
| + |
| IN_PROC_BROWSER_TEST_F(PolicyTest, ExtensionAllowedTypes) { |
| // Verifies that extensions are blocked if policy specifies an allowed types |
| // list and the extension's type is not on that list. |