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

Side by Side Diff: content/browser/media/capture/web_contents_audio_input_stream_unittest.cc

Issue 1897953003: Unmute Tab Audio For Desktop Share (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Unittest Created 4 years, 7 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
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
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
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
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 void SetIsDuplication(bool is_duplication) {
miu 2016/05/06 22:29:49 The is_duplication_ member (and this setter method
qiangchen 2016/05/10 22:36:53 Done.
211 is_duplication_ = is_duplication;
212 }
213
206 void Open() { 214 void Open() {
207 mock_vais_ = new MockVirtualAudioInputStream(audio_thread_.task_runner()); 215 mock_vais_ = new MockVirtualAudioInputStream(audio_thread_.task_runner());
208 EXPECT_CALL(*mock_vais_, Open()); 216 EXPECT_CALL(*mock_vais_, Open());
209 EXPECT_CALL(*mock_vais_, Close()); // At Close() time. 217 EXPECT_CALL(*mock_vais_, Close()); // At Close() time.
210 218
211 ASSERT_EQ(kRenderProcessId, current_render_process_id_); 219 ASSERT_EQ(kRenderProcessId, current_render_process_id_);
212 ASSERT_EQ(kRenderFrameId, current_render_frame_id_); 220 ASSERT_EQ(kRenderFrameId, current_render_frame_id_);
213 EXPECT_CALL(*mock_tracker_.get(), 221 EXPECT_CALL(*mock_tracker_.get(),
214 Start(kRenderProcessId, kRenderFrameId, _)) 222 Start(kRenderProcessId, kRenderFrameId, _))
215 .WillOnce(DoAll( 223 .WillOnce(DoAll(
216 SaveArg<2>(&change_callback_), 224 SaveArg<2>(&change_callback_),
217 WithArgs<0, 1>(Invoke(this, 225 WithArgs<0, 1>(Invoke(this,
218 &WebContentsAudioInputStreamTest:: 226 &WebContentsAudioInputStreamTest::
219 SimulateChangeCallback)))); 227 SimulateChangeCallback))));
220 228
221 EXPECT_CALL(*mock_tracker_.get(), Stop()); // At Close() time. 229 EXPECT_CALL(*mock_tracker_.get(), Stop()); // At Close() time.
222 230
223 wcais_ = new WebContentsAudioInputStream( 231 wcais_ = new WebContentsAudioInputStream(
224 current_render_process_id_, current_render_frame_id_, 232 current_render_process_id_, current_render_frame_id_,
225 mock_mirroring_manager_.get(), 233 mock_mirroring_manager_.get(), mock_tracker_, mock_vais_,
226 mock_tracker_, mock_vais_); 234 is_duplication_);
227 wcais_->Open(); 235 wcais_->Open();
228 } 236 }
229 237
230 void Start() { 238 void Start() {
231 EXPECT_CALL(*mock_vais_, Start(&mock_input_callback_)); 239 EXPECT_CALL(*mock_vais_, Start(&mock_input_callback_));
232 EXPECT_CALL(*mock_vais_, Stop()); // At Stop() time. 240 EXPECT_CALL(*mock_vais_, Stop()); // At Stop() time.
233 241
234 EXPECT_CALL(*mock_mirroring_manager_, StartMirroring(NotNull())) 242 EXPECT_CALL(*mock_mirroring_manager_, StartMirroring(NotNull()))
235 .WillOnce(SaveArg<0>(&destination_)) 243 .WillOnce(SaveArg<0>(&destination_))
236 .RetiresOnSaturation(); 244 .RetiresOnSaturation();
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
270 // Note: WCAIS posts a task to invoke 278 // Note: WCAIS posts a task to invoke
271 // MockAudioMirroringManager::StartMirroring() on the IO thread, which 279 // MockAudioMirroringManager::StartMirroring() on the IO thread, which
272 // causes our mock to set |destination_|. Block until that has happened. 280 // causes our mock to set |destination_|. Block until that has happened.
273 base::WaitableEvent done(false, false); 281 base::WaitableEvent done(false, false);
274 BrowserThread::PostTask( 282 BrowserThread::PostTask(
275 BrowserThread::IO, FROM_HERE, base::Bind( 283 BrowserThread::IO, FROM_HERE, base::Bind(
276 &base::WaitableEvent::Signal, base::Unretained(&done))); 284 &base::WaitableEvent::Signal, base::Unretained(&done)));
277 done.Wait(); 285 done.Wait();
278 ASSERT_TRUE(destination_); 286 ASSERT_TRUE(destination_);
279 287
280 EXPECT_CALL(*mock_vais_, AddOutputStream(NotNull(), _)) 288 EXPECT_CALL(*mock_vais_, AddInputProvider(NotNull(), _))
281 .RetiresOnSaturation(); 289 .RetiresOnSaturation();
282 // Later, when stream is closed: 290 // Later, when stream is closed:
283 EXPECT_CALL(*mock_vais_, RemoveOutputStream(NotNull(), _)) 291 EXPECT_CALL(*mock_vais_, RemoveInputProvider(NotNull(), _))
284 .RetiresOnSaturation(); 292 .RetiresOnSaturation();
285 293
286 const AudioParameters& params = TestAudioParameters(); 294 const AudioParameters& params = TestAudioParameters();
287 AudioOutputStream* const out = destination_->AddInput(params); 295 if (is_duplication_) {
288 ASSERT_TRUE(out); 296 media::AudioPushSink* out = destination_->AddPushInput(params);
289 streams_.push_back(out); 297 ASSERT_TRUE(out);
290 EXPECT_TRUE(out->Open()); 298 sinks_.push_back(out);
291 SineWaveAudioSource* const source = new SineWaveAudioSource( 299 SineWaveAudioSource* const source = new SineWaveAudioSource(
miu 2016/05/06 22:29:49 Please try to avoid duplicate code where possible:
qiangchen 2016/05/10 22:36:52 Done.
292 params.channel_layout(), 200.0, params.sample_rate()); 300 params.channel_layout(), 200.0, params.sample_rate());
293 sources_.push_back(source); 301 sources_.push_back(source);
294 out->Start(source); 302
303 std::unique_ptr<media::AudioBus> audio_data = AudioBus::Create(params);
304 base::TimeTicks now = base::TimeTicks::Now();
305 // 20 Audio buses are enough for all test cases.
306 const int kAudioBusesNumber = 20;
307 for (int i = 0; i < kAudioBusesNumber; i++) {
308 int frames = source->OnMoreData(audio_data.get(), 0, 0);
309 out->OnData(*(audio_data.get()), now);
310 now += base::TimeDelta::FromMillisecondsD(
311 frames * params.GetMicrosecondsPerFrame());
312 }
313 } else {
314 AudioOutputStream* const out = destination_->AddInput(params);
315 ASSERT_TRUE(out);
316 streams_.push_back(out);
317 EXPECT_TRUE(out->Open());
318 SineWaveAudioSource* const source = new SineWaveAudioSource(
319 params.channel_layout(), 200.0, params.sample_rate());
320 sources_.push_back(source);
321 out->Start(source);
322 }
295 } 323 }
296 324
297 void RemoveOneInputInFIFOOrder() { 325 void RemoveOneInputInFIFOOrder() {
298 ASSERT_FALSE(streams_.empty()); 326 if (is_duplication_) {
299 AudioOutputStream* const out = streams_.front(); 327 ASSERT_FALSE(sinks_.empty());
300 streams_.pop_front(); 328 AudioPushSink* const out = sinks_.front();
301 out->Stop(); 329 sinks_.pop_front();
302 out->Close(); // Self-deletes. 330 out->Close(); // Self-deletes.
303 ASSERT_TRUE(!sources_.empty()); 331 ASSERT_TRUE(!sources_.empty());
miu 2016/05/06 22:29:50 ditto (duplicate code): The last three lines here
qiangchen 2016/05/10 22:36:53 Done.
304 delete sources_.front(); 332 delete sources_.front();
305 sources_.pop_front(); 333 sources_.pop_front();
334 } else {
335 ASSERT_FALSE(streams_.empty());
336 AudioOutputStream* const out = streams_.front();
337 streams_.pop_front();
338 out->Stop();
339 out->Close(); // Self-deletes.
340 ASSERT_TRUE(!sources_.empty());
341 delete sources_.front();
342 sources_.pop_front();
343 }
306 } 344 }
307 345
308 void ChangeMirroringTarget() { 346 void ChangeMirroringTarget() {
309 const int next_render_process_id = 347 const int next_render_process_id =
310 current_render_process_id_ == kRenderProcessId ? 348 current_render_process_id_ == kRenderProcessId ?
311 kAnotherRenderProcessId : kRenderProcessId; 349 kAnotherRenderProcessId : kRenderProcessId;
312 const int next_render_frame_id = 350 const int next_render_frame_id =
313 current_render_frame_id_ == kRenderFrameId ? 351 current_render_frame_id_ == kRenderFrameId ?
314 kAnotherRenderFrameId : kRenderFrameId; 352 kAnotherRenderFrameId : kRenderFrameId;
315 353
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
383 // to simulate: 1) calls to AddInput(); and 2) diverting audio data. 421 // to simulate: 1) calls to AddInput(); and 2) diverting audio data.
384 AudioMirroringManager::MirroringDestination* destination_; 422 AudioMirroringManager::MirroringDestination* destination_;
385 423
386 // Current target RenderFrame. These get flipped in ChangedMirroringTarget(). 424 // Current target RenderFrame. These get flipped in ChangedMirroringTarget().
387 int current_render_process_id_; 425 int current_render_process_id_;
388 int current_render_frame_id_; 426 int current_render_frame_id_;
389 427
390 // Streams provided by calls to WebContentsAudioInputStream::AddInput(). Each 428 // Streams provided by calls to WebContentsAudioInputStream::AddInput(). Each
391 // is started with a simulated source of audio data. 429 // is started with a simulated source of audio data.
392 std::list<AudioOutputStream*> streams_; 430 std::list<AudioOutputStream*> streams_;
431 std::list<media::AudioPushSink*> sinks_;
393 std::list<SineWaveAudioSource*> sources_; // 1:1 with elements in streams_. 432 std::list<SineWaveAudioSource*> sources_; // 1:1 with elements in streams_.
394 433
434 // Set this value to true to test a WebContentsAudioInputStream instance,
435 // which requests duplicate audio.
436 // Otherwise, we are testing a WebContentsAudioInputStream instance, which
437 // requests diverting audio.
438 bool is_duplication_;
439
395 base::WaitableEvent on_data_event_; 440 base::WaitableEvent on_data_event_;
396 441
397 DISALLOW_COPY_AND_ASSIGN(WebContentsAudioInputStreamTest); 442 DISALLOW_COPY_AND_ASSIGN(WebContentsAudioInputStreamTest);
398 }; 443 };
399 444
400 #define RUN_ON_AUDIO_THREAD(method) \ 445 #define RUN_ON_AUDIO_THREAD(method) \
401 RunOnAudioThread(base::Bind(&WebContentsAudioInputStreamTest::method, \ 446 RunOnAudioThread(base::Bind(&WebContentsAudioInputStreamTest::method, \
402 base::Unretained(this))) 447 base::Unretained(this)))
403 448
404 TEST_F(WebContentsAudioInputStreamTest, OpenedButNeverStarted) { 449 TEST_P(WebContentsAudioInputStreamTest, OpenedButNeverStarted) {
450 SetIsDuplication(GetParam());
405 RUN_ON_AUDIO_THREAD(Open); 451 RUN_ON_AUDIO_THREAD(Open);
406 RUN_ON_AUDIO_THREAD(Close); 452 RUN_ON_AUDIO_THREAD(Close);
407 } 453 }
408 454
409 TEST_F(WebContentsAudioInputStreamTest, MirroringNothing) { 455 TEST_P(WebContentsAudioInputStreamTest, MirroringNothing) {
456 SetIsDuplication(GetParam());
410 RUN_ON_AUDIO_THREAD(Open); 457 RUN_ON_AUDIO_THREAD(Open);
411 RUN_ON_AUDIO_THREAD(Start); 458 RUN_ON_AUDIO_THREAD(Start);
412 WaitForData(); 459 WaitForData();
413 RUN_ON_AUDIO_THREAD(Stop); 460 RUN_ON_AUDIO_THREAD(Stop);
414 RUN_ON_AUDIO_THREAD(Close); 461 RUN_ON_AUDIO_THREAD(Close);
415 } 462 }
416 463
417 TEST_F(WebContentsAudioInputStreamTest, MirroringOutputOutlivesSession) { 464 TEST_P(WebContentsAudioInputStreamTest, MirroringOutputOutlivesSession) {
465 SetIsDuplication(GetParam());
418 RUN_ON_AUDIO_THREAD(Open); 466 RUN_ON_AUDIO_THREAD(Open);
419 RUN_ON_AUDIO_THREAD(Start); 467 RUN_ON_AUDIO_THREAD(Start);
420 RUN_ON_AUDIO_THREAD(AddAnotherInput); 468 RUN_ON_AUDIO_THREAD(AddAnotherInput);
421 WaitForData(); 469 WaitForData();
422 RUN_ON_AUDIO_THREAD(Stop); 470 RUN_ON_AUDIO_THREAD(Stop);
423 RUN_ON_AUDIO_THREAD(Close); 471 RUN_ON_AUDIO_THREAD(Close);
424 RUN_ON_AUDIO_THREAD(RemoveOneInputInFIFOOrder); 472 RUN_ON_AUDIO_THREAD(RemoveOneInputInFIFOOrder);
425 } 473 }
426 474
427 TEST_F(WebContentsAudioInputStreamTest, MirroringOutputWithinSession) { 475 TEST_P(WebContentsAudioInputStreamTest, MirroringOutputWithinSession) {
476 SetIsDuplication(GetParam());
428 RUN_ON_AUDIO_THREAD(Open); 477 RUN_ON_AUDIO_THREAD(Open);
429 RUN_ON_AUDIO_THREAD(Start); 478 RUN_ON_AUDIO_THREAD(Start);
430 RUN_ON_AUDIO_THREAD(AddAnotherInput); 479 RUN_ON_AUDIO_THREAD(AddAnotherInput);
431 WaitForData(); 480 WaitForData();
432 RUN_ON_AUDIO_THREAD(RemoveOneInputInFIFOOrder); 481 RUN_ON_AUDIO_THREAD(RemoveOneInputInFIFOOrder);
433 RUN_ON_AUDIO_THREAD(Stop); 482 RUN_ON_AUDIO_THREAD(Stop);
434 RUN_ON_AUDIO_THREAD(Close); 483 RUN_ON_AUDIO_THREAD(Close);
435 } 484 }
436 485
437 TEST_F(WebContentsAudioInputStreamTest, MirroringNothingWithTargetChange) { 486 TEST_P(WebContentsAudioInputStreamTest, MirroringNothingWithTargetChange) {
487 SetIsDuplication(GetParam());
438 RUN_ON_AUDIO_THREAD(Open); 488 RUN_ON_AUDIO_THREAD(Open);
439 RUN_ON_AUDIO_THREAD(Start); 489 RUN_ON_AUDIO_THREAD(Start);
440 RUN_ON_AUDIO_THREAD(ChangeMirroringTarget); 490 RUN_ON_AUDIO_THREAD(ChangeMirroringTarget);
441 RUN_ON_AUDIO_THREAD(Stop); 491 RUN_ON_AUDIO_THREAD(Stop);
442 RUN_ON_AUDIO_THREAD(Close); 492 RUN_ON_AUDIO_THREAD(Close);
443 } 493 }
444 494
445 TEST_F(WebContentsAudioInputStreamTest, MirroringOneStreamAfterTargetChange) { 495 TEST_P(WebContentsAudioInputStreamTest, MirroringOneStreamAfterTargetChange) {
496 SetIsDuplication(GetParam());
446 RUN_ON_AUDIO_THREAD(Open); 497 RUN_ON_AUDIO_THREAD(Open);
447 RUN_ON_AUDIO_THREAD(Start); 498 RUN_ON_AUDIO_THREAD(Start);
448 RUN_ON_AUDIO_THREAD(ChangeMirroringTarget); 499 RUN_ON_AUDIO_THREAD(ChangeMirroringTarget);
449 RUN_ON_AUDIO_THREAD(AddAnotherInput); 500 RUN_ON_AUDIO_THREAD(AddAnotherInput);
450 WaitForData(); 501 WaitForData();
451 RUN_ON_AUDIO_THREAD(Stop); 502 RUN_ON_AUDIO_THREAD(Stop);
452 RUN_ON_AUDIO_THREAD(Close); 503 RUN_ON_AUDIO_THREAD(Close);
453 RUN_ON_AUDIO_THREAD(RemoveOneInputInFIFOOrder); 504 RUN_ON_AUDIO_THREAD(RemoveOneInputInFIFOOrder);
454 } 505 }
455 506
456 TEST_F(WebContentsAudioInputStreamTest, MirroringOneStreamWithTargetChange) { 507 TEST_P(WebContentsAudioInputStreamTest, MirroringOneStreamWithTargetChange) {
508 SetIsDuplication(GetParam());
457 RUN_ON_AUDIO_THREAD(Open); 509 RUN_ON_AUDIO_THREAD(Open);
458 RUN_ON_AUDIO_THREAD(Start); 510 RUN_ON_AUDIO_THREAD(Start);
459 RUN_ON_AUDIO_THREAD(AddAnotherInput); 511 RUN_ON_AUDIO_THREAD(AddAnotherInput);
460 WaitForData(); 512 WaitForData();
461 RUN_ON_AUDIO_THREAD(ChangeMirroringTarget); 513 RUN_ON_AUDIO_THREAD(ChangeMirroringTarget);
462 RUN_ON_AUDIO_THREAD(RemoveOneInputInFIFOOrder); 514 RUN_ON_AUDIO_THREAD(RemoveOneInputInFIFOOrder);
463 RUN_ON_AUDIO_THREAD(AddAnotherInput); 515 RUN_ON_AUDIO_THREAD(AddAnotherInput);
464 WaitForData(); 516 WaitForData();
465 RUN_ON_AUDIO_THREAD(Stop); 517 RUN_ON_AUDIO_THREAD(Stop);
466 RUN_ON_AUDIO_THREAD(Close); 518 RUN_ON_AUDIO_THREAD(Close);
467 RUN_ON_AUDIO_THREAD(RemoveOneInputInFIFOOrder); 519 RUN_ON_AUDIO_THREAD(RemoveOneInputInFIFOOrder);
468 } 520 }
469 521
470 TEST_F(WebContentsAudioInputStreamTest, MirroringLostTarget) { 522 TEST_P(WebContentsAudioInputStreamTest, MirroringLostTarget) {
523 SetIsDuplication(GetParam());
471 RUN_ON_AUDIO_THREAD(Open); 524 RUN_ON_AUDIO_THREAD(Open);
472 RUN_ON_AUDIO_THREAD(Start); 525 RUN_ON_AUDIO_THREAD(Start);
473 RUN_ON_AUDIO_THREAD(AddAnotherInput); 526 RUN_ON_AUDIO_THREAD(AddAnotherInput);
474 WaitForData(); 527 WaitForData();
475 RUN_ON_AUDIO_THREAD(LoseMirroringTarget); 528 RUN_ON_AUDIO_THREAD(LoseMirroringTarget);
476 RUN_ON_AUDIO_THREAD(RemoveOneInputInFIFOOrder); 529 RUN_ON_AUDIO_THREAD(RemoveOneInputInFIFOOrder);
477 RUN_ON_AUDIO_THREAD(Stop); 530 RUN_ON_AUDIO_THREAD(Stop);
478 RUN_ON_AUDIO_THREAD(Close); 531 RUN_ON_AUDIO_THREAD(Close);
479 } 532 }
480 533
481 TEST_F(WebContentsAudioInputStreamTest, MirroringMultipleStreamsAndTargets) { 534 TEST_P(WebContentsAudioInputStreamTest, MirroringMultipleStreamsAndTargets) {
535 SetIsDuplication(GetParam());
482 RUN_ON_AUDIO_THREAD(Open); 536 RUN_ON_AUDIO_THREAD(Open);
483 RUN_ON_AUDIO_THREAD(Start); 537 RUN_ON_AUDIO_THREAD(Start);
484 RUN_ON_AUDIO_THREAD(AddAnotherInput); 538 RUN_ON_AUDIO_THREAD(AddAnotherInput);
485 WaitForData(); 539 WaitForData();
486 RUN_ON_AUDIO_THREAD(AddAnotherInput); 540 RUN_ON_AUDIO_THREAD(AddAnotherInput);
487 RUN_ON_AUDIO_THREAD(AddAnotherInput); 541 RUN_ON_AUDIO_THREAD(AddAnotherInput);
488 RUN_ON_AUDIO_THREAD(AddAnotherInput); 542 RUN_ON_AUDIO_THREAD(AddAnotherInput);
489 WaitForData(); 543 WaitForData();
490 RUN_ON_AUDIO_THREAD(ChangeMirroringTarget); 544 RUN_ON_AUDIO_THREAD(ChangeMirroringTarget);
491 RUN_ON_AUDIO_THREAD(RemoveOneInputInFIFOOrder); 545 RUN_ON_AUDIO_THREAD(RemoveOneInputInFIFOOrder);
492 WaitForData(); 546 WaitForData();
493 RUN_ON_AUDIO_THREAD(RemoveOneInputInFIFOOrder); 547 RUN_ON_AUDIO_THREAD(RemoveOneInputInFIFOOrder);
494 RUN_ON_AUDIO_THREAD(RemoveOneInputInFIFOOrder); 548 RUN_ON_AUDIO_THREAD(RemoveOneInputInFIFOOrder);
495 RUN_ON_AUDIO_THREAD(AddAnotherInput); 549 RUN_ON_AUDIO_THREAD(AddAnotherInput);
496 WaitForData(); 550 WaitForData();
497 RUN_ON_AUDIO_THREAD(RemoveOneInputInFIFOOrder); 551 RUN_ON_AUDIO_THREAD(RemoveOneInputInFIFOOrder);
498 WaitForData(); 552 WaitForData();
499 RUN_ON_AUDIO_THREAD(ChangeMirroringTarget); 553 RUN_ON_AUDIO_THREAD(ChangeMirroringTarget);
500 RUN_ON_AUDIO_THREAD(RemoveOneInputInFIFOOrder); 554 RUN_ON_AUDIO_THREAD(RemoveOneInputInFIFOOrder);
501 RUN_ON_AUDIO_THREAD(Stop); 555 RUN_ON_AUDIO_THREAD(Stop);
502 RUN_ON_AUDIO_THREAD(Close); 556 RUN_ON_AUDIO_THREAD(Close);
503 } 557 }
504 558
559 INSTANTIATE_TEST_CASE_P(, WebContentsAudioInputStreamTest, ::testing::Bool());
miu 2016/05/06 22:29:49 Great idea here! (to just run all the tests when
qiangchen 2016/05/10 22:36:52 Acknowledged.
560
505 } // namespace content 561 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698