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. |
GetQueueController()->CancelInfoBarRequest(id); |
} |