These proposed metrics sound reasonable to us, so long as they capture all cases where the behavior is changing. But we defer to you and your team as the experts.

On 3/11/25 3:08 AM, 'Yoshisato Yanagisawa' via blink-dev wrote:
The UMA and use count is recorded in the following code:
https://source.chromium.org/chromium/chromium/src/+/main:content/browser/service_worker/service_worker_main_resource_loader_interceptor.cc;l=132;drc=a5bdf0106da2489011a9846f280f29872258a8dd

The usecount is set if the request URL is blob, and the navigation handle has the service worker client and the client has a controller.  As you can see, we record UMA just before the usecount, which records the number of the blob URL and non-blob URL cases.  Since we can see non negligible IsBlob true cases, I assumed that the usecount is broken. Note that it just says that SharedWorker is created under a page controlled by a ServiceWorker.  We are not sure if the change brings a visible difference to the SharedWorker.

Considering what I have mentioned before, I should have added the metrics like:

  * clients.matchAll() or match() look up the SharedWorker where the
    SharedWorker script is a blob URL.
  * SharedWorker fetches other resources while the SharedWorker script
    is a blob URL.

They should be the case affected by this change.  Is there anything else I missed?

2025年3月11日(火) 4:38 Chris Harrelson <chris...@chromium.org>:

    Were you able to manually
    verify the SharedWorkerScriptUnderServiceWorkerControlIsBlob use
    counter hits with a test page? If so, I suppose it's possible no
    one is using this combination of features? Do you know of any site
    at all that does so?

    On Wed, Mar 5, 2025 at 5:32 PM 'Yoshisato Yanagisawa' via
    blink-dev <blink-dev@chromium.org> wrote:

        Sorry for not working on this for a long time.
        Considering what I am seeing with other statistics, I am
        assuming the use count is wrong.
        Last Dec, I started to do analysis on
        https://chromestatus.com/metrics/feature/timeline/popularity/5,
        however it is really cumbersome to find a SharedWorker script
        in obfuscated JavaScript and the analysis did not go well.
        As far as I understand, SharedWorker behavior change may happen:
        1. if SharedWorker `fetch()`, and the request is intercepted
        by the ServiceWorker.
        2. or if the ServiceWorker tries to look up the SharedWorker
        as its client, and postMessage().

        I did not follow the 1 case, but as far as I checked 50 sites
        from the beginning listed with
        https://chromestatus.com/metrics/feature/timeline/popularity/5,
        I could not find the case like 2.
        Therefore, I assume the risk is quite low.

        If the risk matters, I can also do the deprecation study.


        2025年3月5日(水) 23:14 Daniel Bratell <bratel...@gmail.com>:

            I assume it's this use counter:
            https://chromestatus.com/metrics/feature/timeline/popularity/5203
            (SharedWorkerScriptUnderServiceWorkerControlIsBlob). It
            doesn't seem to have picked up any usage, which is either
            good or bad...

            yyanagisawa, do you know which it is?

            /Daniel

            On 2024-11-26 10:00, Domenic Denicola wrote:


            On Tue, Nov 26, 2024 at 4:20 PM Yoshisato Yanagisawa
            <yyanagis...@google.com> wrote:

                Thanks for the response,
                Let me reply inline.

                2024年11月19日(火) 15:56 Domenic Denicola
                <dome...@chromium.org>:



                    On Tue, Nov 19, 2024 at 2:15 PM Yoshisato
                    Yanagisawa <yyanagis...@google.com> wrote:



                        2024年11月18日(月) 17:02 Domenic Denicola
                        <dome...@chromium.org>:



                            On Friday, November 15, 2024 at
                            9:14:09 AM UTC+9 Chromestatus wrote:

                                Contact emails yyanagis...@google.com

                                Explainer None

                                Specification
                                
https://w3c.github.io/ServiceWorker/#control-and-use-worker-client
                                
<https://w3c.github.io/ServiceWorker/#control-and-use-worker-client>


                                Summary

                                According to
                                
https://w3c.github.io/ServiceWorker/#control-and-use-worker-client
                                
