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" |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
85 | 85 |
86 private: | 86 private: |
87 GURL pending_request_url_; | 87 GURL pending_request_url_; |
88 CompletionCallback* pending_request_callback_; | 88 CompletionCallback* pending_request_callback_; |
89 std::string* pending_request_bytes_; | 89 std::string* pending_request_bytes_; |
90 }; | 90 }; |
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, NULL)); |
96 BoundNetLog())); | |
97 | 96 |
98 GURL url("http://www.google.com/"); | 97 GURL url("http://www.google.com/"); |
99 | 98 |
100 ProxyInfo info; | 99 ProxyInfo info; |
101 TestCompletionCallback callback; | 100 TestCompletionCallback callback; |
102 CapturingBoundNetLog log(CapturingNetLog::kUnbounded); | 101 CapturingBoundNetLog log(CapturingNetLog::kUnbounded); |
103 int rv = service->ResolveProxy(url, &info, &callback, NULL, log.bound()); | 102 int rv = service->ResolveProxy(url, &info, &callback, NULL, log.bound()); |
104 EXPECT_EQ(OK, rv); | 103 EXPECT_EQ(OK, rv); |
105 EXPECT_TRUE(resolver->pending_requests().empty()); | 104 EXPECT_TRUE(resolver->pending_requests().empty()); |
106 | 105 |
107 EXPECT_TRUE(info.is_direct()); | 106 EXPECT_TRUE(info.is_direct()); |
108 | 107 |
109 // Check the NetLog 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( | 110 EXPECT_TRUE(LogContainsBeginEvent( |
112 log.entries(), 0, NetLog::TYPE_PROXY_SERVICE)); | 111 log.entries(), 0, NetLog::TYPE_PROXY_SERVICE)); |
113 EXPECT_TRUE(LogContainsEndEvent( | 112 EXPECT_TRUE(LogContainsEndEvent( |
114 log.entries(), 4, NetLog::TYPE_PROXY_SERVICE)); | 113 log.entries(), 4, NetLog::TYPE_PROXY_SERVICE)); |
115 } | 114 } |
116 | 115 |
117 TEST(ProxyServiceTest, PAC) { | 116 TEST(ProxyServiceTest, PAC) { |
118 MockProxyConfigService* config_service = | 117 MockProxyConfigService* config_service = |
119 new MockProxyConfigService("http://foopy/proxy.pac"); | 118 new MockProxyConfigService("http://foopy/proxy.pac"); |
120 | 119 |
121 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; | 120 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; |
122 | 121 |
123 scoped_refptr<ProxyService> service( | 122 scoped_refptr<ProxyService> service( |
124 new ProxyService(config_service, resolver, NULL, BoundNetLog())); | 123 new ProxyService(config_service, resolver, NULL, NULL)); |
125 | 124 |
126 GURL url("http://www.google.com/"); | 125 GURL url("http://www.google.com/"); |
127 | 126 |
128 ProxyInfo info; | 127 ProxyInfo info; |
129 TestCompletionCallback callback; | 128 TestCompletionCallback callback; |
130 CapturingBoundNetLog log(CapturingNetLog::kUnbounded); | 129 CapturingBoundNetLog log(CapturingNetLog::kUnbounded); |
131 | 130 |
132 int rv = service->ResolveProxy(url, &info, &callback, NULL, log.bound()); | 131 int rv = service->ResolveProxy(url, &info, &callback, NULL, log.bound()); |
133 EXPECT_EQ(ERR_IO_PENDING, rv); | 132 EXPECT_EQ(ERR_IO_PENDING, rv); |
134 | 133 |
(...skipping 26 matching lines...) Expand all Loading... |
161 | 160 |
162 // 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 |
163 // or its reference section. | 162 // or its reference section. |
164 TEST(ProxyServiceTest, PAC_NoIdentityOrHash) { | 163 TEST(ProxyServiceTest, PAC_NoIdentityOrHash) { |
165 MockProxyConfigService* config_service = | 164 MockProxyConfigService* config_service = |
166 new MockProxyConfigService("http://foopy/proxy.pac"); | 165 new MockProxyConfigService("http://foopy/proxy.pac"); |
167 | 166 |
168 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; | 167 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; |
169 | 168 |
170 scoped_refptr<ProxyService> service( | 169 scoped_refptr<ProxyService> service( |
171 new ProxyService(config_service, resolver, NULL, BoundNetLog())); | 170 new ProxyService(config_service, resolver, NULL, NULL)); |
172 | 171 |
173 GURL url("http://username:password@www.google.com/?ref#hash#hash"); | 172 GURL url("http://username:password@www.google.com/?ref#hash#hash"); |
174 | 173 |
175 ProxyInfo info; | 174 ProxyInfo info; |
176 TestCompletionCallback callback; | 175 TestCompletionCallback callback; |
177 int rv = service->ResolveProxy(url, &info, &callback, NULL, NULL); | 176 int rv = service->ResolveProxy(url, &info, &callback, NULL, BoundNetLog()); |
178 EXPECT_EQ(ERR_IO_PENDING, rv); | 177 EXPECT_EQ(ERR_IO_PENDING, rv); |
179 | 178 |
180 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 179 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
181 resolver->pending_set_pac_script_request()->pac_url()); | 180 resolver->pending_set_pac_script_request()->pac_url()); |
182 resolver->pending_set_pac_script_request()->CompleteNow(OK); | 181 resolver->pending_set_pac_script_request()->CompleteNow(OK); |
183 | 182 |
184 ASSERT_EQ(1u, resolver->pending_requests().size()); | 183 ASSERT_EQ(1u, resolver->pending_requests().size()); |
185 // The URL should have been simplified, stripping the username/password/hash. | 184 // The URL should have been simplified, stripping the username/password/hash. |
186 EXPECT_EQ(GURL("http://www.google.com/?ref"), | 185 EXPECT_EQ(GURL("http://www.google.com/?ref"), |
187 resolver->pending_requests()[0]->url()); | 186 resolver->pending_requests()[0]->url()); |
188 | 187 |
189 // We end here without ever completing the request -- destruction of | 188 // We end here without ever completing the request -- destruction of |
190 // ProxyService will cancel the outstanding request. | 189 // ProxyService will cancel the outstanding request. |
191 } | 190 } |
192 | 191 |
193 TEST(ProxyServiceTest, PAC_FailoverWithoutDirect) { | 192 TEST(ProxyServiceTest, PAC_FailoverWithoutDirect) { |
194 MockProxyConfigService* config_service = | 193 MockProxyConfigService* config_service = |
195 new MockProxyConfigService("http://foopy/proxy.pac"); | 194 new MockProxyConfigService("http://foopy/proxy.pac"); |
196 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; | 195 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; |
197 | 196 |
198 scoped_refptr<ProxyService> service( | 197 scoped_refptr<ProxyService> service( |
199 new ProxyService(config_service, resolver, NULL, BoundNetLog())); | 198 new ProxyService(config_service, resolver, NULL, NULL)); |
200 | 199 |
201 GURL url("http://www.google.com/"); | 200 GURL url("http://www.google.com/"); |
202 | 201 |
203 ProxyInfo info; | 202 ProxyInfo info; |
204 TestCompletionCallback callback1; | 203 TestCompletionCallback callback1; |
205 int rv = service->ResolveProxy(url, &info, &callback1, NULL, NULL); | 204 int rv = service->ResolveProxy(url, &info, &callback1, NULL, BoundNetLog()); |
206 EXPECT_EQ(ERR_IO_PENDING, rv); | 205 EXPECT_EQ(ERR_IO_PENDING, rv); |
207 | 206 |
208 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 207 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
209 resolver->pending_set_pac_script_request()->pac_url()); | 208 resolver->pending_set_pac_script_request()->pac_url()); |
210 resolver->pending_set_pac_script_request()->CompleteNow(OK); | 209 resolver->pending_set_pac_script_request()->CompleteNow(OK); |
211 | 210 |
212 ASSERT_EQ(1u, resolver->pending_requests().size()); | 211 ASSERT_EQ(1u, resolver->pending_requests().size()); |
213 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); | 212 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); |
214 | 213 |
215 // Set the result in proxy resolver. | 214 // Set the result in proxy resolver. |
216 resolver->pending_requests()[0]->results()->UseNamedProxy("foopy:8080"); | 215 resolver->pending_requests()[0]->results()->UseNamedProxy("foopy:8080"); |
217 resolver->pending_requests()[0]->CompleteNow(OK); | 216 resolver->pending_requests()[0]->CompleteNow(OK); |
218 | 217 |
219 EXPECT_EQ(OK, callback1.WaitForResult()); | 218 EXPECT_EQ(OK, callback1.WaitForResult()); |
220 EXPECT_FALSE(info.is_direct()); | 219 EXPECT_FALSE(info.is_direct()); |
221 EXPECT_EQ("foopy:8080", info.proxy_server().ToURI()); | 220 EXPECT_EQ("foopy:8080", info.proxy_server().ToURI()); |
222 | 221 |
223 // Now, imagine that connecting to foopy:8080 fails: there is nothing | 222 // Now, imagine that connecting to foopy:8080 fails: there is nothing |
224 // left to fallback to, since our proxy list was NOT terminated by | 223 // left to fallback to, since our proxy list was NOT terminated by |
225 // DIRECT. | 224 // DIRECT. |
226 TestCompletionCallback callback2; | 225 TestCompletionCallback callback2; |
227 rv = service->ReconsiderProxyAfterError(url, &info, &callback2, NULL, NULL); | 226 rv = service->ReconsiderProxyAfterError(url, &info, &callback2, NULL, |
| 227 BoundNetLog()); |
228 // ReconsiderProxyAfterError returns error indicating nothing left. | 228 // ReconsiderProxyAfterError returns error indicating nothing left. |
229 EXPECT_EQ(ERR_FAILED, rv); | 229 EXPECT_EQ(ERR_FAILED, rv); |
230 EXPECT_TRUE(info.is_empty()); | 230 EXPECT_TRUE(info.is_empty()); |
231 } | 231 } |
232 | 232 |
233 // The proxy list could potentially contain the DIRECT fallback choice | 233 // The proxy list could potentially contain the DIRECT fallback choice |
234 // in a location other than the very end of the list, and could even | 234 // in a location other than the very end of the list, and could even |
235 // specify it multiple times. | 235 // specify it multiple times. |
236 // | 236 // |
237 // This is not a typical usage, but we will obey it. | 237 // This is not a typical usage, but we will obey it. |
238 // (If we wanted to disallow this type of input, the right place to | 238 // (If we wanted to disallow this type of input, the right place to |
239 // enforce it would be in parsing the PAC result string). | 239 // enforce it would be in parsing the PAC result string). |
240 // | 240 // |
241 // This test will use the PAC result string: | 241 // This test will use the PAC result string: |
242 // | 242 // |
243 // "DIRECT ; PROXY foobar:10 ; DIRECT ; PROXY foobar:20" | 243 // "DIRECT ; PROXY foobar:10 ; DIRECT ; PROXY foobar:20" |
244 // | 244 // |
245 // For which we expect it to try DIRECT, then foobar:10, then DIRECT again, | 245 // For which we expect it to try DIRECT, then foobar:10, then DIRECT again, |
246 // then foobar:20, and then give up and error. | 246 // then foobar:20, and then give up and error. |
247 // | 247 // |
248 // The important check of this test is to make sure that DIRECT is not somehow | 248 // The important check of this test is to make sure that DIRECT is not somehow |
249 // cached as being a bad proxy. | 249 // cached as being a bad proxy. |
250 TEST(ProxyServiceTest, PAC_FailoverAfterDirect) { | 250 TEST(ProxyServiceTest, PAC_FailoverAfterDirect) { |
251 MockProxyConfigService* config_service = | 251 MockProxyConfigService* config_service = |
252 new MockProxyConfigService("http://foopy/proxy.pac"); | 252 new MockProxyConfigService("http://foopy/proxy.pac"); |
253 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; | 253 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; |
254 | 254 |
255 scoped_refptr<ProxyService> service( | 255 scoped_refptr<ProxyService> service( |
256 new ProxyService(config_service, resolver, NULL, BoundNetLog())); | 256 new ProxyService(config_service, resolver, NULL, NULL)); |
257 | 257 |
258 GURL url("http://www.google.com/"); | 258 GURL url("http://www.google.com/"); |
259 | 259 |
260 ProxyInfo info; | 260 ProxyInfo info; |
261 TestCompletionCallback callback1; | 261 TestCompletionCallback callback1; |
262 int rv = service->ResolveProxy(url, &info, &callback1, NULL, NULL); | 262 int rv = service->ResolveProxy(url, &info, &callback1, NULL, BoundNetLog()); |
263 EXPECT_EQ(ERR_IO_PENDING, rv); | 263 EXPECT_EQ(ERR_IO_PENDING, rv); |
264 | 264 |
265 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 265 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
266 resolver->pending_set_pac_script_request()->pac_url()); | 266 resolver->pending_set_pac_script_request()->pac_url()); |
267 resolver->pending_set_pac_script_request()->CompleteNow(OK); | 267 resolver->pending_set_pac_script_request()->CompleteNow(OK); |
268 | 268 |
269 ASSERT_EQ(1u, resolver->pending_requests().size()); | 269 ASSERT_EQ(1u, resolver->pending_requests().size()); |
270 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); | 270 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); |
271 | 271 |
272 // Set the result in proxy resolver. | 272 // Set the result in proxy resolver. |
273 resolver->pending_requests()[0]->results()->UsePacString( | 273 resolver->pending_requests()[0]->results()->UsePacString( |
274 "DIRECT ; PROXY foobar:10 ; DIRECT ; PROXY foobar:20"); | 274 "DIRECT ; PROXY foobar:10 ; DIRECT ; PROXY foobar:20"); |
275 resolver->pending_requests()[0]->CompleteNow(OK); | 275 resolver->pending_requests()[0]->CompleteNow(OK); |
276 | 276 |
277 EXPECT_EQ(OK, callback1.WaitForResult()); | 277 EXPECT_EQ(OK, callback1.WaitForResult()); |
278 EXPECT_TRUE(info.is_direct()); | 278 EXPECT_TRUE(info.is_direct()); |
279 | 279 |
280 // Fallback 1. | 280 // Fallback 1. |
281 TestCompletionCallback callback2; | 281 TestCompletionCallback callback2; |
282 rv = service->ReconsiderProxyAfterError(url, &info, &callback2, NULL, NULL); | 282 rv = service->ReconsiderProxyAfterError(url, &info, &callback2, NULL, |
| 283 BoundNetLog()); |
283 EXPECT_EQ(OK, rv); | 284 EXPECT_EQ(OK, rv); |
284 EXPECT_FALSE(info.is_direct()); | 285 EXPECT_FALSE(info.is_direct()); |
285 EXPECT_EQ("foobar:10", info.proxy_server().ToURI()); | 286 EXPECT_EQ("foobar:10", info.proxy_server().ToURI()); |
286 | 287 |
287 // Fallback 2. | 288 // Fallback 2. |
288 TestCompletionCallback callback3; | 289 TestCompletionCallback callback3; |
289 rv = service->ReconsiderProxyAfterError(url, &info, &callback3, NULL, NULL); | 290 rv = service->ReconsiderProxyAfterError(url, &info, &callback3, NULL, |
| 291 BoundNetLog()); |
290 EXPECT_EQ(OK, rv); | 292 EXPECT_EQ(OK, rv); |
291 EXPECT_TRUE(info.is_direct()); | 293 EXPECT_TRUE(info.is_direct()); |
292 | 294 |
293 // Fallback 3. | 295 // Fallback 3. |
294 TestCompletionCallback callback4; | 296 TestCompletionCallback callback4; |
295 rv = service->ReconsiderProxyAfterError(url, &info, &callback4, NULL, NULL); | 297 rv = service->ReconsiderProxyAfterError(url, &info, &callback4, NULL, |
| 298 BoundNetLog()); |
296 EXPECT_EQ(OK, rv); | 299 EXPECT_EQ(OK, rv); |
297 EXPECT_FALSE(info.is_direct()); | 300 EXPECT_FALSE(info.is_direct()); |
298 EXPECT_EQ("foobar:20", info.proxy_server().ToURI()); | 301 EXPECT_EQ("foobar:20", info.proxy_server().ToURI()); |
299 | 302 |
300 // Fallback 4 -- Nothing to fall back to! | 303 // Fallback 4 -- Nothing to fall back to! |
301 TestCompletionCallback callback5; | 304 TestCompletionCallback callback5; |
302 rv = service->ReconsiderProxyAfterError(url, &info, &callback5, NULL, NULL); | 305 rv = service->ReconsiderProxyAfterError(url, &info, &callback5, NULL, |
| 306 BoundNetLog()); |
303 EXPECT_EQ(ERR_FAILED, rv); | 307 EXPECT_EQ(ERR_FAILED, rv); |
304 EXPECT_TRUE(info.is_empty()); | 308 EXPECT_TRUE(info.is_empty()); |
305 } | 309 } |
306 | 310 |
307 TEST(ProxyServiceTest, ProxyResolverFails) { | 311 TEST(ProxyServiceTest, ProxyResolverFails) { |
308 // Test what happens when the ProxyResolver fails. The download and setting | 312 // Test what happens when the ProxyResolver fails. The download and setting |
309 // of the PAC script have already succeeded, so this corresponds with a | 313 // of the PAC script have already succeeded, so this corresponds with a |
310 // javascript runtime error while calling FindProxyForURL(). | 314 // javascript runtime error while calling FindProxyForURL(). |
311 | 315 |
312 MockProxyConfigService* config_service = | 316 MockProxyConfigService* config_service = |
313 new MockProxyConfigService("http://foopy/proxy.pac"); | 317 new MockProxyConfigService("http://foopy/proxy.pac"); |
314 | 318 |
315 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; | 319 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; |
316 | 320 |
317 scoped_refptr<ProxyService> service( | 321 scoped_refptr<ProxyService> service( |
318 new ProxyService(config_service, resolver, NULL, BoundNetLog())); | 322 new ProxyService(config_service, resolver, NULL, NULL)); |
319 | 323 |
320 // Start first resolve request. | 324 // Start first resolve request. |
321 GURL url("http://www.google.com/"); | 325 GURL url("http://www.google.com/"); |
322 ProxyInfo info; | 326 ProxyInfo info; |
323 TestCompletionCallback callback1; | 327 TestCompletionCallback callback1; |
324 int rv = service->ResolveProxy(url, &info, &callback1, NULL, NULL); | 328 int rv = service->ResolveProxy(url, &info, &callback1, NULL, BoundNetLog()); |
325 EXPECT_EQ(ERR_IO_PENDING, rv); | 329 EXPECT_EQ(ERR_IO_PENDING, rv); |
326 | 330 |
327 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 331 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
328 resolver->pending_set_pac_script_request()->pac_url()); | 332 resolver->pending_set_pac_script_request()->pac_url()); |
329 resolver->pending_set_pac_script_request()->CompleteNow(OK); | 333 resolver->pending_set_pac_script_request()->CompleteNow(OK); |
330 | 334 |
331 ASSERT_EQ(1u, resolver->pending_requests().size()); | 335 ASSERT_EQ(1u, resolver->pending_requests().size()); |
332 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); | 336 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); |
333 | 337 |
334 // Fail the first resolve request in MockAsyncProxyResolver. | 338 // Fail the first resolve request in MockAsyncProxyResolver. |
335 resolver->pending_requests()[0]->CompleteNow(ERR_FAILED); | 339 resolver->pending_requests()[0]->CompleteNow(ERR_FAILED); |
336 | 340 |
337 // Although the proxy resolver failed the request, ProxyService implicitly | 341 // Although the proxy resolver failed the request, ProxyService implicitly |
338 // falls-back to DIRECT. | 342 // falls-back to DIRECT. |
339 EXPECT_EQ(OK, callback1.WaitForResult()); | 343 EXPECT_EQ(OK, callback1.WaitForResult()); |
340 EXPECT_TRUE(info.is_direct()); | 344 EXPECT_TRUE(info.is_direct()); |
341 | 345 |
342 // The second resolve request will try to run through the proxy resolver, | 346 // The second resolve request will try to run through the proxy resolver, |
343 // regardless of whether the first request failed in it. | 347 // regardless of whether the first request failed in it. |
344 TestCompletionCallback callback2; | 348 TestCompletionCallback callback2; |
345 rv = service->ResolveProxy(url, &info, &callback2, NULL, NULL); | 349 rv = service->ResolveProxy(url, &info, &callback2, NULL, BoundNetLog()); |
346 EXPECT_EQ(ERR_IO_PENDING, rv); | 350 EXPECT_EQ(ERR_IO_PENDING, rv); |
347 | 351 |
348 ASSERT_EQ(1u, resolver->pending_requests().size()); | 352 ASSERT_EQ(1u, resolver->pending_requests().size()); |
349 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); | 353 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); |
350 | 354 |
351 // This time we will have the resolver succeed (perhaps the PAC script has | 355 // This time we will have the resolver succeed (perhaps the PAC script has |
352 // a dependency on the current time). | 356 // a dependency on the current time). |
353 resolver->pending_requests()[0]->results()->UseNamedProxy("foopy_valid:8080"); | 357 resolver->pending_requests()[0]->results()->UseNamedProxy("foopy_valid:8080"); |
354 resolver->pending_requests()[0]->CompleteNow(OK); | 358 resolver->pending_requests()[0]->CompleteNow(OK); |
355 | 359 |
356 EXPECT_EQ(OK, callback2.WaitForResult()); | 360 EXPECT_EQ(OK, callback2.WaitForResult()); |
357 EXPECT_FALSE(info.is_direct()); | 361 EXPECT_FALSE(info.is_direct()); |
358 EXPECT_EQ("foopy_valid:8080", info.proxy_server().ToURI()); | 362 EXPECT_EQ("foopy_valid:8080", info.proxy_server().ToURI()); |
359 } | 363 } |
360 | 364 |
361 TEST(ProxyServiceTest, ProxyFallback) { | 365 TEST(ProxyServiceTest, ProxyFallback) { |
362 // Test what happens when we specify multiple proxy servers and some of them | 366 // Test what happens when we specify multiple proxy servers and some of them |
363 // are bad. | 367 // are bad. |
364 | 368 |
365 MockProxyConfigService* config_service = | 369 MockProxyConfigService* config_service = |
366 new MockProxyConfigService("http://foopy/proxy.pac"); | 370 new MockProxyConfigService("http://foopy/proxy.pac"); |
367 | 371 |
368 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; | 372 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; |
369 | 373 |
370 scoped_refptr<ProxyService> service( | 374 scoped_refptr<ProxyService> service( |
371 new ProxyService(config_service, resolver, NULL, BoundNetLog())); | 375 new ProxyService(config_service, resolver, NULL, NULL)); |
372 | 376 |
373 GURL url("http://www.google.com/"); | 377 GURL url("http://www.google.com/"); |
374 | 378 |
375 // Get the proxy information. | 379 // Get the proxy information. |
376 ProxyInfo info; | 380 ProxyInfo info; |
377 TestCompletionCallback callback1; | 381 TestCompletionCallback callback1; |
378 int rv = service->ResolveProxy(url, &info, &callback1, NULL, NULL); | 382 int rv = service->ResolveProxy(url, &info, &callback1, NULL, BoundNetLog()); |
379 EXPECT_EQ(ERR_IO_PENDING, rv); | 383 EXPECT_EQ(ERR_IO_PENDING, rv); |
380 | 384 |
381 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 385 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
382 resolver->pending_set_pac_script_request()->pac_url()); | 386 resolver->pending_set_pac_script_request()->pac_url()); |
383 resolver->pending_set_pac_script_request()->CompleteNow(OK); | 387 resolver->pending_set_pac_script_request()->CompleteNow(OK); |
384 | 388 |
385 ASSERT_EQ(1u, resolver->pending_requests().size()); | 389 ASSERT_EQ(1u, resolver->pending_requests().size()); |
386 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); | 390 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); |
387 | 391 |
388 // Set the result in proxy resolver. | 392 // Set the result in proxy resolver. |
389 resolver->pending_requests()[0]->results()->UseNamedProxy( | 393 resolver->pending_requests()[0]->results()->UseNamedProxy( |
390 "foopy1:8080;foopy2:9090"); | 394 "foopy1:8080;foopy2:9090"); |
391 resolver->pending_requests()[0]->CompleteNow(OK); | 395 resolver->pending_requests()[0]->CompleteNow(OK); |
392 | 396 |
393 // The first item is valid. | 397 // The first item is valid. |
394 EXPECT_EQ(OK, callback1.WaitForResult()); | 398 EXPECT_EQ(OK, callback1.WaitForResult()); |
395 EXPECT_FALSE(info.is_direct()); | 399 EXPECT_FALSE(info.is_direct()); |
396 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); | 400 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
397 | 401 |
398 // Fake an error on the proxy. | 402 // Fake an error on the proxy. |
399 TestCompletionCallback callback2; | 403 TestCompletionCallback callback2; |
400 rv = service->ReconsiderProxyAfterError(url, &info, &callback2, NULL, NULL); | 404 rv = service->ReconsiderProxyAfterError(url, &info, &callback2, NULL, |
| 405 BoundNetLog()); |
401 EXPECT_EQ(OK, rv); | 406 EXPECT_EQ(OK, rv); |
402 | 407 |
403 // The second proxy should be specified. | 408 // The second proxy should be specified. |
404 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); | 409 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); |
405 | 410 |
406 TestCompletionCallback callback3; | 411 TestCompletionCallback callback3; |
407 rv = service->ResolveProxy(url, &info, &callback3, NULL, NULL); | 412 rv = service->ResolveProxy(url, &info, &callback3, NULL, BoundNetLog()); |
408 EXPECT_EQ(ERR_IO_PENDING, rv); | 413 EXPECT_EQ(ERR_IO_PENDING, rv); |
409 | 414 |
410 ASSERT_EQ(1u, resolver->pending_requests().size()); | 415 ASSERT_EQ(1u, resolver->pending_requests().size()); |
411 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); | 416 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); |
412 | 417 |
413 // Set the result in proxy resolver -- the second result is already known | 418 // Set the result in proxy resolver -- the second result is already known |
414 // to be bad, so we will not try to use it initially. | 419 // to be bad, so we will not try to use it initially. |
415 resolver->pending_requests()[0]->results()->UseNamedProxy( | 420 resolver->pending_requests()[0]->results()->UseNamedProxy( |
416 "foopy3:7070;foopy1:8080;foopy2:9090"); | 421 "foopy3:7070;foopy1:8080;foopy2:9090"); |
417 resolver->pending_requests()[0]->CompleteNow(OK); | 422 resolver->pending_requests()[0]->CompleteNow(OK); |
418 | 423 |
419 EXPECT_EQ(OK, callback3.WaitForResult()); | 424 EXPECT_EQ(OK, callback3.WaitForResult()); |
420 EXPECT_FALSE(info.is_direct()); | 425 EXPECT_FALSE(info.is_direct()); |
421 EXPECT_EQ("foopy3:7070", info.proxy_server().ToURI()); | 426 EXPECT_EQ("foopy3:7070", info.proxy_server().ToURI()); |
422 | 427 |
423 // We fake another error. It should now try the third one. | 428 // We fake another error. It should now try the third one. |
424 TestCompletionCallback callback4; | 429 TestCompletionCallback callback4; |
425 rv = service->ReconsiderProxyAfterError(url, &info, &callback4, NULL, NULL); | 430 rv = service->ReconsiderProxyAfterError(url, &info, &callback4, NULL, |
| 431 BoundNetLog()); |
426 EXPECT_EQ(OK, rv); | 432 EXPECT_EQ(OK, rv); |
427 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); | 433 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); |
428 | 434 |
429 // We fake another error. At this point we have tried all of the | 435 // We fake another error. At this point we have tried all of the |
430 // proxy servers we thought were valid; next we try the proxy server | 436 // proxy servers we thought were valid; next we try the proxy server |
431 // that was in our bad proxies map (foopy1:8080). | 437 // that was in our bad proxies map (foopy1:8080). |
432 TestCompletionCallback callback5; | 438 TestCompletionCallback callback5; |
433 rv = service->ReconsiderProxyAfterError(url, &info, &callback5, NULL, NULL); | 439 rv = service->ReconsiderProxyAfterError(url, &info, &callback5, NULL, |
| 440 BoundNetLog()); |
434 EXPECT_EQ(OK, rv); | 441 EXPECT_EQ(OK, rv); |
435 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); | 442 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
436 | 443 |
437 // Fake another error, the last proxy is gone, the list should now be empty, | 444 // Fake another error, the last proxy is gone, the list should now be empty, |
438 // so there is nothing left to try. | 445 // so there is nothing left to try. |
439 TestCompletionCallback callback6; | 446 TestCompletionCallback callback6; |
440 rv = service->ReconsiderProxyAfterError(url, &info, &callback6, NULL, NULL); | 447 rv = service->ReconsiderProxyAfterError(url, &info, &callback6, NULL, |
| 448 BoundNetLog()); |
441 EXPECT_EQ(ERR_FAILED, rv); | 449 EXPECT_EQ(ERR_FAILED, rv); |
442 EXPECT_FALSE(info.is_direct()); | 450 EXPECT_FALSE(info.is_direct()); |
443 EXPECT_TRUE(info.is_empty()); | 451 EXPECT_TRUE(info.is_empty()); |
444 | 452 |
445 // TODO(nsylvain): Test that the proxy can be retried after the delay. | 453 // TODO(nsylvain): Test that the proxy can be retried after the delay. |
446 } | 454 } |
447 | 455 |
448 // This test is similar to ProxyFallback, but this time we have an explicit | 456 // This test is similar to ProxyFallback, but this time we have an explicit |
449 // fallback choice to DIRECT. | 457 // fallback choice to DIRECT. |
450 TEST(ProxyServiceTest, ProxyFallbackToDirect) { | 458 TEST(ProxyServiceTest, ProxyFallbackToDirect) { |
451 MockProxyConfigService* config_service = | 459 MockProxyConfigService* config_service = |
452 new MockProxyConfigService("http://foopy/proxy.pac"); | 460 new MockProxyConfigService("http://foopy/proxy.pac"); |
453 | 461 |
454 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; | 462 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; |
455 | 463 |
456 scoped_refptr<ProxyService> service( | 464 scoped_refptr<ProxyService> service( |
457 new ProxyService(config_service, resolver, NULL, BoundNetLog())); | 465 new ProxyService(config_service, resolver, NULL, NULL)); |
458 | 466 |
459 GURL url("http://www.google.com/"); | 467 GURL url("http://www.google.com/"); |
460 | 468 |
461 // Get the proxy information. | 469 // Get the proxy information. |
462 ProxyInfo info; | 470 ProxyInfo info; |
463 TestCompletionCallback callback1; | 471 TestCompletionCallback callback1; |
464 int rv = service->ResolveProxy(url, &info, &callback1, NULL, NULL); | 472 int rv = service->ResolveProxy(url, &info, &callback1, NULL, BoundNetLog()); |
465 EXPECT_EQ(ERR_IO_PENDING, rv); | 473 EXPECT_EQ(ERR_IO_PENDING, rv); |
466 | 474 |
467 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 475 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
468 resolver->pending_set_pac_script_request()->pac_url()); | 476 resolver->pending_set_pac_script_request()->pac_url()); |
469 resolver->pending_set_pac_script_request()->CompleteNow(OK); | 477 resolver->pending_set_pac_script_request()->CompleteNow(OK); |
470 | 478 |
471 ASSERT_EQ(1u, resolver->pending_requests().size()); | 479 ASSERT_EQ(1u, resolver->pending_requests().size()); |
472 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); | 480 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); |
473 | 481 |
474 // Set the result in proxy resolver. | 482 // Set the result in proxy resolver. |
475 resolver->pending_requests()[0]->results()->UsePacString( | 483 resolver->pending_requests()[0]->results()->UsePacString( |
476 "PROXY foopy1:8080; PROXY foopy2:9090; DIRECT"); | 484 "PROXY foopy1:8080; PROXY foopy2:9090; DIRECT"); |
477 resolver->pending_requests()[0]->CompleteNow(OK); | 485 resolver->pending_requests()[0]->CompleteNow(OK); |
478 | 486 |
479 // Get the first result. | 487 // Get the first result. |
480 EXPECT_EQ(OK, callback1.WaitForResult()); | 488 EXPECT_EQ(OK, callback1.WaitForResult()); |
481 EXPECT_FALSE(info.is_direct()); | 489 EXPECT_FALSE(info.is_direct()); |
482 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); | 490 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
483 | 491 |
484 // Fake an error on the proxy. | 492 // Fake an error on the proxy. |
485 TestCompletionCallback callback2; | 493 TestCompletionCallback callback2; |
486 rv = service->ReconsiderProxyAfterError(url, &info, &callback2, NULL, NULL); | 494 rv = service->ReconsiderProxyAfterError(url, &info, &callback2, NULL, |
| 495 BoundNetLog()); |
487 EXPECT_EQ(OK, rv); | 496 EXPECT_EQ(OK, rv); |
488 | 497 |
489 // Now we get back the second proxy. | 498 // Now we get back the second proxy. |
490 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); | 499 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); |
491 | 500 |
492 // Fake an error on this proxy as well. | 501 // Fake an error on this proxy as well. |
493 TestCompletionCallback callback3; | 502 TestCompletionCallback callback3; |
494 rv = service->ReconsiderProxyAfterError(url, &info, &callback3, NULL, NULL); | 503 rv = service->ReconsiderProxyAfterError(url, &info, &callback3, NULL, |
| 504 BoundNetLog()); |
495 EXPECT_EQ(OK, rv); | 505 EXPECT_EQ(OK, rv); |
496 | 506 |
497 // Finally, we get back DIRECT. | 507 // Finally, we get back DIRECT. |
498 EXPECT_TRUE(info.is_direct()); | 508 EXPECT_TRUE(info.is_direct()); |
499 | 509 |
500 // Now we tell the proxy service that even DIRECT failed. | 510 // Now we tell the proxy service that even DIRECT failed. |
501 TestCompletionCallback callback4; | 511 TestCompletionCallback callback4; |
502 rv = service->ReconsiderProxyAfterError(url, &info, &callback4, NULL, NULL); | 512 rv = service->ReconsiderProxyAfterError(url, &info, &callback4, NULL, |
| 513 BoundNetLog()); |
503 // There was nothing left to try after DIRECT, so we are out of | 514 // There was nothing left to try after DIRECT, so we are out of |
504 // choices. | 515 // choices. |
505 EXPECT_EQ(ERR_FAILED, rv); | 516 EXPECT_EQ(ERR_FAILED, rv); |
506 } | 517 } |
507 | 518 |
508 TEST(ProxyServiceTest, ProxyFallback_NewSettings) { | 519 TEST(ProxyServiceTest, ProxyFallback_NewSettings) { |
509 // Test proxy failover when new settings are available. | 520 // Test proxy failover when new settings are available. |
510 | 521 |
511 MockProxyConfigService* config_service = | 522 MockProxyConfigService* config_service = |
512 new MockProxyConfigService("http://foopy/proxy.pac"); | 523 new MockProxyConfigService("http://foopy/proxy.pac"); |
513 | 524 |
514 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; | 525 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; |
515 | 526 |
516 scoped_refptr<ProxyService> service( | 527 scoped_refptr<ProxyService> service( |
517 new ProxyService(config_service, resolver, NULL, BoundNetLog())); | 528 new ProxyService(config_service, resolver, NULL, NULL)); |
518 | 529 |
519 GURL url("http://www.google.com/"); | 530 GURL url("http://www.google.com/"); |
520 | 531 |
521 // Get the proxy information. | 532 // Get the proxy information. |
522 ProxyInfo info; | 533 ProxyInfo info; |
523 TestCompletionCallback callback1; | 534 TestCompletionCallback callback1; |
524 int rv = service->ResolveProxy(url, &info, &callback1, NULL, NULL); | 535 int rv = service->ResolveProxy(url, &info, &callback1, NULL, BoundNetLog()); |
525 EXPECT_EQ(ERR_IO_PENDING, rv); | 536 EXPECT_EQ(ERR_IO_PENDING, rv); |
526 | 537 |
527 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 538 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
528 resolver->pending_set_pac_script_request()->pac_url()); | 539 resolver->pending_set_pac_script_request()->pac_url()); |
529 resolver->pending_set_pac_script_request()->CompleteNow(OK); | 540 resolver->pending_set_pac_script_request()->CompleteNow(OK); |
530 | 541 |
531 ASSERT_EQ(1u, resolver->pending_requests().size()); | 542 ASSERT_EQ(1u, resolver->pending_requests().size()); |
532 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); | 543 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); |
533 | 544 |
534 // Set the result in proxy resolver. | 545 // Set the result in proxy resolver. |
535 resolver->pending_requests()[0]->results()->UseNamedProxy( | 546 resolver->pending_requests()[0]->results()->UseNamedProxy( |
536 "foopy1:8080;foopy2:9090"); | 547 "foopy1:8080;foopy2:9090"); |
537 resolver->pending_requests()[0]->CompleteNow(OK); | 548 resolver->pending_requests()[0]->CompleteNow(OK); |
538 | 549 |
539 // The first item is valid. | 550 // The first item is valid. |
540 EXPECT_EQ(OK, callback1.WaitForResult()); | 551 EXPECT_EQ(OK, callback1.WaitForResult()); |
541 EXPECT_FALSE(info.is_direct()); | 552 EXPECT_FALSE(info.is_direct()); |
542 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); | 553 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
543 | 554 |
544 // Fake an error on the proxy, and also a new configuration on the proxy. | 555 // Fake an error on the proxy, and also a new configuration on the proxy. |
545 config_service->config = ProxyConfig(); | 556 config_service->config = ProxyConfig(); |
546 config_service->config.set_pac_url(GURL("http://foopy-new/proxy.pac")); | 557 config_service->config.set_pac_url(GURL("http://foopy-new/proxy.pac")); |
547 | 558 |
548 TestCompletionCallback callback2; | 559 TestCompletionCallback callback2; |
549 rv = service->ReconsiderProxyAfterError(url, &info, &callback2, NULL, NULL); | 560 rv = service->ReconsiderProxyAfterError(url, &info, &callback2, NULL, |
| 561 BoundNetLog()); |
550 EXPECT_EQ(ERR_IO_PENDING, rv); | 562 EXPECT_EQ(ERR_IO_PENDING, rv); |
551 | 563 |
552 EXPECT_EQ(GURL("http://foopy-new/proxy.pac"), | 564 EXPECT_EQ(GURL("http://foopy-new/proxy.pac"), |
553 resolver->pending_set_pac_script_request()->pac_url()); | 565 resolver->pending_set_pac_script_request()->pac_url()); |
554 resolver->pending_set_pac_script_request()->CompleteNow(OK); | 566 resolver->pending_set_pac_script_request()->CompleteNow(OK); |
555 | 567 |
556 ASSERT_EQ(1u, resolver->pending_requests().size()); | 568 ASSERT_EQ(1u, resolver->pending_requests().size()); |
557 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); | 569 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); |
558 | 570 |
559 resolver->pending_requests()[0]->results()->UseNamedProxy( | 571 resolver->pending_requests()[0]->results()->UseNamedProxy( |
560 "foopy1:8080;foopy2:9090"); | 572 "foopy1:8080;foopy2:9090"); |
561 resolver->pending_requests()[0]->CompleteNow(OK); | 573 resolver->pending_requests()[0]->CompleteNow(OK); |
562 | 574 |
563 // The first proxy is still there since the configuration changed. | 575 // The first proxy is still there since the configuration changed. |
564 EXPECT_EQ(OK, callback2.WaitForResult()); | 576 EXPECT_EQ(OK, callback2.WaitForResult()); |
565 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); | 577 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
566 | 578 |
567 // We fake another error. It should now ignore the first one. | 579 // We fake another error. It should now ignore the first one. |
568 TestCompletionCallback callback3; | 580 TestCompletionCallback callback3; |
569 rv = service->ReconsiderProxyAfterError(url, &info, &callback3, NULL, NULL); | 581 rv = service->ReconsiderProxyAfterError(url, &info, &callback3, NULL, |
| 582 BoundNetLog()); |
570 EXPECT_EQ(OK, rv); | 583 EXPECT_EQ(OK, rv); |
571 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); | 584 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); |
572 | 585 |
573 // We simulate a new configuration. | 586 // We simulate a new configuration. |
574 config_service->config = ProxyConfig(); | 587 config_service->config = ProxyConfig(); |
575 config_service->config.set_pac_url(GURL("http://foopy-new2/proxy.pac")); | 588 config_service->config.set_pac_url(GURL("http://foopy-new2/proxy.pac")); |
576 | 589 |
577 // We fake another error. It should go back to the first proxy. | 590 // We fake another error. It should go back to the first proxy. |
578 TestCompletionCallback callback4; | 591 TestCompletionCallback callback4; |
579 rv = service->ReconsiderProxyAfterError(url, &info, &callback4, NULL, NULL); | 592 rv = service->ReconsiderProxyAfterError(url, &info, &callback4, NULL, |
| 593 BoundNetLog()); |
580 EXPECT_EQ(ERR_IO_PENDING, rv); | 594 EXPECT_EQ(ERR_IO_PENDING, rv); |
581 | 595 |
582 EXPECT_EQ(GURL("http://foopy-new2/proxy.pac"), | 596 EXPECT_EQ(GURL("http://foopy-new2/proxy.pac"), |
583 resolver->pending_set_pac_script_request()->pac_url()); | 597 resolver->pending_set_pac_script_request()->pac_url()); |
584 resolver->pending_set_pac_script_request()->CompleteNow(OK); | 598 resolver->pending_set_pac_script_request()->CompleteNow(OK); |
585 | 599 |
586 ASSERT_EQ(1u, resolver->pending_requests().size()); | 600 ASSERT_EQ(1u, resolver->pending_requests().size()); |
587 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); | 601 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); |
588 | 602 |
589 resolver->pending_requests()[0]->results()->UseNamedProxy( | 603 resolver->pending_requests()[0]->results()->UseNamedProxy( |
590 "foopy1:8080;foopy2:9090"); | 604 "foopy1:8080;foopy2:9090"); |
591 resolver->pending_requests()[0]->CompleteNow(OK); | 605 resolver->pending_requests()[0]->CompleteNow(OK); |
592 | 606 |
593 EXPECT_EQ(OK, callback4.WaitForResult()); | 607 EXPECT_EQ(OK, callback4.WaitForResult()); |
594 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); | 608 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
595 } | 609 } |
596 | 610 |
597 TEST(ProxyServiceTest, ProxyFallback_BadConfig) { | 611 TEST(ProxyServiceTest, ProxyFallback_BadConfig) { |
598 // Test proxy failover when the configuration is bad. | 612 // Test proxy failover when the configuration is bad. |
599 | 613 |
600 MockProxyConfigService* config_service = | 614 MockProxyConfigService* config_service = |
601 new MockProxyConfigService("http://foopy/proxy.pac"); | 615 new MockProxyConfigService("http://foopy/proxy.pac"); |
602 | 616 |
603 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; | 617 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; |
604 | 618 |
605 scoped_refptr<ProxyService> service( | 619 scoped_refptr<ProxyService> service( |
606 new ProxyService(config_service, resolver, NULL, BoundNetLog())); | 620 new ProxyService(config_service, resolver, NULL, NULL)); |
607 | 621 |
608 GURL url("http://www.google.com/"); | 622 GURL url("http://www.google.com/"); |
609 | 623 |
610 // Get the proxy information. | 624 // Get the proxy information. |
611 ProxyInfo info; | 625 ProxyInfo info; |
612 TestCompletionCallback callback1; | 626 TestCompletionCallback callback1; |
613 int rv = service->ResolveProxy(url, &info, &callback1, NULL, NULL); | 627 int rv = service->ResolveProxy(url, &info, &callback1, NULL, BoundNetLog()); |
614 EXPECT_EQ(ERR_IO_PENDING, rv); | 628 EXPECT_EQ(ERR_IO_PENDING, rv); |
615 | 629 |
616 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 630 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
617 resolver->pending_set_pac_script_request()->pac_url()); | 631 resolver->pending_set_pac_script_request()->pac_url()); |
618 resolver->pending_set_pac_script_request()->CompleteNow(OK); | 632 resolver->pending_set_pac_script_request()->CompleteNow(OK); |
619 ASSERT_EQ(1u, resolver->pending_requests().size()); | 633 ASSERT_EQ(1u, resolver->pending_requests().size()); |
620 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); | 634 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); |
621 | 635 |
622 resolver->pending_requests()[0]->results()->UseNamedProxy( | 636 resolver->pending_requests()[0]->results()->UseNamedProxy( |
623 "foopy1:8080;foopy2:9090"); | 637 "foopy1:8080;foopy2:9090"); |
624 resolver->pending_requests()[0]->CompleteNow(OK); | 638 resolver->pending_requests()[0]->CompleteNow(OK); |
625 | 639 |
626 // The first item is valid. | 640 // The first item is valid. |
627 EXPECT_EQ(OK, callback1.WaitForResult()); | 641 EXPECT_EQ(OK, callback1.WaitForResult()); |
628 EXPECT_FALSE(info.is_direct()); | 642 EXPECT_FALSE(info.is_direct()); |
629 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); | 643 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
630 | 644 |
631 // Fake a proxy error. | 645 // Fake a proxy error. |
632 TestCompletionCallback callback2; | 646 TestCompletionCallback callback2; |
633 rv = service->ReconsiderProxyAfterError(url, &info, &callback2, NULL, NULL); | 647 rv = service->ReconsiderProxyAfterError(url, &info, &callback2, NULL, |
| 648 BoundNetLog()); |
634 EXPECT_EQ(OK, rv); | 649 EXPECT_EQ(OK, rv); |
635 | 650 |
636 // The first proxy is ignored, and the second one is selected. | 651 // The first proxy is ignored, and the second one is selected. |
637 EXPECT_FALSE(info.is_direct()); | 652 EXPECT_FALSE(info.is_direct()); |
638 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); | 653 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); |
639 | 654 |
640 // Fake a PAC failure. | 655 // Fake a PAC failure. |
641 ProxyInfo info2; | 656 ProxyInfo info2; |
642 TestCompletionCallback callback3; | 657 TestCompletionCallback callback3; |
643 rv = service->ResolveProxy(url, &info2, &callback3, NULL, NULL); | 658 rv = service->ResolveProxy(url, &info2, &callback3, NULL, BoundNetLog()); |
644 EXPECT_EQ(ERR_IO_PENDING, rv); | 659 EXPECT_EQ(ERR_IO_PENDING, rv); |
645 | 660 |
646 ASSERT_EQ(1u, resolver->pending_requests().size()); | 661 ASSERT_EQ(1u, resolver->pending_requests().size()); |
647 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); | 662 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); |
648 | 663 |
649 // This simulates a javascript runtime error in the PAC script. | 664 // This simulates a javascript runtime error in the PAC script. |
650 resolver->pending_requests()[0]->CompleteNow(ERR_FAILED); | 665 resolver->pending_requests()[0]->CompleteNow(ERR_FAILED); |
651 | 666 |
652 // Although the resolver failed, the ProxyService will implicitly fall-back | 667 // Although the resolver failed, the ProxyService will implicitly fall-back |
653 // to a DIRECT connection. | 668 // to a DIRECT connection. |
654 EXPECT_EQ(OK, callback3.WaitForResult()); | 669 EXPECT_EQ(OK, callback3.WaitForResult()); |
655 EXPECT_TRUE(info2.is_direct()); | 670 EXPECT_TRUE(info2.is_direct()); |
656 EXPECT_FALSE(info2.is_empty()); | 671 EXPECT_FALSE(info2.is_empty()); |
657 | 672 |
658 // The PAC script will work properly next time and successfully return a | 673 // The PAC script will work properly next time and successfully return a |
659 // proxy list. Since we have not marked the configuration as bad, it should | 674 // proxy list. Since we have not marked the configuration as bad, it should |
660 // "just work" the next time we call it. | 675 // "just work" the next time we call it. |
661 ProxyInfo info3; | 676 ProxyInfo info3; |
662 TestCompletionCallback callback4; | 677 TestCompletionCallback callback4; |
663 rv = service->ReconsiderProxyAfterError(url, &info3, &callback4, NULL, NULL); | 678 rv = service->ReconsiderProxyAfterError(url, &info3, &callback4, NULL, |
| 679 BoundNetLog()); |
664 EXPECT_EQ(ERR_IO_PENDING, rv); | 680 EXPECT_EQ(ERR_IO_PENDING, rv); |
665 | 681 |
666 ASSERT_EQ(1u, resolver->pending_requests().size()); | 682 ASSERT_EQ(1u, resolver->pending_requests().size()); |
667 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); | 683 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); |
668 | 684 |
669 resolver->pending_requests()[0]->results()->UseNamedProxy( | 685 resolver->pending_requests()[0]->results()->UseNamedProxy( |
670 "foopy1:8080;foopy2:9090"); | 686 "foopy1:8080;foopy2:9090"); |
671 resolver->pending_requests()[0]->CompleteNow(OK); | 687 resolver->pending_requests()[0]->CompleteNow(OK); |
672 | 688 |
673 // The first proxy is not there since the it was added to the bad proxies | 689 // The first proxy is not there since the it was added to the bad proxies |
674 // list by the earlier ReconsiderProxyAfterError(). | 690 // list by the earlier ReconsiderProxyAfterError(). |
675 EXPECT_EQ(OK, callback4.WaitForResult()); | 691 EXPECT_EQ(OK, callback4.WaitForResult()); |
676 EXPECT_FALSE(info3.is_direct()); | 692 EXPECT_FALSE(info3.is_direct()); |
677 EXPECT_EQ("foopy1:8080", info3.proxy_server().ToURI()); | 693 EXPECT_EQ("foopy1:8080", info3.proxy_server().ToURI()); |
678 } | 694 } |
679 | 695 |
680 TEST(ProxyServiceTest, ProxyBypassList) { | 696 TEST(ProxyServiceTest, ProxyBypassList) { |
681 // Test that the proxy bypass rules are consulted. | 697 // Test that the proxy bypass rules are consulted. |
682 | 698 |
683 TestCompletionCallback callback[2]; | 699 TestCompletionCallback callback[2]; |
684 ProxyInfo info[2]; | 700 ProxyInfo info[2]; |
685 ProxyConfig config; | 701 ProxyConfig config; |
686 config.proxy_rules().ParseFromString("foopy1:8080;foopy2:9090"); | 702 config.proxy_rules().ParseFromString("foopy1:8080;foopy2:9090"); |
687 config.set_auto_detect(false); | 703 config.set_auto_detect(false); |
688 config.proxy_rules().bypass_rules.ParseFromString("*.org"); | 704 config.proxy_rules().bypass_rules.ParseFromString("*.org"); |
689 | 705 |
690 scoped_refptr<ProxyService> service(new ProxyService( | 706 scoped_refptr<ProxyService> service(new ProxyService( |
691 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL, | 707 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL, |
692 BoundNetLog())); | 708 NULL)); |
693 | 709 |
694 int rv; | 710 int rv; |
695 GURL url1("http://www.webkit.org"); | 711 GURL url1("http://www.webkit.org"); |
696 GURL url2("http://www.webkit.com"); | 712 GURL url2("http://www.webkit.com"); |
697 | 713 |
698 // Request for a .org domain should bypass proxy. | 714 // Request for a .org domain should bypass proxy. |
699 rv = service->ResolveProxy(url1, &info[0], &callback[0], NULL, NULL); | 715 rv = service->ResolveProxy(url1, &info[0], &callback[0], NULL, BoundNetLog()); |
700 EXPECT_EQ(OK, rv); | 716 EXPECT_EQ(OK, rv); |
701 EXPECT_TRUE(info[0].is_direct()); | 717 EXPECT_TRUE(info[0].is_direct()); |
702 | 718 |
703 // Request for a .com domain hits the proxy. | 719 // Request for a .com domain hits the proxy. |
704 rv = service->ResolveProxy(url2, &info[1], &callback[1], NULL, NULL); | 720 rv = service->ResolveProxy(url2, &info[1], &callback[1], NULL, BoundNetLog()); |
705 EXPECT_EQ(OK, rv); | 721 EXPECT_EQ(OK, rv); |
706 EXPECT_EQ("foopy1:8080", info[1].proxy_server().ToURI()); | 722 EXPECT_EQ("foopy1:8080", info[1].proxy_server().ToURI()); |
707 } | 723 } |
708 | 724 |
709 | 725 |
710 TEST(ProxyServiceTest, PerProtocolProxyTests) { | 726 TEST(ProxyServiceTest, PerProtocolProxyTests) { |
711 ProxyConfig config; | 727 ProxyConfig config; |
712 config.proxy_rules().ParseFromString("http=foopy1:8080;https=foopy2:8080"); | 728 config.proxy_rules().ParseFromString("http=foopy1:8080;https=foopy2:8080"); |
713 config.set_auto_detect(false); | 729 config.set_auto_detect(false); |
714 { | 730 { |
715 scoped_refptr<ProxyService> service(new ProxyService( | 731 scoped_refptr<ProxyService> service(new ProxyService( |
716 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL, | 732 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL, |
717 BoundNetLog())); | 733 NULL)); |
718 GURL test_url("http://www.msn.com"); | 734 GURL test_url("http://www.msn.com"); |
719 ProxyInfo info; | 735 ProxyInfo info; |
720 TestCompletionCallback callback; | 736 TestCompletionCallback callback; |
721 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); | 737 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, |
| 738 BoundNetLog()); |
722 EXPECT_EQ(OK, rv); | 739 EXPECT_EQ(OK, rv); |
723 EXPECT_FALSE(info.is_direct()); | 740 EXPECT_FALSE(info.is_direct()); |
724 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); | 741 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
725 } | 742 } |
726 { | 743 { |
727 scoped_refptr<ProxyService> service(new ProxyService( | 744 scoped_refptr<ProxyService> service(new ProxyService( |
728 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL, | 745 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL, |
729 BoundNetLog())); | 746 NULL)); |
730 GURL test_url("ftp://ftp.google.com"); | 747 GURL test_url("ftp://ftp.google.com"); |
731 ProxyInfo info; | 748 ProxyInfo info; |
732 TestCompletionCallback callback; | 749 TestCompletionCallback callback; |
733 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); | 750 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, |
| 751 BoundNetLog()); |
734 EXPECT_EQ(OK, rv); | 752 EXPECT_EQ(OK, rv); |
735 EXPECT_TRUE(info.is_direct()); | 753 EXPECT_TRUE(info.is_direct()); |
736 EXPECT_EQ("direct://", info.proxy_server().ToURI()); | 754 EXPECT_EQ("direct://", info.proxy_server().ToURI()); |
737 } | 755 } |
738 { | 756 { |
739 scoped_refptr<ProxyService> service(new ProxyService( | 757 scoped_refptr<ProxyService> service(new ProxyService( |
740 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL, | 758 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL, |
741 BoundNetLog())); | 759 NULL)); |
742 GURL test_url("https://webbranch.techcu.com"); | 760 GURL test_url("https://webbranch.techcu.com"); |
743 ProxyInfo info; | 761 ProxyInfo info; |
744 TestCompletionCallback callback; | 762 TestCompletionCallback callback; |
745 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); | 763 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, |
| 764 BoundNetLog()); |
746 EXPECT_EQ(OK, rv); | 765 EXPECT_EQ(OK, rv); |
747 EXPECT_FALSE(info.is_direct()); | 766 EXPECT_FALSE(info.is_direct()); |
748 EXPECT_EQ("foopy2:8080", info.proxy_server().ToURI()); | 767 EXPECT_EQ("foopy2:8080", info.proxy_server().ToURI()); |
749 } | 768 } |
750 { | 769 { |
751 config.proxy_rules().ParseFromString("foopy1:8080"); | 770 config.proxy_rules().ParseFromString("foopy1:8080"); |
752 scoped_refptr<ProxyService> service(new ProxyService( | 771 scoped_refptr<ProxyService> service(new ProxyService( |
753 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL, | 772 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL, |
754 BoundNetLog())); | 773 NULL)); |
755 GURL test_url("http://www.microsoft.com"); | 774 GURL test_url("http://www.microsoft.com"); |
756 ProxyInfo info; | 775 ProxyInfo info; |
757 TestCompletionCallback callback; | 776 TestCompletionCallback callback; |
758 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); | 777 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, |
| 778 BoundNetLog()); |
759 EXPECT_EQ(OK, rv); | 779 EXPECT_EQ(OK, rv); |
760 EXPECT_FALSE(info.is_direct()); | 780 EXPECT_FALSE(info.is_direct()); |
761 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); | 781 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
762 } | 782 } |
763 } | 783 } |
764 | 784 |
765 // If only HTTP and a SOCKS proxy are specified, check if ftp/https queries | 785 // If only HTTP and a SOCKS proxy are specified, check if ftp/https queries |
766 // fall back to the SOCKS proxy. | 786 // fall back to the SOCKS proxy. |
767 TEST(ProxyServiceTest, DefaultProxyFallbackToSOCKS) { | 787 TEST(ProxyServiceTest, DefaultProxyFallbackToSOCKS) { |
768 ProxyConfig config; | 788 ProxyConfig config; |
769 config.proxy_rules().ParseFromString("http=foopy1:8080;socks=foopy2:1080"); | 789 config.proxy_rules().ParseFromString("http=foopy1:8080;socks=foopy2:1080"); |
770 config.set_auto_detect(false); | 790 config.set_auto_detect(false); |
771 EXPECT_EQ(ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, | 791 EXPECT_EQ(ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, |
772 config.proxy_rules().type); | 792 config.proxy_rules().type); |
773 | 793 |
774 { | 794 { |
775 scoped_refptr<ProxyService> service(new ProxyService( | 795 scoped_refptr<ProxyService> service(new ProxyService( |
776 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL, | 796 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL, |
777 BoundNetLog())); | 797 NULL)); |
778 GURL test_url("http://www.msn.com"); | 798 GURL test_url("http://www.msn.com"); |
779 ProxyInfo info; | 799 ProxyInfo info; |
780 TestCompletionCallback callback; | 800 TestCompletionCallback callback; |
781 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); | 801 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, |
| 802 BoundNetLog()); |
782 EXPECT_EQ(OK, rv); | 803 EXPECT_EQ(OK, rv); |
783 EXPECT_FALSE(info.is_direct()); | 804 EXPECT_FALSE(info.is_direct()); |
784 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); | 805 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
785 } | 806 } |
786 { | 807 { |
787 scoped_refptr<ProxyService> service(new ProxyService( | 808 scoped_refptr<ProxyService> service(new ProxyService( |
788 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL, | 809 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL, |
789 BoundNetLog())); | 810 NULL)); |
790 GURL test_url("ftp://ftp.google.com"); | 811 GURL test_url("ftp://ftp.google.com"); |
791 ProxyInfo info; | 812 ProxyInfo info; |
792 TestCompletionCallback callback; | 813 TestCompletionCallback callback; |
793 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); | 814 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, |
| 815 BoundNetLog()); |
794 EXPECT_EQ(OK, rv); | 816 EXPECT_EQ(OK, rv); |
795 EXPECT_FALSE(info.is_direct()); | 817 EXPECT_FALSE(info.is_direct()); |
796 EXPECT_EQ("socks4://foopy2:1080", info.proxy_server().ToURI()); | 818 EXPECT_EQ("socks4://foopy2:1080", info.proxy_server().ToURI()); |
797 } | 819 } |
798 { | 820 { |
799 scoped_refptr<ProxyService> service(new ProxyService( | 821 scoped_refptr<ProxyService> service(new ProxyService( |
800 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL, | 822 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL, |
801 BoundNetLog())); | 823 NULL)); |
802 GURL test_url("https://webbranch.techcu.com"); | 824 GURL test_url("https://webbranch.techcu.com"); |
803 ProxyInfo info; | 825 ProxyInfo info; |
804 TestCompletionCallback callback; | 826 TestCompletionCallback callback; |
805 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); | 827 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, |
| 828 BoundNetLog()); |
806 EXPECT_EQ(OK, rv); | 829 EXPECT_EQ(OK, rv); |
807 EXPECT_FALSE(info.is_direct()); | 830 EXPECT_FALSE(info.is_direct()); |
808 EXPECT_EQ("socks4://foopy2:1080", info.proxy_server().ToURI()); | 831 EXPECT_EQ("socks4://foopy2:1080", info.proxy_server().ToURI()); |
809 } | 832 } |
810 { | 833 { |
811 scoped_refptr<ProxyService> service(new ProxyService( | 834 scoped_refptr<ProxyService> service(new ProxyService( |
812 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL, | 835 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL, |
813 BoundNetLog())); | 836 NULL)); |
814 GURL test_url("unknown://www.microsoft.com"); | 837 GURL test_url("unknown://www.microsoft.com"); |
815 ProxyInfo info; | 838 ProxyInfo info; |
816 TestCompletionCallback callback; | 839 TestCompletionCallback callback; |
817 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); | 840 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, |
| 841 BoundNetLog()); |
818 EXPECT_EQ(OK, rv); | 842 EXPECT_EQ(OK, rv); |
819 EXPECT_FALSE(info.is_direct()); | 843 EXPECT_FALSE(info.is_direct()); |
820 EXPECT_EQ("socks4://foopy2:1080", info.proxy_server().ToURI()); | 844 EXPECT_EQ("socks4://foopy2:1080", info.proxy_server().ToURI()); |
821 } | 845 } |
822 } | 846 } |
823 | 847 |
824 // Test cancellation of an in-progress request. | 848 // Test cancellation of an in-progress request. |
825 TEST(ProxyServiceTest, CancelInProgressRequest) { | 849 TEST(ProxyServiceTest, CancelInProgressRequest) { |
826 MockProxyConfigService* config_service = | 850 MockProxyConfigService* config_service = |
827 new MockProxyConfigService("http://foopy/proxy.pac"); | 851 new MockProxyConfigService("http://foopy/proxy.pac"); |
828 | 852 |
829 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; | 853 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; |
830 | 854 |
831 scoped_refptr<ProxyService> service( | 855 scoped_refptr<ProxyService> service( |
832 new ProxyService(config_service, resolver, NULL, BoundNetLog())); | 856 new ProxyService(config_service, resolver, NULL, NULL)); |
833 | 857 |
834 // Start 3 requests. | 858 // Start 3 requests. |
835 | 859 |
836 ProxyInfo info1; | 860 ProxyInfo info1; |
837 TestCompletionCallback callback1; | 861 TestCompletionCallback callback1; |
838 int rv = service->ResolveProxy( | 862 int rv = service->ResolveProxy( |
839 GURL("http://request1"), &info1, &callback1, NULL, NULL); | 863 GURL("http://request1"), &info1, &callback1, NULL, BoundNetLog()); |
840 EXPECT_EQ(ERR_IO_PENDING, rv); | 864 EXPECT_EQ(ERR_IO_PENDING, rv); |
841 | 865 |
842 // Nothing has been sent to the proxy resolver yet, since the proxy | 866 // Nothing has been sent to the proxy resolver yet, since the proxy |
843 // resolver has not been configured yet. | 867 // resolver has not been configured yet. |
844 ASSERT_EQ(0u, resolver->pending_requests().size()); | 868 ASSERT_EQ(0u, resolver->pending_requests().size()); |
845 | 869 |
846 // Successfully initialize the PAC script. | 870 // Successfully initialize the PAC script. |
847 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 871 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
848 resolver->pending_set_pac_script_request()->pac_url()); | 872 resolver->pending_set_pac_script_request()->pac_url()); |
849 resolver->pending_set_pac_script_request()->CompleteNow(OK); | 873 resolver->pending_set_pac_script_request()->CompleteNow(OK); |
850 | 874 |
851 ASSERT_EQ(1u, resolver->pending_requests().size()); | 875 ASSERT_EQ(1u, resolver->pending_requests().size()); |
852 EXPECT_EQ(GURL("http://request1"), resolver->pending_requests()[0]->url()); | 876 EXPECT_EQ(GURL("http://request1"), resolver->pending_requests()[0]->url()); |
853 | 877 |
854 ProxyInfo info2; | 878 ProxyInfo info2; |
855 TestCompletionCallback callback2; | 879 TestCompletionCallback callback2; |
856 ProxyService::PacRequest* request2; | 880 ProxyService::PacRequest* request2; |
857 rv = service->ResolveProxy( | 881 rv = service->ResolveProxy( |
858 GURL("http://request2"), &info2, &callback2, &request2, NULL); | 882 GURL("http://request2"), &info2, &callback2, &request2, BoundNetLog()); |
859 EXPECT_EQ(ERR_IO_PENDING, rv); | 883 EXPECT_EQ(ERR_IO_PENDING, rv); |
860 ASSERT_EQ(2u, resolver->pending_requests().size()); | 884 ASSERT_EQ(2u, resolver->pending_requests().size()); |
861 EXPECT_EQ(GURL("http://request2"), resolver->pending_requests()[1]->url()); | 885 EXPECT_EQ(GURL("http://request2"), resolver->pending_requests()[1]->url()); |
862 | 886 |
863 ProxyInfo info3; | 887 ProxyInfo info3; |
864 TestCompletionCallback callback3; | 888 TestCompletionCallback callback3; |
865 rv = service->ResolveProxy( | 889 rv = service->ResolveProxy( |
866 GURL("http://request3"), &info3, &callback3, NULL, NULL); | 890 GURL("http://request3"), &info3, &callback3, NULL, BoundNetLog()); |
867 EXPECT_EQ(ERR_IO_PENDING, rv); | 891 EXPECT_EQ(ERR_IO_PENDING, rv); |
868 ASSERT_EQ(3u, resolver->pending_requests().size()); | 892 ASSERT_EQ(3u, resolver->pending_requests().size()); |
869 EXPECT_EQ(GURL("http://request3"), resolver->pending_requests()[2]->url()); | 893 EXPECT_EQ(GURL("http://request3"), resolver->pending_requests()[2]->url()); |
870 | 894 |
871 // Cancel the second request | 895 // Cancel the second request |
872 service->CancelPacRequest(request2); | 896 service->CancelPacRequest(request2); |
873 | 897 |
874 ASSERT_EQ(2u, resolver->pending_requests().size()); | 898 ASSERT_EQ(2u, resolver->pending_requests().size()); |
875 EXPECT_EQ(GURL("http://request1"), resolver->pending_requests()[0]->url()); | 899 EXPECT_EQ(GURL("http://request1"), resolver->pending_requests()[0]->url()); |
876 EXPECT_EQ(GURL("http://request3"), resolver->pending_requests()[1]->url()); | 900 EXPECT_EQ(GURL("http://request3"), resolver->pending_requests()[1]->url()); |
(...skipping 20 matching lines...) Expand all Loading... |
897 | 921 |
898 // Test the initial PAC download for resolver that expects bytes. | 922 // Test the initial PAC download for resolver that expects bytes. |
899 TEST(ProxyServiceTest, InitialPACScriptDownload) { | 923 TEST(ProxyServiceTest, InitialPACScriptDownload) { |
900 MockProxyConfigService* config_service = | 924 MockProxyConfigService* config_service = |
901 new MockProxyConfigService("http://foopy/proxy.pac"); | 925 new MockProxyConfigService("http://foopy/proxy.pac"); |
902 | 926 |
903 MockAsyncProxyResolverExpectsBytes* resolver = | 927 MockAsyncProxyResolverExpectsBytes* resolver = |
904 new MockAsyncProxyResolverExpectsBytes; | 928 new MockAsyncProxyResolverExpectsBytes; |
905 | 929 |
906 scoped_refptr<ProxyService> service( | 930 scoped_refptr<ProxyService> service( |
907 new ProxyService(config_service, resolver, NULL, BoundNetLog())); | 931 new ProxyService(config_service, resolver, NULL, NULL)); |
908 | 932 |
909 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; | 933 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
910 service->SetProxyScriptFetcher(fetcher); | 934 service->SetProxyScriptFetcher(fetcher); |
911 | 935 |
912 // Start 3 requests. | 936 // Start 3 requests. |
913 | 937 |
914 ProxyInfo info1; | 938 ProxyInfo info1; |
915 TestCompletionCallback callback1; | 939 TestCompletionCallback callback1; |
916 int rv = service->ResolveProxy( | 940 int rv = service->ResolveProxy( |
917 GURL("http://request1"), &info1, &callback1, NULL, NULL); | 941 GURL("http://request1"), &info1, &callback1, NULL, BoundNetLog()); |
918 EXPECT_EQ(ERR_IO_PENDING, rv); | 942 EXPECT_EQ(ERR_IO_PENDING, rv); |
919 | 943 |
920 // The first request should have triggered download of PAC script. | 944 // The first request should have triggered download of PAC script. |
921 EXPECT_TRUE(fetcher->has_pending_request()); | 945 EXPECT_TRUE(fetcher->has_pending_request()); |
922 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); | 946 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); |
923 | 947 |
924 ProxyInfo info2; | 948 ProxyInfo info2; |
925 TestCompletionCallback callback2; | 949 TestCompletionCallback callback2; |
926 rv = service->ResolveProxy( | 950 rv = service->ResolveProxy( |
927 GURL("http://request2"), &info2, &callback2, NULL, NULL); | 951 GURL("http://request2"), &info2, &callback2, NULL, BoundNetLog()); |
928 EXPECT_EQ(ERR_IO_PENDING, rv); | 952 EXPECT_EQ(ERR_IO_PENDING, rv); |
929 | 953 |
930 ProxyInfo info3; | 954 ProxyInfo info3; |
931 TestCompletionCallback callback3; | 955 TestCompletionCallback callback3; |
932 rv = service->ResolveProxy( | 956 rv = service->ResolveProxy( |
933 GURL("http://request3"), &info3, &callback3, NULL, NULL); | 957 GURL("http://request3"), &info3, &callback3, NULL, BoundNetLog()); |
934 EXPECT_EQ(ERR_IO_PENDING, rv); | 958 EXPECT_EQ(ERR_IO_PENDING, rv); |
935 | 959 |
936 // Nothing has been sent to the resolver yet. | 960 // Nothing has been sent to the resolver yet. |
937 EXPECT_TRUE(resolver->pending_requests().empty()); | 961 EXPECT_TRUE(resolver->pending_requests().empty()); |
938 | 962 |
939 // At this point the ProxyService should be waiting for the | 963 // At this point the ProxyService should be waiting for the |
940 // ProxyScriptFetcher to invoke its completion callback, notifying it of | 964 // ProxyScriptFetcher to invoke its completion callback, notifying it of |
941 // PAC script download completion. | 965 // PAC script download completion. |
942 fetcher->NotifyFetchCompletion(OK, "pac-v1"); | 966 fetcher->NotifyFetchCompletion(OK, "pac-v1"); |
943 | 967 |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
976 | 1000 |
977 // Test changing the ProxyScriptFetcher while PAC download is in progress. | 1001 // Test changing the ProxyScriptFetcher while PAC download is in progress. |
978 TEST(ProxyServiceTest, ChangeScriptFetcherWhilePACDownloadInProgress) { | 1002 TEST(ProxyServiceTest, ChangeScriptFetcherWhilePACDownloadInProgress) { |
979 MockProxyConfigService* config_service = | 1003 MockProxyConfigService* config_service = |
980 new MockProxyConfigService("http://foopy/proxy.pac"); | 1004 new MockProxyConfigService("http://foopy/proxy.pac"); |
981 | 1005 |
982 MockAsyncProxyResolverExpectsBytes* resolver = | 1006 MockAsyncProxyResolverExpectsBytes* resolver = |
983 new MockAsyncProxyResolverExpectsBytes; | 1007 new MockAsyncProxyResolverExpectsBytes; |
984 | 1008 |
985 scoped_refptr<ProxyService> service( | 1009 scoped_refptr<ProxyService> service( |
986 new ProxyService(config_service, resolver, NULL, BoundNetLog())); | 1010 new ProxyService(config_service, resolver, NULL, NULL)); |
987 | 1011 |
988 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; | 1012 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
989 service->SetProxyScriptFetcher(fetcher); | 1013 service->SetProxyScriptFetcher(fetcher); |
990 | 1014 |
991 // Start 2 requests. | 1015 // Start 2 requests. |
992 | 1016 |
993 ProxyInfo info1; | 1017 ProxyInfo info1; |
994 TestCompletionCallback callback1; | 1018 TestCompletionCallback callback1; |
995 int rv = service->ResolveProxy( | 1019 int rv = service->ResolveProxy( |
996 GURL("http://request1"), &info1, &callback1, NULL, NULL); | 1020 GURL("http://request1"), &info1, &callback1, NULL, BoundNetLog()); |
997 EXPECT_EQ(ERR_IO_PENDING, rv); | 1021 EXPECT_EQ(ERR_IO_PENDING, rv); |
998 | 1022 |
999 // The first request should have triggered download of PAC script. | 1023 // The first request should have triggered download of PAC script. |
1000 EXPECT_TRUE(fetcher->has_pending_request()); | 1024 EXPECT_TRUE(fetcher->has_pending_request()); |
1001 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); | 1025 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); |
1002 | 1026 |
1003 ProxyInfo info2; | 1027 ProxyInfo info2; |
1004 TestCompletionCallback callback2; | 1028 TestCompletionCallback callback2; |
1005 rv = service->ResolveProxy( | 1029 rv = service->ResolveProxy( |
1006 GURL("http://request2"), &info2, &callback2, NULL, NULL); | 1030 GURL("http://request2"), &info2, &callback2, NULL, BoundNetLog()); |
1007 EXPECT_EQ(ERR_IO_PENDING, rv); | 1031 EXPECT_EQ(ERR_IO_PENDING, rv); |
1008 | 1032 |
1009 // At this point the ProxyService should be waiting for the | 1033 // At this point the ProxyService should be waiting for the |
1010 // ProxyScriptFetcher to invoke its completion callback, notifying it of | 1034 // ProxyScriptFetcher to invoke its completion callback, notifying it of |
1011 // PAC script download completion. | 1035 // PAC script download completion. |
1012 | 1036 |
1013 // We now change out the ProxyService's script fetcher. We should restart | 1037 // We now change out the ProxyService's script fetcher. We should restart |
1014 // the initialization with the new fetcher. | 1038 // the initialization with the new fetcher. |
1015 | 1039 |
1016 fetcher = new MockProxyScriptFetcher; | 1040 fetcher = new MockProxyScriptFetcher; |
(...skipping 16 matching lines...) Expand all Loading... |
1033 | 1057 |
1034 // Test cancellation of a request, while the PAC script is being fetched. | 1058 // Test cancellation of a request, while the PAC script is being fetched. |
1035 TEST(ProxyServiceTest, CancelWhilePACFetching) { | 1059 TEST(ProxyServiceTest, CancelWhilePACFetching) { |
1036 MockProxyConfigService* config_service = | 1060 MockProxyConfigService* config_service = |
1037 new MockProxyConfigService("http://foopy/proxy.pac"); | 1061 new MockProxyConfigService("http://foopy/proxy.pac"); |
1038 | 1062 |
1039 MockAsyncProxyResolverExpectsBytes* resolver = | 1063 MockAsyncProxyResolverExpectsBytes* resolver = |
1040 new MockAsyncProxyResolverExpectsBytes; | 1064 new MockAsyncProxyResolverExpectsBytes; |
1041 | 1065 |
1042 scoped_refptr<ProxyService> service( | 1066 scoped_refptr<ProxyService> service( |
1043 new ProxyService(config_service, resolver, NULL, BoundNetLog())); | 1067 new ProxyService(config_service, resolver, NULL, NULL)); |
1044 | 1068 |
1045 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; | 1069 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
1046 service->SetProxyScriptFetcher(fetcher); | 1070 service->SetProxyScriptFetcher(fetcher); |
1047 | 1071 |
1048 // Start 3 requests. | 1072 // Start 3 requests. |
1049 ProxyInfo info1; | 1073 ProxyInfo info1; |
1050 TestCompletionCallback callback1; | 1074 TestCompletionCallback callback1; |
1051 ProxyService::PacRequest* request1; | 1075 ProxyService::PacRequest* request1; |
1052 CapturingBoundNetLog log1(CapturingNetLog::kUnbounded); | 1076 CapturingBoundNetLog log1(CapturingNetLog::kUnbounded); |
1053 int rv = service->ResolveProxy( | 1077 int rv = service->ResolveProxy( |
1054 GURL("http://request1"), &info1, &callback1, &request1, log1.bound()); | 1078 GURL("http://request1"), &info1, &callback1, &request1, log1.bound()); |
1055 EXPECT_EQ(ERR_IO_PENDING, rv); | 1079 EXPECT_EQ(ERR_IO_PENDING, rv); |
1056 | 1080 |
1057 // The first request should have triggered download of PAC script. | 1081 // The first request should have triggered download of PAC script. |
1058 EXPECT_TRUE(fetcher->has_pending_request()); | 1082 EXPECT_TRUE(fetcher->has_pending_request()); |
1059 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); | 1083 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); |
1060 | 1084 |
1061 ProxyInfo info2; | 1085 ProxyInfo info2; |
1062 TestCompletionCallback callback2; | 1086 TestCompletionCallback callback2; |
1063 ProxyService::PacRequest* request2; | 1087 ProxyService::PacRequest* request2; |
1064 rv = service->ResolveProxy( | 1088 rv = service->ResolveProxy( |
1065 GURL("http://request2"), &info2, &callback2, &request2, NULL); | 1089 GURL("http://request2"), &info2, &callback2, &request2, BoundNetLog()); |
1066 EXPECT_EQ(ERR_IO_PENDING, rv); | 1090 EXPECT_EQ(ERR_IO_PENDING, rv); |
1067 | 1091 |
1068 ProxyInfo info3; | 1092 ProxyInfo info3; |
1069 TestCompletionCallback callback3; | 1093 TestCompletionCallback callback3; |
1070 rv = service->ResolveProxy( | 1094 rv = service->ResolveProxy( |
1071 GURL("http://request3"), &info3, &callback3, NULL, NULL); | 1095 GURL("http://request3"), &info3, &callback3, NULL, BoundNetLog()); |
1072 EXPECT_EQ(ERR_IO_PENDING, rv); | 1096 EXPECT_EQ(ERR_IO_PENDING, rv); |
1073 | 1097 |
1074 // Nothing has been sent to the resolver yet. | 1098 // Nothing has been sent to the resolver yet. |
1075 EXPECT_TRUE(resolver->pending_requests().empty()); | 1099 EXPECT_TRUE(resolver->pending_requests().empty()); |
1076 | 1100 |
1077 // Cancel the first 2 requests. | 1101 // Cancel the first 2 requests. |
1078 service->CancelPacRequest(request1); | 1102 service->CancelPacRequest(request1); |
1079 service->CancelPacRequest(request2); | 1103 service->CancelPacRequest(request2); |
1080 | 1104 |
1081 // At this point the ProxyService should be waiting for the | 1105 // At this point the ProxyService should be waiting for the |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1121 TEST(ProxyServiceTest, FallbackFromAutodetectToCustomPac) { | 1145 TEST(ProxyServiceTest, FallbackFromAutodetectToCustomPac) { |
1122 ProxyConfig config; | 1146 ProxyConfig config; |
1123 config.set_auto_detect(true); | 1147 config.set_auto_detect(true); |
1124 config.set_pac_url(GURL("http://foopy/proxy.pac")); | 1148 config.set_pac_url(GURL("http://foopy/proxy.pac")); |
1125 config.proxy_rules().ParseFromString("http=foopy:80"); // Won't be used. | 1149 config.proxy_rules().ParseFromString("http=foopy:80"); // Won't be used. |
1126 | 1150 |
1127 MockProxyConfigService* config_service = new MockProxyConfigService(config); | 1151 MockProxyConfigService* config_service = new MockProxyConfigService(config); |
1128 MockAsyncProxyResolverExpectsBytes* resolver = | 1152 MockAsyncProxyResolverExpectsBytes* resolver = |
1129 new MockAsyncProxyResolverExpectsBytes; | 1153 new MockAsyncProxyResolverExpectsBytes; |
1130 scoped_refptr<ProxyService> service( | 1154 scoped_refptr<ProxyService> service( |
1131 new ProxyService(config_service, resolver, NULL, BoundNetLog())); | 1155 new ProxyService(config_service, resolver, NULL, NULL)); |
1132 | 1156 |
1133 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; | 1157 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
1134 service->SetProxyScriptFetcher(fetcher); | 1158 service->SetProxyScriptFetcher(fetcher); |
1135 | 1159 |
1136 // Start 2 requests. | 1160 // Start 2 requests. |
1137 | 1161 |
1138 ProxyInfo info1; | 1162 ProxyInfo info1; |
1139 TestCompletionCallback callback1; | 1163 TestCompletionCallback callback1; |
1140 int rv = service->ResolveProxy( | 1164 int rv = service->ResolveProxy( |
1141 GURL("http://request1"), &info1, &callback1, NULL, NULL); | 1165 GURL("http://request1"), &info1, &callback1, NULL, BoundNetLog()); |
1142 EXPECT_EQ(ERR_IO_PENDING, rv); | 1166 EXPECT_EQ(ERR_IO_PENDING, rv); |
1143 | 1167 |
1144 ProxyInfo info2; | 1168 ProxyInfo info2; |
1145 TestCompletionCallback callback2; | 1169 TestCompletionCallback callback2; |
1146 ProxyService::PacRequest* request2; | 1170 ProxyService::PacRequest* request2; |
1147 rv = service->ResolveProxy( | 1171 rv = service->ResolveProxy( |
1148 GURL("http://request2"), &info2, &callback2, &request2, NULL); | 1172 GURL("http://request2"), &info2, &callback2, &request2, BoundNetLog()); |
1149 EXPECT_EQ(ERR_IO_PENDING, rv); | 1173 EXPECT_EQ(ERR_IO_PENDING, rv); |
1150 | 1174 |
1151 // Check that nothing has been sent to the proxy resolver yet. | 1175 // Check that nothing has been sent to the proxy resolver yet. |
1152 ASSERT_EQ(0u, resolver->pending_requests().size()); | 1176 ASSERT_EQ(0u, resolver->pending_requests().size()); |
1153 | 1177 |
1154 // It should be trying to auto-detect first -- FAIL the autodetect during | 1178 // It should be trying to auto-detect first -- FAIL the autodetect during |
1155 // the script download. | 1179 // the script download. |
1156 EXPECT_TRUE(fetcher->has_pending_request()); | 1180 EXPECT_TRUE(fetcher->has_pending_request()); |
1157 EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url()); | 1181 EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url()); |
1158 fetcher->NotifyFetchCompletion(ERR_FAILED, ""); | 1182 fetcher->NotifyFetchCompletion(ERR_FAILED, ""); |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1192 TEST(ProxyServiceTest, FallbackFromAutodetectToCustomPac2) { | 1216 TEST(ProxyServiceTest, FallbackFromAutodetectToCustomPac2) { |
1193 ProxyConfig config; | 1217 ProxyConfig config; |
1194 config.set_auto_detect(true); | 1218 config.set_auto_detect(true); |
1195 config.set_pac_url(GURL("http://foopy/proxy.pac")); | 1219 config.set_pac_url(GURL("http://foopy/proxy.pac")); |
1196 config.proxy_rules().ParseFromString("http=foopy:80"); // Won't be used. | 1220 config.proxy_rules().ParseFromString("http=foopy:80"); // Won't be used. |
1197 | 1221 |
1198 MockProxyConfigService* config_service = new MockProxyConfigService(config); | 1222 MockProxyConfigService* config_service = new MockProxyConfigService(config); |
1199 MockAsyncProxyResolverExpectsBytes* resolver = | 1223 MockAsyncProxyResolverExpectsBytes* resolver = |
1200 new MockAsyncProxyResolverExpectsBytes; | 1224 new MockAsyncProxyResolverExpectsBytes; |
1201 scoped_refptr<ProxyService> service( | 1225 scoped_refptr<ProxyService> service( |
1202 new ProxyService(config_service, resolver, NULL, BoundNetLog())); | 1226 new ProxyService(config_service, resolver, NULL, NULL)); |
1203 | 1227 |
1204 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; | 1228 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
1205 service->SetProxyScriptFetcher(fetcher); | 1229 service->SetProxyScriptFetcher(fetcher); |
1206 | 1230 |
1207 // Start 2 requests. | 1231 // Start 2 requests. |
1208 | 1232 |
1209 ProxyInfo info1; | 1233 ProxyInfo info1; |
1210 TestCompletionCallback callback1; | 1234 TestCompletionCallback callback1; |
1211 int rv = service->ResolveProxy( | 1235 int rv = service->ResolveProxy( |
1212 GURL("http://request1"), &info1, &callback1, NULL, NULL); | 1236 GURL("http://request1"), &info1, &callback1, NULL, BoundNetLog()); |
1213 EXPECT_EQ(ERR_IO_PENDING, rv); | 1237 EXPECT_EQ(ERR_IO_PENDING, rv); |
1214 | 1238 |
1215 ProxyInfo info2; | 1239 ProxyInfo info2; |
1216 TestCompletionCallback callback2; | 1240 TestCompletionCallback callback2; |
1217 ProxyService::PacRequest* request2; | 1241 ProxyService::PacRequest* request2; |
1218 rv = service->ResolveProxy( | 1242 rv = service->ResolveProxy( |
1219 GURL("http://request2"), &info2, &callback2, &request2, NULL); | 1243 GURL("http://request2"), &info2, &callback2, &request2, BoundNetLog()); |
1220 EXPECT_EQ(ERR_IO_PENDING, rv); | 1244 EXPECT_EQ(ERR_IO_PENDING, rv); |
1221 | 1245 |
1222 // Check that nothing has been sent to the proxy resolver yet. | 1246 // Check that nothing has been sent to the proxy resolver yet. |
1223 ASSERT_EQ(0u, resolver->pending_requests().size()); | 1247 ASSERT_EQ(0u, resolver->pending_requests().size()); |
1224 | 1248 |
1225 // It should be trying to auto-detect first -- succeed the download. | 1249 // It should be trying to auto-detect first -- succeed the download. |
1226 EXPECT_TRUE(fetcher->has_pending_request()); | 1250 EXPECT_TRUE(fetcher->has_pending_request()); |
1227 EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url()); | 1251 EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url()); |
1228 fetcher->NotifyFetchCompletion(OK, "invalid-script-contents"); | 1252 fetcher->NotifyFetchCompletion(OK, "invalid-script-contents"); |
1229 | 1253 |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1268 TEST(ProxyServiceTest, FallbackFromAutodetectToCustomToManual) { | 1292 TEST(ProxyServiceTest, FallbackFromAutodetectToCustomToManual) { |
1269 ProxyConfig config; | 1293 ProxyConfig config; |
1270 config.set_auto_detect(true); | 1294 config.set_auto_detect(true); |
1271 config.set_pac_url(GURL("http://foopy/proxy.pac")); | 1295 config.set_pac_url(GURL("http://foopy/proxy.pac")); |
1272 config.proxy_rules().ParseFromString("http=foopy:80"); | 1296 config.proxy_rules().ParseFromString("http=foopy:80"); |
1273 | 1297 |
1274 MockProxyConfigService* config_service = new MockProxyConfigService(config); | 1298 MockProxyConfigService* config_service = new MockProxyConfigService(config); |
1275 MockAsyncProxyResolverExpectsBytes* resolver = | 1299 MockAsyncProxyResolverExpectsBytes* resolver = |
1276 new MockAsyncProxyResolverExpectsBytes; | 1300 new MockAsyncProxyResolverExpectsBytes; |
1277 scoped_refptr<ProxyService> service( | 1301 scoped_refptr<ProxyService> service( |
1278 new ProxyService(config_service, resolver, NULL, BoundNetLog())); | 1302 new ProxyService(config_service, resolver, NULL, NULL)); |
1279 | 1303 |
1280 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; | 1304 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
1281 service->SetProxyScriptFetcher(fetcher); | 1305 service->SetProxyScriptFetcher(fetcher); |
1282 | 1306 |
1283 // Start 2 requests. | 1307 // Start 2 requests. |
1284 | 1308 |
1285 ProxyInfo info1; | 1309 ProxyInfo info1; |
1286 TestCompletionCallback callback1; | 1310 TestCompletionCallback callback1; |
1287 int rv = service->ResolveProxy( | 1311 int rv = service->ResolveProxy( |
1288 GURL("http://request1"), &info1, &callback1, NULL, NULL); | 1312 GURL("http://request1"), &info1, &callback1, NULL, BoundNetLog()); |
1289 EXPECT_EQ(ERR_IO_PENDING, rv); | 1313 EXPECT_EQ(ERR_IO_PENDING, rv); |
1290 | 1314 |
1291 ProxyInfo info2; | 1315 ProxyInfo info2; |
1292 TestCompletionCallback callback2; | 1316 TestCompletionCallback callback2; |
1293 ProxyService::PacRequest* request2; | 1317 ProxyService::PacRequest* request2; |
1294 rv = service->ResolveProxy( | 1318 rv = service->ResolveProxy( |
1295 GURL("http://request2"), &info2, &callback2, &request2, NULL); | 1319 GURL("http://request2"), &info2, &callback2, &request2, BoundNetLog()); |
1296 EXPECT_EQ(ERR_IO_PENDING, rv); | 1320 EXPECT_EQ(ERR_IO_PENDING, rv); |
1297 | 1321 |
1298 // Check that nothing has been sent to the proxy resolver yet. | 1322 // Check that nothing has been sent to the proxy resolver yet. |
1299 ASSERT_EQ(0u, resolver->pending_requests().size()); | 1323 ASSERT_EQ(0u, resolver->pending_requests().size()); |
1300 | 1324 |
1301 // It should be trying to auto-detect first -- fail the download. | 1325 // It should be trying to auto-detect first -- fail the download. |
1302 EXPECT_TRUE(fetcher->has_pending_request()); | 1326 EXPECT_TRUE(fetcher->has_pending_request()); |
1303 EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url()); | 1327 EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url()); |
1304 fetcher->NotifyFetchCompletion(ERR_FAILED, ""); | 1328 fetcher->NotifyFetchCompletion(ERR_FAILED, ""); |
1305 | 1329 |
(...skipping 20 matching lines...) Expand all Loading... |
1326 ProxyConfig config; | 1350 ProxyConfig config; |
1327 config.set_auto_detect(true); | 1351 config.set_auto_detect(true); |
1328 config.set_pac_url(GURL("http://foopy/proxy.pac")); | 1352 config.set_pac_url(GURL("http://foopy/proxy.pac")); |
1329 config.proxy_rules().ParseFromString("http=foopy:80"); // Not used. | 1353 config.proxy_rules().ParseFromString("http=foopy:80"); // Not used. |
1330 config.proxy_rules().bypass_rules.ParseFromString("www.google.com"); | 1354 config.proxy_rules().bypass_rules.ParseFromString("www.google.com"); |
1331 | 1355 |
1332 MockProxyConfigService* config_service = new MockProxyConfigService(config); | 1356 MockProxyConfigService* config_service = new MockProxyConfigService(config); |
1333 MockAsyncProxyResolverExpectsBytes* resolver = | 1357 MockAsyncProxyResolverExpectsBytes* resolver = |
1334 new MockAsyncProxyResolverExpectsBytes; | 1358 new MockAsyncProxyResolverExpectsBytes; |
1335 scoped_refptr<ProxyService> service( | 1359 scoped_refptr<ProxyService> service( |
1336 new ProxyService(config_service, resolver, NULL, BoundNetLog())); | 1360 new ProxyService(config_service, resolver, NULL, NULL)); |
1337 | 1361 |
1338 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; | 1362 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
1339 service->SetProxyScriptFetcher(fetcher); | 1363 service->SetProxyScriptFetcher(fetcher); |
1340 | 1364 |
1341 // Start 1 requests. | 1365 // Start 1 requests. |
1342 | 1366 |
1343 ProxyInfo info1; | 1367 ProxyInfo info1; |
1344 TestCompletionCallback callback1; | 1368 TestCompletionCallback callback1; |
1345 int rv = service->ResolveProxy( | 1369 int rv = service->ResolveProxy( |
1346 GURL("http://www.google.com"), &info1, &callback1, NULL, NULL); | 1370 GURL("http://www.google.com"), &info1, &callback1, NULL, BoundNetLog()); |
1347 EXPECT_EQ(ERR_IO_PENDING, rv); | 1371 EXPECT_EQ(ERR_IO_PENDING, rv); |
1348 | 1372 |
1349 // Check that nothing has been sent to the proxy resolver yet. | 1373 // Check that nothing has been sent to the proxy resolver yet. |
1350 ASSERT_EQ(0u, resolver->pending_requests().size()); | 1374 ASSERT_EQ(0u, resolver->pending_requests().size()); |
1351 | 1375 |
1352 // It should be trying to auto-detect first -- succeed the download. | 1376 // It should be trying to auto-detect first -- succeed the download. |
1353 EXPECT_TRUE(fetcher->has_pending_request()); | 1377 EXPECT_TRUE(fetcher->has_pending_request()); |
1354 EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url()); | 1378 EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url()); |
1355 fetcher->NotifyFetchCompletion(OK, "auto-detect"); | 1379 fetcher->NotifyFetchCompletion(OK, "auto-detect"); |
1356 | 1380 |
(...skipping 10 matching lines...) Expand all Loading... |
1367 resolver->pending_requests()[0]->CompleteNow(OK); | 1391 resolver->pending_requests()[0]->CompleteNow(OK); |
1368 | 1392 |
1369 // Verify that request ran as expected. | 1393 // Verify that request ran as expected. |
1370 EXPECT_EQ(OK, callback1.WaitForResult()); | 1394 EXPECT_EQ(OK, callback1.WaitForResult()); |
1371 EXPECT_EQ("request1:80", info1.proxy_server().ToURI()); | 1395 EXPECT_EQ("request1:80", info1.proxy_server().ToURI()); |
1372 | 1396 |
1373 // Start another request, it should pickup the bypass item. | 1397 // Start another request, it should pickup the bypass item. |
1374 ProxyInfo info2; | 1398 ProxyInfo info2; |
1375 TestCompletionCallback callback2; | 1399 TestCompletionCallback callback2; |
1376 rv = service->ResolveProxy( | 1400 rv = service->ResolveProxy( |
1377 GURL("http://www.google.com"), &info2, &callback2, NULL, NULL); | 1401 GURL("http://www.google.com"), &info2, &callback2, NULL, BoundNetLog()); |
1378 EXPECT_EQ(ERR_IO_PENDING, rv); | 1402 EXPECT_EQ(ERR_IO_PENDING, rv); |
1379 | 1403 |
1380 ASSERT_EQ(1u, resolver->pending_requests().size()); | 1404 ASSERT_EQ(1u, resolver->pending_requests().size()); |
1381 EXPECT_EQ(GURL("http://www.google.com"), | 1405 EXPECT_EQ(GURL("http://www.google.com"), |
1382 resolver->pending_requests()[0]->url()); | 1406 resolver->pending_requests()[0]->url()); |
1383 | 1407 |
1384 // Complete the pending request. | 1408 // Complete the pending request. |
1385 resolver->pending_requests()[0]->results()->UseNamedProxy("request2:80"); | 1409 resolver->pending_requests()[0]->results()->UseNamedProxy("request2:80"); |
1386 resolver->pending_requests()[0]->CompleteNow(OK); | 1410 resolver->pending_requests()[0]->CompleteNow(OK); |
1387 | 1411 |
1388 EXPECT_EQ(OK, callback2.WaitForResult()); | 1412 EXPECT_EQ(OK, callback2.WaitForResult()); |
1389 EXPECT_EQ("request2:80", info2.proxy_server().ToURI()); | 1413 EXPECT_EQ("request2:80", info2.proxy_server().ToURI()); |
1390 } | 1414 } |
1391 | 1415 |
1392 // Delete the ProxyService while InitProxyResolver has an outstanding | 1416 // Delete the ProxyService while InitProxyResolver has an outstanding |
1393 // request to the script fetcher. When run under valgrind, should not | 1417 // request to the script fetcher. When run under valgrind, should not |
1394 // have any memory errors (used to be that the ProxyScriptFetcher was | 1418 // have any memory errors (used to be that the ProxyScriptFetcher was |
1395 // being deleted prior to the InitProxyResolver). | 1419 // being deleted prior to the InitProxyResolver). |
1396 TEST(ProxyServiceTest, DeleteWhileInitProxyResolverHasOutstandingFetch) { | 1420 TEST(ProxyServiceTest, DeleteWhileInitProxyResolverHasOutstandingFetch) { |
1397 ProxyConfig config; | 1421 ProxyConfig config; |
1398 config.set_pac_url(GURL("http://foopy/proxy.pac")); | 1422 config.set_pac_url(GURL("http://foopy/proxy.pac")); |
1399 | 1423 |
1400 MockProxyConfigService* config_service = new MockProxyConfigService(config); | 1424 MockProxyConfigService* config_service = new MockProxyConfigService(config); |
1401 MockAsyncProxyResolverExpectsBytes* resolver = | 1425 MockAsyncProxyResolverExpectsBytes* resolver = |
1402 new MockAsyncProxyResolverExpectsBytes; | 1426 new MockAsyncProxyResolverExpectsBytes; |
1403 scoped_refptr<ProxyService> service( | 1427 scoped_refptr<ProxyService> service( |
1404 new ProxyService(config_service, resolver, NULL, BoundNetLog())); | 1428 new ProxyService(config_service, resolver, NULL, NULL)); |
1405 | 1429 |
1406 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; | 1430 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
1407 service->SetProxyScriptFetcher(fetcher); | 1431 service->SetProxyScriptFetcher(fetcher); |
1408 | 1432 |
1409 // Start 1 request. | 1433 // Start 1 request. |
1410 | 1434 |
1411 ProxyInfo info1; | 1435 ProxyInfo info1; |
1412 TestCompletionCallback callback1; | 1436 TestCompletionCallback callback1; |
1413 int rv = service->ResolveProxy( | 1437 int rv = service->ResolveProxy( |
1414 GURL("http://www.google.com"), &info1, &callback1, NULL, NULL); | 1438 GURL("http://www.google.com"), &info1, &callback1, NULL, BoundNetLog()); |
1415 EXPECT_EQ(ERR_IO_PENDING, rv); | 1439 EXPECT_EQ(ERR_IO_PENDING, rv); |
1416 | 1440 |
1417 // Check that nothing has been sent to the proxy resolver yet. | 1441 // Check that nothing has been sent to the proxy resolver yet. |
1418 ASSERT_EQ(0u, resolver->pending_requests().size()); | 1442 ASSERT_EQ(0u, resolver->pending_requests().size()); |
1419 | 1443 |
1420 // InitProxyResolver should have issued a request to the ProxyScriptFetcher | 1444 // InitProxyResolver should have issued a request to the ProxyScriptFetcher |
1421 // and be waiting on that to complete. | 1445 // and be waiting on that to complete. |
1422 EXPECT_TRUE(fetcher->has_pending_request()); | 1446 EXPECT_TRUE(fetcher->has_pending_request()); |
1423 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); | 1447 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); |
1424 | 1448 |
1425 // Delete the ProxyService | 1449 // Delete the ProxyService |
1426 service = NULL; | 1450 service = NULL; |
1427 } | 1451 } |
1428 | 1452 |
1429 // Delete the ProxyService while InitProxyResolver has an outstanding | 1453 // Delete the ProxyService while InitProxyResolver has an outstanding |
1430 // request to the proxy resolver. When run under valgrind, should not | 1454 // request to the proxy resolver. When run under valgrind, should not |
1431 // have any memory errors (used to be that the ProxyResolver was | 1455 // have any memory errors (used to be that the ProxyResolver was |
1432 // being deleted prior to the InitProxyResolver). | 1456 // being deleted prior to the InitProxyResolver). |
1433 TEST(ProxyServiceTest, DeleteWhileInitProxyResolverHasOutstandingSet) { | 1457 TEST(ProxyServiceTest, DeleteWhileInitProxyResolverHasOutstandingSet) { |
1434 MockProxyConfigService* config_service = | 1458 MockProxyConfigService* config_service = |
1435 new MockProxyConfigService("http://foopy/proxy.pac"); | 1459 new MockProxyConfigService("http://foopy/proxy.pac"); |
1436 | 1460 |
1437 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; | 1461 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; |
1438 | 1462 |
1439 scoped_refptr<ProxyService> service( | 1463 scoped_refptr<ProxyService> service( |
1440 new ProxyService(config_service, resolver, NULL, BoundNetLog())); | 1464 new ProxyService(config_service, resolver, NULL, NULL)); |
1441 | 1465 |
1442 GURL url("http://www.google.com/"); | 1466 GURL url("http://www.google.com/"); |
1443 | 1467 |
1444 ProxyInfo info; | 1468 ProxyInfo info; |
1445 TestCompletionCallback callback; | 1469 TestCompletionCallback callback; |
1446 int rv = service->ResolveProxy(url, &info, &callback, NULL, NULL); | 1470 int rv = service->ResolveProxy(url, &info, &callback, NULL, BoundNetLog()); |
1447 EXPECT_EQ(ERR_IO_PENDING, rv); | 1471 EXPECT_EQ(ERR_IO_PENDING, rv); |
1448 | 1472 |
1449 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 1473 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
1450 resolver->pending_set_pac_script_request()->pac_url()); | 1474 resolver->pending_set_pac_script_request()->pac_url()); |
1451 | 1475 |
1452 // Delete the ProxyService. | 1476 // Delete the ProxyService. |
1453 service = NULL; | 1477 service = NULL; |
1454 } | 1478 } |
1455 | 1479 |
1456 TEST(ProxyServiceTest, ResetProxyConfigService) { | 1480 TEST(ProxyServiceTest, ResetProxyConfigService) { |
1457 ProxyConfig config1; | 1481 ProxyConfig config1; |
1458 config1.proxy_rules().ParseFromString("foopy1:8080"); | 1482 config1.proxy_rules().ParseFromString("foopy1:8080"); |
1459 config1.set_auto_detect(false); | 1483 config1.set_auto_detect(false); |
1460 scoped_refptr<ProxyService> service(new ProxyService( | 1484 scoped_refptr<ProxyService> service(new ProxyService( |
1461 new MockProxyConfigService(config1), | 1485 new MockProxyConfigService(config1), |
1462 new MockAsyncProxyResolverExpectsBytes, | 1486 new MockAsyncProxyResolverExpectsBytes, |
1463 NULL, BoundNetLog())); | 1487 NULL, NULL)); |
1464 | 1488 |
1465 ProxyInfo info; | 1489 ProxyInfo info; |
1466 TestCompletionCallback callback1; | 1490 TestCompletionCallback callback1; |
1467 int rv = service->ResolveProxy( | 1491 int rv = service->ResolveProxy( |
1468 GURL("http://request1"), &info, &callback1, NULL, NULL); | 1492 GURL("http://request1"), &info, &callback1, NULL, BoundNetLog()); |
1469 EXPECT_EQ(OK, rv); | 1493 EXPECT_EQ(OK, rv); |
1470 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); | 1494 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
1471 | 1495 |
1472 ProxyConfig config2; | 1496 ProxyConfig config2; |
1473 config2.proxy_rules().ParseFromString("foopy2:8080"); | 1497 config2.proxy_rules().ParseFromString("foopy2:8080"); |
1474 config2.set_auto_detect(false); | 1498 config2.set_auto_detect(false); |
1475 service->ResetConfigService(new MockProxyConfigService(config2)); | 1499 service->ResetConfigService(new MockProxyConfigService(config2)); |
1476 TestCompletionCallback callback2; | 1500 TestCompletionCallback callback2; |
1477 rv = service->ResolveProxy( | 1501 rv = service->ResolveProxy( |
1478 GURL("http://request2"), &info, &callback2, NULL, NULL); | 1502 GURL("http://request2"), &info, &callback2, NULL, BoundNetLog()); |
1479 EXPECT_EQ(OK, rv); | 1503 EXPECT_EQ(OK, rv); |
1480 EXPECT_EQ("foopy2:8080", info.proxy_server().ToURI()); | 1504 EXPECT_EQ("foopy2:8080", info.proxy_server().ToURI()); |
1481 } | 1505 } |
1482 | 1506 |
1483 // Check that after we have done the auto-detect test, and the configuration | 1507 // Check that after we have done the auto-detect test, and the configuration |
1484 // is updated (with no change), we don't re-try the autodetect test. | 1508 // is updated (with no change), we don't re-try the autodetect test. |
1485 // Regression test for http://crbug.com/18526 -- the configuration was being | 1509 // Regression test for http://crbug.com/18526 -- the configuration was being |
1486 // mutated to cancel out the automatic settings, which meant UpdateConfig() | 1510 // mutated to cancel out the automatic settings, which meant UpdateConfig() |
1487 // thought it had received a new configuration. | 1511 // thought it had received a new configuration. |
1488 TEST(ProxyServiceTest, UpdateConfigAfterFailedAutodetect) { | 1512 TEST(ProxyServiceTest, UpdateConfigAfterFailedAutodetect) { |
1489 ProxyConfig config; | 1513 ProxyConfig config; |
1490 config.set_auto_detect(true); | 1514 config.set_auto_detect(true); |
1491 | 1515 |
1492 MockProxyConfigService* config_service = new MockProxyConfigService(config); | 1516 MockProxyConfigService* config_service = new MockProxyConfigService(config); |
1493 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; | 1517 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; |
1494 scoped_refptr<ProxyService> service( | 1518 scoped_refptr<ProxyService> service( |
1495 new ProxyService(config_service, resolver, NULL, BoundNetLog())); | 1519 new ProxyService(config_service, resolver, NULL, NULL)); |
1496 | 1520 |
1497 // Start 1 requests. | 1521 // Start 1 requests. |
1498 | 1522 |
1499 ProxyInfo info1; | 1523 ProxyInfo info1; |
1500 TestCompletionCallback callback1; | 1524 TestCompletionCallback callback1; |
1501 int rv = service->ResolveProxy( | 1525 int rv = service->ResolveProxy( |
1502 GURL("http://www.google.com"), &info1, &callback1, NULL, NULL); | 1526 GURL("http://www.google.com"), &info1, &callback1, NULL, BoundNetLog()); |
1503 EXPECT_EQ(ERR_IO_PENDING, rv); | 1527 EXPECT_EQ(ERR_IO_PENDING, rv); |
1504 | 1528 |
1505 // Check that nothing has been sent to the proxy resolver yet. | 1529 // Check that nothing has been sent to the proxy resolver yet. |
1506 ASSERT_EQ(0u, resolver->pending_requests().size()); | 1530 ASSERT_EQ(0u, resolver->pending_requests().size()); |
1507 | 1531 |
1508 // Fail the setting of autodetect script. | 1532 // Fail the setting of autodetect script. |
1509 EXPECT_EQ(GURL(), resolver->pending_set_pac_script_request()->pac_url()); | 1533 EXPECT_EQ(GURL(), resolver->pending_set_pac_script_request()->pac_url()); |
1510 resolver->pending_set_pac_script_request()->CompleteNow(ERR_FAILED); | 1534 resolver->pending_set_pac_script_request()->CompleteNow(ERR_FAILED); |
1511 | 1535 |
1512 // Verify that request ran as expected -- should have fallen back to direct. | 1536 // Verify that request ran as expected -- should have fallen back to direct. |
1513 EXPECT_EQ(OK, callback1.WaitForResult()); | 1537 EXPECT_EQ(OK, callback1.WaitForResult()); |
1514 EXPECT_TRUE(info1.is_direct()); | 1538 EXPECT_TRUE(info1.is_direct()); |
1515 | 1539 |
1516 // Force the ProxyService to pull down a new proxy configuration. | 1540 // Force the ProxyService to pull down a new proxy configuration. |
1517 // (Even though the configuration isn't old/bad). | 1541 // (Even though the configuration isn't old/bad). |
1518 service->UpdateConfig(NULL); | 1542 service->UpdateConfig(BoundNetLog()); |
1519 | 1543 |
1520 // Start another request -- the effective configuration has not | 1544 // Start another request -- the effective configuration has not |
1521 // changed, so we shouldn't re-run the autodetect step. | 1545 // changed, so we shouldn't re-run the autodetect step. |
1522 // Rather, it should complete synchronously as direct-connect. | 1546 // Rather, it should complete synchronously as direct-connect. |
1523 ProxyInfo info2; | 1547 ProxyInfo info2; |
1524 TestCompletionCallback callback2; | 1548 TestCompletionCallback callback2; |
1525 rv = service->ResolveProxy( | 1549 rv = service->ResolveProxy( |
1526 GURL("http://www.google.com"), &info2, &callback2, NULL, NULL); | 1550 GURL("http://www.google.com"), &info2, &callback2, NULL, BoundNetLog()); |
1527 EXPECT_EQ(OK, rv); | 1551 EXPECT_EQ(OK, rv); |
1528 | 1552 |
1529 EXPECT_TRUE(info2.is_direct()); | 1553 EXPECT_TRUE(info2.is_direct()); |
1530 } | 1554 } |
1531 | 1555 |
1532 // Test that when going from a configuration that required PAC to one | 1556 // Test that when going from a configuration that required PAC to one |
1533 // that does NOT, we unset the variable |should_use_proxy_resolver_|. | 1557 // that does NOT, we unset the variable |should_use_proxy_resolver_|. |
1534 TEST(ProxyServiceTest, UpdateConfigFromPACToDirect) { | 1558 TEST(ProxyServiceTest, UpdateConfigFromPACToDirect) { |
1535 ProxyConfig config; | 1559 ProxyConfig config; |
1536 config.set_auto_detect(true); | 1560 config.set_auto_detect(true); |
1537 | 1561 |
1538 MockProxyConfigService* config_service = new MockProxyConfigService(config); | 1562 MockProxyConfigService* config_service = new MockProxyConfigService(config); |
1539 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; | 1563 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; |
1540 scoped_refptr<ProxyService> service( | 1564 scoped_refptr<ProxyService> service( |
1541 new ProxyService(config_service, resolver, NULL, BoundNetLog())); | 1565 new ProxyService(config_service, resolver, NULL, NULL)); |
1542 | 1566 |
1543 // Start 1 request. | 1567 // Start 1 request. |
1544 | 1568 |
1545 ProxyInfo info1; | 1569 ProxyInfo info1; |
1546 TestCompletionCallback callback1; | 1570 TestCompletionCallback callback1; |
1547 int rv = service->ResolveProxy( | 1571 int rv = service->ResolveProxy( |
1548 GURL("http://www.google.com"), &info1, &callback1, NULL, NULL); | 1572 GURL("http://www.google.com"), &info1, &callback1, NULL, BoundNetLog()); |
1549 EXPECT_EQ(ERR_IO_PENDING, rv); | 1573 EXPECT_EQ(ERR_IO_PENDING, rv); |
1550 | 1574 |
1551 // Check that nothing has been sent to the proxy resolver yet. | 1575 // Check that nothing has been sent to the proxy resolver yet. |
1552 ASSERT_EQ(0u, resolver->pending_requests().size()); | 1576 ASSERT_EQ(0u, resolver->pending_requests().size()); |
1553 | 1577 |
1554 // Successfully set the autodetect script. | 1578 // Successfully set the autodetect script. |
1555 EXPECT_EQ(GURL(), resolver->pending_set_pac_script_request()->pac_url()); | 1579 EXPECT_EQ(GURL(), resolver->pending_set_pac_script_request()->pac_url()); |
1556 resolver->pending_set_pac_script_request()->CompleteNow(OK); | 1580 resolver->pending_set_pac_script_request()->CompleteNow(OK); |
1557 | 1581 |
1558 // Complete the pending request. | 1582 // Complete the pending request. |
1559 ASSERT_EQ(1u, resolver->pending_requests().size()); | 1583 ASSERT_EQ(1u, resolver->pending_requests().size()); |
1560 resolver->pending_requests()[0]->results()->UseNamedProxy("request1:80"); | 1584 resolver->pending_requests()[0]->results()->UseNamedProxy("request1:80"); |
1561 resolver->pending_requests()[0]->CompleteNow(OK); | 1585 resolver->pending_requests()[0]->CompleteNow(OK); |
1562 | 1586 |
1563 // Verify that request ran as expected. | 1587 // Verify that request ran as expected. |
1564 EXPECT_EQ(OK, callback1.WaitForResult()); | 1588 EXPECT_EQ(OK, callback1.WaitForResult()); |
1565 EXPECT_EQ("request1:80", info1.proxy_server().ToURI()); | 1589 EXPECT_EQ("request1:80", info1.proxy_server().ToURI()); |
1566 | 1590 |
1567 // Force the ProxyService to pull down a new proxy configuration. | 1591 // Force the ProxyService to pull down a new proxy configuration. |
1568 // (Even though the configuration isn't old/bad). | 1592 // (Even though the configuration isn't old/bad). |
1569 // | 1593 // |
1570 // This new configuration no longer has auto_detect set, so | 1594 // This new configuration no longer has auto_detect set, so |
1571 // requests should complete synchronously now as direct-connect. | 1595 // requests should complete synchronously now as direct-connect. |
1572 config.set_auto_detect(false); | 1596 config.set_auto_detect(false); |
1573 config_service->config = config; | 1597 config_service->config = config; |
1574 service->UpdateConfig(NULL); | 1598 service->UpdateConfig(BoundNetLog()); |
1575 | 1599 |
1576 // Start another request -- the effective configuration has changed. | 1600 // Start another request -- the effective configuration has changed. |
1577 ProxyInfo info2; | 1601 ProxyInfo info2; |
1578 TestCompletionCallback callback2; | 1602 TestCompletionCallback callback2; |
1579 rv = service->ResolveProxy( | 1603 rv = service->ResolveProxy( |
1580 GURL("http://www.google.com"), &info2, &callback2, NULL, NULL); | 1604 GURL("http://www.google.com"), &info2, &callback2, NULL, BoundNetLog()); |
1581 EXPECT_EQ(OK, rv); | 1605 EXPECT_EQ(OK, rv); |
1582 | 1606 |
1583 EXPECT_TRUE(info2.is_direct()); | 1607 EXPECT_TRUE(info2.is_direct()); |
1584 } | 1608 } |
1585 | 1609 |
1586 TEST(ProxyServiceTest, NetworkChangeTriggersPacRefetch) { | 1610 TEST(ProxyServiceTest, NetworkChangeTriggersPacRefetch) { |
1587 MockProxyConfigService* config_service = | 1611 MockProxyConfigService* config_service = |
1588 new MockProxyConfigService("http://foopy/proxy.pac"); | 1612 new MockProxyConfigService("http://foopy/proxy.pac"); |
1589 | 1613 |
1590 MockAsyncProxyResolverExpectsBytes* resolver = | 1614 MockAsyncProxyResolverExpectsBytes* resolver = |
1591 new MockAsyncProxyResolverExpectsBytes; | 1615 new MockAsyncProxyResolverExpectsBytes; |
1592 | 1616 |
1593 MockNetworkChangeNotifier network_change_notifier; | 1617 MockNetworkChangeNotifier network_change_notifier; |
1594 | 1618 |
1595 scoped_refptr<ProxyService> service( | 1619 scoped_refptr<ProxyService> service( |
1596 new ProxyService(config_service, resolver, &network_change_notifier, | 1620 new ProxyService(config_service, resolver, &network_change_notifier, |
1597 BoundNetLog())); | 1621 NULL)); |
1598 | 1622 |
1599 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; | 1623 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
1600 service->SetProxyScriptFetcher(fetcher); | 1624 service->SetProxyScriptFetcher(fetcher); |
1601 | 1625 |
1602 // Start 1 request. | 1626 // Start 1 request. |
1603 | 1627 |
1604 ProxyInfo info1; | 1628 ProxyInfo info1; |
1605 TestCompletionCallback callback1; | 1629 TestCompletionCallback callback1; |
1606 int rv = service->ResolveProxy( | 1630 int rv = service->ResolveProxy( |
1607 GURL("http://request1"), &info1, &callback1, NULL, NULL); | 1631 GURL("http://request1"), &info1, &callback1, NULL, BoundNetLog()); |
1608 EXPECT_EQ(ERR_IO_PENDING, rv); | 1632 EXPECT_EQ(ERR_IO_PENDING, rv); |
1609 | 1633 |
1610 // The first request should have triggered initial download of PAC script. | 1634 // The first request should have triggered initial download of PAC script. |
1611 EXPECT_TRUE(fetcher->has_pending_request()); | 1635 EXPECT_TRUE(fetcher->has_pending_request()); |
1612 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); | 1636 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); |
1613 | 1637 |
1614 // Nothing has been sent to the resolver yet. | 1638 // Nothing has been sent to the resolver yet. |
1615 EXPECT_TRUE(resolver->pending_requests().empty()); | 1639 EXPECT_TRUE(resolver->pending_requests().empty()); |
1616 | 1640 |
1617 // At this point the ProxyService should be waiting for the | 1641 // At this point the ProxyService should be waiting for the |
(...skipping 20 matching lines...) Expand all Loading... |
1638 // Now simluate a change in the network. The ProxyConfigService is still | 1662 // Now simluate a change in the network. The ProxyConfigService is still |
1639 // going to return the same PAC URL as before, but this URL needs to be | 1663 // going to return the same PAC URL as before, but this URL needs to be |
1640 // refetched on the new network. | 1664 // refetched on the new network. |
1641 | 1665 |
1642 network_change_notifier.NotifyIPAddressChange(); | 1666 network_change_notifier.NotifyIPAddressChange(); |
1643 | 1667 |
1644 // Start a second request. | 1668 // Start a second request. |
1645 ProxyInfo info2; | 1669 ProxyInfo info2; |
1646 TestCompletionCallback callback2; | 1670 TestCompletionCallback callback2; |
1647 rv = service->ResolveProxy( | 1671 rv = service->ResolveProxy( |
1648 GURL("http://request2"), &info2, &callback2, NULL, NULL); | 1672 GURL("http://request2"), &info2, &callback2, NULL, BoundNetLog()); |
1649 EXPECT_EQ(ERR_IO_PENDING, rv); | 1673 EXPECT_EQ(ERR_IO_PENDING, rv); |
1650 | 1674 |
1651 // This second request should have triggered the re-download of the PAC | 1675 // This second request should have triggered the re-download of the PAC |
1652 // script (since we marked the network as having changed). | 1676 // script (since we marked the network as having changed). |
1653 EXPECT_TRUE(fetcher->has_pending_request()); | 1677 EXPECT_TRUE(fetcher->has_pending_request()); |
1654 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); | 1678 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); |
1655 | 1679 |
1656 // Nothing has been sent to the resolver yet. | 1680 // Nothing has been sent to the resolver yet. |
1657 EXPECT_TRUE(resolver->pending_requests().empty()); | 1681 EXPECT_TRUE(resolver->pending_requests().empty()); |
1658 | 1682 |
(...skipping 12 matching lines...) Expand all Loading... |
1671 // Complete the pending second request. | 1695 // Complete the pending second request. |
1672 resolver->pending_requests()[0]->results()->UseNamedProxy("request2:80"); | 1696 resolver->pending_requests()[0]->results()->UseNamedProxy("request2:80"); |
1673 resolver->pending_requests()[0]->CompleteNow(OK); | 1697 resolver->pending_requests()[0]->CompleteNow(OK); |
1674 | 1698 |
1675 // Wait for completion callback, and verify that the request ran as expected. | 1699 // Wait for completion callback, and verify that the request ran as expected. |
1676 EXPECT_EQ(OK, callback2.WaitForResult()); | 1700 EXPECT_EQ(OK, callback2.WaitForResult()); |
1677 EXPECT_EQ("request2:80", info2.proxy_server().ToURI()); | 1701 EXPECT_EQ("request2:80", info2.proxy_server().ToURI()); |
1678 } | 1702 } |
1679 | 1703 |
1680 } // namespace net | 1704 } // namespace net |
OLD | NEW |