| Index: net/http/http_pipelined_connection_impl.cc
|
| diff --git a/net/http/http_pipelined_connection_impl.cc b/net/http/http_pipelined_connection_impl.cc
|
| index 33f2ef62baabfdc8ffc4f946e7d20f6f5b7fcccc..8ed9e79e30dc6b146fe2490d318220372eea5f83 100644
|
| --- a/net/http/http_pipelined_connection_impl.cc
|
| +++ b/net/http/http_pipelined_connection_impl.cc
|
| @@ -223,8 +223,10 @@ int HttpPipelinedConnectionImpl::DoSendComplete(int result) {
|
| FROM_HERE,
|
| method_factory_.NewRunnableMethod(
|
| &HttpPipelinedConnectionImpl::FireUserCallback,
|
| - send_user_callback_,
|
| + deferred_request.pipeline_id,
|
| result));
|
| + stream_info_map_[deferred_request.pipeline_id].pending_user_callback =
|
| + send_user_callback_;
|
| send_user_callback_ = NULL;
|
| }
|
| if (result < OK) {
|
| @@ -348,11 +350,12 @@ int HttpPipelinedConnectionImpl::DoReadNextHeaders(int result) {
|
| if (rv != ERR_IO_PENDING && result == ERR_IO_PENDING) {
|
| read_next_state_ = READ_STATE_WAITING_FOR_CLOSE;
|
| read_user_callback_ = stream_info_map_[pipeline_id].read_headers_callback;
|
| + stream_info_map_[pipeline_id].pending_user_callback = read_user_callback_;
|
| MessageLoop::current()->PostTask(
|
| FROM_HERE,
|
| method_factory_.NewRunnableMethod(
|
| &HttpPipelinedConnectionImpl::FireUserCallback,
|
| - read_user_callback_,
|
| + pipeline_id,
|
| rv));
|
| }
|
| return rv;
|
| @@ -361,12 +364,14 @@ int HttpPipelinedConnectionImpl::DoReadNextHeaders(int result) {
|
| int HttpPipelinedConnectionImpl::DoReadHeadersComplete(int result) {
|
| read_next_state_ = READ_STATE_WAITING_FOR_CLOSE;
|
| if (read_user_callback_) {
|
| + int pipeline_id = request_order_.front();
|
| MessageLoop::current()->PostTask(
|
| FROM_HERE,
|
| method_factory_.NewRunnableMethod(
|
| &HttpPipelinedConnectionImpl::FireUserCallback,
|
| - read_user_callback_,
|
| + pipeline_id,
|
| result));
|
| + stream_info_map_[pipeline_id].pending_user_callback = read_user_callback_;
|
| read_user_callback_ = NULL;
|
| }
|
| return result;
|
| @@ -418,11 +423,13 @@ int HttpPipelinedConnectionImpl::DoEvictPendingReadHeaders(int result) {
|
| continue;
|
| }
|
| if (stream_info_map_[evicted_id].state != STREAM_CLOSED) {
|
| + stream_info_map_[evicted_id].pending_user_callback =
|
| + stream_info_map_[evicted_id].read_headers_callback;
|
| MessageLoop::current()->PostTask(
|
| FROM_HERE,
|
| method_factory_.NewRunnableMethod(
|
| &HttpPipelinedConnectionImpl::FireUserCallback,
|
| - stream_info_map_[evicted_id].read_headers_callback,
|
| + evicted_id,
|
| ERR_PIPELINE_EVICTION));
|
| }
|
| stream_info_map_[evicted_id].read_headers_callback = NULL;
|
| @@ -560,11 +567,12 @@ void HttpPipelinedConnectionImpl::GetSSLCertRequestInfo(
|
| cert_request_info);
|
| }
|
|
|
| -void HttpPipelinedConnectionImpl::FireUserCallback(
|
| - OldCompletionCallback* callback,
|
| - int result) {
|
| - CHECK(callback);
|
| - callback->Run(result);
|
| +void HttpPipelinedConnectionImpl::FireUserCallback(int pipeline_id,
|
| + int result) {
|
| + if (ContainsKey(stream_info_map_, pipeline_id)) {
|
| + CHECK(stream_info_map_[pipeline_id].pending_user_callback);
|
| + stream_info_map_[pipeline_id].pending_user_callback->Run(result);
|
| + }
|
| }
|
|
|
| int HttpPipelinedConnectionImpl::depth() const {
|
|
|