Chromium Code Reviews| Index: content/browser/media/session/media_session_impl.cc |
| diff --git a/content/browser/media/session/media_session_impl.cc b/content/browser/media/session/media_session_impl.cc |
| index c19b212baa26ba5cc787e14f988fe72a4be78b3b..76f0695e25875bb6bc4d726850fd6e75ef0b416f 100644 |
| --- a/content/browser/media/session/media_session_impl.cc |
| +++ b/content/browser/media/session/media_session_impl.cc |
| @@ -6,9 +6,11 @@ |
| #include "content/browser/media/session/audio_focus_delegate.h" |
| #include "content/browser/media/session/media_session_player_observer.h" |
| +#include "content/browser/media/session/media_session_service_impl.h" |
| #include "content/browser/web_contents/web_contents_impl.h" |
| +#include "content/public/browser/media_session.h" |
| +#include "content/public/browser/media_session_observer.h" |
| #include "content/public/browser/web_contents.h" |
| -#include "content/public/browser/web_contents_delegate.h" |
| #include "media/base/media_content_type.h" |
| #if defined(OS_ANDROID) |
| @@ -96,15 +98,19 @@ void MediaSessionImpl::WebContentsDestroyed() { |
| // already been removed before WebContents is destroyed. |
| // TODO(zqzhang): refactor MediaSessionImpl, maybe move the interface used to |
| - // talk |
| - // with AudioFocusManager out to a seperate class. The AudioFocusManager unit |
| - // tests then could mock the interface and abandon audio focus when |
| + // talk with AudioFocusManager out to a seperate class. The AudioFocusManager |
| + // unit tests then could mock the interface and abandon audio focus when |
| // WebContents is destroyed. See https://crbug.com/651069 |
| players_.clear(); |
| pepper_players_.clear(); |
| AbandonSystemAudioFocusIfNeeded(); |
| } |
| +void MediaSessionImpl::SetMediaSessionService( |
| + MediaSessionServiceImpl* service) { |
| + service_ = service; |
|
whywhat
2016/10/28 16:10:23
nit: I assume this is supposed to be called only o
Zhiqiang Zhang (Slow)
2016/11/01 15:24:15
It could be set and unset.
My point is the service
|
| +} |
| + |
| void MediaSessionImpl::AddObserver(MediaSessionObserver* observer) { |
| observers_.AddObserver(observer); |
| } |
| @@ -276,6 +282,24 @@ void MediaSessionImpl::Stop(SuspendType suspend_type) { |
| AbandonSystemAudioFocusIfNeeded(); |
| } |
| +void MediaSessionImpl::DidReceiveAction( |
| + blink::mojom::MediaSessionAction action) { |
| + if (service_) |
|
whywhat
2016/10/28 16:10:23
nit: Is it possible to have service_ nullptr?
Zhiqiang Zhang (Slow)
2016/11/01 15:24:15
See my other reply.
|
| + service_->GetClient()->DidReceiveAction(action); |
| +} |
| + |
| +void MediaSessionImpl::OnMediaSessionEnabledAction( |
| + blink::mojom::MediaSessionAction action) { |
| + for (auto& observer : observers_) |
| + observer.MediaSessionEnabledAction(action); |
| +} |
| + |
| +void MediaSessionImpl::OnMediaSessionDisabledAction( |
| + blink::mojom::MediaSessionAction action) { |
| + for (auto& observer : observers_) |
| + observer.MediaSessionDisabledAction(action); |
| +} |
| + |
| void MediaSessionImpl::StartDucking() { |
| if (is_ducking_) |
| return; |
| @@ -421,7 +445,8 @@ MediaSessionImpl::MediaSessionImpl(WebContents* web_contents) |
| audio_focus_state_(State::INACTIVE), |
| audio_focus_type_( |
| AudioFocusManager::AudioFocusType::GainTransientMayDuck), |
| - is_ducking_(false) { |
| + is_ducking_(false), |
| + service_(nullptr) { |
| #if defined(OS_ANDROID) |
| session_android_.reset(new MediaSessionAndroid(this)); |
| #endif // defined(OS_ANDROID) |