Chromium Code Reviews| Index: third_party/WebKit/Source/core/layout/ScrollAnchor.cpp |
| diff --git a/third_party/WebKit/Source/core/layout/ScrollAnchor.cpp b/third_party/WebKit/Source/core/layout/ScrollAnchor.cpp |
| index 0b3212850f6eb4a78d7d6013a92dcba244a55370..3242c0d94d87e53a6851496dfa2c6488d5e56e30 100644 |
| --- a/third_party/WebKit/Source/core/layout/ScrollAnchor.cpp |
| +++ b/third_party/WebKit/Source/core/layout/ScrollAnchor.cpp |
| @@ -4,6 +4,7 @@ |
| #include "core/layout/ScrollAnchor.h" |
| +#include "core/layout/LayoutObject.h" |
| #include "platform/scroll/ScrollableArea.h" |
| #include "wtf/Assertions.h" |
| @@ -35,11 +36,13 @@ static DoublePoint computeRelativeOffset(const ScrollableArea* scroller, const L |
| void ScrollAnchor::save() |
| { |
| - if (!m_anchorObject) |
| + if (!m_anchorObject) { |
| m_anchorObject = findAnchor(m_scroller); |
| - |
| - if (m_anchorObject) |
| - m_savedRelativeOffset = computeRelativeOffset(m_scroller, m_anchorObject); |
| + if (!m_anchorObject) |
| + return; |
| + m_anchorObject->setIsScrollAnchorObject(); |
| + } |
| + m_savedRelativeOffset = computeRelativeOffset(m_scroller, m_anchorObject); |
|
ojan
2016/02/05 11:01:52
I think this could be inside the if clause above a
skobes
2016/02/05 17:52:31
In theory, yes, but that seems brittle to me. Sup
ojan
2016/02/06 00:09:27
I can't think of any scenario in which it would ma
|
| } |
| void ScrollAnchor::restore() |
| @@ -52,4 +55,13 @@ void ScrollAnchor::restore() |
| m_scroller->setScrollPosition(m_scroller->scrollPositionDouble() + adjustment, AnchoringScroll); |
| } |
| +void ScrollAnchor::clear() |
| +{ |
| + LayoutObject* anchorObject = m_anchorObject; |
| + m_anchorObject = nullptr; |
| + |
| + if (anchorObject) |
| + anchorObject->maybeClearIsScrollAnchorObject(); |
| +} |
| + |
| } // namespace blink |