Skip to content

Only analyze requests belonging to the navigated url's page#16

Merged
marcusosterberg merged 1 commit into
mainfrom
fix/filter-har-to-first-page
Jul 15, 2026
Merged

Only analyze requests belonging to the navigated url's page#16
marcusosterberg merged 1 commit into
mainfrom
fix/filter-har-to-first-page

Conversation

@marcusosterberg

Copy link
Copy Markdown
Contributor

Part of a sweep across the HAR-consuming plugins; same problem class as Webperf-se/webperf_core#1557 / #1558, Webperf-se/plugin-pagenotfound#156, Webperf-se/plugin-css#159, Webperf-se/plugin-html#130 and Webperf-se/plugin-javascript#130.

Problem

Concurrent browsertime runs on one host can race for the same Chrome DevTools port; the crossed CDP session records the other run's page navigation into this run's HAR, so the HAR can contain more than one page.

transform2SimplifiedData scanned every entry in the whole HAR. Its first-html-as-primary fallback could even pick another website's document as the analyzed page, contaminating the robots.txt/security.txt/sitemap/feed analysis.

Fix

New getFirstPageEntries(navUrl, harData):

  1. keeps only entries whose pageref belongs to the first page in the HAR's pages array;
  2. verifies the first recorded request's hostname matches the navigated url's hostname (new URL(...) punycodes IDN hostnames on both sides) — on mismatch nothing is analyzed.

The origin check is against the navigated url of each message (robots.txt, sitemap, etc.), so sitemaps legitimately hosted on another domain keep working. HARs without a pages array and entries without pageref behave exactly as before.

Validation

Synthetic crossed HARs: primary anchors to the navigated url and foreign HTML never becomes the primary fallback; foreign pages excluded from htmls; origin mismatch yields an empty analysis; legacy HAR without pages unchanged; eslint clean.

A browsertime HAR can contain more than one page, for example when a
concurrent browsertime run on the same host races for the same Chrome
DevTools port and its crossed CDP session records another website's
page load into this run's recording (see
Webperf-se/webperf_core#1557).

This analyzer scanned every entry in the whole HAR, and its
first-html-as-primary fallback could pick another website's document,
so a crossed-in recording could contaminate the robots.txt, security
.txt, sitemap and feed analysis of the tested website.

Filter entries to the ones belonging to the first page in the HAR's
pages array, and verify that the recording's first request matches the
navigated url's hostname (the URL API normalizes IDN hostnames to
punycode on both sides). The check is per navigated url, so sitemaps
legitimately hosted on another domain keep working. On mismatch
nothing is analyzed. HARs without a pages array and entries without
pageref behave as before.
@marcusosterberg
marcusosterberg merged commit be58dee into main Jul 15, 2026
1 check failed
@marcusosterberg
marcusosterberg deleted the fix/filter-har-to-first-page branch July 15, 2026 17:24
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.

1 participant