diff options
author | await-ovo <13152410380@163.com> | 2023-08-15 23:04:36 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-08-15 17:04:36 +0200 |
commit | 41cad2179fb36c2371ab84ce587d3460af64b5fb (patch) | |
tree | c4d4f05e660cdcd9cbb74eb10ca37515241ca913 | |
parent | ddbb5fdfb034517f200e298c1a5de8aa03b5e5e5 (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.ts | 20 | ||||
-rw-r--r-- | cli/tests/testdata/workers/worker_navigator.ts | 11 | ||||
-rw-r--r-- | runtime/js/98_global_scope.js | 36 | ||||
-rw-r--r-- | runtime/js/99_main.js | 3 | ||||
-rw-r--r-- | tools/wpt/expectation.json | 9 |
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 } } |