Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: f83ad9a455998aacca975429e2c7dd1a1a5ea215
      
https://github.com/WebKit/WebKit/commit/f83ad9a455998aacca975429e2c7dd1a1a5ea215
  Author: Ian Gower <[email protected]>
  Date:   2026-09-22 (Tue, 22 Sep 2026)

  Changed paths:
    A 
LayoutTests/http/wpt/fetch/local-network-access/permissions-query-reports-the-recorded-decision-expected.txt
    A 
LayoutTests/http/wpt/fetch/local-network-access/permissions-query-reports-the-recorded-decision.html
    A 
LayoutTests/http/wpt/fetch/local-network-access/resources/permission-query-frame.html
    M Source/WebCore/Modules/permissions/PermissionName.h
    M Source/WebCore/Modules/permissions/PermissionName.idl
    M Source/WebCore/Modules/permissions/PermissionState.idl
    M Source/WebCore/Modules/permissions/Permissions.cpp
    M Source/WebCore/html/PermissionsPolicy.cpp
    M Source/WebCore/html/PermissionsPolicy.h
    M Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp
    M Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h
    M Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in
    M Source/WebKit/NetworkProcess/NetworkProcess.cpp
    M Source/WebKit/NetworkProcess/NetworkProcess.h
    M Source/WebKit/NetworkProcess/NetworkProcess.messages.in
    M Source/WebKit/NetworkProcess/NetworkResourceLoadParameters.h
    M 
Source/WebKit/NetworkProcess/NetworkResourceLoadParameters.serialization.in
    M Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp
    M Source/WebKit/NetworkProcess/NetworkSession.cpp
    M Source/WebKit/NetworkProcess/NetworkSession.h
    M Source/WebKit/Shared/WebCoreArgumentCoders.serialization.in
    M Source/WebKit/UIProcess/API/C/WKWebsiteDataStoreRef.cpp
    M Source/WebKit/UIProcess/API/C/WKWebsiteDataStoreRef.h
    M Source/WebKit/UIProcess/WebPageProxy.cpp
    M Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp
    M Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h
    M Source/WebKit/WebProcess/Network/WebLoaderStrategy.cpp
    M Source/WebKit/WebProcess/WebCoreSupport/WebPermissionController.cpp
    M Tools/WebKitTestRunner/TestController.cpp

  Log Message:
  -----------
  Record Local Network Access permission decisions and report them from 
navigator.permissions
https://bugs.webkit.org/show_bug.cgi?id=324190
rdar://187410420

Reviewed by Alex Christensen.

