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

Side by Side Diff: third_party/WebKit/Source/web/tests/WebPluginContainerTest.cpp

Issue 2844823002: Support Coalesced Touch in ppapi (Closed)
Patch Set: Support Coalesced Touch in ppapi Created 3 years, 7 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2012 Google Inc. All rights reserved. 2 * Copyright (C) 2012 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 434 matching lines...) Expand 10 before | Expand all | Expand 10 after
445 EXPECT_EQ(WebString("x"), Platform::Current()->Clipboard()->ReadPlainText( 445 EXPECT_EQ(WebString("x"), Platform::Current()->Clipboard()->ReadPlainText(
446 WebClipboard::Buffer())); 446 WebClipboard::Buffer()));
447 } 447 }
448 448
449 // A class to facilitate testing that events are correctly received by plugins. 449 // A class to facilitate testing that events are correctly received by plugins.
450 class EventTestPlugin : public FakeWebPlugin { 450 class EventTestPlugin : public FakeWebPlugin {
451 public: 451 public:
452 explicit EventTestPlugin(const WebPluginParams& params) 452 explicit EventTestPlugin(const WebPluginParams& params)
453 : FakeWebPlugin(params), last_event_type_(WebInputEvent::kUndefined) {} 453 : FakeWebPlugin(params), last_event_type_(WebInputEvent::kUndefined) {}
454 454
455 WebInputEventResult HandleInputEvent(const WebInputEvent& event, 455 WebInputEventResult HandleInputEvent(
456 WebCursorInfo&) override { 456 const WebCoalescedInputEvent& coalesced_event,
457 WebCursorInfo&) override {
458 const WebInputEvent& event = coalesced_event.Event();
459 coalesced_event_count_ = coalesced_event.CoalescedEventSize();
457 last_event_type_ = event.GetType(); 460 last_event_type_ = event.GetType();
458 if (WebInputEvent::IsMouseEventType(event.GetType()) || 461 if (WebInputEvent::IsMouseEventType(event.GetType()) ||
459 event.GetType() == WebInputEvent::kMouseWheel) { 462 event.GetType() == WebInputEvent::kMouseWheel) {
460 const WebMouseEvent& mouse_event = 463 const WebMouseEvent& mouse_event =
461 static_cast<const WebMouseEvent&>(event); 464 static_cast<const WebMouseEvent&>(event);
462 last_event_location_ = IntPoint(mouse_event.PositionInWidget().x, 465 last_event_location_ = IntPoint(mouse_event.PositionInWidget().x,
463 mouse_event.PositionInWidget().y); 466 mouse_event.PositionInWidget().y);
464 } else if (WebInputEvent::IsTouchEventType(event.GetType())) { 467 } else if (WebInputEvent::IsTouchEventType(event.GetType())) {
465 const WebTouchEvent& touch_event = 468 const WebTouchEvent& touch_event =
466 static_cast<const WebTouchEvent&>(event); 469 static_cast<const WebTouchEvent&>(event);
467 if (touch_event.touches_length == 1) { 470 if (touch_event.touches_length == 1) {
468 last_event_location_ = IntPoint(touch_event.touches[0].position.x, 471 last_event_location_ = IntPoint(touch_event.touches[0].position.x,
469 touch_event.touches[0].position.y); 472 touch_event.touches[0].position.y);
470 } else { 473 } else {
471 last_event_location_ = IntPoint(); 474 last_event_location_ = IntPoint();
472 } 475 }
473 } 476 }
474 477
475 return WebInputEventResult::kHandledSystem; 478 return WebInputEventResult::kHandledSystem;
476 } 479 }
477 WebInputEvent::Type GetLastInputEventType() { return last_event_type_; } 480 WebInputEvent::Type GetLastInputEventType() { return last_event_type_; }
478 481
479 IntPoint GetLastEventLocation() { return last_event_location_; } 482 IntPoint GetLastEventLocation() { return last_event_location_; }
480 483
481 void ClearLastEventType() { last_event_type_ = WebInputEvent::kUndefined; } 484 void ClearLastEventType() { last_event_type_ = WebInputEvent::kUndefined; }
482 485
486 size_t GetCoalescedEventCount() { return coalesced_event_count_; }
487
483 private: 488 private:
489 size_t coalesced_event_count_;
484 WebInputEvent::Type last_event_type_; 490 WebInputEvent::Type last_event_type_;
485 IntPoint last_event_location_; 491 IntPoint last_event_location_;
486 }; 492 };
487 493
488 TEST_F(WebPluginContainerTest, GestureLongPressReachesPlugin) { 494 TEST_F(WebPluginContainerTest, GestureLongPressReachesPlugin) {
489 RegisterMockedURL("plugin_container.html"); 495 RegisterMockedURL("plugin_container.html");
490 CustomPluginWebFrameClient<EventTestPlugin> 496 CustomPluginWebFrameClient<EventTestPlugin>
491 plugin_web_frame_client; // Must outlive webViewHelper. 497 plugin_web_frame_client; // Must outlive webViewHelper.
492 FrameTestHelpers::WebViewHelper web_view_helper; 498 FrameTestHelpers::WebViewHelper web_view_helper;
493 WebView* web_view = web_view_helper.InitializeAndLoad( 499 WebView* web_view = web_view_helper.InitializeAndLoad(
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
605 WebFloatPoint(rect.x + rect.width / 2, rect.y + rect.height / 2); 611 WebFloatPoint(rect.x + rect.width / 2, rect.y + rect.height / 2);
606 612
607 web_view->HandleInputEvent(WebCoalescedInputEvent(event)); 613 web_view->HandleInputEvent(WebCoalescedInputEvent(event));
608 RunPendingTasks(); 614 RunPendingTasks();
609 615
610 EXPECT_EQ(WebInputEvent::kTouchStart, test_plugin->GetLastInputEventType()); 616 EXPECT_EQ(WebInputEvent::kTouchStart, test_plugin->GetLastInputEventType());
611 EXPECT_EQ(rect.width / 2, test_plugin->GetLastEventLocation().X()); 617 EXPECT_EQ(rect.width / 2, test_plugin->GetLastEventLocation().X());
612 EXPECT_EQ(rect.height / 2, test_plugin->GetLastEventLocation().Y()); 618 EXPECT_EQ(rect.height / 2, test_plugin->GetLastEventLocation().Y());
613 } 619 }
614 620
621 TEST_F(WebPluginContainerTest, TouchEventScrolledWithCoalescedTouches) {
622 RegisterMockedURL("plugin_scroll.html");
623 CustomPluginWebFrameClient<EventTestPlugin>
624 plugin_web_frame_client; // Must outlive webViewHelper.
625 FrameTestHelpers::WebViewHelper web_view_helper;
626 WebView* web_view = web_view_helper.InitializeAndLoad(
627 base_url_ + "plugin_scroll.html", true, &plugin_web_frame_client);
628 DCHECK(web_view);
629 web_view->GetSettings()->SetPluginsEnabled(true);
630 web_view->Resize(WebSize(300, 300));
631 web_view->UpdateAllLifecyclePhases();
632 RunPendingTasks();
633 web_view->SmoothScroll(0, 200, 0);
634 web_view->UpdateAllLifecyclePhases();
635 RunPendingTasks();
636
637 WebElement plugin_container_one_element =
638 web_view->MainFrame()->GetDocument().GetElementById(
639 WebString::FromUTF8("scrolled-plugin"));
640 plugin_container_one_element.PluginContainer()->RequestTouchEventType(
641 WebPluginContainer::kTouchEventRequestTypeRaw);
642 WebPlugin* plugin = static_cast<WebPluginContainerImpl*>(
643 plugin_container_one_element.PluginContainer())
644 ->Plugin();
645 EventTestPlugin* test_plugin = static_cast<EventTestPlugin*>(plugin);
646
647 WebTouchEvent event(WebInputEvent::kTouchStart, WebInputEvent::kNoModifiers,
648 WebInputEvent::kTimeStampForTesting);
649 WebRect rect = plugin_container_one_element.BoundsInViewport();
650 event.touches_length = 1;
651 event.touches[0].state = WebTouchPoint::kStatePressed;
652 event.touches[0].position =
653 WebFloatPoint(rect.x + rect.width / 2, rect.y + rect.height / 2);
654
655 WebCoalescedInputEvent coalesced_event(event);
656
657 WebTouchEvent c_event(WebInputEvent::kTouchMove, WebInputEvent::kNoModifiers,
658 WebInputEvent::kTimeStampForTesting);
659 c_event.touches_length = 1;
660 c_event.touches[0].state = WebTouchPoint::kStatePressed;
661 c_event.touches[0].position =
662 WebFloatPoint(rect.x + rect.width / 2 + 1, rect.y + rect.height / 2 + 1);
663
664 coalesced_event.AddCoalescedEvent(c_event);
665 c_event.touches[0].position =
666 WebFloatPoint(rect.x + rect.width / 2 + 2, rect.y + rect.height / 2 + 2);
667 coalesced_event.AddCoalescedEvent(c_event);
668
669 web_view->HandleInputEvent(coalesced_event);
670 RunPendingTasks();
671
672 EXPECT_EQ(static_cast<const size_t>(3),
673 test_plugin->GetCoalescedEventCount());
674 EXPECT_EQ(WebInputEvent::kTouchStart, test_plugin->GetLastInputEventType());
675 EXPECT_EQ(rect.width / 2, test_plugin->GetLastEventLocation().X());
676 EXPECT_EQ(rect.height / 2, test_plugin->GetLastEventLocation().Y());
677 }
678
615 TEST_F(WebPluginContainerTest, MouseWheelEventScrolled) { 679 TEST_F(WebPluginContainerTest, MouseWheelEventScrolled) {
616 RegisterMockedURL("plugin_scroll.html"); 680 RegisterMockedURL("plugin_scroll.html");
617 CustomPluginWebFrameClient<EventTestPlugin> 681 CustomPluginWebFrameClient<EventTestPlugin>
618 plugin_web_frame_client; // Must outlive webViewHelper. 682 plugin_web_frame_client; // Must outlive webViewHelper.
619 FrameTestHelpers::WebViewHelper web_view_helper; 683 FrameTestHelpers::WebViewHelper web_view_helper;
620 WebView* web_view = web_view_helper.InitializeAndLoad( 684 WebView* web_view = web_view_helper.InitializeAndLoad(
621 base_url_ + "plugin_scroll.html", true, &plugin_web_frame_client); 685 base_url_ + "plugin_scroll.html", true, &plugin_web_frame_client);
622 DCHECK(web_view); 686 DCHECK(web_view);
623 web_view->GetSettings()->SetPluginsEnabled(true); 687 web_view->GetSettings()->SetPluginsEnabled(true);
624 web_view->Resize(WebSize(300, 300)); 688 web_view->Resize(WebSize(300, 300));
(...skipping 439 matching lines...) Expand 10 before | Expand all | Expand 10 after
1064 web_view->MainFrame()->GetDocument().GetElementById( 1128 web_view->MainFrame()->GetDocument().GetElementById(
1065 WebString::FromUTF8("translated-plugin")); 1129 WebString::FromUTF8("translated-plugin"));
1066 plugin_container_one_element.PluginContainer()->SetWantsWheelEvents(true); 1130 plugin_container_one_element.PluginContainer()->SetWantsWheelEvents(true);
1067 1131
1068 RunPendingTasks(); 1132 RunPendingTasks();
1069 EXPECT_TRUE(web_view->GetPage()->GetEventHandlerRegistry().HasEventHandlers( 1133 EXPECT_TRUE(web_view->GetPage()->GetEventHandlerRegistry().HasEventHandlers(
1070 EventHandlerRegistry::kWheelEventBlocking)); 1134 EventHandlerRegistry::kWheelEventBlocking));
1071 } 1135 }
1072 1136
1073 } // namespace blink 1137 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698