#ifndef CONTENT_BROWSER_STORAGE_PARTITION_IMPL_MAP_H_
#define CONTENT_BROWSER_STORAGE_PARTITION_IMPL_MAP_H_
#include <map>
#include <memory>
#include <string>
#include <unordered_set>
#include "base/functional/callback_forward.h"
#include "base/gtest_prod_util.h"
#include "base/memory/raw_ptr.h"
#include "base/supports_user_data.h"
#include "content/browser/storage_partition_impl.h"
#include "content/common/content_export.h"
#include "content/public/browser/browser_context.h"
#include "content/public/browser/storage_partition_config.h"
namespace base {
class FilePath;
class SequencedTaskRunner;
}
namespace content {
class BrowserContext;
class CONTENT_EXPORT StoragePartitionImplMap
: public base::SupportsUserData::Data {
public:
explicit StoragePartitionImplMap(BrowserContext* browser_context);
StoragePartitionImplMap(const StoragePartitionImplMap&) = delete;
StoragePartitionImplMap& operator=(const StoragePartitionImplMap&) = delete;
~StoragePartitionImplMap() override;
StoragePartitionImpl* Get(const StoragePartitionConfig& partition_config,
bool can_create);
void AsyncObliterate(const std::string& partition_domain,
base::OnceClosure on_gc_required,
base::OnceClosure done_callback);
void GarbageCollect(std::unordered_set<base::FilePath> active_paths,
base::OnceClosure done);
void ForEach(BrowserContext::StoragePartitionCallback callback);
size_t size() const { return partitions_.size(); }
private:
FRIEND_TEST_ALL_PREFIXES(StoragePartitionConfigTest, OperatorLess);
FRIEND_TEST_ALL_PREFIXES(StoragePartitionImplMapTest, GarbageCollect);
typedef std::map<StoragePartitionConfig,
std::unique_ptr<StoragePartitionImpl>>
PartitionMap;
static base::FilePath GetStoragePartitionPath(
const std::string& partition_domain,
const std::string& partition_name);
void PostCreateInitialization(StoragePartitionImpl* partition,
bool in_memory);
raw_ptr<BrowserContext> browser_context_;
scoped_refptr<base::SequencedTaskRunner> file_access_runner_;
PartitionMap partitions_;
bool resource_context_initialized_;
};
}
#endif