WebViewChromium.java revision d21b8fe00b21742cc36929cb02eef6ad25946512
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; 2946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.os.Message; 30412d84be859ce0eb91baf2f9afe5e6326a15d76aSelim Gurunimport android.print.PrintDocumentAdapter; 3119bc90be698e6d86ec6c77ea8b43bb6778bcc89dJonathan Dixonimport android.text.TextUtils; 32efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdochimport android.util.Base64; 33e78d6e40e4e78671e6621ba8cf49835568704899Jonathan Dixonimport android.util.Log; 34a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixonimport android.view.HardwareCanvas; 3546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.KeyEvent; 3646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.MotionEvent; 3746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.View; 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; 58ffabf2e121746d06b9930b1ae8fea243c4f5cb9dMikhail Naganovimport org.chromium.android_webview.AwLayoutSizer; 59a8d0ef2693c3bcd4a091cc7fa49b69b54e3472c4Selim Gurunimport org.chromium.android_webview.AwPdfExportAttributes; 60412d84be859ce0eb91baf2f9afe5e6326a15d76aSelim Gurunimport org.chromium.android_webview.AwPrintDocumentAdapter; 61a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsenimport org.chromium.base.ThreadUtils; 6246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import org.chromium.content.browser.LoadUrlParams; 6346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import org.chromium.net.NetworkChangeNotifier; 6446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 6546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import java.io.BufferedWriter; 6646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import java.io.File; 67ea844f60b1b559788566fe6e004b1eeca53a8039Jonathan Dixonimport java.lang.annotation.Annotation; 682c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsenimport java.util.concurrent.Callable; 694fb262f34ba888eaacc24a83d94a56b8d7bcef2bKristian Monsenimport java.util.concurrent.FutureTask; 704fb262f34ba888eaacc24a83d94a56b8d7bcef2bKristian Monsenimport java.util.concurrent.TimeUnit; 71b8281877c710018a3bc8066be17b1e11822be015Selim Gurunimport java.util.HashMap; 7246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import java.util.Map; 7346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 7446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)/** 7546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * This class is the delegate to which WebViewProxy forwards all API calls. 7646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * 771cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon * Most of the actual functionality is implemented by AwContents (or ContentViewCore within 781cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon * it). This class also contains WebView-specific APIs that require the creation of other 791cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon * adapters (otherwise org.chromium.content would depend on the webview.chromium package) 801cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon * and a small set of no-op deprecated APIs. 8146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) */ 8246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)class WebViewChromium implements WebViewProvider, 8346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) WebViewProvider.ScrollDelegate, WebViewProvider.ViewDelegate { 84e78d6e40e4e78671e6621ba8cf49835568704899Jonathan Dixon 85e78d6e40e4e78671e6621ba8cf49835568704899Jonathan Dixon private static final String TAG = WebViewChromium.class.getSimpleName(); 86e78d6e40e4e78671e6621ba8cf49835568704899Jonathan Dixon 8746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // The WebView that this WebViewChromium is the provider for. 8846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) WebView mWebView; 8946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // Lets us access protected View-derived methods on the WebView instance we're backing. 9046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) WebView.PrivateAccess mWebViewPrivate; 9146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // The client adapter class. 9246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) private WebViewContentsClientAdapter mContentsClientAdapter; 9346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 9446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // Variables for functionality provided by this adapter --------------------------------------- 9546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // WebSettings adapter, lazily initialized in the getter 9646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) private WebSettings mWebSettings; 973949435b480cb71106f65b237025da359cf8a8caBen Murdoch // The WebView wrapper for ContentViewCore and required browser compontents. 9846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) private AwContents mAwContents; 99a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon // Non-null if this webview is using the GL accelerated draw path. 100a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon private DrawGLFunctor mGLfunctor; 10146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 102aa8b39f3e3f208586f3750d7278f1239a09ebd32Kristian Monsen private AwBrowserContext mBrowserContext; 103aa8b39f3e3f208586f3750d7278f1239a09ebd32Kristian Monsen 104c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu private final WebView.HitTestResult mHitTestResult; 105c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu 1066ef347a29d692df672aaf59ee4926a476288476aBen Murdoch private final int mAppTargetSdkVersion; 1076ef347a29d692df672aaf59ee4926a476288476aBen Murdoch 1084fb262f34ba888eaacc24a83d94a56b8d7bcef2bKristian Monsen // This does not touch any global / non-threadsafe state, but note that 1094fb262f34ba888eaacc24a83d94a56b8d7bcef2bKristian Monsen // init is ofter called right after and is NOT threadsafe. 110aa8b39f3e3f208586f3750d7278f1239a09ebd32Kristian Monsen public WebViewChromium(WebView webView, WebView.PrivateAccess webViewPrivate, 111aa8b39f3e3f208586f3750d7278f1239a09ebd32Kristian Monsen AwBrowserContext browserContext) { 11246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mWebView = webView; 11346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mWebViewPrivate = webViewPrivate; 114c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu mHitTestResult = new WebView.HitTestResult(); 115aa8b39f3e3f208586f3750d7278f1239a09ebd32Kristian Monsen mBrowserContext = browserContext; 1166ef347a29d692df672aaf59ee4926a476288476aBen Murdoch mAppTargetSdkVersion = mWebView.getContext().getApplicationInfo().targetSdkVersion; 11746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 11846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 1191ee9dd0420198429115c3fe8cf0b0502fab9cf62Ben Murdoch static void completeWindowCreation(WebView parent, WebView child) { 1201ee9dd0420198429115c3fe8cf0b0502fab9cf62Ben Murdoch AwContents parentContents = ((WebViewChromium) parent.getWebViewProvider()).mAwContents; 121bbfef40e5fc625f4821f012fae7f16468b7308cfJonathan Dixon AwContents childContents = 122bbfef40e5fc625f4821f012fae7f16468b7308cfJonathan Dixon child == null ? null : ((WebViewChromium) child.getWebViewProvider()).mAwContents; 1231ee9dd0420198429115c3fe8cf0b0502fab9cf62Ben Murdoch parentContents.supplyContentsForPopup(childContents); 12446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 12546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 1262c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen private static <T> T runBlockingFuture(FutureTask<T> task) { 1274fb262f34ba888eaacc24a83d94a56b8d7bcef2bKristian Monsen if (ThreadUtils.runningOnUiThread()) { 1284fb262f34ba888eaacc24a83d94a56b8d7bcef2bKristian Monsen throw new IllegalStateException("This method should only be called off the UI thread"); 1294fb262f34ba888eaacc24a83d94a56b8d7bcef2bKristian Monsen } 1304fb262f34ba888eaacc24a83d94a56b8d7bcef2bKristian Monsen ThreadUtils.postOnUiThread(task); 1314fb262f34ba888eaacc24a83d94a56b8d7bcef2bKristian Monsen try { 1322c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return task.get(4, TimeUnit.SECONDS); 1334fb262f34ba888eaacc24a83d94a56b8d7bcef2bKristian Monsen } catch (Exception e) { // Timeout is one of the possible exceptions here 1342c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen throw new RuntimeException("Probable deadlock detected due to WebView API being called " 1352c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen + "on incorrect thread while the UI thread is blocked.", e); 1364fb262f34ba888eaacc24a83d94a56b8d7bcef2bKristian Monsen } 1374fb262f34ba888eaacc24a83d94a56b8d7bcef2bKristian Monsen } 1384fb262f34ba888eaacc24a83d94a56b8d7bcef2bKristian Monsen 1392c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen // We have a 4 second timeout to try to detect deadlocks to detect and aid in debuggin 1402c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen // deadlocks. 1412c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen // Do not call this method while on the UI thread! 1422c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen private void runVoidTaskOnUiThreadBlocking(Runnable r) { 1432c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen FutureTask<Void> task = new FutureTask<Void>(r, null); 1442c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen runBlockingFuture(task); 1452c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 1462c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen 1472c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen private static <T> T runOnUiThreadBlocking(Callable<T> c) { 1482c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return runBlockingFuture(new FutureTask<T>(c)); 1492c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 1502c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen 15146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // WebViewProvider methods -------------------------------------------------------------------- 15246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 15346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 1544fb262f34ba888eaacc24a83d94a56b8d7bcef2bKristian Monsen public void init(final Map<String, Object> javaScriptInterfaces, 1554fb262f34ba888eaacc24a83d94a56b8d7bcef2bKristian Monsen final boolean privateBrowsing) { 1564fb262f34ba888eaacc24a83d94a56b8d7bcef2bKristian Monsen if (!ThreadUtils.runningOnUiThread()) { 1574fb262f34ba888eaacc24a83d94a56b8d7bcef2bKristian Monsen runVoidTaskOnUiThreadBlocking(new Runnable() { 1584fb262f34ba888eaacc24a83d94a56b8d7bcef2bKristian Monsen @Override 1594fb262f34ba888eaacc24a83d94a56b8d7bcef2bKristian Monsen public void run() { 1604fb262f34ba888eaacc24a83d94a56b8d7bcef2bKristian Monsen init(javaScriptInterfaces, privateBrowsing); 1614fb262f34ba888eaacc24a83d94a56b8d7bcef2bKristian Monsen } 1624fb262f34ba888eaacc24a83d94a56b8d7bcef2bKristian Monsen }); 1634fb262f34ba888eaacc24a83d94a56b8d7bcef2bKristian Monsen return; 1644fb262f34ba888eaacc24a83d94a56b8d7bcef2bKristian Monsen } 1654dcabaef9151384b571327b62234409b31caef38Jonathan Dixon // BUG=6790250 |javaScriptInterfaces| was only ever used by the obsolete DumpRenderTree 1664dcabaef9151384b571327b62234409b31caef38Jonathan Dixon // so is ignored. TODO: remove it from WebViewProvider. 16746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) final boolean isAccessFromFileURLsGrantedByDefault = 168ffabf2e121746d06b9930b1ae8fea243c4f5cb9dMikhail Naganov mAppTargetSdkVersion < Build.VERSION_CODES.JELLY_BEAN; 169ffabf2e121746d06b9930b1ae8fea243c4f5cb9dMikhail Naganov final boolean areLegacyQuirksEnabled = 170ffabf2e121746d06b9930b1ae8fea243c4f5cb9dMikhail Naganov mAppTargetSdkVersion < Build.VERSION_CODES.KITKAT; 17146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mContentsClientAdapter = new WebViewContentsClientAdapter(mWebView); 172aa8b39f3e3f208586f3750d7278f1239a09ebd32Kristian Monsen mAwContents = new AwContents(mBrowserContext, mWebView, new InternalAccessAdapter(), 173ffabf2e121746d06b9930b1ae8fea243c4f5cb9dMikhail Naganov mContentsClientAdapter, isAccessFromFileURLsGrantedByDefault, 174ffabf2e121746d06b9930b1ae8fea243c4f5cb9dMikhail Naganov new AwLayoutSizer(), areLegacyQuirksEnabled); 1757720b10b55b5db5564a72c2e4c2c23631acbff0aKristian Monsen mWebSettings = new ContentSettingsAdapter(mAwContents.getSettings()); 1767720b10b55b5db5564a72c2e4c2c23631acbff0aKristian Monsen 1774dcabaef9151384b571327b62234409b31caef38Jonathan Dixon if (privateBrowsing) { 1784dcabaef9151384b571327b62234409b31caef38Jonathan Dixon final String msg = "Private browsing is not supported in WebView."; 1799cd49cbc245e07e8e8c360fd22821a2918f99eaeChet Haase if (mAppTargetSdkVersion >= Build.VERSION_CODES.KITKAT) { 1804dcabaef9151384b571327b62234409b31caef38Jonathan Dixon throw new IllegalArgumentException(msg); 1814dcabaef9151384b571327b62234409b31caef38Jonathan Dixon } else { 1824dcabaef9151384b571327b62234409b31caef38Jonathan Dixon Log.w(TAG, msg); 1834dcabaef9151384b571327b62234409b31caef38Jonathan Dixon // Intentionally irreversibly disable the webview instance, so that private 1844dcabaef9151384b571327b62234409b31caef38Jonathan Dixon // user data cannot leak through misuse of a non-privateBrowing WebView instance. 1854dcabaef9151384b571327b62234409b31caef38Jonathan Dixon // Can't just null out mAwContents as we never null-check it before use. 1864dcabaef9151384b571327b62234409b31caef38Jonathan Dixon mAwContents.destroy(); 18733e1eeae98299666b8c2d1e879f92d1c83fe33fbBen Murdoch TextView warningLabel = new TextView(mWebView.getContext()); 18833e1eeae98299666b8c2d1e879f92d1c83fe33fbBen Murdoch warningLabel.setText(mWebView.getContext().getString( 18933e1eeae98299666b8c2d1e879f92d1c83fe33fbBen Murdoch com.android.internal.R.string.webviewchromium_private_browsing_warning)); 19033e1eeae98299666b8c2d1e879f92d1c83fe33fbBen Murdoch mWebView.addView(warningLabel); 1914dcabaef9151384b571327b62234409b31caef38Jonathan Dixon } 1924dcabaef9151384b571327b62234409b31caef38Jonathan Dixon } 1934dcabaef9151384b571327b62234409b31caef38Jonathan Dixon 19446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 19546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 19657b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen private RuntimeException createThreadException() { 1971a692d93c0172dc09a316bbf9a54896f1d40234fKristian Monsen return new IllegalStateException( 1981a692d93c0172dc09a316bbf9a54896f1d40234fKristian Monsen "Calling View methods on another thread than the UI thread."); 19957b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen } 20057b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen 20162389e2d66a99e936652092333782947e363241dKristian Monsen // Intentionally not static, as no need to check thread on static methods 20262389e2d66a99e936652092333782947e363241dKristian Monsen private void checkThread() { 20362389e2d66a99e936652092333782947e363241dKristian Monsen if (!ThreadUtils.runningOnUiThread()) { 20457b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen final RuntimeException threadViolation = createThreadException(); 20557b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen ThreadUtils.postOnUiThread(new Runnable() { 20657b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen @Override 20757b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen public void run() { 20857b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen throw threadViolation; 20957b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen } 21057b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen }); 211ab73853ea633a4ada353f5a2321c6bf0e6c108e5Kristian Monsen throw createThreadException(); 21262389e2d66a99e936652092333782947e363241dKristian Monsen } 21362389e2d66a99e936652092333782947e363241dKristian Monsen } 21462389e2d66a99e936652092333782947e363241dKristian Monsen 21546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 21681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void setHorizontalScrollbarOverlay(final boolean overlay) { 21781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen if (!ThreadUtils.runningOnUiThread()) { 21881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen ThreadUtils.postOnUiThread(new Runnable() { 21981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 22081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 22181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen setHorizontalScrollbarOverlay(overlay); 22281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 22381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 22481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 22581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 226bd819ca872a1711e4607ef11cd8b0b2156241897Martin Kosiba mAwContents.setHorizontalScrollbarOverlay(overlay); 22746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 22846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 22946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 23081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void setVerticalScrollbarOverlay(final boolean overlay) { 23181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen if (!ThreadUtils.runningOnUiThread()) { 23281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen ThreadUtils.postOnUiThread(new Runnable() { 23381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 23481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 23581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen setVerticalScrollbarOverlay(overlay); 23681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 23781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 23881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 23981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 240bd819ca872a1711e4607ef11cd8b0b2156241897Martin Kosiba mAwContents.setVerticalScrollbarOverlay(overlay); 24146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 24246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 24346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 24446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean overlayHorizontalScrollbar() { 2452c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen if (!ThreadUtils.runningOnUiThread()) { 2462c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen boolean ret = runOnUiThreadBlocking(new Callable<Boolean>() { 2472c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 2482c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public Boolean call() { 2492c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return overlayHorizontalScrollbar(); 2502c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 2512c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 2522c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 2532c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 254bd819ca872a1711e4607ef11cd8b0b2156241897Martin Kosiba return mAwContents.overlayHorizontalScrollbar(); 25546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 25646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 25746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 25846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean overlayVerticalScrollbar() { 2592c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen if (!ThreadUtils.runningOnUiThread()) { 2602c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen boolean ret = runOnUiThreadBlocking(new Callable<Boolean>() { 2612c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 2622c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public Boolean call() { 2632c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return overlayVerticalScrollbar(); 2642c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 2652c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 2662c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 2672c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 268bd819ca872a1711e4607ef11cd8b0b2156241897Martin Kosiba return mAwContents.overlayVerticalScrollbar(); 26946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 27046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 27146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 27246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public int getVisibleTitleHeight() { 27346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // This is deprecated in WebView and should always return 0. 27446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return 0; 27546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 27646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 27746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 27846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public SslCertificate getCertificate() { 2792c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen if (!ThreadUtils.runningOnUiThread()) { 2802c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen SslCertificate ret = runOnUiThreadBlocking(new Callable<SslCertificate>() { 2812c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 2822c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public SslCertificate call() { 2832c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return getCertificate(); 2842c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 2852c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 2862c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 2872c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 28846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return mAwContents.getCertificate(); 28946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 29046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 29146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 29246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void setCertificate(SslCertificate certificate) { 29381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen // intentional no-op 29446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 29546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 29646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 29746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void savePassword(String host, String username, String password) { 298adc6c4d74c77a617100bdfeb174ab0c314b24ea8Selim Gurun // This is a deprecated API: intentional no-op. 29946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 30046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 30146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 30281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void setHttpAuthUsernamePassword(final String host, final String realm, 30381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen final String username, final String password) { 30481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen if (!ThreadUtils.runningOnUiThread()) { 30581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen ThreadUtils.postOnUiThread(new Runnable() { 30681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 30781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 30881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen setHttpAuthUsernamePassword(host, realm, username, password); 30981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 31081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 31181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 31281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 31346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mAwContents.setHttpAuthUsernamePassword(host, realm, username, password); 31446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 31546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 31646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 3172c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public String[] getHttpAuthUsernamePassword(final String host, final String realm) { 3182c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen if (!ThreadUtils.runningOnUiThread()) { 3192c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen String[] ret = runOnUiThreadBlocking(new Callable<String[]>() { 3202c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 3212c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public String[] call() { 3222c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return getHttpAuthUsernamePassword(host, realm); 3232c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 3242c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 3252c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 3262c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 32746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return mAwContents.getHttpAuthUsernamePassword(host, realm); 32846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 32946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 33046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 33146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void destroy() { 332370194f596d6ed2b410d67a65782e5a6dc24a4e3Kristian Monsen if (!ThreadUtils.runningOnUiThread()) { 333370194f596d6ed2b410d67a65782e5a6dc24a4e3Kristian Monsen ThreadUtils.postOnUiThread(new Runnable() { 334370194f596d6ed2b410d67a65782e5a6dc24a4e3Kristian Monsen @Override 335370194f596d6ed2b410d67a65782e5a6dc24a4e3Kristian Monsen public void run() { 336370194f596d6ed2b410d67a65782e5a6dc24a4e3Kristian Monsen destroy(); 337370194f596d6ed2b410d67a65782e5a6dc24a4e3Kristian Monsen } 338370194f596d6ed2b410d67a65782e5a6dc24a4e3Kristian Monsen }); 339370194f596d6ed2b410d67a65782e5a6dc24a4e3Kristian Monsen return; 340370194f596d6ed2b410d67a65782e5a6dc24a4e3Kristian Monsen } 341370194f596d6ed2b410d67a65782e5a6dc24a4e3Kristian Monsen 3423949435b480cb71106f65b237025da359cf8a8caBen Murdoch mAwContents.destroy(); 343a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon if (mGLfunctor != null) { 344a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon mGLfunctor.destroy(); 345a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon mGLfunctor = null; 346a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon } 34746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 34846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 34946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 35081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void setNetworkAvailable(final boolean networkUp) { 3510363422b19ca6263dbfbcd0d9daa6d1abe5c6892Ben Murdoch // Note that this purely toggles the JS navigator.online property. 3520363422b19ca6263dbfbcd0d9daa6d1abe5c6892Ben Murdoch // It does not in affect chromium or network stack state in any way. 35381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen if (!ThreadUtils.runningOnUiThread()) { 35481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen ThreadUtils.postOnUiThread(new Runnable() { 35581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 35681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 35781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen setNetworkAvailable(networkUp); 35881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 35981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 36081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 36181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 3620363422b19ca6263dbfbcd0d9daa6d1abe5c6892Ben Murdoch mAwContents.setNetworkAvailable(networkUp); 36346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 36446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 36546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 3662c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public WebBackForwardList saveState(final Bundle outState) { 3672c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen if (!ThreadUtils.runningOnUiThread()) { 3682c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen WebBackForwardList ret = runOnUiThreadBlocking(new Callable<WebBackForwardList>() { 3692c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 3702c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public WebBackForwardList call() { 3712c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return saveState(outState); 3722c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 3732c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 3742c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 3752c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 376a08e8aada16dc4dbfb8745532169fb4a8347541dBo Liu if (outState == null) return null; 377a08e8aada16dc4dbfb8745532169fb4a8347541dBo Liu if (!mAwContents.saveState(outState)) return null; 378a08e8aada16dc4dbfb8745532169fb4a8347541dBo Liu return copyBackForwardList(); 37946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 38046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 38146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 38246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean savePicture(Bundle b, File dest) { 3839405536501747e2d7b4fc46a33e5f0a1e7fd47acJonathan Dixon // Intentional no-op: hidden method on WebView. 38446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return false; 38546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 38646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 38746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 38846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean restorePicture(Bundle b, File src) { 3899405536501747e2d7b4fc46a33e5f0a1e7fd47acJonathan Dixon // Intentional no-op: hidden method on WebView. 39046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return false; 39146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 39246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 39346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 3942c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public WebBackForwardList restoreState(final Bundle inState) { 3952c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen if (!ThreadUtils.runningOnUiThread()) { 3962c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen WebBackForwardList ret = runOnUiThreadBlocking(new Callable<WebBackForwardList>() { 3972c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 3982c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public WebBackForwardList call() { 3992c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return restoreState(inState); 4002c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 4012c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 4022c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 4032c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 404a08e8aada16dc4dbfb8745532169fb4a8347541dBo Liu if (inState == null) return null; 405a08e8aada16dc4dbfb8745532169fb4a8347541dBo Liu if (!mAwContents.restoreState(inState)) return null; 406a08e8aada16dc4dbfb8745532169fb4a8347541dBo Liu return copyBackForwardList(); 40746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 40846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 40946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 41046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void loadUrl(String url, Map<String, String> additionalHttpHeaders) { 41146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // TODO: We may actually want to do some sanity checks here (like filter about://chrome). 4126ef347a29d692df672aaf59ee4926a476288476aBen Murdoch 4136ef347a29d692df672aaf59ee4926a476288476aBen Murdoch // For backwards compatibility, apps targeting less than K will have JS URLs evaluated 4146ef347a29d692df672aaf59ee4926a476288476aBen Murdoch // directly and any result of the evaluation will not replace the current page content. 4156ef347a29d692df672aaf59ee4926a476288476aBen Murdoch // Matching Chrome behavior more closely; apps targetting >= K that load a JS URL will 4166ef347a29d692df672aaf59ee4926a476288476aBen Murdoch // have the result of that URL replace the content of the current page. 4176ef347a29d692df672aaf59ee4926a476288476aBen Murdoch final String JAVASCRIPT_SCHEME = "javascript:"; 4189cd49cbc245e07e8e8c360fd22821a2918f99eaeChet Haase if (mAppTargetSdkVersion < Build.VERSION_CODES.KITKAT && 41941618b2aeb0a500c740a75871a8f614cb6543362Kristian Monsen url != null && url.startsWith(JAVASCRIPT_SCHEME)) { 4203d52163e1c466860651414670c59762f5bdd269fTao Bai mAwContents.evaluateJavaScriptEvenIfNotYetNavigated( 4213d52163e1c466860651414670c59762f5bdd269fTao Bai url.substring(JAVASCRIPT_SCHEME.length())); 4226ef347a29d692df672aaf59ee4926a476288476aBen Murdoch return; 4236ef347a29d692df672aaf59ee4926a476288476aBen Murdoch } 4246ef347a29d692df672aaf59ee4926a476288476aBen Murdoch 42546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) LoadUrlParams params = new LoadUrlParams(url); 42646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) if (additionalHttpHeaders != null) params.setExtraHeaders(additionalHttpHeaders); 427a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen loadUrlOnUiThread(params); 42846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 42946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 43046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 43146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void loadUrl(String url) { 43241618b2aeb0a500c740a75871a8f614cb6543362Kristian Monsen // Early out to match old WebView implementation 43341618b2aeb0a500c740a75871a8f614cb6543362Kristian Monsen if (url == null) { 43441618b2aeb0a500c740a75871a8f614cb6543362Kristian Monsen return; 43541618b2aeb0a500c740a75871a8f614cb6543362Kristian Monsen } 43646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) loadUrl(url, null); 43746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 43846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 43946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 44046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void postUrl(String url, byte[] postData) { 441b8281877c710018a3bc8066be17b1e11822be015Selim Gurun LoadUrlParams params = LoadUrlParams.createLoadHttpPostParams(url, postData); 442b8281877c710018a3bc8066be17b1e11822be015Selim Gurun Map<String,String> headers = new HashMap<String,String>(); 443b8281877c710018a3bc8066be17b1e11822be015Selim Gurun headers.put("Content-Type", "application/x-www-form-urlencoded"); 444b8281877c710018a3bc8066be17b1e11822be015Selim Gurun params.setExtraHeaders(headers); 445b8281877c710018a3bc8066be17b1e11822be015Selim Gurun loadUrlOnUiThread(params); 44646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 44746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 44819bc90be698e6d86ec6c77ea8b43bb6778bcc89dJonathan Dixon private static String fixupMimeType(String mimeType) { 44919bc90be698e6d86ec6c77ea8b43bb6778bcc89dJonathan Dixon return TextUtils.isEmpty(mimeType) ? "text/html" : mimeType; 45019bc90be698e6d86ec6c77ea8b43bb6778bcc89dJonathan Dixon } 45119bc90be698e6d86ec6c77ea8b43bb6778bcc89dJonathan Dixon 45219bc90be698e6d86ec6c77ea8b43bb6778bcc89dJonathan Dixon private static String fixupData(String data) { 45319bc90be698e6d86ec6c77ea8b43bb6778bcc89dJonathan Dixon return TextUtils.isEmpty(data) ? "" : data; 45419bc90be698e6d86ec6c77ea8b43bb6778bcc89dJonathan Dixon } 45519bc90be698e6d86ec6c77ea8b43bb6778bcc89dJonathan Dixon 45619bc90be698e6d86ec6c77ea8b43bb6778bcc89dJonathan Dixon private static String fixupBase(String url) { 45719bc90be698e6d86ec6c77ea8b43bb6778bcc89dJonathan Dixon return TextUtils.isEmpty(url) ? "about:blank" : url; 45819bc90be698e6d86ec6c77ea8b43bb6778bcc89dJonathan Dixon } 45919bc90be698e6d86ec6c77ea8b43bb6778bcc89dJonathan Dixon 46019bc90be698e6d86ec6c77ea8b43bb6778bcc89dJonathan Dixon private static String fixupHistory(String url) { 46119bc90be698e6d86ec6c77ea8b43bb6778bcc89dJonathan Dixon return TextUtils.isEmpty(url) ? "about:blank" : url; 46219bc90be698e6d86ec6c77ea8b43bb6778bcc89dJonathan Dixon } 46319bc90be698e6d86ec6c77ea8b43bb6778bcc89dJonathan Dixon 46446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) private static boolean isBase64Encoded(String encoding) { 46546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return "base64".equals(encoding); 46646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 46746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 46846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 46946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void loadData(String data, String mimeType, String encoding) { 470a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen loadUrlOnUiThread(LoadUrlParams.createLoadDataParams( 47119bc90be698e6d86ec6c77ea8b43bb6778bcc89dJonathan Dixon fixupData(data), fixupMimeType(mimeType), isBase64Encoded(encoding))); 47246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 47346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 47446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 47546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void loadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding, 476efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch String historyUrl) { 47719bc90be698e6d86ec6c77ea8b43bb6778bcc89dJonathan Dixon data = fixupData(data); 47819bc90be698e6d86ec6c77ea8b43bb6778bcc89dJonathan Dixon mimeType = fixupMimeType(mimeType); 479efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch LoadUrlParams loadUrlParams; 48019bc90be698e6d86ec6c77ea8b43bb6778bcc89dJonathan Dixon baseUrl = fixupBase(baseUrl); 48119bc90be698e6d86ec6c77ea8b43bb6778bcc89dJonathan Dixon historyUrl = fixupHistory(historyUrl); 482efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch 48319bc90be698e6d86ec6c77ea8b43bb6778bcc89dJonathan Dixon if (baseUrl.startsWith("data:")) { 484efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch // For backwards compatibility with WebViewClassic, we use the value of |encoding| 485efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch // as the charset, as long as it's not "base64". 486efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch boolean isBase64 = isBase64Encoded(encoding); 487efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch loadUrlParams = LoadUrlParams.createLoadDataParamsWithBaseUrl( 488efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch data, mimeType, isBase64, baseUrl, historyUrl, isBase64 ? null : encoding); 489efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch } else { 490efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch // When loading data with a non-data: base URL, the classic WebView would effectively 491efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch // "dump" that string of data into the WebView without going through regular URL 492efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch // loading steps such as decoding URL-encoded entities. We achieve this same behavior by 493efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch // base64 encoding the data that is passed here and then loading that as a data: URL. 494efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch try { 495efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch loadUrlParams = LoadUrlParams.createLoadDataParamsWithBaseUrl( 496efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch Base64.encodeToString(data.getBytes("utf-8"), Base64.DEFAULT), mimeType, 497efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch true, baseUrl, historyUrl, "utf-8"); 498efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch } catch (java.io.UnsupportedEncodingException e) { 499efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch Log.wtf(TAG, "Unable to load data string " + data, e); 500efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch return; 501efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch } 502efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch } 503a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen loadUrlOnUiThread(loadUrlParams); 504a622984698ea393f81ce968ec87bab75087af7dcKristian Monsen 505a622984698ea393f81ce968ec87bab75087af7dcKristian Monsen // Data url's with a base url will be resolved in Blink, and not cause an onPageStarted 506a622984698ea393f81ce968ec87bab75087af7dcKristian Monsen // event to be sent. Sending the callback directly from here. 507a622984698ea393f81ce968ec87bab75087af7dcKristian Monsen final String finalBaseUrl = loadUrlParams.getBaseUrl(); 508a622984698ea393f81ce968ec87bab75087af7dcKristian Monsen ThreadUtils.postOnUiThread(new Runnable() { 509a622984698ea393f81ce968ec87bab75087af7dcKristian Monsen @Override 510a622984698ea393f81ce968ec87bab75087af7dcKristian Monsen public void run() { 511a622984698ea393f81ce968ec87bab75087af7dcKristian Monsen mContentsClientAdapter.onPageStarted(finalBaseUrl); 512a622984698ea393f81ce968ec87bab75087af7dcKristian Monsen } 513a622984698ea393f81ce968ec87bab75087af7dcKristian Monsen }); 514a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen } 515a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen 516a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen private void loadUrlOnUiThread(final LoadUrlParams loadUrlParams) { 517a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen if (ThreadUtils.runningOnUiThread()) { 518a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen mAwContents.loadUrl(loadUrlParams); 519a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen } else { 520a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen // Disallowed in WebView API for apps targetting a new SDK 521a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen assert mAppTargetSdkVersion < Build.VERSION_CODES.JELLY_BEAN_MR2; 522a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen ThreadUtils.postOnUiThread(new Runnable() { 523a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen @Override 524a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen public void run() { 525a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen mAwContents.loadUrl(loadUrlParams); 526a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen } 527a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen }); 528a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen } 52946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 53046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 5316ef347a29d692df672aaf59ee4926a476288476aBen Murdoch public void evaluateJavaScript(String script, ValueCallback<String> resultCallback) { 53262389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 5336ef347a29d692df672aaf59ee4926a476288476aBen Murdoch mAwContents.evaluateJavaScript(script, resultCallback); 5346ef347a29d692df672aaf59ee4926a476288476aBen Murdoch } 5356ef347a29d692df672aaf59ee4926a476288476aBen Murdoch 53646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 53746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void saveWebArchive(String filename) { 53846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) saveWebArchive(filename, false, null); 53946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 54046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 54146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 54281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void saveWebArchive(final String basename, final boolean autoname, 54381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen final ValueCallback<String> callback) { 54481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen if (!ThreadUtils.runningOnUiThread()) { 54581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen ThreadUtils.postOnUiThread(new Runnable() { 54681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 54781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 54881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen saveWebArchive(basename, autoname, callback); 54981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 55081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 55181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 55281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 55346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mAwContents.saveWebArchive(basename, autoname, callback); 55446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 55546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 55646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 55746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void stopLoading() { 55819af3f6395d08f8d2b106b8d205260d3194e1017Kristian Monsen if (!ThreadUtils.runningOnUiThread()) { 55919af3f6395d08f8d2b106b8d205260d3194e1017Kristian Monsen ThreadUtils.postOnUiThread(new Runnable() { 56019af3f6395d08f8d2b106b8d205260d3194e1017Kristian Monsen @Override 56119af3f6395d08f8d2b106b8d205260d3194e1017Kristian Monsen public void run() { 56219af3f6395d08f8d2b106b8d205260d3194e1017Kristian Monsen stopLoading(); 56319af3f6395d08f8d2b106b8d205260d3194e1017Kristian Monsen } 56419af3f6395d08f8d2b106b8d205260d3194e1017Kristian Monsen }); 56519af3f6395d08f8d2b106b8d205260d3194e1017Kristian Monsen return; 56619af3f6395d08f8d2b106b8d205260d3194e1017Kristian Monsen } 56719af3f6395d08f8d2b106b8d205260d3194e1017Kristian Monsen 5687cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba mAwContents.stopLoading(); 56946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 57046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 57146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 57246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void reload() { 57381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen if (!ThreadUtils.runningOnUiThread()) { 57481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen ThreadUtils.postOnUiThread(new Runnable() { 57581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 57681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 57781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen reload(); 57881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 57981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 58081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 58181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 5827cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba mAwContents.reload(); 58346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 58446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 58546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 58646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean canGoBack() { 5872c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen if (!ThreadUtils.runningOnUiThread()) { 5882c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen Boolean ret = runOnUiThreadBlocking(new Callable<Boolean>() { 5892c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 5902c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public Boolean call() { 5912c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return canGoBack(); 5922c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 5932c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 5942c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 5952c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 5967cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.canGoBack(); 59746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 59846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 59946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 60046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void goBack() { 60181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen if (!ThreadUtils.runningOnUiThread()) { 60281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen ThreadUtils.postOnUiThread(new Runnable() { 60381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 60481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 60581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen goBack(); 60681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 60781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 60881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 60981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 6107cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba mAwContents.goBack(); 61146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 61246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 61346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 61446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean canGoForward() { 6152c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen if (!ThreadUtils.runningOnUiThread()) { 6162c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen Boolean ret = runOnUiThreadBlocking(new Callable<Boolean>() { 6172c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 6182c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public Boolean call() { 6192c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return canGoForward(); 6202c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 6212c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 6222c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 6232c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 6247cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.canGoForward(); 62546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 62646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 62746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 62846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void goForward() { 62981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen if (!ThreadUtils.runningOnUiThread()) { 63081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen ThreadUtils.postOnUiThread(new Runnable() { 63181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 63281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 63381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen goForward(); 63481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 63581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 63681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 63781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 6387cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba mAwContents.goForward(); 63946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 64046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 64146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 6422c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public boolean canGoBackOrForward(final int steps) { 6432c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen if (!ThreadUtils.runningOnUiThread()) { 6442c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen Boolean ret = runOnUiThreadBlocking(new Callable<Boolean>() { 6452c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 6462c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public Boolean call() { 6472c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return canGoBackOrForward(steps); 6482c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 6492c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 6502c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 6512c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 6527cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.canGoBackOrForward(steps); 65346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 65446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 65546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 65681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void goBackOrForward(final int steps) { 65781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen if (!ThreadUtils.runningOnUiThread()) { 65881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen ThreadUtils.postOnUiThread(new Runnable() { 65981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 66081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 66181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen goBackOrForward(steps); 66281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 66381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 66481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 66581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 6667cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba mAwContents.goBackOrForward(steps); 66746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 66846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 66946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 67046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean isPrivateBrowsingEnabled() { 6716d58f78e7fc0412a58b163559cb8e9c4af5c6fe1Jonathan Dixon // Not supported in this WebView implementation. 67246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return false; 67346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 67446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 67546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 6762c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public boolean pageUp(final boolean top) { 6772c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen if (!ThreadUtils.runningOnUiThread()) { 6782c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen Boolean ret = runOnUiThreadBlocking(new Callable<Boolean>() { 6792c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 6802c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public Boolean call() { 6812c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return pageUp(top); 6822c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 6832c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 6842c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 6852c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 6867cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.pageUp(top); 68746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 68846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 68946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 6902c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public boolean pageDown(final boolean bottom) { 6912c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen if (!ThreadUtils.runningOnUiThread()) { 6922c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen Boolean ret = runOnUiThreadBlocking(new Callable<Boolean>() { 6932c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 6942c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public Boolean call() { 6952c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return pageDown(bottom); 6962c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 6972c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 6982c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 6992c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 7007cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.pageDown(bottom); 70146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 70246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 70346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 70446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void clearView() { 70581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen if (!ThreadUtils.runningOnUiThread()) { 70681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen ThreadUtils.postOnUiThread(new Runnable() { 70781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 70881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 70981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen clearView(); 71081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 71181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 71281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 71381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 714d21b8fe00b21742cc36929cb02eef6ad25946512Kristian Monsen mAwContents.clearView(); 71546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 71646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 71746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 71846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public Picture capturePicture() { 7192c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen if (!ThreadUtils.runningOnUiThread()) { 7202c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen Picture ret = runOnUiThreadBlocking(new Callable<Picture>() { 7212c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 7222c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public Picture call() { 7232c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return capturePicture(); 7242c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 7252c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 7262c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 7272c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 7289c5a40623b62737244deb2d04a98830d7ffa8404Leandro Gracia Gil return mAwContents.capturePicture(); 72946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 73046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 73146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 732412d84be859ce0eb91baf2f9afe5e6326a15d76aSelim Gurun public PrintDocumentAdapter createPrintDocumentAdapter() { 73362389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 734412d84be859ce0eb91baf2f9afe5e6326a15d76aSelim Gurun return new AwPrintDocumentAdapter(mAwContents.getPdfExporter()); 735a8d0ef2693c3bcd4a091cc7fa49b69b54e3472c4Selim Gurun } 736a8d0ef2693c3bcd4a091cc7fa49b69b54e3472c4Selim Gurun 73749a1a6f9f27b63687edc1d98f842627d4719a327Selim Gurun @Override 73846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public float getScale() { 739fa62be4cdc2630566ee179843393d4a6f9893966Kristian Monsen // No checkThread() as it is mostly thread safe (workaround for b/10652991). 7403520eb778d668dc76ca4541c69abd568b9d02691Mikhail Naganov return mAwContents.getScale(); 74146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 74246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 74346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 74481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void setInitialScale(final int scaleInPercent) { 74581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen if (!ThreadUtils.runningOnUiThread()) { 74681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen ThreadUtils.postOnUiThread(new Runnable() { 74781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 74881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 74981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen setInitialScale(scaleInPercent); 75081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 75181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 75281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 75381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 7543520eb778d668dc76ca4541c69abd568b9d02691Mikhail Naganov mAwContents.getSettings().setInitialPageScale(scaleInPercent); 75546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 75646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 75746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 75846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void invokeZoomPicker() { 75981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen if (!ThreadUtils.runningOnUiThread()) { 76081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen ThreadUtils.postOnUiThread(new Runnable() { 76181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 76281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 76381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen invokeZoomPicker(); 76481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 76581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 76681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 76781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 7687cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba mAwContents.invokeZoomPicker(); 76946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 77046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 77146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 77246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public WebView.HitTestResult getHitTestResult() { 7732c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen if (!ThreadUtils.runningOnUiThread()) { 7742c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen WebView.HitTestResult ret = runOnUiThreadBlocking( 7752c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen new Callable<WebView.HitTestResult>() { 7762c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 7772c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public WebView.HitTestResult call() { 7782c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return getHitTestResult(); 7792c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 7802c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 7812c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 7822c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 783c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu AwContents.HitTestData data = mAwContents.getLastHitTestResult(); 784c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu mHitTestResult.setType(data.hitTestResultType); 785c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu mHitTestResult.setExtra(data.hitTestResultExtraData); 786c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu return mHitTestResult; 78746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 78846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 78946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 79081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void requestFocusNodeHref(final Message hrefMsg) { 79181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen if (!ThreadUtils.runningOnUiThread()) { 79281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen ThreadUtils.postOnUiThread(new Runnable() { 79381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 79481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 79581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen requestFocusNodeHref(hrefMsg); 79681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 79781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 79881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 79981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 800c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu mAwContents.requestFocusNodeHref(hrefMsg); 80146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 80246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 80346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 80481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void requestImageRef(final Message msg) { 80581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen if (!ThreadUtils.runningOnUiThread()) { 80681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen ThreadUtils.postOnUiThread(new Runnable() { 80781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 80881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 80981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen requestImageRef(msg); 81081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 81181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 81281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 81381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 814c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu mAwContents.requestImageRef(msg); 81546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 81646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 81746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 81846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public String getUrl() { 8192c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen if (!ThreadUtils.runningOnUiThread()) { 8202c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen String ret = runOnUiThreadBlocking(new Callable<String>() { 8212c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 8222c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public String call() { 8232c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return getUrl(); 8242c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 8252c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 8262c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 8272c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 8287cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba String url = mAwContents.getUrl(); 82946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) if (url == null || url.trim().isEmpty()) return null; 83046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return url; 83146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 83246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 83346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 83446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public String getOriginalUrl() { 8352c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen if (!ThreadUtils.runningOnUiThread()) { 8362c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen String ret = runOnUiThreadBlocking(new Callable<String>() { 8372c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 8382c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public String call() { 8392c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return getOriginalUrl(); 8402c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 8412c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 8422c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 8432c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 84446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) String url = mAwContents.getOriginalUrl(); 84546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) if (url == null || url.trim().isEmpty()) return null; 84646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return url; 84746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 84846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 84946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 85046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public String getTitle() { 8512c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen if (!ThreadUtils.runningOnUiThread()) { 8522c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen String ret = runOnUiThreadBlocking(new Callable<String>() { 8532c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 8542c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public String call() { 8552c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return getTitle(); 8562c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 8572c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 8582c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 8592c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 8607cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.getTitle(); 86146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 86246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 86346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 86446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public Bitmap getFavicon() { 8652c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen if (!ThreadUtils.runningOnUiThread()) { 8662c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen Bitmap ret = runOnUiThreadBlocking(new Callable<Bitmap>() { 8672c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 8682c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public Bitmap call() { 8692c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return getFavicon(); 8702c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 8712c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 8722c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 8732c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 8749405536501747e2d7b4fc46a33e5f0a1e7fd47acJonathan Dixon return mAwContents.getFavicon(); 87546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 87646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 87746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 87846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public String getTouchIconUrl() { 8799405536501747e2d7b4fc46a33e5f0a1e7fd47acJonathan Dixon // Intentional no-op: hidden method on WebView. 88046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return null; 88146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 88246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 88346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 88446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public int getProgress() { 885c0c86c037ea697da375ae28c543cae9b050d6b68Jonathan Dixon // No checkThread() because the value is cached java side (workaround for b/10533304). 88646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return mAwContents.getMostRecentProgress(); 88746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 88846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 88946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 89046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public int getContentHeight() { 89194a8e6a6d7d1b2a6b3718eb91956403ef6b03d9cKristian Monsen // No checkThread() as it is mostly thread safe (workaround for b/10594869). 8926b5f3d1546ae2a9c712cde60c54ec027582bc4e6Martin Kosiba return mAwContents.getContentHeightCss(); 89346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 89446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 89546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 89646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public int getContentWidth() { 8972c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen // No checkThread() as it is mostly thread safe (workaround for b/10594869). 8986b5f3d1546ae2a9c712cde60c54ec027582bc4e6Martin Kosiba return mAwContents.getContentWidthCss(); 89946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 90046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 90146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 90246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void pauseTimers() { 90381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen if (!ThreadUtils.runningOnUiThread()) { 90481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen ThreadUtils.postOnUiThread(new Runnable() { 90581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 90681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 90781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen pauseTimers(); 90881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 90981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 91081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 91181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 912531e68a2b50a5e542eeede13907f29e463a99ebfBen Murdoch mAwContents.pauseTimers(); 91346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 91446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 91546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 91646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void resumeTimers() { 91781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen if (!ThreadUtils.runningOnUiThread()) { 91881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen ThreadUtils.postOnUiThread(new Runnable() { 91981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 92081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 92181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen resumeTimers(); 92281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 92381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 92481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 92581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 926531e68a2b50a5e542eeede13907f29e463a99ebfBen Murdoch mAwContents.resumeTimers(); 92746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 92846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 92946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 93046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void onPause() { 93181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen if (!ThreadUtils.runningOnUiThread()) { 93281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen ThreadUtils.postOnUiThread(new Runnable() { 93381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 93481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 93581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen onPause(); 93681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 93781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 93881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 93981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 9401cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon mAwContents.onPause(); 94146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 94246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 94346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 94446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void onResume() { 94581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen if (!ThreadUtils.runningOnUiThread()) { 94681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen ThreadUtils.postOnUiThread(new Runnable() { 94781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 94881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 94981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen onResume(); 95081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 95181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 95281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 95381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 9541cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon mAwContents.onResume(); 95546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 95646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 95746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 95846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean isPaused() { 9592c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen if (!ThreadUtils.runningOnUiThread()) { 9602c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen Boolean ret = runOnUiThreadBlocking(new Callable<Boolean>() { 9612c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 9622c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public Boolean call() { 9632c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return isPaused(); 9642c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 9652c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 9662c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 9672c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 9681cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon return mAwContents.isPaused(); 96946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 97046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 97146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 97246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void freeMemory() { 973d43c55dd91cf7dd1bcd18d01e16acd5e55de0471Ben Murdoch // Intentional no-op. Memory is managed automatically by Chromium. 97446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 97546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 97646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 97781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void clearCache(final boolean includeDiskFiles) { 97881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen if (!ThreadUtils.runningOnUiThread()) { 97981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen ThreadUtils.postOnUiThread(new Runnable() { 98081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 98181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 98281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen clearCache(includeDiskFiles); 98381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 98481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 98581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 98681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 98746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mAwContents.clearCache(includeDiskFiles); 98846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 98946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 990bbef8de5696d48fc6458c926026fc524a62814e1Selim Gurun /** 991bbef8de5696d48fc6458c926026fc524a62814e1Selim Gurun * This is a poorly named method, but we keep it for historical reasons. 992bbef8de5696d48fc6458c926026fc524a62814e1Selim Gurun */ 99346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 99446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void clearFormData() { 99581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen if (!ThreadUtils.runningOnUiThread()) { 99681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen ThreadUtils.postOnUiThread(new Runnable() { 99781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 99881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 99981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen clearFormData(); 100081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 100181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 100281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 100381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 1004bbef8de5696d48fc6458c926026fc524a62814e1Selim Gurun mAwContents.hideAutofillPopup(); 100546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 100646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 100746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 100846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void clearHistory() { 100981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen if (!ThreadUtils.runningOnUiThread()) { 101081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen ThreadUtils.postOnUiThread(new Runnable() { 101181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 101281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 101381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen clearHistory(); 101481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 101581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 101681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 101781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 10187cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba mAwContents.clearHistory(); 101946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 102046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 102146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 102246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void clearSslPreferences() { 102381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen if (!ThreadUtils.runningOnUiThread()) { 102481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen ThreadUtils.postOnUiThread(new Runnable() { 102581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 102681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 102781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen clearSslPreferences(); 102881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 102981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 103081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 103181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 10327cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba mAwContents.clearSslPreferences(); 103346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 103446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 103546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 103646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public WebBackForwardList copyBackForwardList() { 10372c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen if (!ThreadUtils.runningOnUiThread()) { 10382c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen WebBackForwardList ret = runOnUiThreadBlocking(new Callable<WebBackForwardList>() { 10392c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 10402c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public WebBackForwardList call() { 10412c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return copyBackForwardList(); 10422c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 10432c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 10442c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 10452c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 104608a5e00cdfb74f4ffd843d2d0a9b0b40b86b107aBo Liu return new WebBackForwardListChromium( 10477cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba mAwContents.getNavigationHistory()); 104846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 104946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 105046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 105146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void setFindListener(WebView.FindListener listener) { 105246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mContentsClientAdapter.setFindListener(listener); 105346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 105446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 105546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 105681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void findNext(final boolean forwards) { 105781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen if (!ThreadUtils.runningOnUiThread()) { 105881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen ThreadUtils.postOnUiThread(new Runnable() { 105981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 106081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 106181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen findNext(forwards); 106281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 106381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 106481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 106581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 106646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mAwContents.findNext(forwards); 106746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 106846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 106946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 10702c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public int findAll(final String searchString) { 10712c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen findAllAsync(searchString); 1072f37548d6d8e2a73c65d675a26706a38f52960800Jonathan Dixon return 0; 107346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 107446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 107546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 107681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void findAllAsync(final String searchString) { 107781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen if (!ThreadUtils.runningOnUiThread()) { 107881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen ThreadUtils.postOnUiThread(new Runnable() { 107981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 108081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 108181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen findAllAsync(searchString); 108281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 108381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 108481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 108581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 108646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mAwContents.findAllAsync(searchString); 108746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 108846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 108946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 10902c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public boolean showFindDialog(final String text, final boolean showIme) { 10912c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen if (!ThreadUtils.runningOnUiThread()) { 10922c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return false; 10932c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 10946d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch if (mWebView.getParent() == null) { 10956d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch return false; 10966d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch } 10976d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch 10986d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch FindActionModeCallback findAction = new FindActionModeCallback(mWebView.getContext()); 10996d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch if (findAction == null) { 11006d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch return false; 11016d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch } 11026d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch 11036d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch mWebView.startActionMode(findAction); 11046d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch findAction.setWebView(mWebView); 11056d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch if (showIme) { 11066d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch findAction.showSoftInput(); 11076d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch } 11086d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch 11096d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch if (text != null) { 11106d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch findAction.setText(text); 11116d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch findAction.findAll(); 11126d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch } 11136d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch 11146d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch return true; 111546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 111646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 11176d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch @Override 1118fde8dae44f74be3de69ce6dd07b0023279b485a0Ben Murdoch public void notifyFindDialogDismissed() { 111981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen if (!ThreadUtils.runningOnUiThread()) { 112081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen ThreadUtils.postOnUiThread(new Runnable() { 112181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 112281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 112381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen notifyFindDialogDismissed(); 112481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 112581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 112681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 112781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 11286d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch clearMatches(); 1129fde8dae44f74be3de69ce6dd07b0023279b485a0Ben Murdoch } 1130fde8dae44f74be3de69ce6dd07b0023279b485a0Ben Murdoch 113146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 113246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void clearMatches() { 113381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen if (!ThreadUtils.runningOnUiThread()) { 113481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen ThreadUtils.postOnUiThread(new Runnable() { 113581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 113681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 113781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen clearMatches(); 113881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 113981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 114081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 114181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 114246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mAwContents.clearMatches(); 114346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 114446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 114546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 114681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void documentHasImages(final Message response) { 114781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen if (!ThreadUtils.runningOnUiThread()) { 114881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen ThreadUtils.postOnUiThread(new Runnable() { 114981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 115081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 115181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen documentHasImages(response); 115281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 115381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 115481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 115581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 115646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mAwContents.documentHasImages(response); 115746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 115846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 115946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 116046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void setWebViewClient(WebViewClient client) { 116146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mContentsClientAdapter.setWebViewClient(client); 116246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 116346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 116446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 116546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void setDownloadListener(DownloadListener listener) { 11664320e428efc3bf69387f3b9d5a0589b2b8746409Bo Liu mContentsClientAdapter.setDownloadListener(listener); 116746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 116846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 116946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 117046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void setWebChromeClient(WebChromeClient client) { 117146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mContentsClientAdapter.setWebChromeClient(client); 117246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 117346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 117446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 117581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void setPictureListener(final WebView.PictureListener listener) { 117681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen if (!ThreadUtils.runningOnUiThread()) { 117781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen ThreadUtils.postOnUiThread(new Runnable() { 117881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 117981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 118081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen setPictureListener(listener); 118181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 118281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 118381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 118481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 118546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mContentsClientAdapter.setPictureListener(listener); 11869c5a40623b62737244deb2d04a98830d7ffa8404Leandro Gracia Gil mAwContents.enableOnNewPicture(listener != null, 11876ef347a29d692df672aaf59ee4926a476288476aBen Murdoch mAppTargetSdkVersion >= Build.VERSION_CODES.JELLY_BEAN_MR2); 118846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 118946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 119046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 119181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void addJavascriptInterface(final Object obj, final String interfaceName) { 119281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen if (!ThreadUtils.runningOnUiThread()) { 119381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen ThreadUtils.postOnUiThread(new Runnable() { 119481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 119581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 119681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen addJavascriptInterface(obj, interfaceName); 119781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 119881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 119981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 120081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 1201ea844f60b1b559788566fe6e004b1eeca53a8039Jonathan Dixon Class<? extends Annotation> requiredAnnotation = null; 12026ef347a29d692df672aaf59ee4926a476288476aBen Murdoch if (mAppTargetSdkVersion >= Build.VERSION_CODES.JELLY_BEAN_MR1) { 12037db34d3dcaac936566f912e1b0b21f3f103029ffJonathan Dixon requiredAnnotation = JavascriptInterface.class; 12047db34d3dcaac936566f912e1b0b21f3f103029ffJonathan Dixon } 12057cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba mAwContents.addPossiblyUnsafeJavascriptInterface(obj, interfaceName, requiredAnnotation); 120646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 120746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 120846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 120981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void removeJavascriptInterface(final String interfaceName) { 121081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen if (!ThreadUtils.runningOnUiThread()) { 121181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen ThreadUtils.postOnUiThread(new Runnable() { 121281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 121381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 121481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen removeJavascriptInterface(interfaceName); 121581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 121681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 121781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 121881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 12197cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba mAwContents.removeJavascriptInterface(interfaceName); 122046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 122146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 122246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 122346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public WebSettings getSettings() { 122446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return mWebSettings; 122546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 122646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 122746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 122846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void setMapTrackballToArrowKeys(boolean setMap) { 122946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // This is a deprecated API: intentional no-op. 123046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 123146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 123246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 123381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void flingScroll(final int vx, final int vy) { 123481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen if (!ThreadUtils.runningOnUiThread()) { 123581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen ThreadUtils.postOnUiThread(new Runnable() { 123681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 123781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 123881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen flingScroll(vx, vy); 123981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 124081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 124181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 124281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 12437cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba mAwContents.flingScroll(vx, vy); 124446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 124546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 124646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 124746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public View getZoomControls() { 12482c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen if (!ThreadUtils.runningOnUiThread()) { 12492c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return null; 12502c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 12512c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen 1252e78d6e40e4e78671e6621ba8cf49835568704899Jonathan Dixon // This was deprecated in 2009 and hidden in JB MR1, so just provide the minimum needed 1253e78d6e40e4e78671e6621ba8cf49835568704899Jonathan Dixon // to stop very out-dated applications from crashing. 1254e78d6e40e4e78671e6621ba8cf49835568704899Jonathan Dixon Log.w(TAG, "WebView doesn't support getZoomControls"); 1255420c0da3a4e06e1ac5574091e7c9c286ef012369Mikhail Naganov return mAwContents.getSettings().supportZoom() ? new View(mWebView.getContext()) : null; 125646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 125746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 125846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 125946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean canZoomIn() { 12602c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen if (!ThreadUtils.runningOnUiThread()) { 12612c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return false; 12622c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 12637cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.canZoomIn(); 126446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 126546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 126646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 126746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean canZoomOut() { 12682c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen if (!ThreadUtils.runningOnUiThread()) { 12692c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return false; 12702c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 12717cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.canZoomOut(); 127246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 127346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 127446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 127546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean zoomIn() { 12762c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen if (!ThreadUtils.runningOnUiThread()) { 12772c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen boolean ret = runOnUiThreadBlocking(new Callable<Boolean>() { 12782c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 12792c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public Boolean call() { 12802c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return zoomIn(); 12812c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 12822c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 12832c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 12842c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 12857cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.zoomIn(); 128646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 128746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 128846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 128946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean zoomOut() { 12902c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen if (!ThreadUtils.runningOnUiThread()) { 12912c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen boolean ret = runOnUiThreadBlocking(new Callable<Boolean>() { 12922c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 12932c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public Boolean call() { 12942c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return zoomOut(); 12952c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 12962c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 12972c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 12982c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 12997cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.zoomOut(); 130046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 130146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 1302d2dcef4d9edfb7af7abff85b0867c3d6a363feb7Jonathan Dixon @Override 130346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void dumpViewHierarchyWithProperties(BufferedWriter out, int level) { 1304f2b715bee3bb3a41e59f80ae53b45f249d9559c5Kristian Monsen // Intentional no-op 130546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 130646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 1307d2dcef4d9edfb7af7abff85b0867c3d6a363feb7Jonathan Dixon @Override 130846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public View findHierarchyView(String className, int hashCode) { 1309f2b715bee3bb3a41e59f80ae53b45f249d9559c5Kristian Monsen // Intentional no-op 131046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return null; 131146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 131246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 131346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // WebViewProvider glue methods --------------------------------------------------------------- 131446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 131546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 131657b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen // This needs to be kept thread safe! 131746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public WebViewProvider.ViewDelegate getViewDelegate() { 131846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return this; 131946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 132046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 132146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 13222c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen // This needs to be kept thread safe! 132346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public WebViewProvider.ScrollDelegate getScrollDelegate() { 132446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return this; 132546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 132646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 132746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 132846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // WebViewProvider.ViewDelegate implementation ------------------------------------------------ 132946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 1330a7fba41c5661cb61b41c8a4ff2d69e5153666f7fBen Murdoch // TODO: remove from WebViewProvider and use default implementation from 1331a7fba41c5661cb61b41c8a4ff2d69e5153666f7fBen Murdoch // ViewGroup. 1332a7fba41c5661cb61b41c8a4ff2d69e5153666f7fBen Murdoch // @Override 133346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean shouldDelayChildPressedState() { 13342c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen if (!ThreadUtils.runningOnUiThread()) { 13352c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen boolean ret = runOnUiThreadBlocking(new Callable<Boolean>() { 13362c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 13372c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public Boolean call() { 13382c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return shouldDelayChildPressedState(); 13392c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 13402c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 13412c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 13422c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 1343a7fba41c5661cb61b41c8a4ff2d69e5153666f7fBen Murdoch return true; 134446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 134546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 13465c990caf9c0237064dab94059f6c46fc2d51cd97Ben Murdoch// @Override 13475c990caf9c0237064dab94059f6c46fc2d51cd97Ben Murdoch public AccessibilityNodeProvider getAccessibilityNodeProvider() { 13482c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen if (!ThreadUtils.runningOnUiThread()) { 13492c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen AccessibilityNodeProvider ret = runOnUiThreadBlocking( 13502c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen new Callable<AccessibilityNodeProvider>() { 13512c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 13522c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public AccessibilityNodeProvider call() { 13532c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return getAccessibilityNodeProvider(); 13542c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 13552c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 13562c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 13572c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 13585c990caf9c0237064dab94059f6c46fc2d51cd97Ben Murdoch return mAwContents.getAccessibilityNodeProvider(); 13595c990caf9c0237064dab94059f6c46fc2d51cd97Ben Murdoch } 13605c990caf9c0237064dab94059f6c46fc2d51cd97Ben Murdoch 136146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 136281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void onInitializeAccessibilityNodeInfo(final AccessibilityNodeInfo info) { 136381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen if (!ThreadUtils.runningOnUiThread()) { 136481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen runVoidTaskOnUiThreadBlocking(new Runnable() { 136581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 136681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 136781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen onInitializeAccessibilityNodeInfo(info); 136881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 136981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 137081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 137181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 13727cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba mAwContents.onInitializeAccessibilityNodeInfo(info); 137346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 137446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 137546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 137681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void onInitializeAccessibilityEvent(final AccessibilityEvent event) { 137781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen if (!ThreadUtils.runningOnUiThread()) { 137881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen runVoidTaskOnUiThreadBlocking(new Runnable() { 137981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 138081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 138181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen onInitializeAccessibilityEvent(event); 138281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 138381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 138481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 138581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 13867cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba mAwContents.onInitializeAccessibilityEvent(event); 138746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 138846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 138946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 13902c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public boolean performAccessibilityAction(final int action, final Bundle arguments) { 13912c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen if (!ThreadUtils.runningOnUiThread()) { 13922c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen boolean ret = runOnUiThreadBlocking(new Callable<Boolean>() { 13932c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 13942c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public Boolean call() { 13952c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return performAccessibilityAction(action, arguments); 13962c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 13972c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 13982c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 13992c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 1400b7b706b2ed5cbb77dd690f5405b626a429989714Ben Murdoch if (mAwContents.supportsAccessibilityAction(action)) { 1401b7b706b2ed5cbb77dd690f5405b626a429989714Ben Murdoch return mAwContents.performAccessibilityAction(action, arguments); 1402b7b706b2ed5cbb77dd690f5405b626a429989714Ben Murdoch } 1403b7b706b2ed5cbb77dd690f5405b626a429989714Ben Murdoch return mWebViewPrivate.super_performAccessibilityAction(action, arguments); 140446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 140546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 140646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 140781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void setOverScrollMode(final int mode) { 140881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen if (!ThreadUtils.runningOnUiThread()) { 140981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen ThreadUtils.postOnUiThread(new Runnable() { 141081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 141181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 141281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen setOverScrollMode(mode); 141381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 141481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 141581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 141681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 14172841152693d0410f8e8c309aae514329f008a612Martin Kosiba // This gets called from the android.view.View c'tor that WebView inherits from. This 14182841152693d0410f8e8c309aae514329f008a612Martin Kosiba // causes the method to be called when mAwContents == null. 14192841152693d0410f8e8c309aae514329f008a612Martin Kosiba // It's safe to ignore these calls however since AwContents will read the current value of 14202841152693d0410f8e8c309aae514329f008a612Martin Kosiba // this setting when it's created. 1421ab5398debe64d34306b0f709a93d840078ae181dMartin Kosiba if (mAwContents != null) { 1422ab5398debe64d34306b0f709a93d840078ae181dMartin Kosiba mAwContents.setOverScrollMode(mode); 1423ab5398debe64d34306b0f709a93d840078ae181dMartin Kosiba } 142446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 142546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 142646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 142781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void setScrollBarStyle(final int style) { 142881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen if (!ThreadUtils.runningOnUiThread()) { 142981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen ThreadUtils.postOnUiThread(new Runnable() { 143081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 143181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 143281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen setScrollBarStyle(style); 143381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 143481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 143581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 143681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 1437bd819ca872a1711e4607ef11cd8b0b2156241897Martin Kosiba mAwContents.setScrollBarStyle(style); 143846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 143946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 144046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 144181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void onDrawVerticalScrollBar(final Canvas canvas, final Drawable scrollBar, final int l, 144281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen final int t, final int r, final int b) { 144381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen if (!ThreadUtils.runningOnUiThread()) { 144481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen runVoidTaskOnUiThreadBlocking(new Runnable() { 144581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 144681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 144781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen onDrawVerticalScrollBar(canvas, scrollBar, l, t, r, b); 144881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 144981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 145081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 145181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 1452bd819ca872a1711e4607ef11cd8b0b2156241897Martin Kosiba // WebViewClassic was overriding this method to handle rubberband over-scroll. Since 1453bd819ca872a1711e4607ef11cd8b0b2156241897Martin Kosiba // WebViewChromium doesn't support that the vanilla implementation of this method can be 1454bd819ca872a1711e4607ef11cd8b0b2156241897Martin Kosiba // used. 1455bd819ca872a1711e4607ef11cd8b0b2156241897Martin Kosiba mWebViewPrivate.super_onDrawVerticalScrollBar(canvas, scrollBar, l, t, r, b); 145646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 145746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 145846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 145981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void onOverScrolled(final int scrollX, final int scrollY, final boolean clampedX, 146081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen final boolean clampedY) { 146181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen if (!ThreadUtils.runningOnUiThread()) { 146281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen ThreadUtils.postOnUiThread(new Runnable() { 146381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 146481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 146581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen onOverScrolled(scrollX, scrollY, clampedX, clampedY); 146681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 146781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 146881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 146981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 14703951fbadf5157dd3fe73decc879f9b763e780b09Martin Kosiba mAwContents.onContainerViewOverScrolled(scrollX, scrollY, clampedX, clampedY); 147146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 147246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 147346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 147481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void onWindowVisibilityChanged(final int visibility) { 147581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen if (!ThreadUtils.runningOnUiThread()) { 147681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen ThreadUtils.postOnUiThread(new Runnable() { 147781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 147881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 147981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen onWindowVisibilityChanged(visibility); 148081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 148181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 148281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 148381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 14841cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon mAwContents.onWindowVisibilityChanged(visibility); 148546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 148646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 148746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 1488c8523c99833f364c64744d60e408510fb83b998bKristian Monsen public void onDraw(final Canvas canvas) { 1489c8523c99833f364c64744d60e408510fb83b998bKristian Monsen if (!ThreadUtils.runningOnUiThread()) { 14904fb262f34ba888eaacc24a83d94a56b8d7bcef2bKristian Monsen runVoidTaskOnUiThreadBlocking(new Runnable() { 1491c8523c99833f364c64744d60e408510fb83b998bKristian Monsen @Override 1492c8523c99833f364c64744d60e408510fb83b998bKristian Monsen public void run() { 1493c8523c99833f364c64744d60e408510fb83b998bKristian Monsen onDraw(canvas); 1494c8523c99833f364c64744d60e408510fb83b998bKristian Monsen } 1495c8523c99833f364c64744d60e408510fb83b998bKristian Monsen }); 1496c8523c99833f364c64744d60e408510fb83b998bKristian Monsen return; 1497c8523c99833f364c64744d60e408510fb83b998bKristian Monsen } 14987ab33360e331e04f515d532064670e210d174a7aTao Bai mAwContents.onDraw(canvas); 149946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 150046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 150146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 150281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void setLayoutParams(final ViewGroup.LayoutParams layoutParams) { 150381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen if (!ThreadUtils.runningOnUiThread()) { 150481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen ThreadUtils.postOnUiThread(new Runnable() { 150581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 150681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 150781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen setLayoutParams(layoutParams); 150881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 150981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 151081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 151181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 151246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mWebViewPrivate.super_setLayoutParams(layoutParams); 151346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 151446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 151546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 151646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean performLongClick() { 15172c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen if (!ThreadUtils.runningOnUiThread()) { 15182c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen boolean ret = runOnUiThreadBlocking(new Callable<Boolean>() { 15192c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 15202c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public Boolean call() { 15212c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return performLongClick(); 15222c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 15232c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 15242c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 15252c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 1526decc147cebc8f73d355c024d92c60d3f727cab31Bo Liu return mWebViewPrivate.super_performLongClick(); 152746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 152846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 152946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 153081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void onConfigurationChanged(final Configuration newConfig) { 153181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen if (!ThreadUtils.runningOnUiThread()) { 153281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen ThreadUtils.postOnUiThread(new Runnable() { 153381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 153481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 153581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen onConfigurationChanged(newConfig); 153681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 153781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 153881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 153981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 15401cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon mAwContents.onConfigurationChanged(newConfig); 154146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 154246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 154346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 15442c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public InputConnection onCreateInputConnection(final EditorInfo outAttrs) { 15452c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen if (!ThreadUtils.runningOnUiThread()) { 15462c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen InputConnection ret = runOnUiThreadBlocking(new Callable<InputConnection>() { 15472c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 15482c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public InputConnection call() { 15492c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return onCreateInputConnection(outAttrs); 15502c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 15512c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 15522c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 15532c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 15547cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.onCreateInputConnection(outAttrs); 155546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 155646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 155746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 15582c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public boolean onKeyMultiple(final int keyCode, final int repeatCount, final KeyEvent event) { 15592c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen if (!ThreadUtils.runningOnUiThread()) { 15602c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen boolean ret = runOnUiThreadBlocking(new Callable<Boolean>() { 15612c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 15622c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public Boolean call() { 15632c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return onKeyMultiple(keyCode, repeatCount, event); 15642c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 15652c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 15662c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 15672c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 156846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) UnimplementedWebViewApi.invoke(); 156946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return false; 157046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 157146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 157246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 15732c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public boolean onKeyDown(final int keyCode, final KeyEvent event) { 15742c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen if (!ThreadUtils.runningOnUiThread()) { 15752c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen boolean ret = runOnUiThreadBlocking(new Callable<Boolean>() { 15762c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 15772c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public Boolean call() { 15782c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return onKeyDown(keyCode, event); 15792c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 15802c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 15812c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 15822c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 158346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) UnimplementedWebViewApi.invoke(); 158446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return false; 158546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 158646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 158746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 15882c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public boolean onKeyUp(final int keyCode, final KeyEvent event) { 15892c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen if (!ThreadUtils.runningOnUiThread()) { 15902c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen boolean ret = runOnUiThreadBlocking(new Callable<Boolean>() { 15912c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 15922c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public Boolean call() { 15932c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return onKeyUp(keyCode, event); 15942c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 15952c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 15962c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 15972c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 15987cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.onKeyUp(keyCode, event); 159946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 160046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 160146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 160246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void onAttachedToWindow() { 160381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen if (!ThreadUtils.runningOnUiThread()) { 160481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen ThreadUtils.postOnUiThread(new Runnable() { 160581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 160681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 160781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen onAttachedToWindow(); 160881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 160981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 161081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 161181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 16121cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon mAwContents.onAttachedToWindow(); 161346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 161446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 161546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 161646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void onDetachedFromWindow() { 161781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen if (!ThreadUtils.runningOnUiThread()) { 161881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen ThreadUtils.postOnUiThread(new Runnable() { 161981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 162081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 162181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen onDetachedFromWindow(); 162281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 162381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 162481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 162581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 16261cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon mAwContents.onDetachedFromWindow(); 1627a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon if (mGLfunctor != null) { 1628a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon mGLfunctor.detach(); 1629a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon } 163046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 163146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 163246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 163381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void onVisibilityChanged(final View changedView, final int visibility) { 163481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen if (!ThreadUtils.runningOnUiThread()) { 163581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen ThreadUtils.postOnUiThread(new Runnable() { 163681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 163781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 163881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen onVisibilityChanged(changedView, visibility); 163981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 164081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 164181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 164281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 1643c346a83062dfbf50ac2275813ccb2e36f9e778e9Martin Kosiba // The AwContents will find out the container view visibility before the first draw so we 1644c346a83062dfbf50ac2275813ccb2e36f9e778e9Martin Kosiba // can safely ignore onVisibilityChanged callbacks that happen before init(). 1645c346a83062dfbf50ac2275813ccb2e36f9e778e9Martin Kosiba if (mAwContents != null) { 1646c346a83062dfbf50ac2275813ccb2e36f9e778e9Martin Kosiba mAwContents.onVisibilityChanged(changedView, visibility); 1647c346a83062dfbf50ac2275813ccb2e36f9e778e9Martin Kosiba } 164846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 164946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 165046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 165181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void onWindowFocusChanged(final boolean hasWindowFocus) { 165281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen if (!ThreadUtils.runningOnUiThread()) { 165381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen ThreadUtils.postOnUiThread(new Runnable() { 165481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 165581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 165681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen onWindowFocusChanged(hasWindowFocus); 165781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 165881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 165981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 166081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 16611cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon mAwContents.onWindowFocusChanged(hasWindowFocus); 166246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 166346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 166446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 166581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void onFocusChanged(final boolean focused, final int direction, 166681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen final Rect previouslyFocusedRect) { 166781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen if (!ThreadUtils.runningOnUiThread()) { 166881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen ThreadUtils.postOnUiThread(new Runnable() { 166981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 167081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 167181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen onFocusChanged(focused, direction, previouslyFocusedRect); 167281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 167381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 167481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 167581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 16761cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon mAwContents.onFocusChanged(focused, direction, previouslyFocusedRect); 167746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 167846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 167946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 16802c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public boolean setFrame(final int left, final int top, final int right, final int bottom) { 16812c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen if (!ThreadUtils.runningOnUiThread()) { 16822c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen boolean ret = runOnUiThreadBlocking(new Callable<Boolean>() { 16832c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 16842c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public Boolean call() { 16852c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return setFrame(left, top, right, bottom); 16862c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 16872c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 16882c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 16892c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 169046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return mWebViewPrivate.super_setFrame(left, top, right, bottom); 169146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 169246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 169346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 169481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void onSizeChanged(final int w, final int h, final int ow, final int oh) { 169581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen if (!ThreadUtils.runningOnUiThread()) { 169681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen ThreadUtils.postOnUiThread(new Runnable() { 169781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 169881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 169981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen onSizeChanged(w, h, ow, oh); 170081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 170181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 170281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 170381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 17041cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon mAwContents.onSizeChanged(w, h, ow, oh); 170546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 170646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 170746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 170846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void onScrollChanged(int l, int t, int oldl, int oldt) { 170946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 171046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 171146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 17122c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public boolean dispatchKeyEvent(final KeyEvent event) { 17132c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen if (!ThreadUtils.runningOnUiThread()) { 17142c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen boolean ret = runOnUiThreadBlocking(new Callable<Boolean>() { 17152c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 17162c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public Boolean call() { 17172c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return dispatchKeyEvent(event); 17182c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 17192c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 17202c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 17212c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 17227cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.dispatchKeyEvent(event); 172346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 172446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 172546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 17262c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public boolean onTouchEvent(final MotionEvent ev) { 17272c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen if (!ThreadUtils.runningOnUiThread()) { 17282c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen boolean ret = runOnUiThreadBlocking(new Callable<Boolean>() { 17292c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 17302c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public Boolean call() { 17312c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return onTouchEvent(ev); 17322c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 17332c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 17342c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 17352c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 1736c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu return mAwContents.onTouchEvent(ev); 173746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 173846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 173946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 17402c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public boolean onHoverEvent(final MotionEvent event) { 17412c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen if (!ThreadUtils.runningOnUiThread()) { 17422c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen boolean ret = runOnUiThreadBlocking(new Callable<Boolean>() { 17432c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 17442c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public Boolean call() { 17452c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return onHoverEvent(event); 17462c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 17472c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 17482c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 17492c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 1750c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu return mAwContents.onHoverEvent(event); 175146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 175246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 175346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 17542c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public boolean onGenericMotionEvent(final MotionEvent event) { 17552c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen if (!ThreadUtils.runningOnUiThread()) { 17562c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen boolean ret = runOnUiThreadBlocking(new Callable<Boolean>() { 17572c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 17582c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public Boolean call() { 17592c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return onGenericMotionEvent(event); 17602c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 17612c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 17622c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 17632c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 1764c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu return mAwContents.onGenericMotionEvent(event); 176546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 176646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 176746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 176846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean onTrackballEvent(MotionEvent ev) { 176946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // Trackball event not handled, which eventually gets converted to DPAD keyevents 177046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return false; 177146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 177246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 177346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 17742c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public boolean requestFocus(final int direction, final Rect previouslyFocusedRect) { 17752c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen if (!ThreadUtils.runningOnUiThread()) { 17762c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen boolean ret = runOnUiThreadBlocking(new Callable<Boolean>() { 17772c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 17782c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public Boolean call() { 17792c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return requestFocus(direction, previouslyFocusedRect); 17802c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 17812c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 17822c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 17832c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 17844cee3bf50c125a52a49323aa999f4b619fa18c10Ben Murdoch mAwContents.requestFocus(); 178546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return mWebViewPrivate.super_requestFocus(direction, previouslyFocusedRect); 178646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 178746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 178846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 178981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec) { 179081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen if (!ThreadUtils.runningOnUiThread()) { 179181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen ThreadUtils.postOnUiThread(new Runnable() { 179281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 179381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 179481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen onMeasure(widthMeasureSpec, heightMeasureSpec); 179581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 179681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 179781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 179881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 1799d7bf6ab0cd8cc4005b112e4358eb797bb178a85fMarcin Kosiba mAwContents.onMeasure(widthMeasureSpec, heightMeasureSpec); 180046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 180146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 180246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 18032c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public boolean requestChildRectangleOnScreen(final View child, final Rect rect, 18042c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen final boolean immediate) { 18052c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen if (!ThreadUtils.runningOnUiThread()) { 18062c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen boolean ret = runOnUiThreadBlocking(new Callable<Boolean>() { 18072c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 18082c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public Boolean call() { 18092c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return requestChildRectangleOnScreen(child, rect, immediate); 18102c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 18112c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 18122c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 18132c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 18141f76368786ae12898311d148b0057403db2fb36aMartin Kosiba return mAwContents.requestChildRectangleOnScreen(child, rect, immediate); 181546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 181646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 181746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 181857b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen public void setBackgroundColor(final int color) { 181981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen if (!ThreadUtils.runningOnUiThread()) { 182057b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen ThreadUtils.postOnUiThread(new Runnable() { 182157b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen @Override 182257b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen public void run() { 182381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen setBackgroundColor(color); 182457b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen } 182557b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen }); 182681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 182757b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen } 182881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen mAwContents.setBackgroundColor(color); 182946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 183046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 183146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 183246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void setLayerType(int layerType, Paint paint) { 1833f2b715bee3bb3a41e59f80ae53b45f249d9559c5Kristian Monsen // Intentional no-op 183446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 183546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 183681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen // Remove from superclass 183746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void preDispatchDraw(Canvas canvas) { 18380b528e4924a7c14687181185bc66173ad18f00eaLeandro Gracia Gil // TODO(leandrogracia): remove this method from WebViewProvider if we think 18390b528e4924a7c14687181185bc66173ad18f00eaLeandro Gracia Gil // we won't need it again. 184046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 184146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 184246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // WebViewProvider.ScrollDelegate implementation ---------------------------------------------- 184346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 184446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 184546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public int computeHorizontalScrollRange() { 18462c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen if (!ThreadUtils.runningOnUiThread()) { 18472c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen int ret = runOnUiThreadBlocking(new Callable<Integer>() { 18482c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 18492c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public Integer call() { 18502c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return computeHorizontalScrollRange(); 18512c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 18522c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 18532c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 18542c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 18557cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.computeHorizontalScrollRange(); 185646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 185746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 185846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 185946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public int computeHorizontalScrollOffset() { 18602c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen if (!ThreadUtils.runningOnUiThread()) { 18612c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen int ret = runOnUiThreadBlocking(new Callable<Integer>() { 18622c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 18632c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public Integer call() { 18642c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return computeHorizontalScrollOffset(); 18652c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 18662c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 18672c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 18682c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 18697cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.computeHorizontalScrollOffset(); 187046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 187146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 187246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 187346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public int computeVerticalScrollRange() { 18742c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen if (!ThreadUtils.runningOnUiThread()) { 18752c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen int ret = runOnUiThreadBlocking(new Callable<Integer>() { 18762c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 18772c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public Integer call() { 18782c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return computeVerticalScrollRange(); 18792c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 18802c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 18812c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 18822c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 18837cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.computeVerticalScrollRange(); 188446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 188546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 188646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 188746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public int computeVerticalScrollOffset() { 18882c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen if (!ThreadUtils.runningOnUiThread()) { 18892c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen int ret = runOnUiThreadBlocking(new Callable<Integer>() { 18902c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 18912c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public Integer call() { 18922c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return computeVerticalScrollOffset(); 18932c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 18942c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 18952c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 18962c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 18977cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.computeVerticalScrollOffset(); 189846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 189946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 190046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 190146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public int computeVerticalScrollExtent() { 19022c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen if (!ThreadUtils.runningOnUiThread()) { 19032c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen int ret = runOnUiThreadBlocking(new Callable<Integer>() { 19042c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 19052c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public Integer call() { 19062c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return computeVerticalScrollExtent(); 19072c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 19082c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 19092c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 19102c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 19117cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.computeVerticalScrollExtent(); 191246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 191346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 191446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 191546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void computeScroll() { 191681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen if (!ThreadUtils.runningOnUiThread()) { 191781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen ThreadUtils.postOnUiThread(new Runnable() { 191881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 191981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 192081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen computeScroll(); 192181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 192281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 192381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 192481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 19252a120ba09921dbb1e8354ecbc4a6e063ec891101Martin Kosiba mAwContents.computeScroll(); 192646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 192746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 19284702a6de6031477029de5e6f5777c8b3e7846d35Marcin Kosiba // AwContents.InternalAccessDelegate implementation -------------------------------------- 19294702a6de6031477029de5e6f5777c8b3e7846d35Marcin Kosiba private class InternalAccessAdapter implements AwContents.InternalAccessDelegate { 193046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 193146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean drawChild(Canvas arg0, View arg1, long arg2) { 193246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) UnimplementedWebViewApi.invoke(); 193346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return false; 193446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 193546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 193646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 193746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean super_onKeyUp(int arg0, KeyEvent arg1) { 1938f2b715bee3bb3a41e59f80ae53b45f249d9559c5Kristian Monsen // Intentional no-op 193946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return false; 194046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 194146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 194246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 194346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean super_dispatchKeyEventPreIme(KeyEvent arg0) { 194446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) UnimplementedWebViewApi.invoke(); 194546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return false; 194646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 194746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 194846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 194946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean super_dispatchKeyEvent(KeyEvent event) { 195046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return mWebViewPrivate.super_dispatchKeyEvent(event); 195146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 195246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 195346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 195446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean super_onGenericMotionEvent(MotionEvent arg0) { 195546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) UnimplementedWebViewApi.invoke(); 195646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return false; 195746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 195846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 195946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 196046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void super_onConfigurationChanged(Configuration arg0) { 1961f2b715bee3bb3a41e59f80ae53b45f249d9559c5Kristian Monsen // Intentional no-op 196246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 196346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 1964bd819ca872a1711e4607ef11cd8b0b2156241897Martin Kosiba @Override 19650088640069ac3ed389f4d78582966248b0869ce9Martin Kosiba public int super_getScrollBarStyle() { 19660088640069ac3ed389f4d78582966248b0869ce9Martin Kosiba return mWebViewPrivate.super_getScrollBarStyle(); 19670088640069ac3ed389f4d78582966248b0869ce9Martin Kosiba } 19680088640069ac3ed389f4d78582966248b0869ce9Martin Kosiba 196946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 197046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean awakenScrollBars() { 197146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mWebViewPrivate.awakenScrollBars(0); 197246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // TODO: modify the WebView.PrivateAccess to provide a return value. 197346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return true; 197446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 197546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 197646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 197746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean super_awakenScrollBars(int arg0, boolean arg1) { 197846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // TODO: need method on WebView.PrivateAccess? 197946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) UnimplementedWebViewApi.invoke(); 198046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return false; 198146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 19824702a6de6031477029de5e6f5777c8b3e7846d35Marcin Kosiba 1983d7bf6ab0cd8cc4005b112e4358eb797bb178a85fMarcin Kosiba @Override 19842a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba public void onScrollChanged(int l, int t, int oldl, int oldt) { 19852a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba mWebViewPrivate.setScrollXRaw(l); 19862a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba mWebViewPrivate.setScrollYRaw(t); 19872a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba mWebViewPrivate.onScrollChanged(l, t, oldl, oldt); 19882a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba } 19892a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba 19903951fbadf5157dd3fe73decc879f9b763e780b09Martin Kosiba @Override 19912a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba public void overScrollBy(int deltaX, int deltaY, 19922a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba int scrollX, int scrollY, 19932a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba int scrollRangeX, int scrollRangeY, 19942a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba int maxOverScrollX, int maxOverScrollY, 19952a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba boolean isTouchEvent) { 19962a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba mWebViewPrivate.overScrollBy(deltaX, deltaY, scrollX, scrollY, 19972a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba scrollRangeX, scrollRangeY, maxOverScrollX, maxOverScrollY, isTouchEvent); 19982a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba } 19992a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba 20003951fbadf5157dd3fe73decc879f9b763e780b09Martin Kosiba @Override 20012a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba public void super_scrollTo(int scrollX, int scrollY) { 20022a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba mWebViewPrivate.super_scrollTo(scrollX, scrollY); 20032a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba } 20042a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba 20052a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba @Override 20064702a6de6031477029de5e6f5777c8b3e7846d35Marcin Kosiba public void setMeasuredDimension(int measuredWidth, int measuredHeight) { 20074702a6de6031477029de5e6f5777c8b3e7846d35Marcin Kosiba mWebViewPrivate.setMeasuredDimension(measuredWidth, measuredHeight); 20084702a6de6031477029de5e6f5777c8b3e7846d35Marcin Kosiba } 200951f7cf16cd02f14050bb723175a2a57570e8486dTao Bai 20107ab33360e331e04f515d532064670e210d174a7aTao Bai @Override 201151f7cf16cd02f14050bb723175a2a57570e8486dTao Bai public boolean requestDrawGL(Canvas canvas) { 20127ab33360e331e04f515d532064670e210d174a7aTao Bai if (mGLfunctor == null) { 20137ab33360e331e04f515d532064670e210d174a7aTao Bai mGLfunctor = new DrawGLFunctor(mAwContents.getAwDrawGLViewContext()); 20147ab33360e331e04f515d532064670e210d174a7aTao Bai } 201551f7cf16cd02f14050bb723175a2a57570e8486dTao Bai return mGLfunctor.requestDrawGL((HardwareCanvas)canvas, mWebView.getViewRootImpl()); 201651f7cf16cd02f14050bb723175a2a57570e8486dTao Bai } 201746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 201846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)} 2019