Implement speculation rules - same origin conservative prefetch#48322
Conversation
|
EWS run on previous version of this PR (hash 71ece0b) Details |
71ece0b to
2540373
Compare
|
EWS run on previous version of this PR (hash 2540373) Details |
2540373 to
755430e
Compare
|
EWS run on previous version of this PR (hash 755430e) Details |
755430e to
b8b7acb
Compare
|
EWS run on previous version of this PR (hash b8b7acb) Details |
b8b7acb to
05727b8
Compare
|
EWS run on previous version of this PR (hash 05727b8) Details |
05727b8 to
3de25c8
Compare
|
EWS run on previous version of this PR (hash 3de25c8) Details |
|
EWS run on previous version of this PR (hash 0fd91fc) Details |
|
EWS run on previous version of this PR (hash a2b13dc) Details |
|
EWS run on previous version of this PR (hash 0759e84) Details |
|
EWS run on previous version of this PR (hash bf735e0) Details |
|
EWS run on previous version of this PR (hash d4943d7) Details |
|
EWS run on previous version of this PR (hash 7692fb3) Details |
|
EWS run on previous version of this PR (hash 8d3df95) Details |
|
EWS run on previous version of this PR (hash 2b732b9) Details |
|
EWS run on previous version of this PR (hash c3fbd06) Details |
|
EWS run on previous version of this PR (hash 1106867) Details |
|
EWS run on previous version of this PR (hash 9408a37) Details |
|
EWS run on previous version of this PR (hash 59130a1) Details |
|
EWS run on previous version of this PR (hash f23edcf) Details |
|
EWS run on previous version of this PR (hash 9f7d1e6) Details |
|
EWS run on previous version of this PR (hash 095d2ac) Details |
|
EWS run on previous version of this PR (hash 627e2be) Details |
|
EWS run on previous version of this PR (hash 7be1ad8) Details |
|
EWS run on previous version of this PR (hash 399a7c0) Details |
|
EWS run on previous version of this PR (hash 08d0e5d) Details |
|
EWS run on current version of this PR (hash 7c254ee) Details |
https://bugs.webkit.org/show_bug.cgi?id=295193 Reviewed by Alex Christensen. This implements an initial version of same-origin prefetch speculation rules. The feature enables prefetching an HTML document ahead of time ("immediate" eagerness), or when the user started clicking an anchor element pointing at it ("conservative" eagerness). That prefetched document is then used when the user actually navigates to this URL, resulting in significant performance improvements. Subresources of the prefetched document are not yet loaded before navigation, nor does it begin its processing. HTML spec PR for speculation rules: whatwg/html#11426 Spec for the prefetch parts: https://wicg.github.io/nav-speculation/prefetch.html * LayoutTests/TestExpectations: Add a few failing expectations. * LayoutTests/imported/w3c/web-platform-tests/clear-site-data/support/clear-site-data-cache.py: Added. (generate_png): (generate_png.chunk): (main): * LayoutTests/imported/w3c/web-platform-tests/clear-site-data/support/clear-site-data-prefetchCache.py: Added. (main): * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/external-speculation-rules-errors-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/invalid-rules.https_prefetch-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/invalid-rules.https_prerender-expected.txt: Progression * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/anonymous-client.https-expected.txt: Failure instead of timeout. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/clear-prefetch-cache-after-clear-site-data-cache.https-expected.txt: * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/cookie-indices.https_include=changed-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/cookie-indices.https_include=changedWithRedirect-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/cookie-indices.https_include=changedWithRedirect2-expected.txt: Failure. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/cookie-indices.https_include=changedWithRedirect3-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/cookie-indices.https_include=unchanged-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/cookie-indices.https_include=unchangedWithRedirect-expected.txt: Failure. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/cross-origin-cookies-anonymous-client-ip-duplicate.https-expected.txt: Failure. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/cross-origin-cookies.https-expected.txt: Failure. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/different-initiators-2.https-expected.txt: Timeout. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/different-initiators.sub.https_cross-site-1-expected.txt: Failure. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/different-initiators.sub.https_cross-site-2-expected.txt: Failure. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/different-initiators.sub.https_same-site-expected.txt: Failure. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/document-rules.https_include=and-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/document-rules.https_include=baseURLChangedByBaseElement-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/document-rules.https_include=baseURLChangedBySameDocumentNavigation-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/document-rules.https_include=defaultPredicate-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/document-rules.https_include=hrefMatches-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/document-rules.https_include=immediateMutation-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/document-rules.https_include=invalidPredicate-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/document-rules.https_include=linkHrefChanged-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/document-rules.https_include=linkInShadowTree-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/document-rules.https_include=linkToSelfFragment-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/document-rules.https_include=newRuleSetAdded-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/document-rules.https_include=not-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/document-rules.https_include=or-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/document-rules.https_include=selectorMatches-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/document-rules.https_include=selectorMatchesDisplayLocked-expected.txt: Failure. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/document-rules.https_include=selectorMatchesDisplayNone-expected.txt: Failure. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/document-rules.https_include=selectorMatchesScopingRoot-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/document-rules.https_include=unslottedLink-expected.txt: Failure. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/duplicate-urls.https-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/fragment.https-expected.txt: Progrssion. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/implicit-source.https-expected.txt: Progrssion. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/initiators-a-element.sub.https_cross-site-expected.txt: Progrsssion (partial failure). * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/initiators-a-element.sub.https_same-site-expected.txt: Progrsssion (partial failure). * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/initiators-iframe-location-href.sub.https_cross-site-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/initiators-iframe-location-href.sub.https_same-site-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/initiators-window-open.sub.https_cross-site-expected.txt: Failure. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/initiators-window-open.sub.https_same-site-expected.txt: Failure. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/multiple-url.https-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/navigation-timing-delivery-type.https_prefetch=false&bypass_cache=false-expected.txt: Failure. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/navigation-timing-delivery-type.https_prefetch=false&bypass_cache=true-expected.txt: Failure. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/navigation-timing-delivery-type.https_prefetch=true&bypass_cache=false-expected.txt: Failure. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/navigation-timing-delivery-type.https_prefetch=true&bypass_cache=true-expected.txt: Failure. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/navigation-timing-requestStart-responseStart.https_include=afterResponse-expected.txt: Failure. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/navigation-timing-requestStart-responseStart.https_include=noPrefetch-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/navigation-timing-requestStart-responseStart.https_include=waitingForRedirect-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/navigation-timing-requestStart-responseStart.https_include=waitingForResponse-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/navigation-timing-sizes.https_bypass_cache=true-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/navigation-timing-sizes.https_default-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/navigation-timing-sizes.https_prefetch=true&bypass_cache=true-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/navigation-timing-sizes.https_prefetch=true-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/no-http-cache-interference.https-expected.txt: Failure. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/no-prefetch-for-post.https-expected.txt: Failure. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/out-of-document-rule-set.https_include=BaseCase-expected.txt: Failure. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/out-of-document-rule-set.https_include=CSPExemption-expected.txt: Failure. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/out-of-document-rule-set.https_include=EmptyRuleSet-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/out-of-document-rule-set.https_include=FailCORS-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/out-of-document-rule-set.https_include=FailToParseRuleSet-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/out-of-document-rule-set.https_include=FailToParseSpeculationRulesHeader-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/out-of-document-rule-set.https_include=FollowRedirect-expected.txt: Failure. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/out-of-document-rule-set.https_include=InnerListInSpeculationRulesHeader-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/out-of-document-rule-set.https_include=InvalidMimeType-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/out-of-document-rule-set.https_include=InvalidUrlForSpeculationRulesSet-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/out-of-document-rule-set.https_include=RelativeUrlForCandidate-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/out-of-document-rule-set.https_include=RelativeUrlForSpeculationRulesSet-expected.txt: Failure. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/out-of-document-rule-set.https_include=StatusCode199-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/out-of-document-rule-set.https_include=StatusCode404-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/out-of-document-rule-set.https_include=UseNonUTF8EncodingForSpeculationRulesSet-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/prefetch-single.https_from_protocol=http&to_protocol=http-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/prefetch-single.https_from_protocol=http&to_protocol=https-expected.txt: Failure. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/prefetch-single.https_from_protocol=https&to_protocol=http-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/prefetch-single.https_from_protocol=https&to_protocol=https-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/prefetch-status.https_status=200&should_prefetch=true-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/prefetch-status.https_status=250&should_prefetch=true-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/prefetch-status.https_status=299&should_prefetch=true-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/prefetch-status.https_status=400&should_prefetch=false-expected.txt: Failure. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/prefetch-status.https_status=500&should_prefetch=false-expected.txt: Failure. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/prefetch-traverse-reload.sub-expected.txt: Progression (partial failure). * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/prefetch-uses-cache.sub.https_cross-site-expected.txt: Failure. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/prefetch-uses-cache.sub.https_same-site-expected.txt: Failure. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/redirect-middle-of-prefetch.https_origin=cross-site-initial-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/redirect-middle-of-prefetch.https_origin=cross-site-redirect-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/redirect-middle-of-prefetch.https_origin=same-origin-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/redirect-to-prefetch-url.https_origin=cross-site-initial-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/redirect-to-prefetch-url.https_origin=cross-site-redirect-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/redirect-to-prefetch-url.https_origin=same-origin-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/redirect-url.https_origin=cross-site-initial-expected.txt: Failure. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/redirect-url.https_origin=cross-site-redirect-expected.txt: Failure. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/redirect-url.https_origin=same-origin-expected.txt: Failure. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/referrer-policy-from-rules.https_1-1-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/referrer-policy-from-rules.https_2-2-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/referrer-policy-from-rules.https_3-3-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/referrer-policy-from-rules.https_4-4-expected.txt: Failure. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/referrer-policy-from-rules.https_5-5-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/referrer-policy-from-rules.https_6-6-expected.txt: Failure. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/referrer-policy-from-rules.https_7-7-expected.txt: Failure. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/referrer-policy-from-rules.https_8-last-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/referrer-policy-not-accepted.https_1-1-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/referrer-policy-not-accepted.https_2-2-expected.txt: Failure. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/referrer-policy-not-accepted.https_3-last-expected.txt: Failure. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/referrer-policy.https_1-1-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/referrer-policy.https_2-2-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/referrer-policy.https_3-3-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/referrer-policy.https_4-last-expected.txt: Failure. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/same-origin-cookies.https_1-1-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/same-origin-cookies.https_2-last-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/sec-fetch-headers.https-expected.txt: Progression (partial failure). * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/user-pass.https_cross-origin=false-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/prefetch/user-pass.https_cross-origin=true-expected.txt: Failure. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/script-supports.https-expected.txt: Progression. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/speculation-tags/cross-site-prefetch.https-expected.txt: Failure. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/speculation-tags/cross-site-to-same-site-redirection-prefetch.https-expected.txt: Failure. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/speculation-tags/deduped-and-sorted-tags.https_type=prefetch-expected.txt: Failure. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/speculation-tags/deduped-and-sorted-tags.https_type=prerender-expected.txt: Failure. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/speculation-tags/invalid-tags.https_tag-level=rule&type=prefetch-expected.txt: Failure. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/speculation-tags/invalid-tags.https_tag-level=rule&type=prerender-expected.txt: Failure. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/speculation-tags/invalid-tags.https_tag-level=ruleset&type=prefetch-expected.txt: Failure. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/speculation-tags/invalid-tags.https_tag-level=ruleset&type=prerender-expected.txt: Failure. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/speculation-tags/no-tags.https-expected.txt: Failure. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/speculation-tags/prefetch-eagerness-pointer-down.https-expected.txt: Failure. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/speculation-tags/prefetch-eagerness-pointer-hover.https-expected.txt: Failure. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/speculation-tags/prerender-target-hint.https-expected.txt: Failure. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/speculation-tags/same-site-to-cross-site-redirection-prefetch.https-expected.txt: Failure. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/speculation-tags/valid-tags.https_tag-level=rule&type=prefetch-expected.txt: Failure. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/speculation-tags/valid-tags.https_tag-level=rule&type=prerender-expected.txt: Failure. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/speculation-tags/valid-tags.https_tag-level=ruleset&type=prefetch-expected.txt: Failure. * LayoutTests/imported/w3c/web-platform-tests/speculation-rules/speculation-tags/valid-tags.https_tag-level=ruleset&type=prerender-expected.txt: Failure. * LayoutTests/imported/w3c/web-platform-tests/websockets/constants.sub.js: Updated. * LayoutTests/platform/gtk/TestExpectations: Skip platform-specific failing tests for now. * LayoutTests/platform/mac-wk1/TestExpectations: Skip service-worker reliant tests. * LayoutTests/platform/win/TestExpectations: Skip platform-specific failing tests for now. * LayoutTests/platform/wpe/TestExpectations: Skip platform-specific failing tests for now. * Source/WTF/Scripts/Preferences/UnifiedWebPreferences.yaml: Add a preference to enable the feature. * Source/WebCore/Headers.cmake: Add new headers. * Source/WebCore/Sources.txt: Add new source files. * Source/WebCore/WebCore.xcodeproj/project.pbxproj: Add new files. * Source/WebCore/bindings/js/ScriptController.cpp: (WebCore::ScriptController::registerSpeculationRules): Parse and set new speculation rules. * Source/WebCore/bindings/js/ScriptController.h: * Source/WebCore/dom/Document.cpp: (WebCore::Document::Document): (WebCore::Document::resolveStyle): Call considerSpeculationRules. (WebCore::Document::updateBaseURL): Call considerSpeculationRules. (WebCore::Document::considerSpeculationRules): Check if speculation rules indicate we need to prefetch new documents. (WebCore::Document::speculationRules const): (WebCore::Document::speculationRules): (WebCore::Document::prefetch): Kick off a document prefetch. * Source/WebCore/dom/Document.h: * Source/WebCore/dom/ScriptElement.cpp: (WebCore::ScriptElement::determineScriptType): Add "speculationrules" as a script type. (WebCore::ScriptElement::prepareScript): Call registerSpeculationRules. (WebCore::ScriptElement::registerSpeculationRules): Register speculation rules for the document. * Source/WebCore/dom/ScriptElement.h: * Source/WebCore/dom/ScriptElementCachedScriptFetcher.h: (WebCore::ScriptElementCachedScriptFetcher::isSpeculationRules const): * Source/WebCore/dom/ScriptType.h: * Source/WebCore/dom/SpeculationRulesMatcher.cpp: Implements speculation rules matching. (WebCore::matches): Checks if a rule matches. (WebCore::SpeculationRulesMatcher::hasMatchingRule): Entry point that that checks if an anchor element should be prefetched. * Source/WebCore/dom/SpeculationRulesMatcher.h: * Source/WebCore/dom/TrustedTypePolicy.cpp: Unified build fix. * Source/WebCore/html/HTMLAnchorElement.cpp: Check if an anchor should be prefetched. (WebCore::HTMLAnchorElement::defaultEventHandler): Implements the "conservative" eagerness heuristic and prefetches matching anchors on keydown/pointerdown. (WebCore::HTMLAnchorElement::attributeChanged): Check speculation rules on attribute change. (WebCore::HTMLAnchorElement::insertedIntoAncestor): Check speculation rules on insertion. (WebCore::HTMLAnchorElement::setFullURL): Check speculation rules when the URL changes. (WebCore::HTMLAnchorElement::setShouldBePrefetched): Indicates that an anchor should be prefetched. (WebCore::HTMLAnchorElement::checkForSpeculationRules): Checks speculations rules and called setShouldBePrefetched. * Source/WebCore/html/HTMLAnchorElement.h: * Source/WebCore/html/HTMLScriptElement.h: Add "speculationrules" script type. * Source/WebCore/loader/DocumentLoader.cpp: (WebCore::DocumentLoader::setRequest): (WebCore::DocumentLoader::loadMainResource): * Source/WebCore/loader/DocumentPrefetcher.cpp: Handle document prefetching. (WebCore::DocumentPrefetcher::DocumentPrefetcher): (WebCore::DocumentPrefetcher::~DocumentPrefetcher): (WebCore::isPassingSecurityChecks): Run security checks. (WebCore::makePrefetchRequest): Request the prefetched document. (WebCore::DocumentPrefetcher::prefetch): Prefetch the document if it passes all checks. (WebCore::DocumentPrefetcher::responseReceived): Implement responseReceived to run the completion handler. (WebCore::DocumentPrefetcher::redirectReceived): Handle redirect responses. (WebCore::DocumentPrefetcher::notifyFinished): Handle the resource finish notification. * Source/WebCore/loader/DocumentPrefetcher.h: (WebCore::DocumentPrefetcher::create): * Source/WebCore/loader/FrameLoader.cpp: (WebCore::FrameLoader::FrameLoader): Initialize m_documentPrefetcher. (WebCore::FrameLoader::commitProvisionalLoad): (WebCore::FrameLoader::loadResourceSynchronously): (WebCore::FrameLoader::continueLoadAfterNavigationPolicy): Match navigation with a prefetched resource. (WebCore::FrameLoader::prefetch): Prefetch a document. * Source/WebCore/loader/FrameLoader.h: * Source/WebCore/loader/ResourceLoaderOptions.h: * Source/WebCore/loader/SpeculationRules.cpp: Added. (WebCore::SpeculationRules::create): (WebCore::SpeculationRules::prefetchRules const): (WebCore::SpeculationRules::DocumentPredicate::DocumentPredicate): (WebCore::SpeculationRules::DocumentPredicate::value const): (WebCore::parseStringOrStringList): (WebCore::parseDocumentPredicate): (WebCore::parseSingleRule): (WebCore::parseRules): (WebCore::SpeculationRules::parseSpeculationRules): * Source/WebCore/loader/SpeculationRules.h: Added. * Source/WebCore/loader/cache/CachedRawResource.cpp: (WebCore::shouldIgnoreHeaderForCacheReuse): * Source/WebCore/loader/cache/CachedResource.cpp: (WebCore::CachedResource::CachedResource): (WebCore::CachedResource::redirectReceived): (WebCore::CachedResource::addClientToSet): * Source/WebCore/loader/cache/CachedResource.h: (WebCore::CachedResource::allowsCaching const): * Source/WebCore/loader/cache/CachedResourceLoader.cpp: (WebCore::CachedResourceLoader::allowedByContentSecurityPolicy const): Add MainResource as an option. (WebCore::CachedResourceLoader::shouldUpdateCachedResourceWithCurrentRequest): (WebCore::isResourceSuitableForDirectReuse): (WebCore::CachedResourceLoader::updateCachedResourceWithCurrentRequest): (WebCore::mustReloadFromServiceWorkerOptions): (WebCore::CachedResourceLoader::determineRevalidationPolicy const): * Source/WebCore/loader/cache/CachedResourceRequest.h: (WebCore::CachedResourceRequest::allowsCaching const): * Source/WebCore/page/PerformanceResourceTiming.cpp: (WebCore::networkLoadTimeToDOMHighResTimeStamp): * Source/WebCore/platform/ReferrerPolicy.cpp: (WebCore::parseReferrerPolicy): Add SpeculationRules as a source for referrer policy. * Source/WebCore/platform/ReferrerPolicy.h: * Source/WebCore/platform/network/CacheValidation.cpp: (WebCore::updateRedirectChainStatus): * Source/WebCore/platform/network/CacheValidation.h: * Source/WebCore/platform/network/HTTPHeaderNames.in: Add Sec-Speculation-Tags. * Source/WebKitLegacy/mac/WebCoreSupport/WebFrameLoaderClient.mm: (WebFrameLoaderClient::dispatchDidReceiveServerRedirectForProvisionalLoad): Canonical link: https://commits.webkit.org/300829@main
|
Committed 300829@main (a4a9e7f): https://commits.webkit.org/300829@main Reviewed commits have been landed. Closing PR #48322 and removing active labels. |
a4a9e7f
7c254ee
🧪 win-tests