OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef CONTENT_BROWSER_MEDIA_SESSION_MEDIA_SESSION_IMPL_H_ | 5 #ifndef CONTENT_BROWSER_MEDIA_SESSION_MEDIA_SESSION_IMPL_H_ |
6 #define CONTENT_BROWSER_MEDIA_SESSION_MEDIA_SESSION_IMPL_H_ | 6 #define CONTENT_BROWSER_MEDIA_SESSION_MEDIA_SESSION_IMPL_H_ |
7 | 7 |
8 #include <stddef.h> | 8 #include <stddef.h> |
9 | 9 |
10 #include "base/callback_list.h" | 10 #include "base/callback_list.h" |
(...skipping 21 matching lines...) Expand all Loading... |
32 } // namespace media | 32 } // namespace media |
33 | 33 |
34 namespace content { | 34 namespace content { |
35 | 35 |
36 class AudioFocusDelegate; | 36 class AudioFocusDelegate; |
37 class AudioFocusManagerTest; | 37 class AudioFocusManagerTest; |
38 class MediaSessionImplStateObserver; | 38 class MediaSessionImplStateObserver; |
39 class MediaSessionImplVisibilityBrowserTest; | 39 class MediaSessionImplVisibilityBrowserTest; |
40 class MediaSessionObserver; | 40 class MediaSessionObserver; |
41 class MediaSessionPlayerObserver; | 41 class MediaSessionPlayerObserver; |
42 class MediaSessionServiceImpl; | |
43 | 42 |
44 #if defined(OS_ANDROID) | 43 #if defined(OS_ANDROID) |
45 class MediaSessionAndroid; | 44 class MediaSessionAndroid; |
46 #endif // defined(OS_ANDROID) | 45 #endif // defined(OS_ANDROID) |
47 | 46 |
48 // MediaSessionImpl is the implementation of MediaSession. It manages the media | 47 // MediaSessionImpl is the implementation of MediaSession. It manages the media |
49 // session and audio focus for a given WebContents. It is requesting the audio | 48 // session and audio focus for a given WebContents. It is requesting the audio |
50 // focus, pausing when requested by the system and dropping it on demand. The | 49 // focus, pausing when requested by the system and dropping it on demand. The |
51 // audio focus can be of two types: Transient or Content. A Transient audio | 50 // audio focus can be of two types: Transient or Content. A Transient audio |
52 // focus will allow other players to duck instead of pausing and will be | 51 // focus will allow other players to duck instead of pausing and will be |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
117 CONTENT_EXPORT void Resume(MediaSession::SuspendType suspend_type) override; | 116 CONTENT_EXPORT void Resume(MediaSession::SuspendType suspend_type) override; |
118 | 117 |
119 // Suspend the media session. | 118 // Suspend the media session. |
120 // |type| represents the origin of the request. | 119 // |type| represents the origin of the request. |
121 CONTENT_EXPORT void Suspend(MediaSession::SuspendType suspend_type) override; | 120 CONTENT_EXPORT void Suspend(MediaSession::SuspendType suspend_type) override; |
122 | 121 |
123 // Stop the media session. | 122 // Stop the media session. |
124 // |type| represents the origin of the request. | 123 // |type| represents the origin of the request. |
125 CONTENT_EXPORT void Stop(MediaSession::SuspendType suspend_type) override; | 124 CONTENT_EXPORT void Stop(MediaSession::SuspendType suspend_type) override; |
126 | 125 |
127 // Received a media session action and forward to blink::MediaSession. | |
128 void DidReceiveAction(blink::mojom::MediaSessionAction action) override; | |
129 | |
130 // Called when an action is enabled in blink::MediaSession. This method will | |
131 // notify the observers that the action is enabled. | |
132 void OnMediaSessionEnabledAction(blink::mojom::MediaSessionAction action); | |
133 | |
134 // Called when an action is disabled in blink::MediaSession. This method will | |
135 // notify the observers that the action is disabled. | |
136 void OnMediaSessionDisabledAction(blink::mojom::MediaSessionAction action); | |
137 | |
138 // Let the media session start ducking such that the volume multiplier is | 126 // Let the media session start ducking such that the volume multiplier is |
139 // reduced. | 127 // reduced. |
140 CONTENT_EXPORT void StartDucking(); | 128 CONTENT_EXPORT void StartDucking(); |
141 | 129 |
142 // Let the media session stop ducking such that the volume multiplier is | 130 // Let the media session stop ducking such that the volume multiplier is |
143 // recovered. | 131 // recovered. |
144 CONTENT_EXPORT void StopDucking(); | 132 CONTENT_EXPORT void StopDucking(); |
145 | 133 |
146 // Returns if the session can be controlled by Resume() and Suspend calls | 134 // Returns if the session can be controlled by Resume() and Suspend calls |
147 // above. | 135 // above. |
(...skipping 17 matching lines...) Expand all Loading... |
165 CONTENT_EXPORT AudioFocusManager::AudioFocusType audio_focus_type() const { | 153 CONTENT_EXPORT AudioFocusManager::AudioFocusType audio_focus_type() const { |
166 return audio_focus_type_; | 154 return audio_focus_type_; |
167 } | 155 } |
168 | 156 |
169 // Returns whether the session has Pepper instances. | 157 // Returns whether the session has Pepper instances. |
170 bool HasPepper() const; | 158 bool HasPepper() const; |
171 | 159 |
172 // WebContentsObserver implementation | 160 // WebContentsObserver implementation |
173 void WebContentsDestroyed() override; | 161 void WebContentsDestroyed() override; |
174 | 162 |
175 // Sets the associated MediaSessionService for communicating with | |
176 // blink::MediaSession. | |
177 MediaSessionServiceImpl* GetMediaSessionService() { return service_; } | |
178 void SetMediaSessionService(MediaSessionServiceImpl* service); | |
179 | |
180 private: | 163 private: |
181 friend class content::WebContentsUserData<MediaSessionImpl>; | 164 friend class content::WebContentsUserData<MediaSessionImpl>; |
182 friend class ::MediaSessionImplBrowserTest; | 165 friend class ::MediaSessionImplBrowserTest; |
183 friend class content::MediaSessionImplVisibilityBrowserTest; | 166 friend class content::MediaSessionImplVisibilityBrowserTest; |
184 friend class content::AudioFocusManagerTest; | 167 friend class content::AudioFocusManagerTest; |
185 friend class content::MediaSessionImplStateObserver; | 168 friend class content::MediaSessionImplStateObserver; |
186 | 169 |
187 CONTENT_EXPORT void SetDelegateForTests( | 170 CONTENT_EXPORT void SetDelegateForTests( |
188 std::unique_ptr<AudioFocusDelegate> delegate); | 171 std::unique_ptr<AudioFocusDelegate> delegate); |
189 CONTENT_EXPORT bool IsActiveForTest() const; | 172 CONTENT_EXPORT bool IsActiveForTest() const; |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
265 | 248 |
266 base::Optional<MediaMetadata> metadata_; | 249 base::Optional<MediaMetadata> metadata_; |
267 base::CallbackList<void(State)> media_session_state_listeners_; | 250 base::CallbackList<void(State)> media_session_state_listeners_; |
268 | 251 |
269 base::ObserverList<MediaSessionObserver> observers_; | 252 base::ObserverList<MediaSessionObserver> observers_; |
270 | 253 |
271 #if defined(OS_ANDROID) | 254 #if defined(OS_ANDROID) |
272 std::unique_ptr<MediaSessionAndroid> session_android_; | 255 std::unique_ptr<MediaSessionAndroid> session_android_; |
273 #endif // defined(OS_ANDROID) | 256 #endif // defined(OS_ANDROID) |
274 | 257 |
275 // The MediaSessionService this session is associated with (the service of the | |
276 // top-level frame). | |
277 MediaSessionServiceImpl* service_; | |
278 | |
279 DISALLOW_COPY_AND_ASSIGN(MediaSessionImpl); | 258 DISALLOW_COPY_AND_ASSIGN(MediaSessionImpl); |
280 }; | 259 }; |
281 | 260 |
282 } // namespace content | 261 } // namespace content |
283 | 262 |
284 #endif // CONTENT_BROWSER_MEDIA_SESSION_MEDIA_SESSION_IMPL_H_ | 263 #endif // CONTENT_BROWSER_MEDIA_SESSION_MEDIA_SESSION_IMPL_H_ |
OLD | NEW |