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 |