| Index: LayoutTests/crypto/worker-subtle-crypto-concurrent.html
|
| diff --git a/LayoutTests/crypto/worker-subtle-crypto-concurrent.html b/LayoutTests/crypto/worker-subtle-crypto-concurrent.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..1611bab85f9b90f225693dafbeb7cf8feeb5204b
|
| --- /dev/null
|
| +++ b/LayoutTests/crypto/worker-subtle-crypto-concurrent.html
|
| @@ -0,0 +1,73 @@
|
| +<!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>
|
|
|