<!--
try {
  var url = decodeURIComponent(location.hash.substr(1))
  var source = new EventSource(url)
  source.onerror = function(e) {
    postMessage([true, this.readyState, 'data' in e])
    this.close();
  }
} catch(e) {
  postMessage([false, String(e)])
}
/*-->
<!DOCTYPE html>
<html>
  <head>
    <title>dedicated worker - EventSource: constructor (act as if there is a network error)</title>
    <meta name=timeout content=long>
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
  </head>
  <body>
    <div id="log"></div>
    <script>
      function fetchFail(url) {
        var test = async_test(document.title + " (" + url + ")", { timeout: 20000 })
        test.step(function() {
          var worker = new Worker('#'+encodeURIComponent(url))
          worker.onmessage = function(e) {
            test.step(function() {
              assert_true(e.data[0], e.data[1])
              assert_equals(e.data[1], EventSource.CLOSED, 'source.readyState')
              assert_false(e.data[2], "'data' in e");
            })
            test.done()
          }
        })
      }
      fetchFail("http://example.not/")
      fetchFail("https://example.not/test")
      fetchFail("ftp://example.not/")
      fetchFail("about:blank")
      fetchFail("mailto:whatwg@awesome.example")
      fetchFail("javascript:alert('FAIL')")
    </script>
    <!-- This tests "fails the connection" as well as making sure a simple
         event is dispatched and not a MessageEvent -->
  </body>
</html>
<!--*/ //-->
