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..44cf78cc0d4d9d7a729727a9e1de06c7b260fffe 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,38 @@ 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); |
+ if (new_value == 0) { |
Yoyo Zhou
2012/08/15 00:58:09
Change 0 to DISABLE_REASON_NONE?
eaugusti
2012/08/15 17:36:11
Done.
|
+ UpdateExtensionPref(extension_id, kPrefDisableReasons, NULL); |
+ } else { |
+ UpdateExtensionPref(extension_id, kPrefDisableReasons, |
+ Value::CreateIntegerValue(new_value)); |
+ } |
} |
-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, NULL); |
} |
void ExtensionPrefs::UpdateBlacklist( |
@@ -902,6 +919,40 @@ 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 && |
Yoyo Zhou
2012/08/15 00:58:09
nit: I would remove this if statement as well as t
eaugusti
2012/08/15 17:36:11
Done.
|
+ value < Extension::DEPRECATED_DISABLE_LAST) { |
+ switch (value) { |
+ case Extension::DEPRECATED_DISABLE_USER_ACTION: |
+ new_value = Extension::DISABLE_USER_ACTION; |
+ break; |
+ case Extension::DEPRECATED_DISABLE_PERMISSIONS_INCREASE: |
+ new_value = Extension::DISABLE_PERMISSIONS_INCREASE; |
+ break; |
+ case Extension::DEPRECATED_DISABLE_RELOAD: |
+ new_value = Extension::DISABLE_RELOAD; |
+ break; |
+ default: |
+ NOTREACHED(); |
+ return; |
+ } |
+ } |
+ |
+ 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 +1939,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 |