mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-21 01:05:45 +00:00
9f906cd7c4
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
122 lines
4.2 KiB
C++
122 lines
4.2 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_filestreams_h__
|
|
#define mozilla_dom_quota_filestreams_h__
|
|
|
|
#include "QuotaCommon.h"
|
|
|
|
#include "nsFileStreams.h"
|
|
|
|
#include "PersistenceType.h"
|
|
#include "QuotaObject.h"
|
|
|
|
BEGIN_QUOTA_NAMESPACE
|
|
|
|
template <class FileStreamBase>
|
|
class FileQuotaStream : public FileStreamBase {
|
|
public:
|
|
// nsFileStreamBase override
|
|
NS_IMETHOD
|
|
SetEOF() override;
|
|
|
|
NS_IMETHOD
|
|
Close() override;
|
|
|
|
protected:
|
|
FileQuotaStream(PersistenceType aPersistenceType, const nsACString& aGroup,
|
|
const nsACString& aOrigin, Client::Type aClientType)
|
|
: mPersistenceType(aPersistenceType),
|
|
mGroup(aGroup),
|
|
mOrigin(aOrigin),
|
|
mClientType(aClientType) {}
|
|
|
|
// nsFileStreamBase override
|
|
virtual nsresult DoOpen() override;
|
|
|
|
PersistenceType mPersistenceType;
|
|
nsCString mGroup;
|
|
nsCString mOrigin;
|
|
Client::Type mClientType;
|
|
RefPtr<QuotaObject> mQuotaObject;
|
|
};
|
|
|
|
template <class FileStreamBase>
|
|
class FileQuotaStreamWithWrite : public FileQuotaStream<FileStreamBase> {
|
|
public:
|
|
// nsFileStreamBase override
|
|
NS_IMETHOD
|
|
Write(const char* aBuf, uint32_t aCount, uint32_t* _retval) override;
|
|
|
|
protected:
|
|
FileQuotaStreamWithWrite(PersistenceType aPersistenceType,
|
|
const nsACString& aGroup, const nsACString& aOrigin,
|
|
Client::Type aClientType)
|
|
: FileQuotaStream<FileStreamBase>(aPersistenceType, aGroup, aOrigin,
|
|
aClientType) {}
|
|
};
|
|
|
|
class FileInputStream : public FileQuotaStream<nsFileInputStream> {
|
|
public:
|
|
NS_INLINE_DECL_REFCOUNTING_INHERITED(FileInputStream,
|
|
FileQuotaStream<nsFileInputStream>)
|
|
|
|
FileInputStream(PersistenceType aPersistenceType, const nsACString& aGroup,
|
|
const nsACString& aOrigin, Client::Type aClientType)
|
|
: FileQuotaStream<nsFileInputStream>(aPersistenceType, aGroup, aOrigin,
|
|
aClientType) {}
|
|
|
|
private:
|
|
virtual ~FileInputStream() { Close(); }
|
|
};
|
|
|
|
class FileOutputStream : public FileQuotaStreamWithWrite<nsFileOutputStream> {
|
|
public:
|
|
NS_INLINE_DECL_REFCOUNTING_INHERITED(
|
|
FileOutputStream, FileQuotaStreamWithWrite<nsFileOutputStream>);
|
|
|
|
FileOutputStream(PersistenceType aPersistenceType, const nsACString& aGroup,
|
|
const nsACString& aOrigin, Client::Type aClientType)
|
|
: FileQuotaStreamWithWrite<nsFileOutputStream>(aPersistenceType, aGroup,
|
|
aOrigin, aClientType) {}
|
|
|
|
private:
|
|
virtual ~FileOutputStream() { Close(); }
|
|
};
|
|
|
|
class FileStream : public FileQuotaStreamWithWrite<nsFileStream> {
|
|
public:
|
|
NS_INLINE_DECL_REFCOUNTING_INHERITED(FileStream,
|
|
FileQuotaStreamWithWrite<nsFileStream>)
|
|
|
|
FileStream(PersistenceType aPersistenceType, const nsACString& aGroup,
|
|
const nsACString& aOrigin, Client::Type aClientType)
|
|
: FileQuotaStreamWithWrite<nsFileStream>(aPersistenceType, aGroup,
|
|
aOrigin, aClientType) {}
|
|
|
|
private:
|
|
virtual ~FileStream() { Close(); }
|
|
};
|
|
|
|
already_AddRefed<FileInputStream> CreateFileInputStream(
|
|
PersistenceType aPersistenceType, const nsACString& aGroup,
|
|
const nsACString& aOrigin, Client::Type aClientType, nsIFile* aFile,
|
|
int32_t aIOFlags = -1, int32_t aPerm = -1, int32_t aBehaviorFlags = 0);
|
|
|
|
already_AddRefed<FileOutputStream> CreateFileOutputStream(
|
|
PersistenceType aPersistenceType, const nsACString& aGroup,
|
|
const nsACString& aOrigin, Client::Type aClientType, nsIFile* aFile,
|
|
int32_t aIOFlags = -1, int32_t aPerm = -1, int32_t aBehaviorFlags = 0);
|
|
|
|
already_AddRefed<FileStream> CreateFileStream(
|
|
PersistenceType aPersistenceType, const nsACString& aGroup,
|
|
const nsACString& aOrigin, Client::Type aClientType, nsIFile* aFile,
|
|
int32_t aIOFlags = -1, int32_t aPerm = -1, int32_t aBehaviorFlags = 0);
|
|
|
|
END_QUOTA_NAMESPACE
|
|
|
|
#endif /* mozilla_dom_quota_filestreams_h__ */
|