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

Side by Side Diff: content/public/android/java/src/org/chromium/content/browser/ChromeMediaSession.java

Issue 2439483003: Link MediaSessionTabHelper with native MediaSession [CL is going to be split] (Closed)
Patch Set: Don't review, this CL is getting huge and needs to be split 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 package org.chromium.content.browser;
6
7 import org.chromium.base.ObserverList;
8 import org.chromium.base.ObserverList.RewindableIterator;
9 import org.chromium.base.VisibleForTesting;
10 import org.chromium.base.annotations.CalledByNative;
11 import org.chromium.base.annotations.JNINamespace;
12 import org.chromium.content_public.browser.WebContents;
13 import org.chromium.content_public.common.MediaMetadata;
14
15 /**
16 * The ChromeMediaSession Java wrapper to allow communicating with the native Me diaSession object.
17 * ChromeMediaSession is created and owned by native MediaSessionAndroid.
18 */
19 @JNINamespace("content")
20 public class ChromeMediaSession {
21 private long mNativeMediaSessionAndroid;
22 // The observers are stored only Java and are proxied via ChromeMediaSession to observe native
23 // MediaSession.
24 private ObserverList<MediaSessionObserver> mObservers;
25 private RewindableIterator<MediaSessionObserver> mObserversIterator;
26
27 /**
28 * @returns The {@link ChromeMediaSession} for |contents|.
29 */
30 public static ChromeMediaSession fromWebContents(WebContents contents) {
31 return nativeGetMediaSessionFromWebContents(contents);
32 }
33
34 /**
35 * Add an observer. This method can only be called from {@link MediaSessionO bserver}
36 * constructor.
37 */
38 protected void addObserver(MediaSessionObserver observer) {
39 mObservers.addObserver(observer);
40 }
41
42 /**
43 * Remove an observer.
44 */
45 public void removeObserver(MediaSessionObserver observer) {
46 mObservers.removeObserver(observer);
47 }
48
49 /**
50 * Wrapper for native MediaSession::Resume().
51 */
52 public void resume() {
53 nativeResume(mNativeMediaSessionAndroid);
54 }
55
56 /**
57 * Wrapper for native MediaSession::Suspend();
58 */
59 public void suspend() {
60 nativeSuspend(mNativeMediaSessionAndroid);
61 }
62
63 /**
64 * Wrapper for native MediaSession::Stop();
65 */
66 public void stop() {
67 nativeStop(mNativeMediaSessionAndroid);
68 }
69
70 @CalledByNative
71 private boolean hasObservers() {
72 return !mObservers.isEmpty();
73 }
74
75 @CalledByNative
76 private void mediaSessionDestroyed() {
77 for (mObserversIterator.rewind(); mObserversIterator.hasNext();) {
78 mObserversIterator.next().mediaSessionDestroyed();
79 }
80 }
81
82 @VisibleForTesting
83 @CalledByNative
84 public void mediaSessionStateChanged(boolean isControllable, boolean isSuspe nded) {
85 for (mObserversIterator.rewind(); mObserversIterator.hasNext();) {
86 mObserversIterator.next().mediaSessionStateChanged(isControllable, i sSuspended);
87 }
88 }
89
90 @VisibleForTesting
91 @CalledByNative
92 public void mediaSessionMetadataChanged(MediaMetadata metadata) {
93 for (mObserversIterator.rewind(); mObserversIterator.hasNext();) {
94 mObserversIterator.next().mediaSessionMetadataChanged(metadata);
95 }
96 }
97
98 /**
99 * Create a ChromeMediaSession object for a native MediaSession.
100 */
101 @CalledByNative
102 private static ChromeMediaSession create(long nativeChromeMediaSession) {
103 return new ChromeMediaSession(nativeChromeMediaSession);
104 }
105
106 /**
107 * Called when the native MediaSessionAndroid (the owner) is destroyed.
108 */
109 @CalledByNative
110 private void tearDown() {
111 mNativeMediaSessionAndroid = 0;
112 // All observers should stop observing when receiving MediaSessionDestro yed.
113 assert mObservers.isEmpty();
114 mObservers.clear();
115 }
116
117 private ChromeMediaSession(long nativeChromeMediaSession) {
118 mNativeMediaSessionAndroid = nativeChromeMediaSession;
119 mObservers = new ObserverList<MediaSessionObserver>();
120 mObserversIterator = mObservers.rewindableIterator();
121 }
122
123 private static native ChromeMediaSession nativeGetMediaSessionFromWebContent s(
124 WebContents contents);
125 private native void nativeResume(long nativeMediaSessionAndroid);
126 private native void nativeSuspend(long nativeMediaSessionAndroid);
127 private native void nativeStop(long nativeMediaSessionAndroid);
128 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698