1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 #ifndef WIDGET_COCOA_MEDIAHARDWAREKEYSEVENTSOURCEMACMEDIACENTER_H_
6 #define WIDGET_COCOA_MEDIAHARDWAREKEYSEVENTSOURCEMACMEDIACENTER_H_
8 #include "mozilla/dom/FetchImageHelper.h"
9 #include "mozilla/dom/MediaControlKeySource.h"
12 @
class MPRemoteCommandEvent
;
14 typedef struct objc_object MPRemoteCommandEvent
;
16 enum MPRemoteCommandHandlerStatus
: long;
21 typedef MPRemoteCommandHandlerStatus (^MediaCenterEventHandler
)(
22 MPRemoteCommandEvent
* event
);
24 class MediaHardwareKeysEventSourceMacMediaCenter final
25 : public mozilla::dom::MediaControlKeySource
{
27 NS_INLINE_DECL_REFCOUNTING(MediaHardwareKeysEventSourceMacMediaCenter
,
29 MediaHardwareKeysEventSourceMacMediaCenter();
31 MediaCenterEventHandler
CreatePlayPauseHandler();
32 MediaCenterEventHandler
CreateNextTrackHandler();
33 MediaCenterEventHandler
CreatePreviousTrackHandler();
34 MediaCenterEventHandler
CreatePlayHandler();
35 MediaCenterEventHandler
CreatePauseHandler();
36 MediaCenterEventHandler
CreateChangePlaybackPositionHandler();
39 void Close() override
;
40 bool IsOpened() const override
;
41 void SetPlaybackState(dom::MediaSessionPlaybackState aState
) override
;
42 void SetMediaMetadata(const dom::MediaMetadataBase
& aMetadata
) override
;
43 void SetSupportedMediaKeys(const MediaKeysArray
& aSupportedKeys
) override
;
44 void SetPositionState(const Maybe
<dom::PositionState
>& aState
) override
;
47 ~MediaHardwareKeysEventSourceMacMediaCenter();
48 void BeginListeningForEvents();
49 void EndListeningForEvents();
50 void HandleEvent(const dom::MediaControlAction
& aAction
);
51 void UpdatePositionInfo();
54 Maybe
<dom::PositionState
> mPositionState
;
55 dom::MediaMetadataBase mMediaMetadata
;
57 // Should only be used on main thread
58 UniquePtr
<dom::FetchImageHelper
> mImageFetcher
;
59 MozPromiseRequestHolder
<dom::ImagePromise
> mImageFetchRequest
;
61 nsString mFetchingUrl
;
62 nsString mCurrentImageUrl
;
63 size_t mNextImageIndex
= 0;
65 void LoadImageAtIndex(const size_t aIndex
);
67 MediaCenterEventHandler mPlayPauseHandler
;
68 MediaCenterEventHandler mNextTrackHandler
;
69 MediaCenterEventHandler mPreviousTrackHandler
;
70 MediaCenterEventHandler mPauseHandler
;
71 MediaCenterEventHandler mPlayHandler
;
72 MediaCenterEventHandler mChangePlaybackPositionHandler
;
76 } // namespace mozilla
78 #endif // WIDGET_COCOA_MEDIAHARDWAREKEYSEVENTSOURCEMACMEDIACENTER_H_