Skip to content

script: Fix render blocking stylesheet load fire ordering#41973

Merged
jdm merged 1 commit intoservo:mainfrom
TimvdLippe:fix-stylesheet-render-blocking
Jan 27, 2026
Merged

script: Fix render blocking stylesheet load fire ordering#41973
jdm merged 1 commit intoservo:mainfrom
TimvdLippe:fix-stylesheet-render-blocking

Conversation

@TimvdLippe
Copy link
Copy Markdown
Contributor

@TimvdLippe TimvdLippe commented Jan 17, 2026

While adding various spec comments to the parts of #the-end (which are scattered throughout the script crate), I stumbled upon the render blocking stylesheets implementation. There was a HTML PR to make clear when it should run and the corresponding WPT tests have been fixed.

Fixes #22715

@TimvdLippe TimvdLippe added the T-linux-wpt Do a try run of the WPT label Jan 17, 2026
@TimvdLippe TimvdLippe requested a review from gterzian as a code owner January 17, 2026 08:27
@servo-highfive servo-highfive added the S-awaiting-review There is new code that needs to be reviewed. label Jan 17, 2026
@github-actions github-actions bot removed the T-linux-wpt Do a try run of the WPT label Jan 17, 2026
@github-actions
Copy link
Copy Markdown

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

@github-actions
Copy link
Copy Markdown

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

