• 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.  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      */
onShowCustomView(View view, CustomViewCallback callback)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
onShowCustomView(View view, int requestedOrientation, CustomViewCallback callback)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      */
onHideCustomView()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      */
onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg)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      */
onRequestFocus(WebView view)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      */
onCloseWindow(WebView window)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      */
onJsAlert(WebView view, String url, String message, JsResult result)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      */
onJsConfirm(WebView view, String url, String message, JsResult result)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      */
onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result)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      */
onJsBeforeUnload(WebView view, String url, String message, JsResult result)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
onExceededDatabaseQuota(String url, String databaseIdentifier, long quota, long estimatedDatabaseSize, long totalQuota, WebStorage.QuotaUpdater quotaUpdater)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
onReachedMaxAppCacheSize(long requiredStorage, long quota, WebStorage.QuotaUpdater quotaUpdater)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      */
onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback)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      */
onGeolocationPermissionsHidePrompt()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.
onJsTimeout()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
onConsoleMessage(String message, int lineNumber, String sourceID)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      */
onConsoleMessage(ConsoleMessage consoleMessage)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      */
getDefaultVideoPoster()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      */
getVideoLoadingProgressView()363     public View getVideoLoadingProgressView() {
364         return null;
365     }
366 
367     /** Obtains a list of all visited history items, used for link coloring
368      */
getVisitedHistory(ValueCallback<String[]> callback)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      */
openFileChooser(ValueCallback<Uri> uploadFile, String acceptType, String capture)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      */
setupAutoFill(Message msg)394     public void setupAutoFill(Message msg) { }
395 
396 }
397