[webkit-changes] [WebKit/WebKit] 69a182: Implement Priority Hints

Rob Buis noreply at github.com
Wed Mar 15 07:48:05 PDT 2023


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 69a182bca140bcc4d604dd6eba4ea48a16e9d00a
      https://github.com/WebKit/WebKit/commit/69a182bca140bcc4d604dd6eba4ea48a16e9d00a
  Author: Rob Buis <rbuis at igalia.com>
  Date:   2023-03-15 (Wed, 15 Mar 2023)

  Changed paths:
    A LayoutTests/http/tests/priority-hints/fetch-api-priority-expected.txt
    A LayoutTests/http/tests/priority-hints/fetch-api-priority.html
    A LayoutTests/http/tests/priority-hints/image-dynamic-insertion-expected.txt
    A LayoutTests/http/tests/priority-hints/image-dynamic-insertion.html
    A LayoutTests/http/tests/priority-hints/image-initial-load-expected.txt
    A LayoutTests/http/tests/priority-hints/image-initial-load.html
    A LayoutTests/http/tests/priority-hints/link-dynamic-insertion-expected.txt
    A LayoutTests/http/tests/priority-hints/link-dynamic-insertion.html
    A LayoutTests/http/tests/priority-hints/link-header-fetch-priority-expected.txt
    A LayoutTests/http/tests/priority-hints/link-header-fetch-priority.py
    A LayoutTests/http/tests/priority-hints/link-preload-dynamic-insertion-expected.txt
    A LayoutTests/http/tests/priority-hints/link-preload-dynamic-insertion.html
    A LayoutTests/http/tests/priority-hints/link-preload-initial-load-expected.txt
    A LayoutTests/http/tests/priority-hints/link-preload-initial-load.html
    A LayoutTests/http/tests/priority-hints/link-stylesheet-initial-load-expected.txt
    A LayoutTests/http/tests/priority-hints/link-stylesheet-initial-load.html
    A LayoutTests/http/tests/priority-hints/script-async-initial-load-expected.txt
    A LayoutTests/http/tests/priority-hints/script-async-initial-load.html
    A LayoutTests/http/tests/priority-hints/script-dynamic-insertion-expected.txt
    A LayoutTests/http/tests/priority-hints/script-dynamic-insertion.html
    A LayoutTests/http/tests/priority-hints/script-initial-load-expected.txt
    A LayoutTests/http/tests/priority-hints/script-initial-load.html
    A LayoutTests/http/tests/priority-hints/script-module-initial-load-expected.txt
    A LayoutTests/http/tests/priority-hints/script-module-initial-load.html
    A LayoutTests/http/tests/resources/checkResourcePriority.js
    M Source/WebCore/Headers.cmake
    M Source/WebCore/Modules/fetch/FetchLoader.cpp
    M Source/WebCore/Modules/fetch/FetchRequest.cpp
    M Source/WebCore/Modules/fetch/FetchRequest.h
    M Source/WebCore/Modules/fetch/RequestPriority.h
    M Source/WebCore/bindings/js/CachedScriptFetcher.cpp
    M Source/WebCore/bindings/js/CachedScriptFetcher.h
    M Source/WebCore/dom/InlineClassicScript.cpp
    M Source/WebCore/dom/LoadableClassicScript.cpp
    M Source/WebCore/dom/LoadableClassicScript.h
    M Source/WebCore/dom/LoadableImportMap.cpp
    M Source/WebCore/dom/LoadableModuleScript.cpp
    M Source/WebCore/dom/LoadableModuleScript.h
    M Source/WebCore/dom/LoadableScript.h
    M Source/WebCore/dom/ScriptElement.cpp
    M Source/WebCore/dom/ScriptElement.h
    M Source/WebCore/dom/ScriptElementCachedScriptFetcher.h
    M Source/WebCore/html/HTMLImageElement.cpp
    M Source/WebCore/html/HTMLImageElement.h
    M Source/WebCore/html/HTMLLinkElement.cpp
    M Source/WebCore/html/HTMLLinkElement.h
    M Source/WebCore/html/HTMLScriptElement.cpp
    M Source/WebCore/html/HTMLScriptElement.h
    M Source/WebCore/html/parser/HTMLPreloadScanner.cpp
    M Source/WebCore/html/parser/HTMLResourcePreloader.cpp
    M Source/WebCore/html/parser/HTMLResourcePreloader.h
    M Source/WebCore/loader/ImageLoader.cpp
    M Source/WebCore/loader/LinkHeader.cpp
    M Source/WebCore/loader/LinkHeader.h
    M Source/WebCore/loader/LinkLoader.cpp
    M Source/WebCore/loader/LinkLoader.h
    M Source/WebCore/loader/ResourceLoaderOptions.h
    M Source/WebCore/loader/ThreadableLoader.cpp
    M Source/WebCore/loader/cache/CachedResource.cpp
    M Source/WebCore/loader/cache/CachedResource.h
    M Source/WebCore/loader/cache/CachedResourceLoader.cpp
    M Source/WebCore/loader/cache/CachedResourceRequest.h
    M Source/WebCore/testing/Internals.cpp
    M Source/WebCore/testing/Internals.h
    M Source/WebCore/testing/Internals.idl

  Log Message:
  -----------
  Implement Priority Hints
