| Index: net/proxy/proxy_resolver_v8_tracing_unittest.cc
|
| diff --git a/net/proxy/proxy_resolver_v8_tracing_unittest.cc b/net/proxy/proxy_resolver_v8_tracing_unittest.cc
|
| index 729493775416729fc41066d029b19a9c8d452c4f..749d93cadf8766f51c8fd36edd046067af6be656 100644
|
| --- a/net/proxy/proxy_resolver_v8_tracing_unittest.cc
|
| +++ b/net/proxy/proxy_resolver_v8_tracing_unittest.cc
|
| @@ -4,6 +4,8 @@
|
|
|
| #include "net/proxy/proxy_resolver_v8_tracing.h"
|
|
|
| +#include <string>
|
| +
|
| #include "base/files/file_util.h"
|
| #include "base/message_loop/message_loop.h"
|
| #include "base/path_service.h"
|
| @@ -31,6 +33,25 @@ namespace net {
|
|
|
| namespace {
|
|
|
| +class SingleShotProxyResolverFactoryV8Tracing
|
| + : public ProxyResolverFactoryV8Tracing {
|
| + public:
|
| + SingleShotProxyResolverFactoryV8Tracing(
|
| + HostResolver* host_resolver,
|
| + NetLog* net_log,
|
| + const ProxyResolver::LoadStateChangedCallback& callback,
|
| + scoped_ptr<ProxyResolverErrorObserver> error_observer)
|
| + : ProxyResolverFactoryV8Tracing(host_resolver, net_log, callback),
|
| + error_observer_(error_observer.Pass()) {}
|
| +
|
| + private:
|
| + scoped_ptr<ProxyResolverErrorObserver> CreateErrorObserver() override {
|
| + return error_observer_.Pass();
|
| + }
|
| +
|
| + scoped_ptr<ProxyResolverErrorObserver> error_observer_;
|
| +};
|
| +
|
| class ProxyResolverV8TracingTest : public testing::Test {
|
| public:
|
| void TearDown() override {
|
| @@ -60,12 +81,23 @@ scoped_refptr<ProxyResolverScriptData> LoadScriptData(const char* filename) {
|
| return ProxyResolverScriptData::FromUTF8(file_contents);
|
| }
|
|
|
| -void InitResolver(ProxyResolverV8Tracing* resolver, const char* filename) {
|
| +scoped_ptr<ProxyResolver> CreateResolver(
|
| + NetLog* net_log,
|
| + HostResolver* host_resolver,
|
| + scoped_ptr<ProxyResolverErrorObserver> error_observer,
|
| + const char* filename) {
|
| + scoped_ptr<ProxyResolver> resolver;
|
| + SingleShotProxyResolverFactoryV8Tracing factory(
|
| + host_resolver, net_log, ProxyResolver::LoadStateChangedCallback(),
|
| + error_observer.Pass());
|
| TestCompletionCallback callback;
|
| - int rv =
|
| - resolver->SetPacScript(LoadScriptData(filename), callback.callback());
|
| + scoped_ptr<ProxyResolverFactory::Request> request;
|
| + int rv = factory.CreateProxyResolver(LoadScriptData(filename), &resolver,
|
| + callback.callback(), &request);
|
| EXPECT_EQ(ERR_IO_PENDING, rv);
|
| EXPECT_EQ(OK, callback.WaitForResult());
|
| + EXPECT_TRUE(resolver);
|
| + return resolver.Pass();
|
| }
|
|
|
| class MockErrorObserver : public ProxyResolverErrorObserver {
|
| @@ -102,16 +134,16 @@ TEST_F(ProxyResolverV8TracingTest, Simple) {
|
| BoundTestNetLog request_log;
|
| MockCachingHostResolver host_resolver;
|
| MockErrorObserver* error_observer = new MockErrorObserver;
|
| - ProxyResolverV8Tracing resolver(&host_resolver, error_observer, &log);
|
|
|
| - InitResolver(&resolver, "simple.js");
|
| + scoped_ptr<ProxyResolver> resolver = CreateResolver(
|
| + &log, &host_resolver, make_scoped_ptr(error_observer), "simple.js");
|
|
|
| TestCompletionCallback callback;
|
| ProxyInfo proxy_info;
|
|
|
| - int rv = resolver.GetProxyForURL(
|
| - GURL("http://foo/"), &proxy_info, callback.callback(),
|
| - NULL, request_log.bound());
|
| + int rv =
|
| + resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info,
|
| + callback.callback(), NULL, request_log.bound());
|
|
|
| EXPECT_EQ(ERR_IO_PENDING, rv);
|
| EXPECT_EQ(OK, callback.WaitForResult());
|
| @@ -133,16 +165,16 @@ TEST_F(ProxyResolverV8TracingTest, JavascriptError) {
|
| BoundTestNetLog request_log;
|
| MockCachingHostResolver host_resolver;
|
| MockErrorObserver* error_observer = new MockErrorObserver;
|
| - ProxyResolverV8Tracing resolver(&host_resolver, error_observer, &log);
|
|
|
| - InitResolver(&resolver, "error.js");
|
| + scoped_ptr<ProxyResolver> resolver = CreateResolver(
|
| + &log, &host_resolver, make_scoped_ptr(error_observer), "error.js");
|
|
|
| TestCompletionCallback callback;
|
| ProxyInfo proxy_info;
|
|
|
| - int rv = resolver.GetProxyForURL(
|
| - GURL("http://throw-an-error/"), &proxy_info, callback.callback(), NULL,
|
| - request_log.bound());
|
| + int rv =
|
| + resolver->GetProxyForURL(GURL("http://throw-an-error/"), &proxy_info,
|
| + callback.callback(), NULL, request_log.bound());
|
|
|
| EXPECT_EQ(ERR_IO_PENDING, rv);
|
| EXPECT_EQ(ERR_PAC_SCRIPT_FAILED, callback.WaitForResult());
|
| @@ -179,19 +211,17 @@ TEST_F(ProxyResolverV8TracingTest, TooManyAlerts) {
|
| BoundTestNetLog request_log;
|
| MockCachingHostResolver host_resolver;
|
| MockErrorObserver* error_observer = new MockErrorObserver;
|
| - ProxyResolverV8Tracing resolver(&host_resolver, error_observer, &log);
|
|
|
| - InitResolver(&resolver, "too_many_alerts.js");
|
| + scoped_ptr<ProxyResolver> resolver =
|
| + CreateResolver(&log, &host_resolver, make_scoped_ptr(error_observer),
|
| + "too_many_alerts.js");
|
|
|
| TestCompletionCallback callback;
|
| ProxyInfo proxy_info;
|
|
|
| - int rv = resolver.GetProxyForURL(
|
| - GURL("http://foo/"),
|
| - &proxy_info,
|
| - callback.callback(),
|
| - NULL,
|
| - request_log.bound());
|
| + int rv =
|
| + resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info,
|
| + callback.callback(), NULL, request_log.bound());
|
|
|
| EXPECT_EQ(ERR_IO_PENDING, rv);
|
| EXPECT_EQ(OK, callback.WaitForResult());
|
| @@ -230,19 +260,17 @@ TEST_F(ProxyResolverV8TracingTest, TooManyEmptyAlerts) {
|
| BoundTestNetLog request_log;
|
| MockCachingHostResolver host_resolver;
|
| MockErrorObserver* error_observer = new MockErrorObserver;
|
| - ProxyResolverV8Tracing resolver(&host_resolver, error_observer, &log);
|
|
|
| - InitResolver(&resolver, "too_many_empty_alerts.js");
|
| + scoped_ptr<ProxyResolver> resolver =
|
| + CreateResolver(&log, &host_resolver, make_scoped_ptr(error_observer),
|
| + "too_many_empty_alerts.js");
|
|
|
| TestCompletionCallback callback;
|
| ProxyInfo proxy_info;
|
|
|
| - int rv = resolver.GetProxyForURL(
|
| - GURL("http://foo/"),
|
| - &proxy_info,
|
| - callback.callback(),
|
| - NULL,
|
| - request_log.bound());
|
| + int rv =
|
| + resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info,
|
| + callback.callback(), NULL, request_log.bound());
|
|
|
| EXPECT_EQ(ERR_IO_PENDING, rv);
|
| EXPECT_EQ(OK, callback.WaitForResult());
|
| @@ -279,7 +307,6 @@ TEST_F(ProxyResolverV8TracingTest, Dns) {
|
| BoundTestNetLog request_log;
|
| MockCachingHostResolver host_resolver;
|
| MockErrorObserver* error_observer = new MockErrorObserver;
|
| - ProxyResolverV8Tracing resolver(&host_resolver, error_observer, &log);
|
|
|
| host_resolver.rules()->AddRuleForAddressFamily(
|
| "host1", ADDRESS_FAMILY_IPV4, "166.155.144.44");
|
| @@ -293,17 +320,15 @@ TEST_F(ProxyResolverV8TracingTest, Dns) {
|
| "*", ADDRESS_FAMILY_IPV4, "122.133.144.155");
|
| host_resolver.rules()->AddRule("*", "133.122.100.200");
|
|
|
| - InitResolver(&resolver, "dns.js");
|
| + scoped_ptr<ProxyResolver> resolver = CreateResolver(
|
| + &log, &host_resolver, make_scoped_ptr(error_observer), "dns.js");
|
|
|
| TestCompletionCallback callback;
|
| ProxyInfo proxy_info;
|
|
|
| - int rv = resolver.GetProxyForURL(
|
| - GURL("http://foo/"),
|
| - &proxy_info,
|
| - callback.callback(),
|
| - NULL,
|
| - request_log.bound());
|
| + int rv =
|
| + resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info,
|
| + callback.callback(), NULL, request_log.bound());
|
|
|
| EXPECT_EQ(ERR_IO_PENDING, rv);
|
| EXPECT_EQ(OK, callback.WaitForResult());
|
| @@ -356,23 +381,20 @@ TEST_F(ProxyResolverV8TracingTest, DnsChecksCache) {
|
| BoundTestNetLog request_log;
|
| MockCachingHostResolver host_resolver;
|
| MockErrorObserver* error_observer = new MockErrorObserver;
|
| - ProxyResolverV8Tracing resolver(&host_resolver, error_observer, &log);
|
|
|
| host_resolver.rules()->AddRule("foopy", "166.155.144.11");
|
| host_resolver.rules()->AddRule("*", "122.133.144.155");
|
|
|
| - InitResolver(&resolver, "simple_dns.js");
|
| + scoped_ptr<ProxyResolver> resolver = CreateResolver(
|
| + &log, &host_resolver, make_scoped_ptr(error_observer), "simple_dns.js");
|
|
|
| TestCompletionCallback callback1;
|
| TestCompletionCallback callback2;
|
| ProxyInfo proxy_info;
|
|
|
| - int rv = resolver.GetProxyForURL(
|
| - GURL("http://foopy/req1"),
|
| - &proxy_info,
|
| - callback1.callback(),
|
| - NULL,
|
| - request_log.bound());
|
| + int rv =
|
| + resolver->GetProxyForURL(GURL("http://foopy/req1"), &proxy_info,
|
| + callback1.callback(), NULL, request_log.bound());
|
|
|
| EXPECT_EQ(ERR_IO_PENDING, rv);
|
| EXPECT_EQ(OK, callback1.WaitForResult());
|
| @@ -383,12 +405,9 @@ TEST_F(ProxyResolverV8TracingTest, DnsChecksCache) {
|
| // The first request took 2 restarts, hence on g_iteration=3.
|
| EXPECT_EQ("166.155.144.11:3", proxy_info.proxy_server().ToURI());
|
|
|
| - rv = resolver.GetProxyForURL(
|
| - GURL("http://foopy/req2"),
|
| - &proxy_info,
|
| - callback2.callback(),
|
| - NULL,
|
| - request_log.bound());
|
| + rv =
|
| + resolver->GetProxyForURL(GURL("http://foopy/req2"), &proxy_info,
|
| + callback2.callback(), NULL, request_log.bound());
|
|
|
| EXPECT_EQ(ERR_IO_PENDING, rv);
|
| EXPECT_EQ(OK, callback2.WaitForResult());
|
| @@ -413,20 +432,21 @@ TEST_F(ProxyResolverV8TracingTest, FallBackToSynchronous1) {
|
| BoundTestNetLog request_log;
|
| MockCachingHostResolver host_resolver;
|
| MockErrorObserver* error_observer = new MockErrorObserver;
|
| - ProxyResolverV8Tracing resolver(&host_resolver, error_observer, &log);
|
|
|
| host_resolver.rules()->AddRule("host1", "166.155.144.11");
|
| host_resolver.rules()->AddRule("crazy4", "133.199.111.4");
|
| host_resolver.rules()->AddRule("*", "122.133.144.155");
|
|
|
| - InitResolver(&resolver, "global_sideffects1.js");
|
| + scoped_ptr<ProxyResolver> resolver =
|
| + CreateResolver(&log, &host_resolver, make_scoped_ptr(error_observer),
|
| + "global_sideffects1.js");
|
|
|
| TestCompletionCallback callback;
|
| ProxyInfo proxy_info;
|
|
|
| - int rv = resolver.GetProxyForURL(
|
| - GURL("http://foo/"), &proxy_info, callback.callback(), NULL,
|
| - request_log.bound());
|
| + int rv =
|
| + resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info,
|
| + callback.callback(), NULL, request_log.bound());
|
| EXPECT_EQ(ERR_IO_PENDING, rv);
|
| EXPECT_EQ(OK, callback.WaitForResult());
|
|
|
| @@ -465,7 +485,6 @@ TEST_F(ProxyResolverV8TracingTest, FallBackToSynchronous2) {
|
| BoundTestNetLog request_log;
|
| MockCachingHostResolver host_resolver;
|
| MockErrorObserver* error_observer = new MockErrorObserver;
|
| - ProxyResolverV8Tracing resolver(&host_resolver, error_observer, &log);
|
|
|
| host_resolver.rules()->AddRule("host1", "166.155.144.11");
|
| host_resolver.rules()->AddRule("host2", "166.155.144.22");
|
| @@ -473,14 +492,16 @@ TEST_F(ProxyResolverV8TracingTest, FallBackToSynchronous2) {
|
| host_resolver.rules()->AddRule("host4", "166.155.144.44");
|
| host_resolver.rules()->AddRule("*", "122.133.144.155");
|
|
|
| - InitResolver(&resolver, "global_sideffects2.js");
|
| + scoped_ptr<ProxyResolver> resolver =
|
| + CreateResolver(&log, &host_resolver, make_scoped_ptr(error_observer),
|
| + "global_sideffects2.js");
|
|
|
| TestCompletionCallback callback;
|
| ProxyInfo proxy_info;
|
|
|
| - int rv = resolver.GetProxyForURL(
|
| - GURL("http://foo/"), &proxy_info, callback.callback(), NULL,
|
| - request_log.bound());
|
| + int rv =
|
| + resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info,
|
| + callback.callback(), NULL, request_log.bound());
|
| EXPECT_EQ(ERR_IO_PENDING, rv);
|
| EXPECT_EQ(OK, callback.WaitForResult());
|
|
|
| @@ -505,19 +526,20 @@ TEST_F(ProxyResolverV8TracingTest, InfiniteDNSSequence) {
|
| BoundTestNetLog request_log;
|
| MockCachingHostResolver host_resolver;
|
| MockErrorObserver* error_observer = new MockErrorObserver;
|
| - ProxyResolverV8Tracing resolver(&host_resolver, error_observer, &log);
|
|
|
| host_resolver.rules()->AddRule("host*", "166.155.144.11");
|
| host_resolver.rules()->AddRule("*", "122.133.144.155");
|
|
|
| - InitResolver(&resolver, "global_sideffects3.js");
|
| + scoped_ptr<ProxyResolver> resolver =
|
| + CreateResolver(&log, &host_resolver, make_scoped_ptr(error_observer),
|
| + "global_sideffects3.js");
|
|
|
| TestCompletionCallback callback;
|
| ProxyInfo proxy_info;
|
|
|
| - int rv = resolver.GetProxyForURL(
|
| - GURL("http://foo/"), &proxy_info, callback.callback(), NULL,
|
| - request_log.bound());
|
| + int rv =
|
| + resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info,
|
| + callback.callback(), NULL, request_log.bound());
|
| EXPECT_EQ(ERR_IO_PENDING, rv);
|
| EXPECT_EQ(OK, callback.WaitForResult());
|
|
|
| @@ -548,19 +570,20 @@ TEST_F(ProxyResolverV8TracingTest, InfiniteDNSSequence2) {
|
| BoundTestNetLog request_log;
|
| MockCachingHostResolver host_resolver;
|
| MockErrorObserver* error_observer = new MockErrorObserver;
|
| - ProxyResolverV8Tracing resolver(&host_resolver, error_observer, &log);
|
|
|
| host_resolver.rules()->AddRule("host*", "166.155.144.11");
|
| host_resolver.rules()->AddRule("*", "122.133.144.155");
|
|
|
| - InitResolver(&resolver, "global_sideffects4.js");
|
| + scoped_ptr<ProxyResolver> resolver =
|
| + CreateResolver(&log, &host_resolver, make_scoped_ptr(error_observer),
|
| + "global_sideffects4.js");
|
|
|
| TestCompletionCallback callback;
|
| ProxyInfo proxy_info;
|
|
|
| - int rv = resolver.GetProxyForURL(
|
| - GURL("http://foo/"), &proxy_info, callback.callback(), NULL,
|
| - request_log.bound());
|
| + int rv =
|
| + resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info,
|
| + callback.callback(), NULL, request_log.bound());
|
| EXPECT_EQ(ERR_IO_PENDING, rv);
|
| EXPECT_EQ(OK, callback.WaitForResult());
|
|
|
| @@ -582,12 +605,13 @@ void DnsDuringInitHelper(bool synchronous_host_resolver) {
|
| MockCachingHostResolver host_resolver;
|
| host_resolver.set_synchronous_mode(synchronous_host_resolver);
|
| MockErrorObserver* error_observer = new MockErrorObserver;
|
| - ProxyResolverV8Tracing resolver(&host_resolver, error_observer, &log);
|
|
|
| host_resolver.rules()->AddRule("host1", "91.13.12.1");
|
| host_resolver.rules()->AddRule("host2", "91.13.12.2");
|
|
|
| - InitResolver(&resolver, "dns_during_init.js");
|
| + scoped_ptr<ProxyResolver> resolver =
|
| + CreateResolver(&log, &host_resolver, make_scoped_ptr(error_observer),
|
| + "dns_during_init.js");
|
|
|
| // Initialization did 2 dnsResolves.
|
| EXPECT_EQ(2u, host_resolver.num_resolve());
|
| @@ -601,9 +625,9 @@ void DnsDuringInitHelper(bool synchronous_host_resolver) {
|
| TestCompletionCallback callback;
|
| ProxyInfo proxy_info;
|
|
|
| - int rv = resolver.GetProxyForURL(
|
| - GURL("http://foo/"), &proxy_info, callback.callback(), NULL,
|
| - request_log.bound());
|
| + int rv =
|
| + resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info,
|
| + callback.callback(), NULL, request_log.bound());
|
| EXPECT_EQ(ERR_IO_PENDING, rv);
|
| EXPECT_EQ(OK, callback.WaitForResult());
|
|
|
| @@ -651,25 +675,25 @@ void CrashCallback(int) {
|
| TEST_F(ProxyResolverV8TracingTest, CancelAll) {
|
| MockCachingHostResolver host_resolver;
|
| MockErrorObserver* error_observer = new MockErrorObserver;
|
| - ProxyResolverV8Tracing resolver(&host_resolver, error_observer, NULL);
|
|
|
| host_resolver.rules()->AddSimulatedFailure("*");
|
|
|
| - InitResolver(&resolver, "dns.js");
|
| + scoped_ptr<ProxyResolver> resolver = CreateResolver(
|
| + nullptr, &host_resolver, make_scoped_ptr(error_observer), "dns.js");
|
|
|
| const size_t kNumRequests = 5;
|
| ProxyInfo proxy_info[kNumRequests];
|
| ProxyResolver::RequestHandle request[kNumRequests];
|
|
|
| for (size_t i = 0; i < kNumRequests; ++i) {
|
| - int rv = resolver.GetProxyForURL(
|
| - GURL("http://foo/"), &proxy_info[i],
|
| - base::Bind(&CrashCallback), &request[i], BoundNetLog());
|
| + int rv = resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info[i],
|
| + base::Bind(&CrashCallback), &request[i],
|
| + BoundNetLog());
|
| EXPECT_EQ(ERR_IO_PENDING, rv);
|
| }
|
|
|
| for (size_t i = 0; i < kNumRequests; ++i) {
|
| - resolver.CancelRequest(request[i]);
|
| + resolver->CancelRequest(request[i]);
|
| }
|
| }
|
|
|
| @@ -679,11 +703,11 @@ TEST_F(ProxyResolverV8TracingTest, CancelAll) {
|
| TEST_F(ProxyResolverV8TracingTest, CancelSome) {
|
| MockCachingHostResolver host_resolver;
|
| MockErrorObserver* error_observer = new MockErrorObserver;
|
| - ProxyResolverV8Tracing resolver(&host_resolver, error_observer, NULL);
|
|
|
| host_resolver.rules()->AddSimulatedFailure("*");
|
|
|
| - InitResolver(&resolver, "dns.js");
|
| + scoped_ptr<ProxyResolver> resolver = CreateResolver(
|
| + nullptr, &host_resolver, make_scoped_ptr(error_observer), "dns.js");
|
|
|
| ProxyInfo proxy_info1;
|
| ProxyInfo proxy_info2;
|
| @@ -691,17 +715,16 @@ TEST_F(ProxyResolverV8TracingTest, CancelSome) {
|
| ProxyResolver::RequestHandle request2;
|
| TestCompletionCallback callback;
|
|
|
| - int rv = resolver.GetProxyForURL(
|
| - GURL("http://foo/"), &proxy_info1,
|
| - base::Bind(&CrashCallback), &request1, BoundNetLog());
|
| + int rv = resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info1,
|
| + base::Bind(&CrashCallback), &request1,
|
| + BoundNetLog());
|
| EXPECT_EQ(ERR_IO_PENDING, rv);
|
|
|
| - rv = resolver.GetProxyForURL(
|
| - GURL("http://foo/"), &proxy_info2,
|
| - callback.callback(), &request2, BoundNetLog());
|
| + rv = resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info2,
|
| + callback.callback(), &request2, BoundNetLog());
|
| EXPECT_EQ(ERR_IO_PENDING, rv);
|
|
|
| - resolver.CancelRequest(request1);
|
| + resolver->CancelRequest(request1);
|
|
|
| EXPECT_EQ(OK, callback.WaitForResult());
|
| }
|
| @@ -711,11 +734,11 @@ TEST_F(ProxyResolverV8TracingTest, CancelSome) {
|
| TEST_F(ProxyResolverV8TracingTest, CancelWhilePendingCompletionTask) {
|
| MockCachingHostResolver host_resolver;
|
| MockErrorObserver* error_observer = new MockErrorObserver;
|
| - ProxyResolverV8Tracing resolver(&host_resolver, error_observer, NULL);
|
|
|
| host_resolver.rules()->AddSimulatedFailure("*");
|
|
|
| - InitResolver(&resolver, "error.js");
|
| + scoped_ptr<ProxyResolver> resolver = CreateResolver(
|
| + nullptr, &host_resolver, make_scoped_ptr(error_observer), "error.js");
|
|
|
| ProxyInfo proxy_info1;
|
| ProxyInfo proxy_info2;
|
| @@ -725,14 +748,13 @@ TEST_F(ProxyResolverV8TracingTest, CancelWhilePendingCompletionTask) {
|
| ProxyResolver::RequestHandle request3;
|
| TestCompletionCallback callback;
|
|
|
| - int rv = resolver.GetProxyForURL(
|
| - GURL("http://foo/"), &proxy_info1,
|
| - base::Bind(&CrashCallback), &request1, BoundNetLog());
|
| + int rv = resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info1,
|
| + base::Bind(&CrashCallback), &request1,
|
| + BoundNetLog());
|
| EXPECT_EQ(ERR_IO_PENDING, rv);
|
|
|
| - rv = resolver.GetProxyForURL(
|
| - GURL("http://throw-an-error/"), &proxy_info2,
|
| - callback.callback(), &request2, BoundNetLog());
|
| + rv = resolver->GetProxyForURL(GURL("http://throw-an-error/"), &proxy_info2,
|
| + callback.callback(), &request2, BoundNetLog());
|
| EXPECT_EQ(ERR_IO_PENDING, rv);
|
|
|
| // Wait until the first request has finished running on the worker thread.
|
| @@ -741,14 +763,14 @@ TEST_F(ProxyResolverV8TracingTest, CancelWhilePendingCompletionTask) {
|
|
|
| // Cancel the first request, while it has a pending completion task on
|
| // the origin thread.
|
| - resolver.CancelRequest(request1);
|
| + resolver->CancelRequest(request1);
|
|
|
| EXPECT_EQ(ERR_PAC_SCRIPT_FAILED, callback.WaitForResult());
|
|
|
| // Start another request, to make sure it is able to complete.
|
| - rv = resolver.GetProxyForURL(
|
| - GURL("http://i-have-no-idea-what-im-doing/"), &proxy_info3,
|
| - callback.callback(), &request3, BoundNetLog());
|
| + rv = resolver->GetProxyForURL(GURL("http://i-have-no-idea-what-im-doing/"),
|
| + &proxy_info3, callback.callback(), &request3,
|
| + BoundNetLog());
|
| EXPECT_EQ(ERR_IO_PENDING, rv);
|
|
|
| EXPECT_EQ(OK, callback.WaitForResult());
|
| @@ -829,33 +851,33 @@ class BlockableHostResolver : public HostResolver {
|
| TEST_F(ProxyResolverV8TracingTest, CancelWhileOutstandingNonBlockingDns) {
|
| BlockableHostResolver host_resolver;
|
| MockErrorObserver* error_observer = new MockErrorObserver;
|
| - ProxyResolverV8Tracing resolver(&host_resolver, error_observer, NULL);
|
|
|
| - InitResolver(&resolver, "dns.js");
|
| + scoped_ptr<ProxyResolver> resolver = CreateResolver(
|
| + nullptr, &host_resolver, make_scoped_ptr(error_observer), "dns.js");
|
|
|
| ProxyInfo proxy_info1;
|
| ProxyInfo proxy_info2;
|
| ProxyResolver::RequestHandle request1;
|
| ProxyResolver::RequestHandle request2;
|
|
|
| - int rv = resolver.GetProxyForURL(
|
| - GURL("http://foo/req1"), &proxy_info1,
|
| - base::Bind(&CrashCallback), &request1, BoundNetLog());
|
| + int rv = resolver->GetProxyForURL(GURL("http://foo/req1"), &proxy_info1,
|
| + base::Bind(&CrashCallback), &request1,
|
| + BoundNetLog());
|
|
|
| EXPECT_EQ(ERR_IO_PENDING, rv);
|
|
|
| host_resolver.WaitUntilRequestIsReceived();
|
|
|
| - rv = resolver.GetProxyForURL(
|
| - GURL("http://foo/req2"), &proxy_info2,
|
| - base::Bind(&CrashCallback), &request2, BoundNetLog());
|
| + rv = resolver->GetProxyForURL(GURL("http://foo/req2"), &proxy_info2,
|
| + base::Bind(&CrashCallback), &request2,
|
| + BoundNetLog());
|
|
|
| EXPECT_EQ(ERR_IO_PENDING, rv);
|
|
|
| host_resolver.WaitUntilRequestIsReceived();
|
|
|
| - resolver.CancelRequest(request1);
|
| - resolver.CancelRequest(request2);
|
| + resolver->CancelRequest(request1);
|
| + resolver->CancelRequest(request2);
|
|
|
| EXPECT_EQ(2, host_resolver.num_cancelled_requests());
|
|
|
| @@ -864,7 +886,7 @@ TEST_F(ProxyResolverV8TracingTest, CancelWhileOutstandingNonBlockingDns) {
|
| // should have been cancelled.
|
| }
|
|
|
| -void CancelRequestAndPause(ProxyResolverV8Tracing* resolver,
|
| +void CancelRequestAndPause(ProxyResolver* resolver,
|
| ProxyResolver::RequestHandle request) {
|
| resolver->CancelRequest(request);
|
|
|
| @@ -880,21 +902,21 @@ void CancelRequestAndPause(ProxyResolverV8Tracing* resolver,
|
| TEST_F(ProxyResolverV8TracingTest, CancelWhileBlockedInNonBlockingDns) {
|
| BlockableHostResolver host_resolver;
|
| MockErrorObserver* error_observer = new MockErrorObserver;
|
| - ProxyResolverV8Tracing resolver(&host_resolver, error_observer, NULL);
|
|
|
| - InitResolver(&resolver, "dns.js");
|
| + scoped_ptr<ProxyResolver> resolver = CreateResolver(
|
| + nullptr, &host_resolver, make_scoped_ptr(error_observer), "dns.js");
|
|
|
| ProxyInfo proxy_info;
|
| ProxyResolver::RequestHandle request;
|
|
|
| - int rv = resolver.GetProxyForURL(
|
| - GURL("http://foo/"), &proxy_info,
|
| - base::Bind(&CrashCallback), &request, BoundNetLog());
|
| + int rv = resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info,
|
| + base::Bind(&CrashCallback), &request,
|
| + BoundNetLog());
|
|
|
| EXPECT_EQ(ERR_IO_PENDING, rv);
|
|
|
| host_resolver.SetAction(
|
| - base::Bind(CancelRequestAndPause, &resolver, request));
|
| + base::Bind(CancelRequestAndPause, resolver.get(), request));
|
|
|
| host_resolver.WaitUntilRequestIsReceived();
|
|
|
| @@ -909,16 +931,16 @@ TEST_F(ProxyResolverV8TracingTest, CancelWhileBlockedInNonBlockingDns) {
|
| TEST_F(ProxyResolverV8TracingTest, CancelWhileBlockedInNonBlockingDns2) {
|
| MockCachingHostResolver host_resolver;
|
| MockErrorObserver* error_observer = new MockErrorObserver;
|
| - ProxyResolverV8Tracing resolver(&host_resolver, error_observer, NULL);
|
|
|
| - InitResolver(&resolver, "dns.js");
|
| + scoped_ptr<ProxyResolver> resolver = CreateResolver(
|
| + nullptr, &host_resolver, make_scoped_ptr(error_observer), "dns.js");
|
|
|
| ProxyInfo proxy_info;
|
| ProxyResolver::RequestHandle request;
|
|
|
| - int rv = resolver.GetProxyForURL(
|
| - GURL("http://foo/"), &proxy_info,
|
| - base::Bind(&CrashCallback), &request, BoundNetLog());
|
| + int rv = resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info,
|
| + base::Bind(&CrashCallback), &request,
|
| + BoundNetLog());
|
|
|
| EXPECT_EQ(ERR_IO_PENDING, rv);
|
|
|
| @@ -926,28 +948,72 @@ TEST_F(ProxyResolverV8TracingTest, CancelWhileBlockedInNonBlockingDns2) {
|
| // work whatever the delay is here, but it is most useful if the delay
|
| // is large enough to allow a task to be posted back.
|
| base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(10));
|
| - resolver.CancelRequest(request);
|
| + resolver->CancelRequest(request);
|
|
|
| EXPECT_EQ(0u, host_resolver.num_resolve());
|
| }
|
|
|
| -TEST_F(ProxyResolverV8TracingTest, CancelSetPacWhileOutstandingBlockingDns) {
|
| +TEST_F(ProxyResolverV8TracingTest,
|
| + CancelCreateResolverWhileOutstandingBlockingDns) {
|
| BlockableHostResolver host_resolver;
|
| MockErrorObserver* error_observer = new MockErrorObserver;
|
|
|
| - ProxyResolverV8Tracing resolver(&host_resolver, error_observer, NULL);
|
| + SingleShotProxyResolverFactoryV8Tracing factory(
|
| + &host_resolver, nullptr, ProxyResolver::LoadStateChangedCallback(),
|
| + make_scoped_ptr(error_observer));
|
|
|
| - int rv =
|
| - resolver.SetPacScript(LoadScriptData("dns_during_init.js"),
|
| - base::Bind(&CrashCallback));
|
| + scoped_ptr<ProxyResolver> resolver;
|
| + scoped_ptr<ProxyResolverFactory::Request> request;
|
| + int rv = factory.CreateProxyResolver(LoadScriptData("dns_during_init.js"),
|
| + &resolver, base::Bind(&CrashCallback),
|
| + &request);
|
| EXPECT_EQ(ERR_IO_PENDING, rv);
|
|
|
| host_resolver.WaitUntilRequestIsReceived();
|
|
|
| - resolver.CancelSetPacScript();
|
| + request.reset();
|
| EXPECT_EQ(1, host_resolver.num_cancelled_requests());
|
| }
|
|
|
| +TEST_F(ProxyResolverV8TracingTest, DeleteFactoryWhileOutstandingBlockingDns) {
|
| + BlockableHostResolver host_resolver;
|
| + MockErrorObserver* error_observer = new MockErrorObserver;
|
| +
|
| + scoped_ptr<ProxyResolver> resolver;
|
| + scoped_ptr<ProxyResolverFactory::Request> request;
|
| + {
|
| + SingleShotProxyResolverFactoryV8Tracing factory(
|
| + &host_resolver, nullptr, ProxyResolver::LoadStateChangedCallback(),
|
| + make_scoped_ptr(error_observer));
|
| +
|
| + int rv = factory.CreateProxyResolver(LoadScriptData("dns_during_init.js"),
|
| + &resolver, base::Bind(&CrashCallback),
|
| + &request);
|
| + EXPECT_EQ(ERR_IO_PENDING, rv);
|
| + host_resolver.WaitUntilRequestIsReceived();
|
| + }
|
| + EXPECT_EQ(1, host_resolver.num_cancelled_requests());
|
| +}
|
| +
|
| +TEST_F(ProxyResolverV8TracingTest, ErrorLoadingScript) {
|
| + BlockableHostResolver host_resolver;
|
| + MockErrorObserver* error_observer = new MockErrorObserver;
|
| +
|
| + SingleShotProxyResolverFactoryV8Tracing factory(
|
| + &host_resolver, nullptr, ProxyResolver::LoadStateChangedCallback(),
|
| + make_scoped_ptr(error_observer));
|
| +
|
| + scoped_ptr<ProxyResolver> resolver;
|
| + scoped_ptr<ProxyResolverFactory::Request> request;
|
| + TestCompletionCallback callback;
|
| + int rv =
|
| + factory.CreateProxyResolver(LoadScriptData("error_on_load.js"), &resolver,
|
| + callback.callback(), &request);
|
| + EXPECT_EQ(ERR_IO_PENDING, rv);
|
| + EXPECT_EQ(ERR_PAC_SCRIPT_FAILED, callback.WaitForResult());
|
| + EXPECT_FALSE(resolver);
|
| +}
|
| +
|
| // This tests that the execution of a PAC script is terminated when the DNS
|
| // dependencies are missing. If the test fails, then it will hang.
|
| TEST_F(ProxyResolverV8TracingTest, Terminate) {
|
| @@ -955,22 +1021,19 @@ TEST_F(ProxyResolverV8TracingTest, Terminate) {
|
| BoundTestNetLog request_log;
|
| MockCachingHostResolver host_resolver;
|
| MockErrorObserver* error_observer = new MockErrorObserver;
|
| - ProxyResolverV8Tracing resolver(&host_resolver, error_observer, &log);
|
|
|
| host_resolver.rules()->AddRule("host1", "182.111.0.222");
|
| host_resolver.rules()->AddRule("host2", "111.33.44.55");
|
|
|
| - InitResolver(&resolver, "terminate.js");
|
| + scoped_ptr<ProxyResolver> resolver = CreateResolver(
|
| + &log, &host_resolver, make_scoped_ptr(error_observer), "terminate.js");
|
|
|
| TestCompletionCallback callback;
|
| ProxyInfo proxy_info;
|
|
|
| - int rv = resolver.GetProxyForURL(
|
| - GURL("http://foopy/req1"),
|
| - &proxy_info,
|
| - callback.callback(),
|
| - NULL,
|
| - request_log.bound());
|
| + int rv =
|
| + resolver->GetProxyForURL(GURL("http://foopy/req1"), &proxy_info,
|
| + callback.callback(), NULL, request_log.bound());
|
|
|
| EXPECT_EQ(ERR_IO_PENDING, rv);
|
| EXPECT_EQ(OK, callback.WaitForResult());
|
| @@ -1007,39 +1070,39 @@ TEST_F(ProxyResolverV8TracingTest, MultipleResolvers) {
|
| host_resolver0.rules()->AddRuleForAddressFamily(
|
| "*", ADDRESS_FAMILY_IPV4, "122.133.144.155");
|
| host_resolver0.rules()->AddRule("*", "133.122.100.200");
|
| - ProxyResolverV8Tracing resolver0(
|
| - &host_resolver0, new MockErrorObserver, NULL);
|
| - InitResolver(&resolver0, "dns.js");
|
| + scoped_ptr<ProxyResolver> resolver0 =
|
| + CreateResolver(nullptr, &host_resolver0,
|
| + make_scoped_ptr(new MockErrorObserver), "dns.js");
|
|
|
| // ------------------------
|
| // Setup resolver1
|
| // ------------------------
|
| - ProxyResolverV8Tracing resolver1(
|
| - &host_resolver0, new MockErrorObserver, NULL);
|
| - InitResolver(&resolver1, "dns.js");
|
| + scoped_ptr<ProxyResolver> resolver1 =
|
| + CreateResolver(nullptr, &host_resolver0,
|
| + make_scoped_ptr(new MockErrorObserver), "dns.js");
|
|
|
| // ------------------------
|
| // Setup resolver2
|
| // ------------------------
|
| - ProxyResolverV8Tracing resolver2(
|
| - &host_resolver0, new MockErrorObserver, NULL);
|
| - InitResolver(&resolver2, "simple.js");
|
| + scoped_ptr<ProxyResolver> resolver2 =
|
| + CreateResolver(nullptr, &host_resolver0,
|
| + make_scoped_ptr(new MockErrorObserver), "simple.js");
|
|
|
| // ------------------------
|
| // Setup resolver3
|
| // ------------------------
|
| MockHostResolver host_resolver3;
|
| host_resolver3.rules()->AddRule("foo", "166.155.144.33");
|
| - ProxyResolverV8Tracing resolver3(
|
| - &host_resolver3, new MockErrorObserver, NULL);
|
| - InitResolver(&resolver3, "simple_dns.js");
|
| + scoped_ptr<ProxyResolver> resolver3 =
|
| + CreateResolver(nullptr, &host_resolver3,
|
| + make_scoped_ptr(new MockErrorObserver), "simple_dns.js");
|
|
|
| // ------------------------
|
| // Queue up work for each resolver (which will be running in parallel).
|
| // ------------------------
|
|
|
| - ProxyResolverV8Tracing* resolver[] = {
|
| - &resolver0, &resolver1, &resolver2, &resolver3,
|
| + ProxyResolver* resolver[] = {
|
| + resolver0.get(), resolver1.get(), resolver2.get(), resolver3.get(),
|
| };
|
|
|
| const size_t kNumResolvers = arraysize(resolver);
|
|
|