summaryrefslogtreecommitdiffstats
path: root/chrome/browser/extensions
diff options
context:
space:
mode:
authordpolukhin@chromium.org <dpolukhin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-09-14 08:19:06 +0000
committerdpolukhin@chromium.org <dpolukhin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-09-14 08:19:06 +0000
commit268e6c1c4c47eb91cfbeca2b5ef7ac39f08c9c6a (patch)
tree9305b95a868f30d502250bb0bf620a3ae1fb9962 /chrome/browser/extensions
parentb938810a67c4f2aae34d03ca8ae2e9ff910fa22c (diff)
downloadchromium_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')
-rw-r--r--chrome/browser/extensions/extension_management_browsertest.cc2
-rw-r--r--chrome/browser/extensions/extensions_service.cc13
-rw-r--r--chrome/browser/extensions/extensions_service.h12
-rw-r--r--chrome/browser/extensions/extensions_service_unittest.cc23
-rw-r--r--chrome/browser/extensions/external_extension_provider.h3
-rw-r--r--chrome/browser/extensions/external_pref_extension_provider.cc7
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);
}
}