Index: third_party/WebKit/Source/core/frame/FrameView.cpp |
diff --git a/third_party/WebKit/Source/core/frame/FrameView.cpp b/third_party/WebKit/Source/core/frame/FrameView.cpp |
index de923eecb350bf4c8fe65778e6a205192c500dd0..d02e43aca615b8dd5d059e6d54aeda880b4b72b8 100644 |
--- a/third_party/WebKit/Source/core/frame/FrameView.cpp |
+++ b/third_party/WebKit/Source/core/frame/FrameView.cpp |
@@ -131,6 +131,7 @@ FrameView::FrameView(LocalFrame* frame) |
, m_safeToPropagateScrollToParent(true) |
, m_isTrackingPaintInvalidations(false) |
, m_scrollCorner(nullptr) |
+ , m_stickyPositionObjectCount(0) |
, m_inputEventsScaleFactorForEmulation(1) |
, m_layoutSizeFixedToFrameSize(true) |
, m_didScrollTimer(this, &FrameView::didScrollTimerFired) |
@@ -1622,6 +1623,14 @@ void FrameView::updateLayersAndCompositingAfterScrollIfNeeded() |
RefPtrWillBeRawPtr<FrameView> protect(this); |
+ // Update sticky position objects which are stuck to the viewport. |
+ for (const auto& viewportConstrainedObject : *m_viewportConstrainedObjects) { |
+ LayoutObject* layoutObject = viewportConstrainedObject; |
+ PaintLayer* layer = toLayoutBoxModelObject(layoutObject)->layer(); |
+ if (layoutObject->style()->position() == StickyPosition) |
+ layer->updateLayerPosition(); |
+ } |
+ |
// If there fixed position elements, scrolling may cause compositing layers to change. |
// Update widget and layer positions after scrolling, but only if we're not inside of |
// layout. |