Index: net/proxy/proxy_resolver_mojo_unittest.cc |
diff --git a/net/proxy/proxy_resolver_mojo_unittest.cc b/net/proxy/proxy_resolver_mojo_unittest.cc |
index 4de66fd70f7daa67455a56d17cd53a2506d1bfb6..7112fc751523a2a734feaedb865971035acd0495 100644 |
--- a/net/proxy/proxy_resolver_mojo_unittest.cc |
+++ b/net/proxy/proxy_resolver_mojo_unittest.cc |
@@ -10,6 +10,7 @@ |
#include "base/bind.h" |
#include "base/memory/scoped_ptr.h" |
+#include "base/memory/scoped_vector.h" |
#include "base/run_loop.h" |
#include "base/stl_util.h" |
#include "mojo/common/common_type_converters.h" |
@@ -73,19 +74,23 @@ class MockMojoProxyResolver : public interfaces::ProxyResolver { |
int error, |
mojo::Array<interfaces::ProxyServerPtr> proxy_servers); |
void CloseRequestClient(const GURL& url); |
+ void BlockProxyRequest(const GURL& url); |
void Disconnect() { binding_.Close(); } |
void WaitForSetPacScript(); |
+ void ClearBlockedClients(); |
+ |
private: |
struct ProxyResults { |
- explicit ProxyResults(bool close) |
- : close(close), error(OK), proxy_servers() {} |
+ ProxyResults(bool close, bool block) |
+ : close(close), block(block), error(OK), proxy_servers() {} |
ProxyResults(int err, mojo::Array<interfaces::ProxyServerPtr>& s) |
- : close(false), error(err), proxy_servers(s.Pass()) {} |
+ : close(false), block(false), error(err), proxy_servers(s.Pass()) {} |
bool close; |
+ bool block; |
int error; |
mojo::Array<interfaces::ProxyServerPtr> proxy_servers; |
}; |
@@ -104,6 +109,7 @@ class MockMojoProxyResolver : public interfaces::ProxyResolver { |
std::map<GURL, ProxyResults*> proxy_results_; |
+ ScopedVector<interfaces::ProxyResolverRequestClientPtr> blocked_clients_; |
mojo::Binding<interfaces::ProxyResolver> binding_; |
}; |
@@ -115,7 +121,11 @@ void MockMojoProxyResolver::AddProxyResult( |
} |
void MockMojoProxyResolver::CloseRequestClient(const GURL& url) { |
- proxy_results_[url] = new ProxyResults(true); |
+ proxy_results_[url] = new ProxyResults(true, false); |
+} |
+ |
+void MockMojoProxyResolver::BlockProxyRequest(const GURL& url) { |
+ proxy_results_[url] = new ProxyResults(false, true); |
} |
void MockMojoProxyResolver::AddPacScriptAction(SetPacScriptAction action) { |
@@ -155,6 +165,10 @@ void MockMojoProxyResolver::WaitForSetPacScript() { |
run_loop.Run(); |
} |
+void MockMojoProxyResolver::ClearBlockedClients() { |
+ blocked_clients_.clear(); |
+} |
+ |
void MockMojoProxyResolver::GetProxyForUrl( |
const mojo::String& url, |
interfaces::ProxyResolverRequestClientPtr client) { |
@@ -162,6 +176,10 @@ void MockMojoProxyResolver::GetProxyForUrl( |
ASSERT_NE(nullptr, result); |
if (result->close) { |
client.reset(); |
+ } else if (result->block) { |
+ client->LoadStateChanged(LOAD_STATE_RESOLVING_HOST_IN_PROXY_SCRIPT); |
+ blocked_clients_.push_back( |
+ new interfaces::ProxyResolverRequestClientPtr(client.Pass())); |
} else { |
client->ReportResult(result->error, result->proxy_servers.Clone()); |
} |
@@ -238,6 +256,7 @@ class Request { |
int error() const { return error_; } |
const ProxyInfo& results() const { return results_; } |
+ LoadState load_state() { return resolver_->GetLoadState(handle_); } |
private: |
// Completion callback for ProxyResolverMojo::Resolve. |
@@ -439,6 +458,19 @@ TEST_F(ProxyResolverMojoTest, GetProxyForURL) { |
EXPECT_EQ("DIRECT", request->results().ToPacString()); |
} |
+TEST_F(ProxyResolverMojoTest, GetProxyForURL_LoadState) { |
+ scoped_ptr<Request> request(MakeRequest(GURL("http://www.example.com"))); |
+ mojo_proxy_resolver_factory_.GetMockResolver()->BlockProxyRequest( |
+ GURL("http://www.example.com")); |
+ EXPECT_EQ(ERR_IO_PENDING, request->Resolve()); |
+ EXPECT_EQ(LOAD_STATE_RESOLVING_PROXY_FOR_URL, request->load_state()); |
+ while (request->load_state() == LOAD_STATE_RESOLVING_PROXY_FOR_URL) |
+ base::RunLoop().RunUntilIdle(); |
+ EXPECT_EQ(LOAD_STATE_RESOLVING_HOST_IN_PROXY_SCRIPT, request->load_state()); |
+ mojo_proxy_resolver_factory_.GetMockResolver()->ClearBlockedClients(); |
+ EXPECT_EQ(ERR_PAC_SCRIPT_FAILED, request->WaitForResult()); |
+} |
+ |
TEST_F(ProxyResolverMojoTest, GetProxyForURL_MultipleResults) { |
static const char kPacString[] = |
"PROXY foo1:80;DIRECT;SOCKS foo2:1234;" |