| // Copyright 2017 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_LOADER_FETCH_PRELOAD_KEY_H_ |
| #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_LOADER_FETCH_PRELOAD_KEY_H_ |
| |
| #include "third_party/blink/renderer/platform/loader/fetch/resource.h" |
| #include "third_party/blink/renderer/platform/weborigin/kurl.h" |
| #include "third_party/blink/renderer/platform/weborigin/kurl_hash.h" |
| #include "third_party/blink/renderer/platform/wtf/hash_traits.h" |
| |
| namespace blink { |
| |
| // PreloadKey is a key type of the preloads map in a fetch group (a.k.a. |
| // blink::ResourceFetcher). |
| struct PreloadKey final { |
| public: |
| struct Hash { |
| STATIC_ONLY(Hash); |
| |
| public: |
| static unsigned GetHash(const PreloadKey& key) { |
| return KURLHash::GetHash(key.url); |
| } |
| static bool Equal(const PreloadKey& x, const PreloadKey& y) { |
| return x == y; |
| } |
| static constexpr bool safe_to_compare_to_empty_or_deleted = false; |
| }; |
| |
| PreloadKey() = default; |
| PreloadKey(const KURL& url, ResourceType type) |
| : url(RemoveFragmentFromUrl(url)), type(type) {} |
| |
| bool operator==(const PreloadKey& x) const { |
| return url == x.url && type == x.type; |
| } |
| |
| static KURL RemoveFragmentFromUrl(const KURL& src) { |
| if (!src.HasFragmentIdentifier()) |
| return src; |
| KURL url = src; |
| url.RemoveFragmentIdentifier(); |
| return url; |
| } |
| |
| KURL url; |
| ResourceType type = ResourceType::kImage; |
| }; |
| |
| } // namespace blink |
| |
| namespace WTF { |
| |
| template <> |
| struct DefaultHash<blink::PreloadKey> { |
| using Hash = blink::PreloadKey::Hash; |
| }; |
| |
| template <> |
| struct HashTraits<blink::PreloadKey> |
| : public SimpleClassHashTraits<blink::PreloadKey> { |
| static const bool kEmptyValueIsZero = false; |
| |
| static bool IsDeletedValue(const blink::PreloadKey& value) { |
| return HashTraits<blink::KURL>::IsDeletedValue(value.url); |
| } |
| |
| static void ConstructDeletedValue(blink::PreloadKey& slot, bool zero_value) { |
| HashTraits<blink::KURL>::ConstructDeletedValue(slot.url, zero_value); |
| } |
| }; |
| |
| } // namespace WTF |
| |
| #endif // THIRD_PARTY_BLINK_RENDERER_PLATFORM_LOADER_FETCH_PRELOAD_KEY_H_ |