diff --git a/src/browser/tests/net/request.html b/src/browser/tests/net/request.html
index 955bc58bf..abcb0a795 100644
--- a/src/browser/tests/net/request.html
+++ b/src/browser/tests/net/request.html
@@ -294,6 +294,39 @@
let rejected5 = false;
try { await req1.formData(); } catch (e) { rejected5 = e instanceof TypeError; }
+ // A missing Content-Type rejects (never throws synchronously) with a
+ // TypeError.
+ let rejected6 = false;
+ const p6 = new Request('https://example.com', { method: 'POST' }).formData();
+ const promised6 = p6 instanceof Promise;
+ try { await p6; } catch (e) { rejected6 = e instanceof TypeError; }
+
+ // A null body with a form Content-Type acts as an empty byte sequence and
+ // resolves with an empty FormData.
+ const req7 = new Request('https://example.com', {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
+ });
+ const fd7 = await req7.formData();
+
+ // A multipart Content-Type without a boundary rejects with a TypeError.
+ let rejected8 = false;
+ const req8 = new Request('https://example.com', {
+ method: 'POST',
+ body: 'x',
+ headers: { 'Content-Type': 'multipart/form-data' },
+ });
+ try { await req8.formData(); } catch (e) { rejected8 = e instanceof TypeError; }
+
+ // A part with an unquoted RFC 5987 filename* parameter parses; the
+ // parameter itself is skipped.
+ const req9 = new Request('https://example.com', {
+ method: 'POST',
+ body: '--B\r\nContent-Disposition: form-data; filename*=UTF-8\'\'a.jpg; name="n"\r\n\r\nv\r\n--B--\r\n',
+ headers: { 'Content-Type': 'multipart/form-data; boundary=B' },
+ });
+ const fd9 = await req9.formData();
+
state.resolve();
await state.done(() => {
testing.expectEqual(true, fd1 instanceof FormData);
@@ -312,6 +345,13 @@
testing.expectEqual(true, rejected4);
testing.expectEqual(true, rejected5);
+
+ testing.expectEqual(true, promised6);
+ testing.expectEqual(true, rejected6);
+ testing.expectEqual(true, fd7 instanceof FormData);
+ testing.expectEqual(0, [...fd7].length);
+ testing.expectEqual(true, rejected8);
+ testing.expectEqual('v', fd9.get('n'));
});
diff --git a/src/browser/tests/net/response.html b/src/browser/tests/net/response.html
index 082f1741d..0a7ea102c 100644
--- a/src/browser/tests/net/response.html
+++ b/src/browser/tests/net/response.html
@@ -116,6 +116,13 @@
let rejected5 = false;
try { await res1.formData(); } catch (e) { rejected5 = e instanceof TypeError; }
+ // A bodyless Response has no Content-Type: formData() rejects (never
+ // throws synchronously) with a TypeError.
+ let rejected6 = false;
+ const p6 = new Response().formData();
+ const promised6 = p6 instanceof Promise;
+ try { await p6; } catch (e) { rejected6 = e instanceof TypeError; }
+
state.resolve();
await state.done(() => {
testing.expectEqual(true, fd1 instanceof FormData);
@@ -134,6 +141,9 @@
testing.expectEqual(true, rejected4);
testing.expectEqual(true, rejected5);
+
+ testing.expectEqual(true, promised6);
+ testing.expectEqual(true, rejected6);
});