|
@@ -10,33 +10,94 @@ receive remote control events until it begins playing audio. This runs
|
|
|
counter to the design of globalShortcuts, and so we need to instead
|
|
|
use `ui::MediaKeysListener`.
|
|
|
|
|
|
+diff --git a/chrome/browser/extensions/global_shortcut_listener.cc b/chrome/browser/extensions/global_shortcut_listener.cc
|
|
|
+index bc009606d01469125052e68a9cdc82aaa697c764..ff18043cb07d748a49adea9874517fb29e3e7f9f 100644
|
|
|
+--- a/chrome/browser/extensions/global_shortcut_listener.cc
|
|
|
++++ b/chrome/browser/extensions/global_shortcut_listener.cc
|
|
|
+@@ -7,6 +7,7 @@
|
|
|
+ #include "base/check.h"
|
|
|
+ #include "base/notreached.h"
|
|
|
+ #include "content/public/browser/browser_thread.h"
|
|
|
++#include "content/public/browser/media_keys_listener_manager.h"
|
|
|
+ #include "ui/base/accelerators/accelerator.h"
|
|
|
+
|
|
|
+ using content::BrowserThread;
|
|
|
+@@ -66,6 +67,22 @@ void GlobalShortcutListener::UnregisterAccelerator(
|
|
|
+ StopListening();
|
|
|
+ }
|
|
|
+
|
|
|
++// static
|
|
|
++void GlobalShortcutListener::SetShouldUseInternalMediaKeyHandling(bool should_use) {
|
|
|
++ if (content::MediaKeysListenerManager::
|
|
|
++ IsMediaKeysListenerManagerEnabled()) {
|
|
|
++ content::MediaKeysListenerManager* media_keys_listener_manager =
|
|
|
++ content::MediaKeysListenerManager::GetInstance();
|
|
|
++ DCHECK(media_keys_listener_manager);
|
|
|
++
|
|
|
++ if (should_use) {
|
|
|
++ media_keys_listener_manager->EnableInternalMediaKeyHandling();
|
|
|
++ } else {
|
|
|
++ media_keys_listener_manager->DisableInternalMediaKeyHandling();
|
|
|
++ }
|
|
|
++ }
|
|
|
++}
|
|
|
++
|
|
|
+ void GlobalShortcutListener::UnregisterAccelerators(Observer* observer) {
|
|
|
+ CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
|
|
+ if (IsShortcutHandlingSuspended())
|
|
|
+diff --git a/chrome/browser/extensions/global_shortcut_listener.h b/chrome/browser/extensions/global_shortcut_listener.h
|
|
|
+index 9aec54a3263d24491d24013a80b719dfc834ecd4..001a6cb2a5eb701351fa924109b43fab6f30748d 100644
|
|
|
+--- a/chrome/browser/extensions/global_shortcut_listener.h
|
|
|
++++ b/chrome/browser/extensions/global_shortcut_listener.h
|
|
|
+@@ -31,6 +31,8 @@ class GlobalShortcutListener {
|
|
|
+
|
|
|
+ static GlobalShortcutListener* GetInstance();
|
|
|
+
|
|
|
++ static void SetShouldUseInternalMediaKeyHandling(bool should_use);
|
|
|
++
|
|
|
+ // Register an observer for when a certain |accelerator| is struck. Returns
|
|
|
+ // true if register successfully, or false if 1) the specificied |accelerator|
|
|
|
+ // has been registered by another caller or other native applications, or
|
|
|
diff --git a/content/browser/media/media_keys_listener_manager_impl.cc b/content/browser/media/media_keys_listener_manager_impl.cc
|
|
|
-index 5938f75742b793868638e693a9a8c8dc686dfc46..bf8782c23095a09dec62c68d7d902df24abcb13e 100644
|
|
|
+index 5938f75742b793868638e693a9a8c8dc686dfc46..1263d679a5174beb960265989c370dd4a58ae7b4 100644
|
|
|
--- a/content/browser/media/media_keys_listener_manager_impl.cc
|
|
|
+++ b/content/browser/media/media_keys_listener_manager_impl.cc
|
|
|
-@@ -231,7 +231,7 @@ void MediaKeysListenerManagerImpl::StartListeningForMediaKeysIfNecessary() {
|
|
|
+@@ -231,18 +231,24 @@ void MediaKeysListenerManagerImpl::StartListeningForMediaKeysIfNecessary() {
|
|
|
media::AudioManager::GetGlobalAppName());
|
|
|
#endif
|
|
|
|
|
|
- if (system_media_controls_) {
|
|
|
-+ if (/* DISABLES CODE */ (0)) {
|
|
|
- system_media_controls_->AddObserver(this);
|
|
|
- system_media_controls_notifier_ =
|
|
|
- std::make_unique<SystemMediaControlsNotifier>(
|
|
|
-@@ -239,8 +239,13 @@ void MediaKeysListenerManagerImpl::StartListeningForMediaKeysIfNecessary() {
|
|
|
- } else {
|
|
|
- // If we can't access system media controls, then directly listen for media
|
|
|
- // key keypresses instead.
|
|
|
-+#if defined(OS_MAC)
|
|
|
-+ media_keys_listener_ = ui::MediaKeysListener::Create(
|
|
|
-+ this, ui::MediaKeysListener::Scope::kGlobalRequiresAccessibility);
|
|
|
-+#else
|
|
|
+- system_media_controls_->AddObserver(this);
|
|
|
+- system_media_controls_notifier_ =
|
|
|
+- std::make_unique<SystemMediaControlsNotifier>(
|
|
|
+- system_media_controls_.get());
|
|
|
+- } else {
|
|
|
+- // If we can't access system media controls, then directly listen for media
|
|
|
+- // key keypresses instead.
|
|
|
++ // This is required for proper functioning of MediaMetadata.
|
|
|
++ system_media_controls_->AddObserver(this);
|
|
|
++ system_media_controls_notifier_ =
|
|
|
++ std::make_unique<SystemMediaControlsNotifier>(
|
|
|
++ system_media_controls_.get());
|
|
|
++
|
|
|
++ // Directly listen for media key keypresses when using GlobalShortcuts.
|
|
|
++#if defined(OS_MACOS)
|
|
|
++ auto scope = media_key_handling_enabled_ ?
|
|
|
++ ui::MediaKeysListener::Scope::kGlobal :
|
|
|
++ ui::MediaKeysListener::Scope::kGlobalRequiresAccessibility;
|
|
|
media_keys_listener_ = ui::MediaKeysListener::Create(
|
|
|
- this, ui::MediaKeysListener::Scope::kGlobal);
|
|
|
+- this, ui::MediaKeysListener::Scope::kGlobal);
|
|
|
+- DCHECK(media_keys_listener_);
|
|
|
+- }
|
|
|
++ this, scope);
|
|
|
++#else
|
|
|
++ media_keys_listener_ = ui::MediaKeysListener::Create(
|
|
|
++ this, ui::MediaKeysListener::Scope::kGlobal);
|
|
|
+#endif
|
|
|
- DCHECK(media_keys_listener_);
|
|
|
- }
|
|
|
++ DCHECK(media_keys_listener_);
|
|
|
|
|
|
+ EnsureAuxiliaryServices();
|
|
|
+ }
|
|
|
diff --git a/ui/base/accelerators/media_keys_listener.h b/ui/base/accelerators/media_keys_listener.h
|
|
|
index c2b03328c0e508995bdc135031500783f500ceba..1b6b14dc2999c99445cef6ffc04d49a7c1728a54 100644
|
|
|
--- a/ui/base/accelerators/media_keys_listener.h
|