aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAvi Weinstock <aweinstock314@gmail.com>2015-03-09 09:24:40 -0400
committerAvi Weinstock <aweinstock314@gmail.com>2015-03-09 09:24:40 -0400
commit7803f2b216f736ac703e55010bfbd70e4dfc0cad (patch)
treeaa1cc133862e7e539ea5bd2e33e33d94632c40be
parentfbacd1a4c42c104d679de1a04fea4ddd41e1ca44 (diff)
downloadservo-7803f2b216f736ac703e55010bfbd70e4dfc0cad.tar.gz
servo-7803f2b216f736ac703e55010bfbd70e4dfc0cad.zip
Subsume ScriptMsg::WorkerDispatchErrorEvent into ScriptMsg::RunnableMsg via introduction of Worker::WorkerErrorHandler (Closes #5171).
-rw-r--r--components/script/dom/dedicatedworkerglobalscope.rs10
-rw-r--r--components/script/dom/worker.rs27
-rw-r--r--components/script/script_task.rs6
3 files changed, 30 insertions, 13 deletions
diff --git a/components/script/dom/dedicatedworkerglobalscope.rs b/components/script/dom/dedicatedworkerglobalscope.rs
index ea16903fd8f..3ae4cbc147e 100644
--- a/components/script/dom/dedicatedworkerglobalscope.rs
+++ b/components/script/dom/dedicatedworkerglobalscope.rs
@@ -18,11 +18,10 @@ use dom::bindings::utils::Reflectable;
use dom::errorevent::ErrorEvent;
use dom::eventtarget::{EventTarget, EventTargetHelpers, EventTargetTypeId};
use dom::messageevent::MessageEvent;
-use dom::worker::{TrustedWorkerAddress, WorkerMessageHandler, WorkerEventHandler, Worker};
+use dom::worker::{TrustedWorkerAddress, WorkerMessageHandler, WorkerEventHandler, WorkerErrorHandler};
use dom::workerglobalscope::{WorkerGlobalScope, WorkerGlobalScopeHelpers};
use dom::workerglobalscope::WorkerGlobalScopeTypeId;
use script_task::{ScriptTask, ScriptChan, ScriptMsg, TimerSource};
-use script_task::ScriptMsg::WorkerDispatchErrorEvent;
use script_task::StackRootTLS;
use net::resource_task::{ResourceTask, load_whole_resource};
@@ -217,9 +216,6 @@ impl<'a> PrivateDedicatedWorkerGlobalScopeHelpers for JSRef<'a, DedicatedWorkerG
let scope: JSRef<WorkerGlobalScope> = WorkerGlobalScopeCast::from_ref(self);
LiveDOMReferences::cleanup(scope.get_cx(), addr);
}
- ScriptMsg::WorkerDispatchErrorEvent(addr, msg, file_name, line_num, col_num) => {
- Worker::handle_error_message(addr, msg, file_name, line_num, col_num);
- },
ScriptMsg::FireTimer(TimerSource::FromWorker, timer_id) => {
let scope: JSRef<WorkerGlobalScope> = WorkerGlobalScopeCast::from_ref(self);
scope.handle_fire_timer(timer_id);
@@ -234,8 +230,8 @@ impl<'a> PrivateDedicatedWorkerGlobalScopeHelpers for JSRef<'a, DedicatedWorkerG
let line_num = errorevent.Lineno();
let col_num = errorevent.Colno();
let worker = self.worker.borrow().as_ref().unwrap().clone();
- self.parent_sender.send(ScriptMsg::WorkerDispatchErrorEvent(worker, msg, file_name,
- line_num, col_num)).unwrap();
+ self.parent_sender.send(ScriptMsg::RunnableMsg(
+ box WorkerErrorHandler::new(worker, msg, file_name, line_num, col_num))).unwrap();
}
}
diff --git a/components/script/dom/worker.rs b/components/script/dom/worker.rs
index 4ab21e1db52..d764fff259e 100644
--- a/components/script/dom/worker.rs
+++ b/components/script/dom/worker.rs
@@ -165,3 +165,30 @@ impl Runnable for WorkerEventHandler {
Worker::dispatch_simple_error(this.addr);
}
}
+
+pub struct WorkerErrorHandler {
+ addr: TrustedWorkerAddress,
+ msg: DOMString,
+ file_name: DOMString,
+ line_num: u32,
+ col_num: u32,
+}
+
+impl WorkerErrorHandler {
+ pub fn new(addr: TrustedWorkerAddress, msg: DOMString, file_name: DOMString, line_num: u32, col_num: u32) -> WorkerErrorHandler {
+ WorkerErrorHandler {
+ addr: addr,
+ msg: msg,
+ file_name: file_name,
+ line_num: line_num,
+ col_num: col_num,
+ }
+ }
+}
+
+impl Runnable for WorkerErrorHandler {
+ fn handler(self: Box<WorkerErrorHandler>) {
+ let this = *self;
+ Worker::handle_error_message(this.addr, this.msg, this.file_name, this.line_num, this.col_num);
+ }
+}
diff --git a/components/script/script_task.rs b/components/script/script_task.rs
index 0c92c370be3..deffe3e8f66 100644
--- a/components/script/script_task.rs
+++ b/components/script/script_task.rs
@@ -37,7 +37,6 @@ use dom::uievent::UIEvent;
use dom::eventtarget::EventTarget;
use dom::node::{self, Node, NodeHelpers, NodeDamage, window_from_node};
use dom::window::{Window, WindowHelpers, ScriptHelpers, ReflowReason};
-use dom::worker::{Worker, TrustedWorkerAddress};
use parse::html::{HTMLInput, parse_html};
use layout_interface::{ScriptLayoutChan, LayoutChan, ReflowGoal, ReflowQueryType};
use layout_interface;
@@ -67,7 +66,6 @@ use net::storage_task::StorageTask;
use string_cache::Atom;
use util::geometry::to_frac_px;
use util::smallvec::SmallVec;
-use util::str::DOMString;
use util::task::{spawn_named, spawn_named_with_send_on_failure};
use util::task_state;
@@ -173,8 +171,6 @@ pub enum ScriptMsg {
/// Message sent through Worker.postMessage (only dispatched to
/// DedicatedWorkerGlobalScope).
DOMMessage(StructuredCloneData),
- /// Sends a message to the Worker object (dispatched to all tasks) regarding error.
- WorkerDispatchErrorEvent(TrustedWorkerAddress, DOMString, DOMString, u32, u32),
/// Generic message that encapsulates event handling.
RunnableMsg(Box<Runnable+Send>),
/// A DOM object's last pinned reference was removed (dispatched to all tasks).
@@ -660,8 +656,6 @@ impl ScriptTask {
self.handle_exit_window_msg(id),
ScriptMsg::DOMMessage(..) =>
panic!("unexpected message"),
- ScriptMsg::WorkerDispatchErrorEvent(addr, msg, file_name,line_num, col_num) =>
- Worker::handle_error_message(addr, msg, file_name, line_num, col_num),
ScriptMsg::RunnableMsg(runnable) =>
runnable.handler(),
ScriptMsg::RefcountCleanup(addr) =>