<!--
onconnect = function(e) {
try {
  var port = e.ports[0]
  var source = new EventSource("../resources/message.py")
  source.onopen = function(e) {
    port.postMessage([true, source.readyState, 'data' in e, e.bubbles, e.cancelable])
    this.close()
  }
} catch(e) {
  port.postMessage([false, String(e)])
}
}
/*-->
<!DOCTYPE html>
<html>
  <head>
    <title>shared 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 SharedWorker('#')
        worker.port.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>
<!--*/ //-->
