On Fri, Sep 2, 2022 at 2:39 PM Yoav Weiss <yoavwe...@chromium.org> wrote:

>
>
> On Fri, Sep 2, 2022 at 2:19 PM Rune Lillesveen <futh...@chromium.org>
> wrote:
>
>> On Fri, Sep 2, 2022 at 1:37 PM Yoav Weiss <yoavwe...@chromium.org> wrote:
>>
>>> Thanks for the update! Given that this is something that web developers
>>> have been using (as a polyfill, but still) for a loooong while, I'm
>>> somewhat skeptical that we can get away with the spec as currently written.
>>> As we can't have use-counters for things passed as jquery selectors, I
>>> wonder if an HTTPArchive and a GitHub search can reveal how widespread this
>>> is.
>>>
>>> But I suspect this is a "revert first and ask questions later" kind of
>>> situation. Unfortunately, it seems like this would require a code update,
>>> as the flag is not propagated to a Chromium feature flag
>>> <https://source.chromium.org/search?q=CSSPseudoHas%20-f:out&sq=&ss=chromium%2Fchromium%2Fsrc>
>>>  AFAICT.
>>>
>>
>> That is correct.
>>
>> It could be that the best way short term is to change the implementation
>> to not allow forgiving selectors lists. Authors should be able to get the
>> same forgiving effect for :has() sprinkling :is() at appropriate places.
>>
>
> Given that a code change is required anyways, that sounds reasonable..
>

New update about the WebKit implementation:

https://github.com/w3c/csswg-drafts/issues/7676#issuecomment-1235450787

They _do_ support a forgiving selector list, with a small twist that if all
selectors are invalid and end up with an empty :has(), the selector is
dropped.


