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/paint/PaintLayer.h" | 5 #include "core/paint/PaintLayer.h" |
6 | 6 |
7 #include "core/html/HTMLIFrameElement.h" | 7 #include "core/html/HTMLIFrameElement.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/LayoutView.h" | 10 #include "core/layout/LayoutView.h" |
(...skipping 532 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
543 PaintLayer* floating = | 543 PaintLayer* floating = |
544 toLayoutBoxModelObject(getLayoutObjectByElementId("floating"))->layer(); | 544 toLayoutBoxModelObject(getLayoutObjectByElementId("floating"))->layer(); |
545 PaintLayer* absolute = | 545 PaintLayer* absolute = |
546 toLayoutBoxModelObject(getLayoutObjectByElementId("absolute"))->layer(); | 546 toLayoutBoxModelObject(getLayoutObjectByElementId("absolute"))->layer(); |
547 PaintLayer* span = | 547 PaintLayer* span = |
548 toLayoutBoxModelObject(getLayoutObjectByElementId("span"))->layer(); | 548 toLayoutBoxModelObject(getLayoutObjectByElementId("span"))->layer(); |
549 PaintLayer* container = | 549 PaintLayer* container = |
550 toLayoutBoxModelObject(getLayoutObjectByElementId("container"))->layer(); | 550 toLayoutBoxModelObject(getLayoutObjectByElementId("container"))->layer(); |
551 | 551 |
552 EXPECT_EQ(span, floating->parent()); | 552 EXPECT_EQ(span, floating->parent()); |
| 553 EXPECT_EQ(container, floating->containingLayer()); |
553 EXPECT_EQ(span, absolute->parent()); | 554 EXPECT_EQ(span, absolute->parent()); |
| 555 EXPECT_EQ(span, absolute->containingLayer()); |
554 EXPECT_EQ(container, span->parent()); | 556 EXPECT_EQ(container, span->parent()); |
| 557 EXPECT_EQ(container, span->containingLayer()); |
555 | 558 |
556 EXPECT_EQ(LayoutPoint(83, 83), floating->location()); | 559 EXPECT_EQ(LayoutPoint(83, 83), floating->location()); |
557 EXPECT_EQ(LayoutPoint(50, 50), absolute->location()); | 560 EXPECT_EQ(LayoutPoint(50, 50), absolute->location()); |
558 EXPECT_EQ(LayoutPoint(133, 133), span->location()); | 561 EXPECT_EQ(LayoutPoint(133, 133), span->location()); |
559 EXPECT_EQ(LayoutPoint(20, 20), container->location()); | 562 EXPECT_EQ(LayoutPoint(20, 20), container->location()); |
560 | 563 |
561 EXPECT_EQ(LayoutPoint(-50, -50), floating->visualOffsetFromAncestor(span)); | 564 EXPECT_EQ(LayoutPoint(-50, -50), floating->visualOffsetFromAncestor(span)); |
562 EXPECT_EQ(LayoutPoint(50, 50), absolute->visualOffsetFromAncestor(span)); | 565 EXPECT_EQ(LayoutPoint(50, 50), absolute->visualOffsetFromAncestor(span)); |
563 EXPECT_EQ(LayoutPoint(83, 83), floating->visualOffsetFromAncestor(container)); | 566 EXPECT_EQ(LayoutPoint(83, 83), floating->visualOffsetFromAncestor(container)); |
564 EXPECT_EQ(LayoutPoint(183, 183), | 567 EXPECT_EQ(LayoutPoint(183, 183), |
565 absolute->visualOffsetFromAncestor(container)); | 568 absolute->visualOffsetFromAncestor(container)); |
566 } | 569 } |
567 | 570 |
| 571 TEST_P(PaintLayerTest, FloatLayerUnderInlineLayerScrolled) { |
| 572 setBodyInnerHTML( |
| 573 "<div id='container' style='overflow: scroll; width: 50px; height: 50px'>" |
| 574 " <span id='span' style='position: relative; top: 100px; left: 100px'>" |
| 575 " <div id='floating'" |
| 576 " style='float: left; position: relative; top: 50px; left: 50px'>" |
| 577 " </div>" |
| 578 " </span>" |
| 579 " <div style='height: 1000px'></div>" |
| 580 "</div>"); |
| 581 |
| 582 PaintLayer* floating = |
| 583 toLayoutBoxModelObject(getLayoutObjectByElementId("floating"))->layer(); |
| 584 PaintLayer* span = |
| 585 toLayoutBoxModelObject(getLayoutObjectByElementId("span"))->layer(); |
| 586 PaintLayer* container = |
| 587 toLayoutBoxModelObject(getLayoutObjectByElementId("container"))->layer(); |
| 588 container->getScrollableArea()->setScrollOffset(ScrollOffset(0, 400), |
| 589 ProgrammaticScroll); |
| 590 |
| 591 EXPECT_EQ(span, floating->parent()); |
| 592 EXPECT_EQ(container, floating->containingLayer()); |
| 593 EXPECT_EQ(container, span->parent()); |
| 594 EXPECT_EQ(container, span->containingLayer()); |
| 595 |
| 596 EXPECT_EQ(LayoutPoint(50, -350), floating->location()); |
| 597 EXPECT_EQ(LayoutPoint(100, -300), span->location()); |
| 598 |
| 599 EXPECT_EQ(LayoutPoint(-50, -50), floating->visualOffsetFromAncestor(span)); |
| 600 EXPECT_EQ(LayoutPoint(50, -350), |
| 601 floating->visualOffsetFromAncestor(container)); |
| 602 } |
| 603 |
568 TEST_P(PaintLayerTest, FloatLayerUnderBlockUnderInlineLayer) { | 604 TEST_P(PaintLayerTest, FloatLayerUnderBlockUnderInlineLayer) { |
569 setBodyInnerHTML( | 605 setBodyInnerHTML( |
570 "<style>body {margin: 0}</style>" | 606 "<style>body {margin: 0}</style>" |
571 "<span id='span' style='position: relative; top: 100px; left: 100px'>" | 607 "<span id='span' style='position: relative; top: 100px; left: 100px'>" |
572 " <div style='display: inline-block; margin: 33px'>" | 608 " <div style='display: inline-block; margin: 33px'>" |
573 " <div id='floating'" | 609 " <div id='floating'" |
574 " style='float: left; position: relative; top: 50px; left: 50px'>" | 610 " style='float: left; position: relative; top: 50px; left: 50px'>" |
575 " </div>" | 611 " </div>" |
576 " </div>" | 612 " </div>" |
577 "</span>"); | 613 "</span>"); |
578 | 614 |
579 PaintLayer* floating = | 615 PaintLayer* floating = |
580 toLayoutBoxModelObject(getLayoutObjectByElementId("floating"))->layer(); | 616 toLayoutBoxModelObject(getLayoutObjectByElementId("floating"))->layer(); |
581 PaintLayer* span = | 617 PaintLayer* span = |
582 toLayoutBoxModelObject(getLayoutObjectByElementId("span"))->layer(); | 618 toLayoutBoxModelObject(getLayoutObjectByElementId("span"))->layer(); |
583 | 619 |
584 EXPECT_EQ(span, floating->parent()); | 620 EXPECT_EQ(span, floating->parent()); |
| 621 EXPECT_EQ(span, floating->containingLayer()); |
585 | 622 |
586 EXPECT_EQ(LayoutPoint(83, 83), floating->location()); | 623 EXPECT_EQ(LayoutPoint(83, 83), floating->location()); |
587 EXPECT_EQ(LayoutPoint(100, 100), span->location()); | 624 EXPECT_EQ(LayoutPoint(100, 100), span->location()); |
588 EXPECT_EQ(LayoutPoint(83, 83), floating->visualOffsetFromAncestor(span)); | 625 EXPECT_EQ(LayoutPoint(83, 83), floating->visualOffsetFromAncestor(span)); |
589 EXPECT_EQ(LayoutPoint(183, 183), floating->visualOffsetFromAncestor( | 626 EXPECT_EQ(LayoutPoint(183, 183), floating->visualOffsetFromAncestor( |
590 document().layoutView()->layer())); | 627 document().layoutView()->layer())); |
591 } | 628 } |
592 | 629 |
593 TEST_P(PaintLayerTest, CompositingContainerFloatingIframe) { | 630 TEST_P(PaintLayerTest, CompositingContainerFloatingIframe) { |
594 enableCompositing(); | 631 enableCompositing(); |
(...skipping 24 matching lines...) Expand all Loading... |
619 ->layer(); | 656 ->layer(); |
620 | 657 |
621 // enclosingLayerWithCompositedLayerMapping is not needed or applicable to | 658 // enclosingLayerWithCompositedLayerMapping is not needed or applicable to |
622 // SPv2. | 659 // SPv2. |
623 if (!RuntimeEnabledFeatures::slimmingPaintV2Enabled()) { | 660 if (!RuntimeEnabledFeatures::slimmingPaintV2Enabled()) { |
624 EXPECT_EQ(compositedContainer, | 661 EXPECT_EQ(compositedContainer, |
625 target->enclosingLayerWithCompositedLayerMapping(ExcludeSelf)); | 662 target->enclosingLayerWithCompositedLayerMapping(ExcludeSelf)); |
626 } | 663 } |
627 } | 664 } |
628 | 665 |
| 666 TEST_P(PaintLayerTest, ColumnSpanLayerUnderExtraLayerScrolled) { |
| 667 setBodyInnerHTML( |
| 668 "<div id='columns' style='overflow: hidden; width: 80px; height: 80px; " |
| 669 " columns: 2; column-gap: 0'>" |
| 670 " <div id='extraLayer'" |
| 671 " style='position: relative; top: 100px; left: 100px'>" |
| 672 " <div id='spanner' style='column-span: all; position: relative; " |
| 673 " top: 50px; left: 50px'>" |
| 674 " </div>" |
| 675 " </div>" |
| 676 " <div style='height: 1000px'></div>" |
| 677 "</div>"); |
| 678 |
| 679 PaintLayer* spanner = |
| 680 toLayoutBoxModelObject(getLayoutObjectByElementId("spanner"))->layer(); |
| 681 PaintLayer* extraLayer = |
| 682 toLayoutBoxModelObject(getLayoutObjectByElementId("extraLayer"))->layer(); |
| 683 PaintLayer* columns = |
| 684 toLayoutBoxModelObject(getLayoutObjectByElementId("columns"))->layer(); |
| 685 columns->getScrollableArea()->setScrollOffset(ScrollOffset(200, 0), |
| 686 ProgrammaticScroll); |
| 687 |
| 688 EXPECT_EQ(extraLayer, spanner->parent()); |
| 689 EXPECT_EQ(columns, spanner->containingLayer()); |
| 690 EXPECT_EQ(columns, extraLayer->parent()->parent()); |
| 691 EXPECT_EQ(columns, extraLayer->containingLayer()->parent()); |
| 692 |
| 693 EXPECT_EQ(LayoutPoint(-150, 50), spanner->location()); |
| 694 EXPECT_EQ(LayoutPoint(100, 100), extraLayer->location()); |
| 695 // -60 = 2nd-column-x(40) - scroll-offset-x(200) + x-location(100) |
| 696 // 20 = y-location(100) - column-height(80) |
| 697 EXPECT_EQ(LayoutPoint(-60, 20), |
| 698 extraLayer->visualOffsetFromAncestor(columns)); |
| 699 EXPECT_EQ(LayoutPoint(-150, 50), spanner->visualOffsetFromAncestor(columns)); |
| 700 } |
| 701 |
629 } // namespace blink | 702 } // namespace blink |
OLD | NEW |