| 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 edba0415ee41b8666ec4acfbfa9e4c261c245cd3..79fadd1dca64d289198f0f4f9ef413899698e84d 100644
|
| --- a/content/browser/permissions/permission_service_impl.cc
|
| +++ b/content/browser/permissions/permission_service_impl.cc
|
| @@ -45,7 +45,8 @@ PermissionServiceImpl::PendingRequest::PendingRequest(
|
| PermissionType permission,
|
| const GURL& origin,
|
| const PermissionStatusCallback& callback)
|
| - : permission(permission),
|
| + : id(PermissionManager::kNoPendingOperation),
|
| + permission(permission),
|
| origin(origin),
|
| callback(callback) {
|
| }
|
| @@ -117,18 +118,25 @@ void PermissionServiceImpl::RequestPermission(
|
| }
|
|
|
| PermissionType permission_type = PermissionNameToPermissionType(permission);
|
| - int request_id = pending_requests_.Add(
|
| + int pending_request_id = pending_requests_.Add(
|
| new PendingRequest(permission_type, GURL(origin), callback));
|
|
|
| - browser_context->GetPermissionManager()->RequestPermission(
|
| + int 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));
|
| + pending_request_id));
|
| +
|
| + // Check if the request still exists. It might have been removed by the
|
| + // callback if it was run synchronously.
|
| + PendingRequest* pending_request = pending_requests_.Lookup(
|
| + pending_request_id);
|
| + if (!pending_request)
|
| + return;
|
| + pending_request->id = id;
|
| }
|
|
|
| void PermissionServiceImpl::RequestPermissions(
|
|
|