diff options
-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 { |