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(); |