Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(721)

Side by Side Diff: third_party/WebKit/Source/web/tests/RootScrollerTest.cpp

Issue 2750463005: Remove top controls clipping adjustment for document.rootScroller (Closed)
Patch Set: Rebase Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « third_party/WebKit/Source/core/page/scrolling/TopDocumentRootScrollerController.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "bindings/core/v8/NodeOrString.h" 5 #include "bindings/core/v8/NodeOrString.h"
6 #include "core/dom/ClientRect.h" 6 #include "core/dom/ClientRect.h"
7 #include "core/frame/BrowserControls.h" 7 #include "core/frame/BrowserControls.h"
8 #include "core/frame/FrameView.h" 8 #include "core/frame/FrameView.h"
9 #include "core/frame/RootFrameViewport.h" 9 #include "core/frame/RootFrameViewport.h"
10 #include "core/frame/VisualViewport.h" 10 #include "core/frame/VisualViewport.h"
(...skipping 712 matching lines...) Expand 10 before | Expand all | Expand 10 after
723 // ViewportScrollCallback removed. Keep the scrolls to guard crashes 723 // ViewportScrollCallback removed. Keep the scrolls to guard crashes
724 // but the expectations on when a ViewportScrollCallback have changed 724 // but the expectations on when a ViewportScrollCallback have changed
725 // and should be updated. 725 // and should be updated.
726 // EXPECT_EQ(200, container->scrollTop()); 726 // EXPECT_EQ(200, container->scrollTop());
727 } 727 }
728 728
729 // Reset explicitly to prevent lifetime issues with the RemoteFrameClient. 729 // Reset explicitly to prevent lifetime issues with the RemoteFrameClient.
730 m_helper.reset(); 730 m_helper.reset();
731 } 731 }
732 732
733 // Tests that the clipping layer is resized on the root scroller element even
734 // if the layout height doesn't change.
735 TEST_F(RootScrollerTest, BrowserControlsResizeClippingLayer) {
736 bool oldInertTopControls = RuntimeEnabledFeatures::inertTopControlsEnabled();
737 RuntimeEnabledFeatures::setInertTopControlsEnabled(true);
738
739 initialize("root-scroller.html");
740 Element* container = mainFrame()->document()->getElementById("container");
741
742 {
743 mainFrame()->document()->setRootScroller(container);
744
745 mainFrameView()->updateAllLifecyclePhases();
746 ASSERT_EQ(toLayoutBox(container->layoutObject())->clientHeight(), 400);
747
748 GraphicsLayer* clipLayer = toLayoutBox(container->layoutObject())
749 ->layer()
750 ->compositedLayerMapping()
751 ->scrollingLayer();
752 ASSERT_EQ(clipLayer->size().height(), 400);
753 }
754
755 {
756 webViewImpl()->handleInputEvent(
757 generateTouchGestureEvent(WebInputEvent::GestureScrollBegin));
758
759 // Scrolling over the #container DIV should cause the browser controls to
760 // hide.
761 EXPECT_FLOAT_EQ(1, browserControls().shownRatio());
762 webViewImpl()->handleInputEvent(generateTouchGestureEvent(
763 WebInputEvent::GestureScrollUpdate, 0, -browserControls().height()));
764 EXPECT_FLOAT_EQ(0, browserControls().shownRatio());
765
766 webViewImpl()->handleInputEvent(
767 generateTouchGestureEvent(WebInputEvent::GestureScrollEnd));
768
769 webViewImpl()->resizeWithBrowserControls(IntSize(400, 450), 50, false);
770
771 EXPECT_FALSE(container->layoutObject()->needsLayout());
772
773 mainFrameView()->updateAllLifecyclePhases();
774
775 // Since inert top controls are enabled, the container should not have
776 // resized, however, the clip layer should.
777 EXPECT_EQ(toLayoutBox(container->layoutObject())->clientHeight(), 400);
778 GraphicsLayer* clipLayer = toLayoutBox(container->layoutObject())
779 ->layer()
780 ->compositedLayerMapping()
781 ->scrollingLayer();
782 EXPECT_EQ(clipLayer->size().height(), 450);
783 }
784
785 RuntimeEnabledFeatures::setInertTopControlsEnabled(oldInertTopControls);
786 }
787
788 // Tests that the clipping layer is resized on the root scroller element when
789 // it's an iframe and even if the layout height doesn't change.
790 TEST_F(RootScrollerTest, BrowserControlsResizeClippingLayerIFrame) {
791 bool oldInertTopControls = RuntimeEnabledFeatures::inertTopControlsEnabled();
792 RuntimeEnabledFeatures::setInertTopControlsEnabled(true);
793
794 initialize("root-scroller-iframe.html");
795
796 Element* iframe = mainFrame()->document()->getElementById("iframe");
797 LocalFrame* childFrame =
798 toLocalFrame(toHTMLFrameOwnerElement(iframe)->contentFrame());
799
800 PaintLayerCompositor* childPLC =
801 childFrame->view()->layoutViewItem().compositor();
802
803 // Give the iframe itself scrollable content and make it the root scroller.
804 {
805 NonThrowableExceptionState nonThrow;
806 mainFrame()->document()->setRootScroller(iframe, nonThrow);
807
808 WebLocalFrame* childWebFrame =
809 mainWebFrame()->firstChild()->toWebLocalFrame();
810 executeScript(
811 "document.getElementById('container').style.width = '300%';"
812 "document.getElementById('container').style.height = '300%';",
813 *childWebFrame);
814
815 mainFrameView()->updateAllLifecyclePhases();
816
817 // Some sanity checks to make sure the test is setup correctly.
818 ASSERT_EQ(childFrame->view()->visibleContentSize().height(), 400);
819 ASSERT_EQ(childPLC->containerLayer()->size().height(), 400);
820 ASSERT_EQ(childPLC->rootGraphicsLayer()->size().height(), 400);
821 }
822
823 {
824 webViewImpl()->handleInputEvent(
825 generateTouchGestureEvent(WebInputEvent::GestureScrollBegin));
826
827 // Scrolling over the #container DIV should cause the browser controls to
828 // hide.
829 EXPECT_FLOAT_EQ(1, browserControls().shownRatio());
830 webViewImpl()->handleInputEvent(generateTouchGestureEvent(
831 WebInputEvent::GestureScrollUpdate, 0, -browserControls().height()));
832 EXPECT_FLOAT_EQ(0, browserControls().shownRatio());
833
834 webViewImpl()->handleInputEvent(
835 generateTouchGestureEvent(WebInputEvent::GestureScrollEnd));
836
837 webViewImpl()->resizeWithBrowserControls(IntSize(400, 450), 50, false);
838
839 EXPECT_FALSE(childFrame->view()->needsLayout());
840
841 mainFrameView()->updateAllLifecyclePhases();
842
843 // Since inert top controls are enabled, the iframe element should not have
844 // resized, however, its clip layer should resize to reveal content as the
845 // browser controls hide.
846 EXPECT_EQ(childFrame->view()->visibleContentSize().height(), 400);
847 EXPECT_EQ(childPLC->containerLayer()->size().height(), 450);
848 EXPECT_EQ(childPLC->rootGraphicsLayer()->size().height(), 450);
849 }
850
851 RuntimeEnabledFeatures::setInertTopControlsEnabled(oldInertTopControls);
852 }
853
854 // Tests that removing the root scroller element from the DOM resets the 733 // Tests that removing the root scroller element from the DOM resets the
855 // effective root scroller without waiting for any lifecycle events. 734 // effective root scroller without waiting for any lifecycle events.
856 TEST_F(RootScrollerTest, RemoveRootScrollerFromDom) { 735 TEST_F(RootScrollerTest, RemoveRootScrollerFromDom) {
857 initialize("root-scroller-iframe.html"); 736 initialize("root-scroller-iframe.html");
858 737
859 { 738 {
860 HTMLFrameOwnerElement* iframe = toHTMLFrameOwnerElement( 739 HTMLFrameOwnerElement* iframe = toHTMLFrameOwnerElement(
861 mainFrame()->document()->getElementById("iframe")); 740 mainFrame()->document()->getElementById("iframe"));
862 Element* innerContainer = 741 Element* innerContainer =
863 iframe->contentDocument()->getElementById("container"); 742 iframe->contentDocument()->getElementById("container");
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after
1106 // FrameView without a layout. 985 // FrameView without a layout.
1107 iframe->remove(); 986 iframe->remove();
1108 987
1109 EXPECT_EQ(mainFrameView()->layoutViewportScrollableArea(), 988 EXPECT_EQ(mainFrameView()->layoutViewportScrollableArea(),
1110 &mainFrameView()->getRootFrameViewport()->layoutViewport()); 989 &mainFrameView()->getRootFrameViewport()->layoutViewport());
1111 } 990 }
1112 991
1113 } // namespace 992 } // namespace
1114 993
1115 } // namespace blink 994 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/page/scrolling/TopDocumentRootScrollerController.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698