Bug 1950564 - QM: Add a new testing only notification for group initialization; r=dom-storage-reviewers,jstutte

Differential Revision: https://phabricator.services.mozilla.com/D240603
This commit is contained in:
Jan Varga
2025-03-15 10:11:27 +00:00
parent 5369c9fcf1
commit 51dbc78368
5 changed files with 63 additions and 0 deletions

View File

@@ -5850,6 +5850,8 @@ Result<Ok, nsresult> QuotaManager::EnsureTemporaryGroupIsInitializedInternal(
const auto innerFunc = [&aPrincipalMetadata, const auto innerFunc = [&aPrincipalMetadata,
this](const auto&) -> mozilla::Result<Ok, nsresult> { this](const auto&) -> mozilla::Result<Ok, nsresult> {
NotifyGroupInitializationStarted(*this);
const auto& array = const auto& array =
mIOThreadAccessible.Access()->mAllTemporaryOrigins.Lookup( mIOThreadAccessible.Access()->mAllTemporaryOrigins.Lookup(
aPrincipalMetadata.mGroup); aPrincipalMetadata.mGroup);

View File

@@ -50,6 +50,14 @@ void NotifyClientDirectoryOpeningStarted(QuotaManager& aQuotaManager) {
NotifyObserversOnMainThread("QuotaManager::ClientDirectoryOpeningStarted"); NotifyObserversOnMainThread("QuotaManager::ClientDirectoryOpeningStarted");
} }
void NotifyGroupInitializationStarted(QuotaManager& aQuotaManager) {
if (!StaticPrefs::dom_quotaManager_testing()) {
return;
}
NotifyObserversOnMainThread("QuotaManager::GroupInitializationStarted");
}
void NotifyOriginInitializationStarted(QuotaManager& aQuotaManager) { void NotifyOriginInitializationStarted(QuotaManager& aQuotaManager) {
if (!StaticPrefs::dom_quotaManager_testing()) { if (!StaticPrefs::dom_quotaManager_testing()) {
return; return;

View File

@@ -19,6 +19,8 @@ void NotifyMaintenanceStarted(QuotaManager& aQuotaManager);
void NotifyClientDirectoryOpeningStarted(QuotaManager& aQuotaManager); void NotifyClientDirectoryOpeningStarted(QuotaManager& aQuotaManager);
void NotifyGroupInitializationStarted(QuotaManager& aQuotaManager);
void NotifyOriginInitializationStarted(QuotaManager& aQuotaManager); void NotifyOriginInitializationStarted(QuotaManager& aQuotaManager);
} // namespace mozilla::dom::quota } // namespace mozilla::dom::quota

View File

@@ -0,0 +1,49 @@
/**
* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/
*/
const { PrincipalUtils } = ChromeUtils.importESModule(
"resource://testing-common/dom/quota/test/modules/PrincipalUtils.sys.mjs"
);
const { QuotaUtils } = ChromeUtils.importESModule(
"resource://testing-common/dom/quota/test/modules/QuotaUtils.sys.mjs"
);
const { TestUtils } = ChromeUtils.importESModule(
"resource://testing-common/TestUtils.sys.mjs"
);
/* exported testSteps */
async function testSteps() {
const principal = PrincipalUtils.createPrincipal("https://example.com");
info("Initializing storage");
{
const request = Services.qms.init();
await QuotaUtils.requestFinished(request);
}
info("Initializing temporary storage");
{
const request = Services.qms.initTemporaryStorage();
await QuotaUtils.requestFinished(request);
}
info("Starting temporary group initialization");
const initPromise = (async function () {
const request = Services.qms.initializeTemporaryGroup(principal);
const promise = QuotaUtils.requestFinished(request);
return promise;
})();
info("Waiting for group initialization to start");
await TestUtils.topicObserved("QuotaManager::GroupInitializationStarted");
info("Waiting for group initialization to finish");
await initPromise;
}

View File

@@ -71,6 +71,8 @@ skip-if = ["true"] # Only used for recreating unsetLastAccessTime_profile.zip
["test_getUsageForPrincipal.js"] ["test_getUsageForPrincipal.js"]
["test_groupInitializationStarted.js"]
["test_groupMismatch.js"] ["test_groupMismatch.js"]
skip-if = ["true"] # The group is now always empty, so metadata can't differ anymore. skip-if = ["true"] # The group is now always empty, so metadata can't differ anymore.