Index: third_party/WebKit/Source/core/page/scrolling/TopDocumentRootScrollerController.h |
diff --git a/third_party/WebKit/Source/core/page/scrolling/TopDocumentRootScrollerController.h b/third_party/WebKit/Source/core/page/scrolling/TopDocumentRootScrollerController.h |
index d7422c0e0b7822165c24831afdb450d9291c259b..5df99fcd381f977d2861dd630e926e903b7837f6 100644 |
--- a/third_party/WebKit/Source/core/page/scrolling/TopDocumentRootScrollerController.h |
+++ b/third_party/WebKit/Source/core/page/scrolling/TopDocumentRootScrollerController.h |
@@ -18,11 +18,15 @@ class ScrollStateCallback; |
class ViewportScrollCallback; |
// The RootScrollerController used to manage the root scroller for the top |
-// level Document on a page. In addition to the regular RootScroller duties |
+// level Document on a page. In addition to the regular RootScroller duties, |
// such as keeping track of which Element is set as root scroller and which is |
-// the effective root scroller, this class is also responsible for setting the |
-// ViewportApplyScroll on the one Element on a page that should apply viewport |
-// scrolling actions. |
+// the effective root scroller, this class is also manages the "global" root |
+// scroller. That is, given all the iframes on a page and their individual root |
+// scrollers, this class will determine which ultimate Element should be used |
+// as the root scroller and ensures that Element is used to scroll top controls |
+// and provide overscroll effects. |
+// TODO(bokan): This class is currently OOPIF unaware. It should be broken into |
+// a standalone class and placed on a Page level object. crbug.com/505516 |
class CORE_EXPORT TopDocumentRootScrollerController |
: public RootScrollerController { |
public: |
@@ -38,33 +42,42 @@ public: |
// FrameView so that we can initialize the viewport scroll callback. |
void didAttachDocument() override; |
- // Returns true if the given ScrollStateCallback is the ViewportScrollCallback managed |
- // by this class. |
+ // Returns true if the given ScrollStateCallback is the |
+ // ViewportScrollCallback managed by this class. |
// TODO(bokan): Temporarily needed to allow ScrollCustomization to |
// differentiate between real custom callback and the built-in viewport |
// apply scroll. crbug.com/623079. |
bool isViewportScrollCallback( |
const ScrollStateCallback*) const override; |
+ // Returns the GraphicsLayer for the global root scroller. |
+ GraphicsLayer* rootScrollerLayer() override; |
+ |
protected: |
TopDocumentRootScrollerController(Document&); |
- // Ensures the effective root scroller is currently valid and replaces it |
- // with the default if not. |
- void updateEffectiveRootScroller() override; |
+ // Called when the root scroller of descendant frames changes. |
+ void globalRootScrollerMayHaveChanged() override; |
private: |
- // Ensures that the element that should be used as the root scroller on the |
- // page has the m_viewportApplyScroll callback set on it. |
- void setViewportApplyScrollOnRootScroller(); |
+ // Calculates the Element that should be the globalRootScroller. On a |
+ // simple page, this will simply the root frame's effectiveRootScroller but |
+ // if the root scroller is set to an iframe, this will then descend into |
+ // the iframe to find its effective root scroller. |
+ Element* findGlobalRootScrollerElement(); |
+ |
+ // Should be called to recalculate the global root scroller and ensure all |
+ // appropriate state changes are made if it changes. |
+ void updateGlobalRootScroller(); |
// The apply-scroll callback that moves top controls and produces |
// overscroll effects. This class makes sure this callback is set on the |
// appropriate root scroller element. |
Member<ViewportScrollCallback> m_viewportApplyScroll; |
- // Tracks which element currently has the m_viewportApplyScroll set to it. |
- WeakMember<Element> m_currentViewportApplyScrollHost; |
+ // The page level root scroller. i.e. The actual element for which scrolling |
+ // should move top controls and produce overscroll glow. |
+ WeakMember<Element> m_globalRootScroller; |
}; |
} // namespace blink |