Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Assign a name to iframes when loading the initial about:blank
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.