diff options
author | pfeldman@chromium.org <pfeldman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-08-21 04:36:15 +0000 |
---|---|---|
committer | pfeldman@chromium.org <pfeldman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-08-21 04:36:15 +0000 |
commit | b59dc438a7417bbe89f1c8e88a655e737283392f (patch) | |
tree | 01b9cd48d325efd26ea3798e9428c31a237bbfad | |
parent | 28463e89cc3824b2f3af6c9cf545d153293d0430 (diff) | |
download | chromium_src-b59dc438a7417bbe89f1c8e88a655e737283392f.zip chromium_src-b59dc438a7417bbe89f1c8e88a655e737283392f.tar.gz chromium_src-b59dc438a7417bbe89f1c8e88a655e737283392f.tar.bz2 |
DevTools: support Input.dispatchGestureEvent for automation.
Review URL: https://chromiumcodereview.appspot.com/22929013
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@218645 0039d316-1c4b-4281-b951-d872f2087c98
4 files changed, 105 insertions, 4 deletions
diff --git a/content/browser/devtools/devtools_protocol_constants.cc b/content/browser/devtools/devtools_protocol_constants.cc index cf495e1..b25c5c8 100644 --- a/content/browser/devtools/devtools_protocol_constants.cc +++ b/content/browser/devtools/devtools_protocol_constants.cc @@ -22,15 +22,22 @@ const char kParamType[] = "type"; const char kParamModifiers[] = "modifiers"; const char kParamTimestamp[] = "timestamp"; const char kParamDeviceSpace[] = "deviceSpace"; +const char kParamX[] = "x"; +const char kParamY[] = "y"; namespace dispatchMouseEvent { const char kName[] = "Input.dispatchMouseEvent"; - const char kParamX[] = "x"; - const char kParamY[] = "y"; const char kParamButton[] = "button"; const char kParamClickCount[] = "clickCount"; } // dispatchMouseEvent +namespace dispatchGestureEvent { + const char kName[] = "Input.dispatchGestureEvent"; + const char kParamDeltaX[] = "deltaX"; + const char kParamDeltaY[] = "deltaY"; + const char kParamPinchScale[] = "pinchScale"; +} // dispatchGestureEvent + } // Input namespace Inspector { diff --git a/content/browser/devtools/devtools_protocol_constants.h b/content/browser/devtools/devtools_protocol_constants.h index 6b96ca5..7d06add 100644 --- a/content/browser/devtools/devtools_protocol_constants.h +++ b/content/browser/devtools/devtools_protocol_constants.h @@ -29,6 +29,8 @@ namespace Input { extern const char kParamModifiers[]; extern const char kParamTimestamp[]; extern const char kParamDeviceSpace[]; + extern const char kParamX[]; + extern const char kParamY[]; namespace dispatchMouseEvent { extern const char kName[]; @@ -38,6 +40,13 @@ namespace Input { extern const char kParamClickCount[]; } // dispatchMouseEvent + namespace dispatchGestureEvent { + extern const char kName[]; + extern const char kParamDeltaX[]; + extern const char kParamDeltaY[]; + extern const char kParamPinchScale[]; + } // dispatchGestureEvent + } // Input namespace Inspector { diff --git a/content/browser/devtools/renderer_overrides_handler.cc b/content/browser/devtools/renderer_overrides_handler.cc index 3b75e98..3e9ffc3 100644 --- a/content/browser/devtools/renderer_overrides_handler.cc +++ b/content/browser/devtools/renderer_overrides_handler.cc @@ -17,6 +17,7 @@ #include "content/browser/devtools/devtools_tracing_handler.h" #include "content/browser/renderer_host/dip_util.h" #include "content/browser/renderer_host/render_view_host_delegate.h" +#include "content/browser/renderer_host/render_view_host_impl.h" #include "content/port/browser/render_widget_host_view_port.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/devtools_agent_host.h" @@ -134,6 +135,11 @@ RendererOverridesHandler::RendererOverridesHandler(DevToolsAgentHost* agent) base::Bind( &RendererOverridesHandler::InputDispatchMouseEvent, base::Unretained(this))); + RegisterCommandHandler( + devtools::Input::dispatchGestureEvent::kName, + base::Bind( + &RendererOverridesHandler::InputDispatchGestureEvent, + base::Unretained(this))); } RendererOverridesHandler::~RendererOverridesHandler() {} @@ -424,8 +430,8 @@ RendererOverridesHandler::InputDispatchMouseEvent( int x; int y; - if (!params->GetInteger(devtools::Input::dispatchMouseEvent::kParamX, &x) || - !params->GetInteger(devtools::Input::dispatchMouseEvent::kParamY, &y)) { + if (!params->GetInteger(devtools::Input::kParamX, &x) || + !params->GetInteger(devtools::Input::kParamY, &y)) { return NULL; } @@ -463,7 +469,84 @@ RendererOverridesHandler::InputDispatchMouseEvent( } host->ForwardMouseEvent(mouse_event); + return command->SuccessResponse(NULL); +} + +scoped_refptr<DevToolsProtocol::Response> +RendererOverridesHandler::InputDispatchGestureEvent( + scoped_refptr<DevToolsProtocol::Command> command) { + base::DictionaryValue* params = command->params(); + if (!params) + return NULL; + + RenderViewHostImpl* host = static_cast<RenderViewHostImpl*>( + agent_->GetRenderViewHost()); + WebKit::WebGestureEvent event; + ParseGenericInputParams(params, &event); + + std::string type; + if (params->GetString(devtools::Input::kParamType, + &type)) { + if (type == "scrollBegin") + event.type = WebInputEvent::GestureScrollBegin; + else if (type == "scrollUpdate") + event.type = WebInputEvent::GestureScrollUpdate; + else if (type == "scrollEnd") + event.type = WebInputEvent::GestureScrollEnd; + else if (type == "tapDown") + event.type = WebInputEvent::GestureTapDown; + else if (type == "tap") + event.type = WebInputEvent::GestureTap; + else if (type == "pinchBegin") + event.type = WebInputEvent::GesturePinchBegin; + else if (type == "pinchUpdate") + event.type = WebInputEvent::GesturePinchUpdate; + else if (type == "pinchEnd") + event.type = WebInputEvent::GesturePinchEnd; + else + return NULL; + } else { + return NULL; + } + + float device_scale_factor = ui::GetScaleFactorScale( + GetScaleFactorForView(host->GetView())); + + int x; + int y; + if (!params->GetInteger(devtools::Input::kParamX, &x) || + !params->GetInteger(devtools::Input::kParamY, &y)) { + return NULL; + } + event.x = floor(x / device_scale_factor); + event.y = floor(y / device_scale_factor); + event.globalX = event.x; + event.globalY = event.y; + + if (type == "scrollUpdate") { + int dx; + int dy; + if (!params->GetInteger( + devtools::Input::dispatchGestureEvent::kParamDeltaX, &dx) || + !params->GetInteger( + devtools::Input::dispatchGestureEvent::kParamDeltaY, &dy)) { + return NULL; + } + event.data.scrollUpdate.deltaX = floor(dx / device_scale_factor); + event.data.scrollUpdate.deltaY = floor(dy / device_scale_factor); + } + + if (type == "pinchUpdate") { + double scale; + if (!params->GetDouble( + devtools::Input::dispatchGestureEvent::kParamPinchScale, + &scale)) { + return NULL; + } + event.data.pinchUpdate.scale = static_cast<float>(scale); + } + host->ForwardGestureEvent(event); return command->SuccessResponse(NULL); } diff --git a/content/browser/devtools/renderer_overrides_handler.h b/content/browser/devtools/renderer_overrides_handler.h index d131a5f..d369ccd 100644 --- a/content/browser/devtools/renderer_overrides_handler.h +++ b/content/browser/devtools/renderer_overrides_handler.h @@ -61,6 +61,8 @@ class RendererOverridesHandler : public DevToolsProtocol::Handler { // Input domain. scoped_refptr<DevToolsProtocol::Response> InputDispatchMouseEvent( scoped_refptr<DevToolsProtocol::Command> command); + scoped_refptr<DevToolsProtocol::Response> InputDispatchGestureEvent( + scoped_refptr<DevToolsProtocol::Command> command); DevToolsAgentHost* agent_; base::WeakPtrFactory<RendererOverridesHandler> weak_factory_; |