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 1ed90638f96563b93e44daf7524b4e9583c078b0..4750fc2a9fd08d1c25236c25d4ec81540761d015 100644 |
--- a/chrome/browser/permissions/permission_request_manager.cc |
+++ b/chrome/browser/permissions/permission_request_manager.cc |
@@ -12,6 +12,8 @@ |
#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_finder.h" |
+#include "chrome/browser/ui/browser_list.h" |
#include "chrome/browser/ui/permission_bubble/permission_prompt.h" |
#include "chrome/common/chrome_features.h" |
#include "chrome/common/chrome_switches.h" |
@@ -79,12 +81,16 @@ PermissionRequestManager::PermissionRequestManager( |
: content::WebContentsObserver(web_contents), |
view_factory_(base::Bind(&PermissionPrompt::Create)), |
view_(nullptr), |
+ browser_active_(false), |
sky
2017/03/27 22:43:45
Why do you need to cache browser_active_ ? Can't T
Qiang(Joe) Xu
2017/04/06 22:22:51
Yes, we can eliminate the usage of browser_active_
|
main_frame_has_fully_loaded_(false), |
persist_(true), |
auto_response_for_test_(NONE), |
- weak_factory_(this) {} |
+ weak_factory_(this) { |
+ BrowserList::AddObserver(this); |
+} |
PermissionRequestManager::~PermissionRequestManager() { |
+ BrowserList::RemoveObserver(this); |
if (view_ != NULL) |
view_->SetDelegate(NULL); |
@@ -356,6 +362,23 @@ void PermissionRequestManager::Closing() { |
FinalizeBubble(); |
} |
+void PermissionRequestManager::OnBrowserSetLastActive(Browser* browser) { |
+ Browser* found = chrome::FindBrowserWithWebContents(web_contents()); |
+ if (found != browser) |
+ return; |
+ |
+ browser_active_ = true; |
+ ScheduleShowBubble(); |
+} |
+ |
+void PermissionRequestManager::OnBrowserNoLongerActive(Browser* browser) { |
+ Browser* found = chrome::FindBrowserWithWebContents(web_contents()); |
+ if (found != browser) |
+ return; |
+ |
+ browser_active_ = false; |
+} |
+ |
void PermissionRequestManager::ScheduleShowBubble() { |
// ::ScheduleShowBubble() will be called again when the main frame will be |
// loaded. |
@@ -372,6 +395,8 @@ void PermissionRequestManager::ScheduleShowBubble() { |
void PermissionRequestManager::TriggerShowBubble() { |
if (!view_) |
return; |
+ if (!browser_active_) |
+ return; |
if (IsBubbleVisible()) |
return; |
if (!main_frame_has_fully_loaded_) |