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 4d0b6ba9a6f89a203b944deb16c160f5449a7548..96b1b27fc38795afb52cf6fcdc046db83ff86d3e 100644 |
--- a/third_party/WebKit/Source/core/frame/FrameView.cpp |
+++ b/third_party/WebKit/Source/core/frame/FrameView.cpp |
@@ -135,6 +135,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) |
@@ -1616,6 +1617,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. |