Initial import of Cobalt 2.8885 2016-07-27
diff --git a/src/net/dns/dns_socket_pool.h b/src/net/dns/dns_socket_pool.h
new file mode 100644
index 0000000..54a2edb
--- /dev/null
+++ b/src/net/dns/dns_socket_pool.h
@@ -0,0 +1,83 @@
+// Copyright (c) 2012 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 NET_DNS_DNS_SOCKET_POOL_H_
+#define NET_DNS_DNS_SOCKET_POOL_H_
+
+#include <vector>
+
+#include "base/memory/scoped_ptr.h"
+#include "net/base/net_export.h"
+
+namespace net {
+
+class ClientSocketFactory;
+class DatagramClientSocket;
+class IPEndPoint;
+class NetLog;
+
+// A DnsSocketPool is an abstraction layer around a ClientSocketFactory that
+// allows preallocation, reuse, or other strategies to manage sockets connected
+// to DNS servers.
+class NET_EXPORT_PRIVATE DnsSocketPool {
+ public:
+  virtual ~DnsSocketPool() { }
+
+  // Creates a DnsSocketPool that implements the default strategy for managing
+  // sockets.  (This varies by platform; see DnsSocketPoolImpl in
+  // dns_socket_pool.cc for details.)
+  static scoped_ptr<DnsSocketPool> CreateDefault(
+      ClientSocketFactory* factory);
+
+  // Creates a DnsSocketPool that implements a "null" strategy -- no sockets are
+  // preallocated, allocation requests are satisfied by calling the factory
+  // directly, and returned sockets are deleted immediately.
+  static scoped_ptr<DnsSocketPool> CreateNull(
+      ClientSocketFactory* factory);
+
+  // Initializes the DnsSocketPool.  |nameservers| is the list of nameservers
+  // for which the DnsSocketPool will manage sockets; |net_log| is the NetLog
+  // used when constructing sockets with the factory.
+  //
+  // Initialize may not be called more than once, and must be called before
+  // calling AllocateSocket or FreeSocket.
+  virtual void Initialize(
+      const std::vector<IPEndPoint>* nameservers,
+      NetLog* net_log) = 0;
+
+  // Allocates a socket that is already connected to the nameserver referenced
+  // by |server_index|.  May return a scoped_ptr to NULL if no sockets are
+  // available to reuse and the factory fails to produce a socket (or produces
+  // one on which Connect fails).
+  virtual scoped_ptr<DatagramClientSocket> AllocateSocket(
+      unsigned server_index) = 0;
+
+  // Frees a socket allocated by AllocateSocket.  |server_index| must be the
+  // same index passed to AllocateSocket.
+  virtual void FreeSocket(
+      unsigned server_index,
+      scoped_ptr<DatagramClientSocket> socket) = 0;
+
+ protected:
+  DnsSocketPool(ClientSocketFactory* socket_factory);
+
+  void InitializeInternal(
+      const std::vector<IPEndPoint>* nameservers,
+      NetLog* net_log);
+
+  scoped_ptr<DatagramClientSocket> CreateConnectedSocket(
+      unsigned server_index);
+
+ private:
+  ClientSocketFactory* socket_factory_;
+  NetLog* net_log_;
+  const std::vector<IPEndPoint>* nameservers_;
+  bool initialized_;
+
+  DISALLOW_COPY_AND_ASSIGN(DnsSocketPool);
+};
+
+} // namespace net
+
+#endif // NET_DNS_DNS_SOCKET_POOL_H_