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

Side by Side Diff: content/renderer/media/webrtc/webrtc_media_stream_track_adapter_unittest.cc

Issue 2883023002: WebRtcMediaStreamTrackAdapter, maps 1 webrtc and 1 blink track (Closed)
Patch Set: Addressed nits Created 3 years, 6 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
OLDNEW
(Empty)
1 // Copyright (c) 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "content/renderer/media/webrtc/webrtc_media_stream_track_adapter.h"
6
7 #include <memory>
8
9 #include "base/memory/ref_counted.h"
10 #include "base/message_loop/message_loop.h"
11 #include "base/run_loop.h"
12 #include "base/single_thread_task_runner.h"
13 #include "base/synchronization/waitable_event.h"
14 #include "content/child/child_process.h"
15 #include "content/renderer/media/media_stream_audio_source.h"
16 #include "content/renderer/media/media_stream_video_track.h"
17 #include "content/renderer/media/mock_media_stream_video_sink.h"
18 #include "content/renderer/media/mock_media_stream_video_source.h"
19 #include "content/renderer/media/webrtc/mock_peer_connection_dependency_factory. h"
20 #include "testing/gtest/include/gtest/gtest.h"
21 #include "third_party/WebKit/public/platform/WebMediaStreamSource.h"
22 #include "third_party/WebKit/public/platform/WebMediaStreamTrack.h"
23 #include "third_party/WebKit/public/platform/WebString.h"
24 #include "third_party/WebKit/public/web/WebHeap.h"
25
26 namespace content {
27
28 class WebRtcMediaStreamTrackAdapterTest : public ::testing::Test {
29 public:
30 void SetUp() override {
31 dependency_factory_.reset(new MockPeerConnectionDependencyFactory());
32 main_thread_ = base::ThreadTaskRunnerHandle::Get();
33 }
34
35 void TearDown() override {
36 if (track_adapter_) {
37 EXPECT_TRUE(track_adapter_->is_initialized());
38 track_adapter_->Dispose();
39 EXPECT_FALSE(track_adapter_->is_initialized());
40 track_adapter_ = nullptr;
41 RunMessageLoopsUntilIdle();
42 }
43 blink::WebHeap::CollectAllGarbageForTesting();
44 }
45
46 blink::WebMediaStreamTrack CreateLocalAudioTrack() {
47 blink::WebMediaStreamSource web_source;
48 web_source.Initialize(blink::WebString::FromUTF8("local_audio_id"),
49 blink::WebMediaStreamSource::kTypeAudio,
50 blink::WebString::FromUTF8("local_audio_track"),
51 false);
52 MediaStreamAudioSource* audio_source = new MediaStreamAudioSource(true);
53 // Takes ownership of |audio_source|.
54 web_source.SetExtraData(audio_source);
55
56 blink::WebMediaStreamTrack web_track;
57 web_track.Initialize(web_source.Id(), web_source);
58 audio_source->ConnectToTrack(web_track);
59 return web_track;
60 }
61
62 blink::WebMediaStreamTrack CreateLocalVideoTrack() {
63 blink::WebMediaStreamSource web_source;
64 web_source.Initialize(blink::WebString::FromUTF8("local_video_id"),
65 blink::WebMediaStreamSource::kTypeVideo,
66 blink::WebString::FromUTF8("local_video_track"),
67 false);
68 MockMediaStreamVideoSource* video_source =
69 new MockMediaStreamVideoSource(true);
70 // Takes ownership of |video_source|.
71 web_source.SetExtraData(video_source);
72
73 return MediaStreamVideoTrack::CreateVideoTrack(
74 video_source, MediaStreamVideoSource::ConstraintsCallback(), true);
75 }
76
77 void CreateRemoteTrackAdapter(
78 webrtc::MediaStreamTrackInterface* webrtc_track) {
79 track_adapter_ = WebRtcMediaStreamTrackAdapter::CreateRemoteTrackAdapter(
80 dependency_factory_.get(), main_thread_, webrtc_track);
81 }
82
83 // Runs message loops on the webrtc signaling thread and the main thread until
84 // idle.
85 void RunMessageLoopsUntilIdle() {
86 base::WaitableEvent waitable_event(
87 base::WaitableEvent::ResetPolicy::MANUAL,
88 base::WaitableEvent::InitialState::NOT_SIGNALED);
89 dependency_factory_->GetWebRtcSignalingThread()->PostTask(
90 FROM_HERE, base::Bind(&WebRtcMediaStreamTrackAdapterTest::
91 RunMessageLoopUntilIdleOnSignalingThread,
92 base::Unretained(this), &waitable_event));
93 waitable_event.Wait();
94 base::RunLoop().RunUntilIdle();
95 }
96
97 void RunMessageLoopUntilIdleOnSignalingThread(
98 base::WaitableEvent* waitable_event) {
99 DCHECK(dependency_factory_->GetWebRtcSignalingThread()
100 ->BelongsToCurrentThread());
101 base::RunLoop().RunUntilIdle();
102 waitable_event->Signal();
103 }
104
105 protected:
106 // Message loop and child processes is needed for task queues and threading to
107 // work, as is necessary to create tracks and adapters.
108 base::MessageLoop message_loop_;
109 ChildProcess child_process_;
110
111 std::unique_ptr<MockPeerConnectionDependencyFactory> dependency_factory_;
112 scoped_refptr<base::SingleThreadTaskRunner> main_thread_;
113 scoped_refptr<WebRtcMediaStreamTrackAdapter> track_adapter_;
114 };
115
116 TEST_F(WebRtcMediaStreamTrackAdapterTest, LocalAudioTrack) {
117 track_adapter_ = WebRtcMediaStreamTrackAdapter::CreateLocalTrackAdapter(
118 dependency_factory_.get(), main_thread_, CreateLocalAudioTrack());
119 EXPECT_TRUE(track_adapter_->is_initialized());
120 EXPECT_TRUE(!track_adapter_->web_track().IsNull());
121 EXPECT_EQ(track_adapter_->web_track().Source().GetType(),
122 blink::WebMediaStreamSource::kTypeAudio);
123 EXPECT_TRUE(track_adapter_->webrtc_track());
124 EXPECT_EQ(track_adapter_->webrtc_track()->kind(),
125 webrtc::MediaStreamTrackInterface::kAudioKind);
126 EXPECT_EQ(track_adapter_->webrtc_track()->id().c_str(),
127 track_adapter_->web_track().Id());
128 EXPECT_TRUE(track_adapter_->GetLocalTrackAudioSinkForTesting());
129 EXPECT_EQ(
130 track_adapter_->GetLocalTrackAudioSinkForTesting()->webrtc_audio_track(),
131 track_adapter_->webrtc_track());
132 }
133
134 TEST_F(WebRtcMediaStreamTrackAdapterTest, LocalVideoTrack) {
135 track_adapter_ = WebRtcMediaStreamTrackAdapter::CreateLocalTrackAdapter(
136 dependency_factory_.get(), main_thread_, CreateLocalVideoTrack());
137 EXPECT_TRUE(track_adapter_->is_initialized());
138 EXPECT_TRUE(!track_adapter_->web_track().IsNull());
139 EXPECT_EQ(track_adapter_->web_track().Source().GetType(),
140 blink::WebMediaStreamSource::kTypeVideo);
141 EXPECT_TRUE(track_adapter_->webrtc_track());
142 EXPECT_EQ(track_adapter_->webrtc_track()->kind(),
143 webrtc::MediaStreamTrackInterface::kVideoKind);
144 EXPECT_EQ(track_adapter_->webrtc_track()->id().c_str(),
145 track_adapter_->web_track().Id());
146 EXPECT_TRUE(track_adapter_->GetLocalTrackVideoSinkForTesting());
147 EXPECT_EQ(
148 track_adapter_->GetLocalTrackVideoSinkForTesting()->webrtc_video_track(),
149 track_adapter_->webrtc_track());
150 }
151
152 TEST_F(WebRtcMediaStreamTrackAdapterTest, RemoteAudioTrack) {
153 scoped_refptr<MockWebRtcAudioTrack> webrtc_track =
154 MockWebRtcAudioTrack::Create("remote_audio_track");
155 dependency_factory_->GetWebRtcSignalingThread()->PostTask(
156 FROM_HERE,
157 base::Bind(&WebRtcMediaStreamTrackAdapterTest::CreateRemoteTrackAdapter,
158 base::Unretained(this), webrtc_track.get()));
159 RunMessageLoopsUntilIdle();
160 DCHECK(track_adapter_);
161 EXPECT_TRUE(track_adapter_->is_initialized());
162 EXPECT_TRUE(!track_adapter_->web_track().IsNull());
163 EXPECT_EQ(track_adapter_->web_track().Source().GetType(),
164 blink::WebMediaStreamSource::kTypeAudio);
165 EXPECT_TRUE(track_adapter_->webrtc_track());
166 EXPECT_EQ(track_adapter_->webrtc_track()->kind(),
167 webrtc::MediaStreamTrackInterface::kAudioKind);
168 EXPECT_EQ(track_adapter_->webrtc_track()->id().c_str(),
169 track_adapter_->web_track().Id());
170 EXPECT_TRUE(track_adapter_->GetRemoteAudioTrackAdapterForTesting());
171 EXPECT_TRUE(
172 track_adapter_->GetRemoteAudioTrackAdapterForTesting()->initialized());
173 }
174
175 TEST_F(WebRtcMediaStreamTrackAdapterTest, RemoteVideoTrack) {
176 scoped_refptr<MockWebRtcVideoTrack> webrtc_track =
177 MockWebRtcVideoTrack::Create("remote_video_track");
178 dependency_factory_->GetWebRtcSignalingThread()->PostTask(
179 FROM_HERE,
180 base::Bind(&WebRtcMediaStreamTrackAdapterTest::CreateRemoteTrackAdapter,
181 base::Unretained(this), webrtc_track.get()));
182 RunMessageLoopsUntilIdle();
183 DCHECK(track_adapter_);
184 EXPECT_TRUE(track_adapter_->is_initialized());
185 EXPECT_TRUE(!track_adapter_->web_track().IsNull());
186 EXPECT_EQ(track_adapter_->web_track().Source().GetType(),
187 blink::WebMediaStreamSource::kTypeVideo);
188 EXPECT_TRUE(track_adapter_->webrtc_track());
189 EXPECT_EQ(track_adapter_->webrtc_track()->kind(),
190 webrtc::MediaStreamTrackInterface::kVideoKind);
191 EXPECT_EQ(track_adapter_->webrtc_track()->id().c_str(),
192 track_adapter_->web_track().Id());
193 EXPECT_TRUE(track_adapter_->GetRemoteVideoTrackAdapterForTesting());
194 EXPECT_TRUE(
195 track_adapter_->GetRemoteVideoTrackAdapterForTesting()->initialized());
196 }
197
198 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/media/webrtc/webrtc_media_stream_track_adapter.cc ('k') | content/test/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698