| Index: content/browser/renderer_host/media/media_stream_manager.cc
|
| diff --git a/content/browser/renderer_host/media/media_stream_manager.cc b/content/browser/renderer_host/media/media_stream_manager.cc
|
| index fa521ecb14795b6e2239e921e43293393d7813ff..8e4c7ca211e76a7d427d6f343a42d725ddbccf27 100644
|
| --- a/content/browser/renderer_host/media/media_stream_manager.cc
|
| +++ b/content/browser/renderer_host/media/media_stream_manager.cc
|
| @@ -177,11 +177,6 @@ std::string GetLogMessageString(MediaStreamType stream_type,
|
| return output_string;
|
| }
|
|
|
| -// Needed for MediaStreamManager::GenerateStream below.
|
| -std::string ReturnEmptySalt() {
|
| - return std::string();
|
| -}
|
| -
|
| // Clears the MediaStreamDevice.name from all devices in |devices|.
|
| void ClearDeviceLabels(content::StreamDeviceInfoArray* devices) {
|
| for (content::StreamDeviceInfo& device_info : *devices)
|
| @@ -218,7 +213,7 @@ class MediaStreamManager::DeviceRequest {
|
| bool user_gesture,
|
| MediaStreamRequestType request_type,
|
| const StreamControls& controls,
|
| - const ResourceContext::SaltCallback& salt_callback)
|
| + const std::string& salt)
|
| : requester(requester),
|
| requesting_process_id(requesting_process_id),
|
| requesting_frame_id(requesting_frame_id),
|
| @@ -227,7 +222,7 @@ class MediaStreamManager::DeviceRequest {
|
| user_gesture(user_gesture),
|
| request_type(request_type),
|
| controls(controls),
|
| - salt_callback(salt_callback),
|
| + salt(salt),
|
| state_(NUM_MEDIA_TYPES, MEDIA_REQUEST_STATE_NOT_REQUESTED),
|
| audio_type_(MEDIA_NO_SERVICE),
|
| video_type_(MEDIA_NO_SERVICE),
|
| @@ -346,7 +341,7 @@ class MediaStreamManager::DeviceRequest {
|
|
|
| const StreamControls controls;
|
|
|
| - ResourceContext::SaltCallback salt_callback;
|
| + const std::string salt;
|
|
|
| StreamDeviceInfoArray devices;
|
|
|
| @@ -466,11 +461,11 @@ std::string MediaStreamManager::MakeMediaAccessRequest(
|
|
|
| // TODO(perkj): The argument list with NULL parameters to DeviceRequest
|
| // suggests that this is the wrong design. Can this be refactored?
|
| - DeviceRequest* request = new DeviceRequest(
|
| - NULL, render_process_id, render_frame_id, page_request_id,
|
| - security_origin,
|
| - false, // user gesture
|
| - MEDIA_DEVICE_ACCESS, controls, base::Bind(&ReturnEmptySalt));
|
| + DeviceRequest* request =
|
| + new DeviceRequest(NULL, render_process_id, render_frame_id,
|
| + page_request_id, security_origin,
|
| + false, // user gesture
|
| + MEDIA_DEVICE_ACCESS, controls, std::string());
|
|
|
| const std::string& label = AddRequest(request);
|
|
|
| @@ -490,7 +485,7 @@ std::string MediaStreamManager::MakeMediaAccessRequest(
|
| void MediaStreamManager::GenerateStream(MediaStreamRequester* requester,
|
| int render_process_id,
|
| int render_frame_id,
|
| - const ResourceContext::SaltCallback& sc,
|
| + const std::string& salt,
|
| int page_request_id,
|
| const StreamControls& controls,
|
| const url::Origin& security_origin,
|
| @@ -500,7 +495,7 @@ void MediaStreamManager::GenerateStream(MediaStreamRequester* requester,
|
|
|
| DeviceRequest* request = new DeviceRequest(
|
| requester, render_process_id, render_frame_id, page_request_id,
|
| - security_origin, user_gesture, MEDIA_GENERATE_STREAM, controls, sc);
|
| + security_origin, user_gesture, MEDIA_GENERATE_STREAM, controls, salt);
|
|
|
| const std::string& label = AddRequest(request);
|
|
|
| @@ -685,7 +680,7 @@ std::string MediaStreamManager::EnumerateDevices(
|
| MediaStreamRequester* requester,
|
| int render_process_id,
|
| int render_frame_id,
|
| - const ResourceContext::SaltCallback& sc,
|
| + const std::string& salt,
|
| int page_request_id,
|
| MediaStreamType type,
|
| const url::Origin& security_origin) {
|
| @@ -699,7 +694,7 @@ std::string MediaStreamManager::EnumerateDevices(
|
| new DeviceRequest(requester, render_process_id, render_frame_id,
|
| page_request_id, security_origin,
|
| false, // user gesture
|
| - MEDIA_ENUMERATE_DEVICES, StreamControls(), sc);
|
| + MEDIA_ENUMERATE_DEVICES, StreamControls(), salt);
|
| if (IsAudioInputMediaType(type) || type == MEDIA_DEVICE_AUDIO_OUTPUT)
|
| request->SetAudioType(type);
|
| else if (IsVideoMediaType(type))
|
| @@ -801,7 +796,7 @@ void MediaStreamManager::AudioOutputDevicesEnumerated(
|
| void MediaStreamManager::OpenDevice(MediaStreamRequester* requester,
|
| int render_process_id,
|
| int render_frame_id,
|
| - const ResourceContext::SaltCallback& sc,
|
| + const std::string& salt,
|
| int page_request_id,
|
| const std::string& device_id,
|
| MediaStreamType type,
|
| @@ -824,7 +819,7 @@ void MediaStreamManager::OpenDevice(MediaStreamRequester* requester,
|
| new DeviceRequest(requester, render_process_id, render_frame_id,
|
| page_request_id, security_origin,
|
| false, // user gesture
|
| - MEDIA_OPEN_DEVICE_PEPPER_ONLY, controls, sc);
|
| + MEDIA_OPEN_DEVICE_PEPPER_ONLY, controls, salt);
|
|
|
| const std::string& label = AddRequest(request);
|
| // Post a task and handle the request asynchronously. The reason is that the
|
| @@ -840,7 +835,7 @@ void MediaStreamManager::OpenDevice(MediaStreamRequester* requester,
|
|
|
| bool MediaStreamManager::TranslateSourceIdToDeviceId(
|
| MediaStreamType stream_type,
|
| - const ResourceContext::SaltCallback& sc,
|
| + const std::string& salt,
|
| const url::Origin& security_origin,
|
| const std::string& source_id,
|
| std::string* device_id) const {
|
| @@ -859,7 +854,7 @@ bool MediaStreamManager::TranslateSourceIdToDeviceId(
|
| return false;
|
|
|
| for (const StreamDeviceInfo& device_info : cache->devices) {
|
| - if (DoesMediaDeviceIDMatchHMAC(sc, security_origin, source_id,
|
| + if (DoesMediaDeviceIDMatchHMAC(salt, security_origin, source_id,
|
| device_info.device.id)) {
|
| *device_id = device_info.device.id;
|
| return true;
|
| @@ -902,7 +897,7 @@ void MediaStreamManager::StopRemovedDevice(const MediaStreamDevice& device) {
|
| const DeviceRequest* request = labeled_request.second;
|
| for (const StreamDeviceInfo& device_info : request->devices) {
|
| const std::string source_id = GetHMACForMediaDeviceID(
|
| - request->salt_callback, request->security_origin, device.id);
|
| + request->salt, request->security_origin, device.id);
|
| if (device_info.device.id == source_id &&
|
| device_info.device.type == device.type) {
|
| session_ids.push_back(device_info.session_id);
|
| @@ -991,20 +986,19 @@ void MediaStreamManager::StartMonitoringOnUIThread() {
|
|
|
| // Pick the first valid (translatable) device ID from lists of required
|
| // and optional IDs.
|
| -bool MediaStreamManager::PickDeviceId(
|
| - MediaStreamType type,
|
| - const ResourceContext::SaltCallback& salt_callback,
|
| - const url::Origin& security_origin,
|
| - const TrackControls& controls,
|
| - std::string* device_id) const {
|
| +bool MediaStreamManager::PickDeviceId(MediaStreamType type,
|
| + const std::string& salt,
|
| + const url::Origin& security_origin,
|
| + const TrackControls& controls,
|
| + std::string* device_id) const {
|
| if (!controls.device_ids.empty()) {
|
| if (controls.device_ids.size() > 1) {
|
| LOG(ERROR) << "Only one required device ID is supported";
|
| return false;
|
| }
|
| const std::string& candidate_id = controls.device_ids[0];
|
| - if (!TranslateSourceIdToDeviceId(type, salt_callback, security_origin,
|
| - candidate_id, device_id)) {
|
| + if (!TranslateSourceIdToDeviceId(type, salt, security_origin, candidate_id,
|
| + device_id)) {
|
| LOG(WARNING) << "Invalid mandatory capture ID = " << candidate_id;
|
| return false;
|
| }
|
| @@ -1012,8 +1006,8 @@ bool MediaStreamManager::PickDeviceId(
|
| }
|
| // We don't have a required ID. Look at the alternates.
|
| for (const std::string& candidate_id : controls.alternate_device_ids) {
|
| - if (TranslateSourceIdToDeviceId(type, salt_callback, security_origin,
|
| - candidate_id, device_id)) {
|
| + if (TranslateSourceIdToDeviceId(type, salt, security_origin, candidate_id,
|
| + device_id)) {
|
| return true;
|
| } else {
|
| LOG(WARNING) << "Invalid optional capture ID = " << candidate_id;
|
| @@ -1027,13 +1021,11 @@ bool MediaStreamManager::GetRequestedDeviceCaptureId(
|
| MediaStreamType type,
|
| std::string* device_id) const {
|
| if (type == MEDIA_DEVICE_AUDIO_CAPTURE) {
|
| - return PickDeviceId(type, request->salt_callback, request->security_origin,
|
| - request->controls.audio,
|
| - device_id);
|
| + return PickDeviceId(type, request->salt, request->security_origin,
|
| + request->controls.audio, device_id);
|
| } else if (type == MEDIA_DEVICE_VIDEO_CAPTURE) {
|
| - return PickDeviceId(type, request->salt_callback, request->security_origin,
|
| - request->controls.video,
|
| - device_id);
|
| + return PickDeviceId(type, request->salt, request->security_origin,
|
| + request->controls.video, device_id);
|
| } else {
|
| NOTREACHED();
|
| }
|
| @@ -1046,7 +1038,7 @@ void MediaStreamManager::TranslateDeviceIdToSourceId(
|
| if (request->audio_type() == MEDIA_DEVICE_AUDIO_CAPTURE ||
|
| request->audio_type() == MEDIA_DEVICE_AUDIO_OUTPUT ||
|
| request->video_type() == MEDIA_DEVICE_VIDEO_CAPTURE) {
|
| - device->id = GetHMACForMediaDeviceID(request->salt_callback,
|
| + device->id = GetHMACForMediaDeviceID(request->salt,
|
| request->security_origin, device->id);
|
| }
|
| }
|
| @@ -1388,9 +1380,8 @@ bool MediaStreamManager::FindExistingRequestedDeviceInfo(
|
| DCHECK(existing_device_info);
|
| DCHECK(existing_request_state);
|
|
|
| - std::string source_id =
|
| - GetHMACForMediaDeviceID(new_request.salt_callback,
|
| - new_request.security_origin, new_device_info.id);
|
| + std::string source_id = GetHMACForMediaDeviceID(
|
| + new_request.salt, new_request.security_origin, new_device_info.id);
|
|
|
| for (const LabeledDeviceRequest& labeled_request : requests_) {
|
| const DeviceRequest* request = labeled_request.second;
|
| @@ -2133,7 +2124,7 @@ void MediaStreamManager::NotifyDeviceChangeSubscribers(MediaStreamType type) {
|
|
|
| // static
|
| std::string MediaStreamManager::GetHMACForMediaDeviceID(
|
| - const ResourceContext::SaltCallback& sc,
|
| + const std::string& salt,
|
| const url::Origin& security_origin,
|
| const std::string& raw_unique_id) {
|
| DCHECK(!raw_unique_id.empty());
|
| @@ -2145,7 +2136,6 @@ std::string MediaStreamManager::GetHMACForMediaDeviceID(
|
| crypto::HMAC hmac(crypto::HMAC::SHA256);
|
| const size_t digest_length = hmac.DigestLength();
|
| std::vector<uint8_t> digest(digest_length);
|
| - std::string salt = sc.Run();
|
| bool result = hmac.Init(security_origin.Serialize()) &&
|
| hmac.Sign(raw_unique_id + salt, &digest[0], digest.size());
|
| DCHECK(result);
|
| @@ -2154,13 +2144,13 @@ std::string MediaStreamManager::GetHMACForMediaDeviceID(
|
|
|
| // static
|
| bool MediaStreamManager::DoesMediaDeviceIDMatchHMAC(
|
| - const ResourceContext::SaltCallback& sc,
|
| + const std::string& salt,
|
| const url::Origin& security_origin,
|
| const std::string& device_guid,
|
| const std::string& raw_unique_id) {
|
| DCHECK(!raw_unique_id.empty());
|
| std::string guid_from_raw_device_id =
|
| - GetHMACForMediaDeviceID(sc, security_origin, raw_unique_id);
|
| + GetHMACForMediaDeviceID(salt, security_origin, raw_unique_id);
|
| return guid_from_raw_device_id == device_guid;
|
| }
|
|
|
|
|