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

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

Issue 2952003003: Log site engagement scores for permission actions (Closed)
Patch Set: Created 3 years, 6 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 12 matching lines...) Expand all
23 namespace { 23 namespace {
24 24
25 class CancelledRequest : public PermissionRequest { 25 class CancelledRequest : public PermissionRequest {
26 public: 26 public:
27 explicit CancelledRequest(PermissionRequest* cancelled) 27 explicit CancelledRequest(PermissionRequest* cancelled)
28 : icon_(cancelled->GetIconId()), 28 : icon_(cancelled->GetIconId()),
29 #if defined(OS_ANDROID) 29 #if defined(OS_ANDROID)
30 message_(cancelled->GetMessageText()), 30 message_(cancelled->GetMessageText()),
31 #endif 31 #endif
32 message_fragment_(cancelled->GetMessageTextFragment()), 32 message_fragment_(cancelled->GetMessageTextFragment()),
33 origin_(cancelled->GetOrigin()) { 33 origin_(cancelled->GetOrigin()),
34 request_type_(cancelled->GetPermissionRequestType()) {
34 } 35 }
35 ~CancelledRequest() override {} 36 ~CancelledRequest() override {}
36 37
37 IconId GetIconId() const override { return icon_; } 38 IconId GetIconId() const override { return icon_; }
38 #if defined(OS_ANDROID) 39 #if defined(OS_ANDROID)
39 base::string16 GetMessageText() const override { return message_; } 40 base::string16 GetMessageText() const override { return message_; }
40 #endif 41 #endif
41 base::string16 GetMessageTextFragment() const override { 42 base::string16 GetMessageTextFragment() const override {
42 return message_fragment_; 43 return message_fragment_;
43 } 44 }
44 GURL GetOrigin() const override { return origin_; } 45 GURL GetOrigin() const override { return origin_; }
45 46
46 // These are all no-ops since the placeholder is non-forwarding. 47 // These are all no-ops since the placeholder is non-forwarding.
47 void PermissionGranted() override {} 48 void PermissionGranted() override {}
48 void PermissionDenied() override {} 49 void PermissionDenied() override {}
49 void Cancelled() override {} 50 void Cancelled() override {}
50 51
51 void RequestFinished() override { delete this; } 52 void RequestFinished() override { delete this; }
52 53
54 PermissionRequestType GetPermissionRequestType() const override {
55 return request_type_;
56 }
57
53 private: 58 private:
54 IconId icon_; 59 IconId icon_;
55 #if defined(OS_ANDROID) 60 #if defined(OS_ANDROID)
56 base::string16 message_; 61 base::string16 message_;
57 #endif 62 #endif
58 base::string16 message_fragment_; 63 base::string16 message_fragment_;
59 GURL origin_; 64 GURL origin_;
65 PermissionRequestType request_type_;
60 }; 66 };
61 67
62 bool IsMessageTextEqual(PermissionRequest* a, 68 bool IsMessageTextEqual(PermissionRequest* a,
63 PermissionRequest* b) { 69 PermissionRequest* b) {
64 if (a == b) 70 if (a == b)
65 return true; 71 return true;
66 if (a->GetMessageTextFragment() == b->GetMessageTextFragment() && 72 if (a->GetMessageTextFragment() == b->GetMessageTextFragment() &&
67 a->GetOrigin() == b->GetOrigin()) { 73 a->GetOrigin() == b->GetOrigin()) {
68 return true; 74 return true;
69 } 75 }
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
114 persist_(true), 120 persist_(true),
115 auto_response_for_test_(NONE), 121 auto_response_for_test_(NONE),
116 weak_factory_(this) { 122 weak_factory_(this) {
117 #if defined(OS_ANDROID) 123 #if defined(OS_ANDROID)
118 view_ = view_factory_.Run(web_contents); 124 view_ = view_factory_.Run(web_contents);
119 view_->SetDelegate(this); 125 view_->SetDelegate(this);
120 #endif 126 #endif
121 } 127 }
122 128
123 PermissionRequestManager::~PermissionRequestManager() { 129 PermissionRequestManager::~PermissionRequestManager() {
130 if (!requests_.empty())
131 PermissionUmaUtil::PermissionPromptIgnored(requests_, web_contents());
raymes 2017/07/06 05:03:15 I think by this stage the requests may be empty.
Timothy Loh 2017/07/19 06:03:43 Moved to CleanUpRequests
132
124 if (view_ != NULL) 133 if (view_ != NULL)
125 view_->SetDelegate(NULL); 134 view_->SetDelegate(NULL);
126 135
127 for (PermissionRequest* request : requests_) 136 for (PermissionRequest* request : requests_)
128 request->RequestFinished(); 137 request->RequestFinished();
129 for (PermissionRequest* request : queued_requests_) 138 for (PermissionRequest* request : queued_requests_)
130 request->RequestFinished(); 139 request->RequestFinished();
131 for (const auto& entry : duplicate_requests_) 140 for (const auto& entry : duplicate_requests_)
132 entry.second->RequestFinished(); 141 entry.second->RequestFinished();
133 } 142 }
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
193 std::vector<PermissionRequest*>::iterator requests_iter; 202 std::vector<PermissionRequest*>::iterator requests_iter;
194 for (requests_iter = requests_.begin(); requests_iter != requests_.end(); 203 for (requests_iter = requests_.begin(); requests_iter != requests_.end();
195 requests_iter++) { 204 requests_iter++) {
196 if (*requests_iter != request) 205 if (*requests_iter != request)
197 continue; 206 continue;
198 207
199 // We can simply erase the current entry in the request table if we aren't 208 // We can simply erase the current entry in the request table if we aren't
200 // showing the dialog, or if we are showing it and it can accept the update. 209 // showing the dialog, or if we are showing it and it can accept the update.
201 bool can_erase = !view_ || view_->CanAcceptRequestUpdate(); 210 bool can_erase = !view_ || view_->CanAcceptRequestUpdate();
202 if (can_erase) { 211 if (can_erase) {
212 // Grouped (mic+camera) requests are currently never cancelled.
213 DCHECK_EQ(static_cast<size_t>(1), requests_.size());
214 PermissionUmaUtil::PermissionPromptIgnored(requests_, web_contents());
215
203 RequestFinishedIncludingDuplicates(*requests_iter); 216 RequestFinishedIncludingDuplicates(*requests_iter);
204 requests_.erase(requests_iter); 217 requests_.erase(requests_iter);
205 218
206 if (view_) { 219 if (view_) {
207 view_->Hide(); 220 view_->Hide();
208 // Will redraw the bubble if it is being shown. 221 // Will redraw the bubble if it is being shown.
209 DequeueRequestsAndShowBubble(); 222 DequeueRequestsAndShowBubble();
Timothy Loh 2017/06/22 08:02:20 I think this results in us counting ignores for qu
210 } 223 }
211 return; 224 return;
212 } 225 }
213 226
214 // Cancel the existing request and replace it with a dummy. 227 // Cancel the existing request and replace it with a dummy.
215 PermissionRequest* cancelled_request = 228 PermissionRequest* cancelled_request =
216 new CancelledRequest(*requests_iter); 229 new CancelledRequest(*requests_iter);
217 RequestFinishedIncludingDuplicates(*requests_iter); 230 RequestFinishedIncludingDuplicates(*requests_iter);
218 *requests_iter = cancelled_request; 231 *requests_iter = cancelled_request;
219 return; 232 return;
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
332 345
333 const std::vector<PermissionRequest*>& PermissionRequestManager::Requests() { 346 const std::vector<PermissionRequest*>& PermissionRequestManager::Requests() {
334 return requests_; 347 return requests_;
335 } 348 }
336 349
337 void PermissionRequestManager::TogglePersist(bool new_value) { 350 void PermissionRequestManager::TogglePersist(bool new_value) {
338 persist_ = new_value; 351 persist_ = new_value;
339 } 352 }
340 353
341 void PermissionRequestManager::Accept() { 354 void PermissionRequestManager::Accept() {
342 PermissionUmaUtil::PermissionPromptAccepted(requests_); 355 PermissionUmaUtil::PermissionPromptAccepted(requests_, web_contents());
343 356
344 std::vector<PermissionRequest*>::iterator requests_iter; 357 std::vector<PermissionRequest*>::iterator requests_iter;
345 for (requests_iter = requests_.begin(); requests_iter != requests_.end(); 358 for (requests_iter = requests_.begin(); requests_iter != requests_.end();
346 requests_iter++) { 359 requests_iter++) {
347 PermissionGrantedIncludingDuplicates(*requests_iter); 360 PermissionGrantedIncludingDuplicates(*requests_iter);
348 } 361 }
349 FinalizeBubble(); 362 FinalizeBubble();
350 } 363 }
351 364
352 void PermissionRequestManager::Deny() { 365 void PermissionRequestManager::Deny() {
353 PermissionUmaUtil::PermissionPromptDenied(requests_); 366 PermissionUmaUtil::PermissionPromptDenied(requests_, web_contents());
354 367
355 std::vector<PermissionRequest*>::iterator requests_iter; 368 std::vector<PermissionRequest*>::iterator requests_iter;
356 for (requests_iter = requests_.begin(); 369 for (requests_iter = requests_.begin();
357 requests_iter != requests_.end(); 370 requests_iter != requests_.end();
358 requests_iter++) { 371 requests_iter++) {
359 PermissionDeniedIncludingDuplicates(*requests_iter); 372 PermissionDeniedIncludingDuplicates(*requests_iter);
360 } 373 }
361 FinalizeBubble(); 374 FinalizeBubble();
362 } 375 }
363 376
364 void PermissionRequestManager::Closing() { 377 void PermissionRequestManager::Closing() {
378 PermissionUmaUtil::PermissionPromptDismissed(requests_, web_contents());
379
365 std::vector<PermissionRequest*>::iterator requests_iter; 380 std::vector<PermissionRequest*>::iterator requests_iter;
366 for (requests_iter = requests_.begin(); 381 for (requests_iter = requests_.begin();
367 requests_iter != requests_.end(); 382 requests_iter != requests_.end();
368 requests_iter++) { 383 requests_iter++) {
369 CancelledIncludingDuplicates(*requests_iter); 384 CancelledIncludingDuplicates(*requests_iter);
370 } 385 }
371 FinalizeBubble(); 386 FinalizeBubble();
372 } 387 }
373 388
374 void PermissionRequestManager::ScheduleShowBubble() { 389 void PermissionRequestManager::ScheduleShowBubble() {
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
526 case DENY_ALL: 541 case DENY_ALL:
527 Deny(); 542 Deny();
528 break; 543 break;
529 case DISMISS: 544 case DISMISS:
530 Closing(); 545 Closing();
531 break; 546 break;
532 case NONE: 547 case NONE:
533 NOTREACHED(); 548 NOTREACHED();
534 } 549 }
535 } 550 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698