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

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

Issue 2829023002: Fix cancelling permission requests on Android when the PermissionRequestManager is enabled (Closed)
Patch Set: rebase Created 3 years, 7 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/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"
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
172 } 172 }
173 173
174 std::vector<bool>::iterator accepts_iter = accept_states_.begin(); 174 std::vector<bool>::iterator accepts_iter = accept_states_.begin();
175 for (requests_iter = requests_.begin(), accepts_iter = accept_states_.begin(); 175 for (requests_iter = requests_.begin(), accepts_iter = accept_states_.begin();
176 requests_iter != requests_.end(); 176 requests_iter != requests_.end();
177 requests_iter++, accepts_iter++) { 177 requests_iter++, accepts_iter++) {
178 if (*requests_iter != request) 178 if (*requests_iter != request)
179 continue; 179 continue;
180 180
181 // We can simply erase the current entry in the request table if we aren't 181 // We can simply erase the current entry in the request table if we aren't
182 // showing the dialog, or if we are showing it and it can accept the update. 182 // showing the dialog, or if we are showing it and it can be cancelled.
183 bool can_erase = !view_ || view_->CanAcceptRequestUpdate(); 183 if (!view_ || view_->MaybeCancelRequest()) {
184 if (can_erase) {
185 RequestFinishedIncludingDuplicates(*requests_iter);
186 requests_.erase(requests_iter); 184 requests_.erase(requests_iter);
187 accept_states_.erase(accepts_iter); 185 accept_states_.erase(accepts_iter);
188 186 if (view_)
189 if (view_) {
190 view_->Hide();
191 // Will redraw the bubble if it is being shown.
192 DequeueRequestsAndShowBubble(); 187 DequeueRequestsAndShowBubble();
193 } 188 } else {
194 return; 189 // The prompt is still being shown so replace the request with a dummy.
190 *requests_iter = new CancelledRequest(*requests_iter);
195 } 191 }
196 192 RequestFinishedIncludingDuplicates(request);
197 // Cancel the existing request and replace it with a dummy.
198 PermissionRequest* cancelled_request =
199 new CancelledRequest(*requests_iter);
200 RequestFinishedIncludingDuplicates(*requests_iter);
201 *requests_iter = cancelled_request;
202 return; 193 return;
203 } 194 }
204 195
205 // Since |request| wasn't found in queued_requests_, queued_frame_requests_ or 196 // Since |request| wasn't found in queued_requests_, queued_frame_requests_ or
206 // requests_ it must have been marked as a duplicate. We can't search 197 // requests_ it must have been marked as a duplicate. We can't search
207 // duplicate_requests_ by value, so instead use GetExistingRequest to find the 198 // duplicate_requests_ by value, so instead use GetExistingRequest to find the
208 // key (request it was duped against), and iterate through duplicates of that. 199 // key (request it was duped against), and iterate through duplicates of that.
209 PermissionRequest* existing_request = GetExistingRequest(request); 200 PermissionRequest* existing_request = GetExistingRequest(request);
210 auto range = duplicate_requests_.equal_range(existing_request); 201 auto range = duplicate_requests_.equal_range(existing_request);
211 for (auto it = range.first; it != range.second; ++it) { 202 for (auto it = range.first; it != range.second; ++it) {
(...skipping 331 matching lines...) Expand 10 before | Expand all | Expand 10 after
543 Accept(); 534 Accept();
544 } 535 }
545 break; 536 break;
546 case DISMISS: 537 case DISMISS:
547 Closing(); 538 Closing();
548 break; 539 break;
549 case NONE: 540 case NONE:
550 NOTREACHED(); 541 NOTREACHED();
551 } 542 }
552 } 543 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698