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