Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 2917d6c16d9c986306a567222dda3ef72e2a1ddb
https://github.com/WebKit/WebKit/commit/2917d6c16d9c986306a567222dda3ef72e2a1ddb
Author: Ian Gower <[email protected]>
Date: 2026-10-01 (Thu, 01 Oct 2026)
Changed paths:
A
LayoutTests/http/wpt/fetch/local-network-access/prompt-records-the-answer-expected.txt
A
LayoutTests/http/wpt/fetch/local-network-access/prompt-records-the-answer.html
A
LayoutTests/http/wpt/fetch/local-network-access/resources/lna-prompt-frame.html
M LayoutTests/platform/glib/TestExpectations
M LayoutTests/platform/win/TestExpectations
M Source/WebCore/Modules/fetch/LocalNetworkAccess.cpp
M Source/WebCore/Modules/fetch/LocalNetworkAccess.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/NetworkResourceLoader.cpp
M Source/WebKit/NetworkProcess/NetworkSession.cpp
M Source/WebKit/NetworkProcess/NetworkSession.h
M Source/WebKit/UIProcess/API/APIUIClient.h
M Source/WebKit/UIProcess/API/C/WKPage.cpp
M Source/WebKit/UIProcess/API/C/WKWebsiteDataStoreRef.cpp
M Source/WebKit/UIProcess/API/C/WKWebsiteDataStoreRef.h
M Source/WebKit/UIProcess/API/Cocoa/WKUIDelegatePrivate.h
M Source/WebKit/UIProcess/Cocoa/UIDelegate.h
M Source/WebKit/UIProcess/Cocoa/UIDelegate.mm
M Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp
M Source/WebKit/UIProcess/Network/NetworkProcessProxy.h
M Source/WebKit/UIProcess/Network/NetworkProcessProxy.messages.in
M Source/WebKit/UIProcess/WebPageProxy.cpp
M Source/WebKit/UIProcess/WebPageProxy.h
M Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp
M Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h
M Source/WebKit/WebProcess/WebCoreSupport/WebPermissionController.cpp
M Tools/MiniBrowser/mac/WK2BrowserWindowController.m
M Tools/TestWebKitAPI/SourcesCocoa.txt
M Tools/TestWebKitAPI/Tests/WebCore/LocalNetworkAccess.cpp
A Tools/TestWebKitAPI/Tests/WebKit/WKWebView/LocalNetworkAccessTests.mm
M Tools/WebKitTestRunner/TestController.cpp
M Tools/WebKitTestRunner/TestController.h
Log Message:
-----------
Ask the embedder when a Local Network Access request has no recorded decision
https://bugs.webkit.org/show_bug.cgi?id=325072
rdar://188234541
Reviewed by Youenn Fablet and Alex Christensen.
This is Local Network Access feature work:
https://wicg.github.io/local-network-access/
A request with no recorded decision was refused outright, because there was
nothing to ask. It now
goes to the UI process, which asks the page's UI client for a grant or denial
and records the answer
for the origin pair and address space. A grant covers the whole address space,
not one device. See
https://github.com/WICG/local-network-access/issues/92.
Decisions live in the website data store rather than the network process, so
they survive a network
process crash and sit next to the page state needed to pick which page shows
the prompt. As with
camera and microphone, the embedder is only asked about same-origin decisions
for
navigator.permissions.query(). Concurrent requests share one prompt, and a
revocation discards a
prompt's late answer.
The check itself is now synchronous. checkLocalNetworkAccess returns refused,
allowed, or that the
embedder must be asked, and NetworkResourceLoader does the asking, so the only
asynchronous step is in
WebKit.
Cocoa embedders answer through a new _WKUIDelegatePrivate method taking a
WKPermissionDecision, where
Prompt counts as a denial until WebKit has its own prompt. C clients answer
through their existing
queryPermission. WebKitTestRunner answers as a client, which replaces
WKWebsiteDataStoreSetLocalNetworkAccessPermissionForTesting.
*
LayoutTests/http/wpt/fetch/local-network-access/prompt-records-the-answer-expected.txt:
Added.
*
LayoutTests/http/wpt/fetch/local-network-access/prompt-records-the-answer.html:
Added.
*
LayoutTests/http/wpt/fetch/local-network-access/resources/lna-prompt-frame.html:
Added.
* LayoutTests/platform/glib/TestExpectations:
* LayoutTests/platform/win/TestExpectations:
* Source/WebCore/Modules/fetch/LocalNetworkAccess.cpp:
(WebCore::localNetworkAccessPermissionRequestOutcome):
(WebCore::localNetworkAccessRefusal):
(WebCore::checkLocalNetworkAccess):
(WebCore::localNetworkAccessPermissionError):
(WebCore::performLocalNetworkAccessCheck): Deleted.
* Source/WebCore/Modules/fetch/LocalNetworkAccess.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:
* Source/WebKit/NetworkProcess/NetworkProcess.h:
* Source/WebKit/NetworkProcess/NetworkProcess.messages.in:
* Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp:
(WebKit::NetworkResourceLoader::checkLocalNetworkAccess):
* Source/WebKit/NetworkProcess/NetworkSession.cpp:
(WebKit::NetworkSession::requestLocalNetworkAccessPermission):
* Source/WebKit/NetworkProcess/NetworkSession.h:
* Source/WebKit/UIProcess/API/APIUIClient.h:
(API::UIClient::decidePolicyForLocalNetworkAccessPermissionRequest):
* Source/WebKit/UIProcess/API/C/WKPage.cpp:
(WKPageSetPageUIClient):
* Source/WebKit/UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
(WKWebsiteDataStoreRevokeLocalNetworkAccessPermissionsForTesting):
(WKWebsiteDataStoreClearLocalNetworkAccessPermissionsForTesting):
* Source/WebKit/UIProcess/API/C/WKWebsiteDataStoreRef.h:
* Source/WebKit/UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
* Source/WebKit/UIProcess/Cocoa/UIDelegate.h:
* Source/WebKit/UIProcess/Cocoa/UIDelegate.mm:
(WebKit::UIDelegate::setDelegate):
(WebKit::UIDelegate::UIClient::decidePolicyForLocalNetworkAccessPermissionRequest):
* Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp:
(WebKit::NetworkProcessProxy::requestLocalNetworkAccessPermission):
(WebKit::NetworkProcessProxy::queryLocalNetworkAccessPermission):
* Source/WebKit/UIProcess/Network/NetworkProcessProxy.h:
* Source/WebKit/UIProcess/Network/NetworkProcessProxy.messages.in:
* Source/WebKit/UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::queryPermission):
(WebKit::WebPageProxy::canShowLocalNetworkAccessPrompt const):
(WebKit::WebPageProxy::requestLocalNetworkAccessPermission):
(WebKit::WebPageProxy::queryLocalNetworkAccessPermission):
* Source/WebKit/UIProcess/WebPageProxy.h:
* Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:
(WebKit::WebsiteDataStore::~WebsiteDataStore):
(WebKit::WebsiteDataStore::requestLocalNetworkAccessPermission):
(WebKit::WebsiteDataStore::askPageForLocalNetworkAccess):
(WebKit::WebsiteDataStore::finishLocalNetworkAccessPrompt):
(WebKit::WebsiteDataStore::queryLocalNetworkAccessPermission):
(WebKit::WebsiteDataStore::cancelLocalNetworkAccessPrompts):
(WebKit::WebsiteDataStore::removeLocalNetworkAccessPermissions):
(WebKit::WebsiteDataStore::clearLocalNetworkAccessPermissionsForTesting):
* Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h:
* Source/WebKit/WebKit.xcodeproj/project.pbxproj:
* Source/WebKit/WebProcess/WebCoreSupport/WebPermissionController.cpp:
(WebKit::WebPermissionController::query):
* Tools/MiniBrowser/mac/WK2BrowserWindowController.m:
(-[WK2BrowserWindowController
_webView:requestLocalNetworkAccessPermissionForSecurityOrigin:topLevelOrigin:isLoopback:decisionHandler:]):
* Tools/TestWebKitAPI/SourcesCocoa.txt:
* Tools/TestWebKitAPI/Tests/WebCore/LocalNetworkAccess.cpp:
(TestWebKitAPI::permissionCheckReturning):
(TestWebKitAPI::checkSynchronouslyWithOriginPair):
(TestWebKitAPI::TEST(LocalNetworkAccess,
PermissionRequestOutcomeCoversEveryInput)):
(TestWebKitAPI::TEST(LocalNetworkAccess,
AGatedRequestDefersToThePermissionAnswer)):
* Tools/TestWebKitAPI/Tests/WebKit/WKWebView/LocalNetworkAccessTests.mm: Added.
* Tools/WebKitTestRunner/TestController.cpp:
(WTR::originString):
(WTR::localNetworkAccessPermissionKey):
(WTR::TestController::handleQueryPermission):
(WTR::TestController::resetStateToConsistentValues):
(WTR::TestController::didReceiveScriptMessage):
* Tools/WebKitTestRunner/TestController.h:
Canonical link: https://commits.webkit.org/322411@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications