diff options
Diffstat (limited to 'net')
-rw-r--r-- | net/http/http_network_transaction.cc | 34 | ||||
-rw-r--r-- | net/http/http_network_transaction.h | 4 |
2 files changed, 30 insertions, 8 deletions
diff --git a/net/http/http_network_transaction.cc b/net/http/http_network_transaction.cc index f987806..dd538e2 100644 --- a/net/http/http_network_transaction.cc +++ b/net/http/http_network_transaction.cc @@ -534,6 +534,13 @@ int HttpNetworkTransaction::DoLoop(int result) { case STATE_GENERATE_SERVER_AUTH_TOKEN_COMPLETE: rv = DoGenerateServerAuthTokenComplete(rv); break; + case STATE_INIT_REQUEST_BODY: + DCHECK_EQ(OK, rv); + rv = DoInitRequestBody(); + break; + case STATE_INIT_REQUEST_BODY_COMPLETE: + rv = DoInitRequestBodyComplete(rv); + break; case STATE_BUILD_REQUEST: DCHECK_EQ(OK, rv); net_log_.BeginEvent(NetLog::TYPE_HTTP_TRANSACTION_SEND_REQUEST); @@ -689,7 +696,7 @@ int HttpNetworkTransaction::DoGenerateServerAuthToken() { int HttpNetworkTransaction::DoGenerateServerAuthTokenComplete(int rv) { DCHECK_NE(ERR_IO_PENDING, rv); if (rv == OK) - next_state_ = STATE_BUILD_REQUEST; + next_state_ = STATE_INIT_REQUEST_BODY; return rv; } @@ -742,18 +749,27 @@ void HttpNetworkTransaction::BuildRequestHeaders(bool using_proxy) { request_headers_.MergeFrom(request_->extra_headers); } -int HttpNetworkTransaction::DoBuildRequest() { - next_state_ = STATE_BUILD_REQUEST_COMPLETE; +int HttpNetworkTransaction::DoInitRequestBody() { + next_state_ = STATE_INIT_REQUEST_BODY_COMPLETE; request_body_.reset(NULL); + int rv = OK; if (request_->upload_data) { request_body_.reset(new UploadDataStream(request_->upload_data)); - const int error_code = request_body_->InitSync(); - if (error_code != OK) { - request_body_.reset(NULL); - return error_code; - } + rv = request_body_->Init(io_callback_); } + return rv; +} + +int HttpNetworkTransaction::DoInitRequestBodyComplete(int result) { + if (result == OK) + next_state_ = STATE_BUILD_REQUEST; + else + request_body_.reset(NULL); + return result; +} +int HttpNetworkTransaction::DoBuildRequest() { + next_state_ = STATE_BUILD_REQUEST_COMPLETE; headers_valid_ = false; // This is constructed lazily (instead of within our Start method), so that @@ -1399,6 +1415,8 @@ std::string HttpNetworkTransaction::DescribeState(State state) { switch (state) { STATE_CASE(STATE_CREATE_STREAM); STATE_CASE(STATE_CREATE_STREAM_COMPLETE); + STATE_CASE(STATE_INIT_REQUEST_BODY); + STATE_CASE(STATE_INIT_REQUEST_BODY_COMPLETE); STATE_CASE(STATE_BUILD_REQUEST); STATE_CASE(STATE_BUILD_REQUEST_COMPLETE); STATE_CASE(STATE_SEND_REQUEST); diff --git a/net/http/http_network_transaction.h b/net/http/http_network_transaction.h index cd34258..633a457 100644 --- a/net/http/http_network_transaction.h +++ b/net/http/http_network_transaction.h @@ -118,6 +118,8 @@ class NET_EXPORT_PRIVATE HttpNetworkTransaction STATE_GENERATE_PROXY_AUTH_TOKEN_COMPLETE, STATE_GENERATE_SERVER_AUTH_TOKEN, STATE_GENERATE_SERVER_AUTH_TOKEN_COMPLETE, + STATE_INIT_REQUEST_BODY, + STATE_INIT_REQUEST_BODY_COMPLETE, STATE_BUILD_REQUEST, STATE_BUILD_REQUEST_COMPLETE, STATE_SEND_REQUEST, @@ -151,6 +153,8 @@ class NET_EXPORT_PRIVATE HttpNetworkTransaction int DoGenerateProxyAuthTokenComplete(int result); int DoGenerateServerAuthToken(); int DoGenerateServerAuthTokenComplete(int result); + int DoInitRequestBody(); + int DoInitRequestBodyComplete(int result); int DoBuildRequest(); int DoBuildRequestComplete(int result); int DoSendRequest(); |