Chromium Code Reviews| 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 e67be3332813bbe47eaef66d52281d544ea71ca7..73a788c885a73c1d9a320fc8395dcede5b06984c 100644 |
| --- a/chrome/browser/media/chrome_midi_permission_context.cc |
| +++ b/chrome/browser/media/chrome_midi_permission_context.cc |
| @@ -11,8 +11,92 @@ |
| #include "chrome/browser/content_settings/tab_specific_content_settings.h" |
| #include "chrome/browser/profiles/profile.h" |
| #include "chrome/browser/tab_contents/tab_util.h" |
| +#include "chrome/browser/ui/website_settings/permission_bubble_manager.h" |
| +#include "chrome/browser/ui/website_settings/permission_bubble_request.h" |
| +#include "chrome/common/pref_names.h" |
| #include "content/public/browser/browser_thread.h" |
| #include "content/public/browser/web_contents.h" |
| +#include "grit/generated_resources.h" |
| +#include "net/base/net_util.h" |
| +#include "ui/base/l10n/l10n_util.h" |
| + |
| +class MidiPermissionRequest : public PermissionBubbleRequest { |
| + public: |
| + MidiPermissionRequest( |
| + ChromeMidiPermissionContext* context, |
| + const PermissionRequestID& id, |
| + const GURL& requesting_frame, |
| + const std::string& display_languages, |
| + const content::BrowserContext::MidiSysExPermissionCallback& callback); |
| + virtual ~MidiPermissionRequest(); |
| + |
| + // PermissionBubbleDelegate: |
| + virtual base::string16 GetMessageText() const OVERRIDE; |
| + virtual base::string16 GetMessageTextFragment() const OVERRIDE; |
| + virtual base::string16 GetAlternateAcceptButtonText() const OVERRIDE; |
| + virtual base::string16 GetAlternateDenyButtonText() const OVERRIDE; |
| + virtual void PermissionGranted() OVERRIDE; |
| + virtual void PermissionDenied() OVERRIDE; |
| + virtual void Cancelled() OVERRIDE; |
| + virtual void RequestFinished() OVERRIDE; |
| + |
| + private: |
| + ChromeMidiPermissionContext* context_; |
| + const PermissionRequestID id_; |
| + GURL requesting_frame_; |
| + std::string display_languages_; |
| + const content::BrowserContext::MidiSysExPermissionCallback& callback_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(MidiPermissionRequest); |
| +}; |
| + |
| +MidiPermissionRequest::MidiPermissionRequest( |
| + ChromeMidiPermissionContext* context, |
| + const PermissionRequestID& id, |
| + const GURL& requesting_frame, |
| + const std::string& display_languages, |
| + const content::BrowserContext::MidiSysExPermissionCallback& callback) |
| + : context_(context), |
| + id_(id), |
| + requesting_frame_(requesting_frame), |
| + display_languages_(display_languages), |
| + callback_(callback) {} |
| + |
| +MidiPermissionRequest::~MidiPermissionRequest() {} |
| + |
| +base::string16 MidiPermissionRequest::GetMessageText() const { |
| + return l10n_util::GetStringFUTF16( |
| + IDS_MIDI_SYSEX_INFOBAR_QUESTION, |
| + net::FormatUrl(requesting_frame_.GetOrigin(), display_languages_)); |
| +} |
| + |
| +base::string16 MidiPermissionRequest::GetMessageTextFragment() const { |
| + return l10n_util::GetStringUTF16(IDS_MIDI_SYSEX_PERMISSION_FRAGMENT); |
| +} |
| + |
| +base::string16 MidiPermissionRequest::GetAlternateAcceptButtonText() const { |
| + return l10n_util::GetStringUTF16(IDS_MIDI_SYSEX_ALLOW_BUTTON); |
| +} |
| + |
| +base::string16 MidiPermissionRequest::GetAlternateDenyButtonText() const { |
| + return l10n_util::GetStringUTF16(IDS_MIDI_SYSEX_DENY_BUTTON); |
| +} |
| + |
| +void MidiPermissionRequest::PermissionGranted() { |
| + context_->NotifyPermissionSet(id_, requesting_frame_, callback_, true); |
| +} |
| + |
| +void MidiPermissionRequest::PermissionDenied() { |
| + context_->NotifyPermissionSet(id_, requesting_frame_, callback_, false); |
| +} |
| + |
| +void MidiPermissionRequest::Cancelled() { |
| + context_->NotifyPermissionSet(id_, requesting_frame_, callback_, false); |
| +} |
| + |
| +void MidiPermissionRequest::RequestFinished() { |
| + delete this; |
| +} |
| ChromeMidiPermissionContext::ChromeMidiPermissionContext(Profile* profile) |
| : profile_(profile), |
| @@ -65,7 +149,7 @@ void ChromeMidiPermissionContext::RequestMidiSysExPermission( |
| return; |
| } |
| - DecidePermission(id, requesting_frame, embedder, callback); |
| + DecidePermission(web_contents, id, requesting_frame, embedder, callback); |
| } |
| void ChromeMidiPermissionContext::CancelMidiSysExPermissionRequest( |
| @@ -78,6 +162,7 @@ void ChromeMidiPermissionContext::CancelMidiSysExPermissionRequest( |
| } |
| void ChromeMidiPermissionContext::DecidePermission( |
| + content::WebContents* web_contents, |
| const PermissionRequestID& id, |
| const GURL& requesting_frame, |
| const GURL& embedder, |
| @@ -98,6 +183,18 @@ void ChromeMidiPermissionContext::DecidePermission( |
| PermissionDecided(id, requesting_frame, embedder, callback, true); |
| break; |
| default: |
| + if (PermissionBubbleManager::Enabled()) { |
| + PermissionBubbleManager* bubble_manager = |
| + PermissionBubbleManager::FromWebContents(web_contents); |
| + bubble_manager->AddRequest(new MidiPermissionRequest( |
| + this, id, requesting_frame, |
| + profile_->GetPrefs()->GetString(prefs::kAcceptLanguages), |
| + callback)); |
| + return; |
| + } |
| + |
| + // TODO(gbillock): Delete this and the infobar delegate when |
| + // we're using only bubbles. crbug.com/337458 |
| GetQueueController()->CreateInfoBarRequest( |
| id, requesting_frame, embedder, base::Bind( |
| &ChromeMidiPermissionContext::NotifyPermissionSet, |
| @@ -149,5 +246,6 @@ void ChromeMidiPermissionContext::CancelPendingInfobarRequest( |
| DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
| if (shutting_down_) |
| return; |
| + // 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
|
| GetQueueController()->CancelInfoBarRequest(id); |
| } |