servo_constellation/
serviceworker.rs1use ipc_channel::IpcError;
6use serde::{Deserialize, Serialize};
7use servo_base::generic_channel::GenericSender;
8use servo_config::opts::{self, Opts};
9use servo_config::prefs;
10use servo_config::prefs::Preferences;
11use servo_constellation_traits::{SWManagerSenders, ServiceWorkerManagerFactory};
12use servo_url::ImmutableOrigin;
13
14use crate::process_manager::Process;
15use crate::sandboxing::{UnprivilegedContent, spawn_multiprocess};
16
17#[derive(Deserialize, Serialize)]
20pub struct ServiceWorkerUnprivilegedContent {
21 pub opts: Opts,
22 pub prefs: Box<Preferences>,
23 senders: SWManagerSenders,
24 origin: ImmutableOrigin,
25 lifeline_sender: Option<GenericSender<()>>,
26}
27
28impl ServiceWorkerUnprivilegedContent {
29 pub fn new(
30 senders: SWManagerSenders,
31 origin: ImmutableOrigin,
32 lifeline_sender: Option<GenericSender<()>>,
33 ) -> ServiceWorkerUnprivilegedContent {
34 ServiceWorkerUnprivilegedContent {
35 opts: (*opts::get()).clone(),
36 prefs: Box::new(prefs::get().clone()),
37 senders,
38 origin,
39 lifeline_sender,
40 }
41 }
42
43 pub fn start<SWF>(self)
45 where
46 SWF: ServiceWorkerManagerFactory,
47 {
48 SWF::create(self.senders, self.origin);
49 }
50
51 pub fn spawn_multiprocess(self) -> Result<Process, IpcError> {
53 spawn_multiprocess(UnprivilegedContent::ServiceWorker(self))
54 }
55}