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

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

Issue 1858093002: Alt-Svc 8: Change Supports SPDY list using SHP as the key. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@alt_svc_7
Patch Set: server pref changes Created 4 years, 8 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_macros.h" 8 #include "base/metrics/histogram_macros.h"
9 #include "base/single_thread_task_runner.h" 9 #include "base/single_thread_task_runner.h"
10 #include "base/stl_util.h" 10 #include "base/stl_util.h"
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
143 http_server_properties_impl_->Clear(); 143 http_server_properties_impl_->Clear();
144 UpdatePrefsFromCacheOnNetworkThread(completion); 144 UpdatePrefsFromCacheOnNetworkThread(completion);
145 } 145 }
146 146
147 bool HttpServerPropertiesManager::SupportsRequestPriority( 147 bool HttpServerPropertiesManager::SupportsRequestPriority(
148 const url::SchemeHostPort& server) { 148 const url::SchemeHostPort& server) {
149 DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); 149 DCHECK(network_task_runner_->RunsTasksOnCurrentThread());
150 return http_server_properties_impl_->SupportsRequestPriority(server); 150 return http_server_properties_impl_->SupportsRequestPriority(server);
151 } 151 }
152 152
153 bool HttpServerPropertiesManager::GetSupportsSpdy(const HostPortPair& server) { 153 bool HttpServerPropertiesManager::GetSupportsSpdy(
154 const url::SchemeHostPort& server) {
154 DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); 155 DCHECK(network_task_runner_->RunsTasksOnCurrentThread());
155 return http_server_properties_impl_->GetSupportsSpdy(server); 156 return http_server_properties_impl_->GetSupportsSpdy(server);
156 } 157 }
157 158
158 void HttpServerPropertiesManager::SetSupportsSpdy(const HostPortPair& server, 159 void HttpServerPropertiesManager::SetSupportsSpdy(
159 bool support_spdy) { 160 const url::SchemeHostPort& server,
161 bool support_spdy) {
160 DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); 162 DCHECK(network_task_runner_->RunsTasksOnCurrentThread());
161 163
162 bool old_support_spdy = http_server_properties_impl_->GetSupportsSpdy(server); 164 bool old_support_spdy = http_server_properties_impl_->GetSupportsSpdy(server);
163 http_server_properties_impl_->SetSupportsSpdy(server, support_spdy); 165 http_server_properties_impl_->SetSupportsSpdy(server, support_spdy);
164 bool new_support_spdy = http_server_properties_impl_->GetSupportsSpdy(server); 166 bool new_support_spdy = http_server_properties_impl_->GetSupportsSpdy(server);
165 if (old_support_spdy != new_support_spdy) 167 if (old_support_spdy != new_support_spdy)
166 ScheduleUpdatePrefsOnNetworkThread(SUPPORTS_SPDY); 168 ScheduleUpdatePrefsOnNetworkThread(SUPPORTS_SPDY);
167 } 169 }
168 170
169 bool HttpServerPropertiesManager::RequiresHTTP11(const HostPortPair& server) { 171 bool HttpServerPropertiesManager::RequiresHTTP11(const HostPortPair& server) {
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
280 } 282 }
281 283
282 scoped_ptr<base::Value> 284 scoped_ptr<base::Value>
283 HttpServerPropertiesManager::GetAlternativeServiceInfoAsValue() 285 HttpServerPropertiesManager::GetAlternativeServiceInfoAsValue()
284 const { 286 const {
285 DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); 287 DCHECK(network_task_runner_->RunsTasksOnCurrentThread());
286 return http_server_properties_impl_->GetAlternativeServiceInfoAsValue(); 288 return http_server_properties_impl_->GetAlternativeServiceInfoAsValue();
287 } 289 }
288 290
289 const SettingsMap& HttpServerPropertiesManager::GetSpdySettings( 291 const SettingsMap& HttpServerPropertiesManager::GetSpdySettings(
290 const HostPortPair& host_port_pair) { 292 const url::SchemeHostPort& origin) {
291 DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); 293 DCHECK(network_task_runner_->RunsTasksOnCurrentThread());
292 return http_server_properties_impl_->GetSpdySettings(host_port_pair); 294 return http_server_properties_impl_->GetSpdySettings(origin);
293 } 295 }
294 296
295 bool HttpServerPropertiesManager::SetSpdySetting( 297 bool HttpServerPropertiesManager::SetSpdySetting(
296 const HostPortPair& host_port_pair, 298 const url::SchemeHostPort& origin,
297 SpdySettingsIds id, 299 SpdySettingsIds id,
298 SpdySettingsFlags flags, 300 SpdySettingsFlags flags,
299 uint32_t value) { 301 uint32_t value) {
300 DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); 302 DCHECK(network_task_runner_->RunsTasksOnCurrentThread());
301 bool persist = http_server_properties_impl_->SetSpdySetting( 303 bool persist =
302 host_port_pair, id, flags, value); 304 http_server_properties_impl_->SetSpdySetting(origin, id, flags, value);
303 if (persist) 305 if (persist)
304 ScheduleUpdatePrefsOnNetworkThread(SET_SPDY_SETTING); 306 ScheduleUpdatePrefsOnNetworkThread(SET_SPDY_SETTING);
305 return persist; 307 return persist;
306 } 308 }
307 309
308 void HttpServerPropertiesManager::ClearSpdySettings( 310 void HttpServerPropertiesManager::ClearSpdySettings(
309 const HostPortPair& host_port_pair) { 311 const url::SchemeHostPort& origin) {
310 DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); 312 DCHECK(network_task_runner_->RunsTasksOnCurrentThread());
311 http_server_properties_impl_->ClearSpdySettings(host_port_pair); 313 http_server_properties_impl_->ClearSpdySettings(origin);
312 ScheduleUpdatePrefsOnNetworkThread(CLEAR_SPDY_SETTINGS); 314 ScheduleUpdatePrefsOnNetworkThread(CLEAR_SPDY_SETTINGS);
313 } 315 }
314 316
315 void HttpServerPropertiesManager::ClearAllSpdySettings() { 317 void HttpServerPropertiesManager::ClearAllSpdySettings() {
316 DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); 318 DCHECK(network_task_runner_->RunsTasksOnCurrentThread());
317 http_server_properties_impl_->ClearAllSpdySettings(); 319 http_server_properties_impl_->ClearAllSpdySettings();
318 ScheduleUpdatePrefsOnNetworkThread(CLEAR_ALL_SPDY_SETTINGS); 320 ScheduleUpdatePrefsOnNetworkThread(CLEAR_ALL_SPDY_SETTINGS);
319 } 321 }
320 322
321 const SpdySettingsMap& HttpServerPropertiesManager::spdy_settings_map() 323 const SpdySettingsMap& HttpServerPropertiesManager::spdy_settings_map()
(...skipping 14 matching lines...) Expand all
336 IPAddress old_last_quic_addr; 338 IPAddress old_last_quic_addr;
337 http_server_properties_impl_->GetSupportsQuic(&old_last_quic_addr); 339 http_server_properties_impl_->GetSupportsQuic(&old_last_quic_addr);
338 http_server_properties_impl_->SetSupportsQuic(used_quic, address); 340 http_server_properties_impl_->SetSupportsQuic(used_quic, address);
339 IPAddress new_last_quic_addr; 341 IPAddress new_last_quic_addr;
340 http_server_properties_impl_->GetSupportsQuic(&new_last_quic_addr); 342 http_server_properties_impl_->GetSupportsQuic(&new_last_quic_addr);
341 if (old_last_quic_addr != new_last_quic_addr) 343 if (old_last_quic_addr != new_last_quic_addr)
342 ScheduleUpdatePrefsOnNetworkThread(SET_SUPPORTS_QUIC); 344 ScheduleUpdatePrefsOnNetworkThread(SET_SUPPORTS_QUIC);
343 } 345 }
344 346
345 void HttpServerPropertiesManager::SetServerNetworkStats( 347 void HttpServerPropertiesManager::SetServerNetworkStats(
346 const HostPortPair& host_port_pair, 348 const url::SchemeHostPort& origin,
347 ServerNetworkStats stats) { 349 ServerNetworkStats stats) {
348 DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); 350 DCHECK(network_task_runner_->RunsTasksOnCurrentThread());
349 ServerNetworkStats old_stats; 351 ServerNetworkStats old_stats;
350 const ServerNetworkStats* old_stats_ptr = 352 const ServerNetworkStats* old_stats_ptr =
351 http_server_properties_impl_->GetServerNetworkStats(host_port_pair); 353 http_server_properties_impl_->GetServerNetworkStats(origin);
352 if (http_server_properties_impl_->GetServerNetworkStats(host_port_pair)) 354 if (http_server_properties_impl_->GetServerNetworkStats(origin))
353 old_stats = *old_stats_ptr; 355 old_stats = *old_stats_ptr;
354 http_server_properties_impl_->SetServerNetworkStats(host_port_pair, stats); 356 http_server_properties_impl_->SetServerNetworkStats(origin, stats);
355 ServerNetworkStats new_stats = 357 ServerNetworkStats new_stats =
356 *(http_server_properties_impl_->GetServerNetworkStats(host_port_pair)); 358 *(http_server_properties_impl_->GetServerNetworkStats(origin));
357 if (old_stats != new_stats) 359 if (old_stats != new_stats)
358 ScheduleUpdatePrefsOnNetworkThread(SET_SERVER_NETWORK_STATS); 360 ScheduleUpdatePrefsOnNetworkThread(SET_SERVER_NETWORK_STATS);
359 } 361 }
360 362
361 const ServerNetworkStats* HttpServerPropertiesManager::GetServerNetworkStats( 363 const ServerNetworkStats* HttpServerPropertiesManager::GetServerNetworkStats(
362 const HostPortPair& host_port_pair) { 364 const url::SchemeHostPort& origin) {
363 DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); 365 DCHECK(network_task_runner_->RunsTasksOnCurrentThread());
364 return http_server_properties_impl_->GetServerNetworkStats(host_port_pair); 366 return http_server_properties_impl_->GetServerNetworkStats(origin);
365 } 367 }
366 368
367 const ServerNetworkStatsMap& 369 const ServerNetworkStatsMap&
368 HttpServerPropertiesManager::server_network_stats_map() const { 370 HttpServerPropertiesManager::server_network_stats_map() const {
369 DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); 371 DCHECK(network_task_runner_->RunsTasksOnCurrentThread());
370 return http_server_properties_impl_->server_network_stats_map(); 372 return http_server_properties_impl_->server_network_stats_map();
371 } 373 }
372 374
373 bool HttpServerPropertiesManager::SetQuicServerInfo( 375 bool HttpServerPropertiesManager::SetQuicServerInfo(
374 const QuicServerId& server_id, 376 const QuicServerId& server_id,
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
563 return false; 565 return false;
564 } 566 }
565 567
566 // Get if server supports Spdy. 568 // Get if server supports Spdy.
567 bool supports_spdy = false; 569 bool supports_spdy = false;
568 if ((server_pref_dict->GetBoolean(kSupportsSpdyKey, &supports_spdy)) && 570 if ((server_pref_dict->GetBoolean(kSupportsSpdyKey, &supports_spdy)) &&
569 supports_spdy) { 571 supports_spdy) {
570 spdy_servers->push_back(server_str); 572 spdy_servers->push_back(server_str);
571 } 573 }
572 574
573 AddToSpdySettingsMap(server, *server_pref_dict, spdy_settings_map);
574
575 // TODO(zhongyi): persist server's scheme/host/pair in a new version. 575 // TODO(zhongyi): persist server's scheme/host/pair in a new version.
576 // Never call AddToAlternativeServiceMap for old versions disk data. 576 // Never call AddToAlternativeServiceMap for old versions disk data.
577 url::SchemeHostPort scheme_origin_pair("https", server.host(), 577 url::SchemeHostPort scheme_origin_pair("https", server.host(),
578 server.port()); 578 server.port());
579
580 AddToSpdySettingsMap(scheme_origin_pair, *server_pref_dict,
581 spdy_settings_map);
582
579 if (version <= 4) { 583 if (version <= 4) {
580 DVLOG(1) << "Old version, won't update Alt-Svc from disck data"; 584 DVLOG(1) << "Old version, won't update Alt-Svc from disck data";
581 } 585 }
582 if (!AddToAlternativeServiceMap(scheme_origin_pair, *server_pref_dict, 586 if (!AddToAlternativeServiceMap(scheme_origin_pair, *server_pref_dict,
583 alternative_service_map) || 587 alternative_service_map) ||
584 !AddToNetworkStatsMap(server, *server_pref_dict, network_stats_map)) { 588 !AddToNetworkStatsMap(scheme_origin_pair, *server_pref_dict,
589 network_stats_map)) {
585 return false; 590 return false;
586 } 591 }
587 } 592 }
588 return true; 593 return true;
589 } 594 }
590 595
591 void HttpServerPropertiesManager::AddToSpdySettingsMap( 596 void HttpServerPropertiesManager::AddToSpdySettingsMap(
592 const HostPortPair& server, 597 const url::SchemeHostPort& server,
593 const base::DictionaryValue& server_pref_dict, 598 const base::DictionaryValue& server_pref_dict,
594 SpdySettingsMap* spdy_settings_map) { 599 SpdySettingsMap* spdy_settings_map) {
595 // Get SpdySettings. 600 // Get SpdySettings.
596 DCHECK(spdy_settings_map->Peek(server) == spdy_settings_map->end()); 601 DCHECK(spdy_settings_map->Peek(server) == spdy_settings_map->end());
597 const base::DictionaryValue* spdy_settings_dict = nullptr; 602 const base::DictionaryValue* spdy_settings_dict = nullptr;
598 if (!server_pref_dict.GetDictionaryWithoutPathExpansion( 603 if (!server_pref_dict.GetDictionaryWithoutPathExpansion(
599 kSettingsKey, &spdy_settings_dict)) { 604 kSettingsKey, &spdy_settings_dict)) {
600 return; 605 return;
601 } 606 }
602 SettingsMap settings_map; 607 SettingsMap settings_map;
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
750 if (!supports_quic_dict->GetStringWithoutPathExpansion(kAddressKey, 755 if (!supports_quic_dict->GetStringWithoutPathExpansion(kAddressKey,
751 &address) || 756 &address) ||
752 !last_quic_address->AssignFromIPLiteral(address)) { 757 !last_quic_address->AssignFromIPLiteral(address)) {
753 DVLOG(1) << "Malformed SupportsQuic"; 758 DVLOG(1) << "Malformed SupportsQuic";
754 return false; 759 return false;
755 } 760 }
756 return true; 761 return true;
757 } 762 }
758 763
759 bool HttpServerPropertiesManager::AddToNetworkStatsMap( 764 bool HttpServerPropertiesManager::AddToNetworkStatsMap(
760 const HostPortPair& server, 765 const url::SchemeHostPort& server,
761 const base::DictionaryValue& server_pref_dict, 766 const base::DictionaryValue& server_pref_dict,
762 ServerNetworkStatsMap* network_stats_map) { 767 ServerNetworkStatsMap* network_stats_map) {
763 DCHECK(network_stats_map->Peek(server) == network_stats_map->end()); 768 DCHECK(network_stats_map->Peek(server) == network_stats_map->end());
764 const base::DictionaryValue* server_network_stats_dict = nullptr; 769 const base::DictionaryValue* server_network_stats_dict = nullptr;
765 if (!server_pref_dict.GetDictionaryWithoutPathExpansion( 770 if (!server_pref_dict.GetDictionaryWithoutPathExpansion(
766 kNetworkStatsKey, &server_network_stats_dict)) { 771 kNetworkStatsKey, &server_network_stats_dict)) {
767 return true; 772 return true;
768 } 773 }
769 int srtt; 774 int srtt;
770 if (!server_network_stats_dict->GetIntegerWithoutPathExpansion(kSrttKey, 775 if (!server_network_stats_dict->GetIntegerWithoutPathExpansion(kSrttKey,
(...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after
1042 const base::Closure& completion) { 1047 const base::Closure& completion) {
1043 typedef base::MRUCache<HostPortPair, ServerPref> ServerPrefMap; 1048 typedef base::MRUCache<HostPortPair, ServerPref> ServerPrefMap;
1044 ServerPrefMap server_pref_map(ServerPrefMap::NO_AUTO_EVICT); 1049 ServerPrefMap server_pref_map(ServerPrefMap::NO_AUTO_EVICT);
1045 1050
1046 DCHECK(pref_task_runner_->RunsTasksOnCurrentThread()); 1051 DCHECK(pref_task_runner_->RunsTasksOnCurrentThread());
1047 1052
1048 // Add servers that support spdy to server_pref_map in the MRU order. 1053 // Add servers that support spdy to server_pref_map in the MRU order.
1049 for (size_t index = spdy_server_list->GetSize(); index > 0; --index) { 1054 for (size_t index = spdy_server_list->GetSize(); index > 0; --index) {
1050 std::string s; 1055 std::string s;
1051 if (spdy_server_list->GetString(index - 1, &s)) { 1056 if (spdy_server_list->GetString(index - 1, &s)) {
1052 HostPortPair server = HostPortPair::FromString(s); 1057 url::SchemeHostPort scheme_origin_pair =
1058 url::SchemeHostPort::FromString(s);
1059 HostPortPair server =
1060 HostPortPair::FromSchemeHostPort(scheme_origin_pair);
1053 ServerPrefMap::iterator it = server_pref_map.Get(server); 1061 ServerPrefMap::iterator it = server_pref_map.Get(server);
1054 if (it == server_pref_map.end()) { 1062 if (it == server_pref_map.end()) {
1055 ServerPref server_pref; 1063 ServerPref server_pref;
1056 server_pref.supports_spdy = true; 1064 server_pref.supports_spdy = true;
1057 server_pref_map.Put(server, server_pref); 1065 server_pref_map.Put(server, server_pref);
1058 } else { 1066 } else {
1059 it->second.supports_spdy = true; 1067 it->second.supports_spdy = true;
1060 } 1068 }
1061 } 1069 }
1062 } 1070 }
1063 1071
1064 // Add servers that have SpdySettings to server_pref_map in the MRU order. 1072 // Add servers that have SpdySettings to server_pref_map in the MRU order.
1065 for (SpdySettingsMap::reverse_iterator map_it = spdy_settings_map->rbegin(); 1073 for (SpdySettingsMap::reverse_iterator map_it = spdy_settings_map->rbegin();
1066 map_it != spdy_settings_map->rend(); ++map_it) { 1074 map_it != spdy_settings_map->rend(); ++map_it) {
1067 const HostPortPair& server = map_it->first; 1075 const HostPortPair& server =
1076 HostPortPair::FromSchemeHostPort(map_it->first);
1068 ServerPrefMap::iterator it = server_pref_map.Get(server); 1077 ServerPrefMap::iterator it = server_pref_map.Get(server);
1069 if (it == server_pref_map.end()) { 1078 if (it == server_pref_map.end()) {
1070 ServerPref server_pref; 1079 ServerPref server_pref;
1071 server_pref.settings_map = &map_it->second; 1080 server_pref.settings_map = &map_it->second;
1072 server_pref_map.Put(server, server_pref); 1081 server_pref_map.Put(server, server_pref);
1073 } else { 1082 } else {
1074 it->second.settings_map = &map_it->second; 1083 it->second.settings_map = &map_it->second;
1075 } 1084 }
1076 } 1085 }
1077 1086
(...skipping 10 matching lines...) Expand all
1088 server_pref_map.Put(server, server_pref); 1097 server_pref_map.Put(server, server_pref);
1089 } else { 1098 } else {
1090 it->second.alternative_service_info_vector = &map_it->second; 1099 it->second.alternative_service_info_vector = &map_it->second;
1091 } 1100 }
1092 } 1101 }
1093 1102
1094 // Add ServerNetworkStats servers to server_pref_map in the MRU order. 1103 // Add ServerNetworkStats servers to server_pref_map in the MRU order.
1095 for (ServerNetworkStatsMap::const_reverse_iterator map_it = 1104 for (ServerNetworkStatsMap::const_reverse_iterator map_it =
1096 server_network_stats_map->rbegin(); 1105 server_network_stats_map->rbegin();
1097 map_it != server_network_stats_map->rend(); ++map_it) { 1106 map_it != server_network_stats_map->rend(); ++map_it) {
1098 const HostPortPair& server = map_it->first; 1107 const HostPortPair& server =
1108 HostPortPair::FromSchemeHostPort(map_it->first);
1099 ServerPrefMap::iterator it = server_pref_map.Get(server); 1109 ServerPrefMap::iterator it = server_pref_map.Get(server);
1100 if (it == server_pref_map.end()) { 1110 if (it == server_pref_map.end()) {
1101 ServerPref server_pref; 1111 ServerPref server_pref;
1102 server_pref.server_network_stats = &map_it->second; 1112 server_pref.server_network_stats = &map_it->second;
1103 server_pref_map.Put(server, server_pref); 1113 server_pref_map.Put(server, server_pref);
1104 } else { 1114 } else {
1105 it->second.server_network_stats = &map_it->second; 1115 it->second.server_network_stats = &map_it->second;
1106 } 1116 }
1107 } 1117 }
1108 1118
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
1251 quic_servers_dict); 1261 quic_servers_dict);
1252 } 1262 }
1253 1263
1254 void HttpServerPropertiesManager::OnHttpServerPropertiesChanged() { 1264 void HttpServerPropertiesManager::OnHttpServerPropertiesChanged() {
1255 DCHECK(pref_task_runner_->RunsTasksOnCurrentThread()); 1265 DCHECK(pref_task_runner_->RunsTasksOnCurrentThread());
1256 if (!setting_prefs_) 1266 if (!setting_prefs_)
1257 ScheduleUpdateCacheOnPrefThread(); 1267 ScheduleUpdateCacheOnPrefThread();
1258 } 1268 }
1259 1269
1260 } // namespace net 1270 } // namespace net
OLDNEW
« no previous file with comments | « net/http/http_server_properties_manager.h ('k') | net/http/http_server_properties_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698