Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Side by Side Diff: third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilderTest.cpp

Issue 2570423003: Remove paintOffsetTranslation for fixed-position elements. (Closed)
Patch Set: none Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "core/html/HTMLIFrameElement.h" 5 #include "core/html/HTMLIFrameElement.h"
6 #include "core/layout/LayoutTestHelper.h" 6 #include "core/layout/LayoutTestHelper.h"
7 #include "core/layout/LayoutTreeAsText.h" 7 #include "core/layout/LayoutTreeAsText.h"
8 #include "core/layout/api/LayoutViewItem.h" 8 #include "core/layout/api/LayoutViewItem.h"
9 #include "core/paint/ObjectPaintProperties.h" 9 #include "core/paint/ObjectPaintProperties.h"
10 #include "core/paint/PaintPropertyTreePrinter.h" 10 #include "core/paint/PaintPropertyTreePrinter.h"
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
152 152
153 FrameView* frameView = document().view(); 153 FrameView* frameView = document().view();
154 frameView->updateAllLifecyclePhases(); 154 frameView->updateAllLifecyclePhases();
155 155
156 // target1 is a fixed-position element inside an absolute-position scrolling 156 // target1 is a fixed-position element inside an absolute-position scrolling
157 // element. It should be attached under the viewport to skip scrolling and 157 // element. It should be attached under the viewport to skip scrolling and
158 // offset of the parent. 158 // offset of the parent.
159 Element* target1 = document().getElementById("target1"); 159 Element* target1 = document().getElementById("target1");
160 const ObjectPaintProperties* target1Properties = 160 const ObjectPaintProperties* target1Properties =
161 target1->layoutObject()->paintProperties(); 161 target1->layoutObject()->paintProperties();
162 EXPECT_EQ(TransformationMatrix().translate(200, 150), 162 EXPECT_EQ(FloatRoundedRect(200, 150, 100, 100),
163 target1Properties->paintOffsetTranslation()->matrix());
164 EXPECT_EQ(framePreTranslation(),
165 target1Properties->paintOffsetTranslation()->parent());
166 EXPECT_EQ(target1Properties->paintOffsetTranslation(),
167 target1Properties->overflowClip()->localTransformSpace());
168 EXPECT_EQ(FloatRoundedRect(0, 0, 100, 100),
169 target1Properties->overflowClip()->clipRect()); 163 target1Properties->overflowClip()->clipRect());
170 // Likewise, it inherits clip from the viewport, skipping overflow clip of the 164 // Likewise, it inherits clip from the viewport, skipping overflow clip of the
171 // scroller. 165 // scroller.
172 EXPECT_EQ(frameContentClip(), target1Properties->overflowClip()->parent()); 166 EXPECT_EQ(frameContentClip(), target1Properties->overflowClip()->parent());
173 // target1 should not have it's own scroll node and instead should inherit 167 // target1 should not have its own scroll node and instead should inherit
174 // positionedScroll's. 168 // positionedScroll's.
175 const ObjectPaintProperties* positionedScrollProperties = 169 const ObjectPaintProperties* positionedScrollProperties =
176 positionedScroll->layoutObject()->paintProperties(); 170 positionedScroll->layoutObject()->paintProperties();
177 EXPECT_TRUE(positionedScrollProperties->scroll()->parent()->isRoot()); 171 EXPECT_TRUE(positionedScrollProperties->scroll()->parent()->isRoot());
178 EXPECT_EQ(TransformationMatrix().translate(0, -3), 172 EXPECT_EQ(TransformationMatrix().translate(0, -3),
179 positionedScrollProperties->scroll() 173 positionedScrollProperties->scroll()
180 ->scrollOffsetTranslation() 174 ->scrollOffsetTranslation()
181 ->matrix()); 175 ->matrix());
182 EXPECT_EQ(nullptr, target1Properties->scroll()); 176 EXPECT_EQ(nullptr, target1Properties->scroll());
183
184 CHECK_EXACT_VISUAL_RECT(LayoutRect(200, 150, 100, 100), 177 CHECK_EXACT_VISUAL_RECT(LayoutRect(200, 150, 100, 100),
185 target1->layoutObject(), frameView->layoutView()); 178 target1->layoutObject(), frameView->layoutView());
186 179
187 // target2 is a fixed-position element inside a transformed scrolling element. 180 // target2 is a fixed-position element inside a transformed scrolling element.
188 // It should be attached under the scrolled box of the transformed element. 181 // It should be attached under the scrolled box of the transformed element.
189 Element* target2 = document().getElementById("target2"); 182 Element* target2 = document().getElementById("target2");
190 const ObjectPaintProperties* target2Properties = 183 const ObjectPaintProperties* target2Properties =
191 target2->layoutObject()->paintProperties(); 184 target2->layoutObject()->paintProperties();
192 Element* scroller = document().getElementById("transformedScroll"); 185 Element* scroller = document().getElementById("transformedScroll");
193 const ObjectPaintProperties* scrollerProperties = 186 const ObjectPaintProperties* scrollerProperties =
194 scroller->layoutObject()->paintProperties(); 187 scroller->layoutObject()->paintProperties();
195 EXPECT_EQ(TransformationMatrix().translate(200, 150), 188 EXPECT_EQ(FloatRoundedRect(200, 150, 100, 100),
196 target2Properties->paintOffsetTranslation()->matrix());
197 EXPECT_EQ(scrollerProperties->scrollTranslation(),
198 target2Properties->paintOffsetTranslation()->parent());
199 EXPECT_EQ(target2Properties->paintOffsetTranslation(),
200 target2Properties->overflowClip()->localTransformSpace());
201 EXPECT_EQ(FloatRoundedRect(0, 0, 100, 100),
202 target2Properties->overflowClip()->clipRect()); 189 target2Properties->overflowClip()->clipRect());
203 EXPECT_EQ(scrollerProperties->overflowClip(), 190 EXPECT_EQ(scrollerProperties->overflowClip(),
204 target2Properties->overflowClip()->parent()); 191 target2Properties->overflowClip()->parent());
205 // target2 should not have it's own scroll node and instead should inherit 192 // target2 should not have it's own scroll node and instead should inherit
206 // transformedScroll's. 193 // transformedScroll's.
207 const ObjectPaintProperties* transformedScrollProperties = 194 const ObjectPaintProperties* transformedScrollProperties =
208 transformedScroll->layoutObject()->paintProperties(); 195 transformedScroll->layoutObject()->paintProperties();
209 EXPECT_TRUE(transformedScrollProperties->scroll()->parent()->isRoot()); 196 EXPECT_TRUE(transformedScrollProperties->scroll()->parent()->isRoot());
210 EXPECT_EQ(TransformationMatrix().translate(0, -5), 197 EXPECT_EQ(TransformationMatrix().translate(0, -5),
211 transformedScrollProperties->scroll() 198 transformedScrollProperties->scroll()
(...skipping 726 matching lines...) Expand 10 before | Expand all | Expand 10 after
938 const ObjectPaintProperties* containerProperties = 925 const ObjectPaintProperties* containerProperties =
939 container.paintProperties(); 926 container.paintProperties();
940 EXPECT_EQ(TransformationMatrix().translate(20, 30), 927 EXPECT_EQ(TransformationMatrix().translate(20, 30),
941 containerProperties->transform()->matrix()); 928 containerProperties->transform()->matrix());
942 EXPECT_EQ(svgProperties->transform(), 929 EXPECT_EQ(svgProperties->transform(),
943 containerProperties->transform()->parent()); 930 containerProperties->transform()->parent());
944 931
945 Element* fixed = document().getElementById("fixed"); 932 Element* fixed = document().getElementById("fixed");
946 const ObjectPaintProperties* fixedProperties = 933 const ObjectPaintProperties* fixedProperties =
947 fixed->layoutObject()->paintProperties(); 934 fixed->layoutObject()->paintProperties();
948 EXPECT_EQ(TransformationMatrix().translate(200, 150),
949 fixedProperties->paintOffsetTranslation()->matrix());
950 // Ensure the fixed position element is rooted at the nearest transform 935 // Ensure the fixed position element is rooted at the nearest transform
951 // container. 936 // container.
952 EXPECT_EQ(containerProperties->transform(), 937 EXPECT_EQ(containerProperties->transform(),
953 fixedProperties->paintOffsetTranslation()->parent()); 938 fixedProperties->localBorderBoxProperties()
939 ->propertyTreeState.transform());
954 } 940 }
955 941
956 TEST_P(PaintPropertyTreeBuilderTest, ControlClip) { 942 TEST_P(PaintPropertyTreeBuilderTest, ControlClip) {
957 setBodyInnerHTML( 943 setBodyInnerHTML(
958 "<style>" 944 "<style>"
959 " body {" 945 " body {"
960 " margin: 0;" 946 " margin: 0;"
961 " }" 947 " }"
962 " input {" 948 " input {"
963 " border-width: 5px;" 949 " border-width: 5px;"
(...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after
1303 // TODO(crbug.com/599939): mapToVisualRectInAncestorSpace() 1289 // TODO(crbug.com/599939): mapToVisualRectInAncestorSpace()
1304 // doesn't apply css clip on the object itself. 1290 // doesn't apply css clip on the object itself.
1305 LayoutUnit::max()); 1291 LayoutUnit::max());
1306 1292
1307 LayoutObject* fixed = document().getElementById("fixed")->layoutObject(); 1293 LayoutObject* fixed = document().getElementById("fixed")->layoutObject();
1308 const ObjectPaintProperties* fixedProperties = fixed->paintProperties(); 1294 const ObjectPaintProperties* fixedProperties = fixed->paintProperties();
1309 EXPECT_EQ( 1295 EXPECT_EQ(
1310 clipProperties->cssClip(), 1296 clipProperties->cssClip(),
1311 fixedProperties->localBorderBoxProperties()->propertyTreeState.clip()); 1297 fixedProperties->localBorderBoxProperties()->propertyTreeState.clip());
1312 EXPECT_EQ(framePreTranslation(), fixedProperties->localBorderBoxProperties() 1298 EXPECT_EQ(framePreTranslation(), fixedProperties->localBorderBoxProperties()
1313 ->propertyTreeState.transform() 1299 ->propertyTreeState.transform());
1314 ->parent()); 1300 EXPECT_EQ(LayoutPoint(654, 321),
1315 EXPECT_EQ(TransformationMatrix().translate(654, 321),
1316 fixedProperties->localBorderBoxProperties()
1317 ->propertyTreeState.transform()
1318 ->matrix());
1319 EXPECT_EQ(LayoutPoint(),
1320 fixedProperties->localBorderBoxProperties()->paintOffset); 1301 fixedProperties->localBorderBoxProperties()->paintOffset);
1321 CHECK_VISUAL_RECT(LayoutRect(), fixed, document().view()->layoutView(), 1302 CHECK_VISUAL_RECT(LayoutRect(), fixed, document().view()->layoutView(),
1322 // TODO(crbug.com/599939): CSS clip of fixed-position 1303 // TODO(crbug.com/599939): CSS clip of fixed-position
1323 // descendants is broken in 1304 // descendants is broken in
1324 // mapToVisualRectInAncestorSpace(). 1305 // mapToVisualRectInAncestorSpace().
1325 LayoutUnit::max()); 1306 LayoutUnit::max());
1326 } 1307 }
1327 1308
1328 TEST_P(PaintPropertyTreeBuilderTest, CSSClipAbsPositionDescendant) { 1309 TEST_P(PaintPropertyTreeBuilderTest, CSSClipAbsPositionDescendant) {
1329 // This test verifies that clip tree hierarchy being generated correctly for 1310 // This test verifies that clip tree hierarchy being generated correctly for
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
1446 EXPECT_EQ(FloatRoundedRect(FloatRect(absoluteClipRect)), 1427 EXPECT_EQ(FloatRoundedRect(FloatRect(absoluteClipRect)),
1447 clipProperties->cssClipFixedPosition()->clipRect()); 1428 clipProperties->cssClipFixedPosition()->clipRect());
1448 CHECK_EXACT_VISUAL_RECT(LayoutRect(), clip, document().view()->layoutView()); 1429 CHECK_EXACT_VISUAL_RECT(LayoutRect(), clip, document().view()->layoutView());
1449 1430
1450 LayoutObject* fixed = document().getElementById("fixed")->layoutObject(); 1431 LayoutObject* fixed = document().getElementById("fixed")->layoutObject();
1451 const ObjectPaintProperties* fixedProperties = fixed->paintProperties(); 1432 const ObjectPaintProperties* fixedProperties = fixed->paintProperties();
1452 EXPECT_EQ( 1433 EXPECT_EQ(
1453 clipProperties->cssClipFixedPosition(), 1434 clipProperties->cssClipFixedPosition(),
1454 fixedProperties->localBorderBoxProperties()->propertyTreeState.clip()); 1435 fixedProperties->localBorderBoxProperties()->propertyTreeState.clip());
1455 EXPECT_EQ(framePreTranslation(), fixedProperties->localBorderBoxProperties() 1436 EXPECT_EQ(framePreTranslation(), fixedProperties->localBorderBoxProperties()
1456 ->propertyTreeState.transform() 1437 ->propertyTreeState.transform());
1457 ->parent()); 1438 EXPECT_EQ(LayoutPoint(654, 321),
1458 EXPECT_EQ(TransformationMatrix().translate(654, 321),
1459 fixedProperties->localBorderBoxProperties()
1460 ->propertyTreeState.transform()
1461 ->matrix());
1462 EXPECT_EQ(LayoutPoint(),
1463 fixedProperties->localBorderBoxProperties()->paintOffset); 1439 fixedProperties->localBorderBoxProperties()->paintOffset);
1464 CHECK_VISUAL_RECT(LayoutRect(), fixed, document().view()->layoutView(), 1440 CHECK_VISUAL_RECT(LayoutRect(), fixed, document().view()->layoutView(),
1465 // TODO(crbug.com/599939): CSS clip of fixed-position 1441 // TODO(crbug.com/599939): CSS clip of fixed-position
1466 // descendants is broken in geometry mapping. 1442 // descendants is broken in geometry mapping.
1467 LayoutUnit::max()); 1443 LayoutUnit::max());
1468 } 1444 }
1469 1445
1470 TEST_P(PaintPropertyTreeBuilderTest, ColumnSpannerUnderRelativePositioned) { 1446 TEST_P(PaintPropertyTreeBuilderTest, ColumnSpannerUnderRelativePositioned) {
1471 setBodyInnerHTML( 1447 setBodyInnerHTML(
1472 "<div style='columns: 3; position: absolute; top: 44px; left: 55px;'>" 1448 "<div style='columns: 3; position: absolute; top: 44px; left: 55px;'>"
(...skipping 1513 matching lines...) Expand 10 before | Expand all | Expand 10 after
2986 EXPECT_TRUE(filterProperties->effect()->parent()->isRoot()); 2962 EXPECT_TRUE(filterProperties->effect()->parent()->isRoot());
2987 EXPECT_EQ(frameScrollTranslation(), 2963 EXPECT_EQ(frameScrollTranslation(),
2988 filterProperties->effect()->localTransformSpace()); 2964 filterProperties->effect()->localTransformSpace());
2989 EXPECT_EQ(clipProperties->overflowClip(), 2965 EXPECT_EQ(clipProperties->overflowClip(),
2990 filterProperties->effect()->outputClip()); 2966 filterProperties->effect()->outputClip());
2991 2967
2992 const ObjectPaintProperties* childProperties = 2968 const ObjectPaintProperties* childProperties =
2993 getLayoutObjectByElementId("child")->paintProperties(); 2969 getLayoutObjectByElementId("child")->paintProperties();
2994 const PropertyTreeState& childPaintState = 2970 const PropertyTreeState& childPaintState =
2995 childProperties->localBorderBoxProperties()->propertyTreeState; 2971 childProperties->localBorderBoxProperties()->propertyTreeState;
2996 EXPECT_EQ(framePreTranslation(), 2972
2997 childProperties->paintOffsetTranslation()->parent());
2998 EXPECT_EQ(childProperties->paintOffsetTranslation(),
2999 childPaintState.transform());
3000 // This will change once we added clip expansion node. 2973 // This will change once we added clip expansion node.
3001 EXPECT_EQ(filterProperties->effect()->outputClip(), childPaintState.clip()); 2974 EXPECT_EQ(filterProperties->effect()->outputClip(), childPaintState.clip());
3002 EXPECT_EQ(filterProperties->effect(), childPaintState.effect()); 2975 EXPECT_EQ(filterProperties->effect(), childPaintState.effect());
3003 } 2976 }
3004 2977
3005 TEST_P(PaintPropertyTreeBuilderTest, DescendantNeedsUpdateAcrossFrames) { 2978 TEST_P(PaintPropertyTreeBuilderTest, DescendantNeedsUpdateAcrossFrames) {
3006 setBodyInnerHTML( 2979 setBodyInnerHTML(
3007 "<style>body { margin: 0; }</style>" 2980 "<style>body { margin: 0; }</style>"
3008 "<div id='divWithTransform' style='transform: translate3d(1px,2px,3px);'>" 2981 "<div id='divWithTransform' style='transform: translate3d(1px,2px,3px);'>"
3009 " <iframe style='border: 7px solid black'></iframe>" 2982 " <iframe style='border: 7px solid black'></iframe>"
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after
3225 setBodyInnerHTML("<div id='div' style='background-color: blue'>DIV</div>"); 3198 setBodyInnerHTML("<div id='div' style='background-color: blue'>DIV</div>");
3226 auto* div = document().getElementById("div"); 3199 auto* div = document().getElementById("div");
3227 3200
3228 document().view()->updateAllLifecyclePhases(); 3201 document().view()->updateAllLifecyclePhases();
3229 div->setAttribute(HTMLNames::styleAttr, "background-color: green"); 3202 div->setAttribute(HTMLNames::styleAttr, "background-color: green");
3230 document().view()->updateLifecycleToLayoutClean(); 3203 document().view()->updateLifecycleToLayoutClean();
3231 EXPECT_FALSE(div->layoutObject()->needsPaintPropertyUpdate()); 3204 EXPECT_FALSE(div->layoutObject()->needsPaintPropertyUpdate());
3232 } 3205 }
3233 3206
3234 } // namespace blink 3207 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698