WebViewChromium.java revision 33e1eeae98299666b8c2d1e879f92d1c83fe33fb
146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)/*
246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * Copyright (C) 2012 The Android Open Source Project
346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) *
446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * Licensed under the Apache License, Version 2.0 (the "License");
546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * you may not use this file except in compliance with the License.
646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * You may obtain a copy of the License at
746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) *
846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) *      http://www.apache.org/licenses/LICENSE-2.0
946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) *
1046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * Unless required by applicable law or agreed to in writing, software
1146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * distributed under the License is distributed on an "AS IS" BASIS,
1246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * See the License for the specific language governing permissions and
1446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * limitations under the License.
1546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) */
1646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
1746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)package com.android.webview.chromium;
1846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
1946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.content.res.Configuration;
2046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.graphics.Bitmap;
2146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.graphics.Canvas;
2246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.graphics.Paint;
2346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.graphics.Picture;
2446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.graphics.Rect;
2546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.graphics.drawable.Drawable;
2646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.net.http.SslCertificate;
2746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.os.Build;
2846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.os.Bundle;
2946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.os.Message;
30efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdochimport android.util.Base64;
31e78d6e40e4e78671e6621ba8cf49835568704899Jonathan Dixonimport android.util.Log;
32a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixonimport android.view.HardwareCanvas;
3346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.KeyEvent;
3446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.MotionEvent;
3546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.View;
363411fdf2737f3f0dd0c1fa20045356cf89f34eddBo Liuimport android.view.View.MeasureSpec;
3746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.ViewGroup;
3846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.accessibility.AccessibilityEvent;
3946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.accessibility.AccessibilityNodeInfo;
405c990caf9c0237064dab94059f6c46fc2d51cd97Ben Murdochimport android.view.accessibility.AccessibilityNodeProvider;
4146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.inputmethod.EditorInfo;
4246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.inputmethod.InputConnection;
4346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.DownloadListener;
446d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdochimport android.webkit.FindActionModeCallback;
457db34d3dcaac936566f912e1b0b21f3f103029ffJonathan Dixonimport android.webkit.JavascriptInterface;
4646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.ValueCallback;
4746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.WebBackForwardList;
4846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.WebChromeClient;
4946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.WebSettings;
5046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.WebView;
5146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.WebViewClient;
5246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.WebViewProvider;
5333e1eeae98299666b8c2d1e879f92d1c83fe33fbBen Murdochimport android.widget.TextView;
5446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
55aa8b39f3e3f208586f3750d7278f1239a09ebd32Kristian Monsenimport org.chromium.android_webview.AwBrowserContext;
5646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import org.chromium.android_webview.AwContents;
57a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsenimport org.chromium.base.ThreadUtils;
5846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import org.chromium.content.browser.LoadUrlParams;
5946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import org.chromium.net.NetworkChangeNotifier;
6046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
6146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import java.io.BufferedWriter;
6246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import java.io.File;
6349a1a6f9f27b63687edc1d98f842627d4719a327Selim Gurunimport java.io.OutputStream;
64ea844f60b1b559788566fe6e004b1eeca53a8039Jonathan Dixonimport java.lang.annotation.Annotation;
65b8281877c710018a3bc8066be17b1e11822be015Selim Gurunimport java.util.HashMap;
6646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import java.util.Map;
6746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
6846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)/**
6946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * This class is the delegate to which WebViewProxy forwards all API calls.
7046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) *
711cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon * Most of the actual functionality is implemented by AwContents (or ContentViewCore within
721cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon * it). This class also contains WebView-specific APIs that require the creation of other
731cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon * adapters (otherwise org.chromium.content would depend on the webview.chromium package)
741cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon * and a small set of no-op deprecated APIs.
7546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) */
7646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)class WebViewChromium implements WebViewProvider,
7746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)          WebViewProvider.ScrollDelegate, WebViewProvider.ViewDelegate {
78e78d6e40e4e78671e6621ba8cf49835568704899Jonathan Dixon
79e78d6e40e4e78671e6621ba8cf49835568704899Jonathan Dixon    private static final String TAG = WebViewChromium.class.getSimpleName();
80e78d6e40e4e78671e6621ba8cf49835568704899Jonathan Dixon
8146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // The WebView that this WebViewChromium is the provider for.
8246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    WebView mWebView;
8346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // Lets us access protected View-derived methods on the WebView instance we're backing.
8446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    WebView.PrivateAccess mWebViewPrivate;
8546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // The client adapter class.
8646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    private WebViewContentsClientAdapter mContentsClientAdapter;
8746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
8846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // Variables for functionality provided by this adapter ---------------------------------------
8946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // WebSettings adapter, lazily initialized in the getter
9046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    private WebSettings mWebSettings;
913949435b480cb71106f65b237025da359cf8a8caBen Murdoch    // The WebView wrapper for ContentViewCore and required browser compontents.
9246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    private AwContents mAwContents;
93a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon    // Non-null if this webview is using the GL accelerated draw path.
94a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon    private DrawGLFunctor mGLfunctor;
9546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
96aa8b39f3e3f208586f3750d7278f1239a09ebd32Kristian Monsen    private AwBrowserContext mBrowserContext;
97aa8b39f3e3f208586f3750d7278f1239a09ebd32Kristian Monsen
98c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu    private final WebView.HitTestResult mHitTestResult;
99c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu
1006ef347a29d692df672aaf59ee4926a476288476aBen Murdoch    private final int mAppTargetSdkVersion;
1016ef347a29d692df672aaf59ee4926a476288476aBen Murdoch
102aa8b39f3e3f208586f3750d7278f1239a09ebd32Kristian Monsen    public WebViewChromium(WebView webView, WebView.PrivateAccess webViewPrivate,
103aa8b39f3e3f208586f3750d7278f1239a09ebd32Kristian Monsen            AwBrowserContext browserContext) {
10446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mWebView = webView;
10546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mWebViewPrivate = webViewPrivate;
106c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu        mHitTestResult = new WebView.HitTestResult();
107aa8b39f3e3f208586f3750d7278f1239a09ebd32Kristian Monsen        mBrowserContext = browserContext;
1086ef347a29d692df672aaf59ee4926a476288476aBen Murdoch        mAppTargetSdkVersion = mWebView.getContext().getApplicationInfo().targetSdkVersion;
10946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
11046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
1111ee9dd0420198429115c3fe8cf0b0502fab9cf62Ben Murdoch    static void completeWindowCreation(WebView parent, WebView child) {
1121ee9dd0420198429115c3fe8cf0b0502fab9cf62Ben Murdoch        AwContents parentContents = ((WebViewChromium) parent.getWebViewProvider()).mAwContents;
113bbfef40e5fc625f4821f012fae7f16468b7308cfJonathan Dixon        AwContents childContents =
114bbfef40e5fc625f4821f012fae7f16468b7308cfJonathan Dixon                child == null ? null : ((WebViewChromium) child.getWebViewProvider()).mAwContents;
1151ee9dd0420198429115c3fe8cf0b0502fab9cf62Ben Murdoch        parentContents.supplyContentsForPopup(childContents);
11646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
11746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
11846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // WebViewProvider methods --------------------------------------------------------------------
11946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
12046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
12146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void init(Map<String, Object> javaScriptInterfaces, boolean privateBrowsing) {
1224dcabaef9151384b571327b62234409b31caef38Jonathan Dixon        // BUG=6790250 |javaScriptInterfaces| was only ever used by the obsolete DumpRenderTree
1234dcabaef9151384b571327b62234409b31caef38Jonathan Dixon        // so is ignored. TODO: remove it from WebViewProvider.
12446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        final boolean isAccessFromFileURLsGrantedByDefault =
1256ef347a29d692df672aaf59ee4926a476288476aBen Murdoch                 mAppTargetSdkVersion < Build.VERSION_CODES.JELLY_BEAN;
12646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mContentsClientAdapter = new WebViewContentsClientAdapter(mWebView);
127aa8b39f3e3f208586f3750d7278f1239a09ebd32Kristian Monsen        mAwContents = new AwContents(mBrowserContext, mWebView, new InternalAccessAdapter(),
128aa8b39f3e3f208586f3750d7278f1239a09ebd32Kristian Monsen                mContentsClientAdapter, isAccessFromFileURLsGrantedByDefault);
1294dcabaef9151384b571327b62234409b31caef38Jonathan Dixon
1304dcabaef9151384b571327b62234409b31caef38Jonathan Dixon        if (privateBrowsing) {
1314dcabaef9151384b571327b62234409b31caef38Jonathan Dixon            final String msg = "Private browsing is not supported in WebView.";
13233e1eeae98299666b8c2d1e879f92d1c83fe33fbBen Murdoch                       if (mAppTargetSdkVersion >= Build.VERSION_CODES.KEY_LIME_PIE) {
1334dcabaef9151384b571327b62234409b31caef38Jonathan Dixon                throw new IllegalArgumentException(msg);
1344dcabaef9151384b571327b62234409b31caef38Jonathan Dixon            } else {
1354dcabaef9151384b571327b62234409b31caef38Jonathan Dixon                Log.w(TAG, msg);
1364dcabaef9151384b571327b62234409b31caef38Jonathan Dixon                // Intentionally irreversibly disable the webview instance, so that private
1374dcabaef9151384b571327b62234409b31caef38Jonathan Dixon                // user data cannot leak through misuse of a non-privateBrowing WebView instance.
1384dcabaef9151384b571327b62234409b31caef38Jonathan Dixon                // Can't just null out mAwContents as we never null-check it before use.
1394dcabaef9151384b571327b62234409b31caef38Jonathan Dixon                mAwContents.destroy();
14033e1eeae98299666b8c2d1e879f92d1c83fe33fbBen Murdoch                TextView warningLabel = new TextView(mWebView.getContext());
14133e1eeae98299666b8c2d1e879f92d1c83fe33fbBen Murdoch                warningLabel.setText(mWebView.getContext().getString(
14233e1eeae98299666b8c2d1e879f92d1c83fe33fbBen Murdoch                        com.android.internal.R.string.webviewchromium_private_browsing_warning));
14333e1eeae98299666b8c2d1e879f92d1c83fe33fbBen Murdoch                mWebView.addView(warningLabel);
1444dcabaef9151384b571327b62234409b31caef38Jonathan Dixon            }
1454dcabaef9151384b571327b62234409b31caef38Jonathan Dixon        }
1464dcabaef9151384b571327b62234409b31caef38Jonathan Dixon
14746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
14846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
14946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
15046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setHorizontalScrollbarOverlay(boolean overlay) {
151bd819ca872a1711e4607ef11cd8b0b2156241897Martin Kosiba        mAwContents.setHorizontalScrollbarOverlay(overlay);
15246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
15346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
15446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
15546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setVerticalScrollbarOverlay(boolean overlay) {
156bd819ca872a1711e4607ef11cd8b0b2156241897Martin Kosiba        mAwContents.setVerticalScrollbarOverlay(overlay);
15746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
15846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
15946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
16046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean overlayHorizontalScrollbar() {
161bd819ca872a1711e4607ef11cd8b0b2156241897Martin Kosiba        return mAwContents.overlayHorizontalScrollbar();
16246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
16346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
16446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
16546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean overlayVerticalScrollbar() {
166bd819ca872a1711e4607ef11cd8b0b2156241897Martin Kosiba        return mAwContents.overlayVerticalScrollbar();
16746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
16846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
16946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
17046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public int getVisibleTitleHeight() {
17146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        // This is deprecated in WebView and should always return 0.
17246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return 0;
17346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
17446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
17546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
17646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public SslCertificate getCertificate() {
17746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return mAwContents.getCertificate();
17846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
17946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
18046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
18146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setCertificate(SslCertificate certificate) {
18246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
18346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
18446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
18546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
18646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void savePassword(String host, String username, String password) {
187adc6c4d74c77a617100bdfeb174ab0c314b24ea8Selim Gurun        // This is a deprecated API: intentional no-op.
18846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
18946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
19046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
19146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setHttpAuthUsernamePassword(String host, String realm, String username,
19246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)                                            String password) {
19346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mAwContents.setHttpAuthUsernamePassword(host, realm, username, password);
19446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
19546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
19646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
19746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public String[] getHttpAuthUsernamePassword(String host, String realm) {
19846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return mAwContents.getHttpAuthUsernamePassword(host, realm);
19946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
20046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
20146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
20246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void destroy() {
2033949435b480cb71106f65b237025da359cf8a8caBen Murdoch        mAwContents.destroy();
204a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon        if (mGLfunctor != null) {
205a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon            mGLfunctor.destroy();
206a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon            mGLfunctor = null;
207a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon        }
20846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
20946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
21046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
21146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setNetworkAvailable(boolean networkUp) {
21246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        NetworkChangeNotifier.forceConnectivityState(networkUp);
21346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
21446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
21546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
21646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public WebBackForwardList saveState(Bundle outState) {
217a08e8aada16dc4dbfb8745532169fb4a8347541dBo Liu        if (outState == null) return null;
218a08e8aada16dc4dbfb8745532169fb4a8347541dBo Liu        if (!mAwContents.saveState(outState)) return null;
219a08e8aada16dc4dbfb8745532169fb4a8347541dBo Liu        return copyBackForwardList();
22046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
22146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
22246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
22346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean savePicture(Bundle b, File dest) {
2249405536501747e2d7b4fc46a33e5f0a1e7fd47acJonathan Dixon        // Intentional no-op: hidden method on WebView.
22546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return false;
22646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
22746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
22846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
22946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean restorePicture(Bundle b, File src) {
2309405536501747e2d7b4fc46a33e5f0a1e7fd47acJonathan Dixon        // Intentional no-op: hidden method on WebView.
23146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return false;
23246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
23346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
23446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
23546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public WebBackForwardList restoreState(Bundle inState) {
236a08e8aada16dc4dbfb8745532169fb4a8347541dBo Liu        if (inState == null) return null;
237a08e8aada16dc4dbfb8745532169fb4a8347541dBo Liu        if (!mAwContents.restoreState(inState)) return null;
238a08e8aada16dc4dbfb8745532169fb4a8347541dBo Liu        return copyBackForwardList();
23946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
24046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
24146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
24246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void loadUrl(String url, Map<String, String> additionalHttpHeaders) {
24346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        // TODO: We may actually want to do some sanity checks here (like filter about://chrome).
2446ef347a29d692df672aaf59ee4926a476288476aBen Murdoch
2456ef347a29d692df672aaf59ee4926a476288476aBen Murdoch        // For backwards compatibility, apps targeting less than K will have JS URLs evaluated
2466ef347a29d692df672aaf59ee4926a476288476aBen Murdoch        // directly and any result of the evaluation will not replace the current page content.
2476ef347a29d692df672aaf59ee4926a476288476aBen Murdoch        // Matching Chrome behavior more closely; apps targetting >= K that load a JS URL will
2486ef347a29d692df672aaf59ee4926a476288476aBen Murdoch        // have the result of that URL replace the content of the current page.
2496ef347a29d692df672aaf59ee4926a476288476aBen Murdoch        final String JAVASCRIPT_SCHEME = "javascript:";
2506ef347a29d692df672aaf59ee4926a476288476aBen Murdoch        if (mAppTargetSdkVersion < Build.VERSION_CODES.KEY_LIME_PIE &&
2516ef347a29d692df672aaf59ee4926a476288476aBen Murdoch                url.startsWith(JAVASCRIPT_SCHEME)) {
2526ef347a29d692df672aaf59ee4926a476288476aBen Murdoch            evaluateJavaScript(url.substring(JAVASCRIPT_SCHEME.length()), null);
2536ef347a29d692df672aaf59ee4926a476288476aBen Murdoch            return;
2546ef347a29d692df672aaf59ee4926a476288476aBen Murdoch        }
2556ef347a29d692df672aaf59ee4926a476288476aBen Murdoch
25646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        LoadUrlParams params = new LoadUrlParams(url);
25746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        if (additionalHttpHeaders != null) params.setExtraHeaders(additionalHttpHeaders);
258a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen        loadUrlOnUiThread(params);
25946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
26046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
26146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
26246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void loadUrl(String url) {
26346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        loadUrl(url, null);
26446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
26546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
26646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
26746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void postUrl(String url, byte[] postData) {
268b8281877c710018a3bc8066be17b1e11822be015Selim Gurun        LoadUrlParams params = LoadUrlParams.createLoadHttpPostParams(url, postData);
269b8281877c710018a3bc8066be17b1e11822be015Selim Gurun        Map<String,String> headers = new HashMap<String,String>();
270b8281877c710018a3bc8066be17b1e11822be015Selim Gurun        headers.put("Content-Type", "application/x-www-form-urlencoded");
271b8281877c710018a3bc8066be17b1e11822be015Selim Gurun        params.setExtraHeaders(headers);
272b8281877c710018a3bc8066be17b1e11822be015Selim Gurun        loadUrlOnUiThread(params);
27346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
27446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
27546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    private static boolean isBase64Encoded(String encoding) {
27646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return "base64".equals(encoding);
27746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
27846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
27946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
28046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void loadData(String data, String mimeType, String encoding) {
281a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen        loadUrlOnUiThread(LoadUrlParams.createLoadDataParams(
282a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen                data, mimeType, isBase64Encoded(encoding)));
28346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
28446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
28546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
28646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void loadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding,
287efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch            String historyUrl) {
288efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch        LoadUrlParams loadUrlParams;
289efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch
290efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch        if (baseUrl != null && baseUrl.startsWith("data:")) {
291efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch            // For backwards compatibility with WebViewClassic, we use the value of |encoding|
292efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch            // as the charset, as long as it's not "base64".
293efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch            boolean isBase64 = isBase64Encoded(encoding);
294efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch            loadUrlParams = LoadUrlParams.createLoadDataParamsWithBaseUrl(
295efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch                    data, mimeType, isBase64, baseUrl, historyUrl, isBase64 ? null : encoding);
296efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch        } else {
297efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch            if (baseUrl == null || baseUrl.length() == 0) baseUrl = "about:blank";
298efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch            // When loading data with a non-data: base URL, the classic WebView would effectively
299efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch            // "dump" that string of data into the WebView without going through regular URL
300efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch            // loading steps such as decoding URL-encoded entities. We achieve this same behavior by
301efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch            // base64 encoding the data that is passed here and then loading that as a data: URL.
302efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch            try {
303efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch                loadUrlParams = LoadUrlParams.createLoadDataParamsWithBaseUrl(
304efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch                        Base64.encodeToString(data.getBytes("utf-8"), Base64.DEFAULT), mimeType,
305efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch                        true, baseUrl, historyUrl, "utf-8");
306efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch            } catch (java.io.UnsupportedEncodingException e) {
307efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch                Log.wtf(TAG, "Unable to load data string " + data, e);
308efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch                return;
309efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch            }
310efea4d8fe88696d8ced7711192e8471eabd7c3d8Ben Murdoch        }
311a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen        loadUrlOnUiThread(loadUrlParams);
312a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen    }
313a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen
314a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen    private void loadUrlOnUiThread(final LoadUrlParams loadUrlParams) {
315a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen        if (ThreadUtils.runningOnUiThread()) {
316a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen            mAwContents.loadUrl(loadUrlParams);
317a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen        } else {
318a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen            // Disallowed in WebView API for apps targetting a new SDK
319a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen            assert mAppTargetSdkVersion < Build.VERSION_CODES.JELLY_BEAN_MR2;
320a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen            ThreadUtils.postOnUiThread(new Runnable() {
321a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen                @Override
322a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen                public void run() {
323a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen                    mAwContents.loadUrl(loadUrlParams);
324a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen                }
325a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen            });
326a125e0eeade22bc4b7a998e8f0e732c0f965663fKristian Monsen        }
32746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
32846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
3296ef347a29d692df672aaf59ee4926a476288476aBen Murdoch    public void evaluateJavaScript(String script, ValueCallback<String> resultCallback) {
3306ef347a29d692df672aaf59ee4926a476288476aBen Murdoch        mAwContents.evaluateJavaScript(script, resultCallback);
3316ef347a29d692df672aaf59ee4926a476288476aBen Murdoch    }
3326ef347a29d692df672aaf59ee4926a476288476aBen Murdoch
33346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
33446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void saveWebArchive(String filename) {
33546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        saveWebArchive(filename, false, null);
33646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
33746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
33846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
33946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void saveWebArchive(String basename, boolean autoname, ValueCallback<String> callback) {
34046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mAwContents.saveWebArchive(basename, autoname, callback);
34146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
34246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
34346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
34446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void stopLoading() {
3457cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        mAwContents.stopLoading();
34646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
34746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
34846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
34946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void reload() {
3507cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        mAwContents.reload();
35146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
35246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
35346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
35446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean canGoBack() {
3557cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.canGoBack();
35646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
35746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
35846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
35946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void goBack() {
3607cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        mAwContents.goBack();
36146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
36246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
36346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
36446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean canGoForward() {
3657cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.canGoForward();
36646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
36746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
36846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
36946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void goForward() {
3707cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        mAwContents.goForward();
37146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
37246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
37346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
37446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean canGoBackOrForward(int steps) {
3757cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.canGoBackOrForward(steps);
37646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
37746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
37846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
37946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void goBackOrForward(int steps) {
3807cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        mAwContents.goBackOrForward(steps);
38146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
38246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
38346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
38446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean isPrivateBrowsingEnabled() {
3856d58f78e7fc0412a58b163559cb8e9c4af5c6fe1Jonathan Dixon        // Not supported in this WebView implementation.
38646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return false;
38746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
38846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
38946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
39046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean pageUp(boolean top) {
3917cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.pageUp(top);
39246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
39346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
39446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
39546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean pageDown(boolean bottom) {
3967cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.pageDown(bottom);
39746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
39846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
39946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
40046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void clearView() {
40146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
40246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
40346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
40446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
40546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public Picture capturePicture() {
4069c5a40623b62737244deb2d04a98830d7ffa8404Leandro Gracia Gil        return mAwContents.capturePicture();
40746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
40846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
40946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
41049a1a6f9f27b63687edc1d98f842627d4719a327Selim Gurun    public void exportToPdf(OutputStream stream, int width, int height,
41149a1a6f9f27b63687edc1d98f842627d4719a327Selim Gurun        ValueCallback<Boolean> resultCallback) {
41249a1a6f9f27b63687edc1d98f842627d4719a327Selim Gurun        // TODO(sgurun) enable this only after upstream part lands
41349a1a6f9f27b63687edc1d98f842627d4719a327Selim Gurun        //mAwContents.exportToPdf(stream, width, height, resultCallback);
41449a1a6f9f27b63687edc1d98f842627d4719a327Selim Gurun    }
41549a1a6f9f27b63687edc1d98f842627d4719a327Selim Gurun
41649a1a6f9f27b63687edc1d98f842627d4719a327Selim Gurun    @Override
41746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public float getScale() {
4183520eb778d668dc76ca4541c69abd568b9d02691Mikhail Naganov        return mAwContents.getScale();
41946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
42046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
42146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
42246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setInitialScale(int scaleInPercent) {
4233520eb778d668dc76ca4541c69abd568b9d02691Mikhail Naganov        mAwContents.getSettings().setInitialPageScale(scaleInPercent);
42446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
42546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
42646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
42746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void invokeZoomPicker() {
4287cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        mAwContents.invokeZoomPicker();
42946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
43046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
43146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
43246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public WebView.HitTestResult getHitTestResult() {
433c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu        AwContents.HitTestData data = mAwContents.getLastHitTestResult();
434c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu        mHitTestResult.setType(data.hitTestResultType);
435c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu        mHitTestResult.setExtra(data.hitTestResultExtraData);
436c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu        return mHitTestResult;
43746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
43846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
43946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
44046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void requestFocusNodeHref(Message hrefMsg) {
441c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu        mAwContents.requestFocusNodeHref(hrefMsg);
44246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
44346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
44446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
44546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void requestImageRef(Message msg) {
446c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu        mAwContents.requestImageRef(msg);
44746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
44846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
44946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
45046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public String getUrl() {
4517cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        String url =  mAwContents.getUrl();
45246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        if (url == null || url.trim().isEmpty()) return null;
45346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return url;
45446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
45546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
45646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
45746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public String getOriginalUrl() {
45846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        String url =  mAwContents.getOriginalUrl();
45946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        if (url == null || url.trim().isEmpty()) return null;
46046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return url;
46146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
46246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
46346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
46446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public String getTitle() {
4657cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.getTitle();
46646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
46746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
46846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
46946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public Bitmap getFavicon() {
4709405536501747e2d7b4fc46a33e5f0a1e7fd47acJonathan Dixon        return mAwContents.getFavicon();
47146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
47246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
47346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
47446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public String getTouchIconUrl() {
4759405536501747e2d7b4fc46a33e5f0a1e7fd47acJonathan Dixon        // Intentional no-op: hidden method on WebView.
47646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return null;
47746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
47846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
47946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
48046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public int getProgress() {
48146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return mAwContents.getMostRecentProgress();
48246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
48346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
48446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
48546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public int getContentHeight() {
4866b5f3d1546ae2a9c712cde60c54ec027582bc4e6Martin Kosiba        return mAwContents.getContentHeightCss();
48746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
48846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
48946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
49046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public int getContentWidth() {
4916b5f3d1546ae2a9c712cde60c54ec027582bc4e6Martin Kosiba        return mAwContents.getContentWidthCss();
49246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
49346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
49446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
49546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void pauseTimers() {
496531e68a2b50a5e542eeede13907f29e463a99ebfBen Murdoch        mAwContents.pauseTimers();
49746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
49846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
49946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
50046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void resumeTimers() {
501531e68a2b50a5e542eeede13907f29e463a99ebfBen Murdoch        mAwContents.resumeTimers();
50246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
50346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
50446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
50546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onPause() {
5061cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon        mAwContents.onPause();
50746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
50846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
50946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
51046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onResume() {
5111cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon        mAwContents.onResume();
51246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
51346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
51446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
51546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean isPaused() {
5161cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon        return mAwContents.isPaused();
51746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
51846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
51946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
52046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void freeMemory() {
52146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
52246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
52346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
52446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
52546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void clearCache(boolean includeDiskFiles) {
52646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mAwContents.clearCache(includeDiskFiles);
52746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
52846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
529bbef8de5696d48fc6458c926026fc524a62814e1Selim Gurun    /**
530bbef8de5696d48fc6458c926026fc524a62814e1Selim Gurun     * This is a poorly named method, but we keep it for historical reasons.
531bbef8de5696d48fc6458c926026fc524a62814e1Selim Gurun     */
53246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
53346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void clearFormData() {
534bbef8de5696d48fc6458c926026fc524a62814e1Selim Gurun        mAwContents.hideAutofillPopup();
53546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
53646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
53746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
53846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void clearHistory() {
5397cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        mAwContents.clearHistory();
54046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
54146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
54246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
54346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void clearSslPreferences() {
5447cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        mAwContents.clearSslPreferences();
54546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
54646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
54746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
54846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public WebBackForwardList copyBackForwardList() {
54908a5e00cdfb74f4ffd843d2d0a9b0b40b86b107aBo Liu        return new WebBackForwardListChromium(
5507cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba                mAwContents.getNavigationHistory());
55146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
55246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
55346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
55446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setFindListener(WebView.FindListener listener) {
55546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mContentsClientAdapter.setFindListener(listener);
55646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
55746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
55846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
55946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void findNext(boolean forwards) {
56046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mAwContents.findNext(forwards);
56146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
56246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
56346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
56446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public int findAll(String searchString) {
565f37548d6d8e2a73c65d675a26706a38f52960800Jonathan Dixon        mAwContents.findAllAsync(searchString);
566f37548d6d8e2a73c65d675a26706a38f52960800Jonathan Dixon        return 0;
56746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
56846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
56946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
57046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void findAllAsync(String searchString) {
57146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mAwContents.findAllAsync(searchString);
57246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
57346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
57446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
57546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean showFindDialog(String text, boolean showIme) {
5766d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch        if (mWebView.getParent() == null) {
5776d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch            return false;
5786d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch        }
5796d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch
5806d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch        FindActionModeCallback findAction = new FindActionModeCallback(mWebView.getContext());
5816d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch        if (findAction == null) {
5826d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch            return false;
5836d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch        }
5846d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch
5856d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch        mWebView.startActionMode(findAction);
5866d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch        findAction.setWebView(mWebView);
5876d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch        if (showIme) {
5886d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch            findAction.showSoftInput();
5896d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch        }
5906d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch
5916d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch        if (text != null) {
5926d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch            findAction.setText(text);
5936d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch            findAction.findAll();
5946d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch        }
5956d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch
5966d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch        return true;
59746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
59846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
5996d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch    @Override
600fde8dae44f74be3de69ce6dd07b0023279b485a0Ben Murdoch    public void notifyFindDialogDismissed() {
6016d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch        clearMatches();
602fde8dae44f74be3de69ce6dd07b0023279b485a0Ben Murdoch    }
603fde8dae44f74be3de69ce6dd07b0023279b485a0Ben Murdoch
60446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
60546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void clearMatches() {
60646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mAwContents.clearMatches();
60746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
60846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
60946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
61046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void documentHasImages(Message response) {
61146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mAwContents.documentHasImages(response);
61246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
61346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
61446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
61546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setWebViewClient(WebViewClient client) {
61646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mContentsClientAdapter.setWebViewClient(client);
61746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
61846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
61946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
62046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setDownloadListener(DownloadListener listener) {
6214320e428efc3bf69387f3b9d5a0589b2b8746409Bo Liu        mContentsClientAdapter.setDownloadListener(listener);
62246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
62346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
62446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
62546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setWebChromeClient(WebChromeClient client) {
62646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mContentsClientAdapter.setWebChromeClient(client);
62746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
62846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
62946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
63046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setPictureListener(WebView.PictureListener listener) {
63146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mContentsClientAdapter.setPictureListener(listener);
6329c5a40623b62737244deb2d04a98830d7ffa8404Leandro Gracia Gil        mAwContents.enableOnNewPicture(listener != null,
6336ef347a29d692df672aaf59ee4926a476288476aBen Murdoch                mAppTargetSdkVersion >= Build.VERSION_CODES.JELLY_BEAN_MR2);
63446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
63546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
63646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
63746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void addJavascriptInterface(Object obj, String interfaceName) {
638ea844f60b1b559788566fe6e004b1eeca53a8039Jonathan Dixon        Class<? extends Annotation> requiredAnnotation = null;
6396ef347a29d692df672aaf59ee4926a476288476aBen Murdoch        if (mAppTargetSdkVersion >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
6407db34d3dcaac936566f912e1b0b21f3f103029ffJonathan Dixon           requiredAnnotation = JavascriptInterface.class;
6417db34d3dcaac936566f912e1b0b21f3f103029ffJonathan Dixon        }
6427cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        mAwContents.addPossiblyUnsafeJavascriptInterface(obj, interfaceName, requiredAnnotation);
64346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
64446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
64546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
64646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void removeJavascriptInterface(String interfaceName) {
6477cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        mAwContents.removeJavascriptInterface(interfaceName);
64846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
64946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
65046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
65146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public WebSettings getSettings() {
65246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        if (mWebSettings == null) {
653420c0da3a4e06e1ac5574091e7c9c286ef012369Mikhail Naganov            mWebSettings = new ContentSettingsAdapter(mAwContents.getSettings());
65446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        }
65546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return mWebSettings;
65646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
65746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
65846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
65946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setMapTrackballToArrowKeys(boolean setMap) {
66046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        // This is a deprecated API: intentional no-op.
66146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
66246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
66346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
66446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void flingScroll(int vx, int vy) {
6657cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        mAwContents.flingScroll(vx, vy);
66646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
66746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
66846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
66946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public View getZoomControls() {
670e78d6e40e4e78671e6621ba8cf49835568704899Jonathan Dixon        // This was deprecated in 2009 and hidden in JB MR1, so just provide the minimum needed
671e78d6e40e4e78671e6621ba8cf49835568704899Jonathan Dixon        // to stop very out-dated applications from crashing.
672e78d6e40e4e78671e6621ba8cf49835568704899Jonathan Dixon        Log.w(TAG, "WebView doesn't support getZoomControls");
673420c0da3a4e06e1ac5574091e7c9c286ef012369Mikhail Naganov        return mAwContents.getSettings().supportZoom() ? new View(mWebView.getContext()) : null;
67446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
67546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
67646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
67746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean canZoomIn() {
6787cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.canZoomIn();
67946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
68046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
68146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
68246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean canZoomOut() {
6837cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.canZoomOut();
68446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
68546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
68646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
68746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean zoomIn() {
6887cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.zoomIn();
68946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
69046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
69146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
69246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean zoomOut() {
6937cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.zoomOut();
69446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
69546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
696d2dcef4d9edfb7af7abff85b0867c3d6a363feb7Jonathan Dixon    @Override
69746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void dumpViewHierarchyWithProperties(BufferedWriter out, int level) {
69846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
69946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
70046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
701d2dcef4d9edfb7af7abff85b0867c3d6a363feb7Jonathan Dixon    @Override
70246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public View findHierarchyView(String className, int hashCode) {
70346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
70446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return null;
70546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
70646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
70746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // WebViewProvider glue methods ---------------------------------------------------------------
70846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
70946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
71046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public WebViewProvider.ViewDelegate getViewDelegate() {
71146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return this;
71246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
71346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
71446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
71546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public WebViewProvider.ScrollDelegate getScrollDelegate() {
71646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return this;
71746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
71846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
71946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
72046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // WebViewProvider.ViewDelegate implementation ------------------------------------------------
72146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
722a7fba41c5661cb61b41c8a4ff2d69e5153666f7fBen Murdoch    // TODO: remove from WebViewProvider and use default implementation from
723a7fba41c5661cb61b41c8a4ff2d69e5153666f7fBen Murdoch    // ViewGroup.
724a7fba41c5661cb61b41c8a4ff2d69e5153666f7fBen Murdoch    // @Override
72546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean shouldDelayChildPressedState() {
726a7fba41c5661cb61b41c8a4ff2d69e5153666f7fBen Murdoch        return true;
72746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
72846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
7295c990caf9c0237064dab94059f6c46fc2d51cd97Ben Murdoch//    @Override
7305c990caf9c0237064dab94059f6c46fc2d51cd97Ben Murdoch    public AccessibilityNodeProvider getAccessibilityNodeProvider() {
7315c990caf9c0237064dab94059f6c46fc2d51cd97Ben Murdoch        return mAwContents.getAccessibilityNodeProvider();
7325c990caf9c0237064dab94059f6c46fc2d51cd97Ben Murdoch    }
7335c990caf9c0237064dab94059f6c46fc2d51cd97Ben Murdoch
73446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
73546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
7367cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        mAwContents.onInitializeAccessibilityNodeInfo(info);
73746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
73846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
73946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
74046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
7417cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        mAwContents.onInitializeAccessibilityEvent(event);
74246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
74346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
74446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
74546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean performAccessibilityAction(int action, Bundle arguments) {
746b7b706b2ed5cbb77dd690f5405b626a429989714Ben Murdoch        if (mAwContents.supportsAccessibilityAction(action)) {
747b7b706b2ed5cbb77dd690f5405b626a429989714Ben Murdoch            return mAwContents.performAccessibilityAction(action, arguments);
748b7b706b2ed5cbb77dd690f5405b626a429989714Ben Murdoch        }
749b7b706b2ed5cbb77dd690f5405b626a429989714Ben Murdoch        return mWebViewPrivate.super_performAccessibilityAction(action, arguments);
75046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
75146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
75246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
75346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setOverScrollMode(int mode) {
7542841152693d0410f8e8c309aae514329f008a612Martin Kosiba        // This gets called from the android.view.View c'tor that WebView inherits from. This
7552841152693d0410f8e8c309aae514329f008a612Martin Kosiba        // causes the method to be called when mAwContents == null.
7562841152693d0410f8e8c309aae514329f008a612Martin Kosiba        // It's safe to ignore these calls however since AwContents will read the current value of
7572841152693d0410f8e8c309aae514329f008a612Martin Kosiba        // this setting when it's created.
758ab5398debe64d34306b0f709a93d840078ae181dMartin Kosiba        if (mAwContents != null) {
759ab5398debe64d34306b0f709a93d840078ae181dMartin Kosiba            mAwContents.setOverScrollMode(mode);
760ab5398debe64d34306b0f709a93d840078ae181dMartin Kosiba        }
76146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
76246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
76346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
76446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setScrollBarStyle(int style) {
765bd819ca872a1711e4607ef11cd8b0b2156241897Martin Kosiba        mAwContents.setScrollBarStyle(style);
76646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
76746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
76846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
76946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onDrawVerticalScrollBar(Canvas canvas, Drawable scrollBar,
77046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)                                        int l, int t, int r, int b) {
771bd819ca872a1711e4607ef11cd8b0b2156241897Martin Kosiba        // WebViewClassic was overriding this method to handle rubberband over-scroll. Since
772bd819ca872a1711e4607ef11cd8b0b2156241897Martin Kosiba        // WebViewChromium doesn't support that the vanilla implementation of this method can be
773bd819ca872a1711e4607ef11cd8b0b2156241897Martin Kosiba        // used.
774bd819ca872a1711e4607ef11cd8b0b2156241897Martin Kosiba        mWebViewPrivate.super_onDrawVerticalScrollBar(canvas, scrollBar, l, t, r, b);
77546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
77646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
77746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
77846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onOverScrolled(int scrollX, int scrollY, boolean clampedX, boolean clampedY) {
7793951fbadf5157dd3fe73decc879f9b763e780b09Martin Kosiba        mAwContents.onContainerViewOverScrolled(scrollX, scrollY, clampedX, clampedY);
78046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
78146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
78246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
78346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onWindowVisibilityChanged(int visibility) {
7841cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon        mAwContents.onWindowVisibilityChanged(visibility);
78546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
78646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
78746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
78846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onDraw(Canvas canvas) {
7897ab33360e331e04f515d532064670e210d174a7aTao Bai        mAwContents.onDraw(canvas);
79046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
79146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
79246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
79346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setLayoutParams(ViewGroup.LayoutParams layoutParams) {
79446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        // TODO: This is the minimum implementation for HTMLViewer
79546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        // bringup. Likely will need to go up to ContentViewCore for
79646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        // a complete implementation.
79746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mWebViewPrivate.super_setLayoutParams(layoutParams);
79846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
79946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
80046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
80146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean performLongClick() {
802decc147cebc8f73d355c024d92c60d3f727cab31Bo Liu        return mWebViewPrivate.super_performLongClick();
80346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
80446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
80546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
80646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onConfigurationChanged(Configuration newConfig) {
8071cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon        mAwContents.onConfigurationChanged(newConfig);
80846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
80946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
81046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
81146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
8127cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.onCreateInputConnection(outAttrs);
81346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
81446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
81546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
81646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent event) {
81746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
81846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return false;
81946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
82046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
82146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
82246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean onKeyDown(int keyCode, KeyEvent event) {
82346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
82446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return false;
82546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
82646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
82746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
82846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean onKeyUp(int keyCode, KeyEvent event) {
8297cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.onKeyUp(keyCode, event);
83046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
83146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
83246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
83346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onAttachedToWindow() {
8341cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon        mAwContents.onAttachedToWindow();
83546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
83646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
83746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
83846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onDetachedFromWindow() {
8391cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon        mAwContents.onDetachedFromWindow();
840a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon        if (mGLfunctor != null) {
841a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon            mGLfunctor.detach();
842a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon        }
84346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
84446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
84546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
84646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onVisibilityChanged(View changedView, int visibility) {
847c346a83062dfbf50ac2275813ccb2e36f9e778e9Martin Kosiba        // The AwContents will find out the container view visibility before the first draw so we
848c346a83062dfbf50ac2275813ccb2e36f9e778e9Martin Kosiba        // can safely ignore onVisibilityChanged callbacks that happen before init().
849c346a83062dfbf50ac2275813ccb2e36f9e778e9Martin Kosiba        if (mAwContents != null) {
850c346a83062dfbf50ac2275813ccb2e36f9e778e9Martin Kosiba            mAwContents.onVisibilityChanged(changedView, visibility);
851c346a83062dfbf50ac2275813ccb2e36f9e778e9Martin Kosiba        }
85246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
85346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
85446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
85546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onWindowFocusChanged(boolean hasWindowFocus) {
8561cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon        mAwContents.onWindowFocusChanged(hasWindowFocus);
85746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
85846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
85946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
86046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
8611cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon        mAwContents.onFocusChanged(focused, direction, previouslyFocusedRect);
86246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
86346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
86446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
86546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean setFrame(int left, int top, int right, int bottom) {
8661cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon        // TODO(joth): This is the minimum implementation for initial
8671cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon        // bringup. Likely will need to go up to AwContents for a complete
8681cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon        // implementation, e.g. setting the compositor visible region (to
8691cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon        // avoid painting tiles that are offscreen due to the view's position).
87046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return mWebViewPrivate.super_setFrame(left, top, right, bottom);
87146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
87246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
87346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
87446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onSizeChanged(int w, int h, int ow, int oh) {
8751cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon        mAwContents.onSizeChanged(w, h, ow, oh);
87646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
87746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
87846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
87946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onScrollChanged(int l, int t, int oldl, int oldt) {
88046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
88146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
88246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
88346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean dispatchKeyEvent(KeyEvent event) {
8847cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.dispatchKeyEvent(event);
88546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
88646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
88746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
88846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean onTouchEvent(MotionEvent ev) {
889c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu        return mAwContents.onTouchEvent(ev);
89046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
89146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
89246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
89346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean onHoverEvent(MotionEvent event) {
894c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu        return mAwContents.onHoverEvent(event);
89546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
89646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
89746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
89846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean onGenericMotionEvent(MotionEvent event) {
899c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu        return mAwContents.onGenericMotionEvent(event);
90046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
90146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
90246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
90346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean onTrackballEvent(MotionEvent ev) {
90446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        // Trackball event not handled, which eventually gets converted to DPAD keyevents
90546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return false;
90646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
90746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
90846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
90946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean requestFocus(int direction, Rect previouslyFocusedRect) {
9104cee3bf50c125a52a49323aa999f4b619fa18c10Ben Murdoch        mAwContents.requestFocus();
91146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return mWebViewPrivate.super_requestFocus(direction, previouslyFocusedRect);
91246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
91346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
91446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
91546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
916d7bf6ab0cd8cc4005b112e4358eb797bb178a85fMarcin Kosiba        mAwContents.onMeasure(widthMeasureSpec, heightMeasureSpec);
91746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
91846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
91946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
92046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean requestChildRectangleOnScreen(View child, Rect rect, boolean immediate) {
92146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
92246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return false;
92346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
92446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
92546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
92646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setBackgroundColor(int color) {
927058714d7ae16bbfc096d9b4e0423efeb897bae68Jonathan Dixon        mAwContents.setBackgroundColor(color);
92846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
92946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
93046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
93146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setLayerType(int layerType, Paint paint) {
93246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
93346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
93446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
9350b528e4924a7c14687181185bc66173ad18f00eaLeandro Gracia Gil    @Override
93646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void preDispatchDraw(Canvas canvas) {
9370b528e4924a7c14687181185bc66173ad18f00eaLeandro Gracia Gil        // TODO(leandrogracia): remove this method from WebViewProvider if we think
9380b528e4924a7c14687181185bc66173ad18f00eaLeandro Gracia Gil        // we won't need it again.
93946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
94046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
94146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // WebViewProvider.ScrollDelegate implementation ----------------------------------------------
94246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
94346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
94446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public int computeHorizontalScrollRange() {
9457cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.computeHorizontalScrollRange();
94646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
94746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
94846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
94946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public int computeHorizontalScrollOffset() {
9507cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.computeHorizontalScrollOffset();
95146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
95246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
95346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
95446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public int computeVerticalScrollRange() {
9557cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.computeVerticalScrollRange();
95646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
95746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
95846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
95946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public int computeVerticalScrollOffset() {
9607cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.computeVerticalScrollOffset();
96146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
96246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
96346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
96446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public int computeVerticalScrollExtent() {
9657cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.computeVerticalScrollExtent();
96646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
96746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
96846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
96946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void computeScroll() {
9702a120ba09921dbb1e8354ecbc4a6e063ec891101Martin Kosiba        mAwContents.computeScroll();
97146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
97246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
9734702a6de6031477029de5e6f5777c8b3e7846d35Marcin Kosiba    // AwContents.InternalAccessDelegate implementation --------------------------------------
9744702a6de6031477029de5e6f5777c8b3e7846d35Marcin Kosiba    private class InternalAccessAdapter implements AwContents.InternalAccessDelegate {
97546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        @Override
97646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        public boolean drawChild(Canvas arg0, View arg1, long arg2) {
97746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            UnimplementedWebViewApi.invoke();
97846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            return false;
97946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        }
98046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
98146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        @Override
98246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        public boolean super_onKeyUp(int arg0, KeyEvent arg1) {
98346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            UnimplementedWebViewApi.invoke();
98446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            return false;
98546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        }
98646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
98746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        @Override
98846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        public boolean super_dispatchKeyEventPreIme(KeyEvent arg0) {
98946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            UnimplementedWebViewApi.invoke();
99046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            return false;
99146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        }
99246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
99346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        @Override
99446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        public boolean super_dispatchKeyEvent(KeyEvent event) {
99546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            return mWebViewPrivate.super_dispatchKeyEvent(event);
99646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        }
99746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
99846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        @Override
99946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        public boolean super_onGenericMotionEvent(MotionEvent arg0) {
100046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            UnimplementedWebViewApi.invoke();
100146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            return false;
100246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        }
100346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
100446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        @Override
100546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        public void super_onConfigurationChanged(Configuration arg0) {
100646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            UnimplementedWebViewApi.invoke();
100746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        }
100846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
1009bd819ca872a1711e4607ef11cd8b0b2156241897Martin Kosiba        @Override
10100088640069ac3ed389f4d78582966248b0869ce9Martin Kosiba        public int super_getScrollBarStyle() {
10110088640069ac3ed389f4d78582966248b0869ce9Martin Kosiba            return mWebViewPrivate.super_getScrollBarStyle();
10120088640069ac3ed389f4d78582966248b0869ce9Martin Kosiba        }
10130088640069ac3ed389f4d78582966248b0869ce9Martin Kosiba
101446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        @Override
101546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        public boolean awakenScrollBars() {
101646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            mWebViewPrivate.awakenScrollBars(0);
101746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            // TODO: modify the WebView.PrivateAccess to provide a return value.
101846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            return true;
101946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        }
102046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
102146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        @Override
102246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        public boolean super_awakenScrollBars(int arg0, boolean arg1) {
102346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            // TODO: need method on WebView.PrivateAccess?
102446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            UnimplementedWebViewApi.invoke();
102546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            return false;
102646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        }
10274702a6de6031477029de5e6f5777c8b3e7846d35Marcin Kosiba
1028d7bf6ab0cd8cc4005b112e4358eb797bb178a85fMarcin Kosiba        @Override
10292a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba        public void onScrollChanged(int l, int t, int oldl, int oldt) {
10302a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba            mWebViewPrivate.setScrollXRaw(l);
10312a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba            mWebViewPrivate.setScrollYRaw(t);
10322a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba            mWebViewPrivate.onScrollChanged(l, t, oldl, oldt);
10332a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba        }
10342a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba
10353951fbadf5157dd3fe73decc879f9b763e780b09Martin Kosiba        @Override
10362a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba        public void overScrollBy(int deltaX, int deltaY,
10372a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba            int scrollX, int scrollY,
10382a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba            int scrollRangeX, int scrollRangeY,
10392a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba            int maxOverScrollX, int maxOverScrollY,
10402a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba            boolean isTouchEvent) {
10412a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba            mWebViewPrivate.overScrollBy(deltaX, deltaY, scrollX, scrollY,
10422a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba                    scrollRangeX, scrollRangeY, maxOverScrollX, maxOverScrollY, isTouchEvent);
10432a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba        }
10442a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba
10453951fbadf5157dd3fe73decc879f9b763e780b09Martin Kosiba        @Override
10462a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba        public void super_scrollTo(int scrollX, int scrollY) {
10472a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba            mWebViewPrivate.super_scrollTo(scrollX, scrollY);
10482a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba        }
10492a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba
10502a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba        @Override
10514702a6de6031477029de5e6f5777c8b3e7846d35Marcin Kosiba        public void setMeasuredDimension(int measuredWidth, int measuredHeight) {
10524702a6de6031477029de5e6f5777c8b3e7846d35Marcin Kosiba            mWebViewPrivate.setMeasuredDimension(measuredWidth, measuredHeight);
10534702a6de6031477029de5e6f5777c8b3e7846d35Marcin Kosiba        }
105451f7cf16cd02f14050bb723175a2a57570e8486dTao Bai
10557ab33360e331e04f515d532064670e210d174a7aTao Bai        @Override
105651f7cf16cd02f14050bb723175a2a57570e8486dTao Bai        public boolean requestDrawGL(Canvas canvas) {
10577ab33360e331e04f515d532064670e210d174a7aTao Bai            if (mGLfunctor == null) {
10587ab33360e331e04f515d532064670e210d174a7aTao Bai                mGLfunctor = new DrawGLFunctor(mAwContents.getAwDrawGLViewContext());
10597ab33360e331e04f515d532064670e210d174a7aTao Bai            }
106051f7cf16cd02f14050bb723175a2a57570e8486dTao Bai            return mGLfunctor.requestDrawGL((HardwareCanvas)canvas, mWebView.getViewRootImpl());
106151f7cf16cd02f14050bb723175a2a57570e8486dTao Bai        }
106246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
106346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)}
1064