OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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_manager.h" | 5 #include "net/http/http_server_properties_manager.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/json/json_reader.h" | 10 #include "base/json/json_reader.h" |
(...skipping 448 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
459 ExpectScheduleUpdatePrefsOnNetworkThread(); | 459 ExpectScheduleUpdatePrefsOnNetworkThread(); |
460 | 460 |
461 base::DictionaryValue* server_pref_dict = new base::DictionaryValue; | 461 base::DictionaryValue* server_pref_dict = new base::DictionaryValue; |
462 | 462 |
463 // Set supports_spdy for www.google.com:65536. | 463 // Set supports_spdy for www.google.com:65536. |
464 server_pref_dict->SetBoolean("supports_spdy", true); | 464 server_pref_dict->SetBoolean("supports_spdy", true); |
465 | 465 |
466 // Set up alternative_service for www.google.com:65536. | 466 // Set up alternative_service for www.google.com:65536. |
467 std::unique_ptr<base::DictionaryValue> alternative_service_dict( | 467 std::unique_ptr<base::DictionaryValue> alternative_service_dict( |
468 new base::DictionaryValue); | 468 new base::DictionaryValue); |
469 alternative_service_dict->SetString("protocol_str", "npn-h2"); | 469 alternative_service_dict->SetString("protocol_str", "h2"); |
470 alternative_service_dict->SetInteger("port", 80); | 470 alternative_service_dict->SetInteger("port", 80); |
471 base::ListValue* alternative_service_list = new base::ListValue; | 471 base::ListValue* alternative_service_list = new base::ListValue; |
472 alternative_service_list->Append(std::move(alternative_service_dict)); | 472 alternative_service_list->Append(std::move(alternative_service_dict)); |
473 server_pref_dict->SetWithoutPathExpansion("alternative_service", | 473 server_pref_dict->SetWithoutPathExpansion("alternative_service", |
474 alternative_service_list); | 474 alternative_service_list); |
475 | 475 |
476 // Set up ServerNetworkStats for www.google.com:65536. | 476 // Set up ServerNetworkStats for www.google.com:65536. |
477 base::DictionaryValue* stats = new base::DictionaryValue; | 477 base::DictionaryValue* stats = new base::DictionaryValue; |
478 stats->SetInteger("srtt", 10); | 478 stats->SetInteger("srtt", 10); |
479 server_pref_dict->SetWithoutPathExpansion("network_stats", stats); | 479 server_pref_dict->SetWithoutPathExpansion("network_stats", stats); |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
542 ExpectScheduleUpdatePrefsOnNetworkThread(); | 542 ExpectScheduleUpdatePrefsOnNetworkThread(); |
543 | 543 |
544 base::DictionaryValue* server_pref_dict = new base::DictionaryValue; | 544 base::DictionaryValue* server_pref_dict = new base::DictionaryValue; |
545 | 545 |
546 // Set supports_spdy for www.google.com:80. | 546 // Set supports_spdy for www.google.com:80. |
547 server_pref_dict->SetBoolean("supports_spdy", true); | 547 server_pref_dict->SetBoolean("supports_spdy", true); |
548 | 548 |
549 // Set up alternative_service for www.google.com:80. | 549 // Set up alternative_service for www.google.com:80. |
550 std::unique_ptr<base::DictionaryValue> alternative_service_dict( | 550 std::unique_ptr<base::DictionaryValue> alternative_service_dict( |
551 new base::DictionaryValue); | 551 new base::DictionaryValue); |
552 alternative_service_dict->SetString("protocol_str", "npn-h2"); | 552 alternative_service_dict->SetString("protocol_str", "h2"); |
553 alternative_service_dict->SetInteger("port", 65536); | 553 alternative_service_dict->SetInteger("port", 65536); |
554 base::ListValue* alternative_service_list = new base::ListValue; | 554 base::ListValue* alternative_service_list = new base::ListValue; |
555 alternative_service_list->Append(std::move(alternative_service_dict)); | 555 alternative_service_list->Append(std::move(alternative_service_dict)); |
556 server_pref_dict->SetWithoutPathExpansion("alternative_service", | 556 server_pref_dict->SetWithoutPathExpansion("alternative_service", |
557 alternative_service_list); | 557 alternative_service_list); |
558 | 558 |
559 // Set the server preference for www.google.com:80. | 559 // Set the server preference for www.google.com:80. |
560 auto servers_dict = base::MakeUnique<base::DictionaryValue>(); | 560 auto servers_dict = base::MakeUnique<base::DictionaryValue>(); |
561 servers_dict->SetWithoutPathExpansion("www.google.com:80", server_pref_dict); | 561 servers_dict->SetWithoutPathExpansion("www.google.com:80", server_pref_dict); |
562 base::DictionaryValue http_server_properties_dict; | 562 base::DictionaryValue http_server_properties_dict; |
(...skipping 475 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1038 EXPECT_TRUE( | 1038 EXPECT_TRUE( |
1039 base::JSONWriter::Write(*http_server_properties, &preferences_json)); | 1039 base::JSONWriter::Write(*http_server_properties, &preferences_json)); |
1040 EXPECT_EQ(expected_json, preferences_json); | 1040 EXPECT_EQ(expected_json, preferences_json); |
1041 } | 1041 } |
1042 | 1042 |
1043 TEST_P(HttpServerPropertiesManagerTest, AddToAlternativeServiceMap) { | 1043 TEST_P(HttpServerPropertiesManagerTest, AddToAlternativeServiceMap) { |
1044 std::unique_ptr<base::Value> server_value = base::JSONReader::Read( | 1044 std::unique_ptr<base::Value> server_value = base::JSONReader::Read( |
1045 "{\"alternative_service\":[{\"port\":443,\"protocol_str\":\"h2\"}," | 1045 "{\"alternative_service\":[{\"port\":443,\"protocol_str\":\"h2\"}," |
1046 "{\"port\":123,\"protocol_str\":\"quic\"," | 1046 "{\"port\":123,\"protocol_str\":\"quic\"," |
1047 "\"expiration\":\"9223372036854775807\"},{\"host\":\"example.org\"," | 1047 "\"expiration\":\"9223372036854775807\"},{\"host\":\"example.org\"," |
1048 "\"port\":1234,\"protocol_str\":\"npn-h2\"," | 1048 "\"port\":1234,\"protocol_str\":\"h2\"," |
1049 "\"expiration\":\"13758804000000000\"}]}"); | 1049 "\"expiration\":\"13758804000000000\"}]}"); |
1050 ASSERT_TRUE(server_value); | 1050 ASSERT_TRUE(server_value); |
1051 base::DictionaryValue* server_dict; | 1051 base::DictionaryValue* server_dict; |
1052 ASSERT_TRUE(server_value->GetAsDictionary(&server_dict)); | 1052 ASSERT_TRUE(server_value->GetAsDictionary(&server_dict)); |
1053 | 1053 |
1054 const url::SchemeHostPort server("https", "example.com", 443); | 1054 const url::SchemeHostPort server("https", "example.com", 443); |
1055 AlternativeServiceMap alternative_service_map(/*max_size=*/5); | 1055 AlternativeServiceMap alternative_service_map(/*max_size=*/5); |
1056 EXPECT_TRUE(http_server_props_manager_->AddToAlternativeServiceMap( | 1056 EXPECT_TRUE(http_server_props_manager_->AddToAlternativeServiceMap( |
1057 server, *server_dict, &alternative_service_map)); | 1057 server, *server_dict, &alternative_service_map)); |
1058 | 1058 |
(...skipping 26 matching lines...) Expand all Loading... |
1085 EXPECT_EQ(1234, alternative_service_info_vector[2].alternative_service.port); | 1085 EXPECT_EQ(1234, alternative_service_info_vector[2].alternative_service.port); |
1086 base::Time expected_expiration; | 1086 base::Time expected_expiration; |
1087 ASSERT_TRUE( | 1087 ASSERT_TRUE( |
1088 base::Time::FromUTCString("2036-12-31 10:00:00", &expected_expiration)); | 1088 base::Time::FromUTCString("2036-12-31 10:00:00", &expected_expiration)); |
1089 EXPECT_EQ(expected_expiration, alternative_service_info_vector[2].expiration); | 1089 EXPECT_EQ(expected_expiration, alternative_service_info_vector[2].expiration); |
1090 } | 1090 } |
1091 | 1091 |
1092 // Regression test for https://crbug.com/615497. | 1092 // Regression test for https://crbug.com/615497. |
1093 TEST_P(HttpServerPropertiesManagerTest, DoNotLoadAltSvcForInsecureOrigins) { | 1093 TEST_P(HttpServerPropertiesManagerTest, DoNotLoadAltSvcForInsecureOrigins) { |
1094 std::unique_ptr<base::Value> server_value = base::JSONReader::Read( | 1094 std::unique_ptr<base::Value> server_value = base::JSONReader::Read( |
1095 "{\"alternative_service\":[{\"port\":443,\"protocol_str\":\"npn-h2\"," | 1095 "{\"alternative_service\":[{\"port\":443,\"protocol_str\":\"h2\"," |
1096 "\"expiration\":\"9223372036854775807\"}]}"); | 1096 "\"expiration\":\"9223372036854775807\"}]}"); |
1097 ASSERT_TRUE(server_value); | 1097 ASSERT_TRUE(server_value); |
1098 base::DictionaryValue* server_dict; | 1098 base::DictionaryValue* server_dict; |
1099 ASSERT_TRUE(server_value->GetAsDictionary(&server_dict)); | 1099 ASSERT_TRUE(server_value->GetAsDictionary(&server_dict)); |
1100 | 1100 |
1101 const url::SchemeHostPort server("http", "example.com", 80); | 1101 const url::SchemeHostPort server("http", "example.com", 80); |
1102 AlternativeServiceMap alternative_service_map(/*max_size=*/5); | 1102 AlternativeServiceMap alternative_service_map(/*max_size=*/5); |
1103 EXPECT_FALSE(http_server_props_manager_->AddToAlternativeServiceMap( | 1103 EXPECT_FALSE(http_server_props_manager_->AddToAlternativeServiceMap( |
1104 server, *server_dict, &alternative_service_map)); | 1104 server, *server_dict, &alternative_service_map)); |
1105 | 1105 |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1173 ASSERT_TRUE(altsvc_entry->GetString("host", &hostname)); | 1173 ASSERT_TRUE(altsvc_entry->GetString("host", &hostname)); |
1174 EXPECT_EQ("valid.example.com", hostname); | 1174 EXPECT_EQ("valid.example.com", hostname); |
1175 } | 1175 } |
1176 | 1176 |
1177 // Test that expired alternative service entries on disk are ignored. | 1177 // Test that expired alternative service entries on disk are ignored. |
1178 TEST_P(HttpServerPropertiesManagerTest, DoNotLoadExpiredAlternativeService) { | 1178 TEST_P(HttpServerPropertiesManagerTest, DoNotLoadExpiredAlternativeService) { |
1179 std::unique_ptr<base::ListValue> alternative_service_list( | 1179 std::unique_ptr<base::ListValue> alternative_service_list( |
1180 new base::ListValue); | 1180 new base::ListValue); |
1181 std::unique_ptr<base::DictionaryValue> expired_dict( | 1181 std::unique_ptr<base::DictionaryValue> expired_dict( |
1182 new base::DictionaryValue); | 1182 new base::DictionaryValue); |
1183 expired_dict->SetString("protocol_str", "npn-h2"); | 1183 expired_dict->SetString("protocol_str", "h2"); |
1184 expired_dict->SetString("host", "expired.example.com"); | 1184 expired_dict->SetString("host", "expired.example.com"); |
1185 expired_dict->SetInteger("port", 443); | 1185 expired_dict->SetInteger("port", 443); |
1186 base::Time time_one_day_ago = | 1186 base::Time time_one_day_ago = |
1187 base::Time::Now() - base::TimeDelta::FromDays(1); | 1187 base::Time::Now() - base::TimeDelta::FromDays(1); |
1188 expired_dict->SetString( | 1188 expired_dict->SetString( |
1189 "expiration", base::Int64ToString(time_one_day_ago.ToInternalValue())); | 1189 "expiration", base::Int64ToString(time_one_day_ago.ToInternalValue())); |
1190 alternative_service_list->Append(std::move(expired_dict)); | 1190 alternative_service_list->Append(std::move(expired_dict)); |
1191 | 1191 |
1192 std::unique_ptr<base::DictionaryValue> valid_dict(new base::DictionaryValue); | 1192 std::unique_ptr<base::DictionaryValue> valid_dict(new base::DictionaryValue); |
1193 valid_dict->SetString("protocol_str", "npn-h2"); | 1193 valid_dict->SetString("protocol_str", "h2"); |
1194 valid_dict->SetString("host", "valid.example.com"); | 1194 valid_dict->SetString("host", "valid.example.com"); |
1195 valid_dict->SetInteger("port", 443); | 1195 valid_dict->SetInteger("port", 443); |
1196 valid_dict->SetString( | 1196 valid_dict->SetString( |
1197 "expiration", base::Int64ToString(one_day_from_now_.ToInternalValue())); | 1197 "expiration", base::Int64ToString(one_day_from_now_.ToInternalValue())); |
1198 alternative_service_list->Append(std::move(valid_dict)); | 1198 alternative_service_list->Append(std::move(valid_dict)); |
1199 | 1199 |
1200 base::DictionaryValue server_pref_dict; | 1200 base::DictionaryValue server_pref_dict; |
1201 server_pref_dict.SetWithoutPathExpansion("alternative_service", | 1201 server_pref_dict.SetWithoutPathExpansion("alternative_service", |
1202 alternative_service_list.release()); | 1202 alternative_service_list.release()); |
1203 | 1203 |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1287 // Shutdown comes before the task is executed. | 1287 // Shutdown comes before the task is executed. |
1288 http_server_props_manager_->ShutdownOnPrefThread(); | 1288 http_server_props_manager_->ShutdownOnPrefThread(); |
1289 // Run the task after shutdown, but before deletion. | 1289 // Run the task after shutdown, but before deletion. |
1290 base::RunLoop().RunUntilIdle(); | 1290 base::RunLoop().RunUntilIdle(); |
1291 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); | 1291 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); |
1292 http_server_props_manager_.reset(); | 1292 http_server_props_manager_.reset(); |
1293 base::RunLoop().RunUntilIdle(); | 1293 base::RunLoop().RunUntilIdle(); |
1294 } | 1294 } |
1295 | 1295 |
1296 } // namespace net | 1296 } // namespace net |
OLD | NEW |