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

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

Issue 1918173002: Add support for device-change notifications to MediaStreamDispatcher and MediaStreamDispatcherHost (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase and palmer's comments Created 4 years, 8 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
diff --git a/content/renderer/media/media_stream_dispatcher.cc b/content/renderer/media/media_stream_dispatcher.cc
index 786196f7d12a00fae3f778161d1c81894887cd18..e19b1e03b8021219aeb2ebfe230f78046813ad1d 100644
--- a/content/renderer/media/media_stream_dispatcher.cc
+++ b/content/renderer/media/media_stream_dispatcher.cc
@@ -68,7 +68,9 @@ MediaStreamDispatcher::MediaStreamDispatcher(RenderFrame* render_frame)
next_ipc_id_(0) {
}
-MediaStreamDispatcher::~MediaStreamDispatcher() {}
+MediaStreamDispatcher::~MediaStreamDispatcher() {
+ DCHECK(device_change_subscribers_.empty());
+}
void MediaStreamDispatcher::GenerateStream(
int request_id,
@@ -209,6 +211,43 @@ void MediaStreamDispatcher::CloseDevice(const std::string& label) {
Send(new MediaStreamHostMsg_CloseDevice(routing_id(), label));
}
+void MediaStreamDispatcher::SubscribeToDeviceChangeNotifications(
+ const base::WeakPtr<MediaStreamDispatcherEventHandler>& event_handler,
+ const url::Origin& security_origin) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ DCHECK(std::find_if(
+ device_change_subscribers_.begin(),
+ device_change_subscribers_.end(),
+ [&event_handler](
+ const base::WeakPtr<MediaStreamDispatcherEventHandler>& item) {
+ return event_handler.get() == item.get();
+ }) == device_change_subscribers_.end());
+ DVLOG(1) << "MediaStreamDispatcher::SubscribeToDeviceChangeNotifications";
+
+ if (device_change_subscribers_.empty()) {
+ Send(new MediaStreamHostMsg_SubscribeToDeviceChangeNotifications(
+ routing_id(), security_origin));
+ }
+ device_change_subscribers_.push_back(event_handler);
+}
+
+void MediaStreamDispatcher::CancelDeviceChangeNotifications(
+ const base::WeakPtr<MediaStreamDispatcherEventHandler>& event_handler) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ DVLOG(1) << "MediaStreamDispatcher::SubscribeToDeviceChangeNotifications";
+ auto it = std::find_if(
+ device_change_subscribers_.begin(), device_change_subscribers_.end(),
+ [&event_handler](
+ const base::WeakPtr<MediaStreamDispatcherEventHandler>& item) {
+ return event_handler.get() == item.get();
+ });
+ CHECK(it != device_change_subscribers_.end());
+ device_change_subscribers_.erase(it);
+
+ if (device_change_subscribers_.empty())
+ Send(new MediaStreamHostMsg_CancelDeviceChangeNotifications(routing_id()));
+}
+
void MediaStreamDispatcher::OnDestruct() {
// Do not self-destruct. UserMediaClientImpl owns |this|.
}
@@ -237,6 +276,7 @@ bool MediaStreamDispatcher::OnMessageReceived(const IPC::Message& message) {
OnDeviceOpened)
IPC_MESSAGE_HANDLER(MediaStreamMsg_DeviceOpenFailed,
OnDeviceOpenFailed)
+ IPC_MESSAGE_HANDLER(MediaStreamMsg_DevicesChanged, OnDevicesChanged)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
return handled;
@@ -378,6 +418,14 @@ void MediaStreamDispatcher::OnDeviceOpenFailed(int request_id) {
}
}
+void MediaStreamDispatcher::OnDevicesChanged() {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ for (auto event_handler : device_change_subscribers_) {
+ DCHECK(event_handler);
+ event_handler->OnDevicesChanged();
+ }
+}
+
int MediaStreamDispatcher::audio_session_id(const std::string& label,
int index) {
DCHECK(thread_checker_.CalledOnValidThread());
« no previous file with comments | « content/renderer/media/media_stream_dispatcher.h ('k') | content/renderer/media/media_stream_dispatcher_eventhandler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698