<!--
try {
  var source = new EventSource("../resources/message.py")
  source.onopen = function(e) {
    postMessage([true, source.readyState, 'data' in e, e.bubbles, e.cancelable])
    this.close()
  }
} catch(e) {
  postMessage([false, String(e)])
}
/*-->
<!DOCTYPE html>
<html>
  <head>
    <title>dedicated worker - EventSource: onopen (announcing the connection)</title>
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
  </head>
  <body>
    <div id="log"></div>
    <script>
      var test = async_test()
      test.step(function() {
        var worker = new Worker('#')
        worker.onmessage = function(e) {
          test.step(function() {
            assert_true(e.data[0], e.data[1])
            assert_equals(e.data[1], EventSource.OPEN, 'source.readyState')
            assert_false(e.data[2], "'data' in e")
            assert_false(e.data[3], 'e.bubbles')
            assert_false(e.data[4], 'e.calcelable')
          })
          test.done()
        }
      })
    </script>
  </body>
</html>
<!--*/ //-->
