demo · v132

The top-level nav carve-out

Subresource fetch and iframe-src key the blob by the full storage key triplet. Top-level navigation keys it by frame origin only. The spec deliberately keeps download links portable. Walk through what survives.

cross-site link target

resolved by storage key

fetch(blob)subresource — full key
img.src = blobsubresource — full key
iframe.src = blobsubframe nav — full key
XHR(blob)subresource — full key

resolved by origin only

<a href=blob>top-level nav — origin only
location = blobtop-level nav — origin only
window.open(blob)opens new top — origin only
choose a scenario above to walk it through

relevant spec excerpt

// from html spec: navigate-to-a-fragment / fetch step

// subresource: BlobURLStoreImpl::ResolveAsURLLoaderFactory
//   key = StorageKey(top_level_site, frame_origin, has_cross_site_ancestor)
//   blob_store.lookup(blob_url, key)  // strict

// top-level nav: BlobURLStoreImpl::ResolveForNavigation
//   key = origin(blob_url)  // permissive: same as v131 behaviour
//   blob_store.lookup(blob_url, key.origin_only_partition())

see also