| 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 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 119 paintLayer->graphicsLayerBacking(), IntRect())); | 119 paintLayer->graphicsLayerBacking(), IntRect())); |
| 120 } | 120 } |
| 121 | 121 |
| 122 TEST_F(CompositedLayerMappingTest, VerticalRightLeftWritingModeDocument) { | 122 TEST_F(CompositedLayerMappingTest, VerticalRightLeftWritingModeDocument) { |
| 123 setBodyInnerHTML( | 123 setBodyInnerHTML( |
| 124 "<style>html,body { margin: 0px } html { -webkit-writing-mode: " | 124 "<style>html,body { margin: 0px } html { -webkit-writing-mode: " |
| 125 "vertical-rl}</style> <div id='target' style='width: 10000px; height: " | 125 "vertical-rl}</style> <div id='target' style='width: 10000px; height: " |
| 126 "200px;'></div>"); | 126 "200px;'></div>"); |
| 127 | 127 |
| 128 document().view()->updateAllLifecyclePhases(); | 128 document().view()->updateAllLifecyclePhases(); |
| 129 document().view()->setScrollPosition(DoublePoint(-5000, 0), | 129 document().view()->setScrollOffset(ScrollOffset(-5000, 0), |
| 130 ProgrammaticScroll); | 130 ProgrammaticScroll); |
| 131 document().view()->updateAllLifecyclePhases(); | 131 document().view()->updateAllLifecyclePhases(); |
| 132 | 132 |
| 133 PaintLayer* paintLayer = document().layoutViewItem().layer(); | 133 PaintLayer* paintLayer = document().layoutViewItem().layer(); |
| 134 ASSERT_TRUE(paintLayer->graphicsLayerBacking()); | 134 ASSERT_TRUE(paintLayer->graphicsLayerBacking()); |
| 135 ASSERT_TRUE(paintLayer->compositedLayerMapping()); | 135 ASSERT_TRUE(paintLayer->compositedLayerMapping()); |
| 136 // A scroll by -5000px is equivalent to a scroll by (10000 - 5000 - 800)px = 4
200px in non-RTL mode. Expanding | 136 // A scroll by -5000px is equivalent to a scroll by (10000 - 5000 - 800)px = 4
200px in non-RTL mode. Expanding |
| 137 // the resulting rect by 4000px in each direction yields this result. | 137 // the resulting rect by 4000px in each direction yields this result. |
| 138 EXPECT_RECT_EQ(IntRect(200, 0, 8800, 600), | 138 EXPECT_RECT_EQ(IntRect(200, 0, 8800, 600), |
| 139 recomputeInterestRect(paintLayer->graphicsLayerBacking())); | 139 recomputeInterestRect(paintLayer->graphicsLayerBacking())); |
| 140 } | 140 } |
| (...skipping 308 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 449 " body { margin: 0; }" | 449 " body { margin: 0; }" |
| 450 "</style>" | 450 "</style>" |
| 451 "<div id='div' style='width: 100px; height: 10000px'>Text</div>"); | 451 "<div id='div' style='width: 100px; height: 10000px'>Text</div>"); |
| 452 | 452 |
| 453 document().view()->updateAllLifecyclePhases(); | 453 document().view()->updateAllLifecyclePhases(); |
| 454 GraphicsLayer* rootScrollingLayer = | 454 GraphicsLayer* rootScrollingLayer = |
| 455 document().layoutViewItem().layer()->graphicsLayerBackingForScrolling(); | 455 document().layoutViewItem().layer()->graphicsLayerBackingForScrolling(); |
| 456 EXPECT_RECT_EQ(IntRect(0, 0, 800, 4600), | 456 EXPECT_RECT_EQ(IntRect(0, 0, 800, 4600), |
| 457 previousInterestRect(rootScrollingLayer)); | 457 previousInterestRect(rootScrollingLayer)); |
| 458 | 458 |
| 459 document().view()->setScrollPosition(IntPoint(0, 300), ProgrammaticScroll); | 459 document().view()->setScrollOffset(ScrollOffset(0, 300), ProgrammaticScroll); |
| 460 document().view()->updateAllLifecyclePhases(); | 460 document().view()->updateAllLifecyclePhases(); |
| 461 // Still use the previous interest rect because the recomputed rect hasn't cha
nged enough. | 461 // Still use the previous interest rect because the recomputed rect hasn't cha
nged enough. |
| 462 EXPECT_RECT_EQ(IntRect(0, 0, 800, 4900), | 462 EXPECT_RECT_EQ(IntRect(0, 0, 800, 4900), |
| 463 recomputeInterestRect(rootScrollingLayer)); | 463 recomputeInterestRect(rootScrollingLayer)); |
| 464 EXPECT_RECT_EQ(IntRect(0, 0, 800, 4600), | 464 EXPECT_RECT_EQ(IntRect(0, 0, 800, 4600), |
| 465 previousInterestRect(rootScrollingLayer)); | 465 previousInterestRect(rootScrollingLayer)); |
| 466 | 466 |
| 467 document().view()->setScrollPosition(IntPoint(0, 600), ProgrammaticScroll); | 467 document().view()->setScrollOffset(ScrollOffset(0, 600), ProgrammaticScroll); |
| 468 document().view()->updateAllLifecyclePhases(); | 468 document().view()->updateAllLifecyclePhases(); |
| 469 // Use recomputed interest rect because it changed enough. | 469 // Use recomputed interest rect because it changed enough. |
| 470 EXPECT_RECT_EQ(IntRect(0, 0, 800, 5200), | 470 EXPECT_RECT_EQ(IntRect(0, 0, 800, 5200), |
| 471 recomputeInterestRect(rootScrollingLayer)); | 471 recomputeInterestRect(rootScrollingLayer)); |
| 472 EXPECT_RECT_EQ(IntRect(0, 0, 800, 5200), | 472 EXPECT_RECT_EQ(IntRect(0, 0, 800, 5200), |
| 473 previousInterestRect(rootScrollingLayer)); | 473 previousInterestRect(rootScrollingLayer)); |
| 474 | 474 |
| 475 document().view()->setScrollPosition(IntPoint(0, 5400), ProgrammaticScroll); | 475 document().view()->setScrollOffset(ScrollOffset(0, 5400), ProgrammaticScroll); |
| 476 document().view()->updateAllLifecyclePhases(); | 476 document().view()->updateAllLifecyclePhases(); |
| 477 EXPECT_RECT_EQ(IntRect(0, 1400, 800, 8600), | 477 EXPECT_RECT_EQ(IntRect(0, 1400, 800, 8600), |
| 478 recomputeInterestRect(rootScrollingLayer)); | 478 recomputeInterestRect(rootScrollingLayer)); |
| 479 EXPECT_RECT_EQ(IntRect(0, 1400, 800, 8600), | 479 EXPECT_RECT_EQ(IntRect(0, 1400, 800, 8600), |
| 480 previousInterestRect(rootScrollingLayer)); | 480 previousInterestRect(rootScrollingLayer)); |
| 481 | 481 |
| 482 document().view()->setScrollPosition(IntPoint(0, 9000), ProgrammaticScroll); | 482 document().view()->setScrollOffset(ScrollOffset(0, 9000), ProgrammaticScroll); |
| 483 document().view()->updateAllLifecyclePhases(); | 483 document().view()->updateAllLifecyclePhases(); |
| 484 // Still use the previous interest rect because it contains the recomputed int
erest rect. | 484 // Still use the previous interest rect because it contains the recomputed int
erest rect. |
| 485 EXPECT_RECT_EQ(IntRect(0, 5000, 800, 5000), | 485 EXPECT_RECT_EQ(IntRect(0, 5000, 800, 5000), |
| 486 recomputeInterestRect(rootScrollingLayer)); | 486 recomputeInterestRect(rootScrollingLayer)); |
| 487 EXPECT_RECT_EQ(IntRect(0, 1400, 800, 8600), | 487 EXPECT_RECT_EQ(IntRect(0, 1400, 800, 8600), |
| 488 previousInterestRect(rootScrollingLayer)); | 488 previousInterestRect(rootScrollingLayer)); |
| 489 | 489 |
| 490 document().view()->setScrollPosition(IntPoint(0, 2000), ProgrammaticScroll); | 490 document().view()->setScrollOffset(ScrollOffset(0, 2000), ProgrammaticScroll); |
| 491 // Use recomputed interest rect because it changed enough. | 491 // Use recomputed interest rect because it changed enough. |
| 492 document().view()->updateAllLifecyclePhases(); | 492 document().view()->updateAllLifecyclePhases(); |
| 493 EXPECT_RECT_EQ(IntRect(0, 0, 800, 6600), | 493 EXPECT_RECT_EQ(IntRect(0, 0, 800, 6600), |
| 494 recomputeInterestRect(rootScrollingLayer)); | 494 recomputeInterestRect(rootScrollingLayer)); |
| 495 EXPECT_RECT_EQ(IntRect(0, 0, 800, 6600), | 495 EXPECT_RECT_EQ(IntRect(0, 0, 800, 6600), |
| 496 previousInterestRect(rootScrollingLayer)); | 496 previousInterestRect(rootScrollingLayer)); |
| 497 } | 497 } |
| 498 | 498 |
| 499 TEST_F(CompositedLayerMappingTest, InterestRectChangeOnShrunkenViewport) { | 499 TEST_F(CompositedLayerMappingTest, InterestRectChangeOnShrunkenViewport) { |
| 500 setBodyInnerHTML( | 500 setBodyInnerHTML( |
| (...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 682 "<iframe id=frame src='http://test.com' width='500' height='500' " | 682 "<iframe id=frame src='http://test.com' width='500' height='500' " |
| 683 "frameBorder='0'>" | 683 "frameBorder='0'>" |
| 684 "</iframe>"); | 684 "</iframe>"); |
| 685 | 685 |
| 686 Document& frameDocument = setupChildIframe( | 686 Document& frameDocument = setupChildIframe( |
| 687 "frame", | 687 "frame", |
| 688 "<style>body { margin: 0; } #target { width: 200px; height: 200px; " | 688 "<style>body { margin: 0; } #target { width: 200px; height: 200px; " |
| 689 "will-change: transform}</style><div id=target></div>"); | 689 "will-change: transform}</style><div id=target></div>"); |
| 690 | 690 |
| 691 // Scroll 8000 pixels down to move the iframe into view. | 691 // Scroll 8000 pixels down to move the iframe into view. |
| 692 document().view()->setScrollPosition(DoublePoint(0.0, 8000.0), | 692 document().view()->setScrollOffset(ScrollOffset(0.0, 8000.0), |
| 693 ProgrammaticScroll); | 693 ProgrammaticScroll); |
| 694 document().view()->updateAllLifecyclePhases(); | 694 document().view()->updateAllLifecyclePhases(); |
| 695 | 695 |
| 696 Element* target = frameDocument.getElementById("target"); | 696 Element* target = frameDocument.getElementById("target"); |
| 697 ASSERT_TRUE(target); | 697 ASSERT_TRUE(target); |
| 698 | 698 |
| 699 EXPECT_RECT_EQ( | 699 EXPECT_RECT_EQ( |
| 700 IntRect(0, 0, 200, 200), | 700 IntRect(0, 0, 200, 200), |
| 701 recomputeInterestRect( | 701 recomputeInterestRect( |
| 702 target->layoutObject()->enclosingLayer()->graphicsLayerBacking())); | 702 target->layoutObject()->enclosingLayer()->graphicsLayerBacking())); |
| 703 } | 703 } |
| 704 | 704 |
| 705 TEST_F(CompositedLayerMappingTest, InterestRectOfScrolledIframe) { | 705 TEST_F(CompositedLayerMappingTest, InterestRectOfScrolledIframe) { |
| 706 document().setBaseURLOverride(KURL(ParsedURLString, "http://test.com")); | 706 document().setBaseURLOverride(KURL(ParsedURLString, "http://test.com")); |
| 707 document().frame()->settings()->setPreferCompositingToLCDTextEnabled(true); | 707 document().frame()->settings()->setPreferCompositingToLCDTextEnabled(true); |
| 708 setBodyInnerHTML( | 708 setBodyInnerHTML( |
| 709 "<style>body { margin: 0; } ::-webkit-scrollbar { display: none; " | 709 "<style>body { margin: 0; } ::-webkit-scrollbar { display: none; " |
| 710 "}</style>" | 710 "}</style>" |
| 711 "<iframe id=frame src='http://test.com' width='500' height='500' " | 711 "<iframe id=frame src='http://test.com' width='500' height='500' " |
| 712 "frameBorder='0'>" | 712 "frameBorder='0'>" |
| 713 "</iframe>"); | 713 "</iframe>"); |
| 714 | 714 |
| 715 Document& frameDocument = | 715 Document& frameDocument = |
| 716 setupChildIframe("frame", | 716 setupChildIframe("frame", |
| 717 "<style>body { margin: 0; } #target { width: 200px; " | 717 "<style>body { margin: 0; } #target { width: 200px; " |
| 718 "height: 8000px;}</style><div id=target></div>"); | 718 "height: 8000px;}</style><div id=target></div>"); |
| 719 | 719 |
| 720 document().view()->updateAllLifecyclePhases(); | 720 document().view()->updateAllLifecyclePhases(); |
| 721 | 721 |
| 722 // Scroll 7500 pixels down to bring the scrollable area to the bottom. | 722 // Scroll 7500 pixels down to bring the scrollable area to the bottom. |
| 723 frameDocument.view()->setScrollPosition(DoublePoint(0.0, 7500.0), | 723 frameDocument.view()->setScrollOffset(ScrollOffset(0.0, 7500.0), |
| 724 ProgrammaticScroll); | 724 ProgrammaticScroll); |
| 725 document().view()->updateAllLifecyclePhases(); | 725 document().view()->updateAllLifecyclePhases(); |
| 726 | 726 |
| 727 ASSERT_TRUE(frameDocument.view()->layoutViewItem().hasLayer()); | 727 ASSERT_TRUE(frameDocument.view()->layoutViewItem().hasLayer()); |
| 728 EXPECT_RECT_EQ(IntRect(0, 3500, 500, 4500), | 728 EXPECT_RECT_EQ(IntRect(0, 3500, 500, 4500), |
| 729 recomputeInterestRect(frameDocument.view() | 729 recomputeInterestRect(frameDocument.view() |
| 730 ->layoutViewItem() | 730 ->layoutViewItem() |
| 731 .enclosingLayer() | 731 .enclosingLayer() |
| 732 ->graphicsLayerBacking())); | 732 ->graphicsLayerBacking())); |
| 733 } | 733 } |
| 734 | 734 |
| 735 TEST_F(CompositedLayerMappingTest, InterestRectOfIframeWithContentBoxOffset) { | 735 TEST_F(CompositedLayerMappingTest, InterestRectOfIframeWithContentBoxOffset) { |
| 736 document().setBaseURLOverride(KURL(ParsedURLString, "http://test.com")); | 736 document().setBaseURLOverride(KURL(ParsedURLString, "http://test.com")); |
| 737 document().frame()->settings()->setPreferCompositingToLCDTextEnabled(true); | 737 document().frame()->settings()->setPreferCompositingToLCDTextEnabled(true); |
| 738 // Set a 10px border in order to have a contentBoxOffset for the iframe elemen
t. | 738 // Set a 10px border in order to have a contentBoxOffset for the iframe elemen
t. |
| 739 setBodyInnerHTML( | 739 setBodyInnerHTML( |
| 740 "<style>body { margin: 0; } #frame { border: 10px solid black; } " | 740 "<style>body { margin: 0; } #frame { border: 10px solid black; } " |
| 741 "::-webkit-scrollbar { display: none; }</style>" | 741 "::-webkit-scrollbar { display: none; }</style>" |
| 742 "<iframe id=frame src='http://test.com' width='500' height='500' " | 742 "<iframe id=frame src='http://test.com' width='500' height='500' " |
| 743 "frameBorder='0'>" | 743 "frameBorder='0'>" |
| 744 "</iframe>"); | 744 "</iframe>"); |
| 745 | 745 |
| 746 Document& frameDocument = | 746 Document& frameDocument = |
| 747 setupChildIframe("frame", | 747 setupChildIframe("frame", |
| 748 "<style>body { margin: 0; } #target { width: 200px; " | 748 "<style>body { margin: 0; } #target { width: 200px; " |
| 749 "height: 8000px;}</style> <div id=target></div>"); | 749 "height: 8000px;}</style> <div id=target></div>"); |
| 750 | 750 |
| 751 document().view()->updateAllLifecyclePhases(); | 751 document().view()->updateAllLifecyclePhases(); |
| 752 | 752 |
| 753 // Scroll 3000 pixels down to bring the scrollable area to somewhere in the mi
ddle. | 753 // Scroll 3000 pixels down to bring the scrollable area to somewhere in the mi
ddle. |
| 754 frameDocument.view()->setScrollPosition(DoublePoint(0.0, 3000.0), | 754 frameDocument.view()->setScrollOffset(ScrollOffset(0.0, 3000.0), |
| 755 ProgrammaticScroll); | 755 ProgrammaticScroll); |
| 756 document().view()->updateAllLifecyclePhases(); | 756 document().view()->updateAllLifecyclePhases(); |
| 757 | 757 |
| 758 ASSERT_TRUE(frameDocument.view()->layoutViewItem().hasLayer()); | 758 ASSERT_TRUE(frameDocument.view()->layoutViewItem().hasLayer()); |
| 759 // The width is 485 pixels due to the size of the scrollbar. | 759 // The width is 485 pixels due to the size of the scrollbar. |
| 760 EXPECT_RECT_EQ(IntRect(0, 0, 500, 7500), | 760 EXPECT_RECT_EQ(IntRect(0, 0, 500, 7500), |
| 761 recomputeInterestRect(frameDocument.view() | 761 recomputeInterestRect(frameDocument.view() |
| 762 ->layoutViewItem() | 762 ->layoutViewItem() |
| 763 .enclosingLayer() | 763 .enclosingLayer() |
| 764 ->graphicsLayerBacking())); | 764 ->graphicsLayerBacking())); |
| 765 } | 765 } |
| (...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1014 document().view()->updateAllLifecyclePhases(); | 1014 document().view()->updateAllLifecyclePhases(); |
| 1015 ASSERT_EQ(document().documentElement(), | 1015 ASSERT_EQ(document().documentElement(), |
| 1016 rootScrollerController.globalRootScroller()); | 1016 rootScrollerController.globalRootScroller()); |
| 1017 | 1017 |
| 1018 EXPECT_TRUE(mapping3->clippingLayer()); | 1018 EXPECT_TRUE(mapping3->clippingLayer()); |
| 1019 EXPECT_TRUE(mapping3->clippingLayer()->platformLayer()->masksToBounds()); | 1019 EXPECT_TRUE(mapping3->clippingLayer()->platformLayer()->masksToBounds()); |
| 1020 } | 1020 } |
| 1021 } | 1021 } |
| 1022 | 1022 |
| 1023 } // namespace blink | 1023 } // namespace blink |
| OLD | NEW |