mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
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:
commit
d1a0aacc60
8 changed files with 49 additions and 49 deletions
|
@ -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<T>);
|
|||
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);
|
||||
|
|
|
@ -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<DevtoolsControlChan>,
|
||||
cx: Rc<Cx>,
|
||||
resource_task: ResourceTask,
|
||||
parent_sender: Box<ScriptChan+Send>,
|
||||
own_sender: Sender<(TrustedWorkerAddress, ScriptMsg)>,
|
||||
receiver: Receiver<(TrustedWorkerAddress, ScriptMsg)>)
|
||||
-> DedicatedWorkerGlobalScope {
|
||||
id: PipelineId,
|
||||
devtools_chan: Option<DevtoolsControlChan>,
|
||||
runtime: Rc<Runtime>,
|
||||
resource_task: ResourceTask,
|
||||
parent_sender: Box<ScriptChan+Send>,
|
||||
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<DevtoolsControlChan>,
|
||||
cx: Rc<Cx>,
|
||||
runtime: Rc<Runtime>,
|
||||
resource_task: ResourceTask,
|
||||
parent_sender: Box<ScriptChan+Send>,
|
||||
own_sender: Sender<(TrustedWorkerAddress, ScriptMsg)>,
|
||||
receiver: Receiver<(TrustedWorkerAddress, ScriptMsg)>)
|
||||
-> Temporary<DedicatedWorkerGlobalScope> {
|
||||
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")
|
||||
|
|
|
@ -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<Option<Rc<Cx>>>,
|
||||
/// The JavaScript runtime.
|
||||
js_runtime: DOMRefCell<Option<Rc<Runtime>>>,
|
||||
|
||||
/// 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<ScriptChan+Send> {
|
||||
|
@ -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<Document>, frame_element: Option<JSRef<Element>>);
|
||||
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<Cx>,
|
||||
pub fn new(runtime: Rc<Runtime>,
|
||||
page: Rc<Page>,
|
||||
script_chan: Box<ScriptChan+Send>,
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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<Cx>,
|
||||
runtime: Rc<Runtime>,
|
||||
next_worker_id: Cell<WorkerId>,
|
||||
resource_task: ResourceTask,
|
||||
location: MutNullableHeap<JS<WorkerLocation>>,
|
||||
|
@ -58,14 +58,14 @@ pub struct WorkerGlobalScope {
|
|||
impl WorkerGlobalScope {
|
||||
pub fn new_inherited(type_id: WorkerGlobalScopeTypeId,
|
||||
worker_url: Url,
|
||||
cx: Rc<Cx>,
|
||||
runtime: Rc<Runtime>,
|
||||
resource_task: ResourceTask,
|
||||
devtools_chan: Option<DevtoolsControlChan>) -> 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()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue