Chromium Code Reviews| 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 43718b3c8601adccf367e8306bbb5b33f57556d1..dbca09d33dc7908a0025d8c90bfc882d77eec534 100644 |
| --- a/third_party/WebKit/Source/core/frame/FrameView.cpp |
| +++ b/third_party/WebKit/Source/core/frame/FrameView.cpp |
| @@ -1928,16 +1928,23 @@ void FrameView::updateLayersAndCompositingAfterScrollIfNeeded() { |
| if (!hasViewportConstrainedObjects()) |
| return; |
| - // Update sticky position objects which are stuck to the viewport. |
| + // Update sticky position objects which are stuck to the viewport. In order to |
| + // correctly compute the sticky position offsets, the layers must be visited |
| + // top-down, so start at the 'root' sticky elements and recurse downwards. |
| for (const auto& viewportConstrainedObject : *m_viewportConstrainedObjects) { |
| LayoutObject* layoutObject = viewportConstrainedObject; |
| PaintLayer* layer = toLayoutBoxModelObject(layoutObject)->layer(); |
| - if (layoutObject->style()->position() == StickyPosition) { |
| - // TODO(skobes): Resolve circular dependency between scroll offset and |
| - // compositing state, and remove this disabler. https://crbug.com/420741 |
| - DisableCompositingQueryAsserts disabler; |
| - layer->updateLayerPositionsAfterOverflowScroll(); |
| - layoutObject->setMayNeedPaintInvalidationSubtree(); |
| + StickyConstraintsMap constraintsMap = |
| + layer->getScrollableArea()->stickyConstraintsMap(); |
| + if (layoutObject->style()->position() == StickyPosition && |
| + constraintsMap.contains(layer)) { |
| + if (!constraintsMap.get(layer).hasAncestorStickyElement()) { |
|
flackr
2017/01/18 14:42:56
nit: Add condition to outer if rather than nesting
smcgruer
2017/01/18 19:10:50
Done.
|
| + // TODO(skobes): Resolve circular dependency between scroll offset and |
| + // compositing state, and remove this disabler. https://crbug.com/420741 |
| + DisableCompositingQueryAsserts disabler; |
| + layer->updateLayerPositionsAfterOverflowScroll(); |
| + layoutObject->setMayNeedPaintInvalidationSubtree(); |
| + } |
| } |
| } |