diff options
| author | mlamouri <mlamouri@chromium.org> | 2015-04-01 16:30:57 -0700 |
|---|---|---|
| committer | Commit bot <commit-bot@chromium.org> | 2015-04-01 23:31:23 +0000 |
| commit | a500a0fbbfbaac5ddf2f58d52be34a4d1df03f91 (patch) | |
| tree | c06ef0eb5fa9fa42111f9ec77d954cd7ec7d76ff /chrome | |
| parent | 23cb362e78184197f00f2d136ad1e7f148ef2a88 (diff) | |
| download | chromium_src-a500a0fbbfbaac5ddf2f58d52be34a4d1df03f91.zip chromium_src-a500a0fbbfbaac5ddf2f58d52be34a4d1df03f91.tar.gz chromium_src-a500a0fbbfbaac5ddf2f58d52be34a4d1df03f91.tar.bz2 | |
Improve Mojo permission service and chrome::PermissionManager observing.
This is fixing two bugs:
- mojo callbacks were not always run, which is now required.
- the service was not always unsubscribing from the PermissionManager,
keeping stalled subscriptions alive.
BUG=430238, 437770
Review URL: https://codereview.chromium.org/1054653002
Cr-Commit-Position: refs/heads/master@{#323368}
Diffstat (limited to 'chrome')
| -rw-r--r-- | chrome/browser/permissions/permission_manager.cc | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/chrome/browser/permissions/permission_manager.cc b/chrome/browser/permissions/permission_manager.cc index 44f281a..217ec7f 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(); } |
