Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 4164839ade95d9e06b82d50edb8adf491af98069
      
https://github.com/WebKit/WebKit/commit/4164839ade95d9e06b82d50edb8adf491af98069
  Author: Charlie Wolfe <[email protected]>
  Date:   2025-08-11 (Mon, 11 Aug 2025)

  Changed paths:
    A 
LayoutTests/http/tests/permissions/resources/storage-access-permission-query-iframe.html
    A 
LayoutTests/http/tests/permissions/storage-access-permissions-query-expected.txt
    A LayoutTests/http/tests/permissions/storage-access-permissions-query.html
    M 
LayoutTests/imported/w3c/web-platform-tests/storage-access-api/requestStorageAccess-cross-origin-fetch.sub.https.window-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/storage-access-api/storage-access-beyond-cookies.BlobURLDedicatedWorker.sub.https.tentative.window-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/storage-access-api/storage-access-beyond-cookies.BlobURLSharedWorker.sub.https.tentative.window-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/storage-access-api/storage-access-beyond-cookies.thirdPartyBlobStorage.sub.https.window-expected.txt
    M Source/WebCore/Modules/permissions/MainThreadPermissionObserver.cpp
    M Source/WebCore/Modules/permissions/MainThreadPermissionObserver.h
    M Source/WebCore/Modules/permissions/PermissionController.h
    M Source/WebCore/Modules/permissions/PermissionName.h
    M Source/WebCore/Modules/permissions/PermissionName.idl
    M Source/WebCore/Modules/permissions/PermissionObserver.h
    M Source/WebCore/Modules/permissions/PermissionStatus.cpp
    M Source/WebCore/Modules/permissions/Permissions.cpp
    M Source/WebCore/html/PermissionsPolicy.cpp
    M Source/WebCore/html/PermissionsPolicy.h
    M Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsStore.cpp
    M Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsStore.h
    A 
Source/WebKit/NetworkProcess/Classifier/StorageAccessPermissionChangeObserver.h
    M Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp
    M Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h
    M Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp
    M Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h
    M Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in
    M Source/WebKit/Shared/WebCoreArgumentCoders.serialization.in
    M Source/WebKit/WebKit.xcodeproj/project.pbxproj
    M Source/WebKit/WebProcess/Network/NetworkProcessConnection.cpp
    M Source/WebKit/WebProcess/Network/NetworkProcessConnection.h
    M Source/WebKit/WebProcess/Network/NetworkProcessConnection.messages.in
    M Source/WebKit/WebProcess/WebCoreSupport/WebPermissionController.cpp
    M Source/WebKit/WebProcess/WebCoreSupport/WebPermissionController.h

  Log Message:
  -----------
  Implement Permissions API integration with the Storage Access API
https://bugs.webkit.org/show_bug.cgi?id=297181
rdar://147948198

Reviewed by BJ Burg.

This patch enables Permissions API query and onchange functionality to work 
with the Storage Access API.
More details below.

This progresses the following WPT, but it cannot be tested in CI since we don't 
have a local DNS resolver:
imported/w3c/web-platform-tests/storage-access-api/storage-access-permission.sub.https.window.html

https://privacycg.github.io/storage-access/#permissions-integration

* 
LayoutTests/http/tests/permissions/resources/storage-access-permission-query-iframe.html:
 Added.
* 
LayoutTests/http/tests/permissions/storage-access-permissions-query-expected.txt:
 Added.
* LayoutTests/http/tests/permissions/storage-access-permissions-query.html: 
Added.
Add a layout test for coverage since the WPT will fail in CI.

* 
LayoutTests/imported/w3c/web-platform-tests/storage-access-api/requestStorageAccess-cross-origin-fetch.sub.https.window-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/storage-access-api/storage-access-beyond-cookies.BlobURLDedicatedWorker.sub.https.tentative.window-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/storage-access-api/storage-access-beyond-cookies.BlobURLSharedWorker.sub.https.tentative.window-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/storage-access-api/storage-access-beyond-cookies.thirdPartyBlobStorage.sub.https.window-expected.txt:

