diff options
author | Avi Weinstock <aweinstock314@gmail.com> | 2015-03-09 09:24:40 -0400 |
---|---|---|
committer | Avi Weinstock <aweinstock314@gmail.com> | 2015-03-09 09:24:40 -0400 |
commit | 7803f2b216f736ac703e55010bfbd70e4dfc0cad (patch) | |
tree | aa1cc133862e7e539ea5bd2e33e33d94632c40be | |
parent | fbacd1a4c42c104d679de1a04fea4ddd41e1ca44 (diff) | |
download | servo-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.rs | 10 | ||||
-rw-r--r-- | components/script/dom/worker.rs | 27 | ||||
-rw-r--r-- | components/script/script_task.rs | 6 |
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) => |