| Index: content/browser/renderer_host/media/media_stream_manager.cc
 | 
| diff --git a/content/browser/renderer_host/media/media_stream_manager.cc b/content/browser/renderer_host/media/media_stream_manager.cc
 | 
| index d6b2e60dbaaff16919a76ce2ebce97105ad392d1..b9fbe8d0df0276a6dae62faf2418b2ba96bf0d77 100644
 | 
| --- a/content/browser/renderer_host/media/media_stream_manager.cc
 | 
| +++ b/content/browser/renderer_host/media/media_stream_manager.cc
 | 
| @@ -20,7 +20,6 @@
 | 
|  #include "content/public/browser/content_browser_client.h"
 | 
|  #include "content/public/browser/media_observer.h"
 | 
|  #include "googleurl/src/gurl.h"
 | 
| -#include "media/audio/audio_manager.h"
 | 
|  
 | 
|  using content::BrowserThread;
 | 
|  
 | 
| @@ -116,24 +115,28 @@ struct MediaStreamManager::DeviceRequest {
 | 
|    StreamDeviceInfoArray video_devices;
 | 
|  };
 | 
|  
 | 
| +// Static function to stop and delete the device thread on blocking pool.
 | 
| +void ShutdownDeviceThread(base::Thread* thread) {
 | 
| +  thread->Stop();
 | 
| +  delete thread;
 | 
| +}
 | 
| +
 | 
|  // static
 | 
|  MediaStreamManager* MediaStreamManager::GetForResourceContext(
 | 
| -    content::ResourceContext* resource_context,
 | 
| -    media::AudioManager* audio_manager) {
 | 
| +    content::ResourceContext* resource_context) {
 | 
|    MediaStreamManager* rv = static_cast<MediaStreamManager*>(
 | 
|        resource_context->GetUserData(kMediaStreamManagerKeyName));
 | 
|    if (!rv) {
 | 
| -    rv = new MediaStreamManager(audio_manager);
 | 
| +    rv = new MediaStreamManager();
 | 
|      resource_context->SetUserData(kMediaStreamManagerKeyName, rv);
 | 
|    }
 | 
|    return rv;
 | 
|  }
 | 
|  
 | 
| -MediaStreamManager::MediaStreamManager(media::AudioManager* audio_manager)
 | 
| +MediaStreamManager::MediaStreamManager()
 | 
|      : ALLOW_THIS_IN_INITIALIZER_LIST(
 | 
|            device_settings_(new MediaStreamDeviceSettings(this))),
 | 
| -      enumeration_in_progress_(content::NUM_MEDIA_STREAM_DEVICE_TYPES, false),
 | 
| -      audio_manager_(audio_manager) {
 | 
| +      enumeration_in_progress_(content::NUM_MEDIA_STREAM_DEVICE_TYPES, false) {
 | 
|    DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
 | 
|  }
 | 
|  
 | 
| @@ -143,12 +146,19 @@ MediaStreamManager::~MediaStreamManager() {
 | 
|      video_capture_manager_->Unregister();
 | 
|    if (audio_input_device_manager_.get())
 | 
|      audio_input_device_manager_->Unregister();
 | 
| +
 | 
| +  if (device_thread_.get()) {
 | 
| +    content::BrowserThread::PostBlockingPoolTask(
 | 
| +        FROM_HERE, base::Bind(&ShutdownDeviceThread, device_thread_.release()));
 | 
| +  }
 | 
|  }
 | 
|  
 | 
|  VideoCaptureManager* MediaStreamManager::video_capture_manager() {
 | 
|    DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
 | 
| +  EnsureDeviceThread();
 | 
|    if (!video_capture_manager_.get()) {
 | 
| -    video_capture_manager_ = new VideoCaptureManager();
 | 
| +    video_capture_manager_ = new VideoCaptureManager(
 | 
| +        device_thread_->message_loop_proxy());
 | 
|      video_capture_manager_->Register(this);
 | 
|    }
 | 
|    return video_capture_manager_.get();
 | 
| @@ -156,8 +166,10 @@ VideoCaptureManager* MediaStreamManager::video_capture_manager() {
 | 
|  
 | 
|  AudioInputDeviceManager* MediaStreamManager::audio_input_device_manager() {
 | 
|    DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
 | 
| +  EnsureDeviceThread();
 | 
|    if (!audio_input_device_manager_.get()) {
 | 
| -    audio_input_device_manager_ =  new AudioInputDeviceManager(audio_manager_);
 | 
| +    audio_input_device_manager_ =  new AudioInputDeviceManager(
 | 
| +        device_thread_->message_loop_proxy());
 | 
|      audio_input_device_manager_->Register(this);
 | 
|    }
 | 
|    return audio_input_device_manager_.get();
 | 
| @@ -367,6 +379,15 @@ void MediaStreamManager::StartEnumeration(
 | 
|    (*label) = request_label;
 | 
|  }
 | 
|  
 | 
| +void MediaStreamManager::EnsureDeviceThread() {
 | 
| +  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
 | 
| +  if (device_thread_.get())
 | 
| +    return;
 | 
| +
 | 
| +  device_thread_.reset(new DeviceThread("MediaStreamDeviceThread"));
 | 
| +  CHECK(device_thread_->Start());
 | 
| +}
 | 
| +
 | 
|  void MediaStreamManager::Opened(MediaStreamType stream_type,
 | 
|                                  int capture_session_id) {
 | 
|    DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
 | 
| 
 |