| 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/html/HTMLIFrameElement.h" | 5 #include "core/html/HTMLIFrameElement.h" |
| 6 #include "core/layout/LayoutTestHelper.h" | 6 #include "core/layout/LayoutTestHelper.h" |
| 7 #include "core/layout/LayoutTreeAsText.h" | 7 #include "core/layout/LayoutTreeAsText.h" |
| 8 #include "core/layout/api/LayoutViewItem.h" | 8 #include "core/layout/api/LayoutViewItem.h" |
| 9 #include "core/paint/ObjectPaintProperties.h" | 9 #include "core/paint/ObjectPaintProperties.h" |
| 10 #include "core/paint/PaintPropertyTreePrinter.h" | 10 #include "core/paint/PaintPropertyTreePrinter.h" |
| (...skipping 3213 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3224 TEST_P(PaintPropertyTreeBuilderTest, NoPaintPropertyUpdateOnBackgroundChange) { | 3224 TEST_P(PaintPropertyTreeBuilderTest, NoPaintPropertyUpdateOnBackgroundChange) { |
| 3225 setBodyInnerHTML("<div id='div' style='background-color: blue'>DIV</div>"); | 3225 setBodyInnerHTML("<div id='div' style='background-color: blue'>DIV</div>"); |
| 3226 auto* div = document().getElementById("div"); | 3226 auto* div = document().getElementById("div"); |
| 3227 | 3227 |
| 3228 document().view()->updateAllLifecyclePhases(); | 3228 document().view()->updateAllLifecyclePhases(); |
| 3229 div->setAttribute(HTMLNames::styleAttr, "background-color: green"); | 3229 div->setAttribute(HTMLNames::styleAttr, "background-color: green"); |
| 3230 document().view()->updateLifecycleToLayoutClean(); | 3230 document().view()->updateLifecycleToLayoutClean(); |
| 3231 EXPECT_FALSE(div->layoutObject()->needsPaintPropertyUpdate()); | 3231 EXPECT_FALSE(div->layoutObject()->needsPaintPropertyUpdate()); |
| 3232 } | 3232 } |
| 3233 | 3233 |
| 3234 TEST_P(PaintPropertyTreeBuilderTest, AbsoluteLocalBorderBoxChanges) { |
| 3235 setBodyInnerHTML( |
| 3236 "<style>" |
| 3237 " body { margin: 0 }" |
| 3238 " #scroller { width: 3px; height: 5px; overflow: scroll; }" |
| 3239 " #child { top: 0; left: 0; }" |
| 3240 "</style>" |
| 3241 "<div id='scroller'>" |
| 3242 " <div id='child'>" |
| 3243 " <div id='grandChild'></div>" |
| 3244 " </div>" |
| 3245 " <div style='height: 100px;'></div>" |
| 3246 "</div>"); |
| 3247 document().view()->updateAllLifecyclePhases(); |
| 3248 auto* scroller = document().getElementById("scroller"); |
| 3249 auto* scrollerProperties = scroller->layoutObject()->paintProperties(); |
| 3250 auto* child = document().getElementById("child"); |
| 3251 auto* childProperties = child->layoutObject()->paintProperties(); |
| 3252 auto* childLocalBorderBox = childProperties->localBorderBoxProperties(); |
| 3253 EXPECT_EQ(childLocalBorderBox->propertyTreeState.scroll(), |
| 3254 scrollerProperties->scroll()); |
| 3255 EXPECT_EQ(LayoutPoint(0, 0), childLocalBorderBox->paintOffset); |
| 3256 auto* grandChild = document().getElementById("grandChild"); |
| 3257 auto* grandChildProperties = grandChild->layoutObject()->paintProperties(); |
| 3258 auto* grandChildLocalBorderBox = |
| 3259 grandChildProperties->localBorderBoxProperties(); |
| 3260 EXPECT_EQ(LayoutPoint(0, 0), grandChildLocalBorderBox->paintOffset); |
| 3261 EXPECT_EQ( |
| 3262 FloatRect(0, 0, 3, 5), |
| 3263 grandChildLocalBorderBox->propertyTreeState.clip()->clipRect().rect()); |
| 3264 |
| 3265 // Update the scroller's transform value but ensure the child's paint offset |
| 3266 // is unchanged so subtree updates are not forced by paint offset changes. |
| 3267 scroller->setScrollTop(7); |
| 3268 child->setAttribute(HTMLNames::styleAttr, "position: absolute"); |
| 3269 document().view()->updateAllLifecyclePhases(); |
| 3270 EXPECT_EQ(LayoutPoint(0, 0), childLocalBorderBox->paintOffset); |
| 3271 EXPECT_EQ(LayoutPoint(0, 0), grandChildLocalBorderBox->paintOffset); |
| 3272 EXPECT_NE(childLocalBorderBox->propertyTreeState.scroll(), |
| 3273 scrollerProperties->scroll()); |
| 3274 EXPECT_TRUE(childLocalBorderBox->propertyTreeState.scroll()->isRoot()); |
| 3275 EXPECT_EQ( |
| 3276 FloatRect(0, 0, 800, 600), |
| 3277 grandChildLocalBorderBox->propertyTreeState.clip()->clipRect().rect()); |
| 3278 } |
| 3279 |
| 3280 TEST_P(PaintPropertyTreeBuilderTest, FixedLocalBorderBoxChanges) { |
| 3281 setBodyInnerHTML( |
| 3282 "<style>" |
| 3283 " body { margin: 0 }" |
| 3284 " #scroller { width: 3px; height: 5px; overflow: scroll; }" |
| 3285 " #child { top: 0; left: 0; }" |
| 3286 "</style>" |
| 3287 "<div id='scroller'>" |
| 3288 " <div id='child'>" |
| 3289 " <div id='grandChild'></div>" |
| 3290 " </div>" |
| 3291 " <div style='height: 100px;'></div>" |
| 3292 "</div>"); |
| 3293 document().view()->updateAllLifecyclePhases(); |
| 3294 auto* scroller = document().getElementById("scroller"); |
| 3295 auto* scrollerProperties = scroller->layoutObject()->paintProperties(); |
| 3296 auto* child = document().getElementById("child"); |
| 3297 auto* childProperties = child->layoutObject()->paintProperties(); |
| 3298 auto* childLocalBorderBox = childProperties->localBorderBoxProperties(); |
| 3299 EXPECT_EQ(childLocalBorderBox->propertyTreeState.scroll(), |
| 3300 scrollerProperties->scroll()); |
| 3301 EXPECT_EQ(LayoutPoint(0, 0), childLocalBorderBox->paintOffset); |
| 3302 auto* grandChild = document().getElementById("grandChild"); |
| 3303 auto* grandChildProperties = grandChild->layoutObject()->paintProperties(); |
| 3304 auto* grandChildLocalBorderBox = |
| 3305 grandChildProperties->localBorderBoxProperties(); |
| 3306 EXPECT_EQ(LayoutPoint(0, 0), grandChildLocalBorderBox->paintOffset); |
| 3307 EXPECT_EQ( |
| 3308 FloatRect(0, 0, 3, 5), |
| 3309 grandChildLocalBorderBox->propertyTreeState.clip()->clipRect().rect()); |
| 3310 |
| 3311 // Update the scroller's transform value but ensure the child's paint offset |
| 3312 // is unchanged so subtree updates are not forced by paint offset changes. |
| 3313 scroller->setScrollTop(7); |
| 3314 child->setAttribute(HTMLNames::styleAttr, "position: fixed"); |
| 3315 document().view()->updateAllLifecyclePhases(); |
| 3316 EXPECT_EQ(LayoutPoint(0, 0), childLocalBorderBox->paintOffset); |
| 3317 EXPECT_EQ(LayoutPoint(0, 0), grandChildLocalBorderBox->paintOffset); |
| 3318 EXPECT_NE(childLocalBorderBox->propertyTreeState.scroll(), |
| 3319 scrollerProperties->scroll()); |
| 3320 EXPECT_TRUE(childLocalBorderBox->propertyTreeState.scroll()->isRoot()); |
| 3321 EXPECT_EQ( |
| 3322 FloatRect(0, 0, 800, 600), |
| 3323 grandChildLocalBorderBox->propertyTreeState.clip()->clipRect().rect()); |
| 3324 } |
| 3325 |
| 3234 } // namespace blink | 3326 } // namespace blink |
| OLD | NEW |