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

Side by Side Diff: net/base/host_resolver_impl_unittest.cc

Issue 4192012: Convert implicit scoped_refptr constructor calls to explicit ones, part 1 (Closed) Base URL: http://git.chromium.org/git/chromium.git
Patch Set: fix presubmit Created 10 years, 1 month 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/base/host_resolver_impl.cc ('k') | net/base/listen_socket.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) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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/base/host_resolver_impl.h" 5 #include "net/base/host_resolver_impl.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/compiler_specific.h" 9 #include "base/compiler_specific.h"
10 #include "base/message_loop.h" 10 #include "base/message_loop.h"
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after
252 callback_called_ = true; 252 callback_called_ = true;
253 callback_result_ = result; 253 callback_result_ = result;
254 MessageLoop::current()->Quit(); 254 MessageLoop::current()->Quit();
255 } 255 }
256 }; 256 };
257 257
258 TEST_F(HostResolverImplTest, SynchronousLookup) { 258 TEST_F(HostResolverImplTest, SynchronousLookup) {
259 AddressList addrlist; 259 AddressList addrlist;
260 const int kPortnum = 80; 260 const int kPortnum = 80;
261 261
262 scoped_refptr<RuleBasedHostResolverProc> resolver_proc = 262 scoped_refptr<RuleBasedHostResolverProc> resolver_proc(
263 new RuleBasedHostResolverProc(NULL); 263 new RuleBasedHostResolverProc(NULL));
264 resolver_proc->AddRule("just.testing", "192.168.1.42"); 264 resolver_proc->AddRule("just.testing", "192.168.1.42");
265 265
266 scoped_ptr<HostResolver> host_resolver( 266 scoped_ptr<HostResolver> host_resolver(
267 CreateHostResolverImpl(resolver_proc)); 267 CreateHostResolverImpl(resolver_proc));
268 268
269 HostResolver::RequestInfo info(HostPortPair("just.testing", kPortnum)); 269 HostResolver::RequestInfo info(HostPortPair("just.testing", kPortnum));
270 CapturingBoundNetLog log(CapturingNetLog::kUnbounded); 270 CapturingBoundNetLog log(CapturingNetLog::kUnbounded);
271 int err = host_resolver->Resolve(info, &addrlist, NULL, NULL, log.bound()); 271 int err = host_resolver->Resolve(info, &addrlist, NULL, NULL, log.bound());
272 EXPECT_EQ(OK, err); 272 EXPECT_EQ(OK, err);
273 273
(...skipping 10 matching lines...) Expand all
284 const struct sockaddr* sa = ainfo->ai_addr; 284 const struct sockaddr* sa = ainfo->ai_addr;
285 const struct sockaddr_in* sa_in = (const struct sockaddr_in*) sa; 285 const struct sockaddr_in* sa_in = (const struct sockaddr_in*) sa;
286 EXPECT_TRUE(htons(kPortnum) == sa_in->sin_port); 286 EXPECT_TRUE(htons(kPortnum) == sa_in->sin_port);
287 EXPECT_TRUE(htonl(0xc0a8012a) == sa_in->sin_addr.s_addr); 287 EXPECT_TRUE(htonl(0xc0a8012a) == sa_in->sin_addr.s_addr);
288 } 288 }
289 289
290 TEST_F(HostResolverImplTest, AsynchronousLookup) { 290 TEST_F(HostResolverImplTest, AsynchronousLookup) {
291 AddressList addrlist; 291 AddressList addrlist;
292 const int kPortnum = 80; 292 const int kPortnum = 80;
293 293
294 scoped_refptr<RuleBasedHostResolverProc> resolver_proc = 294 scoped_refptr<RuleBasedHostResolverProc> resolver_proc(
295 new RuleBasedHostResolverProc(NULL); 295 new RuleBasedHostResolverProc(NULL));
296 resolver_proc->AddRule("just.testing", "192.168.1.42"); 296 resolver_proc->AddRule("just.testing", "192.168.1.42");
297 297
298 scoped_ptr<HostResolver> host_resolver( 298 scoped_ptr<HostResolver> host_resolver(
299 CreateHostResolverImpl(resolver_proc)); 299 CreateHostResolverImpl(resolver_proc));
300 300
301 HostResolver::RequestInfo info(HostPortPair("just.testing", kPortnum)); 301 HostResolver::RequestInfo info(HostPortPair("just.testing", kPortnum));
302 CapturingBoundNetLog log(CapturingNetLog::kUnbounded); 302 CapturingBoundNetLog log(CapturingNetLog::kUnbounded);
303 int err = host_resolver->Resolve(info, &addrlist, &callback_, NULL, 303 int err = host_resolver->Resolve(info, &addrlist, &callback_, NULL,
304 log.bound()); 304 log.bound());
305 EXPECT_EQ(ERR_IO_PENDING, err); 305 EXPECT_EQ(ERR_IO_PENDING, err);
(...skipping 15 matching lines...) Expand all
321 EXPECT_EQ(static_cast<addrinfo*>(NULL), ainfo->ai_next); 321 EXPECT_EQ(static_cast<addrinfo*>(NULL), ainfo->ai_next);
322 EXPECT_EQ(sizeof(struct sockaddr_in), ainfo->ai_addrlen); 322 EXPECT_EQ(sizeof(struct sockaddr_in), ainfo->ai_addrlen);
323 323
324 const struct sockaddr* sa = ainfo->ai_addr; 324 const struct sockaddr* sa = ainfo->ai_addr;
325 const struct sockaddr_in* sa_in = (const struct sockaddr_in*) sa; 325 const struct sockaddr_in* sa_in = (const struct sockaddr_in*) sa;
326 EXPECT_TRUE(htons(kPortnum) == sa_in->sin_port); 326 EXPECT_TRUE(htons(kPortnum) == sa_in->sin_port);
327 EXPECT_TRUE(htonl(0xc0a8012a) == sa_in->sin_addr.s_addr); 327 EXPECT_TRUE(htonl(0xc0a8012a) == sa_in->sin_addr.s_addr);
328 } 328 }
329 329
330 TEST_F(HostResolverImplTest, CanceledAsynchronousLookup) { 330 TEST_F(HostResolverImplTest, CanceledAsynchronousLookup) {
331 scoped_refptr<WaitingHostResolverProc> resolver_proc = 331 scoped_refptr<WaitingHostResolverProc> resolver_proc(
332 new WaitingHostResolverProc(NULL); 332 new WaitingHostResolverProc(NULL));
333 333
334 CapturingNetLog net_log(CapturingNetLog::kUnbounded); 334 CapturingNetLog net_log(CapturingNetLog::kUnbounded);
335 CapturingBoundNetLog log(CapturingNetLog::kUnbounded); 335 CapturingBoundNetLog log(CapturingNetLog::kUnbounded);
336 { 336 {
337 scoped_ptr<HostResolver> host_resolver( 337 scoped_ptr<HostResolver> host_resolver(
338 new HostResolverImpl(resolver_proc, 338 new HostResolverImpl(resolver_proc,
339 CreateDefaultCache(), 339 CreateDefaultCache(),
340 kMaxJobs, 340 kMaxJobs,
341 &net_log)); 341 &net_log));
342 AddressList addrlist; 342 AddressList addrlist;
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
383 net::ExpectLogContainsSomewhereAfter(net_log.entries(), pos + 1, 383 net::ExpectLogContainsSomewhereAfter(net_log.entries(), pos + 1,
384 net::NetLog::TYPE_HOST_RESOLVER_IMPL_JOB, 384 net::NetLog::TYPE_HOST_RESOLVER_IMPL_JOB,
385 net::NetLog::PHASE_END); 385 net::NetLog::PHASE_END);
386 386
387 EXPECT_FALSE(callback_called_); 387 EXPECT_FALSE(callback_called_);
388 } 388 }
389 389
390 TEST_F(HostResolverImplTest, NumericIPv4Address) { 390 TEST_F(HostResolverImplTest, NumericIPv4Address) {
391 // Stevens says dotted quads with AI_UNSPEC resolve to a single sockaddr_in. 391 // Stevens says dotted quads with AI_UNSPEC resolve to a single sockaddr_in.
392 392
393 scoped_refptr<RuleBasedHostResolverProc> resolver_proc = 393 scoped_refptr<RuleBasedHostResolverProc> resolver_proc(
394 new RuleBasedHostResolverProc(NULL); 394 new RuleBasedHostResolverProc(NULL));
395 resolver_proc->AllowDirectLookup("*"); 395 resolver_proc->AllowDirectLookup("*");
396 396
397 scoped_ptr<HostResolver> host_resolver( 397 scoped_ptr<HostResolver> host_resolver(
398 CreateHostResolverImpl(resolver_proc)); 398 CreateHostResolverImpl(resolver_proc));
399 AddressList addrlist; 399 AddressList addrlist;
400 const int kPortnum = 5555; 400 const int kPortnum = 5555;
401 HostResolver::RequestInfo info(HostPortPair("127.1.2.3", kPortnum)); 401 HostResolver::RequestInfo info(HostPortPair("127.1.2.3", kPortnum));
402 int err = host_resolver->Resolve(info, &addrlist, NULL, NULL, BoundNetLog()); 402 int err = host_resolver->Resolve(info, &addrlist, NULL, NULL, BoundNetLog());
403 EXPECT_EQ(OK, err); 403 EXPECT_EQ(OK, err);
404 404
405 const struct addrinfo* ainfo = addrlist.head(); 405 const struct addrinfo* ainfo = addrlist.head();
406 EXPECT_EQ(static_cast<addrinfo*>(NULL), ainfo->ai_next); 406 EXPECT_EQ(static_cast<addrinfo*>(NULL), ainfo->ai_next);
407 EXPECT_EQ(sizeof(struct sockaddr_in), ainfo->ai_addrlen); 407 EXPECT_EQ(sizeof(struct sockaddr_in), ainfo->ai_addrlen);
408 408
409 const struct sockaddr* sa = ainfo->ai_addr; 409 const struct sockaddr* sa = ainfo->ai_addr;
410 const struct sockaddr_in* sa_in = (const struct sockaddr_in*) sa; 410 const struct sockaddr_in* sa_in = (const struct sockaddr_in*) sa;
411 EXPECT_TRUE(htons(kPortnum) == sa_in->sin_port); 411 EXPECT_TRUE(htons(kPortnum) == sa_in->sin_port);
412 EXPECT_TRUE(htonl(0x7f010203) == sa_in->sin_addr.s_addr); 412 EXPECT_TRUE(htonl(0x7f010203) == sa_in->sin_addr.s_addr);
413 } 413 }
414 414
415 TEST_F(HostResolverImplTest, NumericIPv6Address) { 415 TEST_F(HostResolverImplTest, NumericIPv6Address) {
416 scoped_refptr<RuleBasedHostResolverProc> resolver_proc = 416 scoped_refptr<RuleBasedHostResolverProc> resolver_proc(
417 new RuleBasedHostResolverProc(NULL); 417 new RuleBasedHostResolverProc(NULL));
418 resolver_proc->AllowDirectLookup("*"); 418 resolver_proc->AllowDirectLookup("*");
419 419
420 // Resolve a plain IPv6 address. Don't worry about [brackets], because 420 // Resolve a plain IPv6 address. Don't worry about [brackets], because
421 // the caller should have removed them. 421 // the caller should have removed them.
422 scoped_ptr<HostResolver> host_resolver( 422 scoped_ptr<HostResolver> host_resolver(
423 CreateHostResolverImpl(resolver_proc)); 423 CreateHostResolverImpl(resolver_proc));
424 AddressList addrlist; 424 AddressList addrlist;
425 const int kPortnum = 5555; 425 const int kPortnum = 5555;
426 HostResolver::RequestInfo info(HostPortPair("2001:db8::1", kPortnum)); 426 HostResolver::RequestInfo info(HostPortPair("2001:db8::1", kPortnum));
427 int err = host_resolver->Resolve(info, &addrlist, NULL, NULL, BoundNetLog()); 427 int err = host_resolver->Resolve(info, &addrlist, NULL, NULL, BoundNetLog());
(...skipping 10 matching lines...) Expand all
438 const uint8 expect_addr[] = { 438 const uint8 expect_addr[] = {
439 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00, 439 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
440 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 440 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01
441 }; 441 };
442 for (int i = 0; i < 16; i++) { 442 for (int i = 0; i < 16; i++) {
443 EXPECT_EQ(expect_addr[i], sa_in6->sin6_addr.s6_addr[i]); 443 EXPECT_EQ(expect_addr[i], sa_in6->sin6_addr.s6_addr[i]);
444 } 444 }
445 } 445 }
446 446
447 TEST_F(HostResolverImplTest, EmptyHost) { 447 TEST_F(HostResolverImplTest, EmptyHost) {
448 scoped_refptr<RuleBasedHostResolverProc> resolver_proc = 448 scoped_refptr<RuleBasedHostResolverProc> resolver_proc(
449 new RuleBasedHostResolverProc(NULL); 449 new RuleBasedHostResolverProc(NULL));
450 resolver_proc->AllowDirectLookup("*"); 450 resolver_proc->AllowDirectLookup("*");
451 451
452 scoped_ptr<HostResolver> host_resolver( 452 scoped_ptr<HostResolver> host_resolver(
453 CreateHostResolverImpl(resolver_proc)); 453 CreateHostResolverImpl(resolver_proc));
454 AddressList addrlist; 454 AddressList addrlist;
455 const int kPortnum = 5555; 455 const int kPortnum = 5555;
456 HostResolver::RequestInfo info(HostPortPair("", kPortnum)); 456 HostResolver::RequestInfo info(HostPortPair("", kPortnum));
457 int err = host_resolver->Resolve(info, &addrlist, NULL, NULL, BoundNetLog()); 457 int err = host_resolver->Resolve(info, &addrlist, NULL, NULL, BoundNetLog());
458 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, err); 458 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, err);
459 } 459 }
460 460
461 TEST_F(HostResolverImplTest, LongHost) { 461 TEST_F(HostResolverImplTest, LongHost) {
462 scoped_refptr<RuleBasedHostResolverProc> resolver_proc = 462 scoped_refptr<RuleBasedHostResolverProc> resolver_proc(
463 new RuleBasedHostResolverProc(NULL); 463 new RuleBasedHostResolverProc(NULL));
464 resolver_proc->AllowDirectLookup("*"); 464 resolver_proc->AllowDirectLookup("*");
465 465
466 scoped_ptr<HostResolver> host_resolver( 466 scoped_ptr<HostResolver> host_resolver(
467 CreateHostResolverImpl(resolver_proc)); 467 CreateHostResolverImpl(resolver_proc));
468 AddressList addrlist; 468 AddressList addrlist;
469 const int kPortnum = 5555; 469 const int kPortnum = 5555;
470 std::string hostname(4097, 'a'); 470 std::string hostname(4097, 'a');
471 HostResolver::RequestInfo info(HostPortPair(hostname, kPortnum)); 471 HostResolver::RequestInfo info(HostPortPair(hostname, kPortnum));
472 int err = host_resolver->Resolve(info, &addrlist, NULL, NULL, BoundNetLog()); 472 int err = host_resolver->Resolve(info, &addrlist, NULL, NULL, BoundNetLog());
473 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, err); 473 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, err);
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
516 int count_a_; 516 int count_a_;
517 int count_b_; 517 int count_b_;
518 CapturingHostResolverProc* resolver_proc_; 518 CapturingHostResolverProc* resolver_proc_;
519 519
520 DISALLOW_COPY_AND_ASSIGN(DeDupeRequestsVerifier); 520 DISALLOW_COPY_AND_ASSIGN(DeDupeRequestsVerifier);
521 }; 521 };
522 522
523 TEST_F(HostResolverImplTest, DeDupeRequests) { 523 TEST_F(HostResolverImplTest, DeDupeRequests) {
524 // Use a capturing resolver_proc, since the verifier needs to know what calls 524 // Use a capturing resolver_proc, since the verifier needs to know what calls
525 // reached Resolve(). Also, the capturing resolver_proc is initially blocked. 525 // reached Resolve(). Also, the capturing resolver_proc is initially blocked.
526 scoped_refptr<CapturingHostResolverProc> resolver_proc = 526 scoped_refptr<CapturingHostResolverProc> resolver_proc(
527 new CapturingHostResolverProc(NULL); 527 new CapturingHostResolverProc(NULL));
528 528
529 scoped_ptr<HostResolver> host_resolver( 529 scoped_ptr<HostResolver> host_resolver(
530 CreateHostResolverImpl(resolver_proc)); 530 CreateHostResolverImpl(resolver_proc));
531 531
532 // The class will receive callbacks for when each resolve completes. It 532 // The class will receive callbacks for when each resolve completes. It
533 // checks that the right things happened. 533 // checks that the right things happened.
534 DeDupeRequestsVerifier verifier(resolver_proc.get()); 534 DeDupeRequestsVerifier verifier(resolver_proc.get());
535 535
536 // Start 5 requests, duplicating hosts "a" and "b". Since the resolver_proc is 536 // Start 5 requests, duplicating hosts "a" and "b". Since the resolver_proc is
537 // blocked, these should all pile up until we signal it. 537 // blocked, these should all pile up until we signal it.
(...skipping 29 matching lines...) Expand all
567 } 567 }
568 568
569 private: 569 private:
570 DISALLOW_COPY_AND_ASSIGN(CancelMultipleRequestsVerifier); 570 DISALLOW_COPY_AND_ASSIGN(CancelMultipleRequestsVerifier);
571 }; 571 };
572 572
573 TEST_F(HostResolverImplTest, CancelMultipleRequests) { 573 TEST_F(HostResolverImplTest, CancelMultipleRequests) {
574 // Use a capturing resolver_proc, since the verifier needs to know what calls 574 // Use a capturing resolver_proc, since the verifier needs to know what calls
575 // reached Resolver(). Also, the capturing resolver_proc is initially 575 // reached Resolver(). Also, the capturing resolver_proc is initially
576 // blocked. 576 // blocked.
577 scoped_refptr<CapturingHostResolverProc> resolver_proc = 577 scoped_refptr<CapturingHostResolverProc> resolver_proc(
578 new CapturingHostResolverProc(NULL); 578 new CapturingHostResolverProc(NULL));
579 579
580 scoped_ptr<HostResolver> host_resolver( 580 scoped_ptr<HostResolver> host_resolver(
581 CreateHostResolverImpl(resolver_proc)); 581 CreateHostResolverImpl(resolver_proc));
582 582
583 // The class will receive callbacks for when each resolve completes. It 583 // The class will receive callbacks for when each resolve completes. It
584 // checks that the right things happened. 584 // checks that the right things happened.
585 CancelMultipleRequestsVerifier verifier; 585 CancelMultipleRequestsVerifier verifier;
586 586
587 // Start 5 requests, duplicating hosts "a" and "b". Since the resolver_proc is 587 // Start 5 requests, duplicating hosts "a" and "b". Since the resolver_proc is
588 // blocked, these should all pile up until we signal it. 588 // blocked, these should all pile up until we signal it.
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
654 ResolveRequest* req_to_cancel1_; 654 ResolveRequest* req_to_cancel1_;
655 ResolveRequest* req_to_cancel2_; 655 ResolveRequest* req_to_cancel2_;
656 int num_completions_; 656 int num_completions_;
657 DISALLOW_COPY_AND_ASSIGN(CancelWithinCallbackVerifier); 657 DISALLOW_COPY_AND_ASSIGN(CancelWithinCallbackVerifier);
658 }; 658 };
659 659
660 TEST_F(HostResolverImplTest, CancelWithinCallback) { 660 TEST_F(HostResolverImplTest, CancelWithinCallback) {
661 // Use a capturing resolver_proc, since the verifier needs to know what calls 661 // Use a capturing resolver_proc, since the verifier needs to know what calls
662 // reached Resolver(). Also, the capturing resolver_proc is initially 662 // reached Resolver(). Also, the capturing resolver_proc is initially
663 // blocked. 663 // blocked.
664 scoped_refptr<CapturingHostResolverProc> resolver_proc = 664 scoped_refptr<CapturingHostResolverProc> resolver_proc(
665 new CapturingHostResolverProc(NULL); 665 new CapturingHostResolverProc(NULL));
666 666
667 scoped_ptr<HostResolver> host_resolver( 667 scoped_ptr<HostResolver> host_resolver(
668 CreateHostResolverImpl(resolver_proc)); 668 CreateHostResolverImpl(resolver_proc));
669 669
670 // The class will receive callbacks for when each resolve completes. It 670 // The class will receive callbacks for when each resolve completes. It
671 // checks that the right things happened. 671 // checks that the right things happened.
672 CancelWithinCallbackVerifier verifier; 672 CancelWithinCallbackVerifier verifier;
673 673
674 // Start 4 requests, duplicating hosts "a". Since the resolver_proc is 674 // Start 4 requests, duplicating hosts "a". Since the resolver_proc is
675 // blocked, these should all pile up until we signal it. 675 // blocked, these should all pile up until we signal it.
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
711 711
712 private: 712 private:
713 scoped_ptr<HostResolver> host_resolver_; 713 scoped_ptr<HostResolver> host_resolver_;
714 DISALLOW_COPY_AND_ASSIGN(DeleteWithinCallbackVerifier); 714 DISALLOW_COPY_AND_ASSIGN(DeleteWithinCallbackVerifier);
715 }; 715 };
716 716
717 TEST_F(HostResolverImplTest, DeleteWithinCallback) { 717 TEST_F(HostResolverImplTest, DeleteWithinCallback) {
718 // Use a capturing resolver_proc, since the verifier needs to know what calls 718 // Use a capturing resolver_proc, since the verifier needs to know what calls
719 // reached Resolver(). Also, the capturing resolver_proc is initially 719 // reached Resolver(). Also, the capturing resolver_proc is initially
720 // blocked. 720 // blocked.
721 scoped_refptr<CapturingHostResolverProc> resolver_proc = 721 scoped_refptr<CapturingHostResolverProc> resolver_proc(
722 new CapturingHostResolverProc(NULL); 722 new CapturingHostResolverProc(NULL));
723 723
724 // The class will receive callbacks for when each resolve completes. It 724 // The class will receive callbacks for when each resolve completes. It
725 // checks that the right things happened. Note that the verifier holds the 725 // checks that the right things happened. Note that the verifier holds the
726 // only reference to |host_resolver|, so it can delete it within callback. 726 // only reference to |host_resolver|, so it can delete it within callback.
727 HostResolver* host_resolver = 727 HostResolver* host_resolver =
728 CreateHostResolverImpl(resolver_proc); 728 CreateHostResolverImpl(resolver_proc);
729 DeleteWithinCallbackVerifier verifier(host_resolver); 729 DeleteWithinCallbackVerifier verifier(host_resolver);
730 730
731 // Start 4 requests, duplicating hosts "a". Since the resolver_proc is 731 // Start 4 requests, duplicating hosts "a". Since the resolver_proc is
732 // blocked, these should all pile up until we signal it. 732 // blocked, these should all pile up until we signal it.
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
766 private: 766 private:
767 int num_requests_; 767 int num_requests_;
768 scoped_ptr<ResolveRequest> final_request_; 768 scoped_ptr<ResolveRequest> final_request_;
769 DISALLOW_COPY_AND_ASSIGN(StartWithinCallbackVerifier); 769 DISALLOW_COPY_AND_ASSIGN(StartWithinCallbackVerifier);
770 }; 770 };
771 771
772 TEST_F(HostResolverImplTest, StartWithinCallback) { 772 TEST_F(HostResolverImplTest, StartWithinCallback) {
773 // Use a capturing resolver_proc, since the verifier needs to know what calls 773 // Use a capturing resolver_proc, since the verifier needs to know what calls
774 // reached Resolver(). Also, the capturing resolver_proc is initially 774 // reached Resolver(). Also, the capturing resolver_proc is initially
775 // blocked. 775 // blocked.
776 scoped_refptr<CapturingHostResolverProc> resolver_proc = 776 scoped_refptr<CapturingHostResolverProc> resolver_proc(
777 new CapturingHostResolverProc(NULL); 777 new CapturingHostResolverProc(NULL));
778 778
779 // Turn off caching for this host resolver. 779 // Turn off caching for this host resolver.
780 scoped_ptr<HostResolver> host_resolver( 780 scoped_ptr<HostResolver> host_resolver(
781 new HostResolverImpl(resolver_proc, NULL, kMaxJobs, NULL)); 781 new HostResolverImpl(resolver_proc, NULL, kMaxJobs, NULL));
782 782
783 // The class will receive callbacks for when each resolve completes. It 783 // The class will receive callbacks for when each resolve completes. It
784 // checks that the right things happened. 784 // checks that the right things happened.
785 StartWithinCallbackVerifier verifier; 785 StartWithinCallbackVerifier verifier;
786 786
787 // Start 4 requests, duplicating hosts "a". Since the resolver_proc is 787 // Start 4 requests, duplicating hosts "a". Since the resolver_proc is
(...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after
1098 1098
1099 // Resolve "host1" again -- this time it won't be served from cache, so it 1099 // Resolve "host1" again -- this time it won't be served from cache, so it
1100 // will complete asynchronously. 1100 // will complete asynchronously.
1101 rv = host_resolver->Resolve(info1, &addrlist, &callback, NULL, BoundNetLog()); 1101 rv = host_resolver->Resolve(info1, &addrlist, &callback, NULL, BoundNetLog());
1102 ASSERT_EQ(ERR_IO_PENDING, rv); // Should complete asynchronously. 1102 ASSERT_EQ(ERR_IO_PENDING, rv); // Should complete asynchronously.
1103 EXPECT_EQ(OK, callback.WaitForResult()); 1103 EXPECT_EQ(OK, callback.WaitForResult());
1104 } 1104 }
1105 1105
1106 // Test that IP address changes send ERR_ABORTED to pending requests. 1106 // Test that IP address changes send ERR_ABORTED to pending requests.
1107 TEST_F(HostResolverImplTest, AbortOnIPAddressChanged) { 1107 TEST_F(HostResolverImplTest, AbortOnIPAddressChanged) {
1108 scoped_refptr<WaitingHostResolverProc> resolver_proc = 1108 scoped_refptr<WaitingHostResolverProc> resolver_proc(
1109 new WaitingHostResolverProc(NULL); 1109 new WaitingHostResolverProc(NULL));
1110 HostCache* cache = CreateDefaultCache(); 1110 HostCache* cache = CreateDefaultCache();
1111 scoped_ptr<HostResolver> host_resolver( 1111 scoped_ptr<HostResolver> host_resolver(
1112 new HostResolverImpl(resolver_proc, cache, kMaxJobs, NULL)); 1112 new HostResolverImpl(resolver_proc, cache, kMaxJobs, NULL));
1113 1113
1114 // Resolve "host1". 1114 // Resolve "host1".
1115 HostResolver::RequestInfo info(HostPortPair("host1", 70)); 1115 HostResolver::RequestInfo info(HostPortPair("host1", 70));
1116 TestCompletionCallback callback; 1116 TestCompletionCallback callback;
1117 AddressList addrlist; 1117 AddressList addrlist;
1118 int rv = host_resolver->Resolve(info, &addrlist, &callback, NULL, 1118 int rv = host_resolver->Resolve(info, &addrlist, &callback, NULL,
1119 BoundNetLog()); 1119 BoundNetLog());
1120 EXPECT_EQ(ERR_IO_PENDING, rv); 1120 EXPECT_EQ(ERR_IO_PENDING, rv);
1121 1121
1122 // Triggering an IP address change. 1122 // Triggering an IP address change.
1123 NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(); 1123 NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests();
1124 MessageLoop::current()->RunAllPending(); // Notification happens async. 1124 MessageLoop::current()->RunAllPending(); // Notification happens async.
1125 resolver_proc->Signal(); 1125 resolver_proc->Signal();
1126 1126
1127 EXPECT_EQ(ERR_ABORTED, callback.WaitForResult()); 1127 EXPECT_EQ(ERR_ABORTED, callback.WaitForResult());
1128 EXPECT_EQ(0u, cache->size()); 1128 EXPECT_EQ(0u, cache->size());
1129 } 1129 }
1130 1130
1131 // Obey pool constraints after IP address has changed. 1131 // Obey pool constraints after IP address has changed.
1132 TEST_F(HostResolverImplTest, ObeyPoolConstraintsAfterIPAddressChange) { 1132 TEST_F(HostResolverImplTest, ObeyPoolConstraintsAfterIPAddressChange) {
1133 scoped_refptr<WaitingHostResolverProc> resolver_proc = 1133 scoped_refptr<WaitingHostResolverProc> resolver_proc(
1134 new WaitingHostResolverProc(NULL); 1134 new WaitingHostResolverProc(NULL));
1135 scoped_ptr<MockHostResolver> host_resolver(new MockHostResolver()); 1135 scoped_ptr<MockHostResolver> host_resolver(new MockHostResolver());
1136 host_resolver->Reset(resolver_proc); 1136 host_resolver->Reset(resolver_proc);
1137 1137
1138 const size_t kMaxOutstandingJobs = 1u; 1138 const size_t kMaxOutstandingJobs = 1u;
1139 const size_t kMaxPendingRequests = 1000000u; // not relevant. 1139 const size_t kMaxPendingRequests = 1000000u; // not relevant.
1140 host_resolver->SetPoolConstraints(HostResolverImpl::POOL_NORMAL, 1140 host_resolver->SetPoolConstraints(HostResolverImpl::POOL_NORMAL,
1141 kMaxOutstandingJobs, 1141 kMaxOutstandingJobs,
1142 kMaxPendingRequests); 1142 kMaxPendingRequests);
1143 1143
1144 // Resolve "host1". 1144 // Resolve "host1".
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
1195 1195
1196 private: 1196 private:
1197 MockHostResolver* const host_resolver_; 1197 MockHostResolver* const host_resolver_;
1198 const HostResolver::RequestInfo info_; 1198 const HostResolver::RequestInfo info_;
1199 AddressList addrlist_; 1199 AddressList addrlist_;
1200 TestCompletionCallback callback_; 1200 TestCompletionCallback callback_;
1201 TestCompletionCallback nested_callback_; 1201 TestCompletionCallback nested_callback_;
1202 }; 1202 };
1203 1203
1204 TEST_F(HostResolverImplTest, OnlyAbortExistingRequestsOnIPAddressChange) { 1204 TEST_F(HostResolverImplTest, OnlyAbortExistingRequestsOnIPAddressChange) {
1205 scoped_refptr<WaitingHostResolverProc> resolver_proc = 1205 scoped_refptr<WaitingHostResolverProc> resolver_proc(
1206 new WaitingHostResolverProc(NULL); 1206 new WaitingHostResolverProc(NULL));
1207 scoped_ptr<MockHostResolver> host_resolver(new MockHostResolver()); 1207 scoped_ptr<MockHostResolver> host_resolver(new MockHostResolver());
1208 host_resolver->Reset(resolver_proc); 1208 host_resolver->Reset(resolver_proc);
1209 1209
1210 // Resolve "host1". 1210 // Resolve "host1".
1211 HostResolver::RequestInfo info(HostPortPair("host1", 70)); 1211 HostResolver::RequestInfo info(HostPortPair("host1", 70));
1212 ResolveWithinCallback callback(host_resolver.get(), info); 1212 ResolveWithinCallback callback(host_resolver.get(), info);
1213 AddressList addrlist; 1213 AddressList addrlist;
1214 int rv = host_resolver->Resolve(info, &addrlist, &callback, NULL, 1214 int rv = host_resolver->Resolve(info, &addrlist, &callback, NULL,
1215 BoundNetLog()); 1215 BoundNetLog());
1216 EXPECT_EQ(ERR_IO_PENDING, rv); 1216 EXPECT_EQ(ERR_IO_PENDING, rv);
1217 1217
1218 // Triggering an IP address change. 1218 // Triggering an IP address change.
1219 NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(); 1219 NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests();
1220 MessageLoop::current()->RunAllPending(); // Notification happens async. 1220 MessageLoop::current()->RunAllPending(); // Notification happens async.
1221 1221
1222 EXPECT_EQ(ERR_ABORTED, callback.WaitForResult()); 1222 EXPECT_EQ(ERR_ABORTED, callback.WaitForResult());
1223 resolver_proc->Signal(); 1223 resolver_proc->Signal();
1224 EXPECT_EQ(OK, callback.WaitForNestedResult()); 1224 EXPECT_EQ(OK, callback.WaitForNestedResult());
1225 } 1225 }
1226 1226
1227 // Tests that when the maximum threads is set to 1, requests are dequeued 1227 // Tests that when the maximum threads is set to 1, requests are dequeued
1228 // in order of priority. 1228 // in order of priority.
1229 TEST_F(HostResolverImplTest, HigherPriorityRequestsStartedFirst) { 1229 TEST_F(HostResolverImplTest, HigherPriorityRequestsStartedFirst) {
1230 scoped_refptr<CapturingHostResolverProc> resolver_proc = 1230 scoped_refptr<CapturingHostResolverProc> resolver_proc(
1231 new CapturingHostResolverProc(NULL); 1231 new CapturingHostResolverProc(NULL));
1232 1232
1233 // This HostResolverImpl will only allow 1 outstanding resolve at a time. 1233 // This HostResolverImpl will only allow 1 outstanding resolve at a time.
1234 size_t kMaxJobs = 1u; 1234 size_t kMaxJobs = 1u;
1235 scoped_ptr<HostResolver> host_resolver( 1235 scoped_ptr<HostResolver> host_resolver(
1236 new HostResolverImpl(resolver_proc, CreateDefaultCache(), kMaxJobs, 1236 new HostResolverImpl(resolver_proc, CreateDefaultCache(), kMaxJobs,
1237 NULL)); 1237 NULL));
1238 1238
1239 CapturingObserver observer; 1239 CapturingObserver observer;
1240 host_resolver->AddObserver(&observer); 1240 host_resolver->AddObserver(&observer);
1241 1241
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
1305 EXPECT_EQ(LOW, observer.finish_log[3].info.priority()); 1305 EXPECT_EQ(LOW, observer.finish_log[3].info.priority());
1306 1306
1307 EXPECT_EQ("req1", observer.finish_log[4].info.hostname()); 1307 EXPECT_EQ("req1", observer.finish_log[4].info.hostname());
1308 EXPECT_EQ("req2", observer.finish_log[5].info.hostname()); 1308 EXPECT_EQ("req2", observer.finish_log[5].info.hostname());
1309 EXPECT_EQ("req3", observer.finish_log[6].info.hostname()); 1309 EXPECT_EQ("req3", observer.finish_log[6].info.hostname());
1310 EXPECT_EQ("req6", observer.finish_log[7].info.hostname()); 1310 EXPECT_EQ("req6", observer.finish_log[7].info.hostname());
1311 } 1311 }
1312 1312
1313 // Try cancelling a request which has not been attached to a job yet. 1313 // Try cancelling a request which has not been attached to a job yet.
1314 TEST_F(HostResolverImplTest, CancelPendingRequest) { 1314 TEST_F(HostResolverImplTest, CancelPendingRequest) {
1315 scoped_refptr<CapturingHostResolverProc> resolver_proc = 1315 scoped_refptr<CapturingHostResolverProc> resolver_proc(
1316 new CapturingHostResolverProc(NULL); 1316 new CapturingHostResolverProc(NULL));
1317 1317
1318 // This HostResolverImpl will only allow 1 outstanding resolve at a time. 1318 // This HostResolverImpl will only allow 1 outstanding resolve at a time.
1319 const size_t kMaxJobs = 1u; 1319 const size_t kMaxJobs = 1u;
1320 scoped_ptr<HostResolver> host_resolver( 1320 scoped_ptr<HostResolver> host_resolver(
1321 new HostResolverImpl(resolver_proc, CreateDefaultCache(), kMaxJobs, 1321 new HostResolverImpl(resolver_proc, CreateDefaultCache(), kMaxJobs,
1322 NULL)); 1322 NULL));
1323 1323
1324 // Note that at this point the CapturingHostResolverProc is blocked, so any 1324 // Note that at this point the CapturingHostResolverProc is blocked, so any
1325 // requests we make will not complete. 1325 // requests we make will not complete.
1326 1326
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1368 ASSERT_EQ(4u, capture_list.size()); 1368 ASSERT_EQ(4u, capture_list.size());
1369 1369
1370 EXPECT_EQ("req0", capture_list[0].hostname); 1370 EXPECT_EQ("req0", capture_list[0].hostname);
1371 EXPECT_EQ("req2", capture_list[1].hostname); 1371 EXPECT_EQ("req2", capture_list[1].hostname);
1372 EXPECT_EQ("req6", capture_list[2].hostname); 1372 EXPECT_EQ("req6", capture_list[2].hostname);
1373 EXPECT_EQ("req3", capture_list[3].hostname); 1373 EXPECT_EQ("req3", capture_list[3].hostname);
1374 } 1374 }
1375 1375
1376 // Test that when too many requests are enqueued, old ones start to be aborted. 1376 // Test that when too many requests are enqueued, old ones start to be aborted.
1377 TEST_F(HostResolverImplTest, QueueOverflow) { 1377 TEST_F(HostResolverImplTest, QueueOverflow) {
1378 scoped_refptr<CapturingHostResolverProc> resolver_proc = 1378 scoped_refptr<CapturingHostResolverProc> resolver_proc(
1379 new CapturingHostResolverProc(NULL); 1379 new CapturingHostResolverProc(NULL));
1380 1380
1381 // This HostResolverImpl will only allow 1 outstanding resolve at a time. 1381 // This HostResolverImpl will only allow 1 outstanding resolve at a time.
1382 const size_t kMaxOutstandingJobs = 1u; 1382 const size_t kMaxOutstandingJobs = 1u;
1383 scoped_ptr<HostResolverImpl> host_resolver(new HostResolverImpl( 1383 scoped_ptr<HostResolverImpl> host_resolver(new HostResolverImpl(
1384 resolver_proc, CreateDefaultCache(), kMaxOutstandingJobs, NULL)); 1384 resolver_proc, CreateDefaultCache(), kMaxOutstandingJobs, NULL));
1385 1385
1386 // Only allow up to 3 requests to be enqueued at a time. 1386 // Only allow up to 3 requests to be enqueued at a time.
1387 const size_t kMaxPendingRequests = 3u; 1387 const size_t kMaxPendingRequests = 3u;
1388 host_resolver->SetPoolConstraints(HostResolverImpl::POOL_NORMAL, 1388 host_resolver->SetPoolConstraints(HostResolverImpl::POOL_NORMAL,
1389 kMaxOutstandingJobs, 1389 kMaxOutstandingJobs,
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
1446 1446
1447 EXPECT_EQ("req0", capture_list[0].hostname); 1447 EXPECT_EQ("req0", capture_list[0].hostname);
1448 EXPECT_EQ("req1", capture_list[1].hostname); 1448 EXPECT_EQ("req1", capture_list[1].hostname);
1449 EXPECT_EQ("req6", capture_list[2].hostname); 1449 EXPECT_EQ("req6", capture_list[2].hostname);
1450 EXPECT_EQ("req7", capture_list[3].hostname); 1450 EXPECT_EQ("req7", capture_list[3].hostname);
1451 } 1451 }
1452 1452
1453 // Tests that after changing the default AddressFamily to IPV4, requests 1453 // Tests that after changing the default AddressFamily to IPV4, requests
1454 // with UNSPECIFIED address family map to IPV4. 1454 // with UNSPECIFIED address family map to IPV4.
1455 TEST_F(HostResolverImplTest, SetDefaultAddressFamily_IPv4) { 1455 TEST_F(HostResolverImplTest, SetDefaultAddressFamily_IPv4) {
1456 scoped_refptr<CapturingHostResolverProc> resolver_proc = 1456 scoped_refptr<CapturingHostResolverProc> resolver_proc(
1457 new CapturingHostResolverProc(new EchoingHostResolverProc); 1457 new CapturingHostResolverProc(new EchoingHostResolverProc));
1458 1458
1459 // This HostResolverImpl will only allow 1 outstanding resolve at a time. 1459 // This HostResolverImpl will only allow 1 outstanding resolve at a time.
1460 const size_t kMaxOutstandingJobs = 1u; 1460 const size_t kMaxOutstandingJobs = 1u;
1461 scoped_ptr<HostResolverImpl> host_resolver(new HostResolverImpl( 1461 scoped_ptr<HostResolverImpl> host_resolver(new HostResolverImpl(
1462 resolver_proc, CreateDefaultCache(), kMaxOutstandingJobs, NULL)); 1462 resolver_proc, CreateDefaultCache(), kMaxOutstandingJobs, NULL));
1463 1463
1464 host_resolver->SetDefaultAddressFamily(ADDRESS_FAMILY_IPV4); 1464 host_resolver->SetDefaultAddressFamily(ADDRESS_FAMILY_IPV4);
1465 1465
1466 // Note that at this point the CapturingHostResolverProc is blocked, so any 1466 // Note that at this point the CapturingHostResolverProc is blocked, so any
1467 // requests we make will not complete. 1467 // requests we make will not complete.
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
1514 // z = value of address family 1514 // z = value of address family
1515 EXPECT_EQ("192.2.104.1", NetAddressToString(addrlist[0].head())); 1515 EXPECT_EQ("192.2.104.1", NetAddressToString(addrlist[0].head()));
1516 EXPECT_EQ("192.2.104.1", NetAddressToString(addrlist[1].head())); 1516 EXPECT_EQ("192.2.104.1", NetAddressToString(addrlist[1].head()));
1517 EXPECT_EQ("192.2.104.2", NetAddressToString(addrlist[2].head())); 1517 EXPECT_EQ("192.2.104.2", NetAddressToString(addrlist[2].head()));
1518 } 1518 }
1519 1519
1520 // This is the exact same test as SetDefaultAddressFamily_IPv4, except the order 1520 // This is the exact same test as SetDefaultAddressFamily_IPv4, except the order
1521 // of requests 0 and 1 is flipped, and the default is set to IPv6 in place of 1521 // of requests 0 and 1 is flipped, and the default is set to IPv6 in place of
1522 // IPv4. 1522 // IPv4.
1523 TEST_F(HostResolverImplTest, SetDefaultAddressFamily_IPv6) { 1523 TEST_F(HostResolverImplTest, SetDefaultAddressFamily_IPv6) {
1524 scoped_refptr<CapturingHostResolverProc> resolver_proc = 1524 scoped_refptr<CapturingHostResolverProc> resolver_proc(
1525 new CapturingHostResolverProc(new EchoingHostResolverProc); 1525 new CapturingHostResolverProc(new EchoingHostResolverProc));
1526 1526
1527 // This HostResolverImpl will only allow 1 outstanding resolve at a time. 1527 // This HostResolverImpl will only allow 1 outstanding resolve at a time.
1528 const size_t kMaxOutstandingJobs = 1u; 1528 const size_t kMaxOutstandingJobs = 1u;
1529 scoped_ptr<HostResolverImpl> host_resolver(new HostResolverImpl( 1529 scoped_ptr<HostResolverImpl> host_resolver(new HostResolverImpl(
1530 resolver_proc, CreateDefaultCache(), kMaxOutstandingJobs, NULL)); 1530 resolver_proc, CreateDefaultCache(), kMaxOutstandingJobs, NULL));
1531 1531
1532 host_resolver->SetDefaultAddressFamily(ADDRESS_FAMILY_IPV6); 1532 host_resolver->SetDefaultAddressFamily(ADDRESS_FAMILY_IPV6);
1533 1533
1534 // Note that at this point the CapturingHostResolverProc is blocked, so any 1534 // Note that at this point the CapturingHostResolverProc is blocked, so any
1535 // requests we make will not complete. 1535 // requests we make will not complete.
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
1581 // y = ASCII value of hostname[0] 1581 // y = ASCII value of hostname[0]
1582 // z = value of address family 1582 // z = value of address family
1583 EXPECT_EQ("192.2.104.2", NetAddressToString(addrlist[0].head())); 1583 EXPECT_EQ("192.2.104.2", NetAddressToString(addrlist[0].head()));
1584 EXPECT_EQ("192.2.104.2", NetAddressToString(addrlist[1].head())); 1584 EXPECT_EQ("192.2.104.2", NetAddressToString(addrlist[1].head()));
1585 EXPECT_EQ("192.2.104.1", NetAddressToString(addrlist[2].head())); 1585 EXPECT_EQ("192.2.104.1", NetAddressToString(addrlist[2].head()));
1586 } 1586 }
1587 1587
1588 // This tests that the default address family is respected for synchronous 1588 // This tests that the default address family is respected for synchronous
1589 // resolutions. 1589 // resolutions.
1590 TEST_F(HostResolverImplTest, SetDefaultAddressFamily_Synchronous) { 1590 TEST_F(HostResolverImplTest, SetDefaultAddressFamily_Synchronous) {
1591 scoped_refptr<CapturingHostResolverProc> resolver_proc = 1591 scoped_refptr<CapturingHostResolverProc> resolver_proc(
1592 new CapturingHostResolverProc(new EchoingHostResolverProc); 1592 new CapturingHostResolverProc(new EchoingHostResolverProc));
1593 1593
1594 const size_t kMaxOutstandingJobs = 10u; 1594 const size_t kMaxOutstandingJobs = 10u;
1595 scoped_ptr<HostResolverImpl> host_resolver(new HostResolverImpl( 1595 scoped_ptr<HostResolverImpl> host_resolver(new HostResolverImpl(
1596 resolver_proc, CreateDefaultCache(), kMaxOutstandingJobs, NULL)); 1596 resolver_proc, CreateDefaultCache(), kMaxOutstandingJobs, NULL));
1597 1597
1598 host_resolver->SetDefaultAddressFamily(ADDRESS_FAMILY_IPV4); 1598 host_resolver->SetDefaultAddressFamily(ADDRESS_FAMILY_IPV4);
1599 1599
1600 // Unblock the resolver thread so the requests can run. 1600 // Unblock the resolver thread so the requests can run.
1601 resolver_proc->Signal(); 1601 resolver_proc->Signal();
1602 1602
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
1638 EXPECT_EQ("192.1.98.2", NetAddressToString(addrlist[1].head())); 1638 EXPECT_EQ("192.1.98.2", NetAddressToString(addrlist[1].head()));
1639 EXPECT_EQ("192.1.98.1", NetAddressToString(addrlist[2].head())); 1639 EXPECT_EQ("192.1.98.1", NetAddressToString(addrlist[2].head()));
1640 EXPECT_EQ("192.1.98.1", NetAddressToString(addrlist[3].head())); 1640 EXPECT_EQ("192.1.98.1", NetAddressToString(addrlist[3].head()));
1641 } 1641 }
1642 1642
1643 // TODO(cbentzel): Test a mix of requests with different HostResolverFlags. 1643 // TODO(cbentzel): Test a mix of requests with different HostResolverFlags.
1644 1644
1645 } // namespace 1645 } // namespace
1646 1646
1647 } // namespace net 1647 } // namespace net
OLDNEW
« no previous file with comments | « net/base/host_resolver_impl.cc ('k') | net/base/listen_socket.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698