LibWeb: Evict replaced Resource objects from cache

When a Resource is converted to an ImageResource, evict the original
resource from cache. The original resource's data has been moved, so on
a warm reload of a page, when that resource is loaded from cache, it
would not have any data to actually show.
This commit is contained in:
Timothy Flynn 2022-03-23 14:00:01 -04:00 committed by Andreas Kling
parent 004f69b535
commit 20eb441cba
Notes: sideshowbarker 2024-07-17 16:51:34 +09:00
3 changed files with 9 additions and 0 deletions

View file

@ -11,6 +11,7 @@
#include <LibTextCodec/Decoder.h>
#include <LibWeb/HTML/HTMLImageElement.h>
#include <LibWeb/Loader/Resource.h>
#include <LibWeb/Loader/ResourceLoader.h>
namespace Web {
@ -39,6 +40,7 @@ Resource::Resource(Type type, Resource& resource)
, m_response_headers(move(resource.m_response_headers))
, m_status_code(move(resource.m_status_code))
{
ResourceLoader::the().evict_from_cache(m_request);
}
Resource::~Resource() = default;

View file

@ -280,4 +280,10 @@ void ResourceLoader::clear_cache()
s_resource_cache.clear();
}
void ResourceLoader::evict_from_cache(LoadRequest const& request)
{
dbgln_if(CACHE_DEBUG, "Removing resource {} from cache", request.url());
s_resource_cache.remove(request);
}
}

View file

@ -50,6 +50,7 @@ public:
void set_user_agent(const String& user_agent) { m_user_agent = user_agent; }
void clear_cache();
void evict_from_cache(LoadRequest const&);
private:
ResourceLoader(NonnullRefPtr<Protocol::RequestClient> protocol_client);