>
>>
>> Slightly longer term, the spec issue for possibly changing it is here:
>> https://github.com/w3c/csswg-drafts/issues/7676
>>
>> On Fri, Sep 2, 2022 at 1:11 PM Rune Lillesveen <futh...@chromium.org>
>>> wrote:
>>>
>>>> On Fri, Sep 2, 2022 at 1:09 PM Rune Lillesveen <futh...@chromium.org>
>>>> wrote:
>>>>
>>>>> On Fri, Sep 2, 2022 at 11:40 AM Rune Lillesveen <futh...@chromium.org>
>>>>> wrote:
>>>>>
>>>>>> Hi all,
>>>>>>
>>>>>> We have an incoming issue for jQuery that seems pretty serious for
>>>>>> them:
>>>>>>
>>>>>
>>>>> An update on the impact for jQuery:
>>>>>
>>>>> https://github.com/jquery/jquery/issues/5098#issuecomment-1235351545
>>>>>
>>>>
>>>> There was an issue filed for the CSSWG
>>>> https://github.com/w3c/csswg-drafts/issues/7676
>>>>
>>>> https://crbug.com/1358953
>>>>>>
>>>>>> The problem is that jQuery uses the native implementation of :has()
>>>>>> when present, but the feature detection detects support for other custom
>>>>>> jQuery selectors inside :has() because of :has() accepting forgiving
>>>>>> selectors.
>>>>>>
>>>>>> It should be possible to fix this for jQuery, but the problem is for
>>>>>> existing content which relies on this feature detection.
>>>>>>
>>>>>> The reason why this was not detected when Safari shipped :has(), is
>>>>>> that Safari does not accept <forgiving-relative-selector-list> like the
>>>>>> spec says. I have filed
>>>>>> https://bugs.webkit.org/show_bug.cgi?id=244708 against WebKit.
>>>>>>
>>>>>> On Thu, Jun 2, 2022 at 5:57 PM Chris Harrelson <chris...@chromium.org>
>>>>>> wrote:
>>>>>>
>>>>>>> LGTM3, once the implementation aligns with the WG decisions, there
>>>>>>> are tests, and the corresponding spec PRs have landed.
>>>>>>>
>>>>>>> Congratulations to all who worked on this feature! I think it's a
>>>>>>> great addition to the platform that developers will really like.
>>>>>>>
>>>>>>> On Thu, Jun 2, 2022 at 1:25 AM Daniel Bratell <bratel...@gmail.com>
>>>>>>> wrote:
>>>>>>>
>>>>>>>> LGTM2
>>>>>>>>
>>>>>>>> /Daniel
>>>>>>>>
>>>>>>>>
>>>>>>>> On 2022-06-02 10:05, Yoav Weiss wrote:
>>>>>>>>
>>>>>>>> Thanks for the update!
>>>>>>>>
>>>>>>>> LGTM1 to ship, once we're aligned with the spec and WG decisions.
>>>>>>>>
>>>>>>>> On Thu, Jun 2, 2022 at 9:25 AM Byungwoo Lee <b...@igalia.com>
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>>> There is an update!
>>>>>>>>>
>>>>>>>>>    1. All the :has() related issues have been resolved in CSSWG
>>>>>>>>>    <https://lists.w3.org/Archives/Public/www-style/2022Jun/0003.html>
>>>>>>>>>    .
>>>>>>>>>    (Thanks to everyone who arranged and discussed!)
>>>>>>>>>
>>>>>>>>>    #6399 <https://github.com/w3c/csswg-drafts/issues/6399> Remove
>>>>>>>>>    the :scope dependency from the relative selectors definition ()
>>>>>>>>>      -> Remove special handling of :scope in relative selectors
>>>>>>>>>    generally
>>>>>>>>>    #6952 <https://github.com/w3c/csswg-drafts/issues/6952> Consider
>>>>>>>>>    disallowing logical combination pseudo-classes inside :has()
>>>>>>>>>      -> Disallow nesting :has() inside :has()
>>>>>>>>>    #7280 <https://github.com/w3c/csswg-drafts/issues/7280> Detecting
>>>>>>>>>    :has() restrictions
>>>>>>>>>      -> @supports uses non-forgiving parsing for all selectors
>>>>>>>>>    #6845 <https://github.com/w3c/csswg-drafts/issues/6845> Consider
>>>>>>>>>    disallowing :has() outside the rightmost compound
>>>>>>>>>      -> Close no change
>>>>>>>>>    #7211 <https://github.com/w3c/csswg-drafts/issues/7211> Consider
>>>>>>>>>    disallowing :scope inside :has()
>>>>>>>>>      -> Closed as a duplicate of #6399 (continues to be allowed
>>>>>>>>>    inside :has())
>>>>>>>>>    #7212 <https://github.com/w3c/csswg-drafts/issues/7212> Consider
>>>>>>>>>    disallowing :host, :host(), :host-context() inside :has()
>>>>>>>>>      -> No change; :host etc. continues to be allowed inside
>>>>>>>>>    :has()
>>>>>>>>>
>>>>>>>>>    2.  Chrome implementation has already followed the above
>>>>>>>>>    resolutions.
>>>>>>>>>    Currently, :has() works as expected based on the spec and the
>>>>>>>>>    above resolved results.
>>>>>>>>>    The only bug that remains is about some invalidation cases for
>>>>>>>>>    logical combinations inside :has() (bug 1331207
>>>>>>>>>    <https://bugs.chromium.org/p/chromium/issues/detail?id=1331207>),
>>>>>>>>>    and I prepared CLs to fix the bug.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Please let us know if there is any other considerations.
>>>>>>>>>
>>>>>>>>> Thank you!
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On 5/20/22 14:49, Byungwoo Lee wrote:
>>>>>>>>>
>>>>>>>>> Thank you for the reply!
>>>>>>>>>
>>>>>>>>> To address the issues, I've added a comment based on the latest
>>>>>>>>> communication in this thread.
>>>>>>>>> -
>>>>>>>>> https://github.com/w3c/csswg-drafts/issues/7211#issuecomment-1132432496
>>>>>>>>>
>>>>>>>>> Hope this helps to solve the issues.
>>>>>>>>>
>>>>>>>>> 2022년 5월 19일 목요일 오전 7시 50분 52초 UTC+9에 Chris Harrelson님이 작성:
>>>>>>>>>
>>>>>>>>>> Hi Byungwoo,
>>>>>>>>>>
>>>>>>>>>> I think it would be better to resolve the referenced issues at
>>>>>>>>>> the CSSWG, including aspects Antti mentioned here, before shipping.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On Wed, May 18, 2022 at 6:05 AM Byungwoo Lee <bl...@igalia.com>
>>>>>>>>>> wrote:
>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> On 5/18/22 17:33, Antti Koivisto wrote:
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> On Tuesday, May 17, 2022 at 9:19:03 AM UTC+3 bl...@igalia.com
>>>>>>>>>>> wrote:
>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> On 5/17/22 03:17, Emilio Cobos Álvarez wrote:
>>>>>>>>>>>>
>>>>>>>>>>>> On 5/16/22 11:05, Byungwoo Lee wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>         Anticipated spec changes
>>>>>>>>>>>>
>>>>>>>>>>>> There are 4 open issues posted on the csswg draft.
>>>>>>>>>>>>
>>>>>>>>>>>>   * Remove scope dependency from relative selectors definition:
>>>>>>>>>>>>     https://github.com/w3c/csswg-drafts/issues/6399
>>>>>>>>>>>>   * Disallowing logical combination pseudo classes inside
>>>>>>>>>>>> ':has()':
>>>>>>>>>>>>     https://github.com/w3c/csswg-drafts/issues/6952
>>>>>>>>>>>>   * Disallowing ':scope' inside ':has()':
>>>>>>>>>>>>     https://github.com/w3c/csswg-drafts/issues/7211
>>>>>>>>>>>>   * Disallowing ':host', ':host()', ':host-context()' inside
>>>>>>>>>>>> ':has()':
>>>>>>>>>>>>     https://github.com/w3c/csswg-drafts/issues/7212
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> It'd be great to get resolution on these issues before
>>>>>>>>>>>> shipping, IMO.
>>>>>>>>>>>>
>>>>>>>>>>>> In general, given how the usefulness of this feature relies on
>>>>>>>>>>>> browser engines having predictable performance (the feature is 
>>>>>>>>>>>> useless if
>>>>>>>>>>>> WebKit or Firefox get cases fast that Chrome gets slow or 
>>>>>>>>>>>> vice-versa), it'd
>>>>>>>>>>>> be great to document in the spec some of these limitations and the
>>>>>>>>>>>> reasoning for them.
>>>>>>>>>>>>
>>>>>>>>>>>> All the above 4 issues are essentially related to the case of
>>>>>>>>>>>> ':is()' inside ':has()'.
>>>>>>>>>>>>
>>>>>>>>>>>> The dependency between the 4 issues can be summarized as
>>>>>>>>>>>> follows:
>>>>>>>>>>>>
>>>>>>>>>>>>    - To avoid increasing invalidation complexity, disallow
>>>>>>>>>>>>    ':is()' or ':where()' inside ':has()' (#6952)
>>>>>>>>>>>>       - ':scope' inside ':has()' has the same (or worse)
>>>>>>>>>>>>       problem as ':is()' inside ':has()', so disallow ':scope' 
>>>>>>>>>>>> inside ':has()'
>>>>>>>>>>>>       (#7211)
>>>>>>>>>>>>          - After ':scope' is disallowed inside ':has()', we
>>>>>>>>>>>>          can keep the current definition of absolutizing with 
>>>>>>>>>>>> ':scope' because
>>>>>>>>>>>>          ':scope' will not be used explicitly inside the ':has()' 
>>>>>>>>>>>> (#6399)
>>>>>>>>>>>>          - ':host', ':host()', ':host-context()' is
>>>>>>>>>>>>          meaningless unless it is used with ':scope' inside 
>>>>>>>>>>>> ':has()' (#7212)
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> The ':is()' inside ':has()' case is the start of the 4 issues,
>>>>>>>>>>>> and most engines seems to agree to disallow the ':is()' inside 
>>>>>>>>>>>> ':has()'
>>>>>>>>>>>> case now.
>>>>>>>>>>>>
>>>>>>>>>>>> If so, I think it would be OK to ship to Chrome with explicit
>>>>>>>>>>>> limitations for the above cases even if those issues are not yet 
>>>>>>>>>>>> addressed
>>>>>>>>>>>> in the spec. How do you think about this?
>>>>>>>>>>>>
>>>>>>>>>>> WebKit does not disallow :is() inside :has() and I don't see a
>>>>>>>>>>> particular reason to. While not very useful it does not increase 
>>>>>>>>>>> complexity
>>>>>>>>>>> over :not() inside :has() (which is supported and people have found
>>>>>>>>>>> useful). The only current limitation with logical combinator 
>>>>>>>>>>> pseudo-classes
>>>>>>>>>>> is disallowing :has() nested inside :has() (which increases 
>>>>>>>>>>> complexity a
>>>>>>>>>>> lot without enabling anything useful).
>>>>>>>>>>>
>>>>>>>>>>>   antti
>>>>>>>>>>>
>>>>>>>>>>> I think I misunderstood that the option of disallowing ':is()'
>>>>>>>>>>> inside ':has()' is still alive. Also I overlooked that ':not()' 
>>>>>>>>>>> inside
>>>>>>>>>>> ':has()' has the same problem as ':is()' inside ':has()'.
>>>>>>>>>>>
>>>>>>>>>>> I communicated with Antti about the above limitations, and we
>>>>>>>>>>> both agreed these:
>>>>>>>>>>>
>>>>>>>>>>>    - Positive on disallowing explicit ':scope' inside ':has()'
>>>>>>>>>>>    since ':has()' has an implicit scope.
>>>>>>>>>>>    - Positive on disallowing ':has()' inside ':has()' since it
>>>>>>>>>>>    can increase complexity a lot.
>>>>>>>>>>>    - Should allow ':is()'/':where()' inside ':has() since:
>>>>>>>>>>>       - we should consider ':is()', ':where()', ':not()' as a
>>>>>>>>>>>       whole in terms of complexity,
>>>>>>>>>>>       - those cases (especially ':not()') enables useful cases
>>>>>>>>>>>       - invalidation performance will not be great but also it
>>>>>>>>>>>       will not be different compared to some other worst cases
>>>>>>>>>>>       - both WebKit and Chrome haven't considered some
>>>>>>>>>>>       invalidation cases, (
>>>>>>>>>>>       https://codepen.io/byung-woo/pen/vYdxPMa) but fixing the
>>>>>>>>>>>       bug will not be very complex or difficult.
>>>>>>>>>>>
>>>>>>>>>>> Based on this consensus, I'm going to allow ':is()' and
>>>>>>>>>>> ':where()' inside ':has()' before shipping.
>>>>>>>>>>>
>>>>>>>>>>> The bug pointed at above will *not* be fixed before shipping.
>>>>>>>>>>>
>>>>>>>>>>> Since it is positive to disallow explicit ':scope' inside
>>>>>>>>>>> ':has()', I think disallowing ':host()' inside ':has()' is still 
>>>>>>>>>>> reasonable.
>>>>>>>>>>>
>>>>>>>>>>> How about this?
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Byungwoo.
>>>>>>>>>>>
>>>>>>>>>>> --
>>>>>>>>>>> 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+...@chromium.org.
>>>>>>>>>>> To view this discussion on the web visit
>>>>>>>>>>> https://groups.google.com/a/chromium.org/d/msgid/blink-dev/b8aba55a-2ea6-4b75-bf13-f04e27661938%40igalia.com
>>>>>>>>>>> <https://groups.google.com/a/chromium.org/d/msgid/blink-dev/b8aba55a-2ea6-4b75-bf13-f04e27661938%40igalia.com?utm_medium=email&utm_source=footer>
>>>>>>>>>>> .
>>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>> 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/4af7fbf5-1bf5-4c51-b82c-6d01e2c61634n%40chromium.org
>>>>>>>>> <https://groups.google.com/a/chromium.org/d/msgid/blink-dev/4af7fbf5-1bf5-4c51-b82c-6d01e2c61634n%40chromium.org?utm_medium=email&utm_source=footer>
>>>>>>>>> .
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> 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/b7f0fddb-cf49-5d4d-55ea-592f7a7578d5%40igalia.com
>>>>>>>>> <https://groups.google.com/a/chromium.org/d/msgid/blink-dev/b7f0fddb-cf49-5d4d-55ea-592f7a7578d5%40igalia.com?utm_medium=email&utm_source=footer>
>>>>>>>>> .
>>>>>>>>>
>>>>>>>> --
>>>>>>>> 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/CAL5BFfXap%3DKEvkQgr2ZZRtXPNFJvm1xJfRG%2Bdje7aH56obdU0g%40mail.gmail.com
>>>>>>>> <https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAL5BFfXap%3DKEvkQgr2ZZRtXPNFJvm1xJfRG%2Bdje7aH56obdU0g%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>>>>>>> .
>>>>>>>>
>>>>>>>> --
>>>>>>> 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/CAOMQ%2Bw-YkwgDK0F_zMQN4R3sZECCd3vT5-y2-mvDCvM%2BGX_HhQ%40mail.gmail.com
>>>>>>> <https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAOMQ%2Bw-YkwgDK0F_zMQN4R3sZECCd3vT5-y2-mvDCvM%2BGX_HhQ%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>>>>>> .
>>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Rune Lillesveen
>>>>>>
>>>>>>
>>>>>
>>>>> --
>>>>> Rune Lillesveen
>>>>>
>>>>>
>>>>
>>>> --
>>>> Rune Lillesveen
>>>>
>>>>
>>
>> --
>> Rune Lillesveen
>>
>>

-- 
Rune Lillesveen

-- 
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/CACuPfeSCbtbz0bbrJd-KKMhxeUwYVPE1QDv5U_%2B5kBJreQ4QBg%40mail.gmail.com.

Reply via email to