Skip to content

script: Implement pointer events#41290

Merged
yezhizhen merged 1 commit intoservo:mainfrom
webbeef:pointer-events
Feb 10, 2026
Merged

script: Implement pointer events#41290
yezhizhen merged 1 commit intoservo:mainfrom
webbeef:pointer-events

Conversation

@webbeef
Copy link
Copy Markdown
Contributor

@webbeef webbeef commented Dec 15, 2025

Remaining failures are due to the missing implementation of the pointer capture and pointer lock APIs, as well as:

Requires User Activation support:
/html/user-activation/activation-trigger-pointerevent.html?mouse

Blocked on #41227 : /pointerevents/compat/pointerevent_mouse-pointer-on-scrollbar.html

Requires persistentDeviceId:
/pointerevents/persistentDeviceId/get-persistendeviceid-from-pointer-event.tentative.html /pointerevents/persistentDeviceId/get-persistendeviceid-from-pointer-mouse-event.tentative.html

Requires pointerenter, pointerover, pointerout, pointerleave events: /pointerevents/pointerevent_pointerId_scope.html

Requires pointerrawupdate event:
/pointerevents/pointerevent_pointerrawupdate.html
/pointerevents/pointerevent_pointerrawupdate.https.html

Consider implementing non-standard attributes toElement and fromElement: See https://w3c.github.io/pointerevents/#attributes-and-default-actions

Fails because the pointerId is always 0 for pointermove, maybe caused by commit 7b00b54 : /pointerevents/pointerevent_pointermove_isprimary_same_as_pointerdown.html?touch #41250

Testing: Updated wpt expectations
Fixes: #38435

@webbeef webbeef requested a review from gterzian as a code owner December 15, 2025 21:33
@servo-highfive servo-highfive added the S-awaiting-review There is new code that needs to be reviewed. label Dec 15, 2025
@yezhizhen yezhizhen changed the title script: implement pointer events script: Implement pointer events Dec 16, 2025
Copy link
Copy Markdown
Contributor

@simonwuelker simonwuelker left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not familiar enough with this part of the code to actually review it, but here are some immediate thoughts I had.

@servo-wpt-sync
Copy link
Copy Markdown
Collaborator

