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

Reply via email to