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.
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.
n/a
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.
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.
n/a
Since SharedWorker is not supported in Android yet, the feature also does not affect to Android.
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.
Shipping on desktop | 133 |
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).
NoneContact emails yyana...@google.com
Explainer None
Specification https://w3c.github.io/ServiceWorker/#control-and-use-worker-client
SummaryAccording 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
TAG review None
TAG review status Not applicable
Risks
Interoperability and CompatibilityThis 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.
Gecko: No signal
On Friday, November 15, 2024 at 9:14:09 AM UTC+9 Chromestatus wrote:Contact emails yyana...@google.com
Explainer None
Specification https://w3c.github.io/ServiceWorker/#control-and-use-worker-client
SummaryAccording 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
TAG review None
TAG review status Not applicable
Risks
Interoperability and CompatibilityThis 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.
Gecko: No signalCan you ask Gecko for signals? I am especially curious why they haven't updated to match the specification.
2024年11月18日(月) 17:02 Domenic Denicola <dom...@chromium.org>:On Friday, November 15, 2024 at 9:14:09 AM UTC+9 Chromestatus wrote:Contact emails yyana...@google.com
Explainer None
Specification https://w3c.github.io/ServiceWorker/#control-and-use-worker-client
SummaryAccording 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
TAG review None
TAG review status Not applicable
Risks
Interoperability and CompatibilityThis 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?
On Tue, Nov 19, 2024 at 2:15 PM Yoshisato Yanagisawa <yyana...@google.com> wrote:2024年11月18日(月) 17:02 Domenic Denicola <dom...@chromium.org>:On Friday, November 15, 2024 at 9:14:09 AM UTC+9 Chromestatus wrote:Contact emails yyana...@google.com
Explainer None
Specification https://w3c.github.io/ServiceWorker/#control-and-use-worker-client
SummaryAccording 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
TAG review None
TAG review status Not applicable
Risks
Interoperability and CompatibilityThis 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.
- 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.
- 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?
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
--
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 visit https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAM0wra9fn%2B7i8%3DOh72j43C7nVeG4%3D850zaqZShgiaAhhTVBCpA%40mail.gmail.com.
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.