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 256 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
267 absPos->layoutObject()->paintProperties(); | 267 absPos->layoutObject()->paintProperties(); |
268 EXPECT_EQ(TransformationMatrix().translate(123, 456), | 268 EXPECT_EQ(TransformationMatrix().translate(123, 456), |
269 absPosProperties->paintOffsetTranslation()->matrix()); | 269 absPosProperties->paintOffsetTranslation()->matrix()); |
270 EXPECT_EQ(frameScrollTranslation(), | 270 EXPECT_EQ(frameScrollTranslation(), |
271 absPosProperties->paintOffsetTranslation()->parent()); | 271 absPosProperties->paintOffsetTranslation()->parent()); |
272 EXPECT_EQ(absPosProperties->transform(), | 272 EXPECT_EQ(absPosProperties->transform(), |
273 absPosProperties->overflowClip()->localTransformSpace()); | 273 absPosProperties->overflowClip()->localTransformSpace()); |
274 EXPECT_EQ(FloatRoundedRect(0, 0, 300, 400), | 274 EXPECT_EQ(FloatRoundedRect(0, 0, 300, 400), |
275 absPosProperties->overflowClip()->clipRect()); | 275 absPosProperties->overflowClip()->clipRect()); |
276 EXPECT_EQ(frameContentClip(), absPosProperties->overflowClip()->parent()); | 276 EXPECT_EQ(frameContentClip(), absPosProperties->overflowClip()->parent()); |
277 CHECK_EXACT_VISUAL_RECT(LayoutRect(123, 456, 300, 400), | 277 CHECK_EXACT_VISUAL_RECT(LayoutRect(123, 456, 300, 400), |
278 absPos->layoutObject(), frameView->layoutView()); | 278 absPos->layoutObject(), frameView->layoutView()); |
279 } | 279 } |
280 | 280 |
281 TEST_P(PaintPropertyTreeBuilderTest, FrameScrollingTraditional) { | 281 TEST_P(PaintPropertyTreeBuilderTest, FrameScrollingTraditional) { |
282 setBodyInnerHTML("<style> body { height: 10000px; } </style>"); | 282 setBodyInnerHTML("<style> body { height: 10000px; } </style>"); |
283 | 283 |
284 document().domWindow()->scrollTo(0, 100); | 284 document().domWindow()->scrollTo(0, 100); |
285 | 285 |
286 FrameView* frameView = document().view(); | 286 FrameView* frameView = document().view(); |
287 frameView->updateAllLifecyclePhases(); | 287 frameView->updateAllLifecyclePhases(); |
288 EXPECT_EQ(TransformationMatrix(), framePreTranslation()->matrix()); | 288 EXPECT_EQ(TransformationMatrix(), framePreTranslation()->matrix()); |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
341 EXPECT_EQ(TransformationMatrix().translate3d(123, 456, 789), | 341 EXPECT_EQ(TransformationMatrix().translate3d(123, 456, 789), |
342 transformProperties->transform()->matrix()); | 342 transformProperties->transform()->matrix()); |
343 EXPECT_EQ(FloatPoint3D(200, 150, 0), | 343 EXPECT_EQ(FloatPoint3D(200, 150, 0), |
344 transformProperties->transform()->origin()); | 344 transformProperties->transform()->origin()); |
345 EXPECT_EQ(transformProperties->paintOffsetTranslation(), | 345 EXPECT_EQ(transformProperties->paintOffsetTranslation(), |
346 transformProperties->transform()->parent()); | 346 transformProperties->transform()->parent()); |
347 EXPECT_EQ(TransformationMatrix().translate(50, 100), | 347 EXPECT_EQ(TransformationMatrix().translate(50, 100), |
348 transformProperties->paintOffsetTranslation()->matrix()); | 348 transformProperties->paintOffsetTranslation()->matrix()); |
349 EXPECT_EQ(frameScrollTranslation(), | 349 EXPECT_EQ(frameScrollTranslation(), |
350 transformProperties->paintOffsetTranslation()->parent()); | 350 transformProperties->paintOffsetTranslation()->parent()); |
351 CHECK_EXACT_VISUAL_RECT(LayoutRect(173, 556, 400, 300), | 351 CHECK_EXACT_VISUAL_RECT(LayoutRect(173, 556, 400, 300), |
352 transform->layoutObject(), | 352 transform->layoutObject(), |
353 document().view()->layoutView()); | 353 document().view()->layoutView()); |
354 } | 354 } |
355 | 355 |
356 TEST_P(PaintPropertyTreeBuilderTest, RelativePositionInline) { | 356 TEST_P(PaintPropertyTreeBuilderTest, RelativePositionInline) { |
357 loadTestData("relative-position-inline.html"); | 357 loadTestData("relative-position-inline.html"); |
358 | 358 |
359 Element* inlineBlock = document().getElementById("inline-block"); | 359 Element* inlineBlock = document().getElementById("inline-block"); |
360 const ObjectPaintProperties* inlineBlockProperties = | 360 const ObjectPaintProperties* inlineBlockProperties = |
361 inlineBlock->layoutObject()->paintProperties(); | 361 inlineBlock->layoutObject()->paintProperties(); |
362 EXPECT_EQ(TransformationMatrix().translate(135, 490), | 362 EXPECT_EQ(TransformationMatrix().translate(135, 490), |
363 inlineBlockProperties->paintOffsetTranslation()->matrix()); | 363 inlineBlockProperties->paintOffsetTranslation()->matrix()); |
(...skipping 591 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
955 EXPECT_EQ(frameContentClip(), borderRadiusClip->parent()); | 955 EXPECT_EQ(frameContentClip(), borderRadiusClip->parent()); |
956 CHECK_EXACT_VISUAL_RECT(LayoutRect(0, 0, 610, 500), &div, | 956 CHECK_EXACT_VISUAL_RECT(LayoutRect(0, 0, 610, 500), &div, |
957 document().view()->layoutView()); | 957 document().view()->layoutView()); |
958 } | 958 } |
959 | 959 |
960 TEST_P(PaintPropertyTreeBuilderTest, TransformNodesAcrossSubframes) { | 960 TEST_P(PaintPropertyTreeBuilderTest, TransformNodesAcrossSubframes) { |
961 setBodyInnerHTML( | 961 setBodyInnerHTML( |
962 "<style>body { margin: 0; }</style>" | 962 "<style>body { margin: 0; }</style>" |
963 "<div id='divWithTransform' style='transform: translate3d(1px, 2px, " | 963 "<div id='divWithTransform' style='transform: translate3d(1px, 2px, " |
964 "3px);'>" | 964 "3px);'>" |
965 " <iframe style='border: 7px solid black' id='frame'></iframe>" | 965 " <iframe style='border: 7px solid black'></iframe>" |
966 "</div>"); | 966 "</div>"); |
967 Document& frameDocument = setupChildIframe( | 967 setChildFrameHTML( |
968 "frame", | |
969 "<style>body { margin: 0; }</style><div id='transform' style='transform: " | 968 "<style>body { margin: 0; }</style><div id='transform' style='transform: " |
970 "translate3d(4px, 5px, 6px); width: 100px; height: 200px'></div>"); | 969 "translate3d(4px, 5px, 6px); width: 100px; height: 200px'></div>"); |
| 970 |
971 FrameView* frameView = document().view(); | 971 FrameView* frameView = document().view(); |
972 frameView->updateAllLifecyclePhases(); | 972 frameView->updateAllLifecyclePhases(); |
973 | 973 |
974 LayoutObject* divWithTransform = | 974 LayoutObject* divWithTransform = |
975 document().getElementById("divWithTransform")->layoutObject(); | 975 document().getElementById("divWithTransform")->layoutObject(); |
976 const ObjectPaintProperties* divWithTransformProperties = | 976 const ObjectPaintProperties* divWithTransformProperties = |
977 divWithTransform->paintProperties(); | 977 divWithTransform->paintProperties(); |
978 EXPECT_EQ(TransformationMatrix().translate3d(1, 2, 3), | 978 EXPECT_EQ(TransformationMatrix().translate3d(1, 2, 3), |
979 divWithTransformProperties->transform()->matrix()); | 979 divWithTransformProperties->transform()->matrix()); |
980 CHECK_EXACT_VISUAL_RECT(LayoutRect(1, 2, 800, 164), divWithTransform, | 980 CHECK_EXACT_VISUAL_RECT(LayoutRect(1, 2, 800, 164), divWithTransform, |
981 frameView->layoutView()); | 981 frameView->layoutView()); |
982 | 982 |
983 LayoutObject* innerDivWithTransform = | 983 LayoutObject* innerDivWithTransform = |
984 frameDocument.getElementById("transform")->layoutObject(); | 984 childDocument().getElementById("transform")->layoutObject(); |
985 const ObjectPaintProperties* innerDivWithTransformProperties = | 985 const ObjectPaintProperties* innerDivWithTransformProperties = |
986 innerDivWithTransform->paintProperties(); | 986 innerDivWithTransform->paintProperties(); |
987 auto* innerDivTransform = innerDivWithTransformProperties->transform(); | 987 auto* innerDivTransform = innerDivWithTransformProperties->transform(); |
988 EXPECT_EQ(TransformationMatrix().translate3d(4, 5, 6), | 988 EXPECT_EQ(TransformationMatrix().translate3d(4, 5, 6), |
989 innerDivTransform->matrix()); | 989 innerDivTransform->matrix()); |
990 CHECK_EXACT_VISUAL_RECT(LayoutRect(12, 14, 100, 145), innerDivWithTransform, | 990 CHECK_EXACT_VISUAL_RECT(LayoutRect(12, 14, 100, 145), innerDivWithTransform, |
991 frameView->layoutView()); | 991 frameView->layoutView()); |
992 | 992 |
993 // Ensure that the inner div's transform is correctly rooted in the root | 993 // Ensure that the inner div's transform is correctly rooted in the root |
994 // frame's transform tree. | 994 // frame's transform tree. |
(...skipping 11 matching lines...) Expand all Loading... |
1006 iframePreTranslation->matrix()); | 1006 iframePreTranslation->matrix()); |
1007 EXPECT_EQ(divWithTransformProperties->transform(), | 1007 EXPECT_EQ(divWithTransformProperties->transform(), |
1008 iframePreTranslation->parent()); | 1008 iframePreTranslation->parent()); |
1009 } | 1009 } |
1010 | 1010 |
1011 TEST_P(PaintPropertyTreeBuilderTest, TransformNodesInTransformedSubframes) { | 1011 TEST_P(PaintPropertyTreeBuilderTest, TransformNodesInTransformedSubframes) { |
1012 setBodyInnerHTML( | 1012 setBodyInnerHTML( |
1013 "<style>body { margin: 0; }</style>" | 1013 "<style>body { margin: 0; }</style>" |
1014 "<div id='divWithTransform' style='transform: translate3d(1px, 2px, " | 1014 "<div id='divWithTransform' style='transform: translate3d(1px, 2px, " |
1015 "3px);'>" | 1015 "3px);'>" |
1016 " <iframe id='frame' style='transform: translate3d(4px, 5px, 6px); " | 1016 " <iframe style='transform: translate3d(4px, 5px, 6px); " |
1017 "border: 42px solid; margin: 7px;'></iframe>" | 1017 "border: 42px solid; margin: 7px;'></iframe>" |
1018 "</div>"); | 1018 "</div>"); |
1019 Document& frameDocument = | 1019 setChildFrameHTML( |
1020 setupChildIframe("frame", | 1020 "<style>body { margin: 31px; }</style><div " |
1021 "<style>body { margin: 31px; }</style><div " | 1021 "id='transform' style='transform: translate3d(7px, 8px, " |
1022 "id='transform' style='transform: translate3d(7px, 8px, " | 1022 "9px); width: 100px; height: 200px'></div>"); |
1023 "9px); width: 100px; height: 200px'></div>"); | |
1024 FrameView* frameView = document().view(); | 1023 FrameView* frameView = document().view(); |
1025 frameView->updateAllLifecyclePhases(); | 1024 frameView->updateAllLifecyclePhases(); |
1026 | 1025 |
1027 // Assert that we have the following tree structure: | 1026 // Assert that we have the following tree structure: |
1028 // ... | 1027 // ... |
1029 // Transform transform=translation=1.000000,2.000000,3.000000 | 1028 // Transform transform=translation=1.000000,2.000000,3.000000 |
1030 // PaintOffsetTranslation transform=translation=7.000000,7.000000,0.000000 | 1029 // PaintOffsetTranslation transform=translation=7.000000,7.000000,0.000000 |
1031 // Transform transform=translation=4.000000,5.000000,6.000000 | 1030 // Transform transform=translation=4.000000,5.000000,6.000000 |
1032 // PreTranslation transform=translation=42.000000,42.000000,0.000000 | 1031 // PreTranslation transform=translation=42.000000,42.000000,0.000000 |
1033 // ScrollTranslation transform=translation=0.000000,0.000000,0.00000 | 1032 // ScrollTranslation transform=translation=0.000000,0.000000,0.00000 |
1034 // PaintOffsetTranslation transform=translation=31.00,31.00,0.00 | 1033 // PaintOffsetTranslation transform=translation=31.00,31.00,0.00 |
1035 // Transform transform=translation=7.000000,8.000000,9.000000 | 1034 // Transform transform=translation=7.000000,8.000000,9.000000 |
1036 | 1035 |
1037 LayoutObject* innerDivWithTransform = | 1036 LayoutObject* innerDivWithTransform = |
1038 frameDocument.getElementById("transform")->layoutObject(); | 1037 childDocument().getElementById("transform")->layoutObject(); |
1039 auto* innerDivTransform = | 1038 auto* innerDivTransform = |
1040 innerDivWithTransform->paintProperties()->transform(); | 1039 innerDivWithTransform->paintProperties()->transform(); |
1041 EXPECT_EQ(TransformationMatrix().translate3d(7, 8, 9), | 1040 EXPECT_EQ(TransformationMatrix().translate3d(7, 8, 9), |
1042 innerDivTransform->matrix()); | 1041 innerDivTransform->matrix()); |
1043 CHECK_EXACT_VISUAL_RECT(LayoutRect(92, 95, 100, 111), innerDivWithTransform, | 1042 CHECK_EXACT_VISUAL_RECT(LayoutRect(92, 95, 100, 111), innerDivWithTransform, |
1044 frameView->layoutView()); | 1043 frameView->layoutView()); |
1045 | 1044 |
1046 auto* innerDocumentPaintOffsetTranslation = innerDivTransform->parent(); | 1045 auto* innerDocumentPaintOffsetTranslation = innerDivTransform->parent(); |
1047 EXPECT_EQ(TransformationMatrix().translate3d(31, 31, 0), | 1046 EXPECT_EQ(TransformationMatrix().translate3d(31, 31, 0), |
1048 innerDocumentPaintOffsetTranslation->matrix()); | 1047 innerDocumentPaintOffsetTranslation->matrix()); |
(...skipping 11 matching lines...) Expand all Loading... |
1060 EXPECT_EQ(TransformationMatrix().translate3d(7, 7, 0), | 1059 EXPECT_EQ(TransformationMatrix().translate3d(7, 7, 0), |
1061 iframePaintOffsetTranslation->matrix()); | 1060 iframePaintOffsetTranslation->matrix()); |
1062 auto* divWithTransformTransform = iframePaintOffsetTranslation->parent(); | 1061 auto* divWithTransformTransform = iframePaintOffsetTranslation->parent(); |
1063 EXPECT_EQ(TransformationMatrix().translate3d(1, 2, 3), | 1062 EXPECT_EQ(TransformationMatrix().translate3d(1, 2, 3), |
1064 divWithTransformTransform->matrix()); | 1063 divWithTransformTransform->matrix()); |
1065 | 1064 |
1066 LayoutObject* divWithTransform = | 1065 LayoutObject* divWithTransform = |
1067 document().getElementById("divWithTransform")->layoutObject(); | 1066 document().getElementById("divWithTransform")->layoutObject(); |
1068 EXPECT_EQ(divWithTransformTransform, | 1067 EXPECT_EQ(divWithTransformTransform, |
1069 divWithTransform->paintProperties()->transform()); | 1068 divWithTransform->paintProperties()->transform()); |
1070 CHECK_EXACT_VISUAL_RECT(LayoutRect(1, 2, 800, 248), divWithTransform, | 1069 CHECK_EXACT_VISUAL_RECT(LayoutRect(1, 2, 800, 248), divWithTransform, |
1071 frameView->layoutView()); | 1070 frameView->layoutView()); |
1072 } | 1071 } |
1073 | 1072 |
1074 TEST_P(PaintPropertyTreeBuilderTest, TreeContextClipByNonStackingContext) { | 1073 TEST_P(PaintPropertyTreeBuilderTest, TreeContextClipByNonStackingContext) { |
1075 // This test verifies the tree builder correctly computes and records the | 1074 // This test verifies the tree builder correctly computes and records the |
1076 // property tree context for a (pseudo) stacking context that is scrolled by a | 1075 // property tree context for a (pseudo) stacking context that is scrolled by a |
1077 // containing block that is not one of the painting ancestors. | 1076 // containing block that is not one of the painting ancestors. |
1078 setBodyInnerHTML( | 1077 setBodyInnerHTML( |
1079 "<style>body { margin: 0; }</style>" | 1078 "<style>body { margin: 0; }</style>" |
1080 "<div id='scroller' style='overflow:scroll; width:400px; height:300px;'>" | 1079 "<div id='scroller' style='overflow:scroll; width:400px; height:300px;'>" |
1081 " <div id='child' style='position:relative; width:100px; height: " | 1080 " <div id='child' style='position:relative; width:100px; height: " |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1128 | 1127 |
1129 EXPECT_EQ( | 1128 EXPECT_EQ( |
1130 frameContentClip(), | 1129 frameContentClip(), |
1131 childProperties->localBorderBoxProperties()->propertyTreeState.clip()); | 1130 childProperties->localBorderBoxProperties()->propertyTreeState.clip()); |
1132 EXPECT_EQ(frameScrollTranslation(), | 1131 EXPECT_EQ(frameScrollTranslation(), |
1133 childProperties->localBorderBoxProperties() | 1132 childProperties->localBorderBoxProperties() |
1134 ->propertyTreeState.transform()); | 1133 ->propertyTreeState.transform()); |
1135 EXPECT_EQ( | 1134 EXPECT_EQ( |
1136 scrollerProperties->effect(), | 1135 scrollerProperties->effect(), |
1137 childProperties->localBorderBoxProperties()->propertyTreeState.effect()); | 1136 childProperties->localBorderBoxProperties()->propertyTreeState.effect()); |
1138 CHECK_EXACT_VISUAL_RECT(LayoutRect(0, 0, 800, 10000), &scroller, | 1137 CHECK_EXACT_VISUAL_RECT(LayoutRect(0, 0, 800, 10000), &scroller, |
1139 document().view()->layoutView()); | 1138 document().view()->layoutView()); |
1140 CHECK_EXACT_VISUAL_RECT(LayoutRect(0, 0, 100, 200), &child, | 1139 CHECK_EXACT_VISUAL_RECT(LayoutRect(0, 0, 100, 200), &child, |
1141 document().view()->layoutView()); | 1140 document().view()->layoutView()); |
1142 } | 1141 } |
1143 | 1142 |
1144 TEST_P(PaintPropertyTreeBuilderTest, TableCellLayoutLocation) { | 1143 TEST_P(PaintPropertyTreeBuilderTest, TableCellLayoutLocation) { |
1145 // This test verifies that the border box space of a table cell is being | 1144 // This test verifies that the border box space of a table cell is being |
1146 // correctly computed. Table cells have weird location adjustment in our | 1145 // correctly computed. Table cells have weird location adjustment in our |
1147 // layout/paint implementation. | 1146 // layout/paint implementation. |
1148 setBodyInnerHTML( | 1147 setBodyInnerHTML( |
1149 "<style>" | 1148 "<style>" |
(...skipping 1770 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2920 EXPECT_EQ(framePreTranslation(), | 2919 EXPECT_EQ(framePreTranslation(), |
2921 childProperties->paintOffsetTranslation()->parent()); | 2920 childProperties->paintOffsetTranslation()->parent()); |
2922 EXPECT_EQ(childProperties->paintOffsetTranslation(), | 2921 EXPECT_EQ(childProperties->paintOffsetTranslation(), |
2923 childPaintState.transform()); | 2922 childPaintState.transform()); |
2924 // This will change once we added clip expansion node. | 2923 // This will change once we added clip expansion node. |
2925 EXPECT_EQ(filterProperties->effect()->outputClip(), childPaintState.clip()); | 2924 EXPECT_EQ(filterProperties->effect()->outputClip(), childPaintState.clip()); |
2926 EXPECT_EQ(filterProperties->effect(), childPaintState.effect()); | 2925 EXPECT_EQ(filterProperties->effect(), childPaintState.effect()); |
2927 } | 2926 } |
2928 | 2927 |
2929 } // namespace blink | 2928 } // namespace blink |
OLD | NEW |