Skip to content

Commit 72f0183

Browse files
committed
fix
1 parent 9ff0ddc commit 72f0183

File tree

3 files changed

+16
-5
lines changed

3 files changed

+16
-5
lines changed

src/libraries/System.Net.Http/src/System/Net/Http/BrowserHttpHandler/BrowserHttpHandler.cs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -251,9 +251,16 @@ public async Task<HttpResponseMessage> CallFetch()
251251
{
252252
fetchPromise = BrowserHttpInterop.FetchStream(_jsController, uri, _headerNames, _headerValues, _optionNames, _optionValues);
253253
writeStream = new BrowserHttpWriteStream(this);
254-
await _request.Content.CopyToAsync(writeStream, _cancellationToken).ConfigureAwait(false);
255-
var closePromise = BrowserHttpInterop.TransformStreamClose(_jsController);
256-
await BrowserHttpInterop.CancellationHelper(closePromise, _cancellationToken, _jsController).ConfigureAwait(false);
254+
try
255+
{
256+
await _request.Content.CopyToAsync(writeStream, _cancellationToken).ConfigureAwait(false);
257+
var closePromise = BrowserHttpInterop.TransformStreamClose(_jsController);
258+
await BrowserHttpInterop.CancellationHelper(closePromise, _cancellationToken, _jsController).ConfigureAwait(false);
259+
}
260+
catch(JSException jse) when (jse.Message.Contains("BrowserHttpWriteStream.Rejected", StringComparison.Ordinal))
261+
{
262+
// any error from pushing bytes will also appear in the fetch promise result
263+
}
257264
}
258265
else
259266
{

src/libraries/System.Net.Http/src/System/Net/Http/BrowserHttpHandler/BrowserHttpInterop.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,10 @@ public static async Task CancellationHelper(Task promise, CancellationToken canc
160160
{
161161
throw Http.CancellationHelper.CreateOperationCanceledException(jse, CancellationToken.None);
162162
}
163+
if (jse.Message.Contains("BrowserHttpWriteStream.Rejected", StringComparison.Ordinal))
164+
{
165+
throw; // do not translate
166+
}
163167
Http.CancellationHelper.ThrowIfCancellationRequested(jse, cancellationToken);
164168
throw new HttpRequestException(jse.Message, jse);
165169
}

src/mono/browser/runtime/http.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ export function http_wasm_transform_stream_write (controller: HttpController, bu
115115
await Promise.race([controller.streamWriter.ready, controller.responsePromise]);
116116
await Promise.race([controller.streamWriter.write(copy), controller.responsePromise]);
117117
} catch (ex) {
118-
// any error here will also appear in the fetch promise result
118+
throw new Error("BrowserHttpWriteStream.Rejected");
119119
}
120120
});
121121
}
@@ -130,7 +130,7 @@ export function http_wasm_transform_stream_close (controller: HttpController): C
130130
await Promise.race([controller.streamWriter.ready, controller.responsePromise]);
131131
await Promise.race([controller.streamWriter.close(), controller.responsePromise]);
132132
} catch (ex) {
133-
// any error here will also appear in the fetch promise result
133+
throw new Error("BrowserHttpWriteStream.Rejected");
134134
}
135135
});
136136
}

0 commit comments

Comments
 (0)