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

Side by Side Diff: components/test_runner/event_sender.cc

Issue 2573073003: Collapse the API surface on WebInputEvent via accessor functions. (Closed)
Patch Set: Created 4 years 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
OLDNEW
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 "components/test_runner/event_sender.h" 5 #include "components/test_runner/event_sender.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <memory> 9 #include <memory>
10 10
(...skipping 455 matching lines...) Expand 10 before | Expand all | Expand 10 after
466 466
467 // Get the edit command corresponding to a keyboard event. 467 // Get the edit command corresponding to a keyboard event.
468 // Returns true if the specified event corresponds to an edit command, the name 468 // Returns true if the specified event corresponds to an edit command, the name
469 // of the edit command will be stored in |*name|. 469 // of the edit command will be stored in |*name|.
470 bool GetEditCommand(const WebKeyboardEvent& event, std::string* name) { 470 bool GetEditCommand(const WebKeyboardEvent& event, std::string* name) {
471 #if defined(OS_MACOSX) 471 #if defined(OS_MACOSX)
472 // We only cares about Left,Right,Up,Down keys with Command or Command+Shift 472 // We only cares about Left,Right,Up,Down keys with Command or Command+Shift
473 // modifiers. These key events correspond to some special movement and 473 // modifiers. These key events correspond to some special movement and
474 // selection editor commands. These keys will be marked as system key, which 474 // selection editor commands. These keys will be marked as system key, which
475 // prevents them from being handled. Thus they must be handled specially. 475 // prevents them from being handled. Thus they must be handled specially.
476 if ((event.modifiers & ~WebKeyboardEvent::ShiftKey) != 476 if ((event.modifiers() & ~WebKeyboardEvent::ShiftKey) !=
477 WebKeyboardEvent::MetaKey) 477 WebKeyboardEvent::MetaKey)
478 return false; 478 return false;
479 479
480 switch (event.windowsKeyCode) { 480 switch (event.windowsKeyCode) {
481 case ui::VKEY_LEFT: 481 case ui::VKEY_LEFT:
482 *name = "MoveToBeginningOfLine"; 482 *name = "MoveToBeginningOfLine";
483 break; 483 break;
484 case ui::VKEY_RIGHT: 484 case ui::VKEY_RIGHT:
485 *name = "MoveToEndOfLine"; 485 *name = "MoveToEndOfLine";
486 break; 486 break;
487 case ui::VKEY_UP: 487 case ui::VKEY_UP:
488 *name = "MoveToBeginningOfDocument"; 488 *name = "MoveToBeginningOfDocument";
489 break; 489 break;
490 case ui::VKEY_DOWN: 490 case ui::VKEY_DOWN:
491 *name = "MoveToEndOfDocument"; 491 *name = "MoveToEndOfDocument";
492 break; 492 break;
493 default: 493 default:
494 return false; 494 return false;
495 } 495 }
496 496
497 if (event.modifiers & WebKeyboardEvent::ShiftKey) 497 if (event.modifiers() & WebKeyboardEvent::ShiftKey)
498 name->append("AndModifySelection"); 498 name->append("AndModifySelection");
499 499
500 return true; 500 return true;
501 #else 501 #else
502 return false; 502 return false;
503 #endif 503 #endif
504 } 504 }
505 505
506 bool IsSystemKeyEvent(const WebKeyboardEvent& event) { 506 bool IsSystemKeyEvent(const WebKeyboardEvent& event) {
507 #if defined(OS_MACOSX) 507 #if defined(OS_MACOSX)
508 return event.modifiers & WebInputEvent::MetaKey && 508 return event.modifiers() & WebInputEvent::MetaKey &&
509 event.windowsKeyCode != ui::VKEY_B && 509 event.windowsKeyCode != ui::VKEY_B &&
510 event.windowsKeyCode != ui::VKEY_I; 510 event.windowsKeyCode != ui::VKEY_I;
511 #else 511 #else
512 return !!(event.modifiers & WebInputEvent::AltKey); 512 return !!(event.modifiers() & WebInputEvent::AltKey);
513 #endif 513 #endif
514 } 514 }
515 515
516 bool GetScrollUnits(gin::Arguments* args, WebGestureEvent::ScrollUnits* units) { 516 bool GetScrollUnits(gin::Arguments* args, WebGestureEvent::ScrollUnits* units) {
517 std::string units_string; 517 std::string units_string;
518 if (!args->PeekNext().IsEmpty()) { 518 if (!args->PeekNext().IsEmpty()) {
519 if (args->PeekNext()->IsString()) 519 if (args->PeekNext()->IsString())
520 args->GetNext(&units_string); 520 args->GetNext(&units_string);
521 if (units_string == "Page") { 521 if (units_string == "Page") {
522 *units = WebGestureEvent::Page; 522 *units = WebGestureEvent::Page;
(...skipping 1149 matching lines...) Expand 10 before | Expand all | Expand 10 after
1672 event_down.domKey = static_cast<int>( 1672 event_down.domKey = static_cast<int>(
1673 ui::KeycodeConverter::KeyStringToDomKey(domKeyString)); 1673 ui::KeycodeConverter::KeyStringToDomKey(domKeyString));
1674 event_down.domCode = static_cast<int>( 1674 event_down.domCode = static_cast<int>(
1675 ui::KeycodeConverter::CodeStringToDomCode(domCodeString)); 1675 ui::KeycodeConverter::CodeStringToDomCode(domCodeString));
1676 1676
1677 if (generate_char) { 1677 if (generate_char) {
1678 event_down.text[0] = text; 1678 event_down.text[0] = text;
1679 event_down.unmodifiedText[0] = text; 1679 event_down.unmodifiedText[0] = text;
1680 } 1680 }
1681 1681
1682 if (event_down.modifiers != 0) 1682 if (event_down.modifiers() != 0)
1683 event_down.isSystemKey = IsSystemKeyEvent(event_down); 1683 event_down.isSystemKey = IsSystemKeyEvent(event_down);
1684 1684
1685 WebKeyboardEvent event_up = event_down; 1685 WebKeyboardEvent event_up = event_down;
1686 event_up.setType(WebInputEvent::KeyUp); 1686 event_up.setType(WebInputEvent::KeyUp);
1687 // EventSender.m forces a layout here, with at least one 1687 // EventSender.m forces a layout here, with at least one
1688 // test (fast/forms/focus-control-to-page.html) relying on this. 1688 // test (fast/forms/focus-control-to-page.html) relying on this.
1689 if (force_layout_on_events_) 1689 if (force_layout_on_events_)
1690 widget()->updateAllLifecyclePhases(); 1690 widget()->updateAllLifecyclePhases();
1691 1691
1692 // In the browser, if a keyboard event corresponds to an editor command, 1692 // In the browser, if a keyboard event corresponds to an editor command,
(...skipping 983 matching lines...) Expand 10 before | Expand all | Expand 10 after
2676 widget_event.get() ? static_cast<WebMouseEvent*>(widget_event.get()) 2676 widget_event.get() ? static_cast<WebMouseEvent*>(widget_event.get())
2677 : &raw_event; 2677 : &raw_event;
2678 2678
2679 WebPoint client_point(event->x, event->y); 2679 WebPoint client_point(event->x, event->y);
2680 WebPoint screen_point(event->globalX, event->globalY); 2680 WebPoint screen_point(event->globalX, event->globalY);
2681 current_drag_effect_ = drag_effect; 2681 current_drag_effect_ = drag_effect;
2682 if (current_drag_effect_) { 2682 if (current_drag_effect_) {
2683 // Specifically pass any keyboard modifiers to the drop method. This allows 2683 // Specifically pass any keyboard modifiers to the drop method. This allows
2684 // tests to control the drop type (i.e. copy or move). 2684 // tests to control the drop type (i.e. copy or move).
2685 mainFrameWidget()->dragTargetDrop(current_drag_data_, client_point, 2685 mainFrameWidget()->dragTargetDrop(current_drag_data_, client_point,
2686 screen_point, event->modifiers); 2686 screen_point, event->modifiers());
2687 } else { 2687 } else {
2688 mainFrameWidget()->dragTargetDragLeave(); 2688 mainFrameWidget()->dragTargetDragLeave();
2689 } 2689 }
2690 current_drag_data_.reset(); 2690 current_drag_data_.reset();
2691 mainFrameWidget()->dragSourceEndedAt(client_point, screen_point, 2691 mainFrameWidget()->dragSourceEndedAt(client_point, screen_point,
2692 current_drag_effect_); 2692 current_drag_effect_);
2693 mainFrameWidget()->dragSourceSystemDragEnded(); 2693 mainFrameWidget()->dragSourceSystemDragEnded();
2694 } 2694 }
2695 2695
2696 void EventSender::DoDragAfterMouseUp(const WebMouseEvent& raw_event) { 2696 void EventSender::DoDragAfterMouseUp(const WebMouseEvent& raw_event) {
2697 std::unique_ptr<WebInputEvent> widget_event = 2697 std::unique_ptr<WebInputEvent> widget_event =
2698 TransformScreenToWidgetCoordinates(raw_event); 2698 TransformScreenToWidgetCoordinates(raw_event);
2699 const WebMouseEvent* event = 2699 const WebMouseEvent* event =
2700 widget_event.get() ? static_cast<WebMouseEvent*>(widget_event.get()) 2700 widget_event.get() ? static_cast<WebMouseEvent*>(widget_event.get())
2701 : &raw_event; 2701 : &raw_event;
2702 2702
2703 last_click_time_sec_ = event->timeStampSeconds; 2703 last_click_time_sec_ = event->timeStampSeconds();
2704 last_click_pos_ = current_pointer_state_[kRawMousePointerId].last_pos_; 2704 last_click_pos_ = current_pointer_state_[kRawMousePointerId].last_pos_;
2705 2705
2706 // If we're in a drag operation, complete it. 2706 // If we're in a drag operation, complete it.
2707 if (current_drag_data_.isNull()) 2707 if (current_drag_data_.isNull())
2708 return; 2708 return;
2709 2709
2710 WebPoint client_point(event->x, event->y); 2710 WebPoint client_point(event->x, event->y);
2711 WebPoint screen_point(event->globalX, event->globalY); 2711 WebPoint screen_point(event->globalX, event->globalY);
2712 blink::WebDragOperation drag_effect = mainFrameWidget()->dragTargetDragOver( 2712 blink::WebDragOperation drag_effect = mainFrameWidget()->dragTargetDragOver(
2713 client_point, screen_point, current_drag_effects_allowed_, 2713 client_point, screen_point, current_drag_effects_allowed_,
2714 event->modifiers); 2714 event->modifiers());
2715 2715
2716 // Bail if dragover caused cancellation. 2716 // Bail if dragover caused cancellation.
2717 if (current_drag_data_.isNull()) 2717 if (current_drag_data_.isNull())
2718 return; 2718 return;
2719 2719
2720 FinishDragAndDrop(raw_event, drag_effect); 2720 FinishDragAndDrop(raw_event, drag_effect);
2721 } 2721 }
2722 2722
2723 void EventSender::DoDragAfterMouseMove(const WebMouseEvent& raw_event) { 2723 void EventSender::DoDragAfterMouseMove(const WebMouseEvent& raw_event) {
2724 if (current_pointer_state_[kRawMousePointerId].pressed_button_ == 2724 if (current_pointer_state_[kRawMousePointerId].pressed_button_ ==
2725 WebMouseEvent::Button::NoButton || 2725 WebMouseEvent::Button::NoButton ||
2726 current_drag_data_.isNull()) { 2726 current_drag_data_.isNull()) {
2727 return; 2727 return;
2728 } 2728 }
2729 2729
2730 std::unique_ptr<WebInputEvent> widget_event = 2730 std::unique_ptr<WebInputEvent> widget_event =
2731 TransformScreenToWidgetCoordinates(raw_event); 2731 TransformScreenToWidgetCoordinates(raw_event);
2732 const WebMouseEvent* event = 2732 const WebMouseEvent* event =
2733 widget_event.get() ? static_cast<WebMouseEvent*>(widget_event.get()) 2733 widget_event.get() ? static_cast<WebMouseEvent*>(widget_event.get())
2734 : &raw_event; 2734 : &raw_event;
2735 2735
2736 WebPoint client_point(event->x, event->y); 2736 WebPoint client_point(event->x, event->y);
2737 WebPoint screen_point(event->globalX, event->globalY); 2737 WebPoint screen_point(event->globalX, event->globalY);
2738 current_drag_effect_ = mainFrameWidget()->dragTargetDragOver( 2738 current_drag_effect_ = mainFrameWidget()->dragTargetDragOver(
2739 client_point, screen_point, current_drag_effects_allowed_, 2739 client_point, screen_point, current_drag_effects_allowed_,
2740 event->modifiers); 2740 event->modifiers());
2741 } 2741 }
2742 2742
2743 void EventSender::ReplaySavedEvents() { 2743 void EventSender::ReplaySavedEvents() {
2744 replaying_saved_events_ = true; 2744 replaying_saved_events_ = true;
2745 while (!mouse_event_queue_.empty()) { 2745 while (!mouse_event_queue_.empty()) {
2746 SavedEvent e = mouse_event_queue_.front(); 2746 SavedEvent e = mouse_event_queue_.front();
2747 mouse_event_queue_.pop_front(); 2747 mouse_event_queue_.pop_front();
2748 2748
2749 switch (e.type) { 2749 switch (e.type) {
2750 case SavedEvent::TYPE_MOUSE_MOVE: { 2750 case SavedEvent::TYPE_MOUSE_MOVE: {
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
2787 default: 2787 default:
2788 NOTREACHED(); 2788 NOTREACHED();
2789 } 2789 }
2790 } 2790 }
2791 2791
2792 replaying_saved_events_ = false; 2792 replaying_saved_events_ = false;
2793 } 2793 }
2794 2794
2795 WebInputEventResult EventSender::HandleInputEventOnViewOrPopup( 2795 WebInputEventResult EventSender::HandleInputEventOnViewOrPopup(
2796 const WebInputEvent& raw_event) { 2796 const WebInputEvent& raw_event) {
2797 last_event_timestamp_ = raw_event.timeStampSeconds; 2797 last_event_timestamp_ = raw_event.timeStampSeconds();
2798 2798
2799 WebPagePopup* popup = widget()->pagePopup(); 2799 WebPagePopup* popup = widget()->pagePopup();
2800 if (popup && !WebInputEvent::isKeyboardEventType(raw_event.type)) { 2800 if (popup && !WebInputEvent::isKeyboardEventType(raw_event.type())) {
2801 // ui::ScaleWebInputEvent returns nullptr when the scale is 1.0f as the 2801 // ui::ScaleWebInputEvent returns nullptr when the scale is 1.0f as the
2802 // event does not have to be converted. 2802 // event does not have to be converted.
2803 std::unique_ptr<WebInputEvent> scaled_event = ui::ScaleWebInputEvent( 2803 std::unique_ptr<WebInputEvent> scaled_event = ui::ScaleWebInputEvent(
2804 raw_event, delegate()->GetWindowToViewportScale()); 2804 raw_event, delegate()->GetWindowToViewportScale());
2805 const WebInputEvent* popup_friendly_event = 2805 const WebInputEvent* popup_friendly_event =
2806 scaled_event.get() ? scaled_event.get() : &raw_event; 2806 scaled_event.get() ? scaled_event.get() : &raw_event;
2807 return popup->handleInputEvent(*popup_friendly_event); 2807 return popup->handleInputEvent(*popup_friendly_event);
2808 } 2808 }
2809 2809
2810 std::unique_ptr<WebInputEvent> widget_event = 2810 std::unique_ptr<WebInputEvent> widget_event =
2811 TransformScreenToWidgetCoordinates(raw_event); 2811 TransformScreenToWidgetCoordinates(raw_event);
2812 const WebInputEvent* event = 2812 const WebInputEvent* event =
2813 widget_event.get() ? static_cast<WebMouseEvent*>(widget_event.get()) 2813 widget_event.get() ? static_cast<WebMouseEvent*>(widget_event.get())
2814 : &raw_event; 2814 : &raw_event;
2815 return widget()->handleInputEvent(*event); 2815 return widget()->handleInputEvent(*event);
2816 } 2816 }
2817 2817
2818 void EventSender::SendGesturesForMouseWheelEvent( 2818 void EventSender::SendGesturesForMouseWheelEvent(
2819 const WebMouseWheelEvent wheel_event) { 2819 const WebMouseWheelEvent wheel_event) {
2820 WebGestureEvent begin_event(WebInputEvent::GestureScrollBegin, 2820 WebGestureEvent begin_event(WebInputEvent::GestureScrollBegin,
2821 wheel_event.modifiers, GetCurrentEventTimeSec()); 2821 wheel_event.modifiers(),
2822 GetCurrentEventTimeSec());
2822 InitGestureEventFromMouseWheel(wheel_event, &begin_event); 2823 InitGestureEventFromMouseWheel(wheel_event, &begin_event);
2823 begin_event.data.scrollBegin.deltaXHint = wheel_event.deltaX; 2824 begin_event.data.scrollBegin.deltaXHint = wheel_event.deltaX;
2824 begin_event.data.scrollBegin.deltaYHint = wheel_event.deltaY; 2825 begin_event.data.scrollBegin.deltaYHint = wheel_event.deltaY;
2825 if (wheel_event.scrollByPage) { 2826 if (wheel_event.scrollByPage) {
2826 begin_event.data.scrollBegin.deltaHintUnits = blink::WebGestureEvent::Page; 2827 begin_event.data.scrollBegin.deltaHintUnits = blink::WebGestureEvent::Page;
2827 if (begin_event.data.scrollBegin.deltaXHint) { 2828 if (begin_event.data.scrollBegin.deltaXHint) {
2828 begin_event.data.scrollBegin.deltaXHint = 2829 begin_event.data.scrollBegin.deltaXHint =
2829 begin_event.data.scrollBegin.deltaXHint > 0 ? 1 : -1; 2830 begin_event.data.scrollBegin.deltaXHint > 0 ? 1 : -1;
2830 } 2831 }
2831 if (begin_event.data.scrollBegin.deltaYHint) { 2832 if (begin_event.data.scrollBegin.deltaYHint) {
2832 begin_event.data.scrollBegin.deltaYHint = 2833 begin_event.data.scrollBegin.deltaYHint =
2833 begin_event.data.scrollBegin.deltaYHint > 0 ? 1 : -1; 2834 begin_event.data.scrollBegin.deltaYHint > 0 ? 1 : -1;
2834 } 2835 }
2835 } else { 2836 } else {
2836 begin_event.data.scrollBegin.deltaHintUnits = 2837 begin_event.data.scrollBegin.deltaHintUnits =
2837 wheel_event.hasPreciseScrollingDeltas 2838 wheel_event.hasPreciseScrollingDeltas
2838 ? blink::WebGestureEvent::PrecisePixels 2839 ? blink::WebGestureEvent::PrecisePixels
2839 : blink::WebGestureEvent::Pixels; 2840 : blink::WebGestureEvent::Pixels;
2840 } 2841 }
2841 2842
2842 if (force_layout_on_events_) 2843 if (force_layout_on_events_)
2843 widget()->updateAllLifecyclePhases(); 2844 widget()->updateAllLifecyclePhases();
2844 2845
2845 HandleInputEventOnViewOrPopup(begin_event); 2846 HandleInputEventOnViewOrPopup(begin_event);
2846 2847
2847 WebGestureEvent update_event(WebInputEvent::GestureScrollUpdate, 2848 WebGestureEvent update_event(WebInputEvent::GestureScrollUpdate,
2848 wheel_event.modifiers, GetCurrentEventTimeSec()); 2849 wheel_event.modifiers(),
2850 GetCurrentEventTimeSec());
2849 InitGestureEventFromMouseWheel(wheel_event, &update_event); 2851 InitGestureEventFromMouseWheel(wheel_event, &update_event);
2850 update_event.data.scrollUpdate.deltaX = 2852 update_event.data.scrollUpdate.deltaX =
2851 begin_event.data.scrollBegin.deltaXHint; 2853 begin_event.data.scrollBegin.deltaXHint;
2852 update_event.data.scrollUpdate.deltaY = 2854 update_event.data.scrollUpdate.deltaY =
2853 begin_event.data.scrollBegin.deltaYHint; 2855 begin_event.data.scrollBegin.deltaYHint;
2854 update_event.data.scrollUpdate.deltaUnits = 2856 update_event.data.scrollUpdate.deltaUnits =
2855 begin_event.data.scrollBegin.deltaHintUnits; 2857 begin_event.data.scrollBegin.deltaHintUnits;
2856 2858
2857 if (force_layout_on_events_) 2859 if (force_layout_on_events_)
2858 widget()->updateAllLifecyclePhases(); 2860 widget()->updateAllLifecyclePhases();
2859 HandleInputEventOnViewOrPopup(update_event); 2861 HandleInputEventOnViewOrPopup(update_event);
2860 2862
2861 WebGestureEvent end_event(WebInputEvent::GestureScrollEnd, 2863 WebGestureEvent end_event(WebInputEvent::GestureScrollEnd,
2862 wheel_event.modifiers, GetCurrentEventTimeSec()); 2864 wheel_event.modifiers(), GetCurrentEventTimeSec());
2863 InitGestureEventFromMouseWheel(wheel_event, &end_event); 2865 InitGestureEventFromMouseWheel(wheel_event, &end_event);
2864 end_event.data.scrollEnd.deltaUnits = 2866 end_event.data.scrollEnd.deltaUnits =
2865 begin_event.data.scrollBegin.deltaHintUnits; 2867 begin_event.data.scrollBegin.deltaHintUnits;
2866 2868
2867 if (force_layout_on_events_) 2869 if (force_layout_on_events_)
2868 widget()->updateAllLifecyclePhases(); 2870 widget()->updateAllLifecyclePhases();
2869 HandleInputEventOnViewOrPopup(end_event); 2871 HandleInputEventOnViewOrPopup(end_event);
2870 } 2872 }
2871 2873
2872 TestInterfaces* EventSender::interfaces() { 2874 TestInterfaces* EventSender::interfaces() {
(...skipping 21 matching lines...) Expand all
2894 return view()->mainFrame()->toWebLocalFrame()->frameWidget(); 2896 return view()->mainFrame()->toWebLocalFrame()->frameWidget();
2895 } 2897 }
2896 2898
2897 std::unique_ptr<WebInputEvent> EventSender::TransformScreenToWidgetCoordinates( 2899 std::unique_ptr<WebInputEvent> EventSender::TransformScreenToWidgetCoordinates(
2898 const WebInputEvent& event) { 2900 const WebInputEvent& event) {
2899 return delegate()->TransformScreenToWidgetCoordinates( 2901 return delegate()->TransformScreenToWidgetCoordinates(
2900 web_widget_test_proxy_base_, event); 2902 web_widget_test_proxy_base_, event);
2901 } 2903 }
2902 2904
2903 } // namespace test_runner 2905 } // namespace test_runner
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698