Use QuicheLinkedHashMap instead of platform-dependent implementation.

Internal linked_hash_map was first used in QUIC code at cl/42381785 in Feb 2013.
When this CL was merged at https://chromiumcodereview.appspot.com/12334063,
the internal linked_hash_map was forked to Chromium in net/base.

A third copy was created in QUICHE at cl/245234098 in April 2019.  Chromium
changed from using its own copy to using the one in QUICHE in May 2019 at
https://crrev.com/c/1590616, at which point its own copy was deleted.  Bundling
linked_hash_map with QUICHE allowed other embedders not to fork it.

For simplicity, this CL removes QuicLinkedHashMap and SpdyLinkedHashMap from
platform, migrating to the bundled QuicheLinkedHashMap implementation for every
embedder.

Also remove third_party/spdy/platform, and quiche_spdy_platform build target.

PiperOrigin-RevId: 379699120
diff --git a/quic/core/quic_buffered_packet_store.h b/quic/core/quic_buffered_packet_store.h
index 29be2c8..5ba0a25 100644
--- a/quic/core/quic_buffered_packet_store.h
+++ b/quic/core/quic_buffered_packet_store.h
@@ -14,9 +14,9 @@
 #include "quic/core/quic_packets.h"
 #include "quic/core/quic_time.h"
 #include "quic/core/tls_chlo_extractor.h"
-#include "quic/platform/api/quic_containers.h"
 #include "quic/platform/api/quic_export.h"
 #include "quic/platform/api/quic_socket_address.h"
+#include "common/quiche_linked_hash_map.h"
 
 namespace quic {
 
@@ -78,9 +78,9 @@
     TlsChloExtractor tls_chlo_extractor;
   };
 
-  using BufferedPacketMap = QuicLinkedHashMap<QuicConnectionId,
-                                              BufferedPacketList,
-                                              QuicConnectionIdHash>;
+  using BufferedPacketMap = quiche::QuicheLinkedHashMap<QuicConnectionId,
+                                                        BufferedPacketList,
+                                                        QuicConnectionIdHash>;
 
   class QUIC_NO_EXPORT VisitorInterface {
    public:
@@ -186,7 +186,7 @@
 
   // Keeps track of connection with CHLO buffered up already and the order they
   // arrive.
-  QuicLinkedHashMap<QuicConnectionId, bool, QuicConnectionIdHash>
+  quiche::QuicheLinkedHashMap<QuicConnectionId, bool, QuicConnectionIdHash>
       connections_with_chlo_;
 };
 
diff --git a/quic/core/quic_control_frame_manager.h b/quic/core/quic_control_frame_manager.h
index 48d228b..962733a 100644
--- a/quic/core/quic_control_frame_manager.h
+++ b/quic/core/quic_control_frame_manager.h
@@ -13,6 +13,7 @@
 #include "quic/core/quic_connection_id.h"
 #include "quic/core/quic_types.h"
 #include "common/quiche_circular_deque.h"
