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

Unified Diff: content/renderer/media/media_devices_event_dispatcher.h

Issue 2480203002: ui: Cleanup class/struct forward declarations (Closed)
Patch Set: Sync CL to position 430550 Created 4 years, 1 month 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_devices_event_dispatcher.h
diff --git a/content/renderer/media/media_devices_event_dispatcher.h b/content/renderer/media/media_devices_event_dispatcher.h
new file mode 100644
index 0000000000000000000000000000000000000000..c5e241e482e481119049fd7bb9e18777d8d00df8
--- /dev/null
+++ b/content/renderer/media/media_devices_event_dispatcher.h
@@ -0,0 +1,111 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_RENDERER_MEDIA_MEDIA_DEVICES_EVENT_DISPATCHER_H_
+#define CONTENT_RENDERER_MEDIA_MEDIA_DEVICES_EVENT_DISPATCHER_H_
+
+#include <stdint.h>
+
+#include <utility>
+#include <vector>
+
+#include "base/macros.h"
+#include "base/memory/weak_ptr.h"
+#include "base/threading/thread_checker.h"
+#include "content/common/content_export.h"
+#include "content/common/media/media_devices.h"
+#include "content/common/media/media_devices.mojom.h"
+#include "content/public/renderer/render_frame_observer.h"
+#include "content/public/renderer/render_frame_observer_tracker.h"
+
+namespace url {
+class Origin;
+}
+
+namespace content {
+
+// This class implements the logic for managing media device-change
+// subscriptions on the renderer process. It manages the generation of
+// subscription IDs and handles the interaction with the Mojo objects that
+// communicate with the browser process. There is at most one instance of this
+// class per frame.
+class CONTENT_EXPORT MediaDevicesEventDispatcher
+ : public RenderFrameObserver,
+ public RenderFrameObserverTracker<MediaDevicesEventDispatcher>,
+ public base::SupportsWeakPtr<MediaDevicesEventDispatcher> {
+ public:
+ using SubscriptionId = uint32_t;
+ using SubscriptionIdList = std::vector<SubscriptionId>;
+ using DevicesChangedCallback =
+ base::Callback<void(MediaDeviceType, const MediaDeviceInfoArray&)>;
+
+ // Returns a weak pointer to the MediaDevicesEventDispatcher for the given
+ // |render_frame|.
+ static base::WeakPtr<MediaDevicesEventDispatcher> GetForRenderFrame(
+ RenderFrame* render_frame);
+
+ ~MediaDevicesEventDispatcher() override;
+
+ // Register a callback for device-change notifications for a given device
+ // type. Returns a subscription ID that can be used to cancel the
+ // subscription.
+ SubscriptionId SubscribeDeviceChangeNotifications(
+ MediaDeviceType type,
+ const url::Origin& security_origin,
+ const DevicesChangedCallback& callback);
+
+ // Cancels a subscription identified with |subscription_id| to device-change
+ // notifications for device type |type|. If no subscription identified with
+ // |subscription_id| exists for device type |type|, this function returns
+ // without side effects.
+ void UnsubscribeDeviceChangeNotifications(MediaDeviceType type,
+ SubscriptionId subscription_id);
+
+ // Register a callback for device-change notifications for any device type.
+ // Returns a list of subscription IDs that can be used to cancel the
+ // subscriptions.
+ SubscriptionIdList SubscribeDeviceChangeNotifications(
+ const url::Origin& security_origin,
+ const DevicesChangedCallback& callback);
+
+ // Cancels subscriptions identified by |subscription_ids| to device-change
+ // notifications for all device types. This is implemented by invoking the
+ // single-parameter version of UnsubscribeDeviceChangeNotifications() for all
+ // device types.
+ void UnsubscribeDeviceChangeNotifications(
+ const SubscriptionIdList& subscription_ids);
+
+ // Dispatches an event notification to all registered callbacks for device
+ // type |type|. Should be invoked only by an object that detects changes in
+ // the set of media devices.
+ void DispatchDevicesChangedEvent(MediaDeviceType type,
+ const MediaDeviceInfoArray& device_infos);
+
+ // RenderFrameObserver override.
+ void OnDestruct() override;
+
+ void SetMediaDevicesDispatcherForTesting(
+ ::mojom::MediaDevicesDispatcherHostPtr media_devices_dispatcher);
+
+ private:
+ explicit MediaDevicesEventDispatcher(RenderFrame* render_frame);
+
+ const ::mojom::MediaDevicesDispatcherHostPtr& GetMediaDevicesDispatcher();
+
+ SubscriptionId current_id_;
+
+ using Subscription = std::pair<SubscriptionId, DevicesChangedCallback>;
+ using SubscriptionList = std::vector<Subscription>;
+ SubscriptionList device_change_subscriptions_[NUM_MEDIA_DEVICE_TYPES];
+
+ ::mojom::MediaDevicesDispatcherHostPtr media_devices_dispatcher_;
+
+ base::ThreadChecker thread_checker_;
+
+ DISALLOW_COPY_AND_ASSIGN(MediaDevicesEventDispatcher);
+};
+
+} // namespace content
+
+#endif // CONTENT_RENDERER_MEDIA_MEDIA_DEVICES_EVENT_DISPATCHER_H_
« no previous file with comments | « content/renderer/media/android/webmediaplayer_android.cc ('k') | content/renderer/media/media_devices_event_dispatcher.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698