typedef std::vector<std::string> StringVector;
+// Persist 200 MRU AlternateProtocolHostPortPairs.
+const int kMaxAlternateProtocolHostsToPersist = 200;
+
+// Persist 200 MRU SpdySettingsHostPortPairs.
+const int kMaxSpdySettingsHostsToPersist = 200;
+
+// Persist 300 MRU SupportsSpdyServerHostPortPairs.
+const int kMaxSupportsSpdyServerHostsToPersist = 300;
+
} // namespace
////////////////////////////////////////////////////////////////////////////////
}
bool HttpServerPropertiesManager::SupportsSpdy(
- const net::HostPortPair& server) const {
+ const net::HostPortPair& server) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
return http_server_properties_impl_->SupportsSpdy(server);
}
}
bool HttpServerPropertiesManager::HasAlternateProtocol(
- const net::HostPortPair& server) const {
+ const net::HostPortPair& server) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
return http_server_properties_impl_->HasAlternateProtocol(server);
}
net::PortAlternateProtocolPair
HttpServerPropertiesManager::GetAlternateProtocol(
- const net::HostPortPair& server) const {
+ const net::HostPortPair& server) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
return http_server_properties_impl_->GetAlternateProtocol(server);
}
ScheduleUpdatePrefsOnIO();
}
+bool HttpServerPropertiesManager::WasAlternateProtocolRecentlyBroken(
+ const net::HostPortPair& server) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+ return http_server_properties_impl_->WasAlternateProtocolRecentlyBroken(
+ server);
+}
+
+void HttpServerPropertiesManager::ConfirmAlternateProtocol(
+ const net::HostPortPair& server) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+ http_server_properties_impl_->ConfirmAlternateProtocol(server);
+ ScheduleUpdatePrefsOnIO();
+}
+
+void HttpServerPropertiesManager::ClearAlternateProtocol(
+ const net::HostPortPair& server) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+ http_server_properties_impl_->ClearAlternateProtocol(server);
+ ScheduleUpdatePrefsOnIO();
+}
+
const net::AlternateProtocolMap&
HttpServerPropertiesManager::alternate_protocol_map() const {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
const net::SettingsMap&
HttpServerPropertiesManager::GetSpdySettings(
- const net::HostPortPair& host_port_pair) const {
+ const net::HostPortPair& host_port_pair) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
return http_server_properties_impl_->GetSpdySettings(host_port_pair);
}
return;
}
- // TODO(rtenneti): Mark entries with an LRU sequence number (date of access?),
- // and then truncate down deleting old stuff.
- if (version != kVersionNumber && servers_dict->size() > 300) {
- DVLOG(1) << "Size is too large. Clearing all properties.";
- return;
- }
-
// 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);
+ scoped_ptr<net::SpdySettingsMap> spdy_settings_map(
+ new net::SpdySettingsMap(kMaxSpdySettingsHostsToPersist));
scoped_ptr<net::PipelineCapabilityMap> pipeline_capability_map(
new net::PipelineCapabilityMap);
scoped_ptr<net::AlternateProtocolMap> alternate_protocol_map(
- new net::AlternateProtocolMap);
+ new net::AlternateProtocolMap(kMaxAlternateProtocolHostsToPersist));
for (base::DictionaryValue::Iterator it(*servers_dict); !it.IsAtEnd();
it.Advance()) {
}
// Get SpdySettings.
- DCHECK(!ContainsKey(*spdy_settings_map, server));
+ DCHECK(spdy_settings_map->Peek(server) == spdy_settings_map->end());
const base::DictionaryValue* spdy_settings_dict = NULL;
if (server_pref_dict->GetDictionaryWithoutPathExpansion(
"settings", &spdy_settings_dict)) {
net::SETTINGS_FLAG_PERSISTED, value);
settings_map[static_cast<net::SpdySettingsIds>(id)] = flags_and_value;
}
- (*spdy_settings_map)[server] = settings_map;
+ spdy_settings_map->Put(server, settings_map);
}
int pipeline_capability = net::PIPELINE_UNKNOWN;
}
// Get alternate_protocol server.
- DCHECK(!ContainsKey(*alternate_protocol_map, server));
+ DCHECK(alternate_protocol_map->Peek(server) ==
+ alternate_protocol_map->end());
const base::DictionaryValue* port_alternate_protocol_dict = NULL;
if (!server_pref_dict->GetDictionaryWithoutPathExpansion(
"alternate_protocol", &port_alternate_protocol_dict)) {
port_alternate_protocol.port = port;
port_alternate_protocol.protocol = protocol;
- (*alternate_protocol_map)[server] = port_alternate_protocol;
+ alternate_protocol_map->Put(server, port_alternate_protocol);
} while (false);
}
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
base::ListValue* spdy_server_list = new base::ListValue;
- http_server_properties_impl_->GetSpdyServerList(spdy_server_list);
-
- net::SpdySettingsMap* spdy_settings_map = new net::SpdySettingsMap;
- *spdy_settings_map = http_server_properties_impl_->spdy_settings_map();
+ http_server_properties_impl_->GetSpdyServerList(
+ spdy_server_list, kMaxSupportsSpdyServerHostsToPersist);
+
+ net::SpdySettingsMap* spdy_settings_map =
+ new net::SpdySettingsMap(kMaxSpdySettingsHostsToPersist);
+ const net::SpdySettingsMap& main_map =
+ http_server_properties_impl_->spdy_settings_map();
+ int count = 0;
+ for (net::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;
- *alternate_protocol_map =
+ new net::AlternateProtocolMap(kMaxAlternateProtocolHostsToPersist);
+ const net::AlternateProtocolMap& map =
http_server_properties_impl_->alternate_protocol_map();
+ count = 0;
+ for (net::AlternateProtocolMap::const_iterator it = map.begin();
+ it != map.end() && count < kMaxAlternateProtocolHostsToPersist;
+ ++it, ++count) {
+ alternate_protocol_map->Put(it->first, it->second);
+ }
net::PipelineCapabilityMap* pipeline_capability_map =
new net::PipelineCapabilityMap;
}
// Add servers that have SpdySettings to server_pref_map.
- for (net::SpdySettingsMap::iterator map_it =
- spdy_settings_map->begin();
+ 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;
// Add AlternateProtocol servers to server_pref_map.
for (net::AlternateProtocolMap::const_iterator map_it =
- alternate_protocol_map->begin();
+ alternate_protocol_map->begin();
map_it != alternate_protocol_map->end(); ++map_it) {
const net::HostPortPair& server = map_it->first;
const net::PortAlternateProtocolPair& port_alternate_protocol =
base::DictionaryValue* server_pref_dict = new base::DictionaryValue;
// Save supports_spdy.
- server_pref_dict->SetBoolean("supports_spdy", server_pref.supports_spdy);
+ if (server_pref.supports_spdy)
+ server_pref_dict->SetBoolean("supports_spdy", server_pref.supports_spdy);
// Save SPDY settings.
if (server_pref.settings_map) {