Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: c843c2aa8e00388e2e0f86accedc3b6ea0f76e9f
https://github.com/WebKit/WebKit/commit/c843c2aa8e00388e2e0f86accedc3b6ea0f76e9f
Author: Yoav Weiss <[email protected]>
Date: 2025-12-10 (Wed, 10 Dec 2025)
Changed paths:
M
LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/mutate-rules.https-expected.txt
M
LayoutTests/imported/w3c/web-platform-tests/speculation-rules/speculation-tags/deduped-and-sorted-tags.https_type=prefetch-expected.txt
M Source/WebCore/bindings/js/ScriptController.cpp
M Source/WebCore/bindings/js/ScriptController.h
M Source/WebCore/dom/Document.cpp
M Source/WebCore/dom/LoadableSpeculationRules.cpp
M Source/WebCore/dom/ScriptElement.cpp
M Source/WebCore/dom/ScriptElement.h
M Source/WebCore/dom/SpeculationRulesMatcher.cpp
M Source/WebCore/html/HTMLScriptElement.cpp
M Source/WebCore/loader/DocumentPrefetcher.cpp
M Source/WebCore/loader/DocumentPrefetcher.h
M Source/WebCore/loader/SpeculationRules.cpp
M Source/WebCore/loader/SpeculationRules.h
Log Message:
-----------
Properly handle speculationrules script element removal.
https://bugs.webkit.org/show_bug.cgi?id=303548
Reviewed by Alex Christensen.
Currently when a speculationrules script element is removed, its parsed rules
are still processed in the next microtask checkpoint.
This PR changes that and removeis the rules of such scripts, ensuring that no
prefetch would happen if the removal happens within a microtask of the script's
addition.
No new tests, but this progresses existing tests.
*
LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/mutate-rules.https-expected.txt:
Progression.
*
LayoutTests/imported/w3c/web-platform-tests/speculation-rules/speculation-tags/deduped-and-sorted-tags.https_type=prefetch-expected.txt:
Progression.
* Source/WebCore/bindings/js/ScriptController.cpp:
(WebCore::ScriptController::registerSpeculationRules): Pass an element.
* Source/WebCore/bindings/js/ScriptController.h:
* Source/WebCore/dom/Document.cpp:
(WebCore::Document::processSpeculationRules): Pass a callback to process each
rule.
* Source/WebCore/dom/LoadableSpeculationRules.cpp:
(WebCore::LoadableSpeculationRules::notifyFinished): Pass a nullptr instead of
an element.
* Source/WebCore/dom/ScriptElement.cpp:
(WebCore::ScriptElement::registerSpeculationRules): Pass an element.
(WebCore::ScriptElement::unregisterSpeculationRules): Remove the speculation
rules associated with an element.
* Source/WebCore/dom/ScriptElement.h:
* Source/WebCore/dom/SpeculationRulesMatcher.cpp:
(WebCore::SpeculationRulesMatcher::hasMatchingRule): Pass a callback to process
each rule.
* Source/WebCore/html/HTMLScriptElement.cpp:
(WebCore::HTMLScriptElement::removedFromAncestor): Call
unregisterSpeculationRules.
* Source/WebCore/loader/DocumentPrefetcher.cpp:
(WebCore::DocumentPrefetcher::removePrefetch): Remove a prefetched URL from
cache.
* Source/WebCore/loader/DocumentPrefetcher.h:
* Source/WebCore/loader/SpeculationRules.cpp:
(WebCore::SpeculationRules::parseSpeculationRules): Add rule to a container
associated with its element.
(WebCore::SpeculationRules::unregisterSpeculationRules): Remove
element-associated rules.
(WebCore::SpeculationRules::prefetchRules const): Deleted.
* Source/WebCore/loader/SpeculationRules.h:
(WebCore::SpeculationRules::prefetchRules const): Getter.
Canonical link: https://commits.webkit.org/304255@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications