aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/window.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom/window.rs')
-rw-r--r--components/script/dom/window.rs30
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()