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

Side by Side Diff: content/browser/media/media_devices_permission_checker.cc

Issue 2872913003: Do not pass the origin to MediaDevicesDispatcherHost. (Closed)
Patch Set: fix Created 3 years, 7 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
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 "content/browser/media/media_devices_permission_checker.h" 5 #include "content/browser/media/media_devices_permission_checker.h"
6 6
7 #include <utility> 7 #include <utility>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
11 #include "base/command_line.h" 11 #include "base/command_line.h"
12 #include "content/browser/frame_host/render_frame_host_delegate.h" 12 #include "content/browser/frame_host/render_frame_host_delegate.h"
13 #include "content/browser/frame_host/render_frame_host_impl.h" 13 #include "content/browser/frame_host/render_frame_host_impl.h"
14 #include "content/common/media/media_devices.h" 14 #include "content/common/media/media_devices.h"
15 #include "content/public/browser/browser_context.h" 15 #include "content/public/browser/browser_context.h"
16 #include "content/public/browser/browser_thread.h" 16 #include "content/public/browser/browser_thread.h"
17 #include "content/public/browser/render_process_host.h" 17 #include "content/public/browser/render_process_host.h"
18 #include "content/public/common/content_switches.h" 18 #include "content/public/common/content_switches.h"
19 #include "url/gurl.h" 19 #include "url/gurl.h"
20 #include "url/origin.h" 20 #include "url/origin.h"
21 21
22 namespace content { 22 namespace content {
23 23
24 namespace { 24 namespace {
25 25
26 MediaDevicesManager::BoolDeviceTypes DoCheckPermissionsOnUIThread( 26 MediaDevicesManager::BoolDeviceTypes DoCheckPermissionsOnUIThread(
27 MediaDevicesManager::BoolDeviceTypes requested_device_types, 27 MediaDevicesManager::BoolDeviceTypes requested_device_types,
28 int render_process_id, 28 int render_process_id,
29 int render_frame_id, 29 int render_frame_id) {
30 const url::Origin& security_origin) {
31 DCHECK_CURRENTLY_ON(BrowserThread::UI); 30 DCHECK_CURRENTLY_ON(BrowserThread::UI);
32 RenderFrameHostImpl* frame_host = 31 RenderFrameHostImpl* frame_host =
33 RenderFrameHostImpl::FromID(render_process_id, render_frame_id); 32 RenderFrameHostImpl::FromID(render_process_id, render_frame_id);
34 33
35 // If there is no |frame_host|, return false for all permissions. 34 // If there is no |frame_host|, return false for all permissions.
36 if (!frame_host) 35 if (!frame_host)
37 return MediaDevicesManager::BoolDeviceTypes(); 36 return MediaDevicesManager::BoolDeviceTypes();
38 37
39 RenderFrameHostDelegate* delegate = frame_host->delegate(); 38 RenderFrameHostDelegate* delegate = frame_host->delegate();
40 GURL origin = security_origin.GetURL(); 39 GURL origin = frame_host->GetLastCommittedOrigin().GetURL();
Mike West 2017/05/10 08:52:22 I know this isn't part of the patch, but why is |o
Guido Urdaneta 2017/05/10 09:38:01 My guess is that it is or depends on old code that
41 40
42 // Currently, the MEDIA_DEVICE_AUDIO_CAPTURE permission is used for 41 // Currently, the MEDIA_DEVICE_AUDIO_CAPTURE permission is used for
43 // both audio input and output. 42 // both audio input and output.
44 // TODO(guidou): use specific permission for audio output when it becomes 43 // TODO(guidou): use specific permission for audio output when it becomes
45 // available. See http://crbug.com/556542. 44 // available. See http://crbug.com/556542.
46 bool has_audio_permission = 45 bool has_audio_permission =
47 (requested_device_types[MEDIA_DEVICE_TYPE_AUDIO_INPUT] || 46 (requested_device_types[MEDIA_DEVICE_TYPE_AUDIO_INPUT] ||
48 requested_device_types[MEDIA_DEVICE_TYPE_AUDIO_OUTPUT]) && 47 requested_device_types[MEDIA_DEVICE_TYPE_AUDIO_OUTPUT]) &&
49 delegate->CheckMediaAccessPermission(origin, MEDIA_DEVICE_AUDIO_CAPTURE); 48 delegate->CheckMediaAccessPermission(origin, MEDIA_DEVICE_AUDIO_CAPTURE);
50 49
51 MediaDevicesManager::BoolDeviceTypes result; 50 MediaDevicesManager::BoolDeviceTypes result;
52 result[MEDIA_DEVICE_TYPE_AUDIO_INPUT] = has_audio_permission; 51 result[MEDIA_DEVICE_TYPE_AUDIO_INPUT] = has_audio_permission;
53 result[MEDIA_DEVICE_TYPE_AUDIO_OUTPUT] = has_audio_permission; 52 result[MEDIA_DEVICE_TYPE_AUDIO_OUTPUT] = has_audio_permission;
54 result[MEDIA_DEVICE_TYPE_VIDEO_INPUT] = 53 result[MEDIA_DEVICE_TYPE_VIDEO_INPUT] =
55 requested_device_types[MEDIA_DEVICE_TYPE_VIDEO_INPUT] && 54 requested_device_types[MEDIA_DEVICE_TYPE_VIDEO_INPUT] &&
56 delegate->CheckMediaAccessPermission(origin, MEDIA_DEVICE_VIDEO_CAPTURE); 55 delegate->CheckMediaAccessPermission(origin, MEDIA_DEVICE_VIDEO_CAPTURE);
57 56
58 return result; 57 return result;
59 } 58 }
60 59
61 bool CheckSinglePermissionOnUIThread(MediaDeviceType device_type, 60 bool CheckSinglePermissionOnUIThread(MediaDeviceType device_type,
62 int render_process_id, 61 int render_process_id,
63 int render_frame_id, 62 int render_frame_id) {
64 const url::Origin& security_origin) {
65 DCHECK_CURRENTLY_ON(BrowserThread::UI); 63 DCHECK_CURRENTLY_ON(BrowserThread::UI);
66 MediaDevicesManager::BoolDeviceTypes requested; 64 MediaDevicesManager::BoolDeviceTypes requested;
67 requested[device_type] = true; 65 requested[device_type] = true;
68 MediaDevicesManager::BoolDeviceTypes result = DoCheckPermissionsOnUIThread( 66 MediaDevicesManager::BoolDeviceTypes result = DoCheckPermissionsOnUIThread(
69 requested, render_process_id, render_frame_id, security_origin); 67 requested, render_process_id, render_frame_id);
70 return result[device_type]; 68 return result[device_type];
71 } 69 }
72 70
73 } // namespace 71 } // namespace
74 72
75 MediaDevicesPermissionChecker::MediaDevicesPermissionChecker() 73 MediaDevicesPermissionChecker::MediaDevicesPermissionChecker()
76 : use_override_(base::CommandLine::ForCurrentProcess()->HasSwitch( 74 : use_override_(base::CommandLine::ForCurrentProcess()->HasSwitch(
77 switches::kUseFakeUIForMediaStream)), 75 switches::kUseFakeUIForMediaStream)),
78 override_value_( 76 override_value_(
79 base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII( 77 base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
80 switches::kUseFakeUIForMediaStream) != "deny") {} 78 switches::kUseFakeUIForMediaStream) != "deny") {}
81 79
82 MediaDevicesPermissionChecker::MediaDevicesPermissionChecker( 80 MediaDevicesPermissionChecker::MediaDevicesPermissionChecker(
83 bool override_value) 81 bool override_value)
84 : use_override_(true), override_value_(override_value) {} 82 : use_override_(true), override_value_(override_value) {}
85 83
86 bool MediaDevicesPermissionChecker::CheckPermissionOnUIThread( 84 bool MediaDevicesPermissionChecker::CheckPermissionOnUIThread(
87 MediaDeviceType device_type, 85 MediaDeviceType device_type,
88 int render_process_id, 86 int render_process_id,
89 int render_frame_id, 87 int render_frame_id) const {
90 const url::Origin& security_origin) const {
91 if (use_override_) 88 if (use_override_)
92 return override_value_; 89 return override_value_;
93 90
94 return CheckSinglePermissionOnUIThread(device_type, render_process_id, 91 return CheckSinglePermissionOnUIThread(device_type, render_process_id,
95 render_frame_id, security_origin); 92 render_frame_id);
96 } 93 }
97 94
98 void MediaDevicesPermissionChecker::CheckPermission( 95 void MediaDevicesPermissionChecker::CheckPermission(
99 MediaDeviceType device_type, 96 MediaDeviceType device_type,
100 int render_process_id, 97 int render_process_id,
101 int render_frame_id, 98 int render_frame_id,
102 const url::Origin& security_origin,
103 const base::Callback<void(bool)>& callback) const { 99 const base::Callback<void(bool)>& callback) const {
104 if (use_override_) { 100 if (use_override_) {
105 callback.Run(override_value_); 101 callback.Run(override_value_);
106 return; 102 return;
107 } 103 }
108 104
109 BrowserThread::PostTaskAndReplyWithResult( 105 BrowserThread::PostTaskAndReplyWithResult(
110 BrowserThread::UI, FROM_HERE, 106 BrowserThread::UI, FROM_HERE,
111 base::Bind(&CheckSinglePermissionOnUIThread, device_type, 107 base::Bind(&CheckSinglePermissionOnUIThread, device_type,
112 render_process_id, render_frame_id, security_origin), 108 render_process_id, render_frame_id),
113 callback); 109 callback);
114 } 110 }
115 111
116 void MediaDevicesPermissionChecker::CheckPermissions( 112 void MediaDevicesPermissionChecker::CheckPermissions(
117 MediaDevicesManager::BoolDeviceTypes requested, 113 MediaDevicesManager::BoolDeviceTypes requested,
118 int render_process_id, 114 int render_process_id,
119 int render_frame_id, 115 int render_frame_id,
120 const url::Origin& security_origin,
121 const base::Callback<void(const MediaDevicesManager::BoolDeviceTypes&)>& 116 const base::Callback<void(const MediaDevicesManager::BoolDeviceTypes&)>&
122 callback) const { 117 callback) const {
123 if (use_override_) { 118 if (use_override_) {
124 MediaDevicesManager::BoolDeviceTypes result; 119 MediaDevicesManager::BoolDeviceTypes result;
125 result.fill(override_value_); 120 result.fill(override_value_);
126 callback.Run(result); 121 callback.Run(result);
127 return; 122 return;
128 } 123 }
129 124
130 BrowserThread::PostTaskAndReplyWithResult( 125 BrowserThread::PostTaskAndReplyWithResult(
131 BrowserThread::UI, FROM_HERE, 126 BrowserThread::UI, FROM_HERE,
132 base::Bind(&DoCheckPermissionsOnUIThread, requested, render_process_id, 127 base::Bind(&DoCheckPermissionsOnUIThread, requested, render_process_id,
133 render_frame_id, security_origin), 128 render_frame_id),
134 callback); 129 callback);
135 } 130 }
136 131
137 } // namespace content 132 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698