summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorawait-ovo <13152410380@163.com>2023-08-15 23:04:36 +0800
committerGitHub <noreply@github.com>2023-08-15 17:04:36 +0200
commit41cad2179fb36c2371ab84ce587d3460af64b5fb (patch)
treec4d4f05e660cdcd9cbb74eb10ca37515241ca913
parentddbb5fdfb034517f200e298c1a5de8aa03b5e5e5 (diff)
fix(runtime): navigator.userAgent in web worker (#20129)
Fixes https://github.com/denoland/deno/issues/20079 --------- Co-authored-by: Bartek IwaƄczuk <biwanczuk@gmail.com>
-rw-r--r--cli/tests/testdata/workers/test.ts20
-rw-r--r--cli/tests/testdata/workers/worker_navigator.ts11
-rw-r--r--runtime/js/98_global_scope.js36
-rw-r--r--runtime/js/99_main.js3
-rw-r--r--tools/wpt/expectation.json9
5 files changed, 63 insertions, 16 deletions
diff --git a/cli/tests/testdata/workers/test.ts b/cli/tests/testdata/workers/test.ts
index 506bb4c31..90cc6a649 100644
--- a/cli/tests/testdata/workers/test.ts
+++ b/cli/tests/testdata/workers/test.ts
@@ -120,6 +120,26 @@ Deno.test({
});
Deno.test({
+ name: "worker navigator",
+ fn: async function () {
+ const workerOptions: WorkerOptions = { type: "module" };
+ const w = new Worker(
+ import.meta.resolve("./worker_navigator.ts"),
+ workerOptions,
+ );
+
+ const promise = deferred();
+ w.onmessage = (e) => {
+ promise.resolve(e.data);
+ };
+
+ w.postMessage("Hello, world!");
+ assertEquals(await promise, "string, object, string, number");
+ w.terminate();
+ },
+});
+
+Deno.test({
name: "worker fetch API",
fn: async function () {
const fetchingWorker = new Worker(
diff --git a/cli/tests/testdata/workers/worker_navigator.ts b/cli/tests/testdata/workers/worker_navigator.ts
new file mode 100644
index 000000000..bd364a8f9
--- /dev/null
+++ b/cli/tests/testdata/workers/worker_navigator.ts
@@ -0,0 +1,11 @@
+onmessage = function () {
+ postMessage(
+ [
+ typeof navigator.language,
+ typeof navigator.languages,
+ typeof navigator.userAgent,
+ typeof navigator.hardwareConcurrency,
+ ].join(", "),
+ );
+ close();
+};
diff --git a/runtime/js/98_global_scope.js b/runtime/js/98_global_scope.js
index 1084f5c24..c916ef819 100644
--- a/runtime/js/98_global_scope.js
+++ b/runtime/js/98_global_scope.js
@@ -225,21 +225,29 @@ ObjectDefineProperties(WorkerNavigator.prototype, {
webidl.assertBranded(this, WorkerNavigatorPrototype);
return numCpus;
},
- language: {
- configurable: true,
- enumerable: true,
- get() {
- webidl.assertBranded(this, WorkerNavigatorPrototype);
- return language;
- },
+ },
+ userAgent: {
+ configurable: true,
+ enumerable: true,
+ get() {
+ webidl.assertBranded(this, WorkerNavigatorPrototype);
+ return userAgent;
+ },
+ },
+ language: {
+ configurable: true,
+ enumerable: true,
+ get() {
+ webidl.assertBranded(this, WorkerNavigatorPrototype);
+ return language;
},
- languages: {
- configurable: true,
- enumerable: true,
- get() {
- webidl.assertBranded(this, WorkerNavigatorPrototype);
- return [language];
- },
+ },
+ languages: {
+ configurable: true,
+ enumerable: true,
+ get() {
+ webidl.assertBranded(this, WorkerNavigatorPrototype);
+ return [language];
},
},
});
diff --git a/runtime/js/99_main.js b/runtime/js/99_main.js
index dc6839646..c8fdabc25 100644
--- a/runtime/js/99_main.js
+++ b/runtime/js/99_main.js
@@ -567,7 +567,7 @@ function bootstrapWorkerRuntime(
10: pid,
11: target,
12: v8Version,
- // 13: userAgent,
+ 13: userAgent,
// 14: inspectFlag,
15: enableTestingFeaturesFlag,
} = runtimeOptions;
@@ -633,6 +633,7 @@ function bootstrapWorkerRuntime(
location.setLocationHref(location_);
setNumCpus(cpuCount);
+ setUserAgent(userAgent);
setLanguage(locale);
globalThis.pollForMessages = pollForMessages;
diff --git a/tools/wpt/expectation.json b/tools/wpt/expectation.json
index 861530841..326b7f55d 100644
--- a/tools/wpt/expectation.json
+++ b/tools/wpt/expectation.json
@@ -6177,7 +6177,14 @@
"taintEnabled",
"oscpu"
],
- "navigator.any.worker.html": false,
+ "navigator.any.worker.html": [
+ "appCodeName",
+ "appName",
+ "appVersion",
+ "platform",
+ "product",
+ "userAgent value"
+ ],
"per-global.window.html": false
}
}