<https://w3c.github.io/ServiceWorker/#control-and-use-worker-client>,
                                workers should inherit controllers
                                for the blob URL. However, existing
                                code allows only dedicated workers to
                                inherit the controller, and shared
                                workers do not inherit the
                                controller. This is the fix to make
                                Chromium behavior adjust to the
                                specification. An enterprise policy
                                SharedWorkerBlobURLFixEnabled is
                                available to control this feature.



                                Blink component Blink>Workers
                                
<https://bugs.chromium.org/p/chromium/issues/list?q=component:Blink%3EWorkers>


                                TAG review None

                                TAG review status Not applicable

                                Risks


                                Interoperability and Compatibility

                                This is a change to make the Chromium
                                behavior aligned with the
                                specification, there should not be an
                                interoperability issue. However,
                                there is a compatibility issue from
                                the past Chromium. If a blob URL is
                                used for a SharedWorker script and a
                                controller for the URL is mattered,
                                there is a behavior change because
                                this change makes a controller
                                inherited. An enterprise policy was
                                added to allow enterprise customers
                                to preserve the past Chromium behavior.

                            Do you have any metrics on how many page
                            loads this change might impact? An
                            enterprise policy seems like a good idea,
                            but if the number of page loads is high,
                            we might want to consider a deprecation
                            trial or similar mechanism.


                        Yes.  The I2S was proposed as the web facing
                        change PSA
                        
