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

Side by Side Diff: chrome/browser/media/chrome_midi_permission_context.cc

Issue 156173002: [MIDI] Add a permission bubble client for MIDI system control. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 6 years, 10 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/media/chrome_midi_permission_context.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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.
152 GetQueueController()->CancelInfoBarRequest(id); 250 GetQueueController()->CancelInfoBarRequest(id);
153 } 251 }
OLDNEW
« no previous file with comments | « chrome/browser/media/chrome_midi_permission_context.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698