diff options
author | Ms2ger <ms2ger@gmail.com> | 2014-07-15 19:25:34 +0200 |
---|---|---|
committer | Ms2ger <ms2ger@gmail.com> | 2014-07-15 22:29:04 +0200 |
commit | 747bfc6f15a4c1dbfb859539835c30f1f74d1cec (patch) | |
tree | 4bed21041fcbee7e4274471b6674597923c81875 /src/components/script/dom | |
parent | 3074b4747aea092345381553f7850c3d2d91888f (diff) | |
download | servo-747bfc6f15a4c1dbfb859539835c30f1f74d1cec.tar.gz servo-747bfc6f15a4c1dbfb859539835c30f1f74d1cec.zip |
Implement global.console in workers.
Diffstat (limited to 'src/components/script/dom')
-rw-r--r-- | src/components/script/dom/webidls/WorkerGlobalScope.webidl | 6 | ||||
-rw-r--r-- | src/components/script/dom/workerglobalscope.rs | 17 |
2 files changed, 23 insertions, 0 deletions
diff --git a/src/components/script/dom/webidls/WorkerGlobalScope.webidl b/src/components/script/dom/webidls/WorkerGlobalScope.webidl index b4670be2eed..1b20c5eb190 100644 --- a/src/components/script/dom/webidls/WorkerGlobalScope.webidl +++ b/src/components/script/dom/webidls/WorkerGlobalScope.webidl @@ -25,3 +25,9 @@ partial interface WorkerGlobalScope { }; //WorkerGlobalScope implements WindowTimers; //WorkerGlobalScope implements WindowBase64; + +// Proprietary +partial interface WorkerGlobalScope { + [Replaceable] + readonly attribute Console console; +}; diff --git a/src/components/script/dom/workerglobalscope.rs b/src/components/script/dom/workerglobalscope.rs index e48c298ada0..b12e27d708c 100644 --- a/src/components/script/dom/workerglobalscope.rs +++ b/src/components/script/dom/workerglobalscope.rs @@ -3,12 +3,16 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ use dom::bindings::trace::Untraceable; +use dom::bindings::global; +use dom::bindings::js::{JS, JSRef, Temporary, OptionalSettable}; use dom::bindings::utils::{Reflectable, Reflector}; +use dom::console::Console; use dom::eventtarget::{EventTarget, WorkerGlobalScopeTypeId}; use js::jsapi::JSContext; use js::rust::Cx; +use std::cell::Cell; use std::rc::Rc; #[deriving(PartialEq,Encodable)] @@ -20,6 +24,7 @@ pub enum WorkerGlobalScopeId { pub struct WorkerGlobalScope { pub eventtarget: EventTarget, js_context: Untraceable<Rc<Cx>>, + console: Cell<Option<JS<Console>>>, } impl WorkerGlobalScope { @@ -28,6 +33,7 @@ impl WorkerGlobalScope { WorkerGlobalScope { eventtarget: EventTarget::new_inherited(WorkerGlobalScopeTypeId(type_id)), js_context: Untraceable::new(cx), + console: Cell::new(None), } } @@ -40,6 +46,17 @@ impl WorkerGlobalScope { } pub trait WorkerGlobalScopeMethods { + fn Console(&self) -> Temporary<Console>; +} + +impl<'a> WorkerGlobalScopeMethods for JSRef<'a, WorkerGlobalScope> { + fn Console(&self) -> Temporary<Console> { + if self.console.get().is_none() { + let console = Console::new(&global::Worker(*self)); + self.console.assign(Some(console)); + } + Temporary::new(self.console.get().get_ref().clone()) + } } impl Reflectable for WorkerGlobalScope { |