| OLD | NEW | 
|---|
| 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_impl.h" | 10 #include "content/renderer/media/media_stream_impl.h" | 
| 11 #include "content/renderer/media/media_stream_track.h" | 11 #include "content/renderer/media/media_stream_track.h" | 
| 12 #include "content/renderer/media/mock_media_stream_dispatcher.h" | 12 #include "content/renderer/media/mock_media_stream_dispatcher.h" | 
| 13 #include "content/renderer/media/mock_media_stream_video_source.h" | 13 #include "content/renderer/media/mock_media_stream_video_source.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" |  | 
| 17 #include "third_party/WebKit/public/platform/WebMediaStream.h" | 16 #include "third_party/WebKit/public/platform/WebMediaStream.h" | 
| 18 #include "third_party/WebKit/public/platform/WebMediaStreamSource.h" | 17 #include "third_party/WebKit/public/platform/WebMediaStreamSource.h" | 
| 19 #include "third_party/WebKit/public/platform/WebMediaStreamTrack.h" | 18 #include "third_party/WebKit/public/platform/WebMediaStreamTrack.h" | 
| 20 #include "third_party/WebKit/public/platform/WebString.h" | 19 #include "third_party/WebKit/public/platform/WebString.h" | 
| 21 #include "third_party/WebKit/public/platform/WebVector.h" | 20 #include "third_party/WebKit/public/platform/WebVector.h" | 
| 22 | 21 | 
| 23 namespace content { | 22 namespace content { | 
| 24 | 23 | 
| 25 class MockMediaStreamVideoCapturerSource : public MockMediaStreamVideoSource { | 24 class MockMediaStreamVideoCapturerSource : public MockMediaStreamVideoSource { | 
| 26  public: | 25  public: | 
| (...skipping 24 matching lines...) Expand all  Loading... | 
| 51         factory_(dependency_factory), | 50         factory_(dependency_factory), | 
| 52         video_source_(NULL) { | 51         video_source_(NULL) { | 
| 53   } | 52   } | 
| 54 | 53 | 
| 55   void RequestUserMedia() { | 54   void RequestUserMedia() { | 
| 56     blink::WebUserMediaRequest user_media_request; | 55     blink::WebUserMediaRequest user_media_request; | 
| 57     state_ = REQUEST_NOT_COMPLETE; | 56     state_ = REQUEST_NOT_COMPLETE; | 
| 58     requestUserMedia(user_media_request); | 57     requestUserMedia(user_media_request); | 
| 59   } | 58   } | 
| 60 | 59 | 
| 61   void RequestMediaDevices() { |  | 
| 62     blink::WebMediaDevicesRequest media_devices_request; |  | 
| 63     state_ = REQUEST_NOT_COMPLETE; |  | 
| 64     requestMediaDevices(media_devices_request); |  | 
| 65   } |  | 
| 66 |  | 
| 67   virtual void GetUserMediaRequestSucceeded( | 60   virtual void GetUserMediaRequestSucceeded( | 
| 68       const blink::WebMediaStream& stream, | 61       const blink::WebMediaStream& stream, | 
| 69       blink::WebUserMediaRequest* request_info) OVERRIDE { | 62       blink::WebUserMediaRequest* request_info) OVERRIDE { | 
| 70     last_generated_stream_ = stream; | 63     last_generated_stream_ = stream; | 
| 71     state_ = REQUEST_SUCCEEDED; | 64     state_ = REQUEST_SUCCEEDED; | 
| 72   } | 65   } | 
| 73 | 66 | 
| 74   virtual void GetUserMediaRequestFailed( | 67   virtual void GetUserMediaRequestFailed( | 
| 75       blink::WebUserMediaRequest* request_info, | 68       blink::WebUserMediaRequest* request_info, | 
| 76       content::MediaStreamRequestResult result) OVERRIDE { | 69       content::MediaStreamRequestResult result) OVERRIDE { | 
| 77     last_generated_stream_.reset(); | 70     last_generated_stream_.reset(); | 
| 78     state_ = REQUEST_FAILED; | 71     state_ = REQUEST_FAILED; | 
| 79     result_ = result; | 72     result_ = result; | 
| 80   } | 73   } | 
| 81 | 74 | 
| 82   virtual void EnumerateDevicesSucceded( |  | 
| 83       blink::WebMediaDevicesRequest* request, |  | 
| 84       blink::WebVector<blink::WebMediaDeviceInfo>& devices) OVERRIDE { |  | 
| 85     state_ = REQUEST_SUCCEEDED; |  | 
| 86     last_devices_ = devices; |  | 
| 87   } |  | 
| 88 |  | 
| 89   virtual MediaStreamVideoSource* CreateVideoSource( | 75   virtual MediaStreamVideoSource* CreateVideoSource( | 
| 90       const StreamDeviceInfo& device, | 76       const StreamDeviceInfo& device, | 
| 91       const MediaStreamSource::SourceStoppedCallback& stop_callback) OVERRIDE { | 77       const MediaStreamSource::SourceStoppedCallback& stop_callback) OVERRIDE { | 
| 92     video_source_ = new MockMediaStreamVideoCapturerSource(device, | 78     video_source_ = new MockMediaStreamVideoCapturerSource(device, | 
| 93                                                            stop_callback, | 79                                                            stop_callback, | 
| 94                                                            factory_); | 80                                                            factory_); | 
| 95     return video_source_; | 81     return video_source_; | 
| 96   } | 82   } | 
| 97 | 83 | 
| 98   const blink::WebMediaStream& last_generated_stream() { | 84   const blink::WebMediaStream& last_generated_stream() { | 
| 99     return last_generated_stream_; | 85     return last_generated_stream_; | 
| 100   } | 86   } | 
| 101 | 87 | 
| 102   const blink::WebVector<blink::WebMediaDeviceInfo>& last_devices() { |  | 
| 103     return last_devices_; |  | 
| 104   } |  | 
| 105 |  | 
| 106   void ClearLastGeneratedStream() { | 88   void ClearLastGeneratedStream() { | 
| 107     last_generated_stream_.reset(); | 89     last_generated_stream_.reset(); | 
| 108   } | 90   } | 
| 109 | 91 | 
| 110   MockMediaStreamVideoCapturerSource* last_created_video_source() const { | 92   MockMediaStreamVideoCapturerSource* last_created_video_source() const { | 
| 111     return video_source_; | 93     return video_source_; | 
| 112   } | 94   } | 
| 113 | 95 | 
| 114   RequestState request_state() const { return state_; } | 96   RequestState request_state() const { return state_; } | 
| 115   content::MediaStreamRequestResult error_reason() const { return result_; } | 97   content::MediaStreamRequestResult error_reason() const { return result_; } | 
| 116 | 98 | 
| 117  private: | 99  private: | 
| 118   blink::WebMediaStream last_generated_stream_; | 100   blink::WebMediaStream last_generated_stream_; | 
| 119   RequestState state_; | 101   RequestState state_; | 
| 120   content::MediaStreamRequestResult result_; | 102   content::MediaStreamRequestResult result_; | 
| 121   blink::WebVector<blink::WebMediaDeviceInfo> last_devices_; |  | 
| 122   PeerConnectionDependencyFactory* factory_; | 103   PeerConnectionDependencyFactory* factory_; | 
| 123   MockMediaStreamVideoCapturerSource* video_source_; | 104   MockMediaStreamVideoCapturerSource* video_source_; | 
| 124 }; | 105 }; | 
| 125 | 106 | 
| 126 class MediaStreamImplTest : public ::testing::Test { | 107 class MediaStreamImplTest : public ::testing::Test { | 
| 127  public: | 108  public: | 
| 128   virtual void SetUp() { | 109   virtual void SetUp() { | 
| 129     // Create our test object. | 110     // Create our test object. | 
| 130     child_process_.reset(new ChildProcess()); | 111     child_process_.reset(new ChildProcess()); | 
| 131     ms_dispatcher_.reset(new MockMediaStreamDispatcher()); | 112     ms_dispatcher_.reset(new MockMediaStreamDispatcher()); | 
| 132     dependency_factory_.reset(new MockPeerConnectionDependencyFactory()); | 113     dependency_factory_.reset(new MockPeerConnectionDependencyFactory()); | 
| 133     ms_impl_.reset(new MediaStreamImplUnderTest(ms_dispatcher_.get(), | 114     ms_impl_.reset(new MediaStreamImplUnderTest(ms_dispatcher_.get(), | 
| 134                                                 dependency_factory_.get())); | 115                                                 dependency_factory_.get())); | 
| 135   } | 116   } | 
| 136 | 117 | 
| 137   blink::WebMediaStream RequestLocalMediaStream() { | 118   blink::WebMediaStream RequestLocalMediaStream() { | 
| 138     ms_impl_->RequestUserMedia(); | 119     ms_impl_->RequestUserMedia(); | 
| 139     FakeMediaStreamDispatcherRequestUserMediaComplete(); | 120     FakeMediaStreamDispatcherComplete(); | 
| 140     StartMockedVideoSource(); | 121     StartMockedVideoSource(); | 
| 141 | 122 | 
| 142     EXPECT_EQ(MediaStreamImplUnderTest::REQUEST_SUCCEEDED, | 123     EXPECT_EQ(MediaStreamImplUnderTest::REQUEST_SUCCEEDED, | 
| 143               ms_impl_->request_state()); | 124               ms_impl_->request_state()); | 
| 144 | 125 | 
| 145     blink::WebMediaStream desc = ms_impl_->last_generated_stream(); | 126     blink::WebMediaStream desc = ms_impl_->last_generated_stream(); | 
| 146     content::MediaStream* native_stream = | 127     content::MediaStream* native_stream = | 
| 147         content::MediaStream::GetMediaStream(desc); | 128         content::MediaStream::GetMediaStream(desc); | 
| 148     if (!native_stream) { | 129     if (!native_stream) { | 
| 149       ADD_FAILURE(); | 130       ADD_FAILURE(); | 
| 150       return desc; | 131       return desc; | 
| 151     } | 132     } | 
| 152 | 133 | 
| 153     blink::WebVector<blink::WebMediaStreamTrack> audio_tracks; | 134     blink::WebVector<blink::WebMediaStreamTrack> audio_tracks; | 
| 154     desc.audioTracks(audio_tracks); | 135     desc.audioTracks(audio_tracks); | 
| 155     blink::WebVector<blink::WebMediaStreamTrack> video_tracks; | 136     blink::WebVector<blink::WebMediaStreamTrack> video_tracks; | 
| 156     desc.videoTracks(video_tracks); | 137     desc.videoTracks(video_tracks); | 
| 157 | 138 | 
| 158     EXPECT_EQ(1u, audio_tracks.size()); | 139     EXPECT_EQ(1u, audio_tracks.size()); | 
| 159     EXPECT_EQ(1u, video_tracks.size()); | 140     EXPECT_EQ(1u, video_tracks.size()); | 
| 160     EXPECT_NE(audio_tracks[0].id(), video_tracks[0].id()); | 141     EXPECT_NE(audio_tracks[0].id(), video_tracks[0].id()); | 
| 161     return desc; | 142     return desc; | 
| 162   } | 143   } | 
| 163 | 144 | 
| 164   void FakeMediaStreamDispatcherRequestUserMediaComplete() { | 145   void FakeMediaStreamDispatcherComplete() { | 
| 165     // Audio request ID is used as the shared request ID. | 146     ms_impl_->OnStreamGenerated(ms_dispatcher_->request_id(), | 
| 166     ms_impl_->OnStreamGenerated(ms_dispatcher_->audio_request_id(), |  | 
| 167                                 ms_dispatcher_->stream_label(), | 147                                 ms_dispatcher_->stream_label(), | 
| 168                                 ms_dispatcher_->audio_array(), | 148                                 ms_dispatcher_->audio_array(), | 
| 169                                 ms_dispatcher_->video_array()); | 149                                 ms_dispatcher_->video_array()); | 
| 170   } | 150   } | 
| 171 | 151 | 
| 172   void FakeMediaStreamDispatcherRequestMediaDevicesComplete() { |  | 
| 173     ms_impl_->OnDevicesEnumerated(ms_dispatcher_->audio_request_id(), |  | 
| 174                                   ms_dispatcher_->audio_array()); |  | 
| 175     ms_impl_->OnDevicesEnumerated(ms_dispatcher_->video_request_id(), |  | 
| 176                                   ms_dispatcher_->video_array()); |  | 
| 177   } |  | 
| 178 |  | 
| 179   void StartMockedVideoSource() { | 152   void StartMockedVideoSource() { | 
| 180     MockMediaStreamVideoCapturerSource* video_source = | 153     MockMediaStreamVideoCapturerSource* video_source = | 
| 181         ms_impl_->last_created_video_source(); | 154         ms_impl_->last_created_video_source(); | 
| 182     if (video_source->SourceHasAttemptedToStart()) | 155     if (video_source->SourceHasAttemptedToStart()) | 
| 183       video_source->StartMockedSource(); | 156       video_source->StartMockedSource(); | 
| 184   } | 157   } | 
| 185 | 158 | 
| 186   void FailToStartMockedVideoSource() { | 159   void FailToStartMockedVideoSource() { | 
| 187     MockMediaStreamVideoCapturerSource* video_source = | 160     MockMediaStreamVideoCapturerSource* video_source = | 
| 188         ms_impl_->last_created_video_source(); | 161         ms_impl_->last_created_video_source(); | 
| (...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 337   // Test that the MediaStreams are deleted if the owning WebFrame is deleted. | 310   // Test that the MediaStreams are deleted if the owning WebFrame is deleted. | 
| 338   // In the unit test the owning frame is NULL. | 311   // In the unit test the owning frame is NULL. | 
| 339   ms_impl_->FrameWillClose(NULL); | 312   ms_impl_->FrameWillClose(NULL); | 
| 340   EXPECT_EQ(1, ms_dispatcher_->stop_audio_device_counter()); | 313   EXPECT_EQ(1, ms_dispatcher_->stop_audio_device_counter()); | 
| 341   EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter()); | 314   EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter()); | 
| 342 } | 315 } | 
| 343 | 316 | 
| 344 // This test what happens if a video source to a MediaSteam fails to start. | 317 // This test what happens if a video source to a MediaSteam fails to start. | 
| 345 TEST_F(MediaStreamImplTest, MediaVideoSourceFailToStart) { | 318 TEST_F(MediaStreamImplTest, MediaVideoSourceFailToStart) { | 
| 346   ms_impl_->RequestUserMedia(); | 319   ms_impl_->RequestUserMedia(); | 
| 347   FakeMediaStreamDispatcherRequestUserMediaComplete(); | 320   FakeMediaStreamDispatcherComplete(); | 
| 348   FailToStartMockedVideoSource(); | 321   FailToStartMockedVideoSource(); | 
| 349   EXPECT_EQ(MediaStreamImplUnderTest::REQUEST_FAILED, | 322   EXPECT_EQ(MediaStreamImplUnderTest::REQUEST_FAILED, | 
| 350             ms_impl_->request_state()); | 323             ms_impl_->request_state()); | 
| 351   EXPECT_EQ(MEDIA_DEVICE_TRACK_START_FAILURE, | 324   EXPECT_EQ(MEDIA_DEVICE_TRACK_START_FAILURE, | 
| 352             ms_impl_->error_reason()); | 325             ms_impl_->error_reason()); | 
| 353   EXPECT_EQ(1, ms_dispatcher_->request_stream_counter()); | 326   EXPECT_EQ(1, ms_dispatcher_->request_stream_counter()); | 
| 354   EXPECT_EQ(1, ms_dispatcher_->stop_audio_device_counter()); | 327   EXPECT_EQ(1, ms_dispatcher_->stop_audio_device_counter()); | 
| 355   EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter()); | 328   EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter()); | 
| 356 } | 329 } | 
| 357 | 330 | 
| 358 // This test what happens if an audio source fail to initialize. | 331 // This test what happens if an audio source fail to initialize. | 
| 359 TEST_F(MediaStreamImplTest, MediaAudioSourceFailToInitialize) { | 332 TEST_F(MediaStreamImplTest, MediaAudioSourceFailToInitialize) { | 
| 360   FailToCreateNextAudioCapturer(); | 333   FailToCreateNextAudioCapturer(); | 
| 361   ms_impl_->RequestUserMedia(); | 334   ms_impl_->RequestUserMedia(); | 
| 362   FakeMediaStreamDispatcherRequestUserMediaComplete(); | 335   FakeMediaStreamDispatcherComplete(); | 
| 363   StartMockedVideoSource(); | 336   StartMockedVideoSource(); | 
| 364   EXPECT_EQ(MediaStreamImplUnderTest::REQUEST_FAILED, | 337   EXPECT_EQ(MediaStreamImplUnderTest::REQUEST_FAILED, | 
| 365             ms_impl_->request_state()); | 338             ms_impl_->request_state()); | 
| 366   EXPECT_EQ(MEDIA_DEVICE_TRACK_START_FAILURE, | 339   EXPECT_EQ(MEDIA_DEVICE_TRACK_START_FAILURE, | 
| 367             ms_impl_->error_reason()); | 340             ms_impl_->error_reason()); | 
| 368   EXPECT_EQ(1, ms_dispatcher_->request_stream_counter()); | 341   EXPECT_EQ(1, ms_dispatcher_->request_stream_counter()); | 
| 369   EXPECT_EQ(1, ms_dispatcher_->stop_audio_device_counter()); | 342   EXPECT_EQ(1, ms_dispatcher_->stop_audio_device_counter()); | 
| 370   EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter()); | 343   EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter()); | 
| 371 } | 344 } | 
| 372 | 345 | 
| 373 // This test what happens if MediaStreamImpl is deleted before a source has | 346 // This test what happens if MediaStreamImpl is deleted before a source has | 
| 374 // started. | 347 // started. | 
| 375 TEST_F(MediaStreamImplTest, MediaStreamImplShutDown) { | 348 TEST_F(MediaStreamImplTest, MediaStreamImplShutDown) { | 
| 376   ms_impl_->RequestUserMedia(); | 349   ms_impl_->RequestUserMedia(); | 
| 377   FakeMediaStreamDispatcherRequestUserMediaComplete(); | 350   FakeMediaStreamDispatcherComplete(); | 
| 378   EXPECT_EQ(1, ms_dispatcher_->request_stream_counter()); | 351   EXPECT_EQ(1, ms_dispatcher_->request_stream_counter()); | 
| 379   EXPECT_EQ(MediaStreamImplUnderTest::REQUEST_NOT_COMPLETE, | 352   EXPECT_EQ(MediaStreamImplUnderTest::REQUEST_NOT_COMPLETE, | 
| 380             ms_impl_->request_state()); | 353             ms_impl_->request_state()); | 
| 381   ms_impl_.reset(); | 354   ms_impl_.reset(); | 
| 382 } | 355 } | 
| 383 | 356 | 
| 384 // This test what happens if the WebFrame is closed while the MediaStream is | 357 // This test what happens if the WebFrame is closed while the MediaStream is | 
| 385 // being generated by the MediaStreamDispatcher. | 358 // being generated by the MediaStreamDispatcher. | 
| 386 TEST_F(MediaStreamImplTest, ReloadFrameWhileGeneratingStream) { | 359 TEST_F(MediaStreamImplTest, ReloadFrameWhileGeneratingStream) { | 
| 387   ms_impl_->RequestUserMedia(); | 360   ms_impl_->RequestUserMedia(); | 
| 388   ms_impl_->FrameWillClose(NULL); | 361   ms_impl_->FrameWillClose(NULL); | 
| 389   EXPECT_EQ(1, ms_dispatcher_->request_stream_counter()); | 362   EXPECT_EQ(1, ms_dispatcher_->request_stream_counter()); | 
| 390   EXPECT_EQ(0, ms_dispatcher_->stop_audio_device_counter()); | 363   EXPECT_EQ(0, ms_dispatcher_->stop_audio_device_counter()); | 
| 391   EXPECT_EQ(0, ms_dispatcher_->stop_video_device_counter()); | 364   EXPECT_EQ(0, ms_dispatcher_->stop_video_device_counter()); | 
| 392   EXPECT_EQ(MediaStreamImplUnderTest::REQUEST_NOT_COMPLETE, | 365   EXPECT_EQ(MediaStreamImplUnderTest::REQUEST_NOT_COMPLETE, | 
| 393             ms_impl_->request_state()); | 366             ms_impl_->request_state()); | 
| 394 } | 367 } | 
| 395 | 368 | 
| 396 // This test what happens if the WebFrame is closed while the sources are being | 369 // This test what happens if the WebFrame is closed while the sources are being | 
| 397 // started. | 370 // started. | 
| 398 TEST_F(MediaStreamImplTest, ReloadFrameWhileGeneratingSources) { | 371 TEST_F(MediaStreamImplTest, ReloadFrameWhileGeneratingSources) { | 
| 399   ms_impl_->RequestUserMedia(); | 372   ms_impl_->RequestUserMedia(); | 
| 400   FakeMediaStreamDispatcherRequestUserMediaComplete(); | 373   FakeMediaStreamDispatcherComplete(); | 
| 401   EXPECT_EQ(1, ms_dispatcher_->request_stream_counter()); | 374   EXPECT_EQ(1, ms_dispatcher_->request_stream_counter()); | 
| 402   ms_impl_->FrameWillClose(NULL); | 375   ms_impl_->FrameWillClose(NULL); | 
| 403   EXPECT_EQ(1, ms_dispatcher_->stop_audio_device_counter()); | 376   EXPECT_EQ(1, ms_dispatcher_->stop_audio_device_counter()); | 
| 404   EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter()); | 377   EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter()); | 
| 405   EXPECT_EQ(MediaStreamImplUnderTest::REQUEST_NOT_COMPLETE, | 378   EXPECT_EQ(MediaStreamImplUnderTest::REQUEST_NOT_COMPLETE, | 
| 406             ms_impl_->request_state()); | 379             ms_impl_->request_state()); | 
| 407 } | 380 } | 
| 408 | 381 | 
| 409 // This test what happens if stop is called on a track after the frame has | 382 // This test what happens if stop is called on a track after the frame has | 
| 410 // been reloaded. | 383 // been reloaded. | 
| (...skipping 10 matching lines...) Expand all  Loading... | 
| 421   audio_track->Stop(); | 394   audio_track->Stop(); | 
| 422   EXPECT_EQ(1, ms_dispatcher_->stop_audio_device_counter()); | 395   EXPECT_EQ(1, ms_dispatcher_->stop_audio_device_counter()); | 
| 423 | 396 | 
| 424   blink::WebVector<blink::WebMediaStreamTrack> video_tracks; | 397   blink::WebVector<blink::WebMediaStreamTrack> video_tracks; | 
| 425   mixed_desc.videoTracks(video_tracks); | 398   mixed_desc.videoTracks(video_tracks); | 
| 426   MediaStreamTrack* video_track = MediaStreamTrack::GetTrack(video_tracks[0]); | 399   MediaStreamTrack* video_track = MediaStreamTrack::GetTrack(video_tracks[0]); | 
| 427   video_track->Stop(); | 400   video_track->Stop(); | 
| 428   EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter()); | 401   EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter()); | 
| 429 } | 402 } | 
| 430 | 403 | 
| 431 TEST_F(MediaStreamImplTest, EnumerateMediaDevices) { |  | 
| 432   ms_impl_->RequestMediaDevices(); |  | 
| 433   FakeMediaStreamDispatcherRequestMediaDevicesComplete(); |  | 
| 434 |  | 
| 435   EXPECT_EQ(MediaStreamImplUnderTest::REQUEST_SUCCEEDED, |  | 
| 436             ms_impl_->request_state()); |  | 
| 437 |  | 
| 438   EXPECT_FALSE(ms_impl_->last_devices()[0].deviceId().isEmpty()); |  | 
| 439   EXPECT_EQ(blink::WebMediaDeviceInfo::MediaDeviceKindAudioInput, |  | 
| 440             ms_impl_->last_devices()[0].kind()); |  | 
| 441   EXPECT_FALSE(ms_impl_->last_devices()[0].label().isEmpty()); |  | 
| 442 |  | 
| 443   EXPECT_FALSE(ms_impl_->last_devices()[1].deviceId().isEmpty()); |  | 
| 444   EXPECT_EQ(blink::WebMediaDeviceInfo::MediaDeviceKindVideoInput, |  | 
| 445             ms_impl_->last_devices()[1].kind()); |  | 
| 446   EXPECT_FALSE(ms_impl_->last_devices()[1].label().isEmpty()); |  | 
| 447 } |  | 
| 448 |  | 
| 449 }  // namespace content | 404 }  // namespace content | 
| OLD | NEW | 
|---|