| Index: content/renderer/media/media_stream_dispatcher.cc
|
| diff --git a/content/renderer/media/media_stream_dispatcher.cc b/content/renderer/media/media_stream_dispatcher.cc
|
| index e2675a8ff4dcf1cc2fed3a050f6d03496e0d23ab..9903bdf6c3ddefa28afff4e104bddebf53221b59 100644
|
| --- a/content/renderer/media/media_stream_dispatcher.cc
|
| +++ b/content/renderer/media/media_stream_dispatcher.cc
|
| @@ -5,11 +5,9 @@
|
| #include "content/renderer/media/media_stream_dispatcher.h"
|
|
|
| #include "base/logging.h"
|
| -#include "base/message_loop/message_loop_proxy.h"
|
| #include "content/common/media/media_stream_messages.h"
|
| #include "content/renderer/media/media_stream_dispatcher_eventhandler.h"
|
| #include "content/renderer/render_thread_impl.h"
|
| -#include "content/renderer/render_view_impl.h"
|
| #include "media/audio/audio_parameters.h"
|
| #include "third_party/WebKit/public/web/WebUserGestureIndicator.h"
|
| #include "url/gurl.h"
|
| @@ -63,9 +61,8 @@ struct MediaStreamDispatcher::Stream {
|
| StreamDeviceInfoArray video_array;
|
| };
|
|
|
| -MediaStreamDispatcher::MediaStreamDispatcher(RenderViewImpl* render_view)
|
| - : RenderViewObserver(render_view),
|
| - main_loop_(base::MessageLoopProxy::current()),
|
| +MediaStreamDispatcher::MediaStreamDispatcher(RenderFrame* render_frame)
|
| + : RenderFrameObserver(render_frame),
|
| next_ipc_id_(0) {
|
| }
|
|
|
| @@ -76,7 +73,7 @@ void MediaStreamDispatcher::GenerateStream(
|
| const base::WeakPtr<MediaStreamDispatcherEventHandler>& event_handler,
|
| const StreamOptions& components,
|
| const GURL& security_origin) {
|
| - DCHECK(main_loop_->BelongsToCurrentThread());
|
| + DCHECK(thread_checker_.CalledOnValidThread());
|
| DVLOG(1) << "MediaStreamDispatcher::GenerateStream(" << request_id << ")";
|
|
|
| requests_.push_back(Request(event_handler, request_id, next_ipc_id_));
|
| @@ -88,7 +85,7 @@ void MediaStreamDispatcher::GenerateStream(
|
| void MediaStreamDispatcher::CancelGenerateStream(
|
| int request_id,
|
| const base::WeakPtr<MediaStreamDispatcherEventHandler>& event_handler) {
|
| - DCHECK(main_loop_->BelongsToCurrentThread());
|
| + DCHECK(thread_checker_.CalledOnValidThread());
|
| DVLOG(1) << "MediaStreamDispatcher::CancelGenerateStream"
|
| << ", {request_id = " << request_id << "}";
|
|
|
| @@ -106,7 +103,7 @@ void MediaStreamDispatcher::CancelGenerateStream(
|
|
|
| void MediaStreamDispatcher::StopStreamDevice(
|
| const StreamDeviceInfo& device_info) {
|
| - DCHECK(main_loop_->BelongsToCurrentThread());
|
| + DCHECK(thread_checker_.CalledOnValidThread());
|
| DVLOG(1) << "MediaStreamDispatcher::StopStreamDevice"
|
| << ", {device_id = " << device_info.device.id << "}";
|
| // Remove |device_info| from all streams in |label_stream_map_|.
|
| @@ -128,9 +125,10 @@ void MediaStreamDispatcher::StopStreamDevice(
|
| }
|
|
|
| if (!device_found) {
|
| - // TODO(perkj): This can currently happen since there is one
|
| - // MediaStreamDispatcher per RenderView but there is one MediaStreamImpl
|
| - // per RenderFrame. http://crbug/368030.
|
| + // TODO(perkj): Revisit this. It used to be true (but isn't anymore) that
|
| + // there was one MediaStreamDispatcher per RenderView, but one
|
| + // MediaStreamImpl per RenderFrame. Now both MediaStreamDispatcher and
|
| + // MediaStreamImpl are 1:1 per RenderFrame. http://crbug/368030.
|
| return;
|
| }
|
|
|
| @@ -144,7 +142,7 @@ void MediaStreamDispatcher::EnumerateDevices(
|
| MediaStreamType type,
|
| const GURL& security_origin,
|
| bool hide_labels_if_no_access) {
|
| - DCHECK(main_loop_->BelongsToCurrentThread());
|
| + DCHECK(thread_checker_.CalledOnValidThread());
|
| DCHECK(type == MEDIA_DEVICE_AUDIO_CAPTURE ||
|
| type == MEDIA_DEVICE_VIDEO_CAPTURE ||
|
| type == MEDIA_DEVICE_AUDIO_OUTPUT);
|
| @@ -167,7 +165,7 @@ void MediaStreamDispatcher::EnumerateDevices(
|
| void MediaStreamDispatcher::StopEnumerateDevices(
|
| int request_id,
|
| const base::WeakPtr<MediaStreamDispatcherEventHandler>& event_handler) {
|
| - DCHECK(main_loop_->BelongsToCurrentThread());
|
| + DCHECK(thread_checker_.CalledOnValidThread());
|
| DVLOG(1) << "MediaStreamDispatcher::StopEnumerateDevices("
|
| << request_id << ")";
|
| for (RequestList::iterator it = requests_.begin(); it != requests_.end();
|
| @@ -187,7 +185,7 @@ void MediaStreamDispatcher::OpenDevice(
|
| const std::string& device_id,
|
| MediaStreamType type,
|
| const GURL& security_origin) {
|
| - DCHECK(main_loop_->BelongsToCurrentThread());
|
| + DCHECK(thread_checker_.CalledOnValidThread());
|
| DVLOG(1) << "MediaStreamDispatcher::OpenDevice(" << request_id << ")";
|
|
|
| requests_.push_back(Request(event_handler, request_id, next_ipc_id_));
|
| @@ -205,7 +203,7 @@ void MediaStreamDispatcher::CancelOpenDevice(
|
| }
|
|
|
| void MediaStreamDispatcher::CloseDevice(const std::string& label) {
|
| - DCHECK(main_loop_->BelongsToCurrentThread());
|
| + DCHECK(thread_checker_.CalledOnValidThread());
|
| DCHECK(!label.empty());
|
| DVLOG(1) << "MediaStreamDispatcher::CloseDevice"
|
| << ", {label = " << label << "}";
|
| @@ -218,6 +216,10 @@ void MediaStreamDispatcher::CloseDevice(const std::string& label) {
|
| Send(new MediaStreamHostMsg_CloseDevice(routing_id(), label));
|
| }
|
|
|
| +void MediaStreamDispatcher::OnDestruct() {
|
| + // Do not self-destruct. MediaStreamImpl owns |this|.
|
| +}
|
| +
|
| bool MediaStreamDispatcher::Send(IPC::Message* message) {
|
| if (!RenderThread::Get()) {
|
| delete message;
|
| @@ -252,7 +254,7 @@ void MediaStreamDispatcher::OnStreamGenerated(
|
| const std::string& label,
|
| const StreamDeviceInfoArray& audio_array,
|
| const StreamDeviceInfoArray& video_array) {
|
| - DCHECK(main_loop_->BelongsToCurrentThread());
|
| + DCHECK(thread_checker_.CalledOnValidThread());
|
|
|
| for (RequestList::iterator it = requests_.begin();
|
| it != requests_.end(); ++it) {
|
| @@ -278,7 +280,7 @@ void MediaStreamDispatcher::OnStreamGenerated(
|
| void MediaStreamDispatcher::OnStreamGenerationFailed(
|
| int request_id,
|
| content::MediaStreamRequestResult result) {
|
| - DCHECK(main_loop_->BelongsToCurrentThread());
|
| + DCHECK(thread_checker_.CalledOnValidThread());
|
| for (RequestList::iterator it = requests_.begin();
|
| it != requests_.end(); ++it) {
|
| Request& request = *it;
|
| @@ -297,7 +299,7 @@ void MediaStreamDispatcher::OnStreamGenerationFailed(
|
| void MediaStreamDispatcher::OnDeviceStopped(
|
| const std::string& label,
|
| const StreamDeviceInfo& device_info) {
|
| - DCHECK(main_loop_->BelongsToCurrentThread());
|
| + DCHECK(thread_checker_.CalledOnValidThread());
|
| DVLOG(1) << "MediaStreamDispatcher::OnDeviceStopped("
|
| << "{label = " << label << "})"
|
| << ", {device_id = " << device_info.device.id << "})";
|
| @@ -324,7 +326,7 @@ void MediaStreamDispatcher::OnDeviceStopped(
|
| void MediaStreamDispatcher::OnDevicesEnumerated(
|
| int request_id,
|
| const StreamDeviceInfoArray& device_array) {
|
| - DCHECK(main_loop_->BelongsToCurrentThread());
|
| + DCHECK(thread_checker_.CalledOnValidThread());
|
| DCHECK_GE(request_id, 0);
|
|
|
| for (RequestList::iterator it = requests_.begin(); it != requests_.end();
|
| @@ -340,7 +342,7 @@ void MediaStreamDispatcher::OnDeviceOpened(
|
| int request_id,
|
| const std::string& label,
|
| const StreamDeviceInfo& device_info) {
|
| - DCHECK(main_loop_->BelongsToCurrentThread());
|
| + DCHECK(thread_checker_.CalledOnValidThread());
|
| for (RequestList::iterator it = requests_.begin();
|
| it != requests_.end(); ++it) {
|
| Request& request = *it;
|
| @@ -367,7 +369,7 @@ void MediaStreamDispatcher::OnDeviceOpened(
|
| }
|
|
|
| void MediaStreamDispatcher::OnDeviceOpenFailed(int request_id) {
|
| - DCHECK(main_loop_->BelongsToCurrentThread());
|
| + DCHECK(thread_checker_.CalledOnValidThread());
|
| for (RequestList::iterator it = requests_.begin();
|
| it != requests_.end(); ++it) {
|
| Request& request = *it;
|
| @@ -385,7 +387,7 @@ void MediaStreamDispatcher::OnDeviceOpenFailed(int request_id) {
|
|
|
| int MediaStreamDispatcher::audio_session_id(const std::string& label,
|
| int index) {
|
| - DCHECK(main_loop_->BelongsToCurrentThread());
|
| + DCHECK(thread_checker_.CalledOnValidThread());
|
| LabelStreamMap::iterator it = label_stream_map_.find(label);
|
| if (it == label_stream_map_.end() ||
|
| it->second.audio_array.size() <= static_cast<size_t>(index)) {
|
| @@ -395,13 +397,13 @@ int MediaStreamDispatcher::audio_session_id(const std::string& label,
|
| }
|
|
|
| bool MediaStreamDispatcher::IsStream(const std::string& label) {
|
| - DCHECK(main_loop_->BelongsToCurrentThread());
|
| + DCHECK(thread_checker_.CalledOnValidThread());
|
| return label_stream_map_.find(label) != label_stream_map_.end();
|
| }
|
|
|
| int MediaStreamDispatcher::video_session_id(const std::string& label,
|
| int index) {
|
| - DCHECK(main_loop_->BelongsToCurrentThread());
|
| + DCHECK(thread_checker_.CalledOnValidThread());
|
| LabelStreamMap::iterator it = label_stream_map_.find(label);
|
| if (it == label_stream_map_.end() ||
|
| it->second.video_array.size() <= static_cast<size_t>(index)) {
|
| @@ -411,7 +413,7 @@ int MediaStreamDispatcher::video_session_id(const std::string& label,
|
| }
|
|
|
| bool MediaStreamDispatcher::IsAudioDuckingActive() const {
|
| - DCHECK(main_loop_->BelongsToCurrentThread());
|
| + DCHECK(thread_checker_.CalledOnValidThread());
|
| LabelStreamMap::const_iterator stream_it = label_stream_map_.begin();
|
| while (stream_it != label_stream_map_.end()) {
|
| const StreamDeviceInfoArray& audio_array = stream_it->second.audio_array;
|
|
|