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

Side by Side Diff: content/renderer/media/user_media_client_impl_unittest.cc

Issue 562643003: Implement WebUserMediaClient::requestSources (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Code review. Created 6 years, 3 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 unified diff | Download patch
« no previous file with comments | « content/renderer/media/user_media_client_impl.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "base/memory/scoped_ptr.h" 5 #include "base/memory/scoped_ptr.h"
6 #include "base/message_loop/message_loop.h" 6 #include "base/message_loop/message_loop.h"
7 #include "base/strings/utf_string_conversions.h" 7 #include "base/strings/utf_string_conversions.h"
8 #include "content/child/child_process.h" 8 #include "content/child/child_process.h"
9 #include "content/renderer/media/media_stream.h" 9 #include "content/renderer/media/media_stream.h"
10 #include "content/renderer/media/media_stream_track.h" 10 #include "content/renderer/media/media_stream_track.h"
11 #include "content/renderer/media/mock_media_stream_dispatcher.h" 11 #include "content/renderer/media/mock_media_stream_dispatcher.h"
12 #include "content/renderer/media/mock_media_stream_video_source.h" 12 #include "content/renderer/media/mock_media_stream_video_source.h"
13 #include "content/renderer/media/user_media_client_impl.h" 13 #include "content/renderer/media/user_media_client_impl.h"
14 #include "content/renderer/media/webrtc/mock_peer_connection_dependency_factory. h" 14 #include "content/renderer/media/webrtc/mock_peer_connection_dependency_factory. h"
15 #include "testing/gtest/include/gtest/gtest.h" 15 #include "testing/gtest/include/gtest/gtest.h"
16 #include "third_party/WebKit/public/platform/WebMediaDeviceInfo.h" 16 #include "third_party/WebKit/public/platform/WebMediaDeviceInfo.h"
17 #include "third_party/WebKit/public/platform/WebMediaStream.h" 17 #include "third_party/WebKit/public/platform/WebMediaStream.h"
18 #include "third_party/WebKit/public/platform/WebMediaStreamSource.h" 18 #include "third_party/WebKit/public/platform/WebMediaStreamSource.h"
19 #include "third_party/WebKit/public/platform/WebMediaStreamTrack.h" 19 #include "third_party/WebKit/public/platform/WebMediaStreamTrack.h"
20 #include "third_party/WebKit/public/platform/WebMediaStreamTrackSourcesRequest.h "
20 #include "third_party/WebKit/public/platform/WebString.h" 21 #include "third_party/WebKit/public/platform/WebString.h"
21 #include "third_party/WebKit/public/platform/WebVector.h" 22 #include "third_party/WebKit/public/platform/WebVector.h"
22 #include "third_party/WebKit/public/web/WebHeap.h" 23 #include "third_party/WebKit/public/web/WebHeap.h"
23 24
24 namespace content { 25 namespace content {
25 26
26 class MockMediaStreamVideoCapturerSource : public MockMediaStreamVideoSource { 27 class MockMediaStreamVideoCapturerSource : public MockMediaStreamVideoSource {
27 public: 28 public:
28 MockMediaStreamVideoCapturerSource( 29 MockMediaStreamVideoCapturerSource(
29 const StreamDeviceInfo& device, 30 const StreamDeviceInfo& device,
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
61 state_ = REQUEST_NOT_COMPLETE; 62 state_ = REQUEST_NOT_COMPLETE;
62 requestUserMedia(user_media_request); 63 requestUserMedia(user_media_request);
63 } 64 }
64 65
65 void RequestMediaDevices() { 66 void RequestMediaDevices() {
66 blink::WebMediaDevicesRequest media_devices_request; 67 blink::WebMediaDevicesRequest media_devices_request;
67 state_ = REQUEST_NOT_COMPLETE; 68 state_ = REQUEST_NOT_COMPLETE;
68 requestMediaDevices(media_devices_request); 69 requestMediaDevices(media_devices_request);
69 } 70 }
70 71
72 void RequestSources() {
73 blink::WebMediaStreamTrackSourcesRequest sources_request;
74 state_ = REQUEST_NOT_COMPLETE;
75 requestSources(sources_request);
76 }
77
71 virtual void GetUserMediaRequestSucceeded( 78 virtual void GetUserMediaRequestSucceeded(
72 const blink::WebMediaStream& stream, 79 const blink::WebMediaStream& stream,
73 blink::WebUserMediaRequest* request_info) OVERRIDE { 80 blink::WebUserMediaRequest* request_info) OVERRIDE {
74 last_generated_stream_ = stream; 81 last_generated_stream_ = stream;
75 state_ = REQUEST_SUCCEEDED; 82 state_ = REQUEST_SUCCEEDED;
76 } 83 }
77 84
78 virtual void GetUserMediaRequestFailed( 85 virtual void GetUserMediaRequestFailed(
79 blink::WebUserMediaRequest* request_info, 86 blink::WebUserMediaRequest* request_info,
80 content::MediaStreamRequestResult result) OVERRIDE { 87 content::MediaStreamRequestResult result) OVERRIDE {
(...skipping 12 matching lines...) Expand all
93 result_name_ = result_name; 100 result_name_ = result_name;
94 } 101 }
95 102
96 virtual void EnumerateDevicesSucceded( 103 virtual void EnumerateDevicesSucceded(
97 blink::WebMediaDevicesRequest* request, 104 blink::WebMediaDevicesRequest* request,
98 blink::WebVector<blink::WebMediaDeviceInfo>& devices) OVERRIDE { 105 blink::WebVector<blink::WebMediaDeviceInfo>& devices) OVERRIDE {
99 state_ = REQUEST_SUCCEEDED; 106 state_ = REQUEST_SUCCEEDED;
100 last_devices_ = devices; 107 last_devices_ = devices;
101 } 108 }
102 109
110 virtual void EnumerateSourcesSucceded(
111 blink::WebMediaStreamTrackSourcesRequest* request,
112 blink::WebVector<blink::WebSourceInfo>& sources) OVERRIDE {
113 state_ = REQUEST_SUCCEEDED;
114 last_sources_ = sources;
115 }
116
103 virtual MediaStreamVideoSource* CreateVideoSource( 117 virtual MediaStreamVideoSource* CreateVideoSource(
104 const StreamDeviceInfo& device, 118 const StreamDeviceInfo& device,
105 const MediaStreamSource::SourceStoppedCallback& stop_callback) OVERRIDE { 119 const MediaStreamSource::SourceStoppedCallback& stop_callback) OVERRIDE {
106 video_source_ = new MockMediaStreamVideoCapturerSource(device, 120 video_source_ = new MockMediaStreamVideoCapturerSource(device,
107 stop_callback, 121 stop_callback,
108 factory_); 122 factory_);
109 return video_source_; 123 return video_source_;
110 } 124 }
111 125
112 const blink::WebMediaStream& last_generated_stream() { 126 const blink::WebMediaStream& last_generated_stream() {
113 return last_generated_stream_; 127 return last_generated_stream_;
114 } 128 }
115 129
116 const blink::WebVector<blink::WebMediaDeviceInfo>& last_devices() { 130 const blink::WebVector<blink::WebMediaDeviceInfo>& last_devices() {
117 return last_devices_; 131 return last_devices_;
118 } 132 }
119 133
134 const blink::WebVector<blink::WebSourceInfo>& last_sources() {
135 return last_sources_;
136 }
137
120 void ClearLastGeneratedStream() { 138 void ClearLastGeneratedStream() {
121 last_generated_stream_.reset(); 139 last_generated_stream_.reset();
122 } 140 }
123 141
124 MockMediaStreamVideoCapturerSource* last_created_video_source() const { 142 MockMediaStreamVideoCapturerSource* last_created_video_source() const {
125 return video_source_; 143 return video_source_;
126 } 144 }
127 145
128 RequestState request_state() const { return state_; } 146 RequestState request_state() const { return state_; }
129 content::MediaStreamRequestResult error_reason() const { return result_; } 147 content::MediaStreamRequestResult error_reason() const { return result_; }
130 blink::WebString error_name() const { return result_name_; } 148 blink::WebString error_name() const { return result_name_; }
131 149
132 private: 150 private:
133 blink::WebMediaStream last_generated_stream_; 151 blink::WebMediaStream last_generated_stream_;
134 RequestState state_; 152 RequestState state_;
135 content::MediaStreamRequestResult result_; 153 content::MediaStreamRequestResult result_;
136 blink::WebString result_name_; 154 blink::WebString result_name_;
137 blink::WebVector<blink::WebMediaDeviceInfo> last_devices_; 155 blink::WebVector<blink::WebMediaDeviceInfo> last_devices_;
156 blink::WebVector<blink::WebSourceInfo> last_sources_;
138 PeerConnectionDependencyFactory* factory_; 157 PeerConnectionDependencyFactory* factory_;
139 MockMediaStreamVideoCapturerSource* video_source_; 158 MockMediaStreamVideoCapturerSource* video_source_;
140 }; 159 };
141 160
142 class UserMediaClientImplTest : public ::testing::Test { 161 class UserMediaClientImplTest : public ::testing::Test {
143 public: 162 public:
144 virtual void SetUp() { 163 virtual void SetUp() {
145 // Create our test object. 164 // Create our test object.
146 child_process_.reset(new ChildProcess()); 165 child_process_.reset(new ChildProcess());
147 dependency_factory_.reset(new MockPeerConnectionDependencyFactory()); 166 dependency_factory_.reset(new MockPeerConnectionDependencyFactory());
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
197 ms_dispatcher_->audio_input_request_id(), 216 ms_dispatcher_->audio_input_request_id(),
198 ms_dispatcher_->audio_input_array()); 217 ms_dispatcher_->audio_input_array());
199 used_media_impl_->OnDevicesEnumerated( 218 used_media_impl_->OnDevicesEnumerated(
200 ms_dispatcher_->audio_output_request_id(), 219 ms_dispatcher_->audio_output_request_id(),
201 ms_dispatcher_->audio_output_array()); 220 ms_dispatcher_->audio_output_array());
202 used_media_impl_->OnDevicesEnumerated( 221 used_media_impl_->OnDevicesEnumerated(
203 ms_dispatcher_->video_request_id(), 222 ms_dispatcher_->video_request_id(),
204 ms_dispatcher_->video_array()); 223 ms_dispatcher_->video_array());
205 } 224 }
206 225
226 void FakeMediaStreamDispatcherRequestSourcesComplete() {
227 used_media_impl_->OnDevicesEnumerated(
228 ms_dispatcher_->audio_input_request_id(),
229 ms_dispatcher_->audio_input_array());
230 used_media_impl_->OnDevicesEnumerated(
231 ms_dispatcher_->video_request_id(),
232 ms_dispatcher_->video_array());
233 }
234
207 void StartMockedVideoSource() { 235 void StartMockedVideoSource() {
208 MockMediaStreamVideoCapturerSource* video_source = 236 MockMediaStreamVideoCapturerSource* video_source =
209 used_media_impl_->last_created_video_source(); 237 used_media_impl_->last_created_video_source();
210 if (video_source->SourceHasAttemptedToStart()) 238 if (video_source->SourceHasAttemptedToStart())
211 video_source->StartMockedSource(); 239 video_source->StartMockedSource();
212 } 240 }
213 241
214 void FailToStartMockedVideoSource() { 242 void FailToStartMockedVideoSource() {
215 MockMediaStreamVideoCapturerSource* video_source = 243 MockMediaStreamVideoCapturerSource* video_source =
216 used_media_impl_->last_created_video_source(); 244 used_media_impl_->last_created_video_source();
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after
457 video_track->Stop(); 485 video_track->Stop();
458 EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter()); 486 EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter());
459 } 487 }
460 488
461 TEST_F(UserMediaClientImplTest, EnumerateMediaDevices) { 489 TEST_F(UserMediaClientImplTest, EnumerateMediaDevices) {
462 used_media_impl_->RequestMediaDevices(); 490 used_media_impl_->RequestMediaDevices();
463 FakeMediaStreamDispatcherRequestMediaDevicesComplete(); 491 FakeMediaStreamDispatcherRequestMediaDevicesComplete();
464 492
465 EXPECT_EQ(UserMediaClientImplUnderTest::REQUEST_SUCCEEDED, 493 EXPECT_EQ(UserMediaClientImplUnderTest::REQUEST_SUCCEEDED,
466 used_media_impl_->request_state()); 494 used_media_impl_->request_state());
495 EXPECT_EQ(static_cast<size_t>(5), used_media_impl_->last_devices().size());
467 496
468 // Audio input device with matched output ID. 497 // Audio input device with matched output ID.
469 EXPECT_FALSE(used_media_impl_->last_devices()[0].deviceId().isEmpty()); 498 const blink::WebMediaDeviceInfo* device =
499 &used_media_impl_->last_devices()[0];
500 EXPECT_FALSE(device->deviceId().isEmpty());
470 EXPECT_EQ(blink::WebMediaDeviceInfo::MediaDeviceKindAudioInput, 501 EXPECT_EQ(blink::WebMediaDeviceInfo::MediaDeviceKindAudioInput,
471 used_media_impl_->last_devices()[0].kind()); 502 device->kind());
472 EXPECT_FALSE(used_media_impl_->last_devices()[0].label().isEmpty()); 503 EXPECT_FALSE(device->label().isEmpty());
473 EXPECT_FALSE(used_media_impl_->last_devices()[0].groupId().isEmpty()); 504 EXPECT_FALSE(device->groupId().isEmpty());
474 505
475 // Audio input device without matched output ID. 506 // Audio input device without matched output ID.
476 EXPECT_FALSE(used_media_impl_->last_devices()[1].deviceId().isEmpty()); 507 device = &used_media_impl_->last_devices()[1];
508 EXPECT_FALSE(device->deviceId().isEmpty());
477 EXPECT_EQ(blink::WebMediaDeviceInfo::MediaDeviceKindAudioInput, 509 EXPECT_EQ(blink::WebMediaDeviceInfo::MediaDeviceKindAudioInput,
478 used_media_impl_->last_devices()[1].kind()); 510 device->kind());
479 EXPECT_FALSE(used_media_impl_->last_devices()[1].label().isEmpty()); 511 EXPECT_FALSE(device->label().isEmpty());
480 EXPECT_FALSE(used_media_impl_->last_devices()[1].groupId().isEmpty()); 512 EXPECT_FALSE(device->groupId().isEmpty());
481 513
482 // Video input device. 514 // Video input devices.
483 EXPECT_FALSE(used_media_impl_->last_devices()[2].deviceId().isEmpty()); 515 device = &used_media_impl_->last_devices()[2];
516 EXPECT_FALSE(device->deviceId().isEmpty());
484 EXPECT_EQ(blink::WebMediaDeviceInfo::MediaDeviceKindVideoInput, 517 EXPECT_EQ(blink::WebMediaDeviceInfo::MediaDeviceKindVideoInput,
485 used_media_impl_->last_devices()[2].kind()); 518 device->kind());
486 EXPECT_FALSE(used_media_impl_->last_devices()[2].label().isEmpty()); 519 EXPECT_FALSE(device->label().isEmpty());
487 EXPECT_TRUE(used_media_impl_->last_devices()[2].groupId().isEmpty()); 520 EXPECT_TRUE(device->groupId().isEmpty());
521
522 device = &used_media_impl_->last_devices()[3];
523 EXPECT_FALSE(device->deviceId().isEmpty());
524 EXPECT_EQ(blink::WebMediaDeviceInfo::MediaDeviceKindVideoInput,
525 device->kind());
526 EXPECT_FALSE(device->label().isEmpty());
527 EXPECT_TRUE(device->groupId().isEmpty());
488 528
489 // Audio output device. 529 // Audio output device.
490 EXPECT_FALSE(used_media_impl_->last_devices()[3].deviceId().isEmpty()); 530 device = &used_media_impl_->last_devices()[4];
531 EXPECT_FALSE(device->deviceId().isEmpty());
491 EXPECT_EQ(blink::WebMediaDeviceInfo::MediaDeviceKindAudioOutput, 532 EXPECT_EQ(blink::WebMediaDeviceInfo::MediaDeviceKindAudioOutput,
492 used_media_impl_->last_devices()[3].kind()); 533 device->kind());
493 EXPECT_FALSE(used_media_impl_->last_devices()[3].label().isEmpty()); 534 EXPECT_FALSE(device->label().isEmpty());
494 EXPECT_FALSE(used_media_impl_->last_devices()[3].groupId().isEmpty()); 535 EXPECT_FALSE(device->groupId().isEmpty());
495 536
496 // Verfify group IDs. 537 // Verfify group IDs.
497 EXPECT_TRUE(used_media_impl_->last_devices()[0].groupId().equals( 538 EXPECT_TRUE(used_media_impl_->last_devices()[0].groupId().equals(
498 used_media_impl_->last_devices()[3].groupId())); 539 used_media_impl_->last_devices()[4].groupId()));
499 EXPECT_FALSE(used_media_impl_->last_devices()[1].groupId().equals( 540 EXPECT_FALSE(used_media_impl_->last_devices()[1].groupId().equals(
500 used_media_impl_->last_devices()[3].groupId())); 541 used_media_impl_->last_devices()[4].groupId()));
542 }
543
544 TEST_F(UserMediaClientImplTest, EnumerateSources) {
545 used_media_impl_->RequestSources();
546 FakeMediaStreamDispatcherRequestSourcesComplete();
547
548 EXPECT_EQ(UserMediaClientImplUnderTest::REQUEST_SUCCEEDED,
549 used_media_impl_->request_state());
550 EXPECT_EQ(static_cast<size_t>(4), used_media_impl_->last_sources().size());
551
552 // Audio input devices.
553 const blink::WebSourceInfo* source = &used_media_impl_->last_sources()[0];
554 EXPECT_FALSE(source->id().isEmpty());
555 EXPECT_EQ(blink::WebSourceInfo::SourceKindAudio, source->kind());
556 EXPECT_FALSE(source->label().isEmpty());
557 EXPECT_EQ(blink::WebSourceInfo::VideoFacingModeNone, source->facing());
558
559 source = &used_media_impl_->last_sources()[1];
560 EXPECT_FALSE(source->id().isEmpty());
561 EXPECT_EQ(blink::WebSourceInfo::SourceKindAudio, source->kind());
562 EXPECT_FALSE(source->label().isEmpty());
563 EXPECT_EQ(blink::WebSourceInfo::VideoFacingModeNone, source->facing());
564
565 // Video input device user facing.
566 source = &used_media_impl_->last_sources()[2];
567 EXPECT_FALSE(source->id().isEmpty());
568 EXPECT_EQ(blink::WebSourceInfo::SourceKindVideo, source->kind());
569 EXPECT_FALSE(source->label().isEmpty());
570 EXPECT_EQ(blink::WebSourceInfo::VideoFacingModeUser, source->facing());
571
572 // Video input device environment facing.
573 source = &used_media_impl_->last_sources()[3];
574 EXPECT_FALSE(source->id().isEmpty());
575 EXPECT_EQ(blink::WebSourceInfo::SourceKindVideo, source->kind());
576 EXPECT_FALSE(source->label().isEmpty());
577 EXPECT_EQ(blink::WebSourceInfo::VideoFacingModeEnvironment, source->facing());
501 } 578 }
502 579
503 } // namespace content 580 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/media/user_media_client_impl.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698