diff options
author | bors-servo <metajack+bors@gmail.com> | 2015-02-21 07:39:51 -0700 |
---|---|---|
committer | bors-servo <metajack+bors@gmail.com> | 2015-02-21 07:39:51 -0700 |
commit | 1ad9c678f7fbfaffe86a0f76904aaf5f5a3bbee2 (patch) | |
tree | 4962e3ca807f28bcc4d466702b3a26045defae48 | |
parent | bc5eeb00a1874c7211d6a656871000f9352c2f40 (diff) | |
parent | 61086d6ee54c8033b0baf43f3408c13693128b8d (diff) | |
download | servo-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.rs | 4 | ||||
-rw-r--r-- | components/script/dom/worker.rs | 31 |
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); + } +} |