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

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

Issue 2081103002: Rename PermissionBubbleManager to PermissionRequestManager (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Review comments Created 4 years, 5 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/ui/website_settings/permission_bubble_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/metrics/user_metrics_action.h" 10 #include "base/metrics/user_metrics_action.h"
11 #include "build/build_config.h" 11 #include "build/build_config.h"
12 #include "chrome/browser/permissions/permission_uma_util.h" 12 #include "chrome/browser/permissions/permission_uma_util.h"
13 #include "chrome/browser/ui/website_settings/permission_bubble_request.h" 13 #include "chrome/browser/ui/website_settings/permission_bubble_request.h"
14 #include "chrome/common/chrome_switches.h" 14 #include "chrome/common/chrome_switches.h"
15 #include "content/public/browser/browser_thread.h" 15 #include "content/public/browser/browser_thread.h"
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
56 return true; 56 return true;
57 if (a->GetMessageTextFragment() == b->GetMessageTextFragment() && 57 if (a->GetMessageTextFragment() == b->GetMessageTextFragment() &&
58 a->GetOrigin() == b->GetOrigin()) { 58 a->GetOrigin() == b->GetOrigin()) {
59 return true; 59 return true;
60 } 60 }
61 return false; 61 return false;
62 } 62 }
63 63
64 } // namespace 64 } // namespace
65 65
66 // PermissionBubbleManager::Observer ------------------------------------------- 66 // PermissionRequestManager::Observer ------------------------------------------
67 67
68 PermissionBubbleManager::Observer::~Observer() { 68 PermissionRequestManager::Observer::~Observer() {
69 } 69 }
70 70
71 void PermissionBubbleManager::Observer::OnBubbleAdded() { 71 void PermissionRequestManager::Observer::OnBubbleAdded() {
72 } 72 }
73 73
74 // PermissionBubbleManager ----------------------------------------------------- 74 // PermissionRequestManager ----------------------------------------------------
75 75
76 DEFINE_WEB_CONTENTS_USER_DATA_KEY(PermissionBubbleManager); 76 DEFINE_WEB_CONTENTS_USER_DATA_KEY(PermissionRequestManager);
77 77
78 PermissionBubbleManager::PermissionBubbleManager( 78 PermissionRequestManager::PermissionRequestManager(
79 content::WebContents* web_contents) 79 content::WebContents* web_contents)
80 : content::WebContentsObserver(web_contents), 80 : content::WebContentsObserver(web_contents),
81 #if !defined(OS_ANDROID) // No bubbles in android tests. 81 #if !defined(OS_ANDROID) // No bubbles in android tests.
82 view_factory_(base::Bind(&PermissionBubbleView::Create)), 82 view_factory_(base::Bind(&PermissionBubbleView::Create)),
83 #endif 83 #endif
84 view_(nullptr), 84 view_(nullptr),
85 main_frame_has_fully_loaded_(false), 85 main_frame_has_fully_loaded_(false),
86 auto_response_for_test_(NONE), 86 auto_response_for_test_(NONE),
87 weak_factory_(this) { 87 weak_factory_(this) {
88 } 88 }
89 89
90 PermissionBubbleManager::~PermissionBubbleManager() { 90 PermissionRequestManager::~PermissionRequestManager() {
91 if (view_ != NULL) 91 if (view_ != NULL)
92 view_->SetDelegate(NULL); 92 view_->SetDelegate(NULL);
93 93
94 for (PermissionBubbleRequest* request : requests_) 94 for (PermissionBubbleRequest* request : requests_)
95 request->RequestFinished(); 95 request->RequestFinished();
96 for (PermissionBubbleRequest* request : queued_requests_) 96 for (PermissionBubbleRequest* request : queued_requests_)
97 request->RequestFinished(); 97 request->RequestFinished();
98 for (PermissionBubbleRequest* request : queued_frame_requests_) 98 for (PermissionBubbleRequest* request : queued_frame_requests_)
99 request->RequestFinished(); 99 request->RequestFinished();
100 for (const auto& entry : duplicate_requests_) 100 for (const auto& entry : duplicate_requests_)
101 entry.second->RequestFinished(); 101 entry.second->RequestFinished();
102 } 102 }
103 103
104 void PermissionBubbleManager::AddRequest(PermissionBubbleRequest* request) { 104 void PermissionRequestManager::AddRequest(PermissionBubbleRequest* request) {
105 content::RecordAction(base::UserMetricsAction("PermissionBubbleRequest")); 105 content::RecordAction(base::UserMetricsAction("PermissionBubbleRequest"));
106 // TODO(gbillock): is there a race between an early request on a 106 // TODO(gbillock): is there a race between an early request on a
107 // newly-navigated page and the to-be-cleaned-up requests on the previous 107 // newly-navigated page and the to-be-cleaned-up requests on the previous
108 // page? We should maybe listen to DidStartNavigationToPendingEntry (and 108 // page? We should maybe listen to DidStartNavigationToPendingEntry (and
109 // any other renderer-side nav initiations?). Double-check this for 109 // any other renderer-side nav initiations?). Double-check this for
110 // correct behavior on interstitials -- we probably want to basically queue 110 // correct behavior on interstitials -- we probably want to basically queue
111 // any request for which GetVisibleURL != GetLastCommittedURL. 111 // any request for which GetVisibleURL != GetLastCommittedURL.
112 request_url_ = web_contents()->GetLastCommittedURL(); 112 request_url_ = web_contents()->GetLastCommittedURL();
113 bool is_main_frame = url::Origin(request_url_) 113 bool is_main_frame = url::Origin(request_url_)
114 .IsSameOriginWith(url::Origin(request->GetOrigin())); 114 .IsSameOriginWith(url::Origin(request->GetOrigin()));
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
147 accept_states_.push_back(true); 147 accept_states_.push_back(true);
148 } else { 148 } else {
149 content::RecordAction( 149 content::RecordAction(
150 base::UserMetricsAction("PermissionBubbleIFrameRequestQueued")); 150 base::UserMetricsAction("PermissionBubbleIFrameRequestQueued"));
151 queued_frame_requests_.push_back(request); 151 queued_frame_requests_.push_back(request);
152 } 152 }
153 153
154 ScheduleShowBubble(); 154 ScheduleShowBubble();
155 } 155 }
156 156
157 void PermissionBubbleManager::CancelRequest(PermissionBubbleRequest* request) { 157 void PermissionRequestManager::CancelRequest(PermissionBubbleRequest* request) {
158 // First look in the queued requests, where we can simply finish the request 158 // First look in the queued requests, where we can simply finish the request
159 // and go on. 159 // and go on.
160 std::vector<PermissionBubbleRequest*>::iterator requests_iter; 160 std::vector<PermissionBubbleRequest*>::iterator requests_iter;
161 for (requests_iter = queued_requests_.begin(); 161 for (requests_iter = queued_requests_.begin();
162 requests_iter != queued_requests_.end(); 162 requests_iter != queued_requests_.end();
163 requests_iter++) { 163 requests_iter++) {
164 if (*requests_iter == request) { 164 if (*requests_iter == request) {
165 RequestFinishedIncludingDuplicates(*requests_iter); 165 RequestFinishedIncludingDuplicates(*requests_iter);
166 queued_requests_.erase(requests_iter); 166 queued_requests_.erase(requests_iter);
167 return; 167 return;
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
217 if (request == it->second) { 217 if (request == it->second) {
218 it->second->RequestFinished(); 218 it->second->RequestFinished();
219 duplicate_requests_.erase(it); 219 duplicate_requests_.erase(it);
220 return; 220 return;
221 } 221 }
222 } 222 }
223 223
224 NOTREACHED(); // Callers should not cancel requests that are not pending. 224 NOTREACHED(); // Callers should not cancel requests that are not pending.
225 } 225 }
226 226
227 void PermissionBubbleManager::HideBubble() { 227 void PermissionRequestManager::HideBubble() {
228 // Disengage from the existing view if there is one. 228 // Disengage from the existing view if there is one.
229 if (!view_) 229 if (!view_)
230 return; 230 return;
231 231
232 view_->SetDelegate(nullptr); 232 view_->SetDelegate(nullptr);
233 view_->Hide(); 233 view_->Hide();
234 view_.reset(); 234 view_.reset();
235 } 235 }
236 236
237 void PermissionBubbleManager::DisplayPendingRequests() { 237 void PermissionRequestManager::DisplayPendingRequests() {
238 if (IsBubbleVisible()) 238 if (IsBubbleVisible())
239 return; 239 return;
240 240
241 #if defined(OS_ANDROID) 241 #if defined(OS_ANDROID)
242 NOTREACHED(); 242 NOTREACHED();
243 return; 243 return;
244 #else 244 #else
245 view_ = view_factory_.Run(chrome::FindBrowserWithWebContents(web_contents())); 245 view_ = view_factory_.Run(chrome::FindBrowserWithWebContents(web_contents()));
246 view_->SetDelegate(this); 246 view_->SetDelegate(this);
247 #endif 247 #endif
248 248
249 TriggerShowBubble(); 249 TriggerShowBubble();
250 } 250 }
251 251
252 void PermissionBubbleManager::UpdateAnchorPosition() { 252 void PermissionRequestManager::UpdateAnchorPosition() {
253 if (view_) 253 if (view_)
254 view_->UpdateAnchorPosition(); 254 view_->UpdateAnchorPosition();
255 } 255 }
256 256
257 bool PermissionBubbleManager::IsBubbleVisible() { 257 bool PermissionRequestManager::IsBubbleVisible() {
258 return view_ && view_->IsVisible(); 258 return view_ && view_->IsVisible();
259 } 259 }
260 260
261 gfx::NativeWindow PermissionBubbleManager::GetBubbleWindow() { 261 gfx::NativeWindow PermissionRequestManager::GetBubbleWindow() {
262 if (view_) 262 if (view_)
263 return view_->GetNativeWindow(); 263 return view_->GetNativeWindow();
264 return nullptr; 264 return nullptr;
265 } 265 }
266 266
267 void PermissionBubbleManager::DidNavigateMainFrame( 267 void PermissionRequestManager::DidNavigateMainFrame(
268 const content::LoadCommittedDetails& details, 268 const content::LoadCommittedDetails& details,
269 const content::FrameNavigateParams& params) { 269 const content::FrameNavigateParams& params) {
270 if (details.is_in_page) 270 if (details.is_in_page)
271 return; 271 return;
272 272
273 CancelPendingQueues(); 273 CancelPendingQueues();
274 FinalizeBubble(); 274 FinalizeBubble();
275 main_frame_has_fully_loaded_ = false; 275 main_frame_has_fully_loaded_ = false;
276 } 276 }
277 277
278 void PermissionBubbleManager::DocumentOnLoadCompletedInMainFrame() { 278 void PermissionRequestManager::DocumentOnLoadCompletedInMainFrame() {
279 main_frame_has_fully_loaded_ = true; 279 main_frame_has_fully_loaded_ = true;
280 // This is scheduled because while all calls to the browser have been 280 // This is scheduled because while all calls to the browser have been
281 // issued at DOMContentLoaded, they may be bouncing around in scheduled 281 // issued at DOMContentLoaded, they may be bouncing around in scheduled
282 // callbacks finding the UI thread still. This makes sure we allow those 282 // callbacks finding the UI thread still. This makes sure we allow those
283 // scheduled calls to AddRequest to complete before we show the page-load 283 // scheduled calls to AddRequest to complete before we show the page-load
284 // permissions bubble. 284 // permissions bubble.
285 ScheduleShowBubble(); 285 ScheduleShowBubble();
286 } 286 }
287 287
288 void PermissionBubbleManager::DocumentLoadedInFrame( 288 void PermissionRequestManager::DocumentLoadedInFrame(
289 content::RenderFrameHost* render_frame_host) { 289 content::RenderFrameHost* render_frame_host) {
290 ScheduleShowBubble(); 290 ScheduleShowBubble();
291 } 291 }
292 292
293 void PermissionBubbleManager::WebContentsDestroyed() { 293 void PermissionRequestManager::WebContentsDestroyed() {
294 // If the web contents has been destroyed, treat the bubble as cancelled. 294 // If the web contents has been destroyed, treat the bubble as cancelled.
295 CancelPendingQueues(); 295 CancelPendingQueues();
296 FinalizeBubble(); 296 FinalizeBubble();
297 297
298 // The WebContents is going away; be aggressively paranoid and delete 298 // The WebContents is going away; be aggressively paranoid and delete
299 // ourselves lest other parts of the system attempt to add permission bubbles 299 // ourselves lest other parts of the system attempt to add permission bubbles
300 // or use us otherwise during the destruction. 300 // or use us otherwise during the destruction.
301 web_contents()->RemoveUserData(UserDataKey()); 301 web_contents()->RemoveUserData(UserDataKey());
302 // That was the equivalent of "delete this". This object is now destroyed; 302 // That was the equivalent of "delete this". This object is now destroyed;
303 // returning from this function is the only safe thing to do. 303 // returning from this function is the only safe thing to do.
304 } 304 }
305 305
306 void PermissionBubbleManager::ToggleAccept(int request_index, bool new_value) { 306 void PermissionRequestManager::ToggleAccept(int request_index, bool new_value) {
307 DCHECK(request_index < static_cast<int>(accept_states_.size())); 307 DCHECK(request_index < static_cast<int>(accept_states_.size()));
308 accept_states_[request_index] = new_value; 308 accept_states_[request_index] = new_value;
309 } 309 }
310 310
311 void PermissionBubbleManager::Accept() { 311 void PermissionRequestManager::Accept() {
312 PermissionUmaUtil::PermissionPromptAccepted(requests_, accept_states_); 312 PermissionUmaUtil::PermissionPromptAccepted(requests_, accept_states_);
313 313
314 std::vector<PermissionBubbleRequest*>::iterator requests_iter; 314 std::vector<PermissionBubbleRequest*>::iterator requests_iter;
315 std::vector<bool>::iterator accepts_iter = accept_states_.begin(); 315 std::vector<bool>::iterator accepts_iter = accept_states_.begin();
316 for (requests_iter = requests_.begin(), accepts_iter = accept_states_.begin(); 316 for (requests_iter = requests_.begin(), accepts_iter = accept_states_.begin();
317 requests_iter != requests_.end(); 317 requests_iter != requests_.end();
318 requests_iter++, accepts_iter++) { 318 requests_iter++, accepts_iter++) {
319 if (*accepts_iter) { 319 if (*accepts_iter) {
320 PermissionGrantedIncludingDuplicates(*requests_iter); 320 PermissionGrantedIncludingDuplicates(*requests_iter);
321 } else { 321 } else {
322 PermissionDeniedIncludingDuplicates(*requests_iter); 322 PermissionDeniedIncludingDuplicates(*requests_iter);
323 } 323 }
324 } 324 }
325 FinalizeBubble(); 325 FinalizeBubble();
326 } 326 }
327 327
328 void PermissionBubbleManager::Deny() { 328 void PermissionRequestManager::Deny() {
329 PermissionUmaUtil::PermissionPromptDenied(requests_); 329 PermissionUmaUtil::PermissionPromptDenied(requests_);
330 330
331 std::vector<PermissionBubbleRequest*>::iterator requests_iter; 331 std::vector<PermissionBubbleRequest*>::iterator requests_iter;
332 for (requests_iter = requests_.begin(); 332 for (requests_iter = requests_.begin();
333 requests_iter != requests_.end(); 333 requests_iter != requests_.end();
334 requests_iter++) { 334 requests_iter++) {
335 PermissionDeniedIncludingDuplicates(*requests_iter); 335 PermissionDeniedIncludingDuplicates(*requests_iter);
336 } 336 }
337 FinalizeBubble(); 337 FinalizeBubble();
338 } 338 }
339 339
340 void PermissionBubbleManager::Closing() { 340 void PermissionRequestManager::Closing() {
341 std::vector<PermissionBubbleRequest*>::iterator requests_iter; 341 std::vector<PermissionBubbleRequest*>::iterator requests_iter;
342 for (requests_iter = requests_.begin(); 342 for (requests_iter = requests_.begin();
343 requests_iter != requests_.end(); 343 requests_iter != requests_.end();
344 requests_iter++) { 344 requests_iter++) {
345 CancelledIncludingDuplicates(*requests_iter); 345 CancelledIncludingDuplicates(*requests_iter);
346 } 346 }
347 FinalizeBubble(); 347 FinalizeBubble();
348 } 348 }
349 349
350 void PermissionBubbleManager::ScheduleShowBubble() { 350 void PermissionRequestManager::ScheduleShowBubble() {
351 // ::ScheduleShowBubble() will be called again when the main frame will be 351 // ::ScheduleShowBubble() will be called again when the main frame will be
352 // loaded. 352 // loaded.
353 if (!main_frame_has_fully_loaded_) 353 if (!main_frame_has_fully_loaded_)
354 return; 354 return;
355 355
356 content::BrowserThread::PostTask( 356 content::BrowserThread::PostTask(
357 content::BrowserThread::UI, 357 content::BrowserThread::UI,
358 FROM_HERE, 358 FROM_HERE,
359 base::Bind(&PermissionBubbleManager::TriggerShowBubble, 359 base::Bind(&PermissionRequestManager::TriggerShowBubble,
360 weak_factory_.GetWeakPtr())); 360 weak_factory_.GetWeakPtr()));
361 } 361 }
362 362
363 void PermissionBubbleManager::TriggerShowBubble() { 363 void PermissionRequestManager::TriggerShowBubble() {
364 if (!view_) 364 if (!view_)
365 return; 365 return;
366 if (IsBubbleVisible()) 366 if (IsBubbleVisible())
367 return; 367 return;
368 if (!main_frame_has_fully_loaded_) 368 if (!main_frame_has_fully_loaded_)
369 return; 369 return;
370 if (requests_.empty() && queued_requests_.empty() && 370 if (requests_.empty() && queued_requests_.empty() &&
371 queued_frame_requests_.empty()) { 371 queued_frame_requests_.empty()) {
372 return; 372 return;
373 } 373 }
(...skipping 10 matching lines...) Expand all
384 384
385 view_->Show(requests_, accept_states_); 385 view_->Show(requests_, accept_states_);
386 PermissionUmaUtil::PermissionPromptShown(requests_); 386 PermissionUmaUtil::PermissionPromptShown(requests_);
387 NotifyBubbleAdded(); 387 NotifyBubbleAdded();
388 388
389 // If in testing mode, automatically respond to the bubble that was shown. 389 // If in testing mode, automatically respond to the bubble that was shown.
390 if (auto_response_for_test_ != NONE) 390 if (auto_response_for_test_ != NONE)
391 DoAutoResponseForTesting(); 391 DoAutoResponseForTesting();
392 } 392 }
393 393
394 void PermissionBubbleManager::FinalizeBubble() { 394 void PermissionRequestManager::FinalizeBubble() {
395 if (view_) 395 if (view_)
396 view_->Hide(); 396 view_->Hide();
397 397
398 std::vector<PermissionBubbleRequest*>::iterator requests_iter; 398 std::vector<PermissionBubbleRequest*>::iterator requests_iter;
399 for (requests_iter = requests_.begin(); 399 for (requests_iter = requests_.begin();
400 requests_iter != requests_.end(); 400 requests_iter != requests_.end();
401 requests_iter++) { 401 requests_iter++) {
402 RequestFinishedIncludingDuplicates(*requests_iter); 402 RequestFinishedIncludingDuplicates(*requests_iter);
403 } 403 }
404 requests_.clear(); 404 requests_.clear();
405 accept_states_.clear(); 405 accept_states_.clear();
406 if (queued_requests_.size() || queued_frame_requests_.size()) 406 if (queued_requests_.size() || queued_frame_requests_.size())
407 TriggerShowBubble(); 407 TriggerShowBubble();
408 else 408 else
409 request_url_ = GURL(); 409 request_url_ = GURL();
410 } 410 }
411 411
412 void PermissionBubbleManager::CancelPendingQueues() { 412 void PermissionRequestManager::CancelPendingQueues() {
413 std::vector<PermissionBubbleRequest*>::iterator requests_iter; 413 std::vector<PermissionBubbleRequest*>::iterator requests_iter;
414 for (requests_iter = queued_requests_.begin(); 414 for (requests_iter = queued_requests_.begin();
415 requests_iter != queued_requests_.end(); 415 requests_iter != queued_requests_.end();
416 requests_iter++) { 416 requests_iter++) {
417 RequestFinishedIncludingDuplicates(*requests_iter); 417 RequestFinishedIncludingDuplicates(*requests_iter);
418 } 418 }
419 for (requests_iter = queued_frame_requests_.begin(); 419 for (requests_iter = queued_frame_requests_.begin();
420 requests_iter != queued_frame_requests_.end(); 420 requests_iter != queued_frame_requests_.end();
421 requests_iter++) { 421 requests_iter++) {
422 RequestFinishedIncludingDuplicates(*requests_iter); 422 RequestFinishedIncludingDuplicates(*requests_iter);
423 } 423 }
424 queued_requests_.clear(); 424 queued_requests_.clear();
425 queued_frame_requests_.clear(); 425 queued_frame_requests_.clear();
426 } 426 }
427 427
428 PermissionBubbleRequest* PermissionBubbleManager::GetExistingRequest( 428 PermissionBubbleRequest* PermissionRequestManager::GetExistingRequest(
429 PermissionBubbleRequest* request) { 429 PermissionBubbleRequest* request) {
430 for (PermissionBubbleRequest* existing_request : requests_) 430 for (PermissionBubbleRequest* existing_request : requests_)
431 if (IsMessageTextEqual(existing_request, request)) 431 if (IsMessageTextEqual(existing_request, request))
432 return existing_request; 432 return existing_request;
433 for (PermissionBubbleRequest* existing_request : queued_requests_) 433 for (PermissionBubbleRequest* existing_request : queued_requests_)
434 if (IsMessageTextEqual(existing_request, request)) 434 if (IsMessageTextEqual(existing_request, request))
435 return existing_request; 435 return existing_request;
436 for (PermissionBubbleRequest* existing_request : queued_frame_requests_) 436 for (PermissionBubbleRequest* existing_request : queued_frame_requests_)
437 if (IsMessageTextEqual(existing_request, request)) 437 if (IsMessageTextEqual(existing_request, request))
438 return existing_request; 438 return existing_request;
439 return nullptr; 439 return nullptr;
440 } 440 }
441 441
442 void PermissionBubbleManager::PermissionGrantedIncludingDuplicates( 442 void PermissionRequestManager::PermissionGrantedIncludingDuplicates(
443 PermissionBubbleRequest* request) { 443 PermissionBubbleRequest* request) {
444 DCHECK_EQ(request, GetExistingRequest(request)) 444 DCHECK_EQ(request, GetExistingRequest(request))
445 << "Only requests in [queued_[frame_]]requests_ can have duplicates"; 445 << "Only requests in [queued_[frame_]]requests_ can have duplicates";
446 request->PermissionGranted(); 446 request->PermissionGranted();
447 auto range = duplicate_requests_.equal_range(request); 447 auto range = duplicate_requests_.equal_range(request);
448 for (auto it = range.first; it != range.second; ++it) 448 for (auto it = range.first; it != range.second; ++it)
449 it->second->PermissionGranted(); 449 it->second->PermissionGranted();
450 } 450 }
451 void PermissionBubbleManager::PermissionDeniedIncludingDuplicates( 451 void PermissionRequestManager::PermissionDeniedIncludingDuplicates(
452 PermissionBubbleRequest* request) { 452 PermissionBubbleRequest* request) {
453 DCHECK_EQ(request, GetExistingRequest(request)) 453 DCHECK_EQ(request, GetExistingRequest(request))
454 << "Only requests in [queued_[frame_]]requests_ can have duplicates"; 454 << "Only requests in [queued_[frame_]]requests_ can have duplicates";
455 request->PermissionDenied(); 455 request->PermissionDenied();
456 auto range = duplicate_requests_.equal_range(request); 456 auto range = duplicate_requests_.equal_range(request);
457 for (auto it = range.first; it != range.second; ++it) 457 for (auto it = range.first; it != range.second; ++it)
458 it->second->PermissionDenied(); 458 it->second->PermissionDenied();
459 } 459 }
460 void PermissionBubbleManager::CancelledIncludingDuplicates( 460 void PermissionRequestManager::CancelledIncludingDuplicates(
461 PermissionBubbleRequest* request) { 461 PermissionBubbleRequest* request) {
462 DCHECK_EQ(request, GetExistingRequest(request)) 462 DCHECK_EQ(request, GetExistingRequest(request))
463 << "Only requests in [queued_[frame_]]requests_ can have duplicates"; 463 << "Only requests in [queued_[frame_]]requests_ can have duplicates";
464 request->Cancelled(); 464 request->Cancelled();
465 auto range = duplicate_requests_.equal_range(request); 465 auto range = duplicate_requests_.equal_range(request);
466 for (auto it = range.first; it != range.second; ++it) 466 for (auto it = range.first; it != range.second; ++it)
467 it->second->Cancelled(); 467 it->second->Cancelled();
468 } 468 }
469 void PermissionBubbleManager::RequestFinishedIncludingDuplicates( 469 void PermissionRequestManager::RequestFinishedIncludingDuplicates(
470 PermissionBubbleRequest* request) { 470 PermissionBubbleRequest* request) {
471 // We can't call GetExistingRequest here, because other entries in requests_, 471 // We can't call GetExistingRequest here, because other entries in requests_,
472 // queued_requests_ or queued_frame_requests_ might already have been deleted. 472 // queued_requests_ or queued_frame_requests_ might already have been deleted.
473 DCHECK_EQ(1, std::count(requests_.begin(), requests_.end(), request) + 473 DCHECK_EQ(1, std::count(requests_.begin(), requests_.end(), request) +
474 std::count(queued_requests_.begin(), queued_requests_.end(), 474 std::count(queued_requests_.begin(), queued_requests_.end(),
475 request) + 475 request) +
476 std::count(queued_frame_requests_.begin(), 476 std::count(queued_frame_requests_.begin(),
477 queued_frame_requests_.end(), request)) 477 queued_frame_requests_.end(), request))
478 << "Only requests in [queued_[frame_]]requests_ can have duplicates"; 478 << "Only requests in [queued_[frame_]]requests_ can have duplicates";
479 request->RequestFinished(); 479 request->RequestFinished();
480 // Beyond this point, |request| has probably been deleted. 480 // Beyond this point, |request| has probably been deleted.
481 auto range = duplicate_requests_.equal_range(request); 481 auto range = duplicate_requests_.equal_range(request);
482 for (auto it = range.first; it != range.second; ++it) 482 for (auto it = range.first; it != range.second; ++it)
483 it->second->RequestFinished(); 483 it->second->RequestFinished();
484 // Additionally, we can now remove the duplicates. 484 // Additionally, we can now remove the duplicates.
485 duplicate_requests_.erase(request); 485 duplicate_requests_.erase(request);
486 } 486 }
487 487
488 void PermissionBubbleManager::AddObserver(Observer* observer) { 488 void PermissionRequestManager::AddObserver(Observer* observer) {
489 observer_list_.AddObserver(observer); 489 observer_list_.AddObserver(observer);
490 } 490 }
491 491
492 void PermissionBubbleManager::RemoveObserver(Observer* observer) { 492 void PermissionRequestManager::RemoveObserver(Observer* observer) {
493 observer_list_.RemoveObserver(observer); 493 observer_list_.RemoveObserver(observer);
494 } 494 }
495 495
496 void PermissionBubbleManager::NotifyBubbleAdded() { 496 void PermissionRequestManager::NotifyBubbleAdded() {
497 FOR_EACH_OBSERVER(Observer, observer_list_, OnBubbleAdded()); 497 FOR_EACH_OBSERVER(Observer, observer_list_, OnBubbleAdded());
498 } 498 }
499 499
500 void PermissionBubbleManager::DoAutoResponseForTesting() { 500 void PermissionRequestManager::DoAutoResponseForTesting() {
501 switch (auto_response_for_test_) { 501 switch (auto_response_for_test_) {
502 case ACCEPT_ALL: 502 case ACCEPT_ALL:
503 Accept(); 503 Accept();
504 break; 504 break;
505 case DENY_ALL: 505 case DENY_ALL:
506 Deny(); 506 Deny();
507 break; 507 break;
508 case DISMISS: 508 case DISMISS:
509 Closing(); 509 Closing();
510 break; 510 break;
511 case NONE: 511 case NONE:
512 NOTREACHED(); 512 NOTREACHED();
513 } 513 }
514 } 514 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698