| // Copyright 2011 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef NET_PROXY_RESOLUTION_PROXY_RESOLVER_H_ |
| #define NET_PROXY_RESOLUTION_PROXY_RESOLVER_H_ |
| |
| #include "base/functional/callback_forward.h" |
| #include "net/base/completion_once_callback.h" |
| #include "net/base/load_states.h" |
| #include "net/base/net_export.h" |
| #include "net/proxy_resolution/pac_file_data.h" |
| #include "url/gurl.h" |
| |
| namespace net { |
| |
| class NetLogWithSource; |
| class NetworkAnonymizationKey; |
| class ProxyInfo; |
| |
| // Interface for "proxy resolvers". A ProxyResolver fills in a list of proxies |
| // to use for a particular URL. Generally the backend for a ProxyResolver is |
| // a PAC script, but it doesn't need to be. ProxyResolver can service multiple |
| // requests at a time. |
| class NET_EXPORT_PRIVATE ProxyResolver { |
| public: |
| class Request { |
| public: |
| virtual ~Request() = default; // Cancels the request |
| virtual LoadState GetLoadState() = 0; |
| }; |
| |
| ProxyResolver() = default; |
| |
| ProxyResolver(const ProxyResolver&) = delete; |
| ProxyResolver& operator=(const ProxyResolver&) = delete; |
| |
| virtual ~ProxyResolver() = default; |
| |
| // Gets a list of proxy servers to use for |url|. If the request will |
| // complete asynchronously returns ERR_IO_PENDING and notifies the result |
| // by running |callback|. If the result code is OK then |
| // the request was successful and |results| contains the proxy |
| // resolution information. In the case of asynchronous completion |
| // |*request| is written to. Call request_.reset() to cancel the request. |
| // |
| // |network_isolation_key| is used for any DNS lookups associated with the |
| // request, if net's HostResolver is used. If the underlying platform itself |
| // handles proxy resolution, |network_anonymization_key| will be ignored. |
| virtual int GetProxyForURL( |
| const GURL& url, |
| const NetworkAnonymizationKey& network_anonymization_key, |
| ProxyInfo* results, |
| CompletionOnceCallback callback, |
| std::unique_ptr<Request>* request, |
| const NetLogWithSource& net_log) = 0; |
| }; |
| |
| } // namespace net |
| |
| #endif // NET_PROXY_RESOLUTION_PROXY_RESOLVER_H_ |