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

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: 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 716 matching lines...) Expand 10 before | Expand all | Expand 10 after
1523 void FrameView::setScrollPosition(const DoublePoint& scrollPoint, ScrollType scr ollType, ScrollBehavior scrollBehavior) 1528 void FrameView::setScrollPosition(const DoublePoint& scrollPoint, ScrollType scr ollType, ScrollBehavior scrollBehavior)
1524 { 1529 {
1525 DoublePoint newScrollPosition = clampScrollPosition(scrollPoint); 1530 DoublePoint newScrollPosition = clampScrollPosition(scrollPoint);
1526 if (newScrollPosition == scrollPositionDouble()) 1531 if (newScrollPosition == scrollPositionDouble())
1527 return; 1532 return;
1528 1533
1529 if (scrollBehavior == ScrollBehaviorAuto) 1534 if (scrollBehavior == ScrollBehaviorAuto)
1530 scrollBehavior = scrollBehaviorStyle(); 1535 scrollBehavior = scrollBehaviorStyle();
1531 1536
1532 ScrollableArea::setScrollPosition(newScrollPosition, scrollType, scrollBehav ior); 1537 ScrollableArea::setScrollPosition(newScrollPosition, scrollType, scrollBehav ior);
1538
1539 if (scrollAnchoringEnabled() && scrollType != AnchoringScroll)
1540 m_scrollAnchor.clear();
1533 } 1541 }
1534 1542
1535 void FrameView::didUpdateElasticOverscroll() 1543 void FrameView::didUpdateElasticOverscroll()
1536 { 1544 {
1537 Page* page = frame().page(); 1545 Page* page = frame().page();
1538 if (!page) 1546 if (!page)
1539 return; 1547 return;
1540 FloatSize elasticOverscroll = page->chromeClient().elasticOverscroll(); 1548 FloatSize elasticOverscroll = page->chromeClient().elasticOverscroll();
1541 if (m_horizontalScrollbar) { 1549 if (m_horizontalScrollbar) {
1542 float delta = elasticOverscroll.width() - m_horizontalScrollbar->elastic Overscroll(); 1550 float delta = elasticOverscroll.width() - m_horizontalScrollbar->elastic Overscroll();
(...skipping 460 matching lines...) Expand 10 before | Expand all | Expand 10 after
2003 2011
2004 // Plugins could have torn down the page inside updateWidgetGeometries(). 2012 // Plugins could have torn down the page inside updateWidgetGeometries().
2005 if (!layoutView()) 2013 if (!layoutView())
2006 return; 2014 return;
2007 2015
2008 scheduleUpdateWidgetsIfNecessary(); 2016 scheduleUpdateWidgetsIfNecessary();
2009 2017
2010 if (ScrollingCoordinator* scrollingCoordinator = this->scrollingCoordinator( )) 2018 if (ScrollingCoordinator* scrollingCoordinator = this->scrollingCoordinator( ))
2011 scrollingCoordinator->notifyGeometryChanged(); 2019 scrollingCoordinator->notifyGeometryChanged();
2012 2020
2013 scrollToFragmentAnchor(); 2021 scrollToFragmentAnchor();
ojan 2016/02/02 06:51:01 We'll need to think of what the right behavior is
skobes 2016/02/02 22:39:10 Added TODO. I think the right behavior is for the
ojan 2016/02/03 01:23:43 I agree.
2022 if (scrollAnchoringEnabled())
2023 m_scrollAnchor.restore();
2014 2024
2015 sendResizeEventIfNeeded(); 2025 sendResizeEventIfNeeded();
2016 } 2026 }
2017 2027
2018 bool FrameView::wasViewportResized() 2028 bool FrameView::wasViewportResized()
2019 { 2029 {
2020 ASSERT(m_frame); 2030 ASSERT(m_frame);
2021 LayoutView* layoutView = this->layoutView(); 2031 LayoutView* layoutView = this->layoutView();
2022 if (!layoutView) 2032 if (!layoutView)
2023 return false; 2033 return false;
(...skipping 2025 matching lines...) Expand 10 before | Expand all | Expand 10 after
4049 return false; 4059 return false;
4050 return m_hiddenForThrottling && m_crossOriginForThrottling; 4060 return m_hiddenForThrottling && m_crossOriginForThrottling;
4051 } 4061 }
4052 4062
4053 LayoutBox& FrameView::boxForScrollControlPaintInvalidation() const 4063 LayoutBox& FrameView::boxForScrollControlPaintInvalidation() const
4054 { 4064 {
4055 ASSERT(layoutView()); 4065 ASSERT(layoutView());
4056 return *layoutView(); 4066 return *layoutView();
4057 } 4067 }
4058 4068
4069 bool FrameView::scrollAnchoringEnabled() const
4070 {
4071 if (Settings* settings = frame().settings())
4072 return settings->scrollAnchoringEnabled();
4073 return false;
4074 }
4075
4059 } // namespace blink 4076 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698