| 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 13 matching lines...) Expand all Loading... |
| 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" | 28 #include "net/proxy/mojo_proxy_type_converters.h" |
| 29 #include "net/proxy/proxy_info.h" | 29 #include "net/proxy/proxy_info.h" |
| 30 #include "net/proxy/proxy_resolver.h" | 30 #include "net/proxy/proxy_resolver.h" |
| 31 #include "net/proxy/proxy_resolver_error_observer.h" | 31 #include "net/proxy/proxy_resolver_error_observer.h" |
| 32 #include "net/proxy/proxy_resolver_script_data.h" | 32 #include "net/proxy/proxy_resolver_script_data.h" |
| 33 #include "net/test/event_waiter.h" | 33 #include "net/test/event_waiter.h" |
| 34 #include "net/test/gtest_util.h" |
| 35 #include "testing/gmock/include/gmock/gmock.h" |
| 34 #include "testing/gtest/include/gtest/gtest.h" | 36 #include "testing/gtest/include/gtest/gtest.h" |
| 35 #include "url/gurl.h" | 37 #include "url/gurl.h" |
| 36 | 38 |
| 39 using net::test::IsError; |
| 40 using net::test::IsOk; |
| 41 |
| 37 namespace net { | 42 namespace net { |
| 38 | 43 |
| 39 namespace { | 44 namespace { |
| 40 | 45 |
| 41 const char kScriptData[] = "FooBarBaz"; | 46 const char kScriptData[] = "FooBarBaz"; |
| 42 const char kExampleUrl[] = "http://www.example.com"; | 47 const char kExampleUrl[] = "http://www.example.com"; |
| 43 | 48 |
| 44 struct CreateProxyResolverAction { | 49 struct CreateProxyResolverAction { |
| 45 enum Action { | 50 enum Action { |
| 46 COMPLETE, | 51 COMPLETE, |
| (...skipping 681 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 728 } | 733 } |
| 729 | 734 |
| 730 TEST_F(ProxyResolverFactoryMojoTest, GetProxyForURL) { | 735 TEST_F(ProxyResolverFactoryMojoTest, GetProxyForURL) { |
| 731 const GURL url(kExampleUrl); | 736 const GURL url(kExampleUrl); |
| 732 mock_proxy_resolver_.AddGetProxyAction(GetProxyForUrlAction::ReturnServers( | 737 mock_proxy_resolver_.AddGetProxyAction(GetProxyForUrlAction::ReturnServers( |
| 733 url, ProxyServersFromPacString("DIRECT"))); | 738 url, ProxyServersFromPacString("DIRECT"))); |
| 734 CreateProxyResolver(); | 739 CreateProxyResolver(); |
| 735 net_log_.Clear(); | 740 net_log_.Clear(); |
| 736 | 741 |
| 737 std::unique_ptr<Request> request(MakeRequest(GURL(kExampleUrl))); | 742 std::unique_ptr<Request> request(MakeRequest(GURL(kExampleUrl))); |
| 738 EXPECT_EQ(ERR_IO_PENDING, request->Resolve()); | 743 EXPECT_THAT(request->Resolve(), IsError(ERR_IO_PENDING)); |
| 739 EXPECT_EQ(OK, request->WaitForResult()); | 744 EXPECT_THAT(request->WaitForResult(), IsOk()); |
| 740 | 745 |
| 741 EXPECT_EQ("DIRECT", request->results().ToPacString()); | 746 EXPECT_EQ("DIRECT", request->results().ToPacString()); |
| 742 | 747 |
| 743 TestNetLogEntry::List entries; | 748 TestNetLogEntry::List entries; |
| 744 net_log_.GetEntries(&entries); | 749 net_log_.GetEntries(&entries); |
| 745 CheckCapturedNetLogEntries(url.spec(), entries); | 750 CheckCapturedNetLogEntries(url.spec(), entries); |
| 746 entries.clear(); | 751 entries.clear(); |
| 747 request->net_log().GetEntries(&entries); | 752 request->net_log().GetEntries(&entries); |
| 748 CheckCapturedNetLogEntries(url.spec(), entries); | 753 CheckCapturedNetLogEntries(url.spec(), entries); |
| 749 } | 754 } |
| 750 | 755 |
| 751 TEST_F(ProxyResolverFactoryMojoTest, GetProxyForURL_MultipleResults) { | 756 TEST_F(ProxyResolverFactoryMojoTest, GetProxyForURL_MultipleResults) { |
| 752 static const char kPacString[] = | 757 static const char kPacString[] = |
| 753 "PROXY foo1:80;DIRECT;SOCKS foo2:1234;" | 758 "PROXY foo1:80;DIRECT;SOCKS foo2:1234;" |
| 754 "SOCKS5 foo3:1080;HTTPS foo4:443;QUIC foo6:8888"; | 759 "SOCKS5 foo3:1080;HTTPS foo4:443;QUIC foo6:8888"; |
| 755 mock_proxy_resolver_.AddGetProxyAction(GetProxyForUrlAction::ReturnServers( | 760 mock_proxy_resolver_.AddGetProxyAction(GetProxyForUrlAction::ReturnServers( |
| 756 GURL(kExampleUrl), ProxyServersFromPacString(kPacString))); | 761 GURL(kExampleUrl), ProxyServersFromPacString(kPacString))); |
| 757 CreateProxyResolver(); | 762 CreateProxyResolver(); |
| 758 | 763 |
| 759 std::unique_ptr<Request> request(MakeRequest(GURL(kExampleUrl))); | 764 std::unique_ptr<Request> request(MakeRequest(GURL(kExampleUrl))); |
| 760 EXPECT_EQ(ERR_IO_PENDING, request->Resolve()); | 765 EXPECT_THAT(request->Resolve(), IsError(ERR_IO_PENDING)); |
| 761 EXPECT_EQ(OK, request->WaitForResult()); | 766 EXPECT_THAT(request->WaitForResult(), IsOk()); |
| 762 | 767 |
| 763 EXPECT_EQ(kPacString, request->results().ToPacString()); | 768 EXPECT_EQ(kPacString, request->results().ToPacString()); |
| 764 } | 769 } |
| 765 | 770 |
| 766 TEST_F(ProxyResolverFactoryMojoTest, GetProxyForURL_Error) { | 771 TEST_F(ProxyResolverFactoryMojoTest, GetProxyForURL_Error) { |
| 767 mock_proxy_resolver_.AddGetProxyAction( | 772 mock_proxy_resolver_.AddGetProxyAction( |
| 768 GetProxyForUrlAction::ReturnError(GURL(kExampleUrl), ERR_UNEXPECTED)); | 773 GetProxyForUrlAction::ReturnError(GURL(kExampleUrl), ERR_UNEXPECTED)); |
| 769 CreateProxyResolver(); | 774 CreateProxyResolver(); |
| 770 | 775 |
| 771 std::unique_ptr<Request> request(MakeRequest(GURL(kExampleUrl))); | 776 std::unique_ptr<Request> request(MakeRequest(GURL(kExampleUrl))); |
| 772 EXPECT_EQ(ERR_IO_PENDING, request->Resolve()); | 777 EXPECT_THAT(request->Resolve(), IsError(ERR_IO_PENDING)); |
| 773 EXPECT_EQ(ERR_UNEXPECTED, request->WaitForResult()); | 778 EXPECT_THAT(request->WaitForResult(), IsError(ERR_UNEXPECTED)); |
| 774 | 779 |
| 775 EXPECT_TRUE(request->results().is_empty()); | 780 EXPECT_TRUE(request->results().is_empty()); |
| 776 } | 781 } |
| 777 | 782 |
| 778 TEST_F(ProxyResolverFactoryMojoTest, GetProxyForURL_Cancel) { | 783 TEST_F(ProxyResolverFactoryMojoTest, GetProxyForURL_Cancel) { |
| 779 mock_proxy_resolver_.AddGetProxyAction( | 784 mock_proxy_resolver_.AddGetProxyAction( |
| 780 GetProxyForUrlAction::WaitForClientDisconnect(GURL(kExampleUrl))); | 785 GetProxyForUrlAction::WaitForClientDisconnect(GURL(kExampleUrl))); |
| 781 CreateProxyResolver(); | 786 CreateProxyResolver(); |
| 782 | 787 |
| 783 std::unique_ptr<Request> request(MakeRequest(GURL(kExampleUrl))); | 788 std::unique_ptr<Request> request(MakeRequest(GURL(kExampleUrl))); |
| 784 EXPECT_EQ(ERR_IO_PENDING, request->Resolve()); | 789 EXPECT_THAT(request->Resolve(), IsError(ERR_IO_PENDING)); |
| 785 request->Cancel(); | 790 request->Cancel(); |
| 786 | 791 |
| 787 // The Mojo request is still made. | 792 // The Mojo request is still made. |
| 788 mock_proxy_resolver_.WaitForNextRequest(); | 793 mock_proxy_resolver_.WaitForNextRequest(); |
| 789 } | 794 } |
| 790 | 795 |
| 791 TEST_F(ProxyResolverFactoryMojoTest, GetProxyForURL_MultipleRequests) { | 796 TEST_F(ProxyResolverFactoryMojoTest, GetProxyForURL_MultipleRequests) { |
| 792 mock_proxy_resolver_.AddGetProxyAction(GetProxyForUrlAction::ReturnServers( | 797 mock_proxy_resolver_.AddGetProxyAction(GetProxyForUrlAction::ReturnServers( |
| 793 GURL(kExampleUrl), ProxyServersFromPacString("DIRECT"))); | 798 GURL(kExampleUrl), ProxyServersFromPacString("DIRECT"))); |
| 794 mock_proxy_resolver_.AddGetProxyAction(GetProxyForUrlAction::ReturnServers( | 799 mock_proxy_resolver_.AddGetProxyAction(GetProxyForUrlAction::ReturnServers( |
| 795 GURL("https://www.chromium.org"), | 800 GURL("https://www.chromium.org"), |
| 796 ProxyServersFromPacString("HTTPS foo:443"))); | 801 ProxyServersFromPacString("HTTPS foo:443"))); |
| 797 CreateProxyResolver(); | 802 CreateProxyResolver(); |
| 798 | 803 |
| 799 std::unique_ptr<Request> request1(MakeRequest(GURL(kExampleUrl))); | 804 std::unique_ptr<Request> request1(MakeRequest(GURL(kExampleUrl))); |
| 800 EXPECT_EQ(ERR_IO_PENDING, request1->Resolve()); | 805 EXPECT_THAT(request1->Resolve(), IsError(ERR_IO_PENDING)); |
| 801 std::unique_ptr<Request> request2( | 806 std::unique_ptr<Request> request2( |
| 802 MakeRequest(GURL("https://www.chromium.org"))); | 807 MakeRequest(GURL("https://www.chromium.org"))); |
| 803 EXPECT_EQ(ERR_IO_PENDING, request2->Resolve()); | 808 EXPECT_THAT(request2->Resolve(), IsError(ERR_IO_PENDING)); |
| 804 | 809 |
| 805 EXPECT_EQ(OK, request1->WaitForResult()); | 810 EXPECT_THAT(request1->WaitForResult(), IsOk()); |
| 806 EXPECT_EQ(OK, request2->WaitForResult()); | 811 EXPECT_THAT(request2->WaitForResult(), IsOk()); |
| 807 | 812 |
| 808 EXPECT_EQ("DIRECT", request1->results().ToPacString()); | 813 EXPECT_EQ("DIRECT", request1->results().ToPacString()); |
| 809 EXPECT_EQ("HTTPS foo:443", request2->results().ToPacString()); | 814 EXPECT_EQ("HTTPS foo:443", request2->results().ToPacString()); |
| 810 } | 815 } |
| 811 | 816 |
| 812 TEST_F(ProxyResolverFactoryMojoTest, GetProxyForURL_Disconnect) { | 817 TEST_F(ProxyResolverFactoryMojoTest, GetProxyForURL_Disconnect) { |
| 813 mock_proxy_resolver_.AddGetProxyAction( | 818 mock_proxy_resolver_.AddGetProxyAction( |
| 814 GetProxyForUrlAction::Disconnect(GURL(kExampleUrl))); | 819 GetProxyForUrlAction::Disconnect(GURL(kExampleUrl))); |
| 815 CreateProxyResolver(); | 820 CreateProxyResolver(); |
| 816 { | 821 { |
| 817 std::unique_ptr<Request> request(MakeRequest(GURL(kExampleUrl))); | 822 std::unique_ptr<Request> request(MakeRequest(GURL(kExampleUrl))); |
| 818 EXPECT_EQ(ERR_IO_PENDING, request->Resolve()); | 823 EXPECT_THAT(request->Resolve(), IsError(ERR_IO_PENDING)); |
| 819 EXPECT_EQ(ERR_PAC_SCRIPT_TERMINATED, request->WaitForResult()); | 824 EXPECT_THAT(request->WaitForResult(), IsError(ERR_PAC_SCRIPT_TERMINATED)); |
| 820 EXPECT_TRUE(request->results().is_empty()); | 825 EXPECT_TRUE(request->results().is_empty()); |
| 821 } | 826 } |
| 822 | 827 |
| 823 { | 828 { |
| 824 // Calling GetProxyForURL after a disconnect should fail. | 829 // Calling GetProxyForURL after a disconnect should fail. |
| 825 std::unique_ptr<Request> request(MakeRequest(GURL(kExampleUrl))); | 830 std::unique_ptr<Request> request(MakeRequest(GURL(kExampleUrl))); |
| 826 EXPECT_EQ(ERR_PAC_SCRIPT_TERMINATED, request->Resolve()); | 831 EXPECT_THAT(request->Resolve(), IsError(ERR_PAC_SCRIPT_TERMINATED)); |
| 827 } | 832 } |
| 828 } | 833 } |
| 829 | 834 |
| 830 TEST_F(ProxyResolverFactoryMojoTest, GetProxyForURL_ClientClosed) { | 835 TEST_F(ProxyResolverFactoryMojoTest, GetProxyForURL_ClientClosed) { |
| 831 mock_proxy_resolver_.AddGetProxyAction( | 836 mock_proxy_resolver_.AddGetProxyAction( |
| 832 GetProxyForUrlAction::DropRequest(GURL(kExampleUrl))); | 837 GetProxyForUrlAction::DropRequest(GURL(kExampleUrl))); |
| 833 CreateProxyResolver(); | 838 CreateProxyResolver(); |
| 834 | 839 |
| 835 std::unique_ptr<Request> request1(MakeRequest(GURL(kExampleUrl))); | 840 std::unique_ptr<Request> request1(MakeRequest(GURL(kExampleUrl))); |
| 836 EXPECT_EQ(ERR_IO_PENDING, request1->Resolve()); | 841 EXPECT_THAT(request1->Resolve(), IsError(ERR_IO_PENDING)); |
| 837 | 842 |
| 838 EXPECT_EQ(ERR_PAC_SCRIPT_TERMINATED, request1->WaitForResult()); | 843 EXPECT_THAT(request1->WaitForResult(), IsError(ERR_PAC_SCRIPT_TERMINATED)); |
| 839 } | 844 } |
| 840 | 845 |
| 841 TEST_F(ProxyResolverFactoryMojoTest, GetProxyForURL_DeleteInCallback) { | 846 TEST_F(ProxyResolverFactoryMojoTest, GetProxyForURL_DeleteInCallback) { |
| 842 mock_proxy_resolver_.AddGetProxyAction(GetProxyForUrlAction::ReturnServers( | 847 mock_proxy_resolver_.AddGetProxyAction(GetProxyForUrlAction::ReturnServers( |
| 843 GURL(kExampleUrl), ProxyServersFromPacString("DIRECT"))); | 848 GURL(kExampleUrl), ProxyServersFromPacString("DIRECT"))); |
| 844 CreateProxyResolver(); | 849 CreateProxyResolver(); |
| 845 | 850 |
| 846 ProxyInfo results; | 851 ProxyInfo results; |
| 847 TestCompletionCallback callback; | 852 TestCompletionCallback callback; |
| 848 ProxyResolver::RequestHandle handle; | 853 ProxyResolver::RequestHandle handle; |
| (...skipping 27 matching lines...) Expand all Loading... |
| 876 &handle, net_log))); | 881 &handle, net_log))); |
| 877 on_delete_callback_.WaitForResult(); | 882 on_delete_callback_.WaitForResult(); |
| 878 } | 883 } |
| 879 | 884 |
| 880 TEST_F(ProxyResolverFactoryMojoTest, GetProxyForURL_DnsRequest) { | 885 TEST_F(ProxyResolverFactoryMojoTest, GetProxyForURL_DnsRequest) { |
| 881 mock_proxy_resolver_.AddGetProxyAction( | 886 mock_proxy_resolver_.AddGetProxyAction( |
| 882 GetProxyForUrlAction::MakeDnsRequest(GURL(kExampleUrl))); | 887 GetProxyForUrlAction::MakeDnsRequest(GURL(kExampleUrl))); |
| 883 CreateProxyResolver(); | 888 CreateProxyResolver(); |
| 884 | 889 |
| 885 std::unique_ptr<Request> request(MakeRequest(GURL(kExampleUrl))); | 890 std::unique_ptr<Request> request(MakeRequest(GURL(kExampleUrl))); |
| 886 EXPECT_EQ(ERR_IO_PENDING, request->Resolve()); | 891 EXPECT_THAT(request->Resolve(), IsError(ERR_IO_PENDING)); |
| 887 EXPECT_EQ(LOAD_STATE_RESOLVING_PROXY_FOR_URL, request->load_state()); | 892 EXPECT_EQ(LOAD_STATE_RESOLVING_PROXY_FOR_URL, request->load_state()); |
| 888 | 893 |
| 889 host_resolver_.waiter().WaitForEvent(MockHostResolver::DNS_REQUEST); | 894 host_resolver_.waiter().WaitForEvent(MockHostResolver::DNS_REQUEST); |
| 890 EXPECT_EQ(LOAD_STATE_RESOLVING_HOST_IN_PROXY_SCRIPT, request->load_state()); | 895 EXPECT_EQ(LOAD_STATE_RESOLVING_HOST_IN_PROXY_SCRIPT, request->load_state()); |
| 891 mock_proxy_resolver_.ClearBlockedClients(); | 896 mock_proxy_resolver_.ClearBlockedClients(); |
| 892 request->WaitForResult(); | 897 request->WaitForResult(); |
| 893 } | 898 } |
| 894 | 899 |
| 895 TEST_F(ProxyResolverFactoryMojoTest, DeleteResolver) { | 900 TEST_F(ProxyResolverFactoryMojoTest, DeleteResolver) { |
| 896 CreateProxyResolver(); | 901 CreateProxyResolver(); |
| 897 proxy_resolver_mojo_.reset(); | 902 proxy_resolver_mojo_.reset(); |
| 898 on_delete_callback_.WaitForResult(); | 903 on_delete_callback_.WaitForResult(); |
| 899 } | 904 } |
| 900 } // namespace net | 905 } // namespace net |
| OLD | NEW |