Description
For simplicity, let's start at https://html.spec.whatwg.org/multipage/links.html#following-hyperlinks-2 for a javascript: URL.
Step 12 creates a new request. It's not clear what its client is at this point (see whatwg/fetch#907), but given that various parts of the navigation algorithm set the client to things (e.g. in https://html.spec.whatwg.org/multipage/browsing-the-web.html#process-a-navigate-fetch), I'm going to assume it's null
at the moment.
We then call into https://html.spec.whatwg.org/multipage/browsing-the-web.html#navigate which in step 13 calls into https://html.spec.whatwg.org/multipage/browsing-the-web.html#javascript-protocol. Step 2 of this calls into https://w3c.github.io/webappsec-csp/#should-block-navigation-request which in step 2 does:
For each policy in navigation request’s client’s global object’s CSP list:
So by that point we should really have a client set up, but we don't seem to.
In terms of what implementations do... For the specific case of <a href>
, Chrome doesn't support targeting it, so there is only one sane global to use around. But for location.href
sets or modifications of the src
attribute of <iframe>
, it should be observable which global's CSP gets used here.