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 <blin...@chromium.org> wrote:
*From:*Mike Taylor <mike...@chromium.org>
*Sent:* Tuesday, January 14, 2025 7:10 AM
*To:* Liang Zhao (REDMOND) <liang...@microsoft.com>;
blin...@chromium.org
*Cc:* hiro...@chromium.org; 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 mike...@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
*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/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
<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/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
<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+...@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+...@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>.