| Index: third_party/WebKit/Source/core/layout/LayoutBoxModelObject.h | 
| diff --git a/third_party/WebKit/Source/core/layout/LayoutBoxModelObject.h b/third_party/WebKit/Source/core/layout/LayoutBoxModelObject.h | 
| index 8609f9b8a1421185ab7c0c486e1c8db92fc9829b..f686b6257209764313e33d507a606c471448acd0 100644 | 
| --- a/third_party/WebKit/Source/core/layout/LayoutBoxModelObject.h | 
| +++ b/third_party/WebKit/Source/core/layout/LayoutBoxModelObject.h | 
| @@ -26,6 +26,7 @@ | 
|  | 
| #include "core/CoreExport.h" | 
| #include "core/layout/LayoutObject.h" | 
| +#include "core/page/scrolling/StickyPositionScrollingConstraints.h" | 
| #include "core/style/ShadowData.h" | 
| #include "platform/geometry/LayoutRect.h" | 
|  | 
| @@ -64,6 +65,15 @@ enum ContentChangeType { | 
|  | 
| class InlineFlowBox; | 
|  | 
| +struct LayoutBoxModelObjectRareData { | 
| +    WTF_MAKE_NONCOPYABLE(LayoutBoxModelObjectRareData); | 
| +    USING_FAST_MALLOC(LayoutBoxModelObjectRareData); | 
| +public: | 
| +    LayoutBoxModelObjectRareData() {} | 
| + | 
| +    StickyPositionScrollingConstraints m_stickyPositionScrollingConstraints; | 
| +}; | 
| + | 
| // This class is the base class for all CSS objects. | 
| // | 
| // All CSS objects follow the box model object. See THE BOX MODEL section in | 
| @@ -141,6 +151,12 @@ public: | 
| LayoutSize relativePositionOffset() const; | 
| LayoutSize relativePositionLogicalOffset() const { return style()->isHorizontalWritingMode() ? relativePositionOffset() : relativePositionOffset().transposedSize(); } | 
|  | 
| +    // Populates StickyPositionConstraints, setting the sticky box rect, containing block rect and updating | 
| +    // the constraint offsets according to the available space. | 
| +    FloatRect computeStickyConstrainingRect() const; | 
| +    void updateStickyPositionConstraints() const; | 
| +    LayoutSize stickyPositionOffset() const; | 
| + | 
| LayoutSize offsetForInFlowPosition() const; | 
|  | 
| // IE extensions. Used to calculate offsetWidth/Height.  Overridden by inlines (LayoutFlow) | 
| @@ -328,6 +344,8 @@ protected: | 
| void styleWillChange(StyleDifference, const ComputedStyle& newStyle) override; | 
| void styleDidChange(StyleDifference, const ComputedStyle* oldStyle) override; | 
|  | 
| +    void invalidateStickyConstraints(); | 
| + | 
| public: | 
| // These functions are only used internally to manipulate the layout tree structure via remove/insert/appendChildNode. | 
| // Since they are typically called only to move objects around within anonymous blocks (which only have layers in | 
| @@ -359,9 +377,18 @@ private: | 
| LayoutUnit computedCSSPadding(const Length&) const; | 
| bool isBoxModelObject() const final { return true; } | 
|  | 
| +    LayoutBoxModelObjectRareData& ensureRareData() | 
| +    { | 
| +        if (!m_rareData) | 
| +            m_rareData = adoptPtr(new LayoutBoxModelObjectRareData()); | 
| +        return *m_rareData.get(); | 
| +    } | 
| + | 
| // The PaintLayer associated with this object. | 
| // |m_layer| can be nullptr depending on the return value of layerTypeRequired(). | 
| OwnPtr<PaintLayer> m_layer; | 
| + | 
| +    OwnPtr<LayoutBoxModelObjectRareData> m_rareData; | 
| }; | 
|  | 
| DEFINE_LAYOUT_OBJECT_TYPE_CASTS(LayoutBoxModelObject, isBoxModelObject()); | 
|  |