1 // Copyright 2014 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 "third_party/blink/public/common/web_preferences/web_preferences.h"
6
7 #include "base/strings/string_util.h"
8 #include "base/strings/utf_string_conversions.h"
9 #include "build/build_config.h"
10 #include "build/chromeos_buildflags.h"
11 #include "third_party/blink/public/common/features.h"
12 #include "third_party/blink/public/mojom/v8_cache_options.mojom.h"
13 #include "third_party/blink/public/mojom/webpreferences/web_preferences.mojom.h"
14 #include "ui/base/ui_base_switches_util.h"
15
16 namespace {
17
IsTouchDragDropEnabled()18 bool IsTouchDragDropEnabled() {
19 // Cache the enabled state so it isn't queried on every WebPreferences
20 // creation. Note that this means unit tests can't override the state.
21 static const bool enabled = switches::IsTouchDragDropEnabled();
22 return enabled;
23 }
24
25 } // namespace
26
27 namespace blink {
28
29 namespace web_pref {
30
31 // "Zyyy" is the ISO 15924 script code for undetermined script aka Common.
32 const char kCommonScript[] = "Zyyy";
33
WebPreferences()34 WebPreferences::WebPreferences()
35 : default_font_size(16),
36 default_fixed_font_size(13),
37 minimum_font_size(0),
38 minimum_logical_font_size(6),
39 default_encoding("ISO-8859-1"),
40 #if defined(OS_WIN)
41 context_menu_on_mouse_up(true),
42 #else
43 context_menu_on_mouse_up(false),
44 #endif
45 javascript_enabled(true),
46 web_security_enabled(true),
47 loads_images_automatically(true),
48 images_enabled(true),
49 plugins_enabled(true),
50 dom_paste_enabled(false), // enables execCommand("paste")
51 shrinks_standalone_images_to_fit(true),
52 text_areas_are_resizable(true),
53 allow_scripts_to_close_windows(false),
54 remote_fonts_enabled(true),
55 javascript_can_access_clipboard(false),
56 xslt_enabled(true),
57 dns_prefetching_enabled(true),
58 data_saver_enabled(false),
59 data_saver_holdback_web_api_enabled(false),
60 local_storage_enabled(false),
61 databases_enabled(false),
62 application_cache_enabled(false),
63 tabs_to_links(true),
64 disable_ipc_flooding_protection(false),
65 hyperlink_auditing_enabled(true),
66 allow_universal_access_from_file_urls(false),
67 allow_file_access_from_file_urls(false),
68 webgl1_enabled(true),
69 webgl2_enabled(true),
70 pepper_3d_enabled(false),
71 flash_3d_enabled(true),
72 flash_stage3d_enabled(false),
73 flash_stage3d_baseline_enabled(false),
74 privileged_webgl_extensions_enabled(false),
75 webgl_errors_to_console_enabled(true),
76 hide_scrollbars(false),
77 accelerated_2d_canvas_enabled(false),
78 antialiased_2d_canvas_disabled(false),
79 antialiased_clips_2d_canvas_enabled(true),
80 accelerated_filters_enabled(false),
81 deferred_filters_enabled(false),
82 container_culling_enabled(false),
83 allow_running_insecure_content(false),
84 disable_reading_from_canvas(false),
85 strict_mixed_content_checking(false),
86 strict_powerful_feature_restrictions(false),
87 allow_geolocation_on_insecure_origins(false),
88 strictly_block_blockable_mixed_content(false),
89 block_mixed_plugin_content(false),
90 password_echo_enabled(false),
91 should_print_backgrounds(false),
92 should_clear_document_background(true),
93 enable_scroll_animator(false),
94 threaded_scrolling_enabled(true),
95 prefers_reduced_motion(false),
96 touch_event_feature_detection_enabled(false),
97 pointer_events_max_touch_points(0),
98 available_pointer_types(0),
99 primary_pointer_type(ui::POINTER_TYPE_NONE),
100 available_hover_types(0),
101 primary_hover_type(ui::HOVER_TYPE_NONE),
102 dont_send_key_events_to_javascript(false),
103 sync_xhr_in_documents_enabled(true),
104 number_of_cpu_cores(1),
105 #if defined(OS_MAC)
106 editing_behavior(mojom::EditingBehavior::kEditingMacBehavior),
107 #elif defined(OS_WIN)
108 editing_behavior(mojom::EditingBehavior::kEditingWindowsBehavior),
109 #elif defined(OS_ANDROID)
110 editing_behavior(mojom::EditingBehavior::kEditingAndroidBehavior),
111 #elif BUILDFLAG(IS_ASH)
112 editing_behavior(
113 base::FeatureList::IsEnabled(blink::features::kCrOSAutoSelect)
114 ? mojom::EditingBehavior::kEditingChromeOSBehavior
115 : mojom::EditingBehavior::kEditingUnixBehavior),
116 #elif defined(OS_POSIX)
117 editing_behavior(mojom::EditingBehavior::kEditingUnixBehavior),
118 #else
119 editing_behavior(mojom::EditingBehavior::kEditingMacBehavior),
120 #endif
121 supports_multiple_windows(true),
122 viewport_enabled(false),
123 #if defined(OS_ANDROID)
124 viewport_meta_enabled(true),
125 shrinks_viewport_contents_to_fit(true),
126 viewport_style(mojom::ViewportStyle::kMobile),
127 always_show_context_menu_on_touch(false),
128 smooth_scroll_for_find_enabled(true),
129 #else
130 viewport_meta_enabled(false),
131 shrinks_viewport_contents_to_fit(false),
132 viewport_style(mojom::ViewportStyle::kDefault),
133 always_show_context_menu_on_touch(true),
134 smooth_scroll_for_find_enabled(false),
135 #endif
136 main_frame_resizes_are_orientation_changes(false),
137 initialize_at_minimum_page_scale(true),
138 #if defined(OS_MAC)
139 smart_insert_delete_enabled(true),
140 #else
141 smart_insert_delete_enabled(false),
142 #endif
143 spatial_navigation_enabled(false),
144 navigate_on_drag_drop(true),
145 v8_cache_options(blink::mojom::V8CacheOptions::kDefault),
146 record_whole_document(false),
147 cookie_enabled(true),
148 accelerated_video_decode_enabled(false),
149 animation_policy(
150 blink::mojom::ImageAnimationPolicy::kImageAnimationPolicyAllowed),
151 user_gesture_required_for_presentation(true),
152 text_tracks_enabled(false),
153 text_track_margin_percentage(0.0f),
154 immersive_mode_enabled(false),
155 #if defined(OS_ANDROID) || defined(OS_MAC)
156 double_tap_to_zoom_enabled(true),
157 #else
158 double_tap_to_zoom_enabled(false),
159 #endif
160 fullscreen_supported(true),
161 #if !defined(OS_ANDROID)
162 text_autosizing_enabled(false),
163 #else
164 text_autosizing_enabled(true),
165 font_scale_factor(1.0f),
166 device_scale_adjustment(1.0f),
167 force_enable_zoom(false),
168 support_deprecated_target_density_dpi(false),
169 use_legacy_background_size_shorthand_behavior(false),
170 wide_viewport_quirk(false),
171 use_wide_viewport(true),
172 force_zero_layout_height(false),
173 viewport_meta_merge_content_quirk(false),
174 viewport_meta_non_user_scalable_quirk(false),
175 viewport_meta_zero_values_quirk(false),
176 clobber_user_agent_initial_scale_quirk(false),
177 ignore_main_frame_overflow_hidden_quirk(false),
178 report_screen_size_in_physical_pixels_quirk(false),
179 reuse_global_for_unowned_main_frame(false),
180 spellcheck_enabled_by_default(true),
181 video_fullscreen_orientation_lock_enabled(false),
182 video_rotate_to_fullscreen_enabled(false),
183 embedded_media_experience_enabled(false),
184 css_hex_alpha_color_enabled(true),
185 scroll_top_left_interop_enabled(true),
186 disable_features_depending_on_viz(false),
187 disable_accelerated_small_canvases(false),
188 #endif // defined(OS_ANDROID)
189 #if defined(OS_ANDROID)
190 default_minimum_page_scale_factor(0.25f),
191 default_maximum_page_scale_factor(5.f),
192 #elif defined(OS_MAC)
193 default_minimum_page_scale_factor(1.f),
194 default_maximum_page_scale_factor(3.f),
195 #else
196 default_minimum_page_scale_factor(1.f),
197 default_maximum_page_scale_factor(4.f),
198 #endif
199 hide_download_ui(false),
200 presentation_receiver(false),
201 media_controls_enabled(true),
202 do_not_update_selection_on_mutating_selection_range(false),
203 autoplay_policy(
204 blink::mojom::AutoplayPolicy::kDocumentUserActivationRequired),
205 low_priority_iframes_threshold(net::EFFECTIVE_CONNECTION_TYPE_UNKNOWN),
206 picture_in_picture_enabled(true),
207 translate_service_available(false),
208 network_quality_estimator_web_holdback(
209 net::EFFECTIVE_CONNECTION_TYPE_UNKNOWN),
210 allow_mixed_content_upgrades(true),
211 always_show_focus(false),
212 touch_drag_drop_enabled(IsTouchDragDropEnabled()) {
213 standard_font_family_map[web_pref::kCommonScript] =
214 base::ASCIIToUTF16("Times New Roman");
215 fixed_font_family_map[web_pref::kCommonScript] =
216 base::ASCIIToUTF16("Courier New");
217 serif_font_family_map[web_pref::kCommonScript] =
218 base::ASCIIToUTF16("Times New Roman");
219 sans_serif_font_family_map[web_pref::kCommonScript] =
220 base::ASCIIToUTF16("Arial");
221 cursive_font_family_map[web_pref::kCommonScript] =
222 base::ASCIIToUTF16("Script");
223 fantasy_font_family_map[web_pref::kCommonScript] =
224 base::ASCIIToUTF16("Impact");
225 pictograph_font_family_map[web_pref::kCommonScript] =
226 base::ASCIIToUTF16("Times New Roman");
227 }
228
229 WebPreferences::WebPreferences(const WebPreferences& other) = default;
230
231 WebPreferences::WebPreferences(WebPreferences&& other) = default;
232
233 WebPreferences::~WebPreferences() = default;
234
235 WebPreferences& WebPreferences::operator=(const WebPreferences& other) =
236 default;
237
238 WebPreferences& WebPreferences::operator=(WebPreferences&& other) = default;
239
240 } // namespace web_pref
241
242 } // namespace blink
243