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

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: rebase Created 3 years, 8 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
« no previous file with comments | « chrome/browser/permissions/permission_request_manager.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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.h" 11 #include "base/metrics/user_metrics.h"
12 #include "base/metrics/user_metrics_action.h" 12 #include "base/metrics/user_metrics_action.h"
13 #include "build/build_config.h" 13 #include "build/build_config.h"
14 #include "chrome/browser/permissions/permission_request.h" 14 #include "chrome/browser/permissions/permission_request.h"
15 #include "chrome/browser/permissions/permission_uma_util.h" 15 #include "chrome/browser/permissions/permission_uma_util.h"
16 #include "chrome/browser/ui/browser_window.h"
16 #include "chrome/browser/ui/permission_bubble/permission_prompt.h" 17 #include "chrome/browser/ui/permission_bubble/permission_prompt.h"
17 #include "chrome/common/chrome_features.h" 18 #include "chrome/common/chrome_features.h"
18 #include "chrome/common/chrome_switches.h" 19 #include "chrome/common/chrome_switches.h"
19 #include "content/public/browser/browser_thread.h" 20 #include "content/public/browser/browser_thread.h"
20 #include "content/public/browser/navigation_handle.h" 21 #include "content/public/browser/navigation_handle.h"
21 #include "url/origin.h" 22 #include "url/origin.h"
22 23
24 #if !defined(OS_ANDROID)
25 #include "chrome/browser/ui/browser_finder.h"
26 #include "chrome/browser/ui/browser_list.h"
27 #endif
28
23 namespace { 29 namespace {
24 30
25 class CancelledRequest : public PermissionRequest { 31 class CancelledRequest : public PermissionRequest {
26 public: 32 public:
27 explicit CancelledRequest(PermissionRequest* cancelled) 33 explicit CancelledRequest(PermissionRequest* cancelled)
28 : icon_(cancelled->GetIconId()), 34 : icon_(cancelled->GetIconId()),
29 message_fragment_(cancelled->GetMessageTextFragment()), 35 message_fragment_(cancelled->GetMessageTextFragment()),
30 origin_(cancelled->GetOrigin()) {} 36 origin_(cancelled->GetOrigin()) {}
31 ~CancelledRequest() override {} 37 ~CancelledRequest() override {}
32 38
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
79 : content::WebContentsObserver(web_contents), 85 : content::WebContentsObserver(web_contents),
80 view_factory_(base::Bind(&PermissionPrompt::Create)), 86 view_factory_(base::Bind(&PermissionPrompt::Create)),
81 view_(nullptr), 87 view_(nullptr),
82 main_frame_has_fully_loaded_(false), 88 main_frame_has_fully_loaded_(false),
83 persist_(true), 89 persist_(true),
84 auto_response_for_test_(NONE), 90 auto_response_for_test_(NONE),
85 weak_factory_(this) { 91 weak_factory_(this) {
86 #if defined(OS_ANDROID) 92 #if defined(OS_ANDROID)
87 view_ = view_factory_.Run(web_contents); 93 view_ = view_factory_.Run(web_contents);
88 view_->SetDelegate(this); 94 view_->SetDelegate(this);
95 #else
96 BrowserList::AddObserver(this);
89 #endif 97 #endif
90 } 98 }
91 99
92 PermissionRequestManager::~PermissionRequestManager() { 100 PermissionRequestManager::~PermissionRequestManager() {
101 #if !defined(OS_ANDROID)
102 BrowserList::RemoveObserver(this);
103 #endif
93 if (view_ != NULL) 104 if (view_ != NULL)
94 view_->SetDelegate(NULL); 105 view_->SetDelegate(NULL);
95 106
96 for (PermissionRequest* request : requests_) 107 for (PermissionRequest* request : requests_)
97 request->RequestFinished(); 108 request->RequestFinished();
98 for (PermissionRequest* request : queued_requests_) 109 for (PermissionRequest* request : queued_requests_)
99 request->RequestFinished(); 110 request->RequestFinished();
100 for (PermissionRequest* request : queued_frame_requests_) 111 for (PermissionRequest* request : queued_frame_requests_)
101 request->RequestFinished(); 112 request->RequestFinished();
102 for (const auto& entry : duplicate_requests_) 113 for (const auto& entry : duplicate_requests_)
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after
360 void PermissionRequestManager::Closing() { 371 void PermissionRequestManager::Closing() {
361 std::vector<PermissionRequest*>::iterator requests_iter; 372 std::vector<PermissionRequest*>::iterator requests_iter;
362 for (requests_iter = requests_.begin(); 373 for (requests_iter = requests_.begin();
363 requests_iter != requests_.end(); 374 requests_iter != requests_.end();
364 requests_iter++) { 375 requests_iter++) {
365 CancelledIncludingDuplicates(*requests_iter); 376 CancelledIncludingDuplicates(*requests_iter);
366 } 377 }
367 FinalizeBubble(); 378 FinalizeBubble();
368 } 379 }
369 380
381 void PermissionRequestManager::OnBrowserSetLastActive(Browser* browser) {
382 #if !defined(OS_ANDROID)
383 Browser* found = chrome::FindBrowserWithWebContents(web_contents());
384 if (found != browser)
385 return;
386
387 ScheduleShowBubble();
388 #endif
389 }
390
370 void PermissionRequestManager::ScheduleShowBubble() { 391 void PermissionRequestManager::ScheduleShowBubble() {
371 // ::ScheduleShowBubble() will be called again when the main frame will be 392 // ::ScheduleShowBubble() will be called again when the main frame will be
372 // loaded. 393 // loaded.
373 if (!main_frame_has_fully_loaded_) 394 if (!main_frame_has_fully_loaded_)
374 return; 395 return;
375 396
376 content::BrowserThread::PostTask( 397 content::BrowserThread::PostTask(
377 content::BrowserThread::UI, 398 content::BrowserThread::UI,
378 FROM_HERE, 399 FROM_HERE,
379 base::Bind(&PermissionRequestManager::TriggerShowBubble, 400 base::Bind(&PermissionRequestManager::TriggerShowBubble,
380 weak_factory_.GetWeakPtr())); 401 weak_factory_.GetWeakPtr()));
381 } 402 }
382 403
383 void PermissionRequestManager::TriggerShowBubble() { 404 void PermissionRequestManager::TriggerShowBubble() {
384 if (!view_) 405 if (!view_)
385 return; 406 return;
386 if (IsBubbleVisible()) 407 if (IsBubbleVisible())
387 return; 408 return;
388 if (!main_frame_has_fully_loaded_) 409 if (!main_frame_has_fully_loaded_)
389 return; 410 return;
390 if (requests_.empty() && queued_requests_.empty() && 411 if (requests_.empty() && queued_requests_.empty() &&
391 queued_frame_requests_.empty()) { 412 queued_frame_requests_.empty()) {
392 return; 413 return;
393 } 414 }
415 #if !defined(OS_ANDROID) && !defined(OS_MACOSX)
416 // BrowserWindow::IsActive() always return false in tests on MAC.
417 Browser* browser = chrome::FindBrowserWithWebContents(web_contents());
418 if (browser && !browser->window()->IsActive())
419 return;
420 #endif
394 421
395 if (requests_.empty()) { 422 if (requests_.empty()) {
396 if (queued_requests_.size()) 423 if (queued_requests_.size())
397 requests_.swap(queued_requests_); 424 requests_.swap(queued_requests_);
398 else 425 else
399 requests_.swap(queued_frame_requests_); 426 requests_.swap(queued_frame_requests_);
400 427
401 // Sets the default value for each request to be 'accept'. 428 // Sets the default value for each request to be 'accept'.
402 accept_states_.resize(requests_.size(), true); 429 accept_states_.resize(requests_.size(), true);
403 } 430 }
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
532 case DENY_ALL: 559 case DENY_ALL:
533 Deny(); 560 Deny();
534 break; 561 break;
535 case DISMISS: 562 case DISMISS:
536 Closing(); 563 Closing();
537 break; 564 break;
538 case NONE: 565 case NONE:
539 NOTREACHED(); 566 NOTREACHED();
540 } 567 }
541 } 568 }
OLDNEW
« no previous file with comments | « chrome/browser/permissions/permission_request_manager.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698