| 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/paint/PaintPropertyTreeBuilderTest.h" | 5 #include "core/paint/PaintPropertyTreeBuilderTest.h" |
| 6 | 6 |
| 7 #include "core/html/HTMLIFrameElement.h" | 7 #include "core/html/HTMLIFrameElement.h" |
| 8 #include "core/layout/LayoutTreeAsText.h" | 8 #include "core/layout/LayoutTreeAsText.h" |
| 9 #include "core/paint/ObjectPaintProperties.h" | 9 #include "core/paint/ObjectPaintProperties.h" |
| 10 #include "core/paint/PaintPropertyTreePrinter.h" | 10 #include "core/paint/PaintPropertyTreePrinter.h" |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 133 | 133 |
| 134 FrameView* frameView = document().view(); | 134 FrameView* frameView = document().view(); |
| 135 frameView->updateAllLifecyclePhases(); | 135 frameView->updateAllLifecyclePhases(); |
| 136 | 136 |
| 137 // target1 is a fixed-position element inside an absolute-position scrolling | 137 // target1 is a fixed-position element inside an absolute-position scrolling |
| 138 // element. It should be attached under the viewport to skip scrolling and | 138 // element. It should be attached under the viewport to skip scrolling and |
| 139 // offset of the parent. | 139 // offset of the parent. |
| 140 Element* target1 = document().getElementById("target1"); | 140 Element* target1 = document().getElementById("target1"); |
| 141 const ObjectPaintProperties* target1Properties = | 141 const ObjectPaintProperties* target1Properties = |
| 142 target1->layoutObject()->paintProperties(); | 142 target1->layoutObject()->paintProperties(); |
| 143 EXPECT_EQ(TransformationMatrix().translate(200, 150), | 143 EXPECT_EQ(FloatRoundedRect(200, 150, 100, 100), |
| 144 target1Properties->paintOffsetTranslation()->matrix()); | |
| 145 EXPECT_EQ(framePreTranslation(), | |
| 146 target1Properties->paintOffsetTranslation()->parent()); | |
| 147 EXPECT_EQ(target1Properties->paintOffsetTranslation(), | |
| 148 target1Properties->overflowClip()->localTransformSpace()); | |
| 149 EXPECT_EQ(FloatRoundedRect(0, 0, 100, 100), | |
| 150 target1Properties->overflowClip()->clipRect()); | 144 target1Properties->overflowClip()->clipRect()); |
| 151 // Likewise, it inherits clip from the viewport, skipping overflow clip of the | 145 // Likewise, it inherits clip from the viewport, skipping overflow clip of the |
| 152 // scroller. | 146 // scroller. |
| 153 EXPECT_EQ(frameContentClip(), target1Properties->overflowClip()->parent()); | 147 EXPECT_EQ(frameContentClip(), target1Properties->overflowClip()->parent()); |
| 154 // target1 should not have it's own scroll node and instead should inherit | 148 // target1 should not have its own scroll node and instead should inherit |
| 155 // positionedScroll's. | 149 // positionedScroll's. |
| 156 const ObjectPaintProperties* positionedScrollProperties = | 150 const ObjectPaintProperties* positionedScrollProperties = |
| 157 positionedScroll->layoutObject()->paintProperties(); | 151 positionedScroll->layoutObject()->paintProperties(); |
| 158 EXPECT_TRUE(positionedScrollProperties->scroll()->parent()->isRoot()); | 152 EXPECT_TRUE(positionedScrollProperties->scroll()->parent()->isRoot()); |
| 159 EXPECT_EQ(TransformationMatrix().translate(0, -3), | 153 EXPECT_EQ(TransformationMatrix().translate(0, -3), |
| 160 positionedScrollProperties->scroll() | 154 positionedScrollProperties->scroll() |
| 161 ->scrollOffsetTranslation() | 155 ->scrollOffsetTranslation() |
| 162 ->matrix()); | 156 ->matrix()); |
| 163 EXPECT_EQ(nullptr, target1Properties->scroll()); | 157 EXPECT_EQ(nullptr, target1Properties->scroll()); |
| 164 | |
| 165 CHECK_EXACT_VISUAL_RECT(LayoutRect(200, 150, 100, 100), | 158 CHECK_EXACT_VISUAL_RECT(LayoutRect(200, 150, 100, 100), |
| 166 target1->layoutObject(), frameView->layoutView()); | 159 target1->layoutObject(), frameView->layoutView()); |
| 167 | 160 |
| 168 // target2 is a fixed-position element inside a transformed scrolling element. | 161 // target2 is a fixed-position element inside a transformed scrolling element. |
| 169 // It should be attached under the scrolled box of the transformed element. | 162 // It should be attached under the scrolled box of the transformed element. |
| 170 Element* target2 = document().getElementById("target2"); | 163 Element* target2 = document().getElementById("target2"); |
| 171 const ObjectPaintProperties* target2Properties = | 164 const ObjectPaintProperties* target2Properties = |
| 172 target2->layoutObject()->paintProperties(); | 165 target2->layoutObject()->paintProperties(); |
| 173 Element* scroller = document().getElementById("transformedScroll"); | 166 Element* scroller = document().getElementById("transformedScroll"); |
| 174 const ObjectPaintProperties* scrollerProperties = | 167 const ObjectPaintProperties* scrollerProperties = |
| 175 scroller->layoutObject()->paintProperties(); | 168 scroller->layoutObject()->paintProperties(); |
| 176 EXPECT_EQ(TransformationMatrix().translate(200, 150), | 169 EXPECT_EQ(FloatRoundedRect(200, 150, 100, 100), |
| 177 target2Properties->paintOffsetTranslation()->matrix()); | |
| 178 EXPECT_EQ(scrollerProperties->scrollTranslation(), | |
| 179 target2Properties->paintOffsetTranslation()->parent()); | |
| 180 EXPECT_EQ(target2Properties->paintOffsetTranslation(), | |
| 181 target2Properties->overflowClip()->localTransformSpace()); | |
| 182 EXPECT_EQ(FloatRoundedRect(0, 0, 100, 100), | |
| 183 target2Properties->overflowClip()->clipRect()); | 170 target2Properties->overflowClip()->clipRect()); |
| 184 EXPECT_EQ(scrollerProperties->overflowClip(), | 171 EXPECT_EQ(scrollerProperties->overflowClip(), |
| 185 target2Properties->overflowClip()->parent()); | 172 target2Properties->overflowClip()->parent()); |
| 186 // target2 should not have it's own scroll node and instead should inherit | 173 // target2 should not have it's own scroll node and instead should inherit |
| 187 // transformedScroll's. | 174 // transformedScroll's. |
| 188 const ObjectPaintProperties* transformedScrollProperties = | 175 const ObjectPaintProperties* transformedScrollProperties = |
| 189 transformedScroll->layoutObject()->paintProperties(); | 176 transformedScroll->layoutObject()->paintProperties(); |
| 190 EXPECT_TRUE(transformedScrollProperties->scroll()->parent()->isRoot()); | 177 EXPECT_TRUE(transformedScrollProperties->scroll()->parent()->isRoot()); |
| 191 EXPECT_EQ(TransformationMatrix().translate(0, -5), | 178 EXPECT_EQ(TransformationMatrix().translate(0, -5), |
| 192 transformedScrollProperties->scroll() | 179 transformedScrollProperties->scroll() |
| (...skipping 849 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1042 const ObjectPaintProperties* containerProperties = | 1029 const ObjectPaintProperties* containerProperties = |
| 1043 container.paintProperties(); | 1030 container.paintProperties(); |
| 1044 EXPECT_EQ(TransformationMatrix().translate(20, 30), | 1031 EXPECT_EQ(TransformationMatrix().translate(20, 30), |
| 1045 containerProperties->transform()->matrix()); | 1032 containerProperties->transform()->matrix()); |
| 1046 EXPECT_EQ(svgProperties->transform(), | 1033 EXPECT_EQ(svgProperties->transform(), |
| 1047 containerProperties->transform()->parent()); | 1034 containerProperties->transform()->parent()); |
| 1048 | 1035 |
| 1049 Element* fixed = document().getElementById("fixed"); | 1036 Element* fixed = document().getElementById("fixed"); |
| 1050 const ObjectPaintProperties* fixedProperties = | 1037 const ObjectPaintProperties* fixedProperties = |
| 1051 fixed->layoutObject()->paintProperties(); | 1038 fixed->layoutObject()->paintProperties(); |
| 1052 EXPECT_EQ(TransformationMatrix().translate(200, 150), | |
| 1053 fixedProperties->paintOffsetTranslation()->matrix()); | |
| 1054 // Ensure the fixed position element is rooted at the nearest transform | 1039 // Ensure the fixed position element is rooted at the nearest transform |
| 1055 // container. | 1040 // container. |
| 1056 EXPECT_EQ(containerProperties->transform(), | 1041 EXPECT_EQ(containerProperties->transform(), |
| 1057 fixedProperties->paintOffsetTranslation()->parent()); | 1042 fixedProperties->localBorderBoxProperties() |
| 1043 ->propertyTreeState.transform()); |
| 1058 } | 1044 } |
| 1059 | 1045 |
| 1060 TEST_P(PaintPropertyTreeBuilderTest, ControlClip) { | 1046 TEST_P(PaintPropertyTreeBuilderTest, ControlClip) { |
| 1061 setBodyInnerHTML( | 1047 setBodyInnerHTML( |
| 1062 "<style>" | 1048 "<style>" |
| 1063 " body {" | 1049 " body {" |
| 1064 " margin: 0;" | 1050 " margin: 0;" |
| 1065 " }" | 1051 " }" |
| 1066 " input {" | 1052 " input {" |
| 1067 " border-width: 5px;" | 1053 " border-width: 5px;" |
| (...skipping 372 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1440 // TODO(crbug.com/599939): mapToVisualRectInAncestorSpace() | 1426 // TODO(crbug.com/599939): mapToVisualRectInAncestorSpace() |
| 1441 // doesn't apply css clip on the object itself. | 1427 // doesn't apply css clip on the object itself. |
| 1442 LayoutUnit::max()); | 1428 LayoutUnit::max()); |
| 1443 | 1429 |
| 1444 LayoutObject* fixed = document().getElementById("fixed")->layoutObject(); | 1430 LayoutObject* fixed = document().getElementById("fixed")->layoutObject(); |
| 1445 const ObjectPaintProperties* fixedProperties = fixed->paintProperties(); | 1431 const ObjectPaintProperties* fixedProperties = fixed->paintProperties(); |
| 1446 EXPECT_EQ( | 1432 EXPECT_EQ( |
| 1447 clipProperties->cssClip(), | 1433 clipProperties->cssClip(), |
| 1448 fixedProperties->localBorderBoxProperties()->propertyTreeState.clip()); | 1434 fixedProperties->localBorderBoxProperties()->propertyTreeState.clip()); |
| 1449 EXPECT_EQ(framePreTranslation(), fixedProperties->localBorderBoxProperties() | 1435 EXPECT_EQ(framePreTranslation(), fixedProperties->localBorderBoxProperties() |
| 1450 ->propertyTreeState.transform() | 1436 ->propertyTreeState.transform()); |
| 1451 ->parent()); | 1437 EXPECT_EQ(LayoutPoint(654, 321), |
| 1452 EXPECT_EQ(TransformationMatrix().translate(654, 321), | |
| 1453 fixedProperties->localBorderBoxProperties() | |
| 1454 ->propertyTreeState.transform() | |
| 1455 ->matrix()); | |
| 1456 EXPECT_EQ(LayoutPoint(), | |
| 1457 fixedProperties->localBorderBoxProperties()->paintOffset); | 1438 fixedProperties->localBorderBoxProperties()->paintOffset); |
| 1458 CHECK_VISUAL_RECT(LayoutRect(), fixed, document().view()->layoutView(), | 1439 CHECK_VISUAL_RECT(LayoutRect(), fixed, document().view()->layoutView(), |
| 1459 // TODO(crbug.com/599939): CSS clip of fixed-position | 1440 // TODO(crbug.com/599939): CSS clip of fixed-position |
| 1460 // descendants is broken in | 1441 // descendants is broken in |
| 1461 // mapToVisualRectInAncestorSpace(). | 1442 // mapToVisualRectInAncestorSpace(). |
| 1462 LayoutUnit::max()); | 1443 LayoutUnit::max()); |
| 1463 } | 1444 } |
| 1464 | 1445 |
| 1465 TEST_P(PaintPropertyTreeBuilderTest, CSSClipAbsPositionDescendant) { | 1446 TEST_P(PaintPropertyTreeBuilderTest, CSSClipAbsPositionDescendant) { |
| 1466 // This test verifies that clip tree hierarchy being generated correctly for | 1447 // This test verifies that clip tree hierarchy being generated correctly for |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1582 EXPECT_EQ(FloatRoundedRect(FloatRect(absoluteClipRect)), | 1563 EXPECT_EQ(FloatRoundedRect(FloatRect(absoluteClipRect)), |
| 1583 clipProperties->cssClipFixedPosition()->clipRect()); | 1564 clipProperties->cssClipFixedPosition()->clipRect()); |
| 1584 CHECK_EXACT_VISUAL_RECT(LayoutRect(), clip, document().view()->layoutView()); | 1565 CHECK_EXACT_VISUAL_RECT(LayoutRect(), clip, document().view()->layoutView()); |
| 1585 | 1566 |
| 1586 LayoutObject* fixed = document().getElementById("fixed")->layoutObject(); | 1567 LayoutObject* fixed = document().getElementById("fixed")->layoutObject(); |
| 1587 const ObjectPaintProperties* fixedProperties = fixed->paintProperties(); | 1568 const ObjectPaintProperties* fixedProperties = fixed->paintProperties(); |
| 1588 EXPECT_EQ( | 1569 EXPECT_EQ( |
| 1589 clipProperties->cssClipFixedPosition(), | 1570 clipProperties->cssClipFixedPosition(), |
| 1590 fixedProperties->localBorderBoxProperties()->propertyTreeState.clip()); | 1571 fixedProperties->localBorderBoxProperties()->propertyTreeState.clip()); |
| 1591 EXPECT_EQ(framePreTranslation(), fixedProperties->localBorderBoxProperties() | 1572 EXPECT_EQ(framePreTranslation(), fixedProperties->localBorderBoxProperties() |
| 1592 ->propertyTreeState.transform() | 1573 ->propertyTreeState.transform()); |
| 1593 ->parent()); | 1574 EXPECT_EQ(LayoutPoint(654, 321), |
| 1594 EXPECT_EQ(TransformationMatrix().translate(654, 321), | |
| 1595 fixedProperties->localBorderBoxProperties() | |
| 1596 ->propertyTreeState.transform() | |
| 1597 ->matrix()); | |
| 1598 EXPECT_EQ(LayoutPoint(), | |
| 1599 fixedProperties->localBorderBoxProperties()->paintOffset); | 1575 fixedProperties->localBorderBoxProperties()->paintOffset); |
| 1600 CHECK_VISUAL_RECT(LayoutRect(), fixed, document().view()->layoutView(), | 1576 CHECK_VISUAL_RECT(LayoutRect(), fixed, document().view()->layoutView(), |
| 1601 // TODO(crbug.com/599939): CSS clip of fixed-position | 1577 // TODO(crbug.com/599939): CSS clip of fixed-position |
| 1602 // descendants is broken in geometry mapping. | 1578 // descendants is broken in geometry mapping. |
| 1603 LayoutUnit::max()); | 1579 LayoutUnit::max()); |
| 1604 } | 1580 } |
| 1605 | 1581 |
| 1606 TEST_P(PaintPropertyTreeBuilderTest, ColumnSpannerUnderRelativePositioned) { | 1582 TEST_P(PaintPropertyTreeBuilderTest, ColumnSpannerUnderRelativePositioned) { |
| 1607 setBodyInnerHTML( | 1583 setBodyInnerHTML( |
| 1608 "<style>" | 1584 "<style>" |
| (...skipping 1462 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3071 EXPECT_TRUE(filterProperties->effect()->parent()->isRoot()); | 3047 EXPECT_TRUE(filterProperties->effect()->parent()->isRoot()); |
| 3072 EXPECT_EQ(frameScrollTranslation(), | 3048 EXPECT_EQ(frameScrollTranslation(), |
| 3073 filterProperties->effect()->localTransformSpace()); | 3049 filterProperties->effect()->localTransformSpace()); |
| 3074 EXPECT_EQ(clipProperties->overflowClip(), | 3050 EXPECT_EQ(clipProperties->overflowClip(), |
| 3075 filterProperties->effect()->outputClip()); | 3051 filterProperties->effect()->outputClip()); |
| 3076 | 3052 |
| 3077 const ObjectPaintProperties* childProperties = | 3053 const ObjectPaintProperties* childProperties = |
| 3078 getLayoutObjectByElementId("child")->paintProperties(); | 3054 getLayoutObjectByElementId("child")->paintProperties(); |
| 3079 const PropertyTreeState& childPaintState = | 3055 const PropertyTreeState& childPaintState = |
| 3080 childProperties->localBorderBoxProperties()->propertyTreeState; | 3056 childProperties->localBorderBoxProperties()->propertyTreeState; |
| 3081 EXPECT_EQ(framePreTranslation(), | 3057 |
| 3082 childProperties->paintOffsetTranslation()->parent()); | |
| 3083 EXPECT_EQ(childProperties->paintOffsetTranslation(), | |
| 3084 childPaintState.transform()); | |
| 3085 // This will change once we added clip expansion node. | 3058 // This will change once we added clip expansion node. |
| 3086 EXPECT_EQ(filterProperties->effect()->outputClip(), childPaintState.clip()); | 3059 EXPECT_EQ(filterProperties->effect()->outputClip(), childPaintState.clip()); |
| 3087 EXPECT_EQ(filterProperties->effect(), childPaintState.effect()); | 3060 EXPECT_EQ(filterProperties->effect(), childPaintState.effect()); |
| 3088 } | 3061 } |
| 3089 | 3062 |
| 3090 TEST_P(PaintPropertyTreeBuilderTest, TransformOriginWithAndWithoutTransform) { | 3063 TEST_P(PaintPropertyTreeBuilderTest, TransformOriginWithAndWithoutTransform) { |
| 3091 setBodyInnerHTML( | 3064 setBodyInnerHTML( |
| 3092 "<style>" | 3065 "<style>" |
| 3093 " body { margin: 0 }" | 3066 " body { margin: 0 }" |
| 3094 " div {" | 3067 " div {" |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3177 toElement(ancestor->node()) | 3150 toElement(ancestor->node()) |
| 3178 ->setAttribute(HTMLNames::styleAttr, "position: static"); | 3151 ->setAttribute(HTMLNames::styleAttr, "position: static"); |
| 3179 document().view()->updateAllLifecyclePhases(); | 3152 document().view()->updateAllLifecyclePhases(); |
| 3180 EXPECT_NE(ancestor->paintProperties()->overflowClip(), | 3153 EXPECT_NE(ancestor->paintProperties()->overflowClip(), |
| 3181 descendant->paintProperties() | 3154 descendant->paintProperties() |
| 3182 ->localBorderBoxProperties() | 3155 ->localBorderBoxProperties() |
| 3183 ->propertyTreeState.clip()); | 3156 ->propertyTreeState.clip()); |
| 3184 } | 3157 } |
| 3185 | 3158 |
| 3186 } // namespace blink | 3159 } // namespace blink |
| OLD | NEW |