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

Unified Diff: chrome/browser/permissions/permission_request_manager.cc

Issue 2853803002: Make PermissionRequestManager::requests_ correspond to the active prompt (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 side-by-side diff with in-line comments
Download patch
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 0dec1904f7ee8897b8fa091be1fc89a5deee2af8..ad680b86634f0aca91738da65fd14e760997d0b8 100644
--- a/chrome/browser/permissions/permission_request_manager.cc
+++ b/chrome/browser/permissions/permission_request_manager.cc
@@ -133,29 +133,20 @@ void PermissionRequestManager::AddRequest(PermissionRequest* request) {
return;
}
- if (IsBubbleVisible()) {
- if (is_main_frame) {
+ if (is_main_frame) {
+ if (IsBubbleVisible()) {
base::RecordAction(
base::UserMetricsAction("PermissionBubbleRequestQueued"));
- queued_requests_.push_back(request);
- } else {
- base::RecordAction(
- base::UserMetricsAction("PermissionBubbleIFrameRequestQueued"));
- queued_frame_requests_.push_back(request);
}
- return;
- }
-
- if (is_main_frame) {
- requests_.push_back(request);
- accept_states_.push_back(true);
+ queued_requests_.push_back(request);
} else {
base::RecordAction(
base::UserMetricsAction("PermissionBubbleIFrameRequestQueued"));
queued_frame_requests_.push_back(request);
}
- ScheduleShowBubble();
+ if (!IsBubbleVisible())
+ ScheduleShowBubble();
}
void PermissionRequestManager::CancelRequest(PermissionRequest* request) {
@@ -189,16 +180,16 @@ void PermissionRequestManager::CancelRequest(PermissionRequest* request) {
// We can simply erase the current entry in the request table if we aren't
// showing the dialog, or if we are showing it and it can accept the update.
- bool can_erase = !IsBubbleVisible() || view_->CanAcceptRequestUpdate();
+ bool can_erase = !view_ || view_->CanAcceptRequestUpdate();
if (can_erase) {
RequestFinishedIncludingDuplicates(*requests_iter);
requests_.erase(requests_iter);
accept_states_.erase(accepts_iter);
- if (IsBubbleVisible()) {
+ if (view_) {
view_->Hide();
// Will redraw the bubble if it is being shown.
- TriggerShowBubble();
+ DequeueRequestsAndShowBubble();
}
return;
}
@@ -246,7 +237,15 @@ void PermissionRequestManager::DisplayPendingRequests() {
view_ = view_factory_.Run(web_contents());
view_->SetDelegate(this);
- TriggerShowBubble();
+ if (!main_frame_has_fully_loaded_)
+ return;
+
+ if (requests_.empty()) {
+ DequeueRequestsAndShowBubble();
+ } else {
+ // We switched tabs away and back while a prompt was active.
raymes 2017/05/08 03:14:26 Thanks, this is much clearer now!
+ ShowBubble();
+ }
}
void PermissionRequestManager::UpdateAnchorPosition() {
@@ -255,7 +254,7 @@ void PermissionRequestManager::UpdateAnchorPosition() {
}
bool PermissionRequestManager::IsBubbleVisible() {
- return view_ && view_->IsVisible();
+ return view_ && !requests_.empty();
}
// static
@@ -371,31 +370,35 @@ void PermissionRequestManager::ScheduleShowBubble() {
content::BrowserThread::PostTask(
content::BrowserThread::UI, FROM_HERE,
- base::BindOnce(&PermissionRequestManager::TriggerShowBubble,
+ base::BindOnce(&PermissionRequestManager::DequeueRequestsAndShowBubble,
weak_factory_.GetWeakPtr()));
}
-void PermissionRequestManager::TriggerShowBubble() {
+void PermissionRequestManager::DequeueRequestsAndShowBubble() {
if (!view_)
return;
- if (IsBubbleVisible())
+ if (!requests_.empty())
return;
if (!main_frame_has_fully_loaded_)
return;
- if (requests_.empty() && queued_requests_.empty() &&
- queued_frame_requests_.empty()) {
+ if (queued_requests_.empty() && queued_frame_requests_.empty())
return;
- }
- if (requests_.empty()) {
- if (queued_requests_.size())
- requests_.swap(queued_requests_);
- else
- requests_.swap(queued_frame_requests_);
+ if (queued_requests_.size())
+ requests_.swap(queued_requests_);
+ else
+ requests_.swap(queued_frame_requests_);
- // Sets the default value for each request to be 'accept'.
- accept_states_.resize(requests_.size(), true);
- }
+ // Sets the default value for each request to be 'accept'.
+ accept_states_.resize(requests_.size(), true);
+
+ ShowBubble();
+}
+
+void PermissionRequestManager::ShowBubble() {
+ DCHECK(view_);
+ DCHECK(!requests_.empty());
+ DCHECK(main_frame_has_fully_loaded_);
view_->Show(requests_, accept_states_);
PermissionUmaUtil::PermissionPromptShown(requests_);
@@ -419,7 +422,7 @@ void PermissionRequestManager::FinalizeBubble() {
requests_.clear();
accept_states_.clear();
if (queued_requests_.size() || queued_frame_requests_.size())
- TriggerShowBubble();
+ DequeueRequestsAndShowBubble();
}
void PermissionRequestManager::CancelPendingQueues() {

Powered by Google App Engine
This is Rietveld 408576698