| OLD | NEW |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 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 | 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.android_webview; | 5 package org.chromium.android_webview; |
| 6 | 6 |
| 7 import android.annotation.SuppressLint; | 7 import android.annotation.SuppressLint; |
| 8 import android.app.Activity; | 8 import android.app.Activity; |
| 9 import android.content.ComponentCallbacks2; | 9 import android.content.ComponentCallbacks2; |
| 10 import android.content.Context; | 10 import android.content.Context; |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 42 import org.chromium.base.JNINamespace; | 42 import org.chromium.base.JNINamespace; |
| 43 import org.chromium.base.ThreadUtils; | 43 import org.chromium.base.ThreadUtils; |
| 44 import org.chromium.base.TraceEvent; | 44 import org.chromium.base.TraceEvent; |
| 45 import org.chromium.base.VisibleForTesting; | 45 import org.chromium.base.VisibleForTesting; |
| 46 import org.chromium.components.navigation_interception.InterceptNavigationDelega
te; | 46 import org.chromium.components.navigation_interception.InterceptNavigationDelega
te; |
| 47 import org.chromium.components.navigation_interception.NavigationParams; | 47 import org.chromium.components.navigation_interception.NavigationParams; |
| 48 import org.chromium.content.browser.ContentViewClient; | 48 import org.chromium.content.browser.ContentViewClient; |
| 49 import org.chromium.content.browser.ContentViewCore; | 49 import org.chromium.content.browser.ContentViewCore; |
| 50 import org.chromium.content.browser.ContentViewStatics; | 50 import org.chromium.content.browser.ContentViewStatics; |
| 51 import org.chromium.content.browser.SmartClipProvider; | 51 import org.chromium.content.browser.SmartClipProvider; |
| 52 import org.chromium.content.browser.WebContentsObserver; | |
| 53 import org.chromium.content.common.CleanupReference; | 52 import org.chromium.content.common.CleanupReference; |
| 54 import org.chromium.content_public.browser.GestureStateListener; | 53 import org.chromium.content_public.browser.GestureStateListener; |
| 55 import org.chromium.content_public.browser.JavaScriptCallback; | 54 import org.chromium.content_public.browser.JavaScriptCallback; |
| 56 import org.chromium.content_public.browser.LoadUrlParams; | 55 import org.chromium.content_public.browser.LoadUrlParams; |
| 57 import org.chromium.content_public.browser.NavigationController; | 56 import org.chromium.content_public.browser.NavigationController; |
| 58 import org.chromium.content_public.browser.NavigationHistory; | 57 import org.chromium.content_public.browser.NavigationHistory; |
| 59 import org.chromium.content_public.browser.WebContents; | 58 import org.chromium.content_public.browser.WebContents; |
| 60 import org.chromium.content_public.browser.navigation_controller.LoadURLType; | 59 import org.chromium.content_public.browser.navigation_controller.LoadURLType; |
| 61 import org.chromium.content_public.browser.navigation_controller.UserAgentOverri
deOption; | 60 import org.chromium.content_public.browser.navigation_controller.UserAgentOverri
deOption; |
| 62 import org.chromium.content_public.common.Referrer; | 61 import org.chromium.content_public.common.Referrer; |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 197 private final AwBrowserContext mBrowserContext; | 196 private final AwBrowserContext mBrowserContext; |
| 198 private ViewGroup mContainerView; | 197 private ViewGroup mContainerView; |
| 199 private final AwLayoutChangeListener mLayoutChangeListener; | 198 private final AwLayoutChangeListener mLayoutChangeListener; |
| 200 private final Context mContext; | 199 private final Context mContext; |
| 201 private ContentViewCore mContentViewCore; | 200 private ContentViewCore mContentViewCore; |
| 202 private WindowAndroid mWindowAndroid; | 201 private WindowAndroid mWindowAndroid; |
| 203 private WebContents mWebContents; | 202 private WebContents mWebContents; |
| 204 private NavigationController mNavigationController; | 203 private NavigationController mNavigationController; |
| 205 private final AwContentsClient mContentsClient; | 204 private final AwContentsClient mContentsClient; |
| 206 private final AwContentViewClient mContentViewClient; | 205 private final AwContentViewClient mContentViewClient; |
| 207 private WebContentsObserver mWebContentsObserver; | 206 private AwWebContentsObserver mWebContentsObserver; |
| 208 private final AwContentsClientBridge mContentsClientBridge; | 207 private final AwContentsClientBridge mContentsClientBridge; |
| 209 private final AwWebContentsDelegateAdapter mWebContentsDelegate; | 208 private final AwWebContentsDelegateAdapter mWebContentsDelegate; |
| 210 private final AwContentsIoThreadClient mIoThreadClient; | 209 private final AwContentsIoThreadClient mIoThreadClient; |
| 211 private final InterceptNavigationDelegateImpl mInterceptNavigationDelegate; | 210 private final InterceptNavigationDelegateImpl mInterceptNavigationDelegate; |
| 212 private InternalAccessDelegate mInternalAccessAdapter; | 211 private InternalAccessDelegate mInternalAccessAdapter; |
| 213 private final NativeGLDelegate mNativeGLDelegate; | 212 private final NativeGLDelegate mNativeGLDelegate; |
| 214 private final AwLayoutSizer mLayoutSizer; | 213 private final AwLayoutSizer mLayoutSizer; |
| 215 private final AwZoomControls mZoomControls; | 214 private final AwZoomControls mZoomControls; |
| 216 private final AwScrollOffsetManager mScrollOffsetManager; | 215 private final AwScrollOffsetManager mScrollOffsetManager; |
| 217 private OverScrollGlow mOverScrollGlow; | 216 private OverScrollGlow mOverScrollGlow; |
| 218 // This can be accessed on any thread after construction. See AwContentsIoTh
readClient. | 217 // This can be accessed on any thread after construction. See AwContentsIoTh
readClient. |
| 219 private final AwSettings mSettings; | 218 private final AwSettings mSettings; |
| 220 private final ScrollAccessibilityHelper mScrollAccessibilityHelper; | 219 private final ScrollAccessibilityHelper mScrollAccessibilityHelper; |
| 221 | 220 |
| 222 private boolean mIsPaused; | 221 private boolean mIsPaused; |
| 223 private boolean mIsViewVisible; | 222 private boolean mIsViewVisible; |
| 224 private boolean mIsWindowVisible; | 223 private boolean mIsWindowVisible; |
| 225 private boolean mIsAttachedToWindow; | 224 private boolean mIsAttachedToWindow; |
| 226 private Bitmap mFavicon; | 225 private Bitmap mFavicon; |
| 227 private boolean mHasRequestedVisitedHistoryFromClient; | 226 private boolean mHasRequestedVisitedHistoryFromClient; |
| 228 // TODO(boliu): This should be in a global context, not per webview. | 227 // TODO(boliu): This should be in a global context, not per webview. |
| 229 private final double mDIPScale; | 228 private final double mDIPScale; |
| 229 // Whether the WebView has attempted to do any load (including uncommitted l
oads). |
| 230 private boolean mDidAttemptLoad = false; |
| 230 | 231 |
| 231 // The base background color, i.e. not accounting for any CSS body from the
current page. | 232 // The base background color, i.e. not accounting for any CSS body from the
current page. |
| 232 private int mBaseBackgroundColor = Color.WHITE; | 233 private int mBaseBackgroundColor = Color.WHITE; |
| 233 | 234 |
| 234 // Must call nativeUpdateLastHitTestData first to update this before use. | 235 // Must call nativeUpdateLastHitTestData first to update this before use. |
| 235 private final HitTestData mPossiblyStaleHitTestData = new HitTestData(); | 236 private final HitTestData mPossiblyStaleHitTestData = new HitTestData(); |
| 236 | 237 |
| 237 private final DefaultVideoPosterRequestHandler mDefaultVideoPosterRequestHan
dler; | 238 private final DefaultVideoPosterRequestHandler mDefaultVideoPosterRequestHan
dler; |
| 238 | 239 |
| 239 // Bound method for suppling Picture instances to the AwContentsClient. Will
be null if the | 240 // Bound method for suppling Picture instances to the AwContentsClient. Will
be null if the |
| (...skipping 661 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 901 if (wasAttached) { | 902 if (wasAttached) { |
| 902 onAttachedToWindow(); | 903 onAttachedToWindow(); |
| 903 postInvalidateOnAnimation(); | 904 postInvalidateOnAnimation(); |
| 904 } | 905 } |
| 905 onSizeChanged(mContainerView.getWidth(), mContainerView.getHeight(), 0,
0); | 906 onSizeChanged(mContainerView.getWidth(), mContainerView.getHeight(), 0,
0); |
| 906 if (wasWindowVisible) setWindowVisibilityInternal(true); | 907 if (wasWindowVisible) setWindowVisibilityInternal(true); |
| 907 if (wasViewVisible) setViewVisibilityInternal(true); | 908 if (wasViewVisible) setViewVisibilityInternal(true); |
| 908 if (wasWindowFocused) onWindowFocusChanged(wasWindowFocused); | 909 if (wasWindowFocused) onWindowFocusChanged(wasWindowFocused); |
| 909 if (wasFocused) onFocusChanged(true, 0, null); | 910 if (wasFocused) onFocusChanged(true, 0, null); |
| 910 | 911 |
| 912 // Popups are always assumed as having made a load attempt. |
| 913 mDidAttemptLoad = true; |
| 914 |
| 911 // Restore injected JavaScript interfaces. | 915 // Restore injected JavaScript interfaces. |
| 912 for (Map.Entry<String, Pair<Object, Class>> entry : javascriptInterfaces
.entrySet()) { | 916 for (Map.Entry<String, Pair<Object, Class>> entry : javascriptInterfaces
.entrySet()) { |
| 913 @SuppressWarnings("unchecked") | 917 @SuppressWarnings("unchecked") |
| 914 Class<? extends Annotation> requiredAnnotation = entry.getValue().se
cond; | 918 Class<? extends Annotation> requiredAnnotation = entry.getValue().se
cond; |
| 915 mContentViewCore.addPossiblyUnsafeJavascriptInterface( | 919 mContentViewCore.addPossiblyUnsafeJavascriptInterface( |
| 916 entry.getValue().first, | 920 entry.getValue().first, |
| 917 entry.getKey(), | 921 entry.getKey(), |
| 918 requiredAnnotation); | 922 requiredAnnotation); |
| 919 } | 923 } |
| 920 } | 924 } |
| (...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1232 * | 1236 * |
| 1233 * @return The URL of the current page or null if it's empty. | 1237 * @return The URL of the current page or null if it's empty. |
| 1234 */ | 1238 */ |
| 1235 public String getUrl() { | 1239 public String getUrl() { |
| 1236 if (isDestroyed()) return null; | 1240 if (isDestroyed()) return null; |
| 1237 String url = mWebContents.getUrl(); | 1241 String url = mWebContents.getUrl(); |
| 1238 if (url == null || url.trim().isEmpty()) return null; | 1242 if (url == null || url.trim().isEmpty()) return null; |
| 1239 return url; | 1243 return url; |
| 1240 } | 1244 } |
| 1241 | 1245 |
| 1246 /** |
| 1247 * Gets the last committed URL. It represents the current page that is |
| 1248 * displayed in WebContents. It represents the current security context. |
| 1249 * |
| 1250 * @return The URL of the current page or null if it's empty. |
| 1251 */ |
| 1252 public String getLastCommittedUrl() { |
| 1253 if (isDestroyed()) return null; |
| 1254 String url = mWebContents.getLastCommittedUrl(); |
| 1255 if (url == null || url.trim().isEmpty()) return null; |
| 1256 return url; |
| 1257 } |
| 1258 |
| 1242 public void requestFocus() { | 1259 public void requestFocus() { |
| 1243 mAwViewMethods.requestFocus(); | 1260 mAwViewMethods.requestFocus(); |
| 1244 } | 1261 } |
| 1245 | 1262 |
| 1246 public void setBackgroundColor(int color) { | 1263 public void setBackgroundColor(int color) { |
| 1247 mBaseBackgroundColor = color; | 1264 mBaseBackgroundColor = color; |
| 1248 if (!isDestroyed()) nativeSetBackgroundColor(mNativeAwContents, color); | 1265 if (!isDestroyed()) nativeSetBackgroundColor(mNativeAwContents, color); |
| 1249 } | 1266 } |
| 1250 | 1267 |
| 1251 /** | 1268 /** |
| (...skipping 579 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1831 /** | 1848 /** |
| 1832 * Creates a message channel and returns the ports for each end of the chann
el. | 1849 * Creates a message channel and returns the ports for each end of the chann
el. |
| 1833 */ | 1850 */ |
| 1834 public MessagePort[] createMessageChannel() { | 1851 public MessagePort[] createMessageChannel() { |
| 1835 if (isDestroyed()) return null; | 1852 if (isDestroyed()) return null; |
| 1836 MessagePort[] ports = mBrowserContext.getMessagePortService().createMess
ageChannel(); | 1853 MessagePort[] ports = mBrowserContext.getMessagePortService().createMess
ageChannel(); |
| 1837 nativeCreateMessageChannel(mNativeAwContents, ports); | 1854 nativeCreateMessageChannel(mNativeAwContents, ports); |
| 1838 return ports; | 1855 return ports; |
| 1839 } | 1856 } |
| 1840 | 1857 |
| 1858 public boolean hasAccessedInitialDocument() { |
| 1859 if (isDestroyed()) return false; |
| 1860 return mWebContents.hasAccessedInitialDocument(); |
| 1861 } |
| 1862 |
| 1841 //--------------------------------------------------------------------------
------------------ | 1863 //--------------------------------------------------------------------------
------------------ |
| 1842 // View and ViewGroup method implementations | 1864 // View and ViewGroup method implementations |
| 1843 //--------------------------------------------------------------------------
------------------ | 1865 //--------------------------------------------------------------------------
------------------ |
| 1844 | 1866 |
| 1845 /** | 1867 /** |
| 1846 * @see android.webkit.View#onTouchEvent() | 1868 * @see android.webkit.View#onTouchEvent() |
| 1847 */ | 1869 */ |
| 1848 public boolean onTouchEvent(MotionEvent event) { | 1870 public boolean onTouchEvent(MotionEvent event) { |
| 1849 return mAwViewMethods.onTouchEvent(event); | 1871 return mAwViewMethods.onTouchEvent(event); |
| 1850 } | 1872 } |
| (...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2065 * 3. A frame swap happens that draws the active tree into the screen | 2087 * 3. A frame swap happens that draws the active tree into the screen |
| 2066 * | 2088 * |
| 2067 * @param requestId an id that will be returned from the callback invocation
to allow | 2089 * @param requestId an id that will be returned from the callback invocation
to allow |
| 2068 * callers to match requests with callbacks. | 2090 * callers to match requests with callbacks. |
| 2069 * @param callback the callback to be inserted | 2091 * @param callback the callback to be inserted |
| 2070 */ | 2092 */ |
| 2071 public void insertVisualStateCallback(long requestId, VisualStateCallback ca
llback) { | 2093 public void insertVisualStateCallback(long requestId, VisualStateCallback ca
llback) { |
| 2072 nativeInsertVisualStateCallback(mNativeAwContents, requestId, callback); | 2094 nativeInsertVisualStateCallback(mNativeAwContents, requestId, callback); |
| 2073 } | 2095 } |
| 2074 | 2096 |
| 2097 public boolean getDidAttemptLoad() { |
| 2098 if (mDidAttemptLoad) return mDidAttemptLoad; |
| 2099 mDidAttemptLoad = mWebContentsObserver.hasStartedAnyProvisionalLoad(); |
| 2100 return mDidAttemptLoad; |
| 2101 } |
| 2102 |
| 2075 //--------------------------------------------------------------------------
------------------ | 2103 //--------------------------------------------------------------------------
------------------ |
| 2076 // Methods called from native via JNI | 2104 // Methods called from native via JNI |
| 2077 //--------------------------------------------------------------------------
------------------ | 2105 //--------------------------------------------------------------------------
------------------ |
| 2078 | 2106 |
| 2079 @CalledByNative | 2107 @CalledByNative |
| 2080 private static void onDocumentHasImagesResponse(boolean result, Message mess
age) { | 2108 private static void onDocumentHasImagesResponse(boolean result, Message mess
age) { |
| 2081 message.arg1 = result ? 1 : 0; | 2109 message.arg1 = result ? 1 : 0; |
| 2082 message.sendToTarget(); | 2110 message.sendToTarget(); |
| 2083 } | 2111 } |
| 2084 | 2112 |
| (...skipping 686 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2771 private native void nativeCreatePdfExporter(long nativeAwContents, AwPdfExpo
rter awPdfExporter); | 2799 private native void nativeCreatePdfExporter(long nativeAwContents, AwPdfExpo
rter awPdfExporter); |
| 2772 | 2800 |
| 2773 private native void nativePreauthorizePermission(long nativeAwContents, Stri
ng origin, | 2801 private native void nativePreauthorizePermission(long nativeAwContents, Stri
ng origin, |
| 2774 long resources); | 2802 long resources); |
| 2775 | 2803 |
| 2776 private native void nativePostMessageToFrame(long nativeAwContents, String f
rameId, | 2804 private native void nativePostMessageToFrame(long nativeAwContents, String f
rameId, |
| 2777 String message, String targetOrigin, int[] msgPorts); | 2805 String message, String targetOrigin, int[] msgPorts); |
| 2778 | 2806 |
| 2779 private native void nativeCreateMessageChannel(long nativeAwContents, Messag
ePort[] ports); | 2807 private native void nativeCreateMessageChannel(long nativeAwContents, Messag
ePort[] ports); |
| 2780 } | 2808 } |
| OLD | NEW |