Commit d7af8155 authored by guidou's avatar guidou Committed by Commit bot

Add new device ID unit tests to UserMediaClientImpl.

Also remove test-specific code path and other minor cleanups.

This CL is preparatory for the new spec-compliant MediaStream constraint processing.

BUG=657733

Review-Url: https://codereview.chromium.org/2550493003
Cr-Commit-Position: refs/heads/master@{#436320}
parent 36b0a346
...@@ -40,10 +40,10 @@ void MockMediaStreamDispatcher::GenerateStream( ...@@ -40,10 +40,10 @@ void MockMediaStreamDispatcher::GenerateStream(
video_array_.clear(); video_array_.clear();
if (controls.audio.requested) { if (controls.audio.requested) {
AddAudioInputDeviceToArray(false); AddAudioInputDeviceToArray(false, controls.audio.device_id);
} }
if (controls.video.requested) { if (controls.video.requested) {
AddVideoDeviceToArray(true); AddVideoDeviceToArray(true, controls.video.device_id);
} }
++request_stream_counter_; ++request_stream_counter_;
} }
...@@ -82,9 +82,10 @@ int MockMediaStreamDispatcher::audio_session_id(const std::string& label, ...@@ -82,9 +82,10 @@ int MockMediaStreamDispatcher::audio_session_id(const std::string& label,
} }
void MockMediaStreamDispatcher::AddAudioInputDeviceToArray( void MockMediaStreamDispatcher::AddAudioInputDeviceToArray(
bool matched_output) { bool matched_output,
const std::string& device_id) {
StreamDeviceInfo audio; StreamDeviceInfo audio;
audio.device.id = test_same_id_ ? "test_id" : "audio_input_device_id"; audio.device.id = test_same_id_ ? "test_id" : device_id;
audio.device.id = audio.device.id + base::IntToString(session_id_); audio.device.id = audio.device.id + base::IntToString(session_id_);
audio.device.name = "microphone"; audio.device.name = "microphone";
audio.device.type = MEDIA_DEVICE_AUDIO_CAPTURE; audio.device.type = MEDIA_DEVICE_AUDIO_CAPTURE;
...@@ -100,9 +101,11 @@ void MockMediaStreamDispatcher::AddAudioInputDeviceToArray( ...@@ -100,9 +101,11 @@ void MockMediaStreamDispatcher::AddAudioInputDeviceToArray(
audio_input_array_.push_back(audio); audio_input_array_.push_back(audio);
} }
void MockMediaStreamDispatcher::AddVideoDeviceToArray(bool facing_user) { void MockMediaStreamDispatcher::AddVideoDeviceToArray(
bool facing_user,
const std::string& device_id) {
StreamDeviceInfo video; StreamDeviceInfo video;
video.device.id = test_same_id_ ? "test_id" : "video_device_id"; video.device.id = test_same_id_ ? "test_id" : device_id;
video.device.id = video.device.id + base::IntToString(session_id_); video.device.id = video.device.id + base::IntToString(session_id_);
video.device.name = "usb video camera"; video.device.name = "usb video camera";
video.device.type = MEDIA_DEVICE_VIDEO_CAPTURE; video.device.type = MEDIA_DEVICE_VIDEO_CAPTURE;
......
...@@ -48,8 +48,9 @@ class MockMediaStreamDispatcher : public MediaStreamDispatcher { ...@@ -48,8 +48,9 @@ class MockMediaStreamDispatcher : public MediaStreamDispatcher {
const StreamDeviceInfoArray& video_array() const { return video_array_; } const StreamDeviceInfoArray& video_array() const { return video_array_; }
private: private:
void AddAudioInputDeviceToArray(bool matched_output); void AddAudioInputDeviceToArray(bool matched_output,
void AddVideoDeviceToArray(bool facing_user); const std::string& device_id);
void AddVideoDeviceToArray(bool facing_user, const std::string& device_id);
int audio_input_request_id_; int audio_input_request_id_;
base::WeakPtr<MediaStreamDispatcherEventHandler> event_handler_; base::WeakPtr<MediaStreamDispatcherEventHandler> event_handler_;
......
...@@ -240,6 +240,13 @@ void UserMediaClientImpl::requestUserMedia( ...@@ -240,6 +240,13 @@ void UserMediaClientImpl::requestUserMedia(
// webGetUserMedia. // webGetUserMedia.
UpdateWebRTCMethodCount(WEBKIT_GET_USER_MEDIA); UpdateWebRTCMethodCount(WEBKIT_GET_USER_MEDIA);
DCHECK(CalledOnValidThread()); DCHECK(CalledOnValidThread());
DCHECK(!user_media_request.isNull());
// ownerDocument may be null if we are in a test.
// In that case, it's OK to not check frame().
DCHECK(user_media_request.ownerDocument().isNull() ||
render_frame()->GetWebFrame() ==
static_cast<blink::WebFrame*>(
user_media_request.ownerDocument().frame()));
if (RenderThreadImpl::current()) { if (RenderThreadImpl::current()) {
RenderThreadImpl::current()->peer_connection_tracker()->TrackGetUserMedia( RenderThreadImpl::current()->peer_connection_tracker()->TrackGetUserMedia(
...@@ -249,61 +256,41 @@ void UserMediaClientImpl::requestUserMedia( ...@@ -249,61 +256,41 @@ void UserMediaClientImpl::requestUserMedia(
int request_id = g_next_request_id++; int request_id = g_next_request_id++;
std::unique_ptr<StreamControls> controls = base::MakeUnique<StreamControls>(); std::unique_ptr<StreamControls> controls = base::MakeUnique<StreamControls>();
// |user_media_request| can't be mocked. So in order to test at all we check bool enable_automatic_output_device_selection = false;
// if it isNull. bool request_audio_input_devices = false;
// TODO(guidou): Remove this test-specific code path. if (user_media_request.audio()) {
if (user_media_request.isNull()) { CopyConstraintsToTrackControls(user_media_request.audioConstraints(),
// We are in a test. &controls->audio,
controls->audio.requested = true; &request_audio_input_devices);
controls->video.requested = true; CopyHotwordAndLocalEchoToStreamControls(
user_media_request.audioConstraints(), controls.get());
// Check if this input device should be used to select a matching output
// device for audio rendering.
GetConstraintValueAsBoolean(
user_media_request.audioConstraints(),
&blink::WebMediaTrackConstraintSet::renderToAssociatedSink,
&enable_automatic_output_device_selection);
}
bool request_video_input_devices = false;
if (user_media_request.video()) {
CopyConstraintsToTrackControls(user_media_request.videoConstraints(),
&controls->video,
&request_video_input_devices);
}
url::Origin security_origin = user_media_request.getSecurityOrigin();
if (request_audio_input_devices || request_video_input_devices) {
GetMediaDevicesDispatcher()->EnumerateDevices(
request_audio_input_devices, request_video_input_devices,
false /* request_audio_output_devices */, security_origin,
base::Bind(&UserMediaClientImpl::SelectUserMediaDevice,
weak_factory_.GetWeakPtr(), request_id, user_media_request,
base::Passed(&controls),
enable_automatic_output_device_selection, security_origin));
} else {
FinalizeRequestUserMedia( FinalizeRequestUserMedia(
request_id, user_media_request, std::move(controls), request_id, user_media_request, std::move(controls),
false /* automatic_output_device_selection */, url::Origin()); enable_automatic_output_device_selection, security_origin);
} else {
// ownerDocument may be null if we are in a test.
// In that case, it's OK to not check frame().
DCHECK(user_media_request.ownerDocument().isNull() ||
render_frame()->GetWebFrame() ==
static_cast<blink::WebFrame*>(
user_media_request.ownerDocument().frame()));
bool enable_automatic_output_device_selection = false;
bool request_audio_input_devices = false;
if (user_media_request.audio()) {
CopyConstraintsToTrackControls(user_media_request.audioConstraints(),
&controls->audio,
&request_audio_input_devices);
CopyHotwordAndLocalEchoToStreamControls(
user_media_request.audioConstraints(), controls.get());
// Check if this input device should be used to select a matching output
// device for audio rendering.
GetConstraintValueAsBoolean(
user_media_request.audioConstraints(),
&blink::WebMediaTrackConstraintSet::renderToAssociatedSink,
&enable_automatic_output_device_selection);
}
bool request_video_input_devices = false;
if (user_media_request.video()) {
CopyConstraintsToTrackControls(user_media_request.videoConstraints(),
&controls->video,
&request_video_input_devices);
}
url::Origin security_origin = user_media_request.getSecurityOrigin();
if (request_audio_input_devices || request_video_input_devices) {
GetMediaDevicesDispatcher()->EnumerateDevices(
request_audio_input_devices, request_video_input_devices,
false /* request_audio_output_devices */, security_origin,
base::Bind(&UserMediaClientImpl::SelectUserMediaDevice,
weak_factory_.GetWeakPtr(), request_id, user_media_request,
base::Passed(&controls),
enable_automatic_output_device_selection,
security_origin));
} else {
FinalizeRequestUserMedia(
request_id, user_media_request, std::move(controls),
enable_automatic_output_device_selection, security_origin);
}
} }
} }
...@@ -445,29 +432,16 @@ void UserMediaClientImpl::OnStreamGenerated( ...@@ -445,29 +432,16 @@ void UserMediaClientImpl::OnStreamGenerated(
} }
request_info->generated = true; request_info->generated = true;
// WebUserMediaRequest don't have an implementation in unit tests. DCHECK(!request_info->request.isNull());
// Therefore we need to check for isNull here and initialize the
// constraints.
blink::WebUserMediaRequest* request = &(request_info->request);
blink::WebMediaConstraints audio_constraints;
blink::WebMediaConstraints video_constraints;
if (request->isNull()) {
audio_constraints.initialize();
video_constraints.initialize();
} else {
audio_constraints = request->audioConstraints();
video_constraints = request->videoConstraints();
}
blink::WebVector<blink::WebMediaStreamTrack> audio_track_vector( blink::WebVector<blink::WebMediaStreamTrack> audio_track_vector(
audio_array.size()); audio_array.size());
CreateAudioTracks(audio_array, audio_constraints, &audio_track_vector, CreateAudioTracks(audio_array, request_info->request.audioConstraints(),
request_info); &audio_track_vector, request_info);
blink::WebVector<blink::WebMediaStreamTrack> video_track_vector( blink::WebVector<blink::WebMediaStreamTrack> video_track_vector(
video_array.size()); video_array.size());
CreateVideoTracks(video_array, video_constraints, &video_track_vector, CreateVideoTracks(video_array, request_info->request.videoConstraints(),
request_info); &video_track_vector, request_info);
blink::WebString webkit_id = base::UTF8ToUTF16(label); blink::WebString webkit_id = base::UTF8ToUTF16(label);
blink::WebMediaStream* web_stream = &(request_info->web_stream); blink::WebMediaStream* web_stream = &(request_info->web_stream);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment