diff options
Diffstat (limited to 'net/flip')
-rw-r--r-- | net/flip/flip_network_transaction.cc | 5 | ||||
-rw-r--r-- | net/flip/flip_network_transaction.h | 2 | ||||
-rwxr-xr-x | net/flip/flip_stream.cc | 16 | ||||
-rwxr-xr-x | net/flip/flip_stream.h | 6 | ||||
-rw-r--r-- | net/flip/flip_stream_unittest.cc | 4 |
5 files changed, 21 insertions, 12 deletions
diff --git a/net/flip/flip_network_transaction.cc b/net/flip/flip_network_transaction.cc index 4b94b1f..4e0c3d2d 100644 --- a/net/flip/flip_network_transaction.cc +++ b/net/flip/flip_network_transaction.cc @@ -99,8 +99,7 @@ int FlipNetworkTransaction::Read(IOBuffer* buf, int buf_len, } const HttpResponseInfo* FlipNetworkTransaction::GetResponseInfo() const { - const HttpResponseInfo* response = stream_->GetResponseInfo(); - return (response->headers || response->ssl_info.cert) ? response : NULL; + return (response_.headers || response_.ssl_info.cert) ? &response_ : NULL; } LoadState FlipNetworkTransaction::GetLoadState() const { @@ -253,7 +252,7 @@ int FlipNetworkTransaction::DoSendRequest() { UploadDataStream* upload_data = request_->upload_data ? new UploadDataStream(request_->upload_data) : NULL; stream_ = flip_->GetOrCreateStream(*request_, upload_data); - return stream_->SendRequest(upload_data, &io_callback_); + return stream_->SendRequest(upload_data, &response_, &io_callback_); } int FlipNetworkTransaction::DoSendRequestComplete(int result) { diff --git a/net/flip/flip_network_transaction.h b/net/flip/flip_network_transaction.h index eab2f45..a48455a 100644 --- a/net/flip/flip_network_transaction.h +++ b/net/flip/flip_network_transaction.h @@ -15,6 +15,7 @@ #include "net/base/completion_callback.h" #include "net/base/load_states.h" #include "net/flip/flip_session.h" +#include "net/http/http_response_info.h" #include "net/http/http_transaction.h" namespace net { @@ -103,6 +104,7 @@ class FlipNetworkTransaction : public HttpTransaction { scoped_refptr<HttpNetworkSession> session_; const HttpRequestInfo* request_; + HttpResponseInfo response_; // The time the Start method was called. base::TimeTicks start_time_; diff --git a/net/flip/flip_stream.cc b/net/flip/flip_stream.cc index b0c7236..7288480 100755 --- a/net/flip/flip_stream.cc +++ b/net/flip/flip_stream.cc @@ -50,7 +50,7 @@ uint64 FlipStream::GetUploadProgress() const { } const HttpResponseInfo* FlipStream::GetResponseInfo() const { - return response_.get(); + return response_; } int FlipStream::ReadResponseHeaders(CompletionCallback* callback) { @@ -61,7 +61,7 @@ int FlipStream::ReadResponseHeaders(CompletionCallback* callback) { CHECK(!cancelled_); // The SYN_REPLY has already been received. - if (response_.get()) + if (response_->headers) return OK; io_state_ = STATE_READ_HEADERS; @@ -114,9 +114,13 @@ int FlipStream::ReadResponseBody( } int FlipStream::SendRequest(UploadDataStream* upload_data, + HttpResponseInfo* response, CompletionCallback* callback) { CHECK(callback); CHECK(!cancelled_); + CHECK(response); + + response_ = response; if (upload_data) { if (upload_data->size()) @@ -157,10 +161,10 @@ void FlipStream::Cancel() { void FlipStream::OnResponseReceived(const HttpResponseInfo& response) { metrics_.StartStream(); - CHECK(!response_.get()); + CHECK(!response_->headers); - response_.reset(new HttpResponseInfo); *response_ = response; // TODO(mbelshe): avoid copy. + DCHECK(response_->headers); if (io_state_ == STATE_NONE) { CHECK(pushed_); @@ -184,7 +188,7 @@ bool FlipStream::OnDataReceived(const char* data, int length) { // If we don't have a response, then the SYN_REPLY did not come through. // We cannot pass data up to the caller unless the reply headers have been // received. - if (!response_.get()) { + if (!response_->headers) { OnClose(ERR_SYN_REPLY_NOT_RECEIVED); return false; } @@ -359,7 +363,7 @@ int FlipStream::DoSendBodyComplete(int result) { int FlipStream::DoReadHeaders() { io_state_ = STATE_READ_HEADERS_COMPLETE; - return response_.get() ? OK : ERR_IO_PENDING; + return response_->headers ? OK : ERR_IO_PENDING; } int FlipStream::DoReadHeadersComplete(int result) { diff --git a/net/flip/flip_stream.h b/net/flip/flip_stream.h index 54c5cd4..3ebdc2e 100755 --- a/net/flip/flip_stream.h +++ b/net/flip/flip_stream.h @@ -51,7 +51,9 @@ class FlipStream : public base::RefCounted<FlipStream> { // body. |callback| is used when this completes asynchronously. Note that // the actual SYN_STREAM packet will have already been sent by this point. // Also note that FlipStream takes ownership of |upload_data|. - int SendRequest(UploadDataStream* upload_data, CompletionCallback* callback); + int SendRequest(UploadDataStream* upload_data, + HttpResponseInfo* response, + CompletionCallback* callback); // Reads the response headers. Returns a net error code. int ReadResponseHeaders(CompletionCallback* callback); @@ -164,7 +166,7 @@ class FlipStream : public base::RefCounted<FlipStream> { scoped_refptr<FlipSession> session_; - scoped_ptr<HttpResponseInfo> response_; + HttpResponseInfo* response_; scoped_ptr<UploadDataStream> request_body_stream_; bool response_complete_; // TODO(mbelshe): fold this into the io_state. diff --git a/net/flip/flip_stream_unittest.cc b/net/flip/flip_stream_unittest.cc index 311b51c..bb64d63 100644 --- a/net/flip/flip_stream_unittest.cc +++ b/net/flip/flip_stream_unittest.cc @@ -13,6 +13,7 @@ #include "net/flip/flip_session_pool.h" #include "net/http/http_network_session.h" #include "net/http/http_request_info.h" +#include "net/http/http_response_info.h" #include "net/proxy/proxy_service.h" #include "net/socket/socket_test_util.h" #include "testing/gtest/include/gtest/gtest.h" @@ -103,9 +104,10 @@ TEST_F(FlipStreamTest, SendRequest) { request.method = "GET"; request.url = GURL("http://www.google.com/"); TestCompletionCallback callback; + HttpResponseInfo response; scoped_refptr<FlipStream> stream(new FlipStream(session, 1, false)); - EXPECT_EQ(ERR_IO_PENDING, stream->SendRequest(NULL, &callback)); + EXPECT_EQ(ERR_IO_PENDING, stream->SendRequest(NULL, &response, &callback)); // Need to manually remove the flip session since normally it gets removed on // socket close/error, but we aren't communicating over a socket here. |