| Index: net/http/disk_cache_based_ssl_host_info.cc
|
| diff --git a/net/http/disk_cache_based_ssl_host_info.cc b/net/http/disk_cache_based_ssl_host_info.cc
|
| index 1b1dfaf2956a8b8d371f97c7be9c9cf6b690ba4f..1a875cbab5abdbb6ee1cabec1905fa68a3cfdd6b 100644
|
| --- a/net/http/disk_cache_based_ssl_host_info.cc
|
| +++ b/net/http/disk_cache_based_ssl_host_info.cc
|
| @@ -13,6 +13,24 @@
|
|
|
| namespace net {
|
|
|
| +DiskCacheBasedSSLHostInfo::CallbackImpl::CallbackImpl(
|
| + const base::WeakPtr<DiskCacheBasedSSLHostInfo>& obj,
|
| + void (DiskCacheBasedSSLHostInfo::*meth) (int))
|
| + : obj_(obj),
|
| + meth_(meth) {
|
| +}
|
| +
|
| +DiskCacheBasedSSLHostInfo::CallbackImpl::~CallbackImpl() {}
|
| +
|
| +void DiskCacheBasedSSLHostInfo::CallbackImpl::RunWithParams(
|
| + const Tuple1<int>& params) {
|
| + if (!obj_) {
|
| + delete this;
|
| + } else {
|
| + DispatchToMethod(obj_.get(), meth_, params);
|
| + }
|
| +}
|
| +
|
| DiskCacheBasedSSLHostInfo::DiskCacheBasedSSLHostInfo(
|
| const std::string& hostname,
|
| const SSLConfig& ssl_config,
|
| @@ -37,6 +55,35 @@ void DiskCacheBasedSSLHostInfo::Start() {
|
| DoLoop(OK);
|
| }
|
|
|
| +int DiskCacheBasedSSLHostInfo::WaitForDataReady(CompletionCallback* callback) {
|
| + DCHECK(CalledOnValidThread());
|
| + DCHECK(state_ != GET_BACKEND);
|
| +
|
| + if (ready_)
|
| + return OK;
|
| + if (callback) {
|
| + DCHECK(!user_callback_);
|
| + user_callback_ = callback;
|
| + }
|
| + return ERR_IO_PENDING;
|
| +}
|
| +
|
| +void DiskCacheBasedSSLHostInfo::Persist() {
|
| + DCHECK(CalledOnValidThread());
|
| + DCHECK(state_ != GET_BACKEND);
|
| +
|
| + DCHECK(new_data_.empty());
|
| + CHECK(ready_);
|
| + DCHECK(user_callback_ == NULL);
|
| + new_data_ = Serialize();
|
| +
|
| + if (!backend_)
|
| + return;
|
| +
|
| + state_ = CREATE;
|
| + DoLoop(OK);
|
| +}
|
| +
|
| DiskCacheBasedSSLHostInfo::~DiskCacheBasedSSLHostInfo() {
|
| DCHECK(!user_callback_);
|
| if (entry_)
|
| @@ -95,24 +142,6 @@ void DiskCacheBasedSSLHostInfo::DoLoop(int rv) {
|
| } while (rv != ERR_IO_PENDING && state_ != NONE);
|
| }
|
|
|
| -bool DiskCacheBasedSSLHostInfo::IsCallbackPending() const {
|
| - switch (state_) {
|
| - case GET_BACKEND_COMPLETE:
|
| - case OPEN_COMPLETE:
|
| - case READ_COMPLETE:
|
| - case CREATE_COMPLETE:
|
| - case WRITE_COMPLETE:
|
| - return true;
|
| - default:
|
| - return false;
|
| - }
|
| -}
|
| -
|
| -int DiskCacheBasedSSLHostInfo::DoGetBackend() {
|
| - state_ = GET_BACKEND_COMPLETE;
|
| - return http_cache_->GetBackend(callback_->backend_pointer(), callback_);
|
| -}
|
| -
|
| int DiskCacheBasedSSLHostInfo::DoGetBackendComplete(int rv) {
|
| if (rv == OK) {
|
| backend_ = callback_->backend();
|
| @@ -123,11 +152,6 @@ int DiskCacheBasedSSLHostInfo::DoGetBackendComplete(int rv) {
|
| return OK;
|
| }
|
|
|
| -int DiskCacheBasedSSLHostInfo::DoOpen() {
|
| - state_ = OPEN_COMPLETE;
|
| - return backend_->OpenEntry(key(), callback_->entry_pointer(), callback_);
|
| -}
|
| -
|
| int DiskCacheBasedSSLHostInfo::DoOpenComplete(int rv) {
|
| if (rv == OK) {
|
| entry_ = callback_->entry();
|
| @@ -139,6 +163,39 @@ int DiskCacheBasedSSLHostInfo::DoOpenComplete(int rv) {
|
| return OK;
|
| }
|
|
|
| +int DiskCacheBasedSSLHostInfo::DoReadComplete(int rv) {
|
| + if (rv > 0)
|
| + data_ = std::string(read_buffer_->data(), rv);
|
| +
|
| + state_ = WAIT_FOR_DATA_READY_DONE;
|
| + return OK;
|
| +}
|
| +
|
| +int DiskCacheBasedSSLHostInfo::DoWriteComplete(int rv) {
|
| + state_ = SET_DONE;
|
| + return OK;
|
| +}
|
| +
|
| +int DiskCacheBasedSSLHostInfo::DoCreateComplete(int rv) {
|
| + if (rv != OK) {
|
| + state_ = SET_DONE;
|
| + } else {
|
| + entry_ = callback_->entry();
|
| + state_ = WRITE;
|
| + }
|
| + return OK;
|
| +}
|
| +
|
| +int DiskCacheBasedSSLHostInfo::DoGetBackend() {
|
| + state_ = GET_BACKEND_COMPLETE;
|
| + return http_cache_->GetBackend(callback_->backend_pointer(), callback_);
|
| +}
|
| +
|
| +int DiskCacheBasedSSLHostInfo::DoOpen() {
|
| + state_ = OPEN_COMPLETE;
|
| + return backend_->OpenEntry(key(), callback_->entry_pointer(), callback_);
|
| +}
|
| +
|
| int DiskCacheBasedSSLHostInfo::DoRead() {
|
| const int32 size = entry_->GetDataSize(0 /* index */);
|
| if (!size) {
|
| @@ -152,12 +209,19 @@ int DiskCacheBasedSSLHostInfo::DoRead() {
|
| size, callback_);
|
| }
|
|
|
| -int DiskCacheBasedSSLHostInfo::DoReadComplete(int rv) {
|
| - if (rv > 0)
|
| - data_ = std::string(read_buffer_->data(), rv);
|
| +int DiskCacheBasedSSLHostInfo::DoWrite() {
|
| + write_buffer_ = new IOBuffer(new_data_.size());
|
| + memcpy(write_buffer_->data(), new_data_.data(), new_data_.size());
|
| + state_ = WRITE_COMPLETE;
|
|
|
| - state_ = WAIT_FOR_DATA_READY_DONE;
|
| - return OK;
|
| + return entry_->WriteData(0 /* index */, 0 /* offset */, write_buffer_,
|
| + new_data_.size(), callback_, true /* truncate */);
|
| +}
|
| +
|
| +int DiskCacheBasedSSLHostInfo::DoCreate() {
|
| + DCHECK(entry_ == NULL);
|
| + state_ = CREATE_COMPLETE;
|
| + return backend_->CreateEntry(key(), callback_->entry_pointer(), callback_);
|
| }
|
|
|
| int DiskCacheBasedSSLHostInfo::WaitForDataReadyDone() {
|
| @@ -181,65 +245,6 @@ int DiskCacheBasedSSLHostInfo::WaitForDataReadyDone() {
|
| return OK;
|
| }
|
|
|
| -int DiskCacheBasedSSLHostInfo::WaitForDataReady(CompletionCallback* callback) {
|
| - DCHECK(CalledOnValidThread());
|
| - DCHECK(state_ != GET_BACKEND);
|
| -
|
| - if (ready_)
|
| - return OK;
|
| - if (callback) {
|
| - DCHECK(!user_callback_);
|
| - user_callback_ = callback;
|
| - }
|
| - return ERR_IO_PENDING;
|
| -}
|
| -
|
| -void DiskCacheBasedSSLHostInfo::Persist() {
|
| - DCHECK(CalledOnValidThread());
|
| - DCHECK(state_ != GET_BACKEND);
|
| -
|
| - DCHECK(new_data_.empty());
|
| - CHECK(ready_);
|
| - DCHECK(user_callback_ == NULL);
|
| - new_data_ = Serialize();
|
| -
|
| - if (!backend_)
|
| - return;
|
| -
|
| - state_ = CREATE;
|
| - DoLoop(OK);
|
| -}
|
| -
|
| -int DiskCacheBasedSSLHostInfo::DoCreate() {
|
| - DCHECK(entry_ == NULL);
|
| - state_ = CREATE_COMPLETE;
|
| - return backend_->CreateEntry(key(), callback_->entry_pointer(), callback_);
|
| -}
|
| -
|
| -int DiskCacheBasedSSLHostInfo::DoCreateComplete(int rv) {
|
| - if (rv != OK) {
|
| - state_ = SET_DONE;
|
| - } else {
|
| - entry_ = callback_->entry();
|
| - state_ = WRITE;
|
| - }
|
| - return OK;
|
| -}
|
| -
|
| -int DiskCacheBasedSSLHostInfo::DoWrite() {
|
| - write_buffer_ = new IOBuffer(new_data_.size());
|
| - memcpy(write_buffer_->data(), new_data_.data(), new_data_.size());
|
| - state_ = WRITE_COMPLETE;
|
| -
|
| - return entry_->WriteData(0 /* index */, 0 /* offset */, write_buffer_,
|
| - new_data_.size(), callback_, true /* truncate */);
|
| -}
|
| -
|
| -int DiskCacheBasedSSLHostInfo::DoWriteComplete(int rv) {
|
| - state_ = SET_DONE;
|
| - return OK;
|
| -}
|
| -
|
| int DiskCacheBasedSSLHostInfo::SetDone() {
|
| if (entry_)
|
| entry_->Close();
|
| @@ -248,4 +253,17 @@ int DiskCacheBasedSSLHostInfo::SetDone() {
|
| return OK;
|
| }
|
|
|
| +bool DiskCacheBasedSSLHostInfo::IsCallbackPending() const {
|
| + switch (state_) {
|
| + case GET_BACKEND_COMPLETE:
|
| + case OPEN_COMPLETE:
|
| + case READ_COMPLETE:
|
| + case CREATE_COMPLETE:
|
| + case WRITE_COMPLETE:
|
| + return true;
|
| + default:
|
| + return false;
|
| + }
|
| +}
|
| +
|
| } // namespace net
|
|
|