On Tue, Sep 3, 2024 at 11:00 PM Domenic Denicola <dome...@chromium.org>
wrote:

>
> On Thursday, August 29, 2024 at 12:48:36 AM UTC+9 David Baron wrote:
>
> Anticipated spec changes
>
> Open questions about a feature may be a source of future web compat or
> interop issues. Please list open issues (e.g. links to known github issues
> in the project for the feature specification) whose resolution may
> introduce web compat/interop risk (e.g., changing to naming or structure of
> the API in a non-backward-compatible way).
> There are related open discussions in:
> https://github.com/w3c/csswg-drafts/issues/10083
> https://github.com/w3c/csswg-drafts/issues/10786
> https://github.com/w3c/csswg-drafts/issues/10787
> https://github.com/w3c/csswg-drafts/issues/10788
> https://github.com/w3c/csswg-drafts/issues/10794
> but I don't think any of these discussions justify delaying shipping these
> changes. We can follow up with future changes to reflect future spec
> resolutions.
>
>
> I really appreciate the transparency in you finding and listing all of
> these issues.
>
> I tried to read through several of them but they're relatively long, and
> in some cases, progress has been made but not enough to fully close the
> issue.
>
> Would you be able to give us a one- or two-sentence summary for each of
> them, indicating what potential breaking changes might come out of such
> discussions, and why you think it'll be easy to fast-follow with such
> future changes?
>


   - The remaining work in w3c/csswg-drafts#10083
   <https://github.com/w3c/csswg-drafts/issues/10083> is about getting spec
   text written to reflect things that we've already resolved regarding
   part-like pseudo-elements.  This affects the new part-like pseudo-elements
   concept and not ::part() itself, although it includes the interaction
   between the two.  So it doesn't affect anything that's currently shipping
   or proposed to ship here.
   - w3c/csswg-drafts#10786 is about a disagreement between the spec (one
   one side) and the implementations in Chromium, Gecko, and WebKit (all on
   the other side).  The implementations treat "disallowed" as being invalid
   at parse time, whereas the spec says the pseudo-classes and pseudo-elements
   that are disallowed after part are valid at parse-time but never match.
   The change proposed here is about increasing the set of things that are
   allowed, so it reduces the space where the disagreement that this issue
   covers applies.  This change could be made separately if we decide not to
   change the spec (and thus need to change all implementations), though the
   compat risk of making such a change does increase with time.
   - w3c/csswg-drafts#10787
   <https://github.com/w3c/csswg-drafts/issues/10787> is about the fact
   that the spec's wording on which pseudo-classes are allowed after ::part()
   isn't specific enough for all implementors to make the same (allowed vs.
   disallowed) decisions for every pseudo-class.  While we should definitely
   make the spec better, the test results
   
<https://wpt.fyi/results/css/css-shadow-parts/pseudo-classes-after-part.html?label=master&label=experimental>
   show that implementations now (with the changes I'm proposing to ship)
   largely agree (many of the differences there are about which pseudo-classes
   are implemented at all), and this change is a clear improvement in interop
   relative to the same test results on stable
   
<https://wpt.fyi/results/css/css-shadow-parts/pseudo-classes-after-part.html?label=stable&label=master>.
   I think the substantive difference remaining is probably whether :has() is
   allowed, and I'm comfortable defending the position that :has() is clearly
   disallowed by the spec's wording that disallows "pseudo-classes that match
   based on tree information rather than local element information".  (Leaving
   :has() disallowed for now is also a bias in favor of less change.)
   - w3c/csswg-drafts#10788
   <https://github.com/w3c/csswg-drafts/issues/10788> is about whether the
   & nesting selector is allowed after ::part().  (I couldn't find any spec
   text that defines this one way or the other.)  I haven't changed this as
   part of these changes, but the spec should be clear, and we can change this
   later if needed.  It currently doesn't work in any of Chromium, Gecko, or
   WebKit.
   - w3c/csswg-drafts#10794
   <https://github.com/w3c/csswg-drafts/issues/10794> is another issue that
   applies to the future work on part-like pseudo-elements rather than this
   change.  We need to audit all the existing pseudo-elements to make sure
   their definitions categorize them correctly.
   - w3c/csswg-drafts#10806
   <https://github.com/w3c/csswg-drafts/issues/10806> was asking whether it
   made sense to allow view-transition pseudo-elements after ::part(), or
   whether they should have an exception to the "all pseudo-elements are
   allowed after ::part()" rule.  The consensus in the discussion seemed to be
   that no further exception was warranted, so I included the view transition
   pseudo-elements in these changes, per the current spec.  The test
   
<https://wpt.fyi/results/css/css-shadow-parts/pseudo-elements-after-part.html?label=experimental&label=master>
   shows that this decision agrees with the implementation of those
   pseudo-elements in progress in WebKit.
   - w3c/csswg-drafts#10807
   <https://github.com/w3c/csswg-drafts/issues/10807> was asking whether
   ::slotted() is allowed after ::part().  In this case the spec is clear that
   it is allowed (since all pseudo-elements other than ::part() itself are
   allowed).  However, it's hard to implement, probably has weak or
   nonexistent use cases, and existing implementations don't do it properly
   (Gecko treats it as invalid, WebKit allows it syntactically but it doesn't
   work).  Pending the resolution of this issue, I left ::slotted() as
   disallowed in Chrome.  (This means I knowingly left one case where we're
   still not following the spec, by leaving the current behavior rather than
   changing it as part of this intent.)  However, if the conclusion in that
   discussion is that it is worth implementing, we could allow it later and
   implement the underlying behavior.  Doing so may well be more work than the
   changes here.

-David

-- 
You received this message because you are subscribed to the Google Groups 
"blink-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to blink-dev+unsubscr...@chromium.org.
To view this discussion on the web visit 
https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAG0MU3j%2BFboFs2Yh7kE_%3Dx3Qzb%2BwckNCh7xsqybNNU5X-0OdEQ%40mail.gmail.com.

Reply via email to