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 |