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/. */
4 
5 #ifndef WIDGET_COCOA_MEDIAHARDWAREKEYSEVENTSOURCEMACMEDIACENTER_H_
6 #define WIDGET_COCOA_MEDIAHARDWAREKEYSEVENTSOURCEMACMEDIACENTER_H_
7 
8 #include "mozilla/dom/MediaControlKeySource.h"
9 
10 #ifdef __OBJC__
11 @class MPRemoteCommandEvent;
12 #else
13 typedef struct objc_object MPRemoteCommandEvent;
14 #endif
15 enum MPRemoteCommandHandlerStatus : long;
16 
17 namespace mozilla {
18 namespace widget {
19 
20 typedef MPRemoteCommandHandlerStatus (^MediaCenterEventHandler)(MPRemoteCommandEvent* event);
21 
22 class MediaHardwareKeysEventSourceMacMediaCenter final
23     : public mozilla::dom::MediaControlKeySource {
24  public:
25   NS_INLINE_DECL_REFCOUNTING(MediaHardwareKeysEventSourceMacMediaCenter, override)
26   MediaHardwareKeysEventSourceMacMediaCenter();
27 
28   MediaCenterEventHandler CreatePlayPauseHandler();
29   MediaCenterEventHandler CreateNextTrackHandler();
30   MediaCenterEventHandler CreatePreviousTrackHandler();
31   MediaCenterEventHandler CreatePlayHandler();
32   MediaCenterEventHandler CreatePauseHandler();
33 
34   bool Open() override;
35   void Close() override;
36   bool IsOpened() const override;
37   void SetPlaybackState(dom::MediaSessionPlaybackState aState) override;
38   void SetMediaMetadata(const dom::MediaMetadataBase& aMetadata) override;
39   // Currently we don't support showing supported keys on the touch bar.
SetSupportedMediaKeys(const MediaKeysArray & aSupportedKeys)40   void SetSupportedMediaKeys(const MediaKeysArray& aSupportedKeys) override {}
41 
42  private:
43   ~MediaHardwareKeysEventSourceMacMediaCenter();
44   void BeginListeningForEvents();
45   void EndListeningForEvents();
46   void HandleEvent(dom::MediaControlKey aKey);
47 
48   bool mOpened = false;
49 
50   MediaCenterEventHandler mPlayPauseHandler;
51   MediaCenterEventHandler mNextTrackHandler;
52   MediaCenterEventHandler mPreviousTrackHandler;
53   MediaCenterEventHandler mPauseHandler;
54   MediaCenterEventHandler mPlayHandler;
55 };
56 
57 }  // namespace widget
58 }  // namespace mozilla
59 
60 #endif  // WIDGET_COCOA_MEDIAHARDWAREKEYSEVENTSOURCEMACMEDIACENTER_H_
61