mirror of
https://github.com/servo/servo.git
synced 2025-09-29 16:19:14 +01:00
script: Migrate swmanager to GenericChannel (#39076)
Migrate `ServiceWorkerMsg` and `SWManagerMsg` to GenericChannel Testing: Covered by service worker wpt tests Part of #38912 Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
This commit is contained in:
parent
93aeac056b
commit
ce8b05738c
6 changed files with 44 additions and 34 deletions
|
@ -12,14 +12,15 @@ use std::sync::Arc;
|
|||
use std::sync::atomic::{AtomicBool, Ordering};
|
||||
use std::thread::{self, JoinHandle};
|
||||
|
||||
use base::generic_channel::{self, GenericSender, ReceiveError, RoutedReceiver};
|
||||
use base::id::{PipelineNamespace, ServiceWorkerId, ServiceWorkerRegistrationId};
|
||||
use constellation_traits::{
|
||||
DOMMessage, Job, JobError, JobResult, JobResultValue, JobType, SWManagerMsg, SWManagerSenders,
|
||||
ScopeThings, ServiceWorkerManagerFactory, ServiceWorkerMsg,
|
||||
};
|
||||
use crossbeam_channel::{Receiver, RecvError, Sender, select, unbounded};
|
||||
use crossbeam_channel::{Receiver, Sender, select, unbounded};
|
||||
use fonts::FontContext;
|
||||
use ipc_channel::ipc::{self, IpcSender};
|
||||
use ipc_channel::ipc;
|
||||
use ipc_channel::router::ROUTER;
|
||||
use net_traits::{CoreResourceMsg, CustomResponseMediator};
|
||||
use servo_config::pref;
|
||||
|
@ -217,11 +218,11 @@ pub struct ServiceWorkerManager {
|
|||
registrations: HashMap<ServoUrl, ServiceWorkerRegistration>,
|
||||
// Will be useful to implement posting a message to a client.
|
||||
// See https://github.com/servo/servo/issues/24660
|
||||
_constellation_sender: IpcSender<SWManagerMsg>,
|
||||
_constellation_sender: GenericSender<SWManagerMsg>,
|
||||
// own sender to send messages here
|
||||
own_sender: IpcSender<ServiceWorkerMsg>,
|
||||
own_sender: GenericSender<ServiceWorkerMsg>,
|
||||
// receiver to receive messages from constellation
|
||||
own_port: Receiver<ServiceWorkerMsg>,
|
||||
own_port: RoutedReceiver<ServiceWorkerMsg>,
|
||||
// to receive resource messages
|
||||
resource_receiver: Receiver<CustomResponseMediator>,
|
||||
/// A shared [`FontContext`] to use for all service workers spawned by this [`ServiceWorkerManager`].
|
||||
|
@ -230,10 +231,10 @@ pub struct ServiceWorkerManager {
|
|||
|
||||
impl ServiceWorkerManager {
|
||||
fn new(
|
||||
own_sender: IpcSender<ServiceWorkerMsg>,
|
||||
from_constellation_receiver: Receiver<ServiceWorkerMsg>,
|
||||
own_sender: GenericSender<ServiceWorkerMsg>,
|
||||
from_constellation_receiver: RoutedReceiver<ServiceWorkerMsg>,
|
||||
resource_port: Receiver<CustomResponseMediator>,
|
||||
constellation_sender: IpcSender<SWManagerMsg>,
|
||||
constellation_sender: GenericSender<SWManagerMsg>,
|
||||
font_context: Arc<FontContext>,
|
||||
) -> ServiceWorkerManager {
|
||||
// Install a pipeline-namespace in the current thread.
|
||||
|
@ -289,10 +290,10 @@ impl ServiceWorkerManager {
|
|||
true
|
||||
}
|
||||
|
||||
fn receive_message(&mut self) -> Result<Message, RecvError> {
|
||||
fn receive_message(&mut self) -> generic_channel::ReceiveResult<Message> {
|
||||
select! {
|
||||
recv(self.own_port) -> msg => msg.map(|m| Message::FromConstellation(Box::new(m))),
|
||||
recv(self.resource_receiver) -> msg => msg.map(Message::FromResource),
|
||||
recv(self.own_port) -> result_msg => generic_channel::to_receive_result::<ServiceWorkerMsg>(result_msg).map(|msg| Message::FromConstellation(Box::new(msg))),
|
||||
recv(self.resource_receiver) -> msg => msg.map(Message::FromResource).map_err(|_e| ReceiveError::Disconnected),
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -452,7 +453,7 @@ impl ServiceWorkerManager {
|
|||
|
||||
/// <https://w3c.github.io/ServiceWorker/#update-algorithm>
|
||||
fn update_serviceworker(
|
||||
own_sender: IpcSender<ServiceWorkerMsg>,
|
||||
own_sender: GenericSender<ServiceWorkerMsg>,
|
||||
scope_url: ServoUrl,
|
||||
scope_things: ScopeThings,
|
||||
font_context: Arc<FontContext>,
|
||||
|
@ -510,7 +511,7 @@ impl ServiceWorkerManagerFactory for ServiceWorkerManager {
|
|||
compositor_api,
|
||||
} = sw_senders;
|
||||
|
||||
let from_constellation = ROUTER.route_ipc_receiver_to_new_crossbeam_receiver(receiver);
|
||||
let from_constellation = receiver.route_preserving_errors();
|
||||
let resource_port = ROUTER.route_ipc_receiver_to_new_crossbeam_receiver(resource_port);
|
||||
let _ = resource_threads
|
||||
.core_thread
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue