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

Side by Side 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/devtools/renderer_overrides_handler.h" 5 #include "content/browser/devtools/renderer_overrides_handler.h"
6 6
7 #include <map> 7 #include <map>
8 #include <string> 8 #include <string>
9 9
10 #include "base/barrier_closure.h" 10 #include "base/barrier_closure.h"
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
67 static const char kJpeg[] = "jpeg"; 67 static const char kJpeg[] = "jpeg";
68 static int kDefaultScreenshotQuality = 80; 68 static int kDefaultScreenshotQuality = 80;
69 static int kFrameRateThresholdMs = 100; 69 static int kFrameRateThresholdMs = 100;
70 static int kCaptureRetryLimit = 2; 70 static int kCaptureRetryLimit = 2;
71 71
72 } // namespace 72 } // namespace
73 73
74 RendererOverridesHandler::RendererOverridesHandler() 74 RendererOverridesHandler::RendererOverridesHandler()
75 : has_last_compositor_frame_metadata_(false), 75 : has_last_compositor_frame_metadata_(false),
76 capture_retry_count_(0), 76 capture_retry_count_(0),
77 touch_emulation_enabled_(false),
77 color_picker_enabled_(false), 78 color_picker_enabled_(false),
78 last_cursor_x_(-1), 79 last_cursor_x_(-1),
79 last_cursor_y_(-1), 80 last_cursor_y_(-1),
80 weak_factory_(this) { 81 weak_factory_(this) {
81 RegisterCommandHandler( 82 RegisterCommandHandler(
82 devtools::DOM::setFileInputFiles::kName, 83 devtools::DOM::setFileInputFiles::kName,
83 base::Bind( 84 base::Bind(
84 &RendererOverridesHandler::GrantPermissionsForSetFileInputFiles, 85 &RendererOverridesHandler::GrantPermissionsForSetFileInputFiles,
85 base::Unretained(this))); 86 base::Unretained(this)));
86 RegisterCommandHandler( 87 RegisterCommandHandler(
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
121 devtools::Page::navigateToHistoryEntry::kName, 122 devtools::Page::navigateToHistoryEntry::kName,
122 base::Bind( 123 base::Bind(
123 &RendererOverridesHandler::PageNavigateToHistoryEntry, 124 &RendererOverridesHandler::PageNavigateToHistoryEntry,
124 base::Unretained(this))); 125 base::Unretained(this)));
125 RegisterCommandHandler( 126 RegisterCommandHandler(
126 devtools::Page::captureScreenshot::kName, 127 devtools::Page::captureScreenshot::kName,
127 base::Bind( 128 base::Bind(
128 &RendererOverridesHandler::PageCaptureScreenshot, 129 &RendererOverridesHandler::PageCaptureScreenshot,
129 base::Unretained(this))); 130 base::Unretained(this)));
130 RegisterCommandHandler( 131 RegisterCommandHandler(
132 devtools::Page::setTouchEmulationEnabled::kName,
133 base::Bind(
134 &RendererOverridesHandler::PageSetTouchEmulationEnabled,
135 base::Unretained(this)));
136 RegisterCommandHandler(
131 devtools::Page::canScreencast::kName, 137 devtools::Page::canScreencast::kName,
132 base::Bind( 138 base::Bind(
133 &RendererOverridesHandler::PageCanScreencast, 139 &RendererOverridesHandler::PageCanScreencast,
134 base::Unretained(this))); 140 base::Unretained(this)));
135 RegisterCommandHandler( 141 RegisterCommandHandler(
136 devtools::Page::startScreencast::kName, 142 devtools::Page::startScreencast::kName,
137 base::Bind( 143 base::Bind(
138 &RendererOverridesHandler::PageStartScreencast, 144 &RendererOverridesHandler::PageStartScreencast,
139 base::Unretained(this))); 145 base::Unretained(this)));
140 RegisterCommandHandler( 146 RegisterCommandHandler(
(...skipping 17 matching lines...) Expand all
158 &RendererOverridesHandler::InputEmulateTouchFromMouseEvent, 164 &RendererOverridesHandler::InputEmulateTouchFromMouseEvent,
159 base::Unretained(this))); 165 base::Unretained(this)));
160 mouse_event_callback_ = base::Bind( 166 mouse_event_callback_ = base::Bind(
161 &RendererOverridesHandler::HandleMouseEvent, 167 &RendererOverridesHandler::HandleMouseEvent,
162 base::Unretained(this)); 168 base::Unretained(this));
163 } 169 }
164 170
165 RendererOverridesHandler::~RendererOverridesHandler() {} 171 RendererOverridesHandler::~RendererOverridesHandler() {}
166 172
167 void RendererOverridesHandler::OnClientDetached() { 173 void RendererOverridesHandler::OnClientDetached() {
168 if (screencast_command_ && host_) 174 touch_emulation_enabled_ = false;
169 host_->SetTouchEventEmulationEnabled(false, false);
170 screencast_command_ = NULL; 175 screencast_command_ = NULL;
176 UpdateTouchEventEmulationState();
171 SetColorPickerEnabled(false); 177 SetColorPickerEnabled(false);
172 } 178 }
173 179
174 void RendererOverridesHandler::OnSwapCompositorFrame( 180 void RendererOverridesHandler::OnSwapCompositorFrame(
175 const cc::CompositorFrameMetadata& frame_metadata) { 181 const cc::CompositorFrameMetadata& frame_metadata) {
176 last_compositor_frame_metadata_ = frame_metadata; 182 last_compositor_frame_metadata_ = frame_metadata;
177 has_last_compositor_frame_metadata_ = true; 183 has_last_compositor_frame_metadata_ = true;
178 184
179 if (screencast_command_) 185 if (screencast_command_)
180 InnerSwapCompositorFrame(); 186 InnerSwapCompositorFrame();
181 if (color_picker_enabled_) 187 if (color_picker_enabled_)
182 UpdateColorPickerFrame(); 188 UpdateColorPickerFrame();
183 } 189 }
184 190
185 void RendererOverridesHandler::OnVisibilityChanged(bool visible) { 191 void RendererOverridesHandler::OnVisibilityChanged(bool visible) {
186 if (!screencast_command_) 192 if (!screencast_command_)
187 return; 193 return;
188 NotifyScreencastVisibility(visible); 194 NotifyScreencastVisibility(visible);
189 } 195 }
190 196
191 void RendererOverridesHandler::SetRenderViewHost( 197 void RendererOverridesHandler::SetRenderViewHost(
192 RenderViewHostImpl* host) { 198 RenderViewHostImpl* host) {
193 host_ = host; 199 host_ = host;
194 if (!host) 200 if (!host)
195 return; 201 return;
196 if (screencast_command_) 202 UpdateTouchEventEmulationState();
197 host->SetTouchEventEmulationEnabled(true, true);
198 if (color_picker_enabled_) 203 if (color_picker_enabled_)
199 host->AddMouseEventCallback(mouse_event_callback_); 204 host->AddMouseEventCallback(mouse_event_callback_);
200 } 205 }
201 206
202 void RendererOverridesHandler::ClearRenderViewHost() { 207 void RendererOverridesHandler::ClearRenderViewHost() {
203 if (host_) 208 if (host_)
204 host_->RemoveMouseEventCallback(mouse_event_callback_); 209 host_->RemoveMouseEventCallback(mouse_event_callback_);
205 host_ = NULL; 210 host_ = NULL;
206 ResetColorPickerFrame(); 211 ResetColorPickerFrame();
207 } 212 }
208 213
209 bool RendererOverridesHandler::OnSetTouchEventEmulationEnabled() {
210 return screencast_command_.get() != NULL;
211 }
212
213 void RendererOverridesHandler::InnerSwapCompositorFrame() { 214 void RendererOverridesHandler::InnerSwapCompositorFrame() {
214 if ((base::TimeTicks::Now() - last_frame_time_).InMilliseconds() < 215 if ((base::TimeTicks::Now() - last_frame_time_).InMilliseconds() <
215 kFrameRateThresholdMs) { 216 kFrameRateThresholdMs) {
216 return; 217 return;
217 } 218 }
218 219
219 if (!host_ || !host_->GetView()) 220 if (!host_ || !host_->GetView())
220 return; 221 return;
221 222
222 last_frame_time_ = base::TimeTicks::Now(); 223 last_frame_time_ = base::TimeTicks::Now();
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
326 GetContentClient()->browser()->ClearCookies(host_); 327 GetContentClient()->browser()->ClearCookies(host_);
327 return command->SuccessResponse(NULL); 328 return command->SuccessResponse(NULL);
328 } 329 }
329 330
330 331
331 // Page agent handlers ------------------------------------------------------- 332 // Page agent handlers -------------------------------------------------------
332 333
333 scoped_refptr<DevToolsProtocol::Response> 334 scoped_refptr<DevToolsProtocol::Response>
334 RendererOverridesHandler::PageDisable( 335 RendererOverridesHandler::PageDisable(
335 scoped_refptr<DevToolsProtocol::Command> command) { 336 scoped_refptr<DevToolsProtocol::Command> command) {
336 if (screencast_command_ && host_) 337 OnClientDetached();
337 host_->SetTouchEventEmulationEnabled(false, false);
338 screencast_command_ = NULL;
339 return NULL; 338 return NULL;
340 } 339 }
341 340
342 scoped_refptr<DevToolsProtocol::Response> 341 scoped_refptr<DevToolsProtocol::Response>
343 RendererOverridesHandler::PageHandleJavaScriptDialog( 342 RendererOverridesHandler::PageHandleJavaScriptDialog(
344 scoped_refptr<DevToolsProtocol::Command> command) { 343 scoped_refptr<DevToolsProtocol::Command> command) {
345 base::DictionaryValue* params = command->params(); 344 base::DictionaryValue* params = command->params();
346 const char* paramAccept = 345 const char* paramAccept =
347 devtools::Page::handleJavaScriptDialog::kParamAccept; 346 devtools::Page::handleJavaScriptDialog::kParamAccept;
348 bool accept = false; 347 bool accept = false;
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
506 &base_64_data); 505 &base_64_data);
507 506
508 base::DictionaryValue* response = new base::DictionaryValue(); 507 base::DictionaryValue* response = new base::DictionaryValue();
509 response->SetString(devtools::Page::screencastFrame::kParamData, 508 response->SetString(devtools::Page::screencastFrame::kParamData,
510 base_64_data); 509 base_64_data);
511 510
512 SendAsyncResponse(command->SuccessResponse(response)); 511 SendAsyncResponse(command->SuccessResponse(response));
513 } 512 }
514 513
515 scoped_refptr<DevToolsProtocol::Response> 514 scoped_refptr<DevToolsProtocol::Response>
515 RendererOverridesHandler::PageSetTouchEmulationEnabled(
516 scoped_refptr<DevToolsProtocol::Command> command) {
517 base::DictionaryValue* params = command->params();
518 bool enabled = false;
519 if (!params || !params->GetBoolean(
520 devtools::Page::setTouchEmulationEnabled::kParamEnabled,
521 &enabled)) {
522 // Pass to renderer.
523 return NULL;
524 }
525
526 touch_emulation_enabled_ = enabled;
527 UpdateTouchEventEmulationState();
528
529 // Pass to renderer.
530 return NULL;
531 }
532
533 scoped_refptr<DevToolsProtocol::Response>
516 RendererOverridesHandler::PageCanScreencast( 534 RendererOverridesHandler::PageCanScreencast(
517 scoped_refptr<DevToolsProtocol::Command> command) { 535 scoped_refptr<DevToolsProtocol::Command> command) {
518 base::DictionaryValue* result = new base::DictionaryValue(); 536 base::DictionaryValue* result = new base::DictionaryValue();
519 #if defined(OS_ANDROID) 537 #if defined(OS_ANDROID)
520 result->SetBoolean(devtools::kResult, true); 538 result->SetBoolean(devtools::kResult, true);
521 #else 539 #else
522 result->SetBoolean(devtools::kResult, false); 540 result->SetBoolean(devtools::kResult, false);
523 #endif // defined(OS_ANDROID) 541 #endif // defined(OS_ANDROID)
524 return command->SuccessResponse(result); 542 return command->SuccessResponse(result);
525 } 543 }
526 544
527 scoped_refptr<DevToolsProtocol::Response> 545 scoped_refptr<DevToolsProtocol::Response>
528 RendererOverridesHandler::PageStartScreencast( 546 RendererOverridesHandler::PageStartScreencast(
529 scoped_refptr<DevToolsProtocol::Command> command) { 547 scoped_refptr<DevToolsProtocol::Command> command) {
530 screencast_command_ = command; 548 screencast_command_ = command;
549 UpdateTouchEventEmulationState();
531 if (!host_) 550 if (!host_)
532 return command->InternalErrorResponse("Could not connect to view"); 551 return command->InternalErrorResponse("Could not connect to view");
533 host_->SetTouchEventEmulationEnabled(true, true);
534 bool visible = !host_->is_hidden(); 552 bool visible = !host_->is_hidden();
535 NotifyScreencastVisibility(visible); 553 NotifyScreencastVisibility(visible);
536 if (visible) { 554 if (visible) {
537 if (has_last_compositor_frame_metadata_) 555 if (has_last_compositor_frame_metadata_)
538 InnerSwapCompositorFrame(); 556 InnerSwapCompositorFrame();
539 else 557 else
540 host_->Send(new ViewMsg_ForceRedraw(host_->GetRoutingID(), 0)); 558 host_->Send(new ViewMsg_ForceRedraw(host_->GetRoutingID(), 0));
541 } 559 }
542 return command->SuccessResponse(NULL); 560 return command->SuccessResponse(NULL);
543 } 561 }
544 562
545 scoped_refptr<DevToolsProtocol::Response> 563 scoped_refptr<DevToolsProtocol::Response>
546 RendererOverridesHandler::PageStopScreencast( 564 RendererOverridesHandler::PageStopScreencast(
547 scoped_refptr<DevToolsProtocol::Command> command) { 565 scoped_refptr<DevToolsProtocol::Command> command) {
548 last_frame_time_ = base::TimeTicks(); 566 last_frame_time_ = base::TimeTicks();
549 screencast_command_ = NULL; 567 screencast_command_ = NULL;
550 if (host_) 568 UpdateTouchEventEmulationState();
551 host_->SetTouchEventEmulationEnabled(false, false);
552 return command->SuccessResponse(NULL); 569 return command->SuccessResponse(NULL);
553 } 570 }
554 571
555 void RendererOverridesHandler::ScreencastFrameCaptured( 572 void RendererOverridesHandler::ScreencastFrameCaptured(
556 const std::string& format, 573 const std::string& format,
557 int quality, 574 int quality,
558 const cc::CompositorFrameMetadata& metadata, 575 const cc::CompositorFrameMetadata& metadata,
559 bool success, 576 bool success,
560 const SkBitmap& bitmap) { 577 const SkBitmap& bitmap) {
561 if (!success) { 578 if (!success) {
(...skipping 659 matching lines...) Expand 10 before | Expand all | Expand 10 after
1221 if (!host_) 1238 if (!host_)
1222 return command->InternalErrorResponse("Could not connect to view"); 1239 return command->InternalErrorResponse("Could not connect to view");
1223 1240
1224 if (event->type == WebInputEvent::MouseWheel) 1241 if (event->type == WebInputEvent::MouseWheel)
1225 host_->ForwardWheelEvent(wheel_event); 1242 host_->ForwardWheelEvent(wheel_event);
1226 else 1243 else
1227 host_->ForwardMouseEvent(mouse_event); 1244 host_->ForwardMouseEvent(mouse_event);
1228 return command->SuccessResponse(NULL); 1245 return command->SuccessResponse(NULL);
1229 } 1246 }
1230 1247
1248 void RendererOverridesHandler::UpdateTouchEventEmulationState() {
1249 if (!host_)
1250 return;
1251 bool enabled = touch_emulation_enabled_ || screencast_command_;
1252 host_->SetTouchEventEmulationEnabled(enabled);
1253 WebContentsImpl* web_contents = static_cast<WebContentsImpl*>(
1254 WebContents::FromRenderViewHost(host_));
1255 if (web_contents)
1256 web_contents->SetForceDisableOverscrollContent(enabled);
1257 }
1258
1231 } // namespace content 1259 } // namespace content
OLDNEW
« 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