• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package org.robolectric.fakes;
2 
3 import android.webkit.WebSettings;
4 import javax.annotation.Nullable;
5 
6 /** Robolectric implementation of {@link android.webkit.WebSettings}. */
7 public class RoboWebSettings extends WebSettings {
8   private static final String DEFAULT_USER_AGENT =
9       "Mozilla/5.0 (Linux; U; Android 4.0.3; ko-kr; LG-L160L Build/IML74K) AppleWebkit/534.30"
10           + " (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30";
11   @Nullable private static String defaultUserAgentOverride = null;
12 
13   private boolean blockNetworkImage = false;
14   private boolean javaScriptEnabled = false;
15   private boolean javaScriptCanOpenWindowAutomatically = false;
16   private boolean lightTouchEnabled = false;
17   private boolean needInitialFocus = false;
18   private RenderPriority renderPriority = RenderPriority.NORMAL;
19   private boolean pluginsEnabled = false;
20   private boolean saveFormData = false;
21   private boolean supportMultipleWindows = false;
22   private boolean supportZoom = true;
23   private boolean useWideViewPort = false;
24   private int cacheMode;
25   private WebSettings.LayoutAlgorithm layoutAlgorithm = WebSettings.LayoutAlgorithm.NARROW_COLUMNS;
26   private String defaultTextEncoding = "UTF-8";
27   private int defaultFontSize = 16;
28   private boolean loadsImagesAutomatically;
29   private int defaultFixedFontSize;
30   private int minimumLogicalFontSize;
31   private int minimumFontSize;
32   private String fantasyFontFamily;
33   private String cursiveFontFamily;
34   private String serifFontFamily;
35   private String sansSerifFontFamily;
36   private String fixedFontFamily;
37   private String standardFontFamily;
38   private boolean savePassword;
39   private int userAgent;
40   private boolean navDump;
41   private int forceDark;
42 
43   @Override
getBlockNetworkImage()44   public synchronized boolean getBlockNetworkImage() {
45     return blockNetworkImage;
46   }
47 
48   @Override
setBlockNetworkImage(boolean flag)49   public synchronized void setBlockNetworkImage(boolean flag) {
50     blockNetworkImage = flag;
51   }
52 
53   @Override
getJavaScriptEnabled()54   public synchronized boolean getJavaScriptEnabled() {
55     return javaScriptEnabled;
56   }
57 
58   @Override
setJavaScriptEnabled(boolean flag)59   public synchronized void setJavaScriptEnabled(boolean flag) {
60     javaScriptEnabled = flag;
61   }
62 
63   @Override
getLightTouchEnabled()64   public boolean getLightTouchEnabled() {
65     return lightTouchEnabled;
66   }
67 
68   @Override
setLightTouchEnabled(boolean flag)69   public void setLightTouchEnabled(boolean flag) {
70     lightTouchEnabled = flag;
71   }
72 
getNeedInitialFocus()73   public boolean getNeedInitialFocus() {
74     return needInitialFocus;
75   }
76 
77   @Override
setNeedInitialFocus(boolean flag)78   public void setNeedInitialFocus(boolean flag) {
79     needInitialFocus = flag;
80   }
81 
82   @Override
setRenderPriority(RenderPriority priority)83   public synchronized void setRenderPriority(RenderPriority priority) {
84     renderPriority = priority;
85   }
86 
getRenderPriority()87   public RenderPriority getRenderPriority() {
88     return renderPriority;
89   }
90 
91   @Override
getPluginsEnabled()92   public synchronized boolean getPluginsEnabled() {
93     return pluginsEnabled;
94   }
95 
96   @Override
setPluginsEnabled(boolean flag)97   public synchronized void setPluginsEnabled(boolean flag) {
98     pluginsEnabled = flag;
99   }
100 
getSupportMultipleWindows()101   public boolean getSupportMultipleWindows() {
102     return supportMultipleWindows;
103   }
104 
105   @Override
setSupportMultipleWindows(boolean support)106   public synchronized void setSupportMultipleWindows(boolean support) {
107     supportMultipleWindows = support;
108   }
109 
getSupportZoom()110   public boolean getSupportZoom() {
111     return supportZoom;
112   }
113 
114   @Override
setSupportZoom(boolean support)115   public void setSupportZoom(boolean support) {
116     supportZoom = support;
117   }
118 
119   @Override
setCacheMode(int mode)120   public void setCacheMode(int mode) {
121     this.cacheMode = mode;
122   }
123 
124   @Override
getCacheMode()125   public int getCacheMode() {
126     return cacheMode;
127   }
128 
129   @Override
getUseWideViewPort()130   public boolean getUseWideViewPort() {
131     return useWideViewPort;
132   }
133 
134   @Override
setUseWideViewPort(boolean useWideViewPort)135   public void setUseWideViewPort(boolean useWideViewPort) {
136     this.useWideViewPort = useWideViewPort;
137   }
138 
139   @Override
getSaveFormData()140   public boolean getSaveFormData() {
141     return saveFormData;
142   }
143 
144   @Override
setSaveFormData(boolean saveFormData)145   public void setSaveFormData(boolean saveFormData) {
146     this.saveFormData = saveFormData;
147   }
148 
149   @Override
setJavaScriptCanOpenWindowsAutomatically( boolean javaScriptCanOpenWindowAutomatically)150   public void setJavaScriptCanOpenWindowsAutomatically(
151       boolean javaScriptCanOpenWindowAutomatically) {
152     this.javaScriptCanOpenWindowAutomatically = javaScriptCanOpenWindowAutomatically;
153   }
154 
155   @Override
getJavaScriptCanOpenWindowsAutomatically()156   public boolean getJavaScriptCanOpenWindowsAutomatically() {
157     return this.javaScriptCanOpenWindowAutomatically;
158   }
159 
160   @Override
setLayoutAlgorithm(WebSettings.LayoutAlgorithm algorithm)161   public synchronized void setLayoutAlgorithm(WebSettings.LayoutAlgorithm algorithm) {
162     this.layoutAlgorithm = algorithm;
163   }
164 
165   @Override
getDefaultTextEncodingName()166   public String getDefaultTextEncodingName() {
167     return this.defaultTextEncoding;
168   }
169 
170   @Override
setDefaultTextEncodingName(String defaultTextEncoding)171   public void setDefaultTextEncodingName(String defaultTextEncoding) {
172     this.defaultTextEncoding = defaultTextEncoding;
173   }
174 
175   @Override
getDefaultFontSize()176   public int getDefaultFontSize() {
177     return defaultFontSize;
178   }
179 
180   @Override
setDefaultFontSize(int defaultFontSize)181   public void setDefaultFontSize(int defaultFontSize) {
182     this.defaultFontSize = defaultFontSize;
183   }
184 
185   @Override
getLoadsImagesAutomatically()186   public boolean getLoadsImagesAutomatically() {
187     return loadsImagesAutomatically;
188   }
189 
190   @Override
setLoadsImagesAutomatically(boolean loadsImagesAutomatically)191   public void setLoadsImagesAutomatically(boolean loadsImagesAutomatically) {
192     this.loadsImagesAutomatically = loadsImagesAutomatically;
193   }
194 
195   @Override
getDefaultFixedFontSize()196   public int getDefaultFixedFontSize() {
197     return defaultFixedFontSize;
198   }
199 
200   @Override
setDefaultFixedFontSize(int defaultFixedFontSize)201   public void setDefaultFixedFontSize(int defaultFixedFontSize) {
202     this.defaultFixedFontSize = defaultFixedFontSize;
203   }
204 
205   @Override
getMinimumLogicalFontSize()206   public int getMinimumLogicalFontSize() {
207     return minimumLogicalFontSize;
208   }
209 
210   @Override
setMinimumLogicalFontSize(int minimumLogicalFontSize)211   public void setMinimumLogicalFontSize(int minimumLogicalFontSize) {
212     this.minimumLogicalFontSize = minimumLogicalFontSize;
213   }
214 
215   @Override
getMinimumFontSize()216   public int getMinimumFontSize() {
217     return minimumFontSize;
218   }
219 
220   @Override
setMinimumFontSize(int minimumFontSize)221   public void setMinimumFontSize(int minimumFontSize) {
222     this.minimumFontSize = minimumFontSize;
223   }
224 
225   @Override
getFantasyFontFamily()226   public String getFantasyFontFamily() {
227     return fantasyFontFamily;
228   }
229 
230   @Override
setFantasyFontFamily(String fantasyFontFamily)231   public void setFantasyFontFamily(String fantasyFontFamily) {
232     this.fantasyFontFamily = fantasyFontFamily;
233   }
234 
235   @Override
getCursiveFontFamily()236   public String getCursiveFontFamily() {
237     return cursiveFontFamily;
238   }
239 
240   @Override
setCursiveFontFamily(String cursiveFontFamily)241   public void setCursiveFontFamily(String cursiveFontFamily) {
242     this.cursiveFontFamily = cursiveFontFamily;
243   }
244 
245   @Override
getSerifFontFamily()246   public String getSerifFontFamily() {
247     return serifFontFamily;
248   }
249 
250   @Override
setSerifFontFamily(String serifFontFamily)251   public void setSerifFontFamily(String serifFontFamily) {
252     this.serifFontFamily = serifFontFamily;
253   }
254 
255   @Override
getSansSerifFontFamily()256   public String getSansSerifFontFamily() {
257     return sansSerifFontFamily;
258   }
259 
260   @Override
setSansSerifFontFamily(String sansSerifFontFamily)261   public void setSansSerifFontFamily(String sansSerifFontFamily) {
262     this.sansSerifFontFamily = sansSerifFontFamily;
263   }
264 
265   @Override
getFixedFontFamily()266   public String getFixedFontFamily() {
267     return fixedFontFamily;
268   }
269 
270   @Override
setFixedFontFamily(String fixedFontFamily)271   public void setFixedFontFamily(String fixedFontFamily) {
272     this.fixedFontFamily = fixedFontFamily;
273   }
274 
275   @Override
getStandardFontFamily()276   public String getStandardFontFamily() {
277     return standardFontFamily;
278   }
279 
280   @Override
setStandardFontFamily(String standardFontFamily)281   public void setStandardFontFamily(String standardFontFamily) {
282     this.standardFontFamily = standardFontFamily;
283   }
284 
285   @Override
getLayoutAlgorithm()286   public LayoutAlgorithm getLayoutAlgorithm() {
287     return layoutAlgorithm;
288   }
289 
290   @Override
supportMultipleWindows()291   public boolean supportMultipleWindows() {
292     return supportMultipleWindows;
293   }
294 
295   @Override
getSavePassword()296   public boolean getSavePassword() {
297     return savePassword;
298   }
299 
300   @Override
setSavePassword(boolean savePassword)301   public void setSavePassword(boolean savePassword) {
302     this.savePassword = savePassword;
303   }
304 
305   @Override
supportZoom()306   public boolean supportZoom() {
307     return supportZoom;
308   }
309 
310   @Override
getUserAgent()311   public int getUserAgent() {
312     return userAgent;
313   }
314 
315   @Override
setUserAgent(int userAgent)316   public void setUserAgent(int userAgent) {
317     this.userAgent = userAgent;
318   }
319 
320   @Override
getNavDump()321   public boolean getNavDump() {
322     return navDump;
323   }
324 
325   @Override
setNavDump(boolean navDump)326   public void setNavDump(boolean navDump) {
327     this.navDump = navDump;
328   }
329 
330   private boolean allowFileAccess = true;
331   private boolean builtInZoomControls = true;
332   private String userAgentString = null;
333 
334   @Override
getAllowFileAccess()335   public boolean getAllowFileAccess() {
336     return allowFileAccess;
337   }
338 
339   @Override
setAllowFileAccess(boolean allow)340   public void setAllowFileAccess(boolean allow) {
341     allowFileAccess = allow;
342   }
343 
344   @Override
getBuiltInZoomControls()345   public boolean getBuiltInZoomControls() {
346     return builtInZoomControls;
347   }
348 
349   @Override
setBuiltInZoomControls(boolean enabled)350   public void setBuiltInZoomControls(boolean enabled) {
351     builtInZoomControls = enabled;
352   }
353 
354   @Override
setUserAgentString(@ullable String ua)355   public synchronized void setUserAgentString(@Nullable String ua) {
356     userAgentString = ua;
357   }
358 
359   @Override
getUserAgentString()360   public synchronized String getUserAgentString() {
361     return userAgentString == null || userAgentString.isEmpty()
362         ? getDefaultUserAgent()
363         : userAgentString;
364   }
365 
366   // End API 3
367 
368   private boolean databaseEnabled = false;
369   private String databasePath = "database";
370   private String geolocationDatabasePath = "geolocation";
371   private boolean geolocationEnabled = false;
372 
373   @Override
getDatabaseEnabled()374   public synchronized boolean getDatabaseEnabled() {
375     return databaseEnabled;
376   }
377 
378   @Override
setDatabaseEnabled(boolean flag)379   public synchronized void setDatabaseEnabled(boolean flag) {
380     databaseEnabled = flag;
381   }
382 
383   @Override
setDatabasePath(String path)384   public synchronized void setDatabasePath(String path) {
385     databasePath = path;
386   }
387 
388   @Override
getDatabasePath()389   public synchronized String getDatabasePath() {
390     return databasePath;
391   }
392 
getGeolocationDatabasePath()393   public String getGeolocationDatabasePath() {
394     return geolocationDatabasePath;
395   }
396 
397   @Override
setGeolocationDatabasePath(String geolocationDatabasePath)398   public void setGeolocationDatabasePath(String geolocationDatabasePath) {
399     this.geolocationDatabasePath = geolocationDatabasePath;
400   }
401 
getGeolocationEnabled()402   public boolean getGeolocationEnabled() {
403     return geolocationEnabled;
404   }
405 
406   @Override
setGeolocationEnabled(boolean geolocationEnabled)407   public void setGeolocationEnabled(boolean geolocationEnabled) {
408     this.geolocationEnabled = geolocationEnabled;
409   }
410 
411   // End API 5
412 
413   private ZoomDensity defaultZoom;
414   private boolean domStorageEnabled = false;
415   private boolean loadWithOverviewMode = false;
416   private boolean appCacheEnabled = false;
417   private long appCacheMaxSize;
418   private String appCachePath = "appcache";
419 
420   @Override
setDefaultZoom(ZoomDensity zoom)421   public void setDefaultZoom(ZoomDensity zoom) {
422     this.defaultZoom = zoom;
423   }
424 
425   @Override
getDefaultZoom()426   public ZoomDensity getDefaultZoom() {
427     return defaultZoom;
428   }
429 
430   @Override
getDomStorageEnabled()431   public synchronized boolean getDomStorageEnabled() {
432     return domStorageEnabled;
433   }
434 
435   @Override
setDomStorageEnabled(boolean flag)436   public synchronized void setDomStorageEnabled(boolean flag) {
437     domStorageEnabled = flag;
438   }
439 
440   @Override
getLoadWithOverviewMode()441   public boolean getLoadWithOverviewMode() {
442     return loadWithOverviewMode;
443   }
444 
445   @Override
setLoadWithOverviewMode(boolean flag)446   public void setLoadWithOverviewMode(boolean flag) {
447     loadWithOverviewMode = flag;
448   }
449 
getAppCacheEnabled()450   public boolean getAppCacheEnabled() {
451     return appCacheEnabled;
452   }
453 
454   @Override
setAppCacheEnabled(boolean appCacheEnabled)455   public void setAppCacheEnabled(boolean appCacheEnabled) {
456     this.appCacheEnabled = appCacheEnabled;
457   }
458 
459   @Override
setAppCacheMaxSize(long appCacheMaxSize)460   public void setAppCacheMaxSize(long appCacheMaxSize) {
461     this.appCacheMaxSize = appCacheMaxSize;
462   }
463 
getAppCacheMaxSize()464   public long getAppCacheMaxSize() {
465     return appCacheMaxSize;
466   }
467 
getAppCachePath()468   public String getAppCachePath() {
469     return appCachePath;
470   }
471 
472   @Override
setAppCachePath(String appCachePath)473   public void setAppCachePath(String appCachePath) {
474     this.appCachePath = appCachePath;
475   }
476 
477   // End API 7
478 
479   private boolean blockNetworkLoads = false;
480   private WebSettings.PluginState pluginState = WebSettings.PluginState.OFF;
481 
482   @Override
getBlockNetworkLoads()483   public synchronized boolean getBlockNetworkLoads() {
484     return blockNetworkLoads;
485   }
486 
487   @Override
setBlockNetworkLoads(boolean flag)488   public synchronized void setBlockNetworkLoads(boolean flag) {
489     blockNetworkLoads = flag;
490   }
491 
492   @Override
getPluginState()493   public synchronized WebSettings.PluginState getPluginState() {
494     return pluginState;
495   }
496 
497   @Override
setPluginState(WebSettings.PluginState state)498   public synchronized void setPluginState(WebSettings.PluginState state) {
499     pluginState = state;
500   }
501 
502   // End API 8
503 
504   private boolean useWebViewBackgroundForOverscrollBackground;
505 
506   @Override
getUseWebViewBackgroundForOverscrollBackground()507   public boolean getUseWebViewBackgroundForOverscrollBackground() {
508     return useWebViewBackgroundForOverscrollBackground;
509   }
510 
511   @Override
setUseWebViewBackgroundForOverscrollBackground( boolean useWebViewBackgroundForOverscrollBackground)512   public void setUseWebViewBackgroundForOverscrollBackground(
513       boolean useWebViewBackgroundForOverscrollBackground) {
514     this.useWebViewBackgroundForOverscrollBackground = useWebViewBackgroundForOverscrollBackground;
515   }
516 
517   // End API 9
518 
519   private boolean enableSmoothTransition;
520   private boolean allowContentAccess = true;
521   private boolean displayZoomControls;
522 
523   @Override
enableSmoothTransition()524   public boolean enableSmoothTransition() {
525     return enableSmoothTransition;
526   }
527 
528   @Override
setEnableSmoothTransition(boolean enableSmoothTransition)529   public void setEnableSmoothTransition(boolean enableSmoothTransition) {
530     this.enableSmoothTransition = enableSmoothTransition;
531   }
532 
533   @Override
setAllowContentAccess(boolean allow)534   public void setAllowContentAccess(boolean allow) {
535     allowContentAccess = allow;
536   }
537 
538   @Override
getAllowContentAccess()539   public boolean getAllowContentAccess() {
540     return allowContentAccess;
541   }
542 
543   @Override
setDisplayZoomControls(boolean enabled)544   public void setDisplayZoomControls(boolean enabled) {
545     displayZoomControls = enabled;
546   }
547 
548   @Override
getDisplayZoomControls()549   public boolean getDisplayZoomControls() {
550     return displayZoomControls;
551   }
552 
553   // End API 11
554 
555   private int textZoom = 100;
556 
557   @Override
getTextZoom()558   public int getTextZoom() {
559     return textZoom;
560   }
561 
562   @Override
setTextZoom(int textZoom)563   public void setTextZoom(int textZoom) {
564     this.textZoom = textZoom;
565   }
566 
567   // End API 14
568 
569   private boolean allowFileAccessFromFile = true;
570   private boolean allowUniversalAccessFromFile = true;
571 
572   @Override
getAllowFileAccessFromFileURLs()573   public boolean getAllowFileAccessFromFileURLs() {
574     return allowFileAccessFromFile;
575   }
576 
577   @Override
setAllowFileAccessFromFileURLs(boolean allow)578   public void setAllowFileAccessFromFileURLs(boolean allow) {
579     allowFileAccessFromFile = allow;
580   }
581 
582   @Override
getAllowUniversalAccessFromFileURLs()583   public boolean getAllowUniversalAccessFromFileURLs() {
584     return allowUniversalAccessFromFile;
585   }
586 
587   @Override
setAllowUniversalAccessFromFileURLs(boolean allow)588   public void setAllowUniversalAccessFromFileURLs(boolean allow) {
589     allowUniversalAccessFromFile = allow;
590   }
591 
592   // End API 16
593 
594   private boolean mediaPlaybackRequiresUserGesture = true;
595 
596   @Override
getMediaPlaybackRequiresUserGesture()597   public boolean getMediaPlaybackRequiresUserGesture() {
598     return mediaPlaybackRequiresUserGesture;
599   }
600 
601   @Override
setMediaPlaybackRequiresUserGesture(boolean require)602   public void setMediaPlaybackRequiresUserGesture(boolean require) {
603     mediaPlaybackRequiresUserGesture = require;
604   }
605 
606   // End API 17
607 
608   private int mixedContentMode;
609   private boolean acceptThirdPartyCookies;
610   private boolean videoOverlayForEmbeddedEncryptedVideoEnabled;
611 
612   @Override
setMixedContentMode(int mixedContentMode)613   public void setMixedContentMode(int mixedContentMode) {
614     this.mixedContentMode = mixedContentMode;
615   }
616 
617   @Override
getMixedContentMode()618   public int getMixedContentMode() {
619     return mixedContentMode;
620   }
621 
622   @Override
setVideoOverlayForEmbeddedEncryptedVideoEnabled(boolean b)623   public void setVideoOverlayForEmbeddedEncryptedVideoEnabled(boolean b) {
624     videoOverlayForEmbeddedEncryptedVideoEnabled = b;
625   }
626 
627   @Override
getVideoOverlayForEmbeddedEncryptedVideoEnabled()628   public boolean getVideoOverlayForEmbeddedEncryptedVideoEnabled() {
629     return videoOverlayForEmbeddedEncryptedVideoEnabled;
630   }
631 
632   @Override
getAcceptThirdPartyCookies()633   public boolean getAcceptThirdPartyCookies() {
634     return acceptThirdPartyCookies;
635   }
636 
637   @Override
setAcceptThirdPartyCookies(boolean acceptThirdPartyCookies)638   public void setAcceptThirdPartyCookies(boolean acceptThirdPartyCookies) {
639     this.acceptThirdPartyCookies = acceptThirdPartyCookies;
640   }
641 
642   // End API 21
643 
644   @Override
setOffscreenPreRaster(boolean enabled)645   public void setOffscreenPreRaster(boolean enabled) {}
646 
647   @Override
getOffscreenPreRaster()648   public boolean getOffscreenPreRaster() {
649     return false;
650   }
651 
652   // End API 23
653 
654   @Override
getDisabledActionModeMenuItems()655   public int getDisabledActionModeMenuItems() {
656     return 0;
657   }
658 
659   @Override
setDisabledActionModeMenuItems(int menuItems)660   public void setDisabledActionModeMenuItems(int menuItems) {}
661 
662   // End API 24.
663 
664   @Override
getSafeBrowsingEnabled()665   public boolean getSafeBrowsingEnabled() {
666     return false;
667   }
668 
669   @Override
setSafeBrowsingEnabled(boolean enabled)670   public void setSafeBrowsingEnabled(boolean enabled) {}
671 
672   // End API 26
673 
674   @Override
getForceDark()675   public int getForceDark() {
676     return forceDark;
677   }
678 
679   @Override
setForceDark(int forceDark)680   public void setForceDark(int forceDark) {
681     this.forceDark = forceDark;
682   }
683 
684   // End API 29
685 
686   /**
687    * Returns the default User-Agent used by a WebView. An instance of WebView could use a different
688    * User-Agent if a call is made to {@link WebSettings#setUserAgentString(String)}.
689    *
690    * <p>The default User-Agent can be overridden (for the entire application) by calling {@link
691    * #setDefaultUserAgentOverride(String)}.
692    */
getDefaultUserAgent()693   public static String getDefaultUserAgent() {
694     return defaultUserAgentOverride == null ? DEFAULT_USER_AGENT : defaultUserAgentOverride;
695   }
696 
697   /**
698    * Overrides the default user agent for all WebViews. The value set here is returned from {@link
699    * #getDefaultUserAgent()}.
700    *
701    * <p>Note that particular WebView instances will ignore this value if they have been configured
702    * with a custom user agent via {@link WebSettings#setUserAgentString(String)}.
703    *
704    * <p>If the value is null, the default user agent will be provided by Robolectric.
705    */
setDefaultUserAgentOverride(@ullable String defaultUserAgent)706   public static void setDefaultUserAgentOverride(@Nullable String defaultUserAgent) {
707     defaultUserAgentOverride = defaultUserAgent;
708   }
709 }
710