WebChromeClient.java revision 10e4d2068aa687e30dd4e5fcae6417f66874823b
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.os.Message; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class WebChromeClient { 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Tell the host application the current progress of loading a page. 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param view The WebView that initiated the callback. 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param newProgress Current page loading progress, represented by 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * an integer between 0 and 100. 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onProgressChanged(WebView view, int newProgress) {} 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Notify the host application of a change in the document title. 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param view The WebView that initiated the callback. 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param title A String containing the new title of the document. 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onReceivedTitle(WebView view, String title) {} 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Notify the host application of a new favicon for the current page. 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param view The WebView that initiated the callback. 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param icon A Bitmap containing the favicon for the current page. 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onReceivedIcon(WebView view, Bitmap icon) {} 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Request the host application to create a new Webview. The host 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * application should handle placement of the new WebView in the view 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * system. The default behavior returns null. 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param view The WebView that initiated the callback. 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param dialog True if the new window is meant to be a small dialog 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * window. 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param userGesture True if the request was initiated by a user gesture 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * such as clicking a link. 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param resultMsg The message to send when done creating a new WebView. 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set the new WebView through resultMsg.obj which is 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WebView.WebViewTransport() and then call 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * resultMsg.sendToTarget(); 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Similar to javscript dialogs, this method should return true if 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the client is going to handle creating a new WebView. Note that 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the WebView will halt processing if this method returns true so 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * make sure to call resultMsg.sendToTarget(). It is undefined 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * behavior to call resultMsg.sendToTarget() after returning false 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * from this method. 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean onCreateWindow(WebView view, boolean dialog, 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean userGesture, Message resultMsg) { 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Request display and focus for this WebView. This may happen due to 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * another WebView opening a link in this WebView and requesting that this 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WebView be displayed. 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param view The WebView that needs to be focused. 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onRequestFocus(WebView view) {} 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Notify the host application to close the given WebView and remove it 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * from the view system if necessary. At this point, WebCore has stopped 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * any loading in this window and has removed any cross-scripting ability 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * in javascript. 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param window The WebView that needs to be closed. 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onCloseWindow(WebView window) {} 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Tell the client to display a javascript alert dialog. If the client 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * returns true, WebView will assume that the client will handle the 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * dialog. If the client returns false, it will continue execution. 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param view The WebView that initiated the callback. 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param url The url of the page requesting the dialog. 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param message Message to be displayed in the window. 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param result A JsResult to confirm that the user hit enter. 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return boolean Whether the client will handle the alert dialog. 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean onJsAlert(WebView view, String url, String message, 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project JsResult result) { 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Tell the client to display a confirm dialog to the user. If the client 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * returns true, WebView will assume that the client will handle the 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * confirm dialog and call the appropriate JsResult method. If the 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * client returns false, a default value of false will be returned to 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * javascript. The default behavior is to return false. 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param view The WebView that initiated the callback. 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param url The url of the page requesting the dialog. 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param message Message to be displayed in the window. 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param result A JsResult used to send the user's response to 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * javascript. 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return boolean Whether the client will handle the confirm dialog. 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean onJsConfirm(WebView view, String url, String message, 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project JsResult result) { 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Tell the client to display a prompt dialog to the user. If the client 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * returns true, WebView will assume that the client will handle the 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * prompt dialog and call the appropriate JsPromptResult method. If the 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * client returns false, a default value of false will be returned to to 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * javascript. The default behavior is to return false. 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param view The WebView that initiated the callback. 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param url The url of the page requesting the dialog. 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param message Message to be displayed in the window. 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param defaultValue The default value displayed in the prompt dialog. 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param result A JsPromptResult used to send the user's reponse to 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * javascript. 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return boolean Whether the client will handle the prompt dialog. 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean onJsPrompt(WebView view, String url, String message, 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String defaultValue, JsPromptResult result) { 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Tell the client to display a dialog to confirm navigation away from the 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * current page. This is the result of the onbeforeunload javascript event. 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If the client returns true, WebView will assume that the client will 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * handle the confirm dialog and call the appropriate JsResult method. If 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the client returns false, a default value of true will be returned to 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * javascript to accept navigation away from the current page. The default 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * behavior is to return false. Setting the JsResult to true will navigate 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * away from the current page, false will cancel the navigation. 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param view The WebView that initiated the callback. 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param url The url of the page requesting the dialog. 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param message Message to be displayed in the window. 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param result A JsResult used to send the user's response to 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * javascript. 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return boolean Whether the client will handle the confirm dialog. 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean onJsBeforeUnload(WebView view, String url, String message, 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project JsResult result) { 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1607df1985e86635af006be3dfa65987d60e290b5deBen Murdoch 1617df1985e86635af006be3dfa65987d60e290b5deBen Murdoch /** 1627df1985e86635af006be3dfa65987d60e290b5deBen Murdoch * Tell the client that the database quota for the origin has been exceeded. 1637df1985e86635af006be3dfa65987d60e290b5deBen Murdoch * @param url The URL that triggered the notification 1647df1985e86635af006be3dfa65987d60e290b5deBen Murdoch * @param databaseIdentifier The identifier of the database that caused the 1657df1985e86635af006be3dfa65987d60e290b5deBen Murdoch * quota overflow. 1667df1985e86635af006be3dfa65987d60e290b5deBen Murdoch * @param currentQuota The current quota for the origin. 1677df1985e86635af006be3dfa65987d60e290b5deBen Murdoch * @param quotaUpdater A callback to inform the WebCore thread that a new 1687df1985e86635af006be3dfa65987d60e290b5deBen Murdoch * quota is available. This callback must always be executed at some 1697df1985e86635af006be3dfa65987d60e290b5deBen Murdoch * point to ensure that the sleeping WebCore thread is woken up. 1707df1985e86635af006be3dfa65987d60e290b5deBen Murdoch */ 1717df1985e86635af006be3dfa65987d60e290b5deBen Murdoch public void onExceededDatabaseQuota(String url, String databaseIdentifier, 1727df1985e86635af006be3dfa65987d60e290b5deBen Murdoch long currentQuota, WebStorage.QuotaUpdater quotaUpdater) { 1737df1985e86635af006be3dfa65987d60e290b5deBen Murdoch // This default implementation passes the current quota back to WebCore. 1747df1985e86635af006be3dfa65987d60e290b5deBen Murdoch // WebCore will interpret this that new quota was declined. 1757df1985e86635af006be3dfa65987d60e290b5deBen Murdoch quotaUpdater.updateQuota(currentQuota); 1767df1985e86635af006be3dfa65987d60e290b5deBen Murdoch } 17710e4d2068aa687e30dd4e5fcae6417f66874823bGuang Zhu 17881e41434b3421a89e3e967e866238719e8468bd5Guang Zhu /** 17981e41434b3421a89e3e967e866238719e8468bd5Guang Zhu * Tell the client that a JavaScript execution timeout has occured. And the 18081e41434b3421a89e3e967e866238719e8468bd5Guang Zhu * client may decide whether or not to interrupt the execution. If the 18181e41434b3421a89e3e967e866238719e8468bd5Guang Zhu * client returns true, the JavaScript will be interrupted. If the client 18281e41434b3421a89e3e967e866238719e8468bd5Guang Zhu * returns false, the execution will continue. Note that in the case of 18381e41434b3421a89e3e967e866238719e8468bd5Guang Zhu * continuing execution, the timeout counter will be reset, and the callback 18481e41434b3421a89e3e967e866238719e8468bd5Guang Zhu * will continue to occur if the script does not finish at the next check 18581e41434b3421a89e3e967e866238719e8468bd5Guang Zhu * point. 18681e41434b3421a89e3e967e866238719e8468bd5Guang Zhu * @return boolean Whether the JavaScript execution should be interrupted. 18781e41434b3421a89e3e967e866238719e8468bd5Guang Zhu * @hide pending API Council approval 18881e41434b3421a89e3e967e866238719e8468bd5Guang Zhu */ 18981e41434b3421a89e3e967e866238719e8468bd5Guang Zhu public boolean onJsTimeout() { 19081e41434b3421a89e3e967e866238719e8468bd5Guang Zhu return true; 19181e41434b3421a89e3e967e866238719e8468bd5Guang Zhu } 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 193