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

Unified Diff: content/public/android/java/src/org/chromium/content_public/browser/WebContentsObserver.java

Issue 786933005: [Android] Add proxy for Java-based WebContentsObservers (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 5 years, 10 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/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..3d239db8763431a46d9bdda577177479894ae088 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,44 @@
// 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.
+ // Using a weak reference avoids cycles that might prevent GC of WebView's WebContents.
+ private WeakReference<WebContents> mWebContents;
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 +47,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 +60,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 +71,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 +79,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 +87,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 +104,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 +117,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 +126,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() {
- 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() {}
}

Powered by Google App Engine
This is Rietveld 408576698