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 940 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
951 23), // (bottom left) = max((78, 78) - (60, 55), (0, 0)) | 951 23), // (bottom left) = max((78, 78) - (60, 55), (0, 0)) |
952 FloatSize(6, | 952 FloatSize(6, |
953 1)), // (bottom right) = max((56, 56) - (50, 55), (0, 0)) | 953 1)), // (bottom right) = max((56, 56) - (50, 55), (0, 0)) |
954 borderRadiusClip->clipRect()); | 954 borderRadiusClip->clipRect()); |
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 setChildFrameHTML( |
| 962 "<style>body { margin: 0; }</style><div id='transform' style='transform: " |
| 963 "translate3d(4px, 5px, 6px); width: 100px; height: 200px'></div>"); |
| 964 |
961 setBodyInnerHTML( | 965 setBodyInnerHTML( |
962 "<style>body { margin: 0; }</style>" | 966 "<style>body { margin: 0; }</style>" |
963 "<div id='divWithTransform' style='transform: translate3d(1px, 2px, " | 967 "<div id='divWithTransform' style='transform: translate3d(1px, 2px, " |
964 "3px);'>" | 968 "3px);'>" |
965 " <iframe style='border: 7px solid black' id='frame'></iframe>" | 969 " <iframe style='border: 7px solid black'></iframe>" |
966 "</div>"); | 970 "</div>"); |
967 Document& frameDocument = setupChildIframe( | |
968 "frame", | |
969 "<style>body { margin: 0; }</style><div id='transform' style='transform: " | |
970 "translate3d(4px, 5px, 6px); width: 100px; height: 200px'></div>"); | |
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. |
995 // This asserts that we have the following tree structure: | 995 // This asserts that we have the following tree structure: |
996 // ... | 996 // ... |
997 // Transform transform=translation=1.000000,2.000000,3.000000 | 997 // Transform transform=translation=1.000000,2.000000,3.000000 |
998 // PreTranslation transform=translation=7.000000,7.000000,0.000000 | 998 // PreTranslation transform=translation=7.000000,7.000000,0.000000 |
999 // ScrollTranslation transform=translation=0.000000,0.000000,0.000000 | 999 // ScrollTranslation transform=translation=0.000000,0.000000,0.000000 |
1000 // Transform transform=translation=4.000000,5.000000,6.000000 | 1000 // Transform transform=translation=4.000000,5.000000,6.000000 |
1001 auto* innerDocumentScrollTranslation = innerDivTransform->parent(); | 1001 auto* innerDocumentScrollTranslation = innerDivTransform->parent(); |
1002 EXPECT_EQ(TransformationMatrix().translate3d(0, 0, 0), | 1002 EXPECT_EQ(TransformationMatrix().translate3d(0, 0, 0), |
1003 innerDocumentScrollTranslation->matrix()); | 1003 innerDocumentScrollTranslation->matrix()); |
1004 auto* iframePreTranslation = innerDocumentScrollTranslation->parent(); | 1004 auto* iframePreTranslation = innerDocumentScrollTranslation->parent(); |
1005 EXPECT_EQ(TransformationMatrix().translate3d(7, 7, 0), | 1005 EXPECT_EQ(TransformationMatrix().translate3d(7, 7, 0), |
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 setChildFrameHTML( |
| 1013 "<style>body { margin: 31px; }</style><div " |
| 1014 "id='transform' style='transform: translate3d(7px, 8px, " |
| 1015 "9px); width: 100px; height: 200px'></div>"); |
1012 setBodyInnerHTML( | 1016 setBodyInnerHTML( |
1013 "<style>body { margin: 0; }</style>" | 1017 "<style>body { margin: 0; }</style>" |
1014 "<div id='divWithTransform' style='transform: translate3d(1px, 2px, " | 1018 "<div id='divWithTransform' style='transform: translate3d(1px, 2px, " |
1015 "3px);'>" | 1019 "3px);'>" |
1016 " <iframe id='frame' style='transform: translate3d(4px, 5px, 6px); " | 1020 " <iframe style='transform: translate3d(4px, 5px, 6px); " |
1017 "border: 42px solid; margin: 7px;'></iframe>" | 1021 "border: 42px solid; margin: 7px;'></iframe>" |
1018 "</div>"); | 1022 "</div>"); |
1019 Document& frameDocument = | |
1020 setupChildIframe("frame", | |
1021 "<style>body { margin: 31px; }</style><div " | |
1022 "id='transform' style='transform: translate3d(7px, 8px, " | |
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 1867 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2916 EXPECT_EQ(framePreTranslation(), | 2915 EXPECT_EQ(framePreTranslation(), |
2917 childProperties->paintOffsetTranslation()->parent()); | 2916 childProperties->paintOffsetTranslation()->parent()); |
2918 EXPECT_EQ(childProperties->paintOffsetTranslation(), | 2917 EXPECT_EQ(childProperties->paintOffsetTranslation(), |
2919 childPaintState.transform()); | 2918 childPaintState.transform()); |
2920 // This will change once we added clip expansion node. | 2919 // This will change once we added clip expansion node. |
2921 EXPECT_EQ(filterProperties->effect()->outputClip(), childPaintState.clip()); | 2920 EXPECT_EQ(filterProperties->effect()->outputClip(), childPaintState.clip()); |
2922 EXPECT_EQ(filterProperties->effect(), childPaintState.effect()); | 2921 EXPECT_EQ(filterProperties->effect(), childPaintState.effect()); |
2923 } | 2922 } |
2924 | 2923 |
2925 } // namespace blink | 2924 } // namespace blink |
OLD | NEW |