From 51dbc7836842b5ad4c5550f330efa5b3f4eca62d Mon Sep 17 00:00:00 2001 From: Jan Varga Date: Sat, 15 Mar 2025 10:11:27 +0000 Subject: [PATCH] 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 --- dom/quota/ActorsParent.cpp | 2 + dom/quota/NotifyUtils.cpp | 8 +++ dom/quota/NotifyUtils.h | 2 + .../test_groupInitializationStarted.js | 49 +++++++++++++++++++ dom/quota/test/xpcshell/xpcshell.toml | 2 + 5 files changed, 63 insertions(+) create mode 100644 dom/quota/test/xpcshell/test_groupInitializationStarted.js diff --git a/dom/quota/ActorsParent.cpp b/dom/quota/ActorsParent.cpp index 1198300792a1..d6abc3a21401 100644 --- a/dom/quota/ActorsParent.cpp +++ b/dom/quota/ActorsParent.cpp @@ -5850,6 +5850,8 @@ Result QuotaManager::EnsureTemporaryGroupIsInitializedInternal( const auto innerFunc = [&aPrincipalMetadata, this](const auto&) -> mozilla::Result { + NotifyGroupInitializationStarted(*this); + const auto& array = mIOThreadAccessible.Access()->mAllTemporaryOrigins.Lookup( aPrincipalMetadata.mGroup); diff --git a/dom/quota/NotifyUtils.cpp b/dom/quota/NotifyUtils.cpp index 0f4e134509d4..117489d72300 100644 --- a/dom/quota/NotifyUtils.cpp +++ b/dom/quota/NotifyUtils.cpp @@ -50,6 +50,14 @@ void NotifyClientDirectoryOpeningStarted(QuotaManager& aQuotaManager) { NotifyObserversOnMainThread("QuotaManager::ClientDirectoryOpeningStarted"); } +void NotifyGroupInitializationStarted(QuotaManager& aQuotaManager) { + if (!StaticPrefs::dom_quotaManager_testing()) { + return; + } + + NotifyObserversOnMainThread("QuotaManager::GroupInitializationStarted"); +} + void NotifyOriginInitializationStarted(QuotaManager& aQuotaManager) { if (!StaticPrefs::dom_quotaManager_testing()) { return; diff --git a/dom/quota/NotifyUtils.h b/dom/quota/NotifyUtils.h index ce3bd4cf217c..ff146f883a58 100644 --- a/dom/quota/NotifyUtils.h +++ b/dom/quota/NotifyUtils.h @@ -19,6 +19,8 @@ void NotifyMaintenanceStarted(QuotaManager& aQuotaManager); void NotifyClientDirectoryOpeningStarted(QuotaManager& aQuotaManager); +void NotifyGroupInitializationStarted(QuotaManager& aQuotaManager); + void NotifyOriginInitializationStarted(QuotaManager& aQuotaManager); } // namespace mozilla::dom::quota diff --git a/dom/quota/test/xpcshell/test_groupInitializationStarted.js b/dom/quota/test/xpcshell/test_groupInitializationStarted.js new file mode 100644 index 000000000000..e0c4c588cbf5 --- /dev/null +++ b/dom/quota/test/xpcshell/test_groupInitializationStarted.js @@ -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; +} diff --git a/dom/quota/test/xpcshell/xpcshell.toml b/dom/quota/test/xpcshell/xpcshell.toml index e655f7f1c333..a71b3a6f1597 100644 --- a/dom/quota/test/xpcshell/xpcshell.toml +++ b/dom/quota/test/xpcshell/xpcshell.toml @@ -71,6 +71,8 @@ skip-if = ["true"] # Only used for recreating unsetLastAccessTime_profile.zip ["test_getUsageForPrincipal.js"] +["test_groupInitializationStarted.js"] + ["test_groupMismatch.js"] skip-if = ["true"] # The group is now always empty, so metadata can't differ anymore.