| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/http/http_server_properties_impl.h" | 5 #include "net/http/http_server_properties_impl.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 #include <string> | 8 #include <string> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| 11 #include "base/logging.h" | 11 #include "base/logging.h" |
| 12 #include "base/test/test_mock_time_task_runner.h" | 12 #include "base/test/test_mock_time_task_runner.h" |
| 13 #include "base/values.h" | 13 #include "base/values.h" |
| 14 #include "net/base/host_port_pair.h" | 14 #include "net/base/host_port_pair.h" |
| 15 #include "net/base/ip_address.h" | 15 #include "net/base/ip_address.h" |
| 16 #include "net/http/http_network_session.h" |
| 16 #include "testing/gtest/include/gtest/gtest.h" | 17 #include "testing/gtest/include/gtest/gtest.h" |
| 17 #include "url/gurl.h" | 18 #include "url/gurl.h" |
| 18 | 19 |
| 19 namespace base { | 20 namespace base { |
| 20 class ListValue; | 21 class ListValue; |
| 21 } | 22 } |
| 22 | 23 |
| 23 namespace net { | 24 namespace net { |
| 24 | 25 |
| 25 const base::TimeDelta BROKEN_ALT_SVC_EXPIRE_DELAYS[10] = { | 26 const base::TimeDelta BROKEN_ALT_SVC_EXPIRE_DELAYS[10] = { |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 71 bool HasAlternativeService(const url::SchemeHostPort& origin) { | 72 bool HasAlternativeService(const url::SchemeHostPort& origin) { |
| 72 const AlternativeServiceInfoVector alternative_service_info_vector = | 73 const AlternativeServiceInfoVector alternative_service_info_vector = |
| 73 impl_.GetAlternativeServiceInfos(origin); | 74 impl_.GetAlternativeServiceInfos(origin); |
| 74 return !alternative_service_info_vector.empty(); | 75 return !alternative_service_info_vector.empty(); |
| 75 } | 76 } |
| 76 | 77 |
| 77 bool SetAlternativeService(const url::SchemeHostPort& origin, | 78 bool SetAlternativeService(const url::SchemeHostPort& origin, |
| 78 const AlternativeService& alternative_service) { | 79 const AlternativeService& alternative_service) { |
| 79 const base::Time expiration = | 80 const base::Time expiration = |
| 80 base::Time::Now() + base::TimeDelta::FromDays(1); | 81 base::Time::Now() + base::TimeDelta::FromDays(1); |
| 81 return impl_.SetAlternativeService(origin, alternative_service, expiration); | 82 if (alternative_service.protocol == kProtoQUIC) { |
| 83 return impl_.SetQuicAlternativeService( |
| 84 origin, alternative_service, expiration, |
| 85 HttpNetworkSession::Params().quic_supported_versions); |
| 86 } else { |
| 87 return impl_.SetHttp2AlternativeService(origin, alternative_service, |
| 88 expiration); |
| 89 } |
| 82 } | 90 } |
| 83 | 91 |
| 84 void MarkBrokenAndLetExpireAlternativeServiceNTimes( | 92 void MarkBrokenAndLetExpireAlternativeServiceNTimes( |
| 85 const AlternativeService& alternative_service, | 93 const AlternativeService& alternative_service, |
| 86 int num_times) {} | 94 int num_times) {} |
| 87 | 95 |
| 88 scoped_refptr<base::TestMockTimeTaskRunner> test_task_runner_; | 96 scoped_refptr<base::TestMockTimeTaskRunner> test_task_runner_; |
| 89 | 97 |
| 90 std::unique_ptr<base::TickClock> broken_services_clock_; | 98 std::unique_ptr<base::TickClock> broken_services_clock_; |
| 91 HttpServerPropertiesImpl impl_; | 99 HttpServerPropertiesImpl impl_; |
| (...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 382 alternative_service_info_vector[0].alternative_service()); | 390 alternative_service_info_vector[0].alternative_service()); |
| 383 | 391 |
| 384 impl_.Clear(); | 392 impl_.Clear(); |
| 385 EXPECT_FALSE(HasAlternativeService(test_server)); | 393 EXPECT_FALSE(HasAlternativeService(test_server)); |
| 386 } | 394 } |
| 387 | 395 |
| 388 TEST_F(AlternateProtocolServerPropertiesTest, ExcludeOrigin) { | 396 TEST_F(AlternateProtocolServerPropertiesTest, ExcludeOrigin) { |
| 389 AlternativeServiceInfoVector alternative_service_info_vector; | 397 AlternativeServiceInfoVector alternative_service_info_vector; |
| 390 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); | 398 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
| 391 // Same hostname, same port, TCP: should be ignored. | 399 // Same hostname, same port, TCP: should be ignored. |
| 392 AlternativeServiceInfo alternative_service_info1(kProtoHTTP2, "foo", 443, | 400 AlternativeServiceInfo alternative_service_info1 = |
| 393 expiration); | 401 AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( |
| 402 AlternativeService(kProtoHTTP2, "foo", 443), expiration); |
| 394 alternative_service_info_vector.push_back(alternative_service_info1); | 403 alternative_service_info_vector.push_back(alternative_service_info1); |
| 395 // Different hostname: GetAlternativeServiceInfos should return this one. | 404 // Different hostname: GetAlternativeServiceInfos should return this one. |
| 396 AlternativeServiceInfo alternative_service_info2(kProtoHTTP2, "bar", 443, | 405 AlternativeServiceInfo alternative_service_info2 = |
| 397 expiration); | 406 AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( |
| 407 AlternativeService(kProtoHTTP2, "bar", 443), expiration); |
| 398 alternative_service_info_vector.push_back(alternative_service_info2); | 408 alternative_service_info_vector.push_back(alternative_service_info2); |
| 399 // Different port: GetAlternativeServiceInfos should return this one too. | 409 // Different port: GetAlternativeServiceInfos should return this one too. |
| 400 AlternativeServiceInfo alternative_service_info3(kProtoHTTP2, "foo", 80, | 410 AlternativeServiceInfo alternative_service_info3 = |
| 401 expiration); | 411 AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( |
| 412 AlternativeService(kProtoHTTP2, "foo", 80), expiration); |
| 402 alternative_service_info_vector.push_back(alternative_service_info3); | 413 alternative_service_info_vector.push_back(alternative_service_info3); |
| 403 // QUIC: GetAlternativeServices should return this one too. | 414 // QUIC: GetAlternativeServices should return this one too. |
| 404 AlternativeServiceInfo alternative_service_info4(kProtoQUIC, "foo", 443, | 415 AlternativeServiceInfo alternative_service_info4 = |
| 405 expiration); | 416 AlternativeServiceInfo::CreateQuicAlternativeServiceInfo( |
| 417 AlternativeService(kProtoQUIC, "foo", 443), expiration, |
| 418 HttpNetworkSession::Params().quic_supported_versions); |
| 406 alternative_service_info_vector.push_back(alternative_service_info4); | 419 alternative_service_info_vector.push_back(alternative_service_info4); |
| 407 | 420 |
| 408 url::SchemeHostPort test_server("https", "foo", 443); | 421 url::SchemeHostPort test_server("https", "foo", 443); |
| 409 impl_.SetAlternativeServices(test_server, alternative_service_info_vector); | 422 impl_.SetAlternativeServices(test_server, alternative_service_info_vector); |
| 410 | 423 |
| 411 const AlternativeServiceInfoVector alternative_service_info_vector2 = | 424 const AlternativeServiceInfoVector alternative_service_info_vector2 = |
| 412 impl_.GetAlternativeServiceInfos(test_server); | 425 impl_.GetAlternativeServiceInfos(test_server); |
| 413 ASSERT_EQ(3u, alternative_service_info_vector2.size()); | 426 ASSERT_EQ(3u, alternative_service_info_vector2.size()); |
| 414 EXPECT_EQ(alternative_service_info2, alternative_service_info_vector2[0]); | 427 EXPECT_EQ(alternative_service_info2, alternative_service_info_vector2[0]); |
| 415 EXPECT_EQ(alternative_service_info3, alternative_service_info_vector2[1]); | 428 EXPECT_EQ(alternative_service_info3, alternative_service_info_vector2[1]); |
| 416 EXPECT_EQ(alternative_service_info4, alternative_service_info_vector2[2]); | 429 EXPECT_EQ(alternative_service_info4, alternative_service_info_vector2[2]); |
| 417 } | 430 } |
| 418 | 431 |
| 419 TEST_F(AlternateProtocolServerPropertiesTest, Set) { | 432 TEST_F(AlternateProtocolServerPropertiesTest, Set) { |
| 420 // |test_server1| has an alternative service, which will not be | 433 // |test_server1| has an alternative service, which will not be |
| 421 // affected by SetAlternativeServiceServers(), because | 434 // affected by SetAlternativeServiceServers(), because |
| 422 // |alternative_service_map| does not have an entry for | 435 // |alternative_service_map| does not have an entry for |
| 423 // |test_server1|. | 436 // |test_server1|. |
| 424 url::SchemeHostPort test_server1("http", "foo1", 80); | 437 url::SchemeHostPort test_server1("http", "foo1", 80); |
| 425 const AlternativeService alternative_service1(kProtoHTTP2, "bar1", 443); | 438 const AlternativeService alternative_service1(kProtoHTTP2, "bar1", 443); |
| 426 const base::Time now = base::Time::Now(); | 439 const base::Time now = base::Time::Now(); |
| 427 base::Time expiration1 = now + base::TimeDelta::FromDays(1); | 440 base::Time expiration1 = now + base::TimeDelta::FromDays(1); |
| 428 // 1st entry in the memory. | 441 // 1st entry in the memory. |
| 429 impl_.SetAlternativeService(test_server1, alternative_service1, expiration1); | 442 impl_.SetHttp2AlternativeService(test_server1, alternative_service1, |
| 443 expiration1); |
| 430 | 444 |
| 431 // |test_server2| has an alternative service, which will be | 445 // |test_server2| has an alternative service, which will be |
| 432 // overwritten by SetAlternativeServiceServers(), because | 446 // overwritten by SetAlternativeServiceServers(), because |
| 433 // |alternative_service_map| has an entry for | 447 // |alternative_service_map| has an entry for |
| 434 // |test_server2|. | 448 // |test_server2|. |
| 435 AlternativeServiceInfoVector alternative_service_info_vector; | 449 AlternativeServiceInfoVector alternative_service_info_vector; |
| 436 const AlternativeService alternative_service2(kProtoHTTP2, "bar2", 443); | 450 const AlternativeService alternative_service2(kProtoHTTP2, "bar2", 443); |
| 437 base::Time expiration2 = now + base::TimeDelta::FromDays(2); | 451 base::Time expiration2 = now + base::TimeDelta::FromDays(2); |
| 438 alternative_service_info_vector.push_back( | 452 alternative_service_info_vector.push_back( |
| 439 AlternativeServiceInfo(alternative_service2, expiration2)); | 453 AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( |
| 454 alternative_service2, expiration2)); |
| 440 url::SchemeHostPort test_server2("http", "foo2", 80); | 455 url::SchemeHostPort test_server2("http", "foo2", 80); |
| 441 // 0th entry in the memory. | 456 // 0th entry in the memory. |
| 442 impl_.SetAlternativeServices(test_server2, alternative_service_info_vector); | 457 impl_.SetAlternativeServices(test_server2, alternative_service_info_vector); |
| 443 | 458 |
| 444 // Prepare |alternative_service_map| to be loaded by | 459 // Prepare |alternative_service_map| to be loaded by |
| 445 // SetAlternativeServiceServers(). | 460 // SetAlternativeServiceServers(). |
| 446 AlternativeServiceMap alternative_service_map( | 461 AlternativeServiceMap alternative_service_map( |
| 447 AlternativeServiceMap::NO_AUTO_EVICT); | 462 AlternativeServiceMap::NO_AUTO_EVICT); |
| 448 const AlternativeService alternative_service3(kProtoHTTP2, "bar3", 123); | 463 const AlternativeService alternative_service3(kProtoHTTP2, "bar3", 123); |
| 449 base::Time expiration3 = now + base::TimeDelta::FromDays(3); | 464 base::Time expiration3 = now + base::TimeDelta::FromDays(3); |
| 450 const AlternativeServiceInfo alternative_service_info1(alternative_service3, | 465 const AlternativeServiceInfo alternative_service_info1 = |
| 451 expiration3); | 466 AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( |
| 467 alternative_service3, expiration3); |
| 452 // Simulate updating data for 0th entry with data from Preferences. | 468 // Simulate updating data for 0th entry with data from Preferences. |
| 453 alternative_service_map.Put( | 469 alternative_service_map.Put( |
| 454 test_server2, | 470 test_server2, |
| 455 AlternativeServiceInfoVector(/*size=*/1, alternative_service_info1)); | 471 AlternativeServiceInfoVector(/*size=*/1, alternative_service_info1)); |
| 456 | 472 |
| 457 url::SchemeHostPort test_server3("http", "foo3", 80); | 473 url::SchemeHostPort test_server3("http", "foo3", 80); |
| 458 const AlternativeService alternative_service4(kProtoHTTP2, "bar4", 1234); | 474 const AlternativeService alternative_service4(kProtoHTTP2, "bar4", 1234); |
| 459 base::Time expiration4 = now + base::TimeDelta::FromDays(4); | 475 base::Time expiration4 = now + base::TimeDelta::FromDays(4); |
| 460 const AlternativeServiceInfo alternative_service_info2(alternative_service4, | 476 const AlternativeServiceInfo alternative_service_info2 = |
| 461 expiration4); | 477 AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( |
| 478 alternative_service4, expiration4); |
| 462 // Add an old entry from Preferences, this will be added to end of recency | 479 // Add an old entry from Preferences, this will be added to end of recency |
| 463 // list. | 480 // list. |
| 464 alternative_service_map.Put( | 481 alternative_service_map.Put( |
| 465 test_server3, | 482 test_server3, |
| 466 AlternativeServiceInfoVector(/*size=*/1, alternative_service_info2)); | 483 AlternativeServiceInfoVector(/*size=*/1, alternative_service_info2)); |
| 467 | 484 |
| 468 // MRU list will be test_server2, test_server1, test_server3. | 485 // MRU list will be test_server2, test_server1, test_server3. |
| 469 impl_.SetAlternativeServiceServers(&alternative_service_map); | 486 impl_.SetAlternativeServiceServers(&alternative_service_map); |
| 470 | 487 |
| 471 // Verify alternative_service_map. | 488 // Verify alternative_service_map. |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 514 alternative_service_info_vector[0].alternative_service()); | 531 alternative_service_info_vector[0].alternative_service()); |
| 515 } | 532 } |
| 516 | 533 |
| 517 // Regression test for https://crbug.com/516486: | 534 // Regression test for https://crbug.com/516486: |
| 518 // GetAlternativeServiceInfos() should remove |alternative_service_map_| | 535 // GetAlternativeServiceInfos() should remove |alternative_service_map_| |
| 519 // elements with empty value. | 536 // elements with empty value. |
| 520 TEST_F(AlternateProtocolServerPropertiesTest, EmptyVector) { | 537 TEST_F(AlternateProtocolServerPropertiesTest, EmptyVector) { |
| 521 url::SchemeHostPort server("https", "foo", 443); | 538 url::SchemeHostPort server("https", "foo", 443); |
| 522 const AlternativeService alternative_service(kProtoHTTP2, "bar", 443); | 539 const AlternativeService alternative_service(kProtoHTTP2, "bar", 443); |
| 523 base::Time expiration = base::Time::Now() - base::TimeDelta::FromDays(1); | 540 base::Time expiration = base::Time::Now() - base::TimeDelta::FromDays(1); |
| 524 const AlternativeServiceInfo alternative_service_info(alternative_service, | 541 const AlternativeServiceInfo alternative_service_info = |
| 525 expiration); | 542 AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( |
| 543 alternative_service, expiration); |
| 526 AlternativeServiceMap alternative_service_map( | 544 AlternativeServiceMap alternative_service_map( |
| 527 AlternativeServiceMap::NO_AUTO_EVICT); | 545 AlternativeServiceMap::NO_AUTO_EVICT); |
| 528 alternative_service_map.Put( | 546 alternative_service_map.Put( |
| 529 server, | 547 server, |
| 530 AlternativeServiceInfoVector(/*size=*/1, alternative_service_info)); | 548 AlternativeServiceInfoVector(/*size=*/1, alternative_service_info)); |
| 531 | 549 |
| 532 // Prepare |alternative_service_map_| with a single key that has a single | 550 // Prepare |alternative_service_map_| with a single key that has a single |
| 533 // AlternativeServiceInfo with identical hostname and port. | 551 // AlternativeServiceInfo with identical hostname and port. |
| 534 impl_.SetAlternativeServiceServers(&alternative_service_map); | 552 impl_.SetAlternativeServiceServers(&alternative_service_map); |
| 535 | 553 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 547 // There should still be no alternative service assigned to |server|. | 565 // There should still be no alternative service assigned to |server|. |
| 548 ASSERT_TRUE(impl_.GetAlternativeServiceInfos(server).empty()); | 566 ASSERT_TRUE(impl_.GetAlternativeServiceInfos(server).empty()); |
| 549 } | 567 } |
| 550 | 568 |
| 551 // Regression test for https://crbug.com/516486 for the canonical host case. | 569 // Regression test for https://crbug.com/516486 for the canonical host case. |
| 552 TEST_F(AlternateProtocolServerPropertiesTest, EmptyVectorForCanonical) { | 570 TEST_F(AlternateProtocolServerPropertiesTest, EmptyVectorForCanonical) { |
| 553 url::SchemeHostPort server("https", "foo.c.youtube.com", 443); | 571 url::SchemeHostPort server("https", "foo.c.youtube.com", 443); |
| 554 url::SchemeHostPort canonical_server("https", "bar.c.youtube.com", 443); | 572 url::SchemeHostPort canonical_server("https", "bar.c.youtube.com", 443); |
| 555 const AlternativeService alternative_service(kProtoHTTP2, "", 443); | 573 const AlternativeService alternative_service(kProtoHTTP2, "", 443); |
| 556 base::Time expiration = base::Time::Now() - base::TimeDelta::FromDays(1); | 574 base::Time expiration = base::Time::Now() - base::TimeDelta::FromDays(1); |
| 557 const AlternativeServiceInfo alternative_service_info(alternative_service, | 575 const AlternativeServiceInfo alternative_service_info = |
| 558 expiration); | 576 AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( |
| 577 alternative_service, expiration); |
| 559 AlternativeServiceMap alternative_service_map( | 578 AlternativeServiceMap alternative_service_map( |
| 560 AlternativeServiceMap::NO_AUTO_EVICT); | 579 AlternativeServiceMap::NO_AUTO_EVICT); |
| 561 alternative_service_map.Put( | 580 alternative_service_map.Put( |
| 562 canonical_server, | 581 canonical_server, |
| 563 AlternativeServiceInfoVector(/*size=*/1, alternative_service_info)); | 582 AlternativeServiceInfoVector(/*size=*/1, alternative_service_info)); |
| 564 | 583 |
| 565 // Prepare |alternative_service_map_| with a single key that has a single | 584 // Prepare |alternative_service_map_| with a single key that has a single |
| 566 // AlternativeServiceInfo with identical hostname and port. | 585 // AlternativeServiceInfo with identical hostname and port. |
| 567 impl_.SetAlternativeServiceServers(&alternative_service_map); | 586 impl_.SetAlternativeServiceServers(&alternative_service_map); |
| 568 | 587 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 581 // There should still be no alternative service assigned to | 600 // There should still be no alternative service assigned to |
| 582 // |canonical_server|. | 601 // |canonical_server|. |
| 583 ASSERT_TRUE(impl_.GetAlternativeServiceInfos(canonical_server).empty()); | 602 ASSERT_TRUE(impl_.GetAlternativeServiceInfos(canonical_server).empty()); |
| 584 } | 603 } |
| 585 | 604 |
| 586 TEST_F(AlternateProtocolServerPropertiesTest, ClearServerWithCanonical) { | 605 TEST_F(AlternateProtocolServerPropertiesTest, ClearServerWithCanonical) { |
| 587 url::SchemeHostPort server("https", "foo.c.youtube.com", 443); | 606 url::SchemeHostPort server("https", "foo.c.youtube.com", 443); |
| 588 url::SchemeHostPort canonical_server("https", "bar.c.youtube.com", 443); | 607 url::SchemeHostPort canonical_server("https", "bar.c.youtube.com", 443); |
| 589 const AlternativeService alternative_service(kProtoQUIC, "", 443); | 608 const AlternativeService alternative_service(kProtoQUIC, "", 443); |
| 590 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); | 609 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
| 591 const AlternativeServiceInfo alternative_service_info(alternative_service, | 610 const AlternativeServiceInfo alternative_service_info = |
| 592 expiration); | 611 AlternativeServiceInfo::CreateQuicAlternativeServiceInfo( |
| 612 alternative_service, expiration, |
| 613 HttpNetworkSession::Params().quic_supported_versions); |
| 593 | 614 |
| 594 impl_.SetAlternativeServices( | 615 impl_.SetAlternativeServices( |
| 595 canonical_server, | 616 canonical_server, |
| 596 AlternativeServiceInfoVector(/*size=*/1, alternative_service_info)); | 617 AlternativeServiceInfoVector(/*size=*/1, alternative_service_info)); |
| 597 | 618 |
| 598 // Make sure the canonical service is returned for the other server. | 619 // Make sure the canonical service is returned for the other server. |
| 599 const AlternativeServiceInfoVector alternative_service_info_vector = | 620 const AlternativeServiceInfoVector alternative_service_info_vector = |
| 600 impl_.GetAlternativeServiceInfos(server); | 621 impl_.GetAlternativeServiceInfos(server); |
| 601 ASSERT_EQ(1u, alternative_service_info_vector.size()); | 622 ASSERT_EQ(1u, alternative_service_info_vector.size()); |
| 602 EXPECT_EQ(kProtoQUIC, | 623 EXPECT_EQ(kProtoQUIC, |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 656 impl_.GetAlternativeServiceInfos(test_server); | 677 impl_.GetAlternativeServiceInfos(test_server); |
| 657 ASSERT_EQ(1u, alternative_service_info_vector.size()); | 678 ASSERT_EQ(1u, alternative_service_info_vector.size()); |
| 658 EXPECT_EQ(alternative_service1, | 679 EXPECT_EQ(alternative_service1, |
| 659 alternative_service_info_vector[0].alternative_service()); | 680 alternative_service_info_vector[0].alternative_service()); |
| 660 EXPECT_TRUE(impl_.IsAlternativeServiceBroken(alternative_service1)); | 681 EXPECT_TRUE(impl_.IsAlternativeServiceBroken(alternative_service1)); |
| 661 | 682 |
| 662 // SetAlternativeServices should add a broken alternative service to the map. | 683 // SetAlternativeServices should add a broken alternative service to the map. |
| 663 AlternativeServiceInfoVector alternative_service_info_vector2; | 684 AlternativeServiceInfoVector alternative_service_info_vector2; |
| 664 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); | 685 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
| 665 alternative_service_info_vector2.push_back( | 686 alternative_service_info_vector2.push_back( |
| 666 AlternativeServiceInfo(alternative_service1, expiration)); | 687 AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( |
| 688 alternative_service1, expiration)); |
| 667 const AlternativeService alternative_service2(kProtoHTTP2, "foo", 1234); | 689 const AlternativeService alternative_service2(kProtoHTTP2, "foo", 1234); |
| 668 alternative_service_info_vector2.push_back( | 690 alternative_service_info_vector2.push_back( |
| 669 AlternativeServiceInfo(alternative_service2, expiration)); | 691 AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( |
| 692 alternative_service2, expiration)); |
| 670 impl_.SetAlternativeServices(test_server, alternative_service_info_vector2); | 693 impl_.SetAlternativeServices(test_server, alternative_service_info_vector2); |
| 671 alternative_service_info_vector = | 694 alternative_service_info_vector = |
| 672 impl_.GetAlternativeServiceInfos(test_server); | 695 impl_.GetAlternativeServiceInfos(test_server); |
| 673 ASSERT_EQ(2u, alternative_service_info_vector.size()); | 696 ASSERT_EQ(2u, alternative_service_info_vector.size()); |
| 674 EXPECT_EQ(alternative_service1, | 697 EXPECT_EQ(alternative_service1, |
| 675 alternative_service_info_vector[0].alternative_service()); | 698 alternative_service_info_vector[0].alternative_service()); |
| 676 EXPECT_EQ(alternative_service2, | 699 EXPECT_EQ(alternative_service2, |
| 677 alternative_service_info_vector[1].alternative_service()); | 700 alternative_service_info_vector[1].alternative_service()); |
| 678 EXPECT_TRUE(impl_.IsAlternativeServiceBroken(alternative_service1)); | 701 EXPECT_TRUE(impl_.IsAlternativeServiceBroken(alternative_service1)); |
| 679 EXPECT_FALSE(impl_.IsAlternativeServiceBroken(alternative_service2)); | 702 EXPECT_FALSE(impl_.IsAlternativeServiceBroken(alternative_service2)); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 690 | 713 |
| 691 TEST_F(AlternateProtocolServerPropertiesTest, MaxAge) { | 714 TEST_F(AlternateProtocolServerPropertiesTest, MaxAge) { |
| 692 AlternativeServiceInfoVector alternative_service_info_vector; | 715 AlternativeServiceInfoVector alternative_service_info_vector; |
| 693 base::Time now = base::Time::Now(); | 716 base::Time now = base::Time::Now(); |
| 694 base::TimeDelta one_day = base::TimeDelta::FromDays(1); | 717 base::TimeDelta one_day = base::TimeDelta::FromDays(1); |
| 695 | 718 |
| 696 // First alternative service expired one day ago, should not be returned by | 719 // First alternative service expired one day ago, should not be returned by |
| 697 // GetAlternativeServiceInfos(). | 720 // GetAlternativeServiceInfos(). |
| 698 const AlternativeService alternative_service1(kProtoHTTP2, "foo", 443); | 721 const AlternativeService alternative_service1(kProtoHTTP2, "foo", 443); |
| 699 alternative_service_info_vector.push_back( | 722 alternative_service_info_vector.push_back( |
| 700 AlternativeServiceInfo(alternative_service1, now - one_day)); | 723 AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( |
| 724 alternative_service1, now - one_day)); |
| 701 | 725 |
| 702 // Second alterrnative service will expire one day from now, should be | 726 // Second alterrnative service will expire one day from now, should be |
| 703 // returned by GetAlternativeSerices(). | 727 // returned by GetAlternativeSerices(). |
| 704 const AlternativeService alternative_service2(kProtoHTTP2, "bar", 1234); | 728 const AlternativeService alternative_service2(kProtoHTTP2, "bar", 1234); |
| 705 alternative_service_info_vector.push_back( | 729 alternative_service_info_vector.push_back( |
| 706 AlternativeServiceInfo(alternative_service2, now + one_day)); | 730 AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( |
| 731 alternative_service2, now + one_day)); |
| 707 | 732 |
| 708 url::SchemeHostPort test_server("http", "foo", 80); | 733 url::SchemeHostPort test_server("http", "foo", 80); |
| 709 impl_.SetAlternativeServices(test_server, alternative_service_info_vector); | 734 impl_.SetAlternativeServices(test_server, alternative_service_info_vector); |
| 710 | 735 |
| 711 AlternativeServiceInfoVector alternative_service_info_vector2 = | 736 AlternativeServiceInfoVector alternative_service_info_vector2 = |
| 712 impl_.GetAlternativeServiceInfos(test_server); | 737 impl_.GetAlternativeServiceInfos(test_server); |
| 713 ASSERT_EQ(1u, alternative_service_info_vector2.size()); | 738 ASSERT_EQ(1u, alternative_service_info_vector2.size()); |
| 714 EXPECT_EQ(alternative_service2, | 739 EXPECT_EQ(alternative_service2, |
| 715 alternative_service_info_vector2[0].alternative_service()); | 740 alternative_service_info_vector2[0].alternative_service()); |
| 716 } | 741 } |
| 717 | 742 |
| 718 TEST_F(AlternateProtocolServerPropertiesTest, MaxAgeCanonical) { | 743 TEST_F(AlternateProtocolServerPropertiesTest, MaxAgeCanonical) { |
| 719 AlternativeServiceInfoVector alternative_service_info_vector; | 744 AlternativeServiceInfoVector alternative_service_info_vector; |
| 720 base::Time now = base::Time::Now(); | 745 base::Time now = base::Time::Now(); |
| 721 base::TimeDelta one_day = base::TimeDelta::FromDays(1); | 746 base::TimeDelta one_day = base::TimeDelta::FromDays(1); |
| 722 | 747 |
| 723 // First alternative service expired one day ago, should not be returned by | 748 // First alternative service expired one day ago, should not be returned by |
| 724 // GetAlternativeServiceInfos(). | 749 // GetAlternativeServiceInfos(). |
| 725 const AlternativeService alternative_service1(kProtoHTTP2, "foo", 443); | 750 const AlternativeService alternative_service1(kProtoHTTP2, "foo", 443); |
| 726 alternative_service_info_vector.push_back( | 751 alternative_service_info_vector.push_back( |
| 727 AlternativeServiceInfo(alternative_service1, now - one_day)); | 752 AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( |
| 753 alternative_service1, now - one_day)); |
| 728 | 754 |
| 729 // Second alterrnative service will expire one day from now, should be | 755 // Second alterrnative service will expire one day from now, should be |
| 730 // returned by GetAlternativeSerices(). | 756 // returned by GetAlternativeSerices(). |
| 731 const AlternativeService alternative_service2(kProtoHTTP2, "bar", 1234); | 757 const AlternativeService alternative_service2(kProtoHTTP2, "bar", 1234); |
| 732 alternative_service_info_vector.push_back( | 758 alternative_service_info_vector.push_back( |
| 733 AlternativeServiceInfo(alternative_service2, now + one_day)); | 759 AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( |
| 760 alternative_service2, now + one_day)); |
| 734 | 761 |
| 735 url::SchemeHostPort canonical_server("https", "bar.c.youtube.com", 443); | 762 url::SchemeHostPort canonical_server("https", "bar.c.youtube.com", 443); |
| 736 impl_.SetAlternativeServices(canonical_server, | 763 impl_.SetAlternativeServices(canonical_server, |
| 737 alternative_service_info_vector); | 764 alternative_service_info_vector); |
| 738 | 765 |
| 739 url::SchemeHostPort test_server("https", "foo.c.youtube.com", 443); | 766 url::SchemeHostPort test_server("https", "foo.c.youtube.com", 443); |
| 740 AlternativeServiceInfoVector alternative_service_info_vector2 = | 767 AlternativeServiceInfoVector alternative_service_info_vector2 = |
| 741 impl_.GetAlternativeServiceInfos(test_server); | 768 impl_.GetAlternativeServiceInfos(test_server); |
| 742 ASSERT_EQ(1u, alternative_service_info_vector2.size()); | 769 ASSERT_EQ(1u, alternative_service_info_vector2.size()); |
| 743 EXPECT_EQ(alternative_service2, | 770 EXPECT_EQ(alternative_service2, |
| 744 alternative_service_info_vector2[0].alternative_service()); | 771 alternative_service_info_vector2[0].alternative_service()); |
| 745 } | 772 } |
| 746 | 773 |
| 747 TEST_F(AlternateProtocolServerPropertiesTest, AlternativeServiceWithScheme) { | 774 TEST_F(AlternateProtocolServerPropertiesTest, AlternativeServiceWithScheme) { |
| 748 AlternativeServiceInfoVector alternative_service_info_vector; | 775 AlternativeServiceInfoVector alternative_service_info_vector; |
| 749 const AlternativeService alternative_service1(kProtoHTTP2, "foo", 443); | 776 const AlternativeService alternative_service1(kProtoHTTP2, "foo", 443); |
| 750 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); | 777 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
| 751 alternative_service_info_vector.push_back( | 778 alternative_service_info_vector.push_back( |
| 752 AlternativeServiceInfo(alternative_service1, expiration)); | 779 AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( |
| 780 alternative_service1, expiration)); |
| 753 const AlternativeService alternative_service2(kProtoHTTP2, "bar", 1234); | 781 const AlternativeService alternative_service2(kProtoHTTP2, "bar", 1234); |
| 754 alternative_service_info_vector.push_back( | 782 alternative_service_info_vector.push_back( |
| 755 AlternativeServiceInfo(alternative_service2, expiration)); | 783 AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( |
| 784 alternative_service2, expiration)); |
| 756 // Set Alt-Svc list for |http_server|. | 785 // Set Alt-Svc list for |http_server|. |
| 757 url::SchemeHostPort http_server("http", "foo", 80); | 786 url::SchemeHostPort http_server("http", "foo", 80); |
| 758 impl_.SetAlternativeServices(http_server, alternative_service_info_vector); | 787 impl_.SetAlternativeServices(http_server, alternative_service_info_vector); |
| 759 | 788 |
| 760 const net::AlternativeServiceMap& map = impl_.alternative_service_map(); | 789 const net::AlternativeServiceMap& map = impl_.alternative_service_map(); |
| 761 net::AlternativeServiceMap::const_iterator it = map.begin(); | 790 net::AlternativeServiceMap::const_iterator it = map.begin(); |
| 762 EXPECT_TRUE(it->first.Equals(http_server)); | 791 EXPECT_TRUE(it->first.Equals(http_server)); |
| 763 ASSERT_EQ(2u, it->second.size()); | 792 ASSERT_EQ(2u, it->second.size()); |
| 764 EXPECT_EQ(alternative_service1, it->second[0].alternative_service()); | 793 EXPECT_EQ(alternative_service1, it->second[0].alternative_service()); |
| 765 EXPECT_EQ(alternative_service2, it->second[1].alternative_service()); | 794 EXPECT_EQ(alternative_service2, it->second[1].alternative_service()); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 778 | 807 |
| 779 EXPECT_EQ(0u, impl_.GetAlternativeServiceInfos(http_server).size()); | 808 EXPECT_EQ(0u, impl_.GetAlternativeServiceInfos(http_server).size()); |
| 780 EXPECT_EQ(2u, impl_.GetAlternativeServiceInfos(https_server).size()); | 809 EXPECT_EQ(2u, impl_.GetAlternativeServiceInfos(https_server).size()); |
| 781 } | 810 } |
| 782 | 811 |
| 783 TEST_F(AlternateProtocolServerPropertiesTest, ClearAlternativeServices) { | 812 TEST_F(AlternateProtocolServerPropertiesTest, ClearAlternativeServices) { |
| 784 AlternativeServiceInfoVector alternative_service_info_vector; | 813 AlternativeServiceInfoVector alternative_service_info_vector; |
| 785 const AlternativeService alternative_service1(kProtoHTTP2, "foo", 443); | 814 const AlternativeService alternative_service1(kProtoHTTP2, "foo", 443); |
| 786 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); | 815 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
| 787 alternative_service_info_vector.push_back( | 816 alternative_service_info_vector.push_back( |
| 788 AlternativeServiceInfo(alternative_service1, expiration)); | 817 AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( |
| 818 alternative_service1, expiration)); |
| 789 const AlternativeService alternative_service2(kProtoHTTP2, "bar", 1234); | 819 const AlternativeService alternative_service2(kProtoHTTP2, "bar", 1234); |
| 790 alternative_service_info_vector.push_back( | 820 alternative_service_info_vector.push_back( |
| 791 AlternativeServiceInfo(alternative_service2, expiration)); | 821 AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( |
| 822 alternative_service2, expiration)); |
| 792 url::SchemeHostPort test_server("http", "foo", 80); | 823 url::SchemeHostPort test_server("http", "foo", 80); |
| 793 impl_.SetAlternativeServices(test_server, alternative_service_info_vector); | 824 impl_.SetAlternativeServices(test_server, alternative_service_info_vector); |
| 794 | 825 |
| 795 const net::AlternativeServiceMap& map = impl_.alternative_service_map(); | 826 const net::AlternativeServiceMap& map = impl_.alternative_service_map(); |
| 796 net::AlternativeServiceMap::const_iterator it = map.begin(); | 827 net::AlternativeServiceMap::const_iterator it = map.begin(); |
| 797 EXPECT_TRUE(it->first.Equals(test_server)); | 828 EXPECT_TRUE(it->first.Equals(test_server)); |
| 798 ASSERT_EQ(2u, it->second.size()); | 829 ASSERT_EQ(2u, it->second.size()); |
| 799 EXPECT_EQ(alternative_service1, it->second[0].alternative_service()); | 830 EXPECT_EQ(alternative_service1, it->second[0].alternative_service()); |
| 800 EXPECT_EQ(alternative_service2, it->second[1].alternative_service()); | 831 EXPECT_EQ(alternative_service2, it->second[1].alternative_service()); |
| 801 | 832 |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 867 EXPECT_FALSE(HasAlternativeService(test_server)); | 898 EXPECT_FALSE(HasAlternativeService(test_server)); |
| 868 | 899 |
| 869 url::SchemeHostPort canonical_server("https", "bar.c.youtube.com", 443); | 900 url::SchemeHostPort canonical_server("https", "bar.c.youtube.com", 443); |
| 870 EXPECT_FALSE(HasAlternativeService(canonical_server)); | 901 EXPECT_FALSE(HasAlternativeService(canonical_server)); |
| 871 | 902 |
| 872 AlternativeServiceInfoVector alternative_service_info_vector; | 903 AlternativeServiceInfoVector alternative_service_info_vector; |
| 873 const AlternativeService canonical_alternative_service1( | 904 const AlternativeService canonical_alternative_service1( |
| 874 kProtoQUIC, "bar.c.youtube.com", 1234); | 905 kProtoQUIC, "bar.c.youtube.com", 1234); |
| 875 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); | 906 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
| 876 alternative_service_info_vector.push_back( | 907 alternative_service_info_vector.push_back( |
| 877 AlternativeServiceInfo(canonical_alternative_service1, expiration)); | 908 AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( |
| 909 canonical_alternative_service1, expiration)); |
| 878 const AlternativeService canonical_alternative_service2(kProtoHTTP2, "", 443); | 910 const AlternativeService canonical_alternative_service2(kProtoHTTP2, "", 443); |
| 879 alternative_service_info_vector.push_back( | 911 alternative_service_info_vector.push_back( |
| 880 AlternativeServiceInfo(canonical_alternative_service2, expiration)); | 912 AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( |
| 913 canonical_alternative_service2, expiration)); |
| 881 impl_.SetAlternativeServices(canonical_server, | 914 impl_.SetAlternativeServices(canonical_server, |
| 882 alternative_service_info_vector); | 915 alternative_service_info_vector); |
| 883 | 916 |
| 884 // Since |test_server| does not have an alternative service itself, | 917 // Since |test_server| does not have an alternative service itself, |
| 885 // GetAlternativeServiceInfos should return those of |canonical_server|. | 918 // GetAlternativeServiceInfos should return those of |canonical_server|. |
| 886 AlternativeServiceInfoVector alternative_service_info_vector2 = | 919 AlternativeServiceInfoVector alternative_service_info_vector2 = |
| 887 impl_.GetAlternativeServiceInfos(test_server); | 920 impl_.GetAlternativeServiceInfos(test_server); |
| 888 ASSERT_EQ(2u, alternative_service_info_vector2.size()); | 921 ASSERT_EQ(2u, alternative_service_info_vector2.size()); |
| 889 EXPECT_EQ(canonical_alternative_service1, | 922 EXPECT_EQ(canonical_alternative_service1, |
| 890 alternative_service_info_vector2[0].alternative_service()); | 923 alternative_service_info_vector2[0].alternative_service()); |
| (...skipping 437 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1328 EXPECT_EQ(quic_server_info1, *(impl_.GetQuicServerInfo(quic_server_id))); | 1361 EXPECT_EQ(quic_server_info1, *(impl_.GetQuicServerInfo(quic_server_id))); |
| 1329 | 1362 |
| 1330 impl_.Clear(); | 1363 impl_.Clear(); |
| 1331 EXPECT_EQ(0u, impl_.quic_server_info_map().size()); | 1364 EXPECT_EQ(0u, impl_.quic_server_info_map().size()); |
| 1332 EXPECT_EQ(nullptr, impl_.GetQuicServerInfo(quic_server_id)); | 1365 EXPECT_EQ(nullptr, impl_.GetQuicServerInfo(quic_server_id)); |
| 1333 } | 1366 } |
| 1334 | 1367 |
| 1335 } // namespace | 1368 } // namespace |
| 1336 | 1369 |
| 1337 } // namespace net | 1370 } // namespace net |
| OLD | NEW |