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