Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(24)

Side by Side Diff: third_party/WebKit/Source/core/frame/FrameView.cpp

Issue 1647793002: Use ScrollAnchor in FrameView and PaintLayerScrollableArea. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@anchor-skeleton
Patch Set: address review comment Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1998, 1999 Torben Weis <weis@kde.org> 2 * Copyright (C) 1998, 1999 Torben Weis <weis@kde.org>
3 * 1999 Lars Knoll <knoll@kde.org> 3 * 1999 Lars Knoll <knoll@kde.org>
4 * 1999 Antti Koivisto <koivisto@kde.org> 4 * 1999 Antti Koivisto <koivisto@kde.org>
5 * 2000 Dirk Mueller <mueller@kde.org> 5 * 2000 Dirk Mueller <mueller@kde.org>
6 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
7 * (C) 2006 Graham Dennis (graham.dennis@gmail.com) 7 * (C) 2006 Graham Dennis (graham.dennis@gmail.com)
8 * (C) 2006 Alexey Proskuryakov (ap@nypop.com) 8 * (C) 2006 Alexey Proskuryakov (ap@nypop.com)
9 * Copyright (C) 2009 Google Inc. All rights reserved. 9 * Copyright (C) 2009 Google Inc. All rights reserved.
10 * 10 *
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
146 , m_horizontalScrollbarLock(false) 146 , m_horizontalScrollbarLock(false)
147 , m_verticalScrollbarLock(false) 147 , m_verticalScrollbarLock(false)
148 , m_scrollbarsAvoidingResizer(0) 148 , m_scrollbarsAvoidingResizer(0)
149 , m_scrollbarsSuppressed(false) 149 , m_scrollbarsSuppressed(false)
150 , m_inUpdateScrollbars(false) 150 , m_inUpdateScrollbars(false)
151 , m_frameTimingRequestsDirty(true) 151 , m_frameTimingRequestsDirty(true)
152 , m_viewportIntersectionValid(false) 152 , m_viewportIntersectionValid(false)
153 , m_hiddenForThrottling(false) 153 , m_hiddenForThrottling(false)
154 , m_crossOriginForThrottling(false) 154 , m_crossOriginForThrottling(false)
155 , m_isUpdatingAllLifecyclePhases(false) 155 , m_isUpdatingAllLifecyclePhases(false)
156 , m_scrollAnchor(this)
156 { 157 {
157 ASSERT(m_frame); 158 ASSERT(m_frame);
158 init(); 159 init();
159 } 160 }
160 161
161 PassRefPtrWillBeRawPtr<FrameView> FrameView::create(LocalFrame* frame) 162 PassRefPtrWillBeRawPtr<FrameView> FrameView::create(LocalFrame* frame)
162 { 163 {
163 RefPtrWillBeRawPtr<FrameView> view = adoptRefWillBeNoop(new FrameView(frame) ); 164 RefPtrWillBeRawPtr<FrameView> view = adoptRefWillBeNoop(new FrameView(frame) );
164 view->show(); 165 view->show();
165 return view.release(); 166 return view.release();
(...skipping 24 matching lines...) Expand all
190 #if ENABLE(OILPAN) 191 #if ENABLE(OILPAN)
191 visitor->trace(m_frame); 192 visitor->trace(m_frame);
192 visitor->trace(m_fragmentAnchor); 193 visitor->trace(m_fragmentAnchor);
193 visitor->trace(m_scrollableAreas); 194 visitor->trace(m_scrollableAreas);
194 visitor->trace(m_animatingScrollableAreas); 195 visitor->trace(m_animatingScrollableAreas);
195 visitor->trace(m_autoSizeInfo); 196 visitor->trace(m_autoSizeInfo);
196 visitor->trace(m_horizontalScrollbar); 197 visitor->trace(m_horizontalScrollbar);
197 visitor->trace(m_verticalScrollbar); 198 visitor->trace(m_verticalScrollbar);
198 visitor->trace(m_children); 199 visitor->trace(m_children);
199 visitor->trace(m_viewportScrollableArea); 200 visitor->trace(m_viewportScrollableArea);
201 visitor->trace(m_scrollAnchor);
200 #endif 202 #endif
201 Widget::trace(visitor); 203 Widget::trace(visitor);
202 ScrollableArea::trace(visitor); 204 ScrollableArea::trace(visitor);
203 } 205 }
204 206
205 void FrameView::reset() 207 void FrameView::reset()
206 { 208 {
207 m_hasPendingLayout = false; 209 m_hasPendingLayout = false;
208 m_doFullPaintInvalidation = false; 210 m_doFullPaintInvalidation = false;
209 m_layoutSchedulingEnabled = true; 211 m_layoutSchedulingEnabled = true;
(...skipping 577 matching lines...) Expand 10 before | Expand all | Expand 10 after
787 789
788 document->updateLayoutTreeIfNeeded(); 790 document->updateLayoutTreeIfNeeded();
789 lifecycle().advanceTo(DocumentLifecycle::StyleClean); 791 lifecycle().advanceTo(DocumentLifecycle::StyleClean);
790 792
791 if (m_frame->isMainFrame() && !m_viewportScrollableArea) { 793 if (m_frame->isMainFrame() && !m_viewportScrollableArea) {
792 ScrollableArea& visualViewport = m_frame->host()->visualViewport(); 794 ScrollableArea& visualViewport = m_frame->host()->visualViewport();
793 ScrollableArea* layoutViewport = layoutViewportScrollableArea(); 795 ScrollableArea* layoutViewport = layoutViewportScrollableArea();
794 ASSERT(layoutViewport); 796 ASSERT(layoutViewport);
795 m_viewportScrollableArea = RootFrameViewport::create(visualViewport, *la youtViewport); 797 m_viewportScrollableArea = RootFrameViewport::create(visualViewport, *la youtViewport);
796 } 798 }
799
800 if (scrollAnchoringEnabled())
801 m_scrollAnchor.save();
797 } 802 }
798 803
799 static inline void layoutFromRootObject(LayoutObject& root) 804 static inline void layoutFromRootObject(LayoutObject& root)
800 { 805 {
801 LayoutState layoutState(root); 806 LayoutState layoutState(root);
802 root.layout(); 807 root.layout();
803 } 808 }
804 809
805 void FrameView::prepareLayoutAnalyzer() 810 void FrameView::prepareLayoutAnalyzer()
806 { 811 {
(...skipping 715 matching lines...) Expand 10 before | Expand all | Expand 10 after
1522 void FrameView::setScrollPosition(const DoublePoint& scrollPoint, ScrollType scr ollType, ScrollBehavior scrollBehavior) 1527 void FrameView::setScrollPosition(const DoublePoint& scrollPoint, ScrollType scr ollType, ScrollBehavior scrollBehavior)
1523 { 1528 {
1524 DoublePoint newScrollPosition = clampScrollPosition(scrollPoint); 1529 DoublePoint newScrollPosition = clampScrollPosition(scrollPoint);
1525 if (newScrollPosition == scrollPositionDouble()) 1530 if (newScrollPosition == scrollPositionDouble())
1526 return; 1531 return;
1527 1532
1528 if (scrollBehavior == ScrollBehaviorAuto) 1533 if (scrollBehavior == ScrollBehaviorAuto)
1529 scrollBehavior = scrollBehaviorStyle(); 1534 scrollBehavior = scrollBehaviorStyle();
1530 1535
1531 ScrollableArea::setScrollPosition(newScrollPosition, scrollType, scrollBehav ior); 1536 ScrollableArea::setScrollPosition(newScrollPosition, scrollType, scrollBehav ior);
1537
1538 if (scrollAnchoringEnabled() && scrollType != AnchoringScroll)
1539 m_scrollAnchor.clear();
1532 } 1540 }
1533 1541
1534 void FrameView::didUpdateElasticOverscroll() 1542 void FrameView::didUpdateElasticOverscroll()
1535 { 1543 {
1536 Page* page = frame().page(); 1544 Page* page = frame().page();
1537 if (!page) 1545 if (!page)
1538 return; 1546 return;
1539 FloatSize elasticOverscroll = page->chromeClient().elasticOverscroll(); 1547 FloatSize elasticOverscroll = page->chromeClient().elasticOverscroll();
1540 if (m_horizontalScrollbar) { 1548 if (m_horizontalScrollbar) {
1541 float delta = elasticOverscroll.width() - m_horizontalScrollbar->elastic Overscroll(); 1549 float delta = elasticOverscroll.width() - m_horizontalScrollbar->elastic Overscroll();
(...skipping 461 matching lines...) Expand 10 before | Expand all | Expand 10 after
2003 // Plugins could have torn down the page inside updateWidgetGeometries(). 2011 // Plugins could have torn down the page inside updateWidgetGeometries().
2004 if (!layoutView()) 2012 if (!layoutView())
2005 return; 2013 return;
2006 2014
2007 scheduleUpdateWidgetsIfNecessary(); 2015 scheduleUpdateWidgetsIfNecessary();
2008 2016
2009 if (ScrollingCoordinator* scrollingCoordinator = this->scrollingCoordinator( )) 2017 if (ScrollingCoordinator* scrollingCoordinator = this->scrollingCoordinator( ))
2010 scrollingCoordinator->notifyGeometryChanged(); 2018 scrollingCoordinator->notifyGeometryChanged();
2011 2019
2012 scrollToFragmentAnchor(); 2020 scrollToFragmentAnchor();
2021 // TODO(skobes): Figure out interactions between scroll anchor, fragment anc hor, and history restoration.
2022 if (scrollAnchoringEnabled())
2023 m_scrollAnchor.restore();
2013 2024
2014 sendResizeEventIfNeeded(); 2025 sendResizeEventIfNeeded();
2015 } 2026 }
2016 2027
2017 bool FrameView::wasViewportResized() 2028 bool FrameView::wasViewportResized()
2018 { 2029 {
2019 ASSERT(m_frame); 2030 ASSERT(m_frame);
2020 LayoutView* layoutView = this->layoutView(); 2031 LayoutView* layoutView = this->layoutView();
2021 if (!layoutView) 2032 if (!layoutView)
2022 return false; 2033 return false;
(...skipping 2027 matching lines...) Expand 10 before | Expand all | Expand 10 after
4050 return false; 4061 return false;
4051 return m_hiddenForThrottling && m_crossOriginForThrottling; 4062 return m_hiddenForThrottling && m_crossOriginForThrottling;
4052 } 4063 }
4053 4064
4054 LayoutBox& FrameView::boxForScrollControlPaintInvalidation() const 4065 LayoutBox& FrameView::boxForScrollControlPaintInvalidation() const
4055 { 4066 {
4056 ASSERT(layoutView()); 4067 ASSERT(layoutView());
4057 return *layoutView(); 4068 return *layoutView();
4058 } 4069 }
4059 4070
4071 bool FrameView::scrollAnchoringEnabled() const
4072 {
4073 if (Settings* settings = frame().settings())
4074 return settings->scrollAnchoringEnabled();
4075 return false;
4076 }
4077
4060 } // namespace blink 4078 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698