Got positive signal from Safari.

On Wednesday, January 15, 2025 at 5:25:48 PM UTC+1 Chris Harrelson wrote:
Please also fill out the various reviews in your chromestatus entry (privacy, 
security, enterprise, debuggability, testing).



On Tue, Jan 14, 2025 at 2:43 PM 'Liang Zhao (REDMOND)' via blink-dev 
<blink-dev@chromium.org<mailto:blink-dev@chromium.org>> wrote:





From: Mike Taylor <miketa...@chromium.org<mailto:miketa...@chromium.org>>
Sent: Tuesday, January 14, 2025 7:10 AM
To: Liang Zhao (REDMOND) 
<liang.z...@microsoft.com<mailto:liang.z...@microsoft.com>>; 
blink-dev@chromium.org<mailto:blink-dev@chromium.org>
Cc: hirosh...@chromium.org<mailto:hirosh...@chromium.org>; 
mk...@chromium.org<mailto:mk...@chromium.org>
Subject: [EXTERNAL] Re: [blink-dev] Intent to Ship: Fire error event instead of 
throwing for CSP blocked worker



You don't often get email from 
miketa...@chromium.org<mailto:miketa...@chromium.org>. Learn why this is 
important<https://aka.ms/LearnAboutSenderIdentification>

On 1/13/25 5:19 PM, 'Liang Zhao (REDMOND)' via blink-dev wrote:

Contact emails

lz...@microsoft.com<mailto:lz...@microsoft.com>


Explainer

None

I think an explainer (or even an inline text explaining the change, providing 
an example, etc) would have significantly helped folks understand what it is 
that you're trying to ship.
Could you write something to that effect?

When the url is blocked by Content Security Policy, script code “new 
Worker(url)” and “new SharedWorker(url)” currently throws exception. According 
to spec, the CSP check is done as part of fetch which happens asynchronously 
and the constructor should not throw. Instead an error event should fire after 
the object is returned.
This feature aligns Chromium behavior with spec.




Specification

https://fetch.spec.whatwg.org/#concept-main-fetch
This points at a relatively long algorithm. Can you point out the specific 
steps that are relevant here?

Step 7 of the linked “main fetch” section. Updated the spec link in 
chromestatus to https://www.w3.org/TR/CSP3/#fetch-integration, which is a 
better place to understand that CSP check is part of fetch instead of details 
of how fetch is done in the fetch spec.



Summary

When blocked by CSP, Chromium currently throws SecurityError from constructor. 
Spec requires CSP to be checked as part of fetch and fires error event 
asynchronously. This aims to make Chromium spec conformant, which is not 
throwing during constructor and fires error event asynchronously.

Which constructor?

The constructor of Worker and SharedWorker objects. Also updated the 
chromestatus so that it is clear.
An example demonstrating where developers need to catch those exceptions now 
would be helpful IMO.

Before the change if developer wants to handle the worker being blocked 
failure, the code would be something like this:
    try {
      var worker = new Worker(url);
      …
    } catch (e) {
     // error handling code
    }
After the change, the code would be something like this:
    var worker = new Worker(url);
    worker.addEventListener('error', function(event) {
        // error handling code
        });
…



Blink component

Blink>SecurityFeature>ContentSecurityPolicy<https://issues.chromium.org/issues?q=customfield1222907:%22Blink%3ESecurityFeature%3EContentSecurityPolicy%22>


TAG review

None


TAG review status

Not applicable


Risks



Interoperability and Compatibility

Are you able to expand on the compatibility implications for this change, i.e., 
do we know if Firefox has any site breakage as a result of their behavior? What 
scenarios might surprise developers who are relying on Chrome's current 
behavior, etc?



We are not aware of any site breakage for Firefox due to its behavior. If a 
site has a worker that is blocked by CSP and has code after "new Worker()", 
those code currently does not run in Chrome or Safari, but runs in Firefox. 
After the change, those code would run in Chrome.
Also, if sites are doing something as a result of catching a CSP failure 
exception, that would stop working (unless they shift to start listening to the 
relevant event), right?

