Auto merge of #6001 - Ms2ger:runtime, r=jdm

<!-- Reviewable:start -->
[<img src="https://reviewable.io/review_button.png" height=40 alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/6001)
<!-- Reviewable:end -->
This commit is contained in:
bors-servo 2015-05-10 15:14:37 -05:00
commit d1a0aacc60
8 changed files with 49 additions and 49 deletions

View file

@ -45,7 +45,7 @@ use hyper::header::Headers;
use hyper::method::Method; use hyper::method::Method;
use js::jsapi::{JSObject, JSTracer, JS_CallTracer, JSGCTraceKind}; use js::jsapi::{JSObject, JSTracer, JS_CallTracer, JSGCTraceKind};
use js::jsval::JSVal; use js::jsval::JSVal;
use js::rust::{Cx, Runtime}; use js::rust::Runtime;
use layout_interface::{LayoutRPC, LayoutChan}; use layout_interface::{LayoutRPC, LayoutChan};
use libc; use libc;
use msg::constellation_msg::{PipelineId, SubpageId, WindowSizeData, WorkerId}; use msg::constellation_msg::{PipelineId, SubpageId, WindowSizeData, WorkerId};
@ -260,7 +260,6 @@ no_jsmanaged_fields!(HashSet<T>);
no_jsmanaged_fields!(SubpageId, WindowSizeData, PipelineId); no_jsmanaged_fields!(SubpageId, WindowSizeData, PipelineId);
no_jsmanaged_fields!(WorkerId); no_jsmanaged_fields!(WorkerId);
no_jsmanaged_fields!(QuirksMode); no_jsmanaged_fields!(QuirksMode);
no_jsmanaged_fields!(Cx);
no_jsmanaged_fields!(Runtime); no_jsmanaged_fields!(Runtime);
no_jsmanaged_fields!(Headers, Method); no_jsmanaged_fields!(Headers, Method);
no_jsmanaged_fields!(ConstellationChan); no_jsmanaged_fields!(ConstellationChan);

View file

