Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1702)

Unified Diff: chrome/browser/media/midi_permission_context.cc

Issue 365123003: Implement midi permissions on top of the new common permission classes (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Minor tweak to the push message infobar Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);
}

Powered by Google App Engine
This is Rietveld 408576698