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

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

Issue 2439483003: Link MediaSessionTabHelper with native MediaSession [CL is going to be split] (Closed)
Patch Set: Super rough, please give some initial feedbacks 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
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package org.chromium.content.browser.webcontents; 5 package org.chromium.content.browser.webcontents;
6 6
7 import org.chromium.base.ObserverList; 7 import org.chromium.base.ObserverList;
8 import org.chromium.base.ObserverList.RewindableIterator; 8 import org.chromium.base.ObserverList.RewindableIterator;
9 import org.chromium.base.ThreadUtils; 9 import org.chromium.base.ThreadUtils;
10 import org.chromium.base.VisibleForTesting; 10 import org.chromium.base.VisibleForTesting;
11 import org.chromium.base.annotations.CalledByNative; 11 import org.chromium.base.annotations.CalledByNative;
12 import org.chromium.base.annotations.JNINamespace; 12 import org.chromium.base.annotations.JNINamespace;
13 import org.chromium.content_public.browser.WebContentsObserver; 13 import org.chromium.content_public.browser.WebContentsObserver;
14 import org.chromium.content_public.common.MediaMetadata;
15 14
16 /** 15 /**
17 * Serves as a compound observer proxy for dispatching WebContentsObserver callb acks, 16 * Serves as a compound observer proxy for dispatching WebContentsObserver callb acks,
18 * avoiding redundant JNI-related work when there are multiple Java-based observ ers. 17 * avoiding redundant JNI-related work when there are multiple Java-based observ ers.
19 */ 18 */
20 @JNINamespace("content") 19 @JNINamespace("content")
21 class WebContentsObserverProxy extends WebContentsObserver { 20 class WebContentsObserverProxy extends WebContentsObserver {
22 private long mNativeWebContentsObserverProxy; 21 private long mNativeWebContentsObserverProxy;
23 private final ObserverList<WebContentsObserver> mObservers; 22 private final ObserverList<WebContentsObserver> mObservers;
24 private final RewindableIterator<WebContentsObserver> mObserversIterator; 23 private final RewindableIterator<WebContentsObserver> mObserversIterator;
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
225 @Override 224 @Override
226 @CalledByNative 225 @CalledByNative
227 public void didStartNavigationToPendingEntry(String url) { 226 public void didStartNavigationToPendingEntry(String url) {
228 for (mObserversIterator.rewind(); mObserversIterator.hasNext();) { 227 for (mObserversIterator.rewind(); mObserversIterator.hasNext();) {
229 mObserversIterator.next().didStartNavigationToPendingEntry(url); 228 mObserversIterator.next().didStartNavigationToPendingEntry(url);
230 } 229 }
231 } 230 }
232 231
233 @Override 232 @Override
234 @CalledByNative 233 @CalledByNative
235 public void mediaSessionStateChanged(boolean isControllable, boolean isSuspe nded) {
236 for (mObserversIterator.rewind(); mObserversIterator.hasNext();) {
237 mObserversIterator.next().mediaSessionStateChanged(isControllable, i sSuspended);
238 }
239 }
240
241 @Override
242 @CalledByNative
243 public void mediaSessionMetadataChanged(MediaMetadata metadata) {
244 for (mObserversIterator.rewind(); mObserversIterator.hasNext();) {
245 mObserversIterator.next().mediaSessionMetadataChanged(metadata);
246 }
247 }
248
249 @Override
250 @CalledByNative
251 public void destroy() { 234 public void destroy() {
252 // Super destruction semantics (removing the observer from the 235 // Super destruction semantics (removing the observer from the
253 // Java-based WebContents) are quite different, so we explicitly avoid 236 // Java-based WebContents) are quite different, so we explicitly avoid
254 // calling it here. 237 // calling it here.
255 ThreadUtils.assertOnUiThread(); 238 ThreadUtils.assertOnUiThread();
256 for (mObserversIterator.rewind(); mObserversIterator.hasNext();) { 239 for (mObserversIterator.rewind(); mObserversIterator.hasNext();) {
257 mObserversIterator.next().destroy(); 240 mObserversIterator.next().destroy();
258 } 241 }
259 // All observer destroy() implementations should result in their removal 242 // All observer destroy() implementations should result in their removal
260 // from the proxy. 243 // from the proxy.
261 assert mObservers.isEmpty(); 244 assert mObservers.isEmpty();
262 mObservers.clear(); 245 mObservers.clear();
263 246
264 if (mNativeWebContentsObserverProxy != 0) { 247 if (mNativeWebContentsObserverProxy != 0) {
265 nativeDestroy(mNativeWebContentsObserverProxy); 248 nativeDestroy(mNativeWebContentsObserverProxy);
266 mNativeWebContentsObserverProxy = 0; 249 mNativeWebContentsObserverProxy = 0;
267 } 250 }
268 } 251 }
269 252
270 private native long nativeInit(WebContentsImpl webContents); 253 private native long nativeInit(WebContentsImpl webContents);
271 private native void nativeDestroy(long nativeWebContentsObserverProxy); 254 private native void nativeDestroy(long nativeWebContentsObserverProxy);
272 } 255 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698