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

Side by Side Diff: content/browser/renderer_host/media/device_request_message_filter.cc

Issue 88283002: Reland review 34393006: Refactor MediaStreamManager to not output real device id. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 7 years 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 "content/browser/renderer_host/media/device_request_message_filter.h" 5 #include "content/browser/renderer_host/media/device_request_message_filter.h"
6 6
7 #include "content/browser/browser_main_loop.h" 7 #include "content/browser/browser_main_loop.h"
8 #include "content/browser/renderer_host/media/media_stream_manager.h" 8 #include "content/browser/renderer_host/media/media_stream_manager.h"
9 #include "content/common/media/media_stream_messages.h" 9 #include "content/common/media/media_stream_messages.h"
10 #include "content/public/browser/media_device_id.h"
11 #include "content/public/browser/resource_context.h" 10 #include "content/public/browser/resource_context.h"
12 11
13 // Clears the MediaStreamDevice.name from all devices in |device_list|. 12 // Clears the MediaStreamDevice.name from all devices in |device_list|.
14 static void ClearDeviceLabels(content::StreamDeviceInfoArray* devices) { 13 static void ClearDeviceLabels(content::StreamDeviceInfoArray* devices) {
15 for (content::StreamDeviceInfoArray::iterator device_itr = devices->begin(); 14 for (content::StreamDeviceInfoArray::iterator device_itr = devices->begin();
16 device_itr != devices->end(); 15 device_itr != devices->end();
17 ++device_itr) { 16 ++device_itr) {
18 device_itr->device.name.clear(); 17 device_itr->device.name.clear();
19 } 18 }
20 } 19 }
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
90 } 89 }
91 DCHECK(request_it != requests_.end()); 90 DCHECK(request_it != requests_.end());
92 91
93 StreamDeviceInfoArray* audio_devices = &request_it->audio_devices; 92 StreamDeviceInfoArray* audio_devices = &request_it->audio_devices;
94 StreamDeviceInfoArray* video_devices = &request_it->video_devices; 93 StreamDeviceInfoArray* video_devices = &request_it->video_devices;
95 94
96 // Store hmac'd device ids instead of raw device ids. 95 // Store hmac'd device ids instead of raw device ids.
97 if (label == request_it->audio_devices_label) { 96 if (label == request_it->audio_devices_label) {
98 request_it->has_audio_returned = true; 97 request_it->has_audio_returned = true;
99 DCHECK(audio_devices->empty()); 98 DCHECK(audio_devices->empty());
100 HmacDeviceIds(request_it->origin, new_devices, audio_devices); 99 *audio_devices = new_devices;
101 } else { 100 } else {
102 DCHECK(label == request_it->video_devices_label); 101 DCHECK(label == request_it->video_devices_label);
103 request_it->has_video_returned = true; 102 request_it->has_video_returned = true;
104 DCHECK(video_devices->empty()); 103 DCHECK(video_devices->empty());
105 HmacDeviceIds(request_it->origin, new_devices, video_devices); 104 *video_devices = new_devices;
106 } 105 }
107 106
108 if (!request_it->has_audio_returned || !request_it->has_video_returned) { 107 if (!request_it->has_audio_returned || !request_it->has_video_returned) {
109 // Wait for the rest of the devices to complete. 108 // Wait for the rest of the devices to complete.
110 return; 109 return;
111 } 110 }
112 111
113 // Query for mic and camera permissions. 112 // Query for mic and camera permissions.
114 if (!resource_context_->AllowMicAccess(request_it->origin)) 113 if (!resource_context_->AllowMicAccess(request_it->origin))
115 ClearDeviceLabels(audio_devices); 114 ClearDeviceLabels(audio_devices);
(...skipping 28 matching lines...) Expand all
144 return handled; 143 return handled;
145 } 144 }
146 145
147 void DeviceRequestMessageFilter::OnChannelClosing() { 146 void DeviceRequestMessageFilter::OnChannelClosing() {
148 // Since the IPC channel is gone, cancel outstanding device requests. 147 // Since the IPC channel is gone, cancel outstanding device requests.
149 media_stream_manager_->CancelAllRequests(peer_pid()); 148 media_stream_manager_->CancelAllRequests(peer_pid());
150 149
151 requests_.clear(); 150 requests_.clear();
152 } 151 }
153 152
154 void DeviceRequestMessageFilter::HmacDeviceIds(
155 const GURL& origin,
156 const StreamDeviceInfoArray& raw_devices,
157 StreamDeviceInfoArray* devices_with_guids) {
158 DCHECK(devices_with_guids);
159
160 // Replace raw ids with hmac'd ids before returning to renderer process.
161 for (StreamDeviceInfoArray::const_iterator device_itr = raw_devices.begin();
162 device_itr != raw_devices.end();
163 ++device_itr) {
164 StreamDeviceInfo current_device_info = *device_itr;
165 current_device_info.device.id =
166 content::GetHMACForMediaDeviceID(origin, device_itr->device.id);
167 devices_with_guids->push_back(current_device_info);
168 }
169 }
170
171 void DeviceRequestMessageFilter::OnGetSources(int request_id, 153 void DeviceRequestMessageFilter::OnGetSources(int request_id,
172 const GURL& security_origin) { 154 const GURL& security_origin) {
173 // Make request to get audio devices. 155 // Make request to get audio devices.
174 const std::string& audio_label = media_stream_manager_->EnumerateDevices( 156 const std::string& audio_label = media_stream_manager_->EnumerateDevices(
175 this, -1, -1, -1, MEDIA_DEVICE_AUDIO_CAPTURE, security_origin); 157 this, -1, -1, -1, MEDIA_DEVICE_AUDIO_CAPTURE, security_origin);
176 DCHECK(!audio_label.empty()); 158 DCHECK(!audio_label.empty());
177 159
178 // Make request for video devices. 160 // Make request for video devices.
179 const std::string& video_label = media_stream_manager_->EnumerateDevices( 161 const std::string& video_label = media_stream_manager_->EnumerateDevices(
180 this, -1, -1, -1, MEDIA_DEVICE_VIDEO_CAPTURE, security_origin); 162 this, -1, -1, -1, MEDIA_DEVICE_VIDEO_CAPTURE, security_origin);
181 DCHECK(!video_label.empty()); 163 DCHECK(!video_label.empty());
182 164
183 requests_.push_back(DeviceRequest( 165 requests_.push_back(DeviceRequest(
184 request_id, security_origin, audio_label, video_label)); 166 request_id, security_origin, audio_label, video_label));
185 } 167 }
186 168
187 } // namespace content 169 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698