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> |
(...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
292 | 292 |
293 class Request { | 293 class Request { |
294 public: | 294 public: |
295 Request(ProxyResolver* resolver, const GURL& url); | 295 Request(ProxyResolver* resolver, const GURL& url); |
296 | 296 |
297 int Resolve(); | 297 int Resolve(); |
298 void Cancel(); | 298 void Cancel(); |
299 int WaitForResult(); | 299 int WaitForResult(); |
300 | 300 |
301 const ProxyInfo& results() const { return results_; } | 301 const ProxyInfo& results() const { return results_; } |
302 LoadState load_state() { return resolver_->GetLoadState(handle_); } | 302 LoadState load_state() { return request_->GetLoadState(); } |
303 BoundTestNetLog& net_log() { return net_log_; } | 303 BoundTestNetLog& net_log() { return net_log_; } |
| 304 const TestCompletionCallback& callback() const { return callback_; } |
304 | 305 |
305 private: | 306 private: |
306 ProxyResolver* resolver_; | 307 ProxyResolver* resolver_; |
307 const GURL url_; | 308 const GURL url_; |
308 ProxyInfo results_; | 309 ProxyInfo results_; |
309 ProxyResolver::RequestHandle handle_; | 310 std::unique_ptr<ProxyResolver::Request> request_; |
310 int error_; | 311 int error_; |
311 TestCompletionCallback callback_; | 312 TestCompletionCallback callback_; |
312 BoundTestNetLog net_log_; | 313 BoundTestNetLog net_log_; |
313 }; | 314 }; |
314 | 315 |
315 Request::Request(ProxyResolver* resolver, const GURL& url) | 316 Request::Request(ProxyResolver* resolver, const GURL& url) |
316 : resolver_(resolver), url_(url), error_(0) { | 317 : resolver_(resolver), url_(url), error_(0) { |
317 } | 318 } |
318 | 319 |
319 int Request::Resolve() { | 320 int Request::Resolve() { |
320 error_ = resolver_->GetProxyForURL(url_, &results_, callback_.callback(), | 321 error_ = resolver_->GetProxyForURL(url_, &results_, callback_.callback(), |
321 &handle_, net_log_.bound()); | 322 &request_, net_log_.bound()); |
322 return error_; | 323 return error_; |
323 } | 324 } |
324 | 325 |
325 void Request::Cancel() { | 326 void Request::Cancel() { |
326 resolver_->CancelRequest(handle_); | 327 request_.reset(); |
327 } | 328 } |
328 | 329 |
329 int Request::WaitForResult() { | 330 int Request::WaitForResult() { |
330 error_ = callback_.WaitForResult(); | 331 error_ = callback_.WaitForResult(); |
331 return error_; | 332 return error_; |
332 } | 333 } |
333 | 334 |
334 class MockMojoProxyResolverFactory : public interfaces::ProxyResolverFactory { | 335 class MockMojoProxyResolverFactory : public interfaces::ProxyResolverFactory { |
335 public: | 336 public: |
336 MockMojoProxyResolverFactory( | 337 MockMojoProxyResolverFactory( |
(...skipping 444 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
781 } | 782 } |
782 | 783 |
783 TEST_F(ProxyResolverFactoryMojoTest, GetProxyForURL_Cancel) { | 784 TEST_F(ProxyResolverFactoryMojoTest, GetProxyForURL_Cancel) { |
784 mock_proxy_resolver_.AddGetProxyAction( | 785 mock_proxy_resolver_.AddGetProxyAction( |
785 GetProxyForUrlAction::WaitForClientDisconnect(GURL(kExampleUrl))); | 786 GetProxyForUrlAction::WaitForClientDisconnect(GURL(kExampleUrl))); |
786 CreateProxyResolver(); | 787 CreateProxyResolver(); |
787 | 788 |
788 std::unique_ptr<Request> request(MakeRequest(GURL(kExampleUrl))); | 789 std::unique_ptr<Request> request(MakeRequest(GURL(kExampleUrl))); |
789 EXPECT_THAT(request->Resolve(), IsError(ERR_IO_PENDING)); | 790 EXPECT_THAT(request->Resolve(), IsError(ERR_IO_PENDING)); |
790 request->Cancel(); | 791 request->Cancel(); |
| 792 EXPECT_FALSE(request->callback().have_result()); |
791 | 793 |
792 // The Mojo request is still made. | 794 // The Mojo request is still made. |
793 mock_proxy_resolver_.WaitForNextRequest(); | 795 mock_proxy_resolver_.WaitForNextRequest(); |
794 } | 796 } |
795 | 797 |
796 TEST_F(ProxyResolverFactoryMojoTest, GetProxyForURL_MultipleRequests) { | 798 TEST_F(ProxyResolverFactoryMojoTest, GetProxyForURL_MultipleRequests) { |
797 mock_proxy_resolver_.AddGetProxyAction(GetProxyForUrlAction::ReturnServers( | 799 mock_proxy_resolver_.AddGetProxyAction(GetProxyForUrlAction::ReturnServers( |
798 GURL(kExampleUrl), ProxyServersFromPacString("DIRECT"))); | 800 GURL(kExampleUrl), ProxyServersFromPacString("DIRECT"))); |
799 mock_proxy_resolver_.AddGetProxyAction(GetProxyForUrlAction::ReturnServers( | 801 mock_proxy_resolver_.AddGetProxyAction(GetProxyForUrlAction::ReturnServers( |
800 GURL("https://www.chromium.org"), | 802 GURL("https://www.chromium.org"), |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
843 EXPECT_THAT(request1->WaitForResult(), IsError(ERR_PAC_SCRIPT_TERMINATED)); | 845 EXPECT_THAT(request1->WaitForResult(), IsError(ERR_PAC_SCRIPT_TERMINATED)); |
844 } | 846 } |
845 | 847 |
846 TEST_F(ProxyResolverFactoryMojoTest, GetProxyForURL_DeleteInCallback) { | 848 TEST_F(ProxyResolverFactoryMojoTest, GetProxyForURL_DeleteInCallback) { |
847 mock_proxy_resolver_.AddGetProxyAction(GetProxyForUrlAction::ReturnServers( | 849 mock_proxy_resolver_.AddGetProxyAction(GetProxyForUrlAction::ReturnServers( |
848 GURL(kExampleUrl), ProxyServersFromPacString("DIRECT"))); | 850 GURL(kExampleUrl), ProxyServersFromPacString("DIRECT"))); |
849 CreateProxyResolver(); | 851 CreateProxyResolver(); |
850 | 852 |
851 ProxyInfo results; | 853 ProxyInfo results; |
852 TestCompletionCallback callback; | 854 TestCompletionCallback callback; |
853 ProxyResolver::RequestHandle handle; | 855 std::unique_ptr<ProxyResolver::Request> request; |
854 NetLogWithSource net_log; | 856 NetLogWithSource net_log; |
855 EXPECT_EQ( | 857 EXPECT_EQ( |
856 OK, | 858 OK, |
857 callback.GetResult(proxy_resolver_mojo_->GetProxyForURL( | 859 callback.GetResult(proxy_resolver_mojo_->GetProxyForURL( |
858 GURL(kExampleUrl), &results, | 860 GURL(kExampleUrl), &results, |
859 base::Bind(&ProxyResolverFactoryMojoTest::DeleteProxyResolverCallback, | 861 base::Bind(&ProxyResolverFactoryMojoTest::DeleteProxyResolverCallback, |
860 base::Unretained(this), callback.callback()), | 862 base::Unretained(this), callback.callback()), |
861 &handle, net_log))); | 863 &request, net_log))); |
862 on_delete_callback_.WaitForResult(); | 864 on_delete_callback_.WaitForResult(); |
863 } | 865 } |
864 | 866 |
865 TEST_F(ProxyResolverFactoryMojoTest, | 867 TEST_F(ProxyResolverFactoryMojoTest, |
866 GetProxyForURL_DeleteInCallbackFromDisconnect) { | 868 GetProxyForURL_DeleteInCallbackFromDisconnect) { |
867 mock_proxy_resolver_.AddGetProxyAction( | 869 mock_proxy_resolver_.AddGetProxyAction( |
868 GetProxyForUrlAction::Disconnect(GURL(kExampleUrl))); | 870 GetProxyForUrlAction::Disconnect(GURL(kExampleUrl))); |
869 CreateProxyResolver(); | 871 CreateProxyResolver(); |
870 | 872 |
871 ProxyInfo results; | 873 ProxyInfo results; |
872 TestCompletionCallback callback; | 874 TestCompletionCallback callback; |
873 ProxyResolver::RequestHandle handle; | 875 std::unique_ptr<ProxyResolver::Request> request; |
874 NetLogWithSource net_log; | 876 NetLogWithSource net_log; |
875 EXPECT_EQ( | 877 EXPECT_EQ( |
876 ERR_PAC_SCRIPT_TERMINATED, | 878 ERR_PAC_SCRIPT_TERMINATED, |
877 callback.GetResult(proxy_resolver_mojo_->GetProxyForURL( | 879 callback.GetResult(proxy_resolver_mojo_->GetProxyForURL( |
878 GURL(kExampleUrl), &results, | 880 GURL(kExampleUrl), &results, |
879 base::Bind(&ProxyResolverFactoryMojoTest::DeleteProxyResolverCallback, | 881 base::Bind(&ProxyResolverFactoryMojoTest::DeleteProxyResolverCallback, |
880 base::Unretained(this), callback.callback()), | 882 base::Unretained(this), callback.callback()), |
881 &handle, net_log))); | 883 &request, net_log))); |
882 on_delete_callback_.WaitForResult(); | 884 on_delete_callback_.WaitForResult(); |
883 } | 885 } |
884 | 886 |
885 TEST_F(ProxyResolverFactoryMojoTest, GetProxyForURL_DnsRequest) { | 887 TEST_F(ProxyResolverFactoryMojoTest, GetProxyForURL_DnsRequest) { |
886 mock_proxy_resolver_.AddGetProxyAction( | 888 mock_proxy_resolver_.AddGetProxyAction( |
887 GetProxyForUrlAction::MakeDnsRequest(GURL(kExampleUrl))); | 889 GetProxyForUrlAction::MakeDnsRequest(GURL(kExampleUrl))); |
888 CreateProxyResolver(); | 890 CreateProxyResolver(); |
889 | 891 |
890 std::unique_ptr<Request> request(MakeRequest(GURL(kExampleUrl))); | 892 std::unique_ptr<Request> request(MakeRequest(GURL(kExampleUrl))); |
891 EXPECT_THAT(request->Resolve(), IsError(ERR_IO_PENDING)); | 893 EXPECT_THAT(request->Resolve(), IsError(ERR_IO_PENDING)); |
892 EXPECT_EQ(LOAD_STATE_RESOLVING_PROXY_FOR_URL, request->load_state()); | 894 EXPECT_EQ(LOAD_STATE_RESOLVING_PROXY_FOR_URL, request->load_state()); |
893 | 895 |
894 host_resolver_.waiter().WaitForEvent(MockHostResolver::DNS_REQUEST); | 896 host_resolver_.waiter().WaitForEvent(MockHostResolver::DNS_REQUEST); |
895 EXPECT_EQ(LOAD_STATE_RESOLVING_HOST_IN_PROXY_SCRIPT, request->load_state()); | 897 EXPECT_EQ(LOAD_STATE_RESOLVING_HOST_IN_PROXY_SCRIPT, request->load_state()); |
896 mock_proxy_resolver_.ClearBlockedClients(); | 898 mock_proxy_resolver_.ClearBlockedClients(); |
897 request->WaitForResult(); | 899 request->WaitForResult(); |
898 } | 900 } |
899 | 901 |
900 TEST_F(ProxyResolverFactoryMojoTest, DeleteResolver) { | 902 TEST_F(ProxyResolverFactoryMojoTest, DeleteResolver) { |
901 CreateProxyResolver(); | 903 CreateProxyResolver(); |
902 proxy_resolver_mojo_.reset(); | 904 proxy_resolver_mojo_.reset(); |
903 on_delete_callback_.WaitForResult(); | 905 on_delete_callback_.WaitForResult(); |
904 } | 906 } |
905 } // namespace net | 907 } // namespace net |
OLD | NEW |