<!doctype html><!-- webkit-test-runner [ dumpJSConsoleLogInStdErr=true ] -->
<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>
if (window.testRunner && testRunner.setShouldDecideResponsePolicyAfterDelay)
    testRunner.setShouldDecideResponsePolicyAfterDelay(true);

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>
