// Copyright 2015 The Chromium Authors // 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_FRAME_ROOT_FRAME_VIEWPORT_H_ #define THIRD_PARTY_BLINK_RENDERER_CORE_FRAME_ROOT_FRAME_VIEWPORT_H_ #include "base/gtest_prod_util.h" #include "base/task/single_thread_task_runner.h" #include "third_party/blink/public/mojom/scroll/scroll_into_view_params.mojom-blink-forward.h" #include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/scroll/scrollable_area.h" #include "third_party/blink/renderer/platform/graphics/overlay_scrollbar_clip_behavior.h" #include "third_party/blink/renderer/platform/wtf/casting.h" namespace blink { class LocalFrameView; struct PhysicalRect; // ScrollableArea for the root frame's viewport. This class ties together the // concepts of layout and visual viewports, used in pinch-to-zoom. This class // takes two ScrollableAreas, one for the visual viewport and one for the // layout viewport, and delegates and composes the ScrollableArea API as needed // between them. For most scrolling APIs, this class will split the scroll up // between the two viewports in accord with the pinch-zoom semantics. For other // APIs that don't make sense on the combined viewport, the call is delegated to // the layout viewport. Thus, we could say this class is a decorator on the // LocalFrameView scrollable area that adds pinch-zoom semantics to scrolling. class CORE_EXPORT RootFrameViewport final : public GarbageCollected<RootFrameViewport>, public ScrollableArea { … }; template <> struct DowncastTraits<RootFrameViewport> { … }; } // namespace blink #endif // THIRD_PARTY_BLINK_RENDERER_CORE_FRAME_ROOT_FRAME_VIEWPORT_H_