Added missing links.

2023년 1월 6일 금요일 오전 12시 52분 25초 UTC+9에 Byungwoo Lee님이 작성:

> Thanks for asking!
>
>
> > Is this change covered by a base feature flag?
>
> This is behind 'CSSAtSupportsAlwaysNonForgivingParsing' flag, and the flag 
> doesn't have 'base_feature' field yet. I'll add the field to the feature 
> before enable it.
>
>
> > Can you clarify if the ':has()' behavior will change here or not? This 
> last sentence seems to contradict the original message of the intent.
>
> > Can you confirm that both these cases won't break?
>
> There's a bit of twisted history here, so it would be better to answer 
> these two questions at once. (Sorry for the long answer!)
>
>
> 1. What can this feature change?
>
> After this feature enabled, `@supports selector()` can return different 
> result when it checks forgiving-parsing pseudo class.
>
> For example, `@supports selector(:where(:foo, a))` returns true now 
> (forgiving parsing drops invalid `:foo` inside `:where()`, so the 
> `:where(:foo, a)` becomes a valid selector `:where(a)` after forgiving 
> parsing), but it will return false after this feature enabled 
> (`:where(:foo, a)` will be invalid inside `@supports selector()`).
>
>
> 2. How is this feature related to `:has()`?
>
> This `@supports` behavior change was applied to the spec [1] while 
> resolving an issue of `:has()` [2]. At that time, `:has()` was a 
> forgiving-parsing pseudo class. So this feature was able to change the 
> result of `@supports selector(:has(:foo, a))` at first.
>
> But it is not true now since `:has()` is changed to unforgiving while 
> resolving the jQuery `:has()` conflict issue [3].
>
> Now this feature doesn't change the `@supports selector(:has(:foo, a))` 
> result. `@supports selector(:has(:foo, a))` returns always false regardless 
> of this feature since `:has(:foo, a)` is an invalid selector both inside 
> and outside of `@supports selector()`.
>
>
> 3. The history about empty `:has()`
>
> This is a tricky part.
> When the 105(the first `:has()` enabled version) is released to stable, a 
> workaround was merged [4] to avoid the jQuery conflict issue. 
>
> At that time, `:has()` was a forgiving-parsing pseudo class, so 
> `:has(:foo)` and `:has()` should be a valid selector.
>
> But the workaround changed the behavior - make `:has()` invalid when all 
> the arguments are dropped.
> - `:has()` is invalid because it doesn't have any argument.
> - `:has(:foo)` is invalid because it doesn't have any argument after the 
> invalid argument `:foo` is dropped.
> - `:has(:foo, a)` is valid because it has a valid argument `a` after the 
> invalid argument `:foo` is dropped.
>
> Last December, the jQuery conflict issue was resolved [3] and it was 
> applied to 110 [5] - make `:has()` unforgiving.
> - `:has()` is invalid because it doesn't have any argument.
> - `:has(:foo)` is invalid because it has an invalid argument `:foo`.
> - `:has(:foo, a)` is invalid because it has an invalid argument `:foo`.
>
> Due to this, the result of `@supports selector(:has())` has been false 
> since 105.
>
>
> 4. Why does this feature not affect URLs that use WordPress yootheme?
>
> Because it checks with empty `:has()` - `@supports not selector(:has())`.
>
> `@supports not selector(:has())` has been always true since 105, and it 
> will still be true after this feature enabled because this feature doesn't 
> affect unforgiving parsing.
>
> The strange point is that the statement is useless(because it is always 
> true) and semantically incorrect [6].
>
>
> 5. Why does this feature not affect URLs that use jQuery `:has()`?
>
> Because the jQuery `has()` conflict issue was already resolved by making 
> `:has()` unforgiving [3], [5], and this feature doesn't affect unforgiving 
> parsing.
>
>
> 6. In short,
>
> This feature will not affect `:has()` inside `@supports selector()`.
>
> This feature can affects `:is()` or `where()` inside `@supports 
> selector()`. (only when its argument is empty or invalid)
>
>
> Hope that this has clarified the question.
>
 --------

[1] 
https://github.com/w3c/csswg-drafts/commit/3a2efb33d12f6667d6142e89609a982978b49223

[2] https://github.com/w3c/csswg-drafts/issues/7280

