WebViewChromium.java revision 57b714b4b5f44c9a385836c7074e4f879ad7a767
146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)/* 246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * Copyright (C) 2012 The Android Open Source Project 346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * 446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * Licensed under the Apache License, Version 2.0 (the "License"); 546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * you may not use this file except in compliance with the License. 646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * You may obtain a copy of the License at 746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * 846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * http://www.apache.org/licenses/LICENSE-2.0 946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * 1046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * Unless required by applicable law or agreed to in writing, software 1146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * distributed under the License is distributed on an "AS IS" BASIS, 1246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * See the License for the specific language governing permissions and 1446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * limitations under the License. 1546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) */ 1646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 1746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)package com.android.webview.chromium; 1846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 1946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.content.res.Configuration; 2046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.graphics.Bitmap; 2146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.graphics.Canvas; 2246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.graphics.Paint; 2346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.graphics.Picture; 2446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.graphics.Rect; 2546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.graphics.drawable.Drawable; 2646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.net.http.SslCertificate; 2746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.os.Build; 2846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.os.Bundle; 2954a6e3d0cc566df6cec6807c0c03f05664de0a55Selim Gurunimport android.os.CancellationSignal; 3046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.os.Message; 31efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdochimport android.util.Base64; 32e78d6e40e4e78671e6621ba8cf49835568704899Jonathan Dixonimport android.util.Log; 33a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixonimport android.view.HardwareCanvas; 3446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.KeyEvent; 3546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.MotionEvent; 3646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.View; 373411fdf2737f3f0dd0c1fa20045356cf89f34eddBo Liuimport android.view.View.MeasureSpec; 3846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.ViewGroup; 3946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.accessibility.AccessibilityEvent; 4046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.accessibility.AccessibilityNodeInfo; 415c990caf9c0237064dab94059f6c46fc2d51cd97Ben Murdochimport android.view.accessibility.AccessibilityNodeProvider; 4246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.inputmethod.EditorInfo; 4346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.inputmethod.InputConnection; 4446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.DownloadListener; 456d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdochimport android.webkit.FindActionModeCallback; 467db34d3dcaac936566f912e1b0b21f3f103029ffJonathan Dixonimport android.webkit.JavascriptInterface; 4746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.ValueCallback; 4846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.WebBackForwardList; 4946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.WebChromeClient; 5046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.WebSettings; 5146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.WebView; 5246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.WebViewClient; 5346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.WebViewProvider; 5433e1eeae98299666b8c2d1e879f92d1c83fe33fbBen Murdochimport android.widget.TextView; 5546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 56aa8b39f3e3f208586f3750d7278f1239a09ebd32Kristian Monsenimport org.chromium.android_webview.AwBrowserContext; 5746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import org.chromium.android_webview.AwContents; 58a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsenimport org.chromium.base.ThreadUtils; 5946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import org.chromium.content.browser.LoadUrlParams; 6046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import org.chromium.net.NetworkChangeNotifier; 6146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 6246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import java.io.BufferedWriter; 6346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import java.io.File; 6449a1a6f9f27b63687edc1d98f842627d4719a327Selim Gurunimport java.io.OutputStream; 65ea844f60b1b559788566fe6e004b1eeca53a8039Jonathan Dixonimport java.lang.annotation.Annotation; 66b8281877c710018a3bc8066be17b1e11822be015Selim Gurunimport java.util.HashMap; 6746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import java.util.Map; 6846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 6946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)/** 7046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * This class is the delegate to which WebViewProxy forwards all API calls. 7146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * 721cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon * Most of the actual functionality is implemented by AwContents (or ContentViewCore within 731cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon * it). This class also contains WebView-specific APIs that require the creation of other 741cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon * adapters (otherwise org.chromium.content would depend on the webview.chromium package) 751cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon * and a small set of no-op deprecated APIs. 7646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) */ 7746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)class WebViewChromium implements WebViewProvider, 7846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) WebViewProvider.ScrollDelegate, WebViewProvider.ViewDelegate { 79e78d6e40e4e78671e6621ba8cf49835568704899Jonathan Dixon 80e78d6e40e4e78671e6621ba8cf49835568704899Jonathan Dixon private static final String TAG = WebViewChromium.class.getSimpleName(); 81e78d6e40e4e78671e6621ba8cf49835568704899Jonathan Dixon 8246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // The WebView that this WebViewChromium is the provider for. 8346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) WebView mWebView; 8446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // Lets us access protected View-derived methods on the WebView instance we're backing. 8546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) WebView.PrivateAccess mWebViewPrivate; 8646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // The client adapter class. 8746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) private WebViewContentsClientAdapter mContentsClientAdapter; 8846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 8946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // Variables for functionality provided by this adapter --------------------------------------- 9046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // WebSettings adapter, lazily initialized in the getter 9146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) private WebSettings mWebSettings; 923949435b480cb71106f65b237025da359cf8a8caBen Murdoch // The WebView wrapper for ContentViewCore and required browser compontents. 9346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) private AwContents mAwContents; 94a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon // Non-null if this webview is using the GL accelerated draw path. 95a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon private DrawGLFunctor mGLfunctor; 9646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 97aa8b39f3e3f208586f3750d7278f1239a09ebd32Kristian Monsen private AwBrowserContext mBrowserContext; 98aa8b39f3e3f208586f3750d7278f1239a09ebd32Kristian Monsen 99c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu private final WebView.HitTestResult mHitTestResult; 100c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu 1016ef347a29d692df672aaf59ee4926a476288476aBen Murdoch private final int mAppTargetSdkVersion; 1026ef347a29d692df672aaf59ee4926a476288476aBen Murdoch 103aa8b39f3e3f208586f3750d7278f1239a09ebd32Kristian Monsen public WebViewChromium(WebView webView, WebView.PrivateAccess webViewPrivate, 104aa8b39f3e3f208586f3750d7278f1239a09ebd32Kristian Monsen AwBrowserContext browserContext) { 10546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mWebView = webView; 10646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mWebViewPrivate = webViewPrivate; 107c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu mHitTestResult = new WebView.HitTestResult(); 108aa8b39f3e3f208586f3750d7278f1239a09ebd32Kristian Monsen mBrowserContext = browserContext; 1096ef347a29d692df672aaf59ee4926a476288476aBen Murdoch mAppTargetSdkVersion = mWebView.getContext().getApplicationInfo().targetSdkVersion; 11046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 11146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 1121ee9dd0420198429115c3fe8cf0b0502fab9cf62Ben Murdoch static void completeWindowCreation(WebView parent, WebView child) { 1131ee9dd0420198429115c3fe8cf0b0502fab9cf62Ben Murdoch AwContents parentContents = ((WebViewChromium) parent.getWebViewProvider()).mAwContents; 114bbfef40e5fc625f4821f012fae7f16468b7308cfJonathan Dixon AwContents childContents = 115bbfef40e5fc625f4821f012fae7f16468b7308cfJonathan Dixon child == null ? null : ((WebViewChromium) child.getWebViewProvider()).mAwContents; 1161ee9dd0420198429115c3fe8cf0b0502fab9cf62Ben Murdoch parentContents.supplyContentsForPopup(childContents); 11746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 11846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 11946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // WebViewProvider methods -------------------------------------------------------------------- 12046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 12146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 12246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void init(Map<String, Object> javaScriptInterfaces, boolean privateBrowsing) { 1234dcabaef9151384b571327b62234409b31caef38Jonathan Dixon // BUG=6790250 |javaScriptInterfaces| was only ever used by the obsolete DumpRenderTree 1244dcabaef9151384b571327b62234409b31caef38Jonathan Dixon // so is ignored. TODO: remove it from WebViewProvider. 12546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) final boolean isAccessFromFileURLsGrantedByDefault = 1266ef347a29d692df672aaf59ee4926a476288476aBen Murdoch mAppTargetSdkVersion < Build.VERSION_CODES.JELLY_BEAN; 12746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mContentsClientAdapter = new WebViewContentsClientAdapter(mWebView); 128aa8b39f3e3f208586f3750d7278f1239a09ebd32Kristian Monsen mAwContents = new AwContents(mBrowserContext, mWebView, new InternalAccessAdapter(), 129aa8b39f3e3f208586f3750d7278f1239a09ebd32Kristian Monsen mContentsClientAdapter, isAccessFromFileURLsGrantedByDefault); 1304dcabaef9151384b571327b62234409b31caef38Jonathan Dixon 1314dcabaef9151384b571327b62234409b31caef38Jonathan Dixon if (privateBrowsing) { 1324dcabaef9151384b571327b62234409b31caef38Jonathan Dixon final String msg = "Private browsing is not supported in WebView."; 13333e1eeae98299666b8c2d1e879f92d1c83fe33fbBen Murdoch if (mAppTargetSdkVersion >= Build.VERSION_CODES.KEY_LIME_PIE) { 1344dcabaef9151384b571327b62234409b31caef38Jonathan Dixon throw new IllegalArgumentException(msg); 1354dcabaef9151384b571327b62234409b31caef38Jonathan Dixon } else { 1364dcabaef9151384b571327b62234409b31caef38Jonathan Dixon Log.w(TAG, msg); 1374dcabaef9151384b571327b62234409b31caef38Jonathan Dixon // Intentionally irreversibly disable the webview instance, so that private 1384dcabaef9151384b571327b62234409b31caef38Jonathan Dixon // user data cannot leak through misuse of a non-privateBrowing WebView instance. 1394dcabaef9151384b571327b62234409b31caef38Jonathan Dixon // Can't just null out mAwContents as we never null-check it before use. 1404dcabaef9151384b571327b62234409b31caef38Jonathan Dixon mAwContents.destroy(); 14133e1eeae98299666b8c2d1e879f92d1c83fe33fbBen Murdoch TextView warningLabel = new TextView(mWebView.getContext()); 14233e1eeae98299666b8c2d1e879f92d1c83fe33fbBen Murdoch warningLabel.setText(mWebView.getContext().getString( 14333e1eeae98299666b8c2d1e879f92d1c83fe33fbBen Murdoch com.android.internal.R.string.webviewchromium_private_browsing_warning)); 14433e1eeae98299666b8c2d1e879f92d1c83fe33fbBen Murdoch mWebView.addView(warningLabel); 1454dcabaef9151384b571327b62234409b31caef38Jonathan Dixon } 1464dcabaef9151384b571327b62234409b31caef38Jonathan Dixon } 1474dcabaef9151384b571327b62234409b31caef38Jonathan Dixon 14846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 14946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 15057b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen private RuntimeException createThreadException() { 15157b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen return new IllegalStateException("Calling View methods on another thread than the UI " + 15257b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen "thread. PLEASE FILE A BUG! go/klp-webview-bug"); 15357b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen } 15457b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen 15562389e2d66a99e936652092333782947e363241dKristian Monsen // Intentionally not static, as no need to check thread on static methods 15662389e2d66a99e936652092333782947e363241dKristian Monsen private void checkThread() { 15762389e2d66a99e936652092333782947e363241dKristian Monsen if (!ThreadUtils.runningOnUiThread()) { 15857b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen final RuntimeException threadViolation = createThreadException(); 15957b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen ThreadUtils.postOnUiThread(new Runnable() { 16057b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen @Override 16157b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen public void run() { 16257b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen throw threadViolation; 16357b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen } 16457b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen }); 16562389e2d66a99e936652092333782947e363241dKristian Monsen } 16662389e2d66a99e936652092333782947e363241dKristian Monsen } 16762389e2d66a99e936652092333782947e363241dKristian Monsen 16846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 16946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void setHorizontalScrollbarOverlay(boolean overlay) { 17062389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 171bd819ca872a1711e4607ef11cd8b0b2156241897Martin Kosiba mAwContents.setHorizontalScrollbarOverlay(overlay); 17246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 17346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 17446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 17546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void setVerticalScrollbarOverlay(boolean overlay) { 17662389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 177bd819ca872a1711e4607ef11cd8b0b2156241897Martin Kosiba mAwContents.setVerticalScrollbarOverlay(overlay); 17846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 17946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 18046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 18146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean overlayHorizontalScrollbar() { 18262389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 183bd819ca872a1711e4607ef11cd8b0b2156241897Martin Kosiba return mAwContents.overlayHorizontalScrollbar(); 18446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 18546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 18646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 18746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean overlayVerticalScrollbar() { 18862389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 189bd819ca872a1711e4607ef11cd8b0b2156241897Martin Kosiba return mAwContents.overlayVerticalScrollbar(); 19046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 19146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 19246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 19346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public int getVisibleTitleHeight() { 19446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // This is deprecated in WebView and should always return 0. 19546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return 0; 19646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 19746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 19846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 19946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public SslCertificate getCertificate() { 20062389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 20146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return mAwContents.getCertificate(); 20246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 20346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 20446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 20546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void setCertificate(SslCertificate certificate) { 20662389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 20746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) UnimplementedWebViewApi.invoke(); 20846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 20946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 21046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 21146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void savePassword(String host, String username, String password) { 212adc6c4d74c77a617100bdfeb174ab0c314b24ea8Selim Gurun // This is a deprecated API: intentional no-op. 21346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 21446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 21546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 21646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void setHttpAuthUsernamePassword(String host, String realm, String username, 21746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) String password) { 21862389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 21946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mAwContents.setHttpAuthUsernamePassword(host, realm, username, password); 22046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 22146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 22246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 22346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public String[] getHttpAuthUsernamePassword(String host, String realm) { 22462389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 22546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return mAwContents.getHttpAuthUsernamePassword(host, realm); 22646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 22746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 22846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 22946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void destroy() { 23062389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 2313949435b480cb71106f65b237025da359cf8a8caBen Murdoch mAwContents.destroy(); 232a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon if (mGLfunctor != null) { 233a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon mGLfunctor.destroy(); 234a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon mGLfunctor = null; 235a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon } 23646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 23746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 23846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 23946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void setNetworkAvailable(boolean networkUp) { 24062389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 24146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) NetworkChangeNotifier.forceConnectivityState(networkUp); 24246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 24346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 24446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 24546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public WebBackForwardList saveState(Bundle outState) { 24662389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 247a08e8aada16dc4dbfb8745532169fb4a8347541dBo Liu if (outState == null) return null; 248a08e8aada16dc4dbfb8745532169fb4a8347541dBo Liu if (!mAwContents.saveState(outState)) return null; 249a08e8aada16dc4dbfb8745532169fb4a8347541dBo Liu return copyBackForwardList(); 25046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 25146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 25246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 25346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean savePicture(Bundle b, File dest) { 2549405536501747e2d7b4fc46a33e5f0a1e7fd47acJonathan Dixon // Intentional no-op: hidden method on WebView. 25546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return false; 25646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 25746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 25846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 25946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean restorePicture(Bundle b, File src) { 2609405536501747e2d7b4fc46a33e5f0a1e7fd47acJonathan Dixon // Intentional no-op: hidden method on WebView. 26146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return false; 26246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 26346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 26446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 26546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public WebBackForwardList restoreState(Bundle inState) { 26662389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 267a08e8aada16dc4dbfb8745532169fb4a8347541dBo Liu if (inState == null) return null; 268a08e8aada16dc4dbfb8745532169fb4a8347541dBo Liu if (!mAwContents.restoreState(inState)) return null; 269a08e8aada16dc4dbfb8745532169fb4a8347541dBo Liu return copyBackForwardList(); 27046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 27146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 27246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 27346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void loadUrl(String url, Map<String, String> additionalHttpHeaders) { 27446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // TODO: We may actually want to do some sanity checks here (like filter about://chrome). 2756ef347a29d692df672aaf59ee4926a476288476aBen Murdoch 2766ef347a29d692df672aaf59ee4926a476288476aBen Murdoch // For backwards compatibility, apps targeting less than K will have JS URLs evaluated 2776ef347a29d692df672aaf59ee4926a476288476aBen Murdoch // directly and any result of the evaluation will not replace the current page content. 2786ef347a29d692df672aaf59ee4926a476288476aBen Murdoch // Matching Chrome behavior more closely; apps targetting >= K that load a JS URL will 2796ef347a29d692df672aaf59ee4926a476288476aBen Murdoch // have the result of that URL replace the content of the current page. 2806ef347a29d692df672aaf59ee4926a476288476aBen Murdoch final String JAVASCRIPT_SCHEME = "javascript:"; 2816ef347a29d692df672aaf59ee4926a476288476aBen Murdoch if (mAppTargetSdkVersion < Build.VERSION_CODES.KEY_LIME_PIE && 2826ef347a29d692df672aaf59ee4926a476288476aBen Murdoch url.startsWith(JAVASCRIPT_SCHEME)) { 2833d52163e1c466860651414670c59762f5bdd269fTao Bai mAwContents.evaluateJavaScriptEvenIfNotYetNavigated( 2843d52163e1c466860651414670c59762f5bdd269fTao Bai url.substring(JAVASCRIPT_SCHEME.length())); 2856ef347a29d692df672aaf59ee4926a476288476aBen Murdoch return; 2866ef347a29d692df672aaf59ee4926a476288476aBen Murdoch } 2876ef347a29d692df672aaf59ee4926a476288476aBen Murdoch 28846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) LoadUrlParams params = new LoadUrlParams(url); 28946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) if (additionalHttpHeaders != null) params.setExtraHeaders(additionalHttpHeaders); 290a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen loadUrlOnUiThread(params); 29146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 29246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 29346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 29446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void loadUrl(String url) { 29546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) loadUrl(url, null); 29646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 29746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 29846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 29946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void postUrl(String url, byte[] postData) { 300b8281877c710018a3bc8066be17b1e11822be015Selim Gurun LoadUrlParams params = LoadUrlParams.createLoadHttpPostParams(url, postData); 301b8281877c710018a3bc8066be17b1e11822be015Selim Gurun Map<String,String> headers = new HashMap<String,String>(); 302b8281877c710018a3bc8066be17b1e11822be015Selim Gurun headers.put("Content-Type", "application/x-www-form-urlencoded"); 303b8281877c710018a3bc8066be17b1e11822be015Selim Gurun params.setExtraHeaders(headers); 304b8281877c710018a3bc8066be17b1e11822be015Selim Gurun loadUrlOnUiThread(params); 30546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 30646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 30746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) private static boolean isBase64Encoded(String encoding) { 30846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return "base64".equals(encoding); 30946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 31046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 31146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 31246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void loadData(String data, String mimeType, String encoding) { 313a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen loadUrlOnUiThread(LoadUrlParams.createLoadDataParams( 314a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen data, mimeType, isBase64Encoded(encoding))); 31546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 31646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 31746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 31846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void loadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding, 319efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch String historyUrl) { 320efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch LoadUrlParams loadUrlParams; 321efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch 322efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch if (baseUrl != null && baseUrl.startsWith("data:")) { 323efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch // For backwards compatibility with WebViewClassic, we use the value of |encoding| 324efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch // as the charset, as long as it's not "base64". 325efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch boolean isBase64 = isBase64Encoded(encoding); 326efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch loadUrlParams = LoadUrlParams.createLoadDataParamsWithBaseUrl( 327efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch data, mimeType, isBase64, baseUrl, historyUrl, isBase64 ? null : encoding); 328efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch } else { 329efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch if (baseUrl == null || baseUrl.length() == 0) baseUrl = "about:blank"; 330efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch // When loading data with a non-data: base URL, the classic WebView would effectively 331efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch // "dump" that string of data into the WebView without going through regular URL 332efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch // loading steps such as decoding URL-encoded entities. We achieve this same behavior by 333efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch // base64 encoding the data that is passed here and then loading that as a data: URL. 334efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch try { 335efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch loadUrlParams = LoadUrlParams.createLoadDataParamsWithBaseUrl( 336efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch Base64.encodeToString(data.getBytes("utf-8"), Base64.DEFAULT), mimeType, 337efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch true, baseUrl, historyUrl, "utf-8"); 338efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch } catch (java.io.UnsupportedEncodingException e) { 339efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch Log.wtf(TAG, "Unable to load data string " + data, e); 340efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch return; 341efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch } 342efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch } 343a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen loadUrlOnUiThread(loadUrlParams); 344a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen } 345a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen 346a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen private void loadUrlOnUiThread(final LoadUrlParams loadUrlParams) { 347a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen if (ThreadUtils.runningOnUiThread()) { 348a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen mAwContents.loadUrl(loadUrlParams); 349a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen } else { 350a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen // Disallowed in WebView API for apps targetting a new SDK 351a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen assert mAppTargetSdkVersion < Build.VERSION_CODES.JELLY_BEAN_MR2; 352a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen ThreadUtils.postOnUiThread(new Runnable() { 353a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen @Override 354a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen public void run() { 355a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen mAwContents.loadUrl(loadUrlParams); 356a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen } 357a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen }); 358a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen } 35946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 36046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 3616ef347a29d692df672aaf59ee4926a476288476aBen Murdoch public void evaluateJavaScript(String script, ValueCallback<String> resultCallback) { 36262389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 3636ef347a29d692df672aaf59ee4926a476288476aBen Murdoch mAwContents.evaluateJavaScript(script, resultCallback); 3646ef347a29d692df672aaf59ee4926a476288476aBen Murdoch } 3656ef347a29d692df672aaf59ee4926a476288476aBen Murdoch 36646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 36746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void saveWebArchive(String filename) { 36862389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 36946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) saveWebArchive(filename, false, null); 37046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 37146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 37246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 37346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void saveWebArchive(String basename, boolean autoname, ValueCallback<String> callback) { 37462389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 37546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mAwContents.saveWebArchive(basename, autoname, callback); 37646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 37746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 37846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 37946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void stopLoading() { 38062389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 3817cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba mAwContents.stopLoading(); 38246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 38346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 38446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 38546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void reload() { 38662389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 3877cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba mAwContents.reload(); 38846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 38946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 39046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 39146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean canGoBack() { 39262389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 3937cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.canGoBack(); 39446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 39546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 39646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 39746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void goBack() { 39862389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 3997cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba mAwContents.goBack(); 40046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 40146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 40246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 40346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean canGoForward() { 40462389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 4057cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.canGoForward(); 40646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 40746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 40846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 40946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void goForward() { 41062389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 4117cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba mAwContents.goForward(); 41246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 41346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 41446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 41546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean canGoBackOrForward(int steps) { 41662389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 4177cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.canGoBackOrForward(steps); 41846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 41946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 42046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 42146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void goBackOrForward(int steps) { 42262389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 4237cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba mAwContents.goBackOrForward(steps); 42446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 42546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 42646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 42746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean isPrivateBrowsingEnabled() { 4286d58f78e7fc0412a58b163559cb8e9c4af5c6fe1Jonathan Dixon // Not supported in this WebView implementation. 42946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return false; 43046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 43146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 43246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 43346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean pageUp(boolean top) { 43462389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 4357cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.pageUp(top); 43646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 43746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 43846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 43946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean pageDown(boolean bottom) { 44062389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 4417cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.pageDown(bottom); 44246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 44346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 44446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 44546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void clearView() { 44662389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 44746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) UnimplementedWebViewApi.invoke(); 44846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 44946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 45046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 45146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public Picture capturePicture() { 45262389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 4539c5a40623b62737244deb2d04a98830d7ffa8404Leandro Gracia Gil return mAwContents.capturePicture(); 45446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 45546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 45646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 45749a1a6f9f27b63687edc1d98f842627d4719a327Selim Gurun public void exportToPdf(OutputStream stream, int width, int height, 45854a6e3d0cc566df6cec6807c0c03f05664de0a55Selim Gurun ValueCallback<Boolean> resultCallback, CancellationSignal cancellationSignal) { 45962389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 46054a6e3d0cc566df6cec6807c0c03f05664de0a55Selim Gurun mAwContents.getPdfExporter().exportToPdf(stream, width, height, resultCallback, 46154a6e3d0cc566df6cec6807c0c03f05664de0a55Selim Gurun cancellationSignal); 46249a1a6f9f27b63687edc1d98f842627d4719a327Selim Gurun } 46349a1a6f9f27b63687edc1d98f842627d4719a327Selim Gurun 46449a1a6f9f27b63687edc1d98f842627d4719a327Selim Gurun @Override 46546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public float getScale() { 46662389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 4673520eb778d668dc76ca4541c69abd568b9d02691Mikhail Naganov return mAwContents.getScale(); 46846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 46946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 47046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 47146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void setInitialScale(int scaleInPercent) { 47262389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 4733520eb778d668dc76ca4541c69abd568b9d02691Mikhail Naganov mAwContents.getSettings().setInitialPageScale(scaleInPercent); 47446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 47546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 47646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 47746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void invokeZoomPicker() { 47862389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 4797cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba mAwContents.invokeZoomPicker(); 48046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 48146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 48246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 48346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public WebView.HitTestResult getHitTestResult() { 48462389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 485c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu AwContents.HitTestData data = mAwContents.getLastHitTestResult(); 486c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu mHitTestResult.setType(data.hitTestResultType); 487c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu mHitTestResult.setExtra(data.hitTestResultExtraData); 488c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu return mHitTestResult; 48946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 49046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 49146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 49246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void requestFocusNodeHref(Message hrefMsg) { 49362389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 494c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu mAwContents.requestFocusNodeHref(hrefMsg); 49546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 49646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 49746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 49846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void requestImageRef(Message msg) { 49962389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 500c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu mAwContents.requestImageRef(msg); 50146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 50246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 50346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 50446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public String getUrl() { 50562389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 5067cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba String url = mAwContents.getUrl(); 50746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) if (url == null || url.trim().isEmpty()) return null; 50846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return url; 50946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 51046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 51146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 51246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public String getOriginalUrl() { 51362389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 51446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) String url = mAwContents.getOriginalUrl(); 51546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) if (url == null || url.trim().isEmpty()) return null; 51646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return url; 51746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 51846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 51946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 52046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public String getTitle() { 52162389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 5227cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.getTitle(); 52346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 52446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 52546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 52646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public Bitmap getFavicon() { 52762389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 5289405536501747e2d7b4fc46a33e5f0a1e7fd47acJonathan Dixon return mAwContents.getFavicon(); 52946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 53046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 53146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 53246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public String getTouchIconUrl() { 5339405536501747e2d7b4fc46a33e5f0a1e7fd47acJonathan Dixon // Intentional no-op: hidden method on WebView. 53446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return null; 53546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 53646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 53746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 53846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public int getProgress() { 53962389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 54046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return mAwContents.getMostRecentProgress(); 54146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 54246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 54346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 54446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public int getContentHeight() { 54562389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 5466b5f3d1546ae2a9c712cde60c54ec027582bc4e6Martin Kosiba return mAwContents.getContentHeightCss(); 54746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 54846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 54946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 55046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public int getContentWidth() { 55162389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 5526b5f3d1546ae2a9c712cde60c54ec027582bc4e6Martin Kosiba return mAwContents.getContentWidthCss(); 55346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 55446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 55546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 55646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void pauseTimers() { 55762389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 558531e68a2b50a5e542eeede13907f29e463a99ebfBen Murdoch mAwContents.pauseTimers(); 55946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 56046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 56146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 56246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void resumeTimers() { 56362389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 564531e68a2b50a5e542eeede13907f29e463a99ebfBen Murdoch mAwContents.resumeTimers(); 56546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 56646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 56746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 56846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void onPause() { 56962389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 5701cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon mAwContents.onPause(); 57146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 57246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 57346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 57446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void onResume() { 57562389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 5761cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon mAwContents.onResume(); 57746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 57846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 57946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 58046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean isPaused() { 58162389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 5821cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon return mAwContents.isPaused(); 58346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 58446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 58546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 58646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void freeMemory() { 58762389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 58846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) UnimplementedWebViewApi.invoke(); 58946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 59046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 59146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 59246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void clearCache(boolean includeDiskFiles) { 59362389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 59446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mAwContents.clearCache(includeDiskFiles); 59546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 59646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 597bbef8de5696d48fc6458c926026fc524a62814e1Selim Gurun /** 598bbef8de5696d48fc6458c926026fc524a62814e1Selim Gurun * This is a poorly named method, but we keep it for historical reasons. 599bbef8de5696d48fc6458c926026fc524a62814e1Selim Gurun */ 60046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 60146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void clearFormData() { 60262389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 603bbef8de5696d48fc6458c926026fc524a62814e1Selim Gurun mAwContents.hideAutofillPopup(); 60446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 60546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 60646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 60746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void clearHistory() { 60862389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 6097cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba mAwContents.clearHistory(); 61046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 61146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 61246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 61346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void clearSslPreferences() { 61462389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 6157cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba mAwContents.clearSslPreferences(); 61646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 61746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 61846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 61946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public WebBackForwardList copyBackForwardList() { 62062389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 62108a5e00cdfb74f4ffd843d2d0a9b0b40b86b107aBo Liu return new WebBackForwardListChromium( 6227cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba mAwContents.getNavigationHistory()); 62346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 62446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 62546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 62646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void setFindListener(WebView.FindListener listener) { 62762389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 62846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mContentsClientAdapter.setFindListener(listener); 62946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 63046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 63146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 63246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void findNext(boolean forwards) { 63362389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 63446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mAwContents.findNext(forwards); 63546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 63646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 63746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 63846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public int findAll(String searchString) { 63962389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 640f37548d6d8e2a73c65d675a26706a38f52960800Jonathan Dixon mAwContents.findAllAsync(searchString); 641f37548d6d8e2a73c65d675a26706a38f52960800Jonathan Dixon return 0; 64246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 64346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 64446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 64546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void findAllAsync(String searchString) { 64662389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 64746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mAwContents.findAllAsync(searchString); 64846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 64946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 65046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 65146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean showFindDialog(String text, boolean showIme) { 65262389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 6536d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch if (mWebView.getParent() == null) { 6546d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch return false; 6556d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch } 6566d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch 6576d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch FindActionModeCallback findAction = new FindActionModeCallback(mWebView.getContext()); 6586d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch if (findAction == null) { 6596d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch return false; 6606d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch } 6616d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch 6626d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch mWebView.startActionMode(findAction); 6636d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch findAction.setWebView(mWebView); 6646d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch if (showIme) { 6656d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch findAction.showSoftInput(); 6666d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch } 6676d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch 6686d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch if (text != null) { 6696d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch findAction.setText(text); 6706d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch findAction.findAll(); 6716d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch } 6726d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch 6736d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch return true; 67446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 67546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 6766d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch @Override 677fde8dae44f74be3de69ce6dd07b0023279b485a0Ben Murdoch public void notifyFindDialogDismissed() { 67862389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 6796d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch clearMatches(); 680fde8dae44f74be3de69ce6dd07b0023279b485a0Ben Murdoch } 681fde8dae44f74be3de69ce6dd07b0023279b485a0Ben Murdoch 68246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 68346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void clearMatches() { 68462389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 68546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mAwContents.clearMatches(); 68646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 68746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 68846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 68946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void documentHasImages(Message response) { 69062389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 69146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mAwContents.documentHasImages(response); 69246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 69346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 69446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 69546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void setWebViewClient(WebViewClient client) { 69662389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 69746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mContentsClientAdapter.setWebViewClient(client); 69846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 69946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 70046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 70146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void setDownloadListener(DownloadListener listener) { 70262389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 7034320e428efc3bf69387f3b9d5a0589b2b8746409Bo Liu mContentsClientAdapter.setDownloadListener(listener); 70446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 70546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 70646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 70746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void setWebChromeClient(WebChromeClient client) { 70862389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 70946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mContentsClientAdapter.setWebChromeClient(client); 71046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 71146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 71246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 71346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void setPictureListener(WebView.PictureListener listener) { 71462389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 71546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mContentsClientAdapter.setPictureListener(listener); 7169c5a40623b62737244deb2d04a98830d7ffa8404Leandro Gracia Gil mAwContents.enableOnNewPicture(listener != null, 7176ef347a29d692df672aaf59ee4926a476288476aBen Murdoch mAppTargetSdkVersion >= Build.VERSION_CODES.JELLY_BEAN_MR2); 71846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 71946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 72046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 72146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void addJavascriptInterface(Object obj, String interfaceName) { 72262389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 723ea844f60b1b559788566fe6e004b1eeca53a8039Jonathan Dixon Class<? extends Annotation> requiredAnnotation = null; 7246ef347a29d692df672aaf59ee4926a476288476aBen Murdoch if (mAppTargetSdkVersion >= Build.VERSION_CODES.JELLY_BEAN_MR1) { 7257db34d3dcaac936566f912e1b0b21f3f103029ffJonathan Dixon requiredAnnotation = JavascriptInterface.class; 7267db34d3dcaac936566f912e1b0b21f3f103029ffJonathan Dixon } 7277cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba mAwContents.addPossiblyUnsafeJavascriptInterface(obj, interfaceName, requiredAnnotation); 72846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 72946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 73046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 73146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void removeJavascriptInterface(String interfaceName) { 73262389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 7337cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba mAwContents.removeJavascriptInterface(interfaceName); 73446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 73546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 73646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 73746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public WebSettings getSettings() { 73862389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 73946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) if (mWebSettings == null) { 740420c0da3a4e06e1ac5574091e7c9c286ef012369Mikhail Naganov mWebSettings = new ContentSettingsAdapter(mAwContents.getSettings()); 74146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 74246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return mWebSettings; 74346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 74446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 74546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 74646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void setMapTrackballToArrowKeys(boolean setMap) { 74762389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 74846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // This is a deprecated API: intentional no-op. 74946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 75046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 75146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 75246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void flingScroll(int vx, int vy) { 75362389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 7547cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba mAwContents.flingScroll(vx, vy); 75546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 75646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 75746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 75846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public View getZoomControls() { 75962389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 760e78d6e40e4e78671e6621ba8cf49835568704899Jonathan Dixon // This was deprecated in 2009 and hidden in JB MR1, so just provide the minimum needed 761e78d6e40e4e78671e6621ba8cf49835568704899Jonathan Dixon // to stop very out-dated applications from crashing. 762e78d6e40e4e78671e6621ba8cf49835568704899Jonathan Dixon Log.w(TAG, "WebView doesn't support getZoomControls"); 763420c0da3a4e06e1ac5574091e7c9c286ef012369Mikhail Naganov return mAwContents.getSettings().supportZoom() ? new View(mWebView.getContext()) : null; 76446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 76546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 76646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 76746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean canZoomIn() { 76862389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 7697cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.canZoomIn(); 77046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 77146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 77246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 77346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean canZoomOut() { 77462389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 7757cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.canZoomOut(); 77646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 77746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 77846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 77946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean zoomIn() { 78062389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 7817cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.zoomIn(); 78246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 78346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 78446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 78546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean zoomOut() { 78662389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 7877cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.zoomOut(); 78846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 78946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 790d2dcef4d9edfb7af7abff85b0867c3d6a363feb7Jonathan Dixon @Override 79146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void dumpViewHierarchyWithProperties(BufferedWriter out, int level) { 79262389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 79346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) UnimplementedWebViewApi.invoke(); 79446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 79546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 796d2dcef4d9edfb7af7abff85b0867c3d6a363feb7Jonathan Dixon @Override 79746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public View findHierarchyView(String className, int hashCode) { 79862389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 79946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) UnimplementedWebViewApi.invoke(); 80046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return null; 80146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 80246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 80346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // WebViewProvider glue methods --------------------------------------------------------------- 80446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 80546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 80657b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen // This needs to be kept thread safe! 80746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public WebViewProvider.ViewDelegate getViewDelegate() { 80846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return this; 80946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 81046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 81146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 81246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public WebViewProvider.ScrollDelegate getScrollDelegate() { 81362389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 81446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return this; 81546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 81646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 81746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 81846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // WebViewProvider.ViewDelegate implementation ------------------------------------------------ 81946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 820a7fba41c5661cb61b41c8a4ff2d69e5153666f7fBen Murdoch // TODO: remove from WebViewProvider and use default implementation from 821a7fba41c5661cb61b41c8a4ff2d69e5153666f7fBen Murdoch // ViewGroup. 822a7fba41c5661cb61b41c8a4ff2d69e5153666f7fBen Murdoch // @Override 82346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean shouldDelayChildPressedState() { 82462389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 825a7fba41c5661cb61b41c8a4ff2d69e5153666f7fBen Murdoch return true; 82646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 82746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 8285c990caf9c0237064dab94059f6c46fc2d51cd97Ben Murdoch// @Override 8295c990caf9c0237064dab94059f6c46fc2d51cd97Ben Murdoch public AccessibilityNodeProvider getAccessibilityNodeProvider() { 83062389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 8315c990caf9c0237064dab94059f6c46fc2d51cd97Ben Murdoch return mAwContents.getAccessibilityNodeProvider(); 8325c990caf9c0237064dab94059f6c46fc2d51cd97Ben Murdoch } 8335c990caf9c0237064dab94059f6c46fc2d51cd97Ben Murdoch 83446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 83546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) { 83662389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 8377cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba mAwContents.onInitializeAccessibilityNodeInfo(info); 83846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 83946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 84046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 84146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void onInitializeAccessibilityEvent(AccessibilityEvent event) { 84262389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 8437cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba mAwContents.onInitializeAccessibilityEvent(event); 84446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 84546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 84646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 84746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean performAccessibilityAction(int action, Bundle arguments) { 84862389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 849b7b706b2ed5cbb77dd690f5405b626a429989714Ben Murdoch if (mAwContents.supportsAccessibilityAction(action)) { 850b7b706b2ed5cbb77dd690f5405b626a429989714Ben Murdoch return mAwContents.performAccessibilityAction(action, arguments); 851b7b706b2ed5cbb77dd690f5405b626a429989714Ben Murdoch } 852b7b706b2ed5cbb77dd690f5405b626a429989714Ben Murdoch return mWebViewPrivate.super_performAccessibilityAction(action, arguments); 85346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 85446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 85546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 85646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void setOverScrollMode(int mode) { 85762389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 8582841152693d0410f8e8c309aae514329f008a612Martin Kosiba // This gets called from the android.view.View c'tor that WebView inherits from. This 8592841152693d0410f8e8c309aae514329f008a612Martin Kosiba // causes the method to be called when mAwContents == null. 8602841152693d0410f8e8c309aae514329f008a612Martin Kosiba // It's safe to ignore these calls however since AwContents will read the current value of 8612841152693d0410f8e8c309aae514329f008a612Martin Kosiba // this setting when it's created. 862ab5398debe64d34306b0f709a93d840078ae181dMartin Kosiba if (mAwContents != null) { 863ab5398debe64d34306b0f709a93d840078ae181dMartin Kosiba mAwContents.setOverScrollMode(mode); 864ab5398debe64d34306b0f709a93d840078ae181dMartin Kosiba } 86546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 86646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 86746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 86846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void setScrollBarStyle(int style) { 86962389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 870bd819ca872a1711e4607ef11cd8b0b2156241897Martin Kosiba mAwContents.setScrollBarStyle(style); 87146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 87246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 87346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 87446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void onDrawVerticalScrollBar(Canvas canvas, Drawable scrollBar, 87546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) int l, int t, int r, int b) { 87662389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 877bd819ca872a1711e4607ef11cd8b0b2156241897Martin Kosiba // WebViewClassic was overriding this method to handle rubberband over-scroll. Since 878bd819ca872a1711e4607ef11cd8b0b2156241897Martin Kosiba // WebViewChromium doesn't support that the vanilla implementation of this method can be 879bd819ca872a1711e4607ef11cd8b0b2156241897Martin Kosiba // used. 880bd819ca872a1711e4607ef11cd8b0b2156241897Martin Kosiba mWebViewPrivate.super_onDrawVerticalScrollBar(canvas, scrollBar, l, t, r, b); 88146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 88246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 88346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 88446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void onOverScrolled(int scrollX, int scrollY, boolean clampedX, boolean clampedY) { 88562389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 8863951fbadf5157dd3fe73decc879f9b763e780b09Martin Kosiba mAwContents.onContainerViewOverScrolled(scrollX, scrollY, clampedX, clampedY); 88746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 88846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 88946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 89046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void onWindowVisibilityChanged(int visibility) { 89162389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 8921cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon mAwContents.onWindowVisibilityChanged(visibility); 89346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 89446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 89546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 89646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void onDraw(Canvas canvas) { 89762389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 8987ab33360e331e04f515d532064670e210d174a7aTao Bai mAwContents.onDraw(canvas); 89946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 90046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 90146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 90246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void setLayoutParams(ViewGroup.LayoutParams layoutParams) { 90362389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 90446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // TODO: This is the minimum implementation for HTMLViewer 90546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // bringup. Likely will need to go up to ContentViewCore for 90646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // a complete implementation. 90746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mWebViewPrivate.super_setLayoutParams(layoutParams); 90846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 90946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 91046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 91146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean performLongClick() { 91262389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 913decc147cebc8f73d355c024d92c60d3f727cab31Bo Liu return mWebViewPrivate.super_performLongClick(); 91446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 91546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 91646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 91746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void onConfigurationChanged(Configuration newConfig) { 91862389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 9191cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon mAwContents.onConfigurationChanged(newConfig); 92046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 92146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 92246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 92346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public InputConnection onCreateInputConnection(EditorInfo outAttrs) { 92462389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 9257cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.onCreateInputConnection(outAttrs); 92646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 92746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 92846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 92946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent event) { 93062389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 93146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) UnimplementedWebViewApi.invoke(); 93246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return false; 93346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 93446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 93546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 93646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean onKeyDown(int keyCode, KeyEvent event) { 93762389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 93846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) UnimplementedWebViewApi.invoke(); 93946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return false; 94046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 94146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 94246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 94346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean onKeyUp(int keyCode, KeyEvent event) { 94462389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 9457cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.onKeyUp(keyCode, event); 94646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 94746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 94846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 94946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void onAttachedToWindow() { 95062389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 9511cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon mAwContents.onAttachedToWindow(); 95246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 95346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 95446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 95546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void onDetachedFromWindow() { 95662389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 9571cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon mAwContents.onDetachedFromWindow(); 958a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon if (mGLfunctor != null) { 959a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon mGLfunctor.detach(); 960a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon } 96146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 96246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 96346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 96446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void onVisibilityChanged(View changedView, int visibility) { 96562389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 966c346a83062dfbf50ac2275813ccb2e36f9e778e9Martin Kosiba // The AwContents will find out the container view visibility before the first draw so we 967c346a83062dfbf50ac2275813ccb2e36f9e778e9Martin Kosiba // can safely ignore onVisibilityChanged callbacks that happen before init(). 968c346a83062dfbf50ac2275813ccb2e36f9e778e9Martin Kosiba if (mAwContents != null) { 969c346a83062dfbf50ac2275813ccb2e36f9e778e9Martin Kosiba mAwContents.onVisibilityChanged(changedView, visibility); 970c346a83062dfbf50ac2275813ccb2e36f9e778e9Martin Kosiba } 97146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 97246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 97346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 97446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void onWindowFocusChanged(boolean hasWindowFocus) { 97562389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 9761cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon mAwContents.onWindowFocusChanged(hasWindowFocus); 97746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 97846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 97946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 98046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) { 98162389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 9821cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon mAwContents.onFocusChanged(focused, direction, previouslyFocusedRect); 98346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 98446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 98546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 98646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean setFrame(int left, int top, int right, int bottom) { 9871cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon // TODO(joth): This is the minimum implementation for initial 9881cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon // bringup. Likely will need to go up to AwContents for a complete 9891cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon // implementation, e.g. setting the compositor visible region (to 9901cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon // avoid painting tiles that are offscreen due to the view's position). 99162389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 99246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return mWebViewPrivate.super_setFrame(left, top, right, bottom); 99346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 99446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 99546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 99646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void onSizeChanged(int w, int h, int ow, int oh) { 99762389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 9981cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon mAwContents.onSizeChanged(w, h, ow, oh); 99946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 100046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 100146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 100246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void onScrollChanged(int l, int t, int oldl, int oldt) { 100362389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 100446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 100546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 100646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 100746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean dispatchKeyEvent(KeyEvent event) { 100862389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 10097cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.dispatchKeyEvent(event); 101046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 101146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 101246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 101346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean onTouchEvent(MotionEvent ev) { 101462389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 1015c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu return mAwContents.onTouchEvent(ev); 101646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 101746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 101846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 101946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean onHoverEvent(MotionEvent event) { 102062389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 1021c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu return mAwContents.onHoverEvent(event); 102246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 102346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 102446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 102546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean onGenericMotionEvent(MotionEvent event) { 102662389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 1027c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu return mAwContents.onGenericMotionEvent(event); 102846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 102946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 103046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 103146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean onTrackballEvent(MotionEvent ev) { 103262389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 103346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // Trackball event not handled, which eventually gets converted to DPAD keyevents 103446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return false; 103546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 103646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 103746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 103846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean requestFocus(int direction, Rect previouslyFocusedRect) { 103962389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 10404cee3bf50c125a52a49323aa999f4b619fa18c10Ben Murdoch mAwContents.requestFocus(); 104146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return mWebViewPrivate.super_requestFocus(direction, previouslyFocusedRect); 104246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 104346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 104446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 104546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 104662389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 1047d7bf6ab0cd8cc4005b112e4358eb797bb178a85fMarcin Kosiba mAwContents.onMeasure(widthMeasureSpec, heightMeasureSpec); 104846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 104946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 105046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 105146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean requestChildRectangleOnScreen(View child, Rect rect, boolean immediate) { 105262389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 105346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) UnimplementedWebViewApi.invoke(); 105446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return false; 105546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 105646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 105746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 105857b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen public void setBackgroundColor(final int color) { 105957b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen if (ThreadUtils.runningOnUiThread()) { 106057b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen mAwContents.setBackgroundColor(color); 106157b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen } else { 106257b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen // Disallowed in WebView API for apps targetting a new SDK 106357b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen assert mAppTargetSdkVersion < Build.VERSION_CODES.JELLY_BEAN_MR2; 106457b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen ThreadUtils.postOnUiThread(new Runnable() { 106557b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen @Override 106657b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen public void run() { 106757b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen mAwContents.setBackgroundColor(color); 106857b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen } 106957b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen }); 107057b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen } 107146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 107246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 107346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 107446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void setLayerType(int layerType, Paint paint) { 107562389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 107646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) UnimplementedWebViewApi.invoke(); 107746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 107846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 10790b528e4924a7c14687181185bc66173ad18f00eaLeandro Gracia Gil @Override 108046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void preDispatchDraw(Canvas canvas) { 108162389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 10820b528e4924a7c14687181185bc66173ad18f00eaLeandro Gracia Gil // TODO(leandrogracia): remove this method from WebViewProvider if we think 10830b528e4924a7c14687181185bc66173ad18f00eaLeandro Gracia Gil // we won't need it again. 108446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 108546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 108646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // WebViewProvider.ScrollDelegate implementation ---------------------------------------------- 108746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 108846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 108946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public int computeHorizontalScrollRange() { 109062389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 10917cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.computeHorizontalScrollRange(); 109246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 109346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 109446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 109546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public int computeHorizontalScrollOffset() { 109662389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 10977cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.computeHorizontalScrollOffset(); 109846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 109946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 110046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 110146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public int computeVerticalScrollRange() { 110262389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 11037cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.computeVerticalScrollRange(); 110446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 110546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 110646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 110746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public int computeVerticalScrollOffset() { 110862389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 11097cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.computeVerticalScrollOffset(); 111046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 111146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 111246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 111346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public int computeVerticalScrollExtent() { 111462389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 11157cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.computeVerticalScrollExtent(); 111646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 111746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 111846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 111946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void computeScroll() { 112062389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 11212a120ba09921dbb1e8354ecbc4a6e063ec891101Martin Kosiba mAwContents.computeScroll(); 112246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 112346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 11244702a6de6031477029de5e6f5777c8b3e7846d35Marcin Kosiba // AwContents.InternalAccessDelegate implementation -------------------------------------- 11254702a6de6031477029de5e6f5777c8b3e7846d35Marcin Kosiba private class InternalAccessAdapter implements AwContents.InternalAccessDelegate { 112646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 112746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean drawChild(Canvas arg0, View arg1, long arg2) { 112846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) UnimplementedWebViewApi.invoke(); 112946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return false; 113046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 113146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 113246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 113346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean super_onKeyUp(int arg0, KeyEvent arg1) { 113446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) UnimplementedWebViewApi.invoke(); 113546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return false; 113646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 113746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 113846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 113946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean super_dispatchKeyEventPreIme(KeyEvent arg0) { 114046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) UnimplementedWebViewApi.invoke(); 114146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return false; 114246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 114346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 114446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 114546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean super_dispatchKeyEvent(KeyEvent event) { 114646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return mWebViewPrivate.super_dispatchKeyEvent(event); 114746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 114846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 114946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 115046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean super_onGenericMotionEvent(MotionEvent arg0) { 115146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) UnimplementedWebViewApi.invoke(); 115246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return false; 115346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 115446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 115546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 115646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void super_onConfigurationChanged(Configuration arg0) { 115746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) UnimplementedWebViewApi.invoke(); 115846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 115946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 1160bd819ca872a1711e4607ef11cd8b0b2156241897Martin Kosiba @Override 11610088640069ac3ed389f4d78582966248b0869ce9Martin Kosiba public int super_getScrollBarStyle() { 11620088640069ac3ed389f4d78582966248b0869ce9Martin Kosiba return mWebViewPrivate.super_getScrollBarStyle(); 11630088640069ac3ed389f4d78582966248b0869ce9Martin Kosiba } 11640088640069ac3ed389f4d78582966248b0869ce9Martin Kosiba 116546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 116646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean awakenScrollBars() { 116746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mWebViewPrivate.awakenScrollBars(0); 116846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // TODO: modify the WebView.PrivateAccess to provide a return value. 116946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return true; 117046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 117146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 117246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 117346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean super_awakenScrollBars(int arg0, boolean arg1) { 117446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // TODO: need method on WebView.PrivateAccess? 117546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) UnimplementedWebViewApi.invoke(); 117646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return false; 117746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 11784702a6de6031477029de5e6f5777c8b3e7846d35Marcin Kosiba 1179d7bf6ab0cd8cc4005b112e4358eb797bb178a85fMarcin Kosiba @Override 11802a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba public void onScrollChanged(int l, int t, int oldl, int oldt) { 11812a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba mWebViewPrivate.setScrollXRaw(l); 11822a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba mWebViewPrivate.setScrollYRaw(t); 11832a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba mWebViewPrivate.onScrollChanged(l, t, oldl, oldt); 11842a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba } 11852a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba 11863951fbadf5157dd3fe73decc879f9b763e780b09Martin Kosiba @Override 11872a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba public void overScrollBy(int deltaX, int deltaY, 11882a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba int scrollX, int scrollY, 11892a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba int scrollRangeX, int scrollRangeY, 11902a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba int maxOverScrollX, int maxOverScrollY, 11912a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba boolean isTouchEvent) { 11922a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba mWebViewPrivate.overScrollBy(deltaX, deltaY, scrollX, scrollY, 11932a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba scrollRangeX, scrollRangeY, maxOverScrollX, maxOverScrollY, isTouchEvent); 11942a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba } 11952a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba 11963951fbadf5157dd3fe73decc879f9b763e780b09Martin Kosiba @Override 11972a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba public void super_scrollTo(int scrollX, int scrollY) { 11982a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba mWebViewPrivate.super_scrollTo(scrollX, scrollY); 11992a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba } 12002a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba 12012a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba @Override 12024702a6de6031477029de5e6f5777c8b3e7846d35Marcin Kosiba public void setMeasuredDimension(int measuredWidth, int measuredHeight) { 12034702a6de6031477029de5e6f5777c8b3e7846d35Marcin Kosiba mWebViewPrivate.setMeasuredDimension(measuredWidth, measuredHeight); 12044702a6de6031477029de5e6f5777c8b3e7846d35Marcin Kosiba } 120551f7cf16cd02f14050bb723175a2a57570e8486dTao Bai 12067ab33360e331e04f515d532064670e210d174a7aTao Bai @Override 120751f7cf16cd02f14050bb723175a2a57570e8486dTao Bai public boolean requestDrawGL(Canvas canvas) { 12087ab33360e331e04f515d532064670e210d174a7aTao Bai if (mGLfunctor == null) { 12097ab33360e331e04f515d532064670e210d174a7aTao Bai mGLfunctor = new DrawGLFunctor(mAwContents.getAwDrawGLViewContext()); 12107ab33360e331e04f515d532064670e210d174a7aTao Bai } 121151f7cf16cd02f14050bb723175a2a57570e8486dTao Bai return mGLfunctor.requestDrawGL((HardwareCanvas)canvas, mWebView.getViewRootImpl()); 121251f7cf16cd02f14050bb723175a2a57570e8486dTao Bai } 121346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 121446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)} 1215