https://bugs.webkit.org/show_bug.cgi?id=252739

Reviewed by Youenn Fablet.

Implement Priority Hints [1], specifically covering:
- processing the priority hint passed using fetch API [2]
- processing the priority hint for images
- processing the priority hint for scripts, both classic and module
- processing the priority hint for the link element
- processing the priority hint for the link HTTP header
- processing the priority hint in the html resource preloader

Tests are added covering this, including both dynamically inserting
elements (script/image/link) as well as static html.

The actual priority hint functionality consists of decreasing/increasing the
computed priority in the request for fetchpriority=low/high respectively, clamping
to the very low/very high limits.

[1] https://html.spec.whatwg.org/#fetch-and-process-the-linked-resource
[2] https://fetch.spec.whatwg.org/#dom-requestinit-priority

* LayoutTests/http/tests/priority-hints/fetch-api-priority-expected.txt: Added.
* LayoutTests/http/tests/priority-hints/fetch-api-priority.html: Added.
* LayoutTests/http/tests/priority-hints/image-dynamic-insertion-expected.txt: Added.
* LayoutTests/http/tests/priority-hints/image-dynamic-insertion.html: Added.
* LayoutTests/http/tests/priority-hints/image-initial-load-expected.txt: Added.
* LayoutTests/http/tests/priority-hints/image-initial-load.html: Added.
* LayoutTests/http/tests/priority-hints/link-dynamic-insertion-expected.txt: Added.
* LayoutTests/http/tests/priority-hints/link-dynamic-insertion.html: Added.
* LayoutTests/http/tests/priority-hints/link-header-fetch-priority-expected.txt: Added.
* LayoutTests/http/tests/priority-hints/link-header-fetch-priority.py: Added.
* LayoutTests/http/tests/priority-hints/link-preload-dynamic-insertion-expected.txt: Added.
* LayoutTests/http/tests/priority-hints/link-preload-dynamic-insertion.html: Added.
* LayoutTests/http/tests/priority-hints/link-preload-initial-load-expected.txt: Added.
* LayoutTests/http/tests/priority-hints/link-preload-initial-load.html: Added.
* LayoutTests/http/tests/priority-hints/link-stylesheet-initial-load-expected.txt: Added.
* LayoutTests/http/tests/priority-hints/link-stylesheet-initial-load.html: Added.
* LayoutTests/http/tests/priority-hints/script-async-initial-load-expected.txt: Added.
* LayoutTests/http/tests/priority-hints/script-async-initial-load.html: Added.
* LayoutTests/http/tests/priority-hints/script-dynamic-insertion-expected.txt: Added.
* LayoutTests/http/tests/priority-hints/script-dynamic-insertion.html: Added.
* LayoutTests/http/tests/priority-hints/script-initial-load-expected.txt: Added.
* LayoutTests/http/tests/priority-hints/script-initial-load.html: Added.
* LayoutTests/http/tests/priority-hints/script-module-initial-load-expected.txt: Added.
* LayoutTests/http/tests/priority-hints/script-module-initial-load.html: Added.
* LayoutTests/http/tests/resources/checkResourcePriority.js: Added.
(checkResourcePriority):
* Source/WebCore/Headers.cmake:
* Source/WebCore/Modules/fetch/FetchLoader.cpp:
(WebCore::FetchLoader::start):
* Source/WebCore/Modules/fetch/FetchRequest.cpp:
(WebCore::buildOptions):
(WebCore::FetchRequest::initializeOptions):
(WebCore::FetchRequest::initializeWith):
* Source/WebCore/Modules/fetch/FetchRequest.h:
* Source/WebCore/Modules/fetch/RequestPriority.h:
* Source/WebCore/bindings/js/CachedScriptFetcher.cpp:
(WebCore::CachedScriptFetcher::requestScriptWithCache const): pass priority hint to the cached resource request
* Source/WebCore/bindings/js/CachedScriptFetcher.h:
(WebCore::CachedScriptFetcher::CachedScriptFetcher):
* Source/WebCore/dom/InlineClassicScript.cpp:
(WebCore::InlineClassicScript::InlineClassicScript):
* Source/WebCore/dom/LoadableClassicScript.cpp:
(WebCore::LoadableNonModuleScriptBase::LoadableNonModuleScriptBase):
(WebCore::LoadableClassicScript::create):
(WebCore::LoadableClassicScript::LoadableClassicScript):
* Source/WebCore/dom/LoadableClassicScript.h:
* Source/WebCore/dom/LoadableImportMap.cpp:
(WebCore::LoadableImportMap::LoadableImportMap):
* Source/WebCore/dom/LoadableModuleScript.cpp:
(WebCore::LoadableModuleScript::create):
(WebCore::LoadableModuleScript::LoadableModuleScript):
* Source/WebCore/dom/LoadableModuleScript.h:
* Source/WebCore/dom/LoadableScript.h:
(WebCore::LoadableScript::LoadableScript):
* Source/WebCore/dom/ScriptElement.cpp:
(WebCore::ScriptElement::requestClassicScript):
(WebCore::ScriptElement::requestModuleScript):
* Source/WebCore/dom/ScriptElement.h:
(WebCore::ScriptElement::fetchPriorityHint const):
* Source/WebCore/dom/ScriptElementCachedScriptFetcher.h:
(WebCore::ScriptElementCachedScriptFetcher::ScriptElementCachedScriptFetcher):
* Source/WebCore/html/HTMLImageElement.cpp:
(WebCore::HTMLImageElement::fetchPriorityForBindings const):
(WebCore::HTMLImageElement::fetchPriorityHint const):
* Source/WebCore/html/HTMLImageElement.h:
* Source/WebCore/html/HTMLLinkElement.cpp:
(WebCore::HTMLLinkElement::process): pass priority hint to the cached resource request
(WebCore::HTMLLinkElement::fetchPriorityForBindings const):
(WebCore::HTMLLinkElement::fetchPriorityHint const):
* Source/WebCore/html/HTMLLinkElement.h:
* Source/WebCore/html/HTMLScriptElement.cpp:
(WebCore::HTMLScriptElement::fetchPriorityForBindings const):
(WebCore::HTMLScriptElement::fetchPriorityHint const):
* Source/WebCore/html/HTMLScriptElement.h:
* Source/WebCore/html/parser/HTMLPreloadScanner.cpp:
(WebCore::TokenPreloadScanner::StartTagScanner::createPreloadRequest):
(WebCore::TokenPreloadScanner::StartTagScanner::processAttribute):
* Source/WebCore/html/parser/HTMLResourcePreloader.cpp: handle fetch priority in preloading for image/script/link
(WebCore::PreloadRequest::resourceRequest): pass priority hint to the cached resource request
* Source/WebCore/html/parser/HTMLResourcePreloader.h:
(WebCore::PreloadRequest::PreloadRequest):
* Source/WebCore/loader/ImageLoader.cpp:
(WebCore::ImageLoader::updateFromElement): pass priority hint to the cached resource request
* Source/WebCore/loader/LinkHeader.cpp: parse fetchpriority link header
(WebCore::parameterNameFromString):
(WebCore::LinkHeader::setValue):
* Source/WebCore/loader/LinkHeader.h:
(WebCore::LinkHeader::fetchPriorityHint const):
* Source/WebCore/loader/LinkLoader.cpp:
(WebCore::LinkLoader::loadLinksFromHeader):
(WebCore::LinkLoader::preloadIfNeeded): pass priority hint to the cached resource request
* Source/WebCore/loader/LinkLoader.h:
* Source/WebCore/loader/ResourceLoaderOptions.h:
(WebCore::ResourceLoaderOptions::fetchPriorityHint):
(WebCore::ResourceLoaderOptions::ResourceLoaderOptions):
(WebCore::ResourceLoaderOptions::loadedFromPluginElement): Deleted.
* Source/WebCore/loader/ThreadableLoader.cpp:
(WebCore::ThreadableLoaderOptions::isolatedCopy const):
* Source/WebCore/loader/cache/CachedResource.cpp:
(WebCore::CachedResource::CachedResource):
(WebCore::CachedResource::setLoadPriority): actually calculate final priority taking the hint into account
* Source/WebCore/loader/cache/CachedResource.h:
* Source/WebCore/loader/cache/CachedResourceLoader.cpp:
(WebCore::CachedResourceLoader::requestResource):
* Source/WebCore/loader/cache/CachedResourceRequest.h:
(WebCore::CachedResourceRequest::fetchPriorityHint const):
* Source/WebCore/testing/Internals.cpp: add API to get the priority used in the resource request
(WebCore::toInternalsResourceLoadPriority):
(WebCore::Internals::getResourcePriority):
* Source/WebCore/testing/Internals.h:
* Source/WebCore/testing/Internals.idl:

Canonical link: https://commits.webkit.org/261689@main




More information about the webkit-changes mailing list