Index: content/renderer/media/media_stream_dispatcher.cc |
=================================================================== |
--- content/renderer/media/media_stream_dispatcher.cc (revision 150592) |
+++ content/renderer/media/media_stream_dispatcher.cc (working copy) |
@@ -31,36 +31,8 @@ |
media_stream::StreamDeviceInfoArray video_array; |
}; |
-MediaStreamDispatcher::EnumerationRequest::EnumerationRequest( |
- const base::WeakPtr<MediaStreamDispatcherEventHandler>& handler, |
- int request_id) |
- : handler(handler), |
- request_id(request_id) { |
-} |
- |
-MediaStreamDispatcher::EnumerationRequest::~EnumerationRequest() {} |
- |
-MediaStreamDispatcher::EnumerationState::EnumerationState() |
- : ipc_id(-1) { |
-} |
- |
-MediaStreamDispatcher::EnumerationState::~EnumerationState() {} |
- |
-struct MediaStreamDispatcher::EnumerationState::CachedDevices { |
- CachedDevices(const std::string& label, |
- const media_stream::StreamDeviceInfoArray& device_array) |
- : label(label), |
- devices(device_array) { |
- } |
- ~CachedDevices() {} |
- |
- std::string label; |
- media_stream::StreamDeviceInfoArray devices; |
-}; |
- |
MediaStreamDispatcher::MediaStreamDispatcher(RenderViewImpl* render_view) |
: content::RenderViewObserver(render_view), |
- main_loop_(base::MessageLoopProxy::current()), |
next_ipc_id_(0) { |
} |
@@ -71,7 +43,6 @@ |
const base::WeakPtr<MediaStreamDispatcherEventHandler>& event_handler, |
media_stream::StreamOptions components, |
const GURL& security_origin) { |
- DCHECK(main_loop_->BelongsToCurrentThread()); |
DVLOG(1) << "MediaStreamDispatcher::GenerateStream(" << request_id << ")"; |
requests_.push_back(Request(event_handler, request_id, next_ipc_id_)); |
@@ -82,7 +53,6 @@ |
} |
void MediaStreamDispatcher::CancelGenerateStream(int request_id) { |
- DCHECK(main_loop_->BelongsToCurrentThread()); |
DVLOG(1) << "MediaStreamDispatcher::CancelGenerateStream" |
<< ", {request_id = " << request_id << "}"; |
@@ -99,7 +69,6 @@ |
} |
void MediaStreamDispatcher::StopStream(const std::string& label) { |
- DCHECK(main_loop_->BelongsToCurrentThread()); |
DVLOG(1) << "MediaStreamDispatcher::StopStream" |
<< ", {label = " << label << "}"; |
@@ -116,73 +85,22 @@ |
const base::WeakPtr<MediaStreamDispatcherEventHandler>& event_handler, |
media_stream::MediaStreamType type, |
const GURL& security_origin) { |
- DCHECK(main_loop_->BelongsToCurrentThread()); |
- DCHECK(type == content::MEDIA_STREAM_DEVICE_TYPE_AUDIO_CAPTURE || |
- type == content::MEDIA_STREAM_DEVICE_TYPE_VIDEO_CAPTURE); |
DVLOG(1) << "MediaStreamDispatcher::EnumerateDevices(" |
<< request_id << ")"; |
- EnumerationState* state = |
- (type == content::MEDIA_STREAM_DEVICE_TYPE_AUDIO_CAPTURE ? |
- &audio_enumeration_state_ : &video_enumeration_state_); |
- state->requests.push_back( |
- EnumerationRequest(event_handler, request_id)); |
- |
- if (state->cached_devices.get()) { |
- event_handler->OnDevicesEnumerated( |
- request_id, state->cached_devices->devices); |
- } else if (state->ipc_id < 0) { |
- Send(new MediaStreamHostMsg_EnumerateDevices(routing_id(), |
- next_ipc_id_, |
- type, |
- security_origin)); |
- state->ipc_id = next_ipc_id_++; |
- } |
+ requests_.push_back(Request(event_handler, request_id, next_ipc_id_)); |
+ Send(new MediaStreamHostMsg_EnumerateDevices(routing_id(), |
+ next_ipc_id_++, |
+ type, |
+ security_origin)); |
} |
-void MediaStreamDispatcher::StopEnumerateDevices( |
- int request_id, |
- const base::WeakPtr<MediaStreamDispatcherEventHandler>& event_handler) { |
- DCHECK(main_loop_->BelongsToCurrentThread()); |
- DVLOG(1) << "MediaStreamDispatcher::StopEnumerateDevices(" |
- << request_id << ")"; |
- |
- // Remove the request. |
- RemoveEnumerationRequest( |
- request_id, event_handler, &audio_enumeration_state_); |
- RemoveEnumerationRequest( |
- request_id, event_handler, &video_enumeration_state_); |
-} |
- |
-void MediaStreamDispatcher::RemoveEnumerationRequest( |
- int request_id, |
- const base::WeakPtr<MediaStreamDispatcherEventHandler>& event_handler, |
- EnumerationState* state) { |
- EnumerationRequestList* requests = &state->requests; |
- for (EnumerationRequestList::iterator it = requests->begin(); |
- it != requests->end(); ++it) { |
- if (it->request_id == request_id && it->handler == event_handler) { |
- requests->erase(it); |
- if (requests->empty() && !state->cached_devices.get()) { |
- // No more request and has a label, try to stop the label |
- // and invalidate the state. |
- Send(new MediaStreamHostMsg_StopGeneratedStream( |
- routing_id(), state->cached_devices->label)); |
- state->ipc_id = -1; |
- state->cached_devices.reset(); |
- } |
- return; |
- } |
- } |
-} |
- |
void MediaStreamDispatcher::OpenDevice( |
int request_id, |
const base::WeakPtr<MediaStreamDispatcherEventHandler>& event_handler, |
const std::string& device_id, |
media_stream::MediaStreamType type, |
const GURL& security_origin) { |
- DCHECK(main_loop_->BelongsToCurrentThread()); |
DVLOG(1) << "MediaStreamDispatcher::OpenDevice(" << request_id << ")"; |
requests_.push_back(Request(event_handler, request_id, next_ipc_id_)); |
@@ -194,7 +112,6 @@ |
} |
void MediaStreamDispatcher::CloseDevice(const std::string& label) { |
- DCHECK(main_loop_->BelongsToCurrentThread()); |
DVLOG(1) << "MediaStreamDispatcher::CloseDevice" |
<< ", {label = " << label << "}"; |
@@ -230,7 +147,6 @@ |
const std::string& label, |
const media_stream::StreamDeviceInfoArray& audio_array, |
const media_stream::StreamDeviceInfoArray& video_array) { |
- DCHECK(main_loop_->BelongsToCurrentThread()); |
for (RequestList::iterator it = requests_.begin(); |
it != requests_.end(); ++it) { |
@@ -254,7 +170,6 @@ |
} |
void MediaStreamDispatcher::OnStreamGenerationFailed(int request_id) { |
- DCHECK(main_loop_->BelongsToCurrentThread()); |
for (RequestList::iterator it = requests_.begin(); |
it != requests_.end(); ++it) { |
Request& request = *it; |
@@ -272,7 +187,6 @@ |
void MediaStreamDispatcher::OnVideoDeviceFailed(const std::string& label, |
int index) { |
- DCHECK(main_loop_->BelongsToCurrentThread()); |
LabelStreamMap::iterator it = label_stream_map_.find(label); |
if (it == label_stream_map_.end()) |
return; |
@@ -288,7 +202,6 @@ |
void MediaStreamDispatcher::OnAudioDeviceFailed(const std::string& label, |
int index) { |
- DCHECK(main_loop_->BelongsToCurrentThread()); |
LabelStreamMap::iterator it = label_stream_map_.find(label); |
if (it == label_stream_map_.end()) |
return; |
@@ -304,41 +217,24 @@ |
void MediaStreamDispatcher::OnDevicesEnumerated( |
int request_id, |
- const std::string& label, |
const media_stream::StreamDeviceInfoArray& device_array) { |
- DCHECK(main_loop_->BelongsToCurrentThread()); |
- DCHECK_GE(request_id, 0); |
- EnumerationState* state; |
- if (request_id == audio_enumeration_state_.ipc_id) { |
- state = &audio_enumeration_state_; |
- } else if (request_id == video_enumeration_state_.ipc_id) { |
- state = &video_enumeration_state_; |
- } else { |
- // This could happen when requester has stopped enumeration while some |
- // enumerated response is on the way. Have to stop the |label| because |
- // this might be the first enumerated device list is received. This also |
- // lead to same label being stopped multiple times. |
- Send(new MediaStreamHostMsg_StopGeneratedStream(routing_id(), label)); |
- return; |
- } |
- |
- DCHECK(!label.empty()); |
- state->cached_devices.reset(new EnumerationState::CachedDevices( |
- label, device_array)); |
- |
- for (EnumerationRequestList::iterator it = state->requests.begin(); |
- it != state->requests.end(); ++it) { |
- if (it->handler) { |
- it->handler->OnDevicesEnumerated(it->request_id, device_array); |
- DVLOG(1) << "MediaStreamDispatcher::OnDevicesEnumerated(" |
- << it->request_id << ")"; |
+ for (RequestList::iterator it = requests_.begin(); |
+ it != requests_.end(); ++it) { |
+ Request& request = *it; |
+ if (request.ipc_request == request_id) { |
+ if (request.handler) { |
+ request.handler->OnDevicesEnumerated(request.request_id, device_array); |
+ DVLOG(1) << "MediaStreamDispatcher::OnDevicesEnumerated(" |
+ << request.request_id << ")"; |
+ } |
+ requests_.erase(it); |
+ break; |
} |
} |
} |
void MediaStreamDispatcher::OnDevicesEnumerationFailed(int request_id) { |
- DCHECK(main_loop_->BelongsToCurrentThread()); |
for (RequestList::iterator it = requests_.begin(); |
it != requests_.end(); ++it) { |
Request& request = *it; |
@@ -358,7 +254,6 @@ |
int request_id, |
const std::string& label, |
const media_stream::StreamDeviceInfo& device_info) { |
- DCHECK(main_loop_->BelongsToCurrentThread()); |
for (RequestList::iterator it = requests_.begin(); |
it != requests_.end(); ++it) { |
Request& request = *it; |
@@ -385,7 +280,6 @@ |
} |
void MediaStreamDispatcher::OnDeviceOpenFailed(int request_id) { |
- DCHECK(main_loop_->BelongsToCurrentThread()); |
for (RequestList::iterator it = requests_.begin(); |
it != requests_.end(); ++it) { |
Request& request = *it; |