Feature work for Local Network Access 
(https://wicg.github.io/local-network-access/), sections 2.6
and 3.1.1.

The check algorithm has consulted a grant map since 320971@main, but nothing 
wrote to it, so every
outcome that depends on a recorded decision was unreachable. This adds the 
writer, the revocation
path, and navigator.permissions.query() support for the two permissions.

query() is answered from the networking process rather than the UI client, 
because that is where the
decision is enforced; answering anywhere else would let a page be told 
"granted" and then have the
request refused. WebPermissionController intercepts the two names in the web 
process, so
WebPageProxy::queryPermission never sees them.

The decision is keyed on the top-level origin as well as the requesting one, so 
a grant made on one
site does not apply to the same origin embedded elsewhere. An explicit denial 
is reported as denied
rather than softened to prompt, so a site can tell "the user said no" from "not 
asked yet".

local-network and loopback-network are registered as permissions and as 
policy-controlled features
per section 2.6, with 'self' as the default allowlist. A frame the permissions 
policy forbids is
reported denied without consulting the record. Section 2.6 notes that Chromium 
still accepts the
pre-split "local-network-access" as an alias for both; this does not, since the 
two states are
tracked independently and there is no one state to report.

PermissionState::Granted is zero, so a default-constructed reply on IPC failure 
would have reported a
grant nobody made. The reply is std::optional<PermissionState> instead, 
matching the Query message on
WebPermissionControllerProxy, so a failed reply is not a permission state at 
all and query() rejects
rather than reporting one.

The test asserts the recorded state; that query() and enforcement agree needs 
bug 323474's
address-space override to stage a public client.

* 
LayoutTests/http/wpt/fetch/local-network-access/permissions-query-reports-the-recorded-decision-expected.txt:
 Added.
* 
LayoutTests/http/wpt/fetch/local-network-access/permissions-query-reports-the-recorded-decision.html:
 Added.
* 
LayoutTests/http/wpt/fetch/local-network-access/resources/permission-query-frame.html:
 Added.
* Source/WebCore/Modules/permissions/PermissionName.h:
* Source/WebCore/Modules/permissions/PermissionName.idl:
* Source/WebCore/Modules/permissions/PermissionState.idl:
* Source/WebCore/Modules/permissions/Permissions.cpp:
(WebCore::isAllowedByPermissionsPolicy):
(WebCore::toPermissionName):
* Source/WebCore/html/PermissionsPolicy.cpp:
(WebCore::toFeatureNameForLogging):
(WebCore::readFeatureIdentifier):
(WebCore::defaultAllowlistValue):
* Source/WebCore/html/PermissionsPolicy.h:
* Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp:
(WebKit::NetworkConnectionToWebProcess::queryLocalNetworkAccessPermission):
* Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h:
* Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in:
* Source/WebKit/NetworkProcess/NetworkProcess.cpp:
(WebKit::NetworkProcess::setLocalNetworkAccessPermissionForTesting):
(WebKit::NetworkProcess::removeLocalNetworkAccessPermissions):
(WebKit::NetworkProcess::clearLocalNetworkAccessPermissionsForTesting):
* Source/WebKit/NetworkProcess/NetworkProcess.h:
* Source/WebKit/NetworkProcess/NetworkProcess.messages.in:
* Source/WebKit/NetworkProcess/NetworkResourceLoadParameters.h:
* Source/WebKit/NetworkProcess/NetworkResourceLoadParameters.serialization.in:
* Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp:
(WebKit::NetworkResourceLoader::checkLocalNetworkAccess):
* Source/WebKit/NetworkProcess/NetworkSession.cpp:
(WebKit::NetworkSession::setLocalNetworkAccessPermissionForTesting):
(WebKit::NetworkSession::localNetworkAccessPermission const):
(WebKit::NetworkSession::removeLocalNetworkAccessPermissions):
(WebKit::NetworkSession::clearLocalNetworkAccessPermissionsForTesting):
* Source/WebKit/NetworkProcess/NetworkSession.h:
* Source/WebKit/Shared/WebCoreArgumentCoders.serialization.in:
* Source/WebKit/UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
(WKWebsiteDataStoreSetLocalNetworkAccessPermissionForTesting):
(WKWebsiteDataStoreRevokeLocalNetworkAccessPermissionsForTesting):
(WKWebsiteDataStoreClearLocalNetworkAccessPermissionsForTesting):
* Source/WebKit/UIProcess/API/C/WKWebsiteDataStoreRef.h:
* Source/WebKit/UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::shouldAlwaysPromptForPermission const):
* Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:
(WebKit::WebsiteDataStore::setLocalNetworkAccessPermissionForTesting):
(WebKit::WebsiteDataStore::removeLocalNetworkAccessPermissions):
(WebKit::WebsiteDataStore::clearLocalNetworkAccessPermissionsForTesting):
* Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h:
* Source/WebKit/WebProcess/Network/WebLoaderStrategy.cpp:
(WebKit::addParametersShared):
* Source/WebKit/WebProcess/WebCoreSupport/WebPermissionController.cpp:
(WebKit::WebPermissionController::query):
* Tools/WebKitTestRunner/TestController.cpp:
(WTR::TestController::resetStateToConsistentValues):
(WTR::TestController::injectedBundleSetUpTestRunner):
(WTR::TestController::handleControllerCommand):

Canonical link: https://commits.webkit.org/321658@main



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications

Reply via email to