Chromium Code Reviews| Index: content/public/android/java/src/org/chromium/content_public/browser/WebContentsObserver.java |
| diff --git a/content/public/android/java/src/org/chromium/content/browser/WebContentsObserver.java b/content/public/android/java/src/org/chromium/content_public/browser/WebContentsObserver.java |
| similarity index 70% |
| rename from content/public/android/java/src/org/chromium/content/browser/WebContentsObserver.java |
| rename to content/public/android/java/src/org/chromium/content_public/browser/WebContentsObserver.java |
| index f1bf6a2fa0711e5f4e3ea7c0dbd1562c01a41f77..c3ab8cb8f0f1425af0732e9991533b53de0615fc 100644 |
| --- a/content/public/android/java/src/org/chromium/content/browser/WebContentsObserver.java |
| +++ b/content/public/android/java/src/org/chromium/content_public/browser/WebContentsObserver.java |
| @@ -2,53 +2,43 @@ |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| -package org.chromium.content.browser; |
| +package org.chromium.content_public.browser; |
| -import org.chromium.base.CalledByNative; |
| -import org.chromium.base.JNINamespace; |
| -import org.chromium.base.ThreadUtils; |
| -import org.chromium.content_public.browser.WebContents; |
| +import java.lang.ref.WeakReference; |
| /** |
| * This class receives callbacks that act as hooks for various a native web contents events related |
| * to loading a url. A single web contents can have multiple WebContentObservers. |
| */ |
| -@JNINamespace("content") |
| public abstract class WebContentsObserver { |
| - private long mNativeWebContentsObserverAndroid; |
| + // TODO(jdduke): Remove the destroy method and hold observer embedders |
| + // responsible for explicit observer detachment. |
| + private WeakReference<WebContents> mWebContents; |
|
Ted C
2015/02/24 21:34:46
Is this a weak ref because of WebView?
jdduke (slow)
2015/02/26 21:22:10
Yes, I'll make a note.
|
| public WebContentsObserver(WebContents webContents) { |
| - ThreadUtils.assertOnUiThread(); |
| - mNativeWebContentsObserverAndroid = nativeInit(webContents); |
| + mWebContents = new WeakReference<WebContents>(webContents); |
| + webContents.addObserver(this); |
| } |
| /** |
| * Called when the RenderView of the current RenderViewHost is ready, e.g. because we recreated |
| * it after a crash. |
| */ |
| - @CalledByNative |
| - public void renderViewReady() { |
| - } |
| + public void renderViewReady() {} |
| - @CalledByNative |
| - public void renderProcessGone(boolean wasOomProtected) { |
| - } |
| + public void renderProcessGone(boolean wasOomProtected) {} |
| /** |
| * Called when the a page starts loading. |
| * @param url The validated url for the loading page. |
| */ |
| - @CalledByNative |
| - public void didStartLoading(String url) { |
| - } |
| + public void didStartLoading(String url) {} |
| /** |
| * Called when the a page finishes loading. |
| * @param url The validated url for the page. |
| */ |
| - @CalledByNative |
| - public void didStopLoading(String url) { |
| - } |
| + public void didStopLoading(String url) {} |
| /** |
| * Called when an error occurs while loading a page and/or the page fails to load. |
| @@ -56,10 +46,8 @@ public abstract class WebContentsObserver { |
| * @param description The description for the error. |
| * @param failingUrl The url that was loading when the error occurred. |
| */ |
| - @CalledByNative |
| - public void didFailLoad(boolean isProvisionalLoad, |
| - boolean isMainFrame, int errorCode, String description, String failingUrl) { |
| - } |
| + public void didFailLoad(boolean isProvisionalLoad, boolean isMainFrame, int errorCode, |
| + String description, String failingUrl) {} |
| /** |
| * Called when the main frame of the page has committed. |
| @@ -71,8 +59,7 @@ public abstract class WebContentsObserver { |
| * document (for example scrolling to a named anchor or PopState). |
| */ |
| public void didNavigateMainFrame(String url, String baseUrl, |
| - boolean isNavigationToDifferentPage, boolean isFragmentNavigation) { |
| - } |
| + boolean isNavigationToDifferentPage, boolean isFragmentNavigation) {} |
| /** |
| * Called when the main frame of the page has committed. |
| @@ -83,7 +70,6 @@ public abstract class WebContentsObserver { |
| * document (for example scrolling to a named anchor or PopState). |
| * @param statusCode The HTTP status code of the navigation. |
| */ |
| - @CalledByNative |
| public void didNavigateMainFrame(String url, String baseUrl, |
| boolean isNavigationToDifferentPage, boolean isFragmentNavigation, int statusCode) { |
| didNavigateMainFrame(url, baseUrl, isNavigationToDifferentPage, isFragmentNavigation); |
| @@ -92,9 +78,7 @@ public abstract class WebContentsObserver { |
| /** |
| * Called when the page had painted something non-empty. |
| */ |
| - @CalledByNative |
| - public void didFirstVisuallyNonEmptyPaint() { |
| - } |
| + public void didFirstVisuallyNonEmptyPaint() {} |
| /** |
| * Similar to didNavigateMainFrame but also called on subframe navigations. |
| @@ -102,16 +86,12 @@ public abstract class WebContentsObserver { |
| * @param baseUrl The validated base url for the page. |
| * @param isReload True if this navigation is a reload. |
| */ |
| - @CalledByNative |
| - public void didNavigateAnyFrame(String url, String baseUrl, boolean isReload) { |
| - } |
| + public void didNavigateAnyFrame(String url, String baseUrl, boolean isReload) {} |
| /** |
| * Called once the window.document object of the main frame was created. |
| */ |
| - @CalledByNative |
| - public void documentAvailableInMainFrame() { |
| - } |
| + public void documentAvailableInMainFrame() {} |
| /** |
| * Notifies that a load is started for a given frame. |
| @@ -123,14 +103,8 @@ public abstract class WebContentsObserver { |
| * @param isErrorPage Whether this is navigating to an error page. |
| * @param isIframeSrcdoc Whether this is navigating to about:srcdoc. |
| */ |
| - @CalledByNative |
| - public void didStartProvisionalLoadForFrame( |
| - long frameId, |
| - long parentFrameId, |
| - boolean isMainFrame, |
| - String validatedUrl, |
| - boolean isErrorPage, |
| - boolean isIframeSrcdoc) { |
| + public void didStartProvisionalLoadForFrame(long frameId, long parentFrameId, |
| + boolean isMainFrame, String validatedUrl, boolean isErrorPage, boolean isIframeSrcdoc) { |
| } |
| /** |
| @@ -142,11 +116,8 @@ public abstract class WebContentsObserver { |
| * @param transitionType The transition type as defined in |
| * {@link org.chromium.ui.base.PageTransition} for the load. |
| */ |
| - @CalledByNative |
| public void didCommitProvisionalLoadForFrame( |
| - long frameId, boolean isMainFrame, String url, int transitionType) { |
| - |
| - } |
| + long frameId, boolean isMainFrame, String url, int transitionType) {} |
| /** |
| * Notifies that a load has finished for a given frame. |
| @@ -154,66 +125,51 @@ public abstract class WebContentsObserver { |
| * @param validatedUrl The validated URL that is being navigated to. |
| * @param isMainFrame Whether the load is happening for the main frame. |
| */ |
| - @CalledByNative |
| - public void didFinishLoad(long frameId, String validatedUrl, boolean isMainFrame) { |
| - } |
| + public void didFinishLoad(long frameId, String validatedUrl, boolean isMainFrame) {} |
| /** |
| * Notifies that the document has finished loading for the given frame. |
| * @param frameId A positive, non-zero integer identifying the navigating frame. |
| */ |
| - @CalledByNative |
| - public void documentLoadedInFrame(long frameId) { |
| - } |
| + public void documentLoadedInFrame(long frameId) {} |
| /** |
| * Notifies that a navigation entry has been committed. |
| */ |
| - @CalledByNative |
| - public void navigationEntryCommitted() { |
| - } |
| + public void navigationEntryCommitted() {} |
| /** |
| * Called when an interstitial page gets attached to the tab content. |
| */ |
| - @CalledByNative |
| - public void didAttachInterstitialPage() { |
| - } |
| + public void didAttachInterstitialPage() {} |
| /** |
| * Called when an interstitial page gets detached from the tab content. |
| */ |
| - @CalledByNative |
| - public void didDetachInterstitialPage() { |
| - } |
| + public void didDetachInterstitialPage() {} |
| /** |
| * Called when the theme color was changed. |
| * @param color the new color in ARGB format |
| */ |
| - @CalledByNative |
| - public void didChangeThemeColor(int color) { |
| - } |
| + public void didChangeThemeColor(int color) {} |
| /** |
| * Called when we started navigation to the pending entry. |
| * @param url The URL that we are navigating to. |
| */ |
| - @CalledByNative |
| - public void didStartNavigationToPendingEntry(String url) { |
| - } |
| + public void didStartNavigationToPendingEntry(String url) {} |
| /** |
| - * Destroy the corresponding native object. |
| + * Stop observing the web contents and clean up associated references. |
| */ |
| - @CalledByNative |
| - public void detachFromWebContents() { |
|
Ted C
2015/02/24 21:34:46
Should we keep this around and call destroy to all
Yaron
2015/02/25 16:39:33
It won't already cause of the package move.
|
| - if (mNativeWebContentsObserverAndroid != 0) { |
| - nativeDestroy(mNativeWebContentsObserverAndroid); |
| - mNativeWebContentsObserverAndroid = 0; |
| - } |
| + public void destroy() { |
| + if (mWebContents == null) return; |
| + final WebContents webContents = mWebContents.get(); |
| + mWebContents = null; |
| + if (webContents == null) return; |
| + webContents.removeObserver(this); |
| } |
| - private native long nativeInit(WebContents webContents); |
| - private native void nativeDestroy(long nativeWebContentsObserverAndroid); |
| + protected WebContentsObserver() {} |
| } |