Thanks - it is indeed confusing to follow all the various points in this thread (sorry if I made it more so).

On 2/24/25 4:00 PM, 'Liang Zhao' via blink-dev wrote:
There seems to be something that requires clarification. This feature only tries to change behavior for CSP blocked worker. "new worker" could also be blocked due to other reasons like cross origin, and we are not trying to change behavior of that scenario. Among the sites that were broken, only apple.com was due to CSP blocked worker. Other sites were due to cross origin worker url. https://bugzilla.mozilla.org/show_bug.cgi?id=1471805 and related code change (https://phabricator.services.mozilla.com/D188592) that is still open is for the cross origin case. There was an attempt to also address CSP blocked worker in the same change, but that has not happened. From the code review comment, it seems that it is not easy for Mozilla to also handle CSP case.

Appreciate the advice on telemetry data collection, will collect a usage count when "new worker" is blocked by CSP.

On Monday, February 24, 2025 at 7:27:50 AM UTC-8 Mike Taylor wrote:

    Hey Liang,

    Thank you very much for chasing down some answers!

    The situation is still a little tricky to evaluate, perhaps
    because there are conflicting statements across a number of
    Bugzilla bugs and GitHub issues.

    Here's a summary of my understanding:

    WebKit states concerns about webcompat (which I share, based on
    the number of bug reports Firefox has seen):
    
https://github.com/web-platform-tests/interop/issues/855#issuecomment-2612231865

    Interop 2025 accepted the proposal, so presumably Firefox agrees
    (and you already stated as much). But
    https://bugzilla.mozilla.org/show_bug.cgi?id=1471805 (the patch
    for Gecko to match Blink/WebKit) is still open with no updates
    pointing to Interop 2025 or similar.

    On the breakage we're aware of:

    https://bugzilla.mozilla.org/show_bug.cgi?id=1912873 is still open
    (it should probably be closed as incomplete because the site was
    updated to remove the problematic video in question - unclear if
    Apple actually fixed the CSP issue?)

    https://github.com/webcompat/web-bugs/issues/100874#issuecomment-1615265834
    talks about chase.com <http://chase.com> breakage, due to an
    embedded Google Map expecting the error. I tried to load that site
    to verify today, but it seems like it no longer exists. There's
    also a different site called "exploretock.com
    <http://exploretock.com>" which was broken in Firefox, maybe fixed
    now?

    If anyone from Mozilla is reading, it would be cool if someone
    went and cleaned up a bunch of bugs so the situation was less
    confusing.

    (some comments below)

    On 2/21/25 1:29 PM, 'Liang Zhao' via blink-dev wrote:
    An update for the question on Mozilla coordination. Mozilla has
    not changed their behavior and does not plan to do so. They
    actually filed an interop issue at
    https://github.com/web-platform-tests/interop/issues/855, which
    was discussed at interop 2025. My understanding of that
    discussion is that Chrome and Safari should change the behavior
    to align with spec, and revert to current behavior if we have to
    due to site compat.
    There are actually other cases where Mozilla fire error event
    while Chrome and Safari throw exception, like not same origin
    worker url. Most of the cases in
    
https://github.com/web-platform-tests/wpt/issues/41745#issuecomment-2377512723,
    https://github.com/webcompat/web-bugs/issues/100874 and
    https://bugzilla.mozilla.org/show_bug.cgi?id=1927467 are for
    those cases. We are not trying to change behavior for those cases
    with this feature. The support.apple.com
    <http://support.apple.com> issue is related to CSP blocked
    worker. The site has been updated and doesn't have the issue any
    more.

    On Wednesday, January 22, 2025 at 1:20:52 AM UTC-8 Mike Taylor wrote:

        In
        
https://github.com/web-platform-tests/wpt/issues/41745#issuecomment-2377512723
        - there's discussion of breakage on support.apple.com
        <http://support.apple.com> with this behavior, and Firefox
        developers mentions moving their behavior to align with
        Safari/Webkit given this breakage. The Bugzilla issue links
        to https://github.com/webcompat/web-bugs/issues/100874 and
        https://bugzilla.mozilla.org/show_bug.cgi?id=1927467.

        Have you coordinated with Mozilla on this?

        On 1/21/25 7:50 PM, 'Liang Zhao' via blink-dev wrote:


        On Monday, January 20, 2025 at 4:48:38 AM UTC-8 Mike Taylor
        wrote:

            I'd still like to better understand the compat risk here
            - I suspect it's low, but I would not be surprised if
            there is code attempting to handle the difference
            between Chrome/Safari & Firefox with UA sniffing (which
            means it may break after this change).

            Have you tried to look at any usage in the wild, to get
            a sense of how sites are dealing with CSP blocking a
            worker today?

        The expected way to handle CSP blocking is to update CSP
        policy to allow the worker. Normally, a site’s own content
        security policy should not block its own workers. If a
        worker is blocked, the worker would not run and part of the
        site would be broken. The developer should update the site’s
        CSP policy to allow the worker. DevTools console message
        would clearly state that the worker is blocked by the site’s
        own CSP and CSP reporting feature allows site to detect the
        blocking of workers in the wild. Whether a worker runs
        should be more important to a site than the behavior when
        the worker is blocked. If a site cares about the blocking,
        it is expected that the site either updates its CSP to allow
        the worker, or removes the worker related code if the worker
        should not run. This is the main reason of my assessment of
        low compat risk. It is a behavior change when an error of a
        site's configuration has already caused bigger issue to the
        site.

    I hear you, but if we change the behavior my concern is about the
    user's experience. Waiting for devs to notice and fix the breakage
    is not ideal.

        I thought about collecting telemetry data and decided not
        to. We could collect counts of worker being blocked by CSP,
        but it would be hard to collect data on how a site might
        handle the blocking, like whether a site sniffs UA string
        and behaves differently, has a try-catch or has code to
        handle error event later if we don’t throw exception in
        constructor. As it is expected that it could happen that CSP
        blocks some workers, like during testing of a site, a raw
        count of the blocking would not help much on measuring the
        impact of this behavior change.

    Having some kind of telemetry would help here, even if imperfect.
    If we know at least 3 sites were broken in Firefox for years
    (apple.com <http://apple.com>, dining.chase.com
    <http://dining.chase.com>, exploretock.com
    <http://exploretock.com>), it seems safe to assume there is more
    we don't know about.


Will add telemetry data collection to collect a usage count when "new worker" is blocked by CSP.

            On 1/17/25 7:27 PM, Liang Zhao (REDMOND) wrote:

            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>.

-- 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/e2cc3be3-3e77-4e9c-9ab0-e0325e3ef292n%40chromium.org
        
<https://groups.google.com/a/chromium.org/d/msgid/blink-dev/e2cc3be3-3e77-4e9c-9ab0-e0325e3ef292n%40chromium.org?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/909c58a5-94d2-4a26-9daf-efb9b72bf3efn%40chromium.org
    
<https://groups.google.com/a/chromium.org/d/msgid/blink-dev/909c58a5-94d2-4a26-9daf-efb9b72bf3efn%40chromium.org?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/15aa5f37-cb14-4acc-bc93-92bb17fb1c53n%40chromium.org <https://groups.google.com/a/chromium.org/d/msgid/blink-dev/15aa5f37-cb14-4acc-bc93-92bb17fb1c53n%40chromium.org?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/88b77d07-845d-4678-bbb5-8de4cd1742b7%40chromium.org.

Reply via email to