Remove expect calls in service worker manager thread

This commit is contained in:
Rahul Sharma 2016-07-20 13:17:54 +05:30
parent 701e678d8e
commit 66c04a0a07

View file

@ -15,10 +15,15 @@ use ipc_channel::router::ROUTER;
use net_traits::{CustomResponseMediator, CoreResourceMsg}; use net_traits::{CustomResponseMediator, CoreResourceMsg};
use script_traits::{ServiceWorkerMsg, ScopeThings, SWManagerMsg, SWManagerSenders}; use script_traits::{ServiceWorkerMsg, ScopeThings, SWManagerMsg, SWManagerSenders};
use std::collections::HashMap; use std::collections::HashMap;
use std::sync::mpsc::{channel, Receiver}; use std::sync::mpsc::{channel, Receiver, RecvError};
use url::Url; use url::Url;
use util::thread::spawn_named; use util::thread::spawn_named;
enum Message {
FromResource(CustomResponseMediator),
FromConstellation(ServiceWorkerMsg)
}
pub struct ServiceWorkerManager { pub struct ServiceWorkerManager {
// map of registered service worker descriptors // map of registered service worker descriptors
registered_workers: HashMap<Url, ScopeThings>, registered_workers: HashMap<Url, ScopeThings>,
@ -102,9 +107,19 @@ impl ServiceWorkerManager {
} }
fn handle_message(&mut self) { fn handle_message(&mut self) {
while self.receive_message() { while let Ok(message) = self.receive_message() {
// process message let should_continue = match message {
} Message::FromConstellation(msg) => {
self.handle_message_from_constellation(msg)
},
Message::FromResource(msg) => {
self.handle_message_from_resource(msg)
}
};
if !should_continue {
break;
}
}
} }
fn handle_message_from_constellation(&mut self, msg: ServiceWorkerMsg) -> bool { fn handle_message_from_constellation(&mut self, msg: ServiceWorkerMsg) -> bool {
@ -140,24 +155,12 @@ impl ServiceWorkerManager {
} }
#[allow(unsafe_code)] #[allow(unsafe_code)]
fn receive_message(&mut self) -> bool { fn receive_message(&mut self) -> Result<Message, RecvError> {
enum Message { let msg_from_constellation = &self.own_port;
FromResource(CustomResponseMediator), let msg_from_resource = &self.resource_receiver;
FromConstellation(ServiceWorkerMsg) select! {
} msg = msg_from_constellation.recv() => msg.map(Message::FromConstellation),
let message = { msg = msg_from_resource.recv() => msg.map(Message::FromResource)
let msg_from_constellation = &self.own_port;
let msg_from_resource = &self.resource_receiver;
select! {
msg = msg_from_constellation.recv() =>
Message::FromConstellation(msg.expect("Unexpected constellation channel panic in sw-manager")),
msg = msg_from_resource.recv() =>
Message::FromResource(msg.expect("Unexpected resource channel panic in sw-manager"))
}
};
match message {
Message::FromConstellation(msg) => self.handle_message_from_constellation(msg),
Message::FromResource(mediator) => self.handle_message_from_resource(mediator)
} }
} }
} }