Commit 820c25f5 authored by Fredrik Söderqvist's avatar Fredrik Söderqvist Committed by Chromium LUCI CQ

Prevent underinvalidation of <pattern> with template

If the pattern resource is marked for layout via a mechanism that does
not invalidate its attributes - for example by changing a style property
that only requires paint invalidation - a call to
LayoutSVGResourceContainer::InvalidateCacheAndMarkForLayout() will fail
to properly invalidate attributes, which leaves the pattern in an
inconsistent state.
Drop the early-out check for SelfNeedsLayout() in said method so that
RemoveAllClientsFromCache() is called in the above case as well.

Bug: 1167563
Change-Id: Ib5896da9e52a103b86dc6eb7ad08e30a572b6d22
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2642777Reviewed-by: default avatarStephen Chenney <schenney@chromium.org>
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#845766}
parent bbaba63f
......@@ -211,9 +211,6 @@ void LayoutSVGResourceContainer::InvalidateCacheAndMarkForLayout(
LayoutInvalidationReasonForTracing reason,
SubtreeLayoutScope* layout_scope) {
NOT_DESTROYED();
if (SelfNeedsLayout())
return;
SetNeedsLayoutAndFullPaintInvalidation(reason, kMarkContainerChain,
layout_scope);
......
<svg xmlns="http://www.w3.org/2000/svg" xmlns:h="http://www.w3.org/1999/xhtml"
class="reftest-wait">
<title>SVG Pattern: Inherited pattern removed after style change</title>
<h:link rel="help" href="https://svgwg.org/svg2-draft/pservers.html"/>
<h:link rel="match" href="reference/green-100x100.svg"/>
<h:script src="/common/rendering-utils.js"/>
<h:script src="/common/reftest-wait.js"/>
<pattern id="pattern" width="1" height="1">
<rect width="100" height="100" fill="orange"/>
</pattern>
<pattern id="inheritedPattern" href="#pattern"/>
<rect width="100" height="100" fill="url(#inheritedPattern) green"/>
<script>
waitForAtLeastOneFrame().then(() => {
let svg = document.querySelector('svg');
let pattern = document.getElementById("pattern");
svg.style.imageRendering = 'pixelated';
getComputedStyle(svg).imageRendering;
pattern.remove();
takeScreenshot();
});
</script>
</svg>
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment