| 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.h" | 8 #include "base/metrics/histogram.h" |
| 9 #include "base/prefs/pref_service.h" | 9 #include "base/prefs/pref_service.h" |
| 10 #include "base/single_thread_task_runner.h" | 10 #include "base/single_thread_task_runner.h" |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 51 const int kMaxServerNetworkStatsHostsToPersist = 200; | 51 const int kMaxServerNetworkStatsHostsToPersist = 200; |
| 52 | 52 |
| 53 const char kVersionKey[] = "version"; | 53 const char kVersionKey[] = "version"; |
| 54 const char kServersKey[] = "servers"; | 54 const char kServersKey[] = "servers"; |
| 55 const char kSupportsSpdyKey[] = "supports_spdy"; | 55 const char kSupportsSpdyKey[] = "supports_spdy"; |
| 56 const char kSettingsKey[] = "settings"; | 56 const char kSettingsKey[] = "settings"; |
| 57 const char kSupportsQuicKey[] = "supports_quic"; | 57 const char kSupportsQuicKey[] = "supports_quic"; |
| 58 const char kUsedQuicKey[] = "used_quic"; | 58 const char kUsedQuicKey[] = "used_quic"; |
| 59 const char kAddressKey[] = "address"; | 59 const char kAddressKey[] = "address"; |
| 60 const char kAlternateProtocolKey[] = "alternate_protocol"; | 60 const char kAlternateProtocolKey[] = "alternate_protocol"; |
| 61 const char kAlternativeServicesKey[] = "alternative_services"; |
| 61 const char kPortKey[] = "port"; | 62 const char kPortKey[] = "port"; |
| 63 const char kHostKey[] = "host"; |
| 62 const char kProtocolKey[] = "protocol_str"; | 64 const char kProtocolKey[] = "protocol_str"; |
| 63 const char kProbabilityKey[] = "probability"; | 65 const char kProbabilityKey[] = "probability"; |
| 64 const char kNetworkStatsKey[] = "network_stats"; | 66 const char kNetworkStatsKey[] = "network_stats"; |
| 65 const char kSrttKey[] = "srtt"; | 67 const char kSrttKey[] = "srtt"; |
| 66 | 68 |
| 67 } // namespace | 69 } // namespace |
| 68 | 70 |
| 69 //////////////////////////////////////////////////////////////////////////////// | 71 //////////////////////////////////////////////////////////////////////////////// |
| 70 // HttpServerPropertiesManager | 72 // HttpServerPropertiesManager |
| 71 | 73 |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 173 http_server_properties_impl_->SetHTTP11Required(server); | 175 http_server_properties_impl_->SetHTTP11Required(server); |
| 174 ScheduleUpdatePrefsOnNetworkThread(); | 176 ScheduleUpdatePrefsOnNetworkThread(); |
| 175 } | 177 } |
| 176 | 178 |
| 177 void HttpServerPropertiesManager::MaybeForceHTTP11(const HostPortPair& server, | 179 void HttpServerPropertiesManager::MaybeForceHTTP11(const HostPortPair& server, |
| 178 SSLConfig* ssl_config) { | 180 SSLConfig* ssl_config) { |
| 179 DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); | 181 DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); |
| 180 http_server_properties_impl_->MaybeForceHTTP11(server, ssl_config); | 182 http_server_properties_impl_->MaybeForceHTTP11(server, ssl_config); |
| 181 } | 183 } |
| 182 | 184 |
| 183 AlternateProtocolInfo HttpServerPropertiesManager::GetAlternateProtocol( | 185 AlternateProtocols HttpServerPropertiesManager::GetAlternateProtocols( |
| 184 const HostPortPair& server) { | 186 const HostPortPair& server) { |
| 185 DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); | 187 DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); |
| 186 return http_server_properties_impl_->GetAlternateProtocol(server); | 188 return http_server_properties_impl_->GetAlternateProtocols(server); |
| 187 } | 189 } |
| 188 | 190 |
| 189 void HttpServerPropertiesManager::SetAlternateProtocol( | 191 void HttpServerPropertiesManager::AddAlternateProtocol( |
| 190 const HostPortPair& server, | 192 const HostPortPair& server, |
| 191 uint16 alternate_port, | 193 uint16 alternate_port, |
| 192 AlternateProtocol alternate_protocol, | 194 AlternateProtocol alternate_protocol, |
| 193 double alternate_probability) { | 195 double alternate_probability) { |
| 194 DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); | 196 DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); |
| 195 http_server_properties_impl_->SetAlternateProtocol( | 197 http_server_properties_impl_->AddAlternateProtocol( |
| 196 server, alternate_port, alternate_protocol, alternate_probability); | 198 server, alternate_port, alternate_protocol, alternate_probability); |
| 197 ScheduleUpdatePrefsOnNetworkThread(); | 199 ScheduleUpdatePrefsOnNetworkThread(); |
| 198 } | 200 } |
| 199 | 201 |
| 200 void HttpServerPropertiesManager::SetBrokenAlternateProtocol( | 202 void HttpServerPropertiesManager::SetBrokenAlternateProtocol( |
| 201 const HostPortPair& server) { | 203 const HostPortPair& server, |
| 204 const AlternateProtocolInfo& broken_alternate_protocol) { |
| 202 DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); | 205 DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); |
| 203 http_server_properties_impl_->SetBrokenAlternateProtocol(server); | 206 http_server_properties_impl_->SetBrokenAlternateProtocol( |
| 207 server, broken_alternate_protocol); |
| 204 ScheduleUpdatePrefsOnNetworkThread(); | 208 ScheduleUpdatePrefsOnNetworkThread(); |
| 205 } | 209 } |
| 206 | 210 |
| 207 bool HttpServerPropertiesManager::WasAlternateProtocolRecentlyBroken( | 211 bool HttpServerPropertiesManager::WasAlternateProtocolRecentlyBroken( |
| 208 const HostPortPair& server) { | 212 const HostPortPair& server, |
| 213 const AlternateProtocolInfo& alternate_protocol) const { |
| 209 DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); | 214 DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); |
| 210 return http_server_properties_impl_->WasAlternateProtocolRecentlyBroken( | 215 return http_server_properties_impl_->WasAlternateProtocolRecentlyBroken( |
| 211 server); | 216 server, alternate_protocol); |
| 212 } | 217 } |
| 213 | 218 |
| 214 void HttpServerPropertiesManager::ConfirmAlternateProtocol( | 219 void HttpServerPropertiesManager::ConfirmAlternateProtocol( |
| 215 const HostPortPair& server) { | 220 const HostPortPair& server, |
| 221 const AlternateProtocolInfo& alternate_protocol) { |
| 216 DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); | 222 DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); |
| 217 http_server_properties_impl_->ConfirmAlternateProtocol(server); | 223 http_server_properties_impl_->ConfirmAlternateProtocol(server, |
| 224 alternate_protocol); |
| 218 ScheduleUpdatePrefsOnNetworkThread(); | 225 ScheduleUpdatePrefsOnNetworkThread(); |
| 219 } | 226 } |
| 220 | 227 |
| 221 void HttpServerPropertiesManager::ClearAlternateProtocol( | 228 void HttpServerPropertiesManager::ClearAlternateProtocols( |
| 222 const HostPortPair& server) { | 229 const HostPortPair& server) { |
| 223 DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); | 230 DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); |
| 224 http_server_properties_impl_->ClearAlternateProtocol(server); | 231 http_server_properties_impl_->ClearAlternateProtocols(server); |
| 225 ScheduleUpdatePrefsOnNetworkThread(); | 232 ScheduleUpdatePrefsOnNetworkThread(); |
| 226 } | 233 } |
| 227 | 234 |
| 235 void HttpServerPropertiesManager::ClearNonBrokenAlternateProtocols( |
| 236 const HostPortPair& server) { |
| 237 DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); |
| 238 http_server_properties_impl_->ClearNonBrokenAlternateProtocols(server); |
| 239 ScheduleUpdatePrefsOnNetworkThread(); |
| 240 } |
| 241 |
| 242 void HttpServerPropertiesManager::RemoveAlternateProtocol( |
| 243 const HostPortPair& server, |
| 244 const AlternateProtocolInfo& alternate_protocol) { |
| 245 DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); |
| 246 http_server_properties_impl_->RemoveAlternateProtocol(server, |
| 247 alternate_protocol); |
| 248 ScheduleUpdatePrefsOnNetworkThread(); |
| 249 } |
| 250 |
| 228 const AlternateProtocolMap& | 251 const AlternateProtocolMap& |
| 229 HttpServerPropertiesManager::alternate_protocol_map() const { | 252 HttpServerPropertiesManager::alternate_protocol_map() const { |
| 230 DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); | 253 DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); |
| 231 return http_server_properties_impl_->alternate_protocol_map(); | 254 return http_server_properties_impl_->alternate_protocol_map(); |
| 232 } | 255 } |
| 233 | 256 |
| 234 void HttpServerPropertiesManager::SetAlternateProtocolProbabilityThreshold( | 257 void HttpServerPropertiesManager::SetAlternateProtocolProbabilityThreshold( |
| 235 double threshold) { | 258 double threshold) { |
| 236 DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); | 259 DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); |
| 237 http_server_properties_impl_->SetAlternateProtocolProbabilityThreshold( | 260 http_server_properties_impl_->SetAlternateProtocolProbabilityThreshold( |
| (...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 484 } | 507 } |
| 485 alternate_protocol.protocol = protocol; | 508 alternate_protocol.protocol = protocol; |
| 486 | 509 |
| 487 return alternate_protocol; | 510 return alternate_protocol; |
| 488 } | 511 } |
| 489 | 512 |
| 490 bool HttpServerPropertiesManager::AddToAlternateProtocolMap( | 513 bool HttpServerPropertiesManager::AddToAlternateProtocolMap( |
| 491 const HostPortPair& server, | 514 const HostPortPair& server, |
| 492 const base::DictionaryValue& server_pref_dict, | 515 const base::DictionaryValue& server_pref_dict, |
| 493 AlternateProtocolMap* alternate_protocol_map) { | 516 AlternateProtocolMap* alternate_protocol_map) { |
| 494 // Get alternate_protocol server. | |
| 495 DCHECK(alternate_protocol_map->Peek(server) == alternate_protocol_map->end()); | 517 DCHECK(alternate_protocol_map->Peek(server) == alternate_protocol_map->end()); |
| 496 const base::DictionaryValue* alternate_protocol_dict = NULL; | 518 // Get alternative_services... |
| 519 const base::ListValue* alternate_protocol_list = NULL; |
| 520 if (server_pref_dict.GetListWithoutPathExpansion(kAlternativeServicesKey, |
| 521 &alternate_protocol_list) && |
| 522 !alternate_protocol_list->empty()) { |
| 523 AlternateProtocols alternate_protocols; |
| 524 for (base::Value* const alternate_protocol_list_item : |
| 525 *alternate_protocol_list) { |
| 526 base::DictionaryValue* alternate_protocol_dict; |
| 527 if (!alternate_protocol_list_item->GetAsDictionary( |
| 528 &alternate_protocol_dict)) |
| 529 return false; |
| 530 AlternateProtocolInfo alternate_protocol = ParseAlternateProtocolDict( |
| 531 *alternate_protocol_dict, server.ToString()); |
| 532 if (alternate_protocol.protocol == UNINITIALIZED_ALTERNATE_PROTOCOL) { |
| 533 return false; |
| 534 } |
| 535 alternate_protocols.push_back(alternate_protocol); |
| 536 } |
| 537 alternate_protocol_map->Put(server, alternate_protocols); |
| 538 return true; |
| 539 } |
| 540 |
| 541 // ...or alternate_protocol. |
| 542 // TODO(bnc): Remove this in M45. (Saving to kAlternativeServicesKey is |
| 543 // targeted to M43, and we do not need preference migration for long.) |
| 544 const base::DictionaryValue* alternate_protocol_dict; |
| 497 if (!server_pref_dict.GetDictionaryWithoutPathExpansion( | 545 if (!server_pref_dict.GetDictionaryWithoutPathExpansion( |
| 498 kAlternateProtocolKey, &alternate_protocol_dict)) { | 546 kAlternateProtocolKey, &alternate_protocol_dict)) { |
| 499 return true; | 547 return true; |
| 500 } | 548 } |
| 501 AlternateProtocolInfo alternate_protocol = | 549 AlternateProtocolInfo alternate_protocol = |
| 502 ParseAlternateProtocolDict(*alternate_protocol_dict, server.ToString()); | 550 ParseAlternateProtocolDict(*alternate_protocol_dict, server.ToString()); |
| 503 if (alternate_protocol.protocol == UNINITIALIZED_ALTERNATE_PROTOCOL) | 551 if (alternate_protocol.protocol == UNINITIALIZED_ALTERNATE_PROTOCOL) { |
| 504 return false; | 552 return false; |
| 505 alternate_protocol_map->Put(server, alternate_protocol); | 553 } |
| 554 alternate_protocol_map->Put( |
| 555 server, AlternateProtocols(/*size=*/1, alternate_protocol)); |
| 506 return true; | 556 return true; |
| 507 } | 557 } |
| 508 | 558 |
| 509 bool HttpServerPropertiesManager::ReadSupportsQuic( | 559 bool HttpServerPropertiesManager::ReadSupportsQuic( |
| 510 const base::DictionaryValue& http_server_properties_dict, | 560 const base::DictionaryValue& http_server_properties_dict, |
| 511 IPAddressNumber* last_quic_address) { | 561 IPAddressNumber* last_quic_address) { |
| 512 const base::DictionaryValue* supports_quic_dict = NULL; | 562 const base::DictionaryValue* supports_quic_dict = NULL; |
| 513 if (!http_server_properties_dict.GetDictionaryWithoutPathExpansion( | 563 if (!http_server_properties_dict.GetDictionaryWithoutPathExpansion( |
| 514 kSupportsQuicKey, &supports_quic_dict)) { | 564 kSupportsQuicKey, &supports_quic_dict)) { |
| 515 return true; | 565 return true; |
| (...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 677 pref_task_runner_->PostTask( | 727 pref_task_runner_->PostTask( |
| 678 FROM_HERE, | 728 FROM_HERE, |
| 679 base::Bind( | 729 base::Bind( |
| 680 &HttpServerPropertiesManager::UpdatePrefsOnPrefThread, pref_weak_ptr_, | 730 &HttpServerPropertiesManager::UpdatePrefsOnPrefThread, pref_weak_ptr_, |
| 681 base::Owned(spdy_server_list), base::Owned(spdy_settings_map), | 731 base::Owned(spdy_server_list), base::Owned(spdy_settings_map), |
| 682 base::Owned(alternate_protocol_map), base::Owned(last_quic_addr), | 732 base::Owned(alternate_protocol_map), base::Owned(last_quic_addr), |
| 683 base::Owned(server_network_stats_map), completion)); | 733 base::Owned(server_network_stats_map), completion)); |
| 684 } | 734 } |
| 685 | 735 |
| 686 // A local or temporary data structure to hold |supports_spdy|, SpdySettings, | 736 // A local or temporary data structure to hold |supports_spdy|, SpdySettings, |
| 687 // AlternateProtocolInfo and SupportsQuic preferences for a server. This is used | 737 // AlternateProtocols and SupportsQuic preferences for a server. This is used |
| 688 // only in UpdatePrefsOnPrefThread. | 738 // only in UpdatePrefsOnPrefThread. |
| 689 struct ServerPref { | 739 struct ServerPref { |
| 690 ServerPref() | 740 ServerPref() |
| 691 : supports_spdy(false), | 741 : supports_spdy(false), |
| 692 settings_map(NULL), | 742 settings_map(NULL), |
| 693 alternate_protocol(NULL), | 743 alternate_protocols(NULL), |
| 694 supports_quic(NULL), | 744 supports_quic(NULL), |
| 695 server_network_stats(NULL) {} | 745 server_network_stats(NULL) {} |
| 696 ServerPref(bool supports_spdy, | 746 ServerPref(bool supports_spdy, |
| 697 const SettingsMap* settings_map, | 747 const SettingsMap* settings_map, |
| 698 const AlternateProtocolInfo* alternate_protocol, | 748 const AlternateProtocols* alternate_protocols, |
| 699 const SupportsQuic* supports_quic, | 749 const SupportsQuic* supports_quic, |
| 700 const ServerNetworkStats* server_network_stats) | 750 const ServerNetworkStats* server_network_stats) |
| 701 : supports_spdy(supports_spdy), | 751 : supports_spdy(supports_spdy), |
| 702 settings_map(settings_map), | 752 settings_map(settings_map), |
| 703 alternate_protocol(alternate_protocol), | 753 alternate_protocols(alternate_protocols), |
| 704 supports_quic(supports_quic), | 754 supports_quic(supports_quic), |
| 705 server_network_stats(server_network_stats) {} | 755 server_network_stats(server_network_stats) {} |
| 706 bool supports_spdy; | 756 bool supports_spdy; |
| 707 const SettingsMap* settings_map; | 757 const SettingsMap* settings_map; |
| 708 const AlternateProtocolInfo* alternate_protocol; | 758 const AlternateProtocols* alternate_protocols; |
| 709 const SupportsQuic* supports_quic; | 759 const SupportsQuic* supports_quic; |
| 710 const ServerNetworkStats* server_network_stats; | 760 const ServerNetworkStats* server_network_stats; |
| 711 }; | 761 }; |
| 712 | 762 |
| 713 void HttpServerPropertiesManager::UpdatePrefsOnPrefThread( | 763 void HttpServerPropertiesManager::UpdatePrefsOnPrefThread( |
| 714 base::ListValue* spdy_server_list, | 764 base::ListValue* spdy_server_list, |
| 715 SpdySettingsMap* spdy_settings_map, | 765 SpdySettingsMap* spdy_settings_map, |
| 716 AlternateProtocolMap* alternate_protocol_map, | 766 AlternateProtocolMap* alternate_protocol_map, |
| 717 IPAddressNumber* last_quic_address, | 767 IPAddressNumber* last_quic_address, |
| 718 ServerNetworkStatsMap* server_network_stats_map, | 768 ServerNetworkStatsMap* server_network_stats_map, |
| (...skipping 19 matching lines...) Expand all Loading... |
| 738 map_it != spdy_settings_map->end(); ++map_it) { | 788 map_it != spdy_settings_map->end(); ++map_it) { |
| 739 const HostPortPair& server = map_it->first; | 789 const HostPortPair& server = map_it->first; |
| 740 server_pref_map[server].settings_map = &map_it->second; | 790 server_pref_map[server].settings_map = &map_it->second; |
| 741 } | 791 } |
| 742 | 792 |
| 743 // Add AlternateProtocol servers to server_pref_map. | 793 // Add AlternateProtocol servers to server_pref_map. |
| 744 for (AlternateProtocolMap::const_iterator map_it = | 794 for (AlternateProtocolMap::const_iterator map_it = |
| 745 alternate_protocol_map->begin(); | 795 alternate_protocol_map->begin(); |
| 746 map_it != alternate_protocol_map->end(); ++map_it) { | 796 map_it != alternate_protocol_map->end(); ++map_it) { |
| 747 const HostPortPair& server = map_it->first; | 797 const HostPortPair& server = map_it->first; |
| 748 const AlternateProtocolInfo& port_alternate_protocol = map_it->second; | 798 ServerPrefMap::iterator it = server_pref_map.find(server); |
| 749 if (!IsAlternateProtocolValid(port_alternate_protocol.protocol)) { | 799 if (it == server_pref_map.end()) { |
| 750 continue; | 800 ServerPref server_pref(false, NULL, &map_it->second, NULL, NULL); |
| 801 server_pref_map[server] = server_pref; |
| 802 } else { |
| 803 it->second.alternate_protocols = &map_it->second; |
| 751 } | 804 } |
| 752 server_pref_map[server].alternate_protocol = &map_it->second; | |
| 753 } | 805 } |
| 754 | 806 |
| 755 // Add ServerNetworkStats servers to server_pref_map. | 807 // Add ServerNetworkStats servers to server_pref_map. |
| 756 for (ServerNetworkStatsMap::const_iterator map_it = | 808 for (ServerNetworkStatsMap::const_iterator map_it = |
| 757 server_network_stats_map->begin(); | 809 server_network_stats_map->begin(); |
| 758 map_it != server_network_stats_map->end(); ++map_it) { | 810 map_it != server_network_stats_map->end(); ++map_it) { |
| 759 const HostPortPair& server = map_it->first; | 811 const HostPortPair& server = map_it->first; |
| 760 server_pref_map[server].server_network_stats = &map_it->second; | 812 server_pref_map[server].server_network_stats = &map_it->second; |
| 761 } | 813 } |
| 762 | 814 |
| 763 // Persist properties to the |path_|. | 815 // Persist properties to the |path_|. |
| 764 base::DictionaryValue http_server_properties_dict; | 816 base::DictionaryValue http_server_properties_dict; |
| 765 base::DictionaryValue* servers_dict = new base::DictionaryValue; | 817 base::DictionaryValue* servers_dict = new base::DictionaryValue; |
| 766 for (ServerPrefMap::const_iterator map_it = server_pref_map.begin(); | 818 for (ServerPrefMap::const_iterator map_it = server_pref_map.begin(); |
| 767 map_it != server_pref_map.end(); | 819 map_it != server_pref_map.end(); |
| 768 ++map_it) { | 820 ++map_it) { |
| 769 const HostPortPair& server = map_it->first; | 821 const HostPortPair& server = map_it->first; |
| 770 const ServerPref& server_pref = map_it->second; | 822 const ServerPref& server_pref = map_it->second; |
| 771 | 823 |
| 772 base::DictionaryValue* server_pref_dict = new base::DictionaryValue; | 824 base::DictionaryValue* server_pref_dict = new base::DictionaryValue; |
| 773 | 825 |
| 774 // Save supports_spdy. | 826 // Save supports_spdy. |
| 775 if (server_pref.supports_spdy) | 827 if (server_pref.supports_spdy) |
| 776 server_pref_dict->SetBoolean(kSupportsSpdyKey, server_pref.supports_spdy); | 828 server_pref_dict->SetBoolean(kSupportsSpdyKey, server_pref.supports_spdy); |
| 777 SaveSpdySettingsToServerPrefs(server_pref.settings_map, server_pref_dict); | 829 SaveSpdySettingsToServerPrefs(server_pref.settings_map, server_pref_dict); |
| 778 SaveAlternateProtocolToServerPrefs(server_pref.alternate_protocol, | 830 SaveAlternateProtocolToServerPrefs(server_pref.alternate_protocols, |
| 779 server_pref_dict); | 831 server_pref_dict, server); |
| 780 SaveNetworkStatsToServerPrefs(server_pref.server_network_stats, | 832 SaveNetworkStatsToServerPrefs(server_pref.server_network_stats, |
| 781 server_pref_dict); | 833 server_pref_dict); |
| 782 | 834 |
| 783 servers_dict->SetWithoutPathExpansion(server.ToString(), server_pref_dict); | 835 servers_dict->SetWithoutPathExpansion(server.ToString(), server_pref_dict); |
| 784 } | 836 } |
| 785 | 837 |
| 786 http_server_properties_dict.SetWithoutPathExpansion(kServersKey, | 838 http_server_properties_dict.SetWithoutPathExpansion(kServersKey, |
| 787 servers_dict); | 839 servers_dict); |
| 788 SetVersion(&http_server_properties_dict, kVersionNumber); | 840 SetVersion(&http_server_properties_dict, kVersionNumber); |
| 789 | 841 |
| (...skipping 22 matching lines...) Expand all Loading... |
| 812 it != settings_map->end(); ++it) { | 864 it != settings_map->end(); ++it) { |
| 813 SpdySettingsIds id = it->first; | 865 SpdySettingsIds id = it->first; |
| 814 uint32 value = it->second.second; | 866 uint32 value = it->second.second; |
| 815 std::string key = base::StringPrintf("%u", id); | 867 std::string key = base::StringPrintf("%u", id); |
| 816 spdy_settings_dict->SetInteger(key, value); | 868 spdy_settings_dict->SetInteger(key, value); |
| 817 } | 869 } |
| 818 server_pref_dict->SetWithoutPathExpansion(kSettingsKey, spdy_settings_dict); | 870 server_pref_dict->SetWithoutPathExpansion(kSettingsKey, spdy_settings_dict); |
| 819 } | 871 } |
| 820 | 872 |
| 821 void HttpServerPropertiesManager::SaveAlternateProtocolToServerPrefs( | 873 void HttpServerPropertiesManager::SaveAlternateProtocolToServerPrefs( |
| 822 const AlternateProtocolInfo* port_alternate_protocol, | 874 const AlternateProtocols* alternate_protocols, |
| 823 base::DictionaryValue* server_pref_dict) { | 875 base::DictionaryValue* server_pref_dict, |
| 824 if (!port_alternate_protocol || port_alternate_protocol->is_broken) | 876 const HostPortPair& server) { |
| 877 if (!alternate_protocols || alternate_protocols->size() == 0) |
| 825 return; | 878 return; |
| 826 | 879 base::ListValue* alternate_protocols_list = new base::ListValue; |
| 827 base::DictionaryValue* port_alternate_protocol_dict = | 880 for (const AlternateProtocolInfo& alternate_protocol : *alternate_protocols) { |
| 828 new base::DictionaryValue; | 881 if (alternate_protocol.is_broken) |
| 829 port_alternate_protocol_dict->SetInteger(kPortKey, | 882 continue; |
| 830 port_alternate_protocol->port); | 883 DCHECK(IsAlternateProtocolValid(alternate_protocol.protocol)); |
| 831 const char* protocol_str = | 884 base::DictionaryValue* alternate_protocol_dict = new base::DictionaryValue; |
| 832 AlternateProtocolToString(port_alternate_protocol->protocol); | 885 alternate_protocol_dict->SetInteger(kPortKey, alternate_protocol.port); |
| 833 port_alternate_protocol_dict->SetString(kProtocolKey, protocol_str); | 886 alternate_protocol_dict->SetString(kHostKey, server.host()); |
| 834 port_alternate_protocol_dict->SetDouble(kProbabilityKey, | 887 alternate_protocol_dict->SetString( |
| 835 port_alternate_protocol->probability); | 888 kProtocolKey, AlternateProtocolToString(alternate_protocol.protocol)); |
| 836 server_pref_dict->SetWithoutPathExpansion(kAlternateProtocolKey, | 889 alternate_protocol_dict->SetDouble(kProbabilityKey, |
| 837 port_alternate_protocol_dict); | 890 alternate_protocol.probability); |
| 891 alternate_protocols_list->Append(alternate_protocol_dict); |
| 892 } |
| 893 if (alternate_protocols_list->GetSize() == 0) |
| 894 return; |
| 895 server_pref_dict->SetWithoutPathExpansion(kAlternativeServicesKey, |
| 896 alternate_protocols_list); |
| 838 } | 897 } |
| 839 | 898 |
| 840 void HttpServerPropertiesManager::SaveSupportsQuicToPrefs( | 899 void HttpServerPropertiesManager::SaveSupportsQuicToPrefs( |
| 841 const IPAddressNumber* last_quic_address, | 900 const IPAddressNumber* last_quic_address, |
| 842 base::DictionaryValue* http_server_properties_dict) { | 901 base::DictionaryValue* http_server_properties_dict) { |
| 843 if (!last_quic_address || last_quic_address->empty()) | 902 if (!last_quic_address || last_quic_address->empty()) |
| 844 return; | 903 return; |
| 845 | 904 |
| 846 base::DictionaryValue* supports_quic_dict = new base::DictionaryValue; | 905 base::DictionaryValue* supports_quic_dict = new base::DictionaryValue; |
| 847 supports_quic_dict->SetBoolean(kUsedQuicKey, true); | 906 supports_quic_dict->SetBoolean(kUsedQuicKey, true); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 867 server_network_stats_dict); | 926 server_network_stats_dict); |
| 868 } | 927 } |
| 869 | 928 |
| 870 void HttpServerPropertiesManager::OnHttpServerPropertiesChanged() { | 929 void HttpServerPropertiesManager::OnHttpServerPropertiesChanged() { |
| 871 DCHECK(pref_task_runner_->RunsTasksOnCurrentThread()); | 930 DCHECK(pref_task_runner_->RunsTasksOnCurrentThread()); |
| 872 if (!setting_prefs_) | 931 if (!setting_prefs_) |
| 873 ScheduleUpdateCacheOnPrefThread(); | 932 ScheduleUpdateCacheOnPrefThread(); |
| 874 } | 933 } |
| 875 | 934 |
| 876 } // namespace net | 935 } // namespace net |
| OLD | NEW |