1*6777b538SAndroid Build Coastguard Worker // Copyright 2011 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #ifndef NET_PROXY_RESOLUTION_PROXY_RESOLVER_H_ 6*6777b538SAndroid Build Coastguard Worker #define NET_PROXY_RESOLUTION_PROXY_RESOLVER_H_ 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker #include "base/functional/callback_forward.h" 9*6777b538SAndroid Build Coastguard Worker #include "net/base/completion_once_callback.h" 10*6777b538SAndroid Build Coastguard Worker #include "net/base/load_states.h" 11*6777b538SAndroid Build Coastguard Worker #include "net/base/net_export.h" 12*6777b538SAndroid Build Coastguard Worker #include "net/proxy_resolution/pac_file_data.h" 13*6777b538SAndroid Build Coastguard Worker #include "url/gurl.h" 14*6777b538SAndroid Build Coastguard Worker 15*6777b538SAndroid Build Coastguard Worker namespace net { 16*6777b538SAndroid Build Coastguard Worker 17*6777b538SAndroid Build Coastguard Worker class NetLogWithSource; 18*6777b538SAndroid Build Coastguard Worker class NetworkAnonymizationKey; 19*6777b538SAndroid Build Coastguard Worker class ProxyInfo; 20*6777b538SAndroid Build Coastguard Worker 21*6777b538SAndroid Build Coastguard Worker // Interface for "proxy resolvers". A ProxyResolver fills in a list of proxies 22*6777b538SAndroid Build Coastguard Worker // to use for a particular URL. Generally the backend for a ProxyResolver is 23*6777b538SAndroid Build Coastguard Worker // a PAC script, but it doesn't need to be. ProxyResolver can service multiple 24*6777b538SAndroid Build Coastguard Worker // requests at a time. 25*6777b538SAndroid Build Coastguard Worker class NET_EXPORT_PRIVATE ProxyResolver { 26*6777b538SAndroid Build Coastguard Worker public: 27*6777b538SAndroid Build Coastguard Worker class Request { 28*6777b538SAndroid Build Coastguard Worker public: 29*6777b538SAndroid Build Coastguard Worker virtual ~Request() = default; // Cancels the request 30*6777b538SAndroid Build Coastguard Worker virtual LoadState GetLoadState() = 0; 31*6777b538SAndroid Build Coastguard Worker }; 32*6777b538SAndroid Build Coastguard Worker 33*6777b538SAndroid Build Coastguard Worker ProxyResolver() = default; 34*6777b538SAndroid Build Coastguard Worker 35*6777b538SAndroid Build Coastguard Worker ProxyResolver(const ProxyResolver&) = delete; 36*6777b538SAndroid Build Coastguard Worker ProxyResolver& operator=(const ProxyResolver&) = delete; 37*6777b538SAndroid Build Coastguard Worker 38*6777b538SAndroid Build Coastguard Worker virtual ~ProxyResolver() = default; 39*6777b538SAndroid Build Coastguard Worker 40*6777b538SAndroid Build Coastguard Worker // Gets a list of proxy servers to use for |url|. If the request will 41*6777b538SAndroid Build Coastguard Worker // complete asynchronously returns ERR_IO_PENDING and notifies the result 42*6777b538SAndroid Build Coastguard Worker // by running |callback|. If the result code is OK then 43*6777b538SAndroid Build Coastguard Worker // the request was successful and |results| contains the proxy 44*6777b538SAndroid Build Coastguard Worker // resolution information. In the case of asynchronous completion 45*6777b538SAndroid Build Coastguard Worker // |*request| is written to. Call request_.reset() to cancel the request. 46*6777b538SAndroid Build Coastguard Worker // 47*6777b538SAndroid Build Coastguard Worker // |network_isolation_key| is used for any DNS lookups associated with the 48*6777b538SAndroid Build Coastguard Worker // request, if net's HostResolver is used. If the underlying platform itself 49*6777b538SAndroid Build Coastguard Worker // handles proxy resolution, |network_anonymization_key| will be ignored. 50*6777b538SAndroid Build Coastguard Worker virtual int GetProxyForURL( 51*6777b538SAndroid Build Coastguard Worker const GURL& url, 52*6777b538SAndroid Build Coastguard Worker const NetworkAnonymizationKey& network_anonymization_key, 53*6777b538SAndroid Build Coastguard Worker ProxyInfo* results, 54*6777b538SAndroid Build Coastguard Worker CompletionOnceCallback callback, 55*6777b538SAndroid Build Coastguard Worker std::unique_ptr<Request>* request, 56*6777b538SAndroid Build Coastguard Worker const NetLogWithSource& net_log) = 0; 57*6777b538SAndroid Build Coastguard Worker }; 58*6777b538SAndroid Build Coastguard Worker 59*6777b538SAndroid Build Coastguard Worker } // namespace net 60*6777b538SAndroid Build Coastguard Worker 61*6777b538SAndroid Build Coastguard Worker #endif // NET_PROXY_RESOLUTION_PROXY_RESOLVER_H_ 62