Chromium Code Reviews| 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(); |