Skip to content

Conversation

@TimvdLippe
Copy link
Contributor

@TimvdLippe TimvdLippe commented Aug 19, 2025

Additionally, several methods were updated with
spec comments. That's because the "adopt the document
from the element document" step was missing.

By adding these spec comments, I also restructured
some code to avoid duplication of mutation records
and custom element reaction queueing.

Node.textContent doesn't propagate the error yet,
as that method has a lot of separate callers of
elements that wouldn't fail. I will refactor those
in a follow-up PR to keep things manageable.

This implements part of the DOM integration from
whatwg/dom#1268

Part of #36258

@TimvdLippe TimvdLippe requested a review from gterzian as a code owner August 19, 2025 16:12
@TimvdLippe TimvdLippe added the T-linux-wpt Do a try run of the WPT label Aug 19, 2025
@github-actions github-actions bot removed the T-linux-wpt Do a try run of the WPT label Aug 19, 2025
@github-actions
Copy link

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

@github-actions
Copy link

⚠️ Try run (#17075413903) failed.

@TimvdLippe TimvdLippe force-pushed the trusted-types-set-attribute-node branch from 13a1c0e to 715ed43 Compare August 19, 2025 17:28
@TimvdLippe TimvdLippe added the T-linux-wpt Do a try run of the WPT label Aug 19, 2025
@github-actions github-actions bot removed the T-linux-wpt Do a try run of the WPT label Aug 19, 2025
@github-actions
Copy link

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

@github-actions
Copy link

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

Flaky unexpected result (20)
  • FAIL [expected PASS] /css/CSS2/fonts/font-family-valid-characters-002.xht
  • FAIL [expected PASS] /css/css-pseudo/marker-font-variant-numeric-default.html
  • FAIL [expected PASS] /css/css-text/white-space/pre-wrap-leading-spaces-014.html
  • TIMEOUT [expected OK] /fetch/api/redirect/redirect-keepalive.https.any.html (#32153)
    • TIMEOUT [expected PASS] subtest: [keepalive][iframe][load] mixed content redirect; setting up

      Test timed out
      

  • ERROR /fetch/metadata/generated/serviceworker.https.sub.html (#36247)
    • PASS [expected FAIL] subtest: sec-fetch-site - Same origin, no options - registration
  • OK /html/browsers/browsing-the-web/navigating-across-documents/006.html (#21382)
    • PASS [expected FAIL] subtest: Link with onclick form submit and href navigation
  • OK /html/browsers/browsing-the-web/navigating-across-documents/009.html (#24456)
    • PASS [expected FAIL] subtest: Link with onclick form submit to javascript url with document.write and href navigation
  • OK /html/browsers/browsing-the-web/navigating-across-documents/refresh/same-document-refresh.html (#34597)
    • PASS [expected FAIL] subtest: Same-Document Referrer from Refresh
  • OK /html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/a-click.html (#28697)
    • PASS [expected FAIL] subtest: aElement.click() before the load event must NOT replace
  • FAIL [expected PASS] /html/canvas/element/manual/text/canvas.2d.disconnected.html (#30063)
  • TIMEOUT [expected OK] /html/interaction/focus/the-autofocus-attribute/autofocus-dialog.html (#29087)
    • TIMEOUT [expected FAIL] subtest: <dialog>-contained autofocus element gets focused when the dialog is shown

      Test timed out
      

  • TIMEOUT [expected OK] /html/interaction/focus/the-autofocus-attribute/document-with-fragment-top.html (#28259)
    • TIMEOUT [expected FAIL] subtest: Autofocus elements in top-level browsing context's documents with "top" fragments should work.

      Test timed out
      

  • TIMEOUT [expected OK] /html/interaction/focus/the-autofocus-attribute/update-the-rendering.html (#24145)
    • TIMEOUT [expected FAIL] subtest: "Flush autofocus candidates" should be happen before a scroll event and animation frame callbacks

      Test timed out
      

  • PASS [expected FAIL] /html/rendering/widgets/appearance/appearance-animation-002.html
  • OK /html/semantics/embedded-content/the-iframe-element/iframe-loading-lazy-nav-location-assign.html (#32863)
    • FAIL [expected PASS] subtest: Navigating iframe loading='lazy' before it is loaded: location.assign

      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"
      

  • OK /html/semantics/forms/form-submission-0/multipart-formdata.window.html (#28725)
    • PASS [expected FAIL] subtest: multipart/form-data: \r\n in value (formdata event)
  • OK /html/semantics/forms/historical.html (#28568)
    • PASS [expected FAIL] subtest: <input name=isindex> should not be supported
  • OK [expected TIMEOUT] /webmessaging/with-ports/017.html (#24486)
    • PASS [expected TIMEOUT] subtest: origin of the script that invoked the method, about:blank
  • OK [expected TIMEOUT] /webmessaging/with-ports/018.html (#24485)
    • PASS [expected TIMEOUT] subtest: origin of the script that invoked the method, javascript:
  • TIMEOUT [expected OK] /webstorage/localstorage-about-blank-3P-iframe-opens-3P-window.partitioned.html (#29053)
    • TIMEOUT [expected PASS] subtest: StorageKey: test 3P about:blank window opened from a 3P iframe

      Test timed out
      

Stable unexpected results that are known to be intermittent (30)
  • OK /FileAPI/url/url-with-fetch.any.worker.html (#21517)
    • PASS [expected FAIL] subtest: Revoke blob URL after calling fetch, fetch should succeed
  • TIMEOUT /IndexedDB/transaction-deactivation-timing.any.html (#38772)
    • PASS [expected FAIL] subtest: New transactions are deactivated before next task
  • FAIL [expected PASS] /_mozilla/css/iframe/hide_and_show.html (#15265)
  • FAIL [expected PASS] /_mozilla/css/stacked_layers.html (#15988)
  • 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
      

  • OK /content-security-policy/frame-ancestors/frame-ancestors-path-ignored.window.html (#36468)
    • FAIL [expected PASS] subtest: A 'frame-ancestors' CSP directive with a URL that includes a path should be ignored.

      assert_unreached: The IFrame should have been blocked (or cross-origin). It wasn't. Reached unreachable code
      

  • TIMEOUT [expected PASS] /css/css-color/animation/opacity-animation-ending-correctly-002.html (#29216)
  • OK /css/css-fonts/variations/at-font-face-font-matching.html (#20684)
    • FAIL [expected PASS] subtest: Matching font-stretch: '90%' should prefer '110% 140%' over '120% 130%'

      assert_equals: Unexpected font on test element expected 487 but got 532
      

  • TIMEOUT [expected OK] /css/css-transitions/non-rendered-element-002.html (#32338)
    • TIMEOUT [expected PASS] subtest: Transitions on ::before/::after pseudo-elements are canceled when the content property is cleared

      Test timed out
      

  • ERROR [expected TIMEOUT] /dom/abort/AbortSignal.https.any.shadowrealm-in-audioworklet.html (#38763)
  • ERROR [expected TIMEOUT] /dom/abort/event.https.any.shadowrealm-in-audioworklet.html (#38763)
  • TIMEOUT [expected OK] /dom/events/webkit-transition-end-event.html (#26497)
    • TIMEOUT [expected PASS] subtest: onwebkittransitionend event handler should not trigger if an unprefixed event handler also exists

      Test timed out
      

    • NOTRUN [expected PASS] subtest: onwebkittransitionend event handler should not trigger if an unprefixed listener also exists
    • NOTRUN [expected FAIL] subtest: event types for prefixed and unprefixed transitionend event handlers should be named appropriately
    • NOTRUN [expected FAIL] subtest: webkitTransitionEnd event listener should trigger for an animation
    • NOTRUN [expected PASS] subtest: webkitTransitionEnd event listener should not trigger if an unprefixed listener also exists
    • NOTRUN [expected PASS] subtest: webkitTransitionEnd event listener should not trigger if an unprefixed event handler also exists
    • NOTRUN [expected FAIL] subtest: event types for prefixed and unprefixed transitionend event listeners should be named appropriately
    • NOTRUN [expected PASS] subtest: webkitTransitionEnd event listener is case sensitive
  • TIMEOUT [expected FAIL] /dom/xslt/large-cdata.html (#38029)
  • OK /fetch/metadata/generated/css-font-face.https.sub.tentative.html (#32732)
    • PASS [expected FAIL] subtest: sec-fetch-dest
  • OK /fetch/metadata/generated/css-font-face.sub.tentative.html (#34624)
    • FAIL [expected PASS] subtest: sec-fetch-storage-access - Not sent to non-trustworthy cross-site destination

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

  • 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/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
  • TIMEOUT /html/interaction/focus/the-autofocus-attribute/supported-elements.html (#24145)
    • TIMEOUT [expected NOTRUN] subtest: Host element with delegatesFocus should support autofocus

      Test timed out
      

  • CRASH [expected TIMEOUT] /html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html (#22647)
  • CRASH [expected OK] /html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html (#24057)
  • TIMEOUT [expected CRASH] /html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html (#24066)
    • NOTRUN [expected FAIL] subtest: Check that popups from a sandboxed iframe do not escape the sandbox
  • CRASH [expected OK] /html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-2.html (#22154)
  • OK /html/semantics/forms/form-submission-0/urlencoded2.window.html (#28687)
    • PASS [expected FAIL] subtest: application/x-www-form-urlencoded: Basic test (normal form)
  • OK /navigation-timing/test-navigation-type-reload.html (#33334)
    • FAIL [expected PASS] subtest: Reload domComplete > Original domComplete

      assert_true: Reload domComplete > Original domComplete expected true got false
      

    • FAIL [expected PASS] subtest: Reload loadEventEnd > Original loadEventEnd

      assert_true: Reload loadEventEnd > Original loadEventEnd expected true got false
      

    • FAIL [expected PASS] subtest: Reload loadEventStart > Original loadEventStart

      assert_true: Reload loadEventStart > Original loadEventStart expected true got false
      

  • OK /preload/preload-error.sub.html (#37177)
    • FAIL [expected PASS] subtest: success (script): main

      assert_greater_than: http://web-platform.test:8000/preload/resources/dummy.js?label=script should be loaded expected a number greater than 0 but got 0
      

    • FAIL [expected PASS] subtest: 404 (xhr): main

      assert_greater_than: http://web-platform.test:8000/preload/resources/dummy.xml?pipe=status%28404%29&label=xhr should be loaded expected a number greater than 0 but got 0
      

    • PASS [expected FAIL] subtest: CORS (xhr): main
  • TIMEOUT [expected OK] /resource-timing/tentative/document-initiated.html (#37785)
  • ERROR /service-workers/idlharness.https.any.html (#36250)
    • TIMEOUT [expected PASS] subtest: ServiceWorkerContainer interface: operation register((TrustedScriptURL or USVString), optional RegistrationOptions)

      Test timed out
      

    • TIMEOUT [expected PASS] subtest: NavigationPreloadManager interface: operation enable()

      Test timed out
      

    • TIMEOUT [expected PASS] subtest: NavigationPreloadManager interface: operation disable()

      Test timed out
      

    • TIMEOUT [expected PASS] subtest: NavigationPreloadManager interface: operation setHeaderValue(ByteString)

      Test timed out
      

    • TIMEOUT [expected PASS] subtest: NavigationPreloadManager interface: operation getState()

      Test timed out
      

  • TIMEOUT [expected CRASH] /trusted-types/trusted-types-navigation.html?06-10 (#37920)
    • TIMEOUT [expected FAIL] subtest: Navigate a frame via anchor with javascript:-urls w/ default policy in report-only mode.

      Test timed out
      

    • NOTRUN [expected FAIL] subtest: Navigate a window via anchor with javascript:-urls w/ a default policy throwing an exception in enforcing mode.
    • NOTRUN [expected FAIL] subtest: Navigate a window via anchor with javascript:-urls w/ a default policy throwing an exception in report-only mode.
Stable unexpected results (77)
  • TIMEOUT /IndexedDB/transaction-deactivation-timing.any.worker.html
    • PASS [expected FAIL] subtest: New transactions are deactivated before next task
  • TIMEOUT [expected OK] /_mozilla/css/animations/basic-transition.html
    • TIMEOUT [expected PASS] subtest: Transition test

      Test timed out
      

  • TIMEOUT [expected OK] /_mozilla/css/animations/transition-raf.html
    • TIMEOUT [expected PASS] subtest: Transitions should work during RAF loop

      Test timed out
      

  • FAIL [expected PASS] /_mozilla/css/hide_after_create.html
  • FAIL [expected PASS] /_mozilla/css/iframe/hide_layers1.html
  • FAIL [expected PASS] /_mozilla/css/incremental_visibility_a.html
  • TIMEOUT [expected OK] /_mozilla/css/transitionend_event.html
    • TIMEOUT [expected PASS] subtest: transitionend_event

      Test timed out
      

  • FAIL [expected PASS] /css/CSS2/backgrounds/background-root-101.xht
  • FAIL [expected PASS] /css/CSS2/backgrounds/background-root-102.xht
  • FAIL [expected PASS] /css/CSS2/backgrounds/background-root-103.xht
  • FAIL [expected PASS] /css/CSS2/selectors/dynamic-sibling-combinator-001.xht
  • FAIL [expected PASS] /css/CSS2/zindex/z-index-020.html
  • OK /css/css-align/blocks/align-content-table-cell.html
    • FAIL [expected PASS] subtest: vertical-align:middle and align-content:unsafe center are equivalent

      assert_equals: The first cell content top expected 0 but got 15
      

    • FAIL [expected PASS] subtest: vertical-align:middle and align-content:safe center are equivalent if the container is tall

      assert_equals: The first cell content top expected 0 but got 15
      

    • FAIL [expected PASS] subtest: ``align-content:safe centeris equivalent tounsafe center` even if the specified `height` is short`

      assert_equals: The first cell content top expected 0 but got 15
      

  • FAIL [expected PASS] /css/css-backgrounds/background-image-none-gradient-repaint.html
  • OK /css/css-cascade/all-prop-revert-noop.html?include=3
    • PASS [expected FAIL] subtest: input
    • PASS [expected FAIL] subtest: textarea
  • OK /css/css-cascade/revert-val-004.html
    • FAIL [expected PASS] subtest: The revert keyword works with the all property

      assert_equals: expected "block" but got "inline"
      

  • OK /css/css-conditional/container-queries/inheritance-from-container.html
    • FAIL [expected PASS] subtest: Test that visibility inherits via container after mutation

      assert_equals: expected "visible" but got "hidden"
      

    • FAIL [expected PASS] subtest: Test that visibility inherits from container after mutation

      assert_equals: expected "visible" but got "hidden"
      

  • OK /css/css-flexbox/shrinking-column-flexbox.html
    • FAIL [expected PASS] subtest: body 1

      assert_equals: 
      <body class="flexbox column">
      
      <div class="flexbox column flex-one-one-auto">
        <div class="flex-one-one-auto green small" data-expected-height="250" id="target">
          <div class="inner"></div>
        </div>
        <div class="flex-one-one-auto blue" data-expected-height="350">
          <div class="inner"></div>
        </div>
      </div>
      
      <div id="log"></div>
      </body>
      height expected 250 but got 300
      

  • OK /css/css-grid/grid-definition/grid-minimum-contribution-with-percentages.html
    • FAIL [expected PASS] subtest: min - columns

      assert_equals: grid-template-columns expected "50px" but got "100px"
      

    • FAIL [expected PASS] subtest: min - rows

      assert_equals: grid-template-rows expected "50px" but got "100px"
      

    • PASS [expected FAIL] subtest: size - columns
    • PASS [expected FAIL] subtest: size - rows
    • FAIL [expected PASS] subtest: min max - columns

      assert_equals: grid-template-columns expected "50px" but got "100px"
      

    • FAIL [expected PASS] subtest: min max - rows

      assert_equals: grid-template-rows expected "50px" but got "100px"
      

    • FAIL [expected PASS] subtest: min size - columns

      assert_equals: grid-template-columns expected "50px" but got "100px"
      

    • FAIL [expected PASS] subtest: min size - rows

      assert_equals: grid-template-rows expected "50px" but got "100px"
      

    • PASS [expected FAIL] subtest: max size - columns
    • PASS [expected FAIL] subtest: max size - rows
    • And 2 more unexpected results...
  • OK /css/css-nesting/invalidation-001.html
    • FAIL [expected PASS] subtest: CSS Selectors nested invalidation on changed parent

      assert_equals: expected "rgb(0, 128, 0)" but got "rgb(255, 0, 0)"
      

  • OK /css/css-nesting/invalidation-002.html
    • FAIL [expected PASS] subtest: CSS Selectors nested invalidation on changed child

      assert_equals: expected "rgb(0, 128, 0)" but got "rgb(255, 0, 0)"
      

  • FAIL [expected PASS] /css/css-overflow/overflow-clip-margin-invalidation.html
  • OK /css/css-position/position-absolute-dynamic-containing-block.html
    • FAIL [expected PASS] subtest: abs containing block moves from outer to intermediate

      assert_equals: expected 210 but got 310
      

    • FAIL [expected PASS] subtest: abs containing block moves from intermediate to outer

      assert_equals: expected 310 but got 210
      

    • FAIL [expected PASS] subtest: target is no longer absolute

      assert_equals: expected 310 but got 210
      

    • FAIL [expected PASS] subtest: target becomes absolute

      assert_equals: expected 290 but got 310
      

    • FAIL [expected PASS] subtest: fixed containing block moves from outer to intermediate

      assert_equals: expected 210 but got 310
      

    • FAIL [expected PASS] subtest: fixed containing block moves from intermediate to outer

      assert_equals: expected 310 but got 210
      

    • FAIL [expected PASS] subtest: target is no longer fixed

      assert_equals: expected 310 but got 210
      

    • FAIL [expected PASS] subtest: target becomes fixed

      assert_equals: expected 290 but got 310
      

  • OK /css/css-shadow-parts/exportparts-multiple.html
    • FAIL [expected PASS] subtest: Forwarding part under multiple names should work

      assert_equals: background should be green from .change-1::part(inner-part) rule expected "rgb(0, 128, 0)" but got "rgb(0, 0, 255)"
      

  • OK /css/css-shadow-parts/host-part-001.html
    • FAIL [expected PASS] subtest: :host::part works

      assert_equals: :host::part() invalidation works properly expected "rgb(0, 0, 255)" but got "rgb(0, 255, 0)"
      

  • OK /css/css-shadow-parts/invalidation-complex-selector-forward.html
    • FAIL [expected PASS] subtest: Part in selected host changed color

      assert_not_equals: got disallowed value "rgb(255, 0, 0)"
      

  • OK /css/css-shadow-parts/invalidation-complex-selector.html
    • FAIL [expected PASS] subtest: Part in selected host changed color

      assert_not_equals: got disallowed value "rgb(255, 0, 0)"
      

  • FAIL [expected PASS] /css/css-shadow-parts/part-after-combinator-invalidation.html
  • OK /css/css-tables/tentative/position-sticky-container.html
    • FAIL [expected PASS] subtest: TBODY sticky container is table

      assert_equals: sticking to the table expected 0 but got -75
      

  • FAIL [expected PASS] /css/css-text-decor/invalidation/text-decoration-invalidation-dashed.html
  • FAIL [expected PASS] /css/css-text-decor/invalidation/text-decoration-invalidation-double.html
  • FAIL [expected PASS] /css/css-text-decor/invalidation/text-decoration-invalidation-solid.html
  • FAIL [expected PASS] /css/css-text-decor/invalidation/text-decoration-invalidation-wavy.html
  • FAIL [expected PASS] /css/css-transforms/backface-visibility-hidden-animated-001.html
  • FAIL [expected PASS] /css/css-transforms/backface-visibility-hidden-animated-002.html
  • TIMEOUT [expected OK] /css/css-transitions/events-006.html
    • TIMEOUT [expected PASS] subtest: transition padding-left on ::after

      Test timed out
      

  • OK /css/css-transitions/pseudo-elements-002.html
    • FAIL [expected PASS] subtest: Check that transitions run on a pseudo element whose ancestor changes display type.

      assert_equals: expected "200px" but got "100px"
      

  • OK /css/css-transitions/transition-after-animation-001.html
    • FAIL [expected PASS] subtest: Starting transition after animation has ended

      assert_equals: expected "100px" but got "0px"
      

  • OK /css/css-transitions/transition-base-response-001.html
    • FAIL [expected PASS] subtest: em units respond to font-size transition

      assert_equals: expected "15px" but got "10px"
      

    • FAIL [expected PASS] subtest: ex units respond to font-size transition

      assert_equals: expected "7.5px" but got "5px"
      

    • FAIL [expected PASS] subtest: var() references respond to custom property transition

      assert_equals: expected "20px" but got "10px"
      

  • OK /css/css-transitions/transition-base-response-002.html
    • FAIL [expected PASS] subtest: Transitioning font-size on root affects rem units

      assert_equals: expected "25px" but got "20px"
      

  • OK /css/css-transitions/transition-base-response-003.html
    • FAIL [expected PASS] subtest: Identical elements are all responsive to font-size transition

      assert_equals: expected "15px" but got "10px"
      

  • OK /css/css-values/calc-size/animation/interpolate-size-which-value.html
    • FAIL [expected PASS] subtest: Use the after-change value of interpolate-size: numeric-only when starting CSS transition from 100px to min-content

      assert_equals: width after change expected "0px" but got "100px"
      

    • FAIL [expected PASS] subtest: Use the after-change value of interpolate-size: numeric-only when starting CSS transition from min-content to 100px

      assert_equals: width after change expected "100px" but got "0px"
      

    • PASS [expected FAIL] subtest: Use the after-change value of interpolate-size: allow-keywords when starting CSS transition from 100px to min-content
    • PASS [expected FAIL] subtest: Use the after-change value of interpolate-size: allow-keywords when starting CSS transition from min-content to 100px
  • OK /css/css-variables/css-variable-change-style-002.html
    • FAIL [expected PASS] subtest: Declaration changes on 'background-color' propagate to all variable references

      assert_equals: case1-1 expected "rgb(255, 0, 0)" but got "rgba(0, 0, 0, 0)"
      

    • FAIL [expected PASS] subtest: Declaration changes on 'white-space' propagate to all variable references

      assert_equals: case1-1 expected "pre-wrap" but got "normal"
      

  • OK /css/cssom/CSSStyleSheet-constructable.html
    • FAIL [expected PASS] subtest: Re-attaching shadow host and updating attributes work

      assert_equals: Attribute updates to the element after reattachment apply expected "rgb(0, 0, 0)" but got "rgb(255, 0, 0)"
      

  • OK /css/cssom/cssstyledeclaration-csstext-setter.window.html
    • FAIL [expected PASS] subtest: cssText setter and selector invalidation

      assert_equals: expected "rgb(255, 255, 255)" but got "rgb(255, 0, 0)"
      

  • OK /css/cssom/getComputedStyle-display-none-002.html
    • FAIL [expected PASS] subtest: getComputedStyle gets invalidated in display: none subtrees due to rule matching changes

      assert_equals: expected "rgb(0, 128, 0)" but got "rgb(255, 0, 0)"
      

  • OK /css/cssom/getComputedStyle-pseudo.html
    • FAIL [expected PASS] subtest: Dynamically change to display: contents on pseudo-elements

      assert_equals: display: contents in :before should get reflected on CSSOM expected "contents" but got "block"
      

  • FAIL [expected PASS] /css/filter-effects/remove-filter-repaint.html
  • OK /css/selectors/attribute-selectors/style-attribute-selector.html
    • FAIL [expected PASS] subtest: Dynamically change style with Element.setAttribute

      assert_equals: expected "rgb(0, 255, 0)" but got "rgba(0, 0, 0, 0)"
      

    • FAIL [expected PASS] subtest: Dynamically change style with Element.style

      assert_equals: expected "rgb(0, 255, 0)" but got "rgba(0, 0, 0, 0)"
      

    • FAIL [expected PASS] subtest: Dynamically change style with Element.style.property

      assert_equals: expected "rgb(0, 255, 0)" but got "rgba(0, 0, 0, 0)"
      

    • FAIL [expected PASS] subtest: Dynamically remove style with Element.style

      assert_equals: expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)"
      

    • FAIL [expected PASS] subtest: Dynamically remove style with Element.style.property

      assert_equals: expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)"
      

    • FAIL [expected PASS] subtest: Dynamically remove style with Element.style.removeProperty

      assert_equals: expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)"
      

  • OK /css/selectors/invalidation/attribute.html
    • FAIL [expected PASS] subtest: [att] selector is effective

      assert_equals: expected "rgb(0, 0, 255)" but got "rgb(128, 128, 128)"
      

    • FAIL [expected PASS] subtest: [att=val] selector is effective

      assert_equals: expected "rgb(0, 0, 255)" but got "rgb(128, 128, 128)"
      

    • FAIL [expected PASS] subtest: [att~=val] selector is effective

      assert_equals: expected "rgb(0, 0, 255)" but got "rgb(128, 128, 128)"
      

    • FAIL [expected PASS] subtest: [att|=val] selector is effective

      assert_equals: expected "rgb(0, 0, 255)" but got "rgb(128, 128, 128)"
      

    • FAIL [expected PASS] subtest: #id selector is effective

      assert_equals: expected "rgb(0, 0, 255)" but got "rgb(128, 128, 128)"
      

    • FAIL [expected PASS] subtest: .class selector is effective

      assert_equals: expected "rgb(128, 128, 128)" but got "rgb(0, 0, 255)"
      

  • FAIL [expected PASS] /css/selectors/invalidation/class-id-attr.html
  • OK /css/selectors/invalidation/is-where-pseudo-containing-hard-pseudo.html
    • FAIL [expected PASS] subtest: subject1 is red when .other-match added

      assert_equals: expected "rgb(255, 0, 0)" but got "rgb(128, 128, 128)"
      

    • FAIL [expected PASS] subtest: subject1 is orangered when .parent added to parent

      assert_equals: expected "rgb(255, 69, 0)" but got "rgb(128, 128, 128)"
      

    • FAIL [expected PASS] subtest: subject1 is orangered when .parent removed from parent

      assert_equals: expected "rgb(255, 0, 0)" but got "rgb(128, 128, 128)"
      

    • FAIL [expected PASS] subtest: subject2 is darkred when .other-match added

      assert_equals: expected "rgb(139, 0, 0)" but got "rgb(128, 128, 128)"
      

    • FAIL [expected PASS] subtest: subject2 is pink when .parent added to parent

      assert_equals: expected "rgb(255, 192, 203)" but got "rgb(128, 128, 128)"
      

    • FAIL [expected PASS] subtest: subject2 is pink when .parent removed from parent

      assert_equals: expected "rgb(139, 0, 0)" but got "rgb(128, 128, 128)"
      

    • FAIL [expected PASS] subtest: subject3 is green when .other-match added

      assert_equals: expected "rgb(0, 128, 0)" but got "rgb(128, 128, 128)"
      

    • FAIL [expected PASS] subtest: subject3 is lightgreen when .parent added to parent

      assert_equals: expected "rgb(144, 238, 144)" but got "rgb(128, 128, 128)"
      

    • FAIL [expected PASS] subtest: subject3 is lightgreen when .parent removed from parent

      assert_equals: expected "rgb(0, 128, 0)" but got "rgb(128, 128, 128)"
      

    • FAIL [expected PASS] subtest: subject4 is darkgreen when .other-match added

      assert_equals: expected "rgb(0, 100, 0)" but got "rgb(128, 128, 128)"
      

    • And 2 more unexpected results...
  • OK /css/selectors/invalidation/is.html
    • FAIL [expected PASS] subtest: Invalidate :is() for simple selector arguments.

      assert_equals: expected "rgb(255, 0, 0)" but got "rgb(255, 255, 0)"
      

    • FAIL [expected PASS] subtest: Invalidate :is() for compound selector arguments.

      assert_equals: expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)"
      

    • FAIL [expected PASS] subtest: Invalidate :is() for complex selector arguments.

      assert_equals: expected "rgb(0, 0, 255)" but got "rgb(0, 0, 0)"
      

    • FAIL [expected PASS] subtest: Invalidate nested :is().

      assert_equals: expected "rgb(255, 0, 0)" but got "rgb(0, 0, 0)"
      

    • FAIL [expected PASS] subtest: Test specificity of :is().

      assert_equals: expected "rgb(0, 0, 255)" but got "rgb(0, 0, 0)"
      

  • FAIL [expected PASS] /css/selectors/invalidation/negated-always-matches-negated-first-of-type-when-ancestor-changes.html
  • FAIL [expected PASS] /css/selectors/invalidation/negated-always-matches-negated-last-of-type-when-ancestor-changes.html
  • FAIL [expected PASS] /css/selectors/invalidation/negated-is-never-matches-negated-first-of-type-when-ancestor-changes.html
  • FAIL [expected PASS] /css/selectors/invalidation/negated-is-never-matches-negated-last-of-type-when-ancestor-changes.html
  • FAIL [expected PASS] /css/selectors/invalidation/negated-negated-first-of-type-when-ancestor-changes.html
  • FAIL [expected PASS] /css/selectors/invalidation/negated-negated-last-of-type-when-ancestor-changes.html
  • FAIL [expected PASS] /css/selectors/invalidation/negated-never-matches-negated-first-of-type-when-ancestor-changes.html
  • FAIL [expected PASS] /css/selectors/invalidation/negated-never-matches-negated-last-of-type-when-ancestor-changes.html
  • OK /css/selectors/invalidation/not-001.html
    • FAIL [expected PASS] subtest: Invalidation of sibling combinators in :not()

      assert_equals: expected "rgb(255, 255, 0)" but got "rgb(0, 128, 0)"
      

  • OK /css/selectors/invalidation/not-002.html
    • FAIL [expected PASS] subtest: Invalidate :not() for simple selector arguments.

      assert_equals: expected "rgb(255, 0, 0)" but got "rgb(255, 255, 0)"
      

    • FAIL [expected PASS] subtest: Invalidate :not() for compound selector arguments.

      assert_equals: expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)"
      

    • FAIL [expected PASS] subtest: Invalidate :not() for complex selector arguments.

      assert_equals: expected "rgb(0, 0, 255)" but got "rgb(0, 0, 0)"
      

    • FAIL [expected PASS] subtest: Invalidate nested :is() inside :not().

      assert_equals: expected "rgb(255, 0, 0)" but got "rgb(0, 0, 0)"
      

    • FAIL [expected PASS] subtest: Test specificity of :not().

      assert_equals: expected "rgb(0, 0, 255)" but got "rgb(0, 0, 0)"
      

  • OK /css/selectors/invalidation/sibling.html
    • FAIL [expected PASS] subtest: Adjacent with universal selector

      assert_equals: Background color is green after class change expected "rgb(0, 128, 0)" but got "rgba(0, 0, 0, 0)"
      

    • FAIL [expected PASS] subtest: Indirect adjacent with universal selector

      assert_equals: Background color is green after class change expected "rgb(0, 128, 0)" but got "rgba(0, 0, 0, 0)"
      

    • FAIL [expected PASS] subtest: Indirect adjacent with two adjacent selectors

      assert_equals: Background color is green after class change expected "rgb(0, 128, 0)" but got "rgba(0, 0, 0, 0)"
      

    • FAIL [expected PASS] subtest: Adjacent class

      assert_equals: Background color is green after class change expected "rgb(0, 128, 0)" but got "rgba(0, 0, 0, 0)"
      

    • FAIL [expected PASS] subtest: Adjacent universal

      assert_equals: Background color is green after class change expected "rgb(0, 128, 0)" but got "rgba(0, 0, 0, 0)"
      

    • FAIL [expected PASS] subtest: Sibling subtree through an indirect adjacent combinator

      assert_equals: Background color is green after class change expected "rgb(0, 128, 0)" but got "rgba(0, 0, 0, 0)"
      

    • FAIL [expected PASS] subtest: Sibling descendant through a universal selector

      assert_equals: Background color is green after class change expected "rgb(0, 128, 0)" but got "rgba(0, 0, 0, 0)"
      

  • OK /css/selectors/invalidation/where.html
    • FAIL [expected PASS] subtest: Invalidate :where() for compound selector arguments.

      assert_equals: expected "rgb(0, 128, 0)" but got "rgb(255, 0, 0)"
      

    • FAIL [expected PASS] subtest: Invalidate :where() for complex selector arguments.

      assert_equals: expected "rgb(255, 255, 0)" but got "rgb(0, 0, 0)"
      

    • FAIL [expected PASS] subtest: Invalidate nested :where().

      assert_equals: expected "rgb(0, 0, 255)" but got "rgb(0, 0, 0)"
      

  • OK /dom/nodes/attributes-namednodemap-cross-document.window.html
    • PASS [expected FAIL] subtest: Moving an attribute between documents
    • PASS [expected FAIL] subtest: Replacing an attribute across documents
  • OK /html/dom/elements/global-attributes/id-attribute.html
    • FAIL [expected PASS] subtest: After setting id via id attribute, CSS association is via the new ID.

      assert_equals: expected "4" but got "1"
      

    • FAIL [expected PASS] subtest: After setting id via setAttribute attribute, CSS association is via the new ID.

      assert_equals: expected "5" but got "1"
      

  • OK /html/rendering/bidi-rendering/unicode-bidi-ua-rules.html
    • FAIL [expected PASS] subtest: UA stylesheet rule for unicode-bidi, for <a>

      assert_equals: with dir=ltr expected "isolate" but got "normal"
      

    • FAIL [expected PASS] subtest: UA stylesheet rule for unicode-bidi, for <abbr>

      assert_equals: with dir=ltr expected "isolate" but got "normal"
      

    • FAIL [expected PASS] subtest: UA stylesheet rule for unicode-bidi, for <area>

      assert_equals: with dir=ltr expected "isolate" but got "normal"
      

    • FAIL [expected PASS] subtest: UA stylesheet rule for unicode-bidi, for <audio>

      assert_equals: with dir=ltr expected "isolate" but got "normal"
      

    • FAIL [expected PASS] subtest: UA stylesheet rule for unicode-bidi, for <b>

      assert_equals: with dir=ltr expected "isolate" but got "normal"
      

    • FAIL [expected PASS] subtest: UA stylesheet rule for unicode-bidi, for <base>

      assert_equals: with dir=ltr expected "isolate" but got "normal"
      

    • FAIL [expected PASS] subtest: UA stylesheet rule for unicode-bidi, for <br>

      assert_equals: with dir=ltr expected "isolate" but got "normal"
      

    • FAIL [expected PASS] subtest: UA stylesheet rule for unicode-bidi, for <button>

      assert_equals: with dir=ltr expected "isolate" but got "normal"
      

    • FAIL [expected PASS] subtest: UA stylesheet rule for unicode-bidi, for <canvas>

      assert_equals: with dir=ltr expected "isolate" but got "normal"
      

    • FAIL [expected PASS] subtest: UA stylesheet rule for unicode-bidi, for <cite>

      assert_equals: with dir=ltr expected "isolate" but got "normal"
      

    • And 69 more unexpected results...
  • OK /html/rendering/non-replaced-elements/tables/table-attribute.html
    • FAIL [expected PASS] subtest: table td align attribute center is correct

      assert_equals: expected "center" but got "start"
      

    • FAIL [expected PASS] subtest: table height attribute pixel is correct

      assert_equals: expected "180px" but got "179.983333333333px"
      

    • FAIL [expected PASS] subtest: table height attribute 90% is correct

      assert_equals: expected "180px" but got "179.983333333333px"
      

    • PASS [expected FAIL] subtest: table height attribute 110% is correct
  • OK /html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/min-inline-size.html
    • FAIL [expected PASS] subtest: horizontal-tb override

      assert_equals: width expected "5px" but got "100px"
      

  • OK /html/semantics/interactive-elements/the-dialog-element/dialog-open-2.html
    • FAIL [expected PASS] subtest: Tests that dialog is visible after show() is called and not visible after close() is called.

      assert_equals: expected "block" but got "none"
      

  • OK /resize-observer/fragments.html
    • FAIL [expected PASS] subtest: Removing 2nd fragment

      assert_unreached: Missing ResizeObserver notification Reached unreachable code
      

  • FAIL [expected PASS] /shadow-dom/invalidate-sibling-different-slots.html
  • OK /trusted-types/block-string-assignment-to-attribute-via-attribute-node.html
    • PASS [expected FAIL] subtest: Set script.src via nodeValue
    • PASS [expected FAIL] subtest: Set iframe.srcdoc via nodeValue
    • PASS [expected FAIL] subtest: Set div.onclick via nodeValue
  • OK /trusted-types/set-attributes-mutations-in-callback.tentative.html
    • PASS [expected FAIL] subtest: Attr.value works for elementNS=http://www.w3.org/1999/xhtml, element=DIV, attrName=onclick (delete other attribute before)
    • PASS [expected FAIL] subtest: Attr.value works for elementNS=http://www.w3.org/2000/svg, element=g, attrName=ondblclick (delete other attribute before)
    • PASS [expected FAIL] subtest: Attr.value works for elementNS=http://www.w3.org/1998/Math/MathML, element=mrow, attrName=onmousedown (delete other attribute before)
    • PASS [expected FAIL] subtest: Attr.value works for elementNS=http://www.w3.org/1999/xhtml, element=IFRAME, attrName=srcdoc (delete other attribute before)
    • PASS [expected FAIL] subtest: Attr.value works for elementNS=http://www.w3.org/1999/xhtml, element=SCRIPT, attrName=src (delete other attribute before)
    • PASS [expected FAIL] subtest: Attr.value works for elementNS=http://www.w3.org/2000/svg, element=script, attrName=href (delete other attribute before)
    • PASS [expected FAIL] subtest: Attr.value works for elementNS=http://www.w3.org/2000/svg, element=script, attrNS=http://www.w3.org/1999/xlink, attrName=href (delete other attribute before)
    • PASS [expected FAIL] subtest: Node.nodeValue works for elementNS=http://www.w3.org/1999/xhtml, element=DIV, attrName=onclick (delete other attribute before)
    • PASS [expected FAIL] subtest: Node.nodeValue works for elementNS=http://www.w3.org/2000/svg, element=g, attrName=ondblclick (delete other attribute before)
    • PASS [expected FAIL] subtest: Node.nodeValue works for elementNS=http://www.w3.org/1998/Math/MathML, element=mrow, attrName=onmousedown (delete other attribute before)
    • And 74 more unexpected results...
  • OK /trusted-types/set-attributes-require-trusted-types-default-policy.html
    • PASS [expected FAIL] subtest: Attr.value applies default policy for elementNS=http://www.w3.org/1999/xhtml, element=DIV, attrName=onclick
    • PASS [expected FAIL] subtest: Attr.value applies default policy for elementNS=http://www.w3.org/2000/svg, element=g, attrName=ondblclick
    • PASS [expected FAIL] subtest: Attr.value applies default policy for elementNS=http://www.w3.org/1998/Math/MathML, element=mrow, attrName=onmousedown
    • PASS [expected FAIL] subtest: Attr.value applies default policy for elementNS=http://www.w3.org/1999/xhtml, element=IFRAME, attrName=srcdoc
    • PASS [expected FAIL] subtest: Attr.value applies default policy for elementNS=http://www.w3.org/1999/xhtml, element=SCRIPT, attrName=src
    • PASS [expected FAIL] subtest: Attr.value applies default policy for elementNS=http://www.w3.org/2000/svg, element=script, attrName=href
    • PASS [expected FAIL] subtest: Attr.value applies default policy for elementNS=http://www.w3.org/2000/svg, element=script, attrNS=http://www.w3.org/1999/xlink, attrName=href
    • PASS [expected FAIL] subtest: Node.nodeValue applies default policy for elementNS=http://www.w3.org/1999/xhtml, element=DIV, attrName=onclick
    • PASS [expected FAIL] subtest: Node.nodeValue applies default policy for elementNS=http://www.w3.org/2000/svg, element=g, attrName=ondblclick
    • PASS [expected FAIL] subtest: Node.nodeValue applies default policy for elementNS=http://www.w3.org/1998/Math/MathML, element=mrow, attrName=onmousedown
    • And 32 more unexpected results...
  • OK /trusted-types/set-attributes-require-trusted-types-no-default-policy.html
    • PASS [expected FAIL] subtest: Attr.value throws for elementNS=http://www.w3.org/1999/xhtml, element=DIV, attrName=onclick with a plain string
    • PASS [expected FAIL] subtest: Attr.value throws for elementNS=http://www.w3.org/2000/svg, element=g, attrName=ondblclick with a plain string
    • PASS [expected FAIL] subtest: Attr.value throws for elementNS=http://www.w3.org/1998/Math/MathML, element=mrow, attrName=onmousedown with a plain string
    • PASS [expected FAIL] subtest: Attr.value throws for elementNS=http://www.w3.org/1999/xhtml, element=IFRAME, attrName=srcdoc with a plain string
    • PASS [expected FAIL] subtest: Attr.value throws for elementNS=http://www.w3.org/1999/xhtml, element=SCRIPT, attrName=src with a plain string
    • PASS [expected FAIL] subtest: Attr.value throws for elementNS=http://www.w3.org/2000/svg, element=script, attrName=href with a plain string
    • PASS [expected FAIL] subtest: Attr.value throws for elementNS=http://www.w3.org/2000/svg, element=script, attrNS=http://www.w3.org/1999/xlink, attrName=href with a plain string
    • PASS [expected FAIL] subtest: Node.nodeValue throws for elementNS=http://www.w3.org/1999/xhtml, element=DIV, attrName=onclick with a plain string
    • PASS [expected FAIL] subtest: Node.nodeValue throws for elementNS=http://www.w3.org/2000/svg, element=g, attrName=ondblclick with a plain string
    • PASS [expected FAIL] subtest: Node.nodeValue throws for elementNS=http://www.w3.org/1998/Math/MathML, element=mrow, attrName=onmousedown with a plain string
    • And 18 more unexpected results...

@github-actions
Copy link

⚠️ Try run (#17077138657) failed.

Additionally, several methods were updated with
spec comments. That's because the "adopt the document
from the element document" step was missing.

By adding these spec comments, I also restructured
some code to avoid duplication of mutation records
and custom element reaction queueing.

Node.textContent doesn't propagate the error yet,
as that method has a lot of separate callers of
elements that wouldn't fail. I will refactor those
in a follow-up PR to keep things manageable.

This implements part of the DOM integration from
whatwg/dom#1268

Part of servo#36258

Signed-off-by: Tim van der Lippe <[email protected]>
@TimvdLippe TimvdLippe force-pushed the trusted-types-set-attribute-node branch from 715ed43 to 4645cf7 Compare August 19, 2025 19:43
@TimvdLippe TimvdLippe changed the title Implement trusted types for setAttributeNode Implement trusted types for remaining attribute sinks Aug 19, 2025
@TimvdLippe TimvdLippe added the T-linux-wpt Do a try run of the WPT label Aug 19, 2025
@github-actions github-actions bot removed the T-linux-wpt Do a try run of the WPT label Aug 19, 2025
@github-actions
Copy link

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

@github-actions
Copy link

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

Flaky unexpected result (21)
  • OK /FileAPI/url/url-with-fetch.any.worker.html (#21517)
    • PASS [expected FAIL] subtest: Revoke blob URL after calling fetch, fetch should succeed
  • FAIL [expected PASS] /_mozilla/css/iframe/hide_and_show.html (#15265)
  • 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 ERROR] /_webgl/conformance2/textures/misc/tex-input-validation.html
  • FAIL [expected PASS] /css/CSS2/normal-flow/min-height-078.xht
  • FAIL [expected PASS] /css/WOFF2/metadatadisplay-schema-credit-001.xht
  • FAIL [expected PASS] /css/WOFF2/metadatadisplay-schema-extension-009.xht
  • OK /css/css-cascade/layer-cssom-order-reverse.html (#36094)
    • FAIL [expected PASS] subtest: Delete layer invalidates @font-face

      assert_equals: expected "220px" but got "133px"
      

  • OK /css/css-fonts/generic-family-keywords-001.html (#37467)
    • PASS [expected FAIL] subtest: @font-face matching for quoted and unquoted generic(khmer-mul)
    • PASS [expected FAIL] subtest: @font-face matching for quoted and unquoted generic(nastaliq)
  • OK /fetch/metadata/generated/css-font-face.https.sub.tentative.html (#32732)
    • PASS [expected FAIL] subtest: sec-fetch-dest
    • PASS [expected FAIL] subtest: sec-fetch-user
  • 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')
  • TIMEOUT [expected OK] /html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/form-submit-button-click.html (#28765)
    • TIMEOUT [expected FAIL] subtest: Replace before load, triggered by submitButton.click()

      Test timed out
      

  • OK /html/browsers/history/the-history-interface/traverse_the_history_5.html (#21383)
    • PASS [expected FAIL] subtest: Multiple history traversals, last would be aborted
  • PASS [expected FAIL] /html/canvas/element/manual/drawing-text-to-the-canvas/canvas.2d.disconnected-font-size-math.html (#30063)
  • TIMEOUT [expected OK] /html/interaction/focus/the-autofocus-attribute/document-with-fragment-nonexistent.html (#28259)
    • TIMEOUT [expected FAIL] subtest: Autofocus elements in top-level browsing context's documents with non-existent fragments should work.

      Test timed out
      

  • TIMEOUT [expected OK] /html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-2.html (#22154)
    • NOTRUN [expected FAIL] subtest: Check that popups from a sandboxed iframe do not escape the sandbox
  • TIMEOUT /preload/preload-resource-match.https.html (#38088)
    • TIMEOUT [expected FAIL] subtest: Loading script (use-credentials) with link (no-cors) should discard the preloaded response

      Test timed out
      

    • NOTRUN [expected TIMEOUT] subtest: Loading script (use-credentials) with link (anonymous) should discard the preloaded response
  • TIMEOUT [expected OK] /resource-timing/tentative/document-initiated.html (#37785)
  • FAIL [expected PASS] /shadow-dom/shadow-style-invalidation-vw-units.html (#38468)
  • TIMEOUT [expected CRASH] /trusted-types/trusted-types-navigation.html?06-10 (#37920)
    • TIMEOUT [expected FAIL] subtest: Navigate a frame via anchor with javascript:-urls w/ default policy in report-only mode.

      Test timed out
      

    • NOTRUN [expected FAIL] subtest: Navigate a window via anchor with javascript:-urls w/ a default policy throwing an exception in enforcing mode.
    • NOTRUN [expected FAIL] subtest: Navigate a window via anchor with javascript:-urls w/ a default policy throwing an exception in report-only mode.
  • TIMEOUT [expected OK] /webstorage/localstorage-about-blank-3P-iframe-opens-3P-window.partitioned.html (#29053)
    • TIMEOUT [expected PASS] subtest: StorageKey: test 3P about:blank window opened from a 3P iframe

      Test timed out
      

Stable unexpected results that are known to be intermittent (22)
  • OK /FileAPI/url/url-with-fetch.any.html (#21517)
    • FAIL [expected PASS] subtest: Revoke blob URL after calling fetch, fetch should succeed

      promise_test: Unhandled rejection with value: object "TypeError: Network error occurred"
      

  • FAIL [expected PASS] /_mozilla/css/stacked_layers.html (#15988)
  • FAIL [expected PASS] /_mozilla/mozilla/sslfail.html (#10760)
  • OK /content-security-policy/frame-ancestors/frame-ancestors-path-ignored.window.html (#36468)
    • FAIL [expected PASS] subtest: A 'frame-ancestors' CSP directive with a URL that includes a path should be ignored.

      assert_unreached: The IFrame should have been blocked (or cross-origin). It wasn't. Reached unreachable code
      

  • 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"
      

  • ERROR [expected TIMEOUT] /dom/abort/AbortSignal.https.any.shadowrealm-in-audioworklet.html (#38763)
  • ERROR [expected TIMEOUT] /dom/abort/event.https.any.shadowrealm-in-audioworklet.html (#38763)
  • TIMEOUT [expected FAIL] /dom/xslt/large-cdata.html (#38029)
  • OK /fetch/metadata/generated/css-font-face.sub.tentative.html (#34624)
    • PASS [expected FAIL] subtest: sec-fetch-storage-access - Not sent to non-trustworthy same-origin destination
    • FAIL [expected PASS] subtest: sec-fetch-storage-access - Not sent to non-trustworthy cross-site destination

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

  • OK /html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-same-origin-fragment.html (#20768)
    • FAIL [expected PASS] subtest: Tests that a fragment navigation in the unload handler will not block the initial navigation

      assert_equals: expected "" but got "#fragment"
      

  • OK /html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/a-click.html (#28697)
    • PASS [expected FAIL] subtest: aElement.click() before the load event must NOT replace
  • FAIL [expected PASS] /html/canvas/element/manual/text/canvas.2d.disconnected.html (#30063)
  • TIMEOUT [expected OK] /html/interaction/focus/the-autofocus-attribute/autofocus-dialog.html (#29087)
    • TIMEOUT [expected FAIL] subtest: &lt;dialog&gt;-contained autofocus element gets focused when the dialog is shown

      Test timed out
      

  • TIMEOUT /html/interaction/focus/the-autofocus-attribute/supported-elements.html (#24145)
    • TIMEOUT [expected FAIL] subtest: Element with tabindex should support autofocus

      Test timed out
      

    • NOTRUN [expected PASS] subtest: Non-HTMLElement should not support autofocus
  • TIMEOUT [expected OK] /html/interaction/focus/the-autofocus-attribute/update-the-rendering.html (#24145)
    • TIMEOUT [expected FAIL] subtest: "Flush autofocus candidates" should be happen before a scroll event and animation frame callbacks

      Test timed out
      

  • OK /html/semantics/embedded-content/the-iframe-element/iframe-loading-lazy-reload-location-reload.html (#32595)
    • FAIL [expected PASS] subtest: Reloading iframe loading='lazy' before it is loaded: location.reload

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

  • OK [expected TIMEOUT] /html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html (#22647)
    • FAIL [expected TIMEOUT] subtest: Check that popups from a sandboxed iframe escape the sandbox if allow-popups-to-escape-sandbox is used

      assert_equals: It came from a sandboxed iframe expected "null" but got "http://web-platform.test:8000"
      

  • CRASH [expected OK] /html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html (#24057)
  • OK /html/semantics/forms/form-submission-0/text-plain.window.html (#28687)
    • PASS [expected FAIL] subtest: text/plain: Basic test (normal form)
  • OK /navigation-timing/test-navigation-type-reload.html (#33334)
    • FAIL [expected PASS] subtest: Reload domComplete &gt; Original domComplete

      assert_true: Reload domComplete &gt; Original domComplete expected true got false
      

    • PASS [expected FAIL] subtest: Reload domContentLoadedEventEnd &gt; Original domContentLoadedEventEnd
    • FAIL [expected PASS] subtest: Reload loadEventEnd &gt; Original loadEventEnd

      assert_true: Reload loadEventEnd &gt; Original loadEventEnd expected true got false
      

    • FAIL [expected PASS] subtest: Reload loadEventStart &gt; Original loadEventStart

      assert_true: Reload loadEventStart &gt; Original loadEventStart expected true got false
      

  • OK /preload/preload-error.sub.html (#37177)
    • PASS [expected FAIL] subtest: success (style): main
    • FAIL [expected PASS] subtest: 404 (style): main

      assert_greater_than: http://web-platform.test:8000/preload/resources/dummy.css?pipe=status%28404%29&amp;label=style should be loaded expected a number greater than 0 but got 0
      

    • PASS [expected FAIL] subtest: CORS (style): main
    • FAIL [expected PASS] subtest: success (script): main

      assert_greater_than: http://web-platform.test:8000/preload/resources/dummy.js?label=script should be loaded expected a number greater than 0 but got 0
      

    • PASS [expected FAIL] subtest: 404 (script): main
    • PASS [expected FAIL] subtest: CORS (script): main
    • PASS [expected FAIL] subtest: success (xhr): main
    • PASS [expected FAIL] subtest: CORS (xhr): main
    • PASS [expected FAIL] subtest: Decode-error (script): main
  • ERROR /service-workers/idlharness.https.any.html (#36250)
    • TIMEOUT [expected PASS] subtest: ServiceWorkerContainer interface: operation register((TrustedScriptURL or USVString), optional RegistrationOptions)

      Test timed out
      

    • TIMEOUT [expected PASS] subtest: NavigationPreloadManager interface: operation enable()

      Test timed out
      

    • TIMEOUT [expected PASS] subtest: NavigationPreloadManager interface: operation disable()

      Test timed out
      

    • TIMEOUT [expected PASS] subtest: NavigationPreloadManager interface: operation setHeaderValue(ByteString)

      Test timed out
      

    • TIMEOUT [expected PASS] subtest: NavigationPreloadManager interface: operation getState()

      Test timed out
      

Stable unexpected results (1)
  • OK /dom/nodes/attributes-namednodemap-cross-document.window.html
    • PASS [expected FAIL] subtest: Moving an attribute between documents
    • PASS [expected FAIL] subtest: Replacing an attribute across documents

@github-actions
Copy link

⚠️ Try run (#17080100389) failed.

@TimvdLippe TimvdLippe requested a review from jdm August 20, 2025 09:31
Copy link
Member

@jdm jdm left a comment

Choose a reason for hiding this comment

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

This is great! Thank you for all the cleanup.

@jdm jdm added this pull request to the merge queue Aug 20, 2025
@github-merge-queue github-merge-queue bot removed this pull request from the merge queue due to failed status checks Aug 20, 2025
@TimvdLippe
Copy link
Contributor Author

Filtering 4 unexpected results for known intermittents via <https://intermittent-tracker.servo.org/dashboard/attempts>
HTTP Error 500: INTERNAL SERVER ERROR
[b'<!doctype html>\n', b'<html lang=en>\n', b'  <head>\n', b'    <title>sqlite3.OperationalError: database is locked\n', b' // Werkzeug

Failure in infrastructure?

@sagudev sagudev added this pull request to the merge queue Aug 21, 2025
Merged via the queue into servo:main with commit 3c89763 Aug 21, 2025
22 checks passed
@TimvdLippe TimvdLippe deleted the trusted-types-set-attribute-node branch November 7, 2025 09:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants