Skip to content

Commit

Permalink
HTML: set location.protocol to non-broken-non-functioning schemes
Browse files Browse the repository at this point in the history
See whatwg/url#61 for context.

#4412 tests broken
schemes.
  • Loading branch information
annevk committed Jan 5, 2017
1 parent 6ab8b20 commit 45869bb
Show file tree
Hide file tree
Showing 2 changed files with 94 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
<!doctype html>
<title>Set location.protocol from an HTTP URL</title>
<!-- In particular, valid non-broken schemes that are nevertheless not going to work -->
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<div id=log></div>
<iframe src=/common/blank.html></iframe>
<iframe src=/common/blank.html></iframe>
<iframe src=/common/blank.html></iframe>
<iframe src=/common/blank.html></iframe>
<iframe src=/common/blank.html></iframe>
<iframe src=/common/blank.html></iframe>
<script>
self.onload = () => {
[
'x',
'data',
'file',
'ftp',
'gopher',
'http+x'
].forEach((val, index) => {
async_test((t) => {
self[index].location.protocol = val
t.step_timeout(() => {
assert_equals(self[index].location.protocol, location.protocol)
assert_equals(self[index].location.host, location.host)
assert_equals(self[index].location.port, location.port)
t.done()
}, 500)
}, "Set location.protocol to " + val)
})
}
</script>
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
<!doctype html>
<title>Set location.protocol to a non-broken-non-functioning scheme</title>
<!-- In particular, valid non-broken schemes that are nevertheless not going to work -->
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<div id=log></div>
<script>
self.onload = () => {
[
'x',
'data',
// 'mailto' opens an email client in Firefox...
'file',
'ftp',
'gopher',
'http+x'
].forEach((val) => {
async_test((t) => {
// HTTP URL <iframe>
const frame = document.createElement("iframe")
frame.src = "/common/blank.html"
frame.onload = t.step_func(() => {
frame.contentWindow.location.protocol = val
t.step_timeout(() => {
assert_equals(frame.contentWindow.location.protocol, location.protocol)
assert_equals(frame.contentWindow.location.host, location.host)
assert_equals(frame.contentWindow.location.port, location.port)
t.done()
}, 500)
})
document.body.appendChild(frame)
}, "Set HTTP URL frame location.protocol to " + val)

async_test((t) => {
// data URL <iframe>
const dataFrame = document.createElement("iframe")
const channel = new MessageChannel()
dataFrame.src = `data:text/html,<script>
onmessage = (e) => {
let result = false;
try {
location.protocol = e.data
} catch(e) {
result = true
}
setTimeout(() => e.ports[0].postMessage([result, location.protocol]), 100)
}
<\/script>`
dataFrame.onload = t.step_func(() => {
dataFrame.contentWindow.postMessage(val, "*", [channel.port2])
})
channel.port1.onmessage = t.step_func_done((e) => {
assert_false(e.data[0])
assert_equals(e.data[1], "data:")
})
document.body.appendChild(dataFrame)
}, "Set data URL frame location.protocol to " + val)
})
}
</script>

0 comments on commit 45869bb

Please sign in to comment.