Extensions: Migrate off DEPRECATED_DISABLE_UNKNOWN_FROM_SYNC
This disable reason hasn't been in active use since M48, but it
turns out our previous migration code didn't catch all cases.
This CL adds (hopefully) more robust migration code.
Bug: 860198
Change-Id: I3b81a8cc3941459d501cc3b4d8381250b374f0ab
Reviewed-on: https://chromium-review.googlesource.com/1124686
Reviewed-by: Devlin <[email protected]>
Commit-Queue: Marc Treib <[email protected]>
Cr-Commit-Position: refs/heads/master@{#573164}
diff --git a/chrome/browser/extensions/extension_service.cc b/chrome/browser/extensions/extension_service.cc
index 3eeead6a..781da8e 100644
--- a/chrome/browser/extensions/extension_service.cc
+++ b/chrome/browser/extensions/extension_service.cc
@@ -1298,33 +1298,31 @@
GrantPermissions(extension);
}
+ // TODO(crbug.com/860198): Before M48, extensions that came to us from sync in
+ // a disabled state got assigned disable_reason::DISABLE_UNKNOWN_FROM_SYNC.
+ // That reason isn't used anymore since the actual disable reason(s) are now
+ // synced. This code is here to migrate any existing old state.
+ if (disable_reasons & disable_reason::DEPRECATED_DISABLE_UNKNOWN_FROM_SYNC) {
+ // Remove the disable_reason::DEPRECATED_DISABLE_UNKNOWN_FROM_SYNC
+ // reason.
+ disable_reasons &= ~disable_reason::DEPRECATED_DISABLE_UNKNOWN_FROM_SYNC;
+ extension_prefs_->RemoveDisableReason(
+ extension->id(), disable_reason::DEPRECATED_DISABLE_UNKNOWN_FROM_SYNC);
+ // If there was no privilege increase, it was likely disabled by the user.
+ // (If there *was* a privilege increase, we'll add an appropriate reason
+ // later on, so nothing needs to be done here.)
+ if (!is_privilege_increase)
+ disable_reasons |= disable_reason::DISABLE_USER_ACTION;
+ }
+
bool previously_disabled =
extension_prefs_->IsExtensionDisabled(extension->id());
- // TODO(treib): Is the |is_extension_loaded| check needed here?
+ // TODO(devlin): Is the |is_extension_loaded| check needed here?
if (is_extension_loaded && previously_disabled) {
// Legacy disabled extensions do not have a disable reason. Infer that it
// was likely disabled by the user.
if (disable_reasons == disable_reason::DISABLE_NONE)
disable_reasons |= disable_reason::DISABLE_USER_ACTION;
-
- // Extensions that came to us disabled from sync need a similar inference,
- // except based on the new version's permissions.
- // TODO(treib,devlin): Since M48,
- // disable_reason::DISABLE_UNKNOWN_FROM_SYNC isn't used anymore;
- // this code is still here to migrate any existing old state. Remove it
- // after some grace period.
- if (disable_reasons &
- disable_reason::DEPRECATED_DISABLE_UNKNOWN_FROM_SYNC) {
- // Remove the disable_reason::DISABLE_UNKNOWN_FROM_SYNC
- // reason.
- disable_reasons &= ~disable_reason::DEPRECATED_DISABLE_UNKNOWN_FROM_SYNC;
- extension_prefs_->RemoveDisableReason(
- extension->id(),
- disable_reason::DEPRECATED_DISABLE_UNKNOWN_FROM_SYNC);
- // If there was no privilege increase, it was likely disabled by the user.
- if (!is_privilege_increase)
- disable_reasons |= disable_reason::DISABLE_USER_ACTION;
- }
}
// If the extension is disabled due to a permissions increase, but does in