From 3a40b5176b4c584fd702838f08832f67ba4c4b78 Mon Sep 17 00:00:00 2001 From: Samuel Attard Date: Wed, 29 Jan 2020 12:29:49 -0800 Subject: [PATCH] fix: use the new MediaPlayPause key listener for internal chrome logic --- buildflags/BUILD.gn | 1 - buildflags/buildflags.gni | 2 - patches/chromium/.patches | 1 + patches/chromium/command-ismediakey.patch | 15 ----- ...use_key_listener_for_internal_chrome.patch | 65 +++++++++++++++++++ 5 files changed, 66 insertions(+), 18 deletions(-) create mode 100644 patches/chromium/fix_use_the_new_mediaplaypause_key_listener_for_internal_chrome.patch diff --git a/buildflags/BUILD.gn b/buildflags/BUILD.gn index 8a93310cff1cf..6209a7de40d8c 100644 --- a/buildflags/BUILD.gn +++ b/buildflags/BUILD.gn @@ -21,7 +21,6 @@ buildflag_header("buildflags") { "ENABLE_ELECTRON_EXTENSIONS=$enable_electron_extensions", "ENABLE_BUILTIN_SPELLCHECKER=$enable_builtin_spellchecker", "ENABLE_PICTURE_IN_PICTURE=$enable_picture_in_picture", - "ENABLE_MEDIA_KEY_OVERRIDES=$enable_media_key_overrides", "OVERRIDE_LOCATION_PROVIDER=$enable_fake_location_provider", ] } diff --git a/buildflags/buildflags.gni b/buildflags/buildflags.gni index c5f9edd107cb7..9bd6fe1ed6d8e 100644 --- a/buildflags/buildflags.gni +++ b/buildflags/buildflags.gni @@ -22,8 +22,6 @@ declare_args() { enable_picture_in_picture = true - enable_media_key_overrides = true - # Provide a fake location provider for mocking # the geolocation responses. Disable it if you # need to test with chromium's location provider. diff --git a/patches/chromium/.patches b/patches/chromium/.patches index dd3092d699fa2..c1d176c6a2288 100644 --- a/patches/chromium/.patches +++ b/patches/chromium/.patches @@ -83,3 +83,4 @@ add_trustedauthclient_to_urlloaderfactory.patch feat_allow_disbaling_blink_scheduler_throttling_per_renderview.patch accessible_pane_view.patch fix_add_executable_to_chromedriver_s_rpath_for_electron_8.patch +fix_use_the_new_mediaplaypause_key_listener_for_internal_chrome.patch diff --git a/patches/chromium/command-ismediakey.patch b/patches/chromium/command-ismediakey.patch index 5c8d7c10fa071..4d8f4c7c4664b 100644 --- a/patches/chromium/command-ismediakey.patch +++ b/patches/chromium/command-ismediakey.patch @@ -109,18 +109,3 @@ index 85378bb565de617b1bd611d28c8714361747a357..94a899e76586d2c7bb199828bfa4aa1e return event; } -@@ -223,12 +233,14 @@ static CGEventRef EventTapCallback(CGEventTapProxy proxy, - // For Mac OS 10.12.2 or later, we want to use MPRemoteCommandCenter for - // getting media keys globally if there is a RemoteCommandCenterDelegate - // available. -+#if !BUILDFLAG(ENABLE_MEDIA_KEY_OVERRIDES) - if (scope == Scope::kGlobal) { - auto listener = - std::make_unique(delegate); - if (listener->Initialize()) - return listener; - } -+#endif - - return std::make_unique(delegate, scope); - } diff --git a/patches/chromium/fix_use_the_new_mediaplaypause_key_listener_for_internal_chrome.patch b/patches/chromium/fix_use_the_new_mediaplaypause_key_listener_for_internal_chrome.patch new file mode 100644 index 0000000000000..fb5868f45618c --- /dev/null +++ b/patches/chromium/fix_use_the_new_mediaplaypause_key_listener_for_internal_chrome.patch @@ -0,0 +1,65 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Samuel Attard +Date: Wed, 29 Jan 2020 12:28:48 -0800 +Subject: fix: use the new MediaPlayPause key listener for internal chrome + logic + +The new kGlobalRequiresAccessibility Scope type should be upstreamed +and then we can use that and minimize this patch to just the change in +global_shortcut_listener_mac.mm + +diff --git a/chrome/browser/extensions/global_shortcut_listener_mac.mm b/chrome/browser/extensions/global_shortcut_listener_mac.mm +index befe726af9c10b1563a7fc0bb77cc55f65943d5c..bac51f33f35f96fe4ecc764cf5ca887176642f74 100644 +--- a/chrome/browser/extensions/global_shortcut_listener_mac.mm ++++ b/chrome/browser/extensions/global_shortcut_listener_mac.mm +@@ -39,7 +39,7 @@ + // global MediaKeysListener to receive media keys. + if (!content::MediaKeysListenerManager::IsMediaKeysListenerManagerEnabled()) { + media_keys_listener_ = ui::MediaKeysListener::Create( +- this, ui::MediaKeysListener::Scope::kGlobal); ++ this, ui::MediaKeysListener::Scope::kGlobalRequiresAccessibility); + DCHECK(media_keys_listener_); + } + } +diff --git a/ui/base/accelerators/media_keys_listener.h b/ui/base/accelerators/media_keys_listener.h +index 997718d8affaa193fcaabff4cd4c8b0c23df8891..e121598d46e7c62a3b14cb7960136f655cc69ab6 100644 +--- a/ui/base/accelerators/media_keys_listener.h ++++ b/ui/base/accelerators/media_keys_listener.h +@@ -20,8 +20,9 @@ class Accelerator; + class UI_BASE_EXPORT MediaKeysListener { + public: + enum class Scope { +- kGlobal, // Listener works whenever application in focus or not. +- kFocused, // Listener only works whan application has focus. ++ kGlobalRequiresAccessibility, // Listener works whenever application in focus or not but requires accessibility permissions on macOS ++ kGlobal, // Listener works whenever application in focus or not but requires media to be playnig. ++ kFocused, // Listener only works whan application has focus. + }; + + // Media keys accelerators receiver. +diff --git a/ui/base/accelerators/media_keys_listener_linux.cc b/ui/base/accelerators/media_keys_listener_linux.cc +index c74807dfae799851bb2e40996e634d8513e590a0..48f459941cae385e49af09410bb1812db5e6d971 100644 +--- a/ui/base/accelerators/media_keys_listener_linux.cc ++++ b/ui/base/accelerators/media_keys_listener_linux.cc +@@ -13,7 +13,7 @@ std::unique_ptr MediaKeysListener::Create( + MediaKeysListener::Scope scope) { + DCHECK(delegate); + +- if (scope == Scope::kGlobal) { ++ if (scope == Scope::kGlobal || scope == Scope::kGlobalRequiresAccessibility) { + if (!SystemMediaControlsMediaKeysListener::has_instance()) { + auto listener = + std::make_unique(delegate); +diff --git a/ui/base/accelerators/media_keys_listener_win.cc b/ui/base/accelerators/media_keys_listener_win.cc +index c50ea0ca2b8d612b96c0c822f5d36e9eb4ff861d..8b89fea7c09be007d8a020eb4d75f783c887f1a7 100644 +--- a/ui/base/accelerators/media_keys_listener_win.cc ++++ b/ui/base/accelerators/media_keys_listener_win.cc +@@ -14,7 +14,7 @@ std::unique_ptr MediaKeysListener::Create( + MediaKeysListener::Scope scope) { + DCHECK(delegate); + +- if (scope == Scope::kGlobal) { ++ if (scope == Scope::kGlobal || scope == Scope::kGlobalRequiresAccessibility) { + // We should never have more than one global media keys listener. + if (!SystemMediaControlsMediaKeysListener::has_instance() && + !GlobalMediaKeysListenerWin::has_instance()) {