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

Unified Diff: content/browser/media/session/media_session_impl.cc

Issue 2444833004: Decouple MediaSession/MediaSessionObserver from WebContents in Java[OBSOLETE, go to the combined CL] (Closed)
Patch Set: nits Created 4 years, 2 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/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 6ef85191c9f0d21a8bec2582a1a4aaa8d6d81fac..c19b212baa26ba5cc787e14f988fe72a4be78b3b 100644
--- a/content/browser/media/session/media_session_impl.cc
+++ b/content/browser/media/session/media_session_impl.cc
@@ -11,6 +11,11 @@
#include "content/public/browser/web_contents_delegate.h"
#include "media/base/media_content_type.h"
+#if defined(OS_ANDROID)
+#include "content/browser/media/session/media_session_android.h"
+#include "jni/MediaSession_jni.h"
+#endif // defined(OS_ANDROID)
+
namespace content {
namespace {
@@ -59,6 +64,24 @@ MediaSessionImpl* MediaSessionImpl::Get(WebContents* web_contents) {
return session;
}
+#if defined(OS_ANDROID)
+bool RegisterMediaSessionNatives(JNIEnv* env) {
+ return RegisterNativesImpl(env);
+}
+
+// static
+base::android::ScopedJavaLocalRef<jobject> GetMediaSessionFromWebContents(
+ JNIEnv* env,
+ const base::android::JavaParamRef<jclass>& clazz,
+ const base::android::JavaParamRef<jobject>& j_contents_android) {
+ WebContents* contents = WebContents::FromJavaWebContents(j_contents_android);
+ DCHECK(contents);
+ MediaSessionImpl* session = MediaSessionImpl::Get(contents);
+ return session->session_android()->GetJavaObject();
+}
+
+#endif // defined(OS_ANDROID)
+
MediaSessionImpl::~MediaSessionImpl() {
DCHECK(players_.empty());
DCHECK(audio_focus_state_ == State::INACTIVE);
@@ -93,8 +116,6 @@ void MediaSessionImpl::RemoveObserver(MediaSessionObserver* observer) {
void MediaSessionImpl::SetMetadata(
const base::Optional<MediaMetadata>& metadata) {
metadata_ = metadata;
- static_cast<WebContentsImpl*>(web_contents())
- ->OnMediaSessionMetadataChanged();
for (auto& observer : observers_)
observer.MediaSessionMetadataChanged(metadata);
}
@@ -400,7 +421,11 @@ MediaSessionImpl::MediaSessionImpl(WebContents* web_contents)
audio_focus_state_(State::INACTIVE),
audio_focus_type_(
AudioFocusManager::AudioFocusType::GainTransientMayDuck),
- is_ducking_(false) {}
+ is_ducking_(false) {
+#if defined(OS_ANDROID)
+ session_android_.reset(new MediaSessionAndroid(this));
+#endif // defined(OS_ANDROID)
+}
void MediaSessionImpl::Initialize() {
delegate_ = AudioFocusDelegate::Create(this);
@@ -431,7 +456,6 @@ void MediaSessionImpl::AbandonSystemAudioFocusIfNeeded() {
void MediaSessionImpl::UpdateWebContents() {
media_session_state_listeners_.Notify(audio_focus_state_);
- static_cast<WebContentsImpl*>(web_contents())->OnMediaSessionStateChanged();
for (auto& observer : observers_)
observer.MediaSessionStateChanged(IsControllable(), IsSuspended());
}

Powered by Google App Engine
This is Rietveld 408576698