Index: chrome/browser/extensions/extension_service.cc |
diff --git a/chrome/browser/extensions/extension_service.cc b/chrome/browser/extensions/extension_service.cc |
index 7636dfe7101bd3f8bead57445336aa37760f9fe9..76ac9a2105c1d6f7e689a716ddfb33236fba9e0f 100644 |
--- a/chrome/browser/extensions/extension_service.cc |
+++ b/chrome/browser/extensions/extension_service.cc |
@@ -1709,6 +1709,23 @@ void ExtensionService::OnExtensionInstalled( |
void ExtensionService::OnExtensionManagementSettingsChanged() { |
error_controller_->ShowErrorIfNeeded(); |
+ |
+ // Revokes blocked permissions from active_permissions for all extensions. |
+ extensions::ExtensionManagement* settings = |
+ extensions::ExtensionManagementFactory::GetForBrowserContext(profile()); |
+ CHECK(settings); |
+ scoped_ptr<ExtensionSet> all_extensions( |
+ registry_->GenerateInstalledExtensionsSet()); |
+ for (const auto& extension : *all_extensions.get()) { |
+ if (!settings->IsPermissionSetAllowed( |
+ extension->id(), |
+ extension->permissions_data()->active_permissions())) { |
+ extensions::PermissionsUpdater(profile()).RemovePermissions( |
+ extension.get(), |
+ settings->GetBlockedPermissions(extension->id()).get()); |
+ } |
+ } |
+ |
CheckManagementPolicy(); |
} |