| 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 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 145 loadTestData("fixed-position.html"); | 145 loadTestData("fixed-position.html"); |
| 146 | 146 |
| 147 Element* positionedScroll = document().getElementById("positionedScroll"); | 147 Element* positionedScroll = document().getElementById("positionedScroll"); |
| 148 positionedScroll->setScrollTop(3); | 148 positionedScroll->setScrollTop(3); |
| 149 Element* transformedScroll = document().getElementById("transformedScroll"); | 149 Element* transformedScroll = document().getElementById("transformedScroll"); |
| 150 transformedScroll->setScrollTop(5); | 150 transformedScroll->setScrollTop(5); |
| 151 | 151 |
| 152 FrameView* frameView = document().view(); | 152 FrameView* frameView = document().view(); |
| 153 frameView->updateAllLifecyclePhases(); | 153 frameView->updateAllLifecyclePhases(); |
| 154 | 154 |
| 155 // target1 is a fixed-position element inside an absolute-position scrolling e
lement. | 155 // target1 is a fixed-position element inside an absolute-position scrolling |
| 156 // It should be attached under the viewport to skip scrolling and offset of th
e parent. | 156 // element. It should be attached under the viewport to skip scrolling and |
| 157 // offset of the parent. |
| 157 Element* target1 = document().getElementById("target1"); | 158 Element* target1 = document().getElementById("target1"); |
| 158 const ObjectPaintProperties* target1Properties = | 159 const ObjectPaintProperties* target1Properties = |
| 159 target1->layoutObject()->objectPaintProperties(); | 160 target1->layoutObject()->objectPaintProperties(); |
| 160 EXPECT_EQ(TransformationMatrix().translate(200, 150), | 161 EXPECT_EQ(TransformationMatrix().translate(200, 150), |
| 161 target1Properties->paintOffsetTranslation()->matrix()); | 162 target1Properties->paintOffsetTranslation()->matrix()); |
| 162 EXPECT_EQ(framePreTranslation(), | 163 EXPECT_EQ(framePreTranslation(), |
| 163 target1Properties->paintOffsetTranslation()->parent()); | 164 target1Properties->paintOffsetTranslation()->parent()); |
| 164 EXPECT_EQ(target1Properties->paintOffsetTranslation(), | 165 EXPECT_EQ(target1Properties->paintOffsetTranslation(), |
| 165 target1Properties->overflowClip()->localTransformSpace()); | 166 target1Properties->overflowClip()->localTransformSpace()); |
| 166 EXPECT_EQ(FloatRoundedRect(0, 0, 100, 100), | 167 EXPECT_EQ(FloatRoundedRect(0, 0, 100, 100), |
| 167 target1Properties->overflowClip()->clipRect()); | 168 target1Properties->overflowClip()->clipRect()); |
| 168 // Likewise, it inherits clip from the viewport, skipping overflow clip of the
scroller. | 169 // Likewise, it inherits clip from the viewport, skipping overflow clip of the |
| 170 // scroller. |
| 169 EXPECT_EQ(frameContentClip(), target1Properties->overflowClip()->parent()); | 171 EXPECT_EQ(frameContentClip(), target1Properties->overflowClip()->parent()); |
| 170 // target1 should not have it's own scroll node and instead should inherit pos
itionedScroll's. | 172 // target1 should not have it's own scroll node and instead should inherit |
| 173 // positionedScroll's. |
| 171 const ObjectPaintProperties* positionedScrollProperties = | 174 const ObjectPaintProperties* positionedScrollProperties = |
| 172 positionedScroll->layoutObject()->objectPaintProperties(); | 175 positionedScroll->layoutObject()->objectPaintProperties(); |
| 173 EXPECT_TRUE(positionedScrollProperties->scroll()->parent()->isRoot()); | 176 EXPECT_TRUE(positionedScrollProperties->scroll()->parent()->isRoot()); |
| 174 EXPECT_EQ(TransformationMatrix().translate(0, -3), | 177 EXPECT_EQ(TransformationMatrix().translate(0, -3), |
| 175 positionedScrollProperties->scroll() | 178 positionedScrollProperties->scroll() |
| 176 ->scrollOffsetTranslation() | 179 ->scrollOffsetTranslation() |
| 177 ->matrix()); | 180 ->matrix()); |
| 178 EXPECT_EQ(nullptr, target1Properties->scroll()); | 181 EXPECT_EQ(nullptr, target1Properties->scroll()); |
| 179 | 182 |
| 180 CHECK_EXACT_VISUAL_RECT(LayoutRect(200, 150, 100, 100), | 183 CHECK_EXACT_VISUAL_RECT(LayoutRect(200, 150, 100, 100), |
| (...skipping 10 matching lines...) Expand all Loading... |
| 191 EXPECT_EQ(TransformationMatrix().translate(200, 150), | 194 EXPECT_EQ(TransformationMatrix().translate(200, 150), |
| 192 target2Properties->paintOffsetTranslation()->matrix()); | 195 target2Properties->paintOffsetTranslation()->matrix()); |
| 193 EXPECT_EQ(scrollerProperties->scrollTranslation(), | 196 EXPECT_EQ(scrollerProperties->scrollTranslation(), |
| 194 target2Properties->paintOffsetTranslation()->parent()); | 197 target2Properties->paintOffsetTranslation()->parent()); |
| 195 EXPECT_EQ(target2Properties->paintOffsetTranslation(), | 198 EXPECT_EQ(target2Properties->paintOffsetTranslation(), |
| 196 target2Properties->overflowClip()->localTransformSpace()); | 199 target2Properties->overflowClip()->localTransformSpace()); |
| 197 EXPECT_EQ(FloatRoundedRect(0, 0, 100, 100), | 200 EXPECT_EQ(FloatRoundedRect(0, 0, 100, 100), |
| 198 target2Properties->overflowClip()->clipRect()); | 201 target2Properties->overflowClip()->clipRect()); |
| 199 EXPECT_EQ(scrollerProperties->overflowClip(), | 202 EXPECT_EQ(scrollerProperties->overflowClip(), |
| 200 target2Properties->overflowClip()->parent()); | 203 target2Properties->overflowClip()->parent()); |
| 201 // target2 should not have it's own scroll node and instead should inherit tra
nsformedScroll's. | 204 // target2 should not have it's own scroll node and instead should inherit |
| 205 // transformedScroll's. |
| 202 const ObjectPaintProperties* transformedScrollProperties = | 206 const ObjectPaintProperties* transformedScrollProperties = |
| 203 transformedScroll->layoutObject()->objectPaintProperties(); | 207 transformedScroll->layoutObject()->objectPaintProperties(); |
| 204 EXPECT_TRUE(transformedScrollProperties->scroll()->parent()->isRoot()); | 208 EXPECT_TRUE(transformedScrollProperties->scroll()->parent()->isRoot()); |
| 205 EXPECT_EQ(TransformationMatrix().translate(0, -5), | 209 EXPECT_EQ(TransformationMatrix().translate(0, -5), |
| 206 transformedScrollProperties->scroll() | 210 transformedScrollProperties->scroll() |
| 207 ->scrollOffsetTranslation() | 211 ->scrollOffsetTranslation() |
| 208 ->matrix()); | 212 ->matrix()); |
| 209 EXPECT_EQ(nullptr, target2Properties->scroll()); | 213 EXPECT_EQ(nullptr, target2Properties->scroll()); |
| 210 | 214 |
| 211 CHECK_EXACT_VISUAL_RECT(LayoutRect(208, 153, 200, 100), | 215 CHECK_EXACT_VISUAL_RECT(LayoutRect(208, 153, 200, 100), |
| (...skipping 22 matching lines...) Expand all Loading... |
| 234 EXPECT_TRUE(scrollerProperties->scroll()->userScrollableVertical()); | 238 EXPECT_TRUE(scrollerProperties->scroll()->userScrollableVertical()); |
| 235 EXPECT_EQ(FloatRoundedRect(120, 340, 413, 317), | 239 EXPECT_EQ(FloatRoundedRect(120, 340, 413, 317), |
| 236 scrollerProperties->overflowClip()->clipRect()); | 240 scrollerProperties->overflowClip()->clipRect()); |
| 237 EXPECT_EQ(frameContentClip(), scrollerProperties->overflowClip()->parent()); | 241 EXPECT_EQ(frameContentClip(), scrollerProperties->overflowClip()->parent()); |
| 238 // http://crbug.com/638415 | 242 // http://crbug.com/638415 |
| 239 if (!RuntimeEnabledFeatures::rootLayerScrollingEnabled()) { | 243 if (!RuntimeEnabledFeatures::rootLayerScrollingEnabled()) { |
| 240 CHECK_EXACT_VISUAL_RECT(LayoutRect(120, 340, 413, 317), | 244 CHECK_EXACT_VISUAL_RECT(LayoutRect(120, 340, 413, 317), |
| 241 scroller->layoutObject(), frameView->layoutView()); | 245 scroller->layoutObject(), frameView->layoutView()); |
| 242 } | 246 } |
| 243 | 247 |
| 244 // The relative-positioned element should have accumulated box offset (exclude
scrolling), | 248 // The relative-positioned element should have accumulated box offset (exclude |
| 245 // and should be affected by ancestor scroll transforms. | 249 // scrolling), and should be affected by ancestor scroll transforms. |
| 246 Element* relPos = document().getElementById("rel-pos"); | 250 Element* relPos = document().getElementById("rel-pos"); |
| 247 const ObjectPaintProperties* relPosProperties = | 251 const ObjectPaintProperties* relPosProperties = |
| 248 relPos->layoutObject()->objectPaintProperties(); | 252 relPos->layoutObject()->objectPaintProperties(); |
| 249 EXPECT_EQ(TransformationMatrix().translate(680, 1120), | 253 EXPECT_EQ(TransformationMatrix().translate(680, 1120), |
| 250 relPosProperties->paintOffsetTranslation()->matrix()); | 254 relPosProperties->paintOffsetTranslation()->matrix()); |
| 251 EXPECT_EQ(scrollerProperties->scrollTranslation(), | 255 EXPECT_EQ(scrollerProperties->scrollTranslation(), |
| 252 relPosProperties->paintOffsetTranslation()->parent()); | 256 relPosProperties->paintOffsetTranslation()->parent()); |
| 253 EXPECT_EQ(relPosProperties->transform(), | 257 EXPECT_EQ(relPosProperties->transform(), |
| 254 relPosProperties->overflowClip()->localTransformSpace()); | 258 relPosProperties->overflowClip()->localTransformSpace()); |
| 255 EXPECT_EQ(FloatRoundedRect(0, 0, 100, 200), | 259 EXPECT_EQ(FloatRoundedRect(0, 0, 100, 200), |
| 256 relPosProperties->overflowClip()->clipRect()); | 260 relPosProperties->overflowClip()->clipRect()); |
| 257 EXPECT_EQ(scrollerProperties->overflowClip(), | 261 EXPECT_EQ(scrollerProperties->overflowClip(), |
| 258 relPosProperties->overflowClip()->parent()); | 262 relPosProperties->overflowClip()->parent()); |
| 259 CHECK_EXACT_VISUAL_RECT(LayoutRect(), relPos->layoutObject(), | 263 CHECK_EXACT_VISUAL_RECT(LayoutRect(), relPos->layoutObject(), |
| 260 frameView->layoutView()); | 264 frameView->layoutView()); |
| 261 | 265 |
| 262 // The absolute-positioned element should not be affected by non-positioned sc
roller at all. | 266 // The absolute-positioned element should not be affected by non-positioned |
| 267 // scroller at all. |
| 263 Element* absPos = document().getElementById("abs-pos"); | 268 Element* absPos = document().getElementById("abs-pos"); |
| 264 const ObjectPaintProperties* absPosProperties = | 269 const ObjectPaintProperties* absPosProperties = |
| 265 absPos->layoutObject()->objectPaintProperties(); | 270 absPos->layoutObject()->objectPaintProperties(); |
| 266 EXPECT_EQ(TransformationMatrix().translate(123, 456), | 271 EXPECT_EQ(TransformationMatrix().translate(123, 456), |
| 267 absPosProperties->paintOffsetTranslation()->matrix()); | 272 absPosProperties->paintOffsetTranslation()->matrix()); |
| 268 EXPECT_EQ(frameScrollTranslation(), | 273 EXPECT_EQ(frameScrollTranslation(), |
| 269 absPosProperties->paintOffsetTranslation()->parent()); | 274 absPosProperties->paintOffsetTranslation()->parent()); |
| 270 EXPECT_EQ(absPosProperties->transform(), | 275 EXPECT_EQ(absPosProperties->transform(), |
| 271 absPosProperties->overflowClip()->localTransformSpace()); | 276 absPosProperties->overflowClip()->localTransformSpace()); |
| 272 EXPECT_EQ(FloatRoundedRect(0, 0, 300, 400), | 277 EXPECT_EQ(FloatRoundedRect(0, 0, 300, 400), |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 309 } | 314 } |
| 310 | 315 |
| 311 TEST_P(PaintPropertyTreeBuilderTest, Perspective) { | 316 TEST_P(PaintPropertyTreeBuilderTest, Perspective) { |
| 312 loadTestData("perspective.html"); | 317 loadTestData("perspective.html"); |
| 313 | 318 |
| 314 Element* perspective = document().getElementById("perspective"); | 319 Element* perspective = document().getElementById("perspective"); |
| 315 const ObjectPaintProperties* perspectiveProperties = | 320 const ObjectPaintProperties* perspectiveProperties = |
| 316 perspective->layoutObject()->objectPaintProperties(); | 321 perspective->layoutObject()->objectPaintProperties(); |
| 317 EXPECT_EQ(TransformationMatrix().applyPerspective(100), | 322 EXPECT_EQ(TransformationMatrix().applyPerspective(100), |
| 318 perspectiveProperties->perspective()->matrix()); | 323 perspectiveProperties->perspective()->matrix()); |
| 319 // The perspective origin is the center of the border box plus accumulated pai
nt offset. | 324 // The perspective origin is the center of the border box plus accumulated |
| 325 // paint offset. |
| 320 EXPECT_EQ(FloatPoint3D(250, 250, 0), | 326 EXPECT_EQ(FloatPoint3D(250, 250, 0), |
| 321 perspectiveProperties->perspective()->origin()); | 327 perspectiveProperties->perspective()->origin()); |
| 322 EXPECT_EQ(framePreTranslation(), | 328 EXPECT_EQ(framePreTranslation(), |
| 323 perspectiveProperties->perspective()->parent()); | 329 perspectiveProperties->perspective()->parent()); |
| 324 | 330 |
| 325 // Adding perspective doesn't clear paint offset. The paint offset will be pas
sed down to children. | 331 // Adding perspective doesn't clear paint offset. The paint offset will be |
| 332 // passed down to children. |
| 326 Element* inner = document().getElementById("inner"); | 333 Element* inner = document().getElementById("inner"); |
| 327 const ObjectPaintProperties* innerProperties = | 334 const ObjectPaintProperties* innerProperties = |
| 328 inner->layoutObject()->objectPaintProperties(); | 335 inner->layoutObject()->objectPaintProperties(); |
| 329 EXPECT_EQ(TransformationMatrix().translate(50, 100), | 336 EXPECT_EQ(TransformationMatrix().translate(50, 100), |
| 330 innerProperties->paintOffsetTranslation()->matrix()); | 337 innerProperties->paintOffsetTranslation()->matrix()); |
| 331 EXPECT_EQ(perspectiveProperties->perspective(), | 338 EXPECT_EQ(perspectiveProperties->perspective(), |
| 332 innerProperties->paintOffsetTranslation()->parent()); | 339 innerProperties->paintOffsetTranslation()->parent()); |
| 333 CHECK_EXACT_VISUAL_RECT(LayoutRect(50, 100, 100, 200), inner->layoutObject(), | 340 CHECK_EXACT_VISUAL_RECT(LayoutRect(50, 100, 100, 200), inner->layoutObject(), |
| 334 document().view()->layoutView()); | 341 document().view()->layoutView()); |
| 335 } | 342 } |
| (...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 532 EXPECT_EQ(nullptr, rectWithoutOpacityProperties); | 539 EXPECT_EQ(nullptr, rectWithoutOpacityProperties); |
| 533 | 540 |
| 534 LayoutObject& rectWithOpacity = | 541 LayoutObject& rectWithOpacity = |
| 535 *document().getElementById("rectWithOpacity")->layoutObject(); | 542 *document().getElementById("rectWithOpacity")->layoutObject(); |
| 536 const ObjectPaintProperties* rectWithOpacityProperties = | 543 const ObjectPaintProperties* rectWithOpacityProperties = |
| 537 rectWithOpacity.objectPaintProperties(); | 544 rectWithOpacity.objectPaintProperties(); |
| 538 EXPECT_EQ(0.4f, rectWithOpacityProperties->effect()->opacity()); | 545 EXPECT_EQ(0.4f, rectWithOpacityProperties->effect()->opacity()); |
| 539 EXPECT_EQ(groupWithOpacityProperties->effect(), | 546 EXPECT_EQ(groupWithOpacityProperties->effect(), |
| 540 rectWithOpacityProperties->effect()->parent()); | 547 rectWithOpacityProperties->effect()->parent()); |
| 541 | 548 |
| 542 // Ensure that opacity nodes are created for LayoutSVGText which inherits from
LayoutSVGBlock instead of LayoutSVGModelObject. | 549 // Ensure that opacity nodes are created for LayoutSVGText which inherits from |
| 550 // LayoutSVGBlock instead of LayoutSVGModelObject. |
| 543 LayoutObject& textWithOpacity = | 551 LayoutObject& textWithOpacity = |
| 544 *document().getElementById("textWithOpacity")->layoutObject(); | 552 *document().getElementById("textWithOpacity")->layoutObject(); |
| 545 const ObjectPaintProperties* textWithOpacityProperties = | 553 const ObjectPaintProperties* textWithOpacityProperties = |
| 546 textWithOpacity.objectPaintProperties(); | 554 textWithOpacity.objectPaintProperties(); |
| 547 EXPECT_EQ(0.2f, textWithOpacityProperties->effect()->opacity()); | 555 EXPECT_EQ(0.2f, textWithOpacityProperties->effect()->opacity()); |
| 548 EXPECT_EQ(groupWithOpacityProperties->effect(), | 556 EXPECT_EQ(groupWithOpacityProperties->effect(), |
| 549 textWithOpacityProperties->effect()->parent()); | 557 textWithOpacityProperties->effect()->parent()); |
| 550 | 558 |
| 551 // Ensure that opacity nodes are created for LayoutSVGTSpan which inherits fro
m LayoutSVGInline instead of LayoutSVGModelObject. | 559 // Ensure that opacity nodes are created for LayoutSVGTSpan which inherits |
| 560 // from LayoutSVGInline instead of LayoutSVGModelObject. |
| 552 LayoutObject& tspanWithOpacity = | 561 LayoutObject& tspanWithOpacity = |
| 553 *document().getElementById("tspanWithOpacity")->layoutObject(); | 562 *document().getElementById("tspanWithOpacity")->layoutObject(); |
| 554 const ObjectPaintProperties* tspanWithOpacityProperties = | 563 const ObjectPaintProperties* tspanWithOpacityProperties = |
| 555 tspanWithOpacity.objectPaintProperties(); | 564 tspanWithOpacity.objectPaintProperties(); |
| 556 EXPECT_EQ(0.1f, tspanWithOpacityProperties->effect()->opacity()); | 565 EXPECT_EQ(0.1f, tspanWithOpacityProperties->effect()->opacity()); |
| 557 EXPECT_EQ(textWithOpacityProperties->effect(), | 566 EXPECT_EQ(textWithOpacityProperties->effect(), |
| 558 tspanWithOpacityProperties->effect()->parent()); | 567 tspanWithOpacityProperties->effect()->parent()); |
| 559 } | 568 } |
| 560 | 569 |
| 561 TEST_P(PaintPropertyTreeBuilderTest, EffectNodesAcrossHTMLSVGBoundary) { | 570 TEST_P(PaintPropertyTreeBuilderTest, EffectNodesAcrossHTMLSVGBoundary) { |
| (...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 750 svgProperties->paintOffsetTranslation()->matrix()); | 759 svgProperties->paintOffsetTranslation()->matrix()); |
| 751 EXPECT_EQ(TransformationMatrix().translate(5, 7), | 760 EXPECT_EQ(TransformationMatrix().translate(5, 7), |
| 752 svgProperties->transform()->matrix()); | 761 svgProperties->transform()->matrix()); |
| 753 EXPECT_EQ(TransformationMatrix().translate(11, 11).scale(100.0 / 13.0), | 762 EXPECT_EQ(TransformationMatrix().translate(11, 11).scale(100.0 / 13.0), |
| 754 svgProperties->svgLocalToBorderBoxTransform()->matrix()); | 763 svgProperties->svgLocalToBorderBoxTransform()->matrix()); |
| 755 EXPECT_EQ(svgProperties->paintOffsetTranslation(), | 764 EXPECT_EQ(svgProperties->paintOffsetTranslation(), |
| 756 svgProperties->transform()->parent()); | 765 svgProperties->transform()->parent()); |
| 757 EXPECT_EQ(svgProperties->transform(), | 766 EXPECT_EQ(svgProperties->transform(), |
| 758 svgProperties->svgLocalToBorderBoxTransform()->parent()); | 767 svgProperties->svgLocalToBorderBoxTransform()->parent()); |
| 759 | 768 |
| 760 // Ensure the rect's transform is a child of the local to border box transform
. | 769 // Ensure the rect's transform is a child of the local to border box |
| 770 // transform. |
| 761 LayoutObject& rect = *document().getElementById("rect")->layoutObject(); | 771 LayoutObject& rect = *document().getElementById("rect")->layoutObject(); |
| 762 const ObjectPaintProperties* rectProperties = rect.objectPaintProperties(); | 772 const ObjectPaintProperties* rectProperties = rect.objectPaintProperties(); |
| 763 EXPECT_EQ(TransformationMatrix().translate(17, 19), | 773 EXPECT_EQ(TransformationMatrix().translate(17, 19), |
| 764 rectProperties->transform()->matrix()); | 774 rectProperties->transform()->matrix()); |
| 765 EXPECT_EQ(svgProperties->svgLocalToBorderBoxTransform(), | 775 EXPECT_EQ(svgProperties->svgLocalToBorderBoxTransform(), |
| 766 rectProperties->transform()->parent()); | 776 rectProperties->transform()->parent()); |
| 767 } | 777 } |
| 768 | 778 |
| 769 TEST_P(PaintPropertyTreeBuilderTest, SVGNestedViewboxTransforms) { | 779 TEST_P(PaintPropertyTreeBuilderTest, SVGNestedViewboxTransforms) { |
| 770 setBodyInnerHTML( | 780 setBodyInnerHTML( |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 859 EXPECT_EQ(TransformationMatrix().translate(20, 30), | 869 EXPECT_EQ(TransformationMatrix().translate(20, 30), |
| 860 containerProperties->transform()->matrix()); | 870 containerProperties->transform()->matrix()); |
| 861 EXPECT_EQ(svgProperties->transform(), | 871 EXPECT_EQ(svgProperties->transform(), |
| 862 containerProperties->transform()->parent()); | 872 containerProperties->transform()->parent()); |
| 863 | 873 |
| 864 Element* fixed = document().getElementById("fixed"); | 874 Element* fixed = document().getElementById("fixed"); |
| 865 const ObjectPaintProperties* fixedProperties = | 875 const ObjectPaintProperties* fixedProperties = |
| 866 fixed->layoutObject()->objectPaintProperties(); | 876 fixed->layoutObject()->objectPaintProperties(); |
| 867 EXPECT_EQ(TransformationMatrix().translate(200, 150), | 877 EXPECT_EQ(TransformationMatrix().translate(200, 150), |
| 868 fixedProperties->paintOffsetTranslation()->matrix()); | 878 fixedProperties->paintOffsetTranslation()->matrix()); |
| 869 // Ensure the fixed position element is rooted at the nearest transform contai
ner. | 879 // Ensure the fixed position element is rooted at the nearest transform |
| 880 // container. |
| 870 EXPECT_EQ(containerProperties->transform(), | 881 EXPECT_EQ(containerProperties->transform(), |
| 871 fixedProperties->paintOffsetTranslation()->parent()); | 882 fixedProperties->paintOffsetTranslation()->parent()); |
| 872 } | 883 } |
| 873 | 884 |
| 874 TEST_P(PaintPropertyTreeBuilderTest, ControlClip) { | 885 TEST_P(PaintPropertyTreeBuilderTest, ControlClip) { |
| 875 setBodyInnerHTML( | 886 setBodyInnerHTML( |
| 876 "<style>" | 887 "<style>" |
| 877 " body {" | 888 " body {" |
| 878 " margin: 0;" | 889 " margin: 0;" |
| 879 " }" | 890 " }" |
| 880 " input {" | 891 " input {" |
| 881 " border-width: 5px;" | 892 " border-width: 5px;" |
| 882 " padding: 0;" | 893 " padding: 0;" |
| 883 " }" | 894 " }" |
| 884 "</style>" | 895 "</style>" |
| 885 "<input id='button' type='button' style='width:345px; height:123px' " | 896 "<input id='button' type='button' style='width:345px; height:123px' " |
| 886 "value='some text'/>"); | 897 "value='some text'/>"); |
| 887 | 898 |
| 888 LayoutObject& button = *document().getElementById("button")->layoutObject(); | 899 LayoutObject& button = *document().getElementById("button")->layoutObject(); |
| 889 const ObjectPaintProperties* buttonProperties = | 900 const ObjectPaintProperties* buttonProperties = |
| 890 button.objectPaintProperties(); | 901 button.objectPaintProperties(); |
| 891 // No scroll translation because the document does not scroll (not enough cont
ent). | 902 // No scroll translation because the document does not scroll (not enough |
| 903 // content). |
| 892 EXPECT_TRUE(!frameScrollTranslation()); | 904 EXPECT_TRUE(!frameScrollTranslation()); |
| 893 EXPECT_EQ(framePreTranslation(), | 905 EXPECT_EQ(framePreTranslation(), |
| 894 buttonProperties->overflowClip()->localTransformSpace()); | 906 buttonProperties->overflowClip()->localTransformSpace()); |
| 895 EXPECT_EQ(FloatRoundedRect(5, 5, 335, 113), | 907 EXPECT_EQ(FloatRoundedRect(5, 5, 335, 113), |
| 896 buttonProperties->overflowClip()->clipRect()); | 908 buttonProperties->overflowClip()->clipRect()); |
| 897 EXPECT_EQ(frameContentClip(), buttonProperties->overflowClip()->parent()); | 909 EXPECT_EQ(frameContentClip(), buttonProperties->overflowClip()->parent()); |
| 898 CHECK_EXACT_VISUAL_RECT(LayoutRect(0, 0, 345, 123), &button, | 910 CHECK_EXACT_VISUAL_RECT(LayoutRect(0, 0, 345, 123), &button, |
| 899 document().view()->layoutView()); | 911 document().view()->layoutView()); |
| 900 } | 912 } |
| 901 | 913 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 913 " border-left: 60px solid;" | 925 " border-left: 60px solid;" |
| 914 " width: 500px;" | 926 " width: 500px;" |
| 915 " height: 400px;" | 927 " height: 400px;" |
| 916 " overflow: scroll;" | 928 " overflow: scroll;" |
| 917 " }" | 929 " }" |
| 918 "</style>" | 930 "</style>" |
| 919 "<div id='div'></div>"); | 931 "<div id='div'></div>"); |
| 920 | 932 |
| 921 LayoutObject& div = *document().getElementById("div")->layoutObject(); | 933 LayoutObject& div = *document().getElementById("div")->layoutObject(); |
| 922 const ObjectPaintProperties* divProperties = div.objectPaintProperties(); | 934 const ObjectPaintProperties* divProperties = div.objectPaintProperties(); |
| 923 // No scroll translation because the document does not scroll (not enough cont
ent). | 935 // No scroll translation because the document does not scroll (not enough |
| 936 // content). |
| 924 EXPECT_TRUE(!frameScrollTranslation()); | 937 EXPECT_TRUE(!frameScrollTranslation()); |
| 925 EXPECT_EQ(framePreTranslation(), | 938 EXPECT_EQ(framePreTranslation(), |
| 926 divProperties->overflowClip()->localTransformSpace()); | 939 divProperties->overflowClip()->localTransformSpace()); |
| 927 // The overflow clip rect includes only the padding box. | 940 // The overflow clip rect includes only the padding box. |
| 928 // padding box = border box(500+60+50, 400+45+55) - border outset(60+50, 45+55
) - scrollbars(15, 15) | 941 // padding box = border box(500+60+50, 400+45+55) - border outset(60+50, |
| 942 // 45+55) - scrollbars(15, 15) |
| 929 EXPECT_EQ(FloatRoundedRect(60, 45, 500, 400), | 943 EXPECT_EQ(FloatRoundedRect(60, 45, 500, 400), |
| 930 divProperties->overflowClip()->clipRect()); | 944 divProperties->overflowClip()->clipRect()); |
| 931 const ClipPaintPropertyNode* borderRadiusClip = | 945 const ClipPaintPropertyNode* borderRadiusClip = |
| 932 divProperties->overflowClip()->parent(); | 946 divProperties->overflowClip()->parent(); |
| 933 EXPECT_EQ(framePreTranslation(), borderRadiusClip->localTransformSpace()); | 947 EXPECT_EQ(framePreTranslation(), borderRadiusClip->localTransformSpace()); |
| 934 // The border radius clip is the area enclosed by inner border edge, including
the scrollbars. | 948 // The border radius clip is the area enclosed by inner border edge, including |
| 935 // As the border-radius is specified in outer radius, the inner radius is calc
ulated by: | 949 // the scrollbars. As the border-radius is specified in outer radius, the |
| 950 // inner radius is calculated by: |
| 936 // inner radius = max(outer radius - border width, 0) | 951 // inner radius = max(outer radius - border width, 0) |
| 937 // In the case that two adjacent borders have different width, the inner radiu
s of the corner | 952 // In the case that two adjacent borders have different width, the inner |
| 938 // may transition from one value to the other. i.e. being an ellipse. | 953 // radius of the corner may transition from one value to the other. i.e. being |
| 954 // an ellipse. |
| 939 EXPECT_EQ( | 955 EXPECT_EQ( |
| 940 FloatRoundedRect( | 956 FloatRoundedRect( |
| 941 FloatRect(60, 45, 500, | 957 FloatRect(60, 45, 500, |
| 942 400), // = border box(610, 500) - border outset(110, 100) | 958 400), // = border box(610, 500) - border outset(110, 100) |
| 943 FloatSize(0, | 959 FloatSize(0, |
| 944 0), // (top left) = max((12, 12) - (60, 45), (0, 0)) | 960 0), // (top left) = max((12, 12) - (60, 45), (0, 0)) |
| 945 FloatSize(0, | 961 FloatSize(0, |
| 946 0), // (top right) = max((34, 34) - (50, 45), (0, 0)) | 962 0), // (top right) = max((34, 34) - (50, 45), (0, 0)) |
| 947 FloatSize(18, | 963 FloatSize(18, |
| 948 23), // (bottom left) = max((78, 78) - (60, 55), (0, 0)) | 964 23), // (bottom left) = max((78, 78) - (60, 55), (0, 0)) |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 983 LayoutObject* innerDivWithTransform = | 999 LayoutObject* innerDivWithTransform = |
| 984 frameDocument.getElementById("transform")->layoutObject(); | 1000 frameDocument.getElementById("transform")->layoutObject(); |
| 985 const ObjectPaintProperties* innerDivWithTransformProperties = | 1001 const ObjectPaintProperties* innerDivWithTransformProperties = |
| 986 innerDivWithTransform->objectPaintProperties(); | 1002 innerDivWithTransform->objectPaintProperties(); |
| 987 auto* innerDivTransform = innerDivWithTransformProperties->transform(); | 1003 auto* innerDivTransform = innerDivWithTransformProperties->transform(); |
| 988 EXPECT_EQ(TransformationMatrix().translate3d(4, 5, 6), | 1004 EXPECT_EQ(TransformationMatrix().translate3d(4, 5, 6), |
| 989 innerDivTransform->matrix()); | 1005 innerDivTransform->matrix()); |
| 990 CHECK_EXACT_VISUAL_RECT(LayoutRect(12, 14, 100, 145), innerDivWithTransform, | 1006 CHECK_EXACT_VISUAL_RECT(LayoutRect(12, 14, 100, 145), innerDivWithTransform, |
| 991 frameView->layoutView()); | 1007 frameView->layoutView()); |
| 992 | 1008 |
| 993 // Ensure that the inner div's transform is correctly rooted in the root frame
's transform tree. | 1009 // Ensure that the inner div's transform is correctly rooted in the root |
| 1010 // frame's transform tree. |
| 994 // This asserts that we have the following tree structure: | 1011 // This asserts that we have the following tree structure: |
| 995 // ... | 1012 // ... |
| 996 // Transform transform=translation=1.000000,2.000000,3.000000 | 1013 // Transform transform=translation=1.000000,2.000000,3.000000 |
| 997 // PreTranslation transform=translation=7.000000,7.000000,0.000000 | 1014 // PreTranslation transform=translation=7.000000,7.000000,0.000000 |
| 998 // ScrollTranslation transform=translation=0.000000,0.000000,0.000000 | 1015 // ScrollTranslation transform=translation=0.000000,0.000000,0.000000 |
| 999 // Transform transform=translation=4.000000,5.000000,6.000000 | 1016 // Transform transform=translation=4.000000,5.000000,6.000000 |
| 1000 auto* innerDocumentScrollTranslation = innerDivTransform->parent(); | 1017 auto* innerDocumentScrollTranslation = innerDivTransform->parent(); |
| 1001 EXPECT_EQ(TransformationMatrix().translate3d(0, 0, 0), | 1018 EXPECT_EQ(TransformationMatrix().translate3d(0, 0, 0), |
| 1002 innerDocumentScrollTranslation->matrix()); | 1019 innerDocumentScrollTranslation->matrix()); |
| 1003 auto* iframePreTranslation = innerDocumentScrollTranslation->parent(); | 1020 auto* iframePreTranslation = innerDocumentScrollTranslation->parent(); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 1022 "9px); width: 100px; height: 200px'></div>"); | 1039 "9px); width: 100px; height: 200px'></div>"); |
| 1023 FrameView* frameView = document().view(); | 1040 FrameView* frameView = document().view(); |
| 1024 frameView->updateAllLifecyclePhases(); | 1041 frameView->updateAllLifecyclePhases(); |
| 1025 | 1042 |
| 1026 // Assert that we have the following tree structure: | 1043 // Assert that we have the following tree structure: |
| 1027 // ... | 1044 // ... |
| 1028 // Transform transform=translation=1.000000,2.000000,3.000000 | 1045 // Transform transform=translation=1.000000,2.000000,3.000000 |
| 1029 // PaintOffsetTranslation transform=translation=7.000000,7.000000,0.000000 | 1046 // PaintOffsetTranslation transform=translation=7.000000,7.000000,0.000000 |
| 1030 // Transform transform=translation=4.000000,5.000000,6.000000 | 1047 // Transform transform=translation=4.000000,5.000000,6.000000 |
| 1031 // PreTranslation transform=translation=42.000000,42.000000,0.000000 | 1048 // PreTranslation transform=translation=42.000000,42.000000,0.000000 |
| 1032 // ScrollTranslation transform=translation=0.000000,0.000000,0.00000
0 | 1049 // ScrollTranslation transform=translation=0.000000,0.000000,0.00000 |
| 1033 // PaintOffsetTranslation transform=translation=31.000000,31.00000
0,0.000000 | 1050 // PaintOffsetTranslation transform=translation=31.00,31.00,0.00 |
| 1034 // Transform transform=translation=7.000000,8.000000,9.000000 | 1051 // Transform transform=translation=7.000000,8.000000,9.000000 |
| 1035 | 1052 |
| 1036 LayoutObject* innerDivWithTransform = | 1053 LayoutObject* innerDivWithTransform = |
| 1037 frameDocument.getElementById("transform")->layoutObject(); | 1054 frameDocument.getElementById("transform")->layoutObject(); |
| 1038 auto* innerDivTransform = | 1055 auto* innerDivTransform = |
| 1039 innerDivWithTransform->objectPaintProperties()->transform(); | 1056 innerDivWithTransform->objectPaintProperties()->transform(); |
| 1040 EXPECT_EQ(TransformationMatrix().translate3d(7, 8, 9), | 1057 EXPECT_EQ(TransformationMatrix().translate3d(7, 8, 9), |
| 1041 innerDivTransform->matrix()); | 1058 innerDivTransform->matrix()); |
| 1042 CHECK_EXACT_VISUAL_RECT(LayoutRect(92, 95, 100, 111), innerDivWithTransform, | 1059 CHECK_EXACT_VISUAL_RECT(LayoutRect(92, 95, 100, 111), innerDivWithTransform, |
| 1043 frameView->layoutView()); | 1060 frameView->layoutView()); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 1067 EXPECT_EQ(divWithTransformTransform, | 1084 EXPECT_EQ(divWithTransformTransform, |
| 1068 divWithTransform->objectPaintProperties()->transform()); | 1085 divWithTransform->objectPaintProperties()->transform()); |
| 1069 // http://crbug.com/638415 | 1086 // http://crbug.com/638415 |
| 1070 if (!RuntimeEnabledFeatures::rootLayerScrollingEnabled()) { | 1087 if (!RuntimeEnabledFeatures::rootLayerScrollingEnabled()) { |
| 1071 CHECK_EXACT_VISUAL_RECT(LayoutRect(1, 2, 800, 248), divWithTransform, | 1088 CHECK_EXACT_VISUAL_RECT(LayoutRect(1, 2, 800, 248), divWithTransform, |
| 1072 frameView->layoutView()); | 1089 frameView->layoutView()); |
| 1073 } | 1090 } |
| 1074 } | 1091 } |
| 1075 | 1092 |
| 1076 TEST_P(PaintPropertyTreeBuilderTest, TreeContextClipByNonStackingContext) { | 1093 TEST_P(PaintPropertyTreeBuilderTest, TreeContextClipByNonStackingContext) { |
| 1077 // This test verifies the tree builder correctly computes and records the prop
erty tree context | 1094 // This test verifies the tree builder correctly computes and records the |
| 1078 // for a (pseudo) stacking context that is scrolled by a containing block that
is not one of | 1095 // property tree context for a (pseudo) stacking context that is scrolled by a |
| 1079 // the painting ancestors. | 1096 // containing block that is not one of the painting ancestors. |
| 1080 setBodyInnerHTML( | 1097 setBodyInnerHTML( |
| 1081 "<style>body { margin: 0; }</style>" | 1098 "<style>body { margin: 0; }</style>" |
| 1082 "<div id='scroller' style='overflow:scroll; width:400px; height:300px;'>" | 1099 "<div id='scroller' style='overflow:scroll; width:400px; height:300px;'>" |
| 1083 " <div id='child' style='position:relative; width:100px; height: " | 1100 " <div id='child' style='position:relative; width:100px; height: " |
| 1084 "200px;'></div>" | 1101 "200px;'></div>" |
| 1085 " <div style='height:10000px;'></div>" | 1102 " <div style='height:10000px;'></div>" |
| 1086 "</div>"); | 1103 "</div>"); |
| 1087 FrameView* frameView = document().view(); | 1104 FrameView* frameView = document().view(); |
| 1088 | 1105 |
| 1089 LayoutObject* scroller = | 1106 LayoutObject* scroller = |
| (...skipping 13 matching lines...) Expand all Loading... |
| 1103 nullptr, | 1120 nullptr, |
| 1104 childProperties->localBorderBoxProperties()->propertyTreeState.effect()); | 1121 childProperties->localBorderBoxProperties()->propertyTreeState.effect()); |
| 1105 CHECK_EXACT_VISUAL_RECT(LayoutRect(0, 0, 400, 300), scroller, | 1122 CHECK_EXACT_VISUAL_RECT(LayoutRect(0, 0, 400, 300), scroller, |
| 1106 frameView->layoutView()); | 1123 frameView->layoutView()); |
| 1107 CHECK_EXACT_VISUAL_RECT(LayoutRect(0, 0, 100, 200), child, | 1124 CHECK_EXACT_VISUAL_RECT(LayoutRect(0, 0, 100, 200), child, |
| 1108 frameView->layoutView()); | 1125 frameView->layoutView()); |
| 1109 } | 1126 } |
| 1110 | 1127 |
| 1111 TEST_P(PaintPropertyTreeBuilderTest, | 1128 TEST_P(PaintPropertyTreeBuilderTest, |
| 1112 TreeContextUnclipFromParentStackingContext) { | 1129 TreeContextUnclipFromParentStackingContext) { |
| 1113 // This test verifies the tree builder correctly computes and records the prop
erty tree context | 1130 // This test verifies the tree builder correctly computes and records the |
| 1114 // for a (pseudo) stacking context that has a scrolling painting ancestor that
is not its | 1131 // property tree context for a (pseudo) stacking context that has a scrolling |
| 1115 // containing block (thus should not be scrolled by it). | 1132 // painting ancestor that is not its containing block (thus should not be |
| 1133 // scrolled by it). |
| 1116 | 1134 |
| 1117 setBodyInnerHTML( | 1135 setBodyInnerHTML( |
| 1118 "<style>body { margin: 0; }</style>" | 1136 "<style>body { margin: 0; }</style>" |
| 1119 "<div id='scroller' style='overflow:scroll; opacity:0.5;'>" | 1137 "<div id='scroller' style='overflow:scroll; opacity:0.5;'>" |
| 1120 " <div id='child' style='position:absolute; left:0; top:0; width: " | 1138 " <div id='child' style='position:absolute; left:0; top:0; width: " |
| 1121 "100px; height: 200px'></div>" | 1139 "100px; height: 200px'></div>" |
| 1122 " <div style='height:10000px;'></div>" | 1140 " <div style='height:10000px;'></div>" |
| 1123 "</div>"); | 1141 "</div>"); |
| 1124 | 1142 |
| 1125 LayoutObject& scroller = | 1143 LayoutObject& scroller = |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1140 childProperties->localBorderBoxProperties()->propertyTreeState.effect()); | 1158 childProperties->localBorderBoxProperties()->propertyTreeState.effect()); |
| 1141 if (!RuntimeEnabledFeatures::rootLayerScrollingEnabled()) { | 1159 if (!RuntimeEnabledFeatures::rootLayerScrollingEnabled()) { |
| 1142 CHECK_EXACT_VISUAL_RECT(LayoutRect(0, 0, 800, 10000), &scroller, | 1160 CHECK_EXACT_VISUAL_RECT(LayoutRect(0, 0, 800, 10000), &scroller, |
| 1143 document().view()->layoutView()); | 1161 document().view()->layoutView()); |
| 1144 } | 1162 } |
| 1145 CHECK_EXACT_VISUAL_RECT(LayoutRect(0, 0, 100, 200), &child, | 1163 CHECK_EXACT_VISUAL_RECT(LayoutRect(0, 0, 100, 200), &child, |
| 1146 document().view()->layoutView()); | 1164 document().view()->layoutView()); |
| 1147 } | 1165 } |
| 1148 | 1166 |
| 1149 TEST_P(PaintPropertyTreeBuilderTest, TableCellLayoutLocation) { | 1167 TEST_P(PaintPropertyTreeBuilderTest, TableCellLayoutLocation) { |
| 1150 // This test verifies that the border box space of a table cell is being corre
ctly computed. | 1168 // This test verifies that the border box space of a table cell is being |
| 1151 // Table cells have weird location adjustment in our layout/paint implementati
on. | 1169 // correctly computed. Table cells have weird location adjustment in our |
| 1170 // layout/paint implementation. |
| 1152 setBodyInnerHTML( | 1171 setBodyInnerHTML( |
| 1153 "<style>" | 1172 "<style>" |
| 1154 " body {" | 1173 " body {" |
| 1155 " margin: 0;" | 1174 " margin: 0;" |
| 1156 " }" | 1175 " }" |
| 1157 " table {" | 1176 " table {" |
| 1158 " border-spacing: 0;" | 1177 " border-spacing: 0;" |
| 1159 " margin: 20px;" | 1178 " margin: 20px;" |
| 1160 " padding: 40px;" | 1179 " padding: 40px;" |
| 1161 " border: 10px solid black;" | 1180 " border: 10px solid black;" |
| (...skipping 20 matching lines...) Expand all Loading... |
| 1182 | 1201 |
| 1183 EXPECT_EQ(LayoutPoint(170, 170), | 1202 EXPECT_EQ(LayoutPoint(170, 170), |
| 1184 targetProperties->localBorderBoxProperties()->paintOffset); | 1203 targetProperties->localBorderBoxProperties()->paintOffset); |
| 1185 EXPECT_EQ(framePreTranslation(), targetProperties->localBorderBoxProperties() | 1204 EXPECT_EQ(framePreTranslation(), targetProperties->localBorderBoxProperties() |
| 1186 ->propertyTreeState.transform()); | 1205 ->propertyTreeState.transform()); |
| 1187 CHECK_EXACT_VISUAL_RECT(LayoutRect(170, 170, 100, 100), &target, | 1206 CHECK_EXACT_VISUAL_RECT(LayoutRect(170, 170, 100, 100), &target, |
| 1188 document().view()->layoutView()); | 1207 document().view()->layoutView()); |
| 1189 } | 1208 } |
| 1190 | 1209 |
| 1191 TEST_P(PaintPropertyTreeBuilderTest, CSSClipFixedPositionDescendant) { | 1210 TEST_P(PaintPropertyTreeBuilderTest, CSSClipFixedPositionDescendant) { |
| 1192 // This test verifies that clip tree hierarchy being generated correctly for t
he hard case | 1211 // This test verifies that clip tree hierarchy being generated correctly for |
| 1193 // such that a fixed position element getting clipped by an absolute position
CSS clip. | 1212 // the hard case such that a fixed position element getting clipped by an |
| 1213 // absolute position CSS clip. |
| 1194 setBodyInnerHTML( | 1214 setBodyInnerHTML( |
| 1195 "<style>" | 1215 "<style>" |
| 1196 " #clip {" | 1216 " #clip {" |
| 1197 " position: absolute;" | 1217 " position: absolute;" |
| 1198 " left: 123px;" | 1218 " left: 123px;" |
| 1199 " top: 456px;" | 1219 " top: 456px;" |
| 1200 " clip: rect(10px, 80px, 70px, 40px);" | 1220 " clip: rect(10px, 80px, 70px, 40px);" |
| 1201 " width: 100px;" | 1221 " width: 100px;" |
| 1202 " height: 100px;" | 1222 " height: 100px;" |
| 1203 " }" | 1223 " }" |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1214 LayoutRect absoluteClipRect = localClipRect; | 1234 LayoutRect absoluteClipRect = localClipRect; |
| 1215 absoluteClipRect.move(123, 456); | 1235 absoluteClipRect.move(123, 456); |
| 1216 | 1236 |
| 1217 LayoutObject& clip = *document().getElementById("clip")->layoutObject(); | 1237 LayoutObject& clip = *document().getElementById("clip")->layoutObject(); |
| 1218 const ObjectPaintProperties* clipProperties = clip.objectPaintProperties(); | 1238 const ObjectPaintProperties* clipProperties = clip.objectPaintProperties(); |
| 1219 EXPECT_EQ(frameContentClip(), clipProperties->cssClip()->parent()); | 1239 EXPECT_EQ(frameContentClip(), clipProperties->cssClip()->parent()); |
| 1220 EXPECT_EQ(framePreTranslation(), | 1240 EXPECT_EQ(framePreTranslation(), |
| 1221 clipProperties->cssClip()->localTransformSpace()); | 1241 clipProperties->cssClip()->localTransformSpace()); |
| 1222 EXPECT_EQ(FloatRoundedRect(FloatRect(absoluteClipRect)), | 1242 EXPECT_EQ(FloatRoundedRect(FloatRect(absoluteClipRect)), |
| 1223 clipProperties->cssClip()->clipRect()); | 1243 clipProperties->cssClip()->clipRect()); |
| 1224 CHECK_VISUAL_RECT( | 1244 CHECK_VISUAL_RECT(absoluteClipRect, &clip, document().view()->layoutView(), |
| 1225 absoluteClipRect, &clip, document().view()->layoutView(), | 1245 // TODO(crbug.com/599939): mapToVisualRectInAncestorSpace() |
| 1226 // TODO(crbug.com/599939): mapToVisualRectInAncestorSpace() doesn't apply
css clip on the object itself. | 1246 // doesn't apply css clip on the object itself. |
| 1227 LayoutUnit::max()); | 1247 LayoutUnit::max()); |
| 1228 | 1248 |
| 1229 LayoutObject* fixed = document().getElementById("fixed")->layoutObject(); | 1249 LayoutObject* fixed = document().getElementById("fixed")->layoutObject(); |
| 1230 const ObjectPaintProperties* fixedProperties = fixed->objectPaintProperties(); | 1250 const ObjectPaintProperties* fixedProperties = fixed->objectPaintProperties(); |
| 1231 EXPECT_EQ( | 1251 EXPECT_EQ( |
| 1232 clipProperties->cssClip(), | 1252 clipProperties->cssClip(), |
| 1233 fixedProperties->localBorderBoxProperties()->propertyTreeState.clip()); | 1253 fixedProperties->localBorderBoxProperties()->propertyTreeState.clip()); |
| 1234 EXPECT_EQ(framePreTranslation(), fixedProperties->localBorderBoxProperties() | 1254 EXPECT_EQ(framePreTranslation(), fixedProperties->localBorderBoxProperties() |
| 1235 ->propertyTreeState.transform() | 1255 ->propertyTreeState.transform() |
| 1236 ->parent()); | 1256 ->parent()); |
| 1237 EXPECT_EQ(TransformationMatrix().translate(654, 321), | 1257 EXPECT_EQ(TransformationMatrix().translate(654, 321), |
| 1238 fixedProperties->localBorderBoxProperties() | 1258 fixedProperties->localBorderBoxProperties() |
| 1239 ->propertyTreeState.transform() | 1259 ->propertyTreeState.transform() |
| 1240 ->matrix()); | 1260 ->matrix()); |
| 1241 EXPECT_EQ(LayoutPoint(), | 1261 EXPECT_EQ(LayoutPoint(), |
| 1242 fixedProperties->localBorderBoxProperties()->paintOffset); | 1262 fixedProperties->localBorderBoxProperties()->paintOffset); |
| 1243 CHECK_VISUAL_RECT( | 1263 CHECK_VISUAL_RECT(LayoutRect(), fixed, document().view()->layoutView(), |
| 1244 LayoutRect(), fixed, document().view()->layoutView(), | 1264 // TODO(crbug.com/599939): CSS clip of fixed-position |
| 1245 // TODO(crbug.com/599939): CSS clip of fixed-position descendants is broke
n in mapToVisualRectInAncestorSpace(). | 1265 // descendants is broken in |
| 1246 LayoutUnit::max()); | 1266 // mapToVisualRectInAncestorSpace(). |
| 1267 LayoutUnit::max()); |
| 1247 } | 1268 } |
| 1248 | 1269 |
| 1249 TEST_P(PaintPropertyTreeBuilderTest, CSSClipAbsPositionDescendant) { | 1270 TEST_P(PaintPropertyTreeBuilderTest, CSSClipAbsPositionDescendant) { |
| 1250 // This test verifies that clip tree hierarchy being generated correctly for t
he hard case | 1271 // This test verifies that clip tree hierarchy being generated correctly for |
| 1251 // such that a fixed position element getting clipped by an absolute position
CSS clip. | 1272 // the hard case such that a fixed position element getting clipped by an |
| 1273 // absolute position CSS clip. |
| 1252 setBodyInnerHTML( | 1274 setBodyInnerHTML( |
| 1253 "<style>" | 1275 "<style>" |
| 1254 " #clip {" | 1276 " #clip {" |
| 1255 " position: absolute;" | 1277 " position: absolute;" |
| 1256 " left: 123px;" | 1278 " left: 123px;" |
| 1257 " top: 456px;" | 1279 " top: 456px;" |
| 1258 " clip: rect(10px, 80px, 70px, 40px);" | 1280 " clip: rect(10px, 80px, 70px, 40px);" |
| 1259 " width: 100px;" | 1281 " width: 100px;" |
| 1260 " height: 100px;" | 1282 " height: 100px;" |
| 1261 " }" | 1283 " }" |
| 1262 " #abs {" | 1284 " #abs {" |
| 1263 " position: absolute;" | 1285 " position: absolute;" |
| 1264 " left: 654px;" | 1286 " left: 654px;" |
| 1265 " top: 321px;" | 1287 " top: 321px;" |
| 1266 " width: 10px;" | 1288 " width: 10px;" |
| 1267 " heght: 20px" | 1289 " heght: 20px" |
| 1268 " }" | 1290 " }" |
| 1269 "</style>" | 1291 "</style>" |
| 1270 "<div id='clip'><div id='absolute'></div></div>"); | 1292 "<div id='clip'><div id='absolute'></div></div>"); |
| 1271 | 1293 |
| 1272 LayoutRect localClipRect(40, 10, 40, 60); | 1294 LayoutRect localClipRect(40, 10, 40, 60); |
| 1273 LayoutRect absoluteClipRect = localClipRect; | 1295 LayoutRect absoluteClipRect = localClipRect; |
| 1274 absoluteClipRect.move(123, 456); | 1296 absoluteClipRect.move(123, 456); |
| 1275 | 1297 |
| 1276 LayoutObject* clip = document().getElementById("clip")->layoutObject(); | 1298 LayoutObject* clip = document().getElementById("clip")->layoutObject(); |
| 1277 const ObjectPaintProperties* clipProperties = clip->objectPaintProperties(); | 1299 const ObjectPaintProperties* clipProperties = clip->objectPaintProperties(); |
| 1278 EXPECT_EQ(frameContentClip(), clipProperties->cssClip()->parent()); | 1300 EXPECT_EQ(frameContentClip(), clipProperties->cssClip()->parent()); |
| 1279 // No scroll translation because the document does not scroll (not enough cont
ent). | 1301 // No scroll translation because the document does not scroll (not enough |
| 1302 // content). |
| 1280 EXPECT_TRUE(!frameScrollTranslation()); | 1303 EXPECT_TRUE(!frameScrollTranslation()); |
| 1281 EXPECT_EQ(framePreTranslation(), | 1304 EXPECT_EQ(framePreTranslation(), |
| 1282 clipProperties->cssClip()->localTransformSpace()); | 1305 clipProperties->cssClip()->localTransformSpace()); |
| 1283 EXPECT_EQ(FloatRoundedRect(FloatRect(absoluteClipRect)), | 1306 EXPECT_EQ(FloatRoundedRect(FloatRect(absoluteClipRect)), |
| 1284 clipProperties->cssClip()->clipRect()); | 1307 clipProperties->cssClip()->clipRect()); |
| 1285 CHECK_VISUAL_RECT( | 1308 CHECK_VISUAL_RECT(absoluteClipRect, clip, document().view()->layoutView(), |
| 1286 absoluteClipRect, clip, document().view()->layoutView(), | 1309 // TODO(crbug.com/599939): mapToVisualRectInAncestorSpace() |
| 1287 // TODO(crbug.com/599939): mapToVisualRectInAncestorSpace() doesn't apply
css clip on the object itself. | 1310 // doesn't apply css clip on the object itself. |
| 1288 LayoutUnit::max()); | 1311 LayoutUnit::max()); |
| 1289 | 1312 |
| 1290 LayoutObject* absolute = | 1313 LayoutObject* absolute = |
| 1291 document().getElementById("absolute")->layoutObject(); | 1314 document().getElementById("absolute")->layoutObject(); |
| 1292 const ObjectPaintProperties* absPosProperties = | 1315 const ObjectPaintProperties* absPosProperties = |
| 1293 absolute->objectPaintProperties(); | 1316 absolute->objectPaintProperties(); |
| 1294 EXPECT_EQ( | 1317 EXPECT_EQ( |
| 1295 clipProperties->cssClip(), | 1318 clipProperties->cssClip(), |
| 1296 absPosProperties->localBorderBoxProperties()->propertyTreeState.clip()); | 1319 absPosProperties->localBorderBoxProperties()->propertyTreeState.clip()); |
| 1297 EXPECT_EQ(framePreTranslation(), absPosProperties->localBorderBoxProperties() | 1320 EXPECT_EQ(framePreTranslation(), absPosProperties->localBorderBoxProperties() |
| 1298 ->propertyTreeState.transform()); | 1321 ->propertyTreeState.transform()); |
| 1299 EXPECT_EQ(LayoutPoint(123, 456), | 1322 EXPECT_EQ(LayoutPoint(123, 456), |
| 1300 absPosProperties->localBorderBoxProperties()->paintOffset); | 1323 absPosProperties->localBorderBoxProperties()->paintOffset); |
| 1301 CHECK_VISUAL_RECT( | 1324 CHECK_VISUAL_RECT(LayoutRect(), absolute, document().view()->layoutView(), |
| 1302 LayoutRect(), absolute, document().view()->layoutView(), | 1325 // TODO(crbug.com/599939): CSS clip of fixed-position |
| 1303 // TODO(crbug.com/599939): CSS clip of fixed-position descendants is broke
n in mapToVisualRectInAncestorSpace(). | 1326 // descendants is broken in |
| 1304 LayoutUnit::max()); | 1327 // mapToVisualRectInAncestorSpace(). |
| 1328 LayoutUnit::max()); |
| 1305 } | 1329 } |
| 1306 | 1330 |
| 1307 TEST_P(PaintPropertyTreeBuilderTest, CSSClipFixedPositionDescendantNonShared) { | 1331 TEST_P(PaintPropertyTreeBuilderTest, CSSClipFixedPositionDescendantNonShared) { |
| 1308 // This test is similar to CSSClipFixedPositionDescendant above, except that | 1332 // This test is similar to CSSClipFixedPositionDescendant above, except that |
| 1309 // now we have a parent overflow clip that should be escaped by the fixed desc
endant. | 1333 // now we have a parent overflow clip that should be escaped by the fixed |
| 1334 // descendant. |
| 1310 setBodyInnerHTML( | 1335 setBodyInnerHTML( |
| 1311 "<style>" | 1336 "<style>" |
| 1312 " body {" | 1337 " body {" |
| 1313 " margin: 0;" | 1338 " margin: 0;" |
| 1314 " }" | 1339 " }" |
| 1315 " #overflow {" | 1340 " #overflow {" |
| 1316 " position: relative;" | 1341 " position: relative;" |
| 1317 " width: 50px;" | 1342 " width: 50px;" |
| 1318 " height: 50px;" | 1343 " height: 50px;" |
| 1319 " overflow: scroll;" | 1344 " overflow: scroll;" |
| (...skipping 15 matching lines...) Expand all Loading... |
| 1335 "<div id='overflow'><div id='clip'><div id='fixed'></div></div></div>"); | 1360 "<div id='overflow'><div id='clip'><div id='fixed'></div></div></div>"); |
| 1336 LayoutRect localClipRect(40, 10, 40, 60); | 1361 LayoutRect localClipRect(40, 10, 40, 60); |
| 1337 LayoutRect absoluteClipRect = localClipRect; | 1362 LayoutRect absoluteClipRect = localClipRect; |
| 1338 absoluteClipRect.move(123, 456); | 1363 absoluteClipRect.move(123, 456); |
| 1339 | 1364 |
| 1340 LayoutObject& overflow = | 1365 LayoutObject& overflow = |
| 1341 *document().getElementById("overflow")->layoutObject(); | 1366 *document().getElementById("overflow")->layoutObject(); |
| 1342 const ObjectPaintProperties* overflowProperties = | 1367 const ObjectPaintProperties* overflowProperties = |
| 1343 overflow.objectPaintProperties(); | 1368 overflow.objectPaintProperties(); |
| 1344 EXPECT_EQ(frameContentClip(), overflowProperties->overflowClip()->parent()); | 1369 EXPECT_EQ(frameContentClip(), overflowProperties->overflowClip()->parent()); |
| 1345 // No scroll translation because the document does not scroll (not enough cont
ent). | 1370 // No scroll translation because the document does not scroll (not enough |
| 1371 // content). |
| 1346 EXPECT_TRUE(!frameScrollTranslation()); | 1372 EXPECT_TRUE(!frameScrollTranslation()); |
| 1347 EXPECT_EQ(framePreTranslation(), | 1373 EXPECT_EQ(framePreTranslation(), |
| 1348 overflowProperties->scrollTranslation()->parent()); | 1374 overflowProperties->scrollTranslation()->parent()); |
| 1349 CHECK_EXACT_VISUAL_RECT(LayoutRect(0, 0, 50, 50), &overflow, | 1375 CHECK_EXACT_VISUAL_RECT(LayoutRect(0, 0, 50, 50), &overflow, |
| 1350 document().view()->layoutView()); | 1376 document().view()->layoutView()); |
| 1351 | 1377 |
| 1352 LayoutObject* clip = document().getElementById("clip")->layoutObject(); | 1378 LayoutObject* clip = document().getElementById("clip")->layoutObject(); |
| 1353 const ObjectPaintProperties* clipProperties = clip->objectPaintProperties(); | 1379 const ObjectPaintProperties* clipProperties = clip->objectPaintProperties(); |
| 1354 EXPECT_EQ(overflowProperties->overflowClip(), | 1380 EXPECT_EQ(overflowProperties->overflowClip(), |
| 1355 clipProperties->cssClip()->parent()); | 1381 clipProperties->cssClip()->parent()); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 1372 fixedProperties->localBorderBoxProperties()->propertyTreeState.clip()); | 1398 fixedProperties->localBorderBoxProperties()->propertyTreeState.clip()); |
| 1373 EXPECT_EQ(framePreTranslation(), fixedProperties->localBorderBoxProperties() | 1399 EXPECT_EQ(framePreTranslation(), fixedProperties->localBorderBoxProperties() |
| 1374 ->propertyTreeState.transform() | 1400 ->propertyTreeState.transform() |
| 1375 ->parent()); | 1401 ->parent()); |
| 1376 EXPECT_EQ(TransformationMatrix().translate(654, 321), | 1402 EXPECT_EQ(TransformationMatrix().translate(654, 321), |
| 1377 fixedProperties->localBorderBoxProperties() | 1403 fixedProperties->localBorderBoxProperties() |
| 1378 ->propertyTreeState.transform() | 1404 ->propertyTreeState.transform() |
| 1379 ->matrix()); | 1405 ->matrix()); |
| 1380 EXPECT_EQ(LayoutPoint(), | 1406 EXPECT_EQ(LayoutPoint(), |
| 1381 fixedProperties->localBorderBoxProperties()->paintOffset); | 1407 fixedProperties->localBorderBoxProperties()->paintOffset); |
| 1382 CHECK_VISUAL_RECT( | 1408 CHECK_VISUAL_RECT(LayoutRect(), fixed, document().view()->layoutView(), |
| 1383 LayoutRect(), fixed, document().view()->layoutView(), | 1409 // TODO(crbug.com/599939): CSS clip of fixed-position |
| 1384 // TODO(crbug.com/599939): CSS clip of fixed-position descendants is broke
n in geometry mapping. | 1410 // descendants is broken in geometry mapping. |
| 1385 LayoutUnit::max()); | 1411 LayoutUnit::max()); |
| 1386 } | 1412 } |
| 1387 | 1413 |
| 1388 TEST_P(PaintPropertyTreeBuilderTest, ColumnSpannerUnderRelativePositioned) { | 1414 TEST_P(PaintPropertyTreeBuilderTest, ColumnSpannerUnderRelativePositioned) { |
| 1389 setBodyInnerHTML( | 1415 setBodyInnerHTML( |
| 1390 "<div style='columns: 3; position: absolute; top: 44px; left: 55px;'>" | 1416 "<div style='columns: 3; position: absolute; top: 44px; left: 55px;'>" |
| 1391 " <div style='position: relative; top: 100px; left: 100px'>" | 1417 " <div style='position: relative; top: 100px; left: 100px'>" |
| 1392 " <div id='spanner' style='column-span: all; opacity: 0.5; width: " | 1418 " <div id='spanner' style='column-span: all; opacity: 0.5; width: " |
| 1393 "100px; height: 100px;'></div>" | 1419 "100px; height: 100px;'></div>" |
| 1394 " </div>" | 1420 " </div>" |
| 1395 "</div>"); | 1421 "</div>"); |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1453 // The paint offset transform should be snapped from (0.3,0.3) to (0,0). | 1479 // The paint offset transform should be snapped from (0.3,0.3) to (0,0). |
| 1454 EXPECT_EQ(TransformationMatrix().translate(0, 0), | 1480 EXPECT_EQ(TransformationMatrix().translate(0, 0), |
| 1455 bProperties->transform()->parent()->matrix()); | 1481 bProperties->transform()->parent()->matrix()); |
| 1456 // The residual subpixel adjustment should be (0.3,0.3) - (0,0) = (0.3,0.3). | 1482 // The residual subpixel adjustment should be (0.3,0.3) - (0,0) = (0.3,0.3). |
| 1457 LayoutPoint subpixelAccumulation = LayoutPoint(FloatPoint(0.3, 0.3)); | 1483 LayoutPoint subpixelAccumulation = LayoutPoint(FloatPoint(0.3, 0.3)); |
| 1458 EXPECT_EQ(subpixelAccumulation, | 1484 EXPECT_EQ(subpixelAccumulation, |
| 1459 bProperties->localBorderBoxProperties()->paintOffset); | 1485 bProperties->localBorderBoxProperties()->paintOffset); |
| 1460 CHECK_EXACT_VISUAL_RECT(LayoutRect(FloatRect(0.3, 0.3, 40, 40)), b, | 1486 CHECK_EXACT_VISUAL_RECT(LayoutRect(FloatRect(0.3, 0.3, 40, 40)), b, |
| 1461 frameView->layoutView()); | 1487 frameView->layoutView()); |
| 1462 | 1488 |
| 1463 // c should be painted starting at subpixelAccumulation + (0.1,0.1) = (0.4,0.4
). | 1489 // c should be painted starting at subpixelAccumulation + (0.1,0.1) = |
| 1490 // (0.4,0.4). |
| 1464 LayoutObject* c = document().getElementById("c")->layoutObject(); | 1491 LayoutObject* c = document().getElementById("c")->layoutObject(); |
| 1465 LayoutPoint cPaintOffset = | 1492 LayoutPoint cPaintOffset = |
| 1466 subpixelAccumulation + LayoutPoint(FloatPoint(0.1, 0.1)); | 1493 subpixelAccumulation + LayoutPoint(FloatPoint(0.1, 0.1)); |
| 1467 const ObjectPaintProperties* cProperties = c->objectPaintProperties(); | 1494 const ObjectPaintProperties* cProperties = c->objectPaintProperties(); |
| 1468 EXPECT_EQ(cPaintOffset, cProperties->localBorderBoxProperties()->paintOffset); | 1495 EXPECT_EQ(cPaintOffset, cProperties->localBorderBoxProperties()->paintOffset); |
| 1469 // Visual rects via the non-paint properties system use enclosingIntRect befor
e applying transforms, | 1496 // Visual rects via the non-paint properties system use enclosingIntRect |
| 1470 // because they are computed bottom-up and therefore can't apply pixel snappin
g. Therefore apply a | 1497 // before applying transforms, because they are computed bottom-up and |
| 1471 // slop of 1px. | 1498 // therefore can't apply pixel snapping. Therefore apply a slop of 1px. |
| 1472 CHECK_VISUAL_RECT(LayoutRect(FloatRect(0.4, 0.4, 40, 40)), c, | 1499 CHECK_VISUAL_RECT(LayoutRect(FloatRect(0.4, 0.4, 40, 40)), c, |
| 1473 frameView->layoutView(), 1); | 1500 frameView->layoutView(), 1); |
| 1474 } | 1501 } |
| 1475 | 1502 |
| 1476 TEST_P(PaintPropertyTreeBuilderTest, | 1503 TEST_P(PaintPropertyTreeBuilderTest, |
| 1477 PaintOffsetWithPixelSnappingThroughTransform) { | 1504 PaintOffsetWithPixelSnappingThroughTransform) { |
| 1478 setBodyInnerHTML( | 1505 setBodyInnerHTML( |
| 1479 "<style>" | 1506 "<style>" |
| 1480 " * { margin: 0; }" | 1507 " * { margin: 0; }" |
| 1481 " div { position: relative; }" | 1508 " div { position: relative; }" |
| (...skipping 16 matching lines...) Expand all Loading... |
| 1498 bProperties->transform()->parent()->matrix()); | 1525 bProperties->transform()->parent()->matrix()); |
| 1499 // The residual subpixel adjustment should be (0.7,0.7) - (1,1) = (-0.3,-0.3). | 1526 // The residual subpixel adjustment should be (0.7,0.7) - (1,1) = (-0.3,-0.3). |
| 1500 LayoutPoint subpixelAccumulation = | 1527 LayoutPoint subpixelAccumulation = |
| 1501 LayoutPoint(LayoutPoint(FloatPoint(0.7, 0.7)) - LayoutPoint(1, 1)); | 1528 LayoutPoint(LayoutPoint(FloatPoint(0.7, 0.7)) - LayoutPoint(1, 1)); |
| 1502 EXPECT_EQ(subpixelAccumulation, | 1529 EXPECT_EQ(subpixelAccumulation, |
| 1503 bProperties->localBorderBoxProperties()->paintOffset); | 1530 bProperties->localBorderBoxProperties()->paintOffset); |
| 1504 CHECK_EXACT_VISUAL_RECT(LayoutRect(LayoutUnit(0.7), LayoutUnit(0.7), | 1531 CHECK_EXACT_VISUAL_RECT(LayoutRect(LayoutUnit(0.7), LayoutUnit(0.7), |
| 1505 LayoutUnit(40), LayoutUnit(40)), | 1532 LayoutUnit(40), LayoutUnit(40)), |
| 1506 b, frameView->layoutView()); | 1533 b, frameView->layoutView()); |
| 1507 | 1534 |
| 1508 // c should be painted starting at subpixelAccumulation + (0.7,0.7) = (0.4,0.4
). | 1535 // c should be painted starting at subpixelAccumulation + (0.7,0.7) = |
| 1536 // (0.4,0.4). |
| 1509 LayoutObject* c = document().getElementById("c")->layoutObject(); | 1537 LayoutObject* c = document().getElementById("c")->layoutObject(); |
| 1510 LayoutPoint cPaintOffset = | 1538 LayoutPoint cPaintOffset = |
| 1511 subpixelAccumulation + LayoutPoint(FloatPoint(0.7, 0.7)); | 1539 subpixelAccumulation + LayoutPoint(FloatPoint(0.7, 0.7)); |
| 1512 const ObjectPaintProperties* cProperties = c->objectPaintProperties(); | 1540 const ObjectPaintProperties* cProperties = c->objectPaintProperties(); |
| 1513 EXPECT_EQ(cPaintOffset, cProperties->localBorderBoxProperties()->paintOffset); | 1541 EXPECT_EQ(cPaintOffset, cProperties->localBorderBoxProperties()->paintOffset); |
| 1514 // Visual rects via the non-paint properties system use enclosingIntRect befor
e applying transforms, | 1542 // Visual rects via the non-paint properties system use enclosingIntRect |
| 1515 // because they are computed bottom-up and therefore can't apply pixel snappin
g. Therefore apply a | 1543 // before applying transforms, because they are computed bottom-up and |
| 1516 // slop of 1px. | 1544 // therefore can't apply pixel snapping. Therefore apply a slop of 1px. |
| 1517 CHECK_VISUAL_RECT(LayoutRect(LayoutUnit(0.7) + LayoutUnit(0.7), | 1545 CHECK_VISUAL_RECT(LayoutRect(LayoutUnit(0.7) + LayoutUnit(0.7), |
| 1518 LayoutUnit(0.7) + LayoutUnit(0.7), | 1546 LayoutUnit(0.7) + LayoutUnit(0.7), |
| 1519 LayoutUnit(40), LayoutUnit(40)), | 1547 LayoutUnit(40), LayoutUnit(40)), |
| 1520 c, frameView->layoutView(), 1); | 1548 c, frameView->layoutView(), 1); |
| 1521 } | 1549 } |
| 1522 | 1550 |
| 1523 TEST_P(PaintPropertyTreeBuilderTest, | 1551 TEST_P(PaintPropertyTreeBuilderTest, |
| 1524 PaintOffsetWithPixelSnappingThroughMultipleTransforms) { | 1552 PaintOffsetWithPixelSnappingThroughMultipleTransforms) { |
| 1525 setBodyInnerHTML( | 1553 setBodyInnerHTML( |
| 1526 "<style>" | 1554 "<style>" |
| (...skipping 25 matching lines...) Expand all Loading... |
| 1552 EXPECT_EQ(subpixelAccumulation, | 1580 EXPECT_EQ(subpixelAccumulation, |
| 1553 bProperties->localBorderBoxProperties()->paintOffset); | 1581 bProperties->localBorderBoxProperties()->paintOffset); |
| 1554 CHECK_EXACT_VISUAL_RECT(LayoutRect(LayoutUnit(5.7), LayoutUnit(7.7), | 1582 CHECK_EXACT_VISUAL_RECT(LayoutRect(LayoutUnit(5.7), LayoutUnit(7.7), |
| 1555 LayoutUnit(40), LayoutUnit(40)), | 1583 LayoutUnit(40), LayoutUnit(40)), |
| 1556 b, frameView->layoutView()); | 1584 b, frameView->layoutView()); |
| 1557 | 1585 |
| 1558 LayoutObject* c = document().getElementById("c")->layoutObject(); | 1586 LayoutObject* c = document().getElementById("c")->layoutObject(); |
| 1559 const ObjectPaintProperties* cProperties = c->objectPaintProperties(); | 1587 const ObjectPaintProperties* cProperties = c->objectPaintProperties(); |
| 1560 EXPECT_EQ(TransformationMatrix().translate3d(11, 13, 0), | 1588 EXPECT_EQ(TransformationMatrix().translate3d(11, 13, 0), |
| 1561 cProperties->transform()->matrix()); | 1589 cProperties->transform()->matrix()); |
| 1562 // The paint offset should be (-0.3,-0.3) but the paint offset transform shoul
d still be at | 1590 // The paint offset should be (-0.3,-0.3) but the paint offset transform |
| 1563 // (0,0) because it should be snapped. | 1591 // should still be at (0,0) because it should be snapped. |
| 1564 EXPECT_EQ(TransformationMatrix().translate(0, 0), | 1592 EXPECT_EQ(TransformationMatrix().translate(0, 0), |
| 1565 cProperties->transform()->parent()->matrix()); | 1593 cProperties->transform()->parent()->matrix()); |
| 1566 // The residual subpixel adjustment should still be (-0.3,-0.3). | 1594 // The residual subpixel adjustment should still be (-0.3,-0.3). |
| 1567 EXPECT_EQ(subpixelAccumulation, | 1595 EXPECT_EQ(subpixelAccumulation, |
| 1568 cProperties->localBorderBoxProperties()->paintOffset); | 1596 cProperties->localBorderBoxProperties()->paintOffset); |
| 1569 CHECK_EXACT_VISUAL_RECT(LayoutRect(LayoutUnit(16.7), LayoutUnit(20.7), | 1597 CHECK_EXACT_VISUAL_RECT(LayoutRect(LayoutUnit(16.7), LayoutUnit(20.7), |
| 1570 LayoutUnit(40), LayoutUnit(40)), | 1598 LayoutUnit(40), LayoutUnit(40)), |
| 1571 c, frameView->layoutView()); | 1599 c, frameView->layoutView()); |
| 1572 | 1600 |
| 1573 // d should be painted starting at subpixelAccumulation + (0.7,0.7) = (0.4,0.4
). | 1601 // d should be painted starting at subpixelAccumulation + (0.7,0.7) = |
| 1602 // (0.4,0.4). |
| 1574 LayoutObject* d = document().getElementById("d")->layoutObject(); | 1603 LayoutObject* d = document().getElementById("d")->layoutObject(); |
| 1575 LayoutPoint dPaintOffset = | 1604 LayoutPoint dPaintOffset = |
| 1576 subpixelAccumulation + LayoutPoint(FloatPoint(0.7, 0.7)); | 1605 subpixelAccumulation + LayoutPoint(FloatPoint(0.7, 0.7)); |
| 1577 const ObjectPaintProperties* dProperties = d->objectPaintProperties(); | 1606 const ObjectPaintProperties* dProperties = d->objectPaintProperties(); |
| 1578 EXPECT_EQ(dPaintOffset, dProperties->localBorderBoxProperties()->paintOffset); | 1607 EXPECT_EQ(dPaintOffset, dProperties->localBorderBoxProperties()->paintOffset); |
| 1579 // Visual rects via the non-paint properties system use enclosingIntRect befor
e applying transforms, | 1608 // Visual rects via the non-paint properties system use enclosingIntRect |
| 1580 // because they are computed bottom-up and therefore can't apply pixel snappin
g. Therefore apply a | 1609 // before applying transforms, because they are computed bottom-up and |
| 1581 // slop of 1px. | 1610 // therefore can't apply pixel snapping. Therefore apply a slop of 1px. |
| 1582 CHECK_VISUAL_RECT(LayoutRect(LayoutUnit(16.7) + LayoutUnit(0.7), | 1611 CHECK_VISUAL_RECT(LayoutRect(LayoutUnit(16.7) + LayoutUnit(0.7), |
| 1583 LayoutUnit(20.7) + LayoutUnit(0.7), | 1612 LayoutUnit(20.7) + LayoutUnit(0.7), |
| 1584 LayoutUnit(40), LayoutUnit(40)), | 1613 LayoutUnit(40), LayoutUnit(40)), |
| 1585 d, frameView->layoutView(), 1); | 1614 d, frameView->layoutView(), 1); |
| 1586 } | 1615 } |
| 1587 | 1616 |
| 1588 TEST_P(PaintPropertyTreeBuilderTest, PaintOffsetWithPixelSnappingWithFixedPos) { | 1617 TEST_P(PaintPropertyTreeBuilderTest, PaintOffsetWithPixelSnappingWithFixedPos) { |
| 1589 setBodyInnerHTML( | 1618 setBodyInnerHTML( |
| 1590 "<style>" | 1619 "<style>" |
| 1591 " * { margin: 0; }" | 1620 " * { margin: 0; }" |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1626 CHECK_EXACT_VISUAL_RECT(LayoutRect(LayoutUnit(0.7), LayoutUnit(0), | 1655 CHECK_EXACT_VISUAL_RECT(LayoutRect(LayoutUnit(0.7), LayoutUnit(0), |
| 1627 LayoutUnit(40), LayoutUnit(40)), | 1656 LayoutUnit(40), LayoutUnit(40)), |
| 1628 fixed, frameView->layoutView()); | 1657 fixed, frameView->layoutView()); |
| 1629 | 1658 |
| 1630 // d should be painted starting at subpixelAccumulation + (0.7,0) = (0.4,0). | 1659 // d should be painted starting at subpixelAccumulation + (0.7,0) = (0.4,0). |
| 1631 LayoutObject* d = document().getElementById("d")->layoutObject(); | 1660 LayoutObject* d = document().getElementById("d")->layoutObject(); |
| 1632 LayoutPoint dPaintOffset = | 1661 LayoutPoint dPaintOffset = |
| 1633 subpixelAccumulation + LayoutPoint(FloatPoint(0.7, 0)); | 1662 subpixelAccumulation + LayoutPoint(FloatPoint(0.7, 0)); |
| 1634 const ObjectPaintProperties* dProperties = d->objectPaintProperties(); | 1663 const ObjectPaintProperties* dProperties = d->objectPaintProperties(); |
| 1635 EXPECT_EQ(dPaintOffset, dProperties->localBorderBoxProperties()->paintOffset); | 1664 EXPECT_EQ(dPaintOffset, dProperties->localBorderBoxProperties()->paintOffset); |
| 1636 // Visual rects via the non-paint properties system use enclosingIntRect befor
e applying transforms, | 1665 // Visual rects via the non-paint properties system use enclosingIntRect |
| 1637 // because they are computed bottom-up and therefore can't apply pixel snappin
g. Therefore apply a | 1666 // before applying transforms, because they are computed bottom-up and |
| 1638 // slop of 1px. | 1667 // therefore can't apply pixel snapping. Therefore apply a slop of 1px. |
| 1639 CHECK_VISUAL_RECT(LayoutRect(LayoutUnit(0.7) + LayoutUnit(0.7), LayoutUnit(), | 1668 CHECK_VISUAL_RECT(LayoutRect(LayoutUnit(0.7) + LayoutUnit(0.7), LayoutUnit(), |
| 1640 LayoutUnit(40), LayoutUnit(40)), | 1669 LayoutUnit(40), LayoutUnit(40)), |
| 1641 d, frameView->layoutView(), 1); | 1670 d, frameView->layoutView(), 1); |
| 1642 } | 1671 } |
| 1643 | 1672 |
| 1644 TEST_P(PaintPropertyTreeBuilderTest, SvgPixelSnappingShouldResetPaintOffset) { | 1673 TEST_P(PaintPropertyTreeBuilderTest, SvgPixelSnappingShouldResetPaintOffset) { |
| 1645 setBodyInnerHTML( | 1674 setBodyInnerHTML( |
| 1646 "<svg id='svg' style='position: relative; left: 0.1px; transform: " | 1675 "<svg id='svg' style='position: relative; left: 0.1px; transform: " |
| 1647 "matrix(1, 0, 0, 1, 0, 0);'>" | 1676 "matrix(1, 0, 0, 1, 0, 0);'>" |
| 1648 " <rect id='rect' transform='translate(1, 1)'/>" | 1677 " <rect id='rect' transform='translate(1, 1)'/>" |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1660 EXPECT_EQ(nullptr, | 1689 EXPECT_EQ(nullptr, |
| 1661 svgWithTransformProperties->svgLocalToBorderBoxTransform()); | 1690 svgWithTransformProperties->svgLocalToBorderBoxTransform()); |
| 1662 | 1691 |
| 1663 LayoutObject& rectWithTransform = | 1692 LayoutObject& rectWithTransform = |
| 1664 *document().getElementById("rect")->layoutObject(); | 1693 *document().getElementById("rect")->layoutObject(); |
| 1665 const ObjectPaintProperties* rectWithTransformProperties = | 1694 const ObjectPaintProperties* rectWithTransformProperties = |
| 1666 rectWithTransform.objectPaintProperties(); | 1695 rectWithTransform.objectPaintProperties(); |
| 1667 EXPECT_EQ(TransformationMatrix().translate(1, 1), | 1696 EXPECT_EQ(TransformationMatrix().translate(1, 1), |
| 1668 rectWithTransformProperties->transform()->matrix()); | 1697 rectWithTransformProperties->transform()->matrix()); |
| 1669 | 1698 |
| 1670 // Ensure there is no PaintOffset transform between the rect and the svg's tra
nsform. | 1699 // Ensure there is no PaintOffset transform between the rect and the svg's |
| 1700 // transform. |
| 1671 EXPECT_EQ(svgWithTransformProperties->transform(), | 1701 EXPECT_EQ(svgWithTransformProperties->transform(), |
| 1672 rectWithTransformProperties->transform()->parent()); | 1702 rectWithTransformProperties->transform()->parent()); |
| 1673 } | 1703 } |
| 1674 | 1704 |
| 1675 TEST_P(PaintPropertyTreeBuilderTest, NoRenderingContextByDefault) { | 1705 TEST_P(PaintPropertyTreeBuilderTest, NoRenderingContextByDefault) { |
| 1676 setBodyInnerHTML("<div style='transform: translateZ(0)'></div>"); | 1706 setBodyInnerHTML("<div style='transform: translateZ(0)'></div>"); |
| 1677 | 1707 |
| 1678 const ObjectPaintProperties* properties = | 1708 const ObjectPaintProperties* properties = |
| 1679 document().body()->firstChild()->layoutObject()->objectPaintProperties(); | 1709 document().body()->firstChild()->layoutObject()->objectPaintProperties(); |
| 1680 ASSERT_TRUE(properties->transform()); | 1710 ASSERT_TRUE(properties->transform()); |
| (...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1921 const TransformPaintPropertyNode* cTransformNode = cProperties->transform(); | 1951 const TransformPaintPropertyNode* cTransformNode = cProperties->transform(); |
| 1922 EXPECT_EQ(TransformationMatrix().translate(77, 88), cTransformNode->matrix()); | 1952 EXPECT_EQ(TransformationMatrix().translate(77, 88), cTransformNode->matrix()); |
| 1923 | 1953 |
| 1924 CHECK_EXACT_VISUAL_RECT(LayoutRect(33, 44, 50, 60), a->layoutObject(), | 1954 CHECK_EXACT_VISUAL_RECT(LayoutRect(33, 44, 50, 60), a->layoutObject(), |
| 1925 frameView->layoutView()); | 1955 frameView->layoutView()); |
| 1926 CHECK_EXACT_VISUAL_RECT(LayoutRect(88, 110, 30, 40), b->layoutObject(), | 1956 CHECK_EXACT_VISUAL_RECT(LayoutRect(88, 110, 30, 40), b->layoutObject(), |
| 1927 frameView->layoutView()); | 1957 frameView->layoutView()); |
| 1928 CHECK_EXACT_VISUAL_RECT(LayoutRect(165, 198, 10, 20), c->layoutObject(), | 1958 CHECK_EXACT_VISUAL_RECT(LayoutRect(165, 198, 10, 20), c->layoutObject(), |
| 1929 frameView->layoutView()); | 1959 frameView->layoutView()); |
| 1930 | 1960 |
| 1931 // Change transform of b. B's transform node should be a new node with the new
value, | 1961 // Change transform of b. B's transform node should be a new node with the new |
| 1932 // and a and c's transform nodes should be unchanged (with c's parent adjusted
). | 1962 // value, and a and c's transform nodes should be unchanged (with c's parent |
| 1963 // adjusted). |
| 1933 b->setAttribute(HTMLNames::styleAttr, "transform: translate(111px, 222px)"); | 1964 b->setAttribute(HTMLNames::styleAttr, "transform: translate(111px, 222px)"); |
| 1934 document().view()->updateAllLifecyclePhases(); | 1965 document().view()->updateAllLifecyclePhases(); |
| 1935 | 1966 |
| 1936 EXPECT_EQ(aProperties, a->layoutObject()->objectPaintProperties()); | 1967 EXPECT_EQ(aProperties, a->layoutObject()->objectPaintProperties()); |
| 1937 EXPECT_EQ(aTransformNode, aProperties->transform()); | 1968 EXPECT_EQ(aTransformNode, aProperties->transform()); |
| 1938 | 1969 |
| 1939 EXPECT_EQ(bProperties, b->layoutObject()->objectPaintProperties()); | 1970 EXPECT_EQ(bProperties, b->layoutObject()->objectPaintProperties()); |
| 1940 bTransformNode = bProperties->transform(); | 1971 bTransformNode = bProperties->transform(); |
| 1941 EXPECT_EQ(TransformationMatrix().translate(111, 222), | 1972 EXPECT_EQ(TransformationMatrix().translate(111, 222), |
| 1942 bTransformNode->matrix()); | 1973 bTransformNode->matrix()); |
| 1943 EXPECT_EQ(aTransformNode, bTransformNode->parent()); | 1974 EXPECT_EQ(aTransformNode, bTransformNode->parent()); |
| 1944 | 1975 |
| 1945 EXPECT_EQ(cProperties, c->layoutObject()->objectPaintProperties()); | 1976 EXPECT_EQ(cProperties, c->layoutObject()->objectPaintProperties()); |
| 1946 EXPECT_EQ(cTransformNode, cProperties->transform()); | 1977 EXPECT_EQ(cTransformNode, cProperties->transform()); |
| 1947 EXPECT_EQ(bTransformNode, cTransformNode->parent()); | 1978 EXPECT_EQ(bTransformNode, cTransformNode->parent()); |
| 1948 | 1979 |
| 1949 CHECK_EXACT_VISUAL_RECT(LayoutRect(33, 44, 50, 60), a->layoutObject(), | 1980 CHECK_EXACT_VISUAL_RECT(LayoutRect(33, 44, 50, 60), a->layoutObject(), |
| 1950 frameView->layoutView()); | 1981 frameView->layoutView()); |
| 1951 CHECK_EXACT_VISUAL_RECT(LayoutRect(144, 266, 50, 20), b->layoutObject(), | 1982 CHECK_EXACT_VISUAL_RECT(LayoutRect(144, 266, 50, 20), b->layoutObject(), |
| 1952 frameView->layoutView()); | 1983 frameView->layoutView()); |
| 1953 CHECK_EXACT_VISUAL_RECT(LayoutRect(221, 354, 10, 20), c->layoutObject(), | 1984 CHECK_EXACT_VISUAL_RECT(LayoutRect(221, 354, 10, 20), c->layoutObject(), |
| 1954 frameView->layoutView()); | 1985 frameView->layoutView()); |
| 1955 | 1986 |
| 1956 // Remove transform from b. B's transform node should be removed from the tree
, | 1987 // Remove transform from b. B's transform node should be removed from the |
| 1957 // and a and c's transform nodes should be unchanged (with c's parent adjusted
). | 1988 // tree, and a and c's transform nodes should be unchanged (with c's parent |
| 1989 // adjusted). |
| 1958 b->setAttribute(HTMLNames::styleAttr, ""); | 1990 b->setAttribute(HTMLNames::styleAttr, ""); |
| 1959 document().view()->updateAllLifecyclePhases(); | 1991 document().view()->updateAllLifecyclePhases(); |
| 1960 | 1992 |
| 1961 EXPECT_EQ(aProperties, a->layoutObject()->objectPaintProperties()); | 1993 EXPECT_EQ(aProperties, a->layoutObject()->objectPaintProperties()); |
| 1962 EXPECT_EQ(aTransformNode, aProperties->transform()); | 1994 EXPECT_EQ(aTransformNode, aProperties->transform()); |
| 1963 | 1995 |
| 1964 EXPECT_EQ(bProperties, b->layoutObject()->objectPaintProperties()); | 1996 EXPECT_EQ(bProperties, b->layoutObject()->objectPaintProperties()); |
| 1965 EXPECT_EQ(nullptr, bProperties->transform()); | 1997 EXPECT_EQ(nullptr, bProperties->transform()); |
| 1966 | 1998 |
| 1967 EXPECT_EQ(cProperties, c->layoutObject()->objectPaintProperties()); | 1999 EXPECT_EQ(cProperties, c->layoutObject()->objectPaintProperties()); |
| 1968 EXPECT_EQ(cTransformNode, cProperties->transform()); | 2000 EXPECT_EQ(cTransformNode, cProperties->transform()); |
| 1969 EXPECT_EQ(aTransformNode, cTransformNode->parent()); | 2001 EXPECT_EQ(aTransformNode, cTransformNode->parent()); |
| 1970 | 2002 |
| 1971 CHECK_EXACT_VISUAL_RECT(LayoutRect(33, 44, 50, 60), a->layoutObject(), | 2003 CHECK_EXACT_VISUAL_RECT(LayoutRect(33, 44, 50, 60), a->layoutObject(), |
| 1972 frameView->layoutView()); | 2004 frameView->layoutView()); |
| 1973 CHECK_EXACT_VISUAL_RECT(LayoutRect(33, 44, 50, 20), b->layoutObject(), | 2005 CHECK_EXACT_VISUAL_RECT(LayoutRect(33, 44, 50, 20), b->layoutObject(), |
| 1974 frameView->layoutView()); | 2006 frameView->layoutView()); |
| 1975 CHECK_EXACT_VISUAL_RECT(LayoutRect(110, 132, 10, 20), c->layoutObject(), | 2007 CHECK_EXACT_VISUAL_RECT(LayoutRect(110, 132, 10, 20), c->layoutObject(), |
| 1976 frameView->layoutView()); | 2008 frameView->layoutView()); |
| 1977 | 2009 |
| 1978 // Re-add transform to b. B's transform node should be inserted into the tree, | 2010 // Re-add transform to b. B's transform node should be inserted into the tree, |
| 1979 // and a and c's transform nodes should be unchanged (with c's parent adjusted
). | 2011 // and a and c's transform nodes should be unchanged (with c's parent |
| 2012 // adjusted). |
| 1980 b->setAttribute(HTMLNames::styleAttr, "transform: translate(4px, 5px)"); | 2013 b->setAttribute(HTMLNames::styleAttr, "transform: translate(4px, 5px)"); |
| 1981 document().view()->updateAllLifecyclePhases(); | 2014 document().view()->updateAllLifecyclePhases(); |
| 1982 | 2015 |
| 1983 EXPECT_EQ(aProperties, a->layoutObject()->objectPaintProperties()); | 2016 EXPECT_EQ(aProperties, a->layoutObject()->objectPaintProperties()); |
| 1984 EXPECT_EQ(aTransformNode, aProperties->transform()); | 2017 EXPECT_EQ(aTransformNode, aProperties->transform()); |
| 1985 | 2018 |
| 1986 EXPECT_EQ(bProperties, b->layoutObject()->objectPaintProperties()); | 2019 EXPECT_EQ(bProperties, b->layoutObject()->objectPaintProperties()); |
| 1987 bTransformNode = bProperties->transform(); | 2020 bTransformNode = bProperties->transform(); |
| 1988 EXPECT_EQ(TransformationMatrix().translate(4, 5), bTransformNode->matrix()); | 2021 EXPECT_EQ(TransformationMatrix().translate(4, 5), bTransformNode->matrix()); |
| 1989 EXPECT_EQ(aTransformNode, bTransformNode->parent()); | 2022 EXPECT_EQ(aTransformNode, bTransformNode->parent()); |
| 1990 | 2023 |
| 1991 EXPECT_EQ(cProperties, c->layoutObject()->objectPaintProperties()); | 2024 EXPECT_EQ(cProperties, c->layoutObject()->objectPaintProperties()); |
| 1992 EXPECT_EQ(cTransformNode, cProperties->transform()); | 2025 EXPECT_EQ(cTransformNode, cProperties->transform()); |
| 1993 EXPECT_EQ(bTransformNode, cTransformNode->parent()); | 2026 EXPECT_EQ(bTransformNode, cTransformNode->parent()); |
| 1994 | 2027 |
| 1995 CHECK_EXACT_VISUAL_RECT(LayoutRect(33, 44, 50, 60), a->layoutObject(), | 2028 CHECK_EXACT_VISUAL_RECT(LayoutRect(33, 44, 50, 60), a->layoutObject(), |
| 1996 frameView->layoutView()); | 2029 frameView->layoutView()); |
| 1997 CHECK_EXACT_VISUAL_RECT(LayoutRect(37, 49, 50, 20), b->layoutObject(), | 2030 CHECK_EXACT_VISUAL_RECT(LayoutRect(37, 49, 50, 20), b->layoutObject(), |
| 1998 frameView->layoutView()); | 2031 frameView->layoutView()); |
| 1999 CHECK_EXACT_VISUAL_RECT(LayoutRect(114, 137, 10, 20), c->layoutObject(), | 2032 CHECK_EXACT_VISUAL_RECT(LayoutRect(114, 137, 10, 20), c->layoutObject(), |
| 2000 frameView->layoutView()); | 2033 frameView->layoutView()); |
| 2001 } | 2034 } |
| 2002 | 2035 |
| 2003 TEST_P(PaintPropertyTreeBuilderTest, OverflowClipContentsTreeState) { | 2036 TEST_P(PaintPropertyTreeBuilderTest, OverflowClipContentsTreeState) { |
| 2004 // This test verifies the tree builder correctly computes and records the prop
erty tree context | 2037 // This test verifies the tree builder correctly computes and records the |
| 2005 // for a (pseudo) stacking context that is scrolled by a containing block that
is not one of | 2038 // property tree context for a (pseudo) stacking context that is scrolled by a |
| 2006 // the painting ancestors. | 2039 // containing block that is not one of the painting ancestors. |
| 2007 setBodyInnerHTML( | 2040 setBodyInnerHTML( |
| 2008 "<style>body { margin: 20px 30px; }</style>" | 2041 "<style>body { margin: 20px 30px; }</style>" |
| 2009 "<div id='clipper' style='overflow:hidden; width:400px; height:300px;'>" | 2042 "<div id='clipper' style='overflow:hidden; width:400px; height:300px;'>" |
| 2010 " <div id='child' style='position:relative; width:500px; height: " | 2043 " <div id='child' style='position:relative; width:500px; height: " |
| 2011 "600px;'></div>" | 2044 "600px;'></div>" |
| 2012 "</div>"); | 2045 "</div>"); |
| 2013 | 2046 |
| 2014 LayoutBoxModelObject* clipper = toLayoutBoxModelObject( | 2047 LayoutBoxModelObject* clipper = toLayoutBoxModelObject( |
| 2015 document().getElementById("clipper")->layoutObject()); | 2048 document().getElementById("clipper")->layoutObject()); |
| 2016 const ObjectPaintProperties* clipProperties = | 2049 const ObjectPaintProperties* clipProperties = |
| 2017 clipper->objectPaintProperties(); | 2050 clipper->objectPaintProperties(); |
| 2018 LayoutObject* child = document().getElementById("child")->layoutObject(); | 2051 LayoutObject* child = document().getElementById("child")->layoutObject(); |
| 2019 const ObjectPaintProperties* childProperties = child->objectPaintProperties(); | 2052 const ObjectPaintProperties* childProperties = child->objectPaintProperties(); |
| 2020 | 2053 |
| 2021 // No scroll translation because the document does not scroll (not enough cont
ent). | 2054 // No scroll translation because the document does not scroll (not enough |
| 2055 // content). |
| 2022 EXPECT_TRUE(!frameScrollTranslation()); | 2056 EXPECT_TRUE(!frameScrollTranslation()); |
| 2023 EXPECT_EQ(framePreTranslation(), clipProperties->localBorderBoxProperties() | 2057 EXPECT_EQ(framePreTranslation(), clipProperties->localBorderBoxProperties() |
| 2024 ->propertyTreeState.transform()); | 2058 ->propertyTreeState.transform()); |
| 2025 EXPECT_EQ( | 2059 EXPECT_EQ( |
| 2026 frameContentClip(), | 2060 frameContentClip(), |
| 2027 clipProperties->localBorderBoxProperties()->propertyTreeState.clip()); | 2061 clipProperties->localBorderBoxProperties()->propertyTreeState.clip()); |
| 2028 | 2062 |
| 2029 auto contentsProperties = clipProperties->contentsProperties(); | 2063 auto contentsProperties = clipProperties->contentsProperties(); |
| 2030 EXPECT_EQ(LayoutPoint(30, 20), contentsProperties.paintOffset); | 2064 EXPECT_EQ(LayoutPoint(30, 20), contentsProperties.paintOffset); |
| 2031 EXPECT_EQ(framePreTranslation(), | 2065 EXPECT_EQ(framePreTranslation(), |
| (...skipping 21 matching lines...) Expand all Loading... |
| 2053 "500px;'></div>" | 2087 "500px;'></div>" |
| 2054 "</div>"); | 2088 "</div>"); |
| 2055 | 2089 |
| 2056 LayoutBoxModelObject* clipper = toLayoutBoxModelObject( | 2090 LayoutBoxModelObject* clipper = toLayoutBoxModelObject( |
| 2057 document().getElementById("clipper")->layoutObject()); | 2091 document().getElementById("clipper")->layoutObject()); |
| 2058 const ObjectPaintProperties* clipProperties = | 2092 const ObjectPaintProperties* clipProperties = |
| 2059 clipper->objectPaintProperties(); | 2093 clipper->objectPaintProperties(); |
| 2060 LayoutObject* child = document().getElementById("child")->layoutObject(); | 2094 LayoutObject* child = document().getElementById("child")->layoutObject(); |
| 2061 const ObjectPaintProperties* childProperties = child->objectPaintProperties(); | 2095 const ObjectPaintProperties* childProperties = child->objectPaintProperties(); |
| 2062 | 2096 |
| 2063 // No scroll translation because the document does not scroll (not enough cont
ent). | 2097 // No scroll translation because the document does not scroll (not enough |
| 2098 // content). |
| 2064 EXPECT_TRUE(!frameScrollTranslation()); | 2099 EXPECT_TRUE(!frameScrollTranslation()); |
| 2065 EXPECT_EQ(framePreTranslation(), clipProperties->localBorderBoxProperties() | 2100 EXPECT_EQ(framePreTranslation(), clipProperties->localBorderBoxProperties() |
| 2066 ->propertyTreeState.transform()); | 2101 ->propertyTreeState.transform()); |
| 2067 EXPECT_EQ( | 2102 EXPECT_EQ( |
| 2068 frameContentClip(), | 2103 frameContentClip(), |
| 2069 clipProperties->localBorderBoxProperties()->propertyTreeState.clip()); | 2104 clipProperties->localBorderBoxProperties()->propertyTreeState.clip()); |
| 2070 | 2105 |
| 2071 auto contentsProperties = clipProperties->contentsProperties(); | 2106 auto contentsProperties = clipProperties->contentsProperties(); |
| 2072 EXPECT_EQ(LayoutPoint(30, 20), contentsProperties.paintOffset); | 2107 EXPECT_EQ(LayoutPoint(30, 20), contentsProperties.paintOffset); |
| 2073 EXPECT_EQ(framePreTranslation(), | 2108 EXPECT_EQ(framePreTranslation(), |
| 2074 contentsProperties.propertyTreeState.transform()); | 2109 contentsProperties.propertyTreeState.transform()); |
| 2075 EXPECT_EQ(clipProperties->overflowClip(), | 2110 EXPECT_EQ(clipProperties->overflowClip(), |
| 2076 contentsProperties.propertyTreeState.clip()); | 2111 contentsProperties.propertyTreeState.clip()); |
| 2077 | 2112 |
| 2078 EXPECT_EQ(framePreTranslation(), childProperties->localBorderBoxProperties() | 2113 EXPECT_EQ(framePreTranslation(), childProperties->localBorderBoxProperties() |
| 2079 ->propertyTreeState.transform()); | 2114 ->propertyTreeState.transform()); |
| 2080 EXPECT_EQ( | 2115 EXPECT_EQ( |
| 2081 clipProperties->overflowClip(), | 2116 clipProperties->overflowClip(), |
| 2082 childProperties->localBorderBoxProperties()->propertyTreeState.clip()); | 2117 childProperties->localBorderBoxProperties()->propertyTreeState.clip()); |
| 2083 | 2118 |
| 2084 EXPECT_NE( | 2119 EXPECT_NE( |
| 2085 nullptr, | 2120 nullptr, |
| 2086 childProperties->localBorderBoxProperties()->propertyTreeState.effect()); | 2121 childProperties->localBorderBoxProperties()->propertyTreeState.effect()); |
| 2087 CHECK_EXACT_VISUAL_RECT(LayoutRect(0, 0, 400, 500), child, clipper); | 2122 CHECK_EXACT_VISUAL_RECT(LayoutRect(0, 0, 400, 500), child, clipper); |
| 2088 } | 2123 } |
| 2089 | 2124 |
| 2090 TEST_P(PaintPropertyTreeBuilderTest, OverflowScrollContentsTreeState) { | 2125 TEST_P(PaintPropertyTreeBuilderTest, OverflowScrollContentsTreeState) { |
| 2091 // This test verifies the tree builder correctly computes and records the prop
erty tree context | 2126 // This test verifies the tree builder correctly computes and records the |
| 2092 // for a (pseudo) stacking context that is scrolled by a containing block that
is not one of | 2127 // property tree context for a (pseudo) stacking context that is scrolled by a |
| 2093 // the painting ancestors. | 2128 // containing block that is not one of the painting ancestors. |
| 2094 setBodyInnerHTML( | 2129 setBodyInnerHTML( |
| 2095 "<style>body { margin: 20px 30px; }</style>" | 2130 "<style>body { margin: 20px 30px; }</style>" |
| 2096 "<div id='clipper' style='overflow:scroll; width:400px; height:300px;'>" | 2131 "<div id='clipper' style='overflow:scroll; width:400px; height:300px;'>" |
| 2097 " <div id='child' style='position:relative; width:500px; height: " | 2132 " <div id='child' style='position:relative; width:500px; height: " |
| 2098 "600px;'></div>" | 2133 "600px;'></div>" |
| 2099 " <div style='width: 200px; height: 10000px'></div>" | 2134 " <div style='width: 200px; height: 10000px'></div>" |
| 2100 "</div>" | 2135 "</div>" |
| 2101 "<div id='forceScroll' style='height: 4000px;'></div>"); | 2136 "<div id='forceScroll' style='height: 4000px;'></div>"); |
| 2102 | 2137 |
| 2103 Element* clipperElement = document().getElementById("clipper"); | 2138 Element* clipperElement = document().getElementById("clipper"); |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2161 | 2196 |
| 2162 LayoutObject& roundedBox = | 2197 LayoutObject& roundedBox = |
| 2163 *document().getElementById("roundedBox")->layoutObject(); | 2198 *document().getElementById("roundedBox")->layoutObject(); |
| 2164 const ObjectPaintProperties* roundedBoxProperties = | 2199 const ObjectPaintProperties* roundedBoxProperties = |
| 2165 roundedBox.objectPaintProperties(); | 2200 roundedBox.objectPaintProperties(); |
| 2166 EXPECT_EQ( | 2201 EXPECT_EQ( |
| 2167 FloatRoundedRect(FloatRect(50, 50, 200, 200), FloatSize(50, 50), | 2202 FloatRoundedRect(FloatRect(50, 50, 200, 200), FloatSize(50, 50), |
| 2168 FloatSize(50, 50), FloatSize(50, 50), FloatSize(50, 50)), | 2203 FloatSize(50, 50), FloatSize(50, 50), FloatSize(50, 50)), |
| 2169 roundedBoxProperties->innerBorderRadiusClip()->clipRect()); | 2204 roundedBoxProperties->innerBorderRadiusClip()->clipRect()); |
| 2170 | 2205 |
| 2171 // Unlike the inner border radius clip, the overflow clip is inset by the scro
llbars (13px). | 2206 // Unlike the inner border radius clip, the overflow clip is inset by the |
| 2207 // scrollbars (13px). |
| 2172 EXPECT_EQ(FloatRoundedRect(50, 50, 187, 187), | 2208 EXPECT_EQ(FloatRoundedRect(50, 50, 187, 187), |
| 2173 roundedBoxProperties->overflowClip()->clipRect()); | 2209 roundedBoxProperties->overflowClip()->clipRect()); |
| 2174 EXPECT_EQ(frameContentClip(), | 2210 EXPECT_EQ(frameContentClip(), |
| 2175 roundedBoxProperties->innerBorderRadiusClip()->parent()); | 2211 roundedBoxProperties->innerBorderRadiusClip()->parent()); |
| 2176 EXPECT_EQ(roundedBoxProperties->innerBorderRadiusClip(), | 2212 EXPECT_EQ(roundedBoxProperties->innerBorderRadiusClip(), |
| 2177 roundedBoxProperties->overflowClip()->parent()); | 2213 roundedBoxProperties->overflowClip()->parent()); |
| 2178 } | 2214 } |
| 2179 | 2215 |
| 2180 TEST_P(PaintPropertyTreeBuilderTest, CssClipContentsTreeState) { | 2216 TEST_P(PaintPropertyTreeBuilderTest, CssClipContentsTreeState) { |
| 2181 // This test verifies the tree builder correctly computes and records the prop
erty tree context | 2217 // This test verifies the tree builder correctly computes and records the |
| 2182 // for a (pseudo) stacking context that is scrolled by a containing block that
is not one of | 2218 // property tree context for a (pseudo) stacking context that is scrolled by a |
| 2183 // the painting ancestors. | 2219 // containing block that is not one of the painting ancestors. |
| 2184 setBodyInnerHTML( | 2220 setBodyInnerHTML( |
| 2185 "<style>body { margin: 20px 30px; }</style>" | 2221 "<style>body { margin: 20px 30px; }</style>" |
| 2186 "<div id='clipper' style='position: absolute; clip: rect(10px, 80px, " | 2222 "<div id='clipper' style='position: absolute; clip: rect(10px, 80px, " |
| 2187 "70px, 40px); width:300px; height:200px;'>" | 2223 "70px, 40px); width:300px; height:200px;'>" |
| 2188 " <div id='child' style='position:relative; width:400px; height: " | 2224 " <div id='child' style='position:relative; width:400px; height: " |
| 2189 "500px;'></div>" | 2225 "500px;'></div>" |
| 2190 "</div>"); | 2226 "</div>"); |
| 2191 | 2227 |
| 2192 LayoutBoxModelObject* clipper = toLayoutBoxModelObject( | 2228 LayoutBoxModelObject* clipper = toLayoutBoxModelObject( |
| 2193 document().getElementById("clipper")->layoutObject()); | 2229 document().getElementById("clipper")->layoutObject()); |
| 2194 const ObjectPaintProperties* clipProperties = | 2230 const ObjectPaintProperties* clipProperties = |
| 2195 clipper->objectPaintProperties(); | 2231 clipper->objectPaintProperties(); |
| 2196 LayoutObject* child = document().getElementById("child")->layoutObject(); | 2232 LayoutObject* child = document().getElementById("child")->layoutObject(); |
| 2197 | 2233 |
| 2198 // No scroll translation because the document does not scroll (not enough cont
ent). | 2234 // No scroll translation because the document does not scroll (not enough |
| 2235 // content). |
| 2199 EXPECT_TRUE(!frameScrollTranslation()); | 2236 EXPECT_TRUE(!frameScrollTranslation()); |
| 2200 EXPECT_EQ(framePreTranslation(), clipProperties->localBorderBoxProperties() | 2237 EXPECT_EQ(framePreTranslation(), clipProperties->localBorderBoxProperties() |
| 2201 ->propertyTreeState.transform()); | 2238 ->propertyTreeState.transform()); |
| 2202 // CSS clip on an element causes it to clip itself, not just descendants. | 2239 // CSS clip on an element causes it to clip itself, not just descendants. |
| 2203 EXPECT_EQ( | 2240 EXPECT_EQ( |
| 2204 clipProperties->cssClip(), | 2241 clipProperties->cssClip(), |
| 2205 clipProperties->localBorderBoxProperties()->propertyTreeState.clip()); | 2242 clipProperties->localBorderBoxProperties()->propertyTreeState.clip()); |
| 2206 | 2243 |
| 2207 auto contentsProperties = clipProperties->contentsProperties(); | 2244 auto contentsProperties = clipProperties->contentsProperties(); |
| 2208 EXPECT_EQ(LayoutPoint(30, 20), contentsProperties.paintOffset); | 2245 EXPECT_EQ(LayoutPoint(30, 20), contentsProperties.paintOffset); |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2267 " <div class='forceScroll'></div>" | 2304 " <div class='forceScroll'></div>" |
| 2268 "</div>"); | 2305 "</div>"); |
| 2269 | 2306 |
| 2270 Element* overflowHidden = document().getElementById("overflowHidden"); | 2307 Element* overflowHidden = document().getElementById("overflowHidden"); |
| 2271 overflowHidden->setScrollTop(37); | 2308 overflowHidden->setScrollTop(37); |
| 2272 | 2309 |
| 2273 document().view()->updateAllLifecyclePhases(); | 2310 document().view()->updateAllLifecyclePhases(); |
| 2274 | 2311 |
| 2275 const ObjectPaintProperties* overflowHiddenScrollProperties = | 2312 const ObjectPaintProperties* overflowHiddenScrollProperties = |
| 2276 overflowHidden->layoutObject()->objectPaintProperties(); | 2313 overflowHidden->layoutObject()->objectPaintProperties(); |
| 2277 // Because the frameView is does not scroll, overflowHidden's scroll should be
under the root. | 2314 // Because the frameView is does not scroll, overflowHidden's scroll should be |
| 2315 // under the root. |
| 2278 EXPECT_TRUE(overflowHiddenScrollProperties->scroll()->parent()->isRoot()); | 2316 EXPECT_TRUE(overflowHiddenScrollProperties->scroll()->parent()->isRoot()); |
| 2279 EXPECT_EQ(TransformationMatrix().translate(0, -37), | 2317 EXPECT_EQ(TransformationMatrix().translate(0, -37), |
| 2280 overflowHiddenScrollProperties->scroll() | 2318 overflowHiddenScrollProperties->scroll() |
| 2281 ->scrollOffsetTranslation() | 2319 ->scrollOffsetTranslation() |
| 2282 ->matrix()); | 2320 ->matrix()); |
| 2283 // This should match the overflow's dimensions. | 2321 // This should match the overflow's dimensions. |
| 2284 EXPECT_EQ(IntSize(5, 3), overflowHiddenScrollProperties->scroll()->clip()); | 2322 EXPECT_EQ(IntSize(5, 3), overflowHiddenScrollProperties->scroll()->clip()); |
| 2285 // The scrolling content's bounds should include both the overflow's dimension
s (5x3) and the | 2323 // The scrolling content's bounds should include both the overflow's |
| 2286 // 0x79 "forceScroll" object. | 2324 // dimensions (5x3) and the 0x79 "forceScroll" object. |
| 2287 EXPECT_EQ(IntSize(5, 79), overflowHiddenScrollProperties->scroll()->bounds()); | 2325 EXPECT_EQ(IntSize(5, 79), overflowHiddenScrollProperties->scroll()->bounds()); |
| 2288 // Although overflow: hidden is programmatically scrollable, it is not user sc
rollable. | 2326 // Although overflow: hidden is programmatically scrollable, it is not user |
| 2327 // scrollable. |
| 2289 EXPECT_FALSE( | 2328 EXPECT_FALSE( |
| 2290 overflowHiddenScrollProperties->scroll()->userScrollableHorizontal()); | 2329 overflowHiddenScrollProperties->scroll()->userScrollableHorizontal()); |
| 2291 EXPECT_FALSE( | 2330 EXPECT_FALSE( |
| 2292 overflowHiddenScrollProperties->scroll()->userScrollableVertical()); | 2331 overflowHiddenScrollProperties->scroll()->userScrollableVertical()); |
| 2293 } | 2332 } |
| 2294 | 2333 |
| 2295 TEST_P(PaintPropertyTreeBuilderTest, NestedScrollProperties) { | 2334 TEST_P(PaintPropertyTreeBuilderTest, NestedScrollProperties) { |
| 2296 setBodyInnerHTML( | 2335 setBodyInnerHTML( |
| 2297 "<style>" | 2336 "<style>" |
| 2298 " * {" | 2337 " * {" |
| (...skipping 22 matching lines...) Expand all Loading... |
| 2321 | 2360 |
| 2322 Element* overflowA = document().getElementById("overflowA"); | 2361 Element* overflowA = document().getElementById("overflowA"); |
| 2323 overflowA->setScrollTop(37); | 2362 overflowA->setScrollTop(37); |
| 2324 Element* overflowB = document().getElementById("overflowB"); | 2363 Element* overflowB = document().getElementById("overflowB"); |
| 2325 overflowB->setScrollTop(41); | 2364 overflowB->setScrollTop(41); |
| 2326 | 2365 |
| 2327 document().view()->updateAllLifecyclePhases(); | 2366 document().view()->updateAllLifecyclePhases(); |
| 2328 | 2367 |
| 2329 const ObjectPaintProperties* overflowAScrollProperties = | 2368 const ObjectPaintProperties* overflowAScrollProperties = |
| 2330 overflowA->layoutObject()->objectPaintProperties(); | 2369 overflowA->layoutObject()->objectPaintProperties(); |
| 2331 // Because the frameView is does not scroll, overflowA's scroll should be unde
r the root. | 2370 // Because the frameView is does not scroll, overflowA's scroll should be |
| 2371 // under the root. |
| 2332 EXPECT_TRUE(overflowAScrollProperties->scroll()->parent()->isRoot()); | 2372 EXPECT_TRUE(overflowAScrollProperties->scroll()->parent()->isRoot()); |
| 2333 EXPECT_EQ( | 2373 EXPECT_EQ( |
| 2334 TransformationMatrix().translate(0, -37), | 2374 TransformationMatrix().translate(0, -37), |
| 2335 overflowAScrollProperties->scroll()->scrollOffsetTranslation()->matrix()); | 2375 overflowAScrollProperties->scroll()->scrollOffsetTranslation()->matrix()); |
| 2336 EXPECT_EQ(IntSize(5, 3), overflowAScrollProperties->scroll()->clip()); | 2376 EXPECT_EQ(IntSize(5, 3), overflowAScrollProperties->scroll()->clip()); |
| 2337 // 107 is the forceScroll element plus the height of the overflow scroll child
(overflowB). | 2377 // 107 is the forceScroll element plus the height of the overflow scroll child |
| 2378 // (overflowB). |
| 2338 EXPECT_EQ(IntSize(9, 107), overflowAScrollProperties->scroll()->bounds()); | 2379 EXPECT_EQ(IntSize(9, 107), overflowAScrollProperties->scroll()->bounds()); |
| 2339 EXPECT_TRUE(overflowAScrollProperties->scroll()->userScrollableHorizontal()); | 2380 EXPECT_TRUE(overflowAScrollProperties->scroll()->userScrollableHorizontal()); |
| 2340 EXPECT_TRUE(overflowAScrollProperties->scroll()->userScrollableVertical()); | 2381 EXPECT_TRUE(overflowAScrollProperties->scroll()->userScrollableVertical()); |
| 2341 | 2382 |
| 2342 const ObjectPaintProperties* overflowBScrollProperties = | 2383 const ObjectPaintProperties* overflowBScrollProperties = |
| 2343 overflowB->layoutObject()->objectPaintProperties(); | 2384 overflowB->layoutObject()->objectPaintProperties(); |
| 2344 // The overflow child's scroll node should be a child of the parent's (overflo
wA) scroll node. | 2385 // The overflow child's scroll node should be a child of the parent's |
| 2386 // (overflowA) scroll node. |
| 2345 EXPECT_EQ(overflowAScrollProperties->scroll(), | 2387 EXPECT_EQ(overflowAScrollProperties->scroll(), |
| 2346 overflowBScrollProperties->scroll()->parent()); | 2388 overflowBScrollProperties->scroll()->parent()); |
| 2347 EXPECT_EQ( | 2389 EXPECT_EQ( |
| 2348 TransformationMatrix().translate(0, -41), | 2390 TransformationMatrix().translate(0, -41), |
| 2349 overflowBScrollProperties->scroll()->scrollOffsetTranslation()->matrix()); | 2391 overflowBScrollProperties->scroll()->scrollOffsetTranslation()->matrix()); |
| 2350 EXPECT_EQ(IntSize(9, 7), overflowBScrollProperties->scroll()->clip()); | 2392 EXPECT_EQ(IntSize(9, 7), overflowBScrollProperties->scroll()->clip()); |
| 2351 EXPECT_EQ(IntSize(9, 100), overflowBScrollProperties->scroll()->bounds()); | 2393 EXPECT_EQ(IntSize(9, 100), overflowBScrollProperties->scroll()->bounds()); |
| 2352 EXPECT_TRUE(overflowBScrollProperties->scroll()->userScrollableHorizontal()); | 2394 EXPECT_TRUE(overflowBScrollProperties->scroll()->userScrollableHorizontal()); |
| 2353 EXPECT_TRUE(overflowBScrollProperties->scroll()->userScrollableVertical()); | 2395 EXPECT_TRUE(overflowBScrollProperties->scroll()->userScrollableVertical()); |
| 2354 } | 2396 } |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2407 // The frame should scroll due to the "forceScroll" element. | 2449 // The frame should scroll due to the "forceScroll" element. |
| 2408 EXPECT_NE(nullptr, frameScroll()); | 2450 EXPECT_NE(nullptr, frameScroll()); |
| 2409 | 2451 |
| 2410 const ObjectPaintProperties* overflowScrollProperties = | 2452 const ObjectPaintProperties* overflowScrollProperties = |
| 2411 overflow->layoutObject()->objectPaintProperties(); | 2453 overflow->layoutObject()->objectPaintProperties(); |
| 2412 EXPECT_EQ(frameScroll(), overflowScrollProperties->scroll()->parent()); | 2454 EXPECT_EQ(frameScroll(), overflowScrollProperties->scroll()->parent()); |
| 2413 EXPECT_EQ( | 2455 EXPECT_EQ( |
| 2414 TransformationMatrix().translate(0, -37), | 2456 TransformationMatrix().translate(0, -37), |
| 2415 overflowScrollProperties->scroll()->scrollOffsetTranslation()->matrix()); | 2457 overflowScrollProperties->scroll()->scrollOffsetTranslation()->matrix()); |
| 2416 EXPECT_EQ(IntSize(5, 3), overflowScrollProperties->scroll()->clip()); | 2458 EXPECT_EQ(IntSize(5, 3), overflowScrollProperties->scroll()->clip()); |
| 2417 // The height should be 4000px because the (dom-order) overflow children are p
ositioned and do not | 2459 // The height should be 4000px because the (dom-order) overflow children are |
| 2418 // contribute to the height. Only the 4000px "forceScroll" height is present. | 2460 // positioned and do not contribute to the height. Only the 4000px |
| 2461 // "forceScroll" height is present. |
| 2419 EXPECT_EQ(IntSize(5, 4000), overflowScrollProperties->scroll()->bounds()); | 2462 EXPECT_EQ(IntSize(5, 4000), overflowScrollProperties->scroll()->bounds()); |
| 2420 | 2463 |
| 2421 const ObjectPaintProperties* absposOverflowScrollProperties = | 2464 const ObjectPaintProperties* absposOverflowScrollProperties = |
| 2422 absposOverflow->layoutObject()->objectPaintProperties(); | 2465 absposOverflow->layoutObject()->objectPaintProperties(); |
| 2423 // The absolute position overflow scroll node is parented under the frame, not
the dom-order parent. | 2466 // The absolute position overflow scroll node is parented under the frame, not |
| 2467 // the dom-order parent. |
| 2424 EXPECT_EQ(frameScroll(), absposOverflowScrollProperties->scroll()->parent()); | 2468 EXPECT_EQ(frameScroll(), absposOverflowScrollProperties->scroll()->parent()); |
| 2425 EXPECT_EQ(TransformationMatrix().translate(0, -41), | 2469 EXPECT_EQ(TransformationMatrix().translate(0, -41), |
| 2426 absposOverflowScrollProperties->scroll() | 2470 absposOverflowScrollProperties->scroll() |
| 2427 ->scrollOffsetTranslation() | 2471 ->scrollOffsetTranslation() |
| 2428 ->matrix()); | 2472 ->matrix()); |
| 2429 EXPECT_EQ(IntSize(9, 7), absposOverflowScrollProperties->scroll()->clip()); | 2473 EXPECT_EQ(IntSize(9, 7), absposOverflowScrollProperties->scroll()->clip()); |
| 2430 EXPECT_EQ(IntSize(9, 4000), | 2474 EXPECT_EQ(IntSize(9, 4000), |
| 2431 absposOverflowScrollProperties->scroll()->bounds()); | 2475 absposOverflowScrollProperties->scroll()->bounds()); |
| 2432 | 2476 |
| 2433 const ObjectPaintProperties* fixedOverflowScrollProperties = | 2477 const ObjectPaintProperties* fixedOverflowScrollProperties = |
| 2434 fixedOverflow->layoutObject()->objectPaintProperties(); | 2478 fixedOverflow->layoutObject()->objectPaintProperties(); |
| 2435 // The fixed position overflow scroll node is parented under the root, not the
dom-order parent or frame's scroll. | 2479 // The fixed position overflow scroll node is parented under the root, not the |
| 2480 // dom-order parent or frame's scroll. |
| 2436 EXPECT_TRUE(fixedOverflowScrollProperties->scroll()->parent()->isRoot()); | 2481 EXPECT_TRUE(fixedOverflowScrollProperties->scroll()->parent()->isRoot()); |
| 2437 EXPECT_EQ(TransformationMatrix().translate(0, -43), | 2482 EXPECT_EQ(TransformationMatrix().translate(0, -43), |
| 2438 fixedOverflowScrollProperties->scroll() | 2483 fixedOverflowScrollProperties->scroll() |
| 2439 ->scrollOffsetTranslation() | 2484 ->scrollOffsetTranslation() |
| 2440 ->matrix()); | 2485 ->matrix()); |
| 2441 EXPECT_EQ(IntSize(13, 11), fixedOverflowScrollProperties->scroll()->clip()); | 2486 EXPECT_EQ(IntSize(13, 11), fixedOverflowScrollProperties->scroll()->clip()); |
| 2442 EXPECT_EQ(IntSize(13, 4000), | 2487 EXPECT_EQ(IntSize(13, 4000), |
| 2443 fixedOverflowScrollProperties->scroll()->bounds()); | 2488 fixedOverflowScrollProperties->scroll()->bounds()); |
| 2444 } | 2489 } |
| 2445 | 2490 |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2478 | 2523 |
| 2479 Element* overflowA = document().getElementById("overflowA"); | 2524 Element* overflowA = document().getElementById("overflowA"); |
| 2480 overflowA->setScrollTop(37); | 2525 overflowA->setScrollTop(37); |
| 2481 Element* overflowB = document().getElementById("overflowB"); | 2526 Element* overflowB = document().getElementById("overflowB"); |
| 2482 overflowB->setScrollTop(41); | 2527 overflowB->setScrollTop(41); |
| 2483 | 2528 |
| 2484 document().view()->updateAllLifecyclePhases(); | 2529 document().view()->updateAllLifecyclePhases(); |
| 2485 | 2530 |
| 2486 const ObjectPaintProperties* overflowAScrollProperties = | 2531 const ObjectPaintProperties* overflowAScrollProperties = |
| 2487 overflowA->layoutObject()->objectPaintProperties(); | 2532 overflowA->layoutObject()->objectPaintProperties(); |
| 2488 // Because the frameView is does not scroll, overflowA's scroll should be unde
r the root. | 2533 // Because the frameView is does not scroll, overflowA's scroll should be |
| 2534 // under the root. |
| 2489 EXPECT_TRUE(overflowAScrollProperties->scroll()->parent()->isRoot()); | 2535 EXPECT_TRUE(overflowAScrollProperties->scroll()->parent()->isRoot()); |
| 2490 EXPECT_EQ( | 2536 EXPECT_EQ( |
| 2491 TransformationMatrix().translate(0, -37), | 2537 TransformationMatrix().translate(0, -37), |
| 2492 overflowAScrollProperties->scroll()->scrollOffsetTranslation()->matrix()); | 2538 overflowAScrollProperties->scroll()->scrollOffsetTranslation()->matrix()); |
| 2493 EXPECT_EQ(IntSize(20, 20), overflowAScrollProperties->scroll()->clip()); | 2539 EXPECT_EQ(IntSize(20, 20), overflowAScrollProperties->scroll()->clip()); |
| 2494 // 100 is the forceScroll element's height because the overflow child does not
contribute to the height. | 2540 // 100 is the forceScroll element's height because the overflow child does not |
| 2541 // contribute to the height. |
| 2495 EXPECT_EQ(IntSize(20, 100), overflowAScrollProperties->scroll()->bounds()); | 2542 EXPECT_EQ(IntSize(20, 100), overflowAScrollProperties->scroll()->bounds()); |
| 2496 EXPECT_TRUE(overflowAScrollProperties->scroll()->userScrollableHorizontal()); | 2543 EXPECT_TRUE(overflowAScrollProperties->scroll()->userScrollableHorizontal()); |
| 2497 EXPECT_TRUE(overflowAScrollProperties->scroll()->userScrollableVertical()); | 2544 EXPECT_TRUE(overflowAScrollProperties->scroll()->userScrollableVertical()); |
| 2498 | 2545 |
| 2499 const ObjectPaintProperties* overflowBScrollProperties = | 2546 const ObjectPaintProperties* overflowBScrollProperties = |
| 2500 overflowB->layoutObject()->objectPaintProperties(); | 2547 overflowB->layoutObject()->objectPaintProperties(); |
| 2501 // The overflow child's scroll node should be a child of the parent's (overflo
wA) scroll node. | 2548 // The overflow child's scroll node should be a child of the parent's |
| 2549 // (overflowA) scroll node. |
| 2502 EXPECT_EQ(overflowAScrollProperties->scroll(), | 2550 EXPECT_EQ(overflowAScrollProperties->scroll(), |
| 2503 overflowBScrollProperties->scroll()->parent()); | 2551 overflowBScrollProperties->scroll()->parent()); |
| 2504 EXPECT_EQ( | 2552 EXPECT_EQ( |
| 2505 TransformationMatrix().translate(0, -41), | 2553 TransformationMatrix().translate(0, -41), |
| 2506 overflowBScrollProperties->scroll()->scrollOffsetTranslation()->matrix()); | 2554 overflowBScrollProperties->scroll()->scrollOffsetTranslation()->matrix()); |
| 2507 EXPECT_EQ(IntSize(5, 3), overflowBScrollProperties->scroll()->clip()); | 2555 EXPECT_EQ(IntSize(5, 3), overflowBScrollProperties->scroll()->clip()); |
| 2508 EXPECT_EQ(IntSize(5, 100), overflowBScrollProperties->scroll()->bounds()); | 2556 EXPECT_EQ(IntSize(5, 100), overflowBScrollProperties->scroll()->bounds()); |
| 2509 EXPECT_TRUE(overflowBScrollProperties->scroll()->userScrollableHorizontal()); | 2557 EXPECT_TRUE(overflowBScrollProperties->scroll()->userScrollableHorizontal()); |
| 2510 EXPECT_TRUE(overflowBScrollProperties->scroll()->userScrollableVertical()); | 2558 EXPECT_TRUE(overflowBScrollProperties->scroll()->userScrollableVertical()); |
| 2511 } | 2559 } |
| (...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2733 EXPECT_FALSE( | 2781 EXPECT_FALSE( |
| 2734 overflowB->layoutObject() | 2782 overflowB->layoutObject() |
| 2735 ->objectPaintProperties() | 2783 ->objectPaintProperties() |
| 2736 ->scroll() | 2784 ->scroll() |
| 2737 ->parent() | 2785 ->parent() |
| 2738 ->hasMainThreadScrollingReasons( | 2786 ->hasMainThreadScrollingReasons( |
| 2739 MainThreadScrollingReason::kHasBackgroundAttachmentFixedObjects)); | 2787 MainThreadScrollingReason::kHasBackgroundAttachmentFixedObjects)); |
| 2740 } | 2788 } |
| 2741 | 2789 |
| 2742 } // namespace blink | 2790 } // namespace blink |
| OLD | NEW |