Add SimulateColorScheme command and script thread handling (#36253)

Implements Steps 2-3 of #35867:
- Adds `SimulateColorScheme` to `DevtoolScriptControlMsg` for light/dark
mode simulation.
- Handles it in `ScriptThread` with `handle_theme_change` to toggle
themes.

Testing: This PR does not require testing because it only adds
infrastructure (command and handler) but doesn’t yet integrate with
devtools actors.
Fixes: Part of #35867 (https://github.com/servo/servo/issues/35867)

---------

Signed-off-by: Uthman Yahaya Baba <uthmanyahayababa@gmail.com>
This commit is contained in:
Usman Yahaya Baba 2025-04-01 03:08:27 +01:00 committed by GitHub
parent 8b23801a24
commit fab7bbcd38
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 13 additions and 0 deletions

1
Cargo.lock generated
View file

@ -1618,6 +1618,7 @@ version = "0.0.1"
dependencies = [
"base",
"bitflags 2.9.0",
"embedder_traits",
"http 1.3.1",
"ipc-channel",
"malloc_size_of_derive",

View file

@ -2063,6 +2063,14 @@ impl ScriptThread {
DevtoolScriptControlMsg::GetCssDatabase(reply) => {
devtools::handle_get_css_database(reply)
},
DevtoolScriptControlMsg::SimulateColorScheme(id, theme) => {
match documents.find_window(id) {
Some(window) => {
window.handle_theme_change(theme);
},
None => warn!("Message sent to closed pipeline {}.", id),
}
},
}
}

View file

@ -22,3 +22,4 @@ net_traits = { workspace = true }
serde = { workspace = true }
servo_url = { path = "../../url" }
uuid = { workspace = true, features = ["serde"] }
embedder_traits = { workspace = true }

View file

@ -18,6 +18,7 @@ use std::time::{Duration, SystemTime, UNIX_EPOCH};
use base::cross_process_instant::CrossProcessInstant;
use base::id::{BrowsingContextId, PipelineId, WebViewId};
use bitflags::bitflags;
use embedder_traits::Theme;
use http::{HeaderMap, Method};
use ipc_channel::ipc::IpcSender;
use malloc_size_of_derive::MallocSizeOf;
@ -258,6 +259,8 @@ pub enum DevtoolScriptControlMsg {
Reload(PipelineId),
/// Gets the list of all allowed CSS rules and possible values.
GetCssDatabase(IpcSender<HashMap<String, CssDatabaseProperty>>),
/// Simulates a light or dark color scheme for the given pipeline
SimulateColorScheme(PipelineId, Theme),
}
#[derive(Clone, Debug, Deserialize, Serialize)]