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

Unified Diff: third_party/WebKit/Source/web/tests/WebFrameTest.cpp

Issue 2467693002: Implement overlay scrollbar fade out for non-composited scrollers. (Closed)
Patch Set: overlay-scrollbar-mouse-capture now works on Mac Created 4 years, 1 month 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 side-by-side diff with in-line comments
Download patch
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");

Powered by Google App Engine
This is Rietveld 408576698