v151 · performance · navigation timing
Cross-origin redirect timing opt-in
Until now, a navigation through a cross-origin redirect chain reported redirectCount, redirectStart, and redirectEnd as zero — even for redirects the destination site operated itself. This feature lets each redirect response opt forward into measurement by the navigation's destination origin, via the Timing-Allow-Origin response header, so the destination page can finally see and optimize its cross-origin redirect chains.
at a glance
| Milestone listing | Chrome 151 — Enabled by default |
|---|---|
| Feature detail | Desktop 151, Android 151, WebView 151; status text “Proposed” (detail updated 2026-07-13); ship stage desktop_first 151 |
| Surface | One protocol element (Timing-Allow-Origin on navigation redirect responses) and three PerformanceNavigationTiming attributes (redirectCount, redirectStart, redirectEnd) |
| Runtime feature | NavigationTimingRedirectTimingViaTAO — status stable at trunk |
| Standards body | WHATWG Fetch and WHATWG HTML (both merged via PRs fetch #1931 and html #12513); W3C Navigation Timing |
| ChromeStatus | 5078310347472896 — Cross-origin redirect timing opt-in |
Member reference
The developer-facing surface is one protocol element and three timing attributes, plus the fetch bookkeeping and algorithms that connect them. Each has stable detailed reference covering syntax, inputs, outputs, errors, context, lifecycle, examples, compatibility, and security/privacy:
Timing-Allow-Originon navigation redirects — the response header that opts a redirect forward into measurement by the destination originPerformanceNavigationTiming.redirectCount— the chain length, now exposed for opted-in cross-origin chainsPerformanceNavigationTiming.redirectStart— when the first redirect began (zero unless the chain is exposed)PerformanceNavigationTiming.redirectEnd— when the last redirect's response arrived (zero unless the chain is exposed)- navigation timing allow values list — the request/response bookkeeping: per-redirect collection (append) and the final-response clone
- navigation TAO check — the algorithm that decides, once the destination origin is known, whether every redirect allowed it
How the opt-in works
For subresources, Timing-Allow-Origin has always opted backwards: a response names the requesting origins allowed to measure it. For a navigation, the meaningful opt-in runs the other way — the page that lands (the destination) is the one that wants to measure, and each redirect in the chain must allow it. The merged Fetch change therefore records every redirect response's Timing-Allow-Origin values during the chain and, once the destination origin is known, runs the navigation TAO check: every redirect must have named either * or the destination's serialized origin, or the chain stays opaque.
Two more boundaries from the normative text. First, the exposure conditional only engages when the chain has cross-origin redirects: a purely same-origin chain always exposes its real values, regardless of referrer policy. When the chain does include a cross-origin redirect, exposure requires both that the request's client is null or its referrer is not no-referrer, and that the navigation TAO check succeeds. Second, that check runs over every redirect response in the chain — including same-origin hops: once any cross-origin redirect exists, a hop that sends no Timing-Allow-Origin (or names neither * nor the destination) fails the whole chain, and the destination sees redirectCount === 0 and zeroed redirect times, exactly as before.
Examples
// On the destination page: read the navigation's redirect timing.
const [nav] = performance.getEntriesByType("navigation");
if (nav.redirectCount > 0) {
// Every redirect in the chain opted this origin in via Timing-Allow-Origin.
console.log(`${nav.redirectCount} redirect(s), chain took`,
nav.redirectEnd - nav.redirectStart, "ms");
} else {
// No redirects, OR at least one cross-origin redirect did not opt in,
// OR this was a no-referrer navigation — the fields stay zero by design.
}
Source: Navigation Timing — PerformanceNavigationTiming; whatwg/html PR #12513
Browser compatibility
BCD has no entry for this opt-in (checked 2026-07-26) — its redirectCount entry (in api/PerformanceNavigationTiming.json) and redirectStart/redirectEnd entries (in api/PerformanceResourceTiming.json) cover the general properties, which predate and do not imply this feature. On webstatus.dev the query resolves to the broader Baseline Navigation timing feature (widely available) — not evidence about this addition, which has no distinct entry. The table below is an interim view from ChromeStatus, labelled as such.
| Engine / runtime | Support | Notes |
|---|---|---|
| Chrome | 151 | Milestone listing: Enabled by default; detail desktop + Android + WebView 151 with status text “Proposed” (updated 2026-07-13); runtime feature NavigationTimingRedirectTimingViaTAO stable at trunk |
| Edge | Not separately reported | No Edge position is recorded on ChromeStatus; no public support evidence |
| Firefox | No signal | Vendor signal recorded on the ChromeStatus entry; no BCD or public support evidence |
| Safari | Recorded positive signal | The ChromeStatus entry records a Positive signal — a recorded signal, not an official WebKit standards position (a feature this small has none) |
Vendor signals come from the ChromeStatus API feature record (checked 2026-07-26): Firefox “No signal”, Safari “Positive”, web developers “Positive” (as labelled on the ChromeStatus feature entry). For the general property's BCD entry see BCD api/PerformanceNavigationTiming.json.
Source: ChromeStatus API feature record; BCD api/PerformanceNavigationTiming.json; webstatus.dev querySpecifications
| Specification | Status |
|---|---|
| WHATWG Fetch — navigation TAO check | Living Standard (normative); landed via whatwg/fetch PR #1931 (merged) |
| WHATWG HTML — navigation timing entry creation | Living Standard (normative); landed via whatwg/html PR #12513 (merged) |
| W3C Navigation Timing — PerformanceNavigationTiming | W3C draft (normative attribute contracts) |
See also
- whatwg/fetch PR #1931 — Add TAO destination check for navigation redirect chains (merged)
- whatwg/html PR #12513 — Expose redirectCount for TAO opted-in redirect chains (merged)
- w3c/navigation-timing issue #215 — the redirectCount exposure request these PRs resolve
- WebPerfWG meeting 2026-06-04 — where the forward opt-in was aligned
- Chromium runtime_enabled_features.json5 (
NavigationTimingRedirectTimingViaTAO, stable) - MDN — PerformanceNavigationTiming: redirectCount (general property; MDN does not cover this opt-in as of 2026-07-26)
- Chrome Platform Showcase — Cross-origin redirect timing opt-in (also: timing API probe)