| Index: third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilderTest.cpp
|
| diff --git a/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilderTest.cpp b/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilderTest.cpp
|
| index 9b0078b2988c83d2c87d32eee6253cc5e495c07c..8df7d78641100b05b9b99f573e86aeb42f1a9abb 100644
|
| --- a/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilderTest.cpp
|
| +++ b/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilderTest.cpp
|
| @@ -2009,4 +2009,103 @@ TEST_P(PaintPropertyTreeBuilderTest, SVGRootNoClip)
|
| EXPECT_FALSE(getLayoutObjectByElementId("svg")->objectPaintProperties()->overflowClip());
|
| }
|
|
|
| +TEST_P(PaintPropertyTreeBuilderTest, MainThreadScrollReasonsWithNestedScrollers)
|
| +{
|
| + setBodyInnerHTML(
|
| + "<style>"
|
| + " #overflowA {"
|
| + " position: absolute;"
|
| + " overflow: scroll;"
|
| + " width: 20px;"
|
| + " height: 20px;"
|
| + " }"
|
| + " #overflowB {"
|
| + " position: absolute;"
|
| + " overflow: scroll;"
|
| + " width: 5px;"
|
| + " height: 3px;"
|
| + " }"
|
| + " .backgroundAttachmentFixed {"
|
| + " background-image: url('foo');"
|
| + " background-attachment: fixed;"
|
| + " }"
|
| + " .forceScroll {"
|
| + " height: 4000px;"
|
| + " }"
|
| + "</style>"
|
| + "<div id='overflowA'>"
|
| + " <div id='overflowB' class='backgroundAttachmentFixed'>"
|
| + " <div class='forceScroll'></div>"
|
| + " </div>"
|
| + " <div class='forceScroll'></div>"
|
| + "</div>"
|
| + "<div class='forceScroll'></div>");
|
| + Element* overflowA = document().getElementById("overflowA");
|
| + Element* overflowB = document().getElementById("overflowB");
|
| +
|
| + EXPECT_TRUE(frameScroll()->hasMainThreadScrollingReasons(MainThreadScrollingReason::kHasBackgroundAttachmentFixedObjects));
|
| + EXPECT_TRUE(overflowA->layoutObject()->objectPaintProperties()->scroll()->hasMainThreadScrollingReasons(MainThreadScrollingReason::kHasBackgroundAttachmentFixedObjects));
|
| + EXPECT_FALSE(overflowB->layoutObject()->objectPaintProperties()->scroll()->hasMainThreadScrollingReasons(MainThreadScrollingReason::kHasBackgroundAttachmentFixedObjects));
|
| +
|
| + // Removing a main thread scrolling reason should update the entire tree.
|
| + overflowB->removeAttribute("class");
|
| + document().view()->updateAllLifecyclePhases();
|
| + EXPECT_FALSE(frameScroll()->hasMainThreadScrollingReasons(MainThreadScrollingReason::kHasBackgroundAttachmentFixedObjects));
|
| + EXPECT_FALSE(overflowA->layoutObject()->objectPaintProperties()->scroll()->hasMainThreadScrollingReasons(MainThreadScrollingReason::kHasBackgroundAttachmentFixedObjects));
|
| + EXPECT_FALSE(overflowB->layoutObject()->objectPaintProperties()->scroll()->hasMainThreadScrollingReasons(MainThreadScrollingReason::kHasBackgroundAttachmentFixedObjects));
|
| +
|
| + // Adding a main thread scrolling reason should update the entire tree.
|
| + overflowB->setAttribute(HTMLNames::classAttr, "backgroundAttachmentFixed");
|
| + document().view()->updateAllLifecyclePhases();
|
| + EXPECT_TRUE(frameScroll()->hasMainThreadScrollingReasons(MainThreadScrollingReason::kHasBackgroundAttachmentFixedObjects));
|
| + EXPECT_TRUE(overflowA->layoutObject()->objectPaintProperties()->scroll()->hasMainThreadScrollingReasons(MainThreadScrollingReason::kHasBackgroundAttachmentFixedObjects));
|
| + EXPECT_FALSE(overflowB->layoutObject()->objectPaintProperties()->scroll()->hasMainThreadScrollingReasons(MainThreadScrollingReason::kHasBackgroundAttachmentFixedObjects));
|
| +}
|
| +
|
| +TEST_P(PaintPropertyTreeBuilderTest, MainThreadScrollReasonsWithFixedScroller)
|
| +{
|
| + setBodyInnerHTML(
|
| + "<style>"
|
| + " #overflowA {"
|
| + " position: absolute;"
|
| + " overflow: scroll;"
|
| + " width: 20px;"
|
| + " height: 20px;"
|
| + " }"
|
| + " #overflowB {"
|
| + " position: fixed;"
|
| + " overflow: scroll;"
|
| + " width: 5px;"
|
| + " height: 3px;"
|
| + " }"
|
| + " .backgroundAttachmentFixed {"
|
| + " background-image: url('foo');"
|
| + " background-attachment: fixed;"
|
| + " }"
|
| + " .forceScroll {"
|
| + " height: 4000px;"
|
| + " }"
|
| + "</style>"
|
| + "<div id='overflowA'>"
|
| + " <div id='overflowB' class='backgroundAttachmentFixed'>"
|
| + " <div class='forceScroll'></div>"
|
| + " </div>"
|
| + " <div class='forceScroll'></div>"
|
| + "</div>"
|
| + "<div class='forceScroll'></div>");
|
| + Element* overflowA = document().getElementById("overflowA");
|
| + Element* overflowB = document().getElementById("overflowB");
|
| +
|
| + EXPECT_TRUE(rootScroll()->hasMainThreadScrollingReasons(MainThreadScrollingReason::kHasBackgroundAttachmentFixedObjects));
|
| + EXPECT_FALSE(overflowA->layoutObject()->objectPaintProperties()->scroll()->hasMainThreadScrollingReasons(MainThreadScrollingReason::kHasBackgroundAttachmentFixedObjects));
|
| + EXPECT_FALSE(overflowB->layoutObject()->objectPaintProperties()->scroll()->hasMainThreadScrollingReasons(MainThreadScrollingReason::kHasBackgroundAttachmentFixedObjects));
|
| +
|
| + // Removing a main thread scrolling reason should update the entire tree.
|
| + overflowB->removeAttribute("class");
|
| + document().view()->updateAllLifecyclePhases();
|
| + EXPECT_FALSE(rootScroll()->hasMainThreadScrollingReasons(MainThreadScrollingReason::kHasBackgroundAttachmentFixedObjects));
|
| + EXPECT_FALSE(overflowA->layoutObject()->objectPaintProperties()->scroll()->hasMainThreadScrollingReasons(MainThreadScrollingReason::kHasBackgroundAttachmentFixedObjects));
|
| + EXPECT_FALSE(overflowB->layoutObject()->objectPaintProperties()->scroll()->hasMainThreadScrollingReasons(MainThreadScrollingReason::kHasBackgroundAttachmentFixedObjects));
|
| +}
|
| +
|
| } // namespace blink
|
|
|