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

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

Issue 180633008: Add different error codes for getUserMedia. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixed comments Created 6 years, 9 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/media_stream_devices_controller.h" 5 #include "chrome/browser/media/media_stream_devices_controller.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/metrics/histogram.h" 8 #include "base/metrics/histogram.h"
9 #include "base/prefs/pref_service.h" 9 #include "base/prefs/pref_service.h"
10 #include "base/prefs/scoped_user_pref_update.h" 10 #include "base/prefs/scoped_user_pref_update.h"
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
124 content::MEDIA_DEVICE_VIDEO_CAPTURE, 124 content::MEDIA_DEVICE_VIDEO_CAPTURE,
125 MediaStreamTypeSettings(MEDIA_ALLOWED, 125 MediaStreamTypeSettings(MEDIA_ALLOWED,
126 request.requested_video_device_id))); 126 request.requested_video_device_id)));
127 } 127 }
128 } 128 }
129 } 129 }
130 130
131 MediaStreamDevicesController::~MediaStreamDevicesController() { 131 MediaStreamDevicesController::~MediaStreamDevicesController() {
132 if (!callback_.is_null()) { 132 if (!callback_.is_null()) {
133 callback_.Run(content::MediaStreamDevices(), 133 callback_.Run(content::MediaStreamDevices(),
134 content::MEDIA_DEVICE_INVALID_STATE,
134 scoped_ptr<content::MediaStreamUI>()); 135 scoped_ptr<content::MediaStreamUI>());
135 } 136 }
136 } 137 }
137 138
138 // static 139 // static
139 void MediaStreamDevicesController::RegisterProfilePrefs( 140 void MediaStreamDevicesController::RegisterProfilePrefs(
140 user_prefs::PrefRegistrySyncable* prefs) { 141 user_prefs::PrefRegistrySyncable* prefs) {
141 prefs->RegisterBooleanPref(prefs::kVideoCaptureAllowed, 142 prefs->RegisterBooleanPref(prefs::kVideoCaptureAllowed,
142 true, 143 true,
143 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 144 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
144 prefs->RegisterBooleanPref(prefs::kAudioCaptureAllowed, 145 prefs->RegisterBooleanPref(prefs::kAudioCaptureAllowed,
145 true, 146 true,
146 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 147 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
147 prefs->RegisterListPref(prefs::kVideoCaptureAllowedUrls, 148 prefs->RegisterListPref(prefs::kVideoCaptureAllowedUrls,
148 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 149 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
149 prefs->RegisterListPref(prefs::kAudioCaptureAllowedUrls, 150 prefs->RegisterListPref(prefs::kAudioCaptureAllowedUrls,
150 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 151 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
151 } 152 }
152 153
153 // TODO(gbillock): rename? doesn't actually dismiss. More of a 'check profile 154 // TODO(gbillock): rename? doesn't actually dismiss. More of a 'check profile
154 // and system for compatibility' thing. 155 // and system for compatibility' thing.
155 bool MediaStreamDevicesController::DismissInfoBarAndTakeActionOnSettings() { 156 bool MediaStreamDevicesController::DismissInfoBarAndTakeActionOnSettings() {
156 // Tab capture is allowed for extensions only and infobar is not shown for 157 // Tab capture is allowed for extensions only and infobar is not shown for
157 // extensions. 158 // extensions.
158 if (request_.audio_type == content::MEDIA_TAB_AUDIO_CAPTURE || 159 if (request_.audio_type == content::MEDIA_TAB_AUDIO_CAPTURE ||
159 request_.video_type == content::MEDIA_TAB_VIDEO_CAPTURE) { 160 request_.video_type == content::MEDIA_TAB_VIDEO_CAPTURE) {
160 Deny(false); 161 Deny(false, content::MEDIA_DEVICE_INVALID_STATE);
161 return true; 162 return true;
162 } 163 }
163 164
164 // Deny the request if the security origin is empty, this happens with 165 // Deny the request if the security origin is empty, this happens with
165 // file access without |--allow-file-access-from-files| flag. 166 // file access without |--allow-file-access-from-files| flag.
166 if (request_.security_origin.is_empty()) { 167 if (request_.security_origin.is_empty()) {
167 Deny(false); 168 Deny(false, content::MEDIA_DEVICE_INVALID_SECURITY_ORIGIN);
168 return true; 169 return true;
169 } 170 }
170 171
171 // Deny the request if there is no device attached to the OS. 172 // Deny the request if there is no device attached to the OS.
172 if (!HasAnyAvailableDevice()) { 173 if (!HasAnyAvailableDevice()) {
173 Deny(false); 174 Deny(false, content::MEDIA_DEVICE_NO_HARDWARE);
174 return true; 175 return true;
175 } 176 }
176 177
177 // Check if any allow exception has been made for this request. 178 // Check if any allow exception has been made for this request.
178 if (IsRequestAllowedByDefault()) { 179 if (IsRequestAllowedByDefault()) {
179 Accept(false); 180 Accept(false);
180 return true; 181 return true;
181 } 182 }
182 183
183 // Filter any parts of the request that have been blocked by default and deny 184 // Filter any parts of the request that have been blocked by default and deny
184 // it if nothing is left to accept. 185 // it if nothing is left to accept.
185 if (FilterBlockedByDefaultDevices() == 0) { 186 if (FilterBlockedByDefaultDevices() == 0) {
186 Deny(false); 187 Deny(false, content::MEDIA_DEVICE_PERMISSION_DENIED);
187 return true; 188 return true;
188 } 189 }
189 190
190 // Check if the media default setting is set to block. 191 // Check if the media default setting is set to block.
191 if (IsDefaultMediaAccessBlocked()) { 192 if (IsDefaultMediaAccessBlocked()) {
192 Deny(false); 193 Deny(false, content::MEDIA_DEVICE_PERMISSION_DENIED);
193 return true; 194 return true;
194 } 195 }
195 196
196 if (request_.request_type == content::MEDIA_OPEN_DEVICE) { 197 if (request_.request_type == content::MEDIA_OPEN_DEVICE) {
197 bool no_matched_audio_device = 198 bool no_matched_audio_device =
198 (request_.audio_type == content::MEDIA_DEVICE_AUDIO_CAPTURE && 199 (request_.audio_type == content::MEDIA_DEVICE_AUDIO_CAPTURE &&
199 !request_.requested_audio_device_id.empty() && 200 !request_.requested_audio_device_id.empty() &&
200 MediaCaptureDevicesDispatcher::GetInstance()->GetRequestedAudioDevice( 201 MediaCaptureDevicesDispatcher::GetInstance()->GetRequestedAudioDevice(
201 request_.requested_audio_device_id) == NULL); 202 request_.requested_audio_device_id) == NULL);
202 bool no_matched_video_device = 203 bool no_matched_video_device =
203 (request_.video_type == content::MEDIA_DEVICE_VIDEO_CAPTURE && 204 (request_.video_type == content::MEDIA_DEVICE_VIDEO_CAPTURE &&
204 !request_.requested_video_device_id.empty() && 205 !request_.requested_video_device_id.empty() &&
205 MediaCaptureDevicesDispatcher::GetInstance()->GetRequestedVideoDevice( 206 MediaCaptureDevicesDispatcher::GetInstance()->GetRequestedVideoDevice(
206 request_.requested_video_device_id) == NULL); 207 request_.requested_video_device_id) == NULL);
207 if (no_matched_audio_device || no_matched_video_device) { 208 if (no_matched_audio_device || no_matched_video_device) {
208 Deny(false); 209 Deny(false, content::MEDIA_DEVICE_PERMISSION_DENIED);
209 return true; 210 return true;
210 } 211 }
211 } 212 }
212 213
213 // Show the infobar. 214 // Show the infobar.
214 return false; 215 return false;
215 } 216 }
216 217
217 bool MediaStreamDevicesController::HasAudio() const { 218 bool MediaStreamDevicesController::HasAudio() const {
218 return IsDeviceAudioCaptureRequestedAndAllowed(); 219 return IsDeviceAudioCaptureRequestedAndAllowed();
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
328 } 329 }
329 330
330 scoped_ptr<content::MediaStreamUI> ui; 331 scoped_ptr<content::MediaStreamUI> ui;
331 if (!devices.empty()) { 332 if (!devices.empty()) {
332 ui = MediaCaptureDevicesDispatcher::GetInstance()-> 333 ui = MediaCaptureDevicesDispatcher::GetInstance()->
333 GetMediaStreamCaptureIndicator()->RegisterMediaStream( 334 GetMediaStreamCaptureIndicator()->RegisterMediaStream(
334 web_contents_, devices); 335 web_contents_, devices);
335 } 336 }
336 content::MediaResponseCallback cb = callback_; 337 content::MediaResponseCallback cb = callback_;
337 callback_.Reset(); 338 callback_.Reset();
338 cb.Run(devices, ui.Pass()); 339 cb.Run(devices, content::MEDIA_DEVICE_OK, ui.Pass());
339 } 340 }
340 341
341 void MediaStreamDevicesController::Deny(bool update_content_setting) { 342 void MediaStreamDevicesController::Deny(
343 bool update_content_setting,
344 content::MediaStreamRequestResult result) {
345 DLOG(WARNING) << "MediaStreamDevicesController::Deny: " << result;
342 NotifyUIRequestDenied(); 346 NotifyUIRequestDenied();
343 347
344 if (update_content_setting) 348 if (update_content_setting)
345 SetPermission(false); 349 SetPermission(false);
346 350
347 content::MediaResponseCallback cb = callback_; 351 content::MediaResponseCallback cb = callback_;
348 callback_.Reset(); 352 callback_.Reset();
349 cb.Run(content::MediaStreamDevices(), scoped_ptr<content::MediaStreamUI>()); 353 cb.Run(content::MediaStreamDevices(),
354 result,
355 scoped_ptr<content::MediaStreamUI>());
350 } 356 }
351 357
352 int MediaStreamDevicesController::GetIconID() const { 358 int MediaStreamDevicesController::GetIconID() const {
353 if (HasVideo()) 359 if (HasVideo())
354 return IDR_INFOBAR_MEDIA_STREAM_CAMERA; 360 return IDR_INFOBAR_MEDIA_STREAM_CAMERA;
355 361
356 return IDR_INFOBAR_MEDIA_STREAM_MIC; 362 return IDR_INFOBAR_MEDIA_STREAM_MIC;
357 } 363 }
358 364
359 base::string16 MediaStreamDevicesController::GetMessageText() const { 365 base::string16 MediaStreamDevicesController::GetMessageText() const {
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
392 } else { 398 } else {
393 UMA_HISTOGRAM_ENUMERATION("Media.DevicePermissionActions", 399 UMA_HISTOGRAM_ENUMERATION("Media.DevicePermissionActions",
394 kAllowHttp, kPermissionActionsMax); 400 kAllowHttp, kPermissionActionsMax);
395 } 401 }
396 Accept(true); 402 Accept(true);
397 } 403 }
398 404
399 void MediaStreamDevicesController::PermissionDenied() { 405 void MediaStreamDevicesController::PermissionDenied() {
400 UMA_HISTOGRAM_ENUMERATION("Media.DevicePermissionActions", 406 UMA_HISTOGRAM_ENUMERATION("Media.DevicePermissionActions",
401 kDeny, kPermissionActionsMax); 407 kDeny, kPermissionActionsMax);
402 Deny(true); 408 Deny(true, content::MEDIA_DEVICE_PERMISSION_DENIED);
403 } 409 }
404 410
405 void MediaStreamDevicesController::Cancelled() { 411 void MediaStreamDevicesController::Cancelled() {
406 UMA_HISTOGRAM_ENUMERATION("Media.DevicePermissionActions", 412 UMA_HISTOGRAM_ENUMERATION("Media.DevicePermissionActions",
407 kCancel, kPermissionActionsMax); 413 kCancel, kPermissionActionsMax);
408 Deny(true); 414 Deny(true, content::MEDIA_DEVICE_PERMISSION_DISMISSED);
409 } 415 }
410 416
411 void MediaStreamDevicesController::RequestFinished() { 417 void MediaStreamDevicesController::RequestFinished() {
412 delete this; 418 delete this;
413 } 419 }
414 420
415 MediaStreamDevicesController::DevicePolicy 421 MediaStreamDevicesController::DevicePolicy
416 MediaStreamDevicesController::GetDevicePolicy( 422 MediaStreamDevicesController::GetDevicePolicy(
417 const char* policy_name, 423 const char* policy_name,
418 const char* whitelist_policy_name) const { 424 const char* whitelist_policy_name) const {
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
626 it->second.permission == MEDIA_ALLOWED); 632 it->second.permission == MEDIA_ALLOWED);
627 } 633 }
628 634
629 bool MediaStreamDevicesController::IsDeviceVideoCaptureRequestedAndAllowed() 635 bool MediaStreamDevicesController::IsDeviceVideoCaptureRequestedAndAllowed()
630 const { 636 const {
631 MediaStreamTypeSettingsMap::const_iterator it = 637 MediaStreamTypeSettingsMap::const_iterator it =
632 request_permissions_.find(content::MEDIA_DEVICE_VIDEO_CAPTURE); 638 request_permissions_.find(content::MEDIA_DEVICE_VIDEO_CAPTURE);
633 return (it != request_permissions_.end() && 639 return (it != request_permissions_.end() &&
634 it->second.permission == MEDIA_ALLOWED); 640 it->second.permission == MEDIA_ALLOWED);
635 } 641 }
OLDNEW
« no previous file with comments | « chrome/browser/media/media_stream_devices_controller.h ('k') | chrome/browser/media/media_stream_infobar_delegate.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698