[webkit-changes] [WebKit/WebKit] 0ad922: Allow multiple data store and push partition ident...
bnham
noreply at github.com
Wed Dec 7 16:40:29 PST 2022
Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 0ad922bc0c9601604a6ba8ca53ea271927b768d6
https://github.com/WebKit/WebKit/commit/0ad922bc0c9601604a6ba8ca53ea271927b768d6
Author: Ben Nham <nham at apple.com>
Date: 2022-12-07 (Wed, 07 Dec 2022)
Changed paths:
M Source/WebCore/Modules/push-api/PushDatabase.cpp
M Source/WebCore/Modules/push-api/PushDatabase.h
M Source/WebCore/Modules/push-api/PushSubscriptionIdentifier.h
M Source/WebCore/platform/sql/SQLiteStatement.h
M Source/WebKit/webpushd/PushService.mm
M Tools/TestWebKitAPI/Tests/WebCore/PushDatabase.cpp
Log Message:
-----------
Allow multiple data store and push partition identifiers per app in PushDatabase
https://bugs.webkit.org/show_bug.cgi?id=248695
<rdar://problem/102922285>
Reviewed by Brady Eidson.
This upgrades the PushDatabase schema to allow more than one data store identifier and push
partition identifier per app. Previously, a push subscription was identified by (bundleID,
serviceWorkerScopeURL). After this patch, it's identified by (bundleID, pushPartition,
dataStoreUUID, serviceWorkerScopeURL).
To do this, in this patch we:
* Create a new type PushSubscriptionSetIdentifier which is a tuple of (bundleID, pushPartition,
dataStoreUUID). We use this type wherever we used to use only bundleID.
* Add new columns to the SubscriptionSets table to store the pushPartition and
dataStoreUUID. dataStoreUUID column to the SubscriptionSets table. This involves a copying the
table and then dropping it since we are adding the columns to the middle of the table, and because
we need to regenerate a unique index. (ALTER TABLE doesn't have the power to do either.)
* Since a lot of PushDatabase involves boilerplate around binding parameters, I added a binding
helper method to SQLiteStatement that allows multiple parameters to be bound in one function call
and am now using that in PushDatabase.
* Modified the API tests to also test multiple subscription set identifiers.
For now, PushService (the only user of PushDatabase) is still unaware of pushPartition and
dataStoreUUID. I'll add that support to PushService in a future patch.
* Source/WebCore/Modules/push-api/PushDatabase.cpp:
(WebCore::PushRecord::isolatedCopy const):
(WebCore::PushRecord::isolatedCopy):
(WebCore::openAndMigrateDatabase):
(WebCore::PushDatabase::bindStatementOnQueue):
(WebCore::uuidToSpan):
(WebCore::uuidFromSpan):
(WebCore::expirationTimeToValue):
(WebCore::expirationTimeFromValue):
(WebCore::PushDatabase::updatePublicToken):
(WebCore::PushDatabase::getPublicToken):
(WebCore::PushDatabase::insertRecord):
(WebCore::PushDatabase::removeRecordByIdentifier):
(WebCore::makePushRecordFromRow):
(WebCore::PushDatabase::getRecordByTopic):
(WebCore::PushDatabase::getRecordBySubscriptionSetAndScope):
(WebCore::PushDatabase::getTopics):
(WebCore::PushDatabase::incrementSilentPushCount):
(WebCore::PushDatabase::removeRecordsBySubscriptionSet):
(WebCore::PushDatabase::removeRecordsBySubscriptionSetAndSecurityOrigin):
(WebCore::PushDatabase::setPushesEnabledForOrigin):
(WebCore::bindExpirationTime): Deleted.
(WebCore::PushDatabase::getRecordByBundleIdentifierAndScope): Deleted.
(WebCore::PushDatabase::removeRecordsByBundleIdentifier): Deleted.
(WebCore::PushDatabase::removeRecordsByBundleIdentifierAndSecurityOrigin): Deleted.
* Source/WebCore/Modules/push-api/PushDatabase.h:
* Source/WebCore/Modules/push-api/PushSubscriptionIdentifier.h:
(WebCore::PushSubscriptionSetIdentifier::isolatedCopy const):
(WebCore::PushSubscriptionSetIdentifier::isolatedCopy):
* Source/WebCore/platform/sql/SQLiteStatement.h:
(WebCore::SQLiteStatement::bind):
(WebCore::SQLiteStatement::bindImpl):
* Source/WebKit/webpushd/PushService.mm:
(WebPushD::makeSubscriptionSet):
(WebPushD::GetSubscriptionRequest::startInternal):
(WebPushD::SubscribeRequest::startImpl):
(WebPushD::UnsubscribeRequest::startInternal):
(WebPushD::PushService::incrementSilentPushCount):
(WebPushD::PushService::setPushesEnabledForBundleIdentifierAndOrigin):
(WebPushD::PushService::removeRecordsImpl):
(WebPushD::PushService::didReceivePushMessage):
* Tools/TestWebKitAPI/Tests/WebCore/PushDatabase.cpp:
(WebCore::operator==):
(TestWebKitAPI::getTopicsFromRecords):
(TestWebKitAPI::getRecordBySubscriptionSetAndScopeSync):
(TestWebKitAPI::PushDatabaseTest::getRecordBySubscriptionSetAndScope):
(TestWebKitAPI::PushDatabaseTest::removeRecordsBySubscriptionSet):
(TestWebKitAPI::PushDatabaseTest::removeRecordsBySubscriptionSetAndSecurityOrigin):
(TestWebKitAPI::PushDatabaseTest::incrementSilentPushCount):
(TestWebKitAPI::PushDatabaseTest::setPushesEnabledForOrigin):
(TestWebKitAPI::TEST_F):
(TestWebKitAPI::TEST):
(TestWebKitAPI::getRecordByBundleIdentifierAndScopeSync): Deleted.
(TestWebKitAPI::PushDatabaseTest::getRecordByBundleIdentifierAndScope): Deleted.
(TestWebKitAPI::PushDatabaseTest::removeRecordsByBundleIdentifier): Deleted.
(TestWebKitAPI::PushDatabaseTest::removeRecordsByBundleIdentifierAndSecurityOrigin): Deleted.
Canonical link: https://commits.webkit.org/257521@main
More information about the webkit-changes
mailing list