* Source/WebCore/Modules/permissions/MainThreadPermissionObserver.cpp:
(WebCore::MainThreadPermissionObserver::addChangeListener):
(WebCore::MainThreadPermissionObserver::removeChangeListener):
* Source/WebCore/Modules/permissions/MainThreadPermissionObserver.h:
* Source/WebCore/Modules/permissions/PermissionController.h:
* Source/WebCore/Modules/permissions/PermissionObserver.h:
* Source/WebCore/Modules/permissions/PermissionStatus.cpp:
(WebCore::PermissionStatus::eventListenersDidChange):
Add or remove listeners from the network process when change event listeners 
are modified.

* Source/WebCore/Modules/permissions/PermissionName.h:
* Source/WebCore/Modules/permissions/PermissionName.idl:
* Source/WebCore/Modules/permissions/Permissions.cpp:
(WebCore::isAllowedByPermissionsPolicy):
(WebCore::Permissions::toPermissionName):
* Source/WebCore/html/PermissionsPolicy.cpp:
(WebCore::toFeatureNameForLogging):
(WebCore::readFeatureIdentifier):
(WebCore::defaultAllowlistValue):
* Source/WebCore/html/PermissionsPolicy.h:
Add permissions policy support for storage-access permission.

* Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsStore.cpp:
(WebKit::ResourceLoadStatisticsStore::queryStorageAccessPermission):
* Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsStore.h:
* 
Source/WebKit/NetworkProcess/Classifier/StorageAccessPermissionChangeObserver.h:
(WebKit::StorageAccessPermissionChangeObserver::~StorageAccessPermissionChangeObserver):
Add an observer to listen for storage access permission changes for a web 
process, similar to
CookieChangeObserver.

* Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
(WebKit::WebResourceLoadStatisticsStore::queryStorageAccessPermission):
(WebKit::WebResourceLoadStatisticsStore::startListeningForStorageAccessPermissionChanges):
(WebKit::WebResourceLoadStatisticsStore::stopListeningForStorageAccessPermissionChanges):
Both stop listening functions are needed to remove listeners when the web 
process terminates or when
change listeners are removed.

(WebKit::WebResourceLoadStatisticsStore::wasGrantedStorageAccessPermissionInPage):
* Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
Add a list to track observers for web processes listening to storage access 
permission changes.

* Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp:
(WebKit::NetworkConnectionToWebProcess::~NetworkConnectionToWebProcess):
Remove the observer stored on WebResourceLoadStatisticsStore when a web process 
terminates.

(WebKit::NetworkConnectionToWebProcess::subscribeToStorageAccessPermissionChanges):
(WebKit::NetworkConnectionToWebProcess::unsubscribeFromStorageAccessPermissionChanges):
(WebKit::NetworkConnectionToWebProcess::storageAccessPermissionChanged):
(WebKit::NetworkConnectionToWebProcess::queryStorageAccessPermission):
* Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h:
* Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in:
* Source/WebKit/Shared/WebCoreArgumentCoders.serialization.in:
* Source/WebKit/WebKit.xcodeproj/project.pbxproj:
* Source/WebKit/WebProcess/Network/NetworkProcessConnection.cpp:
(WebKit::NetworkProcessConnection::storageAccessPermissionChanged):
* Source/WebKit/WebProcess/Network/NetworkProcessConnection.h:
* Source/WebKit/WebProcess/Network/NetworkProcessConnection.messages.in:
* Source/WebKit/WebProcess/WebCoreSupport/WebPermissionController.cpp:
(WebKit::WebPermissionController::query):
Storage access permissions are controlled by the network process, not the 
client, so we need to add a new
IPC message to query permissions from the network process.

(WebKit::WebPermissionController::notifyObserversIfNeeded):
(WebKit::WebPermissionController::storageAccessPermissionChanged):
(WebKit::WebPermissionController::permissionChanged):
Storage access permissions are keyed by top-level site and subframe site, not 
top-level origin. So I
added storageAccessPermissionChanged for storage access permission changes and 
notifyObserversIfNeeded to
reduce code duplication.

(WebKit::WebPermissionController::addChangeListener):
(WebKit::WebPermissionController::removeChangeListener):
* Source/WebKit/WebProcess/WebCoreSupport/WebPermissionController.h:
Notify the network process when change listeners are added or removed so it 
only notifies web processes
of permission changes when listeners exist.

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



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to