Index: chrome/browser/extensions/permissions_updater.cc |
diff --git a/chrome/browser/extensions/permissions_updater.cc b/chrome/browser/extensions/permissions_updater.cc |
index 9d4a7b6f9dcabf2084940fc0ab69304650d20910..f25fe9f43391bc1ba82e41b0f9b26b582d950924 100644 |
--- a/chrome/browser/extensions/permissions_updater.cc |
+++ b/chrome/browser/extensions/permissions_updater.cc |
@@ -112,14 +112,23 @@ void PermissionsUpdater::InitializeActivePermissions( |
PermissionsParser::GetRequiredPermissions(extension), |
adjusted_active); |
- SetActivePermissions(extension, adjusted_active); |
+ extension->permissions_data()->InitializePermissions(adjusted_active, |
+ extension); |
+ // We record the active permissions after PermissionsData finishes |
+ // initializing, so that we properly record any withheld permissions. |
+ // TODO(rdevlin.cronin) This is badly factored. We should do all the |
+ // initialization in one place - either here, in PermissionsData, or in some |
+ // other object. |
+ ExtensionPrefs::Get(browser_context_)->SetActivePermissions( |
+ extension->id(), extension->permissions_data()->active_permissions()); |
} |
void PermissionsUpdater::SetActivePermissions( |
const Extension* extension, const PermissionSet* permissions) { |
ExtensionPrefs::Get(browser_context_)->SetActivePermissions( |
extension->id(), permissions); |
- extension->permissions_data()->SetActivePermissions(permissions); |
+ extension->permissions_data()->SetPermissions( |
+ permissions, extension->permissions_data()->withheld_permissions()); |
} |
void PermissionsUpdater::DispatchEvent( |
@@ -168,12 +177,11 @@ void PermissionsUpdater::NotifyPermissionsUpdated( |
content::Details<UpdatedExtensionPermissionsInfo>(&info)); |
ExtensionMsg_UpdatePermissions_Params params; |
- params.reason_id = static_cast<int>(reason); |
params.extension_id = extension->id(); |
- params.apis = changed->apis(); |
- params.manifest_permissions = changed->manifest_permissions(); |
- params.explicit_hosts = changed->explicit_hosts(); |
- params.scriptable_hosts = changed->scriptable_hosts(); |
+ params.active_permissions = ExtensionMsg_PermissionSetStruct( |
+ extension->permissions_data()->active_permissions()); |
+ params.withheld_permissions = ExtensionMsg_PermissionSetStruct( |
+ extension->permissions_data()->withheld_permissions()); |
// Send the new permissions to the renderers. |
for (RenderProcessHost::iterator i(RenderProcessHost::AllHostsIterator()); |