WebViewClient.java revision 16687cc956af678032f03e1c9ec5ee51736bc763
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.webkit; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.Bitmap; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.net.http.SslError; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Message; 22899d70568b565280dd33fa8892e25c5511f95769Michael Wrightimport android.view.InputEvent; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.KeyEvent; 24d6b1098e1f46530528dfea415655468ec994bbb6John Reckimport android.view.ViewRootImpl; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 26b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurunimport java.security.Principal; 27b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class WebViewClient { 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Give the host application a chance to take over the control when a new 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * url is about to be loaded in the current WebView. If WebViewClient is not 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * provided, by default WebView will ask Activity Manager to choose the 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * proper handler for the url. If WebViewClient is provided, return true 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * means the host application handles the url, while return false means the 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * current WebView handles the url. 37881c49c99be006f90a51a444db6b96289947e73aMartin Kosiba * This method is not called for requests using the POST "method". 38a14775949c97a616196f5293209b092ee3d4e9a9Brian Carlstrom * 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param view The WebView that is initiating the callback. 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param url The url to be loaded. 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return True if the host application wants to leave the current WebView 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and handle the url itself, otherwise return false. 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean shouldOverrideUrlLoading(WebView view, String url) { 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Notify the host application that a page has started loading. This method 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is called once for each main frame load so a page with iframes or 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * framesets will call onPageStarted one time for the main frame. This also 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * means that onPageStarted will not be called when the contents of an 5316687cc956af678032f03e1c9ec5ee51736bc763Marcin Kosiba * embedded frame changes, i.e. clicking a link whose target is an iframe, 5416687cc956af678032f03e1c9ec5ee51736bc763Marcin Kosiba * it will also not be called for fragment navigations (navigations to 5516687cc956af678032f03e1c9ec5ee51736bc763Marcin Kosiba * #fragment_id). 56a14775949c97a616196f5293209b092ee3d4e9a9Brian Carlstrom * 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param view The WebView that is initiating the callback. 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param url The url to be loaded. 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param favicon The favicon for this page if it already exists in the 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * database. 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onPageStarted(WebView view, String url, Bitmap favicon) { 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Notify the host application that a page has finished loading. This method 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is called only for main frame. When onPageFinished() is called, the 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * rendering picture may not be updated yet. To get the notification for the 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * new Picture, use {@link WebView.PictureListener#onNewPicture}. 70a14775949c97a616196f5293209b092ee3d4e9a9Brian Carlstrom * 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param view The WebView that is initiating the callback. 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param url The url of the page. 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onPageFinished(WebView view, String url) { 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Notify the host application that the WebView will load the resource 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * specified by the given url. 80a14775949c97a616196f5293209b092ee3d4e9a9Brian Carlstrom * 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param view The WebView that is initiating the callback. 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param url The url of the resource the WebView will load. 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onLoadResource(WebView view, String url) { 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 88c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott * Notify the host application of a resource request and allow the 89c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott * application to return the data. If the return value is null, the WebView 90c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott * will continue to load the resource as usual. Otherwise, the return 9115cb82549375d89feb1cf0f2825e3e31a94d0c38Martin Kosiba * response and data will be used. NOTE: This method is called on a thread 9215cb82549375d89feb1cf0f2825e3e31a94d0c38Martin Kosiba * other than the UI thread so clients should exercise caution 9315cb82549375d89feb1cf0f2825e3e31a94d0c38Martin Kosiba * when accessing private data or the view system. 94c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott * 95c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott * @param view The {@link android.webkit.WebView} that is requesting the 96c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott * resource. 97c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott * @param url The raw url of the resource. 98c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott * @return A {@link android.webkit.WebResourceResponse} containing the 99c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott * response information or null if the WebView should load the 100c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott * resource itself. 101d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba * @deprecated Use {@link #shouldInterceptRequest(WebView, WebResourceRequest) 102d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba * shouldInterceptRequest(WebView, WebResourceRequest)} instead. 103c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott */ 104d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba @Deprecated 105c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott public WebResourceResponse shouldInterceptRequest(WebView view, 106c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott String url) { 107c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott return null; 108c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott } 109c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott 110c12544a201667383bc3dfb4bd3ad62d98cacd24fPatrick Scott /** 111d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba * Notify the host application of a resource request and allow the 112d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba * application to return the data. If the return value is null, the WebView 113d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba * will continue to load the resource as usual. Otherwise, the return 114d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba * response and data will be used. NOTE: This method is called on a thread 115d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba * other than the UI thread so clients should exercise caution 116d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba * when accessing private data or the view system. 117d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba * 118d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba * @param view The {@link android.webkit.WebView} that is requesting the 119d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba * resource. 120d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba * @param request Object containing the details of the request. 121d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba * @return A {@link android.webkit.WebResourceResponse} containing the 122d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba * response information or null if the WebView should load the 123d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba * resource itself. 124d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba */ 125d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba public WebResourceResponse shouldInterceptRequest(WebView view, 126d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba WebResourceRequest request) { 127d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba return shouldInterceptRequest(view, request.getUrl().toString()); 128d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba } 129d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba 130d72e7ba1c04b2f7b128c5710607a72867b73bf1cMarcin Kosiba /** 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Notify the host application that there have been an excessive number of 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * HTTP redirects. As the host application if it would like to continue 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * trying to load the resource. The default behavior is to send the cancel 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * message. 135a14775949c97a616196f5293209b092ee3d4e9a9Brian Carlstrom * 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param view The WebView that is initiating the callback. 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param cancelMsg The message to send if the host wants to cancel 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param continueMsg The message to send if the host wants to continue 1396a5b0ecae5dc89a951e1e204bc007f50f944c5d1Patrick Scott * @deprecated This method is no longer called. When the WebView encounters 1406a5b0ecae5dc89a951e1e204bc007f50f944c5d1Patrick Scott * a redirect loop, it will cancel the load. 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 142b5503c168a49f0f2b1372678f87d874e7d82aaadKristian Monsen @Deprecated 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onTooManyRedirects(WebView view, Message cancelMsg, 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message continueMsg) { 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cancelMsg.sendToTarget(); 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14805c9ed9ce1d920c322ee1431cfed64541f0acf3cPatrick Scott // These ints must match up to the hidden values in EventHandler. 14905c9ed9ce1d920c322ee1431cfed64541f0acf3cPatrick Scott /** Generic error */ 15005c9ed9ce1d920c322ee1431cfed64541f0acf3cPatrick Scott public static final int ERROR_UNKNOWN = -1; 15105c9ed9ce1d920c322ee1431cfed64541f0acf3cPatrick Scott /** Server or proxy hostname lookup failed */ 15205c9ed9ce1d920c322ee1431cfed64541f0acf3cPatrick Scott public static final int ERROR_HOST_LOOKUP = -2; 15305c9ed9ce1d920c322ee1431cfed64541f0acf3cPatrick Scott /** Unsupported authentication scheme (not basic or digest) */ 15405c9ed9ce1d920c322ee1431cfed64541f0acf3cPatrick Scott public static final int ERROR_UNSUPPORTED_AUTH_SCHEME = -3; 15505c9ed9ce1d920c322ee1431cfed64541f0acf3cPatrick Scott /** User authentication failed on server */ 15605c9ed9ce1d920c322ee1431cfed64541f0acf3cPatrick Scott public static final int ERROR_AUTHENTICATION = -4; 15705c9ed9ce1d920c322ee1431cfed64541f0acf3cPatrick Scott /** User authentication failed on proxy */ 15805c9ed9ce1d920c322ee1431cfed64541f0acf3cPatrick Scott public static final int ERROR_PROXY_AUTHENTICATION = -5; 15905c9ed9ce1d920c322ee1431cfed64541f0acf3cPatrick Scott /** Failed to connect to the server */ 16005c9ed9ce1d920c322ee1431cfed64541f0acf3cPatrick Scott public static final int ERROR_CONNECT = -6; 16105c9ed9ce1d920c322ee1431cfed64541f0acf3cPatrick Scott /** Failed to read or write to the server */ 16205c9ed9ce1d920c322ee1431cfed64541f0acf3cPatrick Scott public static final int ERROR_IO = -7; 16305c9ed9ce1d920c322ee1431cfed64541f0acf3cPatrick Scott /** Connection timed out */ 16405c9ed9ce1d920c322ee1431cfed64541f0acf3cPatrick Scott public static final int ERROR_TIMEOUT = -8; 16505c9ed9ce1d920c322ee1431cfed64541f0acf3cPatrick Scott /** Too many redirects */ 16605c9ed9ce1d920c322ee1431cfed64541f0acf3cPatrick Scott public static final int ERROR_REDIRECT_LOOP = -9; 16705c9ed9ce1d920c322ee1431cfed64541f0acf3cPatrick Scott /** Unsupported URI scheme */ 16805c9ed9ce1d920c322ee1431cfed64541f0acf3cPatrick Scott public static final int ERROR_UNSUPPORTED_SCHEME = -10; 16905c9ed9ce1d920c322ee1431cfed64541f0acf3cPatrick Scott /** Failed to perform SSL handshake */ 17005c9ed9ce1d920c322ee1431cfed64541f0acf3cPatrick Scott public static final int ERROR_FAILED_SSL_HANDSHAKE = -11; 17105c9ed9ce1d920c322ee1431cfed64541f0acf3cPatrick Scott /** Malformed URL */ 17205c9ed9ce1d920c322ee1431cfed64541f0acf3cPatrick Scott public static final int ERROR_BAD_URL = -12; 17305c9ed9ce1d920c322ee1431cfed64541f0acf3cPatrick Scott /** Generic file error */ 17405c9ed9ce1d920c322ee1431cfed64541f0acf3cPatrick Scott public static final int ERROR_FILE = -13; 17505c9ed9ce1d920c322ee1431cfed64541f0acf3cPatrick Scott /** File not found */ 17605c9ed9ce1d920c322ee1431cfed64541f0acf3cPatrick Scott public static final int ERROR_FILE_NOT_FOUND = -14; 17705c9ed9ce1d920c322ee1431cfed64541f0acf3cPatrick Scott /** Too many requests during this load */ 17805c9ed9ce1d920c322ee1431cfed64541f0acf3cPatrick Scott public static final int ERROR_TOO_MANY_REQUESTS = -15; 17905c9ed9ce1d920c322ee1431cfed64541f0acf3cPatrick Scott 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 18105c9ed9ce1d920c322ee1431cfed64541f0acf3cPatrick Scott * Report an error to the host application. These errors are unrecoverable 18205c9ed9ce1d920c322ee1431cfed64541f0acf3cPatrick Scott * (i.e. the main resource is unavailable). The errorCode parameter 18305c9ed9ce1d920c322ee1431cfed64541f0acf3cPatrick Scott * corresponds to one of the ERROR_* constants. 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param view The WebView that is initiating the callback. 185447811c64f60d29a5c0bf2d7ba94b91c68fe2612Patrick Scott * @param errorCode The error code corresponding to an ERROR_* value. 18605c9ed9ce1d920c322ee1431cfed64541f0acf3cPatrick Scott * @param description A String describing the error. 18705c9ed9ce1d920c322ee1431cfed64541f0acf3cPatrick Scott * @param failingUrl The url that failed to load. 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onReceivedError(WebView view, int errorCode, 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String description, String failingUrl) { 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * As the host application if the browser should resend data as the 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * requested page was a result of a POST. The default is to not resend the 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * data. 197a14775949c97a616196f5293209b092ee3d4e9a9Brian Carlstrom * 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param view The WebView that is initiating the callback. 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param dontResend The message to send if the browser should not resend 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param resend The message to send if the browser should resend data 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onFormResubmission(WebView view, Message dontResend, 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message resend) { 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dontResend.sendToTarget(); 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Notify the host application to update its visited links database. 209a14775949c97a616196f5293209b092ee3d4e9a9Brian Carlstrom * 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param view The WebView that is initiating the callback. 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param url The url being visited. 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param isReload True if this url is being reloaded. 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void doUpdateVisitedHistory(WebView view, String url, 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean isReload) { 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 219fe33a75cc8883dc5d50dd5a2fb0eac702f2a6992Steve Block * Notify the host application that an SSL error occurred while loading a 220fe33a75cc8883dc5d50dd5a2fb0eac702f2a6992Steve Block * resource. The host application must call either handler.cancel() or 221fe33a75cc8883dc5d50dd5a2fb0eac702f2a6992Steve Block * handler.proceed(). Note that the decision may be retained for use in 222fe33a75cc8883dc5d50dd5a2fb0eac702f2a6992Steve Block * response to future SSL errors. The default behavior is to cancel the 223fe33a75cc8883dc5d50dd5a2fb0eac702f2a6992Steve Block * load. 224a14775949c97a616196f5293209b092ee3d4e9a9Brian Carlstrom * 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param view The WebView that is initiating the callback. 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param handler An SslErrorHandler object that will handle the user's 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * response. 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param error The SSL error object. 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onReceivedSslError(WebView view, SslErrorHandler handler, 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SslError error) { 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project handler.cancel(); 233a14775949c97a616196f5293209b092ee3d4e9a9Brian Carlstrom } 234a14775949c97a616196f5293209b092ee3d4e9a9Brian Carlstrom 235a14775949c97a616196f5293209b092ee3d4e9a9Brian Carlstrom /** 236b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * Notify the host application to handle a SSL client certificate 237b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * request. The host application is responsible for showing the UI 238b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * if desired and providing the keys. There are three ways to 239b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * respond: proceed(), cancel() or ignore(). Webview remembers the 240b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * response if proceed() or cancel() is called and does not 241b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * call onReceivedClientCertRequest() again for the same host and port 242b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * pair. Webview does not remember the response if ignore() is called. 243b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * 244b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * This method is called on the UI thread. During the callback, the 245b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * connection is suspended. 246b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * 247b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * The default behavior is to cancel, returning no client certificate. 248b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * 249b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * @param view The WebView that is initiating the callback 250b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * @param request An instance of a {@link ClientCertRequest} 251b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * 252b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun */ 253b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun public void onReceivedClientCertRequest(WebView view, ClientCertRequest request) { 254b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun request.cancel(); 255b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun } 256b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun 257b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun /** 25846ce1db6ff3290b82b12f11715fbe82734a44322Steve Block * Notifies the host application that the WebView received an HTTP 25946ce1db6ff3290b82b12f11715fbe82734a44322Steve Block * authentication request. The host application can use the supplied 26046ce1db6ff3290b82b12f11715fbe82734a44322Steve Block * {@link HttpAuthHandler} to set the WebView's response to the request. 26146ce1db6ff3290b82b12f11715fbe82734a44322Steve Block * The default behavior is to cancel the request. 262a14775949c97a616196f5293209b092ee3d4e9a9Brian Carlstrom * 26346ce1db6ff3290b82b12f11715fbe82734a44322Steve Block * @param view the WebView that is initiating the callback 26446ce1db6ff3290b82b12f11715fbe82734a44322Steve Block * @param handler the HttpAuthHandler used to set the WebView's response 26546ce1db6ff3290b82b12f11715fbe82734a44322Steve Block * @param host the host requiring authentication 26646ce1db6ff3290b82b12f11715fbe82734a44322Steve Block * @param realm the realm for which authentication is required 26747aaba3faf5c950e1d7b2c613fe8e2c73c6748a7Jonathan Dixon * @see WebView#getHttpAuthUsernamePassword 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onReceivedHttpAuthRequest(WebView view, 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project HttpAuthHandler handler, String host, String realm) { 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project handler.cancel(); 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Give the host application a chance to handle the key event synchronously. 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * e.g. menu shortcut key events need to be filtered this way. If return 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * true, WebView will not handle the key event. If return false, WebView 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will always handle the key event, so none of the super in the view chain 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will see the key event. The default behavior returns false. 280a14775949c97a616196f5293209b092ee3d4e9a9Brian Carlstrom * 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param view The WebView that is initiating the callback. 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param event The key event. 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return True if the host application wants to handle the key event 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * itself, otherwise return false 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean shouldOverrideKeyEvent(WebView view, KeyEvent event) { 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Notify the host application that a key was not handled by the WebView. 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Except system keys, WebView always consumes the keys in the normal flow 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * or if shouldOverrideKeyEvent returns true. This is called asynchronously 294f76a50ce8fdc6aea22cabc77b2977a1a15a79630Ken Wakasa * from where the key is dispatched. It gives the host application a chance 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to handle the unhandled key events. 296a14775949c97a616196f5293209b092ee3d4e9a9Brian Carlstrom * 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param view The WebView that is initiating the callback. 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param event The key event. 299899d70568b565280dd33fa8892e25c5511f95769Michael Wright * @deprecated This method is subsumed by the more generic onUnhandledInputEvent. 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 301899d70568b565280dd33fa8892e25c5511f95769Michael Wright @Deprecated 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onUnhandledKeyEvent(WebView view, KeyEvent event) { 303899d70568b565280dd33fa8892e25c5511f95769Michael Wright onUnhandledInputEventInternal(view, event); 304899d70568b565280dd33fa8892e25c5511f95769Michael Wright } 305899d70568b565280dd33fa8892e25c5511f95769Michael Wright 306899d70568b565280dd33fa8892e25c5511f95769Michael Wright /** 307899d70568b565280dd33fa8892e25c5511f95769Michael Wright * Notify the host application that a input event was not handled by the WebView. 308899d70568b565280dd33fa8892e25c5511f95769Michael Wright * Except system keys, WebView always consumes input events in the normal flow 309899d70568b565280dd33fa8892e25c5511f95769Michael Wright * or if shouldOverrideKeyEvent returns true. This is called asynchronously 310899d70568b565280dd33fa8892e25c5511f95769Michael Wright * from where the event is dispatched. It gives the host application a chance 311899d70568b565280dd33fa8892e25c5511f95769Michael Wright * to handle the unhandled input events. 312899d70568b565280dd33fa8892e25c5511f95769Michael Wright * 3131feb11f511af25aa5d62d073d970071d16985661Michael Wright * Note that if the event is a {@link android.view.MotionEvent}, then it's lifetime is only 3141feb11f511af25aa5d62d073d970071d16985661Michael Wright * that of the function call. If the WebViewClient wishes to use the event beyond that, then it 3151feb11f511af25aa5d62d073d970071d16985661Michael Wright * <i>must</i> create a copy of the event. 316899d70568b565280dd33fa8892e25c5511f95769Michael Wright * 3171feb11f511af25aa5d62d073d970071d16985661Michael Wright * It is the responsibility of overriders of this method to call 3181feb11f511af25aa5d62d073d970071d16985661Michael Wright * {@link #onUnhandledKeyEvent(WebView, KeyEvent)} 319899d70568b565280dd33fa8892e25c5511f95769Michael Wright * when appropriate if they wish to continue receiving events through it. 320899d70568b565280dd33fa8892e25c5511f95769Michael Wright * 321899d70568b565280dd33fa8892e25c5511f95769Michael Wright * @param view The WebView that is initiating the callback. 322899d70568b565280dd33fa8892e25c5511f95769Michael Wright * @param event The input event. 323899d70568b565280dd33fa8892e25c5511f95769Michael Wright */ 324899d70568b565280dd33fa8892e25c5511f95769Michael Wright public void onUnhandledInputEvent(WebView view, InputEvent event) { 325899d70568b565280dd33fa8892e25c5511f95769Michael Wright if (event instanceof KeyEvent) { 326899d70568b565280dd33fa8892e25c5511f95769Michael Wright onUnhandledKeyEvent(view, (KeyEvent) event); 327899d70568b565280dd33fa8892e25c5511f95769Michael Wright return; 328899d70568b565280dd33fa8892e25c5511f95769Michael Wright } 329899d70568b565280dd33fa8892e25c5511f95769Michael Wright onUnhandledInputEventInternal(view, event); 330899d70568b565280dd33fa8892e25c5511f95769Michael Wright } 331899d70568b565280dd33fa8892e25c5511f95769Michael Wright 332899d70568b565280dd33fa8892e25c5511f95769Michael Wright private void onUnhandledInputEventInternal(WebView view, InputEvent event) { 333d6b1098e1f46530528dfea415655468ec994bbb6John Reck ViewRootImpl root = view.getViewRootImpl(); 334d6b1098e1f46530528dfea415655468ec994bbb6John Reck if (root != null) { 335899d70568b565280dd33fa8892e25c5511f95769Michael Wright root.dispatchUnhandledInputEvent(event); 336d6b1098e1f46530528dfea415655468ec994bbb6John Reck } 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Notify the host application that the scale applied to the WebView has 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * changed. 342a14775949c97a616196f5293209b092ee3d4e9a9Brian Carlstrom * 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param view he WebView that is initiating the callback. 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param oldScale The old scale factor 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param newScale The new scale factor 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onScaleChanged(WebView view, float oldScale, float newScale) { 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 34985a50ff48b2331913cc87f483eafba9f231c8c8cPatrick Scott 35085a50ff48b2331913cc87f483eafba9f231c8c8cPatrick Scott /** 35185a50ff48b2331913cc87f483eafba9f231c8c8cPatrick Scott * Notify the host application that a request to automatically log in the 35285a50ff48b2331913cc87f483eafba9f231c8c8cPatrick Scott * user has been processed. 35385a50ff48b2331913cc87f483eafba9f231c8c8cPatrick Scott * @param view The WebView requesting the login. 35485a50ff48b2331913cc87f483eafba9f231c8c8cPatrick Scott * @param realm The account realm used to look up accounts. 35585a50ff48b2331913cc87f483eafba9f231c8c8cPatrick Scott * @param account An optional account. If not null, the account should be 35685a50ff48b2331913cc87f483eafba9f231c8c8cPatrick Scott * checked against accounts on the device. If it is a valid 35785a50ff48b2331913cc87f483eafba9f231c8c8cPatrick Scott * account, it should be used to log in the user. 35885a50ff48b2331913cc87f483eafba9f231c8c8cPatrick Scott * @param args Authenticator specific arguments used to log in the user. 35985a50ff48b2331913cc87f483eafba9f231c8c8cPatrick Scott */ 36085a50ff48b2331913cc87f483eafba9f231c8c8cPatrick Scott public void onReceivedLoginRequest(WebView view, String realm, 36185a50ff48b2331913cc87f483eafba9f231c8c8cPatrick Scott String account, String args) { 36285a50ff48b2331913cc87f483eafba9f231c8c8cPatrick Scott } 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 364