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) |