| Index: third_party/WebKit/Source/web/tests/ScrollbarsTest.cpp
|
| diff --git a/third_party/WebKit/Source/web/tests/ScrollbarsTest.cpp b/third_party/WebKit/Source/web/tests/ScrollbarsTest.cpp
|
| index eee9d25621738eb0c628ed40bede8ff32fd0bc23..a97e23189a1e5c67ac13a5393abe715013f503f2 100644
|
| --- a/third_party/WebKit/Source/web/tests/ScrollbarsTest.cpp
|
| +++ b/third_party/WebKit/Source/web/tests/ScrollbarsTest.cpp
|
| @@ -2,10 +2,13 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| +#include "core/frame/FrameView.h"
|
| #include "core/layout/LayoutView.h"
|
| #include "core/paint/PaintLayerScrollableArea.h"
|
| #include "platform/testing/RuntimeEnabledFeaturesTestHelpers.h"
|
| +#include "platform/testing/TestingPlatformSupport.h"
|
| #include "platform/testing/UnitTestHelpers.h"
|
| +#include "public/platform/WebThemeEngine.h"
|
| #include "public/web/WebScriptSource.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| #include "web/WebLocalFrameImpl.h"
|
| @@ -42,6 +45,76 @@ TEST_F(ScrollbarsTest, DocumentStyleRecalcPreservesScrollbars) {
|
| ASSERT_TRUE(plsa->verticalScrollbar() && plsa->horizontalScrollbar());
|
| }
|
|
|
| +typedef bool TestParamOverlayScrollbar;
|
| +class ScrollbarAppearanceTest
|
| + : public SimTest,
|
| + public ::testing::WithParamInterface<TestParamOverlayScrollbar> {
|
| + public:
|
| + // Use real scrollbars to ensure we're testing the real ScrollbarThemes.
|
| + ScrollbarAppearanceTest() : m_mockScrollbars(false, GetParam()) {}
|
| +
|
| + private:
|
| + FrameTestHelpers::UseMockScrollbarSettings m_mockScrollbars;
|
| +};
|
| +
|
| +class StubWebThemeEngine : public WebThemeEngine {
|
| + public:
|
| + WebSize getSize(Part part) override {
|
| + switch (part) {
|
| + case PartScrollbarHorizontalThumb:
|
| + return blink::WebSize(kMinimumHorizontalLength, 15);
|
| + case PartScrollbarVerticalThumb:
|
| + return blink::WebSize(15, kMinimumVerticalLength);
|
| + default:
|
| + return WebSize();
|
| + }
|
| + }
|
| + static constexpr int kMinimumHorizontalLength = 51;
|
| + static constexpr int kMinimumVerticalLength = 52;
|
| +};
|
| +
|
| +constexpr int StubWebThemeEngine::kMinimumHorizontalLength;
|
| +constexpr int StubWebThemeEngine::kMinimumVerticalLength;
|
| +
|
| +class ScrollbarTestingPlatformSupport : public TestingPlatformSupport {
|
| + public:
|
| + WebThemeEngine* themeEngine() override { return &m_stubThemeEngine; }
|
| +
|
| + private:
|
| + StubWebThemeEngine m_stubThemeEngine;
|
| +};
|
| +
|
| +// Test both overlay and non-overlay scrollbars.
|
| +INSTANTIATE_TEST_CASE_P(All, ScrollbarAppearanceTest, ::testing::Bool());
|
| +
|
| +#if !OS(MACOSX)
|
| +// Ensure that the minimum length for a scrollbar thumb comes from the
|
| +// WebThemeEngine. Note, Mac scrollbars differ from all other platforms so this
|
| +// test doesn't apply there. https://crbug.com/682209.
|
| +TEST_P(ScrollbarAppearanceTest, ThemeEngineDefinesMinimumThumbLength) {
|
| + ScopedTestingPlatformSupport<ScrollbarTestingPlatformSupport> platform;
|
| +
|
| + v8::HandleScope handleScope(v8::Isolate::GetCurrent());
|
| + webView().resize(WebSize(800, 600));
|
| + SimRequest request("https://example.com/test.html", "text/html");
|
| + loadURL("https://example.com/test.html");
|
| + request.complete(
|
| + "<style> body { width: 1000000px; height: 1000000px; } </style>");
|
| + ScrollableArea* scrollableArea =
|
| + document().view()->layoutViewportScrollableArea();
|
| +
|
| + compositor().beginFrame();
|
| + ASSERT_TRUE(scrollableArea->verticalScrollbar());
|
| + ASSERT_TRUE(scrollableArea->horizontalScrollbar());
|
| +
|
| + ScrollbarTheme& theme = scrollableArea->verticalScrollbar()->theme();
|
| + EXPECT_EQ(StubWebThemeEngine::kMinimumHorizontalLength,
|
| + theme.thumbLength(*scrollableArea->horizontalScrollbar()));
|
| + EXPECT_EQ(StubWebThemeEngine::kMinimumVerticalLength,
|
| + theme.thumbLength(*scrollableArea->verticalScrollbar()));
|
| +}
|
| +#endif
|
| +
|
| } // namespace
|
|
|
| } // namespace blink
|
|
|