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

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

Issue 10828316: Support multiple disable reasons in ExtensionPerfs (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 8 years, 4 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/extension_service.cc » ('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 2246e49a0413563493c7c38cd8ac057d76f6d812..0a6a600a0666c0c090d723dec53659104390ef15 100644
--- a/chrome/browser/extensions/extension_prefs.cc
+++ b/chrome/browser/extensions/extension_prefs.cc
@@ -64,8 +64,12 @@ const char kPrefOrphanAcknowledged[] = "ack_orphan";
// Indicates whether to show an install warning when the user enables.
const char kExtensionDidEscalatePermissions[] = "install_warning_on_enable";
+// DO NOT USE, use kPrefDisableReasons instead.
// Indicates whether the extension was updated while it was disabled.
-const char kPrefDisableReason[] = "disable_reason";
+const char kDeprecatedPrefDisableReason[] = "disable_reason";
+
+// A bitmask of all the reasons an extension is disabled.
+const char kPrefDisableReasons[] = "disable_reasons";
// A preference that tracks browser action toolbar configuration. This is a list
// object stored in the Preferences file. The extensions are stored by ID.
@@ -696,25 +700,36 @@ void ExtensionPrefs::SetDidExtensionEscalatePermissions(
Value::CreateBooleanValue(did_escalate));
}
-Extension::DisableReason ExtensionPrefs::GetDisableReason(
- const std::string& extension_id) {
+int ExtensionPrefs::GetDisableReasons(const std::string& extension_id) {
int value = -1;
- if (ReadExtensionPrefInteger(extension_id, kPrefDisableReason, &value) &&
- value >= 0 && value < Extension::DISABLE_LAST) {
- return static_cast<Extension::DisableReason>(value);
+ if (ReadExtensionPrefInteger(extension_id, kPrefDisableReasons, &value) &&
+ value >= 0) {
+ return value;
}
- return Extension::DISABLE_UNKNOWN;
+ return Extension::DISABLE_NONE;
}
-void ExtensionPrefs::SetDisableReason(const std::string& extension_id,
+void ExtensionPrefs::AddDisableReason(const std::string& extension_id,
Extension::DisableReason disable_reason) {
- UpdateExtensionPref(
- extension_id, kPrefDisableReason,
- Value::CreateIntegerValue(static_cast<int>(disable_reason)));
+ int new_value = GetDisableReasons(extension_id) |
+ static_cast<int>(disable_reason);
+ UpdateExtensionPref(extension_id, kPrefDisableReasons,
+ Value::CreateIntegerValue(new_value));
+}
+
+void ExtensionPrefs::RemoveDisableReason(
+ const std::string& extension_id,
+ Extension::DisableReason disable_reason) {
+ int new_value = GetDisableReasons(extension_id) &
+ ~static_cast<int>(disable_reason);
+ UpdateExtensionPref(extension_id, kPrefDisableReasons,
+ Value::CreateIntegerValue(new_value));
Yoyo Zhou 2012/08/15 00:21:31 This will still store a 0 when there are no disabl
eaugusti 2012/08/15 00:48:50 Ok. Also changing ClearDisableReasons() update wit
}
-void ExtensionPrefs::RemoveDisableReason(const std::string& extension_id) {
- UpdateExtensionPref(extension_id, kPrefDisableReason, NULL);
+void ExtensionPrefs::ClearDisableReasons(const std::string& extension_id) {
+ UpdateExtensionPref(
+ extension_id, kPrefDisableReasons,
+ Value::CreateIntegerValue(static_cast<int>(Extension::DISABLE_NONE)));
}
void ExtensionPrefs::UpdateBlacklist(
@@ -902,6 +917,27 @@ void ExtensionPrefs::MigratePermissions(const ExtensionIdSet& extension_ids) {
}
}
+void ExtensionPrefs::MigrateDisableReasons(
+ const ExtensionIdSet& extension_ids) {
+ for (ExtensionIdSet::const_iterator ext_id =
+ extension_ids.begin(); ext_id != extension_ids.end(); ++ext_id) {
+ int value = -1;
+ if (ReadExtensionPrefInteger(*ext_id, kDeprecatedPrefDisableReason,
+ &value)) {
+ int new_value = Extension::DISABLE_NONE;
+ if (value > Extension::DEPRECATED_DISABLE_UNKNOWN &&
+ value < Extension::DEPRECATED_DISABLE_LAST) {
+ new_value = 1 << (value - 1);
Yoyo Zhou 2012/08/15 00:21:31 This is a little opaque. Why not just have a switc
eaugusti 2012/08/15 00:48:50 Done.
+ }
+
+ UpdateExtensionPref(*ext_id, kPrefDisableReasons,
+ Value::CreateIntegerValue(new_value));
+ // Remove the old disable reason.
+ UpdateExtensionPref(*ext_id, kDeprecatedPrefDisableReason, NULL);
+ }
+ }
+}
+
PermissionSet* ExtensionPrefs::GetGrantedPermissions(
const std::string& extension_id) {
CHECK(Extension::IdIsValid(extension_id));
@@ -1888,6 +1924,7 @@ void ExtensionPrefs::InitPrefStore(bool extensions_disabled) {
FixMissingPrefs(extension_ids);
MigratePermissions(extension_ids);
+ MigrateDisableReasons(extension_ids);
extension_sorting_->Initialize(extension_ids);
// Store extension controlled preference values in the
« no previous file with comments | « chrome/browser/extensions/extension_prefs.h ('k') | chrome/browser/extensions/extension_service.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698