That is correct. If a site has code that runs upon catching SecurityError 
exception during new Worker()/SharedWorker(), those code would not run. 
Instead. if the site has error event listener, that event listener will run.



Currently Firefox works as spec-ed while Safari works the same as Chrome. With 
the wrong test code in WPT tests, Firefox is failing the tests: 
https://wpt.fyi/results/content-security-policy/worker-src/dedicated-worker-src-child-fallback-blocked.sub.html?label=experimental&label=master&aligned
 
https://wpt.fyi/results/content-security-policy/worker-src/shared-worker-src-child-fallback-blocked.sub.html?label=experimental&label=master&aligned
 After updating Chrome code and WPT tests, Firefox passes the tests while 
Safari fails the tests.

Can you explain what you mean by wrong test code?

The current WPT test code expects exception to throw, which is not what’s 
required by the spec. The test code has a TODO comment states that the test 
code is wrong with a link to https://crbug.com/663298,


Gecko: Shipped/Shipping

WebKit: No signal
Have we asked for a signal from WebKit folks?

Filed an issue at https://github.com/WebKit/standards-positions/issues/451.

Positive signal from https://github.com/WebKit/standards-positions/issues/451: 
“As such I suggest we mark this as position: support one week from now.”

Web developers: No signals

Other signals: This changes the behavior the same as Firefox.


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?



Debuggability

When worker is blocked by CSP, there is DevTools message logged about the 
blocking by CSP. This behavior is not changed.



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

Yes


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/content-security-policy/worker-src/dedicated-worker-src-child-fallback-blocked.sub.html?label=experimental&label=master&aligned
 
https://wpt.fyi/results/content-security-policy/worker-src/shared-worker-src-child-fallback-blocked.sub.html?label=experimental&label=master&aligned
 Note that the test code currently has the wrong expectation and will be 
updated as part of this feature work.



Flag name on about://flags

None


Finch feature name

None


Non-finch justification

This is a simple change of behavior for uncommon scenario where worker is 
blocked by CSP, and the changed behavior is the same as Firefox and spec 
aligned. It is unlikely that a site depends on the current behavior of throwing 
exception for blocked worker.

Can we back up "it is unlikely" with some data? Absent that, I would strongly 
suggest we put this behind a flag.

Changed the plan to put this new behavior behind NoThrowForCSPBlockedWorker 
feature flag. Also updated the chromestatus.



Requires code in //chrome?

False


Tracking bug

https://issues.chromium.org/issues/41285169


Estimated milestones

Shipping on desktop

134

DevTrial on desktop

134

Shipping on Android

134

DevTrial on Android

134

Shipping on WebView

134



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/5177205656911872?gate=5108732671033344

--
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<mailto:blink-dev+unsubscr...@chromium.org>.
To view this discussion visit 
https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CO1PR00MB2285E0FC0FEC6768415E9F979E1F2%40CO1PR00MB2285.namprd00.prod.outlook.com<https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CO1PR00MB2285E0FC0FEC6768415E9F979E1F2%40CO1PR00MB2285.namprd00.prod.outlook.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<mailto:blink-dev+unsubscr...@chromium.org>.
To view this discussion visit 
https://groups.google.com/a/chromium.org/d/msgid/blink-dev/BY1PR00MB2289751B22915D40E547832F9E182%40BY1PR00MB2289.namprd00.prod.outlook.com<https://groups.google.com/a/chromium.org/d/msgid/blink-dev/BY1PR00MB2289751B22915D40E547832F9E182%40BY1PR00MB2289.namprd00.prod.outlook.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/CO1PR00MB228588302C562E9E8E8B35509E1B2%40CO1PR00MB2285.namprd00.prod.outlook.com.

Reply via email to