Bug 1077872 - Implement rendering of isolation CSS property. r=roc
--- a/layout/generic/nsFrame.cpp
+++ b/layout/generic/nsFrame.cpp
@@ -2308,16 +2308,17 @@ nsIFrame::BuildDisplayListForChild(nsDis
|| disp->mMixBlendMode != NS_STYLE_BLEND_NORMAL
|| nsSVGIntegrationUtils::UsingEffectsForFrame(child);
bool isPositioned = disp->IsPositioned(child);
bool isStackingContext =
(isPositioned && (disp->mPosition == NS_STYLE_POSITION_STICKY ||
pos->mZIndex.GetUnit() == eStyleUnit_Integer)) ||
(disp->mWillChangeBitField & NS_STYLE_WILL_CHANGE_STACKING_CONTEXT) ||
+ disp->mIsolation != NS_STYLE_ISOLATION_AUTO ||
isVisuallyAtomic || (aFlags & DISPLAY_CHILD_FORCE_STACKING_CONTEXT);
if (isVisuallyAtomic || isPositioned || (!isSVG && disp->IsFloating(child)) ||
((disp->mClipFlags & NS_STYLE_CLIP_RECT) &&
IsSVGContentWithCSSClip(child)) ||
(disp->mWillChangeBitField & NS_STYLE_WILL_CHANGE_STACKING_CONTEXT) ||
(aFlags & DISPLAY_CHILD_FORCE_STACKING_CONTEXT)) {
// If you change this, also change IsPseudoStackingContextFromStyle()
new file mode 100644
--- /dev/null
+++ b/layout/reftests/css-blending/blend-isolation-ref.html
@@ -0,0 +1,15 @@
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+<style>
+#a {
+ background-color: rgb(0,255,0);
+ width: 200px;
+ height: 210px;
+}
+</style>
+<div id="a">
+</div>
+</html>
new file mode 100644
--- /dev/null
+++ b/layout/reftests/css-blending/blend-isolation.html
@@ -0,0 +1,28 @@
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+<style>
+.a {
+ background-color: rgb(0,255,0);
+}
+#b {
+ width: 200px;
+ height: 210px;
+}
+.c {
+ width: 100px;
+ height: 100px;
+ mix-blend-mode: difference;
+}
+#d {
+ isolation: isolate;
+}
+</style>
+<div id="b" class="a">
+ <div id="d">
+ <div class="a c"></div>
+ </div>
+</div>
+</html>
--- a/layout/reftests/css-blending/reftest.list
+++ b/layout/reftests/css-blending/reftest.list
@@ -79,8 +79,11 @@ pref(layout.css.background-blend-mode.en
# Test plan 5.3.11 background-blend-mode for an element with background-attachement
pref(layout.css.background-blend-mode.enabled,true) == background-blending-background-attachement-fixed.html background-blending-background-attachement-fixed-ref.html
pref(layout.css.background-blend-mode.enabled,true) == background-blending-background-attachement-fixed-scroll.html background-blending-background-attachement-fixed-scroll-ref.html
pref(layout.css.background-blend-mode.enabled,true) == background-blend-mode-body-image.html background-blend-mode-body-image-ref.html
pref(layout.css.background-blend-mode.enabled,true) == background-blend-mode-body-transparent-image.html background-blend-mode-body-transparent-image-ref.html
pref(layout.css.background-blend-mode.enabled,true) == background-blending-moz-element.html background-blending-moz-element-ref.html
+
+# Test plan 4.4.2 element with isolation:isolate creates an isolated group for blended children
+pref(layout.css.isolation.enabled,true) == blend-isolation.html blend-isolation-ref.html