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 62db0b4a26fe5d658a32704f12f30ba39d20c84f..af728840f5ba8273ea91629eaf323e723b222127 100644 |
--- a/net/http/http_server_properties_manager.cc |
+++ b/net/http/http_server_properties_manager.cc |
@@ -47,6 +47,9 @@ const int kMaxSpdySettingsHostsToPersist = 200; |
// Persist 300 MRU SupportsSpdyServerHostPortPairs. |
const int kMaxSupportsSpdyServerHostsToPersist = 300; |
+// Persist 200 ServerNetworkStats. |
+const int kMaxServerNetworkStatsHostsToPersist = 200; |
+ |
} // namespace |
//////////////////////////////////////////////////////////////////////////////// |
@@ -83,7 +86,7 @@ void HttpServerPropertiesManager::InitializeOnNetworkThread() { |
DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); |
network_weak_ptr_factory_.reset( |
new base::WeakPtrFactory<HttpServerPropertiesManager>(this)); |
- http_server_properties_impl_.reset(new net::HttpServerPropertiesImpl()); |
+ http_server_properties_impl_.reset(new HttpServerPropertiesImpl()); |
network_prefs_update_timer_.reset( |
new base::OneShotTimer<HttpServerPropertiesManager>); |
@@ -114,8 +117,7 @@ void HttpServerPropertiesManager::SetVersion( |
} |
// This is required for conformance with the HttpServerProperties interface. |
-base::WeakPtr<net::HttpServerProperties> |
-HttpServerPropertiesManager::GetWeakPtr() { |
+base::WeakPtr<HttpServerProperties> HttpServerPropertiesManager::GetWeakPtr() { |
DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); |
return network_weak_ptr_factory_->GetWeakPtr(); |
} |
@@ -131,15 +133,13 @@ void HttpServerPropertiesManager::Clear(const base::Closure& completion) { |
UpdatePrefsFromCacheOnNetworkThread(completion); |
} |
-bool HttpServerPropertiesManager::SupportsSpdy( |
- const net::HostPortPair& server) { |
+bool HttpServerPropertiesManager::SupportsSpdy(const HostPortPair& server) { |
DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); |
return http_server_properties_impl_->SupportsSpdy(server); |
} |
-void HttpServerPropertiesManager::SetSupportsSpdy( |
- const net::HostPortPair& server, |
- bool support_spdy) { |
+void HttpServerPropertiesManager::SetSupportsSpdy(const HostPortPair& server, |
+ bool support_spdy) { |
DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); |
http_server_properties_impl_->SetSupportsSpdy(server, support_spdy); |
@@ -147,20 +147,19 @@ void HttpServerPropertiesManager::SetSupportsSpdy( |
} |
bool HttpServerPropertiesManager::HasAlternateProtocol( |
- const net::HostPortPair& server) { |
+ const HostPortPair& server) { |
DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); |
return http_server_properties_impl_->HasAlternateProtocol(server); |
} |
-net::AlternateProtocolInfo |
-HttpServerPropertiesManager::GetAlternateProtocol( |
- const net::HostPortPair& server) { |
+AlternateProtocolInfo HttpServerPropertiesManager::GetAlternateProtocol( |
+ const HostPortPair& server) { |
DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); |
return http_server_properties_impl_->GetAlternateProtocol(server); |
} |
void HttpServerPropertiesManager::SetAlternateProtocol( |
- const net::HostPortPair& server, |
+ const HostPortPair& server, |
uint16 alternate_port, |
AlternateProtocol alternate_protocol, |
double alternate_probability) { |
@@ -171,34 +170,34 @@ void HttpServerPropertiesManager::SetAlternateProtocol( |
} |
void HttpServerPropertiesManager::SetBrokenAlternateProtocol( |
- const net::HostPortPair& server) { |
+ const HostPortPair& server) { |
DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); |
http_server_properties_impl_->SetBrokenAlternateProtocol(server); |
ScheduleUpdatePrefsOnNetworkThread(); |
} |
bool HttpServerPropertiesManager::WasAlternateProtocolRecentlyBroken( |
- const net::HostPortPair& server) { |
+ const HostPortPair& server) { |
DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); |
return http_server_properties_impl_->WasAlternateProtocolRecentlyBroken( |
server); |
} |
void HttpServerPropertiesManager::ConfirmAlternateProtocol( |
- const net::HostPortPair& server) { |
+ const HostPortPair& server) { |
DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); |
http_server_properties_impl_->ConfirmAlternateProtocol(server); |
ScheduleUpdatePrefsOnNetworkThread(); |
} |
void HttpServerPropertiesManager::ClearAlternateProtocol( |
- const net::HostPortPair& server) { |
+ const HostPortPair& server) { |
DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); |
http_server_properties_impl_->ClearAlternateProtocol(server); |
ScheduleUpdatePrefsOnNetworkThread(); |
} |
-const net::AlternateProtocolMap& |
+const AlternateProtocolMap& |
HttpServerPropertiesManager::alternate_protocol_map() const { |
DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); |
return http_server_properties_impl_->alternate_protocol_map(); |
@@ -249,15 +248,14 @@ const SpdySettingsMap& HttpServerPropertiesManager::spdy_settings_map() |
return http_server_properties_impl_->spdy_settings_map(); |
} |
-net::SupportsQuic |
-HttpServerPropertiesManager::GetSupportsQuic( |
- const net::HostPortPair& host_port_pair) const { |
+SupportsQuic HttpServerPropertiesManager::GetSupportsQuic( |
+ const HostPortPair& host_port_pair) const { |
DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); |
return http_server_properties_impl_->GetSupportsQuic(host_port_pair); |
} |
void HttpServerPropertiesManager::SetSupportsQuic( |
- const net::HostPortPair& host_port_pair, |
+ const HostPortPair& host_port_pair, |
bool used_quic, |
const std::string& address) { |
DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); |
@@ -273,19 +271,25 @@ const SupportsQuicMap& HttpServerPropertiesManager::supports_quic_map() |
} |
void HttpServerPropertiesManager::SetServerNetworkStats( |
- const net::HostPortPair& host_port_pair, |
- NetworkStats stats) { |
+ const HostPortPair& host_port_pair, |
+ ServerNetworkStats stats) { |
DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); |
http_server_properties_impl_->SetServerNetworkStats(host_port_pair, stats); |
+ ScheduleUpdatePrefsOnNetworkThread(); |
} |
-const HttpServerPropertiesManager::NetworkStats* |
-HttpServerPropertiesManager::GetServerNetworkStats( |
- const net::HostPortPair& host_port_pair) const { |
+const ServerNetworkStats* HttpServerPropertiesManager::GetServerNetworkStats( |
+ const HostPortPair& host_port_pair) { |
DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); |
return http_server_properties_impl_->GetServerNetworkStats(host_port_pair); |
} |
+const ServerNetworkStatsMap& |
+HttpServerPropertiesManager::server_network_stats_map() const { |
+ DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); |
+ return http_server_properties_impl_->server_network_stats_map(); |
+} |
+ |
// |
// Update the HttpServerPropertiesImpl's cache with data from preferences. |
// |
@@ -336,19 +340,19 @@ void HttpServerPropertiesManager::UpdateCacheFromPrefsOnPrefThread() { |
// String is host/port pair of spdy server. |
scoped_ptr<StringVector> spdy_servers(new StringVector); |
- scoped_ptr<net::SpdySettingsMap> spdy_settings_map( |
- new net::SpdySettingsMap(kMaxSpdySettingsHostsToPersist)); |
- scoped_ptr<net::AlternateProtocolMap> alternate_protocol_map( |
- new net::AlternateProtocolMap(kMaxAlternateProtocolHostsToPersist)); |
- scoped_ptr<net::SupportsQuicMap> supports_quic_map( |
- new net::SupportsQuicMap()); |
+ scoped_ptr<SpdySettingsMap> spdy_settings_map( |
+ new SpdySettingsMap(kMaxSpdySettingsHostsToPersist)); |
+ scoped_ptr<AlternateProtocolMap> alternate_protocol_map( |
+ new AlternateProtocolMap(kMaxAlternateProtocolHostsToPersist)); |
+ scoped_ptr<SupportsQuicMap> supports_quic_map(new SupportsQuicMap()); |
+ scoped_ptr<ServerNetworkStatsMap> server_network_stats_map( |
+ new ServerNetworkStatsMap(kMaxServerNetworkStatsHostsToPersist)); |
- int count = 0; |
for (base::DictionaryValue::Iterator it(*servers_dict); !it.IsAtEnd(); |
it.Advance()) { |
// Get server's host/pair. |
const std::string& server_str = it.key(); |
- net::HostPortPair server = net::HostPortPair::FromString(server_str); |
+ HostPortPair server = HostPortPair::FromString(server_str); |
if (server.host().empty()) { |
DVLOG(1) << "Malformed http_server_properties for server: " << server_str; |
detected_corrupted_prefs = true; |
@@ -374,7 +378,7 @@ void HttpServerPropertiesManager::UpdateCacheFromPrefsOnPrefThread() { |
const base::DictionaryValue* spdy_settings_dict = NULL; |
if (server_pref_dict->GetDictionaryWithoutPathExpansion( |
"settings", &spdy_settings_dict)) { |
- net::SettingsMap settings_map; |
+ SettingsMap settings_map; |
for (base::DictionaryValue::Iterator dict_it(*spdy_settings_dict); |
!dict_it.IsAtEnd(); |
dict_it.Advance()) { |
@@ -392,9 +396,8 @@ void HttpServerPropertiesManager::UpdateCacheFromPrefsOnPrefThread() { |
NOTREACHED(); |
continue; |
} |
- net::SettingsFlagsAndValue flags_and_value(net::SETTINGS_FLAG_PERSISTED, |
- value); |
- settings_map[static_cast<net::SpdySettingsIds>(id)] = flags_and_value; |
+ SettingsFlagsAndValue flags_and_value(SETTINGS_FLAG_PERSISTED, value); |
+ settings_map[static_cast<SpdySettingsIds>(id)] = flags_and_value; |
} |
spdy_settings_map->Put(server, settings_map); |
} |
@@ -403,14 +406,8 @@ void HttpServerPropertiesManager::UpdateCacheFromPrefsOnPrefThread() { |
DCHECK(alternate_protocol_map->Peek(server) == |
alternate_protocol_map->end()); |
const base::DictionaryValue* port_alternate_protocol_dict = NULL; |
- if (!server_pref_dict->GetDictionaryWithoutPathExpansion( |
+ if (server_pref_dict->GetDictionaryWithoutPathExpansion( |
"alternate_protocol", &port_alternate_protocol_dict)) { |
- continue; |
- } |
- |
- if (count >= kMaxAlternateProtocolHostsToPersist) |
- continue; |
- do { |
int port = 0; |
if (!port_alternate_protocol_dict->GetIntegerWithoutPathExpansion( |
"port", &port) || |
@@ -426,9 +423,8 @@ void HttpServerPropertiesManager::UpdateCacheFromPrefsOnPrefThread() { |
detected_corrupted_prefs = true; |
continue; |
} |
- net::AlternateProtocol protocol = |
- net::AlternateProtocolFromString(protocol_str); |
- if (!net::IsAlternateProtocolValid(protocol)) { |
+ AlternateProtocol protocol = AlternateProtocolFromString(protocol_str); |
+ if (!IsAlternateProtocolValid(protocol)) { |
DVLOG(1) << "Malformed Alternate-Protocol server: " << server_str; |
detected_corrupted_prefs = true; |
continue; |
@@ -443,20 +439,16 @@ void HttpServerPropertiesManager::UpdateCacheFromPrefsOnPrefThread() { |
continue; |
} |
- net::AlternateProtocolInfo port_alternate_protocol( |
- static_cast<uint16>(port), protocol, probability); |
+ AlternateProtocolInfo port_alternate_protocol(static_cast<uint16>(port), |
+ protocol, probability); |
alternate_protocol_map->Put(server, port_alternate_protocol); |
- ++count; |
- } while (false); |
+ } |
// Get SupportsQuic. |
DCHECK(supports_quic_map->find(server) == supports_quic_map->end()); |
const base::DictionaryValue* supports_quic_dict = NULL; |
- if (!server_pref_dict->GetDictionaryWithoutPathExpansion( |
+ if (server_pref_dict->GetDictionaryWithoutPathExpansion( |
"supports_quic", &supports_quic_dict)) { |
- continue; |
- } |
- do { |
bool used_quic = 0; |
if (!supports_quic_dict->GetBooleanWithoutPathExpansion( |
"used_quic", &used_quic)) { |
@@ -471,28 +463,49 @@ void HttpServerPropertiesManager::UpdateCacheFromPrefsOnPrefThread() { |
detected_corrupted_prefs = true; |
continue; |
} |
- net::SupportsQuic supports_quic(used_quic, address); |
+ SupportsQuic supports_quic(used_quic, address); |
supports_quic_map->insert(std::make_pair(server, supports_quic)); |
- } while (false); |
+ } |
+ |
+ // Get ServerNetworkStats. |
+ DCHECK(server_network_stats_map->Peek(server) == |
+ server_network_stats_map->end()); |
+ const base::DictionaryValue* server_network_stats_dict = NULL; |
+ if (server_pref_dict->GetDictionaryWithoutPathExpansion( |
+ "network_stats", &server_network_stats_dict)) { |
+ int srtt; |
+ if (!server_network_stats_dict->GetIntegerWithoutPathExpansion("srtt", |
+ &srtt)) { |
+ DVLOG(1) << "Malformed ServerNetworkStats for server: " << server_str; |
+ detected_corrupted_prefs = true; |
+ continue; |
+ } |
+ ServerNetworkStats server_network_stats; |
+ server_network_stats.srtt = base::TimeDelta::FromInternalValue(srtt); |
+ // TODO(rtenneti): When QUIC starts using bandwidth_estimate, then persist |
+ // bandwidth_estimate. |
+ server_network_stats_map->Put(server, server_network_stats); |
+ } |
} |
network_task_runner_->PostTask( |
FROM_HERE, |
base::Bind( |
&HttpServerPropertiesManager::UpdateCacheFromPrefsOnNetworkThread, |
- base::Unretained(this), |
- base::Owned(spdy_servers.release()), |
+ base::Unretained(this), base::Owned(spdy_servers.release()), |
base::Owned(spdy_settings_map.release()), |
base::Owned(alternate_protocol_map.release()), |
base::Owned(supports_quic_map.release()), |
+ base::Owned(server_network_stats_map.release()), |
detected_corrupted_prefs)); |
} |
void HttpServerPropertiesManager::UpdateCacheFromPrefsOnNetworkThread( |
StringVector* spdy_servers, |
- net::SpdySettingsMap* spdy_settings_map, |
- net::AlternateProtocolMap* alternate_protocol_map, |
- net::SupportsQuicMap* supports_quic_map, |
+ SpdySettingsMap* spdy_settings_map, |
+ AlternateProtocolMap* alternate_protocol_map, |
+ SupportsQuicMap* supports_quic_map, |
+ ServerNetworkStatsMap* server_network_stats_map, |
bool detected_corrupted_prefs) { |
// Preferences have the master data because admins might have pushed new |
// preferences. Update the cached data with new data from preferences. |
@@ -515,6 +528,9 @@ void HttpServerPropertiesManager::UpdateCacheFromPrefsOnNetworkThread( |
http_server_properties_impl_->InitializeSupportsQuic(supports_quic_map); |
+ http_server_properties_impl_->InitializeServerNetworkStats( |
+ server_network_stats_map); |
+ |
// Update the prefs with what we have read (delete all corrupted prefs). |
if (detected_corrupted_prefs) |
ScheduleUpdatePrefsOnNetworkThread(); |
@@ -555,28 +571,27 @@ void HttpServerPropertiesManager::UpdatePrefsFromCacheOnNetworkThread( |
http_server_properties_impl_->GetSpdyServerList( |
spdy_server_list, kMaxSupportsSpdyServerHostsToPersist); |
- net::SpdySettingsMap* spdy_settings_map = |
- new net::SpdySettingsMap(kMaxSpdySettingsHostsToPersist); |
- const net::SpdySettingsMap& main_map = |
+ SpdySettingsMap* spdy_settings_map = |
+ new SpdySettingsMap(kMaxSpdySettingsHostsToPersist); |
+ const SpdySettingsMap& main_map = |
http_server_properties_impl_->spdy_settings_map(); |
int count = 0; |
- for (net::SpdySettingsMap::const_iterator it = main_map.begin(); |
+ for (SpdySettingsMap::const_iterator it = main_map.begin(); |
it != main_map.end() && count < kMaxSpdySettingsHostsToPersist; |
++it, ++count) { |
spdy_settings_map->Put(it->first, it->second); |
} |
- net::AlternateProtocolMap* alternate_protocol_map = |
- new net::AlternateProtocolMap(kMaxAlternateProtocolHostsToPersist); |
- const net::AlternateProtocolMap& map = |
+ AlternateProtocolMap* alternate_protocol_map = |
+ new AlternateProtocolMap(kMaxAlternateProtocolHostsToPersist); |
+ const AlternateProtocolMap& map = |
http_server_properties_impl_->alternate_protocol_map(); |
count = 0; |
typedef std::map<std::string, bool> CanonicalHostPersistedMap; |
CanonicalHostPersistedMap persisted_map; |
- for (net::AlternateProtocolMap::const_iterator it = map.begin(); |
- it != map.end() && count < kMaxAlternateProtocolHostsToPersist; |
- ++it) { |
- const net::HostPortPair& server = it->first; |
+ for (AlternateProtocolMap::const_iterator it = map.begin(); |
+ it != map.end() && count < kMaxAlternateProtocolHostsToPersist; ++it) { |
+ const HostPortPair& server = it->first; |
std::string canonical_suffix = |
http_server_properties_impl_->GetCanonicalSuffix(server); |
if (!canonical_suffix.empty()) { |
@@ -588,55 +603,69 @@ void HttpServerPropertiesManager::UpdatePrefsFromCacheOnNetworkThread( |
++count; |
} |
- net::SupportsQuicMap* supports_quic_map = new net::SupportsQuicMap(); |
- const net::SupportsQuicMap& main_supports_quic_map = |
+ SupportsQuicMap* supports_quic_map = new SupportsQuicMap(); |
+ const SupportsQuicMap& main_supports_quic_map = |
http_server_properties_impl_->supports_quic_map(); |
- for (net::SupportsQuicMap::const_iterator it = main_supports_quic_map.begin(); |
+ for (SupportsQuicMap::const_iterator it = main_supports_quic_map.begin(); |
it != main_supports_quic_map.end(); ++it) { |
supports_quic_map->insert(std::make_pair(it->first, it->second)); |
} |
+ ServerNetworkStatsMap* server_network_stats_map = |
+ new ServerNetworkStatsMap(kMaxServerNetworkStatsHostsToPersist); |
+ const ServerNetworkStatsMap& main_server_network_stats_map = |
+ http_server_properties_impl_->server_network_stats_map(); |
+ for (ServerNetworkStatsMap::const_iterator it = |
+ main_server_network_stats_map.begin(); |
+ it != main_server_network_stats_map.end(); ++it) { |
+ server_network_stats_map->Put(it->first, it->second); |
+ } |
+ |
// Update the preferences on the pref thread. |
pref_task_runner_->PostTask( |
FROM_HERE, |
- base::Bind(&HttpServerPropertiesManager::UpdatePrefsOnPrefThread, |
- pref_weak_ptr_, |
- base::Owned(spdy_server_list), |
- base::Owned(spdy_settings_map), |
- base::Owned(alternate_protocol_map), |
- base::Owned(supports_quic_map), |
- completion)); |
+ base::Bind( |
+ &HttpServerPropertiesManager::UpdatePrefsOnPrefThread, pref_weak_ptr_, |
+ base::Owned(spdy_server_list), base::Owned(spdy_settings_map), |
+ base::Owned(alternate_protocol_map), base::Owned(supports_quic_map), |
+ base::Owned(server_network_stats_map), completion)); |
} |
// A local or temporary data structure to hold |supports_spdy|, SpdySettings, |
// AlternateProtocolInfo and SupportsQuic preferences for a server. This is used |
// only in UpdatePrefsOnPrefThread. |
struct ServerPref { |
- ServerPref() : supports_spdy(false), |
- settings_map(NULL), |
- alternate_protocol(NULL), |
- supports_quic(NULL) {} |
+ ServerPref() |
+ : supports_spdy(false), |
+ settings_map(NULL), |
+ alternate_protocol(NULL), |
+ supports_quic(NULL), |
+ server_network_stats(NULL) {} |
ServerPref(bool supports_spdy, |
- const net::SettingsMap* settings_map, |
- const net::AlternateProtocolInfo* alternate_protocol, |
- const net::SupportsQuic* supports_quic) |
+ const SettingsMap* settings_map, |
+ const AlternateProtocolInfo* alternate_protocol, |
+ const SupportsQuic* supports_quic, |
+ const ServerNetworkStats* server_network_stats) |
: supports_spdy(supports_spdy), |
settings_map(settings_map), |
alternate_protocol(alternate_protocol), |
- supports_quic(supports_quic) {} |
+ supports_quic(supports_quic), |
+ server_network_stats(server_network_stats) {} |
bool supports_spdy; |
- const net::SettingsMap* settings_map; |
- const net::AlternateProtocolInfo* alternate_protocol; |
- const net::SupportsQuic* supports_quic; |
+ const SettingsMap* settings_map; |
+ const AlternateProtocolInfo* alternate_protocol; |
+ const SupportsQuic* supports_quic; |
+ const ServerNetworkStats* server_network_stats; |
}; |
void HttpServerPropertiesManager::UpdatePrefsOnPrefThread( |
base::ListValue* spdy_server_list, |
- net::SpdySettingsMap* spdy_settings_map, |
- net::AlternateProtocolMap* alternate_protocol_map, |
- net::SupportsQuicMap* supports_quic_map, |
+ SpdySettingsMap* spdy_settings_map, |
+ AlternateProtocolMap* alternate_protocol_map, |
+ SupportsQuicMap* supports_quic_map, |
+ ServerNetworkStatsMap* server_network_stats_map, |
const base::Closure& completion) { |
- typedef std::map<net::HostPortPair, ServerPref> ServerPrefMap; |
+ typedef std::map<HostPortPair, ServerPref> ServerPrefMap; |
ServerPrefMap server_pref_map; |
DCHECK(pref_task_runner_->RunsTasksOnCurrentThread()); |
@@ -647,11 +676,11 @@ void HttpServerPropertiesManager::UpdatePrefsOnPrefThread( |
list_it != spdy_server_list->end(); |
++list_it) { |
if ((*list_it)->GetAsString(&s)) { |
- net::HostPortPair server = net::HostPortPair::FromString(s); |
+ HostPortPair server = HostPortPair::FromString(s); |
ServerPrefMap::iterator it = server_pref_map.find(server); |
if (it == server_pref_map.end()) { |
- ServerPref server_pref(true, NULL, NULL, NULL); |
+ ServerPref server_pref(true, NULL, NULL, NULL, NULL); |
server_pref_map[server] = server_pref; |
} else { |
it->second.supports_spdy = true; |
@@ -660,14 +689,13 @@ void HttpServerPropertiesManager::UpdatePrefsOnPrefThread( |
} |
// Add servers that have SpdySettings to server_pref_map. |
- for (net::SpdySettingsMap::iterator map_it = spdy_settings_map->begin(); |
- map_it != spdy_settings_map->end(); |
- ++map_it) { |
- const net::HostPortPair& server = map_it->first; |
+ for (SpdySettingsMap::iterator map_it = spdy_settings_map->begin(); |
+ map_it != spdy_settings_map->end(); ++map_it) { |
+ const HostPortPair& server = map_it->first; |
ServerPrefMap::iterator it = server_pref_map.find(server); |
if (it == server_pref_map.end()) { |
- ServerPref server_pref(false, &map_it->second, NULL, NULL); |
+ ServerPref server_pref(false, &map_it->second, NULL, NULL, NULL); |
server_pref_map[server] = server_pref; |
} else { |
it->second.settings_map = &map_it->second; |
@@ -675,20 +703,18 @@ void HttpServerPropertiesManager::UpdatePrefsOnPrefThread( |
} |
// Add AlternateProtocol servers to server_pref_map. |
- for (net::AlternateProtocolMap::const_iterator map_it = |
+ for (AlternateProtocolMap::const_iterator map_it = |
alternate_protocol_map->begin(); |
- map_it != alternate_protocol_map->end(); |
- ++map_it) { |
- const net::HostPortPair& server = map_it->first; |
- const net::AlternateProtocolInfo& port_alternate_protocol = |
- map_it->second; |
- if (!net::IsAlternateProtocolValid(port_alternate_protocol.protocol)) { |
+ map_it != alternate_protocol_map->end(); ++map_it) { |
+ const HostPortPair& server = map_it->first; |
+ const AlternateProtocolInfo& port_alternate_protocol = map_it->second; |
+ if (!IsAlternateProtocolValid(port_alternate_protocol.protocol)) { |
continue; |
} |
ServerPrefMap::iterator it = server_pref_map.find(server); |
if (it == server_pref_map.end()) { |
- ServerPref server_pref(false, NULL, &map_it->second, NULL); |
+ ServerPref server_pref(false, NULL, &map_it->second, NULL, NULL); |
server_pref_map[server] = server_pref; |
} else { |
it->second.alternate_protocol = &map_it->second; |
@@ -696,26 +722,41 @@ void HttpServerPropertiesManager::UpdatePrefsOnPrefThread( |
} |
// Add SupportsQuic servers to server_pref_map. |
- for (net::SupportsQuicMap::const_iterator map_it = supports_quic_map->begin(); |
+ for (SupportsQuicMap::const_iterator map_it = supports_quic_map->begin(); |
map_it != supports_quic_map->end(); ++map_it) { |
- const net::HostPortPair& server = map_it->first; |
+ const HostPortPair& server = map_it->first; |
ServerPrefMap::iterator it = server_pref_map.find(server); |
if (it == server_pref_map.end()) { |
- ServerPref server_pref(false, NULL, NULL, &map_it->second); |
+ ServerPref server_pref(false, NULL, NULL, &map_it->second, NULL); |
server_pref_map[server] = server_pref; |
} else { |
it->second.supports_quic = &map_it->second; |
} |
} |
+ // Add ServerNetworkStats servers to server_pref_map. |
+ for (ServerNetworkStatsMap::const_iterator map_it = |
+ server_network_stats_map->begin(); |
+ map_it != server_network_stats_map->end(); ++map_it) { |
+ const HostPortPair& server = map_it->first; |
+ |
+ ServerPrefMap::iterator it = server_pref_map.find(server); |
+ if (it == server_pref_map.end()) { |
+ ServerPref server_pref(false, NULL, NULL, NULL, &map_it->second); |
+ server_pref_map[server] = server_pref; |
+ } else { |
+ it->second.server_network_stats = &map_it->second; |
+ } |
+ } |
+ |
// Persist properties to the |path_|. |
base::DictionaryValue http_server_properties_dict; |
base::DictionaryValue* servers_dict = new base::DictionaryValue; |
for (ServerPrefMap::const_iterator map_it = server_pref_map.begin(); |
map_it != server_pref_map.end(); |
++map_it) { |
- const net::HostPortPair& server = map_it->first; |
+ const HostPortPair& server = map_it->first; |
const ServerPref& server_pref = map_it->second; |
base::DictionaryValue* server_pref_dict = new base::DictionaryValue; |
@@ -727,11 +768,9 @@ void HttpServerPropertiesManager::UpdatePrefsOnPrefThread( |
// Save SPDY settings. |
if (server_pref.settings_map) { |
base::DictionaryValue* spdy_settings_dict = new base::DictionaryValue; |
- for (net::SettingsMap::const_iterator it = |
- server_pref.settings_map->begin(); |
- it != server_pref.settings_map->end(); |
- ++it) { |
- net::SpdySettingsIds id = it->first; |
+ for (SettingsMap::const_iterator it = server_pref.settings_map->begin(); |
+ it != server_pref.settings_map->end(); ++it) { |
+ SpdySettingsIds id = it->first; |
uint32 value = it->second.second; |
std::string key = base::StringPrintf("%u", id); |
spdy_settings_dict->SetInteger(key, value); |
@@ -740,7 +779,7 @@ void HttpServerPropertiesManager::UpdatePrefsOnPrefThread( |
} |
// Save alternate_protocol. |
- const net::AlternateProtocolInfo* port_alternate_protocol = |
+ const AlternateProtocolInfo* port_alternate_protocol = |
server_pref.alternate_protocol; |
if (port_alternate_protocol && !port_alternate_protocol->is_broken) { |
base::DictionaryValue* port_alternate_protocol_dict = |
@@ -748,7 +787,7 @@ void HttpServerPropertiesManager::UpdatePrefsOnPrefThread( |
port_alternate_protocol_dict->SetInteger("port", |
port_alternate_protocol->port); |
const char* protocol_str = |
- net::AlternateProtocolToString(port_alternate_protocol->protocol); |
+ AlternateProtocolToString(port_alternate_protocol->protocol); |
port_alternate_protocol_dict->SetString("protocol_str", protocol_str); |
port_alternate_protocol_dict->SetDouble( |
"probability", port_alternate_protocol->probability); |
@@ -759,13 +798,29 @@ void HttpServerPropertiesManager::UpdatePrefsOnPrefThread( |
// Save supports_quic. |
if (server_pref.supports_quic) { |
base::DictionaryValue* supports_quic_dict = new base::DictionaryValue; |
- const net::SupportsQuic* supports_quic = server_pref.supports_quic; |
+ const SupportsQuic* supports_quic = server_pref.supports_quic; |
supports_quic_dict->SetBoolean("used_quic", supports_quic->used_quic); |
supports_quic_dict->SetString("address", supports_quic->address); |
server_pref_dict->SetWithoutPathExpansion( |
"supports_quic", supports_quic_dict); |
} |
+ // Save ServerNetworkStats. |
+ if (server_pref.server_network_stats) { |
+ base::DictionaryValue* server_network_stats_dict = |
+ new base::DictionaryValue; |
+ const ServerNetworkStats* server_network_stats = |
+ server_pref.server_network_stats; |
+ // Becasue JSON doesn't support int64, persist int64 as a string. |
+ server_network_stats_dict->SetInteger( |
+ "srtt", |
+ static_cast<int>(server_network_stats->srtt.ToInternalValue())); |
+ // TODO(rtenneti): When QUIC starts using bandwidth_estimate, then persist |
+ // bandwidth_estimate. |
+ server_pref_dict->SetWithoutPathExpansion("network_stats", |
+ server_network_stats_dict); |
+ } |
+ |
servers_dict->SetWithoutPathExpansion(server.ToString(), server_pref_dict); |
} |