Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(909)

Unified Diff: content/browser/media/session/media_session.h

Issue 1698933004: Make MediaSession a runtime-enabled feature on Desktop. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: with flag Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/media/session/media_session.h
diff --git a/content/browser/media/android/media_session.h b/content/browser/media/session/media_session.h
similarity index 65%
rename from content/browser/media/android/media_session.h
rename to content/browser/media/session/media_session.h
index 12711245bfbf4bdc3c70d347f6f1ef5fdae5df8e..f67af113d1a9d077b73a1d4a2886f3cc6d23a162 100644
--- a/content/browser/media/android/media_session.h
+++ b/content/browser/media/session/media_session.h
@@ -2,16 +2,14 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef CONTENT_BROWSER_MEDIA_ANDROID_MEDIA_SESSION_H_
-#define CONTENT_BROWSER_MEDIA_ANDROID_MEDIA_SESSION_H_
+#ifndef CONTENT_BROWSER_MEDIA_SESSION_MEDIA_SESSION_H_
+#define CONTENT_BROWSER_MEDIA_SESSION_MEDIA_SESSION_H_
-#include <jni.h>
#include <stddef.h>
-#include "base/android/scoped_java_ref.h"
#include "base/id_map.h"
#include "base/macros.h"
-#include "content/browser/media/android/media_session_uma_helper.h"
+#include "content/browser/media/session/media_session_uma_helper.h"
#include "content/common/content_export.h"
#include "content/public/browser/web_contents_observer.h"
#include "content/public/browser/web_contents_user_data.h"
@@ -20,18 +18,18 @@ class MediaSessionBrowserTest;
namespace content {
+class MediaSessionDelegate;
class MediaSessionObserver;
-// MediaSession manages the Android AudioFocus for a given WebContents. It is
-// requesting the audio focus, pausing when requested by the system and dropping
-// it on demand.
+// MediaSession manages the media session and audio focus for a given
+// WebContents. It is requesting the audio focus, pausing when requested by the
+// system and dropping it on demand.
// The audio focus can be of two types: Transient or Content. A Transient audio
// focus will allow other players to duck instead of pausing and will be
// declared as temporary to the system. A Content audio focus will not be
// declared as temporary and will not allow other players to duck. If a given
// WebContents can only have one audio focus at a time, it will be Content in
// case of Transient and Content audio focus are both requested.
-// Android system interaction occurs in the Java counterpart to this class.
class CONTENT_EXPORT MediaSession
: public WebContentsObserver,
protected WebContentsUserData<MediaSession> {
@@ -41,7 +39,15 @@ class CONTENT_EXPORT MediaSession
Transient
};
- static bool RegisterMediaSession(JNIEnv* env);
+ enum class SuspendType {
+ // Suspended by the system because a transient sound needs to be played.
+ SYSTEM,
+ // Suspended by the UI.
+ UI,
+ // Suspended by the page via script or user interaction.
+ CONTENT,
+ };
+
// Returns the MediaSession associated to this WebContents. Creates one if
// none is currently available.
@@ -62,56 +68,50 @@ class CONTENT_EXPORT MediaSession
// these were the last players in the session.
void RemovePlayers(MediaSessionObserver* observer);
- // Called when the Android system requests the MediaSession to be suspended.
- // Called by Java through JNI.
- void OnSuspend(JNIEnv* env,
- const base::android::JavaParamRef<jobject>& obj,
- jboolean temporary);
-
- // Called when the Android system requests the MediaSession to duck.
- // Called by Java through JNI.
- void OnSetVolumeMultiplier(JNIEnv* env, jobject obj,
- jdouble volume_multiplier);
-
- // Called when the Android system requests the MediaSession to be resumed.
- // Called by Java through JNI.
- void OnResume(JNIEnv* env, const base::android::JavaParamRef<jobject>& obj);
-
- // Called when the Android system requests the MediaSession to duck.
- // Called by Java through JNI.
- void RecordSessionDuck(JNIEnv* env,
- const base::android::JavaParamRef<jobject> &obj);
+ // Record that the session was ducked.
+ void RecordSessionDuck();
// Called when a player is paused in the content.
// If the paused player is the last player, we suspend the MediaSession.
// Otherwise, the paused player will be removed from the MediaSession.
void OnPlayerPaused(MediaSessionObserver* observer, int player_id);
- // Called when the user requests resuming the session. No-op if the session is
- // not controllable.
- void Resume();
+ // Resume the media session.
+ // |type| represents the origin of the request.
+ void Resume(SuspendType type);
- // Called when the user requests suspending the session. No-op if the session
- // is not controllable.
- void Suspend();
+ // Suspend the media session.
+ // |type| represents the origin of the request.
+ void Suspend(SuspendType type);
- // Called when the user requests stopping the session.
- void Stop();
+ // Stop the media session.
+ // |type| represents the origin of the request.
+ void Stop(SuspendType type);
+
+ // Change the volume multiplier of the session to |volume_multiplier|.
+ void SetVolumeMultiplier(double volume_multiplier);
// Returns if the session can be controlled by Resume() and Suspend calls
// above.
bool IsControllable() const;
+ // Returns if the session is currently active.
+ bool IsActive() const;
+
// Returns if the session is currently suspended.
+ // TODO(mlamouri): IsSuspended() is basically !IsActive() but in order to not
+ // have a ridiculously huge refactoring, the change to fix that will happen in
+ // a follow-up.
+ bool IsReallySuspended() const;
+
+ // Returns if the session is currently suspended or inactive.
bool IsSuspended() const;
private:
friend class content::WebContentsUserData<MediaSession>;
friend class ::MediaSessionBrowserTest;
- // Resets the |j_media_session_| ref to prevent calling the Java backend
- // during content_browsertests.
- void ResetJavaRefForTest();
+ void SetDelegateForTest(scoped_ptr<MediaSessionDelegate> delegate);
bool IsActiveForTest() const;
Type audio_focus_type_for_test() const;
void RemoveAllPlayersForTest();
@@ -123,15 +123,6 @@ class CONTENT_EXPORT MediaSession
INACTIVE
};
- enum class SuspendType {
- // Suspended by the system because a transient sound needs to be played.
- SYSTEM,
- // Suspended by the UI.
- UI,
- // Suspended by the page via script or user interaction.
- CONTENT,
- };
-
// Representation of a player for the MediaSession.
struct PlayerIdentifier {
PlayerIdentifier(MediaSessionObserver* observer, int player_id);
@@ -152,20 +143,17 @@ class CONTENT_EXPORT MediaSession
explicit MediaSession(WebContents* web_contents);
- // Setup the JNI.
void Initialize();
void OnSuspendInternal(SuspendType type, State new_state);
void OnResumeInternal(SuspendType type);
- void OnSetVolumeMultiplierInternal(double volume_multiplier);
- // Requests audio focus to Android using |j_media_session_|.
- // Returns whether the request was granted. If |j_media_session_| is null, it
- // will always return true.
+ // Requests audio focus to the MediaSessionDelegate.
+ // Returns whether the request was granted.
bool RequestSystemAudioFocus(Type type);
- // To be called after a call to AbandonAudioFocus() in order to call the Java
- // MediaSession if the audio focus really need to be abandoned.
+ // To be called after a call to AbandonAudioFocus() in order request the
+ // delegate to abandon the audio focus.
void AbandonSystemAudioFocusIfNeeded();
// Notifies WebContents about the state change of the media session.
@@ -175,7 +163,7 @@ class CONTENT_EXPORT MediaSession
// It sets audio_focus_state_ and notifies observers about the state change.
void SetAudioFocusState(State audio_focus_state);
- base::android::ScopedJavaGlobalRef<jobject> j_media_session_;
+ scoped_ptr<MediaSessionDelegate> delegate_;
PlayersMap players_;
State audio_focus_state_;
@@ -193,4 +181,4 @@ class CONTENT_EXPORT MediaSession
} // namespace content
-#endif // CONTENT_BROWSER_MEDIA_ANDROID_MEDIA_SESSION_H_
+#endif // CONTENT_BROWSER_MEDIA_SESSION_MEDIA_SESSION_H_

Powered by Google App Engine
This is Rietveld 408576698