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

Side by Side Diff: chrome/browser/permissions/permission_request_manager.cc

Issue 2770423002: Do not show permission bubble when browser is not active (Closed)
Patch Set: BrowserListObserver Created 3 years, 9 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/permissions/permission_request_manager.h" 5 #include "chrome/browser/permissions/permission_request_manager.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/feature_list.h" 10 #include "base/feature_list.h"
11 #include "base/metrics/user_metrics_action.h" 11 #include "base/metrics/user_metrics_action.h"
12 #include "build/build_config.h" 12 #include "build/build_config.h"
13 #include "chrome/browser/permissions/permission_request.h" 13 #include "chrome/browser/permissions/permission_request.h"
14 #include "chrome/browser/permissions/permission_uma_util.h" 14 #include "chrome/browser/permissions/permission_uma_util.h"
15 #include "chrome/browser/ui/browser_finder.h"
16 #include "chrome/browser/ui/browser_list.h"
15 #include "chrome/browser/ui/permission_bubble/permission_prompt.h" 17 #include "chrome/browser/ui/permission_bubble/permission_prompt.h"
16 #include "chrome/common/chrome_features.h" 18 #include "chrome/common/chrome_features.h"
17 #include "chrome/common/chrome_switches.h" 19 #include "chrome/common/chrome_switches.h"
18 #include "content/public/browser/browser_thread.h" 20 #include "content/public/browser/browser_thread.h"
19 #include "content/public/browser/navigation_handle.h" 21 #include "content/public/browser/navigation_handle.h"
20 #include "content/public/browser/user_metrics.h" 22 #include "content/public/browser/user_metrics.h"
21 #include "url/origin.h" 23 #include "url/origin.h"
22 24
23 namespace { 25 namespace {
24 26
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 74
73 // PermissionRequestManager ---------------------------------------------------- 75 // PermissionRequestManager ----------------------------------------------------
74 76
75 DEFINE_WEB_CONTENTS_USER_DATA_KEY(PermissionRequestManager); 77 DEFINE_WEB_CONTENTS_USER_DATA_KEY(PermissionRequestManager);
76 78
77 PermissionRequestManager::PermissionRequestManager( 79 PermissionRequestManager::PermissionRequestManager(
78 content::WebContents* web_contents) 80 content::WebContents* web_contents)
79 : content::WebContentsObserver(web_contents), 81 : content::WebContentsObserver(web_contents),
80 view_factory_(base::Bind(&PermissionPrompt::Create)), 82 view_factory_(base::Bind(&PermissionPrompt::Create)),
81 view_(nullptr), 83 view_(nullptr),
84 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_
82 main_frame_has_fully_loaded_(false), 85 main_frame_has_fully_loaded_(false),
83 persist_(true), 86 persist_(true),
84 auto_response_for_test_(NONE), 87 auto_response_for_test_(NONE),
85 weak_factory_(this) {} 88 weak_factory_(this) {
89 BrowserList::AddObserver(this);
90 }
86 91
87 PermissionRequestManager::~PermissionRequestManager() { 92 PermissionRequestManager::~PermissionRequestManager() {
93 BrowserList::RemoveObserver(this);
88 if (view_ != NULL) 94 if (view_ != NULL)
89 view_->SetDelegate(NULL); 95 view_->SetDelegate(NULL);
90 96
91 for (PermissionRequest* request : requests_) 97 for (PermissionRequest* request : requests_)
92 request->RequestFinished(); 98 request->RequestFinished();
93 for (PermissionRequest* request : queued_requests_) 99 for (PermissionRequest* request : queued_requests_)
94 request->RequestFinished(); 100 request->RequestFinished();
95 for (PermissionRequest* request : queued_frame_requests_) 101 for (PermissionRequest* request : queued_frame_requests_)
96 request->RequestFinished(); 102 request->RequestFinished();
97 for (const auto& entry : duplicate_requests_) 103 for (const auto& entry : duplicate_requests_)
(...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after
349 void PermissionRequestManager::Closing() { 355 void PermissionRequestManager::Closing() {
350 std::vector<PermissionRequest*>::iterator requests_iter; 356 std::vector<PermissionRequest*>::iterator requests_iter;
351 for (requests_iter = requests_.begin(); 357 for (requests_iter = requests_.begin();
352 requests_iter != requests_.end(); 358 requests_iter != requests_.end();
353 requests_iter++) { 359 requests_iter++) {
354 CancelledIncludingDuplicates(*requests_iter); 360 CancelledIncludingDuplicates(*requests_iter);
355 } 361 }
356 FinalizeBubble(); 362 FinalizeBubble();
357 } 363 }
358 364
365 void PermissionRequestManager::OnBrowserSetLastActive(Browser* browser) {
366 Browser* found = chrome::FindBrowserWithWebContents(web_contents());
367 if (found != browser)
368 return;
369
370 browser_active_ = true;
371 ScheduleShowBubble();
372 }
373
374 void PermissionRequestManager::OnBrowserNoLongerActive(Browser* browser) {
375 Browser* found = chrome::FindBrowserWithWebContents(web_contents());
376 if (found != browser)
377 return;
378
379 browser_active_ = false;
380 }
381
359 void PermissionRequestManager::ScheduleShowBubble() { 382 void PermissionRequestManager::ScheduleShowBubble() {
360 // ::ScheduleShowBubble() will be called again when the main frame will be 383 // ::ScheduleShowBubble() will be called again when the main frame will be
361 // loaded. 384 // loaded.
362 if (!main_frame_has_fully_loaded_) 385 if (!main_frame_has_fully_loaded_)
363 return; 386 return;
364 387
365 content::BrowserThread::PostTask( 388 content::BrowserThread::PostTask(
366 content::BrowserThread::UI, 389 content::BrowserThread::UI,
367 FROM_HERE, 390 FROM_HERE,
368 base::Bind(&PermissionRequestManager::TriggerShowBubble, 391 base::Bind(&PermissionRequestManager::TriggerShowBubble,
369 weak_factory_.GetWeakPtr())); 392 weak_factory_.GetWeakPtr()));
370 } 393 }
371 394
372 void PermissionRequestManager::TriggerShowBubble() { 395 void PermissionRequestManager::TriggerShowBubble() {
373 if (!view_) 396 if (!view_)
374 return; 397 return;
398 if (!browser_active_)
399 return;
375 if (IsBubbleVisible()) 400 if (IsBubbleVisible())
376 return; 401 return;
377 if (!main_frame_has_fully_loaded_) 402 if (!main_frame_has_fully_loaded_)
378 return; 403 return;
379 if (requests_.empty() && queued_requests_.empty() && 404 if (requests_.empty() && queued_requests_.empty() &&
380 queued_frame_requests_.empty()) { 405 queued_frame_requests_.empty()) {
381 return; 406 return;
382 } 407 }
383 408
384 if (requests_.empty()) { 409 if (requests_.empty()) {
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
521 case DENY_ALL: 546 case DENY_ALL:
522 Deny(); 547 Deny();
523 break; 548 break;
524 case DISMISS: 549 case DISMISS:
525 Closing(); 550 Closing();
526 break; 551 break;
527 case NONE: 552 case NONE:
528 NOTREACHED(); 553 NOTREACHED();
529 } 554 }
530 } 555 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698