LGTM3 Thanks, Vlad
On Wed, Sep 3, 2025, 12:58 p.m. Chris Harrelson <chris...@chromium.org> wrote: > Thanks for all the detailed explanations. LGTM2. > > On Wed, Sep 3, 2025 at 8:48 AM Chris Thompson <cth...@chromium.org> wrote: > >> *To Vlad's questions:* >> >> > - I assume direct navigation to a local network is fine and remains >> without permission? (like navigating to your router's settings page) >> >> Correct, main frame navigations are not currently in scope. >> >> > - By "secure context", you mean that the page which wants to access >> local network has to be secure. Is that right? >> >> Yes, to be granted the permission the requesting page must be a secure >> context. >> >> > - What's the behavior of local file (file://) accessing local network? >> >> This is somewhat weakly specified currently (file:// URLs are weird in >> general), but Chromium's behavior is to treat them the same as >> http://localhost/ and thus not subject to LNA restrictions. >> >> *To Daniel's question:* >> >> > I don't quite understand how these people are affected. Will something >> break for them, or open up for them? If something breaks, how badly does it >> break? Or is it something that we want to break? >> >> Certain requests would fail due to the combination of the LNA permission >> requiring secure contexts and mixed content blocking. >> >> The main case that breaks is a public site making a request to >> http://a.example, which *resolves* to a local IP address (or the >> loopback address). Today, that site could be on HTTP to avoid having these >> requests blocked as mixed content. With LNA, the site must be on HTTPS to >> request the permission, *but* the browser can't know that these >> subresource requests are until after we've resolved the hostname (which >> occurs *after* mixed content blocking). >> >> For fetch() calls, we have the `targetAddressSpace` option for >> pre-specifying that requests like this are to the local network, and thus >> we can exempt them from mixed content blocking. This may require some >> slight modifications to existing sites to add the flag to any affected >> fetch() calls to avoid breakage. >> >> The reverse OT helps give a temporary escape hatch here, to give sites >> more time to adapt (such as adding `targetAddressSpace` flags, migrating to >> HTTPS, etc.). We plan to follow up with any sites that enroll in the OT to >> try to see if there are additional affordances we could add to the spec and >> our implementation to help address why they can't migrate to HTTPS yet. >> >> On Wed, Sep 3, 2025 at 8:35 AM Daniel Bratell <bratel...@gmail.com> >> wrote: >> >>> In addition to Vlad's questions, I have one question about this line in >>> the Compat section: >>> >>> > Based on our UseCounter >>> PrivateNetworkAccessInsecureResourceNotKnownPrivate, we currently estimate >>> an upper bound of 0.004% of page loads may make local network requests >>> which would currently run afoul of mixed content blocking despite the >>> exceptions we have added. >>> >>> I don't quite understand how these people are affected. Will something >>> break for them, or open up for them? If something breaks, how badly does it >>> break? Or is it something that we want to break? >>> >>> /Daniel >>> >>> >>> On 2025-09-03 17:29, Vladimir Levin wrote: >>> >>> Hey, I just wanted to clarify a couple of use cases: >>> >>> - I assume direct navigation to a local network is fine and remains >>> without permission? (like navigating to your router's settings page) >>> - By "secure context", you mean that the page which wants to access >>> local network has to be secure. Is that right? >>> - What's the behavior of local file (file://) accessing local network? >>> >>> Thanks, >>> Vlad >>> >>> On Wednesday, September 3, 2025 at 10:23:02 AM UTC-4 Alex Russell wrote: >>> >>>> Sorry, failed to spot the long discussion in Considered Alternatives in >>>> the Explainer. Thanks for putting it all down there. >>>> >>>> LGTM1 >>>> >>>> On Wednesday, September 3, 2025 at 3:20:54 PM UTC+1 Alex Russell wrote: >>>> >>>>> Is there a document that summarises why Private Network Access was >>>>> abandoned? And was there any discussion of explicit API for this? >>>>> >>>>> Best, >>>>> >>>>> Alex >>>>> >>>>> On Wednesday, September 3, 2025 at 12:32:02 AM UTC+1 Chris Thompson >>>>> wrote: >>>>> >>>>>> Contact emails >>>>>> >>>>>> cth...@chromium.org >>>>>> >>>>>> Explainer >>>>>> >>>>>> https://github.com/WICG/local-network-access/blob/main/explainer.md >>>>>> >>>>>> Specification >>>>>> >>>>>> https://wicg.github.io/local-network-access >>>>>> >>>>>> Summary >>>>>> >>>>>> Chrome 141 restricts the ability for sites to make requests to the >>>>>> user's local network, gated behind a permission prompt. >>>>>> >>>>>> A local network request is any request from a public website to a >>>>>> local IP address or loopback, or from a local website (e.g. intranet) to >>>>>> loopback. Gating the ability for websites to perform these requests >>>>>> behind >>>>>> a permission mitigates the risk of cross-site request forgery attacks >>>>>> against local network devices such as routers, and reduces the ability of >>>>>> sites to use these requests to fingerprint the user's local network. >>>>>> >>>>>> This permission is restricted to secure contexts. If granted, the >>>>>> permissions additionally relaxes mixed content blocking for local network >>>>>> requests (since many local devices are not able to obtain publicly >>>>>> trusted >>>>>> TLS certificates). Requests from insecure contexts will be silently >>>>>> rejected. Sites may temporarily opt-out of the secure contexts >>>>>> restriction >>>>>> using the reverse origin trial “Local Network Access from Non-Secure >>>>>> Contexts >>>>>> <https://developer.chrome.com/origintrials/#/view_trial/3826370833404657665>”, >>>>>> included in this launch. >>>>>> >>>>>> This initial version of Local Network Access (LNA) applies to >>>>>> subresource requests, fetch() requests, and navigating subframes. In the >>>>>> near future we plan to send a separate Intent-to-Ship for applying LNA to >>>>>> WebSockets, WebTransport, and WebRTC connections. >>>>>> >>>>>> This work supersedes a prior effort called "Private Network Access" >>>>>> (e.g., https://chromestatus.com/feature/5737414355058688, >>>>>> https://chromestatus.com/feature/5954091755241472) which used >>>>>> preflight requests to allow local devices to opt-in to receiving >>>>>> requests. >>>>>> >>>>>> Enterprises that need to disable or auto-grant the permission can do >>>>>> so using the LocalNetworkAccessAllowedForUrls >>>>>> <https://chromeenterprise.google/policies/#LocalNetworkAccessAllowedForUrls> >>>>>> and LocalNetworkAccessBlockedForUrls >>>>>> <https://chromeenterprise.google/policies/#LocalNetworkAccessBlockedForUrls> >>>>>> policies. The value of '*' can be used to allow local network access on >>>>>> all >>>>>> URLs, matching the behavior prior to rolling out the restrictions. At >>>>>> launch, the policies can be set using custom configurations >>>>>> <https://support.google.com/chrome/a/answer/14749672>. >>>>>> >>>>>> >>>>>> Blink component >>>>>> >>>>>> Blink>SecurityFeature>LocalNetworkAccess >>>>>> <https://issues.chromium.org/issues?q=customfield1222907:%22Blink%3ESecurityFeature%3ELocalNetworkAccess%22> >>>>>> >>>>>> TAG review >>>>>> >>>>>> https://github.com/w3ctag/design-reviews/issues/1116 >>>>>> >>>>>> TAG review status >>>>>> >>>>>> Issues addressed (satisfied with concerns) >>>>>> >>>>>> Origin Trial Name >>>>>> >>>>>> Local Network Access from Non-Secure Contexts >>>>>> <https://developer.chrome.com/origintrials/#/view_trial/3826370833404657665> >>>>>> >>>>>> Chromium Trial Name >>>>>> >>>>>> LocalNetworkAccessNonSecureContextAllowed >>>>>> >>>>>> Origin Trial documentation link >>>>>> >>>>>> https://developer.chrome.com/blog/local-network-access >>>>>> >>>>>> Risks >>>>>> >>>>>> Interoperability and Compatibility >>>>>> >>>>>> Interoperability risks: >>>>>> >>>>>> LNA requires a Secure Context to make local network requests, but >>>>>> exempts some of these local network requests from mixed content checks >>>>>> (if >>>>>> the user grants permission). If another browser does not implement LNA, >>>>>> these same local network requests might be blocked as mixed content, or >>>>>> the >>>>>> site might need to serve over HTTPS for Chrome and over HTTP for browsers >>>>>> that don't implement LNA (to avoid triggering mixed content). >>>>>> >>>>>> Compatibility risks: >>>>>> >>>>>> There are some local network requests types that we cannot know ahead >>>>>> of time will be going to the local network (e.g., a subresource request >>>>>> to >>>>>> http://test.example which then resolves to 192.168.0.1). These would >>>>>> be blocked as mixed content, as mixed content checks happen before >>>>>> hostname >>>>>> resolution (i.e., they occur before "Obtain a connection" in Fetch). >>>>>> Explicit local IP addresses, .local domains, and fetch() requests >>>>>> with the new `targetAddressSpace` fetch() option are exempted from mixed >>>>>> content checks, but other connection types may be difficult for >>>>>> developers >>>>>> to work around mixed content blocking (e.g., WebSockets >>>>>> wicg/local-network-access#16 >>>>>> <https://github.com/wicg/local-network-access/issues/16>). >>>>>> >>>>>> Alongside shipping these restrictions we are running a reverse origin >>>>>> trial to allow sites to (temporarily) opt-out of the secure contexts >>>>>> requirement -- this would be an escape hatch for mixed content. This >>>>>> origin >>>>>> trial can only be enabled through origin tokens delivered via HTTP header >>>>>> due the trial affecting the security policy of the document being loaded. >>>>>> >>>>>> We have previously run a Dev Trial and a 50% Finch experiment on >>>>>> Canary/Dev/Beta which helped alert potentially affected developers and >>>>>> find >>>>>> some bugs early before shipping. Based in part on questions from affected >>>>>> developers we have put together an “LNA Adoption Guide >>>>>> <https://docs.google.com/document/d/1QQkqehw8umtAgz5z0um7THx-aoU251p705FbIQjDuGs/edit?usp=sharing>” >>>>>> to help affected sites adapt to these new restrictions. >>>>>> >>>>>> Based on our UseCounter >>>>>> PrivateNetworkAccessInsecureResourceNotKnownPrivate >>>>>> <https://chromestatus.com/metrics/feature/timeline/popularity/5319>, >>>>>> we currently estimate an upper bound of 0.004% of page loads may make >>>>>> local >>>>>> network requests which would currently run afoul of mixed content >>>>>> blocking >>>>>> despite the exceptions we have added. >>>>>> >>>>>> >>>>>> Gecko: Under consideration ( >>>>>> https://groups.google.com/a/mozilla.org/g/dev-platform/c/B8oN3ARp_j0/m/rWKXmnj4AAAJ) >>>>>> Firefox is prototyping based on our spec draft. Request for signals: >>>>>> https://github.com/mozilla/standards-positions/issues/1260 >>>>>> >>>>>> WebKit: No signal. Request for signals: >>>>>> https://github.com/WebKit/standards-positions/issues/520 >>>>>> >>>>>> Web developers: Mixed signals ( >>>>>> https://github.com/explainers-by-googlers/local-network-access/issues). >>>>>> Feedback from developers has been mixed, both due the new burden of a >>>>>> permission prompt (compared to PNA) and from some of the difficulty of >>>>>> navigating mixed content (the same as PNA). Many developers understand >>>>>> the >>>>>> reasoning behind adding the new permission though, and are productively >>>>>> engaging on how they can avoid issues. >>>>>> >>>>>> Other signals: Brave ships a "localhost access" permission (see >>>>>> https://brave.com/privacy-updates/27-localhost-permission/) >>>>>> >>>>>> Ergonomics >>>>>> >>>>>> N/A >>>>>> >>>>>> >>>>>> Activation >>>>>> >>>>>> A new permission will be shown to users, which may be unexpected. If >>>>>> users deny the permission, functionality may break (potentially requiring >>>>>> additional support from site owners). Part of our goal for having a Dev >>>>>> Trial was to give site owners time to adjust their requests (especially >>>>>> if >>>>>> they need to use the mixed content exemptions) and to potentially adapt >>>>>> their UX flows so the permission requests are less surprising to users. >>>>>> We >>>>>> have collected some advice for how sites can adapt to these new >>>>>> restrictions in our “LNA Adoption Guide >>>>>> <https://docs.google.com/document/d/1QQkqehw8umtAgz5z0um7THx-aoU251p705FbIQjDuGs/edit?usp=sharing> >>>>>> ”. >>>>>> >>>>>> >>>>>> Security >>>>>> >>>>>> Exempting some requests from mixed content checks based on declared >>>>>> targetAddressSpace could potentially be used to arbitrarily bypass mixed >>>>>> content. To avoid this, Chrome verifies that the actual resolved address >>>>>> space matches what was declared, and blocks the request if it does not. >>>>>> >>>>>> >>>>>> WebView application risks >>>>>> >>>>>> These restrictions do not apply to WebView (see below). >>>>>> >>>>>> >>>>>> Debuggability >>>>>> >>>>>> When a request would be blocked under LNA, we add a new DevTools >>>>>> Issue with details. >>>>>> >>>>>> >>>>>> Will this feature be supported on all six Blink platforms (Windows, >>>>>> Mac, Linux, ChromeOS, Android, and Android WebView)? >>>>>> >>>>>> No >>>>>> >>>>>> Android WebView currently doesn't support letting apps grant any new >>>>>> permission types, so the Local Network Access permission is currently >>>>>> unconditionally granted in WebView. In parallel to this effort, Android >>>>>> is >>>>>> adding a Local Network permission which would apply to the app that >>>>>> embeds >>>>>> the WebView >>>>>> https://developer.android.com/privacy-and-security/local-network-permission >>>>>> >>>>>> >>>>>> Is this feature fully tested by web-platform-tests >>>>>> <https://chromium.googlesource.com/chromium/src/+/main/docs/testing/web_platform_tests.md> >>>>>> ? >>>>>> >>>>>> No >>>>>> >>>>>> We have coverage of core aspects of the feature in WPTs and are >>>>>> actively working on building out the test suite >>>>>> https://wpt.fyi/results/fetch/local-network-access >>>>>> <https://wpt.fyi/results/fetch/local-network-access>. We have >>>>>> additional testing coverage in Chromium browser tests, particularly for >>>>>> areas that are difficult to write WPTs for. >>>>>> >>>>>> >>>>>> DevTrial instructions >>>>>> >>>>>> https://developer.chrome.com/blog/local-network-access >>>>>> >>>>>> Flag name on about://flags >>>>>> >>>>>> local-network-access-check >>>>>> >>>>>> Finch feature name >>>>>> >>>>>> LocalNetworkAccessChecks >>>>>> >>>>>> Rollout plan >>>>>> >>>>>> Will ship enabled for all users >>>>>> >>>>>> Requires code in //chrome? >>>>>> >>>>>> True >>>>>> >>>>>> Tracking bug >>>>>> >>>>>> https://crbug.com/394009026 >>>>>> >>>>>> Launch bug >>>>>> >>>>>> https://launch.corp.google.com/launch/4395658 >>>>>> >>>>>> Sample links >>>>>> >>>>>> https://lna-testing.notyetsecure.com >>>>>> >>>>>> Estimated milestones >>>>>> >>>>>> Shipping on desktop >>>>>> >>>>>> 141 >>>>>> >>>>>> Origin trial desktop first >>>>>> >>>>>> 141 >>>>>> >>>>>> Origin trial desktop last >>>>>> >>>>>> 146 >>>>>> >>>>>> DevTrial on desktop >>>>>> >>>>>> 138 >>>>>> >>>>>> Shipping on Android >>>>>> >>>>>> 141 >>>>>> >>>>>> Origin trial Android first >>>>>> >>>>>> 141 >>>>>> >>>>>> Origin trial Android last >>>>>> >>>>>> 146 >>>>>> >>>>>> DevTrial on Android >>>>>> >>>>>> 139 >>>>>> >>>>>> >>>>>> 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/5152728072060928?gate=5199213979500544 >>>>>> >>>>>> Links to previous Intent discussions >>>>>> >>>>>> Intent to Prototype: >>>>>> https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CALMy46SB%2Bv9dnp-wrJ4WH0R4UJmWuutq1st92%3D_zOyhnLJ_vkw%40mail.gmail.com >>>>>> >>>>>> Intent to Experiment: >>>>>> https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAHEiSH03XUPgcAkVmE25PpvDXMsx%3D16Kgeid_KJ8vRgyvueNuA%40mail.gmail.com >>>>>> >>>>>> Ready for Developer Testing: >>>>>> https://groups.google.com/a/chromium.org/g/blink-dev/c/D4nqAa3FUN8/m/WFVmJYh0BAAJ >>>>>> >>>>>> >>>>>> 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/8863a050-972e-4d00-9960-b4dc6436b013n%40chromium.org >>> <https://groups.google.com/a/chromium.org/d/msgid/blink-dev/8863a050-972e-4d00-9960-b4dc6436b013n%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/CALMy46SACi%2B3kGz_sQUfYxK9ucSjp0GMzKNyVgPip5mynf4nAg%40mail.gmail.com >> <https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CALMy46SACi%2B3kGz_sQUfYxK9ucSjp0GMzKNyVgPip5mynf4nAg%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/CAOMQ%2Bw8SK69gpEaZ7GZcvb6nzAmd5sDKR3UzRHvtJ1MNexryxg%40mail.gmail.com > <https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAOMQ%2Bw8SK69gpEaZ7GZcvb6nzAmd5sDKR3UzRHvtJ1MNexryxg%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/CADsXd2M6ZxH6S996av2zfhipCTBP3DgjKg9BvhB1rSrxm_PgYw%40mail.gmail.com.