diff options
Diffstat (limited to 'components/script/dom/window.rs')
-rw-r--r-- | components/script/dom/window.rs | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs index 41b7441c3bf..b4c99ddfc94 100644 --- a/components/script/dom/window.rs +++ b/components/script/dom/window.rs @@ -61,10 +61,12 @@ use fetch; use ipc_channel::ipc::IpcSender; use ipc_channel::router::ROUTER; use js::jsapi::{JSAutoCompartment, JSContext}; -use js::jsapi::{JS_GC, JS_GetRuntime}; -use js::jsval::UndefinedValue; +use js::jsapi::{JS_GC, JS_GetRuntime, JSPROP_ENUMERATE}; +use js::jsval::{JSVal, UndefinedValue}; use js::rust::HandleValue; +use js::rust::wrappers::JS_DefineProperty; use layout_image::fetch_image_for_layout; +use libc; use microtask::MicrotaskQueue; use msg::constellation_msg::PipelineId; use net_traits::{ResourceThreads, ReferrerPolicy}; @@ -574,6 +576,30 @@ impl WindowMethods for Window { self.window_proxy().open(url, target, features) } + #[allow(unsafe_code)] + // https://html.spec.whatwg.org/multipage/#dom-opener + unsafe fn Opener(&self, cx: *mut JSContext) -> JSVal { + self.window_proxy().opener(cx) + } + + #[allow(unsafe_code)] + // https://html.spec.whatwg.org/multipage/#dom-opener + unsafe fn SetOpener(&self, cx: *mut JSContext, value: HandleValue) { + // Step 1. + if value.is_null() { + return self.window_proxy().disown(); + } + // Step 2. + let obj = self.reflector().get_jsobject(); + assert!(JS_DefineProperty(cx, + obj, + "opener\0".as_ptr() as *const libc::c_char, + value, + JSPROP_ENUMERATE, + None, + None)); + } + // https://html.spec.whatwg.org/multipage/#dom-window-closed fn Closed(&self) -> bool { self.window_proxy.get() |