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