From b8d6b1d52da3f97cac9b71ad66c828d2e064d0e7 Mon Sep 17 00:00:00 2001 From: Paul Rouget Date: Fri, 17 Jul 2020 08:30:11 +0200 Subject: [PATCH] Support package-prefs.json for libsimpleservo --- Cargo.lock | 1 + ports/libsimpleservo/api/Cargo.toml | 1 + ports/libsimpleservo/api/build.rs | 27 +++++++++++++++++++++++++++ ports/libsimpleservo/api/src/lib.rs | 22 ++++++++++------------ resources/package-prefs.json | 6 ++++++ resources/prefs.json | 2 ++ 6 files changed, 47 insertions(+), 12 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a9eed9e4f66..5b55ecc39d7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5408,6 +5408,7 @@ dependencies = [ "libloading 0.5.2", "libservo", "log", + "serde_json", "servo-media", "surfman", "webxr", diff --git a/ports/libsimpleservo/api/Cargo.toml b/ports/libsimpleservo/api/Cargo.toml index 17e914f5468..97e6b5e53ae 100644 --- a/ports/libsimpleservo/api/Cargo.toml +++ b/ports/libsimpleservo/api/Cargo.toml @@ -30,6 +30,7 @@ libloading = "0.5" [build-dependencies] gl_generator = "0.14" +serde_json = "1.0" [features] debugmozjs = ["libservo/debugmozjs"] diff --git a/ports/libsimpleservo/api/build.rs b/ports/libsimpleservo/api/build.rs index 243e139cf97..16337042c3c 100644 --- a/ports/libsimpleservo/api/build.rs +++ b/ports/libsimpleservo/api/build.rs @@ -3,6 +3,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ use gl_generator::{Api, Fallbacks, Profile, Registry}; +use serde_json::{self, Value}; use std::env; use std::fs::File; use std::path::PathBuf; @@ -40,4 +41,30 @@ fn main() { .write_bindings(gl_generator::StructGenerator, &mut file) .unwrap(); } + + // Merge prefs.json and package-prefs.json + let mut default_prefs = PathBuf::from(env!("CARGO_MANIFEST_DIR")); + default_prefs.push("../../../resources/prefs.json"); + let mut prefs: Value = serde_json::from_reader(File::open(&default_prefs).unwrap()).unwrap(); + let mut pkg_prefs = PathBuf::from(env!("CARGO_MANIFEST_DIR")); + pkg_prefs.push("../../../resources/package-prefs.json"); + let pkg_prefs: Value = serde_json::from_reader(File::open(&pkg_prefs).unwrap()).unwrap(); + if target.contains("uwp") { + // Assuming Hololens build + let to_merge = pkg_prefs + .as_object() + .unwrap() + .get("hololens") + .unwrap() + .as_object() + .unwrap(); + for (key, value) in to_merge.iter() { + prefs + .as_object_mut() + .unwrap() + .insert(key.clone(), value.clone()); + } + } + let file = File::create(&dest.join("prefs.json")).unwrap(); + serde_json::to_writer(file, &prefs).unwrap(); } diff --git a/ports/libsimpleservo/api/src/lib.rs b/ports/libsimpleservo/api/src/lib.rs index fc9ce60b8f9..0c268def50c 100644 --- a/ports/libsimpleservo/api/src/lib.rs +++ b/ports/libsimpleservo/api/src/lib.rs @@ -227,22 +227,20 @@ pub fn init( ) -> Result<(), &'static str> { resources::set(Box::new(ResourceReaderInstance::new())); - let mut args = mem::replace(&mut init_opts.args, vec![]); - if !args.is_empty() { - // opts::from_cmdline_args expects the first argument to be the binary name. - args.insert(0, "servo".to_string()); - - set_pref!( - gfx.subpixel_text_antialiasing.enabled, - init_opts.enable_subpixel_text_antialiasing - ); - opts::from_cmdline_args(Options::new(), &args); - } + set_pref!( + gfx.subpixel_text_antialiasing.enabled, + init_opts.enable_subpixel_text_antialiasing + ); if let Some(prefs) = init_opts.prefs { add_user_prefs(prefs); } + let mut args = mem::replace(&mut init_opts.args, vec![]); + // opts::from_cmdline_args expects the first argument to be the binary name. + args.insert(0, "servo".to_string()); + opts::from_cmdline_args(Options::new(), &args); + let pref_url = ServoUrl::parse(&pref!(shell.homepage)).ok(); let blank_url = ServoUrl::parse("about:blank").ok(); @@ -943,7 +941,7 @@ impl ResourceReaderInstance { impl ResourceReaderMethods for ResourceReaderInstance { fn read(&self, res: Resource) -> Vec { Vec::from(match res { - Resource::Preferences => &include_bytes!("../../../../resources/prefs.json")[..], + Resource::Preferences => &include_bytes!(concat!(env!("OUT_DIR"), "/prefs.json"))[..], Resource::HstsPreloadList => { &include_bytes!("../../../../resources/hsts_preload.json")[..] }, diff --git a/resources/package-prefs.json b/resources/package-prefs.json index d419d7e4586..b469b0d5c5d 100644 --- a/resources/package-prefs.json +++ b/resources/package-prefs.json @@ -5,6 +5,12 @@ "linux": {}, "android": {}, "windows": {}, + "hololens": { + "_comment": "settings specific to Hololens/UWP builds", + "devtools.server.enabled": true, + "dom.webxr.enabled": true, + "shell.homepage": "https://servo.org/hl-home/" + }, "vr": { "_comment": "settings specific to VR builds", "dom.webvr.enabled": true, diff --git a/resources/prefs.json b/resources/prefs.json index d48175de8b4..0cbf5608f90 100644 --- a/resources/prefs.json +++ b/resources/prefs.json @@ -1,4 +1,6 @@ { + "devtools.server.enabled": false, + "devtools.server.port": 0, "dom.bluetooth.enabled": false, "dom.bluetooth.testing.enabled": false, "dom.canvas_capture.enabled": false,