mirror of
https://github.com/servo/servo.git
synced 2025-08-04 05:00:08 +01:00
Remove expect calls in service worker manager thread
This commit is contained in:
parent
701e678d8e
commit
66c04a0a07
1 changed files with 25 additions and 22 deletions
|
@ -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)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue