diff options
3 files changed, 11 insertions, 16 deletions
diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs index 60d4f52ef6b..ef3c53d42e3 100644 --- a/components/script/dom/document.rs +++ b/components/script/dom/document.rs @@ -406,7 +406,7 @@ impl Document { #[inline] pub fn browsing_context(&self) -> Option<Root<WindowProxy>> { if self.has_browsing_context { - self.window.maybe_window_proxy() + self.window.undiscarded_window_proxy() } else { None } diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs index 58f0e7b4a1a..837e10c921b 100644 --- a/components/script/dom/window.rs +++ b/components/script/dom/window.rs @@ -345,8 +345,15 @@ impl Window { self.window_proxy.get().unwrap() } - pub fn maybe_window_proxy(&self) -> Option<Root<WindowProxy>> { + /// Returns the window proxy if it has not been discarded. + /// https://html.spec.whatwg.org/multipage/#a-browsing-context-is-discarded + pub fn undiscarded_window_proxy(&self) -> Option<Root<WindowProxy>> { self.window_proxy.get() + .and_then(|window_proxy| if window_proxy.is_browsing_context_discarded() { + None + } else { + Some(window_proxy) + }) } pub fn bluetooth_thread(&self) -> IpcSender<BluetoothRequest> { @@ -670,13 +677,10 @@ impl WindowMethods for Window { // https://html.spec.whatwg.org/multipage/#dom-parent fn GetParent(&self) -> Option<Root<WindowProxy>> { // Steps 1-3. - let window_proxy = match self.maybe_window_proxy() { + let window_proxy = match self.undiscarded_window_proxy() { Some(window_proxy) => window_proxy, None => return None, }; - if window_proxy.is_browsing_context_discarded() { - return None; - } // Step 4. if let Some(parent) = window_proxy.parent() { return Some(Root::from_ref(parent)); @@ -688,13 +692,10 @@ impl WindowMethods for Window { // https://html.spec.whatwg.org/multipage/#dom-top fn GetTop(&self) -> Option<Root<WindowProxy>> { // Steps 1-3. - let window_proxy = match self.maybe_window_proxy() { + let window_proxy = match self.undiscarded_window_proxy() { Some(window_proxy) => window_proxy, None => return None, }; - if window_proxy.is_browsing_context_discarded() { - return None; - } // Steps 4-5. Some(Root::from_ref(window_proxy.top())) } diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe-append-to-child-document.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe-append-to-child-document.html.ini deleted file mode 100644 index af1f00202d3..00000000000 --- a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe-append-to-child-document.html.ini +++ /dev/null @@ -1,6 +0,0 @@ -[iframe-append-to-child-document.html] - type: testharness - [Append iframe element to its own child document] - bug: https://github.com/servo/servo/issues/17479 - expected: FAIL - |