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

Side by Side Diff: chrome/browser/ui/website_settings/permission_bubble_manager.cc

Issue 341833004: [WebsiteSettings] Enable permission bubbles by default. Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 6 years, 4 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 | Annotate | Revision Log
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/ui/website_settings/permission_bubble_manager.h" 5 #include "chrome/browser/ui/website_settings/permission_bubble_manager.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/metrics/user_metrics_action.h" 8 #include "base/metrics/user_metrics_action.h"
9 #include "chrome/browser/profiles/profile.h"
9 #include "chrome/browser/ui/website_settings/permission_bubble_request.h" 10 #include "chrome/browser/ui/website_settings/permission_bubble_request.h"
10 #include "chrome/common/chrome_switches.h" 11 #include "chrome/common/chrome_switches.h"
11 #include "content/public/browser/browser_thread.h" 12 #include "content/public/browser/browser_thread.h"
12 #include "content/public/browser/navigation_details.h" 13 #include "content/public/browser/navigation_details.h"
13 #include "content/public/browser/user_metrics.h" 14 #include "content/public/browser/user_metrics.h"
14 15
15 namespace { 16 namespace {
16 17
17 class CancelledRequest : public PermissionBubbleRequest { 18 class CancelledRequest : public PermissionBubbleRequest {
18 public: 19 public:
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
64 // static 65 // static
65 bool PermissionBubbleManager::Enabled() { 66 bool PermissionBubbleManager::Enabled() {
66 if (CommandLine::ForCurrentProcess()->HasSwitch( 67 if (CommandLine::ForCurrentProcess()->HasSwitch(
67 switches::kEnablePermissionsBubbles)) 68 switches::kEnablePermissionsBubbles))
68 return true; 69 return true;
69 70
70 if (CommandLine::ForCurrentProcess()->HasSwitch( 71 if (CommandLine::ForCurrentProcess()->HasSwitch(
71 switches::kDisablePermissionsBubbles)) 72 switches::kDisablePermissionsBubbles))
72 return false; 73 return false;
73 74
74 return false; 75 return true;
75 } 76 }
76 77
77 PermissionBubbleManager::PermissionBubbleManager( 78 PermissionBubbleManager::PermissionBubbleManager(
78 content::WebContents* web_contents) 79 content::WebContents* web_contents)
79 : content::WebContentsObserver(web_contents), 80 : content::WebContentsObserver(web_contents),
80 bubble_showing_(false), 81 bubble_showing_(false),
81 view_(NULL), 82 view_(NULL),
82 request_url_has_loaded_(false), 83 request_url_has_loaded_(false),
83 customization_mode_(false), 84 customization_mode_(false),
84 weak_factory_(this) {} 85 weak_factory_(this) {}
85 86
86 PermissionBubbleManager::~PermissionBubbleManager() { 87 PermissionBubbleManager::~PermissionBubbleManager() {
87 if (view_ != NULL) 88 if (view_ != NULL)
88 view_->SetDelegate(NULL); 89 view_->SetDelegate(NULL);
89 90
90 std::vector<PermissionBubbleRequest*>::iterator requests_iter; 91 std::vector<PermissionBubbleRequest*>::iterator requests_iter;
91 for (requests_iter = requests_.begin(); 92 for (requests_iter = requests_.begin();
92 requests_iter != requests_.end(); 93 requests_iter != requests_.end();
93 requests_iter++) { 94 requests_iter++) {
94 (*requests_iter)->RequestFinished(); 95 (*requests_iter)->RequestFinished();
95 } 96 }
96 for (requests_iter = queued_requests_.begin(); 97 for (requests_iter = queued_requests_.begin();
97 requests_iter != queued_requests_.end(); 98 requests_iter != queued_requests_.end();
98 requests_iter++) { 99 requests_iter++) {
99 (*requests_iter)->RequestFinished(); 100 (*requests_iter)->RequestFinished();
100 } 101 }
101 } 102 }
102 103
103 void PermissionBubbleManager::AddRequest(PermissionBubbleRequest* request) { 104 void PermissionBubbleManager::AddRequest(PermissionBubbleRequest* request) {
105 LOG(INFO) << "!!! AddRequest " << request->GetMessageText();
104 content::RecordAction(base::UserMetricsAction("PermissionBubbleRequest")); 106 content::RecordAction(base::UserMetricsAction("PermissionBubbleRequest"));
105 // TODO(gbillock): is there a race between an early request on a 107 // TODO(gbillock): is there a race between an early request on a
106 // newly-navigated page and the to-be-cleaned-up requests on the previous 108 // newly-navigated page and the to-be-cleaned-up requests on the previous
107 // page? We should maybe listen to DidStartNavigationToPendingEntry (and 109 // page? We should maybe listen to DidStartNavigationToPendingEntry (and
108 // any other renderer-side nav initiations?). Double-check this for 110 // any other renderer-side nav initiations?). Double-check this for
109 // correct behavior on interstitials -- we probably want to basically queue 111 // correct behavior on interstitials -- we probably want to basically queue
110 // any request for which GetVisibleURL != GetLastCommittedURL. 112 // any request for which GetVisibleURL != GetLastCommittedURL.
111 request_url_ = web_contents()->GetLastCommittedURL(); 113 request_url_ = web_contents()->GetLastCommittedURL();
112 bool is_main_frame = 114 bool is_main_frame =
113 request->GetRequestingHostname().GetOrigin() == request_url_.GetOrigin(); 115 request->GetRequestingHostname().GetOrigin() == request_url_.GetOrigin();
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
264 accept_states_[request_index] = new_value; 266 accept_states_[request_index] = new_value;
265 } 267 }
266 268
267 void PermissionBubbleManager::SetCustomizationMode() { 269 void PermissionBubbleManager::SetCustomizationMode() {
268 customization_mode_ = true; 270 customization_mode_ = true;
269 if (view_) 271 if (view_)
270 view_->Show(requests_, accept_states_, customization_mode_); 272 view_->Show(requests_, accept_states_, customization_mode_);
271 } 273 }
272 274
273 void PermissionBubbleManager::Accept() { 275 void PermissionBubbleManager::Accept() {
276 LOG(INFO) << "Accept bubble in MGR";
274 std::vector<PermissionBubbleRequest*>::iterator requests_iter; 277 std::vector<PermissionBubbleRequest*>::iterator requests_iter;
275 std::vector<bool>::iterator accepts_iter = accept_states_.begin(); 278 std::vector<bool>::iterator accepts_iter = accept_states_.begin();
276 for (requests_iter = requests_.begin(), accepts_iter = accept_states_.begin(); 279 for (requests_iter = requests_.begin(), accepts_iter = accept_states_.begin();
277 requests_iter != requests_.end(); 280 requests_iter != requests_.end();
278 requests_iter++, accepts_iter++) { 281 requests_iter++, accepts_iter++) {
279 if (*accepts_iter) 282 if (*accepts_iter)
280 (*requests_iter)->PermissionGranted(); 283 (*requests_iter)->PermissionGranted();
281 else 284 else
282 (*requests_iter)->PermissionDenied(); 285 (*requests_iter)->PermissionDenied();
283 } 286 }
(...skipping 22 matching lines...) Expand all
306 309
307 void PermissionBubbleManager::ScheduleShowBubble() { 310 void PermissionBubbleManager::ScheduleShowBubble() {
308 content::BrowserThread::PostTask( 311 content::BrowserThread::PostTask(
309 content::BrowserThread::UI, 312 content::BrowserThread::UI,
310 FROM_HERE, 313 FROM_HERE,
311 base::Bind(&PermissionBubbleManager::TriggerShowBubble, 314 base::Bind(&PermissionBubbleManager::TriggerShowBubble,
312 weak_factory_.GetWeakPtr())); 315 weak_factory_.GetWeakPtr()));
313 } 316 }
314 317
315 void PermissionBubbleManager::TriggerShowBubble() { 318 void PermissionBubbleManager::TriggerShowBubble() {
316 if (!view_) 319 LOG(INFO) << "TriggerShowBubble";
320 if (!view_) {
321 LOG(INFO) << "no view";
317 return; 322 return;
323 }
318 if (bubble_showing_) 324 if (bubble_showing_)
319 return; 325 return;
320 if (!request_url_has_loaded_) 326 if (!request_url_has_loaded_) {
327 LOG(INFO) << "not loaded";
321 return; 328 return;
329 }
322 if (requests_.empty() && queued_requests_.empty() && 330 if (requests_.empty() && queued_requests_.empty() &&
323 queued_frame_requests_.empty()) { 331 queued_frame_requests_.empty()) {
324 return; 332 return;
325 } 333 }
326 334
327 if (requests_.empty()) { 335 if (requests_.empty()) {
328 // Queues containing a user-gesture-generated request have priority. 336 // Queues containing a user-gesture-generated request have priority.
329 if (HasUserGestureRequest(queued_requests_)) 337 if (HasUserGestureRequest(queued_requests_))
330 requests_.swap(queued_requests_); 338 requests_.swap(queued_requests_);
331 else if (HasUserGestureRequest(queued_frame_requests_)) 339 else if (HasUserGestureRequest(queued_frame_requests_))
332 requests_.swap(queued_frame_requests_); 340 requests_.swap(queued_frame_requests_);
333 else if (queued_requests_.size()) 341 else if (queued_requests_.size())
334 requests_.swap(queued_requests_); 342 requests_.swap(queued_requests_);
335 else 343 else
336 requests_.swap(queued_frame_requests_); 344 requests_.swap(queued_frame_requests_);
337 345
338 // Sets the default value for each request to be 'accept'. 346 // Sets the default value for each request to be 'accept'.
339 // TODO(leng): Currently all requests default to true. If that changes: 347 // TODO(leng): Currently all requests default to true. If that changes:
340 // a) Add additional accept_state queues to store default values. 348 // a) Add additional accept_state queues to store default values.
341 // b) Change the request API to provide the default value. 349 // b) Change the request API to provide the default value.
342 accept_states_.resize(requests_.size(), true); 350 accept_states_.resize(requests_.size(), true);
343 } 351 }
344 352
353 LOG(INFO) << "showing bubble view";
345 // Note: this should appear above Show() for testing, since in that 354 // Note: this should appear above Show() for testing, since in that
346 // case we may do in-line calling of finalization. 355 // case we may do in-line calling of finalization.
347 bubble_showing_ = true; 356 bubble_showing_ = true;
348 view_->Show(requests_, accept_states_, customization_mode_); 357 view_->Show(requests_, accept_states_, customization_mode_);
349 } 358 }
350 359
351 void PermissionBubbleManager::FinalizeBubble() { 360 void PermissionBubbleManager::FinalizeBubble() {
352 if (view_) 361 if (view_)
353 view_->Hide(); 362 view_->Hide();
354 bubble_showing_ = false; 363 bubble_showing_ = false;
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
407 bool PermissionBubbleManager::HasUserGestureRequest( 416 bool PermissionBubbleManager::HasUserGestureRequest(
408 const std::vector<PermissionBubbleRequest*>& queue) { 417 const std::vector<PermissionBubbleRequest*>& queue) {
409 std::vector<PermissionBubbleRequest*>::const_iterator iter; 418 std::vector<PermissionBubbleRequest*>::const_iterator iter;
410 for (iter = queue.begin(); iter != queue.end(); iter++) { 419 for (iter = queue.begin(); iter != queue.end(); iter++) {
411 if ((*iter)->HasUserGesture()) 420 if ((*iter)->HasUserGesture())
412 return true; 421 return true;
413 } 422 }
414 return false; 423 return false;
415 } 424 }
416 425
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698