The customer iframes a Resi-hosted player page. Inside the frame video.html carries
data-resi-body, so isInOwnFrame() is true, but window.self !== window.top
— not standalone. The player and the sign-in page share the Resi origin; both are
third-party to whatever host is in your address bar.
identifyViewer travels as a query param and is mapped to data-identify-viewer by
standAlone() in the loader, which runs only because data-resi-body is present. The
player consults the attribute only when the player profile supplies no mode of its own.
| This page | |
|---|---|
| Player origin | |
| Relationship | |
| Frame src |
Every cross-origin postMessage delivered to this window, with its origin. This is the leak check:
the sign-in result is addressed to the player frame with an explicit targetOrigin, so
nothing from the auth flow should ever appear here. A payload carrying a uid or
viewerId below means someone passed '*', and every other script on a customer's page
would be reading viewer identity.
Same-origin messages are hidden by default. Browser extensions inject content scripts into this page and some post on a timer — React DevTools every 500ms — and they carry this page's own origin. A leak cannot: it would arrive from the player frame, a different origin. Repeats collapse into a count.
firebase:authUser:<apiKey>:[DEFAULT] bucket, not a
missing one.
Any host except the player's own. Two Cloudflare projects already exist and each pages.dev project
is its own site under the Public Suffix List, which makes them a genuine cross-site pair:
Locally, npx vite --port 5050 --host serves this at
/iframe-embed-cf.html. That is cross-site too, but localhost is special-cased for
storage and cookies in several browsers, so treat a local pass as wiring confirmation only — partitioning
and ITP behaviour need the deployed hosts.