<!--
function x() {
  y();
}
x();
/*
-->
<!doctype html>
<title>onerror, "not handled" with only window.onerror defined</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() {
  var worker = new Worker('#');
  window.onerror = this.step_func(function(a, b, c, d) {
    assert_equals(typeof a, 'string', 'first argument');
    assert_equals(b, document.URL+'#', 'second argument');
    assert_equals(typeof c, 'number', 'third argument');
    assert_equals(typeof d, 'number', 'fourth argument');
    this.done();
    return true; // "handled"
  });
});
</script>
<!--
*/
//-->
