| 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 269 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 361 alternative_service_info_vector[0].alternative_service()); | 369 alternative_service_info_vector[0].alternative_service()); |
| 362 | 370 |
| 363 impl_.Clear(); | 371 impl_.Clear(); |
| 364 EXPECT_FALSE(HasAlternativeService(test_server)); | 372 EXPECT_FALSE(HasAlternativeService(test_server)); |
| 365 } | 373 } |
| 366 | 374 |
| 367 TEST_F(AlternateProtocolServerPropertiesTest, ExcludeOrigin) { | 375 TEST_F(AlternateProtocolServerPropertiesTest, ExcludeOrigin) { |
| 368 AlternativeServiceInfoVector alternative_service_info_vector; | 376 AlternativeServiceInfoVector alternative_service_info_vector; |
| 369 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); | 377 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
| 370 // Same hostname, same port, TCP: should be ignored. | 378 // Same hostname, same port, TCP: should be ignored. |
| 371 AlternativeServiceInfo alternative_service_info1(kProtoHTTP2, "foo", 443, | 379 AlternativeServiceInfo alternative_service_info1 = |
| 372 expiration); | 380 AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( |
| 381 AlternativeService(kProtoHTTP2, "foo", 443), expiration); |
| 373 alternative_service_info_vector.push_back(alternative_service_info1); | 382 alternative_service_info_vector.push_back(alternative_service_info1); |
| 374 // Different hostname: GetAlternativeServiceInfos should return this one. | 383 // Different hostname: GetAlternativeServiceInfos should return this one. |
| 375 AlternativeServiceInfo alternative_service_info2(kProtoHTTP2, "bar", 443, | 384 AlternativeServiceInfo alternative_service_info2 = |
| 376 expiration); | 385 AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( |
| 386 AlternativeService(kProtoHTTP2, "bar", 443), expiration); |
| 377 alternative_service_info_vector.push_back(alternative_service_info2); | 387 alternative_service_info_vector.push_back(alternative_service_info2); |
| 378 // Different port: GetAlternativeServiceInfos should return this one too. | 388 // Different port: GetAlternativeServiceInfos should return this one too. |
| 379 AlternativeServiceInfo alternative_service_info3(kProtoHTTP2, "foo", 80, | 389 AlternativeServiceInfo alternative_service_info3 = |
| 380 expiration); | 390 AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( |
| 391 AlternativeService(kProtoHTTP2, "foo", 80), expiration); |
| 381 alternative_service_info_vector.push_back(alternative_service_info3); | 392 alternative_service_info_vector.push_back(alternative_service_info3); |
| 382 // QUIC: GetAlternativeServices should return this one too. | 393 // QUIC: GetAlternativeServices should return this one too. |
| 383 AlternativeServiceInfo alternative_service_info4(kProtoQUIC, "foo", 443, | 394 AlternativeServiceInfo alternative_service_info4 = |
| 384 expiration); | 395 AlternativeServiceInfo::CreateQuicAlternativeServiceInfo( |
| 396 AlternativeService(kProtoQUIC, "foo", 443), expiration, |
| 397 HttpNetworkSession::Params().quic_supported_versions); |
| 385 alternative_service_info_vector.push_back(alternative_service_info4); | 398 alternative_service_info_vector.push_back(alternative_service_info4); |
| 386 | 399 |
| 387 url::SchemeHostPort test_server("https", "foo", 443); | 400 url::SchemeHostPort test_server("https", "foo", 443); |
| 388 impl_.SetAlternativeServices(test_server, alternative_service_info_vector); | 401 impl_.SetAlternativeServices(test_server, alternative_service_info_vector); |
| 389 | 402 |
| 390 const AlternativeServiceInfoVector alternative_service_info_vector2 = | 403 const AlternativeServiceInfoVector alternative_service_info_vector2 = |
| 391 impl_.GetAlternativeServiceInfos(test_server); | 404 impl_.GetAlternativeServiceInfos(test_server); |
| 392 ASSERT_EQ(3u, alternative_service_info_vector2.size()); | 405 ASSERT_EQ(3u, alternative_service_info_vector2.size()); |
| 393 EXPECT_EQ(alternative_service_info2, alternative_service_info_vector2[0]); | 406 EXPECT_EQ(alternative_service_info2, alternative_service_info_vector2[0]); |
| 394 EXPECT_EQ(alternative_service_info3, alternative_service_info_vector2[1]); | 407 EXPECT_EQ(alternative_service_info3, alternative_service_info_vector2[1]); |
| 395 EXPECT_EQ(alternative_service_info4, alternative_service_info_vector2[2]); | 408 EXPECT_EQ(alternative_service_info4, alternative_service_info_vector2[2]); |
| 396 } | 409 } |
| 397 | 410 |
| 398 TEST_F(AlternateProtocolServerPropertiesTest, Set) { | 411 TEST_F(AlternateProtocolServerPropertiesTest, Set) { |
| 399 // |test_server1| has an alternative service, which will not be | 412 // |test_server1| has an alternative service, which will not be |
| 400 // affected by SetAlternativeServiceServers(), because | 413 // affected by SetAlternativeServiceServers(), because |
| 401 // |alternative_service_map| does not have an entry for | 414 // |alternative_service_map| does not have an entry for |
| 402 // |test_server1|. | 415 // |test_server1|. |
| 403 url::SchemeHostPort test_server1("http", "foo1", 80); | 416 url::SchemeHostPort test_server1("http", "foo1", 80); |
| 404 const AlternativeService alternative_service1(kProtoHTTP2, "bar1", 443); | 417 const AlternativeService alternative_service1(kProtoHTTP2, "bar1", 443); |
| 405 const base::Time now = base::Time::Now(); | 418 const base::Time now = base::Time::Now(); |
| 406 base::Time expiration1 = now + base::TimeDelta::FromDays(1); | 419 base::Time expiration1 = now + base::TimeDelta::FromDays(1); |
| 407 // 1st entry in the memory. | 420 // 1st entry in the memory. |
| 408 impl_.SetAlternativeService(test_server1, alternative_service1, expiration1); | 421 impl_.SetHttp2AlternativeService(test_server1, alternative_service1, |
| 422 expiration1); |
| 409 | 423 |
| 410 // |test_server2| has an alternative service, which will be | 424 // |test_server2| has an alternative service, which will be |
| 411 // overwritten by SetAlternativeServiceServers(), because | 425 // overwritten by SetAlternativeServiceServers(), because |
| 412 // |alternative_service_map| has an entry for | 426 // |alternative_service_map| has an entry for |
| 413 // |test_server2|. | 427 // |test_server2|. |
| 414 AlternativeServiceInfoVector alternative_service_info_vector; | 428 AlternativeServiceInfoVector alternative_service_info_vector; |
| 415 const AlternativeService alternative_service2(kProtoHTTP2, "bar2", 443); | 429 const AlternativeService alternative_service2(kProtoHTTP2, "bar2", 443); |
| 416 base::Time expiration2 = now + base::TimeDelta::FromDays(2); | 430 base::Time expiration2 = now + base::TimeDelta::FromDays(2); |
| 417 alternative_service_info_vector.push_back( | 431 alternative_service_info_vector.push_back( |
| 418 AlternativeServiceInfo(alternative_service2, expiration2)); | 432 AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( |
| 433 alternative_service2, expiration2)); |
| 419 url::SchemeHostPort test_server2("http", "foo2", 80); | 434 url::SchemeHostPort test_server2("http", "foo2", 80); |
| 420 // 0th entry in the memory. | 435 // 0th entry in the memory. |
| 421 impl_.SetAlternativeServices(test_server2, alternative_service_info_vector); | 436 impl_.SetAlternativeServices(test_server2, alternative_service_info_vector); |
| 422 | 437 |
| 423 // Prepare |alternative_service_map| to be loaded by | 438 // Prepare |alternative_service_map| to be loaded by |
| 424 // SetAlternativeServiceServers(). | 439 // SetAlternativeServiceServers(). |
| 425 std::unique_ptr<AlternativeServiceMap> alternative_service_map = | 440 std::unique_ptr<AlternativeServiceMap> alternative_service_map = |
| 426 base::MakeUnique<AlternativeServiceMap>( | 441 base::MakeUnique<AlternativeServiceMap>( |
| 427 AlternativeServiceMap::NO_AUTO_EVICT); | 442 AlternativeServiceMap::NO_AUTO_EVICT); |
| 428 const AlternativeService alternative_service3(kProtoHTTP2, "bar3", 123); | 443 const AlternativeService alternative_service3(kProtoHTTP2, "bar3", 123); |
| 429 base::Time expiration3 = now + base::TimeDelta::FromDays(3); | 444 base::Time expiration3 = now + base::TimeDelta::FromDays(3); |
| 430 const AlternativeServiceInfo alternative_service_info1(alternative_service3, | 445 const AlternativeServiceInfo alternative_service_info1 = |
| 431 expiration3); | 446 AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( |
| 447 alternative_service3, expiration3); |
| 432 // Simulate updating data for 0th entry with data from Preferences. | 448 // Simulate updating data for 0th entry with data from Preferences. |
| 433 alternative_service_map->Put( | 449 alternative_service_map->Put( |
| 434 test_server2, | 450 test_server2, |
| 435 AlternativeServiceInfoVector(/*size=*/1, alternative_service_info1)); | 451 AlternativeServiceInfoVector(/*size=*/1, alternative_service_info1)); |
| 436 | 452 |
| 437 url::SchemeHostPort test_server3("http", "foo3", 80); | 453 url::SchemeHostPort test_server3("http", "foo3", 80); |
| 438 const AlternativeService alternative_service4(kProtoHTTP2, "bar4", 1234); | 454 const AlternativeService alternative_service4(kProtoHTTP2, "bar4", 1234); |
| 439 base::Time expiration4 = now + base::TimeDelta::FromDays(4); | 455 base::Time expiration4 = now + base::TimeDelta::FromDays(4); |
| 440 const AlternativeServiceInfo alternative_service_info2(alternative_service4, | 456 const AlternativeServiceInfo alternative_service_info2 = |
| 441 expiration4); | 457 AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( |
| 458 alternative_service4, expiration4); |
| 442 // Add an old entry from Preferences, this will be added to end of recency | 459 // Add an old entry from Preferences, this will be added to end of recency |
| 443 // list. | 460 // list. |
| 444 alternative_service_map->Put( | 461 alternative_service_map->Put( |
| 445 test_server3, | 462 test_server3, |
| 446 AlternativeServiceInfoVector(/*size=*/1, alternative_service_info2)); | 463 AlternativeServiceInfoVector(/*size=*/1, alternative_service_info2)); |
| 447 | 464 |
| 448 // MRU list will be test_server2, test_server1, test_server3. | 465 // MRU list will be test_server2, test_server1, test_server3. |
| 449 impl_.SetAlternativeServiceServers(std::move(alternative_service_map)); | 466 impl_.SetAlternativeServiceServers(std::move(alternative_service_map)); |
| 450 | 467 |
| 451 // Verify alternative_service_map. | 468 // Verify alternative_service_map. |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 495 alternative_service_info_vector[0].alternative_service()); | 512 alternative_service_info_vector[0].alternative_service()); |
| 496 } | 513 } |
| 497 | 514 |
| 498 // Regression test for https://crbug.com/516486: | 515 // Regression test for https://crbug.com/516486: |
| 499 // GetAlternativeServiceInfos() should remove |alternative_service_map_| | 516 // GetAlternativeServiceInfos() should remove |alternative_service_map_| |
| 500 // elements with empty value. | 517 // elements with empty value. |
| 501 TEST_F(AlternateProtocolServerPropertiesTest, EmptyVector) { | 518 TEST_F(AlternateProtocolServerPropertiesTest, EmptyVector) { |
| 502 url::SchemeHostPort server("https", "foo", 443); | 519 url::SchemeHostPort server("https", "foo", 443); |
| 503 const AlternativeService alternative_service(kProtoHTTP2, "bar", 443); | 520 const AlternativeService alternative_service(kProtoHTTP2, "bar", 443); |
| 504 base::Time expiration = base::Time::Now() - base::TimeDelta::FromDays(1); | 521 base::Time expiration = base::Time::Now() - base::TimeDelta::FromDays(1); |
| 505 const AlternativeServiceInfo alternative_service_info(alternative_service, | 522 const AlternativeServiceInfo alternative_service_info = |
| 506 expiration); | 523 AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( |
| 524 alternative_service, expiration); |
| 507 std::unique_ptr<AlternativeServiceMap> alternative_service_map = | 525 std::unique_ptr<AlternativeServiceMap> alternative_service_map = |
| 508 base::MakeUnique<AlternativeServiceMap>( | 526 base::MakeUnique<AlternativeServiceMap>( |
| 509 AlternativeServiceMap::NO_AUTO_EVICT); | 527 AlternativeServiceMap::NO_AUTO_EVICT); |
| 510 alternative_service_map->Put( | 528 alternative_service_map->Put( |
| 511 server, | 529 server, |
| 512 AlternativeServiceInfoVector(/*size=*/1, alternative_service_info)); | 530 AlternativeServiceInfoVector(/*size=*/1, alternative_service_info)); |
| 513 | 531 |
| 514 // Prepare |alternative_service_map_| with a single key that has a single | 532 // Prepare |alternative_service_map_| with a single key that has a single |
| 515 // AlternativeServiceInfo with identical hostname and port. | 533 // AlternativeServiceInfo with identical hostname and port. |
| 516 impl_.SetAlternativeServiceServers(std::move(alternative_service_map)); | 534 impl_.SetAlternativeServiceServers(std::move(alternative_service_map)); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 529 // There should still be no alternative service assigned to |server|. | 547 // There should still be no alternative service assigned to |server|. |
| 530 ASSERT_TRUE(impl_.GetAlternativeServiceInfos(server).empty()); | 548 ASSERT_TRUE(impl_.GetAlternativeServiceInfos(server).empty()); |
| 531 } | 549 } |
| 532 | 550 |
| 533 // Regression test for https://crbug.com/516486 for the canonical host case. | 551 // Regression test for https://crbug.com/516486 for the canonical host case. |
| 534 TEST_F(AlternateProtocolServerPropertiesTest, EmptyVectorForCanonical) { | 552 TEST_F(AlternateProtocolServerPropertiesTest, EmptyVectorForCanonical) { |
| 535 url::SchemeHostPort server("https", "foo.c.youtube.com", 443); | 553 url::SchemeHostPort server("https", "foo.c.youtube.com", 443); |
| 536 url::SchemeHostPort canonical_server("https", "bar.c.youtube.com", 443); | 554 url::SchemeHostPort canonical_server("https", "bar.c.youtube.com", 443); |
| 537 const AlternativeService alternative_service(kProtoHTTP2, "", 443); | 555 const AlternativeService alternative_service(kProtoHTTP2, "", 443); |
| 538 base::Time expiration = base::Time::Now() - base::TimeDelta::FromDays(1); | 556 base::Time expiration = base::Time::Now() - base::TimeDelta::FromDays(1); |
| 539 const AlternativeServiceInfo alternative_service_info(alternative_service, | 557 const AlternativeServiceInfo alternative_service_info = |
| 540 expiration); | 558 AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( |
| 559 alternative_service, expiration); |
| 541 std::unique_ptr<AlternativeServiceMap> alternative_service_map = | 560 std::unique_ptr<AlternativeServiceMap> alternative_service_map = |
| 542 base::MakeUnique<AlternativeServiceMap>( | 561 base::MakeUnique<AlternativeServiceMap>( |
| 543 AlternativeServiceMap::NO_AUTO_EVICT); | 562 AlternativeServiceMap::NO_AUTO_EVICT); |
| 544 alternative_service_map->Put( | 563 alternative_service_map->Put( |
| 545 canonical_server, | 564 canonical_server, |
| 546 AlternativeServiceInfoVector(/*size=*/1, alternative_service_info)); | 565 AlternativeServiceInfoVector(/*size=*/1, alternative_service_info)); |
| 547 | 566 |
| 548 // Prepare |alternative_service_map_| with a single key that has a single | 567 // Prepare |alternative_service_map_| with a single key that has a single |
| 549 // AlternativeServiceInfo with identical hostname and port. | 568 // AlternativeServiceInfo with identical hostname and port. |
| 550 impl_.SetAlternativeServiceServers(std::move(alternative_service_map)); | 569 impl_.SetAlternativeServiceServers(std::move(alternative_service_map)); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 564 // There should still be no alternative service assigned to | 583 // There should still be no alternative service assigned to |
| 565 // |canonical_server|. | 584 // |canonical_server|. |
| 566 ASSERT_TRUE(impl_.GetAlternativeServiceInfos(canonical_server).empty()); | 585 ASSERT_TRUE(impl_.GetAlternativeServiceInfos(canonical_server).empty()); |
| 567 } | 586 } |
| 568 | 587 |
| 569 TEST_F(AlternateProtocolServerPropertiesTest, ClearServerWithCanonical) { | 588 TEST_F(AlternateProtocolServerPropertiesTest, ClearServerWithCanonical) { |
| 570 url::SchemeHostPort server("https", "foo.c.youtube.com", 443); | 589 url::SchemeHostPort server("https", "foo.c.youtube.com", 443); |
| 571 url::SchemeHostPort canonical_server("https", "bar.c.youtube.com", 443); | 590 url::SchemeHostPort canonical_server("https", "bar.c.youtube.com", 443); |
| 572 const AlternativeService alternative_service(kProtoQUIC, "", 443); | 591 const AlternativeService alternative_service(kProtoQUIC, "", 443); |
| 573 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); | 592 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
| 574 const AlternativeServiceInfo alternative_service_info(alternative_service, | 593 const AlternativeServiceInfo alternative_service_info = |
| 575 expiration); | 594 AlternativeServiceInfo::CreateQuicAlternativeServiceInfo( |
| 595 alternative_service, expiration, |
| 596 HttpNetworkSession::Params().quic_supported_versions); |
| 576 | 597 |
| 577 impl_.SetAlternativeServices( | 598 impl_.SetAlternativeServices( |
| 578 canonical_server, | 599 canonical_server, |
| 579 AlternativeServiceInfoVector(/*size=*/1, alternative_service_info)); | 600 AlternativeServiceInfoVector(/*size=*/1, alternative_service_info)); |
| 580 | 601 |
| 581 // Make sure the canonical service is returned for the other server. | 602 // Make sure the canonical service is returned for the other server. |
| 582 const AlternativeServiceInfoVector alternative_service_info_vector = | 603 const AlternativeServiceInfoVector alternative_service_info_vector = |
| 583 impl_.GetAlternativeServiceInfos(server); | 604 impl_.GetAlternativeServiceInfos(server); |
| 584 ASSERT_EQ(1u, alternative_service_info_vector.size()); | 605 ASSERT_EQ(1u, alternative_service_info_vector.size()); |
| 585 EXPECT_EQ(kProtoQUIC, | 606 EXPECT_EQ(kProtoQUIC, |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 639 impl_.GetAlternativeServiceInfos(test_server); | 660 impl_.GetAlternativeServiceInfos(test_server); |
| 640 ASSERT_EQ(1u, alternative_service_info_vector.size()); | 661 ASSERT_EQ(1u, alternative_service_info_vector.size()); |
| 641 EXPECT_EQ(alternative_service1, | 662 EXPECT_EQ(alternative_service1, |
| 642 alternative_service_info_vector[0].alternative_service()); | 663 alternative_service_info_vector[0].alternative_service()); |
| 643 EXPECT_TRUE(impl_.IsAlternativeServiceBroken(alternative_service1)); | 664 EXPECT_TRUE(impl_.IsAlternativeServiceBroken(alternative_service1)); |
| 644 | 665 |
| 645 // SetAlternativeServices should add a broken alternative service to the map. | 666 // SetAlternativeServices should add a broken alternative service to the map. |
| 646 AlternativeServiceInfoVector alternative_service_info_vector2; | 667 AlternativeServiceInfoVector alternative_service_info_vector2; |
| 647 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); | 668 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
| 648 alternative_service_info_vector2.push_back( | 669 alternative_service_info_vector2.push_back( |
| 649 AlternativeServiceInfo(alternative_service1, expiration)); | 670 AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( |
| 671 alternative_service1, expiration)); |
| 650 const AlternativeService alternative_service2(kProtoHTTP2, "foo", 1234); | 672 const AlternativeService alternative_service2(kProtoHTTP2, "foo", 1234); |
| 651 alternative_service_info_vector2.push_back( | 673 alternative_service_info_vector2.push_back( |
| 652 AlternativeServiceInfo(alternative_service2, expiration)); | 674 AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( |
| 675 alternative_service2, expiration)); |
| 653 impl_.SetAlternativeServices(test_server, alternative_service_info_vector2); | 676 impl_.SetAlternativeServices(test_server, alternative_service_info_vector2); |
| 654 alternative_service_info_vector = | 677 alternative_service_info_vector = |
| 655 impl_.GetAlternativeServiceInfos(test_server); | 678 impl_.GetAlternativeServiceInfos(test_server); |
| 656 ASSERT_EQ(2u, alternative_service_info_vector.size()); | 679 ASSERT_EQ(2u, alternative_service_info_vector.size()); |
| 657 EXPECT_EQ(alternative_service1, | 680 EXPECT_EQ(alternative_service1, |
| 658 alternative_service_info_vector[0].alternative_service()); | 681 alternative_service_info_vector[0].alternative_service()); |
| 659 EXPECT_EQ(alternative_service2, | 682 EXPECT_EQ(alternative_service2, |
| 660 alternative_service_info_vector[1].alternative_service()); | 683 alternative_service_info_vector[1].alternative_service()); |
| 661 EXPECT_TRUE(impl_.IsAlternativeServiceBroken(alternative_service1)); | 684 EXPECT_TRUE(impl_.IsAlternativeServiceBroken(alternative_service1)); |
| 662 EXPECT_FALSE(impl_.IsAlternativeServiceBroken(alternative_service2)); | 685 EXPECT_FALSE(impl_.IsAlternativeServiceBroken(alternative_service2)); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 673 | 696 |
| 674 TEST_F(AlternateProtocolServerPropertiesTest, MaxAge) { | 697 TEST_F(AlternateProtocolServerPropertiesTest, MaxAge) { |
| 675 AlternativeServiceInfoVector alternative_service_info_vector; | 698 AlternativeServiceInfoVector alternative_service_info_vector; |
| 676 base::Time now = base::Time::Now(); | 699 base::Time now = base::Time::Now(); |
| 677 base::TimeDelta one_day = base::TimeDelta::FromDays(1); | 700 base::TimeDelta one_day = base::TimeDelta::FromDays(1); |
| 678 | 701 |
| 679 // First alternative service expired one day ago, should not be returned by | 702 // First alternative service expired one day ago, should not be returned by |
| 680 // GetAlternativeServiceInfos(). | 703 // GetAlternativeServiceInfos(). |
| 681 const AlternativeService alternative_service1(kProtoHTTP2, "foo", 443); | 704 const AlternativeService alternative_service1(kProtoHTTP2, "foo", 443); |
| 682 alternative_service_info_vector.push_back( | 705 alternative_service_info_vector.push_back( |
| 683 AlternativeServiceInfo(alternative_service1, now - one_day)); | 706 AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( |
| 707 alternative_service1, now - one_day)); |
| 684 | 708 |
| 685 // Second alterrnative service will expire one day from now, should be | 709 // Second alterrnative service will expire one day from now, should be |
| 686 // returned by GetAlternativeSerices(). | 710 // returned by GetAlternativeSerices(). |
| 687 const AlternativeService alternative_service2(kProtoHTTP2, "bar", 1234); | 711 const AlternativeService alternative_service2(kProtoHTTP2, "bar", 1234); |
| 688 alternative_service_info_vector.push_back( | 712 alternative_service_info_vector.push_back( |
| 689 AlternativeServiceInfo(alternative_service2, now + one_day)); | 713 AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( |
| 714 alternative_service2, now + one_day)); |
| 690 | 715 |
| 691 url::SchemeHostPort test_server("http", "foo", 80); | 716 url::SchemeHostPort test_server("http", "foo", 80); |
| 692 impl_.SetAlternativeServices(test_server, alternative_service_info_vector); | 717 impl_.SetAlternativeServices(test_server, alternative_service_info_vector); |
| 693 | 718 |
| 694 AlternativeServiceInfoVector alternative_service_info_vector2 = | 719 AlternativeServiceInfoVector alternative_service_info_vector2 = |
| 695 impl_.GetAlternativeServiceInfos(test_server); | 720 impl_.GetAlternativeServiceInfos(test_server); |
| 696 ASSERT_EQ(1u, alternative_service_info_vector2.size()); | 721 ASSERT_EQ(1u, alternative_service_info_vector2.size()); |
| 697 EXPECT_EQ(alternative_service2, | 722 EXPECT_EQ(alternative_service2, |
| 698 alternative_service_info_vector2[0].alternative_service()); | 723 alternative_service_info_vector2[0].alternative_service()); |
| 699 } | 724 } |
| 700 | 725 |
| 701 TEST_F(AlternateProtocolServerPropertiesTest, MaxAgeCanonical) { | 726 TEST_F(AlternateProtocolServerPropertiesTest, MaxAgeCanonical) { |
| 702 AlternativeServiceInfoVector alternative_service_info_vector; | 727 AlternativeServiceInfoVector alternative_service_info_vector; |
| 703 base::Time now = base::Time::Now(); | 728 base::Time now = base::Time::Now(); |
| 704 base::TimeDelta one_day = base::TimeDelta::FromDays(1); | 729 base::TimeDelta one_day = base::TimeDelta::FromDays(1); |
| 705 | 730 |
| 706 // First alternative service expired one day ago, should not be returned by | 731 // First alternative service expired one day ago, should not be returned by |
| 707 // GetAlternativeServiceInfos(). | 732 // GetAlternativeServiceInfos(). |
| 708 const AlternativeService alternative_service1(kProtoHTTP2, "foo", 443); | 733 const AlternativeService alternative_service1(kProtoHTTP2, "foo", 443); |
| 709 alternative_service_info_vector.push_back( | 734 alternative_service_info_vector.push_back( |
| 710 AlternativeServiceInfo(alternative_service1, now - one_day)); | 735 AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( |
| 736 alternative_service1, now - one_day)); |
| 711 | 737 |
| 712 // Second alterrnative service will expire one day from now, should be | 738 // Second alterrnative service will expire one day from now, should be |
| 713 // returned by GetAlternativeSerices(). | 739 // returned by GetAlternativeSerices(). |
| 714 const AlternativeService alternative_service2(kProtoHTTP2, "bar", 1234); | 740 const AlternativeService alternative_service2(kProtoHTTP2, "bar", 1234); |
| 715 alternative_service_info_vector.push_back( | 741 alternative_service_info_vector.push_back( |
| 716 AlternativeServiceInfo(alternative_service2, now + one_day)); | 742 AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( |
| 743 alternative_service2, now + one_day)); |
| 717 | 744 |
| 718 url::SchemeHostPort canonical_server("https", "bar.c.youtube.com", 443); | 745 url::SchemeHostPort canonical_server("https", "bar.c.youtube.com", 443); |
| 719 impl_.SetAlternativeServices(canonical_server, | 746 impl_.SetAlternativeServices(canonical_server, |
| 720 alternative_service_info_vector); | 747 alternative_service_info_vector); |
| 721 | 748 |
| 722 url::SchemeHostPort test_server("https", "foo.c.youtube.com", 443); | 749 url::SchemeHostPort test_server("https", "foo.c.youtube.com", 443); |
| 723 AlternativeServiceInfoVector alternative_service_info_vector2 = | 750 AlternativeServiceInfoVector alternative_service_info_vector2 = |
| 724 impl_.GetAlternativeServiceInfos(test_server); | 751 impl_.GetAlternativeServiceInfos(test_server); |
| 725 ASSERT_EQ(1u, alternative_service_info_vector2.size()); | 752 ASSERT_EQ(1u, alternative_service_info_vector2.size()); |
| 726 EXPECT_EQ(alternative_service2, | 753 EXPECT_EQ(alternative_service2, |
| 727 alternative_service_info_vector2[0].alternative_service()); | 754 alternative_service_info_vector2[0].alternative_service()); |
| 728 } | 755 } |
| 729 | 756 |
| 730 TEST_F(AlternateProtocolServerPropertiesTest, AlternativeServiceWithScheme) { | 757 TEST_F(AlternateProtocolServerPropertiesTest, AlternativeServiceWithScheme) { |
| 731 AlternativeServiceInfoVector alternative_service_info_vector; | 758 AlternativeServiceInfoVector alternative_service_info_vector; |
| 732 const AlternativeService alternative_service1(kProtoHTTP2, "foo", 443); | 759 const AlternativeService alternative_service1(kProtoHTTP2, "foo", 443); |
| 733 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); | 760 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
| 734 alternative_service_info_vector.push_back( | 761 alternative_service_info_vector.push_back( |
| 735 AlternativeServiceInfo(alternative_service1, expiration)); | 762 AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( |
| 763 alternative_service1, expiration)); |
| 736 const AlternativeService alternative_service2(kProtoHTTP2, "bar", 1234); | 764 const AlternativeService alternative_service2(kProtoHTTP2, "bar", 1234); |
| 737 alternative_service_info_vector.push_back( | 765 alternative_service_info_vector.push_back( |
| 738 AlternativeServiceInfo(alternative_service2, expiration)); | 766 AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( |
| 767 alternative_service2, expiration)); |
| 739 // Set Alt-Svc list for |http_server|. | 768 // Set Alt-Svc list for |http_server|. |
| 740 url::SchemeHostPort http_server("http", "foo", 80); | 769 url::SchemeHostPort http_server("http", "foo", 80); |
| 741 impl_.SetAlternativeServices(http_server, alternative_service_info_vector); | 770 impl_.SetAlternativeServices(http_server, alternative_service_info_vector); |
| 742 | 771 |
| 743 const net::AlternativeServiceMap& map = impl_.alternative_service_map(); | 772 const net::AlternativeServiceMap& map = impl_.alternative_service_map(); |
| 744 net::AlternativeServiceMap::const_iterator it = map.begin(); | 773 net::AlternativeServiceMap::const_iterator it = map.begin(); |
| 745 EXPECT_TRUE(it->first.Equals(http_server)); | 774 EXPECT_TRUE(it->first.Equals(http_server)); |
| 746 ASSERT_EQ(2u, it->second.size()); | 775 ASSERT_EQ(2u, it->second.size()); |
| 747 EXPECT_EQ(alternative_service1, it->second[0].alternative_service()); | 776 EXPECT_EQ(alternative_service1, it->second[0].alternative_service()); |
| 748 EXPECT_EQ(alternative_service2, it->second[1].alternative_service()); | 777 EXPECT_EQ(alternative_service2, it->second[1].alternative_service()); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 761 | 790 |
| 762 EXPECT_EQ(0u, impl_.GetAlternativeServiceInfos(http_server).size()); | 791 EXPECT_EQ(0u, impl_.GetAlternativeServiceInfos(http_server).size()); |
| 763 EXPECT_EQ(2u, impl_.GetAlternativeServiceInfos(https_server).size()); | 792 EXPECT_EQ(2u, impl_.GetAlternativeServiceInfos(https_server).size()); |
| 764 } | 793 } |
| 765 | 794 |
| 766 TEST_F(AlternateProtocolServerPropertiesTest, ClearAlternativeServices) { | 795 TEST_F(AlternateProtocolServerPropertiesTest, ClearAlternativeServices) { |
| 767 AlternativeServiceInfoVector alternative_service_info_vector; | 796 AlternativeServiceInfoVector alternative_service_info_vector; |
| 768 const AlternativeService alternative_service1(kProtoHTTP2, "foo", 443); | 797 const AlternativeService alternative_service1(kProtoHTTP2, "foo", 443); |
| 769 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); | 798 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
| 770 alternative_service_info_vector.push_back( | 799 alternative_service_info_vector.push_back( |
| 771 AlternativeServiceInfo(alternative_service1, expiration)); | 800 AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( |
| 801 alternative_service1, expiration)); |
| 772 const AlternativeService alternative_service2(kProtoHTTP2, "bar", 1234); | 802 const AlternativeService alternative_service2(kProtoHTTP2, "bar", 1234); |
| 773 alternative_service_info_vector.push_back( | 803 alternative_service_info_vector.push_back( |
| 774 AlternativeServiceInfo(alternative_service2, expiration)); | 804 AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( |
| 805 alternative_service2, expiration)); |
| 775 url::SchemeHostPort test_server("http", "foo", 80); | 806 url::SchemeHostPort test_server("http", "foo", 80); |
| 776 impl_.SetAlternativeServices(test_server, alternative_service_info_vector); | 807 impl_.SetAlternativeServices(test_server, alternative_service_info_vector); |
| 777 | 808 |
| 778 const net::AlternativeServiceMap& map = impl_.alternative_service_map(); | 809 const net::AlternativeServiceMap& map = impl_.alternative_service_map(); |
| 779 net::AlternativeServiceMap::const_iterator it = map.begin(); | 810 net::AlternativeServiceMap::const_iterator it = map.begin(); |
| 780 EXPECT_TRUE(it->first.Equals(test_server)); | 811 EXPECT_TRUE(it->first.Equals(test_server)); |
| 781 ASSERT_EQ(2u, it->second.size()); | 812 ASSERT_EQ(2u, it->second.size()); |
| 782 EXPECT_EQ(alternative_service1, it->second[0].alternative_service()); | 813 EXPECT_EQ(alternative_service1, it->second[0].alternative_service()); |
| 783 EXPECT_EQ(alternative_service2, it->second[1].alternative_service()); | 814 EXPECT_EQ(alternative_service2, it->second[1].alternative_service()); |
| 784 | 815 |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 850 EXPECT_FALSE(HasAlternativeService(test_server)); | 881 EXPECT_FALSE(HasAlternativeService(test_server)); |
| 851 | 882 |
| 852 url::SchemeHostPort canonical_server("https", "bar.c.youtube.com", 443); | 883 url::SchemeHostPort canonical_server("https", "bar.c.youtube.com", 443); |
| 853 EXPECT_FALSE(HasAlternativeService(canonical_server)); | 884 EXPECT_FALSE(HasAlternativeService(canonical_server)); |
| 854 | 885 |
| 855 AlternativeServiceInfoVector alternative_service_info_vector; | 886 AlternativeServiceInfoVector alternative_service_info_vector; |
| 856 const AlternativeService canonical_alternative_service1( | 887 const AlternativeService canonical_alternative_service1( |
| 857 kProtoQUIC, "bar.c.youtube.com", 1234); | 888 kProtoQUIC, "bar.c.youtube.com", 1234); |
| 858 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); | 889 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
| 859 alternative_service_info_vector.push_back( | 890 alternative_service_info_vector.push_back( |
| 860 AlternativeServiceInfo(canonical_alternative_service1, expiration)); | 891 AlternativeServiceInfo::CreateQuicAlternativeServiceInfo( |
| 892 canonical_alternative_service1, expiration, |
| 893 HttpNetworkSession::Params().quic_supported_versions)); |
| 861 const AlternativeService canonical_alternative_service2(kProtoHTTP2, "", 443); | 894 const AlternativeService canonical_alternative_service2(kProtoHTTP2, "", 443); |
| 862 alternative_service_info_vector.push_back( | 895 alternative_service_info_vector.push_back( |
| 863 AlternativeServiceInfo(canonical_alternative_service2, expiration)); | 896 AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( |
| 897 canonical_alternative_service2, expiration)); |
| 864 impl_.SetAlternativeServices(canonical_server, | 898 impl_.SetAlternativeServices(canonical_server, |
| 865 alternative_service_info_vector); | 899 alternative_service_info_vector); |
| 866 | 900 |
| 867 // Since |test_server| does not have an alternative service itself, | 901 // Since |test_server| does not have an alternative service itself, |
| 868 // GetAlternativeServiceInfos should return those of |canonical_server|. | 902 // GetAlternativeServiceInfos should return those of |canonical_server|. |
| 869 AlternativeServiceInfoVector alternative_service_info_vector2 = | 903 AlternativeServiceInfoVector alternative_service_info_vector2 = |
| 870 impl_.GetAlternativeServiceInfos(test_server); | 904 impl_.GetAlternativeServiceInfos(test_server); |
| 871 ASSERT_EQ(2u, alternative_service_info_vector2.size()); | 905 ASSERT_EQ(2u, alternative_service_info_vector2.size()); |
| 872 EXPECT_EQ(canonical_alternative_service1, | 906 EXPECT_EQ(canonical_alternative_service1, |
| 873 alternative_service_info_vector2[0].alternative_service()); | 907 alternative_service_info_vector2[0].alternative_service()); |
| (...skipping 445 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1319 EXPECT_EQ(quic_server_info1, *(impl_.GetQuicServerInfo(quic_server_id))); | 1353 EXPECT_EQ(quic_server_info1, *(impl_.GetQuicServerInfo(quic_server_id))); |
| 1320 | 1354 |
| 1321 impl_.Clear(); | 1355 impl_.Clear(); |
| 1322 EXPECT_EQ(0u, impl_.quic_server_info_map().size()); | 1356 EXPECT_EQ(0u, impl_.quic_server_info_map().size()); |
| 1323 EXPECT_EQ(nullptr, impl_.GetQuicServerInfo(quic_server_id)); | 1357 EXPECT_EQ(nullptr, impl_.GetQuicServerInfo(quic_server_id)); |
| 1324 } | 1358 } |
| 1325 | 1359 |
| 1326 } // namespace | 1360 } // namespace |
| 1327 | 1361 |
| 1328 } // namespace net | 1362 } // namespace net |
| OLD | NEW |