<!--
onconnect = function (e) {
  setTimeout(function() { e.ports[0].postMessage(''); }, 250);
  y(); // will "report the error"
  // onerror is null so it'll be "not handled", and the error should be
  // reported to the user, although we don't test that here
  // make sure we don't fire an error event on the message port or the
  // SharedWorker object
}


/*
-->
<!doctype html>
<title>shared worker, no error event on worker or port</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id=log></div>
<script>
setup({allow_uncaught_exception:true});
async_test(function() {
  window.onerror = this.step_func(function(a) {
    assert_unreached('window.onerror invoked: ' + a);
  });
  var worker = new SharedWorker('#', '');
  worker.addEventListener('error', this.step_func(function(e) {
    assert_unreached('error on worker');
  }), false);
  worker.port.addEventListener('error', this.step_func(function(e) {
    assert_unreached('error on port');
  }), false);
  worker.port.onmessage = this.step_func_done(function(e) {
    assert_equals(e.data, '');
  });
});
</script>
<!--
*/
//-->
