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