WebViewChromium.java revision 0363422b19ca6263dbfbcd0d9daa6d1abe5c6892
146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)/*
246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * Copyright (C) 2012 The Android Open Source Project
346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) *
446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * Licensed under the Apache License, Version 2.0 (the "License");
546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * you may not use this file except in compliance with the License.
646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * You may obtain a copy of the License at
746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) *
846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) *      http://www.apache.org/licenses/LICENSE-2.0
946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) *
1046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * Unless required by applicable law or agreed to in writing, software
1146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * distributed under the License is distributed on an "AS IS" BASIS,
1246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * See the License for the specific language governing permissions and
1446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * limitations under the License.
1546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) */
1646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
1746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)package com.android.webview.chromium;
1846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
1946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.content.res.Configuration;
2046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.graphics.Bitmap;
2146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.graphics.Canvas;
2246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.graphics.Paint;
2346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.graphics.Picture;
2446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.graphics.Rect;
2546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.graphics.drawable.Drawable;
2646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.net.http.SslCertificate;
2746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.os.Build;
2846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.os.Bundle;
2954a6e3d0cc566df6cec6807c0c03f05664de0a55Selim Gurunimport android.os.CancellationSignal;
3046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.os.Message;
31efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdochimport android.util.Base64;
32e78d6e40e4e78671e6621ba8cf49835568704899Jonathan Dixonimport android.util.Log;
33a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixonimport android.view.HardwareCanvas;
3446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.KeyEvent;
3546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.MotionEvent;
3646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.View;
373411fdf2737f3f0dd0c1fa20045356cf89f34eddBo Liuimport android.view.View.MeasureSpec;
3846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.ViewGroup;
3946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.accessibility.AccessibilityEvent;
4046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.accessibility.AccessibilityNodeInfo;
415c990caf9c0237064dab94059f6c46fc2d51cd97Ben Murdochimport android.view.accessibility.AccessibilityNodeProvider;
4246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.inputmethod.EditorInfo;
4346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.inputmethod.InputConnection;
4446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.DownloadListener;
456d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdochimport android.webkit.FindActionModeCallback;
467db34d3dcaac936566f912e1b0b21f3f103029ffJonathan Dixonimport android.webkit.JavascriptInterface;
4746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.ValueCallback;
4846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.WebBackForwardList;
4946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.WebChromeClient;
5046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.WebSettings;
5146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.WebView;
5246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.WebViewClient;
5346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.WebViewProvider;
5433e1eeae98299666b8c2d1e879f92d1c83fe33fbBen Murdochimport android.widget.TextView;
5546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
56aa8b39f3e3f208586f3750d7278f1239a09ebd32Kristian Monsenimport org.chromium.android_webview.AwBrowserContext;
5746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import org.chromium.android_webview.AwContents;
58a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsenimport org.chromium.base.ThreadUtils;
5946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import org.chromium.content.browser.LoadUrlParams;
6046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import org.chromium.net.NetworkChangeNotifier;
6146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
6246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import java.io.BufferedWriter;
6346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import java.io.File;
6449a1a6f9f27b63687edc1d98f842627d4719a327Selim Gurunimport java.io.OutputStream;
65ea844f60b1b559788566fe6e004b1eeca53a8039Jonathan Dixonimport java.lang.annotation.Annotation;
66b8281877c710018a3bc8066be17b1e11822be015Selim Gurunimport java.util.HashMap;
6746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import java.util.Map;
6846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
6946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)/**
7046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * This class is the delegate to which WebViewProxy forwards all API calls.
7146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) *
721cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon * Most of the actual functionality is implemented by AwContents (or ContentViewCore within
731cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon * it). This class also contains WebView-specific APIs that require the creation of other
741cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon * adapters (otherwise org.chromium.content would depend on the webview.chromium package)
751cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon * and a small set of no-op deprecated APIs.
7646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) */
7746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)class WebViewChromium implements WebViewProvider,
7846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)          WebViewProvider.ScrollDelegate, WebViewProvider.ViewDelegate {
79e78d6e40e4e78671e6621ba8cf49835568704899Jonathan Dixon
80e78d6e40e4e78671e6621ba8cf49835568704899Jonathan Dixon    private static final String TAG = WebViewChromium.class.getSimpleName();
81e78d6e40e4e78671e6621ba8cf49835568704899Jonathan Dixon
8246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // The WebView that this WebViewChromium is the provider for.
8346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    WebView mWebView;
8446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // Lets us access protected View-derived methods on the WebView instance we're backing.
8546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    WebView.PrivateAccess mWebViewPrivate;
8646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // The client adapter class.
8746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    private WebViewContentsClientAdapter mContentsClientAdapter;
8846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
8946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // Variables for functionality provided by this adapter ---------------------------------------
9046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // WebSettings adapter, lazily initialized in the getter
9146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    private WebSettings mWebSettings;
923949435b480cb71106f65b237025da359cf8a8caBen Murdoch    // The WebView wrapper for ContentViewCore and required browser compontents.
9346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    private AwContents mAwContents;
94a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon    // Non-null if this webview is using the GL accelerated draw path.
95a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon    private DrawGLFunctor mGLfunctor;
9646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
97aa8b39f3e3f208586f3750d7278f1239a09ebd32Kristian Monsen    private AwBrowserContext mBrowserContext;
98aa8b39f3e3f208586f3750d7278f1239a09ebd32Kristian Monsen
99c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu    private final WebView.HitTestResult mHitTestResult;
100c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu
1016ef347a29d692df672aaf59ee4926a476288476aBen Murdoch    private final int mAppTargetSdkVersion;
1026ef347a29d692df672aaf59ee4926a476288476aBen Murdoch
103aa8b39f3e3f208586f3750d7278f1239a09ebd32Kristian Monsen    public WebViewChromium(WebView webView, WebView.PrivateAccess webViewPrivate,
104aa8b39f3e3f208586f3750d7278f1239a09ebd32Kristian Monsen            AwBrowserContext browserContext) {
10546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mWebView = webView;
10646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mWebViewPrivate = webViewPrivate;
107c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu        mHitTestResult = new WebView.HitTestResult();
108aa8b39f3e3f208586f3750d7278f1239a09ebd32Kristian Monsen        mBrowserContext = browserContext;
1096ef347a29d692df672aaf59ee4926a476288476aBen Murdoch        mAppTargetSdkVersion = mWebView.getContext().getApplicationInfo().targetSdkVersion;
11046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
11146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
1121ee9dd0420198429115c3fe8cf0b0502fab9cf62Ben Murdoch    static void completeWindowCreation(WebView parent, WebView child) {
1131ee9dd0420198429115c3fe8cf0b0502fab9cf62Ben Murdoch        AwContents parentContents = ((WebViewChromium) parent.getWebViewProvider()).mAwContents;
114bbfef40e5fc625f4821f012fae7f16468b7308cfJonathan Dixon        AwContents childContents =
115bbfef40e5fc625f4821f012fae7f16468b7308cfJonathan Dixon                child == null ? null : ((WebViewChromium) child.getWebViewProvider()).mAwContents;
1161ee9dd0420198429115c3fe8cf0b0502fab9cf62Ben Murdoch        parentContents.supplyContentsForPopup(childContents);
11746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
11846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
11946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // WebViewProvider methods --------------------------------------------------------------------
12046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
12146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
12246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void init(Map<String, Object> javaScriptInterfaces, boolean privateBrowsing) {
1234dcabaef9151384b571327b62234409b31caef38Jonathan Dixon        // BUG=6790250 |javaScriptInterfaces| was only ever used by the obsolete DumpRenderTree
1244dcabaef9151384b571327b62234409b31caef38Jonathan Dixon        // so is ignored. TODO: remove it from WebViewProvider.
12546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        final boolean isAccessFromFileURLsGrantedByDefault =
1266ef347a29d692df672aaf59ee4926a476288476aBen Murdoch                 mAppTargetSdkVersion < Build.VERSION_CODES.JELLY_BEAN;
12746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mContentsClientAdapter = new WebViewContentsClientAdapter(mWebView);
128aa8b39f3e3f208586f3750d7278f1239a09ebd32Kristian Monsen        mAwContents = new AwContents(mBrowserContext, mWebView, new InternalAccessAdapter(),
129aa8b39f3e3f208586f3750d7278f1239a09ebd32Kristian Monsen                mContentsClientAdapter, isAccessFromFileURLsGrantedByDefault);
1304dcabaef9151384b571327b62234409b31caef38Jonathan Dixon
1314dcabaef9151384b571327b62234409b31caef38Jonathan Dixon        if (privateBrowsing) {
1324dcabaef9151384b571327b62234409b31caef38Jonathan Dixon            final String msg = "Private browsing is not supported in WebView.";
13333e1eeae98299666b8c2d1e879f92d1c83fe33fbBen Murdoch                       if (mAppTargetSdkVersion >= Build.VERSION_CODES.KEY_LIME_PIE) {
1344dcabaef9151384b571327b62234409b31caef38Jonathan Dixon                throw new IllegalArgumentException(msg);
1354dcabaef9151384b571327b62234409b31caef38Jonathan Dixon            } else {
1364dcabaef9151384b571327b62234409b31caef38Jonathan Dixon                Log.w(TAG, msg);
1374dcabaef9151384b571327b62234409b31caef38Jonathan Dixon                // Intentionally irreversibly disable the webview instance, so that private
1384dcabaef9151384b571327b62234409b31caef38Jonathan Dixon                // user data cannot leak through misuse of a non-privateBrowing WebView instance.
1394dcabaef9151384b571327b62234409b31caef38Jonathan Dixon                // Can't just null out mAwContents as we never null-check it before use.
1404dcabaef9151384b571327b62234409b31caef38Jonathan Dixon                mAwContents.destroy();
14133e1eeae98299666b8c2d1e879f92d1c83fe33fbBen Murdoch                TextView warningLabel = new TextView(mWebView.getContext());
14233e1eeae98299666b8c2d1e879f92d1c83fe33fbBen Murdoch                warningLabel.setText(mWebView.getContext().getString(
14333e1eeae98299666b8c2d1e879f92d1c83fe33fbBen Murdoch                        com.android.internal.R.string.webviewchromium_private_browsing_warning));
14433e1eeae98299666b8c2d1e879f92d1c83fe33fbBen Murdoch                mWebView.addView(warningLabel);
1454dcabaef9151384b571327b62234409b31caef38Jonathan Dixon            }
1464dcabaef9151384b571327b62234409b31caef38Jonathan Dixon        }
1474dcabaef9151384b571327b62234409b31caef38Jonathan Dixon
14846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
14946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
15062389e2d66a99e936652092333782947e363241dKristian Monsen    //  Intentionally not static, as no need to check thread on static methods
15162389e2d66a99e936652092333782947e363241dKristian Monsen    private void checkThread() {
15262389e2d66a99e936652092333782947e363241dKristian Monsen        if (!ThreadUtils.runningOnUiThread()) {
15362389e2d66a99e936652092333782947e363241dKristian Monsen            throw new IllegalStateException(
15462389e2d66a99e936652092333782947e363241dKristian Monsen                    "Calling View methods on another thread than the UI thread. " +
15562389e2d66a99e936652092333782947e363241dKristian Monsen                    "PLEASE FILE A BUG! go/klp-webview-bug");
15662389e2d66a99e936652092333782947e363241dKristian Monsen        }
15762389e2d66a99e936652092333782947e363241dKristian Monsen    }
15862389e2d66a99e936652092333782947e363241dKristian Monsen
15946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
16046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setHorizontalScrollbarOverlay(boolean overlay) {
16162389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
162bd819ca872a1711e4607ef11cd8b0b2156241897Martin Kosiba        mAwContents.setHorizontalScrollbarOverlay(overlay);
16346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
16446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
16546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
16646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setVerticalScrollbarOverlay(boolean overlay) {
16762389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
168bd819ca872a1711e4607ef11cd8b0b2156241897Martin Kosiba        mAwContents.setVerticalScrollbarOverlay(overlay);
16946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
17046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
17146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
17246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean overlayHorizontalScrollbar() {
17362389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
174bd819ca872a1711e4607ef11cd8b0b2156241897Martin Kosiba        return mAwContents.overlayHorizontalScrollbar();
17546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
17646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
17746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
17846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean overlayVerticalScrollbar() {
17962389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
180bd819ca872a1711e4607ef11cd8b0b2156241897Martin Kosiba        return mAwContents.overlayVerticalScrollbar();
18146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
18246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
18346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
18446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public int getVisibleTitleHeight() {
18546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        // This is deprecated in WebView and should always return 0.
18646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return 0;
18746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
18846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
18946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
19046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public SslCertificate getCertificate() {
19162389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
19246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return mAwContents.getCertificate();
19346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
19446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
19546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
19646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setCertificate(SslCertificate certificate) {
19762389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
19846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
19946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
20046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
20146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
20246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void savePassword(String host, String username, String password) {
203adc6c4d74c77a617100bdfeb174ab0c314b24ea8Selim Gurun        // This is a deprecated API: intentional no-op.
20446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
20546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
20646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
20746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setHttpAuthUsernamePassword(String host, String realm, String username,
20846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)                                            String password) {
20962389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
21046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mAwContents.setHttpAuthUsernamePassword(host, realm, username, password);
21146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
21246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
21346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
21446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public String[] getHttpAuthUsernamePassword(String host, String realm) {
21562389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
21646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return mAwContents.getHttpAuthUsernamePassword(host, realm);
21746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
21846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
21946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
22046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void destroy() {
22162389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
2223949435b480cb71106f65b237025da359cf8a8caBen Murdoch        mAwContents.destroy();
223a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon        if (mGLfunctor != null) {
224a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon            mGLfunctor.destroy();
225a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon            mGLfunctor = null;
226a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon        }
22746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
22846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
22946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
23046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setNetworkAvailable(boolean networkUp) {
23162389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
2320363422b19ca6263dbfbcd0d9daa6d1abe5c6892Ben Murdoch        // Note that this purely toggles the JS navigator.online property.
2330363422b19ca6263dbfbcd0d9daa6d1abe5c6892Ben Murdoch        // It does not in affect chromium or network stack state in any way.
2340363422b19ca6263dbfbcd0d9daa6d1abe5c6892Ben Murdoch        mAwContents.setNetworkAvailable(networkUp);
23546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
23646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
23746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
23846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public WebBackForwardList saveState(Bundle outState) {
23962389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
240a08e8aada16dc4dbfb8745532169fb4a8347541dBo Liu        if (outState == null) return null;
241a08e8aada16dc4dbfb8745532169fb4a8347541dBo Liu        if (!mAwContents.saveState(outState)) return null;
242a08e8aada16dc4dbfb8745532169fb4a8347541dBo Liu        return copyBackForwardList();
24346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
24446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
24546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
24646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean savePicture(Bundle b, File dest) {
2479405536501747e2d7b4fc46a33e5f0a1e7fd47acJonathan Dixon        // Intentional no-op: hidden method on WebView.
24846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return false;
24946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
25046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
25146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
25246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean restorePicture(Bundle b, File src) {
2539405536501747e2d7b4fc46a33e5f0a1e7fd47acJonathan Dixon        // Intentional no-op: hidden method on WebView.
25446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return false;
25546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
25646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
25746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
25846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public WebBackForwardList restoreState(Bundle inState) {
25962389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
260a08e8aada16dc4dbfb8745532169fb4a8347541dBo Liu        if (inState == null) return null;
261a08e8aada16dc4dbfb8745532169fb4a8347541dBo Liu        if (!mAwContents.restoreState(inState)) return null;
262a08e8aada16dc4dbfb8745532169fb4a8347541dBo Liu        return copyBackForwardList();
26346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
26446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
26546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
26646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void loadUrl(String url, Map<String, String> additionalHttpHeaders) {
26746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        // TODO: We may actually want to do some sanity checks here (like filter about://chrome).
2686ef347a29d692df672aaf59ee4926a476288476aBen Murdoch
2696ef347a29d692df672aaf59ee4926a476288476aBen Murdoch        // For backwards compatibility, apps targeting less than K will have JS URLs evaluated
2706ef347a29d692df672aaf59ee4926a476288476aBen Murdoch        // directly and any result of the evaluation will not replace the current page content.
2716ef347a29d692df672aaf59ee4926a476288476aBen Murdoch        // Matching Chrome behavior more closely; apps targetting >= K that load a JS URL will
2726ef347a29d692df672aaf59ee4926a476288476aBen Murdoch        // have the result of that URL replace the content of the current page.
2736ef347a29d692df672aaf59ee4926a476288476aBen Murdoch        final String JAVASCRIPT_SCHEME = "javascript:";
2746ef347a29d692df672aaf59ee4926a476288476aBen Murdoch        if (mAppTargetSdkVersion < Build.VERSION_CODES.KEY_LIME_PIE &&
2756ef347a29d692df672aaf59ee4926a476288476aBen Murdoch                url.startsWith(JAVASCRIPT_SCHEME)) {
2763d52163e1c466860651414670c59762f5bdd269fTao Bai            mAwContents.evaluateJavaScriptEvenIfNotYetNavigated(
2773d52163e1c466860651414670c59762f5bdd269fTao Bai                    url.substring(JAVASCRIPT_SCHEME.length()));
2786ef347a29d692df672aaf59ee4926a476288476aBen Murdoch            return;
2796ef347a29d692df672aaf59ee4926a476288476aBen Murdoch        }
2806ef347a29d692df672aaf59ee4926a476288476aBen Murdoch
28146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        LoadUrlParams params = new LoadUrlParams(url);
28246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        if (additionalHttpHeaders != null) params.setExtraHeaders(additionalHttpHeaders);
283a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen        loadUrlOnUiThread(params);
28446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
28546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
28646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
28746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void loadUrl(String url) {
28846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        loadUrl(url, null);
28946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
29046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
29146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
29246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void postUrl(String url, byte[] postData) {
293b8281877c710018a3bc8066be17b1e11822be015Selim Gurun        LoadUrlParams params = LoadUrlParams.createLoadHttpPostParams(url, postData);
294b8281877c710018a3bc8066be17b1e11822be015Selim Gurun        Map<String,String> headers = new HashMap<String,String>();
295b8281877c710018a3bc8066be17b1e11822be015Selim Gurun        headers.put("Content-Type", "application/x-www-form-urlencoded");
296b8281877c710018a3bc8066be17b1e11822be015Selim Gurun        params.setExtraHeaders(headers);
297b8281877c710018a3bc8066be17b1e11822be015Selim Gurun        loadUrlOnUiThread(params);
29846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
29946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
30046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    private static boolean isBase64Encoded(String encoding) {
30146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return "base64".equals(encoding);
30246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
30346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
30446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
30546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void loadData(String data, String mimeType, String encoding) {
306a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen        loadUrlOnUiThread(LoadUrlParams.createLoadDataParams(
307a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen                data, mimeType, isBase64Encoded(encoding)));
30846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
30946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
31046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
31146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void loadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding,
312efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch            String historyUrl) {
313efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch        LoadUrlParams loadUrlParams;
314efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch
315efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch        if (baseUrl != null && baseUrl.startsWith("data:")) {
316efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch            // For backwards compatibility with WebViewClassic, we use the value of |encoding|
317efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch            // as the charset, as long as it's not "base64".
318efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch            boolean isBase64 = isBase64Encoded(encoding);
319efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch            loadUrlParams = LoadUrlParams.createLoadDataParamsWithBaseUrl(
320efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch                    data, mimeType, isBase64, baseUrl, historyUrl, isBase64 ? null : encoding);
321efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch        } else {
322efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch            if (baseUrl == null || baseUrl.length() == 0) baseUrl = "about:blank";
323efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch            // When loading data with a non-data: base URL, the classic WebView would effectively
324efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch            // "dump" that string of data into the WebView without going through regular URL
325efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch            // loading steps such as decoding URL-encoded entities. We achieve this same behavior by
326efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch            // base64 encoding the data that is passed here and then loading that as a data: URL.
327efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch            try {
328efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch                loadUrlParams = LoadUrlParams.createLoadDataParamsWithBaseUrl(
329efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch                        Base64.encodeToString(data.getBytes("utf-8"), Base64.DEFAULT), mimeType,
330efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch                        true, baseUrl, historyUrl, "utf-8");
331efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch            } catch (java.io.UnsupportedEncodingException e) {
332efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch                Log.wtf(TAG, "Unable to load data string " + data, e);
333efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch                return;
334efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch            }
335efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch        }
336a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen        loadUrlOnUiThread(loadUrlParams);
337a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen    }
338a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen
339a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen    private void loadUrlOnUiThread(final LoadUrlParams loadUrlParams) {
340a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen        if (ThreadUtils.runningOnUiThread()) {
341a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen            mAwContents.loadUrl(loadUrlParams);
342a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen        } else {
343a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen            // Disallowed in WebView API for apps targetting a new SDK
344a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen            assert mAppTargetSdkVersion < Build.VERSION_CODES.JELLY_BEAN_MR2;
345a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen            ThreadUtils.postOnUiThread(new Runnable() {
346a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen                @Override
347a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen                public void run() {
348a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen                    mAwContents.loadUrl(loadUrlParams);
349a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen                }
350a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen            });
351a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen        }
35246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
35346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
3546ef347a29d692df672aaf59ee4926a476288476aBen Murdoch    public void evaluateJavaScript(String script, ValueCallback<String> resultCallback) {
35562389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
3566ef347a29d692df672aaf59ee4926a476288476aBen Murdoch        mAwContents.evaluateJavaScript(script, resultCallback);
3576ef347a29d692df672aaf59ee4926a476288476aBen Murdoch    }
3586ef347a29d692df672aaf59ee4926a476288476aBen Murdoch
35946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
36046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void saveWebArchive(String filename) {
36162389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
36246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        saveWebArchive(filename, false, null);
36346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
36446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
36546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
36646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void saveWebArchive(String basename, boolean autoname, ValueCallback<String> callback) {
36762389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
36846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mAwContents.saveWebArchive(basename, autoname, callback);
36946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
37046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
37146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
37246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void stopLoading() {
37362389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
3747cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        mAwContents.stopLoading();
37546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
37646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
37746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
37846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void reload() {
37962389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
3807cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        mAwContents.reload();
38146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
38246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
38346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
38446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean canGoBack() {
38562389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
3867cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.canGoBack();
38746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
38846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
38946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
39046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void goBack() {
39162389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
3927cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        mAwContents.goBack();
39346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
39446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
39546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
39646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean canGoForward() {
39762389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
3987cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.canGoForward();
39946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
40046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
40146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
40246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void goForward() {
40362389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
4047cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        mAwContents.goForward();
40546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
40646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
40746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
40846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean canGoBackOrForward(int steps) {
40962389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
4107cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.canGoBackOrForward(steps);
41146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
41246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
41346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
41446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void goBackOrForward(int steps) {
41562389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
4167cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        mAwContents.goBackOrForward(steps);
41746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
41846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
41946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
42046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean isPrivateBrowsingEnabled() {
4216d58f78e7fc0412a58b163559cb8e9c4af5c6fe1Jonathan Dixon        // Not supported in this WebView implementation.
42246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return false;
42346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
42446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
42546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
42646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean pageUp(boolean top) {
42762389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
4287cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.pageUp(top);
42946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
43046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
43146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
43246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean pageDown(boolean bottom) {
43362389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
4347cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.pageDown(bottom);
43546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
43646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
43746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
43846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void clearView() {
43962389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
44046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
44146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
44246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
44346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
44446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public Picture capturePicture() {
44562389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
4469c5a40623b62737244deb2d04a98830d7ffa8404Leandro Gracia Gil        return mAwContents.capturePicture();
44746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
44846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
44946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
45049a1a6f9f27b63687edc1d98f842627d4719a327Selim Gurun    public void exportToPdf(OutputStream stream, int width, int height,
45154a6e3d0cc566df6cec6807c0c03f05664de0a55Selim Gurun            ValueCallback<Boolean> resultCallback, CancellationSignal cancellationSignal) {
45262389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
45354a6e3d0cc566df6cec6807c0c03f05664de0a55Selim Gurun        mAwContents.getPdfExporter().exportToPdf(stream, width, height, resultCallback,
45454a6e3d0cc566df6cec6807c0c03f05664de0a55Selim Gurun                cancellationSignal);
45549a1a6f9f27b63687edc1d98f842627d4719a327Selim Gurun    }
45649a1a6f9f27b63687edc1d98f842627d4719a327Selim Gurun
45749a1a6f9f27b63687edc1d98f842627d4719a327Selim Gurun    @Override
45846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public float getScale() {
45962389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
4603520eb778d668dc76ca4541c69abd568b9d02691Mikhail Naganov        return mAwContents.getScale();
46146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
46246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
46346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
46446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setInitialScale(int scaleInPercent) {
46562389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
4663520eb778d668dc76ca4541c69abd568b9d02691Mikhail Naganov        mAwContents.getSettings().setInitialPageScale(scaleInPercent);
46746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
46846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
46946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
47046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void invokeZoomPicker() {
47162389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
4727cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        mAwContents.invokeZoomPicker();
47346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
47446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
47546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
47646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public WebView.HitTestResult getHitTestResult() {
47762389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
478c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu        AwContents.HitTestData data = mAwContents.getLastHitTestResult();
479c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu        mHitTestResult.setType(data.hitTestResultType);
480c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu        mHitTestResult.setExtra(data.hitTestResultExtraData);
481c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu        return mHitTestResult;
48246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
48346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
48446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
48546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void requestFocusNodeHref(Message hrefMsg) {
48662389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
487c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu        mAwContents.requestFocusNodeHref(hrefMsg);
48846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
48946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
49046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
49146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void requestImageRef(Message msg) {
49262389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
493c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu        mAwContents.requestImageRef(msg);
49446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
49546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
49646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
49746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public String getUrl() {
49862389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
4997cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        String url =  mAwContents.getUrl();
50046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        if (url == null || url.trim().isEmpty()) return null;
50146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return url;
50246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
50346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
50446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
50546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public String getOriginalUrl() {
50662389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
50746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        String url =  mAwContents.getOriginalUrl();
50846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        if (url == null || url.trim().isEmpty()) return null;
50946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return url;
51046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
51146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
51246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
51346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public String getTitle() {
51462389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
5157cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.getTitle();
51646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
51746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
51846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
51946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public Bitmap getFavicon() {
52062389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
5219405536501747e2d7b4fc46a33e5f0a1e7fd47acJonathan Dixon        return mAwContents.getFavicon();
52246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
52346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
52446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
52546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public String getTouchIconUrl() {
5269405536501747e2d7b4fc46a33e5f0a1e7fd47acJonathan Dixon        // Intentional no-op: hidden method on WebView.
52746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return null;
52846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
52946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
53046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
53146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public int getProgress() {
53262389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
53346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return mAwContents.getMostRecentProgress();
53446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
53546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
53646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
53746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public int getContentHeight() {
53862389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
5396b5f3d1546ae2a9c712cde60c54ec027582bc4e6Martin Kosiba        return mAwContents.getContentHeightCss();
54046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
54146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
54246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
54346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public int getContentWidth() {
54462389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
5456b5f3d1546ae2a9c712cde60c54ec027582bc4e6Martin Kosiba        return mAwContents.getContentWidthCss();
54646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
54746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
54846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
54946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void pauseTimers() {
55062389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
551531e68a2b50a5e542eeede13907f29e463a99ebfBen Murdoch        mAwContents.pauseTimers();
55246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
55346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
55446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
55546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void resumeTimers() {
55662389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
557531e68a2b50a5e542eeede13907f29e463a99ebfBen Murdoch        mAwContents.resumeTimers();
55846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
55946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
56046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
56146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onPause() {
56262389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
5631cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon        mAwContents.onPause();
56446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
56546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
56646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
56746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onResume() {
56862389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
5691cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon        mAwContents.onResume();
57046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
57146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
57246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
57346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean isPaused() {
57462389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
5751cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon        return mAwContents.isPaused();
57646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
57746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
57846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
57946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void freeMemory() {
58062389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
58146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
58246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
58346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
58446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
58546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void clearCache(boolean includeDiskFiles) {
58662389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
58746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mAwContents.clearCache(includeDiskFiles);
58846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
58946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
590bbef8de5696d48fc6458c926026fc524a62814e1Selim Gurun    /**
591bbef8de5696d48fc6458c926026fc524a62814e1Selim Gurun     * This is a poorly named method, but we keep it for historical reasons.
592bbef8de5696d48fc6458c926026fc524a62814e1Selim Gurun     */
59346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
59446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void clearFormData() {
59562389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
596bbef8de5696d48fc6458c926026fc524a62814e1Selim Gurun        mAwContents.hideAutofillPopup();
59746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
59846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
59946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
60046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void clearHistory() {
60162389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
6027cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        mAwContents.clearHistory();
60346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
60446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
60546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
60646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void clearSslPreferences() {
60762389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
6087cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        mAwContents.clearSslPreferences();
60946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
61046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
61146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
61246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public WebBackForwardList copyBackForwardList() {
61362389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
61408a5e00cdfb74f4ffd843d2d0a9b0b40b86b107aBo Liu        return new WebBackForwardListChromium(
6157cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba                mAwContents.getNavigationHistory());
61646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
61746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
61846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
61946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setFindListener(WebView.FindListener listener) {
62062389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
62146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mContentsClientAdapter.setFindListener(listener);
62246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
62346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
62446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
62546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void findNext(boolean forwards) {
62662389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
62746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mAwContents.findNext(forwards);
62846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
62946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
63046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
63146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public int findAll(String searchString) {
63262389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
633f37548d6d8e2a73c65d675a26706a38f52960800Jonathan Dixon        mAwContents.findAllAsync(searchString);
634f37548d6d8e2a73c65d675a26706a38f52960800Jonathan Dixon        return 0;
63546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
63646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
63746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
63846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void findAllAsync(String searchString) {
63962389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
64046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mAwContents.findAllAsync(searchString);
64146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
64246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
64346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
64446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean showFindDialog(String text, boolean showIme) {
64562389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
6466d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch        if (mWebView.getParent() == null) {
6476d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch            return false;
6486d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch        }
6496d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch
6506d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch        FindActionModeCallback findAction = new FindActionModeCallback(mWebView.getContext());
6516d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch        if (findAction == null) {
6526d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch            return false;
6536d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch        }
6546d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch
6556d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch        mWebView.startActionMode(findAction);
6566d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch        findAction.setWebView(mWebView);
6576d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch        if (showIme) {
6586d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch            findAction.showSoftInput();
6596d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch        }
6606d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch
6616d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch        if (text != null) {
6626d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch            findAction.setText(text);
6636d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch            findAction.findAll();
6646d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch        }
6656d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch
6666d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch        return true;
66746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
66846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
6696d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch    @Override
670fde8dae44f74be3de69ce6dd07b0023279b485a0Ben Murdoch    public void notifyFindDialogDismissed() {
67162389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
6726d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch        clearMatches();
673fde8dae44f74be3de69ce6dd07b0023279b485a0Ben Murdoch    }
674fde8dae44f74be3de69ce6dd07b0023279b485a0Ben Murdoch
67546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
67646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void clearMatches() {
67762389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
67846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mAwContents.clearMatches();
67946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
68046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
68146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
68246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void documentHasImages(Message response) {
68362389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
68446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mAwContents.documentHasImages(response);
68546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
68646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
68746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
68846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setWebViewClient(WebViewClient client) {
68962389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
69046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mContentsClientAdapter.setWebViewClient(client);
69146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
69246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
69346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
69446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setDownloadListener(DownloadListener listener) {
69562389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
6964320e428efc3bf69387f3b9d5a0589b2b8746409Bo Liu        mContentsClientAdapter.setDownloadListener(listener);
69746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
69846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
69946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
70046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setWebChromeClient(WebChromeClient client) {
70162389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
70246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mContentsClientAdapter.setWebChromeClient(client);
70346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
70446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
70546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
70646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setPictureListener(WebView.PictureListener listener) {
70762389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
70846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mContentsClientAdapter.setPictureListener(listener);
7099c5a40623b62737244deb2d04a98830d7ffa8404Leandro Gracia Gil        mAwContents.enableOnNewPicture(listener != null,
7106ef347a29d692df672aaf59ee4926a476288476aBen Murdoch                mAppTargetSdkVersion >= Build.VERSION_CODES.JELLY_BEAN_MR2);
71146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
71246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
71346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
71446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void addJavascriptInterface(Object obj, String interfaceName) {
71562389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
716ea844f60b1b559788566fe6e004b1eeca53a8039Jonathan Dixon        Class<? extends Annotation> requiredAnnotation = null;
7176ef347a29d692df672aaf59ee4926a476288476aBen Murdoch        if (mAppTargetSdkVersion >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
7187db34d3dcaac936566f912e1b0b21f3f103029ffJonathan Dixon           requiredAnnotation = JavascriptInterface.class;
7197db34d3dcaac936566f912e1b0b21f3f103029ffJonathan Dixon        }
7207cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        mAwContents.addPossiblyUnsafeJavascriptInterface(obj, interfaceName, requiredAnnotation);
72146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
72246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
72346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
72446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void removeJavascriptInterface(String interfaceName) {
72562389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
7267cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        mAwContents.removeJavascriptInterface(interfaceName);
72746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
72846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
72946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
73046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public WebSettings getSettings() {
73162389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
73246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        if (mWebSettings == null) {
733420c0da3a4e06e1ac5574091e7c9c286ef012369Mikhail Naganov            mWebSettings = new ContentSettingsAdapter(mAwContents.getSettings());
73446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        }
73546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return mWebSettings;
73646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
73746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
73846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
73946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setMapTrackballToArrowKeys(boolean setMap) {
74062389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
74146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        // This is a deprecated API: intentional no-op.
74246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
74346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
74446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
74546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void flingScroll(int vx, int vy) {
74662389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
7477cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        mAwContents.flingScroll(vx, vy);
74846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
74946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
75046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
75146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public View getZoomControls() {
75262389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
753e78d6e40e4e78671e6621ba8cf49835568704899Jonathan Dixon        // This was deprecated in 2009 and hidden in JB MR1, so just provide the minimum needed
754e78d6e40e4e78671e6621ba8cf49835568704899Jonathan Dixon        // to stop very out-dated applications from crashing.
755e78d6e40e4e78671e6621ba8cf49835568704899Jonathan Dixon        Log.w(TAG, "WebView doesn't support getZoomControls");
756420c0da3a4e06e1ac5574091e7c9c286ef012369Mikhail Naganov        return mAwContents.getSettings().supportZoom() ? new View(mWebView.getContext()) : null;
75746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
75846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
75946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
76046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean canZoomIn() {
76162389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
7627cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.canZoomIn();
76346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
76446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
76546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
76646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean canZoomOut() {
76762389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
7687cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.canZoomOut();
76946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
77046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
77146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
77246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean zoomIn() {
77362389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
7747cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.zoomIn();
77546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
77646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
77746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
77846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean zoomOut() {
77962389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
7807cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.zoomOut();
78146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
78246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
783d2dcef4d9edfb7af7abff85b0867c3d6a363feb7Jonathan Dixon    @Override
78446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void dumpViewHierarchyWithProperties(BufferedWriter out, int level) {
78562389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
78646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
78746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
78846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
789d2dcef4d9edfb7af7abff85b0867c3d6a363feb7Jonathan Dixon    @Override
79046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public View findHierarchyView(String className, int hashCode) {
79162389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
79246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
79346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return null;
79446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
79546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
79646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // WebViewProvider glue methods ---------------------------------------------------------------
79746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
79846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
79946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public WebViewProvider.ViewDelegate getViewDelegate() {
80062389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
80146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return this;
80246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
80346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
80446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
80546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public WebViewProvider.ScrollDelegate getScrollDelegate() {
80662389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
80746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return this;
80846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
80946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
81046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
81146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // WebViewProvider.ViewDelegate implementation ------------------------------------------------
81246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
813a7fba41c5661cb61b41c8a4ff2d69e5153666f7fBen Murdoch    // TODO: remove from WebViewProvider and use default implementation from
814a7fba41c5661cb61b41c8a4ff2d69e5153666f7fBen Murdoch    // ViewGroup.
815a7fba41c5661cb61b41c8a4ff2d69e5153666f7fBen Murdoch    // @Override
81646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean shouldDelayChildPressedState() {
81762389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
818a7fba41c5661cb61b41c8a4ff2d69e5153666f7fBen Murdoch        return true;
81946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
82046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
8215c990caf9c0237064dab94059f6c46fc2d51cd97Ben Murdoch//    @Override
8225c990caf9c0237064dab94059f6c46fc2d51cd97Ben Murdoch    public AccessibilityNodeProvider getAccessibilityNodeProvider() {
82362389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
8245c990caf9c0237064dab94059f6c46fc2d51cd97Ben Murdoch        return mAwContents.getAccessibilityNodeProvider();
8255c990caf9c0237064dab94059f6c46fc2d51cd97Ben Murdoch    }
8265c990caf9c0237064dab94059f6c46fc2d51cd97Ben Murdoch
82746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
82846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
82962389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
8307cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        mAwContents.onInitializeAccessibilityNodeInfo(info);
83146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
83246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
83346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
83446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
83562389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
8367cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        mAwContents.onInitializeAccessibilityEvent(event);
83746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
83846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
83946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
84046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean performAccessibilityAction(int action, Bundle arguments) {
84162389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
842b7b706b2ed5cbb77dd690f5405b626a429989714Ben Murdoch        if (mAwContents.supportsAccessibilityAction(action)) {
843b7b706b2ed5cbb77dd690f5405b626a429989714Ben Murdoch            return mAwContents.performAccessibilityAction(action, arguments);
844b7b706b2ed5cbb77dd690f5405b626a429989714Ben Murdoch        }
845b7b706b2ed5cbb77dd690f5405b626a429989714Ben Murdoch        return mWebViewPrivate.super_performAccessibilityAction(action, arguments);
84646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
84746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
84846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
84946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setOverScrollMode(int mode) {
85062389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
8512841152693d0410f8e8c309aae514329f008a612Martin Kosiba        // This gets called from the android.view.View c'tor that WebView inherits from. This
8522841152693d0410f8e8c309aae514329f008a612Martin Kosiba        // causes the method to be called when mAwContents == null.
8532841152693d0410f8e8c309aae514329f008a612Martin Kosiba        // It's safe to ignore these calls however since AwContents will read the current value of
8542841152693d0410f8e8c309aae514329f008a612Martin Kosiba        // this setting when it's created.
855ab5398debe64d34306b0f709a93d840078ae181dMartin Kosiba        if (mAwContents != null) {
856ab5398debe64d34306b0f709a93d840078ae181dMartin Kosiba            mAwContents.setOverScrollMode(mode);
857ab5398debe64d34306b0f709a93d840078ae181dMartin Kosiba        }
85846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
85946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
86046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
86146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setScrollBarStyle(int style) {
86262389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
863bd819ca872a1711e4607ef11cd8b0b2156241897Martin Kosiba        mAwContents.setScrollBarStyle(style);
86446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
86546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
86646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
86746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onDrawVerticalScrollBar(Canvas canvas, Drawable scrollBar,
86846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)                                        int l, int t, int r, int b) {
86962389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
870bd819ca872a1711e4607ef11cd8b0b2156241897Martin Kosiba        // WebViewClassic was overriding this method to handle rubberband over-scroll. Since
871bd819ca872a1711e4607ef11cd8b0b2156241897Martin Kosiba        // WebViewChromium doesn't support that the vanilla implementation of this method can be
872bd819ca872a1711e4607ef11cd8b0b2156241897Martin Kosiba        // used.
873bd819ca872a1711e4607ef11cd8b0b2156241897Martin Kosiba        mWebViewPrivate.super_onDrawVerticalScrollBar(canvas, scrollBar, l, t, r, b);
87446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
87546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
87646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
87746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onOverScrolled(int scrollX, int scrollY, boolean clampedX, boolean clampedY) {
87862389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
8793951fbadf5157dd3fe73decc879f9b763e780b09Martin Kosiba        mAwContents.onContainerViewOverScrolled(scrollX, scrollY, clampedX, clampedY);
88046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
88146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
88246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
88346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onWindowVisibilityChanged(int visibility) {
88462389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
8851cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon        mAwContents.onWindowVisibilityChanged(visibility);
88646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
88746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
88846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
88946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onDraw(Canvas canvas) {
89062389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
8917ab33360e331e04f515d532064670e210d174a7aTao Bai        mAwContents.onDraw(canvas);
89246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
89346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
89446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
89546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setLayoutParams(ViewGroup.LayoutParams layoutParams) {
89662389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
89746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        // TODO: This is the minimum implementation for HTMLViewer
89846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        // bringup. Likely will need to go up to ContentViewCore for
89946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        // a complete implementation.
90046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mWebViewPrivate.super_setLayoutParams(layoutParams);
90146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
90246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
90346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
90446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean performLongClick() {
90562389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
906decc147cebc8f73d355c024d92c60d3f727cab31Bo Liu        return mWebViewPrivate.super_performLongClick();
90746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
90846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
90946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
91046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onConfigurationChanged(Configuration newConfig) {
91162389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
9121cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon        mAwContents.onConfigurationChanged(newConfig);
91346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
91446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
91546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
91646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
91762389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
9187cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.onCreateInputConnection(outAttrs);
91946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
92046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
92146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
92246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent event) {
92362389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
92446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
92546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return false;
92646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
92746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
92846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
92946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean onKeyDown(int keyCode, KeyEvent event) {
93062389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
93146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
93246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return false;
93346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
93446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
93546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
93646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean onKeyUp(int keyCode, KeyEvent event) {
93762389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
9387cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.onKeyUp(keyCode, event);
93946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
94046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
94146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
94246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onAttachedToWindow() {
94362389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
9441cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon        mAwContents.onAttachedToWindow();
94546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
94646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
94746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
94846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onDetachedFromWindow() {
94962389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
9501cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon        mAwContents.onDetachedFromWindow();
951a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon        if (mGLfunctor != null) {
952a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon            mGLfunctor.detach();
953a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon        }
95446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
95546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
95646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
95746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onVisibilityChanged(View changedView, int visibility) {
95862389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
959c346a83062dfbf50ac2275813ccb2e36f9e778e9Martin Kosiba        // The AwContents will find out the container view visibility before the first draw so we
960c346a83062dfbf50ac2275813ccb2e36f9e778e9Martin Kosiba        // can safely ignore onVisibilityChanged callbacks that happen before init().
961c346a83062dfbf50ac2275813ccb2e36f9e778e9Martin Kosiba        if (mAwContents != null) {
962c346a83062dfbf50ac2275813ccb2e36f9e778e9Martin Kosiba            mAwContents.onVisibilityChanged(changedView, visibility);
963c346a83062dfbf50ac2275813ccb2e36f9e778e9Martin Kosiba        }
96446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
96546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
96646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
96746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onWindowFocusChanged(boolean hasWindowFocus) {
96862389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
9691cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon        mAwContents.onWindowFocusChanged(hasWindowFocus);
97046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
97146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
97246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
97346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
97462389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
9751cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon        mAwContents.onFocusChanged(focused, direction, previouslyFocusedRect);
97646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
97746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
97846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
97946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean setFrame(int left, int top, int right, int bottom) {
9801cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon        // TODO(joth): This is the minimum implementation for initial
9811cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon        // bringup. Likely will need to go up to AwContents for a complete
9821cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon        // implementation, e.g. setting the compositor visible region (to
9831cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon        // avoid painting tiles that are offscreen due to the view's position).
98462389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
98546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return mWebViewPrivate.super_setFrame(left, top, right, bottom);
98646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
98746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
98846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
98946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onSizeChanged(int w, int h, int ow, int oh) {
99062389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
9911cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon        mAwContents.onSizeChanged(w, h, ow, oh);
99246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
99346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
99446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
99546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onScrollChanged(int l, int t, int oldl, int oldt) {
99662389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
99746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
99846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
99946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
100046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean dispatchKeyEvent(KeyEvent event) {
100162389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
10027cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.dispatchKeyEvent(event);
100346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
100446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
100546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
100646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean onTouchEvent(MotionEvent ev) {
100762389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
1008c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu        return mAwContents.onTouchEvent(ev);
100946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
101046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
101146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
101246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean onHoverEvent(MotionEvent event) {
101362389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
1014c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu        return mAwContents.onHoverEvent(event);
101546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
101646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
101746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
101846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean onGenericMotionEvent(MotionEvent event) {
101962389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
1020c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu        return mAwContents.onGenericMotionEvent(event);
102146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
102246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
102346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
102446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean onTrackballEvent(MotionEvent ev) {
102562389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
102646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        // Trackball event not handled, which eventually gets converted to DPAD keyevents
102746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return false;
102846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
102946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
103046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
103146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean requestFocus(int direction, Rect previouslyFocusedRect) {
103262389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
10334cee3bf50c125a52a49323aa999f4b619fa18c10Ben Murdoch        mAwContents.requestFocus();
103446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return mWebViewPrivate.super_requestFocus(direction, previouslyFocusedRect);
103546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
103646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
103746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
103846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
103962389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
1040d7bf6ab0cd8cc4005b112e4358eb797bb178a85fMarcin Kosiba        mAwContents.onMeasure(widthMeasureSpec, heightMeasureSpec);
104146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
104246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
104346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
104446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean requestChildRectangleOnScreen(View child, Rect rect, boolean immediate) {
104562389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
104646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
104746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return false;
104846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
104946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
105046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
105146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setBackgroundColor(int color) {
105262389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
1053058714d7ae16bbfc096d9b4e0423efeb897bae68Jonathan Dixon        mAwContents.setBackgroundColor(color);
105446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
105546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
105646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
105746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setLayerType(int layerType, Paint paint) {
105862389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
105946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
106046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
106146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
10620b528e4924a7c14687181185bc66173ad18f00eaLeandro Gracia Gil    @Override
106346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void preDispatchDraw(Canvas canvas) {
106462389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
10650b528e4924a7c14687181185bc66173ad18f00eaLeandro Gracia Gil        // TODO(leandrogracia): remove this method from WebViewProvider if we think
10660b528e4924a7c14687181185bc66173ad18f00eaLeandro Gracia Gil        // we won't need it again.
106746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
106846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
106946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // WebViewProvider.ScrollDelegate implementation ----------------------------------------------
107046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
107146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
107246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public int computeHorizontalScrollRange() {
107362389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
10747cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.computeHorizontalScrollRange();
107546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
107646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
107746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
107846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public int computeHorizontalScrollOffset() {
107962389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
10807cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.computeHorizontalScrollOffset();
108146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
108246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
108346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
108446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public int computeVerticalScrollRange() {
108562389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
10867cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.computeVerticalScrollRange();
108746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
108846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
108946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
109046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public int computeVerticalScrollOffset() {
109162389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
10927cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.computeVerticalScrollOffset();
109346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
109446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
109546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
109646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public int computeVerticalScrollExtent() {
109762389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
10987cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.computeVerticalScrollExtent();
109946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
110046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
110146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
110246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void computeScroll() {
110362389e2d66a99e936652092333782947e363241dKristian Monsen        checkThread();
11042a120ba09921dbb1e8354ecbc4a6e063ec891101Martin Kosiba        mAwContents.computeScroll();
110546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
110646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
11074702a6de6031477029de5e6f5777c8b3e7846d35Marcin Kosiba    // AwContents.InternalAccessDelegate implementation --------------------------------------
11084702a6de6031477029de5e6f5777c8b3e7846d35Marcin Kosiba    private class InternalAccessAdapter implements AwContents.InternalAccessDelegate {
110946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        @Override
111046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        public boolean drawChild(Canvas arg0, View arg1, long arg2) {
111146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            UnimplementedWebViewApi.invoke();
111246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            return false;
111346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        }
111446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
111546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        @Override
111646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        public boolean super_onKeyUp(int arg0, KeyEvent arg1) {
111746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            UnimplementedWebViewApi.invoke();
111846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            return false;
111946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        }
112046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
112146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        @Override
112246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        public boolean super_dispatchKeyEventPreIme(KeyEvent arg0) {
112346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            UnimplementedWebViewApi.invoke();
112446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            return false;
112546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        }
112646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
112746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        @Override
112846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        public boolean super_dispatchKeyEvent(KeyEvent event) {
112946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            return mWebViewPrivate.super_dispatchKeyEvent(event);
113046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        }
113146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
113246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        @Override
113346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        public boolean super_onGenericMotionEvent(MotionEvent arg0) {
113446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            UnimplementedWebViewApi.invoke();
113546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            return false;
113646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        }
113746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
113846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        @Override
113946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        public void super_onConfigurationChanged(Configuration arg0) {
114046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            UnimplementedWebViewApi.invoke();
114146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        }
114246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
1143bd819ca872a1711e4607ef11cd8b0b2156241897Martin Kosiba        @Override
11440088640069ac3ed389f4d78582966248b0869ce9Martin Kosiba        public int super_getScrollBarStyle() {
11450088640069ac3ed389f4d78582966248b0869ce9Martin Kosiba            return mWebViewPrivate.super_getScrollBarStyle();
11460088640069ac3ed389f4d78582966248b0869ce9Martin Kosiba        }
11470088640069ac3ed389f4d78582966248b0869ce9Martin Kosiba
114846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        @Override
114946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        public boolean awakenScrollBars() {
115046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            mWebViewPrivate.awakenScrollBars(0);
115146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            // TODO: modify the WebView.PrivateAccess to provide a return value.
115246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            return true;
115346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        }
115446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
115546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        @Override
115646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        public boolean super_awakenScrollBars(int arg0, boolean arg1) {
115746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            // TODO: need method on WebView.PrivateAccess?
115846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            UnimplementedWebViewApi.invoke();
115946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            return false;
116046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        }
11614702a6de6031477029de5e6f5777c8b3e7846d35Marcin Kosiba
1162d7bf6ab0cd8cc4005b112e4358eb797bb178a85fMarcin Kosiba        @Override
11632a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba        public void onScrollChanged(int l, int t, int oldl, int oldt) {
11642a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba            mWebViewPrivate.setScrollXRaw(l);
11652a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba            mWebViewPrivate.setScrollYRaw(t);
11662a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba            mWebViewPrivate.onScrollChanged(l, t, oldl, oldt);
11672a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba        }
11682a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba
11693951fbadf5157dd3fe73decc879f9b763e780b09Martin Kosiba        @Override
11702a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba        public void overScrollBy(int deltaX, int deltaY,
11712a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba            int scrollX, int scrollY,
11722a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba            int scrollRangeX, int scrollRangeY,
11732a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba            int maxOverScrollX, int maxOverScrollY,
11742a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba            boolean isTouchEvent) {
11752a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba            mWebViewPrivate.overScrollBy(deltaX, deltaY, scrollX, scrollY,
11762a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba                    scrollRangeX, scrollRangeY, maxOverScrollX, maxOverScrollY, isTouchEvent);
11772a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba        }
11782a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba
11793951fbadf5157dd3fe73decc879f9b763e780b09Martin Kosiba        @Override
11802a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba        public void super_scrollTo(int scrollX, int scrollY) {
11812a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba            mWebViewPrivate.super_scrollTo(scrollX, scrollY);
11822a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba        }
11832a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba
11842a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba        @Override
11854702a6de6031477029de5e6f5777c8b3e7846d35Marcin Kosiba        public void setMeasuredDimension(int measuredWidth, int measuredHeight) {
11864702a6de6031477029de5e6f5777c8b3e7846d35Marcin Kosiba            mWebViewPrivate.setMeasuredDimension(measuredWidth, measuredHeight);
11874702a6de6031477029de5e6f5777c8b3e7846d35Marcin Kosiba        }
118851f7cf16cd02f14050bb723175a2a57570e8486dTao Bai
11897ab33360e331e04f515d532064670e210d174a7aTao Bai        @Override
119051f7cf16cd02f14050bb723175a2a57570e8486dTao Bai        public boolean requestDrawGL(Canvas canvas) {
11917ab33360e331e04f515d532064670e210d174a7aTao Bai            if (mGLfunctor == null) {
11927ab33360e331e04f515d532064670e210d174a7aTao Bai                mGLfunctor = new DrawGLFunctor(mAwContents.getAwDrawGLViewContext());
11937ab33360e331e04f515d532064670e210d174a7aTao Bai            }
119451f7cf16cd02f14050bb723175a2a57570e8486dTao Bai            return mGLfunctor.requestDrawGL((HardwareCanvas)canvas, mWebView.getViewRootImpl());
119551f7cf16cd02f14050bb723175a2a57570e8486dTao Bai        }
119646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
119746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)}
1198