Open lukewarlow opened 1 year ago
Be interesting to hear thoughts on this. The more circumstances we can pass down this information the better but I understand it may just be an inherent limitation with this ability.
Instances that cannot communicate with the outside world, like an SVG loaded as an image (which can't run script or invoke external resources) should also be safe to pass the preferences into even when they're cross-origin.
For cross-origin things, we can probably piggyback on another notion of communication. Like, if you can postMessage() you already have an open communication channel, so there's no reason to restrict things. We just don't want to open a new communication channel.
IMO: Portals
and FencedFrame
should be considered independant top-level context
shouldn't inherit anything. This is especially important for FencedFrame
.
For cross-origin things, we can probably piggyback on another notion of communication. Like, if you can postMessage() you already have an open communication channel, so there's no reason to restrict things. We just don't want to open a new communication channel.
On one side, postMessage is an opt-in. Both side must use the feature, and they can specify/verify the origin they are talking to. On the other side, with WebPreference the communication happens passively.
They are quite different. Inheriting WebPreference cross-origin would be considered as a new kind of cross-site leak.
Idk that I agree cross origin iframes would be a leak. It's the user's data not the sites, and from that perspective the site can already send it cross origin. So why would this API be any different?
I agree that fencedframes should be completely separate. I think the portals discussion is rather academic given their development seems to have stalled, having said that I'm not overly familiar with them so unsure whether it should behave like a cross origin iframe or a fenced frame.
I have two use cases, in case it helps with thinking about this issue:
I'm not sure if these examples do touch upon any important questions here, but I figured I'd add them just in case. Thanks for your work on this proposal!
Edit: Ah, related issue for point 2 above:
Need to work out the exact specifics with regards to iframes both same-origin and cross-origin.
Same-origin iframes should probably be updated with the parent frame's preference overrides but in an opaque manner.
e.g. if the parent frame sets
colorScheme
todark
then the iframe should seeprefers-color-scheme
as dark but shouldn't readnavigator.preferences.colorScheme
asdark
.Whereas, cross-origin iframes should probably not be updated with the parent frame's preference overrides. This is an unfortunate limitation but is probably necessary to prevent new forms of data exfiltration.