aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbors-servo <metajack+bors@gmail.com>2015-02-21 07:39:51 -0700
committerbors-servo <metajack+bors@gmail.com>2015-02-21 07:39:51 -0700
commit1ad9c678f7fbfaffe86a0f76904aaf5f5a3bbee2 (patch)
tree4962e3ca807f28bcc4d466702b3a26045defae48
parentbc5eeb00a1874c7211d6a656871000f9352c2f40 (diff)
parent61086d6ee54c8033b0baf43f3408c13693128b8d (diff)
downloadservo-1ad9c678f7fbfaffe86a0f76904aaf5f5a3bbee2.tar.gz
servo-1ad9c678f7fbfaffe86a0f76904aaf5f5a3bbee2.zip
auto merge of #4931 : KiChjang/servo/worker-error-event, r=jdm
Fixes #4511
-rw-r--r--components/script/dom/dedicatedworkerglobalscope.rs4
-rw-r--r--components/script/dom/worker.rs31
2 files changed, 34 insertions, 1 deletions
diff --git a/components/script/dom/dedicatedworkerglobalscope.rs b/components/script/dom/dedicatedworkerglobalscope.rs
index d7b68f933b6..32314d8fc8a 100644
--- a/components/script/dom/dedicatedworkerglobalscope.rs
+++ b/components/script/dom/dedicatedworkerglobalscope.rs
@@ -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)) => {
diff --git a/components/script/dom/worker.rs b/components/script/dom/worker.rs
index 709b8f73d7c..4ab21e1db52 100644
--- a/components/script/dom/worker.rs
+++ b/components/script/dom/worker.rs
@@ -89,6 +89,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();
@@ -134,3 +146,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);
+ }
+}