OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/http/http_cache.h" | 5 #include "net/http/http_cache.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/compiler_specific.h" | 9 #include "base/compiler_specific.h" |
10 | 10 |
(...skipping 12 matching lines...) Expand all Loading... |
23 #include "base/pickle.h" | 23 #include "base/pickle.h" |
24 #include "base/stl_util.h" | 24 #include "base/stl_util.h" |
25 #include "base/string_number_conversions.h" | 25 #include "base/string_number_conversions.h" |
26 #include "base/string_util.h" | 26 #include "base/string_util.h" |
27 #include "base/stringprintf.h" | 27 #include "base/stringprintf.h" |
28 #include "net/base/io_buffer.h" | 28 #include "net/base/io_buffer.h" |
29 #include "net/base/load_flags.h" | 29 #include "net/base/load_flags.h" |
30 #include "net/base/net_errors.h" | 30 #include "net/base/net_errors.h" |
31 #include "net/base/upload_data_stream.h" | 31 #include "net/base/upload_data_stream.h" |
32 #include "net/disk_cache/disk_cache.h" | 32 #include "net/disk_cache/disk_cache.h" |
| 33 #include "net/disk_cache/pending_create_entry.h" |
33 #include "net/http/http_cache_transaction.h" | 34 #include "net/http/http_cache_transaction.h" |
34 #include "net/http/http_network_layer.h" | 35 #include "net/http/http_network_layer.h" |
35 #include "net/http/http_network_session.h" | 36 #include "net/http/http_network_session.h" |
36 #include "net/http/http_request_info.h" | 37 #include "net/http/http_request_info.h" |
37 #include "net/http/http_response_headers.h" | 38 #include "net/http/http_response_headers.h" |
38 #include "net/http/http_response_info.h" | 39 #include "net/http/http_response_info.h" |
39 #include "net/http/http_util.h" | 40 #include "net/http/http_util.h" |
40 | 41 |
41 namespace net { | 42 namespace net { |
42 | 43 |
(...skipping 661 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
704 if (rv != ERR_IO_PENDING) { | 705 if (rv != ERR_IO_PENDING) { |
705 item->ClearTransaction(); | 706 item->ClearTransaction(); |
706 pending_op->callback.Run(rv); | 707 pending_op->callback.Run(rv); |
707 } | 708 } |
708 | 709 |
709 return rv; | 710 return rv; |
710 } | 711 } |
711 | 712 |
712 int HttpCache::CreateEntry(const std::string& key, ActiveEntry** entry, | 713 int HttpCache::CreateEntry(const std::string& key, ActiveEntry** entry, |
713 Transaction* trans) { | 714 Transaction* trans) { |
714 DCHECK(!FindActiveEntry(key)); | 715 if (FindActiveEntry(key)) { |
| 716 return ERR_CACHE_RACE; |
| 717 } |
715 | 718 |
716 WorkItem* item = new WorkItem(WI_CREATE_ENTRY, trans, entry); | 719 WorkItem* item = new WorkItem(WI_CREATE_ENTRY, trans, entry); |
717 PendingOp* pending_op = GetPendingOp(key); | 720 PendingOp* pending_op = GetPendingOp(key); |
718 if (pending_op->writer) { | 721 if (pending_op->writer) { |
719 pending_op->pending_queue.push_back(item); | 722 pending_op->pending_queue.push_back(item); |
720 return ERR_IO_PENDING; | 723 return ERR_IO_PENDING; |
721 } | 724 } |
722 | 725 |
723 DCHECK(pending_op->pending_queue.empty()); | 726 DCHECK(pending_op->pending_queue.empty()); |
724 | 727 |
725 pending_op->writer = item; | 728 pending_op->writer = item; |
726 pending_op->callback = base::Bind(&HttpCache::OnPendingOpComplete, | 729 pending_op->callback = base::Bind(&HttpCache::OnPendingOpComplete, |
727 AsWeakPtr(), pending_op); | 730 AsWeakPtr(), pending_op); |
728 | 731 |
729 int rv = disk_cache_->CreateEntry(key, &(pending_op->disk_entry), | 732 int rv = disk_cache::PendingCreateEntry(disk_cache_.get(), key, |
730 pending_op->callback); | 733 &(pending_op->disk_entry)); |
731 if (rv != ERR_IO_PENDING) { | 734 if (rv != ERR_IO_PENDING) { |
732 item->ClearTransaction(); | 735 item->ClearTransaction(); |
733 pending_op->callback.Run(rv); | 736 pending_op->callback.Run(rv); |
734 } | 737 } |
735 | 738 |
736 return rv; | 739 return rv; |
737 } | 740 } |
738 | 741 |
739 void HttpCache::DestroyEntry(ActiveEntry* entry) { | 742 void HttpCache::DestroyEntry(ActiveEntry* entry) { |
740 if (entry->doomed) { | 743 if (entry->doomed) { |
(...skipping 375 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1116 building_backend_ = false; | 1119 building_backend_ = false; |
1117 DeletePendingOp(pending_op); | 1120 DeletePendingOp(pending_op); |
1118 } | 1121 } |
1119 | 1122 |
1120 // The cache may be gone when we return from the callback. | 1123 // The cache may be gone when we return from the callback. |
1121 if (!item->DoCallback(result, backend)) | 1124 if (!item->DoCallback(result, backend)) |
1122 item->NotifyTransaction(result, NULL); | 1125 item->NotifyTransaction(result, NULL); |
1123 } | 1126 } |
1124 | 1127 |
1125 } // namespace net | 1128 } // namespace net |
OLD | NEW |