| 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
|
|
|