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 35dc5ec81178ca42bd930191532b08c440efbb6b..38a5b2106c381510ccda1d16190926ea14fdcdc1 100644 |
--- a/chrome/browser/permissions/permission_request_manager.cc |
+++ b/chrome/browser/permissions/permission_request_manager.cc |
@@ -13,6 +13,7 @@ |
#include "build/build_config.h" |
#include "chrome/browser/permissions/permission_request.h" |
#include "chrome/browser/permissions/permission_uma_util.h" |
+#include "chrome/browser/ui/browser_window.h" |
#include "chrome/browser/ui/permission_bubble/permission_prompt.h" |
#include "chrome/common/chrome_features.h" |
#include "chrome/common/chrome_switches.h" |
@@ -20,6 +21,11 @@ |
#include "content/public/browser/navigation_handle.h" |
#include "url/origin.h" |
+#if !defined(OS_ANDROID) |
+#include "chrome/browser/ui/browser_finder.h" |
+#include "chrome/browser/ui/browser_list.h" |
+#endif |
+ |
namespace { |
class CancelledRequest : public PermissionRequest { |
@@ -86,10 +92,15 @@ PermissionRequestManager::PermissionRequestManager( |
#if defined(OS_ANDROID) |
view_ = view_factory_.Run(web_contents); |
view_->SetDelegate(this); |
+#else |
+ BrowserList::AddObserver(this); |
#endif |
} |
PermissionRequestManager::~PermissionRequestManager() { |
+#if !defined(OS_ANDROID) |
+ BrowserList::RemoveObserver(this); |
+#endif |
if (view_ != NULL) |
view_->SetDelegate(NULL); |
@@ -367,6 +378,16 @@ void PermissionRequestManager::Closing() { |
FinalizeBubble(); |
} |
+void PermissionRequestManager::OnBrowserSetLastActive(Browser* browser) { |
+#if !defined(OS_ANDROID) |
+ Browser* found = chrome::FindBrowserWithWebContents(web_contents()); |
+ if (found != browser) |
+ return; |
+ |
+ ScheduleShowBubble(); |
+#endif |
+} |
+ |
void PermissionRequestManager::ScheduleShowBubble() { |
// ::ScheduleShowBubble() will be called again when the main frame will be |
// loaded. |
@@ -391,6 +412,12 @@ void PermissionRequestManager::TriggerShowBubble() { |
queued_frame_requests_.empty()) { |
return; |
} |
+#if !defined(OS_ANDROID) && !defined(OS_MACOSX) |
+ // BrowserWindow::IsActive() always return false in tests on MAC. |
+ Browser* browser = chrome::FindBrowserWithWebContents(web_contents()); |
+ if (browser && !browser->window()->IsActive()) |
+ return; |
+#endif |
if (requests_.empty()) { |
if (queued_requests_.size()) |