AwContentsClient.java revision 0529e5d033099cbfc42635f6f6183833b09dff6e
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)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import org.chromium.content.browser.ContentViewCore;
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import org.chromium.content.browser.WebContentsObserverAndroid;
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import org.chromium.net.NetError;
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
240529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochimport java.security.Principal;
250529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Base-class that an AwContents embedder derives from to receive callbacks.
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * This extends ContentViewClient, as in many cases we want to pass-thru ContentViewCore
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * callbacks right to our embedder, and this setup facilities that.
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * For any other callbacks we need to make transformations of (e.g. adapt parameters
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * or perform filtering) we can provide final overrides for methods here, and then introduce
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * new abstract methods that the our own client must implement.
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * i.e.: all methods in this class should either be final, or abstract.
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)public abstract class AwContentsClient {
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    private final AwContentsClientCallbackHelper mCallbackHelper;
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    private AwWebContentsObserver mWebContentsObserver;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
41a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    // Last background color reported from the renderer. Holds the sentinal value INVALID_COLOR
42a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    // if not valid.
43a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    private int mCachedRendererBackgroundColor = INVALID_COLOR;
44a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
45a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    private static final int INVALID_COLOR = 0;
46a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    public AwContentsClient() {
481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)        this(Looper.myLooper());
491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    }
501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    // Alllow injection of the callback thread, for testing.
521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    public AwContentsClient(Looper looper) {
531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)        mCallbackHelper = new AwContentsClientCallbackHelper(looper, this);
541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    }
551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    class AwWebContentsObserver extends WebContentsObserverAndroid {
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        public AwWebContentsObserver(ContentViewCore contentViewCore) {
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            super(contentViewCore);
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        @Override
62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        public void didFinishLoad(long frameId, String validatedUrl, boolean isMainFrame) {
635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            if (isMainFrame) {
64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                AwContentsClient.this.onPageFinished(validatedUrl);
655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            }
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        @Override
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        public void didFailLoad(boolean isProvisionalLoad,
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                boolean isMainFrame, int errorCode, String description, String failingUrl) {
715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            if (isMainFrame) {
725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                if (errorCode != NetError.ERR_ABORTED) {
735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                    // This error code is generated for the following reasons:
745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                    // - WebView.stopLoading is called,
755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                    // - the navigation is intercepted by the embedder via shouldOverrideNavigation.
765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                    //
775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                    // The Android WebView does not notify the embedder of these situations using
785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                    // this error code with the WebViewClient.onReceivedError callback.
795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                    AwContentsClient.this.onReceivedError(
805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                            ErrorCodeConversionHelper.convertErrorCode(errorCode), description,
815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                    failingUrl);
825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                }
835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                // Need to call onPageFinished after onReceivedError (if there is an error) for
845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                // backwards compatibility with the classic webview.
855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                AwContentsClient.this.onPageFinished(failingUrl);
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            }
875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        }
885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        @Override
905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        public void didNavigateMainFrame(String url, String baseUrl,
915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                boolean isNavigationToDifferentPage, boolean isNavigationInPage) {
925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            // This is here to emulate the Classic WebView firing onPageFinished for main frame
935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            // navigations where only the hash fragment changes.
945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            if (isNavigationInPage) {
955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                AwContentsClient.this.onPageFinished(url);
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            }
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        @Override
1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        public void didNavigateAnyFrame(String url, String baseUrl, boolean isReload) {
1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            AwContentsClient.this.doUpdateVisitedHistory(url, isReload);
1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        }
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    final void installWebContentsObserver(ContentViewCore contentViewCore) {
1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        if (mWebContentsObserver != null) {
1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            mWebContentsObserver.detachFromWebContents();
1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        }
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        mWebContentsObserver = new AwWebContentsObserver(contentViewCore);
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    final AwContentsClientCallbackHelper getCallbackHelper() {
1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        return mCallbackHelper;
1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
117a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    final int getCachedRendererBackgroundColor() {
118a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch        assert isCachedRendererBackgroundColorValid();
119a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch        return mCachedRendererBackgroundColor;
120a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    }
121a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
122a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    final boolean isCachedRendererBackgroundColorValid() {
123a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch        return mCachedRendererBackgroundColor != INVALID_COLOR;
124a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    }
125a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
126f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    final void onBackgroundColorChanged(int color) {
127f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        // Avoid storing the sentinal INVALID_COLOR (note that both 0 and 1 are both
128f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        // fully transparent so this transpose makes no visible difference).
129f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        mCachedRendererBackgroundColor = color == INVALID_COLOR ? 1 : color;
130f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    }
131f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    //--------------------------------------------------------------------------------------------
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    //             WebView specific methods that map directly to WebViewClient / WebChromeClient
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    //--------------------------------------------------------------------------------------------
1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    /**
1375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)     * Parameters for the {@link AwContentsClient#showFileChooser} method.
1385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)     */
139ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    public static class FileChooserParams {
140ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch        public int mode;
141ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch        public String acceptTypes;
142ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch        public String title;
143ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch        public String defaultFilename;
144ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch        public boolean capture;
145ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    }
146ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void getVisitedHistory(ValueCallback<String[]> callback);
1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void doUpdateVisitedHistory(String url, boolean isReload);
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public abstract void onProgressChanged(int progress);
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public abstract InterceptedRequestData shouldInterceptRequest(String url);
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public abstract boolean shouldOverrideKeyEvent(KeyEvent event);
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public abstract boolean shouldOverrideUrlLoading(String url);
158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public abstract void onLoadResource(String url);
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public abstract void onUnhandledKeyEvent(KeyEvent event);
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public abstract boolean onConsoleMessage(ConsoleMessage consoleMessage);
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public abstract void onReceivedHttpAuthRequest(AwHttpAuthHandler handler,
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            String host, String realm);
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void onReceivedSslError(ValueCallback<Boolean> callback, SslError error);
1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1700529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    // TODO(sgurun): Make abstract once this has rolled in downstream.
1710529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    public void onReceivedClientCertRequest(
1720529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch            final AwContentsClientBridge.ClientCertificateRequestCallback callback,
1730529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch            final String[] keyTypes, final Principal[] principals, final String host,
1740529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch            final int port) { }
1750529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void onReceivedLoginRequest(String realm, String account, String args);
1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public abstract void onFormResubmission(Message dontResend, Message resend);
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void onDownloadStart(String url, String userAgent, String contentDisposition,
1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            String mimeType, long contentLength);
1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
183ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    // TODO(joth): Make abstract once this has rolled in downstream.
184ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    public /*abstract*/ void showFileChooser(ValueCallback<String[]> uploadFilePathsCallback,
185ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch            FileChooserParams fileChooserParams) { }
186ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void onGeolocationPermissionsShowPrompt(String origin,
1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            GeolocationPermissions.Callback callback);
1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void onGeolocationPermissionsHidePrompt();
1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void onScaleChangedScaled(float oldScale, float newScale);
1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    protected abstract void handleJsAlert(String url, String message, JsResultReceiver receiver);
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    protected abstract void handleJsBeforeUnload(String url, String message,
1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            JsResultReceiver receiver);
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    protected abstract void handleJsConfirm(String url, String message, JsResultReceiver receiver);
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    protected abstract void handleJsPrompt(String url, String message, String defaultValue,
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            JsPromptResultReceiver receiver);
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    protected abstract boolean onCreateWindow(boolean isDialog, boolean isUserGesture);
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    protected abstract void onCloseWindow();
2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void onReceivedTouchIconUrl(String url, boolean precomposed);
2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void onReceivedIcon(Bitmap bitmap);
2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
212c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public abstract void onReceivedTitle(String title);
213c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    protected abstract void onRequestFocus();
2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    protected abstract View getVideoLoadingProgressView();
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public abstract void onPageStarted(String url);
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public abstract void onPageFinished(String url);
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public abstract void onReceivedError(int errorCode, String description, String failingUrl);
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
224c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    // TODO (michaelbai): Remove this method once the same method remove from
225c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    // WebViewContentsClientAdapter.
226c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void onShowCustomView(View view,
227c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)           int requestedOrientation, WebChromeClient.CustomViewCallback callback) {
228c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // TODO (michaelbai): This method should be abstract, having empty body here
2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // makes the merge to the Android easy.
232c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void onShowCustomView(View view, WebChromeClient.CustomViewCallback callback) {
233c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        onShowCustomView(view, ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED, callback);
2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
236c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public abstract void onHideCustomView();
237c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
238c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public abstract Bitmap getDefaultVideoPoster();
239c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    //--------------------------------------------------------------------------------------------
2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    //                              Other WebView-specific methods
2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    //--------------------------------------------------------------------------------------------
2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    //
2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void onFindResultReceived(int activeMatchOrdinal, int numberOfMatches,
2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            boolean isDoneCounting);
2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    /**
2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)     * Called whenever there is a new content picture available.
2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)     * @param picture New picture.
2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)     */
2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void onNewPicture(Picture picture);
2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
254