summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/net/http_server_properties_manager.cc88
-rw-r--r--chrome/browser/net/http_server_properties_manager.h26
-rw-r--r--chrome/browser/net/http_server_properties_manager_unittest.cc73
3 files changed, 103 insertions, 84 deletions
diff --git a/chrome/browser/net/http_server_properties_manager.cc b/chrome/browser/net/http_server_properties_manager.cc
index f884937..285082f 100644
--- a/chrome/browser/net/http_server_properties_manager.cc
+++ b/chrome/browser/net/http_server_properties_manager.cc
@@ -140,31 +140,21 @@ HttpServerPropertiesManager::alternate_protocol_map() const {
return http_server_properties_impl_->alternate_protocol_map();
}
-const net::SpdySettings&
+const net::SettingsMap&
HttpServerPropertiesManager::GetSpdySettings(
const net::HostPortPair& host_port_pair) const {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
return http_server_properties_impl_->GetSpdySettings(host_port_pair);
}
-// Saves settings for a host.
-bool HttpServerPropertiesManager::SetSpdySettings(
- const net::HostPortPair& host_port_pair,
- const net::SpdySettings& settings) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
- bool persist = http_server_properties_impl_->SetSpdySettings(
- host_port_pair, settings);
- if (persist)
- ScheduleUpdatePrefsOnIO();
- return persist;
-}
-
bool HttpServerPropertiesManager::SetSpdySetting(
const net::HostPortPair& host_port_pair,
- const net::SpdySetting& setting) {
+ net::SpdySettingsIds id,
+ net::SpdySettingsFlags flags,
+ uint32 value) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
bool persist = http_server_properties_impl_->SetSpdySetting(
- host_port_pair, setting);
+ host_port_pair, id, flags, value);
if (persist)
ScheduleUpdatePrefsOnIO();
return persist;
@@ -278,8 +268,48 @@ void HttpServerPropertiesManager::UpdateCacheFromPrefsOnUI() {
spdy_servers->push_back(server_str);
}
- // TODO(rtenneti): Implement reading of SpdySettings.
+ // Get SpdySettings.
DCHECK(!ContainsKey(*spdy_settings_map, server));
+ base::ListValue* spdy_settings_list = NULL;
+ if (server_pref_dict->GetListWithoutPathExpansion(
+ "settings", &spdy_settings_list)) {
+ net::SettingsMap settings_map;
+
+ for (base::ListValue::const_iterator list_it =
+ spdy_settings_list->begin();
+ list_it != spdy_settings_list->end(); ++list_it) {
+ if ((*list_it)->GetType() != Value::TYPE_DICTIONARY) {
+ DVLOG(1) << "Malformed SpdySettingsList for server: " << server_str;
+ NOTREACHED();
+ continue;
+ }
+
+ const base::DictionaryValue* spdy_setting_dict =
+ static_cast<const base::DictionaryValue*>(*list_it);
+
+ int id = 0;
+ if (!spdy_setting_dict->GetIntegerWithoutPathExpansion("id", &id)) {
+ DVLOG(1) << "Malformed id in SpdySettings for server: " << server_str;
+ NOTREACHED();
+ continue;
+ }
+
+ int value = 0;
+ if (!spdy_setting_dict->GetIntegerWithoutPathExpansion("value",
+ &value)) {
+ DVLOG(1) << "Malformed value in SpdySettings for server: " <<
+ server_str;
+ NOTREACHED();
+ continue;
+ }
+
+ net::SettingsFlagsAndValue flags_and_value(
+ net::SETTINGS_FLAG_PERSISTED, value);
+ settings_map[static_cast<net::SpdySettingsIds>(id)] = flags_and_value;
+ }
+
+ (*spdy_settings_map)[server] = settings_map;
+ }
int pipeline_capability = net::PIPELINE_UNKNOWN;
if ((server_pref_dict->GetInteger(
@@ -423,20 +453,20 @@ void HttpServerPropertiesManager::UpdatePrefsFromCacheOnIO() {
struct ServerPref {
ServerPref()
: supports_spdy(false),
- settings(NULL),
+ settings_map(NULL),
alternate_protocol(NULL),
pipeline_capability(net::PIPELINE_UNKNOWN) {
}
ServerPref(bool supports_spdy,
- const net::SpdySettings* settings,
+ const net::SettingsMap* settings_map,
const net::PortAlternateProtocolPair* alternate_protocol)
: supports_spdy(supports_spdy),
- settings(settings),
+ settings_map(settings_map),
alternate_protocol(alternate_protocol),
pipeline_capability(net::PIPELINE_UNKNOWN) {
}
bool supports_spdy;
- const net::SpdySettings* settings;
+ const net::SettingsMap* settings_map;
const net::PortAlternateProtocolPair* alternate_protocol;
net::HttpPipelinedHostCapability pipeline_capability;
};
@@ -480,7 +510,7 @@ void HttpServerPropertiesManager::UpdatePrefsOnUI(
ServerPref server_pref(false, &map_it->second, NULL);
server_pref_map[server] = server_pref;
} else {
- it->second.settings = &map_it->second;
+ it->second.settings_map = &map_it->second;
}
}
@@ -535,7 +565,21 @@ void HttpServerPropertiesManager::UpdatePrefsOnUI(
// Save supports_spdy.
server_pref_dict->SetBoolean("supports_spdy", server_pref.supports_spdy);
- // TODO(rtenneti): Implement save SpdySettings.
+ // Save SPDY settings.
+ if (server_pref.settings_map) {
+ base::ListValue* spdy_settings_list = new ListValue();
+ for (net::SettingsMap::const_iterator it =
+ server_pref.settings_map->begin();
+ it != server_pref.settings_map->end(); ++it) {
+ net::SpdySettingsIds id = it->first;
+ uint32 value = it->second.second;
+ base::DictionaryValue* spdy_setting_dict = new base::DictionaryValue;
+ spdy_setting_dict->SetInteger("id", id);
+ spdy_setting_dict->SetInteger("value", value);
+ spdy_settings_list->Append(spdy_setting_dict);
+ }
+ server_pref_dict->Set("settings", spdy_settings_list);
+ }
// Save alternate_protocol.
if (server_pref.alternate_protocol) {
diff --git a/chrome/browser/net/http_server_properties_manager.h b/chrome/browser/net/http_server_properties_manager.h
index 47fc23f..2dbab04 100644
--- a/chrome/browser/net/http_server_properties_manager.h
+++ b/chrome/browser/net/http_server_properties_manager.h
@@ -107,26 +107,22 @@ class HttpServerPropertiesManager
virtual const net::AlternateProtocolMap&
alternate_protocol_map() const OVERRIDE;
- // Gets a reference to the SpdySettings stored for a host.
- // If no settings are stored, returns an empty set of settings.
- virtual const net::SpdySettings& GetSpdySettings(
+ // Gets a reference to the SettingsMap stored for a host.
+ // If no settings are stored, returns an empty SettingsMap.
+ virtual const net::SettingsMap& GetSpdySettings(
const net::HostPortPair& host_port_pair) const OVERRIDE;
- // Saves settings for a host. Returns true if SpdySettings are persisted.
- virtual bool SetSpdySettings(
- const net::HostPortPair& host_port_pair,
- const net::SpdySettings& settings) OVERRIDE;
+ // Saves an individual SPDY setting for a host. Returns true if SPDY setting
+ // is to be persisted.
+ virtual bool SetSpdySetting(const net::HostPortPair& host_port_pair,
+ net::SpdySettingsIds id,
+ net::SpdySettingsFlags flags,
+ uint32 value) OVERRIDE;
- // Saves an individual setting for a host. Returns true if SpdySetting is
- // persisted.
- virtual bool SetSpdySetting(
- const net::HostPortPair& host_port_pair,
- const net::SpdySetting& setting) OVERRIDE;
-
- // Clears all spdy_settings.
+ // Clears all SPDY settings.
virtual void ClearSpdySettings() OVERRIDE;
- // Returns all SpdySettings mappings.
+ // Returns all SPDY persistent settings.
virtual const net::SpdySettingsMap& spdy_settings_map() const OVERRIDE;
virtual net::HttpPipelinedHostCapability GetPipelineCapability(
diff --git a/chrome/browser/net/http_server_properties_manager_unittest.cc b/chrome/browser/net/http_server_properties_manager_unittest.cc
index 4daa14d..6602b3b 100644
--- a/chrome/browser/net/http_server_properties_manager_unittest.cc
+++ b/chrome/browser/net/http_server_properties_manager_unittest.cc
@@ -238,51 +238,28 @@ TEST_F(HttpServerPropertiesManagerTest, SupportsSpdy) {
Mock::VerifyAndClearExpectations(http_server_props_manager_.get());
}
-TEST_F(HttpServerPropertiesManagerTest, SetSpdySettings) {
- ExpectPrefsUpdate();
-
- // Add SpdySettings for mail.google.com:443.
- net::HostPortPair spdy_server_mail("mail.google.com", 443);
- net::SpdySettings spdy_settings;
- net::SettingsFlagsAndId id1(net::SETTINGS_FLAG_PLEASE_PERSIST, 1234);
- spdy_settings.push_back(std::make_pair(id1, 31337));
- http_server_props_manager_->SetSpdySettings(spdy_server_mail, spdy_settings);
-
- // Run the task.
- loop_.RunAllPending();
-
- net::SpdySettings spdy_settings_ret =
- http_server_props_manager_->GetSpdySettings(spdy_server_mail);
- ASSERT_EQ(1U, spdy_settings_ret.size());
- net::SpdySetting spdy_setting1_ret = spdy_settings_ret.front();
- net::SettingsFlagsAndId id1_ret(spdy_setting1_ret.first);
- EXPECT_EQ(1234U, id1_ret.id());
- EXPECT_EQ(net::SETTINGS_FLAG_PERSISTED, id1_ret.flags());
- EXPECT_EQ(31337U, spdy_setting1_ret.second);
-
- Mock::VerifyAndClearExpectations(http_server_props_manager_.get());
-}
-
TEST_F(HttpServerPropertiesManagerTest, SetSpdySetting) {
ExpectPrefsUpdate();
// Add SpdySetting for mail.google.com:443.
net::HostPortPair spdy_server_mail("mail.google.com", 443);
- net::SettingsFlagsAndId id1(net::SETTINGS_FLAG_PLEASE_PERSIST, 1234);
+ const net::SpdySettingsIds id1 = net::SETTINGS_UPLOAD_BANDWIDTH;
+ const net::SpdySettingsFlags flags1 = net::SETTINGS_FLAG_PLEASE_PERSIST;
+ const uint32 value1 = 31337;
http_server_props_manager_->SetSpdySetting(
- spdy_server_mail, std::make_pair(id1, 31337));
+ spdy_server_mail, id1, flags1, value1);
// Run the task.
loop_.RunAllPending();
- net::SpdySettings spdy_settings_ret =
+ const net::SettingsMap& settings_map1_ret =
http_server_props_manager_->GetSpdySettings(spdy_server_mail);
- ASSERT_EQ(1U, spdy_settings_ret.size());
- net::SpdySetting spdy_setting1_ret = spdy_settings_ret.front();
- net::SettingsFlagsAndId id1_ret(spdy_setting1_ret.first);
- EXPECT_EQ(1234U, id1_ret.id());
- EXPECT_EQ(net::SETTINGS_FLAG_PERSISTED, id1_ret.flags());
- EXPECT_EQ(31337U, spdy_setting1_ret.second);
+ ASSERT_EQ(1U, settings_map1_ret.size());
+ net::SettingsMap::const_iterator it1_ret = settings_map1_ret.find(id1);
+ EXPECT_TRUE(it1_ret != settings_map1_ret.end());
+ net::SettingsFlagsAndValue flags_and_value1_ret = it1_ret->second;
+ EXPECT_EQ(net::SETTINGS_FLAG_PERSISTED, flags_and_value1_ret.first);
+ EXPECT_EQ(value1, flags_and_value1_ret.second);
Mock::VerifyAndClearExpectations(http_server_props_manager_.get());
}
@@ -343,10 +320,11 @@ TEST_F(HttpServerPropertiesManagerTest, Clear) {
http_server_props_manager_->SetAlternateProtocol(
spdy_server_mail, 443, net::NPN_SPDY_2);
- net::SpdySettings spdy_settings;
- net::SettingsFlagsAndId id1(net::SETTINGS_FLAG_PLEASE_PERSIST, 1234);
- spdy_settings.push_back(std::make_pair(id1, 31337));
- http_server_props_manager_->SetSpdySettings(spdy_server_mail, spdy_settings);
+ const net::SpdySettingsIds id1 = net::SETTINGS_UPLOAD_BANDWIDTH;
+ const net::SpdySettingsFlags flags1 = net::SETTINGS_FLAG_PLEASE_PERSIST;
+ const uint32 value1 = 31337;
+ http_server_props_manager_->SetSpdySetting(
+ spdy_server_mail, id1, flags1, value1);
net::HostPortPair known_pipeliner("pipeline.com", 8080);
http_server_props_manager_->SetPipelineCapability(known_pipeliner,
@@ -359,14 +337,15 @@ TEST_F(HttpServerPropertiesManagerTest, Clear) {
EXPECT_TRUE(
http_server_props_manager_->HasAlternateProtocol(spdy_server_mail));
- net::SpdySettings spdy_settings_ret =
+ // Check SPDY settings values.
+ const net::SettingsMap& settings_map1_ret =
http_server_props_manager_->GetSpdySettings(spdy_server_mail);
- ASSERT_EQ(1U, spdy_settings_ret.size());
- net::SpdySetting spdy_setting1_ret = spdy_settings_ret.front();
- net::SettingsFlagsAndId id1_ret(spdy_setting1_ret.first);
- EXPECT_EQ(1234U, id1_ret.id());
- EXPECT_EQ(net::SETTINGS_FLAG_PERSISTED, id1_ret.flags());
- EXPECT_EQ(31337U, spdy_setting1_ret.second);
+ ASSERT_EQ(1U, settings_map1_ret.size());
+ net::SettingsMap::const_iterator it1_ret = settings_map1_ret.find(id1);
+ EXPECT_TRUE(it1_ret != settings_map1_ret.end());
+ net::SettingsFlagsAndValue flags_and_value1_ret = it1_ret->second;
+ EXPECT_EQ(net::SETTINGS_FLAG_PERSISTED, flags_and_value1_ret.first);
+ EXPECT_EQ(value1, flags_and_value1_ret.second);
EXPECT_EQ(net::PIPELINE_CAPABLE,
http_server_props_manager_->GetPipelineCapability(known_pipeliner));
@@ -384,9 +363,9 @@ TEST_F(HttpServerPropertiesManagerTest, Clear) {
EXPECT_FALSE(
http_server_props_manager_->HasAlternateProtocol(spdy_server_mail));
- net::SpdySettings spdy_settings1_ret =
+ const net::SettingsMap& settings_map2_ret =
http_server_props_manager_->GetSpdySettings(spdy_server_mail);
- EXPECT_EQ(0U, spdy_settings1_ret.size());
+ EXPECT_EQ(0U, settings_map2_ret.size());
EXPECT_EQ(net::PIPELINE_UNKNOWN,
http_server_props_manager_->GetPipelineCapability(known_pipeliner));