diff options
author | dpolukhin@chromium.org <dpolukhin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-09-14 08:19:06 +0000 |
---|---|---|
committer | dpolukhin@chromium.org <dpolukhin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-09-14 08:19:06 +0000 |
commit | 268e6c1c4c47eb91cfbeca2b5ef7ac39f08c9c6a (patch) | |
tree | 9305b95a868f30d502250bb0bf620a3ae1fb9962 /chrome/browser/extensions | |
parent | b938810a67c4f2aae34d03ca8ae2e9ff910fa22c (diff) | |
download | chromium_src-268e6c1c4c47eb91cfbeca2b5ef7ac39f08c9c6a.zip chromium_src-268e6c1c4c47eb91cfbeca2b5ef7ac39f08c9c6a.tar.gz chromium_src-268e6c1c4c47eb91cfbeca2b5ef7ac39f08c9c6a.tar.bz2 |
Enable incognito mode from external_extensions.json
Add an ability to enable extension in incognito mode by default from external_extensions.json file.
BUG=chromium-os:6516
TEST=unit_tests --gtest_filter=ExtensionsServiceTest.ExternalPrefProvider
Review URL: http://codereview.chromium.org/3360020
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@59344 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/extensions')
6 files changed, 44 insertions, 16 deletions
diff --git a/chrome/browser/extensions/extension_management_browsertest.cc b/chrome/browser/extensions/extension_management_browsertest.cc index f91bd07..42a19d9 100644 --- a/chrome/browser/extensions/extension_management_browsertest.cc +++ b/chrome/browser/extensions/extension_management_browsertest.cc @@ -279,7 +279,7 @@ IN_PROC_BROWSER_TEST_F(ExtensionManagementTest, ExternalUrlUpdate) { // is race-prone, because instantating the ExtensionService starts a read // of external_extensions.json before this test function starts. service->AddPendingExtensionFromExternalUpdateUrl( - kExtensionId, GURL("http://localhost/autoupdate/manifest")); + kExtensionId, GURL("http://localhost/autoupdate/manifest"), false); // Run autoupdate and make sure version 2 of the extension was installed. service->updater()->CheckNow(); diff --git a/chrome/browser/extensions/extensions_service.cc b/chrome/browser/extensions/extensions_service.cc index 4b50dd7..b71e7859 100644 --- a/chrome/browser/extensions/extensions_service.cc +++ b/chrome/browser/extensions/extensions_service.cc @@ -357,7 +357,8 @@ void ExtensionsService::AddPendingExtensionFromSync( } void ExtensionsService::AddPendingExtensionFromExternalUpdateUrl( - const std::string& id, const GURL& update_url) { + const std::string& id, const GURL& update_url, + bool enable_incognito_on_install) { // Add the extension to this list of extensions to update. // We do not know if the id refers to a theme, so make is_theme unknown. const PendingExtensionInfo::ExpectedCrxType kExpectedCrxType = @@ -365,7 +366,6 @@ void ExtensionsService::AddPendingExtensionFromExternalUpdateUrl( const bool kIsFromSync = false; const bool kInstallSilently = true; const bool kEnableOnInstall = true; - const bool kEnableIncognitoOnInstall = false; if (GetExtensionByIdInternal(id, true, true)) { LOG(DFATAL) << "Trying to add extension " << id @@ -375,7 +375,7 @@ void ExtensionsService::AddPendingExtensionFromExternalUpdateUrl( AddPendingExtensionInternal(id, update_url, kExpectedCrxType, kIsFromSync, kInstallSilently, kEnableOnInstall, - kEnableIncognitoOnInstall); + enable_incognito_on_install); } void ExtensionsService::AddPendingExtensionInternal( @@ -1652,13 +1652,16 @@ void ExtensionsServiceBackend::OnExternalExtensionFileFound( } void ExtensionsServiceBackend::OnExternalExtensionUpdateUrlFound( - const std::string& id, const GURL& update_url) { + const std::string& id, + const GURL& update_url, + bool enable_incognito_on_install) { if (frontend_->GetExtensionById(id, true)) { // Already installed. Do not change the update URL that the extension set. return; } - frontend_->AddPendingExtensionFromExternalUpdateUrl(id, update_url); + frontend_->AddPendingExtensionFromExternalUpdateUrl(id, update_url, + enable_incognito_on_install); external_extension_added_ |= true; } diff --git a/chrome/browser/extensions/extensions_service.h b/chrome/browser/extensions/extensions_service.h index f966ad7..ad02d57 100644 --- a/chrome/browser/extensions/extensions_service.h +++ b/chrome/browser/extensions/extensions_service.h @@ -225,8 +225,10 @@ class ExtensionsService // Given an extension id and an update URL, schedule the extension // to be fetched, installed, and activated. - void AddPendingExtensionFromExternalUpdateUrl(const std::string& id, - const GURL& update_url); + void AddPendingExtensionFromExternalUpdateUrl( + const std::string& id, + const GURL& update_url, + bool enable_incognito_on_install); // Reloads the specified extension. void ReloadExtension(const std::string& extension_id); @@ -561,8 +563,10 @@ class ExtensionsServiceBackend const FilePath& path, Extension::Location location); - virtual void OnExternalExtensionUpdateUrlFound(const std::string& id, - const GURL& update_url); + virtual void OnExternalExtensionUpdateUrlFound( + const std::string& id, + const GURL& update_url, + bool enable_incognito_on_install); // Reloads the given extensions from their manifests on disk (instead of what // we have cached in the prefs). diff --git a/chrome/browser/extensions/extensions_service_unittest.cc b/chrome/browser/extensions/extensions_service_unittest.cc index fa3b1b4..922f604 100644 --- a/chrome/browser/extensions/extensions_service_unittest.cc +++ b/chrome/browser/extensions/extensions_service_unittest.cc @@ -154,6 +154,10 @@ class MockProviderVisitor : public ExternalExtensionProvider::Visitor { MockProviderVisitor() : ids_found_(0) { } + void SetIncognitoExtensions(const std::set<std::string>& incognito_list) { + incognito_list_ = incognito_list; + } + int Visit(const std::string& json_data, const std::set<std::string>& ignore_list) { // Give the test json file to the provider for parsing. @@ -209,8 +213,10 @@ class MockProviderVisitor : public ExternalExtensionProvider::Visitor { } } - virtual void OnExternalExtensionUpdateUrlFound(const std::string& id, - const GURL& update_url) { + virtual void OnExternalExtensionUpdateUrlFound( + const std::string& id, + const GURL& update_url, + bool enable_incognito_on_install) { ++ids_found_; DictionaryValue* pref; // This tests is to make sure that the provider only notifies us of the @@ -222,6 +228,8 @@ class MockProviderVisitor : public ExternalExtensionProvider::Visitor { if (pref) { // Remove it so we won't count it again. prefs_->Remove(id, NULL); + + EXPECT_EQ(incognito_list_.count(id) == 1, enable_incognito_on_install); } } @@ -230,6 +238,7 @@ class MockProviderVisitor : public ExternalExtensionProvider::Visitor { scoped_ptr<ExternalPrefExtensionProvider> provider_; scoped_ptr<DictionaryValue> prefs_; + std::set<std::string> incognito_list_; DISALLOW_COPY_AND_ASSIGN(MockProviderVisitor); }; @@ -1589,7 +1598,7 @@ TEST_F(ExtensionsServiceTest, UpdatePendingTheme) { // or not. TEST_F(ExtensionsServiceTest, UpdatePendingExternalCrx) { InitializeEmptyExtensionsService(); - service_->AddPendingExtensionFromExternalUpdateUrl(theme_crx, GURL()); + service_->AddPendingExtensionFromExternalUpdateUrl(theme_crx, GURL(), false); EXPECT_TRUE(ContainsKey(service_->pending_extensions(), theme_crx)); @@ -2318,11 +2327,17 @@ TEST_F(ExtensionsServiceTest, ExternalPrefProvider) { " \"external_version\": \"2.0\"" " }," " \"cccccccccccccccccccccccccccccccc\": {" - " \"external_update_url\": \"http:\\\\foo.com/update\"" + " \"external_update_url\": \"http:\\\\foo.com/update\"," + " \"incognito\": true" " }" "}"; MockProviderVisitor visitor; + + std::set<std::string> incognito_list; + incognito_list.insert("cccccccccccccccccccccccccccccccc"); + visitor.SetIncognitoExtensions(incognito_list); + std::set<std::string> ignore_list; EXPECT_EQ(3, visitor.Visit(json_data, ignore_list)); ignore_list.insert("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); diff --git a/chrome/browser/extensions/external_extension_provider.h b/chrome/browser/extensions/external_extension_provider.h index eddea62..83086e0 100644 --- a/chrome/browser/extensions/external_extension_provider.h +++ b/chrome/browser/extensions/external_extension_provider.h @@ -32,7 +32,8 @@ class ExternalExtensionProvider { virtual void OnExternalExtensionUpdateUrlFound( const std::string& id, - const GURL& update_url) = 0; + const GURL& update_url, + bool enable_incognito_on_install) = 0; protected: virtual ~Visitor() {} diff --git a/chrome/browser/extensions/external_pref_extension_provider.cc b/chrome/browser/extensions/external_pref_extension_provider.cc index 3eaafc9..d854a7f 100644 --- a/chrome/browser/extensions/external_pref_extension_provider.cc +++ b/chrome/browser/extensions/external_pref_extension_provider.cc @@ -18,6 +18,7 @@ const char kLocation[] = "location"; const char kState[] = "state"; const char kExternalCrx[] = "external_crx"; const char kExternalVersion[] = "external_version"; +const char kIncognito[] = "incognito"; const char kExternalUpdateUrl[] = "external_update_url"; ExternalPrefExtensionProvider::ExternalPrefExtensionProvider() { @@ -57,12 +58,15 @@ void ExternalPrefExtensionProvider::VisitRegisteredExtension( FilePath::StringType external_crx; std::string external_version; std::string external_update_url; + bool enable_incognito_on_install = false; bool has_external_crx = extension->GetString(kExternalCrx, &external_crx); bool has_external_version = extension->GetString(kExternalVersion, &external_version); bool has_external_update_url = extension->GetString(kExternalUpdateUrl, &external_update_url); + extension->GetBoolean(kIncognito, &enable_incognito_on_install); + if (has_external_crx != has_external_version) { LOG(WARNING) << "Malformed extension dictionary for extension: " << extension_id.c_str() << ". " << kExternalCrx @@ -117,7 +121,8 @@ void ExternalPrefExtensionProvider::VisitRegisteredExtension( << "\"."; continue; } - visitor->OnExternalExtensionUpdateUrlFound(extension_id, update_url); + visitor->OnExternalExtensionUpdateUrlFound(extension_id, update_url, + enable_incognito_on_install); } } |