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