Bug 1304011 - Part 1. Do not merge nsDisplayMask with css mask.
MozReview-Commit-ID: 9Y8ccNieOF4
--- a/layout/base/nsDisplayList.cpp
+++ b/layout/base/nsDisplayList.cpp
@@ -6833,20 +6833,28 @@ bool nsDisplayMask::TryMerge(nsDisplayIt
// compositing group
// aItem->GetUnderlyingFrame() returns non-null because it's nsDisplaySVGEffects
if (aItem->Frame()->GetContent() != mFrame->GetContent())
return false;
if (aItem->GetClip() != GetClip())
return false;
if (aItem->ScrollClip() != ScrollClip())
return false;
+
+ // Do not merge if mFrame has mask. Continuation frames should apply mask
+ // independently(just like nsDisplayBackgroundImage).
+ const nsStyleSVGReset *style = mFrame->StyleSVGReset();
+ if (style->mMask.HasLayerWithImage())
+ return false;
+
nsDisplayMask* other = static_cast<nsDisplayMask*>(aItem);
MergeFromTrackingMergedFrames(other);
mEffectsBounds.UnionRect(mEffectsBounds,
other->mEffectsBounds + other->mFrame->GetOffsetTo(mFrame));
+
return true;
}
already_AddRefed<Layer>
nsDisplayMask::BuildLayer(nsDisplayListBuilder* aBuilder,
LayerManager* aManager,
const ContainerLayerParameters& aContainerParameters)
{