Index: content/browser/permissions/permission_service_context.cc |
diff --git a/content/browser/permissions/permission_service_context.cc b/content/browser/permissions/permission_service_context.cc |
index cffb065032c65a1d42da59c383a88c087523c929..9292a310d0481b1e9e0566a940306e10bf6ed55a 100644 |
--- a/content/browser/permissions/permission_service_context.cc |
+++ b/content/browser/permissions/permission_service_context.cc |
@@ -27,7 +27,15 @@ class PermissionServiceContext::PermissionSubscription { |
&PermissionSubscription::OnConnectionError, base::Unretained(this))); |
} |
- ~PermissionSubscription() = default; |
+ ~PermissionSubscription() { |
+ DCHECK_NE(id_, 0); |
+ BrowserContext* browser_context = context_->GetBrowserContext(); |
+ DCHECK(browser_context); |
+ if (browser_context->GetPermissionManager()) { |
+ browser_context->GetPermissionManager() |
+ ->UnsubscribePermissionStatusChange(id_); |
+ } |
+ } |
void OnConnectionError() { |
DCHECK_NE(id_, 0); |
@@ -105,13 +113,6 @@ void PermissionServiceContext::ServiceHadConnectionError( |
} |
void PermissionServiceContext::ObserverHadConnectionError(int subscription_id) { |
- BrowserContext* browser_context = GetBrowserContext(); |
- DCHECK(browser_context); |
- if (browser_context->GetPermissionManager()) { |
- browser_context->GetPermissionManager()->UnsubscribePermissionStatusChange( |
- subscription_id); |
- } |
- |
auto it = subscriptions_.find(subscription_id); |
DCHECK(it != subscriptions_.end()); |
subscriptions_.erase(it); |
@@ -139,13 +140,15 @@ void PermissionServiceContext::DidNavigateAnyFrame( |
} |
void PermissionServiceContext::CancelPendingOperations( |
- RenderFrameHost* render_frame_host) const { |
+ RenderFrameHost* render_frame_host) { |
DCHECK(render_frame_host_); |
if (render_frame_host != render_frame_host_) |
return; |
for (const auto& service : services_) |
service->CancelPendingOperations(); |
+ |
+ subscriptions_.clear(); |
} |
BrowserContext* PermissionServiceContext::GetBrowserContext() const { |