| Index: net/proxy/proxy_resolver.h
|
| ===================================================================
|
| --- net/proxy/proxy_resolver.h (revision 21630)
|
| +++ net/proxy/proxy_resolver.h (working copy)
|
| @@ -8,6 +8,7 @@
|
| #include <string>
|
|
|
| #include "base/logging.h"
|
| +#include "net/base/completion_callback.h"
|
|
|
| class GURL;
|
|
|
| @@ -15,37 +16,69 @@
|
|
|
| class ProxyInfo;
|
|
|
| -// Synchronously resolve the proxy for a URL, using a PAC script. Called on the
|
| -// PAC Thread.
|
| +// 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 ProxyResolver {
|
| public:
|
| + // Opaque pointer type, to return a handle to cancel outstanding requests.
|
| + typedef void* RequestHandle;
|
|
|
| - // If a subclass sets |does_fetch| to false, then the owning ProxyResolver
|
| - // will download PAC scripts on our behalf, and notify changes with
|
| - // SetPacScript(). Otherwise the subclass is expected to fetch the
|
| - // PAC script internally, and SetPacScript() will go unused.
|
| - ProxyResolver(bool does_fetch) : does_fetch_(does_fetch) {}
|
| + // See |expects_pac_bytes()| for the meaning of |expects_pac_bytes|.
|
| + explicit ProxyResolver(bool expects_pac_bytes)
|
| + : expects_pac_bytes_(expects_pac_bytes) {}
|
|
|
| virtual ~ProxyResolver() {}
|
|
|
| - // Query the proxy auto-config file (specified by |pac_url|) for the proxy to
|
| - // use to load the given |query_url|. Returns OK if successful or an error
|
| - // code otherwise.
|
| - virtual int GetProxyForURL(const GURL& query_url,
|
| - const GURL& pac_url,
|
| - ProxyInfo* results) = 0;
|
| + // 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, and can be passed to CancelRequest().
|
| + virtual int GetProxyForURL(const GURL& url,
|
| + ProxyInfo* results,
|
| + CompletionCallback* callback,
|
| + RequestHandle* request) = 0;
|
|
|
| - // Called whenever the PAC script has changed, with the contents of the
|
| - // PAC script. |bytes| may be empty string if there was a fetch error.
|
| - virtual void SetPacScript(const std::string& bytes) {
|
| - // Must override SetPacScript() if |does_fetch_ = true|.
|
| + // Cancels |request|.
|
| + virtual void CancelRequest(RequestHandle request) = 0;
|
| +
|
| + // The PAC script backend can be specified to the ProxyResolver either via
|
| + // URL, or via the javascript text itself. If |expects_pac_bytes| is true,
|
| + // then PAC scripts should be specified using SetPacScriptByData(). Otherwise
|
| + // they should be specified using SetPacScriptByUrl().
|
| + bool expects_pac_bytes() const { return expects_pac_bytes_; }
|
| +
|
| + // Sets the PAC script backend to use for this proxy resolver (by URL).
|
| + void SetPacScriptByUrl(const GURL& pac_url) {
|
| + DCHECK(!expects_pac_bytes());
|
| + SetPacScriptByUrlInternal(pac_url);
|
| + }
|
| +
|
| + // Sets the PAC script backend to use for this proxy resolver (by contents).
|
| + void SetPacScriptByData(const std::string& bytes) {
|
| + DCHECK(expects_pac_bytes());
|
| + SetPacScriptByDataInternal(bytes);
|
| + }
|
| +
|
| + private:
|
| + // Called to set the PAC script backend to use. If |pac_url| is invalid,
|
| + // this is a request to use WPAD (auto detect).
|
| + virtual void SetPacScriptByUrlInternal(const GURL& pac_url) {
|
| NOTREACHED();
|
| }
|
|
|
| - bool does_fetch() const { return does_fetch_; }
|
| + // Called to set the PAC script backend to use. |bytes| may be empty if the
|
| + // fetch failed, or if the fetch returned no content.
|
| + virtual void SetPacScriptByDataInternal(const std::string& bytes) {
|
| + NOTREACHED();
|
| + }
|
|
|
| - protected:
|
| - bool does_fetch_;
|
| + const bool expects_pac_bytes_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(ProxyResolver);
|
| };
|
|
|
| } // namespace net
|
|
|