OLD | NEW |
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_factory_mojo.h" | 5 #include "net/proxy/proxy_resolver_factory_mojo.h" |
6 | 6 |
7 #include <list> | 7 #include <list> |
8 #include <map> | 8 #include <map> |
9 #include <memory> | 9 #include <memory> |
10 #include <queue> | 10 #include <queue> |
11 #include <string> | 11 #include <string> |
12 #include <utility> | 12 #include <utility> |
13 #include <vector> | 13 #include <vector> |
14 | 14 |
15 #include "base/bind.h" | 15 #include "base/bind.h" |
16 #include "base/memory/ptr_util.h" | 16 #include "base/memory/ptr_util.h" |
17 #include "base/run_loop.h" | 17 #include "base/run_loop.h" |
18 #include "base/stl_util.h" | 18 #include "base/stl_util.h" |
19 #include "base/values.h" | 19 #include "base/values.h" |
20 #include "mojo/common/common_type_converters.h" | 20 #include "mojo/common/common_type_converters.h" |
21 #include "mojo/public/cpp/bindings/binding.h" | 21 #include "mojo/public/cpp/bindings/binding.h" |
22 #include "net/base/load_states.h" | 22 #include "net/base/load_states.h" |
23 #include "net/base/net_errors.h" | 23 #include "net/base/net_errors.h" |
24 #include "net/base/test_completion_callback.h" | 24 #include "net/base/test_completion_callback.h" |
25 #include "net/dns/host_resolver.h" | 25 #include "net/dns/host_resolver.h" |
26 #include "net/log/test_net_log.h" | 26 #include "net/log/test_net_log.h" |
27 #include "net/proxy/mojo_proxy_resolver_factory.h" | 27 #include "net/proxy/mojo_proxy_resolver_factory.h" |
28 #include "net/proxy/mojo_proxy_type_converters.h" | |
29 #include "net/proxy/proxy_info.h" | 28 #include "net/proxy/proxy_info.h" |
30 #include "net/proxy/proxy_resolver.h" | 29 #include "net/proxy/proxy_resolver.h" |
31 #include "net/proxy/proxy_resolver_error_observer.h" | 30 #include "net/proxy/proxy_resolver_error_observer.h" |
32 #include "net/proxy/proxy_resolver_script_data.h" | 31 #include "net/proxy/proxy_resolver_script_data.h" |
33 #include "net/test/event_waiter.h" | 32 #include "net/test/event_waiter.h" |
34 #include "testing/gtest/include/gtest/gtest.h" | 33 #include "testing/gtest/include/gtest/gtest.h" |
35 #include "url/gurl.h" | 34 #include "url/gurl.h" |
36 | 35 |
37 namespace net { | 36 namespace net { |
38 | 37 |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
112 DROP, | 111 DROP, |
113 // Disconnect the service. | 112 // Disconnect the service. |
114 DISCONNECT, | 113 DISCONNECT, |
115 // Wait for the client pipe to be disconnected. | 114 // Wait for the client pipe to be disconnected. |
116 WAIT_FOR_CLIENT_DISCONNECT, | 115 WAIT_FOR_CLIENT_DISCONNECT, |
117 // Make a DNS request. | 116 // Make a DNS request. |
118 MAKE_DNS_REQUEST, | 117 MAKE_DNS_REQUEST, |
119 }; | 118 }; |
120 | 119 |
121 GetProxyForUrlAction() {} | 120 GetProxyForUrlAction() {} |
122 GetProxyForUrlAction(const GetProxyForUrlAction& old) { | 121 GetProxyForUrlAction(const GetProxyForUrlAction& other) = default; |
123 action = old.action; | |
124 error = old.error; | |
125 expected_url = old.expected_url; | |
126 proxy_servers = old.proxy_servers.Clone(); | |
127 } | |
128 | 122 |
129 static GetProxyForUrlAction ReturnError(const GURL& url, Error error) { | 123 static GetProxyForUrlAction ReturnError(const GURL& url, Error error) { |
130 GetProxyForUrlAction result; | 124 GetProxyForUrlAction result; |
131 result.expected_url = url; | 125 result.expected_url = url; |
132 result.error = error; | 126 result.error = error; |
133 return result; | 127 return result; |
134 } | 128 } |
135 | 129 |
136 static GetProxyForUrlAction ReturnServers( | 130 static GetProxyForUrlAction ReturnServers(const GURL& url, |
137 const GURL& url, | 131 const ProxyInfo& proxy_info) { |
138 const mojo::Array<interfaces::ProxyServerPtr>& proxy_servers) { | |
139 GetProxyForUrlAction result; | 132 GetProxyForUrlAction result; |
140 result.expected_url = url; | 133 result.expected_url = url; |
141 result.proxy_servers = proxy_servers.Clone(); | 134 result.proxy_info = proxy_info; |
142 return result; | 135 return result; |
143 } | 136 } |
144 | 137 |
145 static GetProxyForUrlAction DropRequest(const GURL& url) { | 138 static GetProxyForUrlAction DropRequest(const GURL& url) { |
146 GetProxyForUrlAction result; | 139 GetProxyForUrlAction result; |
147 result.expected_url = url; | 140 result.expected_url = url; |
148 result.action = DROP; | 141 result.action = DROP; |
149 return result; | 142 return result; |
150 } | 143 } |
151 | 144 |
(...skipping 13 matching lines...) Expand all Loading... |
165 | 158 |
166 static GetProxyForUrlAction MakeDnsRequest(const GURL& url) { | 159 static GetProxyForUrlAction MakeDnsRequest(const GURL& url) { |
167 GetProxyForUrlAction result; | 160 GetProxyForUrlAction result; |
168 result.expected_url = url; | 161 result.expected_url = url; |
169 result.action = MAKE_DNS_REQUEST; | 162 result.action = MAKE_DNS_REQUEST; |
170 return result; | 163 return result; |
171 } | 164 } |
172 | 165 |
173 Action action = COMPLETE; | 166 Action action = COMPLETE; |
174 Error error = OK; | 167 Error error = OK; |
175 mojo::Array<interfaces::ProxyServerPtr> proxy_servers; | 168 ProxyInfo proxy_info; |
176 GURL expected_url; | 169 GURL expected_url; |
177 }; | 170 }; |
178 | 171 |
179 class MockMojoProxyResolver : public interfaces::ProxyResolver { | 172 class MockMojoProxyResolver : public interfaces::ProxyResolver { |
180 public: | 173 public: |
181 MockMojoProxyResolver(); | 174 MockMojoProxyResolver(); |
182 ~MockMojoProxyResolver() override; | 175 ~MockMojoProxyResolver() override; |
183 | 176 |
184 void AddGetProxyAction(GetProxyForUrlAction action); | 177 void AddGetProxyAction(GetProxyForUrlAction action); |
185 | 178 |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
248 interfaces::ProxyResolverRequestClientPtr client) { | 241 interfaces::ProxyResolverRequestClientPtr client) { |
249 ASSERT_FALSE(get_proxy_actions_.empty()); | 242 ASSERT_FALSE(get_proxy_actions_.empty()); |
250 GetProxyForUrlAction action = get_proxy_actions_.front(); | 243 GetProxyForUrlAction action = get_proxy_actions_.front(); |
251 get_proxy_actions_.pop(); | 244 get_proxy_actions_.pop(); |
252 | 245 |
253 EXPECT_EQ(action.expected_url, url); | 246 EXPECT_EQ(action.expected_url, url); |
254 client->Alert(url.spec()); | 247 client->Alert(url.spec()); |
255 client->OnError(12345, url.spec()); | 248 client->OnError(12345, url.spec()); |
256 switch (action.action) { | 249 switch (action.action) { |
257 case GetProxyForUrlAction::COMPLETE: { | 250 case GetProxyForUrlAction::COMPLETE: { |
258 client->ReportResult(action.error, std::move(action.proxy_servers)); | 251 client->ReportResult(action.error, action.proxy_info); |
259 break; | 252 break; |
260 } | 253 } |
261 case GetProxyForUrlAction::DROP: { | 254 case GetProxyForUrlAction::DROP: { |
262 client.reset(); | 255 client.reset(); |
263 break; | 256 break; |
264 } | 257 } |
265 case GetProxyForUrlAction::DISCONNECT: { | 258 case GetProxyForUrlAction::DISCONNECT: { |
266 binding_.Close(); | 259 binding_.Close(); |
267 break; | 260 break; |
268 } | 261 } |
269 case GetProxyForUrlAction::WAIT_FOR_CLIENT_DISCONNECT: { | 262 case GetProxyForUrlAction::WAIT_FOR_CLIENT_DISCONNECT: { |
270 ASSERT_FALSE(client.WaitForIncomingResponse()); | 263 ASSERT_FALSE(client.WaitForIncomingResponse()); |
271 break; | 264 break; |
272 } | 265 } |
273 case GetProxyForUrlAction::MAKE_DNS_REQUEST: { | 266 case GetProxyForUrlAction::MAKE_DNS_REQUEST: { |
274 interfaces::HostResolverRequestInfoPtr request( | 267 auto request = base::MakeUnique<HostResolver::RequestInfo>( |
275 interfaces::HostResolverRequestInfo::New()); | 268 HostPortPair(url.spec(), 12345)); |
276 request->host = url.spec(); | |
277 request->port = 12345; | |
278 interfaces::HostResolverRequestClientPtr dns_client; | 269 interfaces::HostResolverRequestClientPtr dns_client; |
279 mojo::GetProxy(&dns_client); | 270 mojo::GetProxy(&dns_client); |
280 client->ResolveDns(std::move(request), std::move(dns_client)); | 271 client->ResolveDns(std::move(request), std::move(dns_client)); |
281 blocked_clients_.push_back(base::WrapUnique( | 272 blocked_clients_.push_back(base::WrapUnique( |
282 new interfaces::ProxyResolverRequestClientPtr(std::move(client)))); | 273 new interfaces::ProxyResolverRequestClientPtr(std::move(client)))); |
283 break; | 274 break; |
284 } | 275 } |
285 } | 276 } |
286 WakeWaiter(); | 277 WakeWaiter(); |
287 } | 278 } |
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
427 } | 418 } |
428 case CreateProxyResolverAction::DROP_BOTH: { | 419 case CreateProxyResolverAction::DROP_BOTH: { |
429 // Both |request| and |client| will be closed. | 420 // Both |request| and |client| will be closed. |
430 break; | 421 break; |
431 } | 422 } |
432 case CreateProxyResolverAction::WAIT_FOR_CLIENT_DISCONNECT: { | 423 case CreateProxyResolverAction::WAIT_FOR_CLIENT_DISCONNECT: { |
433 ASSERT_FALSE(client.WaitForIncomingResponse()); | 424 ASSERT_FALSE(client.WaitForIncomingResponse()); |
434 break; | 425 break; |
435 } | 426 } |
436 case CreateProxyResolverAction::MAKE_DNS_REQUEST: { | 427 case CreateProxyResolverAction::MAKE_DNS_REQUEST: { |
437 interfaces::HostResolverRequestInfoPtr request( | 428 auto request = base::MakeUnique<HostResolver::RequestInfo>( |
438 interfaces::HostResolverRequestInfo::New()); | 429 HostPortPair(pac_script, 12345)); |
439 request->host = pac_script; | |
440 request->port = 12345; | |
441 interfaces::HostResolverRequestClientPtr dns_client; | 430 interfaces::HostResolverRequestClientPtr dns_client; |
442 mojo::GetProxy(&dns_client); | 431 mojo::GetProxy(&dns_client); |
443 client->ResolveDns(std::move(request), std::move(dns_client)); | 432 client->ResolveDns(std::move(request), std::move(dns_client)); |
444 blocked_clients_.push_back( | 433 blocked_clients_.push_back( |
445 base::WrapUnique(new interfaces::ProxyResolverFactoryRequestClientPtr( | 434 base::WrapUnique(new interfaces::ProxyResolverFactoryRequestClientPtr( |
446 std::move(client)))); | 435 std::move(client)))); |
447 break; | 436 break; |
448 } | 437 } |
449 } | 438 } |
450 WakeWaiter(); | 439 WakeWaiter(); |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
527 | 516 |
528 std::unique_ptr<base::ScopedClosureRunner> CreateResolver( | 517 std::unique_ptr<base::ScopedClosureRunner> CreateResolver( |
529 const mojo::String& pac_script, | 518 const mojo::String& pac_script, |
530 mojo::InterfaceRequest<interfaces::ProxyResolver> req, | 519 mojo::InterfaceRequest<interfaces::ProxyResolver> req, |
531 interfaces::ProxyResolverFactoryRequestClientPtr client) override { | 520 interfaces::ProxyResolverFactoryRequestClientPtr client) override { |
532 factory_ptr_->CreateResolver(pac_script, std::move(req), std::move(client)); | 521 factory_ptr_->CreateResolver(pac_script, std::move(req), std::move(client)); |
533 return base::WrapUnique( | 522 return base::WrapUnique( |
534 new base::ScopedClosureRunner(on_delete_callback_.closure())); | 523 new base::ScopedClosureRunner(on_delete_callback_.closure())); |
535 } | 524 } |
536 | 525 |
537 mojo::Array<interfaces::ProxyServerPtr> ProxyServersFromPacString( | 526 ProxyInfo ProxyServersFromPacString(const std::string& pac_string) { |
538 const std::string& pac_string) { | |
539 ProxyInfo proxy_info; | 527 ProxyInfo proxy_info; |
540 proxy_info.UsePacString(pac_string); | 528 proxy_info.UsePacString(pac_string); |
541 | 529 return proxy_info; |
542 return mojo::Array<interfaces::ProxyServerPtr>::From( | |
543 proxy_info.proxy_list().GetAll()); | |
544 } | 530 } |
545 | 531 |
546 void CreateProxyResolver() { | 532 void CreateProxyResolver() { |
547 mock_proxy_resolver_factory_->AddCreateProxyResolverAction( | 533 mock_proxy_resolver_factory_->AddCreateProxyResolverAction( |
548 CreateProxyResolverAction::ReturnResult(kScriptData, OK)); | 534 CreateProxyResolverAction::ReturnResult(kScriptData, OK)); |
549 TestCompletionCallback callback; | 535 TestCompletionCallback callback; |
550 scoped_refptr<ProxyResolverScriptData> pac_script( | 536 scoped_refptr<ProxyResolverScriptData> pac_script( |
551 ProxyResolverScriptData::FromUTF8(kScriptData)); | 537 ProxyResolverScriptData::FromUTF8(kScriptData)); |
552 std::unique_ptr<ProxyResolverFactory::Request> request; | 538 std::unique_ptr<ProxyResolverFactory::Request> request; |
553 ASSERT_EQ( | 539 ASSERT_EQ( |
(...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
891 mock_proxy_resolver_.ClearBlockedClients(); | 877 mock_proxy_resolver_.ClearBlockedClients(); |
892 request->WaitForResult(); | 878 request->WaitForResult(); |
893 } | 879 } |
894 | 880 |
895 TEST_F(ProxyResolverFactoryMojoTest, DeleteResolver) { | 881 TEST_F(ProxyResolverFactoryMojoTest, DeleteResolver) { |
896 CreateProxyResolver(); | 882 CreateProxyResolver(); |
897 proxy_resolver_mojo_.reset(); | 883 proxy_resolver_mojo_.reset(); |
898 on_delete_callback_.WaitForResult(); | 884 on_delete_callback_.WaitForResult(); |
899 } | 885 } |
900 } // namespace net | 886 } // namespace net |
OLD | NEW |