#ifndef CONTENT_PUBLIC_BROWSER_STORAGE_PARTITION_H_
#define CONTENT_PUBLIC_BROWSER_STORAGE_PARTITION_H_
#include <stdint.h>
#include <set>
#include "base/functional/callback_forward.h"
#include "base/observer_list_types.h"
#include "base/time/time.h"
#include "build/build_config.h"
#include "components/services/storage/privileged/mojom/indexed_db_control.mojom-forward.h"
#include "components/services/storage/public/mojom/cache_storage_control.mojom-forward.h"
#include "components/services/storage/public/mojom/local_storage_control.mojom-forward.h"
#include "content/common/content_export.h"
#include "media/media_buildflags.h"
#include "services/network/public/cpp/shared_url_loader_factory.h"
#include "services/network/public/mojom/cert_verifier_service_updater.mojom-forward.h"
#include "services/network/public/mojom/cookie_manager.mojom-forward.h"
#include "services/network/public/mojom/restricted_cookie_manager.mojom-forward.h"
#include "services/network/public/mojom/trust_tokens.mojom-forward.h"
class GURL;
namespace base {
class FilePath;
class Time;
}
namespace blink {
class StorageKey;
}
namespace storage {
class FileSystemContext;
}
namespace leveldb_proto {
class ProtoDatabaseProvider;
}
namespace network {
namespace mojom {
class CookieManager;
class NetworkContext;
class URLLoaderNetworkServiceObserver;
class DeviceBoundSessionManager;
}
}
namespace storage {
class QuotaManager;
struct QuotaSettings;
class SharedStorageManager;
class SpecialStoragePolicy;
}
namespace url {
class Origin;
}
namespace content {
class AttributionDataModel;
class BackgroundSyncContext;
class BrowserContext;
class BrowsingDataFilterBuilder;
class BrowsingTopicsSiteDataManager;
class CdmStorageDataModel;
class ContentIndexContext;
class DedicatedWorkerService;
class DevToolsBackgroundServicesContext;
class DOMStorageContext;
class FileSystemAccessEntryFactory;
class GeneratedCodeCacheContext;
class HostZoomLevelContext;
class HostZoomMap;
class InterestGroupManager;
class PlatformNotificationContext;
class PrivateAggregationDataModel;
class ServiceWorkerContext;
class SharedWorkerService;
class StoragePartitionConfig;
class ZoomLevelDelegate;
class NavigationRequest;
class CONTENT_EXPORT StoragePartition {
public:
virtual const StoragePartitionConfig& GetConfig() const = 0;
virtual const base::FilePath& GetPath() const = 0;
virtual network::mojom::NetworkContext* GetNetworkContext() = 0;
virtual cert_verifier::mojom::CertVerifierServiceUpdater*
GetCertVerifierServiceUpdater() = 0;
virtual storage::SharedStorageManager* GetSharedStorageManager() = 0;
virtual scoped_refptr<network::SharedURLLoaderFactory>
GetURLLoaderFactoryForBrowserProcess() = 0;
virtual std::unique_ptr<network::PendingSharedURLLoaderFactory>
GetURLLoaderFactoryForBrowserProcessIOThread() = 0;
virtual network::mojom::CookieManager*
GetCookieManagerForBrowserProcess() = 0;
virtual void CreateTrustTokenQueryAnswerer(
mojo::PendingReceiver<network::mojom::TrustTokenQueryAnswerer> receiver,
const url::Origin& top_frame_origin) = 0;
virtual mojo::PendingRemote<network::mojom::URLLoaderNetworkServiceObserver>
CreateURLLoaderNetworkObserverForFrame(int process_id,
int frame_routing_id) = 0;
virtual mojo::PendingRemote<network::mojom::URLLoaderNetworkServiceObserver>
CreateURLLoaderNetworkObserverForNavigationRequest(
NavigationRequest& navigation_request) = 0;
virtual storage::QuotaManager* GetQuotaManager() = 0;
virtual BackgroundSyncContext* GetBackgroundSyncContext() = 0;
virtual storage::FileSystemContext* GetFileSystemContext() = 0;
virtual DOMStorageContext* GetDOMStorageContext() = 0;
virtual storage::mojom::LocalStorageControl* GetLocalStorageControl() = 0;
virtual storage::mojom::IndexedDBControl& GetIndexedDBControl() = 0;
virtual FileSystemAccessEntryFactory* GetFileSystemAccessEntryFactory() = 0;
virtual ServiceWorkerContext* GetServiceWorkerContext() = 0;
virtual DedicatedWorkerService* GetDedicatedWorkerService() = 0;
virtual SharedWorkerService* GetSharedWorkerService() = 0;
virtual storage::mojom::CacheStorageControl* GetCacheStorageControl() = 0;
virtual GeneratedCodeCacheContext* GetGeneratedCodeCacheContext() = 0;
virtual DevToolsBackgroundServicesContext*
GetDevToolsBackgroundServicesContext() = 0;
virtual ContentIndexContext* GetContentIndexContext() = 0;
virtual HostZoomMap* GetHostZoomMap() = 0;
virtual HostZoomLevelContext* GetHostZoomLevelContext() = 0;
virtual ZoomLevelDelegate* GetZoomLevelDelegate() = 0;
virtual PlatformNotificationContext* GetPlatformNotificationContext() = 0;
virtual InterestGroupManager* GetInterestGroupManager() = 0;
virtual BrowsingTopicsSiteDataManager* GetBrowsingTopicsSiteDataManager() = 0;
virtual AttributionDataModel* GetAttributionDataModel() = 0;
virtual PrivateAggregationDataModel* GetPrivateAggregationDataModel() = 0;
#if BUILDFLAG(ENABLE_LIBRARY_CDMS)
virtual CdmStorageDataModel* GetCdmStorageDataModel() = 0;
#endif
virtual network::mojom::DeviceBoundSessionManager*
GetDeviceBoundSessionManager() = 0;
virtual void DeleteStaleSessionData() = 0;
virtual leveldb_proto::ProtoDatabaseProvider* GetProtoDatabaseProvider() = 0;
virtual void SetProtoDatabaseProvider(
std::unique_ptr<leveldb_proto::ProtoDatabaseProvider>
optional_proto_db_provider) = 0;
enum : uint32_t {
REMOVE_DATA_MASK_APPCACHE_DEPRECATED = 1 << 0,
REMOVE_DATA_MASK_COOKIES = 1 << 1,
REMOVE_DATA_MASK_FILE_SYSTEMS = 1 << 2,
REMOVE_DATA_MASK_INDEXEDDB = 1 << 3,
REMOVE_DATA_MASK_LOCAL_STORAGE = 1 << 4,
REMOVE_DATA_MASK_SHADER_CACHE = 1 << 5,
REMOVE_DATA_MASK_WEBSQL_DEPRECATED = 1 << 6,
REMOVE_DATA_MASK_SERVICE_WORKERS = 1 << 7,
REMOVE_DATA_MASK_CACHE_STORAGE = 1 << 8,
REMOVE_DATA_MASK_MEDIA_LICENSES = 1 << 9,
REMOVE_DATA_MASK_BACKGROUND_FETCH = 1 << 10,
REMOVE_DATA_MASK_ATTRIBUTION_REPORTING_SITE_CREATED = 1 << 11,
REMOVE_DATA_MASK_INTEREST_GROUPS = 1 << 12,
REMOVE_DATA_MASK_AGGREGATION_SERVICE = 1 << 13,
REMOVE_DATA_MASK_SHARED_STORAGE = 1 << 14,
REMOVE_DATA_MASK_INTEREST_GROUP_PERMISSIONS_CACHE = 1 << 15,
REMOVE_DATA_MASK_ATTRIBUTION_REPORTING_INTERNAL = 1 << 16,
REMOVE_DATA_MASK_PRIVATE_AGGREGATION_INTERNAL = 1 << 17,
REMOVE_DATA_MASK_INTEREST_GROUPS_INTERNAL = 1 << 18,
REMOVE_DATA_MASK_DEVICE_BOUND_SESSIONS = 1 << 19,
REMOVE_DATA_MASK_INTEREST_GROUPS_USER_CLEAR = 1 << 20,
REMOVE_KEEPALIVE_LOADS_ATTEMPTING_RETRY = 1 << 21,
REMOVE_DATA_MASK_ALL = 0xFFFFFFFF,
QUOTA_MANAGED_STORAGE_MASK_TEMPORARY = 1 << 0,
QUOTA_MANAGED_STORAGE_MASK_ALL = 0xFFFFFFFF,
};
virtual void ClearDataForOrigin(uint32_t remove_mask,
uint32_t quota_storage_remove_mask,
const GURL& storage_origin,
base::OnceClosure callback) = 0;
virtual void ClearDataForBuckets(const blink::StorageKey& storage_key,
const std::set<std::string>& storage_buckets,
base::OnceClosure callback) = 0;
using StorageKeyPolicyMatcherFunction =
base::RepeatingCallback<bool(const blink::StorageKey&,
storage::SpecialStoragePolicy*)>;
using StorageKeyMatcherFunction =
base::RepeatingCallback<bool(const blink::StorageKey&)>;
class DataRemovalObserver : public base::CheckedObserver {
public:
virtual void OnStorageKeyDataCleared(
uint32_t remove_mask,
StorageKeyMatcherFunction storage_key_policy_matcher,
const base::Time begin,
const base::Time end) = 0;
};
virtual void ClearData(uint32_t remove_mask,
uint32_t quota_storage_remove_mask,
const blink::StorageKey& storage_key,
const base::Time begin,
const base::Time end,
base::OnceClosure callback) = 0;
virtual void ClearData(
uint32_t remove_mask,
uint32_t quota_storage_remove_mask,
BrowsingDataFilterBuilder* filter_builder,
StorageKeyPolicyMatcherFunction storage_key_policy_matcher,
network::mojom::CookieDeletionFilterPtr cookie_deletion_filter,
bool perform_storage_cleanup,
const base::Time begin,
const base::Time end,
base::OnceClosure callback) = 0;
virtual void ClearCodeCaches(
base::Time begin,
base::Time end,
const base::RepeatingCallback<bool(const GURL&)>& url_matcher,
base::OnceClosure callback) = 0;
virtual void Flush() = 0;
virtual void ResetURLLoaderFactories() = 0;
virtual void AddObserver(DataRemovalObserver* observer) = 0;
virtual void RemoveObserver(DataRemovalObserver* observer) = 0;
virtual void ClearBluetoothAllowedDevicesMapForTesting() = 0;
virtual void FlushNetworkInterfaceForTesting() = 0;
virtual void FlushCertVerifierInterfaceForTesting() = 0;
virtual void WaitForDeletionTasksForTesting() = 0;
virtual void SetNetworkContextForTesting(
mojo::PendingRemote<network::mojom::NetworkContext>
network_context_remote) = 0;
virtual leveldb_proto::ProtoDatabaseProvider*
GetProtoDatabaseProviderForTesting() = 0;
static void SetDefaultQuotaSettingsForTesting(
const storage::QuotaSettings* settings);
virtual void OverrideDeleteStaleSessionOnlyCookiesDelayForTesting(
const base::TimeDelta& delay) = 0;
protected:
virtual ~StoragePartition() {}
};
}
#endif