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

Side by Side Diff: content/browser/media/session/media_session_delegate_android.cc

Issue 2439483003: Link MediaSessionTabHelper with native MediaSession [CL is going to be split] (Closed)
Patch Set: addressed 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "content/browser/media/session/media_session_delegate_android.h"
6
7 #include "base/android/context_utils.h"
8 #include "base/android/jni_android.h"
9 #include "content/browser/media/session/media_session.h"
10 #include "content/common/android/media_metadata_android.h"
11 #include "jni/MediaSessionDelegate_jni.h"
12
13 using base::android::JavaParamRef;
14
15 namespace content {
16
17 // static
18 bool MediaSessionDelegateAndroid::Register(JNIEnv* env) {
19 return RegisterNativesImpl(env);
20 }
21
22 // static
23 void MediaSessionDelegateAndroid::CreateAndConnect(
24 MediaSession* session,
25 JNIEnv* env,
26 const base::android::JavaParamRef<jobject>& j_delegate) {
27 MediaSessionDelegateAndroid* delegate =
28 new MediaSessionDelegateAndroid(session, env, j_delegate);
29 session->PassObserverOwnership(
30 std::unique_ptr<MediaSessionDelegateAndroid>(delegate));
31 Java_MediaSessionDelegate_mediaSessionConnected(
32 env, j_delegate, reinterpret_cast<intptr_t>(delegate));
33 }
34
35 MediaSessionDelegateAndroid::MediaSessionDelegateAndroid(
36 MediaSession* session,
37 JNIEnv* env,
38 const base::android::JavaParamRef<jobject>& j_delegate)
39 : MediaSessionObserver(session), j_delegate_(env, j_delegate) {}
40
41 MediaSessionDelegateAndroid::~MediaSessionDelegateAndroid() {
42 MediaSessionDisconnected();
43 j_delegate_.reset();
whywhat 2016/10/20 22:56:53 Don't think you need to do this in dtor.
Zhiqiang Zhang (Slow) 2016/10/21 13:43:52 Done.
44 }
45
46 void MediaSessionDelegateAndroid::MediaSessionDisconnected() {
47 MediaSessionObserver::MediaSessionDisconnected();
48 JNIEnv* env = base::android::AttachCurrentThread();
49 DCHECK(env);
50 if (!j_delegate_.is_empty()) {
boliu 2016/10/21 14:37:15 this in theory is not safe because gc could run be
Zhiqiang Zhang (Slow) 2016/10/21 15:05:23 Done.
51 Java_MediaSessionDelegate_mediaSessionDisconnectedWrapper(
52 env, j_delegate_.get(env));
53 }
54 }
55
56 void MediaSessionDelegateAndroid::MediaSessionStateChanged(bool is_controllable,
57 bool is_active) {
58 JNIEnv* env = base::android::AttachCurrentThread();
59 DCHECK(env);
60 if (!j_delegate_.is_empty()) {
61 Java_MediaSessionDelegate_mediaSessionStateChanged(
62 env, j_delegate_.get(env), is_controllable, is_active);
63 }
64 }
65
66 void MediaSessionDelegateAndroid::MediaSessionMetadataChanged(
67 const base::Optional<MediaMetadata>& metadata) {
68 JNIEnv* env = base::android::AttachCurrentThread();
69 DCHECK(env);
70 if (!j_delegate_.is_empty()) {
71 base::android::ScopedJavaLocalRef<jobject> j_metadata;
72 if (metadata.has_value()) {
73 j_metadata =
74 MediaMetadataAndroid::CreateJavaObject(env, metadata.value());
75 }
76 Java_MediaSessionDelegate_mediaSessionMetadataChanged(
77 env, j_delegate_.get(env), j_metadata);
78 }
79 }
80
81 void MediaSessionDelegateAndroid::ResumeMediaSession(
82 JNIEnv* env,
83 const JavaParamRef<jobject>& obj) {
84 if (session())
85 session()->Resume(MediaSession::SuspendType::UI);
86 }
87
88 void MediaSessionDelegateAndroid::SuspendMediaSession(
89 JNIEnv* env,
90 const JavaParamRef<jobject>& obj) {
91 if (session())
92 session()->Suspend(MediaSession::SuspendType::UI);
93 }
94
95 void MediaSessionDelegateAndroid::StopMediaSession(
96 JNIEnv* env,
97 const JavaParamRef<jobject>& obj) {
98 if (session())
99 session()->Stop(MediaSession::SuspendType::UI);
100 }
101
102 void MediaSessionDelegateAndroid::DisconnectMediaSession(
103 JNIEnv* env,
104 const JavaParamRef<jobject>& obj) {
105 // Will destroy this and send `mediaSessionDisconnected` to Java.
106 if (session())
107 session()->RemoveObserver(this);
108 }
109
110 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698