| 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);
|
|
|