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

Unified Diff: content/renderer/media/media_stream_dispatcher.cc

Issue 18420011: Support cancellation of request for opening device. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: add IsThisRequest method and some comments Created 7 years, 6 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 side-by-side diff with in-line comments
Download patch
Index: content/renderer/media/media_stream_dispatcher.cc
===================================================================
--- content/renderer/media/media_stream_dispatcher.cc (revision 209718)
+++ content/renderer/media/media_stream_dispatcher.cc (working copy)
@@ -14,6 +14,11 @@
namespace content {
+// A request is identified by pair (request_id, handler), or ipc_request.
+// There could be multiple clients making requests and each has its own
+// request_id sequence.
+// The ipc_request is garanteed to be unique when it's created in
+// MediaStreamDispatcher.
struct MediaStreamDispatcher::Request {
Request(const base::WeakPtr<MediaStreamDispatcherEventHandler>& handler,
int request_id,
@@ -22,6 +27,11 @@
request_id(request_id),
ipc_request(ipc_request) {
}
+ bool IsThisRequest(
+ int request_id1,
+ const base::WeakPtr<MediaStreamDispatcherEventHandler>& handler1) {
+ return (request_id1 == request_id && handler1.get() == handler.get());
+ }
base::WeakPtr<MediaStreamDispatcherEventHandler> handler;
int request_id;
int ipc_request;
@@ -44,6 +54,12 @@
MediaStreamDispatcher::EnumerationRequest::~EnumerationRequest() {}
+bool MediaStreamDispatcher::EnumerationRequest::IsThisRequest(
+ int request_id1,
+ const base::WeakPtr<MediaStreamDispatcherEventHandler>& handler1) {
+ return (request_id1 == request_id && handler1.get() == handler.get());
+}
+
MediaStreamDispatcher::EnumerationState::EnumerationState()
: ipc_id(-1) {
}
@@ -85,18 +101,20 @@
security_origin));
}
-void MediaStreamDispatcher::CancelGenerateStream(int request_id) {
+void MediaStreamDispatcher::CancelGenerateStream(
+ int request_id,
+ const base::WeakPtr<MediaStreamDispatcherEventHandler>& event_handler) {
DCHECK(main_loop_->BelongsToCurrentThread());
DVLOG(1) << "MediaStreamDispatcher::CancelGenerateStream"
<< ", {request_id = " << request_id << "}";
RequestList::iterator it = requests_.begin();
for (; it != requests_.end(); ++it) {
- Request& request = *it;
- if (request.request_id == request_id) {
+ if (it->IsThisRequest(request_id, event_handler)) {
+ int ipc_request = it->ipc_request;
requests_.erase(it);
Send(new MediaStreamHostMsg_CancelGenerateStream(routing_id(),
- request_id));
+ ipc_request));
break;
}
}
@@ -164,8 +182,7 @@
EnumerationRequestList* requests = &state->requests;
for (EnumerationRequestList::iterator it = requests->begin();
it != requests->end(); ++it) {
- if (it->request_id == request_id &&
- it->handler.get() == event_handler.get()) {
+ if (it->IsThisRequest(request_id, event_handler)) {
requests->erase(it);
if (requests->empty() && state->cached_devices) {
// No more request and has a label, try to stop the label
@@ -197,6 +214,12 @@
security_origin));
}
+void MediaStreamDispatcher::CancelOpenDevice(
+ int request_id,
+ const base::WeakPtr<MediaStreamDispatcherEventHandler>& event_handler) {
+ CancelGenerateStream(request_id, event_handler);
+}
+
void MediaStreamDispatcher::CloseDevice(const std::string& label) {
DCHECK(main_loop_->BelongsToCurrentThread());
DVLOG(1) << "MediaStreamDispatcher::CloseDevice"
« no previous file with comments | « content/renderer/media/media_stream_dispatcher.h ('k') | content/renderer/media/media_stream_dispatcher_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698