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 60819254e5a9a48e517e02f7d7766203130d5b4c..7857e57cce733d27878f8cc0105b78cae09185a8 100644 |
--- a/third_party/WebKit/Source/web/tests/ScrollingCoordinatorTest.cpp |
+++ b/third_party/WebKit/Source/web/tests/ScrollingCoordinatorTest.cpp |
@@ -1056,45 +1056,57 @@ class StyleRelatedMainThreadScrollingReasonTest |
webViewImpl()->settings()->setPreferCompositingToLCDTextEnabled(false); |
Document* document = frame()->document(); |
Element* container = document->getElementById("scroller1"); |
- container->setAttribute("class", target.c_str(), ASSERT_NO_EXCEPTION); |
- container = document->getElementById("scroller2"); |
+ DCHECK(container); |
container->setAttribute("class", target.c_str(), ASSERT_NO_EXCEPTION); |
forceFullCompositingUpdate(); |
+ // Add or remove style related attribute from a scroller shouldn't |
+ // affect the main frame which is supposed to scroll on impl during |
+ // this test. |
+ PaintLayerScrollableArea* scrollableArea = |
+ toLayoutBoxModelObject(container->layoutObject())->getScrollableArea(); |
+ ASSERT_TRUE(scrollableArea); |
+ ASSERT_TRUE(scrollableArea->getStyleRelatedMainThreadScrollingReasons() & |
+ reason); |
+ |
+ container = document->getElementById("scroller2"); |
+ scrollableArea = |
+ toLayoutBoxModelObject(container->layoutObject())->getScrollableArea(); |
+ ASSERT_TRUE(scrollableArea); |
+ // Different scrollable area should keep unaffected. |
+ ASSERT_FALSE(scrollableArea->getStyleRelatedMainThreadScrollingReasons() & |
+ reason); |
+ |
FrameView* frameView = frame()->view(); |
ASSERT_TRUE(frameView); |
- ASSERT_TRUE(frameView->mainThreadScrollingReasons() & reason); |
+ ASSERT_FALSE(frameView->mainThreadScrollingReasons() & reason); |
- // Remove the target attribute from one of the scrollers. |
- // Still need to scroll on main thread. |
+ // Remove attribute from the scroller would lead to scroll on impl. |
container = document->getElementById("scroller1"); |
- DCHECK(container); |
- |
- container->removeAttribute("class"); |
- forceFullCompositingUpdate(); |
- |
- ASSERT_TRUE(frameView->mainThreadScrollingReasons() & reason); |
- |
- // Remove attribute from the other scroller would lead to |
- // scroll on impl. |
- container = document->getElementById("scroller2"); |
- DCHECK(container); |
- |
container->removeAttribute("class"); |
forceFullCompositingUpdate(); |
+ scrollableArea = |
+ toLayoutBoxModelObject(container->layoutObject())->getScrollableArea(); |
+ ASSERT_TRUE(scrollableArea); |
+ ASSERT_FALSE(scrollableArea->getStyleRelatedMainThreadScrollingReasons() & |
+ reason); |
ASSERT_FALSE(frameView->mainThreadScrollingReasons() & reason); |
// Add target attribute would again lead to scroll on main thread |
container->setAttribute("class", target.c_str(), ASSERT_NO_EXCEPTION); |
forceFullCompositingUpdate(); |
- ASSERT_TRUE(frameView->mainThreadScrollingReasons() & reason); |
+ ASSERT_TRUE(scrollableArea->getStyleRelatedMainThreadScrollingReasons() & |
+ reason); |
+ ASSERT_FALSE(frameView->mainThreadScrollingReasons() & reason); |
if ((reason & m_LCDTextRelatedReasons) && |
!(reason & ~m_LCDTextRelatedReasons)) { |
webViewImpl()->settings()->setPreferCompositingToLCDTextEnabled(true); |
forceFullCompositingUpdate(); |
+ ASSERT_FALSE(scrollableArea->getStyleRelatedMainThreadScrollingReasons() & |
+ reason); |
ASSERT_FALSE(frameView->mainThreadScrollingReasons()); |
} |
} |
@@ -1104,31 +1116,28 @@ INSTANTIATE_TEST_CASE_P(All, |
StyleRelatedMainThreadScrollingReasonTest, |
::testing::Bool()); |
-// TODO(yigu): This test and all other style realted main thread scrolling |
-// reason tests below have been disabled due to https://crbug.com/701355. |
-TEST_P(StyleRelatedMainThreadScrollingReasonTest, DISABLED_TransparentTest) { |
+TEST_P(StyleRelatedMainThreadScrollingReasonTest, TransparentTest) { |
testStyle("transparent", MainThreadScrollingReason::kHasOpacityAndLCDText); |
} |
-TEST_P(StyleRelatedMainThreadScrollingReasonTest, DISABLED_TransformTest) { |
+TEST_P(StyleRelatedMainThreadScrollingReasonTest, TransformTest) { |
testStyle("transform", MainThreadScrollingReason::kHasTransformAndLCDText); |
} |
-TEST_P(StyleRelatedMainThreadScrollingReasonTest, |
- DISABLED_BackgroundNotOpaqueTest) { |
+TEST_P(StyleRelatedMainThreadScrollingReasonTest, BackgroundNotOpaqueTest) { |
testStyle("background-not-opaque", |
MainThreadScrollingReason::kBackgroundNotOpaqueInRectAndLCDText); |
} |
-TEST_P(StyleRelatedMainThreadScrollingReasonTest, DISABLED_BorderRadiusTest) { |
+TEST_P(StyleRelatedMainThreadScrollingReasonTest, BorderRadiusTest) { |
testStyle("border-radius", MainThreadScrollingReason::kHasBorderRadius); |
} |
-TEST_P(StyleRelatedMainThreadScrollingReasonTest, DISABLED_ClipTest) { |
+TEST_P(StyleRelatedMainThreadScrollingReasonTest, ClipTest) { |
testStyle("clip", MainThreadScrollingReason::kHasClipRelatedProperty); |
} |
-TEST_P(StyleRelatedMainThreadScrollingReasonTest, DISABLED_ClipPathTest) { |
+TEST_P(StyleRelatedMainThreadScrollingReasonTest, ClipPathTest) { |
uint32_t reason = MainThreadScrollingReason::kHasClipRelatedProperty; |
webViewImpl()->settings()->setPreferCompositingToLCDTextEnabled(false); |
Document* document = frame()->document(); |
@@ -1137,16 +1146,26 @@ TEST_P(StyleRelatedMainThreadScrollingReasonTest, DISABLED_ClipPathTest) { |
DCHECK(element); |
element->setAttribute(HTMLNames::styleAttr, |
"clip-path:circle(115px at 20px 20px);"); |
+ Element* container = document->getElementById("scroller1"); |
+ DCHECK(container); |
forceFullCompositingUpdate(); |
+ PaintLayerScrollableArea* scrollableArea = |
+ toLayoutBoxModelObject(container->layoutObject())->getScrollableArea(); |
+ ASSERT_TRUE(scrollableArea); |
+ ASSERT_TRUE(scrollableArea->getStyleRelatedMainThreadScrollingReasons() & |
+ reason); |
+ |
FrameView* frameView = frame()->view(); |
ASSERT_TRUE(frameView); |
- ASSERT_TRUE(frameView->mainThreadScrollingReasons() & reason); |
+ ASSERT_FALSE(frameView->mainThreadScrollingReasons() & reason); |
// Remove clip path from ancestor. |
element->removeAttribute(HTMLNames::styleAttr); |
forceFullCompositingUpdate(); |
+ ASSERT_FALSE(scrollableArea->getStyleRelatedMainThreadScrollingReasons() & |
+ reason); |
ASSERT_FALSE(frameView->mainThreadScrollingReasons() & reason); |
// Test descendant with ClipPath |
@@ -1155,21 +1174,25 @@ TEST_P(StyleRelatedMainThreadScrollingReasonTest, DISABLED_ClipPathTest) { |
element->setAttribute(HTMLNames::styleAttr, |
"clip-path:circle(115px at 20px 20px);"); |
forceFullCompositingUpdate(); |
- ASSERT_TRUE(frameView->mainThreadScrollingReasons() & reason); |
+ ASSERT_TRUE(scrollableArea->getStyleRelatedMainThreadScrollingReasons() & |
+ reason); |
+ ASSERT_FALSE(frameView->mainThreadScrollingReasons() & reason); |
// Remove clip path from descendant. |
element->removeAttribute(HTMLNames::styleAttr); |
forceFullCompositingUpdate(); |
+ ASSERT_FALSE(scrollableArea->getStyleRelatedMainThreadScrollingReasons() & |
+ reason); |
ASSERT_FALSE(frameView->mainThreadScrollingReasons() & reason); |
} |
-TEST_P(StyleRelatedMainThreadScrollingReasonTest, DISABLED_LCDTextEnabledTest) { |
+TEST_P(StyleRelatedMainThreadScrollingReasonTest, LCDTextEnabledTest) { |
testStyle("transparent border-radius", |
MainThreadScrollingReason::kHasOpacityAndLCDText | |
MainThreadScrollingReason::kHasBorderRadius); |
} |
-TEST_P(StyleRelatedMainThreadScrollingReasonTest, DISABLED_BoxShadowTest) { |
+TEST_P(StyleRelatedMainThreadScrollingReasonTest, BoxShadowTest) { |
testStyle("box-shadow", |
MainThreadScrollingReason::kHasBoxShadowFromNonRootLayer); |
} |