summaryrefslogtreecommitdiffstats
path: root/net/http
diff options
context:
space:
mode:
authorrvargas@google.com <rvargas@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-02-12 00:03:19 +0000
committerrvargas@google.com <rvargas@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-02-12 00:03:19 +0000
commit74a85ce422d6b52a79b3cf159203ec7fa35c15ee (patch)
treee35947baf74dd4325b926bf44a3364ed3cfe4038 /net/http
parent39008c0d7c9f627b6eeef41bd7ddb78b7ebe086d (diff)
downloadchromium_src-74a85ce422d6b52a79b3cf159203ec7fa35c15ee.zip
chromium_src-74a85ce422d6b52a79b3cf159203ec7fa35c15ee.tar.gz
chromium_src-74a85ce422d6b52a79b3cf159203ec7fa35c15ee.tar.bz2
Extend the IOBuffer to the disk cache.
This is cleanup from bug 5325. Original code review: http://codereview.chromium.org/20134/show Review URL: http://codereview.chromium.org/20251 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@9626 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/http')
-rw-r--r--net/http/http_cache.cc33
-rw-r--r--net/http/http_cache_unittest.cc8
-rw-r--r--net/http/http_network_transaction.cc1
-rw-r--r--net/http/http_transaction.h1
-rw-r--r--net/http/http_transaction_unittest.h1
5 files changed, 21 insertions, 23 deletions
diff --git a/net/http/http_cache.cc b/net/http/http_cache.cc
index accd7da..f1132fc 100644
--- a/net/http/http_cache.cc
+++ b/net/http/http_cache.cc
@@ -12,6 +12,7 @@
#include "base/ref_counted.h"
#include "base/string_util.h"
#include "base/time.h"
+#include "net/base/io_buffer.h"
#include "net/base/load_flags.h"
#include "net/base/net_errors.h"
#include "net/disk_cache/disk_cache.h"
@@ -168,7 +169,6 @@ class HttpCache::Transaction : public HttpTransaction {
network_trans_(NULL),
callback_(NULL),
mode_(NONE),
- read_buf_(NULL),
read_offset_(0),
effective_load_flags_(0),
final_upload_progress_(0),
@@ -278,13 +278,13 @@ class HttpCache::Transaction : public HttpTransaction {
// Called to write data to the cache entry. If the write fails, then the
// cache entry is destroyed. Future calls to this function will just do
// nothing without side-effect.
- void WriteToEntry(int index, int offset, const char* data, int data_len);
+ void WriteToEntry(int index, int offset, IOBuffer* data, int data_len);
// Called to write response_ to the cache entry.
void WriteResponseInfoToEntry();
// Called to append response data to the cache entry.
- void AppendResponseDataToEntry(const char* data, int data_len);
+ void AppendResponseDataToEntry(IOBuffer* data, int data_len);
// Called when we are done writing to the cache entry.
void DoneWritingToEntry(bool success);
@@ -308,7 +308,7 @@ class HttpCache::Transaction : public HttpTransaction {
HttpResponseInfo auth_response_;
std::string cache_key_;
Mode mode_;
- char* read_buf_;
+ scoped_refptr<IOBuffer> read_buf_;
int read_offset_;
int effective_load_flags_;
uint64 final_upload_progress_;
@@ -435,23 +435,20 @@ int HttpCache::Transaction::Read(IOBuffer* buf, int buf_len,
case WRITE:
DCHECK(network_trans_.get());
rv = network_trans_->Read(buf, buf_len, &network_read_callback_);
- read_buf_ = buf->data();
+ read_buf_ = buf;
if (rv >= 0)
OnNetworkReadCompleted(rv);
break;
case READ:
DCHECK(entry_);
cache_read_callback_->AddRef(); // Balanced in OnCacheReadCompleted.
- cache_read_callback_->UseBuffer(buf);
rv = entry_->disk_entry->ReadData(kResponseContentIndex, read_offset_,
- buf->data(), buf_len,
- cache_read_callback_);
- read_buf_ = buf->data();
+ buf, buf_len, cache_read_callback_);
+ read_buf_ = buf;
if (rv >= 0) {
OnCacheReadCompleted(rv);
} else if (rv != ERR_IO_PENDING) {
cache_read_callback_->Release();
- cache_read_callback_->ReleaseBuffer();
}
break;
default:
@@ -777,7 +774,7 @@ int HttpCache::Transaction::ReadResponseInfoFromEntry() {
}
void HttpCache::Transaction::WriteToEntry(int index, int offset,
- const char* data, int data_len) {
+ IOBuffer* data, int data_len) {
if (!entry_)
return;
@@ -820,7 +817,7 @@ void HttpCache::Transaction::WriteResponseInfoToEntry() {
}
}
-void HttpCache::Transaction::AppendResponseDataToEntry(const char* data,
+void HttpCache::Transaction::AppendResponseDataToEntry(IOBuffer* data,
int data_len) {
if (!entry_)
return;
@@ -909,7 +906,6 @@ void HttpCache::Transaction::OnNetworkReadCompleted(int result) {
void HttpCache::Transaction::OnCacheReadCompleted(int result) {
DCHECK(cache_);
cache_read_callback_->Release(); // Balance the AddRef() from Start().
- cache_read_callback_->ReleaseBuffer();
if (result > 0) {
read_offset_ += result;
@@ -1001,16 +997,14 @@ bool HttpCache::ReadResponseInfo(disk_cache::Entry* disk_entry,
HttpResponseInfo* response_info) {
int size = disk_entry->GetDataSize(kResponseInfoIndex);
- std::string data;
- int rv = disk_entry->ReadData(kResponseInfoIndex, 0,
- WriteInto(&data, size + 1),
- size, NULL);
+ scoped_refptr<IOBuffer> buffer = new IOBuffer(size);
+ int rv = disk_entry->ReadData(kResponseInfoIndex, 0, buffer, size, NULL);
if (rv != size) {
DLOG(ERROR) << "ReadData failed: " << rv;
return false;
}
- Pickle pickle(data.data(), static_cast<int>(data.size()));
+ Pickle pickle(buffer->data(), size);
void* iter = NULL;
// read flags and verify version
@@ -1108,7 +1102,8 @@ bool HttpCache::WriteResponseInfo(disk_cache::Entry* disk_entry,
if (response_info->vary_data.is_valid())
response_info->vary_data.Persist(&pickle);
- const char* data = static_cast<const char*>(pickle.data());
+ scoped_refptr<WrappedIOBuffer> data = new WrappedIOBuffer(
+ reinterpret_cast<const char*>(pickle.data()));
int len = static_cast<int>(pickle.size());
return disk_entry->WriteData(kResponseInfoIndex, 0, data, len, NULL,
diff --git a/net/http/http_cache_unittest.cc b/net/http/http_cache_unittest.cc
index 0a71854..91bec6e 100644
--- a/net/http/http_cache_unittest.cc
+++ b/net/http/http_cache_unittest.cc
@@ -65,7 +65,7 @@ class MockDiskEntry : public disk_cache::Entry,
return static_cast<int32>(data_[index].size());
}
- virtual int ReadData(int index, int offset, char* buf, int buf_len,
+ virtual int ReadData(int index, int offset, net::IOBuffer* buf, int buf_len,
net::CompletionCallback* callback) {
DCHECK(index >= 0 && index < 2);
@@ -75,7 +75,7 @@ class MockDiskEntry : public disk_cache::Entry,
return 0;
int num = std::min(buf_len, static_cast<int>(data_[index].size()) - offset);
- memcpy(buf, &data_[index][offset], num);
+ memcpy(buf->data(), &data_[index][offset], num);
if (!callback || (test_mode_ & TEST_MODE_SYNC_CACHE_READ))
return num;
@@ -84,7 +84,7 @@ class MockDiskEntry : public disk_cache::Entry,
return net::ERR_IO_PENDING;
}
- virtual int WriteData(int index, int offset, const char* buf, int buf_len,
+ virtual int WriteData(int index, int offset, net::IOBuffer* buf, int buf_len,
net::CompletionCallback* callback, bool truncate) {
DCHECK(index >= 0 && index < 2);
DCHECK(truncate);
@@ -94,7 +94,7 @@ class MockDiskEntry : public disk_cache::Entry,
data_[index].resize(offset + buf_len);
if (buf_len)
- memcpy(&data_[index][offset], buf, buf_len);
+ memcpy(&data_[index][offset], buf->data(), buf_len);
return buf_len;
}
diff --git a/net/http/http_network_transaction.cc b/net/http/http_network_transaction.cc
index 9667cb0..fb9489c 100644
--- a/net/http/http_network_transaction.cc
+++ b/net/http/http_network_transaction.cc
@@ -13,6 +13,7 @@
#include "net/base/connection_type_histograms.h"
#include "net/base/dns_resolution_observer.h"
#include "net/base/host_resolver.h"
+#include "net/base/io_buffer.h"
#include "net/base/load_flags.h"
#include "net/base/net_util.h"
#include "net/base/ssl_client_socket.h"
diff --git a/net/http/http_transaction.h b/net/http/http_transaction.h
index 46c7671..ffb25c6 100644
--- a/net/http/http_transaction.h
+++ b/net/http/http_transaction.h
@@ -12,6 +12,7 @@ namespace net {
class HttpRequestInfo;
class HttpResponseInfo;
+class IOBuffer;
// Represents a single HTTP transaction (i.e., a single request/response pair).
// HTTP redirects are not followed and authentication challenges are not
diff --git a/net/http/http_transaction_unittest.h b/net/http/http_transaction_unittest.h
index 0c26178..9ef6bf8 100644
--- a/net/http/http_transaction_unittest.h
+++ b/net/http/http_transaction_unittest.h
@@ -13,6 +13,7 @@
#include "base/compiler_specific.h"
#include "base/message_loop.h"
#include "base/string_util.h"
+#include "net/base/io_buffer.h"
#include "net/base/net_errors.h"
#include "net/base/load_flags.h"
#include "net/base/test_completion_callback.h"