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