| Index: chrome/browser/permissions/permission_request_manager.cc
|
| diff --git a/chrome/browser/permissions/permission_request_manager.cc b/chrome/browser/permissions/permission_request_manager.cc
|
| index 678c50aaa8e7b08794bf46c73d80abd639cf6379..782fdc2e4bc6a94d53fe2de62dbb5012ed2008a9 100644
|
| --- a/chrome/browser/permissions/permission_request_manager.cc
|
| +++ b/chrome/browser/permissions/permission_request_manager.cc
|
| @@ -31,7 +31,8 @@ class CancelledRequest : public PermissionRequest {
|
| message_(cancelled->GetMessageText()),
|
| #endif
|
| message_fragment_(cancelled->GetMessageTextFragment()),
|
| - origin_(cancelled->GetOrigin()) {
|
| + origin_(cancelled->GetOrigin()),
|
| + request_type_(cancelled->GetPermissionRequestType()) {
|
| }
|
| ~CancelledRequest() override {}
|
|
|
| @@ -51,6 +52,10 @@ class CancelledRequest : public PermissionRequest {
|
|
|
| void RequestFinished() override { delete this; }
|
|
|
| + PermissionRequestType GetPermissionRequestType() const override {
|
| + return request_type_;
|
| + }
|
| +
|
| private:
|
| IconId icon_;
|
| #if defined(OS_ANDROID)
|
| @@ -58,6 +63,7 @@ class CancelledRequest : public PermissionRequest {
|
| #endif
|
| base::string16 message_fragment_;
|
| GURL origin_;
|
| + PermissionRequestType request_type_;
|
| };
|
|
|
| bool IsMessageTextEqual(PermissionRequest* a,
|
| @@ -187,35 +193,23 @@ void PermissionRequestManager::CancelRequest(PermissionRequest* request) {
|
| }
|
| }
|
|
|
| - std::vector<PermissionRequest*>::iterator requests_iter;
|
| - for (requests_iter = requests_.begin(); requests_iter != requests_.end();
|
| - requests_iter++) {
|
| - if (*requests_iter != request)
|
| - continue;
|
| + if (!requests_.empty() && requests_[0] == request) {
|
| + // Grouped (mic+camera) requests are currently never cancelled.
|
| + // TODO(timloh): We should fix this at some point.
|
| + DCHECK_EQ(static_cast<size_t>(1), requests_.size());
|
|
|
| - // We can simply erase the current entry in the request table if we aren't
|
| - // showing the dialog (because we switched tabs with an active prompt), or
|
| - // if we are showing it and it can accept the update.
|
| + // We can finalize the prompt if we aren't showing the dialog (because we
|
| + // switched tabs with an active prompt), or if we are showing it and it
|
| + // can accept the update.
|
| if (!view_ || view_->CanAcceptRequestUpdate()) {
|
| - // TODO(timloh): We should fix this at some point.
|
| - // Grouped (mic+camera) requests are currently never cancelled.
|
| - DCHECK_EQ(static_cast<size_t>(1), requests_.size());
|
| -
|
| - if (view_)
|
| - DeleteBubble();
|
| -
|
| - RequestFinishedIncludingDuplicates(*requests_iter);
|
| - requests_.erase(requests_iter);
|
| -
|
| - DequeueRequestsAndShowBubble();
|
| + FinalizeBubble(PermissionAction::IGNORED);
|
| return;
|
| }
|
|
|
| // Cancel the existing request and replace it with a dummy.
|
| - PermissionRequest* cancelled_request =
|
| - new CancelledRequest(*requests_iter);
|
| - RequestFinishedIncludingDuplicates(*requests_iter);
|
| - *requests_iter = cancelled_request;
|
| + PermissionRequest* cancelled_request = new CancelledRequest(request);
|
| + RequestFinishedIncludingDuplicates(request);
|
| + requests_[0] = cancelled_request;
|
| return;
|
| }
|
|
|
| @@ -329,26 +323,24 @@ void PermissionRequestManager::TogglePersist(bool new_value) {
|
| }
|
|
|
| void PermissionRequestManager::Accept() {
|
| - PermissionUmaUtil::PermissionPromptAccepted(requests_);
|
| -
|
| + DCHECK(view_);
|
| std::vector<PermissionRequest*>::iterator requests_iter;
|
| for (requests_iter = requests_.begin(); requests_iter != requests_.end();
|
| requests_iter++) {
|
| PermissionGrantedIncludingDuplicates(*requests_iter);
|
| }
|
| - FinalizeBubble();
|
| + FinalizeBubble(PermissionAction::GRANTED);
|
| }
|
|
|
| void PermissionRequestManager::Deny() {
|
| - PermissionUmaUtil::PermissionPromptDenied(requests_);
|
| -
|
| + DCHECK(view_);
|
| std::vector<PermissionRequest*>::iterator requests_iter;
|
| for (requests_iter = requests_.begin();
|
| requests_iter != requests_.end();
|
| requests_iter++) {
|
| PermissionDeniedIncludingDuplicates(*requests_iter);
|
| }
|
| - FinalizeBubble();
|
| + FinalizeBubble(PermissionAction::DENIED);
|
| }
|
|
|
| void PermissionRequestManager::Closing() {
|
| @@ -357,13 +349,15 @@ void PermissionRequestManager::Closing() {
|
| if (!view_)
|
| return;
|
| #endif
|
| +
|
| + DCHECK(view_);
|
| std::vector<PermissionRequest*>::iterator requests_iter;
|
| for (requests_iter = requests_.begin();
|
| requests_iter != requests_.end();
|
| requests_iter++) {
|
| CancelledIncludingDuplicates(*requests_iter);
|
| }
|
| - FinalizeBubble();
|
| + FinalizeBubble(PermissionAction::DISMISSED);
|
| }
|
|
|
| void PermissionRequestManager::ScheduleShowBubble() {
|
| @@ -419,11 +413,15 @@ void PermissionRequestManager::DeleteBubble() {
|
| view_.reset();
|
| }
|
|
|
| -void PermissionRequestManager::FinalizeBubble() {
|
| - DCHECK(view_);
|
| +void PermissionRequestManager::FinalizeBubble(
|
| + PermissionAction permission_action) {
|
| DCHECK(!requests_.empty());
|
|
|
| - DeleteBubble();
|
| + if (view_)
|
| + DeleteBubble();
|
| +
|
| + PermissionUmaUtil::PermissionPromptResolved(requests_, web_contents(),
|
| + permission_action);
|
|
|
| std::vector<PermissionRequest*>::iterator requests_iter;
|
| for (requests_iter = requests_.begin();
|
| @@ -446,7 +444,7 @@ void PermissionRequestManager::CleanUpRequests() {
|
| queued_requests_.clear();
|
|
|
| if (view_)
|
| - FinalizeBubble();
|
| + FinalizeBubble(PermissionAction::IGNORED);
|
| }
|
|
|
| PermissionRequest* PermissionRequestManager::GetExistingRequest(
|
|
|