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)
220529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochimport java.security.Principal;
23116680a4aac90f2aa7413d9095a592090648e557Ben Murdochimport java.util.HashMap;
240529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Base-class that an AwContents embedder derives from to receive callbacks.
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * This extends ContentViewClient, as in many cases we want to pass-thru ContentViewCore
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * callbacks right to our embedder, and this setup facilities that.
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * For any other callbacks we need to make transformations of (e.g. adapt parameters
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * or perform filtering) we can provide final overrides for methods here, and then introduce
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * new abstract methods that the our own client must implement.
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * i.e.: all methods in this class should either be final, or abstract.
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)public abstract class AwContentsClient {
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    private final AwContentsClientCallbackHelper mCallbackHelper;
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
38a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    // Last background color reported from the renderer. Holds the sentinal value INVALID_COLOR
39a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    // if not valid.
40a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    private int mCachedRendererBackgroundColor = INVALID_COLOR;
41a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
42a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    private static final int INVALID_COLOR = 0;
43a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    public AwContentsClient() {
451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)        this(Looper.myLooper());
461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    }
471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    // Alllow injection of the callback thread, for testing.
491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    public AwContentsClient(Looper looper) {
501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)        mCallbackHelper = new AwContentsClientCallbackHelper(looper, this);
511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    }
521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    final AwContentsClientCallbackHelper getCallbackHelper() {
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        return mCallbackHelper;
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
57a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    final int getCachedRendererBackgroundColor() {
58a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch        assert isCachedRendererBackgroundColorValid();
59a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch        return mCachedRendererBackgroundColor;
60a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    }
61a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
62a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    final boolean isCachedRendererBackgroundColorValid() {
63a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch        return mCachedRendererBackgroundColor != INVALID_COLOR;
64a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    }
65a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    final void onBackgroundColorChanged(int color) {
67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        // Avoid storing the sentinal INVALID_COLOR (note that both 0 and 1 are both
68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        // fully transparent so this transpose makes no visible difference).
69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        mCachedRendererBackgroundColor = color == INVALID_COLOR ? 1 : color;
70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    }
71f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    //--------------------------------------------------------------------------------------------
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    //             WebView specific methods that map directly to WebViewClient / WebChromeClient
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    //--------------------------------------------------------------------------------------------
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    /**
775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)     * Parameters for the {@link AwContentsClient#showFileChooser} method.
785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)     */
79ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    public static class FileChooserParams {
80ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch        public int mode;
81ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch        public String acceptTypes;
82ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch        public String title;
83ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch        public String defaultFilename;
84ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch        public boolean capture;
85ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    }
86ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
876d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    /**
886d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)     * Parameters for the {@link AwContentsClient#shouldInterceptRequest} method.
896d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)     */
906d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    public static class ShouldInterceptRequestParams {
916d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)        // Url of the request.
926d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)        public String url;
936d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)        // Is this for the main frame or a child iframe?
946d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)        public boolean isMainFrame;
956d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)        // Was a gesture associated with the request? Don't trust can easily be spoofed.
966d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)        public boolean hasUserGesture;
976d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)        // Method used (GET/POST/OPTIONS)
986d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)        public String method;
996d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)        // Headers that would have been sent to server.
100116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        public HashMap<String, String> requestHeaders;
1016d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    }
1026d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void getVisitedHistory(ValueCallback<String[]> callback);
1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void doUpdateVisitedHistory(String url, boolean isReload);
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public abstract void onProgressChanged(int progress);
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1096d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    public abstract AwWebResourceResponse shouldInterceptRequest(
1106d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)            ShouldInterceptRequestParams params);
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public abstract boolean shouldOverrideKeyEvent(KeyEvent event);
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public abstract boolean shouldOverrideUrlLoading(String url);
115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public abstract void onLoadResource(String url);
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public abstract void onUnhandledKeyEvent(KeyEvent event);
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public abstract boolean onConsoleMessage(ConsoleMessage consoleMessage);
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public abstract void onReceivedHttpAuthRequest(AwHttpAuthHandler handler,
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            String host, String realm);
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void onReceivedSslError(ValueCallback<Boolean> callback, SslError error);
1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1270529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    // TODO(sgurun): Make abstract once this has rolled in downstream.
1280529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    public void onReceivedClientCertRequest(
1290529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch            final AwContentsClientBridge.ClientCertificateRequestCallback callback,
1300529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch            final String[] keyTypes, final Principal[] principals, final String host,
1310529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch            final int port) { }
1320529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void onReceivedLoginRequest(String realm, String account, String args);
1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public abstract void onFormResubmission(Message dontResend, Message resend);
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void onDownloadStart(String url, String userAgent, String contentDisposition,
1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            String mimeType, long contentLength);
1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
140ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    // TODO(joth): Make abstract once this has rolled in downstream.
141ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    public /*abstract*/ void showFileChooser(ValueCallback<String[]> uploadFilePathsCallback,
142ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch            FileChooserParams fileChooserParams) { }
143ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void onGeolocationPermissionsShowPrompt(String origin,
1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            GeolocationPermissions.Callback callback);
1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void onGeolocationPermissionsHidePrompt();
1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
149010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    // TODO(michaelbai): Change the abstract once merged
150010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    public /*abstract*/ void onPermissionRequest(AwPermissionRequest awPermissionRequest) {}
151010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
152010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    // TODO(michaelbai): Change the abstract once merged
153010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    public /*abstract*/ void onPermissionRequestCanceled(
154010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)            AwPermissionRequest awPermissionRequest) {}
155010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void onScaleChangedScaled(float oldScale, float newScale);
1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    protected abstract void handleJsAlert(String url, String message, JsResultReceiver receiver);
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    protected abstract void handleJsBeforeUnload(String url, String message,
1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            JsResultReceiver receiver);
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    protected abstract void handleJsConfirm(String url, String message, JsResultReceiver receiver);
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    protected abstract void handleJsPrompt(String url, String message, String defaultValue,
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            JsPromptResultReceiver receiver);
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    protected abstract boolean onCreateWindow(boolean isDialog, boolean isUserGesture);
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    protected abstract void onCloseWindow();
1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void onReceivedTouchIconUrl(String url, boolean precomposed);
1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void onReceivedIcon(Bitmap bitmap);
1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public abstract void onReceivedTitle(String title);
177c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    protected abstract void onRequestFocus();
1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    protected abstract View getVideoLoadingProgressView();
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public abstract void onPageStarted(String url);
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public abstract void onPageFinished(String url);
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public abstract void onReceivedError(int errorCode, String description, String failingUrl);
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    // TODO (michaelbai): Remove this method once the same method remove from
189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    // WebViewContentsClientAdapter.
190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void onShowCustomView(View view,
191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)           int requestedOrientation, WebChromeClient.CustomViewCallback callback) {
192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // TODO (michaelbai): This method should be abstract, having empty body here
1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // makes the merge to the Android easy.
196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void onShowCustomView(View view, WebChromeClient.CustomViewCallback callback) {
197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        onShowCustomView(view, ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED, callback);
1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public abstract void onHideCustomView();
201c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
202c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public abstract Bitmap getDefaultVideoPoster();
203c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    //--------------------------------------------------------------------------------------------
2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    //                              Other WebView-specific methods
2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    //--------------------------------------------------------------------------------------------
2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    //
2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void onFindResultReceived(int activeMatchOrdinal, int numberOfMatches,
2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            boolean isDoneCounting);
2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    /**
2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)     * Called whenever there is a new content picture available.
2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)     * @param picture New picture.
2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)     */
2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void onNewPicture(Picture picture);
2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
218