Index: net/http/disk_cache_based_ssl_host_info.cc |
=================================================================== |
--- net/http/disk_cache_based_ssl_host_info.cc (revision 111204) |
+++ net/http/disk_cache_based_ssl_host_info.cc (working copy) |
@@ -44,6 +44,7 @@ |
&DiskCacheBasedSSLHostInfo::OnIOComplete)), |
state_(GET_BACKEND), |
ready_(false), |
+ found_entry_(false), |
hostname_(hostname), |
http_cache_(http_cache), |
backend_(NULL), |
@@ -82,7 +83,7 @@ |
if (!backend_) |
return; |
- state_ = CREATE; |
+ state_ = CREATE_OR_OPEN; |
DoLoop(OK); |
} |
@@ -132,11 +133,11 @@ |
case WAIT_FOR_DATA_READY_DONE: |
rv = DoWaitForDataReadyDone(); |
break; |
- case CREATE: |
- rv = DoCreate(); |
+ case CREATE_OR_OPEN: |
+ rv = DoCreateOrOpen(); |
break; |
- case CREATE_COMPLETE: |
- rv = DoCreateComplete(rv); |
+ case CREATE_OR_OPEN_COMPLETE: |
+ rv = DoCreateOrOpenComplete(rv); |
break; |
case WRITE: |
rv = DoWrite(); |
@@ -170,6 +171,7 @@ |
if (rv == OK) { |
entry_ = callback_->entry(); |
state_ = READ; |
+ found_entry_ = true; |
} else { |
state_ = WAIT_FOR_DATA_READY_DONE; |
} |
@@ -190,7 +192,7 @@ |
return OK; |
} |
-int DiskCacheBasedSSLHostInfo::DoCreateComplete(int rv) { |
+int DiskCacheBasedSSLHostInfo::DoCreateOrOpenComplete(int rv) { |
if (rv != OK) { |
state_ = SET_DONE; |
} else { |
@@ -232,9 +234,12 @@ |
new_data_.size(), callback_, true /* truncate */); |
} |
-int DiskCacheBasedSSLHostInfo::DoCreate() { |
+int DiskCacheBasedSSLHostInfo::DoCreateOrOpen() { |
DCHECK(entry_ == NULL); |
- state_ = CREATE_COMPLETE; |
+ state_ = CREATE_OR_OPEN_COMPLETE; |
+ if (found_entry_) |
+ return backend_->OpenEntry(key(), callback_->entry_pointer(), callback_); |
+ |
return backend_->CreateEntry(key(), callback_->entry_pointer(), callback_); |
} |
@@ -264,7 +269,7 @@ |
case GET_BACKEND_COMPLETE: |
case OPEN_COMPLETE: |
case READ_COMPLETE: |
- case CREATE_COMPLETE: |
+ case CREATE_OR_OPEN_COMPLETE: |
case WRITE_COMPLETE: |
return true; |
default: |