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

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: Sync, patch in 2169483002 (+ regression test), add DevTools tests. Created 4 years, 5 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 687b58d8451b0789bb81f5d439dc29cfbdc80004..f3f41a642112ed7e9d92dfc841c834f15d8e95ba 100644
--- a/third_party/WebKit/Source/core/frame/FrameView.cpp
+++ b/third_party/WebKit/Source/core/frame/FrameView.cpp
@@ -44,6 +44,7 @@
#include "core/frame/LocalFrame.h"
#include "core/frame/Location.h"
#include "core/frame/PageScaleConstraintsSet.h"
+#include "core/frame/ScrollAndScaleEmulator.h"
#include "core/frame/Settings.h"
#include "core/frame/TopControls.h"
#include "core/frame/VisualViewport.h"
@@ -205,6 +206,7 @@ DEFINE_TRACE(FrameView)
visitor->trace(m_autoSizeInfo);
visitor->trace(m_horizontalScrollbar);
visitor->trace(m_verticalScrollbar);
+ visitor->trace(m_scrollAndScaleEmulator);
visitor->trace(m_children);
visitor->trace(m_viewportScrollableArea);
visitor->trace(m_scrollAnchor);
@@ -1601,6 +1603,12 @@ void FrameView::setScrollPosition(const DoublePoint& scrollPoint, ScrollType scr
ScrollableArea::setScrollPosition(newScrollPosition, scrollType, scrollBehavior);
}
+void FrameView::setScrollAndScaleEmulator(ScrollAndScaleEmulator* emulator)
+{
+ m_scrollAndScaleEmulator = emulator;
+ setScrollPosition(scrollPosition(), ProgrammaticScroll, ScrollBehaviorInstant);
+}
+
void FrameView::didUpdateElasticOverscroll()
{
Page* page = frame().page();
@@ -3207,12 +3215,23 @@ void FrameView::setTopControlsViewportAdjustment(float adjustment)
IntPoint FrameView::maximumScrollPosition() const
{
+ IntPoint minimum = calculateMinimumScrollPosition();
+ IntPoint maximum = calculateMaximumScrollPosition().expandedTo(minimum);
+
+ if (m_scrollAndScaleEmulator)
+ return m_scrollAndScaleEmulator->applyFramePositionOverride(maximum).shrunkTo(maximum).expandedTo(minimum);
dgozman 2016/07/21 20:54:08 Is this web-observable? E.g. what this snippet wil
Eric Seckler 2016/07/22 14:44:48 For the layout viewport (frame), the change of scr
+
+ return maximum;
+}
+
+IntPoint FrameView::calculateMaximumScrollPosition() const
+{
// Make the same calculation as in CC's LayerImpl::MaxScrollOffset()
// FIXME: We probably shouldn't be storing the bounds in a float. crbug.com/422331.
IntSize visibleSize = visibleContentSize(ExcludeScrollbars) + topControlsSize();
IntSize contentBounds = contentsSize();
IntPoint maximumPosition = -scrollOrigin() + (contentBounds - visibleSize);
- return maximumPosition.expandedTo(minimumScrollPosition());
+ return maximumPosition;
}
void FrameView::addChild(Widget* child)
@@ -3331,6 +3350,17 @@ IntSize FrameView::contentsSize() const
IntPoint FrameView::minimumScrollPosition() const
{
+ IntPoint minimum = calculateMinimumScrollPosition();
+ IntPoint maximum = calculateMaximumScrollPosition().expandedTo(minimum);
+
+ if (m_scrollAndScaleEmulator)
+ return m_scrollAndScaleEmulator->applyFramePositionOverride(minimum).shrunkTo(maximum).expandedTo(minimum);
+
+ return minimum;
+}
+
+IntPoint FrameView::calculateMinimumScrollPosition() const
+{
return IntPoint(-scrollOrigin().x(), -scrollOrigin().y());
}

Powered by Google App Engine
This is Rietveld 408576698