gecko-dev/dom/quota/QuotaObject.h
Jan Varga 9f906cd7c4 Bug 1563023 - Part 1: Implement per client usage tracking; r=asuth
This patch adds a fixed-size array of client usages to OriginInfo and modifies
quota tracking APIs to require the client type to be passed in.
A new method ResetUsageForClient is implemented. The method is used during
client-specific origin clearing. ResetUsageForClient is much faster than calling
GetUsageForOrigin and calling DecreaseUsageForOrigin after that.
LockedUsage now has an assertion that verifies that the total sum of client
usages matches total origin usage. This method should be called instead of
touching mUsage directly.
A new assertion is added to GetQuotaObject which verifies that passed file
belongs to the given persistence type, origin, and client.

Differential Revision: https://phabricator.services.mozilla.com/D38028

--HG--
extra : moz-landing-system : lando
2019-08-22 13:06:48 +00:00

81 lines
1.8 KiB
C++

/* -*- 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 mozilla_dom_quota_quotaobject_h__
#define mozilla_dom_quota_quotaobject_h__
#include "mozilla/dom/quota/QuotaCommon.h"
#include "nsDataHashtable.h"
#include "Client.h"
#include "PersistenceType.h"
BEGIN_QUOTA_NAMESPACE
class OriginInfo;
class QuotaManager;
class QuotaObject {
friend class OriginInfo;
friend class QuotaManager;
class StoragePressureRunnable;
public:
void AddRef();
void Release();
const nsAString& Path() const { return mPath; }
bool MaybeUpdateSize(int64_t aSize, bool aTruncate);
bool IncreaseSize(int64_t aDelta);
void DisableQuotaCheck();
void EnableQuotaCheck();
private:
QuotaObject(OriginInfo* aOriginInfo, Client::Type aClientType,
const nsAString& aPath, int64_t aSize)
: mOriginInfo(aOriginInfo),
mPath(aPath),
mSize(aSize),
mClientType(aClientType),
mQuotaCheckDisabled(false),
mWritingDone(false) {
MOZ_COUNT_CTOR(QuotaObject);
}
~QuotaObject() { MOZ_COUNT_DTOR(QuotaObject); }
already_AddRefed<QuotaObject> LockedAddRef() {
AssertCurrentThreadOwnsQuotaMutex();
++mRefCnt;
RefPtr<QuotaObject> result = dont_AddRef(this);
return result.forget();
}
bool LockedMaybeUpdateSize(int64_t aSize, bool aTruncate);
mozilla::ThreadSafeAutoRefCnt mRefCnt;
OriginInfo* mOriginInfo;
nsString mPath;
int64_t mSize;
Client::Type mClientType;
bool mQuotaCheckDisabled;
bool mWritingDone;
};
END_QUOTA_NAMESPACE
#endif // mozilla_dom_quota_quotaobject_h__