Commit c1746cdb authored by Becca Hughes's avatar Becca Hughes Committed by Commit Bot

[Audio Focus] Remove force duck abandon behaviour

If a force duck session abandons audio focus then we
should stop ducking it. It should not have the
custom behaviour.

BUG=931892

Change-Id: Ib6f1198e05179b5bede8cf23414729be0e4b286b
Reviewed-on: https://chromium-review.googlesource.com/c/1481587Reviewed-by: default avatarTommy Steimel <steimel@chromium.org>
Commit-Queue: Becca Hughes <beccahughes@chromium.org>
Cr-Commit-Position: refs/heads/master@{#634371}
parent 5ffd5baf
......@@ -317,7 +317,7 @@ void AudioFocusManager::AbandonAudioFocusInternal(RequestId id) {
return;
}
EnforceAudioFocusAbandon();
EnforceAudioFocus();
MaybeUpdateActiveSession();
// Notify observers that we lost audio focus.
......@@ -416,27 +416,6 @@ void AudioFocusManager::RequestAudioFocusInternal(
std::move(callback).Run();
}
void AudioFocusManager::EnforceAudioFocusAbandon() {
// Allow the top-most MediaSession having force duck to unduck even if
// it is not active.
if (enforcement_mode_ != mojom::EnforcementMode::kNone) {
for (auto iter = audio_focus_stack_.rbegin();
iter != audio_focus_stack_.rend(); ++iter) {
if (!(*iter)->info()->force_duck)
continue;
// TODO(beccahughes): Replace with std::rotate.
auto duck_row = std::move(*iter);
duck_row->session()->StopDucking();
audio_focus_stack_.erase(std::next(iter).base());
audio_focus_stack_.push_back(std::move(duck_row));
return;
}
}
EnforceAudioFocus();
}
void AudioFocusManager::EnforceAudioFocus() {
DCHECK_NE(mojom::EnforcementMode::kDefault, enforcement_mode_);
if (audio_focus_stack_.empty())
......
......@@ -107,7 +107,6 @@ class AudioFocusManager : public mojom::AudioFocusManager,
base::OnceCallback<void()>);
void AbandonAudioFocusInternal(RequestId);
void EnforceAudioFocusAbandon();
void EnforceAudioFocus();
void MaybeUpdateActiveSession();
......
......@@ -680,8 +680,7 @@ TEST_P(AudioFocusManagerTest, GainDucksForceDuck) {
GetState(&media_session_1));
}
TEST_P(AudioFocusManagerTest,
AbandoningGainFocusRevokesTopMostForceDuckSession) {
TEST_P(AudioFocusManagerTest, ForceDuckSessionShouldAlwaysBeDuckedFromGain) {
test::MockMediaSession media_session_1(true /* force_duck */);
test::MockMediaSession media_session_2;
test::MockMediaSession media_session_3;
......@@ -702,8 +701,34 @@ TEST_P(AudioFocusManagerTest,
GetState(&media_session_1));
media_session_3.AbandonAudioFocusFromClient();
EXPECT_EQ(IsEnforcementEnabled() ? request_id_1 : request_id_2,
GetAudioFocusedSession());
EXPECT_EQ(request_id_2, GetAudioFocusedSession());
EXPECT_EQ(GetStateFromParam(mojom::MediaSessionInfo::SessionState::kDucking),
GetState(&media_session_1));
media_session_2.AbandonAudioFocusFromClient();
EXPECT_EQ(request_id_1, GetAudioFocusedSession());
EXPECT_EQ(mojom::MediaSessionInfo::SessionState::kActive,
GetState(&media_session_1));
}
TEST_P(AudioFocusManagerTest,
ForceDuckSessionShouldAlwaysBeDuckedFromTransient) {
test::MockMediaSession media_session_1(true /* force_duck */);
test::MockMediaSession media_session_2;
AudioFocusManager::RequestId request_id_1 =
RequestAudioFocus(&media_session_1, mojom::AudioFocusType::kGain);
RequestAudioFocus(&media_session_2, mojom::AudioFocusType::kGainTransient);
EXPECT_EQ(mojom::MediaSessionInfo::SessionState::kActive,
GetState(&media_session_2));
EXPECT_EQ(GetStateFromParam(mojom::MediaSessionInfo::SessionState::kDucking),
GetState(&media_session_1));
media_session_2.AbandonAudioFocusFromClient();
EXPECT_EQ(request_id_1, GetAudioFocusedSession());
EXPECT_EQ(mojom::MediaSessionInfo::SessionState::kActive,
GetState(&media_session_1));
}
TEST_P(AudioFocusManagerTest, AudioFocusObserver_RequestNoop) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment