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