| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "base/bind.h" | 5 #include "base/bind.h" |
| 6 #include "base/environment.h" | 6 #include "base/environment.h" |
| 7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
| 8 #include "base/message_loop.h" | 8 #include "base/message_loop.h" |
| 9 #include "base/process_util.h" | 9 #include "base/process_util.h" |
| 10 #include "base/sync_socket.h" | 10 #include "base/sync_socket.h" |
| 11 #include "content/browser/browser_thread_impl.h" | 11 #include "content/browser/browser_thread_impl.h" |
| 12 #include "content/browser/renderer_host/media/audio_renderer_host.h" | 12 #include "content/browser/renderer_host/media/audio_renderer_host.h" |
| 13 #include "content/browser/renderer_host/media/mock_media_observer.h" | 13 #include "content/browser/renderer_host/media/mock_media_observer.h" |
| 14 #include "content/common/media/audio_messages.h" | 14 #include "content/common/media/audio_messages.h" |
| 15 #include "content/test/mock_resource_context.h" | |
| 16 #include "ipc/ipc_message_utils.h" | 15 #include "ipc/ipc_message_utils.h" |
| 17 #include "media/audio/audio_manager.h" | 16 #include "media/audio/audio_manager.h" |
| 18 #include "media/audio/fake_audio_output_stream.h" | 17 #include "media/audio/fake_audio_output_stream.h" |
| 19 #include "net/url_request/url_request_context.h" | 18 #include "net/url_request/url_request_context.h" |
| 20 #include "testing/gmock/include/gmock/gmock.h" | 19 #include "testing/gmock/include/gmock/gmock.h" |
| 21 #include "testing/gtest/include/gtest/gtest.h" | 20 #include "testing/gtest/include/gtest/gtest.h" |
| 22 | 21 |
| 23 using ::testing::_; | 22 using ::testing::_; |
| 24 using ::testing::AtLeast; | 23 using ::testing::AtLeast; |
| 25 using ::testing::DoAll; | 24 using ::testing::DoAll; |
| (...skipping 11 matching lines...) Expand all Loading... |
| 37 static bool IsRunningHeadless() { | 36 static bool IsRunningHeadless() { |
| 38 scoped_ptr<base::Environment> env(base::Environment::Create()); | 37 scoped_ptr<base::Environment> env(base::Environment::Create()); |
| 39 if (env->HasVar("CHROME_HEADLESS")) | 38 if (env->HasVar("CHROME_HEADLESS")) |
| 40 return true; | 39 return true; |
| 41 return false; | 40 return false; |
| 42 } | 41 } |
| 43 | 42 |
| 44 class MockAudioRendererHost : public AudioRendererHost { | 43 class MockAudioRendererHost : public AudioRendererHost { |
| 45 public: | 44 public: |
| 46 explicit MockAudioRendererHost( | 45 explicit MockAudioRendererHost( |
| 47 content::ResourceContext* resource_context, | 46 AudioManager* audio_manager, |
| 48 AudioManager* audio_manager) | 47 content::MediaObserver* media_observer) |
| 49 : AudioRendererHost(resource_context, audio_manager), | 48 : AudioRendererHost(audio_manager, media_observer), |
| 50 shared_memory_length_(0) { | 49 shared_memory_length_(0) { |
| 51 } | 50 } |
| 52 | 51 |
| 53 virtual ~MockAudioRendererHost() { | 52 virtual ~MockAudioRendererHost() { |
| 54 // Make sure all audio streams have been deleted. | 53 // Make sure all audio streams have been deleted. |
| 55 EXPECT_EQ(0u, audio_entries_.size()); | 54 EXPECT_EQ(0u, audio_entries_.size()); |
| 56 } | 55 } |
| 57 | 56 |
| 58 // A list of mock methods. | 57 // A list of mock methods. |
| 59 MOCK_METHOD2(OnStreamCreated, | 58 MOCK_METHOD2(OnStreamCreated, |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 157 // Create a message loop so AudioRendererHost can use it. | 156 // Create a message loop so AudioRendererHost can use it. |
| 158 message_loop_.reset(new MessageLoop(MessageLoop::TYPE_IO)); | 157 message_loop_.reset(new MessageLoop(MessageLoop::TYPE_IO)); |
| 159 | 158 |
| 160 // Claim to be on both the UI and IO threads to pass all the DCHECKS. | 159 // Claim to be on both the UI and IO threads to pass all the DCHECKS. |
| 161 io_thread_.reset(new BrowserThreadImpl(BrowserThread::IO, | 160 io_thread_.reset(new BrowserThreadImpl(BrowserThread::IO, |
| 162 message_loop_.get())); | 161 message_loop_.get())); |
| 163 ui_thread_.reset(new BrowserThreadImpl(BrowserThread::UI, | 162 ui_thread_.reset(new BrowserThreadImpl(BrowserThread::UI, |
| 164 message_loop_.get())); | 163 message_loop_.get())); |
| 165 audio_manager_.reset(AudioManager::Create()); | 164 audio_manager_.reset(AudioManager::Create()); |
| 166 observer_.reset(new MockMediaObserver()); | 165 observer_.reset(new MockMediaObserver()); |
| 167 resource_context_.set_media_observer(observer_.get()); | 166 host_ = new MockAudioRendererHost(audio_manager_.get(), observer_.get()); |
| 168 host_ = new MockAudioRendererHost(&resource_context_, audio_manager_.get()); | |
| 169 | 167 |
| 170 // Simulate IPC channel connected. | 168 // Simulate IPC channel connected. |
| 171 host_->OnChannelConnected(base::GetCurrentProcId()); | 169 host_->OnChannelConnected(base::GetCurrentProcId()); |
| 172 } | 170 } |
| 173 | 171 |
| 174 virtual void TearDown() { | 172 virtual void TearDown() { |
| 175 // Simulate closing the IPC channel. | 173 // Simulate closing the IPC channel. |
| 176 host_->OnChannelClosing(); | 174 host_->OnChannelClosing(); |
| 177 | 175 |
| 178 // Release the reference to the mock object. The object will be destructed | 176 // Release the reference to the mock object. The object will be destructed |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 306 void EnableRealDevice() { mock_stream_ = false; } | 304 void EnableRealDevice() { mock_stream_ = false; } |
| 307 | 305 |
| 308 private: | 306 private: |
| 309 bool mock_stream_; | 307 bool mock_stream_; |
| 310 scoped_ptr<MockMediaObserver> observer_; | 308 scoped_ptr<MockMediaObserver> observer_; |
| 311 scoped_refptr<MockAudioRendererHost> host_; | 309 scoped_refptr<MockAudioRendererHost> host_; |
| 312 scoped_ptr<MessageLoop> message_loop_; | 310 scoped_ptr<MessageLoop> message_loop_; |
| 313 scoped_ptr<BrowserThreadImpl> io_thread_; | 311 scoped_ptr<BrowserThreadImpl> io_thread_; |
| 314 scoped_ptr<BrowserThreadImpl> ui_thread_; | 312 scoped_ptr<BrowserThreadImpl> ui_thread_; |
| 315 scoped_ptr<AudioManager> audio_manager_; | 313 scoped_ptr<AudioManager> audio_manager_; |
| 316 content::MockResourceContext resource_context_; | |
| 317 | 314 |
| 318 DISALLOW_COPY_AND_ASSIGN(AudioRendererHostTest); | 315 DISALLOW_COPY_AND_ASSIGN(AudioRendererHostTest); |
| 319 }; | 316 }; |
| 320 | 317 |
| 321 TEST_F(AudioRendererHostTest, CreateAndClose) { | 318 TEST_F(AudioRendererHostTest, CreateAndClose) { |
| 322 if (!IsRunningHeadless()) | 319 if (!IsRunningHeadless()) |
| 323 EnableRealDevice(); | 320 EnableRealDevice(); |
| 324 | 321 |
| 325 Create(); | 322 Create(); |
| 326 Close(); | 323 Close(); |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 405 EnableRealDevice(); | 402 EnableRealDevice(); |
| 406 | 403 |
| 407 Create(); | 404 Create(); |
| 408 Play(); | 405 Play(); |
| 409 SimulateError(); | 406 SimulateError(); |
| 410 Close(); | 407 Close(); |
| 411 } | 408 } |
| 412 | 409 |
| 413 | 410 |
| 414 // TODO(hclam): Add tests for data conversation in low latency mode. | 411 // TODO(hclam): Add tests for data conversation in low latency mode. |
| OLD | NEW |