| Index: chrome/browser/permissions/permission_manager.cc
|
| diff --git a/chrome/browser/permissions/permission_manager.cc b/chrome/browser/permissions/permission_manager.cc
|
| index 44f281a44de2612b6d87d48b1fdc05883eb887d7..217ec7f603762542392ae007cd7a9cadbc3e8b03 100644
|
| --- a/chrome/browser/permissions/permission_manager.cc
|
| +++ b/chrome/browser/permissions/permission_manager.cc
|
| @@ -207,6 +207,8 @@ void PermissionManager::OnContentSettingChanged(
|
| const ContentSettingsPattern& secondary_pattern,
|
| ContentSettingsType content_type,
|
| std::string resource_identifier) {
|
| + std::list<base::Closure> callbacks;
|
| +
|
| for (SubscriptionsMap::iterator iter(&subscriptions_);
|
| !iter.IsAtEnd(); iter.Advance()) {
|
| Subscription* subscription = iter.GetCurrentValue();
|
| @@ -230,6 +232,14 @@ void PermissionManager::OnContentSettingChanged(
|
| continue;
|
|
|
| subscription->current_value = new_value;
|
| - subscription->callback.Run(ContentSettingToPermissionStatus(new_value));
|
| +
|
| + // Add the callback to |callbacks| which will be run after the loop to
|
| + // prevent re-entrance issues.
|
| + callbacks.push_back(
|
| + base::Bind(subscription->callback,
|
| + ContentSettingToPermissionStatus(new_value)));
|
| }
|
| +
|
| + for (const auto& callback : callbacks)
|
| + callback.Run();
|
| }
|
|
|