1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
5 * You can obtain one at http://mozilla.org/MPL/2.0/. */
9 #include "mozilla/dom/quota/AssertionsImpl.h"
10 #include "OriginInfo.h"
12 namespace mozilla::dom::quota
{
14 already_AddRefed
<OriginInfo
> GroupInfo::LockedGetOriginInfo(
15 const nsACString
& aOrigin
) {
16 AssertCurrentThreadOwnsQuotaMutex();
18 for (const auto& originInfo
: mOriginInfos
) {
19 if (originInfo
->mOrigin
== aOrigin
) {
20 RefPtr
<OriginInfo
> result
= originInfo
;
21 return result
.forget();
28 void GroupInfo::LockedAddOriginInfo(NotNull
<RefPtr
<OriginInfo
>>&& aOriginInfo
) {
29 AssertCurrentThreadOwnsQuotaMutex();
31 NS_ASSERTION(!mOriginInfos
.Contains(aOriginInfo
),
32 "Replacing an existing entry!");
33 mOriginInfos
.AppendElement(std::move(aOriginInfo
));
35 uint64_t usage
= aOriginInfo
->LockedUsage();
37 if (!aOriginInfo
->LockedPersisted()) {
38 AssertNoOverflow(mUsage
, usage
);
42 QuotaManager
* quotaManager
= QuotaManager::Get();
43 MOZ_ASSERT(quotaManager
);
45 AssertNoOverflow(quotaManager
->mTemporaryStorageUsage
, usage
);
46 quotaManager
->mTemporaryStorageUsage
+= usage
;
49 void GroupInfo::LockedAdjustUsageForRemovedOriginInfo(
50 const OriginInfo
& aOriginInfo
) {
51 const uint64_t usage
= aOriginInfo
.LockedUsage();
53 if (!aOriginInfo
.LockedPersisted()) {
54 AssertNoUnderflow(mUsage
, usage
);
58 QuotaManager
* const quotaManager
= QuotaManager::Get();
59 MOZ_ASSERT(quotaManager
);
61 AssertNoUnderflow(quotaManager
->mTemporaryStorageUsage
, usage
);
62 quotaManager
->mTemporaryStorageUsage
-= usage
;
65 void GroupInfo::LockedRemoveOriginInfo(const nsACString
& aOrigin
) {
66 AssertCurrentThreadOwnsQuotaMutex();
68 const auto foundIt
= std::find_if(mOriginInfos
.cbegin(), mOriginInfos
.cend(),
69 [&aOrigin
](const auto& originInfo
) {
70 return originInfo
->mOrigin
== aOrigin
;
73 // XXX Or can we MOZ_ASSERT(foundIt != mOriginInfos.cend()) ?
74 if (foundIt
!= mOriginInfos
.cend()) {
75 LockedAdjustUsageForRemovedOriginInfo(**foundIt
);
77 mOriginInfos
.RemoveElementAt(foundIt
);
81 void GroupInfo::LockedRemoveOriginInfos() {
82 AssertCurrentThreadOwnsQuotaMutex();
84 for (const auto& originInfo
: std::exchange(mOriginInfos
, {})) {
85 LockedAdjustUsageForRemovedOriginInfo(*originInfo
);
89 } // namespace mozilla::dom::quota