Thank you for checking the issue and sorry for not being able to prevent it in advance.
I missed the risk of conflicting with JQuery's :has() implementation. I apologize for not checking enough. I made a CL to avoid current JQuery conflict by following the WebKit behavior: - https://chromium-review.googlesource.com/c/chromium/src/+/3868781 After the CL merged, these web-platform-tests results will be same with WebKit: - https://wpt.fyi/results/css/selectors/has-error-recovery.html - https://wpt.fyi/results/css/selectors/parsing/parse-has-disallow-nesting-has-inside-has.html - https://wpt.fyi/results/css/selectors/parsing/parse-has.html If it looks OK, I'll try to merge it asap. 2022년 9월 2일 금요일 오후 9시 52분 35초 UTC+9에 Rune Lillesveen님이 작성: > On Fri, Sep 2, 2022 at 2:39 PM Yoav Weiss <yoav...@chromium.org> wrote: > >> >> >> On Fri, Sep 2, 2022 at 2:19 PM Rune Lillesveen <fut...@chromium.org> >> wrote: >> >>> On Fri, Sep 2, 2022 at 1:37 PM Yoav Weiss <yoav...@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 <fut...@chromium.org> >>>> wrote: >>>> >>>>> On Fri, Sep 2, 2022 at 1:09 PM Rune Lillesveen <fut...@chromium.org> >>>>> wrote: >>>>> >>>>>> On Fri, Sep 2, 2022 at 11:40 AM Rune Lillesveen <fut...@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 <chri...@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 <brat...@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 <bl...@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+...@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+...@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+...@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+...@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/3d295acd-7afe-44c6-ba67-00612808699bn%40chromium.org.