Index: net/proxy/proxy_service_unittest.cc |
=================================================================== |
--- net/proxy/proxy_service_unittest.cc (revision 21630) |
+++ net/proxy/proxy_service_unittest.cc (working copy) |
@@ -5,6 +5,7 @@ |
#include "base/compiler_specific.h" |
#include "googleurl/src/gurl.h" |
#include "net/base/net_errors.h" |
+#include "net/proxy/single_threaded_proxy_resolver.h" |
#include "net/proxy/proxy_config_service.h" |
#include "net/proxy/proxy_resolver.h" |
#include "net/proxy/proxy_script_fetcher.h" |
@@ -29,15 +30,17 @@ |
net::ProxyConfig config; |
}; |
-class MockProxyResolver : public net::ProxyResolver { |
+class SyncMockProxyResolver : public net::ProxyResolver { |
public: |
- MockProxyResolver() : net::ProxyResolver(true), |
- fail_get_proxy_for_url(false) { |
+ SyncMockProxyResolver() : net::ProxyResolver(false /*expects_pac_bytes*/), |
+ fail_get_proxy_for_url(false) { |
} |
+ // ProxyResolver implementation: |
virtual int GetProxyForURL(const GURL& query_url, |
- const GURL& pac_url, |
- net::ProxyInfo* results) { |
+ net::ProxyInfo* results, |
+ net::CompletionCallback* callback, |
+ RequestHandle* request) { |
if (fail_get_proxy_for_url) |
return net::ERR_FAILED; |
if (GURL(query_url).host() == info_predicate_query_host) { |
@@ -48,6 +51,13 @@ |
return net::OK; |
} |
+ virtual void CancelRequest(RequestHandle request) { |
+ NOTREACHED(); |
+ } |
+ |
+ virtual void SetPacScriptByUrlInternal(const GURL& pac_url) {} |
+ |
+ |
net::ProxyInfo info; |
// info is only returned if query_url in GetProxyForURL matches this: |
@@ -58,6 +68,17 @@ |
bool fail_get_proxy_for_url; |
}; |
+class MockProxyResolver : public net::SingleThreadedProxyResolver { |
+ public: |
+ MockProxyResolver() |
+ : net::SingleThreadedProxyResolver(new SyncMockProxyResolver) { |
+ x = reinterpret_cast<SyncMockProxyResolver*>(resolver()); |
+ } |
+ |
+ // TODO(eroman): cleanup. |
+ SyncMockProxyResolver* x; |
+}; |
+ |
// ResultFuture is a handle to get at the result from |
// ProxyService::ResolveProxyForURL() that ran on another thread. |
class ResultFuture : public base::RefCountedThreadSafe<ResultFuture> { |
@@ -326,12 +347,13 @@ |
}; |
// A ProxyResolver which can be set to block upon reaching GetProxyForURL. |
-class BlockableProxyResolver : public net::ProxyResolver { |
+class SyncBlockableProxyResolver : public net::ProxyResolver { |
public: |
- BlockableProxyResolver() : net::ProxyResolver(true), |
- should_block_(false), |
- unblocked_(true, true), |
- blocked_(true, false) { |
+ SyncBlockableProxyResolver() |
+ : net::ProxyResolver(false /*expects_pac_bytes*/), |
+ should_block_(false), |
+ unblocked_(true, true), |
+ blocked_(true, false) { |
} |
void Block() { |
@@ -351,8 +373,9 @@ |
// net::ProxyResolver implementation: |
virtual int GetProxyForURL(const GURL& query_url, |
- const GURL& pac_url, |
- net::ProxyInfo* results) { |
+ net::ProxyInfo* results, |
+ net::CompletionCallback* callback, |
+ RequestHandle* request) { |
if (should_block_) { |
blocked_.Signal(); |
unblocked_.Wait(); |
@@ -362,36 +385,72 @@ |
return net::OK; |
} |
+ virtual void CancelRequest(RequestHandle request) { |
+ NOTREACHED(); |
+ } |
+ |
+ virtual void SetPacScriptByUrlInternal(const GURL& pac_url) {} |
+ |
private: |
bool should_block_; |
base::WaitableEvent unblocked_; |
base::WaitableEvent blocked_; |
}; |
+class BlockableProxyResolver : public net::SingleThreadedProxyResolver { |
+ public: |
+ BlockableProxyResolver() |
+ : net::SingleThreadedProxyResolver(new SyncBlockableProxyResolver) { |
+ x = reinterpret_cast<SyncBlockableProxyResolver*>(resolver()); |
+ } |
+ |
+ // TODO(eroman): cleanup. |
+ SyncBlockableProxyResolver* x; |
+}; |
+ |
// A mock ProxyResolverWithoutFetch which concatenates the query's host with |
// the last download PAC contents. This way the result describes what the last |
// downloaded PAC script's contents were, in addition to the query url itself. |
-class MockProxyResolverWithoutFetch : public net::ProxyResolver { |
+class SyncMockProxyResolverWithoutFetch : public net::ProxyResolver { |
public: |
- MockProxyResolverWithoutFetch() : net::ProxyResolver(false), |
- last_pac_contents_("NONE") {} |
+ SyncMockProxyResolverWithoutFetch() |
+ : net::ProxyResolver(true /*expects_pac_bytes*/), |
+ last_pac_contents_("NONE") {} |
// net::ProxyResolver implementation: |
virtual int GetProxyForURL(const GURL& query_url, |
- const GURL& pac_url, |
- net::ProxyInfo* results) { |
+ net::ProxyInfo* results, |
+ net::CompletionCallback* callback, |
+ RequestHandle* request) { |
results->UseNamedProxy(last_pac_contents_ + "." + query_url.host()); |
return net::OK; |
} |
- virtual void SetPacScript(const std::string& bytes) { |
+ virtual void SetPacScriptByDataInternal(const std::string& bytes) { |
last_pac_contents_ = bytes; |
} |
+ virtual void CancelRequest(RequestHandle request) { |
+ NOTREACHED(); |
+ } |
+ |
private: |
std::string last_pac_contents_; |
}; |
+class MockProxyResolverWithoutFetch : public net::SingleThreadedProxyResolver { |
+ public: |
+ MockProxyResolverWithoutFetch() |
+ : net::SingleThreadedProxyResolver( |
+ new SyncMockProxyResolverWithoutFetch) { |
+ x = reinterpret_cast<SyncMockProxyResolverWithoutFetch*>(resolver()); |
+ } |
+ |
+ // TODO(eroman): cleanup. |
+ SyncMockProxyResolverWithoutFetch* x; |
+}; |
+ |
+ |
} // namespace |
// A mock ProxyScriptFetcher. No result will be returned to the fetch client |
@@ -465,8 +524,8 @@ |
new MockProxyConfigService("http://foopy/proxy.pac"); |
MockProxyResolver* resolver = new MockProxyResolver; |
- resolver->info.UseNamedProxy("foopy"); |
- resolver->info_predicate_query_host = "www.google.com"; |
+ resolver->x->info.UseNamedProxy("foopy"); |
+ resolver->x->info_predicate_query_host = "www.google.com"; |
SyncProxyService service(config_service, resolver); |
@@ -484,8 +543,8 @@ |
new MockProxyConfigService("http://foopy/proxy.pac"); |
MockProxyResolver* resolver = new MockProxyResolver; |
- resolver->info.UseNamedProxy("foopy:8080"); |
- resolver->info_predicate_query_host = "www.google.com"; |
+ resolver->x->info.UseNamedProxy("foopy:8080"); |
+ resolver->x->info_predicate_query_host = "www.google.com"; |
SyncProxyService service(config_service, resolver); |
@@ -510,9 +569,9 @@ |
new MockProxyConfigService("http://foopy/proxy.pac"); |
MockProxyResolver* resolver = new MockProxyResolver; |
- resolver->info.UseNamedProxy("foopy:8080"); |
- resolver->info_predicate_query_host = "www.google.com"; |
- resolver->fail_get_proxy_for_url = true; |
+ resolver->x->info.UseNamedProxy("foopy:8080"); |
+ resolver->x->info_predicate_query_host = "www.google.com"; |
+ resolver->x->fail_get_proxy_for_url = true; |
SyncProxyService service(config_service, resolver); |
@@ -528,8 +587,8 @@ |
EXPECT_EQ(rv, net::OK); |
EXPECT_TRUE(info.is_direct()); |
- resolver->fail_get_proxy_for_url = false; |
- resolver->info.UseNamedProxy("foopy_valid:8080"); |
+ resolver->x->fail_get_proxy_for_url = false; |
+ resolver->x->info.UseNamedProxy("foopy_valid:8080"); |
// But, if that fails, then we should give the proxy config another shot |
// since we have never tried it with this URL before. |
@@ -547,9 +606,9 @@ |
new MockProxyConfigService("http://foopy/proxy.pac"); |
MockProxyResolver* resolver = new MockProxyResolver; |
- resolver->info.UseNamedProxy("foopy1:8080;foopy2:9090"); |
- resolver->info_predicate_query_host = "www.google.com"; |
- resolver->fail_get_proxy_for_url = false; |
+ resolver->x->info.UseNamedProxy("foopy1:8080;foopy2:9090"); |
+ resolver->x->info_predicate_query_host = "www.google.com"; |
+ resolver->x->fail_get_proxy_for_url = false; |
SyncProxyService service(config_service, resolver); |
@@ -574,9 +633,9 @@ |
// Create a new resolver that returns 3 proxies. The second one is already |
// known to be bad. |
config_service->config.pac_url = GURL("http://foopy/proxy.pac"); |
- resolver->info.UseNamedProxy("foopy3:7070;foopy1:8080;foopy2:9090"); |
- resolver->info_predicate_query_host = "www.google.com"; |
- resolver->fail_get_proxy_for_url = false; |
+ resolver->x->info.UseNamedProxy("foopy3:7070;foopy1:8080;foopy2:9090"); |
+ resolver->x->info_predicate_query_host = "www.google.com"; |
+ resolver->x->fail_get_proxy_for_url = false; |
rv = service.ResolveProxy(url, &info); |
EXPECT_EQ(rv, net::OK); |
@@ -607,9 +666,9 @@ |
new MockProxyConfigService("http://foopy/proxy.pac"); |
MockProxyResolver* resolver = new MockProxyResolver; |
- resolver->info.UseNamedProxy("foopy1:8080;foopy2:9090"); |
- resolver->info_predicate_query_host = "www.google.com"; |
- resolver->fail_get_proxy_for_url = false; |
+ resolver->x->info.UseNamedProxy("foopy1:8080;foopy2:9090"); |
+ resolver->x->info_predicate_query_host = "www.google.com"; |
+ resolver->x->fail_get_proxy_for_url = false; |
SyncProxyService service(config_service, resolver); |
@@ -656,9 +715,9 @@ |
new MockProxyConfigService("http://foopy/proxy.pac"); |
MockProxyResolver* resolver = new MockProxyResolver; |
- resolver->info.UseNamedProxy("foopy1:8080;foopy2:9090"); |
- resolver->info_predicate_query_host = "www.google.com"; |
- resolver->fail_get_proxy_for_url = false; |
+ resolver->x->info.UseNamedProxy("foopy1:8080;foopy2:9090"); |
+ resolver->x->info_predicate_query_host = "www.google.com"; |
+ resolver->x->fail_get_proxy_for_url = false; |
SyncProxyService service(config_service, resolver); |
@@ -683,7 +742,7 @@ |
// Fake a PAC failure. |
net::ProxyInfo info2; |
- resolver->fail_get_proxy_for_url = true; |
+ resolver->x->fail_get_proxy_for_url = true; |
rv = service.ResolveProxy(url, &info2); |
EXPECT_EQ(rv, net::ERR_FAILED); |
@@ -692,7 +751,7 @@ |
// The PAC is now fixed and will return a proxy server. |
// It should also clear the list of bad proxies. |
- resolver->fail_get_proxy_for_url = false; |
+ resolver->x->fail_get_proxy_for_url = false; |
// Try to resolve, it will still return "direct" because we have no reason |
// to check the config since everything works. |
@@ -999,7 +1058,7 @@ |
ProxyServiceWithFutures service(config_service, resolver); |
// Cause requests to pile up, by having them block in the PAC thread. |
- resolver->Block(); |
+ resolver->x->Block(); |
// Start 3 requests. |
scoped_refptr<ResultFuture> result1; |
@@ -1012,13 +1071,13 @@ |
service.ResolveProxy(&result3, GURL("http://request3")); |
// Wait until the first request has become blocked in the PAC thread. |
- resolver->WaitUntilBlocked(); |
+ resolver->x->WaitUntilBlocked(); |
// Cancel the second request |
result2->Cancel(); |
// Unblock the PAC thread. |
- resolver->Unblock(); |
+ resolver->x->Unblock(); |
// Wait for the final request to complete. |
result3->WaitUntilCompleted(); |
@@ -1046,7 +1105,7 @@ |
ProxyServiceWithFutures service(config_service, resolver); |
// Cause requests to pile up, by having them block in the PAC thread. |
- resolver->Block(); |
+ resolver->x->Block(); |
// Start 3 requests. |
scoped_refptr<ResultFuture> result1; |
@@ -1059,13 +1118,13 @@ |
service.ResolveProxy(&result3, GURL("http://request3")); |
// Wait until the first request has become blocked in the PAC thread. |
- resolver->WaitUntilBlocked(); |
+ resolver->x->WaitUntilBlocked(); |
// Cancel the first request |
result1->Cancel(); |
// Unblock the PAC thread. |
- resolver->Unblock(); |
+ resolver->x->Unblock(); |
// Wait for the final request to complete. |
result3->WaitUntilCompleted(); |