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

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

Issue 2684233005: Revert of Use spec-compliant algorithm to select video devices in getUserMedia. (Closed)
Patch Set: Created 3 years, 10 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') | content/renderer/render_frame_impl.cc » ('j') | 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 "content/renderer/media/user_media_client_impl.h" 5 #include "content/renderer/media/user_media_client_impl.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <memory> 9 #include <memory>
10 #include <utility> 10 #include <utility>
(...skipping 27 matching lines...) Expand all
38 38
39 blink::WebMediaConstraints CreateDefaultConstraints() { 39 blink::WebMediaConstraints CreateDefaultConstraints() {
40 MockConstraintFactory factory; 40 MockConstraintFactory factory;
41 factory.AddAdvanced(); 41 factory.AddAdvanced();
42 return factory.CreateWebMediaConstraints(); 42 return factory.CreateWebMediaConstraints();
43 } 43 }
44 44
45 blink::WebMediaConstraints CreateDeviceConstraints( 45 blink::WebMediaConstraints CreateDeviceConstraints(
46 const char* basic_exact_value, 46 const char* basic_exact_value,
47 const char* basic_ideal_value = nullptr, 47 const char* basic_ideal_value = nullptr,
48 const char* advanced_exact_value = nullptr) { 48 const char* advanced_exact_value = nullptr,
49 const char* advanced_ideal_value = nullptr) {
49 MockConstraintFactory factory; 50 MockConstraintFactory factory;
50 blink::WebMediaTrackConstraintSet basic; 51 blink::WebMediaTrackConstraintSet basic;
51 if (basic_exact_value) { 52 if (basic_exact_value) {
52 factory.basic().deviceId.setExact( 53 factory.basic().deviceId.setExact(
53 blink::WebString::fromUTF8(basic_exact_value)); 54 blink::WebString::fromUTF8(basic_exact_value));
54 } 55 }
55 if (basic_ideal_value) { 56 if (basic_ideal_value) {
56 blink::WebString value = blink::WebString::fromUTF8(basic_ideal_value); 57 blink::WebString value = blink::WebString::fromUTF8(basic_ideal_value);
57 factory.basic().deviceId.setIdeal( 58 factory.basic().deviceId.setIdeal(
58 blink::WebVector<blink::WebString>(&value, 1)); 59 blink::WebVector<blink::WebString>(&value, 1));
59 } 60 }
60 61
61 auto& advanced = factory.AddAdvanced(); 62 auto& advanced = factory.AddAdvanced();
62 if (advanced_exact_value) { 63 if (advanced_exact_value) {
63 blink::WebString value = blink::WebString::fromUTF8(advanced_exact_value); 64 blink::WebString value = blink::WebString::fromUTF8(advanced_exact_value);
64 advanced.deviceId.setExact(value); 65 advanced.deviceId.setExact(value);
65 } 66 }
66 67 if (advanced_ideal_value) {
67 return factory.CreateWebMediaConstraints(); 68 blink::WebString value = blink::WebString::fromUTF8(advanced_ideal_value);
68 } 69 advanced.deviceId.setIdeal(blink::WebVector<blink::WebString>(&value, 1));
69
70 blink::WebMediaConstraints CreateFacingModeConstraints(
71 const char* basic_exact_value,
72 const char* basic_ideal_value = nullptr,
73 const char* advanced_exact_value = nullptr) {
74 MockConstraintFactory factory;
75 if (basic_exact_value) {
76 factory.basic().facingMode.setExact(
77 blink::WebString::fromUTF8(basic_exact_value));
78 }
79 if (basic_ideal_value) {
80 blink::WebString value = blink::WebString::fromUTF8(basic_ideal_value);
81 factory.basic().deviceId.setIdeal(
82 blink::WebVector<blink::WebString>(&value, 1));
83 }
84
85 auto& advanced = factory.AddAdvanced();
86 if (advanced_exact_value) {
87 blink::WebString value = blink::WebString::fromUTF8(advanced_exact_value);
88 advanced.deviceId.setExact(value);
89 } 70 }
90 71
91 return factory.CreateWebMediaConstraints(); 72 return factory.CreateWebMediaConstraints();
92 } 73 }
93 74
94 class MockMediaStreamVideoCapturerSource : public MockMediaStreamVideoSource { 75 class MockMediaStreamVideoCapturerSource : public MockMediaStreamVideoSource {
95 public: 76 public:
96 MockMediaStreamVideoCapturerSource( 77 MockMediaStreamVideoCapturerSource(
97 const StreamDeviceInfo& device, 78 const StreamDeviceInfo& device,
98 const SourceStoppedCallback& stop_callback, 79 const SourceStoppedCallback& stop_callback,
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 result[MEDIA_DEVICE_TYPE_VIDEO_INPUT].push_back( 113 result[MEDIA_DEVICE_TYPE_VIDEO_INPUT].push_back(
133 MediaDeviceInfo(kFakeVideoInputDeviceId2, "Fake Video Input 2", "")); 114 MediaDeviceInfo(kFakeVideoInputDeviceId2, "Fake Video Input 2", ""));
134 } 115 }
135 if (request_audio_output) { 116 if (request_audio_output) {
136 result[MEDIA_DEVICE_TYPE_AUDIO_OUTPUT].push_back(MediaDeviceInfo( 117 result[MEDIA_DEVICE_TYPE_AUDIO_OUTPUT].push_back(MediaDeviceInfo(
137 kFakeAudioOutputDeviceId1, "Fake Audio Input 1", "fake_group 1")); 118 kFakeAudioOutputDeviceId1, "Fake Audio Input 1", "fake_group 1"));
138 } 119 }
139 callback.Run(result); 120 callback.Run(result);
140 } 121 }
141 122
142 void GetVideoInputCapabilities(
143 const url::Origin& security_origin,
144 const GetVideoInputCapabilitiesCallback& client_callback) override {
145 ::mojom::VideoInputDeviceCapabilitiesPtr device =
146 ::mojom::VideoInputDeviceCapabilities::New();
147 device->device_id = kFakeVideoInputDeviceId1;
148 device->facing_mode = ::mojom::FacingMode::USER;
149 device->formats.push_back(media::VideoCaptureFormat(
150 gfx::Size(640, 480), 30.0f, media::PIXEL_FORMAT_I420));
151 std::vector<::mojom::VideoInputDeviceCapabilitiesPtr> result;
152 result.push_back(std::move(device));
153
154 device = ::mojom::VideoInputDeviceCapabilities::New();
155 device->device_id = kFakeVideoInputDeviceId2;
156 device->facing_mode = ::mojom::FacingMode::ENVIRONMENT;
157 device->formats.push_back(media::VideoCaptureFormat(
158 gfx::Size(640, 480), 30.0f, media::PIXEL_FORMAT_I420));
159 result.push_back(std::move(device));
160
161 client_callback.Run(std::move(result));
162 }
163
164 MOCK_METHOD3(SubscribeDeviceChangeNotifications, 123 MOCK_METHOD3(SubscribeDeviceChangeNotifications,
165 void(MediaDeviceType type, 124 void(MediaDeviceType type,
166 uint32_t subscription_id, 125 uint32_t subscription_id,
167 const url::Origin& security_origin)); 126 const url::Origin& security_origin));
168 MOCK_METHOD2(UnsubscribeDeviceChangeNotifications, 127 MOCK_METHOD2(UnsubscribeDeviceChangeNotifications,
169 void(MediaDeviceType type, uint32_t subscription_id)); 128 void(MediaDeviceType type, uint32_t subscription_id));
129 MOCK_METHOD2(GetVideoInputCapabilities,
130 void(const url::Origin& security_origin,
131 const GetVideoInputCapabilitiesCallback& client_callback));
170 }; 132 };
171 133
172 class UserMediaClientImplUnderTest : public UserMediaClientImpl { 134 class UserMediaClientImplUnderTest : public UserMediaClientImpl {
173 public: 135 public:
174 enum RequestState { 136 enum RequestState {
175 REQUEST_NOT_STARTED, 137 REQUEST_NOT_STARTED,
176 REQUEST_NOT_COMPLETE, 138 REQUEST_NOT_COMPLETE,
177 REQUEST_SUCCEEDED, 139 REQUEST_SUCCEEDED,
178 REQUEST_FAILED, 140 REQUEST_FAILED,
179 }; 141 };
180 142
181 UserMediaClientImplUnderTest( 143 UserMediaClientImplUnderTest(
182 PeerConnectionDependencyFactory* dependency_factory, 144 PeerConnectionDependencyFactory* dependency_factory,
183 std::unique_ptr<MediaStreamDispatcher> media_stream_dispatcher) 145 std::unique_ptr<MediaStreamDispatcher> media_stream_dispatcher)
184 : UserMediaClientImpl(nullptr, 146 : UserMediaClientImpl(NULL,
185 dependency_factory, 147 dependency_factory,
186 std::move(media_stream_dispatcher), 148 std::move(media_stream_dispatcher)),
187 base::ThreadTaskRunnerHandle::Get()),
188 state_(REQUEST_NOT_STARTED), 149 state_(REQUEST_NOT_STARTED),
189 result_(NUM_MEDIA_REQUEST_RESULTS), 150 result_(NUM_MEDIA_REQUEST_RESULTS),
190 result_name_(""), 151 result_name_(""),
191 factory_(dependency_factory), 152 factory_(dependency_factory),
192 create_source_that_fails_(false), 153 create_source_that_fails_(false),
193 video_source_(nullptr) {} 154 video_source_(NULL) {}
194 155
195 void RequestUserMediaForTest( 156 void RequestUserMediaForTest(
196 const blink::WebUserMediaRequest& user_media_request) { 157 const blink::WebUserMediaRequest& user_media_request) {
197 state_ = REQUEST_NOT_COMPLETE; 158 state_ = REQUEST_NOT_COMPLETE;
198 requestUserMedia(user_media_request); 159 requestUserMedia(user_media_request);
199 base::RunLoop().RunUntilIdle(); 160 base::RunLoop().RunUntilIdle();
200 } 161 }
201 162
202 void RequestUserMediaForTest() { 163 void RequestUserMediaForTest() {
203 blink::WebUserMediaRequest user_media_request = 164 blink::WebUserMediaRequest user_media_request =
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
422 null_constraints); 383 null_constraints);
423 user_media_client_impl_->RequestUserMediaForTest(request); 384 user_media_client_impl_->RequestUserMediaForTest(request);
424 bool result = 385 bool result =
425 user_media_client_impl_->UserMediaRequestHasAutomaticDeviceSelection( 386 user_media_client_impl_->UserMediaRequestHasAutomaticDeviceSelection(
426 ms_dispatcher_->audio_input_request_id()); 387 ms_dispatcher_->audio_input_request_id());
427 user_media_client_impl_->DeleteRequest( 388 user_media_client_impl_->DeleteRequest(
428 ms_dispatcher_->audio_input_request_id()); 389 ms_dispatcher_->audio_input_request_id());
429 return result; 390 return result;
430 } 391 }
431 392
432 void TestValidRequestWithConstraints( 393 void TestValidRequestWithDeviceConstraints(
433 const blink::WebMediaConstraints& audio_constraints, 394 const blink::WebMediaConstraints& audio_constraints,
434 const blink::WebMediaConstraints& video_constraints, 395 const blink::WebMediaConstraints& video_constraints,
435 const std::string& expected_audio_device_id, 396 const std::string& expected_audio_device_id,
436 const std::string& expected_video_device_id) { 397 const std::string& expected_video_device_id) {
437 DCHECK(!audio_constraints.isNull()); 398 DCHECK(!audio_constraints.isNull());
438 DCHECK(!video_constraints.isNull()); 399 DCHECK(!video_constraints.isNull());
439 blink::WebUserMediaRequest request = 400 blink::WebUserMediaRequest request =
440 blink::WebUserMediaRequest::createForTesting(audio_constraints, 401 blink::WebUserMediaRequest::createForTesting(audio_constraints,
441 video_constraints); 402 video_constraints);
442 user_media_client_impl_->RequestUserMediaForTest(request); 403 user_media_client_impl_->RequestUserMediaForTest(request);
(...skipping 427 matching lines...) Expand 10 before | Expand all | Expand 10 after
870 user_media_client_impl_->RequestUserMediaForTest(request); 831 user_media_client_impl_->RequestUserMediaForTest(request);
871 EXPECT_EQ(UserMediaClientImplUnderTest::REQUEST_FAILED, 832 EXPECT_EQ(UserMediaClientImplUnderTest::REQUEST_FAILED,
872 user_media_client_impl_->request_state()); 833 user_media_client_impl_->request_state());
873 } 834 }
874 835
875 TEST_F(UserMediaClientImplTest, CreateWithMandatoryValidDeviceIds) { 836 TEST_F(UserMediaClientImplTest, CreateWithMandatoryValidDeviceIds) {
876 blink::WebMediaConstraints audio_constraints = 837 blink::WebMediaConstraints audio_constraints =
877 CreateDeviceConstraints(kFakeAudioInputDeviceId1); 838 CreateDeviceConstraints(kFakeAudioInputDeviceId1);
878 blink::WebMediaConstraints video_constraints = 839 blink::WebMediaConstraints video_constraints =
879 CreateDeviceConstraints(kFakeVideoInputDeviceId1); 840 CreateDeviceConstraints(kFakeVideoInputDeviceId1);
880 TestValidRequestWithConstraints(audio_constraints, video_constraints, 841 TestValidRequestWithDeviceConstraints(audio_constraints, video_constraints,
881 kFakeAudioInputDeviceId1, 842 kFakeAudioInputDeviceId1,
882 kFakeVideoInputDeviceId1); 843 kFakeVideoInputDeviceId1);
883 } 844 }
884 845
885 TEST_F(UserMediaClientImplTest, CreateWithBasicIdealValidDeviceId) { 846 TEST_F(UserMediaClientImplTest, CreateWithBasicIdealValidDeviceId) {
886 blink::WebMediaConstraints audio_constraints = 847 blink::WebMediaConstraints audio_constraints =
887 CreateDeviceConstraints(nullptr, kFakeAudioInputDeviceId1); 848 CreateDeviceConstraints(nullptr, kFakeAudioInputDeviceId1);
888 blink::WebMediaConstraints video_constraints = 849 blink::WebMediaConstraints video_constraints =
889 CreateDeviceConstraints(nullptr, kFakeVideoInputDeviceId1); 850 CreateDeviceConstraints(nullptr, kFakeVideoInputDeviceId1);
890 TestValidRequestWithConstraints(audio_constraints, video_constraints, 851 TestValidRequestWithDeviceConstraints(audio_constraints, video_constraints,
891 kFakeAudioInputDeviceId1, 852 kFakeAudioInputDeviceId1,
892 kFakeVideoInputDeviceId1); 853 kFakeVideoInputDeviceId1);
893 } 854 }
894 855
895 TEST_F(UserMediaClientImplTest, CreateWithAdvancedExactValidDeviceId) { 856 TEST_F(UserMediaClientImplTest, CreateWithAdvancedExactValidDeviceId) {
896 blink::WebMediaConstraints audio_constraints = 857 blink::WebMediaConstraints audio_constraints =
897 CreateDeviceConstraints(nullptr, nullptr, kFakeAudioInputDeviceId1); 858 CreateDeviceConstraints(nullptr, nullptr, kFakeAudioInputDeviceId1);
898 blink::WebMediaConstraints video_constraints = CreateDeviceConstraints( 859 blink::WebMediaConstraints video_constraints = CreateDeviceConstraints(
899 nullptr, nullptr, kFakeVideoInputDeviceId1); 860 nullptr, nullptr, kFakeVideoInputDeviceId1);
900 TestValidRequestWithConstraints(audio_constraints, video_constraints, 861 TestValidRequestWithDeviceConstraints(audio_constraints, video_constraints,
901 kFakeAudioInputDeviceId1, 862 kFakeAudioInputDeviceId1,
902 kFakeVideoInputDeviceId1); 863 kFakeVideoInputDeviceId1);
864 }
865
866 TEST_F(UserMediaClientImplTest, CreateWithAdvancedIdealValidDeviceId) {
867 blink::WebMediaConstraints audio_constraints = CreateDeviceConstraints(
868 nullptr, nullptr, nullptr, kFakeAudioInputDeviceId1);
869 blink::WebMediaConstraints video_constraints = CreateDeviceConstraints(
870 nullptr, nullptr, nullptr, kFakeVideoInputDeviceId1);
871 TestValidRequestWithDeviceConstraints(audio_constraints, video_constraints,
872 kFakeAudioInputDeviceId1,
873 kFakeVideoInputDeviceId1);
903 } 874 }
904 875
905 TEST_F(UserMediaClientImplTest, CreateWithAllOptionalInvalidDeviceId) { 876 TEST_F(UserMediaClientImplTest, CreateWithAllOptionalInvalidDeviceId) {
906 blink::WebMediaConstraints audio_constraints = 877 blink::WebMediaConstraints audio_constraints = CreateDeviceConstraints(
907 CreateDeviceConstraints(nullptr, kInvalidDeviceId, kInvalidDeviceId); 878 nullptr, kInvalidDeviceId, kInvalidDeviceId, kInvalidDeviceId);
908 blink::WebMediaConstraints video_constraints = 879 blink::WebMediaConstraints video_constraints = CreateDeviceConstraints(
909 CreateDeviceConstraints(nullptr, kInvalidDeviceId, kInvalidDeviceId); 880 nullptr, kInvalidDeviceId, kInvalidDeviceId, kInvalidDeviceId);
910 // MockMediaStreamDispatcher uses empty string as default audio device ID. 881 // MockMediaStreamDispatcher uses empty string as default device ID.
911 // MockMediaDevicesDispatcher uses the first device in the enumeration as 882 TestValidRequestWithDeviceConstraints(audio_constraints, video_constraints,
912 // default video device ID. 883 std::string(), std::string());
913 TestValidRequestWithConstraints(audio_constraints, video_constraints,
914 std::string(), kFakeVideoInputDeviceId1);
915 } 884 }
916 885
917 TEST_F(UserMediaClientImplTest, CreateWithFacingModeUser) { 886 TEST_F(UserMediaClientImplTest,
918 blink::WebMediaConstraints audio_constraints = 887 CreateWithAdvancedIdealValidOtherOptionalInvalidDeviceId) {
919 CreateDeviceConstraints(kFakeAudioInputDeviceId1); 888 blink::WebMediaConstraints audio_constraints = CreateDeviceConstraints(
920 blink::WebMediaConstraints video_constraints = 889 nullptr, kInvalidDeviceId, kInvalidDeviceId, kFakeAudioInputDeviceId1);
921 CreateFacingModeConstraints("user"); 890 blink::WebMediaConstraints video_constraints = CreateDeviceConstraints(
922 // kFakeVideoInputDeviceId1 has user facing mode. 891 nullptr, kInvalidDeviceId, kInvalidDeviceId, kFakeVideoInputDeviceId1);
923 TestValidRequestWithConstraints(audio_constraints, video_constraints, 892 TestValidRequestWithDeviceConstraints(audio_constraints, video_constraints,
924 kFakeAudioInputDeviceId1, 893 kFakeAudioInputDeviceId1,
925 kFakeVideoInputDeviceId1); 894 kFakeVideoInputDeviceId1);
926 }
927
928 TEST_F(UserMediaClientImplTest, CreateWithFacingModeEnvironment) {
929 blink::WebMediaConstraints audio_constraints =
930 CreateDeviceConstraints(kFakeAudioInputDeviceId1);
931 blink::WebMediaConstraints video_constraints =
932 CreateFacingModeConstraints("environment");
933 // kFakeVideoInputDeviceId2 has environment facing mode.
934 TestValidRequestWithConstraints(audio_constraints, video_constraints,
935 kFakeAudioInputDeviceId1,
936 kFakeVideoInputDeviceId2);
937 } 895 }
938 896
939 } // namespace content 897 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/media/user_media_client_impl.cc ('k') | content/renderer/render_frame_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698