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

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

Issue 2474923002: Fix race in MediaDevicesPermissionChecker. (Closed)
Patch Set: Fix rebase Created 4 years, 1 month 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"
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 72
73 } // namespace 73 } // namespace
74 74
75 MediaDevicesPermissionChecker::MediaDevicesPermissionChecker() 75 MediaDevicesPermissionChecker::MediaDevicesPermissionChecker()
76 : use_override_(base::CommandLine::ForCurrentProcess()->HasSwitch( 76 : use_override_(base::CommandLine::ForCurrentProcess()->HasSwitch(
77 switches::kUseFakeUIForMediaStream)), 77 switches::kUseFakeUIForMediaStream)),
78 override_value_( 78 override_value_(
79 base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII( 79 base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
80 switches::kUseFakeUIForMediaStream) != "deny") {} 80 switches::kUseFakeUIForMediaStream) != "deny") {}
81 81
82 MediaDevicesPermissionChecker::MediaDevicesPermissionChecker(
83 bool override_value)
84 : use_override_(true), override_value_(override_value) {}
85
82 bool MediaDevicesPermissionChecker::CheckPermissionOnUIThread( 86 bool MediaDevicesPermissionChecker::CheckPermissionOnUIThread(
83 MediaDeviceType device_type, 87 MediaDeviceType device_type,
84 int render_process_id, 88 int render_process_id,
85 int render_frame_id, 89 int render_frame_id,
86 const url::Origin& security_origin) { 90 const url::Origin& security_origin) const {
87 if (use_override_) 91 if (use_override_)
88 return override_value_; 92 return override_value_;
89 93
90 return CheckSinglePermissionOnUIThread(device_type, render_process_id, 94 return CheckSinglePermissionOnUIThread(device_type, render_process_id,
91 render_frame_id, security_origin); 95 render_frame_id, security_origin);
92 } 96 }
93 97
94 void MediaDevicesPermissionChecker::CheckPermission( 98 void MediaDevicesPermissionChecker::CheckPermission(
95 MediaDeviceType device_type, 99 MediaDeviceType device_type,
96 int render_process_id, 100 int render_process_id,
97 int render_frame_id, 101 int render_frame_id,
98 const url::Origin& security_origin, 102 const url::Origin& security_origin,
99 const base::Callback<void(bool)>& callback) { 103 const base::Callback<void(bool)>& callback) const {
100 if (use_override_) { 104 if (use_override_) {
101 callback.Run(override_value_); 105 callback.Run(override_value_);
102 return; 106 return;
103 } 107 }
104 108
105 BrowserThread::PostTaskAndReplyWithResult( 109 BrowserThread::PostTaskAndReplyWithResult(
106 BrowserThread::UI, FROM_HERE, 110 BrowserThread::UI, FROM_HERE,
107 base::Bind(&CheckSinglePermissionOnUIThread, device_type, 111 base::Bind(&CheckSinglePermissionOnUIThread, device_type,
108 render_process_id, render_frame_id, security_origin), 112 render_process_id, render_frame_id, security_origin),
109 callback); 113 callback);
110 } 114 }
111 115
112 MediaDevicesManager::BoolDeviceTypes 116 MediaDevicesManager::BoolDeviceTypes
113 MediaDevicesPermissionChecker::CheckPermissionsOnUIThread( 117 MediaDevicesPermissionChecker::CheckPermissionsOnUIThread(
114 MediaDevicesManager::BoolDeviceTypes requested_device_types, 118 MediaDevicesManager::BoolDeviceTypes requested_device_types,
115 int render_process_id, 119 int render_process_id,
116 int render_frame_id, 120 int render_frame_id,
117 const url::Origin& security_origin) { 121 const url::Origin& security_origin) const {
118 if (use_override_) { 122 if (use_override_) {
119 MediaDevicesManager::BoolDeviceTypes result; 123 MediaDevicesManager::BoolDeviceTypes result;
120 result.fill(override_value_); 124 result.fill(override_value_);
121 return result; 125 return result;
122 } 126 }
123 127
124 return DoCheckPermissionsOnUIThread(requested_device_types, render_process_id, 128 return DoCheckPermissionsOnUIThread(requested_device_types, render_process_id,
125 render_frame_id, security_origin); 129 render_frame_id, security_origin);
126 } 130 }
127 131
128 void MediaDevicesPermissionChecker::CheckPermissions( 132 void MediaDevicesPermissionChecker::CheckPermissions(
129 MediaDevicesManager::BoolDeviceTypes requested, 133 MediaDevicesManager::BoolDeviceTypes requested,
130 int render_process_id, 134 int render_process_id,
131 int render_frame_id, 135 int render_frame_id,
132 const url::Origin& security_origin, 136 const url::Origin& security_origin,
133 const base::Callback<void(const MediaDevicesManager::BoolDeviceTypes&)>& 137 const base::Callback<void(const MediaDevicesManager::BoolDeviceTypes&)>&
134 callback) { 138 callback) const {
135 if (use_override_) { 139 if (use_override_) {
136 MediaDevicesManager::BoolDeviceTypes result; 140 MediaDevicesManager::BoolDeviceTypes result;
137 result.fill(override_value_); 141 result.fill(override_value_);
138 callback.Run(result); 142 callback.Run(result);
139 return; 143 return;
140 } 144 }
141 145
142 BrowserThread::PostTaskAndReplyWithResult( 146 BrowserThread::PostTaskAndReplyWithResult(
143 BrowserThread::UI, FROM_HERE, 147 BrowserThread::UI, FROM_HERE,
144 base::Bind(&DoCheckPermissionsOnUIThread, requested, render_process_id, 148 base::Bind(&DoCheckPermissionsOnUIThread, requested, render_process_id,
145 render_frame_id, security_origin), 149 render_frame_id, security_origin),
146 callback); 150 callback);
147 } 151 }
148 152
149 void MediaDevicesPermissionChecker::OverridePermissionsForTesting(
150 bool override_value) {
151 use_override_ = true;
152 override_value_ = override_value;
153 }
154
155 } // namespace content 153 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698