[webkit-changes] [WebKit/WebKit] c363df: Implement multiple import maps
Yoav Weiss
noreply at github.com
Wed Jan 1 21:17:34 PST 2025
Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: c363df60bf5834d874f9830efeebc3892b87ff25
https://github.com/WebKit/WebKit/commit/c363df60bf5834d874f9830efeebc3892b87ff25
Author: Yoav Weiss <yoav.weiss at shopify.com>
Date: 2025-01-01 (Wed, 01 Jan 2025)
Changed paths:
M LayoutTests/TestExpectations
M LayoutTests/imported/w3c/web-platform-tests/import-maps/acquiring/dynamic-import-expected.txt
M LayoutTests/imported/w3c/web-platform-tests/import-maps/acquiring/script-tag-expected.txt
M LayoutTests/imported/w3c/web-platform-tests/import-maps/acquiring/script-tag-inline-expected.txt
M LayoutTests/imported/w3c/web-platform-tests/import-maps/bare-specifiers.sub-expected.txt
M LayoutTests/imported/w3c/web-platform-tests/import-maps/csp/applied-to-target-dynamic.sub-expected.txt
M LayoutTests/imported/w3c/web-platform-tests/import-maps/csp/applied-to-target.sub-expected.txt
M LayoutTests/imported/w3c/web-platform-tests/import-maps/csp/hash-failure-expected.txt
M LayoutTests/imported/w3c/web-platform-tests/import-maps/csp/nonce-failure-expected.txt
M LayoutTests/imported/w3c/web-platform-tests/import-maps/data-driven/resolving_data-url-prefix.json-expected.txt
M LayoutTests/imported/w3c/web-platform-tests/import-maps/data-driven/resolving_empty-import-map.json-expected.txt
M LayoutTests/imported/w3c/web-platform-tests/import-maps/data-driven/resolving_overlapping-entries.json-expected.txt
M LayoutTests/imported/w3c/web-platform-tests/import-maps/data-driven/resolving_packages-via-trailing-slashes.json-expected.txt
M LayoutTests/imported/w3c/web-platform-tests/import-maps/data-driven/resolving_resolving-null.json-expected.txt
M LayoutTests/imported/w3c/web-platform-tests/import-maps/data-driven/resolving_scopes-exact-vs-prefix.json-expected.txt
M LayoutTests/imported/w3c/web-platform-tests/import-maps/data-driven/resolving_scopes.json-expected.txt
M LayoutTests/imported/w3c/web-platform-tests/import-maps/data-driven/resolving_tricky-specifiers.json-expected.txt
M LayoutTests/imported/w3c/web-platform-tests/import-maps/data-driven/resolving_url-specifiers-schemes.json-expected.txt
M LayoutTests/imported/w3c/web-platform-tests/import-maps/data-driven/resolving_url-specifiers.json-expected.txt
M LayoutTests/imported/w3c/web-platform-tests/import-maps/data-url-specifiers.sub-expected.txt
M LayoutTests/imported/w3c/web-platform-tests/import-maps/http-url-like-specifiers.sub-expected.txt
M LayoutTests/imported/w3c/web-platform-tests/import-maps/multiple-import-maps/basic-expected.txt
M LayoutTests/imported/w3c/web-platform-tests/import-maps/multiple-import-maps/conflict-first-persists-expected.txt
M LayoutTests/imported/w3c/web-platform-tests/import-maps/multiple-import-maps/resolution-consistency-in-module-tree-expected.txt
M LayoutTests/imported/w3c/web-platform-tests/import-maps/multiple-import-maps/resolution-consistency-in-module-tree-inline-expected.txt
M LayoutTests/imported/w3c/web-platform-tests/import-maps/multiple-import-maps/resolution-consistency-in-module-tree.html
M LayoutTests/imported/w3c/web-platform-tests/import-maps/multiple-import-maps/with-errors-expected.txt
M LayoutTests/imported/w3c/web-platform-tests/import-maps/not-overridden/external-script-bare-descendent-expected.txt
M LayoutTests/imported/w3c/web-platform-tests/import-maps/not-overridden/external-script-descendent-with-scope-expected.txt
M LayoutTests/imported/w3c/web-platform-tests/import-maps/not-overridden/failed-resolution-expected.txt
A LayoutTests/imported/w3c/web-platform-tests/resources/out-of-scope-test.js
M LayoutTests/platform/glib/imported/w3c/web-platform-tests/import-maps/bare-specifiers.sub-expected.txt
R LayoutTests/platform/glib/imported/w3c/web-platform-tests/import-maps/csp/applied-to-target-dynamic.sub-expected.txt
R LayoutTests/platform/glib/imported/w3c/web-platform-tests/import-maps/csp/applied-to-target.sub-expected.txt
M LayoutTests/platform/glib/imported/w3c/web-platform-tests/import-maps/data-url-specifiers.sub-expected.txt
M LayoutTests/platform/glib/imported/w3c/web-platform-tests/import-maps/http-url-like-specifiers.sub-expected.txt
M LayoutTests/platform/win/imported/w3c/web-platform-tests/import-maps/bare-specifiers.sub-expected.txt
R LayoutTests/platform/win/imported/w3c/web-platform-tests/import-maps/csp/applied-to-target-dynamic.sub-expected.txt
R LayoutTests/platform/win/imported/w3c/web-platform-tests/import-maps/csp/applied-to-target.sub-expected.txt
M LayoutTests/platform/win/imported/w3c/web-platform-tests/import-maps/data-url-specifiers.sub-expected.txt
M LayoutTests/platform/win/imported/w3c/web-platform-tests/import-maps/http-url-like-specifiers.sub-expected.txt
M Source/JavaScriptCore/builtins/BuiltinNames.h
M Source/JavaScriptCore/builtins/ModuleLoader.js
M Source/JavaScriptCore/bytecode/LinkTimeConstant.h
M Source/JavaScriptCore/runtime/ImportMap.cpp
M Source/JavaScriptCore/runtime/ImportMap.h
M Source/JavaScriptCore/runtime/JSGlobalObject.cpp
M Source/JavaScriptCore/runtime/JSGlobalObject.h
M Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp
M Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.h
M Source/WebCore/bindings/js/ScriptController.cpp
M Source/WebCore/bindings/js/ScriptController.h
M Source/WebCore/bindings/js/ScriptModuleLoader.cpp
M Source/WebCore/dom/ScriptElement.cpp
M Source/WebCore/dom/ScriptType.h
Log Message:
-----------
Implement multiple import maps
https://bugs.webkit.org/show_bug.cgi?id=279025
Reviewed by Yusuke Suzuki.
This PR enables multiple import maps to co-exist in a single document,
and to be loaded after a module script was loaded.
It also removes some code related to external import maps, which was
removed at https://github.com/WebKit/WebKit/pull/37629.
* LayoutTests/TestExpectations: Remove skip and send console to stderr.
* LayoutTests/imported/w3c/web-platform-tests/import-maps/acquiring/dynamic-import-expected.txt: progression.
* LayoutTests/imported/w3c/web-platform-tests/import-maps/acquiring/script-tag-expected.txt: progression.
* LayoutTests/imported/w3c/web-platform-tests/import-maps/acquiring/script-tag-inline-expected.txt: progression.
* LayoutTests/imported/w3c/web-platform-tests/import-maps/bare-specifiers.sub-expected.txt: progression.
* LayoutTests/imported/w3c/web-platform-tests/import-maps/csp/applied-to-target-dynamic.sub-expected.txt: progression.
* LayoutTests/imported/w3c/web-platform-tests/import-maps/csp/applied-to-target.sub-expected.txt: progression.
* LayoutTests/imported/w3c/web-platform-tests/import-maps/csp/hash-failure-expected.txt: progression.
* LayoutTests/imported/w3c/web-platform-tests/import-maps/csp/nonce-failure-expected.txt: progression.
* LayoutTests/imported/w3c/web-platform-tests/import-maps/data-driven/resolving_data-url-prefix.json-expected.txt: progression.
* LayoutTests/imported/w3c/web-platform-tests/import-maps/data-driven/resolving_empty-import-map.json-expected.txt: progression.
* LayoutTests/imported/w3c/web-platform-tests/import-maps/data-driven/resolving_overlapping-entries.json-expected.txt: progression.
* LayoutTests/imported/w3c/web-platform-tests/import-maps/data-driven/resolving_packages-via-trailing-slashes.json-expected.txt: progression.
* LayoutTests/imported/w3c/web-platform-tests/import-maps/data-driven/resolving_resolving-null.json-expected.txt: progression.
* LayoutTests/imported/w3c/web-platform-tests/import-maps/data-driven/resolving_scopes-exact-vs-prefix.json-expected.txt: progression.
* LayoutTests/imported/w3c/web-platform-tests/import-maps/data-driven/resolving_tricky-specifiers.json-expected.txt: progression.
* LayoutTests/imported/w3c/web-platform-tests/import-maps/data-driven/resolving_url-specifiers-schemes.json-expected.txt: progression.
* LayoutTests/imported/w3c/web-platform-tests/import-maps/data-driven/resolving_url-specifiers.json-expected.txt: progression.
* LayoutTests/imported/w3c/web-platform-tests/import-maps/data-url-specifiers.sub-expected.txt: progression.
* LayoutTests/imported/w3c/web-platform-tests/import-maps/http-url-like-specifiers.sub-expected.txt: progression.
* LayoutTests/imported/w3c/web-platform-tests/import-maps/multiple-import-maps/already-resolved-dropped-expected.txt: progression.
* LayoutTests/imported/w3c/web-platform-tests/import-maps/multiple-import-maps/basic-expected.txt: progression.
* LayoutTests/imported/w3c/web-platform-tests/import-maps/multiple-import-maps/conflict-first-persists-expected.txt: progression.
* LayoutTests/imported/w3c/web-platform-tests/import-maps/multiple-import-maps/resolution-consistency-in-module-tree-expected.txt: progression.
* LayoutTests/imported/w3c/web-platform-tests/import-maps/multiple-import-maps/resolution-consistency-in-module-tree-inline-expected.txt: progression.
* LayoutTests/imported/w3c/web-platform-tests/import-maps/multiple-import-maps/resolution-consistency-in-module-tree.html: Avoid reliance on async inline module timing.
* LayoutTests/imported/w3c/web-platform-tests/import-maps/multiple-import-maps/url-resolution-conflict-expected.txt: progression.
* LayoutTests/imported/w3c/web-platform-tests/import-maps/multiple-import-maps/with-errors-expected.txt: progression.
* LayoutTests/imported/w3c/web-platform-tests/import-maps/not-as-classic-script-expected.txt: progression.
* LayoutTests/imported/w3c/web-platform-tests/import-maps/not-overridden/dynamic-expected.txt: progression.
* LayoutTests/imported/w3c/web-platform-tests/import-maps/not-overridden/external-script-bare-descendent-expected.txt: progression.
* LayoutTests/imported/w3c/web-platform-tests/import-maps/not-overridden/external-script-descendent-expected.txt: progression.
* LayoutTests/imported/w3c/web-platform-tests/import-maps/not-overridden/external-script-descendent-with-scope-expected.txt: progression.
* LayoutTests/imported/w3c/web-platform-tests/import-maps/not-overridden/failed-resolution-expected.txt: progression.
* LayoutTests/imported/w3c/web-platform-tests/import-maps/not-overridden/integrity-expected.txt: progression.
* LayoutTests/imported/w3c/web-platform-tests/import-maps/not-overridden/prefix-expected.txt: progression.
* LayoutTests/imported/w3c/web-platform-tests/import-maps/not-overridden/script-descendent-expected.txt: progression.
* LayoutTests/imported/w3c/web-platform-tests/import-maps/not-overridden/url-resolution-conflict-expected.txt: progression.
* LayoutTests/imported/w3c/web-platform-tests/resources/out-of-scope-test.js: Added. Missed during import.
* LayoutTests/platform/glib/imported/w3c/web-platform-tests/import-maps/bare-specifiers.sub-expected.txt: progression.
* LayoutTests/platform/glib/imported/w3c/web-platform-tests/import-maps/csp/applied-to-target-dynamic.sub-expected.txt: Removed.
* LayoutTests/platform/glib/imported/w3c/web-platform-tests/import-maps/csp/applied-to-target.sub-expected.txt: Removed.
* LayoutTests/platform/glib/imported/w3c/web-platform-tests/import-maps/data-url-specifiers.sub-expected.txt: progression.
* LayoutTests/platform/glib/imported/w3c/web-platform-tests/import-maps/http-url-like-specifiers.sub-expected.txt: progression.
* LayoutTests/platform/win/imported/w3c/web-platform-tests/import-maps/bare-specifiers.sub-expected.txt: progression.
* LayoutTests/platform/win/imported/w3c/web-platform-tests/import-maps/csp/applied-to-target-dynamic.sub-expected.txt: Removed.
* LayoutTests/platform/win/imported/w3c/web-platform-tests/import-maps/csp/applied-to-target.sub-expected.txt: Removed.
* LayoutTests/platform/win/imported/w3c/web-platform-tests/import-maps/data-url-specifiers.sub-expected.txt: progression.
* LayoutTests/platform/win/imported/w3c/web-platform-tests/import-maps/http-url-like-specifiers.sub-expected.txt: progression.
* Source/JavaScriptCore/builtins/BuiltinNames.h: remove importMapStatus.
* Source/JavaScriptCore/builtins/ModuleLoader.js: remove
waiting on importMapStatus.
(visibility.PrivateRecursive.async loadModule):
(visibility.PrivateRecursive.async loadAndEvaluateModule):
(visibility.PrivateRecursive.async requestImportModule):
* Source/JavaScriptCore/bytecode/LinkTimeConstant.h: remove importMapStatus.
* Source/JavaScriptCore/runtime/ImportMap.cpp: Added multiple import map
logic.
(JSC::ImportMapInternal::mergeModuleSpecifierMaps): https://html.spec.whatwg.org/C#merge-module-specifier-maps
(JSC::ImportMap::ImportMap): Constructor to enable creation through
a static function.
(JSC::ImportMap::resolve): refactor and add a call to
addModuleToResolvedModuleSet.
(JSC::normalizeSpecifierKey): Change the reporter to a reference.
(JSC::sortAndNormalizeSpecifierMap): Change the reporter to a reference.
(JSC::ImportMap::parseImportMapString): a static function creating
a new ImportMap from an import map string. Replaces registerImportMap.
(JSC::ImportMap::mergeExistingAndNewImportMaps): https://html.spec.whatwg.org/C#merge-existing-and-new-import-maps
the scopes map. The scopes vector is then used to iterate over the
scopes in order.
(JSC::findUrlPrefixes): Find all the prefixes of a URL
(JSC::ImportMap::addModuleToResolvedModuleSet): https://html.spec.whatwg.org/C#add-module-to-resolved-module-set
(JSC::ImportMap::resolve const): Deleted.
(JSC::ImportMap::registerImportMap): Deleted.
* Source/JavaScriptCore/runtime/ImportMap.h: Replace the previous Scopes
data structure with a HashMap and a Vector, used for fast retrival and
in-order iteration.
* Source/JavaScriptCore/runtime/JSGlobalObject.cpp: Remove isAcquiring
and pendingImportMap logic.
(JSC::JSGlobalObject::init):
(JSC::JSGlobalObject::isAcquiringImportMaps const): Deleted.
(JSC::JSGlobalObject::visitChildrenImpl):
(JSC::JSGlobalObject::setAcquiringImportMaps): Deleted.
(JSC::JSGlobalObject::setPendingImportMaps): Deleted.
(JSC::JSGlobalObject::clearPendingImportMaps): Deleted.
* Source/JavaScriptCore/runtime/JSGlobalObject.h:
(JSC::JSGlobalObject::importMap):
(JSC::JSGlobalObject::importMapStatusPromise const): Deleted.
* Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp: Remove
importMapStatus.
* Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.h:
* Source/WebCore/bindings/js/ScriptController.cpp: Remove isAcquiring
and pendingImportMap logic. Add error reporting to
ImportMapLogReporter. Call mergeExistingAndNewImportMaps.
(WebCore::ScriptController::isAcquiringImportMaps): Deleted.
(WebCore::ScriptController::registerImportMap):
(WebCore::ScriptController::setAcquiringImportMaps): Deleted.
(WebCore::ScriptController::setPendingImportMaps): Deleted.
(WebCore::ScriptController::clearPendingImportMaps): Deleted.
* Source/WebCore/bindings/js/ScriptController.h:
* Source/WebCore/bindings/js/ScriptModuleLoader.cpp: Remove spurious
include.
* Source/WebCore/dom/LoadableClassicScript.cpp:
* Source/WebCore/dom/ScriptElement.cpp: Remove logic firing an error
event related to isAcquiring. Remove pendingImportMap logic.
(WebCore::ScriptElement::determineScriptType):
(WebCore::ScriptElement::prepareScript):
(WebCore::ScriptElement::registerImportMap):
(WebCore::ScriptElement::executePendingScript):
(WebCore::ScriptElement::requestImportMap): Deleted.
* Source/WebCore/dom/ScriptType.h: Fix up spec comments.
Canonical link: https://commits.webkit.org/288358@main
To unsubscribe from these emails, change your notification settings at https://github.com/WebKit/WebKit/settings/notifications
More information about the webkit-changes
mailing list