commit e6df2d5f574d9407c39b8c1fbd5108174218495a
parent 000aa5a98ca9b1ed39078e6be4572569d4521353
Author: Jan Varga <Jan.Varga@gmail.com>
Date: Tue, 28 Oct 2025 11:59:51 +0000
Bug 1988590 - QM: Move MaybeInsertOriginInfos helpers to GroupInfoPair; r=asuth,dom-storage-reviewers,jari
This patch moves the MaybeInsertOriginInfos insertion helpers from QuotaManager
to GroupInfoPair, which is the appropriate location given their role.
Testing: This is exercised by existing quota manager tests.
Differential Revision: https://phabricator.services.mozilla.com/D266639
Diffstat:
4 files changed, 69 insertions(+), 83 deletions(-)
diff --git a/dom/quota/ActorsParent.cpp b/dom/quota/ActorsParent.cpp
@@ -14,6 +14,7 @@
#include "Flatten.h"
#include "GroupInfo.h"
#include "GroupInfoPair.h"
+#include "GroupInfoPairImpl.h"
#include "NormalOriginOperationBase.h"
#include "OpenClientDirectoryUtils.h"
#include "OriginInfo.h"
@@ -7863,57 +7864,6 @@ already_AddRefed<OriginInfo> QuotaManager::LockedGetOriginInfo(
return nullptr;
}
-template <typename Iterator, typename Pred>
-void QuotaManager::MaybeInsertOriginInfos(
- Iterator aDest, const RefPtr<GroupInfo>& aTemporaryGroupInfo,
- const RefPtr<GroupInfo>& aDefaultGroupInfo,
- const RefPtr<GroupInfo>& aPrivateGroupInfo, Pred aPred) {
- const auto copy = [&aDest, &aPred](const GroupInfo& groupInfo) {
- std::copy_if(groupInfo.mOriginInfos.cbegin(), groupInfo.mOriginInfos.cend(),
- aDest, aPred);
- };
-
- if (aTemporaryGroupInfo) {
- MOZ_ASSERT(PERSISTENCE_TYPE_TEMPORARY ==
- aTemporaryGroupInfo->GetPersistenceType());
-
- copy(*aTemporaryGroupInfo);
- }
- if (aDefaultGroupInfo) {
- MOZ_ASSERT(PERSISTENCE_TYPE_DEFAULT ==
- aDefaultGroupInfo->GetPersistenceType());
-
- copy(*aDefaultGroupInfo);
- }
- if (aPrivateGroupInfo) {
- MOZ_ASSERT(PERSISTENCE_TYPE_PRIVATE ==
- aPrivateGroupInfo->GetPersistenceType());
- copy(*aPrivateGroupInfo);
- }
-}
-
-template <typename Iterator>
-void QuotaManager::MaybeInsertNonPersistedOriginInfos(
- Iterator aDest, const RefPtr<GroupInfo>& aTemporaryGroupInfo,
- const RefPtr<GroupInfo>& aDefaultGroupInfo,
- const RefPtr<GroupInfo>& aPrivateGroupInfo) {
- return MaybeInsertOriginInfos(
- aDest, aTemporaryGroupInfo, aDefaultGroupInfo, aPrivateGroupInfo,
- [](const auto& originInfo) { return !originInfo->LockedPersisted(); });
-}
-
-template <typename Iterator>
-void QuotaManager::MaybeInsertNonPersistedZeroUsageOriginInfos(
- Iterator aDest, const RefPtr<GroupInfo>& aTemporaryGroupInfo,
- const RefPtr<GroupInfo>& aDefaultGroupInfo,
- const RefPtr<GroupInfo>& aPrivateGroupInfo) {
- return MaybeInsertOriginInfos(aDest, aTemporaryGroupInfo, aDefaultGroupInfo,
- aPrivateGroupInfo, [](const auto& originInfo) {
- return !originInfo->LockedPersisted() &&
- originInfo->LockedUsage() == 0;
- });
-}
-
template <typename Collect, typename Pred>
QuotaManager::OriginInfosFlatTraversable
QuotaManager::CollectLRUOriginInfosUntil(Collect&& aCollect, Pred&& aPred) {
@@ -7969,11 +7919,8 @@ QuotaManager::GetOriginInfosExceedingGroupLimit() const {
if (groupUsage > quotaManager->GetGroupLimit()) {
originInfos.AppendElement(CollectLRUOriginInfosUntil(
- [&temporaryGroupInfo, &defaultGroupInfo,
- &privateGroupInfo](auto inserter) {
- MaybeInsertNonPersistedOriginInfos(
- std::move(inserter), temporaryGroupInfo, defaultGroupInfo,
- privateGroupInfo);
+ [&pair](auto inserter) {
+ pair->MaybeInsertNonPersistedOriginInfos(std::move(inserter));
},
[&groupUsage, quotaManager](const auto& originInfo) {
groupUsage -= originInfo->LockedUsage();
@@ -8004,10 +7951,7 @@ QuotaManager::GetOriginInfosExceedingGlobalLimit() const {
MOZ_ASSERT(!entry.GetKey().IsEmpty());
MOZ_ASSERT(pair);
- MaybeInsertNonPersistedOriginInfos(
- inserter, pair->LockedGetGroupInfo(PERSISTENCE_TYPE_TEMPORARY),
- pair->LockedGetGroupInfo(PERSISTENCE_TYPE_DEFAULT),
- pair->LockedGetGroupInfo(PERSISTENCE_TYPE_PRIVATE));
+ pair->MaybeInsertNonPersistedOriginInfos(inserter);
}
},
[temporaryStorageUsage = mTemporaryStorageUsage,
@@ -8040,10 +7984,7 @@ QuotaManager::GetOriginInfosWithZeroUsage() const {
MOZ_ASSERT(!entry.GetKey().IsEmpty());
MOZ_ASSERT(pair);
- MaybeInsertNonPersistedZeroUsageOriginInfos(
- inserter, pair->LockedGetGroupInfo(PERSISTENCE_TYPE_TEMPORARY),
- pair->LockedGetGroupInfo(PERSISTENCE_TYPE_DEFAULT),
- pair->LockedGetGroupInfo(PERSISTENCE_TYPE_PRIVATE));
+ pair->MaybeInsertNonPersistedZeroUsageOriginInfos(inserter);
}
res.AppendElement(std::move(originInfos));
diff --git a/dom/quota/GroupInfoPair.h b/dom/quota/GroupInfoPair.h
@@ -65,6 +65,17 @@ class GroupInfoPair {
mPrivateStorageGroupInfo;
}
+ template <typename Iterator, typename Pred>
+ void MaybeInsertOriginInfos(Iterator aDest, Pred aPred) const;
+
+ template <typename Iterator>
+ void MaybeInsertNonPersistedOriginInfos(Iterator aDest) const;
+
+ // Inserts non-persisted origins that also have zero quota-charged usage.
+ // Used by cleanup routines to identify candidate origins for removal.
+ template <typename Iterator>
+ void MaybeInsertNonPersistedZeroUsageOriginInfos(Iterator aDest) const;
+
private:
RefPtr<GroupInfo>& GetGroupInfoForPersistenceType(
PersistenceType aPersistenceType);
diff --git a/dom/quota/GroupInfoPairImpl.h b/dom/quota/GroupInfoPairImpl.h
@@ -0,0 +1,53 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=8 sts=2 et sw=2 tw=80: */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#ifndef DOM_QUOTA_GROUPINFOPAIRIMPL_H_
+#define DOM_QUOTA_GROUPINFOPAIRIMPL_H_
+
+#include <algorithm>
+
+#include "GroupInfo.h"
+#include "GroupInfoPair.h"
+#include "OriginInfo.h"
+
+namespace mozilla::dom::quota {
+
+template <typename Iterator, typename Pred>
+void GroupInfoPair::MaybeInsertOriginInfos(Iterator aDest, Pred aPred) const {
+ const auto copy = [&aDest, &aPred](const GroupInfo& groupInfo) {
+ std::copy_if(groupInfo.mOriginInfos.cbegin(), groupInfo.mOriginInfos.cend(),
+ aDest, aPred);
+ };
+
+ if (mTemporaryStorageGroupInfo) {
+ copy(*mTemporaryStorageGroupInfo);
+ }
+ if (mDefaultStorageGroupInfo) {
+ copy(*mDefaultStorageGroupInfo);
+ }
+ if (mPrivateStorageGroupInfo) {
+ copy(*mPrivateStorageGroupInfo);
+ }
+}
+
+template <typename Iterator>
+void GroupInfoPair::MaybeInsertNonPersistedOriginInfos(Iterator aDest) const {
+ MaybeInsertOriginInfos(aDest, [](const auto& originInfo) {
+ return !originInfo->LockedPersisted();
+ });
+}
+
+template <typename Iterator>
+void GroupInfoPair::MaybeInsertNonPersistedZeroUsageOriginInfos(
+ Iterator aDest) const {
+ MaybeInsertOriginInfos(aDest, [](const auto& originInfo) {
+ return !originInfo->LockedPersisted() && originInfo->LockedUsage() == 0;
+ });
+}
+
+} // namespace mozilla::dom::quota
+
+#endif // DOM_QUOTA_GROUPINFOPAIRIMPL_H_
diff --git a/dom/quota/QuotaManager.h b/dom/quota/QuotaManager.h
@@ -1072,25 +1072,6 @@ class QuotaManager final : public BackgroundThreadObject {
*/
void IncreaseSaveOriginAccessTimeCountInternal();
- // XXX These insertion helpers probably belong to GroupInfoPair
- template <typename Iterator, typename Pred>
- static void MaybeInsertOriginInfos(
- Iterator aDest, const RefPtr<GroupInfo>& aTemporaryGroupInfo,
- const RefPtr<GroupInfo>& aDefaultGroupInfo,
- const RefPtr<GroupInfo>& aPrivateGroupInfo, Pred aPred);
-
- template <typename Iterator>
- static void MaybeInsertNonPersistedOriginInfos(
- Iterator aDest, const RefPtr<GroupInfo>& aTemporaryGroupInfo,
- const RefPtr<GroupInfo>& aDefaultGroupInfo,
- const RefPtr<GroupInfo>& aPrivateGroupInfo);
-
- template <typename Iterator>
- static void MaybeInsertNonPersistedZeroUsageOriginInfos(
- Iterator aDest, const RefPtr<GroupInfo>& aTemporaryGroupInfo,
- const RefPtr<GroupInfo>& aDefaultGroupInfo,
- const RefPtr<GroupInfo>& aPrivateGroupInfo);
-
template <typename Collect, typename Pred>
static OriginInfosFlatTraversable CollectLRUOriginInfosUntil(
Collect&& aCollect, Pred&& aPred);