Implement non-XR Gamepad discovery and input (#31200)

* Create embedder event to send to constellation

* Handle gamepad message in constellation, send to script thread

* Handle GamepadEvent in script thread and dispatch event to document

* Add missing Clones, fix event

* Add gamepad task source

* Adjust GamepadIndex type, remove unused imports

* Add internal getter for gamepads list

* Update gamepad new methods

* Handle gamepad connect and disconnect events

* Proto will be none, no need for HandleObject

* Initialize buttons and axes to standard mapping

* Adjust update type index types

* Update GamepadButton update function

* Adjust Gamepad mapping comments to match spec, add update logic

* Amend comment

* Update button and axis inputs on Updated event

* Add GilRs as gamepad backend in servoshell

* Add spec links, queue gamepad updates on task source

* ./mach fmt

* Fix comment length

* Split out button init, update spec comments

* Move gamepad event handling from document to global

* Map and normalize axes/button values

* Use std::time for gamepad timestamp

* Adjust gamepad handling in event loop

* Move button press/touch check into map+normalize function

- Small change but is more in line with spec

* ./mach fmt

* Update comment spec links and warning messages

* Doc comments -> regular comments

* Add window event handlers for gamepad connect/disconnect

* Adjust gamepad disconnect behavior

* Add missing TODO's, adjust gamepad/gamepadbutton list methods and formatting

* Update button handling from gilrs, add comments

* Enable gamepad pref during WPT tests and update expectations

* Update WPT expectations in meta-legacy-layout
This commit is contained in:
Daniel Adams 2024-02-17 08:42:31 -10:00 committed by GitHub
parent 1cc546c4fc
commit c999d4546c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
27 changed files with 695 additions and 208 deletions

View file

@ -1 +1 @@
prefs: ["dom.gamepad.enabled:true"]
prefs: [dom.gamepad.enabled:true]

View file

@ -8,24 +8,6 @@
[Stringification of new GamepadEvent("gamepad")]
expected: FAIL
[HTMLBodyElement interface: attribute ongamepadconnected]
expected: FAIL
[HTMLBodyElement interface: attribute ongamepaddisconnected]
expected: FAIL
[Window interface: attribute ongamepadconnected]
expected: FAIL
[Window interface: attribute ongamepaddisconnected]
expected: FAIL
[HTMLFrameSetElement interface: attribute ongamepadconnected]
expected: FAIL
[HTMLFrameSetElement interface: attribute ongamepaddisconnected]
expected: FAIL
[Gamepad interface: attribute vibrationActuator]
expected: FAIL

View file

@ -0,0 +1 @@
prefs: [dom.gamepad.enabled: true]

View file

@ -4,9 +4,3 @@
[Feature-Policy allow="gamepad" disallows cross-origin by default.]
expected: FAIL
[Feature-Policy allow="gamepad" allows same-origin by default.]
expected: FAIL
[Feature-Policy allow="gamepad" allows cross-origin by default.]
expected: FAIL

View file

@ -70,51 +70,3 @@
[Gamepad interface: attribute vibrationActuator]
expected: FAIL
[GamepadPose interface: existence and properties of interface object]
expected: FAIL
[GamepadPose interface object length]
expected: FAIL
[GamepadPose interface object name]
expected: FAIL
[GamepadPose interface: existence and properties of interface prototype object]
expected: FAIL
[GamepadPose interface: existence and properties of interface prototype object's "constructor" property]
expected: FAIL
[GamepadPose interface: existence and properties of interface prototype object's @@unscopables property]
expected: FAIL
[GamepadPose interface: attribute hasOrientation]
expected: FAIL
[GamepadPose interface: attribute hasPosition]
expected: FAIL
[GamepadPose interface: attribute position]
expected: FAIL
[GamepadPose interface: attribute linearVelocity]
expected: FAIL
[GamepadPose interface: attribute linearAcceleration]
expected: FAIL
[GamepadPose interface: attribute orientation]
expected: FAIL
[GamepadPose interface: attribute angularVelocity]
expected: FAIL
[GamepadPose interface: attribute angularAcceleration]
expected: FAIL
[Gamepad interface: attribute hand]
expected: FAIL
[Gamepad interface: attribute pose]
expected: FAIL

View file

@ -8,117 +8,6 @@
[Stringification of new GamepadEvent("gamepad")]
expected: FAIL
[HTMLBodyElement interface: attribute ongamepadconnected]
expected: FAIL
[HTMLBodyElement interface: attribute ongamepaddisconnected]
expected: FAIL
[Window interface: attribute ongamepadconnected]
expected: FAIL
[Window interface: attribute ongamepaddisconnected]
expected: FAIL
[HTMLFrameSetElement interface: attribute ongamepadconnected]
expected: FAIL
[HTMLFrameSetElement interface: attribute ongamepaddisconnected]
expected: FAIL
[Gamepad interface: existence and properties of interface object]
expected: FAIL
[Gamepad interface object length]
expected: FAIL
[Gamepad interface object name]
expected: FAIL
[Gamepad interface: existence and properties of interface prototype object]
expected: FAIL
[Gamepad interface: existence and properties of interface prototype object's "constructor" property]
expected: FAIL
[Gamepad interface: existence and properties of interface prototype object's @@unscopables property]
expected: FAIL
[Gamepad interface: attribute id]
expected: FAIL
[Gamepad interface: attribute index]
expected: FAIL
[Gamepad interface: attribute connected]
expected: FAIL
[Gamepad interface: attribute timestamp]
expected: FAIL
[Gamepad interface: attribute mapping]
expected: FAIL
[Gamepad interface: attribute axes]
expected: FAIL
[Gamepad interface: attribute buttons]
expected: FAIL
[GamepadButton interface: existence and properties of interface object]
expected: FAIL
[GamepadButton interface object length]
expected: FAIL
[GamepadButton interface object name]
expected: FAIL
[GamepadButton interface: existence and properties of interface prototype object]
expected: FAIL
[GamepadButton interface: existence and properties of interface prototype object's "constructor" property]
expected: FAIL
[GamepadButton interface: existence and properties of interface prototype object's @@unscopables property]
expected: FAIL
[GamepadButton interface: attribute pressed]
expected: FAIL
[GamepadButton interface: attribute touched]
expected: FAIL
[GamepadButton interface: attribute value]
expected: FAIL
[GamepadEvent interface: existence and properties of interface object]
expected: FAIL
[GamepadEvent interface object length]
expected: FAIL
[GamepadEvent interface object name]
expected: FAIL
[GamepadEvent interface: existence and properties of interface prototype object]
expected: FAIL
[GamepadEvent interface: existence and properties of interface prototype object's "constructor" property]
expected: FAIL
[GamepadEvent interface: existence and properties of interface prototype object's @@unscopables property]
expected: FAIL
[GamepadEvent interface: attribute gamepad]
expected: FAIL
[Navigator interface: operation getGamepads()]
expected: FAIL
[Navigator interface: navigator must inherit property "getGamepads()" with the proper type]
expected: FAIL
[Gamepad interface: attribute vibrationActuator]
expected: FAIL