Chromium Code Reviews| Index: Source/web/WebDevToolsAgentImpl.cpp |
| diff --git a/Source/web/WebDevToolsAgentImpl.cpp b/Source/web/WebDevToolsAgentImpl.cpp |
| index 9b08ec2e4bf8a02156ec17b0f7de55b018ffb3c4..727926eac4c294a6adce840882aa088bd856c210 100644 |
| --- a/Source/web/WebDevToolsAgentImpl.cpp |
| +++ b/Source/web/WebDevToolsAgentImpl.cpp |
| @@ -51,6 +51,7 @@ |
| #include "core/fetch/MemoryCache.h" |
| #include "core/frame/FrameView.h" |
| #include "core/frame/LocalFrame.h" |
| +#include "core/frame/Settings.h" |
| #include "core/inspector/InjectedScriptHost.h" |
| #include "core/inspector/InspectorController.h" |
| #include "core/page/Page.h" |
| @@ -205,6 +206,9 @@ WebDevToolsAgentImpl::WebDevToolsAgentImpl( |
| , m_emulateViewportEnabled(false) |
| , m_originalViewportEnabled(false) |
| , m_isOverlayScrollbarsEnabled(false) |
| + , m_touchEventEmulationEnabled(false) |
| + , m_originalTouchEnabled(false) |
| + , m_originalDeviceSupportsMouse(false) |
| { |
| ASSERT(m_hostId > 0); |
| ClientMessageLoopAdapter::ensureClientMessageLoopCreated(m_client); |
| @@ -298,6 +302,23 @@ bool WebDevToolsAgentImpl::handleInputEvent(WebCore::Page* page, const WebInputE |
| if (!m_attached && !m_generatingEvent) |
| return false; |
| + if (WebInputEvent::isGestureEventType(inputEvent.type) && m_touchEventEmulationEnabled) { |
| + FrameView* frameView = page->mainFrame()->view(); |
|
pfeldman
2014/04/07 17:32:59
Why are these gestures handled here?
pfeldman
2014/04/07 17:52:50
Please add fixme and a link to a bug.
dgozman
2014/04/08 16:51:48
Done.
|
| + PlatformGestureEventBuilder gestureEvent(frameView, *static_cast<const WebGestureEvent*>(&inputEvent)); |
| + if (gestureEvent.type() == PlatformEvent::GesturePinchUpdate) { |
| + IntPoint offset = gestureEvent.position(); |
| + float oldPageScaleFactor = page->pageScaleFactor(); |
| + float newPageScaleFactor = oldPageScaleFactor * gestureEvent.scale(); |
| + float offsetScale = 1 - oldPageScaleFactor / newPageScaleFactor; |
| + offset.scale(offsetScale, offsetScale); |
| + m_webViewImpl->setPageScaleFactor(newPageScaleFactor, offset + frameView->scrollPosition()); |
| + } |
| + if (gestureEvent.type() == PlatformEvent::GesturePinchBegin |
| + || gestureEvent.type() == PlatformEvent::GesturePinchUpdate |
| + || gestureEvent.type() == PlatformEvent::GesturePinchEnd) |
| + return true; |
| + } |
| + |
| InspectorController* ic = inspectorController(); |
| if (!ic) |
| return false; |
| @@ -352,6 +373,23 @@ void WebDevToolsAgentImpl::overrideDeviceMetrics(int width, int height, float de |
| } |
| } |
| +void WebDevToolsAgentImpl::setTouchEventEmulationEnabled(bool enabled) |
| +{ |
| + if (m_touchEventEmulationEnabled == enabled) |
| + return; |
| + |
| + if (!m_touchEventEmulationEnabled) { |
| + m_originalTouchEnabled = RuntimeEnabledFeatures::touchEnabled(); |
| + if (m_webViewImpl->page()) |
| + m_originalDeviceSupportsMouse = m_webViewImpl->page()->settings().deviceSupportsMouse(); |
| + } |
| + RuntimeEnabledFeatures::setTouchEnabled(enabled ? true : m_originalTouchEnabled); |
| + if (m_webViewImpl->page()) |
| + m_webViewImpl->page()->settings().setDeviceSupportsMouse(enabled ? false : m_originalDeviceSupportsMouse); |
| + m_client->setTouchEventEmulationEnabled(enabled); |
| + m_touchEventEmulationEnabled = enabled; |
| +} |
| + |
| void WebDevToolsAgentImpl::enableViewportEmulation() |
| { |
| if (m_emulateViewportEnabled) |