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

Reply via email to