Index: chrome/browser/extensions/extension_management_browsertest.cc |
diff --git a/chrome/browser/extensions/extension_management_browsertest.cc b/chrome/browser/extensions/extension_management_browsertest.cc |
deleted file mode 100644 |
index 0bae0222e4af28eebe3a6e0b121aad91cfd66bbf..0000000000000000000000000000000000000000 |
--- a/chrome/browser/extensions/extension_management_browsertest.cc |
+++ /dev/null |
@@ -1,621 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "base/memory/ref_counted.h" |
-#include "base/stl_util.h" |
-#include "chrome/browser/extensions/autoupdate_interceptor.h" |
-#include "chrome/browser/extensions/extension_browsertest.h" |
-#include "chrome/browser/extensions/extension_host.h" |
-#include "chrome/browser/extensions/extension_service.h" |
-#include "chrome/browser/extensions/extension_test_message_listener.h" |
-#include "chrome/browser/extensions/updater/extension_updater.h" |
-#include "chrome/browser/infobars/infobar_tab_helper.h" |
-#include "chrome/browser/prefs/pref_service.h" |
-#include "chrome/browser/prefs/scoped_user_pref_update.h" |
-#include "chrome/browser/profiles/profile.h" |
-#include "chrome/browser/ui/browser.h" |
-#include "chrome/browser/ui/tab_contents/tab_contents.h" |
-#include "chrome/common/chrome_notification_types.h" |
-#include "chrome/common/pref_names.h" |
-#include "chrome/common/url_constants.h" |
-#include "chrome/test/base/ui_test_utils.h" |
-#include "content/public/browser/notification_service.h" |
-#include "content/public/browser/render_view_host.h" |
-#include "content/public/test/browser_test_utils.h" |
-#include "net/url_request/url_fetcher.h" |
- |
-using extensions::Extension; |
- |
-class ExtensionManagementTest : public ExtensionBrowserTest { |
- protected: |
- // 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. |
- // |
- // Note that 'version' here means something different than the version field |
- // in the extension's manifest. We use the version as reported by the |
- // background page to test how overinstalling crx files with the same |
- // manifest version works. |
- bool IsExtensionAtVersion(const Extension* extension, |
- const std::string& expected_version) { |
- // Test that the extension's version from the manifest and reported by the |
- // background page is correct. This is to ensure that the processes are in |
- // sync with the Extension. |
- ExtensionProcessManager* manager = browser()->profile()-> |
- GetExtensionProcessManager(); |
- extensions::ExtensionHost* ext_host = |
- manager->GetBackgroundHostForExtension(extension->id()); |
- EXPECT_TRUE(ext_host); |
- if (!ext_host) |
- return false; |
- |
- std::string version_from_bg; |
- bool exec = content::ExecuteJavaScriptAndExtractString( |
- ext_host->render_view_host(), L"", L"version()", &version_from_bg); |
- EXPECT_TRUE(exec); |
- if (!exec) |
- return false; |
- |
- if (version_from_bg != expected_version || |
- extension->VersionString() != expected_version) |
- return false; |
- return true; |
- } |
-}; |
- |
-#if defined(OS_LINUX) |
-// Times out sometimes on Linux. http://crbug.com/89727 |
-#define MAYBE_InstallSameVersion DISABLED_InstallSameVersion |
-#else |
-#define MAYBE_InstallSameVersion InstallSameVersion |
-#endif |
- |
-// Tests that installing the same version overwrites. |
-IN_PROC_BROWSER_TEST_F(ExtensionManagementTest, MAYBE_InstallSameVersion) { |
- const Extension* extension = InstallExtension( |
- test_data_dir_.AppendASCII("install/install.crx"), 1); |
- ASSERT_TRUE(extension); |
- FilePath old_path = extension->path(); |
- |
- // Install an extension with the same version. The previous install should be |
- // overwritten. |
- extension = InstallExtension( |
- test_data_dir_.AppendASCII("install/install_same_version.crx"), 0); |
- ASSERT_TRUE(extension); |
- FilePath new_path = extension->path(); |
- |
- EXPECT_FALSE(IsExtensionAtVersion(extension, "1.0")); |
- EXPECT_NE(old_path.value(), new_path.value()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(ExtensionManagementTest, InstallOlderVersion) { |
- const Extension* extension = InstallExtension( |
- test_data_dir_.AppendASCII("install/install.crx"), 1); |
- ASSERT_TRUE(extension); |
- ASSERT_FALSE(InstallExtension( |
- test_data_dir_.AppendASCII("install/install_older_version.crx"), 0)); |
- EXPECT_TRUE(IsExtensionAtVersion(extension, "1.0")); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(ExtensionManagementTest, InstallThenCancel) { |
- const Extension* extension = InstallExtension( |
- test_data_dir_.AppendASCII("install/install.crx"), 1); |
- ASSERT_TRUE(extension); |
- |
- // Cancel this install. |
- ASSERT_FALSE(StartInstallButCancel( |
- test_data_dir_.AppendASCII("install/install_v2.crx"))); |
- EXPECT_TRUE(IsExtensionAtVersion(extension, "1.0")); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(ExtensionManagementTest, InstallRequiresConfirm) { |
- // Installing the extension without an auto confirming UI should result in |
- // it being disabled, since good.crx has permissions that require approval. |
- ExtensionService* service = browser()->profile()->GetExtensionService(); |
- std::string id = "ldnnhddmnhbkjipkidpdiheffobcpfmf"; |
- ASSERT_FALSE(InstallExtension(test_data_dir_.AppendASCII("good.crx"), 0)); |
- ASSERT_TRUE(service->GetExtensionById(id, true)); |
- UninstallExtension(id); |
- |
- // And the install should succeed when the permissions are accepted. |
- ASSERT_TRUE(InstallExtensionWithUIAutoConfirm( |
- test_data_dir_.AppendASCII("good.crx"), 1, browser())); |
- UninstallExtension(id); |
-} |
- |
-// Tests that disabling and re-enabling an extension works. |
-IN_PROC_BROWSER_TEST_F(ExtensionManagementTest, DisableEnable) { |
- ExtensionProcessManager* manager = browser()->profile()-> |
- GetExtensionProcessManager(); |
- ExtensionService* service = browser()->profile()->GetExtensionService(); |
- const size_t size_before = service->extensions()->size(); |
- |
- // Load an extension, expect the background page to be available. |
- std::string extension_id = "bjafgdebaacbbbecmhlhpofkepfkgcpa"; |
- ASSERT_TRUE(LoadExtension( |
- test_data_dir_.AppendASCII("good").AppendASCII("Extensions") |
- .AppendASCII(extension_id) |
- .AppendASCII("1.0"))); |
- ASSERT_EQ(size_before + 1, service->extensions()->size()); |
- EXPECT_EQ(0u, service->disabled_extensions()->size()); |
- EXPECT_TRUE(manager->GetBackgroundHostForExtension(extension_id)); |
- |
- // After disabling, the background page should go away. |
- DisableExtension(extension_id); |
- EXPECT_EQ(size_before, service->extensions()->size()); |
- EXPECT_EQ(1u, service->disabled_extensions()->size()); |
- EXPECT_FALSE(manager->GetBackgroundHostForExtension(extension_id)); |
- |
- // And bring it back. |
- EnableExtension(extension_id); |
- EXPECT_EQ(size_before + 1, service->extensions()->size()); |
- EXPECT_EQ(0u, service->disabled_extensions()->size()); |
- EXPECT_TRUE(manager->GetBackgroundHostForExtension(extension_id)); |
-} |
- |
-// Used for testing notifications sent during extension updates. |
-class NotificationListener : public content::NotificationObserver { |
- public: |
- NotificationListener() : started_(false), finished_(false) { |
- int types[] = { |
- chrome::NOTIFICATION_EXTENSION_UPDATING_STARTED, |
- chrome::NOTIFICATION_EXTENSION_UPDATING_FINISHED, |
- chrome::NOTIFICATION_EXTENSION_UPDATE_FOUND |
- }; |
- for (size_t i = 0; i < arraysize(types); i++) { |
- registrar_.Add( |
- this, types[i], content::NotificationService::AllSources()); |
- } |
- } |
- ~NotificationListener() {} |
- |
- bool started() { return started_; } |
- |
- bool finished() { return finished_; } |
- |
- const std::set<std::string>& updates() { return updates_; } |
- |
- void Reset() { |
- started_ = false; |
- finished_ = false; |
- updates_.clear(); |
- } |
- |
- // Implements content::NotificationObserver interface. |
- virtual void Observe(int type, |
- const content::NotificationSource& source, |
- const content::NotificationDetails& details) { |
- switch (type) { |
- case chrome::NOTIFICATION_EXTENSION_UPDATING_STARTED: { |
- EXPECT_FALSE(started_); |
- started_ = true; |
- break; |
- } |
- case chrome::NOTIFICATION_EXTENSION_UPDATING_FINISHED: { |
- EXPECT_FALSE(finished_); |
- finished_ = true; |
- break; |
- } |
- case chrome::NOTIFICATION_EXTENSION_UPDATE_FOUND: { |
- const std::string* id = |
- content::Details<const std::string>(details).ptr(); |
- updates_.insert(*id); |
- break; |
- } |
- default: |
- NOTREACHED(); |
- } |
- } |
- |
- private: |
- content::NotificationRegistrar registrar_; |
- |
- // Did we see EXTENSION_UPDATING_STARTED? |
- bool started_; |
- |
- // Did we see EXTENSION_UPDATING_FINISHED? |
- bool finished_; |
- |
- // The set of extension id's we've seen via EXTENSION_UPDATE_FOUND. |
- std::set<std::string> updates_; |
-}; |
- |
-#if defined(OS_WIN) |
-// Fails consistently on Windows XP, see: http://crbug.com/120640. |
-#define MAYBE_AutoUpdate DISABLED_AutoUpdate |
-#else |
-// See http://crbug.com/103371 and http://crbug.com/120640. |
-#if defined(ADDRESS_SANITIZER) |
-#define MAYBE_AutoUpdate DISABLED_AutoUpdate |
-#else |
-#define MAYBE_AutoUpdate AutoUpdate |
-#endif |
-#endif |
- |
-// Tests extension autoupdate. |
-IN_PROC_BROWSER_TEST_F(ExtensionManagementTest, MAYBE_AutoUpdate) { |
- NotificationListener notification_listener; |
- FilePath basedir = test_data_dir_.AppendASCII("autoupdate"); |
- // Note: This interceptor gets requests on the IO thread. |
- scoped_refptr<AutoUpdateInterceptor> interceptor(new AutoUpdateInterceptor()); |
- net::URLFetcher::SetEnableInterceptionForTests(true); |
- |
- interceptor->SetResponseOnIOThread("http://localhost/autoupdate/manifest", |
- basedir.AppendASCII("manifest_v2.xml")); |
- interceptor->SetResponseOnIOThread("http://localhost/autoupdate/v2.crx", |
- basedir.AppendASCII("v2.crx")); |
- |
- // Install version 1 of the extension. |
- ExtensionTestMessageListener listener1("v1 installed", false); |
- ExtensionService* service = browser()->profile()->GetExtensionService(); |
- const size_t size_before = service->extensions()->size(); |
- ASSERT_TRUE(service->disabled_extensions()->is_empty()); |
- const Extension* extension = |
- InstallExtension(basedir.AppendASCII("v1.crx"), 1); |
- ASSERT_TRUE(extension); |
- listener1.WaitUntilSatisfied(); |
- ASSERT_EQ(size_before + 1, service->extensions()->size()); |
- ASSERT_EQ("ogjcoiohnmldgjemafoockdghcjciccf", extension->id()); |
- ASSERT_EQ("1.0", extension->VersionString()); |
- |
- // We don't want autoupdate blacklist checks. |
- service->updater()->set_blacklist_checks_enabled(false); |
- |
- // Run autoupdate and make sure version 2 of the extension was installed. |
- ExtensionTestMessageListener listener2("v2 installed", false); |
- service->updater()->CheckNow(); |
- ASSERT_TRUE(WaitForExtensionInstall()); |
- listener2.WaitUntilSatisfied(); |
- ASSERT_EQ(size_before + 1, service->extensions()->size()); |
- extension = service->GetExtensionById( |
- "ogjcoiohnmldgjemafoockdghcjciccf", false); |
- ASSERT_TRUE(extension); |
- ASSERT_EQ("2.0", extension->VersionString()); |
- ASSERT_TRUE(notification_listener.started()); |
- ASSERT_TRUE(notification_listener.finished()); |
- ASSERT_TRUE(ContainsKey(notification_listener.updates(), |
- "ogjcoiohnmldgjemafoockdghcjciccf")); |
- notification_listener.Reset(); |
- |
- // Now try doing an update to version 3, which has been incorrectly |
- // signed. This should fail. |
- interceptor->SetResponseOnIOThread("http://localhost/autoupdate/manifest", |
- basedir.AppendASCII("manifest_v3.xml")); |
- interceptor->SetResponseOnIOThread("http://localhost/autoupdate/v3.crx", |
- basedir.AppendASCII("v3.crx")); |
- |
- service->updater()->CheckNow(); |
- ASSERT_TRUE(WaitForExtensionInstallError()); |
- ASSERT_TRUE(notification_listener.started()); |
- ASSERT_TRUE(notification_listener.finished()); |
- ASSERT_TRUE(ContainsKey(notification_listener.updates(), |
- "ogjcoiohnmldgjemafoockdghcjciccf")); |
- |
- // Make sure the extension state is the same as before. |
- ASSERT_EQ(size_before + 1, service->extensions()->size()); |
- extension = service->GetExtensionById( |
- "ogjcoiohnmldgjemafoockdghcjciccf", false); |
- ASSERT_TRUE(extension); |
- ASSERT_EQ("2.0", extension->VersionString()); |
-} |
- |
-#if defined(OS_WIN) |
-// Fails consistently on Windows XP, see: http://crbug.com/120640. |
-#define MAYBE_AutoUpdateDisabledExtensions DISABLED_AutoUpdateDisabledExtensions |
-#else |
-#if defined(ADDRESS_SANITIZER) |
-#define MAYBE_AutoUpdateDisabledExtensions DISABLED_AutoUpdateDisabledExtensions |
-#else |
-#define MAYBE_AutoUpdateDisabledExtensions AutoUpdateDisabledExtensions |
-#endif |
-#endif |
- |
-// Tests extension autoupdate. |
-IN_PROC_BROWSER_TEST_F(ExtensionManagementTest, |
- MAYBE_AutoUpdateDisabledExtensions) { |
- NotificationListener notification_listener; |
- FilePath basedir = test_data_dir_.AppendASCII("autoupdate"); |
- // Note: This interceptor gets requests on the IO thread. |
- scoped_refptr<AutoUpdateInterceptor> interceptor(new AutoUpdateInterceptor()); |
- net::URLFetcher::SetEnableInterceptionForTests(true); |
- |
- interceptor->SetResponseOnIOThread("http://localhost/autoupdate/manifest", |
- basedir.AppendASCII("manifest_v2.xml")); |
- interceptor->SetResponseOnIOThread("http://localhost/autoupdate/v2.crx", |
- basedir.AppendASCII("v2.crx")); |
- |
- // Install version 1 of the extension. |
- ExtensionTestMessageListener listener1("v1 installed", false); |
- ExtensionService* service = browser()->profile()->GetExtensionService(); |
- const size_t enabled_size_before = service->extensions()->size(); |
- const size_t disabled_size_before = service->disabled_extensions()->size(); |
- const Extension* extension = |
- InstallExtension(basedir.AppendASCII("v1.crx"), 1); |
- ASSERT_TRUE(extension); |
- listener1.WaitUntilSatisfied(); |
- DisableExtension(extension->id()); |
- ASSERT_EQ(disabled_size_before + 1, service->disabled_extensions()->size()); |
- ASSERT_EQ(enabled_size_before, service->extensions()->size()); |
- ASSERT_EQ("ogjcoiohnmldgjemafoockdghcjciccf", extension->id()); |
- ASSERT_EQ("1.0", extension->VersionString()); |
- |
- // We don't want autoupdate blacklist checks. |
- service->updater()->set_blacklist_checks_enabled(false); |
- |
- ExtensionTestMessageListener listener2("v2 installed", false); |
- // Run autoupdate and make sure version 2 of the extension was installed but |
- // is still disabled. |
- service->updater()->CheckNow(); |
- ASSERT_TRUE(WaitForExtensionInstall()); |
- ASSERT_EQ(disabled_size_before + 1, service->disabled_extensions()->size()); |
- ASSERT_EQ(enabled_size_before, service->extensions()->size()); |
- extension = service->GetExtensionById( |
- "ogjcoiohnmldgjemafoockdghcjciccf", true); |
- ASSERT_TRUE(extension); |
- ASSERT_FALSE(service->GetExtensionById( |
- "ogjcoiohnmldgjemafoockdghcjciccf", false)); |
- ASSERT_EQ("2.0", extension->VersionString()); |
- |
- // The extension should have not made the callback because it is disabled. |
- // When we enabled it, it should then make the callback. |
- ASSERT_FALSE(listener2.was_satisfied()); |
- EnableExtension(extension->id()); |
- listener2.WaitUntilSatisfied(); |
- ASSERT_TRUE(notification_listener.started()); |
- ASSERT_TRUE(notification_listener.finished()); |
- ASSERT_TRUE(ContainsKey(notification_listener.updates(), |
- "ogjcoiohnmldgjemafoockdghcjciccf")); |
- notification_listener.Reset(); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(ExtensionManagementTest, ExternalUrlUpdate) { |
- ExtensionService* service = browser()->profile()->GetExtensionService(); |
- const char* kExtensionId = "ogjcoiohnmldgjemafoockdghcjciccf"; |
- // We don't want autoupdate blacklist checks. |
- service->updater()->set_blacklist_checks_enabled(false); |
- |
- FilePath basedir = test_data_dir_.AppendASCII("autoupdate"); |
- |
- // Note: This interceptor gets requests on the IO thread. |
- scoped_refptr<AutoUpdateInterceptor> interceptor(new AutoUpdateInterceptor()); |
- net::URLFetcher::SetEnableInterceptionForTests(true); |
- |
- interceptor->SetResponseOnIOThread("http://localhost/autoupdate/manifest", |
- basedir.AppendASCII("manifest_v2.xml")); |
- interceptor->SetResponseOnIOThread("http://localhost/autoupdate/v2.crx", |
- basedir.AppendASCII("v2.crx")); |
- |
- const size_t size_before = service->extensions()->size(); |
- ASSERT_TRUE(service->disabled_extensions()->is_empty()); |
- |
- extensions::PendingExtensionManager* pending_extension_manager = |
- service->pending_extension_manager(); |
- |
- // The code that reads external_extensions.json uses this method to inform |
- // the ExtensionService of an extension to download. Using the real code |
- // is race-prone, because instantating the ExtensionService starts a read |
- // of external_extensions.json before this test function starts. |
- |
- EXPECT_TRUE(pending_extension_manager->AddFromExternalUpdateUrl( |
- kExtensionId, GURL("http://localhost/autoupdate/manifest"), |
- Extension::EXTERNAL_PREF_DOWNLOAD)); |
- |
- // Run autoupdate and make sure version 2 of the extension was installed. |
- service->updater()->CheckNow(); |
- ASSERT_TRUE(WaitForExtensionInstall()); |
- ASSERT_EQ(size_before + 1, service->extensions()->size()); |
- const Extension* extension = service->GetExtensionById(kExtensionId, false); |
- ASSERT_TRUE(extension); |
- ASSERT_EQ("2.0", extension->VersionString()); |
- |
- // Uninstalling the extension should set a pref that keeps the extension from |
- // being installed again the next time external_extensions.json is read. |
- |
- UninstallExtension(kExtensionId); |
- |
- extensions::ExtensionPrefs* extension_prefs = service->extension_prefs(); |
- EXPECT_TRUE(extension_prefs->IsExternalExtensionUninstalled(kExtensionId)) |
- << "Uninstalling should set kill bit on externaly installed extension."; |
- |
- // Try to install the extension again from an external source. It should fail |
- // because of the killbit. |
- EXPECT_FALSE(pending_extension_manager->AddFromExternalUpdateUrl( |
- kExtensionId, GURL("http://localhost/autoupdate/manifest"), |
- Extension::EXTERNAL_PREF_DOWNLOAD)); |
- EXPECT_FALSE(pending_extension_manager->IsIdPending(kExtensionId)) |
- << "External reinstall of a killed extension shouldn't work."; |
- EXPECT_TRUE(extension_prefs->IsExternalExtensionUninstalled(kExtensionId)) |
- << "External reinstall of a killed extension should leave it killed."; |
- |
- // Installing from non-external source. |
- ASSERT_TRUE(InstallExtension(basedir.AppendASCII("v2.crx"), 1)); |
- |
- EXPECT_FALSE(extension_prefs->IsExternalExtensionUninstalled(kExtensionId)) |
- << "Reinstalling should clear the kill bit."; |
- |
- // Uninstalling from a non-external source should not set the kill bit. |
- UninstallExtension(kExtensionId); |
- |
- EXPECT_FALSE(extension_prefs->IsExternalExtensionUninstalled(kExtensionId)) |
- << "Uninstalling non-external extension should not set kill bit."; |
-} |
- |
-namespace { |
- |
-const char* kForceInstallNotEmptyHelp = |
- "A policy may already be controlling the list of force-installed " |
- "extensions. Please remove all policy settings from your computer " |
- "before running tests. E.g. from /etc/chromium/policies Linux or " |
- "from the registry on Windows, etc."; |
- |
-} |
- |
-// See http://crbug.com/57378 for flakiness details. |
-IN_PROC_BROWSER_TEST_F(ExtensionManagementTest, ExternalPolicyRefresh) { |
- ExtensionService* service = browser()->profile()->GetExtensionService(); |
- const char* kExtensionId = "ogjcoiohnmldgjemafoockdghcjciccf"; |
- // We don't want autoupdate blacklist checks. |
- service->updater()->set_blacklist_checks_enabled(false); |
- |
- FilePath basedir = test_data_dir_.AppendASCII("autoupdate"); |
- |
- // Note: This interceptor gets requests on the IO thread. |
- scoped_refptr<AutoUpdateInterceptor> interceptor(new AutoUpdateInterceptor()); |
- net::URLFetcher::SetEnableInterceptionForTests(true); |
- |
- interceptor->SetResponseOnIOThread("http://localhost/autoupdate/manifest", |
- basedir.AppendASCII("manifest_v2.xml")); |
- interceptor->SetResponseOnIOThread("http://localhost/autoupdate/v2.crx", |
- basedir.AppendASCII("v2.crx")); |
- |
- const size_t size_before = service->extensions()->size(); |
- ASSERT_TRUE(service->disabled_extensions()->is_empty()); |
- |
- PrefService* prefs = browser()->profile()->GetPrefs(); |
- const ListValue* forcelist = |
- prefs->GetList(prefs::kExtensionInstallForceList); |
- ASSERT_TRUE(forcelist->empty()) << kForceInstallNotEmptyHelp; |
- |
- { |
- // Set the policy as a user preference and fire notification observers. |
- ListPrefUpdate pref_update(prefs, prefs::kExtensionInstallForceList); |
- ListValue* forcelist = pref_update.Get(); |
- ASSERT_TRUE(forcelist->empty()); |
- forcelist->Append(Value::CreateStringValue( |
- std::string(kExtensionId) + |
- ";http://localhost/autoupdate/manifest")); |
- } |
- |
- // Check if the extension got installed. |
- ASSERT_TRUE(WaitForExtensionInstall()); |
- ASSERT_EQ(size_before + 1, service->extensions()->size()); |
- const Extension* extension = service->GetExtensionById(kExtensionId, false); |
- ASSERT_TRUE(extension); |
- ASSERT_EQ("2.0", extension->VersionString()); |
- EXPECT_EQ(Extension::EXTERNAL_POLICY_DOWNLOAD, extension->location()); |
- |
- // Try to disable and uninstall the extension which should fail. |
- DisableExtension(kExtensionId); |
- EXPECT_EQ(size_before + 1, service->extensions()->size()); |
- EXPECT_EQ(0u, service->disabled_extensions()->size()); |
- UninstallExtension(kExtensionId); |
- EXPECT_EQ(size_before + 1, service->extensions()->size()); |
- EXPECT_EQ(0u, service->disabled_extensions()->size()); |
- |
- // Now try to disable it through the management api, again failing. |
- ExtensionTestMessageListener listener1("ready", false); |
- ASSERT_TRUE(LoadExtension( |
- test_data_dir_.AppendASCII("management/uninstall_extension"))); |
- ASSERT_TRUE(listener1.WaitUntilSatisfied()); |
- EXPECT_EQ(size_before + 2, service->extensions()->size()); |
- EXPECT_EQ(0u, service->disabled_extensions()->size()); |
- |
- // Check that emptying the list triggers uninstall. |
- { |
- prefs->ClearPref(prefs::kExtensionInstallForceList); |
- } |
- EXPECT_EQ(size_before + 1, service->extensions()->size()); |
- EXPECT_FALSE(service->GetExtensionById(kExtensionId, true)); |
-} |
- |
-// See http://crbug.com/103371 and http://crbug.com/120640. |
-#if defined(ADDRESS_SANITIZER) |
-#define MAYBE_PolicyOverridesUserInstall DISABLED_PolicyOverridesUserInstall |
-#else |
-#define MAYBE_PolicyOverridesUserInstall PolicyOverridesUserInstall |
-#endif |
- |
-IN_PROC_BROWSER_TEST_F(ExtensionManagementTest, |
- MAYBE_PolicyOverridesUserInstall) { |
- ExtensionService* service = browser()->profile()->GetExtensionService(); |
- const char* kExtensionId = "ogjcoiohnmldgjemafoockdghcjciccf"; |
- service->updater()->set_blacklist_checks_enabled(false); |
- const size_t size_before = service->extensions()->size(); |
- FilePath basedir = test_data_dir_.AppendASCII("autoupdate"); |
- ASSERT_TRUE(service->disabled_extensions()->is_empty()); |
- |
- // Note: This interceptor gets requests on the IO thread. |
- scoped_refptr<AutoUpdateInterceptor> interceptor(new AutoUpdateInterceptor()); |
- net::URLFetcher::SetEnableInterceptionForTests(true); |
- |
- interceptor->SetResponseOnIOThread("http://localhost/autoupdate/manifest", |
- basedir.AppendASCII("manifest_v2.xml")); |
- interceptor->SetResponseOnIOThread("http://localhost/autoupdate/v2.crx", |
- basedir.AppendASCII("v2.crx")); |
- |
- // Check that the policy is initially empty. |
- PrefService* prefs = browser()->profile()->GetPrefs(); |
- const ListValue* forcelist = |
- prefs->GetList(prefs::kExtensionInstallForceList); |
- ASSERT_TRUE(forcelist->empty()) << kForceInstallNotEmptyHelp; |
- |
- // User install of the extension. |
- ASSERT_TRUE(InstallExtension(basedir.AppendASCII("v2.crx"), 1)); |
- ASSERT_EQ(size_before + 1, service->extensions()->size()); |
- const Extension* extension = service->GetExtensionById(kExtensionId, false); |
- ASSERT_TRUE(extension); |
- EXPECT_EQ(Extension::INTERNAL, extension->location()); |
- EXPECT_TRUE(service->IsExtensionEnabled(kExtensionId)); |
- |
- // Setup the force install policy. It should override the location. |
- { |
- ListPrefUpdate pref_update(prefs, prefs::kExtensionInstallForceList); |
- ListValue* forcelist = pref_update.Get(); |
- ASSERT_TRUE(forcelist->empty()); |
- forcelist->Append(Value::CreateStringValue( |
- std::string(kExtensionId) + ";http://localhost/autoupdate/manifest")); |
- } |
- ASSERT_TRUE(WaitForExtensionInstall()); |
- ASSERT_EQ(size_before + 1, service->extensions()->size()); |
- extension = service->GetExtensionById(kExtensionId, false); |
- ASSERT_TRUE(extension); |
- EXPECT_EQ(Extension::EXTERNAL_POLICY_DOWNLOAD, extension->location()); |
- EXPECT_TRUE(service->IsExtensionEnabled(kExtensionId)); |
- |
- // Remove the policy, and verify that the extension was uninstalled. |
- // 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. |
- { |
- ListPrefUpdate pref_update(prefs, prefs::kExtensionInstallForceList); |
- ListValue* forcelist = pref_update.Get(); |
- ASSERT_TRUE(!forcelist->empty()); |
- forcelist->Clear(); |
- } |
- ASSERT_EQ(size_before, service->extensions()->size()); |
- extension = service->GetExtensionById(kExtensionId, true); |
- EXPECT_FALSE(extension); |
- |
- // User install again, but have it disabled too before setting the policy. |
- ASSERT_TRUE(InstallExtension(basedir.AppendASCII("v2.crx"), 1)); |
- ASSERT_EQ(size_before + 1, service->extensions()->size()); |
- extension = service->GetExtensionById(kExtensionId, false); |
- ASSERT_TRUE(extension); |
- EXPECT_EQ(Extension::INTERNAL, extension->location()); |
- EXPECT_TRUE(service->IsExtensionEnabled(kExtensionId)); |
- EXPECT_TRUE(service->disabled_extensions()->is_empty()); |
- |
- DisableExtension(kExtensionId); |
- EXPECT_EQ(1u, service->disabled_extensions()->size()); |
- extension = service->GetExtensionById(kExtensionId, true); |
- EXPECT_TRUE(extension); |
- EXPECT_FALSE(service->IsExtensionEnabled(kExtensionId)); |
- |
- // Install the policy again. It should overwrite the extension's location, |
- // and force enable it too. |
- { |
- ListPrefUpdate pref_update(prefs, prefs::kExtensionInstallForceList); |
- ListValue* forcelist = pref_update.Get(); |
- ASSERT_TRUE(forcelist->empty()); |
- forcelist->Append(Value::CreateStringValue( |
- std::string(kExtensionId) + ";http://localhost/autoupdate/manifest")); |
- } |
- ASSERT_TRUE(WaitForExtensionInstall()); |
- ASSERT_EQ(size_before + 1, service->extensions()->size()); |
- extension = service->GetExtensionById(kExtensionId, false); |
- ASSERT_TRUE(extension); |
- EXPECT_EQ(Extension::EXTERNAL_POLICY_DOWNLOAD, extension->location()); |
- EXPECT_TRUE(service->IsExtensionEnabled(kExtensionId)); |
- EXPECT_TRUE(service->disabled_extensions()->is_empty()); |
-} |