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

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

Issue 185863003: [Media] Add user gesture reporting for API calls to midi and media streams. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix test merge Created 6 years, 8 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
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" 14 #include "chrome/browser/ui/website_settings/permission_bubble_manager.h"
15 #include "chrome/browser/ui/website_settings/permission_bubble_request.h" 15 #include "chrome/browser/ui/website_settings/permission_bubble_request.h"
16 #include "chrome/common/pref_names.h" 16 #include "chrome/common/pref_names.h"
17 #include "content/public/browser/browser_thread.h" 17 #include "content/public/browser/browser_thread.h"
18 #include "content/public/browser/web_contents.h" 18 #include "content/public/browser/web_contents.h"
19 #include "grit/generated_resources.h" 19 #include "grit/generated_resources.h"
20 #include "grit/theme_resources.h" 20 #include "grit/theme_resources.h"
21 #include "net/base/net_util.h" 21 #include "net/base/net_util.h"
22 #include "ui/base/l10n/l10n_util.h" 22 #include "ui/base/l10n/l10n_util.h"
23 23
24 class MidiPermissionRequest : public PermissionBubbleRequest { 24 class MidiPermissionRequest : public PermissionBubbleRequest {
25 public: 25 public:
26 MidiPermissionRequest( 26 MidiPermissionRequest(
27 ChromeMidiPermissionContext* context, 27 ChromeMidiPermissionContext* context,
28 const PermissionRequestID& id, 28 const PermissionRequestID& id,
29 const GURL& requesting_frame, 29 const GURL& requesting_frame,
30 bool user_gesture,
30 const std::string& display_languages, 31 const std::string& display_languages,
31 const content::BrowserContext::MidiSysExPermissionCallback& callback); 32 const content::BrowserContext::MidiSysExPermissionCallback& callback);
32 virtual ~MidiPermissionRequest(); 33 virtual ~MidiPermissionRequest();
33 34
34 // PermissionBubbleDelegate: 35 // PermissionBubbleDelegate:
35 virtual int GetIconID() const OVERRIDE; 36 virtual int GetIconID() const OVERRIDE;
36 virtual base::string16 GetMessageText() const OVERRIDE; 37 virtual base::string16 GetMessageText() const OVERRIDE;
37 virtual base::string16 GetMessageTextFragment() const OVERRIDE; 38 virtual base::string16 GetMessageTextFragment() const OVERRIDE;
38 virtual bool HasUserGesture() const OVERRIDE; 39 virtual bool HasUserGesture() const OVERRIDE;
39 virtual GURL GetRequestingHostname() const OVERRIDE; 40 virtual GURL GetRequestingHostname() const OVERRIDE;
40 virtual void PermissionGranted() OVERRIDE; 41 virtual void PermissionGranted() OVERRIDE;
41 virtual void PermissionDenied() OVERRIDE; 42 virtual void PermissionDenied() OVERRIDE;
42 virtual void Cancelled() OVERRIDE; 43 virtual void Cancelled() OVERRIDE;
43 virtual void RequestFinished() OVERRIDE; 44 virtual void RequestFinished() OVERRIDE;
44 45
45 private: 46 private:
46 ChromeMidiPermissionContext* context_; 47 ChromeMidiPermissionContext* context_;
47 const PermissionRequestID id_; 48 const PermissionRequestID id_;
48 GURL requesting_frame_; 49 GURL requesting_frame_;
50 bool user_gesture_;
49 std::string display_languages_; 51 std::string display_languages_;
50 const content::BrowserContext::MidiSysExPermissionCallback& callback_; 52 const content::BrowserContext::MidiSysExPermissionCallback& callback_;
51 53
52 DISALLOW_COPY_AND_ASSIGN(MidiPermissionRequest); 54 DISALLOW_COPY_AND_ASSIGN(MidiPermissionRequest);
53 }; 55 };
54 56
55 MidiPermissionRequest::MidiPermissionRequest( 57 MidiPermissionRequest::MidiPermissionRequest(
56 ChromeMidiPermissionContext* context, 58 ChromeMidiPermissionContext* context,
57 const PermissionRequestID& id, 59 const PermissionRequestID& id,
58 const GURL& requesting_frame, 60 const GURL& requesting_frame,
61 bool user_gesture,
59 const std::string& display_languages, 62 const std::string& display_languages,
60 const content::BrowserContext::MidiSysExPermissionCallback& callback) 63 const content::BrowserContext::MidiSysExPermissionCallback& callback)
61 : context_(context), 64 : context_(context),
62 id_(id), 65 id_(id),
63 requesting_frame_(requesting_frame), 66 requesting_frame_(requesting_frame),
67 user_gesture_(user_gesture),
64 display_languages_(display_languages), 68 display_languages_(display_languages),
65 callback_(callback) {} 69 callback_(callback) {}
66 70
67 MidiPermissionRequest::~MidiPermissionRequest() {} 71 MidiPermissionRequest::~MidiPermissionRequest() {}
68 72
69 int MidiPermissionRequest::GetIconID() const { 73 int MidiPermissionRequest::GetIconID() const {
70 return IDR_ALLOWED_MIDI_SYSEX; 74 return IDR_ALLOWED_MIDI_SYSEX;
71 } 75 }
72 76
73 base::string16 MidiPermissionRequest::GetMessageText() const { 77 base::string16 MidiPermissionRequest::GetMessageText() const {
74 return l10n_util::GetStringFUTF16( 78 return l10n_util::GetStringFUTF16(
75 IDS_MIDI_SYSEX_INFOBAR_QUESTION, 79 IDS_MIDI_SYSEX_INFOBAR_QUESTION,
76 net::FormatUrl(requesting_frame_.GetOrigin(), display_languages_)); 80 net::FormatUrl(requesting_frame_.GetOrigin(), display_languages_));
77 } 81 }
78 82
79 base::string16 MidiPermissionRequest::GetMessageTextFragment() const { 83 base::string16 MidiPermissionRequest::GetMessageTextFragment() const {
80 return l10n_util::GetStringUTF16(IDS_MIDI_SYSEX_PERMISSION_FRAGMENT); 84 return l10n_util::GetStringUTF16(IDS_MIDI_SYSEX_PERMISSION_FRAGMENT);
81 } 85 }
82 86
83 bool MidiPermissionRequest::HasUserGesture() const { 87 bool MidiPermissionRequest::HasUserGesture() const {
84 // TODO(gbillock): plumb through. 88 return user_gesture_;
85 return false;
86 } 89 }
87 90
88 GURL MidiPermissionRequest::GetRequestingHostname() const { 91 GURL MidiPermissionRequest::GetRequestingHostname() const {
89 return requesting_frame_; 92 return requesting_frame_;
90 } 93 }
91 94
92 void MidiPermissionRequest::PermissionGranted() { 95 void MidiPermissionRequest::PermissionGranted() {
93 context_->NotifyPermissionSet(id_, requesting_frame_, callback_, true); 96 context_->NotifyPermissionSet(id_, requesting_frame_, callback_, true);
94 } 97 }
95 98
(...skipping 24 matching lines...) Expand all
120 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); 123 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
121 permission_queue_controller_.reset(); 124 permission_queue_controller_.reset();
122 shutting_down_ = true; 125 shutting_down_ = true;
123 } 126 }
124 127
125 void ChromeMidiPermissionContext::RequestMidiSysExPermission( 128 void ChromeMidiPermissionContext::RequestMidiSysExPermission(
126 int render_process_id, 129 int render_process_id,
127 int render_view_id, 130 int render_view_id,
128 int bridge_id, 131 int bridge_id,
129 const GURL& requesting_frame, 132 const GURL& requesting_frame,
133 bool user_gesture,
130 const content::BrowserContext::MidiSysExPermissionCallback& callback) { 134 const content::BrowserContext::MidiSysExPermissionCallback& callback) {
131 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); 135 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
132 DCHECK(!shutting_down_); 136 DCHECK(!shutting_down_);
133 137
134 // TODO(toyoshim): Support Extension's manifest declared permission. 138 // TODO(toyoshim): Support Extension's manifest declared permission.
135 // See http://crbug.com/266338. 139 // See http://crbug.com/266338.
136 140
137 content::WebContents* web_contents = 141 content::WebContents* web_contents =
138 tab_util::GetWebContentsByID(render_process_id, render_view_id); 142 tab_util::GetWebContentsByID(render_process_id, render_view_id);
139 143
140 // The page doesn't exist any more. 144 // The page doesn't exist any more.
141 if (!web_contents) 145 if (!web_contents)
142 return; 146 return;
143 147
144 const PermissionRequestID id(render_process_id, render_view_id, bridge_id, 0); 148 const PermissionRequestID id(render_process_id, render_view_id, bridge_id, 0);
145 149
146 GURL embedder = web_contents->GetURL(); 150 GURL embedder = web_contents->GetURL();
147 // |requesting_frame| can be empty and invalid when the frame is a local 151 // |requesting_frame| can be empty and invalid when the frame is a local
148 // file. Here local files should be granted to show an infobar. 152 // file. Here local files should be granted to show an infobar.
149 // Any user's action will not be stored to content settings data base. 153 // Any user's action will not be stored to content settings data base.
150 if ((!requesting_frame.is_valid() && !requesting_frame.is_empty()) || 154 if ((!requesting_frame.is_valid() && !requesting_frame.is_empty()) ||
151 !embedder.is_valid()) { 155 !embedder.is_valid()) {
152 LOG(WARNING) << "Attempt to use MIDI sysex from an invalid URL: " 156 LOG(WARNING) << "Attempt to use MIDI sysex from an invalid URL: "
153 << requesting_frame << "," << embedder 157 << requesting_frame << "," << embedder
154 << " (Web MIDI is not supported in popups)"; 158 << " (Web MIDI is not supported in popups)";
155 PermissionDecided(id, requesting_frame, embedder, callback, false); 159 PermissionDecided(id, requesting_frame, embedder, callback, false);
156 return; 160 return;
157 } 161 }
158 162
159 DecidePermission(web_contents, id, requesting_frame, embedder, callback); 163 DecidePermission(web_contents, id, requesting_frame, embedder, user_gesture,
164 callback);
160 } 165 }
161 166
162 void ChromeMidiPermissionContext::CancelMidiSysExPermissionRequest( 167 void ChromeMidiPermissionContext::CancelMidiSysExPermissionRequest(
163 int render_process_id, 168 int render_process_id,
164 int render_view_id, 169 int render_view_id,
165 int bridge_id, 170 int bridge_id,
166 const GURL& requesting_frame) { 171 const GURL& requesting_frame) {
167 CancelPendingInfobarRequest( 172 CancelPendingInfobarRequest(
168 PermissionRequestID(render_process_id, render_view_id, bridge_id, 0)); 173 PermissionRequestID(render_process_id, render_view_id, bridge_id, 0));
169 } 174 }
170 175
171 void ChromeMidiPermissionContext::DecidePermission( 176 void ChromeMidiPermissionContext::DecidePermission(
172 content::WebContents* web_contents, 177 content::WebContents* web_contents,
173 const PermissionRequestID& id, 178 const PermissionRequestID& id,
174 const GURL& requesting_frame, 179 const GURL& requesting_frame,
175 const GURL& embedder, 180 const GURL& embedder,
181 bool user_gesture,
176 const content::BrowserContext::MidiSysExPermissionCallback& callback) { 182 const content::BrowserContext::MidiSysExPermissionCallback& callback) {
177 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); 183 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
178 184
179 ContentSetting content_setting = 185 ContentSetting content_setting =
180 profile_->GetHostContentSettingsMap()->GetContentSetting( 186 profile_->GetHostContentSettingsMap()->GetContentSetting(
181 requesting_frame, 187 requesting_frame,
182 embedder, 188 embedder,
183 CONTENT_SETTINGS_TYPE_MIDI_SYSEX, 189 CONTENT_SETTINGS_TYPE_MIDI_SYSEX,
184 std::string()); 190 std::string());
185 switch (content_setting) { 191 switch (content_setting) {
186 case CONTENT_SETTING_BLOCK: 192 case CONTENT_SETTING_BLOCK:
187 PermissionDecided(id, requesting_frame, embedder, callback, false); 193 PermissionDecided(id, requesting_frame, embedder, callback, false);
188 break; 194 break;
189 case CONTENT_SETTING_ALLOW: 195 case CONTENT_SETTING_ALLOW:
190 PermissionDecided(id, requesting_frame, embedder, callback, true); 196 PermissionDecided(id, requesting_frame, embedder, callback, true);
191 break; 197 break;
192 default: 198 default:
193 if (PermissionBubbleManager::Enabled()) { 199 if (PermissionBubbleManager::Enabled()) {
194 PermissionBubbleManager* bubble_manager = 200 PermissionBubbleManager* bubble_manager =
195 PermissionBubbleManager::FromWebContents(web_contents); 201 PermissionBubbleManager::FromWebContents(web_contents);
196 bubble_manager->AddRequest(new MidiPermissionRequest( 202 bubble_manager->AddRequest(new MidiPermissionRequest(
197 this, id, requesting_frame, 203 this, id, requesting_frame, user_gesture,
198 profile_->GetPrefs()->GetString(prefs::kAcceptLanguages), 204 profile_->GetPrefs()->GetString(prefs::kAcceptLanguages),
199 callback)); 205 callback));
200 return; 206 return;
201 } 207 }
202 208
203 // TODO(gbillock): Delete this and the infobar delegate when 209 // TODO(gbillock): Delete this and the infobar delegate when
204 // we're using only bubbles. crbug.com/337458 210 // we're using only bubbles. crbug.com/337458
205 GetQueueController()->CreateInfoBarRequest( 211 GetQueueController()->CreateInfoBarRequest(
206 id, requesting_frame, embedder, std::string(), base::Bind( 212 id, requesting_frame, embedder, std::string(), base::Bind(
207 &ChromeMidiPermissionContext::NotifyPermissionSet, 213 &ChromeMidiPermissionContext::NotifyPermissionSet,
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
249 } 255 }
250 256
251 void ChromeMidiPermissionContext::CancelPendingInfobarRequest( 257 void ChromeMidiPermissionContext::CancelPendingInfobarRequest(
252 const PermissionRequestID& id) { 258 const PermissionRequestID& id) {
253 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); 259 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
254 if (shutting_down_) 260 if (shutting_down_)
255 return; 261 return;
256 // TODO(gbillock): Add support for cancellation to permission bubbles. 262 // TODO(gbillock): Add support for cancellation to permission bubbles.
257 GetQueueController()->CancelInfoBarRequest(id); 263 GetQueueController()->CancelInfoBarRequest(id);
258 } 264 }
OLDNEW
« no previous file with comments | « chrome/browser/media/chrome_midi_permission_context.h ('k') | chrome/browser/media/media_stream_devices_controller.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698