diff options
author | bors-servo <metajack+bors@gmail.com> | 2015-02-21 12:51:44 -0700 |
---|---|---|
committer | bors-servo <metajack+bors@gmail.com> | 2015-02-21 12:51:44 -0700 |
commit | f1f826544919b4fa7cdf4bf263abf0c0c1497f70 (patch) | |
tree | f80ddaf5eccc7c96c8c5e95172cc794573ec7e92 | |
parent | 939b13f436d2fc895cf8a57140b0bd50acc53a89 (diff) | |
parent | cc487979994ec637a3d37f9a3e5edb4a56e7a379 (diff) | |
download | servo-f1f826544919b4fa7cdf4bf263abf0c0c1497f70.tar.gz servo-f1f826544919b4fa7cdf4bf263abf0c0c1497f70.zip |
auto merge of #4956 : psdh/servo/interfail, r=jdm
Fixes #4923
-rw-r--r-- | components/script/dom/bindings/refcounted.rs | 2 | ||||
-rw-r--r-- | components/script/dom/dedicatedworkerglobalscope.rs | 10 | ||||
-rw-r--r-- | components/script/dom/htmlformelement.rs | 2 | ||||
-rw-r--r-- | components/script/dom/htmlscriptelement.rs | 4 | ||||
-rw-r--r-- | components/script/dom/window.rs | 6 | ||||
-rw-r--r-- | components/script/dom/xmlhttprequest.rs | 2 | ||||
-rw-r--r-- | components/script/script_task.rs | 11 | ||||
-rw-r--r-- | components/script/timers.rs | 5 |
8 files changed, 23 insertions, 19 deletions
diff --git a/components/script/dom/bindings/refcounted.rs b/components/script/dom/bindings/refcounted.rs index a0183aac59c..b7f039cb527 100644 --- a/components/script/dom/bindings/refcounted.rs +++ b/components/script/dom/bindings/refcounted.rs @@ -114,7 +114,7 @@ impl<T: Reflectable> Drop for Trusted<T> { *refcount -= 1; if *refcount == 0 { self.script_chan.send( - ScriptMsg::RefcountCleanup(TrustedReference(self.ptr))); + ScriptMsg::RefcountCleanup(TrustedReference(self.ptr))).unwrap(); } } } diff --git a/components/script/dom/dedicatedworkerglobalscope.rs b/components/script/dom/dedicatedworkerglobalscope.rs index 32314d8fc8a..ea16903fd8f 100644 --- a/components/script/dom/dedicatedworkerglobalscope.rs +++ b/components/script/dom/dedicatedworkerglobalscope.rs @@ -49,8 +49,8 @@ pub struct SendableWorkerScriptChan { } impl ScriptChan for SendableWorkerScriptChan { - fn send(&self, msg: ScriptMsg) { - self.sender.send((self.worker.clone(), msg)).unwrap(); + fn send(&self, msg: ScriptMsg) -> Result<(), ()> { + return self.sender.send((self.worker.clone(), msg)).map_err(|_| ()); } fn clone(&self) -> Box<ScriptChan + Send> { @@ -147,7 +147,7 @@ impl DedicatedWorkerGlobalScope { Err(_) => { println!("error loading script {}", worker_url.serialize()); parent_sender.send(ScriptMsg::RunnableMsg( - box WorkerEventHandler::new(worker))); + box WorkerEventHandler::new(worker))).unwrap(); return; } Ok((metadata, bytes)) => { @@ -235,7 +235,7 @@ impl<'a> PrivateDedicatedWorkerGlobalScopeHelpers for JSRef<'a, DedicatedWorkerG 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)); + line_num, col_num)).unwrap(); } } @@ -244,7 +244,7 @@ impl<'a> DedicatedWorkerGlobalScopeMethods for JSRef<'a, DedicatedWorkerGlobalSc let data = try!(StructuredCloneData::write(cx, message)); let worker = self.worker.borrow().as_ref().unwrap().clone(); self.parent_sender.send(ScriptMsg::RunnableMsg( - box WorkerMessageHandler::new(worker, data))); + box WorkerMessageHandler::new(worker, data))).unwrap(); Ok(()) } diff --git a/components/script/dom/htmlformelement.rs b/components/script/dom/htmlformelement.rs index be6f1fc9fcb..ddc8d42b661 100644 --- a/components/script/dom/htmlformelement.rs +++ b/components/script/dom/htmlformelement.rs @@ -215,7 +215,7 @@ impl<'a> HTMLFormElementHelpers for JSRef<'a, HTMLFormElement> { } // This is wrong. https://html.spec.whatwg.org/multipage/forms.html#planned-navigation - win.r().script_chan().send(ScriptMsg::TriggerLoad(win.r().page().id, load_data)); + win.r().script_chan().send(ScriptMsg::TriggerLoad(win.r().page().id, load_data)).unwrap(); } fn get_form_dataset<'b>(self, submitter: Option<FormSubmitter<'b>>) -> Vec<FormDatum> { diff --git a/components/script/dom/htmlscriptelement.rs b/components/script/dom/htmlscriptelement.rs index ee3e85f6ed1..662e88f02e1 100644 --- a/components/script/dom/htmlscriptelement.rs +++ b/components/script/dom/htmlscriptelement.rs @@ -257,7 +257,7 @@ impl<'a> HTMLScriptElementHelpers for JSRef<'a, HTMLScriptElement> { ScriptOrigin::Internal => { let chan = window.script_chan(); let handler = Trusted::new(window.get_cx(), self, chan.clone()); - chan.send(ScriptMsg::RunnableMsg(box handler)); + chan.send(ScriptMsg::RunnableMsg(box handler)).unwrap(); } } } @@ -268,7 +268,7 @@ impl<'a> HTMLScriptElementHelpers for JSRef<'a, HTMLScriptElement> { let window = window.r(); let chan = window.script_chan(); let handler = Trusted::new(window.get_cx(), self, chan.clone()); - chan.send(ScriptMsg::RunnableMsg(box handler)); + chan.send(ScriptMsg::RunnableMsg(box handler)).unwrap(); } fn dispatch_load_event(self) { diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs index fcc56776c8d..ded3ba24303 100644 --- a/components/script/dom/window.rs +++ b/components/script/dom/window.rs @@ -197,7 +197,7 @@ impl<'a> WindowMethods for JSRef<'a, Window> { } fn Close(self) { - self.script_chan.send(ScriptMsg::ExitWindow(self.page.id.clone())); + self.script_chan.send(ScriptMsg::ExitWindow(self.page.id.clone())).unwrap(); } fn Document(self) -> Temporary<Document> { @@ -387,10 +387,10 @@ impl<'a> WindowHelpers for JSRef<'a, Window> { let url = url.unwrap(); match url.fragment { Some(fragment) => { - self.script_chan.send(ScriptMsg::TriggerFragment(self.page.id, fragment)); + self.script_chan.send(ScriptMsg::TriggerFragment(self.page.id, fragment)).unwrap(); }, None => { - self.script_chan.send(ScriptMsg::TriggerLoad(self.page.id, LoadData::new(url))); + self.script_chan.send(ScriptMsg::TriggerLoad(self.page.id, LoadData::new(url))).unwrap(); } } } diff --git a/components/script/dom/xmlhttprequest.rs b/components/script/dom/xmlhttprequest.rs index 5bef26a7c84..b8530f5b38a 100644 --- a/components/script/dom/xmlhttprequest.rs +++ b/components/script/dom/xmlhttprequest.rs @@ -220,7 +220,7 @@ impl XMLHttpRequest { xhr.process_partial_response(msg); }, SyncOrAsync::Async(ref addr, ref script_chan) => { - script_chan.send(ScriptMsg::RunnableMsg(box XHRProgressHandler::new(addr.clone(), msg))); + script_chan.send(ScriptMsg::RunnableMsg(box XHRProgressHandler::new(addr.clone(), msg))).unwrap(); } } } diff --git a/components/script/script_task.rs b/components/script/script_task.rs index f63bd70abbf..f29e5690cf5 100644 --- a/components/script/script_task.rs +++ b/components/script/script_task.rs @@ -84,6 +84,7 @@ use std::fmt::{self, Display}; use std::mem::replace; use std::num::ToPrimitive; use std::rc::Rc; +use std::result::Result; use std::sync::mpsc::{channel, Sender, Receiver, Select}; use std::u32; use time::{Tm, strptime}; @@ -133,7 +134,7 @@ pub enum ScriptMsg { /// A cloneable interface for communicating with an event loop. pub trait ScriptChan { /// Send a message to the associated event loop. - fn send(&self, msg: ScriptMsg); + fn send(&self, msg: ScriptMsg) -> Result<(), ()>; /// Clone this handle. fn clone(&self) -> Box<ScriptChan+Send>; } @@ -143,9 +144,9 @@ pub trait ScriptChan { pub struct NonWorkerScriptChan(pub Sender<ScriptMsg>); impl ScriptChan for NonWorkerScriptChan { - fn send(&self, msg: ScriptMsg) { + fn send(&self, msg: ScriptMsg) -> Result<(), ()> { let NonWorkerScriptChan(ref chan) = *self; - chan.send(msg).unwrap(); + return chan.send(msg).map_err(|_| ()); } fn clone(&self) -> Box<ScriptChan+Send> { @@ -893,7 +894,7 @@ impl ScriptTask { // https://html.spec.whatwg.org/multipage/#the-end step 4 let addr: Trusted<Document> = Trusted::new(self.get_cx(), document.r(), self.chan.clone()); let handler = Box::new(DocumentProgressHandler::new(addr.clone(), DocumentProgressTask::DOMContentLoaded)); - self.chan.send(ScriptMsg::RunnableMsg(handler)); + self.chan.send(ScriptMsg::RunnableMsg(handler)).unwrap(); // We have no concept of a document loader right now, so just dispatch the // "load" event as soon as we've finished executing all scripts parsed during @@ -901,7 +902,7 @@ impl ScriptTask { // https://html.spec.whatwg.org/multipage/#the-end step 7 let handler = Box::new(DocumentProgressHandler::new(addr, DocumentProgressTask::Load)); - self.chan.send(ScriptMsg::RunnableMsg(handler)); + self.chan.send(ScriptMsg::RunnableMsg(handler)).unwrap(); *page.fragment_name.borrow_mut() = final_url.fragment.clone(); diff --git a/components/script/timers.rs b/components/script/timers.rs index 8f361ebcb7b..0b8d7117022 100644 --- a/components/script/timers.rs +++ b/components/script/timers.rs @@ -149,7 +149,10 @@ impl TimerManager { let id = select.wait(); if id == timeout_handle.id() { timeout_port.recv().unwrap(); - script_chan.send(ScriptMsg::FireTimer(source, TimerId(handle))); + if script_chan.send(ScriptMsg::FireTimer(source, TimerId(handle))).is_err() { + break; + } + if is_interval == IsInterval::NonInterval { break; } |