| Index: content/browser/media/session/audio_focus_manager.cc
|
| diff --git a/content/browser/media/session/audio_focus_manager.cc b/content/browser/media/session/audio_focus_manager.cc
|
| index c3589efeea5e5d651d32ecaf8909b409a736f293..f1a5cffa271a30599cdd8072f781d06d60542988 100644
|
| --- a/content/browser/media/session/audio_focus_manager.cc
|
| +++ b/content/browser/media/session/audio_focus_manager.cc
|
| @@ -87,9 +87,11 @@ void AudioFocusManager::OnWebContentsDestroyed(WebContents* web_contents) {
|
| void AudioFocusManager::AbandonAudioFocusInternal(WebContents* web_contents) {
|
| MaybeRemoveTransientEntry(web_contents);
|
| MaybeRemoveFocusEntry(web_contents);
|
| + AbandonPepperAudioFocus(MediaSession::Get(web_contents));
|
| }
|
|
|
| void AudioFocusManager::MaybeStartDucking() const {
|
| + UpdatePepperFocus();
|
| if (TransientMayDuckEntriesCount() != 1 || !focus_entry_)
|
| return;
|
|
|
| @@ -99,6 +101,7 @@ void AudioFocusManager::MaybeStartDucking() const {
|
| }
|
|
|
| void AudioFocusManager::MaybeStopDucking() const {
|
| + UpdatePepperFocus();
|
| if (TransientMayDuckEntriesCount() != 0 || !focus_entry_)
|
| return;
|
|
|
| @@ -124,4 +127,66 @@ void AudioFocusManager::MaybeRemoveFocusEntry(WebContents* web_contents) {
|
| }
|
| }
|
|
|
| +void AudioFocusManager::MaybeRemovePepperEntry(WebContents* web_contents) {
|
| + for (auto iter = pepper_entries_.begin();
|
| + iter != pepper_entries_.end(); ++iter) {
|
| + if ((*iter)->web_contents() == web_contents) {
|
| + pepper_entries_.erase(iter);
|
| + break;
|
| + }
|
| + }
|
| +}
|
| +
|
| +void AudioFocusManager::RequestPepperAudioFocus(MediaSession* session) {
|
| + MaybeRemovePepperEntry(session->web_contents());
|
| + pepper_entries_.push_back(std::unique_ptr<AudioFocusEntry>(
|
| + new AudioFocusEntry(session->web_contents(),
|
| + this, AudioFocusType::Gain)));
|
| +
|
| + UpdatePepperFocus();
|
| +}
|
| +
|
| +void AudioFocusManager::AbandonPepperAudioFocus(MediaSession* session) {
|
| + MaybeRemovePepperEntry(session->web_contents());
|
| +
|
| + UpdatePepperFocus();
|
| +}
|
| +
|
| +void AudioFocusManager::UpdatePepperFocus() const {
|
| + if (!transient_entries_.empty()) {
|
| + for (const auto& pepper_entry : pepper_entries_) {
|
| + if (transient_entries_.count(pepper_entry->web_contents())) {
|
| + MediaSession::Get(pepper_entry->web_contents())
|
| + ->SetPepperVolumeMultiplier(kDefaultVolumeMultiplier);
|
| + } else {
|
| + MediaSession::Get(pepper_entry->web_contents())
|
| + ->SetPepperVolumeMultiplier(kDuckingVolumeMultiplier);
|
| + }
|
| + }
|
| + } else if (focus_entry_) {
|
| + for (const auto& pepper_entry : pepper_entries_) {
|
| + if (focus_entry_->web_contents() == pepper_entry->web_contents()) {
|
| + MediaSession::Get(pepper_entry->web_contents())
|
| + ->SetPepperVolumeMultiplier(kDefaultVolumeMultiplier);
|
| + } else {
|
| + MediaSession::Get(pepper_entry->web_contents())
|
| + ->SetPepperVolumeMultiplier(kDuckingVolumeMultiplier);
|
| + }
|
| + }
|
| + } else {
|
| + bool is_first = true;
|
| + for (auto iter = pepper_entries_.rbegin();
|
| + iter != pepper_entries_.rend(); ++iter) {
|
| + if (is_first) {
|
| + MediaSession::Get(pepper_entries_.back()->web_contents())
|
| + ->SetPepperVolumeMultiplier(kDefaultVolumeMultiplier);
|
| + is_first = false;
|
| + } else {
|
| + MediaSession::Get((*iter)->web_contents())
|
| + ->SetPepperVolumeMultiplier(kDuckingVolumeMultiplier);
|
| + }
|
| + }
|
| + }
|
| +}
|
| +
|
| } // namespace content
|
|
|