• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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      */
onProgressChanged(WebView view, int newProgress)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      */
onReceivedTitle(WebView view, String title)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      */
onReceivedIcon(WebView view, Bitmap icon)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      */
onReceivedTouchIconUrl(WebView view, String url, boolean precomposed)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          */
onCustomViewHidden()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      */
onShowCustomView(View view, CustomViewCallback callback)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      */
onShowCustomView(View view, int requestedOrientation, CustomViewCallback callback)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      */
onHideCustomView()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      */
onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg)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      */
onRequestFocus(WebView view)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      */
onCloseWindow(WebView window)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      */
onJsAlert(WebView view, String url, String message, JsResult result)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      */
onJsConfirm(WebView view, String url, String message, JsResult result)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      */
onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result)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      */
onJsBeforeUnload(WebView view, String url, String message, JsResult result)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 quota has been exceeded for the Web SQL Database
220     * API for a particular origin and request a new quota. The client must
221     * respond by invoking the
222     * {@link WebStorage.QuotaUpdater#updateQuota(long) updateQuota(long)}
223     * method of the supplied {@link WebStorage.QuotaUpdater} instance. The
224     * minimum value that can be set for the new quota is the current quota. The
225     * default implementation responds with the current quota, so the quota will
226     * not be increased.
227     * @param url The URL of the page that triggered the notification
228     * @param databaseIdentifier The identifier of the database where the quota
229     *                           was exceeded.
230     * @param quota The quota for the origin, in bytes
231     * @param estimatedDatabaseSize The estimated size of the offending
232     *                              database, in bytes
233     * @param totalQuota The total quota for all origins, in bytes
234     * @param quotaUpdater An instance of {@link WebStorage.QuotaUpdater} which
235     *                     must be used to inform the WebView of the new quota.
236     */
237     // Note that the callback must always be executed at some point to ensure
238     // that the sleeping WebCore thread is woken up.
onExceededDatabaseQuota(String url, String databaseIdentifier, long quota, long estimatedDatabaseSize, long totalQuota, WebStorage.QuotaUpdater quotaUpdater)239     public void onExceededDatabaseQuota(String url, String databaseIdentifier,
240             long quota, long estimatedDatabaseSize, long totalQuota,
241             WebStorage.QuotaUpdater quotaUpdater) {
242         // This default implementation passes the current quota back to WebCore.
243         // WebCore will interpret this that new quota was declined.
244         quotaUpdater.updateQuota(quota);
245     }
246 
247    /**
248     * Notify the host application that the Application Cache has reached the
249     * maximum size. The client must respond by invoking the
250     * {@link WebStorage.QuotaUpdater#updateQuota(long) updateQuota(long)}
251     * method of the supplied {@link WebStorage.QuotaUpdater} instance. The
252     * minimum value that can be set for the new quota is the current quota. The
253     * default implementation responds with the current quota, so the quota will
254     * not be increased.
255     * @param requiredStorage The amount of storage required by the Application
256     *                        Cache operation that triggered this notification,
257     *                        in bytes.
258     * @param quota the current maximum Application Cache size, in bytes
259     * @param quotaUpdater An instance of {@link WebStorage.QuotaUpdater} which
260     *                     must be used to inform the WebView of the new quota.
261     */
262     // Note that the callback must always be executed at some point to ensure
263     // that the sleeping WebCore thread is woken up.
onReachedMaxAppCacheSize(long requiredStorage, long quota, WebStorage.QuotaUpdater quotaUpdater)264     public void onReachedMaxAppCacheSize(long requiredStorage, long quota,
265             WebStorage.QuotaUpdater quotaUpdater) {
266         quotaUpdater.updateQuota(quota);
267     }
268 
269     /**
270      * Notify the host application that web content from the specified origin
271      * is attempting to use the Geolocation API, but no permission state is
272      * currently set for that origin. The host application should invoke the
273      * specified callback with the desired permission state. See
274      * {@link GeolocationPermissions} for details.
275      * @param origin The origin of the web content attempting to use the
276      *               Geolocation API.
277      * @param callback The callback to use to set the permission state for the
278      *                 origin.
279      */
onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback)280     public void onGeolocationPermissionsShowPrompt(String origin,
281             GeolocationPermissions.Callback callback) {}
282 
283     /**
284      * Notify the host application that a request for Geolocation permissions,
285      * made with a previous call to
286      * {@link #onGeolocationPermissionsShowPrompt(String,GeolocationPermissions.Callback) onGeolocationPermissionsShowPrompt()}
287      * has been canceled. Any related UI should therefore be hidden.
288      */
onGeolocationPermissionsHidePrompt()289     public void onGeolocationPermissionsHidePrompt() {}
290 
291     /**
292      * Tell the client that a JavaScript execution timeout has occured. And the
293      * client may decide whether or not to interrupt the execution. If the
294      * client returns true, the JavaScript will be interrupted. If the client
295      * returns false, the execution will continue. Note that in the case of
296      * continuing execution, the timeout counter will be reset, and the callback
297      * will continue to occur if the script does not finish at the next check
298      * point.
299      * @return boolean Whether the JavaScript execution should be interrupted.
300      * @deprecated This method is no longer supported and will not be invoked.
301      */
302     // This method was only called when using the JSC javascript engine. V8 became
303     // the default JS engine with Froyo and support for building with JSC was
304     // removed in b/5495373. V8 does not have a mechanism for making a callback such
305     // as this.
onJsTimeout()306     public boolean onJsTimeout() {
307         return true;
308     }
309 
310     /**
311      * Report a JavaScript error message to the host application. The ChromeClient
312      * should override this to process the log message as they see fit.
313      * @param message The error message to report.
314      * @param lineNumber The line number of the error.
315      * @param sourceID The name of the source file that caused the error.
316      * @deprecated Use {@link #onConsoleMessage(ConsoleMessage) onConsoleMessage(ConsoleMessage)}
317      *      instead.
318      */
319     @Deprecated
onConsoleMessage(String message, int lineNumber, String sourceID)320     public void onConsoleMessage(String message, int lineNumber, String sourceID) { }
321 
322     /**
323      * Report a JavaScript console message to the host application. The ChromeClient
324      * should override this to process the log message as they see fit.
325      * @param consoleMessage Object containing details of the console message.
326      * @return true if the message is handled by the client.
327      */
onConsoleMessage(ConsoleMessage consoleMessage)328     public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
329         // Call the old version of this function for backwards compatability.
330         onConsoleMessage(consoleMessage.message(), consoleMessage.lineNumber(),
331                 consoleMessage.sourceId());
332         return false;
333     }
334 
335     /**
336      * When not playing, video elements are represented by a 'poster' image. The
337      * image to use can be specified by the poster attribute of the video tag in
338      * HTML. If the attribute is absent, then a default poster will be used. This
339      * method allows the ChromeClient to provide that default image.
340      *
341      * @return Bitmap The image to use as a default poster, or null if no such image is
342      * available.
343      */
getDefaultVideoPoster()344     public Bitmap getDefaultVideoPoster() {
345         return null;
346     }
347 
348     /**
349      * When the user starts to playback a video element, it may take time for enough
350      * data to be buffered before the first frames can be rendered. While this buffering
351      * is taking place, the ChromeClient can use this function to provide a View to be
352      * displayed. For example, the ChromeClient could show a spinner animation.
353      *
354      * @return View The View to be displayed whilst the video is loading.
355      */
getVideoLoadingProgressView()356     public View getVideoLoadingProgressView() {
357         return null;
358     }
359 
360     /** Obtains a list of all visited history items, used for link coloring
361      */
getVisitedHistory(ValueCallback<String[]> callback)362     public void getVisitedHistory(ValueCallback<String[]> callback) {
363     }
364 
365     /**
366      * Tell the client to open a file chooser.
367      * @param uploadFile A ValueCallback to set the URI of the file to upload.
368      *      onReceiveValue must be called to wake up the thread.a
369      * @param acceptType The value of the 'accept' attribute of the input tag
370      *         associated with this file picker.
371      * @param capture The value of the 'capture' attribute of the input tag
372      *         associated with this file picker.
373      * @hide
374      */
openFileChooser(ValueCallback<Uri> uploadFile, String acceptType, String capture)375     public void openFileChooser(ValueCallback<Uri> uploadFile, String acceptType, String capture) {
376         uploadFile.onReceiveValue(null);
377     }
378 
379     /**
380      * Tell the client that the page being viewed has an autofillable
381      * form and the user would like to set a profile up.
382      * @param msg A Message to send once the user has successfully
383      *      set up a profile and to inform the WebTextView it should
384      *      now autofill using that new profile.
385      * @hide
386      */
setupAutoFill(Message msg)387     public void setupAutoFill(Message msg) { }
388 
389 }
390