diff options
author | Simon Sapin <simon.sapin@exyr.org> | 2017-12-17 23:53:32 +0100 |
---|---|---|
committer | Gregory Terzian <gterzian@users.noreply.github.com> | 2018-09-12 13:33:32 +0800 |
commit | 2a996fbc8fef722b264389680cc55c25c46807d1 (patch) | |
tree | 22c19321899cf4b35384c8c8e186f1a0bf7913c8 /components/script/serviceworker_manager.rs | |
parent | b977b4994c678ce1d9bca69be72d095522c25f71 (diff) | |
download | servo-2a996fbc8fef722b264389680cc55c25c46807d1.tar.gz servo-2a996fbc8fef722b264389680cc55c25c46807d1.zip |
Replace mpsc with crossbeam/servo channel, update ipc-channel
Co-authored-by: Gregory Terzian <gterzian@users.noreply.github.com>
Diffstat (limited to 'components/script/serviceworker_manager.rs')
-rw-r--r-- | components/script/serviceworker_manager.rs | 18 |
1 files changed, 7 insertions, 11 deletions
diff --git a/components/script/serviceworker_manager.rs b/components/script/serviceworker_manager.rs index 2bf19aa25a5..4573a5666c3 100644 --- a/components/script/serviceworker_manager.rs +++ b/components/script/serviceworker_manager.rs @@ -13,13 +13,12 @@ use dom::bindings::structuredclone::StructuredCloneData; use dom::serviceworkerglobalscope::{ServiceWorkerGlobalScope, ServiceWorkerScriptMsg}; use dom::serviceworkerregistration::longest_prefix_match; use ipc_channel::ipc::{self, IpcSender}; -use ipc_channel::router::ROUTER; use net_traits::{CustomResponseMediator, CoreResourceMsg}; use script_traits::{ServiceWorkerMsg, ScopeThings, SWManagerMsg, SWManagerSenders, DOMMessage}; +use servo_channel::{channel, route_ipc_receiver_to_new_servo_receiver, Sender, Receiver}; use servo_config::prefs::PREFS; use servo_url::ServoUrl; use std::collections::HashMap; -use std::sync::mpsc::{channel, Sender, Receiver, RecvError}; use std::thread; enum Message { @@ -56,8 +55,8 @@ impl ServiceWorkerManager { pub fn spawn_manager(sw_senders: SWManagerSenders) { let (own_sender, from_constellation_receiver) = ipc::channel().unwrap(); let (resource_chan, resource_port) = ipc::channel().unwrap(); - let from_constellation = ROUTER.route_ipc_receiver_to_new_mpsc_receiver(from_constellation_receiver); - let resource_port = ROUTER.route_ipc_receiver_to_new_mpsc_receiver(resource_port); + let from_constellation = route_ipc_receiver_to_new_servo_receiver(from_constellation_receiver); + let resource_port = route_ipc_receiver_to_new_servo_receiver(resource_port); let _ = sw_senders.resource_sender.send(CoreResourceMsg::NetworkMediator(resource_chan)); let _ = sw_senders.swmanager_sender.send(SWManagerMsg::OwnSender(own_sender.clone())); thread::Builder::new().name("ServiceWorkerManager".to_owned()).spawn(move || { @@ -108,7 +107,7 @@ impl ServiceWorkerManager { } fn handle_message(&mut self) { - while let Ok(message) = self.receive_message() { + while let Some(message) = self.receive_message() { let should_continue = match message { Message::FromConstellation(msg) => { self.handle_message_from_constellation(msg) @@ -184,13 +183,10 @@ impl ServiceWorkerManager { true } - #[allow(unsafe_code)] - fn receive_message(&mut self) -> Result<Message, RecvError> { - let msg_from_constellation = &self.own_port; - let msg_from_resource = &self.resource_receiver; + fn receive_message(&mut self) -> Option<Message> { select! { - msg = msg_from_constellation.recv() => msg.map(Message::FromConstellation), - msg = msg_from_resource.recv() => msg.map(Message::FromResource) + recv(self.own_port.select(), msg) => msg.map(Message::FromConstellation), + recv(self.resource_receiver.select(), msg) => msg.map(Message::FromResource), } } } |