diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
commit | 26a029d407be480d791972afb5975cf62c9360a6 (patch) | |
tree | f435a8308119effd964b339f76abb83a57c29483 /dom/media/mediacontrol/MediaControlKeyManager.h | |
parent | Initial commit. (diff) | |
download | firefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz firefox-26a029d407be480d791972afb5975cf62c9360a6.zip |
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'dom/media/mediacontrol/MediaControlKeyManager.h')
-rw-r--r-- | dom/media/mediacontrol/MediaControlKeyManager.h | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/dom/media/mediacontrol/MediaControlKeyManager.h b/dom/media/mediacontrol/MediaControlKeyManager.h new file mode 100644 index 0000000000..feb857e335 --- /dev/null +++ b/dom/media/mediacontrol/MediaControlKeyManager.h @@ -0,0 +1,73 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef DOM_MEDIA_MEDIACONTROL_MEDIACONTROLKEYMANAGER_H_ +#define DOM_MEDIA_MEDIACONTROL_MEDIACONTROLKEYMANAGER_H_ + +#include "MediaControlKeySource.h" +#include "MediaEventSource.h" +#include "nsIObserver.h" + +namespace mozilla::dom { + +/** + * MediaControlKeyManager is a wrapper of MediaControlKeySource, which + * is used to manage creating and destroying a real media keys event source. + * + * It monitors the amount of the media controller in MediaService, and would + * create the event source when there is any existing controller and destroy it + * when there is no controller. + */ +class MediaControlKeyManager final : public MediaControlKeySource, + public MediaControlKeyListener { + public: + NS_INLINE_DECL_REFCOUNTING(MediaControlKeyManager, override) + + MediaControlKeyManager(); + + // MediaControlKeySource methods + bool Open() override; + void Close() override; + bool IsOpened() const override; + + void SetPlaybackState(MediaSessionPlaybackState aState) override; + MediaSessionPlaybackState GetPlaybackState() const override; + + // MediaControlKeyListener methods + void OnActionPerformed(const MediaControlAction& aAction) override; + + void SetMediaMetadata(const MediaMetadataBase& aMetadata) override; + void SetSupportedMediaKeys(const MediaKeysArray& aSupportedKeys) override; + void SetEnableFullScreen(bool aIsEnabled) override; + void SetEnablePictureInPictureMode(bool aIsEnabled) override; + void SetPositionState(const PositionState& aState) override; + + private: + ~MediaControlKeyManager(); + void Shutdown(); + + class Observer final : public nsIObserver { + public: + NS_DECL_ISUPPORTS + NS_DECL_NSIOBSERVER + explicit Observer(MediaControlKeyManager* aManager); + + protected: + virtual ~Observer() = default; + + MediaControlKeyManager* MOZ_OWNING_REF mManager; + }; + RefPtr<Observer> mObserver; + void OnPreferenceChange(); + + bool StartMonitoringControlKeys(); + void StopMonitoringControlKeys(); + RefPtr<MediaControlKeySource> mEventSource; + MediaMetadataBase mMetadata; + nsTArray<MediaControlKey> mSupportedKeys; +}; + +} // namespace mozilla::dom + +#endif |