<!DOCTYPE html>
<title>Test simultaneous errors on workers.</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
promise_test(t => {
    var workers = 4;
    var promises = [];

    for (i = 0; i < workers; ++i) {
        var worker = new Worker('support/throw-on-message-Worker.js');
        promises.push(new Promise(function(resolve, reject) {
            var error = 0;
            worker.onmessage = function(event) {
                if (event.data === 'second')
                    resolve(error);
                else if (event.data === 'error')
                    ++error;
            }
        }));
        worker.postMessage('first');
        worker.postMessage('second');
    }

    return Promise.all(promises).then(e => {
        var sum = 0;
        for (var key in e) {
            sum += e[key]
        }
        assert_equals(sum, workers);
    });
});
</script>