Flaky unexpected result (41)
  • OK /FileAPI/file/send-file-form-punctuation.html
    • PASS [expected FAIL] subtest: Upload file-for-upload-in-form-LEFT-CURLY-BRACKET-[{].txt (ASCII) in UTF-8 form
  • 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()
  • PASS [expected FAIL] /_mozilla/css/linear_gradients_reverse_a.html
  • OK /_mozilla/webxr/create_session.https.html
    • FAIL [expected PASS] subtest: create_session

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

  • ERROR [expected TIMEOUT] /_mozilla/webxr/sessionavailable.https.html
  • FAIL [expected PASS] /css/css-backgrounds/background-size-041.html
  • 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 system-ui (drawing text in a canvas)
    • PASS [expected FAIL] subtest: @font-face matching for quoted and unquoted generic(fangsong) (drawing text in a canvas)
    • PASS [expected FAIL] subtest: @font-face matching for quoted and unquoted generic(kai) (drawing text in a canvas)
    • PASS [expected FAIL] subtest: @font-face matching for quoted and unquoted generic(nastaliq) (drawing text in a canvas)
  • CRASH [expected PASS] /css/css-overflow/scroll-marker-in-display-none-column-crash.html
  • OK /css/cssom-view/getBoundingClientRect-empty-inline.html (#41658)
    • FAIL [expected PASS] subtest: getBoundingClientRect-empty-inline

      assert_equals: y expected 92 but got 90.73333333333333
      

  • ERROR /fetch/metadata/generated/serviceworker.https.sub.html (#36247)
    • PASS [expected FAIL] subtest: sec-fetch-site - Same origin, no options - registration
  • OK [expected ERROR] /focus/focus-event-after-switching-iframes.sub.html (#40368)
  • 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/replace-before-load/a-click.html (#28697)
    • PASS [expected FAIL] subtest: aElement.click() before the load event must NOT replace
  • OK /html/browsers/windows/browsing-context-names/duplicate-name-order.html (#34623)
    • PASS [expected FAIL] subtest: Duplicate name lookup order
  • 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
      

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

    • PASS [expected FAIL] subtest: text/plain: Basic File test (formdata event)
    • PASS [expected FAIL] subtest: text/plain: \r\n in name (formdata event)
  • 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: single quote in value (formdata event)
  • 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 /navigation-timing/test-navigation-type-reload.html (#33334)
    • PASS [expected FAIL] subtest: Reload domComplete > Original domComplete
    • PASS [expected FAIL] subtest: Reload domContentLoadedEventEnd > Original domContentLoadedEventEnd
    • PASS [expected FAIL] subtest: Reload domContentLoadedEventStart > Original domContentLoadedEventStart
    • PASS [expected FAIL] subtest: Reload domInteractive > Original domInteractive
    • PASS [expected FAIL] subtest: Reload fetchStart > Original fetchStart
    • PASS [expected FAIL] subtest: Reload loadEventEnd > Original loadEventEnd
    • PASS [expected FAIL] subtest: Reload loadEventStart > Original loadEventStart
  • FAIL [expected PASS] /png/apng/fcTL-blend-source-nearly-transparent.html (#40915)
  • OK /resource-timing/buffer-full-add-then-clear.html (#40819)
    • PASS [expected FAIL] subtest: Test that if the buffer is cleared after entries were added to the secondary buffer, those entries make it into the primary one
  • ERROR [expected OK] /resource-timing/cors-preflight.any.html (#28694)
  • ERROR /service-workers/idlharness.https.any.html (#36250)
    • PASS [expected TIMEOUT] subtest: ServiceWorkerContainer interface: operation register((TrustedScriptURL or USVString), optional RegistrationOptions)
    • PASS [expected TIMEOUT] subtest: NavigationPreloadManager interface: operation enable()
    • PASS [expected TIMEOUT] subtest: NavigationPreloadManager interface: operation disable()
    • PASS [expected TIMEOUT] subtest: NavigationPreloadManager interface: operation setHeaderValue(ByteString)
    • PASS [expected TIMEOUT] subtest: NavigationPreloadManager interface: operation getState()
  • OK /touch-events/single-tap-when-touchend-listener-use-sync-xhr.html (#41175)
    • PASS [expected FAIL] subtest: Click event should be fired when touchend opens synchronous XHR
  • CRASH [expected OK] /trusted-types/TrustedTypePolicy-CSP-no-name.html
  • CRASH [expected OK] /trusted-types/should-trusted-type-policy-creation-be-blocked-by-csp-001.html
  • OK [expected TIMEOUT] /trusted-types/trusted-types-navigation.html?01-05 (#38975)
    • PASS [expected TIMEOUT] subtest: Navigate a window via anchor with javascript:-urls in report-only mode.
    • PASS [expected NOTRUN] subtest: Navigate a window via anchor with javascript:-urls w/ default policy in report-only mode.
    • PASS [expected NOTRUN] subtest: Navigate a frame via anchor with javascript:-urls in enforcing mode.
  • OK [expected 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.
    • PASS [expected TIMEOUT] subtest: Navigate a frame via anchor with javascript:-urls w/ default policy in report-only mode.
    • FAIL [expected NOTRUN] subtest: Navigate a window via anchor with javascript:-urls w/ a default policy throwing an exception in enforcing mode.

      promise_test: Unhandled rejection with value: "Unexpected message received: \"No securitypolicyviolation reported!\""
      

    • FAIL [expected NOTRUN] subtest: Navigate a window via anchor with javascript:-urls w/ a default policy throwing an exception in report-only mode.

      promise_test: Unhandled rejection with value: "Unexpected message received: \"No securitypolicyviolation reported!\""
      

  • TIMEOUT /trusted-types/trusted-types-navigation.html?31-35 (#38034)
    • TIMEOUT [expected PASS] subtest: Navigate a frame via form-submission with javascript:-urls in report-only mode.

      Test timed out
      

    • NOTRUN [expected TIMEOUT] subtest: Navigate a frame via form-submission with javascript:-urls w/ default policy in report-only mode.
  • CRASH [expected OK] /wasm/webapi/esm-integration/wasm-to-wasm-link-error.tentative.html
  • OK /webdriver/tests/classic/back/user_prompts.py
    • FAIL [expected PASS] subtest: test_accept[alert]

      AssertionError: assert 'about:blank' == 'https://web-platform.test:8443/webdriver/tests/support/inline.py?doc=%3C%21doctype+html%3E%0A%3Cmeta+charset%3DUTF-8%3E%0A%3Cp+id%3D1%3E&mime=text%2Fhtml&charset=UTF-8'
      

  • OK /webdriver/tests/classic/element_clear/clear.py
    • FAIL [expected PASS] subtest: test_null_response_value

      webdriver.error.NoSuchWindowException: no such window (404): No such window
      

  • OK /webdriver/tests/classic/execute_async_script/objects.py
    • FAIL [expected PASS] subtest: test_object

      AssertionError: no such window (404): No such window
      

  • OK /webdriver/tests/classic/execute_script/arguments.py
    • FAIL [expected PASS] subtest: test_null

      AssertionError: no such window (404): No such window
      

  • OK /webdriver/tests/classic/execute_script/collections.py
    • FAIL [expected PASS] subtest: test_arguments

      AssertionError: no such window (404): No such window
      

  • OK /webdriver/tests/classic/execute_script/cyclic.py
    • FAIL [expected PASS] subtest: test_collection_self_reference

      assert 404 == 500
      

  • OK /webdriver/tests/classic/get_current_url/file.py
    • FAIL [expected PASS] subtest: test_get_current_url_file_protocol

      AssertionError: no such window (404)
      

  • CRASH [expected OK] /workers/WorkerLocation_search_fragment.htm
Stable unexpected results that are known to be intermittent (41)
  • TIMEOUT /FileAPI/url/url-in-tags-revoke.window.html (#19978)
    • PASS [expected TIMEOUT] subtest: Fetching a blob URL immediately before revoking it works in <script> tags.
  • 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 /IndexedDB/transaction-deactivation-timing.any.worker.html (#38808)
    • PASS [expected FAIL] subtest: New transactions are deactivated before next task
    • PASS [expected FAIL] subtest: New transactions from microtask are deactivated before next task
  • OK /_mozilla/mozilla/getBoundingClientRect.html (#39668)
    • FAIL [expected PASS] subtest: getBoundingClientRect 1

      assert_equals: expected 62 but got 60.35
      

  • 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 /_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
    • PASS [expected FAIL] subtest: WebGL test #61
    • PASS [expected FAIL] subtest: WebGL test #63
    • PASS [expected FAIL] subtest: WebGL test #65
    • PASS [expected FAIL] subtest: WebGL test #67
  • OK /beacon/beacon-basic.https.window.html (#41723)
    • FAIL [expected PASS] subtest: Payload size restriction should be accumulated: type = arraybuffer

      assert_false: expected false got true
      

    • FAIL [expected PASS] subtest: Payload size restriction should be accumulated: type = blob

      assert_false: expected false got true
      

  • TIMEOUT /content-security-policy/inheritance/location-reload.html (#38983)
    • PASS [expected FAIL] subtest: location.reload() of empty iframe.
  • OK /css/css-fonts/generic-family-keywords-001.html (#37467)
    • PASS [expected FAIL] subtest: @font-face matching for quoted and unquoted generic(fangsong)
    • PASS [expected FAIL] subtest: @font-face matching for quoted and unquoted generic(kai)
    • PASS [expected FAIL] subtest: @font-face matching for quoted and unquoted generic(nastaliq)
  • 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 [expected OK] /fetch/fetch-later/quota/same-origin-iframe/multiple-iframes.https.window.html (#35176)
  • OK /fetch/metadata/generated/css-font-face.https.sub.tentative.html (#32732)
    • PASS [expected FAIL] subtest: sec-fetch-dest
  • 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-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/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_5.html (#21383)
    • FAIL [expected PASS] subtest: Multiple history traversals, last would be aborted

      assert_array_equals: Pages opened during history navigation expected property 1 to be 5 but got 3 (expected array [6, 5] got [6, 3])
      

  • CRASH [expected TIMEOUT] /html/browsers/history/the-location-interface/location_replace_session_history.html (#41896)
  • 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 /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
  • OK /html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/allow-scripts-flag-changing-1.html (#39694)
    • FAIL [expected PASS] subtest: Meta refresh is blocked by the allow-scripts sandbox flag at its creation time, not when refresh comes due

      uncaught exception: Error: assert_unreached: The iframe from which the meta came from must not refresh Reached unreachable code
      

  • TIMEOUT /html/semantics/embedded-content/media-elements/preserves-pitch.html (#40352)
    • PASS [expected TIMEOUT] subtest: Speed-ups should not change the pitch when preservesPitch=true
    • PASS [expected NOTRUN] subtest: Slow-downs should not change the pitch when preservesPitch=true
    • TIMEOUT [expected NOTRUN] subtest: Speed-ups should change the pitch when preservesPitch=false

      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 name (formdata event)
  • OK /html/semantics/scripting-1/the-script-element/execution-timing/077.html (#22139)
    • PASS [expected FAIL] subtest: adding several types of scripts through the DOM and removing some of them confuses scheduler
  • OK [expected ERROR] /html/user-activation/no-activation-thru-escape-key.html (#40343)
  • FAIL [expected PASS] /png/apng/acTL-plays-one.html (#41218)
  • CRASH [expected OK] /preload/preload-error.sub.html (#37177)
  • CRASH [expected OK] /preload/preload-resource-match.https.html (#38088)
  • TIMEOUT [expected OK] /resource-timing/nested-context-navigations-iframe.html (#24311)
    • TIMEOUT [expected PASS] subtest: Test that iframe navigations are not observable by the parent, even after history navigations by the parent

      Test timed out
      

    • NOTRUN [expected PASS] subtest: Test that crossorigin iframe navigations are not observable by the parent, even after history navigations by the parent
    • NOTRUN [expected PASS] subtest: Test that cross-site iframe navigations are not observable by the parent, even after history navigations by the parent
    • NOTRUN [expected PASS] subtest: Test that iframe navigations are not observable by the parent
    • NOTRUN [expected PASS] subtest: Test that crossorigin iframe navigations are not observable by the parent
    • NOTRUN [expected PASS] subtest: Test that cross-site iframe navigations are not observable by the parent
    • NOTRUN [expected PASS] subtest: Test that iframe refreshes are not observable by the parent
    • NOTRUN [expected PASS] subtest: Test that crossorigin iframe refreshes are not observable by the parent
    • NOTRUN [expected PASS] subtest: Test that cross-site iframe refreshes are not observable by the parent
  • CRASH [expected OK] /resource-timing/render-blocking-status-link.html (#41664)
  • CRASH [expected TIMEOUT] /resource-timing/test_resource_timing.html (#25720)
  • CRASH [expected TIMEOUT] /resource-timing/test_resource_timing.https.html (#25216)
  • 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
      

  • ERROR [expected OK] /webxr/render_state_update.https.html (#27535)
Stable unexpected results (108)
  • CRASH [expected OK] /_mozilla/css/import_serialization.html
  • CRASH [expected PASS] /_mozilla/css/link_style_dynamic_addition.html
  • CRASH [expected OK] /_mozilla/mozilla/link_rel_crash.html
  • CRASH [expected OK] /_mozilla/mozilla/out-of-order-stylesheet-loads-and-imports.html
  • CRASH [expected OK] /_mozilla/mozilla/out-of-order-stylesheet-loads.html
  • CRASH [expected OK] /content-security-policy/font-src/font-stylesheet-font-blocked.sub.html
  • CRASH [expected OK] /content-security-policy/reporting/report-and-enforce.html
  • TIMEOUT /content-security-policy/style-src/style-src-error-event-fires.html
    • NOTRUN [expected PASS] subtest: Test error event fires on stylesheet link
  • CRASH [expected OK] /content-security-policy/style-src/style-src-imported-style-allowed.sub.html
  • CRASH [expected OK] /content-security-policy/style-src/style-src-imported-style-blocked.html
  • CRASH [expected OK] /content-security-policy/style-src/style-src-injected-stylesheet-allowed.sub.html
  • CRASH [expected OK] /content-security-policy/style-src/style-src-injected-stylesheet-blocked.sub.html
  • CRASH [expected PASS] /css/CSS2/cascade-import/cascade-import-001.xht
  • CRASH [expected PASS] /css/CSS2/cascade-import/cascade-import-dynamic-002.xht
  • CRASH [expected PASS] /css/CSS2/cascade-import/cascade-import-dynamic-004.xht
  • CRASH [expected PASS] /css/CSS2/css1/c11-import-000.xht
  • CRASH [expected PASS] /css/css-backgrounds/background-image-shared-stylesheet.html
  • CRASH [expected PASS] /css/css-cascade/import-conditional-001.html
  • CRASH [expected PASS] /css/css-cascade/import-conditional-002.html
  • CRASH [expected OK] /css/css-cascade/layer-import.html
  • TIMEOUT [expected OK] /css/css-cascade/layer-media-query.html
    • TIMEOUT [expected FAIL] subtest: B1 Basic import

      Test timed out
      

    • NOTRUN [expected FAIL] subtest: B2 Basic import
    • NOTRUN [expected FAIL] subtest: C1 Reordering
    • NOTRUN [expected FAIL] subtest: C2 Reordering
    • NOTRUN [expected FAIL] subtest: C3 Reordering
    • NOTRUN [expected FAIL] subtest: C4 Reordering
  • TIMEOUT [expected OK] /css/css-cascade/layer-rules-cssom.html
    • TIMEOUT [expected PASS] subtest: Import into anonymous layer

      Test timed out
      

    • NOTRUN [expected PASS] subtest: Import into named layer
    • NOTRUN [expected PASS] subtest: Import without layer
  • CRASH [expected OK] /css/css-cascade/parsing/supports-import-parsing.html
  • CRASH [expected OK] /css/css-cascade/scope-implicit-external.html
  • CRASH [expected OK] /css/css-cascade/scope-import-multiple.tentative.html
  • CRASH [expected OK] /css/css-images/empty-background-image.html
  • CRASH [expected OK] /css/css-mixins/mixin-from-import-with-media-queries.html
  • CRASH [expected PASS] /css/css-namespaces/scope-002.xml
  • CRASH [expected OK] /css/css-values/viewport-units-after-font-load.html
  • CRASH [expected OK] /css/cssom/CSSStyleSheet-constructable-disallow-import.tentative.html
  • CRASH [expected OK] /css/cssom/CSSStyleSheet-constructable.html
  • TIMEOUT [expected OK] /css/cssom/HTMLLinkElement-disabled-001.html
    • TIMEOUT [expected FAIL] subtest: HTMLLinkElement.disabled reflects the <link disabled> attribute, and behaves consistently

      Test timed out
      

  • TIMEOUT [expected OK] /css/cssom/HTMLLinkElement-disabled-002.html
    • TIMEOUT [expected FAIL] subtest: HTMLLinkElement.disabled reflects the <link disabled> attribute, and behaves consistently, when the sheet is an alternate

      Test timed out
      

  • TIMEOUT [expected OK] /css/cssom/HTMLLinkElement-disabled-003.html
    • TIMEOUT [expected PASS] subtest: HTMLLinkElement.disabled's explicitly enabled state persists when disconnected and connected again

      Test timed out
      

  • CRASH [expected OK] /css/cssom/HTMLLinkElement-disabled-004.html
  • CRASH [expected OK] /css/cssom/HTMLLinkElement-disabled-006.html
  • CRASH [expected OK] /css/cssom/HTMLLinkElement-disabled-007.html
  • TIMEOUT [expected PASS] /css/cssom/HTMLLinkElement-disabled-alternate.html
  • CRASH [expected OK] /css/cssom/HTMLLinkElement-load-event-002.html
  • CRASH [expected OK] /css/cssom/cssimportrule-sheet-identity.html
  • CRASH [expected OK] /css/cssom/cssimportrule.html
  • CRASH [expected OK] /css/cssom/ttwf-cssom-doc-ext-load-count.html
  • CRASH [expected OK] /dom/nodes/insertion-removing-steps/Node-appendChild-script-and-style.tentative.html
  • CRASH [expected ERROR] /dom/nodes/moveBefore/preserve-render-blocking-style.html
  • CRASH [expected OK] /dom/nodes/moveBefore/style-applies.html
  • CRASH [expected OK] /fetch/metadata/style.https.sub.html
  • CRASH [expected OK] /fetch/nosniff/stylesheet.html
  • CRASH [expected OK] /fetch/stale-while-revalidate/stale-css.html
  • CRASH [expected OK] /html/document-isolation-policy/credentialless-link.https.tentative.window.html
  • CRASH [expected OK] /html/dom/render-blocking/remove-attr-unblocks-rendering.optional.html
  • CRASH [expected OK] /html/dom/render-blocking/remove-element-unblocks-rendering.optional.html
  • OK /html/dom/render-blocking/script-inserted-style-element.html
    • FAIL [expected PASS] subtest: Render-blocking stylesheet is applied

      promise_test: Unhandled rejection with value: object "[object Event]"
      

  • CRASH [expected OK] /html/dom/render-blocking/script-inserted-stylesheet-link.html
  • OK /html/links/stylesheet/quirk-origin-check-recursive-import.html
    • PASS [expected FAIL] subtest: Origin check for stylesheet with non-CSS MIME type quirk: recursive @import
  • CRASH [expected OK] /html/semantics/document-metadata/interactions-of-styling-and-scripting/dynamic-render-blocking-link-stylesheet-does-not-block-script.html
  • CRASH [expected OK] /html/semantics/document-metadata/interactions-of-styling-and-scripting/script-created-link-stylesheet-does-not-block-script.html
  • OK /html/semantics/document-metadata/the-link-element/link-error-fired-before-scripting-unblocked.html
    • FAIL [expected PASS] subtest: Check if the stylesheet's error event is fired before the pending parsing-blocking script is unblocked

      assert_true: The pending parsing-blocking script should only run after the last element that contributes a script-blocking style sheet's error event is fired if the sheet fails to load. expected true got false
      

  • CRASH [expected OK] /html/semantics/document-metadata/the-link-element/link-load-error-events.html
  • CRASH [expected OK] /html/semantics/document-metadata/the-link-element/link-load-error-events.https.html
  • OK /html/semantics/document-metadata/the-link-element/link-load-event.html
    • FAIL [expected PASS] subtest: Check if the stylesheet's load event blocks the document load event

      assert_true: expected true got false
      

  • OK /html/semantics/document-metadata/the-link-element/link-load-fired-before-scripting-unblocked.html
    • FAIL [expected PASS] subtest: Check if the stylesheet's load event is fired before the pending parsing-blocking script is unblocked

      assert_true: The pending parsing-blocking script should only run after the last element that contributes a script-blocking style sheet's load event is fired. expected true got false
      

  • CRASH [expected OK] /html/semantics/document-metadata/the-link-element/link-multiple-load-events.html
  • CRASH [expected OK] /html/semantics/document-metadata/the-link-element/link-rel-attribute.html
  • CRASH [expected OK] /html/semantics/document-metadata/the-link-element/link-style-error-01.html
  • CRASH [expected OK] /html/semantics/document-metadata/the-link-element/link-style-error-limited-quirks.html
  • CRASH [expected OK] /html/semantics/document-metadata/the-link-element/link-style-error-quirks.html
  • CRASH [expected OK] /html/semantics/document-metadata/the-link-element/stylesheet-bad-mime-type.html
  • FAIL [expected PASS] /html/semantics/document-metadata/the-link-element/stylesheet-change-href.html
  • CRASH [expected OK] /html/semantics/document-metadata/the-link-element/stylesheet-non-OK-status.html
  • OK [expected TIMEOUT] /html/semantics/document-metadata/the-style-element/style-error-01.html
    • PASS [expected TIMEOUT] subtest: Should get an error event for a text/plain response.
  • CRASH [expected OK] /html/semantics/document-metadata/the-style-element/style-load-after-mutate.html
  • TIMEOUT [expected OK] /html/semantics/document-metadata/the-style-element/style_events.html
    • NOTRUN [expected PASS] subtest: If the style is loaded unsuccessfully, the 'error' event must be fired
  • CRASH [expected PASS] /html/semantics/links/linktypes/alternate-css.html
  • CRASH [expected OK] /html/semantics/scripting-1/the-script-element/execution-timing/106-defer-import.html
  • CRASH [expected OK] /html/semantics/scripting-1/the-script-element/execution-timing/106-external-import.html
  • CRASH [expected OK] /html/semantics/scripting-1/the-script-element/execution-timing/106-external-module-import.html
  • CRASH [expected OK] /html/semantics/scripting-1/the-script-element/execution-timing/106-import-xhtml.xhtml
  • CRASH [expected OK] /html/semantics/scripting-1/the-script-element/execution-timing/106-import.html
  • CRASH [expected OK] /html/semantics/scripting-1/the-script-element/execution-timing/106-module-import.html
  • CRASH [expected OK] /html/semantics/scripting-1/the-script-element/execution-timing/107-import.html
  • CRASH [expected OK] /html/semantics/scripting-1/the-script-element/execution-timing/150-import-xhtml.xhtml
  • CRASH [expected OK] /html/semantics/scripting-1/the-script-element/execution-timing/150-import.html
  • CRASH [expected OK] /mixed-content/gen/top.http-rp/opt-in/link-css-tag.https.html
  • CRASH [expected OK] /mixed-content/gen/top.meta/opt-in/link-css-tag.https.html
  • CRASH [expected OK] /mixed-content/gen/top.meta/unset/link-css-tag.https.html
  • CRASH [expected OK] /preload/subresource-integrity.html
  • CRASH [expected OK] /referrer-policy/css-integration/child-css/external-import-stylesheet.html
  • CRASH [expected OK] /referrer-policy/css-integration/child-css/internal-import-stylesheet.html
  • CRASH [expected OK] /referrer-policy/css-integration/font-face/external-import-stylesheet.html
  • CRASH [expected OK] /referrer-policy/css-integration/font-face/external-stylesheet.html
  • CRASH [expected OK] /referrer-policy/css-integration/image/external-import-stylesheet.html
  • CRASH [expected OK] /referrer-policy/css-integration/image/external-stylesheet.html
  • CRASH [expected OK] /referrer-policy/css-integration/svg/external-stylesheet.html
  • CRASH [expected TIMEOUT] /resource-timing/content-type.html
  • CRASH [expected OK] /resource-timing/initiator-type/dynamic-insertion.html
  • CRASH [expected OK] /resource-timing/initiator-type/link.html
  • CRASH [expected OK] /resource-timing/link-sequence-of-events.html
  • CRASH [expected OK] /resource-timing/nextHopProtocol-is-tao-protected.https.html
  • CRASH [expected OK] /resource-timing/no-entries-for-cross-origin-css-fetched-memory-cache.sub.html
  • CRASH [expected OK] /resource-timing/no-entries-for-cross-origin-css-fetched.sub.html
  • CRASH [expected OK] /resource-timing/redirects.html
  • CRASH [expected TIMEOUT] /resource-timing/response-status-code.html
  • CRASH [expected OK] /resource-timing/tentative/initiator-url/external-script.html
  • CRASH [expected OK] /resource-timing/tentative/initiator-url/inline-script.html
  • CRASH [expected TIMEOUT] /resource-timing/tentative/stylesheet-initiated.html
  • CRASH [expected OK] /subresource-integrity/integrity-policy/style.https.html?reporting=false
  • CRASH [expected TIMEOUT] /subresource-integrity/integrity-policy/style.https.html?reporting=true
  • CRASH [expected OK] /subresource-integrity/subresource-integrity.html

@github-actions
Copy link
Copy Markdown

⚠️ Try run (#21091419278) failed!

mrobinson
mrobinson previously approved these changes Jan 17, 2026
Copy link
Copy Markdown
Member

@mrobinson mrobinson left a comment

Choose a reason for hiding this comment

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

Looks great. Just a few questions:

@servo-highfive servo-highfive removed the S-awaiting-review There is new code that needs to be reviewed. label Jan 17, 2026
@mrobinson mrobinson dismissed their stale review January 17, 2026 19:19

Noticed that tests were failing.

@mrobinson
Copy link
Copy Markdown
Member

I'm not surprised tests are failing as the order of things is very sensitive here. I think this is heading in the right direction though!

@TimvdLippe
Copy link
Copy Markdown
Contributor Author

Thanks for the review! I thought that it worked, at least locally it did. But then WPT came back a lot more red than I expected. I am landing some other cleanup fixes first, so that I can narrow down the core issue here. Marking it as draft for now until things stabilize.

@TimvdLippe TimvdLippe marked this pull request as draft January 18, 2026 19:19
@TimvdLippe TimvdLippe force-pushed the fix-stylesheet-render-blocking branch from 8421ab8 to 4499e1a Compare January 20, 2026 15:58
@TimvdLippe TimvdLippe added the T-linux-wpt Do a try run of the WPT label Jan 20, 2026
@github-actions github-actions bot removed the T-linux-wpt Do a try run of the WPT label Jan 20, 2026
@github-actions
Copy link
Copy Markdown

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

@github-actions
Copy link
Copy Markdown

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

Flaky unexpected result (39)
  • 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()
  • CRASH [expected PASS] /_mozilla/shadow-dom/move-element-with-ua-shadow-tree-crash.html (#39473)
  • 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"
      

  • ERROR [expected TIMEOUT] /_mozilla/webxr/sessionavailable.https.html
  • 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...
  • OK /beacon/beacon-basic.https.window.html (#41723)
    • FAIL [expected PASS] subtest: Payload size restriction should be accumulated: type = arraybuffer

      assert_false: expected false got true
      

  • FAIL [expected PASS] /css/css-backgrounds/background-size-042.html
  • OK /css/css-cascade/layer-cssom-order-reverse.html (#36094)
    • PASS [expected FAIL] subtest: Delete layer invalidates @font-face
  • CRASH [expected FAIL] /css/css-display/display-contents-dynamic-flex-002-inline.html
  • OK /css/css-fonts/generic-family-keywords-001.html (#37467)
    • PASS [expected FAIL] subtest: @font-face matching for quoted and unquoted generic(fangsong)
    • PASS [expected FAIL] subtest: @font-face matching for quoted and unquoted generic(kai)
    • 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)
  • CRASH [expected PASS] /css/css-grid/grid-items/grid-inline-items-001.html
  • CRASH [expected PASS] /css/css-overflow/scroll-marker-in-display-none-column-crash.html
  • OK [expected ERROR] /fetch/fetch-later/quota/same-origin-iframe/multiple-iframes.https.window.html (#35176)
  • 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/history/the-history-interface/traverse_the_history_2.html (#21383)
    • PASS [expected FAIL] subtest: Multiple history traversals, last would be aborted
  • CRASH [expected OK] /html/browsers/history/the-location-interface/no-browsing-context.window.html
  • 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
      

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

      assert_array_equals: animationFrame lengths differ, expected array ["autofocus", "scroll", "animationFrame"] length 3, got ["animationFrame"] length 1
      

  • TIMEOUT /html/semantics/embedded-content/media-elements/autoplay-disabled-by-feature-policy.https.sub.html (#41221)
    • FAIL [expected TIMEOUT] subtest: Feature-Policy header: autoplay "none" disallows same-origin iframes.

      assert_false: autoplay expected false got true
      

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

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

    • FAIL [expected PASS] subtest: multipart/form-data: Basic File test (normal form)

      assert_equals: expected "\r\nContent-Disposition: form-data; name=\"basic\"; filename=\"file-test.txt\"\r\nContent-Type: text/plain\r\n\r\n\r\n--\r\n" but got ""
      

    • PASS [expected FAIL] subtest: multipart/form-data: \n in value (formdata event)
    • PASS [expected FAIL] subtest: multipart/form-data: single quote in name (normal form)
  • OK /html/semantics/forms/form-submission-0/text-plain.window.html (#28687)
    • FAIL [expected PASS] subtest: text/plain: Basic File test (normal form)

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

    • PASS [expected FAIL] subtest: text/plain: Basic File test (formdata event)
    • PASS [expected FAIL] subtest: text/plain: 0x00 in value (formdata event)
    • PASS [expected FAIL] subtest: text/plain: backslash in filename (normal form)
  • TIMEOUT [expected OK] /html/semantics/scripting-1/the-script-element/execution-timing/028.html
  • TIMEOUT [expected OK] /html/syntax/speculative-parsing/generated/document-write/script-src-nomodule.tentative.sub.html
    • NOTRUN [expected PASS] subtest: Speculative parsing, document.write(): script-src-nomodule
  • CRASH [expected OK] /intersection-observer/v2/simple-effects.html
  • OK /preload/link-header-preload-delay-onload.html (#39622)
    • FAIL [expected PASS] subtest: Makes sure that Link headers preload resources and block window.onload after resource discovery

      assert_true: expected true got false
      

  • CRASH [expected ERROR] /trusted-types/SharedWorker-importScripts.html
  • CRASH [expected OK] /trusted-types/eval-csp-no-tt.html
  • TIMEOUT /trusted-types/trusted-types-navigation.html?26-30 (#38807)
    • PASS [expected TIMEOUT] subtest: Navigate a window via form-submission with javascript:-urls in report-only mode.
    • PASS [expected NOTRUN] subtest: Navigate a window via form-submission with javascript:-urls w/ default policy in report-only mode.
    • PASS [expected NOTRUN] subtest: Navigate a frame via form-submission with javascript:-urls in enforcing mode.
    • TIMEOUT [expected NOTRUN] subtest: Navigate a frame via form-submission with javascript:-urls w/ default policy in enforcing mode.

      Test timed out
      

  • OK [expected TIMEOUT] /trusted-types/trusted-types-navigation.html?31-35 (#38034)
    • PASS [expected TIMEOUT] subtest: Navigate a frame via form-submission with javascript:-urls w/ default policy in report-only mode.
    • FAIL [expected NOTRUN] subtest: Navigate a window via form-submission with javascript:-urls w/ a default policy throwing an exception in enforcing mode.

      promise_test: Unhandled rejection with value: "Unexpected message received: \"No securitypolicyviolation reported!\""
      

    • FAIL [expected NOTRUN] subtest: Navigate a window via form-submission with javascript:-urls w/ a default policy throwing an exception in report-only mode.

      promise_test: Unhandled rejection with value: "Unexpected message received: \"No securitypolicyviolation reported!\""
      

    • FAIL [expected NOTRUN] subtest: Navigate a window via form-submission with javascript:-urls w/ a default policy making the URL invalid in enforcing mode.

      promise_test: Unhandled rejection with value: "Unexpected message received: \"No securitypolicyviolation reported!\""
      

  • CRASH [expected OK] /trusted-types/trusted-types-reporting-for-Document-execCommand.html
  • CRASH [expected OK] /wasm/webapi/esm-integration/wasm-to-wasm-link-error.tentative.html
  • CRASH [expected OK] /wasm/webapi/esm-integration/worklet-import-source-phase.tentative.https.html
  • OK /webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html (#22849)
    • FAIL [expected PASS] subtest: buffer-stitching-2

      assert_approx_equals: Stitched sine‑wave buffers at sample rate 43800 sample[29934] |-2.4051022334139426e+36 - -0.8484253287315369| = 2.4051022334139426e+36 > 0.0038986 expected -0.8484253287315369 +/- 0.0038986 but got -2.4051022334139426e+36
      

  • OK /webdriver/tests/classic/dismiss_alert/dismiss.py (#39098)
    • FAIL [expected PASS] subtest: test_dismiss_in_popup_window

      AssertionError: no such alert (404): No user prompt is currently active.
      

  • 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 that are known to be intermittent (31)
  • TIMEOUT /FileAPI/url/url-in-tags-revoke.window.html (#19978)
    • PASS [expected TIMEOUT] subtest: Fetching a blob URL immediately before revoking it works in <script> tags.
  • 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 /IndexedDB/transaction-deactivation-timing.any.worker.html (#38808)
    • PASS [expected FAIL] subtest: New transactions are deactivated before next task
    • PASS [expected FAIL] subtest: New transactions from microtask are deactivated before next task
  • 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 /css/css-fonts/generic-family-keywords-002.html (#40929)
    • FAIL [expected PASS] subtest: font-family: -webkit-serif treated as <font-family>, not <generic-name>

      assert_equals: expected 30 but got 50
      

    • FAIL [expected PASS] subtest: font-family: -webkit-sans-serif treated as <font-family>, not <generic-name>

      assert_equals: expected 30 but got 50
      

    • FAIL [expected PASS] subtest: font-family: -webkit-cursive treated as <font-family>, not <generic-name>

      assert_equals: expected 30 but got 50
      

    • FAIL [expected PASS] subtest: font-family: -webkit-fantasy treated as <font-family>, not <generic-name>

      assert_equals: expected 30 but got 50
      

    • FAIL [expected PASS] subtest: font-family: -webkit-monospace treated as <font-family>, not <generic-name>

      assert_equals: expected 30 but got 50
      

    • FAIL [expected PASS] subtest: font-family: -webkit-system-ui treated as <font-family>, not <generic-name>

      assert_equals: expected 30 but got 50
      

    • FAIL [expected PASS] subtest: font-family: -webkit-math treated as <font-family>, not <generic-name>

      assert_equals: expected 30 but got 50
      

    • PASS [expected FAIL] subtest: font-family: -webkit-generic(fangsong) treated as <font-family>, not <generic-name>
    • PASS [expected FAIL] subtest: font-family: -webkit-generic(kai) treated as <font-family>, not <generic-name>
    • PASS [expected FAIL] subtest: font-family: -webkit-generic(khmer-mul) treated as <font-family>, not <generic-name>
    • And 12 more unexpected results...
  • OK /css/css-fonts/generic-family-keywords-003.html (#38994)
    • PASS [expected FAIL] subtest: @font-face matching for quoted and unquoted generic(khmer-mul) (drawing text in a canvas)
  • OK /fetch/metadata/generated/css-font-face.https.sub.tentative.html (#32732)
    • FAIL [expected PASS] subtest: sec-fetch-user

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

    • PASS [expected FAIL] subtest: sec-fetch-storage-access - Cross-site
  • 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-site destination
  • 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/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-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"
      

  • CRASH [expected TIMEOUT] /html/browsers/history/the-location-interface/location_replace_session_history.html (#41896)
  • 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
      

  • 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
      

  • ERROR [expected TIMEOUT] /html/semantics/links/links-created-by-a-and-area-elements/target_blank_implicit_noopener_base.html (#40347)
  • OK /mixed-content/tentative/autoupgrades/audio-upgrade.https.sub.html (#41697)
    • FAIL [expected PASS] subtest: Audio of other host autoupgraded

      assert_equals: Length of other host audio is correct expected 1 but got Infinity
      

  • OK /navigation-timing/test-navigation-type-reload.html (#33334)
    • PASS [expected FAIL] subtest: Reload domComplete > Original domComplete
    • PASS [expected FAIL] subtest: Reload domContentLoadedEventEnd > Original domContentLoadedEventEnd
    • PASS [expected FAIL] subtest: Reload loadEventEnd > Original loadEventEnd
    • PASS [expected FAIL] subtest: Reload loadEventStart > Original loadEventStart
  • FAIL [expected PASS] /png/apng/acTL-plays-one.html (#41218)
  • OK /preload/preload-error.sub.html (#37177)
    • FAIL [expected PASS] subtest: success (style): main

      promise_test: Unhandled rejection with value: object "TypeError: link rel=stylesheet onerror"
      

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

      promise_test: Unhandled rejection with value: object "TypeError: link rel=stylesheet onerror"
      

    • FAIL [expected PASS] subtest: CORS-error (style): main

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

    • FAIL [expected PASS] subtest: CSP-error (style): main

      assert_greater_than: http://web-platform.test:8000/common/redirect.py?location=http%3A%2F%2Fnot-web-platform.test%3A8001%2Fpreload%2Fresources%2Fdummy.css%3Fpipe%3Dheader%28Access-Control-Allow-Origin%2C*%29&label=style should be loaded expected a number greater than 0 but got 0
      

    • FAIL [expected PASS] subtest: Decode-error (style): main

      promise_test: Unhandled rejection with value: object "TypeError: link rel=stylesheet onerror"
      

    • PASS [expected FAIL] subtest: MIME-error (style): main
    • PASS [expected FAIL] subtest: MIME-blocked-nosniff (style): main
  • TIMEOUT [expected OK] /preload/preload-resource-match.https.html (#38088)
    • TIMEOUT [expected PASS] subtest: Loading style (same-origin) with link (same-origin) should reuse the preloaded response

      Test timed out
      

    • NOTRUN [expected PASS] subtest: Loading style (no-cors) with link (no-cors) should reuse the preloaded response
    • NOTRUN [expected PASS] subtest: Loading style (no-cors) with link (anonymous) should discard the preloaded response
    • NOTRUN [expected PASS] subtest: Loading style (no-cors) with link (use-credentials) should discard the preloaded response
    • NOTRUN [expected PASS] subtest: Loading style (anonymous) with link (no-cors) should discard the preloaded response
    • NOTRUN [expected PASS] subtest: Loading style (anonymous) with link (anonymous) should reuse the preloaded response
    • NOTRUN [expected PASS] subtest: Loading style (anonymous) with link (use-credentials) should discard the preloaded response
    • NOTRUN [expected PASS] subtest: Loading style (use-credentials) with link (no-cors) should discard the preloaded response
    • NOTRUN [expected PASS] subtest: Loading style (use-credentials) with link (anonymous) should discard the preloaded response
    • NOTRUN [expected PASS] subtest: Loading style (use-credentials) with link (use-credentials) should reuse the preloaded response
  • CRASH [expected OK] /resource-timing/render-blocking-status-link.html (#41664)
  • OK [expected TIMEOUT] /trusted-types/trusted-types-navigation.html?01-05 (#38975)
    • PASS [expected TIMEOUT] subtest: Navigate a window via anchor with javascript:-urls in report-only mode.
    • PASS [expected NOTRUN] subtest: Navigate a window via anchor with javascript:-urls w/ default policy in report-only mode.
    • PASS [expected NOTRUN] subtest: Navigate a frame via anchor with javascript:-urls in enforcing mode.
  • ERROR [expected OK] /webxr/render_state_update.https.html (#27535)
Stable unexpected results (67)
  • CRASH [expected OK] /_mozilla/css/import_serialization.html
  • CRASH [expected OK] /_mozilla/mozilla/out-of-order-stylesheet-loads-and-imports.html
  • TIMEOUT [expected PASS] /_mozilla/mozilla/stylesheet-adopt-panic.html
  • OK /content-security-policy/style-src/style-allowed.sub.html
    • FAIL [expected PASS] subtest: Expecting logs: ["PASS"]

      assert_unreached: FAIL Reached unreachable code
      

  • CRASH [expected OK] /content-security-policy/style-src/style-src-imported-style-allowed.sub.html
  • CRASH [expected OK] /content-security-policy/style-src/style-src-imported-style-blocked.html
  • CRASH [expected PASS] /css/CSS2/cascade-import/cascade-import-001.xht
  • CRASH [expected PASS] /css/CSS2/css1/c11-import-000.xht
  • CRASH [expected PASS] /css/css-cascade/import-conditional-001.html
  • CRASH [expected PASS] /css/css-cascade/import-conditional-002.html
  • OK /css/css-cascade/import-conditions.html
    • FAIL [expected PASS] subtest: supports(display:block) is a valid import condition

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

    • FAIL [expected PASS] subtest: supports((display:flex)) is a valid import condition

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

  • CRASH [expected OK] /css/css-cascade/layer-import.html
  • TIMEOUT [expected OK] /css/css-cascade/layer-media-query.html
    • TIMEOUT [expected FAIL] subtest: B1 Basic import

      Test timed out
      

    • NOTRUN [expected FAIL] subtest: B2 Basic import
    • NOTRUN [expected FAIL] subtest: C1 Reordering
    • NOTRUN [expected FAIL] subtest: C2 Reordering
    • NOTRUN [expected FAIL] subtest: C3 Reordering
    • NOTRUN [expected FAIL] subtest: C4 Reordering
  • TIMEOUT [expected OK] /css/css-cascade/layer-rules-cssom.html
    • TIMEOUT [expected PASS] subtest: Import into anonymous layer

      Test timed out
      

    • NOTRUN [expected PASS] subtest: Import into named layer
    • NOTRUN [expected PASS] subtest: Import without layer
  • CRASH [expected OK] /css/css-cascade/parsing/supports-import-parsing.html
  • TIMEOUT [expected OK] /css/css-cascade/scope-implicit-external.html
    • TIMEOUT [expected FAIL] subtest: @scope with external stylesheet through @import

      Test timed out
      

  • CRASH [expected OK] /css/css-cascade/scope-import-multiple.tentative.html
  • CRASH [expected OK] /css/css-images/empty-background-image.html
  • CRASH [expected OK] /css/css-mixins/mixin-from-import-with-media-queries.html
  • CRASH [expected PASS] /css/css-namespaces/scope-002.xml
  • OK /css/cssom/HTMLLinkElement-disabled-001.html
    • PASS [expected FAIL] subtest: <link disabled> prevents the stylesheet from being in document.styleSheets (from parser)
  • OK /css/cssom/HTMLLinkElement-disabled-004.html
    • FAIL [expected PASS] subtest: HTMLLinkElement.disabled's explicitly enabled state doesn't persist on clones

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

  • OK /css/cssom/HTMLLinkElement-disabled-006.html
    • FAIL [expected PASS] subtest: HTMLLinkElement.disabled setter does nothing if the attribute isn't present already.

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

  • CRASH [expected OK] /css/cssom/cssimportrule-sheet-identity.html
  • CRASH [expected OK] /css/cssom/cssimportrule.html
  • OK /css/cssom/link-element-stylesheet-title.html
    • FAIL [expected PASS] subtest: Executing setAttribute('title', '') results in the title being set to null

      can't access property "title", sheet is undefined
      

  • OK /css/cssom/stylesheet-same-origin.sub.html
    • FAIL [expected PASS] subtest: Origin-clean check in cross-origin CSSOM Stylesheets (redirect from same-origin to cross-origin)

      assert_throws_dom: stylesheet.cssRules should throw SecurityError. function "function () {
                          sheet.cssRules;
                      }" did not throw
      

  • OK /css/cssom/ttwf-cssom-doc-ext-load-count.html
    • FAIL [expected PASS] subtest: stylesheet.css should be loaded and styleSheets.length === 1

      assert_equals: styleSheets.length is incorrect: expected 1 but got 0
      

    • FAIL [expected PASS] subtest: stylesheet.css should be unloaded and styleSheets.length === 0

      can't access property "ownerNode", sheet is null
      

    • FAIL [expected PASS] subtest: stylesheet-1.css should be loaded and styleSheets.length === 1

      assert_equals: styleSheets.length is incorrect: expected 1 but got 0
      

  • OK /css/cssom/ttwf-cssom-doc-ext-load-tree-order.html
    • FAIL [expected PASS] subtest: styleSheets.length must be 5

      assert_equals: styleSheets.length is incorrect: expected 5 but got 1
      

  • ERROR [expected OK] /html/dom/render-blocking/remove-attr-unblocks-rendering.optional.html
    • FAIL [expected PASS] subtest: Loading of script-inserted inline style should eventually succeed

      promise_test: Unhandled rejection with value: object "[object Event]"
      

  • OK /html/dom/render-blocking/script-inserted-style-element.html
    • FAIL [expected PASS] subtest: Render-blocking stylesheet is applied

      promise_test: Unhandled rejection with value: object "[object Event]"
      

  • OK /html/links/stylesheet/quirk-origin-check-recursive-import.html
    • PASS [expected FAIL] subtest: Origin check for stylesheet with non-CSS MIME type quirk: recursive @import
  • OK /html/semantics/document-metadata/styling/LinkStyle.html
    • PASS [expected FAIL] subtest: The LinkStyle interface's sheet attribute must return StyleSheet object; the disabled attribute must be same as the StyleSheet's disabled attribute
  • OK /html/semantics/document-metadata/the-link-element/link-error-fired-before-scripting-unblocked.html
    • PASS [expected FAIL] subtest: Check if the stylesheet's error event is fired before the pending parsing-blocking script is unblocked
  • CRASH [expected OK] /html/semantics/document-metadata/the-link-element/link-load-error-events.html
  • CRASH [expected OK] /html/semantics/document-metadata/the-link-element/link-load-error-events.https.html
  • OK /html/semantics/document-metadata/the-link-element/link-load-fired-before-scripting-unblocked.html
    • PASS [expected FAIL] subtest: Check if the stylesheet's load event is fired before the pending parsing-blocking script is unblocked
  • CRASH [expected OK] /html/semantics/document-metadata/the-link-element/link-style-error-01.html
  • CRASH [expected OK] /html/semantics/document-metadata/the-link-element/link-style-error-limited-quirks.html
  • CRASH [expected OK] /html/semantics/document-metadata/the-link-element/link-style-error-quirks.html
  • OK /html/semantics/document-metadata/the-link-element/stylesheet-bad-mime-type.html
    • PASS [expected FAIL] subtest: 'load' event does not fire at link@rel=stylesheet having non-empty resource with bad MIME type
    • PASS [expected FAIL] subtest: 'load' event does not fire at link@rel=stylesheet having empty resource with bad MIME type
  • OK [expected TIMEOUT] /html/semantics/document-metadata/the-style-element/style-error-01.html
    • PASS [expected TIMEOUT] subtest: Should get an error event for a text/plain response.
  • CRASH [expected OK] /html/semantics/document-metadata/the-style-element/style-load-after-mutate.html
  • TIMEOUT [expected OK] /html/semantics/document-metadata/the-style-element/style_events.html
    • NOTRUN [expected PASS] subtest: If the style is loaded unsuccessfully, the 'error' event must be fired
  • CRASH [expected PASS] /html/semantics/links/linktypes/alternate-css.html
  • CRASH [expected OK] /html/semantics/scripting-1/the-script-element/execution-timing/106-defer-import.html
  • CRASH [expected OK] /html/semantics/scripting-1/the-script-element/execution-timing/106-external-import.html
  • CRASH [expected OK] /html/semantics/scripting-1/the-script-element/execution-timing/106-external-module-import.html
  • CRASH [expected OK] /html/semantics/scripting-1/the-script-element/execution-timing/106-import-xhtml.xhtml
  • CRASH [expected OK] /html/semantics/scripting-1/the-script-element/execution-timing/106-import.html
  • CRASH [expected OK] /html/semantics/scripting-1/the-script-element/execution-timing/106-module-import.html
  • CRASH [expected OK] /html/semantics/scripting-1/the-script-element/execution-timing/107-import.html
  • CRASH [expected OK] /html/semantics/scripting-1/the-script-element/execution-timing/150-import-xhtml.xhtml
  • CRASH [expected OK] /html/semantics/scripting-1/the-script-element/execution-timing/150-import.html
  • OK /preload/subresource-integrity.html
    • FAIL [expected PASS] subtest: Same-origin style with correct sha256 hash.

      assert_unreached: Valid subresource fired error handler. Reached unreachable code
      

    • FAIL [expected PASS] subtest: Same-origin style with correct sha384 hash.

      assert_unreached: Valid subresource fired error handler. Reached unreachable code
      

    • FAIL [expected PASS] subtest: Same-origin style with correct sha512 hash.

      assert_unreached: Valid subresource fired error handler. Reached unreachable code
      

    • FAIL [expected PASS] subtest: Same-origin style with empty integrity.

      assert_unreached: Valid subresource fired error handler. Reached unreachable code
      

    • FAIL [expected PASS] subtest: Same-origin style with incorrect hash.

      assert_equals: /subresource-integrity/style.css?5d9d608d-4e18-4b6b-a972-3b0b87581228 expected 1 but got 0
      

    • FAIL [expected PASS] subtest: Same-origin style with multiple sha256 hashes, including correct.

      assert_unreached: Valid subresource fired error handler. Reached unreachable code
      

    • FAIL [expected PASS] subtest: Same-origin style with multiple sha256 hashes, including unknown algorithm.

      assert_unreached: Valid subresource fired error handler. Reached unreachable code
      

    • FAIL [expected PASS] subtest: Same-origin style with sha256 mismatch, sha512 match

      assert_unreached: Valid subresource fired error handler. Reached unreachable code
      

    • FAIL [expected PASS] subtest: Same-origin style with sha256 match, sha512 mismatch

      assert_equals: /subresource-integrity/style.css?237f107e-b759-41c5-81e0-bc542e4110bd expected 1 but got 0
      

    • FAIL [expected PASS] subtest: <crossorigin='anonymous'> style with correct hash, ACAO: *

      assert_unreached: Valid subresource fired error handler. Reached unreachable code
      

    • And 11 more unexpected results...
  • CRASH [expected OK] /referrer-policy/css-integration/child-css/external-import-stylesheet.html
  • CRASH [expected OK] /referrer-policy/css-integration/child-css/internal-import-stylesheet.html
  • CRASH [expected OK] /referrer-policy/css-integration/font-face/external-import-stylesheet.html
  • CRASH [expected OK] /referrer-policy/css-integration/image/external-import-stylesheet.html
  • OK /resource-timing/initiator-type/dynamic-insertion.html
    • FAIL [expected PASS] subtest: A stylesheet should have the 'link' initiator type.

      promise_test: Unhandled rejection with value: object "TimeoutError: Timeout was reached before entry fired"
      

  • CRASH [expected OK] /resource-timing/initiator-type/link.html
  • CRASH [expected OK] /resource-timing/link-sequence-of-events.html
  • CRASH [expected OK] /resource-timing/no-entries-for-cross-origin-css-fetched-memory-cache.sub.html
  • CRASH [expected OK] /resource-timing/no-entries-for-cross-origin-css-fetched.sub.html
  • TIMEOUT [expected OK] /resource-timing/resource-timing-failed-fetch.html
    • TIMEOUT [expected PASS] subtest: Resource fetched by HTTP protocol should have resource timing entry emitted, even when the fetch failed.

      Test timed out
      

  • TIMEOUT /resource-timing/response-status-code.html
    • TIMEOUT [expected FAIL] subtest: This test validates the response status of resources. 80

      Test timed out
      

    • NOTRUN [expected FAIL] subtest: This test validates the response status of resources. 81
    • NOTRUN [expected FAIL] subtest: This test validates the response status of resources. 82
    • NOTRUN [expected FAIL] subtest: This test validates the response status of resources. 83
    • NOTRUN [expected FAIL] subtest: This test validates the response status of resources. 84
    • NOTRUN [expected FAIL] subtest: This test validates the response status of resources. 85
    • NOTRUN [expected FAIL] subtest: This test validates the response status of resources. 86
    • NOTRUN [expected FAIL] subtest: This test validates the response status of resources. 87
    • NOTRUN [expected FAIL] subtest: This test validates the response status of resources. 88
    • NOTRUN [expected TIMEOUT] subtest: This test validates the response status of resources. 89
  • CRASH [expected TIMEOUT] /resource-timing/tentative/stylesheet-initiated.html

@github-actions
Copy link
Copy Markdown

⚠️ Try run (#21178214061) failed!

@TimvdLippe TimvdLippe force-pushed the fix-stylesheet-render-blocking branch from 4499e1a to 7f7e322 Compare January 23, 2026 10:12
@TimvdLippe TimvdLippe added the T-linux-wpt Do a try run of the WPT label Jan 23, 2026
@github-actions github-actions bot removed the T-linux-wpt Do a try run of the WPT label Jan 23, 2026
@github-actions
Copy link
Copy Markdown

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

@servo-wpt-sync
Copy link
Copy Markdown
Collaborator

🤖 Opened new upstream WPT pull request (web-platform-tests/wpt#57306) 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#57306).

@github-actions
Copy link
Copy Markdown

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

Flaky unexpected result (29)
  • OK /IndexedDB/get-databases.any.worker.html
    • FAIL [expected PASS] subtest: Enumerate one database.

      promise_test: Unhandled rejection with value: object "Error: indexedDB.open should not succeed without creating a versionchange transaction"
      

    • FAIL [expected PASS] subtest: Make sure an empty list is returned for the case of no databases.

      promise_test: Unhandled rejection with value: object "Error: indexedDB.open should not succeed without creating a versionchange transaction"
      

  • 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()
  • CRASH [expected OK] /_webgl/conformance2/wasm/teximage2d-4gb-wasm-memory.html
  • OK /beacon/beacon-basic.https.window.html (#41723)
    • FAIL [expected PASS] subtest: Payload size restriction should be accumulated: type = blob

      assert_false: expected false got true
      

  • TIMEOUT /content-security-policy/inheritance/location-reload.html (#38983)
    • PASS [expected FAIL] subtest: location.reload() of empty iframe.
  • FAIL [expected PASS] /css/css-backgrounds/border-image-repeat-space-9.html
  • 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)
    • PASS [expected FAIL] subtest: @font-face matching for quoted and unquoted generic(kai) (drawing text in a canvas)
    • PASS [expected FAIL] subtest: @font-face matching for quoted and unquoted generic(nastaliq) (drawing text in a canvas)
    • PASS [expected FAIL] subtest: @font-face matching for quoted and unquoted ui-serif (drawing text in a canvas)
    • PASS [expected FAIL] subtest: @font-face matching for quoted and unquoted ui-sans-serif (drawing text in a canvas)
  • OK /custom-elements/form-associated/ElementInternals-setFormValue.html (#29174)
    • PASS [expected FAIL] subtest: Single value - empty name exists
    • PASS [expected FAIL] subtest: Single value - Non-empty name exists
  • 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/history/the-history-interface/traverse_the_history_4.html (#21383)
    • PASS [expected FAIL] subtest: Multiple history traversals, last would be aborted
  • CRASH [expected OK] /html/browsers/history/the-location-interface/assign-with-nested-iframe.html
  • CRASH [expected OK] /html/browsers/history/the-location-interface/assign_before_load.html
  • OK /html/browsers/windows/browsing-context-names/duplicate-name-order.html (#34623)
    • PASS [expected FAIL] subtest: Duplicate name lookup order
  • 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-location-replace-set-src.html (#32697)
    • PASS [expected FAIL] subtest: Navigating iframe loading='lazy' and then setting src: location.replace
  • 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 ""
      

    • FAIL [expected PASS] subtest: multipart/form-data: Basic File test (normal form)

      assert_equals: expected "\r\nContent-Disposition: form-data; name=\"basic\"; filename=\"file-test.txt\"\r\nContent-Type: text/plain\r\n\r\n\r\n--\r\n" but got ""
      

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

    • PASS [expected FAIL] subtest: application/x-www-form-urlencoded: 0x00 in value (normal form)
    • PASS [expected FAIL] subtest: application/x-www-form-urlencoded: 0x00 in filename (normal form)
    • PASS [expected FAIL] subtest: application/x-www-form-urlencoded: non-ASCII in filename (normal form)
    • PASS [expected FAIL] subtest: application/x-www-form-urlencoded: lone surrogate in name and value (normal form)
  • OK /html/semantics/scripting-1/the-script-element/module/dynamic-import/blob-url.any.worker.html (#33909)
    • FAIL [expected PASS] subtest: Revoking a blob URL immediately after calling import will not fail

      promise_test: Unhandled rejection with value: object "TypeError: Dynamic import failed"
      

  • OK [expected CRASH] /import-maps/multiple-import-maps/already-resolved-dropped.html
    • FAIL [expected PASS] subtest: Rules for already resolved modules are dropped

      promise_test: Unhandled rejection with value: object "TypeError: Wrong module specifier"
      

  • OK /mixed-content/tentative/autoupgrades/audio-upgrade.https.sub.html (#41697)
    • FAIL [expected PASS] subtest: Audio autoupgraded

      assert_equals: Length expected 1 but got Infinity
      

  • CRASH [expected OK] /resource-timing/render-blocking-status-link.html (#41664)
  • ERROR /service-workers/idlharness.https.any.html (#36250)
    • PASS [expected TIMEOUT] subtest: ServiceWorkerContainer interface: operation register((TrustedScriptURL or USVString), optional RegistrationOptions)
    • PASS [expected TIMEOUT] subtest: NavigationPreloadManager interface: operation enable()
    • PASS [expected TIMEOUT] subtest: NavigationPreloadManager interface: operation disable()
    • PASS [expected TIMEOUT] subtest: NavigationPreloadManager interface: operation setHeaderValue(ByteString)
    • PASS [expected TIMEOUT] subtest: NavigationPreloadManager interface: operation getState()
  • CRASH [expected OK] /trusted-types/block-string-assignment-to-ShadowRoot-setHTMLUnsafe.html
  • OK [expected TIMEOUT] /trusted-types/trusted-types-navigation.html?06-10 (#37920)
    • PASS [expected TIMEOUT] subtest: Navigate a frame via anchor with javascript:-urls w/ default policy in report-only mode.
    • FAIL [expected NOTRUN] subtest: Navigate a window via anchor with javascript:-urls w/ a default policy throwing an exception in enforcing mode.

      promise_test: Unhandled rejection with value: "Unexpected message received: \"No securitypolicyviolation reported!\""
      

    • FAIL [expected NOTRUN] subtest: Navigate a window via anchor with javascript:-urls w/ a default policy throwing an exception in report-only mode.

      promise_test: Unhandled rejection with value: "Unexpected message received: \"No securitypolicyviolation reported!\""
      

  • CRASH [expected OK] /webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer-reuse.html
Stable unexpected results that are known to be intermittent (36)
  • TIMEOUT /FileAPI/url/url-in-tags-revoke.window.html (#19978)
    • PASS [expected TIMEOUT] subtest: Fetching a blob URL immediately before revoking it works in <script> tags.
  • 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
      

  • 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...
  • 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.
  • OK /css/css-fonts/generic-family-keywords-001.html (#37467)
    • PASS [expected FAIL] subtest: @font-face matching for quoted and unquoted generic(kai)
    • PASS [expected FAIL] subtest: @font-face matching for quoted and unquoted generic(nastaliq)
  • 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
      

  • OK [expected ERROR] /fetch/fetch-later/quota/same-origin-iframe/multiple-iframes.https.window.html (#35176)
  • 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."
      

    • FAIL [expected PASS] subtest: sec-fetch-user

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

  • 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
    • PASS [expected FAIL] subtest: sec-fetch-storage-access - Not sent to non-trustworthy cross-site destination
  • OK [expected ERROR] /focus/focus-event-after-switching-iframes.sub.html (#40368)
  • 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_5.html (#21383)
    • FAIL [expected PASS] subtest: Multiple history traversals, last would be aborted

      assert_array_equals: Pages opened during history navigation expected property 1 to be 5 but got 3 (expected array [6, 5] got [6, 3])
      

  • CRASH [expected TIMEOUT] /html/browsers/history/the-location-interface/location_replace_session_history.html (#41896)
  • OK /html/browsers/windows/embedded-opener-remove-frame.html (#23867)
    • PASS [expected FAIL] subtest: opener of discarded auxiliary browsing context
  • 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
  • OK [expected TIMEOUT] /html/semantics/embedded-content/media-elements/autoplay-default-feature-policy.https.sub.html (#41193)
    • PASS [expected TIMEOUT] subtest: Default "autoplay" feature policy ["self"] allows the top-level document.
    • PASS [expected TIMEOUT] subtest: Default "autoplay" feature policy ["self"] allows same-origin iframes.
  • TIMEOUT /html/semantics/embedded-content/media-elements/autoplay-disabled-by-feature-policy.https.sub.html (#41221)
    • PASS [expected TIMEOUT] subtest: Feature-Policy header: autoplay "none" has no effect on the top level document.
  • OK [expected ERROR] /html/user-activation/no-activation-thru-escape-key.html (#40343)
  • OK /navigation-timing/test-navigation-type-reload.html (#33334)
    • PASS [expected FAIL] subtest: Reload domComplete > Original domComplete
    • PASS [expected FAIL] subtest: Reload domContentLoadedEventEnd > Original domContentLoadedEventEnd
    • PASS [expected FAIL] subtest: Reload domContentLoadedEventStart > Original domContentLoadedEventStart
    • PASS [expected FAIL] subtest: Reload domInteractive > Original domInteractive
    • PASS [expected FAIL] subtest: Reload fetchStart > Original fetchStart
    • PASS [expected FAIL] subtest: Reload loadEventEnd > Original loadEventEnd
    • PASS [expected FAIL] subtest: Reload loadEventStart > Original loadEventStart
  • FAIL [expected PASS] /png/apng/acTL-plays-one.html (#41218)
  • OK /preload/prefetch-document.html (#37210)
    • PASS [expected FAIL] subtest: different-site document prefetch with 'as=document' should not be consumed
  • OK [expected TIMEOUT] /resource-timing/test_resource_timing.html (#25720)
    • FAIL [expected PASS] subtest: PerformanceEntry has correct name, initiatorType, startTime, and duration (img)

      assert_equals: expected 6.66 but got 6.65
      

    • PASS [expected TIMEOUT] subtest: window.performance.getEntriesByName() and window.performance.getEntriesByNameType() return same data (link)
    • FAIL [expected NOTRUN] subtest: PerformanceEntry has correct name, initiatorType, startTime, and duration (link)

      assert_equals: expected 5.759999999999998 but got 5.76
      

    • FAIL [expected NOTRUN] subtest: PerformanceEntry has correct order of timing attributes (link)

      assert_greater_than_equal: domainLookupEnd after domainLookupStart expected a number greater than or equal to 23.17 but got 0
      

    • FAIL [expected NOTRUN] subtest: PerformanceEntry has correct network transfer attributes (link)

      assert_equals: encodedBodySize size expected 44 but got 0
      

    • FAIL [expected NOTRUN] subtest: PerformanceEntry has correct protocol attribute (link)

      assert_equals: expected protocol expected "http/1.1" but got ""
      

  • OK [expected TIMEOUT] /resource-timing/test_resource_timing.https.html (#25216)
    • PASS [expected TIMEOUT] subtest: window.performance.getEntriesByName() and window.performance.getEntriesByNameType() return same data (link)
    • FAIL [expected NOTRUN] subtest: PerformanceEntry has correct name, initiatorType, startTime, and duration (link)

      assert_equals: expected 4.02 but got 4.01
      

    • FAIL [expected NOTRUN] subtest: PerformanceEntry has correct order of timing attributes (link)

      assert_greater_than_equal: domainLookupEnd after domainLookupStart expected a number greater than or equal to 16.4 but got 0
      

    • FAIL [expected NOTRUN] subtest: PerformanceEntry has correct network transfer attributes (link)

      assert_equals: encodedBodySize size expected 44 but got 0
      

    • FAIL [expected NOTRUN] subtest: PerformanceEntry has correct protocol attribute (link)

      assert_equals: expected protocol expected "http/1.1" but got ""
      

  • OK [expected TIMEOUT] /trusted-types/trusted-types-navigation.html?31-35 (#38034)
    • PASS [expected TIMEOUT] subtest: Navigate a frame via form-submission with javascript:-urls w/ default policy in report-only mode.
    • FAIL [expected NOTRUN] subtest: Navigate a window via form-submission with javascript:-urls w/ a default policy throwing an exception in enforcing mode.

      promise_test: Unhandled rejection with value: "Unexpected message received: \"No securitypolicyviolation reported!\""
      

    • FAIL [expected NOTRUN] subtest: Navigate a window via form-submission with javascript:-urls w/ a default policy throwing an exception in report-only mode.

      promise_test: Unhandled rejection with value: "Unexpected message received: \"No securitypolicyviolation reported!\""
      

    • FAIL [expected NOTRUN] subtest: Navigate a window via form-submission with javascript:-urls w/ a default policy making the URL invalid in enforcing mode.

      promise_test: Unhandled rejection with value: "Unexpected message received: \"No securitypolicyviolation reported!\""
      

  • OK /webdriver/tests/classic/dismiss_alert/dismiss.py (#39098)
    • FAIL [expected PASS] subtest: test_dismiss_in_popup_window

      AssertionError: no such alert (404): No user prompt is currently active.
      

  • 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 (5)
  • OK /css/cssom/HTMLLinkElement-disabled-001.html
    • PASS [expected FAIL] subtest: <link disabled> prevents the stylesheet from being in document.styleSheets (from parser)
  • OK /css/cssom/HTMLLinkElement-disabled-004.html
    • FAIL [expected PASS] subtest: HTMLLinkElement.disabled's explicitly enabled state doesn't persist on clones

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

  • OK /css/cssom/HTMLLinkElement-disabled-006.html
    • FAIL [expected PASS] subtest: HTMLLinkElement.disabled setter does nothing if the attribute isn't present already.

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

  • OK /html/semantics/document-metadata/styling/LinkStyle.html
    • PASS [expected FAIL] subtest: The LinkStyle interface's sheet attribute must return StyleSheet object; the disabled attribute must be same as the StyleSheet's disabled attribute
  • FAIL [expected PASS] /html/semantics/links/linktypes/alternate-css.html

@github-actions
Copy link
Copy Markdown

⚠️ Try run (#21282564517) failed!

@TimvdLippe TimvdLippe force-pushed the fix-stylesheet-render-blocking branch from a53b491 to 06d7048 Compare January 23, 2026 19:13
@TimvdLippe TimvdLippe added the T-linux-wpt Do a try run of the WPT label Jan 23, 2026
@github-actions github-actions bot removed the T-linux-wpt Do a try run of the WPT label Jan 23, 2026
@github-actions
Copy link
Copy Markdown

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

@servo-wpt-sync
Copy link
Copy Markdown
Collaborator

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

@github-actions
Copy link
Copy Markdown

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

Flaky unexpected result (34)
  • TIMEOUT /FileAPI/url/url-in-tags-revoke.window.html (#19978)
    • PASS [expected TIMEOUT] subtest: Fetching a blob URL immediately before revoking it works in <script> tags.
  • OK /IndexedDB/get-databases.any.html
    • FAIL [expected PASS] subtest: Enumerate one database.

      promise_test: Unhandled rejection with value: object "Error: indexedDB.open should not succeed without creating a versionchange transaction"
      

    • FAIL [expected PASS] subtest: Make sure an empty list is returned for the case of no databases.

      promise_test: Unhandled rejection with value: object "Error: indexedDB.open should not succeed without creating a versionchange transaction"
      

  • 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/mozilla/getBoundingClientRect.html (#39668)
    • FAIL [expected PASS] subtest: getBoundingClientRect 1

      assert_equals: expected 62 but got 60.35
      

  • 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...
  • 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.
  • OK /css/CSS2/linebox/vertical-align-top-bottom-001.html (#41015)
    • FAIL [expected PASS] subtest: text-top+

      assert_approx_equals: expected "44" +/- 0 but got 41
      

    • FAIL [expected PASS] subtest: text-top+top

      assert_approx_equals: expected "5" +/- 0 but got 3
      

    • FAIL [expected PASS] subtest: text-top+text-top

      assert_approx_equals: expected "5" +/- 0 but got 3
      

    • FAIL [expected PASS] subtest: text-top+text-bottom

      assert_approx_equals: expected "40" +/- 0 but got 37
      

    • FAIL [expected PASS] subtest: text-bottom+

      assert_approx_equals: expected "44" +/- 0 but got 45
      

    • FAIL [expected PASS] subtest: text-bottom+top

      assert_approx_equals: expected "5" +/- 0 but got 7
      

    • FAIL [expected PASS] subtest: text-bottom+text-top

      assert_approx_equals: expected "5" +/- 0 but got 7
      

    • FAIL [expected PASS] subtest: bottom+

      assert_approx_equals: expected "49" +/- 0 but got 48
      

    • FAIL [expected PASS] subtest: bottom+text-top

      assert_approx_equals: expected "45" +/- 0 but got 43
      

    • FAIL [expected PASS] subtest: bottom+text-bottom

      assert_approx_equals: expected "45" +/- 0 but got 44
      

  • FAIL [expected PASS] /css/css-backgrounds/border-image-repeat-space-9.html
  • OK /css/css-fonts/generic-family-keywords-002.html (#40929)
    • FAIL [expected PASS] subtest: font-family: -webkit-serif treated as <font-family>, not <generic-name>

      assert_equals: expected 30 but got 50
      

    • FAIL [expected PASS] subtest: font-family: -webkit-sans-serif treated as <font-family>, not <generic-name>

      assert_equals: expected 30 but got 50
      

    • FAIL [expected PASS] subtest: font-family: -webkit-cursive treated as <font-family>, not <generic-name>

      assert_equals: expected 30 but got 50
      

    • FAIL [expected PASS] subtest: font-family: -webkit-fantasy treated as <font-family>, not <generic-name>

      assert_equals: expected 30 but got 50
      

    • FAIL [expected PASS] subtest: font-family: -webkit-monospace treated as <font-family>, not <generic-name>

      assert_equals: expected 30 but got 50
      

    • FAIL [expected PASS] subtest: font-family: -webkit-system-ui treated as <font-family>, not <generic-name>

      assert_equals: expected 30 but got 50
      

    • FAIL [expected PASS] subtest: font-family: -webkit-math treated as <font-family>, not <generic-name>

      assert_equals: expected 30 but got 50
      

    • PASS [expected FAIL] subtest: font-family: -webkit-generic(fangsong) treated as <font-family>, not <generic-name>
    • PASS [expected FAIL] subtest: font-family: -webkit-generic(kai) treated as <font-family>, not <generic-name>
    • PASS [expected FAIL] subtest: font-family: -webkit-generic(khmer-mul) treated as <font-family>, not <generic-name>
    • And 12 more unexpected results...
  • OK /css/css-fonts/generic-family-keywords-003.html (#38994)
    • PASS [expected FAIL] subtest: @font-face matching for quoted and unquoted cursive (drawing text in a canvas)
    • 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)
    • PASS [expected FAIL] subtest: @font-face matching for quoted and unquoted math (drawing text in a canvas)
    • PASS [expected FAIL] subtest: @font-face matching for quoted and unquoted generic(kai) (drawing text in a canvas)
  • 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-site destination
  • ERROR /fetch/metadata/generated/serviceworker.https.sub.html (#36247)
    • PASS [expected FAIL] subtest: sec-fetch-site - Same origin, no options - registration
  • CRASH [expected OK] /html/browsers/browsing-the-web/navigating-across-documents/005.html (#27062)
  • OK /html/browsers/history/the-history-interface/traverse_the_history_3.html (#21383)
    • PASS [expected FAIL] subtest: Multiple history traversals, last would be aborted
  • CRASH [expected OK] /html/browsers/history/the-location-interface/location_hash.html
  • CRASH [expected TIMEOUT] /html/browsers/history/the-location-interface/location_replace_session_history.html (#41896)
  • 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
      

  • TIMEOUT /html/semantics/embedded-content/media-elements/autoplay-disabled-by-feature-policy.https.sub.html (#41221)
    • FAIL [expected TIMEOUT] subtest: Feature-Policy header: autoplay "none" disallows same-origin iframes.

      assert_false: autoplay expected false got true
      

  • 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-location-replace.html (#32604)
    • FAIL [expected PASS] subtest: Navigating iframe loading='lazy' before it is loaded: location.replace

      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 File test (normal form)

      assert_equals: expected "\r\nContent-Disposition: form-data; name=\"basic\"; filename=\"file-test.txt\"\r\nContent-Type: text/plain\r\n\r\n\r\n--\r\n" but got ""
      

    • PASS [expected FAIL] subtest: multipart/form-data: 0x00 in name (normal form)
    • PASS [expected FAIL] subtest: multipart/form-data: 0x00 in value (formdata event)
    • PASS [expected FAIL] subtest: multipart/form-data: \n in value (formdata event)
    • PASS [expected FAIL] subtest: multipart/form-data: backslash in name (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 ""
      

    • PASS [expected FAIL] subtest: text/plain: double quote in value (normal form)
  • OK /html/semantics/forms/form-submission-0/urlencoded2.window.html (#28687)
    • 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: Basic File test (formdata event)
    • PASS [expected FAIL] subtest: application/x-www-form-urlencoded: \r\n in filename (normal form)
  • FAIL [expected ERROR] /html/semantics/forms/the-select-element/customizable-select/select-appearance-button-after-span.html
  • OK [expected ERROR] /html/user-activation/no-activation-thru-escape-key.html (#40343)
  • PASS [expected FAIL] /png/apng/acTL-plays-two.html (#41191)
  • OK /resource-timing/buffer-full-add-then-clear.html (#40819)
    • PASS [expected FAIL] subtest: Test that if the buffer is cleared after entries were added to the secondary buffer, those entries make it into the primary one
  • CRASH [expected OK] /trusted-types/TrustedType-AttributeNodes.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 OK] /wasm/serialization/module/window-similar-but-cross-origin-success.sub.html
  • CRASH [expected TIMEOUT] /wasm/webapi/esm-integration/js-wasm-cycle.tentative.html
  • ERROR [expected OK] /workers/baseurl/alpha/sharedworker-in-worker.html (#21315)
Stable unexpected results that are known to be intermittent (32)
  • 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 /IndexedDB/transaction-deactivation-timing.any.html (#38772)
    • PASS [expected FAIL] subtest: New transactions are deactivated before next task
    • PASS [expected FAIL] subtest: New transactions from microtask are deactivated before next task
  • OK /IndexedDB/transaction-deactivation-timing.any.worker.html (#38808)
    • PASS [expected FAIL] subtest: New transactions are deactivated before next task
    • PASS [expected FAIL] subtest: New transactions from microtask are deactivated before next task
  • 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 /css/css-cascade/layer-cssom-order-reverse.html (#36094)
    • PASS [expected FAIL] subtest: Delete layer invalidates @font-face
  • 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"
      

  • 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
      

  • OK [expected ERROR] /fetch/fetch-later/quota/same-origin-iframe/accumulated-oversized-payload.https.window.html (#41705)
  • OK [expected ERROR] /fetch/fetch-later/quota/same-origin-iframe/multiple-iframes.https.window.html (#35176)
  • 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 [expected ERROR] /focus/focus-event-after-switching-iframes.sub.html (#40368)
  • 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/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
  • 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 /html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy.https.sub.html (#41404)
    • PASS [expected TIMEOUT] subtest: Feature-Policy header: autoplay * allows same-origin iframes.
  • OK [expected TIMEOUT] /html/semantics/embedded-content/media-elements/autoplay-default-feature-policy.https.sub.html (#41193)
    • PASS [expected TIMEOUT] subtest: Default "autoplay" feature policy ["self"] allows the top-level document.
    • PASS [expected TIMEOUT] subtest: Default "autoplay" feature policy ["self"] allows same-origin iframes.
  • ERROR [expected TIMEOUT] /html/semantics/links/links-created-by-a-and-area-elements/target_blank_implicit_noopener_base.html (#40347)
  • OK /mixed-content/tentative/autoupgrades/video-upgrade.https.sub.html (#41135)
    • FAIL [expected PASS] subtest: Video autoupgraded

      assert_equals: Length. expected 1 but got Infinity
      

  • FAIL [expected PASS] /png/apng/acTL-plays-one.html (#41218)
  • OK /preload/prefetch-document.html (#37210)
    • PASS [expected FAIL] subtest: different-site document prefetch with 'as=document' should not be consumed
  • OK [expected TIMEOUT] /resource-timing/test_resource_timing.html (#25720)
    • FAIL [expected PASS] subtest: PerformanceEntry has correct name, initiatorType, startTime, and duration (img)

      assert_equals: expected 3.6899999999999995 but got 3.69
      

    • PASS [expected TIMEOUT] subtest: window.performance.getEntriesByName() and window.performance.getEntriesByNameType() return same data (link)
    • FAIL [expected NOTRUN] subtest: PerformanceEntry has correct name, initiatorType, startTime, and duration (link)

      assert_equals: expected 4.460000000000001 but got 4.45
      

    • FAIL [expected NOTRUN] subtest: PerformanceEntry has correct order of timing attributes (link)

      assert_greater_than_equal: domainLookupEnd after domainLookupStart expected a number greater than or equal to 13.14 but got 0
      

    • FAIL [expected NOTRUN] subtest: PerformanceEntry has correct network transfer attributes (link)

      assert_equals: encodedBodySize size expected 44 but got 0
      

    • FAIL [expected NOTRUN] subtest: PerformanceEntry has correct protocol attribute (link)

      assert_equals: expected protocol expected "http/1.1" but got ""
      

  • OK [expected TIMEOUT] /resource-timing/test_resource_timing.https.html (#25216)
    • PASS [expected TIMEOUT] subtest: window.performance.getEntriesByName() and window.performance.getEntriesByNameType() return same data (link)
    • FAIL [expected NOTRUN] subtest: PerformanceEntry has correct name, initiatorType, startTime, and duration (link)

      assert_equals: expected 5.760000000000002 but got 5.75
      

    • FAIL [expected NOTRUN] subtest: PerformanceEntry has correct order of timing attributes (link)

      assert_greater_than_equal: domainLookupEnd after domainLookupStart expected a number greater than or equal to 29.37 but got 0
      

    • FAIL [expected NOTRUN] subtest: PerformanceEntry has correct network transfer attributes (link)

      assert_equals: encodedBodySize size expected 44 but got 0
      

    • FAIL [expected NOTRUN] subtest: PerformanceEntry has correct protocol attribute (link)

      assert_equals: expected protocol expected "http/1.1" but got ""
      

  • 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

@github-actions
Copy link
Copy Markdown

✨ Try run (#21298115921) succeeded.

@TimvdLippe TimvdLippe marked this pull request as ready for review January 24, 2026 06:51
@servo-highfive servo-highfive added the S-awaiting-review There is new code that needs to be reviewed. label Jan 24, 2026
@TimvdLippe TimvdLippe requested a review from mrobinson January 24, 2026 06:51
@TimvdLippe
Copy link
Copy Markdown
Contributor Author

Built on top of the other two PRs. Lint error I will fix when rebasing

@TimvdLippe TimvdLippe force-pushed the fix-stylesheet-render-blocking branch from 06d7048 to eefb83f Compare January 26, 2026 18:53
While adding various spec comments to the parts of #the-end
(which are scattered throughout the script crate), I stumbled
upon the render blocking stylesheets implementation.
There was a HTML PR to make clear when it should run and
the corresponding WPT tests have been fixed.

Signed-off-by: Tim van der Lippe <[email protected]>
@servo-wpt-sync
Copy link
Copy Markdown
Collaborator

🤖 This change no longer contains upstreamable changes to WPT; closed existing upstream pull request (web-platform-tests/wpt#57306).

Copy link
Copy Markdown
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.

Nice cleanup.

@servo-highfive servo-highfive removed the S-awaiting-review There is new code that needs to be reviewed. label Jan 27, 2026
@jdm jdm added this pull request to the merge queue Jan 27, 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 Jan 27, 2026
Merged via the queue into servo:main with commit 22df064 Jan 27, 2026
29 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 Jan 27, 2026
@TimvdLippe TimvdLippe deleted the fix-stylesheet-render-blocking branch March 6, 2026 08:59
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.

Update style sheet loading to reflect specification changes around blocking scripts

5 participants