aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/script/dom/document.rs2
-rw-r--r--components/script/dom/window.rs19
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe-append-to-child-document.html.ini6
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
-