Chromium Code Reviews| Index: third_party/WebKit/Source/web/tests/WebFrameTest.cpp |
| diff --git a/third_party/WebKit/Source/web/tests/WebFrameTest.cpp b/third_party/WebKit/Source/web/tests/WebFrameTest.cpp |
| index a7f8e65fea310bcb907693b82ea68472ce516063..676f6d6ac30b0f28c2dd8a3d4d7caf43757960a9 100644 |
| --- a/third_party/WebKit/Source/web/tests/WebFrameTest.cpp |
| +++ b/third_party/WebKit/Source/web/tests/WebFrameTest.cpp |
| @@ -86,6 +86,7 @@ |
| #include "platform/geometry/FloatRect.h" |
| #include "platform/network/ResourceError.h" |
| #include "platform/scroll/ScrollbarTheme.h" |
| +#include "platform/scroll/ScrollbarThemeOverlayMock.h" |
| #include "platform/testing/RuntimeEnabledFeaturesTestHelpers.h" |
| #include "platform/testing/URLTestHelpers.h" |
| #include "platform/testing/UnitTestHelpers.h" |
| @@ -10345,6 +10346,89 @@ TEST_F(WebFrameTest, HidingScrollbarsOnScrollableAreaDisablesScrollbars) { |
| EXPECT_TRUE(scrollerArea->verticalScrollbar()->enabled()); |
| } |
| +static void disableCompositing(WebSettings* settings) { |
| + settings->setAcceleratedCompositingEnabled(false); |
| + settings->setPreferCompositingToLCDTextEnabled(false); |
| +} |
| + |
| +// Make sure overlay scrollbars on non-composited scrollers fade out and set |
| +// the hidden bit as needed. |
| +TEST_F(WebFrameTest, TestNonCompositedOverlayScrollbarsFade) { |
| + FrameTestHelpers::WebViewHelper webViewHelper; |
| + WebViewImpl* webViewImpl = webViewHelper.initialize( |
| + true, nullptr, nullptr, nullptr, &disableCompositing); |
| + |
| + constexpr double kMockOverlayFadeOutDelayMs = 5.0; |
| + |
| + ScrollbarTheme& theme = ScrollbarTheme::theme(); |
| + // This test relies on mock overlay scrollbars. |
| + ASSERT_TRUE(theme.isMockTheme()); |
| + ASSERT_TRUE(theme.usesOverlayScrollbars()); |
| + ScrollbarThemeOverlayMock& mockOverlayTheme = |
| + (ScrollbarThemeOverlayMock&)theme; |
| + mockOverlayTheme.setOverlayScrollbarFadeOutDelay(kMockOverlayFadeOutDelayMs / |
| + 1000.0); |
| + |
| + webViewImpl->resizeWithBrowserControls(WebSize(640, 480), 0, false); |
| + |
| + WebURL baseURL = URLTestHelpers::toKURL("http://example.com/"); |
| + FrameTestHelpers::loadHTMLString(webViewImpl->mainFrame(), |
| + "<!DOCTYPE html>" |
|
skobes
2016/11/02 21:02:43
For a large block like this a 4-space indent seems
bokan
2016/11/02 22:41:57
Unfortunately, this is git cl format's doing so I'
|
| + "<style>" |
| + " #space {" |
| + " width: 1000px;" |
| + " height: 1000px;" |
| + " }" |
| + " #container {" |
| + " width: 200px;" |
| + " height: 200px;" |
| + " overflow: scroll;" |
| + " }" |
| + " div { height:1000px; width: 200px; }" |
| + "</style>" |
| + "<div id='container'>" |
| + " <div id='space'></div>" |
| + "</div>", |
| + baseURL); |
| + webViewImpl->updateAllLifecyclePhases(); |
| + |
| + WebLocalFrameImpl* frame = webViewHelper.webView()->mainFrameImpl(); |
| + Document* document = |
| + toLocalFrame(webViewImpl->page()->mainFrame())->document(); |
| + Element* container = document->getElementById("container"); |
| + ScrollableArea* scrollableArea = |
| + toLayoutBox(container->layoutObject())->getScrollableArea(); |
| + |
| + EXPECT_FALSE(scrollableArea->scrollbarsHidden()); |
| + testing::runDelayedTasks(kMockOverlayFadeOutDelayMs); |
| + EXPECT_TRUE(scrollableArea->scrollbarsHidden()); |
| + |
| + scrollableArea->setScrollOffset(ScrollOffset(10, 10), ProgrammaticScroll, |
| + ScrollBehaviorInstant); |
| + |
| + EXPECT_FALSE(scrollableArea->scrollbarsHidden()); |
| + testing::runDelayedTasks(kMockOverlayFadeOutDelayMs); |
| + EXPECT_TRUE(scrollableArea->scrollbarsHidden()); |
| + |
| + frame->executeScript(WebScriptSource( |
| + "document.getElementById('space').style.height = '500px';")); |
| + frame->view()->updateAllLifecyclePhases(); |
| + |
| + EXPECT_FALSE(scrollableArea->scrollbarsHidden()); |
| + testing::runDelayedTasks(kMockOverlayFadeOutDelayMs); |
| + EXPECT_TRUE(scrollableArea->scrollbarsHidden()); |
| + |
| + frame->executeScript(WebScriptSource( |
| + "document.getElementById('container').style.height = '300px';")); |
| + frame->view()->updateAllLifecyclePhases(); |
| + |
| + EXPECT_FALSE(scrollableArea->scrollbarsHidden()); |
| + testing::runDelayedTasks(kMockOverlayFadeOutDelayMs); |
| + EXPECT_TRUE(scrollableArea->scrollbarsHidden()); |
| + |
| + mockOverlayTheme.setOverlayScrollbarFadeOutDelay(0.0); |
| +} |
| + |
| TEST_F(WebFrameTest, UniqueNames) { |
| registerMockedHttpURLLoad("frameset-repeated-name.html"); |
| registerMockedHttpURLLoad("frameset-dest.html"); |