diff --git a/components/script/dom/bindings/trace.rs b/components/script/dom/bindings/trace.rs index 31f1a78f717..d3da922c640 100644 --- a/components/script/dom/bindings/trace.rs +++ b/components/script/dom/bindings/trace.rs @@ -45,7 +45,7 @@ use hyper::header::Headers; use hyper::method::Method; use js::jsapi::{JSObject, JSTracer, JS_CallTracer, JSGCTraceKind}; use js::jsval::JSVal; -use js::rust::{Cx, Runtime}; +use js::rust::Runtime; use layout_interface::{LayoutRPC, LayoutChan}; use libc; use msg::constellation_msg::{PipelineId, SubpageId, WindowSizeData, WorkerId}; @@ -260,7 +260,6 @@ no_jsmanaged_fields!(HashSet); no_jsmanaged_fields!(SubpageId, WindowSizeData, PipelineId); no_jsmanaged_fields!(WorkerId); no_jsmanaged_fields!(QuirksMode); -no_jsmanaged_fields!(Cx); no_jsmanaged_fields!(Runtime); no_jsmanaged_fields!(Headers, Method); no_jsmanaged_fields!(ConstellationChan); diff --git a/components/script/dom/dedicatedworkerglobalscope.rs b/components/script/dom/dedicatedworkerglobalscope.rs index 28ecf365848..d4411a811fa 100644 --- a/components/script/dom/dedicatedworkerglobalscope.rs +++ b/components/script/dom/dedicatedworkerglobalscope.rs @@ -35,11 +35,11 @@ use util::task_state::{SCRIPT, IN_WORKER}; use js::jsapi::JSContext; use js::jsval::JSVal; -use js::rust::Cx; +use js::rust::Runtime; +use url::Url; use std::rc::Rc; use std::sync::mpsc::{Sender, Receiver, channel}; -use url::Url; /// A ScriptChan that can be cloned freely and will silently send a TrustedWorkerAddress with /// every message. While this SendableWorkerScriptChan is alive, the associated Worker object @@ -104,17 +104,18 @@ pub struct DedicatedWorkerGlobalScope { impl DedicatedWorkerGlobalScope { fn new_inherited(worker_url: Url, - id: PipelineId, - devtools_chan: Option, - cx: Rc, - resource_task: ResourceTask, - parent_sender: Box, - own_sender: Sender<(TrustedWorkerAddress, ScriptMsg)>, - receiver: Receiver<(TrustedWorkerAddress, ScriptMsg)>) - -> DedicatedWorkerGlobalScope { + id: PipelineId, + devtools_chan: Option, + runtime: Rc, + resource_task: ResourceTask, + parent_sender: Box, + own_sender: Sender<(TrustedWorkerAddress, ScriptMsg)>, + receiver: Receiver<(TrustedWorkerAddress, ScriptMsg)>) + -> DedicatedWorkerGlobalScope { DedicatedWorkerGlobalScope { workerglobalscope: WorkerGlobalScope::new_inherited( - WorkerGlobalScopeTypeId::DedicatedGlobalScope, worker_url, cx, resource_task, devtools_chan), + WorkerGlobalScopeTypeId::DedicatedGlobalScope, worker_url, + runtime, resource_task, devtools_chan), id: id, receiver: receiver, own_sender: own_sender, @@ -126,16 +127,16 @@ impl DedicatedWorkerGlobalScope { pub fn new(worker_url: Url, id: PipelineId, devtools_chan: Option, - cx: Rc, + runtime: Rc, resource_task: ResourceTask, parent_sender: Box, own_sender: Sender<(TrustedWorkerAddress, ScriptMsg)>, receiver: Receiver<(TrustedWorkerAddress, ScriptMsg)>) -> Temporary { let scope = box DedicatedWorkerGlobalScope::new_inherited( - worker_url, id, devtools_chan, cx.clone(), resource_task, parent_sender, - own_sender, receiver); - DedicatedWorkerGlobalScopeBinding::Wrap(cx.ptr, scope) + worker_url, id, devtools_chan, runtime.clone(), resource_task, + parent_sender, own_sender, receiver); + DedicatedWorkerGlobalScopeBinding::Wrap(runtime.cx(), scope) } } @@ -166,15 +167,15 @@ impl DedicatedWorkerGlobalScope { } }; - let runtime = ScriptTask::new_rt_and_cx(); + let runtime = Rc::new(ScriptTask::new_rt_and_cx()); let global = DedicatedWorkerGlobalScope::new( - worker_url, id, devtools_chan, runtime.cx.clone(), resource_task, + worker_url, id, devtools_chan, runtime.clone(), resource_task, parent_sender, own_sender, receiver).root(); { let _ar = AutoWorkerReset::new(global.r(), worker); - match runtime.cx.evaluate_script( + match runtime.evaluate_script( global.r().reflector().get_jsobject(), source, url.serialize(), 1) { Ok(_) => (), Err(_) => println!("evaluate_script failed") diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs index 131c6231b8c..dd4a7ea67c1 100644 --- a/components/script/dom/window.rs +++ b/components/script/dom/window.rs @@ -51,7 +51,7 @@ use js::jsapi::JS_EvaluateUCScript; use js::jsapi::JSContext; use js::jsapi::{JS_GC, JS_GetRuntime}; use js::jsval::{JSVal, UndefinedValue}; -use js::rust::{Cx, with_compartment}; +use js::rust::{Runtime, with_compartment}; use url::{Url, UrlParser}; use libc; @@ -133,8 +133,8 @@ pub struct Window { /// Global static data related to the DOM. dom_static: GlobalStaticData, - /// The JavaScript context. - js_context: DOMRefCell>>, + /// The JavaScript runtime. + js_runtime: DOMRefCell>>, /// A handle for communicating messages to the layout task. layout_chan: LayoutChan, @@ -170,15 +170,15 @@ pub struct Window { impl Window { #[allow(unsafe_code)] - pub fn clear_js_context_for_script_deallocation(&self) { + pub fn clear_js_runtime_for_script_deallocation(&self) { unsafe { - *self.js_context.borrow_for_script_deallocation() = None; + *self.js_runtime.borrow_for_script_deallocation() = None; *self.browser_context.borrow_for_script_deallocation() = None; } } pub fn get_cx(&self) -> *mut JSContext { - self.js_context.borrow().as_ref().unwrap().ptr + self.js_runtime.borrow().as_ref().unwrap().cx() } pub fn script_chan(&self) -> Box { @@ -486,7 +486,7 @@ impl<'a> WindowMethods for JSRef<'a, Window> { } pub trait WindowHelpers { - fn clear_js_context(self); + fn clear_js_runtime(self); fn init_browser_context(self, doc: JSRef, frame_element: Option>); fn load_url(self, href: DOMString); fn handle_fire_timer(self, timer_id: TimerId); @@ -559,11 +559,11 @@ impl<'a, T: Reflectable> ScriptHelpers for JSRef<'a, T> { } impl<'a> WindowHelpers for JSRef<'a, Window> { - fn clear_js_context(self) { + fn clear_js_runtime(self) { let document = self.Document().root(); NodeCast::from_ref(document.r()).teardown(); - *self.js_context.borrow_mut() = None; + *self.js_runtime.borrow_mut() = None; *self.browser_context.borrow_mut() = None; } @@ -883,7 +883,7 @@ impl<'a> WindowHelpers for JSRef<'a, Window> { } impl Window { - pub fn new(js_context: Rc, + pub fn new(runtime: Rc, page: Rc, script_chan: Box, image_cache_chan: ImageCacheChan, @@ -929,7 +929,7 @@ impl Window { id: id, parent_info: parent_info, dom_static: GlobalStaticData::new(), - js_context: DOMRefCell::new(Some(js_context.clone())), + js_runtime: DOMRefCell::new(Some(runtime.clone())), resource_task: resource_task, storage_task: storage_task, constellation_chan: constellation_chan, @@ -949,7 +949,7 @@ impl Window { devtools_wants_updates: Cell::new(false), }; - WindowBinding::Wrap(js_context.ptr, win) + WindowBinding::Wrap(runtime.cx(), win) } } diff --git a/components/script/dom/workerglobalscope.rs b/components/script/dom/workerglobalscope.rs index 8723454182b..0ae6e569875 100644 --- a/components/script/dom/workerglobalscope.rs +++ b/components/script/dom/workerglobalscope.rs @@ -27,12 +27,12 @@ use util::str::DOMString; use js::jsapi::JSContext; use js::jsval::JSVal; -use js::rust::Cx; +use js::rust::Runtime; +use url::{Url, UrlParser}; use std::default::Default; -use std::rc::Rc; use std::cell::Cell; -use url::{Url, UrlParser}; +use std::rc::Rc; #[derive(Copy, Clone, PartialEq)] #[jstraceable] @@ -45,7 +45,7 @@ pub enum WorkerGlobalScopeTypeId { pub struct WorkerGlobalScope { eventtarget: EventTarget, worker_url: Url, - js_context: Rc, + runtime: Rc, next_worker_id: Cell, resource_task: ResourceTask, location: MutNullableHeap>, @@ -58,14 +58,14 @@ pub struct WorkerGlobalScope { impl WorkerGlobalScope { pub fn new_inherited(type_id: WorkerGlobalScopeTypeId, worker_url: Url, - cx: Rc, + runtime: Rc, resource_task: ResourceTask, devtools_chan: Option) -> WorkerGlobalScope { WorkerGlobalScope { eventtarget: EventTarget::new_inherited(EventTargetTypeId::WorkerGlobalScope(type_id)), next_worker_id: Cell::new(WorkerId(0)), worker_url: worker_url, - js_context: cx, + runtime: runtime, resource_task: resource_task, location: Default::default(), navigator: Default::default(), @@ -85,7 +85,7 @@ impl WorkerGlobalScope { } pub fn get_cx(&self) -> *mut JSContext { - self.js_context.ptr + self.runtime.cx() } pub fn resource_task<'a>(&'a self) -> &'a ResourceTask { @@ -137,7 +137,7 @@ impl<'a> WorkerGlobalScopeMethods for JSRef<'a, WorkerGlobalScope> { } }; - match self.js_context.evaluate_script( + match self.runtime.evaluate_script( self.reflector().get_jsobject(), source, url.serialize(), 1) { Ok(_) => (), Err(_) => { @@ -263,7 +263,7 @@ impl<'a> WorkerGlobalScopeHelpers for JSRef<'a, WorkerGlobalScope> { } fn get_cx(self) -> *mut JSContext { - self.js_context.ptr + self.runtime.cx() } } diff --git a/components/script/script_task.rs b/components/script/script_task.rs index 926d8567b46..47c793b2c22 100644 --- a/components/script/script_task.rs +++ b/components/script/script_task.rs @@ -312,7 +312,7 @@ pub struct ScriptTask { devtools_marker_sender: RefCell>>, /// The JavaScript runtime. - js_runtime: Runtime, + js_runtime: Rc, mouse_over_targets: DOMRefCell>> } @@ -346,7 +346,7 @@ impl<'a> Drop for ScriptMemoryFailsafe<'a> { let page = owner.page.borrow_for_script_deallocation(); for page in page.iter() { let window = page.window_for_script_deallocation(); - (*window.unsafe_get()).clear_js_context_for_script_deallocation(); + (*window.unsafe_get()).clear_js_runtime_for_script_deallocation(); } } } @@ -491,7 +491,7 @@ impl ScriptTask { devtools_markers: RefCell::new(HashSet::new()), devtools_marker_sender: RefCell::new(None), - js_runtime: runtime, + js_runtime: Rc::new(runtime), mouse_over_targets: DOMRefCell::new(vec!()) } } @@ -1117,7 +1117,7 @@ impl ScriptTask { let mut page_remover = AutoPageRemover::new(self, page_to_remove); // Create the window and document objects. - let window = Window::new(self.js_runtime.cx.clone(), + let window = Window::new(self.js_runtime.clone(), page.clone(), self.chan.clone(), self.image_cache_channel.clone(), @@ -1493,7 +1493,7 @@ fn shut_down_layout(page_tree: &Rc, exit_type: PipelineExitType) { // Drop our references to the JSContext and DOM objects. for page in page_tree.iter() { let window = page.window().root(); - window.r().clear_js_context(); + window.r().clear_js_runtime(); // Sever the connection between the global and the DOM tree page.set_frame(None); } diff --git a/components/servo/Cargo.lock b/components/servo/Cargo.lock index d657551b583..f15d968bb54 100644 --- a/components/servo/Cargo.lock +++ b/components/servo/Cargo.lock @@ -579,7 +579,7 @@ dependencies = [ [[package]] name = "js" version = "0.1.0" -source = "git+https://github.com/servo/rust-mozjs#2f745ff00f2ad7fdc89053af9adc99200a8019a1" +source = "git+https://github.com/servo/rust-mozjs#18f507903856a814f12cce2ffda8065695d8f485" dependencies = [ "libc 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", diff --git a/ports/cef/Cargo.lock b/ports/cef/Cargo.lock index bb52195765e..831f26c9756 100644 --- a/ports/cef/Cargo.lock +++ b/ports/cef/Cargo.lock @@ -581,7 +581,7 @@ dependencies = [ [[package]] name = "js" version = "0.1.0" -source = "git+https://github.com/servo/rust-mozjs#2f745ff00f2ad7fdc89053af9adc99200a8019a1" +source = "git+https://github.com/servo/rust-mozjs#18f507903856a814f12cce2ffda8065695d8f485" dependencies = [ "libc 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", diff --git a/ports/gonk/Cargo.lock b/ports/gonk/Cargo.lock index 70617896eef..f6728e87ef3 100644 --- a/ports/gonk/Cargo.lock +++ b/ports/gonk/Cargo.lock @@ -479,7 +479,7 @@ dependencies = [ [[package]] name = "js" version = "0.1.0" -source = "git+https://github.com/servo/rust-mozjs#2f745ff00f2ad7fdc89053af9adc99200a8019a1" +source = "git+https://github.com/servo/rust-mozjs#18f507903856a814f12cce2ffda8065695d8f485" dependencies = [ "libc 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",