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
>>>>>>>
>>>>>>> Summary
>>>>>>>
>>>>>>> According to 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 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,
>>>>>>> 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
>>>>>>>
>>>>>>> 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.

Reply via email to