- getting this 

On Wednesday, March 30, 2022 at 1:30:23 PM UTC-4 xiaoc...@chromium.org 
wrote:

> 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 <yoav...@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 <xiaoc...@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 <mike...@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 <yoav...@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 xiaoc...@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/49b4a033-de5c-43be-a8b9-3c4feee477bfn%40chromium.org.

Reply via email to