15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/tests/test_input_event.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_errors.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/ppb_input_event.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/cpp/input_event.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/cpp/module.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/tests/test_utils.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/tests/testing_instance.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)REGISTER_TEST_CASE(InputEvent); 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const uint32_t kSpaceChar = 0x20; 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char* kSpaceString = " "; 205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const char* kSpaceCode = "Space"; 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define FINISHED_WAITING_MESSAGE "TEST_INPUT_EVENT_FINISHED_WAITING" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)pp::Point GetCenter(const pp::Rect& rect) { 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return pp::Point( 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rect.x() + rect.width() / 2, 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rect.y() + rect.height() / 2); 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestInputEvent::RunTests(const std::string& filter) { 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RUN_TEST(Events, filter); 34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) RUN_TEST(EventsLatencyTracking, filter); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The AcceptTouchEvent_N tests should not be run when the filter is empty; 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // they can only be run one at a time. 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // TODO(dmichael): Figure out a way to make these run in the same test fixture 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // instance. 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!ShouldRunAllTests(filter)) { 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RUN_TEST(AcceptTouchEvent_1, filter); 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RUN_TEST(AcceptTouchEvent_2, filter); 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RUN_TEST(AcceptTouchEvent_3, filter); 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RUN_TEST(AcceptTouchEvent_4, filter); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TestInputEvent::TestInputEvent(TestingInstance* instance) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : TestCase(instance), 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) input_event_interface_(NULL), 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mouse_input_event_interface_(NULL), 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) wheel_input_event_interface_(NULL), 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keyboard_input_event_interface_(NULL), 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) touch_input_event_interface_(NULL), 557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) nested_event_(instance->pp_instance()), 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) view_rect_(), 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_input_event_(0), 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) received_expected_event_(false), 59cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) received_finish_message_(false), 60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) enable_latency_tracking_(false), 61cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) last_latency_tracking_successful_(false) { 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TestInputEvent::~TestInputEvent() { 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Remove the special listener that only responds to a 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // FINISHED_WAITING_MESSAGE string. See Init for where it gets added. 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string js_code; 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) js_code += "var plugin = document.getElementById('plugin');" 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "plugin.removeEventListener('message'," 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " plugin.wait_for_messages_handler);" 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "delete plugin.wait_for_messages_handler;"; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) instance_->EvalScript(js_code); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool TestInputEvent::Init() { 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) input_event_interface_ = static_cast<const PPB_InputEvent*>( 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pp::Module::Get()->GetBrowserInterface(PPB_INPUT_EVENT_INTERFACE)); 78cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) input_event_private_interface_ = static_cast<const PPB_InputEvent_Private*>( 79cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) pp::Module::Get()->GetBrowserInterface(PPB_INPUTEVENT_PRIVATE_INTERFACE)); 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mouse_input_event_interface_ = static_cast<const PPB_MouseInputEvent*>( 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pp::Module::Get()->GetBrowserInterface( 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PPB_MOUSE_INPUT_EVENT_INTERFACE)); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) wheel_input_event_interface_ = static_cast<const PPB_WheelInputEvent*>( 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pp::Module::Get()->GetBrowserInterface( 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PPB_WHEEL_INPUT_EVENT_INTERFACE)); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keyboard_input_event_interface_ = static_cast<const PPB_KeyboardInputEvent*>( 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pp::Module::Get()->GetBrowserInterface( 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PPB_KEYBOARD_INPUT_EVENT_INTERFACE)); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) touch_input_event_interface_ = static_cast<const PPB_TouchInputEvent*>( 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pp::Module::Get()->GetBrowserInterface( 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PPB_TOUCH_INPUT_EVENT_INTERFACE)); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool success = 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) input_event_interface_ && 95cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) input_event_private_interface_ && 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mouse_input_event_interface_ && 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) wheel_input_event_interface_ && 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keyboard_input_event_interface_ && 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) touch_input_event_interface_ && 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckTestingInterface(); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set up a listener for our message that signals that all input events have 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // been received. 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string js_code; 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Note the following code is dependent on some features of test_case.html. 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // E.g., it is assumed that the DOM element where the plugin is embedded has 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // an id of 'plugin', and there is a function 'IsTestingMessage' that allows 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // us to ignore the messages that are intended for use by the testing 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // framework itself. 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) js_code += "var plugin = document.getElementById('plugin');" 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "var wait_for_messages_handler = function(message_event) {" 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " if (!IsTestingMessage(message_event.data) &&" 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " message_event.data === '" FINISHED_WAITING_MESSAGE "') {" 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " plugin.postMessage('" FINISHED_WAITING_MESSAGE "');" 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " }" 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "};" 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "plugin.addEventListener('message', wait_for_messages_handler);" 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Stash it on the plugin so we can remove it in the destructor. 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "plugin.wait_for_messages_handler = wait_for_messages_handler;"; 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) instance_->EvalScript(js_code); 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return success; 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)pp::InputEvent TestInputEvent::CreateMouseEvent( 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_InputEvent_Type type, 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_InputEvent_MouseButton buttons) { 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return pp::MouseInputEvent( 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) instance_, 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type, 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 100, // time_stamp 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, // modifiers 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) buttons, 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCenter(view_rect_), 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1, // click count 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pp::Point()); // movement 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)pp::InputEvent TestInputEvent::CreateWheelEvent() { 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return pp::WheelInputEvent( 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) instance_, 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 100, // time_stamp 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, // modifiers 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pp::FloatPoint(1, 2), 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pp::FloatPoint(3, 4), 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_TRUE); // scroll_by_page 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)pp::InputEvent TestInputEvent::CreateKeyEvent(PP_InputEvent_Type type, 1505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) uint32_t key_code, 1515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& code) { 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return pp::KeyboardInputEvent( 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) instance_, 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type, 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 100, // time_stamp 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, // modifiers 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) key_code, 1585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) pp::Var(), 1595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) pp::Var(code)); 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)pp::InputEvent TestInputEvent::CreateCharEvent(const std::string& text) { 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return pp::KeyboardInputEvent( 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) instance_, 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_INPUTEVENT_TYPE_CHAR, 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 100, // time_stamp 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, // modifiers 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, // keycode 1695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) pp::Var(text), 1705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) pp::Var()); 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)pp::InputEvent TestInputEvent::CreateTouchEvent(PP_InputEvent_Type type, 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const pp::FloatPoint& point) { 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_TouchPoint touch_point = PP_MakeTouchPoint(); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) touch_point.position = point; 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pp::TouchInputEvent touch_event(instance_, type, 100, 0); 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) touch_event.AddTouchPoint(PP_TOUCHLIST_TYPE_TOUCHES, touch_point); 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) touch_event.AddTouchPoint(PP_TOUCHLIST_TYPE_CHANGEDTOUCHES, touch_point); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) touch_event.AddTouchPoint(PP_TOUCHLIST_TYPE_TARGETTOUCHES, touch_point); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return touch_event; 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void TestInputEvent::PostMessageBarrier() { 1877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) received_finish_message_ = false; 1887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) instance_->PostMessage(pp::Var(FINISHED_WAITING_MESSAGE)); 1897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) testing_interface_->RunMessageLoop(instance_->pp_instance()); 1907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) nested_event_.Wait(); 1917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 1927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Simulates the input event and calls PostMessage to let us know when 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// we have received all resulting events from the browser. 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool TestInputEvent::SimulateInputEvent( 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const pp::InputEvent& input_event) { 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_input_event_ = pp::InputEvent(input_event.pp_resource()); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) received_expected_event_ = false; 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testing_interface_->SimulateInputEvent(instance_->pp_instance(), 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) input_event.pp_resource()); 2017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) PostMessageBarrier(); 2027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return received_expected_event_; 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool TestInputEvent::AreEquivalentEvents(PP_Resource received, 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Resource expected) { 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!input_event_interface_->IsInputEvent(received) || 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !input_event_interface_->IsInputEvent(expected)) { 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test common fields, except modifiers and time stamp, which may be changed 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // by the browser. 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32_t received_type = input_event_interface_->GetType(received); 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32_t expected_type = input_event_interface_->GetType(expected); 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (received_type != expected_type) { 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Allow key down events to match "raw" key down events. 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (expected_type != PP_INPUTEVENT_TYPE_KEYDOWN && 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) received_type != PP_INPUTEVENT_TYPE_RAWKEYDOWN) { 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test event type-specific fields. 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (input_event_interface_->GetType(received)) { 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case PP_INPUTEVENT_TYPE_MOUSEDOWN: 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case PP_INPUTEVENT_TYPE_MOUSEUP: 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case PP_INPUTEVENT_TYPE_MOUSEMOVE: 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case PP_INPUTEVENT_TYPE_MOUSEENTER: 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case PP_INPUTEVENT_TYPE_MOUSELEAVE: 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check mouse fields, except position and movement, which may be 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // modified by the renderer. 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mouse_input_event_interface_->GetButton(received) == 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mouse_input_event_interface_->GetButton(expected) && 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mouse_input_event_interface_->GetClickCount(received) == 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mouse_input_event_interface_->GetClickCount(expected); 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case PP_INPUTEVENT_TYPE_WHEEL: 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pp::FloatPoint(wheel_input_event_interface_->GetDelta(received)) == 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pp::FloatPoint(wheel_input_event_interface_->GetDelta(expected)) && 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pp::FloatPoint(wheel_input_event_interface_->GetTicks(received)) == 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pp::FloatPoint(wheel_input_event_interface_->GetTicks(expected)) && 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) wheel_input_event_interface_->GetScrollByPage(received) == 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) wheel_input_event_interface_->GetScrollByPage(expected); 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case PP_INPUTEVENT_TYPE_RAWKEYDOWN: 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case PP_INPUTEVENT_TYPE_KEYDOWN: 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case PP_INPUTEVENT_TYPE_KEYUP: 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keyboard_input_event_interface_->GetKeyCode(received) == 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keyboard_input_event_interface_->GetKeyCode(expected); 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case PP_INPUTEVENT_TYPE_CHAR: 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keyboard_input_event_interface_->GetKeyCode(received) == 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keyboard_input_event_interface_->GetKeyCode(expected) && 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pp::Var(pp::PASS_REF, 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keyboard_input_event_interface_->GetCharacterText(received)) == 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pp::Var(pp::PASS_REF, 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keyboard_input_event_interface_->GetCharacterText(expected)); 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case PP_INPUTEVENT_TYPE_TOUCHSTART: 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case PP_INPUTEVENT_TYPE_TOUCHMOVE: 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case PP_INPUTEVENT_TYPE_TOUCHEND: 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case PP_INPUTEVENT_TYPE_TOUCHCANCEL: { 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!touch_input_event_interface_->IsTouchInputEvent(received) || 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !touch_input_event_interface_->IsTouchInputEvent(expected)) 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32_t touch_count = touch_input_event_interface_->GetTouchCount( 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) received, PP_TOUCHLIST_TYPE_TOUCHES); 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (touch_count <= 0 || 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) touch_count != touch_input_event_interface_->GetTouchCount(expected, 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_TOUCHLIST_TYPE_TOUCHES)) 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (uint32_t i = 0; i < touch_count; ++i) { 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_TouchPoint expected_point = touch_input_event_interface_-> 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetTouchByIndex(expected, PP_TOUCHLIST_TYPE_TOUCHES, i); 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_TouchPoint received_point = touch_input_event_interface_-> 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetTouchByIndex(received, PP_TOUCHLIST_TYPE_TOUCHES, i); 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (expected_point.id != received_point.id || 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_point.radius != received_point.radius || 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_point.rotation_angle != received_point.rotation_angle || 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_point.pressure != received_point.pressure) 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (expected_point.position.x != received_point.position.x || 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_point.position.y != received_point.position.y) 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool TestInputEvent::HandleInputEvent(const pp::InputEvent& input_event) { 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Some events may cause extra events to be generated, so look for the 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // first one that matches. 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!received_expected_event_) { 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) received_expected_event_ = AreEquivalentEvents( 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) input_event.pp_resource(), 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_input_event_.pp_resource()); 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Handle all input events. 314cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (enable_latency_tracking_) { 315cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) pp::InputEventPrivate private_event(input_event); 316cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) last_latency_tracking_successful_ = private_event.TraceInputLatency(true); 317cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestInputEvent::HandleMessage(const pp::Var& message_data) { 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (message_data.is_string() && 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (message_data.AsString() == FINISHED_WAITING_MESSAGE)) { 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testing_interface_->QuitMessageLoop(instance_->pp_instance()); 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) received_finish_message_ = true; 3267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) nested_event_.Signal(); 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestInputEvent::DidChangeView(const pp::View& view) { 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) view_rect_ = view.GetRect(); 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 334cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)std::string TestInputEvent::TestEventsLatencyTracking() { 335cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) enable_latency_tracking_ = true; 336cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) input_event_interface_->RequestInputEvents(instance_->pp_instance(), 337cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PP_INPUTEVENT_CLASS_TOUCH); 338cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PostMessageBarrier(); 339cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 340cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_TRUE(SimulateInputEvent(CreateTouchEvent(PP_INPUTEVENT_TYPE_TOUCHSTART, 341cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) pp::FloatPoint(12, 23)))); 342cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Without calling StartTrackingLatency() first, TraceInputLatency() won't 343cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // take effect and will return false; 344cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_FALSE(last_latency_tracking_successful_); 345cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 346cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) input_event_private_interface_->StartTrackingLatency( 347cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) instance_->pp_instance()); 348cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 349cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_TRUE(SimulateInputEvent(CreateTouchEvent(PP_INPUTEVENT_TYPE_TOUCHSTART, 350cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) pp::FloatPoint(12, 23)))); 351cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_TRUE(last_latency_tracking_successful_); 352cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 353cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PASS(); 354cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 355cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string TestInputEvent::TestEvents() { 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Request all input event classes. 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) input_event_interface_->RequestInputEvents(instance_->pp_instance(), 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_INPUTEVENT_CLASS_MOUSE | 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_INPUTEVENT_CLASS_WHEEL | 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_INPUTEVENT_CLASS_KEYBOARD | 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_INPUTEVENT_CLASS_TOUCH); 3637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) PostMessageBarrier(); 3647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Send the events and check that we received them. 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE( 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimulateInputEvent(CreateMouseEvent(PP_INPUTEVENT_TYPE_MOUSEDOWN, 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_INPUTEVENT_MOUSEBUTTON_LEFT))); 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE( 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimulateInputEvent(CreateWheelEvent())); 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE( 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimulateInputEvent(CreateKeyEvent(PP_INPUTEVENT_TYPE_KEYDOWN, 3735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) kSpaceChar, kSpaceCode))); 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE( 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimulateInputEvent(CreateCharEvent(kSpaceString))); 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(SimulateInputEvent(CreateTouchEvent(PP_INPUTEVENT_TYPE_TOUCHSTART, 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pp::FloatPoint(12, 23)))); 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Request only mouse events. 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) input_event_interface_->ClearInputEventRequest(instance_->pp_instance(), 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_INPUTEVENT_CLASS_WHEEL | 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_INPUTEVENT_CLASS_KEYBOARD); 3827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) PostMessageBarrier(); 3837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that we only receive mouse events. 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE( 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimulateInputEvent(CreateMouseEvent(PP_INPUTEVENT_TYPE_MOUSEDOWN, 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_INPUTEVENT_MOUSEBUTTON_LEFT))); 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE( 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimulateInputEvent(CreateWheelEvent())); 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE( 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimulateInputEvent(CreateKeyEvent(PP_INPUTEVENT_TYPE_KEYDOWN, 3925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) kSpaceChar, kSpaceCode))); 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE( 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimulateInputEvent(CreateCharEvent(kSpaceString))); 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PASS(); 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string TestInputEvent::TestAcceptTouchEvent_1() { 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The browser normally sends touch-events to the renderer only if the page 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // has touch-event handlers. Since test-case.html does not have any 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // touch-event handler, it would normally not receive any touch events from 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the browser. However, if a plugin in the page does accept touch events, 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // then the browser should start sending touch-events to the page. In this 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // test, the plugin simply registers for touch-events. The real test is to 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // verify that the browser knows to send touch-events to the renderer. 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If the plugin is removed from the page, then there are no more touch-event 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // handlers in the page, and browser stops sending touch-events. So to make 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // it possible to test this properly, the plugin is not removed from the page 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // at the end of the test. 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) instance_->set_remove_plugin(false); 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) input_event_interface_->RequestInputEvents(instance_->pp_instance(), 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_INPUTEVENT_CLASS_MOUSE | 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_INPUTEVENT_CLASS_WHEEL | 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_INPUTEVENT_CLASS_KEYBOARD | 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_INPUTEVENT_CLASS_TOUCH); 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PASS(); 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string TestInputEvent::TestAcceptTouchEvent_2() { 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // See comment in TestAcceptTouchEvent_1. 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) instance_->set_remove_plugin(false); 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) input_event_interface_->RequestInputEvents(instance_->pp_instance(), 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_INPUTEVENT_CLASS_MOUSE | 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_INPUTEVENT_CLASS_WHEEL | 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_INPUTEVENT_CLASS_KEYBOARD | 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_INPUTEVENT_CLASS_TOUCH); 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) input_event_interface_->ClearInputEventRequest(instance_->pp_instance(), 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_INPUTEVENT_CLASS_TOUCH); 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PASS(); 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string TestInputEvent::TestAcceptTouchEvent_3() { 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // See comment in TestAcceptTouchEvent_1. 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) instance_->set_remove_plugin(false); 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) input_event_interface_->RequestInputEvents(instance_->pp_instance(), 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_INPUTEVENT_CLASS_MOUSE | 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_INPUTEVENT_CLASS_WHEEL | 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_INPUTEVENT_CLASS_KEYBOARD); 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) input_event_interface_->RequestFilteringInputEvents(instance_->pp_instance(), 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_INPUTEVENT_CLASS_TOUCH); 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PASS(); 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string TestInputEvent::TestAcceptTouchEvent_4() { 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // See comment in TestAcceptTouchEvent_1. 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) instance_->set_remove_plugin(false); 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) input_event_interface_->RequestInputEvents(instance_->pp_instance(), 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_INPUTEVENT_CLASS_MOUSE | 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_INPUTEVENT_CLASS_WHEEL | 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_INPUTEVENT_CLASS_KEYBOARD); 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) input_event_interface_->RequestInputEvents(instance_->pp_instance(), 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_INPUTEVENT_CLASS_TOUCH); 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PASS(); 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 456