1 /* 2 * Copyright (C) 2008 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package android.webkit; 18 19 import android.content.pm.ActivityInfo; 20 import android.graphics.Bitmap; 21 import android.net.Uri; 22 import android.os.Message; 23 import android.view.View; 24 25 public class WebChromeClient { 26 27 /** 28 * Tell the host application the current progress of loading a page. 29 * @param view The WebView that initiated the callback. 30 * @param newProgress Current page loading progress, represented by 31 * an integer between 0 and 100. 32 */ 33 public void onProgressChanged(WebView view, int newProgress) {} 34 35 /** 36 * Notify the host application of a change in the document title. 37 * @param view The WebView that initiated the callback. 38 * @param title A String containing the new title of the document. 39 */ 40 public void onReceivedTitle(WebView view, String title) {} 41 42 /** 43 * Notify the host application of a new favicon for the current page. 44 * @param view The WebView that initiated the callback. 45 * @param icon A Bitmap containing the favicon for the current page. 46 */ 47 public void onReceivedIcon(WebView view, Bitmap icon) {} 48 49 /** 50 * Notify the host application of the url for an apple-touch-icon. 51 * @param view The WebView that initiated the callback. 52 * @param url The icon url. 53 * @param precomposed True if the url is for a precomposed touch icon. 54 */ 55 public void onReceivedTouchIconUrl(WebView view, String url, 56 boolean precomposed) {} 57 58 /** 59 * A callback interface used by the host application to notify 60 * the current page that its custom view has been dismissed. 61 */ 62 public interface CustomViewCallback { 63 /** 64 * Invoked when the host application dismisses the 65 * custom view. 66 */ 67 public void onCustomViewHidden(); 68 } 69 70 /** 71 * Notify the host application that the current page would 72 * like to show a custom View. This is used for Fullscreen 73 * video playback; see "HTML5 Video support" documentation on 74 * {@link WebView}. 75 * @param view is the View object to be shown. 76 * @param callback is the callback to be invoked if and when the view 77 * is dismissed. 78 */ 79 public void onShowCustomView(View view, CustomViewCallback callback) {}; 80 81 /** 82 * Notify the host application that the current page would 83 * like to show a custom View in a particular orientation. 84 * @param view is the View object to be shown. 85 * @param requestedOrientation An orientation constant as used in 86 * {@link ActivityInfo#screenOrientation ActivityInfo.screenOrientation}. 87 * @param callback is the callback to be invoked if and when the view 88 * is dismissed. 89 * @deprecated This method supports the obsolete plugin mechanism, 90 * and will not be invoked in future 91 */ 92 @Deprecated 93 public void onShowCustomView(View view, int requestedOrientation, 94 CustomViewCallback callback) {}; 95 96 /** 97 * Notify the host application that the current page would 98 * like to hide its custom view. 99 */ 100 public void onHideCustomView() {} 101 102 /** 103 * Request the host application to create a new window. If the host 104 * application chooses to honor this request, it should return true from 105 * this method, create a new WebView to host the window, insert it into the 106 * View system and send the supplied resultMsg message to its target with 107 * the new WebView as an argument. If the host application chooses not to 108 * honor the request, it should return false from this method. The default 109 * implementation of this method does nothing and hence returns false. 110 * @param view The WebView from which the request for a new window 111 * originated. 112 * @param isDialog True if the new window should be a dialog, rather than 113 * a full-size window. 114 * @param isUserGesture True if the request was initiated by a user gesture, 115 * such as the user clicking a link. 116 * @param resultMsg The message to send when once a new WebView has been 117 * created. resultMsg.obj is a 118 * {@link WebView.WebViewTransport} object. This should be 119 * used to transport the new WebView, by calling 120 * {@link WebView.WebViewTransport#setWebView(WebView) 121 * WebView.WebViewTransport.setWebView(WebView)}. 122 * @return This method should return true if the host application will 123 * create a new window, in which case resultMsg should be sent to 124 * its target. Otherwise, this method should return false. Returning 125 * false from this method but also sending resultMsg will result in 126 * undefined behavior. 127 */ 128 public boolean onCreateWindow(WebView view, boolean isDialog, 129 boolean isUserGesture, Message resultMsg) { 130 return false; 131 } 132 133 /** 134 * Request display and focus for this WebView. This may happen due to 135 * another WebView opening a link in this WebView and requesting that this 136 * WebView be displayed. 137 * @param view The WebView that needs to be focused. 138 */ 139 public void onRequestFocus(WebView view) {} 140 141 /** 142 * Notify the host application to close the given WebView and remove it 143 * from the view system if necessary. At this point, WebCore has stopped 144 * any loading in this window and has removed any cross-scripting ability 145 * in javascript. 146 * @param window The WebView that needs to be closed. 147 */ 148 public void onCloseWindow(WebView window) {} 149 150 /** 151 * Tell the client to display a javascript alert dialog. If the client 152 * returns true, WebView will assume that the client will handle the 153 * dialog. If the client returns false, it will continue execution. 154 * @param view The WebView that initiated the callback. 155 * @param url The url of the page requesting the dialog. 156 * @param message Message to be displayed in the window. 157 * @param result A JsResult to confirm that the user hit enter. 158 * @return boolean Whether the client will handle the alert dialog. 159 */ 160 public boolean onJsAlert(WebView view, String url, String message, 161 JsResult result) { 162 return false; 163 } 164 165 /** 166 * Tell the client to display a confirm dialog to the user. If the client 167 * returns true, WebView will assume that the client will handle the 168 * confirm dialog and call the appropriate JsResult method. If the 169 * client returns false, a default value of false will be returned to 170 * javascript. The default behavior is to return false. 171 * @param view The WebView that initiated the callback. 172 * @param url The url of the page requesting the dialog. 173 * @param message Message to be displayed in the window. 174 * @param result A JsResult used to send the user's response to 175 * javascript. 176 * @return boolean Whether the client will handle the confirm dialog. 177 */ 178 public boolean onJsConfirm(WebView view, String url, String message, 179 JsResult result) { 180 return false; 181 } 182 183 /** 184 * Tell the client to display a prompt dialog to the user. If the client 185 * returns true, WebView will assume that the client will handle the 186 * prompt dialog and call the appropriate JsPromptResult method. If the 187 * client returns false, a default value of false will be returned to to 188 * javascript. The default behavior is to return false. 189 * @param view The WebView that initiated the callback. 190 * @param url The url of the page requesting the dialog. 191 * @param message Message to be displayed in the window. 192 * @param defaultValue The default value displayed in the prompt dialog. 193 * @param result A JsPromptResult used to send the user's reponse to 194 * javascript. 195 * @return boolean Whether the client will handle the prompt dialog. 196 */ 197 public boolean onJsPrompt(WebView view, String url, String message, 198 String defaultValue, JsPromptResult result) { 199 return false; 200 } 201 202 /** 203 * Tell the client to display a dialog to confirm navigation away from the 204 * current page. This is the result of the onbeforeunload javascript event. 205 * If the client returns true, WebView will assume that the client will 206 * handle the confirm dialog and call the appropriate JsResult method. If 207 * the client returns false, a default value of true will be returned to 208 * javascript to accept navigation away from the current page. The default 209 * behavior is to return false. Setting the JsResult to true will navigate 210 * away from the current page, false will cancel the navigation. 211 * @param view The WebView that initiated the callback. 212 * @param url The url of the page requesting the dialog. 213 * @param message Message to be displayed in the window. 214 * @param result A JsResult used to send the user's response to 215 * javascript. 216 * @return boolean Whether the client will handle the confirm dialog. 217 */ 218 public boolean onJsBeforeUnload(WebView view, String url, String message, 219 JsResult result) { 220 return false; 221 } 222 223 /** 224 * Tell the client that the quota has been exceeded for the Web SQL Database 225 * API for a particular origin and request a new quota. The client must 226 * respond by invoking the 227 * {@link WebStorage.QuotaUpdater#updateQuota(long) updateQuota(long)} 228 * method of the supplied {@link WebStorage.QuotaUpdater} instance. The 229 * minimum value that can be set for the new quota is the current quota. The 230 * default implementation responds with the current quota, so the quota will 231 * not be increased. 232 * @param url The URL of the page that triggered the notification 233 * @param databaseIdentifier The identifier of the database where the quota 234 * was exceeded. 235 * @param quota The quota for the origin, in bytes 236 * @param estimatedDatabaseSize The estimated size of the offending 237 * database, in bytes 238 * @param totalQuota The total quota for all origins, in bytes 239 * @param quotaUpdater An instance of {@link WebStorage.QuotaUpdater} which 240 * must be used to inform the WebView of the new quota. 241 * @deprecated This method is no longer called; WebView now uses the HTML5 / JavaScript Quota 242 * Management API. 243 */ 244 @Deprecated 245 public void onExceededDatabaseQuota(String url, String databaseIdentifier, 246 long quota, long estimatedDatabaseSize, long totalQuota, 247 WebStorage.QuotaUpdater quotaUpdater) { 248 // This default implementation passes the current quota back to WebCore. 249 // WebCore will interpret this that new quota was declined. 250 quotaUpdater.updateQuota(quota); 251 } 252 253 /** 254 * Notify the host application that the Application Cache has reached the 255 * maximum size. The client must respond by invoking the 256 * {@link WebStorage.QuotaUpdater#updateQuota(long) updateQuota(long)} 257 * method of the supplied {@link WebStorage.QuotaUpdater} instance. The 258 * minimum value that can be set for the new quota is the current quota. The 259 * default implementation responds with the current quota, so the quota will 260 * not be increased. 261 * @param requiredStorage The amount of storage required by the Application 262 * Cache operation that triggered this notification, 263 * in bytes. 264 * @param quota the current maximum Application Cache size, in bytes 265 * @param quotaUpdater An instance of {@link WebStorage.QuotaUpdater} which 266 * must be used to inform the WebView of the new quota. 267 * @deprecated This method is no longer called; WebView now uses the HTML5 / JavaScript Quota 268 * Management API. 269 */ 270 @Deprecated 271 public void onReachedMaxAppCacheSize(long requiredStorage, long quota, 272 WebStorage.QuotaUpdater quotaUpdater) { 273 quotaUpdater.updateQuota(quota); 274 } 275 276 /** 277 * Notify the host application that web content from the specified origin 278 * is attempting to use the Geolocation API, but no permission state is 279 * currently set for that origin. The host application should invoke the 280 * specified callback with the desired permission state. See 281 * {@link GeolocationPermissions} for details. 282 * @param origin The origin of the web content attempting to use the 283 * Geolocation API. 284 * @param callback The callback to use to set the permission state for the 285 * origin. 286 */ 287 public void onGeolocationPermissionsShowPrompt(String origin, 288 GeolocationPermissions.Callback callback) {} 289 290 /** 291 * Notify the host application that a request for Geolocation permissions, 292 * made with a previous call to 293 * {@link #onGeolocationPermissionsShowPrompt(String,GeolocationPermissions.Callback) onGeolocationPermissionsShowPrompt()} 294 * has been canceled. Any related UI should therefore be hidden. 295 */ 296 public void onGeolocationPermissionsHidePrompt() {} 297 298 /** 299 * Tell the client that a JavaScript execution timeout has occured. And the 300 * client may decide whether or not to interrupt the execution. If the 301 * client returns true, the JavaScript will be interrupted. If the client 302 * returns false, the execution will continue. Note that in the case of 303 * continuing execution, the timeout counter will be reset, and the callback 304 * will continue to occur if the script does not finish at the next check 305 * point. 306 * @return boolean Whether the JavaScript execution should be interrupted. 307 * @deprecated This method is no longer supported and will not be invoked. 308 */ 309 // This method was only called when using the JSC javascript engine. V8 became 310 // the default JS engine with Froyo and support for building with JSC was 311 // removed in b/5495373. V8 does not have a mechanism for making a callback such 312 // as this. 313 public boolean onJsTimeout() { 314 return true; 315 } 316 317 /** 318 * Report a JavaScript error message to the host application. The ChromeClient 319 * should override this to process the log message as they see fit. 320 * @param message The error message to report. 321 * @param lineNumber The line number of the error. 322 * @param sourceID The name of the source file that caused the error. 323 * @deprecated Use {@link #onConsoleMessage(ConsoleMessage) onConsoleMessage(ConsoleMessage)} 324 * instead. 325 */ 326 @Deprecated 327 public void onConsoleMessage(String message, int lineNumber, String sourceID) { } 328 329 /** 330 * Report a JavaScript console message to the host application. The ChromeClient 331 * should override this to process the log message as they see fit. 332 * @param consoleMessage Object containing details of the console message. 333 * @return true if the message is handled by the client. 334 */ 335 public boolean onConsoleMessage(ConsoleMessage consoleMessage) { 336 // Call the old version of this function for backwards compatability. 337 onConsoleMessage(consoleMessage.message(), consoleMessage.lineNumber(), 338 consoleMessage.sourceId()); 339 return false; 340 } 341 342 /** 343 * When not playing, video elements are represented by a 'poster' image. The 344 * image to use can be specified by the poster attribute of the video tag in 345 * HTML. If the attribute is absent, then a default poster will be used. This 346 * method allows the ChromeClient to provide that default image. 347 * 348 * @return Bitmap The image to use as a default poster, or null if no such image is 349 * available. 350 */ 351 public Bitmap getDefaultVideoPoster() { 352 return null; 353 } 354 355 /** 356 * When the user starts to playback a video element, it may take time for enough 357 * data to be buffered before the first frames can be rendered. While this buffering 358 * is taking place, the ChromeClient can use this function to provide a View to be 359 * displayed. For example, the ChromeClient could show a spinner animation. 360 * 361 * @return View The View to be displayed whilst the video is loading. 362 */ 363 public View getVideoLoadingProgressView() { 364 return null; 365 } 366 367 /** Obtains a list of all visited history items, used for link coloring 368 */ 369 public void getVisitedHistory(ValueCallback<String[]> callback) { 370 } 371 372 /** 373 * Tell the client to open a file chooser. 374 * @param uploadFile A ValueCallback to set the URI of the file to upload. 375 * onReceiveValue must be called to wake up the thread.a 376 * @param acceptType The value of the 'accept' attribute of the input tag 377 * associated with this file picker. 378 * @param capture The value of the 'capture' attribute of the input tag 379 * associated with this file picker. 380 * @hide 381 */ 382 public void openFileChooser(ValueCallback<Uri> uploadFile, String acceptType, String capture) { 383 uploadFile.onReceiveValue(null); 384 } 385 386 /** 387 * Tell the client that the page being viewed has an autofillable 388 * form and the user would like to set a profile up. 389 * @param msg A Message to send once the user has successfully 390 * set up a profile and to inform the WebTextView it should 391 * now autofill using that new profile. 392 * @hide 393 */ 394 public void setupAutoFill(Message msg) { } 395 396 } 397