1/*
2 * Copyright (C) 2012 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 com.android.webview.chromium;
18
19import android.util.Log;
20import android.webkit.DebugFlags;
21import android.webkit.WebSettings.LayoutAlgorithm;
22import android.webkit.WebSettings.PluginState;
23import android.webkit.WebSettings.RenderPriority;
24import android.webkit.WebSettings.TextSize;
25import android.webkit.WebSettings.ZoomDensity;
26
27import org.chromium.android_webview.AwSettings;
28
29public class ContentSettingsAdapter extends android.webkit.WebSettings {
30
31    private static final String LOGTAG = ContentSettingsAdapter.class.getSimpleName();
32
33    private AwSettings mAwSettings;
34
35    public ContentSettingsAdapter(AwSettings awSettings) {
36        mAwSettings = awSettings;
37    }
38
39    AwSettings getAwSettings() {
40        return mAwSettings;
41    }
42
43    @Override
44    @Deprecated
45    public void setNavDump(boolean enabled) {
46        // Intentional no-op.
47    }
48
49    @Override
50    @Deprecated
51    public boolean getNavDump() {
52        // Intentional no-op.
53        return false;
54    }
55
56    @Override
57    public void setSupportZoom(boolean support) {
58        if (DebugFlags.TRACE_API) Log.d(LOGTAG, "setSupportZoom=" + support);
59        mAwSettings.setSupportZoom(support);
60    }
61
62    @Override
63    public boolean supportZoom() {
64        return mAwSettings.supportZoom();
65    }
66
67    @Override
68    public void setBuiltInZoomControls(boolean enabled) {
69        if (DebugFlags.TRACE_API) Log.d(LOGTAG, "setBuiltInZoomControls=" + enabled);
70        mAwSettings.setBuiltInZoomControls(enabled);
71    }
72
73    @Override
74    public boolean getBuiltInZoomControls() {
75        return mAwSettings.getBuiltInZoomControls();
76    }
77
78    @Override
79    public void setDisplayZoomControls(boolean enabled) {
80        if (DebugFlags.TRACE_API) Log.d(LOGTAG, "setDisplayZoomControls=" + enabled);
81        mAwSettings.setDisplayZoomControls(enabled);
82    }
83
84    @Override
85    public boolean getDisplayZoomControls() {
86        return mAwSettings.getDisplayZoomControls();
87    }
88
89    @Override
90    public void setAllowFileAccess(boolean allow) {
91        if (DebugFlags.TRACE_API) Log.d(LOGTAG, "setAllowFileAccess=" + allow);
92        mAwSettings.setAllowFileAccess(allow);
93    }
94
95    @Override
96    public boolean getAllowFileAccess() {
97        return mAwSettings.getAllowFileAccess();
98    }
99
100    @Override
101    public void setAllowContentAccess(boolean allow) {
102        if (DebugFlags.TRACE_API) Log.d(LOGTAG, "setAllowContentAccess=" + allow);
103        mAwSettings.setAllowContentAccess(allow);
104    }
105
106    @Override
107    public boolean getAllowContentAccess() {
108        return mAwSettings.getAllowContentAccess();
109    }
110
111    @Override
112    public void setLoadWithOverviewMode(boolean overview) {
113        if (DebugFlags.TRACE_API) Log.d(LOGTAG, "setLoadWithOverviewMode=" + overview);
114        mAwSettings.setLoadWithOverviewMode(overview);
115    }
116
117    @Override
118    public boolean getLoadWithOverviewMode() {
119        return mAwSettings.getLoadWithOverviewMode();
120    }
121
122    @Override
123    public void setAcceptThirdPartyCookies(boolean accept) {
124        if (DebugFlags.TRACE_API) Log.d(LOGTAG, "setAcceptThirdPartyCookies=" + accept);
125        mAwSettings.setAcceptThirdPartyCookies(accept);
126    }
127
128    @Override
129    public boolean getAcceptThirdPartyCookies() {
130        return mAwSettings.getAcceptThirdPartyCookies();
131    }
132
133    @Override
134    public void setEnableSmoothTransition(boolean enable) {
135        // Intentional no-op.
136    }
137
138    @Override
139    public boolean enableSmoothTransition() {
140        // Intentional no-op.
141        return false;
142    }
143
144    @Override
145    public void setUseWebViewBackgroundForOverscrollBackground(boolean view) {
146        // Intentional no-op.
147    }
148
149    @Override
150    public boolean getUseWebViewBackgroundForOverscrollBackground() {
151        // Intentional no-op.
152        return false;
153    }
154
155    @Override
156    public void setSaveFormData(boolean save) {
157        if (DebugFlags.TRACE_API) Log.d(LOGTAG, "setSaveFormData=" + save);
158        mAwSettings.setSaveFormData(save);
159    }
160
161    @Override
162    public boolean getSaveFormData() {
163        return mAwSettings.getSaveFormData();
164    }
165
166    @Override
167    public void setSavePassword(boolean save) {
168        // Intentional no-op.
169    }
170
171    @Override
172    public boolean getSavePassword() {
173        // Intentional no-op.
174        return false;
175    }
176
177    @Override
178    public synchronized void setTextZoom(int textZoom) {
179        if (DebugFlags.TRACE_API) Log.d(LOGTAG, "setTextZoom=" + textZoom);
180        mAwSettings.setTextZoom(textZoom);
181    }
182
183    @Override
184    public synchronized int getTextZoom() {
185        return mAwSettings.getTextZoom();
186    }
187
188    @Override
189    public void setDefaultZoom(ZoomDensity zoom) {
190        if (zoom != ZoomDensity.MEDIUM) {
191            Log.w(LOGTAG, "setDefaultZoom not supported, zoom=" + zoom);
192        }
193    }
194
195    @Override
196    public ZoomDensity getDefaultZoom() {
197        // Intentional no-op.
198        return ZoomDensity.MEDIUM;
199    }
200
201    @Override
202    public void setLightTouchEnabled(boolean enabled) {
203        // Intentional no-op.
204    }
205
206    @Override
207    public boolean getLightTouchEnabled() {
208        // Intentional no-op.
209        return false;
210    }
211
212    @Override
213    public synchronized void setUserAgent(int ua) {
214        // Minimal implementation for backwards compatibility: just supports resetting to default.
215        if (ua == 0) {
216            setUserAgentString(null);
217        } else {
218            Log.w(LOGTAG, "setUserAgent not supported, ua=" + ua);
219        }
220    }
221
222    @Override
223    public synchronized int getUserAgent() {
224        // Minimal implementation for backwards compatibility: just identifies default vs custom.
225        return AwSettings.getDefaultUserAgent().equals(getUserAgentString()) ? 0 : -1;
226    }
227
228    @Override
229    public synchronized void setUseWideViewPort(boolean use) {
230        if (DebugFlags.TRACE_API) Log.d(LOGTAG, "setUseWideViewPort=" + use);
231        mAwSettings.setUseWideViewPort(use);
232    }
233
234    @Override
235    public synchronized boolean getUseWideViewPort() {
236        return mAwSettings.getUseWideViewPort();
237    }
238
239    @Override
240    public synchronized void setSupportMultipleWindows(boolean support) {
241        if (DebugFlags.TRACE_API) Log.d(LOGTAG, "setSupportMultipleWindows=" + support);
242        mAwSettings.setSupportMultipleWindows(support);
243    }
244
245    @Override
246    public synchronized boolean supportMultipleWindows() {
247        return mAwSettings.supportMultipleWindows();
248    }
249
250    @Override
251    public synchronized void setLayoutAlgorithm(LayoutAlgorithm l) {
252        // TODO: Remove the upstream enum and mapping once the new value is in the public API.
253        final AwSettings.LayoutAlgorithm[] chromiumValues = {
254            AwSettings.LayoutAlgorithm.NORMAL,
255            AwSettings.LayoutAlgorithm.SINGLE_COLUMN,
256            AwSettings.LayoutAlgorithm.NARROW_COLUMNS,
257            AwSettings.LayoutAlgorithm.TEXT_AUTOSIZING
258        };
259        mAwSettings.setLayoutAlgorithm(chromiumValues[l.ordinal()]);
260    }
261
262    @Override
263    public synchronized LayoutAlgorithm getLayoutAlgorithm() {
264        // TODO: Remove the upstream enum and mapping once the new value is in the public API.
265        final LayoutAlgorithm[] webViewValues = {
266            LayoutAlgorithm.NORMAL,
267            LayoutAlgorithm.SINGLE_COLUMN,
268            LayoutAlgorithm.NARROW_COLUMNS,
269            LayoutAlgorithm.TEXT_AUTOSIZING
270        };
271        return webViewValues[mAwSettings.getLayoutAlgorithm().ordinal()];
272    }
273
274    @Override
275    public synchronized void setStandardFontFamily(String font) {
276        if (DebugFlags.TRACE_API) Log.d(LOGTAG, "setStandardFontFamily=" + font);
277        mAwSettings.setStandardFontFamily(font);
278    }
279
280    @Override
281    public synchronized String getStandardFontFamily() {
282        return mAwSettings.getStandardFontFamily();
283    }
284
285    @Override
286    public synchronized void setFixedFontFamily(String font) {
287        if (DebugFlags.TRACE_API) Log.d(LOGTAG, "setFixedFontFamily=" + font);
288        mAwSettings.setFixedFontFamily(font);
289    }
290
291    @Override
292    public synchronized String getFixedFontFamily() {
293        return mAwSettings.getFixedFontFamily();
294    }
295
296    @Override
297    public synchronized void setSansSerifFontFamily(String font) {
298        if (DebugFlags.TRACE_API) Log.d(LOGTAG, "setSansSerifFontFamily=" + font);
299        mAwSettings.setSansSerifFontFamily(font);
300    }
301
302    @Override
303    public synchronized String getSansSerifFontFamily() {
304        return mAwSettings.getSansSerifFontFamily();
305    }
306
307    @Override
308    public synchronized void setSerifFontFamily(String font) {
309        if (DebugFlags.TRACE_API) Log.d(LOGTAG, "setSerifFontFamily=" + font);
310        mAwSettings.setSerifFontFamily(font);
311    }
312
313    @Override
314    public synchronized String getSerifFontFamily() {
315        return mAwSettings.getSerifFontFamily();
316    }
317
318    @Override
319    public synchronized void setCursiveFontFamily(String font) {
320        if (DebugFlags.TRACE_API) Log.d(LOGTAG, "setCursiveFontFamily=" + font);
321        mAwSettings.setCursiveFontFamily(font);
322    }
323
324    @Override
325    public synchronized String getCursiveFontFamily() {
326        return mAwSettings.getCursiveFontFamily();
327    }
328
329    @Override
330    public synchronized void setFantasyFontFamily(String font) {
331        if (DebugFlags.TRACE_API) Log.d(LOGTAG, "setFantasyFontFamily=" + font);
332        mAwSettings.setFantasyFontFamily(font);
333    }
334
335    @Override
336    public synchronized String getFantasyFontFamily() {
337        return mAwSettings.getFantasyFontFamily();
338    }
339
340    @Override
341    public synchronized void setMinimumFontSize(int size) {
342        if (DebugFlags.TRACE_API) Log.d(LOGTAG, "setMinimumFontSize=" + size);
343        mAwSettings.setMinimumFontSize(size);
344    }
345
346    @Override
347    public synchronized int getMinimumFontSize() {
348        return mAwSettings.getMinimumFontSize();
349    }
350
351    @Override
352    public synchronized void setMinimumLogicalFontSize(int size) {
353        if (DebugFlags.TRACE_API) Log.d(LOGTAG, "setMinimumLogicalFontSize=" + size);
354        mAwSettings.setMinimumLogicalFontSize(size);
355    }
356
357    @Override
358    public synchronized int getMinimumLogicalFontSize() {
359        return mAwSettings.getMinimumLogicalFontSize();
360    }
361
362    @Override
363    public synchronized void setDefaultFontSize(int size) {
364        if (DebugFlags.TRACE_API) Log.d(LOGTAG, "setDefaultFontSize=" + size);
365        mAwSettings.setDefaultFontSize(size);
366    }
367
368    @Override
369    public synchronized int getDefaultFontSize() {
370        return mAwSettings.getDefaultFontSize();
371    }
372
373    @Override
374    public synchronized void setDefaultFixedFontSize(int size) {
375        if (DebugFlags.TRACE_API) Log.d(LOGTAG, "setDefaultFixedFontSize=" + size);
376        mAwSettings.setDefaultFixedFontSize(size);
377    }
378
379    @Override
380    public synchronized int getDefaultFixedFontSize() {
381        return mAwSettings.getDefaultFixedFontSize();
382    }
383
384    @Override
385    public synchronized void setLoadsImagesAutomatically(boolean flag) {
386        if (DebugFlags.TRACE_API) Log.d(LOGTAG, "setLoadsImagesAutomatically=" + flag);
387        mAwSettings.setLoadsImagesAutomatically(flag);
388    }
389
390    @Override
391    public synchronized boolean getLoadsImagesAutomatically() {
392        return mAwSettings.getLoadsImagesAutomatically();
393    }
394
395    @Override
396    public synchronized void setBlockNetworkImage(boolean flag) {
397        if (DebugFlags.TRACE_API) Log.d(LOGTAG, "setBlockNetworkImage=" + flag);
398        mAwSettings.setImagesEnabled(!flag);
399    }
400
401    @Override
402    public synchronized boolean getBlockNetworkImage() {
403        return !mAwSettings.getImagesEnabled();
404    }
405
406    @Override
407    public synchronized void setBlockNetworkLoads(boolean flag) {
408        if (DebugFlags.TRACE_API) Log.d(LOGTAG, "setBlockNetworkLoads=" + flag);
409        mAwSettings.setBlockNetworkLoads(flag);
410    }
411
412    @Override
413    public synchronized boolean getBlockNetworkLoads() {
414        return mAwSettings.getBlockNetworkLoads();
415    }
416
417    @Override
418    public synchronized void setJavaScriptEnabled(boolean flag) {
419        if (DebugFlags.TRACE_API) Log.d(LOGTAG, "setJavaScriptEnabled=" + flag);
420        mAwSettings.setJavaScriptEnabled(flag);
421    }
422
423    @Override
424    public void setAllowUniversalAccessFromFileURLs(boolean flag) {
425        if (DebugFlags.TRACE_API) Log.d(LOGTAG, "setAllowUniversalAccessFromFileURLs=" + flag);
426        mAwSettings.setAllowUniversalAccessFromFileURLs(flag);
427    }
428
429    @Override
430    public void setAllowFileAccessFromFileURLs(boolean flag) {
431        if (DebugFlags.TRACE_API) Log.d(LOGTAG, "setAllowFileAccessFromFileURLs=" + flag);
432        mAwSettings.setAllowFileAccessFromFileURLs(flag);
433    }
434
435    @Override
436    public synchronized void setPluginsEnabled(boolean flag) {
437        if (DebugFlags.TRACE_API) Log.d(LOGTAG, "setPluginsEnabled=" + flag);
438        mAwSettings.setPluginsEnabled(flag);
439    }
440
441    @Override
442    public synchronized void setPluginState(PluginState state) {
443        if (DebugFlags.TRACE_API) Log.d(LOGTAG, "setPluginState=" + state);
444        mAwSettings.setPluginState(state);
445    }
446
447    @Override
448    public synchronized void setDatabasePath(String databasePath) {
449        // Intentional no-op.
450    }
451
452    @Override
453    public synchronized void setGeolocationDatabasePath(String databasePath) {
454        // Intentional no-op.
455    }
456
457    @Override
458    public synchronized void setAppCacheEnabled(boolean flag) {
459        if (DebugFlags.TRACE_API) Log.d(LOGTAG, "setAppCacheEnabled=" + flag);
460        mAwSettings.setAppCacheEnabled(flag);
461    }
462
463    @Override
464    public synchronized void setAppCachePath(String appCachePath) {
465        if (DebugFlags.TRACE_API) Log.d(LOGTAG, "setAppCachePath=" + appCachePath);
466        mAwSettings.setAppCachePath(appCachePath);
467    }
468
469    @Override
470    public synchronized void setAppCacheMaxSize(long appCacheMaxSize) {
471        // Intentional no-op.
472    }
473
474    @Override
475    public synchronized void setDatabaseEnabled(boolean flag) {
476        if (DebugFlags.TRACE_API) Log.d(LOGTAG, "setDatabaseEnabled=" + flag);
477        mAwSettings.setDatabaseEnabled(flag);
478    }
479
480    @Override
481    public synchronized void setDomStorageEnabled(boolean flag) {
482        if (DebugFlags.TRACE_API) Log.d(LOGTAG, "setDomStorageEnabled=" + flag);
483        mAwSettings.setDomStorageEnabled(flag);
484    }
485
486    @Override
487    public synchronized boolean getDomStorageEnabled() {
488        return mAwSettings.getDomStorageEnabled();
489    }
490
491    @Override
492    public synchronized String getDatabasePath() {
493        // Intentional no-op.
494        return "";
495    }
496
497    @Override
498    public synchronized boolean getDatabaseEnabled() {
499        return mAwSettings.getDatabaseEnabled();
500    }
501
502    @Override
503    public synchronized void setGeolocationEnabled(boolean flag) {
504        if (DebugFlags.TRACE_API) Log.d(LOGTAG, "setGeolocationEnabled=" + flag);
505        mAwSettings.setGeolocationEnabled(flag);
506    }
507
508    @Override
509    public synchronized boolean getJavaScriptEnabled() {
510        return mAwSettings.getJavaScriptEnabled();
511    }
512
513    @Override
514    public boolean getAllowUniversalAccessFromFileURLs() {
515        return mAwSettings.getAllowUniversalAccessFromFileURLs();
516    }
517
518    @Override
519    public boolean getAllowFileAccessFromFileURLs() {
520        return mAwSettings.getAllowFileAccessFromFileURLs();
521    }
522
523    @Override
524    public synchronized boolean getPluginsEnabled() {
525        return mAwSettings.getPluginsEnabled();
526    }
527
528    @Override
529    public synchronized PluginState getPluginState() {
530        return mAwSettings.getPluginState();
531    }
532
533    @Override
534    public synchronized void setJavaScriptCanOpenWindowsAutomatically(boolean flag) {
535        if (DebugFlags.TRACE_API) Log.d(LOGTAG, "setJavaScriptCanOpenWindowsAutomatically=" + flag);
536        mAwSettings.setJavaScriptCanOpenWindowsAutomatically(flag);
537    }
538
539    @Override
540    public synchronized boolean getJavaScriptCanOpenWindowsAutomatically() {
541        return mAwSettings.getJavaScriptCanOpenWindowsAutomatically();
542    }
543
544    @Override
545    public synchronized void setDefaultTextEncodingName(String encoding) {
546        if (DebugFlags.TRACE_API) Log.d(LOGTAG, "setDefaultTextEncodingName=" + encoding);
547        mAwSettings.setDefaultTextEncodingName(encoding);
548    }
549
550    @Override
551    public synchronized String getDefaultTextEncodingName() {
552        return mAwSettings.getDefaultTextEncodingName();
553    }
554
555    @Override
556    public synchronized void setUserAgentString(String ua) {
557        if (DebugFlags.TRACE_API) Log.d(LOGTAG, "setUserAgentString=" + ua);
558        mAwSettings.setUserAgentString(ua);
559    }
560
561    @Override
562    public synchronized String getUserAgentString() {
563        return mAwSettings.getUserAgentString();
564    }
565
566    @Override
567    public void setNeedInitialFocus(boolean flag) {
568        if (DebugFlags.TRACE_API) Log.d(LOGTAG, "setNeedInitialFocus=" + flag);
569        mAwSettings.setShouldFocusFirstNode(flag);
570    }
571
572    @Override
573    public synchronized void setRenderPriority(RenderPriority priority) {
574        // Intentional no-op.
575    }
576
577    @Override
578    public void setCacheMode(int mode) {
579        if (DebugFlags.TRACE_API) Log.d(LOGTAG, "setCacheMode=" + mode);
580        mAwSettings.setCacheMode(mode);
581    }
582
583    @Override
584    public int getCacheMode() {
585        return mAwSettings.getCacheMode();
586    }
587
588    @Override
589    public void setMediaPlaybackRequiresUserGesture(boolean require) {
590        if (DebugFlags.TRACE_API) Log.d(LOGTAG, "setMediaPlaybackRequiresUserGesture=" + require);
591        mAwSettings.setMediaPlaybackRequiresUserGesture(require);
592    }
593
594    @Override
595    public boolean getMediaPlaybackRequiresUserGesture() {
596        return mAwSettings.getMediaPlaybackRequiresUserGesture();
597    }
598
599//    @Override
600    public void setMixedContentMode(int mode) {
601        mAwSettings.setMixedContentMode(mode);
602    }
603
604//    @Override
605    public int getMixedContentMode() {
606        return mAwSettings.getMixedContentMode();
607    }
608
609//    @Override
610    public void setVideoOverlayForEmbeddedEncryptedVideoEnabled(boolean flag) {
611        mAwSettings.setVideoOverlayForEmbeddedVideoEnabled(flag);
612    }
613
614//    @Override
615    public boolean getVideoOverlayForEmbeddedEncryptedVideoEnabled() {
616        return mAwSettings.getVideoOverlayForEmbeddedVideoEnabled();
617    }
618}
619