WebViewChromium.java revision 6ef347a29d692df672aaf59ee4926a476288476a
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;
30e78d6e40e4e78671e6621ba8cf49835568704899Jonathan Dixonimport android.util.Log;
31a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixonimport android.view.HardwareCanvas;
3246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.KeyEvent;
3346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.MotionEvent;
3446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.View;
353411fdf2737f3f0dd0c1fa20045356cf89f34eddBo Liuimport android.view.View.MeasureSpec;
3646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.ViewGroup;
3746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.accessibility.AccessibilityEvent;
3846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.accessibility.AccessibilityNodeInfo;
395c990caf9c0237064dab94059f6c46fc2d51cd97Ben Murdochimport android.view.accessibility.AccessibilityNodeProvider;
4046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.inputmethod.EditorInfo;
4146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.inputmethod.InputConnection;
4246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.DownloadListener;
436d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdochimport android.webkit.FindActionModeCallback;
447db34d3dcaac936566f912e1b0b21f3f103029ffJonathan Dixonimport android.webkit.JavascriptInterface;
4546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.ValueCallback;
4646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.WebBackForwardList;
4746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.WebChromeClient;
4846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.WebSettings;
4946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.WebView;
5046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.WebViewClient;
5146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.WebViewProvider;
5246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
53aa8b39f3e3f208586f3750d7278f1239a09ebd32Kristian Monsenimport org.chromium.android_webview.AwBrowserContext;
5446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import org.chromium.android_webview.AwContents;
5546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import org.chromium.content.browser.LoadUrlParams;
5646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import org.chromium.net.NetworkChangeNotifier;
5746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
5846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import java.io.BufferedWriter;
5946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import java.io.File;
60ea844f60b1b559788566fe6e004b1eeca53a8039Jonathan Dixonimport java.lang.annotation.Annotation;
6146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import java.util.Map;
6246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
6346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)/**
6446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * This class is the delegate to which WebViewProxy forwards all API calls.
6546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) *
661cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon * Most of the actual functionality is implemented by AwContents (or ContentViewCore within
671cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon * it). This class also contains WebView-specific APIs that require the creation of other
681cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon * adapters (otherwise org.chromium.content would depend on the webview.chromium package)
691cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon * and a small set of no-op deprecated APIs.
7046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) */
7146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)class WebViewChromium implements WebViewProvider,
7246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)          WebViewProvider.ScrollDelegate, WebViewProvider.ViewDelegate {
73e78d6e40e4e78671e6621ba8cf49835568704899Jonathan Dixon
74e78d6e40e4e78671e6621ba8cf49835568704899Jonathan Dixon    private static final String TAG = WebViewChromium.class.getSimpleName();
75e78d6e40e4e78671e6621ba8cf49835568704899Jonathan Dixon
7646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // The WebView that this WebViewChromium is the provider for.
7746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    WebView mWebView;
7846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // Lets us access protected View-derived methods on the WebView instance we're backing.
7946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    WebView.PrivateAccess mWebViewPrivate;
8046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // The client adapter class.
8146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    private WebViewContentsClientAdapter mContentsClientAdapter;
8246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
8346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // Variables for functionality provided by this adapter ---------------------------------------
8446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // WebSettings adapter, lazily initialized in the getter
8546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    private WebSettings mWebSettings;
863949435b480cb71106f65b237025da359cf8a8caBen Murdoch    // The WebView wrapper for ContentViewCore and required browser compontents.
8746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    private AwContents mAwContents;
88a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon    // Non-null if this webview is using the GL accelerated draw path.
89a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon    private DrawGLFunctor mGLfunctor;
9046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
91aa8b39f3e3f208586f3750d7278f1239a09ebd32Kristian Monsen    private AwBrowserContext mBrowserContext;
92aa8b39f3e3f208586f3750d7278f1239a09ebd32Kristian Monsen
93c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu    private final WebView.HitTestResult mHitTestResult;
94c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu
956ef347a29d692df672aaf59ee4926a476288476aBen Murdoch    private final int mAppTargetSdkVersion;
966ef347a29d692df672aaf59ee4926a476288476aBen Murdoch
97aa8b39f3e3f208586f3750d7278f1239a09ebd32Kristian Monsen    public WebViewChromium(WebView webView, WebView.PrivateAccess webViewPrivate,
98aa8b39f3e3f208586f3750d7278f1239a09ebd32Kristian Monsen            AwBrowserContext browserContext) {
9946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mWebView = webView;
10046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mWebViewPrivate = webViewPrivate;
101c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu        mHitTestResult = new WebView.HitTestResult();
102aa8b39f3e3f208586f3750d7278f1239a09ebd32Kristian Monsen        mBrowserContext = browserContext;
1036ef347a29d692df672aaf59ee4926a476288476aBen Murdoch        mAppTargetSdkVersion = mWebView.getContext().getApplicationInfo().targetSdkVersion;
10446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
10546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
1061ee9dd0420198429115c3fe8cf0b0502fab9cf62Ben Murdoch    static void completeWindowCreation(WebView parent, WebView child) {
1071ee9dd0420198429115c3fe8cf0b0502fab9cf62Ben Murdoch        AwContents parentContents = ((WebViewChromium) parent.getWebViewProvider()).mAwContents;
108bbfef40e5fc625f4821f012fae7f16468b7308cfJonathan Dixon        AwContents childContents =
109bbfef40e5fc625f4821f012fae7f16468b7308cfJonathan Dixon                child == null ? null : ((WebViewChromium) child.getWebViewProvider()).mAwContents;
1101ee9dd0420198429115c3fe8cf0b0502fab9cf62Ben Murdoch        parentContents.supplyContentsForPopup(childContents);
11146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
11246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
11346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // WebViewProvider methods --------------------------------------------------------------------
11446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
11546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
11646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void init(Map<String, Object> javaScriptInterfaces, boolean privateBrowsing) {
1174dcabaef9151384b571327b62234409b31caef38Jonathan Dixon        // BUG=6790250 |javaScriptInterfaces| was only ever used by the obsolete DumpRenderTree
1184dcabaef9151384b571327b62234409b31caef38Jonathan Dixon        // so is ignored. TODO: remove it from WebViewProvider.
11946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        final boolean isAccessFromFileURLsGrantedByDefault =
1206ef347a29d692df672aaf59ee4926a476288476aBen Murdoch                 mAppTargetSdkVersion < Build.VERSION_CODES.JELLY_BEAN;
12146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mContentsClientAdapter = new WebViewContentsClientAdapter(mWebView);
122aa8b39f3e3f208586f3750d7278f1239a09ebd32Kristian Monsen        mAwContents = new AwContents(mBrowserContext, mWebView, new InternalAccessAdapter(),
123aa8b39f3e3f208586f3750d7278f1239a09ebd32Kristian Monsen                mContentsClientAdapter, isAccessFromFileURLsGrantedByDefault);
1244dcabaef9151384b571327b62234409b31caef38Jonathan Dixon
1254dcabaef9151384b571327b62234409b31caef38Jonathan Dixon        if (privateBrowsing) {
1264dcabaef9151384b571327b62234409b31caef38Jonathan Dixon            final String msg = "Private browsing is not supported in WebView.";
1276ef347a29d692df672aaf59ee4926a476288476aBen Murdoch            if (mAppTargetSdkVersion >= Build.VERSION_CODES.KEY_LIME_PIE) {
1284dcabaef9151384b571327b62234409b31caef38Jonathan Dixon                throw new IllegalArgumentException(msg);
1294dcabaef9151384b571327b62234409b31caef38Jonathan Dixon            } else {
1304dcabaef9151384b571327b62234409b31caef38Jonathan Dixon                Log.w(TAG, msg);
1314dcabaef9151384b571327b62234409b31caef38Jonathan Dixon                // Intentionally irreversibly disable the webview instance, so that private
1324dcabaef9151384b571327b62234409b31caef38Jonathan Dixon                // user data cannot leak through misuse of a non-privateBrowing WebView instance.
1334dcabaef9151384b571327b62234409b31caef38Jonathan Dixon                // Can't just null out mAwContents as we never null-check it before use.
1344dcabaef9151384b571327b62234409b31caef38Jonathan Dixon                mAwContents.destroy();
1354dcabaef9151384b571327b62234409b31caef38Jonathan Dixon            }
1364dcabaef9151384b571327b62234409b31caef38Jonathan Dixon        }
1374dcabaef9151384b571327b62234409b31caef38Jonathan Dixon
13846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
13946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
14046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
14146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setHorizontalScrollbarOverlay(boolean overlay) {
14246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
14346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
14446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
14546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
14646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setVerticalScrollbarOverlay(boolean overlay) {
14746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
14846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
14946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
15046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
15146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean overlayHorizontalScrollbar() {
15246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
15346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return false;
15446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
15546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
15646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
15746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean overlayVerticalScrollbar() {
15846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
15946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return false;
16046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
16146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
16246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
16346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public int getVisibleTitleHeight() {
16446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        // This is deprecated in WebView and should always return 0.
16546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return 0;
16646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
16746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
16846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
16946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public SslCertificate getCertificate() {
17046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return mAwContents.getCertificate();
17146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
17246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
17346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
17446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setCertificate(SslCertificate certificate) {
17546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
17646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
17746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
17846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
17946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void savePassword(String host, String username, String password) {
180adc6c4d74c77a617100bdfeb174ab0c314b24ea8Selim Gurun        // This is a deprecated API: intentional no-op.
18146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
18246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
18346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
18446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setHttpAuthUsernamePassword(String host, String realm, String username,
18546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)                                            String password) {
18646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mAwContents.setHttpAuthUsernamePassword(host, realm, username, password);
18746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
18846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
18946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
19046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public String[] getHttpAuthUsernamePassword(String host, String realm) {
19146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return mAwContents.getHttpAuthUsernamePassword(host, realm);
19246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
19346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
19446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
19546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void destroy() {
1963949435b480cb71106f65b237025da359cf8a8caBen Murdoch        mAwContents.destroy();
197a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon        if (mGLfunctor != null) {
198a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon            mGLfunctor.destroy();
199a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon            mGLfunctor = null;
200a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon        }
20146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
20246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
20346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
20446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setNetworkAvailable(boolean networkUp) {
20546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        NetworkChangeNotifier.forceConnectivityState(networkUp);
20646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
20746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
20846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
20946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public WebBackForwardList saveState(Bundle outState) {
210a08e8aada16dc4dbfb8745532169fb4a8347541dBo Liu        if (outState == null) return null;
211a08e8aada16dc4dbfb8745532169fb4a8347541dBo Liu        if (!mAwContents.saveState(outState)) return null;
212a08e8aada16dc4dbfb8745532169fb4a8347541dBo Liu        return copyBackForwardList();
21346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
21446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
21546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
21646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean savePicture(Bundle b, File dest) {
2179405536501747e2d7b4fc46a33e5f0a1e7fd47acJonathan Dixon        // Intentional no-op: hidden method on WebView.
21846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return false;
21946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
22046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
22146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
22246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean restorePicture(Bundle b, File src) {
2239405536501747e2d7b4fc46a33e5f0a1e7fd47acJonathan Dixon        // Intentional no-op: hidden method on WebView.
22446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return false;
22546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
22646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
22746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
22846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public WebBackForwardList restoreState(Bundle inState) {
229a08e8aada16dc4dbfb8745532169fb4a8347541dBo Liu        if (inState == null) return null;
230a08e8aada16dc4dbfb8745532169fb4a8347541dBo Liu        if (!mAwContents.restoreState(inState)) return null;
231a08e8aada16dc4dbfb8745532169fb4a8347541dBo Liu        return copyBackForwardList();
23246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
23346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
23446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
23546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void loadUrl(String url, Map<String, String> additionalHttpHeaders) {
23646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        // TODO: We may actually want to do some sanity checks here (like filter about://chrome).
2376ef347a29d692df672aaf59ee4926a476288476aBen Murdoch
2386ef347a29d692df672aaf59ee4926a476288476aBen Murdoch        // For backwards compatibility, apps targeting less than K will have JS URLs evaluated
2396ef347a29d692df672aaf59ee4926a476288476aBen Murdoch        // directly and any result of the evaluation will not replace the current page content.
2406ef347a29d692df672aaf59ee4926a476288476aBen Murdoch        // Matching Chrome behavior more closely; apps targetting >= K that load a JS URL will
2416ef347a29d692df672aaf59ee4926a476288476aBen Murdoch        // have the result of that URL replace the content of the current page.
2426ef347a29d692df672aaf59ee4926a476288476aBen Murdoch        final String JAVASCRIPT_SCHEME = "javascript:";
2436ef347a29d692df672aaf59ee4926a476288476aBen Murdoch        if (mAppTargetSdkVersion < Build.VERSION_CODES.KEY_LIME_PIE &&
2446ef347a29d692df672aaf59ee4926a476288476aBen Murdoch                url.startsWith(JAVASCRIPT_SCHEME)) {
2456ef347a29d692df672aaf59ee4926a476288476aBen Murdoch            evaluateJavaScript(url.substring(JAVASCRIPT_SCHEME.length()), null);
2466ef347a29d692df672aaf59ee4926a476288476aBen Murdoch            return;
2476ef347a29d692df672aaf59ee4926a476288476aBen Murdoch        }
2486ef347a29d692df672aaf59ee4926a476288476aBen Murdoch
24946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        LoadUrlParams params = new LoadUrlParams(url);
25046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        if (additionalHttpHeaders != null) params.setExtraHeaders(additionalHttpHeaders);
25146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mAwContents.loadUrl(params);
25246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
25346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
25446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
25546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void loadUrl(String url) {
25646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        loadUrl(url, null);
25746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
25846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
25946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
26046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void postUrl(String url, byte[] postData) {
26146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mAwContents.loadUrl(LoadUrlParams.createLoadHttpPostParams(
26246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)                url, postData));
26346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
26446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
26546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    private static boolean isBase64Encoded(String encoding) {
26646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return "base64".equals(encoding);
26746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
26846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
26946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
27046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void loadData(String data, String mimeType, String encoding) {
27146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mAwContents.loadUrl(LoadUrlParams.createLoadDataParams(
27246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)                  data, mimeType, isBase64Encoded(encoding)));
27346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
27446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
27546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
27646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void loadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding,
27746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)                                    String historyUrl) {
27846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        if (baseUrl == null || baseUrl.length() == 0) baseUrl = "about:blank";
2791127e126a25f26d7d255c73e19d2e07f1c854781Ben Murdoch        boolean isBase64 = isBase64Encoded(encoding);
2801127e126a25f26d7d255c73e19d2e07f1c854781Ben Murdoch        // For backwards compatibility with WebViewClassic, we use the value of |encoding|
2811127e126a25f26d7d255c73e19d2e07f1c854781Ben Murdoch        // as the charset, as long as it's not "base64".
28246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mAwContents.loadUrl(LoadUrlParams.createLoadDataParamsWithBaseUrl(
2831127e126a25f26d7d255c73e19d2e07f1c854781Ben Murdoch                data, mimeType, isBase64, baseUrl, historyUrl, isBase64 ? null : encoding));
28446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
28546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
2866ef347a29d692df672aaf59ee4926a476288476aBen Murdoch    public void evaluateJavaScript(String script, ValueCallback<String> resultCallback) {
2876ef347a29d692df672aaf59ee4926a476288476aBen Murdoch        mAwContents.evaluateJavaScript(script, resultCallback);
2886ef347a29d692df672aaf59ee4926a476288476aBen Murdoch    }
2896ef347a29d692df672aaf59ee4926a476288476aBen Murdoch
29046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
29146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void saveWebArchive(String filename) {
29246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        saveWebArchive(filename, false, null);
29346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
29446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
29546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
29646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void saveWebArchive(String basename, boolean autoname, ValueCallback<String> callback) {
29746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mAwContents.saveWebArchive(basename, autoname, callback);
29846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
29946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
30046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
30146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void stopLoading() {
3027cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        mAwContents.stopLoading();
30346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
30446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
30546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
30646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void reload() {
3077cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        mAwContents.reload();
30846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
30946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
31046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
31146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean canGoBack() {
3127cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.canGoBack();
31346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
31446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
31546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
31646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void goBack() {
3177cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        mAwContents.goBack();
31846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
31946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
32046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
32146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean canGoForward() {
3227cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.canGoForward();
32346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
32446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
32546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
32646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void goForward() {
3277cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        mAwContents.goForward();
32846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
32946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
33046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
33146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean canGoBackOrForward(int steps) {
3327cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.canGoBackOrForward(steps);
33346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
33446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
33546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
33646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void goBackOrForward(int steps) {
3377cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        mAwContents.goBackOrForward(steps);
33846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
33946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
34046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
34146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean isPrivateBrowsingEnabled() {
3426d58f78e7fc0412a58b163559cb8e9c4af5c6fe1Jonathan Dixon        // Not supported in this WebView implementation.
34346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return false;
34446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
34546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
34646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
34746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean pageUp(boolean top) {
3487cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.pageUp(top);
34946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
35046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
35146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
35246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean pageDown(boolean bottom) {
3537cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.pageDown(bottom);
35446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
35546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
35646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
35746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void clearView() {
35846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
35946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
36046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
36146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
36246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public Picture capturePicture() {
3639c5a40623b62737244deb2d04a98830d7ffa8404Leandro Gracia Gil        return mAwContents.capturePicture();
36446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
36546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
36646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
36746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public float getScale() {
3683520eb778d668dc76ca4541c69abd568b9d02691Mikhail Naganov        return mAwContents.getScale();
36946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
37046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
37146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
37246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setInitialScale(int scaleInPercent) {
3733520eb778d668dc76ca4541c69abd568b9d02691Mikhail Naganov        mAwContents.getSettings().setInitialPageScale(scaleInPercent);
37446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
37546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
37646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
37746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void invokeZoomPicker() {
3787cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        mAwContents.invokeZoomPicker();
37946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
38046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
38146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
38246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public WebView.HitTestResult getHitTestResult() {
383c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu        AwContents.HitTestData data = mAwContents.getLastHitTestResult();
384c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu        mHitTestResult.setType(data.hitTestResultType);
385c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu        mHitTestResult.setExtra(data.hitTestResultExtraData);
386c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu        return mHitTestResult;
38746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
38846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
38946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
39046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void requestFocusNodeHref(Message hrefMsg) {
391c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu        mAwContents.requestFocusNodeHref(hrefMsg);
39246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
39346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
39446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
39546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void requestImageRef(Message msg) {
396c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu        mAwContents.requestImageRef(msg);
39746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
39846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
39946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
40046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public String getUrl() {
4017cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        String url =  mAwContents.getUrl();
40246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        if (url == null || url.trim().isEmpty()) return null;
40346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return url;
40446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
40546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
40646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
40746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public String getOriginalUrl() {
40846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        String url =  mAwContents.getOriginalUrl();
40946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        if (url == null || url.trim().isEmpty()) return null;
41046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return url;
41146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
41246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
41346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
41446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public String getTitle() {
4157cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.getTitle();
41646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
41746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
41846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
41946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public Bitmap getFavicon() {
4209405536501747e2d7b4fc46a33e5f0a1e7fd47acJonathan Dixon        return mAwContents.getFavicon();
42146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
42246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
42346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
42446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public String getTouchIconUrl() {
4259405536501747e2d7b4fc46a33e5f0a1e7fd47acJonathan Dixon        // Intentional no-op: hidden method on WebView.
42646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return null;
42746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
42846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
42946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
43046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public int getProgress() {
43146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return mAwContents.getMostRecentProgress();
43246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
43346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
43446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
43546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public int getContentHeight() {
4366b5f3d1546ae2a9c712cde60c54ec027582bc4e6Martin Kosiba        return mAwContents.getContentHeightCss();
43746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
43846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
43946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
44046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public int getContentWidth() {
4416b5f3d1546ae2a9c712cde60c54ec027582bc4e6Martin Kosiba        return mAwContents.getContentWidthCss();
44246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
44346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
44446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
44546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void pauseTimers() {
446531e68a2b50a5e542eeede13907f29e463a99ebfBen Murdoch        mAwContents.pauseTimers();
44746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
44846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
44946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
45046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void resumeTimers() {
451531e68a2b50a5e542eeede13907f29e463a99ebfBen Murdoch        mAwContents.resumeTimers();
45246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
45346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
45446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
45546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onPause() {
4561cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon        mAwContents.onPause();
45746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
45846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
45946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
46046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onResume() {
4611cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon        mAwContents.onResume();
46246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
46346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
46446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
46546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean isPaused() {
4661cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon        return mAwContents.isPaused();
46746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
46846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
46946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
47046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void freeMemory() {
47146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
47246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
47346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
47446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
47546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void clearCache(boolean includeDiskFiles) {
47646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mAwContents.clearCache(includeDiskFiles);
47746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
47846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
479bbef8de5696d48fc6458c926026fc524a62814e1Selim Gurun    /**
480bbef8de5696d48fc6458c926026fc524a62814e1Selim Gurun     * This is a poorly named method, but we keep it for historical reasons.
481bbef8de5696d48fc6458c926026fc524a62814e1Selim Gurun     */
48246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
48346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void clearFormData() {
484bbef8de5696d48fc6458c926026fc524a62814e1Selim Gurun        mAwContents.hideAutofillPopup();
48546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
48646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
48746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
48846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void clearHistory() {
4897cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        mAwContents.clearHistory();
49046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
49146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
49246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
49346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void clearSslPreferences() {
4947cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        mAwContents.clearSslPreferences();
49546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
49646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
49746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
49846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public WebBackForwardList copyBackForwardList() {
49908a5e00cdfb74f4ffd843d2d0a9b0b40b86b107aBo Liu        return new WebBackForwardListChromium(
5007cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba                mAwContents.getNavigationHistory());
50146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
50246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
50346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
50446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setFindListener(WebView.FindListener listener) {
50546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mContentsClientAdapter.setFindListener(listener);
50646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
50746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
50846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
50946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void findNext(boolean forwards) {
51046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mAwContents.findNext(forwards);
51146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
51246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
51346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
51446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public int findAll(String searchString) {
515f37548d6d8e2a73c65d675a26706a38f52960800Jonathan Dixon        mAwContents.findAllAsync(searchString);
516f37548d6d8e2a73c65d675a26706a38f52960800Jonathan Dixon        return 0;
51746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
51846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
51946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
52046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void findAllAsync(String searchString) {
52146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mAwContents.findAllAsync(searchString);
52246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
52346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
52446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
52546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean showFindDialog(String text, boolean showIme) {
5266d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch        if (mWebView.getParent() == null) {
5276d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch            return false;
5286d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch        }
5296d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch
5306d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch        FindActionModeCallback findAction = new FindActionModeCallback(mWebView.getContext());
5316d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch        if (findAction == null) {
5326d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch            return false;
5336d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch        }
5346d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch
5356d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch        mWebView.startActionMode(findAction);
5366d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch        findAction.setWebView(mWebView);
5376d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch        if (showIme) {
5386d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch            findAction.showSoftInput();
5396d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch        }
5406d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch
5416d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch        if (text != null) {
5426d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch            findAction.setText(text);
5436d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch            findAction.findAll();
5446d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch        }
5456d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch
5466d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch        return true;
54746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
54846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
5496d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch    @Override
550fde8dae44f74be3de69ce6dd07b0023279b485a0Ben Murdoch    public void notifyFindDialogDismissed() {
5516d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch        clearMatches();
552fde8dae44f74be3de69ce6dd07b0023279b485a0Ben Murdoch    }
553fde8dae44f74be3de69ce6dd07b0023279b485a0Ben Murdoch
55446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
55546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void clearMatches() {
55646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mAwContents.clearMatches();
55746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
55846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
55946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
56046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void documentHasImages(Message response) {
56146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mAwContents.documentHasImages(response);
56246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
56346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
56446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
56546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setWebViewClient(WebViewClient client) {
56646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mContentsClientAdapter.setWebViewClient(client);
56746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
56846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
56946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
57046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setDownloadListener(DownloadListener listener) {
5714320e428efc3bf69387f3b9d5a0589b2b8746409Bo Liu        mContentsClientAdapter.setDownloadListener(listener);
57246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
57346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
57446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
57546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setWebChromeClient(WebChromeClient client) {
57646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mContentsClientAdapter.setWebChromeClient(client);
57746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
57846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
57946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
58046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setPictureListener(WebView.PictureListener listener) {
58146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mContentsClientAdapter.setPictureListener(listener);
5829c5a40623b62737244deb2d04a98830d7ffa8404Leandro Gracia Gil        mAwContents.enableOnNewPicture(listener != null,
5836ef347a29d692df672aaf59ee4926a476288476aBen Murdoch                mAppTargetSdkVersion >= Build.VERSION_CODES.JELLY_BEAN_MR2);
58446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
58546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
58646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
58746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void addJavascriptInterface(Object obj, String interfaceName) {
588ea844f60b1b559788566fe6e004b1eeca53a8039Jonathan Dixon        Class<? extends Annotation> requiredAnnotation = null;
5896ef347a29d692df672aaf59ee4926a476288476aBen Murdoch        if (mAppTargetSdkVersion >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
5907db34d3dcaac936566f912e1b0b21f3f103029ffJonathan Dixon           requiredAnnotation = JavascriptInterface.class;
5917db34d3dcaac936566f912e1b0b21f3f103029ffJonathan Dixon        }
5927cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        mAwContents.addPossiblyUnsafeJavascriptInterface(obj, interfaceName, requiredAnnotation);
59346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
59446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
59546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
59646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void removeJavascriptInterface(String interfaceName) {
5977cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        mAwContents.removeJavascriptInterface(interfaceName);
59846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
59946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
60046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
60146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public WebSettings getSettings() {
60246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        if (mWebSettings == null) {
603420c0da3a4e06e1ac5574091e7c9c286ef012369Mikhail Naganov            mWebSettings = new ContentSettingsAdapter(mAwContents.getSettings());
60446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        }
60546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return mWebSettings;
60646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
60746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
60846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
60946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setMapTrackballToArrowKeys(boolean setMap) {
61046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        // This is a deprecated API: intentional no-op.
61146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
61246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
61346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
61446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void flingScroll(int vx, int vy) {
6157cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        mAwContents.flingScroll(vx, vy);
61646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
61746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
61846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
61946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public View getZoomControls() {
620e78d6e40e4e78671e6621ba8cf49835568704899Jonathan Dixon        // This was deprecated in 2009 and hidden in JB MR1, so just provide the minimum needed
621e78d6e40e4e78671e6621ba8cf49835568704899Jonathan Dixon        // to stop very out-dated applications from crashing.
622e78d6e40e4e78671e6621ba8cf49835568704899Jonathan Dixon        Log.w(TAG, "WebView doesn't support getZoomControls");
623420c0da3a4e06e1ac5574091e7c9c286ef012369Mikhail Naganov        return mAwContents.getSettings().supportZoom() ? new View(mWebView.getContext()) : null;
62446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
62546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
62646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
62746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean canZoomIn() {
6287cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.canZoomIn();
62946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
63046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
63146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
63246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean canZoomOut() {
6337cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.canZoomOut();
63446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
63546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
63646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
63746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean zoomIn() {
6387cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.zoomIn();
63946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
64046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
64146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
64246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean zoomOut() {
6437cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.zoomOut();
64446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
64546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
646d2dcef4d9edfb7af7abff85b0867c3d6a363feb7Jonathan Dixon    @Override
64746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void dumpViewHierarchyWithProperties(BufferedWriter out, int level) {
64846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
64946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
65046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
651d2dcef4d9edfb7af7abff85b0867c3d6a363feb7Jonathan Dixon    @Override
65246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public View findHierarchyView(String className, int hashCode) {
65346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
65446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return null;
65546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
65646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
65746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // WebViewProvider glue methods ---------------------------------------------------------------
65846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
65946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
66046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public WebViewProvider.ViewDelegate getViewDelegate() {
66146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return this;
66246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
66346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
66446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
66546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public WebViewProvider.ScrollDelegate getScrollDelegate() {
66646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return this;
66746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
66846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
66946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
67046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // WebViewProvider.ViewDelegate implementation ------------------------------------------------
67146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
672a7fba41c5661cb61b41c8a4ff2d69e5153666f7fBen Murdoch    // TODO: remove from WebViewProvider and use default implementation from
673a7fba41c5661cb61b41c8a4ff2d69e5153666f7fBen Murdoch    // ViewGroup.
674a7fba41c5661cb61b41c8a4ff2d69e5153666f7fBen Murdoch    // @Override
67546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean shouldDelayChildPressedState() {
676a7fba41c5661cb61b41c8a4ff2d69e5153666f7fBen Murdoch        return true;
67746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
67846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
6795c990caf9c0237064dab94059f6c46fc2d51cd97Ben Murdoch//    @Override
6805c990caf9c0237064dab94059f6c46fc2d51cd97Ben Murdoch    public AccessibilityNodeProvider getAccessibilityNodeProvider() {
6815c990caf9c0237064dab94059f6c46fc2d51cd97Ben Murdoch        return mAwContents.getAccessibilityNodeProvider();
6825c990caf9c0237064dab94059f6c46fc2d51cd97Ben Murdoch    }
6835c990caf9c0237064dab94059f6c46fc2d51cd97Ben Murdoch
68446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
68546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
6867cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        mAwContents.onInitializeAccessibilityNodeInfo(info);
68746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
68846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
68946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
69046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
6917cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        mAwContents.onInitializeAccessibilityEvent(event);
69246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
69346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
69446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
69546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean performAccessibilityAction(int action, Bundle arguments) {
696b7b706b2ed5cbb77dd690f5405b626a429989714Ben Murdoch        if (mAwContents.supportsAccessibilityAction(action)) {
697b7b706b2ed5cbb77dd690f5405b626a429989714Ben Murdoch            return mAwContents.performAccessibilityAction(action, arguments);
698b7b706b2ed5cbb77dd690f5405b626a429989714Ben Murdoch        }
699b7b706b2ed5cbb77dd690f5405b626a429989714Ben Murdoch        return mWebViewPrivate.super_performAccessibilityAction(action, arguments);
70046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
70146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
70246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
70346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setOverScrollMode(int mode) {
70446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
70546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
70646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
70746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
70846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setScrollBarStyle(int style) {
70946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
71046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
71146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
71246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
71346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onDrawVerticalScrollBar(Canvas canvas, Drawable scrollBar,
71446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)                                        int l, int t, int r, int b) {
71546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
71646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
71746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
71846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
71946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onOverScrolled(int scrollX, int scrollY, boolean clampedX, boolean clampedY) {
7203951fbadf5157dd3fe73decc879f9b763e780b09Martin Kosiba        mAwContents.onContainerViewOverScrolled(scrollX, scrollY, clampedX, clampedY);
72146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
72246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
72346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
72446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onWindowVisibilityChanged(int visibility) {
7251cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon        mAwContents.onWindowVisibilityChanged(visibility);
72646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
72746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
72846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
72946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onDraw(Canvas canvas) {
7307ab33360e331e04f515d532064670e210d174a7aTao Bai        mAwContents.onDraw(canvas);
73146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
73246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
73346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
73446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setLayoutParams(ViewGroup.LayoutParams layoutParams) {
73546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        // TODO: This is the minimum implementation for HTMLViewer
73646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        // bringup. Likely will need to go up to ContentViewCore for
73746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        // a complete implementation.
73846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mWebViewPrivate.super_setLayoutParams(layoutParams);
73946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
74046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
74146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
74246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean performLongClick() {
743decc147cebc8f73d355c024d92c60d3f727cab31Bo Liu        return mWebViewPrivate.super_performLongClick();
74446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
74546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
74646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
74746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onConfigurationChanged(Configuration newConfig) {
7481cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon        mAwContents.onConfigurationChanged(newConfig);
74946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
75046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
75146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
75246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
7537cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.onCreateInputConnection(outAttrs);
75446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
75546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
75646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
75746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent event) {
75846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
75946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return false;
76046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
76146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
76246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
76346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean onKeyDown(int keyCode, KeyEvent event) {
76446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
76546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return false;
76646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
76746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
76846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
76946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean onKeyUp(int keyCode, KeyEvent event) {
7707cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.onKeyUp(keyCode, event);
77146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
77246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
77346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
77446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onAttachedToWindow() {
7751cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon        mAwContents.onAttachedToWindow();
77646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
77746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
77846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
77946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onDetachedFromWindow() {
7801cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon        mAwContents.onDetachedFromWindow();
781a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon        if (mGLfunctor != null) {
782a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon            mGLfunctor.detach();
783a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon        }
78446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
78546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
78646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
78746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onVisibilityChanged(View changedView, int visibility) {
788c346a83062dfbf50ac2275813ccb2e36f9e778e9Martin Kosiba        // The AwContents will find out the container view visibility before the first draw so we
789c346a83062dfbf50ac2275813ccb2e36f9e778e9Martin Kosiba        // can safely ignore onVisibilityChanged callbacks that happen before init().
790c346a83062dfbf50ac2275813ccb2e36f9e778e9Martin Kosiba        if (mAwContents != null) {
791c346a83062dfbf50ac2275813ccb2e36f9e778e9Martin Kosiba            mAwContents.onVisibilityChanged(changedView, visibility);
792c346a83062dfbf50ac2275813ccb2e36f9e778e9Martin Kosiba        }
79346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
79446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
79546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
79646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onWindowFocusChanged(boolean hasWindowFocus) {
7971cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon        mAwContents.onWindowFocusChanged(hasWindowFocus);
79846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
79946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
80046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
80146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
8021cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon        mAwContents.onFocusChanged(focused, direction, previouslyFocusedRect);
80346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
80446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
80546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
80646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean setFrame(int left, int top, int right, int bottom) {
8071cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon        // TODO(joth): This is the minimum implementation for initial
8081cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon        // bringup. Likely will need to go up to AwContents for a complete
8091cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon        // implementation, e.g. setting the compositor visible region (to
8101cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon        // avoid painting tiles that are offscreen due to the view's position).
81146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return mWebViewPrivate.super_setFrame(left, top, right, bottom);
81246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
81346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
81446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
81546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onSizeChanged(int w, int h, int ow, int oh) {
8161cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon        mAwContents.onSizeChanged(w, h, ow, oh);
81746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
81846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
81946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
82046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onScrollChanged(int l, int t, int oldl, int oldt) {
82146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
82246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
82346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
82446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean dispatchKeyEvent(KeyEvent event) {
8257cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.dispatchKeyEvent(event);
82646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
82746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
82846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
82946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean onTouchEvent(MotionEvent ev) {
830c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu        return mAwContents.onTouchEvent(ev);
83146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
83246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
83346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
83446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean onHoverEvent(MotionEvent event) {
835c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu        return mAwContents.onHoverEvent(event);
83646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
83746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
83846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
83946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean onGenericMotionEvent(MotionEvent event) {
840c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu        return mAwContents.onGenericMotionEvent(event);
84146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
84246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
84346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
84446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean onTrackballEvent(MotionEvent ev) {
84546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        // Trackball event not handled, which eventually gets converted to DPAD keyevents
84646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return false;
84746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
84846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
84946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
85046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean requestFocus(int direction, Rect previouslyFocusedRect) {
8514cee3bf50c125a52a49323aa999f4b619fa18c10Ben Murdoch        mAwContents.requestFocus();
85246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return mWebViewPrivate.super_requestFocus(direction, previouslyFocusedRect);
85346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
85446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
85546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
85646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
857d7bf6ab0cd8cc4005b112e4358eb797bb178a85fMarcin Kosiba        mAwContents.onMeasure(widthMeasureSpec, heightMeasureSpec);
85846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
85946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
86046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
86146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean requestChildRectangleOnScreen(View child, Rect rect, boolean immediate) {
86246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
86346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return false;
86446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
86546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
86646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
86746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setBackgroundColor(int color) {
86846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
86946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
87046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
87146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
87246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setLayerType(int layerType, Paint paint) {
87346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
87446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
87546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
8760b528e4924a7c14687181185bc66173ad18f00eaLeandro Gracia Gil    @Override
87746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void preDispatchDraw(Canvas canvas) {
8780b528e4924a7c14687181185bc66173ad18f00eaLeandro Gracia Gil        // TODO(leandrogracia): remove this method from WebViewProvider if we think
8790b528e4924a7c14687181185bc66173ad18f00eaLeandro Gracia Gil        // we won't need it again.
88046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
88146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
88246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // WebViewProvider.ScrollDelegate implementation ----------------------------------------------
88346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
88446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
88546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public int computeHorizontalScrollRange() {
8867cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.computeHorizontalScrollRange();
88746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
88846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
88946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
89046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public int computeHorizontalScrollOffset() {
8917cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.computeHorizontalScrollOffset();
89246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
89346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
89446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
89546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public int computeVerticalScrollRange() {
8967cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.computeVerticalScrollRange();
89746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
89846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
89946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
90046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public int computeVerticalScrollOffset() {
9017cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.computeVerticalScrollOffset();
90246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
90346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
90446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
90546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public int computeVerticalScrollExtent() {
9067cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.computeVerticalScrollExtent();
90746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
90846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
90946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
91046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void computeScroll() {
91146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        // BUG=http://b/6029133
9124a0a38f783cb93f6a600da3ab296b72499239ffbJonathan Dixon        // Too much log spam: UnimplementedWebViewApi.invoke();
91346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
91446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
9154702a6de6031477029de5e6f5777c8b3e7846d35Marcin Kosiba    // AwContents.InternalAccessDelegate implementation --------------------------------------
9164702a6de6031477029de5e6f5777c8b3e7846d35Marcin Kosiba    private class InternalAccessAdapter implements AwContents.InternalAccessDelegate {
91746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        @Override
91846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        public boolean drawChild(Canvas arg0, View arg1, long arg2) {
91946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            UnimplementedWebViewApi.invoke();
92046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            return false;
92146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        }
92246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
92346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        @Override
92446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        public boolean super_onKeyUp(int arg0, KeyEvent arg1) {
92546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            UnimplementedWebViewApi.invoke();
92646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            return false;
92746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        }
92846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
92946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        @Override
93046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        public boolean super_dispatchKeyEventPreIme(KeyEvent arg0) {
93146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            UnimplementedWebViewApi.invoke();
93246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            return false;
93346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        }
93446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
93546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        @Override
93646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        public boolean super_dispatchKeyEvent(KeyEvent event) {
93746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            return mWebViewPrivate.super_dispatchKeyEvent(event);
93846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        }
93946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
94046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        @Override
94146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        public boolean super_onGenericMotionEvent(MotionEvent arg0) {
94246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            UnimplementedWebViewApi.invoke();
94346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            return false;
94446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        }
94546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
94646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        @Override
94746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        public void super_onConfigurationChanged(Configuration arg0) {
94846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            UnimplementedWebViewApi.invoke();
94946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        }
95046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
95146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        @Override
95246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        public boolean awakenScrollBars() {
95346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            mWebViewPrivate.awakenScrollBars(0);
95446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            // TODO: modify the WebView.PrivateAccess to provide a return value.
95546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            return true;
95646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        }
95746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
95846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        @Override
95946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        public boolean super_awakenScrollBars(int arg0, boolean arg1) {
96046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            // TODO: need method on WebView.PrivateAccess?
96146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            UnimplementedWebViewApi.invoke();
96246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            return false;
96346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        }
9644702a6de6031477029de5e6f5777c8b3e7846d35Marcin Kosiba
965d7bf6ab0cd8cc4005b112e4358eb797bb178a85fMarcin Kosiba        @Override
9662a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba        public void onScrollChanged(int l, int t, int oldl, int oldt) {
9672a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba            mWebViewPrivate.setScrollXRaw(l);
9682a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba            mWebViewPrivate.setScrollYRaw(t);
9692a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba            mWebViewPrivate.onScrollChanged(l, t, oldl, oldt);
9702a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba        }
9712a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba
9723951fbadf5157dd3fe73decc879f9b763e780b09Martin Kosiba        @Override
9732a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba        public void overScrollBy(int deltaX, int deltaY,
9742a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba            int scrollX, int scrollY,
9752a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba            int scrollRangeX, int scrollRangeY,
9762a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba            int maxOverScrollX, int maxOverScrollY,
9772a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba            boolean isTouchEvent) {
9782a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba            mWebViewPrivate.overScrollBy(deltaX, deltaY, scrollX, scrollY,
9792a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba                    scrollRangeX, scrollRangeY, maxOverScrollX, maxOverScrollY, isTouchEvent);
9802a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba        }
9812a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba
9823951fbadf5157dd3fe73decc879f9b763e780b09Martin Kosiba        @Override
9832a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba        public void super_scrollTo(int scrollX, int scrollY) {
9842a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba            mWebViewPrivate.super_scrollTo(scrollX, scrollY);
9852a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba        }
9862a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba
9872a5e561c09bd9fc7b369d99c9166fa588e20ed38Martin Kosiba        @Override
9884702a6de6031477029de5e6f5777c8b3e7846d35Marcin Kosiba        public void setMeasuredDimension(int measuredWidth, int measuredHeight) {
9894702a6de6031477029de5e6f5777c8b3e7846d35Marcin Kosiba            mWebViewPrivate.setMeasuredDimension(measuredWidth, measuredHeight);
9904702a6de6031477029de5e6f5777c8b3e7846d35Marcin Kosiba        }
99151f7cf16cd02f14050bb723175a2a57570e8486dTao Bai
9927ab33360e331e04f515d532064670e210d174a7aTao Bai        @Override
99351f7cf16cd02f14050bb723175a2a57570e8486dTao Bai        public boolean requestDrawGL(Canvas canvas) {
9947ab33360e331e04f515d532064670e210d174a7aTao Bai            if (mGLfunctor == null) {
9957ab33360e331e04f515d532064670e210d174a7aTao Bai                mGLfunctor = new DrawGLFunctor(mAwContents.getAwDrawGLViewContext());
9967ab33360e331e04f515d532064670e210d174a7aTao Bai            }
99751f7cf16cd02f14050bb723175a2a57570e8486dTao Bai            return mGLfunctor.requestDrawGL((HardwareCanvas)canvas, mWebView.getViewRootImpl());
99851f7cf16cd02f14050bb723175a2a57570e8486dTao Bai        }
99946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
100046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)}
1001