[webkit-changes] [WebKit/WebKit] cb7ebb: Allow apps to receive and remove data being used b...

kiaraarose noreply at github.com
Tue Feb 13 19:59:07 PST 2024


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: cb7ebb2b9986cb6461ec33039399c3ed4795a61e
      https://github.com/WebKit/WebKit/commit/cb7ebb2b9986cb6461ec33039399c3ed4795a61e
  Author: Kiara Rose <kiara_rose at apple.com>
  Date:   2024-02-13 (Tue, 13 Feb 2024)

  Changed paths:
    M Source/WebKit/Modules/OSX_Private.modulemap
    M Source/WebKit/Modules/iOS_Private.modulemap
    M Source/WebKit/Scripts/webkit/messages.py
    M Source/WebKit/Shared/API/APIObject.h
    M Source/WebKit/Shared/Cocoa/APIObject.mm
    A Source/WebKit/Shared/Extensions/WebExtensionDataType.h
    M Source/WebKit/Shared/Extensions/WebExtensionStorage.serialization.in
    R Source/WebKit/Shared/Extensions/WebExtensionStorageType.h
    M Source/WebKit/Shared/Extensions/_WKWebExtensionSQLiteStore.mm
    M Source/WebKit/Sources.txt
    M Source/WebKit/UIProcess/API/Cocoa/_WKWebExtensionController.h
    M Source/WebKit/UIProcess/API/Cocoa/_WKWebExtensionController.mm
    A Source/WebKit/UIProcess/API/Cocoa/_WKWebExtensionDataRecord.h
    A Source/WebKit/UIProcess/API/Cocoa/_WKWebExtensionDataRecord.mm
    A Source/WebKit/UIProcess/API/Cocoa/_WKWebExtensionDataRecordInternal.h
    A Source/WebKit/UIProcess/API/Cocoa/_WKWebExtensionDataRecordPrivate.h
    A Source/WebKit/UIProcess/API/Cocoa/_WKWebExtensionDataType.h
    A Source/WebKit/UIProcess/API/Cocoa/_WKWebExtensionDataType.mm
    A Source/WebKit/UIProcess/API/Cocoa/_WKWebExtensionDataTypeInternal.h
    M Source/WebKit/UIProcess/Extensions/Cocoa/API/WebExtensionContextAPIStorageCocoa.mm
    M Source/WebKit/UIProcess/Extensions/Cocoa/WebExtensionContextCocoa.mm
    M Source/WebKit/UIProcess/Extensions/Cocoa/WebExtensionControllerCocoa.mm
    M Source/WebKit/UIProcess/Extensions/Cocoa/_WKWebExtensionStorageSQLiteStore.h
    M Source/WebKit/UIProcess/Extensions/Cocoa/_WKWebExtensionStorageSQLiteStore.mm
    M Source/WebKit/UIProcess/Extensions/WebExtensionContext.h
    M Source/WebKit/UIProcess/Extensions/WebExtensionContext.messages.in
    M Source/WebKit/UIProcess/Extensions/WebExtensionController.h
    A Source/WebKit/UIProcess/Extensions/WebExtensionDataRecord.cpp
    A Source/WebKit/UIProcess/Extensions/WebExtensionDataRecord.h
    M Source/WebKit/WebKit.xcodeproj/project.pbxproj
    M Source/WebKit/WebProcess/Extensions/API/Cocoa/WebExtensionAPIStorageAreaCocoa.mm
    M Source/WebKit/WebProcess/Extensions/API/Cocoa/WebExtensionAPIStorageCocoa.mm
    M Source/WebKit/WebProcess/Extensions/API/WebExtensionAPIStorage.h
    M Source/WebKit/WebProcess/Extensions/API/WebExtensionAPIStorageArea.h
    M Source/WebKit/WebProcess/Extensions/WebExtensionContextProxy.h
    M Source/WebKit/WebProcess/Extensions/WebExtensionContextProxy.messages.in
    M Tools/TestWebKitAPI/SourcesCocoa.txt
    M Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj
    A Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebExtensionDataRecord.mm

  Log Message:
  -----------
  Allow apps to receive and remove data being used by web extensions
https://bugs.webkit.org/show_bug.cgi?id=269112
rdar://122677362

Reviewed by Timothy Hatcher.

This patch allow apps to receive _WKWebExtensionDataRecords providing information on:
- How much data an extension is using
- What type of data (local, sync, session) is being used

In addition, apps can specify data records to remove. This patch also renames WebExtensionStorageType
to WebExtensionDataType to have the naming be consistent with the new APIs being added.

* Source/WebKit/Modules/OSX_Private.modulemap:
* Source/WebKit/Modules/iOS_Private.modulemap:
* Source/WebKit/Platform/cocoa/CocoaHelpers.h:
* Source/WebKit/Scripts/webkit/messages.py:
(types_that_cannot_be_forward_declared):
* Source/WebKit/Shared/API/APIObject.h:
* Source/WebKit/Shared/Cocoa/APIObject.mm:
(API::Object::newObject):
* Source/WebKit/Shared/Extensions/WebExtensionDataType.h:
Copied from Source/WebKit/Shared/Extensions/WebExtensionStorageType.h.
(WebKit::toAPIPrefixString):
* Source/WebKit/Shared/Extensions/WebExtensionStorage.serialization.in:

