Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(656)

Side by Side Diff: net/proxy/proxy_service_unittest.cc

Issue 1783008: Cleanup: Remove the implicit constructor for BoundNetLog that allowed passing... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Sync Created 10 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « net/proxy/proxy_service.cc ('k') | net/proxy/single_threaded_proxy_resolver_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « net/proxy/proxy_service.cc ('k') | net/proxy/single_threaded_proxy_resolver_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698