Subsume ScriptMsg::WorkerDispatchErrorEvent into ScriptMsg::RunnableMsg via introduction of Worker::WorkerErrorHandler (Closes #5171).

This commit is contained in:
Avi Weinstock 2015-03-09 09:24:40 -04:00
parent fbacd1a4c4
commit 7803f2b216
3 changed files with 30 additions and 13 deletions

View file

@ -18,11 +18,10 @@ use dom::bindings::utils::Reflectable;
use dom::errorevent::ErrorEvent; use dom::errorevent::ErrorEvent;
use dom::eventtarget::{EventTarget, EventTargetHelpers, EventTargetTypeId}; use dom::eventtarget::{EventTarget, EventTargetHelpers, EventTargetTypeId};
use dom::messageevent::MessageEvent; 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::{WorkerGlobalScope, WorkerGlobalScopeHelpers};
use dom::workerglobalscope::WorkerGlobalScopeTypeId; use dom::workerglobalscope::WorkerGlobalScopeTypeId;
use script_task::{ScriptTask, ScriptChan, ScriptMsg, TimerSource}; use script_task::{ScriptTask, ScriptChan, ScriptMsg, TimerSource};
use script_task::ScriptMsg::WorkerDispatchErrorEvent;
use script_task::StackRootTLS; use script_task::StackRootTLS;
use net::resource_task::{ResourceTask, load_whole_resource}; 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); let scope: JSRef<WorkerGlobalScope> = WorkerGlobalScopeCast::from_ref(self);
LiveDOMReferences::cleanup(scope.get_cx(), addr); 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) => { ScriptMsg::FireTimer(TimerSource::FromWorker, timer_id) => {
let scope: JSRef<WorkerGlobalScope> = WorkerGlobalScopeCast::from_ref(self); let scope: JSRef<WorkerGlobalScope> = WorkerGlobalScopeCast::from_ref(self);
scope.handle_fire_timer(timer_id); scope.handle_fire_timer(timer_id);
@ -234,8 +230,8 @@ impl<'a> PrivateDedicatedWorkerGlobalScopeHelpers for JSRef<'a, DedicatedWorkerG
let line_num = errorevent.Lineno(); let line_num = errorevent.Lineno();
let col_num = errorevent.Colno(); let col_num = errorevent.Colno();
let worker = self.worker.borrow().as_ref().unwrap().clone(); let worker = self.worker.borrow().as_ref().unwrap().clone();
self.parent_sender.send(ScriptMsg::WorkerDispatchErrorEvent(worker, msg, file_name, self.parent_sender.send(ScriptMsg::RunnableMsg(
line_num, col_num)).unwrap(); box WorkerErrorHandler::new(worker, msg, file_name, line_num, col_num))).unwrap();
} }
} }

View file

@ -165,3 +165,30 @@ impl Runnable for WorkerEventHandler {
Worker::dispatch_simple_error(this.addr); 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);
}
}

View file

@ -37,7 +37,6 @@ use dom::uievent::UIEvent;
use dom::eventtarget::EventTarget; use dom::eventtarget::EventTarget;
use dom::node::{self, Node, NodeHelpers, NodeDamage, window_from_node}; use dom::node::{self, Node, NodeHelpers, NodeDamage, window_from_node};
use dom::window::{Window, WindowHelpers, ScriptHelpers, ReflowReason}; use dom::window::{Window, WindowHelpers, ScriptHelpers, ReflowReason};
use dom::worker::{Worker, TrustedWorkerAddress};
use parse::html::{HTMLInput, parse_html}; use parse::html::{HTMLInput, parse_html};
use layout_interface::{ScriptLayoutChan, LayoutChan, ReflowGoal, ReflowQueryType}; use layout_interface::{ScriptLayoutChan, LayoutChan, ReflowGoal, ReflowQueryType};
use layout_interface; use layout_interface;
@ -67,7 +66,6 @@ use net::storage_task::StorageTask;
use string_cache::Atom; use string_cache::Atom;
use util::geometry::to_frac_px; use util::geometry::to_frac_px;
use util::smallvec::SmallVec; use util::smallvec::SmallVec;
use util::str::DOMString;
use util::task::{spawn_named, spawn_named_with_send_on_failure}; use util::task::{spawn_named, spawn_named_with_send_on_failure};
use util::task_state; use util::task_state;
@ -173,8 +171,6 @@ pub enum ScriptMsg {
/// Message sent through Worker.postMessage (only dispatched to /// Message sent through Worker.postMessage (only dispatched to
/// DedicatedWorkerGlobalScope). /// DedicatedWorkerGlobalScope).
DOMMessage(StructuredCloneData), 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. /// Generic message that encapsulates event handling.
RunnableMsg(Box<Runnable+Send>), RunnableMsg(Box<Runnable+Send>),
/// A DOM object's last pinned reference was removed (dispatched to all tasks). /// 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), self.handle_exit_window_msg(id),
ScriptMsg::DOMMessage(..) => ScriptMsg::DOMMessage(..) =>
panic!("unexpected message"), 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) => ScriptMsg::RunnableMsg(runnable) =>
runnable.handler(), runnable.handler(),
ScriptMsg::RefcountCleanup(addr) => ScriptMsg::RefcountCleanup(addr) =>