@@ -10,33 +10,94 @@ receive remote control events until it begins playing audio. This runs
10
10
counter to the design of globalShortcuts, and so we need to instead
11
11
use `ui::MediaKeysListener`.
12
12
13
+ diff --git a/chrome/browser/extensions/global_shortcut_listener.cc b/chrome/browser/extensions/global_shortcut_listener.cc
14
+ index bc009606d01469125052e68a9cdc82aaa697c764..ff18043cb07d748a49adea9874517fb29e3e7f9f 100644
15
+ --- a/chrome/browser/extensions/global_shortcut_listener.cc
16
+ +++ b/chrome/browser/extensions/global_shortcut_listener.cc
17
+ @@ -7,6 +7,7 @@
18
+ #include "base/check.h"
19
+ #include "base/notreached.h"
20
+ #include "content/public/browser/browser_thread.h"
21
+ + #include "content/public/browser/media_keys_listener_manager.h"
22
+ #include "ui/base/accelerators/accelerator.h"
23
+
24
+ using content::BrowserThread;
25
+ @@ -66,6 +67,22 @@ void GlobalShortcutListener::UnregisterAccelerator(
26
+ StopListening();
27
+ }
28
+
29
+ + // static
30
+ + void GlobalShortcutListener::SetShouldUseInternalMediaKeyHandling(bool should_use) {
31
+ + if (content::MediaKeysListenerManager::
32
+ + IsMediaKeysListenerManagerEnabled()) {
33
+ + content::MediaKeysListenerManager* media_keys_listener_manager =
34
+ + content::MediaKeysListenerManager::GetInstance();
35
+ + DCHECK(media_keys_listener_manager);
36
+ +
37
+ + if (should_use) {
38
+ + media_keys_listener_manager->EnableInternalMediaKeyHandling();
39
+ + } else {
40
+ + media_keys_listener_manager->DisableInternalMediaKeyHandling();
41
+ + }
42
+ + }
43
+ + }
44
+ +
45
+ void GlobalShortcutListener::UnregisterAccelerators(Observer* observer) {
46
+ CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
47
+ if (IsShortcutHandlingSuspended())
48
+ diff --git a/chrome/browser/extensions/global_shortcut_listener.h b/chrome/browser/extensions/global_shortcut_listener.h
49
+ index 554930bc33d87ee88a9bcc5f0cf17cef09c27ef0..8df4f91d3db453afb9f73bcaeb82c919ca8d1841 100644
50
+ --- a/chrome/browser/extensions/global_shortcut_listener.h
51
+ +++ b/chrome/browser/extensions/global_shortcut_listener.h
52
+ @@ -34,6 +34,8 @@ class GlobalShortcutListener {
53
+
54
+ static GlobalShortcutListener* GetInstance();
55
+
56
+ + static void SetShouldUseInternalMediaKeyHandling(bool should_use);
57
+ +
58
+ // Register an observer for when a certain |accelerator| is struck. Returns
59
+ // true if register successfully, or false if 1) the specificied |accelerator|
60
+ // has been registered by another caller or other native applications, or
13
61
diff --git a/content/browser/media/media_keys_listener_manager_impl.cc b/content/browser/media/media_keys_listener_manager_impl.cc
14
- index 5938f75742b793868638e693a9a8c8dc686dfc46..bf8782c23095a09dec62c68d7d902df24abcb13e 100644
62
+ index 5938f75742b793868638e693a9a8c8dc686dfc46..1263d679a5174beb960265989c370dd4a58ae7b4 100644
15
63
--- a/content/browser/media/media_keys_listener_manager_impl.cc
16
64
+++ b/content/browser/media/media_keys_listener_manager_impl.cc
17
- @@ -231,7 +231,7 @@ void MediaKeysListenerManagerImpl::StartListeningForMediaKeysIfNecessary() {
65
+ @@ -231,18 +231,24 @@ void MediaKeysListenerManagerImpl::StartListeningForMediaKeysIfNecessary() {
18
66
media::AudioManager::GetGlobalAppName());
19
67
#endif
20
68
21
69
- if (system_media_controls_) {
22
- + if (/* DISABLES CODE */ (0)) {
23
- system_media_controls_->AddObserver(this);
24
- system_media_controls_notifier_ =
25
- std::make_unique<SystemMediaControlsNotifier>(
26
- @@ -239,8 +239,13 @@ void MediaKeysListenerManagerImpl::StartListeningForMediaKeysIfNecessary() {
27
- } else {
28
- // If we can't access system media controls, then directly listen for media
29
- // key keypresses instead.
30
- + #if defined(OS_MAC)
31
- + media_keys_listener_ = ui::MediaKeysListener::Create(
32
- + this, ui::MediaKeysListener::Scope::kGlobalRequiresAccessibility);
33
- + #else
70
+ - system_media_controls_->AddObserver(this);
71
+ - system_media_controls_notifier_ =
72
+ - std::make_unique<SystemMediaControlsNotifier>(
73
+ - system_media_controls_.get());
74
+ - } else {
75
+ - // If we can't access system media controls, then directly listen for media
76
+ - // key keypresses instead.
77
+ + // This is required for proper functioning of MediaMetadata.
78
+ + system_media_controls_->AddObserver(this);
79
+ + system_media_controls_notifier_ =
80
+ + std::make_unique<SystemMediaControlsNotifier>(
81
+ + system_media_controls_.get());
82
+ +
83
+ + // Directly listen for media key keypresses when using GlobalShortcuts.
84
+ + #if defined(OS_MACOS)
85
+ + auto scope = media_key_handling_enabled_ ?
86
+ + ui::MediaKeysListener::Scope::kGlobal :
87
+ + ui::MediaKeysListener::Scope::kGlobalRequiresAccessibility;
34
88
media_keys_listener_ = ui::MediaKeysListener::Create(
35
- this, ui::MediaKeysListener::Scope::kGlobal);
89
+ - this, ui::MediaKeysListener::Scope::kGlobal);
90
+ - DCHECK(media_keys_listener_);
91
+ - }
92
+ + this, scope);
93
+ + #else
94
+ + media_keys_listener_ = ui::MediaKeysListener::Create(
95
+ + this, ui::MediaKeysListener::Scope::kGlobal);
36
96
+ #endif
37
- DCHECK(media_keys_listener_);
38
- }
97
+ + DCHECK(media_keys_listener_);
39
98
99
+ EnsureAuxiliaryServices();
100
+ }
40
101
diff --git a/ui/base/accelerators/media_keys_listener.h b/ui/base/accelerators/media_keys_listener.h
41
102
index c2b03328c0e508995bdc135031500783f500ceba..1b6b14dc2999c99445cef6ffc04d49a7c1728a54 100644
42
103
--- a/ui/base/accelerators/media_keys_listener.h
0 commit comments