mirror of
https://github.com/servo/servo.git
synced 2025-08-10 07:55:33 +01:00
Upgrade to SM 39
This commit is contained in:
parent
a256f39796
commit
675267b782
205 changed files with 6546 additions and 5340 deletions
|
@ -9,9 +9,9 @@ use dom::bindings::codegen::Bindings::ErrorEventBinding::ErrorEventMethods;
|
|||
use dom::bindings::codegen::Bindings::EventHandlerBinding::EventHandlerNonNull;
|
||||
use dom::bindings::codegen::InheritTypes::DedicatedWorkerGlobalScopeDerived;
|
||||
use dom::bindings::codegen::InheritTypes::{EventTargetCast, WorkerGlobalScopeCast};
|
||||
use dom::bindings::error::ErrorResult;
|
||||
use dom::bindings::error::{ErrorResult, report_pending_exception};
|
||||
use dom::bindings::global::GlobalRef;
|
||||
use dom::bindings::js::{JSRef, RootCollection, Rootable, Temporary};
|
||||
use dom::bindings::js::{RootCollection, Root};
|
||||
use dom::bindings::refcounted::LiveDOMReferences;
|
||||
use dom::bindings::structuredclone::StructuredCloneData;
|
||||
use dom::bindings::utils::Reflectable;
|
||||
|
@ -33,8 +33,9 @@ use util::task::spawn_named;
|
|||
use util::task_state;
|
||||
use util::task_state::{SCRIPT, IN_WORKER};
|
||||
|
||||
use js::jsapi::JSContext;
|
||||
use js::jsval::JSVal;
|
||||
use js::jsapi::{JSContext, RootedValue, HandleValue};
|
||||
use js::jsapi::{JSAutoRequest, JSAutoCompartment};
|
||||
use js::jsval::UndefinedValue;
|
||||
use js::rust::Runtime;
|
||||
use url::Url;
|
||||
|
||||
|
@ -69,12 +70,12 @@ impl ScriptChan for SendableWorkerScriptChan {
|
|||
/// object only lives as long as necessary (ie. while events are being executed), while
|
||||
/// providing a reference that can be cloned freely.
|
||||
struct AutoWorkerReset<'a> {
|
||||
workerscope: JSRef<'a, DedicatedWorkerGlobalScope>,
|
||||
workerscope: &'a DedicatedWorkerGlobalScope,
|
||||
old_worker: Option<TrustedWorkerAddress>,
|
||||
}
|
||||
|
||||
impl<'a> AutoWorkerReset<'a> {
|
||||
fn new(workerscope: JSRef<'a, DedicatedWorkerGlobalScope>, worker: TrustedWorkerAddress) -> AutoWorkerReset<'a> {
|
||||
fn new(workerscope: &'a DedicatedWorkerGlobalScope, worker: TrustedWorkerAddress) -> AutoWorkerReset<'a> {
|
||||
let reset = AutoWorkerReset {
|
||||
workerscope: workerscope,
|
||||
old_worker: workerscope.worker.borrow().clone()
|
||||
|
@ -132,7 +133,7 @@ impl DedicatedWorkerGlobalScope {
|
|||
parent_sender: Box<ScriptChan+Send>,
|
||||
own_sender: Sender<(TrustedWorkerAddress, ScriptMsg)>,
|
||||
receiver: Receiver<(TrustedWorkerAddress, ScriptMsg)>)
|
||||
-> Temporary<DedicatedWorkerGlobalScope> {
|
||||
-> Root<DedicatedWorkerGlobalScope> {
|
||||
let scope = box DedicatedWorkerGlobalScope::new_inherited(
|
||||
worker_url, id, devtools_chan, runtime.clone(), resource_task,
|
||||
parent_sender, own_sender, receiver);
|
||||
|
@ -170,7 +171,7 @@ impl DedicatedWorkerGlobalScope {
|
|||
let runtime = Rc::new(ScriptTask::new_rt_and_cx());
|
||||
let global = DedicatedWorkerGlobalScope::new(
|
||||
worker_url, id, devtools_chan, runtime.clone(), resource_task,
|
||||
parent_sender, own_sender, receiver).root();
|
||||
parent_sender, own_sender, receiver);
|
||||
|
||||
{
|
||||
let _ar = AutoWorkerReset::new(global.r(), worker);
|
||||
|
@ -178,7 +179,13 @@ impl DedicatedWorkerGlobalScope {
|
|||
match runtime.evaluate_script(
|
||||
global.r().reflector().get_jsobject(), source, url.serialize(), 1) {
|
||||
Ok(_) => (),
|
||||
Err(_) => println!("evaluate_script failed")
|
||||
Err(_) => {
|
||||
// TODO: An error needs to be dispatched to the parent.
|
||||
// https://github.com/servo/servo/issues/6422
|
||||
println!("evaluate_script failed");
|
||||
let _ar = JSAutoRequest::new(runtime.cx());
|
||||
report_pending_exception(runtime.cx(), global.r().reflector().get_jsobject().get());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -202,7 +209,7 @@ pub trait DedicatedWorkerGlobalScopeHelpers {
|
|||
fn process_event(self, msg: ScriptMsg);
|
||||
}
|
||||
|
||||
impl<'a> DedicatedWorkerGlobalScopeHelpers for JSRef<'a, DedicatedWorkerGlobalScope> {
|
||||
impl<'a> DedicatedWorkerGlobalScopeHelpers for &'a DedicatedWorkerGlobalScope {
|
||||
fn script_chan(self) -> Box<ScriptChan+Send> {
|
||||
// FIXME(https://github.com/rust-lang/rust/issues/23338)
|
||||
let worker = self.worker.borrow();
|
||||
|
@ -232,34 +239,37 @@ impl<'a> DedicatedWorkerGlobalScopeHelpers for JSRef<'a, DedicatedWorkerGlobalSc
|
|||
|
||||
trait PrivateDedicatedWorkerGlobalScopeHelpers {
|
||||
fn handle_event(self, msg: ScriptMsg);
|
||||
fn dispatch_error_to_worker(self, JSRef<ErrorEvent>);
|
||||
fn dispatch_error_to_worker(self, &ErrorEvent);
|
||||
}
|
||||
|
||||
impl<'a> PrivateDedicatedWorkerGlobalScopeHelpers for JSRef<'a, DedicatedWorkerGlobalScope> {
|
||||
impl<'a> PrivateDedicatedWorkerGlobalScopeHelpers for &'a DedicatedWorkerGlobalScope {
|
||||
fn handle_event(self, msg: ScriptMsg) {
|
||||
match msg {
|
||||
ScriptMsg::DOMMessage(data) => {
|
||||
let scope: JSRef<WorkerGlobalScope> = WorkerGlobalScopeCast::from_ref(self);
|
||||
let target: JSRef<EventTarget> = EventTargetCast::from_ref(self);
|
||||
let message = data.read(GlobalRef::Worker(scope));
|
||||
MessageEvent::dispatch_jsval(target, GlobalRef::Worker(scope), message);
|
||||
let scope = WorkerGlobalScopeCast::from_ref(self);
|
||||
let target = EventTargetCast::from_ref(self);
|
||||
let _ar = JSAutoRequest::new(scope.get_cx());
|
||||
let _ac = JSAutoCompartment::new(scope.get_cx(), scope.reflector().get_jsobject().get());
|
||||
let mut message = RootedValue::new(scope.get_cx(), UndefinedValue());
|
||||
data.read(GlobalRef::Worker(scope), message.handle_mut());
|
||||
MessageEvent::dispatch_jsval(target, GlobalRef::Worker(scope), message.handle());
|
||||
},
|
||||
ScriptMsg::RunnableMsg(runnable) => {
|
||||
runnable.handler()
|
||||
},
|
||||
ScriptMsg::RefcountCleanup(addr) => {
|
||||
let scope: JSRef<WorkerGlobalScope> = WorkerGlobalScopeCast::from_ref(self);
|
||||
let scope = WorkerGlobalScopeCast::from_ref(self);
|
||||
LiveDOMReferences::cleanup(scope.get_cx(), addr);
|
||||
}
|
||||
ScriptMsg::FireTimer(TimerSource::FromWorker, timer_id) => {
|
||||
let scope: JSRef<WorkerGlobalScope> = WorkerGlobalScopeCast::from_ref(self);
|
||||
let scope = WorkerGlobalScopeCast::from_ref(self);
|
||||
scope.handle_fire_timer(timer_id);
|
||||
}
|
||||
_ => panic!("Unexpected message"),
|
||||
}
|
||||
}
|
||||
|
||||
fn dispatch_error_to_worker(self, errorevent: JSRef<ErrorEvent>) {
|
||||
fn dispatch_error_to_worker(self, errorevent: &ErrorEvent) {
|
||||
let msg = errorevent.Message();
|
||||
let file_name = errorevent.Filename();
|
||||
let line_num = errorevent.Lineno();
|
||||
|
@ -270,9 +280,9 @@ impl<'a> PrivateDedicatedWorkerGlobalScopeHelpers for JSRef<'a, DedicatedWorkerG
|
|||
}
|
||||
}
|
||||
|
||||
impl<'a> DedicatedWorkerGlobalScopeMethods for JSRef<'a, DedicatedWorkerGlobalScope> {
|
||||
impl<'a> DedicatedWorkerGlobalScopeMethods for &'a DedicatedWorkerGlobalScope {
|
||||
// https://html.spec.whatwg.org/multipage/#dom-dedicatedworkerglobalscope-postmessage
|
||||
fn PostMessage(self, cx: *mut JSContext, message: JSVal) -> ErrorResult {
|
||||
fn PostMessage(self, cx: *mut JSContext, message: HandleValue) -> ErrorResult {
|
||||
let data = try!(StructuredCloneData::write(cx, message));
|
||||
let worker = self.worker.borrow().as_ref().unwrap().clone();
|
||||
self.parent_sender.send(ScriptMsg::RunnableMsg(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue