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 13be025f5c0aca6d6a92ce1714fbce4315bb160a..a953eff06b4e8d0b1c2b0d54f146cfc41b02c866 100644 |
--- a/content/browser/devtools/renderer_overrides_handler.cc |
+++ b/content/browser/devtools/renderer_overrides_handler.cc |
@@ -74,6 +74,7 @@ static int kCaptureRetryLimit = 2; |
RendererOverridesHandler::RendererOverridesHandler() |
: has_last_compositor_frame_metadata_(false), |
capture_retry_count_(0), |
+ touch_emulation_enabled_(false), |
color_picker_enabled_(false), |
last_cursor_x_(-1), |
last_cursor_y_(-1), |
@@ -128,6 +129,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, |
@@ -165,9 +171,9 @@ RendererOverridesHandler::RendererOverridesHandler() |
RendererOverridesHandler::~RendererOverridesHandler() {} |
void RendererOverridesHandler::OnClientDetached() { |
- if (screencast_command_ && host_) |
- host_->SetTouchEventEmulationEnabled(false, false); |
+ touch_emulation_enabled_ = false; |
screencast_command_ = NULL; |
+ UpdateTouchEventEmulationState(); |
SetColorPickerEnabled(false); |
} |
@@ -193,8 +199,7 @@ void RendererOverridesHandler::SetRenderViewHost( |
host_ = host; |
if (!host) |
return; |
- if (screencast_command_) |
- host->SetTouchEventEmulationEnabled(true, true); |
+ UpdateTouchEventEmulationState(); |
if (color_picker_enabled_) |
host->AddMouseEventCallback(mouse_event_callback_); |
} |
@@ -206,10 +211,6 @@ void RendererOverridesHandler::ClearRenderViewHost() { |
ResetColorPickerFrame(); |
} |
-bool RendererOverridesHandler::OnSetTouchEventEmulationEnabled() { |
- return screencast_command_.get() != NULL; |
-} |
- |
void RendererOverridesHandler::InnerSwapCompositorFrame() { |
if ((base::TimeTicks::Now() - last_frame_time_).InMilliseconds() < |
kFrameRateThresholdMs) { |
@@ -333,9 +334,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; |
} |
@@ -513,6 +512,25 @@ void RendererOverridesHandler::ScreenshotCaptured( |
} |
scoped_refptr<DevToolsProtocol::Response> |
+RendererOverridesHandler::PageSetTouchEmulationEnabled( |
+ scoped_refptr<DevToolsProtocol::Command> command) { |
+ base::DictionaryValue* params = command->params(); |
+ bool enabled = false; |
+ if (!params || !params->GetBoolean( |
+ devtools::Page::setTouchEmulationEnabled::kParamEnabled, |
+ &enabled)) { |
+ // Pass to renderer. |
+ return NULL; |
+ } |
+ |
+ touch_emulation_enabled_ = enabled; |
+ UpdateTouchEventEmulationState(); |
+ |
+ // Pass to renderer. |
+ return NULL; |
+} |
+ |
+scoped_refptr<DevToolsProtocol::Response> |
RendererOverridesHandler::PageCanScreencast( |
scoped_refptr<DevToolsProtocol::Command> command) { |
base::DictionaryValue* result = new base::DictionaryValue(); |
@@ -528,9 +546,9 @@ scoped_refptr<DevToolsProtocol::Response> |
RendererOverridesHandler::PageStartScreencast( |
scoped_refptr<DevToolsProtocol::Command> command) { |
screencast_command_ = command; |
+ UpdateTouchEventEmulationState(); |
if (!host_) |
return command->InternalErrorResponse("Could not connect to view"); |
- host_->SetTouchEventEmulationEnabled(true, true); |
bool visible = !host_->is_hidden(); |
NotifyScreencastVisibility(visible); |
if (visible) { |
@@ -547,8 +565,7 @@ RendererOverridesHandler::PageStopScreencast( |
scoped_refptr<DevToolsProtocol::Command> command) { |
last_frame_time_ = base::TimeTicks(); |
screencast_command_ = NULL; |
- if (host_) |
- host_->SetTouchEventEmulationEnabled(false, false); |
+ UpdateTouchEventEmulationState(); |
return command->SuccessResponse(NULL); |
} |
@@ -1228,4 +1245,15 @@ RendererOverridesHandler::InputEmulateTouchFromMouseEvent( |
return command->SuccessResponse(NULL); |
} |
+void RendererOverridesHandler::UpdateTouchEventEmulationState() { |
+ if (!host_) |
+ return; |
+ bool enabled = touch_emulation_enabled_ || screencast_command_; |
+ host_->SetTouchEventEmulationEnabled(enabled); |
+ WebContentsImpl* web_contents = static_cast<WebContentsImpl*>( |
+ WebContents::FromRenderViewHost(host_)); |
+ if (web_contents) |
+ web_contents->SetForceDisableOverscrollContent(enabled); |
+} |
+ |
} // namespace content |