OLD | NEW |
---|---|
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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/browser/media/capture/web_contents_audio_input_stream.h" | 5 #include "content/browser/media/capture/web_contents_audio_input_stream.h" |
6 | 6 |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 | 8 |
9 #include <list> | 9 #include <list> |
10 | 10 |
(...skipping 15 matching lines...) Expand all Loading... | |
26 | 26 |
27 using ::testing::_; | 27 using ::testing::_; |
28 using ::testing::Assign; | 28 using ::testing::Assign; |
29 using ::testing::DoAll; | 29 using ::testing::DoAll; |
30 using ::testing::Invoke; | 30 using ::testing::Invoke; |
31 using ::testing::InvokeWithoutArgs; | 31 using ::testing::InvokeWithoutArgs; |
32 using ::testing::NotNull; | 32 using ::testing::NotNull; |
33 using ::testing::SaveArg; | 33 using ::testing::SaveArg; |
34 using ::testing::WithArgs; | 34 using ::testing::WithArgs; |
35 | 35 |
36 using media::AudioBus; | |
36 using media::AudioInputStream; | 37 using media::AudioInputStream; |
37 using media::AudioOutputStream; | 38 using media::AudioOutputStream; |
38 using media::AudioParameters; | 39 using media::AudioParameters; |
40 using media::AudioPushSink; | |
39 using media::SineWaveAudioSource; | 41 using media::SineWaveAudioSource; |
40 using media::VirtualAudioInputStream; | 42 using media::VirtualAudioInputStream; |
41 using media::VirtualAudioOutputStream; | 43 using media::VirtualAudioOutputStream; |
42 | 44 |
43 namespace content { | 45 namespace content { |
44 | 46 |
45 namespace { | 47 namespace { |
46 | 48 |
47 const int kRenderProcessId = 123; | 49 const int kRenderProcessId = 123; |
48 const int kRenderFrameId = 456; | 50 const int kRenderFrameId = 456; |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
112 ON_CALL(*this, SetVolume(_)) | 114 ON_CALL(*this, SetVolume(_)) |
113 .WillByDefault(Invoke(&real_, &VirtualAudioInputStream::SetVolume)); | 115 .WillByDefault(Invoke(&real_, &VirtualAudioInputStream::SetVolume)); |
114 ON_CALL(*this, GetVolume()) | 116 ON_CALL(*this, GetVolume()) |
115 .WillByDefault(Invoke(&real_, &VirtualAudioInputStream::GetVolume)); | 117 .WillByDefault(Invoke(&real_, &VirtualAudioInputStream::GetVolume)); |
116 ON_CALL(*this, SetAutomaticGainControl(_)) | 118 ON_CALL(*this, SetAutomaticGainControl(_)) |
117 .WillByDefault( | 119 .WillByDefault( |
118 Invoke(&real_, &VirtualAudioInputStream::SetAutomaticGainControl)); | 120 Invoke(&real_, &VirtualAudioInputStream::SetAutomaticGainControl)); |
119 ON_CALL(*this, GetAutomaticGainControl()) | 121 ON_CALL(*this, GetAutomaticGainControl()) |
120 .WillByDefault( | 122 .WillByDefault( |
121 Invoke(&real_, &VirtualAudioInputStream::GetAutomaticGainControl)); | 123 Invoke(&real_, &VirtualAudioInputStream::GetAutomaticGainControl)); |
122 ON_CALL(*this, AddOutputStream(NotNull(), _)) | 124 ON_CALL(*this, AddInputProvider(NotNull(), _)) |
123 .WillByDefault( | 125 .WillByDefault( |
124 Invoke(&real_, &VirtualAudioInputStream::AddOutputStream)); | 126 Invoke(&real_, &VirtualAudioInputStream::AddInputProvider)); |
125 ON_CALL(*this, RemoveOutputStream(NotNull(), _)) | 127 ON_CALL(*this, RemoveInputProvider(NotNull(), _)) |
126 .WillByDefault( | 128 .WillByDefault( |
127 Invoke(&real_, &VirtualAudioInputStream::RemoveOutputStream)); | 129 Invoke(&real_, &VirtualAudioInputStream::RemoveInputProvider)); |
128 } | 130 } |
129 | 131 |
130 ~MockVirtualAudioInputStream() { | 132 ~MockVirtualAudioInputStream() { |
131 DCHECK(real_stream_is_closed_); | 133 DCHECK(real_stream_is_closed_); |
132 } | 134 } |
133 | 135 |
134 MOCK_METHOD0(Open, bool()); | 136 MOCK_METHOD0(Open, bool()); |
135 MOCK_METHOD1(Start, void(AudioInputStream::AudioInputCallback*)); | 137 MOCK_METHOD1(Start, void(AudioInputStream::AudioInputCallback*)); |
136 MOCK_METHOD0(Stop, void()); | 138 MOCK_METHOD0(Stop, void()); |
137 MOCK_METHOD0(Close, void()); | 139 MOCK_METHOD0(Close, void()); |
138 MOCK_METHOD0(GetMaxVolume, double()); | 140 MOCK_METHOD0(GetMaxVolume, double()); |
139 MOCK_METHOD1(SetVolume, void(double)); | 141 MOCK_METHOD1(SetVolume, void(double)); |
140 MOCK_METHOD0(GetVolume, double()); | 142 MOCK_METHOD0(GetVolume, double()); |
141 MOCK_METHOD1(SetAutomaticGainControl, bool(bool)); | 143 MOCK_METHOD1(SetAutomaticGainControl, bool(bool)); |
142 MOCK_METHOD0(GetAutomaticGainControl, bool()); | 144 MOCK_METHOD0(GetAutomaticGainControl, bool()); |
143 MOCK_METHOD2(AddOutputStream, void(VirtualAudioOutputStream*, | 145 MOCK_METHOD2(AddInputProvider, |
144 const AudioParameters&)); | 146 void(media::AudioConverter::InputCallback*, |
145 MOCK_METHOD2(RemoveOutputStream, void(VirtualAudioOutputStream*, | 147 const AudioParameters&)); |
146 const AudioParameters&)); | 148 MOCK_METHOD2(RemoveInputProvider, |
149 void(media::AudioConverter::InputCallback*, | |
150 const AudioParameters&)); | |
147 | 151 |
148 private: | 152 private: |
149 void OnRealStreamHasClosed(VirtualAudioInputStream* stream) { | 153 void OnRealStreamHasClosed(VirtualAudioInputStream* stream) { |
150 DCHECK_EQ(&real_, stream); | 154 DCHECK_EQ(&real_, stream); |
151 DCHECK(!real_stream_is_closed_); | 155 DCHECK(!real_stream_is_closed_); |
152 real_stream_is_closed_ = true; | 156 real_stream_is_closed_ = true; |
153 } | 157 } |
154 | 158 |
155 VirtualAudioInputStream real_; | 159 VirtualAudioInputStream real_; |
156 bool real_stream_is_closed_; | 160 bool real_stream_is_closed_; |
(...skipping 11 matching lines...) Expand all Loading... | |
168 uint32_t hardware_delay_bytes, | 172 uint32_t hardware_delay_bytes, |
169 double volume)); | 173 double volume)); |
170 MOCK_METHOD1(OnError, void(AudioInputStream* stream)); | 174 MOCK_METHOD1(OnError, void(AudioInputStream* stream)); |
171 | 175 |
172 private: | 176 private: |
173 DISALLOW_COPY_AND_ASSIGN(MockAudioInputCallback); | 177 DISALLOW_COPY_AND_ASSIGN(MockAudioInputCallback); |
174 }; | 178 }; |
175 | 179 |
176 } // namespace | 180 } // namespace |
177 | 181 |
178 class WebContentsAudioInputStreamTest : public testing::Test { | 182 class WebContentsAudioInputStreamTest : public testing::TestWithParam<bool> { |
179 public: | 183 public: |
180 WebContentsAudioInputStreamTest() | 184 WebContentsAudioInputStreamTest() |
181 : thread_bundle_(new TestBrowserThreadBundle( | 185 : thread_bundle_(new TestBrowserThreadBundle( |
182 TestBrowserThreadBundle::REAL_IO_THREAD)), | 186 TestBrowserThreadBundle::REAL_IO_THREAD)), |
183 audio_thread_("Audio thread"), | 187 audio_thread_("Audio thread"), |
184 mock_mirroring_manager_(new MockAudioMirroringManager()), | 188 mock_mirroring_manager_(new MockAudioMirroringManager()), |
185 mock_tracker_(new MockWebContentsTracker()), | 189 mock_tracker_(new MockWebContentsTracker()), |
186 mock_vais_(NULL), | 190 mock_vais_(NULL), |
187 wcais_(NULL), | 191 wcais_(NULL), |
188 destination_(NULL), | 192 destination_(NULL), |
189 current_render_process_id_(kRenderProcessId), | 193 current_render_process_id_(kRenderProcessId), |
190 current_render_frame_id_(kRenderFrameId), | 194 current_render_frame_id_(kRenderFrameId), |
191 on_data_event_(false, false) { | 195 on_data_event_(false, false) { |
192 audio_thread_.Start(); | 196 audio_thread_.Start(); |
193 } | 197 } |
194 | 198 |
195 ~WebContentsAudioInputStreamTest() override { | 199 ~WebContentsAudioInputStreamTest() override { |
196 audio_thread_.Stop(); | 200 audio_thread_.Stop(); |
197 thread_bundle_.reset(); | 201 thread_bundle_.reset(); |
198 | 202 |
199 DCHECK(!mock_vais_); | 203 DCHECK(!mock_vais_); |
200 DCHECK(!wcais_); | 204 DCHECK(!wcais_); |
201 EXPECT_FALSE(destination_); | 205 EXPECT_FALSE(destination_); |
202 DCHECK(streams_.empty()); | 206 DCHECK(streams_.empty()); |
203 DCHECK(sources_.empty()); | 207 DCHECK(sources_.empty()); |
204 } | 208 } |
205 | 209 |
210 // If this value is true, we are testing a WebContentsAudioInputStream | |
211 // instance, which requests duplicate audio. | |
212 // Otherwise, we are testing a WebContentsAudioInputStream instance, which | |
213 // requests diverting audio. | |
214 bool is_duplication() { return GetParam(); } | |
miu
2016/05/28 02:45:00
const, please: bool is_duplication() const { retur
qiangchen
2016/05/31 21:17:33
Done.
| |
215 | |
206 void Open() { | 216 void Open() { |
207 mock_vais_ = new MockVirtualAudioInputStream(audio_thread_.task_runner()); | 217 mock_vais_ = new MockVirtualAudioInputStream(audio_thread_.task_runner()); |
208 EXPECT_CALL(*mock_vais_, Open()); | 218 EXPECT_CALL(*mock_vais_, Open()); |
209 EXPECT_CALL(*mock_vais_, Close()); // At Close() time. | 219 EXPECT_CALL(*mock_vais_, Close()); // At Close() time. |
210 | 220 |
211 ASSERT_EQ(kRenderProcessId, current_render_process_id_); | 221 ASSERT_EQ(kRenderProcessId, current_render_process_id_); |
212 ASSERT_EQ(kRenderFrameId, current_render_frame_id_); | 222 ASSERT_EQ(kRenderFrameId, current_render_frame_id_); |
213 EXPECT_CALL(*mock_tracker_.get(), | 223 EXPECT_CALL(*mock_tracker_.get(), |
214 Start(kRenderProcessId, kRenderFrameId, _)) | 224 Start(kRenderProcessId, kRenderFrameId, _)) |
215 .WillOnce(DoAll( | 225 .WillOnce(DoAll( |
216 SaveArg<2>(&change_callback_), | 226 SaveArg<2>(&change_callback_), |
217 WithArgs<0, 1>(Invoke(this, | 227 WithArgs<0, 1>(Invoke(this, |
218 &WebContentsAudioInputStreamTest:: | 228 &WebContentsAudioInputStreamTest:: |
219 SimulateChangeCallback)))); | 229 SimulateChangeCallback)))); |
220 | 230 |
221 EXPECT_CALL(*mock_tracker_.get(), Stop()); // At Close() time. | 231 EXPECT_CALL(*mock_tracker_.get(), Stop()); // At Close() time. |
222 | 232 |
223 wcais_ = new WebContentsAudioInputStream( | 233 wcais_ = new WebContentsAudioInputStream( |
224 current_render_process_id_, current_render_frame_id_, | 234 current_render_process_id_, current_render_frame_id_, |
225 mock_mirroring_manager_.get(), | 235 mock_mirroring_manager_.get(), mock_tracker_, mock_vais_, |
226 mock_tracker_, mock_vais_); | 236 is_duplication()); |
227 wcais_->Open(); | 237 wcais_->Open(); |
228 } | 238 } |
229 | 239 |
230 void Start() { | 240 void Start() { |
231 EXPECT_CALL(*mock_vais_, Start(&mock_input_callback_)); | 241 EXPECT_CALL(*mock_vais_, Start(&mock_input_callback_)); |
232 EXPECT_CALL(*mock_vais_, Stop()); // At Stop() time. | 242 EXPECT_CALL(*mock_vais_, Stop()); // At Stop() time. |
233 | 243 |
234 EXPECT_CALL(*mock_mirroring_manager_, StartMirroring(NotNull())) | 244 EXPECT_CALL(*mock_mirroring_manager_, StartMirroring(NotNull())) |
235 .WillOnce(SaveArg<0>(&destination_)) | 245 .WillOnce(SaveArg<0>(&destination_)) |
236 .RetiresOnSaturation(); | 246 .RetiresOnSaturation(); |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
270 // Note: WCAIS posts a task to invoke | 280 // Note: WCAIS posts a task to invoke |
271 // MockAudioMirroringManager::StartMirroring() on the IO thread, which | 281 // MockAudioMirroringManager::StartMirroring() on the IO thread, which |
272 // causes our mock to set |destination_|. Block until that has happened. | 282 // causes our mock to set |destination_|. Block until that has happened. |
273 base::WaitableEvent done(false, false); | 283 base::WaitableEvent done(false, false); |
274 BrowserThread::PostTask( | 284 BrowserThread::PostTask( |
275 BrowserThread::IO, FROM_HERE, base::Bind( | 285 BrowserThread::IO, FROM_HERE, base::Bind( |
276 &base::WaitableEvent::Signal, base::Unretained(&done))); | 286 &base::WaitableEvent::Signal, base::Unretained(&done))); |
277 done.Wait(); | 287 done.Wait(); |
278 ASSERT_TRUE(destination_); | 288 ASSERT_TRUE(destination_); |
279 | 289 |
280 EXPECT_CALL(*mock_vais_, AddOutputStream(NotNull(), _)) | 290 EXPECT_CALL(*mock_vais_, AddInputProvider(NotNull(), _)) |
281 .RetiresOnSaturation(); | 291 .RetiresOnSaturation(); |
282 // Later, when stream is closed: | 292 // Later, when stream is closed: |
283 EXPECT_CALL(*mock_vais_, RemoveOutputStream(NotNull(), _)) | 293 EXPECT_CALL(*mock_vais_, RemoveInputProvider(NotNull(), _)) |
284 .RetiresOnSaturation(); | 294 .RetiresOnSaturation(); |
285 | 295 |
286 const AudioParameters& params = TestAudioParameters(); | 296 const AudioParameters& params = TestAudioParameters(); |
287 AudioOutputStream* const out = destination_->AddInput(params); | |
288 ASSERT_TRUE(out); | |
289 streams_.push_back(out); | |
290 EXPECT_TRUE(out->Open()); | |
291 SineWaveAudioSource* const source = new SineWaveAudioSource( | 297 SineWaveAudioSource* const source = new SineWaveAudioSource( |
292 params.channel_layout(), 200.0, params.sample_rate()); | 298 params.channel_layout(), 200.0, params.sample_rate()); |
293 sources_.push_back(source); | 299 sources_.push_back(source); |
294 out->Start(source); | 300 if (is_duplication()) { |
301 media::AudioPushSink* out = destination_->AddPushInput(params); | |
302 ASSERT_TRUE(out); | |
303 sinks_.push_back(out); | |
304 std::unique_ptr<media::AudioBus> audio_data = AudioBus::Create(params); | |
305 base::TimeTicks now = base::TimeTicks::Now(); | |
306 // 20 Audio buses are enough for all test cases. | |
307 const int kAudioBusesNumber = 20; | |
308 for (int i = 0; i < kAudioBusesNumber; i++) { | |
309 int frames = source->OnMoreData(audio_data.get(), 0, 0); | |
310 out->OnData(*(audio_data.get()), now); | |
311 now += base::TimeDelta::FromMillisecondsD( | |
312 frames * params.GetMicrosecondsPerFrame()); | |
313 } | |
314 } else { | |
315 AudioOutputStream* const out = destination_->AddInput(params); | |
316 ASSERT_TRUE(out); | |
317 streams_.push_back(out); | |
318 EXPECT_TRUE(out->Open()); | |
319 out->Start(source); | |
320 } | |
295 } | 321 } |
296 | 322 |
297 void RemoveOneInputInFIFOOrder() { | 323 void RemoveOneInputInFIFOOrder() { |
298 ASSERT_FALSE(streams_.empty()); | 324 if (is_duplication()) { |
299 AudioOutputStream* const out = streams_.front(); | 325 ASSERT_FALSE(sinks_.empty()); |
300 streams_.pop_front(); | 326 AudioPushSink* const out = sinks_.front(); |
301 out->Stop(); | 327 sinks_.pop_front(); |
302 out->Close(); // Self-deletes. | 328 out->Close(); // Self-deletes. |
329 } else { | |
330 ASSERT_FALSE(streams_.empty()); | |
331 AudioOutputStream* const out = streams_.front(); | |
332 streams_.pop_front(); | |
333 out->Stop(); | |
334 out->Close(); // Self-deletes. | |
335 } | |
303 ASSERT_TRUE(!sources_.empty()); | 336 ASSERT_TRUE(!sources_.empty()); |
304 delete sources_.front(); | 337 delete sources_.front(); |
305 sources_.pop_front(); | 338 sources_.pop_front(); |
306 } | 339 } |
307 | 340 |
308 void ChangeMirroringTarget() { | 341 void ChangeMirroringTarget() { |
309 const int next_render_process_id = | 342 const int next_render_process_id = |
310 current_render_process_id_ == kRenderProcessId ? | 343 current_render_process_id_ == kRenderProcessId ? |
311 kAnotherRenderProcessId : kRenderProcessId; | 344 kAnotherRenderProcessId : kRenderProcessId; |
312 const int next_render_frame_id = | 345 const int next_render_frame_id = |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
383 // to simulate: 1) calls to AddInput(); and 2) diverting audio data. | 416 // to simulate: 1) calls to AddInput(); and 2) diverting audio data. |
384 AudioMirroringManager::MirroringDestination* destination_; | 417 AudioMirroringManager::MirroringDestination* destination_; |
385 | 418 |
386 // Current target RenderFrame. These get flipped in ChangedMirroringTarget(). | 419 // Current target RenderFrame. These get flipped in ChangedMirroringTarget(). |
387 int current_render_process_id_; | 420 int current_render_process_id_; |
388 int current_render_frame_id_; | 421 int current_render_frame_id_; |
389 | 422 |
390 // Streams provided by calls to WebContentsAudioInputStream::AddInput(). Each | 423 // Streams provided by calls to WebContentsAudioInputStream::AddInput(). Each |
391 // is started with a simulated source of audio data. | 424 // is started with a simulated source of audio data. |
392 std::list<AudioOutputStream*> streams_; | 425 std::list<AudioOutputStream*> streams_; |
426 std::list<media::AudioPushSink*> sinks_; | |
393 std::list<SineWaveAudioSource*> sources_; // 1:1 with elements in streams_. | 427 std::list<SineWaveAudioSource*> sources_; // 1:1 with elements in streams_. |
394 | 428 |
395 base::WaitableEvent on_data_event_; | 429 base::WaitableEvent on_data_event_; |
396 | 430 |
397 DISALLOW_COPY_AND_ASSIGN(WebContentsAudioInputStreamTest); | 431 DISALLOW_COPY_AND_ASSIGN(WebContentsAudioInputStreamTest); |
398 }; | 432 }; |
399 | 433 |
400 #define RUN_ON_AUDIO_THREAD(method) \ | 434 #define RUN_ON_AUDIO_THREAD(method) \ |
401 RunOnAudioThread(base::Bind(&WebContentsAudioInputStreamTest::method, \ | 435 RunOnAudioThread(base::Bind(&WebContentsAudioInputStreamTest::method, \ |
402 base::Unretained(this))) | 436 base::Unretained(this))) |
403 | 437 |
404 TEST_F(WebContentsAudioInputStreamTest, OpenedButNeverStarted) { | 438 TEST_P(WebContentsAudioInputStreamTest, OpenedButNeverStarted) { |
405 RUN_ON_AUDIO_THREAD(Open); | 439 RUN_ON_AUDIO_THREAD(Open); |
406 RUN_ON_AUDIO_THREAD(Close); | 440 RUN_ON_AUDIO_THREAD(Close); |
407 } | 441 } |
408 | 442 |
409 TEST_F(WebContentsAudioInputStreamTest, MirroringNothing) { | 443 TEST_P(WebContentsAudioInputStreamTest, MirroringNothing) { |
410 RUN_ON_AUDIO_THREAD(Open); | 444 RUN_ON_AUDIO_THREAD(Open); |
411 RUN_ON_AUDIO_THREAD(Start); | 445 RUN_ON_AUDIO_THREAD(Start); |
412 WaitForData(); | 446 WaitForData(); |
413 RUN_ON_AUDIO_THREAD(Stop); | 447 RUN_ON_AUDIO_THREAD(Stop); |
414 RUN_ON_AUDIO_THREAD(Close); | 448 RUN_ON_AUDIO_THREAD(Close); |
415 } | 449 } |
416 | 450 |
417 TEST_F(WebContentsAudioInputStreamTest, MirroringOutputOutlivesSession) { | 451 TEST_P(WebContentsAudioInputStreamTest, MirroringOutputOutlivesSession) { |
418 RUN_ON_AUDIO_THREAD(Open); | 452 RUN_ON_AUDIO_THREAD(Open); |
419 RUN_ON_AUDIO_THREAD(Start); | 453 RUN_ON_AUDIO_THREAD(Start); |
420 RUN_ON_AUDIO_THREAD(AddAnotherInput); | 454 RUN_ON_AUDIO_THREAD(AddAnotherInput); |
421 WaitForData(); | 455 WaitForData(); |
422 RUN_ON_AUDIO_THREAD(Stop); | 456 RUN_ON_AUDIO_THREAD(Stop); |
423 RUN_ON_AUDIO_THREAD(Close); | 457 RUN_ON_AUDIO_THREAD(Close); |
424 RUN_ON_AUDIO_THREAD(RemoveOneInputInFIFOOrder); | 458 RUN_ON_AUDIO_THREAD(RemoveOneInputInFIFOOrder); |
425 } | 459 } |
426 | 460 |
427 TEST_F(WebContentsAudioInputStreamTest, MirroringOutputWithinSession) { | 461 TEST_P(WebContentsAudioInputStreamTest, MirroringOutputWithinSession) { |
428 RUN_ON_AUDIO_THREAD(Open); | 462 RUN_ON_AUDIO_THREAD(Open); |
429 RUN_ON_AUDIO_THREAD(Start); | 463 RUN_ON_AUDIO_THREAD(Start); |
430 RUN_ON_AUDIO_THREAD(AddAnotherInput); | 464 RUN_ON_AUDIO_THREAD(AddAnotherInput); |
431 WaitForData(); | 465 WaitForData(); |
432 RUN_ON_AUDIO_THREAD(RemoveOneInputInFIFOOrder); | 466 RUN_ON_AUDIO_THREAD(RemoveOneInputInFIFOOrder); |
433 RUN_ON_AUDIO_THREAD(Stop); | 467 RUN_ON_AUDIO_THREAD(Stop); |
434 RUN_ON_AUDIO_THREAD(Close); | 468 RUN_ON_AUDIO_THREAD(Close); |
435 } | 469 } |
436 | 470 |
437 TEST_F(WebContentsAudioInputStreamTest, MirroringNothingWithTargetChange) { | 471 TEST_P(WebContentsAudioInputStreamTest, MirroringNothingWithTargetChange) { |
438 RUN_ON_AUDIO_THREAD(Open); | 472 RUN_ON_AUDIO_THREAD(Open); |
439 RUN_ON_AUDIO_THREAD(Start); | 473 RUN_ON_AUDIO_THREAD(Start); |
440 RUN_ON_AUDIO_THREAD(ChangeMirroringTarget); | 474 RUN_ON_AUDIO_THREAD(ChangeMirroringTarget); |
441 RUN_ON_AUDIO_THREAD(Stop); | 475 RUN_ON_AUDIO_THREAD(Stop); |
442 RUN_ON_AUDIO_THREAD(Close); | 476 RUN_ON_AUDIO_THREAD(Close); |
443 } | 477 } |
444 | 478 |
445 TEST_F(WebContentsAudioInputStreamTest, MirroringOneStreamAfterTargetChange) { | 479 TEST_P(WebContentsAudioInputStreamTest, MirroringOneStreamAfterTargetChange) { |
446 RUN_ON_AUDIO_THREAD(Open); | 480 RUN_ON_AUDIO_THREAD(Open); |
447 RUN_ON_AUDIO_THREAD(Start); | 481 RUN_ON_AUDIO_THREAD(Start); |
448 RUN_ON_AUDIO_THREAD(ChangeMirroringTarget); | 482 RUN_ON_AUDIO_THREAD(ChangeMirroringTarget); |
449 RUN_ON_AUDIO_THREAD(AddAnotherInput); | 483 RUN_ON_AUDIO_THREAD(AddAnotherInput); |
450 WaitForData(); | 484 WaitForData(); |
451 RUN_ON_AUDIO_THREAD(Stop); | 485 RUN_ON_AUDIO_THREAD(Stop); |
452 RUN_ON_AUDIO_THREAD(Close); | 486 RUN_ON_AUDIO_THREAD(Close); |
453 RUN_ON_AUDIO_THREAD(RemoveOneInputInFIFOOrder); | 487 RUN_ON_AUDIO_THREAD(RemoveOneInputInFIFOOrder); |
454 } | 488 } |
455 | 489 |
456 TEST_F(WebContentsAudioInputStreamTest, MirroringOneStreamWithTargetChange) { | 490 TEST_P(WebContentsAudioInputStreamTest, MirroringOneStreamWithTargetChange) { |
457 RUN_ON_AUDIO_THREAD(Open); | 491 RUN_ON_AUDIO_THREAD(Open); |
458 RUN_ON_AUDIO_THREAD(Start); | 492 RUN_ON_AUDIO_THREAD(Start); |
459 RUN_ON_AUDIO_THREAD(AddAnotherInput); | 493 RUN_ON_AUDIO_THREAD(AddAnotherInput); |
460 WaitForData(); | 494 WaitForData(); |
461 RUN_ON_AUDIO_THREAD(ChangeMirroringTarget); | 495 RUN_ON_AUDIO_THREAD(ChangeMirroringTarget); |
462 RUN_ON_AUDIO_THREAD(RemoveOneInputInFIFOOrder); | 496 RUN_ON_AUDIO_THREAD(RemoveOneInputInFIFOOrder); |
463 RUN_ON_AUDIO_THREAD(AddAnotherInput); | 497 RUN_ON_AUDIO_THREAD(AddAnotherInput); |
464 WaitForData(); | 498 WaitForData(); |
465 RUN_ON_AUDIO_THREAD(Stop); | 499 RUN_ON_AUDIO_THREAD(Stop); |
466 RUN_ON_AUDIO_THREAD(Close); | 500 RUN_ON_AUDIO_THREAD(Close); |
467 RUN_ON_AUDIO_THREAD(RemoveOneInputInFIFOOrder); | 501 RUN_ON_AUDIO_THREAD(RemoveOneInputInFIFOOrder); |
468 } | 502 } |
469 | 503 |
470 TEST_F(WebContentsAudioInputStreamTest, MirroringLostTarget) { | 504 TEST_P(WebContentsAudioInputStreamTest, MirroringLostTarget) { |
471 RUN_ON_AUDIO_THREAD(Open); | 505 RUN_ON_AUDIO_THREAD(Open); |
472 RUN_ON_AUDIO_THREAD(Start); | 506 RUN_ON_AUDIO_THREAD(Start); |
473 RUN_ON_AUDIO_THREAD(AddAnotherInput); | 507 RUN_ON_AUDIO_THREAD(AddAnotherInput); |
474 WaitForData(); | 508 WaitForData(); |
475 RUN_ON_AUDIO_THREAD(LoseMirroringTarget); | 509 RUN_ON_AUDIO_THREAD(LoseMirroringTarget); |
476 RUN_ON_AUDIO_THREAD(RemoveOneInputInFIFOOrder); | 510 RUN_ON_AUDIO_THREAD(RemoveOneInputInFIFOOrder); |
477 RUN_ON_AUDIO_THREAD(Stop); | 511 RUN_ON_AUDIO_THREAD(Stop); |
478 RUN_ON_AUDIO_THREAD(Close); | 512 RUN_ON_AUDIO_THREAD(Close); |
479 } | 513 } |
480 | 514 |
481 TEST_F(WebContentsAudioInputStreamTest, MirroringMultipleStreamsAndTargets) { | 515 TEST_P(WebContentsAudioInputStreamTest, MirroringMultipleStreamsAndTargets) { |
482 RUN_ON_AUDIO_THREAD(Open); | 516 RUN_ON_AUDIO_THREAD(Open); |
483 RUN_ON_AUDIO_THREAD(Start); | 517 RUN_ON_AUDIO_THREAD(Start); |
484 RUN_ON_AUDIO_THREAD(AddAnotherInput); | 518 RUN_ON_AUDIO_THREAD(AddAnotherInput); |
485 WaitForData(); | 519 WaitForData(); |
486 RUN_ON_AUDIO_THREAD(AddAnotherInput); | 520 RUN_ON_AUDIO_THREAD(AddAnotherInput); |
487 RUN_ON_AUDIO_THREAD(AddAnotherInput); | 521 RUN_ON_AUDIO_THREAD(AddAnotherInput); |
488 RUN_ON_AUDIO_THREAD(AddAnotherInput); | 522 RUN_ON_AUDIO_THREAD(AddAnotherInput); |
489 WaitForData(); | 523 WaitForData(); |
490 RUN_ON_AUDIO_THREAD(ChangeMirroringTarget); | 524 RUN_ON_AUDIO_THREAD(ChangeMirroringTarget); |
491 RUN_ON_AUDIO_THREAD(RemoveOneInputInFIFOOrder); | 525 RUN_ON_AUDIO_THREAD(RemoveOneInputInFIFOOrder); |
492 WaitForData(); | 526 WaitForData(); |
493 RUN_ON_AUDIO_THREAD(RemoveOneInputInFIFOOrder); | 527 RUN_ON_AUDIO_THREAD(RemoveOneInputInFIFOOrder); |
494 RUN_ON_AUDIO_THREAD(RemoveOneInputInFIFOOrder); | 528 RUN_ON_AUDIO_THREAD(RemoveOneInputInFIFOOrder); |
495 RUN_ON_AUDIO_THREAD(AddAnotherInput); | 529 RUN_ON_AUDIO_THREAD(AddAnotherInput); |
496 WaitForData(); | 530 WaitForData(); |
497 RUN_ON_AUDIO_THREAD(RemoveOneInputInFIFOOrder); | 531 RUN_ON_AUDIO_THREAD(RemoveOneInputInFIFOOrder); |
498 WaitForData(); | 532 WaitForData(); |
499 RUN_ON_AUDIO_THREAD(ChangeMirroringTarget); | 533 RUN_ON_AUDIO_THREAD(ChangeMirroringTarget); |
500 RUN_ON_AUDIO_THREAD(RemoveOneInputInFIFOOrder); | 534 RUN_ON_AUDIO_THREAD(RemoveOneInputInFIFOOrder); |
501 RUN_ON_AUDIO_THREAD(Stop); | 535 RUN_ON_AUDIO_THREAD(Stop); |
502 RUN_ON_AUDIO_THREAD(Close); | 536 RUN_ON_AUDIO_THREAD(Close); |
503 } | 537 } |
504 | 538 |
539 INSTANTIATE_TEST_CASE_P(, WebContentsAudioInputStreamTest, ::testing::Bool()); | |
540 | |
505 } // namespace content | 541 } // namespace content |
OLD | NEW |