Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: a5114a1ab6dbe06a1b6fe53b9ff7fd43b69dba05
https://github.com/WebKit/WebKit/commit/a5114a1ab6dbe06a1b6fe53b9ff7fd43b69dba05
Author: Kiara Rose <[email protected]>
Date: 2026-08-11 (Tue, 11 Aug 2026)
Changed paths:
M Source/WebKit/Shared/Extensions/WebExtensionContextParameters.h
M
Source/WebKit/Shared/Extensions/WebExtensionContextParameters.serialization.in
M Source/WebKit/Shared/Extensions/WebExtensionDataType.h
M Source/WebKit/Shared/Extensions/WebExtensionStorageAccessLevel.h
M Source/WebKit/UIProcess/Extensions/API/WebExtensionContextAPIStorage.cpp
M Source/WebKit/UIProcess/Extensions/Cocoa/WebExtensionContextCocoa.mm
M Source/WebKit/UIProcess/Extensions/WebExtensionContext.cpp
M Source/WebKit/UIProcess/Extensions/WebExtensionContext.h
M
Source/WebKit/WebProcess/Extensions/API/Cocoa/WebExtensionAPIStorageAreaCocoa.mm
M
Source/WebKit/WebProcess/Extensions/API/Cocoa/WebExtensionAPIStorageCocoa.mm
M Source/WebKit/WebProcess/Extensions/API/WebExtensionAPIObject.h
M Source/WebKit/WebProcess/Extensions/API/WebExtensionAPIStorageArea.h
M Source/WebKit/WebProcess/Extensions/Cocoa/WebExtensionContextProxyCocoa.mm
M Source/WebKit/WebProcess/Extensions/Interfaces/WebExtensionAPIStorage.idl
M
Source/WebKit/WebProcess/Extensions/Interfaces/WebExtensionAPIStorageArea.idl
M Source/WebKit/WebProcess/Extensions/WebExtensionContextProxy.cpp
M Source/WebKit/WebProcess/Extensions/WebExtensionContextProxy.h
M Source/WebKit/WebProcess/Extensions/WebExtensionContextProxy.messages.in
M Tools/TestWebKitAPI/Tests/WebKit/WKWebView/WKWebExtensionAPIDevTools.mm
M Tools/TestWebKitAPI/Tests/WebKit/WKWebView/WKWebExtensionAPIStorage.mm
Log Message:
-----------
Extend setAccessLevel to local and sync storage areas
https://bugs.webkit.org/show_bug.cgi?id=320697
rdar://183680404
Reviewed by Timothy Hatcher.
This patch extends setAccessLevel to sync and local storage areas as it's
documented on MDN.
This behavior now matches Chrome. Firefox doesn't have an implementation for
setAccessLevel for any
storage area.
By default, session storage availability remains defaulted to trusted contexts.
Local and sync
storage remain defaulted to trusted and untrusted contexts, but can now be
limited to trusted contexts.
This patch also introduces a new isForTrustedContext() boolean used to
determine if the storage APIs
should be exposed to devtools extension pages.
With these changes, the current WPT tests for the browser.storage API pass.
Tests: Tools/TestWebKitAPI/Tests/WebKit/WKWebView/WKWebExtensionAPIDevTools.mm
Tools/TestWebKitAPI/Tests/WebKit/WKWebView/WKWebExtensionAPIStorage.mm
* Source/WebKit/Shared/Extensions/WebExtensionContextParameters.h:
*
Source/WebKit/Shared/Extensions/WebExtensionContextParameters.serialization.in:
* Source/WebKit/Shared/Extensions/WebExtensionDataType.h:
(WebKit::allWebExtensionDataTypes):
(WebKit::toWebExtensionDataType):
* Source/WebKit/Shared/Extensions/WebExtensionStorageAccessLevel.h:
(WebKit::defaultStorageAccessLevel):
(WebKit::storageAccessLevel):
(WebKit::isStorageTypeAllowedInUntrustedContexts):
(WebKit::toAPIString):
(WebKit::toWebExtensionStorageAccessLevel):
* Source/WebKit/UIProcess/Extensions/API/WebExtensionContextAPIStorage.cpp:
Only fire storage onChanged events to content scripts if the storage area is
available in untrusted
contexts.
(WebKit::WebExtensionContext::storageSetAccessLevel):
(WebKit::WebExtensionContext::fireStorageChangedEventIfNeeded):
* Source/WebKit/UIProcess/Extensions/Cocoa/WebExtensionContextCocoa.mm:
(WebKit::WebExtensionContext::load):
(WebKit::WebExtensionContext::invalidateStorage):
(WebKit::WebExtensionContext::loadStorageAccessLevelsFromStorage):
(WebKit::WebExtensionContext::saveStorageAccessLevelsToStorage):
(WebKit::WebExtensionContext::setStorageAccessLevel):
(WebKit::WebExtensionContext::setSessionStorageAllowedInContentScripts):
Deleted.
* Source/WebKit/UIProcess/Extensions/WebExtensionContext.cpp:
(WebKit::WebExtensionContext::parameters const):
* Source/WebKit/UIProcess/Extensions/WebExtensionContext.h:
(WebKit::WebExtensionContext::storageAccessLevel const):
(WebKit::WebExtensionContext::isStorageAllowedInUntrustedContexts const):
(WebKit::WebExtensionContext::isSessionStorageAllowedInContentScripts const):
Deleted.
*
Source/WebKit/WebProcess/Extensions/API/Cocoa/WebExtensionAPIStorageAreaCocoa.mm:
(WebKit::WebExtensionAPIStorageArea::isPropertyAllowed):
* Source/WebKit/WebProcess/Extensions/API/Cocoa/WebExtensionAPIStorageCocoa.mm:
(WebKit::WebExtensionAPIStorage::isPropertyAllowed):
* Source/WebKit/WebProcess/Extensions/API/WebExtensionAPIObject.h:
(WebKit::WebExtensionAPIObject::isForTrustedContext const):
* Source/WebKit/WebProcess/Extensions/API/WebExtensionAPIStorageArea.h:
* Source/WebKit/WebProcess/Extensions/Cocoa/WebExtensionContextProxyCocoa.mm:
(WebKit::WebExtensionContextProxy::getOrCreate):
* Source/WebKit/WebProcess/Extensions/Interfaces/WebExtensionAPIStorage.idl:
* Source/WebKit/WebProcess/Extensions/Interfaces/WebExtensionAPIStorageArea.idl:
Replace MainWorldOnly with an isForTrustedContext check so setAccessLevel is
available for devtools
extension pages.
* Source/WebKit/WebProcess/Extensions/WebExtensionContextProxy.cpp:
(WebKit::WebExtensionContextProxy::setStorageAccessLevel):
* Source/WebKit/WebProcess/Extensions/WebExtensionContextProxy.h:
* Source/WebKit/WebProcess/Extensions/WebExtensionContextProxy.messages.in:
* Tools/TestWebKitAPI/Tests/WebKit/WKWebView/WKWebExtensionAPIDevTools.mm:
(TestWebKitAPI::TEST(WKWebExtensionAPIDevTools, StorageAccessLevel)):
* Tools/TestWebKitAPI/Tests/WebKit/WKWebView/WKWebExtensionAPIStorage.mm:
(TestWebKitAPI::TEST(WKWebExtensionAPIStorage, UndefinedProperties)):
(TestWebKitAPI::TEST(WKWebExtensionAPIStorage, SetAccessLevelTrustedContexts)):
(TestWebKitAPI::TEST(WKWebExtensionAPIStorage, DefaultAccessLevels)):
(TestWebKitAPI::TEST(WKWebExtensionAPIStorage,
MigratesLegacySessionStorageAllowedInUntrusedContextsState)):
Canonical link: https://commits.webkit.org/318980@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications