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

Side by Side 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: rebase 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/media/chrome_midi_permission_context.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/media/chrome_midi_permission_context.h" 5 #include "chrome/browser/media/chrome_midi_permission_context.h"
6 6
7 #include "base/prefs/pref_service.h" 7 #include "base/prefs/pref_service.h"
8 #include "chrome/browser/content_settings/host_content_settings_map.h" 8 #include "chrome/browser/content_settings/host_content_settings_map.h"
9 #include "chrome/browser/content_settings/permission_queue_controller.h" 9 #include "chrome/browser/content_settings/permission_queue_controller.h"
10 #include "chrome/browser/content_settings/permission_request_id.h" 10 #include "chrome/browser/content_settings/permission_request_id.h"
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
43 virtual void Cancelled() OVERRIDE; 43 virtual void Cancelled() OVERRIDE;
44 virtual void RequestFinished() OVERRIDE; 44 virtual void RequestFinished() OVERRIDE;
45 45
46 private: 46 private:
47 ChromeMidiPermissionContext* context_; 47 ChromeMidiPermissionContext* context_;
48 const PermissionRequestID id_; 48 const PermissionRequestID id_;
49 GURL requesting_frame_; 49 GURL requesting_frame_;
50 bool user_gesture_; 50 bool user_gesture_;
51 std::string display_languages_; 51 std::string display_languages_;
52 const content::BrowserContext::MidiSysExPermissionCallback& callback_; 52 const content::BrowserContext::MidiSysExPermissionCallback& callback_;
53 bool is_finished_;
53 54
54 DISALLOW_COPY_AND_ASSIGN(MidiPermissionRequest); 55 DISALLOW_COPY_AND_ASSIGN(MidiPermissionRequest);
55 }; 56 };
56 57
57 MidiPermissionRequest::MidiPermissionRequest( 58 MidiPermissionRequest::MidiPermissionRequest(
58 ChromeMidiPermissionContext* context, 59 ChromeMidiPermissionContext* context,
59 const PermissionRequestID& id, 60 const PermissionRequestID& id,
60 const GURL& requesting_frame, 61 const GURL& requesting_frame,
61 bool user_gesture, 62 bool user_gesture,
62 const std::string& display_languages, 63 const std::string& display_languages,
63 const content::BrowserContext::MidiSysExPermissionCallback& callback) 64 const content::BrowserContext::MidiSysExPermissionCallback& callback)
64 : context_(context), 65 : context_(context),
65 id_(id), 66 id_(id),
66 requesting_frame_(requesting_frame), 67 requesting_frame_(requesting_frame),
67 user_gesture_(user_gesture), 68 user_gesture_(user_gesture),
68 display_languages_(display_languages), 69 display_languages_(display_languages),
69 callback_(callback) {} 70 callback_(callback),
71 is_finished_(false) {}
70 72
71 MidiPermissionRequest::~MidiPermissionRequest() {} 73 MidiPermissionRequest::~MidiPermissionRequest() {
74 DCHECK(is_finished_);
75 }
72 76
73 int MidiPermissionRequest::GetIconID() const { 77 int MidiPermissionRequest::GetIconID() const {
74 return IDR_ALLOWED_MIDI_SYSEX; 78 return IDR_ALLOWED_MIDI_SYSEX;
75 } 79 }
76 80
77 base::string16 MidiPermissionRequest::GetMessageText() const { 81 base::string16 MidiPermissionRequest::GetMessageText() const {
78 return l10n_util::GetStringFUTF16( 82 return l10n_util::GetStringFUTF16(
79 IDS_MIDI_SYSEX_INFOBAR_QUESTION, 83 IDS_MIDI_SYSEX_INFOBAR_QUESTION,
80 net::FormatUrl(requesting_frame_.GetOrigin(), display_languages_)); 84 net::FormatUrl(requesting_frame_.GetOrigin(), display_languages_));
81 } 85 }
(...skipping 12 matching lines...) Expand all
94 98
95 void MidiPermissionRequest::PermissionGranted() { 99 void MidiPermissionRequest::PermissionGranted() {
96 context_->NotifyPermissionSet(id_, requesting_frame_, callback_, true); 100 context_->NotifyPermissionSet(id_, requesting_frame_, callback_, true);
97 } 101 }
98 102
99 void MidiPermissionRequest::PermissionDenied() { 103 void MidiPermissionRequest::PermissionDenied() {
100 context_->NotifyPermissionSet(id_, requesting_frame_, callback_, false); 104 context_->NotifyPermissionSet(id_, requesting_frame_, callback_, false);
101 } 105 }
102 106
103 void MidiPermissionRequest::Cancelled() { 107 void MidiPermissionRequest::Cancelled() {
104 context_->NotifyPermissionSet(id_, requesting_frame_, callback_, false);
105 } 108 }
106 109
107 void MidiPermissionRequest::RequestFinished() { 110 void MidiPermissionRequest::RequestFinished() {
108 delete this; 111 is_finished_ = true;
112 // Deletes 'this'.
113 context_->RequestFinished(this);
109 } 114 }
110 115
111 ChromeMidiPermissionContext::ChromeMidiPermissionContext(Profile* profile) 116 ChromeMidiPermissionContext::ChromeMidiPermissionContext(Profile* profile)
112 : profile_(profile), 117 : profile_(profile),
113 shutting_down_(false) { 118 shutting_down_(false) {
114 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); 119 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
115 } 120 }
116 121
117 ChromeMidiPermissionContext::~ChromeMidiPermissionContext() { 122 ChromeMidiPermissionContext::~ChromeMidiPermissionContext() {
118 DCHECK(!permission_queue_controller_); 123 DCHECK(!permission_queue_controller_);
124 DCHECK(pending_requests_.empty());
119 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); 125 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
120 } 126 }
121 127
122 void ChromeMidiPermissionContext::Shutdown() { 128 void ChromeMidiPermissionContext::Shutdown() {
123 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); 129 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
124 permission_queue_controller_.reset(); 130 permission_queue_controller_.reset();
125 shutting_down_ = true; 131 shutting_down_ = true;
126 } 132 }
127 133
128 void ChromeMidiPermissionContext::RequestMidiSysExPermission( 134 void ChromeMidiPermissionContext::RequestMidiSysExPermission(
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
193 PermissionDecided(id, requesting_frame, embedder, callback, false); 199 PermissionDecided(id, requesting_frame, embedder, callback, false);
194 break; 200 break;
195 case CONTENT_SETTING_ALLOW: 201 case CONTENT_SETTING_ALLOW:
196 PermissionDecided(id, requesting_frame, embedder, callback, true); 202 PermissionDecided(id, requesting_frame, embedder, callback, true);
197 break; 203 break;
198 default: 204 default:
199 if (PermissionBubbleManager::Enabled()) { 205 if (PermissionBubbleManager::Enabled()) {
200 PermissionBubbleManager* bubble_manager = 206 PermissionBubbleManager* bubble_manager =
201 PermissionBubbleManager::FromWebContents(web_contents); 207 PermissionBubbleManager::FromWebContents(web_contents);
202 if (bubble_manager) { 208 if (bubble_manager) {
203 bubble_manager->AddRequest(new MidiPermissionRequest( 209 scoped_ptr<MidiPermissionRequest> request_ptr(
204 this, id, requesting_frame, user_gesture, 210 new MidiPermissionRequest(
205 profile_->GetPrefs()->GetString(prefs::kAcceptLanguages), 211 this, id, requesting_frame, user_gesture,
206 callback)); 212 profile_->GetPrefs()->GetString(prefs::kAcceptLanguages),
213 callback));
214 MidiPermissionRequest* request = request_ptr.get();
215 bool inserted = pending_requests_.add(
216 id.ToString(), request_ptr.Pass()).second;
217 DCHECK(inserted) << "Duplicate id " << id.ToString();
218 bubble_manager->AddRequest(request);
207 } 219 }
208 return; 220 return;
209 } 221 }
210 222
211 // TODO(gbillock): Delete this and the infobar delegate when 223 // TODO(gbillock): Delete this and the infobar delegate when
212 // we're using only bubbles. crbug.com/337458 224 // we're using only bubbles. crbug.com/337458
213 GetQueueController()->CreateInfoBarRequest( 225 GetQueueController()->CreateInfoBarRequest(
214 id, requesting_frame, embedder, std::string(), base::Bind( 226 id, requesting_frame, embedder, std::string(), base::Bind(
215 &ChromeMidiPermissionContext::NotifyPermissionSet, 227 &ChromeMidiPermissionContext::NotifyPermissionSet,
216 base::Unretained(this), id, requesting_frame, callback)); 228 base::Unretained(this), id, requesting_frame, callback));
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
249 261
250 PermissionQueueController* ChromeMidiPermissionContext::GetQueueController() { 262 PermissionQueueController* ChromeMidiPermissionContext::GetQueueController() {
251 if (!permission_queue_controller_) { 263 if (!permission_queue_controller_) {
252 permission_queue_controller_.reset( 264 permission_queue_controller_.reset(
253 new PermissionQueueController(profile_, 265 new PermissionQueueController(profile_,
254 CONTENT_SETTINGS_TYPE_MIDI_SYSEX)); 266 CONTENT_SETTINGS_TYPE_MIDI_SYSEX));
255 } 267 }
256 return permission_queue_controller_.get(); 268 return permission_queue_controller_.get();
257 } 269 }
258 270
271 void ChromeMidiPermissionContext::RequestFinished(
272 MidiPermissionRequest* request) {
273 base::ScopedPtrHashMap<std::string, MidiPermissionRequest>::iterator it;
274 for (it = pending_requests_.begin(); it != pending_requests_.end(); it++) {
275 if (it->second == request) {
276 pending_requests_.take_and_erase(it);
277 return;
278 }
279 }
280
281 NOTREACHED() << "Missing request";
282 }
283
259 void ChromeMidiPermissionContext::CancelPendingInfobarRequest( 284 void ChromeMidiPermissionContext::CancelPendingInfobarRequest(
260 const PermissionRequestID& id) { 285 const PermissionRequestID& id) {
261 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); 286 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
262 if (shutting_down_) 287 if (shutting_down_)
263 return; 288 return;
264 // TODO(gbillock): Add support for cancellation to permission bubbles. 289
290 if (PermissionBubbleManager::Enabled()) {
291 MidiPermissionRequest* cancelling = pending_requests_.get(id.ToString());
292 content::WebContents* web_contents = tab_util::GetWebContentsByID(
293 id.render_process_id(), id.render_view_id());
294 if (cancelling != NULL && web_contents != NULL &&
295 PermissionBubbleManager::FromWebContents(web_contents) != NULL) {
296 PermissionBubbleManager::FromWebContents(web_contents)->
297 CancelRequest(cancelling);
298 }
299 return;
300 }
301
265 GetQueueController()->CancelInfoBarRequest(id); 302 GetQueueController()->CancelInfoBarRequest(id);
266 } 303 }
OLDNEW
« no previous file with comments | « chrome/browser/media/chrome_midi_permission_context.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698