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