🤖 Opened new upstream WPT pull request (web-platform-tests/wpt#56897) with upstreamable changes.

@servo-wpt-sync
Copy link
Copy Markdown
Collaborator

📝 Transplanted new upstreamable changes to existing upstream WPT pull request (web-platform-tests/wpt#56897).

1 similar comment
@servo-wpt-sync
Copy link
Copy Markdown
Collaborator

📝 Transplanted new upstreamable changes to existing upstream WPT pull request (web-platform-tests/wpt#56897).

@yezhizhen
Copy link
Copy Markdown
Member

What is the status of this PR? Can you rebase given that #41801 is merged.

@servo-wpt-sync
Copy link
Copy Markdown
Collaborator

📝 Transplanted new upstreamable changes to existing upstream WPT pull request (web-platform-tests/wpt#56897).

@yezhizhen yezhizhen added the T-linux-wpt Do a try run of the WPT label Jan 19, 2026
@github-actions github-actions bot removed the T-linux-wpt Do a try run of the WPT label Jan 19, 2026
@github-actions
Copy link
Copy Markdown

🔨 Triggering try run (#21124921967) for Linux (WPT)

@github-actions
Copy link
Copy Markdown

Test results for linux-wpt from try job (#21124921967):

Flaky unexpected result (32)
  • OK /IndexedDB/idbfactory-open-error-properties.any.html
    • PASS [expected FAIL] subtest: Properties of error event from failed open()
  • OK /IndexedDB/idbfactory-open-error-properties.any.worker.html
    • PASS [expected FAIL] subtest: Properties of error event from failed open()
  • OK /_mozilla/webxr/create_session.https.html
    • FAIL [expected PASS] subtest: create_session

      can't access property "simulateDeviceConnection", navigator.xr.test is undefined
      

  • OK /_mozilla/webxr/obtain_frame.https.html
    • FAIL [expected PASS] subtest: obtain_frame

      promise_test: Unhandled rejection with value: object "TypeError: can't access property "simulateDeviceConnection", navigator.xr.test is undefined"
      

  • OK /content-security-policy/frame-ancestors/frame-ancestors-path-ignored.window.html (#36468)
    • PASS [expected FAIL] subtest: A 'frame-ancestors' CSP directive with a URL that includes a path should be ignored.
  • FAIL [expected PASS] /css/css-backgrounds/background-size-042.html
  • CRASH [expected PASS] /css/css-overflow/scroll-marker-in-display-none-column-crash.html
  • OK /custom-elements/form-associated/ElementInternals-setFormValue.html (#29174)
    • PASS [expected FAIL] subtest: Single value - empty name exists
    • PASS [expected FAIL] subtest: Null value should submit nothing
    • PASS [expected FAIL] subtest: Newline normalization - \r\n in filename (urlencoded)
    • PASS [expected FAIL] subtest: Newline normalization - \r\n in FormData value (urlencoded)
  • OK /fetch/metadata/generated/css-font-face.sub.tentative.html (#34624)
    • PASS [expected FAIL] subtest: sec-fetch-storage-access - Not sent to non-trustworthy cross-site destination
  • OK /html/browsers/browsing-the-web/navigating-across-documents/005.html (#27062)
    • PASS [expected FAIL] subtest: Link with onclick navigation and href navigation
  • OK /html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/load-pageshow-events-window-open.html (#28691)
    • PASS [expected FAIL] subtest: load event does not fire on window.open('about:blank')
  • OK /html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-cross-origin.sub.window.html (#29056)
    • PASS [expected FAIL] subtest: Cross-origin navigation started from unload handler must be ignored
  • OK /html/browsers/windows/embedded-opener-remove-frame.html (#23867)
    • PASS [expected FAIL] subtest: opener of discarded auxiliary browsing context
  • CRASH [expected OK] /html/browsers/windows/nested-browsing-contexts/frameElement-siblings.sub.html
  • OK /html/semantics/embedded-content/media-elements/playing-the-media-resource/loop-from-ended.tentative.html (#33778)
    • FAIL [expected PASS] subtest: play() with loop set to true after playback ended

      this argument is not a finite floating-point value
      

  • OK [expected TIMEOUT] /html/semantics/embedded-content/media-elements/src_object_blob.html (#40340)
    • PASS [expected TIMEOUT] subtest: HTMLMediaElement.srcObject blob
  • OK /html/semantics/embedded-content/the-iframe-element/iframe-loading-lazy-nav-link-click.html (#32664)
    • FAIL [expected PASS] subtest: Navigating iframe loading='lazy' before it is loaded: link click

      uncaught exception: Error: assert_equals: expected "http://web-platform.test:8000/html/semantics/embedded-content/the-iframe-element/support/blank.htm?nav" but got "http://web-platform.test:8000/html/semantics/embedded-content/the-iframe-element/support/blank.htm?src"
      

  • TIMEOUT [expected OK] /html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigate_other_frame_popup.sub.html (#39702)
    • TIMEOUT [expected FAIL] subtest: Sandboxed iframe can not navigate other frame's popup

      Test timed out
      

  • OK /html/semantics/forms/form-submission-0/multipart-formdata.window.html (#28725)
    • FAIL [expected PASS] subtest: multipart/form-data: Basic test (formdata event)

      assert_equals: expected "\r\nContent-Disposition: form-data; name=\"basic\"\r\n\r\ntest\r\n--\r\n" but got ""
      

    • PASS [expected FAIL] subtest: multipart/form-data: 0x00 in value (normal form)
    • PASS [expected FAIL] subtest: multipart/form-data: 0x00 in filename (formdata event)
    • PASS [expected FAIL] subtest: multipart/form-data: non-ASCII in name and value (formdata event)
  • OK /html/semantics/forms/form-submission-0/text-plain.window.html (#28687)
    • FAIL [expected PASS] subtest: text/plain: Basic test (formdata event)

      assert_equals: expected "basic=test\r\n" but got ""
      

    • FAIL [expected PASS] subtest: text/plain: Basic File test (normal form)

      assert_equals: expected "basic=file-test.txt\r\n" but got ""
      

  • OK /html/semantics/forms/form-submission-0/urlencoded2.window.html (#28687)
    • FAIL [expected PASS] subtest: application/x-www-form-urlencoded: Basic test (formdata event)

      assert_equals: expected "basic=test" but got ""
      

    • FAIL [expected PASS] subtest: application/x-www-form-urlencoded: Basic File test (normal form)

      assert_equals: expected "basic=file-test.txt" but got ""
      

    • PASS [expected FAIL] subtest: application/x-www-form-urlencoded: \r\n in name (formdata event)
  • ERROR [expected TIMEOUT] /html/semantics/links/links-created-by-a-and-area-elements/target_blank_implicit_noopener_base.html (#40347)
  • CRASH [expected OK] /html/webappapis/system-state-and-capabilities/the-navigator-object/secure_context.html
  • OK /mixed-content/tentative/autoupgrades/mixed-content-cors.https.sub.html (#41123)
    • FAIL [expected PASS] subtest: Cross-Origin video should get upgraded even if CORS is set

      assert_equals: Length. Other host expected 1 but got Infinity
      

  • OK /service-workers/service-worker/fetch-event.https.html (#36234)
    • PASS [expected FAIL] subtest: Service Worker falls back to network in fetch event with POST form
  • CRASH [expected OK] /trusted-types/block-string-assignment-to-DedicatedWorker-setTimeout-setInterval.html
  • TIMEOUT /trusted-types/trusted-types-navigation.html?06-10 (#37920)
    • PASS [expected FAIL] subtest: Navigate a frame via anchor with javascript:-urls in report-only mode.
  • CRASH [expected ERROR] /wasm/webapi/empty-body.any.serviceworker.html
  • CRASH [expected OK] /wasm/webapi/esm-integration/worklet-import-source-phase.tentative.https.html
  • CRASH [expected OK] /webxr/hit-test/ar_hittest_source_cancel.https.html
  • ERROR [expected OK] /webxr/render_state_update.https.html (#27535)
  • ERROR [expected OK] /workers/baseurl/alpha/sharedworker-in-worker.html (#21315)
Stable unexpected results that are known to be intermittent (30)
  • OK /IndexedDB/idbcursor-continuePrimaryKey-exceptions.any.html (#39277)
    • FAIL [expected PASS] subtest: IDBCursor continuePrimaryKey() on object store cursor

      assert_throws_dom: continuePrimaryKey() should throw if source is not an index function "function() {
              cursor.continuePrimaryKey(2, 2);
            }" threw object "TypeError: cursor.continuePrimaryKey is not a function" that is not a DOMException InvalidAccessError: property "code" is equal to undefined, expected 15
      

  • OK /IndexedDB/idbcursor-continuePrimaryKey-exceptions.any.worker.html (#39277)
    • FAIL [expected PASS] subtest: IDBCursor continuePrimaryKey() on object store cursor

      assert_throws_dom: continuePrimaryKey() should throw if source is not an index function "function() {
              cursor.continuePrimaryKey(2, 2);
            }" threw object "TypeError: cursor.continuePrimaryKey is not a function" that is not a DOMException InvalidAccessError: property "code" is equal to undefined, expected 15
      

  • OK /IndexedDB/idbobjectstore_getAll.any.html (#39276)
    • PASS [expected FAIL] subtest: Get all values with transaction.commit()
  • OK /IndexedDB/idbobjectstore_getAll.any.worker.html (#39400)
    • PASS [expected FAIL] subtest: Get all values with transaction.commit()
  • OK /IndexedDB/idbrequest-onupgradeneeded.any.html (#38895)
    • PASS [expected FAIL] subtest: transaction oncomplete ordering relative to open request onsuccess
  • OK /IndexedDB/idbrequest-onupgradeneeded.any.worker.html (#38971)
    • PASS [expected FAIL] subtest: transaction oncomplete ordering relative to open request onsuccess
  • OK /IndexedDB/key-conversion-exceptions.any.html (#39305)
    • FAIL [expected PASS] subtest: IDBCursor continue() method with throwing/invalid keys

      assert_throws_exactly: key conversion with throwing getter should rethrow function "() => {
            receiver[method](key);
          }" threw object "TypeError: receiver[method] is not a function" but we expected it to throw object "getter: throwing from getter"
      

    • FAIL [expected PASS] subtest: IDBCursor update() method with throwing/invalid keys

      assert_throws_exactly: throwing getter should rethrow during clone function "() => {
            cursor.update(value);
          }" threw object "TypeError: cursor.update is not a function" but we expected it to throw object "getter: throwing from getter"
      

  • OK /IndexedDB/key-conversion-exceptions.any.worker.html (#39284)
    • FAIL [expected PASS] subtest: IDBCursor continue() method with throwing/invalid keys

      assert_throws_exactly: key conversion with throwing getter should rethrow function "() => {
            receiver[method](key);
          }" threw object "TypeError: receiver[method] is not a function" but we expected it to throw object "getter: throwing from getter"
      

    • FAIL [expected PASS] subtest: IDBCursor update() method with throwing/invalid keys

      assert_throws_exactly: throwing getter should rethrow during clone function "() => {
            cursor.update(value);
          }" threw object "TypeError: cursor.update is not a function" but we expected it to throw object "getter: throwing from getter"
      

  • OK /_mozilla/css/offset_properties_inline.html (#40543)
    • PASS [expected FAIL] subtest: offsetTop
    • PASS [expected FAIL] subtest: offsetLeft
  • FAIL [expected PASS] /_mozilla/mozilla/sslfail.html (#10760)
  • TIMEOUT [expected OK] /_mozilla/mozilla/window_resize_event.html (#36741)
    • TIMEOUT [expected PASS] subtest: Popup onresize event fires after resizeTo

      Test timed out
      

  • CRASH [expected PASS] /_mozilla/shadow-dom/move-element-with-ua-shadow-tree-crash.html (#39473)
  • OK /_webgl/conformance/textures/misc/texture-upload-size.html (#21770)
    • PASS [expected FAIL] subtest: WebGL test #45
    • PASS [expected FAIL] subtest: WebGL test #47
    • PASS [expected FAIL] subtest: WebGL test #49
    • PASS [expected FAIL] subtest: WebGL test #51
    • FAIL [expected PASS] subtest: WebGL test #53

      assert_true: Texture was smaller than the expected size 2x2 expected true got false
      

    • FAIL [expected PASS] subtest: WebGL test #55

      assert_true: getError expected: INVALID_VALUE. Was NO_ERROR : when calling texSubImage2D with the same texture upload with offset 1, 1 expected true got false
      

    • FAIL [expected PASS] subtest: WebGL test #57

      assert_true: Texture was smaller than the expected size 2x2 expected true got false
      

    • FAIL [expected PASS] subtest: WebGL test #59

      assert_true: getError expected: INVALID_VALUE. Was NO_ERROR : when calling texSubImage2D with the same texture upload with offset 1, 1 expected true got false
      

    • PASS [expected FAIL] subtest: WebGL test #61
    • PASS [expected FAIL] subtest: WebGL test #63
    • And 10 more unexpected results...
  • TIMEOUT /content-security-policy/inheritance/location-reload.html (#38983)
    • PASS [expected FAIL] subtest: location.reload() of empty iframe.
  • OK /css/css-cascade/layer-font-face-override.html (#35935)
    • FAIL [expected PASS] subtest: @font-face override update with appended sheet 1

      assert_equals: expected "80px" but got "38.3166666666667px"
      

    • FAIL [expected PASS] subtest: @font-face override update with appended sheet 2

      assert_equals: expected "80px" but got "38.3166666666667px"
      

  • OK /css/css-fonts/generic-family-keywords-003.html (#38994)
    • PASS [expected FAIL] subtest: @font-face matching for quoted and unquoted monospace (drawing text in a canvas)
    • PASS [expected FAIL] subtest: @font-face matching for quoted and unquoted system-ui (drawing text in a canvas)
  • OK /fetch/metadata/generated/css-font-face.https.sub.tentative.html (#32732)
    • FAIL [expected PASS] subtest: sec-fetch-mode

      promise_test: Unhandled rejection with value: object "Error: Failed to query for recorded headers."
      

  • OK /html/browsers/browsing-the-web/navigating-across-documents/008.html (#24456)
    • PASS [expected FAIL] subtest: Link with onclick form submit to javascript url and href navigation
  • OK /html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/load-pageshow-events-iframe-contentWindow.html (#28681)
    • FAIL [expected PASS] subtest: load & pageshow events do not fire on contentWindow of <iframe> element created with src='about:blank'

      assert_unreached: load should not be fired Reached unreachable code
      

  • OK /html/browsers/history/the-history-interface/traverse_the_history_3.html (#21383)
    • PASS [expected FAIL] subtest: Multiple history traversals, last would be aborted
  • OK /html/browsers/history/the-history-interface/traverse_the_history_4.html (#21383)
    • PASS [expected FAIL] subtest: Multiple history traversals, last would be aborted
  • TIMEOUT /html/interaction/focus/the-autofocus-attribute/supported-elements.html (#24145)
    • TIMEOUT [expected PASS] subtest: Non-HTMLElement should not support autofocus

      Test timed out
      

  • OK /html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/allow-scripts-flag-changing-2.html (#39703)
    • FAIL [expected PASS] subtest: Meta refresh of the original iframe is not blocked if moved into a sandboxed iframe

      uncaught exception: Error: assert_unreached: The iframe into which the meta was moved must not refresh Reached unreachable code
      

  • OK [expected ERROR] /html/user-activation/no-activation-thru-escape-key.html (#40343)
  • FAIL [expected PASS] /png/apng/acTL-plays-one.html (#41218)
  • OK /pointerevents/compat/pointerevent_touch-action_two-finger_interaction.html (#40418)
    • PASS [expected FAIL] subtest: touch two-finger pan on 'touch-action: pan-x pan-y'
  • OK /preload/prefetch-document.html (#37210)
    • PASS [expected FAIL] subtest: different-site document prefetch with 'as=document' should not be consumed
  • CRASH [expected OK] /resource-timing/render-blocking-status-link.html (#41664)
  • TIMEOUT /resource-timing/test_resource_timing.html (#25720)
    • FAIL [expected PASS] subtest: PerformanceEntry has correct name, initiatorType, startTime, and duration (img)

      assert_equals: expected 30.93999999999999 but got 30.94
      

  • OK [expected TIMEOUT] /webstorage/localstorage-about-blank-3P-iframe-opens-3P-window.partitioned.html (#29053)
    • PASS [expected TIMEOUT] subtest: StorageKey: test 3P about:blank window opened from a 3P iframe
Stable unexpected results (3)
  • OK /pointerevents/pointerevent_change-touch-action-onpointerdown_touch.html
    • FAIL [expected PASS] subtest: scroll was received while shouldn't

      assert_true: scroll received while shouldn't expected true got false
      

  • ERROR /pointerevents/pointerevent_pointercapture_in_frame.html?touch
    • FAIL [expected TIMEOUT] subtest: Test touchpointer capture in same-origin frame: Pointerdown with set capture at inner frame, then release on next pointermove.

      assert_true: Timed out waiting for pointerup expected true got false
      

    • FAIL [expected NOTRUN] subtest: Test touchpointer capture in same-origin frame: Pointerdown with set capture at outer frame, then release on next pointermove.

      assert_array_equals: Received events: outerFrame received pointerdown,outerFrame received pointermove,outerFrame received pointermove,innerFrame received pointermove,innerFrame received pointermove,innerFrame received pointermove,innerFrame received pointermove,innerFrame received pointermove,innerFrame received pointermove,innerFrame received pointermove,innerFrame received pointermove,innerFrame received pointermove,innerFrame received pointermove,innerFrame received pointermove,innerFrame received pointermove,innerFrame received pointermove,innerFrame received pointermove,innerFrame received pointerup lengths differ, expected array ["outerFrame received pointerdown", "outerFrame received gotpointercapture", "outerFrame received pointermove", "outerFrame received lostpointercapture", "innerFrame received pointerup"] length 5, got ["outerFrame received pointerdown", "outerFrame received pointermove", "outerFrame received pointermove", "innerFrame received pointermove", "innerFrame received pointermove", "innerFrame received pointermove", "innerFrame received pointermove", "innerFrame received pointermove", "innerFrame received pointermove", "innerFrame received pointermove", "innerFrame received pointermove", "innerFrame received pointermove", "innerFrame received pointermove", "innerFrame received pointermove", "innerFrame received pointermove", "innerFrame received pointermove", "innerFrame received pointermove", "innerFrame received pointerup"] length 18
      

  • OK /pointerevents/touch-action-with-swipe-dir-change.html?touch
    • PASS [expected FAIL] subtest: touch-action:auto with right,down swipe
    • PASS [expected FAIL] subtest: touch-action:auto with down,right swipe
    • FAIL [expected PASS] subtest: touch-action:pan-x with down,right swipe

      assert_equals: scrollLeft should not change expected 100 but got 0
      

    • FAIL [expected PASS] subtest: touch-action:pan-y with right,down swipe

      assert_equals: scrollLeft should not change expected 100 but got 0
      

    • FAIL [expected PASS] subtest: touch-action:none with right,down swipe

      assert_equals: scrollLeft should not change expected 100 but got 0
      

    • FAIL [expected PASS] subtest: touch-action:none with down,right swipe

      assert_equals: scrollLeft should not change expected 100 but got 0
      

@github-actions
Copy link
Copy Markdown

⚠️ Try run (#21124921967) failed!

@webbeef
Copy link
Copy Markdown
Contributor Author

webbeef commented Jan 19, 2026

What is the status of this PR? Can you rebase given that #41801 is merged.

There are new unexpected failures in https://github.com/webbeef/servo/actions/runs/21124024992 and it looks like we still don't pass pointerevents/pointerevent_pointermove_isprimary_same_as_pointerdown.html?touch . I haven't debugged to know if this is an issue with this patch or with the webdriver event injection.

I won't have much time to check, so feel free to take over if you want @yezhizhen

@servo-highfive servo-highfive added the S-needs-rebase There are merge conflict errors. label Feb 3, 2026
@servo-highfive servo-highfive removed the S-needs-rebase There are merge conflict errors. label Feb 6, 2026
@servo-wpt-sync
Copy link
Copy Markdown
Collaborator

📝 Transplanted new upstreamable changes to existing upstream WPT pull request (web-platform-tests/wpt#56897).

@webbeef
Copy link
Copy Markdown
Contributor Author

webbeef commented Feb 6, 2026

@Gae24 I feel it's ready and would do some of the missing parts in follow ups.

@servo-highfive servo-highfive added the S-tests-failed The changes caused existing tests to fail. label Feb 8, 2026
@webbeef
Copy link
Copy Markdown
Contributor Author

webbeef commented Feb 8, 2026

I'm running a new try build to check if the latest wpt update changes our results.

@webbeef webbeef requested a review from yezhizhen as a code owner February 9, 2026 06:17
@servo-highfive servo-highfive removed the S-tests-failed The changes caused existing tests to fail. label Feb 9, 2026
@webbeef
Copy link
Copy Markdown
Contributor Author

webbeef commented Feb 9, 2026

I'm running a new try build to check if the latest wpt update changes our results.

The last WPT update included web-platform-tests/wpt@c556bde that caused our expectations to change.

@servo-wpt-sync
Copy link
Copy Markdown
Collaborator

📝 Transplanted new upstreamable changes to existing upstream WPT pull request (web-platform-tests/wpt#56897).

@yezhizhen yezhizhen added this pull request to the merge queue Feb 9, 2026
@servo-highfive servo-highfive added the S-awaiting-merge The PR is in the process of compiling and running tests on the automated CI. label Feb 9, 2026
@yezhizhen yezhizhen removed this pull request from the merge queue due to a manual request Feb 9, 2026
@servo-highfive servo-highfive removed the S-awaiting-merge The PR is in the process of compiling and running tests on the automated CI. label Feb 9, 2026
Copy link
Copy Markdown
Member

@yezhizhen yezhizhen left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It seems we get a lot more failure with pen due to the change in WebDriver.

@servo-highfive servo-highfive added S-needs-code-changes Changes have not yet been made that were requested by a reviewer. and removed S-awaiting-review There is new code that needs to be reviewed. labels Feb 9, 2026
@webbeef
Copy link
Copy Markdown
Contributor Author

webbeef commented Feb 10, 2026

I reverted the webdriver changes, try run here: https://github.com/webbeef/servo/actions/runs/21849393293/job/63056309331

I think we should take #42485 before.

@yezhizhen
Copy link
Copy Markdown
Member

yezhizhen commented Feb 10, 2026

@webbeef It's ok. Let's do this incrementally and merge this first.

I have a touch related PR that also depends on this.

Remaining failures are due to the missing implementation of
the pointer capture and pointer lock APIs, as well as:

Requires User Activation support:
/html/user-activation/activation-trigger-pointerevent.html?mouse

Blocked on servo#41227 :
/pointerevents/compat/pointerevent_mouse-pointer-on-scrollbar.html

Requires persistentDeviceId:
/pointerevents/persistentDeviceId/get-persistendeviceid-from-pointer-event.tentative.html
/pointerevents/persistentDeviceId/get-persistendeviceid-from-pointer-mouse-event.tentative.html

Requires pointerenter, pointerover, pointerout, pointerleave events:
/pointerevents/pointerevent_pointerId_scope.html

Requires pointerrawupdate event:
/pointerevents/pointerevent_pointerrawupdate.html
/pointerevents/pointerevent_pointerrawupdate.https.html

Consider implementing non-standard attributes toElement and fromElement:
See https://w3c.github.io/pointerevents/#attributes-and-default-actions

Fails because the pointerId is always 0 for pointermove, maybe caused by commit 7b00b54 :
/pointerevents/pointerevent_pointermove_isprimary_same_as_pointerdown.html?touch
servo#41250

Signed-off-by: webbeef <[email protected]>
@servo-highfive servo-highfive added S-awaiting-review There is new code that needs to be reviewed. and removed S-needs-code-changes Changes have not yet been made that were requested by a reviewer. labels Feb 10, 2026
@servo-wpt-sync
Copy link
Copy Markdown
Collaborator

📝 Transplanted new upstreamable changes to existing upstream WPT pull request (web-platform-tests/wpt#56897).

@yezhizhen yezhizhen dismissed their stale review February 10, 2026 07:23

Thanks for the hardwork!

@yezhizhen yezhizhen enabled auto-merge February 10, 2026 07:23
@yezhizhen yezhizhen added this pull request to the merge queue Feb 10, 2026
@servo-highfive servo-highfive added the S-awaiting-merge The PR is in the process of compiling and running tests on the automated CI. label Feb 10, 2026
Merged via the queue into servo:main with commit 39d946b Feb 10, 2026
33 checks passed
@servo-highfive servo-highfive removed the S-awaiting-merge The PR is in the process of compiling and running tests on the automated CI. label Feb 10, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

S-awaiting-review There is new code that needs to be reviewed.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

pointerdown and pointerup event are never sent

8 participants