diff --git a/Cargo.lock b/Cargo.lock index 5a1044e09f4..e6d63bab4f6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2270,7 +2270,7 @@ dependencies = [ "hyper 0.12.14 (registry+https://github.com/rust-lang/crates.io-index)", "hyper_serde 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", "keyboard-types 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", - "mozjs 0.9.5 (registry+https://github.com/rust-lang/crates.io-index)", + "mozjs 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", "selectors 0.21.0", "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "serde_bytes 0.10.4 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2494,7 +2494,7 @@ dependencies = [ [[package]] name = "mozjs" -version = "0.9.5" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cc 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3256,7 +3256,7 @@ dependencies = [ "mime_guess 2.0.0-alpha.6 (registry+https://github.com/rust-lang/crates.io-index)", "mitochondria 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "mozangle 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "mozjs 0.9.5 (registry+https://github.com/rust-lang/crates.io-index)", + "mozjs 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", "msg 0.0.1", "net_traits 0.0.1", "num-traits 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", @@ -5029,7 +5029,7 @@ dependencies = [ "checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919" "checksum mitochondria 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9de3eca27871df31c33b807f834b94ef7d000956f57aa25c5aed9c5f0aae8f6f" "checksum mozangle 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "45a8a18a41cfab0fde25cc2f43ea89064d211a0fbb33225b8ff93ab20406e0e7" -"checksum mozjs 0.9.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6d1db0edead699324dd1768f74054a5a759de36a8ce92b15e8b179ec2549d19e" +"checksum mozjs 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0c7eea7a83e5f237500eb7d66c8ca9c6dc97e3dc4f129eae2dc63fa17fb87f9a" "checksum mozjs_sys 0.61.6 (registry+https://github.com/rust-lang/crates.io-index)" = "610d0fce234d68723526bfdc57091f6f4fe5ed661a343125014cd61823711cb5" "checksum msdos_time 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "aad9dfe950c057b1bfe9c1f2aa51583a8468ef2a5baba2ebbe06d775efeb7729" "checksum muldiv 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "451a9a05d2a32c566c897835e0ea95cf79ed2fdfe957924045a1721a36c9980f" diff --git a/components/malloc_size_of/Cargo.toml b/components/malloc_size_of/Cargo.toml index 92b3db44c15..e7acb0de25e 100644 --- a/components/malloc_size_of/Cargo.toml +++ b/components/malloc_size_of/Cargo.toml @@ -33,6 +33,7 @@ hashglobe = { path = "../hashglobe" } hyper = { version = "0.12", optional = true } hyper_serde = { version = "0.9", optional = true } keyboard-types = {version = "0.4.3", optional = true} +mozjs = { version = "0.10.0", optional = true} selectors = { path = "../selectors" } serde = { version = "1.0.27", optional = true } serde_bytes = { version = "0.10", optional = true } @@ -46,9 +47,3 @@ url = { version = "1.2", optional = true } webrender_api = { git = "https://github.com/servo/webrender", features = ["ipc"], optional = true } xml5ever = { version = "0.12", optional = true } void = "1.0.2" - -[target.'cfg(target_os = "android")'.dependencies] -mozjs = { version = "0.9.5", optional = true, features=["init_once"]} - -[target.'cfg(not(target_os = "android"))'.dependencies] -mozjs = { version = "0.9.5", optional = true} diff --git a/components/script/Cargo.toml b/components/script/Cargo.toml index 2e0bd88ea78..e6cb81366d0 100644 --- a/components/script/Cargo.toml +++ b/components/script/Cargo.toml @@ -63,6 +63,7 @@ indexmap = "1.0.2" ipc-channel = "0.11" itertools = "0.8" jstraceable_derive = {path = "../jstraceable_derive"} +js = {package = "mozjs", version = "0.10.0"} keyboard-types = "0.4.4" lazy_static = "1" libc = "0.2" @@ -114,9 +115,3 @@ webvr_traits = {path = "../webvr_traits"} [target.'cfg(not(target_os = "ios"))'.dependencies] mozangle = "0.1" - -[target.'cfg(target_os = "android")'.dependencies] -js = {package = "mozjs", version = "0.9.5", features=["init_once"]} - -[target.'cfg(not(target_os = "android"))'.dependencies] -js = {package = "mozjs", version = "0.9.5"} diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py index e82beb913bc..e7399d66307 100644 --- a/components/script/dom/bindings/codegen/CodegenRust.py +++ b/components/script/dom/bindings/codegen/CodegenRust.py @@ -2592,7 +2592,7 @@ class CGConstructorEnabled(CGAbstractMethod): return CGList((CGGeneric(cond) for cond in conditions), " &&\n") -def CreateBindingJSObject(descriptor, parent=None): +def CreateBindingJSObject(descriptor): assert not descriptor.isGlobal() create = "let raw = Box::into_raw(object);\nlet _rt = RootedTraceable::new(&*raw);\n" if descriptor.proxy: @@ -2601,12 +2601,11 @@ let handler = RegisterBindings::PROXY_HANDLERS[PrototypeList::Proxies::%s as usi rooted!(in(cx) let private = PrivateValue(raw as *const libc::c_void)); let obj = NewProxyObject(cx, handler, Handle::from_raw(UndefinedHandleValue), - proto.get(), %s.get(), - ptr::null_mut(), ptr::null_mut()); + proto.get()); assert!(!obj.is_null()); SetProxyReservedSlot(obj, 0, &private.get()); rooted!(in(cx) let obj = obj);\ -""" % (descriptor.name, parent) +""" % (descriptor.name) else: create += ("rooted!(in(cx) let obj = JS_NewObjectWithGivenProto(\n" " cx, &Class.base as *const JSClass, proto.handle()));\n" @@ -2699,7 +2698,7 @@ class CGWrapMethod(CGAbstractMethod): def definition_body(self): unforgeable = CopyUnforgeablePropertiesToInstance(self.descriptor) - create = CreateBindingJSObject(self.descriptor, "scope") + create = CreateBindingJSObject(self.descriptor) return CGGeneric("""\ let scope = scope.reflector().get_jsobject(); assert!(!scope.get().is_null()); diff --git a/components/script/script_runtime.rs b/components/script/script_runtime.rs index d10b95a068e..29be8114e35 100644 --- a/components/script/script_runtime.rs +++ b/components/script/script_runtime.rs @@ -42,6 +42,7 @@ use js::panic::wrap_panic; use js::rust::wrappers::{GetPromiseIsHandled, GetPromiseResult}; use js::rust::Handle; use js::rust::IntoHandle; +use js::rust::JSEngine; use js::rust::Runtime as RustRuntime; use malloc_size_of::MallocSizeOfOps; use msg::constellation_msg::PipelineId; @@ -56,6 +57,7 @@ use std::os; use std::os::raw::c_void; use std::panic::AssertUnwindSafe; use std::ptr; +use std::sync::Arc; use style::thread_state::{self, ThreadState}; use time::{now, Tm}; @@ -322,10 +324,14 @@ impl Deref for Runtime { } } +lazy_static! { + static ref JS_ENGINE: Arc = JSEngine::init().unwrap(); +} + #[allow(unsafe_code)] pub unsafe fn new_rt_and_cx() -> Runtime { LiveDOMReferences::initialize(); - let runtime = RustRuntime::new().unwrap(); + let runtime = RustRuntime::new(JS_ENGINE.clone()); let cx = runtime.cx(); JS_AddExtraGCRootsTracer(cx, Some(trace_rust_roots), ptr::null_mut());