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