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

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: addressed nits from jam@ 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..66d9869d8b8c4b7f2089bc08ab2512af15b221ed 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);
mlamouri (slow - plz ping) 2016/10/28 10:24:50 Early return?
Zhiqiang Zhang (Slow) 2016/10/28 11:18:48 Done.
+ MediaSessionImpl* session = MediaSessionImpl::Get(contents);
+ return session->session_android()->GetJavaSession();
+}
+
+#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