Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(375)

Unified Diff: chrome/browser/extensions/extension_prefs.cc

Issue 1157005: Fix 2 bugs related to remembering loaded unpacked extensions. (Closed)
Patch Set: review feedback 2 Created 10 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/extensions/extension_prefs.h ('k') | chrome/browser/extensions/extensions_service.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/extensions/extension_prefs.cc
diff --git a/chrome/browser/extensions/extension_prefs.cc b/chrome/browser/extensions/extension_prefs.cc
index c9f391f56123bdf7a2ed8f29613bec22c494c78c..30409031b4b0ba27012d490bb1be0bba1608c836 100644
--- a/chrome/browser/extensions/extension_prefs.cc
+++ b/chrome/browser/extensions/extension_prefs.cc
@@ -36,7 +36,7 @@ const wchar_t kPrefVersion[] = L"manifest.version";
const wchar_t kPrefBlacklist[] = L"blacklist";
// Indicates whether to show an install warning when the user enables.
-const wchar_t kShowInstallWarning[] = L"install_warning_on_enable";
+const wchar_t kExtensionDidEscalatePermissions[] = L"install_warning_on_enable";
// A preference that tracks extension shelf configuration. This is a list
// object read from the Preferences file, containing a list of toolstrip URLs.
@@ -188,7 +188,15 @@ bool ExtensionPrefs::IsExtensionBlacklisted(const std::string& extension_id) {
bool ExtensionPrefs::DidExtensionEscalatePermissions(
const std::string& extension_id) {
- return ReadExtensionPrefBoolean(extension_id, kShowInstallWarning);
+ return ReadExtensionPrefBoolean(extension_id,
+ kExtensionDidEscalatePermissions);
+}
+
+void ExtensionPrefs::SetDidExtensionEscalatePermissions(
+ Extension* extension, bool did_escalate) {
+ UpdateExtensionPref(extension->id(), kExtensionDidEscalatePermissions,
+ Value::CreateBooleanValue(did_escalate));
+ prefs_->SavePersistentPrefs();
}
void ExtensionPrefs::UpdateBlacklist(
@@ -418,13 +426,6 @@ void ExtensionPrefs::SetExtensionState(Extension* extension,
prefs_->SavePersistentPrefs();
}
-void ExtensionPrefs::SetShowInstallWarningOnEnable(
- Extension* extension, bool require) {
- UpdateExtensionPref(extension->id(), kShowInstallWarning,
- Value::CreateBooleanValue(require));
- prefs_->SavePersistentPrefs();
-}
-
std::string ExtensionPrefs::GetVersionString(const std::string& extension_id) {
DictionaryValue* extension = GetExtensionPref(extension_id);
if (!extension)
@@ -499,81 +500,103 @@ DictionaryValue* ExtensionPrefs::GetExtensionPref(
return extension;
}
-// static
-ExtensionPrefs::ExtensionsInfo* ExtensionPrefs::CollectExtensionsInfo(
- ExtensionPrefs* prefs) {
- scoped_ptr<DictionaryValue> extension_data(
- prefs->CopyCurrentExtensions());
+// Helper function for GetInstalledExtensionsInfo.
+static ExtensionInfo* GetInstalledExtensionInfoImpl(
+ DictionaryValue* extension_data,
+ DictionaryValue::key_iterator extension_id) {
+ DictionaryValue* ext;
+ if (!extension_data->GetDictionaryWithoutPathExpansion(*extension_id, &ext)) {
+ LOG(WARNING) << "Invalid pref for extension " << *extension_id;
+ NOTREACHED();
+ return NULL;
+ }
+ if (ext->HasKey(kPrefBlacklist)) {
+ bool is_blacklisted = false;
+ if (!ext->GetBoolean(kPrefBlacklist, &is_blacklisted)) {
+ NOTREACHED() << "Invalid blacklist pref:" << *extension_id;
+ return NULL;
+ }
+ if (is_blacklisted) {
+ LOG(WARNING) << "Blacklisted extension: " << *extension_id;
+ return NULL;
+ }
+ }
+ int state_value;
+ if (!ext->GetInteger(kPrefState, &state_value)) {
+ LOG(WARNING) << "Missing state pref for extension " << *extension_id;
+ NOTREACHED();
+ return NULL;
+ }
+ if (state_value == Extension::KILLBIT) {
+ LOG(WARNING) << "External extension has been uninstalled by the user "
+ << *extension_id;
+ return NULL;
+ }
+ FilePath::StringType path;
+ if (!ext->GetString(kPrefPath, &path)) {
+ LOG(WARNING) << "Missing path pref for extension " << *extension_id;
+ NOTREACHED();
+ return NULL;
+ }
+ int location_value;
+ if (!ext->GetInteger(kPrefLocation, &location_value)) {
+ LOG(WARNING) << "Missing location pref for extension " << *extension_id;
+ NOTREACHED();
+ return NULL;
+ }
+
+ // Only the following extension types can be installed permanently in the
+ // preferences.
+ Extension::Location location =
+ static_cast<Extension::Location>(location_value);
+ if (location != Extension::INTERNAL &&
+ location != Extension::LOAD &&
+ !Extension::IsExternalLocation(location)) {
+ NOTREACHED();
+ return NULL;
+ }
+
+ DictionaryValue* manifest = NULL;
+ if (!ext->GetDictionary(kPrefManifest, &manifest)) {
+ LOG(WARNING) << "Missing manifest for extension " << *extension_id;
+ // Just a warning for now.
+ }
+
+ return new ExtensionInfo(manifest, WideToASCII(*extension_id),
+ FilePath(path), location);
+}
+
+ExtensionPrefs::ExtensionsInfo* ExtensionPrefs::GetInstalledExtensionsInfo() {
+ scoped_ptr<DictionaryValue> extension_data(CopyCurrentExtensions());
ExtensionsInfo* extensions_info = new ExtensionsInfo;
for (DictionaryValue::key_iterator extension_id(
extension_data->begin_keys());
extension_id != extension_data->end_keys(); ++extension_id) {
- DictionaryValue* ext;
- if (!extension_data->GetDictionaryWithoutPathExpansion(*extension_id,
- &ext)) {
- LOG(WARNING) << "Invalid pref for extension " << *extension_id;
- NOTREACHED();
- continue;
- }
- if (ext->HasKey(kPrefBlacklist)) {
- bool is_blacklisted = false;
- if (!ext->GetBoolean(kPrefBlacklist, &is_blacklisted)) {
- NOTREACHED() << "Invalid blacklist pref:" << *extension_id;
- continue;
- }
- if (is_blacklisted) {
- LOG(WARNING) << "Blacklisted extension: " << *extension_id;
- continue;
- }
- }
- int state_value;
- if (!ext->GetInteger(kPrefState, &state_value)) {
- LOG(WARNING) << "Missing state pref for extension " << *extension_id;
- NOTREACHED();
- continue;
- }
- if (state_value == Extension::KILLBIT) {
- LOG(WARNING) << "External extension has been uninstalled by the user "
- << *extension_id;
- continue;
- }
- FilePath::StringType path;
- if (!ext->GetString(kPrefPath, &path)) {
- LOG(WARNING) << "Missing path pref for extension " << *extension_id;
- NOTREACHED();
- continue;
- }
- int location_value;
- if (!ext->GetInteger(kPrefLocation, &location_value)) {
- LOG(WARNING) << "Missing location pref for extension " << *extension_id;
- NOTREACHED();
- continue;
- }
+ ExtensionInfo* info = GetInstalledExtensionInfoImpl(extension_data.get(),
+ extension_id);
+ if (info)
+ extensions_info->push_back(linked_ptr<ExtensionInfo>(info));
+ }
- // Only the following extension types can be installed permanently in the
- // preferences.
- Extension::Location location =
- static_cast<Extension::Location>(location_value);
- if (location != Extension::INTERNAL &&
- location != Extension::LOAD &&
- !Extension::IsExternalLocation(location)) {
- NOTREACHED();
- continue;
- }
+ return extensions_info;
+}
- DictionaryValue* manifest = NULL;
- if (!ext->GetDictionary(kPrefManifest, &manifest)) {
- LOG(WARNING) << "Missing manifest for extension " << *extension_id;
- // Just a warning for now.
- }
+ExtensionInfo* ExtensionPrefs::GetInstalledExtensionInfo(
+ const std::string& extension_id) {
+ scoped_ptr<DictionaryValue> extension_data(CopyCurrentExtensions());
- extensions_info->push_back(linked_ptr<ExtensionInfo>(new ExtensionInfo(
- manifest, WideToASCII(*extension_id), FilePath(path), location)));
+ for (DictionaryValue::key_iterator extension_iter(
+ extension_data->begin_keys());
+ extension_iter != extension_data->end_keys(); ++extension_iter) {
+ if (WideToASCII(*extension_iter) == extension_id) {
+ return GetInstalledExtensionInfoImpl(extension_data.get(),
+ extension_iter);
+ }
}
- return extensions_info;
+ return NULL;
}
// static
« no previous file with comments | « chrome/browser/extensions/extension_prefs.h ('k') | chrome/browser/extensions/extensions_service.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698