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

Side by Side Diff: content/browser/renderer_host/media/audio_input_renderer_host_unittest.cc

Issue 2784433002: Ensures that audio tasks cannot run after AudioManager is deleted. (Closed)
Patch Set: rebase Created 3 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 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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_input_renderer_host.h" 5 #include "content/browser/renderer_host/media/audio_input_renderer_host.h"
6 6
7 #include <utility> 7 #include <utility>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
11 #include "base/command_line.h" 11 #include "base/command_line.h"
12 #include "base/memory/ptr_util.h" 12 #include "base/memory/ptr_util.h"
13 #include "base/run_loop.h" 13 #include "base/run_loop.h"
14 #include "base/threading/thread_task_runner_handle.h" 14 #include "base/threading/thread_task_runner_handle.h"
15 #include "content/browser/bad_message.h" 15 #include "content/browser/bad_message.h"
16 #include "content/browser/media/capture/audio_mirroring_manager.h" 16 #include "content/browser/media/capture/audio_mirroring_manager.h"
17 #include "content/browser/renderer_host/media/audio_input_device_manager.h" 17 #include "content/browser/renderer_host/media/audio_input_device_manager.h"
18 #include "content/browser/renderer_host/media/media_stream_manager.h" 18 #include "content/browser/renderer_host/media/media_stream_manager.h"
19 #include "content/browser/renderer_host/media/media_stream_ui_proxy.h" 19 #include "content/browser/renderer_host/media/media_stream_ui_proxy.h"
20 #include "content/public/browser/browser_thread.h" 20 #include "content/public/browser/browser_thread.h"
21 #include "content/public/common/content_switches.h" 21 #include "content/public/common/content_switches.h"
22 #include "content/public/test/mock_render_process_host.h" 22 #include "content/public/test/mock_render_process_host.h"
23 #include "content/public/test/test_browser_context.h" 23 #include "content/public/test/test_browser_context.h"
24 #include "content/public/test/test_browser_thread.h" 24 #include "content/public/test/test_browser_thread.h"
25 #include "content/public/test/test_browser_thread_bundle.h" 25 #include "content/public/test/test_browser_thread_bundle.h"
26 #include "media/audio/audio_device_description.h" 26 #include "media/audio/audio_device_description.h"
27 #include "media/audio/audio_system_impl.h" 27 #include "media/audio/audio_system_impl.h"
28 #include "media/audio/fake_audio_log_factory.h" 28 #include "media/audio/fake_audio_log_factory.h"
29 #include "media/audio/fake_audio_manager.h" 29 #include "media/audio/fake_audio_manager.h"
30 #include "media/audio/test_audio_thread.h"
30 #include "media/base/media_switches.h" 31 #include "media/base/media_switches.h"
31 #include "testing/gmock/include/gmock/gmock.h" 32 #include "testing/gmock/include/gmock/gmock.h"
32 #include "testing/gtest/include/gtest/gtest.h" 33 #include "testing/gtest/include/gtest/gtest.h"
33 #include "url/gurl.h" 34 #include "url/gurl.h"
34 #include "url/origin.h" 35 #include "url/origin.h"
35 36
36 using ::media::AudioInputController; 37 using ::media::AudioInputController;
37 using ::testing::_; 38 using ::testing::_;
38 using ::testing::Assign; 39 using ::testing::Assign;
39 using ::testing::InSequence; 40 using ::testing::InSequence;
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
258 } // namespace 259 } // namespace
259 260
260 class AudioInputRendererHostTest : public testing::Test { 261 class AudioInputRendererHostTest : public testing::Test {
261 public: 262 public:
262 AudioInputRendererHostTest() { 263 AudioInputRendererHostTest() {
263 base::CommandLine* flags = base::CommandLine::ForCurrentProcess(); 264 base::CommandLine* flags = base::CommandLine::ForCurrentProcess();
264 flags->AppendSwitch(switches::kUseFakeDeviceForMediaStream); 265 flags->AppendSwitch(switches::kUseFakeDeviceForMediaStream);
265 flags->AppendSwitch(switches::kUseFakeUIForMediaStream); 266 flags->AppendSwitch(switches::kUseFakeUIForMediaStream);
266 267
267 audio_manager_.reset(new media::FakeAudioManager( 268 audio_manager_.reset(new media::FakeAudioManager(
268 base::ThreadTaskRunnerHandle::Get(), 269 base::MakeUnique<media::TestAudioThread>(), &log_factory_));
269 base::ThreadTaskRunnerHandle::Get(), &log_factory_));
270 audio_system_ = media::AudioSystemImpl::Create(audio_manager_.get()); 270 audio_system_ = media::AudioSystemImpl::Create(audio_manager_.get());
271 media_stream_manager_ = 271 media_stream_manager_ =
272 base::MakeUnique<MediaStreamManager>(audio_system_.get()); 272 base::MakeUnique<MediaStreamManager>(audio_system_.get());
273 airh_ = new AudioInputRendererHostWithInterception( 273 airh_ = new AudioInputRendererHostWithInterception(
274 kRenderProcessId, kRendererPid, media::AudioManager::Get(), 274 kRenderProcessId, kRendererPid, media::AudioManager::Get(),
275 media_stream_manager_.get(), AudioMirroringManager::GetInstance(), 275 media_stream_manager_.get(), AudioMirroringManager::GetInstance(),
276 nullptr, &renderer_); 276 nullptr, &renderer_);
277 } 277 }
278 278
279 ~AudioInputRendererHostTest() override { 279 ~AudioInputRendererHostTest() override {
280 airh_->OnChannelClosing(); 280 airh_->OnChannelClosing();
281 base::RunLoop().RunUntilIdle(); 281 base::RunLoop().RunUntilIdle();
282
283 audio_manager_->Shutdown();
282 } 284 }
283 285
284 protected: 286 protected:
285 // Makes device |device_id| with name |name| available to open with the 287 // Makes device |device_id| with name |name| available to open with the
286 // session id returned. 288 // session id returned.
287 int Open(const std::string& device_id, const std::string& name) { 289 int Open(const std::string& device_id, const std::string& name) {
288 int session_id = media_stream_manager_->audio_input_device_manager()->Open( 290 int session_id = media_stream_manager_->audio_input_device_manager()->Open(
289 MediaStreamDevice(MEDIA_DEVICE_AUDIO_CAPTURE, device_id, name)); 291 MediaStreamDevice(MEDIA_DEVICE_AUDIO_CAPTURE, device_id, name));
290 base::RunLoop().RunUntilIdle(); 292 base::RunLoop().RunUntilIdle();
291 return session_id; 293 return session_id;
(...skipping 17 matching lines...) Expand all
309 }, 311 },
310 base::Unretained(&id))); 312 base::Unretained(&id)));
311 base::RunLoop().RunUntilIdle(); 313 base::RunLoop().RunUntilIdle();
312 return id; 314 return id;
313 } 315 }
314 316
315 media::FakeAudioLogFactory log_factory_; 317 media::FakeAudioLogFactory log_factory_;
316 StrictMock<MockControllerFactory> controller_factory_; 318 StrictMock<MockControllerFactory> controller_factory_;
317 std::unique_ptr<MediaStreamManager> media_stream_manager_; 319 std::unique_ptr<MediaStreamManager> media_stream_manager_;
318 TestBrowserThreadBundle thread_bundle_; 320 TestBrowserThreadBundle thread_bundle_;
319 media::ScopedAudioManagerPtr audio_manager_; 321 std::unique_ptr<media::AudioManager> audio_manager_;
320 std::unique_ptr<media::AudioSystem> audio_system_; 322 std::unique_ptr<media::AudioSystem> audio_system_;
321 StrictMock<MockRenderer> renderer_; 323 StrictMock<MockRenderer> renderer_;
322 scoped_refptr<AudioInputRendererHost> airh_; 324 scoped_refptr<AudioInputRendererHost> airh_;
323 325
324 private: 326 private:
325 DISALLOW_COPY_AND_ASSIGN(AudioInputRendererHostTest); 327 DISALLOW_COPY_AND_ASSIGN(AudioInputRendererHostTest);
326 }; 328 };
327 329
328 // Checks that a controller is created and a reply is sent when creating a 330 // Checks that a controller is created and a reply is sent when creating a
329 // stream. 331 // stream.
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after
558 EXPECT_CALL(controller_factory_, ControllerCreated()); 560 EXPECT_CALL(controller_factory_, ControllerCreated());
559 561
560 airh_->OnMessageReceived(AudioInputHostMsg_CreateStream( 562 airh_->OnMessageReceived(AudioInputHostMsg_CreateStream(
561 kStreamId, kRenderFrameId, session_id, DefaultConfig())); 563 kStreamId, kRenderFrameId, session_id, DefaultConfig()));
562 base::RunLoop().RunUntilIdle(); 564 base::RunLoop().RunUntilIdle();
563 565
564 EXPECT_CALL(*controller_factory_.controller(0), Close(_)); 566 EXPECT_CALL(*controller_factory_.controller(0), Close(_));
565 } 567 }
566 568
567 } // namespace content 569 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698