Chromium Code Reviews| Index: content/browser/devtools/renderer_overrides_handler.cc |
| diff --git a/content/browser/devtools/renderer_overrides_handler.cc b/content/browser/devtools/renderer_overrides_handler.cc |
| index b068a85f084a5cde0500aae2c2fc74aef4238658..39e726c31af755800545e17dded272efe82ea29b 100644 |
| --- a/content/browser/devtools/renderer_overrides_handler.cc |
| +++ b/content/browser/devtools/renderer_overrides_handler.cc |
| @@ -22,6 +22,7 @@ |
| #include "content/browser/renderer_host/render_view_host_delegate.h" |
| #include "content/browser/renderer_host/render_view_host_impl.h" |
| #include "content/browser/renderer_host/render_widget_host_view_base.h" |
| +#include "content/browser/web_contents/web_contents_impl.h" |
| #include "content/common/view_messages.h" |
| #include "content/public/browser/browser_thread.h" |
| #include "content/public/browser/content_browser_client.h" |
| @@ -70,6 +71,7 @@ static int kCaptureRetryLimit = 2; |
| RendererOverridesHandler::RendererOverridesHandler() |
| : has_last_compositor_frame_metadata_(false), |
| capture_retry_count_(0), |
| + touch_emulation_enabled_(false), |
| weak_factory_(this) { |
| RegisterCommandHandler( |
| devtools::DOM::setFileInputFiles::kName, |
| @@ -121,6 +123,11 @@ RendererOverridesHandler::RendererOverridesHandler() |
| &RendererOverridesHandler::PageCaptureScreenshot, |
| base::Unretained(this))); |
| RegisterCommandHandler( |
| + devtools::Page::setTouchEmulationEnabled::kName, |
| + base::Bind( |
| + &RendererOverridesHandler::PageSetTouchEmulationEnabled, |
| + base::Unretained(this))); |
| + RegisterCommandHandler( |
| devtools::Page::canScreencast::kName, |
| base::Bind( |
| &RendererOverridesHandler::PageCanScreencast, |
| @@ -150,8 +157,8 @@ RendererOverridesHandler::RendererOverridesHandler() |
| RendererOverridesHandler::~RendererOverridesHandler() {} |
| void RendererOverridesHandler::OnClientDetached() { |
| - if (screencast_command_ && host_) |
| - host_->SetTouchEventEmulationEnabled(false, false); |
| + if (touch_emulation_enabled_) |
| + SetTouchEventEmulationEnabled(false); |
| screencast_command_ = NULL; |
| } |
| @@ -173,18 +180,14 @@ void RendererOverridesHandler::OnVisibilityChanged(bool visible) { |
| void RendererOverridesHandler::SetRenderViewHost( |
| RenderViewHostImpl* host) { |
| host_ = host; |
| - if (screencast_command_ && host) |
| - host->SetTouchEventEmulationEnabled(true, true); |
| + if (touch_emulation_enabled_) |
| + SetTouchEventEmulationEnabled(true); |
| } |
| void RendererOverridesHandler::ClearRenderViewHost() { |
| host_ = NULL; |
| } |
| -bool RendererOverridesHandler::OnSetTouchEventEmulationEnabled() { |
| - return screencast_command_.get() != NULL; |
| -} |
| - |
| void RendererOverridesHandler::InnerSwapCompositorFrame() { |
| if ((base::TimeTicks::Now() - last_frame_time_).InMilliseconds() < |
| kFrameRateThresholdMs) { |
| @@ -308,9 +311,7 @@ RendererOverridesHandler::ClearBrowserCookies( |
| scoped_refptr<DevToolsProtocol::Response> |
| RendererOverridesHandler::PageDisable( |
| scoped_refptr<DevToolsProtocol::Command> command) { |
| - if (screencast_command_ && host_) |
| - host_->SetTouchEventEmulationEnabled(false, false); |
| - screencast_command_ = NULL; |
| + OnClientDetached(); |
| return NULL; |
| } |
| @@ -488,6 +489,24 @@ void RendererOverridesHandler::ScreenshotCaptured( |
| } |
| scoped_refptr<DevToolsProtocol::Response> |
| +RendererOverridesHandler::PageSetTouchEmulationEnabled( |
| + scoped_refptr<DevToolsProtocol::Command> command) { |
| + base::DictionaryValue* params = command->params(); |
| + bool enabled; |
| + if (!params || !params->GetBoolean( |
| + devtools::Page::setTouchEmulationEnabled::kParamEnabled, |
| + &enabled)) { |
| + // Pass to renderer. |
| + return NULL; |
| + } |
| + |
| + if (touch_emulation_enabled_ != enabled) |
| + SetTouchEventEmulationEnabled(enabled); |
| + // Pass to renderer. |
| + return NULL; |
| +} |
| + |
| +scoped_refptr<DevToolsProtocol::Response> |
| RendererOverridesHandler::PageCanScreencast( |
| scoped_refptr<DevToolsProtocol::Command> command) { |
| base::DictionaryValue* result = new base::DictionaryValue(); |
| @@ -505,7 +524,7 @@ RendererOverridesHandler::PageStartScreencast( |
| screencast_command_ = command; |
| if (!host_) |
| return command->InternalErrorResponse("Could not connect to view"); |
| - host_->SetTouchEventEmulationEnabled(true, true); |
| + SetTouchEventEmulationEnabled(true); |
| bool visible = !host_->is_hidden(); |
| NotifyScreencastVisibility(visible); |
| if (visible) { |
| @@ -522,8 +541,7 @@ RendererOverridesHandler::PageStopScreencast( |
| scoped_refptr<DevToolsProtocol::Command> command) { |
| last_frame_time_ = base::TimeTicks(); |
| screencast_command_ = NULL; |
| - if (host_) |
| - host_->SetTouchEventEmulationEnabled(false, false); |
| + SetTouchEventEmulationEnabled(false); |
| return command->SuccessResponse(NULL); |
| } |
| @@ -978,4 +996,14 @@ RendererOverridesHandler::InputEmulateTouchFromMouseEvent( |
| return command->SuccessResponse(NULL); |
| } |
| +void RendererOverridesHandler::SetTouchEventEmulationEnabled(bool enabled) { |
|
dgozman
2014/08/17 12:39:20
Calls from start/stopScreencast and setTouchEventE
pfeldman
2014/08/17 14:47:14
Could you remind me why we enable touch while scre
dgozman
2014/08/17 15:01:41
We use touch emulator to handle emulateTouchFromMo
|
| + touch_emulation_enabled_ = enabled; |
| + if (!host_) |
| + return; |
| + host_->SetTouchEventEmulationEnabled(enabled); |
| + WebContents* web_contents = WebContents::FromRenderViewHost(host_); |
| + if (web_contents) |
| + web_contents->SetForceDisableOverscrollContent(enabled); |
| +} |
| + |
| } // namespace content |