summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrtenneti@chromium.org <rtenneti@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-24 14:12:48 +0000
committerrtenneti@chromium.org <rtenneti@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-24 14:12:48 +0000
commite0935cc22a6c10461b004b9f3c0b0f7f4d52c137 (patch)
treefb6e67b1a526192a0794d199ba9aa2846f38be05
parent5970f146cda0eefc2726a2eeb9bd8e16234e0df1 (diff)
downloadchromium_src-e0935cc22a6c10461b004b9f3c0b0f7f4d52c137.zip
chromium_src-e0935cc22a6c10461b004b9f3c0b0f7f4d52c137.tar.gz
chromium_src-e0935cc22a6c10461b004b9f3c0b0f7f4d52c137.tar.bz2
SPDY - persist SPDY settings.
HttpServerProperties stores SPDY settings in SettingsMap whose key is settings ID and value is a (flags, value) pair (SettingsFlagsAndValue). The format of the persisted data is same as before (restored the old code that persisted the data). Verified it with an older version of the Preferences file that is very large. Verified that we have sent the right data (sorted and unique settings) to the server and that duplicates were removed from the file. Changed all the code above SpdyFramer to use the above spdy::SettingsMap and spdy::SettingsFlagsAndValue data structures. When chrome sends Spdy Settings to the server, it uses the current SpdyFramer's API calls to create Settings frame. TODO: 1) Delete spdy::SpdySettings and spdy::SpdySetting and replace them with SettingsMap, SpdySettingsIds, SpdySettingsFlags and value. 2) Add version to the persisted data. BUG=117760 R=rch, willchan TEST=network unit tests and browser unit tests. Review URL: http://codereview.chromium.org/9802003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@128737 0039d316-1c4b-4281-b951-d872f2087c98
-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
-rw-r--r--net/base/net_log_event_type_list.h8
-rw-r--r--net/http/http_server_properties.h26
-rw-r--r--net/http/http_server_properties_impl.cc53
-rw-r--r--net/http/http_server_properties_impl.h23
-rw-r--r--net/http/http_server_properties_impl_unittest.cc211
-rw-r--r--net/spdy/spdy_framer.h3
-rw-r--r--net/spdy/spdy_network_transaction_spdy21_unittest.cc227
-rw-r--r--net/spdy/spdy_network_transaction_spdy2_unittest.cc225
-rw-r--r--net/spdy/spdy_network_transaction_spdy3_unittest.cc241
-rw-r--r--net/spdy/spdy_protocol.h1
-rw-r--r--net/spdy/spdy_session.cc156
-rw-r--r--net/spdy/spdy_session.h3
-rw-r--r--net/spdy/spdy_session_spdy2_unittest.cc63
-rw-r--r--net/spdy/spdy_session_spdy3_unittest.cc66
-rw-r--r--net/spdy/spdy_websocket_stream_spdy2_unittest.cc26
-rw-r--r--net/spdy/spdy_websocket_stream_spdy3_unittest.cc26
19 files changed, 740 insertions, 805 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));
diff --git a/net/base/net_log_event_type_list.h b/net/base/net_log_event_type_list.h
index 0654be1..48aaca9 100644
--- a/net/base/net_log_event_type_list.h
+++ b/net/base/net_log_event_type_list.h
@@ -975,12 +975,14 @@ EVENT_TYPE(SPDY_SESSION_SYN_REPLY)
// }
EVENT_TYPE(SPDY_SESSION_SEND_SETTINGS)
-// Receipt of a SPDY SETTINGS frame.
+// Receipt of a SPDY SETTING frame.
// The following parameters are attached:
// {
-// "settings": <The list of setting id:value pairs>,
+// "id": <The setting id>,
+// "flags": <The setting flags>,
+// "value": <The setting value>,
// }
-EVENT_TYPE(SPDY_SESSION_RECV_SETTINGS)
+EVENT_TYPE(SPDY_SESSION_RECV_SETTING)
// The receipt of a RST_STREAM
// The following parameters are attached:
diff --git a/net/http/http_server_properties.h b/net/http/http_server_properties.h
index ccadf2b..e61be5e 100644
--- a/net/http/http_server_properties.h
+++ b/net/http/http_server_properties.h
@@ -37,7 +37,7 @@ struct NET_EXPORT PortAlternateProtocolPair {
};
typedef std::map<HostPortPair, PortAlternateProtocolPair> AlternateProtocolMap;
-typedef std::map<HostPortPair, SpdySettings> SpdySettingsMap;
+typedef std::map<HostPortPair, SettingsMap> SpdySettingsMap;
typedef std::map<HostPortPair,
HttpPipelinedHostCapability> PipelineCapabilityMap;
@@ -84,26 +84,22 @@ class NET_EXPORT HttpServerProperties {
// Returns all Alternate-Protocol mappings.
virtual const AlternateProtocolMap& alternate_protocol_map() const = 0;
- // Gets a reference to the SpdySettings stored for a host.
- // If no settings are stored, returns an empty set of settings.
- virtual const SpdySettings& GetSpdySettings(
+ // Gets a reference to the SettingsMap stored for a host.
+ // If no settings are stored, returns an empty SettingsMap.
+ virtual const SettingsMap& GetSpdySettings(
const HostPortPair& host_port_pair) const = 0;
- // Saves settings for a host. Returns true if SpdySettings are to be
- // persisted. Used by unittests only.
- // TODO(rtenneti): Move this method to test utility file.
- virtual bool SetSpdySettings(const HostPortPair& host_port_pair,
- const SpdySettings& settings) = 0;
-
- // Saves an individual setting for a host. Returns true if SpdySetting is to
- // be persisted.
+ // Saves an individual SPDY setting for a host. Returns true if SPDY setting
+ // is to be persisted.
virtual bool SetSpdySetting(const HostPortPair& host_port_pair,
- const SpdySetting& setting) = 0;
+ SpdySettingsIds id,
+ SpdySettingsFlags flags,
+ uint32 value) = 0;
- // Clears all spdy_settings.
+ // Clears all SPDY settings.
virtual void ClearSpdySettings() = 0;
- // Returns all persistent SpdySettings.
+ // Returns all persistent SPDY settings.
virtual const SpdySettingsMap& spdy_settings_map() const = 0;
virtual HttpPipelinedHostCapability GetPipelineCapability(
diff --git a/net/http/http_server_properties_impl.cc b/net/http/http_server_properties_impl.cc
index 714f4c1..32f0694 100644
--- a/net/http/http_server_properties_impl.cc
+++ b/net/http/http_server_properties_impl.cc
@@ -52,7 +52,7 @@ void HttpServerPropertiesImpl::InitializeAlternateProtocolServers(
}
void HttpServerPropertiesImpl::InitializeSpdySettingsServers(
- std::map<HostPortPair, SpdySettings>* spdy_settings_map) {
+ SpdySettingsMap* spdy_settings_map) {
spdy_settings_map_.swap(*spdy_settings_map);
}
@@ -220,58 +220,27 @@ HttpServerPropertiesImpl::alternate_protocol_map() const {
return alternate_protocol_map_;
}
-const SpdySettings& HttpServerPropertiesImpl::GetSpdySettings(
+const SettingsMap& HttpServerPropertiesImpl::GetSpdySettings(
const HostPortPair& host_port_pair) const {
SpdySettingsMap::const_iterator it = spdy_settings_map_.find(host_port_pair);
if (it == spdy_settings_map_.end()) {
- CR_DEFINE_STATIC_LOCAL(SpdySettings, kEmptySpdySettings, ());
- return kEmptySpdySettings;
+ CR_DEFINE_STATIC_LOCAL(SettingsMap, kEmptySettingsMap, ());
+ return kEmptySettingsMap;
}
return it->second;
}
-bool HttpServerPropertiesImpl::SetSpdySettings(
- const HostPortPair& host_port_pair,
- const SpdySettings& settings) {
- SpdySettings persistent_settings;
-
- // Iterate through the list, and only copy those settings which are marked
- // for persistence.
- SpdySettings::const_iterator it;
- for (it = settings.begin(); it != settings.end(); ++it) {
- SettingsFlagsAndId id = it->first;
- if (id.flags() & SETTINGS_FLAG_PLEASE_PERSIST) {
- SettingsFlagsAndId new_id(SETTINGS_FLAG_PERSISTED, id.id());
- persistent_settings.push_back(std::make_pair(new_id, it->second));
- }
- }
-
- // If we didn't persist anything, then we are done.
- if (persistent_settings.empty())
- return false;
-
- spdy_settings_map_[host_port_pair] = persistent_settings;
- return true;
-}
-
bool HttpServerPropertiesImpl::SetSpdySetting(
const HostPortPair& host_port_pair,
- const SpdySetting& setting) {
-
- SettingsFlagsAndId id = setting.first;
- if (!(id.flags() & SETTINGS_FLAG_PLEASE_PERSIST))
+ SpdySettingsIds id,
+ SpdySettingsFlags flags,
+ uint32 value) {
+ if (!(flags & SETTINGS_FLAG_PLEASE_PERSIST))
return false;
- SpdySettingsMap::const_iterator it = spdy_settings_map_.find(host_port_pair);
- SpdySettings persistent_settings;
- if (it != spdy_settings_map_.end()) {
- persistent_settings = it->second;
- }
-
- SettingsFlagsAndId new_id(SETTINGS_FLAG_PERSISTED, id.id());
- persistent_settings.push_back(std::make_pair(new_id, setting.second));
- spdy_settings_map_[host_port_pair] = persistent_settings;
-
+ SettingsMap& settings_map = spdy_settings_map_[host_port_pair];
+ SettingsFlagsAndValue flags_and_value(SETTINGS_FLAG_PERSISTED, value);
+ settings_map[id] = flags_and_value;
return true;
}
diff --git a/net/http/http_server_properties_impl.h b/net/http/http_server_properties_impl.h
index eb4816e..98a968c 100644
--- a/net/http/http_server_properties_impl.h
+++ b/net/http/http_server_properties_impl.h
@@ -103,25 +103,22 @@ class NET_EXPORT HttpServerPropertiesImpl
// Returns all Alternate-Protocol mappings.
virtual const 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 SpdySettings& GetSpdySettings(
+ // Gets a reference to the SettingsMap stored for a host.
+ // If no settings are stored, returns an empty SettingsMap.
+ virtual const SettingsMap& GetSpdySettings(
const HostPortPair& host_port_pair) const OVERRIDE;
- // Saves settings for a host. Returns true if SpdySettings are to be
- // persisted because |spdy_settings_map_| has been updated.
- virtual bool SetSpdySettings(const HostPortPair& host_port_pair,
- const SpdySettings& settings) OVERRIDE;
-
- // Saves an individual setting for a host. Returns true if SpdySetting is to
- // be persisted because |spdy_settings_map_| has been updated.
+ // Saves an individual SPDY setting for a host. Returns true if SPDY setting
+ // is to be persisted.
virtual bool SetSpdySetting(const HostPortPair& host_port_pair,
- const SpdySetting& setting) OVERRIDE;
+ SpdySettingsIds id,
+ SpdySettingsFlags flags,
+ uint32 value) OVERRIDE;
- // Clears all spdy_settings.
+ // Clears all entries in |spdy_settings_map_|.
virtual void ClearSpdySettings() OVERRIDE;
- // Returns all persistent SpdySettings.
+ // Returns all persistent SPDY settings.
virtual const SpdySettingsMap& spdy_settings_map() const OVERRIDE;
virtual HttpPipelinedHostCapability GetPipelineCapability(
diff --git a/net/http/http_server_properties_impl_unittest.cc b/net/http/http_server_properties_impl_unittest.cc
index c26491c..f3129e8 100644
--- a/net/http/http_server_properties_impl_unittest.cc
+++ b/net/http/http_server_properties_impl_unittest.cc
@@ -188,10 +188,8 @@ typedef HttpServerPropertiesImplTest AlternateProtocolServerPropertiesTest;
TEST_F(AlternateProtocolServerPropertiesTest, Basic) {
HostPortPair test_host_port_pair("foo", 80);
- EXPECT_FALSE(
- impl_.HasAlternateProtocol(test_host_port_pair));
- impl_.SetAlternateProtocol(
- test_host_port_pair, 443, NPN_SPDY_1);
+ EXPECT_FALSE(impl_.HasAlternateProtocol(test_host_port_pair));
+ impl_.SetAlternateProtocol(test_host_port_pair, 443, NPN_SPDY_1);
ASSERT_TRUE(impl_.HasAlternateProtocol(test_host_port_pair));
const PortAlternateProtocolPair alternate =
impl_.GetAlternateProtocol(test_host_port_pair);
@@ -206,8 +204,7 @@ TEST_F(AlternateProtocolServerPropertiesTest, Initialize) {
HostPortPair test_host_port_pair1("foo1", 80);
impl_.SetBrokenAlternateProtocol(test_host_port_pair1);
HostPortPair test_host_port_pair2("foo2", 80);
- impl_.SetAlternateProtocol(
- test_host_port_pair2, 443, NPN_SPDY_1);
+ impl_.SetAlternateProtocol(test_host_port_pair2, 443, NPN_SPDY_1);
AlternateProtocolMap alternate_protocol_map;
PortAlternateProtocolPair port_alternate_protocol_pair;
@@ -254,16 +251,14 @@ TEST_F(AlternateProtocolServerPropertiesTest, Forced) {
// Verify the forced protocol.
HostPortPair test_host_port_pair("foo", 80);
- EXPECT_TRUE(
- impl_.HasAlternateProtocol(test_host_port_pair));
+ EXPECT_TRUE(impl_.HasAlternateProtocol(test_host_port_pair));
PortAlternateProtocolPair alternate =
impl_.GetAlternateProtocol(test_host_port_pair);
EXPECT_EQ(default_protocol.port, alternate.port);
EXPECT_EQ(default_protocol.protocol, alternate.protocol);
// Verify the real protocol overrides the forced protocol.
- impl_.SetAlternateProtocol(
- test_host_port_pair, 443, NPN_SPDY_1);
+ impl_.SetAlternateProtocol(test_host_port_pair, 443, NPN_SPDY_1);
ASSERT_TRUE(impl_.HasAlternateProtocol(test_host_port_pair));
alternate = impl_.GetAlternateProtocol(test_host_port_pair);
EXPECT_EQ(443, alternate.port);
@@ -275,8 +270,7 @@ TEST_F(AlternateProtocolServerPropertiesTest, Forced) {
// Verify the forced protocol is off.
HostPortPair test_host_port_pair2("bar", 80);
- EXPECT_FALSE(
- impl_.HasAlternateProtocol(test_host_port_pair2));
+ EXPECT_FALSE(impl_.HasAlternateProtocol(test_host_port_pair2));
}
typedef HttpServerPropertiesImplTest SpdySettingsServerPropertiesTest;
@@ -290,148 +284,115 @@ TEST_F(SpdySettingsServerPropertiesTest, Initialize) {
EXPECT_TRUE(impl_.GetSpdySettings(spdy_server_google).empty());
// Check by initializing with www.google.com:443 spdy server settings.
- SpdySettings spdy_settings;
- SettingsFlagsAndId spdy_setting(SETTINGS_FLAG_PERSISTED, 1234);
- spdy_settings.push_back(std::make_pair(spdy_setting, 31337));
- spdy_settings_map[spdy_server_google] = spdy_settings;
+ SettingsMap settings_map;
+ const SpdySettingsIds id = SETTINGS_UPLOAD_BANDWIDTH;
+ const SpdySettingsFlags flags = SETTINGS_FLAG_PERSISTED;
+ const uint32 value = 31337;
+ SettingsFlagsAndValue flags_and_value(flags, value);
+ settings_map[id] = flags_and_value;
+ spdy_settings_map[spdy_server_google] = settings_map;
impl_.InitializeSpdySettingsServers(&spdy_settings_map);
- SpdySettings spdy_settings2 = impl_.GetSpdySettings(spdy_server_google);
- ASSERT_EQ(1U, spdy_settings2.size());
- SpdySetting spdy_setting2 = spdy_settings2.front();
- SettingsFlagsAndId id2_ret(spdy_setting2.first);
- EXPECT_EQ(1234U, id2_ret.id());
- EXPECT_EQ(SETTINGS_FLAG_PERSISTED, id2_ret.flags());
- EXPECT_EQ(31337U, spdy_settings2.front().second);
-}
-
-TEST_F(SpdySettingsServerPropertiesTest, SetSpdySettings) {
- HostPortPair spdy_server_empty("", 443);
- SpdySettings spdy_settings0 = impl_.GetSpdySettings(spdy_server_empty);
- EXPECT_EQ(0U, spdy_settings0.size()); // Returns kEmptySpdySettings
-
- // Add www.google.com:443 as persisting.
- HostPortPair spdy_server_google("www.google.com", 443);
- SpdySettings spdy_settings1;
- SettingsFlagsAndId id1(SETTINGS_FLAG_PLEASE_PERSIST, 1234);
- spdy_settings1.push_back(std::make_pair(id1, 31337));
- EXPECT_TRUE(impl_.SetSpdySettings(spdy_server_google, spdy_settings1));
- SpdySettings spdy_settings1_ret =
- impl_.GetSpdySettings(spdy_server_google);
- ASSERT_EQ(1U, spdy_settings1_ret.size());
- SpdySetting spdy_setting1_ret = spdy_settings1_ret.front();
- SettingsFlagsAndId id1_ret(spdy_setting1_ret.first);
- EXPECT_EQ(1234U, id1_ret.id());
- EXPECT_EQ(SETTINGS_FLAG_PERSISTED, id1_ret.flags());
- EXPECT_EQ(31337U, spdy_setting1_ret.second);
- // Add mail.google.com:443 as not persisting.
- HostPortPair spdy_server_mail("mail.google.com", 443);
- SpdySettings spdy_settings2;
- SettingsFlagsAndId id2(0, 5678);
- spdy_settings2.push_back(std::make_pair(id2, 62667));
- EXPECT_FALSE(impl_.SetSpdySettings(spdy_server_mail, spdy_settings2));
- SpdySettings spdy_settings2_ret =
- impl_.GetSpdySettings(spdy_server_mail);
- EXPECT_EQ(0U, spdy_settings2_ret.size()); // Returns kEmptySpdySettings
-
- // Add docs.google.com:443 as persisting
- HostPortPair spdy_server_docs("docs.google.com", 443);
- SpdySettings spdy_settings3;
- SettingsFlagsAndId id3(SETTINGS_FLAG_PLEASE_PERSIST, 9012);
- spdy_settings3.push_back(std::make_pair(id3, 93997));
- EXPECT_TRUE(impl_.SetSpdySettings(spdy_server_docs, spdy_settings3));
- SpdySettings spdy_settings3_ret =
- impl_.GetSpdySettings(spdy_server_docs);
- ASSERT_EQ(1U, spdy_settings3_ret.size());
- SpdySetting spdy_setting3_ret = spdy_settings3_ret.front();
- SettingsFlagsAndId id3_ret(spdy_setting3_ret.first);
- EXPECT_EQ(9012U, id3_ret.id());
- EXPECT_EQ(SETTINGS_FLAG_PERSISTED, id3_ret.flags());
- EXPECT_EQ(93997U, spdy_setting3_ret.second);
+ const SettingsMap& settings_map2 = impl_.GetSpdySettings(spdy_server_google);
+ ASSERT_EQ(1U, settings_map2.size());
+ SettingsMap::const_iterator it = settings_map2.find(id);
+ EXPECT_TRUE(it != settings_map2.end());
+ SettingsFlagsAndValue flags_and_value2 = it->second;
+ EXPECT_EQ(flags, flags_and_value2.first);
+ EXPECT_EQ(value, flags_and_value2.second);
}
TEST_F(SpdySettingsServerPropertiesTest, SetSpdySetting) {
HostPortPair spdy_server_empty("", 443);
- SpdySettings spdy_settings0 = impl_.GetSpdySettings(spdy_server_empty);
- EXPECT_EQ(0U, spdy_settings0.size()); // Returns kEmptySpdySettings
+ const SettingsMap& settings_map0 = impl_.GetSpdySettings(spdy_server_empty);
+ EXPECT_EQ(0U, settings_map0.size()); // Returns kEmptySettingsMap.
// Add www.google.com:443 as persisting.
HostPortPair spdy_server_google("www.google.com", 443);
- SettingsFlagsAndId id1(SETTINGS_FLAG_PLEASE_PERSIST, 1234);
- EXPECT_TRUE(impl_.SetSpdySetting(
- spdy_server_google, std::make_pair(id1, 31337)));
- SpdySettings spdy_settings1_ret =
+ const SpdySettingsIds id1 = SETTINGS_UPLOAD_BANDWIDTH;
+ const SpdySettingsFlags flags1 = SETTINGS_FLAG_PLEASE_PERSIST;
+ const uint32 value1 = 31337;
+ EXPECT_TRUE(impl_.SetSpdySetting(spdy_server_google, id1, flags1, value1));
+ // Check the values.
+ const SettingsMap& settings_map1_ret =
impl_.GetSpdySettings(spdy_server_google);
- ASSERT_EQ(1U, spdy_settings1_ret.size());
- SpdySetting spdy_setting1_ret = spdy_settings1_ret.front();
- SettingsFlagsAndId id1_ret(spdy_setting1_ret.first);
- EXPECT_EQ(1234U, id1_ret.id());
- EXPECT_EQ(SETTINGS_FLAG_PERSISTED, id1_ret.flags());
- EXPECT_EQ(31337U, spdy_setting1_ret.second);
+ ASSERT_EQ(1U, settings_map1_ret.size());
+ SettingsMap::const_iterator it1_ret = settings_map1_ret.find(id1);
+ EXPECT_TRUE(it1_ret != settings_map1_ret.end());
+ SettingsFlagsAndValue flags_and_value1_ret = it1_ret->second;
+ EXPECT_EQ(SETTINGS_FLAG_PERSISTED, flags_and_value1_ret.first);
+ EXPECT_EQ(value1, flags_and_value1_ret.second);
// Add mail.google.com:443 as not persisting.
HostPortPair spdy_server_mail("mail.google.com", 443);
- SettingsFlagsAndId id2(0, 5678);
- EXPECT_FALSE(impl_.SetSpdySetting(
- spdy_server_mail, std::make_pair(id2, 62667)));
- SpdySettings spdy_settings2_ret =
+ const SpdySettingsIds id2 = SETTINGS_DOWNLOAD_BANDWIDTH;
+ const SpdySettingsFlags flags2 = SETTINGS_FLAG_NONE;
+ const uint32 value2 = 62667;
+ EXPECT_FALSE(impl_.SetSpdySetting(spdy_server_mail, id2, flags2, value2));
+ const SettingsMap& settings_map2_ret =
impl_.GetSpdySettings(spdy_server_mail);
- EXPECT_EQ(0U, spdy_settings2_ret.size()); // Returns kEmptySpdySettings
+ EXPECT_EQ(0U, settings_map2_ret.size()); // Returns kEmptySettingsMap.
// Add docs.google.com:443 as persisting
HostPortPair spdy_server_docs("docs.google.com", 443);
- SettingsFlagsAndId id3(SETTINGS_FLAG_PLEASE_PERSIST, 9012);
- EXPECT_TRUE(impl_.SetSpdySetting(
- spdy_server_docs, std::make_pair(id3, 93997)));
- SpdySettings spdy_settings3_ret =
+ const SpdySettingsIds id3 = SETTINGS_ROUND_TRIP_TIME;
+ const SpdySettingsFlags flags3 = SETTINGS_FLAG_PLEASE_PERSIST;
+ const uint32 value3 = 93997;
+ SettingsFlagsAndValue flags_and_value3(flags3, value3);
+ EXPECT_TRUE(impl_.SetSpdySetting(spdy_server_docs, id3, flags3, value3));
+ // Check the values.
+ const SettingsMap& settings_map3_ret =
impl_.GetSpdySettings(spdy_server_docs);
- ASSERT_EQ(1U, spdy_settings3_ret.size());
- SpdySetting spdy_setting3_ret = spdy_settings3_ret.front();
- SettingsFlagsAndId id3_ret(spdy_setting3_ret.first);
- EXPECT_EQ(9012U, id3_ret.id());
- EXPECT_EQ(SETTINGS_FLAG_PERSISTED, id3_ret.flags());
- EXPECT_EQ(93997U, spdy_setting3_ret.second);
- // Check data for www.google.com:443.
- SpdySettings spdy_settings4_ret =
+ ASSERT_EQ(1U, settings_map3_ret.size());
+ SettingsMap::const_iterator it3_ret = settings_map3_ret.find(id3);
+ EXPECT_TRUE(it3_ret != settings_map3_ret.end());
+ SettingsFlagsAndValue flags_and_value3_ret = it3_ret->second;
+ EXPECT_EQ(SETTINGS_FLAG_PERSISTED, flags_and_value3_ret.first);
+ EXPECT_EQ(value3, flags_and_value3_ret.second);
+
+ // Check data for www.google.com:443 (id1).
+ const SettingsMap& settings_map4_ret =
impl_.GetSpdySettings(spdy_server_google);
- ASSERT_EQ(1U, spdy_settings4_ret.size());
- SpdySetting spdy_setting4_ret = spdy_settings4_ret.front();
- SettingsFlagsAndId id4_ret(spdy_setting4_ret.first);
- EXPECT_EQ(1234U, id4_ret.id());
- EXPECT_EQ(SETTINGS_FLAG_PERSISTED, id4_ret.flags());
- EXPECT_EQ(31337U, spdy_setting4_ret.second);
+ ASSERT_EQ(1U, settings_map4_ret.size());
+ SettingsMap::const_iterator it4_ret = settings_map4_ret.find(id1);
+ EXPECT_TRUE(it4_ret != settings_map4_ret.end());
+ SettingsFlagsAndValue flags_and_value4_ret = it4_ret->second;
+ EXPECT_EQ(SETTINGS_FLAG_PERSISTED, flags_and_value4_ret.first);
+ EXPECT_EQ(value1, flags_and_value1_ret.second);
}
TEST_F(SpdySettingsServerPropertiesTest, Clear) {
// Add www.google.com:443 as persisting.
HostPortPair spdy_server_google("www.google.com", 443);
- SpdySettings spdy_settings1;
- SettingsFlagsAndId id1(SETTINGS_FLAG_PLEASE_PERSIST, 1234);
- spdy_settings1.push_back(std::make_pair(id1, 31337));
- EXPECT_TRUE(impl_.SetSpdySettings(spdy_server_google, spdy_settings1));
- SpdySettings spdy_settings1_ret =
+ const SpdySettingsIds id1 = SETTINGS_UPLOAD_BANDWIDTH;
+ const SpdySettingsFlags flags1 = SETTINGS_FLAG_PLEASE_PERSIST;
+ const uint32 value1 = 31337;
+ EXPECT_TRUE(impl_.SetSpdySetting(spdy_server_google, id1, flags1, value1));
+ // Check the values.
+ const SettingsMap& settings_map1_ret =
impl_.GetSpdySettings(spdy_server_google);
- ASSERT_EQ(1U, spdy_settings1_ret.size());
- SpdySetting spdy_setting1_ret = spdy_settings1_ret.front();
- SettingsFlagsAndId id1_ret(spdy_setting1_ret.first);
- EXPECT_EQ(1234U, id1_ret.id());
- EXPECT_EQ(SETTINGS_FLAG_PERSISTED, id1_ret.flags());
- EXPECT_EQ(31337U, spdy_setting1_ret.second);
+ ASSERT_EQ(1U, settings_map1_ret.size());
+ SettingsMap::const_iterator it1_ret = settings_map1_ret.find(id1);
+ EXPECT_TRUE(it1_ret != settings_map1_ret.end());
+ SettingsFlagsAndValue flags_and_value1_ret = it1_ret->second;
+ EXPECT_EQ(SETTINGS_FLAG_PERSISTED, flags_and_value1_ret.first);
+ EXPECT_EQ(value1, flags_and_value1_ret.second);
// Add docs.google.com:443 as persisting
HostPortPair spdy_server_docs("docs.google.com", 443);
- SpdySettings spdy_settings3;
- SettingsFlagsAndId id3(SETTINGS_FLAG_PLEASE_PERSIST, 9012);
- spdy_settings3.push_back(std::make_pair(id3, 93997));
- EXPECT_TRUE(impl_.SetSpdySettings(spdy_server_docs, spdy_settings3));
- SpdySettings spdy_settings3_ret =
+ const SpdySettingsIds id3 = SETTINGS_ROUND_TRIP_TIME;
+ const SpdySettingsFlags flags3 = SETTINGS_FLAG_PLEASE_PERSIST;
+ const uint32 value3 = 93997;
+ EXPECT_TRUE(impl_.SetSpdySetting(spdy_server_docs, id3, flags3, value3));
+ // Check the values.
+ const SettingsMap& settings_map3_ret =
impl_.GetSpdySettings(spdy_server_docs);
- ASSERT_EQ(1U, spdy_settings3_ret.size());
- SpdySetting spdy_setting3_ret = spdy_settings3_ret.front();
- SettingsFlagsAndId id3_ret(spdy_setting3_ret.first);
- EXPECT_EQ(9012U, id3_ret.id());
- EXPECT_EQ(SETTINGS_FLAG_PERSISTED, id3_ret.flags());
- EXPECT_EQ(93997U, spdy_setting3_ret.second);
+ ASSERT_EQ(1U, settings_map3_ret.size());
+ SettingsMap::const_iterator it3_ret = settings_map3_ret.find(id3);
+ EXPECT_TRUE(it3_ret != settings_map3_ret.end());
+ SettingsFlagsAndValue flags_and_value3_ret = it3_ret->second;
+ EXPECT_EQ(SETTINGS_FLAG_PERSISTED, flags_and_value3_ret.first);
+ EXPECT_EQ(value3, flags_and_value3_ret.second);
impl_.Clear();
EXPECT_EQ(0U, impl_.GetSpdySettings(spdy_server_google).size());
diff --git a/net/spdy/spdy_framer.h b/net/spdy/spdy_framer.h
index 5ebc2f2..9770df0 100644
--- a/net/spdy/spdy_framer.h
+++ b/net/spdy/spdy_framer.h
@@ -74,6 +74,9 @@ class NET_EXPORT_PRIVATE SettingsFlagsAndId {
// A datastructure for holding a set of ID/value pairs for a SETTINGS frame.
typedef std::pair<SettingsFlagsAndId, uint32> SpdySetting;
typedef std::list<SpdySetting> SpdySettings;
+// SpdySettingsMap has unique (flags, value) pair for give SpdySetting ID.
+typedef std::pair<SpdySettingsFlags, uint32> SettingsFlagsAndValue;
+typedef std::map<SpdySettingsIds, SettingsFlagsAndValue> SettingsMap;
// A datastrcture for holding the contents of a CREDENTIAL frame.
struct NET_EXPORT_PRIVATE SpdyCredential {
diff --git a/net/spdy/spdy_network_transaction_spdy21_unittest.cc b/net/spdy/spdy_network_transaction_spdy21_unittest.cc
index 18968a1..70bf9ec 100644
--- a/net/spdy/spdy_network_transaction_spdy21_unittest.cc
+++ b/net/spdy/spdy_network_transaction_spdy21_unittest.cc
@@ -935,7 +935,7 @@ TEST_P(SpdyNetworkTransactionSpdy21Test, ThreeGetsWithMaxConcurrent) {
scoped_ptr<SpdyFrame> fbody3(ConstructSpdyBodyFrame(5, true));
SpdySettings settings;
- SettingsFlagsAndId id(0, SETTINGS_MAX_CONCURRENT_STREAMS);
+ SettingsFlagsAndId id(SETTINGS_FLAG_NONE, SETTINGS_MAX_CONCURRENT_STREAMS);
const size_t max_concurrent_streams = 1;
settings.push_back(SpdySetting(id, max_concurrent_streams));
@@ -1071,9 +1071,8 @@ TEST_P(SpdyNetworkTransactionSpdy21Test, FourGetsWithMaxConcurrentPriority) {
scoped_ptr<SpdyFrame> body3(ConstructSpdyBodyFrame(7, false));
scoped_ptr<SpdyFrame> fbody3(ConstructSpdyBodyFrame(7, true));
-
SpdySettings settings;
- SettingsFlagsAndId id(0, SETTINGS_MAX_CONCURRENT_STREAMS);
+ SettingsFlagsAndId id(SETTINGS_FLAG_NONE, SETTINGS_MAX_CONCURRENT_STREAMS);
const size_t max_concurrent_streams = 1;
settings.push_back(SpdySetting(id, max_concurrent_streams));
@@ -1140,8 +1139,7 @@ TEST_P(SpdyNetworkTransactionSpdy21Test, FourGetsWithMaxConcurrentPriority) {
out.rv = trans1->Start(&httpreq1, callback1.callback(), log);
ASSERT_EQ(ERR_IO_PENDING, out.rv);
- // run transaction 1 through quickly to force a read of our SETTINGS
- // frame
+ // Run transaction 1 through quickly to force a read of our SETTINGS frame.
out.rv = callback1.WaitForResult();
ASSERT_EQ(OK, out.rv);
@@ -1217,7 +1215,7 @@ TEST_P(SpdyNetworkTransactionSpdy21Test, ThreeGetsWithMaxConcurrentDelete) {
scoped_ptr<SpdyFrame> fbody2(ConstructSpdyBodyFrame(3, true));
SpdySettings settings;
- SettingsFlagsAndId id(0, SETTINGS_MAX_CONCURRENT_STREAMS);
+ SettingsFlagsAndId id(SETTINGS_FLAG_NONE, SETTINGS_MAX_CONCURRENT_STREAMS);
const size_t max_concurrent_streams = 1;
settings.push_back(SpdySetting(id, max_concurrent_streams));
@@ -1270,8 +1268,7 @@ TEST_P(SpdyNetworkTransactionSpdy21Test, ThreeGetsWithMaxConcurrentDelete) {
out.rv = trans1->Start(&httpreq1, callback1.callback(), log);
ASSERT_EQ(out.rv, ERR_IO_PENDING);
- // run transaction 1 through quickly to force a read of our SETTINGS
- // frame
+ // Run transaction 1 through quickly to force a read of our SETTINGS frame.
out.rv = callback1.WaitForResult();
ASSERT_EQ(OK, out.rv);
@@ -1342,7 +1339,7 @@ class KillerCallback : public TestCompletionCallbackBase {
// closes the socket while we have a pending transaction waiting for
// a pending stream creation. http://crbug.com/52901
TEST_P(SpdyNetworkTransactionSpdy21Test,
- ThreeGetsWithMaxConcurrentSocketClose) {
+ ThreeGetsWithMaxConcurrentSocketClose) {
// Construct the request.
scoped_ptr<SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
scoped_ptr<SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1));
@@ -1353,7 +1350,7 @@ TEST_P(SpdyNetworkTransactionSpdy21Test,
scoped_ptr<SpdyFrame> resp2(ConstructSpdyGetSynReply(NULL, 0, 3));
SpdySettings settings;
- SettingsFlagsAndId id(0, SETTINGS_MAX_CONCURRENT_STREAMS);
+ SettingsFlagsAndId id(SETTINGS_FLAG_NONE, SETTINGS_MAX_CONCURRENT_STREAMS);
const size_t max_concurrent_streams = 1;
settings.push_back(SpdySetting(id, max_concurrent_streams));
@@ -1401,8 +1398,7 @@ TEST_P(SpdyNetworkTransactionSpdy21Test,
out.rv = trans1.Start(&httpreq1, callback1.callback(), log);
ASSERT_EQ(out.rv, ERR_IO_PENDING);
- // run transaction 1 through quickly to force a read of our SETTINGS
- // frame
+ // Run transaction 1 through quickly to force a read of our SETTINGS frame.
out.rv = callback1.WaitForResult();
ASSERT_EQ(OK, out.rv);
@@ -1443,14 +1439,14 @@ TEST_P(SpdyNetworkTransactionSpdy21Test, Put) {
const SpdyHeaderInfo kSynStartHeader = {
SYN_STREAM, // Kind = Syn
- 1, // Stream ID
- 0, // Associated stream ID
+ 1, // Stream ID
+ 0, // Associated stream ID
net::ConvertRequestPriorityToSpdyPriority(LOWEST), // Priority
CONTROL_FLAG_FIN, // Control Flags
- false, // Compressed
+ false, // Compressed
INVALID, // Status
- NULL, // Data
- 0, // Length
+ NULL, // Data
+ 0, // Length
DATA_FLAG_NONE // Data Flags
};
const char* const kPutHeaders[] = {
@@ -1470,14 +1466,14 @@ TEST_P(SpdyNetworkTransactionSpdy21Test, Put) {
scoped_ptr<SpdyFrame> body(ConstructSpdyBodyFrame(1, true));
const SpdyHeaderInfo kSynReplyHeader = {
SYN_REPLY, // Kind = SynReply
- 1, // Stream ID
- 0, // Associated stream ID
+ 1, // Stream ID
+ 0, // Associated stream ID
net::ConvertRequestPriorityToSpdyPriority(LOWEST), // Priority
CONTROL_FLAG_NONE, // Control Flags
- false, // Compressed
+ false, // Compressed
INVALID, // Status
- NULL, // Data
- 0, // Length
+ NULL, // Data
+ 0, // Length
DATA_FLAG_NONE // Data Flags
};
static const char* const kStandardGetHeaders[] = {
@@ -1514,14 +1510,14 @@ TEST_P(SpdyNetworkTransactionSpdy21Test, Head) {
const SpdyHeaderInfo kSynStartHeader = {
SYN_STREAM, // Kind = Syn
- 1, // Stream ID
- 0, // Associated stream ID
+ 1, // Stream ID
+ 0, // Associated stream ID
net::ConvertRequestPriorityToSpdyPriority(LOWEST), // Priority
CONTROL_FLAG_FIN, // Control Flags
- false, // Compressed
+ false, // Compressed
INVALID, // Status
- NULL, // Data
- 0, // Length
+ NULL, // Data
+ 0, // Length
DATA_FLAG_NONE // Data Flags
};
const char* const kHeadHeaders[] = {
@@ -1541,14 +1537,14 @@ TEST_P(SpdyNetworkTransactionSpdy21Test, Head) {
scoped_ptr<SpdyFrame> body(ConstructSpdyBodyFrame(1, true));
const SpdyHeaderInfo kSynReplyHeader = {
SYN_REPLY, // Kind = SynReply
- 1, // Stream ID
- 0, // Associated stream ID
+ 1, // Stream ID
+ 0, // Associated stream ID
net::ConvertRequestPriorityToSpdyPriority(LOWEST), // Priority
CONTROL_FLAG_NONE, // Control Flags
- false, // Compressed
+ false, // Compressed
INVALID, // Status
- NULL, // Data
- 0, // Length
+ NULL, // Data
+ 0, // Length
DATA_FLAG_NONE // Data Flags
};
static const char* const kStandardGetHeaders[] = {
@@ -3475,15 +3471,14 @@ TEST_P(SpdyNetworkTransactionSpdy21Test, SynReplyHeaders) {
TEST_P(SpdyNetworkTransactionSpdy21Test, SynReplyHeadersVary) {
static const SpdyHeaderInfo syn_reply_info = {
SYN_REPLY, // Syn Reply
- 1, // Stream ID
- 0, // Associated Stream ID
- net::ConvertRequestPriorityToSpdyPriority(LOWEST),
- // Priority
+ 1, // Stream ID
+ 0, // Associated Stream ID
+ net::ConvertRequestPriorityToSpdyPriority(LOWEST), // Priority
CONTROL_FLAG_NONE, // Control Flags
- false, // Compressed
+ false, // Compressed
INVALID, // Status
- NULL, // Data
- 0, // Data Length
+ NULL, // Data
+ 0, // Data Length
DATA_FLAG_NONE // Data Flags
};
// Modify the following data to change/add test cases:
@@ -3644,15 +3639,14 @@ TEST_P(SpdyNetworkTransactionSpdy21Test, SynReplyHeadersVary) {
TEST_P(SpdyNetworkTransactionSpdy21Test, InvalidSynReply) {
const SpdyHeaderInfo kSynStartHeader = {
SYN_REPLY, // Kind = SynReply
- 1, // Stream ID
- 0, // Associated stream ID
- net::ConvertRequestPriorityToSpdyPriority(LOWEST),
- // Priority
+ 1, // Stream ID
+ 0, // Associated stream ID
+ net::ConvertRequestPriorityToSpdyPriority(LOWEST), // Priority
CONTROL_FLAG_NONE, // Control Flags
- false, // Compressed
+ false, // Compressed
INVALID, // Status
- NULL, // Data
- 0, // Length
+ NULL, // Data
+ 0, // Length
DATA_FLAG_NONE // Data Flags
};
@@ -4365,15 +4359,14 @@ TEST_P(SpdyNetworkTransactionSpdy21Test, BufferedCancelled) {
TEST_P(SpdyNetworkTransactionSpdy21Test, SettingsSaved) {
static const SpdyHeaderInfo kSynReplyInfo = {
SYN_REPLY, // Syn Reply
- 1, // Stream ID
- 0, // Associated Stream ID
- net::ConvertRequestPriorityToSpdyPriority(LOWEST),
- // Priority
+ 1, // Stream ID
+ 0, // Associated Stream ID
+ net::ConvertRequestPriorityToSpdyPriority(LOWEST), // Priority
CONTROL_FLAG_NONE, // Control Flags
- false, // Compressed
+ false, // Compressed
INVALID, // Status
- NULL, // Data
- 0, // Data Length
+ NULL, // Data
+ 0, // Data Length
DATA_FLAG_NONE // Data Flags
};
static const char* const kExtraHeaders[] = {
@@ -4403,26 +4396,24 @@ TEST_P(SpdyNetworkTransactionSpdy21Test, SettingsSaved) {
NULL,
0));
- unsigned int kSampleId1 = 0x1;
+ const SpdySettingsIds kSampleId1 = SETTINGS_UPLOAD_BANDWIDTH;
unsigned int kSampleValue1 = 0x0a0a0a0a;
- unsigned int kSampleId2 = 0x2;
+ const SpdySettingsIds kSampleId2 = SETTINGS_DOWNLOAD_BANDWIDTH;
unsigned int kSampleValue2 = 0x0b0b0b0b;
- unsigned int kSampleId3 = 0x3;
+ const SpdySettingsIds kSampleId3 = SETTINGS_ROUND_TRIP_TIME;
unsigned int kSampleValue3 = 0x0c0c0c0c;
scoped_ptr<SpdyFrame> settings_frame;
{
// Construct the SETTINGS frame.
SpdySettings settings;
- // First add a persisted setting
- SettingsFlagsAndId setting1(SETTINGS_FLAG_PLEASE_PERSIST,
- kSampleId1);
+ // First add a persisted setting.
+ SettingsFlagsAndId setting1(SETTINGS_FLAG_PLEASE_PERSIST, kSampleId1);
settings.push_back(std::make_pair(setting1, kSampleValue1));
- // Next add a non-persisted setting
- SettingsFlagsAndId setting2(0, kSampleId2);
+ // Next add a non-persisted setting.
+ SettingsFlagsAndId setting2(SETTINGS_FLAG_NONE, kSampleId2);
settings.push_back(std::make_pair(setting2, kSampleValue2));
- // Next add another persisted setting
- SettingsFlagsAndId setting3(SETTINGS_FLAG_PLEASE_PERSIST,
- kSampleId3);
+ // Next add another persisted setting.
+ SettingsFlagsAndId setting3(SETTINGS_FLAG_PLEASE_PERSIST, kSampleId3);
settings.push_back(std::make_pair(setting3, kSampleValue3));
settings_frame.reset(ConstructSpdySettings(settings));
}
@@ -4446,30 +4437,27 @@ TEST_P(SpdyNetworkTransactionSpdy21Test, SettingsSaved) {
EXPECT_EQ("HTTP/1.1 200 OK", out.status_line);
EXPECT_EQ("hello!", out.response_data);
- // TODO(rtenneti): Persist spdy settings.
-#ifdef PERSIST_SPDY_SETTINGS
{
// Verify we had two persisted settings.
- SpdySettings saved_settings =
+ const SettingsMap& settings_map =
spdy_session_pool->http_server_properties()->GetSpdySettings(
host_port_pair);
- ASSERT_EQ(2u, saved_settings.size());
+ ASSERT_EQ(2u, settings_map.size());
// Verify the first persisted setting.
- SpdySetting setting = saved_settings.front();
- saved_settings.pop_front();
- EXPECT_EQ(SETTINGS_FLAG_PERSISTED, setting.first.flags());
- EXPECT_EQ(kSampleId1, setting.first.id());
- EXPECT_EQ(kSampleValue1, setting.second);
+ SettingsMap::const_iterator it1 = settings_map.find(kSampleId1);
+ EXPECT_TRUE(it1 != settings_map.end());
+ SettingsFlagsAndValue flags_and_value1 = it1->second;
+ EXPECT_EQ(SETTINGS_FLAG_PERSISTED, flags_and_value1.first);
+ EXPECT_EQ(kSampleValue1, flags_and_value1.second);
// Verify the second persisted setting.
- setting = saved_settings.front();
- saved_settings.pop_front();
- EXPECT_EQ(SETTINGS_FLAG_PERSISTED, setting.first.flags());
- EXPECT_EQ(kSampleId3, setting.first.id());
- EXPECT_EQ(kSampleValue3, setting.second);
+ SettingsMap::const_iterator it3 = settings_map.find(kSampleId3);
+ EXPECT_TRUE(it3 != settings_map.end());
+ SettingsFlagsAndValue flags_and_value3 = it3->second;
+ EXPECT_EQ(SETTINGS_FLAG_PERSISTED, flags_and_value3.first);
+ EXPECT_EQ(kSampleValue3, flags_and_value3.second);
}
-#endif
}
// Test that when there are settings saved that they are sent back to the
@@ -4477,15 +4465,14 @@ TEST_P(SpdyNetworkTransactionSpdy21Test, SettingsSaved) {
TEST_P(SpdyNetworkTransactionSpdy21Test, SettingsPlayback) {
static const SpdyHeaderInfo kSynReplyInfo = {
SYN_REPLY, // Syn Reply
- 1, // Stream ID
- 0, // Associated Stream ID
- net::ConvertRequestPriorityToSpdyPriority(LOWEST),
- // Priority
+ 1, // Stream ID
+ 0, // Associated Stream ID
+ net::ConvertRequestPriorityToSpdyPriority(LOWEST), // Priority
CONTROL_FLAG_NONE, // Control Flags
- false, // Compressed
+ false, // Compressed
INVALID, // Status
- NULL, // Data
- 0, // Data Length
+ NULL, // Data
+ 0, // Data Length
DATA_FLAG_NONE // Data Flags
};
static const char* kExtraHeaders[] = {
@@ -4503,33 +4490,43 @@ TEST_P(SpdyNetworkTransactionSpdy21Test, SettingsPlayback) {
EXPECT_TRUE(spdy_session_pool->http_server_properties()->GetSpdySettings(
host_port_pair).empty());
- unsigned int kSampleId1 = 0x1;
+ const SpdySettingsIds kSampleId1 = SETTINGS_UPLOAD_BANDWIDTH;
unsigned int kSampleValue1 = 0x0a0a0a0a;
- unsigned int kSampleId2 = 0xababab;
+ const SpdySettingsIds kSampleId2 = SETTINGS_ROUND_TRIP_TIME;
unsigned int kSampleValue2 = 0x0c0c0c0c;
- // Manually insert settings into the SpdySettingsStorage here.
- {
- SpdySettings settings;
- // First add a persisted setting
- SettingsFlagsAndId setting1(SETTINGS_FLAG_PLEASE_PERSIST,
- kSampleId1);
- settings.push_back(std::make_pair(setting1, kSampleValue1));
- // Next add another persisted setting
- SettingsFlagsAndId setting2(SETTINGS_FLAG_PLEASE_PERSIST,
- kSampleId2);
- settings.push_back(std::make_pair(setting2, kSampleValue2));
- spdy_session_pool->http_server_properties()->SetSpdySettings(
- host_port_pair, settings);
- }
+ // First add a persisted setting.
+ spdy_session_pool->http_server_properties()->SetSpdySetting(
+ host_port_pair,
+ kSampleId1,
+ SETTINGS_FLAG_PLEASE_PERSIST,
+ kSampleValue1);
+
+ // Next add another persisted setting.
+ spdy_session_pool->http_server_properties()->SetSpdySetting(
+ host_port_pair,
+ kSampleId2,
+ SETTINGS_FLAG_PLEASE_PERSIST,
+ kSampleValue2);
EXPECT_EQ(2u, spdy_session_pool->http_server_properties()->GetSpdySettings(
host_port_pair).size());
// Construct the SETTINGS frame.
- const SpdySettings& settings =
+ const SettingsMap& settings_map =
spdy_session_pool->http_server_properties()->GetSpdySettings(
host_port_pair);
+
+ SpdySettings settings;
+ for (SettingsMap::const_iterator i = settings_map.begin(),
+ end = settings_map.end(); i != end; ++i) {
+ const SpdySettingsIds id = i->first;
+ const SpdySettingsFlags flags = i->second.first;
+ const uint32 val = i->second.second;
+ SettingsFlagsAndId flags_and_id(flags, id);
+ settings.push_back(SpdySetting(flags_and_id, val));
+ }
+
scoped_ptr<SpdyFrame> settings_frame(ConstructSpdySettings(settings));
// Construct the request.
@@ -4568,24 +4565,24 @@ TEST_P(SpdyNetworkTransactionSpdy21Test, SettingsPlayback) {
{
// Verify we had two persisted settings.
- SpdySettings saved_settings =
+ const SettingsMap& settings_map =
spdy_session_pool->http_server_properties()->GetSpdySettings(
host_port_pair);
- ASSERT_EQ(2u, saved_settings.size());
+ ASSERT_EQ(2u, settings_map.size());
// Verify the first persisted setting.
- SpdySetting setting = saved_settings.front();
- saved_settings.pop_front();
- EXPECT_EQ(SETTINGS_FLAG_PERSISTED, setting.first.flags());
- EXPECT_EQ(kSampleId1, setting.first.id());
- EXPECT_EQ(kSampleValue1, setting.second);
+ SettingsMap::const_iterator it1 = settings_map.find(kSampleId1);
+ EXPECT_TRUE(it1 != settings_map.end());
+ SettingsFlagsAndValue flags_and_value1 = it1->second;
+ EXPECT_EQ(SETTINGS_FLAG_PERSISTED, flags_and_value1.first);
+ EXPECT_EQ(kSampleValue1, flags_and_value1.second);
// Verify the second persisted setting.
- setting = saved_settings.front();
- saved_settings.pop_front();
- EXPECT_EQ(SETTINGS_FLAG_PERSISTED, setting.first.flags());
- EXPECT_EQ(kSampleId2, setting.first.id());
- EXPECT_EQ(kSampleValue2, setting.second);
+ SettingsMap::const_iterator it2 = settings_map.find(kSampleId2);
+ EXPECT_TRUE(it2 != settings_map.end());
+ SettingsFlagsAndValue flags_and_value2 = it2->second;
+ EXPECT_EQ(SETTINGS_FLAG_PERSISTED, flags_and_value2.first);
+ EXPECT_EQ(kSampleValue2, flags_and_value2.second);
}
}
diff --git a/net/spdy/spdy_network_transaction_spdy2_unittest.cc b/net/spdy/spdy_network_transaction_spdy2_unittest.cc
index a64fb51..e39dbeb 100644
--- a/net/spdy/spdy_network_transaction_spdy2_unittest.cc
+++ b/net/spdy/spdy_network_transaction_spdy2_unittest.cc
@@ -935,7 +935,7 @@ TEST_P(SpdyNetworkTransactionSpdy2Test, ThreeGetsWithMaxConcurrent) {
scoped_ptr<SpdyFrame> fbody3(ConstructSpdyBodyFrame(5, true));
SpdySettings settings;
- SettingsFlagsAndId id(0, SETTINGS_MAX_CONCURRENT_STREAMS);
+ SettingsFlagsAndId id(SETTINGS_FLAG_NONE, SETTINGS_MAX_CONCURRENT_STREAMS);
const size_t max_concurrent_streams = 1;
settings.push_back(SpdySetting(id, max_concurrent_streams));
@@ -1071,9 +1071,8 @@ TEST_P(SpdyNetworkTransactionSpdy2Test, FourGetsWithMaxConcurrentPriority) {
scoped_ptr<SpdyFrame> body3(ConstructSpdyBodyFrame(7, false));
scoped_ptr<SpdyFrame> fbody3(ConstructSpdyBodyFrame(7, true));
-
SpdySettings settings;
- SettingsFlagsAndId id(0, SETTINGS_MAX_CONCURRENT_STREAMS);
+ SettingsFlagsAndId id(SETTINGS_FLAG_NONE, SETTINGS_MAX_CONCURRENT_STREAMS);
const size_t max_concurrent_streams = 1;
settings.push_back(SpdySetting(id, max_concurrent_streams));
@@ -1140,8 +1139,7 @@ TEST_P(SpdyNetworkTransactionSpdy2Test, FourGetsWithMaxConcurrentPriority) {
out.rv = trans1->Start(&httpreq1, callback1.callback(), log);
ASSERT_EQ(ERR_IO_PENDING, out.rv);
- // run transaction 1 through quickly to force a read of our SETTINGS
- // frame
+ // Run transaction 1 through quickly to force a read of our SETTINGS frame.
out.rv = callback1.WaitForResult();
ASSERT_EQ(OK, out.rv);
@@ -1217,7 +1215,7 @@ TEST_P(SpdyNetworkTransactionSpdy2Test, ThreeGetsWithMaxConcurrentDelete) {
scoped_ptr<SpdyFrame> fbody2(ConstructSpdyBodyFrame(3, true));
SpdySettings settings;
- SettingsFlagsAndId id(0, SETTINGS_MAX_CONCURRENT_STREAMS);
+ SettingsFlagsAndId id(SETTINGS_FLAG_NONE, SETTINGS_MAX_CONCURRENT_STREAMS);
const size_t max_concurrent_streams = 1;
settings.push_back(SpdySetting(id, max_concurrent_streams));
@@ -1270,8 +1268,7 @@ TEST_P(SpdyNetworkTransactionSpdy2Test, ThreeGetsWithMaxConcurrentDelete) {
out.rv = trans1->Start(&httpreq1, callback1.callback(), log);
ASSERT_EQ(out.rv, ERR_IO_PENDING);
- // run transaction 1 through quickly to force a read of our SETTINGS
- // frame
+ // Run transaction 1 through quickly to force a read of our SETTINGS frame.
out.rv = callback1.WaitForResult();
ASSERT_EQ(OK, out.rv);
@@ -1352,7 +1349,7 @@ TEST_P(SpdyNetworkTransactionSpdy2Test, ThreeGetsWithMaxConcurrentSocketClose) {
scoped_ptr<SpdyFrame> resp2(ConstructSpdyGetSynReply(NULL, 0, 3));
SpdySettings settings;
- SettingsFlagsAndId id(0, SETTINGS_MAX_CONCURRENT_STREAMS);
+ SettingsFlagsAndId id(SETTINGS_FLAG_NONE, SETTINGS_MAX_CONCURRENT_STREAMS);
const size_t max_concurrent_streams = 1;
settings.push_back(SpdySetting(id, max_concurrent_streams));
@@ -1400,8 +1397,7 @@ TEST_P(SpdyNetworkTransactionSpdy2Test, ThreeGetsWithMaxConcurrentSocketClose) {
out.rv = trans1.Start(&httpreq1, callback1.callback(), log);
ASSERT_EQ(out.rv, ERR_IO_PENDING);
- // run transaction 1 through quickly to force a read of our SETTINGS
- // frame
+ // Run transaction 1 through quickly to force a read of our SETTINGS frame.
out.rv = callback1.WaitForResult();
ASSERT_EQ(OK, out.rv);
@@ -1442,14 +1438,14 @@ TEST_P(SpdyNetworkTransactionSpdy2Test, Put) {
const SpdyHeaderInfo kSynStartHeader = {
SYN_STREAM, // Kind = Syn
- 1, // Stream ID
- 0, // Associated stream ID
+ 1, // Stream ID
+ 0, // Associated stream ID
net::ConvertRequestPriorityToSpdyPriority(LOWEST), // Priority
CONTROL_FLAG_FIN, // Control Flags
- false, // Compressed
+ false, // Compressed
INVALID, // Status
- NULL, // Data
- 0, // Length
+ NULL, // Data
+ 0, // Length
DATA_FLAG_NONE // Data Flags
};
const char* const kPutHeaders[] = {
@@ -1469,14 +1465,14 @@ TEST_P(SpdyNetworkTransactionSpdy2Test, Put) {
scoped_ptr<SpdyFrame> body(ConstructSpdyBodyFrame(1, true));
const SpdyHeaderInfo kSynReplyHeader = {
SYN_REPLY, // Kind = SynReply
- 1, // Stream ID
- 0, // Associated stream ID
+ 1, // Stream ID
+ 0, // Associated stream ID
net::ConvertRequestPriorityToSpdyPriority(LOWEST), // Priority
CONTROL_FLAG_NONE, // Control Flags
- false, // Compressed
+ false, // Compressed
INVALID, // Status
- NULL, // Data
- 0, // Length
+ NULL, // Data
+ 0, // Length
DATA_FLAG_NONE // Data Flags
};
static const char* const kStandardGetHeaders[] = {
@@ -1513,14 +1509,14 @@ TEST_P(SpdyNetworkTransactionSpdy2Test, Head) {
const SpdyHeaderInfo kSynStartHeader = {
SYN_STREAM, // Kind = Syn
- 1, // Stream ID
- 0, // Associated stream ID
+ 1, // Stream ID
+ 0, // Associated stream ID
net::ConvertRequestPriorityToSpdyPriority(LOWEST), // Priority
CONTROL_FLAG_FIN, // Control Flags
- false, // Compressed
+ false, // Compressed
INVALID, // Status
- NULL, // Data
- 0, // Length
+ NULL, // Data
+ 0, // Length
DATA_FLAG_NONE // Data Flags
};
const char* const kHeadHeaders[] = {
@@ -1540,14 +1536,14 @@ TEST_P(SpdyNetworkTransactionSpdy2Test, Head) {
scoped_ptr<SpdyFrame> body(ConstructSpdyBodyFrame(1, true));
const SpdyHeaderInfo kSynReplyHeader = {
SYN_REPLY, // Kind = SynReply
- 1, // Stream ID
- 0, // Associated stream ID
+ 1, // Stream ID
+ 0, // Associated stream ID
net::ConvertRequestPriorityToSpdyPriority(LOWEST), // Priority
CONTROL_FLAG_NONE, // Control Flags
- false, // Compressed
+ false, // Compressed
INVALID, // Status
- NULL, // Data
- 0, // Length
+ NULL, // Data
+ 0, // Length
DATA_FLAG_NONE // Data Flags
};
static const char* const kStandardGetHeaders[] = {
@@ -3111,15 +3107,14 @@ TEST_P(SpdyNetworkTransactionSpdy2Test, SynReplyHeaders) {
TEST_P(SpdyNetworkTransactionSpdy2Test, SynReplyHeadersVary) {
static const SpdyHeaderInfo syn_reply_info = {
SYN_REPLY, // Syn Reply
- 1, // Stream ID
- 0, // Associated Stream ID
- net::ConvertRequestPriorityToSpdyPriority(LOWEST),
- // Priority
+ 1, // Stream ID
+ 0, // Associated Stream ID
+ net::ConvertRequestPriorityToSpdyPriority(LOWEST), // Priority
CONTROL_FLAG_NONE, // Control Flags
- false, // Compressed
+ false, // Compressed
INVALID, // Status
- NULL, // Data
- 0, // Data Length
+ NULL, // Data
+ 0, // Data Length
DATA_FLAG_NONE // Data Flags
};
// Modify the following data to change/add test cases:
@@ -3280,15 +3275,14 @@ TEST_P(SpdyNetworkTransactionSpdy2Test, SynReplyHeadersVary) {
TEST_P(SpdyNetworkTransactionSpdy2Test, InvalidSynReply) {
const SpdyHeaderInfo kSynStartHeader = {
SYN_REPLY, // Kind = SynReply
- 1, // Stream ID
- 0, // Associated stream ID
- net::ConvertRequestPriorityToSpdyPriority(LOWEST),
- // Priority
+ 1, // Stream ID
+ 0, // Associated stream ID
+ net::ConvertRequestPriorityToSpdyPriority(LOWEST), // Priority
CONTROL_FLAG_NONE, // Control Flags
- false, // Compressed
+ false, // Compressed
INVALID, // Status
- NULL, // Data
- 0, // Length
+ NULL, // Data
+ 0, // Length
DATA_FLAG_NONE // Data Flags
};
@@ -4001,15 +3995,14 @@ TEST_P(SpdyNetworkTransactionSpdy2Test, BufferedCancelled) {
TEST_P(SpdyNetworkTransactionSpdy2Test, SettingsSaved) {
static const SpdyHeaderInfo kSynReplyInfo = {
SYN_REPLY, // Syn Reply
- 1, // Stream ID
- 0, // Associated Stream ID
- net::ConvertRequestPriorityToSpdyPriority(LOWEST),
- // Priority
+ 1, // Stream ID
+ 0, // Associated Stream ID
+ net::ConvertRequestPriorityToSpdyPriority(LOWEST), // Priority
CONTROL_FLAG_NONE, // Control Flags
- false, // Compressed
+ false, // Compressed
INVALID, // Status
- NULL, // Data
- 0, // Data Length
+ NULL, // Data
+ 0, // Data Length
DATA_FLAG_NONE // Data Flags
};
static const char* const kExtraHeaders[] = {
@@ -4039,26 +4032,24 @@ TEST_P(SpdyNetworkTransactionSpdy2Test, SettingsSaved) {
NULL,
0));
- unsigned int kSampleId1 = 0x1;
+ const SpdySettingsIds kSampleId1 = SETTINGS_UPLOAD_BANDWIDTH;
unsigned int kSampleValue1 = 0x0a0a0a0a;
- unsigned int kSampleId2 = 0x2;
+ const SpdySettingsIds kSampleId2 = SETTINGS_DOWNLOAD_BANDWIDTH;
unsigned int kSampleValue2 = 0x0b0b0b0b;
- unsigned int kSampleId3 = 0x3;
+ const SpdySettingsIds kSampleId3 = SETTINGS_ROUND_TRIP_TIME;
unsigned int kSampleValue3 = 0x0c0c0c0c;
scoped_ptr<SpdyFrame> settings_frame;
{
// Construct the SETTINGS frame.
SpdySettings settings;
- // First add a persisted setting
- SettingsFlagsAndId setting1(SETTINGS_FLAG_PLEASE_PERSIST,
- kSampleId1);
+ // First add a persisted setting.
+ SettingsFlagsAndId setting1(SETTINGS_FLAG_PLEASE_PERSIST, kSampleId1);
settings.push_back(std::make_pair(setting1, kSampleValue1));
- // Next add a non-persisted setting
- SettingsFlagsAndId setting2(0, kSampleId2);
+ // Next add a non-persisted setting.
+ SettingsFlagsAndId setting2(SETTINGS_FLAG_NONE, kSampleId2);
settings.push_back(std::make_pair(setting2, kSampleValue2));
- // Next add another persisted setting
- SettingsFlagsAndId setting3(SETTINGS_FLAG_PLEASE_PERSIST,
- kSampleId3);
+ // Next add another persisted setting.
+ SettingsFlagsAndId setting3(SETTINGS_FLAG_PLEASE_PERSIST, kSampleId3);
settings.push_back(std::make_pair(setting3, kSampleValue3));
settings_frame.reset(ConstructSpdySettings(settings));
}
@@ -4082,30 +4073,27 @@ TEST_P(SpdyNetworkTransactionSpdy2Test, SettingsSaved) {
EXPECT_EQ("HTTP/1.1 200 OK", out.status_line);
EXPECT_EQ("hello!", out.response_data);
- // TODO(rtenneti): Persist spdy settings.
-#ifdef PERSIST_SPDY_SETTINGS
{
// Verify we had two persisted settings.
- SpdySettings saved_settings =
+ const SettingsMap& settings_map =
spdy_session_pool->http_server_properties()->GetSpdySettings(
host_port_pair);
- ASSERT_EQ(2u, saved_settings.size());
+ ASSERT_EQ(2u, settings_map.size());
// Verify the first persisted setting.
- SpdySetting setting = saved_settings.front();
- saved_settings.pop_front();
- EXPECT_EQ(SETTINGS_FLAG_PERSISTED, setting.first.flags());
- EXPECT_EQ(kSampleId1, setting.first.id());
- EXPECT_EQ(kSampleValue1, setting.second);
+ SettingsMap::const_iterator it1 = settings_map.find(kSampleId1);
+ EXPECT_TRUE(it1 != settings_map.end());
+ SettingsFlagsAndValue flags_and_value1 = it1->second;
+ EXPECT_EQ(SETTINGS_FLAG_PERSISTED, flags_and_value1.first);
+ EXPECT_EQ(kSampleValue1, flags_and_value1.second);
// Verify the second persisted setting.
- setting = saved_settings.front();
- saved_settings.pop_front();
- EXPECT_EQ(SETTINGS_FLAG_PERSISTED, setting.first.flags());
- EXPECT_EQ(kSampleId3, setting.first.id());
- EXPECT_EQ(kSampleValue3, setting.second);
+ SettingsMap::const_iterator it3 = settings_map.find(kSampleId3);
+ EXPECT_TRUE(it3 != settings_map.end());
+ SettingsFlagsAndValue flags_and_value3 = it3->second;
+ EXPECT_EQ(SETTINGS_FLAG_PERSISTED, flags_and_value3.first);
+ EXPECT_EQ(kSampleValue3, flags_and_value3.second);
}
-#endif
}
// Test that when there are settings saved that they are sent back to the
@@ -4113,15 +4101,14 @@ TEST_P(SpdyNetworkTransactionSpdy2Test, SettingsSaved) {
TEST_P(SpdyNetworkTransactionSpdy2Test, SettingsPlayback) {
static const SpdyHeaderInfo kSynReplyInfo = {
SYN_REPLY, // Syn Reply
- 1, // Stream ID
- 0, // Associated Stream ID
- net::ConvertRequestPriorityToSpdyPriority(LOWEST),
- // Priority
+ 1, // Stream ID
+ 0, // Associated Stream ID
+ net::ConvertRequestPriorityToSpdyPriority(LOWEST), // Priority
CONTROL_FLAG_NONE, // Control Flags
- false, // Compressed
+ false, // Compressed
INVALID, // Status
- NULL, // Data
- 0, // Data Length
+ NULL, // Data
+ 0, // Data Length
DATA_FLAG_NONE // Data Flags
};
static const char* kExtraHeaders[] = {
@@ -4139,33 +4126,43 @@ TEST_P(SpdyNetworkTransactionSpdy2Test, SettingsPlayback) {
EXPECT_TRUE(spdy_session_pool->http_server_properties()->GetSpdySettings(
host_port_pair).empty());
- unsigned int kSampleId1 = 0x1;
+ const SpdySettingsIds kSampleId1 = SETTINGS_UPLOAD_BANDWIDTH;
unsigned int kSampleValue1 = 0x0a0a0a0a;
- unsigned int kSampleId2 = 0xababab;
+ const SpdySettingsIds kSampleId2 = SETTINGS_ROUND_TRIP_TIME;
unsigned int kSampleValue2 = 0x0c0c0c0c;
- // Manually insert settings into the SpdySettingsStorage here.
- {
- SpdySettings settings;
- // First add a persisted setting
- SettingsFlagsAndId setting1(SETTINGS_FLAG_PLEASE_PERSIST,
- kSampleId1);
- settings.push_back(std::make_pair(setting1, kSampleValue1));
- // Next add another persisted setting
- SettingsFlagsAndId setting2(SETTINGS_FLAG_PLEASE_PERSIST,
- kSampleId2);
- settings.push_back(std::make_pair(setting2, kSampleValue2));
- spdy_session_pool->http_server_properties()->SetSpdySettings(
- host_port_pair, settings);
- }
+ // First add a persisted setting.
+ spdy_session_pool->http_server_properties()->SetSpdySetting(
+ host_port_pair,
+ kSampleId1,
+ SETTINGS_FLAG_PLEASE_PERSIST,
+ kSampleValue1);
+
+ // Next add another persisted setting.
+ spdy_session_pool->http_server_properties()->SetSpdySetting(
+ host_port_pair,
+ kSampleId2,
+ SETTINGS_FLAG_PLEASE_PERSIST,
+ kSampleValue2);
EXPECT_EQ(2u, spdy_session_pool->http_server_properties()->GetSpdySettings(
host_port_pair).size());
// Construct the SETTINGS frame.
- const SpdySettings& settings =
+ const SettingsMap& settings_map =
spdy_session_pool->http_server_properties()->GetSpdySettings(
host_port_pair);
+
+ SpdySettings settings;
+ for (SettingsMap::const_iterator i = settings_map.begin(),
+ end = settings_map.end(); i != end; ++i) {
+ const SpdySettingsIds id = i->first;
+ const SpdySettingsFlags flags = i->second.first;
+ const uint32 val = i->second.second;
+ SettingsFlagsAndId flags_and_id(flags, id);
+ settings.push_back(SpdySetting(flags_and_id, val));
+ }
+
scoped_ptr<SpdyFrame> settings_frame(ConstructSpdySettings(settings));
// Construct the request.
@@ -4204,24 +4201,24 @@ TEST_P(SpdyNetworkTransactionSpdy2Test, SettingsPlayback) {
{
// Verify we had two persisted settings.
- SpdySettings saved_settings =
+ const SettingsMap& settings_map =
spdy_session_pool->http_server_properties()->GetSpdySettings(
host_port_pair);
- ASSERT_EQ(2u, saved_settings.size());
+ ASSERT_EQ(2u, settings_map.size());
// Verify the first persisted setting.
- SpdySetting setting = saved_settings.front();
- saved_settings.pop_front();
- EXPECT_EQ(SETTINGS_FLAG_PERSISTED, setting.first.flags());
- EXPECT_EQ(kSampleId1, setting.first.id());
- EXPECT_EQ(kSampleValue1, setting.second);
+ SettingsMap::const_iterator it1 = settings_map.find(kSampleId1);
+ EXPECT_TRUE(it1 != settings_map.end());
+ SettingsFlagsAndValue flags_and_value1 = it1->second;
+ EXPECT_EQ(SETTINGS_FLAG_PERSISTED, flags_and_value1.first);
+ EXPECT_EQ(kSampleValue1, flags_and_value1.second);
// Verify the second persisted setting.
- setting = saved_settings.front();
- saved_settings.pop_front();
- EXPECT_EQ(SETTINGS_FLAG_PERSISTED, setting.first.flags());
- EXPECT_EQ(kSampleId2, setting.first.id());
- EXPECT_EQ(kSampleValue2, setting.second);
+ SettingsMap::const_iterator it2 = settings_map.find(kSampleId2);
+ EXPECT_TRUE(it2 != settings_map.end());
+ SettingsFlagsAndValue flags_and_value2 = it2->second;
+ EXPECT_EQ(SETTINGS_FLAG_PERSISTED, flags_and_value2.first);
+ EXPECT_EQ(kSampleValue2, flags_and_value2.second);
}
}
diff --git a/net/spdy/spdy_network_transaction_spdy3_unittest.cc b/net/spdy/spdy_network_transaction_spdy3_unittest.cc
index ebe6305..1bcdca5 100644
--- a/net/spdy/spdy_network_transaction_spdy3_unittest.cc
+++ b/net/spdy/spdy_network_transaction_spdy3_unittest.cc
@@ -936,7 +936,7 @@ TEST_P(SpdyNetworkTransactionSpdy3Test, ThreeGetsWithMaxConcurrent) {
scoped_ptr<SpdyFrame> fbody3(ConstructSpdyBodyFrame(5, true));
SpdySettings settings;
- SettingsFlagsAndId id(0, SETTINGS_MAX_CONCURRENT_STREAMS);
+ SettingsFlagsAndId id(SETTINGS_FLAG_NONE, SETTINGS_MAX_CONCURRENT_STREAMS);
const size_t max_concurrent_streams = 1;
settings.push_back(SpdySetting(id, max_concurrent_streams));
@@ -1072,9 +1072,8 @@ TEST_P(SpdyNetworkTransactionSpdy3Test, FourGetsWithMaxConcurrentPriority) {
scoped_ptr<SpdyFrame> body3(ConstructSpdyBodyFrame(7, false));
scoped_ptr<SpdyFrame> fbody3(ConstructSpdyBodyFrame(7, true));
-
SpdySettings settings;
- SettingsFlagsAndId id(0, SETTINGS_MAX_CONCURRENT_STREAMS);
+ SettingsFlagsAndId id(SETTINGS_FLAG_NONE, SETTINGS_MAX_CONCURRENT_STREAMS);
const size_t max_concurrent_streams = 1;
settings.push_back(SpdySetting(id, max_concurrent_streams));
@@ -1141,8 +1140,7 @@ TEST_P(SpdyNetworkTransactionSpdy3Test, FourGetsWithMaxConcurrentPriority) {
out.rv = trans1->Start(&httpreq1, callback1.callback(), log);
ASSERT_EQ(ERR_IO_PENDING, out.rv);
- // run transaction 1 through quickly to force a read of our SETTINGS
- // frame
+ // Run transaction 1 through quickly to force a read of our SETTINGS frame.
out.rv = callback1.WaitForResult();
ASSERT_EQ(OK, out.rv);
@@ -1218,7 +1216,7 @@ TEST_P(SpdyNetworkTransactionSpdy3Test, ThreeGetsWithMaxConcurrentDelete) {
scoped_ptr<SpdyFrame> fbody2(ConstructSpdyBodyFrame(3, true));
SpdySettings settings;
- SettingsFlagsAndId id(0, SETTINGS_MAX_CONCURRENT_STREAMS);
+ SettingsFlagsAndId id(SETTINGS_FLAG_NONE, SETTINGS_MAX_CONCURRENT_STREAMS);
const size_t max_concurrent_streams = 1;
settings.push_back(SpdySetting(id, max_concurrent_streams));
@@ -1271,8 +1269,7 @@ TEST_P(SpdyNetworkTransactionSpdy3Test, ThreeGetsWithMaxConcurrentDelete) {
out.rv = trans1->Start(&httpreq1, callback1.callback(), log);
ASSERT_EQ(out.rv, ERR_IO_PENDING);
- // run transaction 1 through quickly to force a read of our SETTINGS
- // frame
+ // Run transaction 1 through quickly to force a read of our SETTINGS frame.
out.rv = callback1.WaitForResult();
ASSERT_EQ(OK, out.rv);
@@ -1353,7 +1350,7 @@ TEST_P(SpdyNetworkTransactionSpdy3Test, ThreeGetsWithMaxConcurrentSocketClose) {
scoped_ptr<SpdyFrame> resp2(ConstructSpdyGetSynReply(NULL, 0, 3));
SpdySettings settings;
- SettingsFlagsAndId id(0, SETTINGS_MAX_CONCURRENT_STREAMS);
+ SettingsFlagsAndId id(SETTINGS_FLAG_NONE, SETTINGS_MAX_CONCURRENT_STREAMS);
const size_t max_concurrent_streams = 1;
settings.push_back(SpdySetting(id, max_concurrent_streams));
@@ -1401,8 +1398,7 @@ TEST_P(SpdyNetworkTransactionSpdy3Test, ThreeGetsWithMaxConcurrentSocketClose) {
out.rv = trans1.Start(&httpreq1, callback1.callback(), log);
ASSERT_EQ(out.rv, ERR_IO_PENDING);
- // run transaction 1 through quickly to force a read of our SETTINGS
- // frame
+ // Run transaction 1 through quickly to force a read of our SETTINGS frame.
out.rv = callback1.WaitForResult();
ASSERT_EQ(OK, out.rv);
@@ -1443,15 +1439,15 @@ TEST_P(SpdyNetworkTransactionSpdy3Test, Put) {
const SpdyHeaderInfo kSynStartHeader = {
SYN_STREAM, // Kind = Syn
- 1, // Stream ID
- 0, // Associated stream ID
+ 1, // Stream ID
+ 0, // Associated stream ID
net::ConvertRequestPriorityToSpdyPriority(LOWEST), // Priority
- 0, // Credential Slot
+ 0, // Credential Slot
CONTROL_FLAG_FIN, // Control Flags
- false, // Compressed
+ false, // Compressed
INVALID, // Status
- NULL, // Data
- 0, // Length
+ NULL, // Data
+ 0, // Length
DATA_FLAG_NONE // Data Flags
};
const char* const kPutHeaders[] = {
@@ -1471,15 +1467,15 @@ TEST_P(SpdyNetworkTransactionSpdy3Test, Put) {
scoped_ptr<SpdyFrame> body(ConstructSpdyBodyFrame(1, true));
const SpdyHeaderInfo kSynReplyHeader = {
SYN_REPLY, // Kind = SynReply
- 1, // Stream ID
- 0, // Associated stream ID
+ 1, // Stream ID
+ 0, // Associated stream ID
net::ConvertRequestPriorityToSpdyPriority(LOWEST), // Priority
- 0, // Credential Slot
+ 0, // Credential Slot
CONTROL_FLAG_NONE, // Control Flags
- false, // Compressed
+ false, // Compressed
INVALID, // Status
- NULL, // Data
- 0, // Length
+ NULL, // Data
+ 0, // Length
DATA_FLAG_NONE // Data Flags
};
static const char* const kStandardGetHeaders[] = {
@@ -1516,15 +1512,15 @@ TEST_P(SpdyNetworkTransactionSpdy3Test, Head) {
const SpdyHeaderInfo kSynStartHeader = {
SYN_STREAM, // Kind = Syn
- 1, // Stream ID
- 0, // Associated stream ID
+ 1, // Stream ID
+ 0, // Associated stream ID
net::ConvertRequestPriorityToSpdyPriority(LOWEST), // Priority
- 0, // Credential Slot
+ 0, // Credential Slot
CONTROL_FLAG_FIN, // Control Flags
- false, // Compressed
+ false, // Compressed
INVALID, // Status
- NULL, // Data
- 0, // Length
+ NULL, // Data
+ 0, // Length
DATA_FLAG_NONE // Data Flags
};
const char* const kHeadHeaders[] = {
@@ -1544,15 +1540,15 @@ TEST_P(SpdyNetworkTransactionSpdy3Test, Head) {
scoped_ptr<SpdyFrame> body(ConstructSpdyBodyFrame(1, true));
const SpdyHeaderInfo kSynReplyHeader = {
SYN_REPLY, // Kind = SynReply
- 1, // Stream ID
- 0, // Associated stream ID
+ 1, // Stream ID
+ 0, // Associated stream ID
net::ConvertRequestPriorityToSpdyPriority(LOWEST), // Priority
- 0, // Credential Slot
+ 0, // Credential Slot
CONTROL_FLAG_NONE, // Control Flags
- false, // Compressed
+ false, // Compressed
INVALID, // Status
- NULL, // Data
- 0, // Length
+ NULL, // Data
+ 0, // Length
DATA_FLAG_NONE // Data Flags
};
static const char* const kStandardGetHeaders[] = {
@@ -3479,16 +3475,15 @@ TEST_P(SpdyNetworkTransactionSpdy3Test, SynReplyHeaders) {
TEST_P(SpdyNetworkTransactionSpdy3Test, SynReplyHeadersVary) {
static const SpdyHeaderInfo syn_reply_info = {
SYN_REPLY, // Syn Reply
- 1, // Stream ID
- 0, // Associated Stream ID
- net::ConvertRequestPriorityToSpdyPriority(LOWEST),
- // Priority
- 0, // Credential Slot
+ 1, // Stream ID
+ 0, // Associated Stream ID
+ net::ConvertRequestPriorityToSpdyPriority(LOWEST), // Priority
+ 0, // Credential Slot
CONTROL_FLAG_NONE, // Control Flags
- false, // Compressed
+ false, // Compressed
INVALID, // Status
- NULL, // Data
- 0, // Data Length
+ NULL, // Data
+ 0, // Data Length
DATA_FLAG_NONE // Data Flags
};
// Modify the following data to change/add test cases:
@@ -3649,16 +3644,15 @@ TEST_P(SpdyNetworkTransactionSpdy3Test, SynReplyHeadersVary) {
TEST_P(SpdyNetworkTransactionSpdy3Test, InvalidSynReply) {
const SpdyHeaderInfo kSynStartHeader = {
SYN_REPLY, // Kind = SynReply
- 1, // Stream ID
- 0, // Associated stream ID
- net::ConvertRequestPriorityToSpdyPriority(LOWEST),
- // Priority
- 0, // Credential Slot
+ 1, // Stream ID
+ 0, // Associated stream ID
+ net::ConvertRequestPriorityToSpdyPriority(LOWEST), // Priority
+ 0, // Credential Slot
CONTROL_FLAG_NONE, // Control Flags
- false, // Compressed
+ false, // Compressed
INVALID, // Status
- NULL, // Data
- 0, // Length
+ NULL, // Data
+ 0, // Length
DATA_FLAG_NONE // Data Flags
};
@@ -4371,16 +4365,15 @@ TEST_P(SpdyNetworkTransactionSpdy3Test, BufferedCancelled) {
TEST_P(SpdyNetworkTransactionSpdy3Test, SettingsSaved) {
static const SpdyHeaderInfo kSynReplyInfo = {
SYN_REPLY, // Syn Reply
- 1, // Stream ID
- 0, // Associated Stream ID
- net::ConvertRequestPriorityToSpdyPriority(LOWEST),
- // Priority
- 0, // Credential Slot
+ 1, // Stream ID
+ 0, // Associated Stream ID
+ net::ConvertRequestPriorityToSpdyPriority(LOWEST), // Priority
+ 0, // Credential Slot
CONTROL_FLAG_NONE, // Control Flags
- false, // Compressed
+ false, // Compressed
INVALID, // Status
- NULL, // Data
- 0, // Data Length
+ NULL, // Data
+ 0, // Data Length
DATA_FLAG_NONE // Data Flags
};
static const char* const kExtraHeaders[] = {
@@ -4410,26 +4403,24 @@ TEST_P(SpdyNetworkTransactionSpdy3Test, SettingsSaved) {
NULL,
0));
- unsigned int kSampleId1 = 0x1;
+ const SpdySettingsIds kSampleId1 = SETTINGS_UPLOAD_BANDWIDTH;
unsigned int kSampleValue1 = 0x0a0a0a0a;
- unsigned int kSampleId2 = 0x2;
+ const SpdySettingsIds kSampleId2 = SETTINGS_DOWNLOAD_BANDWIDTH;
unsigned int kSampleValue2 = 0x0b0b0b0b;
- unsigned int kSampleId3 = 0x3;
+ const SpdySettingsIds kSampleId3 = SETTINGS_ROUND_TRIP_TIME;
unsigned int kSampleValue3 = 0x0c0c0c0c;
scoped_ptr<SpdyFrame> settings_frame;
{
// Construct the SETTINGS frame.
SpdySettings settings;
- // First add a persisted setting
- SettingsFlagsAndId setting1(SETTINGS_FLAG_PLEASE_PERSIST,
- kSampleId1);
+ // First add a persisted setting.
+ SettingsFlagsAndId setting1(SETTINGS_FLAG_PLEASE_PERSIST, kSampleId1);
settings.push_back(std::make_pair(setting1, kSampleValue1));
- // Next add a non-persisted setting
- SettingsFlagsAndId setting2(0, kSampleId2);
+ // Next add a non-persisted setting.
+ SettingsFlagsAndId setting2(SETTINGS_FLAG_NONE, kSampleId2);
settings.push_back(std::make_pair(setting2, kSampleValue2));
- // Next add another persisted setting
- SettingsFlagsAndId setting3(SETTINGS_FLAG_PLEASE_PERSIST,
- kSampleId3);
+ // Next add another persisted setting.
+ SettingsFlagsAndId setting3(SETTINGS_FLAG_PLEASE_PERSIST, kSampleId3);
settings.push_back(std::make_pair(setting3, kSampleValue3));
settings_frame.reset(ConstructSpdySettings(settings));
}
@@ -4453,30 +4444,27 @@ TEST_P(SpdyNetworkTransactionSpdy3Test, SettingsSaved) {
EXPECT_EQ("HTTP/1.1 200 OK", out.status_line);
EXPECT_EQ("hello!", out.response_data);
- // TODO(rtenneti): Persist spdy settings.
-#ifdef PERSIST_SPDY_SETTINGS
{
// Verify we had two persisted settings.
- SpdySettings saved_settings =
+ const SettingsMap& settings_map =
spdy_session_pool->http_server_properties()->GetSpdySettings(
host_port_pair);
- ASSERT_EQ(2u, saved_settings.size());
+ ASSERT_EQ(2u, settings_map.size());
// Verify the first persisted setting.
- SpdySetting setting = saved_settings.front();
- saved_settings.pop_front();
- EXPECT_EQ(SETTINGS_FLAG_PERSISTED, setting.first.flags());
- EXPECT_EQ(kSampleId1, setting.first.id());
- EXPECT_EQ(kSampleValue1, setting.second);
+ SettingsMap::const_iterator it1 = settings_map.find(kSampleId1);
+ EXPECT_TRUE(it1 != settings_map.end());
+ SettingsFlagsAndValue flags_and_value1 = it1->second;
+ EXPECT_EQ(SETTINGS_FLAG_PERSISTED, flags_and_value1.first);
+ EXPECT_EQ(kSampleValue1, flags_and_value1.second);
// Verify the second persisted setting.
- setting = saved_settings.front();
- saved_settings.pop_front();
- EXPECT_EQ(SETTINGS_FLAG_PERSISTED, setting.first.flags());
- EXPECT_EQ(kSampleId3, setting.first.id());
- EXPECT_EQ(kSampleValue3, setting.second);
+ SettingsMap::const_iterator it3 = settings_map.find(kSampleId3);
+ EXPECT_TRUE(it3 != settings_map.end());
+ SettingsFlagsAndValue flags_and_value3 = it3->second;
+ EXPECT_EQ(SETTINGS_FLAG_PERSISTED, flags_and_value3.first);
+ EXPECT_EQ(kSampleValue3, flags_and_value3.second);
}
-#endif
}
// Test that when there are settings saved that they are sent back to the
@@ -4484,16 +4472,15 @@ TEST_P(SpdyNetworkTransactionSpdy3Test, SettingsSaved) {
TEST_P(SpdyNetworkTransactionSpdy3Test, SettingsPlayback) {
static const SpdyHeaderInfo kSynReplyInfo = {
SYN_REPLY, // Syn Reply
- 1, // Stream ID
- 0, // Associated Stream ID
- net::ConvertRequestPriorityToSpdyPriority(LOWEST),
- // Priority
- 0, // Credential Slot
+ 1, // Stream ID
+ 0, // Associated Stream ID
+ net::ConvertRequestPriorityToSpdyPriority(LOWEST), // Priority
+ 0, // Credential Slot
CONTROL_FLAG_NONE, // Control Flags
- false, // Compressed
+ false, // Compressed
INVALID, // Status
- NULL, // Data
- 0, // Data Length
+ NULL, // Data
+ 0, // Data Length
DATA_FLAG_NONE // Data Flags
};
static const char* kExtraHeaders[] = {
@@ -4511,33 +4498,43 @@ TEST_P(SpdyNetworkTransactionSpdy3Test, SettingsPlayback) {
EXPECT_TRUE(spdy_session_pool->http_server_properties()->GetSpdySettings(
host_port_pair).empty());
- unsigned int kSampleId1 = 0x1;
+ const SpdySettingsIds kSampleId1 = SETTINGS_UPLOAD_BANDWIDTH;
unsigned int kSampleValue1 = 0x0a0a0a0a;
- unsigned int kSampleId2 = 0xababab;
+ const SpdySettingsIds kSampleId2 = SETTINGS_ROUND_TRIP_TIME;
unsigned int kSampleValue2 = 0x0c0c0c0c;
- // Manually insert settings into the SpdySettingsStorage here.
- {
- SpdySettings settings;
- // First add a persisted setting
- SettingsFlagsAndId setting1(SETTINGS_FLAG_PLEASE_PERSIST,
- kSampleId1);
- settings.push_back(std::make_pair(setting1, kSampleValue1));
- // Next add another persisted setting
- SettingsFlagsAndId setting2(SETTINGS_FLAG_PLEASE_PERSIST,
- kSampleId2);
- settings.push_back(std::make_pair(setting2, kSampleValue2));
- spdy_session_pool->http_server_properties()->SetSpdySettings(
- host_port_pair, settings);
- }
+ // First add a persisted setting.
+ spdy_session_pool->http_server_properties()->SetSpdySetting(
+ host_port_pair,
+ kSampleId1,
+ SETTINGS_FLAG_PLEASE_PERSIST,
+ kSampleValue1);
+
+ // Next add another persisted setting.
+ spdy_session_pool->http_server_properties()->SetSpdySetting(
+ host_port_pair,
+ kSampleId2,
+ SETTINGS_FLAG_PLEASE_PERSIST,
+ kSampleValue2);
EXPECT_EQ(2u, spdy_session_pool->http_server_properties()->GetSpdySettings(
host_port_pair).size());
// Construct the SETTINGS frame.
- const SpdySettings& settings =
+ const SettingsMap& settings_map =
spdy_session_pool->http_server_properties()->GetSpdySettings(
host_port_pair);
+
+ SpdySettings settings;
+ for (SettingsMap::const_iterator i = settings_map.begin(),
+ end = settings_map.end(); i != end; ++i) {
+ const SpdySettingsIds id = i->first;
+ const SpdySettingsFlags flags = i->second.first;
+ const uint32 val = i->second.second;
+ SettingsFlagsAndId flags_and_id(flags, id);
+ settings.push_back(SpdySetting(flags_and_id, val));
+ }
+
scoped_ptr<SpdyFrame> settings_frame(ConstructSpdySettings(settings));
// Construct the request.
@@ -4576,24 +4573,24 @@ TEST_P(SpdyNetworkTransactionSpdy3Test, SettingsPlayback) {
{
// Verify we had two persisted settings.
- SpdySettings saved_settings =
+ const SettingsMap& settings_map =
spdy_session_pool->http_server_properties()->GetSpdySettings(
host_port_pair);
- ASSERT_EQ(2u, saved_settings.size());
+ ASSERT_EQ(2u, settings_map.size());
// Verify the first persisted setting.
- SpdySetting setting = saved_settings.front();
- saved_settings.pop_front();
- EXPECT_EQ(SETTINGS_FLAG_PERSISTED, setting.first.flags());
- EXPECT_EQ(kSampleId1, setting.first.id());
- EXPECT_EQ(kSampleValue1, setting.second);
+ SettingsMap::const_iterator it1 = settings_map.find(kSampleId1);
+ EXPECT_TRUE(it1 != settings_map.end());
+ SettingsFlagsAndValue flags_and_value1 = it1->second;
+ EXPECT_EQ(SETTINGS_FLAG_PERSISTED, flags_and_value1.first);
+ EXPECT_EQ(kSampleValue1, flags_and_value1.second);
// Verify the second persisted setting.
- setting = saved_settings.front();
- saved_settings.pop_front();
- EXPECT_EQ(SETTINGS_FLAG_PERSISTED, setting.first.flags());
- EXPECT_EQ(kSampleId2, setting.first.id());
- EXPECT_EQ(kSampleValue2, setting.second);
+ SettingsMap::const_iterator it2 = settings_map.find(kSampleId2);
+ EXPECT_TRUE(it2 != settings_map.end());
+ SettingsFlagsAndValue flags_and_value2 = it2->second;
+ EXPECT_EQ(SETTINGS_FLAG_PERSISTED, flags_and_value2.first);
+ EXPECT_EQ(kSampleValue2, flags_and_value2.second);
}
}
diff --git a/net/spdy/spdy_protocol.h b/net/spdy/spdy_protocol.h
index 81562a56..6978e45 100644
--- a/net/spdy/spdy_protocol.h
+++ b/net/spdy/spdy_protocol.h
@@ -401,6 +401,7 @@ enum SpdySettingsControlFlags {
// Flags for settings within a SETTINGS frame.
enum SpdySettingsFlags {
+ SETTINGS_FLAG_NONE = 0x0,
SETTINGS_FLAG_PLEASE_PERSIST = 0x1,
SETTINGS_FLAG_PERSISTED = 0x2
};
diff --git a/net/spdy/spdy_session.cc b/net/spdy/spdy_session.cc
index 5101e81..cac331c 100644
--- a/net/spdy/spdy_session.cc
+++ b/net/spdy/spdy_session.cc
@@ -123,6 +123,33 @@ class NetLogSpdySessionParameter : public NetLog::EventParameters {
DISALLOW_COPY_AND_ASSIGN(NetLogSpdySessionParameter);
};
+class NetLogSpdySettingParameter : public NetLog::EventParameters {
+ public:
+ explicit NetLogSpdySettingParameter(SpdySettingsIds id,
+ SpdySettingsFlags flags,
+ uint32 value)
+ : id_(id),
+ flags_(flags),
+ value_(value) {
+ }
+
+ virtual Value* ToValue() const {
+ DictionaryValue* dict = new DictionaryValue();
+ dict->SetInteger("id", id_);
+ dict->SetInteger("flags", flags_);
+ dict->SetInteger("value", value_);
+ return dict;
+ }
+
+ private:
+ ~NetLogSpdySettingParameter() {}
+ const SpdySettingsIds id_;
+ const SpdySettingsFlags flags_;
+ const uint32 value_;
+
+ DISALLOW_COPY_AND_ASSIGN(NetLogSpdySettingParameter);
+};
+
class NetLogSpdySettingsParameter : public NetLog::EventParameters {
public:
explicit NetLogSpdySettingsParameter(const SpdySettings& settings)
@@ -1332,19 +1359,18 @@ void SpdySession::OnSetting(SpdySettingsIds id,
uint8 flags,
uint32 value) {
HandleSetting(id, value);
- SettingsFlagsAndId flags_and_id(flags, id);
- // TODO(rtenneti): persist SpdySetting.
- // http_server_properties_->SetSpdySetting(
- // host_port_pair(), std::make_pair(flags_and_id, value));
-
+ http_server_properties_->SetSpdySetting(
+ host_port_pair(),
+ id,
+ static_cast<SpdySettingsFlags>(flags),
+ value);
received_settings_ = true;
- // Log the settings.
- SpdySettings settings;
- settings.insert(settings.end(), std::make_pair(flags_and_id, value));
+ // Log the setting.
net_log_.AddEvent(
- NetLog::TYPE_SPDY_SESSION_RECV_SETTINGS,
- make_scoped_refptr(new NetLogSpdySettingsParameter(settings)));
+ NetLog::TYPE_SPDY_SESSION_RECV_SETTING,
+ make_scoped_refptr(new NetLogSpdySettingParameter(
+ id, static_cast<SpdySettingsFlags>(flags), value)));
}
bool SpdySession::Respond(const SpdyHeaderBlock& headers,
@@ -1678,72 +1704,50 @@ uint32 ApplyCwndFieldTrialPolicy(int cwnd) {
}
void SpdySession::SendSettings() {
- // Note: we're copying the settings here, so that we can potentially modify
- // the settings for the field trial. When removing the field trial, make
- // this a reference to the const SpdySettings again.
- SpdySettings settings =
+ const SettingsMap& settings_map =
http_server_properties_->GetSpdySettings(host_port_pair());
- if (settings.empty())
+ if (settings_map.empty())
return;
- typedef std::map<uint32, SpdySetting> SpdySettingsMap;
- SpdySettingsMap unique_settings;
-
// Record Histogram Data and Apply the SpdyCwnd FieldTrial if applicable.
- for (SpdySettings::iterator i = settings.begin(),
- end = settings.end(); i != end; ++i) {
- const uint32 id = i->first.id();
- const uint32 val = i->second;
- switch (id) {
- case SETTINGS_CURRENT_CWND:
- uint32 cwnd = 0;
- cwnd = ApplyCwndFieldTrialPolicy(val);
- UMA_HISTOGRAM_CUSTOM_COUNTS("Net.SpdySettingsCwndSent",
- cwnd,
- 1, 200, 100);
- if (cwnd != val) {
- SettingsFlagsAndId new_id(SETTINGS_FLAG_PLEASE_PERSIST,
- id);
- i->second = cwnd;
- i->first = new_id;
- SpdySetting setting(new_id, val);
- // TODO(rtenneti): Persist SpdySetting.
- // http_server_properties_->SetSpdySetting(host_port_pair(), setting);
- unique_settings[id] = setting;
- continue;
- }
- }
- unique_settings[id] = *i;
- }
+ const SpdySettingsIds id = SETTINGS_CURRENT_CWND;
+ SettingsMap::const_iterator it = settings_map.find(id);
+ uint32 value = 0;
+ if (it != settings_map.end())
+ value = it->second.second;
+ uint32 cwnd = ApplyCwndFieldTrialPolicy(value);
+ UMA_HISTOGRAM_CUSTOM_COUNTS("Net.SpdySettingsCwndSent", cwnd, 1, 200, 100);
+ if (cwnd != value) {
+ http_server_properties_->SetSpdySetting(
+ host_port_pair(), id, SETTINGS_FLAG_PLEASE_PERSIST, cwnd);
+ }
+
+ const SettingsMap& settings_map_new =
+ http_server_properties_->GetSpdySettings(host_port_pair());
- HandleSettings(settings);
+ SpdySettings settings;
+ for (SettingsMap::const_iterator i = settings_map_new.begin(),
+ end = settings_map_new.end(); i != end; ++i) {
+ const SpdySettingsIds new_id = i->first;
+ const SpdySettingsFlags new_flags = i->second.first;
+ const uint32 new_val = i->second.second;
+ HandleSetting(new_id, new_val);
+ SettingsFlagsAndId flags_and_id(new_flags, new_id);
+ settings.push_back(SpdySetting(flags_and_id, new_val));
+ }
net_log_.AddEvent(
NetLog::TYPE_SPDY_SESSION_SEND_SETTINGS,
make_scoped_refptr(new NetLogSpdySettingsParameter(settings)));
- SpdySettings sorted_settings;
- for (SpdySettingsMap::iterator it = unique_settings.begin();
- unique_settings.end() != it;
- ++it) {
- sorted_settings.push_back(it->second);
- }
-
// Create the SETTINGS frame and send it.
DCHECK(buffered_spdy_framer_.get());
scoped_ptr<SpdySettingsControlFrame> settings_frame(
- buffered_spdy_framer_->CreateSettings(sorted_settings));
+ buffered_spdy_framer_->CreateSettings(settings));
sent_settings_ = true;
QueueFrame(settings_frame.get(), 0, NULL);
}
-void SpdySession::HandleSettings(const SpdySettings& settings) {
- for (SpdySettings::const_iterator i = settings.begin(),
- end = settings.end(); i != end; ++i) {
- HandleSetting(i->first.id(), i->second);
- }
-}
-
void SpdySession::HandleSetting(uint32 id, uint32 value) {
switch (id) {
case SETTINGS_MAX_CONCURRENT_STREAMS:
@@ -1897,35 +1901,31 @@ void SpdySession::RecordHistograms() {
if (received_settings_) {
// Enumerate the saved settings, and set histograms for it.
- const SpdySettings& settings =
+ const SettingsMap& settings_map =
http_server_properties_->GetSpdySettings(host_port_pair());
- SpdySettings::const_iterator it;
- for (it = settings.begin(); it != settings.end(); ++it) {
- const SpdySetting setting = *it;
- switch (setting.first.id()) {
+ SettingsMap::const_iterator it;
+ for (it = settings_map.begin(); it != settings_map.end(); ++it) {
+ const SpdySettingsIds id = it->first;
+ const uint32 val = it->second.second;
+ switch (id) {
case SETTINGS_CURRENT_CWND:
// Record several different histograms to see if cwnd converges
// for larger volumes of data being sent.
UMA_HISTOGRAM_CUSTOM_COUNTS("Net.SpdySettingsCwnd",
- setting.second,
- 1, 200, 100);
+ val, 1, 200, 100);
if (bytes_received_ > 10 * 1024) {
UMA_HISTOGRAM_CUSTOM_COUNTS("Net.SpdySettingsCwnd10K",
- setting.second,
- 1, 200, 100);
+ val, 1, 200, 100);
if (bytes_received_ > 25 * 1024) {
UMA_HISTOGRAM_CUSTOM_COUNTS("Net.SpdySettingsCwnd25K",
- setting.second,
- 1, 200, 100);
+ val, 1, 200, 100);
if (bytes_received_ > 50 * 1024) {
UMA_HISTOGRAM_CUSTOM_COUNTS("Net.SpdySettingsCwnd50K",
- setting.second,
- 1, 200, 100);
+ val, 1, 200, 100);
if (bytes_received_ > 100 * 1024) {
UMA_HISTOGRAM_CUSTOM_COUNTS("Net.SpdySettingsCwnd100K",
- setting.second,
- 1, 200, 100);
+ val, 1, 200, 100);
}
}
}
@@ -1933,13 +1933,13 @@ void SpdySession::RecordHistograms() {
break;
case SETTINGS_ROUND_TRIP_TIME:
UMA_HISTOGRAM_CUSTOM_COUNTS("Net.SpdySettingsRTT",
- setting.second,
- 1, 1200, 100);
+ val, 1, 1200, 100);
break;
case SETTINGS_DOWNLOAD_RETRANS_RATE:
UMA_HISTOGRAM_CUSTOM_COUNTS("Net.SpdySettingsRetransRate",
- setting.second,
- 1, 100, 50);
+ val, 1, 100, 50);
+ break;
+ default:
break;
}
}
diff --git a/net/spdy/spdy_session.h b/net/spdy/spdy_session.h
index 072ff5a..9042949 100644
--- a/net/spdy/spdy_session.h
+++ b/net/spdy/spdy_session.h
@@ -347,9 +347,8 @@ class NET_EXPORT SpdySession : public base::RefCounted<SpdySession>,
// Send relevant SETTINGS. This is generally called on connection setup.
void SendSettings();
- // Handle SETTINGS. Either when we send settings, or when we receive a
+ // Handle SETTING. Either when we send settings, or when we receive a
// SETTINGS control frame, update our SpdySession accordingly.
- void HandleSettings(const SpdySettings& settings);
void HandleSetting(uint32 id, uint32 value);
// Adjust the send window size of all ActiveStreams and PendingCreateStreams.
diff --git a/net/spdy/spdy_session_spdy2_unittest.cc b/net/spdy/spdy_session_spdy2_unittest.cc
index 922a0304..c491ece 100644
--- a/net/spdy/spdy_session_spdy2_unittest.cc
+++ b/net/spdy/spdy_session_spdy2_unittest.cc
@@ -501,15 +501,15 @@ TEST_F(SpdySessionSpdy2Test, OnSettings) {
session_deps.host_resolver->set_synchronous_mode(true);
SpdySettings new_settings;
- SettingsFlagsAndId id(0, SETTINGS_MAX_CONCURRENT_STREAMS);
+ const SpdySettingsIds kSpdySettingsIds1 = SETTINGS_MAX_CONCURRENT_STREAMS;
+ SettingsFlagsAndId id(SETTINGS_FLAG_NONE, kSpdySettingsIds1);
const size_t max_concurrent_streams = 2;
new_settings.push_back(SpdySetting(id, max_concurrent_streams));
// Set up the socket so we read a SETTINGS frame that raises max concurrent
// streams to 2.
MockConnect connect_data(SYNCHRONOUS, OK);
- scoped_ptr<SpdyFrame> settings_frame(
- ConstructSpdySettings(new_settings));
+ scoped_ptr<SpdyFrame> settings_frame(ConstructSpdySettings(new_settings));
MockRead reads[] = {
CreateMockRead(*settings_frame),
MockRead(SYNCHRONOUS, 0, 0) // EOF
@@ -532,11 +532,11 @@ TEST_F(SpdySessionSpdy2Test, OnSettings) {
// Initialize the SpdySettingsStorage with 1 max concurrent streams.
SpdySessionPool* spdy_session_pool(http_session->spdy_session_pool());
- SpdySettings old_settings;
- SettingsFlagsAndId id1(SETTINGS_FLAG_PLEASE_PERSIST, id.id());
- old_settings.push_back(SpdySetting(id1, 1));
- spdy_session_pool->http_server_properties()->SetSpdySettings(
- test_host_port_pair, old_settings);
+ spdy_session_pool->http_server_properties()->SetSpdySetting(
+ test_host_port_pair,
+ kSpdySettingsIds1,
+ SETTINGS_FLAG_PLEASE_PERSIST,
+ 1);
// Create a session.
EXPECT_FALSE(spdy_session_pool->HasSession(pair));
@@ -615,12 +615,11 @@ TEST_F(SpdySessionSpdy2Test, CancelPendingCreateStream) {
// Initialize the SpdySettingsStorage with 1 max concurrent streams.
SpdySessionPool* spdy_session_pool(http_session->spdy_session_pool());
- SpdySettings settings;
- SettingsFlagsAndId id(SETTINGS_FLAG_PLEASE_PERSIST,
- SETTINGS_MAX_CONCURRENT_STREAMS);
- settings.push_back(SpdySetting(id, 1));
- spdy_session_pool->http_server_properties()->SetSpdySettings(
- test_host_port_pair, settings);
+ spdy_session_pool->http_server_properties()->SetSpdySetting(
+ test_host_port_pair,
+ SETTINGS_MAX_CONCURRENT_STREAMS,
+ SETTINGS_FLAG_PLEASE_PERSIST,
+ 1);
// Create a session.
EXPECT_FALSE(spdy_session_pool->HasSession(pair));
@@ -683,17 +682,16 @@ TEST_F(SpdySessionSpdy2Test, SendSettingsOnNewSession) {
};
// Create the bogus setting that we want to verify is sent out.
- // Note that it will be marked as SETTINGS_FLAG_PERSISTED when sent out. But
+ // Note that it will be marked as SETTINGS_FLAG_PERSISTED when sent out. But
// to set it into the SpdySettingsStorage, we need to mark as
// SETTINGS_FLAG_PLEASE_PERSIST.
SpdySettings settings;
- const uint32 kBogusSettingId = 0xABAB;
+ const SpdySettingsIds kSpdySettingsIds1 = SETTINGS_UPLOAD_BANDWIDTH;
const uint32 kBogusSettingValue = 0xCDCD;
- SettingsFlagsAndId id(SETTINGS_FLAG_PERSISTED, kBogusSettingId);
+ SettingsFlagsAndId id(SETTINGS_FLAG_PERSISTED, kSpdySettingsIds1);
settings.push_back(SpdySetting(id, kBogusSettingValue));
MockConnect connect_data(SYNCHRONOUS, OK);
- scoped_ptr<SpdyFrame> settings_frame(
- ConstructSpdySettings(settings));
+ scoped_ptr<SpdyFrame> settings_frame(ConstructSpdySettings(settings));
MockWrite writes[] = {
CreateMockWrite(*settings_frame),
};
@@ -714,12 +712,13 @@ TEST_F(SpdySessionSpdy2Test, SendSettingsOnNewSession) {
HostPortPair test_host_port_pair(kTestHost, kTestPort);
HostPortProxyPair pair(test_host_port_pair, ProxyServer::Direct());
- SettingsFlagsAndId id1(SETTINGS_FLAG_PLEASE_PERSIST, id.id());
- settings.clear();
- settings.push_back(SpdySetting(id1, kBogusSettingValue));
SpdySessionPool* spdy_session_pool(http_session->spdy_session_pool());
- spdy_session_pool->http_server_properties()->SetSpdySettings(
- test_host_port_pair, settings);
+ spdy_session_pool->http_server_properties()->SetSpdySetting(
+ test_host_port_pair,
+ kSpdySettingsIds1,
+ SETTINGS_FLAG_PLEASE_PERSIST,
+ kBogusSettingValue);
+
EXPECT_FALSE(spdy_session_pool->HasSession(pair));
scoped_refptr<SpdySession> session =
spdy_session_pool->Get(pair, BoundNetLog());
@@ -894,7 +893,7 @@ TEST_F(SpdySessionSpdy2Test, ClearSettingsStorage) {
HostPortPair test_host_port_pair(kTestHost, kTestPort);
SpdySettings test_settings;
SettingsFlagsAndId id(SETTINGS_FLAG_PLEASE_PERSIST,
- SETTINGS_MAX_CONCURRENT_STREAMS);
+ SETTINGS_MAX_CONCURRENT_STREAMS);
const size_t max_concurrent_streams = 2;
test_settings.push_back(SpdySetting(id, max_concurrent_streams));
@@ -916,14 +915,12 @@ TEST_F(SpdySessionSpdy2Test, ClearSettingsStorageOnIPAddressChanged) {
HttpServerProperties* test_http_server_properties =
spdy_session_pool->http_server_properties();
- SettingsFlagsAndId id(SETTINGS_FLAG_PLEASE_PERSIST,
- SETTINGS_MAX_CONCURRENT_STREAMS);
- const size_t max_concurrent_streams = 2;
- SpdySettings test_settings;
- test_settings.push_back(SpdySetting(id, max_concurrent_streams));
-
- test_http_server_properties->SetSpdySettings(test_host_port_pair,
- test_settings);
+ SettingsFlagsAndValue flags_and_value1(SETTINGS_FLAG_PLEASE_PERSIST, 2);
+ test_http_server_properties->SetSpdySetting(
+ test_host_port_pair,
+ SETTINGS_MAX_CONCURRENT_STREAMS,
+ SETTINGS_FLAG_PLEASE_PERSIST,
+ 2);
EXPECT_NE(0u, test_http_server_properties->GetSpdySettings(
test_host_port_pair).size());
spdy_session_pool->OnIPAddressChanged();
diff --git a/net/spdy/spdy_session_spdy3_unittest.cc b/net/spdy/spdy_session_spdy3_unittest.cc
index 3ecf1cc..b764f84 100644
--- a/net/spdy/spdy_session_spdy3_unittest.cc
+++ b/net/spdy/spdy_session_spdy3_unittest.cc
@@ -501,15 +501,15 @@ TEST_F(SpdySessionSpdy3Test, OnSettings) {
session_deps.host_resolver->set_synchronous_mode(true);
SpdySettings new_settings;
- SettingsFlagsAndId id(0, SETTINGS_MAX_CONCURRENT_STREAMS);
+ const SpdySettingsIds kSpdySettingsIds1 = SETTINGS_MAX_CONCURRENT_STREAMS;
+ SettingsFlagsAndId id(SETTINGS_FLAG_NONE, kSpdySettingsIds1);
const size_t max_concurrent_streams = 2;
new_settings.push_back(SpdySetting(id, max_concurrent_streams));
// Set up the socket so we read a SETTINGS frame that raises max concurrent
// streams to 2.
MockConnect connect_data(SYNCHRONOUS, OK);
- scoped_ptr<SpdyFrame> settings_frame(
- ConstructSpdySettings(new_settings));
+ scoped_ptr<SpdyFrame> settings_frame(ConstructSpdySettings(new_settings));
MockRead reads[] = {
CreateMockRead(*settings_frame),
MockRead(SYNCHRONOUS, 0, 0) // EOF
@@ -532,11 +532,11 @@ TEST_F(SpdySessionSpdy3Test, OnSettings) {
// Initialize the SpdySettingsStorage with 1 max concurrent streams.
SpdySessionPool* spdy_session_pool(http_session->spdy_session_pool());
- SpdySettings old_settings;
- SettingsFlagsAndId id1(SETTINGS_FLAG_PLEASE_PERSIST, id.id());
- old_settings.push_back(SpdySetting(id1, 1));
- spdy_session_pool->http_server_properties()->SetSpdySettings(
- test_host_port_pair, old_settings);
+ spdy_session_pool->http_server_properties()->SetSpdySetting(
+ test_host_port_pair,
+ kSpdySettingsIds1,
+ SETTINGS_FLAG_PLEASE_PERSIST,
+ 1);
// Create a session.
EXPECT_FALSE(spdy_session_pool->HasSession(pair));
@@ -615,12 +615,11 @@ TEST_F(SpdySessionSpdy3Test, CancelPendingCreateStream) {
// Initialize the SpdySettingsStorage with 1 max concurrent streams.
SpdySessionPool* spdy_session_pool(http_session->spdy_session_pool());
- SpdySettings settings;
- SettingsFlagsAndId id(SETTINGS_FLAG_PLEASE_PERSIST,
- SETTINGS_MAX_CONCURRENT_STREAMS);
- settings.push_back(SpdySetting(id, 1));
- spdy_session_pool->http_server_properties()->SetSpdySettings(
- test_host_port_pair, settings);
+ spdy_session_pool->http_server_properties()->SetSpdySetting(
+ test_host_port_pair,
+ SETTINGS_MAX_CONCURRENT_STREAMS,
+ SETTINGS_FLAG_PLEASE_PERSIST,
+ 1);
// Create a session.
EXPECT_FALSE(spdy_session_pool->HasSession(pair));
@@ -683,17 +682,16 @@ TEST_F(SpdySessionSpdy3Test, SendSettingsOnNewSession) {
};
// Create the bogus setting that we want to verify is sent out.
- // Note that it will be marked as SETTINGS_FLAG_PERSISTED when sent out. But
+ // Note that it will be marked as SETTINGS_FLAG_PERSISTED when sent out. But
// to set it into the SpdySettingsStorage, we need to mark as
// SETTINGS_FLAG_PLEASE_PERSIST.
SpdySettings settings;
- const uint32 kBogusSettingId = 0xABAB;
+ const SpdySettingsIds kSpdySettingsIds1 = SETTINGS_UPLOAD_BANDWIDTH;
const uint32 kBogusSettingValue = 0xCDCD;
- SettingsFlagsAndId id(SETTINGS_FLAG_PERSISTED, kBogusSettingId);
+ SettingsFlagsAndId id(SETTINGS_FLAG_PERSISTED, kSpdySettingsIds1);
settings.push_back(SpdySetting(id, kBogusSettingValue));
MockConnect connect_data(SYNCHRONOUS, OK);
- scoped_ptr<SpdyFrame> settings_frame(
- ConstructSpdySettings(settings));
+ scoped_ptr<SpdyFrame> settings_frame(ConstructSpdySettings(settings));
MockWrite writes[] = {
CreateMockWrite(*settings_frame),
};
@@ -714,12 +712,13 @@ TEST_F(SpdySessionSpdy3Test, SendSettingsOnNewSession) {
HostPortPair test_host_port_pair(kTestHost, kTestPort);
HostPortProxyPair pair(test_host_port_pair, ProxyServer::Direct());
- SettingsFlagsAndId id1(SETTINGS_FLAG_PLEASE_PERSIST, id.id());
- settings.clear();
- settings.push_back(SpdySetting(id1, kBogusSettingValue));
SpdySessionPool* spdy_session_pool(http_session->spdy_session_pool());
- spdy_session_pool->http_server_properties()->SetSpdySettings(
- test_host_port_pair, settings);
+ spdy_session_pool->http_server_properties()->SetSpdySetting(
+ test_host_port_pair,
+ kSpdySettingsIds1,
+ SETTINGS_FLAG_PLEASE_PERSIST,
+ kBogusSettingValue);
+
EXPECT_FALSE(spdy_session_pool->HasSession(pair));
scoped_refptr<SpdySession> session =
spdy_session_pool->Get(pair, BoundNetLog());
@@ -894,7 +893,7 @@ TEST_F(SpdySessionSpdy3Test, ClearSettingsStorage) {
HostPortPair test_host_port_pair(kTestHost, kTestPort);
SpdySettings test_settings;
SettingsFlagsAndId id(SETTINGS_FLAG_PLEASE_PERSIST,
- SETTINGS_MAX_CONCURRENT_STREAMS);
+ SETTINGS_MAX_CONCURRENT_STREAMS);
const size_t max_concurrent_streams = 2;
test_settings.push_back(SpdySetting(id, max_concurrent_streams));
@@ -916,14 +915,12 @@ TEST_F(SpdySessionSpdy3Test, ClearSettingsStorageOnIPAddressChanged) {
HttpServerProperties* test_http_server_properties =
spdy_session_pool->http_server_properties();
- SettingsFlagsAndId id(SETTINGS_FLAG_PLEASE_PERSIST,
- SETTINGS_MAX_CONCURRENT_STREAMS);
- const size_t max_concurrent_streams = 2;
- SpdySettings test_settings;
- test_settings.push_back(SpdySetting(id, max_concurrent_streams));
-
- test_http_server_properties->SetSpdySettings(test_host_port_pair,
- test_settings);
+ SettingsFlagsAndValue flags_and_value1(SETTINGS_FLAG_PLEASE_PERSIST, 2);
+ test_http_server_properties->SetSpdySetting(
+ test_host_port_pair,
+ SETTINGS_MAX_CONCURRENT_STREAMS,
+ SETTINGS_FLAG_PLEASE_PERSIST,
+ 2);
EXPECT_NE(0u, test_http_server_properties->GetSpdySettings(
test_host_port_pair).size());
spdy_session_pool->OnIPAddressChanged();
@@ -1003,8 +1000,7 @@ TEST_F(SpdySessionSpdy3Test, SendCredentials) {
MockRead(SYNCHRONOUS, ERR_IO_PENDING) // Stall forever.
};
SpdySettings settings;
- scoped_ptr<SpdyFrame> settings_frame(
- ConstructSpdySettings(settings));
+ scoped_ptr<SpdyFrame> settings_frame(ConstructSpdySettings(settings));
MockWrite writes[] = {
CreateMockWrite(*settings_frame),
};
diff --git a/net/spdy/spdy_websocket_stream_spdy2_unittest.cc b/net/spdy/spdy_websocket_stream_spdy2_unittest.cc
index 91c121b..75f694e 100644
--- a/net/spdy/spdy_websocket_stream_spdy2_unittest.cc
+++ b/net/spdy/spdy_websocket_stream_spdy2_unittest.cc
@@ -192,16 +192,13 @@ class SpdyWebSocketStreamSpdy2Test : public testing::Test {
host_port_proxy_pair_.first = host_port_pair_;
host_port_proxy_pair_.second = ProxyServer::Direct();
- const size_t max_concurrent_streams = 1;
- SettingsFlagsAndId id(SETTINGS_FLAG_PLEASE_PERSIST,
- SETTINGS_MAX_CONCURRENT_STREAMS);
- spdy_settings_to_set_.push_back(
- SpdySetting(id, max_concurrent_streams));
-
- SettingsFlagsAndId id1(SETTINGS_FLAG_PERSISTED,
- SETTINGS_MAX_CONCURRENT_STREAMS);
+ spdy_settings_id_to_set_ = SETTINGS_MAX_CONCURRENT_STREAMS;
+ spdy_settings_flags_to_set_ = SETTINGS_FLAG_PLEASE_PERSIST;
+ spdy_settings_value_to_set_ = 1;
+
+ SettingsFlagsAndId id1(SETTINGS_FLAG_PERSISTED, spdy_settings_id_to_set_);
spdy_settings_to_send_.push_back(
- SpdySetting(id1, max_concurrent_streams));
+ SpdySetting(id1, spdy_settings_value_to_set_));
}
virtual void TearDown() {
@@ -259,8 +256,11 @@ class SpdyWebSocketStreamSpdy2Test : public testing::Test {
if (throttling) {
// Set max concurrent streams to 1.
- spdy_session_pool->http_server_properties()->SetSpdySettings(
- host_port_pair_, spdy_settings_to_set_);
+ spdy_session_pool->http_server_properties()->SetSpdySetting(
+ host_port_pair_,
+ spdy_settings_id_to_set_,
+ spdy_settings_flags_to_set_,
+ spdy_settings_value_to_set_);
}
EXPECT_FALSE(spdy_session_pool->HasSession(host_port_proxy_pair_));
@@ -287,7 +287,9 @@ class SpdyWebSocketStreamSpdy2Test : public testing::Test {
websocket_stream_->SendRequest(headers);
}
- SpdySettings spdy_settings_to_set_;
+ SpdySettingsIds spdy_settings_id_to_set_;
+ SpdySettingsFlags spdy_settings_flags_to_set_;
+ uint32 spdy_settings_value_to_set_;
SpdySettings spdy_settings_to_send_;
SpdySessionDependencies session_deps_;
scoped_ptr<OrderedSocketData> data_;
diff --git a/net/spdy/spdy_websocket_stream_spdy3_unittest.cc b/net/spdy/spdy_websocket_stream_spdy3_unittest.cc
index f021b4e..c860f10 100644
--- a/net/spdy/spdy_websocket_stream_spdy3_unittest.cc
+++ b/net/spdy/spdy_websocket_stream_spdy3_unittest.cc
@@ -192,16 +192,13 @@ class SpdyWebSocketStreamSpdy3Test : public testing::Test {
host_port_proxy_pair_.first = host_port_pair_;
host_port_proxy_pair_.second = ProxyServer::Direct();
- const size_t max_concurrent_streams = 1;
- SettingsFlagsAndId id(SETTINGS_FLAG_PLEASE_PERSIST,
- SETTINGS_MAX_CONCURRENT_STREAMS);
- spdy_settings_to_set_.push_back(
- SpdySetting(id, max_concurrent_streams));
-
- SettingsFlagsAndId id1(SETTINGS_FLAG_PERSISTED,
- SETTINGS_MAX_CONCURRENT_STREAMS);
+ spdy_settings_id_to_set_ = SETTINGS_MAX_CONCURRENT_STREAMS;
+ spdy_settings_flags_to_set_ = SETTINGS_FLAG_PLEASE_PERSIST;
+ spdy_settings_value_to_set_ = 1;
+
+ SettingsFlagsAndId id1(SETTINGS_FLAG_PERSISTED, spdy_settings_id_to_set_);
spdy_settings_to_send_.push_back(
- SpdySetting(id1, max_concurrent_streams));
+ SpdySetting(id1, spdy_settings_value_to_set_));
}
virtual void TearDown() {
@@ -259,8 +256,11 @@ class SpdyWebSocketStreamSpdy3Test : public testing::Test {
if (throttling) {
// Set max concurrent streams to 1.
- spdy_session_pool->http_server_properties()->SetSpdySettings(
- host_port_pair_, spdy_settings_to_set_);
+ spdy_session_pool->http_server_properties()->SetSpdySetting(
+ host_port_pair_,
+ spdy_settings_id_to_set_,
+ spdy_settings_flags_to_set_,
+ spdy_settings_value_to_set_);
}
EXPECT_FALSE(spdy_session_pool->HasSession(host_port_proxy_pair_));
@@ -287,7 +287,9 @@ class SpdyWebSocketStreamSpdy3Test : public testing::Test {
websocket_stream_->SendRequest(headers);
}
- SpdySettings spdy_settings_to_set_;
+ SpdySettingsIds spdy_settings_id_to_set_;
+ SpdySettingsFlags spdy_settings_flags_to_set_;
+ uint32 spdy_settings_value_to_set_;
SpdySettings spdy_settings_to_send_;
SpdySessionDependencies session_deps_;
scoped_ptr<OrderedSocketData> data_;