| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 } |
| OLD | NEW |