AwContentsClient.java revision 010d83a9304c5a91596085d917d248abff47903a
1a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// Copyright 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)package org.chromium.android_webview;
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)import android.content.pm.ActivityInfo;
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import android.graphics.Bitmap;
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import android.graphics.Picture;
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import android.net.http.SslError;
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.os.Looper;
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.os.Message;
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.view.KeyEvent;
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import android.view.View;
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.webkit.ConsoleMessage;
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import android.webkit.GeolocationPermissions;
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import android.webkit.ValueCallback;
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import android.webkit.WebChromeClient;
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
20010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)import org.chromium.android_webview.permission.AwPermissionRequest;
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import org.chromium.content.browser.ContentViewCore;
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import org.chromium.content.browser.WebContentsObserverAndroid;
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import org.chromium.net.NetError;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
250529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochimport java.security.Principal;
260529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Base-class that an AwContents embedder derives from to receive callbacks.
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * This extends ContentViewClient, as in many cases we want to pass-thru ContentViewCore
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * callbacks right to our embedder, and this setup facilities that.
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * For any other callbacks we need to make transformations of (e.g. adapt parameters
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * or perform filtering) we can provide final overrides for methods here, and then introduce
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * new abstract methods that the our own client must implement.
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * i.e.: all methods in this class should either be final, or abstract.
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)public abstract class AwContentsClient {
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    private final AwContentsClientCallbackHelper mCallbackHelper;
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    private AwWebContentsObserver mWebContentsObserver;
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
42a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    // Last background color reported from the renderer. Holds the sentinal value INVALID_COLOR
43a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    // if not valid.
44a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    private int mCachedRendererBackgroundColor = INVALID_COLOR;
45a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
46a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    private static final int INVALID_COLOR = 0;
47a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    public AwContentsClient() {
491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)        this(Looper.myLooper());
501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    }
511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    // Alllow injection of the callback thread, for testing.
531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    public AwContentsClient(Looper looper) {
541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)        mCallbackHelper = new AwContentsClientCallbackHelper(looper, this);
551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    }
561e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    class AwWebContentsObserver extends WebContentsObserverAndroid {
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        public AwWebContentsObserver(ContentViewCore contentViewCore) {
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            super(contentViewCore);
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        @Override
63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        public void didFinishLoad(long frameId, String validatedUrl, boolean isMainFrame) {
645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            if (isMainFrame) {
65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                AwContentsClient.this.onPageFinished(validatedUrl);
665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            }
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        @Override
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        public void didFailLoad(boolean isProvisionalLoad,
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                boolean isMainFrame, int errorCode, String description, String failingUrl) {
725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            if (isMainFrame) {
735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                if (errorCode != NetError.ERR_ABORTED) {
745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                    // This error code is generated for the following reasons:
755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                    // - WebView.stopLoading is called,
765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                    // - the navigation is intercepted by the embedder via shouldOverrideNavigation.
775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                    //
785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                    // The Android WebView does not notify the embedder of these situations using
795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                    // this error code with the WebViewClient.onReceivedError callback.
805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                    AwContentsClient.this.onReceivedError(
815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                            ErrorCodeConversionHelper.convertErrorCode(errorCode), description,
825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                    failingUrl);
835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                }
845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                // Need to call onPageFinished after onReceivedError (if there is an error) for
855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                // backwards compatibility with the classic webview.
865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                AwContentsClient.this.onPageFinished(failingUrl);
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            }
885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        }
895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        @Override
915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        public void didNavigateMainFrame(String url, String baseUrl,
925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                boolean isNavigationToDifferentPage, boolean isNavigationInPage) {
935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            // This is here to emulate the Classic WebView firing onPageFinished for main frame
945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            // navigations where only the hash fragment changes.
955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            if (isNavigationInPage) {
965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                AwContentsClient.this.onPageFinished(url);
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            }
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        @Override
1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        public void didNavigateAnyFrame(String url, String baseUrl, boolean isReload) {
1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            AwContentsClient.this.doUpdateVisitedHistory(url, isReload);
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        }
1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    final void installWebContentsObserver(ContentViewCore contentViewCore) {
1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        if (mWebContentsObserver != null) {
1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            mWebContentsObserver.detachFromWebContents();
1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        }
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        mWebContentsObserver = new AwWebContentsObserver(contentViewCore);
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    final AwContentsClientCallbackHelper getCallbackHelper() {
1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        return mCallbackHelper;
1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
118a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    final int getCachedRendererBackgroundColor() {
119a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch        assert isCachedRendererBackgroundColorValid();
120a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch        return mCachedRendererBackgroundColor;
121a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    }
122a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
123a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    final boolean isCachedRendererBackgroundColorValid() {
124a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch        return mCachedRendererBackgroundColor != INVALID_COLOR;
125a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    }
126a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
127f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    final void onBackgroundColorChanged(int color) {
128f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        // Avoid storing the sentinal INVALID_COLOR (note that both 0 and 1 are both
129f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        // fully transparent so this transpose makes no visible difference).
130f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        mCachedRendererBackgroundColor = color == INVALID_COLOR ? 1 : color;
131f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    }
132f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    //--------------------------------------------------------------------------------------------
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    //             WebView specific methods that map directly to WebViewClient / WebChromeClient
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    //--------------------------------------------------------------------------------------------
1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    /**
1385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)     * Parameters for the {@link AwContentsClient#showFileChooser} method.
1395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)     */
140ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    public static class FileChooserParams {
141ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch        public int mode;
142ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch        public String acceptTypes;
143ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch        public String title;
144ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch        public String defaultFilename;
145ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch        public boolean capture;
146ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    }
147ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void getVisitedHistory(ValueCallback<String[]> callback);
1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void doUpdateVisitedHistory(String url, boolean isReload);
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public abstract void onProgressChanged(int progress);
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public abstract InterceptedRequestData shouldInterceptRequest(String url);
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public abstract boolean shouldOverrideKeyEvent(KeyEvent event);
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public abstract boolean shouldOverrideUrlLoading(String url);
159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public abstract void onLoadResource(String url);
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public abstract void onUnhandledKeyEvent(KeyEvent event);
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public abstract boolean onConsoleMessage(ConsoleMessage consoleMessage);
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public abstract void onReceivedHttpAuthRequest(AwHttpAuthHandler handler,
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            String host, String realm);
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void onReceivedSslError(ValueCallback<Boolean> callback, SslError error);
1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1710529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    // TODO(sgurun): Make abstract once this has rolled in downstream.
1720529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    public void onReceivedClientCertRequest(
1730529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch            final AwContentsClientBridge.ClientCertificateRequestCallback callback,
1740529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch            final String[] keyTypes, final Principal[] principals, final String host,
1750529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch            final int port) { }
1760529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void onReceivedLoginRequest(String realm, String account, String args);
1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public abstract void onFormResubmission(Message dontResend, Message resend);
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void onDownloadStart(String url, String userAgent, String contentDisposition,
1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            String mimeType, long contentLength);
1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
184ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    // TODO(joth): Make abstract once this has rolled in downstream.
185ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    public /*abstract*/ void showFileChooser(ValueCallback<String[]> uploadFilePathsCallback,
186ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch            FileChooserParams fileChooserParams) { }
187ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void onGeolocationPermissionsShowPrompt(String origin,
1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            GeolocationPermissions.Callback callback);
1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void onGeolocationPermissionsHidePrompt();
1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
193010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    // TODO(michaelbai): Change the abstract once merged
194010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    public /*abstract*/ void onPermissionRequest(AwPermissionRequest awPermissionRequest) {}
195010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
196010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    // TODO(michaelbai): Change the abstract once merged
197010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    public /*abstract*/ void onPermissionRequestCanceled(
198010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)            AwPermissionRequest awPermissionRequest) {}
199010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void onScaleChangedScaled(float oldScale, float newScale);
2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    protected abstract void handleJsAlert(String url, String message, JsResultReceiver receiver);
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    protected abstract void handleJsBeforeUnload(String url, String message,
2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            JsResultReceiver receiver);
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    protected abstract void handleJsConfirm(String url, String message, JsResultReceiver receiver);
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    protected abstract void handleJsPrompt(String url, String message, String defaultValue,
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            JsPromptResultReceiver receiver);
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    protected abstract boolean onCreateWindow(boolean isDialog, boolean isUserGesture);
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    protected abstract void onCloseWindow();
2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void onReceivedTouchIconUrl(String url, boolean precomposed);
2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void onReceivedIcon(Bitmap bitmap);
2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
220c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public abstract void onReceivedTitle(String title);
221c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    protected abstract void onRequestFocus();
2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    protected abstract View getVideoLoadingProgressView();
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public abstract void onPageStarted(String url);
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public abstract void onPageFinished(String url);
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public abstract void onReceivedError(int errorCode, String description, String failingUrl);
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
232c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    // TODO (michaelbai): Remove this method once the same method remove from
233c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    // WebViewContentsClientAdapter.
234c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void onShowCustomView(View view,
235c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)           int requestedOrientation, WebChromeClient.CustomViewCallback callback) {
236c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // TODO (michaelbai): This method should be abstract, having empty body here
2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // makes the merge to the Android easy.
240c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void onShowCustomView(View view, WebChromeClient.CustomViewCallback callback) {
241c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        onShowCustomView(view, ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED, callback);
2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
244c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public abstract void onHideCustomView();
245c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
246c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public abstract Bitmap getDefaultVideoPoster();
247c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    //--------------------------------------------------------------------------------------------
2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    //                              Other WebView-specific methods
2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    //--------------------------------------------------------------------------------------------
2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    //
2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void onFindResultReceived(int activeMatchOrdinal, int numberOfMatches,
2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            boolean isDoneCounting);
2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    /**
2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)     * Called whenever there is a new content picture available.
2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)     * @param picture New picture.
2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)     */
2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void onNewPicture(Picture picture);
2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
262