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:
@@ -5850,6 +5850,8 @@ Result<Ok, nsresult> QuotaManager::EnsureTemporaryGroupIsInitializedInternal(
|
||||
|
||||
const auto innerFunc = [&aPrincipalMetadata,
|
||||
this](const auto&) -> mozilla::Result<Ok, nsresult> {
|
||||
NotifyGroupInitializationStarted(*this);
|
||||
|
||||
const auto& array =
|
||||
mIOThreadAccessible.Access()->mAllTemporaryOrigins.Lookup(
|
||||
aPrincipalMetadata.mGroup);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -19,6 +19,8 @@ void NotifyMaintenanceStarted(QuotaManager& aQuotaManager);
|
||||
|
||||
void NotifyClientDirectoryOpeningStarted(QuotaManager& aQuotaManager);
|
||||
|
||||
void NotifyGroupInitializationStarted(QuotaManager& aQuotaManager);
|
||||
|
||||
void NotifyOriginInitializationStarted(QuotaManager& aQuotaManager);
|
||||
|
||||
} // namespace mozilla::dom::quota
|
||||
|
||||
49
dom/quota/test/xpcshell/test_groupInitializationStarted.js
Normal file
49
dom/quota/test/xpcshell/test_groupInitializationStarted.js
Normal 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;
|
||||
}
|
||||
@@ -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.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user