#include "content/browser/cache_storage/cache_storage_cache_entry_handler.h"
#include <optional>
#include "base/functional/callback_helpers.h"
#include "base/memory/raw_ptr.h"
#include "base/uuid.h"
#include "components/services/storage/public/mojom/blob_storage_context.mojom.h"
#include "content/browser/cache_storage/background_fetch_cache_entry_handler_impl.h"
#include "content/browser/cache_storage/cache_storage.h"
#include "content/browser/cache_storage/cache_storage_manager.h"
#include "content/public/browser/browser_thread.h"
#include "mojo/public/cpp/bindings/self_owned_receiver.h"
#include "net/filter/source_stream.h"
#include "services/network/public/cpp/source_stream_to_data_pipe.h"
#include "storage/browser/blob/blob_data_builder.h"
#include "storage/browser/blob/blob_impl.h"
#include "storage/browser/blob/blob_storage_context.h"
#include "third_party/blink/public/common/blob/blob_utils.h"
namespace content {
namespace {
class DiskCacheStream : public net::SourceStream { … };
class EntryReaderImpl : public storage::mojom::BlobDataItemReader { … };
}
CacheStorageCacheEntryHandler::DiskCacheBlobEntry::DiskCacheBlobEntry(
base::PassKey<CacheStorageCacheEntryHandler> key,
base::WeakPtr<CacheStorageCacheEntryHandler> entry_handler,
CacheStorageCacheHandle cache_handle,
disk_cache::ScopedEntryPtr disk_cache_entry)
: … { … }
int CacheStorageCacheEntryHandler::DiskCacheBlobEntry::Read(
scoped_refptr<net::IOBuffer> dst_buffer,
CacheStorageCache::EntryIndex disk_cache_index,
uint64_t offset,
int bytes_to_read,
base::OnceCallback<void(int)> callback) { … }
int CacheStorageCacheEntryHandler::DiskCacheBlobEntry::GetSize(
CacheStorageCache::EntryIndex disk_cache_index) const { … }
void CacheStorageCacheEntryHandler::DiskCacheBlobEntry::Invalidate() { … }
disk_cache::ScopedEntryPtr&
CacheStorageCacheEntryHandler::DiskCacheBlobEntry::disk_cache_entry() { … }
CacheStorageCacheEntryHandler::DiskCacheBlobEntry::~DiskCacheBlobEntry() { … }
PutContext::PutContext(blink::mojom::FetchAPIRequestPtr request,
blink::mojom::FetchAPIResponsePtr response,
mojo::PendingRemote<blink::mojom::Blob> blob,
uint64_t blob_size,
mojo::PendingRemote<blink::mojom::Blob> side_data_blob,
uint64_t side_data_blob_size,
int64_t trace_id)
: … { … }
PutContext::~PutContext() = default;
class CacheStorageCacheEntryHandlerImpl : public CacheStorageCacheEntryHandler { … };
CacheStorageCacheEntryHandler::CacheStorageCacheEntryHandler(
scoped_refptr<BlobStorageContextWrapper> blob_storage_context)
: … { … }
scoped_refptr<CacheStorageCacheEntryHandler::DiskCacheBlobEntry>
CacheStorageCacheEntryHandler::CreateDiskCacheBlobEntry(
CacheStorageCacheHandle cache_handle,
disk_cache::ScopedEntryPtr disk_cache_entry) { … }
CacheStorageCacheEntryHandler::~CacheStorageCacheEntryHandler() = default;
void CacheStorageCacheEntryHandler::InvalidateDiskCacheBlobEntrys() { … }
void CacheStorageCacheEntryHandler::EraseDiskCacheBlobEntry(
DiskCacheBlobEntry* blob_entry) { … }
std::unique_ptr<CacheStorageCacheEntryHandler>
CacheStorageCacheEntryHandler::CreateCacheEntryHandler(
storage::mojom::CacheStorageOwner owner,
scoped_refptr<BlobStorageContextWrapper> blob_storage_context) { … }
blink::mojom::SerializedBlobPtr CacheStorageCacheEntryHandler::CreateBlob(
scoped_refptr<DiskCacheBlobEntry> blob_entry,
CacheStorageCache::EntryIndex disk_cache_index) { … }
blink::mojom::SerializedBlobPtr
CacheStorageCacheEntryHandler::CreateBlobWithSideData(
scoped_refptr<DiskCacheBlobEntry> blob_entry,
CacheStorageCache::EntryIndex disk_cache_index,
CacheStorageCache::EntryIndex side_data_disk_cache_index) { … }
}