| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/webrtc/media_stream_remote_video_source.h" | 5 #include "content/renderer/media/webrtc/media_stream_remote_video_source.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "base/run_loop.h" | 10 #include "base/run_loop.h" |
| 11 #include "base/strings/utf_string_conversions.h" | 11 #include "base/strings/utf_string_conversions.h" |
| 12 #include "base/synchronization/waitable_event.h" |
| 12 #include "base/test/scoped_task_environment.h" | 13 #include "base/test/scoped_task_environment.h" |
| 13 #include "base/threading/thread_task_runner_handle.h" | 14 #include "base/threading/thread_task_runner_handle.h" |
| 14 #include "content/child/child_process.h" | 15 #include "content/child/child_process.h" |
| 15 #include "content/renderer/media/media_stream_video_track.h" | 16 #include "content/renderer/media/media_stream_video_track.h" |
| 16 #include "content/renderer/media/mock_media_stream_video_sink.h" | 17 #include "content/renderer/media/mock_media_stream_video_sink.h" |
| 17 #include "content/renderer/media/webrtc/mock_peer_connection_dependency_factory.
h" | 18 #include "content/renderer/media/webrtc/mock_peer_connection_dependency_factory.
h" |
| 18 #include "content/renderer/media/webrtc/track_observer.h" | 19 #include "content/renderer/media/webrtc/track_observer.h" |
| 19 #include "media/base/video_frame.h" | 20 #include "media/base/video_frame.h" |
| 20 #include "testing/gtest/include/gtest/gtest.h" | 21 #include "testing/gtest/include/gtest/gtest.h" |
| 21 #include "third_party/WebKit/public/web/WebHeap.h" | 22 #include "third_party/WebKit/public/web/WebHeap.h" |
| (...skipping 16 matching lines...) Expand all Loading... |
| 38 | 39 |
| 39 class MediaStreamRemoteVideoSourceTest | 40 class MediaStreamRemoteVideoSourceTest |
| 40 : public ::testing::Test { | 41 : public ::testing::Test { |
| 41 public: | 42 public: |
| 42 MediaStreamRemoteVideoSourceTest() | 43 MediaStreamRemoteVideoSourceTest() |
| 43 : scoped_task_environment_( | 44 : scoped_task_environment_( |
| 44 base::test::ScopedTaskEnvironment::MainThreadType::UI), | 45 base::test::ScopedTaskEnvironment::MainThreadType::UI), |
| 45 child_process_(new ChildProcess()), | 46 child_process_(new ChildProcess()), |
| 46 mock_factory_(new MockPeerConnectionDependencyFactory()), | 47 mock_factory_(new MockPeerConnectionDependencyFactory()), |
| 47 webrtc_video_track_(MockWebRtcVideoTrack::Create("test")), | 48 webrtc_video_track_(MockWebRtcVideoTrack::Create("test")), |
| 48 remote_source_(new MediaStreamRemoteVideoSourceUnderTest( | 49 remote_source_(nullptr), |
| 49 std::unique_ptr<TrackObserver>( | |
| 50 new TrackObserver(base::ThreadTaskRunnerHandle::Get(), | |
| 51 webrtc_video_track_.get())))), | |
| 52 number_of_successful_track_starts_(0), | 50 number_of_successful_track_starts_(0), |
| 53 number_of_failed_track_starts_(0) { | 51 number_of_failed_track_starts_(0) {} |
| 52 |
| 53 void SetUp() override { |
| 54 scoped_refptr<base::SingleThreadTaskRunner> main_thread = |
| 55 base::ThreadTaskRunnerHandle::Get(); |
| 56 |
| 57 base::WaitableEvent waitable_event( |
| 58 base::WaitableEvent::ResetPolicy::MANUAL, |
| 59 base::WaitableEvent::InitialState::NOT_SIGNALED); |
| 60 |
| 61 std::unique_ptr<TrackObserver> track_observer; |
| 62 mock_factory_->GetWebRtcSignalingThread()->PostTask( |
| 63 FROM_HERE, |
| 64 base::Bind( |
| 65 [](scoped_refptr<base::SingleThreadTaskRunner> main_thread, |
| 66 webrtc::MediaStreamTrackInterface* webrtc_track, |
| 67 std::unique_ptr<TrackObserver>* track_observer, |
| 68 base::WaitableEvent* waitable_event) { |
| 69 track_observer->reset( |
| 70 new TrackObserver(main_thread, webrtc_track)); |
| 71 waitable_event->Signal(); |
| 72 }, |
| 73 main_thread, base::Unretained(webrtc_video_track_.get()), |
| 74 base::Unretained(&track_observer), |
| 75 base::Unretained(&waitable_event))); |
| 76 waitable_event.Wait(); |
| 77 |
| 78 remote_source_ = |
| 79 new MediaStreamRemoteVideoSourceUnderTest(std::move(track_observer)); |
| 54 webkit_source_.Initialize(blink::WebString::FromASCII("dummy_source_id"), | 80 webkit_source_.Initialize(blink::WebString::FromASCII("dummy_source_id"), |
| 55 blink::WebMediaStreamSource::kTypeVideo, | 81 blink::WebMediaStreamSource::kTypeVideo, |
| 56 blink::WebString::FromASCII("dummy_source_name"), | 82 blink::WebString::FromASCII("dummy_source_name"), |
| 57 true /* remote */); | 83 true /* remote */); |
| 58 webkit_source_.SetExtraData(remote_source_); | 84 webkit_source_.SetExtraData(remote_source_); |
| 59 } | 85 } |
| 60 | 86 |
| 61 void TearDown() override { | 87 void TearDown() override { |
| 62 remote_source_->OnSourceTerminated(); | 88 remote_source_->OnSourceTerminated(); |
| 63 webkit_source_.Reset(); | 89 webkit_source_.Reset(); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 79 | 105 |
| 80 int NumberOfSuccessConstraintsCallbacks() const { | 106 int NumberOfSuccessConstraintsCallbacks() const { |
| 81 return number_of_successful_track_starts_; | 107 return number_of_successful_track_starts_; |
| 82 } | 108 } |
| 83 | 109 |
| 84 int NumberOfFailedConstraintsCallbacks() const { | 110 int NumberOfFailedConstraintsCallbacks() const { |
| 85 return number_of_failed_track_starts_; | 111 return number_of_failed_track_starts_; |
| 86 } | 112 } |
| 87 | 113 |
| 88 void StopWebRtcTrack() { | 114 void StopWebRtcTrack() { |
| 89 static_cast<MockWebRtcVideoTrack*>(webrtc_video_track_.get())->SetEnded(); | 115 base::WaitableEvent waitable_event( |
| 116 base::WaitableEvent::ResetPolicy::MANUAL, |
| 117 base::WaitableEvent::InitialState::NOT_SIGNALED); |
| 118 mock_factory_->GetWebRtcSignalingThread()->PostTask( |
| 119 FROM_HERE, base::Bind( |
| 120 [](MockWebRtcVideoTrack* video_track, |
| 121 base::WaitableEvent* waitable_event) { |
| 122 video_track->SetEnded(); |
| 123 waitable_event->Signal(); |
| 124 }, |
| 125 base::Unretained(static_cast<MockWebRtcVideoTrack*>( |
| 126 webrtc_video_track_.get())), |
| 127 base::Unretained(&waitable_event))); |
| 128 waitable_event.Wait(); |
| 90 } | 129 } |
| 91 | 130 |
| 92 const blink::WebMediaStreamSource& webkit_source() const { | 131 const blink::WebMediaStreamSource& webkit_source() const { |
| 93 return webkit_source_; | 132 return webkit_source_; |
| 94 } | 133 } |
| 95 | 134 |
| 96 private: | 135 private: |
| 97 void OnTrackStarted(MediaStreamSource* source, | 136 void OnTrackStarted(MediaStreamSource* source, |
| 98 MediaStreamRequestResult result, | 137 MediaStreamRequestResult result, |
| 99 const blink::WebString& result_name) { | 138 const blink::WebString& result_name) { |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 149 StopWebRtcTrack(); | 188 StopWebRtcTrack(); |
| 150 base::RunLoop().RunUntilIdle(); | 189 base::RunLoop().RunUntilIdle(); |
| 151 EXPECT_EQ(blink::WebMediaStreamSource::kReadyStateEnded, | 190 EXPECT_EQ(blink::WebMediaStreamSource::kReadyStateEnded, |
| 152 webkit_source().GetReadyState()); | 191 webkit_source().GetReadyState()); |
| 153 EXPECT_EQ(blink::WebMediaStreamSource::kReadyStateEnded, sink.state()); | 192 EXPECT_EQ(blink::WebMediaStreamSource::kReadyStateEnded, sink.state()); |
| 154 | 193 |
| 155 track->RemoveSink(&sink); | 194 track->RemoveSink(&sink); |
| 156 } | 195 } |
| 157 | 196 |
| 158 } // namespace content | 197 } // namespace content |
| OLD | NEW |