[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