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/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/ui/website_settings/permission_bubble_request.h" | 9 #include "chrome/browser/ui/website_settings/permission_bubble_request.h" |
10 #include "chrome/common/chrome_switches.h" | 10 #include "chrome/common/chrome_switches.h" |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
60 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 60 if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
61 switches::kDisablePermissionsBubbles)) | 61 switches::kDisablePermissionsBubbles)) |
62 return false; | 62 return false; |
63 | 63 |
64 return false; | 64 return false; |
65 } | 65 } |
66 | 66 |
67 PermissionBubbleManager::PermissionBubbleManager( | 67 PermissionBubbleManager::PermissionBubbleManager( |
68 content::WebContents* web_contents) | 68 content::WebContents* web_contents) |
69 : content::WebContentsObserver(web_contents), | 69 : content::WebContentsObserver(web_contents), |
| 70 require_user_gesture_(false), |
70 bubble_showing_(false), | 71 bubble_showing_(false), |
71 view_(NULL), | 72 view_(NULL), |
72 request_url_has_loaded_(false), | 73 request_url_has_loaded_(false), |
73 customization_mode_(false), | 74 customization_mode_(false), |
74 weak_factory_(this) {} | 75 weak_factory_(this) {} |
75 | 76 |
76 PermissionBubbleManager::~PermissionBubbleManager() { | 77 PermissionBubbleManager::~PermissionBubbleManager() { |
77 if (view_ != NULL) | 78 if (view_ != NULL) |
78 view_->SetDelegate(NULL); | 79 view_->SetDelegate(NULL); |
79 | 80 |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
128 if (is_main_frame) { | 129 if (is_main_frame) { |
129 requests_.push_back(request); | 130 requests_.push_back(request); |
130 // TODO(gbillock): do we need to make default state a request property? | 131 // TODO(gbillock): do we need to make default state a request property? |
131 accept_states_.push_back(true); | 132 accept_states_.push_back(true); |
132 } else { | 133 } else { |
133 content::RecordAction( | 134 content::RecordAction( |
134 base::UserMetricsAction("PermissionBubbleIFrameRequestQueued")); | 135 base::UserMetricsAction("PermissionBubbleIFrameRequestQueued")); |
135 queued_frame_requests_.push_back(request); | 136 queued_frame_requests_.push_back(request); |
136 } | 137 } |
137 | 138 |
138 if (request->HasUserGesture()) | 139 if (!require_user_gesture_ || request->HasUserGesture()) |
139 ScheduleShowBubble(); | 140 ScheduleShowBubble(); |
140 } | 141 } |
141 | 142 |
142 void PermissionBubbleManager::CancelRequest(PermissionBubbleRequest* request) { | 143 void PermissionBubbleManager::CancelRequest(PermissionBubbleRequest* request) { |
143 // First look in the queued requests, where we can simply delete the request | 144 // First look in the queued requests, where we can simply delete the request |
144 // and go on. | 145 // and go on. |
145 std::vector<PermissionBubbleRequest*>::iterator requests_iter; | 146 std::vector<PermissionBubbleRequest*>::iterator requests_iter; |
146 for (requests_iter = queued_requests_.begin(); | 147 for (requests_iter = queued_requests_.begin(); |
147 requests_iter != queued_requests_.end(); | 148 requests_iter != queued_requests_.end(); |
148 requests_iter++) { | 149 requests_iter++) { |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
195 } | 196 } |
196 | 197 |
197 view_ = view; | 198 view_ = view; |
198 if (!view) | 199 if (!view) |
199 return; | 200 return; |
200 | 201 |
201 view->SetDelegate(this); | 202 view->SetDelegate(this); |
202 TriggerShowBubble(); | 203 TriggerShowBubble(); |
203 } | 204 } |
204 | 205 |
| 206 void PermissionBubbleManager::RequireUserGesture(bool required) { |
| 207 require_user_gesture_ = required; |
| 208 } |
| 209 |
205 void PermissionBubbleManager::DocumentOnLoadCompletedInMainFrame() { | 210 void PermissionBubbleManager::DocumentOnLoadCompletedInMainFrame() { |
206 request_url_has_loaded_ = true; | 211 request_url_has_loaded_ = true; |
207 // This is scheduled because while all calls to the browser have been | 212 // This is scheduled because while all calls to the browser have been |
208 // issued at DOMContentLoaded, they may be bouncing around in scheduled | 213 // issued at DOMContentLoaded, they may be bouncing around in scheduled |
209 // callbacks finding the UI thread still. This makes sure we allow those | 214 // callbacks finding the UI thread still. This makes sure we allow those |
210 // scheduled calls to AddRequest to complete before we show the page-load | 215 // scheduled calls to AddRequest to complete before we show the page-load |
211 // permissions bubble. | 216 // permissions bubble. |
212 ScheduleShowBubble(); | 217 ScheduleShowBubble(); |
213 } | 218 } |
214 | 219 |
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
397 bool PermissionBubbleManager::HasUserGestureRequest( | 402 bool PermissionBubbleManager::HasUserGestureRequest( |
398 const std::vector<PermissionBubbleRequest*>& queue) { | 403 const std::vector<PermissionBubbleRequest*>& queue) { |
399 std::vector<PermissionBubbleRequest*>::const_iterator iter; | 404 std::vector<PermissionBubbleRequest*>::const_iterator iter; |
400 for (iter = queue.begin(); iter != queue.end(); iter++) { | 405 for (iter = queue.begin(); iter != queue.end(); iter++) { |
401 if ((*iter)->HasUserGesture()) | 406 if ((*iter)->HasUserGesture()) |
402 return true; | 407 return true; |
403 } | 408 } |
404 return false; | 409 return false; |
405 } | 410 } |
406 | 411 |
OLD | NEW |