From e9af95ec0fab71e03ec96041a0d7e7863b572425 Mon Sep 17 00:00:00 2001 From: yvt Date: Tue, 13 Jul 2021 09:31:15 +0900 Subject: [PATCH] fix(script): Set `DedicatedWorkerGlobalScope`'s origin correctly > 10.2.4 Processing model > > When a user agent is to run a worker for a script with `Worker` or > `SharedWorker` object `worker`, [...] it must run the following steps. > > [...] > > 8. Set up a worker environment settings object with `realm execution > context` and `outside settings`, and let `inside settings` be the > result. > To **set up a worker environment settings object**, given a JavaScript > execution context `execution context` and environment settings object > `outside settings`: > > 1. Let `inherited origin` be `outside settings`'s origin. > > 2. Let `realm` be the value of `execution context`'s Realm component. > > 3. Let `worker global scope` be `realm`'s global object. > > 4. Let `settings object` be a new environment settings object whose > algorithms are defined as follows: > > **The origin** Return a unique opaque origin if `worker global > scope`'s url's scheme is "data", and `inherited origin` otherwise. --- .../script/dom/dedicatedworkerglobalscope.rs | 15 +++++++++++++-- ...cated-worker-in-data-url-context.window.js.ini | 4 ---- .../fetch/api/cors/data-url-worker.html.ini | 4 ---- .../Worker_Self_Origin.html.ini | 3 --- ...cated-worker-in-data-url-context.window.js.ini | 4 ---- 5 files changed, 13 insertions(+), 17 deletions(-) delete mode 100644 tests/wpt/metadata-layout-2020/workers/dedicated-worker-in-data-url-context.window.js.ini delete mode 100644 tests/wpt/metadata/fetch/api/cors/data-url-worker.html.ini delete mode 100644 tests/wpt/metadata/workers/dedicated-worker-in-data-url-context.window.js.ini diff --git a/components/script/dom/dedicatedworkerglobalscope.rs b/components/script/dom/dedicatedworkerglobalscope.rs index 1bc71fad4d5..d70353958e5 100644 --- a/components/script/dom/dedicatedworkerglobalscope.rs +++ b/components/script/dom/dedicatedworkerglobalscope.rs @@ -53,7 +53,7 @@ use net_traits::IpcSend; use parking_lot::Mutex; use script_traits::{WorkerGlobalScopeInit, WorkerScriptLoadOrigin}; use servo_rand::random; -use servo_url::ServoUrl; +use servo_url::{ImmutableOrigin, ServoUrl}; use std::mem::replace; use std::sync::atomic::AtomicBool; use std::sync::Arc; @@ -310,7 +310,7 @@ impl DedicatedWorkerGlobalScope { #[allow(unsafe_code)] // https://html.spec.whatwg.org/multipage/#run-a-worker pub fn run_worker_scope( - init: WorkerGlobalScopeInit, + mut init: WorkerGlobalScopeInit, worker_url: ServoUrl, from_devtools_receiver: IpcReceiver, worker: TrustedWorkerAddress, @@ -387,6 +387,17 @@ impl DedicatedWorkerGlobalScope { devtools_mpsc_chan, ); + // Step 8 "Set up a worker environment settings object [...]" + // + // + // + // > The origin: Return a unique opaque origin if `worker global + // > scope`'s url's scheme is "data", and `inherited origin` + // > otherwise. + if worker_url.scheme() == "data" { + init.origin = ImmutableOrigin::new_opaque(); + } + let global = DedicatedWorkerGlobalScope::new( init, DOMString::from_string(worker_name), diff --git a/tests/wpt/metadata-layout-2020/workers/dedicated-worker-in-data-url-context.window.js.ini b/tests/wpt/metadata-layout-2020/workers/dedicated-worker-in-data-url-context.window.js.ini deleted file mode 100644 index e414df35fd6..00000000000 --- a/tests/wpt/metadata-layout-2020/workers/dedicated-worker-in-data-url-context.window.js.ini +++ /dev/null @@ -1,4 +0,0 @@ -[dedicated-worker-in-data-url-context.window.html] - [Create a dedicated worker in a data url dedicated worker] - expected: FAIL - diff --git a/tests/wpt/metadata/fetch/api/cors/data-url-worker.html.ini b/tests/wpt/metadata/fetch/api/cors/data-url-worker.html.ini deleted file mode 100644 index 8ae852672bc..00000000000 --- a/tests/wpt/metadata/fetch/api/cors/data-url-worker.html.ini +++ /dev/null @@ -1,4 +0,0 @@ -[data-url-worker.html] - [fetching "top.txt" without ACAO should be rejected.] - expected: FAIL - diff --git a/tests/wpt/metadata/html/webappapis/the-windoworworkerglobalscope-mixin/Worker_Self_Origin.html.ini b/tests/wpt/metadata/html/webappapis/the-windoworworkerglobalscope-mixin/Worker_Self_Origin.html.ini index ec7d7991656..269f8310ff4 100644 --- a/tests/wpt/metadata/html/webappapis/the-windoworworkerglobalscope-mixin/Worker_Self_Origin.html.ini +++ b/tests/wpt/metadata/html/webappapis/the-windoworworkerglobalscope-mixin/Worker_Self_Origin.html.ini @@ -3,9 +3,6 @@ [Same Origin SharedWorker] expected: FAIL - [Data Url Worker] - expected: FAIL - [Data Url SharedWorker] expected: FAIL diff --git a/tests/wpt/metadata/workers/dedicated-worker-in-data-url-context.window.js.ini b/tests/wpt/metadata/workers/dedicated-worker-in-data-url-context.window.js.ini deleted file mode 100644 index e414df35fd6..00000000000 --- a/tests/wpt/metadata/workers/dedicated-worker-in-data-url-context.window.js.ini +++ /dev/null @@ -1,4 +0,0 @@ -[dedicated-worker-in-data-url-context.window.html] - [Create a dedicated worker in a data url dedicated worker] - expected: FAIL -