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

Side by Side Diff: net/proxy/proxy_resolver_mojo_unittest.cc

Issue 939503004: Add LoadState reporting to the mojo proxy resolver. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@proxy-resolver-mojo
Patch Set: rebase Created 5 years, 9 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 unified diff | Download patch
« no previous file with comments | « net/proxy/proxy_resolver_mojo.cc ('k') | net/proxy/proxy_resolver_v8_tracing.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/proxy/proxy_resolver_mojo.h" 5 #include "net/proxy/proxy_resolver_mojo.h"
6 6
7 #include <list> 7 #include <list>
8 #include <map> 8 #include <map>
9 #include <queue> 9 #include <queue>
10 #include <string> 10 #include <string>
11 11
12 #include "base/bind.h" 12 #include "base/bind.h"
13 #include "base/memory/scoped_ptr.h" 13 #include "base/memory/scoped_ptr.h"
14 #include "base/memory/scoped_vector.h"
14 #include "base/run_loop.h" 15 #include "base/run_loop.h"
15 #include "base/stl_util.h" 16 #include "base/stl_util.h"
16 #include "mojo/common/common_type_converters.h" 17 #include "mojo/common/common_type_converters.h"
17 #include "net/base/net_errors.h" 18 #include "net/base/net_errors.h"
18 #include "net/base/net_log.h" 19 #include "net/base/net_log.h"
19 #include "net/base/test_completion_callback.h" 20 #include "net/base/test_completion_callback.h"
20 #include "net/dns/mock_host_resolver.h" 21 #include "net/dns/mock_host_resolver.h"
21 #include "net/proxy/mojo_proxy_resolver_factory.h" 22 #include "net/proxy/mojo_proxy_resolver_factory.h"
22 #include "net/proxy/mojo_proxy_type_converters.h" 23 #include "net/proxy/mojo_proxy_type_converters.h"
23 #include "net/proxy/proxy_info.h" 24 #include "net/proxy/proxy_info.h"
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
59 60
60 struct GetProxyForUrlAction { 61 struct GetProxyForUrlAction {
61 enum Action { 62 enum Action {
62 COMPLETE, 63 COMPLETE,
63 // Drop the request by closing the reply channel. 64 // Drop the request by closing the reply channel.
64 DROP, 65 DROP,
65 // Disconnect the service. 66 // Disconnect the service.
66 DISCONNECT, 67 DISCONNECT,
67 // Wait for the client pipe to be disconnected. 68 // Wait for the client pipe to be disconnected.
68 WAIT_FOR_CLIENT_DISCONNECT, 69 WAIT_FOR_CLIENT_DISCONNECT,
70 // Send a LoadStateChanged message and keep the client pipe open.
71 SEND_LOAD_STATE_AND_BLOCK,
69 }; 72 };
70 73
71 GetProxyForUrlAction() {} 74 GetProxyForUrlAction() {}
72 GetProxyForUrlAction(const GetProxyForUrlAction& old) { 75 GetProxyForUrlAction(const GetProxyForUrlAction& old) {
73 action = old.action; 76 action = old.action;
74 error = old.error; 77 error = old.error;
75 expected_url = old.expected_url; 78 expected_url = old.expected_url;
76 proxy_servers = old.proxy_servers.Clone(); 79 proxy_servers = old.proxy_servers.Clone();
77 } 80 }
78 81
(...skipping 27 matching lines...) Expand all
106 return result; 109 return result;
107 } 110 }
108 111
109 static GetProxyForUrlAction WaitForClientDisconnect(const GURL& url) { 112 static GetProxyForUrlAction WaitForClientDisconnect(const GURL& url) {
110 GetProxyForUrlAction result; 113 GetProxyForUrlAction result;
111 result.expected_url = url; 114 result.expected_url = url;
112 result.action = WAIT_FOR_CLIENT_DISCONNECT; 115 result.action = WAIT_FOR_CLIENT_DISCONNECT;
113 return result; 116 return result;
114 } 117 }
115 118
119 static GetProxyForUrlAction SendLoadStateChanged(const GURL& url) {
120 GetProxyForUrlAction result;
121 result.expected_url = url;
122 result.action = SEND_LOAD_STATE_AND_BLOCK;
123 return result;
124 }
125
116 Action action = COMPLETE; 126 Action action = COMPLETE;
117 Error error = OK; 127 Error error = OK;
118 mojo::Array<interfaces::ProxyServerPtr> proxy_servers; 128 mojo::Array<interfaces::ProxyServerPtr> proxy_servers;
119 GURL expected_url; 129 GURL expected_url;
120 }; 130 };
121 131
122 class MockMojoProxyResolver : public interfaces::ProxyResolver { 132 class MockMojoProxyResolver : public interfaces::ProxyResolver {
123 public: 133 public:
124 explicit MockMojoProxyResolver( 134 explicit MockMojoProxyResolver(
125 mojo::InterfaceRequest<interfaces::ProxyResolver> req); 135 mojo::InterfaceRequest<interfaces::ProxyResolver> req);
126 ~MockMojoProxyResolver() override; 136 ~MockMojoProxyResolver() override;
127 137
128 void AddPacScriptAction(SetPacScriptAction action); 138 void AddPacScriptAction(SetPacScriptAction action);
129 // Returned script data is UTF8. 139 // Returned script data is UTF8.
130 std::string pac_script_data() { return pac_script_data_; } 140 std::string pac_script_data() { return pac_script_data_; }
131 141
132 void AddGetProxyAction(GetProxyForUrlAction action); 142 void AddGetProxyAction(GetProxyForUrlAction action);
133 143
134 void WaitForNextRequest(); 144 void WaitForNextRequest();
135 145
146 void ClearBlockedClients();
147
136 private: 148 private:
137 // Overridden from interfaces::ProxyResolver: 149 // Overridden from interfaces::ProxyResolver:
138 void SetPacScript(const mojo::String& data, 150 void SetPacScript(const mojo::String& data,
139 const mojo::Callback<void(int32_t)>& callback) override; 151 const mojo::Callback<void(int32_t)>& callback) override;
140 void GetProxyForUrl( 152 void GetProxyForUrl(
141 const mojo::String& url, 153 const mojo::String& url,
142 interfaces::ProxyResolverRequestClientPtr client) override; 154 interfaces::ProxyResolverRequestClientPtr client) override;
143 155
144 void WakeWaiter(); 156 void WakeWaiter();
145 157
146 std::string pac_script_data_; 158 std::string pac_script_data_;
147 std::queue<SetPacScriptAction> pac_script_actions_; 159 std::queue<SetPacScriptAction> pac_script_actions_;
148 160
149 std::queue<GetProxyForUrlAction> get_proxy_actions_; 161 std::queue<GetProxyForUrlAction> get_proxy_actions_;
150 162
151 base::Closure quit_closure_; 163 base::Closure quit_closure_;
152 164
165 ScopedVector<interfaces::ProxyResolverRequestClientPtr> blocked_clients_;
153 mojo::Binding<interfaces::ProxyResolver> binding_; 166 mojo::Binding<interfaces::ProxyResolver> binding_;
154 }; 167 };
155 168
156 MockMojoProxyResolver::MockMojoProxyResolver( 169 MockMojoProxyResolver::MockMojoProxyResolver(
157 mojo::InterfaceRequest<interfaces::ProxyResolver> req) 170 mojo::InterfaceRequest<interfaces::ProxyResolver> req)
158 : binding_(this, req.Pass()) { 171 : binding_(this, req.Pass()) {
159 } 172 }
160 173
161 MockMojoProxyResolver::~MockMojoProxyResolver() { 174 MockMojoProxyResolver::~MockMojoProxyResolver() {
162 EXPECT_TRUE(pac_script_actions_.empty()) 175 EXPECT_TRUE(pac_script_actions_.empty())
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
198 case SetPacScriptAction::COMPLETE: 211 case SetPacScriptAction::COMPLETE:
199 callback.Run(action.error); 212 callback.Run(action.error);
200 break; 213 break;
201 case SetPacScriptAction::DISCONNECT: 214 case SetPacScriptAction::DISCONNECT:
202 binding_.Close(); 215 binding_.Close();
203 break; 216 break;
204 } 217 }
205 WakeWaiter(); 218 WakeWaiter();
206 } 219 }
207 220
221 void MockMojoProxyResolver::ClearBlockedClients() {
222 blocked_clients_.clear();
223 }
224
208 void MockMojoProxyResolver::GetProxyForUrl( 225 void MockMojoProxyResolver::GetProxyForUrl(
209 const mojo::String& url, 226 const mojo::String& url,
210 interfaces::ProxyResolverRequestClientPtr client) { 227 interfaces::ProxyResolverRequestClientPtr client) {
211 ASSERT_FALSE(get_proxy_actions_.empty()); 228 ASSERT_FALSE(get_proxy_actions_.empty());
212 GetProxyForUrlAction action = get_proxy_actions_.front(); 229 GetProxyForUrlAction action = get_proxy_actions_.front();
213 get_proxy_actions_.pop(); 230 get_proxy_actions_.pop();
214 231
215 EXPECT_EQ(action.expected_url.spec(), url.To<std::string>()); 232 EXPECT_EQ(action.expected_url.spec(), url.To<std::string>());
216 switch (action.action) { 233 switch (action.action) {
217 case GetProxyForUrlAction::COMPLETE: 234 case GetProxyForUrlAction::COMPLETE:
218 client->ReportResult(action.error, action.proxy_servers.Pass()); 235 client->ReportResult(action.error, action.proxy_servers.Pass());
219 break; 236 break;
220 case GetProxyForUrlAction::DROP: 237 case GetProxyForUrlAction::DROP:
221 client.reset(); 238 client.reset();
222 break; 239 break;
223 case GetProxyForUrlAction::DISCONNECT: 240 case GetProxyForUrlAction::DISCONNECT:
224 binding_.Close(); 241 binding_.Close();
225 break; 242 break;
226 case GetProxyForUrlAction::WAIT_FOR_CLIENT_DISCONNECT: 243 case GetProxyForUrlAction::WAIT_FOR_CLIENT_DISCONNECT:
227 ASSERT_FALSE(client.WaitForIncomingMethodCall()); 244 ASSERT_FALSE(client.WaitForIncomingMethodCall());
228 break; 245 break;
246 case GetProxyForUrlAction::SEND_LOAD_STATE_AND_BLOCK:
247 client->LoadStateChanged(LOAD_STATE_RESOLVING_HOST_IN_PROXY_SCRIPT);
248 blocked_clients_.push_back(
249 new interfaces::ProxyResolverRequestClientPtr(client.Pass()));
250 break;
229 } 251 }
230 WakeWaiter(); 252 WakeWaiter();
231 } 253 }
232 254
233 class TestMojoProxyResolverFactory : public MojoProxyResolverFactory { 255 class TestMojoProxyResolverFactory : public MojoProxyResolverFactory {
234 public: 256 public:
235 TestMojoProxyResolverFactory(); 257 TestMojoProxyResolverFactory();
236 ~TestMojoProxyResolverFactory(); 258 ~TestMojoProxyResolverFactory();
237 259
238 // Overridden from MojoProxyResolverFactory: 260 // Overridden from MojoProxyResolverFactory:
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
296 class Request { 318 class Request {
297 public: 319 public:
298 Request(ProxyResolverMojo* resolver, const GURL& url); 320 Request(ProxyResolverMojo* resolver, const GURL& url);
299 321
300 int Resolve(); 322 int Resolve();
301 void Cancel(); 323 void Cancel();
302 int WaitForResult(); 324 int WaitForResult();
303 325
304 int error() const { return error_; } 326 int error() const { return error_; }
305 const ProxyInfo& results() const { return results_; } 327 const ProxyInfo& results() const { return results_; }
328 LoadState load_state() { return resolver_->GetLoadState(handle_); }
306 329
307 private: 330 private:
308 ProxyResolverMojo* resolver_; 331 ProxyResolverMojo* resolver_;
309 const GURL url_; 332 const GURL url_;
310 ProxyInfo results_; 333 ProxyInfo results_;
311 ProxyResolver::RequestHandle handle_; 334 ProxyResolver::RequestHandle handle_;
312 int error_; 335 int error_;
313 TestCompletionCallback callback_; 336 TestCompletionCallback callback_;
314 }; 337 };
315 338
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
515 EXPECT_EQ(OK, request->WaitForResult()); 538 EXPECT_EQ(OK, request->WaitForResult());
516 539
517 EXPECT_EQ("DIRECT", request->results().ToPacString()); 540 EXPECT_EQ("DIRECT", request->results().ToPacString());
518 } 541 }
519 542
520 TEST_F(ProxyResolverMojoTest, GetProxyForURL_WithoutSetPacScript) { 543 TEST_F(ProxyResolverMojoTest, GetProxyForURL_WithoutSetPacScript) {
521 scoped_ptr<Request> request(MakeRequest(GURL(kExampleUrl))); 544 scoped_ptr<Request> request(MakeRequest(GURL(kExampleUrl)));
522 EXPECT_EQ(ERR_PAC_SCRIPT_TERMINATED, request->Resolve()); 545 EXPECT_EQ(ERR_PAC_SCRIPT_TERMINATED, request->Resolve());
523 } 546 }
524 547
548 TEST_F(ProxyResolverMojoTest, GetProxyForURL_LoadState) {
549 mojo_proxy_resolver_factory_.AddFutureGetProxyAction(
550 0, GetProxyForUrlAction::SendLoadStateChanged(GURL(kExampleUrl)));
551 SetPacScript(0);
552
553 scoped_ptr<Request> request(MakeRequest(GURL(kExampleUrl)));
554 EXPECT_EQ(ERR_IO_PENDING, request->Resolve());
555 EXPECT_EQ(LOAD_STATE_RESOLVING_PROXY_FOR_URL, request->load_state());
556 while (request->load_state() == LOAD_STATE_RESOLVING_PROXY_FOR_URL)
557 base::RunLoop().RunUntilIdle();
558 EXPECT_EQ(LOAD_STATE_RESOLVING_HOST_IN_PROXY_SCRIPT, request->load_state());
559 mojo_proxy_resolver_factory_.GetMockResolver().ClearBlockedClients();
560 EXPECT_EQ(ERR_PAC_SCRIPT_TERMINATED, request->WaitForResult());
561 }
562
525 TEST_F(ProxyResolverMojoTest, GetProxyForURL_MultipleResults) { 563 TEST_F(ProxyResolverMojoTest, GetProxyForURL_MultipleResults) {
526 static const char kPacString[] = 564 static const char kPacString[] =
527 "PROXY foo1:80;DIRECT;SOCKS foo2:1234;" 565 "PROXY foo1:80;DIRECT;SOCKS foo2:1234;"
528 "SOCKS5 foo3:1080;HTTPS foo4:443;QUIC foo6:8888"; 566 "SOCKS5 foo3:1080;HTTPS foo4:443;QUIC foo6:8888";
529 mojo_proxy_resolver_factory_.AddFutureGetProxyAction( 567 mojo_proxy_resolver_factory_.AddFutureGetProxyAction(
530 0, GetProxyForUrlAction::ReturnServers( 568 0, GetProxyForUrlAction::ReturnServers(
531 GURL(kExampleUrl), ProxyServersFromPacString(kPacString))); 569 GURL(kExampleUrl), ProxyServersFromPacString(kPacString)));
532 SetPacScript(0); 570 SetPacScript(0);
533 571
534 scoped_ptr<Request> request(MakeRequest(GURL(kExampleUrl))); 572 scoped_ptr<Request> request(MakeRequest(GURL(kExampleUrl)));
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
688 // resolve request. 726 // resolve request.
689 scoped_ptr<Request> request(MakeRequest(GURL(kExampleUrl))); 727 scoped_ptr<Request> request(MakeRequest(GURL(kExampleUrl)));
690 EXPECT_EQ(ERR_IO_PENDING, request->Resolve()); 728 EXPECT_EQ(ERR_IO_PENDING, request->Resolve());
691 EXPECT_EQ(OK, request->WaitForResult()); 729 EXPECT_EQ(OK, request->WaitForResult());
692 EXPECT_EQ("DIRECT", request->results().ToPacString()); 730 EXPECT_EQ("DIRECT", request->results().ToPacString());
693 731
694 EXPECT_EQ(2, mojo_proxy_resolver_factory_.num_create_calls()); 732 EXPECT_EQ(2, mojo_proxy_resolver_factory_.num_create_calls());
695 } 733 }
696 734
697 } // namespace net 735 } // namespace net
OLDNEW
« no previous file with comments | « net/proxy/proxy_resolver_mojo.cc ('k') | net/proxy/proxy_resolver_v8_tracing.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698