| 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 "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/metrics/histogram_macros.h" | 8 #include "base/metrics/histogram_macros.h" |
| 9 #include "base/single_thread_task_runner.h" | 9 #include "base/single_thread_task_runner.h" |
| 10 #include "base/stl_util.h" | 10 #include "base/stl_util.h" |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 138 } | 138 } |
| 139 | 139 |
| 140 void HttpServerPropertiesManager::Clear(const base::Closure& completion) { | 140 void HttpServerPropertiesManager::Clear(const base::Closure& completion) { |
| 141 DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); | 141 DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); |
| 142 | 142 |
| 143 http_server_properties_impl_->Clear(); | 143 http_server_properties_impl_->Clear(); |
| 144 UpdatePrefsFromCacheOnNetworkThread(completion); | 144 UpdatePrefsFromCacheOnNetworkThread(completion); |
| 145 } | 145 } |
| 146 | 146 |
| 147 bool HttpServerPropertiesManager::SupportsRequestPriority( | 147 bool HttpServerPropertiesManager::SupportsRequestPriority( |
| 148 const HostPortPair& server) { | 148 const url::SchemeHostPort& server) { |
| 149 DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); | 149 DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); |
| 150 return http_server_properties_impl_->SupportsRequestPriority(server); | 150 return http_server_properties_impl_->SupportsRequestPriority(server); |
| 151 } | 151 } |
| 152 | 152 |
| 153 bool HttpServerPropertiesManager::GetSupportsSpdy(const HostPortPair& server) { | 153 bool HttpServerPropertiesManager::GetSupportsSpdy(const HostPortPair& server) { |
| 154 DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); | 154 DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); |
| 155 return http_server_properties_impl_->GetSupportsSpdy(server); | 155 return http_server_properties_impl_->GetSupportsSpdy(server); |
| 156 } | 156 } |
| 157 | 157 |
| 158 void HttpServerPropertiesManager::SetSupportsSpdy(const HostPortPair& server, | 158 void HttpServerPropertiesManager::SetSupportsSpdy(const HostPortPair& server, |
| (...skipping 20 matching lines...) Expand all Loading... |
| 179 ScheduleUpdatePrefsOnNetworkThread(HTTP_11_REQUIRED); | 179 ScheduleUpdatePrefsOnNetworkThread(HTTP_11_REQUIRED); |
| 180 } | 180 } |
| 181 | 181 |
| 182 void HttpServerPropertiesManager::MaybeForceHTTP11(const HostPortPair& server, | 182 void HttpServerPropertiesManager::MaybeForceHTTP11(const HostPortPair& server, |
| 183 SSLConfig* ssl_config) { | 183 SSLConfig* ssl_config) { |
| 184 DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); | 184 DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); |
| 185 http_server_properties_impl_->MaybeForceHTTP11(server, ssl_config); | 185 http_server_properties_impl_->MaybeForceHTTP11(server, ssl_config); |
| 186 } | 186 } |
| 187 | 187 |
| 188 AlternativeServiceVector HttpServerPropertiesManager::GetAlternativeServices( | 188 AlternativeServiceVector HttpServerPropertiesManager::GetAlternativeServices( |
| 189 const HostPortPair& origin) { | 189 const url::SchemeHostPort& origin) { |
| 190 DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); | 190 DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); |
| 191 return http_server_properties_impl_->GetAlternativeServices(origin); | 191 return http_server_properties_impl_->GetAlternativeServices(origin); |
| 192 } | 192 } |
| 193 | 193 |
| 194 bool HttpServerPropertiesManager::SetAlternativeService( | 194 bool HttpServerPropertiesManager::SetAlternativeService( |
| 195 const HostPortPair& origin, | 195 const url::SchemeHostPort& origin, |
| 196 const AlternativeService& alternative_service, | 196 const AlternativeService& alternative_service, |
| 197 base::Time expiration) { | 197 base::Time expiration) { |
| 198 DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); | 198 DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); |
| 199 const bool changed = http_server_properties_impl_->SetAlternativeService( | 199 const bool changed = http_server_properties_impl_->SetAlternativeService( |
| 200 origin, alternative_service, expiration); | 200 origin, alternative_service, expiration); |
| 201 if (changed) { | 201 if (changed) { |
| 202 ScheduleUpdatePrefsOnNetworkThread(SET_ALTERNATIVE_SERVICES); | 202 ScheduleUpdatePrefsOnNetworkThread(SET_ALTERNATIVE_SERVICES); |
| 203 } | 203 } |
| 204 return changed; | 204 return changed; |
| 205 } | 205 } |
| 206 | 206 |
| 207 bool HttpServerPropertiesManager::SetAlternativeServices( | 207 bool HttpServerPropertiesManager::SetAlternativeServices( |
| 208 const HostPortPair& origin, | 208 const url::SchemeHostPort& origin, |
| 209 const AlternativeServiceInfoVector& alternative_service_info_vector) { | 209 const AlternativeServiceInfoVector& alternative_service_info_vector) { |
| 210 DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); | 210 DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); |
| 211 const bool changed = http_server_properties_impl_->SetAlternativeServices( | 211 const bool changed = http_server_properties_impl_->SetAlternativeServices( |
| 212 origin, alternative_service_info_vector); | 212 origin, alternative_service_info_vector); |
| 213 if (changed) { | 213 if (changed) { |
| 214 ScheduleUpdatePrefsOnNetworkThread(SET_ALTERNATIVE_SERVICES); | 214 ScheduleUpdatePrefsOnNetworkThread(SET_ALTERNATIVE_SERVICES); |
| 215 } | 215 } |
| 216 return changed; | 216 return changed; |
| 217 } | 217 } |
| 218 | 218 |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 254 http_server_properties_impl_->ConfirmAlternativeService(alternative_service); | 254 http_server_properties_impl_->ConfirmAlternativeService(alternative_service); |
| 255 bool new_value = http_server_properties_impl_->IsAlternativeServiceBroken( | 255 bool new_value = http_server_properties_impl_->IsAlternativeServiceBroken( |
| 256 alternative_service); | 256 alternative_service); |
| 257 // For persisting, we only care about the value returned by | 257 // For persisting, we only care about the value returned by |
| 258 // IsAlternativeServiceBroken. If that value changes, then call persist. | 258 // IsAlternativeServiceBroken. If that value changes, then call persist. |
| 259 if (old_value != new_value) | 259 if (old_value != new_value) |
| 260 ScheduleUpdatePrefsOnNetworkThread(CONFIRM_ALTERNATIVE_SERVICE); | 260 ScheduleUpdatePrefsOnNetworkThread(CONFIRM_ALTERNATIVE_SERVICE); |
| 261 } | 261 } |
| 262 | 262 |
| 263 void HttpServerPropertiesManager::ClearAlternativeServices( | 263 void HttpServerPropertiesManager::ClearAlternativeServices( |
| 264 const HostPortPair& origin) { | 264 const url::SchemeHostPort& origin) { |
| 265 DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); | 265 DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); |
| 266 const AlternativeServiceMap& map = | 266 const AlternativeServiceMap& map = |
| 267 http_server_properties_impl_->alternative_service_map(); | 267 http_server_properties_impl_->alternative_service_map(); |
| 268 size_t old_size = map.size(); | 268 size_t old_size = map.size(); |
| 269 http_server_properties_impl_->ClearAlternativeServices(origin); | 269 http_server_properties_impl_->ClearAlternativeServices(origin); |
| 270 size_t new_size = map.size(); | 270 size_t new_size = map.size(); |
| 271 // Persist only if we have deleted an entry. | 271 // Persist only if we have deleted an entry. |
| 272 if (old_size != new_size) | 272 if (old_size != new_size) |
| 273 ScheduleUpdatePrefsOnNetworkThread(CLEAR_ALTERNATIVE_SERVICE); | 273 ScheduleUpdatePrefsOnNetworkThread(CLEAR_ALTERNATIVE_SERVICE); |
| 274 } | 274 } |
| (...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 496 scoped_ptr<AlternativeServiceMap> alternative_service_map( | 496 scoped_ptr<AlternativeServiceMap> alternative_service_map( |
| 497 new AlternativeServiceMap(kMaxAlternateProtocolHostsToPersist)); | 497 new AlternativeServiceMap(kMaxAlternateProtocolHostsToPersist)); |
| 498 scoped_ptr<ServerNetworkStatsMap> server_network_stats_map( | 498 scoped_ptr<ServerNetworkStatsMap> server_network_stats_map( |
| 499 new ServerNetworkStatsMap(kMaxServerNetworkStatsHostsToPersist)); | 499 new ServerNetworkStatsMap(kMaxServerNetworkStatsHostsToPersist)); |
| 500 scoped_ptr<QuicServerInfoMap> quic_server_info_map( | 500 scoped_ptr<QuicServerInfoMap> quic_server_info_map( |
| 501 new QuicServerInfoMap(QuicServerInfoMap::NO_AUTO_EVICT)); | 501 new QuicServerInfoMap(QuicServerInfoMap::NO_AUTO_EVICT)); |
| 502 | 502 |
| 503 if (version < 4) { | 503 if (version < 4) { |
| 504 if (!AddServersData(*servers_dict, spdy_servers.get(), | 504 if (!AddServersData(*servers_dict, spdy_servers.get(), |
| 505 spdy_settings_map.get(), alternative_service_map.get(), | 505 spdy_settings_map.get(), alternative_service_map.get(), |
| 506 server_network_stats_map.get())) { | 506 server_network_stats_map.get(), version)) { |
| 507 detected_corrupted_prefs = true; | 507 detected_corrupted_prefs = true; |
| 508 } | 508 } |
| 509 } else { | 509 } else { |
| 510 for (base::ListValue::const_iterator it = servers_list->begin(); | 510 for (base::ListValue::const_iterator it = servers_list->begin(); |
| 511 it != servers_list->end(); ++it) { | 511 it != servers_list->end(); ++it) { |
| 512 if (!(*it)->GetAsDictionary(&servers_dict)) { | 512 if (!(*it)->GetAsDictionary(&servers_dict)) { |
| 513 DVLOG(1) << "Malformed http_server_properties for servers dictionary."; | 513 DVLOG(1) << "Malformed http_server_properties for servers dictionary."; |
| 514 detected_corrupted_prefs = true; | 514 detected_corrupted_prefs = true; |
| 515 continue; | 515 continue; |
| 516 } | 516 } |
| 517 if (!AddServersData( | 517 if (!AddServersData(*servers_dict, spdy_servers.get(), |
| 518 *servers_dict, spdy_servers.get(), spdy_settings_map.get(), | 518 spdy_settings_map.get(), |
| 519 alternative_service_map.get(), server_network_stats_map.get())) { | 519 alternative_service_map.get(), |
| 520 server_network_stats_map.get(), version)) { |
| 520 detected_corrupted_prefs = true; | 521 detected_corrupted_prefs = true; |
| 521 } | 522 } |
| 522 } | 523 } |
| 523 } | 524 } |
| 524 | 525 |
| 525 if (!AddToQuicServerInfoMap(http_server_properties_dict, | 526 if (!AddToQuicServerInfoMap(http_server_properties_dict, |
| 526 quic_server_info_map.get())) { | 527 quic_server_info_map.get())) { |
| 527 detected_corrupted_prefs = true; | 528 detected_corrupted_prefs = true; |
| 528 } | 529 } |
| 529 | 530 |
| 530 network_task_runner_->PostTask( | 531 network_task_runner_->PostTask( |
| 531 FROM_HERE, | 532 FROM_HERE, |
| 532 base::Bind( | 533 base::Bind( |
| 533 &HttpServerPropertiesManager::UpdateCacheFromPrefsOnNetworkThread, | 534 &HttpServerPropertiesManager::UpdateCacheFromPrefsOnNetworkThread, |
| 534 base::Unretained(this), base::Owned(spdy_servers.release()), | 535 base::Unretained(this), base::Owned(spdy_servers.release()), |
| 535 base::Owned(spdy_settings_map.release()), | 536 base::Owned(spdy_settings_map.release()), |
| 536 base::Owned(alternative_service_map.release()), base::Owned(addr), | 537 base::Owned(alternative_service_map.release()), base::Owned(addr), |
| 537 base::Owned(server_network_stats_map.release()), | 538 base::Owned(server_network_stats_map.release()), |
| 538 base::Owned(quic_server_info_map.release()), | 539 base::Owned(quic_server_info_map.release()), |
| 539 detected_corrupted_prefs)); | 540 detected_corrupted_prefs)); |
| 540 } | 541 } |
| 541 | 542 |
| 542 bool HttpServerPropertiesManager::AddServersData( | 543 bool HttpServerPropertiesManager::AddServersData( |
| 543 const base::DictionaryValue& servers_dict, | 544 const base::DictionaryValue& servers_dict, |
| 544 ServerList* spdy_servers, | 545 ServerList* spdy_servers, |
| 545 SpdySettingsMap* spdy_settings_map, | 546 SpdySettingsMap* spdy_settings_map, |
| 546 AlternativeServiceMap* alternative_service_map, | 547 AlternativeServiceMap* alternative_service_map, |
| 547 ServerNetworkStatsMap* network_stats_map) { | 548 ServerNetworkStatsMap* network_stats_map, |
| 549 int version) { |
| 548 for (base::DictionaryValue::Iterator it(servers_dict); !it.IsAtEnd(); | 550 for (base::DictionaryValue::Iterator it(servers_dict); !it.IsAtEnd(); |
| 549 it.Advance()) { | 551 it.Advance()) { |
| 550 // Get server's host/pair. | 552 // Get server's host/pair. |
| 551 const std::string& server_str = it.key(); | 553 const std::string& server_str = it.key(); |
| 552 HostPortPair server = HostPortPair::FromString(server_str); | 554 HostPortPair server = HostPortPair::FromString(server_str); |
| 553 if (server.host().empty()) { | 555 if (server.host().empty()) { |
| 554 DVLOG(1) << "Malformed http_server_properties for server: " << server_str; | 556 DVLOG(1) << "Malformed http_server_properties for server: " << server_str; |
| 555 return false; | 557 return false; |
| 556 } | 558 } |
| 557 | 559 |
| 558 const base::DictionaryValue* server_pref_dict = nullptr; | 560 const base::DictionaryValue* server_pref_dict = nullptr; |
| 559 if (!it.value().GetAsDictionary(&server_pref_dict)) { | 561 if (!it.value().GetAsDictionary(&server_pref_dict)) { |
| 560 DVLOG(1) << "Malformed http_server_properties server: " << server_str; | 562 DVLOG(1) << "Malformed http_server_properties server: " << server_str; |
| 561 return false; | 563 return false; |
| 562 } | 564 } |
| 563 | 565 |
| 564 // Get if server supports Spdy. | 566 // Get if server supports Spdy. |
| 565 bool supports_spdy = false; | 567 bool supports_spdy = false; |
| 566 if ((server_pref_dict->GetBoolean(kSupportsSpdyKey, &supports_spdy)) && | 568 if ((server_pref_dict->GetBoolean(kSupportsSpdyKey, &supports_spdy)) && |
| 567 supports_spdy) { | 569 supports_spdy) { |
| 568 spdy_servers->push_back(server_str); | 570 spdy_servers->push_back(server_str); |
| 569 } | 571 } |
| 570 | 572 |
| 571 AddToSpdySettingsMap(server, *server_pref_dict, spdy_settings_map); | 573 AddToSpdySettingsMap(server, *server_pref_dict, spdy_settings_map); |
| 572 if (!AddToAlternativeServiceMap(server, *server_pref_dict, | 574 |
| 575 // TODO(zhongyi): persist server's scheme/host/pair in a new version. |
| 576 // Never call AddToAlternativeServiceMap for old versions disk data. |
| 577 url::SchemeHostPort scheme_origin_pair("https", server.host(), |
| 578 server.port()); |
| 579 if (version <= 4) { |
| 580 DVLOG(1) << "Old version, won't update Alt-Svc from disck data"; |
| 581 } |
| 582 if (!AddToAlternativeServiceMap(scheme_origin_pair, *server_pref_dict, |
| 573 alternative_service_map) || | 583 alternative_service_map) || |
| 574 !AddToNetworkStatsMap(server, *server_pref_dict, network_stats_map)) { | 584 !AddToNetworkStatsMap(server, *server_pref_dict, network_stats_map)) { |
| 575 return false; | 585 return false; |
| 576 } | 586 } |
| 577 } | 587 } |
| 578 return true; | 588 return true; |
| 579 } | 589 } |
| 580 | 590 |
| 581 void HttpServerPropertiesManager::AddToSpdySettingsMap( | 591 void HttpServerPropertiesManager::AddToSpdySettingsMap( |
| 582 const HostPortPair& server, | 592 const HostPortPair& server, |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 674 base::Time::FromInternalValue(expiration_int64); | 684 base::Time::FromInternalValue(expiration_int64); |
| 675 return true; | 685 return true; |
| 676 } | 686 } |
| 677 | 687 |
| 678 DVLOG(1) << "Malformed alternative service expiration for server: " | 688 DVLOG(1) << "Malformed alternative service expiration for server: " |
| 679 << server_str; | 689 << server_str; |
| 680 return false; | 690 return false; |
| 681 } | 691 } |
| 682 | 692 |
| 683 bool HttpServerPropertiesManager::AddToAlternativeServiceMap( | 693 bool HttpServerPropertiesManager::AddToAlternativeServiceMap( |
| 684 const HostPortPair& server, | 694 const url::SchemeHostPort& server, |
| 685 const base::DictionaryValue& server_pref_dict, | 695 const base::DictionaryValue& server_pref_dict, |
| 686 AlternativeServiceMap* alternative_service_map) { | 696 AlternativeServiceMap* alternative_service_map) { |
| 687 DCHECK(alternative_service_map->Peek(server) == | 697 DCHECK(alternative_service_map->Peek(server) == |
| 688 alternative_service_map->end()); | 698 alternative_service_map->end()); |
| 689 const base::ListValue* alternative_service_list; | 699 const base::ListValue* alternative_service_list; |
| 690 if (!server_pref_dict.GetListWithoutPathExpansion( | 700 if (!server_pref_dict.GetListWithoutPathExpansion( |
| 691 kAlternativeServiceKey, &alternative_service_list)) { | 701 kAlternativeServiceKey, &alternative_service_list)) { |
| 692 return true; | 702 return true; |
| 693 } | 703 } |
| 694 | 704 |
| 695 AlternativeServiceInfoVector alternative_service_info_vector; | 705 AlternativeServiceInfoVector alternative_service_info_vector; |
| 696 for (const base::Value* alternative_service_list_item : | 706 for (const base::Value* alternative_service_list_item : |
| 697 *alternative_service_list) { | 707 *alternative_service_list) { |
| 698 const base::DictionaryValue* alternative_service_dict; | 708 const base::DictionaryValue* alternative_service_dict; |
| 699 if (!alternative_service_list_item->GetAsDictionary( | 709 if (!alternative_service_list_item->GetAsDictionary( |
| 700 &alternative_service_dict)) | 710 &alternative_service_dict)) |
| 701 return false; | 711 return false; |
| 702 AlternativeServiceInfo alternative_service_info; | 712 AlternativeServiceInfo alternative_service_info; |
| 703 if (!ParseAlternativeServiceDict(*alternative_service_dict, | 713 if (!ParseAlternativeServiceDict( |
| 704 server.ToString(), | 714 *alternative_service_dict, |
| 705 &alternative_service_info)) { | 715 HostPortPair::FromSchemeHostPort(server).ToString(), |
| 716 &alternative_service_info)) { |
| 706 return false; | 717 return false; |
| 707 } | 718 } |
| 708 if (base::Time::Now() < alternative_service_info.expiration) { | 719 if (base::Time::Now() < alternative_service_info.expiration) { |
| 709 alternative_service_info_vector.push_back(alternative_service_info); | 720 alternative_service_info_vector.push_back(alternative_service_info); |
| 710 } | 721 } |
| 711 } | 722 } |
| 712 | 723 |
| 713 if (alternative_service_info_vector.empty()) { | 724 if (alternative_service_info_vector.empty()) { |
| 714 return false; | 725 return false; |
| 715 } | 726 } |
| (...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 911 const AlternativeServiceMap& map = | 922 const AlternativeServiceMap& map = |
| 912 http_server_properties_impl_->alternative_service_map(); | 923 http_server_properties_impl_->alternative_service_map(); |
| 913 UMA_HISTOGRAM_COUNTS("Net.CountOfAlternateProtocolServers.Memory", | 924 UMA_HISTOGRAM_COUNTS("Net.CountOfAlternateProtocolServers.Memory", |
| 914 map.size()); | 925 map.size()); |
| 915 count = 0; | 926 count = 0; |
| 916 typedef std::map<std::string, bool> CanonicalHostPersistedMap; | 927 typedef std::map<std::string, bool> CanonicalHostPersistedMap; |
| 917 CanonicalHostPersistedMap persisted_map; | 928 CanonicalHostPersistedMap persisted_map; |
| 918 // Maintain MRU order. | 929 // Maintain MRU order. |
| 919 for (AlternativeServiceMap::const_reverse_iterator it = map.rbegin(); | 930 for (AlternativeServiceMap::const_reverse_iterator it = map.rbegin(); |
| 920 it != map.rend() && count < kMaxAlternateProtocolHostsToPersist; ++it) { | 931 it != map.rend() && count < kMaxAlternateProtocolHostsToPersist; ++it) { |
| 921 const HostPortPair& server = it->first; | 932 const url::SchemeHostPort& server = it->first; |
| 922 AlternativeServiceInfoVector notbroken_alternative_service_info_vector; | 933 AlternativeServiceInfoVector notbroken_alternative_service_info_vector; |
| 923 for (const AlternativeServiceInfo& alternative_service_info : it->second) { | 934 for (const AlternativeServiceInfo& alternative_service_info : it->second) { |
| 924 // Do not persist expired entries. | 935 // Do not persist expired entries. |
| 925 if (alternative_service_info.expiration < base::Time::Now()) { | 936 if (alternative_service_info.expiration < base::Time::Now()) { |
| 926 continue; | 937 continue; |
| 927 } | 938 } |
| 928 AlternativeService alternative_service( | 939 AlternativeService alternative_service( |
| 929 alternative_service_info.alternative_service); | 940 alternative_service_info.alternative_service); |
| 930 if (!IsAlternateProtocolValid(alternative_service.protocol)) { | 941 if (!IsAlternateProtocolValid(alternative_service.protocol)) { |
| 931 continue; | 942 continue; |
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1061 server_pref_map.Put(server, server_pref); | 1072 server_pref_map.Put(server, server_pref); |
| 1062 } else { | 1073 } else { |
| 1063 it->second.settings_map = &map_it->second; | 1074 it->second.settings_map = &map_it->second; |
| 1064 } | 1075 } |
| 1065 } | 1076 } |
| 1066 | 1077 |
| 1067 // Add alternative services to server_pref_map in the MRU order. | 1078 // Add alternative services to server_pref_map in the MRU order. |
| 1068 for (AlternativeServiceMap::const_reverse_iterator map_it = | 1079 for (AlternativeServiceMap::const_reverse_iterator map_it = |
| 1069 alternative_service_map->rbegin(); | 1080 alternative_service_map->rbegin(); |
| 1070 map_it != alternative_service_map->rend(); ++map_it) { | 1081 map_it != alternative_service_map->rend(); ++map_it) { |
| 1071 const HostPortPair& server = map_it->first; | 1082 const HostPortPair& server = |
| 1083 HostPortPair::FromSchemeHostPort(map_it->first); |
| 1072 ServerPrefMap::iterator it = server_pref_map.Get(server); | 1084 ServerPrefMap::iterator it = server_pref_map.Get(server); |
| 1073 if (it == server_pref_map.end()) { | 1085 if (it == server_pref_map.end()) { |
| 1074 ServerPref server_pref; | 1086 ServerPref server_pref; |
| 1075 server_pref.alternative_service_info_vector = &map_it->second; | 1087 server_pref.alternative_service_info_vector = &map_it->second; |
| 1076 server_pref_map.Put(server, server_pref); | 1088 server_pref_map.Put(server, server_pref); |
| 1077 } else { | 1089 } else { |
| 1078 it->second.alternative_service_info_vector = &map_it->second; | 1090 it->second.alternative_service_info_vector = &map_it->second; |
| 1079 } | 1091 } |
| 1080 } | 1092 } |
| 1081 | 1093 |
| (...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1239 quic_servers_dict); | 1251 quic_servers_dict); |
| 1240 } | 1252 } |
| 1241 | 1253 |
| 1242 void HttpServerPropertiesManager::OnHttpServerPropertiesChanged() { | 1254 void HttpServerPropertiesManager::OnHttpServerPropertiesChanged() { |
| 1243 DCHECK(pref_task_runner_->RunsTasksOnCurrentThread()); | 1255 DCHECK(pref_task_runner_->RunsTasksOnCurrentThread()); |
| 1244 if (!setting_prefs_) | 1256 if (!setting_prefs_) |
| 1245 ScheduleUpdateCacheOnPrefThread(); | 1257 ScheduleUpdateCacheOnPrefThread(); |
| 1246 } | 1258 } |
| 1247 | 1259 |
| 1248 } // namespace net | 1260 } // namespace net |
| OLD | NEW |