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

Unified Diff: net/http/http_network_transaction.cc

Issue 2919011: Implement MAX_CONCURRENT_STREAMS SETTINGS header (Closed)
Patch Set: landing soon on a repo near you Created 10 years, 5 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/http/http_network_transaction.h ('k') | net/http/http_network_transaction_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/http/http_network_transaction.cc
diff --git a/net/http/http_network_transaction.cc b/net/http/http_network_transaction.cc
index 7f9b69608a71ad690ac89a485ee3a40b7d425f0f..8f4bedbb17cd913c920e2e5656945aba395bd1de 100644
--- a/net/http/http_network_transaction.cc
+++ b/net/http/http_network_transaction.cc
@@ -266,7 +266,7 @@ int HttpNetworkTransaction::RestartIgnoringLastError(
// update in DoSSLConnectComplete if |result| is OK?
if (using_spdy_) {
// TODO(cbentzel): Add auth support to spdy. See http://crbug.com/46620
- next_state_ = STATE_SPDY_SEND_REQUEST;
+ next_state_ = STATE_SPDY_GET_STREAM;
} else {
next_state_ = STATE_GENERATE_PROXY_AUTH_TOKEN;
}
@@ -437,6 +437,7 @@ LoadState HttpNetworkTransaction::GetLoadState() const {
case STATE_GENERATE_PROXY_AUTH_TOKEN_COMPLETE:
case STATE_GENERATE_SERVER_AUTH_TOKEN_COMPLETE:
case STATE_SEND_REQUEST_COMPLETE:
+ case STATE_SPDY_GET_STREAM:
case STATE_SPDY_SEND_REQUEST_COMPLETE:
return LOAD_STATE_SENDING_REQUEST;
case STATE_READ_HEADERS_COMPLETE:
@@ -570,6 +571,13 @@ int HttpNetworkTransaction::DoLoop(int result) {
net_log_.EndEvent(
NetLog::TYPE_HTTP_TRANSACTION_DRAIN_BODY_FOR_AUTH_RESTART, NULL);
break;
+ case STATE_SPDY_GET_STREAM:
+ DCHECK_EQ(OK, rv);
+ rv = DoSpdyGetStream();
+ break;
+ case STATE_SPDY_GET_STREAM_COMPLETE:
+ rv = DoSpdyGetStreamComplete(rv);
+ break;
case STATE_SPDY_SEND_REQUEST:
DCHECK_EQ(OK, rv);
net_log_.BeginEvent(NetLog::TYPE_SPDY_TRANSACTION_SEND_REQUEST, NULL);
@@ -722,7 +730,7 @@ int HttpNetworkTransaction::DoInitConnection() {
if (session_->spdy_session_pool()->HasSession(endpoint_)) {
using_spdy_ = true;
reused_socket_ = true;
- next_state_ = STATE_SPDY_SEND_REQUEST;
+ next_state_ = STATE_SPDY_GET_STREAM;
return OK;
}
@@ -932,7 +940,7 @@ int HttpNetworkTransaction::DoInitConnectionComplete(int result) {
if (using_spdy_) {
UpdateConnectionTypeHistograms(CONNECTION_SPDY);
// TODO(cbentzel): Add auth support to spdy. See http://crbug.com/46620
- next_state_ = STATE_SPDY_SEND_REQUEST;
+ next_state_ = STATE_SPDY_GET_STREAM;
} else {
next_state_ = STATE_GENERATE_PROXY_AUTH_TOKEN;
}
@@ -1214,8 +1222,8 @@ int HttpNetworkTransaction::DoDrainBodyForAuthRestartComplete(int result) {
return OK;
}
-int HttpNetworkTransaction::DoSpdySendRequest() {
- next_state_ = STATE_SPDY_SEND_REQUEST_COMPLETE;
+int HttpNetworkTransaction::DoSpdyGetStream() {
+ next_state_ = STATE_SPDY_GET_STREAM_COMPLETE;
CHECK(!spdy_http_stream_.get());
// First we get a SPDY session. Theoretically, we've just negotiated one, but
@@ -1244,39 +1252,34 @@ int HttpNetworkTransaction::DoSpdySendRequest() {
if(spdy_session->IsClosed())
return ERR_CONNECTION_CLOSED;
- UploadDataStream* upload_data = NULL;
+ headers_valid_ = false;
+
+ spdy_http_stream_.reset(new SpdyHttpStream());
+ return spdy_http_stream_->InitializeStream(spdy_session, *request_,
+ net_log_, &io_callback_);
+}
+
+int HttpNetworkTransaction::DoSpdyGetStreamComplete(int result) {
+ if (result < 0)
+ return result;
+
+ next_state_ = STATE_SPDY_SEND_REQUEST;
+ return OK;
+}
+
+int HttpNetworkTransaction::DoSpdySendRequest() {
+ next_state_ = STATE_SPDY_SEND_REQUEST_COMPLETE;
+
+ UploadDataStream* upload_data_stream = NULL;
if (request_->upload_data) {
int error_code = OK;
- upload_data = UploadDataStream::Create(request_->upload_data, &error_code);
- if (!upload_data)
+ upload_data_stream = UploadDataStream::Create(request_->upload_data,
+ &error_code);
+ if (!upload_data_stream)
return error_code;
}
- headers_valid_ = false;
- scoped_refptr<SpdyStream> spdy_stream;
- if (request_->method == "GET") {
- int error =
- spdy_session->GetPushStream(request_->url, &spdy_stream, net_log_);
- if (error != OK)
- return error;
- }
- if (spdy_stream.get()) {
- DCHECK(spdy_stream->pushed());
- CHECK(spdy_stream->GetDelegate() == NULL);
- spdy_http_stream_.reset(new SpdyHttpStream(spdy_stream));
- spdy_http_stream_->InitializeRequest(*request_, base::Time::Now(), NULL);
- } else {
- int error = spdy_session->CreateStream(request_->url,
- request_->priority,
- &spdy_stream,
- net_log_);
- if (error != OK)
- return error;
- DCHECK(!spdy_stream->pushed());
- CHECK(spdy_stream->GetDelegate() == NULL);
- spdy_http_stream_.reset(new SpdyHttpStream(spdy_stream));
- spdy_http_stream_->InitializeRequest(
- *request_, base::Time::Now(), upload_data);
- }
+ spdy_http_stream_->InitializeRequest(base::Time::Now(), upload_data_stream);
+
return spdy_http_stream_->SendRequest(&response_, &io_callback_);
}
@@ -1783,6 +1786,8 @@ std::string HttpNetworkTransaction::DescribeState(State state) {
STATE_CASE(STATE_READ_BODY_COMPLETE);
STATE_CASE(STATE_DRAIN_BODY_FOR_AUTH_RESTART);
STATE_CASE(STATE_DRAIN_BODY_FOR_AUTH_RESTART_COMPLETE);
+ STATE_CASE(STATE_SPDY_GET_STREAM);
+ STATE_CASE(STATE_SPDY_GET_STREAM_COMPLETE);
STATE_CASE(STATE_SPDY_SEND_REQUEST);
STATE_CASE(STATE_SPDY_SEND_REQUEST_COMPLETE);
STATE_CASE(STATE_SPDY_READ_HEADERS);
« no previous file with comments | « net/http/http_network_transaction.h ('k') | net/http/http_network_transaction_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698