Chromium Code Reviews| 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 |