summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFeng Yu <f3n67u@gmail.com>2021-08-02 17:19:21 +0800
committerGitHub <noreply@github.com>2021-08-02 02:19:21 -0700
commitf87aa44d94240327fb4ab1dc756d70f71247edb4 (patch)
tree6ec2bef85c980fe5f5102bc36f83c3bbe69bc91c
parentecb4c9492f83b4d4a13fa098aeea2cbf1d03aad8 (diff)
fix(extensions/fetch): Add Origin header to outgoing requests for fetch (#11557)
-rw-r--r--cli/tests/unit/fetch_test.ts4
-rw-r--r--extensions/fetch/26_fetch.js13
-rw-r--r--tools/wpt/expectation.json21
3 files changed, 18 insertions, 20 deletions
diff --git a/cli/tests/unit/fetch_test.ts b/cli/tests/unit/fetch_test.ts
index 45ab2d12c..1b307b98d 100644
--- a/cli/tests/unit/fetch_test.ts
+++ b/cli/tests/unit/fetch_test.ts
@@ -677,6 +677,7 @@ unitTest(
"POST /blah HTTP/1.1\r\n",
"hello: World\r\n",
"foo: Bar\r\n",
+ "origin: http://js-unit-tests\r\n",
"accept: */*\r\n",
`user-agent: Deno/${Deno.version.deno}\r\n`,
"accept-encoding: gzip, br\r\n",
@@ -712,6 +713,7 @@ unitTest(
"hello: World\r\n",
"foo: Bar\r\n",
"content-type: text/plain;charset=UTF-8\r\n",
+ "origin: http://js-unit-tests\r\n",
"accept: */*\r\n",
`user-agent: Deno/${Deno.version.deno}\r\n`,
"accept-encoding: gzip, br\r\n",
@@ -749,6 +751,7 @@ unitTest(
"POST /blah HTTP/1.1\r\n",
"hello: World\r\n",
"foo: Bar\r\n",
+ "origin: http://js-unit-tests\r\n",
"accept: */*\r\n",
`user-agent: Deno/${Deno.version.deno}\r\n`,
"accept-encoding: gzip, br\r\n",
@@ -1128,6 +1131,7 @@ unitTest(
"POST /blah HTTP/1.1\r\n",
"hello: World\r\n",
"foo: Bar\r\n",
+ "origin: http://js-unit-tests\r\n",
"accept: */*\r\n",
`user-agent: Deno/${Deno.version.deno}\r\n`,
"accept-encoding: gzip, br\r\n",
diff --git a/extensions/fetch/26_fetch.js b/extensions/fetch/26_fetch.js
index f7166001e..f6cfced14 100644
--- a/extensions/fetch/26_fetch.js
+++ b/extensions/fetch/26_fetch.js
@@ -40,6 +40,8 @@
TypeError,
Uint8Array,
} = window.__bootstrap.primordials;
+ const { getLocationHref } = window.__bootstrap.location;
+ const { URL } = window.__bootstrap.url;
const REQUEST_BODY_HEADER_NAMES = [
"content-encoding",
@@ -429,6 +431,17 @@
}
requestObject.signal[abortSignal.add](onabort);
+ const baseURL = getLocationHref();
+ if (
+ baseURL &&
+ (requestObject.method !== "GET" && requestObject.method !== "HEAD")
+ ) {
+ ArrayPrototypePush(request.headerList, [
+ "origin",
+ new URL(baseURL).origin,
+ ]);
+ }
+
if (!requestObject.headers.has("accept")) {
ArrayPrototypePush(request.headerList, ["accept", "*/*"]);
}
diff --git a/tools/wpt/expectation.json b/tools/wpt/expectation.json
index dc33d70de..b09cbf34c 100644
--- a/tools/wpt/expectation.json
+++ b/tools/wpt/expectation.json
@@ -2646,26 +2646,7 @@
"request-headers-nonascii.any.html": true,
"request-headers.any.html": [
"Fetch with PUT without body",
- "Fetch with PUT with body",
- "Fetch with POST without body",
- "Fetch with POST with text body",
- "Fetch with POST with FormData body",
- "Fetch with POST with URLSearchParams body",
- "Fetch with POST with Blob body",
- "Fetch with POST with ArrayBuffer body",
- "Fetch with POST with Uint8Array body",
- "Fetch with POST with Int8Array body",
- "Fetch with POST with Float32Array body",
- "Fetch with POST with Float64Array body",
- "Fetch with POST with DataView body",
- "Fetch with POST with Blob body with mime type",
- "Fetch with Chicken",
- "Fetch with Chicken with body",
- "Fetch with POST and mode \"same-origin\" needs an Origin header",
- "Fetch with POST and mode \"no-cors\" needs an Origin header",
- "Fetch with PUT and mode \"same-origin\" needs an Origin header",
- "Fetch with TacO and mode \"same-origin\" needs an Origin header",
- "Fetch with TacO and mode \"cors\" needs an Origin header"
+ "Fetch with POST without body"
],
"text-utf8.any.html": true,
"accept-header.any.html": [