Created
May 14, 2025 19:30
-
-
Save nicolo-ribaudo/2e1ac26f562d18578d19e268006e6559 to your computer and use it in GitHub Desktop.
chrome worker import map
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
From bc1e34f1a3be4cd8ab92f35c67c9ac7306da934d Mon Sep 17 00:00:00 2001 | |
From: =?UTF-8?q?Nicol=C3=B2=20Ribaudo?= <[email protected]> | |
Date: Sun, 16 Feb 2025 01:17:14 +0100 | |
Subject: [PATCH 1/2] Define `importMap` option in webidl | |
--- | |
.../renderer/bindings/generated_in_core.gni | 4 +++ | |
.../blink/renderer/core/workers/worker.idl | 2 +- | |
.../renderer/core/workers/worker_options.idl | 5 ++++ | |
.../constructors/Worker/importMap-option.html | 29 +++++++++++++++++++ | |
4 files changed, 39 insertions(+), 1 deletion(-) | |
create mode 100644 third_party/blink/web_tests/external/wpt/workers/constructors/Worker/importMap-option.html | |
diff --git a/third_party/blink/renderer/bindings/generated_in_core.gni b/third_party/blink/renderer/bindings/generated_in_core.gni | |
index 3f2171dcaaff5..caf4e2ef4aa3d 100644 | |
--- a/third_party/blink/renderer/bindings/generated_in_core.gni | |
+++ b/third_party/blink/renderer/bindings/generated_in_core.gni | |
@@ -160,6 +160,8 @@ generated_dictionary_sources_in_core = [ | |
"$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_custom_event_init.h", | |
"$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_custom_layout_constraints_options.cc", | |
"$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_custom_layout_constraints_options.h", | |
+ "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_dedicated_worker_options.cc", | |
+ "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_dedicated_worker_options.h", | |
"$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_deferred_request_init.cc", | |
"$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_deferred_request_init.h", | |
"$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_document_timeline_options.cc", | |
@@ -667,6 +669,8 @@ generated_enumeration_sources_in_core = [ | |
"$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_url_pattern_component.h", | |
"$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_visibility_state.cc", | |
"$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_visibility_state.h", | |
+ "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_worker_import_map_inheritance.cc", | |
+ "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_worker_import_map_inheritance.h", | |
"$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_worker_type.cc", | |
"$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_worker_type.h", | |
"$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_xml_http_request_response_type.cc", | |
diff --git a/third_party/blink/renderer/core/workers/worker.idl b/third_party/blink/renderer/core/workers/worker.idl | |
index f7c33042177e3..24bf59ee784d4 100644 | |
--- a/third_party/blink/renderer/core/workers/worker.idl | |
+++ b/third_party/blink/renderer/core/workers/worker.idl | |
@@ -32,7 +32,7 @@ | |
Exposed=(Window,DedicatedWorker), | |
ImplementedAs=DedicatedWorker | |
] interface Worker : EventTarget { | |
- [CallWith=ExecutionContext, RaisesException] constructor(ScriptURLString scriptURL, optional WorkerOptions options = {}); | |
+ [CallWith=ExecutionContext, RaisesException] constructor(ScriptURLString scriptURL, optional DedicatedWorkerOptions options = {}); | |
void terminate(); | |
[CallWith=ScriptState, RaisesException] void postMessage(any message, sequence<object> transfer); | |
diff --git a/third_party/blink/renderer/core/workers/worker_options.idl b/third_party/blink/renderer/core/workers/worker_options.idl | |
index 69c1ba949f97d..ff21de947bb6e 100644 | |
--- a/third_party/blink/renderer/core/workers/worker_options.idl | |
+++ b/third_party/blink/renderer/core/workers/worker_options.idl | |
@@ -9,4 +9,9 @@ dictionary WorkerOptions { | |
DOMString name = ""; | |
}; | |
+dictionary DedicatedWorkerOptions : WorkerOptions { | |
+ WorkerImportMapInheritance importMap = "none"; | |
+}; | |
+ | |
enum WorkerType { "classic", "module" }; | |
+enum WorkerImportMapInheritance { "none", "clone" }; | |
diff --git a/third_party/blink/web_tests/external/wpt/workers/constructors/Worker/importMap-option.html b/third_party/blink/web_tests/external/wpt/workers/constructors/Worker/importMap-option.html | |
new file mode 100644 | |
index 0000000000000..e6f967e9fd3f4 | |
--- /dev/null | |
+++ b/third_party/blink/web_tests/external/wpt/workers/constructors/Worker/importMap-option.html | |
@@ -0,0 +1,29 @@ | |
+<!DOCTYPE html> | |
+<title>Test values passed to Worker's importMap option.</title> | |
+<script src="/resources/testharness.js"></script> | |
+<script src="/resources/testharnessreport.js"></script> | |
+<script> | |
+ test(() => { | |
+ new Worker("../../support/Worker-common.js", { | |
+ importMap: "none", | |
+ }); | |
+ }, "Test .importMap: 'none'."); | |
+ | |
+ test(() => { | |
+ new Worker("../../support/Worker-common.js", { | |
+ importMap: "clone", | |
+ }); | |
+ }, "Test .importMap: 'clone'."); | |
+ | |
+ test(() => { | |
+ assert_throws_js( | |
+ TypeError, | |
+ function () { | |
+ new Worker("../../support/Worker-common.js", { | |
+ importMap: "invalid", | |
+ }); | |
+ }, | |
+ "Should throw for invalid values" | |
+ ); | |
+ }, "Test invalid .importMap value."); | |
+</script> | |
-- | |
2.49.0 | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
From 7f00d3b8126cf73107ac4b8269551aa3f477f206 Mon Sep 17 00:00:00 2001 | |
From: =?UTF-8?q?Nicol=C3=B2=20Ribaudo?= <[email protected]> | |
Date: Mon, 10 Mar 2025 18:57:34 +0100 | |
Subject: [PATCH 2/2] wip | |
--- | |
.../blink/renderer/core/script/import_map.cc | 11 +++++++++++ | |
.../blink/renderer/core/script/import_map.h | 2 ++ | |
.../blink/renderer/core/script/modulator.cc | 5 +++++ | |
.../blink/renderer/core/script/modulator.h | 2 ++ | |
.../renderer/core/workers/dedicated_worker.cc | 17 ++++++++++++++--- | |
.../renderer/core/workers/dedicated_worker.h | 10 +++++----- | |
6 files changed, 39 insertions(+), 8 deletions(-) | |
diff --git a/third_party/blink/renderer/core/script/import_map.cc b/third_party/blink/renderer/core/script/import_map.cc | |
index e3c8f1b7ecb9c..4b73ffe778638 100644 | |
--- a/third_party/blink/renderer/core/script/import_map.cc | |
+++ b/third_party/blink/renderer/core/script/import_map.cc | |
@@ -835,4 +835,15 @@ void ImportMap::InitializeScopesVector() { | |
}); | |
} | |
+ | |
+ImportMap* ImportMap::Clone() const { | |
+ SpecifierMap sorted_and_normalized_imports(imports_); | |
+ ScopesMap normalized_scopes_map(scopes_map_); | |
+ IntegrityMap normalized_integrity_map(integrity_); | |
+ return MakeGarbageCollected<ImportMap>( | |
+ std::move(sorted_and_normalized_imports), | |
+ std::move(normalized_scopes_map), | |
+ std::move(normalized_integrity_map)); | |
+} | |
+ | |
} // namespace blink | |
diff --git a/third_party/blink/renderer/core/script/import_map.h b/third_party/blink/renderer/core/script/import_map.h | |
index d77f4ae7fd87c..15615a77d1d77 100644 | |
--- a/third_party/blink/renderer/core/script/import_map.h | |
+++ b/third_party/blink/renderer/core/script/import_map.h | |
@@ -82,6 +82,8 @@ class CORE_EXPORT ImportMap final : public GarbageCollected<ImportMap> { | |
void Trace(Visitor*) const {} | |
+ ImportMap* Clone() const; | |
+ | |
private: | |
using MatchResult = SpecifierMap::const_iterator; | |
diff --git a/third_party/blink/renderer/core/script/modulator.cc b/third_party/blink/renderer/core/script/modulator.cc | |
index 7cb702648bac7..98ea72d0d2fa2 100644 | |
--- a/third_party/blink/renderer/core/script/modulator.cc | |
+++ b/third_party/blink/renderer/core/script/modulator.cc | |
@@ -72,4 +72,9 @@ void Modulator::Trace(Visitor* visitor) const { | |
visitor->Trace(import_map_); | |
} | |
+ | |
+ImportMap* Modulator::CloneImportMap() const { | |
+ return import_map_.Get()->Clone(); | |
+} | |
+ | |
} // namespace blink | |
diff --git a/third_party/blink/renderer/core/script/modulator.h b/third_party/blink/renderer/core/script/modulator.h | |
index ee325168ec6a0..8c8f2a3279ed1 100644 | |
--- a/third_party/blink/renderer/core/script/modulator.h | |
+++ b/third_party/blink/renderer/core/script/modulator.h | |
@@ -192,6 +192,8 @@ class CORE_EXPORT Modulator : public GarbageCollected<Modulator>, | |
const ImportMap* GetImportMapForTest() const { return import_map_.Get(); } | |
+ ImportMap* CloneImportMap() const; | |
+ | |
enum class AcquiringImportMapsState { | |
// The flag is true. | |
kAcquiring, | |
diff --git a/third_party/blink/renderer/core/workers/dedicated_worker.cc b/third_party/blink/renderer/core/workers/dedicated_worker.cc | |
index 592879c725828..94406b495dfde 100644 | |
--- a/third_party/blink/renderer/core/workers/dedicated_worker.cc | |
+++ b/third_party/blink/renderer/core/workers/dedicated_worker.cc | |
@@ -46,6 +46,7 @@ | |
#include "third_party/blink/renderer/core/origin_trials/origin_trial_context.h" | |
#include "third_party/blink/renderer/core/page/page.h" | |
#include "third_party/blink/renderer/core/probe/core_probes.h" | |
+#include "third_party/blink/renderer/core/script/pending_import_map.h" | |
#include "third_party/blink/renderer/core/script/script.h" | |
#include "third_party/blink/renderer/core/script_type_names.h" | |
#include "third_party/blink/renderer/core/workers/custom_event_message.h" | |
@@ -70,7 +71,7 @@ namespace blink { | |
DedicatedWorker* DedicatedWorker::Create(ExecutionContext* context, | |
const String& url, | |
- const WorkerOptions* options, | |
+ const DedicatedWorkerOptions* options, | |
ExceptionState& exception_state) { | |
DCHECK(context->IsContextThread()); | |
UseCounter::Count(context, WebFeature::kWorkerStart); | |
@@ -87,6 +88,16 @@ DedicatedWorker* DedicatedWorker::Create(ExecutionContext* context, | |
return nullptr; | |
} | |
+ ImportMap* import_map = nullptr; | |
+ if (options->importMap() == V8WorkerImportMapInheritance::Enum::kClone) { | |
+ Modulator* modulator = Modulator::From( | |
+ // TODO: To<LocalDOMWindow> -- what about nested workers? | |
+ ToScriptStateForMainWorld(To<LocalDOMWindow>(context)->GetFrame())); | |
+ if (!modulator) | |
+ return nullptr; // TODO: Correct? | |
+ import_map = modulator->CloneImportMap(); | |
+ } | |
+ | |
if (context->IsWorkerGlobalScope()) | |
UseCounter::Count(context, WebFeature::kNestedDedicatedWorker); | |
@@ -99,7 +110,7 @@ DedicatedWorker* DedicatedWorker::Create(ExecutionContext* context, | |
DedicatedWorker::DedicatedWorker(ExecutionContext* context, | |
const KURL& script_request_url, | |
- const WorkerOptions* options) | |
+ const DedicatedWorkerOptions* options) | |
: DedicatedWorker( | |
context, | |
script_request_url, | |
@@ -112,7 +123,7 @@ DedicatedWorker::DedicatedWorker(ExecutionContext* context, | |
DedicatedWorker::DedicatedWorker( | |
ExecutionContext* context, | |
const KURL& script_request_url, | |
- const WorkerOptions* options, | |
+ const DedicatedWorkerOptions* options, | |
base::FunctionRef<DedicatedWorkerMessagingProxy*(DedicatedWorker*)> | |
context_proxy_factory) | |
: AbstractWorker(context), | |
diff --git a/third_party/blink/renderer/core/workers/dedicated_worker.h b/third_party/blink/renderer/core/workers/dedicated_worker.h | |
index 080ae5a831156..0d862357bc683 100644 | |
--- a/third_party/blink/renderer/core/workers/dedicated_worker.h | |
+++ b/third_party/blink/renderer/core/workers/dedicated_worker.h | |
@@ -23,7 +23,7 @@ | |
#include "third_party/blink/public/platform/web_dedicated_worker_host_factory_client.h" | |
#include "third_party/blink/renderer/bindings/core/v8/active_script_wrappable.h" | |
#include "third_party/blink/renderer/bindings/core/v8/v8_structured_serialize_options.h" | |
-#include "third_party/blink/renderer/bindings/core/v8/v8_worker_options.h" | |
+#include "third_party/blink/renderer/bindings/core/v8/v8_dedicated_worker_options.h" | |
#include "third_party/blink/renderer/core/core_export.h" | |
#include "third_party/blink/renderer/core/dom/events/event_listener.h" | |
#include "third_party/blink/renderer/core/dom/events/event_target.h" | |
@@ -68,17 +68,17 @@ class CORE_EXPORT DedicatedWorker final | |
public: | |
static DedicatedWorker* Create(ExecutionContext*, | |
const String& url, | |
- const WorkerOptions*, | |
+ const DedicatedWorkerOptions*, | |
ExceptionState&); | |
DedicatedWorker(ExecutionContext*, | |
const KURL& script_request_url, | |
- const WorkerOptions*); | |
+ const DedicatedWorkerOptions*); | |
// Exposed for testing. | |
DedicatedWorker( | |
ExecutionContext*, | |
const KURL& script_request_url, | |
- const WorkerOptions*, | |
+ const DedicatedWorkerOptions*, | |
base::FunctionRef<DedicatedWorkerMessagingProxy*(DedicatedWorker*)> | |
context_proxy_factory); | |
~DedicatedWorker() override; | |
@@ -217,7 +217,7 @@ class CORE_EXPORT DedicatedWorker final | |
blink::DedicatedWorkerToken token_; | |
const KURL script_request_url_; | |
- Member<const WorkerOptions> options_; | |
+ Member<const DedicatedWorkerOptions> options_; | |
Member<const FetchClientSettingsObjectSnapshot> | |
outside_fetch_client_settings_object_; | |
const Member<DedicatedWorkerMessagingProxy> context_proxy_; | |
-- | |
2.49.0 | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment