Index: chrome/browser/media/midi_permission_context.cc |
diff --git a/chrome/browser/media/midi_permission_context.cc b/chrome/browser/media/midi_permission_context.cc |
index 300bfee448acaf3d8404425f02c50311029a78d7..f420133a61ff007028df72cc69e01cd0d2d36c95 100644 |
--- a/chrome/browser/media/midi_permission_context.cc |
+++ b/chrome/browser/media/midi_permission_context.cc |
@@ -4,309 +4,28 @@ |
#include "chrome/browser/media/midi_permission_context.h" |
-#include "base/prefs/pref_service.h" |
-#include "chrome/browser/content_settings/host_content_settings_map.h" |
-#include "chrome/browser/content_settings/permission_queue_controller.h" |
#include "chrome/browser/content_settings/permission_request_id.h" |
#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/render_process_host.h" |
-#include "content/public/browser/render_view_host.h" |
-#include "content/public/browser/web_contents.h" |
-#include "grit/generated_resources.h" |
-#include "grit/theme_resources.h" |
-#include "net/base/net_util.h" |
-#include "ui/base/l10n/l10n_util.h" |
- |
-class MidiPermissionRequest : public PermissionBubbleRequest { |
- public: |
- MidiPermissionRequest( |
- MidiPermissionContext* context, |
- const PermissionRequestID& id, |
- const GURL& requesting_frame, |
- bool user_gesture, |
- const std::string& display_languages, |
- const base::Callback<void(bool)>& callback); |
- virtual ~MidiPermissionRequest(); |
- |
- // PermissionBubbleDelegate: |
- virtual int GetIconID() const OVERRIDE; |
- virtual base::string16 GetMessageText() const OVERRIDE; |
- virtual base::string16 GetMessageTextFragment() const OVERRIDE; |
- virtual bool HasUserGesture() const OVERRIDE; |
- virtual GURL GetRequestingHostname() const OVERRIDE; |
- virtual void PermissionGranted() OVERRIDE; |
- virtual void PermissionDenied() OVERRIDE; |
- virtual void Cancelled() OVERRIDE; |
- virtual void RequestFinished() OVERRIDE; |
- |
- private: |
- MidiPermissionContext* context_; |
- const PermissionRequestID id_; |
- GURL requesting_frame_; |
- bool user_gesture_; |
- std::string display_languages_; |
- const base::Callback<void(bool)>& callback_; |
- bool is_finished_; |
- |
- DISALLOW_COPY_AND_ASSIGN(MidiPermissionRequest); |
-}; |
- |
-MidiPermissionRequest::MidiPermissionRequest( |
- MidiPermissionContext* context, |
- const PermissionRequestID& id, |
- const GURL& requesting_frame, |
- bool user_gesture, |
- const std::string& display_languages, |
- const base::Callback<void(bool)>& callback) |
- : context_(context), |
- id_(id), |
- requesting_frame_(requesting_frame), |
- user_gesture_(user_gesture), |
- display_languages_(display_languages), |
- callback_(callback), |
- is_finished_(false) {} |
- |
-MidiPermissionRequest::~MidiPermissionRequest() { |
- DCHECK(is_finished_); |
-} |
- |
-int MidiPermissionRequest::GetIconID() const { |
- return IDR_ALLOWED_MIDI_SYSEX; |
-} |
- |
-base::string16 MidiPermissionRequest::GetMessageText() const { |
- return l10n_util::GetStringFUTF16( |
- IDS_MIDI_SYSEX_INFOBAR_QUESTION, |
- net::FormatUrl(requesting_frame_.GetOrigin(), display_languages_, |
- net::kFormatUrlOmitUsernamePassword | |
- net::kFormatUrlOmitTrailingSlashOnBareHostname, |
- net::UnescapeRule::SPACES, NULL, NULL, NULL)); |
-} |
- |
-base::string16 MidiPermissionRequest::GetMessageTextFragment() const { |
- return l10n_util::GetStringUTF16(IDS_MIDI_SYSEX_PERMISSION_FRAGMENT); |
-} |
- |
-bool MidiPermissionRequest::HasUserGesture() const { |
- return user_gesture_; |
-} |
- |
-GURL MidiPermissionRequest::GetRequestingHostname() const { |
- return requesting_frame_; |
-} |
- |
-void MidiPermissionRequest::PermissionGranted() { |
- context_->NotifyPermissionSet(id_, requesting_frame_, callback_, true); |
-} |
- |
-void MidiPermissionRequest::PermissionDenied() { |
- context_->NotifyPermissionSet(id_, requesting_frame_, callback_, false); |
-} |
- |
-void MidiPermissionRequest::Cancelled() { |
-} |
- |
-void MidiPermissionRequest::RequestFinished() { |
- is_finished_ = true; |
- // Deletes 'this'. |
- context_->RequestFinished(this); |
-} |
+#include "url/gurl.h" |
MidiPermissionContext::MidiPermissionContext(Profile* profile) |
- : profile_(profile), |
- shutting_down_(false), |
- weak_factory_(this) { |
- DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
+ : PermissionContextBase(profile, CONTENT_SETTINGS_TYPE_MIDI_SYSEX){ |
tommi (sloooow) - chröme
2014/07/08 12:38:54
nit: 4 spaces
Miguel Garcia
2014/07/08 13:54:30
Done.
|
} |
MidiPermissionContext::~MidiPermissionContext() { |
- DCHECK(!permission_queue_controller_); |
- DCHECK(pending_requests_.empty()); |
- DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
-} |
- |
-void MidiPermissionContext::Shutdown() { |
- DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
- permission_queue_controller_.reset(); |
- shutting_down_ = true; |
-} |
- |
-void MidiPermissionContext::RequestMidiSysExPermission( |
- content::WebContents* web_contents, |
- int bridge_id, |
- const GURL& requesting_frame, |
- bool user_gesture, |
- const base::Callback<void(bool)>& result_callback, |
- base::Closure* cancel_callback) { |
- DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
- DCHECK(!shutting_down_); |
- |
- // TODO(toyoshim): Support Extension's manifest declared permission. |
- // See http://crbug.com/266338. |
- |
- int render_process_id = web_contents->GetRenderProcessHost()->GetID(); |
- int render_view_id = web_contents->GetRenderViewHost()->GetRoutingID(); |
- if (cancel_callback) { |
- *cancel_callback = base::Bind( |
- &MidiPermissionContext::CancelMidiSysExPermissionRequest, |
- weak_factory_.GetWeakPtr(), render_process_id, render_view_id, |
- bridge_id); |
- } |
- |
- const PermissionRequestID id( |
- render_process_id, render_view_id, bridge_id, GURL()); |
- |
- GURL embedder = web_contents->GetURL(); |
- // |requesting_frame| can be empty and invalid when the frame is a local |
- // file. Here local files should be granted to show an infobar. |
- // Any user's action will not be stored to content settings data base. |
- if ((!requesting_frame.is_valid() && !requesting_frame.is_empty()) || |
- !embedder.is_valid()) { |
- LOG(WARNING) << "Attempt to use MIDI sysex from an invalid URL: " |
- << requesting_frame << "," << embedder |
- << " (Web MIDI is not supported in popups)"; |
- PermissionDecided(id, requesting_frame, embedder, result_callback, false); |
- return; |
- } |
- |
- DecidePermission(web_contents, id, requesting_frame, embedder, user_gesture, |
- result_callback); |
} |
-void MidiPermissionContext::CancelMidiSysExPermissionRequest( |
- int render_process_id, |
- int render_view_id, |
- int bridge_id) { |
- CancelPendingInfobarRequest( |
- PermissionRequestID( |
- render_process_id, render_view_id, bridge_id, GURL())); |
-} |
- |
-void MidiPermissionContext::DecidePermission( |
- content::WebContents* web_contents, |
- const PermissionRequestID& id, |
- const GURL& requesting_frame, |
- const GURL& embedder, |
- bool user_gesture, |
- const base::Callback<void(bool)>& callback) { |
- DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
- |
- ContentSetting content_setting = |
- profile_->GetHostContentSettingsMap()->GetContentSetting( |
- requesting_frame, |
- embedder, |
- CONTENT_SETTINGS_TYPE_MIDI_SYSEX, |
- std::string()); |
- switch (content_setting) { |
- case CONTENT_SETTING_BLOCK: |
- PermissionDecided(id, requesting_frame, embedder, callback, false); |
- break; |
- case CONTENT_SETTING_ALLOW: |
- PermissionDecided(id, requesting_frame, embedder, callback, true); |
- break; |
- default: |
- if (PermissionBubbleManager::Enabled()) { |
- PermissionBubbleManager* bubble_manager = |
- PermissionBubbleManager::FromWebContents(web_contents); |
- if (bubble_manager) { |
- scoped_ptr<MidiPermissionRequest> request_ptr( |
- new MidiPermissionRequest( |
- this, id, requesting_frame, user_gesture, |
- profile_->GetPrefs()->GetString(prefs::kAcceptLanguages), |
- callback)); |
- MidiPermissionRequest* request = request_ptr.get(); |
- bool inserted = pending_requests_.add( |
- id.ToString(), request_ptr.Pass()).second; |
- DCHECK(inserted) << "Duplicate id " << id.ToString(); |
- bubble_manager->AddRequest(request); |
- } |
- return; |
- } |
- |
- // TODO(gbillock): Delete this and the infobar delegate when |
- // we're using only bubbles. crbug.com/337458 |
- GetQueueController()->CreateInfoBarRequest( |
- id, requesting_frame, embedder, std::string(), base::Bind( |
- &MidiPermissionContext::NotifyPermissionSet, |
- base::Unretained(this), id, requesting_frame, callback)); |
- } |
-} |
- |
-void MidiPermissionContext::PermissionDecided( |
- const PermissionRequestID& id, |
- const GURL& requesting_frame, |
- const GURL& embedder, |
- const base::Callback<void(bool)>& callback, |
- bool allowed) { |
- DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
- NotifyPermissionSet(id, requesting_frame, callback, allowed); |
-} |
- |
-void MidiPermissionContext::NotifyPermissionSet( |
- const PermissionRequestID& id, |
- const GURL& requesting_frame, |
- const base::Callback<void(bool)>& callback, |
- bool allowed) { |
- DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
+void MidiPermissionContext::UpdateTabContext(const PermissionRequestID& id, |
+ const GURL& requesting_frame, |
tommi (sloooow) - chröme
2014/07/08 12:38:54
fix indent
Miguel Garcia
2014/07/08 13:54:30
Done.
|
+ bool allowed) { |
TabSpecificContentSettings* content_settings = |
TabSpecificContentSettings::Get(id.render_process_id(), |
- id.render_view_id()); |
+ id.render_view_id()); |
tommi (sloooow) - chröme
2014/07/08 12:38:54
indent off
Miguel Garcia
2014/07/08 13:54:30
Done.
|
if (content_settings) { |
if (allowed) |
- content_settings->OnMidiSysExAccessed(requesting_frame); |
+ content_settings->OnMidiSysExAccessed(requesting_frame); |
tommi (sloooow) - chröme
2014/07/08 12:38:54
indent
Miguel Garcia
2014/07/08 13:54:30
Done.
|
else |
content_settings->OnMidiSysExAccessBlocked(requesting_frame); |
} |
- |
- callback.Run(allowed); |
-} |
- |
-PermissionQueueController* MidiPermissionContext::GetQueueController() { |
- if (!permission_queue_controller_) { |
- permission_queue_controller_.reset( |
- new PermissionQueueController(profile_, |
- CONTENT_SETTINGS_TYPE_MIDI_SYSEX)); |
- } |
- return permission_queue_controller_.get(); |
-} |
- |
-void MidiPermissionContext::RequestFinished( |
- MidiPermissionRequest* request) { |
- base::ScopedPtrHashMap<std::string, MidiPermissionRequest>::iterator it; |
- for (it = pending_requests_.begin(); it != pending_requests_.end(); it++) { |
- if (it->second == request) { |
- pending_requests_.take_and_erase(it); |
- return; |
- } |
- } |
- |
- NOTREACHED() << "Missing request"; |
-} |
- |
-void MidiPermissionContext::CancelPendingInfobarRequest( |
- const PermissionRequestID& id) { |
- DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
- if (shutting_down_) |
- return; |
- |
- if (PermissionBubbleManager::Enabled()) { |
- MidiPermissionRequest* cancelling = pending_requests_.get(id.ToString()); |
- content::WebContents* web_contents = tab_util::GetWebContentsByID( |
- id.render_process_id(), id.render_view_id()); |
- if (cancelling != NULL && web_contents != NULL && |
- PermissionBubbleManager::FromWebContents(web_contents) != NULL) { |
- PermissionBubbleManager::FromWebContents(web_contents)-> |
- CancelRequest(cancelling); |
- } |
- return; |
- } |
- |
- GetQueueController()->CancelInfoBarRequest(id); |
} |