Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "core/paint/PaintLayer.h" | 5 #include "core/paint/PaintLayer.h" |
| 6 | 6 |
| 7 #include "core/html/HTMLIFrameElement.h" | 7 #include "core/html/HTMLIFrameElement.h" |
| 8 #include "core/layout/LayoutBoxModelObject.h" | 8 #include "core/layout/LayoutBoxModelObject.h" |
| 9 #include "core/layout/LayoutTestHelper.h" | 9 #include "core/layout/LayoutTestHelper.h" |
| 10 #include "core/layout/LayoutView.h" | 10 #include "core/layout/LayoutView.h" |
| 11 #include "platform/testing/RuntimeEnabledFeaturesTestHelpers.h" | |
| 11 #include "platform/testing/UnitTestHelpers.h" | 12 #include "platform/testing/UnitTestHelpers.h" |
| 12 | 13 |
| 13 namespace blink { | 14 namespace blink { |
| 14 | 15 |
| 15 class PaintLayerTest : public RenderingTest { | 16 typedef std::pair<bool, bool> SlimmingPaintAndRootLayerScrolling; |
| 17 class PaintLayerTest | |
| 18 : public ::testing::WithParamInterface<SlimmingPaintAndRootLayerScrolling>, | |
| 19 private ScopedSlimmingPaintV2ForTest, | |
| 20 private ScopedRootLayerScrollingForTest, | |
| 21 public RenderingTest { | |
| 16 public: | 22 public: |
| 17 PaintLayerTest() : RenderingTest(SingleChildFrameLoaderClient::create()) {} | 23 PaintLayerTest() |
| 24 : ScopedSlimmingPaintV2ForTest(GetParam().first), | |
| 25 ScopedRootLayerScrollingForTest(GetParam().second), | |
| 26 RenderingTest(SingleChildFrameLoaderClient::create()) {} | |
| 18 }; | 27 }; |
| 19 | 28 |
| 20 TEST_F(PaintLayerTest, CompositedBoundsAbsPosGrandchild) { | 29 SlimmingPaintAndRootLayerScrolling foo[] = { |
| 30 SlimmingPaintAndRootLayerScrolling(false, false), | |
| 31 SlimmingPaintAndRootLayerScrolling(true, false), | |
| 32 SlimmingPaintAndRootLayerScrolling(false, true), | |
| 33 SlimmingPaintAndRootLayerScrolling(true, true)}; | |
| 34 | |
| 35 INSTANTIATE_TEST_CASE_P(All, PaintLayerTest, ::testing::ValuesIn(foo)); | |
| 36 | |
| 37 TEST_P(PaintLayerTest, CompositedBoundsAbsPosGrandchild) { | |
| 38 // TODO(chrishtr): fix this test for SPv2 | |
|
pdr.
2016/12/07 00:02:05
Can you file a bug for this?
chrishtr
2016/12/07 01:00:34
Done. crbug.com/671864
| |
| 39 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) | |
| 40 return; | |
| 41 | |
| 21 setBodyInnerHTML( | 42 setBodyInnerHTML( |
| 22 " <div id='parent'><div id='absposparent'><div id='absposchild'>" | 43 " <div id='parent'><div id='absposparent'><div id='absposchild'>" |
| 23 " </div></div></div>" | 44 " </div></div></div>" |
| 24 "<style>" | 45 "<style>" |
| 25 " #parent { position: absolute; z-index: 0; overflow: hidden;" | 46 " #parent { position: absolute; z-index: 0; overflow: hidden;" |
| 26 " background: lightgray; width: 150px; height: 150px;" | 47 " background: lightgray; width: 150px; height: 150px;" |
| 27 " will-change: transform; }" | 48 " will-change: transform; }" |
| 28 " #absposparent { position: absolute; z-index: 0; }" | 49 " #absposparent { position: absolute; z-index: 0; }" |
| 29 " #absposchild { position: absolute; top: 0px; left: 0px; height: 200px;" | 50 " #absposchild { position: absolute; top: 0px; left: 0px; height: 200px;" |
| 30 " width: 200px; background: lightblue; }</style>"); | 51 " width: 200px; background: lightblue; }</style>"); |
| 31 | 52 |
| 32 PaintLayer* parentLayer = | 53 PaintLayer* parentLayer = |
| 33 toLayoutBoxModelObject(getLayoutObjectByElementId("parent"))->layer(); | 54 toLayoutBoxModelObject(getLayoutObjectByElementId("parent"))->layer(); |
| 34 // Since "absposchild" is clipped by "parent", it should not expand the | 55 // Since "absposchild" is clipped by "parent", it should not expand the |
| 35 // composited bounds for "parent" beyond its intrinsic size of 150x150. | 56 // composited bounds for "parent" beyond its intrinsic size of 150x150. |
| 36 EXPECT_EQ(LayoutRect(0, 0, 150, 150), | 57 EXPECT_EQ(LayoutRect(0, 0, 150, 150), |
| 37 parentLayer->boundingBoxForCompositing()); | 58 parentLayer->boundingBoxForCompositing()); |
| 38 } | 59 } |
| 39 | 60 |
| 40 TEST_F(PaintLayerTest, PaintingExtentReflection) { | 61 TEST_P(PaintLayerTest, PaintingExtentReflection) { |
| 41 setBodyInnerHTML( | 62 setBodyInnerHTML( |
| 42 "<div id='target' style='background-color: blue; position: absolute;" | 63 "<div id='target' style='background-color: blue; position: absolute;" |
| 43 " width: 110px; height: 120px; top: 40px; left: 60px;" | 64 " width: 110px; height: 120px; top: 40px; left: 60px;" |
| 44 " -webkit-box-reflect: below 3px'>" | 65 " -webkit-box-reflect: below 3px'>" |
| 45 "</div>"); | 66 "</div>"); |
| 46 | 67 |
| 47 PaintLayer* layer = | 68 PaintLayer* layer = |
| 48 toLayoutBoxModelObject(getLayoutObjectByElementId("target"))->layer(); | 69 toLayoutBoxModelObject(getLayoutObjectByElementId("target"))->layer(); |
| 49 EXPECT_EQ( | 70 EXPECT_EQ( |
| 50 LayoutRect(60, 40, 110, 243), | 71 LayoutRect(60, 40, 110, 243), |
| 51 layer->paintingExtent(document().layoutView()->layer(), LayoutSize(), 0)); | 72 layer->paintingExtent(document().layoutView()->layer(), LayoutSize(), 0)); |
| 52 } | 73 } |
| 53 | 74 |
| 54 TEST_F(PaintLayerTest, PaintingExtentReflectionWithTransform) { | 75 TEST_P(PaintLayerTest, PaintingExtentReflectionWithTransform) { |
| 55 setBodyInnerHTML( | 76 setBodyInnerHTML( |
| 56 "<div id='target' style='background-color: blue; position: absolute;" | 77 "<div id='target' style='background-color: blue; position: absolute;" |
| 57 " width: 110px; height: 120px; top: 40px; left: 60px;" | 78 " width: 110px; height: 120px; top: 40px; left: 60px;" |
| 58 " -webkit-box-reflect: below 3px; transform: translateX(30px)'>" | 79 " -webkit-box-reflect: below 3px; transform: translateX(30px)'>" |
| 59 "</div>"); | 80 "</div>"); |
| 60 | 81 |
| 61 PaintLayer* layer = | 82 PaintLayer* layer = |
| 62 toLayoutBoxModelObject(getLayoutObjectByElementId("target"))->layer(); | 83 toLayoutBoxModelObject(getLayoutObjectByElementId("target"))->layer(); |
| 63 EXPECT_EQ( | 84 EXPECT_EQ( |
| 64 LayoutRect(90, 40, 110, 243), | 85 LayoutRect(90, 40, 110, 243), |
| 65 layer->paintingExtent(document().layoutView()->layer(), LayoutSize(), 0)); | 86 layer->paintingExtent(document().layoutView()->layer(), LayoutSize(), 0)); |
| 66 } | 87 } |
| 67 | 88 |
| 68 TEST_F(PaintLayerTest, CompositedScrollingNoNeedsRepaint) { | 89 TEST_P(PaintLayerTest, ScrollsWithViewportRelativePosition) { |
| 90 setBodyInnerHTML("<div id='target' style='position: relative'></div>"); | |
| 91 | |
| 92 PaintLayer* layer = | |
| 93 toLayoutBoxModelObject(getLayoutObjectByElementId("target"))->layer(); | |
| 94 EXPECT_FALSE(layer->sticksToViewport()); | |
| 95 } | |
| 96 | |
| 97 TEST_P(PaintLayerTest, ScrollsWithViewportFixedPosition) { | |
| 98 setBodyInnerHTML("<div id='target' style='position: fixed'></div>"); | |
| 99 | |
| 100 PaintLayer* layer = | |
| 101 toLayoutBoxModelObject(getLayoutObjectByElementId("target"))->layer(); | |
| 102 EXPECT_TRUE(layer->sticksToViewport()); | |
| 103 } | |
| 104 | |
| 105 TEST_P(PaintLayerTest, ScrollsWithViewportFixedPositionInsideTransform) { | |
| 106 // We don't intend to launch SPv2 without root layer scrolling, so skip this | |
| 107 // test in that configuration because it's broken. | |
| 108 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled() && | |
| 109 !RuntimeEnabledFeatures::rootLayerScrollingEnabled()) | |
| 110 return; | |
| 111 setBodyInnerHTML( | |
| 112 "<div style='transform: translateZ(0)'>" | |
| 113 " <div id='target' style='position: fixed'></div>" | |
| 114 "</div>" | |
| 115 "<div style='width: 10px; height: 1000px'></div>"); | |
| 116 PaintLayer* layer = | |
| 117 toLayoutBoxModelObject(getLayoutObjectByElementId("target"))->layer(); | |
| 118 EXPECT_FALSE(layer->sticksToViewport()); | |
| 119 } | |
| 120 | |
| 121 TEST_P(PaintLayerTest, | |
| 122 ScrollsWithViewportFixedPositionInsideTransformNoScroll) { | |
| 123 setBodyInnerHTML( | |
| 124 "<div style='transform: translateZ(0)'>" | |
| 125 " <div id='target' style='position: fixed'></div>" | |
| 126 "</div>"); | |
| 127 PaintLayer* layer = | |
| 128 toLayoutBoxModelObject(getLayoutObjectByElementId("target"))->layer(); | |
| 129 | |
| 130 // In SPv2 mode, we correctly determine that the frame doesn't scroll at all, | |
| 131 // and so return true. | |
| 132 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) | |
| 133 EXPECT_TRUE(layer->sticksToViewport()); | |
| 134 else | |
| 135 EXPECT_FALSE(layer->sticksToViewport()); | |
| 136 } | |
| 137 | |
| 138 TEST_P(PaintLayerTest, ScrollsWithViewportStickyPosition) { | |
| 139 setBodyInnerHTML( | |
| 140 "<div style='transform: translateZ(0)'>" | |
| 141 " <div id='target' style='position: sticky'></div>" | |
| 142 "</div>" | |
| 143 "<div style='width: 10px; height: 1000px'></div>"); | |
| 144 | |
| 145 PaintLayer* layer = | |
| 146 toLayoutBoxModelObject(getLayoutObjectByElementId("target"))->layer(); | |
| 147 EXPECT_TRUE(layer->sticksToViewport()); | |
| 148 } | |
| 149 | |
| 150 TEST_P(PaintLayerTest, ScrollsWithViewportStickyPositionNoScroll) { | |
| 151 setBodyInnerHTML( | |
| 152 "<div style='transform: translateZ(0)'>" | |
| 153 " <div id='target' style='position: sticky'></div>" | |
| 154 "</div>"); | |
| 155 | |
| 156 PaintLayer* layer = | |
| 157 toLayoutBoxModelObject(getLayoutObjectByElementId("target"))->layer(); | |
| 158 EXPECT_TRUE(layer->sticksToViewport()); | |
| 159 } | |
| 160 | |
| 161 TEST_P(PaintLayerTest, ScrollsWithViewportStickyPositionInsideScroller) { | |
| 162 setBodyInnerHTML( | |
| 163 "<div style='overflow:scroll; width: 100px; height: 100px;'>" | |
| 164 " <div id='target' style='position: sticky'></div>" | |
| 165 " <div style='width: 50px; height: 1000px;'></div>" | |
| 166 "</div>"); | |
| 167 | |
| 168 PaintLayer* layer = | |
| 169 toLayoutBoxModelObject(getLayoutObjectByElementId("target"))->layer(); | |
| 170 EXPECT_FALSE(layer->sticksToViewport()); | |
| 171 } | |
| 172 | |
| 173 TEST_P(PaintLayerTest, CompositedScrollingNoNeedsRepaint) { | |
| 174 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) | |
| 175 return; | |
| 176 | |
| 69 enableCompositing(); | 177 enableCompositing(); |
| 70 setBodyInnerHTML( | 178 setBodyInnerHTML( |
| 71 "<div id='scroll' style='width: 100px; height: 100px; overflow: scroll;" | 179 "<div id='scroll' style='width: 100px; height: 100px; overflow: scroll;" |
| 72 " will-change: transform'>" | 180 " will-change: transform'>" |
| 73 " <div id='content' style='position: relative; background: blue;" | 181 " <div id='content' style='position: relative; background: blue;" |
| 74 " width: 2000px; height: 2000px'></div>" | 182 " width: 2000px; height: 2000px'></div>" |
| 75 "</div>"); | 183 "</div>"); |
| 76 | 184 |
| 77 PaintLayer* scrollLayer = | 185 PaintLayer* scrollLayer = |
| 78 toLayoutBoxModelObject(getLayoutObjectByElementId("scroll"))->layer(); | 186 toLayoutBoxModelObject(getLayoutObjectByElementId("scroll"))->layer(); |
| 79 EXPECT_EQ(PaintsIntoOwnBacking, scrollLayer->compositingState()); | 187 EXPECT_EQ(PaintsIntoOwnBacking, scrollLayer->compositingState()); |
| 80 | 188 |
| 81 PaintLayer* contentLayer = | 189 PaintLayer* contentLayer = |
| 82 toLayoutBoxModelObject(getLayoutObjectByElementId("content"))->layer(); | 190 toLayoutBoxModelObject(getLayoutObjectByElementId("content"))->layer(); |
| 83 EXPECT_EQ(NotComposited, contentLayer->compositingState()); | 191 EXPECT_EQ(NotComposited, contentLayer->compositingState()); |
| 84 EXPECT_EQ(LayoutPoint(), contentLayer->location()); | 192 EXPECT_EQ(LayoutPoint(), contentLayer->location()); |
| 85 | 193 |
| 86 scrollLayer->getScrollableArea()->setScrollOffset(ScrollOffset(1000, 1000), | 194 scrollLayer->getScrollableArea()->setScrollOffset(ScrollOffset(1000, 1000), |
| 87 ProgrammaticScroll); | 195 ProgrammaticScroll); |
| 88 document().view()->updateAllLifecyclePhasesExceptPaint(); | 196 document().view()->updateAllLifecyclePhasesExceptPaint(); |
| 89 EXPECT_EQ(LayoutPoint(-1000, -1000), contentLayer->location()); | 197 EXPECT_EQ(LayoutPoint(-1000, -1000), contentLayer->location()); |
| 90 EXPECT_FALSE(contentLayer->needsRepaint()); | 198 EXPECT_FALSE(contentLayer->needsRepaint()); |
| 91 EXPECT_FALSE(scrollLayer->needsRepaint()); | 199 EXPECT_FALSE(scrollLayer->needsRepaint()); |
| 92 document().view()->updateAllLifecyclePhases(); | 200 document().view()->updateAllLifecyclePhases(); |
| 93 } | 201 } |
| 94 | 202 |
| 95 TEST_F(PaintLayerTest, NonCompositedScrollingNeedsRepaint) { | 203 TEST_P(PaintLayerTest, NonCompositedScrollingNeedsRepaint) { |
| 96 setBodyInnerHTML( | 204 setBodyInnerHTML( |
| 97 "<div id='scroll' style='width: 100px; height: 100px; overflow: scroll'>" | 205 "<div id='scroll' style='width: 100px; height: 100px; overflow: scroll'>" |
| 98 " <div id='content' style='position: relative; background: blue;" | 206 " <div id='content' style='position: relative; background: blue;" |
| 99 " width: 2000px; height: 2000px'></div>" | 207 " width: 2000px; height: 2000px'></div>" |
| 100 "</div>"); | 208 "</div>"); |
| 101 | 209 |
| 102 PaintLayer* scrollLayer = | 210 PaintLayer* scrollLayer = |
| 103 toLayoutBoxModelObject(getLayoutObjectByElementId("scroll"))->layer(); | 211 toLayoutBoxModelObject(getLayoutObjectByElementId("scroll"))->layer(); |
| 104 EXPECT_EQ(NotComposited, scrollLayer->compositingState()); | 212 EXPECT_EQ(NotComposited, scrollLayer->compositingState()); |
| 105 | 213 |
| 106 PaintLayer* contentLayer = | 214 PaintLayer* contentLayer = |
| 107 toLayoutBoxModelObject(getLayoutObjectByElementId("content"))->layer(); | 215 toLayoutBoxModelObject(getLayoutObjectByElementId("content"))->layer(); |
| 108 EXPECT_EQ(NotComposited, scrollLayer->compositingState()); | 216 EXPECT_EQ(NotComposited, scrollLayer->compositingState()); |
| 109 EXPECT_EQ(LayoutPoint(), contentLayer->location()); | 217 EXPECT_EQ(LayoutPoint(), contentLayer->location()); |
| 110 | 218 |
| 111 scrollLayer->getScrollableArea()->setScrollOffset(ScrollOffset(1000, 1000), | 219 scrollLayer->getScrollableArea()->setScrollOffset(ScrollOffset(1000, 1000), |
| 112 ProgrammaticScroll); | 220 ProgrammaticScroll); |
| 113 document().view()->updateAllLifecyclePhasesExceptPaint(); | 221 document().view()->updateAllLifecyclePhasesExceptPaint(); |
| 114 EXPECT_EQ(LayoutPoint(-1000, -1000), contentLayer->location()); | 222 EXPECT_EQ(LayoutPoint(-1000, -1000), contentLayer->location()); |
| 115 EXPECT_TRUE(contentLayer->needsRepaint()); | 223 EXPECT_TRUE(contentLayer->needsRepaint()); |
| 116 EXPECT_TRUE(scrollLayer->needsRepaint()); | 224 EXPECT_TRUE(scrollLayer->needsRepaint()); |
| 117 document().view()->updateAllLifecyclePhases(); | 225 document().view()->updateAllLifecyclePhases(); |
| 118 } | 226 } |
| 119 | 227 |
| 120 TEST_F(PaintLayerTest, HasNonIsolatedDescendantWithBlendMode) { | 228 TEST_P(PaintLayerTest, HasNonIsolatedDescendantWithBlendMode) { |
| 121 setBodyInnerHTML( | 229 setBodyInnerHTML( |
| 122 "<div id='stacking-grandparent' style='isolation: isolate'>" | 230 "<div id='stacking-grandparent' style='isolation: isolate'>" |
| 123 " <div id='stacking-parent' style='isolation: isolate'>" | 231 " <div id='stacking-parent' style='isolation: isolate'>" |
| 124 " <div id='non-stacking-parent' style='position:relative'>" | 232 " <div id='non-stacking-parent' style='position:relative'>" |
| 125 " <div id='blend-mode' style='mix-blend-mode: overlay'>" | 233 " <div id='blend-mode' style='mix-blend-mode: overlay'>" |
| 126 " </div>" | 234 " </div>" |
| 127 " </div>" | 235 " </div>" |
| 128 " </div>" | 236 " </div>" |
| 129 "</div>"); | 237 "</div>"); |
| 130 PaintLayer* stackingGrandparent = | 238 PaintLayer* stackingGrandparent = |
| 131 toLayoutBoxModelObject(getLayoutObjectByElementId("stacking-grandparent")) | 239 toLayoutBoxModelObject(getLayoutObjectByElementId("stacking-grandparent")) |
| 132 ->layer(); | 240 ->layer(); |
| 133 PaintLayer* stackingParent = | 241 PaintLayer* stackingParent = |
| 134 toLayoutBoxModelObject(getLayoutObjectByElementId("stacking-parent")) | 242 toLayoutBoxModelObject(getLayoutObjectByElementId("stacking-parent")) |
| 135 ->layer(); | 243 ->layer(); |
| 136 PaintLayer* parent = | 244 PaintLayer* parent = |
| 137 toLayoutBoxModelObject(getLayoutObjectByElementId("non-stacking-parent")) | 245 toLayoutBoxModelObject(getLayoutObjectByElementId("non-stacking-parent")) |
| 138 ->layer(); | 246 ->layer(); |
| 139 | 247 |
| 140 EXPECT_TRUE(parent->hasNonIsolatedDescendantWithBlendMode()); | 248 EXPECT_TRUE(parent->hasNonIsolatedDescendantWithBlendMode()); |
| 141 EXPECT_TRUE(stackingParent->hasNonIsolatedDescendantWithBlendMode()); | 249 EXPECT_TRUE(stackingParent->hasNonIsolatedDescendantWithBlendMode()); |
| 142 EXPECT_FALSE(stackingGrandparent->hasNonIsolatedDescendantWithBlendMode()); | 250 EXPECT_FALSE(stackingGrandparent->hasNonIsolatedDescendantWithBlendMode()); |
| 143 | 251 |
| 144 EXPECT_FALSE(parent->hasDescendantWithClipPath()); | 252 EXPECT_FALSE(parent->hasDescendantWithClipPath()); |
| 145 EXPECT_TRUE(parent->hasVisibleDescendant()); | 253 EXPECT_TRUE(parent->hasVisibleDescendant()); |
| 146 } | 254 } |
| 147 | 255 |
| 148 TEST_F(PaintLayerTest, HasDescendantWithClipPath) { | 256 TEST_P(PaintLayerTest, HasDescendantWithClipPath) { |
| 149 setBodyInnerHTML( | 257 setBodyInnerHTML( |
| 150 "<div id='parent' style='position:relative'>" | 258 "<div id='parent' style='position:relative'>" |
| 151 " <div id='clip-path' style='clip-path: circle(50px at 0 100px)'>" | 259 " <div id='clip-path' style='clip-path: circle(50px at 0 100px)'>" |
| 152 " </div>" | 260 " </div>" |
| 153 "</div>"); | 261 "</div>"); |
| 154 PaintLayer* parent = | 262 PaintLayer* parent = |
| 155 toLayoutBoxModelObject(getLayoutObjectByElementId("parent"))->layer(); | 263 toLayoutBoxModelObject(getLayoutObjectByElementId("parent"))->layer(); |
| 156 PaintLayer* clipPath = | 264 PaintLayer* clipPath = |
| 157 toLayoutBoxModelObject(getLayoutObjectByElementId("clip-path"))->layer(); | 265 toLayoutBoxModelObject(getLayoutObjectByElementId("clip-path"))->layer(); |
| 158 | 266 |
| 159 EXPECT_TRUE(parent->hasDescendantWithClipPath()); | 267 EXPECT_TRUE(parent->hasDescendantWithClipPath()); |
| 160 EXPECT_FALSE(clipPath->hasDescendantWithClipPath()); | 268 EXPECT_FALSE(clipPath->hasDescendantWithClipPath()); |
| 161 | 269 |
| 162 EXPECT_FALSE(parent->hasNonIsolatedDescendantWithBlendMode()); | 270 EXPECT_FALSE(parent->hasNonIsolatedDescendantWithBlendMode()); |
| 163 EXPECT_TRUE(parent->hasVisibleDescendant()); | 271 EXPECT_TRUE(parent->hasVisibleDescendant()); |
| 164 } | 272 } |
| 165 | 273 |
| 166 TEST_F(PaintLayerTest, HasVisibleDescendant) { | 274 TEST_P(PaintLayerTest, HasVisibleDescendant) { |
| 167 enableCompositing(); | 275 enableCompositing(); |
| 168 setBodyInnerHTML( | 276 setBodyInnerHTML( |
| 169 "<div id='invisible' style='position:relative'>" | 277 "<div id='invisible' style='position:relative'>" |
| 170 " <div id='visible' style='visibility: visible; position: relative'>" | 278 " <div id='visible' style='visibility: visible; position: relative'>" |
| 171 " </div>" | 279 " </div>" |
| 172 "</div>"); | 280 "</div>"); |
| 173 PaintLayer* invisible = | 281 PaintLayer* invisible = |
| 174 toLayoutBoxModelObject(getLayoutObjectByElementId("invisible"))->layer(); | 282 toLayoutBoxModelObject(getLayoutObjectByElementId("invisible"))->layer(); |
| 175 PaintLayer* visible = | 283 PaintLayer* visible = |
| 176 toLayoutBoxModelObject(getLayoutObjectByElementId("visible"))->layer(); | 284 toLayoutBoxModelObject(getLayoutObjectByElementId("visible"))->layer(); |
| 177 | 285 |
| 178 EXPECT_TRUE(invisible->hasVisibleDescendant()); | 286 EXPECT_TRUE(invisible->hasVisibleDescendant()); |
| 179 EXPECT_FALSE(visible->hasVisibleDescendant()); | 287 EXPECT_FALSE(visible->hasVisibleDescendant()); |
| 180 | 288 |
| 181 EXPECT_FALSE(invisible->hasNonIsolatedDescendantWithBlendMode()); | 289 EXPECT_FALSE(invisible->hasNonIsolatedDescendantWithBlendMode()); |
| 182 EXPECT_FALSE(invisible->hasDescendantWithClipPath()); | 290 EXPECT_FALSE(invisible->hasDescendantWithClipPath()); |
| 183 } | 291 } |
| 184 | 292 |
| 185 TEST_F(PaintLayerTest, DescendantDependentFlagsStopsAtThrottledFrames) { | 293 TEST_P(PaintLayerTest, DescendantDependentFlagsStopsAtThrottledFrames) { |
| 186 enableCompositing(); | 294 enableCompositing(); |
| 187 setBodyInnerHTML( | 295 setBodyInnerHTML( |
| 188 "<style>body { margin: 0; }</style>" | 296 "<style>body { margin: 0; }</style>" |
| 189 "<div id='transform' style='transform: translate3d(4px, 5px, 6px);'>" | 297 "<div id='transform' style='transform: translate3d(4px, 5px, 6px);'>" |
| 190 "</div>" | 298 "</div>" |
| 191 "<iframe id='iframe' sandbox></iframe>"); | 299 "<iframe id='iframe' sandbox></iframe>"); |
| 192 setChildFrameHTML( | 300 setChildFrameHTML( |
| 193 "<style>body { margin: 0; }</style>" | 301 "<style>body { margin: 0; }</style>" |
| 194 "<div id='iframeTransform'" | 302 "<div id='iframeTransform'" |
| 195 " style='transform: translate3d(4px, 5px, 6px);'/>"); | 303 " style='transform: translate3d(4px, 5px, 6px);'/>"); |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 231 | 339 |
| 232 document().view()->updateAllLifecyclePhases(); | 340 document().view()->updateAllLifecyclePhases(); |
| 233 EXPECT_FALSE(childDocument() | 341 EXPECT_FALSE(childDocument() |
| 234 .view() | 342 .view() |
| 235 ->layoutView() | 343 ->layoutView() |
| 236 ->layer() | 344 ->layer() |
| 237 ->m_needsDescendantDependentFlagsUpdate); | 345 ->m_needsDescendantDependentFlagsUpdate); |
| 238 } | 346 } |
| 239 | 347 |
| 240 } // namespace blink | 348 } // namespace blink |
| OLD | NEW |