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.