WebViewChromium.java revision f37548d6d8e2a73c65d675a26706a38f52960800
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;
3946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.inputmethod.EditorInfo;
4046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.inputmethod.InputConnection;
4146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.DownloadListener;
426d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdochimport android.webkit.FindActionModeCallback;
437db34d3dcaac936566f912e1b0b21f3f103029ffJonathan Dixonimport android.webkit.JavascriptInterface;
4446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.ValueCallback;
4546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.WebBackForwardList;
4646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.WebChromeClient;
4746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.WebSettings;
4846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.WebView;
4946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.WebViewClient;
5046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.WebViewProvider;
5146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
52aa8b39f3e3f208586f3750d7278f1239a09ebd32Kristian Monsenimport org.chromium.android_webview.AwBrowserContext;
5346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import org.chromium.android_webview.AwContents;
5446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import org.chromium.content.browser.LoadUrlParams;
5546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import org.chromium.net.NetworkChangeNotifier;
5646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
5746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import java.io.BufferedWriter;
5846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import java.io.File;
59ea844f60b1b559788566fe6e004b1eeca53a8039Jonathan Dixonimport java.lang.annotation.Annotation;
6046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import java.util.Map;
6146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
6246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)/**
6346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * This class is the delegate to which WebViewProxy forwards all API calls.
6446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) *
651cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon * Most of the actual functionality is implemented by AwContents (or ContentViewCore within
661cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon * it). This class also contains WebView-specific APIs that require the creation of other
671cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon * adapters (otherwise org.chromium.content would depend on the webview.chromium package)
681cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon * and a small set of no-op deprecated APIs.
6946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) */
7046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)class WebViewChromium implements WebViewProvider,
7146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)          WebViewProvider.ScrollDelegate, WebViewProvider.ViewDelegate {
72e78d6e40e4e78671e6621ba8cf49835568704899Jonathan Dixon
73e78d6e40e4e78671e6621ba8cf49835568704899Jonathan Dixon    private static final String TAG = WebViewChromium.class.getSimpleName();
74e78d6e40e4e78671e6621ba8cf49835568704899Jonathan Dixon
7546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // The WebView that this WebViewChromium is the provider for.
7646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    WebView mWebView;
7746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // Lets us access protected View-derived methods on the WebView instance we're backing.
7846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    WebView.PrivateAccess mWebViewPrivate;
7946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // The client adapter class.
8046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    private WebViewContentsClientAdapter mContentsClientAdapter;
8146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
8246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // Variables for functionality provided by this adapter ---------------------------------------
8346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // WebSettings adapter, lazily initialized in the getter
8446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    private WebSettings mWebSettings;
853949435b480cb71106f65b237025da359cf8a8caBen Murdoch    // The WebView wrapper for ContentViewCore and required browser compontents.
8646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    private AwContents mAwContents;
87a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon    // Non-null if this webview is using the GL accelerated draw path.
88a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon    private DrawGLFunctor mGLfunctor;
8946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
90aa8b39f3e3f208586f3750d7278f1239a09ebd32Kristian Monsen    private AwBrowserContext mBrowserContext;
91aa8b39f3e3f208586f3750d7278f1239a09ebd32Kristian Monsen
92c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu    private final WebView.HitTestResult mHitTestResult;
93c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu
94aa8b39f3e3f208586f3750d7278f1239a09ebd32Kristian Monsen    public WebViewChromium(WebView webView, WebView.PrivateAccess webViewPrivate,
95aa8b39f3e3f208586f3750d7278f1239a09ebd32Kristian Monsen            AwBrowserContext browserContext) {
9646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mWebView = webView;
9746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mWebViewPrivate = webViewPrivate;
98c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu        mHitTestResult = new WebView.HitTestResult();
99aa8b39f3e3f208586f3750d7278f1239a09ebd32Kristian Monsen        mBrowserContext = browserContext;
10046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
10146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
1021ee9dd0420198429115c3fe8cf0b0502fab9cf62Ben Murdoch    static void completeWindowCreation(WebView parent, WebView child) {
1031ee9dd0420198429115c3fe8cf0b0502fab9cf62Ben Murdoch        AwContents parentContents = ((WebViewChromium) parent.getWebViewProvider()).mAwContents;
1041ee9dd0420198429115c3fe8cf0b0502fab9cf62Ben Murdoch        AwContents childContents = ((WebViewChromium) child.getWebViewProvider()).mAwContents;
1051ee9dd0420198429115c3fe8cf0b0502fab9cf62Ben Murdoch        parentContents.supplyContentsForPopup(childContents);
10646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
10746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
10846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // WebViewProvider methods --------------------------------------------------------------------
10946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
11046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
11146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void init(Map<String, Object> javaScriptInterfaces, boolean privateBrowsing) {
11246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        // TODO: BUG=6790250 javaScriptInterfaces were only ever used by DumpRenderTree and should
11346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        // probably be implemented as a hidden hook in WebViewClassic.
1145a25477f4323996be9d5cc32935066c73b47061bBen Murdoch        if (privateBrowsing) {
1155a25477f4323996be9d5cc32935066c73b47061bBen Murdoch            throw new IllegalArgumentException(
1165a25477f4323996be9d5cc32935066c73b47061bBen Murdoch                    "Private browsing is not supported in this version of the WebView.");
1175a25477f4323996be9d5cc32935066c73b47061bBen Murdoch        }
11846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
11946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        final boolean isAccessFromFileURLsGrantedByDefault =
12046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)                mWebView.getContext().getApplicationInfo().targetSdkVersion <
12146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)                Build.VERSION_CODES.JELLY_BEAN;
12246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mContentsClientAdapter = new WebViewContentsClientAdapter(mWebView);
123aa8b39f3e3f208586f3750d7278f1239a09ebd32Kristian Monsen        mAwContents = new AwContents(mBrowserContext, mWebView, new InternalAccessAdapter(),
124aa8b39f3e3f208586f3750d7278f1239a09ebd32Kristian Monsen                mContentsClientAdapter, isAccessFromFileURLsGrantedByDefault);
12546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
12646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
12746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
12846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setHorizontalScrollbarOverlay(boolean overlay) {
12946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
13046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
13146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
13246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
13346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setVerticalScrollbarOverlay(boolean overlay) {
13446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
13546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
13646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
13746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
13846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean overlayHorizontalScrollbar() {
13946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
14046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return false;
14146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
14246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
14346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
14446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean overlayVerticalScrollbar() {
14546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
14646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return false;
14746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
14846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
14946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
15046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public int getVisibleTitleHeight() {
15146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        // This is deprecated in WebView and should always return 0.
15246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return 0;
15346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
15446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
15546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
15646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public SslCertificate getCertificate() {
15746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return mAwContents.getCertificate();
15846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
15946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
16046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
16146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setCertificate(SslCertificate certificate) {
16246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
16346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
16446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
16546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
16646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void savePassword(String host, String username, String password) {
167adc6c4d74c77a617100bdfeb174ab0c314b24ea8Selim Gurun        // This is a deprecated API: intentional no-op.
16846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
16946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
17046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
17146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setHttpAuthUsernamePassword(String host, String realm, String username,
17246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)                                            String password) {
17346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mAwContents.setHttpAuthUsernamePassword(host, realm, username, password);
17446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
17546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
17646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
17746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public String[] getHttpAuthUsernamePassword(String host, String realm) {
17846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return mAwContents.getHttpAuthUsernamePassword(host, realm);
17946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
18046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
18146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
18246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void destroy() {
1833949435b480cb71106f65b237025da359cf8a8caBen Murdoch        mAwContents.destroy();
184a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon        if (mGLfunctor != null) {
185a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon            mGLfunctor.destroy();
186a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon            mGLfunctor = null;
187a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon        }
18846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
18946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
19046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
19146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setNetworkAvailable(boolean networkUp) {
19246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        NetworkChangeNotifier.forceConnectivityState(networkUp);
19346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
19446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
19546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
19646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public WebBackForwardList saveState(Bundle outState) {
197a08e8aada16dc4dbfb8745532169fb4a8347541dBo Liu        if (outState == null) return null;
198a08e8aada16dc4dbfb8745532169fb4a8347541dBo Liu        if (!mAwContents.saveState(outState)) return null;
199a08e8aada16dc4dbfb8745532169fb4a8347541dBo Liu        return copyBackForwardList();
20046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
20146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
20246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
20346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean savePicture(Bundle b, File dest) {
2049405536501747e2d7b4fc46a33e5f0a1e7fd47acJonathan Dixon        // Intentional no-op: hidden method on WebView.
20546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return false;
20646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
20746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
20846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
20946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean restorePicture(Bundle b, File src) {
2109405536501747e2d7b4fc46a33e5f0a1e7fd47acJonathan Dixon        // Intentional no-op: hidden method on WebView.
21146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return false;
21246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
21346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
21446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
21546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public WebBackForwardList restoreState(Bundle inState) {
216a08e8aada16dc4dbfb8745532169fb4a8347541dBo Liu        if (inState == null) return null;
217a08e8aada16dc4dbfb8745532169fb4a8347541dBo Liu        if (!mAwContents.restoreState(inState)) return null;
218a08e8aada16dc4dbfb8745532169fb4a8347541dBo Liu        return copyBackForwardList();
21946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
22046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
22146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
22246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void loadUrl(String url, Map<String, String> additionalHttpHeaders) {
22346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        // TODO: We may actually want to do some sanity checks here (like filter about://chrome).
22446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        LoadUrlParams params = new LoadUrlParams(url);
22546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        if (additionalHttpHeaders != null) params.setExtraHeaders(additionalHttpHeaders);
22646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mAwContents.loadUrl(params);
22746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
22846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
22946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
23046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void loadUrl(String url) {
23146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        loadUrl(url, null);
23246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
23346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
23446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
23546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void postUrl(String url, byte[] postData) {
23646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mAwContents.loadUrl(LoadUrlParams.createLoadHttpPostParams(
23746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)                url, postData));
23846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
23946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
24046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    private static boolean isBase64Encoded(String encoding) {
24146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return "base64".equals(encoding);
24246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
24346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
24446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
24546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void loadData(String data, String mimeType, String encoding) {
24646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mAwContents.loadUrl(LoadUrlParams.createLoadDataParams(
24746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)                  data, mimeType, isBase64Encoded(encoding)));
24846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
24946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
25046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
25146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void loadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding,
25246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)                                    String historyUrl) {
25346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        if (baseUrl == null || baseUrl.length() == 0) baseUrl = "about:blank";
2541127e126a25f26d7d255c73e19d2e07f1c854781Ben Murdoch        boolean isBase64 = isBase64Encoded(encoding);
2551127e126a25f26d7d255c73e19d2e07f1c854781Ben Murdoch        // For backwards compatibility with WebViewClassic, we use the value of |encoding|
2561127e126a25f26d7d255c73e19d2e07f1c854781Ben Murdoch        // as the charset, as long as it's not "base64".
25746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mAwContents.loadUrl(LoadUrlParams.createLoadDataParamsWithBaseUrl(
2581127e126a25f26d7d255c73e19d2e07f1c854781Ben Murdoch                data, mimeType, isBase64, baseUrl, historyUrl, isBase64 ? null : encoding));
25946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
26046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
26146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
26246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void saveWebArchive(String filename) {
26346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        saveWebArchive(filename, false, null);
26446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
26546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
26646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
26746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void saveWebArchive(String basename, boolean autoname, ValueCallback<String> callback) {
26846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mAwContents.saveWebArchive(basename, autoname, callback);
26946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
27046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
27146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
27246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void stopLoading() {
2737cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        mAwContents.stopLoading();
27446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
27546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
27646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
27746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void reload() {
2787cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        mAwContents.reload();
27946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
28046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
28146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
28246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean canGoBack() {
2837cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.canGoBack();
28446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
28546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
28646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
28746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void goBack() {
2887cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        mAwContents.goBack();
28946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
29046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
29146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
29246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean canGoForward() {
2937cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.canGoForward();
29446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
29546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
29646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
29746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void goForward() {
2987cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        mAwContents.goForward();
29946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
30046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
30146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
30246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean canGoBackOrForward(int steps) {
3037cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.canGoBackOrForward(steps);
30446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
30546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
30646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
30746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void goBackOrForward(int steps) {
3087cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        mAwContents.goBackOrForward(steps);
30946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
31046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
31146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
31246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean isPrivateBrowsingEnabled() {
3136d58f78e7fc0412a58b163559cb8e9c4af5c6fe1Jonathan Dixon        // Not supported in this WebView implementation.
31446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return false;
31546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
31646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
31746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
31846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean pageUp(boolean top) {
3197cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.pageUp(top);
32046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
32146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
32246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
32346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean pageDown(boolean bottom) {
3247cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.pageDown(bottom);
32546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
32646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
32746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
32846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void clearView() {
32946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
33046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
33146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
33246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
33346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public Picture capturePicture() {
3349c5a40623b62737244deb2d04a98830d7ffa8404Leandro Gracia Gil        return mAwContents.capturePicture();
33546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
33646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
33746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
33846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public float getScale() {
3393520eb778d668dc76ca4541c69abd568b9d02691Mikhail Naganov        return mAwContents.getScale();
34046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
34146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
34246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
34346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setInitialScale(int scaleInPercent) {
3443520eb778d668dc76ca4541c69abd568b9d02691Mikhail Naganov        mAwContents.getSettings().setInitialPageScale(scaleInPercent);
34546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
34646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
34746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
34846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void invokeZoomPicker() {
3497cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        mAwContents.invokeZoomPicker();
35046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
35146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
35246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
35346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public WebView.HitTestResult getHitTestResult() {
354c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu        AwContents.HitTestData data = mAwContents.getLastHitTestResult();
355c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu        mHitTestResult.setType(data.hitTestResultType);
356c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu        mHitTestResult.setExtra(data.hitTestResultExtraData);
357c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu        return mHitTestResult;
35846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
35946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
36046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
36146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void requestFocusNodeHref(Message hrefMsg) {
362c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu        mAwContents.requestFocusNodeHref(hrefMsg);
36346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
36446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
36546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
36646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void requestImageRef(Message msg) {
367c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu        mAwContents.requestImageRef(msg);
36846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
36946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
37046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
37146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public String getUrl() {
3727cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        String url =  mAwContents.getUrl();
37346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        if (url == null || url.trim().isEmpty()) return null;
37446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return url;
37546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
37646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
37746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
37846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public String getOriginalUrl() {
37946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        String url =  mAwContents.getOriginalUrl();
38046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        if (url == null || url.trim().isEmpty()) return null;
38146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return url;
38246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
38346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
38446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
38546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public String getTitle() {
3867cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.getTitle();
38746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
38846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
38946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
39046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public Bitmap getFavicon() {
3919405536501747e2d7b4fc46a33e5f0a1e7fd47acJonathan Dixon        return mAwContents.getFavicon();
39246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
39346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
39446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
39546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public String getTouchIconUrl() {
3969405536501747e2d7b4fc46a33e5f0a1e7fd47acJonathan Dixon        // Intentional no-op: hidden method on WebView.
39746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return null;
39846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
39946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
40046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
40146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public int getProgress() {
40246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return mAwContents.getMostRecentProgress();
40346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
40446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
40546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
40646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public int getContentHeight() {
4076b5f3d1546ae2a9c712cde60c54ec027582bc4e6Martin Kosiba        return mAwContents.getContentHeightCss();
40846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
40946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
41046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
41146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public int getContentWidth() {
4126b5f3d1546ae2a9c712cde60c54ec027582bc4e6Martin Kosiba        return mAwContents.getContentWidthCss();
41346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
41446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
41546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
41646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void pauseTimers() {
417531e68a2b50a5e542eeede13907f29e463a99ebfBen Murdoch        mAwContents.pauseTimers();
41846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
41946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
42046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
42146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void resumeTimers() {
422531e68a2b50a5e542eeede13907f29e463a99ebfBen Murdoch        mAwContents.resumeTimers();
42346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
42446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
42546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
42646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onPause() {
4271cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon        mAwContents.onPause();
42846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
42946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
43046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
43146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onResume() {
4321cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon        mAwContents.onResume();
43346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
43446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
43546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
43646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean isPaused() {
4371cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon        return mAwContents.isPaused();
43846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
43946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
44046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
44146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void freeMemory() {
44246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
44346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
44446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
44546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
44646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void clearCache(boolean includeDiskFiles) {
44746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mAwContents.clearCache(includeDiskFiles);
44846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
44946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
45046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
45146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void clearFormData() {
45246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
45346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
45446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
45546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
45646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void clearHistory() {
4577cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        mAwContents.clearHistory();
45846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
45946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
46046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
46146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void clearSslPreferences() {
4627cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        mAwContents.clearSslPreferences();
46346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
46446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
46546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
46646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public WebBackForwardList copyBackForwardList() {
46708a5e00cdfb74f4ffd843d2d0a9b0b40b86b107aBo Liu        return new WebBackForwardListChromium(
4687cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba                mAwContents.getNavigationHistory());
46946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
47046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
47146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
47246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setFindListener(WebView.FindListener listener) {
47346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mContentsClientAdapter.setFindListener(listener);
47446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
47546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
47646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
47746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void findNext(boolean forwards) {
47846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mAwContents.findNext(forwards);
47946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
48046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
48146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
48246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public int findAll(String searchString) {
483f37548d6d8e2a73c65d675a26706a38f52960800Jonathan Dixon        mAwContents.findAllAsync(searchString);
484f37548d6d8e2a73c65d675a26706a38f52960800Jonathan Dixon        return 0;
48546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
48646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
48746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
48846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void findAllAsync(String searchString) {
48946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mAwContents.findAllAsync(searchString);
49046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
49146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
49246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
49346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean showFindDialog(String text, boolean showIme) {
4946d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch        if (mWebView.getParent() == null) {
4956d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch            return false;
4966d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch        }
4976d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch
4986d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch        FindActionModeCallback findAction = new FindActionModeCallback(mWebView.getContext());
4996d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch        if (findAction == null) {
5006d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch            return false;
5016d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch        }
5026d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch
5036d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch        mWebView.startActionMode(findAction);
5046d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch        findAction.setWebView(mWebView);
5056d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch        if (showIme) {
5066d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch            findAction.showSoftInput();
5076d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch        }
5086d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch
5096d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch        if (text != null) {
5106d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch            findAction.setText(text);
5116d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch            findAction.findAll();
5126d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch        }
5136d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch
5146d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch        return true;
51546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
51646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
5176d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch    @Override
518fde8dae44f74be3de69ce6dd07b0023279b485a0Ben Murdoch    public void notifyFindDialogDismissed() {
5196d4097cfa188a95c95fd5d0c86238c91f817c3edBen Murdoch        clearMatches();
520fde8dae44f74be3de69ce6dd07b0023279b485a0Ben Murdoch    }
521fde8dae44f74be3de69ce6dd07b0023279b485a0Ben Murdoch
52246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
52346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void clearMatches() {
52446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mAwContents.clearMatches();
52546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
52646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
52746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
52846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void documentHasImages(Message response) {
52946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mAwContents.documentHasImages(response);
53046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
53146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
53246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
53346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setWebViewClient(WebViewClient client) {
53446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mContentsClientAdapter.setWebViewClient(client);
53546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
53646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
53746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
53846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setDownloadListener(DownloadListener listener) {
5394320e428efc3bf69387f3b9d5a0589b2b8746409Bo Liu        mContentsClientAdapter.setDownloadListener(listener);
54046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
54146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
54246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
54346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setWebChromeClient(WebChromeClient client) {
54446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mContentsClientAdapter.setWebChromeClient(client);
54546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
54646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
54746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
54846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setPictureListener(WebView.PictureListener listener) {
54946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mContentsClientAdapter.setPictureListener(listener);
5509c5a40623b62737244deb2d04a98830d7ffa8404Leandro Gracia Gil        mAwContents.enableOnNewPicture(listener != null,
5519c5a40623b62737244deb2d04a98830d7ffa8404Leandro Gracia Gil                mWebView.getContext().getApplicationInfo().targetSdkVersion >=
552edb98e3c667e37b00f338b51fb2e5d6bece4c447Ben Murdoch                Build.VERSION_CODES.JELLY_BEAN_MR2);
55346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
55446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
55546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
55646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void addJavascriptInterface(Object obj, String interfaceName) {
557ea844f60b1b559788566fe6e004b1eeca53a8039Jonathan Dixon        Class<? extends Annotation> requiredAnnotation = null;
5587db34d3dcaac936566f912e1b0b21f3f103029ffJonathan Dixon        if (mWebView.getContext().getApplicationInfo().targetSdkVersion >=
5597db34d3dcaac936566f912e1b0b21f3f103029ffJonathan Dixon                Build.VERSION_CODES.JELLY_BEAN_MR1) {
5607db34d3dcaac936566f912e1b0b21f3f103029ffJonathan Dixon           requiredAnnotation = JavascriptInterface.class;
5617db34d3dcaac936566f912e1b0b21f3f103029ffJonathan Dixon        }
5627cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        mAwContents.addPossiblyUnsafeJavascriptInterface(obj, interfaceName, requiredAnnotation);
56346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
56446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
56546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
56646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void removeJavascriptInterface(String interfaceName) {
5677cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        mAwContents.removeJavascriptInterface(interfaceName);
56846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
56946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
57046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
57146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public WebSettings getSettings() {
57246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        if (mWebSettings == null) {
573420c0da3a4e06e1ac5574091e7c9c286ef012369Mikhail Naganov            mWebSettings = new ContentSettingsAdapter(mAwContents.getSettings());
57446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        }
57546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return mWebSettings;
57646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
57746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
57846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
57946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setMapTrackballToArrowKeys(boolean setMap) {
58046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        // This is a deprecated API: intentional no-op.
58146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
58246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
58346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
58446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void flingScroll(int vx, int vy) {
5857cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        mAwContents.flingScroll(vx, vy);
58646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
58746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
58846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
58946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public View getZoomControls() {
590e78d6e40e4e78671e6621ba8cf49835568704899Jonathan Dixon        // This was deprecated in 2009 and hidden in JB MR1, so just provide the minimum needed
591e78d6e40e4e78671e6621ba8cf49835568704899Jonathan Dixon        // to stop very out-dated applications from crashing.
592e78d6e40e4e78671e6621ba8cf49835568704899Jonathan Dixon        Log.w(TAG, "WebView doesn't support getZoomControls");
593420c0da3a4e06e1ac5574091e7c9c286ef012369Mikhail Naganov        return mAwContents.getSettings().supportZoom() ? new View(mWebView.getContext()) : null;
59446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
59546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
59646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
59746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean canZoomIn() {
5987cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.canZoomIn();
59946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
60046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
60146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
60246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean canZoomOut() {
6037cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.canZoomOut();
60446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
60546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
60646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
60746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean zoomIn() {
6087cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.zoomIn();
60946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
61046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
61146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
61246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean zoomOut() {
6137cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.zoomOut();
61446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
61546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
616d2dcef4d9edfb7af7abff85b0867c3d6a363feb7Jonathan Dixon    @Override
61746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void dumpViewHierarchyWithProperties(BufferedWriter out, int level) {
61846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
61946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
62046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
621d2dcef4d9edfb7af7abff85b0867c3d6a363feb7Jonathan Dixon    @Override
62246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public View findHierarchyView(String className, int hashCode) {
62346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
62446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return null;
62546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
62646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
62746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // WebViewProvider glue methods ---------------------------------------------------------------
62846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
62946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
63046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public WebViewProvider.ViewDelegate getViewDelegate() {
63146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return this;
63246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
63346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
63446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
63546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public WebViewProvider.ScrollDelegate getScrollDelegate() {
63646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return this;
63746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
63846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
63946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
64046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // WebViewProvider.ViewDelegate implementation ------------------------------------------------
64146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
64246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
64346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean shouldDelayChildPressedState() {
64446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
64546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return false;
64646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
64746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
64846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
64946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
6507cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        mAwContents.onInitializeAccessibilityNodeInfo(info);
65146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
65246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
65346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
65446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
6557cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        mAwContents.onInitializeAccessibilityEvent(event);
65646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
65746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
65846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
65946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean performAccessibilityAction(int action, Bundle arguments) {
660b7b706b2ed5cbb77dd690f5405b626a429989714Ben Murdoch        if (mAwContents.supportsAccessibilityAction(action)) {
661b7b706b2ed5cbb77dd690f5405b626a429989714Ben Murdoch            return mAwContents.performAccessibilityAction(action, arguments);
662b7b706b2ed5cbb77dd690f5405b626a429989714Ben Murdoch        }
663b7b706b2ed5cbb77dd690f5405b626a429989714Ben Murdoch        return mWebViewPrivate.super_performAccessibilityAction(action, arguments);
66446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
66546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
66646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
66746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setOverScrollMode(int mode) {
66846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
66946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
67046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
67146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
67246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setScrollBarStyle(int style) {
67346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
67446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
67546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
67646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
67746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onDrawVerticalScrollBar(Canvas canvas, Drawable scrollBar,
67846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)                                        int l, int t, int r, int b) {
67946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
68046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
68146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
68246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
68346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onOverScrolled(int scrollX, int scrollY, boolean clampedX, boolean clampedY) {
68446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
68546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
68646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
68746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
68846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onWindowVisibilityChanged(int visibility) {
6891cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon        mAwContents.onWindowVisibilityChanged(visibility);
69046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
69146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
69246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
69346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onDraw(Canvas canvas) {
6947ab33360e331e04f515d532064670e210d174a7aTao Bai        mAwContents.onDraw(canvas);
69546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
69646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
69746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
69846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setLayoutParams(ViewGroup.LayoutParams layoutParams) {
69946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        // TODO: This is the minimum implementation for HTMLViewer
70046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        // bringup. Likely will need to go up to ContentViewCore for
70146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        // a complete implementation.
70246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mWebViewPrivate.super_setLayoutParams(layoutParams);
70346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
70446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
70546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
70646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean performLongClick() {
707decc147cebc8f73d355c024d92c60d3f727cab31Bo Liu        return mWebViewPrivate.super_performLongClick();
70846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
70946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
71046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
71146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onConfigurationChanged(Configuration newConfig) {
7121cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon        mAwContents.onConfigurationChanged(newConfig);
71346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
71446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
71546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
71646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
7177cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.onCreateInputConnection(outAttrs);
71846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
71946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
72046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
72146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent event) {
72246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
72346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return false;
72446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
72546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
72646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
72746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean onKeyDown(int keyCode, KeyEvent event) {
72846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
72946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return false;
73046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
73146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
73246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
73346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean onKeyUp(int keyCode, KeyEvent event) {
7347cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.onKeyUp(keyCode, event);
73546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
73646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
73746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
73846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onAttachedToWindow() {
7391cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon        mAwContents.onAttachedToWindow();
74046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
74146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
74246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
74346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onDetachedFromWindow() {
7441cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon        mAwContents.onDetachedFromWindow();
745a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon        if (mGLfunctor != null) {
746a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon            mGLfunctor.detach();
747a2b0d0b4d6d1ff22fbb1329e358e1cc0a112aab3Jonathan Dixon        }
74846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
74946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
75046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
75146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onVisibilityChanged(View changedView, int visibility) {
752c346a83062dfbf50ac2275813ccb2e36f9e778e9Martin Kosiba        // The AwContents will find out the container view visibility before the first draw so we
753c346a83062dfbf50ac2275813ccb2e36f9e778e9Martin Kosiba        // can safely ignore onVisibilityChanged callbacks that happen before init().
754c346a83062dfbf50ac2275813ccb2e36f9e778e9Martin Kosiba        if (mAwContents != null) {
755c346a83062dfbf50ac2275813ccb2e36f9e778e9Martin Kosiba            mAwContents.onVisibilityChanged(changedView, visibility);
756c346a83062dfbf50ac2275813ccb2e36f9e778e9Martin Kosiba        }
75746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
75846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
75946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
76046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onWindowFocusChanged(boolean hasWindowFocus) {
7611cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon        mAwContents.onWindowFocusChanged(hasWindowFocus);
76246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
76346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
76446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
76546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
7661cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon        mAwContents.onFocusChanged(focused, direction, previouslyFocusedRect);
76746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
76846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
76946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
77046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean setFrame(int left, int top, int right, int bottom) {
7711cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon        // TODO(joth): This is the minimum implementation for initial
7721cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon        // bringup. Likely will need to go up to AwContents for a complete
7731cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon        // implementation, e.g. setting the compositor visible region (to
7741cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon        // avoid painting tiles that are offscreen due to the view's position).
77546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return mWebViewPrivate.super_setFrame(left, top, right, bottom);
77646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
77746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
77846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
77946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onSizeChanged(int w, int h, int ow, int oh) {
7801cc4c3210fd2ea027bd6d883a15c3951476642bbJonathan Dixon        mAwContents.onSizeChanged(w, h, ow, oh);
78146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
78246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
78346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
78446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onScrollChanged(int l, int t, int oldl, int oldt) {
78546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
78646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
78746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
78846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean dispatchKeyEvent(KeyEvent event) {
7897cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.dispatchKeyEvent(event);
79046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
79146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
79246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
79346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean onTouchEvent(MotionEvent ev) {
794c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu        return mAwContents.onTouchEvent(ev);
79546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
79646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
79746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
79846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean onHoverEvent(MotionEvent event) {
799c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu        return mAwContents.onHoverEvent(event);
80046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
80146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
80246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
80346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean onGenericMotionEvent(MotionEvent event) {
804c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu        return mAwContents.onGenericMotionEvent(event);
80546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
80646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
80746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
80846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean onTrackballEvent(MotionEvent ev) {
80946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        // Trackball event not handled, which eventually gets converted to DPAD keyevents
81046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return false;
81146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
81246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
81346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
81446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean requestFocus(int direction, Rect previouslyFocusedRect) {
8154cee3bf50c125a52a49323aa999f4b619fa18c10Ben Murdoch        mAwContents.requestFocus();
81646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return mWebViewPrivate.super_requestFocus(direction, previouslyFocusedRect);
81746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
81846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
81946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
82046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
821d7bf6ab0cd8cc4005b112e4358eb797bb178a85fMarcin Kosiba        mAwContents.onMeasure(widthMeasureSpec, heightMeasureSpec);
82246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
82346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
82446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
82546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean requestChildRectangleOnScreen(View child, Rect rect, boolean immediate) {
82646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
82746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return false;
82846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
82946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
83046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
83146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setBackgroundColor(int color) {
83246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
83346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
83446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
83546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
83646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setLayerType(int layerType, Paint paint) {
83746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
83846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
83946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
8400b528e4924a7c14687181185bc66173ad18f00eaLeandro Gracia Gil    @Override
84146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void preDispatchDraw(Canvas canvas) {
8420b528e4924a7c14687181185bc66173ad18f00eaLeandro Gracia Gil        // TODO(leandrogracia): remove this method from WebViewProvider if we think
8430b528e4924a7c14687181185bc66173ad18f00eaLeandro Gracia Gil        // we won't need it again.
84446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
84546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
84646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // WebViewProvider.ScrollDelegate implementation ----------------------------------------------
84746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
84846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
84946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public int computeHorizontalScrollRange() {
8507cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.computeHorizontalScrollRange();
85146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
85246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
85346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
85446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public int computeHorizontalScrollOffset() {
8557cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.computeHorizontalScrollOffset();
85646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
85746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
85846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
85946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public int computeVerticalScrollRange() {
8607cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.computeVerticalScrollRange();
86146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
86246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
86346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
86446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public int computeVerticalScrollOffset() {
8657cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.computeVerticalScrollOffset();
86646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
86746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
86846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
86946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public int computeVerticalScrollExtent() {
8707cb3dd1c0aca371b628b80afa69c58638de30fa1Martin Kosiba        return mAwContents.computeVerticalScrollExtent();
87146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
87246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
87346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
87446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void computeScroll() {
87546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        // BUG=http://b/6029133
8764a0a38f783cb93f6a600da3ab296b72499239ffbJonathan Dixon        // Too much log spam: UnimplementedWebViewApi.invoke();
87746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
87846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
8794702a6de6031477029de5e6f5777c8b3e7846d35Marcin Kosiba    // AwContents.InternalAccessDelegate implementation --------------------------------------
8804702a6de6031477029de5e6f5777c8b3e7846d35Marcin Kosiba    private class InternalAccessAdapter implements AwContents.InternalAccessDelegate {
88146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        @Override
88246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        public boolean drawChild(Canvas arg0, View arg1, long arg2) {
88346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            UnimplementedWebViewApi.invoke();
88446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            return false;
88546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        }
88646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
88746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        @Override
88846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        public boolean super_onKeyUp(int arg0, KeyEvent arg1) {
88946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            UnimplementedWebViewApi.invoke();
89046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            return false;
89146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        }
89246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
89346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        @Override
89446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        public boolean super_dispatchKeyEventPreIme(KeyEvent arg0) {
89546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            UnimplementedWebViewApi.invoke();
89646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            return false;
89746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        }
89846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
89946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        @Override
90046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        public boolean super_dispatchKeyEvent(KeyEvent event) {
90146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            return mWebViewPrivate.super_dispatchKeyEvent(event);
90246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        }
90346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
90446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        @Override
90546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        public boolean super_onGenericMotionEvent(MotionEvent arg0) {
90646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            UnimplementedWebViewApi.invoke();
90746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            return false;
90846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        }
90946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
91046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        @Override
91146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        public void super_onConfigurationChanged(Configuration arg0) {
91246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            UnimplementedWebViewApi.invoke();
91346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        }
91446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
91546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        @Override
91646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        public void onScrollChanged(int l, int t, int oldl, int oldt) {
91746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            mWebViewPrivate.setScrollXRaw(l);
91846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            mWebViewPrivate.setScrollYRaw(t);
91946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            mWebViewPrivate.onScrollChanged(l, t, oldl, oldt);
92046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        }
92146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
92246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        @Override
92346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        public boolean awakenScrollBars() {
92446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            mWebViewPrivate.awakenScrollBars(0);
92546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            // TODO: modify the WebView.PrivateAccess to provide a return value.
92646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            return true;
92746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        }
92846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
92946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        @Override
93046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        public boolean super_awakenScrollBars(int arg0, boolean arg1) {
93146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            // TODO: need method on WebView.PrivateAccess?
93246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            UnimplementedWebViewApi.invoke();
93346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            return false;
93446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        }
9354702a6de6031477029de5e6f5777c8b3e7846d35Marcin Kosiba
936d7bf6ab0cd8cc4005b112e4358eb797bb178a85fMarcin Kosiba        @Override
9374702a6de6031477029de5e6f5777c8b3e7846d35Marcin Kosiba        public void setMeasuredDimension(int measuredWidth, int measuredHeight) {
9384702a6de6031477029de5e6f5777c8b3e7846d35Marcin Kosiba            mWebViewPrivate.setMeasuredDimension(measuredWidth, measuredHeight);
9394702a6de6031477029de5e6f5777c8b3e7846d35Marcin Kosiba        }
94051f7cf16cd02f14050bb723175a2a57570e8486dTao Bai
9417ab33360e331e04f515d532064670e210d174a7aTao Bai        @Override
94251f7cf16cd02f14050bb723175a2a57570e8486dTao Bai        public boolean requestDrawGL(Canvas canvas) {
9437ab33360e331e04f515d532064670e210d174a7aTao Bai            if (mGLfunctor == null) {
9447ab33360e331e04f515d532064670e210d174a7aTao Bai                mGLfunctor = new DrawGLFunctor(mAwContents.getAwDrawGLViewContext());
9457ab33360e331e04f515d532064670e210d174a7aTao Bai            }
94651f7cf16cd02f14050bb723175a2a57570e8486dTao Bai            return mGLfunctor.requestDrawGL((HardwareCanvas)canvas, mWebView.getViewRootImpl());
94751f7cf16cd02f14050bb723175a2a57570e8486dTao Bai        }
94846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
94946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)}
950