Add 'from_webstore' state to Extensions, so renderer code can enforce CWS restrictions.
Review URL: http://codereview.chromium.org/7384010
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@92752 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome/browser/extensions/extension_service.cc b/chrome/browser/extensions/extension_service.cc
index c0ce5ecd..ec155ab 100644
--- a/chrome/browser/extensions/extension_service.cc
+++ b/chrome/browser/extensions/extension_service.cc
@@ -466,10 +466,6 @@
return (referrer_valid && download_valid);
}
-bool ExtensionService::IsFromWebStore(const std::string& id) const {
- return extension_prefs_->IsFromWebStore(id);
-}
-
bool ExtensionService::IsDownloadFromMiniGallery(const GURL& download_url) {
return StartsWithASCII(download_url.spec(),
extension_urls::kMiniGalleryDownloadPrefix,
@@ -1106,6 +1102,8 @@
flags |= Extension::STRICT_ERROR_CHECKS;
if (extension_prefs_->AllowFileAccess(info->extension_id))
flags |= Extension::ALLOW_FILE_ACCESS;
+ if (extension_prefs_->IsFromWebStore(info->extension_id))
+ flags |= Extension::FROM_WEBSTORE;
std::string error;
scoped_refptr<const Extension> extension(
extension_file_util::LoadExtension(
@@ -1257,6 +1255,8 @@
flags |= Extension::STRICT_ERROR_CHECKS;
if (extension_prefs_->AllowFileAccess(info.extension_id))
flags |= Extension::ALLOW_FILE_ACCESS;
+ if (extension_prefs_->IsFromWebStore(info.extension_id))
+ flags |= Extension::FROM_WEBSTORE;
extension = Extension::Create(
info.extension_path,
info.extension_location,
diff --git a/chrome/browser/extensions/extension_service.h b/chrome/browser/extensions/extension_service.h
index 611056ab..491a80aa 100644
--- a/chrome/browser/extensions/extension_service.h
+++ b/chrome/browser/extensions/extension_service.h
@@ -166,9 +166,6 @@
bool IsDownloadFromGallery(const GURL& download_url,
const GURL& referrer_url);
- // Returns true if the extension was installed from the web store.
- bool IsFromWebStore(const std::string& id) const;
-
// Determine if the downloaded extension came from the theme mini-gallery,
// Used to test if we need to show the "Loading" dialog for themes.
static bool IsDownloadFromMiniGallery(const GURL& download_url);
diff --git a/chrome/browser/extensions/extension_service_unittest.cc b/chrome/browser/extensions/extension_service_unittest.cc
index eb16e8e..a6b896db 100644
--- a/chrome/browser/extensions/extension_service_unittest.cc
+++ b/chrome/browser/extensions/extension_service_unittest.cc
@@ -1897,7 +1897,8 @@
ValidateIntegerPref(good_crx, "location", Extension::INTERNAL);
}
-// Test that extension prefs remember if .crx came from web store.
+// Test that we can determine if extensions came from the
+// Chrome web store.
TEST_F(ExtensionServiceTest, FromWebStore) {
InitializeEmptyExtensionService();
@@ -1911,7 +1912,9 @@
ASSERT_EQ(0u, GetErrors().size());
ValidatePrefKeyCount(1);
ValidateBooleanPref(good_crx, "from_webstore", false);
- ASSERT_FALSE(service_->IsFromWebStore(good_crx));
+
+ const Extension* extension = service_->extensions()->at(0);
+ ASSERT_FALSE(extension->from_webstore());
installed_ = NULL;
loaded_.clear();
@@ -1926,7 +1929,11 @@
ASSERT_EQ(0u, GetErrors().size());
ValidatePrefKeyCount(1);
ValidateBooleanPref(good_crx, "from_webstore", true);
- ASSERT_TRUE(service_->IsFromWebStore(good_crx));
+
+ // Reload so extension gets reinitialized with new value.
+ service_->ReloadExtensions();
+ extension = service_->extensions()->at(0);
+ ASSERT_TRUE(extension->from_webstore());
}
// Test upgrading a signed extension.