* Source/WebKit/Shared/Extensions/_WKWebExtensionSQLiteStore.mm:
(-[_WKWebExtensionSQLiteStore close]):
This method may be called on the _databaseQueue. To prevent a deadlock caused by the dispatch_sync,
check if we're on the main thread. If we are, we're safe to dispatch_sync on the _databaseQueue.
If we're not, we're already on the _databaseQueue, so no need to dispatch the call.

* Source/WebKit/Sources.txt:
* Source/WebKit/UIProcess/API/Cocoa/_WKWebExtensionController.h:
* Source/WebKit/UIProcess/API/Cocoa/_WKWebExtensionController.mm:
(+[_WKWebExtensionController allExtensionDataTypes]):
(-[_WKWebExtensionController fetchDataRecordsOfTypes:completionHandler:]):
(-[_WKWebExtensionController fetchDataRecordOfTypes:forExtensionContext:completionHandler:]):
(-[_WKWebExtensionController removeDataOfTypes:forDataRecords:completionHandler:]):
* Source/WebKit/UIProcess/API/Cocoa/_WKWebExtensionDataRecord.h:
Copied from Source/WebKit/UIProcess/Extensions/Cocoa/_WKWebExtensionStorageSQLiteStore.h.

* Source/WebKit/UIProcess/API/Cocoa/_WKWebExtensionDataRecord.mm: Added.
(-[_WKWebExtensionDataRecord dealloc]):
(-[_WKWebExtensionDataRecord isEqual:]):
(-[_WKWebExtensionDataRecord displayName]):
(-[_WKWebExtensionDataRecord uniqueIdentifier]):
(-[_WKWebExtensionDataRecord dataTypes]):
(-[_WKWebExtensionDataRecord totalSize]):
(-[_WKWebExtensionDataRecord sizeOfDataTypes:]):
(-[_WKWebExtensionDataRecord _apiObject]):
(-[_WKWebExtensionDataRecord _webExtensionDataRecord]):
Helper methods to convert between data types.
(WebKit::makeVectorElement):
(WebKit::makeNSArrayElement):
(WebKit::toWebExtensionDataRecords):
(WebKit::toAPI):

* Source/WebKit/UIProcess/API/Cocoa/_WKWebExtensionDataRecordInternal.h:
Copied from Source/WebKit/Shared/Extensions/WebExtensionStorageType.h.
* Source/WebKit/UIProcess/API/Cocoa/_WKWebExtensionDataRecordPrivate.h:
Copied from Source/WebKit/Shared/Extensions/WebExtensionStorageType.h.
* Source/WebKit/UIProcess/API/Cocoa/_WKWebExtensionDataType.h:
Copied from Source/WebKit/Shared/Extensions/WebExtensionStorageType.h.
* Source/WebKit/UIProcess/API/Cocoa/_WKWebExtensionDataType.mm:
Helper methods to convert between data types.
(WebKit::toWebExtensionDataTypes):
(WebKit::toAPI):

* Source/WebKit/UIProcess/API/Cocoa/_WKWebExtensionDataTypeInternal.h:
Copied from Source/WebKit/Shared/Extensions/WebExtensionStorageType.h.
* Source/WebKit/UIProcess/Extensions/Cocoa/API/WebExtensionContextAPIStorageCocoa.mm:
(WebKit::WebExtensionContext::storageGet):
(WebKit::WebExtensionContext::storageGetBytesInUse):
(WebKit::WebExtensionContext::storageSet):
(WebKit::WebExtensionContext::storageRemove):
(WebKit::WebExtensionContext::storageClear):
(WebKit::WebExtensionContext::storageSetAccessLevel):
(WebKit::WebExtensionContext::fireStorageChangedEventIfNeeded):
Switch from WebExtensionStorageType to WebExtensionDataType.

* Source/WebKit/UIProcess/Extensions/Cocoa/WebExtensionContextCocoa.mm:
(WebKit::WebExtensionContext::load):

(WebKit::WebExtensionContext::readStateFromPath):
(WebKit::WebExtensionContext::readDisplayNameAndLastBaseURLFromState):
(WebKit::WebExtensionContext::readLastBaseURLFromState):
Static helper methods to read last seen display name and baseURL from disk.

(WebKit::WebExtensionContext::readStateFromStorage):
(WebKit::WebExtensionContext::quoataForStorageType):
(WebKit::WebExtensionContext::localStorageStore):
(WebKit::WebExtensionContext::sessionStorageStore):
(WebKit::WebExtensionContext::syncStorageStore):
Switch from WebExtensionStorageType to WebExtensionDataType.
(WebKit::WebExtensionContext::storageForType):
Make public so it can be used in by the WebExtensionController.

