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 "content/browser/renderer_host/media/audio_renderer_host.h" | 5 #include "content/browser/renderer_host/media/audio_renderer_host.h" |
6 | 6 |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 | 8 |
9 #include <memory> | 9 #include <memory> |
10 | 10 |
(...skipping 11 matching lines...) Expand all Loading... |
22 #include "content/common/media/audio_messages.h" | 22 #include "content/common/media/audio_messages.h" |
23 #include "content/public/browser/media_device_id.h" | 23 #include "content/public/browser/media_device_id.h" |
24 #include "content/public/common/content_switches.h" | 24 #include "content/public/common/content_switches.h" |
25 #include "content/public/test/mock_render_process_host.h" | 25 #include "content/public/test/mock_render_process_host.h" |
26 #include "content/public/test/test_browser_context.h" | 26 #include "content/public/test/test_browser_context.h" |
27 #include "content/public/test/test_browser_thread_bundle.h" | 27 #include "content/public/test/test_browser_thread_bundle.h" |
28 #include "ipc/ipc_message_utils.h" | 28 #include "ipc/ipc_message_utils.h" |
29 #include "media/audio/audio_system_impl.h" | 29 #include "media/audio/audio_system_impl.h" |
30 #include "media/audio/fake_audio_log_factory.h" | 30 #include "media/audio/fake_audio_log_factory.h" |
31 #include "media/audio/fake_audio_manager.h" | 31 #include "media/audio/fake_audio_manager.h" |
| 32 #include "media/audio/test_audio_thread.h" |
32 #include "media/base/bind_to_current_loop.h" | 33 #include "media/base/bind_to_current_loop.h" |
33 #include "media/base/media_switches.h" | 34 #include "media/base/media_switches.h" |
34 #include "testing/gmock/include/gmock/gmock.h" | 35 #include "testing/gmock/include/gmock/gmock.h" |
35 #include "testing/gtest/include/gtest/gtest.h" | 36 #include "testing/gtest/include/gtest/gtest.h" |
36 | 37 |
37 using ::testing::_; | 38 using ::testing::_; |
38 using ::testing::Assign; | 39 using ::testing::Assign; |
39 using ::testing::AtLeast; | 40 using ::testing::AtLeast; |
40 using ::testing::DoAll; | 41 using ::testing::DoAll; |
41 using ::testing::NotNull; | 42 using ::testing::NotNull; |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
90 MockRenderProcessHost::ShutdownForBadMessage(crash_report_mode); | 91 MockRenderProcessHost::ShutdownForBadMessage(crash_report_mode); |
91 auth_run_loop_->Quit(); | 92 auth_run_loop_->Quit(); |
92 } | 93 } |
93 | 94 |
94 private: | 95 private: |
95 base::RunLoop* auth_run_loop_; | 96 base::RunLoop* auth_run_loop_; |
96 }; | 97 }; |
97 | 98 |
98 class FakeAudioManagerWithAssociations : public media::FakeAudioManager { | 99 class FakeAudioManagerWithAssociations : public media::FakeAudioManager { |
99 public: | 100 public: |
100 FakeAudioManagerWithAssociations( | 101 FakeAudioManagerWithAssociations(media::AudioLogFactory* factory) |
101 scoped_refptr<base::SingleThreadTaskRunner> task_runner, | 102 : FakeAudioManager(base::MakeUnique<media::TestAudioThread>(), factory) {} |
102 media::AudioLogFactory* factory) | |
103 : FakeAudioManager(task_runner, task_runner, factory) {} | |
104 | 103 |
105 void CreateDeviceAssociation(const std::string& input_device_id, | 104 void CreateDeviceAssociation(const std::string& input_device_id, |
106 const std::string& output_device_id) { | 105 const std::string& output_device_id) { |
107 // We shouldn't accidentally add hashed ids, since the audio manager | 106 // We shouldn't accidentally add hashed ids, since the audio manager |
108 // works with raw ids. | 107 // works with raw ids. |
109 EXPECT_FALSE(IsValidDeviceId(input_device_id)); | 108 EXPECT_FALSE(IsValidDeviceId(input_device_id)); |
110 EXPECT_FALSE(IsValidDeviceId(output_device_id)); | 109 EXPECT_FALSE(IsValidDeviceId(output_device_id)); |
111 | 110 |
112 associations_[input_device_id] = output_device_id; | 111 associations_[input_device_id] = output_device_id; |
113 } | 112 } |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
229 base::RunLoop* auth_run_loop_; // Used to wait for authorization. | 228 base::RunLoop* auth_run_loop_; // Used to wait for authorization. |
230 | 229 |
231 DISALLOW_COPY_AND_ASSIGN(MockAudioRendererHost); | 230 DISALLOW_COPY_AND_ASSIGN(MockAudioRendererHost); |
232 }; | 231 }; |
233 | 232 |
234 class AudioRendererHostTest : public testing::Test { | 233 class AudioRendererHostTest : public testing::Test { |
235 public: | 234 public: |
236 AudioRendererHostTest() | 235 AudioRendererHostTest() |
237 : log_factory(base::MakeUnique<media::FakeAudioLogFactory>()), | 236 : log_factory(base::MakeUnique<media::FakeAudioLogFactory>()), |
238 audio_manager_(base::MakeUnique<FakeAudioManagerWithAssociations>( | 237 audio_manager_(base::MakeUnique<FakeAudioManagerWithAssociations>( |
239 base::ThreadTaskRunnerHandle::Get(), | |
240 log_factory.get())), | 238 log_factory.get())), |
241 audio_system_(media::AudioSystemImpl::Create(audio_manager_.get())), | 239 audio_system_(media::AudioSystemImpl::Create(audio_manager_.get())), |
242 render_process_host_(&browser_context_, &auth_run_loop_) { | 240 render_process_host_(&browser_context_, &auth_run_loop_) { |
243 base::CommandLine::ForCurrentProcess()->AppendSwitch( | 241 base::CommandLine::ForCurrentProcess()->AppendSwitch( |
244 switches::kUseFakeDeviceForMediaStream); | 242 switches::kUseFakeDeviceForMediaStream); |
245 media_stream_manager_ = | 243 media_stream_manager_ = |
246 base::MakeUnique<MediaStreamManager>(audio_system_.get()); | 244 base::MakeUnique<MediaStreamManager>(audio_system_.get()); |
247 host_ = new MockAudioRendererHost( | 245 host_ = new MockAudioRendererHost( |
248 &auth_run_loop_, render_process_host_.GetID(), audio_manager_.get(), | 246 &auth_run_loop_, render_process_host_.GetID(), audio_manager_.get(), |
249 audio_system_.get(), &mirroring_manager_, media_stream_manager_.get(), | 247 audio_system_.get(), &mirroring_manager_, media_stream_manager_.get(), |
250 kSalt); | 248 kSalt); |
251 | 249 |
252 // Simulate IPC channel connected. | 250 // Simulate IPC channel connected. |
253 host_->set_peer_process_for_testing(base::Process::Current()); | 251 host_->set_peer_process_for_testing(base::Process::Current()); |
254 } | 252 } |
255 | 253 |
256 ~AudioRendererHostTest() override { | 254 ~AudioRendererHostTest() override { |
257 // Simulate closing the IPC channel and give the audio thread time to close | 255 // Simulate closing the IPC channel and give the audio thread time to close |
258 // the underlying streams. | 256 // the underlying streams. |
259 host_->OnChannelClosing(); | 257 host_->OnChannelClosing(); |
260 SyncWithAudioThread(); | 258 audio_manager_->Shutdown(); |
261 // To correctly clean up the audio manager, we first put it in a | |
262 // ScopedAudioManagerPtr. It will immediately destruct, cleaning up the | |
263 // audio manager correctly. | |
264 media::ScopedAudioManagerPtr(audio_manager_.release()); | |
265 | 259 |
266 // Release the reference to the mock object. The object will be destructed | 260 // Release the reference to the mock object. The object will be destructed |
267 // on message_loop_. | 261 // on message_loop_. |
268 host_ = nullptr; | 262 host_ = nullptr; |
269 } | 263 } |
270 | 264 |
271 protected: | 265 protected: |
272 void OverrideDevicePermissions(bool has_permissions) { | 266 void OverrideDevicePermissions(bool has_permissions) { |
273 host_->OverrideDevicePermissionsForTesting(has_permissions); | 267 host_->OverrideDevicePermissionsForTesting(has_permissions); |
274 } | 268 } |
(...skipping 348 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
623 } | 617 } |
624 | 618 |
625 TEST_F(AudioRendererHostTest, CreateFailsForInvalidRenderFrame) { | 619 TEST_F(AudioRendererHostTest, CreateFailsForInvalidRenderFrame) { |
626 CreateWithInvalidRenderFrameId(); | 620 CreateWithInvalidRenderFrameId(); |
627 Close(); | 621 Close(); |
628 } | 622 } |
629 | 623 |
630 // TODO(hclam): Add tests for data conversation in low latency mode. | 624 // TODO(hclam): Add tests for data conversation in low latency mode. |
631 | 625 |
632 } // namespace content | 626 } // namespace content |
OLD | NEW |