blob: 744f2d0a9f6eecfaef0be22121dd6519cdfcc7ca [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<script src="../../resources/js-test.js"></script>
<script src="resources/common.js"></script>
</head>
<body>
<p id="description"></p>
<div id="console"></div>
<script>
description("Tests concurrent calls to many crypto operations happening on workers as well as main thread.");
// This test runs web crypto operations on 11 "threads".
// * The main thread (this page)
// * 10 web workers
//
// The code for each thread is in "resources/subtle-crypto-concurrent.js"
// and runs multiple parallel crypto operations.
//
// The intent of this test is to try an exercise any races in the WebCrypto
// code, and make sure operations work from workers.
jsTestIsAsync = true;
function createPromiseForThread(thread, hookOnError) {
return new Promise(function(resolve, reject) {
thread.onmessage = function(event)
{
if (event.data == "TEST_FINISHED") {
debug("Thread completed successfully");
resolve();
resolve = null;
} else {
debug("Unexpected message: " + event.data);
reject();
}
};
if (hookOnError) {
thread.onerror = function(event)
{
debug("Thread failed: " + event.data);
reject();
};
}
});
}
function createPromiseForWorker()
{
var worker = new Worker("resources/subtle-crypto-concurrent.js");
return createPromiseForThread(worker, true);
}
function createPromiseForMainThread()
{
return createPromiseForThread(self, false);
}
var allPromises = [];
for (var i = 0; i < 10; ++i)
allPromises.push(createPromiseForWorker());
// The worker script is included at the end of this page too, so it
// performs the same work as the workers.
allPromises.push(createPromiseForMainThread(self));
Promise.all(allPromises).then(finishJSTest, failAndFinishJSTest);
</script>
<script src="resources/subtle-crypto-concurrent.js"></script>
</body>
</html>