@ -35,11 +35,11 @@ use util::task_state::{SCRIPT, IN_WORKER};
use js::jsapi::JSContext; use js::jsapi::JSContext;
use js::jsval::JSVal; use js::jsval::JSVal;
use js::rust::Cx; use js::rust::Runtime;
use url::Url;
use std::rc::Rc; use std::rc::Rc;
use std::sync::mpsc::{Sender, Receiver, channel}; use std::sync::mpsc::{Sender, Receiver, channel};
use url::Url;
/// A ScriptChan that can be cloned freely and will silently send a TrustedWorkerAddress with /// 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 /// every message. While this SendableWorkerScriptChan is alive, the associated Worker object
@ -106,7 +106,7 @@ impl DedicatedWorkerGlobalScope {
fn new_inherited(worker_url: Url, fn new_inherited(worker_url: Url,
id: PipelineId, id: PipelineId,
devtools_chan: Option<DevtoolsControlChan>, devtools_chan: Option<DevtoolsControlChan>,
cx: Rc<Cx>, runtime: Rc<Runtime>,
resource_task: ResourceTask, resource_task: ResourceTask,
parent_sender: Box<ScriptChan+Send>, parent_sender: Box<ScriptChan+Send>,
own_sender: Sender<(TrustedWorkerAddress, ScriptMsg)>, own_sender: Sender<(TrustedWorkerAddress, ScriptMsg)>,
@ -114,7 +114,8 @@ impl DedicatedWorkerGlobalScope {
-> DedicatedWorkerGlobalScope { -> DedicatedWorkerGlobalScope {
DedicatedWorkerGlobalScope { DedicatedWorkerGlobalScope {
workerglobalscope: WorkerGlobalScope::new_inherited( workerglobalscope: WorkerGlobalScope::new_inherited(
WorkerGlobalScopeTypeId::DedicatedGlobalScope, worker_url, cx, resource_task, devtools_chan), WorkerGlobalScopeTypeId::DedicatedGlobalScope, worker_url,
runtime, resource_task, devtools_chan),
id: id, id: id,
receiver: receiver, receiver: receiver,
own_sender: own_sender, own_sender: own_sender,
@ -126,16 +127,16 @@ impl DedicatedWorkerGlobalScope {
pub fn new(worker_url: Url, pub fn new(worker_url: Url,
id: PipelineId, id: PipelineId,
devtools_chan: Option<DevtoolsControlChan>, devtools_chan: Option<DevtoolsControlChan>,
cx: Rc<Cx>, runtime: Rc<Runtime>,
resource_task: ResourceTask, resource_task: ResourceTask,
parent_sender: Box<ScriptChan+Send>, parent_sender: Box<ScriptChan+Send>,
own_sender: Sender<(TrustedWorkerAddress, ScriptMsg)>, own_sender: Sender<(TrustedWorkerAddress, ScriptMsg)>,
receiver: Receiver<(TrustedWorkerAddress, ScriptMsg)>) receiver: Receiver<(TrustedWorkerAddress, ScriptMsg)>)
-> Temporary<DedicatedWorkerGlobalScope> { -> Temporary<DedicatedWorkerGlobalScope> {
let scope = box DedicatedWorkerGlobalScope::new_inherited( let scope = box DedicatedWorkerGlobalScope::new_inherited(
worker_url, id, devtools_chan, cx.clone(), resource_task, parent_sender, worker_url, id, devtools_chan, runtime.clone(), resource_task,
own_sender, receiver); parent_sender, own_sender, receiver);
DedicatedWorkerGlobalScopeBinding::Wrap(cx.ptr, scope) 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( 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(); parent_sender, own_sender, receiver).root();
{ {
let _ar = AutoWorkerReset::new(global.r(), worker); 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) { global.r().reflector().get_jsobject(), source, url.serialize(), 1) {
Ok(_) => (), Ok(_) => (),
Err(_) => println!("evaluate_script failed") Err(_) => println!("evaluate_script failed")

View file

@ -51,7 +51,7 @@ use js::jsapi::JS_EvaluateUCScript;
use js::jsapi::JSContext; use js::jsapi::JSContext;
use js::jsapi::{JS_GC, JS_GetRuntime}; use js::jsapi::{JS_GC, JS_GetRuntime};
use js::jsval::{JSVal, UndefinedValue}; use js::jsval::{JSVal, UndefinedValue};
use js::rust::{Cx, with_compartment}; use js::rust::{Runtime, with_compartment};
use url::{Url, UrlParser}; use url::{Url, UrlParser};
use libc; use libc;
@ -133,8 +133,8 @@ pub struct Window {
/// Global static data related to the DOM. /// Global static data related to the DOM.
dom_static: GlobalStaticData, dom_static: GlobalStaticData,
/// The JavaScript context. /// The JavaScript runtime.
js_context: DOMRefCell<Option<Rc<Cx>>>, js_runtime: DOMRefCell<Option<Rc<Runtime>>>,
/// A handle for communicating messages to the layout task. /// A handle for communicating messages to the layout task.
layout_chan: LayoutChan, layout_chan: LayoutChan,
@ -170,15 +170,15 @@ pub struct Window {
impl Window { impl Window {
#[allow(unsafe_code)] #[allow(unsafe_code)]
pub fn clear_js_context_for_script_deallocation(&self) { pub fn clear_js_runtime_for_script_deallocation(&self) {
unsafe { 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; *self.browser_context.borrow_for_script_deallocation() = None;
} }
} }
pub fn get_cx(&self) -> *mut JSContext { 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<ScriptChan+Send> { pub fn script_chan(&self) -> Box<ScriptChan+Send> {
@ -486,7 +486,7 @@ impl<'a> WindowMethods for JSRef<'a, Window> {
} }
pub trait WindowHelpers { pub trait WindowHelpers {
fn clear_js_context(self); fn clear_js_runtime(self);
fn init_browser_context(self, doc: JSRef<Document>, frame_element: Option<JSRef<Element>>); fn init_browser_context(self, doc: JSRef<Document>, frame_element: Option<JSRef<Element>>);
fn load_url(self, href: DOMString); fn load_url(self, href: DOMString);
fn handle_fire_timer(self, timer_id: TimerId); 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> { impl<'a> WindowHelpers for JSRef<'a, Window> {
fn clear_js_context(self) { fn clear_js_runtime(self) {
let document = self.Document().root(); let document = self.Document().root();
NodeCast::from_ref(document.r()).teardown(); NodeCast::from_ref(document.r()).teardown();
*self.js_context.borrow_mut() = None; *self.js_runtime.borrow_mut() = None;
*self.browser_context.borrow_mut() = None; *self.browser_context.borrow_mut() = None;
} }
@ -883,7 +883,7 @@ impl<'a> WindowHelpers for JSRef<'a, Window> {
} }
impl Window { impl Window {
pub fn new(js_context: Rc<Cx>, pub fn new(runtime: Rc<Runtime>,
page: Rc<Page>, page: Rc<Page>,
script_chan: Box<ScriptChan+Send>, script_chan: Box<ScriptChan+Send>,
image_cache_chan: ImageCacheChan, image_cache_chan: ImageCacheChan,
@ -929,7 +929,7 @@ impl Window {
id: id, id: id,
parent_info: parent_info, parent_info: parent_info,
dom_static: GlobalStaticData::new(), dom_static: GlobalStaticData::new(),
js_context: DOMRefCell::new(Some(js_context.clone())), js_runtime: DOMRefCell::new(Some(runtime.clone())),
resource_task: resource_task, resource_task: resource_task,
storage_task: storage_task, storage_task: storage_task,
constellation_chan: constellation_chan, constellation_chan: constellation_chan,
@ -949,7 +949,7 @@ impl Window {
devtools_wants_updates: Cell::new(false), devtools_wants_updates: Cell::new(false),
}; };
WindowBinding::Wrap(js_context.ptr, win) WindowBinding::Wrap(runtime.cx(), win)
} }
} }

View file

@ -27,12 +27,12 @@ use util::str::DOMString;
use js::jsapi::JSContext; use js::jsapi::JSContext;
use js::jsval::JSVal; use js::jsval::JSVal;
use js::rust::Cx; use js::rust::Runtime;
use url::{Url, UrlParser};
use std::default::Default; use std::default::Default;
use std::rc::Rc;
use std::cell::Cell; use std::cell::Cell;
use url::{Url, UrlParser}; use std::rc::Rc;
#[derive(Copy, Clone, PartialEq)] #[derive(Copy, Clone, PartialEq)]
#[jstraceable] #[jstraceable]
@ -45,7 +45,7 @@ pub enum WorkerGlobalScopeTypeId {
pub struct WorkerGlobalScope { pub struct WorkerGlobalScope {
eventtarget: EventTarget, eventtarget: EventTarget,
worker_url: Url, worker_url: Url,
js_context: Rc<Cx>, runtime: Rc<Runtime>,
next_worker_id: Cell<WorkerId>, next_worker_id: Cell<WorkerId>,
resource_task: ResourceTask, resource_task: ResourceTask,
location: MutNullableHeap<JS<WorkerLocation>>, location: MutNullableHeap<JS<WorkerLocation>>,
@ -58,14 +58,14 @@ pub struct WorkerGlobalScope {
impl WorkerGlobalScope { impl WorkerGlobalScope {
pub fn new_inherited(type_id: WorkerGlobalScopeTypeId, pub fn new_inherited(type_id: WorkerGlobalScopeTypeId,
worker_url: Url, worker_url: Url,
cx: Rc<Cx>, runtime: Rc<Runtime>,
resource_task: ResourceTask, resource_task: ResourceTask,
devtools_chan: Option<DevtoolsControlChan>) -> WorkerGlobalScope { devtools_chan: Option<DevtoolsControlChan>) -> WorkerGlobalScope {
WorkerGlobalScope { WorkerGlobalScope {
eventtarget: EventTarget::new_inherited(EventTargetTypeId::WorkerGlobalScope(type_id)), eventtarget: EventTarget::new_inherited(EventTargetTypeId::WorkerGlobalScope(type_id)),
next_worker_id: Cell::new(WorkerId(0)), next_worker_id: Cell::new(WorkerId(0)),
worker_url: worker_url, worker_url: worker_url,
js_context: cx, runtime: runtime,
resource_task: resource_task, resource_task: resource_task,
location: Default::default(), location: Default::default(),
navigator: Default::default(), navigator: Default::default(),
@ -85,7 +85,7 @@ impl WorkerGlobalScope {
} }
pub fn get_cx(&self) -> *mut JSContext { pub fn get_cx(&self) -> *mut JSContext {
self.js_context.ptr self.runtime.cx()
} }
pub fn resource_task<'a>(&'a self) -> &'a ResourceTask { 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) { self.reflector().get_jsobject(), source, url.serialize(), 1) {
Ok(_) => (), Ok(_) => (),
Err(_) => { Err(_) => {
@ -263,7 +263,7 @@ impl<'a> WorkerGlobalScopeHelpers for JSRef<'a, WorkerGlobalScope> {
} }
fn get_cx(self) -> *mut JSContext { fn get_cx(self) -> *mut JSContext {
self.js_context.ptr self.runtime.cx()
} }
} }

View file

@ -312,7 +312,7 @@ pub struct ScriptTask {
devtools_marker_sender: RefCell<Option<Sender<TimelineMarker>>>, devtools_marker_sender: RefCell<Option<Sender<TimelineMarker>>>,
/// The JavaScript runtime. /// The JavaScript runtime.
js_runtime: Runtime, js_runtime: Rc<Runtime>,
mouse_over_targets: DOMRefCell<Vec<JS<Node>>> mouse_over_targets: DOMRefCell<Vec<JS<Node>>>
} }
@ -346,7 +346,7 @@ impl<'a> Drop for ScriptMemoryFailsafe<'a> {
let page = owner.page.borrow_for_script_deallocation(); let page = owner.page.borrow_for_script_deallocation();
for page in page.iter() { for page in page.iter() {
let window = page.window_for_script_deallocation(); 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_markers: RefCell::new(HashSet::new()),
devtools_marker_sender: RefCell::new(None), devtools_marker_sender: RefCell::new(None),
js_runtime: runtime, js_runtime: Rc::new(runtime),
mouse_over_targets: DOMRefCell::new(vec!()) mouse_over_targets: DOMRefCell::new(vec!())
} }
} }
@ -1117,7 +1117,7 @@ impl ScriptTask {
let mut page_remover = AutoPageRemover::new(self, page_to_remove); let mut page_remover = AutoPageRemover::new(self, page_to_remove);
// Create the window and document objects. // 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(), page.clone(),
self.chan.clone(), self.chan.clone(),
self.image_cache_channel.clone(), self.image_cache_channel.clone(),
@ -1493,7 +1493,7 @@ fn shut_down_layout(page_tree: &Rc<Page>, exit_type: PipelineExitType) {
// Drop our references to the JSContext and DOM objects. // Drop our references to the JSContext and DOM objects.
for page in page_tree.iter() { for page in page_tree.iter() {
let window = page.window().root(); 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 // Sever the connection between the global and the DOM tree
page.set_frame(None); page.set_frame(None);
} }

View file

@ -579,7 +579,7 @@ dependencies = [
[[package]] [[package]]
name = "js" name = "js"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/servo/rust-mozjs#2f745ff00f2ad7fdc89053af9adc99200a8019a1" source = "git+https://github.com/servo/rust-mozjs#18f507903856a814f12cce2ffda8065695d8f485"
dependencies = [ dependencies = [
"libc 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "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)", "log 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",

2
ports/cef/Cargo.lock generated
View file

@ -581,7 +581,7 @@ dependencies = [
[[package]] [[package]]
name = "js" name = "js"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/servo/rust-mozjs#2f745ff00f2ad7fdc89053af9adc99200a8019a1" source = "git+https://github.com/servo/rust-mozjs#18f507903856a814f12cce2ffda8065695d8f485"
dependencies = [ dependencies = [
"libc 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "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)", "log 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",

2
ports/gonk/Cargo.lock generated
View file

@ -479,7 +479,7 @@ dependencies = [
[[package]] [[package]]
name = "js" name = "js"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/servo/rust-mozjs#2f745ff00f2ad7fdc89053af9adc99200a8019a1" source = "git+https://github.com/servo/rust-mozjs#18f507903856a814f12cce2ffda8065695d8f485"
dependencies = [ dependencies = [
"libc 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "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)", "log 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",