diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs index d55fc152eee..0e3bf71d269 100644 --- a/components/script/dom/window.rs +++ b/components/script/dom/window.rs @@ -9,7 +9,6 @@ use std::collections::hash_map::Entry; use std::collections::{HashMap, HashSet}; use std::default::Default; use std::io::{stderr, stdout, Write}; -use std::ptr::NonNull; use std::rc::Rc; use std::sync::{Arc, Mutex}; use std::time::{Duration, Instant}; @@ -88,7 +87,7 @@ use super::bindings::codegen::Bindings::MessagePortBinding::StructuredSerializeO use super::bindings::trace::HashMapTracedValues; use crate::dom::bindings::cell::{DomRefCell, Ref}; use crate::dom::bindings::codegen::Bindings::DocumentBinding::{ - DocumentMethods, DocumentReadyState, + DocumentMethods, DocumentReadyState, NamedPropertyValue, }; use crate::dom::bindings::codegen::Bindings::HTMLIFrameElementBinding::HTMLIFrameElementMethods; use crate::dom::bindings::codegen::Bindings::HistoryBinding::History_Binding::HistoryMethods; @@ -1475,9 +1474,8 @@ impl WindowMethods for Window { self.as_global_scope().is_secure_context() } - // https://html.spec.whatwg.org/multipage/#named-access-on-the-window-object - #[allow(unsafe_code)] - fn NamedGetter(&self, _cx: JSContext, name: DOMString) -> Option> { + /// + fn NamedGetter(&self, name: DOMString) -> Option { if name.is_empty() { return None; } @@ -1517,11 +1515,7 @@ impl WindowMethods for Window { .downcast::() .and_then(|iframe| iframe.GetContentWindow()) { - unsafe { - return Some(NonNull::new_unchecked( - nested_window_proxy.reflector().get_jsobject().get(), - )); - } + return Some(NamedPropertyValue::WindowProxy(nested_window_proxy)); } } @@ -1531,11 +1525,7 @@ impl WindowMethods for Window { if elements.next().is_none() { // Step 3. - unsafe { - return Some(NonNull::new_unchecked( - first.reflector().get_jsobject().get(), - )); - } + return Some(NamedPropertyValue::Element(DomRoot::from_ref(first))); } // Step 4. @@ -1569,11 +1559,7 @@ impl WindowMethods for Window { document.upcast(), Box::new(WindowNamedGetter { name }), ); - unsafe { - Some(NonNull::new_unchecked( - collection.reflector().get_jsobject().get(), - )) - } + Some(NamedPropertyValue::HTMLCollection(collection)) } // https://html.spec.whatwg.org/multipage/#dom-tree-accessors:supported-property-names diff --git a/components/script/window_named_properties.rs b/components/script/window_named_properties.rs index fa63f903300..55c2e57a4b4 100644 --- a/components/script/window_named_properties.rs +++ b/components/script/window_named_properties.rs @@ -132,7 +132,7 @@ unsafe extern "C" fn get_own_property_descriptor( let window = Root::downcast::(GlobalScope::from_object(proxy.get())) .expect("global is not a window"); - if let Some(obj) = window.NamedGetter(cx, s.into()) { + if let Some(obj) = window.NamedGetter(s.into()) { rooted!(in(*cx) let mut rval = UndefinedValue()); obj.to_jsval(*cx, rval.handle_mut()); set_property_descriptor( diff --git a/components/script_bindings/webidls/Window.webidl b/components/script_bindings/webidls/Window.webidl index 64d7563b38e..222fb592ba0 100644 --- a/components/script_bindings/webidls/Window.webidl +++ b/components/script_bindings/webidls/Window.webidl @@ -45,7 +45,7 @@ optional DOMString features = ""); //getter WindowProxy (unsigned long index); - getter object (DOMString name); + getter NamedPropertyValue (DOMString name); // the user agent readonly attribute Navigator navigator;