Index: net/http/http_cache.cc |
diff --git a/net/http/http_cache.cc b/net/http/http_cache.cc |
index d7461193762e31baf6c9c7608f1cc7ce345b9235..798756a7aa5e7e07520a37428162a5e455000fd4 100644 |
--- a/net/http/http_cache.cc |
+++ b/net/http/http_cache.cc |
@@ -30,6 +30,7 @@ |
#include "net/base/net_errors.h" |
#include "net/base/upload_data_stream.h" |
#include "net/disk_cache/disk_cache.h" |
+#include "net/disk_cache/pending_create_entry.h" |
#include "net/http/http_cache_transaction.h" |
#include "net/http/http_network_layer.h" |
#include "net/http/http_network_session.h" |
@@ -102,7 +103,6 @@ struct HttpCache::PendingOp { |
enum WorkItemOperation { |
WI_CREATE_BACKEND, |
WI_OPEN_ENTRY, |
- WI_CREATE_ENTRY, |
WI_DOOM_ENTRY |
}; |
@@ -712,27 +712,10 @@ int HttpCache::OpenEntry(const std::string& key, ActiveEntry** entry, |
int HttpCache::CreateEntry(const std::string& key, ActiveEntry** entry, |
Transaction* trans) { |
DCHECK(!FindActiveEntry(key)); |
- |
- WorkItem* item = new WorkItem(WI_CREATE_ENTRY, trans, entry); |
- PendingOp* pending_op = GetPendingOp(key); |
- if (pending_op->writer) { |
- pending_op->pending_queue.push_back(item); |
- return ERR_IO_PENDING; |
- } |
- |
- DCHECK(pending_op->pending_queue.empty()); |
- |
- pending_op->writer = item; |
- pending_op->callback = base::Bind(&HttpCache::OnPendingOpComplete, |
- AsWeakPtr(), pending_op); |
- |
- int rv = disk_cache_->CreateEntry(key, &(pending_op->disk_entry), |
- pending_op->callback); |
- if (rv != ERR_IO_PENDING) { |
- item->ClearTransaction(); |
- pending_op->callback.Run(rv); |
- } |
- |
+ disk_cache::Entry* new_entry; |
+ int rv = disk_cache::PendingCreateEntry(disk_cache_.get(), key, &new_entry); |
rvargas (doing something else)
2013/01/23 22:04:09
why is this not calling CreateEntry?. I mean, if y
gavinp
2013/01/24 07:38:10
Good point. And if we want to do A/B tests (and we
|
+ if (rv == net::OK) |
+ *entry = ActivateEntry(new_entry); |
return rv; |
} |
@@ -1000,8 +983,6 @@ void HttpCache::OnIOComplete(int result, PendingOp* pending_op) { |
entry = ActivateEntry(pending_op->disk_entry); |
} else { |
// The writer transaction is gone. |
- if (op == WI_CREATE_ENTRY) |
- pending_op->disk_entry->Doom(); |
pending_op->disk_entry->Close(); |
pending_op->disk_entry = NULL; |
fail_requests = true; |
@@ -1043,28 +1024,7 @@ void HttpCache::OnIOComplete(int result, PendingOp* pending_op) { |
continue; |
} |
- if (item->operation() == WI_CREATE_ENTRY) { |
- if (result == OK) { |
- // A second Create request, but the first request succeeded. |
- item->NotifyTransaction(ERR_CACHE_CREATE_FAILURE, NULL); |
- } else { |
- if (op != WI_CREATE_ENTRY) { |
- // Failed Open followed by a Create. |
- item->NotifyTransaction(ERR_CACHE_RACE, NULL); |
- fail_requests = true; |
- } else { |
- item->NotifyTransaction(result, entry); |
- } |
- } |
- } else { |
- if (op == WI_CREATE_ENTRY && result != OK) { |
- // Failed Create followed by an Open. |
- item->NotifyTransaction(ERR_CACHE_RACE, NULL); |
- fail_requests = true; |
- } else { |
- item->NotifyTransaction(result, entry); |
- } |
- } |
+ item->NotifyTransaction(result, entry); |
} |
} |