Home | History | Annotate | Download | only in webkit
      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