aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/devtools/Cargo.toml3
-rw-r--r--components/devtools/actors/device.rs19
-rw-r--r--components/devtools/actors/preference.rs17
-rw-r--r--components/devtools/build.rs20
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();
+}