Chromium Code Reviews| Index: net/http/http_server_properties_manager.cc |
| diff --git a/net/http/http_server_properties_manager.cc b/net/http/http_server_properties_manager.cc |
| index 3f392af193150d9cf2bc5eecc2ddfda0b0f75dfa..9d6d5179d8919fc91f5383d05f5b1efcdef8ae9f 100644 |
| --- a/net/http/http_server_properties_manager.cc |
| +++ b/net/http/http_server_properties_manager.cc |
| @@ -35,7 +35,7 @@ const int64_t kUpdatePrefsDelayMs = 60000; |
| const int kMissingVersion = 0; |
| // The version number of persisted http_server_properties. |
| -const int kVersionNumber = 4; |
| +const int kVersionNumber = 5; |
| // Persist 200 MRU AlternateProtocolHostPortPairs. |
| const int kMaxAlternateProtocolHostsToPersist = 200; |
| @@ -461,7 +461,7 @@ void HttpServerPropertiesManager::UpdateCacheFromPrefsOnPrefThread() { |
| // "servers": { |
| // "0-edge-chat.facebook.com:443" : {...}, |
| // "0.client-channel.google.com:443" : {...}, |
| - // "yt3.ggpht.com:443" : {...}, |
| + // "yt3.ggpht.com:80" : {...}, |
| // ... |
| // }, ... |
| // }, |
| @@ -471,14 +471,27 @@ void HttpServerPropertiesManager::UpdateCacheFromPrefsOnPrefThread() { |
| return; |
| } |
| } else { |
| - // From Version 4 onwards, data was stored in the following format. |
| + // For Version 4, data was stored in the following format. |
| // |servers| are saved in MRU order. |
| // |
| // "http_server_properties": { |
| // "servers": [ |
| // {"yt3.ggpht.com:443" : {...}}, |
| // {"0.client-channel.google.com:443" : {...}}, |
| - // {"0-edge-chat.facebook.com:443" : {...}}, |
| + // {"0-edge-chat.facebook.com:80" : {...}}, |
| + // ... |
| + // ], ... |
| + // }, |
| + // For Version 5, data was stored in the following format. |
| + // |servers| are saved in MRU order. |servers| are in the format flattened |
| + // representation of (scheme/host/port) where port might be ignored if is |
| + // default with scheme. |
| + // |
| + // "http_server_properties": { |
| + // "servers": [ |
| + // {"https://yt3.ggpht.com" : {...}}, |
| + // {"http:0.client-channel.google.com:443" : {...}}, |
|
Ryan Hamilton
2016/04/18 17:33:45
should this be :// instead of : ? (and below)
Zhongyi Shi
2016/04/18 19:54:38
yeah, sorry for those typos.
|
| + // {"http:0-edge-chat.facebook.com" : {...}}, |
| // ... |
| // ], ... |
| // }, |
| @@ -506,7 +519,7 @@ void HttpServerPropertiesManager::UpdateCacheFromPrefsOnPrefThread() { |
| if (version < 4) { |
| if (!AddServersData(*servers_dict, spdy_servers.get(), |
| spdy_settings_map.get(), alternative_service_map.get(), |
| - server_network_stats_map.get())) { |
| + server_network_stats_map.get(), version)) { |
| detected_corrupted_prefs = true; |
| } |
| } else { |
| @@ -517,9 +530,10 @@ void HttpServerPropertiesManager::UpdateCacheFromPrefsOnPrefThread() { |
| detected_corrupted_prefs = true; |
| continue; |
| } |
| - if (!AddServersData( |
| - *servers_dict, spdy_servers.get(), spdy_settings_map.get(), |
| - alternative_service_map.get(), server_network_stats_map.get())) { |
| + if (!AddServersData(*servers_dict, spdy_servers.get(), |
| + spdy_settings_map.get(), |
| + alternative_service_map.get(), |
| + server_network_stats_map.get(), version)) { |
| detected_corrupted_prefs = true; |
| } |
| } |
| @@ -547,15 +561,17 @@ bool HttpServerPropertiesManager::AddServersData( |
| ServerList* spdy_servers, |
| SpdySettingsMap* spdy_settings_map, |
| AlternativeServiceMap* alternative_service_map, |
| - ServerNetworkStatsMap* network_stats_map) { |
| + ServerNetworkStatsMap* network_stats_map, |
| + int version) { |
| for (base::DictionaryValue::Iterator it(servers_dict); !it.IsAtEnd(); |
| it.Advance()) { |
| - // TODO(zhongyi): get server's scheme/host/port when servers_dict migrates |
| - // to SchemeHostPort. |
| - // Get server's host/pair. |
| + // Get server's scheme/host/pair. |
| const std::string& server_str = it.key(); |
| - // TODO(zhongyi): fill in the scheme field when servers_dict has scheme. |
| - std::string spdy_server_url = "https://" + server_str; |
| + std::string spdy_server_url = server_str; |
| + if (version < 5) { |
| + // For old version disk data, always use HTTPS as the scheme. |
| + spdy_server_url.insert(0, "https://"); |
| + } |
| url::SchemeHostPort spdy_server((GURL(spdy_server_url))); |
| if (spdy_server.host().empty()) { |
| DVLOG(1) << "Malformed http_server_properties for server: " << server_str; |
| @@ -1037,16 +1053,16 @@ void HttpServerPropertiesManager::UpdatePrefsOnPrefThread( |
| ServerNetworkStatsMap* server_network_stats_map, |
| QuicServerInfoMap* quic_server_info_map, |
| const base::Closure& completion) { |
| - typedef base::MRUCache<HostPortPair, ServerPref> ServerPrefMap; |
| + typedef base::MRUCache<url::SchemeHostPort, ServerPref> ServerPrefMap; |
| ServerPrefMap server_pref_map(ServerPrefMap::NO_AUTO_EVICT); |
| DCHECK(pref_task_runner_->RunsTasksOnCurrentThread()); |
| // Add servers that support spdy to server_pref_map in the MRU order. |
| for (size_t index = spdy_server_list->GetSize(); index > 0; --index) { |
| - std::string s; |
| - if (spdy_server_list->GetString(index - 1, &s)) { |
| - HostPortPair server = HostPortPair::FromString(s); |
| + std::string server_str; |
| + if (spdy_server_list->GetString(index - 1, &server_str)) { |
| + url::SchemeHostPort server((GURL(server_str))); |
| ServerPrefMap::iterator it = server_pref_map.Get(server); |
| if (it == server_pref_map.end()) { |
| ServerPref server_pref; |
| @@ -1061,9 +1077,7 @@ void HttpServerPropertiesManager::UpdatePrefsOnPrefThread( |
| // Add servers that have SpdySettings to server_pref_map in the MRU order. |
| for (SpdySettingsMap::reverse_iterator map_it = spdy_settings_map->rbegin(); |
| map_it != spdy_settings_map->rend(); ++map_it) { |
| - // TODO(zhongyi): use memory data once disk data is migrated. |
| - const url::SchemeHostPort spdy_server = map_it->first; |
| - const HostPortPair server(spdy_server.host(), spdy_server.port()); |
| + const url::SchemeHostPort server = map_it->first; |
| ServerPrefMap::iterator it = server_pref_map.Get(server); |
| if (it == server_pref_map.end()) { |
| ServerPref server_pref; |
| @@ -1078,8 +1092,7 @@ void HttpServerPropertiesManager::UpdatePrefsOnPrefThread( |
| for (AlternativeServiceMap::const_reverse_iterator map_it = |
| alternative_service_map->rbegin(); |
| map_it != alternative_service_map->rend(); ++map_it) { |
| - // TODO(zhongyi): migrate to SHP once server_pref_map is migrated. |
| - const HostPortPair server(map_it->first.host(), map_it->first.port()); |
| + const url::SchemeHostPort server = map_it->first; |
| ServerPrefMap::iterator it = server_pref_map.Get(server); |
| if (it == server_pref_map.end()) { |
| ServerPref server_pref; |
| @@ -1094,9 +1107,7 @@ void HttpServerPropertiesManager::UpdatePrefsOnPrefThread( |
| for (ServerNetworkStatsMap::const_reverse_iterator map_it = |
| server_network_stats_map->rbegin(); |
| map_it != server_network_stats_map->rend(); ++map_it) { |
| - // TODO(zhongyi): use memory data once disk data is migrated. |
| - const url::SchemeHostPort spdy_server = map_it->first; |
| - const HostPortPair server(spdy_server.host(), spdy_server.port()); |
| + const url::SchemeHostPort server = map_it->first; |
| ServerPrefMap::iterator it = server_pref_map.Get(server); |
| if (it == server_pref_map.end()) { |
| ServerPref server_pref; |
| @@ -1112,7 +1123,7 @@ void HttpServerPropertiesManager::UpdatePrefsOnPrefThread( |
| base::ListValue* servers_list = new base::ListValue; |
| for (ServerPrefMap::const_reverse_iterator map_it = server_pref_map.rbegin(); |
| map_it != server_pref_map.rend(); ++map_it) { |
| - const HostPortPair& server = map_it->first; |
| + const url::SchemeHostPort server = map_it->first; |
| const ServerPref& server_pref = map_it->second; |
| base::DictionaryValue* servers_dict = new base::DictionaryValue; |
| @@ -1127,7 +1138,7 @@ void HttpServerPropertiesManager::UpdatePrefsOnPrefThread( |
| SaveNetworkStatsToServerPrefs(server_pref.server_network_stats, |
| server_pref_dict); |
| - servers_dict->SetWithoutPathExpansion(server.ToString(), server_pref_dict); |
| + servers_dict->SetWithoutPathExpansion(server.Serialize(), server_pref_dict); |
| bool value = servers_list->AppendIfNotPresent(servers_dict); |
| DCHECK(value); // Should never happen. |
| } |