| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "core/layout/compositing/CompositedLayerMapping.h" | 5 #include "core/layout/compositing/CompositedLayerMapping.h" |
| 6 | 6 |
| 7 #include "core/frame/FrameView.h" | 7 #include "core/frame/FrameView.h" |
| 8 #include "core/layout/LayoutBoxModelObject.h" | 8 #include "core/layout/LayoutBoxModelObject.h" |
| 9 #include "core/layout/LayoutTestHelper.h" | 9 #include "core/layout/LayoutTestHelper.h" |
| 10 #include "core/layout/api/LayoutViewItem.h" | 10 #include "core/layout/api/LayoutViewItem.h" |
| (...skipping 1523 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1534 WebLayerStickyPositionConstraint constraint = | 1534 WebLayerStickyPositionConstraint constraint = |
| 1535 sticky->mainGraphicsLayer() | 1535 sticky->mainGraphicsLayer() |
| 1536 ->contentLayer() | 1536 ->contentLayer() |
| 1537 ->layer() | 1537 ->layer() |
| 1538 ->stickyPositionConstraint(); | 1538 ->stickyPositionConstraint(); |
| 1539 EXPECT_EQ(IntPoint(0, 50), | 1539 EXPECT_EQ(IntPoint(0, 50), |
| 1540 IntPoint(constraint.parentRelativeStickyBoxOffset)); | 1540 IntPoint(constraint.parentRelativeStickyBoxOffset)); |
| 1541 } | 1541 } |
| 1542 | 1542 |
| 1543 TEST_P(CompositedLayerMappingTest, StickyPositionEnclosingLayersContentOffset) { | 1543 TEST_P(CompositedLayerMappingTest, StickyPositionEnclosingLayersContentOffset) { |
| 1544 // Using backface-visibility: hidden causes the scroller to become composited |
| 1545 // without creating a stacking context. This is important as enclosing layer |
| 1546 // scroll correction works differently depending on whether you are in a |
| 1547 // stacking context or not. |
| 1548 setBodyInnerHTML( |
| 1549 "<style>.composited { backface-visibility: hidden; }" |
| 1550 "#scroller { overflow: auto; height: 200px; width: 200px; }" |
| 1551 ".container { height: 500px; }" |
| 1552 ".innerPadding { height: 10px; }" |
| 1553 "#sticky { position: sticky; top: 25px; height: 50px; }</style>" |
| 1554 "<div id='scroller' class='composited'>" |
| 1555 " <div class='composited container'>" |
| 1556 " <div class='composited container'>" |
| 1557 " <div class='innerPadding'></div>" |
| 1558 " <div id='sticky' class='composited'></div>" |
| 1559 " </div></div></div>"); |
| 1560 |
| 1561 PaintLayer* stickyLayer = |
| 1562 toLayoutBox(getLayoutObjectByElementId("sticky"))->layer(); |
| 1563 CompositedLayerMapping* stickyMapping = stickyLayer->compositedLayerMapping(); |
| 1564 ASSERT_TRUE(stickyMapping); |
| 1565 |
| 1566 WebLayerStickyPositionConstraint constraint = |
| 1567 stickyMapping->mainGraphicsLayer() |
| 1568 ->contentLayer() |
| 1569 ->layer() |
| 1570 ->stickyPositionConstraint(); |
| 1571 EXPECT_EQ(IntPoint(0, 10), |
| 1572 IntPoint(constraint.parentRelativeStickyBoxOffset)); |
| 1573 |
| 1574 // Now scroll the page - this should not affect the parent-relative offset. |
| 1575 LayoutBoxModelObject* scroller = |
| 1576 toLayoutBoxModelObject(getLayoutObjectByElementId("scroller")); |
| 1577 PaintLayerScrollableArea* scrollableArea = scroller->getScrollableArea(); |
| 1578 scrollableArea->scrollToAbsolutePosition( |
| 1579 FloatPoint(scrollableArea->scrollPosition().x(), 100)); |
| 1580 ASSERT_EQ(100.0, scrollableArea->scrollPosition().y()); |
| 1581 |
| 1582 stickyLayer->setNeedsCompositingInputsUpdate(); |
| 1583 EXPECT_TRUE(stickyLayer->needsCompositingInputsUpdate()); |
| 1584 document().view()->updateLifecycleToCompositingCleanPlusScrolling(); |
| 1585 EXPECT_FALSE(stickyLayer->needsCompositingInputsUpdate()); |
| 1586 |
| 1587 constraint = stickyMapping->mainGraphicsLayer() |
| 1588 ->contentLayer() |
| 1589 ->layer() |
| 1590 ->stickyPositionConstraint(); |
| 1591 EXPECT_EQ(IntPoint(0, 10), |
| 1592 IntPoint(constraint.parentRelativeStickyBoxOffset)); |
| 1593 } |
| 1594 |
| 1595 TEST_P(CompositedLayerMappingTest, |
| 1596 StickyPositionEnclosingLayersWithStackingContextContentOffset) { |
| 1597 // Using will-change: transform causes the scroller to become a stacking |
| 1598 // context. This changes how its descendant layers interact with it; they no |
| 1599 // longer have a scrollParent and instead just refer to it only as their |
| 1600 // ancestorOverflowLayer. |
| 1544 setBodyInnerHTML( | 1601 setBodyInnerHTML( |
| 1545 "<style>.composited { will-change: transform; }" | 1602 "<style>.composited { will-change: transform; }" |
| 1546 "#scroller { overflow: auto; height: 200px; width: 200px; }" | 1603 "#scroller { overflow: auto; height: 200px; width: 200px; }" |
| 1547 ".container { height: 500px; }" | 1604 ".container { height: 500px; }" |
| 1548 ".innerPadding { height: 10px; }" | 1605 ".innerPadding { height: 10px; }" |
| 1549 "#sticky { position: sticky; top: 25px; height: 50px; }</style>" | 1606 "#sticky { position: sticky; top: 25px; height: 50px; }</style>" |
| 1550 "<div id='scroller' class='composited'>" | 1607 "<div id='scroller' class='composited'>" |
| 1551 "<div class='composited container'>" | |
| 1552 " <div class='composited container'>" | 1608 " <div class='composited container'>" |
| 1553 " <div class='innerPadding'></div>" | 1609 " <div class='composited container'>" |
| 1554 " <div id='sticky' class='composited'></div>" | 1610 " <div class='innerPadding'></div>" |
| 1611 " <div id='sticky' class='composited'></div>" |
| 1555 " </div></div></div>"); | 1612 " </div></div></div>"); |
| 1556 | 1613 |
| 1557 PaintLayer* stickyLayer = | 1614 PaintLayer* stickyLayer = |
| 1558 toLayoutBox(getLayoutObjectByElementId("sticky"))->layer(); | 1615 toLayoutBox(getLayoutObjectByElementId("sticky"))->layer(); |
| 1559 CompositedLayerMapping* stickyMapping = stickyLayer->compositedLayerMapping(); | 1616 CompositedLayerMapping* stickyMapping = stickyLayer->compositedLayerMapping(); |
| 1560 ASSERT_TRUE(stickyMapping); | 1617 ASSERT_TRUE(stickyMapping); |
| 1561 | 1618 |
| 1562 WebLayerStickyPositionConstraint constraint = | 1619 WebLayerStickyPositionConstraint constraint = |
| 1563 stickyMapping->mainGraphicsLayer() | 1620 stickyMapping->mainGraphicsLayer() |
| 1564 ->contentLayer() | 1621 ->contentLayer() |
| (...skipping 17 matching lines...) Expand all Loading... |
| 1582 | 1639 |
| 1583 constraint = stickyMapping->mainGraphicsLayer() | 1640 constraint = stickyMapping->mainGraphicsLayer() |
| 1584 ->contentLayer() | 1641 ->contentLayer() |
| 1585 ->layer() | 1642 ->layer() |
| 1586 ->stickyPositionConstraint(); | 1643 ->stickyPositionConstraint(); |
| 1587 EXPECT_EQ(IntPoint(0, 10), | 1644 EXPECT_EQ(IntPoint(0, 10), |
| 1588 IntPoint(constraint.parentRelativeStickyBoxOffset)); | 1645 IntPoint(constraint.parentRelativeStickyBoxOffset)); |
| 1589 } | 1646 } |
| 1590 | 1647 |
| 1591 } // namespace blink | 1648 } // namespace blink |
| OLD | NEW |