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

Unified Diff: third_party/WebKit/Source/web/InspectorEmulationAgent.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/web/InspectorEmulationAgent.cpp
diff --git a/third_party/WebKit/Source/web/InspectorEmulationAgent.cpp b/third_party/WebKit/Source/web/InspectorEmulationAgent.cpp
index 98e643a44e64dca77d52ce88f4565dad52213cf9..6483f32fccd1ed7ae6c80e5f81e09c8c6a2a386c 100644
--- a/third_party/WebKit/Source/web/InspectorEmulationAgent.cpp
+++ b/third_party/WebKit/Source/web/InspectorEmulationAgent.cpp
@@ -16,7 +16,17 @@
namespace blink {
+namespace {
+static const double kMaxScale = 10.0;
+} // namespace
+
namespace EmulationAgentState {
+static const char scrollAndScaleOverrideEnabled[] = "scrollAndScaleOverrideEnabled";
+static const char framePositionXOverride[] = "framePositionXOverride";
+static const char framePositionYOverride[] = "framePositionYOverride";
+static const char visualViewportPositionXOverride[] = "visualViewportPositionXOverride";
+static const char visualViewportPositionYOverride[] = "visualViewportPositionYOverride";
+static const char pageScaleOverride[] = "pageScaleOverride";
static const char scriptExecutionDisabled[] = "scriptExecutionDisabled";
static const char touchEventEmulationEnabled[] = "touchEventEmulationEnabled";
static const char emulatedMedia[] = "emulatedMedia";
@@ -45,6 +55,17 @@ WebViewImpl* InspectorEmulationAgent::webViewImpl()
void InspectorEmulationAgent::restore()
{
ErrorString error;
+ if (m_state->booleanProperty(EmulationAgentState::scrollAndScaleOverrideEnabled, false)) {
dgozman 2016/07/21 20:54:09 if (!m_state....)
Eric Seckler 2016/07/22 14:44:48 Whoops, thanks for spotting :)
+ clearScrollAndScaleOverride(&error);
+ } else {
+ setScrollAndScaleOverride(
+ &error,
+ m_state->integerProperty(EmulationAgentState::framePositionXOverride, -1),
+ m_state->integerProperty(EmulationAgentState::framePositionYOverride, -1),
+ m_state->doubleProperty(EmulationAgentState::visualViewportPositionXOverride, -1),
+ m_state->doubleProperty(EmulationAgentState::visualViewportPositionYOverride, -1),
+ m_state->doubleProperty(EmulationAgentState::pageScaleOverride, 0));
+ }
setScriptExecutionDisabled(&error, m_state->booleanProperty(EmulationAgentState::scriptExecutionDisabled, false));
setTouchEmulationEnabled(&error, m_state->booleanProperty(EmulationAgentState::touchEventEmulationEnabled, false), protocol::Maybe<String>());
String16 emulatedMedia;
@@ -55,11 +76,59 @@ void InspectorEmulationAgent::restore()
void InspectorEmulationAgent::disable(ErrorString*)
{
ErrorString error;
+ clearScrollAndScaleOverride(&error);
setScriptExecutionDisabled(&error, false);
setTouchEmulationEnabled(&error, false, protocol::Maybe<String>());
setEmulatedMedia(&error, String());
}
+void InspectorEmulationAgent::setScrollAndScaleOverride(ErrorString* errorString, const Maybe<int>& scrollPositionX, const Maybe<int>& scrollPositionY, const Maybe<double>& visualViewportPositionX, const Maybe<double>& visualViewportPositionY, const Maybe<double>& visualViewportScale)
+{
+ if ((scrollPositionX.isJust() && scrollPositionX.fromJust() < 0 && scrollPositionX.fromJust() != -1)
+ || (scrollPositionY.isJust() && scrollPositionY.fromJust() < 0 && scrollPositionY.fromJust() != -1)) {
+ *errorString = "Scroll position coordinates must be non-negative or -1 (disabled)";
dgozman 2016/07/21 20:54:09 Let's not treat -1 as disabled. We have "optional"
Eric Seckler 2016/07/22 14:44:48 Done. I was conflicted about this, too, since allo
+ return;
+ }
+
+ if ((visualViewportPositionX.isJust() && visualViewportPositionX.fromJust() < 0 && visualViewportPositionX.fromJust() != -1)
+ || (visualViewportPositionY.isJust() && visualViewportPositionY.fromJust() < 0 && visualViewportPositionY.fromJust() != -1)) {
+ *errorString = "Visual viewport position coordinates must be non-negative or -1 (disabled)";
+ return;
+ }
+
+ if (visualViewportScale.isJust() && (visualViewportScale.fromJust() < 0 || visualViewportScale.fromJust() > kMaxScale)) {
+ *errorString = "Scale must be positive and not greater than " + Decimal::fromDouble(kMaxScale).toString() + " or 0 (disabled)";
+ }
+
+ setScrollAndScaleOverride(
+ scrollPositionX.fromMaybe(-1),
+ scrollPositionY.fromMaybe(-1),
+ visualViewportPositionX.fromMaybe(-1),
+ visualViewportPositionY.fromMaybe(-1),
+ visualViewportScale.fromMaybe(0));
+}
+
+void InspectorEmulationAgent::setScrollAndScaleOverride(int framePositionX, int framePositionY, double visualViewportPositionX, double visualViewportPositionY, double pageScale)
+{
+ m_state->setBoolean(EmulationAgentState::scrollAndScaleOverrideEnabled, true);
+ m_state->setInteger(EmulationAgentState::framePositionXOverride, framePositionX);
+ m_state->setInteger(EmulationAgentState::framePositionYOverride, framePositionY);
+ m_state->setDouble(EmulationAgentState::visualViewportPositionXOverride, visualViewportPositionX);
+ m_state->setDouble(EmulationAgentState::visualViewportPositionYOverride, visualViewportPositionY);
+ m_state->setDouble(EmulationAgentState::pageScaleOverride, pageScale);
+
+ webViewImpl()->setScrollAndScaleOverride(
+ IntPoint(framePositionX, framePositionY),
+ FloatPoint(visualViewportPositionX, visualViewportPositionY),
+ pageScale);
+}
+
+void InspectorEmulationAgent::clearScrollAndScaleOverride(ErrorString*)
+{
+ m_state->setBoolean(EmulationAgentState::scrollAndScaleOverrideEnabled, false);
+ webViewImpl()->clearScrollAndScaleOverride();
+}
+
void InspectorEmulationAgent::resetPageScaleFactor(ErrorString*)
{
webViewImpl()->resetScaleStateImmediately();

Powered by Google App Engine
This is Rietveld 408576698