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

Unified Diff: Source/web/WebDevToolsAgentImpl.cpp

Issue 145003002: [DevTools] Switch from blink-based to content-based touch emulation. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years, 9 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: 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)

Powered by Google App Engine
This is Rietveld 408576698