| 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 <utility> | 8 #include <utility> |
| 8 | 9 |
| 9 #include "base/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" |
| 10 #include "base/run_loop.h" | 11 #include "base/run_loop.h" |
| 11 #include "base/strings/utf_string_conversions.h" | 12 #include "base/strings/utf_string_conversions.h" |
| 12 #include "base/threading/thread_task_runner_handle.h" | 13 #include "base/threading/thread_task_runner_handle.h" |
| 13 #include "content/child/child_process.h" | 14 #include "content/child/child_process.h" |
| 14 #include "content/renderer/media/media_stream_video_track.h" | 15 #include "content/renderer/media/media_stream_video_track.h" |
| 15 #include "content/renderer/media/mock_media_stream_video_sink.h" | 16 #include "content/renderer/media/mock_media_stream_video_sink.h" |
| 16 #include "content/renderer/media/webrtc/mock_peer_connection_dependency_factory.
h" | 17 #include "content/renderer/media/webrtc/mock_peer_connection_dependency_factory.
h" |
| (...skipping 21 matching lines...) Expand all Loading... |
| 38 : public ::testing::Test { | 39 : public ::testing::Test { |
| 39 public: | 40 public: |
| 40 MediaStreamRemoteVideoSourceTest() | 41 MediaStreamRemoteVideoSourceTest() |
| 41 : child_process_(new ChildProcess()), | 42 : child_process_(new ChildProcess()), |
| 42 mock_factory_(new MockPeerConnectionDependencyFactory()), | 43 mock_factory_(new MockPeerConnectionDependencyFactory()), |
| 43 webrtc_video_track_(MockWebRtcVideoTrack::Create("test")), | 44 webrtc_video_track_(MockWebRtcVideoTrack::Create("test")), |
| 44 remote_source_(new MediaStreamRemoteVideoSourceUnderTest( | 45 remote_source_(new MediaStreamRemoteVideoSourceUnderTest( |
| 45 std::unique_ptr<TrackObserver>( | 46 std::unique_ptr<TrackObserver>( |
| 46 new TrackObserver(base::ThreadTaskRunnerHandle::Get(), | 47 new TrackObserver(base::ThreadTaskRunnerHandle::Get(), |
| 47 webrtc_video_track_.get())))), | 48 webrtc_video_track_.get())))), |
| 48 number_of_successful_constraints_applied_(0), | 49 number_of_successful_track_starts_(0), |
| 49 number_of_failed_constraints_applied_(0) { | 50 number_of_failed_track_starts_(0) { |
| 50 webkit_source_.initialize(blink::WebString::fromASCII("dummy_source_id"), | 51 webkit_source_.initialize(blink::WebString::fromASCII("dummy_source_id"), |
| 51 blink::WebMediaStreamSource::TypeVideo, | 52 blink::WebMediaStreamSource::TypeVideo, |
| 52 blink::WebString::fromASCII("dummy_source_name"), | 53 blink::WebString::fromASCII("dummy_source_name"), |
| 53 true /* remote */); | 54 true /* remote */); |
| 54 webkit_source_.setExtraData(remote_source_); | 55 webkit_source_.setExtraData(remote_source_); |
| 55 } | 56 } |
| 56 | 57 |
| 57 void TearDown() override { | 58 void TearDown() override { |
| 58 remote_source_->OnSourceTerminated(); | 59 remote_source_->OnSourceTerminated(); |
| 59 webkit_source_.reset(); | 60 webkit_source_.reset(); |
| 60 blink::WebHeap::collectAllGarbageForTesting(); | 61 blink::WebHeap::collectAllGarbageForTesting(); |
| 61 } | 62 } |
| 62 | 63 |
| 63 MediaStreamRemoteVideoSourceUnderTest* source() { | 64 MediaStreamRemoteVideoSourceUnderTest* source() { |
| 64 return remote_source_; | 65 return remote_source_; |
| 65 } | 66 } |
| 66 | 67 |
| 67 MediaStreamVideoTrack* CreateTrack() { | 68 MediaStreamVideoTrack* CreateTrack() { |
| 68 bool enabled = true; | 69 bool enabled = true; |
| 69 blink::WebMediaConstraints constraints; | |
| 70 constraints.initialize(); | |
| 71 return new MediaStreamVideoTrack( | 70 return new MediaStreamVideoTrack( |
| 72 source(), | 71 source(), |
| 73 constraints, | 72 base::Bind(&MediaStreamRemoteVideoSourceTest::OnTrackStarted, |
| 74 base::Bind( | 73 base::Unretained(this)), |
| 75 &MediaStreamRemoteVideoSourceTest::OnConstraintsApplied, | |
| 76 base::Unretained(this)), | |
| 77 enabled); | 74 enabled); |
| 78 } | 75 } |
| 79 | 76 |
| 80 int NumberOfSuccessConstraintsCallbacks() const { | 77 int NumberOfSuccessConstraintsCallbacks() const { |
| 81 return number_of_successful_constraints_applied_; | 78 return number_of_successful_track_starts_; |
| 82 } | 79 } |
| 83 | 80 |
| 84 int NumberOfFailedConstraintsCallbacks() const { | 81 int NumberOfFailedConstraintsCallbacks() const { |
| 85 return number_of_failed_constraints_applied_; | 82 return number_of_failed_track_starts_; |
| 86 } | 83 } |
| 87 | 84 |
| 88 void StopWebRtcTrack() { | 85 void StopWebRtcTrack() { |
| 89 static_cast<MockWebRtcVideoTrack*>(webrtc_video_track_.get())->SetEnded(); | 86 static_cast<MockWebRtcVideoTrack*>(webrtc_video_track_.get())->SetEnded(); |
| 90 } | 87 } |
| 91 | 88 |
| 92 const blink::WebMediaStreamSource& webkit_source() const { | 89 const blink::WebMediaStreamSource& webkit_source() const { |
| 93 return webkit_source_; | 90 return webkit_source_; |
| 94 } | 91 } |
| 95 | 92 |
| 96 private: | 93 private: |
| 97 void OnConstraintsApplied(MediaStreamSource* source, | 94 void OnTrackStarted(MediaStreamSource* source, |
| 98 MediaStreamRequestResult result, | 95 MediaStreamRequestResult result, |
| 99 const blink::WebString& result_name) { | 96 const blink::WebString& result_name) { |
| 100 ASSERT_EQ(source, remote_source_); | 97 ASSERT_EQ(source, remote_source_); |
| 101 if (result == MEDIA_DEVICE_OK) | 98 if (result == MEDIA_DEVICE_OK) |
| 102 ++number_of_successful_constraints_applied_; | 99 ++number_of_successful_track_starts_; |
| 103 else | 100 else |
| 104 ++number_of_failed_constraints_applied_; | 101 ++number_of_failed_track_starts_; |
| 105 } | 102 } |
| 106 | 103 |
| 107 base::MessageLoopForUI message_loop_; | 104 base::MessageLoopForUI message_loop_; |
| 108 std::unique_ptr<ChildProcess> child_process_; | 105 std::unique_ptr<ChildProcess> child_process_; |
| 109 std::unique_ptr<MockPeerConnectionDependencyFactory> mock_factory_; | 106 std::unique_ptr<MockPeerConnectionDependencyFactory> mock_factory_; |
| 110 scoped_refptr<webrtc::VideoTrackInterface> webrtc_video_track_; | 107 scoped_refptr<webrtc::VideoTrackInterface> webrtc_video_track_; |
| 111 // |remote_source_| is owned by |webkit_source_|. | 108 // |remote_source_| is owned by |webkit_source_|. |
| 112 MediaStreamRemoteVideoSourceUnderTest* remote_source_; | 109 MediaStreamRemoteVideoSourceUnderTest* remote_source_; |
| 113 blink::WebMediaStreamSource webkit_source_; | 110 blink::WebMediaStreamSource webkit_source_; |
| 114 int number_of_successful_constraints_applied_; | 111 int number_of_successful_track_starts_; |
| 115 int number_of_failed_constraints_applied_; | 112 int number_of_failed_track_starts_; |
| 116 }; | 113 }; |
| 117 | 114 |
| 118 TEST_F(MediaStreamRemoteVideoSourceTest, StartTrack) { | 115 TEST_F(MediaStreamRemoteVideoSourceTest, StartTrack) { |
| 119 std::unique_ptr<MediaStreamVideoTrack> track(CreateTrack()); | 116 std::unique_ptr<MediaStreamVideoTrack> track(CreateTrack()); |
| 120 EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks()); | 117 EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks()); |
| 121 | 118 |
| 122 MockMediaStreamVideoSink sink; | 119 MockMediaStreamVideoSink sink; |
| 123 track->AddSink(&sink, sink.GetDeliverFrameCB(), false); | 120 track->AddSink(&sink, sink.GetDeliverFrameCB(), false); |
| 124 base::RunLoop run_loop; | 121 base::RunLoop run_loop; |
| 125 base::Closure quit_closure = run_loop.QuitClosure(); | 122 base::Closure quit_closure = run_loop.QuitClosure(); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 149 StopWebRtcTrack(); | 146 StopWebRtcTrack(); |
| 150 base::RunLoop().RunUntilIdle(); | 147 base::RunLoop().RunUntilIdle(); |
| 151 EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateEnded, | 148 EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateEnded, |
| 152 webkit_source().getReadyState()); | 149 webkit_source().getReadyState()); |
| 153 EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateEnded, sink.state()); | 150 EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateEnded, sink.state()); |
| 154 | 151 |
| 155 track->RemoveSink(&sink); | 152 track->RemoveSink(&sink); |
| 156 } | 153 } |
| 157 | 154 |
| 158 } // namespace content | 155 } // namespace content |
| OLD | NEW |