AwContentsClient.java revision a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7
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)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Base-class that an AwContents embedder derives from to receive callbacks.
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * This extends ContentViewClient, as in many cases we want to pass-thru ContentViewCore
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * callbacks right to our embedder, and this setup facilities that.
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * For any other callbacks we need to make transformations of (e.g. adapt parameters
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * or perform filtering) we can provide final overrides for methods here, and then introduce
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * new abstract methods that the our own client must implement.
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * i.e.: all methods in this class should either be final, or abstract.
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)public abstract class AwContentsClient {
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    private final AwContentsClientCallbackHelper mCallbackHelper;
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    private AwWebContentsObserver mWebContentsObserver;
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
39a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    // Last background color reported from the renderer. Holds the sentinal value INVALID_COLOR
40a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    // if not valid.
41a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    private int mCachedRendererBackgroundColor = INVALID_COLOR;
42a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
43a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    private static final int INVALID_COLOR = 0;
44a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    public AwContentsClient() {
461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)        this(Looper.myLooper());
471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    }
481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    // Alllow injection of the callback thread, for testing.
501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    public AwContentsClient(Looper looper) {
511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)        mCallbackHelper = new AwContentsClientCallbackHelper(looper, this);
521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    }
531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    class AwWebContentsObserver extends WebContentsObserverAndroid {
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        public AwWebContentsObserver(ContentViewCore contentViewCore) {
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            super(contentViewCore);
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        @Override
60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        public void didFinishLoad(long frameId, String validatedUrl, boolean isMainFrame) {
61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            if (isMainFrame)
62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                AwContentsClient.this.onPageFinished(validatedUrl);
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        @Override
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        public void didFailLoad(boolean isProvisionalLoad,
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                boolean isMainFrame, int errorCode, String description, String failingUrl) {
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            if (errorCode == NetError.ERR_ABORTED) {
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                // This error code is generated for the following reasons:
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                // - WebView.stopLoading is called,
71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                // - the navigation is intercepted by the embedder via shouldOverrideNavigation.
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                //
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                // The Android WebView does not notify the embedder of these situations using this
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                // error code with the WebViewClient.onReceivedError callback.
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                return;
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            }
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            if (!isMainFrame) {
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                // The Android WebView does not notify the embedder of sub-frame failures.
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                return;
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            }
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            AwContentsClient.this.onReceivedError(
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    ErrorCodeConversionHelper.convertErrorCode(errorCode), description, failingUrl);
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        @Override
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        public void didNavigateAnyFrame(String url, String baseUrl, boolean isReload) {
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            AwContentsClient.this.doUpdateVisitedHistory(url, isReload);
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        }
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    final void installWebContentsObserver(ContentViewCore contentViewCore) {
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        if (mWebContentsObserver != null) {
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            mWebContentsObserver.detachFromWebContents();
952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        }
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        mWebContentsObserver = new AwWebContentsObserver(contentViewCore);
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    final AwContentsClientCallbackHelper getCallbackHelper() {
1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        return mCallbackHelper;
1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
103a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    final int getCachedRendererBackgroundColor() {
104a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch        assert isCachedRendererBackgroundColorValid();
105a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch        return mCachedRendererBackgroundColor;
106a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    }
107a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
108a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    final boolean isCachedRendererBackgroundColorValid() {
109a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch        return mCachedRendererBackgroundColor != INVALID_COLOR;
110a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    }
111a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
112f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    final void onBackgroundColorChanged(int color) {
113f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        // Avoid storing the sentinal INVALID_COLOR (note that both 0 and 1 are both
114f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        // fully transparent so this transpose makes no visible difference).
115f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        mCachedRendererBackgroundColor = color == INVALID_COLOR ? 1 : color;
116f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    }
117f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    //--------------------------------------------------------------------------------------------
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    //             WebView specific methods that map directly to WebViewClient / WebChromeClient
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    //--------------------------------------------------------------------------------------------
1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
122ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    public static class FileChooserParams {
123ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch        public int mode;
124ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch        public String acceptTypes;
125ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch        public String title;
126ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch        public String defaultFilename;
127ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch        public boolean capture;
128ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    }
129ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void getVisitedHistory(ValueCallback<String[]> callback);
1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void doUpdateVisitedHistory(String url, boolean isReload);
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public abstract void onProgressChanged(int progress);
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public abstract InterceptedRequestData shouldInterceptRequest(String url);
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public abstract boolean shouldOverrideKeyEvent(KeyEvent event);
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public abstract boolean shouldOverrideUrlLoading(String url);
141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public abstract void onLoadResource(String url);
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public abstract void onUnhandledKeyEvent(KeyEvent event);
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public abstract boolean onConsoleMessage(ConsoleMessage consoleMessage);
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public abstract void onReceivedHttpAuthRequest(AwHttpAuthHandler handler,
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            String host, String realm);
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void onReceivedSslError(ValueCallback<Boolean> callback, SslError error);
1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void onReceivedLoginRequest(String realm, String account, String args);
1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public abstract void onFormResubmission(Message dontResend, Message resend);
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void onDownloadStart(String url, String userAgent, String contentDisposition,
1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            String mimeType, long contentLength);
1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
160ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    // TODO(joth): Make abstract once this has rolled in downstream.
161ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    public /*abstract*/ void showFileChooser(ValueCallback<String[]> uploadFilePathsCallback,
162ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch            FileChooserParams fileChooserParams) { }
163ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void onGeolocationPermissionsShowPrompt(String origin,
1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            GeolocationPermissions.Callback callback);
1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void onGeolocationPermissionsHidePrompt();
1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void onScaleChangedScaled(float oldScale, float newScale);
1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    protected abstract void handleJsAlert(String url, String message, JsResultReceiver receiver);
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    protected abstract void handleJsBeforeUnload(String url, String message,
1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            JsResultReceiver receiver);
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    protected abstract void handleJsConfirm(String url, String message, JsResultReceiver receiver);
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    protected abstract void handleJsPrompt(String url, String message, String defaultValue,
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            JsPromptResultReceiver receiver);
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    protected abstract boolean onCreateWindow(boolean isDialog, boolean isUserGesture);
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    protected abstract void onCloseWindow();
1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void onReceivedTouchIconUrl(String url, boolean precomposed);
1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void onReceivedIcon(Bitmap bitmap);
1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public abstract void onReceivedTitle(String title);
190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    protected abstract void onRequestFocus();
1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    protected abstract View getVideoLoadingProgressView();
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public abstract void onPageStarted(String url);
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public abstract void onPageFinished(String url);
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public abstract void onReceivedError(int errorCode, String description, String failingUrl);
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
201c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    // TODO (michaelbai): Remove this method once the same method remove from
202c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    // WebViewContentsClientAdapter.
203c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void onShowCustomView(View view,
204c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)           int requestedOrientation, WebChromeClient.CustomViewCallback callback) {
205c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // TODO (michaelbai): This method should be abstract, having empty body here
2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // makes the merge to the Android easy.
209c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void onShowCustomView(View view, WebChromeClient.CustomViewCallback callback) {
210c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        onShowCustomView(view, ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED, callback);
2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
213c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public abstract void onHideCustomView();
214c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
215c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public abstract Bitmap getDefaultVideoPoster();
216c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    //--------------------------------------------------------------------------------------------
2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    //                              Other WebView-specific methods
2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    //--------------------------------------------------------------------------------------------
2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    //
2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void onFindResultReceived(int activeMatchOrdinal, int numberOfMatches,
2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            boolean isDoneCounting);
2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    /**
2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)     * Called whenever there is a new content picture available.
2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)     * @param picture New picture.
2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)     */
2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void onNewPicture(Picture picture);
2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
231