8cbcae37db
In the implementation of WebAssembly.compileStreaming and WebAssembly.instantiateStreaming, we did not handle the case where the input, which is a Promise, gets rejected. When this Promise got rejected, the Promise returned by compileStreaming remained pending forever. With this CL, the rejection object of the input Promise gets forwarded to the result Promise. I also extended the --wasm-test-streaming flag to provide WebAssembly.compileStreaming and WebAssembly.instantiateStreaming in d8. The difference to the Chrome versions of these function is that d8 does not know about Response objects. That's why in d8 compileStreaming and instantiateStreaming expect a Promise to an ArrayBuffer or a TypedArray and not to a Response object. Cq-Include-Trybots: luci.chromium.try:linux-blink-rel Bug: chromium:943487 Change-Id: I77f789e9ae5d50ae9c9bc92bf27dbfe338fe0f13 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1535817 Reviewed-by: Ben Titzer <titzer@chromium.org> Commit-Queue: Andreas Haas <ahaas@chromium.org> Cr-Commit-Position: refs/heads/master@{#60427}
45 lines
1.6 KiB
JavaScript
45 lines
1.6 KiB
JavaScript
// Copyright 2019 the V8 project authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
// Flags: --wasm-test-streaming
|
|
|
|
load("test/mjsunit/wasm/wasm-module-builder.js");
|
|
|
|
(function TestCompileStreaming() {
|
|
print(arguments.callee.name);
|
|
let builder = new WasmModuleBuilder();
|
|
builder.addFunction("main", kSig_i_i)
|
|
.addBody([kExprGetLocal, 0])
|
|
.exportAs("main");
|
|
let bytes = builder.toBuffer();
|
|
assertPromiseResult(WebAssembly.compileStreaming(Promise.resolve(bytes)).then(
|
|
module => WebAssembly.instantiate(module)).then(
|
|
instance => assertEquals(5, instance.exports.main(5))));
|
|
})();
|
|
|
|
(function TestInstantiateStreaming() {
|
|
print(arguments.callee.name);
|
|
let builder = new WasmModuleBuilder();
|
|
builder.addFunction("main", kSig_i_i)
|
|
.addBody([kExprGetLocal, 0])
|
|
.exportAs("main");
|
|
let bytes = builder.toBuffer();
|
|
assertPromiseResult(WebAssembly.instantiateStreaming(Promise.resolve(bytes)).then(
|
|
({module, instance}) => assertEquals(5, instance.exports.main(5))));
|
|
})();
|
|
|
|
(function TestCompileStreamingRejectedInputPromise() {
|
|
print(arguments.callee.name);
|
|
assertPromiseResult(WebAssembly.compileStreaming(Promise.reject("myError")),
|
|
assertUnreachable,
|
|
error => assertEquals(error, "myError"));
|
|
})();
|
|
|
|
(function TestInstantiateStreamingRejectedInputPromise() {
|
|
print(arguments.callee.name);
|
|
assertPromiseResult(WebAssembly.instantiateStreaming(Promise.reject("myError")),
|
|
assertUnreachable,
|
|
error => assertEquals(error, "myError"));
|
|
})();
|