| Index: media/audio/audio_output_proxy_unittest.cc
|
| diff --git a/media/audio/audio_output_proxy_unittest.cc b/media/audio/audio_output_proxy_unittest.cc
|
| index 9900eb18341f9acd04b45002a370d8815f7b0b44..78588f9c9156d813216c13d15aaf69c5d0209364 100644
|
| --- a/media/audio/audio_output_proxy_unittest.cc
|
| +++ b/media/audio/audio_output_proxy_unittest.cc
|
| @@ -211,7 +211,7 @@ class AudioOutputProxyTest : public testing::Test {
|
| EXPECT_CALL(stream, Open())
|
| .WillOnce(Return(true));
|
|
|
| - AudioOutputProxy* proxy = new AudioOutputProxy(dispatcher);
|
| + AudioOutputProxy* proxy = dispatcher->CreateStreamProxy();
|
| EXPECT_TRUE(proxy->Open());
|
| CloseAndWaitForCloseTimer(proxy, &stream);
|
| }
|
| @@ -227,7 +227,7 @@ class AudioOutputProxyTest : public testing::Test {
|
| EXPECT_CALL(stream, SetVolume(_))
|
| .Times(1);
|
|
|
| - AudioOutputProxy* proxy = new AudioOutputProxy(dispatcher);
|
| + AudioOutputProxy* proxy = dispatcher->CreateStreamProxy();
|
| EXPECT_TRUE(proxy->Open());
|
|
|
| proxy->Start(&callback_);
|
| @@ -250,7 +250,7 @@ class AudioOutputProxyTest : public testing::Test {
|
| EXPECT_CALL(stream, SetVolume(_))
|
| .Times(1);
|
|
|
| - AudioOutputProxy* proxy = new AudioOutputProxy(dispatcher);
|
| + AudioOutputProxy* proxy = dispatcher->CreateStreamProxy();
|
| EXPECT_TRUE(proxy->Open());
|
|
|
| proxy->Start(&callback_);
|
| @@ -273,8 +273,8 @@ class AudioOutputProxyTest : public testing::Test {
|
| EXPECT_CALL(stream, Open())
|
| .WillOnce(Return(true));
|
|
|
| - AudioOutputProxy* proxy1 = new AudioOutputProxy(dispatcher);
|
| - AudioOutputProxy* proxy2 = new AudioOutputProxy(dispatcher);
|
| + AudioOutputProxy* proxy1 = dispatcher->CreateStreamProxy();
|
| + AudioOutputProxy* proxy2 = dispatcher->CreateStreamProxy();
|
| EXPECT_TRUE(proxy1->Open());
|
| EXPECT_TRUE(proxy2->Open());
|
| proxy1->Close();
|
| @@ -294,7 +294,7 @@ class AudioOutputProxyTest : public testing::Test {
|
| EXPECT_CALL(stream, Close())
|
| .Times(1);
|
|
|
| - AudioOutputProxy* proxy = new AudioOutputProxy(dispatcher);
|
| + AudioOutputProxy* proxy = dispatcher->CreateStreamProxy();
|
| EXPECT_FALSE(proxy->Open());
|
| proxy->Close();
|
| EXPECT_FALSE(stream.stop_called());
|
| @@ -309,7 +309,7 @@ class AudioOutputProxyTest : public testing::Test {
|
| EXPECT_CALL(stream, Open())
|
| .WillOnce(Return(true));
|
|
|
| - AudioOutputProxy* proxy = new AudioOutputProxy(dispatcher);
|
| + AudioOutputProxy* proxy = dispatcher->CreateStreamProxy();
|
| EXPECT_TRUE(proxy->Open());
|
|
|
| WaitForCloseTimer(&stream);
|
| @@ -329,7 +329,7 @@ class AudioOutputProxyTest : public testing::Test {
|
| EXPECT_CALL(stream, SetVolume(_))
|
| .Times(2);
|
|
|
| - AudioOutputProxy* proxy1 = new AudioOutputProxy(dispatcher);
|
| + AudioOutputProxy* proxy1 = dispatcher->CreateStreamProxy();
|
| EXPECT_TRUE(proxy1->Open());
|
|
|
| proxy1->Start(&callback_);
|
| @@ -337,7 +337,7 @@ class AudioOutputProxyTest : public testing::Test {
|
| proxy1->Stop();
|
|
|
| // The stream should now be idle and get reused by |proxy2|.
|
| - AudioOutputProxy* proxy2 = new AudioOutputProxy(dispatcher);
|
| + AudioOutputProxy* proxy2 = dispatcher->CreateStreamProxy();
|
| EXPECT_TRUE(proxy2->Open());
|
| proxy2->Start(&callback_);
|
| OnStart();
|
| @@ -367,8 +367,8 @@ class AudioOutputProxyTest : public testing::Test {
|
| EXPECT_CALL(stream2, SetVolume(_))
|
| .Times(1);
|
|
|
| - AudioOutputProxy* proxy1 = new AudioOutputProxy(dispatcher);
|
| - AudioOutputProxy* proxy2 = new AudioOutputProxy(dispatcher);
|
| + AudioOutputProxy* proxy1 = dispatcher->CreateStreamProxy();
|
| + AudioOutputProxy* proxy2 = dispatcher->CreateStreamProxy();
|
| EXPECT_TRUE(proxy1->Open());
|
| EXPECT_TRUE(proxy2->Open());
|
|
|
| @@ -395,7 +395,7 @@ class AudioOutputProxyTest : public testing::Test {
|
| EXPECT_CALL(stream, Open())
|
| .WillOnce(Return(true));
|
|
|
| - AudioOutputProxy* proxy = new AudioOutputProxy(dispatcher);
|
| + AudioOutputProxy* proxy = dispatcher->CreateStreamProxy();
|
| EXPECT_TRUE(proxy->Open());
|
|
|
| WaitForCloseTimer(&stream);
|
| @@ -420,6 +420,49 @@ class AudioOutputProxyTest : public testing::Test {
|
| proxy->Close();
|
| }
|
|
|
| + void DispatcherDestroyed_BeforeOpen(
|
| + std::unique_ptr<AudioOutputDispatcher> dispatcher) {
|
| + EXPECT_CALL(manager(), MakeAudioOutputStream(_, _, _)).Times(0);
|
| + AudioOutputProxy* proxy = dispatcher->CreateStreamProxy();
|
| + dispatcher.reset();
|
| + EXPECT_FALSE(proxy->Open());
|
| + proxy->Close();
|
| + }
|
| +
|
| + void DispatcherDestroyed_BeforeStart(
|
| + std::unique_ptr<AudioOutputDispatcher> dispatcher) {
|
| + MockAudioOutputStream stream(&manager_, params_);
|
| + EXPECT_CALL(manager(), MakeAudioOutputStream(_, _, _))
|
| + .WillOnce(Return(&stream));
|
| + EXPECT_CALL(stream, Open()).WillOnce(Return(true));
|
| + EXPECT_CALL(stream, Close()).Times(1);
|
| + AudioOutputProxy* proxy = dispatcher->CreateStreamProxy();
|
| + EXPECT_TRUE(proxy->Open());
|
| +
|
| + EXPECT_CALL(callback_, OnError(_)).Times(1);
|
| + dispatcher.reset();
|
| + proxy->Start(&callback_);
|
| + proxy->Stop();
|
| + proxy->Close();
|
| + }
|
| +
|
| + void DispatcherDestroyed_BeforeStop(
|
| + std::unique_ptr<AudioOutputDispatcher> dispatcher) {
|
| + MockAudioOutputStream stream(&manager_, params_);
|
| + EXPECT_CALL(manager(), MakeAudioOutputStream(_, _, _))
|
| + .WillOnce(Return(&stream));
|
| + EXPECT_CALL(stream, Open()).WillOnce(Return(true));
|
| + EXPECT_CALL(stream, Close()).Times(1);
|
| + EXPECT_CALL(stream, SetVolume(_)).Times(1);
|
| +
|
| + AudioOutputProxy* proxy = dispatcher->CreateStreamProxy();
|
| + EXPECT_TRUE(proxy->Open());
|
| + proxy->Start(&callback_);
|
| + dispatcher.reset();
|
| + proxy->Stop();
|
| + proxy->Close();
|
| + }
|
| +
|
| base::MessageLoop message_loop_;
|
| std::unique_ptr<AudioOutputDispatcherImpl> dispatcher_impl_;
|
| MockAudioManager manager_;
|
| @@ -457,12 +500,12 @@ class AudioOutputResamplerTest : public AudioOutputProxyTest {
|
| };
|
|
|
| TEST_F(AudioOutputProxyTest, CreateAndClose) {
|
| - AudioOutputProxy* proxy = new AudioOutputProxy(dispatcher_impl_.get());
|
| + AudioOutputProxy* proxy = dispatcher_impl_->CreateStreamProxy();
|
| proxy->Close();
|
| }
|
|
|
| TEST_F(AudioOutputResamplerTest, CreateAndClose) {
|
| - AudioOutputProxy* proxy = new AudioOutputProxy(resampler_.get());
|
| + AudioOutputProxy* proxy = resampler_->CreateStreamProxy();
|
| proxy->Close();
|
| }
|
|
|
| @@ -542,6 +585,30 @@ TEST_F(AudioOutputResamplerTest, StartFailed) {
|
| StartFailed(resampler_.get());
|
| }
|
|
|
| +TEST_F(AudioOutputProxyTest, DispatcherDestroyed_BeforeOpen) {
|
| + DispatcherDestroyed_BeforeOpen(std::move(dispatcher_impl_));
|
| +}
|
| +
|
| +TEST_F(AudioOutputResamplerTest, DispatcherDestroyed_BeforeOpen) {
|
| + DispatcherDestroyed_BeforeOpen(std::move(resampler_));
|
| +}
|
| +
|
| +TEST_F(AudioOutputProxyTest, DispatcherDestroyed_BeforeStart) {
|
| + DispatcherDestroyed_BeforeStart(std::move(dispatcher_impl_));
|
| +}
|
| +
|
| +TEST_F(AudioOutputResamplerTest, DispatcherDestroyed_BeforeStart) {
|
| + DispatcherDestroyed_BeforeStart(std::move(resampler_));
|
| +}
|
| +
|
| +TEST_F(AudioOutputProxyTest, DispatcherDestroyed_BeforeStop) {
|
| + DispatcherDestroyed_BeforeStop(std::move(dispatcher_impl_));
|
| +}
|
| +
|
| +TEST_F(AudioOutputResamplerTest, DispatcherDestroyed_BeforeStop) {
|
| + DispatcherDestroyed_BeforeStop(std::move(resampler_));
|
| +}
|
| +
|
| // Simulate AudioOutputStream::Create() failure with a low latency stream and
|
| // ensure AudioOutputResampler falls back to the high latency path.
|
| TEST_F(AudioOutputResamplerTest, LowLatencyCreateFailedFallback) {
|
| @@ -553,7 +620,7 @@ TEST_F(AudioOutputResamplerTest, LowLatencyCreateFailedFallback) {
|
| EXPECT_CALL(stream, Open())
|
| .WillOnce(Return(true));
|
|
|
| - AudioOutputProxy* proxy = new AudioOutputProxy(resampler_.get());
|
| + AudioOutputProxy* proxy = resampler_->CreateStreamProxy();
|
| EXPECT_TRUE(proxy->Open());
|
| CloseAndWaitForCloseTimer(proxy, &stream);
|
| }
|
| @@ -574,7 +641,7 @@ TEST_F(AudioOutputResamplerTest, LowLatencyOpenFailedFallback) {
|
| EXPECT_CALL(okay_stream, Open())
|
| .WillOnce(Return(true));
|
|
|
| - AudioOutputProxy* proxy = new AudioOutputProxy(resampler_.get());
|
| + AudioOutputProxy* proxy = resampler_->CreateStreamProxy();
|
| EXPECT_TRUE(proxy->Open());
|
| CloseAndWaitForCloseTimer(proxy, &okay_stream);
|
| }
|
| @@ -611,7 +678,7 @@ TEST_F(AudioOutputResamplerTest, HighLatencyFallbackFailed) {
|
| EXPECT_CALL(okay_stream, Open())
|
| .WillOnce(Return(true));
|
|
|
| - AudioOutputProxy* proxy = new AudioOutputProxy(resampler_.get());
|
| + AudioOutputProxy* proxy = resampler_->CreateStreamProxy();
|
| EXPECT_TRUE(proxy->Open());
|
| CloseAndWaitForCloseTimer(proxy, &okay_stream);
|
| }
|
| @@ -631,7 +698,7 @@ TEST_F(AudioOutputResamplerTest, AllFallbackFailed) {
|
| .Times(kFallbackCount)
|
| .WillRepeatedly(Return(static_cast<AudioOutputStream*>(NULL)));
|
|
|
| - AudioOutputProxy* proxy = new AudioOutputProxy(resampler_.get());
|
| + AudioOutputProxy* proxy = resampler_->CreateStreamProxy();
|
| EXPECT_FALSE(proxy->Open());
|
| proxy->Close();
|
| }
|
| @@ -661,19 +728,19 @@ TEST_F(AudioOutputResamplerTest, LowLatencyOpenEventuallyFails) {
|
| .Times(1);
|
|
|
| // Open and start the first proxy and stream.
|
| - AudioOutputProxy* proxy1 = new AudioOutputProxy(resampler_.get());
|
| + AudioOutputProxy* proxy1 = resampler_->CreateStreamProxy();
|
| EXPECT_TRUE(proxy1->Open());
|
| proxy1->Start(&callback_);
|
| OnStart();
|
|
|
| // Open and start the second proxy and stream.
|
| - AudioOutputProxy* proxy2 = new AudioOutputProxy(resampler_.get());
|
| + AudioOutputProxy* proxy2 = resampler_->CreateStreamProxy();
|
| EXPECT_TRUE(proxy2->Open());
|
| proxy2->Start(&callback_);
|
| OnStart();
|
|
|
| // Attempt to open the third stream which should fail.
|
| - AudioOutputProxy* proxy3 = new AudioOutputProxy(resampler_.get());
|
| + AudioOutputProxy* proxy3 = resampler_->CreateStreamProxy();
|
| EXPECT_FALSE(proxy3->Open());
|
| proxy3->Close();
|
|
|
| @@ -719,7 +786,7 @@ TEST_F(AudioOutputResamplerTest, FallbackRecovery) {
|
| _, _))
|
| .WillOnce(Return(&fake_stream));
|
| EXPECT_CALL(fake_stream, Open()).WillOnce(Return(true));
|
| - AudioOutputProxy* proxy = new AudioOutputProxy(resampler_.get());
|
| + AudioOutputProxy* proxy = resampler_->CreateStreamProxy();
|
| EXPECT_TRUE(proxy->Open());
|
| CloseAndWaitForCloseTimer(proxy, &fake_stream);
|
|
|
| @@ -742,7 +809,7 @@ TEST_F(AudioOutputResamplerTest, FallbackRecovery) {
|
|
|
| // Stream1 should be able to successfully open and start.
|
| EXPECT_CALL(real_stream, Open()).WillOnce(Return(true));
|
| - proxy = new AudioOutputProxy(resampler_.get());
|
| + proxy = resampler_->CreateStreamProxy();
|
| EXPECT_TRUE(proxy->Open());
|
| CloseAndWaitForCloseTimer(proxy, &real_stream);
|
| }
|
|
|