OLD | NEW |
---|---|
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 } |
OLD | NEW |