1 // Copyright 2020 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_mojom_traits.h"
6
7 #include "base/strings/string_util.h"
8 #include "build/build_config.h"
9 #include "mojo/public/cpp/base/string16_mojom_traits.h"
10 #include "third_party/blink/public/mojom/widget/screen_info.mojom.h"
11 #include "url/mojom/url_gurl_mojom_traits.h"
12
13 namespace mojo {
14
15 // static
16 blink::mojom::PointerType
ToMojom(ui::PointerType scheme)17 EnumTraits<blink::mojom::PointerType, ui::PointerType>::ToMojom(
18 ui::PointerType scheme) {
19 switch (scheme) {
20 case ui::PointerType::POINTER_TYPE_FIRST:
21 return blink::mojom::PointerType::kPointerFirstType;
22 case ui::PointerType::POINTER_TYPE_COARSE:
23 return blink::mojom::PointerType::kPointerCoarseType;
24 case ui::PointerType::POINTER_TYPE_FINE:
25 return blink::mojom::PointerType::kPointerFineType;
26 }
27 NOTREACHED();
28 return blink::mojom::PointerType::kMinValue;
29 }
30
31 // static
FromMojom(blink::mojom::PointerType input,ui::PointerType * out)32 bool EnumTraits<blink::mojom::PointerType, ui::PointerType>::FromMojom(
33 blink::mojom::PointerType input,
34 ui::PointerType* out) {
35 switch (input) {
36 case blink::mojom::PointerType::kPointerFirstType:
37 *out = ui::PointerType::POINTER_TYPE_FIRST;
38 return true;
39 case blink::mojom::PointerType::kPointerCoarseType:
40 *out = ui::PointerType::POINTER_TYPE_COARSE;
41 return true;
42 case blink::mojom::PointerType::kPointerFineType:
43 *out = ui::PointerType::POINTER_TYPE_FINE;
44 return true;
45 }
46 NOTREACHED();
47 return false;
48 }
49
50 // static
51 blink::mojom::HoverType EnumTraits<blink::mojom::HoverType,
ToMojom(ui::HoverType type)52 ui::HoverType>::ToMojom(ui::HoverType type) {
53 switch (type) {
54 case ui::HoverType::HOVER_TYPE_FIRST:
55 return blink::mojom::HoverType::kHoverFirstType;
56 case ui::HoverType::HOVER_TYPE_HOVER:
57 return blink::mojom::HoverType::kHoverHoverType;
58 }
59 NOTREACHED();
60 return blink::mojom::HoverType::kMinValue;
61 }
62
63 // static
FromMojom(blink::mojom::HoverType input,ui::HoverType * out)64 bool EnumTraits<blink::mojom::HoverType, ui::HoverType>::FromMojom(
65 blink::mojom::HoverType input,
66 ui::HoverType* out) {
67 switch (input) {
68 case blink::mojom::HoverType::kHoverFirstType:
69 *out = ui::HoverType::HOVER_TYPE_FIRST;
70 return true;
71 case blink::mojom::HoverType::kHoverHoverType:
72 *out = ui::HoverType::HOVER_TYPE_HOVER;
73 return true;
74 }
75 NOTREACHED();
76 return false;
77 }
78
79 // static
80 blink::mojom::EffectiveConnectionType EnumTraits<
81 blink::mojom::EffectiveConnectionType,
ToMojom(net::EffectiveConnectionType type)82 net::EffectiveConnectionType>::ToMojom(net::EffectiveConnectionType type) {
83 switch (type) {
84 case net::EffectiveConnectionType::EFFECTIVE_CONNECTION_TYPE_UNKNOWN:
85 return blink::mojom::EffectiveConnectionType::
86 kEffectiveConnectionUnknownType;
87 case net::EffectiveConnectionType::EFFECTIVE_CONNECTION_TYPE_OFFLINE:
88 return blink::mojom::EffectiveConnectionType::
89 kEffectiveConnectionOfflineType;
90 case net::EffectiveConnectionType::EFFECTIVE_CONNECTION_TYPE_SLOW_2G:
91 return blink::mojom::EffectiveConnectionType::
92 kEffectiveConnectionSlow2GType;
93 case net::EffectiveConnectionType::EFFECTIVE_CONNECTION_TYPE_2G:
94 return blink::mojom::EffectiveConnectionType::kEffectiveConnection2GType;
95 case net::EffectiveConnectionType::EFFECTIVE_CONNECTION_TYPE_3G:
96 return blink::mojom::EffectiveConnectionType::kEffectiveConnection3GType;
97 case net::EffectiveConnectionType::EFFECTIVE_CONNECTION_TYPE_4G:
98 return blink::mojom::EffectiveConnectionType::kEffectiveConnection4GType;
99 case net::EffectiveConnectionType::EFFECTIVE_CONNECTION_TYPE_LAST:
100 break;
101 }
102 NOTREACHED();
103 return blink::mojom::EffectiveConnectionType::kMaxValue;
104 }
105
106 // static
107 bool EnumTraits<blink::mojom::EffectiveConnectionType,
108 net::EffectiveConnectionType>::
FromMojom(blink::mojom::EffectiveConnectionType input,net::EffectiveConnectionType * out)109 FromMojom(blink::mojom::EffectiveConnectionType input,
110 net::EffectiveConnectionType* out) {
111 switch (input) {
112 case blink::mojom::EffectiveConnectionType::kEffectiveConnectionUnknownType:
113 *out = net::EffectiveConnectionType::EFFECTIVE_CONNECTION_TYPE_UNKNOWN;
114 return true;
115 case blink::mojom::EffectiveConnectionType::kEffectiveConnectionOfflineType:
116 *out = net::EffectiveConnectionType::EFFECTIVE_CONNECTION_TYPE_OFFLINE;
117 return true;
118 case blink::mojom::EffectiveConnectionType::kEffectiveConnectionSlow2GType:
119 *out = net::EffectiveConnectionType::EFFECTIVE_CONNECTION_TYPE_SLOW_2G;
120 return true;
121 case blink::mojom::EffectiveConnectionType::kEffectiveConnection2GType:
122 *out = net::EffectiveConnectionType::EFFECTIVE_CONNECTION_TYPE_2G;
123 return true;
124 case blink::mojom::EffectiveConnectionType::kEffectiveConnection3GType:
125 *out = net::EffectiveConnectionType::EFFECTIVE_CONNECTION_TYPE_3G;
126 return true;
127 case blink::mojom::EffectiveConnectionType::kEffectiveConnection4GType:
128 *out = net::EffectiveConnectionType::EFFECTIVE_CONNECTION_TYPE_4G;
129 return true;
130 }
131 NOTREACHED();
132 return false;
133 }
134
135 // static
136 bool StructTraits<blink::mojom::WebPreferencesDataView,
137 blink::web_pref::WebPreferences>::
Read(blink::mojom::WebPreferencesDataView data,blink::web_pref::WebPreferences * out)138 Read(blink::mojom::WebPreferencesDataView data,
139 blink::web_pref::WebPreferences* out) {
140 if (!data.ReadStandardFontFamilyMap(&out->standard_font_family_map) ||
141 !data.ReadFixedFontFamilyMap(&out->fixed_font_family_map) ||
142 !data.ReadSerifFontFamilyMap(&out->serif_font_family_map) ||
143 !data.ReadSansSerifFontFamilyMap(&out->sans_serif_font_family_map) ||
144 !data.ReadCursiveFontFamilyMap(&out->cursive_font_family_map) ||
145 !data.ReadFantasyFontFamilyMap(&out->fantasy_font_family_map) ||
146 !data.ReadPictographFontFamilyMap(&out->pictograph_font_family_map) ||
147 !data.ReadLazyFrameLoadingDistanceThresholdsPx(
148 &out->lazy_frame_loading_distance_thresholds_px) ||
149 !data.ReadLazyImageLoadingDistanceThresholdsPx(
150 &out->lazy_image_loading_distance_thresholds_px) ||
151 !data.ReadLazyImageFirstKFullyLoad(&out->lazy_image_first_k_fully_load) ||
152 !data.ReadDefaultEncoding(&out->default_encoding) ||
153 !data.ReadTextTrackBackgroundColor(&out->text_track_background_color) ||
154 !data.ReadDefaultEncoding(&out->text_track_text_color) ||
155 !data.ReadTextTrackTextSize(&out->text_track_text_size) ||
156 !data.ReadTextTrackTextShadow(&out->text_track_text_shadow) ||
157 !data.ReadTextTrackFontFamily(&out->text_track_font_family) ||
158 !data.ReadTextTrackFontStyle(&out->text_track_font_style) ||
159 !data.ReadTextTrackFontVariant(&out->text_track_font_variant) ||
160 !data.ReadTextTrackWindowColor(&out->text_track_window_color) ||
161 !data.ReadTextTrackWindowPadding(&out->text_track_window_padding) ||
162 !data.ReadTextTrackWindowRadius(&out->text_track_window_radius) ||
163 !data.ReadPrimaryPointerType(&out->primary_pointer_type) ||
164 !data.ReadPrimaryHoverType(&out->primary_hover_type) ||
165 !data.ReadViewportStyle(&out->viewport_style) ||
166 !data.ReadAnimationPolicy(&out->animation_policy) ||
167 !data.ReadLowPriorityIframesThreshold(
168 &out->low_priority_iframes_threshold) ||
169 !data.ReadNetworkQualityEstimatorWebHoldback(
170 &out->network_quality_estimator_web_holdback) ||
171 !data.ReadWebAppScope(&out->web_app_scope)
172 #if defined(OS_ANDROID)
173 || !data.ReadDefaultVideoPosterUrl(&out->default_video_poster_url)
174 #endif
175 )
176 return false;
177
178 out->default_font_size = data.default_font_size();
179 out->default_fixed_font_size = data.default_fixed_font_size();
180 out->minimum_font_size = data.minimum_font_size();
181 out->minimum_logical_font_size = data.minimum_logical_font_size();
182 out->context_menu_on_mouse_up = data.context_menu_on_mouse_up();
183 out->javascript_enabled = data.javascript_enabled();
184 out->web_security_enabled = data.web_security_enabled();
185 out->loads_images_automatically = data.loads_images_automatically();
186 out->images_enabled = data.images_enabled();
187 out->plugins_enabled = data.plugins_enabled();
188 out->dom_paste_enabled = data.dom_paste_enabled();
189 out->shrinks_standalone_images_to_fit =
190 data.shrinks_standalone_images_to_fit();
191 out->text_areas_are_resizable = data.text_areas_are_resizable();
192 out->allow_scripts_to_close_windows = data.allow_scripts_to_close_windows();
193 out->remote_fonts_enabled = data.remote_fonts_enabled();
194 out->javascript_can_access_clipboard = data.javascript_can_access_clipboard();
195 out->xslt_enabled = data.xslt_enabled();
196 out->dns_prefetching_enabled = data.dns_prefetching_enabled();
197 out->data_saver_enabled = data.data_saver_enabled();
198 out->data_saver_holdback_web_api_enabled =
199 data.data_saver_holdback_web_api_enabled();
200 out->local_storage_enabled = data.local_storage_enabled();
201 out->databases_enabled = data.databases_enabled();
202 out->application_cache_enabled = data.application_cache_enabled();
203 out->tabs_to_links = data.tabs_to_links();
204 out->disable_ipc_flooding_protection = data.disable_ipc_flooding_protection();
205 out->hyperlink_auditing_enabled = data.hyperlink_auditing_enabled();
206 out->allow_universal_access_from_file_urls =
207 data.allow_universal_access_from_file_urls();
208 out->allow_file_access_from_file_urls =
209 data.allow_file_access_from_file_urls();
210 out->webgl1_enabled = data.webgl1_enabled();
211 out->webgl2_enabled = data.webgl2_enabled();
212 out->pepper_3d_enabled = data.pepper_3d_enabled();
213 out->flash_3d_enabled = data.flash_3d_enabled();
214 out->flash_stage3d_enabled = data.flash_stage3d_enabled();
215 out->flash_stage3d_baseline_enabled = data.flash_stage3d_baseline_enabled();
216 out->privileged_webgl_extensions_enabled =
217 data.privileged_webgl_extensions_enabled();
218 out->webgl_errors_to_console_enabled = data.webgl_errors_to_console_enabled();
219 out->hide_scrollbars = data.hide_scrollbars();
220 out->accelerated_2d_canvas_enabled = data.accelerated_2d_canvas_enabled();
221 out->new_canvas_2d_api_enabled = data.new_canvas_2d_api_enabled();
222 out->antialiased_2d_canvas_disabled = data.antialiased_2d_canvas_disabled();
223 out->antialiased_clips_2d_canvas_enabled =
224 data.antialiased_clips_2d_canvas_enabled();
225 out->accelerated_filters_enabled = data.accelerated_filters_enabled();
226 out->deferred_filters_enabled = data.deferred_filters_enabled();
227 out->container_culling_enabled = data.container_culling_enabled();
228 out->allow_running_insecure_content = data.allow_running_insecure_content();
229 out->disable_reading_from_canvas = data.disable_reading_from_canvas();
230 out->strict_mixed_content_checking = data.strict_mixed_content_checking();
231 out->strict_powerful_feature_restrictions =
232 data.strict_powerful_feature_restrictions();
233 out->allow_geolocation_on_insecure_origins =
234 data.allow_geolocation_on_insecure_origins();
235 out->strictly_block_blockable_mixed_content =
236 data.strictly_block_blockable_mixed_content();
237 out->block_mixed_plugin_content = data.block_mixed_plugin_content();
238 out->password_echo_enabled = data.password_echo_enabled();
239 out->disable_reading_from_canvas = data.disable_reading_from_canvas();
240 out->should_clear_document_background =
241 data.should_clear_document_background();
242 out->enable_scroll_animator = data.enable_scroll_animator();
243 out->threaded_scrolling_enabled = data.threaded_scrolling_enabled();
244 out->prefers_reduced_motion = data.prefers_reduced_motion();
245 out->touch_event_feature_detection_enabled =
246 data.touch_event_feature_detection_enabled();
247 out->pointer_events_max_touch_points = data.pointer_events_max_touch_points();
248 out->available_pointer_types = data.available_pointer_types();
249 out->available_hover_types = data.available_hover_types();
250 out->dont_send_key_events_to_javascript =
251 data.dont_send_key_events_to_javascript();
252 out->barrel_button_for_drag_enabled = data.barrel_button_for_drag_enabled();
253 out->sync_xhr_in_documents_enabled = data.sync_xhr_in_documents_enabled();
254 out->target_blank_implies_no_opener_enabled_will_be_removed =
255 data.target_blank_implies_no_opener_enabled_will_be_removed();
256 out->number_of_cpu_cores = data.number_of_cpu_cores();
257 out->editing_behavior = data.editing_behavior();
258 out->supports_multiple_windows = data.supports_multiple_windows();
259 out->viewport_enabled = data.viewport_enabled();
260 out->viewport_meta_enabled = data.viewport_meta_enabled();
261 out->shrinks_viewport_contents_to_fit =
262 data.shrinks_viewport_contents_to_fit();
263 out->smooth_scroll_for_find_enabled = data.smooth_scroll_for_find_enabled();
264 out->main_frame_resizes_are_orientation_changes =
265 data.main_frame_resizes_are_orientation_changes();
266 out->initialize_at_minimum_page_scale =
267 data.initialize_at_minimum_page_scale();
268 out->smart_insert_delete_enabled = data.smart_insert_delete_enabled();
269 out->spatial_navigation_enabled = data.spatial_navigation_enabled();
270 out->navigate_on_drag_drop = data.navigate_on_drag_drop();
271 out->v8_cache_options = data.v8_cache_options();
272 out->record_whole_document = data.record_whole_document();
273 out->cookie_enabled = data.cookie_enabled();
274 out->accelerated_video_decode_enabled =
275 data.accelerated_video_decode_enabled();
276 out->user_gesture_required_for_presentation =
277 data.user_gesture_required_for_presentation();
278 out->text_tracks_enabled = data.text_tracks_enabled();
279 out->text_track_margin_percentage = data.text_track_margin_percentage();
280 out->immersive_mode_enabled = data.immersive_mode_enabled();
281 out->double_tap_to_zoom_enabled = data.double_tap_to_zoom_enabled();
282 out->fullscreen_supported = data.fullscreen_supported();
283 out->text_autosizing_enabled = data.text_autosizing_enabled();
284 #if defined(OS_ANDROID)
285 out->font_scale_factor = data.font_scale_factor();
286 out->device_scale_adjustment = data.device_scale_adjustment();
287 out->force_enable_zoom = data.force_enable_zoom();
288 out->support_deprecated_target_density_dpi =
289 data.support_deprecated_target_density_dpi();
290 out->use_legacy_background_size_shorthand_behavior =
291 data.use_legacy_background_size_shorthand_behavior();
292 out->wide_viewport_quirk = data.wide_viewport_quirk();
293 out->use_wide_viewport = data.use_wide_viewport();
294 out->force_zero_layout_height = data.force_zero_layout_height();
295 out->viewport_meta_merge_content_quirk =
296 data.viewport_meta_merge_content_quirk();
297 out->viewport_meta_non_user_scalable_quirk =
298 data.viewport_meta_non_user_scalable_quirk();
299 out->viewport_meta_zero_values_quirk = data.viewport_meta_zero_values_quirk();
300 out->clobber_user_agent_initial_scale_quirk =
301 data.clobber_user_agent_initial_scale_quirk();
302 out->ignore_main_frame_overflow_hidden_quirk =
303 data.ignore_main_frame_overflow_hidden_quirk();
304 out->report_screen_size_in_physical_pixels_quirk =
305 data.report_screen_size_in_physical_pixels_quirk();
306 out->reuse_global_for_unowned_main_frame =
307 data.reuse_global_for_unowned_main_frame();
308 out->spellcheck_enabled_by_default = data.spellcheck_enabled_by_default();
309 out->video_fullscreen_orientation_lock_enabled =
310 data.video_fullscreen_orientation_lock_enabled();
311 out->video_rotate_to_fullscreen_enabled =
312 data.video_rotate_to_fullscreen_enabled();
313 out->embedded_media_experience_enabled =
314 data.embedded_media_experience_enabled();
315 out->css_hex_alpha_color_enabled = data.css_hex_alpha_color_enabled();
316 out->scroll_top_left_interop_enabled = data.scroll_top_left_interop_enabled();
317 out->disable_features_depending_on_viz =
318 data.disable_features_depending_on_viz();
319 out->disable_accelerated_small_canvases =
320 data.disable_accelerated_small_canvases();
321 #endif
322 out->force_dark_mode_enabled = data.force_dark_mode_enabled();
323 out->default_minimum_page_scale_factor =
324 data.default_minimum_page_scale_factor();
325 out->default_maximum_page_scale_factor =
326 data.default_maximum_page_scale_factor();
327 out->hide_download_ui = data.hide_download_ui();
328 out->presentation_receiver = data.presentation_receiver();
329 out->media_controls_enabled = data.media_controls_enabled();
330 out->do_not_update_selection_on_mutating_selection_range =
331 data.do_not_update_selection_on_mutating_selection_range();
332 out->autoplay_policy = data.autoplay_policy();
333 out->preferred_color_scheme = data.preferred_color_scheme();
334 out->preferred_contrast = data.preferred_contrast();
335 out->picture_in_picture_enabled = data.picture_in_picture_enabled();
336 out->translate_service_available = data.translate_service_available();
337 out->lazy_load_enabled = data.lazy_load_enabled();
338 out->allow_mixed_content_upgrades = data.allow_mixed_content_upgrades();
339 out->always_show_focus = data.always_show_focus();
340 out->touch_drag_drop_enabled = data.touch_drag_drop_enabled();
341 return true;
342 }
343
344 } // namespace mojo
345