mirror of
https://github.com/servo/servo.git
synced 2025-08-11 08:25:32 +01:00
api: Flatten and simplify Servo preferences (#34966)
Flatten and simplify Servo's preferences code. In addition, have both preferences and options passed in as arguments to `Servo::new()` and make sure not to use the globally set preferences in `servoshell` (as much as possible now). Instead of a complex procedural macro to generate preferences, just expose a very simple derive macro that adds string based getters and setters. - All command-line parsing is moved to servoshell. - There is no longer the concept of a missing preference. - Preferences no longer have to be part of the resources bundle because they now have reasonable default values. - servoshell specific preferences are no longer part of the preferences exposed by the Servo API. Signed-off-by: Martin Robinson <mrobinson@igalia.com>
This commit is contained in:
parent
c4c85affb5
commit
0e616e0c5d
316 changed files with 2088 additions and 3235 deletions
|
@ -6,7 +6,6 @@
|
|||
use std::path::{Path, PathBuf};
|
||||
|
||||
use servo::net_traits::pub_domains::is_reg_domain;
|
||||
use servo::servo_config::pref;
|
||||
use servo::servo_url::ServoUrl;
|
||||
|
||||
#[cfg(not(any(target_os = "android", target_env = "ohos")))]
|
||||
|
@ -25,6 +24,7 @@ pub fn get_default_url(
|
|||
url_opt: Option<&str>,
|
||||
cwd: impl AsRef<Path>,
|
||||
exists: impl FnOnce(&PathBuf) -> bool,
|
||||
preferences: &crate::prefs::ServoShellPreferences,
|
||||
) -> ServoUrl {
|
||||
// If the url is not provided, we fallback to the homepage in prefs,
|
||||
// or a blank page in case the homepage is not set either.
|
||||
|
@ -48,13 +48,10 @@ pub fn get_default_url(
|
|||
}
|
||||
|
||||
if new_url.is_none() && url_opt.is_some() {
|
||||
new_url = location_bar_input_to_url(url_opt.unwrap());
|
||||
new_url = location_bar_input_to_url(url_opt.unwrap(), &preferences.searchpage);
|
||||
}
|
||||
|
||||
let pref_url = {
|
||||
let homepage_url = pref!(shell.homepage);
|
||||
parse_url_or_filename(cwd.as_ref(), &homepage_url).ok()
|
||||
};
|
||||
let pref_url = parse_url_or_filename(cwd.as_ref(), &preferences.homepage).ok();
|
||||
let blank_url = ServoUrl::parse("about:blank").ok();
|
||||
|
||||
new_url.or(pref_url).or(blank_url).unwrap()
|
||||
|
@ -64,21 +61,15 @@ pub fn get_default_url(
|
|||
///
|
||||
/// If this is not a valid URL, try to "fix" it by adding a scheme or if all else fails,
|
||||
/// interpret the string as a search term.
|
||||
pub fn location_bar_input_to_url(request: &str) -> Option<ServoUrl> {
|
||||
pub(crate) fn location_bar_input_to_url(request: &str, searchpage: &str) -> Option<ServoUrl> {
|
||||
let request = request.trim();
|
||||
ServoUrl::parse(request)
|
||||
.ok()
|
||||
.or_else(|| {
|
||||
if request.starts_with('/') {
|
||||
ServoUrl::parse(&format!("file://{}", request)).ok()
|
||||
} else if request.contains('/') || is_reg_domain(request) {
|
||||
ServoUrl::parse(&format!("https://{}", request)).ok()
|
||||
} else {
|
||||
None
|
||||
}
|
||||
})
|
||||
.or_else(|| {
|
||||
let url = pref!(shell.searchpage).replace("%s", request);
|
||||
ServoUrl::parse(&url).ok()
|
||||
})
|
||||
ServoUrl::parse(request).ok().or_else(|| {
|
||||
if request.starts_with('/') {
|
||||
ServoUrl::parse(&format!("file://{}", request)).ok()
|
||||
} else if request.contains('/') || is_reg_domain(request) {
|
||||
ServoUrl::parse(&format!("https://{}", request)).ok()
|
||||
} else {
|
||||
ServoUrl::parse(&searchpage.replace("%s", request)).ok()
|
||||
}
|
||||
})
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue