blob: 500c7ec53eb7e12dffb43457d465bc448880f018 [file] [log] [blame]
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef THIRD_PARTY_BLINK_RENDERER_CORE_SCROLL_SCROLLBAR_TEST_SUITE_H_
#define THIRD_PARTY_BLINK_RENDERER_CORE_SCROLL_SCROLLBAR_TEST_SUITE_H_
#include <memory>
#include "base/single_thread_task_runner.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "third_party/blink/public/platform/platform.h"
#include "third_party/blink/public/platform/scheduler/test/renderer_scheduler_test_support.h"
#include "third_party/blink/public/platform/web_thread.h"
#include "third_party/blink/renderer/core/loader/empty_clients.h"
#include "third_party/blink/renderer/core/scroll/scrollable_area.h"
#include "third_party/blink/renderer/core/scroll/scrollbar.h"
#include "third_party/blink/renderer/core/scroll/scrollbar_theme_mock.h"
#include "third_party/blink/renderer/platform/heap/garbage_collected.h"
#include "third_party/blink/renderer/platform/scheduler/public/thread_scheduler.h"
namespace blink {
class MockPlatformChromeClient : public EmptyChromeClient {
public:
MockPlatformChromeClient() : is_popup_(false) {}
bool IsPopup() override { return is_popup_; }
void SetIsPopup(bool is_popup) { is_popup_ = is_popup; }
float WindowToViewportScalar(const float) const override { return 0; }
private:
bool is_popup_;
};
class MockScrollableArea : public GarbageCollectedFinalized<MockScrollableArea>,
public ScrollableArea {
USING_GARBAGE_COLLECTED_MIXIN(MockScrollableArea);
public:
static MockScrollableArea* Create() { return new MockScrollableArea(); }
static MockScrollableArea* Create(const ScrollOffset& maximum_scroll_offset) {
MockScrollableArea* mock = Create();
mock->SetMaximumScrollOffset(maximum_scroll_offset);
return mock;
}
MOCK_CONST_METHOD0(VisualRectForScrollbarParts, LayoutRect());
MOCK_CONST_METHOD0(IsActive, bool());
MOCK_CONST_METHOD0(IsThrottled, bool());
MOCK_CONST_METHOD1(ScrollSize, int(ScrollbarOrientation));
MOCK_CONST_METHOD0(IsScrollCornerVisible, bool());
MOCK_CONST_METHOD0(ScrollCornerRect, IntRect());
MOCK_CONST_METHOD0(EnclosingScrollableArea, ScrollableArea*());
MOCK_CONST_METHOD1(VisibleContentRect, IntRect(IncludeScrollbarsInRect));
MOCK_CONST_METHOD0(ContentsSize, IntSize());
MOCK_CONST_METHOD0(ScrollableAreaBoundingBox, IntRect());
MOCK_CONST_METHOD0(LayerForHorizontalScrollbar, GraphicsLayer*());
MOCK_CONST_METHOD0(LayerForVerticalScrollbar, GraphicsLayer*());
MOCK_CONST_METHOD0(HorizontalScrollbar, Scrollbar*());
MOCK_CONST_METHOD0(VerticalScrollbar, Scrollbar*());
MOCK_CONST_METHOD0(ScrollbarsHiddenIfOverlay, bool());
bool UserInputScrollable(ScrollbarOrientation) const override { return true; }
bool ScrollbarsCanBeActive() const override { return true; }
bool ShouldPlaceVerticalScrollbarOnLeft() const override { return false; }
void UpdateScrollOffset(const ScrollOffset& offset, ScrollType) override {
scroll_offset_ = offset.ShrunkTo(maximum_scroll_offset_);
}
IntSize ScrollOffsetInt() const override {
return FlooredIntSize(scroll_offset_);
}
IntSize MinimumScrollOffsetInt() const override { return IntSize(); }
IntSize MaximumScrollOffsetInt() const override {
return ExpandedIntSize(maximum_scroll_offset_);
}
int VisibleHeight() const override { return 768; }
int VisibleWidth() const override { return 1024; }
CompositorElementId GetCompositorElementId() const override {
return CompositorElementId();
}
bool ScrollAnimatorEnabled() const override { return false; }
int PageStep(ScrollbarOrientation) const override { return 0; }
void ScrollControlWasSetNeedsPaintInvalidation() override {}
scoped_refptr<base::SingleThreadTaskRunner> GetTimerTaskRunner() const final {
return blink::scheduler::GetSingleThreadTaskRunnerForTesting();
}
ChromeClient* GetChromeClient() const override {
return chrome_client_.Get();
}
void SetIsPopup() { chrome_client_->SetIsPopup(true); }
ScrollbarTheme& GetPageScrollbarTheme() const override {
return ScrollbarTheme::DeprecatedStaticGetTheme();
}
using ScrollableArea::ShowOverlayScrollbars;
using ScrollableArea::HorizontalScrollbarNeedsPaintInvalidation;
using ScrollableArea::VerticalScrollbarNeedsPaintInvalidation;
using ScrollableArea::ClearNeedsPaintInvalidationForScrollControls;
void Trace(blink::Visitor* visitor) override {
visitor->Trace(chrome_client_);
ScrollableArea::Trace(visitor);
}
protected:
explicit MockScrollableArea()
: maximum_scroll_offset_(ScrollOffset(0, 100)),
chrome_client_(new MockPlatformChromeClient()) {}
explicit MockScrollableArea(const ScrollOffset& offset)
: maximum_scroll_offset_(offset),
chrome_client_(new MockPlatformChromeClient()) {}
private:
void SetMaximumScrollOffset(const ScrollOffset& maximum_scroll_offset) {
maximum_scroll_offset_ = maximum_scroll_offset;
}
ScrollOffset scroll_offset_;
ScrollOffset maximum_scroll_offset_;
Member<MockPlatformChromeClient> chrome_client_;
};
} // namespace blink
#endif