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