Chromium Code Reviews| 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" |
| 11 #include "chrome/browser/content_settings/tab_specific_content_settings.h" | 11 #include "chrome/browser/content_settings/tab_specific_content_settings.h" |
| 12 #include "chrome/browser/profiles/profile.h" | 12 #include "chrome/browser/profiles/profile.h" |
| 13 #include "chrome/browser/tab_contents/tab_util.h" | 13 #include "chrome/browser/tab_contents/tab_util.h" |
| 14 #include "chrome/browser/ui/website_settings/permission_bubble_manager.h" | |
| 15 #include "chrome/browser/ui/website_settings/permission_bubble_request.h" | |
| 16 #include "chrome/common/pref_names.h" | |
| 14 #include "content/public/browser/browser_thread.h" | 17 #include "content/public/browser/browser_thread.h" |
| 15 #include "content/public/browser/web_contents.h" | 18 #include "content/public/browser/web_contents.h" |
| 19 #include "grit/generated_resources.h" | |
| 20 #include "net/base/net_util.h" | |
| 21 #include "ui/base/l10n/l10n_util.h" | |
| 22 | |
| 23 class MidiPermissionRequest : public PermissionBubbleRequest { | |
| 24 public: | |
| 25 MidiPermissionRequest( | |
| 26 ChromeMidiPermissionContext* context, | |
| 27 const PermissionRequestID& id, | |
| 28 const GURL& requesting_frame, | |
| 29 const std::string& display_languages, | |
| 30 const content::BrowserContext::MidiSysExPermissionCallback& callback); | |
| 31 virtual ~MidiPermissionRequest(); | |
| 32 | |
| 33 // PermissionBubbleDelegate: | |
| 34 virtual base::string16 GetMessageText() const OVERRIDE; | |
| 35 virtual base::string16 GetMessageTextFragment() const OVERRIDE; | |
| 36 virtual base::string16 GetAlternateAcceptButtonText() const OVERRIDE; | |
| 37 virtual base::string16 GetAlternateDenyButtonText() const OVERRIDE; | |
| 38 virtual void PermissionGranted() OVERRIDE; | |
| 39 virtual void PermissionDenied() OVERRIDE; | |
| 40 virtual void Cancelled() OVERRIDE; | |
| 41 virtual void RequestFinished() OVERRIDE; | |
| 42 | |
| 43 private: | |
| 44 ChromeMidiPermissionContext* context_; | |
| 45 const PermissionRequestID id_; | |
| 46 GURL requesting_frame_; | |
| 47 std::string display_languages_; | |
| 48 const content::BrowserContext::MidiSysExPermissionCallback& callback_; | |
| 49 | |
| 50 DISALLOW_COPY_AND_ASSIGN(MidiPermissionRequest); | |
| 51 }; | |
| 52 | |
| 53 MidiPermissionRequest::MidiPermissionRequest( | |
| 54 ChromeMidiPermissionContext* context, | |
| 55 const PermissionRequestID& id, | |
| 56 const GURL& requesting_frame, | |
| 57 const std::string& display_languages, | |
| 58 const content::BrowserContext::MidiSysExPermissionCallback& callback) | |
| 59 : context_(context), | |
| 60 id_(id), | |
| 61 requesting_frame_(requesting_frame), | |
| 62 display_languages_(display_languages), | |
| 63 callback_(callback) {} | |
| 64 | |
| 65 MidiPermissionRequest::~MidiPermissionRequest() {} | |
| 66 | |
| 67 base::string16 MidiPermissionRequest::GetMessageText() const { | |
| 68 return l10n_util::GetStringFUTF16( | |
| 69 IDS_MIDI_SYSEX_INFOBAR_QUESTION, | |
| 70 net::FormatUrl(requesting_frame_.GetOrigin(), display_languages_)); | |
| 71 } | |
| 72 | |
| 73 base::string16 MidiPermissionRequest::GetMessageTextFragment() const { | |
| 74 return l10n_util::GetStringUTF16(IDS_MIDI_SYSEX_PERMISSION_FRAGMENT); | |
| 75 } | |
| 76 | |
| 77 base::string16 MidiPermissionRequest::GetAlternateAcceptButtonText() const { | |
| 78 return l10n_util::GetStringUTF16(IDS_MIDI_SYSEX_ALLOW_BUTTON); | |
| 79 } | |
| 80 | |
| 81 base::string16 MidiPermissionRequest::GetAlternateDenyButtonText() const { | |
| 82 return l10n_util::GetStringUTF16(IDS_MIDI_SYSEX_DENY_BUTTON); | |
| 83 } | |
| 84 | |
| 85 void MidiPermissionRequest::PermissionGranted() { | |
| 86 context_->NotifyPermissionSet(id_, requesting_frame_, callback_, true); | |
| 87 } | |
| 88 | |
| 89 void MidiPermissionRequest::PermissionDenied() { | |
| 90 context_->NotifyPermissionSet(id_, requesting_frame_, callback_, false); | |
| 91 } | |
| 92 | |
| 93 void MidiPermissionRequest::Cancelled() { | |
| 94 context_->NotifyPermissionSet(id_, requesting_frame_, callback_, false); | |
| 95 } | |
| 96 | |
| 97 void MidiPermissionRequest::RequestFinished() { | |
| 98 delete this; | |
| 99 } | |
| 16 | 100 |
| 17 ChromeMidiPermissionContext::ChromeMidiPermissionContext(Profile* profile) | 101 ChromeMidiPermissionContext::ChromeMidiPermissionContext(Profile* profile) |
| 18 : profile_(profile), | 102 : profile_(profile), |
| 19 shutting_down_(false) { | 103 shutting_down_(false) { |
| 20 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 104 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
| 21 } | 105 } |
| 22 | 106 |
| 23 ChromeMidiPermissionContext::~ChromeMidiPermissionContext() { | 107 ChromeMidiPermissionContext::~ChromeMidiPermissionContext() { |
| 24 DCHECK(!permission_queue_controller_); | 108 DCHECK(!permission_queue_controller_); |
| 25 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 109 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 58 // Any user's action will not be stored to content settings data base. | 142 // Any user's action will not be stored to content settings data base. |
| 59 if ((!requesting_frame.is_valid() && !requesting_frame.is_empty()) || | 143 if ((!requesting_frame.is_valid() && !requesting_frame.is_empty()) || |
| 60 !embedder.is_valid()) { | 144 !embedder.is_valid()) { |
| 61 LOG(WARNING) << "Attempt to use MIDI sysex from an invalid URL: " | 145 LOG(WARNING) << "Attempt to use MIDI sysex from an invalid URL: " |
| 62 << requesting_frame << "," << embedder | 146 << requesting_frame << "," << embedder |
| 63 << " (Web MIDI is not supported in popups)"; | 147 << " (Web MIDI is not supported in popups)"; |
| 64 PermissionDecided(id, requesting_frame, embedder, callback, false); | 148 PermissionDecided(id, requesting_frame, embedder, callback, false); |
| 65 return; | 149 return; |
| 66 } | 150 } |
| 67 | 151 |
| 68 DecidePermission(id, requesting_frame, embedder, callback); | 152 DecidePermission(web_contents, id, requesting_frame, embedder, callback); |
| 69 } | 153 } |
| 70 | 154 |
| 71 void ChromeMidiPermissionContext::CancelMidiSysExPermissionRequest( | 155 void ChromeMidiPermissionContext::CancelMidiSysExPermissionRequest( |
| 72 int render_process_id, | 156 int render_process_id, |
| 73 int render_view_id, | 157 int render_view_id, |
| 74 int bridge_id, | 158 int bridge_id, |
| 75 const GURL& requesting_frame) { | 159 const GURL& requesting_frame) { |
| 76 CancelPendingInfobarRequest( | 160 CancelPendingInfobarRequest( |
| 77 PermissionRequestID(render_process_id, render_view_id, bridge_id, 0)); | 161 PermissionRequestID(render_process_id, render_view_id, bridge_id, 0)); |
| 78 } | 162 } |
| 79 | 163 |
| 80 void ChromeMidiPermissionContext::DecidePermission( | 164 void ChromeMidiPermissionContext::DecidePermission( |
| 165 content::WebContents* web_contents, | |
| 81 const PermissionRequestID& id, | 166 const PermissionRequestID& id, |
| 82 const GURL& requesting_frame, | 167 const GURL& requesting_frame, |
| 83 const GURL& embedder, | 168 const GURL& embedder, |
| 84 const content::BrowserContext::MidiSysExPermissionCallback& callback) { | 169 const content::BrowserContext::MidiSysExPermissionCallback& callback) { |
| 85 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 170 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
| 86 | 171 |
| 87 ContentSetting content_setting = | 172 ContentSetting content_setting = |
| 88 profile_->GetHostContentSettingsMap()->GetContentSetting( | 173 profile_->GetHostContentSettingsMap()->GetContentSetting( |
| 89 requesting_frame, | 174 requesting_frame, |
| 90 embedder, | 175 embedder, |
| 91 CONTENT_SETTINGS_TYPE_MIDI_SYSEX, | 176 CONTENT_SETTINGS_TYPE_MIDI_SYSEX, |
| 92 std::string()); | 177 std::string()); |
| 93 switch (content_setting) { | 178 switch (content_setting) { |
| 94 case CONTENT_SETTING_BLOCK: | 179 case CONTENT_SETTING_BLOCK: |
| 95 PermissionDecided(id, requesting_frame, embedder, callback, false); | 180 PermissionDecided(id, requesting_frame, embedder, callback, false); |
| 96 break; | 181 break; |
| 97 case CONTENT_SETTING_ALLOW: | 182 case CONTENT_SETTING_ALLOW: |
| 98 PermissionDecided(id, requesting_frame, embedder, callback, true); | 183 PermissionDecided(id, requesting_frame, embedder, callback, true); |
| 99 break; | 184 break; |
| 100 default: | 185 default: |
| 186 if (PermissionBubbleManager::Enabled()) { | |
| 187 PermissionBubbleManager* bubble_manager = | |
| 188 PermissionBubbleManager::FromWebContents(web_contents); | |
| 189 bubble_manager->AddRequest(new MidiPermissionRequest( | |
| 190 this, id, requesting_frame, | |
| 191 profile_->GetPrefs()->GetString(prefs::kAcceptLanguages), | |
| 192 callback)); | |
| 193 return; | |
| 194 } | |
| 195 | |
| 196 // TODO(gbillock): Delete this and the infobar delegate when | |
| 197 // we're using only bubbles. crbug.com/337458 | |
| 101 GetQueueController()->CreateInfoBarRequest( | 198 GetQueueController()->CreateInfoBarRequest( |
| 102 id, requesting_frame, embedder, base::Bind( | 199 id, requesting_frame, embedder, base::Bind( |
| 103 &ChromeMidiPermissionContext::NotifyPermissionSet, | 200 &ChromeMidiPermissionContext::NotifyPermissionSet, |
| 104 base::Unretained(this), id, requesting_frame, callback)); | 201 base::Unretained(this), id, requesting_frame, callback)); |
| 105 } | 202 } |
| 106 } | 203 } |
| 107 | 204 |
| 108 void ChromeMidiPermissionContext::PermissionDecided( | 205 void ChromeMidiPermissionContext::PermissionDecided( |
| 109 const PermissionRequestID& id, | 206 const PermissionRequestID& id, |
| 110 const GURL& requesting_frame, | 207 const GURL& requesting_frame, |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 142 CONTENT_SETTINGS_TYPE_MIDI_SYSEX)); | 239 CONTENT_SETTINGS_TYPE_MIDI_SYSEX)); |
| 143 } | 240 } |
| 144 return permission_queue_controller_.get(); | 241 return permission_queue_controller_.get(); |
| 145 } | 242 } |
| 146 | 243 |
| 147 void ChromeMidiPermissionContext::CancelPendingInfobarRequest( | 244 void ChromeMidiPermissionContext::CancelPendingInfobarRequest( |
| 148 const PermissionRequestID& id) { | 245 const PermissionRequestID& id) { |
| 149 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 246 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
| 150 if (shutting_down_) | 247 if (shutting_down_) |
| 151 return; | 248 return; |
| 249 // TODO(gbillock): Add support for cancellation to permission bubbles. | |
|
Ami GONE FROM CHROMIUM
2014/02/07 18:25:35
Last clause makes me think there should be a comme
Greg Billock
2014/02/10 23:57:10
There's a fair amount of work left before flag fli
| |
| 152 GetQueueController()->CancelInfoBarRequest(id); | 250 GetQueueController()->CancelInfoBarRequest(id); |
| 153 } | 251 } |
| OLD | NEW |