| 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..6b4c9522a0916cc3dd99ece973768ef90f422a42 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)) {
|
| + 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)
|
| + || (scrollPositionY.isJust() && scrollPositionY.fromJust() < 0)) {
|
| + *errorString = "Scroll position coordinates must be non-negative";
|
| + return;
|
| + }
|
| +
|
| + if ((visualViewportPositionX.isJust() && visualViewportPositionX.fromJust() < 0)
|
| + || (visualViewportPositionY.isJust() && visualViewportPositionY.fromJust() < 0)) {
|
| + *errorString = "Visual viewport position coordinates must be non-negative";
|
| + return;
|
| + }
|
| +
|
| + if (visualViewportScale.isJust() && (visualViewportScale.fromJust() <= 0 || visualViewportScale.fromJust() > kMaxScale)) {
|
| + *errorString = "Scale must be positive and not greater than " + Decimal::fromDouble(kMaxScale).toString();
|
| + }
|
| +
|
| + 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();
|
|
|