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

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: Resolving Comments 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 // 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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698