Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(384)

Side by Side Diff: net/http/http_server_properties_manager.cc

Issue 892203004: Make HttpServerProperties::GetSupportsQuic not host-specific. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 4
5 #include "net/http/http_server_properties_manager.h" 5 #include "net/http/http_server_properties_manager.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/metrics/histogram.h" 8 #include "base/metrics/histogram.h"
9 #include "base/prefs/pref_service.h" 9 #include "base/prefs/pref_service.h"
10 #include "base/single_thread_task_runner.h" 10 #include "base/single_thread_task_runner.h"
(...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after
275 http_server_properties_impl_->ClearAllSpdySettings(); 275 http_server_properties_impl_->ClearAllSpdySettings();
276 ScheduleUpdatePrefsOnNetworkThread(); 276 ScheduleUpdatePrefsOnNetworkThread();
277 } 277 }
278 278
279 const SpdySettingsMap& HttpServerPropertiesManager::spdy_settings_map() 279 const SpdySettingsMap& HttpServerPropertiesManager::spdy_settings_map()
280 const { 280 const {
281 DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); 281 DCHECK(network_task_runner_->RunsTasksOnCurrentThread());
282 return http_server_properties_impl_->spdy_settings_map(); 282 return http_server_properties_impl_->spdy_settings_map();
283 } 283 }
284 284
285 SupportsQuic HttpServerPropertiesManager::GetSupportsQuic( 285 bool HttpServerPropertiesManager::GetSupportsQuic(
286 const HostPortPair& host_port_pair) const { 286 IPAddressNumber* last_address) const {
287 DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); 287 DCHECK(network_task_runner_->RunsTasksOnCurrentThread());
288 return http_server_properties_impl_->GetSupportsQuic(host_port_pair); 288 return http_server_properties_impl_->GetSupportsQuic(last_address);
289 } 289 }
290 290
291 void HttpServerPropertiesManager::SetSupportsQuic( 291 void HttpServerPropertiesManager::SetSupportsQuic(
292 const HostPortPair& host_port_pair,
293 bool used_quic, 292 bool used_quic,
294 const std::string& address) { 293 const IPAddressNumber& address) {
295 DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); 294 DCHECK(network_task_runner_->RunsTasksOnCurrentThread());
296 http_server_properties_impl_->SetSupportsQuic( 295 http_server_properties_impl_->SetSupportsQuic(used_quic, address);
297 host_port_pair, used_quic, address);
298 ScheduleUpdatePrefsOnNetworkThread(); 296 ScheduleUpdatePrefsOnNetworkThread();
299 } 297 }
300 298
301 const SupportsQuicMap& HttpServerPropertiesManager::supports_quic_map()
302 const {
303 DCHECK(network_task_runner_->RunsTasksOnCurrentThread());
304 return http_server_properties_impl_->supports_quic_map();
305 }
306
307 void HttpServerPropertiesManager::SetServerNetworkStats( 299 void HttpServerPropertiesManager::SetServerNetworkStats(
308 const HostPortPair& host_port_pair, 300 const HostPortPair& host_port_pair,
309 ServerNetworkStats stats) { 301 ServerNetworkStats stats) {
310 DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); 302 DCHECK(network_task_runner_->RunsTasksOnCurrentThread());
311 http_server_properties_impl_->SetServerNetworkStats(host_port_pair, stats); 303 http_server_properties_impl_->SetServerNetworkStats(host_port_pair, stats);
312 ScheduleUpdatePrefsOnNetworkThread(); 304 ScheduleUpdatePrefsOnNetworkThread();
313 } 305 }
314 306
315 const ServerNetworkStats* HttpServerPropertiesManager::GetServerNetworkStats( 307 const ServerNetworkStats* HttpServerPropertiesManager::GetServerNetworkStats(
316 const HostPortPair& host_port_pair) { 308 const HostPortPair& host_port_pair) {
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
365 357
366 // The properties for a given server is in 358 // The properties for a given server is in
367 // http_server_properties_dict["servers"][server]. 359 // http_server_properties_dict["servers"][server].
368 const base::DictionaryValue* servers_dict = NULL; 360 const base::DictionaryValue* servers_dict = NULL;
369 if (!http_server_properties_dict.GetDictionaryWithoutPathExpansion( 361 if (!http_server_properties_dict.GetDictionaryWithoutPathExpansion(
370 kServersKey, &servers_dict)) { 362 kServersKey, &servers_dict)) {
371 DVLOG(1) << "Malformed http_server_properties for servers."; 363 DVLOG(1) << "Malformed http_server_properties for servers.";
372 return; 364 return;
373 } 365 }
374 366
367 IPAddressNumber* addr = new IPAddressNumber;
368 ReadSupportsQuic(http_server_properties_dict, addr);
369
375 // String is host/port pair of spdy server. 370 // String is host/port pair of spdy server.
376 scoped_ptr<StringVector> spdy_servers(new StringVector); 371 scoped_ptr<StringVector> spdy_servers(new StringVector);
377 scoped_ptr<SpdySettingsMap> spdy_settings_map( 372 scoped_ptr<SpdySettingsMap> spdy_settings_map(
378 new SpdySettingsMap(kMaxSpdySettingsHostsToPersist)); 373 new SpdySettingsMap(kMaxSpdySettingsHostsToPersist));
379 scoped_ptr<AlternateProtocolMap> alternate_protocol_map( 374 scoped_ptr<AlternateProtocolMap> alternate_protocol_map(
380 new AlternateProtocolMap(kMaxAlternateProtocolHostsToPersist)); 375 new AlternateProtocolMap(kMaxAlternateProtocolHostsToPersist));
381 scoped_ptr<SupportsQuicMap> supports_quic_map(new SupportsQuicMap());
382 scoped_ptr<ServerNetworkStatsMap> server_network_stats_map( 376 scoped_ptr<ServerNetworkStatsMap> server_network_stats_map(
383 new ServerNetworkStatsMap(kMaxServerNetworkStatsHostsToPersist)); 377 new ServerNetworkStatsMap(kMaxServerNetworkStatsHostsToPersist));
384 378
385 for (base::DictionaryValue::Iterator it(*servers_dict); !it.IsAtEnd(); 379 for (base::DictionaryValue::Iterator it(*servers_dict); !it.IsAtEnd();
386 it.Advance()) { 380 it.Advance()) {
387 // Get server's host/pair. 381 // Get server's host/pair.
388 const std::string& server_str = it.key(); 382 const std::string& server_str = it.key();
389 HostPortPair server = HostPortPair::FromString(server_str); 383 HostPortPair server = HostPortPair::FromString(server_str);
390 if (server.host().empty()) { 384 if (server.host().empty()) {
391 DVLOG(1) << "Malformed http_server_properties for server: " << server_str; 385 DVLOG(1) << "Malformed http_server_properties for server: " << server_str;
(...skipping 11 matching lines...) Expand all
403 // Get if server supports Spdy. 397 // Get if server supports Spdy.
404 bool supports_spdy = false; 398 bool supports_spdy = false;
405 if ((server_pref_dict->GetBoolean(kSupportsSpdyKey, &supports_spdy)) && 399 if ((server_pref_dict->GetBoolean(kSupportsSpdyKey, &supports_spdy)) &&
406 supports_spdy) { 400 supports_spdy) {
407 spdy_servers->push_back(server_str); 401 spdy_servers->push_back(server_str);
408 } 402 }
409 403
410 AddToSpdySettingsMap(server, *server_pref_dict, spdy_settings_map.get()); 404 AddToSpdySettingsMap(server, *server_pref_dict, spdy_settings_map.get());
411 if (!AddToAlternateProtocolMap(server, *server_pref_dict, 405 if (!AddToAlternateProtocolMap(server, *server_pref_dict,
412 alternate_protocol_map.get()) || 406 alternate_protocol_map.get()) ||
413 !AddToSupportsQuicMap(server, *server_pref_dict,
414 supports_quic_map.get()) ||
415 !AddToNetworkStatsMap(server, *server_pref_dict, 407 !AddToNetworkStatsMap(server, *server_pref_dict,
416 server_network_stats_map.get())) { 408 server_network_stats_map.get())) {
417 detected_corrupted_prefs = true; 409 detected_corrupted_prefs = true;
418 } 410 }
419 } 411 }
420 412
421 network_task_runner_->PostTask( 413 network_task_runner_->PostTask(
422 FROM_HERE, 414 FROM_HERE,
423 base::Bind( 415 base::Bind(
424 &HttpServerPropertiesManager::UpdateCacheFromPrefsOnNetworkThread, 416 &HttpServerPropertiesManager::UpdateCacheFromPrefsOnNetworkThread,
425 base::Unretained(this), base::Owned(spdy_servers.release()), 417 base::Unretained(this), base::Owned(spdy_servers.release()),
426 base::Owned(spdy_settings_map.release()), 418 base::Owned(spdy_settings_map.release()),
427 base::Owned(alternate_protocol_map.release()), 419 base::Owned(alternate_protocol_map.release()), base::Owned(addr),
428 base::Owned(supports_quic_map.release()),
429 base::Owned(server_network_stats_map.release()), 420 base::Owned(server_network_stats_map.release()),
430 detected_corrupted_prefs)); 421 detected_corrupted_prefs));
431 } 422 }
432 423
433 void HttpServerPropertiesManager::AddToSpdySettingsMap( 424 void HttpServerPropertiesManager::AddToSpdySettingsMap(
434 const HostPortPair& server, 425 const HostPortPair& server,
435 const base::DictionaryValue& server_pref_dict, 426 const base::DictionaryValue& server_pref_dict,
436 SpdySettingsMap* spdy_settings_map) { 427 SpdySettingsMap* spdy_settings_map) {
437 // Get SpdySettings. 428 // Get SpdySettings.
438 DCHECK(spdy_settings_map->Peek(server) == spdy_settings_map->end()); 429 DCHECK(spdy_settings_map->Peek(server) == spdy_settings_map->end());
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
501 DVLOG(1) << "Malformed Alternate-Protocol server: " << server.ToString(); 492 DVLOG(1) << "Malformed Alternate-Protocol server: " << server.ToString();
502 return false; 493 return false;
503 } 494 }
504 495
505 AlternateProtocolInfo port_alternate_protocol(static_cast<uint16>(port), 496 AlternateProtocolInfo port_alternate_protocol(static_cast<uint16>(port),
506 protocol, probability); 497 protocol, probability);
507 alternate_protocol_map->Put(server, port_alternate_protocol); 498 alternate_protocol_map->Put(server, port_alternate_protocol);
508 return true; 499 return true;
509 } 500 }
510 501
511 bool HttpServerPropertiesManager::AddToSupportsQuicMap( 502 bool HttpServerPropertiesManager::ReadSupportsQuic(
512 const HostPortPair& server, 503 const base::DictionaryValue& http_server_properties_dict,
513 const base::DictionaryValue& server_pref_dict, 504 IPAddressNumber* last_quic_address) {
514 SupportsQuicMap* supports_quic_map) {
515 DCHECK(supports_quic_map->find(server) == supports_quic_map->end());
516 const base::DictionaryValue* supports_quic_dict = NULL; 505 const base::DictionaryValue* supports_quic_dict = NULL;
517 if (!server_pref_dict.GetDictionaryWithoutPathExpansion( 506 if (!http_server_properties_dict.GetDictionaryWithoutPathExpansion(
518 kSupportsQuicKey, &supports_quic_dict)) { 507 kSupportsQuicKey, &supports_quic_dict)) {
519 return true; 508 return true;
520 } 509 }
521 bool used_quic = 0; 510 bool used_quic = false;
522 if (!supports_quic_dict->GetBooleanWithoutPathExpansion(kUsedQuicKey, 511 if (!supports_quic_dict->GetBooleanWithoutPathExpansion(kUsedQuicKey,
523 &used_quic)) { 512 &used_quic)) {
524 DVLOG(1) << "Malformed SupportsQuic server: " << server.ToString(); 513 DVLOG(1) << "Malformed SupportsQuic";
525 return false; 514 return false;
526 } 515 }
516 if (!used_quic)
517 return false;
518
527 std::string address; 519 std::string address;
528 if (!supports_quic_dict->GetStringWithoutPathExpansion(kAddressKey, 520 if (!supports_quic_dict->GetStringWithoutPathExpansion(kAddressKey,
529 &address)) { 521 &address) ||
530 DVLOG(1) << "Malformed SupportsQuic server: " << server.ToString(); 522 !ParseIPLiteralToNumber(address, last_quic_address)) {
523 DVLOG(1) << "Malformed SupportsQuic";
531 return false; 524 return false;
532 } 525 }
533 SupportsQuic supports_quic(used_quic, address);
534 supports_quic_map->insert(std::make_pair(server, supports_quic));
535 return true; 526 return true;
536 } 527 }
537 528
538 bool HttpServerPropertiesManager::AddToNetworkStatsMap( 529 bool HttpServerPropertiesManager::AddToNetworkStatsMap(
539 const HostPortPair& server, 530 const HostPortPair& server,
540 const base::DictionaryValue& server_pref_dict, 531 const base::DictionaryValue& server_pref_dict,
541 ServerNetworkStatsMap* network_stats_map) { 532 ServerNetworkStatsMap* network_stats_map) {
542 DCHECK(network_stats_map->Peek(server) == network_stats_map->end()); 533 DCHECK(network_stats_map->Peek(server) == network_stats_map->end());
543 const base::DictionaryValue* server_network_stats_dict = NULL; 534 const base::DictionaryValue* server_network_stats_dict = NULL;
544 if (!server_pref_dict.GetDictionaryWithoutPathExpansion( 535 if (!server_pref_dict.GetDictionaryWithoutPathExpansion(
(...skipping 12 matching lines...) Expand all
557 // TODO(rtenneti): When QUIC starts using bandwidth_estimate, then persist 548 // TODO(rtenneti): When QUIC starts using bandwidth_estimate, then persist
558 // bandwidth_estimate. 549 // bandwidth_estimate.
559 network_stats_map->Put(server, server_network_stats); 550 network_stats_map->Put(server, server_network_stats);
560 return true; 551 return true;
561 } 552 }
562 553
563 void HttpServerPropertiesManager::UpdateCacheFromPrefsOnNetworkThread( 554 void HttpServerPropertiesManager::UpdateCacheFromPrefsOnNetworkThread(
564 StringVector* spdy_servers, 555 StringVector* spdy_servers,
565 SpdySettingsMap* spdy_settings_map, 556 SpdySettingsMap* spdy_settings_map,
566 AlternateProtocolMap* alternate_protocol_map, 557 AlternateProtocolMap* alternate_protocol_map,
567 SupportsQuicMap* supports_quic_map, 558 IPAddressNumber* last_quic_address,
568 ServerNetworkStatsMap* server_network_stats_map, 559 ServerNetworkStatsMap* server_network_stats_map,
569 bool detected_corrupted_prefs) { 560 bool detected_corrupted_prefs) {
570 // Preferences have the master data because admins might have pushed new 561 // Preferences have the master data because admins might have pushed new
571 // preferences. Update the cached data with new data from preferences. 562 // preferences. Update the cached data with new data from preferences.
572 DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); 563 DCHECK(network_task_runner_->RunsTasksOnCurrentThread());
573 564
574 UMA_HISTOGRAM_COUNTS("Net.CountOfSpdyServers", spdy_servers->size()); 565 UMA_HISTOGRAM_COUNTS("Net.CountOfSpdyServers", spdy_servers->size());
575 http_server_properties_impl_->InitializeSpdyServers(spdy_servers, true); 566 http_server_properties_impl_->InitializeSpdyServers(spdy_servers, true);
576 567
577 // Update the cached data and use the new spdy_settings from preferences. 568 // Update the cached data and use the new spdy_settings from preferences.
578 UMA_HISTOGRAM_COUNTS("Net.CountOfSpdySettings", spdy_settings_map->size()); 569 UMA_HISTOGRAM_COUNTS("Net.CountOfSpdySettings", spdy_settings_map->size());
579 http_server_properties_impl_->InitializeSpdySettingsServers( 570 http_server_properties_impl_->InitializeSpdySettingsServers(
580 spdy_settings_map); 571 spdy_settings_map);
581 572
582 // Update the cached data and use the new Alternate-Protocol server list from 573 // Update the cached data and use the new Alternate-Protocol server list from
583 // preferences. 574 // preferences.
584 UMA_HISTOGRAM_COUNTS("Net.CountOfAlternateProtocolServers", 575 UMA_HISTOGRAM_COUNTS("Net.CountOfAlternateProtocolServers",
585 alternate_protocol_map->size()); 576 alternate_protocol_map->size());
586 http_server_properties_impl_->InitializeAlternateProtocolServers( 577 http_server_properties_impl_->InitializeAlternateProtocolServers(
587 alternate_protocol_map); 578 alternate_protocol_map);
588 579
589 http_server_properties_impl_->InitializeSupportsQuic(supports_quic_map); 580 http_server_properties_impl_->InitializeSupportsQuic(last_quic_address);
590 581
591 http_server_properties_impl_->InitializeServerNetworkStats( 582 http_server_properties_impl_->InitializeServerNetworkStats(
592 server_network_stats_map); 583 server_network_stats_map);
593 584
594 // Update the prefs with what we have read (delete all corrupted prefs). 585 // Update the prefs with what we have read (delete all corrupted prefs).
595 if (detected_corrupted_prefs) 586 if (detected_corrupted_prefs)
596 ScheduleUpdatePrefsOnNetworkThread(); 587 ScheduleUpdatePrefsOnNetworkThread();
597 } 588 }
598 589
599 // 590 //
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
656 http_server_properties_impl_->GetCanonicalSuffix(server.host()); 647 http_server_properties_impl_->GetCanonicalSuffix(server.host());
657 if (!canonical_suffix.empty()) { 648 if (!canonical_suffix.empty()) {
658 if (persisted_map.find(canonical_suffix) != persisted_map.end()) 649 if (persisted_map.find(canonical_suffix) != persisted_map.end())
659 continue; 650 continue;
660 persisted_map[canonical_suffix] = true; 651 persisted_map[canonical_suffix] = true;
661 } 652 }
662 alternate_protocol_map->Put(server, it->second); 653 alternate_protocol_map->Put(server, it->second);
663 ++count; 654 ++count;
664 } 655 }
665 656
666 SupportsQuicMap* supports_quic_map = new SupportsQuicMap();
667 const SupportsQuicMap& main_supports_quic_map =
668 http_server_properties_impl_->supports_quic_map();
669 for (SupportsQuicMap::const_iterator it = main_supports_quic_map.begin();
670 it != main_supports_quic_map.end(); ++it) {
671 supports_quic_map->insert(std::make_pair(it->first, it->second));
672 }
673
674 ServerNetworkStatsMap* server_network_stats_map = 657 ServerNetworkStatsMap* server_network_stats_map =
675 new ServerNetworkStatsMap(kMaxServerNetworkStatsHostsToPersist); 658 new ServerNetworkStatsMap(kMaxServerNetworkStatsHostsToPersist);
676 const ServerNetworkStatsMap& main_server_network_stats_map = 659 const ServerNetworkStatsMap& main_server_network_stats_map =
677 http_server_properties_impl_->server_network_stats_map(); 660 http_server_properties_impl_->server_network_stats_map();
678 for (ServerNetworkStatsMap::const_iterator it = 661 for (ServerNetworkStatsMap::const_iterator it =
679 main_server_network_stats_map.begin(); 662 main_server_network_stats_map.begin();
680 it != main_server_network_stats_map.end(); ++it) { 663 it != main_server_network_stats_map.end(); ++it) {
681 server_network_stats_map->Put(it->first, it->second); 664 server_network_stats_map->Put(it->first, it->second);
682 } 665 }
683 666
667 IPAddressNumber* last_quic_addr = new IPAddressNumber;
668 http_server_properties_impl_->GetSupportsQuic(last_quic_addr);
684 // Update the preferences on the pref thread. 669 // Update the preferences on the pref thread.
685 pref_task_runner_->PostTask( 670 pref_task_runner_->PostTask(
686 FROM_HERE, 671 FROM_HERE,
687 base::Bind( 672 base::Bind(
688 &HttpServerPropertiesManager::UpdatePrefsOnPrefThread, pref_weak_ptr_, 673 &HttpServerPropertiesManager::UpdatePrefsOnPrefThread, pref_weak_ptr_,
689 base::Owned(spdy_server_list), base::Owned(spdy_settings_map), 674 base::Owned(spdy_server_list), base::Owned(spdy_settings_map),
690 base::Owned(alternate_protocol_map), base::Owned(supports_quic_map), 675 base::Owned(alternate_protocol_map), base::Owned(last_quic_addr),
691 base::Owned(server_network_stats_map), completion)); 676 base::Owned(server_network_stats_map), completion));
692 } 677 }
693 678
694 // A local or temporary data structure to hold |supports_spdy|, SpdySettings, 679 // A local or temporary data structure to hold |supports_spdy|, SpdySettings,
695 // AlternateProtocolInfo and SupportsQuic preferences for a server. This is used 680 // AlternateProtocolInfo and SupportsQuic preferences for a server. This is used
696 // only in UpdatePrefsOnPrefThread. 681 // only in UpdatePrefsOnPrefThread.
697 struct ServerPref { 682 struct ServerPref {
698 ServerPref() 683 ServerPref()
699 : supports_spdy(false), 684 : supports_spdy(false),
700 settings_map(NULL), 685 settings_map(NULL),
(...skipping 14 matching lines...) Expand all
715 const SettingsMap* settings_map; 700 const SettingsMap* settings_map;
716 const AlternateProtocolInfo* alternate_protocol; 701 const AlternateProtocolInfo* alternate_protocol;
717 const SupportsQuic* supports_quic; 702 const SupportsQuic* supports_quic;
718 const ServerNetworkStats* server_network_stats; 703 const ServerNetworkStats* server_network_stats;
719 }; 704 };
720 705
721 void HttpServerPropertiesManager::UpdatePrefsOnPrefThread( 706 void HttpServerPropertiesManager::UpdatePrefsOnPrefThread(
722 base::ListValue* spdy_server_list, 707 base::ListValue* spdy_server_list,
723 SpdySettingsMap* spdy_settings_map, 708 SpdySettingsMap* spdy_settings_map,
724 AlternateProtocolMap* alternate_protocol_map, 709 AlternateProtocolMap* alternate_protocol_map,
725 SupportsQuicMap* supports_quic_map, 710 IPAddressNumber* last_quic_address,
726 ServerNetworkStatsMap* server_network_stats_map, 711 ServerNetworkStatsMap* server_network_stats_map,
727 const base::Closure& completion) { 712 const base::Closure& completion) {
728 typedef std::map<HostPortPair, ServerPref> ServerPrefMap; 713 typedef std::map<HostPortPair, ServerPref> ServerPrefMap;
729 ServerPrefMap server_pref_map; 714 ServerPrefMap server_pref_map;
730 715
731 DCHECK(pref_task_runner_->RunsTasksOnCurrentThread()); 716 DCHECK(pref_task_runner_->RunsTasksOnCurrentThread());
732 717
733 // Add servers that support spdy to server_pref_map. 718 // Add servers that support spdy to server_pref_map.
734 std::string s; 719 std::string s;
735 for (base::ListValue::const_iterator list_it = spdy_server_list->begin(); 720 for (base::ListValue::const_iterator list_it = spdy_server_list->begin();
(...skipping 18 matching lines...) Expand all
754 map_it != alternate_protocol_map->end(); ++map_it) { 739 map_it != alternate_protocol_map->end(); ++map_it) {
755 const HostPortPair& server = map_it->first; 740 const HostPortPair& server = map_it->first;
756 const AlternateProtocolInfo& port_alternate_protocol = map_it->second; 741 const AlternateProtocolInfo& port_alternate_protocol = map_it->second;
757 if (!IsAlternateProtocolValid(port_alternate_protocol.protocol)) { 742 if (!IsAlternateProtocolValid(port_alternate_protocol.protocol)) {
758 continue; 743 continue;
759 } 744 }
760 server_pref_map[server].alternate_protocol = &map_it->second; 745 server_pref_map[server].alternate_protocol = &map_it->second;
761 } 746 }
762 747
763 // Add SupportsQuic servers to server_pref_map. 748 // Add SupportsQuic servers to server_pref_map.
749 /*
764 for (SupportsQuicMap::const_iterator map_it = supports_quic_map->begin(); 750 for (SupportsQuicMap::const_iterator map_it = supports_quic_map->begin();
765 map_it != supports_quic_map->end(); ++map_it) { 751 map_it != supports_quic_map->end(); ++map_it) {
766 const HostPortPair& server = map_it->first; 752 const HostPortPair& server = map_it->first;
767 server_pref_map[server].supports_quic = &map_it->second; 753 server_pref_map[server].supports_quic = &map_it->second;
768 } 754 }
755 */
ramant (doing other things) 2015/02/03 18:09:37 nit: could lines 747-755 be deleted.
Ryan Hamilton 2015/02/03 22:50:45 Done.
769 756
770 // Add ServerNetworkStats servers to server_pref_map. 757 // Add ServerNetworkStats servers to server_pref_map.
771 for (ServerNetworkStatsMap::const_iterator map_it = 758 for (ServerNetworkStatsMap::const_iterator map_it =
772 server_network_stats_map->begin(); 759 server_network_stats_map->begin();
773 map_it != server_network_stats_map->end(); ++map_it) { 760 map_it != server_network_stats_map->end(); ++map_it) {
774 const HostPortPair& server = map_it->first; 761 const HostPortPair& server = map_it->first;
775 server_pref_map[server].server_network_stats = &map_it->second; 762 server_pref_map[server].server_network_stats = &map_it->second;
776 } 763 }
777 764
778 // Persist properties to the |path_|. 765 // Persist properties to the |path_|.
779 base::DictionaryValue http_server_properties_dict; 766 base::DictionaryValue http_server_properties_dict;
780 base::DictionaryValue* servers_dict = new base::DictionaryValue; 767 base::DictionaryValue* servers_dict = new base::DictionaryValue;
781 for (ServerPrefMap::const_iterator map_it = server_pref_map.begin(); 768 for (ServerPrefMap::const_iterator map_it = server_pref_map.begin();
782 map_it != server_pref_map.end(); 769 map_it != server_pref_map.end();
783 ++map_it) { 770 ++map_it) {
784 const HostPortPair& server = map_it->first; 771 const HostPortPair& server = map_it->first;
785 const ServerPref& server_pref = map_it->second; 772 const ServerPref& server_pref = map_it->second;
786 773
787 base::DictionaryValue* server_pref_dict = new base::DictionaryValue; 774 base::DictionaryValue* server_pref_dict = new base::DictionaryValue;
788 775
789 // Save supports_spdy. 776 // Save supports_spdy.
790 if (server_pref.supports_spdy) 777 if (server_pref.supports_spdy)
791 server_pref_dict->SetBoolean(kSupportsSpdyKey, server_pref.supports_spdy); 778 server_pref_dict->SetBoolean(kSupportsSpdyKey, server_pref.supports_spdy);
792 SaveSpdySettingsToServerPrefs(server_pref.settings_map, server_pref_dict); 779 SaveSpdySettingsToServerPrefs(server_pref.settings_map, server_pref_dict);
793 SaveAlternateProtocolToServerPrefs(server_pref.alternate_protocol, 780 SaveAlternateProtocolToServerPrefs(server_pref.alternate_protocol,
794 server_pref_dict); 781 server_pref_dict);
795 SaveSupportsQuicToServerPrefs(server_pref.supports_quic, server_pref_dict);
796 SaveNetworkStatsToServerPrefs(server_pref.server_network_stats, 782 SaveNetworkStatsToServerPrefs(server_pref.server_network_stats,
797 server_pref_dict); 783 server_pref_dict);
798 784
799 servers_dict->SetWithoutPathExpansion(server.ToString(), server_pref_dict); 785 servers_dict->SetWithoutPathExpansion(server.ToString(), server_pref_dict);
800 } 786 }
801 787
802 http_server_properties_dict.SetWithoutPathExpansion(kServersKey, 788 http_server_properties_dict.SetWithoutPathExpansion(kServersKey,
803 servers_dict); 789 servers_dict);
804 SetVersion(&http_server_properties_dict, kVersionNumber); 790 SetVersion(&http_server_properties_dict, kVersionNumber);
791
792 SaveSupportsQuicToPrefs(last_quic_address, &http_server_properties_dict);
793
805 setting_prefs_ = true; 794 setting_prefs_ = true;
806 pref_service_->Set(path_, http_server_properties_dict); 795 pref_service_->Set(path_, http_server_properties_dict);
807 setting_prefs_ = false; 796 setting_prefs_ = false;
808 797
809 // Note that |completion| will be fired after we have written everything to 798 // Note that |completion| will be fired after we have written everything to
810 // the Preferences, but likely before these changes are serialized to disk. 799 // the Preferences, but likely before these changes are serialized to disk.
811 // This is not a problem though, as JSONPrefStore guarantees that this will 800 // This is not a problem though, as JSONPrefStore guarantees that this will
812 // happen, pretty soon, and even in the case we shut down immediately. 801 // happen, pretty soon, and even in the case we shut down immediately.
813 if (!completion.is_null()) 802 if (!completion.is_null())
814 completion.Run(); 803 completion.Run();
(...skipping 28 matching lines...) Expand all
843 port_alternate_protocol->port); 832 port_alternate_protocol->port);
844 const char* protocol_str = 833 const char* protocol_str =
845 AlternateProtocolToString(port_alternate_protocol->protocol); 834 AlternateProtocolToString(port_alternate_protocol->protocol);
846 port_alternate_protocol_dict->SetString(kProtocolKey, protocol_str); 835 port_alternate_protocol_dict->SetString(kProtocolKey, protocol_str);
847 port_alternate_protocol_dict->SetDouble(kProbabilityKey, 836 port_alternate_protocol_dict->SetDouble(kProbabilityKey,
848 port_alternate_protocol->probability); 837 port_alternate_protocol->probability);
849 server_pref_dict->SetWithoutPathExpansion(kAlternateProtocolKey, 838 server_pref_dict->SetWithoutPathExpansion(kAlternateProtocolKey,
850 port_alternate_protocol_dict); 839 port_alternate_protocol_dict);
851 } 840 }
852 841
853 void HttpServerPropertiesManager::SaveSupportsQuicToServerPrefs( 842 void HttpServerPropertiesManager::SaveSupportsQuicToPrefs(
854 const SupportsQuic* supports_quic, 843 const IPAddressNumber* last_quic_address,
855 base::DictionaryValue* server_pref_dict) { 844 base::DictionaryValue* http_server_properties_dict) {
856 // Save supports_quic. 845 if (!last_quic_address || last_quic_address->empty())
857 if (!supports_quic)
858 return; 846 return;
859 847
860 base::DictionaryValue* supports_quic_dict = new base::DictionaryValue; 848 base::DictionaryValue* supports_quic_dict = new base::DictionaryValue;
861 supports_quic_dict->SetBoolean(kUsedQuicKey, supports_quic->used_quic); 849 supports_quic_dict->SetBoolean(kUsedQuicKey, true);
862 supports_quic_dict->SetString(kAddressKey, supports_quic->address); 850 supports_quic_dict->SetString(kAddressKey,
863 server_pref_dict->SetWithoutPathExpansion(kSupportsQuicKey, 851 IPAddressToString(*last_quic_address));
864 supports_quic_dict); 852 http_server_properties_dict->SetWithoutPathExpansion(kSupportsQuicKey,
853 supports_quic_dict);
865 } 854 }
866 855
867 void HttpServerPropertiesManager::SaveNetworkStatsToServerPrefs( 856 void HttpServerPropertiesManager::SaveNetworkStatsToServerPrefs(
868 const ServerNetworkStats* server_network_stats, 857 const ServerNetworkStats* server_network_stats,
869 base::DictionaryValue* server_pref_dict) { 858 base::DictionaryValue* server_pref_dict) {
870 if (!server_network_stats) 859 if (!server_network_stats)
871 return; 860 return;
872 861
873 base::DictionaryValue* server_network_stats_dict = new base::DictionaryValue; 862 base::DictionaryValue* server_network_stats_dict = new base::DictionaryValue;
874 // Becasue JSON doesn't support int64, persist int64 as a string. 863 // Becasue JSON doesn't support int64, persist int64 as a string.
875 server_network_stats_dict->SetInteger( 864 server_network_stats_dict->SetInteger(
876 kSrttKey, static_cast<int>(server_network_stats->srtt.ToInternalValue())); 865 kSrttKey, static_cast<int>(server_network_stats->srtt.ToInternalValue()));
877 // TODO(rtenneti): When QUIC starts using bandwidth_estimate, then persist 866 // TODO(rtenneti): When QUIC starts using bandwidth_estimate, then persist
878 // bandwidth_estimate. 867 // bandwidth_estimate.
879 server_pref_dict->SetWithoutPathExpansion(kNetworkStatsKey, 868 server_pref_dict->SetWithoutPathExpansion(kNetworkStatsKey,
880 server_network_stats_dict); 869 server_network_stats_dict);
881 } 870 }
882 871
883 void HttpServerPropertiesManager::OnHttpServerPropertiesChanged() { 872 void HttpServerPropertiesManager::OnHttpServerPropertiesChanged() {
884 DCHECK(pref_task_runner_->RunsTasksOnCurrentThread()); 873 DCHECK(pref_task_runner_->RunsTasksOnCurrentThread());
885 if (!setting_prefs_) 874 if (!setting_prefs_)
886 ScheduleUpdateCacheOnPrefThread(); 875 ScheduleUpdateCacheOnPrefThread();
887 } 876 }
888 877
889 } // namespace net 878 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698