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. 73 * @param view is the View object to be shown. 74 * @param callback is the callback to be invoked if and when the view 75 * is dismissed. 76 */ 77 public void onShowCustomView(View view, CustomViewCallback callback) {}; 78 79 /** 80 * Notify the host application that the current page would 81 * like to show a custom View in a particular orientation. 82 * @param view is the View object to be shown. 83 * @param requestedOrientation An orientation constant as used in 84 * {@link ActivityInfo#screenOrientation ActivityInfo.screenOrientation}. 85 * @param callback is the callback to be invoked if and when the view 86 * is dismissed. 87 */ 88 public void onShowCustomView(View view, int requestedOrientation, 89 CustomViewCallback callback) {}; 90 91 /** 92 * Notify the host application that the current page would 93 * like to hide its custom view. 94 */ 95 public void onHideCustomView() {} 96 97 /** 98 * Request the host application to create a new window. If the host 99 * application chooses to honor this request, it should return true from 100 * this method, create a new WebView to host the window, insert it into the 101 * View system and send the supplied resultMsg message to its target with 102 * the new WebView as an argument. If the host application chooses not to 103 * honor the request, it should return false from this method. The default 104 * implementation of this method does nothing and hence returns false. 105 * @param view The WebView from which the request for a new window 106 * originated. 107 * @param isDialog True if the new window should be a dialog, rather than 108 * a full-size window. 109 * @param isUserGesture True if the request was initiated by a user gesture, 110 * such as the user clicking a link. 111 * @param resultMsg The message to send when once a new WebView has been 112 * created. resultMsg.obj is a 113 * {@link WebView.WebViewTransport} object. This should be 114 * used to transport the new WebView, by calling 115 * {@link WebView.WebViewTransport#setWebView(WebView) 116 * WebView.WebViewTransport.setWebView(WebView)}. 117 * @return This method should return true if the host application will 118 * create a new window, in which case resultMsg should be sent to 119 * its target. Otherwise, this method should return false. Returning 120 * false from this method but also sending resultMsg will result in 121 * undefined behavior. 122 */ 123 public boolean onCreateWindow(WebView view, boolean isDialog, 124 boolean isUserGesture, Message resultMsg) { 125 return false; 126 } 127 128 /** 129 * Request display and focus for this WebView. This may happen due to 130 * another WebView opening a link in this WebView and requesting that this 131 * WebView be displayed. 132 * @param view The WebView that needs to be focused. 133 */ 134 public void onRequestFocus(WebView view) {} 135 136 /** 137 * Notify the host application to close the given WebView and remove it 138 * from the view system if necessary. At this point, WebCore has stopped 139 * any loading in this window and has removed any cross-scripting ability 140 * in javascript. 141 * @param window The WebView that needs to be closed. 142 */ 143 public void onCloseWindow(WebView window) {} 144 145 /** 146 * Tell the client to display a javascript alert dialog. If the client 147 * returns true, WebView will assume that the client will handle the 148 * dialog. If the client returns false, it will continue execution. 149 * @param view The WebView that initiated the callback. 150 * @param url The url of the page requesting the dialog. 151 * @param message Message to be displayed in the window. 152 * @param result A JsResult to confirm that the user hit enter. 153 * @return boolean Whether the client will handle the alert dialog. 154 */ 155 public boolean onJsAlert(WebView view, String url, String message, 156 JsResult result) { 157 return false; 158 } 159 160 /** 161 * Tell the client to display a confirm dialog to the user. If the client 162 * returns true, WebView will assume that the client will handle the 163 * confirm dialog and call the appropriate JsResult method. If the 164 * client returns false, a default value of false will be returned to 165 * javascript. The default behavior is to return false. 166 * @param view The WebView that initiated the callback. 167 * @param url The url of the page requesting the dialog. 168 * @param message Message to be displayed in the window. 169 * @param result A JsResult used to send the user's response to 170 * javascript. 171 * @return boolean Whether the client will handle the confirm dialog. 172 */ 173 public boolean onJsConfirm(WebView view, String url, String message, 174 JsResult result) { 175 return false; 176 } 177 178 /** 179 * Tell the client to display a prompt dialog to the user. If the client 180 * returns true, WebView will assume that the client will handle the 181 * prompt dialog and call the appropriate JsPromptResult method. If the 182 * client returns false, a default value of false will be returned to to 183 * javascript. The default behavior is to return false. 184 * @param view The WebView that initiated the callback. 185 * @param url The url of the page requesting the dialog. 186 * @param message Message to be displayed in the window. 187 * @param defaultValue The default value displayed in the prompt dialog. 188 * @param result A JsPromptResult used to send the user's reponse to 189 * javascript. 190 * @return boolean Whether the client will handle the prompt dialog. 191 */ 192 public boolean onJsPrompt(WebView view, String url, String message, 193 String defaultValue, JsPromptResult result) { 194 return false; 195 } 196 197 /** 198 * Tell the client to display a dialog to confirm navigation away from the 199 * current page. This is the result of the onbeforeunload javascript event. 200 * If the client returns true, WebView will assume that the client will 201 * handle the confirm dialog and call the appropriate JsResult method. If 202 * the client returns false, a default value of true will be returned to 203 * javascript to accept navigation away from the current page. The default 204 * behavior is to return false. Setting the JsResult to true will navigate 205 * away from the current page, false will cancel the navigation. 206 * @param view The WebView that initiated the callback. 207 * @param url The url of the page requesting the dialog. 208 * @param message Message to be displayed in the window. 209 * @param result A JsResult used to send the user's response to 210 * javascript. 211 * @return boolean Whether the client will handle the confirm dialog. 212 */ 213 public boolean onJsBeforeUnload(WebView view, String url, String message, 214 JsResult result) { 215 return false; 216 } 217 218 /** 219 * Tell the client that the database quota for the origin has been exceeded. 220 * @param url The URL that triggered the notification 221 * @param databaseIdentifier The identifier of the database that caused the 222 * quota overflow. 223 * @param currentQuota The current quota for the origin. 224 * @param estimatedSize The estimated size of the database. 225 * @param totalUsedQuota is the sum of all origins' quota. 226 * @param quotaUpdater A callback to inform the WebCore thread that a new 227 * quota is available. This callback must always be executed at some 228 * point to ensure that the sleeping WebCore thread is woken up. 229 */ 230 public void onExceededDatabaseQuota(String url, String databaseIdentifier, 231 long currentQuota, long estimatedSize, long totalUsedQuota, 232 WebStorage.QuotaUpdater quotaUpdater) { 233 // This default implementation passes the current quota back to WebCore. 234 // WebCore will interpret this that new quota was declined. 235 quotaUpdater.updateQuota(currentQuota); 236 } 237 238 /** 239 * Tell the client that the Application Cache has exceeded its max size. 240 * @param spaceNeeded is the amount of disk space that would be needed 241 * in order for the last appcache operation to succeed. 242 * @param totalUsedQuota is the sum of all origins' quota. 243 * @param quotaUpdater A callback to inform the WebCore thread that a new 244 * app cache size is available. This callback must always be executed at 245 * some point to ensure that the sleeping WebCore thread is woken up. 246 */ 247 public void onReachedMaxAppCacheSize(long spaceNeeded, long totalUsedQuota, 248 WebStorage.QuotaUpdater quotaUpdater) { 249 quotaUpdater.updateQuota(0); 250 } 251 252 /** 253 * Instructs the client to show a prompt to ask the user to set the 254 * Geolocation permission state for the specified origin. 255 */ 256 public void onGeolocationPermissionsShowPrompt(String origin, 257 GeolocationPermissions.Callback callback) {} 258 259 /** 260 * Instructs the client to hide the Geolocation permissions prompt. 261 */ 262 public void onGeolocationPermissionsHidePrompt() {} 263 264 /** 265 * Tell the client that a JavaScript execution timeout has occured. And the 266 * client may decide whether or not to interrupt the execution. If the 267 * client returns true, the JavaScript will be interrupted. If the client 268 * returns false, the execution will continue. Note that in the case of 269 * continuing execution, the timeout counter will be reset, and the callback 270 * will continue to occur if the script does not finish at the next check 271 * point. 272 * @return boolean Whether the JavaScript execution should be interrupted. 273 */ 274 public boolean onJsTimeout() { 275 return true; 276 } 277 278 /** 279 * Report a JavaScript error message to the host application. The ChromeClient 280 * should override this to process the log message as they see fit. 281 * @param message The error message to report. 282 * @param lineNumber The line number of the error. 283 * @param sourceID The name of the source file that caused the error. 284 * @deprecated Use {@link #onConsoleMessage(ConsoleMessage) onConsoleMessage(ConsoleMessage)} 285 * instead. 286 */ 287 @Deprecated 288 public void onConsoleMessage(String message, int lineNumber, String sourceID) { } 289 290 /** 291 * Report a JavaScript console message to the host application. The ChromeClient 292 * should override this to process the log message as they see fit. 293 * @param consoleMessage Object containing details of the console message. 294 * @return true if the message is handled by the client. 295 */ 296 public boolean onConsoleMessage(ConsoleMessage consoleMessage) { 297 // Call the old version of this function for backwards compatability. 298 onConsoleMessage(consoleMessage.message(), consoleMessage.lineNumber(), 299 consoleMessage.sourceId()); 300 return false; 301 } 302 303 /** 304 * When not playing, video elements are represented by a 'poster' image. The 305 * image to use can be specified by the poster attribute of the video tag in 306 * HTML. If the attribute is absent, then a default poster will be used. This 307 * method allows the ChromeClient to provide that default image. 308 * 309 * @return Bitmap The image to use as a default poster, or null if no such image is 310 * available. 311 */ 312 public Bitmap getDefaultVideoPoster() { 313 return null; 314 } 315 316 /** 317 * When the user starts to playback a video element, it may take time for enough 318 * data to be buffered before the first frames can be rendered. While this buffering 319 * is taking place, the ChromeClient can use this function to provide a View to be 320 * displayed. For example, the ChromeClient could show a spinner animation. 321 * 322 * @return View The View to be displayed whilst the video is loading. 323 */ 324 public View getVideoLoadingProgressView() { 325 return null; 326 } 327 328 /** Obtains a list of all visited history items, used for link coloring 329 */ 330 public void getVisitedHistory(ValueCallback<String[]> callback) { 331 } 332 333 /** 334 * Tell the client to open a file chooser. 335 * @param uploadFile A ValueCallback to set the URI of the file to upload. 336 * onReceiveValue must be called to wake up the thread.a 337 * @param acceptType The value of the 'accept' attribute of the input tag 338 * associated with this file picker. 339 * @hide 340 */ 341 public void openFileChooser(ValueCallback<Uri> uploadFile, String acceptType) { 342 uploadFile.onReceiveValue(null); 343 } 344 345 /** 346 * Tell the client that the page being viewed is web app capable, 347 * i.e. has specified the fullscreen-web-app-capable meta tag. 348 * @hide 349 */ 350 public void setInstallableWebApp() { } 351 352 /** 353 * Tell the client that the page being viewed has an autofillable 354 * form and the user would like to set a profile up. 355 * @param msg A Message to send once the user has successfully 356 * set up a profile and to inform the WebTextView it should 357 * now autofill using that new profile. 358 * @hide 359 */ 360 public void setupAutoFill(Message msg) { } 361 362 } 363