mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-12-08 06:09:58 +00:00
We previously waited until we received all response headers before we would create the cache entry. We now create one immediately, and handle writing the headers in its own function. This will allow us to know if a cache entry writer already exists for a given cache key, and thus prevent creating a second writer at the same time.
45 lines
1.1 KiB
C++
45 lines
1.1 KiB
C++
/*
|
|
* Copyright (c) 2025, Tim Flynn <trflynn89@ladybird.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <AK/Error.h>
|
|
#include <AK/LexicalPath.h>
|
|
#include <AK/Optional.h>
|
|
#include <AK/StringView.h>
|
|
#include <AK/Time.h>
|
|
#include <AK/Types.h>
|
|
#include <LibDatabase/Database.h>
|
|
#include <LibURL/Forward.h>
|
|
#include <RequestServer/Cache/CacheEntry.h>
|
|
#include <RequestServer/Cache/CacheIndex.h>
|
|
|
|
namespace RequestServer {
|
|
|
|
class DiskCache {
|
|
public:
|
|
static ErrorOr<DiskCache> create();
|
|
|
|
Optional<CacheEntryWriter&> create_entry(URL::URL const&, StringView method, UnixDateTime request_time);
|
|
Optional<CacheEntryReader&> open_entry(URL::URL const&, StringView method);
|
|
void clear_cache();
|
|
|
|
LexicalPath const& cache_directory() { return m_cache_directory; }
|
|
|
|
void cache_entry_closed(Badge<CacheEntry>, CacheEntry const&);
|
|
|
|
private:
|
|
DiskCache(NonnullRefPtr<Database::Database>, LexicalPath cache_directory, CacheIndex);
|
|
|
|
NonnullRefPtr<Database::Database> m_database;
|
|
|
|
HashMap<FlatPtr, NonnullOwnPtr<CacheEntry>> m_open_cache_entries;
|
|
|
|
LexicalPath m_cache_directory;
|
|
CacheIndex m_index;
|
|
};
|
|
|
|
}
|