| Index: net/spdy/spdy_network_transaction.cc
|
| diff --git a/net/spdy/spdy_network_transaction.cc b/net/spdy/spdy_network_transaction.cc
|
| index 05a4a5a7faa209f80a62c9d05ac84fefa0246f1a..78145538f9060b9afdd498fca708fe8ecfbc4671 100644
|
| --- a/net/spdy/spdy_network_transaction.cc
|
| +++ b/net/spdy/spdy_network_transaction.cc
|
| @@ -112,6 +112,7 @@ LoadState SpdyNetworkTransaction::GetLoadState() const {
|
| if (spdy_.get())
|
| return spdy_->GetLoadState();
|
| return LOAD_STATE_CONNECTING;
|
| + case STATE_GET_STREAM_COMPLETE:
|
| case STATE_SEND_REQUEST_COMPLETE:
|
| return LOAD_STATE_SENDING_REQUEST;
|
| case STATE_READ_HEADERS_COMPLETE:
|
| @@ -168,6 +169,12 @@ int SpdyNetworkTransaction::DoLoop(int result) {
|
| net_log_.EndEvent(NetLog::TYPE_SPDY_TRANSACTION_INIT_CONNECTION, NULL);
|
| rv = DoInitConnectionComplete(rv);
|
| break;
|
| + case STATE_GET_STREAM:
|
| + DCHECK_EQ(OK, rv);
|
| + rv = DoGetStream();
|
| + break;
|
| + case STATE_GET_STREAM_COMPLETE:
|
| + rv = DoGetStreamComplete(rv);
|
| case STATE_SEND_REQUEST:
|
| DCHECK_EQ(OK, rv);
|
| net_log_.BeginEvent(NetLog::TYPE_SPDY_TRANSACTION_SEND_REQUEST, NULL);
|
| @@ -243,57 +250,54 @@ int SpdyNetworkTransaction::DoInitConnectionComplete(int result) {
|
| if (result < 0)
|
| return result;
|
|
|
| - next_state_ = STATE_SEND_REQUEST;
|
| + next_state_ = STATE_GET_STREAM;
|
| return OK;
|
| }
|
|
|
| -int SpdyNetworkTransaction::DoSendRequest() {
|
| - next_state_ = STATE_SEND_REQUEST_COMPLETE;
|
| - CHECK(!stream_.get());
|
| +int SpdyNetworkTransaction::DoGetStream() {
|
| + next_state_ = STATE_GET_STREAM_COMPLETE;
|
|
|
| // It is possible that the spdy session was shut down while it was
|
| // asynchronously waiting to connect.
|
| - if(spdy_->IsClosed())
|
| + if (spdy_->IsClosed())
|
| return ERR_CONNECTION_CLOSED;
|
|
|
| - UploadDataStream* upload_data = NULL;
|
| + CHECK(!stream_.get());
|
| +
|
| + stream_.reset(new SpdyHttpStream());
|
| + return stream_->InitializeStream(spdy_, *request_,
|
| + net_log_, &io_callback_);
|
| +}
|
| +
|
| +int SpdyNetworkTransaction::DoGetStreamComplete(int result) {
|
| + if (result < 0) {
|
| + return result;
|
| + }
|
| +
|
| + next_state_ = STATE_SEND_REQUEST;
|
| + return OK;
|
| +}
|
| +
|
| +int SpdyNetworkTransaction::DoSendRequest() {
|
| + next_state_ = STATE_SEND_REQUEST_COMPLETE;
|
| +
|
| + UploadDataStream* upload_data_stream = NULL;
|
| if (request_->upload_data) {
|
| int error_code;
|
| - 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;
|
| }
|
| - scoped_refptr<SpdyStream> spdy_stream;
|
| - if (request_->method == "GET") {
|
| - int error = spdy_->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);
|
| - stream_.reset(new SpdyHttpStream(spdy_stream));
|
| - stream_->InitializeRequest(*request_, base::Time::Now(), NULL);
|
| - // "vary" field?
|
| - } else {
|
| - int error = spdy_->CreateStream(request_->url,
|
| - request_->priority,
|
| - &spdy_stream,
|
| - net_log_);
|
| - if (error != OK)
|
| - return error;
|
| - DCHECK(!spdy_stream->pushed());
|
| - CHECK(spdy_stream->GetDelegate() == NULL);
|
| - stream_.reset(new SpdyHttpStream(spdy_stream));
|
| - stream_->InitializeRequest(*request_, base::Time::Now(), upload_data);
|
| - }
|
| + stream_->InitializeRequest(base::Time::Now(), upload_data_stream);
|
| spdy_ = NULL;
|
| +
|
| return stream_->SendRequest(&response_, &io_callback_);
|
| }
|
|
|
| int SpdyNetworkTransaction::DoSendRequestComplete(int result) {
|
| if (result < 0) {
|
| - stream_.reset() ;
|
| + stream_.reset();
|
| return result;
|
| }
|
|
|
|
|