-
Notifications
You must be signed in to change notification settings - Fork 3.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
HTML: document.open() and document's URL #12636
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,87 @@ | ||
test(t => { | ||
const frame = document.body.appendChild(document.createElement("iframe")); | ||
t.add_cleanup(() => frame.remove()); | ||
assert_equals(frame.contentDocument.URL, "about:blank"); | ||
assert_equals(frame.contentWindow.location.href, "about:blank"); | ||
frame.contentDocument.open(); | ||
assert_equals(frame.contentDocument.URL, document.URL); | ||
assert_equals(frame.contentWindow.location.href, document.URL); | ||
}, "document.open() changes document's URL (fully active document)"); | ||
|
||
async_test(t => { | ||
const blankURL = new URL("/common/blank.html", document.URL).href; | ||
const frameURL = new URL("resources/page-with-frame.html", document.URL).href; | ||
const frame = document.body.appendChild(document.createElement("iframe")); | ||
t.add_cleanup(() => frame.remove()); | ||
frame.onload = t.step_func(() => { | ||
assert_equals(frame.contentDocument.URL, frameURL); | ||
assert_equals(frame.contentWindow.location.href, frameURL); | ||
const childFrame = frame.contentDocument.querySelector("iframe"); | ||
const childDoc = childFrame.contentDocument; | ||
const childWin = childFrame.contentWindow; | ||
assert_equals(childDoc.URL, blankURL); | ||
assert_equals(childWin.location.href, blankURL); | ||
|
||
// Right now childDoc is still fully active. | ||
|
||
frame.onload = t.step_func_done(() => { | ||
// Now childDoc is still active but no longer fully active. | ||
childDoc.open(); | ||
assert_equals(childDoc.URL, blankURL); | ||
assert_equals(childWin.location.href, blankURL); | ||
}); | ||
frame.src = "/common/blank.html"; | ||
}); | ||
frame.src = frameURL; | ||
}, "document.open() does not change document's URL (active but not fully active document)"); | ||
|
||
test(t => { | ||
const frame = document.body.appendChild(document.createElement("iframe")); | ||
t.add_cleanup(() => frame.remove()); | ||
const doc = frame.contentDocument; | ||
|
||
// Right now the frame is connected and it has an active document. | ||
assert_equals(doc.URL, "about:blank"); | ||
|
||
frame.remove(); | ||
|
||
// Now the frame is no longer connected. Its document is no longer active. | ||
assert_equals(doc.URL, "about:blank"); | ||
assert_equals(doc.open(), doc); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Maybe don't assert_equals on the return value, since that is an orthogonal thing? Here and below. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. All the other tests I've added have that assertion for pretty much every There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. OK, but in that case it's missing from the first two tests. |
||
assert_equals(doc.URL, "about:blank"); | ||
}, "document.open() does not change document's URL (non-active document with an associated Window object; frame is removed)"); | ||
|
||
async_test(t => { | ||
const frame = document.createElement("iframe"); | ||
t.add_cleanup(() => frame.remove()); | ||
|
||
frame.onload = t.step_func(() => { | ||
const doc = frame.contentDocument; | ||
// Right now the frame is connected and it has an active document. | ||
assert_equals(doc.URL, "about:blank"); | ||
|
||
frame.onload = t.step_func_done(() => { | ||
// Now even though the frame is still connected, its document is no | ||
// longer active. | ||
assert_not_equals(frame.contentDocument, doc); | ||
assert_equals(doc.URL, "about:blank"); | ||
assert_equals(doc.open(), doc); | ||
assert_equals(doc.URL, "about:blank"); | ||
}); | ||
|
||
frame.src = "/common/blank.html"; | ||
}); | ||
|
||
// We need to connect the frame after the load event is set up to mitigate | ||
// against https://crbug.com/569511. | ||
document.body.appendChild(frame); | ||
}, "document.open() does not change document's URL (non-active document with an associated Window object; navigated away)"); | ||
|
||
test(t => { | ||
const frame = document.body.appendChild(document.createElement("iframe")); | ||
t.add_cleanup(() => frame.remove()); | ||
const doc = frame.contentDocument.implementation.createHTMLDocument(); | ||
assert_equals(doc.URL, "about:blank"); | ||
assert_equals(doc.open(), doc); | ||
assert_equals(doc.URL, "about:blank"); | ||
}, "document.open() does not change document's URL (non-active document without an associated Window object)"); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Probably these next two tests should also test the window's location.href. Can extract into a helper if desired (e.g. using document.defaultView).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hah, well I had that but different browsers do different things when accessing
location.href
on a window that got closed. Firefox returns the empty string I believe, while Chrome returnsundefined
or something similar. Will add a comment.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
File a HTML spec issue? :)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
whatwg/html#3959