Skip to content

script: Start a performance timeline entry for iframe documents#42270

Merged
mrobinson merged 4 commits intoservo:mainfrom
muse254:script/iframe-performance-timeline
Feb 3, 2026
Merged

script: Start a performance timeline entry for iframe documents#42270
mrobinson merged 4 commits intoservo:mainfrom
muse254:script/iframe-performance-timeline

Conversation

@muse254
Copy link
Copy Markdown
Contributor

@muse254 muse254 commented Feb 1, 2026

Added resource timing that was missing for an iframe document.

Testing: Added
Fixes: #41666


// TODO 2-4 Mark resource timing.
// Mark resource timing.
let document = match ScriptThread::find_document(loaded_pipeline) {
Copy link
Copy Markdown
Member

@jdm jdm Feb 1, 2026

Choose a reason for hiding this comment

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

Step 4.1 says to use the iframe's node document, which is self.owner_document(). Right now we're getting the equivalent of child document from the specification.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

I noticed Chrome, Brave and Firefox do not have the iframe PerformanceResourceTiming entries and thought I might have misunderstood the task

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Are other browsers also supposed to record the entry like on the tests?

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.

I would expect all browsers to do it. We can verify that the tests are passing in other browsers on wpt.fyi.

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.

Huh, whatwg/html#12122 (comment) means that I haven't correctly understood the algorithm we're completing. I'll try to take a look at this tonight to figure out what we're missing.

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.

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.

A quick minimal testcase (the referenced t.html can just be an empty document):

<script>
function dump() {
const resources = performance.getEntriesByType("resource");
resources.forEach((entry) => {
  console.log(entry);
});
console.log ("---");
const navs = performance.getEntriesByType("navigation");
navs.forEach((entry) => {
  console.log(entry);
});
};

function load() {
  setTimeout(dump, 0);
}
</script>
<iframe onload="load()" src="t.html"></iframe>

In Firefox this shows a resource timing entry for t.html and a navigation entry for the test page. In Servo right now it just shows the navigation entry.

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.

I'm going to put my proposal for how to move forward in #41666 so it doesn't get lost here.

@muse254 muse254 force-pushed the script/iframe-performance-timeline branch from 6edd750 to f37dd5b Compare February 1, 2026 12:34
@muse254 muse254 marked this pull request as ready for review February 1, 2026 12:35
@muse254 muse254 requested a review from gterzian as a code owner February 1, 2026 12:35
@servo-highfive servo-highfive added the S-awaiting-review There is new code that needs to be reviewed. label Feb 1, 2026
@servo-wpt-sync
Copy link
Copy Markdown
Collaborator

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

@servo-wpt-sync
Copy link
Copy Markdown
Collaborator

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

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

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

@jdm jdm added the T-linux-wpt Do a try run of the WPT label Feb 2, 2026
@github-actions github-actions bot removed the T-linux-wpt Do a try run of the WPT label Feb 2, 2026
@github-actions
Copy link
Copy Markdown

github-actions bot commented Feb 2, 2026

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

@github-actions
Copy link
Copy Markdown

github-actions bot commented Feb 2, 2026

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

Flaky unexpected result (24)
  • OK /FileAPI/file/send-file-form-utf-8.html
    • FAIL [expected PASS] subtest: Upload file-for-upload-in-form-.txt (x-user-defined) in UTF-8 form

      assert_greater_than: file-for-upload-in-form-.txt: multipart form data must have at least 3 lines: "" expected a number greater than 2 but got 0
      

  • OK /IndexedDB/idbfactory-open-error-properties.any.html
    • PASS [expected FAIL] subtest: Properties of error event from failed open()
  • OK /IndexedDB/idbfactory-open-error-properties.any.worker.html
    • PASS [expected FAIL] subtest: Properties of error event from failed open()
  • CRASH [expected OK] /_webgl/conformance2/wasm/readpixels-2gb-in-4gb-wasm-memory.html
  • OK /custom-elements/form-associated/ElementInternals-setFormValue.html (#29174)
    • PASS [expected FAIL] subtest: Single value - empty name exists
  • TIMEOUT [expected OK] /fetch/api/redirect/redirect-keepalive.https.any.html (#32153)
    • TIMEOUT [expected PASS] subtest: [keepalive][iframe][load] mixed content redirect; setting up

      Test timed out
      

  • OK [expected ERROR] /fetch/fetch-later/quota/same-origin-iframe/sandboxed-iframe.https.window.html (#41704)
  • OK /fetch/metadata/generated/css-font-face.sub.tentative.html (#34624)
    • FAIL [expected PASS] subtest: sec-fetch-storage-access - Not sent to non-trustworthy same-site destination

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

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

  • TIMEOUT /fetch/metadata/generated/css-images.https.sub.tentative.html (#42229)
    • FAIL [expected PASS] subtest: content sec-fetch-site - Cross-Site -&gt; Same-Site

      assert_unreached: Reached unreachable code
      

  • CRASH [expected OK] /html/browsers/browsing-the-web/history-traversal/pagereveal/order-in-new-document-navigation.html
  • OK /html/browsers/history/the-history-interface/traverse_the_history_2.html (#21383)
    • PASS [expected FAIL] subtest: Multiple history traversals, last would be aborted
  • OK /html/browsers/history/the-history-interface/traverse_the_history_3.html (#21383)
    • PASS [expected FAIL] subtest: Multiple history traversals, last would be aborted
  • OK /html/browsers/history/the-history-interface/traverse_the_history_4.html (#21383)
    • PASS [expected FAIL] subtest: Multiple history traversals, last would be aborted
  • OK /html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/allow-scripts-flag-changing-2.html (#39703)
    • PASS [expected FAIL] subtest: Meta refresh of the original iframe is not blocked if moved into a sandboxed iframe
  • TIMEOUT /html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy.https.sub.html (#41404)
    • TIMEOUT [expected PASS] subtest: Feature-Policy header: autoplay * allows same-origin iframes.

      Test timed out
      

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

      Test timed out
      

  • OK /html/semantics/forms/form-submission-0/jsurl-form-submit.tentative.html (#36489)
    • PASS [expected FAIL] subtest: Verifies that form submissions scheduled inside javascript: urls take precedence over the javascript: url's return value.
  • OK /html/semantics/forms/form-submission-0/multipart-formdata.window.html (#28725)
    • PASS [expected FAIL] subtest: multipart/form-data: 0x00 in filename (formdata event)
  • OK /html/semantics/forms/form-submission-0/urlencoded2.window.html (#28687)
    • FAIL [expected PASS] subtest: application/x-www-form-urlencoded: Basic File test (normal form)

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

    • PASS [expected FAIL] subtest: application/x-www-form-urlencoded: 0x00 in value (normal form)
    • PASS [expected FAIL] subtest: application/x-www-form-urlencoded: double quote in filename (normal form)
  • OK /html/webappapis/dynamic-markup-insertion/document-write/module-tla-import.html
    • FAIL [expected PASS] subtest: document.write in an imported module

      assert_true: onload must be called expected true got false
      

  • OK /resource-timing/buffer-full-add-then-clear.html (#40819)
    • PASS [expected FAIL] subtest: Test that if the buffer is cleared after entries were added to the secondary buffer, those entries make it into the primary one
  • TIMEOUT [expected OK] /trusted-types/trusted-types-navigation.html?01-05 (#38975)
    • TIMEOUT [expected PASS] subtest: Navigate a window via anchor with javascript:-urls in report-only mode.

      Test timed out
      

    • NOTRUN [expected PASS] subtest: Navigate a window via anchor with javascript:-urls w/ default policy in report-only mode.
    • NOTRUN [expected PASS] subtest: Navigate a frame via anchor with javascript:-urls in enforcing mode.
  • TIMEOUT /trusted-types/trusted-types-navigation.html?06-10 (#37920)
    • PASS [expected FAIL] subtest: Navigate a frame via anchor with javascript:-urls in report-only mode.
  • OK /wasm/webapi/abort.any.worker.html (#40013)
    • FAIL [expected PASS] subtest: compileStreaming() asynchronously racing with abort should succeed or reject with AbortError

      assert_equals: expected "AbortError" but got "CompileError"
      

Stable unexpected results that are known to be intermittent (26)
  • OK /IndexedDB/idbcursor-continuePrimaryKey-exceptions.any.html (#39277)
    • FAIL [expected PASS] subtest: IDBCursor continuePrimaryKey() on object store cursor

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

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

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

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

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

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

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

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

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

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

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

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

      Test timed out
      

  • OK /content-security-policy/frame-ancestors/frame-ancestors-path-ignored.window.html (#36468)
    • PASS [expected FAIL] subtest: A 'frame-ancestors' CSP directive with a URL that includes a path should be ignored.
  • OK /css/css-cascade/layer-font-face-override.html (#35935)
    • 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-001.html (#37467)
    • PASS [expected FAIL] subtest: @font-face matching for quoted and unquoted generic(fangsong)
    • PASS [expected FAIL] subtest: @font-face matching for quoted and unquoted generic(khmer-mul)
    • FAIL [expected PASS] subtest: @font-face matching for quoted and unquoted generic(nastaliq)

      assert_equals: quoted generic(nastaliq) matches  @font-face rule expected 50 but got 30
      

  • OK /css/cssom-view/offsetTopLeft-border-box.html (#40826)
    • PASS [expected FAIL] subtest: container: 0
    • PASS [expected FAIL] subtest: container: 1
  • ERROR [expected OK] /fetch/fetch-later/quota/same-origin-iframe/multiple-iframes.https.window.html (#35176)
  • OK /fetch/metadata/generated/css-font-face.https.sub.tentative.html (#32732)
    • FAIL [expected PASS] subtest: sec-fetch-mode

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

  • TIMEOUT /fetch/metadata/generated/css-images.sub.tentative.html (#29047)
    • FAIL [expected PASS] subtest: content sec-fetch-site - HTTPS downgrade-upgrade

      assert_unreached: Reached unreachable code
      

  • OK /html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/load-pageshow-events-window-open.html (#28691)
    • PASS [expected FAIL] subtest: load event does not fire on window.open('about:blank')
  • OK /html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-cross-origin.sub.window.html (#29056)
    • 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/history/the-history-interface/traverse_the_history_5.html (#21383)
    • PASS [expected FAIL] subtest: Multiple history traversals, last would be aborted
  • TIMEOUT /html/interaction/focus/the-autofocus-attribute/supported-elements.html (#24145)
    • PASS [expected TIMEOUT] subtest: Non-HTMLElement should not support autofocus
    • TIMEOUT [expected NOTRUN] subtest: Host element with delegatesFocus should support autofocus

      Test timed out
      

  • OK [expected ERROR] /html/user-activation/no-activation-thru-escape-key.html (#40343)
  • OK /navigation-timing/test-navigation-type-reload.html (#33334)
    • PASS [expected FAIL] subtest: Reload domContentLoadedEventStart &gt; Original domContentLoadedEventStart
    • PASS [expected FAIL] subtest: Reload domInteractive &gt; Original domInteractive
    • PASS [expected FAIL] subtest: Reload fetchStart &gt; Original fetchStart
  • OK /resource-timing/test_resource_timing.html (#25720)
    • PASS [expected FAIL] subtest: window.performance.getEntriesByName() and window.performance.getEntriesByNameType() return same data (iframe)
    • PASS [expected FAIL] subtest: PerformanceEntry has correct name, initiatorType, startTime, and duration (img)
    • FAIL [expected NOTRUN] subtest: PerformanceEntry has correct name, initiatorType, startTime, and duration (link)

      assert_equals: expected 2.599999999999998 but got 2.59
      

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

      assert_equals: expected 5.849999999999998 but got 5.85
      

  • 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 (13)
  • OK [expected TIMEOUT] /resource-timing/TAO-match.html
    • FAIL [expected TIMEOUT] subtest: The timing allow check algorithm will pass when the Timing-Allow-Origin header value list contains a wildcard. (iframe)

      assert_greater_than_equal: domainLookupEnd should be greater than domainLookupStart expected a number greater than or equal to 684.71 but got 0
      

    • FAIL [expected NOTRUN] subtest: The timing allow check algorithm will fail when the Timing-Allow-Origin header value list contains a null origin. (iframe)

      assert_equals: domainLookupStart should be 0 expected 0 but got 742.37
      

    • FAIL [expected NOTRUN] subtest: The timing allow check algorithm will pass when the Timing-Allow-Origin header value list contains multiple wildcards. (iframe)

      assert_greater_than_equal: domainLookupEnd should be greater than domainLookupStart expected a number greater than or equal to 799.93 but got 0
      

    • FAIL [expected NOTRUN] subtest: The timing allow check algorithm will fail when the Timing-Allow-Origin header value contains only the uppercased origin. (iframe)

      assert_equals: domainLookupStart should be 0 expected 0 but got 851.45
      

    • FAIL [expected NOTRUN] subtest: The timing allow check algorithm will fail when the Timing-Allow-Origin header value contains the origin, a space, then a wildcard. (iframe)

      assert_equals: domainLookupStart should be 0 expected 0 but got 909.7
      

    • FAIL [expected NOTRUN] subtest: The timing allow check algorithm will fail when the Timing-Allow-Origin header is not present. (iframe)

      assert_equals: domainLookupStart should be 0 expected 0 but got 967.2
      

    • FAIL [expected NOTRUN] subtest: The timing allow check algorithm will pass when the Timing-Allow-Origin header value contains only the origin. (image)

      assert_greater_than_equal: domainLookupEnd should be greater than domainLookupStart expected a number greater than or equal to 1018.3 but got 0
      

    • FAIL [expected NOTRUN] subtest: The timing allow check algorithm will pass when the Timing-Allow-Origin header value contains only a wildcard. (image)

      assert_greater_than_equal: domainLookupEnd should be greater than domainLookupStart expected a number greater than or equal to 1062.41 but got 0
      

    • FAIL [expected NOTRUN] subtest: The timing allow check algorithm will pass when the Timing-Allow-Origin header value list contains a case-sensitive match. (image)

      assert_greater_than_equal: domainLookupStart should be greater than fetchStart expected a number greater than or equal to 1106.07 but got 0
      

    • FAIL [expected NOTRUN] subtest: The timing allow check algorithm will pass when the Timing-Allow-Origin header value list contains the origin and a wildcard. (image)

      assert_greater_than_equal: domainLookupStart should be greater than fetchStart expected a number greater than or equal to 1148.41 but got 0
      

    • And 36 more unexpected results...
  • OK [expected TIMEOUT] /resource-timing/content-type.html
    • FAIL [expected TIMEOUT] subtest: This test validates the content-type of resources. 18

      assert_equals: content-type should be empty for iframes having cross origin redirects expected (string) "" but got (undefined) undefined
      

    • FAIL [expected NOTRUN] subtest: This test validates the content-type of resources. 19

      assert_equals: content-type should be exposed for iframes having only same origin redirects expected (string) "text/html" but got (undefined) undefined
      

    • FAIL [expected NOTRUN] subtest: This test validates the content-type of resources. 20

      assert_equals: content-type should not be exposed for iframes with any non-same-origin redirect expected (string) "" but got (undefined) undefined
      

  • OK [expected TIMEOUT] /resource-timing/cross-origin-redirects.html
    • PASS [expected FAIL] subtest: Verify that cross-origin resources' timings aren't exposed through HTTP redirects.
    • PASS [expected FAIL] subtest: Verify that a redirected cross-origin resources' timings aren't exposed when the TAO check fails.
    • FAIL [expected TIMEOUT] subtest: Verify that a redirect chain through cross-origin resources do not have their timings exposed when any of the TAO checks fail. (FAIL -&gt; FAIL -&gt; FAIL)

      assert_equals: domainLookupStart should be 0 expected 0 but got 175.26
      

    • FAIL [expected NOTRUN] subtest: Verify that a redirect chain through cross-origin resources do not have their timings exposed when any of the TAO checks fail. (FAIL -&gt; FAIL -&gt; PASS)

      assert_equals: domainLookupStart should be 0 expected 0 but got 234.21
      

    • FAIL [expected NOTRUN] subtest: Verify that a redirect chain through cross-origin resources do not have their timings exposed when any of the TAO checks fail. (FAIL -&gt; PASS -&gt; FAIL)

      assert_equals: domainLookupStart should be 0 expected 0 but got 292.63
      

    • FAIL [expected NOTRUN] subtest: Verify that a redirect chain through cross-origin resources do not have their timings exposed when any of the TAO checks fail. (FAIL -&gt; PASS -&gt; PASS)

      assert_equals: domainLookupStart should be 0 expected 0 but got 351.68
      

    • FAIL [expected NOTRUN] subtest: Verify that a redirect chain through cross-origin resources do not have their timings exposed when any of the TAO checks fail. (PASS -&gt; FAIL -&gt; FAIL)

      assert_equals: domainLookupStart should be 0 expected 0 but got 405.97
      

    • FAIL [expected NOTRUN] subtest: Verify that a redirect chain through cross-origin resources do not have their timings exposed when any of the TAO checks fail. (PASS -&gt; FAIL -&gt; PASS)

      assert_equals: domainLookupStart should be 0 expected 0 but got 460.35
      

    • FAIL [expected NOTRUN] subtest: Verify that a redirect chain through cross-origin resources do not have their timings exposed when any of the TAO checks fail. (PASS -&gt; PASS -&gt; FAIL)

      assert_equals: domainLookupStart should be 0 expected 0 but got 519.72
      

  • CRASH [expected OK] /resource-timing/iframe-failed-commit.html
  • OK /resource-timing/iframe-non-html.html
    • PASS [expected FAIL] subtest: Iframes should report resource timing for image iframes
    • PASS [expected FAIL] subtest: Iframes should report resource timing for xhtml iframes
    • PASS [expected FAIL] subtest: Iframes should report resource timing for xml iframes
    • PASS [expected FAIL] subtest: Iframes should report resource timing for text iframes
  • OK /resource-timing/iframe-redirect-without-location.html
    • PASS [expected FAIL] subtest: Iframes should report resource timing for redirect responses without a location
  • OK /resource-timing/iframe-sequence-of-events.html
    • PASS [expected FAIL] subtest: A iframe should report its RT entry when the response is done and before it is completely loaded
    • PASS [expected FAIL] subtest: Changing the src of an iframe (ORIGIN-&gt;ORIGIN) with TAO should result in an RT entry
    • PASS [expected FAIL] subtest: Changing the src of an iframe (ORIGIN-&gt;ORIGIN) without TAO should result in an RT entry
    • PASS [expected FAIL] subtest: Changing the src of an iframe (ORIGIN-&gt;HTTP_REMOTE_ORIGIN) with TAO should result in an RT entry
    • PASS [expected FAIL] subtest: Changing the src of an iframe (ORIGIN-&gt;HTTP_REMOTE_ORIGIN) without TAO should result in an RT entry
    • PASS [expected FAIL] subtest: Changing the src of an iframe (HTTP_REMOTE_ORIGIN-&gt;ORIGIN) with TAO should result in an RT entry
    • PASS [expected FAIL] subtest: Changing the src of an iframe (HTTP_REMOTE_ORIGIN-&gt;ORIGIN) without TAO should result in an RT entry
    • PASS [expected FAIL] subtest: Changing the src of an iframe (HTTP_REMOTE_ORIGIN-&gt;HTTP_REMOTE_ORIGIN) with TAO should result in an RT entry
    • PASS [expected FAIL] subtest: Changing the src of an iframe (HTTP_REMOTE_ORIGIN-&gt;HTTP_REMOTE_ORIGIN) without TAO should result in an RT entry
  • OK /resource-timing/iframe-with-download.html
    • FAIL [expected PASS] subtest: Iframes should not report resource timing for non-handled mime-types (downloads)

      assert_equals: expected 0 but got 1
      

  • OK /resource-timing/initiator-type/dynamic-insertion.html
    • PASS [expected FAIL] subtest: A iframe should have the 'iframe' initiator type.
  • OK /resource-timing/initiator-type/iframe.html
    • PASS [expected FAIL] subtest: The initiator type for &lt;iframe&gt; must be 'iframe'
  • OK /resource-timing/nextHopProtocol-is-tao-protected.https.html
    • PASS [expected FAIL] subtest: Fetch TAO-less iframe from remote origin. Make sure nextHopProtocol is the empty string.
  • TIMEOUT /resource-timing/response-status-code.html
    • FAIL [expected TIMEOUT] subtest: This test validates the response status of resources. 89

      promise_test: Unhandled rejection with value: object "TimeoutError: Timeout was reached before load or error events fired"
      

    • FAIL [expected NOTRUN] subtest: This test validates the response status of resources. 90

      promise_test: Unhandled rejection with value: object "TimeoutError: Timeout was reached before load or error events fired"
      

    • FAIL [expected NOTRUN] subtest: This test validates the response status of resources. 91

      promise_test: Unhandled rejection with value: object "TimeoutError: Timeout was reached before load or error events fired"
      

    • FAIL [expected NOTRUN] subtest: This test validates the response status of resources. 92

      promise_test: Unhandled rejection with value: object "TimeoutError: Timeout was reached before load or error events fired"
      

    • FAIL [expected NOTRUN] subtest: This test validates the response status of resources. 93

      promise_test: Unhandled rejection with value: object "TimeoutError: Timeout was reached before load or error events fired"
      

    • FAIL [expected NOTRUN] subtest: This test validates the response status of resources. 94

      promise_test: Unhandled rejection with value: object "TimeoutError: Timeout was reached before load or error events fired"
      

    • FAIL [expected NOTRUN] subtest: This test validates the response status of resources. 95

      promise_test: Unhandled rejection with value: object "TimeoutError: Timeout was reached before load or error events fired"
      

    • FAIL [expected NOTRUN] subtest: This test validates the response status of resources. 96

      promise_test: Unhandled rejection with value: object "TimeoutError: Timeout was reached before load or error events fired"
      

    • FAIL [expected NOTRUN] subtest: This test validates the response status of resources. 97

      promise_test: Unhandled rejection with value: object "TimeoutError: Timeout was reached before load or error events fired"
      

    • FAIL [expected NOTRUN] subtest: This test validates the response status of resources. 98

      promise_test: Unhandled rejection with value: object "TimeoutError: Timeout was reached before load or error events fired"
      

    • And 1 more unexpected results...
  • OK /resource-timing/secure-iframe-in-insecure-context.html
    • PASS [expected FAIL] subtest: secureConnectionStart is reported for iframes loaded over https in http context

@github-actions
Copy link
Copy Markdown

github-actions bot commented Feb 2, 2026

⚠️ Try run (#21601045563) failed!

@servo-wpt-sync
Copy link
Copy Markdown
Collaborator

✍ Updated existing upstream WPT pull request (web-platform-tests/wpt#57468) title and body.

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

✍ Updated existing upstream WPT pull request (web-platform-tests/wpt#57468) title and body.

@jdm
Copy link
Copy Markdown
Member

jdm commented Feb 2, 2026

Excellent, that's a lot of tests that now run which previously didn't get a chance to run because we never recorded the resource timing entry. We can file followups for fixing the actual timing data and implementing the Timing Allow Origin check correctly.

@jdm
Copy link
Copy Markdown
Member

jdm commented Feb 2, 2026

You can use ./mach update-wpt https://github.com/servo/servo/actions/runs/21601045563 to update the expected test results based on that try run. You will need the gh command line tool to be installed.

@muse254
Copy link
Copy Markdown
Contributor Author

muse254 commented Feb 3, 2026

We can file followups for fixing the actual timing data and implementing the Timing Allow Origin check correctly.

I'll look out for these

@muse254 muse254 force-pushed the script/iframe-performance-timeline branch from 95671fb to e0b592d Compare February 3, 2026 04:53
@servo-wpt-sync
Copy link
Copy Markdown
Collaborator

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

@muse254 muse254 force-pushed the script/iframe-performance-timeline branch from e0b592d to 84ea71d Compare February 3, 2026 05:07
@servo-wpt-sync
Copy link
Copy Markdown
Collaborator

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

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! I've got a few small changes, but it's nice to see this working.

Comment on lines +3738 to +3740
// submit_timing will only accept timing that is of type ResourceTimingType::Resource
let mut resource_timing = timing.clone();
resource_timing.timing_type = ResourceTimingType::Resource;
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.

Mmmm, interesting. More evidence that some cleanup is needed in how these pieces are integrated in Servo.

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

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

@muse254 muse254 requested a review from jdm February 3, 2026 07:53
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.

Thank you!

@servo-highfive servo-highfive removed the S-awaiting-review There is new code that needs to be reviewed. label Feb 3, 2026
@mrobinson mrobinson added this pull request to the merge queue Feb 3, 2026
@servo-highfive servo-highfive added the S-awaiting-merge The PR is in the process of compiling and running tests on the automated CI. label Feb 3, 2026
Merged via the queue into servo:main with commit 8d4f2db Feb 3, 2026
32 checks passed
@servo-highfive servo-highfive removed the S-awaiting-merge The PR is in the process of compiling and running tests on the automated CI. label Feb 3, 2026
@muse254 muse254 deleted the script/iframe-performance-timeline branch February 3, 2026 19:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

IFrame navigation requests do not record resource timing entries

5 participants