diff --git a/components/script/dom/globalscope.rs b/components/script/dom/globalscope.rs index de9ee3773d2..0eaf631f0e1 100644 --- a/components/script/dom/globalscope.rs +++ b/components/script/dom/globalscope.rs @@ -2,19 +2,23 @@ * 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::js::{JS, MutNullableHeap, Root}; use dom::bindings::reflector::Reflectable; +use dom::crypto::Crypto; use dom::eventtarget::EventTarget; use js::jsapi::{JS_GetContext, JS_GetObjectRuntime, JSContext}; #[dom_struct] pub struct GlobalScope { eventtarget: EventTarget, + crypto: MutNullableHeap>, } impl GlobalScope { pub fn new_inherited() -> GlobalScope { GlobalScope { eventtarget: EventTarget::new_inherited(), + crypto: Default::default(), } } @@ -29,4 +33,8 @@ impl GlobalScope { context } } + + pub fn crypto(&self) -> Root { + self.crypto.or_init(|| Crypto::new(self)) + } } diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs index 0b764f6fa05..148ee2f5eed 100644 --- a/components/script/dom/window.rs +++ b/components/script/dom/window.rs @@ -157,7 +157,6 @@ pub struct Window { history_traversal_task_source: HistoryTraversalTaskSource, #[ignore_heap_size_of = "task sources are hard"] file_reading_task_source: FileReadingTaskSource, - crypto: MutNullableHeap>, navigator: MutNullableHeap>, #[ignore_heap_size_of = "channels are hard"] image_cache_thread: ImageCacheThread, @@ -505,7 +504,7 @@ impl WindowMethods for Window { // https://dvcs.w3.org/hg/webcrypto-api/raw-file/tip/spec/Overview.html#dfn-GlobalCrypto fn Crypto(&self) -> Root { - self.crypto.or_init(|| Crypto::new(self.upcast())) + self.upcast::().crypto() } // https://html.spec.whatwg.org/multipage/#dom-frameelement @@ -1638,7 +1637,6 @@ impl Window { history_traversal_task_source: history_task_source, file_reading_task_source: file_task_source, image_cache_chan: image_cache_chan, - crypto: Default::default(), navigator: Default::default(), image_cache_thread: image_cache_thread, mem_profiler_chan: mem_profiler_chan, diff --git a/components/script/dom/workerglobalscope.rs b/components/script/dom/workerglobalscope.rs index 83cef1d994f..739e81c87ac 100644 --- a/components/script/dom/workerglobalscope.rs +++ b/components/script/dom/workerglobalscope.rs @@ -89,7 +89,6 @@ pub struct WorkerGlobalScope { resource_threads: ResourceThreads, location: MutNullableHeap>, navigator: MutNullableHeap>, - crypto: MutNullableHeap>, timers: OneshotTimers, #[ignore_heap_size_of = "Defined in std"] @@ -147,7 +146,6 @@ impl WorkerGlobalScope { resource_threads: init.resource_threads, location: Default::default(), navigator: Default::default(), - crypto: Default::default(), timers: OneshotTimers::new(timer_event_chan, init.scheduler_chan.clone()), mem_profiler_chan: init.mem_profiler_chan, time_profiler_chan: init.time_profiler_chan, @@ -343,7 +341,7 @@ impl WorkerGlobalScopeMethods for WorkerGlobalScope { // https://html.spec.whatwg.org/multipage/#dfn-Crypto fn Crypto(&self) -> Root { - self.crypto.or_init(|| Crypto::new(self.upcast())) + self.upcast::().crypto() } // https://html.spec.whatwg.org/multipage/#dom-windowbase64-btoa