mirror of
https://github.com/servo/servo.git
synced 2025-06-21 07:38:59 +01:00
Auto merge of #5790 - Ms2ger:new_rt_and_cx, r=jdm
<!-- Reviewable:start --> [<img src="https://reviewable.io/review_button.png" height=40 alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/5790) <!-- Reviewable:end -->
This commit is contained in:
commit
886805d76c
3 changed files with 18 additions and 22 deletions
|
@ -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, rt};
|
use js::rust::{Cx, 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};
|
||||||
|
@ -259,7 +259,7 @@ 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!(Cx);
|
||||||
no_jsmanaged_fields!(rt);
|
no_jsmanaged_fields!(Runtime);
|
||||||
no_jsmanaged_fields!(Headers, Method);
|
no_jsmanaged_fields!(Headers, Method);
|
||||||
no_jsmanaged_fields!(ConstellationChan);
|
no_jsmanaged_fields!(ConstellationChan);
|
||||||
no_jsmanaged_fields!(LayoutChan);
|
no_jsmanaged_fields!(LayoutChan);
|
||||||
|
|
|
@ -167,15 +167,15 @@ impl DedicatedWorkerGlobalScope {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
let (_js_runtime, js_context) = ScriptTask::new_rt_and_cx();
|
let runtime = ScriptTask::new_rt_and_cx();
|
||||||
let global = DedicatedWorkerGlobalScope::new(
|
let global = DedicatedWorkerGlobalScope::new(
|
||||||
worker_url, id, devtools_chan, js_context.clone(), resource_task,
|
worker_url, id, devtools_chan, runtime.cx.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 js_context.evaluate_script(
|
match runtime.cx.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")
|
||||||
|
|
|
@ -79,8 +79,7 @@ use hyper::header::{LastModified, Headers};
|
||||||
use js::jsapi::{JS_SetWrapObjectCallbacks, JS_SetExtraGCRootsTracer};
|
use js::jsapi::{JS_SetWrapObjectCallbacks, JS_SetExtraGCRootsTracer};
|
||||||
use js::jsapi::{JSContext, JSRuntime, JSObject, JSTracer};
|
use js::jsapi::{JSContext, JSRuntime, JSObject, JSTracer};
|
||||||
use js::jsapi::{JS_SetGCCallback, JSGCStatus, JSGC_BEGIN, JSGC_END};
|
use js::jsapi::{JS_SetGCCallback, JSGCStatus, JSGC_BEGIN, JSGC_END};
|
||||||
use js::rust::{Runtime, Cx, RtUtils};
|
use js::rust::{Runtime, RtUtils};
|
||||||
use js;
|
|
||||||
use url::Url;
|
use url::Url;
|
||||||
|
|
||||||
use libc;
|
use libc;
|
||||||
|
@ -309,9 +308,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: js::rust::rt,
|
js_runtime: Runtime,
|
||||||
/// The JSContext.
|
|
||||||
js_context: Rc<Cx>,
|
|
||||||
|
|
||||||
mouse_over_targets: DOMRefCell<Vec<JS<Node>>>
|
mouse_over_targets: DOMRefCell<Vec<JS<Node>>>
|
||||||
}
|
}
|
||||||
|
@ -443,7 +440,7 @@ impl ScriptTask {
|
||||||
img_cache_task: ImageCacheTask,
|
img_cache_task: ImageCacheTask,
|
||||||
devtools_chan: Option<DevtoolsControlChan>)
|
devtools_chan: Option<DevtoolsControlChan>)
|
||||||
-> ScriptTask {
|
-> ScriptTask {
|
||||||
let (js_runtime, js_context) = ScriptTask::new_rt_and_cx();
|
let runtime = ScriptTask::new_rt_and_cx();
|
||||||
let wrap_for_same_compartment = wrap_for_same_compartment as
|
let wrap_for_same_compartment = wrap_for_same_compartment as
|
||||||
unsafe extern "C" fn(*mut JSContext, *mut JSObject) -> *mut JSObject;
|
unsafe extern "C" fn(*mut JSContext, *mut JSObject) -> *mut JSObject;
|
||||||
let pre_wrap = pre_wrap as
|
let pre_wrap = pre_wrap as
|
||||||
|
@ -455,11 +452,11 @@ impl ScriptTask {
|
||||||
// and JSCompartment::wrap crashes if that happens. The only way
|
// and JSCompartment::wrap crashes if that happens. The only way
|
||||||
// to retrieve the default callback is as the result of
|
// to retrieve the default callback is as the result of
|
||||||
// JS_SetWrapObjectCallbacks, which is why we call it twice.
|
// JS_SetWrapObjectCallbacks, which is why we call it twice.
|
||||||
let callback = JS_SetWrapObjectCallbacks((*js_runtime).ptr,
|
let callback = JS_SetWrapObjectCallbacks(runtime.rt(),
|
||||||
None,
|
None,
|
||||||
Some(wrap_for_same_compartment),
|
Some(wrap_for_same_compartment),
|
||||||
None);
|
None);
|
||||||
JS_SetWrapObjectCallbacks((*js_runtime).ptr,
|
JS_SetWrapObjectCallbacks(runtime.rt(),
|
||||||
callback,
|
callback,
|
||||||
Some(wrap_for_same_compartment),
|
Some(wrap_for_same_compartment),
|
||||||
Some(pre_wrap));
|
Some(pre_wrap));
|
||||||
|
@ -486,13 +483,12 @@ 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: js_runtime,
|
js_runtime: runtime,
|
||||||
js_context: js_context,
|
|
||||||
mouse_over_targets: DOMRefCell::new(vec!())
|
mouse_over_targets: DOMRefCell::new(vec!())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn new_rt_and_cx() -> (js::rust::rt, Rc<Cx>) {
|
pub fn new_rt_and_cx() -> Runtime {
|
||||||
LiveDOMReferences::initialize();
|
LiveDOMReferences::initialize();
|
||||||
let runtime = Runtime::new();
|
let runtime = Runtime::new();
|
||||||
|
|
||||||
|
@ -508,7 +504,7 @@ impl ScriptTask {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
(runtime.rt, runtime.cx)
|
runtime
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return the root page in the frame tree. Panics if it doesn't exist.
|
// Return the root page in the frame tree. Panics if it doesn't exist.
|
||||||
|
@ -517,7 +513,7 @@ impl ScriptTask {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_cx(&self) -> *mut JSContext {
|
pub fn get_cx(&self) -> *mut JSContext {
|
||||||
self.js_context.ptr
|
self.js_runtime.cx()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Starts the script task. After calling this method, the script task will loop receiving
|
/// Starts the script task. After calling this method, the script task will loop receiving
|
||||||
|
@ -1062,7 +1058,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_context.clone(),
|
let window = Window::new(self.js_runtime.cx.clone(),
|
||||||
page.clone(),
|
page.clone(),
|
||||||
self.chan.clone(),
|
self.chan.clone(),
|
||||||
self.control_chan.clone(),
|
self.control_chan.clone(),
|
||||||
|
@ -1223,7 +1219,7 @@ impl ScriptTask {
|
||||||
// See the implementation of `Width()` and `Height()` in `HTMLImageElement` for
|
// See the implementation of `Width()` and `Height()` in `HTMLImageElement` for
|
||||||
// fallout of this problem.
|
// fallout of this problem.
|
||||||
for node in nodes.iter() {
|
for node in nodes.iter() {
|
||||||
let node_to_dirty = node::from_untrusted_node_address(self.js_runtime.ptr,
|
let node_to_dirty = node::from_untrusted_node_address(self.js_runtime.rt(),
|
||||||
*node).root();
|
*node).root();
|
||||||
let page = get_page(&self.root_page(), pipeline_id);
|
let page = get_page(&self.root_page(), pipeline_id);
|
||||||
let document = page.document().root();
|
let document = page.document().root();
|
||||||
|
@ -1241,7 +1237,7 @@ impl ScriptTask {
|
||||||
}
|
}
|
||||||
let page = get_page(&self.root_page(), pipeline_id);
|
let page = get_page(&self.root_page(), pipeline_id);
|
||||||
let document = page.document().root();
|
let document = page.document().root();
|
||||||
document.r().handle_click_event(self.js_runtime.ptr, button, point);
|
document.r().handle_click_event(self.js_runtime.rt(), button, point);
|
||||||
}
|
}
|
||||||
|
|
||||||
MouseDownEvent(..) => {}
|
MouseDownEvent(..) => {}
|
||||||
|
@ -1256,7 +1252,7 @@ impl ScriptTask {
|
||||||
let mut mouse_over_targets = RootedVec::new();
|
let mut mouse_over_targets = RootedVec::new();
|
||||||
mouse_over_targets.append(&mut *self.mouse_over_targets.borrow_mut());
|
mouse_over_targets.append(&mut *self.mouse_over_targets.borrow_mut());
|
||||||
|
|
||||||
document.r().handle_mouse_move_event(self.js_runtime.ptr, point, &mut mouse_over_targets);
|
document.r().handle_mouse_move_event(self.js_runtime.rt(), point, &mut mouse_over_targets);
|
||||||
*self.mouse_over_targets.borrow_mut() = mouse_over_targets.clone();
|
*self.mouse_over_targets.borrow_mut() = mouse_over_targets.clone();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue