diff options
-rw-r--r-- | components/devtools/Cargo.toml | 3 | ||||
-rw-r--r-- | components/devtools/actors/device.rs | 19 | ||||
-rw-r--r-- | components/devtools/actors/preference.rs | 17 | ||||
-rw-r--r-- | components/devtools/build.rs | 20 |
4 files changed, 55 insertions, 4 deletions
diff --git a/components/devtools/Cargo.toml b/components/devtools/Cargo.toml index a6e7c0685d7..12dc883e59f 100644 --- a/components/devtools/Cargo.toml +++ b/components/devtools/Cargo.toml @@ -10,6 +10,9 @@ publish = false name = "devtools" path = "lib.rs" +[build-dependencies] +chrono = "0.4" + [dependencies] chrono = "0.4" crossbeam-channel = { workspace = true } diff --git a/components/devtools/actors/device.rs b/components/devtools/actors/device.rs index ed4c7993c9c..3fb5eb9a0a7 100644 --- a/components/devtools/actors/device.rs +++ b/components/devtools/actors/device.rs @@ -17,12 +17,24 @@ struct GetDescriptionReply { value: SystemInfo, } +// This is only a minimal subset of the properties exposed/expected by Firefox +// (see https://searchfox.org/mozilla-central/source/devtools/shared/system.js#45) #[derive(Serialize)] struct SystemInfo { apptype: String, - platformVersion: String, + // Display version + version: String, + // Build ID (timestamp with format YYYYMMDDhhmmss), used for compatibility checks + // (see https://searchfox.org/mozilla-central/source/devtools/client/shared/remote-debugging/version-checker.js#82) + appbuildid: String, + // Firefox major.minor version number, use for compatibility checks + platformversion: String, + // Display name + brandName: String, } +include!(concat!(env!("OUT_DIR"), "/build_id.rs")); + pub struct DeviceActor { pub name: String, } @@ -45,7 +57,10 @@ impl Actor for DeviceActor { from: self.name(), value: SystemInfo { apptype: "servo".to_string(), - platformVersion: "71.0".to_string(), + version: env!("CARGO_PKG_VERSION").to_string(), + appbuildid: BUILD_ID.to_string(), + platformversion: "124.0".to_string(), + brandName: "Servo".to_string(), }, }; let _ = stream.write_json_packet(&msg); diff --git a/components/devtools/actors/preference.rs b/components/devtools/actors/preference.rs index 75ce7e0364e..cbf250a4269 100644 --- a/components/devtools/actors/preference.rs +++ b/components/devtools/actors/preference.rs @@ -2,6 +2,7 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ +use std::collections::HashMap; use std::net::TcpStream; use serde::Serialize; @@ -32,11 +33,23 @@ impl Actor for PreferenceActor { &self, _registry: &ActorRegistry, msg_type: &str, - _msg: &Map<String, Value>, + msg: &Map<String, Value>, stream: &mut TcpStream, _id: StreamId, ) -> Result<ActorMessageStatus, ()> { - let pref_value = pref_map().get(msg_type); + let mut key = msg.get("value").unwrap().as_str().unwrap(); + + // Mapping to translate a Firefox preference name onto the corresponding Servo preference name + let pref_name_mapping: HashMap<&str, &str> = + [("dom.serviceWorkers.enabled", "dom.serviceworker.enabled")] + .iter() + .copied() + .collect(); + if pref_name_mapping.contains_key(key) { + key = pref_name_mapping.get(key).unwrap(); + } + + let pref_value = pref_map().get(key); Ok(handle_preference_value( pref_value, self.name(), diff --git a/components/devtools/build.rs b/components/devtools/build.rs new file mode 100644 index 00000000000..54736460636 --- /dev/null +++ b/components/devtools/build.rs @@ -0,0 +1,20 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ + +use std::path::Path; +use std::{env, fs}; + +use chrono::Local; + +fn main() { + let path = Path::new(&env::var_os("OUT_DIR").unwrap()).join("build_id.rs"); + fs::write( + path, + format!( + "const BUILD_ID: &str = \"{}\";", + Local::now().format("%Y%m%d%H%M%S") + ), + ) + .unwrap(); +} |