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

Unified Diff: content/browser/media/android/media_session.cc

Issue 1671603002: Mute audio for Spitzer playbacks that haven't received focus yet. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix comment. 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/android/media_session.cc
diff --git a/content/browser/media/android/media_session.cc b/content/browser/media/android/media_session.cc
index e90daf417e6d72bb057719a550a15da5725e6b4f..9ee7456a1c650c75b97d0e7299e9791bcd531cf0 100644
--- a/content/browser/media/android/media_session.cc
+++ b/content/browser/media/android/media_session.cc
@@ -63,8 +63,6 @@ MediaSession::~MediaSession() {
bool MediaSession::AddPlayer(MediaSessionObserver* observer,
int player_id,
Type type) {
- observer->OnSetVolumeMultiplier(player_id, volume_multiplier_);
-
// If the audio focus is already granted and is of type Content, there is
// nothing to do. If it is granted of type Transient the requested type is
// also transient, there is also nothing to do. Otherwise, the session needs
@@ -72,26 +70,28 @@ bool MediaSession::AddPlayer(MediaSessionObserver* observer,
if (audio_focus_state_ == State::ACTIVE &&
(audio_focus_type_ == Type::Content || audio_focus_type_ == type)) {
players_.insert(PlayerIdentifier(observer, player_id));
- return true;
- }
+ } else {
+ State old_audio_focus_state = audio_focus_state_;
+ State audio_focus_state = RequestSystemAudioFocus(type) ? State::ACTIVE
+ : State::INACTIVE;
+ SetAudioFocusState(audio_focus_state);
+ audio_focus_type_ = type;
- State old_audio_focus_state = audio_focus_state_;
- State audio_focus_state = RequestSystemAudioFocus(type) ? State::ACTIVE
- : State::INACTIVE;
- SetAudioFocusState(audio_focus_state);
- audio_focus_type_ = type;
-
- if (audio_focus_state_ != State::ACTIVE)
- return false;
+ if (audio_focus_state_ != State::ACTIVE)
+ return false;
- // The session should be reset if a player is starting while all players are
- // suspended.
- if (old_audio_focus_state != State::ACTIVE)
- players_.clear();
+ // The session should be reset if a player is starting while all players are
+ // suspended.
+ if (old_audio_focus_state != State::ACTIVE)
+ players_.clear();
- players_.insert(PlayerIdentifier(observer, player_id));
- UpdateWebContents();
+ players_.insert(PlayerIdentifier(observer, player_id));
+ UpdateWebContents();
+ }
+ // Unmute audio for observers which may have started playing asynchronously in
+ // a muted state while waiting for the focus approval.
+ observer->OnSetVolumeMultiplier(player_id, volume_multiplier_);
return true;
}
@@ -205,27 +205,6 @@ bool MediaSession::IsControllable() const {
audio_focus_type_ == Type::Content;
}
-void MediaSession::ResetJavaRefForTest() {
- j_media_session_.Reset();
-}
-
-bool MediaSession::IsActiveForTest() const {
- return audio_focus_state_ == State::ACTIVE;
-}
-
-MediaSession::Type MediaSession::audio_focus_type_for_test() const {
- return audio_focus_type_;
-}
-
-MediaSessionUmaHelper* MediaSession::uma_helper_for_test() {
- return &uma_helper_;
-}
-
-void MediaSession::RemoveAllPlayersForTest() {
- players_.clear();
- AbandonSystemAudioFocusIfNeeded();
-}
-
void MediaSession::OnSuspendInternal(SuspendType type, State new_state) {
DCHECK(new_state == State::SUSPENDED || new_state == State::INACTIVE);
// UI suspend cannot use State::INACTIVE.
@@ -289,6 +268,7 @@ void MediaSession::OnSetVolumeMultiplierInternal(double volume_multiplier) {
MediaSession::MediaSession(WebContents* web_contents)
: WebContentsObserver(web_contents),
+ default_system_audio_focus_response_(true),
audio_focus_state_(State::INACTIVE),
audio_focus_type_(Type::Transient),
volume_multiplier_(media::MediaPlayerAndroid::kDefaultVolumeMultiplier) {
@@ -306,7 +286,7 @@ void MediaSession::Initialize() {
bool MediaSession::RequestSystemAudioFocus(Type type) {
// During tests, j_media_session_ might be null.
if (j_media_session_.is_null())
- return true;
+ return default_system_audio_focus_response_;
JNIEnv* env = base::android::AttachCurrentThread();
DCHECK(env);
« no previous file with comments | « content/browser/media/android/media_session.h ('k') | content/browser/media/android/media_session_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698