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