blob: 43ced3ebb68b2e689be65690dd310a1d5664b82b [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.
#include "third_party/blink/renderer/core/css/style_image_cache.h"
#include "third_party/blink/renderer/core/loader/resource/image_resource_content.h"
#include "third_party/blink/renderer/platform/loader/fetch/fetch_parameters.h"
#include "third_party/blink/renderer/platform/loader/fetch/memory_cache.h"
namespace blink {
namespace {
bool CanReuseImageContent(const ImageResourceContent& image_content) {
if (image_content.ErrorOccurred()) {
return false;
}
return true;
}
} // namespace
ImageResourceContent* StyleImageCache::CacheImageContent(
ResourceFetcher* fetcher,
FetchParameters& params) {
CHECK(!params.Url().IsNull());
const KURL url_without_fragment =
MemoryCache::RemoveFragmentIdentifierIfNeeded(params.Url());
auto& image_content =
fetched_image_map_.insert(url_without_fragment.GetString(), nullptr)
.stored_value->value;
if (!image_content || !CanReuseImageContent(*image_content)) {
image_content = ImageResourceContent::Fetch(params, fetcher);
}
return image_content.Get();
}
void StyleImageCache::Trace(Visitor* visitor) const {
visitor->Trace(fetched_image_map_);
}
} // namespace blink