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

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

Issue 10786029: Delete MediaStreamManager in the same way as AudioManager (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fixed the pyauto test Created 8 years, 5 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 | Annotate | Revision Log
OLDNEW
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/media_stream_manager.h" 5 #include "content/browser/renderer_host/media/media_stream_manager.h"
6 6
7 #include <list> 7 #include <list>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/compiler_specific.h" 10 #include "base/compiler_specific.h"
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
130 StreamDeviceInfoArray video_devices; 130 StreamDeviceInfoArray video_devices;
131 }; 131 };
132 132
133 MediaStreamManager::MediaStreamManager( 133 MediaStreamManager::MediaStreamManager(
134 AudioInputDeviceManager* audio_input_device_manager, 134 AudioInputDeviceManager* audio_input_device_manager,
135 VideoCaptureManager* video_capture_manager) 135 VideoCaptureManager* video_capture_manager)
136 : ALLOW_THIS_IN_INITIALIZER_LIST( 136 : ALLOW_THIS_IN_INITIALIZER_LIST(
137 device_settings_(new MediaStreamDeviceSettings(this))), 137 device_settings_(new MediaStreamDeviceSettings(this))),
138 audio_input_device_manager_(audio_input_device_manager), 138 audio_input_device_manager_(audio_input_device_manager),
139 video_capture_manager_(video_capture_manager), 139 video_capture_manager_(video_capture_manager),
140 enumeration_in_progress_(content::NUM_MEDIA_STREAM_DEVICE_TYPES, false) { 140 enumeration_in_progress_(content::NUM_MEDIA_STREAM_DEVICE_TYPES, false),
141 io_loop_(NULL) {
141 } 142 }
142 143
143 MediaStreamManager::~MediaStreamManager() { 144 MediaStreamManager::~MediaStreamManager() {
144 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 145 DCHECK(requests_.empty());
145 if (device_thread_.get()) { 146 DCHECK(!device_thread_.get());
146 video_capture_manager_->Unregister(); 147 DCHECK(!io_loop_);
147 audio_input_device_manager_->Unregister();
148 device_thread_->Stop();
149 }
150 } 148 }
151 149
152 VideoCaptureManager* MediaStreamManager::video_capture_manager() { 150 VideoCaptureManager* MediaStreamManager::video_capture_manager() {
153 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 151 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
154 DCHECK(video_capture_manager_.get()); 152 DCHECK(video_capture_manager_);
155 EnsureDeviceThreadAndListener(); 153 EnsureDeviceThreadAndListener();
156 return video_capture_manager_.get(); 154 return video_capture_manager_;
157 } 155 }
158 156
159 AudioInputDeviceManager* MediaStreamManager::audio_input_device_manager() { 157 AudioInputDeviceManager* MediaStreamManager::audio_input_device_manager() {
160 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 158 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
161 DCHECK(audio_input_device_manager_.get()); 159 DCHECK(audio_input_device_manager_);
162 EnsureDeviceThreadAndListener(); 160 EnsureDeviceThreadAndListener();
163 return audio_input_device_manager_.get(); 161 return audio_input_device_manager_;
164 } 162 }
165 163
166 void MediaStreamManager::GenerateStream(MediaStreamRequester* requester, 164 void MediaStreamManager::GenerateStream(MediaStreamRequester* requester,
167 int render_process_id, 165 int render_process_id,
168 int render_view_id, 166 int render_view_id,
169 const StreamOptions& options, 167 const StreamOptions& options,
170 const GURL& security_origin, 168 const GURL& security_origin,
171 std::string* label) { 169 std::string* label) {
172 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 170 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
173 171
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
367 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 365 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
368 if (device_thread_.get()) 366 if (device_thread_.get())
369 return; 367 return;
370 368
371 device_thread_.reset(new DeviceThread("MediaStreamDeviceThread")); 369 device_thread_.reset(new DeviceThread("MediaStreamDeviceThread"));
372 CHECK(device_thread_->Start()); 370 CHECK(device_thread_->Start());
373 371
374 audio_input_device_manager_->Register(this, 372 audio_input_device_manager_->Register(this,
375 device_thread_->message_loop_proxy()); 373 device_thread_->message_loop_proxy());
376 video_capture_manager_->Register(this, device_thread_->message_loop_proxy()); 374 video_capture_manager_->Register(this, device_thread_->message_loop_proxy());
375
376 // We want to be notified of IO message loop destruction to delete the thread
377 // and the device managers.
378 io_loop_ = MessageLoop::current();
379 io_loop_->AddDestructionObserver(this);
377 } 380 }
378 381
379 void MediaStreamManager::Opened(MediaStreamType stream_type, 382 void MediaStreamManager::Opened(MediaStreamType stream_type,
380 int capture_session_id) { 383 int capture_session_id) {
381 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 384 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
382 385
383 // Find the request containing this device and mark it as used. 386 // Find the request containing this device and mark it as used.
384 DeviceRequest* request = NULL; 387 DeviceRequest* request = NULL;
385 StreamDeviceInfoArray* devices = NULL; 388 StreamDeviceInfoArray* devices = NULL;
386 std::string label; 389 std::string label;
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after
615 return; 618 return;
616 } 619 }
617 } 620 }
618 621
619 void MediaStreamManager::UseFakeDevice() { 622 void MediaStreamManager::UseFakeDevice() {
620 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 623 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
621 video_capture_manager()->UseFakeDevice(); 624 video_capture_manager()->UseFakeDevice();
622 device_settings_->UseFakeUI(); 625 device_settings_->UseFakeUI();
623 } 626 }
624 627
628 void MediaStreamManager::WillDestroyCurrentMessageLoop() {
629 DCHECK_EQ(MessageLoop::current(), io_loop_);
630 if (device_thread_.get()) {
631 video_capture_manager_->Unregister();
632 audio_input_device_manager_->Unregister();
633 device_thread_.reset();
634 }
635
636 audio_input_device_manager_ = NULL;
637 video_capture_manager_ = NULL;
638 io_loop_ = NULL;
639 device_settings_.reset();
640 }
641
625 void MediaStreamManager::NotifyObserverDevicesOpened(DeviceRequest* request) { 642 void MediaStreamManager::NotifyObserverDevicesOpened(DeviceRequest* request) {
626 content::MediaObserver* media_observer = 643 content::MediaObserver* media_observer =
627 content::GetContentClient()->browser()->GetMediaObserver(); 644 content::GetContentClient()->browser()->GetMediaObserver();
628 content::MediaStreamDevices opened_devices; 645 content::MediaStreamDevices opened_devices;
629 DevicesFromRequest(request, &opened_devices); 646 DevicesFromRequest(request, &opened_devices);
630 DCHECK(!opened_devices.empty()); 647 DCHECK(!opened_devices.empty());
631 media_observer->OnCaptureDevicesOpened(request->render_process_id, 648 media_observer->OnCaptureDevicesOpened(request->render_process_id,
632 request->render_view_id, 649 request->render_view_id,
633 opened_devices); 650 opened_devices);
634 } 651 }
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
697 if (stream_type == content::MEDIA_STREAM_DEVICE_TYPE_VIDEO_CAPTURE) { 714 if (stream_type == content::MEDIA_STREAM_DEVICE_TYPE_VIDEO_CAPTURE) {
698 return video_capture_manager(); 715 return video_capture_manager();
699 } else if (stream_type == content::MEDIA_STREAM_DEVICE_TYPE_AUDIO_CAPTURE) { 716 } else if (stream_type == content::MEDIA_STREAM_DEVICE_TYPE_AUDIO_CAPTURE) {
700 return audio_input_device_manager(); 717 return audio_input_device_manager();
701 } 718 }
702 NOTREACHED(); 719 NOTREACHED();
703 return NULL; 720 return NULL;
704 } 721 }
705 722
706 } // namespace media_stream 723 } // namespace media_stream
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698