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

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

Issue 2096633002: Adds scroll position/scale emulation to DevTools. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 6 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 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
143 , m_needsUpdateWidgetGeometries(false) 143 , m_needsUpdateWidgetGeometries(false)
144 , m_needsUpdateViewportIntersection(true) 144 , m_needsUpdateViewportIntersection(true)
145 , m_needsUpdateViewportIntersectionInSubtree(true) 145 , m_needsUpdateViewportIntersectionInSubtree(true)
146 #if ENABLE(ASSERT) 146 #if ENABLE(ASSERT)
147 , m_hasBeenDisposed(false) 147 , m_hasBeenDisposed(false)
148 #endif 148 #endif
149 , m_horizontalScrollbarMode(ScrollbarAuto) 149 , m_horizontalScrollbarMode(ScrollbarAuto)
150 , m_verticalScrollbarMode(ScrollbarAuto) 150 , m_verticalScrollbarMode(ScrollbarAuto)
151 , m_horizontalScrollbarLock(false) 151 , m_horizontalScrollbarLock(false)
152 , m_verticalScrollbarLock(false) 152 , m_verticalScrollbarLock(false)
153 , m_scrollOverrideEnabled(false)
153 , m_scrollbarsAvoidingResizer(0) 154 , m_scrollbarsAvoidingResizer(0)
154 , m_scrollbarsSuppressed(false) 155 , m_scrollbarsSuppressed(false)
155 , m_inUpdateScrollbars(false) 156 , m_inUpdateScrollbars(false)
156 , m_frameTimingRequestsDirty(true) 157 , m_frameTimingRequestsDirty(true)
157 , m_viewportIntersectionValid(false) 158 , m_viewportIntersectionValid(false)
158 , m_hiddenForThrottling(false) 159 , m_hiddenForThrottling(false)
159 , m_crossOriginForThrottling(false) 160 , m_crossOriginForThrottling(false)
160 , m_subtreeThrottled(false) 161 , m_subtreeThrottled(false)
161 , m_isUpdatingAllLifecyclePhases(false) 162 , m_isUpdatingAllLifecyclePhases(false)
162 , m_scrollAnchor(this) 163 , m_scrollAnchor(this)
(...skipping 1394 matching lines...) Expand 10 before | Expand all | Expand 10 after
1557 scrollToFragmentAnchor(); 1558 scrollToFragmentAnchor();
1558 } 1559 }
1559 1560
1560 void FrameView::clearFragmentAnchor() 1561 void FrameView::clearFragmentAnchor()
1561 { 1562 {
1562 m_fragmentAnchor = nullptr; 1563 m_fragmentAnchor = nullptr;
1563 } 1564 }
1564 1565
1565 void FrameView::setScrollPosition(const DoublePoint& scrollPoint, ScrollType scr ollType, ScrollBehavior scrollBehavior) 1566 void FrameView::setScrollPosition(const DoublePoint& scrollPoint, ScrollType scr ollType, ScrollBehavior scrollBehavior)
1566 { 1567 {
1567 DoublePoint newScrollPosition = clampScrollPosition(scrollPoint); 1568 DoublePoint newScrollPosition = clampScrollPosition(applyScrollOverrideToPos ition(newScrollPosition));
1568 if (newScrollPosition == scrollPositionDouble()) 1569 if (newScrollPosition == scrollPositionDouble())
1569 return; 1570 return;
1570 1571
1571 if (scrollBehavior == ScrollBehaviorAuto) 1572 if (scrollBehavior == ScrollBehaviorAuto)
1572 scrollBehavior = scrollBehaviorStyle(); 1573 scrollBehavior = scrollBehaviorStyle();
1573 1574
1574 ScrollableArea::setScrollPosition(newScrollPosition, scrollType, scrollBehav ior); 1575 ScrollableArea::setScrollPosition(newScrollPosition, scrollType, scrollBehav ior);
1575 } 1576 }
1576 1577
1578 void FrameView::setScrollOverride(const DoublePoint& position)
1579 {
1580 m_scrollOverrideEnabled = true;
1581 m_scrollOverridePosition = position;
1582 setScrollPosition(scrollPosition(), ProgrammaticScroll, ScrollBehaviorInstan t);
1583 }
1584
1585 void FrameView::clearScrollOverride()
1586 {
1587 m_scrollOverrideEnabled = false;
1588 }
1589
1577 void FrameView::didUpdateElasticOverscroll() 1590 void FrameView::didUpdateElasticOverscroll()
1578 { 1591 {
1579 Page* page = frame().page(); 1592 Page* page = frame().page();
1580 if (!page) 1593 if (!page)
1581 return; 1594 return;
1582 FloatSize elasticOverscroll = page->chromeClient().elasticOverscroll(); 1595 FloatSize elasticOverscroll = page->chromeClient().elasticOverscroll();
1583 if (m_horizontalScrollbar) { 1596 if (m_horizontalScrollbar) {
1584 float delta = elasticOverscroll.width() - m_horizontalScrollbar->elastic Overscroll(); 1597 float delta = elasticOverscroll.width() - m_horizontalScrollbar->elastic Overscroll();
1585 if (delta != 0) { 1598 if (delta != 0) {
1586 m_horizontalScrollbar->setElasticOverscroll(elasticOverscroll.width( )); 1599 m_horizontalScrollbar->setElasticOverscroll(elasticOverscroll.width( ));
(...skipping 1639 matching lines...) Expand 10 before | Expand all | Expand 10 after
3226 return orientation == HorizontalScrollbar ? scrollSize.width() : scrollS ize.height(); 3239 return orientation == HorizontalScrollbar ? scrollSize.width() : scrollS ize.height();
3227 } 3240 }
3228 3241
3229 return scrollbar->totalSize() - scrollbar->visibleSize(); 3242 return scrollbar->totalSize() - scrollbar->visibleSize();
3230 } 3243 }
3231 3244
3232 void FrameView::setScrollOffset(const DoublePoint& offset, ScrollType scrollType ) 3245 void FrameView::setScrollOffset(const DoublePoint& offset, ScrollType scrollType )
3233 { 3246 {
3234 // TODO(skobes): We shouldn't have to clamp here; instead we should update c allers 3247 // TODO(skobes): We shouldn't have to clamp here; instead we should update c allers
3235 // ScrollableArea::scrollPositionChanged to only pass clamped offsets. 3248 // ScrollableArea::scrollPositionChanged to only pass clamped offsets.
3236 DoublePoint newPosition = clampScrollPosition(offset); 3249 DoublePoint newPosition = clampScrollPosition(applyScrollOverrideToPosition( offset));
3237 3250
3238 DoublePoint oldPosition = m_scrollPosition; 3251 DoublePoint oldPosition = m_scrollPosition;
3239 DoubleSize scrollDelta = newPosition - oldPosition; 3252 DoubleSize scrollDelta = newPosition - oldPosition;
3240 if (scrollDelta.isZero()) 3253 if (scrollDelta.isZero())
3241 return; 3254 return;
3242 3255
3243 if (m_frame->settings() && m_frame->settings()->rootLayerScrolls()) { 3256 if (m_frame->settings() && m_frame->settings()->rootLayerScrolls()) {
3244 // Don't scroll the FrameView! 3257 // Don't scroll the FrameView!
3245 ASSERT_NOT_REACHED(); 3258 ASSERT_NOT_REACHED();
3246 } 3259 }
(...skipping 28 matching lines...) Expand all
3275 if (AXObjectCache* cache = m_frame->document()->existingAXObjectCache()) 3288 if (AXObjectCache* cache = m_frame->document()->existingAXObjectCache())
3276 cache->handleScrollPositionChanged(this); 3289 cache->handleScrollPositionChanged(this);
3277 3290
3278 frame().loader().saveScrollState(); 3291 frame().loader().saveScrollState();
3279 frame().loader().client()->didChangeScrollOffset(); 3292 frame().loader().client()->didChangeScrollOffset();
3280 3293
3281 if (RuntimeEnabledFeatures::scrollAnchoringEnabled() && scrollType != Anchor ingScroll) 3294 if (RuntimeEnabledFeatures::scrollAnchoringEnabled() && scrollType != Anchor ingScroll)
3282 m_scrollAnchor.clear(); 3295 m_scrollAnchor.clear();
3283 } 3296 }
3284 3297
3298 DoublePoint FrameView::applyScrollOverrideToPosition(const DoublePoint& position )
3299 {
3300 DoublePoint newPosition = position;
3301 if (m_scrollOverrideEnabled) {
3302 if (m_scrollOverridePosition.x() >= 0)
Sami 2016/06/23 17:34:03 Do we need to validate the coordinates again here?
Eric Seckler 2016/06/23 18:12:43 At the moment, I'm using a value <0 to signal "no
Sami 2016/06/24 14:48:26 Oh I see, I didn't notice we can override just one
3303 newPosition.setX(m_scrollOverridePosition.x());
3304 if (m_scrollOverridePosition.y() >= 0)
3305 newPosition.setY(m_scrollOverridePosition.y());
3306 }
3307 return newPosition;
3308 }
3309
3285 void FrameView::windowResizerRectChanged() 3310 void FrameView::windowResizerRectChanged()
3286 { 3311 {
3287 updateScrollbars(); 3312 updateScrollbars();
3288 } 3313 }
3289 3314
3290 bool FrameView::hasOverlayScrollbars() const 3315 bool FrameView::hasOverlayScrollbars() const
3291 { 3316 {
3292 return (m_horizontalScrollbar && m_horizontalScrollbar->isOverlayScrollbar() ) 3317 return (m_horizontalScrollbar && m_horizontalScrollbar->isOverlayScrollbar() )
3293 || (m_verticalScrollbar && m_verticalScrollbar->isOverlayScrollbar()); 3318 || (m_verticalScrollbar && m_verticalScrollbar->isOverlayScrollbar());
3294 } 3319 }
(...skipping 847 matching lines...) Expand 10 before | Expand all | Expand 10 after
4142 return m_subtreeThrottled || (m_hiddenForThrottling && m_crossOriginForThrot tling); 4167 return m_subtreeThrottled || (m_hiddenForThrottling && m_crossOriginForThrot tling);
4143 } 4168 }
4144 4169
4145 LayoutBox& FrameView::boxForScrollControlPaintInvalidation() const 4170 LayoutBox& FrameView::boxForScrollControlPaintInvalidation() const
4146 { 4171 {
4147 ASSERT(!layoutViewItem().isNull()); 4172 ASSERT(!layoutViewItem().isNull());
4148 return *layoutView(); 4173 return *layoutView();
4149 } 4174 }
4150 4175
4151 } // namespace blink 4176 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698