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

Unified 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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/frame/FrameView.cpp
diff --git a/third_party/WebKit/Source/core/frame/FrameView.cpp b/third_party/WebKit/Source/core/frame/FrameView.cpp
index 711d891a824a3e2b9f7211905cd5df5c9b6ecc27..a6b90cfad46c57ec38b461fcbecc64f72e23817c 100644
--- a/third_party/WebKit/Source/core/frame/FrameView.cpp
+++ b/third_party/WebKit/Source/core/frame/FrameView.cpp
@@ -150,6 +150,7 @@ FrameView::FrameView(LocalFrame* frame)
, m_verticalScrollbarMode(ScrollbarAuto)
, m_horizontalScrollbarLock(false)
, m_verticalScrollbarLock(false)
+ , m_scrollOverrideEnabled(false)
, m_scrollbarsAvoidingResizer(0)
, m_scrollbarsSuppressed(false)
, m_inUpdateScrollbars(false)
@@ -1564,7 +1565,7 @@ void FrameView::clearFragmentAnchor()
void FrameView::setScrollPosition(const DoublePoint& scrollPoint, ScrollType scrollType, ScrollBehavior scrollBehavior)
{
- DoublePoint newScrollPosition = clampScrollPosition(scrollPoint);
+ DoublePoint newScrollPosition = clampScrollPosition(applyScrollOverrideToPosition(newScrollPosition));
if (newScrollPosition == scrollPositionDouble())
return;
@@ -1574,6 +1575,18 @@ void FrameView::setScrollPosition(const DoublePoint& scrollPoint, ScrollType scr
ScrollableArea::setScrollPosition(newScrollPosition, scrollType, scrollBehavior);
}
+void FrameView::setScrollOverride(const DoublePoint& position)
+{
+ m_scrollOverrideEnabled = true;
+ m_scrollOverridePosition = position;
+ setScrollPosition(scrollPosition(), ProgrammaticScroll, ScrollBehaviorInstant);
+}
+
+void FrameView::clearScrollOverride()
+{
+ m_scrollOverrideEnabled = false;
+}
+
void FrameView::didUpdateElasticOverscroll()
{
Page* page = frame().page();
@@ -3233,7 +3246,7 @@ void FrameView::setScrollOffset(const DoublePoint& offset, ScrollType scrollType
{
// TODO(skobes): We shouldn't have to clamp here; instead we should update callers
// ScrollableArea::scrollPositionChanged to only pass clamped offsets.
- DoublePoint newPosition = clampScrollPosition(offset);
+ DoublePoint newPosition = clampScrollPosition(applyScrollOverrideToPosition(offset));
DoublePoint oldPosition = m_scrollPosition;
DoubleSize scrollDelta = newPosition - oldPosition;
@@ -3282,6 +3295,18 @@ void FrameView::setScrollOffset(const DoublePoint& offset, ScrollType scrollType
m_scrollAnchor.clear();
}
+DoublePoint FrameView::applyScrollOverrideToPosition(const DoublePoint& position)
+{
+ DoublePoint newPosition = position;
+ if (m_scrollOverrideEnabled) {
+ 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
+ newPosition.setX(m_scrollOverridePosition.x());
+ if (m_scrollOverridePosition.y() >= 0)
+ newPosition.setY(m_scrollOverridePosition.y());
+ }
+ return newPosition;
+}
+
void FrameView::windowResizerRectChanged()
{
updateScrollbars();

Powered by Google App Engine
This is Rietveld 408576698