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

Unified Diff: content/browser/renderer_host/media/media_stream_manager.cc

Issue 1987643002: Make default media device ID salts random by default (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: change return type from const string to string as it makes no difference Created 4 years, 6 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 side-by-side diff with in-line comments
Download patch
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;
}

Powered by Google App Engine
This is Rietveld 408576698