OLD | NEW |
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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_service.h" | 5 #include "net/proxy/proxy_service.h" |
6 | 6 |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/format_macros.h" | 9 #include "base/format_macros.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
11 #include "base/string_util.h" | 11 #include "base/string_util.h" |
12 #include "googleurl/src/gurl.h" | 12 #include "googleurl/src/gurl.h" |
13 #include "net/base/load_log.h" | 13 #include "net/base/net_log.h" |
14 #include "net/base/load_log_unittest.h" | 14 #include "net/base/net_log_unittest.h" |
15 #include "net/base/mock_network_change_notifier.h" | 15 #include "net/base/mock_network_change_notifier.h" |
16 #include "net/base/net_errors.h" | 16 #include "net/base/net_errors.h" |
17 #include "net/base/test_completion_callback.h" | 17 #include "net/base/test_completion_callback.h" |
18 #include "net/proxy/mock_proxy_resolver.h" | 18 #include "net/proxy/mock_proxy_resolver.h" |
19 #include "net/proxy/proxy_config_service.h" | 19 #include "net/proxy/proxy_config_service.h" |
20 #include "net/proxy/proxy_resolver.h" | 20 #include "net/proxy/proxy_resolver.h" |
21 #include "net/proxy/proxy_script_fetcher.h" | 21 #include "net/proxy/proxy_script_fetcher.h" |
22 #include "testing/gtest/include/gtest/gtest.h" | 22 #include "testing/gtest/include/gtest/gtest.h" |
23 | 23 |
24 // TODO(eroman): Write a test which exercises | 24 // TODO(eroman): Write a test which exercises |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
91 | 91 |
92 TEST(ProxyServiceTest, Direct) { | 92 TEST(ProxyServiceTest, Direct) { |
93 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; | 93 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; |
94 scoped_refptr<ProxyService> service( | 94 scoped_refptr<ProxyService> service( |
95 new ProxyService(new MockProxyConfigService, resolver, NULL)); | 95 new ProxyService(new MockProxyConfigService, resolver, NULL)); |
96 | 96 |
97 GURL url("http://www.google.com/"); | 97 GURL url("http://www.google.com/"); |
98 | 98 |
99 ProxyInfo info; | 99 ProxyInfo info; |
100 TestCompletionCallback callback; | 100 TestCompletionCallback callback; |
101 scoped_refptr<LoadLog> log(new LoadLog(LoadLog::kUnbounded)); | 101 CapturingBoundNetLog log(CapturingNetLog::kUnbounded); |
102 int rv = service->ResolveProxy(url, &info, &callback, NULL, log); | 102 int rv = service->ResolveProxy(url, &info, &callback, NULL, log.bound()); |
103 EXPECT_EQ(OK, rv); | 103 EXPECT_EQ(OK, rv); |
104 EXPECT_TRUE(resolver->pending_requests().empty()); | 104 EXPECT_TRUE(resolver->pending_requests().empty()); |
105 EXPECT_TRUE(NULL == service->init_proxy_resolver_log()); | |
106 | 105 |
107 EXPECT_TRUE(info.is_direct()); | 106 EXPECT_TRUE(info.is_direct()); |
108 | 107 |
109 // Check the LoadLog was filled correctly. | 108 // Check the NetLog was filled correctly. |
110 EXPECT_EQ(5u, log->entries().size()); | 109 EXPECT_EQ(5u, log.entries().size()); |
111 EXPECT_TRUE(LogContainsBeginEvent(*log, 0, LoadLog::TYPE_PROXY_SERVICE)); | 110 EXPECT_TRUE(LogContainsBeginEvent( |
112 EXPECT_TRUE(LogContainsEndEvent(*log, 4, LoadLog::TYPE_PROXY_SERVICE)); | 111 log.entries(), 0, NetLog::TYPE_PROXY_SERVICE)); |
| 112 EXPECT_TRUE(LogContainsEndEvent( |
| 113 log.entries(), 4, NetLog::TYPE_PROXY_SERVICE)); |
113 } | 114 } |
114 | 115 |
115 TEST(ProxyServiceTest, PAC) { | 116 TEST(ProxyServiceTest, PAC) { |
116 MockProxyConfigService* config_service = | 117 MockProxyConfigService* config_service = |
117 new MockProxyConfigService("http://foopy/proxy.pac"); | 118 new MockProxyConfigService("http://foopy/proxy.pac"); |
118 | 119 |
119 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; | 120 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; |
120 | 121 |
121 scoped_refptr<ProxyService> service( | 122 scoped_refptr<ProxyService> service( |
122 new ProxyService(config_service, resolver, NULL)); | 123 new ProxyService(config_service, resolver, NULL)); |
123 | 124 |
124 GURL url("http://www.google.com/"); | 125 GURL url("http://www.google.com/"); |
125 | 126 |
126 ProxyInfo info; | 127 ProxyInfo info; |
127 TestCompletionCallback callback; | 128 TestCompletionCallback callback; |
128 scoped_refptr<LoadLog> log(new LoadLog(LoadLog::kUnbounded)); | 129 CapturingBoundNetLog log(CapturingNetLog::kUnbounded); |
129 int rv = service->ResolveProxy(url, &info, &callback, NULL, log); | 130 |
| 131 int rv = service->ResolveProxy(url, &info, &callback, NULL, log.bound()); |
130 EXPECT_EQ(ERR_IO_PENDING, rv); | 132 EXPECT_EQ(ERR_IO_PENDING, rv); |
131 | 133 |
132 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 134 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
133 resolver->pending_set_pac_script_request()->pac_url()); | 135 resolver->pending_set_pac_script_request()->pac_url()); |
134 EXPECT_FALSE(NULL == service->init_proxy_resolver_log()); | |
135 resolver->pending_set_pac_script_request()->CompleteNow(OK); | 136 resolver->pending_set_pac_script_request()->CompleteNow(OK); |
136 | 137 |
137 ASSERT_EQ(1u, resolver->pending_requests().size()); | 138 ASSERT_EQ(1u, resolver->pending_requests().size()); |
138 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); | 139 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); |
139 | 140 |
140 // Set the result in proxy resolver. | 141 // Set the result in proxy resolver. |
141 resolver->pending_requests()[0]->results()->UseNamedProxy("foopy"); | 142 resolver->pending_requests()[0]->results()->UseNamedProxy("foopy"); |
142 resolver->pending_requests()[0]->CompleteNow(OK); | 143 resolver->pending_requests()[0]->CompleteNow(OK); |
143 | 144 |
144 EXPECT_EQ(OK, callback.WaitForResult()); | 145 EXPECT_EQ(OK, callback.WaitForResult()); |
145 EXPECT_FALSE(info.is_direct()); | 146 EXPECT_FALSE(info.is_direct()); |
146 EXPECT_EQ("foopy:80", info.proxy_server().ToURI()); | 147 EXPECT_EQ("foopy:80", info.proxy_server().ToURI()); |
147 | 148 |
148 // Check the LoadLog was filled correctly. | 149 // Check the NetLog was filled correctly. |
149 EXPECT_EQ(7u, log->entries().size()); | 150 EXPECT_EQ(7u, log.entries().size()); |
150 EXPECT_TRUE(LogContainsBeginEvent(*log, 0, LoadLog::TYPE_PROXY_SERVICE)); | |
151 EXPECT_TRUE(LogContainsBeginEvent( | 151 EXPECT_TRUE(LogContainsBeginEvent( |
152 *log, 3, LoadLog::TYPE_PROXY_SERVICE_WAITING_FOR_INIT_PAC)); | 152 log.entries(), 0, NetLog::TYPE_PROXY_SERVICE)); |
| 153 EXPECT_TRUE(LogContainsBeginEvent( |
| 154 log.entries(), 3, NetLog::TYPE_PROXY_SERVICE_WAITING_FOR_INIT_PAC)); |
153 EXPECT_TRUE(LogContainsEndEvent( | 155 EXPECT_TRUE(LogContainsEndEvent( |
154 *log, 4, LoadLog::TYPE_PROXY_SERVICE_WAITING_FOR_INIT_PAC)); | 156 log.entries(), 4, NetLog::TYPE_PROXY_SERVICE_WAITING_FOR_INIT_PAC)); |
155 EXPECT_TRUE(LogContainsEndEvent(*log, 6, LoadLog::TYPE_PROXY_SERVICE)); | 157 EXPECT_TRUE(LogContainsEndEvent( |
| 158 log.entries(), 6, NetLog::TYPE_PROXY_SERVICE)); |
156 } | 159 } |
157 | 160 |
158 // Test that the proxy resolver does not see the URL's username/password | 161 // Test that the proxy resolver does not see the URL's username/password |
159 // or its reference section. | 162 // or its reference section. |
160 TEST(ProxyServiceTest, PAC_NoIdentityOrHash) { | 163 TEST(ProxyServiceTest, PAC_NoIdentityOrHash) { |
161 MockProxyConfigService* config_service = | 164 MockProxyConfigService* config_service = |
162 new MockProxyConfigService("http://foopy/proxy.pac"); | 165 new MockProxyConfigService("http://foopy/proxy.pac"); |
163 | 166 |
164 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; | 167 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; |
165 | 168 |
(...skipping 863 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1029 scoped_refptr<ProxyService> service( | 1032 scoped_refptr<ProxyService> service( |
1030 new ProxyService(config_service, resolver, NULL)); | 1033 new ProxyService(config_service, resolver, NULL)); |
1031 | 1034 |
1032 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; | 1035 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
1033 service->SetProxyScriptFetcher(fetcher); | 1036 service->SetProxyScriptFetcher(fetcher); |
1034 | 1037 |
1035 // Start 3 requests. | 1038 // Start 3 requests. |
1036 ProxyInfo info1; | 1039 ProxyInfo info1; |
1037 TestCompletionCallback callback1; | 1040 TestCompletionCallback callback1; |
1038 ProxyService::PacRequest* request1; | 1041 ProxyService::PacRequest* request1; |
1039 scoped_refptr<LoadLog> log1(new LoadLog(LoadLog::kUnbounded)); | 1042 CapturingBoundNetLog log1(CapturingNetLog::kUnbounded); |
1040 int rv = service->ResolveProxy( | 1043 int rv = service->ResolveProxy( |
1041 GURL("http://request1"), &info1, &callback1, &request1, log1); | 1044 GURL("http://request1"), &info1, &callback1, &request1, log1.bound()); |
1042 EXPECT_EQ(ERR_IO_PENDING, rv); | 1045 EXPECT_EQ(ERR_IO_PENDING, rv); |
1043 | 1046 |
1044 // The first request should have triggered download of PAC script. | 1047 // The first request should have triggered download of PAC script. |
1045 EXPECT_TRUE(fetcher->has_pending_request()); | 1048 EXPECT_TRUE(fetcher->has_pending_request()); |
1046 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); | 1049 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); |
1047 | 1050 |
1048 ProxyInfo info2; | 1051 ProxyInfo info2; |
1049 TestCompletionCallback callback2; | 1052 TestCompletionCallback callback2; |
1050 ProxyService::PacRequest* request2; | 1053 ProxyService::PacRequest* request2; |
1051 rv = service->ResolveProxy( | 1054 rv = service->ResolveProxy( |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1083 resolver->pending_requests()[0]->CompleteNow(OK); | 1086 resolver->pending_requests()[0]->CompleteNow(OK); |
1084 | 1087 |
1085 EXPECT_EQ(OK, callback3.WaitForResult()); | 1088 EXPECT_EQ(OK, callback3.WaitForResult()); |
1086 EXPECT_EQ("request3:80", info3.proxy_server().ToURI()); | 1089 EXPECT_EQ("request3:80", info3.proxy_server().ToURI()); |
1087 | 1090 |
1088 EXPECT_TRUE(resolver->cancelled_requests().empty()); | 1091 EXPECT_TRUE(resolver->cancelled_requests().empty()); |
1089 | 1092 |
1090 EXPECT_FALSE(callback1.have_result()); // Cancelled. | 1093 EXPECT_FALSE(callback1.have_result()); // Cancelled. |
1091 EXPECT_FALSE(callback2.have_result()); // Cancelled. | 1094 EXPECT_FALSE(callback2.have_result()); // Cancelled. |
1092 | 1095 |
1093 // Check the LoadLog for request 1 (which was cancelled) got filled properly. | 1096 // Check the NetLog for request 1 (which was cancelled) got filled properly. |
1094 EXPECT_EQ(6u, log1->entries().size()); | 1097 EXPECT_EQ(6u, log1.entries().size()); |
1095 EXPECT_TRUE(LogContainsBeginEvent(*log1, 0, LoadLog::TYPE_PROXY_SERVICE)); | |
1096 EXPECT_TRUE(LogContainsBeginEvent( | 1098 EXPECT_TRUE(LogContainsBeginEvent( |
1097 *log1, 3, LoadLog::TYPE_PROXY_SERVICE_WAITING_FOR_INIT_PAC)); | 1099 log1.entries(), 0, NetLog::TYPE_PROXY_SERVICE)); |
| 1100 EXPECT_TRUE(LogContainsBeginEvent( |
| 1101 log1.entries(), 3, NetLog::TYPE_PROXY_SERVICE_WAITING_FOR_INIT_PAC)); |
1098 // Note that TYPE_PROXY_SERVICE_WAITING_FOR_INIT_PAC is never completed before | 1102 // Note that TYPE_PROXY_SERVICE_WAITING_FOR_INIT_PAC is never completed before |
1099 // the cancellation occured. | 1103 // the cancellation occured. |
1100 EXPECT_TRUE(LogContainsEvent( | 1104 EXPECT_TRUE(LogContainsEvent( |
1101 *log1, 4, LoadLog::TYPE_CANCELLED, LoadLog::PHASE_NONE)); | 1105 log1.entries(), 4, NetLog::TYPE_CANCELLED, NetLog::PHASE_NONE)); |
1102 EXPECT_TRUE(LogContainsEndEvent(*log1, 5, LoadLog::TYPE_PROXY_SERVICE)); | 1106 EXPECT_TRUE(LogContainsEndEvent( |
| 1107 log1.entries(), 5, NetLog::TYPE_PROXY_SERVICE)); |
1103 } | 1108 } |
1104 | 1109 |
1105 // Test that if auto-detect fails, we fall-back to the custom pac. | 1110 // Test that if auto-detect fails, we fall-back to the custom pac. |
1106 TEST(ProxyServiceTest, FallbackFromAutodetectToCustomPac) { | 1111 TEST(ProxyServiceTest, FallbackFromAutodetectToCustomPac) { |
1107 ProxyConfig config; | 1112 ProxyConfig config; |
1108 config.set_auto_detect(true); | 1113 config.set_auto_detect(true); |
1109 config.set_pac_url(GURL("http://foopy/proxy.pac")); | 1114 config.set_pac_url(GURL("http://foopy/proxy.pac")); |
1110 config.proxy_rules().ParseFromString("http=foopy:80"); // Won't be used. | 1115 config.proxy_rules().ParseFromString("http=foopy:80"); // Won't be used. |
1111 | 1116 |
1112 MockProxyConfigService* config_service = new MockProxyConfigService(config); | 1117 MockProxyConfigService* config_service = new MockProxyConfigService(config); |
(...skipping 542 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1655 // Complete the pending second request. | 1660 // Complete the pending second request. |
1656 resolver->pending_requests()[0]->results()->UseNamedProxy("request2:80"); | 1661 resolver->pending_requests()[0]->results()->UseNamedProxy("request2:80"); |
1657 resolver->pending_requests()[0]->CompleteNow(OK); | 1662 resolver->pending_requests()[0]->CompleteNow(OK); |
1658 | 1663 |
1659 // Wait for completion callback, and verify that the request ran as expected. | 1664 // Wait for completion callback, and verify that the request ran as expected. |
1660 EXPECT_EQ(OK, callback2.WaitForResult()); | 1665 EXPECT_EQ(OK, callback2.WaitForResult()); |
1661 EXPECT_EQ("request2:80", info2.proxy_server().ToURI()); | 1666 EXPECT_EQ("request2:80", info2.proxy_server().ToURI()); |
1662 } | 1667 } |
1663 | 1668 |
1664 } // namespace net | 1669 } // namespace net |
OLD | NEW |