Skip to content

script: Re-implement evaluate_key_path_on_value in IndexedDB#38847

Merged
jdm merged 14 commits intoservo:mainfrom
kkoyung:idb-extract-key-from-vale-using-key-path
Sep 5, 2025
Merged

script: Re-implement evaluate_key_path_on_value in IndexedDB#38847
jdm merged 14 commits intoservo:mainfrom
kkoyung:idb-extract-key-from-vale-using-key-path

Conversation

@kkoyung
Copy link
Copy Markdown
Member

@kkoyung kkoyung commented Aug 22, 2025

The current implementation of evaluate_key_path_on_value was translated from gecko, and it is incomplete. The unimplemented part occurs many crashes in WPT tests.

This PR re-implements it according to the spec. It should eliminate many crashed WPT tests, and increase the code readability.

Testing: Update WPT test expectation
Fixes: #38817 partially, and #25325

@kkoyung
Copy link
Copy Markdown
Member Author

kkoyung commented Aug 22, 2025

cc @arihant2math (Overlapped with #38835)

@arihant2math arihant2math added the A-content/indexeddb IndexedDB implementation issues. label Aug 22, 2025
@jdm jdm added the T-linux-wpt Do a try run of the WPT label Aug 22, 2025
@github-actions github-actions bot removed the T-linux-wpt Do a try run of the WPT label Aug 22, 2025
@github-actions
Copy link
Copy Markdown

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

@github-actions
Copy link
Copy Markdown

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

Flaky unexpected result (17)
  • TIMEOUT /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 /css/css-cascade/layer-cssom-order-reverse.html (#36094)
    • FAIL [expected PASS] subtest: Delete layer invalidates @font-face

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

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

  • FAIL [expected PASS] /css/css-text/white-space/break-spaces-before-first-char-009.html
  • OK /fetch/metadata/generated/css-font-face.https.sub.tentative.html (#32732)
    • PASS [expected FAIL] subtest: sec-fetch-storage-access - Same site
  • OK /html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-nosrc.html (#34819)
    • PASS [expected FAIL] subtest: form submission
  • 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
  • OK /html/browsers/history/the-history-interface/traverse_the_history_4.html (#21383)
    • PASS [expected FAIL] subtest: Multiple history traversals, last would be aborted
  • ERROR [expected OK] /html/semantics/embedded-content/media-elements/event_timeupdate_noautoplay.html (#25046)
  • 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"
      

  • OK /html/semantics/forms/form-submission-0/multipart-formdata.window.html (#28725)
    • PASS [expected FAIL] subtest: multipart/form-data: Basic test (normal form)
  • OK /intersection-observer/callback-cross-realm-report-exception.html (#38829)
    • FAIL [expected PASS] subtest: IntersectionObserver reports the exception from its callback in the callback's global object

      assert_array_equals: lengths differ, expected array ["frame1"] length 1, got [] length 0
      

  • TIMEOUT [expected OK] /service-workers/service-worker/detached-context.https.html
    • TIMEOUT [expected FAIL] subtest: accessing navigator.serviceWorker on a detached iframe

      Test timed out
      

  • TIMEOUT [expected CRASH] /trusted-types/trusted-types-navigation.html?31-35 (#38034)
  • OK [expected TIMEOUT] /webmessaging/with-ports/018.html (#24485)
    • PASS [expected TIMEOUT] subtest: origin of the script that invoked the method, javascript:
  • TIMEOUT [expected OK] /webstorage/localstorage-about-blank-3P-iframe-opens-3P-window.partitioned.html (#29053)
    • TIMEOUT [expected PASS] subtest: StorageKey: test 3P about:blank window opened from a 3P iframe

      Test timed out
      

Stable unexpected results that are known to be intermittent (20)
  • FAIL [expected PASS] /_mozilla/css/stacked_layers.html (#15988)
  • FAIL [expected PASS] /_mozilla/mozilla/sslfail.html (#10760)
  • TIMEOUT [expected OK] /_mozilla/mozilla/window_resize_event.html (#36741)
    • TIMEOUT [expected PASS] subtest: Popup onresize event fires after resizeTo

      Test timed out
      

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

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

  • OK /html/browsers/browsing-the-web/navigating-across-documents/008.html (#24456)
    • PASS [expected FAIL] subtest: Link with onclick form submit to javascript url and href navigation
  • OK /html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-src-aboutblank-navigate-immediately.html (#29048)
    • FAIL [expected PASS] subtest: Navigating to a different document with form submission

      assert_equals: expected "http://web-platform.test:8000/common/blank.html?1=" but got "about:blank"
      

  • TIMEOUT /html/browsers/history/the-history-interface/001.html (#12580)
    • FAIL [expected PASS] subtest: traversing history must also traverse hash changes

      assert_equals: (this could cause other failures later on) expected "" but got "test"
      

  • PASS [expected FAIL] /html/canvas/element/manual/drawing-text-to-the-canvas/canvas.2d.disconnected-font-size-math.html (#30063)
  • FAIL [expected PASS] /html/canvas/element/manual/text/canvas.2d.disconnected.html (#30063)
  • OK [expected TIMEOUT] /html/interaction/focus/the-autofocus-attribute/supported-elements.html (#24145)
    • FAIL [expected NOTRUN] subtest: Host element with delegatesFocus should support autofocus

      assert_equals: expected Element node <div autofocus=""></div> but got Element node <body></body>
      

    • FAIL [expected NOTRUN] subtest: Host element with delegatesFocus including no focusable descendants should be skipped

      promise_test: Unhandled rejection with value: object "TypeError: can't access property "appendChild", w.document.body is null"
      

    • FAIL [expected NOTRUN] subtest: Area element should support autofocus

      promise_test: Unhandled rejection with value: object "TypeError: can't access property "appendChild", w.document.querySelector(...) is null"
      

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

      Test timed out
      

  • TIMEOUT [expected CRASH] /html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html (#24066)
    • NOTRUN [expected FAIL] subtest: Check that popups from a sandboxed iframe do not escape the sandbox
  • OK [expected TIMEOUT] /html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html (#24066)
    • FAIL [expected NOTRUN] subtest: Check that popups from a sandboxed iframe do not escape the sandbox

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

  • OK /navigation-timing/test-navigation-type-reload.html (#33334)
    • FAIL [expected PASS] subtest: Reload domComplete > Original domComplete

      assert_true: Reload domComplete > Original domComplete expected true got false
      

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

      assert_true: Reload loadEventEnd > Original loadEventEnd expected true got false
      

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

      assert_true: Reload loadEventStart > Original loadEventStart expected true got false
      

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

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

    • PASS [expected FAIL] subtest: 404 (script): main
    • PASS [expected FAIL] subtest: CORS (script): main
    • PASS [expected FAIL] subtest: success (xhr): main
    • PASS [expected FAIL] subtest: CORS (xhr): main
  • OK /webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html (#22849)
    • FAIL [expected PASS] subtest: X Stitched sine-wave buffers at sample rate 44100 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...] with an element-wise tolerance of {"absoluteThreshold":0.000090957,"relativeThreshold":0}. Index Actual Expected AbsError RelError Test threshold [14820] -1.0270949376000000e+10 -7.5447601079940796e-1 1.0270949375245523e+10 1.3613354471486641e+10 9.0957000000000003e-5 [14821] 4.5832268872671792e-41 -7.1187585592269897e-1 7.1187585592269897e-1 1.0000000000000000e+0 9.0957000000000003e-5 Max AbsError of 1.0270949375245523e+10 at index of 14820. Max RelError of 1.3613354471486641e+10 at index of 14820.

      assert_true: expected true got false
      

    • FAIL [expected PASS] subtest: X SNR (-156.7981258283385 dB) is not greater than or equal to 85.58. Got -156.7981258283385.

      assert_true: expected true got false
      

    • FAIL [expected PASS] subtest: X Stitched sine-wave buffers at sample rate 43800 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...] with an element-wise tolerance of {"absoluteThreshold":0.0038986,"relativeThreshold":0}. Index Actual Expected AbsError RelError Test threshold [11962] -4.3401190400000000e+9 8.1359809637069702e-1 4.3401190408135977e+9 5.3344754125827303e+9 3.8985999999999999e-3 [11963] 4.7058328986167908e-1 7.7557450532913208e-1 3.0499121546745300e-1 3.9324554039849891e-1 3.8985999999999999e-3 Max AbsError of 4.3401190408135977e+9 at index of 11962. Max RelError of 5.3344754125827303e+9 at index of 11962.

      assert_true: expected true got false
      

    • FAIL [expected PASS] subtest: X SNR (-149.31594688611165 dB) is not greater than or equal to 65.737. Got -149.31594688611165.

      assert_true: expected true got false
      

  • OK [expected TIMEOUT] /webmessaging/without-ports/018.html (#24485)
    • PASS [expected TIMEOUT] subtest: origin of the script that invoked the method, javascript:
Stable unexpected results (4)
  • CRASH [expected TIMEOUT] /IndexedDB/idb-binary-key-detached.any.html
  • CRASH [expected TIMEOUT] /IndexedDB/idb-binary-key-detached.any.worker.html
  • CRASH [expected TIMEOUT] /IndexedDB/open-request-queue.any.html
  • CRASH [expected TIMEOUT] /IndexedDB/open-request-queue.any.worker.html

@github-actions
Copy link
Copy Markdown

⚠️ Try run (#17163441907) failed.

@arihant2math arihant2math added the T-linux-wpt Do a try run of the WPT label Aug 23, 2025
@github-actions github-actions bot removed the T-linux-wpt Do a try run of the WPT label Aug 23, 2025
@github-actions
Copy link
Copy Markdown

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

@github-actions
Copy link
Copy Markdown

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

Flaky unexpected result (25)
  • OK /FileAPI/url/url-with-fetch.any.worker.html (#21517)
    • PASS [expected FAIL] subtest: Revoke blob URL after calling fetch, fetch should succeed
  • OK /IndexedDB/idbobjectstore_get.any.html
    • FAIL [expected PASS] subtest: Attempts to retrieve a record that doesn't exist

      assert_unreached: unexpected open.success event Reached unreachable code
      

  • TIMEOUT /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
  • FAIL [expected PASS] /css/WOFF2/header-reserved-001.xht
  • FAIL [expected PASS] /css/WOFF2/metadatadisplay-encoding-002.xht
  • FAIL [expected PASS] /css/WOFF2/tabledata-recontruct-loca-001.xht
  • 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-002.html
    • 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 /custom-elements/form-associated/ElementInternals-setFormValue.html (#29174)
    • PASS [expected FAIL] subtest: Single value - name is missing
  • OK /fetch/metadata/generated/css-font-face.sub.tentative.html (#34624)
    • FAIL [expected PASS] subtest: sec-fetch-storage-access - Not sent to non-trustworthy cross-site destination

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

  • OK /html/browsers/browsing-the-web/navigating-across-documents/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/navigation-unload-same-origin.window.html (#29049)
    • PASS [expected FAIL] subtest: Same-origin navigation started from unload handler must be ignored
  • FAIL [expected PASS] /html/canvas/element/manual/text/canvas.2d.disconnected.html (#30063)
  • TIMEOUT [expected OK] /html/infrastructure/urls/base-url/document-base-url-window-initiator-is-not-opener.https.window.html (#30970)
  • 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
      

  • CRASH [expected OK] /html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-2.html (#22154)
  • OK /html/semantics/forms/form-submission-0/multipart-formdata.window.html (#28725)
    • PASS [expected FAIL] subtest: multipart/form-data: Basic test (normal form)
  • OK /html/semantics/forms/form-submission-0/text-plain.window.html (#28687)
    • PASS [expected FAIL] subtest: text/plain: Basic test (normal form)
  • PASS [expected FAIL] /png/apng/acTL-plays-two.html
  • OK /preload/prefetch-document.html (#37210)
    • FAIL [expected PASS] subtest: different-site document prefetch with 'as=document' should not be consumed

      assert_equals: expected 2 but got 1
      

  • TIMEOUT /preload/preload-resource-match.https.html (#38088)
    • TIMEOUT [expected FAIL] subtest: Loading script (use-credentials) with link (no-cors) should discard the preloaded response

      Test timed out
      

    • NOTRUN [expected TIMEOUT] subtest: Loading script (use-credentials) with link (anonymous) should discard the preloaded response
  • TIMEOUT [expected OK] /resource-timing/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
  • TIMEOUT [expected OK] /resource-timing/tentative/document-initiated.html (#37785)
  • TIMEOUT /resource-timing/test_resource_timing.html (#25720)
    • PASS [expected FAIL] subtest: PerformanceEntry has correct name, initiatorType, startTime, and duration (img)
  • OK [expected ERROR] /webxr/render_state_update.https.html (#27535)
Stable unexpected results that are known to be intermittent (20)
  • FAIL [expected PASS] /_mozilla/css/stacked_layers.html (#15988)
  • FAIL [expected PASS] /_mozilla/gfx-rs-gecko/descriptor-ranges.html (#23258)
  • FAIL [expected PASS] /_mozilla/mozilla/sslfail.html (#10760)
  • ERROR [expected TIMEOUT] /dom/abort/AbortSignal.https.any.shadowrealm-in-audioworklet.html (#38763)
  • ERROR [expected TIMEOUT] /dom/abort/event.https.any.shadowrealm-in-audioworklet.html (#38763)
  • TIMEOUT [expected FAIL] /dom/xslt/large-cdata.html (#38029)
  • OK /html/browsers/browsing-the-web/navigating-across-documents/008.html (#24456)
    • PASS [expected FAIL] subtest: Link with onclick form submit to javascript url and href navigation
  • OK /html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/load-pageshow-events-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/refresh/same-document-refresh.html (#34597)
    • PASS [expected FAIL] subtest: Same-Document Referrer from Refresh
  • OK /html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/a-click.html (#28697)
    • PASS [expected FAIL] subtest: aElement.click() before the load event must NOT replace
  • PASS [expected FAIL] /html/canvas/element/manual/drawing-text-to-the-canvas/canvas.2d.disconnected-font-size-math.html (#30063)
  • 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 CRASH] /html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-2.html (#22667)
  • TIMEOUT [expected OK] /html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html (#24057)
    • TIMEOUT [expected FAIL] subtest: Check that popups from a sandboxed iframe escape the sandbox if allow-popups-to-escape-sandbox is used

      Test timed out
      

  • OK [expected TIMEOUT] /html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html (#24066)
    • FAIL [expected NOTRUN] subtest: Check that popups from a sandboxed iframe do not escape the sandbox

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

  • OK /html/semantics/embedded-content/the-video-element/intrinsic_sizes.htm (#37173)
    • FAIL [expected PASS] subtest: default object size after src is removed

      assert_equals: expected "300px" but got "320px"
      

  • OK /navigation-timing/test-navigation-type-reload.html (#33334)
    • FAIL [expected PASS] subtest: Reload domComplete > Original domComplete

      assert_true: Reload domComplete > Original domComplete expected true got false
      

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

      assert_true: Reload loadEventEnd > Original loadEventEnd expected true got false
      

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

      assert_true: Reload loadEventStart > Original loadEventStart expected true got false
      

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

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

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

      assert_greater_than: http://web-platform.test:8000/preload/resources/dummy.xml?pipe=header%28Content-Type%2Ctext%2Fcss%29&label=style should be loaded expected a number greater than 0 but got 0
      

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

      assert_greater_than: http://web-platform.test:8000/preload/resources/dummy.css?pipe=header%28Content-Type%2Ctext%2Fnotjavascript%29&label=script should be loaded expected a number greater than 0 but got 0
      

  • ERROR /service-workers/idlharness.https.any.html (#36250)
    • TIMEOUT [expected PASS] subtest: ServiceWorkerContainer interface: operation register((TrustedScriptURL or USVString), optional RegistrationOptions)

      Test timed out
      

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

      Test timed out
      

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

      Test timed out
      

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

      Test timed out
      

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

      Test timed out
      

  • OK /webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html (#22849)
    • FAIL [expected PASS] subtest: X Stitched sine-wave buffers at sample rate 44100 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...] with an element-wise tolerance of {"absoluteThreshold":0.000090957,"relativeThreshold":0}. Index Actual Expected AbsError RelError Test threshold [14820] 4.8617619162854740e+31 -7.5447601079940796e-1 4.8617619162854740e+31 6.4438919815809321e+31 9.0957000000000003e-5 [14821] 4.5835071469600442e-41 -7.1187585592269897e-1 7.1187585592269897e-1 1.0000000000000000e+0 9.0957000000000003e-5 Max AbsError of 4.8617619162854740e+31 at index of 14820. Max RelError of 6.4438919815809321e+31 at index of 14820.

      assert_true: expected true got false
      

    • FAIL [expected PASS] subtest: X SNR (-590.3017878027246 dB) is not greater than or equal to 85.58. Got -590.3017878027246.

      assert_true: expected true got false
      

    • FAIL [expected PASS] subtest: X Stitched sine-wave buffers at sample rate 43800 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...] with an element-wise tolerance of {"absoluteThreshold":0.0038986,"relativeThreshold":0}. Index Actual Expected AbsError RelError Test threshold [11962] 2.0495717310967754e+31 8.1359809637069702e-1 2.0495717310967754e+31 2.5191451900385664e+31 3.8985999999999999e-3 [11963] 4.7058328986167908e-1 7.7557450532913208e-1 3.0499121546745300e-1 3.9324554039849891e-1 3.8985999999999999e-3 Max AbsError of 2.0495717310967754e+31 at index of 11962. Max RelError of 2.5191451900385664e+31 at index of 11962.

      assert_true: expected true got false
      

    • FAIL [expected PASS] subtest: X SNR (-582.7991765038771 dB) is not greater than or equal to 65.737. Got -582.7991765038771.

      assert_true: expected true got false
      

@github-actions
Copy link
Copy Markdown

✨ Try run (#17170731753) succeeded.

@@ -1,5 +1,5 @@
[idb-binary-key-detached.any.html]
expected: TIMEOUT
expected: CRASH
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Do we know why these tests crash now?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

This test panics when we call structuredclone::write here:

if IsArrayBufferObject(*object) || JS_IsArrayBufferViewObject(*object) {
// FIXME:(arihant2math) implement it the correct way (is this correct?)
let key = structuredclone::write(cx, input, None).expect("Could not serialize key");
return Ok(IndexedDBKeyType::Binary(key.serialized.clone()));
}

which is used to handle this part of the spec:

If input is a buffer source type

  1. Let octets be the result of running the steps to get a copy of the bytes held by the buffer source input. Rethrow any exceptions.
  2. Return a new key with type binary and value octets.

https://www.w3.org/TR/IndexedDB-2/#convert-a-value-to-a-key

My guess is that we didn't run the get-a-copy-of-the-bytes-held-by-the-buffer-source algorithm in the first step, which help us check whether the key is a detached buffer. The WPT test file has a spec URL (https://webidl.spec.whatwg.org/#dfn-get-buffer-source-copy) directly pointing to this algorithm.

This PR only eliminates crashes caused by the previously unimplemented part of evaluate_key_path_on_value. This explains why this PR can't fix this test.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

We should use ? instead of expect.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Yes, it would be better to use ? instead of expect. However, since this PR isn't related to convert_value_to_key function, I'd suggest fixing it in a separate PR.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Aha, got it.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I've done this in #39078. The expectations should be updated when you get a chance.

github-merge-queue bot pushed a commit that referenced this pull request Sep 2, 2025
…ure (#39078)

Related to failures in #38847

Testing: WPT

---------

Signed-off-by: Ashwin Naren <[email protected]>
@kkoyung kkoyung force-pushed the idb-extract-key-from-vale-using-key-path branch from 05259e8 to 1199449 Compare September 2, 2025 05:26
@kkoyung
Copy link
Copy Markdown
Member Author

kkoyung commented Sep 2, 2025

Rebased on the main branch to adopt changes from #39078, and updated WPT expectation.

@arihant2math arihant2math added the T-linux-wpt Do a try run of the WPT label Sep 2, 2025
@github-actions github-actions bot removed the T-linux-wpt Do a try run of the WPT label Sep 2, 2025
@github-actions
Copy link
Copy Markdown

github-actions bot commented Sep 2, 2025

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

@github-actions
Copy link
Copy Markdown

github-actions bot commented Sep 2, 2025

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

Flaky unexpected result (22)
  • OK /FileAPI/url/url-with-fetch.any.html (#21517)
    • FAIL [expected PASS] subtest: Revoke blob URL after calling fetch, fetch should succeed

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

  • OK /IndexedDB/idbfactory_open.any.worker.html
    • FAIL [expected PASS] subtest: Calling open() with version argument 1.5 should not throw.

      assert_equals: version expected 1 but got 9007199254740991
      

  • 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)
    • FAIL [expected PASS] subtest: WebGL test #45

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

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

      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 #49

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

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

      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
      

  • 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)
    • PASS [expected FAIL] subtest: @font-face override update with appended sheet 1
    • PASS [expected FAIL] subtest: @font-face override update with appended sheet 2
  • TIMEOUT [expected ERROR] /fetch/fetch-later/quota/same-origin-iframe/max-payload.tentative.https.window.html (#35210)
  • TIMEOUT /fetch/metadata/generated/css-images.sub.tentative.html (#29047)
    • TIMEOUT [expected PASS] subtest: background-image sec-fetch-user - Not sent to non-trustworthy cross-site destination

      Test timed out
      

  • 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/008.html (#24456)
    • PASS [expected FAIL] subtest: Link with onclick form submit to javascript url and href navigation
  • OK /html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-nosrc.html (#34819)
    • PASS [expected FAIL] subtest: form submission
  • 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/the-window-object/open-close/open-features-non-integer-left.html
  • OK /html/browsers/windows/embedded-opener-remove-frame.html (#23867)
    • FAIL [expected PASS] subtest: opener of discarded auxiliary browsing context

      assert_object_equals: property "get" expected function "function opener() {
          [native code]
      }" got function "function opener() {
          [native code]
      }"
      

  • PASS [expected FAIL] /html/canvas/element/manual/text/canvas.2d.disconnected.html (#30063)
  • TIMEOUT [expected OK] /html/infrastructure/urls/base-url/document-base-url-window-initiator-is-not-opener.https.window.html (#30970)
  • OK [expected TIMEOUT] /html/interaction/focus/the-autofocus-attribute/autofocus-dialog.html (#29087)
    • FAIL [expected TIMEOUT] subtest: &lt;dialog&gt;-contained autofocus element gets focused when the dialog is shown

      assert_equals: expected "DIV" but got "BODY"
      

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

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

  • OK /html/semantics/forms/form-submission-0/multipart-formdata.window.html (#28725)
    • PASS [expected FAIL] subtest: multipart/form-data: Basic test (normal form)
  • OK /html/webappapis/user-prompts/print-during-unload.html (#35944)
    • FAIL [expected PASS] subtest: print() during unload

      assert_array_equals: expected property 1 to be "destination" but got "error: window.print is not a function" (expected array ["start", "destination"] got ["start", "error: window.print is not a function"])
      

  • FAIL [expected PASS] /shadow-dom/shadow-style-invalidation-vw-units.html (#38468)
  • OK /trusted-types/trusted-types-navigation.html?21-25 (#38997)
    • PASS [expected FAIL] subtest: Navigate a window via form-submission with javascript:-urls in enforcing mode.
Stable unexpected results that are known to be intermittent (27)
  • OK /FileAPI/url/url-with-fetch.any.worker.html (#21517)
    • PASS [expected FAIL] subtest: Revoke blob URL after calling fetch, fetch should succeed
  • OK /IndexedDB/transaction-deactivation-timing.any.html (#38772)
    • FAIL [expected PASS] subtest: New transactions are deactivated before next task

      assert_false: Transaction should be inactive in next task expected false got true
      

    • FAIL [expected PASS] subtest: New transactions from microtask are deactivated before next task

      assert_false: Transaction should be inactive in next task expected false got true
      

  • FAIL [expected PASS] /_mozilla/css/iframe/hide_and_show.html (#15265)
  • FAIL [expected PASS] /_mozilla/css/stacked_layers.html (#15988)
  • FAIL [expected PASS] /_mozilla/mozilla/sslfail.html (#10760)
  • FAIL [expected PASS] /css/css-grid/grid-items/grid-auto-margin-and-replaced-item-001.html (#37162)
  • OK /custom-elements/form-associated/ElementInternals-setFormValue.html (#29174)
    • PASS [expected FAIL] subtest: Single value - name is missing
  • TIMEOUT [expected FAIL] /dom/xslt/large-cdata.html (#38029)
  • OK /fetch/metadata/generated/css-font-face.sub.tentative.html (#34624)
    • PASS [expected FAIL] subtest: sec-fetch-storage-access - Not sent to non-trustworthy cross-site destination
  • OK /html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/load-pageshow-events-iframe-contentWindow.html (#28681)
    • FAIL [expected PASS] subtest: load &amp; pageshow events do not fire on contentWindow of &lt;iframe&gt; element created with src='about:blank'

      assert_unreached: load should not be fired Reached unreachable code
      

  • OK /html/browsers/browsing-the-web/navigating-across-documents/refresh/same-document-refresh.html (#34597)
    • FAIL [expected PASS] subtest: Same-Document Referrer from Refresh

      assert_equals: original page loads expected "http://web-platform.test:8000/html/browsers/browsing-the-web/navigating-across-documents/refresh/resources/refresh-with-section.sub.html?url=%23section" but got "http://web-platform.test:8000/html/browsers/browsing-the-web/navigating-across-documents/refresh/resources/refresh-with-section.sub.html?url=%23section#section"
      

  • OK /html/browsers/history/the-history-interface/traverse_the_history_2.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 3 but got 2 (expected array [6, 3] got [6, 2])
      

  • OK /html/browsers/history/the-history-interface/traverse_the_history_3.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 3 but got 1 (expected array [6, 3] got [6, 1])
      

  • OK [expected TIMEOUT] /html/interaction/focus/the-autofocus-attribute/supported-elements.html (#24145)
    • FAIL [expected TIMEOUT] subtest: Host element with delegatesFocus including no focusable descendants should be skipped

      assert_equals: expected Element node &lt;input autofocus=""&gt;&lt;/input&gt; but got Element node &lt;body&gt;&lt;/body&gt;
      

    • FAIL [expected NOTRUN] subtest: Area element should support autofocus

      assert_equals: expected Element node &lt;area autofocus="" href="/common/blank.html"&gt;&lt;/area&gt; but got Element node &lt;body&gt;
      &lt;img src="/media/poster.png" usemap="#map"&gt;
      &lt;map n...
      

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

  • CRASH [expected OK] /html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html (#22647)
  • OK [expected CRASH] /html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html (#24057)
  • OK /html/semantics/forms/form-submission-0/urlencoded2.window.html (#28687)
    • PASS [expected FAIL] subtest: application/x-www-form-urlencoded: Basic test (normal form)
  • OK [expected CRASH] /html/semantics/forms/the-fieldset-element/disabled-003.html (#31730)
  • OK /navigation-timing/test-navigation-type-reload.html (#33334)
    • FAIL [expected PASS] subtest: Reload domComplete &gt; Original domComplete

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

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

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

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

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

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

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

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

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

    • PASS [expected FAIL] subtest: success (xhr): main
    • PASS [expected FAIL] subtest: CORS (xhr): main
    • PASS [expected FAIL] subtest: Decode-error (style): main
  • 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 /trusted-types/trusted-types-navigation.html?01-05 (#38975)
    • PASS [expected FAIL] subtest: Navigate a window via anchor with javascript:-urls in report-only mode.
    • PASS [expected FAIL] subtest: Navigate a frame via anchor with javascript:-urls in enforcing mode.
  • OK [expected CRASH] /trusted-types/trusted-types-navigation.html?06-10 (#37920)
    • PASS [expected FAIL] subtest: Navigate a frame via anchor with javascript:-urls w/ default policy in report-only mode.
  • TIMEOUT [expected OK] /trusted-types/trusted-types-navigation.html?26-30 (#38807)
    • TIMEOUT [expected FAIL] subtest: Navigate a frame via form-submission with javascript:-urls w/ default policy in enforcing mode.

      Test timed out
      

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

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

  • 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
      

@github-actions
Copy link
Copy Markdown

github-actions bot commented Sep 2, 2025

✨ Try run (#17394153815) succeeded.

@arihant2math arihant2math requested a review from jdm September 3, 2025 04:13
@arihant2math
Copy link
Copy Markdown
Contributor

@kkoyung there seem to be merge conflicts at the moment.

Signed-off-by: Kingsley Yung <[email protected]>
Signed-off-by: Kingsley Yung <[email protected]>
Signed-off-by: Kingsley Yung <[email protected]>
Signed-off-by: Kingsley Yung <[email protected]>
@kkoyung kkoyung force-pushed the idb-extract-key-from-vale-using-key-path branch from 1199449 to 7716c7b Compare September 4, 2025 04:52
@kkoyung
Copy link
Copy Markdown
Member Author

kkoyung commented Sep 4, 2025

@kkoyung there seem to be merge conflicts at the moment.

Rebased to resolve the conflict.
Remark: The conflict only involves WPT expectation.

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.

Looking good; we just have a few areas where we can get closer to the specification!

// Step 1.3.6. Assert: status is true.
unsafe {
set_dictionary_property(*cx, result.handle(), &i.to_string(), key.handle())
.map_err(|_| Error::Data)?;
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This should be Error::JSFailed, since it's a failure inside the JS engine.

unsafe {
let mut is_array = false;
if IsArrayObject(*cx, current_value.handle(), &mut is_array) {
return Err(Error::Data);
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

JSFailed here as well.

}
} // All tokens processed
// Otherwise
else {
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

The current structure means that any checks like root_from_handlevalue:: or root_from_handlevalue:: that fail will silently return an undefined value, rather than falling through to this else block. Can we use explicit returns for the successful branches and make this else block unconditional instead?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Since these if-then-else blocks are inside a for loop, I simply took away else to break up the if-then-else, and call continue when we find a matched one.

unsafe {
// If Type(value) is not Object, return failure.
if !current_value.is_object() {
return Err(Error::Data);
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

From the spec:

The result of these steps is an ECMAScript value or failure, or the steps may throw an exception.

We need to create a result enum like:

enum EvaluationResult {
    Success,
    Failure,
    Error(Error),
}

and this case should be EvaluationResult::Failure.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

How about only including Success and Failure in the enum, and making the function return Result<EvaluationResult, Error> so that the caller can easily rethrow the error? It's also more close to the spec.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Oh, I like that!

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

I found that the other functions in components/script/indexeddb_db.rs have the same issue. Since this PR only touches evaluate_key_path_on_value and extract_key functions, I fixed these two functions for now. We can fix the others separately.

Comment on lines +347 to +348
// Let hop be ! HasOwnProperty(value, identifier).
// If hop is false, return failure.
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

We're missing the HasOwnProperty check like

if JS_HasOwnProperty(cx, object, name.as_ptr(), &mut found) && found {

// Let hop be ! HasOwnProperty(value, identifier).
// If hop is false, return failure.
// Let value be ! Get(value, identifier).
// If value is undefined, return failure.
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

We need this check as well.

*cx,
object.handle(),
identifier,
property.handle_mut(),
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

We can pass current_value.handle_mut() here directly.

Signed-off-by: Kingsley Yung <[email protected]>
Signed-off-by: Kingsley Yung <[email protected]>
Signed-off-by: Kingsley Yung <[email protected]>
@jdm jdm added the S-needs-code-changes Changes have not yet been made that were requested by a reviewer. label Sep 5, 2025
Signed-off-by: Kingsley Yung <[email protected]>
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!

@kkoyung
Copy link
Copy Markdown
Member Author

kkoyung commented Sep 5, 2025

We call the get_property_jsval function from here, and its function signature has changed in a recent commit e5fbb31 on the main branch. The parameter type mismatch causes an error during compiling (https://github.com/servo/servo/actions/runs/17484123495/job/49659923241).

I merged the main branch to here, to get the new function signature, and then fixed the type mismatch.

@arihant2math arihant2math added T-linux-wpt Do a try run of the WPT and removed S-needs-code-changes Changes have not yet been made that were requested by a reviewer. labels Sep 5, 2025
@github-actions github-actions bot removed the T-linux-wpt Do a try run of the WPT label Sep 5, 2025
@github-actions
Copy link
Copy Markdown

github-actions bot commented Sep 5, 2025

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

@github-actions
Copy link
Copy Markdown

github-actions bot commented Sep 5, 2025

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

Flaky unexpected result (24)
  • TIMEOUT /FileAPI/url/url-in-tags-revoke.window.html (#19978)
    • TIMEOUT [expected PASS] subtest: Fetching a blob URL immediately before revoking it works in &lt;script&gt; tags.

      Test timed out
      

  • OK /FileAPI/url/url-with-fetch.any.worker.html (#21517)
    • PASS [expected FAIL] subtest: Revoke blob URL after calling fetch, fetch should succeed
  • FAIL [expected PASS] /_mozilla/css/iframe/hide_and_show.html (#15265)
  • TIMEOUT [expected OK] /_mozilla/mozilla/window_resize_event.html (#36741)
    • TIMEOUT [expected PASS] subtest: Popup onresize event fires after resizeTo

      Test timed out
      

  • OK /_webgl/conformance/textures/misc/texture-upload-size.html (#21770)
    • 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
    • PASS [expected FAIL] subtest: WebGL test #65
    • PASS [expected FAIL] subtest: WebGL test #67
    • FAIL [expected PASS] subtest: WebGL test #69

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

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

      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
      

    • And 2 more unexpected results...
  • OK [expected ERROR] /fetch/fetch-later/quota/same-origin-iframe/multiple-iframes.tentative.https.window.html (#35176)
  • OK [expected ERROR] /fetch/fetch-later/quota/same-origin-iframe/small-payload.tentative.https.window.html (#35210)
  • 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-iframe-contentWindow.html (#28681)
    • FAIL [expected PASS] subtest: load &amp; pageshow events do not fire on contentWindow of &lt;iframe&gt; element created with src='about:blank'

      assert_unreached: load should not be fired Reached unreachable code
      

  • OK /html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/load-pageshow-events-window-open.html (#28691)
    • FAIL [expected PASS] subtest: load event does not fire on window.open('about:blank')

      assert_unreached: load should not be fired Reached unreachable code
      

  • OK /html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-cross-origin.sub.window.html (#29056)
    • FAIL [expected PASS] subtest: Cross-origin navigation started from unload handler must be ignored

      promise_test: Unhandled rejection with value: object "SecurityError: The operation is insecure."
      

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

  • TIMEOUT [expected OK] /html/browsers/sandboxing/sandbox-initial-empty-document-toward-same-origin.html (#35948)
  • TIMEOUT [expected OK] /html/infrastructure/urls/base-url/document-base-url-window-initiator-is-not-opener.https.window.html (#30970)
  • OK [expected TIMEOUT] /html/interaction/focus/the-autofocus-attribute/autofocus-dialog.html (#29087)
    • FAIL [expected TIMEOUT] subtest: &lt;dialog&gt;-contained autofocus element gets focused when the dialog is shown

      promise_test: Unhandled rejection with value: object "TypeError: can't access property "show", w.document.querySelector(...) is null"
      

  • OK /html/semantics/embedded-content/media-elements/loading-the-media-resource/load-events-networkState.html
    • FAIL [expected PASS] subtest: NETWORK_NO_SOURCE

      assert_equals: expected 3 but got 1
      

  • CRASH [expected OK] /html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html (#22647)
  • OK [expected CRASH] /html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html (#24057)
  • CRASH [expected OK] /html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html (#24066)
  • OK /trusted-types/trusted-types-navigation.html?01-05 (#38975)
    • PASS [expected FAIL] subtest: Navigate a window via anchor with javascript:-urls in enforcing mode.
  • OK /webdriver/tests/classic/get_element_text/user_prompts.py
    • FAIL [expected PASS] subtest: test_accept[alert-None]

      webdriver.error.NoSuchElementException: no such element (404)
      

  • TIMEOUT [expected OK] /webdriver/tests/classic/perform_actions/none.py
  • OK /webdriver/tests/classic/take_screenshot/iframe.py (#36715)
    • FAIL [expected PASS] subtest: test_always_captures_top_browsing_context

      AssertionError: assert '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V1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf910C2zVVXXXXVVVddddVVV1111X8+KlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DfwSjbBDciykQIwAAAABJRU5ErkJggg==' == 'iVBORw0KGgoAAAANSUhEUgAAAyAAAAJYCAYAAACadoJwAAArA0lEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1a/aNlddddVVV1111VVXXXXVVf/5qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8NKlddddVVV1111VVXXXXVVf81qFx11VVXXXXVVVddddVVV/3XoHLVVVddddVVV1111VVXXfVfg8pVV1111VVXXXXVVVddddV/DSpXXXXVVVddddVVV1111VX/NahcddVVV1111VVXXXXVVVf916By1VVXXXXVVVddddVVV131X4PKVVddddVVV1111VVXXXXVfw0qV1111VVXXXXVVVddddVV/zWoXHXVVVddddVVV1111VVX/degctVVV1111VVXXXXVVVdd9V+DylVXXXXVVVddddVVV1111X8N/hEuSA1dDZxjrQAAAABJRU5ErkJggg=='
      

  • OK [expected ERROR] /workers/constructors/Worker/Worker-constructor.html (#22991)
Stable unexpected results that are known to be intermittent (28)
  • OK /IndexedDB/transaction-deactivation-timing.any.html (#38772)
    • FAIL [expected PASS] subtest: New transactions are deactivated before next task

      assert_false: Transaction should be inactive in next task expected false got true
      

    • FAIL [expected PASS] subtest: New transactions from microtask are deactivated before next task

      assert_false: Transaction should be inactive in next task expected false got true
      

  • FAIL [expected PASS] /_mozilla/css/stacked_layers.html (#15988)
  • FAIL [expected PASS] /_mozilla/mozilla/sslfail.html (#10760)
  • TIMEOUT [expected FAIL] /dom/xslt/large-cdata.html (#38029)
  • OK /fetch/metadata/generated/css-font-face.https.sub.tentative.html (#32732)
    • PASS [expected FAIL] subtest: sec-fetch-storage-access - Cross-site
  • OK /html/browsers/browsing-the-web/navigating-across-documents/008.html (#24456)
    • FAIL [expected PASS] subtest: Link with onclick form submit to javascript url and href navigation

      assert_equals: expected "href" but got "click"
      

  • OK /html/browsers/browsing-the-web/navigating-across-documents/009.html (#24456)
    • FAIL [expected PASS] subtest: Link with onclick form submit to javascript url with document.write and href navigation

      assert_array_equals: expected property 1 to be "href" but got "click" (expected array ["write", "href"] got ["write", "click"])
      

  • OK /html/browsers/browsing-the-web/navigating-across-documents/empty-iframe-load-event.html (#29066)
    • PASS [expected FAIL] subtest: Check execution order on load handler
    • PASS [expected FAIL] subtest: Check execution order from nested timeout
  • OK /html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-same-origin.window.html (#29049)
    • FAIL [expected PASS] subtest: Same-origin navigation started from unload handler must be ignored

      assert_equals: expected "?pass" but got "?fail"
      

  • OK /html/browsers/browsing-the-web/navigating-across-documents/refresh/same-document-refresh.html (#34597)
    • FAIL [expected PASS] subtest: Same-Document Referrer from Refresh

      assert_equals: original page loads expected "http://web-platform.test:8000/html/browsers/browsing-the-web/navigating-across-documents/refresh/resources/refresh-with-section.sub.html?url=%23section" but got "http://web-platform.test:8000/html/browsers/browsing-the-web/navigating-across-documents/refresh/resources/refresh-with-section.sub.html?url=%23section#section"
      

  • OK /html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/a-click.html (#28697)
    • FAIL [expected PASS] subtest: aElement.click() before the load event must NOT replace

      assert_equals: expected "http://web-platform.test:8000/common/blank.html?thereplacement" but got "http://web-platform.test:8000/html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/resources/code-injector.html?pipe=sub(none)&amp;code=%0A%20%20%20%20const%20a%20%3D%20document.createElement(%22a%22)%3B%0A%20%20%20%20a.href%20%3D%20%22%2Fcommon%2Fblank.html%3Fthereplacement%22%3B%0A%20%20%20%20document.currentScript.before(a)%3B%0A%20%20%20%20a.click()%3B%0A%20%20"
      

  • TIMEOUT /html/browsers/history/the-history-interface/001.html (#12580)
    • FAIL [expected PASS] subtest: traversing history must also traverse hash changes

      assert_equals: (this could cause other failures later on) expected "" but got "test"
      

  • OK /html/browsers/history/the-history-interface/traverse_the_history_2.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 3 but got 2 (expected array [6, 3] got [6, 2])
      

  • OK /html/browsers/history/the-history-interface/traverse_the_history_3.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 3 but got 1 (expected array [6, 3] got [6, 1])
      

  • 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])
      

  • PASS [expected FAIL] /html/canvas/element/manual/drawing-text-to-the-canvas/canvas.2d.disconnected-font-size-math.html (#30063)
  • OK [expected TIMEOUT] /html/interaction/focus/the-autofocus-attribute/document-with-fragment-empty.html (#28259)
    • FAIL [expected TIMEOUT] subtest: Autofocus elements in top-level browsing context's documents with empty fragments should work.

      assert_not_equals: got disallowed value Element node &lt;body&gt;&lt;/body&gt;
      

  • OK /html/semantics/forms/form-submission-0/urlencoded2.window.html (#28687)
    • PASS [expected FAIL] subtest: application/x-www-form-urlencoded: Basic test (normal form)
  • OK [expected CRASH] /html/semantics/forms/the-fieldset-element/disabled-003.html (#31730)
  • OK /navigation-timing/test-navigation-type-reload.html (#33334)
    • FAIL [expected PASS] subtest: Reload domComplete &gt; Original domComplete

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

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

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

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

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

  • OK /preload/prefetch-document.html (#37210)
    • FAIL [expected PASS] subtest: different-site document prefetch with 'as=document' should not be consumed

      assert_equals: expected 2 but got 1
      

  • OK [expected TIMEOUT] /preload/preload-error.sub.html (#37177)
  • OK /preload/preload-invalid-resources.html (#39091)
    • FAIL [expected PASS] subtest: Preloading an invalid image (missing) should preload and not re-fetch

      assert_equals: /nothing.png expected 1 but got 2
      

  • TIMEOUT /preload/preload-resource-match.https.html (#38088)
    • PASS [expected TIMEOUT] subtest: Loading module (use-credentials) with link (no-cors) should discard the preloaded response
    • PASS [expected NOTRUN] subtest: Loading module (use-credentials) with link (anonymous) should discard the preloaded response
    • PASS [expected NOTRUN] subtest: Loading module (use-credentials) with link (use-credentials) should reuse the preloaded response
    • PASS [expected NOTRUN] subtest: Loading style (same-origin) with link (same-origin) should reuse the preloaded response
    • PASS [expected NOTRUN] subtest: Loading style (no-cors) with link (no-cors) should reuse the preloaded response
    • PASS [expected NOTRUN] subtest: Loading style (no-cors) with link (anonymous) should discard the preloaded response
    • PASS [expected NOTRUN] subtest: Loading style (no-cors) with link (use-credentials) should discard the preloaded response
    • PASS [expected NOTRUN] subtest: Loading style (anonymous) with link (no-cors) should discard the preloaded response
    • PASS [expected NOTRUN] subtest: Loading style (anonymous) with link (anonymous) should reuse the preloaded response
    • PASS [expected NOTRUN] subtest: Loading style (anonymous) with link (use-credentials) should discard the preloaded response
    • And 2 more unexpected results...
  • TIMEOUT [expected CRASH] /trusted-types/trusted-types-navigation.html?06-10 (#37920)
    • TIMEOUT [expected FAIL] subtest: Navigate a frame via anchor with javascript:-urls w/ default policy in report-only mode.

      Test timed out
      

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

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

  • OK [expected ERROR] /webxr/render_state_update.https.html (#27535)

@github-actions
Copy link
Copy Markdown

github-actions bot commented Sep 5, 2025

✨ Try run (#17486230829) succeeded.

@jdm jdm added this pull request to the merge queue Sep 5, 2025
Merged via the queue into servo:main with commit b29eab0 Sep 5, 2025
56 checks passed
@kkoyung kkoyung deleted the idb-extract-key-from-vale-using-key-path branch September 5, 2025 11:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-content/indexeddb IndexedDB implementation issues.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Many IDB tests panic with "not implemented: Blob tokens are not yet supported"

4 participants