| Index: media/audio/win/audio_manager_win.cc
 | 
| diff --git a/media/audio/win/audio_manager_win.cc b/media/audio/win/audio_manager_win.cc
 | 
| index a3d5ead202f401e31f25c54713b657e7a02c48fb..df7faf452eae1c6b2112968396fc299647bb0fac 100644
 | 
| --- a/media/audio/win/audio_manager_win.cc
 | 
| +++ b/media/audio/win/audio_manager_win.cc
 | 
| @@ -126,14 +126,19 @@ static int NumberOfWaveOutBuffers() {
 | 
|    return (base::win::GetVersion() == base::win::VERSION_VISTA) ? 4 : 3;
 | 
|  }
 | 
|  
 | 
| -AudioManagerWin::AudioManagerWin(AudioLogFactory* audio_log_factory)
 | 
| -    : AudioManagerBase(audio_log_factory),
 | 
| +AudioManagerWin::AudioManagerWin(
 | 
| +    scoped_refptr<base::SingleThreadTaskRunner> task_runner,
 | 
| +    scoped_refptr<base::SingleThreadTaskRunner> worker_task_runner,
 | 
| +    AudioLogFactory* audio_log_factory)
 | 
| +    : AudioManagerBase(std::move(task_runner),
 | 
| +                       std::move(worker_task_runner),
 | 
| +                       audio_log_factory),
 | 
|        // |CoreAudioUtil::IsSupported()| uses static variables to avoid doing
 | 
|        // multiple initializations.  This is however not thread safe.
 | 
|        // So, here we call it explicitly before we kick off the audio thread
 | 
|        // or do any other work.
 | 
| -      enumeration_type_(CoreAudioUtil::IsSupported() ?
 | 
| -          kMMDeviceEnumeration : kWaveEnumeration) {
 | 
| +      enumeration_type_(CoreAudioUtil::IsSupported() ? kMMDeviceEnumeration
 | 
| +                                                     : kWaveEnumeration) {
 | 
|    SetMaxOutputStreamsAllowed(kMaxOutputStreams);
 | 
|  
 | 
|    // WARNING: This is executed on the UI loop, do not add any code here which
 | 
| @@ -147,10 +152,6 @@ AudioManagerWin::AudioManagerWin(AudioLogFactory* audio_log_factory)
 | 
|  }
 | 
|  
 | 
|  AudioManagerWin::~AudioManagerWin() {
 | 
| -  // It's safe to post a task here since Shutdown() will wait for all tasks to
 | 
| -  // complete before returning.
 | 
| -  GetTaskRunner()->PostTask(FROM_HERE, base::Bind(
 | 
| -      &AudioManagerWin::ShutdownOnAudioThread, base::Unretained(this)));
 | 
|    Shutdown();
 | 
|  }
 | 
|  
 | 
| @@ -174,11 +175,6 @@ void AudioManagerWin::InitializeOnAudioThread() {
 | 
|    }
 | 
|  }
 | 
|  
 | 
| -void AudioManagerWin::ShutdownOnAudioThread() {
 | 
| -  DCHECK(GetTaskRunner()->BelongsToCurrentThread());
 | 
| -  output_device_listener_.reset();
 | 
| -}
 | 
| -
 | 
|  base::string16 AudioManagerWin::GetAudioInputDeviceModel() {
 | 
|    // Get the default audio capture device and its device interface name.
 | 
|    DWORD device_id = 0;
 | 
| @@ -537,8 +533,13 @@ AudioInputStream* AudioManagerWin::CreatePCMWaveInAudioInputStream(
 | 
|  }
 | 
|  
 | 
|  /// static
 | 
| -AudioManager* CreateAudioManager(AudioLogFactory* audio_log_factory) {
 | 
| -  return new AudioManagerWin(audio_log_factory);
 | 
| +ScopedAudioManagerPtr CreateAudioManager(
 | 
| +    scoped_refptr<base::SingleThreadTaskRunner> task_runner,
 | 
| +    scoped_refptr<base::SingleThreadTaskRunner> worker_task_runner,
 | 
| +    AudioLogFactory* audio_log_factory) {
 | 
| +  return ScopedAudioManagerPtr(
 | 
| +      new AudioManagerWin(std::move(task_runner), std::move(worker_task_runner),
 | 
| +                          audio_log_factory));
 | 
|  }
 | 
|  
 | 
|  }  // namespace media
 | 
| 
 |