Rewild Your Web
web
browser
dweb
1// SPDX-License-Identifier: AGPL-3.0-or-later
2
3use serde::{Deserialize, Serialize};
4use servo::PrefValue;
5use servo_config_macro::EmbedderPreferences;
6
7/// BrowserHTML-specific preferences.
8#[derive(Clone, Debug, PartialEq, Deserialize, Serialize, EmbedderPreferences)]
9#[namespace = "browserhtml"]
10pub struct BrowserHtmlPreferences {
11 /// The UI theme
12 #[serde(default = "default_theme")]
13 pub theme: String,
14 /// The url of the new Web View page
15 #[serde(default = "default_start_url")]
16 pub start_url: String,
17 /// The url of the homescreen
18 #[serde(default = "default_homescreen_url")]
19 pub homescreen_url: String,
20 /// The alias of the search engine
21 #[serde(default = "default_search_engine")]
22 pub search_engine: String,
23 /// Whether to show the virtual keyboard when an input element is focused.
24 #[serde(default = "default_false")]
25 pub ime_virtual_keyboard_enabled: bool,
26 /// Force mobile UI mode regardless of screen size (for development)
27 #[serde(default = "default_false")]
28 pub mobile_simulation: bool,
29}
30
31fn default_start_url() -> String {
32 "http://system.localhost:8888/new_view.html".to_string()
33}
34
35fn default_homescreen_url() -> String {
36 "http://homescreen.localhost:8888/index.html".to_string()
37}
38
39fn default_theme() -> String {
40 "default".to_string()
41}
42
43fn default_search_engine() -> String {
44 "duckduckgo".to_string()
45}
46
47fn default_false() -> bool {
48 false
49}
50
51impl BrowserHtmlPreferences {
52 /// Default preferences as a const for static initialization.
53 pub const DEFAULT: Self = Self {
54 theme: String::new(),
55 start_url: String::new(),
56 homescreen_url: String::new(),
57 search_engine: String::new(),
58 ime_virtual_keyboard_enabled: false,
59 mobile_simulation: false,
60 };
61}
62
63impl Default for BrowserHtmlPreferences {
64 fn default() -> Self {
65 Self {
66 theme: default_theme(),
67 start_url: default_start_url(),
68 homescreen_url: default_homescreen_url(),
69 search_engine: default_search_engine(),
70 ime_virtual_keyboard_enabled: false,
71 mobile_simulation: false,
72 }
73 }
74}
75
76// Generate global storage and accessors for browserhtml preferences
77servo::define_embedder_prefs!(BrowserHtmlPreferences);
78
79static EXPERIMENTAL_PREFS: &[&str] = &[
80 "dom_async_clipboard_enabled",
81 "dom_fontface_enabled",
82 "dom_intersection_observer_enabled",
83 "dom_navigator_protocol_handlers_enabled",
84 "dom_notification_enabled",
85 "dom_offscreen_canvas_enabled",
86 "dom_permissions_enabled",
87 "dom_webgl2_enabled",
88 "dom_webgpu_enabled",
89 "layout_columns_enabled",
90 "layout_container_queries_enabled",
91 "layout_grid_enabled",
92 "layout_variable_fonts_enabled",
93];
94
95pub(crate) fn enable_experimental_prefs(servo: &servo::Servo) {
96 for pref in EXPERIMENTAL_PREFS {
97 servo.set_preference(pref, PrefValue::Bool(true));
98 }
99}