[3] https://github.com/w3c/csswg-drafts/issues/7676#issuecomment-1341347244

[4] 
https://chromium.googlesource.com/chromium/src/+/2b818b338146d89e524c4fabc2c6f7fd7776937a

[5] 
https://chromiumdash.appspot.com/commit/7278cf3bf630c7791ba4b4885eb7da64dc16eab2
[6] It uses `@supports` like this:
     @supports not selector(:has()) {
      .woocommerce:has(> .woocommerce-MyAccount-navigation){
        display:flex;
        justify-content:space-between
      }
    }
    I'm not sure but the `not` seems to be a workaround to make the block 
works.


> 2023년 1월 5일 목요일 오후 7시 8분 7초 UTC+9에 yoav...@chromium.org님이 작성:
>
>> Thanks!!
>>
>> A couple of questions below, plus another one: Is this change covered by 
>> a base feature 
>> <https://chromium.googlesource.com/chromium/src/+/main/third_party/blink/renderer/platform/RuntimeEnabledFeatures.md#generate-a-instance-from-a-blink-feature>
>>  flag?
>>
>> On Wed, Jan 4, 2023 at 12:34 PM Byungwoo Lee <bl...@igalia.com> wrote:
>>
>>> I checked the top URLs in the ChromeStatus page. (TL;DR - this feature 
>>> looks not affect the existing behavior of the top URLs)
>>>
>>> I was able to categorize the URLs as below.
>>>
>>> 1. Checking `:has()` support
>>> - Most of the URLs use `@supports` to check `:has()` support.
>>> - `@support` behavior will not be changed for `:has()` (We can ignore 
>>> this case since `:has()` will be unforgiving after 110 released)
>>>
>>
>> Can you clarify if the ':has()' behavior will change here or not? This 
>> last sentence seems to contradict the original message of the intent.
>>  
>>
>>> - There are 2 sub cases:
>>>      - URLs using WordPress yootheme [1]
>>>      - URLs using jQuery `has()` [2]
>>>
>>
>> Can you confirm that both these cases won't break?
>>  
>>
>>>
>>> 2. Checking `:where()` support
>>> - Only one URL(https://learn.ooznest.co.uk/) uses `@supports` to check 
>>> `:where()` support.
>>> - `@supports` behavior will be changed for `:where()` after this feature 
>>> enabled, but it will not affect the behavior of the web page since the page 
>>> handles both support and not support case[3].
>>>
>>> The only problem that I can see from the top URLs is checking `:where()` 
>>> support, but it looks very rare case and it may be already handled like 
>>> learn.ooznest.co.uk.
>>> (I was able to see some incorrect usages while checking[4], but I think 
>>> it is another discussion of checking empty `:where()`, `:has()`)
>>>
>>> I think that this feature does not have critical impact on the existing 
>>> behavior. And as shared previously, Safari and Firefox already changed 
>>> their implementations.
>>>
>>> How about shipping this?
>>>
>>> ------------
>>>
>>> [1] 6 URLs (6/10):
>>>       - https://lavalmore.gr/
>>>       - https://www.kussenwereld.nl/
>>>       - https://thelocustgroveflowers.com/
>>>       - https://shop.bmgi.com.au/
>>>       - https://badaptor.com/
>>>       - https://suicidprev.se/
>>>     'theme1.css' of yootheme contains `@supports not selector(:has()) 
>>> {...}` statement.
>>>     (e.g. 
>>> https://thelocustgroveflowers.com/wp-content/themes/locust-ff/css/theme.1.css?ver=1669913762
>>> )
>>>     The `@supports not...` statement looks weird since the conditional 
>>> block contains rules using `:has()`.
>>>
>>> [2] 2 URLs (2/10):
>>>       - https://www.midroog.co.il/
>>>       - https://whadam.tistory.com/
>>>
>>> [3] A stylesheet file has `@supports selector(:where()) {...}` and 
>>> `@supports not selector(:where()) {...}` statement.
>>>     (
>>> https://d3015z1jd0uox2.cloudfront.net/Assets/Guide/black/guide-all-j81VMtmAdGEcl2BaHR40jA.css
>>> )
>>>     
>>> [4] Passing empty `:has()` or `:where()` to `@supports selector()` to 
>>> check whether a browser supports the pseudo class.
>>>     (e.g. `@supports not selector(:has())`, `@supports 
>>> selector(:where())`)
>>>
>>> 2023년 1월 3일 화요일 오후 6시 18분 31초 UTC+9에 Byungwoo Lee님이 작성:
>>>
>>>> Hello Yoav,
>>>>
>>>> Chrome status shows the number from stable now.
>>>>
>>>> I checked these metrics.
>>>> - https://chromestatus.com/metrics/feature/timeline/popularity/4361 
>>>> (CSSAtSupportsDropInvalidWhileForgivingParsing)
>>>> - https://chromestatus.com/metrics/feature/timeline/popularity/976 
>>>> (CSSAtRuleSupports)
>>>>
>>>> According to the above metrics, some pages will be affected by this 
>>>> feature but it seems to be a relatively small fraction:
>>>> - Only 0.50 % of page loads are dropping invalid selector while parsing 
>>>> forgiving selector inside '@supports selector()'.
>>>> - 41.10% of page loads are using '@supports', but only 1.21% (0.5/41.1) 
>>>> of the page loads are dropping invalid selector while parsing forgiving 
>>>> selector inside '@supports selector()'.
>>>> - Less than 0.01 % of top sites are dropping invalid selector while 
>>>> parsing forgiving selector inside '@supports selector()'.
>>>> - 50.89% of top URLs are using '@supports', but less than 0.02% 
>>>> (0.01/50.89) of the URLs are dropping invalid selector while parsing 
>>>> forgiving selector inside '@supports selector()'.
>>>>
>>>> Can we move forward based on this? Or should I check another number?
>>>>
>>>> 2022년 12월 10일 토요일 오전 1시 26분 57초 UTC+9에 Byungwoo Lee님이 작성:
>>>>
>>>>> Hello,
>>>>>
>>>>> The 108 branch is shipping to stable now, but the numbers from stable 
>>>>> doesn't seems to be applied to the ChromeStatus stats yet. It seems that 
>>>>> the stable numbers will be applied at Jan. 1st.
>>>>> - https://chromestatus.com/metrics/feature/timeline/popularity/4361
>>>>>
>>>>> I'll reschedule the feature release to 112 so that we can revisit this 
>>>>> thread when we can get the numbers from stable.
>>>>>
>>>>> Thank you!
>>>>>
>>>>> p.s. 1
>>>>> This feature is not related to :has() anymore since :has() is now 
>>>>> unforgiving:
>>>>> - Issue resolution: 
>>>>> https://github.com/w3c/csswg-drafts/issues/7676#issuecomment-1341347244
>>>>> - CL : 
>>>>> https://chromium-review.googlesource.com/c/chromium/src/+/4090967
>>>>> This feature only affects :is()/:where() inside @supports.
>>>>>
>>>>> p.s. 2
>>>>> Once I get the stable number, I'll provide a comparison of these two 
>>>>> numbers that I can get from the ChromeStatus stats:
>>>>> - Percentage of page loads that drop invalid while forgiving parsing 
>>>>> inside @supports selector
>>>>>   (https://chromestatus.com/metrics/feature/timeline/popularity/4361)
>>>>> - Percentage of page loads that use @supports rule
>>>>>   (https://chromestatus.com/metrics/feature/timeline/popularity/976)
>>>>>
>>>>> The comparison doesn't prove anything, but I think we can at least 
>>>>> guess how much the @supports change affects the existing behavior:
>>>>> Assuming the current numbers in the above links are from stable, about 
>>>>> 40% of the loaded pages use @supports rule, but only 0.002% of the loaded 
>>>>> pages hit the case of dropping invalid selector while forgiving selector 
>>>>> parsing inside @supports. By simply comparing the numbers, I think we can 
>>>>> say that 1/20000 of the @supports rule usages will be affected by the 
>>>>> feature.
>>>>>
>>>>> 2022년 10월 10일 월요일 오후 11시 18분 41초 UTC+9에 Byungwoo Lee님이 작성:
>>>>>
>>>>>> To continue this thread after getting the stable Chrome's use 
>>>>>> counter, I changed the estimated milestone of this feature from 109 to 
>>>>>> 111.
>>>>>> I'll share the use counter after the version 108 released.
>>>>>>
>>>>>> Thank you!
>>>>>>
>>>>>> 2022년 9월 29일 목요일 오전 11시 52분 43초 UTC+9에 Byungwoo Lee님이 작성:
>>>>>>
>>>>>>>
>>>>>>> On 9/27/22 10:07, Byungwoo Lee wrote:
>>>>>>>
>>>>>>>
>>>>>>> On 9/24/22 00:40, Yoav Weiss wrote:
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Fri, Sep 23, 2022 at 5:25 PM Byungwoo Lee <bl...@igalia.com> 
>>>>>>> wrote:
>>>>>>>
>>>>>>>> Hello Yoav and Mike,
>>>>>>>>
>>>>>>>> Thanks for the feedback! I replied inline.
>>>>>>>> On 9/23/22 22:18, Yoav Weiss wrote:
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On Fri, Sep 23, 2022 at 3:15 PM Mike Taylor <mike...@chromium.org> 
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>>> Hi Byungwoo,
>>>>>>>>>
>>>>>>>>> On 9/23/22 4:34 AM, Byungwoo Lee wrote:
>>>>>>>>>
>>>>>>>>> Contact emails bl...@igalia.com
>>>>>>>>>
>>>>>>>>> Specification 
>>>>>>>>> https://drafts.csswg.org/css-conditional-4/#support-definition-ext
>>>>>>>>>
>>>>>>>>> Summary 
>>>>>>>>>
>>>>>>>>> Some functional selectors are parsed forgivingly. (e.g. :is(), 
>>>>>>>>> :has()) If an argument of the functional selectors is unknown or 
>>>>>>>>> invalid, 
>>>>>>>>> the argument is dropped but the selector itself is not invalidated. 
>>>>>>>>> To 
>>>>>>>>> provide a way of detecting the unknown or invalid arguments in those 
>>>>>>>>> functional selectors, this feature applies the CSS Working Group 
>>>>>>>>> issue 
>>>>>>>>> resolution: - @supports uses non-forgiving parsing for all selectors (
>>>>>>>>> https://github.com/w3c/csswg-drafts/issues/7280#issuecomment-1143852187
>>>>>>>>> )
>>>>>>>>>
>>>>>>>>> Am I understanding correctly that content that now uses a 
>>>>>>>> functional selector argument that's invalid may break as a result of 
>>>>>>>> this?
>>>>>>>> If so, do we have usecounters to that effect?
>>>>>>>>
>>>>>>>> Yes it can change the previous behavior.
>>>>>>>>
>>>>>>>> This changes the selector parsing behavior only for the selectors 
>>>>>>>> inside @supports selector().
>>>>>>>>
>>>>>>>> So if authors expected true for '@supports 
>>>>>>>> selector(:is(:some-invalid-selector))', this feature will break it 
>>>>>>>> because 
>>>>>>>> the return value will be changed to false after this feature is 
>>>>>>>> enabled.
>>>>>>>>
>>>>>>>> I'm not sure that we have the usecounters of the case: counting 
>>>>>>>> drop of invalid selector inside @supports selector.
>>>>>>>>
>>>>>>>> If it doesn't exists but it is needed, I think we can add it. Will 
>>>>>>>> it be better to add it to get use counters before ship it?
>>>>>>>>
>>>>>>>
>>>>>>> Yeah, knowing the order of magnitude of potential breakage would be 
>>>>>>> good.  
>>>>>>>
>>>>>>> I landed a CL to add the use counter:
>>>>>>>
>>>>>>> https://chromiumdash.appspot.com/commit/d060459d174c468a78d69d4e2a12925e0e7ab216
>>>>>>>  
>>>>>>>
>>>>>>> It counts the drop of invalid selector while forgiving selector 
>>>>>>> parsing inside @supports selector(). We can see the stats with 
>>>>>>> CSSAtSupportsDropInvalidWhileForgivingParsing(4361):
>>>>>>> https://chromestatus.com/metrics/feature/timeline/popularity/4361
>>>>>>>
>>>>>>> This will be in 108 version so hopefully we can get the use counter 
>>>>>>> after the version is released.
>>>>>>>
>>>>>>>    - beta (Oct 27)
>>>>>>>    - stable (Nov 29) 
>>>>>>>
>>>>>>> I'll share the stats when it released.
>>>>>>>
>>>>>>> Thanks!
>>>>>>>
>>>>>>>
>>>>>>>>>
>>>>>>>>> Blink component Blink 
>>>>>>>>> <https://bugs.chromium.org/p/chromium/issues/list?q=component:Blink>
>>>>>>>>>
>>>>>>>>> TAG review 
>>>>>>>>>
>>>>>>>>> TAG review status Not applicable
>>>>>>>>>
>>>>>>>>> Can you expand on why you think a TAG review is not needed here?
>>>>>>>>>
>>>>>>>> I thought that we don't need TAG review and the reason was
>>>>>>>>
>>>>>>>> - This is already specified in the spec:
>>>>>>>>     
>>>>>>>> https://drafts.csswg.org/css-conditional-4/#support-definition-ext 
>>>>>>>> <https://drafts.csswg.org/css-conditional-4/#support-definition-ext>
>>>>>>>>
>>>>>>>> - Firefox already landed it:
>>>>>>>>   https://bugzilla.mozilla.org/show_bug.cgi?id=1789248
>>>>>>>>
>>>>>>>> Will it be better to change the TAG review status to 'Pending'?
>>>>>>>>
>>>>>>>>
>>>>>>>>> Risks 
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Interoperability and Compatibility 
>>>>>>>>>
>>>>>>>>> *Gecko*: Shipped/Shipping 
>>>>>>>>> https://bugzilla.mozilla.org/show_bug.cgi?id=1789248
>>>>>>>>>
>>>>>>>>> *WebKit*: Positive
>>>>>>>>>
>>>>>>>>> *Web developers*: Positive
>>>>>>>>>
>>>>>>>>> Can you please link to these signals?
>>>>>>>>>
>>>>>>>>
>>>>>>>> WebKit:
>>>>>>>>
>>>>>>>> - Explained about this in a blog post:
>>>>>>>>   https://webkit.org/blog/13096/css-has-pseudo-class/
>>>>>>>>
>>>>>>>> Web developers:
>>>>>>>>
>>>>>>>> - Thumbs ups in the CSSWG issue:
>>>>>>>>    https://github.com/w3c/csswg-drafts/issues/7280
>>>>>>>>
>>>>>>>> - jQuery applied the spec:
>>>>>>>>   https://github.com/jquery/jquery/pull/5107
>>>>>>>>
>>>>>>>>
>>>>>>>> Rego let me know what I missed (Thanks!), so I'm updating this.
>>>>>>>
>>>>>>> This specification change has been implemented in WebKit as well as 
>>>>>>> Firefox:
>>>>>>> https://bugs.webkit.org/show_bug.cgi?id=244808
>>>>>>>
>>>>>>> I updated the 'Safari views' and 'Tag review' in the chromestatus 
>>>>>>> accordingly.
>>>>>>>
>>>>>>>
>>>>>>> *WebKit:* Shipped/Shipping 
>>>>>>> https://bugs.webkit.org/show_bug.cgi?id=244808
>>>>>>>
>>>>>>>
>>>>>>> *Tag review*
>>>>>>> No TAG review
>>>>>>>
>>>>>>>
>>>>>>> - This is already specified in the spec:
>>>>>>>     
>>>>>>> https://drafts.csswg.org/css-conditional-4/#support-definition-ext
>>>>>>>
>>>>>>> - Firefox and WebKit already implemented it:
>>>>>>>   https://bugzilla.mozilla.org/show_bug.cgi?id=1789248
>>>>>>>   https://bugs.webkit.org/show_bug.cgi?id=244808
>>>>>>>
>>>>>>>
>>>>>>> *Tag review status*
>>>>>>> pending
>>>>>>>
>>>>>>>
>>>>>>> Could this update affect the shipping decisions?
>>>>>>>
>>>>>>> thanks,
>>>>>>>>> Mike
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> -- 
>>>>>>>>> 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/b03b90af-3911-40b4-dd6f-b12764826cf1%40chromium.org
>>>>>>>>>  
>>>>>>>>> <https://groups.google.com/a/chromium.org/d/msgid/blink-dev/b03b90af-3911-40b4-dd6f-b12764826cf1%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/327b5fba-dd3d-403e-a042-257663d37a9an%40chromium.org.

Reply via email to