1 // Copyright 2012 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.CalledByNative; 8 import org.chromium.base.JNINamespace; 9 import org.chromium.base.ThreadUtils; 10 import org.chromium.content_public.browser.WebContents; 11 12 /** 13 * This class receives callbacks that act as hooks for various a native web contents events related 14 * to loading a url. A single web contents can have multiple WebContentObserverAndroids. 15 */ 16 @JNINamespace("content") 17 public abstract class WebContentsObserverAndroid { 18 private long mNativeWebContentsObserverAndroid; 19 20 // TODO(yfriedman): Switch everyone to use the WebContents constructor. WebContentsObserverAndroid(ContentViewCore contentViewCore)21 public WebContentsObserverAndroid(ContentViewCore contentViewCore) { 22 this(contentViewCore.getWebContents()); 23 } 24 WebContentsObserverAndroid(WebContents webContents)25 public WebContentsObserverAndroid(WebContents webContents) { 26 ThreadUtils.assertOnUiThread(); 27 mNativeWebContentsObserverAndroid = nativeInit(webContents); 28 } 29 30 @CalledByNative renderProcessGone(boolean wasOomProtected)31 public void renderProcessGone(boolean wasOomProtected) { 32 } 33 34 /** 35 * Called when the a page starts loading. 36 * @param url The validated url for the loading page. 37 */ 38 @CalledByNative didStartLoading(String url)39 public void didStartLoading(String url) { 40 } 41 42 /** 43 * Called when the a page finishes loading. 44 * @param url The validated url for the page. 45 */ 46 @CalledByNative didStopLoading(String url)47 public void didStopLoading(String url) { 48 } 49 50 /** 51 * Called when an error occurs while loading a page and/or the page fails to load. 52 * @param errorCode Error code for the occurring error. 53 * @param description The description for the error. 54 * @param failingUrl The url that was loading when the error occurred. 55 */ 56 @CalledByNative didFailLoad(boolean isProvisionalLoad, boolean isMainFrame, int errorCode, String description, String failingUrl)57 public void didFailLoad(boolean isProvisionalLoad, 58 boolean isMainFrame, int errorCode, String description, String failingUrl) { 59 } 60 61 /** 62 * Called when the main frame of the page has committed. 63 * @param url The validated url for the page. 64 * @param baseUrl The validated base url for the page. 65 * @param isNavigationToDifferentPage Whether the main frame navigated to a different page. 66 * @param isFragmentNavigation Whether the main frame navigation did not cause changes to the 67 * document (for example scrolling to a named anchor or PopState). 68 */ 69 @CalledByNative didNavigateMainFrame(String url, String baseUrl, boolean isNavigationToDifferentPage, boolean isFragmentNavigation)70 public void didNavigateMainFrame(String url, String baseUrl, 71 boolean isNavigationToDifferentPage, boolean isFragmentNavigation) { 72 } 73 74 /** 75 * Called when the page had painted something non-empty. 76 */ 77 @CalledByNative didFirstVisuallyNonEmptyPaint()78 public void didFirstVisuallyNonEmptyPaint() { 79 } 80 81 /** 82 * Similar to didNavigateMainFrame but also called on subframe navigations. 83 * @param url The validated url for the page. 84 * @param baseUrl The validated base url for the page. 85 * @param isReload True if this navigation is a reload. 86 */ 87 @CalledByNative didNavigateAnyFrame(String url, String baseUrl, boolean isReload)88 public void didNavigateAnyFrame(String url, String baseUrl, boolean isReload) { 89 } 90 91 /** 92 * Notifies that a load is started for a given frame. 93 * @param frameId A positive, non-zero integer identifying the navigating frame. 94 * @param parentFrameId The frame identifier of the frame containing the navigating frame, 95 * or -1 if the frame is not contained in another frame. 96 * @param isMainFrame Whether the load is happening for the main frame. 97 * @param validatedUrl The validated URL that is being navigated to. 98 * @param isErrorPage Whether this is navigating to an error page. 99 * @param isIframeSrcdoc Whether this is navigating to about:srcdoc. 100 */ 101 @CalledByNative didStartProvisionalLoadForFrame( long frameId, long parentFrameId, boolean isMainFrame, String validatedUrl, boolean isErrorPage, boolean isIframeSrcdoc)102 public void didStartProvisionalLoadForFrame( 103 long frameId, 104 long parentFrameId, 105 boolean isMainFrame, 106 String validatedUrl, 107 boolean isErrorPage, 108 boolean isIframeSrcdoc) { 109 } 110 111 /** 112 * Notifies that the provisional load was successfully committed. The RenderViewHost is now 113 * the current RenderViewHost of the WebContents. 114 * @param frameId A positive, non-zero integer identifying the navigating frame. 115 * @param isMainFrame Whether the load is happening for the main frame. 116 * @param url The committed URL being navigated to. 117 * @param transitionType The transition type as defined in 118 * {@link org.chromium.content.browser.PageTransitionTypes} for the load. 119 */ 120 @CalledByNative didCommitProvisionalLoadForFrame( long frameId, boolean isMainFrame, String url, int transitionType)121 public void didCommitProvisionalLoadForFrame( 122 long frameId, boolean isMainFrame, String url, int transitionType) { 123 124 } 125 126 /** 127 * Notifies that a load has finished for a given frame. 128 * @param frameId A positive, non-zero integer identifying the navigating frame. 129 * @param validatedUrl The validated URL that is being navigated to. 130 * @param isMainFrame Whether the load is happening for the main frame. 131 */ 132 @CalledByNative didFinishLoad(long frameId, String validatedUrl, boolean isMainFrame)133 public void didFinishLoad(long frameId, String validatedUrl, boolean isMainFrame) { 134 } 135 136 /** 137 * Notifies that the document has finished loading for the given frame. 138 * @param frameId A positive, non-zero integer identifying the navigating frame. 139 */ 140 @CalledByNative documentLoadedInFrame(long frameId)141 public void documentLoadedInFrame(long frameId) { 142 } 143 144 /** 145 * Notifies that a navigation entry has been committed. 146 */ 147 @CalledByNative navigationEntryCommitted()148 public void navigationEntryCommitted() { 149 } 150 151 /** 152 * Called when an interstitial page gets attached to the tab content. 153 */ 154 @CalledByNative didAttachInterstitialPage()155 public void didAttachInterstitialPage() { 156 } 157 158 /** 159 * Called when an interstitial page gets detached from the tab content. 160 */ 161 @CalledByNative didDetachInterstitialPage()162 public void didDetachInterstitialPage() { 163 } 164 165 /** 166 * Called when the theme color was changed. 167 * @param color the new color in ARGB format 168 */ 169 @CalledByNative didChangeThemeColor(int color)170 public void didChangeThemeColor(int color) { 171 } 172 173 /** 174 * Destroy the corresponding native object. 175 */ 176 @CalledByNative detachFromWebContents()177 public void detachFromWebContents() { 178 if (mNativeWebContentsObserverAndroid != 0) { 179 nativeDestroy(mNativeWebContentsObserverAndroid); 180 mNativeWebContentsObserverAndroid = 0; 181 } 182 } 183 nativeInit(WebContents webContents)184 private native long nativeInit(WebContents webContents); nativeDestroy(long nativeWebContentsObserverAndroid)185 private native void nativeDestroy(long nativeWebContentsObserverAndroid); 186 } 187