diff options
author | Ms2ger <ms2ger@gmail.com> | 2014-07-15 20:02:30 +0200 |
---|---|---|
committer | Ms2ger <ms2ger@gmail.com> | 2014-07-15 22:29:04 +0200 |
commit | 3074b4747aea092345381553f7850c3d2d91888f (patch) | |
tree | 5a0cdc6eca86a489b335955c03f661f15c6f1036 /src | |
parent | b11440750b70a302ced4394f5f47be3dff3e413d (diff) | |
download | servo-3074b4747aea092345381553f7850c3d2d91888f.tar.gz servo-3074b4747aea092345381553f7850c3d2d91888f.zip |
Store the JSContext in a field on the worker global scope.
Diffstat (limited to 'src')
-rw-r--r-- | src/components/script/dom/bindings/global.rs | 2 | ||||
-rw-r--r-- | src/components/script/dom/dedicatedworkerglobalscope.rs | 20 | ||||
-rw-r--r-- | src/components/script/dom/worker.rs | 6 | ||||
-rw-r--r-- | src/components/script/dom/workerglobalscope.rs | 18 |
4 files changed, 32 insertions, 14 deletions
diff --git a/src/components/script/dom/bindings/global.rs b/src/components/script/dom/bindings/global.rs index a82cfc557df..6d3f9c5cc44 100644 --- a/src/components/script/dom/bindings/global.rs +++ b/src/components/script/dom/bindings/global.rs @@ -35,7 +35,7 @@ impl<'a> GlobalRef<'a> { pub fn get_cx(&self) -> *mut JSContext { match *self { Window(ref window) => window.get_cx(), - Worker(_) => fail!("NYI"), + Worker(ref worker) => worker.get_cx(), } } diff --git a/src/components/script/dom/dedicatedworkerglobalscope.rs b/src/components/script/dom/dedicatedworkerglobalscope.rs index 1373c8c5653..13eb6c958da 100644 --- a/src/components/script/dom/dedicatedworkerglobalscope.rs +++ b/src/components/script/dom/dedicatedworkerglobalscope.rs @@ -12,7 +12,6 @@ use dom::workerglobalscope::DedicatedGlobalScope; use dom::workerglobalscope::WorkerGlobalScope; use script_task::ScriptTask; -use js::jsapi::JSContext; use js::rust::Cx; use std::rc::Rc; @@ -23,21 +22,24 @@ pub struct DedicatedWorkerGlobalScope { } impl DedicatedWorkerGlobalScope { - pub fn new_inherited() -> DedicatedWorkerGlobalScope { + pub fn new_inherited(cx: Rc<Cx>) -> DedicatedWorkerGlobalScope { DedicatedWorkerGlobalScope { - workerglobalscope: WorkerGlobalScope::new_inherited(DedicatedGlobalScope), + workerglobalscope: WorkerGlobalScope::new_inherited(DedicatedGlobalScope, cx), } } - pub fn new(cx: *mut JSContext) -> Temporary<DedicatedWorkerGlobalScope> { - let scope = box DedicatedWorkerGlobalScope::new_inherited(); - DedicatedWorkerGlobalScopeBinding::Wrap(cx, scope) + pub fn new(cx: Rc<Cx>) -> Temporary<DedicatedWorkerGlobalScope> { + let scope = box DedicatedWorkerGlobalScope::new_inherited(cx.clone()); + DedicatedWorkerGlobalScopeBinding::Wrap(cx.ptr, scope) } - pub fn init() -> (Rc<Cx>, Temporary<DedicatedWorkerGlobalScope>) { + pub fn init() -> Temporary<DedicatedWorkerGlobalScope> { let (_js_runtime, js_context) = ScriptTask::new_rt_and_cx(); - let global = DedicatedWorkerGlobalScope::new(js_context.ptr); - (js_context, global) + DedicatedWorkerGlobalScope::new(js_context.clone()) + } + + pub fn get_rust_cx<'a>(&'a self) -> &'a Rc<Cx> { + self.workerglobalscope.get_rust_cx() } } diff --git a/src/components/script/dom/worker.rs b/src/components/script/dom/worker.rs index 63a1da6ce6c..11bbb6f3257 100644 --- a/src/components/script/dom/worker.rs +++ b/src/components/script/dom/worker.rs @@ -45,9 +45,9 @@ impl Worker { } }; - let (cx, global) = DedicatedWorkerGlobalScope::init(); - let global = global.root(); - match cx.evaluate_script(global.reflector().get_jsobject(), source, filename.to_str(), 1) { + let global = DedicatedWorkerGlobalScope::init().root(); + match global.get_rust_cx().evaluate_script( + global.reflector().get_jsobject(), source, filename.to_str(), 1) { Ok(_) => (), Err(_) => println!("evaluate_script failed") } diff --git a/src/components/script/dom/workerglobalscope.rs b/src/components/script/dom/workerglobalscope.rs index 2a76fad7e77..e48c298ada0 100644 --- a/src/components/script/dom/workerglobalscope.rs +++ b/src/components/script/dom/workerglobalscope.rs @@ -2,9 +2,15 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +use dom::bindings::trace::Untraceable; use dom::bindings::utils::{Reflectable, Reflector}; use dom::eventtarget::{EventTarget, WorkerGlobalScopeTypeId}; +use js::jsapi::JSContext; +use js::rust::Cx; + +use std::rc::Rc; + #[deriving(PartialEq,Encodable)] pub enum WorkerGlobalScopeId { DedicatedGlobalScope, @@ -13,14 +19,24 @@ pub enum WorkerGlobalScopeId { #[deriving(Encodable)] pub struct WorkerGlobalScope { pub eventtarget: EventTarget, + js_context: Untraceable<Rc<Cx>>, } impl WorkerGlobalScope { - pub fn new_inherited(type_id: WorkerGlobalScopeId) -> WorkerGlobalScope { + pub fn new_inherited(type_id: WorkerGlobalScopeId, + cx: Rc<Cx>) -> WorkerGlobalScope { WorkerGlobalScope { eventtarget: EventTarget::new_inherited(WorkerGlobalScopeTypeId(type_id)), + js_context: Untraceable::new(cx), } } + + pub fn get_rust_cx<'a>(&'a self) -> &'a Rc<Cx> { + &*self.js_context + } + pub fn get_cx(&self) -> *mut JSContext { + self.js_context.ptr + } } pub trait WorkerGlobalScopeMethods { |