Chromium Code Reviews| Index: chrome/browser/permissions/permission_request_manager.cc |
| diff --git a/chrome/browser/permissions/permission_request_manager.cc b/chrome/browser/permissions/permission_request_manager.cc |
| index 19d67cfc7acbf04645a87a951b6d16143be8b04e..045c0bc917690a25b5b25e2d2d3dde078064a78b 100644 |
| --- a/chrome/browser/permissions/permission_request_manager.cc |
| +++ b/chrome/browser/permissions/permission_request_manager.cc |
| @@ -223,6 +223,12 @@ void PermissionRequestManager::CancelRequest(PermissionRequest* request) { |
| NOTREACHED(); // Callers should not cancel requests that are not pending. |
| } |
| +void PermissionRequestManager::DismissBubble() { |
| + if (IsBubbleVisible()) |
| + Closing(); |
| + HideBubble(); |
|
raymes
2016/10/26 04:59:11
Could we just remove HideBubble here and then we w
dominickn
2016/10/26 05:54:23
Done.
|
| +} |
| + |
| void PermissionRequestManager::HideBubble() { |
| // Disengage from the existing view if there is one. |
| if (!view_) |
| @@ -395,8 +401,17 @@ void PermissionRequestManager::TriggerShowBubble() { |
| } |
| void PermissionRequestManager::FinalizeBubble() { |
| - if (view_) |
| + if (view_) { |
| view_->Hide(); |
| +#if !defined(OS_ANDROID) |
| + } else if (web_contents() && !web_contents()->IsBeingDestroyed()) { |
| + // Ensure that the view exists. It may have been deleted by HideBubble, |
| + // creating a race condition where if AddRequest is called before |
| + // DisplayPendingRequests, no prompt will be displayed. |
| + view_ = view_factory_.Run(web_contents()); |
| + view_->SetDelegate(this); |
| +#endif |
| + } |
| std::vector<PermissionRequest*>::iterator requests_iter; |
| for (requests_iter = requests_.begin(); |