- From: Boris Zbarsky <bzbarsky@mit.edu>
- Date: Thu, 28 Aug 2014 19:55:43 -0400
- To: Benjamin Poulain <bpoulain@apple.com>
- CC: www-style@w3.org
On 8/28/14, 6:08 PM, Benjamin Poulain wrote:
> It would be a bit long to explain the details here, the best is probably for you to read a bit the styling code of an opensource web engine like Gecko, Webkit, blink, etc to learn more.
Thank you. I needed the laugh. ;)
> I could find a little introductory article here, that may help: http://dbaron.org/mozilla/visited-privacy
Sounds pretty familiar, yes. In fact, come to think of it, according to
http://hg.mozilla.org/mozilla-central/pushloghtml?changeset=c36e13431e6c
I reviewed that change to Gecko.
> <style>
> :matches(:visited, a) {
> display:block;
> width: 100px;
> height: 100px;
> background-color: red
> }
> </style>
> <a href=“http://w3.org”>link</a>
>
> If only the first one is match, we are in the “visited” case, and none of the properties apply.
If a UA does that, it's broken and needs to be fixed. In particular, if
it short-circuits like that, then you get different performance between
the visited and unvisited cases so you open yourself up to timing
attacks. I filed https://bugzilla.mozilla.org/show_bug.cgi?id=1060125
on this timing issue in Gecko.
To your main point, in Gecko, with :-moz-any (which is our current
prefixed implementation of :matches) the rendering problem you describe
does not occur. David's article actually explains why it does not
occur, but I'll summarize:
In Gecko, for every link, we compute its style as if it were visited and
also its style as if it were not visited. Then at rendering time, for a
short list of properties, we consult the as-if-visited style if the link
is in fact visited, and the as-if-unvisited style otherwise. The
restriction of which properties can be set via :visited is effectively
implemented in the "short list of properties" part of this setup.
In your testcase, the two computed styles end up identical, so it
doesn't matter which style is consulted for a given property, since both
return the same values.
-Boris
Received on Thursday, 28 August 2014 23:56:11 UTC