Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(559)

Unified Diff: net/proxy/proxy_resolver.h

Issue 149525: Remove the concept of threading from ProxyService, and move it into the Proxy... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Add missing header for mac Created 11 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/net.gyp ('k') | net/proxy/proxy_resolver_mac.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « net/net.gyp ('k') | net/proxy/proxy_resolver_mac.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698