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