mirror of
https://github.com/servo/servo.git
synced 2025-07-31 03:00:29 +01:00
parent
b589735b47
commit
cc48797999
8 changed files with 24 additions and 21 deletions
|
@ -114,7 +114,7 @@ impl<T: Reflectable> Drop for Trusted<T> {
|
||||||
*refcount -= 1;
|
*refcount -= 1;
|
||||||
if *refcount == 0 {
|
if *refcount == 0 {
|
||||||
self.script_chan.send(
|
self.script_chan.send(
|
||||||
ScriptMsg::RefcountCleanup(TrustedReference(self.ptr)));
|
ScriptMsg::RefcountCleanup(TrustedReference(self.ptr))).unwrap();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,8 +49,8 @@ pub struct SendableWorkerScriptChan {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ScriptChan for SendableWorkerScriptChan {
|
impl ScriptChan for SendableWorkerScriptChan {
|
||||||
fn send(&self, msg: ScriptMsg) {
|
fn send(&self, msg: ScriptMsg) -> Result<(), ()> {
|
||||||
self.sender.send((self.worker.clone(), msg)).unwrap();
|
return self.sender.send((self.worker.clone(), msg)).map_err(|_| ());
|
||||||
}
|
}
|
||||||
|
|
||||||
fn clone(&self) -> Box<ScriptChan + Send> {
|
fn clone(&self) -> Box<ScriptChan + Send> {
|
||||||
|
@ -147,7 +147,7 @@ impl DedicatedWorkerGlobalScope {
|
||||||
Err(_) => {
|
Err(_) => {
|
||||||
println!("error loading script {}", worker_url.serialize());
|
println!("error loading script {}", worker_url.serialize());
|
||||||
parent_sender.send(ScriptMsg::RunnableMsg(
|
parent_sender.send(ScriptMsg::RunnableMsg(
|
||||||
box WorkerEventHandler::new(worker)));
|
box WorkerEventHandler::new(worker))).unwrap();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Ok((metadata, bytes)) => {
|
Ok((metadata, bytes)) => {
|
||||||
|
@ -235,7 +235,7 @@ impl<'a> PrivateDedicatedWorkerGlobalScopeHelpers for JSRef<'a, DedicatedWorkerG
|
||||||
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::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 data = try!(StructuredCloneData::write(cx, message));
|
||||||
let worker = self.worker.borrow().as_ref().unwrap().clone();
|
let worker = self.worker.borrow().as_ref().unwrap().clone();
|
||||||
self.parent_sender.send(ScriptMsg::RunnableMsg(
|
self.parent_sender.send(ScriptMsg::RunnableMsg(
|
||||||
box WorkerMessageHandler::new(worker, data)));
|
box WorkerMessageHandler::new(worker, data))).unwrap();
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -215,7 +215,7 @@ impl<'a> HTMLFormElementHelpers for JSRef<'a, HTMLFormElement> {
|
||||||
}
|
}
|
||||||
|
|
||||||
// This is wrong. https://html.spec.whatwg.org/multipage/forms.html#planned-navigation
|
// 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> {
|
fn get_form_dataset<'b>(self, submitter: Option<FormSubmitter<'b>>) -> Vec<FormDatum> {
|
||||||
|
|
|
@ -257,7 +257,7 @@ impl<'a> HTMLScriptElementHelpers for JSRef<'a, HTMLScriptElement> {
|
||||||
ScriptOrigin::Internal => {
|
ScriptOrigin::Internal => {
|
||||||
let chan = window.script_chan();
|
let chan = window.script_chan();
|
||||||
let handler = Trusted::new(window.get_cx(), self, chan.clone());
|
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 window = window.r();
|
||||||
let chan = window.script_chan();
|
let chan = window.script_chan();
|
||||||
let handler = Trusted::new(window.get_cx(), self, chan.clone());
|
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) {
|
fn dispatch_load_event(self) {
|
||||||
|
|
|
@ -197,7 +197,7 @@ impl<'a> WindowMethods for JSRef<'a, Window> {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn Close(self) {
|
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> {
|
fn Document(self) -> Temporary<Document> {
|
||||||
|
@ -387,10 +387,10 @@ impl<'a> WindowHelpers for JSRef<'a, Window> {
|
||||||
let url = url.unwrap();
|
let url = url.unwrap();
|
||||||
match url.fragment {
|
match url.fragment {
|
||||||
Some(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 => {
|
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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -220,7 +220,7 @@ impl XMLHttpRequest {
|
||||||
xhr.process_partial_response(msg);
|
xhr.process_partial_response(msg);
|
||||||
},
|
},
|
||||||
SyncOrAsync::Async(ref addr, ref script_chan) => {
|
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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,7 +15,6 @@ use dom::bindings::codegen::Bindings::WindowBinding::WindowMethods;
|
||||||
use dom::bindings::codegen::InheritTypes::{ElementCast, EventTargetCast, HTMLIFrameElementCast, NodeCast, EventCast};
|
use dom::bindings::codegen::InheritTypes::{ElementCast, EventTargetCast, HTMLIFrameElementCast, NodeCast, EventCast};
|
||||||
use dom::bindings::conversions::FromJSValConvertible;
|
use dom::bindings::conversions::FromJSValConvertible;
|
||||||
use dom::bindings::conversions::StringificationBehavior;
|
use dom::bindings::conversions::StringificationBehavior;
|
||||||
use dom::bindings::global::GlobalRef;
|
|
||||||
use dom::bindings::js::{JS, JSRef, Temporary, OptionalRootable, RootedReference};
|
use dom::bindings::js::{JS, JSRef, Temporary, OptionalRootable, RootedReference};
|
||||||
use dom::bindings::js::{RootCollection, RootCollectionPtr};
|
use dom::bindings::js::{RootCollection, RootCollectionPtr};
|
||||||
use dom::bindings::refcounted::{LiveDOMReferences, Trusted, TrustedReference};
|
use dom::bindings::refcounted::{LiveDOMReferences, Trusted, TrustedReference};
|
||||||
|
@ -24,7 +23,7 @@ use dom::bindings::trace::JSTraceable;
|
||||||
use dom::bindings::utils::{wrap_for_same_compartment, pre_wrap};
|
use dom::bindings::utils::{wrap_for_same_compartment, pre_wrap};
|
||||||
use dom::document::{Document, IsHTMLDocument, DocumentHelpers, DocumentProgressHandler, DocumentProgressTask, DocumentSource};
|
use dom::document::{Document, IsHTMLDocument, DocumentHelpers, DocumentProgressHandler, DocumentProgressTask, DocumentSource};
|
||||||
use dom::element::{Element, ActivationElementHelpers};
|
use dom::element::{Element, ActivationElementHelpers};
|
||||||
use dom::event::{Event, EventHelpers, EventBubbles, EventCancelable};
|
use dom::event::{Event, EventHelpers};
|
||||||
use dom::uievent::UIEvent;
|
use dom::uievent::UIEvent;
|
||||||
use dom::eventtarget::EventTarget;
|
use dom::eventtarget::EventTarget;
|
||||||
use dom::htmliframeelement::HTMLIFrameElement;
|
use dom::htmliframeelement::HTMLIFrameElement;
|
||||||
|
@ -86,6 +85,7 @@ use std::fmt::{self, Display};
|
||||||
use std::mem::replace;
|
use std::mem::replace;
|
||||||
use std::num::ToPrimitive;
|
use std::num::ToPrimitive;
|
||||||
use std::rc::Rc;
|
use std::rc::Rc;
|
||||||
|
use std::result::Result;
|
||||||
use std::sync::mpsc::{channel, Sender, Receiver, Select};
|
use std::sync::mpsc::{channel, Sender, Receiver, Select};
|
||||||
use std::u32;
|
use std::u32;
|
||||||
use time::{Tm, strptime};
|
use time::{Tm, strptime};
|
||||||
|
@ -135,7 +135,7 @@ pub enum ScriptMsg {
|
||||||
/// A cloneable interface for communicating with an event loop.
|
/// A cloneable interface for communicating with an event loop.
|
||||||
pub trait ScriptChan {
|
pub trait ScriptChan {
|
||||||
/// Send a message to the associated event loop.
|
/// Send a message to the associated event loop.
|
||||||
fn send(&self, msg: ScriptMsg);
|
fn send(&self, msg: ScriptMsg) -> Result<(), ()>;
|
||||||
/// Clone this handle.
|
/// Clone this handle.
|
||||||
fn clone(&self) -> Box<ScriptChan+Send>;
|
fn clone(&self) -> Box<ScriptChan+Send>;
|
||||||
}
|
}
|
||||||
|
@ -145,9 +145,9 @@ pub trait ScriptChan {
|
||||||
pub struct NonWorkerScriptChan(pub Sender<ScriptMsg>);
|
pub struct NonWorkerScriptChan(pub Sender<ScriptMsg>);
|
||||||
|
|
||||||
impl ScriptChan for NonWorkerScriptChan {
|
impl ScriptChan for NonWorkerScriptChan {
|
||||||
fn send(&self, msg: ScriptMsg) {
|
fn send(&self, msg: ScriptMsg) -> Result<(), ()> {
|
||||||
let NonWorkerScriptChan(ref chan) = *self;
|
let NonWorkerScriptChan(ref chan) = *self;
|
||||||
chan.send(msg).unwrap();
|
return chan.send(msg).map_err(|_| ());
|
||||||
}
|
}
|
||||||
|
|
||||||
fn clone(&self) -> Box<ScriptChan+Send> {
|
fn clone(&self) -> Box<ScriptChan+Send> {
|
||||||
|
@ -898,7 +898,7 @@ impl ScriptTask {
|
||||||
// https://html.spec.whatwg.org/multipage/#the-end step 4
|
// 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 addr: Trusted<Document> = Trusted::new(self.get_cx(), document.r(), self.chan.clone());
|
||||||
let handler = Box::new(DocumentProgressHandler::new(addr.clone(), DocumentProgressTask::DOMContentLoaded));
|
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
|
// 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
|
// "load" event as soon as we've finished executing all scripts parsed during
|
||||||
|
@ -906,7 +906,7 @@ impl ScriptTask {
|
||||||
|
|
||||||
// https://html.spec.whatwg.org/multipage/#the-end step 7
|
// https://html.spec.whatwg.org/multipage/#the-end step 7
|
||||||
let handler = Box::new(DocumentProgressHandler::new(addr, DocumentProgressTask::Load));
|
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();
|
*page.fragment_name.borrow_mut() = final_url.fragment.clone();
|
||||||
|
|
||||||
|
|
|
@ -149,7 +149,10 @@ impl TimerManager {
|
||||||
let id = select.wait();
|
let id = select.wait();
|
||||||
if id == timeout_handle.id() {
|
if id == timeout_handle.id() {
|
||||||
timeout_port.recv().unwrap();
|
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 {
|
if is_interval == IsInterval::NonInterval {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue