Thanks for all the comments! I'll do a revisit later.

On Wed, Mar 30, 2022 at 5:53 AM Philip Jägenstedt <foo...@chromium.org>
wrote:

> Hi Xiaocheng,
>
> Thanks for doing this analysis, I think it's the first time I've seen
> categorization done this thoroughly using BigQuery, and I'm impressed :)
>
> While one could also look at "e.path", I think what you have should be
> enough to get a good idea of the risk. Having identified a bunch of sites
> that might be broken, I think the next step is to take a random sample of
> them, say 10 sites. For each site, understand when that code path is
> reached in current Chrome, and then take a locally built version of Chrome
> with the API removed and reach that code path. What happens?
>
> It sounds a lot that we have ~2500 site in the "hard fail" category, but I
> would bet that on closer inspection you will find:
>
>    - Code that you can't figure out how to even reach, which might be
>    dead code
>    - Code that throws errors but everything works fine from the user's
>    point of view
>    - Broken tracking or ads that the user could notice, but wouldn't
>    really care about
>
> And then finally, you might find cases that really are broken, but which
> are already broken in Firefox and Safari. If that is most of the remaining
> cases, then we have to weigh breaking those sites in Chrome and likely
> pushing them to be fixed (in all browsers) soonish, vs. them remaining
> broken in some browsers for what is very likely a longer time. In this
> case, I would say LGTM to minimizing overall breakage, for users of all
> browsers, by breaking the sites in Chrome after a reasonable deprecation
> period.
>
> Best regards,
> Philip
>
> On Wed, Mar 9, 2022 at 4:04 PM Yoav Weiss <yoavwe...@chromium.org> wrote:
>
>> Thanks for the analysis! :) I think it may make sense to do a bit of a deeper
>> dive
>> <https://docs.google.com/document/d/1JUeNc-ZxxWTn2tz9M_DJ4cV-M8lBdp40xlnfQ2-Mhgg/edit?disco=AAAAVgAWwQ8>
>> into HA data to get a tighter bound on usage before coming up with a date.
>>
>> On Thursday, March 3, 2022 at 9:23:50 PM UTC+1 Xiaocheng Hu wrote:
>>
>>> Hi blink-dev,
>>>
>>> I've done an analysis on HTTP Archive (https://bit.ly/3uHALsd), and
>>> found that at least 0.2% pages will break if Event.path is removed. The
>>> actual number should be higher (maybe 1%?) since the analysis is based on
>>> searching the regex r'(ev|event)\.path' in JavaScript code, so the analysis
>>> couldn't find a usage if the code has been aggressively minified with
>>> variables renamed.
>>>
>>> My current plan is that we'll target M109, the first release in 2023.
>>> Before its removal, we'll:
>>> - Use on a deprecation message in DevTools to decrease the usage
>>> - Do outreach if needed
>>> - Starting from September 2022, or if the known breakage number drops
>>> below a threshold (mabye 0.05%?), disable it on all non-Stable channels
>>> (via finch) to further speed up decreasing the usage.
>>>
>>> On Wed, Feb 9, 2022 at 9:59 AM Xiaocheng Hu <xiaoche...@chromium.org>
>>> wrote:
>>>
>>>> I'm still working on HTTP Archive to see the actual usage patterns of
>>>> Event.path. I also suspect that many won't really break with Event.path
>>>> removed, since I'm not aware of any Apple bugs, either.
>>>>
>>>> I'll update this thread when I'm done.
>>>>
>>>> On Wed, Feb 9, 2022 at 9:28 AM Mike Taylor <miketa...@chromium.org>
>>>> wrote:
>>>>
>>>>> Thanks for digging into this Philip! Agree that HTTPArchive analysis
>>>>> will be pretty helpful to help us make a decision.
>>>>>
>>>>> Thinking again about the lack of (many) Firefox and Safari bugs - that
>>>>> gives me some hope that it might be safe to remove from Chromium (assuming
>>>>> we don't find that sites are UA-sniffing to only use event.path for
>>>>> Chromium browsers).
>>>>>
>>>>> On 2/9/22 11:46 AM, Philip Jägenstedt wrote:
>>>>>
>>>>> Here's a first cut at httparchive analysis:
>>>>>
>>>>> SELECT page, url
>>>>> FROM `httparchive.latest.response_bodies_desktop`
>>>>> WHERE STRPOS(body, 'event.path') > 0
>>>>>   AND STRPOS(body, 'event.composedPath()') = 0;
>>>>>
>>>>> That finds over 32k cases. Categorizing these based on context and
>>>>> analyzing how each case would break would really help here.
>>>>>
>>>>> The very first case I looked at was like this:
>>>>>
>>>>> function getRealEventTarget(event, ELEMENT) {
>>>>>     var path = []
>>>>>     if (event.path) {
>>>>>         path = event.path
>>>>>     }
>>>>>     if (event.originalEvent && event.originalEvent.path) {
>>>>>         path = event.originalEvent.path
>>>>>     }
>>>>>     if (path && path.length > 0) {
>>>>>         if (ELEMENT && path.indexOf(ELEMENT) >= 0) {
>>>>>             return ELEMENT
>>>>>         } else {
>>>>>             return path[0]
>>>>>         }
>>>>>     }
>>>>>     return event.target
>>>>> }
>>>>>
>>>>> At first glance this seems like a problem and that things could break,
>>>>> but then we need to look at if it's already broken in Firefox and Safari.
>>>>> It may well turn out that as actually used, it's harmless.
>>>>>
>>>>> Best regards,
>>>>> Philip
>>>>>
>>>>> On Wed, Feb 9, 2022 at 5:37 PM Philip Jägenstedt <foo...@chromium.org>
>>>>> wrote:
>>>>>
>>>>>> On Wed, Feb 9, 2022 at 10:50 AM Yoav Weiss <yoavwe...@chromium.org>
>>>>>> wrote:
>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Wednesday, February 9, 2022 at 2:49:55 AM UTC+1 Mike Taylor wrote:
>>>>>>>
>>>>>>>> Hey Xiaocheng,
>>>>>>>>
>>>>>>>> Thanks for working on improving interop! A few thoughts and
>>>>>>>> questions below.
>>>>>>>>
>>>>>>>> On 2/8/22 7:25 PM, Xiaocheng Hu wrote:
>>>>>>>>
>>>>>>>> Contact emails xiaoche...@chromium.org
>>>>>>>>
>>>>>>>> Explainer None
>>>>>>>>
>>>>>>>> Specification None. Not a standard feature.
>>>>>>>>
>>>>>>>> Summary
>>>>>>>>
>>>>>>>> Event.path is a non-standard API that returns the event's path,
>>>>>>>> which is an array of the objects on which listeners will be invoked. 
>>>>>>>> It is
>>>>>>>> supported by Blink only, causing web compatibility issues. Web 
>>>>>>>> developers
>>>>>>>> should switch to the equivalent standard API Event.composedPath(), 
>>>>>>>> which
>>>>>>>> returns the same result.
>>>>>>>>
>>>>>>>>
>>>>>>>> Blink component Blink>DOM
>>>>>>>> <https://bugs.chromium.org/p/chromium/issues/list?q=component:Blink%3EDOM>
>>>>>>>>
>>>>>>>> TAG review
>>>>>>>>
>>>>>>>> TAG review status Not applicable
>>>>>>>>
>>>>>>>> Risks
>>>>>>>>
>>>>>>>>
>>>>>>>> Interoperability and Compatibility
>>>>>>>>
>>>>>>>> The removal of this API should improve interoperability, as it's
>>>>>>>> supported by Blink only. It still has 18% usage as of Feb 2022 (
>>>>>>>> https://chromestatus.com/metrics/feature/timeline/popularity/345),
>>>>>>>> so we will only deprecate it for now, and will not remove it before the
>>>>>>>> usage drops low enough. We expect low compatibility risks, since there 
>>>>>>>> is
>>>>>>>> an equivalent standard API (Event.composedPath()) by all browsers, and 
>>>>>>>> the
>>>>>>>> following polyfill should also keep existing sites functioning with 
>>>>>>>> minimum
>>>>>>>> changes:
>>>>>>>>
>>>>>>>> 18% is a _lot_ of usage. So much that I'm surprised there aren't
>>>>>>>> dozens of compat bugs reported against Firefox. In
>>>>>>>> https://bugzilla.mozilla.org/show_bug.cgi?id=1697590#c0 there are
>>>>>>>> only 2 linked site bugs. And there's only 3 in
>>>>>>>> https://github.com/webcompat/web-bugs/issues?q=is%3Aissue+composedPath
>>>>>>>> (the last one being from 2019).
>>>>>>>>
>>>>>>>> I wonder how much of that 18% is feature detection and fallback
>>>>>>>> codepaths
>>>>>>>> <https://github.com/search?l=JavaScript&q=composedPath+event.path&type=Code>
>>>>>>>> .
>>>>>>>>
>>>>>>>
>>>>>>> Yeah, that 18% is unreasonably high...
>>>>>>> I think it'd be good to add a non-IDL based counter that counts when
>>>>>>> both Event::path
>>>>>>> <https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/renderer/core/dom/events/event.cc;l=287;bpv=1;bpt=0>
>>>>>>>  and
>>>>>>> Event::composedPath
>>>>>>> <https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/renderer/core/dom/events/event.cc;l=293;bpv=1;bpt=0>
>>>>>>>  are
>>>>>>> accessed. (e.g. by adding 2 booleans or a bitmask on Event indicating 
>>>>>>> when
>>>>>>> any of them was touched and triggering the counter when both have been)
>>>>>>> Then we can assume that counts feature-detection/fallback and
>>>>>>> subtract that counter from the 18%.
>>>>>>>
>>>>>>
>>>>>> Based on past cases, I'm pretty sure most of the usage here is due to
>>>>>> event copying, where all of the properties of event instances are copied 
>>>>>> to
>>>>>> a new object. So I think we should basically ignore the 18% number and
>>>>>> treat the risk as unknown.
>>>>>>
>>>>>> A use counter that tries to better measure the risk here would be
>>>>>> nice, but I actually don't see how to measure it. Consider this code:
>>>>>>
>>>>>> function(event) {
>>>>>>   var path = event.path;
>>>>>>   if (!path) {
>>>>>>     path = event.composedPath()
>>>>>>   }
>>>>>>   doStuffWith(path);
>>>>>> }
>>>>>>
>>>>>> This would never hit the composedPath() code path, and is
>>>>>> indistinguishable to code that only relies on event.path, from the point 
>>>>>> of
>>>>>> view of use counter instrumentation.
>>>>>>
>>>>>> I think that httparchive analysis here is our best tool, and in fact
>>>>>> that *only* httparchive analysis could be enough to convince us that
>>>>>> there's no problem here, if we fail to find any breaking cases. But even
>>>>>> then, we should probably have a fairly long deprecation period.
>>>>>>
>>>>>> If we go ahead and deprecate this, what do you think the deprecation
>>>>>> message should say about eventual removal?
>>>>>>
>>>>>> Best regards,
>>>>>> Philip
>>>>>>
>>>>>
>>>>>

-- 
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/CAFqEGhYvk2is68e_DUtZ%3DgwxbONfoO0AQCn99w7DF%2BzLY-iw1Q%40mail.gmail.com.

Reply via email to