Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(84)

Unified Diff: chrome/browser/permissions/permission_request_manager.cc

Issue 2403763003: [Mac] Address buggy permission bubble behaviour on dismissal via ESC. (Closed)
Patch Set: Address comments Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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();

Powered by Google App Engine
This is Rietveld 408576698