| 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())
|
|
|