mirror of
https://github.com/servo/servo.git
synced 2025-07-23 07:13:52 +01:00
Worker now fires errorevent when url fetching failed, fixes #4511
This commit is contained in:
parent
3e7dc57693
commit
61086d6ee5
2 changed files with 34 additions and 1 deletions
|
@ -18,7 +18,7 @@ use dom::bindings::utils::Reflectable;
|
|||
use dom::errorevent::ErrorEvent;
|
||||
use dom::eventtarget::{EventTarget, EventTargetHelpers, EventTargetTypeId};
|
||||
use dom::messageevent::MessageEvent;
|
||||
use dom::worker::{TrustedWorkerAddress, WorkerMessageHandler, Worker};
|
||||
use dom::worker::{TrustedWorkerAddress, WorkerMessageHandler, WorkerEventHandler, Worker};
|
||||
use dom::workerglobalscope::{WorkerGlobalScope, WorkerGlobalScopeHelpers};
|
||||
use dom::workerglobalscope::WorkerGlobalScopeTypeId;
|
||||
use script_task::{ScriptTask, ScriptChan, ScriptMsg, TimerSource};
|
||||
|
@ -146,6 +146,8 @@ impl DedicatedWorkerGlobalScope {
|
|||
let (url, source) = match load_whole_resource(&resource_task, worker_url.clone()) {
|
||||
Err(_) => {
|
||||
println!("error loading script {}", worker_url.serialize());
|
||||
parent_sender.send(ScriptMsg::RunnableMsg(
|
||||
box WorkerEventHandler::new(worker)));
|
||||
return;
|
||||
}
|
||||
Ok((metadata, bytes)) => {
|
||||
|
|
|
@ -92,6 +92,18 @@ impl Worker {
|
|||
MessageEvent::dispatch_jsval(target, global.r(), message);
|
||||
}
|
||||
|
||||
pub fn dispatch_simple_error(address: TrustedWorkerAddress) {
|
||||
let worker = address.to_temporary().root();
|
||||
let global = worker.r().global.root();
|
||||
let target: JSRef<EventTarget> = EventTargetCast::from_ref(worker.r());
|
||||
|
||||
let event = Event::new(global.r(),
|
||||
"error".to_owned(),
|
||||
EventBubbles::DoesNotBubble,
|
||||
EventCancelable::NotCancelable).root();
|
||||
event.r().fire(target);
|
||||
}
|
||||
|
||||
pub fn handle_error_message(address: TrustedWorkerAddress, message: DOMString,
|
||||
filename: DOMString, lineno: u32, colno: u32) {
|
||||
let worker = address.to_temporary().root();
|
||||
|
@ -137,3 +149,22 @@ impl Runnable for WorkerMessageHandler {
|
|||
Worker::handle_message(this.addr, this.data);
|
||||
}
|
||||
}
|
||||
|
||||
pub struct WorkerEventHandler {
|
||||
addr: TrustedWorkerAddress,
|
||||
}
|
||||
|
||||
impl WorkerEventHandler {
|
||||
pub fn new(addr: TrustedWorkerAddress) -> WorkerEventHandler {
|
||||
WorkerEventHandler {
|
||||
addr: addr
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Runnable for WorkerEventHandler {
|
||||
fn handler(self: Box<WorkerEventHandler>) {
|
||||
let this = *self;
|
||||
Worker::dispatch_simple_error(this.addr);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue