blob: fd5aa0de09552912b24bbfaacd4443ab3411373d [file] [log] [blame]
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef STORAGE_BROWSER_QUOTA_STORAGE_DIRECTORY_H_
#define STORAGE_BROWSER_QUOTA_STORAGE_DIRECTORY_H_
#include <set>
#include "base/component_export.h"
#include "base/files/file_path.h"
#include "components/services/storage/public/cpp/buckets/bucket_locator.h"
namespace storage {
// Interface for handling the WebStorage directory for a profile where
// Storage Buckets data is stored.
class COMPONENT_EXPORT(STORAGE_BROWSER) StorageDirectory {
public:
explicit StorageDirectory(const base::FilePath& profile_path);
StorageDirectory(const StorageDirectory&) = delete;
StorageDirectory& operator=(const StorageDirectory&) = delete;
~StorageDirectory();
// Creates storage directory and returns true if creation succeeds or
// directory already exists.
bool Create();
// Marks the current storage directory for deletion and returns true on
// success.
bool Doom();
// Deletes doomed storage directories.
void ClearDoomed();
// Create storage directory for `bucket` under `web_storage_path_`. Returns
// true if creation succeeds or directory already exists.
bool CreateBucket(const BucketLocator& bucket);
// Finds and marks the storage directory for `bucket` and marks it for
// deletion. Returns true on success.
bool DoomBucket(const BucketLocator& bucket);
// Deletes doomed bucket directories found under `web_storage_path_`.
void ClearDoomedBuckets();
// Returns path where WebStorage data is persisted to disk. Returns empty path
// for incognito.
const base::FilePath& path() const { return web_storage_path_; }
std::set<base::FilePath> EnumerateDoomedDirectoriesForTesting() {
return EnumerateDoomedDirectories();
}
std::set<base::FilePath> EnumerateDoomedBucketsForTesting() {
return EnumerateDoomedBuckets();
}
private:
std::set<base::FilePath> EnumerateDoomedDirectories();
std::set<base::FilePath> EnumerateDoomedBuckets();
bool DoomPath(const base::FilePath& path);
const base::FilePath web_storage_path_;
};
} // namespace storage
#endif // STORAGE_BROWSER_QUOTA_STORAGE_DIRECTORY_H_