зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1348660 - Part 3: Separate the canceled state out of UsageInfo; r=btseng
This commit is contained in:
Родитель
4221505b78
Коммит
ae1ee28451
|
@ -1623,18 +1623,24 @@ public:
|
|||
InitOrigin(PersistenceType aPersistenceType,
|
||||
const nsACString& aGroup,
|
||||
const nsACString& aOrigin,
|
||||
const AtomicBool& aCanceled,
|
||||
UsageInfo* aUsageInfo) override
|
||||
{
|
||||
if (!aUsageInfo) {
|
||||
return NS_OK;
|
||||
}
|
||||
return GetUsageForOrigin(aPersistenceType, aGroup, aOrigin, aUsageInfo);
|
||||
return GetUsageForOrigin(aPersistenceType,
|
||||
aGroup,
|
||||
aOrigin,
|
||||
aCanceled,
|
||||
aUsageInfo);
|
||||
}
|
||||
|
||||
nsresult
|
||||
GetUsageForOrigin(PersistenceType aPersistenceType,
|
||||
const nsACString& aGroup,
|
||||
const nsACString& aOrigin,
|
||||
const AtomicBool& aCanceled,
|
||||
UsageInfo* aUsageInfo) override
|
||||
{
|
||||
QuotaManager* qm = QuotaManager::Get();
|
||||
|
@ -1658,7 +1664,7 @@ public:
|
|||
|
||||
bool hasMore;
|
||||
while (NS_SUCCEEDED((rv = entries->HasMoreElements(&hasMore))) &&
|
||||
hasMore && !aUsageInfo->Canceled()) {
|
||||
hasMore && !aCanceled) {
|
||||
nsCOMPtr<nsISupports> entry;
|
||||
rv = entries->GetNext(getter_AddRefs(entry));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
|
||||
namespace {
|
||||
|
||||
using mozilla::Atomic;
|
||||
using mozilla::dom::ContentParentId;
|
||||
using mozilla::dom::cache::Manager;
|
||||
using mozilla::dom::quota::Client;
|
||||
|
@ -25,7 +26,8 @@ using mozilla::dom::quota::UsageInfo;
|
|||
using mozilla::ipc::AssertIsOnBackgroundThread;
|
||||
|
||||
static nsresult
|
||||
GetBodyUsage(nsIFile* aDir, UsageInfo* aUsageInfo)
|
||||
GetBodyUsage(nsIFile* aDir, const Atomic<bool>& aCanceled,
|
||||
UsageInfo* aUsageInfo)
|
||||
{
|
||||
nsCOMPtr<nsISimpleEnumerator> entries;
|
||||
nsresult rv = aDir->GetDirectoryEntries(getter_AddRefs(entries));
|
||||
|
@ -33,7 +35,7 @@ GetBodyUsage(nsIFile* aDir, UsageInfo* aUsageInfo)
|
|||
|
||||
bool hasMore;
|
||||
while (NS_SUCCEEDED(rv = entries->HasMoreElements(&hasMore)) && hasMore &&
|
||||
!aUsageInfo->Canceled()) {
|
||||
!aCanceled) {
|
||||
nsCOMPtr<nsISupports> entry;
|
||||
rv = entries->GetNext(getter_AddRefs(entry));
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) { return rv; }
|
||||
|
@ -45,7 +47,7 @@ GetBodyUsage(nsIFile* aDir, UsageInfo* aUsageInfo)
|
|||
if (NS_WARN_IF(NS_FAILED(rv))) { return rv; }
|
||||
|
||||
if (isDir) {
|
||||
rv = GetBodyUsage(file, aUsageInfo);
|
||||
rv = GetBodyUsage(file, aCanceled, aUsageInfo);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) { return rv; }
|
||||
continue;
|
||||
}
|
||||
|
@ -72,7 +74,8 @@ public:
|
|||
|
||||
virtual nsresult
|
||||
InitOrigin(PersistenceType aPersistenceType, const nsACString& aGroup,
|
||||
const nsACString& aOrigin, UsageInfo* aUsageInfo) override
|
||||
const nsACString& aOrigin, const AtomicBool& aCanceled,
|
||||
UsageInfo* aUsageInfo) override
|
||||
{
|
||||
// The QuotaManager passes a nullptr UsageInfo if there is no quota being
|
||||
// enforced against the origin.
|
||||
|
@ -80,12 +83,13 @@ public:
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
return GetUsageForOrigin(aPersistenceType, aGroup, aOrigin, aUsageInfo);
|
||||
return GetUsageForOrigin(aPersistenceType, aGroup, aOrigin, aCanceled,
|
||||
aUsageInfo);
|
||||
}
|
||||
|
||||
virtual nsresult
|
||||
GetUsageForOrigin(PersistenceType aPersistenceType, const nsACString& aGroup,
|
||||
const nsACString& aOrigin,
|
||||
const nsACString& aOrigin, const AtomicBool& aCanceled,
|
||||
UsageInfo* aUsageInfo) override
|
||||
{
|
||||
MOZ_DIAGNOSTIC_ASSERT(aUsageInfo);
|
||||
|
@ -107,7 +111,7 @@ public:
|
|||
|
||||
bool hasMore;
|
||||
while (NS_SUCCEEDED(rv = entries->HasMoreElements(&hasMore)) && hasMore &&
|
||||
!aUsageInfo->Canceled()) {
|
||||
!aCanceled) {
|
||||
nsCOMPtr<nsISupports> entry;
|
||||
rv = entries->GetNext(getter_AddRefs(entry));
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) { return rv; }
|
||||
|
@ -124,7 +128,7 @@ public:
|
|||
|
||||
if (isDir) {
|
||||
if (leafName.EqualsLiteral("morgue")) {
|
||||
rv = GetBodyUsage(file, aUsageInfo);
|
||||
rv = GetBodyUsage(file, aCanceled, aUsageInfo);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) { return rv; }
|
||||
} else {
|
||||
NS_WARNING("Unknown Cache directory found!");
|
||||
|
|
|
@ -9347,12 +9347,14 @@ public:
|
|||
InitOrigin(PersistenceType aPersistenceType,
|
||||
const nsACString& aGroup,
|
||||
const nsACString& aOrigin,
|
||||
const AtomicBool& aCanceled,
|
||||
UsageInfo* aUsageInfo) override;
|
||||
|
||||
nsresult
|
||||
GetUsageForOrigin(PersistenceType aPersistenceType,
|
||||
const nsACString& aGroup,
|
||||
const nsACString& aOrigin,
|
||||
const AtomicBool& aCanceled,
|
||||
UsageInfo* aUsageInfo) override;
|
||||
|
||||
void
|
||||
|
@ -9394,13 +9396,14 @@ private:
|
|||
|
||||
nsresult
|
||||
GetDatabaseFilenames(nsIFile* aDirectory,
|
||||
UsageInfo* aUsageInfo,
|
||||
const AtomicBool& aCanceled,
|
||||
bool aForUpgrade,
|
||||
nsTArray<nsString>& aSubdirsToProcess,
|
||||
nsTHashtable<nsStringHashKey>& aDatabaseFilename);
|
||||
|
||||
nsresult
|
||||
GetUsageForDirectoryInternal(nsIFile* aDirectory,
|
||||
const AtomicBool& aCanceled,
|
||||
UsageInfo* aUsageInfo,
|
||||
bool aDatabaseFiles);
|
||||
|
||||
|
@ -17828,10 +17831,11 @@ QuotaClient::UpgradeStorageFrom1_0To2_0(nsIFile* aDirectory)
|
|||
AssertIsOnIOThread();
|
||||
MOZ_ASSERT(aDirectory);
|
||||
|
||||
AtomicBool dummy(false);
|
||||
AutoTArray<nsString, 20> subdirsToProcess;
|
||||
nsTHashtable<nsStringHashKey> databaseFilenames(20);
|
||||
nsresult rv = GetDatabaseFilenames(aDirectory,
|
||||
nullptr,
|
||||
/* aCanceled */ dummy,
|
||||
/* aForUpgrade */ true,
|
||||
subdirsToProcess,
|
||||
databaseFilenames);
|
||||
|
@ -17924,6 +17928,7 @@ nsresult
|
|||
QuotaClient::InitOrigin(PersistenceType aPersistenceType,
|
||||
const nsACString& aGroup,
|
||||
const nsACString& aOrigin,
|
||||
const AtomicBool& aCanceled,
|
||||
UsageInfo* aUsageInfo)
|
||||
{
|
||||
AssertIsOnIOThread();
|
||||
|
@ -17942,7 +17947,7 @@ QuotaClient::InitOrigin(PersistenceType aPersistenceType,
|
|||
AutoTArray<nsString, 20> subdirsToProcess;
|
||||
nsTHashtable<nsStringHashKey> databaseFilenames(20);
|
||||
rv = GetDatabaseFilenames(directory,
|
||||
aUsageInfo,
|
||||
aCanceled,
|
||||
/* aForUpgrade */ false,
|
||||
subdirsToProcess,
|
||||
databaseFilenames);
|
||||
|
@ -17974,7 +17979,9 @@ QuotaClient::InitOrigin(PersistenceType aPersistenceType,
|
|||
const NS_ConvertASCIItoUTF16 walSuffix(kSQLiteWALSuffix,
|
||||
LiteralStringLength(kSQLiteWALSuffix));
|
||||
|
||||
for (auto iter = databaseFilenames.ConstIter(); !iter.Done(); iter.Next()) {
|
||||
for (auto iter = databaseFilenames.ConstIter();
|
||||
!iter.Done() && !aCanceled;
|
||||
iter.Next()) {
|
||||
auto& databaseFilename = iter.Get()->GetKey();
|
||||
|
||||
nsCOMPtr<nsIFile> fmDirectory;
|
||||
|
@ -18022,7 +18029,7 @@ QuotaClient::InitOrigin(PersistenceType aPersistenceType,
|
|||
return rv;
|
||||
}
|
||||
|
||||
if (aUsageInfo && !aUsageInfo->Canceled()) {
|
||||
if (aUsageInfo) {
|
||||
int64_t fileSize;
|
||||
rv = databaseFile->GetFileSize(&fileSize);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
|
@ -18059,6 +18066,7 @@ nsresult
|
|||
QuotaClient::GetUsageForOrigin(PersistenceType aPersistenceType,
|
||||
const nsACString& aGroup,
|
||||
const nsACString& aOrigin,
|
||||
const AtomicBool& aCanceled,
|
||||
UsageInfo* aUsageInfo)
|
||||
{
|
||||
AssertIsOnIOThread();
|
||||
|
@ -18071,7 +18079,7 @@ QuotaClient::GetUsageForOrigin(PersistenceType aPersistenceType,
|
|||
return rv;
|
||||
}
|
||||
|
||||
rv = GetUsageForDirectoryInternal(directory, aUsageInfo, true);
|
||||
rv = GetUsageForDirectoryInternal(directory, aCanceled, aUsageInfo, true);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
|
@ -18260,12 +18268,13 @@ QuotaClient::GetDirectory(PersistenceType aPersistenceType,
|
|||
nsresult
|
||||
QuotaClient::GetDatabaseFilenames(
|
||||
nsIFile* aDirectory,
|
||||
UsageInfo* aUsageInfo,
|
||||
const AtomicBool& aCanceled,
|
||||
bool aForUpgrade,
|
||||
nsTArray<nsString>& aSubdirsToProcess,
|
||||
nsTHashtable<nsStringHashKey>& aDatabaseFilenames)
|
||||
{
|
||||
AssertIsOnIOThread();
|
||||
MOZ_ASSERT(aDirectory);
|
||||
|
||||
nsCOMPtr<nsISimpleEnumerator> entries;
|
||||
nsresult rv = aDirectory->GetDirectoryEntries(getter_AddRefs(entries));
|
||||
|
@ -18286,7 +18295,7 @@ QuotaClient::GetDatabaseFilenames(
|
|||
bool hasMore;
|
||||
while (NS_SUCCEEDED((rv = entries->HasMoreElements(&hasMore))) &&
|
||||
hasMore &&
|
||||
(!aUsageInfo || !aUsageInfo->Canceled())) {
|
||||
!aCanceled) {
|
||||
nsCOMPtr<nsISupports> entry;
|
||||
rv = entries->GetNext(getter_AddRefs(entry));
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
|
@ -18362,6 +18371,7 @@ QuotaClient::GetDatabaseFilenames(
|
|||
|
||||
nsresult
|
||||
QuotaClient::GetUsageForDirectoryInternal(nsIFile* aDirectory,
|
||||
const AtomicBool& aCanceled,
|
||||
UsageInfo* aUsageInfo,
|
||||
bool aDatabaseFiles)
|
||||
{
|
||||
|
@ -18388,7 +18398,7 @@ QuotaClient::GetUsageForDirectoryInternal(nsIFile* aDirectory,
|
|||
bool hasMore;
|
||||
while (NS_SUCCEEDED((rv = entries->HasMoreElements(&hasMore))) &&
|
||||
hasMore &&
|
||||
!aUsageInfo->Canceled()) {
|
||||
!aCanceled) {
|
||||
nsCOMPtr<nsISupports> entry;
|
||||
rv = entries->GetNext(getter_AddRefs(entry));
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
|
@ -18423,7 +18433,7 @@ QuotaClient::GetUsageForDirectoryInternal(nsIFile* aDirectory,
|
|||
|
||||
if (isDirectory) {
|
||||
if (aDatabaseFiles) {
|
||||
rv = GetUsageForDirectoryInternal(file, aUsageInfo, false);
|
||||
rv = GetUsageForDirectoryInternal(file, aCanceled, aUsageInfo, false);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
|
|
|
@ -915,6 +915,7 @@ class NormalOriginOperationBase
|
|||
protected:
|
||||
Nullable<PersistenceType> mPersistenceType;
|
||||
OriginScope mOriginScope;
|
||||
mozilla::Atomic<bool> mCanceled;
|
||||
const bool mExclusive;
|
||||
|
||||
public:
|
||||
|
@ -4196,7 +4197,11 @@ QuotaManager::InitializeOrigin(PersistenceType aPersistenceType,
|
|||
return NS_ERROR_UNEXPECTED;
|
||||
}
|
||||
|
||||
rv = mClients[clientType]->InitOrigin(aPersistenceType, aGroup, aOrigin,
|
||||
Atomic<bool> dummy(false);
|
||||
rv = mClients[clientType]->InitOrigin(aPersistenceType,
|
||||
aGroup,
|
||||
aOrigin,
|
||||
/* aCanceled */ dummy,
|
||||
usageInfo);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
}
|
||||
|
@ -6484,7 +6489,7 @@ GetOriginUsageOp::AddToUsage(QuotaManager* aQuotaManager,
|
|||
|
||||
// If the directory exists then enumerate all the files inside, adding up
|
||||
// the sizes to get the final usage statistic.
|
||||
if (exists && !mUsageInfo.Canceled()) {
|
||||
if (exists && !mCanceled) {
|
||||
bool initialized;
|
||||
|
||||
if (aPersistenceType == PERSISTENCE_TYPE_PERSISTENT) {
|
||||
|
@ -6500,7 +6505,7 @@ GetOriginUsageOp::AddToUsage(QuotaManager* aQuotaManager,
|
|||
|
||||
bool hasMore;
|
||||
while (NS_SUCCEEDED((rv = entries->HasMoreElements(&hasMore))) &&
|
||||
hasMore && !mUsageInfo.Canceled()) {
|
||||
hasMore && !mCanceled) {
|
||||
nsCOMPtr<nsISupports> entry;
|
||||
rv = entries->GetNext(getter_AddRefs(entry));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
@ -6564,12 +6569,14 @@ GetOriginUsageOp::AddToUsage(QuotaManager* aQuotaManager,
|
|||
rv = client->GetUsageForOrigin(aPersistenceType,
|
||||
mGroup,
|
||||
mOriginScope.GetOrigin(),
|
||||
mCanceled,
|
||||
&mUsageInfo);
|
||||
}
|
||||
else {
|
||||
rv = client->InitOrigin(aPersistenceType,
|
||||
mGroup,
|
||||
mOriginScope.GetOrigin(),
|
||||
mCanceled,
|
||||
&mUsageInfo);
|
||||
}
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
@ -6630,7 +6637,7 @@ GetOriginUsageOp::SendResults()
|
|||
mResultCode = NS_ERROR_FAILURE;
|
||||
}
|
||||
} else {
|
||||
if (mUsageInfo.Canceled()) {
|
||||
if (mCanceled) {
|
||||
mResultCode = NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
|
@ -6671,8 +6678,8 @@ GetOriginUsageOp::RecvCancel()
|
|||
{
|
||||
AssertIsOnOwningThread();
|
||||
|
||||
nsresult rv = mUsageInfo.Cancel();
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
if (mCanceled.exchange(true)) {
|
||||
NS_WARNING("Canceled more than once?!");
|
||||
return IPC_FAIL_NO_REASON(this);
|
||||
}
|
||||
|
||||
|
|
|
@ -31,6 +31,8 @@ class UsageInfo;
|
|||
class Client
|
||||
{
|
||||
public:
|
||||
typedef mozilla::Atomic<bool> AtomicBool;
|
||||
|
||||
NS_INLINE_DECL_PURE_VIRTUAL_REFCOUNTING
|
||||
|
||||
enum Type {
|
||||
|
@ -100,12 +102,14 @@ public:
|
|||
InitOrigin(PersistenceType aPersistenceType,
|
||||
const nsACString& aGroup,
|
||||
const nsACString& aOrigin,
|
||||
const AtomicBool& aCanceled,
|
||||
UsageInfo* aUsageInfo) = 0;
|
||||
|
||||
virtual nsresult
|
||||
GetUsageForOrigin(PersistenceType aPersistenceType,
|
||||
const nsACString& aGroup,
|
||||
const nsACString& aOrigin,
|
||||
const AtomicBool& aCanceled,
|
||||
UsageInfo* aUsageInfo) = 0;
|
||||
|
||||
virtual void
|
||||
|
|
|
@ -18,28 +18,14 @@ class UsageInfo
|
|||
{
|
||||
public:
|
||||
UsageInfo()
|
||||
: mCanceled(false), mDatabaseUsage(0), mFileUsage(0), mLimit(0)
|
||||
: mDatabaseUsage(0)
|
||||
, mFileUsage(0)
|
||||
, mLimit(0)
|
||||
{ }
|
||||
|
||||
virtual ~UsageInfo()
|
||||
{ }
|
||||
|
||||
bool
|
||||
Canceled()
|
||||
{
|
||||
return mCanceled;
|
||||
}
|
||||
|
||||
nsresult
|
||||
Cancel()
|
||||
{
|
||||
if (mCanceled.exchange(true)) {
|
||||
NS_WARNING("Canceled more than once?!");
|
||||
return NS_ERROR_UNEXPECTED;
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
void
|
||||
AppendToDatabaseUsage(uint64_t aUsage)
|
||||
{
|
||||
|
@ -104,9 +90,6 @@ public:
|
|||
}
|
||||
}
|
||||
|
||||
protected:
|
||||
mozilla::Atomic<bool> mCanceled;
|
||||
|
||||
private:
|
||||
uint64_t mDatabaseUsage;
|
||||
uint64_t mFileUsage;
|
||||
|
|
Загрузка…
Ссылка в новой задаче