Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(63)

Side by Side Diff: content/renderer/web_preferences.cc

Issue 357203003: Move webpreferences.* from webkit/ to content/ (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: android fix - webview() -> web_view Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright 2013 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 "content/public/renderer/web_preferences.h"
6
7 #include "base/strings/utf_string_conversions.h"
8 #include "content/renderer/net_info_helper.h"
9 #include "third_party/WebKit/public/platform/WebConnectionType.h"
10 #include "third_party/WebKit/public/platform/WebString.h"
11 #include "third_party/WebKit/public/platform/WebURL.h"
12 #include "third_party/WebKit/public/web/WebKit.h"
13 #include "third_party/WebKit/public/web/WebNetworkStateNotifier.h"
14 #include "third_party/WebKit/public/web/WebRuntimeFeatures.h"
15 #include "third_party/WebKit/public/web/WebSettings.h"
16 #include "third_party/WebKit/public/web/WebView.h"
17 #include "third_party/icu/source/common/unicode/uchar.h"
18 #include "third_party/icu/source/common/unicode/uscript.h"
19 #include "webkit/common/webpreferences.h"
20
21 using blink::WebNetworkStateNotifier;
22 using blink::WebRuntimeFeatures;
23 using blink::WebSettings;
24 using blink::WebString;
25 using blink::WebURL;
26 using blink::WebView;
27
28 namespace content {
29
30 namespace {
31
32 typedef void (*SetFontFamilyWrapper)(blink::WebSettings*,
33 const base::string16&,
34 UScriptCode);
35
36 void setStandardFontFamilyWrapper(WebSettings* settings,
37 const base::string16& font,
38 UScriptCode script) {
39 settings->setStandardFontFamily(font, script);
40 }
41
42 void setFixedFontFamilyWrapper(WebSettings* settings,
43 const base::string16& font,
44 UScriptCode script) {
45 settings->setFixedFontFamily(font, script);
46 }
47
48 void setSerifFontFamilyWrapper(WebSettings* settings,
49 const base::string16& font,
50 UScriptCode script) {
51 settings->setSerifFontFamily(font, script);
52 }
53
54 void setSansSerifFontFamilyWrapper(WebSettings* settings,
55 const base::string16& font,
56 UScriptCode script) {
57 settings->setSansSerifFontFamily(font, script);
58 }
59
60 void setCursiveFontFamilyWrapper(WebSettings* settings,
61 const base::string16& font,
62 UScriptCode script) {
63 settings->setCursiveFontFamily(font, script);
64 }
65
66 void setFantasyFontFamilyWrapper(WebSettings* settings,
67 const base::string16& font,
68 UScriptCode script) {
69 settings->setFantasyFontFamily(font, script);
70 }
71
72 void setPictographFontFamilyWrapper(WebSettings* settings,
73 const base::string16& font,
74 UScriptCode script) {
75 settings->setPictographFontFamily(font, script);
76 }
77
78 // If |scriptCode| is a member of a family of "similar" script codes, returns
79 // the script code in that family that is used by WebKit for font selection
80 // purposes. For example, USCRIPT_KATAKANA_OR_HIRAGANA and USCRIPT_JAPANESE are
81 // considered equivalent for the purposes of font selection. WebKit uses the
82 // script code USCRIPT_KATAKANA_OR_HIRAGANA. So, if |scriptCode| is
83 // USCRIPT_JAPANESE, the function returns USCRIPT_KATAKANA_OR_HIRAGANA. WebKit
84 // uses different scripts than the ones in Chrome pref names because the version
85 // of ICU included on certain ports does not have some of the newer scripts. If
86 // |scriptCode| is not a member of such a family, returns |scriptCode|.
87 UScriptCode GetScriptForWebSettings(UScriptCode scriptCode) {
88 switch (scriptCode) {
89 case USCRIPT_HIRAGANA:
90 case USCRIPT_KATAKANA:
91 case USCRIPT_JAPANESE:
92 return USCRIPT_KATAKANA_OR_HIRAGANA;
93 case USCRIPT_KOREAN:
94 return USCRIPT_HANGUL;
95 default:
96 return scriptCode;
97 }
98 }
99
100 void ApplyFontsFromMap(const webkit_glue::ScriptFontFamilyMap& map,
101 SetFontFamilyWrapper setter,
102 WebSettings* settings) {
103 for (webkit_glue::ScriptFontFamilyMap::const_iterator it = map.begin();
104 it != map.end();
105 ++it) {
106 int32 script = u_getPropertyValueEnum(UCHAR_SCRIPT, (it->first).c_str());
107 if (script >= 0 && script < USCRIPT_CODE_LIMIT) {
108 UScriptCode code = static_cast<UScriptCode>(script);
109 (*setter)(settings, it->second, GetScriptForWebSettings(code));
110 }
111 }
112 }
113
114 } // namespace
115
116 void ApplyWebPreferences(const WebPreferences& prefs, WebView* web_view) {
117 WebSettings* settings = web_view->settings();
118 ApplyFontsFromMap(prefs.standard_font_family_map,
119 setStandardFontFamilyWrapper, settings);
120 ApplyFontsFromMap(prefs.fixed_font_family_map,
121 setFixedFontFamilyWrapper, settings);
122 ApplyFontsFromMap(prefs.serif_font_family_map,
123 setSerifFontFamilyWrapper, settings);
124 ApplyFontsFromMap(prefs.sans_serif_font_family_map,
125 setSansSerifFontFamilyWrapper, settings);
126 ApplyFontsFromMap(prefs.cursive_font_family_map,
127 setCursiveFontFamilyWrapper, settings);
128 ApplyFontsFromMap(prefs.fantasy_font_family_map,
129 setFantasyFontFamilyWrapper, settings);
130 ApplyFontsFromMap(prefs.pictograph_font_family_map,
131 setPictographFontFamilyWrapper, settings);
132 settings->setDefaultFontSize(prefs.default_font_size);
133 settings->setDefaultFixedFontSize(prefs.default_fixed_font_size);
134 settings->setMinimumFontSize(prefs.minimum_font_size);
135 settings->setMinimumLogicalFontSize(prefs.minimum_logical_font_size);
136 settings->setDefaultTextEncodingName(
137 base::ASCIIToUTF16(prefs.default_encoding));
138 settings->setJavaScriptEnabled(prefs.javascript_enabled);
139 settings->setWebSecurityEnabled(prefs.web_security_enabled);
140 settings->setJavaScriptCanOpenWindowsAutomatically(
141 prefs.javascript_can_open_windows_automatically);
142 settings->setLoadsImagesAutomatically(prefs.loads_images_automatically);
143 settings->setImagesEnabled(prefs.images_enabled);
144 settings->setPluginsEnabled(prefs.plugins_enabled);
145 settings->setDOMPasteAllowed(prefs.dom_paste_enabled);
146 settings->setNeedsSiteSpecificQuirks(prefs.site_specific_quirks_enabled);
147 settings->setShrinksStandaloneImagesToFit(
148 prefs.shrinks_standalone_images_to_fit);
149 settings->setUsesEncodingDetector(prefs.uses_universal_detector);
150 settings->setTextAreasAreResizable(prefs.text_areas_are_resizable);
151 settings->setAllowScriptsToCloseWindows(prefs.allow_scripts_to_close_windows);
152 settings->setDownloadableBinaryFontsEnabled(prefs.remote_fonts_enabled);
153 settings->setJavaScriptCanAccessClipboard(
154 prefs.javascript_can_access_clipboard);
155 WebRuntimeFeatures::enableXSLT(prefs.xslt_enabled);
156 settings->setXSSAuditorEnabled(prefs.xss_auditor_enabled);
157 settings->setDNSPrefetchingEnabled(prefs.dns_prefetching_enabled);
158 settings->setLocalStorageEnabled(prefs.local_storage_enabled);
159 settings->setSyncXHRInDocumentsEnabled(prefs.sync_xhr_in_documents_enabled);
160 WebRuntimeFeatures::enableDatabase(prefs.databases_enabled);
161 settings->setOfflineWebApplicationCacheEnabled(
162 prefs.application_cache_enabled);
163 settings->setCaretBrowsingEnabled(prefs.caret_browsing_enabled);
164 settings->setHyperlinkAuditingEnabled(prefs.hyperlink_auditing_enabled);
165 settings->setCookieEnabled(prefs.cookie_enabled);
166 settings->setNavigateOnDragDrop(prefs.navigate_on_drag_drop);
167
168 settings->setJavaEnabled(prefs.java_enabled);
169
170 // By default, allow_universal_access_from_file_urls is set to false and thus
171 // we mitigate attacks from local HTML files by not granting file:// URLs
172 // universal access. Only test shell will enable this.
173 settings->setAllowUniversalAccessFromFileURLs(
174 prefs.allow_universal_access_from_file_urls);
175 settings->setAllowFileAccessFromFileURLs(
176 prefs.allow_file_access_from_file_urls);
177
178 // Enable the web audio API if requested on the command line.
179 settings->setWebAudioEnabled(prefs.webaudio_enabled);
180
181 // Enable experimental WebGL support if requested on command line
182 // and support is compiled in.
183 settings->setExperimentalWebGLEnabled(prefs.experimental_webgl_enabled);
184
185 // Disable GL multisampling if requested on command line.
186 settings->setOpenGLMultisamplingEnabled(prefs.gl_multisampling_enabled);
187
188 // Enable WebGL errors to the JS console if requested.
189 settings->setWebGLErrorsToConsoleEnabled(
190 prefs.webgl_errors_to_console_enabled);
191
192 // Uses the mock theme engine for scrollbars.
193 settings->setMockScrollbarsEnabled(prefs.mock_scrollbars_enabled);
194
195 settings->setLayerSquashingEnabled(prefs.layer_squashing_enabled);
196
197 // Enable gpu-accelerated compositing always.
198 settings->setAcceleratedCompositingEnabled(true);
199
200 // Enable gpu-accelerated 2d canvas if requested on the command line.
201 settings->setAccelerated2dCanvasEnabled(prefs.accelerated_2d_canvas_enabled);
202
203 settings->setMinimumAccelerated2dCanvasSize(
204 prefs.minimum_accelerated_2d_canvas_size);
205
206 // Disable antialiasing for 2d canvas if requested on the command line.
207 settings->setAntialiased2dCanvasEnabled(
208 !prefs.antialiased_2d_canvas_disabled);
209
210 // Set MSAA sample count for 2d canvas if requested on the command line (or
211 // default value if not).
212 settings->setAccelerated2dCanvasMSAASampleCount(
213 prefs.accelerated_2d_canvas_msaa_sample_count);
214
215 // Enable deferred filter rendering if requested on the command line.
216 settings->setDeferredFiltersEnabled(prefs.deferred_filters_enabled);
217
218 // Enable container culling if requested on the command line.
219 settings->setContainerCullingEnabled(prefs.container_culling_enabled);
220
221 // Enable gesture tap highlight if requested on the command line.
222 settings->setGestureTapHighlightEnabled(prefs.gesture_tap_highlight_enabled);
223
224 // Enabling accelerated layers from the command line enabled accelerated
225 // Video.
226 settings->setAcceleratedCompositingForVideoEnabled(
227 prefs.accelerated_compositing_for_video_enabled);
228
229 // WebGL and accelerated 2D canvas are always gpu composited.
230 settings->setAcceleratedCompositingForCanvasEnabled(
231 prefs.experimental_webgl_enabled || prefs.accelerated_2d_canvas_enabled);
232
233 settings->setAsynchronousSpellCheckingEnabled(
234 prefs.asynchronous_spell_checking_enabled);
235 settings->setUnifiedTextCheckerEnabled(prefs.unified_textchecker_enabled);
236
237 for (webkit_glue::WebInspectorPreferences::const_iterator it =
238 prefs.inspector_settings.begin();
239 it != prefs.inspector_settings.end();
240 ++it) {
241 web_view->setInspectorSetting(WebString::fromUTF8(it->first),
242 WebString::fromUTF8(it->second));
243 }
244
245 // Tabs to link is not part of the settings. WebCore calls
246 // ChromeClient::tabsToLinks which is part of the glue code.
247 web_view->setTabsToLinks(prefs.tabs_to_links);
248
249 settings->setAllowDisplayOfInsecureContent(
250 prefs.allow_displaying_insecure_content);
251 settings->setAllowRunningOfInsecureContent(
252 prefs.allow_running_insecure_content);
253 settings->setPasswordEchoEnabled(prefs.password_echo_enabled);
254 settings->setShouldPrintBackgrounds(prefs.should_print_backgrounds);
255 settings->setShouldClearDocumentBackground(
256 prefs.should_clear_document_background);
257 settings->setEnableScrollAnimator(prefs.enable_scroll_animator);
258
259 settings->setRegionBasedColumnsEnabled(prefs.region_based_columns_enabled);
260
261 WebRuntimeFeatures::enableTouch(prefs.touch_enabled);
262 settings->setMaxTouchPoints(prefs.pointer_events_max_touch_points);
263 settings->setDeviceSupportsTouch(prefs.device_supports_touch);
264 settings->setDeviceSupportsMouse(prefs.device_supports_mouse);
265 settings->setEnableTouchAdjustment(prefs.touch_adjustment_enabled);
266
267 settings->setDeferredImageDecodingEnabled(
268 prefs.deferred_image_decoding_enabled);
269 settings->setShouldRespectImageOrientation(
270 prefs.should_respect_image_orientation);
271
272 settings->setUnsafePluginPastingEnabled(false);
273 settings->setEditingBehavior(
274 static_cast<WebSettings::EditingBehavior>(prefs.editing_behavior));
275
276 settings->setSupportsMultipleWindows(prefs.supports_multiple_windows);
277
278 settings->setViewportEnabled(prefs.viewport_enabled);
279 settings->setLoadWithOverviewMode(prefs.initialize_at_minimum_page_scale);
280 settings->setViewportMetaEnabled(prefs.viewport_meta_enabled);
281 settings->setMainFrameResizesAreOrientationChanges(
282 prefs.main_frame_resizes_are_orientation_changes);
283
284 settings->setSmartInsertDeleteEnabled(prefs.smart_insert_delete_enabled);
285
286 settings->setSpatialNavigationEnabled(prefs.spatial_navigation_enabled);
287
288 settings->setSelectionIncludesAltImageText(true);
289
290 #if defined(OS_ANDROID)
291 settings->setAllowCustomScrollbarInMainFrame(false);
292 settings->setTextAutosizingEnabled(prefs.text_autosizing_enabled);
293 settings->setAccessibilityFontScaleFactor(prefs.font_scale_factor);
294 settings->setDeviceScaleAdjustment(prefs.device_scale_adjustment);
295 web_view->setIgnoreViewportTagScaleLimits(prefs.force_enable_zoom);
296 settings->setAutoZoomFocusedNodeToLegibleScale(true);
297 settings->setDoubleTapToZoomEnabled(prefs.double_tap_to_zoom_enabled);
298 settings->setMediaControlsOverlayPlayButtonEnabled(true);
299 settings->setMediaPlaybackRequiresUserGesture(
300 prefs.user_gesture_required_for_media_playback);
301 settings->setDefaultVideoPosterURL(
302 base::ASCIIToUTF16(prefs.default_video_poster_url.spec()));
303 settings->setSupportDeprecatedTargetDensityDPI(
304 prefs.support_deprecated_target_density_dpi);
305 settings->setUseLegacyBackgroundSizeShorthandBehavior(
306 prefs.use_legacy_background_size_shorthand_behavior);
307 settings->setWideViewportQuirkEnabled(prefs.wide_viewport_quirk);
308 settings->setUseWideViewport(prefs.use_wide_viewport);
309 settings->setViewportMetaLayoutSizeQuirk(
310 prefs.viewport_meta_layout_size_quirk);
311 settings->setViewportMetaMergeContentQuirk(
312 prefs.viewport_meta_merge_content_quirk);
313 settings->setViewportMetaNonUserScalableQuirk(
314 prefs.viewport_meta_non_user_scalable_quirk);
315 settings->setViewportMetaZeroValuesQuirk(
316 prefs.viewport_meta_zero_values_quirk);
317 settings->setClobberUserAgentInitialScaleQuirk(
318 prefs.clobber_user_agent_initial_scale_quirk);
319 settings->setIgnoreMainFrameOverflowHiddenQuirk(
320 prefs.ignore_main_frame_overflow_hidden_quirk);
321 settings->setReportScreenSizeInPhysicalPixelsQuirk(
322 prefs.report_screen_size_in_physical_pixels_quirk);
323 settings->setMainFrameClipsContent(false);
324 settings->setShrinksStandaloneImagesToFit(false);
325 settings->setShrinksViewportContentToFit(true);
326 #endif
327
328 WebNetworkStateNotifier::setOnLine(prefs.is_online);
329 WebNetworkStateNotifier::setWebConnectionType(
330 NetConnectionTypeToWebConnectionType(prefs.connection_type));
331 settings->setPinchVirtualViewportEnabled(
332 prefs.pinch_virtual_viewport_enabled);
333
334 settings->setPinchOverlayScrollbarThickness(
335 prefs.pinch_overlay_scrollbar_thickness);
336 settings->setUseSolidColorScrollbars(prefs.use_solid_color_scrollbars);
337 settings->setCompositorTouchHitTesting(prefs.compositor_touch_hit_testing);
338 }
339
340 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/render_view_impl_params.h ('k') | content/shell/browser/shell_content_browser_client.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698