| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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/LayoutInline.h" | 5 #include "core/layout/LayoutInline.h" |
| 6 #include "core/layout/LayoutTestHelper.h" | 6 #include "core/layout/LayoutTestHelper.h" |
| 7 #include "core/layout/LayoutView.h" | 7 #include "core/layout/LayoutView.h" |
| 8 #include "platform/geometry/TransformState.h" | 8 #include "platform/geometry/TransformState.h" |
| 9 #include "testing/gtest/include/gtest/gtest.h" | 9 #include "testing/gtest/include/gtest/gtest.h" |
| 10 | 10 |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 133 setBodyInnerHTML( | 133 setBodyInnerHTML( |
| 134 "<div id='overflow' style='height: 100px; width: 100px; border:8px " | 134 "<div id='overflow' style='height: 100px; width: 100px; border:8px " |
| 135 "solid; padding:7px; overflow:scroll'>" | 135 "solid; padding:7px; overflow:scroll'>" |
| 136 " <div style='height:200px; width:200px'></div>" | 136 " <div style='height:200px; width:200px'></div>" |
| 137 " <div id='target' style='margin:10px; border:666px; " | 137 " <div id='target' style='margin:10px; border:666px; " |
| 138 "padding:666px;'></div>" | 138 "padding:666px;'></div>" |
| 139 "</div>"); | 139 "</div>"); |
| 140 | 140 |
| 141 LayoutObject* target = getLayoutObjectByElementId("target"); | 141 LayoutObject* target = getLayoutObjectByElementId("target"); |
| 142 LayoutObject* overflow = getLayoutObjectByElementId("overflow"); | 142 LayoutObject* overflow = getLayoutObjectByElementId("overflow"); |
| 143 toLayoutBox(overflow)->scrollToOffset(DoubleSize(32, 54)); | 143 toLayoutBox(overflow)->scrollToPosition(FloatPoint(32, 54)); |
| 144 | 144 |
| 145 FloatPoint mappedPoint = mapLocalToAncestor( | 145 FloatPoint mappedPoint = mapLocalToAncestor( |
| 146 target, toLayoutBoxModelObject(target->parent()), FloatPoint(100, 100)); | 146 target, toLayoutBoxModelObject(target->parent()), FloatPoint(100, 100)); |
| 147 EXPECT_EQ(FloatPoint(93, 271), mappedPoint); | 147 EXPECT_EQ(FloatPoint(93, 271), mappedPoint); |
| 148 mappedPoint = mapAncestorToLocal( | 148 mappedPoint = mapAncestorToLocal( |
| 149 target, toLayoutBoxModelObject(target->parent()), mappedPoint); | 149 target, toLayoutBoxModelObject(target->parent()), mappedPoint); |
| 150 EXPECT_EQ(FloatPoint(100, 100), mappedPoint); | 150 EXPECT_EQ(FloatPoint(100, 100), mappedPoint); |
| 151 } | 151 } |
| 152 | 152 |
| 153 TEST_F(MapCoordinatesTest, TextInRelPosInline) { | 153 TEST_F(MapCoordinatesTest, TextInRelPosInline) { |
| (...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 506 | 506 |
| 507 TEST_F(MapCoordinatesTest, FixedPosInTransform) { | 507 TEST_F(MapCoordinatesTest, FixedPosInTransform) { |
| 508 setBodyInnerHTML( | 508 setBodyInnerHTML( |
| 509 "<style>#container { transform: translateY(100px); position: absolute; " | 509 "<style>#container { transform: translateY(100px); position: absolute; " |
| 510 "left: 0; top: 100px; }" | 510 "left: 0; top: 100px; }" |
| 511 ".fixed { position: fixed; top: 0; }" | 511 ".fixed { position: fixed; top: 0; }" |
| 512 ".spacer { height: 2000px; } </style>" | 512 ".spacer { height: 2000px; } </style>" |
| 513 "<div id='container'><div class='fixed' id='target'></div></div>" | 513 "<div id='container'><div class='fixed' id='target'></div></div>" |
| 514 "<div class='spacer'></div>"); | 514 "<div class='spacer'></div>"); |
| 515 | 515 |
| 516 document().view()->setScrollPosition(DoublePoint(0.0, 50), | 516 document().view()->setScrollOffset(ScrollOffset(0.0, 50), ProgrammaticScroll); |
| 517 ProgrammaticScroll); | |
| 518 document().view()->updateAllLifecyclePhases(); | 517 document().view()->updateAllLifecyclePhases(); |
| 519 EXPECT_EQ(50, document().view()->scrollPosition().y()); | 518 EXPECT_EQ(50, document().view()->scrollOffsetInt().height()); |
| 520 | 519 |
| 521 LayoutBox* target = toLayoutBox(getLayoutObjectByElementId("target")); | 520 LayoutBox* target = toLayoutBox(getLayoutObjectByElementId("target")); |
| 522 LayoutBox* container = toLayoutBox(getLayoutObjectByElementId("container")); | 521 LayoutBox* container = toLayoutBox(getLayoutObjectByElementId("container")); |
| 523 LayoutBox* body = container->parentBox(); | 522 LayoutBox* body = container->parentBox(); |
| 524 LayoutBox* html = body->parentBox(); | 523 LayoutBox* html = body->parentBox(); |
| 525 LayoutBox* view = html->parentBox(); | 524 LayoutBox* view = html->parentBox(); |
| 526 ASSERT_TRUE(view->isLayoutView()); | 525 ASSERT_TRUE(view->isLayoutView()); |
| 527 | 526 |
| 528 FloatPoint mappedPoint = mapLocalToAncestor(target, view, FloatPoint()); | 527 FloatPoint mappedPoint = mapLocalToAncestor(target, view, FloatPoint()); |
| 529 EXPECT_EQ(FloatPoint(0, 100), mappedPoint); | 528 EXPECT_EQ(FloatPoint(0, 100), mappedPoint); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 543 | 542 |
| 544 TEST_F(MapCoordinatesTest, FixedPosInContainPaint) { | 543 TEST_F(MapCoordinatesTest, FixedPosInContainPaint) { |
| 545 setBodyInnerHTML( | 544 setBodyInnerHTML( |
| 546 "<style>#container { contain: paint; position: absolute; left: 0; top: " | 545 "<style>#container { contain: paint; position: absolute; left: 0; top: " |
| 547 "100px; }" | 546 "100px; }" |
| 548 ".fixed { position: fixed; top: 0; }" | 547 ".fixed { position: fixed; top: 0; }" |
| 549 ".spacer { height: 2000px; } </style>" | 548 ".spacer { height: 2000px; } </style>" |
| 550 "<div id='container'><div class='fixed' id='target'></div></div>" | 549 "<div id='container'><div class='fixed' id='target'></div></div>" |
| 551 "<div class='spacer'></div>"); | 550 "<div class='spacer'></div>"); |
| 552 | 551 |
| 553 document().view()->setScrollPosition(DoublePoint(0.0, 50), | 552 document().view()->setScrollOffset(ScrollOffset(0.0, 50), ProgrammaticScroll); |
| 554 ProgrammaticScroll); | |
| 555 document().view()->updateAllLifecyclePhases(); | 553 document().view()->updateAllLifecyclePhases(); |
| 556 EXPECT_EQ(50, document().view()->scrollPosition().y()); | 554 EXPECT_EQ(50, document().view()->scrollOffsetInt().height()); |
| 557 | 555 |
| 558 LayoutBox* target = toLayoutBox(getLayoutObjectByElementId("target")); | 556 LayoutBox* target = toLayoutBox(getLayoutObjectByElementId("target")); |
| 559 LayoutBox* container = toLayoutBox(getLayoutObjectByElementId("container")); | 557 LayoutBox* container = toLayoutBox(getLayoutObjectByElementId("container")); |
| 560 LayoutBox* body = container->parentBox(); | 558 LayoutBox* body = container->parentBox(); |
| 561 LayoutBox* html = body->parentBox(); | 559 LayoutBox* html = body->parentBox(); |
| 562 LayoutBox* view = html->parentBox(); | 560 LayoutBox* view = html->parentBox(); |
| 563 ASSERT_TRUE(view->isLayoutView()); | 561 ASSERT_TRUE(view->isLayoutView()); |
| 564 | 562 |
| 565 FloatPoint mappedPoint = mapLocalToAncestor(target, view, FloatPoint()); | 563 FloatPoint mappedPoint = mapLocalToAncestor(target, view, FloatPoint()); |
| 566 EXPECT_EQ(FloatPoint(0, 100), mappedPoint); | 564 EXPECT_EQ(FloatPoint(0, 100), mappedPoint); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 586 "<div style='width: 200; height: 8000px'></div>" | 584 "<div style='width: 200; height: 8000px'></div>" |
| 587 "<iframe id=frame src='http://test.com' width='500' height='500' " | 585 "<iframe id=frame src='http://test.com' width='500' height='500' " |
| 588 "frameBorder='0'>" | 586 "frameBorder='0'>" |
| 589 "</iframe>"); | 587 "</iframe>"); |
| 590 | 588 |
| 591 Document& frameDocument = setupChildIframe( | 589 Document& frameDocument = setupChildIframe( |
| 592 "frame", | 590 "frame", |
| 593 "<style>body { margin: 0; } #target { width: 200px; height: 200px; " | 591 "<style>body { margin: 0; } #target { width: 200px; height: 200px; " |
| 594 "position:fixed}</style><div id=target></div>"); | 592 "position:fixed}</style><div id=target></div>"); |
| 595 | 593 |
| 596 document().view()->setScrollPosition(DoublePoint(0.0, 1000), | 594 document().view()->setScrollOffset(ScrollOffset(0.0, 1000), |
| 597 ProgrammaticScroll); | 595 ProgrammaticScroll); |
| 598 document().view()->updateAllLifecyclePhases(); | 596 document().view()->updateAllLifecyclePhases(); |
| 599 | 597 |
| 600 Element* target = frameDocument.getElementById("target"); | 598 Element* target = frameDocument.getElementById("target"); |
| 601 ASSERT_TRUE(target); | 599 ASSERT_TRUE(target); |
| 602 FloatPoint mappedPoint = | 600 FloatPoint mappedPoint = |
| 603 mapAncestorToLocal(target->layoutObject(), nullptr, FloatPoint(10, 70), | 601 mapAncestorToLocal(target->layoutObject(), nullptr, FloatPoint(10, 70), |
| 604 TraverseDocumentBoundaries); | 602 TraverseDocumentBoundaries); |
| 605 | 603 |
| 606 // y = 70 - 8000, since the iframe is offset by 8000px from the main frame. | 604 // y = 70 - 8000, since the iframe is offset by 8000px from the main frame. |
| 607 // The scroll is not taken into account because the element is not fixed to th
e root LayoutView, | 605 // The scroll is not taken into account because the element is not fixed to th
e root LayoutView, |
| 608 // and the space of the root LayoutView does not include scroll. | 606 // and the space of the root LayoutView does not include scroll. |
| 609 EXPECT_EQ(FloatPoint(10, -7930), mappedPoint); | 607 EXPECT_EQ(FloatPoint(10, -7930), mappedPoint); |
| 610 } | 608 } |
| 611 | 609 |
| 612 TEST_F(MapCoordinatesTest, IFrameTransformed) { | 610 TEST_F(MapCoordinatesTest, IFrameTransformed) { |
| 613 document().setBaseURLOverride(KURL(ParsedURLString, "http://test.com")); | 611 document().setBaseURLOverride(KURL(ParsedURLString, "http://test.com")); |
| 614 setBodyInnerHTML( | 612 setBodyInnerHTML( |
| 615 "<style>body { margin: 0; }</style>" | 613 "<style>body { margin: 0; }</style>" |
| 616 "<iframe style='transform: scale(2)' id=frame src='http://test.com' " | 614 "<iframe style='transform: scale(2)' id=frame src='http://test.com' " |
| 617 "width='500' height='500' frameBorder='0'>" | 615 "width='500' height='500' frameBorder='0'>" |
| 618 "</iframe>"); | 616 "</iframe>"); |
| 619 | 617 |
| 620 Document& frameDocument = | 618 Document& frameDocument = |
| 621 setupChildIframe("frame", | 619 setupChildIframe("frame", |
| 622 "<style>body { margin: 0; } #target { width: 200px; " | 620 "<style>body { margin: 0; } #target { width: 200px; " |
| 623 "height: 8000px}</style><div id=target></div>"); | 621 "height: 8000px}</style><div id=target></div>"); |
| 624 | 622 |
| 625 document().view()->updateAllLifecyclePhases(); | 623 document().view()->updateAllLifecyclePhases(); |
| 626 | 624 |
| 627 frameDocument.view()->setScrollPosition(DoublePoint(0.0, 1000), | 625 frameDocument.view()->setScrollOffset(ScrollOffset(0.0, 1000), |
| 628 ProgrammaticScroll); | 626 ProgrammaticScroll); |
| 629 frameDocument.view()->updateAllLifecyclePhases(); | 627 frameDocument.view()->updateAllLifecyclePhases(); |
| 630 | 628 |
| 631 Element* target = frameDocument.getElementById("target"); | 629 Element* target = frameDocument.getElementById("target"); |
| 632 ASSERT_TRUE(target); | 630 ASSERT_TRUE(target); |
| 633 FloatPoint mappedPoint = | 631 FloatPoint mappedPoint = |
| 634 mapAncestorToLocal(target->layoutObject(), nullptr, FloatPoint(200, 200), | 632 mapAncestorToLocal(target->layoutObject(), nullptr, FloatPoint(200, 200), |
| 635 TraverseDocumentBoundaries | UseTransforms); | 633 TraverseDocumentBoundaries | UseTransforms); |
| 636 | 634 |
| 637 // Derivation: | 635 // Derivation: |
| 638 // (200, 200) -> (-50, -50) (Adjust for transform origin of scale, which is a
t the center of the 500x500 iframe) | 636 // (200, 200) -> (-50, -50) (Adjust for transform origin of scale, which is a
t the center of the 500x500 iframe) |
| (...skipping 14 matching lines...) Expand all Loading... |
| 653 "height='768'></iframe>" | 651 "height='768'></iframe>" |
| 654 "</div>"); | 652 "</div>"); |
| 655 | 653 |
| 656 Document& frameDocument = setupChildIframe( | 654 Document& frameDocument = setupChildIframe( |
| 657 "frame", | 655 "frame", |
| 658 "<style>* { margin: 0; } #target { width: 200px; height: 200px; " | 656 "<style>* { margin: 0; } #target { width: 200px; height: 200px; " |
| 659 "position:fixed}</style><div id=target></div>" | 657 "position:fixed}</style><div id=target></div>" |
| 660 "<div style='width: 200; height: 8000px'></div>"); | 658 "<div style='width: 200; height: 8000px'></div>"); |
| 661 | 659 |
| 662 document().view()->updateAllLifecyclePhases(); | 660 document().view()->updateAllLifecyclePhases(); |
| 663 frameDocument.view()->setScrollPosition(DoublePoint(0.0, 1000), | 661 frameDocument.view()->setScrollOffset(ScrollOffset(0.0, 1000), |
| 664 ProgrammaticScroll); | 662 ProgrammaticScroll); |
| 665 | 663 |
| 666 Element* target = frameDocument.getElementById("target"); | 664 Element* target = frameDocument.getElementById("target"); |
| 667 ASSERT_TRUE(target); | 665 ASSERT_TRUE(target); |
| 668 FloatPoint mappedPoint = | 666 FloatPoint mappedPoint = |
| 669 mapAncestorToLocal(target->layoutObject(), nullptr, FloatPoint(0, 0), | 667 mapAncestorToLocal(target->layoutObject(), nullptr, FloatPoint(0, 0), |
| 670 UseTransforms | TraverseDocumentBoundaries); | 668 UseTransforms | TraverseDocumentBoundaries); |
| 671 | 669 |
| 672 EXPECT_EQ(FloatPoint(0, 0), mappedPoint); | 670 EXPECT_EQ(FloatPoint(0, 0), mappedPoint); |
| 673 } | 671 } |
| 674 | 672 |
| (...skipping 770 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1445 LayoutUnit::epsilon()); | 1443 LayoutUnit::epsilon()); |
| 1446 EXPECT_NEAR(50.0, matrix.projectPoint(FloatPoint(100.0, 50.0)).y(), | 1444 EXPECT_NEAR(50.0, matrix.projectPoint(FloatPoint(100.0, 50.0)).y(), |
| 1447 LayoutUnit::epsilon()); | 1445 LayoutUnit::epsilon()); |
| 1448 EXPECT_NEAR(25.0, matrix.projectPoint(FloatPoint(50.0, 100.0)).x(), | 1446 EXPECT_NEAR(25.0, matrix.projectPoint(FloatPoint(50.0, 100.0)).x(), |
| 1449 LayoutUnit::epsilon()); | 1447 LayoutUnit::epsilon()); |
| 1450 EXPECT_NEAR(100.0, matrix.projectPoint(FloatPoint(50.0, 100.0)).y(), | 1448 EXPECT_NEAR(100.0, matrix.projectPoint(FloatPoint(50.0, 100.0)).y(), |
| 1451 LayoutUnit::epsilon()); | 1449 LayoutUnit::epsilon()); |
| 1452 } | 1450 } |
| 1453 | 1451 |
| 1454 } // namespace blink | 1452 } // namespace blink |
| OLD | NEW |