| 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 397635f007838fd9ad30e51874460b09a147d638..cf891f53f90cbba6383d607fe7293962be1317e7 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;
|
| @@ -460,7 +460,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" : {...},
|
| // ...
|
| // }, ...
|
| // },
|
| @@ -470,14 +470,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" : {...}},
|
| + // {"http://0-edge-chat.facebook.com" : {...}},
|
| // ...
|
| // ], ...
|
| // },
|
| @@ -505,7 +518,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 {
|
| @@ -516,9 +529,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;
|
| }
|
| }
|
| @@ -546,15 +560,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;
|
| @@ -1036,16 +1052,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;
|
| @@ -1060,9 +1076,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;
|
| @@ -1077,8 +1091,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;
|
| @@ -1093,9 +1106,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;
|
| @@ -1111,7 +1122,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;
|
| @@ -1126,7 +1137,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.
|
| }
|
|
|