// Copyright 2016 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_PAGE_SCROLLING_ROOT_SCROLLER_CONTROLLER_H_ #define THIRD_PARTY_BLINK_RENDERER_CORE_PAGE_SCROLLING_ROOT_SCROLLER_CONTROLLER_H_ #include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/platform/heap/collection_support/heap_hash_set.h" #include "third_party/blink/renderer/platform/heap/garbage_collected.h" namespace blink { class Document; class Element; class HTMLFrameOwnerElement; class Node; // Manages the root scroller associated with a given document. The root // scroller causes browser controls movement, overscroll effects and prevents // chaining scrolls up further in the DOM. It can be set from script using // document.setRootScroller. High-level details are available in README.md. // // There are two notions of a root scroller in this class: m_rootScroller and // m_effectiveRootScroller. The former is the Element that was set as the root // scroller using document.setRootScroller. If the page didn't set a root // scroller this will be nullptr. The "effective" root scroller is the current // Node we're using internally to apply viewport scrolling actions. Both these // elements come from this controller's associated Document. The final "global" // root scroller, the one whose scrolling hides browser controls, may be in a // different frame. // // If the currently set m_rootScroller is a valid element to become the root // scroller, it will be promoted to the effective root scroller. If it is not // valid, the effective root scroller will fall back to the document Node. The // rules for what makes an element a valid root scroller are set in // isValidRootScroller(). The validity of the current root scroller is // re-checked after layout as part of the document lifecycle. class CORE_EXPORT RootScrollerController : public GarbageCollected<RootScrollerController> { … }; } // namespace blink #endif // THIRD_PARTY_BLINK_RENDERER_CORE_PAGE_SCROLLING_ROOT_SCROLLER_CONTROLLER_H_