Index: content/browser/permissions/permission_service_impl.cc |
diff --git a/content/browser/permissions/permission_service_impl.cc b/content/browser/permissions/permission_service_impl.cc |
index 23bf0981c4b12940354476927567553a8690b584..922091e40909bc0dc2d71267b3a76814408e7177 100644 |
--- a/content/browser/permissions/permission_service_impl.cc |
+++ b/content/browser/permissions/permission_service_impl.cc |
@@ -119,16 +119,21 @@ void PermissionServiceImpl::RequestPermission( |
PermissionType permission_type = PermissionNameToPermissionType(permission); |
int request_id = pending_requests_.Add( |
new PendingRequest(permission_type, GURL(origin), callback)); |
- |
- browser_context->GetPermissionManager()->RequestPermission( |
+ int manager_id = browser_context->GetPermissionManager()->RequestPermission( |
permission_type, |
context_->render_frame_host(), |
- request_id, |
GURL(origin), |
user_gesture, // TODO(mlamouri): should be removed (crbug.com/423770) |
base::Bind(&PermissionServiceImpl::OnRequestPermissionResponse, |
weak_factory_.GetWeakPtr(), |
request_id)); |
+ |
+ // Check if the request still exists. It may have been removed by the |
+ // the response callback. |
+ PendingRequest* pending_request = pending_requests_.Lookup(request_id); |
+ if (!pending_request) |
+ return; |
+ pending_request->manager_id = manager_id; |
} |
void PermissionServiceImpl::RequestPermissions( |
@@ -170,10 +175,8 @@ void PermissionServiceImpl::CancelPendingOperations() { |
for (RequestsMap::Iterator<PendingRequest> it(&pending_requests_); |
!it.IsAtEnd(); it.Advance()) { |
permission_manager->CancelPermissionRequest( |
- it.GetCurrentValue()->permission, |
context_->render_frame_host(), |
- it.GetCurrentKey(), |
- it.GetCurrentValue()->origin); |
+ it.GetCurrentValue()->manager_id); |
} |
pending_requests_.Clear(); |