Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: cb7ebb2b9986cb6461ec33039399c3ed4795a61e
      
https://github.com/WebKit/WebKit/commit/cb7ebb2b9986cb6461ec33039399c3ed4795a61e
  Author: Kiara Rose <[email protected]>
  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


_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to