| 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 65a5662994e2bf88e2d957b0c1ee9eb9e59a4ca0..ffe234a685344fc6f9ab310114f718029f1a4895 100644
|
| --- a/net/http/http_server_properties_manager.cc
|
| +++ b/net/http/http_server_properties_manager.cc
|
| @@ -37,8 +37,6 @@ const int kMissingVersion = 0;
|
| // The version number of persisted http_server_properties.
|
| const int kVersionNumber = 3;
|
|
|
| -typedef std::vector<std::string> StringVector;
|
| -
|
| // Persist 200 MRU AlternateProtocolHostPortPairs.
|
| const int kMaxAlternateProtocolHostsToPersist = 200;
|
|
|
| @@ -449,6 +447,16 @@ void HttpServerPropertiesManager::UpdateCacheFromPrefsOnPrefThread() {
|
|
|
| // The properties for a given server is in
|
| // http_server_properties_dict["servers"][server].
|
| + // Server data was stored in the following format in alphabetical order.
|
| + //
|
| + // "http_server_properties": {
|
| + // "servers": {
|
| + // "accounts.google.com:443": {...},
|
| + // "accounts.youtube.com:443": {...},
|
| + // "android.clients.google.com:443": {...},
|
| + // ...
|
| + // }, ...
|
| + // },
|
| const base::DictionaryValue* servers_dict = NULL;
|
| if (!http_server_properties_dict.GetDictionaryWithoutPathExpansion(
|
| kServersKey, &servers_dict)) {
|
| @@ -460,7 +468,7 @@ void HttpServerPropertiesManager::UpdateCacheFromPrefsOnPrefThread() {
|
| ReadSupportsQuic(http_server_properties_dict, addr);
|
|
|
| // String is host/port pair of spdy server.
|
| - scoped_ptr<StringVector> spdy_servers(new StringVector);
|
| + scoped_ptr<ServerList> spdy_servers(new ServerList);
|
| scoped_ptr<SpdySettingsMap> spdy_settings_map(
|
| new SpdySettingsMap(kMaxSpdySettingsHostsToPersist));
|
| scoped_ptr<AlternativeServiceMap> alternative_service_map(
|
| @@ -470,22 +478,49 @@ void HttpServerPropertiesManager::UpdateCacheFromPrefsOnPrefThread() {
|
| scoped_ptr<QuicServerInfoMap> quic_server_info_map(
|
| new QuicServerInfoMap(kMaxQuicServersToPersist));
|
|
|
| - for (base::DictionaryValue::Iterator it(*servers_dict); !it.IsAtEnd();
|
| + if (!AddServersData(*servers_dict, spdy_servers.get(),
|
| + spdy_settings_map.get(), alternative_service_map.get(),
|
| + server_network_stats_map.get())) {
|
| + detected_corrupted_prefs = true;
|
| + }
|
| +
|
| + if (!AddToQuicServerInfoMap(http_server_properties_dict,
|
| + quic_server_info_map.get())) {
|
| + detected_corrupted_prefs = true;
|
| + }
|
| +
|
| + network_task_runner_->PostTask(
|
| + FROM_HERE,
|
| + base::Bind(
|
| + &HttpServerPropertiesManager::UpdateCacheFromPrefsOnNetworkThread,
|
| + base::Unretained(this), base::Owned(spdy_servers.release()),
|
| + base::Owned(spdy_settings_map.release()),
|
| + base::Owned(alternative_service_map.release()), base::Owned(addr),
|
| + base::Owned(server_network_stats_map.release()),
|
| + base::Owned(quic_server_info_map.release()),
|
| + detected_corrupted_prefs));
|
| +}
|
| +
|
| +bool HttpServerPropertiesManager::AddServersData(
|
| + const base::DictionaryValue& servers_dict,
|
| + ServerList* spdy_servers,
|
| + SpdySettingsMap* spdy_settings_map,
|
| + AlternativeServiceMap* alternative_service_map,
|
| + ServerNetworkStatsMap* network_stats_map) {
|
| + for (base::DictionaryValue::Iterator it(servers_dict); !it.IsAtEnd();
|
| it.Advance()) {
|
| // Get server's host/pair.
|
| const std::string& server_str = it.key();
|
| HostPortPair server = HostPortPair::FromString(server_str);
|
| if (server.host().empty()) {
|
| DVLOG(1) << "Malformed http_server_properties for server: " << server_str;
|
| - detected_corrupted_prefs = true;
|
| - continue;
|
| + return false;
|
| }
|
|
|
| const base::DictionaryValue* server_pref_dict = NULL;
|
| if (!it.value().GetAsDictionary(&server_pref_dict)) {
|
| DVLOG(1) << "Malformed http_server_properties server: " << server_str;
|
| - detected_corrupted_prefs = true;
|
| - continue;
|
| + return false;
|
| }
|
|
|
| // Get if server supports Spdy.
|
| @@ -495,30 +530,14 @@ void HttpServerPropertiesManager::UpdateCacheFromPrefsOnPrefThread() {
|
| spdy_servers->push_back(server_str);
|
| }
|
|
|
| - AddToSpdySettingsMap(server, *server_pref_dict, spdy_settings_map.get());
|
| + AddToSpdySettingsMap(server, *server_pref_dict, spdy_settings_map);
|
| if (!AddToAlternativeServiceMap(server, *server_pref_dict,
|
| - alternative_service_map.get()) ||
|
| - !AddToNetworkStatsMap(server, *server_pref_dict,
|
| - server_network_stats_map.get())) {
|
| - detected_corrupted_prefs = true;
|
| + alternative_service_map) ||
|
| + !AddToNetworkStatsMap(server, *server_pref_dict, network_stats_map)) {
|
| + return false;
|
| }
|
| }
|
| -
|
| - if (!AddToQuicServerInfoMap(http_server_properties_dict,
|
| - quic_server_info_map.get())) {
|
| - detected_corrupted_prefs = true;
|
| - }
|
| -
|
| - network_task_runner_->PostTask(
|
| - FROM_HERE,
|
| - base::Bind(
|
| - &HttpServerPropertiesManager::UpdateCacheFromPrefsOnNetworkThread,
|
| - base::Unretained(this), base::Owned(spdy_servers.release()),
|
| - base::Owned(spdy_settings_map.release()),
|
| - base::Owned(alternative_service_map.release()), base::Owned(addr),
|
| - base::Owned(server_network_stats_map.release()),
|
| - base::Owned(quic_server_info_map.release()),
|
| - detected_corrupted_prefs));
|
| + return true;
|
| }
|
|
|
| void HttpServerPropertiesManager::AddToSpdySettingsMap(
|
| @@ -768,7 +787,7 @@ bool HttpServerPropertiesManager::AddToQuicServerInfoMap(
|
| }
|
|
|
| void HttpServerPropertiesManager::UpdateCacheFromPrefsOnNetworkThread(
|
| - StringVector* spdy_servers,
|
| + ServerList* spdy_servers,
|
| SpdySettingsMap* spdy_settings_map,
|
| AlternativeServiceMap* alternative_service_map,
|
| IPAddressNumber* last_quic_address,
|
|
|