OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/layout/LayoutTestHelper.h" | 5 #include "core/layout/LayoutTestHelper.h" |
6 #include "core/layout/LayoutTreeAsText.h" | 6 #include "core/layout/LayoutTreeAsText.h" |
7 #include "core/layout/api/LayoutViewItem.h" | 7 #include "core/layout/api/LayoutViewItem.h" |
8 #include "core/paint/ObjectPaintProperties.h" | 8 #include "core/paint/ObjectPaintProperties.h" |
9 #include "core/paint/PaintPropertyTreePrinter.h" | 9 #include "core/paint/PaintPropertyTreePrinter.h" |
10 #include "platform/graphics/paint/GeometryMapper.h" | 10 #include "platform/graphics/paint/GeometryMapper.h" |
(...skipping 2119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2130 EXPECT_FALSE(overflowB->layoutObject()->objectPaintProperties()->scroll()->h
asMainThreadScrollingReasons(MainThreadScrollingReason::kHasBackgroundAttachment
FixedObjects)); | 2130 EXPECT_FALSE(overflowB->layoutObject()->objectPaintProperties()->scroll()->h
asMainThreadScrollingReasons(MainThreadScrollingReason::kHasBackgroundAttachment
FixedObjects)); |
2131 | 2131 |
2132 // Removing a main thread scrolling reason should update the entire tree. | 2132 // Removing a main thread scrolling reason should update the entire tree. |
2133 overflowB->removeAttribute("class"); | 2133 overflowB->removeAttribute("class"); |
2134 document().view()->updateAllLifecyclePhases(); | 2134 document().view()->updateAllLifecyclePhases(); |
2135 EXPECT_FALSE(rootScroll()->hasMainThreadScrollingReasons(MainThreadScrolling
Reason::kHasBackgroundAttachmentFixedObjects)); | 2135 EXPECT_FALSE(rootScroll()->hasMainThreadScrollingReasons(MainThreadScrolling
Reason::kHasBackgroundAttachmentFixedObjects)); |
2136 EXPECT_FALSE(overflowA->layoutObject()->objectPaintProperties()->scroll()->h
asMainThreadScrollingReasons(MainThreadScrollingReason::kHasBackgroundAttachment
FixedObjects)); | 2136 EXPECT_FALSE(overflowA->layoutObject()->objectPaintProperties()->scroll()->h
asMainThreadScrollingReasons(MainThreadScrollingReason::kHasBackgroundAttachment
FixedObjects)); |
2137 EXPECT_FALSE(overflowB->layoutObject()->objectPaintProperties()->scroll()->h
asMainThreadScrollingReasons(MainThreadScrollingReason::kHasBackgroundAttachment
FixedObjects)); | 2137 EXPECT_FALSE(overflowB->layoutObject()->objectPaintProperties()->scroll()->h
asMainThreadScrollingReasons(MainThreadScrollingReason::kHasBackgroundAttachment
FixedObjects)); |
2138 } | 2138 } |
2139 | 2139 |
2140 TEST_P(PaintPropertyTreeBuilderTest, PositionStickyMainThreadScrollReasonsWithNe
stedScrollers) | |
2141 { | |
2142 setBodyInnerHTML( | |
2143 "<style>" | |
2144 " #overflowA {" | |
2145 " overflow: scroll;" | |
2146 " width: 20px;" | |
2147 " height: 20px;" | |
2148 " }" | |
2149 " #overflowB {" | |
2150 " overflow: scroll;" | |
2151 " width: 5px;" | |
2152 " height: 3px;" | |
2153 " }" | |
2154 " .positionSticky {" | |
2155 " position: sticky;" | |
2156 " top: 0;" | |
2157 " left: 0;" | |
2158 " }" | |
2159 " .forceScroll {" | |
2160 " height: 4000px;" | |
2161 " }" | |
2162 "</style>" | |
2163 "<div id='overflowA'>" | |
2164 " <div id='overflowB' class='positionSticky'>" | |
2165 " <div id='overflowBChild'></div>" | |
2166 " <div class='forceScroll'></div>" | |
2167 " </div>" | |
2168 " <div class='forceScroll'></div>" | |
2169 "</div>" | |
2170 "<div class='forceScroll'></div>"); | |
2171 Element* overflowA = document().getElementById("overflowA"); | |
2172 Element* overflowB = document().getElementById("overflowB"); | |
2173 Element* overflowBChild = document().getElementById("overflowBChild"); | |
2174 | |
2175 EXPECT_TRUE(frameScroll()->hasMainThreadScrollingReasons(MainThreadScrolling
Reason::kHasStickyPositionObjects)); | |
2176 EXPECT_TRUE(overflowA->layoutObject()->objectPaintProperties()->scroll()->ha
sMainThreadScrollingReasons(MainThreadScrollingReason::kHasStickyPositionObjects
)); | |
2177 EXPECT_FALSE(overflowB->layoutObject()->objectPaintProperties()->scroll()->h
asMainThreadScrollingReasons(MainThreadScrollingReason::kHasStickyPositionObject
s)); | |
2178 EXPECT_TRUE(!overflowBChild->layoutObject()->objectPaintProperties() || !ove
rflowBChild->layoutObject()->objectPaintProperties()->scroll()); | |
2179 | |
2180 // Removing a main thread scrolling reason should update the entire tree. | |
2181 overflowB->removeAttribute("class"); | |
2182 document().view()->updateAllLifecyclePhases(); | |
2183 EXPECT_FALSE(frameScroll()->hasMainThreadScrollingReasons(MainThreadScrollin
gReason::kHasStickyPositionObjects)); | |
2184 EXPECT_FALSE(overflowA->layoutObject()->objectPaintProperties()->scroll()->h
asMainThreadScrollingReasons(MainThreadScrollingReason::kHasStickyPositionObject
s)); | |
2185 EXPECT_FALSE(overflowB->layoutObject()->objectPaintProperties()->scroll()->h
asMainThreadScrollingReasons(MainThreadScrollingReason::kHasStickyPositionObject
s)); | |
2186 EXPECT_TRUE(!overflowBChild->layoutObject()->objectPaintProperties() || !ove
rflowBChild->layoutObject()->objectPaintProperties()->scroll()); | |
2187 | |
2188 // Adding a main thread scrolling reason should update the entire tree. | |
2189 overflowBChild->setAttribute(HTMLNames::classAttr, "positionSticky"); | |
2190 document().view()->updateAllLifecyclePhases(); | |
2191 EXPECT_TRUE(frameScroll()->hasMainThreadScrollingReasons(MainThreadScrolling
Reason::kHasStickyPositionObjects)); | |
2192 EXPECT_TRUE(overflowA->layoutObject()->objectPaintProperties()->scroll()->ha
sMainThreadScrollingReasons(MainThreadScrollingReason::kHasStickyPositionObjects
)); | |
2193 EXPECT_TRUE(overflowB->layoutObject()->objectPaintProperties()->scroll()->ha
sMainThreadScrollingReasons(MainThreadScrollingReason::kHasStickyPositionObjects
)); | |
2194 EXPECT_TRUE(!overflowBChild->layoutObject()->objectPaintProperties() || !ove
rflowBChild->layoutObject()->objectPaintProperties()->scroll()); | |
2195 } | |
2196 | |
2197 TEST_P(PaintPropertyTreeBuilderTest, MainThreadScrollReasonsWithNestedPositionSt
ickyScrollers) | |
2198 { | |
2199 setBodyInnerHTML( | |
2200 "<style>" | |
2201 " #overflowA {" | |
2202 " overflow: scroll;" | |
2203 " width: 20px;" | |
2204 " height: 20px;" | |
2205 " }" | |
2206 " #overflowB {" | |
2207 " overflow: scroll;" | |
2208 " width: 5px;" | |
2209 " height: 3px;" | |
2210 " }" | |
2211 " .positionSticky {" | |
2212 " position: sticky;" | |
2213 " top: 0;" | |
2214 " left: 0;" | |
2215 " }" | |
2216 " .forceScroll {" | |
2217 " height: 4000px;" | |
2218 " }" | |
2219 "</style>" | |
2220 "<div id='overflowA' class='positionSticky'>" | |
2221 " <div id='overflowB'>" | |
2222 " <div class='forceScroll'></div>" | |
2223 " </div>" | |
2224 " <div class='forceScroll'></div>" | |
2225 "</div>" | |
2226 "<div class='forceScroll'></div>"); | |
2227 Element* overflowA = document().getElementById("overflowA"); | |
2228 Element* overflowB = document().getElementById("overflowB"); | |
2229 | |
2230 EXPECT_TRUE(frameScroll()->hasMainThreadScrollingReasons(MainThreadScrolling
Reason::kHasStickyPositionObjects)); | |
2231 EXPECT_FALSE(overflowA->layoutObject()->objectPaintProperties()->scroll()->h
asMainThreadScrollingReasons(MainThreadScrollingReason::kHasStickyPositionObject
s)); | |
2232 EXPECT_FALSE(overflowB->layoutObject()->objectPaintProperties()->scroll()->h
asMainThreadScrollingReasons(MainThreadScrollingReason::kHasStickyPositionObject
s)); | |
2233 } | |
2234 | |
2235 } // namespace blink | 2140 } // namespace blink |
OLD | NEW |