Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(772)

Unified Diff: content/browser/devtools/renderer_overrides_handler.cc

Issue 474213002: DevTools: control touch emulation from the browser side only. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Review comment addressed. Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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
« no previous file with comments | « content/browser/devtools/renderer_overrides_handler.h ('k') | content/browser/renderer_host/input/touch_emulator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698