Home | History | Annotate | Download | only in webkit
      1 /*
      2  * Copyright (C) 2007 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.annotation.IntDef;
     20 import android.annotation.Nullable;
     21 import android.annotation.SystemApi;
     22 import android.content.Context;
     23 
     24 import java.lang.annotation.ElementType;
     25 import java.lang.annotation.Retention;
     26 import java.lang.annotation.RetentionPolicy;
     27 import java.lang.annotation.Target;
     28 
     29 /**
     30  * Manages settings state for a WebView. When a WebView is first created, it
     31  * obtains a set of default settings. These default settings will be returned
     32  * from any getter call. A {@code WebSettings} object obtained from
     33  * {@link WebView#getSettings()} is tied to the life of the WebView. If a WebView has
     34  * been destroyed, any method call on {@code WebSettings} will throw an
     35  * {@link IllegalStateException}.
     36  */
     37 // This is an abstract base class: concrete WebViewProviders must
     38 // create a class derived from this, and return an instance of it in the
     39 // WebViewProvider.getWebSettingsProvider() method implementation.
     40 public abstract class WebSettings {
     41     /**
     42      * Enum for controlling the layout of html.
     43      * <ul>
     44      *   <li>{@code NORMAL} means no rendering changes. This is the recommended choice for maximum
     45      *       compatibility across different platforms and Android versions.</li>
     46      *   <li>{@code SINGLE_COLUMN} moves all content into one column that is the width of the
     47      *       view.</li>
     48      *   <li>{@code NARROW_COLUMNS} makes all columns no wider than the screen if possible. Only use
     49      *       this for API levels prior to {@link android.os.Build.VERSION_CODES#KITKAT}.</li>
     50      *   <li>{@code TEXT_AUTOSIZING} boosts font size of paragraphs based on heuristics to make
     51      *       the text readable when viewing a wide-viewport layout in the overview mode.
     52      *       It is recommended to enable zoom support {@link #setSupportZoom} when
     53      *       using this mode. Supported from API level
     54      *       {@link android.os.Build.VERSION_CODES#KITKAT}</li>
     55      * </ul>
     56      */
     57     // XXX: These must match LayoutAlgorithm in Settings.h in WebCore.
     58     public enum LayoutAlgorithm {
     59         NORMAL,
     60         /**
     61          * @deprecated This algorithm is now obsolete.
     62          */
     63         @Deprecated
     64         SINGLE_COLUMN,
     65         /**
     66          * @deprecated This algorithm is now obsolete.
     67          */
     68         @Deprecated
     69         NARROW_COLUMNS,
     70         TEXT_AUTOSIZING
     71     }
     72 
     73     /**
     74      * Enum for specifying the text size.
     75      * <ul>
     76      *   <li>SMALLEST is 50%</li>
     77      *   <li>SMALLER is 75%</li>
     78      *   <li>NORMAL is 100%</li>
     79      *   <li>LARGER is 150%</li>
     80      *   <li>LARGEST is 200%</li>
     81      * </ul>
     82      *
     83      * @deprecated Use {@link WebSettings#setTextZoom(int)} and {@link WebSettings#getTextZoom()} instead.
     84      */
     85     @Deprecated
     86     public enum TextSize {
     87         SMALLEST(50),
     88         SMALLER(75),
     89         NORMAL(100),
     90         LARGER(150),
     91         LARGEST(200);
     92         TextSize(int size) {
     93             value = size;
     94         }
     95         int value;
     96     }
     97 
     98     /**
     99      * Enum for specifying the WebView's desired density.
    100      * <ul>
    101      *   <li>{@code FAR} makes 100% looking like in 240dpi</li>
    102      *   <li>{@code MEDIUM} makes 100% looking like in 160dpi</li>
    103      *   <li>{@code CLOSE} makes 100% looking like in 120dpi</li>
    104      * </ul>
    105      */
    106     public enum ZoomDensity {
    107         FAR(150),      // 240dpi
    108         MEDIUM(100),    // 160dpi
    109         CLOSE(75);     // 120dpi
    110         ZoomDensity(int size) {
    111             value = size;
    112         }
    113 
    114         /**
    115          * @hide Only for use by WebViewProvider implementations
    116          */
    117         public int getValue() {
    118             return value;
    119         }
    120 
    121         int value;
    122     }
    123 
    124     /** @hide */
    125     @IntDef(prefix = { "LOAD_" }, value = {
    126             LOAD_DEFAULT,
    127             LOAD_NORMAL,
    128             LOAD_CACHE_ELSE_NETWORK,
    129             LOAD_NO_CACHE,
    130             LOAD_CACHE_ONLY
    131     })
    132     @Retention(RetentionPolicy.SOURCE)
    133     public @interface CacheMode {}
    134 
    135     /**
    136      * Default cache usage mode. If the navigation type doesn't impose any
    137      * specific behavior, use cached resources when they are available
    138      * and not expired, otherwise load resources from the network.
    139      * Use with {@link #setCacheMode}.
    140      */
    141     public static final int LOAD_DEFAULT = -1;
    142 
    143     /**
    144      * Normal cache usage mode. Use with {@link #setCacheMode}.
    145      *
    146      * @deprecated This value is obsolete, as from API level
    147      * {@link android.os.Build.VERSION_CODES#HONEYCOMB} and onwards it has the
    148      * same effect as {@link #LOAD_DEFAULT}.
    149      */
    150     @Deprecated
    151     public static final int LOAD_NORMAL = 0;
    152 
    153     /**
    154      * Use cached resources when they are available, even if they have expired.
    155      * Otherwise load resources from the network.
    156      * Use with {@link #setCacheMode}.
    157      */
    158     public static final int LOAD_CACHE_ELSE_NETWORK = 1;
    159 
    160     /**
    161      * Don't use the cache, load from the network.
    162      * Use with {@link #setCacheMode}.
    163      */
    164     public static final int LOAD_NO_CACHE = 2;
    165 
    166     /**
    167      * Don't use the network, load from the cache.
    168      * Use with {@link #setCacheMode}.
    169      */
    170     public static final int LOAD_CACHE_ONLY = 3;
    171 
    172     public enum RenderPriority {
    173         NORMAL,
    174         HIGH,
    175         LOW
    176     }
    177 
    178     /**
    179      * The plugin state effects how plugins are treated on a page. ON means
    180      * that any object will be loaded even if a plugin does not exist to handle
    181      * the content. ON_DEMAND means that if there is a plugin installed that
    182      * can handle the content, a placeholder is shown until the user clicks on
    183      * the placeholder. Once clicked, the plugin will be enabled on the page.
    184      * OFF means that all plugins will be turned off and any fallback content
    185      * will be used.
    186      */
    187     public enum PluginState {
    188         ON,
    189         ON_DEMAND,
    190         OFF
    191     }
    192 
    193     /**
    194      * Used with {@link #setMixedContentMode}
    195      *
    196      * In this mode, the WebView will allow a secure origin to load content from any other origin,
    197      * even if that origin is insecure. This is the least secure mode of operation for the WebView,
    198      * and where possible apps should not set this mode.
    199      */
    200     public static final int MIXED_CONTENT_ALWAYS_ALLOW = 0;
    201 
    202     /**
    203      * Used with {@link #setMixedContentMode}
    204      *
    205      * In this mode, the WebView will not allow a secure origin to load content from an insecure
    206      * origin. This is the preferred and most secure mode of operation for the WebView and apps are
    207      * strongly advised to use this mode.
    208      */
    209     public static final int MIXED_CONTENT_NEVER_ALLOW = 1;
    210 
    211     /**
    212      * Used with {@link #setMixedContentMode}
    213      *
    214      * In this mode, the WebView will attempt to be compatible with the approach of a modern web
    215      * browser with regard to mixed content. Some insecure content may be allowed to be loaded by
    216      * a secure origin and other types of content will be blocked. The types of content are allowed
    217      * or blocked may change release to release and are not explicitly defined.
    218      *
    219      * This mode is intended to be used by apps that are not in control of the content that they
    220      * render but desire to operate in a reasonably secure environment. For highest security, apps
    221      * are recommended to use {@link #MIXED_CONTENT_NEVER_ALLOW}.
    222      */
    223     public static final int MIXED_CONTENT_COMPATIBILITY_MODE = 2;
    224 
    225     /**
    226      * Enables dumping the pages navigation cache to a text file. The default
    227      * is {@code false}.
    228      *
    229      * @deprecated This method is now obsolete.
    230      * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1}
    231      */
    232     @SystemApi
    233     @Deprecated
    234     public abstract void setNavDump(boolean enabled);
    235 
    236     /**
    237      * Gets whether dumping the navigation cache is enabled.
    238      *
    239      * @return whether dumping the navigation cache is enabled
    240      * @see #setNavDump
    241      * @deprecated This method is now obsolete.
    242      * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1}
    243      */
    244     @SystemApi
    245     @Deprecated
    246     public abstract boolean getNavDump();
    247 
    248     /**
    249      * Sets whether the WebView should support zooming using its on-screen zoom
    250      * controls and gestures. The particular zoom mechanisms that should be used
    251      * can be set with {@link #setBuiltInZoomControls}. This setting does not
    252      * affect zooming performed using the {@link WebView#zoomIn()} and
    253      * {@link WebView#zoomOut()} methods. The default is {@code true}.
    254      *
    255      * @param support whether the WebView should support zoom
    256      */
    257     public abstract void setSupportZoom(boolean support);
    258 
    259     /**
    260      * Gets whether the WebView supports zoom.
    261      *
    262      * @return {@code true} if the WebView supports zoom
    263      * @see #setSupportZoom
    264      */
    265     public abstract boolean supportZoom();
    266 
    267     /**
    268      * Sets whether the WebView requires a user gesture to play media.
    269      * The default is {@code true}.
    270      *
    271      * @param require whether the WebView requires a user gesture to play media
    272      */
    273     public abstract void setMediaPlaybackRequiresUserGesture(boolean require);
    274 
    275     /**
    276      * Gets whether the WebView requires a user gesture to play media.
    277      *
    278      * @return {@code true} if the WebView requires a user gesture to play media
    279      * @see #setMediaPlaybackRequiresUserGesture
    280      */
    281     public abstract boolean getMediaPlaybackRequiresUserGesture();
    282 
    283     /**
    284      * Sets whether the WebView should use its built-in zoom mechanisms. The
    285      * built-in zoom mechanisms comprise on-screen zoom controls, which are
    286      * displayed over the WebView's content, and the use of a pinch gesture to
    287      * control zooming. Whether or not these on-screen controls are displayed
    288      * can be set with {@link #setDisplayZoomControls}. The default is {@code false}.
    289      * <p>
    290      * The built-in mechanisms are the only currently supported zoom
    291      * mechanisms, so it is recommended that this setting is always enabled.
    292      *
    293      * @param enabled whether the WebView should use its built-in zoom mechanisms
    294      */
    295     // This method was intended to select between the built-in zoom mechanisms
    296     // and the separate zoom controls. The latter were obtained using
    297     // {@link WebView#getZoomControls}, which is now hidden.
    298     public abstract void setBuiltInZoomControls(boolean enabled);
    299 
    300     /**
    301      * Gets whether the zoom mechanisms built into WebView are being used.
    302      *
    303      * @return {@code true} if the zoom mechanisms built into WebView are being used
    304      * @see #setBuiltInZoomControls
    305      */
    306     public abstract boolean getBuiltInZoomControls();
    307 
    308     /**
    309      * Sets whether the WebView should display on-screen zoom controls when
    310      * using the built-in zoom mechanisms. See {@link #setBuiltInZoomControls}.
    311      * The default is {@code true}.
    312      *
    313      * @param enabled whether the WebView should display on-screen zoom controls
    314      */
    315     public abstract void setDisplayZoomControls(boolean enabled);
    316 
    317     /**
    318      * Gets whether the WebView displays on-screen zoom controls when using
    319      * the built-in zoom mechanisms.
    320      *
    321      * @return {@code true} if the WebView displays on-screen zoom controls when using
    322      *         the built-in zoom mechanisms
    323      * @see #setDisplayZoomControls
    324      */
    325     public abstract boolean getDisplayZoomControls();
    326 
    327     /**
    328      * Enables or disables file access within WebView. File access is enabled by
    329      * default.  Note that this enables or disables file system access only.
    330      * Assets and resources are still accessible using file:///android_asset and
    331      * file:///android_res.
    332      */
    333     public abstract void setAllowFileAccess(boolean allow);
    334 
    335     /**
    336      * Gets whether this WebView supports file access.
    337      *
    338      * @see #setAllowFileAccess
    339      */
    340     public abstract boolean getAllowFileAccess();
    341 
    342     /**
    343      * Enables or disables content URL access within WebView.  Content URL
    344      * access allows WebView to load content from a content provider installed
    345      * in the system. The default is enabled.
    346      */
    347     public abstract void setAllowContentAccess(boolean allow);
    348 
    349     /**
    350      * Gets whether this WebView supports content URL access.
    351      *
    352      * @see #setAllowContentAccess
    353      */
    354     public abstract boolean getAllowContentAccess();
    355 
    356     /**
    357      * Sets whether the WebView loads pages in overview mode, that is,
    358      * zooms out the content to fit on screen by width. This setting is
    359      * taken into account when the content width is greater than the width
    360      * of the WebView control, for example, when {@link #getUseWideViewPort}
    361      * is enabled. The default is {@code false}.
    362      */
    363     public abstract void setLoadWithOverviewMode(boolean overview);
    364 
    365     /**
    366      * Gets whether this WebView loads pages in overview mode.
    367      *
    368      * @return whether this WebView loads pages in overview mode
    369      * @see #setLoadWithOverviewMode
    370      */
    371     public abstract boolean getLoadWithOverviewMode();
    372 
    373     /**
    374      * Sets whether the WebView will enable smooth transition while panning or
    375      * zooming or while the window hosting the WebView does not have focus.
    376      * If it is {@code true}, WebView will choose a solution to maximize the performance.
    377      * e.g. the WebView's content may not be updated during the transition.
    378      * If it is false, WebView will keep its fidelity. The default value is {@code false}.
    379      *
    380      * @deprecated This method is now obsolete, and will become a no-op in future.
    381      */
    382     @Deprecated
    383     public abstract void setEnableSmoothTransition(boolean enable);
    384 
    385     /**
    386      * Gets whether the WebView enables smooth transition while panning or
    387      * zooming.
    388      *
    389      * @see #setEnableSmoothTransition
    390      *
    391      * @deprecated This method is now obsolete, and will become a no-op in future.
    392      */
    393     @Deprecated
    394     public abstract  boolean enableSmoothTransition();
    395 
    396     /**
    397      * Sets whether the WebView uses its background for over scroll background.
    398      * If {@code true}, it will use the WebView's background. If {@code false}, it will use an
    399      * internal pattern. Default is {@code true}.
    400      *
    401      * @deprecated This method is now obsolete.
    402      * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1}
    403      */
    404     @SystemApi
    405     @Deprecated
    406     public abstract  void setUseWebViewBackgroundForOverscrollBackground(boolean view);
    407 
    408     /**
    409      * Gets whether this WebView uses WebView's background instead of
    410      * internal pattern for over scroll background.
    411      *
    412      * @see #setUseWebViewBackgroundForOverscrollBackground
    413      * @deprecated This method is now obsolete.
    414      * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1}
    415      */
    416     @SystemApi
    417     @Deprecated
    418     public abstract  boolean getUseWebViewBackgroundForOverscrollBackground();
    419 
    420     /**
    421      * Sets whether the WebView should save form data. In Android O, the
    422      * platform has implemented a fully functional Autofill feature to store
    423      * form data. Therefore, the Webview form data save feature is disabled.
    424      *
    425      * Note that the feature will continue to be supported on older versions of
    426      * Android as before.
    427      *
    428      * This function does not have any effect.
    429      */
    430     @Deprecated
    431     public abstract  void setSaveFormData(boolean save);
    432 
    433     /**
    434      * Gets whether the WebView saves form data.
    435      *
    436      * @return whether the WebView saves form data
    437      * @see #setSaveFormData
    438      */
    439     @Deprecated
    440     public abstract boolean getSaveFormData();
    441 
    442     /**
    443      * Sets whether the WebView should save passwords. The default is {@code true}.
    444      * @deprecated Saving passwords in WebView will not be supported in future versions.
    445      */
    446     @Deprecated
    447     public abstract void setSavePassword(boolean save);
    448 
    449     /**
    450      * Gets whether the WebView saves passwords.
    451      *
    452      * @return whether the WebView saves passwords
    453      * @see #setSavePassword
    454      * @deprecated Saving passwords in WebView will not be supported in future versions.
    455      */
    456     @Deprecated
    457     public abstract boolean getSavePassword();
    458 
    459     /**
    460      * Sets the text zoom of the page in percent. The default is 100.
    461      *
    462      * @param textZoom the text zoom in percent
    463      */
    464     public abstract void setTextZoom(int textZoom);
    465 
    466     /**
    467      * Gets the text zoom of the page in percent.
    468      *
    469      * @return the text zoom of the page in percent
    470      * @see #setTextZoom
    471      */
    472     public abstract int getTextZoom();
    473 
    474     /**
    475      * Sets policy for third party cookies.
    476      * Developers should access this via {@link CookieManager#setShouldAcceptThirdPartyCookies}.
    477      * @hide Internal API.
    478      */
    479     @SystemApi
    480     public abstract void setAcceptThirdPartyCookies(boolean accept);
    481 
    482     /**
    483      * Gets policy for third party cookies.
    484      * Developers should access this via {@link CookieManager#getShouldAcceptThirdPartyCookies}.
    485      * @hide Internal API
    486      */
    487     @SystemApi
    488     public abstract boolean getAcceptThirdPartyCookies();
    489 
    490     /**
    491      * Sets the text size of the page. The default is {@link TextSize#NORMAL}.
    492      *
    493      * @param t the text size as a {@link TextSize} value
    494      * @deprecated Use {@link #setTextZoom} instead.
    495      */
    496     @Deprecated
    497     public synchronized void setTextSize(TextSize t) {
    498         setTextZoom(t.value);
    499     }
    500 
    501     /**
    502      * Gets the text size of the page. If the text size was previously specified
    503      * in percent using {@link #setTextZoom}, this will return the closest
    504      * matching {@link TextSize}.
    505      *
    506      * @return the text size as a {@link TextSize} value
    507      * @see #setTextSize
    508      * @deprecated Use {@link #getTextZoom} instead.
    509      */
    510     @Deprecated
    511     public synchronized TextSize getTextSize() {
    512         TextSize closestSize = null;
    513         int smallestDelta = Integer.MAX_VALUE;
    514         int textSize = getTextZoom();
    515         for (TextSize size : TextSize.values()) {
    516             int delta = Math.abs(textSize - size.value);
    517             if (delta == 0) {
    518                 return size;
    519             }
    520             if (delta < smallestDelta) {
    521                 smallestDelta = delta;
    522                 closestSize = size;
    523             }
    524         }
    525         return closestSize != null ? closestSize : TextSize.NORMAL;
    526     }
    527 
    528     /**
    529      * Sets the default zoom density of the page. This must be called from the UI
    530      * thread. The default is {@link ZoomDensity#MEDIUM}.
    531      *
    532      * This setting is not recommended for use in new applications.  If the WebView
    533      * is utilized to display mobile-oriented pages, the desired effect can be achieved by
    534      * adjusting 'width' and 'initial-scale' attributes of page's 'meta viewport'
    535      * tag. For pages lacking the tag, {@link android.webkit.WebView#setInitialScale}
    536      * and {@link #setUseWideViewPort} can be used.
    537      *
    538      * @param zoom the zoom density
    539      * @deprecated This method is no longer supported, see the function documentation for
    540      *             recommended alternatives.
    541      */
    542     @Deprecated
    543     public abstract void setDefaultZoom(ZoomDensity zoom);
    544 
    545     /**
    546      * Gets the default zoom density of the page. This should be called from
    547      * the UI thread.
    548      *
    549      * This setting is not recommended for use in new applications.
    550      *
    551      * @return the zoom density
    552      * @see #setDefaultZoom
    553      * @deprecated Will only return the default value.
    554      */
    555     @Deprecated
    556     public abstract ZoomDensity getDefaultZoom();
    557 
    558     /**
    559      * Enables using light touches to make a selection and activate mouseovers.
    560      * @deprecated From {@link android.os.Build.VERSION_CODES#JELLY_BEAN} this
    561      *             setting is obsolete and has no effect.
    562      */
    563     @Deprecated
    564     public abstract void setLightTouchEnabled(boolean enabled);
    565 
    566     /**
    567      * Gets whether light touches are enabled.
    568      * @see #setLightTouchEnabled
    569      * @deprecated This setting is obsolete.
    570      */
    571     @Deprecated
    572     public abstract boolean getLightTouchEnabled();
    573 
    574     /**
    575      * Controlled a rendering optimization that is no longer present. Setting
    576      * it now has no effect.
    577      *
    578      * @deprecated This setting now has no effect.
    579      * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1}
    580      */
    581     @Deprecated
    582     public void setUseDoubleTree(boolean use) {
    583         // Specified to do nothing, so no need for derived classes to override.
    584     }
    585 
    586     /**
    587      * Controlled a rendering optimization that is no longer present. Setting
    588      * it now has no effect.
    589      *
    590      * @deprecated This setting now has no effect.
    591      * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1}
    592      */
    593     @Deprecated
    594     public boolean getUseDoubleTree() {
    595         // Returns false unconditionally, so no need for derived classes to override.
    596         return false;
    597     }
    598 
    599     /**
    600      * Sets the user-agent string using an integer code.
    601      * <ul>
    602      *   <li>0 means the WebView should use an Android user-agent string</li>
    603      *   <li>1 means the WebView should use a desktop user-agent string</li>
    604      * </ul>
    605      * Other values are ignored. The default is an Android user-agent string,
    606      * i.e. code value 0.
    607      *
    608      * @param ua the integer code for the user-agent string
    609      * @deprecated Please use {@link #setUserAgentString} instead.
    610      * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1}
    611      */
    612     @SystemApi
    613     @Deprecated
    614     public abstract void setUserAgent(int ua);
    615 
    616     /**
    617      * Gets the user-agent as an integer code.
    618      * <ul>
    619      *   <li>-1 means the WebView is using a custom user-agent string set with
    620      *   {@link #setUserAgentString}</li>
    621      *   <li>0 means the WebView should use an Android user-agent string</li>
    622      *   <li>1 means the WebView should use a desktop user-agent string</li>
    623      * </ul>
    624      *
    625      * @return the integer code for the user-agent string
    626      * @see #setUserAgent
    627      * @deprecated Please use {@link #getUserAgentString} instead.
    628      * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1}
    629      */
    630     @SystemApi
    631     @Deprecated
    632     public abstract int getUserAgent();
    633 
    634     /**
    635      * Sets whether the WebView should enable support for the &quot;viewport&quot;
    636      * HTML meta tag or should use a wide viewport.
    637      * When the value of the setting is {@code false}, the layout width is always set to the
    638      * width of the WebView control in device-independent (CSS) pixels.
    639      * When the value is {@code true} and the page contains the viewport meta tag, the value
    640      * of the width specified in the tag is used. If the page does not contain the tag or
    641      * does not provide a width, then a wide viewport will be used.
    642      *
    643      * @param use whether to enable support for the viewport meta tag
    644      */
    645     public abstract void setUseWideViewPort(boolean use);
    646 
    647     /**
    648      * Gets whether the WebView supports the &quot;viewport&quot;
    649      * HTML meta tag or will use a wide viewport.
    650      *
    651      * @return {@code true} if the WebView supports the viewport meta tag
    652      * @see #setUseWideViewPort
    653      */
    654     public abstract boolean getUseWideViewPort();
    655 
    656     /**
    657      * Sets whether the WebView whether supports multiple windows. If set to
    658      * true, {@link WebChromeClient#onCreateWindow} must be implemented by the
    659      * host application. The default is {@code false}.
    660      *
    661      * @param support whether to support multiple windows
    662      */
    663     public abstract void setSupportMultipleWindows(boolean support);
    664 
    665     /**
    666      * Gets whether the WebView supports multiple windows.
    667      *
    668      * @return {@code true} if the WebView supports multiple windows
    669      * @see #setSupportMultipleWindows
    670      */
    671     public abstract boolean supportMultipleWindows();
    672 
    673     /**
    674      * Sets the underlying layout algorithm. This will cause a re-layout of the
    675      * WebView. The default is {@link LayoutAlgorithm#NARROW_COLUMNS}.
    676      *
    677      * @param l the layout algorithm to use, as a {@link LayoutAlgorithm} value
    678      */
    679     public abstract void setLayoutAlgorithm(LayoutAlgorithm l);
    680 
    681     /**
    682      * Gets the current layout algorithm.
    683      *
    684      * @return the layout algorithm in use, as a {@link LayoutAlgorithm} value
    685      * @see #setLayoutAlgorithm
    686      */
    687     public abstract LayoutAlgorithm getLayoutAlgorithm();
    688 
    689     /**
    690      * Sets the standard font family name. The default is "sans-serif".
    691      *
    692      * @param font a font family name
    693      */
    694     public abstract void setStandardFontFamily(String font);
    695 
    696     /**
    697      * Gets the standard font family name.
    698      *
    699      * @return the standard font family name as a string
    700      * @see #setStandardFontFamily
    701      */
    702     public abstract String getStandardFontFamily();
    703 
    704     /**
    705      * Sets the fixed font family name. The default is "monospace".
    706      *
    707      * @param font a font family name
    708      */
    709     public abstract void setFixedFontFamily(String font);
    710 
    711     /**
    712      * Gets the fixed font family name.
    713      *
    714      * @return the fixed font family name as a string
    715      * @see #setFixedFontFamily
    716      */
    717     public abstract String getFixedFontFamily();
    718 
    719     /**
    720      * Sets the sans-serif font family name. The default is "sans-serif".
    721      *
    722      * @param font a font family name
    723      */
    724     public abstract void setSansSerifFontFamily(String font);
    725 
    726     /**
    727      * Gets the sans-serif font family name.
    728      *
    729      * @return the sans-serif font family name as a string
    730      * @see #setSansSerifFontFamily
    731      */
    732     public abstract String getSansSerifFontFamily();
    733 
    734     /**
    735      * Sets the serif font family name. The default is "sans-serif".
    736      *
    737      * @param font a font family name
    738      */
    739     public abstract void setSerifFontFamily(String font);
    740 
    741     /**
    742      * Gets the serif font family name. The default is "serif".
    743      *
    744      * @return the serif font family name as a string
    745      * @see #setSerifFontFamily
    746      */
    747     public abstract String getSerifFontFamily();
    748 
    749     /**
    750      * Sets the cursive font family name. The default is "cursive".
    751      *
    752      * @param font a font family name
    753      */
    754     public abstract void setCursiveFontFamily(String font);
    755 
    756     /**
    757      * Gets the cursive font family name.
    758      *
    759      * @return the cursive font family name as a string
    760      * @see #setCursiveFontFamily
    761      */
    762     public abstract String getCursiveFontFamily();
    763 
    764     /**
    765      * Sets the fantasy font family name. The default is "fantasy".
    766      *
    767      * @param font a font family name
    768      */
    769     public abstract void setFantasyFontFamily(String font);
    770 
    771     /**
    772      * Gets the fantasy font family name.
    773      *
    774      * @return the fantasy font family name as a string
    775      * @see #setFantasyFontFamily
    776      */
    777     public abstract String getFantasyFontFamily();
    778 
    779     /**
    780      * Sets the minimum font size. The default is 8.
    781      *
    782      * @param size a non-negative integer between 1 and 72. Any number outside
    783      *             the specified range will be pinned.
    784      */
    785     public abstract void setMinimumFontSize(int size);
    786 
    787     /**
    788      * Gets the minimum font size.
    789      *
    790      * @return a non-negative integer between 1 and 72
    791      * @see #setMinimumFontSize
    792      */
    793     public abstract int getMinimumFontSize();
    794 
    795     /**
    796      * Sets the minimum logical font size. The default is 8.
    797      *
    798      * @param size a non-negative integer between 1 and 72. Any number outside
    799      *             the specified range will be pinned.
    800      */
    801     public abstract void setMinimumLogicalFontSize(int size);
    802 
    803     /**
    804      * Gets the minimum logical font size.
    805      *
    806      * @return a non-negative integer between 1 and 72
    807      * @see #setMinimumLogicalFontSize
    808      */
    809     public abstract int getMinimumLogicalFontSize();
    810 
    811     /**
    812      * Sets the default font size. The default is 16.
    813      *
    814      * @param size a non-negative integer between 1 and 72. Any number outside
    815      *             the specified range will be pinned.
    816      */
    817     public abstract void setDefaultFontSize(int size);
    818 
    819     /**
    820      * Gets the default font size.
    821      *
    822      * @return a non-negative integer between 1 and 72
    823      * @see #setDefaultFontSize
    824      */
    825     public abstract int getDefaultFontSize();
    826 
    827     /**
    828      * Sets the default fixed font size. The default is 16.
    829      *
    830      * @param size a non-negative integer between 1 and 72. Any number outside
    831      *             the specified range will be pinned.
    832      */
    833     public abstract void setDefaultFixedFontSize(int size);
    834 
    835     /**
    836      * Gets the default fixed font size.
    837      *
    838      * @return a non-negative integer between 1 and 72
    839      * @see #setDefaultFixedFontSize
    840      */
    841     public abstract int getDefaultFixedFontSize();
    842 
    843     /**
    844      * Sets whether the WebView should load image resources. Note that this method
    845      * controls loading of all images, including those embedded using the data
    846      * URI scheme. Use {@link #setBlockNetworkImage} to control loading only
    847      * of images specified using network URI schemes. Note that if the value of this
    848      * setting is changed from {@code false} to {@code true}, all images resources referenced
    849      * by content currently displayed by the WebView are loaded automatically.
    850      * The default is {@code true}.
    851      *
    852      * @param flag whether the WebView should load image resources
    853      */
    854     public abstract void setLoadsImagesAutomatically(boolean flag);
    855 
    856     /**
    857      * Gets whether the WebView loads image resources. This includes
    858      * images embedded using the data URI scheme.
    859      *
    860      * @return {@code true} if the WebView loads image resources
    861      * @see #setLoadsImagesAutomatically
    862      */
    863     public abstract boolean getLoadsImagesAutomatically();
    864 
    865     /**
    866      * Sets whether the WebView should not load image resources from the
    867      * network (resources accessed via http and https URI schemes).  Note
    868      * that this method has no effect unless
    869      * {@link #getLoadsImagesAutomatically} returns {@code true}. Also note that
    870      * disabling all network loads using {@link #setBlockNetworkLoads}
    871      * will also prevent network images from loading, even if this flag is set
    872      * to false. When the value of this setting is changed from {@code true} to {@code false},
    873      * network images resources referenced by content currently displayed by
    874      * the WebView are fetched automatically. The default is {@code false}.
    875      *
    876      * @param flag whether the WebView should not load image resources from the
    877      *             network
    878      * @see #setBlockNetworkLoads
    879      */
    880     public abstract void setBlockNetworkImage(boolean flag);
    881 
    882     /**
    883      * Gets whether the WebView does not load image resources from the network.
    884      *
    885      * @return {@code true} if the WebView does not load image resources from the network
    886      * @see #setBlockNetworkImage
    887      */
    888     public abstract boolean getBlockNetworkImage();
    889 
    890     /**
    891      * Sets whether the WebView should not load resources from the network.
    892      * Use {@link #setBlockNetworkImage} to only avoid loading
    893      * image resources. Note that if the value of this setting is
    894      * changed from {@code true} to {@code false}, network resources referenced by content
    895      * currently displayed by the WebView are not fetched until
    896      * {@link android.webkit.WebView#reload} is called.
    897      * If the application does not have the
    898      * {@link android.Manifest.permission#INTERNET} permission, attempts to set
    899      * a value of {@code false} will cause a {@link java.lang.SecurityException}
    900      * to be thrown. The default value is {@code false} if the application has the
    901      * {@link android.Manifest.permission#INTERNET} permission, otherwise it is
    902      * {@code true}.
    903      *
    904      * @param flag {@code true} means block network loads by the WebView
    905      * @see android.webkit.WebView#reload
    906      */
    907     public abstract void setBlockNetworkLoads(boolean flag);
    908 
    909     /**
    910      * Gets whether the WebView does not load any resources from the network.
    911      *
    912      * @return {@code true} if the WebView does not load any resources from the network
    913      * @see #setBlockNetworkLoads
    914      */
    915     public abstract boolean getBlockNetworkLoads();
    916 
    917     /**
    918      * Tells the WebView to enable JavaScript execution.
    919      * <b>The default is {@code false}.</b>
    920      *
    921      * @param flag {@code true} if the WebView should execute JavaScript
    922      */
    923     public abstract void setJavaScriptEnabled(boolean flag);
    924 
    925     /**
    926      * Sets whether JavaScript running in the context of a file scheme URL
    927      * should be allowed to access content from any origin. This includes
    928      * access to content from other file scheme URLs. See
    929      * {@link #setAllowFileAccessFromFileURLs}. To enable the most restrictive,
    930      * and therefore secure policy, this setting should be disabled.
    931      * Note that this setting affects only JavaScript access to file scheme
    932      * resources. Other access to such resources, for example, from image HTML
    933      * elements, is unaffected. To prevent possible violation of same domain policy
    934      * when targeting {@link android.os.Build.VERSION_CODES#ICE_CREAM_SANDWICH_MR1} and earlier,
    935      * you should explicitly set this value to {@code false}.
    936      * <p>
    937      * The default value is {@code true} for apps targeting
    938      * {@link android.os.Build.VERSION_CODES#ICE_CREAM_SANDWICH_MR1} and below,
    939      * and {@code false} when targeting {@link android.os.Build.VERSION_CODES#JELLY_BEAN}
    940      * and above.
    941      *
    942      * @param flag whether JavaScript running in the context of a file scheme
    943      *             URL should be allowed to access content from any origin
    944      */
    945     public abstract void setAllowUniversalAccessFromFileURLs(boolean flag);
    946 
    947     /**
    948      * Sets whether JavaScript running in the context of a file scheme URL
    949      * should be allowed to access content from other file scheme URLs. To
    950      * enable the most restrictive, and therefore secure, policy this setting
    951      * should be disabled. Note that the value of this setting is ignored if
    952      * the value of {@link #getAllowUniversalAccessFromFileURLs} is {@code true}.
    953      * Note too, that this setting affects only JavaScript access to file scheme
    954      * resources. Other access to such resources, for example, from image HTML
    955      * elements, is unaffected. To prevent possible violation of same domain policy
    956      * when targeting {@link android.os.Build.VERSION_CODES#ICE_CREAM_SANDWICH_MR1} and earlier,
    957      * you should explicitly set this value to {@code false}.
    958      * <p>
    959      * The default value is {@code true} for apps targeting
    960      * {@link android.os.Build.VERSION_CODES#ICE_CREAM_SANDWICH_MR1} and below,
    961      * and {@code false} when targeting {@link android.os.Build.VERSION_CODES#JELLY_BEAN}
    962      * and above.
    963      *
    964      * @param flag whether JavaScript running in the context of a file scheme
    965      *             URL should be allowed to access content from other file
    966      *             scheme URLs
    967      */
    968     public abstract void setAllowFileAccessFromFileURLs(boolean flag);
    969 
    970     /**
    971      * Sets whether the WebView should enable plugins. The default is {@code false}.
    972      *
    973      * @param flag {@code true} if plugins should be enabled
    974      * @deprecated This method has been deprecated in favor of
    975      *             {@link #setPluginState}
    976      * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR2}
    977      */
    978     @SystemApi
    979     @Deprecated
    980     public abstract void setPluginsEnabled(boolean flag);
    981 
    982     /**
    983      * Tells the WebView to enable, disable, or have plugins on demand. On
    984      * demand mode means that if a plugin exists that can handle the embedded
    985      * content, a placeholder icon will be shown instead of the plugin. When
    986      * the placeholder is clicked, the plugin will be enabled. The default is
    987      * {@link PluginState#OFF}.
    988      *
    989      * @param state a PluginState value
    990      * @deprecated Plugins will not be supported in future, and should not be used.
    991      */
    992     @Deprecated
    993     public abstract void setPluginState(PluginState state);
    994 
    995     /**
    996      * Sets a custom path to plugins used by the WebView. This method is
    997      * obsolete since each plugin is now loaded from its own package.
    998      *
    999      * @param pluginsPath a String path to the directory containing plugins
   1000      * @deprecated This method is no longer used as plugins are loaded from
   1001      *             their own APK via the system's package manager.
   1002      * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR2}
   1003      */
   1004     @Deprecated
   1005     public void setPluginsPath(String pluginsPath) {
   1006         // Specified to do nothing, so no need for derived classes to override.
   1007     }
   1008 
   1009     /**
   1010      * Sets the path to where database storage API databases should be saved.
   1011      * In order for the database storage API to function correctly, this method
   1012      * must be called with a path to which the application can write. This
   1013      * method should only be called once: repeated calls are ignored.
   1014      *
   1015      * @param databasePath a path to the directory where databases should be
   1016      *                     saved.
   1017      * @deprecated Database paths are managed by the implementation and calling this method
   1018      *             will have no effect.
   1019      */
   1020     @Deprecated
   1021     public abstract void setDatabasePath(String databasePath);
   1022 
   1023     /**
   1024      * Sets the path where the Geolocation databases should be saved. In order
   1025      * for Geolocation permissions and cached positions to be persisted, this
   1026      * method must be called with a path to which the application can write.
   1027      *
   1028      * @param databasePath a path to the directory where databases should be
   1029      *                     saved.
   1030      * @deprecated Geolocation database are managed by the implementation and calling this method
   1031      *             will have no effect.
   1032      */
   1033     @Deprecated
   1034     public abstract void setGeolocationDatabasePath(String databasePath);
   1035 
   1036     /**
   1037      * Sets whether the Application Caches API should be enabled. The default
   1038      * is {@code false}. Note that in order for the Application Caches API to be
   1039      * enabled, a valid database path must also be supplied to
   1040      * {@link #setAppCachePath}.
   1041      *
   1042      * @param flag {@code true} if the WebView should enable Application Caches
   1043      */
   1044     public abstract void setAppCacheEnabled(boolean flag);
   1045 
   1046     /**
   1047      * Sets the path to the Application Caches files. In order for the
   1048      * Application Caches API to be enabled, this method must be called with a
   1049      * path to which the application can write. This method should only be
   1050      * called once: repeated calls are ignored.
   1051      *
   1052      * @param appCachePath a String path to the directory containing
   1053      *                     Application Caches files.
   1054      * @see #setAppCacheEnabled
   1055      */
   1056     public abstract void setAppCachePath(String appCachePath);
   1057 
   1058     /**
   1059      * Sets the maximum size for the Application Cache content. The passed size
   1060      * will be rounded to the nearest value that the database can support, so
   1061      * this should be viewed as a guide, not a hard limit. Setting the
   1062      * size to a value less than current database size does not cause the
   1063      * database to be trimmed. The default size is {@link Long#MAX_VALUE}.
   1064      * It is recommended to leave the maximum size set to the default value.
   1065      *
   1066      * @param appCacheMaxSize the maximum size in bytes
   1067      * @deprecated In future quota will be managed automatically.
   1068      */
   1069     @Deprecated
   1070     public abstract void setAppCacheMaxSize(long appCacheMaxSize);
   1071 
   1072     /**
   1073      * Sets whether the database storage API is enabled. The default value is
   1074      * false. See also {@link #setDatabasePath} for how to correctly set up the
   1075      * database storage API.
   1076      *
   1077      * This setting is global in effect, across all WebView instances in a process.
   1078      * Note you should only modify this setting prior to making <b>any</b> WebView
   1079      * page load within a given process, as the WebView implementation may ignore
   1080      * changes to this setting after that point.
   1081      *
   1082      * @param flag {@code true} if the WebView should use the database storage API
   1083      */
   1084     public abstract void setDatabaseEnabled(boolean flag);
   1085 
   1086     /**
   1087      * Sets whether the DOM storage API is enabled. The default value is {@code false}.
   1088      *
   1089      * @param flag {@code true} if the WebView should use the DOM storage API
   1090      */
   1091     public abstract void setDomStorageEnabled(boolean flag);
   1092 
   1093     /**
   1094      * Gets whether the DOM Storage APIs are enabled.
   1095      *
   1096      * @return {@code true} if the DOM Storage APIs are enabled
   1097      * @see #setDomStorageEnabled
   1098      */
   1099     public abstract boolean getDomStorageEnabled();
   1100 
   1101     /**
   1102      * Gets the path to where database storage API databases are saved.
   1103      *
   1104      * @return the String path to the database storage API databases
   1105      * @see #setDatabasePath
   1106      * @deprecated Database paths are managed by the implementation this method is obsolete.
   1107      */
   1108     @Deprecated
   1109     public abstract String getDatabasePath();
   1110 
   1111     /**
   1112      * Gets whether the database storage API is enabled.
   1113      *
   1114      * @return {@code true} if the database storage API is enabled
   1115      * @see #setDatabaseEnabled
   1116      */
   1117     public abstract boolean getDatabaseEnabled();
   1118 
   1119     /**
   1120      * Sets whether Geolocation is enabled. The default is {@code true}.
   1121      * <p>
   1122      * Please note that in order for the Geolocation API to be usable
   1123      * by a page in the WebView, the following requirements must be met:
   1124      * <ul>
   1125      *   <li>an application must have permission to access the device location,
   1126      *   see {@link android.Manifest.permission#ACCESS_COARSE_LOCATION},
   1127      *   {@link android.Manifest.permission#ACCESS_FINE_LOCATION};
   1128      *   <li>an application must provide an implementation of the
   1129      *   {@link WebChromeClient#onGeolocationPermissionsShowPrompt} callback
   1130      *   to receive notifications that a page is requesting access to location
   1131      *   via the JavaScript Geolocation API.
   1132      * </ul>
   1133      * <p>
   1134      *
   1135      * @param flag whether Geolocation should be enabled
   1136      */
   1137     public abstract void setGeolocationEnabled(boolean flag);
   1138 
   1139     /**
   1140      * Gets whether JavaScript is enabled.
   1141      *
   1142      * @return {@code true} if JavaScript is enabled
   1143      * @see #setJavaScriptEnabled
   1144      */
   1145     public abstract boolean getJavaScriptEnabled();
   1146 
   1147     /**
   1148      * Gets whether JavaScript running in the context of a file scheme URL can
   1149      * access content from any origin. This includes access to content from
   1150      * other file scheme URLs.
   1151      *
   1152      * @return whether JavaScript running in the context of a file scheme URL
   1153      *         can access content from any origin
   1154      * @see #setAllowUniversalAccessFromFileURLs
   1155      */
   1156     public abstract boolean getAllowUniversalAccessFromFileURLs();
   1157 
   1158     /**
   1159      * Gets whether JavaScript running in the context of a file scheme URL can
   1160      * access content from other file scheme URLs.
   1161      *
   1162      * @return whether JavaScript running in the context of a file scheme URL
   1163      *         can access content from other file scheme URLs
   1164      * @see #setAllowFileAccessFromFileURLs
   1165      */
   1166     public abstract boolean getAllowFileAccessFromFileURLs();
   1167 
   1168     /**
   1169      * Gets whether plugins are enabled.
   1170      *
   1171      * @return {@code true} if plugins are enabled
   1172      * @see #setPluginsEnabled
   1173      * @deprecated This method has been replaced by {@link #getPluginState}
   1174      * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR2}
   1175      */
   1176     @SystemApi
   1177     @Deprecated
   1178     public abstract boolean getPluginsEnabled();
   1179 
   1180     /**
   1181      * Gets the current state regarding whether plugins are enabled.
   1182      *
   1183      * @return the plugin state as a {@link PluginState} value
   1184      * @see #setPluginState
   1185      * @deprecated Plugins will not be supported in future, and should not be used.
   1186      */
   1187     @Deprecated
   1188     public abstract PluginState getPluginState();
   1189 
   1190     /**
   1191      * Gets the directory that contains the plugin libraries. This method is
   1192      * obsolete since each plugin is now loaded from its own package.
   1193      *
   1194      * @return an empty string
   1195      * @deprecated This method is no longer used as plugins are loaded from
   1196      * their own APK via the system's package manager.
   1197      * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR2}
   1198      */
   1199     @Deprecated
   1200     public String getPluginsPath() {
   1201         // Unconditionally returns empty string, so no need for derived classes to override.
   1202         return "";
   1203     }
   1204 
   1205     /**
   1206      * Tells JavaScript to open windows automatically. This applies to the
   1207      * JavaScript function {@code window.open()}. The default is {@code false}.
   1208      *
   1209      * @param flag {@code true} if JavaScript can open windows automatically
   1210      */
   1211     public abstract void setJavaScriptCanOpenWindowsAutomatically(boolean flag);
   1212 
   1213     /**
   1214      * Gets whether JavaScript can open windows automatically.
   1215      *
   1216      * @return {@code true} if JavaScript can open windows automatically during
   1217      *         {@code window.open()}
   1218      * @see #setJavaScriptCanOpenWindowsAutomatically
   1219      */
   1220     public abstract boolean getJavaScriptCanOpenWindowsAutomatically();
   1221 
   1222     /**
   1223      * Sets the default text encoding name to use when decoding html pages.
   1224      * The default is "UTF-8".
   1225      *
   1226      * @param encoding the text encoding name
   1227      */
   1228     public abstract void setDefaultTextEncodingName(String encoding);
   1229 
   1230     /**
   1231      * Gets the default text encoding name.
   1232      *
   1233      * @return the default text encoding name as a string
   1234      * @see #setDefaultTextEncodingName
   1235      */
   1236     public abstract String getDefaultTextEncodingName();
   1237 
   1238     /**
   1239      * Sets the WebView's user-agent string. If the string is {@code null} or empty,
   1240      * the system default value will be used.
   1241      *
   1242      * Note that starting from {@link android.os.Build.VERSION_CODES#KITKAT} Android
   1243      * version, changing the user-agent while loading a web page causes WebView
   1244      * to initiate loading once again.
   1245      *
   1246      * @param ua new user-agent string
   1247      */
   1248     public abstract void setUserAgentString(@Nullable String ua);
   1249 
   1250     /**
   1251      * Gets the WebView's user-agent string.
   1252      *
   1253      * @return the WebView's user-agent string
   1254      * @see #setUserAgentString
   1255      */
   1256     public abstract String getUserAgentString();
   1257 
   1258     /**
   1259      * Returns the default User-Agent used by a WebView.
   1260      * An instance of WebView could use a different User-Agent if a call
   1261      * is made to {@link WebSettings#setUserAgentString(String)}.
   1262      *
   1263      * @param context a Context object used to access application assets
   1264      */
   1265     public static String getDefaultUserAgent(Context context) {
   1266         return WebViewFactory.getProvider().getStatics().getDefaultUserAgent(context);
   1267     }
   1268 
   1269     /**
   1270      * Tells the WebView whether it needs to set a node to have focus when
   1271      * {@link WebView#requestFocus(int, android.graphics.Rect)} is called. The
   1272      * default value is {@code true}.
   1273      *
   1274      * @param flag whether the WebView needs to set a node
   1275      */
   1276     public abstract void setNeedInitialFocus(boolean flag);
   1277 
   1278     /**
   1279      * Sets the priority of the Render thread. Unlike the other settings, this
   1280      * one only needs to be called once per process. The default value is
   1281      * {@link RenderPriority#NORMAL}.
   1282      *
   1283      * @param priority the priority
   1284      * @deprecated It is not recommended to adjust thread priorities, and this will
   1285      *             not be supported in future versions.
   1286      */
   1287     @Deprecated
   1288     public abstract void setRenderPriority(RenderPriority priority);
   1289 
   1290     /**
   1291      * Overrides the way the cache is used. The way the cache is used is based
   1292      * on the navigation type. For a normal page load, the cache is checked
   1293      * and content is re-validated as needed. When navigating back, content is
   1294      * not revalidated, instead the content is just retrieved from the cache.
   1295      * This method allows the client to override this behavior by specifying
   1296      * one of {@link #LOAD_DEFAULT},
   1297      * {@link #LOAD_CACHE_ELSE_NETWORK}, {@link #LOAD_NO_CACHE} or
   1298      * {@link #LOAD_CACHE_ONLY}. The default value is {@link #LOAD_DEFAULT}.
   1299      *
   1300      * @param mode the mode to use
   1301      */
   1302     public abstract void setCacheMode(@CacheMode int mode);
   1303 
   1304     /**
   1305      * Gets the current setting for overriding the cache mode.
   1306      *
   1307      * @return the current setting for overriding the cache mode
   1308      * @see #setCacheMode
   1309      */
   1310     @CacheMode
   1311     public abstract int getCacheMode();
   1312 
   1313     /**
   1314      * Configures the WebView's behavior when a secure origin attempts to load a resource from an
   1315      * insecure origin.
   1316      *
   1317      * By default, apps that target {@link android.os.Build.VERSION_CODES#KITKAT} or below default
   1318      * to {@link #MIXED_CONTENT_ALWAYS_ALLOW}. Apps targeting
   1319      * {@link android.os.Build.VERSION_CODES#LOLLIPOP} default to {@link #MIXED_CONTENT_NEVER_ALLOW}.
   1320      *
   1321      * The preferred and most secure mode of operation for the WebView is
   1322      * {@link #MIXED_CONTENT_NEVER_ALLOW} and use of {@link #MIXED_CONTENT_ALWAYS_ALLOW} is
   1323      * strongly discouraged.
   1324      *
   1325      * @param mode The mixed content mode to use. One of {@link #MIXED_CONTENT_NEVER_ALLOW},
   1326      *     {@link #MIXED_CONTENT_ALWAYS_ALLOW} or {@link #MIXED_CONTENT_COMPATIBILITY_MODE}.
   1327      */
   1328     public abstract void setMixedContentMode(int mode);
   1329 
   1330     /**
   1331      * Gets the current behavior of the WebView with regard to loading insecure content from a
   1332      * secure origin.
   1333      * @return The current setting, one of {@link #MIXED_CONTENT_NEVER_ALLOW},
   1334      *     {@link #MIXED_CONTENT_ALWAYS_ALLOW} or {@link #MIXED_CONTENT_COMPATIBILITY_MODE}.
   1335      */
   1336     public abstract int getMixedContentMode();
   1337 
   1338     /**
   1339      * Sets whether to use a video overlay for embedded encrypted video.
   1340      * In API levels prior to {@link android.os.Build.VERSION_CODES#LOLLIPOP}, encrypted video can
   1341      * only be rendered directly on a secure video surface, so it had been a hard problem to play
   1342      * encrypted video in HTML.  When this flag is on, WebView can play encrypted video (MSE/EME)
   1343      * by using a video overlay (aka hole-punching) for videos embedded using HTML &lt;video&gt;
   1344      * tag.<br>
   1345      * Caution: This setting is intended for use only in a narrow set of circumstances and apps
   1346      * should only enable it if they require playback of encrypted video content. It will impose
   1347      * the following limitations on the WebView:
   1348      * <ul>
   1349      * <li> Only one video overlay can be played at a time.
   1350      * <li> Changes made to position or dimensions of a video element may be propagated to the
   1351      * corresponding video overlay with a noticeable delay.
   1352      * <li> The video overlay is not visible to web APIs and as such may not interact with
   1353      * script or styling. For example, CSS styles applied to the &lt;video&gt; tag may be ignored.
   1354      * </ul>
   1355      * This is not an exhaustive set of constraints and it may vary with new versions of the
   1356      * WebView.
   1357      * @hide
   1358      */
   1359     @SystemApi
   1360     public abstract void setVideoOverlayForEmbeddedEncryptedVideoEnabled(boolean flag);
   1361 
   1362     /**
   1363      * Gets whether a video overlay will be used for embedded encrypted video.
   1364      *
   1365      * @return {@code true} if WebView uses a video overlay for embedded encrypted video.
   1366      * @see #setVideoOverlayForEmbeddedEncryptedVideoEnabled
   1367      * @hide
   1368      */
   1369     @SystemApi
   1370     public abstract boolean getVideoOverlayForEmbeddedEncryptedVideoEnabled();
   1371 
   1372     /**
   1373      * Sets whether this WebView should raster tiles when it is
   1374      * offscreen but attached to a window. Turning this on can avoid
   1375      * rendering artifacts when animating an offscreen WebView on-screen.
   1376      * Offscreen WebViews in this mode use more memory. The default value is
   1377      * false.<br>
   1378      * Please follow these guidelines to limit memory usage:
   1379      * <ul>
   1380      * <li> WebView size should be not be larger than the device screen size.
   1381      * <li> Limit use of this mode to a small number of WebViews. Use it for
   1382      *   visible WebViews and WebViews about to be animated to visible.
   1383      * </ul>
   1384      */
   1385     public abstract void setOffscreenPreRaster(boolean enabled);
   1386 
   1387     /**
   1388      * Gets whether this WebView should raster tiles when it is
   1389      * offscreen but attached to a window.
   1390      * @return {@code true} if this WebView will raster tiles when it is
   1391      * offscreen but attached to a window.
   1392      */
   1393     public abstract boolean getOffscreenPreRaster();
   1394 
   1395 
   1396     /**
   1397      * Sets whether Safe Browsing is enabled. Safe Browsing allows WebView to
   1398      * protect against malware and phishing attacks by verifying the links.
   1399      *
   1400      * <p>
   1401      * Safe Browsing can be disabled for all WebViews using a manifest tag (read <a
   1402      * href="{@docRoot}reference/android/webkit/WebView.html">general Safe Browsing info</a>). The
   1403      * manifest tag has a lower precedence than this API.
   1404      *
   1405      * <p>
   1406      * Safe Browsing is enabled by default for devices which support it.
   1407      *
   1408      * @param enabled Whether Safe Browsing is enabled.
   1409      */
   1410     public abstract void setSafeBrowsingEnabled(boolean enabled);
   1411 
   1412     /**
   1413      * Gets whether Safe Browsing is enabled.
   1414      * See {@link #setSafeBrowsingEnabled}.
   1415      *
   1416      * @return {@code true} if Safe Browsing is enabled and {@code false} otherwise.
   1417      */
   1418     public abstract boolean getSafeBrowsingEnabled();
   1419 
   1420 
   1421     /**
   1422      * @hide
   1423      */
   1424     @IntDef(flag = true, prefix = { "MENU_ITEM_" }, value = {
   1425             MENU_ITEM_NONE,
   1426             MENU_ITEM_SHARE,
   1427             MENU_ITEM_WEB_SEARCH,
   1428             MENU_ITEM_PROCESS_TEXT
   1429     })
   1430     @Retention(RetentionPolicy.SOURCE)
   1431     @Target({ElementType.PARAMETER, ElementType.METHOD})
   1432     private @interface MenuItemFlags {}
   1433 
   1434     /**
   1435      * Disables the action mode menu items according to {@code menuItems} flag.
   1436      * @param menuItems an integer field flag for the menu items to be disabled.
   1437      */
   1438     public abstract void setDisabledActionModeMenuItems(@MenuItemFlags int menuItems);
   1439 
   1440     /**
   1441      * Gets the action mode menu items that are disabled, expressed in an integer field flag.
   1442      * The default value is {@link #MENU_ITEM_NONE}
   1443      *
   1444      * @return all the disabled menu item flags combined with bitwise OR.
   1445      */
   1446     public abstract @MenuItemFlags int getDisabledActionModeMenuItems();
   1447 
   1448     /**
   1449      * Used with {@link #setDisabledActionModeMenuItems}.
   1450      *
   1451      * No menu items should be disabled.
   1452      */
   1453     public static final int MENU_ITEM_NONE = 0;
   1454 
   1455     /**
   1456      * Used with {@link #setDisabledActionModeMenuItems}.
   1457      *
   1458      * Disable menu item "Share".
   1459      */
   1460     public static final int MENU_ITEM_SHARE = 1 << 0;
   1461 
   1462     /**
   1463      * Used with {@link #setDisabledActionModeMenuItems}.
   1464      *
   1465      * Disable menu item "Web Search".
   1466      */
   1467     public static final int MENU_ITEM_WEB_SEARCH = 1 << 1;
   1468 
   1469     /**
   1470      * Used with {@link #setDisabledActionModeMenuItems}.
   1471      *
   1472      * Disable all the action mode menu items for text processing.
   1473      * By default WebView searches for activities that are able to handle
   1474      * {@link android.content.Intent#ACTION_PROCESS_TEXT} and show them in the
   1475      * action mode menu. If this flag is set via {@link
   1476      * #setDisabledActionModeMenuItems}, these menu items will be disabled.
   1477      */
   1478     public static final int MENU_ITEM_PROCESS_TEXT = 1 << 2;
   1479 }
   1480