WebViewChromium.java revision c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5c
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;
3046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.KeyEvent;
3146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.MotionEvent;
3246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.View;
3346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.ViewGroup;
3446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.accessibility.AccessibilityEvent;
3546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.accessibility.AccessibilityNodeInfo;
3646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.inputmethod.EditorInfo;
3746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.view.inputmethod.InputConnection;
3846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.DownloadListener;
3946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.ValueCallback;
4046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.WebBackForwardList;
4146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.WebChromeClient;
4246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.WebSettings;
4346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.WebView;
4446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.WebViewClient;
4546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.webkit.WebViewProvider;
4646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
4746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import org.chromium.android_webview.AwContents;
4846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import org.chromium.android_webview.AwNativeWindow;
4946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import org.chromium.content.browser.ContentViewCore;
5046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import org.chromium.content.browser.ContentViewDownloadDelegate;
5146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import org.chromium.content.browser.LoadUrlParams;
5246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import org.chromium.net.NetworkChangeNotifier;
5346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
5446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import java.io.BufferedWriter;
5546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import java.io.File;
5646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import java.util.Map;
5746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
5846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)/**
5946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * This class is the delegate to which WebViewProxy forwards all API calls.
6046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) *
6146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * Most of the actual functionality is implemented by ContentViewCore. This
6246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * class also contains WebView-specific APIs that require the creation of other
6346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * adapters (otherwise org.chromium.content would depend on the webview.chromium
6446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * package) some simple APIs (like is Paused) and a small set of no-op
6546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * deprecated APIs.
6646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) */
6746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)class WebViewChromium implements WebViewProvider,
6846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)          WebViewProvider.ScrollDelegate, WebViewProvider.ViewDelegate {
6946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // The WebView that this WebViewChromium is the provider for.
7046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    WebView mWebView;
7146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // Lets us access protected View-derived methods on the WebView instance we're backing.
7246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    WebView.PrivateAccess mWebViewPrivate;
7346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // The client adapter class.
7446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    private WebViewContentsClientAdapter mContentsClientAdapter;
7546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
7646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // Variables for functionality provided by this adapter ---------------------------------------
7746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // Is the WebView paused?
7846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    private boolean mIsPaused;
7946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // WebSettings adapter, lazily initialized in the getter
8046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    private WebSettings mWebSettings;
813949435b480cb71106f65b237025da359cf8a8caBen Murdoch    // The WebView wrapper for ContentViewCore and required browser compontents.
8246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    private AwContents mAwContents;
8346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
84c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu    private final WebView.HitTestResult mHitTestResult;
85c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu
8646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public WebViewChromium(WebView webView, WebView.PrivateAccess webViewPrivate) {
8746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mWebView = webView;
8846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mWebViewPrivate = webViewPrivate;
89c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu        mHitTestResult = new WebView.HitTestResult();
9046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
9146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
9246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // WebViewProvider methods --------------------------------------------------------------------
9346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
9446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
9546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void init(Map<String, Object> javaScriptInterfaces, boolean privateBrowsing) {
9646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        // TODO: BUG=6790250 javaScriptInterfaces were only ever used by DumpRenderTree and should
9746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        // probably be implemented as a hidden hook in WebViewClassic.
9846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
9946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        final boolean isAccessFromFileURLsGrantedByDefault =
10046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)                mWebView.getContext().getApplicationInfo().targetSdkVersion <
10146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)                Build.VERSION_CODES.JELLY_BEAN;
10246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mContentsClientAdapter = new WebViewContentsClientAdapter(mWebView);
1033949435b480cb71106f65b237025da359cf8a8caBen Murdoch        mAwContents = new AwContents(mWebView, new InternalAccessAdapter(), mContentsClientAdapter,
1043949435b480cb71106f65b237025da359cf8a8caBen Murdoch                new AwNativeWindow(mWebView.getContext()), privateBrowsing,
10546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)                isAccessFromFileURLsGrantedByDefault);
10646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
1073949435b480cb71106f65b237025da359cf8a8caBen Murdoch        // At this point we now have the native AwContents and WebContents created and code
10846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        // that requires them can now be called.
10946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
11046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
11146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
11246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setHorizontalScrollbarOverlay(boolean overlay) {
11346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
11446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
11546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
11646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
11746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setVerticalScrollbarOverlay(boolean overlay) {
11846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
11946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
12046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
12146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
12246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean overlayHorizontalScrollbar() {
12346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
12446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return false;
12546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
12646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
12746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
12846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean overlayVerticalScrollbar() {
12946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
13046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return false;
13146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
13246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
13346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
13446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public int getVisibleTitleHeight() {
13546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        // This is deprecated in WebView and should always return 0.
13646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return 0;
13746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
13846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
13946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
14046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public SslCertificate getCertificate() {
14146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return mAwContents.getCertificate();
14246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
14346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
14446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
14546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setCertificate(SslCertificate certificate) {
14646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
14746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
14846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
14946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
15046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void savePassword(String host, String username, String password) {
15146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
15246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
15346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
15446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
15546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setHttpAuthUsernamePassword(String host, String realm, String username,
15646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)                                            String password) {
15746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mAwContents.setHttpAuthUsernamePassword(host, realm, username, password);
15846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
15946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
16046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
16146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public String[] getHttpAuthUsernamePassword(String host, String realm) {
16246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return mAwContents.getHttpAuthUsernamePassword(host, realm);
16346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
16446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
16546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
16646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void destroy() {
1673949435b480cb71106f65b237025da359cf8a8caBen Murdoch        mAwContents.destroy();
16846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
16946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
17046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
17146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setNetworkAvailable(boolean networkUp) {
17246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        NetworkChangeNotifier.forceConnectivityState(networkUp);
17346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
17446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
17546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
17646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public WebBackForwardList saveState(Bundle outState) {
17746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
17846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return null;
17946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
18046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
18146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
18246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean savePicture(Bundle b, File dest) {
18346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
18446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return false;
18546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
18646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
18746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
18846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean restorePicture(Bundle b, File src) {
18946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
19046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return false;
19146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
19246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
19346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
19446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public WebBackForwardList restoreState(Bundle inState) {
19546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
19646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return null;
19746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
19846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
19946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
20046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void loadUrl(String url, Map<String, String> additionalHttpHeaders) {
20146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        // TODO: We may actually want to do some sanity checks here (like filter about://chrome).
20246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        LoadUrlParams params = new LoadUrlParams(url);
20346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        if (additionalHttpHeaders != null) params.setExtraHeaders(additionalHttpHeaders);
20446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mAwContents.loadUrl(params);
20546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
20646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
20746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
20846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void loadUrl(String url) {
20946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        loadUrl(url, null);
21046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
21146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
21246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
21346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void postUrl(String url, byte[] postData) {
21446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mAwContents.loadUrl(LoadUrlParams.createLoadHttpPostParams(
21546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)                url, postData));
21646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
21746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
21846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    private static boolean isBase64Encoded(String encoding) {
21946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return "base64".equals(encoding);
22046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
22146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
22246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
22346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void loadData(String data, String mimeType, String encoding) {
22446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mAwContents.loadUrl(LoadUrlParams.createLoadDataParams(
22546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)                  data, mimeType, isBase64Encoded(encoding)));
22646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
22746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
22846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
22946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void loadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding,
23046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)                                    String historyUrl) {
23146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        if (baseUrl == null || baseUrl.length() == 0) baseUrl = "about:blank";
23246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mAwContents.loadUrl(LoadUrlParams.createLoadDataParamsWithBaseUrl(
23346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)                data, mimeType, isBase64Encoded(encoding), baseUrl, historyUrl));
23446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
23546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
23646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
23746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void saveWebArchive(String filename) {
23846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        saveWebArchive(filename, false, null);
23946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
24046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
24146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
24246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void saveWebArchive(String basename, boolean autoname, ValueCallback<String> callback) {
24346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mAwContents.saveWebArchive(basename, autoname, callback);
24446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
24546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
24646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
24746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void stopLoading() {
2483949435b480cb71106f65b237025da359cf8a8caBen Murdoch        mAwContents.getContentViewCore().stopLoading();
24946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
25046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
25146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
25246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void reload() {
2533949435b480cb71106f65b237025da359cf8a8caBen Murdoch        mAwContents.getContentViewCore().reload();
25446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
25546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
25646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
25746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean canGoBack() {
2583949435b480cb71106f65b237025da359cf8a8caBen Murdoch        return mAwContents.getContentViewCore().canGoBack();
25946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
26046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
26146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
26246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void goBack() {
2633949435b480cb71106f65b237025da359cf8a8caBen Murdoch        mAwContents.getContentViewCore().goBack();
26446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
26546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
26646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
26746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean canGoForward() {
2683949435b480cb71106f65b237025da359cf8a8caBen Murdoch        return mAwContents.getContentViewCore().canGoForward();
26946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
27046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
27146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
27246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void goForward() {
2733949435b480cb71106f65b237025da359cf8a8caBen Murdoch        mAwContents.getContentViewCore().goForward();
27446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
27546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
27646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
27746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean canGoBackOrForward(int steps) {
2783949435b480cb71106f65b237025da359cf8a8caBen Murdoch        return mAwContents.getContentViewCore().canGoToOffset(steps);
27946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
28046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
28146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
28246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void goBackOrForward(int steps) {
2833949435b480cb71106f65b237025da359cf8a8caBen Murdoch        mAwContents.getContentViewCore().goToOffset(steps);
28446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
28546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
28646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
28746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean isPrivateBrowsingEnabled() {
28846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
28946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return false;
29046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
29146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
29246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
29346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean pageUp(boolean top) {
2943949435b480cb71106f65b237025da359cf8a8caBen Murdoch        return mAwContents.getContentViewCore().pageUp(top);
29546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
29646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
29746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
29846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean pageDown(boolean bottom) {
2993949435b480cb71106f65b237025da359cf8a8caBen Murdoch        return mAwContents.getContentViewCore().pageDown(bottom);
30046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
30146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
30246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
30346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void clearView() {
30446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
30546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
30646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
30746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
30846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public Picture capturePicture() {
30946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
31046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return null;
31146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
31246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
31346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
31446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public float getScale() {
3153949435b480cb71106f65b237025da359cf8a8caBen Murdoch        return mAwContents.getContentViewCore().getScale();
31646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
31746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
31846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
31946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setInitialScale(int scaleInPercent) {
32046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
32146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
32246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
32346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
32446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void invokeZoomPicker() {
3253949435b480cb71106f65b237025da359cf8a8caBen Murdoch        mAwContents.getContentViewCore().invokeZoomPicker();
32646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
32746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
32846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
32946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public WebView.HitTestResult getHitTestResult() {
330c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu        AwContents.HitTestData data = mAwContents.getLastHitTestResult();
331c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu        mHitTestResult.setType(data.hitTestResultType);
332c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu        mHitTestResult.setExtra(data.hitTestResultExtraData);
333c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu        return mHitTestResult;
33446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
33546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
33646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
33746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void requestFocusNodeHref(Message hrefMsg) {
338c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu        mAwContents.requestFocusNodeHref(hrefMsg);
33946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
34046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
34146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
34246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void requestImageRef(Message msg) {
343c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu        mAwContents.requestImageRef(msg);
34446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
34546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
34646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
34746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public String getUrl() {
3483949435b480cb71106f65b237025da359cf8a8caBen Murdoch        String url =  mAwContents.getContentViewCore().getUrl();
34946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        if (url == null || url.trim().isEmpty()) return null;
35046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return url;
35146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
35246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
35346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
35446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public String getOriginalUrl() {
35546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        String url =  mAwContents.getOriginalUrl();
35646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        if (url == null || url.trim().isEmpty()) return null;
35746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return url;
35846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
35946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
36046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
36146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public String getTitle() {
3623949435b480cb71106f65b237025da359cf8a8caBen Murdoch        return mAwContents.getContentViewCore().getTitle();
36346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
36446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
36546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
36646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public Bitmap getFavicon() {
36746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
36846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return null;
36946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
37046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
37146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
37246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public String getTouchIconUrl() {
37346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
37446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return null;
37546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
37646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
37746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
37846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public int getProgress() {
37946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return mAwContents.getMostRecentProgress();
38046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
38146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
38246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
38346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public int getContentHeight() {
3843949435b480cb71106f65b237025da359cf8a8caBen Murdoch        return mAwContents.getContentViewCore().getContentHeight();
38546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
38646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
38746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
38846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public int getContentWidth() {
3893949435b480cb71106f65b237025da359cf8a8caBen Murdoch        return mAwContents.getContentViewCore().getContentWidth();
39046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
39146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
39246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
39346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void pauseTimers() {
3943949435b480cb71106f65b237025da359cf8a8caBen Murdoch        mAwContents.getContentViewCore().onActivityPause();
39546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
39646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
39746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
39846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void resumeTimers() {
3993949435b480cb71106f65b237025da359cf8a8caBen Murdoch        mAwContents.getContentViewCore().onActivityResume();
40046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
40146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
40246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
40346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onPause() {
40446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mIsPaused = true;
4053949435b480cb71106f65b237025da359cf8a8caBen Murdoch        mAwContents.getContentViewCore().onHide();
40646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
40746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
40846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
40946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onResume() {
4103949435b480cb71106f65b237025da359cf8a8caBen Murdoch        mAwContents.getContentViewCore().onShow();
41146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mIsPaused = false;
41246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
41346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
41446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
41546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean isPaused() {
41646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return mIsPaused;
41746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
41846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
41946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
42046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void freeMemory() {
42146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
42246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
42346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
42446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
42546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void clearCache(boolean includeDiskFiles) {
42646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mAwContents.clearCache(includeDiskFiles);
42746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
42846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
42946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
43046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void clearFormData() {
43146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
43246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
43346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
43446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
43546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void clearHistory() {
4363949435b480cb71106f65b237025da359cf8a8caBen Murdoch        mAwContents.getContentViewCore().clearHistory();
43746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
43846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
43946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
44046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void clearSslPreferences() {
4413949435b480cb71106f65b237025da359cf8a8caBen Murdoch        mAwContents.getContentViewCore().clearSslPreferences();
44246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
44346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
44446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
44546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public WebBackForwardList copyBackForwardList() {
44646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
44746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return null;
44846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
44946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
45046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
45146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setFindListener(WebView.FindListener listener) {
45246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mContentsClientAdapter.setFindListener(listener);
45346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
45446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
45546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
45646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void findNext(boolean forwards) {
45746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mAwContents.findNext(forwards);
45846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
45946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
46046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
46146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public int findAll(String searchString) {
46246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return mAwContents.findAllSync(searchString);
46346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
46446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
46546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
46646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void findAllAsync(String searchString) {
46746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mAwContents.findAllAsync(searchString);
46846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
46946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
47046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
47146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean showFindDialog(String text, boolean showIme) {
47246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
47346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return false;
47446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
47546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
47646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
47746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void clearMatches() {
47846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mAwContents.clearMatches();
47946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
48046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
48146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
48246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void documentHasImages(Message response) {
48346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mAwContents.documentHasImages(response);
48446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
48546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
48646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
48746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setWebViewClient(WebViewClient client) {
48846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mContentsClientAdapter.setWebViewClient(client);
48946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
49046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
49146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    static class DownloadListenerAdapter implements ContentViewDownloadDelegate {
49246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        private DownloadListener mListener;
49346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
49446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        public DownloadListenerAdapter(DownloadListener listener) {
49546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            mListener = listener;
49646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        }
49746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
49846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        @Override
49946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        public void requestHttpGetDownload(String url, String userAgent, String contentDisposition,
50046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)                String mimetype, String cookie, String referer, long contentLength) {
50146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            mListener.onDownloadStart(url, userAgent, contentDisposition, mimetype, contentLength);
50246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        }
50346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
50446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        @Override
50546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        public void onHttpPostDownloadStarted() {}
50646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
50746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        @Override
50846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        public void onHttpPostDownloadCompleted(String url, String mimetype, String path,
50946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)                long contentLength, boolean successful) {}
51046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
51146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
51246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
51346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setDownloadListener(DownloadListener listener) {
5143949435b480cb71106f65b237025da359cf8a8caBen Murdoch        mAwContents.getContentViewCore().setDownloadDelegate(new DownloadListenerAdapter(listener));
51546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
51646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
51746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
51846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setWebChromeClient(WebChromeClient client) {
51946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mContentsClientAdapter.setWebChromeClient(client);
52046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
52146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
52246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
52346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setPictureListener(WebView.PictureListener listener) {
52446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mContentsClientAdapter.setPictureListener(listener);
52546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
52646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
52746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
52846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void addJavascriptInterface(Object obj, String interfaceName) {
52946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        // We do not require the @JavascriptInterface annotation on injected methods
53046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        // for WebView API compatibility.
5313949435b480cb71106f65b237025da359cf8a8caBen Murdoch        mAwContents.getContentViewCore().addJavascriptInterface(obj, interfaceName, false);
53246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
53346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
53446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
53546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void removeJavascriptInterface(String interfaceName) {
5363949435b480cb71106f65b237025da359cf8a8caBen Murdoch        mAwContents.getContentViewCore().removeJavascriptInterface(interfaceName);
53746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
53846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
53946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
54046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public WebSettings getSettings() {
54146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        if (mWebSettings == null) {
54246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            mWebSettings = new ContentSettingsAdapter(
5433949435b480cb71106f65b237025da359cf8a8caBen Murdoch                    mAwContents.getContentViewCore().getContentSettings(),
54446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)                    mAwContents.getSettings());
54546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        }
54646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return mWebSettings;
54746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
54846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
54946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
55046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setMapTrackballToArrowKeys(boolean setMap) {
55146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        // This is a deprecated API: intentional no-op.
55246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
55346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
55446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
55546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void flingScroll(int vx, int vy) {
5563949435b480cb71106f65b237025da359cf8a8caBen Murdoch        mAwContents.getContentViewCore().flingScroll(vx, vy);
55746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
55846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
55946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
56046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public View getZoomControls() {
56146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
56246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return null;
56346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
56446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
56546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
56646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean canZoomIn() {
5673949435b480cb71106f65b237025da359cf8a8caBen Murdoch        return mAwContents.getContentViewCore().canZoomIn();
56846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
56946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
57046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
57146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean canZoomOut() {
5723949435b480cb71106f65b237025da359cf8a8caBen Murdoch        return mAwContents.getContentViewCore().canZoomOut();
57346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
57446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
57546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
57646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean zoomIn() {
5773949435b480cb71106f65b237025da359cf8a8caBen Murdoch        return mAwContents.getContentViewCore().zoomIn();
57846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
57946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
58046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
58146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean zoomOut() {
5823949435b480cb71106f65b237025da359cf8a8caBen Murdoch        return mAwContents.getContentViewCore().zoomOut();
58346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
58446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
58546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // TODO: This should  @Override the base class method, but the method
58646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // exists only in the Android-master source. So to keep compiling on both
58746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // Android-master and Android-jb-dev, omit the annotation. When we no longer
58846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // need to build with jb-dev, add the annotation.
58946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void dumpViewHierarchyWithProperties(BufferedWriter out, int level) {
59046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
59146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
59246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
59346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // TODO: This should  @Override the base class method, but the method
59446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // exists only in the Android-master source. So to keep compiling on both
59546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // Android-master and Android-jb-dev, omit the annotation. When we no longer
59646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // need to build with jb-dev, add the annotation.
59746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public View findHierarchyView(String className, int hashCode) {
59846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
59946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return null;
60046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
60146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
60246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // WebViewProvider glue methods ---------------------------------------------------------------
60346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
60446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
60546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public WebViewProvider.ViewDelegate getViewDelegate() {
60646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return this;
60746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
60846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
60946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
61046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public WebViewProvider.ScrollDelegate getScrollDelegate() {
61146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return this;
61246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
61346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
61446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
61546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // WebViewProvider JB migration methods -------------------------------------------------------
61646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
61746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // TODO: These methods are removed from the base class in
61846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // Android-master, but we keep them here to ensure that the glue
61946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // layer builds in an Android-jb-dev tree. Once we no longer
62046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // need to compile the glue against jb-dev, remove this method.
62146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
62246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void debugDump() {
62346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        // This is deprecated and now does nothing.
62446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
62546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
62646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void emulateShiftHeld() {
62746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        // This is deprecated and now does nothing.
62846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
62946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
63046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // WebViewProvider.ViewDelegate implementation ------------------------------------------------
63146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
63246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
63346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean shouldDelayChildPressedState() {
63446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
63546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return false;
63646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
63746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
63846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
63946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
6403949435b480cb71106f65b237025da359cf8a8caBen Murdoch        mAwContents.getContentViewCore().onInitializeAccessibilityNodeInfo(info);
64146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
64246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
64346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
64446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
6453949435b480cb71106f65b237025da359cf8a8caBen Murdoch        mAwContents.getContentViewCore().onInitializeAccessibilityEvent(event);
64646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
64746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
64846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // TODO: Update WebView to mimic ContentView implementation for the
64946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // real View#performAccessibilityAction(int, Bundle).  This method has different behavior.
65046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // See ContentViewCore#performAccessibilityAction(int, Bundle) for more details.
65146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
65246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean performAccessibilityAction(int action, Bundle arguments) {
6533949435b480cb71106f65b237025da359cf8a8caBen Murdoch        return mAwContents.getContentViewCore().performAccessibilityAction(action, arguments);
65446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
65546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
65646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
65746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setOverScrollMode(int mode) {
65846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
65946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
66046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
66146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
66246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setScrollBarStyle(int style) {
66346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
66446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
66546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
66646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
66746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onDrawVerticalScrollBar(Canvas canvas, Drawable scrollBar,
66846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)                                        int l, int t, int r, int b) {
66946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
67046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
67146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
67246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
67346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onOverScrolled(int scrollX, int scrollY, boolean clampedX, boolean clampedY) {
67446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
67546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
67646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
67746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
67846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onWindowVisibilityChanged(int visibility) {
67946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
68046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
68146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
68246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
68346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onDraw(Canvas canvas) {
68446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
68546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
68646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
68746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
68846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setLayoutParams(ViewGroup.LayoutParams layoutParams) {
68946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        // TODO: This is the minimum implementation for HTMLViewer
69046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        // bringup. Likely will need to go up to ContentViewCore for
69146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        // a complete implementation.
69246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        mWebViewPrivate.super_setLayoutParams(layoutParams);
69346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
69446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
69546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
69646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean performLongClick() {
69746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
69846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return false;
69946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
70046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
70146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
70246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onConfigurationChanged(Configuration newConfig) {
7033949435b480cb71106f65b237025da359cf8a8caBen Murdoch        mAwContents.getContentViewCore().onConfigurationChanged(newConfig);
70446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
70546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
70646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
70746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
7083949435b480cb71106f65b237025da359cf8a8caBen Murdoch        return mAwContents.getContentViewCore().onCreateInputConnection(outAttrs);
70946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
71046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
71146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
71246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent event) {
71346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
71446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return false;
71546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
71646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
71746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
71846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean onKeyDown(int keyCode, KeyEvent event) {
71946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
72046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return false;
72146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
72246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
72346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
72446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean onKeyUp(int keyCode, KeyEvent event) {
7253949435b480cb71106f65b237025da359cf8a8caBen Murdoch        return mAwContents.getContentViewCore().onKeyUp(keyCode, event);
72646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
72746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
72846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
72946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onAttachedToWindow() {
7303949435b480cb71106f65b237025da359cf8a8caBen Murdoch        mAwContents.getContentViewCore().onAttachedToWindow();
73146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
73246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
73346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
73446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onDetachedFromWindow() {
7353949435b480cb71106f65b237025da359cf8a8caBen Murdoch        mAwContents.getContentViewCore().onDetachedFromWindow();
73646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
73746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
73846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
73946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onVisibilityChanged(View changedView, int visibility) {
74046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
74146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
74246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
74346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
74446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onWindowFocusChanged(boolean hasWindowFocus) {
74546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
74646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
74746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
74846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
74946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
7503949435b480cb71106f65b237025da359cf8a8caBen Murdoch        mAwContents.getContentViewCore().onFocusChanged(focused, direction, previouslyFocusedRect);
75146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
75246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
75346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
75446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean setFrame(int left, int top, int right, int bottom) {
75546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        // TODO(benm): This is the minimum implementation for HTMLViewer
75646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        // bringup. Likely will need to go up to ContentViewCore for
75746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        // a complete implementation.
75846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return mWebViewPrivate.super_setFrame(left, top, right, bottom);
75946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
76046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
76146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
76246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onSizeChanged(int w, int h, int ow, int oh) {
7633949435b480cb71106f65b237025da359cf8a8caBen Murdoch        mAwContents.getContentViewCore().onSizeChanged(w, h, ow, oh);
76446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
76546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
76646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
76746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onScrollChanged(int l, int t, int oldl, int oldt) {
76846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
76946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
77046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
77146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean dispatchKeyEvent(KeyEvent event) {
7723949435b480cb71106f65b237025da359cf8a8caBen Murdoch        return mAwContents.getContentViewCore().dispatchKeyEvent(event);
77346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
77446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
77546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
77646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean onTouchEvent(MotionEvent ev) {
777c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu        return mAwContents.onTouchEvent(ev);
77846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
77946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
78046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
78146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean onHoverEvent(MotionEvent event) {
782c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu        return mAwContents.onHoverEvent(event);
78346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
78446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
78546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
78646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean onGenericMotionEvent(MotionEvent event) {
787c3fbc0fea57ba0dd4cf9eb8cc4d12f1b0edbcc5cBo Liu        return mAwContents.onGenericMotionEvent(event);
78846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
78946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
79046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
79146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean onTrackballEvent(MotionEvent ev) {
79246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        // Trackball event not handled, which eventually gets converted to DPAD keyevents
79346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return false;
79446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
79546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
79646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
79746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean requestFocus(int direction, Rect previouslyFocusedRect) {
79846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return mWebViewPrivate.super_requestFocus(direction, previouslyFocusedRect);
79946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
80046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
80146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
80246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
80346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
80446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
80546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
80646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
80746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public boolean requestChildRectangleOnScreen(View child, Rect rect, boolean immediate) {
80846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
80946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        return false;
81046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
81146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
81246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
81346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setBackgroundColor(int color) {
81446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
81546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
81646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
81746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
81846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void setLayerType(int layerType, Paint paint) {
81946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
82046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
82146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
82246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // No @Override for now to keep bots happy.
82346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void preDispatchDraw(Canvas canvas) {
82446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        // ContentViewCore handles drawing the scroll internally, therefore
82546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        // we need to compensate for the canvas transform already applied
82646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        // by the framework due to changes to the WebView's scrollX/Y.
82746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        canvas.translate(mWebView.getScrollX(), mWebView.getScrollY());
82846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
82946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
83046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // WebViewProvider.ScrollDelegate implementation ----------------------------------------------
83146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
83246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
83346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public int computeHorizontalScrollRange() {
8343949435b480cb71106f65b237025da359cf8a8caBen Murdoch        return mAwContents.getContentViewCore().computeHorizontalScrollRange();
83546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
83646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
83746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
83846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public int computeHorizontalScrollOffset() {
8393949435b480cb71106f65b237025da359cf8a8caBen Murdoch        return mAwContents.getContentViewCore().computeHorizontalScrollOffset();
84046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
84146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
84246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
84346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public int computeVerticalScrollRange() {
8443949435b480cb71106f65b237025da359cf8a8caBen Murdoch        return mAwContents.getContentViewCore().computeVerticalScrollRange();
84546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
84646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
84746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
84846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public int computeVerticalScrollOffset() {
8493949435b480cb71106f65b237025da359cf8a8caBen Murdoch        return mAwContents.getContentViewCore().computeVerticalScrollOffset();
85046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
85146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
85246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
85346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public int computeVerticalScrollExtent() {
8543949435b480cb71106f65b237025da359cf8a8caBen Murdoch        return mAwContents.getContentViewCore().computeVerticalScrollExtent();
85546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
85646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
85746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    @Override
85846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public void computeScroll() {
85946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        // BUG=http://b/6029133
86046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        UnimplementedWebViewApi.invoke();
86146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
86246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
86346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // ContentViewCore.InternalAccessDelegate implementation --------------------------------------
86446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    private class InternalAccessAdapter implements ContentViewCore.InternalAccessDelegate {
86546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
86646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        @Override
86746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        public boolean drawChild(Canvas arg0, View arg1, long arg2) {
86846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            UnimplementedWebViewApi.invoke();
86946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            return false;
87046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        }
87146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
87246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        @Override
87346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        public boolean super_onKeyUp(int arg0, KeyEvent arg1) {
87446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            UnimplementedWebViewApi.invoke();
87546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            return false;
87646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        }
87746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
87846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        @Override
87946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        public boolean super_dispatchKeyEventPreIme(KeyEvent arg0) {
88046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            UnimplementedWebViewApi.invoke();
88146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            return false;
88246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        }
88346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
88446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        @Override
88546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        public boolean super_dispatchKeyEvent(KeyEvent event) {
88646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            return mWebViewPrivate.super_dispatchKeyEvent(event);
88746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        }
88846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
88946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        @Override
89046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        public boolean super_onGenericMotionEvent(MotionEvent arg0) {
89146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            UnimplementedWebViewApi.invoke();
89246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            return false;
89346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        }
89446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
89546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        @Override
89646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        public void super_onConfigurationChanged(Configuration arg0) {
89746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            UnimplementedWebViewApi.invoke();
89846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        }
89946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
90046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        @Override
90146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        public void onScrollChanged(int l, int t, int oldl, int oldt) {
90246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            mWebViewPrivate.setScrollXRaw(l);
90346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            mWebViewPrivate.setScrollYRaw(t);
90446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            mWebViewPrivate.onScrollChanged(l, t, oldl, oldt);
90546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        }
90646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
90746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        @Override
90846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        public boolean awakenScrollBars() {
90946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            mWebViewPrivate.awakenScrollBars(0);
91046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            // TODO: modify the WebView.PrivateAccess to provide a return value.
91146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            return true;
91246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        }
91346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
91446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        @Override
91546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        public boolean super_awakenScrollBars(int arg0, boolean arg1) {
91646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            // TODO: need method on WebView.PrivateAccess?
91746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            UnimplementedWebViewApi.invoke();
91846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            return false;
91946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        }
92046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
92146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        // TODO: Remove this method. It is not planned to get upstreamed.
92246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        // @Override
92346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        public void onSurfaceTextureUpdated() {
92446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        }
92546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
92646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)}
927