tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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:
Mdom/quota/ActorsParent.cpp | 69+++++----------------------------------------------------------------
Mdom/quota/GroupInfoPair.h | 11+++++++++++
Adom/quota/GroupInfoPairImpl.h | 53+++++++++++++++++++++++++++++++++++++++++++++++++++++
Mdom/quota/QuotaManager.h | 19-------------------
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);