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

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

Issue 2928763002: Move SpdySessionRequestMap to SpdySessionPool (Closed)
Patch Set: address comments 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
« no previous file with comments | « net/http/http_stream_factory_impl.cc ('k') | net/spdy/chromium/spdy_session_pool.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2016 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2016 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_stream_factory_impl_job_controller.h" 5 #include "net/http/http_stream_factory_impl_job_controller.h"
6 6
7 #include <string> 7 #include <string>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/memory/ptr_util.h" 10 #include "base/memory/ptr_util.h"
(...skipping 430 matching lines...) Expand 10 before | Expand all | Expand 10 after
441 441
442 // Cache these values in case the job gets deleted. 442 // Cache these values in case the job gets deleted.
443 const SSLConfig used_ssl_config = job->server_ssl_config(); 443 const SSLConfig used_ssl_config = job->server_ssl_config();
444 const ProxyInfo used_proxy_info = job->proxy_info(); 444 const ProxyInfo used_proxy_info = job->proxy_info();
445 const bool was_alpn_negotiated = job->was_alpn_negotiated(); 445 const bool was_alpn_negotiated = job->was_alpn_negotiated();
446 const NextProto negotiated_protocol = job->negotiated_protocol(); 446 const NextProto negotiated_protocol = job->negotiated_protocol();
447 const bool using_spdy = job->using_spdy(); 447 const bool using_spdy = job->using_spdy();
448 const NetLogSource source_dependency = job->net_log().source(); 448 const NetLogSource source_dependency = job->net_log().source();
449 449
450 // Cache this so we can still use it if the JobController is deleted. 450 // Cache this so we can still use it if the JobController is deleted.
451 HttpStreamFactoryImpl* factory = factory_; 451 SpdySessionPool* spdy_session_pool = session_->spdy_session_pool();
452 452
453 // Notify |request_|. 453 // Notify |request_|.
454 if (!is_preconnect_ && !is_job_orphaned) { 454 if (!is_preconnect_ && !is_job_orphaned) {
455 if (job->job_type() == MAIN && alternative_job_net_error_ != OK) 455 if (job->job_type() == MAIN && alternative_job_net_error_ != OK)
456 ReportBrokenAlternativeService(); 456 ReportBrokenAlternativeService();
457 457
458 DCHECK(request_); 458 DCHECK(request_);
459 459
460 // The first case is the usual case. 460 // The first case is the usual case.
461 if (!job_bound_) { 461 if (!job_bound_) {
(...skipping 14 matching lines...) Expand all
476 used_ssl_config, used_proxy_info, 476 used_ssl_config, used_proxy_info,
477 bidirectional_stream_impl.release()); 477 bidirectional_stream_impl.release());
478 } else { 478 } else {
479 std::unique_ptr<HttpStream> stream = job->ReleaseStream(); 479 std::unique_ptr<HttpStream> stream = job->ReleaseStream();
480 DCHECK(stream); 480 DCHECK(stream);
481 delegate_->OnStreamReady(used_ssl_config, used_proxy_info, 481 delegate_->OnStreamReady(used_ssl_config, used_proxy_info,
482 stream.release()); 482 stream.release());
483 } 483 }
484 } 484 }
485 485
486 // Notify |factory_|. |request_| and |bounded_job_| might be deleted already. 486 // Notify other requests that has the same SpdySessionKey. |request_| and
Bence 2017/06/07 23:09:53 s/has/have/ (since "requests" is plural)
xunjieli 2017/06/08 12:35:21 Done.
487 // |bounded_job_| might be deleted already.
487 if (spdy_session && spdy_session->IsAvailable()) { 488 if (spdy_session && spdy_session->IsAvailable()) {
488 factory->OnNewSpdySessionReady(spdy_session, direct, used_ssl_config, 489 spdy_session_pool->OnNewSpdySessionReady(
489 used_proxy_info, was_alpn_negotiated, 490 spdy_session, direct, used_ssl_config, used_proxy_info,
490 negotiated_protocol, using_spdy, 491 was_alpn_negotiated, negotiated_protocol, using_spdy,
491 source_dependency); 492 source_dependency);
492 } 493 }
493 if (is_job_orphaned) { 494 if (is_job_orphaned) {
494 OnOrphanedJobComplete(job); 495 OnOrphanedJobComplete(job);
495 } 496 }
496 } 497 }
497 498
498 void HttpStreamFactoryImpl::JobController::OnPreconnectsComplete(Job* job) { 499 void HttpStreamFactoryImpl::JobController::OnPreconnectsComplete(Job* job) {
499 DCHECK_EQ(main_job_.get(), job); 500 DCHECK_EQ(main_job_.get(), job);
500 main_job_.reset(); 501 main_job_.reset();
501 factory_->OnPreconnectsCompleteInternal(); 502 factory_->OnPreconnectsCompleteInternal();
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
596 ResumeMainJobLater(main_job_wait_time_); 597 ResumeMainJobLater(main_job_wait_time_);
597 return true; 598 return true;
598 } 599 }
599 600
600 void HttpStreamFactoryImpl::JobController::SetSpdySessionKey( 601 void HttpStreamFactoryImpl::JobController::SetSpdySessionKey(
601 Job* job, 602 Job* job,
602 const SpdySessionKey& spdy_session_key) { 603 const SpdySessionKey& spdy_session_key) {
603 if (is_preconnect_ || IsJobOrphaned(job)) 604 if (is_preconnect_ || IsJobOrphaned(job))
604 return; 605 return;
605 606
606 if (!request_->HasSpdySessionKey()) { 607 session_->spdy_session_pool()->AddRequestToSpdySessionRequestMap(
607 RequestSet& request_set = 608 spdy_session_key, request_);
608 factory_->spdy_session_request_map_[spdy_session_key];
609 DCHECK(!base::ContainsKey(request_set, request_));
610 request_set.insert(request_);
611 request_->SetSpdySessionKey(spdy_session_key);
612 }
613 } 609 }
614 610
615 void HttpStreamFactoryImpl::JobController:: 611 void HttpStreamFactoryImpl::JobController::
616 RemoveRequestFromSpdySessionRequestMapForJob(Job* job) { 612 RemoveRequestFromSpdySessionRequestMapForJob(Job* job) {
617 if (is_preconnect_ || IsJobOrphaned(job)) 613 if (is_preconnect_ || IsJobOrphaned(job))
618 return; 614 return;
619 615
620 RemoveRequestFromSpdySessionRequestMap(); 616 RemoveRequestFromSpdySessionRequestMap();
621 } 617 }
622 618
623 void HttpStreamFactoryImpl::JobController:: 619 void HttpStreamFactoryImpl::JobController::
624 RemoveRequestFromSpdySessionRequestMap() { 620 RemoveRequestFromSpdySessionRequestMap() {
625 if (request_->HasSpdySessionKey()) { 621 // TODO(xunjieli): Use a DCHECK once https://crbug.com/718576 is fixed.
626 const SpdySessionKey& spdy_session_key = request_->GetSpdySessionKey(); 622 CHECK(request_);
627 SpdySessionRequestMap& spdy_session_request_map = 623 session_->spdy_session_pool()->RemoveRequestFromSpdySessionRequestMap(
628 factory_->spdy_session_request_map_; 624 request_);
629 DCHECK(base::ContainsKey(spdy_session_request_map, spdy_session_key));
630 RequestSet& request_set = spdy_session_request_map[spdy_session_key];
631 DCHECK(base::ContainsKey(request_set, request_));
632 request_set.erase(request_);
633 if (request_set.empty())
634 spdy_session_request_map.erase(spdy_session_key);
635 request_->ResetSpdySessionKey();
636 }
637 } 625 }
638 626
639 const NetLogWithSource* HttpStreamFactoryImpl::JobController::GetNetLog() 627 const NetLogWithSource* HttpStreamFactoryImpl::JobController::GetNetLog()
640 const { 628 const {
641 return &net_log_; 629 return &net_log_;
642 } 630 }
643 631
644 void HttpStreamFactoryImpl::JobController::MaybeSetWaitTimeForMainJob( 632 void HttpStreamFactoryImpl::JobController::MaybeSetWaitTimeForMainJob(
645 const base::TimeDelta& delay) { 633 const base::TimeDelta& delay) {
646 if (main_job_is_blocked_) { 634 if (main_job_is_blocked_) {
(...skipping 647 matching lines...) Expand 10 before | Expand all | Expand 10 after
1294 // If ReconsiderProxyAfterError() failed synchronously, it means 1282 // If ReconsiderProxyAfterError() failed synchronously, it means
1295 // there was nothing left to fall-back to, so fail the transaction 1283 // there was nothing left to fall-back to, so fail the transaction
1296 // with the last connection error we got. 1284 // with the last connection error we got.
1297 // TODO(eroman): This is a confusing contract, make it more obvious. 1285 // TODO(eroman): This is a confusing contract, make it more obvious.
1298 rv = error; 1286 rv = error;
1299 } 1287 }
1300 return rv; 1288 return rv;
1301 } 1289 }
1302 1290
1303 } // namespace net 1291 } // namespace net
OLDNEW
« no previous file with comments | « net/http/http_stream_factory_impl.cc ('k') | net/spdy/chromium/spdy_session_pool.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698