Bug 1875707 - Fix webrender filters when applied to continuation or split frames r=emilio

Differential Revision: https://phabricator.services.mozilla.com/D199218
This commit is contained in:
Robert Longson 2024-01-23 11:41:23 +00:00
parent 0695aa49fe
commit 932ded15b6
3 changed files with 24 additions and 12 deletions

View file

@ -157,33 +157,31 @@ bool FilterInstance::BuildWebRenderFiltersImpl(nsIFrame* aFilteredFrame,
aWrFilters.filter_datas.Clear();
aWrFilters.values.Clear();
if (aFilteredFrame->GetPrevContinuation()) {
aInitialized = false;
return true;
}
nsIFrame* firstFrame =
nsLayoutUtils::FirstContinuationOrIBSplitSibling(aFilteredFrame);
nsTArray<SVGFilterFrame*> filterFrames;
if (SVGObserverUtils::GetAndObserveFilters(aFilteredFrame, &filterFrames,
if (SVGObserverUtils::GetAndObserveFilters(firstFrame, &filterFrames,
aStyleFilterType) ==
SVGObserverUtils::eHasRefsSomeInvalid) {
aInitialized = false;
return true;
}
UniquePtr<UserSpaceMetrics> metrics =
UserSpaceMetricsForFrame(aFilteredFrame);
UniquePtr<UserSpaceMetrics> metrics = UserSpaceMetricsForFrame(firstFrame);
// TODO: simply using an identity matrix here, was pulling the scale from a
// gfx context for the non-wr path.
gfxMatrix scaleMatrix;
gfxMatrix scaleMatrixInDevUnits =
scaleMatrix * SVGUtils::GetCSSPxToDevPxMatrix(aFilteredFrame);
scaleMatrix * SVGUtils::GetCSSPxToDevPxMatrix(firstFrame);
// Hardcode inputIsTainted to true because we don't want JS to be able to
// read the rendered contents of aFilteredFrame.
FilterInstance instance(
aFilteredFrame, aFilteredFrame->GetContent(), *metrics, aFilters,
filterFrames, /* inputIsTainted */ true, nullptr, scaleMatrixInDevUnits,
nullptr, nullptr, nullptr, nullptr);
FilterInstance instance(firstFrame, firstFrame->GetContent(), *metrics,
aFilters, filterFrames, /* inputIsTainted */ true,
nullptr, scaleMatrixInDevUnits, nullptr, nullptr,
nullptr, nullptr);
if (!instance.IsInitialized()) {
aInitialized = false;

View file

@ -0,0 +1,6 @@
<!DOCTYPE html>
<html>
<body>
<p style="max-inline-size: 30ch;"><span style="filter: blur(4px);">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris ac diam risus. Aenean condimentum velit in arcu gravida, vel placerat nibh eleifend. Phasellus purus dolor, interdum sed quam vel, auctor pretium odio. Aliquam urna tortor, dictum ut dapibus quis, euismod eget diam. Vestibulum ultrices dapibus ornare. Morbi tempor diam urna, nec sollicitudin nunc mollis sed. Curabitur id turpis leo. Mauris semper felis felis, sit amet pretium sem imperdiet sit amet. Vivamus tincidunt dictum sapien nec faucibus. Vivamus blandit magna sit amet interdum faucibus.</span></p>
</body>
</html>

View file

@ -0,0 +1,8 @@
<!DOCTYPE html>
<html>
<title>Blur text</title>
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#funcdef-filter-blur">
<link rel="match" href="blur-text-ref.html">
<body>
<p style="max-inline-size: 30ch;"><span style="filter: url(&quot;data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg'><filter id='blur'><feGaussianBlur stdDeviation='4' /></filter></svg>#blur&quot;);">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris ac diam risus. Aenean condimentum velit in arcu gravida, vel placerat nibh eleifend. Phasellus purus dolor, interdum sed quam vel, auctor pretium odio. Aliquam urna tortor, dictum ut dapibus quis, euismod eget diam. Vestibulum ultrices dapibus ornare. Morbi tempor diam urna, nec sollicitudin nunc mollis sed. Curabitur id turpis leo. Mauris semper felis felis, sit amet pretium sem imperdiet sit amet. Vivamus tincidunt dictum sapien nec faucibus. Vivamus blandit magna sit amet interdum faucibus.</span></p>
</body>