Use ROUTER::add_typed_route instead of ROUTER::add_route everywhere (#33866)

* Use ROUTER::add_typed_route where possible

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>

* Update webxr, media and ipc-channel

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>

---------

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
This commit is contained in:
Simon Wülker 2024-10-18 12:47:52 +02:00 committed by GitHub
parent ff374c1428
commit e33bae6d0a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
40 changed files with 177 additions and 195 deletions

View file

@ -45,5 +45,5 @@ unicode-script = { workspace = true }
webrender = { workspace = true }
webrender_api = { workspace = true }
webrender_traits = { workspace = true }
webxr = { git = "https://github.com/servo/webxr", features = ["ipc"] }
webxr-api = { git = "https://github.com/servo/webxr", features = ["ipc"] }
webxr = { workspace = true, features = ["ipc"] }
webxr-api = { workspace = true, features = ["ipc"] }

View file

@ -46,7 +46,7 @@ tracing = { workspace = true, optional = true }
webrender = { workspace = true }
webrender_api = { workspace = true }
webrender_traits = { workspace = true }
webxr = { git = "https://github.com/servo/webxr" }
webxr = { workspace = true }
[dev-dependencies]
surfman = { workspace = true }

View file

@ -51,7 +51,7 @@ webgpu = { path = "../webgpu" }
webrender = { workspace = true }
webrender_api = { workspace = true }
webrender_traits = { workspace = true }
webxr-api = { git = "https://github.com/servo/webxr", features = ["ipc"] }
webxr-api = { workspace = true, features = ["ipc"] }
[target.'cfg(any(target_os="macos", all(not(target_os = "windows"), not(target_os = "ios"), not(target_os="android"), not(target_arch="arm"), not(target_arch="aarch64"))))'.dependencies]
gaol = "0.2.1"

View file

@ -594,9 +594,11 @@ where
T: for<'de> Deserialize<'de> + Serialize + Send + 'static,
{
let (crossbeam_sender, crossbeam_receiver) = unbounded();
ROUTER.add_route(
ipc_receiver.to_opaque(),
Box::new(move |message| drop(crossbeam_sender.send(message.to::<T>()))),
ROUTER.add_typed_route(
ipc_receiver,
Box::new(move |message| {
let _ = crossbeam_sender.send(message);
}),
);
crossbeam_receiver
}

View file

@ -86,11 +86,10 @@ impl NetworkListener {
},
};
ROUTER.add_route(
ipc_receiver.to_opaque(),
ROUTER.add_typed_route(
ipc_receiver,
Box::new(move |message| {
let msg = message.to();
match msg {
match message {
Ok(FetchResponseMsg::ProcessResponse(request_id, res)) => {
listener.check_redirect(request_id, res)
},

View file

@ -240,21 +240,19 @@ impl Pipeline {
let (script_to_devtools_ipc_sender, script_to_devtools_ipc_receiver) =
ipc::channel().expect("Pipeline script to devtools chan");
let devtools_sender = (*devtools_sender).clone();
ROUTER.add_route(
script_to_devtools_ipc_receiver.to_opaque(),
Box::new(move |message| {
match message.to::<ScriptToDevtoolsControlMsg>() {
Err(e) => {
error!("Cast to ScriptToDevtoolsControlMsg failed ({}).", e)
},
Ok(message) => {
if let Err(e) = devtools_sender
.send(DevtoolsControlMsg::FromScript(message))
{
warn!("Sending to devtools failed ({:?})", e)
}
},
}
ROUTER.add_typed_route(
script_to_devtools_ipc_receiver,
Box::new(move |message| match message {
Err(e) => {
error!("Cast to ScriptToDevtoolsControlMsg failed ({}).", e)
},
Ok(message) => {
if let Err(e) = devtools_sender
.send(DevtoolsControlMsg::FromScript(message))
{
warn!("Sending to devtools failed ({:?})", e)
}
},
}),
);
script_to_devtools_ipc_sender

View file

@ -69,9 +69,9 @@ where
}
#[allow(clippy::wrong_self_convention)] // It is an alias to the underlying module
pub fn to_opaque(self) -> ipc_channel::ipc::OpaqueIpcReceiver {
pub fn to_ipc_receiver(self) -> ipc_channel::ipc::IpcReceiver<T> {
match self {
GLPlayerReceiver::Ipc(receiver) => receiver.to_opaque(),
GLPlayerReceiver::Ipc(receiver) => receiver,
_ => unreachable!(),
}
}

View file

@ -560,11 +560,11 @@ async fn obtain_response(
let devtools_bytes = devtools_bytes.clone();
let chunk_requester2 = chunk_requester.clone();
ROUTER.add_route(
body_port.to_opaque(),
ROUTER.add_typed_route(
body_port,
Box::new(move |message| {
info!("Received message");
let bytes: Vec<u8> = match message.to().unwrap() {
let bytes: Vec<u8> = match message.unwrap() {
BodyChunkResponse::Chunk(bytes) => bytes,
BodyChunkResponse::Done => {
// Step 3, abort these parallel steps.

View file

@ -98,10 +98,10 @@ fn create_request_body_with_content(content: Vec<u8>) -> RequestBody {
let content_len = content.len();
let (chunk_request_sender, chunk_request_receiver) = ipc::channel().unwrap();
ROUTER.add_route(
chunk_request_receiver.to_opaque(),
ROUTER.add_typed_route(
chunk_request_receiver,
Box::new(move |message| {
let request = message.to().unwrap();
let request = message.unwrap();
if let BodyChunkRequest::Connect(sender) = request {
let _ = sender.send(BodyChunkResponse::Chunk(content.clone()));
let _ = sender.send(BodyChunkResponse::Done);

View file

@ -157,10 +157,10 @@ fn setup_dom_listener(
) -> UnboundedReceiver<DomMsg> {
let (sender, receiver) = unbounded_channel();
ROUTER.add_route(
dom_action_receiver.to_opaque(),
ROUTER.add_typed_route(
dom_action_receiver,
Box::new(move |message| {
let dom_action = message.to().expect("Ws dom_action message to deserialize");
let dom_action = message.expect("Ws dom_action message to deserialize");
trace!("handling WS DOM action: {:?}", dom_action);
match dom_action {
WebSocketDomAction::SendMessage(MessageData::Text(data)) => {

View file

@ -65,10 +65,10 @@ impl Profiler {
// be unregistered, because as long as the memory profiler is running the system memory
// reporter can make measurements.
let (system_reporter_sender, system_reporter_receiver) = ipc::channel().unwrap();
ROUTER.add_route(
system_reporter_receiver.to_opaque(),
ROUTER.add_typed_route(
system_reporter_receiver,
Box::new(|message| {
let request: ReporterRequest = message.to().unwrap();
let request: ReporterRequest = message.unwrap();
system_reporter::collect_reports(request)
}),
);

View file

@ -116,7 +116,7 @@ webdriver = { workspace = true }
webgpu = { path = "../webgpu" }
webrender_api = { workspace = true }
webrender_traits = { workspace = true }
webxr-api = { git = "https://github.com/servo/webxr", features = ["ipc"] }
webxr-api = { workspace = true, features = ["ipc"] }
xml5ever = { workspace = true }
[target.'cfg(not(target_os = "ios"))'.dependencies]

View file

@ -114,10 +114,10 @@ impl TransmitBodyConnectHandler {
let mut body_handler = self.clone();
body_handler.reset_in_memory_done();
ROUTER.add_route(
chunk_request_receiver.to_opaque(),
ROUTER.add_typed_route(
chunk_request_receiver,
Box::new(move |message| {
let request = message.to().unwrap();
let request = message.unwrap();
match request {
BodyChunkRequest::Connect(sender) => {
body_handler.start_reading(sender);
@ -397,11 +397,10 @@ impl ExtractedBody {
source,
);
ROUTER.add_route(
chunk_request_receiver.to_opaque(),
ROUTER.add_typed_route(
chunk_request_receiver,
Box::new(move |message| {
let request = message.to().unwrap();
match request {
match message.unwrap() {
BodyChunkRequest::Connect(sender) => {
body_handler.start_reading(sender);
},

View file

@ -116,14 +116,14 @@ impl AnalyserNode {
.dom_manipulation_task_source_with_canceller();
let this = Trusted::new(&*object);
ROUTER.add_route(
recv.to_opaque(),
ROUTER.add_typed_route(
recv,
Box::new(move |block| {
let this = this.clone();
let _ = source.queue_with_canceller(
task!(append_analysis_block: move || {
let this = this.root();
this.push_block(block.to().unwrap())
this.push_block(block.unwrap())
}),
&canceller,
);

View file

@ -245,8 +245,8 @@ pub fn response_async<T: AsyncBluetoothListener + DomObject + 'static>(
promise: Some(TrustedPromise::new(promise.clone())),
receiver: Trusted::new(receiver),
}));
ROUTER.add_route(
action_receiver.to_opaque(),
ROUTER.add_typed_route(
action_receiver,
Box::new(move |message| {
struct ListenerTask<T: AsyncBluetoothListener + DomObject> {
context: Arc<Mutex<BluetoothContext<T>>>,
@ -265,7 +265,7 @@ pub fn response_async<T: AsyncBluetoothListener + DomObject + 'static>(
let task = ListenerTask {
context: context.clone(),
action: message.to().unwrap(),
action: message.unwrap(),
};
let result = task_source.queue_unconditionally(task);

View file

@ -607,10 +607,10 @@ impl EventSourceMethods for EventSource {
task_source: global.networking_task_source(),
canceller: Some(global.task_canceller(TaskSourceName::Networking)),
};
ROUTER.add_route(
action_receiver.to_opaque(),
ROUTER.add_typed_route(
action_receiver,
Box::new(move |message| {
listener.notify_fetch(message.to().unwrap());
listener.notify_fetch(message.unwrap());
}),
);
let cancel_receiver = ev.canceller.borrow_mut().initialize();

View file

@ -306,8 +306,9 @@ impl FakeXRDeviceMethods for FakeXRDevice {
.task_manager()
.dom_manipulation_task_source_with_canceller();
let (sender, receiver) = ipc::channel(global.time_profiler_chan().clone()).unwrap();
ROUTER.add_route(
receiver.to_opaque(),
ROUTER.add_typed_route(
receiver.to_ipc_receiver(),
Box::new(move |_| {
let trusted = trusted
.take()

View file

@ -229,14 +229,11 @@ impl GamepadHapticActuatorMethods for GamepadHapticActuator {
context,
};
ROUTER.add_route(
effect_complete_receiver.to_opaque(),
Box::new(move |message| {
let msg = message.to::<bool>();
match msg {
Ok(msg) => listener.handle_completed(msg),
Err(err) => warn!("Error receiving a GamepadMsg: {:?}", err),
}
ROUTER.add_typed_route(
effect_complete_receiver,
Box::new(move |message| match message {
Ok(msg) => listener.handle_completed(msg),
Err(err) => warn!("Error receiving a GamepadMsg: {:?}", err),
}),
);
@ -301,14 +298,11 @@ impl GamepadHapticActuatorMethods for GamepadHapticActuator {
context,
};
ROUTER.add_route(
effect_stop_receiver.to_opaque(),
Box::new(move |message| {
let msg = message.to::<bool>();
match msg {
Ok(msg) => listener.handle_stopped(msg),
Err(err) => warn!("Error receiving a GamepadMsg: {:?}", err),
}
ROUTER.add_typed_route(
effect_stop_receiver,
Box::new(move |message| match message {
Ok(msg) => listener.handle_stopped(msg),
Err(err) => warn!("Error receiving a GamepadMsg: {:?}", err),
}),
);

View file

@ -847,10 +847,10 @@ impl GlobalScope {
task_source,
canceller,
};
ROUTER.add_route(
timer_ipc_port.to_opaque(),
ROUTER.add_typed_route(
timer_ipc_port,
Box::new(move |message| {
let event = message.to().unwrap();
let event = message.unwrap();
timer_listener.handle(event);
}),
);
@ -1435,14 +1435,11 @@ impl GlobalScope {
task_source,
context,
};
ROUTER.add_route(
broadcast_control_receiver.to_opaque(),
Box::new(move |message| {
let msg = message.to();
match msg {
Ok(msg) => listener.handle(msg),
Err(err) => warn!("Error receiving a BroadcastMsg: {:?}", err),
}
ROUTER.add_typed_route(
broadcast_control_receiver,
Box::new(move |message| match message {
Ok(msg) => listener.handle(msg),
Err(err) => warn!("Error receiving a BroadcastMsg: {:?}", err),
}),
);
let router_id = BroadcastChannelRouterId::new();
@ -1491,14 +1488,11 @@ impl GlobalScope {
task_source,
context,
};
ROUTER.add_route(
port_control_receiver.to_opaque(),
Box::new(move |message| {
let msg = message.to();
match msg {
Ok(msg) => listener.notify(msg),
Err(err) => warn!("Error receiving a MessagePortMsg: {:?}", err),
}
ROUTER.add_typed_route(
port_control_receiver,
Box::new(move |message| match message {
Ok(msg) => listener.notify(msg),
Err(err) => warn!("Error receiving a MessagePortMsg: {:?}", err),
}),
);
let router_id = MessagePortRouterId::new();
@ -2021,13 +2015,10 @@ impl GlobalScope {
task_canceller,
};
ROUTER.add_route(
recv.to_opaque(),
ROUTER.add_typed_route(
recv.to_ipc_receiver(),
Box::new(move |msg| {
file_listener.handle(
msg.to()
.expect("Deserialization of file listener msg failed."),
);
file_listener.handle(msg.expect("Deserialization of file listener msg failed."));
}),
);
@ -2050,13 +2041,10 @@ impl GlobalScope {
task_canceller,
};
ROUTER.add_route(
recv.to_opaque(),
ROUTER.add_typed_route(
recv.to_ipc_receiver(),
Box::new(move |msg| {
file_listener.handle(
msg.to()
.expect("Deserialization of file listener msg failed."),
);
file_listener.handle(msg.expect("Deserialization of file listener msg failed."));
}),
);
}

View file

@ -76,8 +76,8 @@ pub fn response_async<T: AsyncWGPUListener + DomObject + 'static>(
.task_canceller(TaskSourceName::DOMManipulation);
let mut trusted: Option<TrustedPromise> = Some(TrustedPromise::new(promise.clone()));
let trusted_receiver = Trusted::new(receiver);
ROUTER.add_route(
action_receiver.to_opaque(),
ROUTER.add_typed_route(
action_receiver,
Box::new(move |message| {
let trusted = if let Some(trusted) = trusted.take() {
trusted
@ -92,7 +92,7 @@ pub fn response_async<T: AsyncWGPUListener + DomObject + 'static>(
};
let result = task_source.queue_with_canceller(
task!(process_webgpu_task: move|| {
context.response(message.to().unwrap(), CanGc::note());
context.response(message.unwrap(), CanGc::note());
}),
&canceller,
);

View file

@ -1077,14 +1077,15 @@ impl HTMLImageElement {
.task_manager()
.networking_task_source_with_canceller();
let generation = elem.generation.get();
ROUTER.add_route(
responder_receiver.to_opaque(),
ROUTER.add_typed_route(
responder_receiver,
Box::new(move |message| {
debug!("Got image {:?}", message);
// Return the image via a message to the script thread, which marks
// the element as dirty and triggers a reflow.
let element = trusted_node.clone();
let image: PendingImageResponse = message.to().unwrap();
let image: PendingImageResponse = message.unwrap();
let selected_source_clone = selected_source.clone();
let _ = task_source.queue_with_canceller(
task!(process_image_response_for_environment_change: move || {

View file

@ -1372,10 +1372,10 @@ impl HTMLMediaElement {
let (task_source, canceller) = window
.task_manager()
.media_element_task_source_with_canceller();
ROUTER.add_route(
action_receiver.to_opaque(),
ROUTER.add_typed_route(
action_receiver,
Box::new(move |message| {
let event = message.to().unwrap();
let event = message.unwrap();
trace!("Player event {:?}", event);
let this = trusted_node.clone();
if let Err(err) = task_source.queue_with_canceller(
@ -1415,10 +1415,10 @@ impl HTMLMediaElement {
let (task_source, canceller) = window
.task_manager()
.media_element_task_source_with_canceller();
ROUTER.add_route(
image_receiver.to_opaque(),
ROUTER.add_typed_route(
image_receiver.to_ipc_receiver(),
Box::new(move |message| {
let msg = message.to().unwrap();
let msg = message.unwrap();
let this = trusted_node.clone();
if let Err(err) = task_source.queue_with_canceller(
task!(handle_glplayer_message: move || {

View file

@ -153,14 +153,11 @@ impl ServiceWorkerContainerMethods for ServiceWorkerContainer {
let (job_result_sender, job_result_receiver) = ipc::channel().expect("ipc channel failure");
ROUTER.add_route(
job_result_receiver.to_opaque(),
Box::new(move |message| {
let msg = message.to();
match msg {
Ok(msg) => handler.handle(msg),
Err(err) => warn!("Error receiving a JobResult: {:?}", err),
}
ROUTER.add_typed_route(
job_result_receiver,
Box::new(move |message| match message {
Ok(msg) => handler.handle(msg),
Err(err) => warn!("Error receiving a JobResult: {:?}", err),
}),
);

View file

@ -268,9 +268,9 @@ impl WebSocketMethods for WebSocket {
let task_source = global.websocket_task_source();
let canceller = global.task_canceller(WebsocketTaskSource::NAME);
ROUTER.add_route(
dom_event_receiver.to_opaque(),
Box::new(move |message| match message.to().unwrap() {
ROUTER.add_typed_route(
dom_event_receiver.to_ipc_receiver(),
Box::new(move |message| match message.unwrap() {
WebSocketNetworkEvent::ConnectionEstablished { protocol_in_use } => {
let open_thread = ConnectionEstablishedTask {
address: address.clone(),

View file

@ -1934,10 +1934,10 @@ impl Window {
let (responder, responder_listener) =
ProfiledIpc::channel(self.global().time_profiler_chan().clone()).unwrap();
let image_cache_chan = self.image_cache_chan.clone();
ROUTER.add_route(
responder_listener.to_opaque(),
ROUTER.add_typed_route(
responder_listener.to_ipc_receiver(),
Box::new(move |message| {
let _ = image_cache_chan.send((pipeline_id, message.to().unwrap()));
let _ = image_cache_chan.send((pipeline_id, message.unwrap()));
}),
);
self.image_cache

View file

@ -204,10 +204,10 @@ impl XRSession {
let (task_source, canceller) = window
.task_manager()
.dom_manipulation_task_source_with_canceller();
ROUTER.add_route(
frame_receiver.to_opaque(),
ROUTER.add_typed_route(
frame_receiver,
Box::new(move |message| {
let frame: Frame = message.to().unwrap();
let frame: Frame = message.unwrap();
let time = CrossProcessInstant::now();
let this = this.clone();
let _ = task_source.queue_with_canceller(
@ -235,13 +235,13 @@ impl XRSession {
.dom_manipulation_task_source_with_canceller();
let (sender, receiver) = ipc::channel(global.time_profiler_chan().clone()).unwrap();
ROUTER.add_route(
receiver.to_opaque(),
ROUTER.add_typed_route(
receiver.to_ipc_receiver(),
Box::new(move |message| {
let this = this.clone();
let _ = task_source.queue_with_canceller(
task!(xr_event_callback: move || {
this.root().event_callback(message.to().unwrap(), CanGc::note());
this.root().event_callback(message.unwrap(), CanGc::note());
}),
&canceller,
);
@ -1047,14 +1047,14 @@ impl XRSessionMethods for XRSession {
.dom_manipulation_task_source_with_canceller();
let (sender, receiver) = ipc::channel(global.time_profiler_chan().clone()).unwrap();
ROUTER.add_route(
receiver.to_opaque(),
ROUTER.add_typed_route(
receiver.to_ipc_receiver(),
Box::new(move |message| {
let this = this.clone();
let _ = task_source.queue_with_canceller(
task!(update_session_framerate: move || {
let session = this.root();
session.apply_nominal_framerate(message.to().unwrap());
session.apply_nominal_framerate(message.unwrap());
if let Some(promise) = session.update_framerate_promise.borrow_mut().take() {
promise.resolve_native(&());
};

View file

@ -121,8 +121,8 @@ impl XRSystemMethods for XRSystem {
.task_manager()
.dom_manipulation_task_source_with_canceller();
let (sender, receiver) = ipc::channel(global.time_profiler_chan().clone()).unwrap();
ROUTER.add_route(
receiver.to_opaque(),
ROUTER.add_typed_route(
receiver.to_ipc_receiver(),
Box::new(move |message| {
// router doesn't know this is only called once
let trusted = if let Some(trusted) = trusted.take() {
@ -131,7 +131,7 @@ impl XRSystemMethods for XRSystem {
error!("supportsSession callback called twice!");
return;
};
let message: Result<(), webxr_api::Error> = if let Ok(message) = message.to() {
let message: Result<(), webxr_api::Error> = if let Ok(message) = message {
message
} else {
error!("supportsSession callback given incorrect payload");
@ -242,14 +242,14 @@ impl XRSystemMethods for XRSystem {
let (sender, receiver) = ipc::channel(global.time_profiler_chan().clone()).unwrap();
let (frame_sender, frame_receiver) = ipc_crate::channel().unwrap();
let mut frame_receiver = Some(frame_receiver);
ROUTER.add_route(
receiver.to_opaque(),
ROUTER.add_typed_route(
receiver.to_ipc_receiver(),
Box::new(move |message| {
// router doesn't know this is only called once
let trusted = trusted.take().unwrap();
let this = this.clone();
let frame_receiver = frame_receiver.take().unwrap();
let message: Result<Session, webxr_api::Error> = if let Ok(message) = message.to() {
let message: Result<Session, webxr_api::Error> = if let Ok(message) = message {
message
} else {
error!("requestSession callback given incorrect payload");

View file

@ -154,16 +154,16 @@ impl XRTestMethods for XRTest {
.task_manager()
.dom_manipulation_task_source_with_canceller();
let (sender, receiver) = ipc::channel(global.time_profiler_chan().clone()).unwrap();
ROUTER.add_route(
receiver.to_opaque(),
ROUTER.add_typed_route(
receiver.to_ipc_receiver(),
Box::new(move |message| {
let trusted = trusted
.take()
.expect("SimulateDeviceConnection callback called twice");
let this = this.clone();
let message = message
.to()
.expect("SimulateDeviceConnection callback given incorrect payload");
let message =
message.expect("SimulateDeviceConnection callback given incorrect payload");
let _ = task_source.queue_with_canceller(
task!(request_session: move || {
@ -209,8 +209,8 @@ impl XRTestMethods for XRTest {
.task_manager()
.dom_manipulation_task_source_with_canceller();
ROUTER.add_route(
receiver.to_opaque(),
ROUTER.add_typed_route(
receiver.to_ipc_receiver(),
Box::new(move |_| {
len -= 1;
if len == 0 {

View file

@ -32,11 +32,12 @@ pub fn generate_cache_listener_for_element<
.task_manager()
.networking_task_source_with_canceller();
let generation = elem.generation_id();
ROUTER.add_route(
responder_receiver.to_opaque(),
ROUTER.add_typed_route(
responder_receiver,
Box::new(move |message| {
let element = trusted_node.clone();
let image: PendingImageResponse = message.to().unwrap();
let image: PendingImageResponse = message.unwrap();
debug!("Got image {:?}", image);
let _ = task_source.queue_with_canceller(
task!(process_image_response: move || {

View file

@ -83,8 +83,8 @@ webgpu = { path = "../webgpu" }
webrender = { workspace = true }
webrender_api = { workspace = true }
webrender_traits = { workspace = true }
webxr = { git = "https://github.com/servo/webxr" }
webxr-api = { git = "https://github.com/servo/webxr" }
webxr = { workspace = true }
webxr-api = { workspace = true }
[target.'cfg(all(not(target_os = "windows"), not(target_os = "ios"), not(target_os = "android"), not(target_arch = "arm"), not(target_arch = "aarch64")))'.dependencies]
gaol = "0.2.1"

View file

@ -991,11 +991,11 @@ fn create_compositor_channel(
};
let compositor_proxy_clone = compositor_proxy.clone();
ROUTER.add_route(
compositor_ipc_receiver.to_opaque(),
ROUTER.add_typed_route(
compositor_ipc_receiver,
Box::new(move |message| {
compositor_proxy_clone.send(CompositorMsg::CrossProcess(
message.to().expect("Could not convert Compositor message"),
message.expect("Could not convert Compositor message"),
));
}),
);

View file

@ -28,4 +28,4 @@ servo_config = { path = "../../config" }
sparkle = { workspace = true }
style = { workspace = true }
webrender_api = { workspace = true }
webxr-api = { git = "https://github.com/servo/webxr", features = ["ipc"] }
webxr-api = { workspace = true, features = ["ipc"] }

View file

@ -23,4 +23,4 @@ num-traits = { workspace = true }
serde = { workspace = true }
servo_url = { path = "../../url" }
webrender_api = { workspace = true }
webxr-api = { git = "https://github.com/servo/webxr", features = ["ipc"] }
webxr-api = { workspace = true, features = ["ipc"] }

View file

@ -532,10 +532,10 @@ impl FetchThread {
let (to_fetch_sender, from_fetch_sender) = ipc::channel().unwrap();
let sender_clone = sender.clone();
ROUTER.add_route(
from_fetch_sender.to_opaque(),
ROUTER.add_typed_route(
from_fetch_sender,
Box::new(move |message| {
let message: FetchResponseMsg = message.to().unwrap();
let message: FetchResponseMsg = message.unwrap();
let _ = sender_clone.send(ToFetchThreadMessage::FetchResponse(message));
}),
);

View file

@ -35,8 +35,8 @@ where
self.ipc_receiver.try_recv()
}
pub fn to_opaque(self) -> ipc::OpaqueIpcReceiver {
self.ipc_receiver.to_opaque()
pub fn to_ipc_receiver(self) -> ipc::IpcReceiver<T> {
self.ipc_receiver
}
}

View file

@ -75,11 +75,11 @@ impl ProfilerChan {
{
// Register the memory reporter.
let (reporter_sender, reporter_receiver) = ipc::channel().unwrap();
ROUTER.add_route(
reporter_receiver.to_opaque(),
ROUTER.add_typed_route(
reporter_receiver,
Box::new(move |message| {
// Just injects an appropriate event into the paint thread's queue.
let request: ReporterRequest = message.to().unwrap();
let request: ReporterRequest = message.unwrap();
channel_for_reporter.send(msg(request.reports_channel));
}),
);

View file

@ -45,4 +45,4 @@ webdriver = { workspace = true }
webgpu = { path = "../../webgpu" }
webrender_api = { workspace = true }
webrender_traits = { workspace = true }
webxr-api = { git = "https://github.com/servo/webxr", features = ["ipc"] }
webxr-api = { workspace = true, features = ["ipc"] }