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; 2930c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdochimport android.os.Looper; 3046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.os.Message; 31412d84be859ce0eb91baf2f9afe5e6326a15d76aSelim Gurunimport android.print.PrintDocumentAdapter; 3219bc90be698e6d86ec6c77ea8b43bb6778bcc89dJonathan Dixonimport android.text.TextUtils; 33efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdochimport android.util.Base64; 34e78d6e40e4e78671e6621ba8cf49835568704899Jonathan Dixonimport android.util.Log; 35a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixonimport android.view.HardwareCanvas; 3646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.KeyEvent; 3746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.MotionEvent; 3846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.View; 3946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.ViewGroup; 4046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.accessibility.AccessibilityEvent; 4146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.accessibility.AccessibilityNodeInfo; 425c990caf9c0237064dab94059f6c46fc2d51cd97Ben Murdochimport android.view.accessibility.AccessibilityNodeProvider; 4346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.inputmethod.EditorInfo; 4446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.inputmethod.InputConnection; 4546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.DownloadListener; 466d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdochimport android.webkit.FindActionModeCallback; 477db34d3dcaac936566f912e1b0b21f3f103029ffJonathan Dixonimport android.webkit.JavascriptInterface; 4846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.ValueCallback; 4946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.WebBackForwardList; 5046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.WebChromeClient; 5146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.WebSettings; 5246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.WebView; 5346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.WebViewClient; 5446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.WebViewProvider; 5533e1eeae98299666b8c2d1e879f92d1c83fe33fbBen Murdochimport android.widget.TextView; 5646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 57aa8b39f3e3f208586f3750d7278f1239a09ebd32Kristian Monsenimport org.chromium.android_webview.AwBrowserContext; 5846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import org.chromium.android_webview.AwContents; 59ffabf2e121746d06b9930b1ae8fea243c4f5cb9dMikhail Naganovimport org.chromium.android_webview.AwLayoutSizer; 60a8d0ef2693c3bcd4a091cc7fa49b69b54e3472c4Selim Gurunimport org.chromium.android_webview.AwPdfExportAttributes; 61412d84be859ce0eb91baf2f9afe5e6326a15d76aSelim Gurunimport org.chromium.android_webview.AwPrintDocumentAdapter; 6230c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdochimport org.chromium.android_webview.AwSettings; 63a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsenimport org.chromium.base.ThreadUtils; 6446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import org.chromium.content.browser.LoadUrlParams; 6546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import org.chromium.net.NetworkChangeNotifier; 6646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 6746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import java.io.BufferedWriter; 6846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import java.io.File; 69ea844f60b1b559788566fe6e004b1eeca53a8039Jonathan Dixonimport java.lang.annotation.Annotation; 702c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsenimport java.util.concurrent.Callable; 7130c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdochimport java.util.concurrent.ConcurrentLinkedQueue; 724fb262f34ba888eaacc24a83d94a56b8d7bcef2bKristian Monsenimport java.util.concurrent.FutureTask; 734fb262f34ba888eaacc24a83d94a56b8d7bcef2bKristian Monsenimport java.util.concurrent.TimeUnit; 74b8281877c710018a3bc8066be17b1e11822be015Selim Gurunimport java.util.HashMap; 7546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import java.util.Map; 7630c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdochimport java.util.Queue; 7746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 7846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)/** 7946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * This class is the delegate to which WebViewProxy forwards all API calls. 8046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * 811cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon * Most of the actual functionality is implemented by AwContents (or ContentViewCore within 821cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon * it). This class also contains WebView-specific APIs that require the creation of other 831cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon * adapters (otherwise org.chromium.content would depend on the webview.chromium package) 841cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon * and a small set of no-op deprecated APIs. 8546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) */ 8646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)class WebViewChromium implements WebViewProvider, 8746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) WebViewProvider.ScrollDelegate, WebViewProvider.ViewDelegate { 88e78d6e40e4e78671e6621ba8cf49835568704899Jonathan Dixon 8930c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch private class WebViewChromiumRunQueue { 9030c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch public WebViewChromiumRunQueue() { 9130c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mQueue = new ConcurrentLinkedQueue<Runnable>(); 9230c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch } 9330c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch 9430c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch public void addTask(Runnable task) { 9530c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mQueue.add(task); 9630c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (mFactory.hasStarted()) { 9730c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch ThreadUtils.runOnUiThread(new Runnable() { 9830c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch @Override 9930c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch public void run() { 10030c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch drainQueue(); 10130c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch } 10230c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch }); 10330c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch } 10430c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch } 10530c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch 10630c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch public void drainQueue() { 10730c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (mQueue == null || mQueue.isEmpty()) { 10830c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch return; 10930c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch } 11030c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch 11130c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch Runnable task = mQueue.poll(); 11230c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch while(task != null) { 11330c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch task.run(); 11430c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch task = mQueue.poll(); 11530c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch } 11630c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch } 11730c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch 11830c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch private Queue<Runnable> mQueue; 11930c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch } 12030c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch 12130c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch private WebViewChromiumRunQueue mRunQueue; 12230c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch 123e78d6e40e4e78671e6621ba8cf49835568704899Jonathan Dixon private static final String TAG = WebViewChromium.class.getSimpleName(); 124e78d6e40e4e78671e6621ba8cf49835568704899Jonathan Dixon 12546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // The WebView that this WebViewChromium is the provider for. 12646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) WebView mWebView; 12746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // Lets us access protected View-derived methods on the WebView instance we're backing. 12846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) WebView.PrivateAccess mWebViewPrivate; 12946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // The client adapter class. 13046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) private WebViewContentsClientAdapter mContentsClientAdapter; 13146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 13246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // Variables for functionality provided by this adapter --------------------------------------- 13330c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch private ContentSettingsAdapter mWebSettings; 1343949435b480cb71106f65b237025da359cf8a8caBen Murdoch // The WebView wrapper for ContentViewCore and required browser compontents. 13546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) private AwContents mAwContents; 136a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon // Non-null if this webview is using the GL accelerated draw path. 137a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon private DrawGLFunctor mGLfunctor; 13846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 139c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu private final WebView.HitTestResult mHitTestResult; 140c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu 1416ef347a29d692df672aaf59ee4926a476288476aBen Murdoch private final int mAppTargetSdkVersion; 1426ef347a29d692df672aaf59ee4926a476288476aBen Murdoch 14330c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch private WebViewChromiumFactoryProvider mFactory; 14430c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch 1454fb262f34ba888eaacc24a83d94a56b8d7bcef2bKristian Monsen // This does not touch any global / non-threadsafe state, but note that 1464fb262f34ba888eaacc24a83d94a56b8d7bcef2bKristian Monsen // init is ofter called right after and is NOT threadsafe. 14730c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch public WebViewChromium(WebViewChromiumFactoryProvider factory, WebView webView, 14830c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch WebView.PrivateAccess webViewPrivate) { 14946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mWebView = webView; 15046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mWebViewPrivate = webViewPrivate; 151c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu mHitTestResult = new WebView.HitTestResult(); 1526ef347a29d692df672aaf59ee4926a476288476aBen Murdoch mAppTargetSdkVersion = mWebView.getContext().getApplicationInfo().targetSdkVersion; 15330c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mFactory = factory; 15430c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mRunQueue = new WebViewChromiumRunQueue(); 15546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 15646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 1571ee9dd0420198429115c3fe8cf0b0502fab9cf62Ben Murdoch static void completeWindowCreation(WebView parent, WebView child) { 1581ee9dd0420198429115c3fe8cf0b0502fab9cf62Ben Murdoch AwContents parentContents = ((WebViewChromium) parent.getWebViewProvider()).mAwContents; 159bbfef40e5fc625f4821f012fae7f16468b7308cfJonathan Dixon AwContents childContents = 160bbfef40e5fc625f4821f012fae7f16468b7308cfJonathan Dixon child == null ? null : ((WebViewChromium) child.getWebViewProvider()).mAwContents; 1611ee9dd0420198429115c3fe8cf0b0502fab9cf62Ben Murdoch parentContents.supplyContentsForPopup(childContents); 16246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 16346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 16430c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch private <T> T runBlockingFuture(FutureTask<T> task) { 16530c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (!mFactory.hasStarted()) throw new RuntimeException("Must be started before we block!"); 1664fb262f34ba888eaacc24a83d94a56b8d7bcef2bKristian Monsen if (ThreadUtils.runningOnUiThread()) { 1674fb262f34ba888eaacc24a83d94a56b8d7bcef2bKristian Monsen throw new IllegalStateException("This method should only be called off the UI thread"); 1684fb262f34ba888eaacc24a83d94a56b8d7bcef2bKristian Monsen } 16930c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mRunQueue.addTask(task); 1704fb262f34ba888eaacc24a83d94a56b8d7bcef2bKristian Monsen try { 1712c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return task.get(4, TimeUnit.SECONDS); 17230c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch } catch (java.util.concurrent.TimeoutException e) { 1732c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen throw new RuntimeException("Probable deadlock detected due to WebView API being called " 1742c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen + "on incorrect thread while the UI thread is blocked.", e); 17530c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch } catch (Exception e) { 17630c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch throw new RuntimeException(e); 1774fb262f34ba888eaacc24a83d94a56b8d7bcef2bKristian Monsen } 1784fb262f34ba888eaacc24a83d94a56b8d7bcef2bKristian Monsen } 1794fb262f34ba888eaacc24a83d94a56b8d7bcef2bKristian Monsen 1802c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen // We have a 4 second timeout to try to detect deadlocks to detect and aid in debuggin 1812c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen // deadlocks. 1822c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen // Do not call this method while on the UI thread! 1832c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen private void runVoidTaskOnUiThreadBlocking(Runnable r) { 1842c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen FutureTask<Void> task = new FutureTask<Void>(r, null); 1852c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen runBlockingFuture(task); 1862c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 1872c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen 18830c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch private <T> T runOnUiThreadBlocking(Callable<T> c) { 1892c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return runBlockingFuture(new FutureTask<T>(c)); 1902c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 1912c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen 19246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // WebViewProvider methods -------------------------------------------------------------------- 19346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 19446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 19530c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch // BUG=6790250 |javaScriptInterfaces| was only ever used by the obsolete DumpRenderTree 19630c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch // so is ignored. TODO: remove it from WebViewProvider. 1974fb262f34ba888eaacc24a83d94a56b8d7bcef2bKristian Monsen public void init(final Map<String, Object> javaScriptInterfaces, 1984fb262f34ba888eaacc24a83d94a56b8d7bcef2bKristian Monsen final boolean privateBrowsing) { 1994dcabaef9151384b571327b62234409b31caef38Jonathan Dixon if (privateBrowsing) { 20030c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mFactory.startYourEngines(true); 2014dcabaef9151384b571327b62234409b31caef38Jonathan Dixon final String msg = "Private browsing is not supported in WebView."; 20230c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (mAppTargetSdkVersion >= Build.VERSION_CODES.KITKAT) { 2034dcabaef9151384b571327b62234409b31caef38Jonathan Dixon throw new IllegalArgumentException(msg); 2044dcabaef9151384b571327b62234409b31caef38Jonathan Dixon } else { 2054dcabaef9151384b571327b62234409b31caef38Jonathan Dixon Log.w(TAG, msg); 20633e1eeae98299666b8c2d1e879f92d1c83fe33fbBen Murdoch TextView warningLabel = new TextView(mWebView.getContext()); 20733e1eeae98299666b8c2d1e879f92d1c83fe33fbBen Murdoch warningLabel.setText(mWebView.getContext().getString( 20833e1eeae98299666b8c2d1e879f92d1c83fe33fbBen Murdoch com.android.internal.R.string.webviewchromium_private_browsing_warning)); 20933e1eeae98299666b8c2d1e879f92d1c83fe33fbBen Murdoch mWebView.addView(warningLabel); 2104dcabaef9151384b571327b62234409b31caef38Jonathan Dixon } 2114dcabaef9151384b571327b62234409b31caef38Jonathan Dixon } 2124dcabaef9151384b571327b62234409b31caef38Jonathan Dixon 213916f857e0af25e8b179f60f532065386607567d7Jonathan Dixon // We will defer real initialization until we know which thread to do it on, unless: 214916f857e0af25e8b179f60f532065386607567d7Jonathan Dixon // - we are on the main thread already (common case), 215916f857e0af25e8b179f60f532065386607567d7Jonathan Dixon // - the app is targeting >= JB MR2, in which case checkThread enforces that all usage 216916f857e0af25e8b179f60f532065386607567d7Jonathan Dixon // comes from a single thread. (Note in JB MR2 this exception was in WebView.java). 217916f857e0af25e8b179f60f532065386607567d7Jonathan Dixon if (mAppTargetSdkVersion >= Build.VERSION_CODES.JELLY_BEAN_MR2) { 218916f857e0af25e8b179f60f532065386607567d7Jonathan Dixon mFactory.startYourEngines(false); 219916f857e0af25e8b179f60f532065386607567d7Jonathan Dixon checkThread(); 220916f857e0af25e8b179f60f532065386607567d7Jonathan Dixon } else if (!mFactory.hasStarted()) { 22130c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (Looper.myLooper() == Looper.getMainLooper()) { 22230c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mFactory.startYourEngines(true); 22330c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch } 22430c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch } 22530c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch 22630c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch final boolean isAccessFromFileURLsGrantedByDefault = 22730c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mAppTargetSdkVersion < Build.VERSION_CODES.JELLY_BEAN; 22830c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch final boolean areLegacyQuirksEnabled = 22930c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mAppTargetSdkVersion < Build.VERSION_CODES.KITKAT; 23054bae732019ac13327c0a68a6f8a82548d73ea9eBen Murdoch 23130c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mContentsClientAdapter = new WebViewContentsClientAdapter(mWebView); 23230c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mWebSettings = new ContentSettingsAdapter(new AwSettings( 23330c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mWebView.getContext(), isAccessFromFileURLsGrantedByDefault, 23430c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch areLegacyQuirksEnabled)); 23530c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch 23630c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mRunQueue.addTask(new Runnable() { 23730c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch @Override 23830c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch public void run() { 23930c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch initForReal(); 24030c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (privateBrowsing) { 24130c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch // Intentionally irreversibly disable the webview instance, so that private 24230c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch // user data cannot leak through misuse of a non-privateBrowing WebView 24330c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch // instance. Can't just null out mAwContents as we never null-check it 24430c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch // before use. 24530c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch destroy(); 24630c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch } 24730c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch } 24830c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch }); 24930c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch } 25030c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch 25130c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch private void initForReal() { 25230c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mAwContents = new AwContents(mFactory.getBrowserContext(), mWebView, 25330c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch new InternalAccessAdapter(), mContentsClientAdapter, new AwLayoutSizer(), 25430c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mWebSettings.getAwSettings()); 25554bae732019ac13327c0a68a6f8a82548d73ea9eBen Murdoch 25654bae732019ac13327c0a68a6f8a82548d73ea9eBen Murdoch if (mAppTargetSdkVersion >= Build.VERSION_CODES.KITKAT) { 25754bae732019ac13327c0a68a6f8a82548d73ea9eBen Murdoch // On KK and above, favicons are automatically downloaded as the method 25854bae732019ac13327c0a68a6f8a82548d73ea9eBen Murdoch // old apps use to enable that behavior is deprecated. 25954bae732019ac13327c0a68a6f8a82548d73ea9eBen Murdoch AwContents.setShouldDownloadFavicons(); 26054bae732019ac13327c0a68a6f8a82548d73ea9eBen Murdoch } 26130c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch } 26230c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch 26330c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch void startYourEngine() { 26430c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mRunQueue.drainQueue(); 26546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 26646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 26757b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen private RuntimeException createThreadException() { 2681a692d93c0172dc09a316bbf9a54896f1d40234fKristian Monsen return new IllegalStateException( 2691a692d93c0172dc09a316bbf9a54896f1d40234fKristian Monsen "Calling View methods on another thread than the UI thread."); 27057b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen } 27157b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen 27230c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch private boolean checkNeedsPost() { 27330c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch boolean needsPost = !mFactory.hasStarted() || !ThreadUtils.runningOnUiThread(); 27430c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (!needsPost && mAwContents == null) { 27530c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch throw new IllegalStateException( 27630c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch "AwContents must be created if we are not posting!"); 27730c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch } 27830c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch return needsPost; 27930c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch } 28030c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch 28162389e2d66a99e936652092333782947e363241dKristian Monsen // Intentionally not static, as no need to check thread on static methods 28262389e2d66a99e936652092333782947e363241dKristian Monsen private void checkThread() { 28362389e2d66a99e936652092333782947e363241dKristian Monsen if (!ThreadUtils.runningOnUiThread()) { 28457b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen final RuntimeException threadViolation = createThreadException(); 28557b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen ThreadUtils.postOnUiThread(new Runnable() { 28657b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen @Override 28757b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen public void run() { 28857b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen throw threadViolation; 28957b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen } 29057b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen }); 291ab73853ea633a4ada353f5a2321c6bf0e6c108e5Kristian Monsen throw createThreadException(); 29262389e2d66a99e936652092333782947e363241dKristian Monsen } 29362389e2d66a99e936652092333782947e363241dKristian Monsen } 29462389e2d66a99e936652092333782947e363241dKristian Monsen 29546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 29681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void setHorizontalScrollbarOverlay(final boolean overlay) { 29730c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 29830c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mRunQueue.addTask(new Runnable() { 29981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 30081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 30181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen setHorizontalScrollbarOverlay(overlay); 30281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 30381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 30481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 30581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 306bd819ca872a1711e4607ef11cd8b0b2156241897Martin Kosiba mAwContents.setHorizontalScrollbarOverlay(overlay); 30746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 30846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 30946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 31081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void setVerticalScrollbarOverlay(final boolean overlay) { 31130c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 31230c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mRunQueue.addTask(new Runnable() { 31381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 31481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 31581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen setVerticalScrollbarOverlay(overlay); 31681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 31781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 31881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 31981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 320bd819ca872a1711e4607ef11cd8b0b2156241897Martin Kosiba mAwContents.setVerticalScrollbarOverlay(overlay); 32146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 32246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 32346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 32446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean overlayHorizontalScrollbar() { 32530c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mFactory.startYourEngines(false); 32630c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 3272c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen boolean ret = runOnUiThreadBlocking(new Callable<Boolean>() { 3282c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 3292c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public Boolean call() { 3302c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return overlayHorizontalScrollbar(); 3312c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 3322c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 3332c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 3342c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 335bd819ca872a1711e4607ef11cd8b0b2156241897Martin Kosiba return mAwContents.overlayHorizontalScrollbar(); 33646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 33746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 33846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 33946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean overlayVerticalScrollbar() { 34030c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mFactory.startYourEngines(false); 34130c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 3422c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen boolean ret = runOnUiThreadBlocking(new Callable<Boolean>() { 3432c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 3442c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public Boolean call() { 3452c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return overlayVerticalScrollbar(); 3462c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 3472c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 3482c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 3492c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 350bd819ca872a1711e4607ef11cd8b0b2156241897Martin Kosiba return mAwContents.overlayVerticalScrollbar(); 35146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 35246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 35346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 35446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public int getVisibleTitleHeight() { 35546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // This is deprecated in WebView and should always return 0. 35646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return 0; 35746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 35846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 35946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 36046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public SslCertificate getCertificate() { 36130c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mFactory.startYourEngines(true); 36230c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 3632c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen SslCertificate ret = runOnUiThreadBlocking(new Callable<SslCertificate>() { 3642c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 3652c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public SslCertificate call() { 3662c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return getCertificate(); 3672c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 3682c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 3692c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 3702c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 37146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return mAwContents.getCertificate(); 37246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 37346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 37446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 37546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void setCertificate(SslCertificate certificate) { 37681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen // intentional no-op 37746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 37846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 37946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 38046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void savePassword(String host, String username, String password) { 381adc6c4d74c77a617100bdfeb174ab0c314b24ea8Selim Gurun // This is a deprecated API: intentional no-op. 38246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 38346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 38446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 38581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void setHttpAuthUsernamePassword(final String host, final String realm, 38681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen final String username, final String password) { 38730c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 38830c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mRunQueue.addTask(new Runnable() { 38981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 39081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 39181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen setHttpAuthUsernamePassword(host, realm, username, password); 39281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 39381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 39481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 39581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 39646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mAwContents.setHttpAuthUsernamePassword(host, realm, username, password); 39746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 39846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 39946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 4002c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public String[] getHttpAuthUsernamePassword(final String host, final String realm) { 40130c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mFactory.startYourEngines(true); 40230c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 4032c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen String[] ret = runOnUiThreadBlocking(new Callable<String[]>() { 4042c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 4052c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public String[] call() { 4062c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return getHttpAuthUsernamePassword(host, realm); 4072c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 4082c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 4092c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 4102c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 41146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return mAwContents.getHttpAuthUsernamePassword(host, realm); 41246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 41346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 41446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 41546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void destroy() { 41630c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 41730c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mRunQueue.addTask(new Runnable() { 418370194f596d6ed2b410d67a65782e5a6dc24a4e3Kristian Monsen @Override 419370194f596d6ed2b410d67a65782e5a6dc24a4e3Kristian Monsen public void run() { 420370194f596d6ed2b410d67a65782e5a6dc24a4e3Kristian Monsen destroy(); 421370194f596d6ed2b410d67a65782e5a6dc24a4e3Kristian Monsen } 422370194f596d6ed2b410d67a65782e5a6dc24a4e3Kristian Monsen }); 423370194f596d6ed2b410d67a65782e5a6dc24a4e3Kristian Monsen return; 424370194f596d6ed2b410d67a65782e5a6dc24a4e3Kristian Monsen } 425370194f596d6ed2b410d67a65782e5a6dc24a4e3Kristian Monsen 4263949435b480cb71106f65b237025da359cf8a8caBen Murdoch mAwContents.destroy(); 427a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon if (mGLfunctor != null) { 428a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon mGLfunctor.destroy(); 429a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon mGLfunctor = null; 430a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon } 43146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 43246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 43346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 43481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void setNetworkAvailable(final boolean networkUp) { 4350363422b19ca6263dbfbcd0d9daa6d1abe5c6892Ben Murdoch // Note that this purely toggles the JS navigator.online property. 4360363422b19ca6263dbfbcd0d9daa6d1abe5c6892Ben Murdoch // It does not in affect chromium or network stack state in any way. 43730c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 43830c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mRunQueue.addTask(new Runnable() { 43981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 44081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 44181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen setNetworkAvailable(networkUp); 44281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 44381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 44481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 44581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 4460363422b19ca6263dbfbcd0d9daa6d1abe5c6892Ben Murdoch mAwContents.setNetworkAvailable(networkUp); 44746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 44846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 44946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 4502c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public WebBackForwardList saveState(final Bundle outState) { 45130c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mFactory.startYourEngines(true); 45230c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 4532c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen WebBackForwardList ret = runOnUiThreadBlocking(new Callable<WebBackForwardList>() { 4542c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 4552c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public WebBackForwardList call() { 4562c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return saveState(outState); 4572c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 4582c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 4592c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 4602c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 461a08e8aada16dc4dbfb8745532169fb4a8347541dBo Liu if (outState == null) return null; 462a08e8aada16dc4dbfb8745532169fb4a8347541dBo Liu if (!mAwContents.saveState(outState)) return null; 463a08e8aada16dc4dbfb8745532169fb4a8347541dBo Liu return copyBackForwardList(); 46446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 46546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 46646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 46746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean savePicture(Bundle b, File dest) { 4689405536501747e2d7b4fc46a33e5f0a1e7fd47acJonathan Dixon // Intentional no-op: hidden method on WebView. 46946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return false; 47046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 47146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 47246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 47346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean restorePicture(Bundle b, File src) { 4749405536501747e2d7b4fc46a33e5f0a1e7fd47acJonathan Dixon // Intentional no-op: hidden method on WebView. 47546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return false; 47646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 47746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 47846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 4792c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public WebBackForwardList restoreState(final Bundle inState) { 48030c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mFactory.startYourEngines(true); 48130c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 4822c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen WebBackForwardList ret = runOnUiThreadBlocking(new Callable<WebBackForwardList>() { 4832c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 4842c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public WebBackForwardList call() { 4852c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return restoreState(inState); 4862c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 4872c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 4882c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 4892c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 490a08e8aada16dc4dbfb8745532169fb4a8347541dBo Liu if (inState == null) return null; 491a08e8aada16dc4dbfb8745532169fb4a8347541dBo Liu if (!mAwContents.restoreState(inState)) return null; 492a08e8aada16dc4dbfb8745532169fb4a8347541dBo Liu return copyBackForwardList(); 49346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 49446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 49546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 49630c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch public void loadUrl(final String url, Map<String, String> additionalHttpHeaders) { 49746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // TODO: We may actually want to do some sanity checks here (like filter about://chrome). 4986ef347a29d692df672aaf59ee4926a476288476aBen Murdoch 4996ef347a29d692df672aaf59ee4926a476288476aBen Murdoch // For backwards compatibility, apps targeting less than K will have JS URLs evaluated 5006ef347a29d692df672aaf59ee4926a476288476aBen Murdoch // directly and any result of the evaluation will not replace the current page content. 5016ef347a29d692df672aaf59ee4926a476288476aBen Murdoch // Matching Chrome behavior more closely; apps targetting >= K that load a JS URL will 5026ef347a29d692df672aaf59ee4926a476288476aBen Murdoch // have the result of that URL replace the content of the current page. 5036ef347a29d692df672aaf59ee4926a476288476aBen Murdoch final String JAVASCRIPT_SCHEME = "javascript:"; 5049cd49cbc245e07e8e8c360fd22821a2918f99eaeChet Haase if (mAppTargetSdkVersion < Build.VERSION_CODES.KITKAT && 50541618b2aeb0a500c740a75871a8f614cb6543362Kristian Monsen url != null && url.startsWith(JAVASCRIPT_SCHEME)) { 50630c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mFactory.startYourEngines(true); 50730c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 50830c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mRunQueue.addTask(new Runnable() { 50930c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch @Override 51030c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch public void run() { 51130c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mAwContents.evaluateJavaScriptEvenIfNotYetNavigated( 51230c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch url.substring(JAVASCRIPT_SCHEME.length())); 51330c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch } 51430c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch }); 51530c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch } else { 51630c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mAwContents.evaluateJavaScriptEvenIfNotYetNavigated( 51730c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch url.substring(JAVASCRIPT_SCHEME.length())); 51830c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch } 5196ef347a29d692df672aaf59ee4926a476288476aBen Murdoch return; 5206ef347a29d692df672aaf59ee4926a476288476aBen Murdoch } 5216ef347a29d692df672aaf59ee4926a476288476aBen Murdoch 52246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) LoadUrlParams params = new LoadUrlParams(url); 52346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) if (additionalHttpHeaders != null) params.setExtraHeaders(additionalHttpHeaders); 524a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen loadUrlOnUiThread(params); 52546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 52646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 52746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 52846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void loadUrl(String url) { 52941618b2aeb0a500c740a75871a8f614cb6543362Kristian Monsen // Early out to match old WebView implementation 53041618b2aeb0a500c740a75871a8f614cb6543362Kristian Monsen if (url == null) { 53141618b2aeb0a500c740a75871a8f614cb6543362Kristian Monsen return; 53241618b2aeb0a500c740a75871a8f614cb6543362Kristian Monsen } 53346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) loadUrl(url, null); 53446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 53546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 53646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 53746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void postUrl(String url, byte[] postData) { 538b8281877c710018a3bc8066be17b1e11822be015Selim Gurun LoadUrlParams params = LoadUrlParams.createLoadHttpPostParams(url, postData); 539b8281877c710018a3bc8066be17b1e11822be015Selim Gurun Map<String,String> headers = new HashMap<String,String>(); 540b8281877c710018a3bc8066be17b1e11822be015Selim Gurun headers.put("Content-Type", "application/x-www-form-urlencoded"); 541b8281877c710018a3bc8066be17b1e11822be015Selim Gurun params.setExtraHeaders(headers); 542b8281877c710018a3bc8066be17b1e11822be015Selim Gurun loadUrlOnUiThread(params); 54346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 54446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 54519bc90be698e6d86ec6c77ea8b43bb6778bcc89dJonathan Dixon private static String fixupMimeType(String mimeType) { 54619bc90be698e6d86ec6c77ea8b43bb6778bcc89dJonathan Dixon return TextUtils.isEmpty(mimeType) ? "text/html" : mimeType; 54719bc90be698e6d86ec6c77ea8b43bb6778bcc89dJonathan Dixon } 54819bc90be698e6d86ec6c77ea8b43bb6778bcc89dJonathan Dixon 54919bc90be698e6d86ec6c77ea8b43bb6778bcc89dJonathan Dixon private static String fixupData(String data) { 55019bc90be698e6d86ec6c77ea8b43bb6778bcc89dJonathan Dixon return TextUtils.isEmpty(data) ? "" : data; 55119bc90be698e6d86ec6c77ea8b43bb6778bcc89dJonathan Dixon } 55219bc90be698e6d86ec6c77ea8b43bb6778bcc89dJonathan Dixon 55319bc90be698e6d86ec6c77ea8b43bb6778bcc89dJonathan Dixon private static String fixupBase(String url) { 55419bc90be698e6d86ec6c77ea8b43bb6778bcc89dJonathan Dixon return TextUtils.isEmpty(url) ? "about:blank" : url; 55519bc90be698e6d86ec6c77ea8b43bb6778bcc89dJonathan Dixon } 55619bc90be698e6d86ec6c77ea8b43bb6778bcc89dJonathan Dixon 55719bc90be698e6d86ec6c77ea8b43bb6778bcc89dJonathan Dixon private static String fixupHistory(String url) { 55819bc90be698e6d86ec6c77ea8b43bb6778bcc89dJonathan Dixon return TextUtils.isEmpty(url) ? "about:blank" : url; 55919bc90be698e6d86ec6c77ea8b43bb6778bcc89dJonathan Dixon } 56019bc90be698e6d86ec6c77ea8b43bb6778bcc89dJonathan Dixon 56146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) private static boolean isBase64Encoded(String encoding) { 56246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return "base64".equals(encoding); 56346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 56446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 56546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 56646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void loadData(String data, String mimeType, String encoding) { 567a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen loadUrlOnUiThread(LoadUrlParams.createLoadDataParams( 56819bc90be698e6d86ec6c77ea8b43bb6778bcc89dJonathan Dixon fixupData(data), fixupMimeType(mimeType), isBase64Encoded(encoding))); 56946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 57046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 57146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 57246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void loadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding, 573efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch String historyUrl) { 57419bc90be698e6d86ec6c77ea8b43bb6778bcc89dJonathan Dixon data = fixupData(data); 57519bc90be698e6d86ec6c77ea8b43bb6778bcc89dJonathan Dixon mimeType = fixupMimeType(mimeType); 576efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch LoadUrlParams loadUrlParams; 57719bc90be698e6d86ec6c77ea8b43bb6778bcc89dJonathan Dixon baseUrl = fixupBase(baseUrl); 57819bc90be698e6d86ec6c77ea8b43bb6778bcc89dJonathan Dixon historyUrl = fixupHistory(historyUrl); 579efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch 58019bc90be698e6d86ec6c77ea8b43bb6778bcc89dJonathan Dixon if (baseUrl.startsWith("data:")) { 581efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch // For backwards compatibility with WebViewClassic, we use the value of |encoding| 582efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch // as the charset, as long as it's not "base64". 583efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch boolean isBase64 = isBase64Encoded(encoding); 584efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch loadUrlParams = LoadUrlParams.createLoadDataParamsWithBaseUrl( 585efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch data, mimeType, isBase64, baseUrl, historyUrl, isBase64 ? null : encoding); 586efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch } else { 587efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch // When loading data with a non-data: base URL, the classic WebView would effectively 588efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch // "dump" that string of data into the WebView without going through regular URL 589efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch // loading steps such as decoding URL-encoded entities. We achieve this same behavior by 590efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch // base64 encoding the data that is passed here and then loading that as a data: URL. 591efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch try { 592efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch loadUrlParams = LoadUrlParams.createLoadDataParamsWithBaseUrl( 593efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch Base64.encodeToString(data.getBytes("utf-8"), Base64.DEFAULT), mimeType, 594efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch true, baseUrl, historyUrl, "utf-8"); 595efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch } catch (java.io.UnsupportedEncodingException e) { 596efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch Log.wtf(TAG, "Unable to load data string " + data, e); 597efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch return; 598efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch } 599efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch } 600a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen loadUrlOnUiThread(loadUrlParams); 601a622984698ea393f81ce968ec87bab75087af7dcKristian Monsen 602a622984698ea393f81ce968ec87bab75087af7dcKristian Monsen // Data url's with a base url will be resolved in Blink, and not cause an onPageStarted 603a622984698ea393f81ce968ec87bab75087af7dcKristian Monsen // event to be sent. Sending the callback directly from here. 604a622984698ea393f81ce968ec87bab75087af7dcKristian Monsen final String finalBaseUrl = loadUrlParams.getBaseUrl(); 605a622984698ea393f81ce968ec87bab75087af7dcKristian Monsen ThreadUtils.postOnUiThread(new Runnable() { 606a622984698ea393f81ce968ec87bab75087af7dcKristian Monsen @Override 607a622984698ea393f81ce968ec87bab75087af7dcKristian Monsen public void run() { 608a622984698ea393f81ce968ec87bab75087af7dcKristian Monsen mContentsClientAdapter.onPageStarted(finalBaseUrl); 609a622984698ea393f81ce968ec87bab75087af7dcKristian Monsen } 610a622984698ea393f81ce968ec87bab75087af7dcKristian Monsen }); 611a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen } 612a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen 613a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen private void loadUrlOnUiThread(final LoadUrlParams loadUrlParams) { 61430c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch // This is the last point that we can delay starting the Chromium backend up 61530c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch // and if the app has not caused us to bind the Chromium UI thread to a background thread 61630c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch // we now bind Chromium's notion of the UI thread to the app main thread. 61730c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mFactory.startYourEngines(true); 61830c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 619a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen // Disallowed in WebView API for apps targetting a new SDK 620a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen assert mAppTargetSdkVersion < Build.VERSION_CODES.JELLY_BEAN_MR2; 62130c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mRunQueue.addTask(new Runnable() { 622a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen @Override 623a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen public void run() { 624a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen mAwContents.loadUrl(loadUrlParams); 625a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen } 626a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen }); 62730c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch return; 628a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen } 62930c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mAwContents.loadUrl(loadUrlParams); 63046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 63146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 6326ef347a29d692df672aaf59ee4926a476288476aBen Murdoch public void evaluateJavaScript(String script, ValueCallback<String> resultCallback) { 63362389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 6346ef347a29d692df672aaf59ee4926a476288476aBen Murdoch mAwContents.evaluateJavaScript(script, resultCallback); 6356ef347a29d692df672aaf59ee4926a476288476aBen Murdoch } 6366ef347a29d692df672aaf59ee4926a476288476aBen Murdoch 63746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 63846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void saveWebArchive(String filename) { 63946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) saveWebArchive(filename, false, null); 64046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 64146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 64246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 64381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void saveWebArchive(final String basename, final boolean autoname, 64481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen final ValueCallback<String> callback) { 64530c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 64630c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mRunQueue.addTask(new Runnable() { 64781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 64881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 64981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen saveWebArchive(basename, autoname, callback); 65081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 65181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 65281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 65381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 65446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mAwContents.saveWebArchive(basename, autoname, callback); 65546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 65646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 65746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 65846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void stopLoading() { 65930c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 66030c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mRunQueue.addTask(new Runnable() { 66119af3f6395d08f8d2b106b8d205260d3194e1017Kristian Monsen @Override 66219af3f6395d08f8d2b106b8d205260d3194e1017Kristian Monsen public void run() { 66319af3f6395d08f8d2b106b8d205260d3194e1017Kristian Monsen stopLoading(); 66419af3f6395d08f8d2b106b8d205260d3194e1017Kristian Monsen } 66519af3f6395d08f8d2b106b8d205260d3194e1017Kristian Monsen }); 66619af3f6395d08f8d2b106b8d205260d3194e1017Kristian Monsen return; 66719af3f6395d08f8d2b106b8d205260d3194e1017Kristian Monsen } 66819af3f6395d08f8d2b106b8d205260d3194e1017Kristian Monsen 6697cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba mAwContents.stopLoading(); 67046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 67146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 67246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 67346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void reload() { 67430c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 67530c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mRunQueue.addTask(new Runnable() { 67681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 67781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 67881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen reload(); 67981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 68081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 68181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 68281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 6837cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba mAwContents.reload(); 68446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 68546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 68646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 68746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean canGoBack() { 68830c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mFactory.startYourEngines(true); 68930c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 6902c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen Boolean ret = runOnUiThreadBlocking(new Callable<Boolean>() { 6912c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 6922c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public Boolean call() { 6932c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return canGoBack(); 6942c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 6952c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 6962c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 6972c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 6987cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.canGoBack(); 69946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 70046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 70146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 70246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void goBack() { 70330c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 70430c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mRunQueue.addTask(new Runnable() { 70581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 70681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 70781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen goBack(); 70881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 70981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 71081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 71181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 7127cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba mAwContents.goBack(); 71346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 71446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 71546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 71646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean canGoForward() { 71730c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mFactory.startYourEngines(true); 71830c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 7192c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen Boolean ret = runOnUiThreadBlocking(new Callable<Boolean>() { 7202c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 7212c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public Boolean call() { 7222c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return canGoForward(); 7232c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 7242c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 7252c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 7262c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 7277cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.canGoForward(); 72846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 72946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 73046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 73146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void goForward() { 73230c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 73330c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mRunQueue.addTask(new Runnable() { 73481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 73581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 73681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen goForward(); 73781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 73881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 73981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 74081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 7417cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba mAwContents.goForward(); 74246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 74346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 74446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 7452c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public boolean canGoBackOrForward(final int steps) { 74630c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mFactory.startYourEngines(true); 74730c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 7482c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen Boolean ret = runOnUiThreadBlocking(new Callable<Boolean>() { 7492c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 7502c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public Boolean call() { 7512c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return canGoBackOrForward(steps); 7522c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 7532c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 7542c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 7552c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 7567cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.canGoBackOrForward(steps); 75746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 75846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 75946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 76081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void goBackOrForward(final int steps) { 76130c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 76230c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mRunQueue.addTask(new Runnable() { 76381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 76481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 76581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen goBackOrForward(steps); 76681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 76781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 76881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 76981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 7707cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba mAwContents.goBackOrForward(steps); 77146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 77246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 77346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 77446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean isPrivateBrowsingEnabled() { 7756d58f78e7fc0412a58b163559cb8e9c4af5c6fe1Jonathan Dixon // Not supported in this WebView implementation. 77646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return false; 77746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 77846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 77946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 7802c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public boolean pageUp(final boolean top) { 78130c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mFactory.startYourEngines(true); 78230c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 7832c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen Boolean ret = runOnUiThreadBlocking(new Callable<Boolean>() { 7842c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 7852c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public Boolean call() { 7862c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return pageUp(top); 7872c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 7882c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 7892c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 7902c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 7917cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.pageUp(top); 79246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 79346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 79446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 7952c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public boolean pageDown(final boolean bottom) { 79630c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mFactory.startYourEngines(true); 79730c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 7982c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen Boolean ret = runOnUiThreadBlocking(new Callable<Boolean>() { 7992c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 8002c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public Boolean call() { 8012c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return pageDown(bottom); 8022c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 8032c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 8042c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 8052c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 8067cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.pageDown(bottom); 80746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 80846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 80946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 81046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void clearView() { 81130c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 81230c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mRunQueue.addTask(new Runnable() { 81381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 81481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 81581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen clearView(); 81681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 81781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 81881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 81981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 820d21b8fe00b21742cc36929cb02eef6ad25946512Kristian Monsen mAwContents.clearView(); 82146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 82246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 82346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 82446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public Picture capturePicture() { 82530c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mFactory.startYourEngines(true); 82630c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 8272c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen Picture ret = runOnUiThreadBlocking(new Callable<Picture>() { 8282c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 8292c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public Picture call() { 8302c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return capturePicture(); 8312c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 8322c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 8332c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 8342c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 8359c5a40623b62737244deb2d04a98830d7ffa8404Leandro Gracia Gil return mAwContents.capturePicture(); 83646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 83746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 83846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 839412d84be859ce0eb91baf2f9afe5e6326a15d76aSelim Gurun public PrintDocumentAdapter createPrintDocumentAdapter() { 84062389e2d66a99e936652092333782947e363241dKristian Monsen checkThread(); 841412d84be859ce0eb91baf2f9afe5e6326a15d76aSelim Gurun return new AwPrintDocumentAdapter(mAwContents.getPdfExporter()); 842a8d0ef2693c3bcd4a091cc7fa49b69b54e3472c4Selim Gurun } 843a8d0ef2693c3bcd4a091cc7fa49b69b54e3472c4Selim Gurun 84449a1a6f9f27b63687edc1d98f842627d4719a327Selim Gurun @Override 84546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public float getScale() { 846fa62be4cdc2630566ee179843393d4a6f9893966Kristian Monsen // No checkThread() as it is mostly thread safe (workaround for b/10652991). 84730c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mFactory.startYourEngines(true); 8483520eb778d668dc76ca4541c69abd568b9d02691Mikhail Naganov return mAwContents.getScale(); 84946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 85046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 85146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 85281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void setInitialScale(final int scaleInPercent) { 85330c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch // No checkThread() as it is thread safe 85430c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mWebSettings.getAwSettings().setInitialPageScale(scaleInPercent); 85546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 85646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 85746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 85846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void invokeZoomPicker() { 85930c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 86030c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mRunQueue.addTask(new Runnable() { 86181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 86281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 86381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen invokeZoomPicker(); 86481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 86581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 86681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 86781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 8687cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba mAwContents.invokeZoomPicker(); 86946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 87046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 87146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 87246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public WebView.HitTestResult getHitTestResult() { 87330c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mFactory.startYourEngines(true); 87430c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 8752c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen WebView.HitTestResult ret = runOnUiThreadBlocking( 8762c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen new Callable<WebView.HitTestResult>() { 8772c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 8782c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public WebView.HitTestResult call() { 8792c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return getHitTestResult(); 8802c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 8812c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 8822c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 8832c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 884c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu AwContents.HitTestData data = mAwContents.getLastHitTestResult(); 885c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu mHitTestResult.setType(data.hitTestResultType); 886c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu mHitTestResult.setExtra(data.hitTestResultExtraData); 887c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu return mHitTestResult; 88846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 88946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 89046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 89181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void requestFocusNodeHref(final Message hrefMsg) { 89230c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 89330c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mRunQueue.addTask(new Runnable() { 89481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 89581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 89681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen requestFocusNodeHref(hrefMsg); 89781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 89881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 89981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 90081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 901c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu mAwContents.requestFocusNodeHref(hrefMsg); 90246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 90346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 90446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 90581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void requestImageRef(final Message msg) { 90630c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 90730c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mRunQueue.addTask(new Runnable() { 90881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 90981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 91081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen requestImageRef(msg); 91181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 91281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 91381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 91481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 915c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu mAwContents.requestImageRef(msg); 91646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 91746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 91846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 91946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public String getUrl() { 92030c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mFactory.startYourEngines(true); 92130c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 9222c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen String ret = runOnUiThreadBlocking(new Callable<String>() { 9232c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 9242c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public String call() { 9252c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return getUrl(); 9262c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 9272c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 9282c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 9292c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 9307cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba String url = mAwContents.getUrl(); 93146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) if (url == null || url.trim().isEmpty()) return null; 93246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return url; 93346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 93446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 93546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 93646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public String getOriginalUrl() { 93730c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mFactory.startYourEngines(true); 93830c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 9392c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen String ret = runOnUiThreadBlocking(new Callable<String>() { 9402c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 9412c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public String call() { 9422c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return getOriginalUrl(); 9432c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 9442c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 9452c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 9462c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 94746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) String url = mAwContents.getOriginalUrl(); 94846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) if (url == null || url.trim().isEmpty()) return null; 94946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return url; 95046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 95146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 95246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 95346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public String getTitle() { 95430c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mFactory.startYourEngines(true); 95530c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 9562c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen String ret = runOnUiThreadBlocking(new Callable<String>() { 9572c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 9582c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public String call() { 9592c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return getTitle(); 9602c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 9612c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 9622c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 9632c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 9647cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.getTitle(); 96546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 96646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 96746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 96846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public Bitmap getFavicon() { 96930c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mFactory.startYourEngines(true); 97030c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 9712c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen Bitmap ret = runOnUiThreadBlocking(new Callable<Bitmap>() { 9722c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 9732c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public Bitmap call() { 9742c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return getFavicon(); 9752c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 9762c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 9772c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 9782c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 9799405536501747e2d7b4fc46a33e5f0a1e7fd47acJonathan Dixon return mAwContents.getFavicon(); 98046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 98146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 98246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 98346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public String getTouchIconUrl() { 9849405536501747e2d7b4fc46a33e5f0a1e7fd47acJonathan Dixon // Intentional no-op: hidden method on WebView. 98546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return null; 98646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 98746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 98846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 98946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public int getProgress() { 99030c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (mAwContents == null) return 100; 991c0c86c037ea697da375ae28c543cae9b050d6b68Jonathan Dixon // No checkThread() because the value is cached java side (workaround for b/10533304). 99246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return mAwContents.getMostRecentProgress(); 99346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 99446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 99546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 99646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public int getContentHeight() { 99730c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (mAwContents == null) return 0; 99894a8e6a6d7d1b2a6b3718eb91956403ef6b03d9cKristian Monsen // No checkThread() as it is mostly thread safe (workaround for b/10594869). 9996b5f3d1546ae2a9c712cde60c54ec027582bc4e6Martin Kosiba return mAwContents.getContentHeightCss(); 100046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 100146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 100246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 100346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public int getContentWidth() { 100430c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (mAwContents == null) return 0; 10052c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen // No checkThread() as it is mostly thread safe (workaround for b/10594869). 10066b5f3d1546ae2a9c712cde60c54ec027582bc4e6Martin Kosiba return mAwContents.getContentWidthCss(); 100746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 100846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 100946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 101046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void pauseTimers() { 101130c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 101230c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mRunQueue.addTask(new Runnable() { 101381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 101481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 101581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen pauseTimers(); 101681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 101781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 101881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 101981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 1020531e68a2b50a5e542eeede13907f29e463a99ebfBen Murdoch mAwContents.pauseTimers(); 102146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 102246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 102346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 102446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void resumeTimers() { 102530c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 102630c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mRunQueue.addTask(new Runnable() { 102781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 102881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 102981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen resumeTimers(); 103081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 103181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 103281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 103381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 1034531e68a2b50a5e542eeede13907f29e463a99ebfBen Murdoch mAwContents.resumeTimers(); 103546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 103646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 103746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 103846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void onPause() { 103930c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 104030c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mRunQueue.addTask(new Runnable() { 104181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 104281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 104381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen onPause(); 104481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 104581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 104681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 104781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 10481cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon mAwContents.onPause(); 104946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 105046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 105146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 105246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void onResume() { 105330c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 105430c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mRunQueue.addTask(new Runnable() { 105581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 105681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 105781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen onResume(); 105881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 105981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 106081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 106181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 10621cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon mAwContents.onResume(); 106346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 106446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 106546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 106646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean isPaused() { 106730c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mFactory.startYourEngines(true); 106830c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 10692c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen Boolean ret = runOnUiThreadBlocking(new Callable<Boolean>() { 10702c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 10712c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public Boolean call() { 10722c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return isPaused(); 10732c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 10742c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 10752c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 10762c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 10771cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon return mAwContents.isPaused(); 107846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 107946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 108046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 108146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void freeMemory() { 1082d43c55dd91cf7dd1bcd18d01e16acd5e55de0471Ben Murdoch // Intentional no-op. Memory is managed automatically by Chromium. 108346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 108446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 108546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 108681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void clearCache(final boolean includeDiskFiles) { 108730c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 108830c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mRunQueue.addTask(new Runnable() { 108981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 109081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 109181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen clearCache(includeDiskFiles); 109281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 109381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 109481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 109581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 109646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mAwContents.clearCache(includeDiskFiles); 109746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 109846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 1099bbef8de5696d48fc6458c926026fc524a62814e1Selim Gurun /** 1100bbef8de5696d48fc6458c926026fc524a62814e1Selim Gurun * This is a poorly named method, but we keep it for historical reasons. 1101bbef8de5696d48fc6458c926026fc524a62814e1Selim Gurun */ 110246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 110346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void clearFormData() { 110430c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 110530c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mRunQueue.addTask(new Runnable() { 110681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 110781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 110881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen clearFormData(); 110981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 111081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 111181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 111281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 1113bbef8de5696d48fc6458c926026fc524a62814e1Selim Gurun mAwContents.hideAutofillPopup(); 111446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 111546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 111646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 111746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void clearHistory() { 111830c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 111930c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mRunQueue.addTask(new Runnable() { 112081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 112181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 112281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen clearHistory(); 112381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 112481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 112581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 112681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 11277cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba mAwContents.clearHistory(); 112846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 112946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 113046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 113146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void clearSslPreferences() { 113230c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 113330c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mRunQueue.addTask(new Runnable() { 113481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 113581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 113681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen clearSslPreferences(); 113781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 113881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 113981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 114081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 11417cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba mAwContents.clearSslPreferences(); 114246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 114346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 114446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 114546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public WebBackForwardList copyBackForwardList() { 114630c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mFactory.startYourEngines(true); 114730c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 11482c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen WebBackForwardList ret = runOnUiThreadBlocking(new Callable<WebBackForwardList>() { 11492c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 11502c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public WebBackForwardList call() { 11512c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return copyBackForwardList(); 11522c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 11532c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 11542c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 11552c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 115608a5e00cdfb74f4ffd843d2d0a9b0b40b86b107aBo Liu return new WebBackForwardListChromium( 11577cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba mAwContents.getNavigationHistory()); 115846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 115946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 116046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 116146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void setFindListener(WebView.FindListener listener) { 116246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mContentsClientAdapter.setFindListener(listener); 116346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 116446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 116546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 116681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void findNext(final boolean forwards) { 116730c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 116830c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mRunQueue.addTask(new Runnable() { 116981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 117081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 117181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen findNext(forwards); 117281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 117381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 117481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 117581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 117646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mAwContents.findNext(forwards); 117746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 117846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 117946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 11802c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public int findAll(final String searchString) { 11812c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen findAllAsync(searchString); 1182f37548d6d8e2a73c65d675a26706a38f52960800Jonathan Dixon return 0; 118346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 118446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 118546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 118681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void findAllAsync(final String searchString) { 118730c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 118830c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mRunQueue.addTask(new Runnable() { 118981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 119081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 119181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen findAllAsync(searchString); 119281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 119381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 119481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 119581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 119646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mAwContents.findAllAsync(searchString); 119746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 119846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 119946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 12002c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public boolean showFindDialog(final String text, final boolean showIme) { 120130c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mFactory.startYourEngines(false); 120230c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 12032c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return false; 12042c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 12056d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch if (mWebView.getParent() == null) { 12066d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch return false; 12076d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch } 12086d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch 12096d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch FindActionModeCallback findAction = new FindActionModeCallback(mWebView.getContext()); 12106d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch if (findAction == null) { 12116d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch return false; 12126d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch } 12136d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch 12146d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch mWebView.startActionMode(findAction); 12156d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch findAction.setWebView(mWebView); 12166d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch if (showIme) { 12176d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch findAction.showSoftInput(); 12186d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch } 12196d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch 12206d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch if (text != null) { 12216d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch findAction.setText(text); 12226d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch findAction.findAll(); 12236d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch } 12246d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch 12256d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch return true; 122646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 122746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 12286d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch @Override 1229fde8dae44f74be3de69ce6dd07b0023279b485a0Ben Murdoch public void notifyFindDialogDismissed() { 123030c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 123130c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mRunQueue.addTask(new Runnable() { 123281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 123381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 123481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen notifyFindDialogDismissed(); 123581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 123681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 123781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 123881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 12396d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch clearMatches(); 1240fde8dae44f74be3de69ce6dd07b0023279b485a0Ben Murdoch } 1241fde8dae44f74be3de69ce6dd07b0023279b485a0Ben Murdoch 124246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 124346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void clearMatches() { 124430c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 124530c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mRunQueue.addTask(new Runnable() { 124681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 124781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 124881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen clearMatches(); 124981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 125081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 125181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 125281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 125346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mAwContents.clearMatches(); 125446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 125546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 125646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 125781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void documentHasImages(final Message response) { 125830c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 125930c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mRunQueue.addTask(new Runnable() { 126081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 126181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 126281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen documentHasImages(response); 126381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 126481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 126581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 126681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 126746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mAwContents.documentHasImages(response); 126846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 126946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 127046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 127146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void setWebViewClient(WebViewClient client) { 127246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mContentsClientAdapter.setWebViewClient(client); 127346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 127446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 127546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 127646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void setDownloadListener(DownloadListener listener) { 12774320e428efc3bf69387f3b9d5a0589b2b8746409Bo Liu mContentsClientAdapter.setDownloadListener(listener); 127846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 127946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 128046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 128146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void setWebChromeClient(WebChromeClient client) { 128246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mContentsClientAdapter.setWebChromeClient(client); 128346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 128446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 128546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 128681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void setPictureListener(final WebView.PictureListener listener) { 128730c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 128830c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mRunQueue.addTask(new Runnable() { 128981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 129081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 129181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen setPictureListener(listener); 129281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 129381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 129481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 129581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 129646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mContentsClientAdapter.setPictureListener(listener); 12979c5a40623b62737244deb2d04a98830d7ffa8404Leandro Gracia Gil mAwContents.enableOnNewPicture(listener != null, 12986ef347a29d692df672aaf59ee4926a476288476aBen Murdoch mAppTargetSdkVersion >= Build.VERSION_CODES.JELLY_BEAN_MR2); 129946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 130046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 130146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 130281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void addJavascriptInterface(final Object obj, final String interfaceName) { 130330c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 130430c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mRunQueue.addTask(new Runnable() { 130581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 130681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 130781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen addJavascriptInterface(obj, interfaceName); 130881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 130981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 131081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 131181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 1312ea844f60b1b559788566fe6e004b1eeca53a8039Jonathan Dixon Class<? extends Annotation> requiredAnnotation = null; 13136ef347a29d692df672aaf59ee4926a476288476aBen Murdoch if (mAppTargetSdkVersion >= Build.VERSION_CODES.JELLY_BEAN_MR1) { 13147db34d3dcaac936566f912e1b0b21f3f103029ffJonathan Dixon requiredAnnotation = JavascriptInterface.class; 13157db34d3dcaac936566f912e1b0b21f3f103029ffJonathan Dixon } 13167cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba mAwContents.addPossiblyUnsafeJavascriptInterface(obj, interfaceName, requiredAnnotation); 131746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 131846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 131946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 132081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void removeJavascriptInterface(final String interfaceName) { 132130c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 132230c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mRunQueue.addTask(new Runnable() { 132381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 132481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 132581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen removeJavascriptInterface(interfaceName); 132681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 132781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 132881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 132981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 13307cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba mAwContents.removeJavascriptInterface(interfaceName); 133146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 133246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 133346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 133446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public WebSettings getSettings() { 133546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return mWebSettings; 133646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 133746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 133846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 133946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void setMapTrackballToArrowKeys(boolean setMap) { 134046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // This is a deprecated API: intentional no-op. 134146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 134246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 134346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 134481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void flingScroll(final int vx, final int vy) { 134530c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 134630c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mRunQueue.addTask(new Runnable() { 134781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 134881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 134981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen flingScroll(vx, vy); 135081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 135181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 135281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 135381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 13547cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba mAwContents.flingScroll(vx, vy); 135546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 135646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 135746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 135846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public View getZoomControls() { 135930c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mFactory.startYourEngines(false); 136030c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 13612c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return null; 13622c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 13632c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen 1364e78d6e40e4e78671e6621ba8cf49835568704899Jonathan Dixon // This was deprecated in 2009 and hidden in JB MR1, so just provide the minimum needed 1365e78d6e40e4e78671e6621ba8cf49835568704899Jonathan Dixon // to stop very out-dated applications from crashing. 1366e78d6e40e4e78671e6621ba8cf49835568704899Jonathan Dixon Log.w(TAG, "WebView doesn't support getZoomControls"); 1367420c0da3a4e06e1ac5574091e7c9c286ef012369Mikhail Naganov return mAwContents.getSettings().supportZoom() ? new View(mWebView.getContext()) : null; 136846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 136946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 137046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 137146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean canZoomIn() { 137230c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 13732c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return false; 13742c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 13757cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.canZoomIn(); 137646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 137746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 137846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 137946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean canZoomOut() { 138030c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 13812c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return false; 13822c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 13837cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.canZoomOut(); 138446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 138546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 138646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 138746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean zoomIn() { 138830c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mFactory.startYourEngines(true); 138930c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 13902c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen boolean ret = runOnUiThreadBlocking(new Callable<Boolean>() { 13912c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 13922c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public Boolean call() { 13932c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return zoomIn(); 13942c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 13952c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 13962c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 13972c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 13987cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.zoomIn(); 139946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 140046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 140146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 140246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean zoomOut() { 140330c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mFactory.startYourEngines(true); 140430c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 14052c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen boolean ret = runOnUiThreadBlocking(new Callable<Boolean>() { 14062c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 14072c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public Boolean call() { 14082c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return zoomOut(); 14092c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 14102c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 14112c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 14122c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 14137cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.zoomOut(); 141446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 141546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 1416d2dcef4d9edfb7af7abff85b0867c3d6a363feb7Jonathan Dixon @Override 141746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void dumpViewHierarchyWithProperties(BufferedWriter out, int level) { 1418f2b715bee3bb3a41e59f80ae53b45f249d9559c5Kristian Monsen // Intentional no-op 141946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 142046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 1421d2dcef4d9edfb7af7abff85b0867c3d6a363feb7Jonathan Dixon @Override 142246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public View findHierarchyView(String className, int hashCode) { 1423f2b715bee3bb3a41e59f80ae53b45f249d9559c5Kristian Monsen // Intentional no-op 142446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return null; 142546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 142646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 142746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // WebViewProvider glue methods --------------------------------------------------------------- 142846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 142946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 143057b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen // This needs to be kept thread safe! 143146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public WebViewProvider.ViewDelegate getViewDelegate() { 143246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return this; 143346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 143446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 143546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 14362c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen // This needs to be kept thread safe! 143746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public WebViewProvider.ScrollDelegate getScrollDelegate() { 143846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return this; 143946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 144046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 144146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 144246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // WebViewProvider.ViewDelegate implementation ------------------------------------------------ 144346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 1444a7fba41c5661cb61b41c8a4ff2d69e5153666f7fBen Murdoch // TODO: remove from WebViewProvider and use default implementation from 1445a7fba41c5661cb61b41c8a4ff2d69e5153666f7fBen Murdoch // ViewGroup. 1446a7fba41c5661cb61b41c8a4ff2d69e5153666f7fBen Murdoch // @Override 144746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean shouldDelayChildPressedState() { 144830c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mFactory.startYourEngines(false); 144930c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 14502c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen boolean ret = runOnUiThreadBlocking(new Callable<Boolean>() { 14512c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 14522c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public Boolean call() { 14532c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return shouldDelayChildPressedState(); 14542c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 14552c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 14562c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 14572c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 1458a7fba41c5661cb61b41c8a4ff2d69e5153666f7fBen Murdoch return true; 145946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 146046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 14615c990caf9c0237064dab94059f6c46fc2d51cd97Ben Murdoch// @Override 14625c990caf9c0237064dab94059f6c46fc2d51cd97Ben Murdoch public AccessibilityNodeProvider getAccessibilityNodeProvider() { 146330c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mFactory.startYourEngines(false); 146430c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 14652c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen AccessibilityNodeProvider ret = runOnUiThreadBlocking( 14662c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen new Callable<AccessibilityNodeProvider>() { 14672c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 14682c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public AccessibilityNodeProvider call() { 14692c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return getAccessibilityNodeProvider(); 14702c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 14712c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 14722c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 14732c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 14745c990caf9c0237064dab94059f6c46fc2d51cd97Ben Murdoch return mAwContents.getAccessibilityNodeProvider(); 14755c990caf9c0237064dab94059f6c46fc2d51cd97Ben Murdoch } 14765c990caf9c0237064dab94059f6c46fc2d51cd97Ben Murdoch 147746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 147830c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch public void onInitializeAccessibilityNodeInfo(final AccessibilityNodeInfo info) { 147930c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mFactory.startYourEngines(false); 148030c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 148181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen runVoidTaskOnUiThreadBlocking(new Runnable() { 148281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 148381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 148481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen onInitializeAccessibilityNodeInfo(info); 148581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 148681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 148781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 148881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 14897cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba mAwContents.onInitializeAccessibilityNodeInfo(info); 149046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 149146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 149246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 149381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void onInitializeAccessibilityEvent(final AccessibilityEvent event) { 149430c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mFactory.startYourEngines(false); 149530c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 149681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen runVoidTaskOnUiThreadBlocking(new Runnable() { 149781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 149881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 149981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen onInitializeAccessibilityEvent(event); 150081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 150181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 150281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 150381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 15047cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba mAwContents.onInitializeAccessibilityEvent(event); 150546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 150646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 150746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 15082c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public boolean performAccessibilityAction(final int action, final Bundle arguments) { 150930c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mFactory.startYourEngines(false); 151030c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 15112c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen boolean ret = runOnUiThreadBlocking(new Callable<Boolean>() { 15122c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 15132c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public Boolean call() { 15142c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return performAccessibilityAction(action, arguments); 15152c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 15162c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 15172c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 15182c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 1519b7b706b2ed5cbb77dd690f5405b626a429989714Ben Murdoch if (mAwContents.supportsAccessibilityAction(action)) { 1520b7b706b2ed5cbb77dd690f5405b626a429989714Ben Murdoch return mAwContents.performAccessibilityAction(action, arguments); 1521b7b706b2ed5cbb77dd690f5405b626a429989714Ben Murdoch } 1522b7b706b2ed5cbb77dd690f5405b626a429989714Ben Murdoch return mWebViewPrivate.super_performAccessibilityAction(action, arguments); 152346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 152446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 152546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 152681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void setOverScrollMode(final int mode) { 152730c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch // This gets called from the android.view.View c'tor that WebView inherits from. This 152830c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch // causes the method to be called when mAwContents == null. 152930c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch // It's safe to ignore these calls however since AwContents will read the current value of 153030c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch // this setting when it's created. 153130c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (mAwContents == null) return; 153230c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch 153330c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 153430c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mRunQueue.addTask(new Runnable() { 153581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 153681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 153781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen setOverScrollMode(mode); 153881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 153981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 154081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 154181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 154230c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mAwContents.setOverScrollMode(mode); 154346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 154446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 154546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 154681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void setScrollBarStyle(final int style) { 154730c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 154830c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mRunQueue.addTask(new Runnable() { 154981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 155081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 155181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen setScrollBarStyle(style); 155281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 155381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 155481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 155581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 1556bd819ca872a1711e4607ef11cd8b0b2156241897Martin Kosiba mAwContents.setScrollBarStyle(style); 155746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 155846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 155946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 156081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void onDrawVerticalScrollBar(final Canvas canvas, final Drawable scrollBar, final int l, 156181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen final int t, final int r, final int b) { 1562bd819ca872a1711e4607ef11cd8b0b2156241897Martin Kosiba // WebViewClassic was overriding this method to handle rubberband over-scroll. Since 1563bd819ca872a1711e4607ef11cd8b0b2156241897Martin Kosiba // WebViewChromium doesn't support that the vanilla implementation of this method can be 1564bd819ca872a1711e4607ef11cd8b0b2156241897Martin Kosiba // used. 1565bd819ca872a1711e4607ef11cd8b0b2156241897Martin Kosiba mWebViewPrivate.super_onDrawVerticalScrollBar(canvas, scrollBar, l, t, r, b); 156646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 156746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 156846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 156981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void onOverScrolled(final int scrollX, final int scrollY, final boolean clampedX, 157081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen final boolean clampedY) { 157130c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 157230c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mRunQueue.addTask(new Runnable() { 157381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 157481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 157581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen onOverScrolled(scrollX, scrollY, clampedX, clampedY); 157681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 157781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 157881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 157981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 15803951fbadf5157dd3fe73decc879f9b763e780b09Martin Kosiba mAwContents.onContainerViewOverScrolled(scrollX, scrollY, clampedX, clampedY); 158146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 158246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 158346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 158481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void onWindowVisibilityChanged(final int visibility) { 158530c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 158630c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mRunQueue.addTask(new Runnable() { 158781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 158881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 158981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen onWindowVisibilityChanged(visibility); 159081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 159181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 159281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 159381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 15941cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon mAwContents.onWindowVisibilityChanged(visibility); 159546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 159646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 159746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 1598c8523c99833f364c64744d60e408510fb83b998bKristian Monsen public void onDraw(final Canvas canvas) { 159930c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mFactory.startYourEngines(true); 160030c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 16014fb262f34ba888eaacc24a83d94a56b8d7bcef2bKristian Monsen runVoidTaskOnUiThreadBlocking(new Runnable() { 1602c8523c99833f364c64744d60e408510fb83b998bKristian Monsen @Override 1603c8523c99833f364c64744d60e408510fb83b998bKristian Monsen public void run() { 1604c8523c99833f364c64744d60e408510fb83b998bKristian Monsen onDraw(canvas); 1605c8523c99833f364c64744d60e408510fb83b998bKristian Monsen } 1606c8523c99833f364c64744d60e408510fb83b998bKristian Monsen }); 1607c8523c99833f364c64744d60e408510fb83b998bKristian Monsen return; 1608c8523c99833f364c64744d60e408510fb83b998bKristian Monsen } 16097ab33360e331e04f515d532064670e210d174a7aTao Bai mAwContents.onDraw(canvas); 161046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 161146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 161246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 161381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void setLayoutParams(final ViewGroup.LayoutParams layoutParams) { 161430c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch // This API is our strongest signal from the View system that this 161530c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch // WebView is going to be bound to a View hierarchy and so at this 161630c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch // point we must bind Chromium's UI thread to the current thread. 161730c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mFactory.startYourEngines(false); 161830c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch checkThread(); 161946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mWebViewPrivate.super_setLayoutParams(layoutParams); 162046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 162146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 162246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 162346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean performLongClick() { 162459a30ac62fdd1e22b59776547730ac8d8be68531Kristian Monsen // Return false unless the WebView is attached to a View with a parent 162559a30ac62fdd1e22b59776547730ac8d8be68531Kristian Monsen return mWebView.getParent() != null ? mWebViewPrivate.super_performLongClick() : false; 162646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 162746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 162846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 162981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void onConfigurationChanged(final Configuration newConfig) { 163030c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 163130c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mRunQueue.addTask(new Runnable() { 163281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 163381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 163481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen onConfigurationChanged(newConfig); 163581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 163681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 163781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 163881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 16391cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon mAwContents.onConfigurationChanged(newConfig); 164046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 164146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 164246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 16432c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public InputConnection onCreateInputConnection(final EditorInfo outAttrs) { 164430c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mFactory.startYourEngines(false); 164530c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 164630c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch return null; 16472c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 16487cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.onCreateInputConnection(outAttrs); 164946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 165046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 165146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 16522c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public boolean onKeyMultiple(final int keyCode, final int repeatCount, final KeyEvent event) { 165330c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mFactory.startYourEngines(false); 165430c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 16552c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen boolean ret = runOnUiThreadBlocking(new Callable<Boolean>() { 16562c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 16572c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public Boolean call() { 16582c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return onKeyMultiple(keyCode, repeatCount, event); 16592c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 16602c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 16612c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 16622c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 166346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) UnimplementedWebViewApi.invoke(); 166446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return false; 166546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 166646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 166746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 16682c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public boolean onKeyDown(final int keyCode, final KeyEvent event) { 166930c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mFactory.startYourEngines(false); 167030c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 16712c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen boolean ret = runOnUiThreadBlocking(new Callable<Boolean>() { 16722c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 16732c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public Boolean call() { 16742c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return onKeyDown(keyCode, event); 16752c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 16762c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 16772c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 16782c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 167946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) UnimplementedWebViewApi.invoke(); 168046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return false; 168146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 168246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 168346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 16842c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public boolean onKeyUp(final int keyCode, final KeyEvent event) { 168530c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mFactory.startYourEngines(false); 168630c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 16872c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen boolean ret = runOnUiThreadBlocking(new Callable<Boolean>() { 16882c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 16892c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public Boolean call() { 16902c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return onKeyUp(keyCode, event); 16912c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 16922c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 16932c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 16942c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 16957cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.onKeyUp(keyCode, event); 169646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 169746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 169846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 169946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void onAttachedToWindow() { 170030c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch // This API is our strongest signal from the View system that this 170130c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch // WebView is going to be bound to a View hierarchy and so at this 170230c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch // point we must bind Chromium's UI thread to the current thread. 170330c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mFactory.startYourEngines(false); 170430c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch checkThread(); 17051cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon mAwContents.onAttachedToWindow(); 170646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 170746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 170846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 170946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void onDetachedFromWindow() { 171030c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 171130c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mRunQueue.addTask(new Runnable() { 171281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 171381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 171481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen onDetachedFromWindow(); 171581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 171681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 171781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 171881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 1719157c78cfd4127a0b39d3c55c95c7cec23ccdc234Bo Liu 1720157c78cfd4127a0b39d3c55c95c7cec23ccdc234Bo Liu Runnable detachAwContents = new Runnable() { 1721157c78cfd4127a0b39d3c55c95c7cec23ccdc234Bo Liu @Override 1722157c78cfd4127a0b39d3c55c95c7cec23ccdc234Bo Liu public void run() { 1723157c78cfd4127a0b39d3c55c95c7cec23ccdc234Bo Liu mAwContents.onDetachedFromWindow(); 1724157c78cfd4127a0b39d3c55c95c7cec23ccdc234Bo Liu } 1725157c78cfd4127a0b39d3c55c95c7cec23ccdc234Bo Liu }; 1726157c78cfd4127a0b39d3c55c95c7cec23ccdc234Bo Liu 1727157c78cfd4127a0b39d3c55c95c7cec23ccdc234Bo Liu if (mGLfunctor == null || !mWebView.executeHardwareAction(detachAwContents)) { 1728157c78cfd4127a0b39d3c55c95c7cec23ccdc234Bo Liu detachAwContents.run(); 1729157c78cfd4127a0b39d3c55c95c7cec23ccdc234Bo Liu } 1730157c78cfd4127a0b39d3c55c95c7cec23ccdc234Bo Liu 1731a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon if (mGLfunctor != null) { 1732a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon mGLfunctor.detach(); 1733a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon } 173446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 173546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 173646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 173781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void onVisibilityChanged(final View changedView, final int visibility) { 173830c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch // The AwContents will find out the container view visibility before the first draw so we 173930c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch // can safely ignore onVisibilityChanged callbacks that happen before init(). 174030c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (mAwContents == null) return; 174130c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch 174230c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 174330c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mRunQueue.addTask(new Runnable() { 174481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 174581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 174681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen onVisibilityChanged(changedView, visibility); 174781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 174881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 174981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 175081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 175130c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mAwContents.onVisibilityChanged(changedView, visibility); 175246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 175346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 175446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 175581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void onWindowFocusChanged(final boolean hasWindowFocus) { 175630c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 175730c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mRunQueue.addTask(new Runnable() { 175881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 175981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 176081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen onWindowFocusChanged(hasWindowFocus); 176181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 176281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 176381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 176481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 17651cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon mAwContents.onWindowFocusChanged(hasWindowFocus); 176646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 176746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 176846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 176981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void onFocusChanged(final boolean focused, final int direction, 177081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen final Rect previouslyFocusedRect) { 177130c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 177230c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mRunQueue.addTask(new Runnable() { 177381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 177481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 177581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen onFocusChanged(focused, direction, previouslyFocusedRect); 177681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 177781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 177881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 177981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 17801cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon mAwContents.onFocusChanged(focused, direction, previouslyFocusedRect); 178146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 178246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 178346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 17842c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public boolean setFrame(final int left, final int top, final int right, final int bottom) { 178546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return mWebViewPrivate.super_setFrame(left, top, right, bottom); 178646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 178746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 178846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 178981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void onSizeChanged(final int w, final int h, final int ow, final int oh) { 179030c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 179130c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mRunQueue.addTask(new Runnable() { 179281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 179381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 179481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen onSizeChanged(w, h, ow, oh); 179581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 179681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 179781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 179881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 17991cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon mAwContents.onSizeChanged(w, h, ow, oh); 180046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 180146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 180246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 180346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void onScrollChanged(int l, int t, int oldl, int oldt) { 180446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 180546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 180646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 18072c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public boolean dispatchKeyEvent(final KeyEvent event) { 180830c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mFactory.startYourEngines(false); 180930c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 18102c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen boolean ret = runOnUiThreadBlocking(new Callable<Boolean>() { 18112c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 18122c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public Boolean call() { 18132c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return dispatchKeyEvent(event); 18142c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 18152c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 18162c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 18172c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 18187cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.dispatchKeyEvent(event); 181946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 182046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 182146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 18222c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public boolean onTouchEvent(final MotionEvent ev) { 182330c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mFactory.startYourEngines(false); 182430c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 18252c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen boolean ret = runOnUiThreadBlocking(new Callable<Boolean>() { 18262c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 18272c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public Boolean call() { 18282c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return onTouchEvent(ev); 18292c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 18302c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 18312c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 18322c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 1833c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu return mAwContents.onTouchEvent(ev); 183446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 183546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 183646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 18372c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public boolean onHoverEvent(final MotionEvent event) { 183830c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mFactory.startYourEngines(false); 183930c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 18402c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen boolean ret = runOnUiThreadBlocking(new Callable<Boolean>() { 18412c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 18422c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public Boolean call() { 18432c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return onHoverEvent(event); 18442c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 18452c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 18462c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 18472c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 1848c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu return mAwContents.onHoverEvent(event); 184946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 185046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 185146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 18522c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public boolean onGenericMotionEvent(final MotionEvent event) { 185330c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mFactory.startYourEngines(false); 185430c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 18552c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen boolean ret = runOnUiThreadBlocking(new Callable<Boolean>() { 18562c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 18572c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public Boolean call() { 18582c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return onGenericMotionEvent(event); 18592c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 18602c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 18612c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 18622c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 1863c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu return mAwContents.onGenericMotionEvent(event); 186446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 186546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 186646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 186746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean onTrackballEvent(MotionEvent ev) { 186846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // Trackball event not handled, which eventually gets converted to DPAD keyevents 186946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return false; 187046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 187146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 187246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 18732c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public boolean requestFocus(final int direction, final Rect previouslyFocusedRect) { 187430c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mFactory.startYourEngines(false); 187530c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 18762c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen boolean ret = runOnUiThreadBlocking(new Callable<Boolean>() { 18772c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 18782c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public Boolean call() { 18792c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return requestFocus(direction, previouslyFocusedRect); 18802c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 18812c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 18822c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 18832c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 18844cee3bf50c125a52a49323aa999f4b619fa18c10Ben Murdoch mAwContents.requestFocus(); 188546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return mWebViewPrivate.super_requestFocus(direction, previouslyFocusedRect); 188646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 188746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 188846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 188981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec) { 189030c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mFactory.startYourEngines(false); 189130c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 189230c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch runVoidTaskOnUiThreadBlocking(new Runnable() { 189381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 189481cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 189581cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen onMeasure(widthMeasureSpec, heightMeasureSpec); 189681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 189781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 189881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 189981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 1900d7bf6ab0cd8cc4005b112e4358eb797bb178a85fMarcin Kosiba mAwContents.onMeasure(widthMeasureSpec, heightMeasureSpec); 190146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 190246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 190346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 19042c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public boolean requestChildRectangleOnScreen(final View child, final Rect rect, 19052c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen final boolean immediate) { 190630c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mFactory.startYourEngines(false); 190730c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 19082c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen boolean ret = runOnUiThreadBlocking(new Callable<Boolean>() { 19092c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 19102c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public Boolean call() { 19112c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return requestChildRectangleOnScreen(child, rect, immediate); 19122c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 19132c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 19142c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 19152c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 19161f76368786ae12898311d148b0057403db2fb36aMartin Kosiba return mAwContents.requestChildRectangleOnScreen(child, rect, immediate); 191746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 191846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 191946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 192057b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen public void setBackgroundColor(final int color) { 192130c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mFactory.startYourEngines(false); 192230c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 192357b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen ThreadUtils.postOnUiThread(new Runnable() { 192457b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen @Override 192557b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen public void run() { 192681cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen setBackgroundColor(color); 192757b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen } 192857b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen }); 192981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 193057b714b4b5f44c9a385836c7074e4f879ad7a767Kristian Monsen } 193181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen mAwContents.setBackgroundColor(color); 193246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 193346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 193446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 193546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void setLayerType(int layerType, Paint paint) { 1936f2b715bee3bb3a41e59f80ae53b45f249d9559c5Kristian Monsen // Intentional no-op 193746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 193846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 193981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen // Remove from superclass 194046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void preDispatchDraw(Canvas canvas) { 19410b528e4924a7c14687181185bc66173ad18f00eaLeandro Gracia Gil // TODO(leandrogracia): remove this method from WebViewProvider if we think 19420b528e4924a7c14687181185bc66173ad18f00eaLeandro Gracia Gil // we won't need it again. 194346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 194446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 194546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // WebViewProvider.ScrollDelegate implementation ---------------------------------------------- 194646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 194746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 194846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public int computeHorizontalScrollRange() { 194930c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mFactory.startYourEngines(false); 195030c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 19512c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen int ret = runOnUiThreadBlocking(new Callable<Integer>() { 19522c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 19532c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public Integer call() { 19542c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return computeHorizontalScrollRange(); 19552c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 19562c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 19572c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 19582c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 19597cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.computeHorizontalScrollRange(); 196046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 196146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 196246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 196346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public int computeHorizontalScrollOffset() { 196430c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mFactory.startYourEngines(false); 196530c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 19662c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen int ret = runOnUiThreadBlocking(new Callable<Integer>() { 19672c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 19682c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public Integer call() { 19692c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return computeHorizontalScrollOffset(); 19702c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 19712c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 19722c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 19732c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 19747cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.computeHorizontalScrollOffset(); 197546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 197646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 197746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 197846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public int computeVerticalScrollRange() { 197930c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mFactory.startYourEngines(false); 198030c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 19812c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen int ret = runOnUiThreadBlocking(new Callable<Integer>() { 19822c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 19832c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public Integer call() { 19842c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return computeVerticalScrollRange(); 19852c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 19862c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 19872c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 19882c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 19897cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.computeVerticalScrollRange(); 199046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 199146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 199246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 199346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public int computeVerticalScrollOffset() { 199430c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mFactory.startYourEngines(false); 199530c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 19962c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen int ret = runOnUiThreadBlocking(new Callable<Integer>() { 19972c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 19982c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public Integer call() { 19992c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return computeVerticalScrollOffset(); 20002c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 20012c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 20022c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 20032c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 20047cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.computeVerticalScrollOffset(); 200546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 200646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 200746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 200846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public int computeVerticalScrollExtent() { 200930c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mFactory.startYourEngines(false); 201030c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 20112c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen int ret = runOnUiThreadBlocking(new Callable<Integer>() { 20122c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen @Override 20132c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen public Integer call() { 20142c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return computeVerticalScrollExtent(); 20152c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 20162c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen }); 20172c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen return ret; 20182c11b458a21170c4eacba6c072f695c465f1c083Kristian Monsen } 20197cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba return mAwContents.computeVerticalScrollExtent(); 202046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 202146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 202246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 202346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void computeScroll() { 202430c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch mFactory.startYourEngines(false); 202530c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch if (checkNeedsPost()) { 202630c0a035f7c865ee300a3d8a9a3e515a66c6a818Ben Murdoch runVoidTaskOnUiThreadBlocking(new Runnable() { 202781cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen @Override 202881cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen public void run() { 202981cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen computeScroll(); 203081cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 203181cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen }); 203281cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen return; 203381cdab1b4a022515f0234daafb3e224d13f20a9fKristian Monsen } 20342a120ba09921dbb1e8354ecbc4a6e063ec891101Martin Kosiba mAwContents.computeScroll(); 203546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 203646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 20374702a6de6031477029de5e6f5777c8b3e7846d35Marcin Kosiba // AwContents.InternalAccessDelegate implementation -------------------------------------- 20384702a6de6031477029de5e6f5777c8b3e7846d35Marcin Kosiba private class InternalAccessAdapter implements AwContents.InternalAccessDelegate { 203946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 204046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean drawChild(Canvas arg0, View arg1, long arg2) { 204146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) UnimplementedWebViewApi.invoke(); 204246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return false; 204346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 204446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 204546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 204646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean super_onKeyUp(int arg0, KeyEvent arg1) { 2047f2b715bee3bb3a41e59f80ae53b45f249d9559c5Kristian Monsen // Intentional no-op 204846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return false; 204946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 205046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 205146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 205246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean super_dispatchKeyEventPreIme(KeyEvent arg0) { 205346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) UnimplementedWebViewApi.invoke(); 205446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return false; 205546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 205646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 205746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 205846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean super_dispatchKeyEvent(KeyEvent event) { 205946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return mWebViewPrivate.super_dispatchKeyEvent(event); 206046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 206146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 206246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 206346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean super_onGenericMotionEvent(MotionEvent arg0) { 20644cde2296b2a773d3139ed97daa097eefa42b511aKristian Monsen return mWebViewPrivate.super_onGenericMotionEvent(arg0); 206546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 206646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 206746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 206846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public void super_onConfigurationChanged(Configuration arg0) { 2069f2b715bee3bb3a41e59f80ae53b45f249d9559c5Kristian Monsen // Intentional no-op 207046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 207146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 2072bd819ca872a1711e4607ef11cd8b0b2156241897Martin Kosiba @Override 20730088640069ac3ed389f4d78582966248b0869ce9Martin Kosiba public int super_getScrollBarStyle() { 20740088640069ac3ed389f4d78582966248b0869ce9Martin Kosiba return mWebViewPrivate.super_getScrollBarStyle(); 20750088640069ac3ed389f4d78582966248b0869ce9Martin Kosiba } 20760088640069ac3ed389f4d78582966248b0869ce9Martin Kosiba 207746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 207846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean awakenScrollBars() { 207946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) mWebViewPrivate.awakenScrollBars(0); 208046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // TODO: modify the WebView.PrivateAccess to provide a return value. 208146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return true; 208246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 208346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) 208446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) @Override 208546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) public boolean super_awakenScrollBars(int arg0, boolean arg1) { 208646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) // TODO: need method on WebView.PrivateAccess? 208746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) UnimplementedWebViewApi.invoke(); 208846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) return false; 208946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 20904702a6de6031477029de5e6f5777c8b3e7846d35Marcin Kosiba 2091d7bf6ab0cd8cc4005b112e4358eb797bb178a85fMarcin Kosiba @Override 20922a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba public void onScrollChanged(int l, int t, int oldl, int oldt) { 20932a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba mWebViewPrivate.setScrollXRaw(l); 20942a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba mWebViewPrivate.setScrollYRaw(t); 20952a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba mWebViewPrivate.onScrollChanged(l, t, oldl, oldt); 20962a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba } 20972a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba 20983951fbadf5157dd3fe73decc879f9b763e780b09Martin Kosiba @Override 20992a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba public void overScrollBy(int deltaX, int deltaY, 21002a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba int scrollX, int scrollY, 21012a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba int scrollRangeX, int scrollRangeY, 21022a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba int maxOverScrollX, int maxOverScrollY, 21032a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba boolean isTouchEvent) { 21042a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba mWebViewPrivate.overScrollBy(deltaX, deltaY, scrollX, scrollY, 21052a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba scrollRangeX, scrollRangeY, maxOverScrollX, maxOverScrollY, isTouchEvent); 21062a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba } 21072a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba 21083951fbadf5157dd3fe73decc879f9b763e780b09Martin Kosiba @Override 21092a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba public void super_scrollTo(int scrollX, int scrollY) { 21102a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba mWebViewPrivate.super_scrollTo(scrollX, scrollY); 21112a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba } 21122a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba 21132a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba @Override 21144702a6de6031477029de5e6f5777c8b3e7846d35Marcin Kosiba public void setMeasuredDimension(int measuredWidth, int measuredHeight) { 21154702a6de6031477029de5e6f5777c8b3e7846d35Marcin Kosiba mWebViewPrivate.setMeasuredDimension(measuredWidth, measuredHeight); 21164702a6de6031477029de5e6f5777c8b3e7846d35Marcin Kosiba } 211751f7cf16cd02f14050bb723175a2a57570e8486dTao Bai 21187ab33360e331e04f515d532064670e210d174a7aTao Bai @Override 211951f7cf16cd02f14050bb723175a2a57570e8486dTao Bai public boolean requestDrawGL(Canvas canvas) { 21207ab33360e331e04f515d532064670e210d174a7aTao Bai if (mGLfunctor == null) { 21217ab33360e331e04f515d532064670e210d174a7aTao Bai mGLfunctor = new DrawGLFunctor(mAwContents.getAwDrawGLViewContext()); 21227ab33360e331e04f515d532064670e210d174a7aTao Bai } 212351f7cf16cd02f14050bb723175a2a57570e8486dTao Bai return mGLfunctor.requestDrawGL((HardwareCanvas)canvas, mWebView.getViewRootImpl()); 212451f7cf16cd02f14050bb723175a2a57570e8486dTao Bai } 212546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) } 212646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)} 2127