* Source/WebKit/UIProcess/Extensions/Cocoa/WebExtensionControllerCocoa.mm:
(WebKit::WebExtensionController::getDataRecords):
(WebKit::WebExtensionController::getDataRecord):
(WebKit::WebExtensionController::removeData):
(WebKit::WebExtensionController::calculateStorageSize):
(WebKit::WebExtensionController::removeStorage):
(WebKit::WebExtensionController::stateFilePath const):
(WebKit::WebExtensionController::storageDirectory const):
Use the FileSystem to get the storage directory for an extension with a given uniqueIdentifier.
(WebKit::WebExtensionController::sqliteStore):
Helper method to return the sql store for a given data type. If the type is WebExtensionDataType::Session,
uses the WebExtensionContext to check if the context is loaded. If it's loaded, use the sessionStorageStore
on the context to get the data, since creating a new instance of the session storage object will not have the
correct info.

* Source/WebKit/UIProcess/Extensions/Cocoa/WebExtensionTabCocoa.mm:
* Source/WebKit/UIProcess/Extensions/Cocoa/_WKWebExtensionStorageSQLiteStore.h:
* Source/WebKit/UIProcess/Extensions/Cocoa/_WKWebExtensionStorageSQLiteStore.mm:
(-[_WKWebExtensionStorageSQLiteStore initWithUniqueIdentifier:storageType:directory:usesInMemoryDatabase:]):
(-[_WKWebExtensionStorageSQLiteStore _databaseURL]):
Switch from WebExtensionStorageType to WebExtensionDataType.

* Source/WebKit/UIProcess/Extensions/WebExtensionContext.h:
(WebKit::WebExtensionContext::plistFileName):
Static method returning the file name for the extension plist.

* Source/WebKit/UIProcess/Extensions/WebExtensionContext.messages.in:
* Source/WebKit/UIProcess/Extensions/WebExtensionController.h:
* Source/WebKit/UIProcess/Extensions/WebExtensionDataRecord.cpp:
Renamed from Source/WebKit/Shared/Extensions/WebExtensionStorageType.h.
(WebKit::WebExtensionDataRecord::WebExtensionDataRecord):
(WebKit::WebExtensionDataRecord::operator== const):
(WebKit::WebExtensionDataRecord::totalSize const):
(WebKit::WebExtensionDataRecord::sizeOfTypes const):
(WebKit::WebExtensionDataRecord::types const):

* Source/WebKit/UIProcess/Extensions/WebExtensionDataRecord.h: Added.
(WebKit::WebExtensionDataRecord::create):
(WebKit::WebExtensionDataRecord::displayName const):
(WebKit::WebExtensionDataRecord::uniqueIdentifier const):
(WebKit::WebExtensionDataRecord::sizeOfType const):
(WebKit::WebExtensionDataRecord::setSizeOfType):
(WebKit::WebExtensionDataRecord::wrapper const):
(WebKit::WebExtensionDataRecordHolder::create):
(WebKit::WebExtensionDataRecordHolder::WebExtensionDataRecordHolder):
Ref counted class to ensure the completion handler doesn't get called too early
when calculating storage size.

* Source/WebKit/WebKit.xcodeproj/project.pbxproj:
* Source/WebKit/WebProcess/Extensions/API/Cocoa/WebExtensionAPIStorageAreaCocoa.mm:
(WebKit::WebExtensionAPIStorageArea::isPropertyAllowed):
(WebKit::WebExtensionAPIStorageArea::quotaBytes):
(WebKit::WebExtensionAPIStorageArea::quotaBytesPerItem):
(WebKit::WebExtensionAPIStorageArea::maxItems):
(WebKit::WebExtensionAPIStorageArea::maxWriteOperationsPerHour):
(WebKit::WebExtensionAPIStorageArea::maxWriteOperationsPerMinute):
Switch from WebExtensionStorageType to WebExtensionDataType.

* Source/WebKit/WebProcess/Extensions/API/Cocoa/WebExtensionAPIStorageCocoa.mm:
(WebKit::WebExtensionAPIStorage::local):
(WebKit::WebExtensionAPIStorage::session):
(WebKit::WebExtensionAPIStorage::sync):
(WebKit::WebExtensionAPIStorage::storageAreaForType):
(WebKit::WebExtensionContextProxy::dispatchStorageChangedEvent):
Switch from WebExtensionStorageType to WebExtensionDataType.

* Source/WebKit/WebProcess/Extensions/API/WebExtensionAPIStorage.h:
* Source/WebKit/WebProcess/Extensions/API/WebExtensionAPIStorageArea.h:
(WebKit::WebExtensionAPIStorageArea::WebExtensionAPIStorageArea):
* Source/WebKit/WebProcess/Extensions/WebExtensionContextProxy.h:
* Source/WebKit/WebProcess/Extensions/WebExtensionContextProxy.messages.in:
Switch from WebExtensionStorageType to WebExtensionDataType.

* Tools/TestWebKitAPI/SourcesCocoa.txt:
* Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
* Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebExtensionDataRecord.mm: Added.
(TestWebKitAPI::TEST):
The test for removing the data records are disabled because they were too
flaky on the bots.
https://bugs.webkit.org/show_bug.cgi?id=269329 is tracking enabling them.

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




More information about the webkit-changes mailing list