| 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 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 45 | 45 |
| 46 const ScrollPaintPropertyNode* PaintPropertyTreeBuilderTest::frameScroll( | 46 const ScrollPaintPropertyNode* PaintPropertyTreeBuilderTest::frameScroll( |
| 47 FrameView* frameView) { | 47 FrameView* frameView) { |
| 48 if (!frameView) | 48 if (!frameView) |
| 49 frameView = document().view(); | 49 frameView = document().view(); |
| 50 if (RuntimeEnabledFeatures::rootLayerScrollingEnabled()) | 50 if (RuntimeEnabledFeatures::rootLayerScrollingEnabled()) |
| 51 return frameView->layoutView()->paintProperties()->scroll(); | 51 return frameView->layoutView()->paintProperties()->scroll(); |
| 52 return frameView->scroll(); | 52 return frameView->scroll(); |
| 53 } | 53 } |
| 54 | 54 |
| 55 LayoutPoint PaintPropertyTreeBuilderTest::paintOffset( | |
| 56 const LayoutObject* object) { | |
| 57 return object->paintProperties()->localBorderBoxProperties()->paintOffset; | |
| 58 } | |
| 59 | |
| 60 const ObjectPaintProperties* | 55 const ObjectPaintProperties* |
| 61 PaintPropertyTreeBuilderTest::paintPropertiesForElement(const char* name) { | 56 PaintPropertyTreeBuilderTest::paintPropertiesForElement(const char* name) { |
| 62 return document().getElementById(name)->layoutObject()->paintProperties(); | 57 return document().getElementById(name)->layoutObject()->paintProperties(); |
| 63 } | 58 } |
| 64 | 59 |
| 65 void PaintPropertyTreeBuilderTest::SetUp() { | 60 void PaintPropertyTreeBuilderTest::SetUp() { |
| 66 Settings::setMockScrollbarsEnabled(true); | 61 Settings::setMockScrollbarsEnabled(true); |
| 67 | 62 |
| 68 RenderingTest::SetUp(); | 63 RenderingTest::SetUp(); |
| 69 enableCompositing(); | 64 enableCompositing(); |
| 70 } | 65 } |
| 71 | 66 |
| 72 void PaintPropertyTreeBuilderTest::TearDown() { | 67 void PaintPropertyTreeBuilderTest::TearDown() { |
| 73 RenderingTest::TearDown(); | 68 RenderingTest::TearDown(); |
| 74 | 69 |
| 75 Settings::setMockScrollbarsEnabled(false); | 70 Settings::setMockScrollbarsEnabled(false); |
| 76 } | 71 } |
| 77 | 72 |
| 78 #define CHECK_VISUAL_RECT(expected, sourceLayoutObject, ancestorLayoutObject, \ | 73 #define CHECK_VISUAL_RECT(expected, sourceLayoutObject, ancestorLayoutObject, \ |
| 79 slopFactor) \ | 74 slopFactor) \ |
| 80 do { \ | 75 do { \ |
| 81 GeometryMapper geometryMapper; \ | 76 GeometryMapper geometryMapper; \ |
| 82 LayoutRect source((sourceLayoutObject)->localVisualRect()); \ | 77 LayoutRect source((sourceLayoutObject)->localVisualRect()); \ |
| 83 source.moveBy((sourceLayoutObject) \ | 78 source.moveBy((sourceLayoutObject)->paintOffset()); \ |
| 84 ->paintProperties() \ | |
| 85 ->localBorderBoxProperties() \ | |
| 86 ->paintOffset); \ | |
| 87 bool success = false; \ | 79 bool success = false; \ |
| 88 auto contentsProperties = \ | 80 auto contentsProperties = \ |
| 89 (ancestorLayoutObject)->paintProperties()->contentsProperties(); \ | 81 (ancestorLayoutObject)->paintProperties()->contentsProperties(); \ |
| 90 LayoutRect actual = \ | 82 LayoutRect actual = \ |
| 91 LayoutRect(geometryMapper.mapToVisualRectInDestinationSpace( \ | 83 LayoutRect(geometryMapper.mapToVisualRectInDestinationSpace( \ |
| 92 FloatRect(source), (sourceLayoutObject) \ | 84 FloatRect(source), *(sourceLayoutObject) \ |
| 93 ->paintProperties() \ | 85 ->paintProperties() \ |
| 94 ->localBorderBoxProperties() \ | 86 ->localBorderBoxProperties(), \ |
| 95 ->propertyTreeState, \ | 87 contentsProperties, success)); \ |
| 96 contentsProperties.propertyTreeState, success)); \ | |
| 97 ASSERT_TRUE(success); \ | 88 ASSERT_TRUE(success); \ |
| 98 actual.moveBy(-contentsProperties.paintOffset); \ | 89 actual.moveBy(-(ancestorLayoutObject)->paintOffset()); \ |
| 99 EXPECT_EQ(expected, actual) \ | 90 EXPECT_EQ(expected, actual) \ |
| 100 << "GeometryMapper: expected: " << expected.toString() \ | 91 << "GeometryMapper: expected: " << expected.toString() \ |
| 101 << ", actual: " << actual.toString(); \ | 92 << ", actual: " << actual.toString(); \ |
| 102 \ | 93 \ |
| 103 if (slopFactor == LayoutUnit::max()) \ | 94 if (slopFactor == LayoutUnit::max()) \ |
| 104 break; \ | 95 break; \ |
| 105 LayoutRect slowPathRect = (sourceLayoutObject)->localVisualRect(); \ | 96 LayoutRect slowPathRect = (sourceLayoutObject)->localVisualRect(); \ |
| 106 (sourceLayoutObject) \ | 97 (sourceLayoutObject) \ |
| 107 ->mapToVisualRectInAncestorSpace(ancestorLayoutObject, slowPathRect); \ | 98 ->mapToVisualRectInAncestorSpace(ancestorLayoutObject, slowPathRect); \ |
| 108 if (slopFactor) { \ | 99 if (slopFactor) { \ |
| (...skipping 930 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1039 containerProperties->transform()->matrix()); | 1030 containerProperties->transform()->matrix()); |
| 1040 EXPECT_EQ(svgProperties->transform(), | 1031 EXPECT_EQ(svgProperties->transform(), |
| 1041 containerProperties->transform()->parent()); | 1032 containerProperties->transform()->parent()); |
| 1042 | 1033 |
| 1043 Element* fixed = document().getElementById("fixed"); | 1034 Element* fixed = document().getElementById("fixed"); |
| 1044 const ObjectPaintProperties* fixedProperties = | 1035 const ObjectPaintProperties* fixedProperties = |
| 1045 fixed->layoutObject()->paintProperties(); | 1036 fixed->layoutObject()->paintProperties(); |
| 1046 // Ensure the fixed position element is rooted at the nearest transform | 1037 // Ensure the fixed position element is rooted at the nearest transform |
| 1047 // container. | 1038 // container. |
| 1048 EXPECT_EQ(containerProperties->transform(), | 1039 EXPECT_EQ(containerProperties->transform(), |
| 1049 fixedProperties->localBorderBoxProperties() | 1040 fixedProperties->localBorderBoxProperties()->transform()); |
| 1050 ->propertyTreeState.transform()); | |
| 1051 } | 1041 } |
| 1052 | 1042 |
| 1053 TEST_P(PaintPropertyTreeBuilderTest, ControlClip) { | 1043 TEST_P(PaintPropertyTreeBuilderTest, ControlClip) { |
| 1054 setBodyInnerHTML( | 1044 setBodyInnerHTML( |
| 1055 "<style>" | 1045 "<style>" |
| 1056 " body {" | 1046 " body {" |
| 1057 " margin: 0;" | 1047 " margin: 0;" |
| 1058 " }" | 1048 " }" |
| 1059 " input {" | 1049 " input {" |
| 1060 " border-width: 5px;" | 1050 " border-width: 5px;" |
| (...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1284 " <div style='height:10000px;'></div>" | 1274 " <div style='height:10000px;'></div>" |
| 1285 "</div>"); | 1275 "</div>"); |
| 1286 FrameView* frameView = document().view(); | 1276 FrameView* frameView = document().view(); |
| 1287 | 1277 |
| 1288 LayoutObject* scroller = | 1278 LayoutObject* scroller = |
| 1289 document().getElementById("scroller")->layoutObject(); | 1279 document().getElementById("scroller")->layoutObject(); |
| 1290 const ObjectPaintProperties* scrollerProperties = scroller->paintProperties(); | 1280 const ObjectPaintProperties* scrollerProperties = scroller->paintProperties(); |
| 1291 LayoutObject* child = document().getElementById("child")->layoutObject(); | 1281 LayoutObject* child = document().getElementById("child")->layoutObject(); |
| 1292 const ObjectPaintProperties* childProperties = child->paintProperties(); | 1282 const ObjectPaintProperties* childProperties = child->paintProperties(); |
| 1293 | 1283 |
| 1294 EXPECT_EQ( | 1284 EXPECT_EQ(scrollerProperties->overflowClip(), |
| 1295 scrollerProperties->overflowClip(), | 1285 childProperties->localBorderBoxProperties()->clip()); |
| 1296 childProperties->localBorderBoxProperties()->propertyTreeState.clip()); | |
| 1297 EXPECT_EQ(scrollerProperties->scrollTranslation(), | 1286 EXPECT_EQ(scrollerProperties->scrollTranslation(), |
| 1298 childProperties->localBorderBoxProperties() | 1287 childProperties->localBorderBoxProperties()->transform()); |
| 1299 ->propertyTreeState.transform()); | 1288 EXPECT_NE(nullptr, childProperties->localBorderBoxProperties()->effect()); |
| 1300 EXPECT_NE( | |
| 1301 nullptr, | |
| 1302 childProperties->localBorderBoxProperties()->propertyTreeState.effect()); | |
| 1303 CHECK_EXACT_VISUAL_RECT(LayoutRect(0, 0, 400, 300), scroller, | 1289 CHECK_EXACT_VISUAL_RECT(LayoutRect(0, 0, 400, 300), scroller, |
| 1304 frameView->layoutView()); | 1290 frameView->layoutView()); |
| 1305 CHECK_EXACT_VISUAL_RECT(LayoutRect(0, 0, 100, 200), child, | 1291 CHECK_EXACT_VISUAL_RECT(LayoutRect(0, 0, 100, 200), child, |
| 1306 frameView->layoutView()); | 1292 frameView->layoutView()); |
| 1307 } | 1293 } |
| 1308 | 1294 |
| 1309 TEST_P(PaintPropertyTreeBuilderTest, | 1295 TEST_P(PaintPropertyTreeBuilderTest, |
| 1310 TreeContextUnclipFromParentStackingContext) { | 1296 TreeContextUnclipFromParentStackingContext) { |
| 1311 // This test verifies the tree builder correctly computes and records the | 1297 // This test verifies the tree builder correctly computes and records the |
| 1312 // property tree context for a (pseudo) stacking context that has a scrolling | 1298 // property tree context for a (pseudo) stacking context that has a scrolling |
| (...skipping 18 matching lines...) Expand all Loading... |
| 1331 "<div id='scroller'>" | 1317 "<div id='scroller'>" |
| 1332 " <div id='child'></div>" | 1318 " <div id='child'></div>" |
| 1333 " <div id='forceScroll' style='height:10000px;'></div>" | 1319 " <div id='forceScroll' style='height:10000px;'></div>" |
| 1334 "</div>"); | 1320 "</div>"); |
| 1335 | 1321 |
| 1336 auto& scroller = *document().getElementById("scroller")->layoutObject(); | 1322 auto& scroller = *document().getElementById("scroller")->layoutObject(); |
| 1337 const ObjectPaintProperties* scrollerProperties = scroller.paintProperties(); | 1323 const ObjectPaintProperties* scrollerProperties = scroller.paintProperties(); |
| 1338 LayoutObject& child = *document().getElementById("child")->layoutObject(); | 1324 LayoutObject& child = *document().getElementById("child")->layoutObject(); |
| 1339 const ObjectPaintProperties* childProperties = child.paintProperties(); | 1325 const ObjectPaintProperties* childProperties = child.paintProperties(); |
| 1340 | 1326 |
| 1341 EXPECT_EQ( | 1327 EXPECT_EQ(frameContentClip(), |
| 1342 frameContentClip(), | 1328 childProperties->localBorderBoxProperties()->clip()); |
| 1343 childProperties->localBorderBoxProperties()->propertyTreeState.clip()); | |
| 1344 EXPECT_EQ(frameScrollTranslation(), | 1329 EXPECT_EQ(frameScrollTranslation(), |
| 1345 childProperties->localBorderBoxProperties() | 1330 childProperties->localBorderBoxProperties()->transform()); |
| 1346 ->propertyTreeState.transform()); | 1331 EXPECT_EQ(scrollerProperties->effect(), |
| 1347 EXPECT_EQ( | 1332 childProperties->localBorderBoxProperties()->effect()); |
| 1348 scrollerProperties->effect(), | |
| 1349 childProperties->localBorderBoxProperties()->propertyTreeState.effect()); | |
| 1350 CHECK_EXACT_VISUAL_RECT(LayoutRect(0, 0, 800, 10000), &scroller, | 1333 CHECK_EXACT_VISUAL_RECT(LayoutRect(0, 0, 800, 10000), &scroller, |
| 1351 document().view()->layoutView()); | 1334 document().view()->layoutView()); |
| 1352 CHECK_EXACT_VISUAL_RECT(LayoutRect(0, 0, 100, 200), &child, | 1335 CHECK_EXACT_VISUAL_RECT(LayoutRect(0, 0, 100, 200), &child, |
| 1353 document().view()->layoutView()); | 1336 document().view()->layoutView()); |
| 1354 } | 1337 } |
| 1355 | 1338 |
| 1356 TEST_P(PaintPropertyTreeBuilderTest, TableCellLayoutLocation) { | 1339 TEST_P(PaintPropertyTreeBuilderTest, TableCellLayoutLocation) { |
| 1357 // This test verifies that the border box space of a table cell is being | 1340 // This test verifies that the border box space of a table cell is being |
| 1358 // correctly computed. Table cells have weird location adjustment in our | 1341 // correctly computed. Table cells have weird location adjustment in our |
| 1359 // layout/paint implementation. | 1342 // layout/paint implementation. |
| (...skipping 20 matching lines...) Expand all Loading... |
| 1380 " }" | 1363 " }" |
| 1381 "</style>" | 1364 "</style>" |
| 1382 "<table>" | 1365 "<table>" |
| 1383 " <tr><td></td><td></td></tr>" | 1366 " <tr><td></td><td></td></tr>" |
| 1384 " <tr><td></td><td><div id='target'></div></td></tr>" | 1367 " <tr><td></td><td><div id='target'></div></td></tr>" |
| 1385 "</table>"); | 1368 "</table>"); |
| 1386 | 1369 |
| 1387 LayoutObject& target = *document().getElementById("target")->layoutObject(); | 1370 LayoutObject& target = *document().getElementById("target")->layoutObject(); |
| 1388 const ObjectPaintProperties* targetProperties = target.paintProperties(); | 1371 const ObjectPaintProperties* targetProperties = target.paintProperties(); |
| 1389 | 1372 |
| 1390 EXPECT_EQ(LayoutPoint(170, 170), | 1373 EXPECT_EQ(LayoutPoint(170, 170), target.paintOffset()); |
| 1391 targetProperties->localBorderBoxProperties()->paintOffset); | 1374 EXPECT_EQ(framePreTranslation(), |
| 1392 EXPECT_EQ(framePreTranslation(), targetProperties->localBorderBoxProperties() | 1375 targetProperties->localBorderBoxProperties()->transform()); |
| 1393 ->propertyTreeState.transform()); | |
| 1394 CHECK_EXACT_VISUAL_RECT(LayoutRect(170, 170, 100, 100), &target, | 1376 CHECK_EXACT_VISUAL_RECT(LayoutRect(170, 170, 100, 100), &target, |
| 1395 document().view()->layoutView()); | 1377 document().view()->layoutView()); |
| 1396 } | 1378 } |
| 1397 | 1379 |
| 1398 TEST_P(PaintPropertyTreeBuilderTest, CSSClipFixedPositionDescendant) { | 1380 TEST_P(PaintPropertyTreeBuilderTest, CSSClipFixedPositionDescendant) { |
| 1399 // This test verifies that clip tree hierarchy being generated correctly for | 1381 // This test verifies that clip tree hierarchy being generated correctly for |
| 1400 // the hard case such that a fixed position element getting clipped by an | 1382 // the hard case such that a fixed position element getting clipped by an |
| 1401 // absolute position CSS clip. | 1383 // absolute position CSS clip. |
| 1402 setBodyInnerHTML( | 1384 setBodyInnerHTML( |
| 1403 "<style>" | 1385 "<style>" |
| (...skipping 25 matching lines...) Expand all Loading... |
| 1429 clipProperties->cssClip()->localTransformSpace()); | 1411 clipProperties->cssClip()->localTransformSpace()); |
| 1430 EXPECT_EQ(FloatRoundedRect(FloatRect(absoluteClipRect)), | 1412 EXPECT_EQ(FloatRoundedRect(FloatRect(absoluteClipRect)), |
| 1431 clipProperties->cssClip()->clipRect()); | 1413 clipProperties->cssClip()->clipRect()); |
| 1432 CHECK_VISUAL_RECT(absoluteClipRect, &clip, document().view()->layoutView(), | 1414 CHECK_VISUAL_RECT(absoluteClipRect, &clip, document().view()->layoutView(), |
| 1433 // TODO(crbug.com/599939): mapToVisualRectInAncestorSpace() | 1415 // TODO(crbug.com/599939): mapToVisualRectInAncestorSpace() |
| 1434 // doesn't apply css clip on the object itself. | 1416 // doesn't apply css clip on the object itself. |
| 1435 LayoutUnit::max()); | 1417 LayoutUnit::max()); |
| 1436 | 1418 |
| 1437 LayoutObject* fixed = document().getElementById("fixed")->layoutObject(); | 1419 LayoutObject* fixed = document().getElementById("fixed")->layoutObject(); |
| 1438 const ObjectPaintProperties* fixedProperties = fixed->paintProperties(); | 1420 const ObjectPaintProperties* fixedProperties = fixed->paintProperties(); |
| 1439 EXPECT_EQ( | 1421 EXPECT_EQ(clipProperties->cssClip(), |
| 1440 clipProperties->cssClip(), | 1422 fixedProperties->localBorderBoxProperties()->clip()); |
| 1441 fixedProperties->localBorderBoxProperties()->propertyTreeState.clip()); | 1423 EXPECT_EQ(framePreTranslation(), |
| 1442 EXPECT_EQ(framePreTranslation(), fixedProperties->localBorderBoxProperties() | 1424 fixedProperties->localBorderBoxProperties()->transform()); |
| 1443 ->propertyTreeState.transform()); | 1425 EXPECT_EQ(LayoutPoint(654, 321), fixed->paintOffset()); |
| 1444 EXPECT_EQ(LayoutPoint(654, 321), | |
| 1445 fixedProperties->localBorderBoxProperties()->paintOffset); | |
| 1446 CHECK_VISUAL_RECT(LayoutRect(), fixed, document().view()->layoutView(), | 1426 CHECK_VISUAL_RECT(LayoutRect(), fixed, document().view()->layoutView(), |
| 1447 // TODO(crbug.com/599939): CSS clip of fixed-position | 1427 // TODO(crbug.com/599939): CSS clip of fixed-position |
| 1448 // descendants is broken in | 1428 // descendants is broken in |
| 1449 // mapToVisualRectInAncestorSpace(). | 1429 // mapToVisualRectInAncestorSpace(). |
| 1450 LayoutUnit::max()); | 1430 LayoutUnit::max()); |
| 1451 } | 1431 } |
| 1452 | 1432 |
| 1453 TEST_P(PaintPropertyTreeBuilderTest, CSSClipAbsPositionDescendant) { | 1433 TEST_P(PaintPropertyTreeBuilderTest, CSSClipAbsPositionDescendant) { |
| 1454 // This test verifies that clip tree hierarchy being generated correctly for | 1434 // This test verifies that clip tree hierarchy being generated correctly for |
| 1455 // the hard case such that a fixed position element getting clipped by an | 1435 // the hard case such that a fixed position element getting clipped by an |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1488 clipProperties->cssClip()->localTransformSpace()); | 1468 clipProperties->cssClip()->localTransformSpace()); |
| 1489 EXPECT_EQ(FloatRoundedRect(FloatRect(absoluteClipRect)), | 1469 EXPECT_EQ(FloatRoundedRect(FloatRect(absoluteClipRect)), |
| 1490 clipProperties->cssClip()->clipRect()); | 1470 clipProperties->cssClip()->clipRect()); |
| 1491 CHECK_VISUAL_RECT(absoluteClipRect, clip, document().view()->layoutView(), | 1471 CHECK_VISUAL_RECT(absoluteClipRect, clip, document().view()->layoutView(), |
| 1492 // TODO(crbug.com/599939): mapToVisualRectInAncestorSpace() | 1472 // TODO(crbug.com/599939): mapToVisualRectInAncestorSpace() |
| 1493 // doesn't apply css clip on the object itself. | 1473 // doesn't apply css clip on the object itself. |
| 1494 LayoutUnit::max()); | 1474 LayoutUnit::max()); |
| 1495 | 1475 |
| 1496 auto* absolute = document().getElementById("absolute")->layoutObject(); | 1476 auto* absolute = document().getElementById("absolute")->layoutObject(); |
| 1497 const ObjectPaintProperties* absPosProperties = absolute->paintProperties(); | 1477 const ObjectPaintProperties* absPosProperties = absolute->paintProperties(); |
| 1498 EXPECT_EQ( | 1478 EXPECT_EQ(clipProperties->cssClip(), |
| 1499 clipProperties->cssClip(), | 1479 absPosProperties->localBorderBoxProperties()->clip()); |
| 1500 absPosProperties->localBorderBoxProperties()->propertyTreeState.clip()); | 1480 EXPECT_EQ(framePreTranslation(), |
| 1501 EXPECT_EQ(framePreTranslation(), absPosProperties->localBorderBoxProperties() | 1481 absPosProperties->localBorderBoxProperties()->transform()); |
| 1502 ->propertyTreeState.transform()); | 1482 EXPECT_EQ(LayoutPoint(123, 456), absolute->paintOffset()); |
| 1503 EXPECT_EQ(LayoutPoint(123, 456), | |
| 1504 absPosProperties->localBorderBoxProperties()->paintOffset); | |
| 1505 CHECK_VISUAL_RECT(LayoutRect(), absolute, document().view()->layoutView(), | 1483 CHECK_VISUAL_RECT(LayoutRect(), absolute, document().view()->layoutView(), |
| 1506 // TODO(crbug.com/599939): CSS clip of fixed-position | 1484 // TODO(crbug.com/599939): CSS clip of fixed-position |
| 1507 // descendants is broken in | 1485 // descendants is broken in |
| 1508 // mapToVisualRectInAncestorSpace(). | 1486 // mapToVisualRectInAncestorSpace(). |
| 1509 LayoutUnit::max()); | 1487 LayoutUnit::max()); |
| 1510 } | 1488 } |
| 1511 | 1489 |
| 1512 TEST_P(PaintPropertyTreeBuilderTest, CSSClipFixedPositionDescendantNonShared) { | 1490 TEST_P(PaintPropertyTreeBuilderTest, CSSClipFixedPositionDescendantNonShared) { |
| 1513 // This test is similar to CSSClipFixedPositionDescendant above, except that | 1491 // This test is similar to CSSClipFixedPositionDescendant above, except that |
| 1514 // now we have a parent overflow clip that should be escaped by the fixed | 1492 // now we have a parent overflow clip that should be escaped by the fixed |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1566 EXPECT_EQ(frameContentClip(), | 1544 EXPECT_EQ(frameContentClip(), |
| 1567 clipProperties->cssClipFixedPosition()->parent()); | 1545 clipProperties->cssClipFixedPosition()->parent()); |
| 1568 EXPECT_EQ(overflowProperties->scrollTranslation(), | 1546 EXPECT_EQ(overflowProperties->scrollTranslation(), |
| 1569 clipProperties->cssClipFixedPosition()->localTransformSpace()); | 1547 clipProperties->cssClipFixedPosition()->localTransformSpace()); |
| 1570 EXPECT_EQ(FloatRoundedRect(FloatRect(absoluteClipRect)), | 1548 EXPECT_EQ(FloatRoundedRect(FloatRect(absoluteClipRect)), |
| 1571 clipProperties->cssClipFixedPosition()->clipRect()); | 1549 clipProperties->cssClipFixedPosition()->clipRect()); |
| 1572 CHECK_EXACT_VISUAL_RECT(LayoutRect(), clip, document().view()->layoutView()); | 1550 CHECK_EXACT_VISUAL_RECT(LayoutRect(), clip, document().view()->layoutView()); |
| 1573 | 1551 |
| 1574 LayoutObject* fixed = document().getElementById("fixed")->layoutObject(); | 1552 LayoutObject* fixed = document().getElementById("fixed")->layoutObject(); |
| 1575 const ObjectPaintProperties* fixedProperties = fixed->paintProperties(); | 1553 const ObjectPaintProperties* fixedProperties = fixed->paintProperties(); |
| 1576 EXPECT_EQ( | 1554 EXPECT_EQ(clipProperties->cssClipFixedPosition(), |
| 1577 clipProperties->cssClipFixedPosition(), | 1555 fixedProperties->localBorderBoxProperties()->clip()); |
| 1578 fixedProperties->localBorderBoxProperties()->propertyTreeState.clip()); | 1556 EXPECT_EQ(framePreTranslation(), |
| 1579 EXPECT_EQ(framePreTranslation(), fixedProperties->localBorderBoxProperties() | 1557 fixedProperties->localBorderBoxProperties()->transform()); |
| 1580 ->propertyTreeState.transform()); | 1558 EXPECT_EQ(LayoutPoint(654, 321), fixed->paintOffset()); |
| 1581 EXPECT_EQ(LayoutPoint(654, 321), | |
| 1582 fixedProperties->localBorderBoxProperties()->paintOffset); | |
| 1583 CHECK_VISUAL_RECT(LayoutRect(), fixed, document().view()->layoutView(), | 1559 CHECK_VISUAL_RECT(LayoutRect(), fixed, document().view()->layoutView(), |
| 1584 // TODO(crbug.com/599939): CSS clip of fixed-position | 1560 // TODO(crbug.com/599939): CSS clip of fixed-position |
| 1585 // descendants is broken in geometry mapping. | 1561 // descendants is broken in geometry mapping. |
| 1586 LayoutUnit::max()); | 1562 LayoutUnit::max()); |
| 1587 } | 1563 } |
| 1588 | 1564 |
| 1589 TEST_P(PaintPropertyTreeBuilderTest, ColumnSpannerUnderRelativePositioned) { | 1565 TEST_P(PaintPropertyTreeBuilderTest, ColumnSpannerUnderRelativePositioned) { |
| 1590 setBodyInnerHTML( | 1566 setBodyInnerHTML( |
| 1591 "<style>" | 1567 "<style>" |
| 1592 " #spanner {" | 1568 " #spanner {" |
| 1593 " column-span: all;" | 1569 " column-span: all;" |
| 1594 " opacity: 0.5;" | 1570 " opacity: 0.5;" |
| 1595 " width: 100px;" | 1571 " width: 100px;" |
| 1596 " height: 100px;" | 1572 " height: 100px;" |
| 1597 " }" | 1573 " }" |
| 1598 "</style>" | 1574 "</style>" |
| 1599 "<div style='columns: 3; position: absolute; top: 44px; left: 55px;'>" | 1575 "<div style='columns: 3; position: absolute; top: 44px; left: 55px;'>" |
| 1600 " <div style='position: relative; top: 100px; left: 100px'>" | 1576 " <div style='position: relative; top: 100px; left: 100px'>" |
| 1601 " <div id='spanner'></div>" | 1577 " <div id='spanner'></div>" |
| 1602 " </div>" | 1578 " </div>" |
| 1603 "</div>"); | 1579 "</div>"); |
| 1604 | 1580 |
| 1605 LayoutObject* spanner = getLayoutObjectByElementId("spanner"); | 1581 LayoutObject* spanner = getLayoutObjectByElementId("spanner"); |
| 1606 EXPECT_EQ( | 1582 EXPECT_EQ(LayoutPoint(55, 44), spanner->paintOffset()); |
| 1607 LayoutPoint(55, 44), | |
| 1608 spanner->paintProperties()->localBorderBoxProperties()->paintOffset); | |
| 1609 CHECK_EXACT_VISUAL_RECT(LayoutRect(55, 44, 100, 100), spanner, | 1583 CHECK_EXACT_VISUAL_RECT(LayoutRect(55, 44, 100, 100), spanner, |
| 1610 document().view()->layoutView()); | 1584 document().view()->layoutView()); |
| 1611 } | 1585 } |
| 1612 | 1586 |
| 1613 TEST_P(PaintPropertyTreeBuilderTest, FractionalPaintOffset) { | 1587 TEST_P(PaintPropertyTreeBuilderTest, FractionalPaintOffset) { |
| 1614 setBodyInnerHTML( | 1588 setBodyInnerHTML( |
| 1615 "<style>" | 1589 "<style>" |
| 1616 " * { margin: 0; }" | 1590 " * { margin: 0; }" |
| 1617 " div { position: absolute; }" | 1591 " div { position: absolute; }" |
| 1618 " #a {" | 1592 " #a {" |
| 1619 " width: 70px;" | 1593 " width: 70px;" |
| 1620 " height: 70px;" | 1594 " height: 70px;" |
| 1621 " left: 0.1px;" | 1595 " left: 0.1px;" |
| 1622 " top: 0.3px;" | 1596 " top: 0.3px;" |
| 1623 " }" | 1597 " }" |
| 1624 " #b {" | 1598 " #b {" |
| 1625 " width: 40px;" | 1599 " width: 40px;" |
| 1626 " height: 40px;" | 1600 " height: 40px;" |
| 1627 " left: 0.5px;" | 1601 " left: 0.5px;" |
| 1628 " top: 11.1px;" | 1602 " top: 11.1px;" |
| 1629 " }" | 1603 " }" |
| 1630 "</style>" | 1604 "</style>" |
| 1631 "<div id='a'>" | 1605 "<div id='a'>" |
| 1632 " <div id='b'></div>" | 1606 " <div id='b'></div>" |
| 1633 "</div>"); | 1607 "</div>"); |
| 1634 FrameView* frameView = document().view(); | 1608 FrameView* frameView = document().view(); |
| 1635 | 1609 |
| 1636 LayoutObject* a = document().getElementById("a")->layoutObject(); | 1610 LayoutObject* a = document().getElementById("a")->layoutObject(); |
| 1637 const ObjectPaintProperties* aProperties = a->paintProperties(); | |
| 1638 LayoutPoint aPaintOffset = LayoutPoint(FloatPoint(0.1, 0.3)); | 1611 LayoutPoint aPaintOffset = LayoutPoint(FloatPoint(0.1, 0.3)); |
| 1639 EXPECT_EQ(aPaintOffset, aProperties->localBorderBoxProperties()->paintOffset); | 1612 EXPECT_EQ(aPaintOffset, a->paintOffset()); |
| 1640 CHECK_EXACT_VISUAL_RECT(LayoutRect(LayoutUnit(0.1), LayoutUnit(0.3), | 1613 CHECK_EXACT_VISUAL_RECT(LayoutRect(LayoutUnit(0.1), LayoutUnit(0.3), |
| 1641 LayoutUnit(70), LayoutUnit(70)), | 1614 LayoutUnit(70), LayoutUnit(70)), |
| 1642 a, frameView->layoutView()); | 1615 a, frameView->layoutView()); |
| 1643 | 1616 |
| 1644 LayoutObject* b = document().getElementById("b")->layoutObject(); | 1617 LayoutObject* b = document().getElementById("b")->layoutObject(); |
| 1645 const ObjectPaintProperties* bProperties = b->paintProperties(); | |
| 1646 LayoutPoint bPaintOffset = aPaintOffset + LayoutPoint(FloatPoint(0.5, 11.1)); | 1618 LayoutPoint bPaintOffset = aPaintOffset + LayoutPoint(FloatPoint(0.5, 11.1)); |
| 1647 EXPECT_EQ(bPaintOffset, bProperties->localBorderBoxProperties()->paintOffset); | 1619 EXPECT_EQ(bPaintOffset, b->paintOffset()); |
| 1648 CHECK_EXACT_VISUAL_RECT(LayoutRect(LayoutUnit(0.1), LayoutUnit(0.3), | 1620 CHECK_EXACT_VISUAL_RECT(LayoutRect(LayoutUnit(0.1), LayoutUnit(0.3), |
| 1649 LayoutUnit(70), LayoutUnit(70)), | 1621 LayoutUnit(70), LayoutUnit(70)), |
| 1650 a, frameView->layoutView()); | 1622 a, frameView->layoutView()); |
| 1651 } | 1623 } |
| 1652 | 1624 |
| 1653 TEST_P(PaintPropertyTreeBuilderTest, PaintOffsetWithBasicPixelSnapping) { | 1625 TEST_P(PaintPropertyTreeBuilderTest, PaintOffsetWithBasicPixelSnapping) { |
| 1654 setBodyInnerHTML( | 1626 setBodyInnerHTML( |
| 1655 "<style>" | 1627 "<style>" |
| 1656 " * { margin: 0; }" | 1628 " * { margin: 0; }" |
| 1657 " div { position: relative; }" | 1629 " div { position: relative; }" |
| (...skipping 24 matching lines...) Expand all Loading... |
| 1682 | 1654 |
| 1683 LayoutObject* b = document().getElementById("b")->layoutObject(); | 1655 LayoutObject* b = document().getElementById("b")->layoutObject(); |
| 1684 const ObjectPaintProperties* bProperties = b->paintProperties(); | 1656 const ObjectPaintProperties* bProperties = b->paintProperties(); |
| 1685 EXPECT_EQ(TransformationMatrix().translate3d(0, 0, 0), | 1657 EXPECT_EQ(TransformationMatrix().translate3d(0, 0, 0), |
| 1686 bProperties->transform()->matrix()); | 1658 bProperties->transform()->matrix()); |
| 1687 // The paint offset transform should be snapped from (0.3,0.3) to (0,0). | 1659 // The paint offset transform should be snapped from (0.3,0.3) to (0,0). |
| 1688 EXPECT_EQ(TransformationMatrix().translate(0, 0), | 1660 EXPECT_EQ(TransformationMatrix().translate(0, 0), |
| 1689 bProperties->transform()->parent()->matrix()); | 1661 bProperties->transform()->parent()->matrix()); |
| 1690 // The residual subpixel adjustment should be (0.3,0.3) - (0,0) = (0.3,0.3). | 1662 // The residual subpixel adjustment should be (0.3,0.3) - (0,0) = (0.3,0.3). |
| 1691 LayoutPoint subpixelAccumulation = LayoutPoint(FloatPoint(0.3, 0.3)); | 1663 LayoutPoint subpixelAccumulation = LayoutPoint(FloatPoint(0.3, 0.3)); |
| 1692 EXPECT_EQ(subpixelAccumulation, | 1664 EXPECT_EQ(subpixelAccumulation, b->paintOffset()); |
| 1693 bProperties->localBorderBoxProperties()->paintOffset); | |
| 1694 CHECK_EXACT_VISUAL_RECT(LayoutRect(FloatRect(0.3, 0.3, 40, 40)), b, | 1665 CHECK_EXACT_VISUAL_RECT(LayoutRect(FloatRect(0.3, 0.3, 40, 40)), b, |
| 1695 frameView->layoutView()); | 1666 frameView->layoutView()); |
| 1696 | 1667 |
| 1697 // c's painted should start at subpixelAccumulation + (0.1,0.1) = (0.4,0.4). | 1668 // c's painted should start at subpixelAccumulation + (0.1,0.1) = (0.4,0.4). |
| 1698 LayoutObject* c = document().getElementById("c")->layoutObject(); | 1669 LayoutObject* c = document().getElementById("c")->layoutObject(); |
| 1699 LayoutPoint cPaintOffset = | 1670 LayoutPoint cPaintOffset = |
| 1700 subpixelAccumulation + LayoutPoint(FloatPoint(0.1, 0.1)); | 1671 subpixelAccumulation + LayoutPoint(FloatPoint(0.1, 0.1)); |
| 1701 const ObjectPaintProperties* cProperties = c->paintProperties(); | 1672 EXPECT_EQ(cPaintOffset, c->paintOffset()); |
| 1702 EXPECT_EQ(cPaintOffset, cProperties->localBorderBoxProperties()->paintOffset); | |
| 1703 // Visual rects via the non-paint properties system use enclosingIntRect | 1673 // Visual rects via the non-paint properties system use enclosingIntRect |
| 1704 // before applying transforms, because they are computed bottom-up and | 1674 // before applying transforms, because they are computed bottom-up and |
| 1705 // therefore can't apply pixel snapping. Therefore apply a slop of 1px. | 1675 // therefore can't apply pixel snapping. Therefore apply a slop of 1px. |
| 1706 CHECK_VISUAL_RECT(LayoutRect(FloatRect(0.4, 0.4, 40, 40)), c, | 1676 CHECK_VISUAL_RECT(LayoutRect(FloatRect(0.4, 0.4, 40, 40)), c, |
| 1707 frameView->layoutView(), 1); | 1677 frameView->layoutView(), 1); |
| 1708 } | 1678 } |
| 1709 | 1679 |
| 1710 TEST_P(PaintPropertyTreeBuilderTest, | 1680 TEST_P(PaintPropertyTreeBuilderTest, |
| 1711 PaintOffsetWithPixelSnappingThroughTransform) { | 1681 PaintOffsetWithPixelSnappingThroughTransform) { |
| 1712 setBodyInnerHTML( | 1682 setBodyInnerHTML( |
| (...skipping 28 matching lines...) Expand all Loading... |
| 1741 LayoutObject* b = document().getElementById("b")->layoutObject(); | 1711 LayoutObject* b = document().getElementById("b")->layoutObject(); |
| 1742 const ObjectPaintProperties* bProperties = b->paintProperties(); | 1712 const ObjectPaintProperties* bProperties = b->paintProperties(); |
| 1743 EXPECT_EQ(TransformationMatrix().translate3d(0, 0, 0), | 1713 EXPECT_EQ(TransformationMatrix().translate3d(0, 0, 0), |
| 1744 bProperties->transform()->matrix()); | 1714 bProperties->transform()->matrix()); |
| 1745 // The paint offset transform should be snapped from (0.7,0.7) to (1,1). | 1715 // The paint offset transform should be snapped from (0.7,0.7) to (1,1). |
| 1746 EXPECT_EQ(TransformationMatrix().translate(1, 1), | 1716 EXPECT_EQ(TransformationMatrix().translate(1, 1), |
| 1747 bProperties->transform()->parent()->matrix()); | 1717 bProperties->transform()->parent()->matrix()); |
| 1748 // The residual subpixel adjustment should be (0.7,0.7) - (1,1) = (-0.3,-0.3). | 1718 // The residual subpixel adjustment should be (0.7,0.7) - (1,1) = (-0.3,-0.3). |
| 1749 LayoutPoint subpixelAccumulation = | 1719 LayoutPoint subpixelAccumulation = |
| 1750 LayoutPoint(LayoutPoint(FloatPoint(0.7, 0.7)) - LayoutPoint(1, 1)); | 1720 LayoutPoint(LayoutPoint(FloatPoint(0.7, 0.7)) - LayoutPoint(1, 1)); |
| 1751 EXPECT_EQ(subpixelAccumulation, | 1721 EXPECT_EQ(subpixelAccumulation, b->paintOffset()); |
| 1752 bProperties->localBorderBoxProperties()->paintOffset); | |
| 1753 CHECK_EXACT_VISUAL_RECT(LayoutRect(LayoutUnit(0.7), LayoutUnit(0.7), | 1722 CHECK_EXACT_VISUAL_RECT(LayoutRect(LayoutUnit(0.7), LayoutUnit(0.7), |
| 1754 LayoutUnit(40), LayoutUnit(40)), | 1723 LayoutUnit(40), LayoutUnit(40)), |
| 1755 b, frameView->layoutView()); | 1724 b, frameView->layoutView()); |
| 1756 | 1725 |
| 1757 // c's painting should start at subpixelAccumulation + (0.7,0.7) = (0.4,0.4). | 1726 // c's painting should start at subpixelAccumulation + (0.7,0.7) = (0.4,0.4). |
| 1758 LayoutObject* c = document().getElementById("c")->layoutObject(); | 1727 LayoutObject* c = document().getElementById("c")->layoutObject(); |
| 1759 LayoutPoint cPaintOffset = | 1728 LayoutPoint cPaintOffset = |
| 1760 subpixelAccumulation + LayoutPoint(FloatPoint(0.7, 0.7)); | 1729 subpixelAccumulation + LayoutPoint(FloatPoint(0.7, 0.7)); |
| 1761 const ObjectPaintProperties* cProperties = c->paintProperties(); | 1730 EXPECT_EQ(cPaintOffset, c->paintOffset()); |
| 1762 EXPECT_EQ(cPaintOffset, cProperties->localBorderBoxProperties()->paintOffset); | |
| 1763 // Visual rects via the non-paint properties system use enclosingIntRect | 1731 // Visual rects via the non-paint properties system use enclosingIntRect |
| 1764 // before applying transforms, because they are computed bottom-up and | 1732 // before applying transforms, because they are computed bottom-up and |
| 1765 // therefore can't apply pixel snapping. Therefore apply a slop of 1px. | 1733 // therefore can't apply pixel snapping. Therefore apply a slop of 1px. |
| 1766 CHECK_VISUAL_RECT(LayoutRect(LayoutUnit(0.7) + LayoutUnit(0.7), | 1734 CHECK_VISUAL_RECT(LayoutRect(LayoutUnit(0.7) + LayoutUnit(0.7), |
| 1767 LayoutUnit(0.7) + LayoutUnit(0.7), | 1735 LayoutUnit(0.7) + LayoutUnit(0.7), |
| 1768 LayoutUnit(40), LayoutUnit(40)), | 1736 LayoutUnit(40), LayoutUnit(40)), |
| 1769 c, frameView->layoutView(), 1); | 1737 c, frameView->layoutView(), 1); |
| 1770 } | 1738 } |
| 1771 | 1739 |
| 1772 TEST_P(PaintPropertyTreeBuilderTest, | 1740 TEST_P(PaintPropertyTreeBuilderTest, |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1810 LayoutObject* b = document().getElementById("b")->layoutObject(); | 1778 LayoutObject* b = document().getElementById("b")->layoutObject(); |
| 1811 const ObjectPaintProperties* bProperties = b->paintProperties(); | 1779 const ObjectPaintProperties* bProperties = b->paintProperties(); |
| 1812 EXPECT_EQ(TransformationMatrix().translate3d(5, 7, 0), | 1780 EXPECT_EQ(TransformationMatrix().translate3d(5, 7, 0), |
| 1813 bProperties->transform()->matrix()); | 1781 bProperties->transform()->matrix()); |
| 1814 // The paint offset transform should be snapped from (0.7,0.7) to (1,1). | 1782 // The paint offset transform should be snapped from (0.7,0.7) to (1,1). |
| 1815 EXPECT_EQ(TransformationMatrix().translate(1, 1), | 1783 EXPECT_EQ(TransformationMatrix().translate(1, 1), |
| 1816 bProperties->transform()->parent()->matrix()); | 1784 bProperties->transform()->parent()->matrix()); |
| 1817 // The residual subpixel adjustment should be (0.7,0.7) - (1,1) = (-0.3,-0.3). | 1785 // The residual subpixel adjustment should be (0.7,0.7) - (1,1) = (-0.3,-0.3). |
| 1818 LayoutPoint subpixelAccumulation = | 1786 LayoutPoint subpixelAccumulation = |
| 1819 LayoutPoint(LayoutPoint(FloatPoint(0.7, 0.7)) - LayoutPoint(1, 1)); | 1787 LayoutPoint(LayoutPoint(FloatPoint(0.7, 0.7)) - LayoutPoint(1, 1)); |
| 1820 EXPECT_EQ(subpixelAccumulation, | 1788 EXPECT_EQ(subpixelAccumulation, b->paintOffset()); |
| 1821 bProperties->localBorderBoxProperties()->paintOffset); | |
| 1822 CHECK_EXACT_VISUAL_RECT(LayoutRect(LayoutUnit(5.7), LayoutUnit(7.7), | 1789 CHECK_EXACT_VISUAL_RECT(LayoutRect(LayoutUnit(5.7), LayoutUnit(7.7), |
| 1823 LayoutUnit(40), LayoutUnit(40)), | 1790 LayoutUnit(40), LayoutUnit(40)), |
| 1824 b, frameView->layoutView()); | 1791 b, frameView->layoutView()); |
| 1825 | 1792 |
| 1826 LayoutObject* c = document().getElementById("c")->layoutObject(); | 1793 LayoutObject* c = document().getElementById("c")->layoutObject(); |
| 1827 const ObjectPaintProperties* cProperties = c->paintProperties(); | 1794 const ObjectPaintProperties* cProperties = c->paintProperties(); |
| 1828 EXPECT_EQ(TransformationMatrix().translate3d(11, 13, 0), | 1795 EXPECT_EQ(TransformationMatrix().translate3d(11, 13, 0), |
| 1829 cProperties->transform()->matrix()); | 1796 cProperties->transform()->matrix()); |
| 1830 // The paint offset should be (-0.3,-0.3) but the paint offset transform | 1797 // The paint offset should be (-0.3,-0.3) but the paint offset transform |
| 1831 // should still be at (0,0) because it should be snapped. | 1798 // should still be at (0,0) because it should be snapped. |
| 1832 EXPECT_EQ(TransformationMatrix().translate(0, 0), | 1799 EXPECT_EQ(TransformationMatrix().translate(0, 0), |
| 1833 cProperties->transform()->parent()->matrix()); | 1800 cProperties->transform()->parent()->matrix()); |
| 1834 // The residual subpixel adjustment should still be (-0.3,-0.3). | 1801 // The residual subpixel adjustment should still be (-0.3,-0.3). |
| 1835 EXPECT_EQ(subpixelAccumulation, | 1802 EXPECT_EQ(subpixelAccumulation, c->paintOffset()); |
| 1836 cProperties->localBorderBoxProperties()->paintOffset); | |
| 1837 CHECK_EXACT_VISUAL_RECT(LayoutRect(LayoutUnit(16.7), LayoutUnit(20.7), | 1803 CHECK_EXACT_VISUAL_RECT(LayoutRect(LayoutUnit(16.7), LayoutUnit(20.7), |
| 1838 LayoutUnit(40), LayoutUnit(40)), | 1804 LayoutUnit(40), LayoutUnit(40)), |
| 1839 c, frameView->layoutView()); | 1805 c, frameView->layoutView()); |
| 1840 | 1806 |
| 1841 // d should be painted starting at subpixelAccumulation + (0.7,0.7) = | 1807 // d should be painted starting at subpixelAccumulation + (0.7,0.7) = |
| 1842 // (0.4,0.4). | 1808 // (0.4,0.4). |
| 1843 LayoutObject* d = document().getElementById("d")->layoutObject(); | 1809 LayoutObject* d = document().getElementById("d")->layoutObject(); |
| 1844 LayoutPoint dPaintOffset = | 1810 LayoutPoint dPaintOffset = |
| 1845 subpixelAccumulation + LayoutPoint(FloatPoint(0.7, 0.7)); | 1811 subpixelAccumulation + LayoutPoint(FloatPoint(0.7, 0.7)); |
| 1846 const ObjectPaintProperties* dProperties = d->paintProperties(); | 1812 EXPECT_EQ(dPaintOffset, d->paintOffset()); |
| 1847 EXPECT_EQ(dPaintOffset, dProperties->localBorderBoxProperties()->paintOffset); | |
| 1848 // Visual rects via the non-paint properties system use enclosingIntRect | 1813 // Visual rects via the non-paint properties system use enclosingIntRect |
| 1849 // before applying transforms, because they are computed bottom-up and | 1814 // before applying transforms, because they are computed bottom-up and |
| 1850 // therefore can't apply pixel snapping. Therefore apply a slop of 1px. | 1815 // therefore can't apply pixel snapping. Therefore apply a slop of 1px. |
| 1851 CHECK_VISUAL_RECT(LayoutRect(LayoutUnit(16.7) + LayoutUnit(0.7), | 1816 CHECK_VISUAL_RECT(LayoutRect(LayoutUnit(16.7) + LayoutUnit(0.7), |
| 1852 LayoutUnit(20.7) + LayoutUnit(0.7), | 1817 LayoutUnit(20.7) + LayoutUnit(0.7), |
| 1853 LayoutUnit(40), LayoutUnit(40)), | 1818 LayoutUnit(40), LayoutUnit(40)), |
| 1854 d, frameView->layoutView(), 1); | 1819 d, frameView->layoutView(), 1); |
| 1855 } | 1820 } |
| 1856 | 1821 |
| 1857 TEST_P(PaintPropertyTreeBuilderTest, PaintOffsetWithPixelSnappingWithFixedPos) { | 1822 TEST_P(PaintPropertyTreeBuilderTest, PaintOffsetWithPixelSnappingWithFixedPos) { |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1894 LayoutObject* b = document().getElementById("b")->layoutObject(); | 1859 LayoutObject* b = document().getElementById("b")->layoutObject(); |
| 1895 const ObjectPaintProperties* bProperties = b->paintProperties(); | 1860 const ObjectPaintProperties* bProperties = b->paintProperties(); |
| 1896 EXPECT_EQ(TransformationMatrix().translate(0, 0), | 1861 EXPECT_EQ(TransformationMatrix().translate(0, 0), |
| 1897 bProperties->transform()->matrix()); | 1862 bProperties->transform()->matrix()); |
| 1898 // The paint offset transform should be snapped from (0.7,0) to (1,0). | 1863 // The paint offset transform should be snapped from (0.7,0) to (1,0). |
| 1899 EXPECT_EQ(TransformationMatrix().translate(1, 0), | 1864 EXPECT_EQ(TransformationMatrix().translate(1, 0), |
| 1900 bProperties->transform()->parent()->matrix()); | 1865 bProperties->transform()->parent()->matrix()); |
| 1901 // The residual subpixel adjustment should be (0.7,0) - (1,0) = (-0.3,0). | 1866 // The residual subpixel adjustment should be (0.7,0) - (1,0) = (-0.3,0). |
| 1902 LayoutPoint subpixelAccumulation = | 1867 LayoutPoint subpixelAccumulation = |
| 1903 LayoutPoint(LayoutPoint(FloatPoint(0.7, 0)) - LayoutPoint(1, 0)); | 1868 LayoutPoint(LayoutPoint(FloatPoint(0.7, 0)) - LayoutPoint(1, 0)); |
| 1904 EXPECT_EQ(subpixelAccumulation, | 1869 EXPECT_EQ(subpixelAccumulation, b->paintOffset()); |
| 1905 bProperties->localBorderBoxProperties()->paintOffset); | |
| 1906 CHECK_EXACT_VISUAL_RECT(LayoutRect(LayoutUnit(0.7), LayoutUnit(0), | 1870 CHECK_EXACT_VISUAL_RECT(LayoutRect(LayoutUnit(0.7), LayoutUnit(0), |
| 1907 LayoutUnit(40), LayoutUnit(40)), | 1871 LayoutUnit(40), LayoutUnit(40)), |
| 1908 b, frameView->layoutView()); | 1872 b, frameView->layoutView()); |
| 1909 | 1873 |
| 1910 LayoutObject* fixed = document().getElementById("fixed")->layoutObject(); | 1874 LayoutObject* fixed = document().getElementById("fixed")->layoutObject(); |
| 1911 const ObjectPaintProperties* fixedProperties = fixed->paintProperties(); | |
| 1912 // The residual subpixel adjustment should still be (-0.3,0). | 1875 // The residual subpixel adjustment should still be (-0.3,0). |
| 1913 EXPECT_EQ(subpixelAccumulation, | 1876 EXPECT_EQ(subpixelAccumulation, fixed->paintOffset()); |
| 1914 fixedProperties->localBorderBoxProperties()->paintOffset); | |
| 1915 CHECK_EXACT_VISUAL_RECT(LayoutRect(LayoutUnit(0.7), LayoutUnit(0), | 1877 CHECK_EXACT_VISUAL_RECT(LayoutRect(LayoutUnit(0.7), LayoutUnit(0), |
| 1916 LayoutUnit(40), LayoutUnit(40)), | 1878 LayoutUnit(40), LayoutUnit(40)), |
| 1917 fixed, frameView->layoutView()); | 1879 fixed, frameView->layoutView()); |
| 1918 | 1880 |
| 1919 // d should be painted starting at subpixelAccumulation + (0.7,0) = (0.4,0). | 1881 // d should be painted starting at subpixelAccumulation + (0.7,0) = (0.4,0). |
| 1920 LayoutObject* d = document().getElementById("d")->layoutObject(); | 1882 LayoutObject* d = document().getElementById("d")->layoutObject(); |
| 1921 LayoutPoint dPaintOffset = | 1883 LayoutPoint dPaintOffset = |
| 1922 subpixelAccumulation + LayoutPoint(FloatPoint(0.7, 0)); | 1884 subpixelAccumulation + LayoutPoint(FloatPoint(0.7, 0)); |
| 1923 const ObjectPaintProperties* dProperties = d->paintProperties(); | 1885 EXPECT_EQ(dPaintOffset, d->paintOffset()); |
| 1924 EXPECT_EQ(dPaintOffset, dProperties->localBorderBoxProperties()->paintOffset); | |
| 1925 // Visual rects via the non-paint properties system use enclosingIntRect | 1886 // Visual rects via the non-paint properties system use enclosingIntRect |
| 1926 // before applying transforms, because they are computed bottom-up and | 1887 // before applying transforms, because they are computed bottom-up and |
| 1927 // therefore can't apply pixel snapping. Therefore apply a slop of 1px. | 1888 // therefore can't apply pixel snapping. Therefore apply a slop of 1px. |
| 1928 CHECK_VISUAL_RECT(LayoutRect(LayoutUnit(0.7) + LayoutUnit(0.7), LayoutUnit(), | 1889 CHECK_VISUAL_RECT(LayoutRect(LayoutUnit(0.7) + LayoutUnit(0.7), LayoutUnit(), |
| 1929 LayoutUnit(40), LayoutUnit(40)), | 1890 LayoutUnit(40), LayoutUnit(40)), |
| 1930 d, frameView->layoutView(), 1); | 1891 d, frameView->layoutView(), 1); |
| 1931 } | 1892 } |
| 1932 | 1893 |
| 1933 TEST_P(PaintPropertyTreeBuilderTest, SvgPixelSnappingShouldResetPaintOffset) { | 1894 TEST_P(PaintPropertyTreeBuilderTest, SvgPixelSnappingShouldResetPaintOffset) { |
| 1934 setBodyInnerHTML( | 1895 setBodyInnerHTML( |
| 1935 "<style>" | 1896 "<style>" |
| 1936 " #svg {" | 1897 " #svg {" |
| 1937 " position: relative;" | 1898 " position: relative;" |
| 1938 " left: 0.1px;" | 1899 " left: 0.1px;" |
| 1939 " transform: matrix(1, 0, 0, 1, 0, 0);" | 1900 " transform: matrix(1, 0, 0, 1, 0, 0);" |
| 1940 " }" | 1901 " }" |
| 1941 "</style>" | 1902 "</style>" |
| 1942 "<svg id='svg'>" | 1903 "<svg id='svg'>" |
| 1943 " <rect id='rect' transform='translate(1, 1)'/>" | 1904 " <rect id='rect' transform='translate(1, 1)'/>" |
| 1944 "</svg>"); | 1905 "</svg>"); |
| 1945 | 1906 |
| 1946 LayoutObject& svgWithTransform = | 1907 LayoutObject& svgWithTransform = |
| 1947 *document().getElementById("svg")->layoutObject(); | 1908 *document().getElementById("svg")->layoutObject(); |
| 1948 const ObjectPaintProperties* svgWithTransformProperties = | 1909 const ObjectPaintProperties* svgWithTransformProperties = |
| 1949 svgWithTransform.paintProperties(); | 1910 svgWithTransform.paintProperties(); |
| 1950 EXPECT_EQ(TransformationMatrix(), | 1911 EXPECT_EQ(TransformationMatrix(), |
| 1951 svgWithTransformProperties->transform()->matrix()); | 1912 svgWithTransformProperties->transform()->matrix()); |
| 1952 EXPECT_EQ( | 1913 EXPECT_EQ(LayoutPoint(FloatPoint(0.1, 0)), svgWithTransform.paintOffset()); |
| 1953 LayoutPoint(FloatPoint(0.1, 0)), | |
| 1954 svgWithTransformProperties->localBorderBoxProperties()->paintOffset); | |
| 1955 EXPECT_EQ(nullptr, | 1914 EXPECT_EQ(nullptr, |
| 1956 svgWithTransformProperties->svgLocalToBorderBoxTransform()); | 1915 svgWithTransformProperties->svgLocalToBorderBoxTransform()); |
| 1957 | 1916 |
| 1958 LayoutObject& rectWithTransform = | 1917 LayoutObject& rectWithTransform = |
| 1959 *document().getElementById("rect")->layoutObject(); | 1918 *document().getElementById("rect")->layoutObject(); |
| 1960 const ObjectPaintProperties* rectWithTransformProperties = | 1919 const ObjectPaintProperties* rectWithTransformProperties = |
| 1961 rectWithTransform.paintProperties(); | 1920 rectWithTransform.paintProperties(); |
| 1962 EXPECT_EQ(TransformationMatrix().translate(1, 1), | 1921 EXPECT_EQ(TransformationMatrix().translate(1, 1), |
| 1963 rectWithTransformProperties->transform()->matrix()); | 1922 rectWithTransformProperties->transform()->matrix()); |
| 1964 | 1923 |
| 1965 // Ensure there is no PaintOffset transform between the rect and the svg's | 1924 // Ensure there is no PaintOffset transform between the rect and the svg's |
| 1966 // transform. | 1925 // transform. |
| 1967 EXPECT_EQ(svgWithTransformProperties->transform(), | 1926 EXPECT_EQ(svgWithTransformProperties->transform(), |
| 1968 rectWithTransformProperties->transform()->parent()); | 1927 rectWithTransformProperties->transform()->parent()); |
| 1969 } | 1928 } |
| 1970 | 1929 |
| 1971 TEST_P(PaintPropertyTreeBuilderTest, SvgRootAndForeignObjectPixelSnapping) { | 1930 TEST_P(PaintPropertyTreeBuilderTest, SvgRootAndForeignObjectPixelSnapping) { |
| 1972 setBodyInnerHTML( | 1931 setBodyInnerHTML( |
| 1973 "<svg id=svg style='position: relative; left: 0.6px; top: 0.3px'>" | 1932 "<svg id=svg style='position: relative; left: 0.6px; top: 0.3px'>" |
| 1974 " <foreignObject id=foreign x='3.5' y='5.4' transform='translate(1, 1)'>" | 1933 " <foreignObject id=foreign x='3.5' y='5.4' transform='translate(1, 1)'>" |
| 1975 " <div id=div style='position: absolute; left: 5.6px; top: 7.3px'>" | 1934 " <div id=div style='position: absolute; left: 5.6px; top: 7.3px'>" |
| 1976 " </div>" | 1935 " </div>" |
| 1977 " </foreignObject>" | 1936 " </foreignObject>" |
| 1978 "</svg>"); | 1937 "</svg>"); |
| 1979 | 1938 |
| 1980 const auto* svgProperties = | 1939 const auto* svg = getLayoutObjectByElementId("svg"); |
| 1981 getLayoutObjectByElementId("svg")->paintProperties(); | 1940 const auto* svgProperties = svg->paintProperties(); |
| 1982 EXPECT_EQ(nullptr, svgProperties->paintOffsetTranslation()); | 1941 EXPECT_EQ(nullptr, svgProperties->paintOffsetTranslation()); |
| 1983 EXPECT_EQ(LayoutPoint(LayoutUnit(8.6), LayoutUnit(8.3)), | 1942 EXPECT_EQ(LayoutPoint(LayoutUnit(8.6), LayoutUnit(8.3)), svg->paintOffset()); |
| 1984 svgProperties->localBorderBoxProperties()->paintOffset); | |
| 1985 // Paint offset of SVGRoot is baked into svgLocalToBorderBoxTransform after | 1943 // Paint offset of SVGRoot is baked into svgLocalToBorderBoxTransform after |
| 1986 // snapped to pixels. | 1944 // snapped to pixels. |
| 1987 EXPECT_EQ(TransformationMatrix().translate(9, 8), | 1945 EXPECT_EQ(TransformationMatrix().translate(9, 8), |
| 1988 svgProperties->svgLocalToBorderBoxTransform()->matrix()); | 1946 svgProperties->svgLocalToBorderBoxTransform()->matrix()); |
| 1989 | 1947 |
| 1990 const auto* foreignObjectProperties = | 1948 const auto* foreignObject = getLayoutObjectByElementId("foreign"); |
| 1991 getLayoutObjectByElementId("foreign")->paintProperties(); | 1949 const auto* foreignObjectProperties = foreignObject->paintProperties(); |
| 1992 EXPECT_EQ(nullptr, foreignObjectProperties->paintOffsetTranslation()); | 1950 EXPECT_EQ(nullptr, foreignObjectProperties->paintOffsetTranslation()); |
| 1993 // Paint offset of foreignObject should be originated from SVG root and | 1951 // Paint offset of foreignObject should be originated from SVG root and |
| 1994 // snapped to pixels. | 1952 // snapped to pixels. |
| 1995 EXPECT_EQ(LayoutPoint(4, 5), | 1953 EXPECT_EQ(LayoutPoint(4, 5), foreignObject->paintOffset()); |
| 1996 foreignObjectProperties->localBorderBoxProperties()->paintOffset); | |
| 1997 | 1954 |
| 1998 const auto* divProperties = | 1955 const auto* div = getLayoutObjectByElementId("div"); |
| 1999 getLayoutObjectByElementId("div")->paintProperties(); | |
| 2000 // Paint offset of descendant of foreignObject accumulates on paint offset of | 1956 // Paint offset of descendant of foreignObject accumulates on paint offset of |
| 2001 // foreignObject. | 1957 // foreignObject. |
| 2002 EXPECT_EQ(LayoutPoint(LayoutUnit(4 + 5.6), LayoutUnit(5 + 7.3)), | 1958 EXPECT_EQ(LayoutPoint(LayoutUnit(4 + 5.6), LayoutUnit(5 + 7.3)), |
| 2003 divProperties->localBorderBoxProperties()->paintOffset); | 1959 div->paintOffset()); |
| 2004 } | 1960 } |
| 2005 | 1961 |
| 2006 TEST_P(PaintPropertyTreeBuilderTest, NoRenderingContextByDefault) { | 1962 TEST_P(PaintPropertyTreeBuilderTest, NoRenderingContextByDefault) { |
| 2007 setBodyInnerHTML("<div style='transform: translateZ(0)'></div>"); | 1963 setBodyInnerHTML("<div style='transform: translateZ(0)'></div>"); |
| 2008 | 1964 |
| 2009 const ObjectPaintProperties* properties = | 1965 const ObjectPaintProperties* properties = |
| 2010 document().body()->firstChild()->layoutObject()->paintProperties(); | 1966 document().body()->firstChild()->layoutObject()->paintProperties(); |
| 2011 ASSERT_TRUE(properties->transform()); | 1967 ASSERT_TRUE(properties->transform()); |
| 2012 EXPECT_FALSE(properties->transform()->hasRenderingContext()); | 1968 EXPECT_FALSE(properties->transform()->hasRenderingContext()); |
| 2013 } | 1969 } |
| (...skipping 368 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2382 | 2338 |
| 2383 LayoutBoxModelObject* clipper = toLayoutBoxModelObject( | 2339 LayoutBoxModelObject* clipper = toLayoutBoxModelObject( |
| 2384 document().getElementById("clipper")->layoutObject()); | 2340 document().getElementById("clipper")->layoutObject()); |
| 2385 const ObjectPaintProperties* clipProperties = clipper->paintProperties(); | 2341 const ObjectPaintProperties* clipProperties = clipper->paintProperties(); |
| 2386 LayoutObject* child = document().getElementById("child")->layoutObject(); | 2342 LayoutObject* child = document().getElementById("child")->layoutObject(); |
| 2387 const ObjectPaintProperties* childProperties = child->paintProperties(); | 2343 const ObjectPaintProperties* childProperties = child->paintProperties(); |
| 2388 | 2344 |
| 2389 // No scroll translation because the document does not scroll (not enough | 2345 // No scroll translation because the document does not scroll (not enough |
| 2390 // content). | 2346 // content). |
| 2391 EXPECT_TRUE(!frameScrollTranslation()); | 2347 EXPECT_TRUE(!frameScrollTranslation()); |
| 2392 EXPECT_EQ(framePreTranslation(), clipProperties->localBorderBoxProperties() | 2348 EXPECT_EQ(framePreTranslation(), |
| 2393 ->propertyTreeState.transform()); | 2349 clipProperties->localBorderBoxProperties()->transform()); |
| 2394 EXPECT_EQ( | 2350 EXPECT_EQ(frameContentClip(), |
| 2395 frameContentClip(), | 2351 clipProperties->localBorderBoxProperties()->clip()); |
| 2396 clipProperties->localBorderBoxProperties()->propertyTreeState.clip()); | |
| 2397 | 2352 |
| 2398 auto contentsProperties = clipProperties->contentsProperties(); | 2353 auto contentsProperties = clipProperties->contentsProperties(); |
| 2399 EXPECT_EQ(LayoutPoint(30, 20), contentsProperties.paintOffset); | 2354 EXPECT_EQ(LayoutPoint(30, 20), clipper->paintOffset()); |
| 2355 EXPECT_EQ(framePreTranslation(), contentsProperties.transform()); |
| 2356 EXPECT_EQ(clipProperties->overflowClip(), contentsProperties.clip()); |
| 2357 |
| 2400 EXPECT_EQ(framePreTranslation(), | 2358 EXPECT_EQ(framePreTranslation(), |
| 2401 contentsProperties.propertyTreeState.transform()); | 2359 childProperties->localBorderBoxProperties()->transform()); |
| 2402 EXPECT_EQ(clipProperties->overflowClip(), | 2360 EXPECT_EQ(clipProperties->overflowClip(), |
| 2403 contentsProperties.propertyTreeState.clip()); | 2361 childProperties->localBorderBoxProperties()->clip()); |
| 2404 | 2362 |
| 2405 EXPECT_EQ(framePreTranslation(), childProperties->localBorderBoxProperties() | 2363 EXPECT_NE(nullptr, childProperties->localBorderBoxProperties()->effect()); |
| 2406 ->propertyTreeState.transform()); | |
| 2407 EXPECT_EQ( | |
| 2408 clipProperties->overflowClip(), | |
| 2409 childProperties->localBorderBoxProperties()->propertyTreeState.clip()); | |
| 2410 | |
| 2411 EXPECT_NE( | |
| 2412 nullptr, | |
| 2413 childProperties->localBorderBoxProperties()->propertyTreeState.effect()); | |
| 2414 CHECK_EXACT_VISUAL_RECT(LayoutRect(0, 0, 500, 600), child, clipper); | 2364 CHECK_EXACT_VISUAL_RECT(LayoutRect(0, 0, 500, 600), child, clipper); |
| 2415 } | 2365 } |
| 2416 | 2366 |
| 2417 TEST_P(PaintPropertyTreeBuilderTest, ContainsPaintContentsTreeState) { | 2367 TEST_P(PaintPropertyTreeBuilderTest, ContainsPaintContentsTreeState) { |
| 2418 setBodyInnerHTML( | 2368 setBodyInnerHTML( |
| 2419 "<style>body { margin: 20px 30px; }</style>" | 2369 "<style>body { margin: 20px 30px; }</style>" |
| 2420 "<div id='clipper'" | 2370 "<div id='clipper'" |
| 2421 " style='contain: paint; width: 300px; height: 200px;'>" | 2371 " style='contain: paint; width: 300px; height: 200px;'>" |
| 2422 " <div id='child'" | 2372 " <div id='child'" |
| 2423 " style='position: relative; width: 400px; height: 500px;'></div>" | 2373 " style='position: relative; width: 400px; height: 500px;'></div>" |
| 2424 "</div>"); | 2374 "</div>"); |
| 2425 | 2375 |
| 2426 LayoutBoxModelObject* clipper = toLayoutBoxModelObject( | 2376 LayoutBoxModelObject* clipper = toLayoutBoxModelObject( |
| 2427 document().getElementById("clipper")->layoutObject()); | 2377 document().getElementById("clipper")->layoutObject()); |
| 2428 const ObjectPaintProperties* clipProperties = clipper->paintProperties(); | 2378 const ObjectPaintProperties* clipProperties = clipper->paintProperties(); |
| 2429 LayoutObject* child = document().getElementById("child")->layoutObject(); | 2379 LayoutObject* child = document().getElementById("child")->layoutObject(); |
| 2430 const ObjectPaintProperties* childProperties = child->paintProperties(); | 2380 const ObjectPaintProperties* childProperties = child->paintProperties(); |
| 2431 | 2381 |
| 2432 // No scroll translation because the document does not scroll (not enough | 2382 // No scroll translation because the document does not scroll (not enough |
| 2433 // content). | 2383 // content). |
| 2434 EXPECT_TRUE(!frameScrollTranslation()); | 2384 EXPECT_TRUE(!frameScrollTranslation()); |
| 2435 EXPECT_EQ(framePreTranslation(), clipProperties->localBorderBoxProperties() | 2385 EXPECT_EQ(framePreTranslation(), |
| 2436 ->propertyTreeState.transform()); | 2386 clipProperties->localBorderBoxProperties()->transform()); |
| 2437 EXPECT_EQ( | 2387 EXPECT_EQ(frameContentClip(), |
| 2438 frameContentClip(), | 2388 clipProperties->localBorderBoxProperties()->clip()); |
| 2439 clipProperties->localBorderBoxProperties()->propertyTreeState.clip()); | |
| 2440 | 2389 |
| 2441 auto contentsProperties = clipProperties->contentsProperties(); | 2390 auto contentsProperties = clipProperties->contentsProperties(); |
| 2442 EXPECT_EQ(LayoutPoint(30, 20), contentsProperties.paintOffset); | 2391 EXPECT_EQ(LayoutPoint(30, 20), clipper->paintOffset()); |
| 2392 EXPECT_EQ(framePreTranslation(), contentsProperties.transform()); |
| 2393 EXPECT_EQ(clipProperties->overflowClip(), contentsProperties.clip()); |
| 2394 |
| 2443 EXPECT_EQ(framePreTranslation(), | 2395 EXPECT_EQ(framePreTranslation(), |
| 2444 contentsProperties.propertyTreeState.transform()); | 2396 childProperties->localBorderBoxProperties()->transform()); |
| 2445 EXPECT_EQ(clipProperties->overflowClip(), | 2397 EXPECT_EQ(clipProperties->overflowClip(), |
| 2446 contentsProperties.propertyTreeState.clip()); | 2398 childProperties->localBorderBoxProperties()->clip()); |
| 2447 | 2399 |
| 2448 EXPECT_EQ(framePreTranslation(), childProperties->localBorderBoxProperties() | 2400 EXPECT_NE(nullptr, childProperties->localBorderBoxProperties()->effect()); |
| 2449 ->propertyTreeState.transform()); | |
| 2450 EXPECT_EQ( | |
| 2451 clipProperties->overflowClip(), | |
| 2452 childProperties->localBorderBoxProperties()->propertyTreeState.clip()); | |
| 2453 | |
| 2454 EXPECT_NE( | |
| 2455 nullptr, | |
| 2456 childProperties->localBorderBoxProperties()->propertyTreeState.effect()); | |
| 2457 CHECK_EXACT_VISUAL_RECT(LayoutRect(0, 0, 400, 500), child, clipper); | 2401 CHECK_EXACT_VISUAL_RECT(LayoutRect(0, 0, 400, 500), child, clipper); |
| 2458 } | 2402 } |
| 2459 | 2403 |
| 2460 TEST_P(PaintPropertyTreeBuilderTest, OverflowScrollContentsTreeState) { | 2404 TEST_P(PaintPropertyTreeBuilderTest, OverflowScrollContentsTreeState) { |
| 2461 // This test verifies the tree builder correctly computes and records the | 2405 // This test verifies the tree builder correctly computes and records the |
| 2462 // property tree context for a (pseudo) stacking context that is scrolled by a | 2406 // property tree context for a (pseudo) stacking context that is scrolled by a |
| 2463 // containing block that is not one of the painting ancestors. | 2407 // containing block that is not one of the painting ancestors. |
| 2464 setBodyInnerHTML( | 2408 setBodyInnerHTML( |
| 2465 "<style>body { margin: 20px 30px; }</style>" | 2409 "<style>body { margin: 20px 30px; }</style>" |
| 2466 "<div id='clipper' style='overflow:scroll; width:400px; height:300px;'>" | 2410 "<div id='clipper' style='overflow:scroll; width:400px; height:300px;'>" |
| 2467 " <div id='child'" | 2411 " <div id='child'" |
| 2468 " style='position:relative; width:500px; height: 600px;'></div>" | 2412 " style='position:relative; width:500px; height: 600px;'></div>" |
| 2469 " <div style='width: 200px; height: 10000px'></div>" | 2413 " <div style='width: 200px; height: 10000px'></div>" |
| 2470 "</div>" | 2414 "</div>" |
| 2471 "<div id='forceScroll' style='height: 4000px;'></div>"); | 2415 "<div id='forceScroll' style='height: 4000px;'></div>"); |
| 2472 | 2416 |
| 2473 Element* clipperElement = document().getElementById("clipper"); | 2417 Element* clipperElement = document().getElementById("clipper"); |
| 2474 clipperElement->scrollTo(1, 2); | 2418 clipperElement->scrollTo(1, 2); |
| 2475 | 2419 |
| 2476 LayoutBoxModelObject* clipper = | 2420 LayoutBoxModelObject* clipper = |
| 2477 toLayoutBoxModelObject(clipperElement->layoutObject()); | 2421 toLayoutBoxModelObject(clipperElement->layoutObject()); |
| 2478 const ObjectPaintProperties* clipProperties = clipper->paintProperties(); | 2422 const ObjectPaintProperties* clipProperties = clipper->paintProperties(); |
| 2479 LayoutObject* child = document().getElementById("child")->layoutObject(); | 2423 LayoutObject* child = document().getElementById("child")->layoutObject(); |
| 2480 const ObjectPaintProperties* childProperties = child->paintProperties(); | 2424 const ObjectPaintProperties* childProperties = child->paintProperties(); |
| 2481 | 2425 |
| 2482 EXPECT_EQ(frameScrollTranslation(), clipProperties->localBorderBoxProperties() | 2426 EXPECT_EQ(frameScrollTranslation(), |
| 2483 ->propertyTreeState.transform()); | 2427 clipProperties->localBorderBoxProperties()->transform()); |
| 2484 EXPECT_EQ( | 2428 EXPECT_EQ(frameContentClip(), |
| 2485 frameContentClip(), | 2429 clipProperties->localBorderBoxProperties()->clip()); |
| 2486 clipProperties->localBorderBoxProperties()->propertyTreeState.clip()); | |
| 2487 | 2430 |
| 2488 auto contentsProperties = clipProperties->contentsProperties(); | 2431 auto contentsProperties = clipProperties->contentsProperties(); |
| 2489 EXPECT_EQ(LayoutPoint(30, 20), contentsProperties.paintOffset); | 2432 EXPECT_EQ(LayoutPoint(30, 20), clipper->paintOffset()); |
| 2490 EXPECT_EQ(clipProperties->scrollTranslation(), | 2433 EXPECT_EQ(clipProperties->scrollTranslation(), |
| 2491 contentsProperties.propertyTreeState.transform()); | 2434 contentsProperties.transform()); |
| 2492 EXPECT_EQ(clipProperties->overflowClip(), | 2435 EXPECT_EQ(clipProperties->overflowClip(), contentsProperties.clip()); |
| 2493 contentsProperties.propertyTreeState.clip()); | |
| 2494 | 2436 |
| 2495 EXPECT_EQ(clipProperties->scrollTranslation(), | 2437 EXPECT_EQ(clipProperties->scrollTranslation(), |
| 2496 childProperties->localBorderBoxProperties() | 2438 childProperties->localBorderBoxProperties()->transform()); |
| 2497 ->propertyTreeState.transform()); | 2439 EXPECT_EQ(clipProperties->overflowClip(), |
| 2498 EXPECT_EQ( | 2440 childProperties->localBorderBoxProperties()->clip()); |
| 2499 clipProperties->overflowClip(), | |
| 2500 childProperties->localBorderBoxProperties()->propertyTreeState.clip()); | |
| 2501 | 2441 |
| 2502 CHECK_EXACT_VISUAL_RECT(LayoutRect(0, 0, 500, 600), child, clipper); | 2442 CHECK_EXACT_VISUAL_RECT(LayoutRect(0, 0, 500, 600), child, clipper); |
| 2503 } | 2443 } |
| 2504 | 2444 |
| 2505 TEST_P(PaintPropertyTreeBuilderTest, OverflowScrollWithRoundedRect) { | 2445 TEST_P(PaintPropertyTreeBuilderTest, OverflowScrollWithRoundedRect) { |
| 2506 setBodyInnerHTML( | 2446 setBodyInnerHTML( |
| 2507 "<style>" | 2447 "<style>" |
| 2508 " * { margin: 0; }" | 2448 " * { margin: 0; }" |
| 2509 " ::-webkit-scrollbar {" | 2449 " ::-webkit-scrollbar {" |
| 2510 " width: 13px;" | 2450 " width: 13px;" |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2560 "</div>"); | 2500 "</div>"); |
| 2561 | 2501 |
| 2562 LayoutBoxModelObject* clipper = toLayoutBoxModelObject( | 2502 LayoutBoxModelObject* clipper = toLayoutBoxModelObject( |
| 2563 document().getElementById("clipper")->layoutObject()); | 2503 document().getElementById("clipper")->layoutObject()); |
| 2564 const ObjectPaintProperties* clipProperties = clipper->paintProperties(); | 2504 const ObjectPaintProperties* clipProperties = clipper->paintProperties(); |
| 2565 LayoutObject* child = document().getElementById("child")->layoutObject(); | 2505 LayoutObject* child = document().getElementById("child")->layoutObject(); |
| 2566 | 2506 |
| 2567 // No scroll translation because the document does not scroll (not enough | 2507 // No scroll translation because the document does not scroll (not enough |
| 2568 // content). | 2508 // content). |
| 2569 EXPECT_TRUE(!frameScrollTranslation()); | 2509 EXPECT_TRUE(!frameScrollTranslation()); |
| 2570 EXPECT_EQ(framePreTranslation(), clipProperties->localBorderBoxProperties() | 2510 EXPECT_EQ(framePreTranslation(), |
| 2571 ->propertyTreeState.transform()); | 2511 clipProperties->localBorderBoxProperties()->transform()); |
| 2572 // CSS clip on an element causes it to clip itself, not just descendants. | 2512 // CSS clip on an element causes it to clip itself, not just descendants. |
| 2573 EXPECT_EQ( | 2513 EXPECT_EQ(clipProperties->cssClip(), |
| 2574 clipProperties->cssClip(), | 2514 clipProperties->localBorderBoxProperties()->clip()); |
| 2575 clipProperties->localBorderBoxProperties()->propertyTreeState.clip()); | |
| 2576 | 2515 |
| 2577 auto contentsProperties = clipProperties->contentsProperties(); | 2516 auto contentsProperties = clipProperties->contentsProperties(); |
| 2578 EXPECT_EQ(LayoutPoint(30, 20), contentsProperties.paintOffset); | 2517 EXPECT_EQ(LayoutPoint(30, 20), clipper->paintOffset()); |
| 2579 EXPECT_EQ(framePreTranslation(), | 2518 EXPECT_EQ(framePreTranslation(), contentsProperties.transform()); |
| 2580 contentsProperties.propertyTreeState.transform()); | 2519 EXPECT_EQ(clipProperties->cssClip(), contentsProperties.clip()); |
| 2581 EXPECT_EQ(clipProperties->cssClip(), | |
| 2582 contentsProperties.propertyTreeState.clip()); | |
| 2583 | 2520 |
| 2584 CHECK_EXACT_VISUAL_RECT(LayoutRect(0, 0, 400, 500), child, clipper); | 2521 CHECK_EXACT_VISUAL_RECT(LayoutRect(0, 0, 400, 500), child, clipper); |
| 2585 } | 2522 } |
| 2586 | 2523 |
| 2587 TEST_P(PaintPropertyTreeBuilderTest, | 2524 TEST_P(PaintPropertyTreeBuilderTest, |
| 2588 SvgLocalToBorderBoxTransformContentsTreeState) { | 2525 SvgLocalToBorderBoxTransformContentsTreeState) { |
| 2589 setBodyInnerHTML( | 2526 setBodyInnerHTML( |
| 2590 "<style>" | 2527 "<style>" |
| 2591 " body {" | 2528 " body {" |
| 2592 " margin: 20px 30px;" | 2529 " margin: 20px 30px;" |
| 2593 " }" | 2530 " }" |
| 2594 " svg {" | 2531 " svg {" |
| 2595 " position: absolute;" | 2532 " position: absolute;" |
| 2596 " }" | 2533 " }" |
| 2597 " rect {" | 2534 " rect {" |
| 2598 " transform: translate(100px, 100px);" | 2535 " transform: translate(100px, 100px);" |
| 2599 " }" | 2536 " }" |
| 2600 "</style>" | 2537 "</style>" |
| 2601 "<svg id='svgWithViewBox' width='100px' height='100px' viewBox='50 50 " | 2538 "<svg id='svgWithViewBox' width='100px' height='100px' viewBox='50 50 " |
| 2602 "100 100'>" | 2539 "100 100'>" |
| 2603 " <rect id='rect' width='100px' height='100px' />" | 2540 " <rect id='rect' width='100px' height='100px' />" |
| 2604 "</svg>"); | 2541 "</svg>"); |
| 2605 | 2542 |
| 2606 LayoutObject& svgWithViewBox = | 2543 LayoutObject& svgWithViewBox = |
| 2607 *document().getElementById("svgWithViewBox")->layoutObject(); | 2544 *document().getElementById("svgWithViewBox")->layoutObject(); |
| 2608 const ObjectPaintProperties* svgWithViewBoxProperties = | 2545 const ObjectPaintProperties* svgWithViewBoxProperties = |
| 2609 svgWithViewBox.paintProperties(); | 2546 svgWithViewBox.paintProperties(); |
| 2610 | 2547 |
| 2611 EXPECT_EQ(framePreTranslation(), | 2548 EXPECT_EQ(framePreTranslation(), |
| 2612 svgWithViewBoxProperties->localBorderBoxProperties() | 2549 svgWithViewBoxProperties->localBorderBoxProperties()->transform()); |
| 2613 ->propertyTreeState.transform()); | |
| 2614 | 2550 |
| 2615 auto contentsProperties = svgWithViewBoxProperties->contentsProperties(); | 2551 auto contentsProperties = svgWithViewBoxProperties->contentsProperties(); |
| 2616 EXPECT_EQ(LayoutPoint(30, 20), contentsProperties.paintOffset); | 2552 EXPECT_EQ(LayoutPoint(30, 20), svgWithViewBox.paintOffset()); |
| 2617 EXPECT_EQ(framePreTranslation(), | 2553 EXPECT_EQ(framePreTranslation(), contentsProperties.transform()); |
| 2618 contentsProperties.propertyTreeState.transform()); | |
| 2619 } | 2554 } |
| 2620 | 2555 |
| 2621 TEST_P(PaintPropertyTreeBuilderTest, OverflowHiddenScrollProperties) { | 2556 TEST_P(PaintPropertyTreeBuilderTest, OverflowHiddenScrollProperties) { |
| 2622 setBodyInnerHTML( | 2557 setBodyInnerHTML( |
| 2623 "<style>" | 2558 "<style>" |
| 2624 " body {" | 2559 " body {" |
| 2625 " margin: 0px;" | 2560 " margin: 0px;" |
| 2626 " }" | 2561 " }" |
| 2627 " #overflowHidden {" | 2562 " #overflowHidden {" |
| 2628 " overflow: hidden;" | 2563 " overflow: hidden;" |
| (...skipping 331 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2960 " <div id=top-left class=abs style='top: 0; left: 0'></div>" | 2895 " <div id=top-left class=abs style='top: 0; left: 0'></div>" |
| 2961 " <div id=bottom-right class=abs style='bottom: 0; right: 0'></div>" | 2896 " <div id=bottom-right class=abs style='bottom: 0; right: 0'></div>" |
| 2962 " </div>" | 2897 " </div>" |
| 2963 " <div id=space3 class=space></div>" | 2898 " <div id=space3 class=space></div>" |
| 2964 " <div id=space4 class=space></div>" | 2899 " <div id=space4 class=space></div>" |
| 2965 " </div>" | 2900 " </div>" |
| 2966 "</div>"); | 2901 "</div>"); |
| 2967 | 2902 |
| 2968 // Above the spanner. | 2903 // Above the spanner. |
| 2969 // Column 1. | 2904 // Column 1. |
| 2970 EXPECT_EQ(LayoutPoint(), paintOffset(getLayoutObjectByElementId("space1"))); | 2905 EXPECT_EQ(LayoutPoint(), getLayoutObjectByElementId("space1")->paintOffset()); |
| 2971 // Column 2. TODO(crbug.com/648274): This is incorrect. Should be (100, 0). | 2906 // Column 2. TODO(crbug.com/648274): This is incorrect. Should be (100, 0). |
| 2972 EXPECT_EQ(LayoutPoint(0, 30), | 2907 EXPECT_EQ(LayoutPoint(0, 30), |
| 2973 paintOffset(getLayoutObjectByElementId("space2"))); | 2908 getLayoutObjectByElementId("space2")->paintOffset()); |
| 2974 | 2909 |
| 2975 // The spanner's normal flow. | 2910 // The spanner's normal flow. |
| 2976 EXPECT_EQ(LayoutPoint(0, 30), | 2911 EXPECT_EQ(LayoutPoint(0, 30), |
| 2977 paintOffset(getLayoutObjectByElementId("spanner"))); | 2912 getLayoutObjectByElementId("spanner")->paintOffset()); |
| 2978 EXPECT_EQ(LayoutPoint(0, 30), | 2913 EXPECT_EQ(LayoutPoint(0, 30), |
| 2979 paintOffset(getLayoutObjectByElementId("normal"))); | 2914 getLayoutObjectByElementId("normal")->paintOffset()); |
| 2980 | 2915 |
| 2981 // Below the spanner. | 2916 // Below the spanner. |
| 2982 // Column 1. TODO(crbug.com/648274): This is incorrect. Should be (0, 80). | 2917 // Column 1. TODO(crbug.com/648274): This is incorrect. Should be (0, 80). |
| 2983 EXPECT_EQ(LayoutPoint(0, 60), | 2918 EXPECT_EQ(LayoutPoint(0, 60), |
| 2984 paintOffset(getLayoutObjectByElementId("space3"))); | 2919 getLayoutObjectByElementId("space3")->paintOffset()); |
| 2985 // Column 2. TODO(crbug.com/648274): This is incorrect. Should be (100, 80). | 2920 // Column 2. TODO(crbug.com/648274): This is incorrect. Should be (100, 80). |
| 2986 EXPECT_EQ(LayoutPoint(0, 90), | 2921 EXPECT_EQ(LayoutPoint(0, 90), |
| 2987 paintOffset(getLayoutObjectByElementId("space4"))); | 2922 getLayoutObjectByElementId("space4")->paintOffset()); |
| 2988 | 2923 |
| 2989 // Out-of-flow positioned descendants of the spanner. They are laid out in | 2924 // Out-of-flow positioned descendants of the spanner. They are laid out in |
| 2990 // the relative-position container. | 2925 // the relative-position container. |
| 2991 | 2926 |
| 2992 // "top-left" should be aligned to the top-left corner of space1. | 2927 // "top-left" should be aligned to the top-left corner of space1. |
| 2993 EXPECT_EQ(LayoutPoint(0, 0), | 2928 EXPECT_EQ(LayoutPoint(0, 0), |
| 2994 paintOffset(getLayoutObjectByElementId("top-left"))); | 2929 getLayoutObjectByElementId("top-left")->paintOffset()); |
| 2995 | 2930 |
| 2996 // "bottom-right" should be aligned to the bottom-right corner of space4. | 2931 // "bottom-right" should be aligned to the bottom-right corner of space4. |
| 2997 // TODO(crbug.com/648274): This is incorrect. Should be (180, 90). | 2932 // TODO(crbug.com/648274): This is incorrect. Should be (180, 90). |
| 2998 EXPECT_EQ(LayoutPoint(80, 100), | 2933 EXPECT_EQ(LayoutPoint(80, 100), |
| 2999 paintOffset(getLayoutObjectByElementId("bottom-right"))); | 2934 getLayoutObjectByElementId("bottom-right")->paintOffset()); |
| 3000 } | 2935 } |
| 3001 | 2936 |
| 3002 // Ensures no crash with multi-column containing relative-position inline with | 2937 // Ensures no crash with multi-column containing relative-position inline with |
| 3003 // spanner with absolute-position children. | 2938 // spanner with absolute-position children. |
| 3004 TEST_P(PaintPropertyTreeBuilderTest, | 2939 TEST_P(PaintPropertyTreeBuilderTest, |
| 3005 MultiColumnInlineRelativeAndSpannerAndAbsPos) { | 2940 MultiColumnInlineRelativeAndSpannerAndAbsPos) { |
| 3006 setBodyInnerHTML( | 2941 setBodyInnerHTML( |
| 3007 "<div style='columns:2; width: 200px; column-gap: 0'>" | 2942 "<div style='columns:2; width: 200px; column-gap: 0'>" |
| 3008 " <span style='position: relative'>" | 2943 " <span style='position: relative'>" |
| 3009 " <span id=spanner style='column-span: all'>" | 2944 " <span id=spanner style='column-span: all'>" |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3050 const ObjectPaintProperties* clipProperties = | 2985 const ObjectPaintProperties* clipProperties = |
| 3051 getLayoutObjectByElementId("clip")->paintProperties(); | 2986 getLayoutObjectByElementId("clip")->paintProperties(); |
| 3052 const ObjectPaintProperties* filterProperties = | 2987 const ObjectPaintProperties* filterProperties = |
| 3053 getLayoutObjectByElementId("filter")->paintProperties(); | 2988 getLayoutObjectByElementId("filter")->paintProperties(); |
| 3054 EXPECT_TRUE(filterProperties->effect()->parent()->isRoot()); | 2989 EXPECT_TRUE(filterProperties->effect()->parent()->isRoot()); |
| 3055 EXPECT_EQ(frameScrollTranslation(), | 2990 EXPECT_EQ(frameScrollTranslation(), |
| 3056 filterProperties->effect()->localTransformSpace()); | 2991 filterProperties->effect()->localTransformSpace()); |
| 3057 EXPECT_EQ(clipProperties->overflowClip(), | 2992 EXPECT_EQ(clipProperties->overflowClip(), |
| 3058 filterProperties->effect()->outputClip()); | 2993 filterProperties->effect()->outputClip()); |
| 3059 | 2994 |
| 3060 const ObjectPaintProperties* childProperties = | |
| 3061 getLayoutObjectByElementId("child")->paintProperties(); | |
| 3062 const PropertyTreeState& childPaintState = | 2995 const PropertyTreeState& childPaintState = |
| 3063 childProperties->localBorderBoxProperties()->propertyTreeState; | 2996 *getLayoutObjectByElementId("child") |
| 2997 ->paintProperties() |
| 2998 ->localBorderBoxProperties(); |
| 3064 | 2999 |
| 3065 // This will change once we added clip expansion node. | 3000 // This will change once we added clip expansion node. |
| 3066 EXPECT_EQ(filterProperties->effect()->outputClip(), childPaintState.clip()); | 3001 EXPECT_EQ(filterProperties->effect()->outputClip(), childPaintState.clip()); |
| 3067 EXPECT_EQ(filterProperties->effect(), childPaintState.effect()); | 3002 EXPECT_EQ(filterProperties->effect(), childPaintState.effect()); |
| 3068 } | 3003 } |
| 3069 | 3004 |
| 3070 TEST_P(PaintPropertyTreeBuilderTest, TransformOriginWithAndWithoutTransform) { | 3005 TEST_P(PaintPropertyTreeBuilderTest, TransformOriginWithAndWithoutTransform) { |
| 3071 setBodyInnerHTML( | 3006 setBodyInnerHTML( |
| 3072 "<style>" | 3007 "<style>" |
| 3073 " body { margin: 0 }" | 3008 " body { margin: 0 }" |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3143 " #ancestor { position: absolute; overflow: hidden }" | 3078 " #ancestor { position: absolute; overflow: hidden }" |
| 3144 " #descendant { position: absolute }" | 3079 " #descendant { position: absolute }" |
| 3145 "</style>" | 3080 "</style>" |
| 3146 "<div id='ancestor'>" | 3081 "<div id='ancestor'>" |
| 3147 " <div id='descendant'></div>" | 3082 " <div id='descendant'></div>" |
| 3148 "</div>"); | 3083 "</div>"); |
| 3149 | 3084 |
| 3150 LayoutObject* ancestor = getLayoutObjectByElementId("ancestor"); | 3085 LayoutObject* ancestor = getLayoutObjectByElementId("ancestor"); |
| 3151 LayoutObject* descendant = getLayoutObjectByElementId("descendant"); | 3086 LayoutObject* descendant = getLayoutObjectByElementId("descendant"); |
| 3152 EXPECT_EQ(ancestor->paintProperties()->overflowClip(), | 3087 EXPECT_EQ(ancestor->paintProperties()->overflowClip(), |
| 3153 descendant->paintProperties() | 3088 descendant->paintProperties()->localBorderBoxProperties()->clip()); |
| 3154 ->localBorderBoxProperties() | |
| 3155 ->propertyTreeState.clip()); | |
| 3156 | 3089 |
| 3157 toElement(ancestor->node()) | 3090 toElement(ancestor->node()) |
| 3158 ->setAttribute(HTMLNames::styleAttr, "position: static"); | 3091 ->setAttribute(HTMLNames::styleAttr, "position: static"); |
| 3159 document().view()->updateAllLifecyclePhases(); | 3092 document().view()->updateAllLifecyclePhases(); |
| 3160 EXPECT_NE(ancestor->paintProperties()->overflowClip(), | 3093 EXPECT_NE(ancestor->paintProperties()->overflowClip(), |
| 3161 descendant->paintProperties() | 3094 descendant->paintProperties()->localBorderBoxProperties()->clip()); |
| 3162 ->localBorderBoxProperties() | |
| 3163 ->propertyTreeState.clip()); | |
| 3164 } | 3095 } |
| 3165 | 3096 |
| 3166 TEST_P(PaintPropertyTreeBuilderTest, | 3097 TEST_P(PaintPropertyTreeBuilderTest, |
| 3167 TransformNodeNotAnimatedHasNoCompositorElementId) { | 3098 TransformNodeNotAnimatedHasNoCompositorElementId) { |
| 3168 setBodyInnerHTML("<div id='target' style='transform: translateX(2em)'></div"); | 3099 setBodyInnerHTML("<div id='target' style='transform: translateX(2em)'></div"); |
| 3169 const ObjectPaintProperties* properties = paintPropertiesForElement("target"); | 3100 const ObjectPaintProperties* properties = paintPropertiesForElement("target"); |
| 3170 EXPECT_TRUE(properties->transform()); | 3101 EXPECT_TRUE(properties->transform()); |
| 3171 EXPECT_EQ(CompositorElementId(), | 3102 EXPECT_EQ(CompositorElementId(), |
| 3172 properties->transform()->compositorElementId()); | 3103 properties->transform()->compositorElementId()); |
| 3173 } | 3104 } |
| (...skipping 16 matching lines...) Expand all Loading... |
| 3190 } | 3121 } |
| 3191 | 3122 |
| 3192 TEST_P(PaintPropertyTreeBuilderTest, EffectNodeAnimatedHasCompositorElementId) { | 3123 TEST_P(PaintPropertyTreeBuilderTest, EffectNodeAnimatedHasCompositorElementId) { |
| 3193 loadTestData("opacity-animation.html"); | 3124 loadTestData("opacity-animation.html"); |
| 3194 const ObjectPaintProperties* properties = paintPropertiesForElement("target"); | 3125 const ObjectPaintProperties* properties = paintPropertiesForElement("target"); |
| 3195 EXPECT_TRUE(properties->effect()); | 3126 EXPECT_TRUE(properties->effect()); |
| 3196 EXPECT_NE(CompositorElementId(), properties->effect()->compositorElementId()); | 3127 EXPECT_NE(CompositorElementId(), properties->effect()->compositorElementId()); |
| 3197 } | 3128 } |
| 3198 | 3129 |
| 3199 } // namespace blink | 3130 } // namespace blink |
| OLD | NEW |