| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 #include "chrome/browser/net/http_server_properties_manager.h" | 4 #include "chrome/browser/net/http_server_properties_manager.h" |
| 5 | 5 |
| 6 #include "base/bind.h" | 6 #include "base/bind.h" |
| 7 #include "base/stl_util.h" | 7 #include "base/stl_util.h" |
| 8 #include "base/string_number_conversions.h" | 8 #include "base/string_number_conversions.h" |
| 9 #include "base/stringprintf.h" | 9 #include "base/stringprintf.h" |
| 10 #include "base/values.h" | 10 #include "base/values.h" |
| (...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 246 | 246 |
| 247 const base::DictionaryValue* servers_dict; | 247 const base::DictionaryValue* servers_dict; |
| 248 if (version == kMissingVersion) { | 248 if (version == kMissingVersion) { |
| 249 // If http_server_properties_dict has no "version" key and no "servers" key, | 249 // If http_server_properties_dict has no "version" key and no "servers" key, |
| 250 // then the properties for a given server are in | 250 // then the properties for a given server are in |
| 251 // http_server_properties_dict[server]. | 251 // http_server_properties_dict[server]. |
| 252 servers_dict = &http_server_properties_dict; | 252 servers_dict = &http_server_properties_dict; |
| 253 } else { | 253 } else { |
| 254 // The "new" format has "version" and "servers" keys. The properties for a | 254 // The "new" format has "version" and "servers" keys. The properties for a |
| 255 // given server is in http_server_properties_dict["servers"][server]. | 255 // given server is in http_server_properties_dict["servers"][server]. |
| 256 base::DictionaryValue* servers_dict_temp = NULL; | 256 const base::DictionaryValue* servers_dict_temp = NULL; |
| 257 if (!http_server_properties_dict.GetDictionaryWithoutPathExpansion( | 257 if (!http_server_properties_dict.GetDictionaryWithoutPathExpansion( |
| 258 "servers", &servers_dict_temp)) { | 258 "servers", &servers_dict_temp)) { |
| 259 DVLOG(1) << "Malformed http_server_properties for servers"; | 259 DVLOG(1) << "Malformed http_server_properties for servers"; |
| 260 return; | 260 return; |
| 261 } | 261 } |
| 262 servers_dict = servers_dict_temp; | 262 servers_dict = servers_dict_temp; |
| 263 } | 263 } |
| 264 | 264 |
| 265 // String is host/port pair of spdy server. | 265 // String is host/port pair of spdy server. |
| 266 scoped_ptr<StringVector> spdy_servers(new StringVector); | 266 scoped_ptr<StringVector> spdy_servers(new StringVector); |
| 267 scoped_ptr<net::SpdySettingsMap> spdy_settings_map(new net::SpdySettingsMap); | 267 scoped_ptr<net::SpdySettingsMap> spdy_settings_map(new net::SpdySettingsMap); |
| 268 scoped_ptr<net::PipelineCapabilityMap> pipeline_capability_map( | 268 scoped_ptr<net::PipelineCapabilityMap> pipeline_capability_map( |
| 269 new net::PipelineCapabilityMap); | 269 new net::PipelineCapabilityMap); |
| 270 scoped_ptr<net::AlternateProtocolMap> alternate_protocol_map( | 270 scoped_ptr<net::AlternateProtocolMap> alternate_protocol_map( |
| 271 new net::AlternateProtocolMap); | 271 new net::AlternateProtocolMap); |
| 272 | 272 |
| 273 for (base::DictionaryValue::key_iterator it = servers_dict->begin_keys(); | 273 for (base::DictionaryValue::key_iterator it = servers_dict->begin_keys(); |
| 274 it != servers_dict->end_keys(); | 274 it != servers_dict->end_keys(); |
| 275 ++it) { | 275 ++it) { |
| 276 // Get server's host/pair. | 276 // Get server's host/pair. |
| 277 const std::string& server_str = *it; | 277 const std::string& server_str = *it; |
| 278 net::HostPortPair server = net::HostPortPair::FromString(server_str); | 278 net::HostPortPair server = net::HostPortPair::FromString(server_str); |
| 279 if (server.host().empty()) { | 279 if (server.host().empty()) { |
| 280 DVLOG(1) << "Malformed http_server_properties for server: " << server_str; | 280 DVLOG(1) << "Malformed http_server_properties for server: " << server_str; |
| 281 detected_corrupted_prefs = true; | 281 detected_corrupted_prefs = true; |
| 282 continue; | 282 continue; |
| 283 } | 283 } |
| 284 | 284 |
| 285 base::DictionaryValue* server_pref_dict = NULL; | 285 const base::DictionaryValue* server_pref_dict = NULL; |
| 286 if (!servers_dict->GetDictionaryWithoutPathExpansion( | 286 if (!servers_dict->GetDictionaryWithoutPathExpansion( |
| 287 server_str, &server_pref_dict)) { | 287 server_str, &server_pref_dict)) { |
| 288 DVLOG(1) << "Malformed http_server_properties server: " << server_str; | 288 DVLOG(1) << "Malformed http_server_properties server: " << server_str; |
| 289 detected_corrupted_prefs = true; | 289 detected_corrupted_prefs = true; |
| 290 continue; | 290 continue; |
| 291 } | 291 } |
| 292 | 292 |
| 293 // Get if server supports Spdy. | 293 // Get if server supports Spdy. |
| 294 bool supports_spdy = false; | 294 bool supports_spdy = false; |
| 295 if ((server_pref_dict->GetBoolean( | 295 if ((server_pref_dict->GetBoolean( |
| 296 "supports_spdy", &supports_spdy)) && supports_spdy) { | 296 "supports_spdy", &supports_spdy)) && supports_spdy) { |
| 297 spdy_servers->push_back(server_str); | 297 spdy_servers->push_back(server_str); |
| 298 } | 298 } |
| 299 | 299 |
| 300 // Get SpdySettings. | 300 // Get SpdySettings. |
| 301 DCHECK(!ContainsKey(*spdy_settings_map, server)); | 301 DCHECK(!ContainsKey(*spdy_settings_map, server)); |
| 302 if (version == kVersionNumber) { | 302 if (version == kVersionNumber) { |
| 303 base::DictionaryValue* spdy_settings_dict = NULL; | 303 const base::DictionaryValue* spdy_settings_dict = NULL; |
| 304 if (server_pref_dict->GetDictionaryWithoutPathExpansion( | 304 if (server_pref_dict->GetDictionaryWithoutPathExpansion( |
| 305 "settings", &spdy_settings_dict)) { | 305 "settings", &spdy_settings_dict)) { |
| 306 net::SettingsMap settings_map; | 306 net::SettingsMap settings_map; |
| 307 for (base::DictionaryValue::key_iterator dict_it = | 307 for (base::DictionaryValue::key_iterator dict_it = |
| 308 spdy_settings_dict->begin_keys(); | 308 spdy_settings_dict->begin_keys(); |
| 309 dict_it != spdy_settings_dict->end_keys(); ++dict_it) { | 309 dict_it != spdy_settings_dict->end_keys(); ++dict_it) { |
| 310 const std::string& id_str = *dict_it; | 310 const std::string& id_str = *dict_it; |
| 311 int id = 0; | 311 int id = 0; |
| 312 if (!base::StringToInt(id_str, &id)) { | 312 if (!base::StringToInt(id_str, &id)) { |
| 313 DVLOG(1) << "Malformed id in SpdySettings for server: " << | 313 DVLOG(1) << "Malformed id in SpdySettings for server: " << |
| (...skipping 20 matching lines...) Expand all Loading... |
| 334 int pipeline_capability = net::PIPELINE_UNKNOWN; | 334 int pipeline_capability = net::PIPELINE_UNKNOWN; |
| 335 if ((server_pref_dict->GetInteger( | 335 if ((server_pref_dict->GetInteger( |
| 336 "pipeline_capability", &pipeline_capability)) && | 336 "pipeline_capability", &pipeline_capability)) && |
| 337 pipeline_capability != net::PIPELINE_UNKNOWN) { | 337 pipeline_capability != net::PIPELINE_UNKNOWN) { |
| 338 (*pipeline_capability_map)[server] = | 338 (*pipeline_capability_map)[server] = |
| 339 static_cast<net::HttpPipelinedHostCapability>(pipeline_capability); | 339 static_cast<net::HttpPipelinedHostCapability>(pipeline_capability); |
| 340 } | 340 } |
| 341 | 341 |
| 342 // Get alternate_protocol server. | 342 // Get alternate_protocol server. |
| 343 DCHECK(!ContainsKey(*alternate_protocol_map, server)); | 343 DCHECK(!ContainsKey(*alternate_protocol_map, server)); |
| 344 base::DictionaryValue* port_alternate_protocol_dict = NULL; | 344 const base::DictionaryValue* port_alternate_protocol_dict = NULL; |
| 345 if (!server_pref_dict->GetDictionaryWithoutPathExpansion( | 345 if (!server_pref_dict->GetDictionaryWithoutPathExpansion( |
| 346 "alternate_protocol", &port_alternate_protocol_dict)) { | 346 "alternate_protocol", &port_alternate_protocol_dict)) { |
| 347 continue; | 347 continue; |
| 348 } | 348 } |
| 349 | 349 |
| 350 do { | 350 do { |
| 351 int port = 0; | 351 int port = 0; |
| 352 if (!port_alternate_protocol_dict->GetIntegerWithoutPathExpansion( | 352 if (!port_alternate_protocol_dict->GetIntegerWithoutPathExpansion( |
| 353 "port", &port) || (port > (1 << 16))) { | 353 "port", &port) || (port > (1 << 16))) { |
| 354 DVLOG(1) << "Malformed Alternate-Protocol server: " << server_str; | 354 DVLOG(1) << "Malformed Alternate-Protocol server: " << server_str; |
| (...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 647 std::string* pref_name = content::Details<std::string>(details).ptr(); | 647 std::string* pref_name = content::Details<std::string>(details).ptr(); |
| 648 if (*pref_name == prefs::kHttpServerProperties) { | 648 if (*pref_name == prefs::kHttpServerProperties) { |
| 649 if (!setting_prefs_) | 649 if (!setting_prefs_) |
| 650 ScheduleUpdateCacheOnUI(); | 650 ScheduleUpdateCacheOnUI(); |
| 651 } else { | 651 } else { |
| 652 NOTREACHED(); | 652 NOTREACHED(); |
| 653 } | 653 } |
| 654 } | 654 } |
| 655 | 655 |
| 656 } // namespace chrome_browser_net | 656 } // namespace chrome_browser_net |
| OLD | NEW |