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

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

Issue 2901093004: Add and persist a new field in AlternativeServiceInfo to list QUIC verisons advertised (Closed)
Patch Set: fix cronet/grpc Created 3 years, 6 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 (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 4
5 #include "net/http/http_server_properties_impl.h" 5 #include "net/http/http_server_properties_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <memory> 8 #include <memory>
9 #include <utility> 9 #include <utility>
10 10
(...skipping 304 matching lines...) Expand 10 before | Expand all | Expand 10 after
315 if (alternative_service.host.empty()) { 315 if (alternative_service.host.empty()) {
316 alternative_service.host = origin.host(); 316 alternative_service.host = origin.host();
317 } 317 }
318 // If the alternative service is equivalent to the origin (same host, same 318 // If the alternative service is equivalent to the origin (same host, same
319 // port, and both TCP), skip it. 319 // port, and both TCP), skip it.
320 if (host_port_pair.Equals(alternative_service.host_port_pair()) && 320 if (host_port_pair.Equals(alternative_service.host_port_pair()) &&
321 alternative_service.protocol == kProtoHTTP2) { 321 alternative_service.protocol == kProtoHTTP2) {
322 ++it; 322 ++it;
323 continue; 323 continue;
324 } 324 }
325 valid_alternative_service_infos.push_back( 325 if (alternative_service.protocol == kProtoQUIC) {
326 AlternativeServiceInfo(alternative_service, it->expiration())); 326 valid_alternative_service_infos.push_back(
327 AlternativeServiceInfo::CreateQuicAlternativeServiceInfo(
328 alternative_service, it->expiration(),
329 it->advertised_versions()));
330 } else {
331 valid_alternative_service_infos.push_back(
332 AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo(
333 alternative_service, it->expiration()));
334 }
327 ++it; 335 ++it;
328 } 336 }
329 if (map_it->second.empty()) { 337 if (map_it->second.empty()) {
330 alternative_service_map_.Erase(map_it); 338 alternative_service_map_.Erase(map_it);
331 } 339 }
332 return valid_alternative_service_infos; 340 return valid_alternative_service_infos;
333 } 341 }
334 342
335 CanonicalHostMap::const_iterator canonical = GetCanonicalHost(origin); 343 CanonicalHostMap::const_iterator canonical = GetCanonicalHost(origin);
336 if (canonical == canonical_host_to_origin_map_.end()) { 344 if (canonical == canonical_host_to_origin_map_.end()) {
(...skipping 14 matching lines...) Expand all
351 alternative_service.host = canonical->second.host(); 359 alternative_service.host = canonical->second.host();
352 if (IsAlternativeServiceBroken(alternative_service)) { 360 if (IsAlternativeServiceBroken(alternative_service)) {
353 ++it; 361 ++it;
354 continue; 362 continue;
355 } 363 }
356 alternative_service.host = origin.host(); 364 alternative_service.host = origin.host();
357 } else if (IsAlternativeServiceBroken(alternative_service)) { 365 } else if (IsAlternativeServiceBroken(alternative_service)) {
358 ++it; 366 ++it;
359 continue; 367 continue;
360 } 368 }
361 valid_alternative_service_infos.push_back( 369 if (alternative_service.protocol == kProtoQUIC) {
362 AlternativeServiceInfo(alternative_service, it->expiration())); 370 valid_alternative_service_infos.push_back(
371 AlternativeServiceInfo::CreateQuicAlternativeServiceInfo(
372 alternative_service, it->expiration(),
373 it->advertised_versions()));
374 } else {
375 valid_alternative_service_infos.push_back(
376 AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo(
377 alternative_service, it->expiration()));
378 }
363 ++it; 379 ++it;
364 } 380 }
365 if (map_it->second.empty()) { 381 if (map_it->second.empty()) {
366 alternative_service_map_.Erase(map_it); 382 alternative_service_map_.Erase(map_it);
367 } 383 }
368 return valid_alternative_service_infos; 384 return valid_alternative_service_infos;
369 } 385 }
370 386
371 bool HttpServerPropertiesImpl::SetAlternativeService( 387 bool HttpServerPropertiesImpl::SetHttp2AlternativeService(
372 const url::SchemeHostPort& origin, 388 const url::SchemeHostPort& origin,
373 const AlternativeService& alternative_service, 389 const AlternativeService& alternative_service,
374 base::Time expiration) { 390 base::Time expiration) {
391 DCHECK(alternative_service.protocol != kProtoQUIC);
Bence 2017/06/16 14:43:40 Optional: this is not necessary, as CreateHttp2Alt
Zhongyi Shi 2017/06/20 23:23:37 Done.
392
375 return SetAlternativeServices( 393 return SetAlternativeServices(
376 origin, 394 origin,
377 AlternativeServiceInfoVector( 395 AlternativeServiceInfoVector(
378 /*size=*/1, AlternativeServiceInfo(alternative_service, expiration))); 396 /*size=*/1, AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo(
397 alternative_service, expiration)));
398 }
399
400 bool HttpServerPropertiesImpl::SetQuicAlternativeService(
401 const url::SchemeHostPort& origin,
402 const AlternativeService& alternative_service,
403 base::Time expiration,
404 const QuicVersionVector& advertised_versions) {
405 DCHECK(alternative_service.protocol == kProtoQUIC);
406
407 return SetAlternativeServices(
408 origin, AlternativeServiceInfoVector(
409 /*size=*/1,
410 AlternativeServiceInfo::CreateQuicAlternativeServiceInfo(
411 alternative_service, expiration, advertised_versions)));
379 } 412 }
380 413
381 bool HttpServerPropertiesImpl::SetAlternativeServices( 414 bool HttpServerPropertiesImpl::SetAlternativeServices(
382 const url::SchemeHostPort& origin, 415 const url::SchemeHostPort& origin,
383 const AlternativeServiceInfoVector& alternative_service_info_vector) { 416 const AlternativeServiceInfoVector& alternative_service_info_vector) {
384 AlternativeServiceMap::iterator it = alternative_service_map_.Peek(origin); 417 AlternativeServiceMap::iterator it = alternative_service_map_.Peek(origin);
385 418
386 if (alternative_service_info_vector.empty()) { 419 if (alternative_service_info_vector.empty()) {
387 RemoveCanonicalHost(origin); 420 RemoveCanonicalHost(origin);
388 if (it == alternative_service_map_.end()) 421 if (it == alternative_service_map_.end())
(...skipping 19 matching lines...) Expand all
408 } 441 }
409 // Also persist to disk if new expiration it more that twice as far or 442 // Also persist to disk if new expiration it more that twice as far or
410 // less than half as far in the future. 443 // less than half as far in the future.
411 base::Time old_time = old.expiration(); 444 base::Time old_time = old.expiration();
412 base::Time new_time = new_it->expiration(); 445 base::Time new_time = new_it->expiration();
413 if (new_time - now > 2 * (old_time - now) || 446 if (new_time - now > 2 * (old_time - now) ||
414 2 * (new_time - now) < (old_time - now)) { 447 2 * (new_time - now) < (old_time - now)) {
415 changed = true; 448 changed = true;
416 break; 449 break;
417 } 450 }
451 // Also persist to disk if new entry has a different list of advertised
452 // versions.
453 if (old.advertised_versions() != new_it->advertised_versions()) {
454 changed = true;
455 break;
456 }
418 ++new_it; 457 ++new_it;
419 } 458 }
420 } 459 }
421 } 460 }
422 461
423 const bool previously_no_alternative_services = 462 const bool previously_no_alternative_services =
424 (GetAlternateProtocolIterator(origin) == alternative_service_map_.end()); 463 (GetAlternateProtocolIterator(origin) == alternative_service_map_.end());
425 464
426 alternative_service_map_.Put(origin, alternative_service_info_vector); 465 alternative_service_map_.Put(origin, alternative_service_info_vector);
427 466
(...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after
695 if (map_it->second.empty()) { 734 if (map_it->second.empty()) {
696 RemoveCanonicalHost(map_it->first); 735 RemoveCanonicalHost(map_it->first);
697 map_it = alternative_service_map_.Erase(map_it); 736 map_it = alternative_service_map_.Erase(map_it);
698 continue; 737 continue;
699 } 738 }
700 ++map_it; 739 ++map_it;
701 } 740 }
702 } 741 }
703 742
704 } // namespace net 743 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698