Branch: refs/heads/main Home: https://github.com/WebKit/WebKit Commit: 19c5bd914bfa1fb024e81ef201480315edd4bb7d https://github.com/WebKit/WebKit/commit/19c5bd914bfa1fb024e81ef201480315edd4bb7d Author: Antoine Quint <grao...@webkit.org> Date: 2024-04-29 (Mon, 29 Apr 2024)
Changed paths: A LayoutTests/imported/w3c/web-platform-tests/css/css-transitions/shadow-root-insertion-expected.txt A LayoutTests/imported/w3c/web-platform-tests/css/css-transitions/shadow-root-insertion.html M Source/WebCore/dom/Element.cpp M Source/WebCore/rendering/updating/RenderTreeUpdater.cpp M Source/WebCore/rendering/updating/RenderTreeUpdater.h Log Message: ----------- pral.com.pk - Double bounce animation compared to other browsers https://bugs.webkit.org/show_bug.cgi?id=273364 rdar://127188948 Reviewed by Antti Koivisto. The site pral.com.pk has a list of images under their "ISO CERTIFICATIONS" section that are badges with text rendered within the raster image. Those images run a transition when hovered. After a short while, the transition is restarted, and this only happens in Safari, and only the first time a given image is hovered. WebKit in Safari supports text recognition within images, performed asynchronously, and when text is detected a user-agent shadow root is inserted within the <img> element to show additional UI. The addition of a shadow root triggers a full renderer rebuild and this has the side effect of canceling all running style-originated animations on that element. This explains why the transition appears to restart, because the initial transition is canceled once text recognition succeeds, and since the cursor is still over the image, a new transition immediately starts. Since the user-agent shadow root remains attached, hovering over the image a second time does not exhibit the behavior. We fixed a similar issue in the past with 240582@main to deal with a slot change while a transition is running on an element and introduced a dedicated `TeardownType` value that distinguishes a full rebuild from a rebuild resulting from a slot change. We follow the same approach for the case where a shadow root is inserted, adding a new `tearDownRenderersForShadowRootInsertion()` method which will call the same logic as `tearDownRenderersAfterSlotChange()`, with an inverse assertion as to whether the provided element has a shadow root attached. This prompted some refactoring of `tearDownRenderers()` as well since there is a lot of shared code with the aforementioned methods. We test this with a new WPT test that would fail prior to this change but already works in Chrome and Firefox. * LayoutTests/imported/w3c/web-platform-tests/css/css-transitions/shadow-root-insertion-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/css/css-transitions/shadow-root-insertion.html: Added. * Source/WebCore/dom/Element.cpp: (WebCore::Element::addShadowRoot): * Source/WebCore/rendering/updating/RenderTreeUpdater.cpp: (WebCore::RenderTreeUpdater::tearDownRenderers): (WebCore::RenderTreeUpdater::tearDownRenderersForShadowRootInsertion): (WebCore::RenderTreeUpdater::tearDownRenderersAfterSlotChange): * Source/WebCore/rendering/updating/RenderTreeUpdater.h: Canonical link: https://commits.webkit.org/278156@main To unsubscribe from these emails, change your notification settings at https://github.com/WebKit/WebKit/settings/notifications _______________________________________________ webkit-changes mailing list webkit-changes@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-changes