Skip to content

Commit

Permalink
Assign a name to iframes when loading the initial about:blank
Browse files Browse the repository at this point in the history
Before, it would assign the name too late,
causing scripts (which will not wait for another tick)
to accidentally spawn pop-up windows instead of loading
into the iframe.
  • Loading branch information
notriddle committed Oct 19, 2018
1 parent aa95911 commit eafcd91
Show file tree
Hide file tree
Showing 4 changed files with 61 additions and 10 deletions.
20 changes: 10 additions & 10 deletions components/script/dom/htmliframeelement.rs
Expand Up @@ -217,6 +217,16 @@ impl HTMLIFrameElement {

let window = window_from_node(self);

// https://html.spec.whatwg.org/multipage/#attr-iframe-name
// Note: the spec says to set the name 'when the nested browsing context is created'.
// The current implementation sets the name on the window,
// when the iframe attributes are first processed.
if mode == ProcessingMode::FirstTime {
if let Some(window) = self.GetContentWindow() {
window.set_name(self.name.borrow().clone())
}
}

// https://github.com/whatwg/html/issues/490
if mode == ProcessingMode::FirstTime &&
!self.upcast::<Element>().has_attribute(&local_name!("src"))
Expand All @@ -233,16 +243,6 @@ impl HTMLIFrameElement {
return;
}

// https://html.spec.whatwg.org/multipage/#attr-iframe-name
// Note: the spec says to set the name 'when the nested browsing context is created'.
// The current implementation sets the name on the window,
// when the iframe attributes are first processed.
if mode == ProcessingMode::FirstTime {
if let Some(window) = self.GetContentWindow() {
window.set_name(self.name.borrow().clone())
}
}

let url = self.get_url();

// TODO: check ancestor browsing contexts for same URL
Expand Down
19 changes: 19 additions & 0 deletions tests/wpt/metadata/MANIFEST.json
Expand Up @@ -292331,6 +292331,11 @@
{}
]
],
"html/semantics/forms/form-submission-target/form-target-iframe-helper.py": [
[
{}
]
],
"html/semantics/forms/introduction-1/contains.json": [
[
{}
Expand Down Expand Up @@ -366881,6 +366886,12 @@
{}
]
],
"html/semantics/forms/form-submission-target/form-target-iframe.html": [
[
"/html/semantics/forms/form-submission-target/form-target-iframe.html",
{}
]
],
"html/semantics/forms/historical.html": [
[
"/html/semantics/forms/historical.html",
Expand Down Expand Up @@ -615852,6 +615863,14 @@
"d05364387e62dfedc857628af833c3558ee3d1db",
"testharness"
],
"html/semantics/forms/form-submission-target/form-target-iframe-helper.py": [
"291221a9f6ba8876a022021c53c38ff28a3fd893",
"support"
],
"html/semantics/forms/form-submission-target/form-target-iframe.html": [
"8fd4d69c28ab1f569ae96453d02f48158124b4f9",
"testharness"
],
"html/semantics/forms/historical.html": [
"6873ecd251741fb8436a377081d5a6d3de53b7ab",
"testharness"
Expand Down
@@ -0,0 +1,3 @@
def main(request, response):
return ([("Content-Type", "text/plain")],
"OK")
@@ -0,0 +1,29 @@
<!DOCTYPE html>
<title>Form targetted at iframe</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
async_test(function(t) {
window.addEventListener("load", function() {
var frame = document.createElement("iframe");
frame.name = "frame";
document.documentElement.appendChild(frame);
var form = document.createElement("form");
form.target = "frame";
form.action = "form-target-iframe-helper.py";
form.method = "POST";
var input = document.createElement("input");
input.name = "n";
form.appendChild(input);
document.documentElement.appendChild(form);
form.submit();
frame.addEventListener("load", function() {
if (frame.contentWindow.location.href != "about:blank") {
assert_equals(frame.contentWindow.document.body.textContent, "OK");
t.done();
}
});
});
}, "Form targetted at iframe");
</script>
<body>

0 comments on commit eafcd91

Please sign in to comment.