This change plumbs an equality function object type through the quiche linked hash map type. This will enable future changes to the hashing behavior of SpdyHeaderBlock.

gfe-relnote: Adds a class template parameter with an appropriate default. No functional change intended.
PiperOrigin-RevId: 287990478
Change-Id: Icd72f36561fc31f2f7092306b960e4d8721aa774
diff --git a/common/platform/api/quiche_unordered_containers.h b/common/platform/api/quiche_unordered_containers.h
index 583f97e..a53a206 100644
--- a/common/platform/api/quiche_unordered_containers.h
+++ b/common/platform/api/quiche_unordered_containers.h
@@ -5,6 +5,8 @@
 #ifndef QUICHE_COMMON_PLATFORM_API_QUICHE_UNORDERED_CONTAINERS_H_
 #define QUICHE_COMMON_PLATFORM_API_QUICHE_UNORDERED_CONTAINERS_H_
 
+#include <functional>
+
 #include "net/quiche/common/platform/impl/quiche_unordered_containers_impl.h"
 
 namespace quiche {
@@ -16,8 +18,9 @@
 // A general-purpose unordered map.
 template <typename Key,
           typename Value,
-          typename Hash = QuicheDefaultHasher<Key>>
-using QuicheUnorderedMap = QuicheUnorderedMapImpl<Key, Value, Hash>;
+          typename Hash = QuicheDefaultHasher<Key>,
+          typename Eq = std::equal_to<Key>>
+using QuicheUnorderedMap = QuicheUnorderedMapImpl<Key, Value, Hash, Eq>;
 
 }  // namespace quiche
 
diff --git a/common/simple_linked_hash_map.h b/common/simple_linked_hash_map.h
index b7488eb..6eb6ed9 100644
--- a/common/simple_linked_hash_map.h
+++ b/common/simple_linked_hash_map.h
@@ -16,6 +16,7 @@
 #ifndef QUICHE_COMMON_SIMPLE_LINKED_HASH_MAP_H_
 #define QUICHE_COMMON_SIMPLE_LINKED_HASH_MAP_H_
 
+#include <functional>
 #include <list>
 #include <tuple>
 #include <type_traits>
@@ -33,11 +34,15 @@
 // We also keep a set<list::iterator> for find.  Since std::list is a
 // doubly-linked list, the iterators should remain stable.
 
-template <class Key, class Value, class Hash = std::hash<Key>>
+template <class Key,
+          class Value,
+          class Hash = std::hash<Key>,
+          class Eq = std::equal_to<Key>>
 class SimpleLinkedHashMap {
  private:
   typedef std::list<std::pair<Key, Value>> ListType;
-  typedef QuicheUnorderedMap<Key, typename ListType::iterator, Hash> MapType;
+  typedef QuicheUnorderedMap<Key, typename ListType::iterator, Hash, Eq>
+      MapType;
 
  public:
   typedef typename ListType::iterator iterator;
diff --git a/spdy/core/spdy_header_block.h b/spdy/core/spdy_header_block.h
index b02284f..56ee1d5 100644
--- a/spdy/core/spdy_header_block.h
+++ b/spdy/core/spdy_header_block.h
@@ -7,6 +7,7 @@
 
 #include <stddef.h>
 
+#include <functional>
 #include <list>
 #include <string>
 #include <utility>
@@ -81,7 +82,10 @@
     size_t separator_size_ = 0;
   };
 
-  typedef SpdyLinkedHashMap<SpdyStringPiece, HeaderValue, SpdyStringPieceHash>
+  typedef SpdyLinkedHashMap<SpdyStringPiece,
+                            HeaderValue,
+                            SpdyStringPieceHash,
+                            std::equal_to<SpdyStringPiece>>
       MapType;
 
  public:
diff --git a/spdy/platform/api/spdy_containers.h b/spdy/platform/api/spdy_containers.h
index 9a90556..1449c3c 100644
--- a/spdy/platform/api/spdy_containers.h
+++ b/spdy/platform/api/spdy_containers.h
@@ -24,8 +24,8 @@
 using SpdyHashSet = SpdyHashSetImpl<ElementType, Hasher, Eq>;
 
 // A map which offers insertion-ordered iteration.
-template <typename Key, typename Value, typename Hash = SpdyHash<Key>>
-using SpdyLinkedHashMap = SpdyLinkedHashMapImpl<Key, Value, Hash>;
+template <typename Key, typename Value, typename Hash, typename Eq>
+using SpdyLinkedHashMap = SpdyLinkedHashMapImpl<Key, Value, Hash, Eq>;
 
 // A vector optimized for small sizes. Provides the same APIs as a std::vector.
 template <typename T, size_t N, typename A = std::allocator<T>>