| 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/values.h" | 12 #include "base/values.h" |
| 13 #include "net/base/host_port_pair.h" | 13 #include "net/base/host_port_pair.h" |
| 14 #include "net/base/ip_address.h" | 14 #include "net/base/ip_address.h" |
| 15 #include "net/http/http_network_session.h" |
| 15 #include "testing/gtest/include/gtest/gtest.h" | 16 #include "testing/gtest/include/gtest/gtest.h" |
| 16 #include "url/gurl.h" | 17 #include "url/gurl.h" |
| 17 | 18 |
| 18 namespace base { | 19 namespace base { |
| 19 class ListValue; | 20 class ListValue; |
| 20 } | 21 } |
| 21 | 22 |
| 22 namespace net { | 23 namespace net { |
| 23 | 24 |
| 24 class HttpServerPropertiesImplPeer { | 25 class HttpServerPropertiesImplPeer { |
| (...skipping 28 matching lines...) Expand all Loading... |
| 53 bool HasAlternativeService(const url::SchemeHostPort& origin) { | 54 bool HasAlternativeService(const url::SchemeHostPort& origin) { |
| 54 const AlternativeServiceInfoVector alternative_service_info_vector = | 55 const AlternativeServiceInfoVector alternative_service_info_vector = |
| 55 impl_.GetAlternativeServiceInfos(origin); | 56 impl_.GetAlternativeServiceInfos(origin); |
| 56 return !alternative_service_info_vector.empty(); | 57 return !alternative_service_info_vector.empty(); |
| 57 } | 58 } |
| 58 | 59 |
| 59 bool SetAlternativeService(const url::SchemeHostPort& origin, | 60 bool SetAlternativeService(const url::SchemeHostPort& origin, |
| 60 const AlternativeService& alternative_service) { | 61 const AlternativeService& alternative_service) { |
| 61 const base::Time expiration = | 62 const base::Time expiration = |
| 62 base::Time::Now() + base::TimeDelta::FromDays(1); | 63 base::Time::Now() + base::TimeDelta::FromDays(1); |
| 63 return impl_.SetAlternativeService(origin, alternative_service, expiration); | 64 return impl_.SetAlternativeService( |
| 65 origin, alternative_service, expiration, |
| 66 HttpNetworkSession::Params().quic_supported_versions); |
| 64 } | 67 } |
| 65 | 68 |
| 66 HttpServerPropertiesImpl impl_; | 69 HttpServerPropertiesImpl impl_; |
| 67 }; | 70 }; |
| 68 | 71 |
| 69 typedef HttpServerPropertiesImplTest SpdyServerPropertiesTest; | 72 typedef HttpServerPropertiesImplTest SpdyServerPropertiesTest; |
| 70 | 73 |
| 71 TEST_F(SpdyServerPropertiesTest, SetWithSchemeHostPort) { | 74 TEST_F(SpdyServerPropertiesTest, SetWithSchemeHostPort) { |
| 72 // Check spdy servers are correctly set with SchemeHostPort key. | 75 // Check spdy servers are correctly set with SchemeHostPort key. |
| 73 url::SchemeHostPort https_www_server("https", "www.google.com", 443); | 76 url::SchemeHostPort https_www_server("https", "www.google.com", 443); |
| (...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 357 alternative_service_info_vector[0].alternative_service); | 360 alternative_service_info_vector[0].alternative_service); |
| 358 | 361 |
| 359 impl_.Clear(); | 362 impl_.Clear(); |
| 360 EXPECT_FALSE(HasAlternativeService(test_server)); | 363 EXPECT_FALSE(HasAlternativeService(test_server)); |
| 361 } | 364 } |
| 362 | 365 |
| 363 TEST_F(AlternateProtocolServerPropertiesTest, ExcludeOrigin) { | 366 TEST_F(AlternateProtocolServerPropertiesTest, ExcludeOrigin) { |
| 364 AlternativeServiceInfoVector alternative_service_info_vector; | 367 AlternativeServiceInfoVector alternative_service_info_vector; |
| 365 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); | 368 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
| 366 // Same hostname, same port, TCP: should be ignored. | 369 // Same hostname, same port, TCP: should be ignored. |
| 367 AlternativeServiceInfo alternative_service_info1(kProtoHTTP2, "foo", 443, | 370 AlternativeServiceInfo alternative_service_info1( |
| 368 expiration); | 371 AlternativeService(kProtoHTTP2, "foo", 443), expiration, |
| 372 HttpNetworkSession::Params().quic_supported_versions); |
| 369 alternative_service_info_vector.push_back(alternative_service_info1); | 373 alternative_service_info_vector.push_back(alternative_service_info1); |
| 370 // Different hostname: GetAlternativeServiceInfos should return this one. | 374 // Different hostname: GetAlternativeServiceInfos should return this one. |
| 371 AlternativeServiceInfo alternative_service_info2(kProtoHTTP2, "bar", 443, | 375 AlternativeServiceInfo alternative_service_info2( |
| 372 expiration); | 376 AlternativeService(kProtoHTTP2, "bar", 443), expiration, |
| 377 HttpNetworkSession::Params().quic_supported_versions); |
| 373 alternative_service_info_vector.push_back(alternative_service_info2); | 378 alternative_service_info_vector.push_back(alternative_service_info2); |
| 374 // Different port: GetAlternativeServiceInfos should return this one too. | 379 // Different port: GetAlternativeServiceInfos should return this one too. |
| 375 AlternativeServiceInfo alternative_service_info3(kProtoHTTP2, "foo", 80, | 380 AlternativeServiceInfo alternative_service_info3( |
| 376 expiration); | 381 AlternativeService(kProtoHTTP2, "foo", 80), expiration, |
| 382 HttpNetworkSession::Params().quic_supported_versions); |
| 377 alternative_service_info_vector.push_back(alternative_service_info3); | 383 alternative_service_info_vector.push_back(alternative_service_info3); |
| 378 // QUIC: GetAlternativeServices should return this one too. | 384 // QUIC: GetAlternativeServices should return this one too. |
| 379 AlternativeServiceInfo alternative_service_info4(kProtoQUIC, "foo", 443, | 385 AlternativeServiceInfo alternative_service_info4( |
| 380 expiration); | 386 AlternativeService(kProtoQUIC, "foo", 443), expiration, |
| 387 HttpNetworkSession::Params().quic_supported_versions); |
| 381 alternative_service_info_vector.push_back(alternative_service_info4); | 388 alternative_service_info_vector.push_back(alternative_service_info4); |
| 382 | 389 |
| 383 url::SchemeHostPort test_server("https", "foo", 443); | 390 url::SchemeHostPort test_server("https", "foo", 443); |
| 384 impl_.SetAlternativeServices(test_server, alternative_service_info_vector); | 391 impl_.SetAlternativeServices(test_server, alternative_service_info_vector); |
| 385 | 392 |
| 386 const AlternativeServiceInfoVector alternative_service_info_vector2 = | 393 const AlternativeServiceInfoVector alternative_service_info_vector2 = |
| 387 impl_.GetAlternativeServiceInfos(test_server); | 394 impl_.GetAlternativeServiceInfos(test_server); |
| 388 ASSERT_EQ(3u, alternative_service_info_vector2.size()); | 395 ASSERT_EQ(3u, alternative_service_info_vector2.size()); |
| 389 EXPECT_EQ(alternative_service_info2, alternative_service_info_vector2[0]); | 396 EXPECT_EQ(alternative_service_info2, alternative_service_info_vector2[0]); |
| 390 EXPECT_EQ(alternative_service_info3, alternative_service_info_vector2[1]); | 397 EXPECT_EQ(alternative_service_info3, alternative_service_info_vector2[1]); |
| 391 EXPECT_EQ(alternative_service_info4, alternative_service_info_vector2[2]); | 398 EXPECT_EQ(alternative_service_info4, alternative_service_info_vector2[2]); |
| 392 } | 399 } |
| 393 | 400 |
| 394 TEST_F(AlternateProtocolServerPropertiesTest, Set) { | 401 TEST_F(AlternateProtocolServerPropertiesTest, Set) { |
| 395 // |test_server1| has an alternative service, which will not be | 402 // |test_server1| has an alternative service, which will not be |
| 396 // affected by SetAlternativeServiceServers(), because | 403 // affected by SetAlternativeServiceServers(), because |
| 397 // |alternative_service_map| does not have an entry for | 404 // |alternative_service_map| does not have an entry for |
| 398 // |test_server1|. | 405 // |test_server1|. |
| 399 url::SchemeHostPort test_server1("http", "foo1", 80); | 406 url::SchemeHostPort test_server1("http", "foo1", 80); |
| 400 const AlternativeService alternative_service1(kProtoHTTP2, "bar1", 443); | 407 const AlternativeService alternative_service1(kProtoHTTP2, "bar1", 443); |
| 401 const base::Time now = base::Time::Now(); | 408 const base::Time now = base::Time::Now(); |
| 402 base::Time expiration1 = now + base::TimeDelta::FromDays(1); | 409 base::Time expiration1 = now + base::TimeDelta::FromDays(1); |
| 403 // 1st entry in the memory. | 410 // 1st entry in the memory. |
| 404 impl_.SetAlternativeService(test_server1, alternative_service1, expiration1); | 411 impl_.SetAlternativeService( |
| 412 test_server1, alternative_service1, expiration1, |
| 413 HttpNetworkSession::Params().quic_supported_versions); |
| 405 | 414 |
| 406 // |test_server2| has an alternative service, which will be | 415 // |test_server2| has an alternative service, which will be |
| 407 // overwritten by SetAlternativeServiceServers(), because | 416 // overwritten by SetAlternativeServiceServers(), because |
| 408 // |alternative_service_map| has an entry for | 417 // |alternative_service_map| has an entry for |
| 409 // |test_server2|. | 418 // |test_server2|. |
| 410 AlternativeServiceInfoVector alternative_service_info_vector; | 419 AlternativeServiceInfoVector alternative_service_info_vector; |
| 411 const AlternativeService alternative_service2(kProtoHTTP2, "bar2", 443); | 420 const AlternativeService alternative_service2(kProtoHTTP2, "bar2", 443); |
| 412 base::Time expiration2 = now + base::TimeDelta::FromDays(2); | 421 base::Time expiration2 = now + base::TimeDelta::FromDays(2); |
| 413 alternative_service_info_vector.push_back( | 422 alternative_service_info_vector.push_back(AlternativeServiceInfo( |
| 414 AlternativeServiceInfo(alternative_service2, expiration2)); | 423 alternative_service2, expiration2, |
| 424 HttpNetworkSession::Params().quic_supported_versions)); |
| 415 url::SchemeHostPort test_server2("http", "foo2", 80); | 425 url::SchemeHostPort test_server2("http", "foo2", 80); |
| 416 // 0th entry in the memory. | 426 // 0th entry in the memory. |
| 417 impl_.SetAlternativeServices(test_server2, alternative_service_info_vector); | 427 impl_.SetAlternativeServices(test_server2, alternative_service_info_vector); |
| 418 | 428 |
| 419 // Prepare |alternative_service_map| to be loaded by | 429 // Prepare |alternative_service_map| to be loaded by |
| 420 // SetAlternativeServiceServers(). | 430 // SetAlternativeServiceServers(). |
| 421 AlternativeServiceMap alternative_service_map( | 431 AlternativeServiceMap alternative_service_map( |
| 422 AlternativeServiceMap::NO_AUTO_EVICT); | 432 AlternativeServiceMap::NO_AUTO_EVICT); |
| 423 const AlternativeService alternative_service3(kProtoHTTP2, "bar3", 123); | 433 const AlternativeService alternative_service3(kProtoHTTP2, "bar3", 123); |
| 424 base::Time expiration3 = now + base::TimeDelta::FromDays(3); | 434 base::Time expiration3 = now + base::TimeDelta::FromDays(3); |
| 425 const AlternativeServiceInfo alternative_service_info1(alternative_service3, | 435 const AlternativeServiceInfo alternative_service_info1( |
| 426 expiration3); | 436 alternative_service3, expiration3, |
| 437 HttpNetworkSession::Params().quic_supported_versions); |
| 427 // Simulate updating data for 0th entry with data from Preferences. | 438 // Simulate updating data for 0th entry with data from Preferences. |
| 428 alternative_service_map.Put( | 439 alternative_service_map.Put( |
| 429 test_server2, | 440 test_server2, |
| 430 AlternativeServiceInfoVector(/*size=*/1, alternative_service_info1)); | 441 AlternativeServiceInfoVector(/*size=*/1, alternative_service_info1)); |
| 431 | 442 |
| 432 url::SchemeHostPort test_server3("http", "foo3", 80); | 443 url::SchemeHostPort test_server3("http", "foo3", 80); |
| 433 const AlternativeService alternative_service4(kProtoHTTP2, "bar4", 1234); | 444 const AlternativeService alternative_service4(kProtoHTTP2, "bar4", 1234); |
| 434 base::Time expiration4 = now + base::TimeDelta::FromDays(4); | 445 base::Time expiration4 = now + base::TimeDelta::FromDays(4); |
| 435 const AlternativeServiceInfo alternative_service_info2(alternative_service4, | 446 const AlternativeServiceInfo alternative_service_info2( |
| 436 expiration4); | 447 alternative_service4, expiration4, |
| 448 HttpNetworkSession::Params().quic_supported_versions); |
| 437 // Add an old entry from Preferences, this will be added to end of recency | 449 // Add an old entry from Preferences, this will be added to end of recency |
| 438 // list. | 450 // list. |
| 439 alternative_service_map.Put( | 451 alternative_service_map.Put( |
| 440 test_server3, | 452 test_server3, |
| 441 AlternativeServiceInfoVector(/*size=*/1, alternative_service_info2)); | 453 AlternativeServiceInfoVector(/*size=*/1, alternative_service_info2)); |
| 442 | 454 |
| 443 // MRU list will be test_server2, test_server1, test_server3. | 455 // MRU list will be test_server2, test_server1, test_server3. |
| 444 impl_.SetAlternativeServiceServers(&alternative_service_map); | 456 impl_.SetAlternativeServiceServers(&alternative_service_map); |
| 445 | 457 |
| 446 // Verify alternative_service_map. | 458 // Verify alternative_service_map. |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 489 alternative_service_info_vector[0].alternative_service); | 501 alternative_service_info_vector[0].alternative_service); |
| 490 } | 502 } |
| 491 | 503 |
| 492 // Regression test for https://crbug.com/516486: | 504 // Regression test for https://crbug.com/516486: |
| 493 // GetAlternativeServiceInfos() should remove |alternative_service_map_| | 505 // GetAlternativeServiceInfos() should remove |alternative_service_map_| |
| 494 // elements with empty value. | 506 // elements with empty value. |
| 495 TEST_F(AlternateProtocolServerPropertiesTest, EmptyVector) { | 507 TEST_F(AlternateProtocolServerPropertiesTest, EmptyVector) { |
| 496 url::SchemeHostPort server("https", "foo", 443); | 508 url::SchemeHostPort server("https", "foo", 443); |
| 497 const AlternativeService alternative_service(kProtoHTTP2, "bar", 443); | 509 const AlternativeService alternative_service(kProtoHTTP2, "bar", 443); |
| 498 base::Time expiration = base::Time::Now() - base::TimeDelta::FromDays(1); | 510 base::Time expiration = base::Time::Now() - base::TimeDelta::FromDays(1); |
| 499 const AlternativeServiceInfo alternative_service_info(alternative_service, | 511 const AlternativeServiceInfo alternative_service_info( |
| 500 expiration); | 512 alternative_service, expiration, |
| 513 HttpNetworkSession::Params().quic_supported_versions); |
| 501 AlternativeServiceMap alternative_service_map( | 514 AlternativeServiceMap alternative_service_map( |
| 502 AlternativeServiceMap::NO_AUTO_EVICT); | 515 AlternativeServiceMap::NO_AUTO_EVICT); |
| 503 alternative_service_map.Put( | 516 alternative_service_map.Put( |
| 504 server, | 517 server, |
| 505 AlternativeServiceInfoVector(/*size=*/1, alternative_service_info)); | 518 AlternativeServiceInfoVector(/*size=*/1, alternative_service_info)); |
| 506 | 519 |
| 507 // Prepare |alternative_service_map_| with a single key that has a single | 520 // Prepare |alternative_service_map_| with a single key that has a single |
| 508 // AlternativeServiceInfo with identical hostname and port. | 521 // AlternativeServiceInfo with identical hostname and port. |
| 509 impl_.SetAlternativeServiceServers(&alternative_service_map); | 522 impl_.SetAlternativeServiceServers(&alternative_service_map); |
| 510 | 523 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 522 // There should still be no alternative service assigned to |server|. | 535 // There should still be no alternative service assigned to |server|. |
| 523 ASSERT_TRUE(impl_.GetAlternativeServiceInfos(server).empty()); | 536 ASSERT_TRUE(impl_.GetAlternativeServiceInfos(server).empty()); |
| 524 } | 537 } |
| 525 | 538 |
| 526 // Regression test for https://crbug.com/516486 for the canonical host case. | 539 // Regression test for https://crbug.com/516486 for the canonical host case. |
| 527 TEST_F(AlternateProtocolServerPropertiesTest, EmptyVectorForCanonical) { | 540 TEST_F(AlternateProtocolServerPropertiesTest, EmptyVectorForCanonical) { |
| 528 url::SchemeHostPort server("https", "foo.c.youtube.com", 443); | 541 url::SchemeHostPort server("https", "foo.c.youtube.com", 443); |
| 529 url::SchemeHostPort canonical_server("https", "bar.c.youtube.com", 443); | 542 url::SchemeHostPort canonical_server("https", "bar.c.youtube.com", 443); |
| 530 const AlternativeService alternative_service(kProtoHTTP2, "", 443); | 543 const AlternativeService alternative_service(kProtoHTTP2, "", 443); |
| 531 base::Time expiration = base::Time::Now() - base::TimeDelta::FromDays(1); | 544 base::Time expiration = base::Time::Now() - base::TimeDelta::FromDays(1); |
| 532 const AlternativeServiceInfo alternative_service_info(alternative_service, | 545 const AlternativeServiceInfo alternative_service_info( |
| 533 expiration); | 546 alternative_service, expiration, |
| 547 HttpNetworkSession::Params().quic_supported_versions); |
| 534 AlternativeServiceMap alternative_service_map( | 548 AlternativeServiceMap alternative_service_map( |
| 535 AlternativeServiceMap::NO_AUTO_EVICT); | 549 AlternativeServiceMap::NO_AUTO_EVICT); |
| 536 alternative_service_map.Put( | 550 alternative_service_map.Put( |
| 537 canonical_server, | 551 canonical_server, |
| 538 AlternativeServiceInfoVector(/*size=*/1, alternative_service_info)); | 552 AlternativeServiceInfoVector(/*size=*/1, alternative_service_info)); |
| 539 | 553 |
| 540 // Prepare |alternative_service_map_| with a single key that has a single | 554 // Prepare |alternative_service_map_| with a single key that has a single |
| 541 // AlternativeServiceInfo with identical hostname and port. | 555 // AlternativeServiceInfo with identical hostname and port. |
| 542 impl_.SetAlternativeServiceServers(&alternative_service_map); | 556 impl_.SetAlternativeServiceServers(&alternative_service_map); |
| 543 | 557 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 556 // There should still be no alternative service assigned to | 570 // There should still be no alternative service assigned to |
| 557 // |canonical_server|. | 571 // |canonical_server|. |
| 558 ASSERT_TRUE(impl_.GetAlternativeServiceInfos(canonical_server).empty()); | 572 ASSERT_TRUE(impl_.GetAlternativeServiceInfos(canonical_server).empty()); |
| 559 } | 573 } |
| 560 | 574 |
| 561 TEST_F(AlternateProtocolServerPropertiesTest, ClearServerWithCanonical) { | 575 TEST_F(AlternateProtocolServerPropertiesTest, ClearServerWithCanonical) { |
| 562 url::SchemeHostPort server("https", "foo.c.youtube.com", 443); | 576 url::SchemeHostPort server("https", "foo.c.youtube.com", 443); |
| 563 url::SchemeHostPort canonical_server("https", "bar.c.youtube.com", 443); | 577 url::SchemeHostPort canonical_server("https", "bar.c.youtube.com", 443); |
| 564 const AlternativeService alternative_service(kProtoQUIC, "", 443); | 578 const AlternativeService alternative_service(kProtoQUIC, "", 443); |
| 565 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); | 579 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
| 566 const AlternativeServiceInfo alternative_service_info(alternative_service, | 580 const AlternativeServiceInfo alternative_service_info( |
| 567 expiration); | 581 alternative_service, expiration, |
| 582 HttpNetworkSession::Params().quic_supported_versions); |
| 568 | 583 |
| 569 impl_.SetAlternativeServices( | 584 impl_.SetAlternativeServices( |
| 570 canonical_server, | 585 canonical_server, |
| 571 AlternativeServiceInfoVector(/*size=*/1, alternative_service_info)); | 586 AlternativeServiceInfoVector(/*size=*/1, alternative_service_info)); |
| 572 | 587 |
| 573 // Make sure the canonical service is returned for the other server. | 588 // Make sure the canonical service is returned for the other server. |
| 574 const AlternativeServiceInfoVector alternative_service_info_vector = | 589 const AlternativeServiceInfoVector alternative_service_info_vector = |
| 575 impl_.GetAlternativeServiceInfos(server); | 590 impl_.GetAlternativeServiceInfos(server); |
| 576 ASSERT_EQ(1u, alternative_service_info_vector.size()); | 591 ASSERT_EQ(1u, alternative_service_info_vector.size()); |
| 577 EXPECT_EQ(kProtoQUIC, | 592 EXPECT_EQ(kProtoQUIC, |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 630 alternative_service_info_vector = | 645 alternative_service_info_vector = |
| 631 impl_.GetAlternativeServiceInfos(test_server); | 646 impl_.GetAlternativeServiceInfos(test_server); |
| 632 ASSERT_EQ(1u, alternative_service_info_vector.size()); | 647 ASSERT_EQ(1u, alternative_service_info_vector.size()); |
| 633 EXPECT_EQ(alternative_service1, | 648 EXPECT_EQ(alternative_service1, |
| 634 alternative_service_info_vector[0].alternative_service); | 649 alternative_service_info_vector[0].alternative_service); |
| 635 EXPECT_TRUE(impl_.IsAlternativeServiceBroken(alternative_service1)); | 650 EXPECT_TRUE(impl_.IsAlternativeServiceBroken(alternative_service1)); |
| 636 | 651 |
| 637 // SetAlternativeServices should add a broken alternative service to the map. | 652 // SetAlternativeServices should add a broken alternative service to the map. |
| 638 AlternativeServiceInfoVector alternative_service_info_vector2; | 653 AlternativeServiceInfoVector alternative_service_info_vector2; |
| 639 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); | 654 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
| 640 alternative_service_info_vector2.push_back( | 655 |
| 641 AlternativeServiceInfo(alternative_service1, expiration)); | 656 alternative_service_info_vector2.push_back(AlternativeServiceInfo( |
| 657 alternative_service1, expiration, |
| 658 HttpNetworkSession::Params().quic_supported_versions)); |
| 642 const AlternativeService alternative_service2(kProtoHTTP2, "foo", 1234); | 659 const AlternativeService alternative_service2(kProtoHTTP2, "foo", 1234); |
| 643 alternative_service_info_vector2.push_back( | 660 alternative_service_info_vector2.push_back(AlternativeServiceInfo( |
| 644 AlternativeServiceInfo(alternative_service2, expiration)); | 661 alternative_service2, expiration, |
| 662 HttpNetworkSession::Params().quic_supported_versions)); |
| 645 impl_.SetAlternativeServices(test_server, alternative_service_info_vector2); | 663 impl_.SetAlternativeServices(test_server, alternative_service_info_vector2); |
| 646 alternative_service_info_vector = | 664 alternative_service_info_vector = |
| 647 impl_.GetAlternativeServiceInfos(test_server); | 665 impl_.GetAlternativeServiceInfos(test_server); |
| 648 ASSERT_EQ(2u, alternative_service_info_vector.size()); | 666 ASSERT_EQ(2u, alternative_service_info_vector.size()); |
| 649 EXPECT_EQ(alternative_service1, | 667 EXPECT_EQ(alternative_service1, |
| 650 alternative_service_info_vector[0].alternative_service); | 668 alternative_service_info_vector[0].alternative_service); |
| 651 EXPECT_EQ(alternative_service2, | 669 EXPECT_EQ(alternative_service2, |
| 652 alternative_service_info_vector[1].alternative_service); | 670 alternative_service_info_vector[1].alternative_service); |
| 653 EXPECT_TRUE(impl_.IsAlternativeServiceBroken(alternative_service1)); | 671 EXPECT_TRUE(impl_.IsAlternativeServiceBroken(alternative_service1)); |
| 654 EXPECT_FALSE(impl_.IsAlternativeServiceBroken(alternative_service2)); | 672 EXPECT_FALSE(impl_.IsAlternativeServiceBroken(alternative_service2)); |
| 655 | 673 |
| 656 // SetAlternativeService should add a broken alternative service to the map. | 674 // SetAlternativeService should add a broken alternative service to the map. |
| 657 SetAlternativeService(test_server, alternative_service1); | 675 SetAlternativeService(test_server, alternative_service1); |
| 658 alternative_service_info_vector = | 676 alternative_service_info_vector = |
| 659 impl_.GetAlternativeServiceInfos(test_server); | 677 impl_.GetAlternativeServiceInfos(test_server); |
| 660 ASSERT_EQ(1u, alternative_service_info_vector.size()); | 678 ASSERT_EQ(1u, alternative_service_info_vector.size()); |
| 661 EXPECT_EQ(alternative_service1, | 679 EXPECT_EQ(alternative_service1, |
| 662 alternative_service_info_vector[0].alternative_service); | 680 alternative_service_info_vector[0].alternative_service); |
| 663 EXPECT_TRUE(impl_.IsAlternativeServiceBroken(alternative_service1)); | 681 EXPECT_TRUE(impl_.IsAlternativeServiceBroken(alternative_service1)); |
| 664 } | 682 } |
| 665 | 683 |
| 666 TEST_F(AlternateProtocolServerPropertiesTest, MaxAge) { | 684 TEST_F(AlternateProtocolServerPropertiesTest, MaxAge) { |
| 667 AlternativeServiceInfoVector alternative_service_info_vector; | 685 AlternativeServiceInfoVector alternative_service_info_vector; |
| 668 base::Time now = base::Time::Now(); | 686 base::Time now = base::Time::Now(); |
| 669 base::TimeDelta one_day = base::TimeDelta::FromDays(1); | 687 base::TimeDelta one_day = base::TimeDelta::FromDays(1); |
| 670 | 688 |
| 671 // First alternative service expired one day ago, should not be returned by | 689 // First alternative service expired one day ago, should not be returned by |
| 672 // GetAlternativeServiceInfos(). | 690 // GetAlternativeServiceInfos(). |
| 673 const AlternativeService alternative_service1(kProtoHTTP2, "foo", 443); | 691 const AlternativeService alternative_service1(kProtoHTTP2, "foo", 443); |
| 674 alternative_service_info_vector.push_back( | 692 alternative_service_info_vector.push_back(AlternativeServiceInfo( |
| 675 AlternativeServiceInfo(alternative_service1, now - one_day)); | 693 alternative_service1, now - one_day, |
| 694 HttpNetworkSession::Params().quic_supported_versions)); |
| 676 | 695 |
| 677 // Second alterrnative service will expire one day from now, should be | 696 // Second alterrnative service will expire one day from now, should be |
| 678 // returned by GetAlternativeSerices(). | 697 // returned by GetAlternativeSerices(). |
| 679 const AlternativeService alternative_service2(kProtoHTTP2, "bar", 1234); | 698 const AlternativeService alternative_service2(kProtoHTTP2, "bar", 1234); |
| 680 alternative_service_info_vector.push_back( | 699 alternative_service_info_vector.push_back(AlternativeServiceInfo( |
| 681 AlternativeServiceInfo(alternative_service2, now + one_day)); | 700 alternative_service2, now + one_day, |
| 701 HttpNetworkSession::Params().quic_supported_versions)); |
| 682 | 702 |
| 683 url::SchemeHostPort test_server("http", "foo", 80); | 703 url::SchemeHostPort test_server("http", "foo", 80); |
| 684 impl_.SetAlternativeServices(test_server, alternative_service_info_vector); | 704 impl_.SetAlternativeServices(test_server, alternative_service_info_vector); |
| 685 | 705 |
| 686 AlternativeServiceInfoVector alternative_service_info_vector2 = | 706 AlternativeServiceInfoVector alternative_service_info_vector2 = |
| 687 impl_.GetAlternativeServiceInfos(test_server); | 707 impl_.GetAlternativeServiceInfos(test_server); |
| 688 ASSERT_EQ(1u, alternative_service_info_vector2.size()); | 708 ASSERT_EQ(1u, alternative_service_info_vector2.size()); |
| 689 EXPECT_EQ(alternative_service2, | 709 EXPECT_EQ(alternative_service2, |
| 690 alternative_service_info_vector2[0].alternative_service); | 710 alternative_service_info_vector2[0].alternative_service); |
| 691 } | 711 } |
| 692 | 712 |
| 693 TEST_F(AlternateProtocolServerPropertiesTest, MaxAgeCanonical) { | 713 TEST_F(AlternateProtocolServerPropertiesTest, MaxAgeCanonical) { |
| 694 AlternativeServiceInfoVector alternative_service_info_vector; | 714 AlternativeServiceInfoVector alternative_service_info_vector; |
| 695 base::Time now = base::Time::Now(); | 715 base::Time now = base::Time::Now(); |
| 696 base::TimeDelta one_day = base::TimeDelta::FromDays(1); | 716 base::TimeDelta one_day = base::TimeDelta::FromDays(1); |
| 697 | 717 |
| 698 // First alternative service expired one day ago, should not be returned by | 718 // First alternative service expired one day ago, should not be returned by |
| 699 // GetAlternativeServiceInfos(). | 719 // GetAlternativeServiceInfos(). |
| 700 const AlternativeService alternative_service1(kProtoHTTP2, "foo", 443); | 720 const AlternativeService alternative_service1(kProtoHTTP2, "foo", 443); |
| 701 alternative_service_info_vector.push_back( | 721 alternative_service_info_vector.push_back(AlternativeServiceInfo( |
| 702 AlternativeServiceInfo(alternative_service1, now - one_day)); | 722 alternative_service1, now - one_day, |
| 723 HttpNetworkSession::Params().quic_supported_versions)); |
| 703 | 724 |
| 704 // Second alterrnative service will expire one day from now, should be | 725 // Second alterrnative service will expire one day from now, should be |
| 705 // returned by GetAlternativeSerices(). | 726 // returned by GetAlternativeSerices(). |
| 706 const AlternativeService alternative_service2(kProtoHTTP2, "bar", 1234); | 727 const AlternativeService alternative_service2(kProtoHTTP2, "bar", 1234); |
| 707 alternative_service_info_vector.push_back( | 728 alternative_service_info_vector.push_back(AlternativeServiceInfo( |
| 708 AlternativeServiceInfo(alternative_service2, now + one_day)); | 729 alternative_service2, now + one_day, |
| 730 HttpNetworkSession::Params().quic_supported_versions)); |
| 709 | 731 |
| 710 url::SchemeHostPort canonical_server("https", "bar.c.youtube.com", 443); | 732 url::SchemeHostPort canonical_server("https", "bar.c.youtube.com", 443); |
| 711 impl_.SetAlternativeServices(canonical_server, | 733 impl_.SetAlternativeServices(canonical_server, |
| 712 alternative_service_info_vector); | 734 alternative_service_info_vector); |
| 713 | 735 |
| 714 url::SchemeHostPort test_server("https", "foo.c.youtube.com", 443); | 736 url::SchemeHostPort test_server("https", "foo.c.youtube.com", 443); |
| 715 AlternativeServiceInfoVector alternative_service_info_vector2 = | 737 AlternativeServiceInfoVector alternative_service_info_vector2 = |
| 716 impl_.GetAlternativeServiceInfos(test_server); | 738 impl_.GetAlternativeServiceInfos(test_server); |
| 717 ASSERT_EQ(1u, alternative_service_info_vector2.size()); | 739 ASSERT_EQ(1u, alternative_service_info_vector2.size()); |
| 718 EXPECT_EQ(alternative_service2, | 740 EXPECT_EQ(alternative_service2, |
| 719 alternative_service_info_vector2[0].alternative_service); | 741 alternative_service_info_vector2[0].alternative_service); |
| 720 } | 742 } |
| 721 | 743 |
| 722 TEST_F(AlternateProtocolServerPropertiesTest, AlternativeServiceWithScheme) { | 744 TEST_F(AlternateProtocolServerPropertiesTest, AlternativeServiceWithScheme) { |
| 723 AlternativeServiceInfoVector alternative_service_info_vector; | 745 AlternativeServiceInfoVector alternative_service_info_vector; |
| 724 const AlternativeService alternative_service1(kProtoHTTP2, "foo", 443); | 746 const AlternativeService alternative_service1(kProtoHTTP2, "foo", 443); |
| 725 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); | 747 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
| 726 alternative_service_info_vector.push_back( | 748 alternative_service_info_vector.push_back(AlternativeServiceInfo( |
| 727 AlternativeServiceInfo(alternative_service1, expiration)); | 749 alternative_service1, expiration, |
| 750 HttpNetworkSession::Params().quic_supported_versions)); |
| 728 const AlternativeService alternative_service2(kProtoHTTP2, "bar", 1234); | 751 const AlternativeService alternative_service2(kProtoHTTP2, "bar", 1234); |
| 729 alternative_service_info_vector.push_back( | 752 alternative_service_info_vector.push_back(AlternativeServiceInfo( |
| 730 AlternativeServiceInfo(alternative_service2, expiration)); | 753 alternative_service2, expiration, |
| 754 HttpNetworkSession::Params().quic_supported_versions)); |
| 731 // Set Alt-Svc list for |http_server|. | 755 // Set Alt-Svc list for |http_server|. |
| 732 url::SchemeHostPort http_server("http", "foo", 80); | 756 url::SchemeHostPort http_server("http", "foo", 80); |
| 733 impl_.SetAlternativeServices(http_server, alternative_service_info_vector); | 757 impl_.SetAlternativeServices(http_server, alternative_service_info_vector); |
| 734 | 758 |
| 735 const net::AlternativeServiceMap& map = impl_.alternative_service_map(); | 759 const net::AlternativeServiceMap& map = impl_.alternative_service_map(); |
| 736 net::AlternativeServiceMap::const_iterator it = map.begin(); | 760 net::AlternativeServiceMap::const_iterator it = map.begin(); |
| 737 EXPECT_TRUE(it->first.Equals(http_server)); | 761 EXPECT_TRUE(it->first.Equals(http_server)); |
| 738 ASSERT_EQ(2u, it->second.size()); | 762 ASSERT_EQ(2u, it->second.size()); |
| 739 EXPECT_EQ(alternative_service1, it->second[0].alternative_service); | 763 EXPECT_EQ(alternative_service1, it->second[0].alternative_service); |
| 740 EXPECT_EQ(alternative_service2, it->second[1].alternative_service); | 764 EXPECT_EQ(alternative_service2, it->second[1].alternative_service); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 752 impl_.SetAlternativeServices(http_server, AlternativeServiceInfoVector()); | 776 impl_.SetAlternativeServices(http_server, AlternativeServiceInfoVector()); |
| 753 | 777 |
| 754 EXPECT_EQ(0u, impl_.GetAlternativeServiceInfos(http_server).size()); | 778 EXPECT_EQ(0u, impl_.GetAlternativeServiceInfos(http_server).size()); |
| 755 EXPECT_EQ(2u, impl_.GetAlternativeServiceInfos(https_server).size()); | 779 EXPECT_EQ(2u, impl_.GetAlternativeServiceInfos(https_server).size()); |
| 756 } | 780 } |
| 757 | 781 |
| 758 TEST_F(AlternateProtocolServerPropertiesTest, ClearAlternativeServices) { | 782 TEST_F(AlternateProtocolServerPropertiesTest, ClearAlternativeServices) { |
| 759 AlternativeServiceInfoVector alternative_service_info_vector; | 783 AlternativeServiceInfoVector alternative_service_info_vector; |
| 760 const AlternativeService alternative_service1(kProtoHTTP2, "foo", 443); | 784 const AlternativeService alternative_service1(kProtoHTTP2, "foo", 443); |
| 761 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); | 785 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
| 762 alternative_service_info_vector.push_back( | 786 alternative_service_info_vector.push_back(AlternativeServiceInfo( |
| 763 AlternativeServiceInfo(alternative_service1, expiration)); | 787 alternative_service1, expiration, |
| 788 HttpNetworkSession::Params().quic_supported_versions)); |
| 764 const AlternativeService alternative_service2(kProtoHTTP2, "bar", 1234); | 789 const AlternativeService alternative_service2(kProtoHTTP2, "bar", 1234); |
| 765 alternative_service_info_vector.push_back( | 790 alternative_service_info_vector.push_back(AlternativeServiceInfo( |
| 766 AlternativeServiceInfo(alternative_service2, expiration)); | 791 alternative_service2, expiration, |
| 792 HttpNetworkSession::Params().quic_supported_versions)); |
| 767 url::SchemeHostPort test_server("http", "foo", 80); | 793 url::SchemeHostPort test_server("http", "foo", 80); |
| 768 impl_.SetAlternativeServices(test_server, alternative_service_info_vector); | 794 impl_.SetAlternativeServices(test_server, alternative_service_info_vector); |
| 769 | 795 |
| 770 const net::AlternativeServiceMap& map = impl_.alternative_service_map(); | 796 const net::AlternativeServiceMap& map = impl_.alternative_service_map(); |
| 771 net::AlternativeServiceMap::const_iterator it = map.begin(); | 797 net::AlternativeServiceMap::const_iterator it = map.begin(); |
| 772 EXPECT_TRUE(it->first.Equals(test_server)); | 798 EXPECT_TRUE(it->first.Equals(test_server)); |
| 773 ASSERT_EQ(2u, it->second.size()); | 799 ASSERT_EQ(2u, it->second.size()); |
| 774 EXPECT_EQ(alternative_service1, it->second[0].alternative_service); | 800 EXPECT_EQ(alternative_service1, it->second[0].alternative_service); |
| 775 EXPECT_EQ(alternative_service2, it->second[1].alternative_service); | 801 EXPECT_EQ(alternative_service2, it->second[1].alternative_service); |
| 776 | 802 |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 841 url::SchemeHostPort test_server("https", "foo.c.youtube.com", 443); | 867 url::SchemeHostPort test_server("https", "foo.c.youtube.com", 443); |
| 842 EXPECT_FALSE(HasAlternativeService(test_server)); | 868 EXPECT_FALSE(HasAlternativeService(test_server)); |
| 843 | 869 |
| 844 url::SchemeHostPort canonical_server("https", "bar.c.youtube.com", 443); | 870 url::SchemeHostPort canonical_server("https", "bar.c.youtube.com", 443); |
| 845 EXPECT_FALSE(HasAlternativeService(canonical_server)); | 871 EXPECT_FALSE(HasAlternativeService(canonical_server)); |
| 846 | 872 |
| 847 AlternativeServiceInfoVector alternative_service_info_vector; | 873 AlternativeServiceInfoVector alternative_service_info_vector; |
| 848 const AlternativeService canonical_alternative_service1( | 874 const AlternativeService canonical_alternative_service1( |
| 849 kProtoQUIC, "bar.c.youtube.com", 1234); | 875 kProtoQUIC, "bar.c.youtube.com", 1234); |
| 850 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); | 876 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
| 851 alternative_service_info_vector.push_back( | 877 alternative_service_info_vector.push_back(AlternativeServiceInfo( |
| 852 AlternativeServiceInfo(canonical_alternative_service1, expiration)); | 878 canonical_alternative_service1, expiration, |
| 879 HttpNetworkSession::Params().quic_supported_versions)); |
| 853 const AlternativeService canonical_alternative_service2(kProtoHTTP2, "", 443); | 880 const AlternativeService canonical_alternative_service2(kProtoHTTP2, "", 443); |
| 854 alternative_service_info_vector.push_back( | 881 alternative_service_info_vector.push_back(AlternativeServiceInfo( |
| 855 AlternativeServiceInfo(canonical_alternative_service2, expiration)); | 882 canonical_alternative_service2, expiration, |
| 883 HttpNetworkSession::Params().quic_supported_versions)); |
| 856 impl_.SetAlternativeServices(canonical_server, | 884 impl_.SetAlternativeServices(canonical_server, |
| 857 alternative_service_info_vector); | 885 alternative_service_info_vector); |
| 858 | 886 |
| 859 // Since |test_server| does not have an alternative service itself, | 887 // Since |test_server| does not have an alternative service itself, |
| 860 // GetAlternativeServiceInfos should return those of |canonical_server|. | 888 // GetAlternativeServiceInfos should return those of |canonical_server|. |
| 861 AlternativeServiceInfoVector alternative_service_info_vector2 = | 889 AlternativeServiceInfoVector alternative_service_info_vector2 = |
| 862 impl_.GetAlternativeServiceInfos(test_server); | 890 impl_.GetAlternativeServiceInfos(test_server); |
| 863 ASSERT_EQ(2u, alternative_service_info_vector2.size()); | 891 ASSERT_EQ(2u, alternative_service_info_vector2.size()); |
| 864 EXPECT_EQ(canonical_alternative_service1, | 892 EXPECT_EQ(canonical_alternative_service1, |
| 865 alternative_service_info_vector2[0].alternative_service); | 893 alternative_service_info_vector2[0].alternative_service); |
| (...skipping 373 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1239 EXPECT_EQ(quic_server_info1, *(impl_.GetQuicServerInfo(quic_server_id))); | 1267 EXPECT_EQ(quic_server_info1, *(impl_.GetQuicServerInfo(quic_server_id))); |
| 1240 | 1268 |
| 1241 impl_.Clear(); | 1269 impl_.Clear(); |
| 1242 EXPECT_EQ(0u, impl_.quic_server_info_map().size()); | 1270 EXPECT_EQ(0u, impl_.quic_server_info_map().size()); |
| 1243 EXPECT_EQ(nullptr, impl_.GetQuicServerInfo(quic_server_id)); | 1271 EXPECT_EQ(nullptr, impl_.GetQuicServerInfo(quic_server_id)); |
| 1244 } | 1272 } |
| 1245 | 1273 |
| 1246 } // namespace | 1274 } // namespace |
| 1247 | 1275 |
| 1248 } // namespace net | 1276 } // namespace net |
| OLD | NEW |