Rewild Your Web
web browser dweb
at main 99 lines 3.0 kB view raw
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}