+#include "common/quiche_linked_hash_map.h"
 
 namespace quic {
 
@@ -178,7 +179,8 @@
   // TODO(fayang): switch to linked_hash_set when chromium supports it. The bool
   // is not used here.
   // Lost control frames waiting to be retransmitted.
-  QuicLinkedHashMap<QuicControlFrameId, bool> pending_retransmissions_;
+  quiche::QuicheLinkedHashMap<QuicControlFrameId, bool>
+      pending_retransmissions_;
 
   DelegateInterface* delegate_;
 
diff --git a/quic/core/quic_dispatcher.h b/quic/core/quic_dispatcher.h
index 7566c6c..7020c8c 100644
--- a/quic/core/quic_dispatcher.h
+++ b/quic/core/quic_dispatcher.h
@@ -27,9 +27,9 @@
 #include "quic/core/quic_session.h"
 #include "quic/core/quic_time_wait_list_manager.h"
 #include "quic/core/quic_version_manager.h"
-#include "quic/platform/api/quic_containers.h"
 #include "quic/platform/api/quic_reference_counted.h"
 #include "quic/platform/api/quic_socket_address.h"
+#include "common/quiche_linked_hash_map.h"
 
 namespace quic {
 namespace test {
@@ -45,7 +45,8 @@
       public QuicBufferedPacketStore::VisitorInterface {
  public:
   // Ideally we'd have a linked_hash_set: the  boolean is unused.
-  using WriteBlockedList = QuicLinkedHashMap<QuicBlockedWriterInterface*, bool>;
+  using WriteBlockedList =
+      quiche::QuicheLinkedHashMap<QuicBlockedWriterInterface*, bool>;
 
   QuicDispatcher(
       const QuicConfig* config,
diff --git a/quic/core/quic_lru_cache.h b/quic/core/quic_lru_cache.h
index d4b11e0..67541ee 100644
--- a/quic/core/quic_lru_cache.h
+++ b/quic/core/quic_lru_cache.h
@@ -7,11 +7,11 @@
 
 #include <memory>
 
-#include "quic/platform/api/quic_containers.h"
 #include "quic/platform/api/quic_export.h"
 #include "quic/platform/api/quic_flag_utils.h"
 #include "quic/platform/api/quic_flags.h"
 #include "quic/platform/api/quic_logging.h"
+#include "common/quiche_linked_hash_map.h"
 
 namespace quic {
 
@@ -67,7 +67,7 @@
   size_t Size() const { return cache_.size(); }
 
  private:
-  QuicLinkedHashMap<K, std::unique_ptr<V>> cache_;
+  quiche::QuicheLinkedHashMap<K, std::unique_ptr<V>> cache_;
   const size_t capacity_;
 };
 
diff --git a/quic/core/quic_session.h b/quic/core/quic_session.h
index f00d840..89c74db 100644
--- a/quic/core/quic_session.h
+++ b/quic/core/quic_session.h
@@ -36,10 +36,10 @@
 #include "quic/core/session_notifier_interface.h"
 #include "quic/core/stream_delegate_interface.h"
 #include "quic/core/uber_quic_stream_id_manager.h"
-#include "quic/platform/api/quic_containers.h"
 #include "quic/platform/api/quic_export.h"
 #include "quic/platform/api/quic_flags.h"
 #include "quic/platform/api/quic_socket_address.h"
+#include "common/quiche_linked_hash_map.h"
 
 namespace quic {
 
@@ -928,7 +928,8 @@
   // TODO(fayang): switch to linked_hash_set when chromium supports it. The bool
   // is not used here.
   // List of streams with pending retransmissions.
-  QuicLinkedHashMap<QuicStreamId, bool> streams_with_pending_retransmission_;
+  quiche::QuicheLinkedHashMap<QuicStreamId, bool>
+      streams_with_pending_retransmission_;
 
   // Clean up closed_streams_ when this alarm fires.
   std::unique_ptr<QuicAlarm> closed_streams_clean_up_alarm_;
diff --git a/quic/core/quic_time_wait_list_manager.h b/quic/core/quic_time_wait_list_manager.h
index ac371f2..fe15159 100644
--- a/quic/core/quic_time_wait_list_manager.h
+++ b/quic/core/quic_time_wait_list_manager.h
@@ -19,8 +19,8 @@
 #include "quic/core/quic_packets.h"
 #include "quic/core/quic_session.h"
 #include "quic/core/quic_types.h"
-#include "quic/platform/api/quic_containers.h"
 #include "quic/platform/api/quic_flags.h"
+#include "common/quiche_linked_hash_map.h"
 
 namespace quic {
 
@@ -285,10 +285,11 @@
     TimeWaitConnectionInfo info;
   };
 
-  // QuicLinkedHashMap allows lookup by ConnectionId and traversal in add order.
-  using ConnectionIdMap = QuicLinkedHashMap<QuicConnectionId,
-                                            ConnectionIdData,
-                                            QuicConnectionIdHash>;
+  // QuicheLinkedHashMap allows lookup by ConnectionId
+  // and traversal in add order.
+  using ConnectionIdMap = quiche::QuicheLinkedHashMap<QuicConnectionId,
+                                                      ConnectionIdData,
+                                                      QuicConnectionIdHash>;
   // Do not use find/emplace/erase on this map directly. Use
   // FindConnectionIdDataInMap, AddConnectionIdDateToMap,
   // RemoveConnectionDataFromMap instead.
diff --git a/quic/platform/api/quic_containers.h b/quic/platform/api/quic_containers.h
index f7fd922..26bd3d4 100644
--- a/quic/platform/api/quic_containers.h
+++ b/quic/platform/api/quic_containers.h
@@ -7,14 +7,8 @@
 
 #include "net/quic/platform/impl/quic_containers_impl.h"
 
-#include "absl/hash/hash.h"
-
 namespace quic {
 
-// A map which offers insertion-ordered iteration.
-template <typename Key, typename Value, typename Hash = absl::Hash<Key>>
-using QuicLinkedHashMap = QuicLinkedHashMapImpl<Key, Value, Hash>;
-
 // 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>>
 using QuicInlinedVector = QuicInlinedVectorImpl<T, N, A>;
diff --git a/quic/test_tools/quic_test_client.h b/quic/test_tools/quic_test_client.h
index fd42046..66ebb5b 100644
--- a/quic/test_tools/quic_test_client.h
+++ b/quic/test_tools/quic_test_client.h
@@ -14,10 +14,10 @@
 #include "quic/core/quic_framer.h"
 #include "quic/core/quic_packet_creator.h"
 #include "quic/core/quic_packets.h"
-#include "quic/platform/api/quic_containers.h"
 #include "quic/platform/api/quic_epoll.h"
 #include "quic/platform/api/quic_test.h"
 #include "quic/tools/quic_client.h"
+#include "common/quiche_linked_hash_map.h"
 
 namespace quic {
 
@@ -400,7 +400,8 @@
   QuicSpdyClientStream* latest_created_stream_;
   std::map<QuicStreamId, QuicSpdyClientStream*> open_streams_;
   // Received responses of closed streams.
-  QuicLinkedHashMap<QuicStreamId, PerStreamState> closed_stream_states_;
+  quiche::QuicheLinkedHashMap<QuicStreamId, PerStreamState>
+      closed_stream_states_;
 
   QuicRstStreamErrorCode stream_error_;
 
diff --git a/quic/test_tools/simple_session_notifier.h b/quic/test_tools/simple_session_notifier.h
index bc76ddc..8bdadb2 100644
--- a/quic/test_tools/simple_session_notifier.h
+++ b/quic/test_tools/simple_session_notifier.h
@@ -10,6 +10,7 @@
 #include "quic/core/session_notifier_interface.h"
 #include "quic/platform/api/quic_test.h"
 #include "common/quiche_circular_deque.h"
+#include "common/quiche_linked_hash_map.h"
 
 namespace quic {
 
@@ -134,7 +135,7 @@
 
   quiche::QuicheCircularDeque<QuicFrame> control_frames_;
 
-  QuicLinkedHashMap<QuicControlFrameId, bool> lost_control_frames_;
+  quiche::QuicheLinkedHashMap<QuicControlFrameId, bool> lost_control_frames_;
 
   // Id of latest saved control frame. 0 if no control frame has been saved.
   QuicControlFrameId last_control_frame_id_;
diff --git a/quic/tools/quic_client_epoll_network_helper.h b/quic/tools/quic_client_epoll_network_helper.h
index df0a3b4..bb8a898 100644
--- a/quic/tools/quic_client_epoll_network_helper.h
+++ b/quic/tools/quic_client_epoll_network_helper.h
@@ -15,9 +15,9 @@
 #include "quic/core/http/quic_client_push_promise_index.h"
 #include "quic/core/quic_config.h"
 #include "quic/core/quic_packet_reader.h"
-#include "quic/platform/api/quic_containers.h"
 #include "quic/platform/api/quic_epoll.h"
 #include "quic/tools/quic_client_base.h"
+#include "common/quiche_linked_hash_map.h"
 
 namespace quic {
 
@@ -73,7 +73,8 @@
 
   QuicEpollServer* epoll_server() { return epoll_server_; }
 
-  const QuicLinkedHashMap<int, QuicSocketAddress>& fd_address_map() const {
+  const quiche::QuicheLinkedHashMap<int, QuicSocketAddress>& fd_address_map()
+      const {
     return fd_address_map_;
   }
 
@@ -110,7 +111,7 @@
 
   // Map mapping created UDP sockets to their addresses. By using linked hash
   // map, the order of socket creation can be recorded.
-  QuicLinkedHashMap<int, QuicSocketAddress> fd_address_map_;
+  quiche::QuicheLinkedHashMap<int, QuicSocketAddress> fd_address_map_;
 
   // If overflow_supported_ is true, this will be the number of packets dropped
   // during the lifetime of the server.
diff --git a/spdy/core/spdy_header_block.h b/spdy/core/spdy_header_block.h
index 4a61403..c3c5bad 100644
--- a/spdy/core/spdy_header_block.h
+++ b/spdy/core/spdy_header_block.h
@@ -20,8 +20,8 @@
 #include "absl/strings/string_view.h"
 #include "common/platform/api/quiche_export.h"
 #include "common/platform/api/quiche_logging.h"
+#include "common/quiche_linked_hash_map.h"
 #include "spdy/core/spdy_header_storage.h"
-#include "spdy/platform/api/spdy_containers.h"
 
 namespace spdy {
 
@@ -108,10 +108,10 @@
     }
   };
 
-  typedef SpdyLinkedHashMap<absl::string_view,
-                            HeaderValue,
-                            StringPieceCaseHash,
-                            StringPieceCaseEqual>
+  typedef quiche::QuicheLinkedHashMap<absl::string_view,
+                                      HeaderValue,
+                                      StringPieceCaseHash,
+                                      StringPieceCaseEqual>
       MapType;
 
  public:
diff --git a/spdy/platform/api/spdy_containers.h b/spdy/platform/api/spdy_containers.h
deleted file mode 100644
index 2adf3f4..0000000
--- a/spdy/platform/api/spdy_containers.h
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright (c) 2018 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 QUICHE_SPDY_PLATFORM_API_SPDY_CONTAINERS_H_
-#define QUICHE_SPDY_PLATFORM_API_SPDY_CONTAINERS_H_
-
-#include "net/spdy/platform/impl/spdy_containers_impl.h"
-
-namespace spdy {
-
-// A map which offers insertion-ordered iteration.
-template <typename Key, typename Value, typename Hash, typename Eq>
-using SpdyLinkedHashMap = SpdyLinkedHashMapImpl<Key, Value, Hash, Eq>;
-
-}  // namespace spdy
-
-#endif  // QUICHE_SPDY_PLATFORM_API_SPDY_CONTAINERS_H_