Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 0e9bbd960894d8981be0d59b235924329a6c1b4f
      
https://github.com/WebKit/WebKit/commit/0e9bbd960894d8981be0d59b235924329a6c1b4f
  Author: Matt Woodrow <[email protected]>
  Date:   2024-08-15 (Thu, 15 Aug 2024)

  Changed paths:
    M LayoutTests/TestExpectations
    M 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/blocking-idl-attr-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/element-render-blocking-002-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/element-render-blocking-004-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/element-render-blocking-005-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/element-render-blocking-007-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/element-render-blocking-009-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/element-render-blocking-010-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/element-render-blocking-013-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/element-render-blocking-014-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/element-render-blocking-015-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/element-render-blocking-016-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/element-render-blocking-017-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/element-render-blocking-018-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/element-render-blocking-019-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/element-render-blocking-020-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/element-render-blocking-021-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/element-render-blocking-022-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/element-render-blocking-023-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/element-render-blocking-025-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/element-render-blocking-026-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/element-render-blocking-028-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/element-render-blocking-029-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/element-render-blocking-030-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/element-render-blocking-031-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/element-render-blocking-032-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/element-render-blocking-034-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/element-render-blocking-035-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/element-render-blocking-036-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/element-render-blocking-037-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/element-render-blocking-038-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/remove-element-unblocks-rendering.optional-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/support/utils.js
    A LayoutTests/imported/w3c/web-platform-tests/loading/resources/dummy.js
    M LayoutTests/platform/glib/TestExpectations
    M Source/WebCore/dom/Document.cpp
    M Source/WebCore/dom/Document.h
    M Source/WebCore/html/HTMLAnchorElement.cpp
    M Source/WebCore/html/HTMLAnchorElement.h
    M Source/WebCore/html/HTMLAttributeNames.in
    M Source/WebCore/html/HTMLLinkElement.cpp
    M Source/WebCore/html/HTMLLinkElement.h
    M Source/WebCore/html/HTMLLinkElement.idl
    M Source/WebCore/html/LinkRelAttribute.cpp
    M Source/WebCore/html/LinkRelAttribute.h

  Log Message:
  -----------
  Document render-blocking with <link rel=expect>
https://bugs.webkit.org/show_bug.cgi?id=268743
<rdar://122797243>

Reviewed by Tim Nguyen.

Implements the render-blocking concept on Document, and the rel=expect 
attribute for <link>.
https://html.spec.whatwg.org/multipage/dom.html#block-rendering

utils.js changed to generate a unique URL for each parser delay, otherwise we
cache the loads (which may not be spec compliant, but unrelated to
render-blocking).

Render blocking uses the existing code addVisualUpdatePreventedReason to 
prevent rendering, and rAF.

Some of the test fail because they have no render blocking (since an attempt was
rejected due to a mismatched media query or similar). These tests expect
rendering to happen mid-parsing, but don't due to our existing layer tree
freezing code. I've opted not to change the existing behaviour for now, and only
have this kick in when there is explicit (and active) render blocking elements.

As an optimization, when an <a> element changes, we pass that element into the 
'process internal
resource links' algorithm. Rather than doing a tree search for each link 
looking for matching anchors,
we can just directly check if the link matches the mutated <a>.

* LayoutTests/TestExpectations:
* 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/element-render-blocking-002-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/element-render-blocking-004-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/element-render-blocking-005-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/element-render-blocking-007-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/element-render-blocking-009-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/element-render-blocking-010-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/element-render-blocking-013-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/element-render-blocking-014-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/element-render-blocking-015-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/element-render-blocking-016-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/element-render-blocking-017-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/element-render-blocking-018-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/element-render-blocking-019-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/element-render-blocking-020-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/element-render-blocking-021-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/element-render-blocking-022-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/element-render-blocking-023-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/element-render-blocking-025-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/element-render-blocking-026-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/element-render-blocking-028-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/element-render-blocking-029-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/element-render-blocking-030-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/element-render-blocking-031-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/element-render-blocking-032-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/element-render-blocking-034-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/element-render-blocking-035-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/element-render-blocking-036-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/element-render-blocking-037-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/element-render-blocking-038-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/remove-element-unblocks-rendering.optional-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/html/dom/render-blocking/support/utils.js:
(generateParserDelay):
* LayoutTests/imported/w3c/web-platform-tests/loading/resources/dummy.js: Added.
* LayoutTests/platform/glib/TestExpectations:
* Source/WebCore/dom/Document.cpp:
(WebCore::Document::setReadyState):
(WebCore::Document::setVisualUpdatesAllowed):
(WebCore::Document::addVisualUpdatePreventedReason):
(WebCore::Document::removeVisualUpdatePreventedReason):
(WebCore::Document::visualUpdatesSuppressionTimerFired):
(WebCore::Document::setVisualUpdatesAllowedByClient):
(WebCore::Document::suspend):
(WebCore::Document::resume):
(WebCore::Document::allowsAddingRenderBlockedElements const):
(WebCore::Document::isRenderBlocked const):
(WebCore::Document::blockRenderingOn):
(WebCore::Document::unblockRenderingOn):
(WebCore::Document::processInternalResourceLinks):
* Source/WebCore/dom/Document.h:
(WebCore::Document::visualUpdatesAllowed const):
* Source/WebCore/html/HTMLAnchorElement.cpp:
(WebCore::HTMLAnchorElement::attributeChanged):
(WebCore::HTMLAnchorElement::insertedIntoAncestor):
* Source/WebCore/html/HTMLAnchorElement.h:
* Source/WebCore/html/HTMLAttributeNames.in:
* Source/WebCore/html/HTMLLinkElement.cpp:
(WebCore::ExpectIdTargetObserver::ExpectIdTargetObserver):
(WebCore::ExpectIdTargetObserver::idTargetChanged):
(WebCore::HTMLLinkElement::attributeChanged):
(WebCore::HTMLLinkElement::process):
(WebCore::HTMLLinkElement::processInternalResourceLink):
(WebCore::HTMLLinkElement::unblockRendering):
(WebCore::HTMLLinkElement::removedFromAncestor):
(WebCore::HTMLLinkElement::blocking):
* Source/WebCore/html/HTMLLinkElement.h:
* Source/WebCore/html/HTMLLinkElement.idl:
* Source/WebCore/html/LinkRelAttribute.cpp:
(WebCore::LinkRelAttribute::LinkRelAttribute):
* Source/WebCore/html/LinkRelAttribute.h:

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



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to