(https://groups.google.com/a/chromium.org/g/blink-dev/c/hClP93e4MLk/m/SGXfxOZfAQAJ)
                        before, and I gave up to go with the PSA due
                        to the amount of the case that the blob URL
                        is used as a SharedWorker script URL is too
                        large.
                        I revisited the metrics and saw 10-40%
                        SharedWorker script URLs are blob URL
                        depending on platform.
                        Is it better to go with a deprecation trial?


                    10-40% is very high, so yes, we need to consider
                    ways to find an upper limit on the danger.

                    My guess is that most pages will not have their
                    behavior changed, because, for example, their
                    service worker JavaScript ignores non-https:
                    fetches. The fact that these pages probably work
                    fine in Safari is also helpful evidence.

                    I would suggest two strategies:

                      * Use UKM or HTTP Archive to examine the top-N
                        sites that trigger this UseCounter (maybe N =
                        20 or so is good). Confirm via code
                        inspection or running with the flag flipped
                        or similar techniques that there is no compat
                        impact. Publish this data for the API owners
                        to see.


                Sure.
                
https://chromium-review.googlesource.com/c/chromium/src/+/6049677
                to add UKM and UseCounter.
                Let's see the statistics after it is shipped.


            Oh, my suggestion was to get data sooner, by using the
            existing use counter with HTTP archive analysis
            
<https://www.chromium.org/blink/platform-predictability/compat-tools/>.
            Then you don't have to wait for any code to roll out to
            stable.

                      * Also do a deprecation trial to allow opting
                        in to the old behavior. The UKM/HTTP archive
                        analysis can increase our confidence that the
                        breakage is low (like, if 0 or 1 out of 20
                        pages are broken, then the breakage is
                        probably <1%). But it cannot give us enough
                        precision to be confident, so having the
                        escape hatch of the deprecation trial seems
                        important.

                Just let me confirm if my understanding is correct.
                Does the deprecation trial mean the origin trial
                to preserve the legacy behavior?
                We enable the flag by default while starting the
                origin trial.  The site with the origin trial token
                can preserve the legacy behavior, right?


            Yes, that's the idea! See this link
            
<https://www.chromium.org/blink/launching-features/#deprecation-trial>.
            I guess the wording there is a bit confusing since you
            aren't "removing" a feature, but instead changing how an
            existing feature works. I think it should not matter much
            though. It is still closer to a deprecation trial than an
            origin trial. For example, you do not need to write a
            specification for the behavior that the trial enables,
            like you would with an origin trial.

                    I'm sorry that this adds so much process for what
                    is basically a bug fix. It is possible there
                    would be other ways to avoid it, for example by
                    creating a more precise use counter that detects
                    "changed behavior". (But, it is hard to imagine
                    how to write the code for such a use counter...
                    maybe something about comparing response bytes??)
                    However my guess is that the time and effort of
                    writing that precise use counter is probably more
                    than the effort in setting up a deprecation
                    trial. So my advice is to pursue the above approach.



                                /Gecko/: No signal


                            Can you ask Gecko for signals? I am
                            especially curious why they haven't
                            updated to match the specification.


                        Sure.  I have filed the mozilla's standard
                        position for it.
                        
https://github.com/mozilla/standards-positions/issues/1113



                                /WebKit/: Shipped/Shipping

                                /Web developers/: No signals

                                /Other signals/:

                                Ergonomics

                                n/a



                                Security

                                Since this is adjusting Chromium
                                behavior to specification, there
                                should not be a security risk from a
                                specification perspective. From the
                                implementation perspective, this
                                change simply inherits existing
                                controller. There should not be any
                                additional security risks with this
                                change.



                                WebView application risks

                                Does this intent deprecate or change
                                behavior of existing APIs, such that
                                it has potentially high risk for
                                Android WebView-based applications?

                                Since SharedWorker is not supported
                                on Android yet, there is no risk on
                                Android WebView.



                                Debuggability

                                n/a



                                Will this feature be supported on all
                                six Blink platforms (Windows, Mac,
                                Linux, ChromeOS, Android, and Android
                                WebView)? No

                                Since SharedWorker is not supported
                                in Android yet, the feature also does
                                not affect to Android.



                                Is this feature fully tested by
                                web-platform-tests
                                
<https://chromium.googlesource.com/chromium/src/+/main/docs/testing/web_platform_tests.md>?
                                Yes

                                
https://wpt.fyi/results/service-workers/service-worker/local-url-inherit-controller.https.html
                                
<https://wpt.fyi/results/service-workers/service-worker/local-url-inherit-controller.https.html>
                                Same-origin blob URL sharedworker
                                should inherit service worker
                                controller. Same-origin blob URL
                                sharedworker should intercept
                                fetch(). The tests ensure a
                                ServiceWorkerController is inherited.
                                Due to crbug.com/40364838
                                <https://crbug.com/40364838>,
                                Chromium does not pass the former test.



                                Flag name on about://flags None

                                Finch feature name
                                SharedWorkerBlobURLFix

                                Requires code in //chrome? False

                                Tracking bug https://crbug.com/324939068

                                Estimated milestones Shipping on
                                desktop 133

                                Anticipated spec changes

                                Open questions about a feature may be
                                a source of future web compat or
                                interop issues. Please list open
                                issues (e.g. links to known github
                                issues in the project for the feature
                                specification) whose resolution may
                                introduce web compat/interop risk
                                (e.g., changing to naming or
                                structure of the API in a
                                non-backward-compatible way).

                                None

                                Link to entry on the Chrome Platform
                                Status
                                
https://chromestatus.com/feature/5137897664806912?gate=5147843735322624
                                
<https://chromestatus.com/feature/5137897664806912?gate=5147843735322624>


                                This intent message was generated by
                                Chrome Platform Status
                                <https://chromestatus.com>.

-- 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 visit
            
https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAM0wra9fn%2B7i8%3DOh72j43C7nVeG4%3D850zaqZShgiaAhhTVBCpA%40mail.gmail.com
            
<https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAM0wra9fn%2B7i8%3DOh72j43C7nVeG4%3D850zaqZShgiaAhhTVBCpA%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 visit
        
https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAPNB-6XY_%3DTj%3DWyi%3Dhh%3D-wny5beHqNAT7G_ObTR4eof-duXNdQ%40mail.gmail.com
        
<https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAPNB-6XY_%3DTj%3DWyi%3Dhh%3D-wny5beHqNAT7G_ObTR4eof-duXNdQ%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 visit https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAPNB-6WLWGs7NLckDw5v7XMy1WX6BefKunvNJQJ0wskrGFs0iQ%40mail.gmail.com <https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAPNB-6WLWGs7NLckDw5v7XMy1WX6BefKunvNJQJ0wskrGFs0iQ%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 visit 
https://groups.google.com/a/chromium.org/d/msgid/blink-dev/173a1c2d-e29e-462d-b58e-531774ed2e33%40chromium.org.

Reply via email to