1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "webkit/glue/webpreferences.h"
6
7 #include "base/string_util.h"
8 #include "base/utf_string_conversions.h"
9 #include "third_party/WebKit/Source/WebKit/chromium/public/WebRuntimeFeatures.h"
10 #include "third_party/WebKit/Source/WebKit/chromium/public/WebKit.h"
11 #include "third_party/WebKit/Source/WebKit/chromium/public/WebSettings.h"
12 #include "third_party/WebKit/Source/WebKit/chromium/public/WebString.h"
13 #include "third_party/WebKit/Source/WebKit/chromium/public/WebURL.h"
14 #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h"
15 #include "webkit/glue/webkit_glue.h"
16
17 using WebKit::WebRuntimeFeatures;
18 using WebKit::WebSettings;
19 using WebKit::WebString;
20 using WebKit::WebURL;
21 using WebKit::WebView;
22
WebPreferences()23 WebPreferences::WebPreferences()
24 : standard_font_family(ASCIIToUTF16("Times New Roman")),
25 fixed_font_family(ASCIIToUTF16("Courier New")),
26 serif_font_family(ASCIIToUTF16("Times New Roman")),
27 sans_serif_font_family(ASCIIToUTF16("Arial")),
28 cursive_font_family(ASCIIToUTF16("Script")),
29 fantasy_font_family(), // Not sure what to use on Windows.
30 default_font_size(16),
31 default_fixed_font_size(13),
32 minimum_font_size(0),
33 minimum_logical_font_size(6),
34 default_encoding("ISO-8859-1"),
35 javascript_enabled(true),
36 web_security_enabled(true),
37 javascript_can_open_windows_automatically(true),
38 loads_images_automatically(true),
39 plugins_enabled(true),
40 dom_paste_enabled(false), // enables execCommand("paste")
41 developer_extras_enabled(false), // Requires extra work by embedder
42 site_specific_quirks_enabled(false),
43 shrinks_standalone_images_to_fit(true),
44 uses_universal_detector(false), // Disabled: page cycler regression
45 text_areas_are_resizable(true),
46 java_enabled(true),
47 allow_scripts_to_close_windows(false),
48 uses_page_cache(false),
49 remote_fonts_enabled(true),
50 javascript_can_access_clipboard(false),
51 xss_auditor_enabled(false),
52 local_storage_enabled(false),
53 databases_enabled(false),
54 application_cache_enabled(false),
55 tabs_to_links(true),
56 caret_browsing_enabled(false),
57 hyperlink_auditing_enabled(true),
58 user_style_sheet_enabled(false),
59 author_and_user_styles_enabled(true),
60 frame_flattening_enabled(false),
61 allow_universal_access_from_file_urls(false),
62 allow_file_access_from_file_urls(false),
63 webaudio_enabled(false),
64 experimental_webgl_enabled(false),
65 gl_multisampling_enabled(true),
66 show_composited_layer_borders(false),
67 show_composited_layer_tree(false),
68 show_fps_counter(false),
69 asynchronous_spell_checking_enabled(true),
70 accelerated_compositing_enabled(false),
71 force_compositing_mode(false),
72 composite_to_texture_enabled(false),
73 accelerated_layers_enabled(false),
74 accelerated_video_enabled(false),
75 accelerated_2d_canvas_enabled(false),
76 accelerated_drawing_enabled(false),
77 accelerated_plugins_enabled(false),
78 memory_info_enabled(false),
79 interactive_form_validation_enabled(true),
80 fullscreen_enabled(false) {
81 }
82
~WebPreferences()83 WebPreferences::~WebPreferences() {
84 }
85
Apply(WebView * web_view) const86 void WebPreferences::Apply(WebView* web_view) const {
87 WebSettings* settings = web_view->settings();
88 settings->setStandardFontFamily(standard_font_family);
89 settings->setFixedFontFamily(fixed_font_family);
90 settings->setSerifFontFamily(serif_font_family);
91 settings->setSansSerifFontFamily(sans_serif_font_family);
92 settings->setCursiveFontFamily(cursive_font_family);
93 settings->setFantasyFontFamily(fantasy_font_family);
94 settings->setDefaultFontSize(default_font_size);
95 settings->setDefaultFixedFontSize(default_fixed_font_size);
96 settings->setMinimumFontSize(minimum_font_size);
97 settings->setMinimumLogicalFontSize(minimum_logical_font_size);
98 settings->setDefaultTextEncodingName(ASCIIToUTF16(default_encoding));
99 settings->setJavaScriptEnabled(javascript_enabled);
100 settings->setWebSecurityEnabled(web_security_enabled);
101 settings->setJavaScriptCanOpenWindowsAutomatically(
102 javascript_can_open_windows_automatically);
103 settings->setLoadsImagesAutomatically(loads_images_automatically);
104 settings->setPluginsEnabled(plugins_enabled);
105 settings->setDOMPasteAllowed(dom_paste_enabled);
106 settings->setDeveloperExtrasEnabled(developer_extras_enabled);
107 settings->setNeedsSiteSpecificQuirks(site_specific_quirks_enabled);
108 settings->setShrinksStandaloneImagesToFit(shrinks_standalone_images_to_fit);
109 settings->setUsesEncodingDetector(uses_universal_detector);
110 settings->setTextAreasAreResizable(text_areas_are_resizable);
111 settings->setAllowScriptsToCloseWindows(allow_scripts_to_close_windows);
112 if (user_style_sheet_enabled)
113 settings->setUserStyleSheetLocation(user_style_sheet_location);
114 else
115 settings->setUserStyleSheetLocation(WebURL());
116 settings->setAuthorAndUserStylesEnabled(author_and_user_styles_enabled);
117 settings->setUsesPageCache(uses_page_cache);
118 settings->setDownloadableBinaryFontsEnabled(remote_fonts_enabled);
119 settings->setJavaScriptCanAccessClipboard(javascript_can_access_clipboard);
120 settings->setXSSAuditorEnabled(xss_auditor_enabled);
121 settings->setLocalStorageEnabled(local_storage_enabled);
122 WebRuntimeFeatures::enableDatabase(
123 WebRuntimeFeatures::isDatabaseEnabled() || databases_enabled);
124 settings->setOfflineWebApplicationCacheEnabled(application_cache_enabled);
125 settings->setCaretBrowsingEnabled(caret_browsing_enabled);
126 settings->setHyperlinkAuditingEnabled(hyperlink_auditing_enabled);
127
128 // This setting affects the behavior of links in an editable region:
129 // clicking the link should select it rather than navigate to it.
130 // Safari uses the same default. It is unlikley an embedder would want to
131 // change this, since it would break existing rich text editors.
132 settings->setEditableLinkBehaviorNeverLive();
133
134 settings->setFrameFlatteningEnabled(frame_flattening_enabled);
135
136 settings->setFontRenderingModeNormal();
137 settings->setJavaEnabled(java_enabled);
138
139 // Turn this on to cause WebCore to paint the resize corner for us.
140 settings->setShouldPaintCustomScrollbars(true);
141
142 // By default, allow_universal_access_from_file_urls is set to false and thus
143 // we mitigate attacks from local HTML files by not granting file:// URLs
144 // universal access. Only test shell will enable this.
145 settings->setAllowUniversalAccessFromFileURLs(
146 allow_universal_access_from_file_urls);
147 settings->setAllowFileAccessFromFileURLs(allow_file_access_from_file_urls);
148
149 // We prevent WebKit from checking if it needs to add a "text direction"
150 // submenu to a context menu. it is not only because we don't need the result
151 // but also because it cause a possible crash in Editor::hasBidiSelection().
152 settings->setTextDirectionSubmenuInclusionBehaviorNeverIncluded();
153
154 // Enable the web audio API if requested on the command line.
155 settings->setWebAudioEnabled(webaudio_enabled);
156
157 // Enable experimental WebGL support if requested on command line
158 // and support is compiled in.
159 settings->setExperimentalWebGLEnabled(experimental_webgl_enabled);
160
161 // Disable GL multisampling if requested on command line.
162 settings->setOpenGLMultisamplingEnabled(gl_multisampling_enabled);
163
164 // Display colored borders around composited render layers if requested
165 // on command line.
166 settings->setShowDebugBorders(show_composited_layer_borders);
167
168 // Display an FPS indicator if requested on the command line.
169 settings->setShowFPSCounter(show_fps_counter);
170
171 // Display the current compositor tree as overlay if requested on
172 // the command line
173 settings->setShowPlatformLayerTree(show_composited_layer_tree);
174
175 // Enable gpu-accelerated compositing if requested on the command line.
176 settings->setAcceleratedCompositingEnabled(accelerated_compositing_enabled);
177
178 // Always enter compositing if requested on the command line.
179 settings->setForceCompositingMode(force_compositing_mode);
180
181 // Enable composite to offscreen texture if requested on the command line.
182 settings->setCompositeToTextureEnabled(composite_to_texture_enabled);
183
184 // Enable gpu-accelerated 2d canvas if requested on the command line.
185 settings->setAccelerated2dCanvasEnabled(accelerated_2d_canvas_enabled);
186
187 // Enable gpu-accelerated drawing if requested on the command line.
188 settings->setAcceleratedDrawingEnabled(accelerated_drawing_enabled);
189
190 // Enabling accelerated layers from the command line enabled accelerated
191 // 3D CSS, Video, and Animations.
192 settings->setAcceleratedCompositingFor3DTransformsEnabled(
193 accelerated_layers_enabled);
194 settings->setAcceleratedCompositingForVideoEnabled(
195 accelerated_video_enabled);
196 settings->setAcceleratedCompositingForAnimationEnabled(
197 accelerated_layers_enabled);
198
199 // Enabling accelerated plugins if specified from the command line.
200 settings->setAcceleratedCompositingForPluginsEnabled(
201 accelerated_plugins_enabled);
202
203 // WebGL and accelerated 2D canvas are always gpu composited.
204 settings->setAcceleratedCompositingForCanvasEnabled(
205 experimental_webgl_enabled || accelerated_2d_canvas_enabled);
206
207 // Enable memory info reporting to page if requested on the command line.
208 settings->setMemoryInfoEnabled(memory_info_enabled);
209
210 settings->setAsynchronousSpellCheckingEnabled(
211 asynchronous_spell_checking_enabled);
212
213 for (WebInspectorPreferences::const_iterator it = inspector_settings.begin();
214 it != inspector_settings.end(); ++it)
215 web_view->setInspectorSetting(WebString::fromUTF8(it->first),
216 WebString::fromUTF8(it->second));
217
218 // Tabs to link is not part of the settings. WebCore calls
219 // ChromeClient::tabsToLinks which is part of the glue code.
220 web_view->setTabsToLinks(tabs_to_links);
221
222 settings->setInteractiveFormValidationEnabled(
223 interactive_form_validation_enabled);
224
225 settings->setFullScreenEnabled(fullscreen_enabled);
226 }
227