Index: third_party/WebKit/Source/web/tests/ScrollingCoordinatorTest.cpp |
diff --git a/third_party/WebKit/Source/web/tests/ScrollingCoordinatorTest.cpp b/third_party/WebKit/Source/web/tests/ScrollingCoordinatorTest.cpp |
index c2a111355807fce8caaba42926ca93863b15da36..8e2d1286f16c631fe4084cb264732051da200480 100644 |
--- a/third_party/WebKit/Source/web/tests/ScrollingCoordinatorTest.cpp |
+++ b/third_party/WebKit/Source/web/tests/ScrollingCoordinatorTest.cpp |
@@ -1052,7 +1052,9 @@ class NonCompositedMainThreadScrollingReasonTest |
static const uint32_t kLCDTextRelatedReasons = |
MainThreadScrollingReason::kHasOpacityAndLCDText | |
MainThreadScrollingReason::kHasTransformAndLCDText | |
- MainThreadScrollingReason::kBackgroundNotOpaqueInRectAndLCDText; |
+ MainThreadScrollingReason::kBackgroundNotOpaqueInRectAndLCDText | |
+ MainThreadScrollingReason::kIsNotStackingContextAndLCDText | |
+ MainThreadScrollingReason::kHasOverflowClipAndLCDText; |
protected: |
NonCompositedMainThreadScrollingReasonTest() { |
@@ -1134,7 +1136,8 @@ TEST_P(NonCompositedMainThreadScrollingReasonTest, TransformTest) { |
TEST_P(NonCompositedMainThreadScrollingReasonTest, BackgroundNotOpaqueTest) { |
TestNonCompositedReasons( |
"background-not-opaque", |
- MainThreadScrollingReason::kBackgroundNotOpaqueInRectAndLCDText); |
+ MainThreadScrollingReason::kBackgroundNotOpaqueInRectAndLCDText | |
+ MainThreadScrollingReason::kHasOverflowClipAndLCDText); |
} |
TEST_P(NonCompositedMainThreadScrollingReasonTest, BorderRadiusTest) { |
@@ -1207,6 +1210,35 @@ TEST_P(NonCompositedMainThreadScrollingReasonTest, BoxShadowTest) { |
"box-shadow", MainThreadScrollingReason::kHasBoxShadowFromNonRootLayer); |
} |
+TEST_P(NonCompositedMainThreadScrollingReasonTest, StackingContextTest) { |
+ GetWebViewImpl()->GetSettings()->SetPreferCompositingToLCDTextEnabled(false); |
+ |
+ Document* document = GetFrame()->GetDocument(); |
+ Element* container = document->getElementById("scroller1"); |
+ ASSERT_TRUE(container); |
+ |
+ ForceFullCompositingUpdate(); |
+ |
+ // If a scroller contains all its children, it's not a stacking context. |
+ PaintLayerScrollableArea* scrollable_area = |
+ ToLayoutBoxModelObject(container->GetLayoutObject())->GetScrollableArea(); |
+ ASSERT_TRUE(scrollable_area); |
+ EXPECT_TRUE(scrollable_area->GetNonCompositedMainThreadScrollingReasons() & |
+ MainThreadScrollingReason::kIsNotStackingContextAndLCDText); |
+ |
+ GetWebViewImpl()->GetSettings()->SetPreferCompositingToLCDTextEnabled(true); |
+ ForceFullCompositingUpdate(); |
+ EXPECT_FALSE(scrollable_area->GetNonCompositedMainThreadScrollingReasons() & |
+ MainThreadScrollingReason::kIsNotStackingContextAndLCDText); |
+ GetWebViewImpl()->GetSettings()->SetPreferCompositingToLCDTextEnabled(false); |
+ |
+ // Adding "contain: paint" to force a stacking context leads to promotion. |
+ container->setAttribute("style", "contain: paint", ASSERT_NO_EXCEPTION); |
+ ForceFullCompositingUpdate(); |
+ |
+ EXPECT_FALSE(scrollable_area->GetNonCompositedMainThreadScrollingReasons()); |
+} |
+ |
TEST_P(NonCompositedMainThreadScrollingReasonTest, |
CompositedWithLCDTextRelatedReasonsTest) { |
// With "will-change:transform" we composite elements with |