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

Unified Diff: chrome/browser/media/chrome_midi_permission_context.cc

Issue 265773002: [Media,Geolocation] Add permission bubble cancellation. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: iterator, checks Created 6 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/media/chrome_midi_permission_context.cc
diff --git a/chrome/browser/media/chrome_midi_permission_context.cc b/chrome/browser/media/chrome_midi_permission_context.cc
index 223609ad9425d865a03c714459a49fe40b143e86..b0b7beb6b3f5d3cfc55dd9eabcb5f323bd6a4109 100644
--- a/chrome/browser/media/chrome_midi_permission_context.cc
+++ b/chrome/browser/media/chrome_midi_permission_context.cc
@@ -50,6 +50,7 @@ class MidiPermissionRequest : public PermissionBubbleRequest {
bool user_gesture_;
std::string display_languages_;
const content::BrowserContext::MidiSysExPermissionCallback& callback_;
+ bool is_finished_;
DISALLOW_COPY_AND_ASSIGN(MidiPermissionRequest);
};
@@ -66,9 +67,12 @@ MidiPermissionRequest::MidiPermissionRequest(
requesting_frame_(requesting_frame),
user_gesture_(user_gesture),
display_languages_(display_languages),
- callback_(callback) {}
+ callback_(callback),
+ is_finished_(false) {}
-MidiPermissionRequest::~MidiPermissionRequest() {}
+MidiPermissionRequest::~MidiPermissionRequest() {
+ DCHECK(is_finished_);
+}
int MidiPermissionRequest::GetIconID() const {
return IDR_ALLOWED_MIDI_SYSEX;
@@ -101,11 +105,12 @@ void MidiPermissionRequest::PermissionDenied() {
}
void MidiPermissionRequest::Cancelled() {
Ami GONE FROM CHROMIUM 2014/05/21 20:15:13 // This is called if the info-bar is dismissed. P
Greg Billock 2014/05/21 22:46:42 Yeah, me too. That's why I put in initially that c
Ami GONE FROM CHROMIUM 2014/05/21 23:47:34 Shouldn't you find out before reverting the behavi
Greg Billock 2014/05/22 01:50:00 This (the change in behavior) is flagged off curre
- context_->NotifyPermissionSet(id_, requesting_frame_, callback_, false);
}
void MidiPermissionRequest::RequestFinished() {
- delete this;
+ is_finished_ = true;
+ // Deletes 'this'.
+ context_->RequestFinished(this);
}
ChromeMidiPermissionContext::ChromeMidiPermissionContext(Profile* profile)
@@ -200,10 +205,14 @@ void ChromeMidiPermissionContext::DecidePermission(
PermissionBubbleManager* bubble_manager =
PermissionBubbleManager::FromWebContents(web_contents);
if (bubble_manager) {
- bubble_manager->AddRequest(new MidiPermissionRequest(
+ MidiPermissionRequest* request = new MidiPermissionRequest(
this, id, requesting_frame, user_gesture,
profile_->GetPrefs()->GetString(prefs::kAcceptLanguages),
- callback));
+ callback);
+ bool inserted = pending_requests_.insert(
+ make_pair(id.ToString(), request)).second;
+ DCHECK(inserted) << "Duplicate id " << id.ToString();
+ bubble_manager->AddRequest(request);
}
return;
}
@@ -256,11 +265,41 @@ PermissionQueueController* ChromeMidiPermissionContext::GetQueueController() {
return permission_queue_controller_.get();
}
+void ChromeMidiPermissionContext::RequestFinished(
+ MidiPermissionRequest* request) {
+ std::map<std::string, MidiPermissionRequest*>::iterator it;
+ for (it = pending_requests_.begin(); it != pending_requests_.end(); it++) {
+ if (it->second == request) {
+ delete it->second;
+ pending_requests_.erase(it);
+ return;
+ }
+ }
+
+ NOTREACHED() << "Missing request";
+}
+
void ChromeMidiPermissionContext::CancelPendingInfobarRequest(
const PermissionRequestID& id) {
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
if (shutting_down_)
return;
- // TODO(gbillock): Add support for cancellation to permission bubbles.
+
+ if (PermissionBubbleManager::Enabled()) {
+ std::map<std::string, MidiPermissionRequest*>::iterator it =
+ pending_requests_.find(id.ToString());
+ MidiPermissionRequest* cancelling =
+ (it != pending_requests_.end()) ? it->second : NULL;
+
+ content::WebContents* web_contents = tab_util::GetWebContentsByID(
+ id.render_process_id(), id.render_view_id());
+ if (cancelling != NULL && web_contents != NULL &&
+ PermissionBubbleManager::FromWebContents(web_contents) != NULL) {
+ PermissionBubbleManager::FromWebContents(web_contents)->
+ CancelRequest(cancelling);
+ }
+ return;
+ }
+
GetQueueController()->CancelInfoBarRequest(id);
}

Powered by Google App Engine
This is Rietveld 408576698