void ScrollAnchor::notifyBeforeLayout() { if (m_queued) { m_scrollAnchorDisablingStyleChanged |= computeScrollAnchorDisablingStyleChanged(); return; } DCHECK(m_scroller); ScrollOffset scrollOffset = m_scroller->getScrollOffset(); float blockDirectionScrollOffset = scrollerLayoutBox(m_scroller)->isHorizontalWritingMode() ? scrollOffset.height() : scrollOffset.width(); if (blockDirectionScrollOffset == 0) { clearSelf(); return; } if (!m_anchorObject) { findAnchor(); if (!m_anchorObject) return; m_anchorObject->setIsScrollAnchorObject(); m_savedRelativeOffset = computeRelativeOffset(m_anchorObject, m_scroller, m_corner); } m_scrollAnchorDisablingStyleChanged = computeScrollAnchorDisablingStyleChanged(); FrameView* frameView = scrollerLayoutBox(m_scroller)->frameView(); ScrollableArea* owningScroller = m_scroller->isRootFrameViewport() ? &toRootFrameViewport(m_scroller)->layoutViewport() : m_scroller.get(); frameView->enqueueScrollAnchoringAdjustment(owningScroller); m_queued = true; }