diff --git a/components/script/dom/browsercontext.rs b/components/script/dom/browsercontext.rs index 87d90f8e64f..55e070ef10f 100644 --- a/components/script/dom/browsercontext.rs +++ b/components/script/dom/browsercontext.rs @@ -52,8 +52,8 @@ impl BrowsingContext { self.active_document().window() } - pub fn frame_element(&self) -> Option> { - self.frame_element.as_ref().map(JS::root) + pub fn frame_element(&self) -> Option<&Element> { + self.frame_element.as_ref().map(|element| &**element) } pub fn window_proxy(&self) -> *mut JSObject { diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs index e0a8154de92..52ad4dc20be 100644 --- a/components/script/dom/document.rs +++ b/components/script/dom/document.rs @@ -1923,14 +1923,14 @@ impl DocumentProgressHandler { let browsing_context = window_ref.browsing_context(); let browsing_context = browsing_context.as_ref().unwrap(); - browsing_context.frame_element().map(|frame_element| { - let frame_window = window_from_node(frame_element.r()); + if let Some(frame_element) = browsing_context.frame_element() { + let frame_window = window_from_node(frame_element); let event = Event::new(GlobalRef::Window(frame_window.r()), "load".to_owned(), EventBubbles::DoesNotBubble, EventCancelable::NotCancelable); - let target = EventTargetCast::from_ref(frame_element.r()); + let target = EventTargetCast::from_ref(frame_element); event.r().fire(target); - }); + }; document.r().notify_constellation_load(); diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs index b5c794dcac2..3b56b96ddb1 100644 --- a/components/script/dom/window.rs +++ b/components/script/dom/window.rs @@ -411,7 +411,7 @@ impl WindowMethods for Window { // https://html.spec.whatwg.org/multipage/#dom-frameelement fn GetFrameElement(&self) -> Option> { - self.browsing_context().as_ref().unwrap().frame_element() + self.browsing_context().as_ref().unwrap().frame_element().map(Root::from_ref) } // https://html.spec.whatwg.org/multipage/#dom-navigator @@ -1245,7 +1245,7 @@ impl Window { let browsing_context = browsing_context.as_ref().unwrap(); browsing_context.frame_element().map(|frame_element| { - let window = window_from_node(frame_element.r()); + let window = window_from_node(frame_element); // FIXME(https://github.com/rust-lang/rust/issues/23338) let r = window.r(); let context = r.browsing_context();