Repository navigation
Conversation
|
What's the motivation behind privacy-preserving rendering of subtitles and captions not taking into account user preferences? As I understand it, WebVTT rendering done by the UA or OS is already supposed to be privacy-preserving, and the current design choice is that there are no Web APIs for querying user preferences or for extracting styling choices from the rendered captions. It seems odd that privacy-preservation should have a negative impact on accessibility settings that aren't exposed to pages. (aside: I actually don't think the argument for prohibiting Web APIs for accessing user settings holds up any more, but that's a whole different discussion) |
|
This is a rendering mode that allows for arbitrary read back. Maybe instead of calling it privacy-preserving we should call it "read-back rendering mode". |
|
That would be a lot clearer, yes, seems like I got a whole different impression from the name alone. Not sure if this PR is the right place for the discussion (please point me to the right place: there's no linked issue), but since I'm here: Is this related to test drivers/engines? I'd expect test engines, when inspecting rendering results, to be able to choose whether to use this "read-back rendering mode" or to be able to read back the result rendered with a provided context of specific user settings. |
|
After discussion with @annevk on chat I'll rename it "read-back-allowed rendering" since read back might not actually happen. |
The test drivers/engines is an interesting point we had not considered. We have thought to refer to read-back-allowed in the SVG spec, where there are issues with SVG-as-Image used as an image source in a canvas and the related tainting behavior. |
| data</span> is <span>CORS-cross-origin</span> must not be rendered.</p> | ||
|
|
||
| <p>During <span>read-back-allowed rendering</span>, controls, subtitles and captions must not be | ||
| rendered.</p> |
There was a problem hiding this comment.
And same here obvs. Note that, while CORS-violating images still leak sizing info, so observing the geometry via other layout effects doesn't leak any further info, this isn't necessarily true for these elements. Dunno if you can use anchorpos to observe their geometry indirectly, but if we assume that someday you can, this would be an info leak. We probably do mean "as if display:none" here, at least for subs/captions, then? They float on the video so there's no layout side-effects from making them not render boxes.
Probably also useful to clarify that this applies to these elements even on non-CORS-cross-origin videos, just to contrast it with the preceding bullet point.
|
Ah here we go, the term we want to lean on for "not rendered" is instead "invisible", from Display 4. Not painted, not hit-tested, etc. |
|
|
||
| <p>During <span>read-back-allowed rendering</span>, any <span data-x="CSS box">CSS boxes</span> | ||
| generated by controls, subtitles, and captions must be <span data-x="invisible | ||
| box">invisible</span>.</p> |
There was a problem hiding this comment.
This should also apply to audio elements. At least the controls, not sure if audio elements can have captions.
There was a problem hiding this comment.
Audio elements can't have captions, but it seems just as well to just make this about all media elements and letting the captions part be a no-op for audio elements.
| <p class="note">This also applies to <code>video</code> elements whose <span>media data</span> is | ||
| <span>CORS-same-origin</span>.</p> | ||
|
|
||
| <p class="warning">This affects the accessibility of <code>video</code> elements. Authors are |
There was a problem hiding this comment.
This seems like the wrong explanation. We are not rendering controls or subtitles because we cannot adhere to accessibility settings without letting the user be fingerprinted.
| <p>During <span>read-back-allowed rendering</span>, any <span data-x="CSS box">CSS boxes</span> | ||
| generated by <code>img</code> and <code>input</code> elements whose <span>current request</span>'s | ||
| <span data-x="img-req-data">image data</span> is <span>CORS-cross-origin</span> must be <span | ||
| data-x="invisible box">invisible</span>.</p> |
There was a problem hiding this comment.
For img elements we should have an equivalent requirement for controls I think as they can now have controls as well.
| </ul> | ||
|
|
||
| <p>During <span>read-back-allowed rendering</span>, <span data-x="widget">widgets</span> must not | ||
| use <span>native appearance</span>.</p> |
There was a problem hiding this comment.
Can we add an XXX here that we want this to be base appearance?
| the <code data-x="selector-link">:link</code> and <code data-x="selector-visited">:visited</code> | ||
| <span data-x="pseudo-class">pseudo-classes</span>. This specification does not specify how to | ||
| preserve user privacy, but user agents must align with what they do in other contexts, like | ||
| style recalculation and selector matching.</p> |
There was a problem hiding this comment.
Only a single newline before <h4>? Seems okay if that's consistent, but not sure.
|
|
||
| <p>During <span>read-back-allowed rendering</span>, any <span data-x="CSS box">CSS boxes</span> | ||
| generated by <span>CORS-cross-origin</span> content must be <span data-x="invisible | ||
| box">invisible</span>. This includes features defined by other specifications, including but not |
There was a problem hiding this comment.
I'm not sure this works because CSS backgrounds are not boxes. I think we have to define for each property how it should behave. E.g., for background it could behave as none.
|
AI found further leaks:
That's the most important. Full AI review |
This is right, the mitigation isn't the same. The wording I used was:
By "align with" I mean that a script that uses In the spirit of CSS spec's flexibility here, I think I'll just say "must preserve user privacy" and have a note pointing out that the mitigations already applied for CSS might not be enough. |
This is surprising, do you mean that when foo.example embeds |
|
Yeah, I think navigations always end up with a non-opaque response. With navigations it's also more tricky as you have the source (document with the link that navigates the target), the ancestor chain (if the target is in a frame), and the target. And you have redirects of course that should probably taint as well. Might well be the same problem/solution as that other PR. |
This is for #11588, but because the concept is unused we can consider it editorial.
/index.html ( diff )
/infrastructure.html ( diff )
/rendering.html ( diff )