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

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

Issue 1439053002: Change ProxyResolver::GetProxyForURL() to take a scoped_ptr<Request>* rather than a RequestHandle* (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Restore scoped_ptr to mock and nits Created 4 years, 9 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
« no previous file with comments | « net/proxy/proxy_resolver_v8_tracing_wrapper.cc ('k') | net/proxy/proxy_resolver_winhttp.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) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/proxy/proxy_resolver_v8_tracing_wrapper.h" 5 #include "net/proxy/proxy_resolver_v8_tracing_wrapper.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/files/file_util.h" 9 #include "base/files/file_util.h"
10 #include "base/message_loop/message_loop.h" 10 #include "base/message_loop/message_loop.h"
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
121 BoundTestNetLog request_log; 121 BoundTestNetLog request_log;
122 MockCachingHostResolver host_resolver; 122 MockCachingHostResolver host_resolver;
123 MockErrorObserver* error_observer = new MockErrorObserver; 123 MockErrorObserver* error_observer = new MockErrorObserver;
124 124
125 scoped_ptr<ProxyResolver> resolver = CreateResolver( 125 scoped_ptr<ProxyResolver> resolver = CreateResolver(
126 &log, &host_resolver, make_scoped_ptr(error_observer), "simple.js"); 126 &log, &host_resolver, make_scoped_ptr(error_observer), "simple.js");
127 127
128 TestCompletionCallback callback; 128 TestCompletionCallback callback;
129 ProxyInfo proxy_info; 129 ProxyInfo proxy_info;
130 130
131 scoped_ptr<ProxyResolver::Request> req;
131 int rv = 132 int rv =
132 resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info, 133 resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info,
133 callback.callback(), NULL, request_log.bound()); 134 callback.callback(), &req, request_log.bound());
134 135
135 EXPECT_EQ(ERR_IO_PENDING, rv); 136 EXPECT_EQ(ERR_IO_PENDING, rv);
136 EXPECT_EQ(OK, callback.WaitForResult()); 137 EXPECT_EQ(OK, callback.WaitForResult());
137 138
138 EXPECT_EQ("foo:99", proxy_info.proxy_server().ToURI()); 139 EXPECT_EQ("foo:99", proxy_info.proxy_server().ToURI());
139 140
140 EXPECT_EQ(0u, host_resolver.num_resolve()); 141 EXPECT_EQ(0u, host_resolver.num_resolve());
141 142
142 // There were no errors. 143 // There were no errors.
143 EXPECT_EQ("", error_observer->GetOutput()); 144 EXPECT_EQ("", error_observer->GetOutput());
144 145
145 // Check the NetLogs -- nothing was logged. 146 // Check the NetLogs -- nothing was logged.
146 EXPECT_EQ(0u, log.GetSize()); 147 EXPECT_EQ(0u, log.GetSize());
147 EXPECT_EQ(0u, request_log.GetSize()); 148 EXPECT_EQ(0u, request_log.GetSize());
148 } 149 }
149 150
150 TEST_F(ProxyResolverV8TracingWrapperTest, JavascriptError) { 151 TEST_F(ProxyResolverV8TracingWrapperTest, JavascriptError) {
151 TestNetLog log; 152 TestNetLog log;
152 BoundTestNetLog request_log; 153 BoundTestNetLog request_log;
153 MockCachingHostResolver host_resolver; 154 MockCachingHostResolver host_resolver;
154 MockErrorObserver* error_observer = new MockErrorObserver; 155 MockErrorObserver* error_observer = new MockErrorObserver;
155 156
156 scoped_ptr<ProxyResolver> resolver = CreateResolver( 157 scoped_ptr<ProxyResolver> resolver = CreateResolver(
157 &log, &host_resolver, make_scoped_ptr(error_observer), "error.js"); 158 &log, &host_resolver, make_scoped_ptr(error_observer), "error.js");
158 159
159 TestCompletionCallback callback; 160 TestCompletionCallback callback;
160 ProxyInfo proxy_info; 161 ProxyInfo proxy_info;
161 162
163 scoped_ptr<ProxyResolver::Request> req;
162 int rv = 164 int rv =
163 resolver->GetProxyForURL(GURL("http://throw-an-error/"), &proxy_info, 165 resolver->GetProxyForURL(GURL("http://throw-an-error/"), &proxy_info,
164 callback.callback(), NULL, request_log.bound()); 166 callback.callback(), &req, request_log.bound());
165 167
166 EXPECT_EQ(ERR_IO_PENDING, rv); 168 EXPECT_EQ(ERR_IO_PENDING, rv);
167 EXPECT_EQ(ERR_PAC_SCRIPT_FAILED, callback.WaitForResult()); 169 EXPECT_EQ(ERR_PAC_SCRIPT_FAILED, callback.WaitForResult());
168 170
169 EXPECT_EQ(0u, host_resolver.num_resolve()); 171 EXPECT_EQ(0u, host_resolver.num_resolve());
170 172
171 EXPECT_EQ( 173 EXPECT_EQ(
172 "Error: line 5: Uncaught TypeError: Cannot read property 'split' " 174 "Error: line 5: Uncaught TypeError: Cannot read property 'split' "
173 "of null\n", 175 "of null\n",
174 error_observer->GetOutput()); 176 error_observer->GetOutput());
(...skipping 26 matching lines...) Expand all
201 MockCachingHostResolver host_resolver; 203 MockCachingHostResolver host_resolver;
202 MockErrorObserver* error_observer = new MockErrorObserver; 204 MockErrorObserver* error_observer = new MockErrorObserver;
203 205
204 scoped_ptr<ProxyResolver> resolver = 206 scoped_ptr<ProxyResolver> resolver =
205 CreateResolver(&log, &host_resolver, make_scoped_ptr(error_observer), 207 CreateResolver(&log, &host_resolver, make_scoped_ptr(error_observer),
206 "too_many_alerts.js"); 208 "too_many_alerts.js");
207 209
208 TestCompletionCallback callback; 210 TestCompletionCallback callback;
209 ProxyInfo proxy_info; 211 ProxyInfo proxy_info;
210 212
213 scoped_ptr<ProxyResolver::Request> req;
211 int rv = 214 int rv =
212 resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info, 215 resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info,
213 callback.callback(), NULL, request_log.bound()); 216 callback.callback(), &req, request_log.bound());
214 217
215 EXPECT_EQ(ERR_IO_PENDING, rv); 218 EXPECT_EQ(ERR_IO_PENDING, rv);
216 EXPECT_EQ(OK, callback.WaitForResult()); 219 EXPECT_EQ(OK, callback.WaitForResult());
217 220
218 // Iteration1 does a DNS resolve 221 // Iteration1 does a DNS resolve
219 // Iteration2 exceeds the alert buffer 222 // Iteration2 exceeds the alert buffer
220 // Iteration3 runs in blocking mode and completes 223 // Iteration3 runs in blocking mode and completes
221 EXPECT_EQ("foo:3", proxy_info.proxy_server().ToURI()); 224 EXPECT_EQ("foo:3", proxy_info.proxy_server().ToURI());
222 225
223 EXPECT_EQ(1u, host_resolver.num_resolve()); 226 EXPECT_EQ(1u, host_resolver.num_resolve());
(...skipping 25 matching lines...) Expand all
249 MockCachingHostResolver host_resolver; 252 MockCachingHostResolver host_resolver;
250 MockErrorObserver* error_observer = new MockErrorObserver; 253 MockErrorObserver* error_observer = new MockErrorObserver;
251 254
252 scoped_ptr<ProxyResolver> resolver = 255 scoped_ptr<ProxyResolver> resolver =
253 CreateResolver(&log, &host_resolver, make_scoped_ptr(error_observer), 256 CreateResolver(&log, &host_resolver, make_scoped_ptr(error_observer),
254 "too_many_empty_alerts.js"); 257 "too_many_empty_alerts.js");
255 258
256 TestCompletionCallback callback; 259 TestCompletionCallback callback;
257 ProxyInfo proxy_info; 260 ProxyInfo proxy_info;
258 261
262 scoped_ptr<ProxyResolver::Request> req;
259 int rv = 263 int rv =
260 resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info, 264 resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info,
261 callback.callback(), NULL, request_log.bound()); 265 callback.callback(), &req, request_log.bound());
262 266
263 EXPECT_EQ(ERR_IO_PENDING, rv); 267 EXPECT_EQ(ERR_IO_PENDING, rv);
264 EXPECT_EQ(OK, callback.WaitForResult()); 268 EXPECT_EQ(OK, callback.WaitForResult());
265 269
266 EXPECT_EQ("foo:3", proxy_info.proxy_server().ToURI()); 270 EXPECT_EQ("foo:3", proxy_info.proxy_server().ToURI());
267 271
268 EXPECT_EQ(1u, host_resolver.num_resolve()); 272 EXPECT_EQ(1u, host_resolver.num_resolve());
269 273
270 // No errors. 274 // No errors.
271 EXPECT_EQ("", error_observer->GetOutput()); 275 EXPECT_EQ("", error_observer->GetOutput());
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
306 host_resolver.rules()->AddRuleForAddressFamily("*", ADDRESS_FAMILY_IPV4, 310 host_resolver.rules()->AddRuleForAddressFamily("*", ADDRESS_FAMILY_IPV4,
307 "122.133.144.155"); 311 "122.133.144.155");
308 host_resolver.rules()->AddRule("*", "133.122.100.200"); 312 host_resolver.rules()->AddRule("*", "133.122.100.200");
309 313
310 scoped_ptr<ProxyResolver> resolver = CreateResolver( 314 scoped_ptr<ProxyResolver> resolver = CreateResolver(
311 &log, &host_resolver, make_scoped_ptr(error_observer), "dns.js"); 315 &log, &host_resolver, make_scoped_ptr(error_observer), "dns.js");
312 316
313 TestCompletionCallback callback; 317 TestCompletionCallback callback;
314 ProxyInfo proxy_info; 318 ProxyInfo proxy_info;
315 319
320 scoped_ptr<ProxyResolver::Request> req;
316 int rv = 321 int rv =
317 resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info, 322 resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info,
318 callback.callback(), NULL, request_log.bound()); 323 callback.callback(), &req, request_log.bound());
319 324
320 EXPECT_EQ(ERR_IO_PENDING, rv); 325 EXPECT_EQ(ERR_IO_PENDING, rv);
321 EXPECT_EQ(OK, callback.WaitForResult()); 326 EXPECT_EQ(OK, callback.WaitForResult());
322 327
323 // The test does 13 DNS resolution, however only 7 of them are unique. 328 // The test does 13 DNS resolution, however only 7 of them are unique.
324 EXPECT_EQ(7u, host_resolver.num_resolve()); 329 EXPECT_EQ(7u, host_resolver.num_resolve());
325 330
326 const char* kExpectedResult = 331 const char* kExpectedResult =
327 "122.133.144.155-" // myIpAddress() 332 "122.133.144.155-" // myIpAddress()
328 "null-" // dnsResolve('') 333 "null-" // dnsResolve('')
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
371 host_resolver.rules()->AddRule("foopy", "166.155.144.11"); 376 host_resolver.rules()->AddRule("foopy", "166.155.144.11");
372 host_resolver.rules()->AddRule("*", "122.133.144.155"); 377 host_resolver.rules()->AddRule("*", "122.133.144.155");
373 378
374 scoped_ptr<ProxyResolver> resolver = CreateResolver( 379 scoped_ptr<ProxyResolver> resolver = CreateResolver(
375 &log, &host_resolver, make_scoped_ptr(error_observer), "simple_dns.js"); 380 &log, &host_resolver, make_scoped_ptr(error_observer), "simple_dns.js");
376 381
377 TestCompletionCallback callback1; 382 TestCompletionCallback callback1;
378 TestCompletionCallback callback2; 383 TestCompletionCallback callback2;
379 ProxyInfo proxy_info; 384 ProxyInfo proxy_info;
380 385
386 scoped_ptr<ProxyResolver::Request> req;
381 int rv = 387 int rv =
382 resolver->GetProxyForURL(GURL("http://foopy/req1"), &proxy_info, 388 resolver->GetProxyForURL(GURL("http://foopy/req1"), &proxy_info,
383 callback1.callback(), NULL, request_log.bound()); 389 callback1.callback(), &req, request_log.bound());
384 390
385 EXPECT_EQ(ERR_IO_PENDING, rv); 391 EXPECT_EQ(ERR_IO_PENDING, rv);
386 EXPECT_EQ(OK, callback1.WaitForResult()); 392 EXPECT_EQ(OK, callback1.WaitForResult());
387 393
388 // The test does 2 DNS resolutions. 394 // The test does 2 DNS resolutions.
389 EXPECT_EQ(2u, host_resolver.num_resolve()); 395 EXPECT_EQ(2u, host_resolver.num_resolve());
390 396
391 // The first request took 2 restarts, hence on g_iteration=3. 397 // The first request took 2 restarts, hence on g_iteration=3.
392 EXPECT_EQ("166.155.144.11:3", proxy_info.proxy_server().ToURI()); 398 EXPECT_EQ("166.155.144.11:3", proxy_info.proxy_server().ToURI());
393 399
394 rv = 400 scoped_ptr<ProxyResolver::Request> req2;
395 resolver->GetProxyForURL(GURL("http://foopy/req2"), &proxy_info, 401 rv = resolver->GetProxyForURL(GURL("http://foopy/req2"), &proxy_info,
396 callback2.callback(), NULL, request_log.bound()); 402 callback2.callback(), &req2,
403 request_log.bound());
397 404
398 EXPECT_EQ(ERR_IO_PENDING, rv); 405 EXPECT_EQ(ERR_IO_PENDING, rv);
399 EXPECT_EQ(OK, callback2.WaitForResult()); 406 EXPECT_EQ(OK, callback2.WaitForResult());
400 407
401 EXPECT_EQ(4u, host_resolver.num_resolve()); 408 EXPECT_EQ(4u, host_resolver.num_resolve());
402 409
403 // This time no restarts were required, so g_iteration incremented by 1. 410 // This time no restarts were required, so g_iteration incremented by 1.
404 EXPECT_EQ("166.155.144.11:4", proxy_info.proxy_server().ToURI()); 411 EXPECT_EQ("166.155.144.11:4", proxy_info.proxy_server().ToURI());
405 412
406 // No errors. 413 // No errors.
(...skipping 16 matching lines...) Expand all
423 host_resolver.rules()->AddRule("crazy4", "133.199.111.4"); 430 host_resolver.rules()->AddRule("crazy4", "133.199.111.4");
424 host_resolver.rules()->AddRule("*", "122.133.144.155"); 431 host_resolver.rules()->AddRule("*", "122.133.144.155");
425 432
426 scoped_ptr<ProxyResolver> resolver = 433 scoped_ptr<ProxyResolver> resolver =
427 CreateResolver(&log, &host_resolver, make_scoped_ptr(error_observer), 434 CreateResolver(&log, &host_resolver, make_scoped_ptr(error_observer),
428 "global_sideffects1.js"); 435 "global_sideffects1.js");
429 436
430 TestCompletionCallback callback; 437 TestCompletionCallback callback;
431 ProxyInfo proxy_info; 438 ProxyInfo proxy_info;
432 439
440 scoped_ptr<ProxyResolver::Request> req;
433 int rv = 441 int rv =
434 resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info, 442 resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info,
435 callback.callback(), NULL, request_log.bound()); 443 callback.callback(), &req, request_log.bound());
436 EXPECT_EQ(ERR_IO_PENDING, rv); 444 EXPECT_EQ(ERR_IO_PENDING, rv);
437 EXPECT_EQ(OK, callback.WaitForResult()); 445 EXPECT_EQ(OK, callback.WaitForResult());
438 446
439 // The script itself only does 2 DNS resolves per execution, however it 447 // The script itself only does 2 DNS resolves per execution, however it
440 // constructs the hostname using a global counter which changes on each 448 // constructs the hostname using a global counter which changes on each
441 // invocation. 449 // invocation.
442 EXPECT_EQ(3u, host_resolver.num_resolve()); 450 EXPECT_EQ(3u, host_resolver.num_resolve());
443 451
444 EXPECT_EQ("166.155.144.11-133.199.111.4:100", 452 EXPECT_EQ("166.155.144.11-133.199.111.4:100",
445 proxy_info.proxy_server().ToURI()); 453 proxy_info.proxy_server().ToURI());
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
477 host_resolver.rules()->AddRule("host4", "166.155.144.44"); 485 host_resolver.rules()->AddRule("host4", "166.155.144.44");
478 host_resolver.rules()->AddRule("*", "122.133.144.155"); 486 host_resolver.rules()->AddRule("*", "122.133.144.155");
479 487
480 scoped_ptr<ProxyResolver> resolver = 488 scoped_ptr<ProxyResolver> resolver =
481 CreateResolver(&log, &host_resolver, make_scoped_ptr(error_observer), 489 CreateResolver(&log, &host_resolver, make_scoped_ptr(error_observer),
482 "global_sideffects2.js"); 490 "global_sideffects2.js");
483 491
484 TestCompletionCallback callback; 492 TestCompletionCallback callback;
485 ProxyInfo proxy_info; 493 ProxyInfo proxy_info;
486 494
495 scoped_ptr<ProxyResolver::Request> req;
487 int rv = 496 int rv =
488 resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info, 497 resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info,
489 callback.callback(), NULL, request_log.bound()); 498 callback.callback(), &req, request_log.bound());
490 EXPECT_EQ(ERR_IO_PENDING, rv); 499 EXPECT_EQ(ERR_IO_PENDING, rv);
491 EXPECT_EQ(OK, callback.WaitForResult()); 500 EXPECT_EQ(OK, callback.WaitForResult());
492 501
493 EXPECT_EQ(3u, host_resolver.num_resolve()); 502 EXPECT_EQ(3u, host_resolver.num_resolve());
494 503
495 EXPECT_EQ("166.155.144.44:100", proxy_info.proxy_server().ToURI()); 504 EXPECT_EQ("166.155.144.44:100", proxy_info.proxy_server().ToURI());
496 505
497 // No errors. 506 // No errors.
498 EXPECT_EQ("", error_observer->GetOutput()); 507 EXPECT_EQ("", error_observer->GetOutput());
499 508
(...skipping 15 matching lines...) Expand all
515 host_resolver.rules()->AddRule("host*", "166.155.144.11"); 524 host_resolver.rules()->AddRule("host*", "166.155.144.11");
516 host_resolver.rules()->AddRule("*", "122.133.144.155"); 525 host_resolver.rules()->AddRule("*", "122.133.144.155");
517 526
518 scoped_ptr<ProxyResolver> resolver = 527 scoped_ptr<ProxyResolver> resolver =
519 CreateResolver(&log, &host_resolver, make_scoped_ptr(error_observer), 528 CreateResolver(&log, &host_resolver, make_scoped_ptr(error_observer),
520 "global_sideffects3.js"); 529 "global_sideffects3.js");
521 530
522 TestCompletionCallback callback; 531 TestCompletionCallback callback;
523 ProxyInfo proxy_info; 532 ProxyInfo proxy_info;
524 533
534 scoped_ptr<ProxyResolver::Request> req;
525 int rv = 535 int rv =
526 resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info, 536 resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info,
527 callback.callback(), NULL, request_log.bound()); 537 callback.callback(), &req, request_log.bound());
528 EXPECT_EQ(ERR_IO_PENDING, rv); 538 EXPECT_EQ(ERR_IO_PENDING, rv);
529 EXPECT_EQ(OK, callback.WaitForResult()); 539 EXPECT_EQ(OK, callback.WaitForResult());
530 540
531 EXPECT_EQ(20u, host_resolver.num_resolve()); 541 EXPECT_EQ(20u, host_resolver.num_resolve());
532 542
533 EXPECT_EQ( 543 EXPECT_EQ(
534 "166.155.144.11-166.155.144.11-166.155.144.11-166.155.144.11-" 544 "166.155.144.11-166.155.144.11-166.155.144.11-166.155.144.11-"
535 "166.155.144.11-166.155.144.11-166.155.144.11-166.155.144.11-" 545 "166.155.144.11-166.155.144.11-166.155.144.11-166.155.144.11-"
536 "166.155.144.11-166.155.144.11-166.155.144.11-166.155.144.11-" 546 "166.155.144.11-166.155.144.11-166.155.144.11-166.155.144.11-"
537 "166.155.144.11-166.155.144.11-166.155.144.11-166.155.144.11-" 547 "166.155.144.11-166.155.144.11-166.155.144.11-166.155.144.11-"
(...skipping 22 matching lines...) Expand all
560 host_resolver.rules()->AddRule("host*", "166.155.144.11"); 570 host_resolver.rules()->AddRule("host*", "166.155.144.11");
561 host_resolver.rules()->AddRule("*", "122.133.144.155"); 571 host_resolver.rules()->AddRule("*", "122.133.144.155");
562 572
563 scoped_ptr<ProxyResolver> resolver = 573 scoped_ptr<ProxyResolver> resolver =
564 CreateResolver(&log, &host_resolver, make_scoped_ptr(error_observer), 574 CreateResolver(&log, &host_resolver, make_scoped_ptr(error_observer),
565 "global_sideffects4.js"); 575 "global_sideffects4.js");
566 576
567 TestCompletionCallback callback; 577 TestCompletionCallback callback;
568 ProxyInfo proxy_info; 578 ProxyInfo proxy_info;
569 579
580 scoped_ptr<ProxyResolver::Request> req;
570 int rv = 581 int rv =
571 resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info, 582 resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info,
572 callback.callback(), NULL, request_log.bound()); 583 callback.callback(), &req, request_log.bound());
573 EXPECT_EQ(ERR_IO_PENDING, rv); 584 EXPECT_EQ(ERR_IO_PENDING, rv);
574 EXPECT_EQ(OK, callback.WaitForResult()); 585 EXPECT_EQ(OK, callback.WaitForResult());
575 586
576 EXPECT_EQ(20u, host_resolver.num_resolve()); 587 EXPECT_EQ(20u, host_resolver.num_resolve());
577 588
578 EXPECT_EQ("null21:34", proxy_info.proxy_server().ToURI()); 589 EXPECT_EQ("null21:34", proxy_info.proxy_server().ToURI());
579 590
580 // No errors. 591 // No errors.
581 EXPECT_EQ("", error_observer->GetOutput()); 592 EXPECT_EQ("", error_observer->GetOutput());
582 593
(...skipping 21 matching lines...) Expand all
604 615
605 host_resolver.rules()->ClearRules(); 616 host_resolver.rules()->ClearRules();
606 host_resolver.GetHostCache()->clear(); 617 host_resolver.GetHostCache()->clear();
607 618
608 host_resolver.rules()->AddRule("host1", "145.88.13.3"); 619 host_resolver.rules()->AddRule("host1", "145.88.13.3");
609 host_resolver.rules()->AddRule("host2", "137.89.8.45"); 620 host_resolver.rules()->AddRule("host2", "137.89.8.45");
610 621
611 TestCompletionCallback callback; 622 TestCompletionCallback callback;
612 ProxyInfo proxy_info; 623 ProxyInfo proxy_info;
613 624
625 scoped_ptr<ProxyResolver::Request> req;
614 int rv = 626 int rv =
615 resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info, 627 resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info,
616 callback.callback(), NULL, request_log.bound()); 628 callback.callback(), &req, request_log.bound());
617 EXPECT_EQ(ERR_IO_PENDING, rv); 629 EXPECT_EQ(ERR_IO_PENDING, rv);
618 EXPECT_EQ(OK, callback.WaitForResult()); 630 EXPECT_EQ(OK, callback.WaitForResult());
619 631
620 // Fetched host1 and host2 again, since the ones done during initialization 632 // Fetched host1 and host2 again, since the ones done during initialization
621 // should not have been cached. 633 // should not have been cached.
622 EXPECT_EQ(4u, host_resolver.num_resolve()); 634 EXPECT_EQ(4u, host_resolver.num_resolve());
623 635
624 EXPECT_EQ("91.13.12.1-91.13.12.2-145.88.13.3-137.89.8.45:99", 636 EXPECT_EQ("91.13.12.1-91.13.12.2-145.88.13.3-137.89.8.45:99",
625 proxy_info.proxy_server().ToURI()); 637 proxy_info.proxy_server().ToURI());
626 638
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
660 MockCachingHostResolver host_resolver; 672 MockCachingHostResolver host_resolver;
661 MockErrorObserver* error_observer = new MockErrorObserver; 673 MockErrorObserver* error_observer = new MockErrorObserver;
662 674
663 host_resolver.rules()->AddSimulatedFailure("*"); 675 host_resolver.rules()->AddSimulatedFailure("*");
664 676
665 scoped_ptr<ProxyResolver> resolver = CreateResolver( 677 scoped_ptr<ProxyResolver> resolver = CreateResolver(
666 nullptr, &host_resolver, make_scoped_ptr(error_observer), "dns.js"); 678 nullptr, &host_resolver, make_scoped_ptr(error_observer), "dns.js");
667 679
668 const size_t kNumRequests = 5; 680 const size_t kNumRequests = 5;
669 ProxyInfo proxy_info[kNumRequests]; 681 ProxyInfo proxy_info[kNumRequests];
670 ProxyResolver::RequestHandle request[kNumRequests]; 682 scoped_ptr<ProxyResolver::Request> request[kNumRequests];
671 683
672 for (size_t i = 0; i < kNumRequests; ++i) { 684 for (size_t i = 0; i < kNumRequests; ++i) {
673 int rv = resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info[i], 685 int rv = resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info[i],
674 base::Bind(&CrashCallback), &request[i], 686 base::Bind(&CrashCallback), &request[i],
675 BoundNetLog()); 687 BoundNetLog());
676 EXPECT_EQ(ERR_IO_PENDING, rv); 688 EXPECT_EQ(ERR_IO_PENDING, rv);
677 } 689 }
678 690
679 for (size_t i = 0; i < kNumRequests; ++i) { 691 for (size_t i = 0; i < kNumRequests; ++i) {
680 resolver->CancelRequest(request[i]); 692 request[i].reset();
681 } 693 }
682 } 694 }
683 695
684 // Note the execution order for this test can vary. Since multiple 696 // Note the execution order for this test can vary. Since multiple
685 // threads are involved, the cancellation may be received a different 697 // threads are involved, the cancellation may be received a different
686 // times. 698 // times.
687 TEST_F(ProxyResolverV8TracingWrapperTest, CancelSome) { 699 TEST_F(ProxyResolverV8TracingWrapperTest, CancelSome) {
688 MockCachingHostResolver host_resolver; 700 MockCachingHostResolver host_resolver;
689 MockErrorObserver* error_observer = new MockErrorObserver; 701 MockErrorObserver* error_observer = new MockErrorObserver;
690 702
691 host_resolver.rules()->AddSimulatedFailure("*"); 703 host_resolver.rules()->AddSimulatedFailure("*");
692 704
693 scoped_ptr<ProxyResolver> resolver = CreateResolver( 705 scoped_ptr<ProxyResolver> resolver = CreateResolver(
694 nullptr, &host_resolver, make_scoped_ptr(error_observer), "dns.js"); 706 nullptr, &host_resolver, make_scoped_ptr(error_observer), "dns.js");
695 707
696 ProxyInfo proxy_info1; 708 ProxyInfo proxy_info1;
697 ProxyInfo proxy_info2; 709 ProxyInfo proxy_info2;
698 ProxyResolver::RequestHandle request1; 710 scoped_ptr<ProxyResolver::Request> request1;
699 ProxyResolver::RequestHandle request2; 711 scoped_ptr<ProxyResolver::Request> request2;
700 TestCompletionCallback callback; 712 TestCompletionCallback callback;
701 713
702 int rv = resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info1, 714 int rv = resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info1,
703 base::Bind(&CrashCallback), &request1, 715 base::Bind(&CrashCallback), &request1,
704 BoundNetLog()); 716 BoundNetLog());
705 EXPECT_EQ(ERR_IO_PENDING, rv); 717 EXPECT_EQ(ERR_IO_PENDING, rv);
706 718
707 rv = resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info2, 719 rv = resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info2,
708 callback.callback(), &request2, BoundNetLog()); 720 callback.callback(), &request2, BoundNetLog());
709 EXPECT_EQ(ERR_IO_PENDING, rv); 721 EXPECT_EQ(ERR_IO_PENDING, rv);
710 722
711 resolver->CancelRequest(request1); 723 request1.reset();
712 724
713 EXPECT_EQ(OK, callback.WaitForResult()); 725 EXPECT_EQ(OK, callback.WaitForResult());
714 } 726 }
715 727
716 // Cancel a request after it has finished running on the worker thread, and has 728 // Cancel a request after it has finished running on the worker thread, and has
717 // posted a task the completion task back to origin thread. 729 // posted a task the completion task back to origin thread.
718 TEST_F(ProxyResolverV8TracingWrapperTest, CancelWhilePendingCompletionTask) { 730 TEST_F(ProxyResolverV8TracingWrapperTest, CancelWhilePendingCompletionTask) {
719 MockCachingHostResolver host_resolver; 731 MockCachingHostResolver host_resolver;
720 MockErrorObserver* error_observer = new MockErrorObserver; 732 MockErrorObserver* error_observer = new MockErrorObserver;
721 733
722 host_resolver.rules()->AddSimulatedFailure("*"); 734 host_resolver.rules()->AddSimulatedFailure("*");
723 735
724 scoped_ptr<ProxyResolver> resolver = CreateResolver( 736 scoped_ptr<ProxyResolver> resolver = CreateResolver(
725 nullptr, &host_resolver, make_scoped_ptr(error_observer), "error.js"); 737 nullptr, &host_resolver, make_scoped_ptr(error_observer), "error.js");
726 738
727 ProxyInfo proxy_info1; 739 ProxyInfo proxy_info1;
728 ProxyInfo proxy_info2; 740 ProxyInfo proxy_info2;
729 ProxyResolver::RequestHandle request1; 741 scoped_ptr<ProxyResolver::Request> request1;
730 ProxyResolver::RequestHandle request2; 742 scoped_ptr<ProxyResolver::Request> request2;
731 TestCompletionCallback callback; 743 TestCompletionCallback callback;
732 744
733 int rv = resolver->GetProxyForURL(GURL("http://throw-an-error/"), 745 int rv = resolver->GetProxyForURL(GURL("http://throw-an-error/"),
734 &proxy_info1, base::Bind(&CrashCallback), 746 &proxy_info1, base::Bind(&CrashCallback),
735 &request1, BoundNetLog()); 747 &request1, BoundNetLog());
736 EXPECT_EQ(ERR_IO_PENDING, rv); 748 EXPECT_EQ(ERR_IO_PENDING, rv);
737 749
738 // Wait until the first request has finished running on the worker thread. 750 // Wait until the first request has finished running on the worker thread.
739 // Cancel the first request, while it has a pending completion task on 751 // Cancel the first request, while it has a pending completion task on
740 // the origin thread. 752 // the origin thread. Reset deletes Request object which cancels the request.
741 error_observer->RunOnError(base::Bind(&ProxyResolver::CancelRequest, 753 error_observer->RunOnError(
742 base::Unretained(resolver.get()), 754 base::Bind(&scoped_ptr<ProxyResolver::Request>::reset,
743 request1)); 755 base::Unretained(&request1), nullptr));
744 756
745 // Start another request, to make sure it is able to complete. 757 // Start another request, to make sure it is able to complete.
746 rv = resolver->GetProxyForURL(GURL("http://i-have-no-idea-what-im-doing/"), 758 rv = resolver->GetProxyForURL(GURL("http://i-have-no-idea-what-im-doing/"),
747 &proxy_info2, callback.callback(), &request2, 759 &proxy_info2, callback.callback(), &request2,
748 BoundNetLog()); 760 BoundNetLog());
749 EXPECT_EQ(ERR_IO_PENDING, rv); 761 EXPECT_EQ(ERR_IO_PENDING, rv);
750 762
751 EXPECT_EQ(OK, callback.WaitForResult()); 763 EXPECT_EQ(OK, callback.WaitForResult());
752 764
753 EXPECT_EQ("i-approve-this-message:42", proxy_info2.proxy_server().ToURI()); 765 EXPECT_EQ("i-approve-this-message:42", proxy_info2.proxy_server().ToURI());
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
821 TEST_F(ProxyResolverV8TracingWrapperTest, 833 TEST_F(ProxyResolverV8TracingWrapperTest,
822 CancelWhileOutstandingNonBlockingDns) { 834 CancelWhileOutstandingNonBlockingDns) {
823 BlockableHostResolver host_resolver; 835 BlockableHostResolver host_resolver;
824 MockErrorObserver* error_observer = new MockErrorObserver; 836 MockErrorObserver* error_observer = new MockErrorObserver;
825 837
826 scoped_ptr<ProxyResolver> resolver = CreateResolver( 838 scoped_ptr<ProxyResolver> resolver = CreateResolver(
827 nullptr, &host_resolver, make_scoped_ptr(error_observer), "dns.js"); 839 nullptr, &host_resolver, make_scoped_ptr(error_observer), "dns.js");
828 840
829 ProxyInfo proxy_info1; 841 ProxyInfo proxy_info1;
830 ProxyInfo proxy_info2; 842 ProxyInfo proxy_info2;
831 ProxyResolver::RequestHandle request1; 843 scoped_ptr<ProxyResolver::Request> request1;
832 ProxyResolver::RequestHandle request2; 844 scoped_ptr<ProxyResolver::Request> request2;
833 845
834 int rv = resolver->GetProxyForURL(GURL("http://foo/req1"), &proxy_info1, 846 int rv = resolver->GetProxyForURL(GURL("http://foo/req1"), &proxy_info1,
835 base::Bind(&CrashCallback), &request1, 847 base::Bind(&CrashCallback), &request1,
836 BoundNetLog()); 848 BoundNetLog());
837 849
838 EXPECT_EQ(ERR_IO_PENDING, rv); 850 EXPECT_EQ(ERR_IO_PENDING, rv);
839 851
840 host_resolver.WaitUntilRequestIsReceived(); 852 host_resolver.WaitUntilRequestIsReceived();
841 853
842 rv = resolver->GetProxyForURL(GURL("http://foo/req2"), &proxy_info2, 854 rv = resolver->GetProxyForURL(GURL("http://foo/req2"), &proxy_info2,
843 base::Bind(&CrashCallback), &request2, 855 base::Bind(&CrashCallback), &request2,
844 BoundNetLog()); 856 BoundNetLog());
845 857
846 EXPECT_EQ(ERR_IO_PENDING, rv); 858 EXPECT_EQ(ERR_IO_PENDING, rv);
847 859
848 host_resolver.WaitUntilRequestIsReceived(); 860 host_resolver.WaitUntilRequestIsReceived();
849 861
850 resolver->CancelRequest(request1); 862 request1.reset();
851 resolver->CancelRequest(request2); 863 request2.reset();
852 864
853 EXPECT_EQ(2, host_resolver.num_cancelled_requests()); 865 EXPECT_EQ(2, host_resolver.num_cancelled_requests());
854 866
855 // After leaving this scope, the ProxyResolver is destroyed. 867 // After leaving this scope, the ProxyResolver is destroyed.
856 // This should not cause any problems, as the outstanding work 868 // This should not cause any problems, as the outstanding work
857 // should have been cancelled. 869 // should have been cancelled.
858 } 870 }
859 871
860 void CancelRequestAndPause(ProxyResolver* resolver, 872 void CancelRequestAndPause(scoped_ptr<ProxyResolver::Request>* request) {
861 ProxyResolver::RequestHandle request) { 873 request->reset();
862 resolver->CancelRequest(request);
863 874
864 // Sleep for a little bit. This makes it more likely for the worker 875 // Sleep for a little bit. This makes it more likely for the worker
865 // thread to have returned from its call, and serves as a regression 876 // thread to have returned from its call, and serves as a regression
866 // test for http://crbug.com/173373. 877 // test for http://crbug.com/173373.
867 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(30)); 878 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(30));
868 } 879 }
869 880
870 // In non-blocking mode, the worker thread actually does block for 881 // In non-blocking mode, the worker thread actually does block for
871 // a short time to see if the result is in the DNS cache. Test 882 // a short time to see if the result is in the DNS cache. Test
872 // cancellation while the worker thread is waiting on this event. 883 // cancellation while the worker thread is waiting on this event.
873 TEST_F(ProxyResolverV8TracingWrapperTest, CancelWhileBlockedInNonBlockingDns) { 884 TEST_F(ProxyResolverV8TracingWrapperTest, CancelWhileBlockedInNonBlockingDns) {
874 BlockableHostResolver host_resolver; 885 BlockableHostResolver host_resolver;
875 MockErrorObserver* error_observer = new MockErrorObserver; 886 MockErrorObserver* error_observer = new MockErrorObserver;
876 887
877 scoped_ptr<ProxyResolver> resolver = CreateResolver( 888 scoped_ptr<ProxyResolver> resolver = CreateResolver(
878 nullptr, &host_resolver, make_scoped_ptr(error_observer), "dns.js"); 889 nullptr, &host_resolver, make_scoped_ptr(error_observer), "dns.js");
879 890
880 ProxyInfo proxy_info; 891 ProxyInfo proxy_info;
881 ProxyResolver::RequestHandle request; 892 scoped_ptr<ProxyResolver::Request> request;
882 893
883 int rv = resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info, 894 int rv = resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info,
884 base::Bind(&CrashCallback), &request, 895 base::Bind(&CrashCallback), &request,
885 BoundNetLog()); 896 BoundNetLog());
886 897
887 EXPECT_EQ(ERR_IO_PENDING, rv); 898 EXPECT_EQ(ERR_IO_PENDING, rv);
888 899
889 host_resolver.SetAction( 900 host_resolver.SetAction(base::Bind(CancelRequestAndPause, &request));
890 base::Bind(CancelRequestAndPause, resolver.get(), request));
891 901
892 host_resolver.WaitUntilRequestIsReceived(); 902 host_resolver.WaitUntilRequestIsReceived();
893 } 903 }
894 904
895 // Cancel the request while there is a pending DNS request, however before 905 // Cancel the request while there is a pending DNS request, however before
896 // the request is sent to the host resolver. 906 // the request is sent to the host resolver.
897 TEST_F(ProxyResolverV8TracingWrapperTest, CancelWhileBlockedInNonBlockingDns2) { 907 TEST_F(ProxyResolverV8TracingWrapperTest, CancelWhileBlockedInNonBlockingDns2) {
898 MockCachingHostResolver host_resolver; 908 MockCachingHostResolver host_resolver;
899 MockErrorObserver* error_observer = new MockErrorObserver; 909 MockErrorObserver* error_observer = new MockErrorObserver;
900 910
901 scoped_ptr<ProxyResolver> resolver = CreateResolver( 911 scoped_ptr<ProxyResolver> resolver = CreateResolver(
902 nullptr, &host_resolver, make_scoped_ptr(error_observer), "dns.js"); 912 nullptr, &host_resolver, make_scoped_ptr(error_observer), "dns.js");
903 913
904 ProxyInfo proxy_info; 914 ProxyInfo proxy_info;
905 ProxyResolver::RequestHandle request; 915 scoped_ptr<ProxyResolver::Request> request;
906 916
907 int rv = resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info, 917 int rv = resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info,
908 base::Bind(&CrashCallback), &request, 918 base::Bind(&CrashCallback), &request,
909 BoundNetLog()); 919 BoundNetLog());
910 920
911 EXPECT_EQ(ERR_IO_PENDING, rv); 921 EXPECT_EQ(ERR_IO_PENDING, rv);
912 922
913 // Wait a bit, so the DNS task has hopefully been posted. The test will 923 // Wait a bit, so the DNS task has hopefully been posted. The test will
914 // work whatever the delay is here, but it is most useful if the delay 924 // work whatever the delay is here, but it is most useful if the delay
915 // is large enough to allow a task to be posted back. 925 // is large enough to allow a task to be posted back.
916 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(10)); 926 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(10));
917 resolver->CancelRequest(request); 927 request.reset();
918 928
919 EXPECT_EQ(0u, host_resolver.num_resolve()); 929 EXPECT_EQ(0u, host_resolver.num_resolve());
920 } 930 }
921 931
922 TEST_F(ProxyResolverV8TracingWrapperTest, 932 TEST_F(ProxyResolverV8TracingWrapperTest,
923 CancelCreateResolverWhileOutstandingBlockingDns) { 933 CancelCreateResolverWhileOutstandingBlockingDns) {
924 BlockableHostResolver host_resolver; 934 BlockableHostResolver host_resolver;
925 MockErrorObserver* error_observer = new MockErrorObserver; 935 MockErrorObserver* error_observer = new MockErrorObserver;
926 936
927 ProxyResolverFactoryV8TracingWrapper factory( 937 ProxyResolverFactoryV8TracingWrapper factory(
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
994 1004
995 host_resolver.rules()->AddRule("host1", "182.111.0.222"); 1005 host_resolver.rules()->AddRule("host1", "182.111.0.222");
996 host_resolver.rules()->AddRule("host2", "111.33.44.55"); 1006 host_resolver.rules()->AddRule("host2", "111.33.44.55");
997 1007
998 scoped_ptr<ProxyResolver> resolver = CreateResolver( 1008 scoped_ptr<ProxyResolver> resolver = CreateResolver(
999 &log, &host_resolver, make_scoped_ptr(error_observer), "terminate.js"); 1009 &log, &host_resolver, make_scoped_ptr(error_observer), "terminate.js");
1000 1010
1001 TestCompletionCallback callback; 1011 TestCompletionCallback callback;
1002 ProxyInfo proxy_info; 1012 ProxyInfo proxy_info;
1003 1013
1014 scoped_ptr<ProxyResolver::Request> req;
1004 int rv = 1015 int rv =
1005 resolver->GetProxyForURL(GURL("http://foopy/req1"), &proxy_info, 1016 resolver->GetProxyForURL(GURL("http://foopy/req1"), &proxy_info,
1006 callback.callback(), NULL, request_log.bound()); 1017 callback.callback(), &req, request_log.bound());
1007 1018
1008 EXPECT_EQ(ERR_IO_PENDING, rv); 1019 EXPECT_EQ(ERR_IO_PENDING, rv);
1009 EXPECT_EQ(OK, callback.WaitForResult()); 1020 EXPECT_EQ(OK, callback.WaitForResult());
1010 1021
1011 // The test does 2 DNS resolutions. 1022 // The test does 2 DNS resolutions.
1012 EXPECT_EQ(2u, host_resolver.num_resolve()); 1023 EXPECT_EQ(2u, host_resolver.num_resolve());
1013 1024
1014 EXPECT_EQ("foopy:3", proxy_info.proxy_server().ToURI()); 1025 EXPECT_EQ("foopy:3", proxy_info.proxy_server().ToURI());
1015 1026
1016 // No errors. 1027 // No errors.
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
1074 1085
1075 ProxyResolver* resolver[] = { 1086 ProxyResolver* resolver[] = {
1076 resolver0.get(), resolver1.get(), resolver2.get(), resolver3.get(), 1087 resolver0.get(), resolver1.get(), resolver2.get(), resolver3.get(),
1077 }; 1088 };
1078 1089
1079 const size_t kNumResolvers = arraysize(resolver); 1090 const size_t kNumResolvers = arraysize(resolver);
1080 const size_t kNumIterations = 20; 1091 const size_t kNumIterations = 20;
1081 const size_t kNumResults = kNumResolvers * kNumIterations; 1092 const size_t kNumResults = kNumResolvers * kNumIterations;
1082 TestCompletionCallback callback[kNumResults]; 1093 TestCompletionCallback callback[kNumResults];
1083 ProxyInfo proxy_info[kNumResults]; 1094 ProxyInfo proxy_info[kNumResults];
1095 scoped_ptr<ProxyResolver::Request> request[kNumResults];
1084 1096
1085 for (size_t i = 0; i < kNumResults; ++i) { 1097 for (size_t i = 0; i < kNumResults; ++i) {
1086 size_t resolver_i = i % kNumResolvers; 1098 size_t resolver_i = i % kNumResolvers;
1087 int rv = resolver[resolver_i]->GetProxyForURL( 1099 int rv = resolver[resolver_i]->GetProxyForURL(
1088 GURL("http://foo/"), &proxy_info[i], callback[i].callback(), NULL, 1100 GURL("http://foo/"), &proxy_info[i], callback[i].callback(),
1089 BoundNetLog()); 1101 &request[i], BoundNetLog());
1090 EXPECT_EQ(ERR_IO_PENDING, rv); 1102 EXPECT_EQ(ERR_IO_PENDING, rv);
1091 } 1103 }
1092 1104
1093 // ------------------------ 1105 // ------------------------
1094 // Verify all of the results. 1106 // Verify all of the results.
1095 // ------------------------ 1107 // ------------------------
1096 1108
1097 const char* kExpectedForDnsJs = 1109 const char* kExpectedForDnsJs =
1098 "122.133.144.155-" // myIpAddress() 1110 "122.133.144.155-" // myIpAddress()
1099 "null-" // dnsResolve('') 1111 "null-" // dnsResolve('')
(...skipping 25 matching lines...) Expand all
1125 proxy_uri.substr(0, proxy_uri.find(':') + 1)); 1137 proxy_uri.substr(0, proxy_uri.find(':') + 1));
1126 } else { 1138 } else {
1127 NOTREACHED(); 1139 NOTREACHED();
1128 } 1140 }
1129 } 1141 }
1130 } 1142 }
1131 1143
1132 } // namespace 1144 } // namespace
1133 1145
1134 } // namespace net 1146 } // namespace net
OLDNEW
« no previous file with comments | « net/proxy/proxy_resolver_v8_tracing_wrapper.cc ('k') | net/proxy/proxy_resolver_winhttp.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698