OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/protocol/input_handler.h" | 5 #include "content/browser/devtools/protocol/input_handler.h" |
6 | 6 |
7 #include "base/message_loop/message_loop.h" | 7 #include "base/message_loop/message_loop.h" |
8 #include "base/strings/stringprintf.h" | 8 #include "base/strings/stringprintf.h" |
9 #include "base/strings/utf_string_conversions.h" | 9 #include "base/strings/utf_string_conversions.h" |
10 #include "base/trace_event/trace_event.h" | 10 #include "base/trace_event/trace_event.h" |
(...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
299 return Response::ServerError("Could not connect to view"); | 299 return Response::ServerError("Could not connect to view"); |
300 | 300 |
301 if (event->type == blink::WebInputEvent::MouseWheel) | 301 if (event->type == blink::WebInputEvent::MouseWheel) |
302 host_->ForwardWheelEvent(wheel_event); | 302 host_->ForwardWheelEvent(wheel_event); |
303 else | 303 else |
304 host_->ForwardMouseEvent(mouse_event); | 304 host_->ForwardMouseEvent(mouse_event); |
305 return Response::OK(); | 305 return Response::OK(); |
306 } | 306 } |
307 | 307 |
308 Response InputHandler::SynthesizePinchGesture( | 308 Response InputHandler::SynthesizePinchGesture( |
| 309 int session_id, |
309 DevToolsCommandId command_id, | 310 DevToolsCommandId command_id, |
310 int x, | 311 int x, |
311 int y, | 312 int y, |
312 double scale_factor, | 313 double scale_factor, |
313 const int* relative_speed, | 314 const int* relative_speed, |
314 const std::string* gesture_source_type) { | 315 const std::string* gesture_source_type) { |
315 if (!host_) | 316 if (!host_) |
316 return Response::ServerError("Could not connect to view"); | 317 return Response::ServerError("Could not connect to view"); |
317 | 318 |
318 SyntheticPinchGestureParams gesture_params; | 319 SyntheticPinchGestureParams gesture_params; |
319 const int kDefaultRelativeSpeed = 800; | 320 const int kDefaultRelativeSpeed = 800; |
320 | 321 |
321 gesture_params.scale_factor = scale_factor; | 322 gesture_params.scale_factor = scale_factor; |
322 gesture_params.anchor = CssPixelsToPointF(x, y, page_scale_factor_); | 323 gesture_params.anchor = CssPixelsToPointF(x, y, page_scale_factor_); |
323 gesture_params.relative_pointer_speed_in_pixels_s = | 324 gesture_params.relative_pointer_speed_in_pixels_s = |
324 relative_speed ? *relative_speed : kDefaultRelativeSpeed; | 325 relative_speed ? *relative_speed : kDefaultRelativeSpeed; |
325 | 326 |
326 if (!StringToGestureSourceType( | 327 if (!StringToGestureSourceType( |
327 gesture_source_type ? *gesture_source_type : kGestureSourceTypeDefault, | 328 gesture_source_type ? *gesture_source_type : kGestureSourceTypeDefault, |
328 gesture_params.gesture_source_type)) { | 329 gesture_params.gesture_source_type)) { |
329 return Response::InvalidParams("gestureSourceType"); | 330 return Response::InvalidParams("gestureSourceType"); |
330 } | 331 } |
331 | 332 |
332 host_->QueueSyntheticGesture( | 333 host_->QueueSyntheticGesture( |
333 SyntheticGesture::Create(gesture_params), | 334 SyntheticGesture::Create(gesture_params), |
334 base::Bind(&InputHandler::SendSynthesizePinchGestureResponse, | 335 base::Bind(&InputHandler::SendSynthesizePinchGestureResponse, |
335 weak_factory_.GetWeakPtr(), command_id)); | 336 weak_factory_.GetWeakPtr(), session_id, command_id)); |
336 | 337 |
337 return Response::OK(); | 338 return Response::OK(); |
338 } | 339 } |
339 | 340 |
340 Response InputHandler::SynthesizeScrollGesture( | 341 Response InputHandler::SynthesizeScrollGesture( |
| 342 int session_id, |
341 DevToolsCommandId command_id, | 343 DevToolsCommandId command_id, |
342 int x, | 344 int x, |
343 int y, | 345 int y, |
344 const int* x_distance, | 346 const int* x_distance, |
345 const int* y_distance, | 347 const int* y_distance, |
346 const int* x_overscroll, | 348 const int* x_overscroll, |
347 const int* y_overscroll, | 349 const int* y_overscroll, |
348 const bool* prevent_fling, | 350 const bool* prevent_fling, |
349 const int* speed, | 351 const int* speed, |
350 const std::string* gesture_source_type, | 352 const std::string* gesture_source_type, |
(...skipping 27 matching lines...) Expand all Loading... |
378 if (!StringToGestureSourceType( | 380 if (!StringToGestureSourceType( |
379 gesture_source_type ? *gesture_source_type : kGestureSourceTypeDefault, | 381 gesture_source_type ? *gesture_source_type : kGestureSourceTypeDefault, |
380 gesture_params.gesture_source_type)) { | 382 gesture_params.gesture_source_type)) { |
381 return Response::InvalidParams("gestureSourceType"); | 383 return Response::InvalidParams("gestureSourceType"); |
382 } | 384 } |
383 | 385 |
384 SynthesizeRepeatingScroll( | 386 SynthesizeRepeatingScroll( |
385 gesture_params, repeat_count ? *repeat_count : 0, | 387 gesture_params, repeat_count ? *repeat_count : 0, |
386 base::TimeDelta::FromMilliseconds(repeat_delay_ms ? *repeat_delay_ms | 388 base::TimeDelta::FromMilliseconds(repeat_delay_ms ? *repeat_delay_ms |
387 : 250), | 389 : 250), |
388 interaction_marker_name ? *interaction_marker_name : "", command_id); | 390 interaction_marker_name ? *interaction_marker_name : "", session_id, |
| 391 command_id); |
389 | 392 |
390 return Response::OK(); | 393 return Response::OK(); |
391 } | 394 } |
392 | 395 |
393 void InputHandler::SynthesizeRepeatingScroll( | 396 void InputHandler::SynthesizeRepeatingScroll( |
394 SyntheticSmoothScrollGestureParams gesture_params, | 397 SyntheticSmoothScrollGestureParams gesture_params, |
395 int repeat_count, | 398 int repeat_count, |
396 base::TimeDelta repeat_delay, | 399 base::TimeDelta repeat_delay, |
397 std::string interaction_marker_name, | 400 std::string interaction_marker_name, |
| 401 int session_id, |
398 DevToolsCommandId command_id) { | 402 DevToolsCommandId command_id) { |
399 if (!interaction_marker_name.empty()) { | 403 if (!interaction_marker_name.empty()) { |
400 // TODO(alexclarke): Can we move this elsewhere? It doesn't really fit here. | 404 // TODO(alexclarke): Can we move this elsewhere? It doesn't really fit here. |
401 TRACE_EVENT_COPY_ASYNC_BEGIN0("benchmark", | 405 TRACE_EVENT_COPY_ASYNC_BEGIN0("benchmark", |
402 interaction_marker_name.c_str(), command_id); | 406 interaction_marker_name.c_str(), command_id); |
403 } | 407 } |
404 | 408 |
405 host_->QueueSyntheticGesture( | 409 host_->QueueSyntheticGesture( |
406 SyntheticGesture::Create(gesture_params), | 410 SyntheticGesture::Create(gesture_params), |
407 base::Bind(&InputHandler::OnScrollFinished, weak_factory_.GetWeakPtr(), | 411 base::Bind(&InputHandler::OnScrollFinished, weak_factory_.GetWeakPtr(), |
408 gesture_params, repeat_count, repeat_delay, | 412 gesture_params, repeat_count, repeat_delay, |
409 interaction_marker_name, command_id)); | 413 interaction_marker_name, session_id, command_id)); |
410 } | 414 } |
411 | 415 |
412 void InputHandler::OnScrollFinished( | 416 void InputHandler::OnScrollFinished( |
413 SyntheticSmoothScrollGestureParams gesture_params, | 417 SyntheticSmoothScrollGestureParams gesture_params, |
414 int repeat_count, | 418 int repeat_count, |
415 base::TimeDelta repeat_delay, | 419 base::TimeDelta repeat_delay, |
416 std::string interaction_marker_name, | 420 std::string interaction_marker_name, |
| 421 int session_id, |
417 DevToolsCommandId command_id, | 422 DevToolsCommandId command_id, |
418 SyntheticGesture::Result result) { | 423 SyntheticGesture::Result result) { |
419 if (!interaction_marker_name.empty()) { | 424 if (!interaction_marker_name.empty()) { |
420 TRACE_EVENT_COPY_ASYNC_END0("benchmark", | 425 TRACE_EVENT_COPY_ASYNC_END0("benchmark", |
421 interaction_marker_name.c_str(), command_id); | 426 interaction_marker_name.c_str(), command_id); |
422 } | 427 } |
423 | 428 |
424 if (repeat_count > 0) { | 429 if (repeat_count > 0) { |
425 base::MessageLoop::current()->task_runner()->PostDelayedTask( | 430 base::MessageLoop::current()->task_runner()->PostDelayedTask( |
426 FROM_HERE, | 431 FROM_HERE, base::Bind(&InputHandler::SynthesizeRepeatingScroll, |
427 base::Bind(&InputHandler::SynthesizeRepeatingScroll, | 432 weak_factory_.GetWeakPtr(), gesture_params, |
428 weak_factory_.GetWeakPtr(), gesture_params, repeat_count - 1, | 433 repeat_count - 1, repeat_delay, |
429 repeat_delay, interaction_marker_name, command_id), | 434 interaction_marker_name, session_id, command_id), |
430 repeat_delay); | 435 repeat_delay); |
431 } else { | 436 } else { |
432 SendSynthesizeScrollGestureResponse(command_id, result); | 437 SendSynthesizeScrollGestureResponse(session_id, command_id, result); |
433 } | 438 } |
434 } | 439 } |
435 | 440 |
436 Response InputHandler::SynthesizeTapGesture( | 441 Response InputHandler::SynthesizeTapGesture( |
| 442 int session_id, |
437 DevToolsCommandId command_id, | 443 DevToolsCommandId command_id, |
438 int x, | 444 int x, |
439 int y, | 445 int y, |
440 const int* duration, | 446 const int* duration, |
441 const int* tap_count, | 447 const int* tap_count, |
442 const std::string* gesture_source_type) { | 448 const std::string* gesture_source_type) { |
443 if (!host_) | 449 if (!host_) |
444 return Response::ServerError("Could not connect to view"); | 450 return Response::ServerError("Could not connect to view"); |
445 | 451 |
446 SyntheticTapGestureParams gesture_params; | 452 SyntheticTapGestureParams gesture_params; |
(...skipping 12 matching lines...) Expand all Loading... |
459 if (!tap_count) | 465 if (!tap_count) |
460 tap_count = &kDefaultTapCount; | 466 tap_count = &kDefaultTapCount; |
461 | 467 |
462 for (int i = 0; i < *tap_count; i++) { | 468 for (int i = 0; i < *tap_count; i++) { |
463 // If we're doing more than one tap, don't send the response to the client | 469 // If we're doing more than one tap, don't send the response to the client |
464 // until we've completed the last tap. | 470 // until we've completed the last tap. |
465 bool is_last_tap = i == *tap_count - 1; | 471 bool is_last_tap = i == *tap_count - 1; |
466 host_->QueueSyntheticGesture( | 472 host_->QueueSyntheticGesture( |
467 SyntheticGesture::Create(gesture_params), | 473 SyntheticGesture::Create(gesture_params), |
468 base::Bind(&InputHandler::SendSynthesizeTapGestureResponse, | 474 base::Bind(&InputHandler::SendSynthesizeTapGestureResponse, |
469 weak_factory_.GetWeakPtr(), command_id, is_last_tap)); | 475 weak_factory_.GetWeakPtr(), session_id, command_id, |
| 476 is_last_tap)); |
470 } | 477 } |
471 | 478 |
472 return Response::OK(); | 479 return Response::OK(); |
473 } | 480 } |
474 | 481 |
475 void InputHandler::SendSynthesizePinchGestureResponse( | 482 void InputHandler::SendSynthesizePinchGestureResponse( |
| 483 int session_id, |
476 DevToolsCommandId command_id, | 484 DevToolsCommandId command_id, |
477 SyntheticGesture::Result result) { | 485 SyntheticGesture::Result result) { |
| 486 // todo: session_id |
478 if (result == SyntheticGesture::Result::GESTURE_FINISHED) { | 487 if (result == SyntheticGesture::Result::GESTURE_FINISHED) { |
479 client_->SendSynthesizePinchGestureResponse( | 488 client_->SendSynthesizePinchGestureResponse( |
480 command_id, SynthesizePinchGestureResponse::Create()); | 489 session_id, command_id, SynthesizePinchGestureResponse::Create()); |
481 } else { | 490 } else { |
482 client_->SendError(command_id, | 491 client_->SendError(session_id, command_id, |
483 Response::InternalError(base::StringPrintf( | 492 Response::InternalError(base::StringPrintf( |
484 "Synthetic pinch failed, result was %d", result))); | 493 "Synthetic pinch failed, result was %d", result))); |
485 } | 494 } |
486 } | 495 } |
487 | 496 |
488 void InputHandler::SendSynthesizeScrollGestureResponse( | 497 void InputHandler::SendSynthesizeScrollGestureResponse( |
| 498 int session_id, |
489 DevToolsCommandId command_id, | 499 DevToolsCommandId command_id, |
490 SyntheticGesture::Result result) { | 500 SyntheticGesture::Result result) { |
491 if (result == SyntheticGesture::Result::GESTURE_FINISHED) { | 501 if (result == SyntheticGesture::Result::GESTURE_FINISHED) { |
492 client_->SendSynthesizeScrollGestureResponse( | 502 client_->SendSynthesizeScrollGestureResponse( |
493 command_id, SynthesizeScrollGestureResponse::Create()); | 503 session_id, command_id, SynthesizeScrollGestureResponse::Create()); |
494 } else { | 504 } else { |
495 client_->SendError(command_id, | 505 client_->SendError(session_id, command_id, |
496 Response::InternalError(base::StringPrintf( | 506 Response::InternalError(base::StringPrintf( |
497 "Synthetic scroll failed, result was %d", result))); | 507 "Synthetic scroll failed, result was %d", result))); |
498 } | 508 } |
499 } | 509 } |
500 | 510 |
501 void InputHandler::SendSynthesizeTapGestureResponse( | 511 void InputHandler::SendSynthesizeTapGestureResponse( |
| 512 int session_id, |
502 DevToolsCommandId command_id, | 513 DevToolsCommandId command_id, |
503 bool send_success, | 514 bool send_success, |
504 SyntheticGesture::Result result) { | 515 SyntheticGesture::Result result) { |
505 if (result == SyntheticGesture::Result::GESTURE_FINISHED) { | 516 if (result == SyntheticGesture::Result::GESTURE_FINISHED) { |
506 if (send_success) { | 517 if (send_success) { |
507 client_->SendSynthesizeTapGestureResponse( | 518 client_->SendSynthesizeTapGestureResponse( |
508 command_id, SynthesizeTapGestureResponse::Create()); | 519 session_id, command_id, SynthesizeTapGestureResponse::Create()); |
509 } | 520 } |
510 } else { | 521 } else { |
511 client_->SendError(command_id, | 522 client_->SendError(session_id, command_id, |
512 Response::InternalError(base::StringPrintf( | 523 Response::InternalError(base::StringPrintf( |
513 "Synthetic tap failed, result was %d", result))); | 524 "Synthetic tap failed, result was %d", result))); |
514 } | 525 } |
515 } | 526 } |
516 | 527 |
517 } // namespace input | 528 } // namespace input |
518 } // namespace devtools | 529 } // namespace devtools |
519 } // namespace content | 530 } // namespace content |
OLD | NEW |