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 1156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1167 DCHECK_EQ(WI_CREATE_BACKEND, op); | 1167 DCHECK_EQ(WI_CREATE_BACKEND, op); |
1168 | 1168 |
1169 // We don't need the callback anymore. | 1169 // We don't need the callback anymore. |
1170 pending_op->callback.Reset(); | 1170 pending_op->callback.Reset(); |
1171 | 1171 |
1172 if (backend_factory_.get()) { | 1172 if (backend_factory_.get()) { |
1173 // We may end up calling OnBackendCreated multiple times if we have pending | 1173 // We may end up calling OnBackendCreated multiple times if we have pending |
1174 // work items. The first call saves the backend and releases the factory, | 1174 // work items. The first call saves the backend and releases the factory, |
1175 // and the last call clears building_backend_. | 1175 // and the last call clears building_backend_. |
1176 backend_factory_.reset(); // Reclaim memory. | 1176 backend_factory_.reset(); // Reclaim memory. |
1177 if (result == OK) | 1177 if (result == OK) { |
1178 disk_cache_ = pending_op->backend.Pass(); | 1178 disk_cache_ = pending_op->backend.Pass(); |
| 1179 cert_cache_.reset(new DiskBasedCertCache(disk_cache_.get())); |
| 1180 } |
1179 } | 1181 } |
1180 | 1182 |
1181 if (!pending_op->pending_queue.empty()) { | 1183 if (!pending_op->pending_queue.empty()) { |
1182 WorkItem* pending_item = pending_op->pending_queue.front(); | 1184 WorkItem* pending_item = pending_op->pending_queue.front(); |
1183 pending_op->pending_queue.pop_front(); | 1185 pending_op->pending_queue.pop_front(); |
1184 DCHECK_EQ(WI_CREATE_BACKEND, pending_item->operation()); | 1186 DCHECK_EQ(WI_CREATE_BACKEND, pending_item->operation()); |
1185 | 1187 |
1186 // We want to process a single callback at a time, because the cache may | 1188 // We want to process a single callback at a time, because the cache may |
1187 // go away from the callback. | 1189 // go away from the callback. |
1188 pending_op->writer = pending_item; | 1190 pending_op->writer = pending_item; |
1189 | 1191 |
1190 base::MessageLoop::current()->PostTask( | 1192 base::MessageLoop::current()->PostTask( |
1191 FROM_HERE, | 1193 FROM_HERE, |
1192 base::Bind(&HttpCache::OnBackendCreated, GetWeakPtr(), | 1194 base::Bind(&HttpCache::OnBackendCreated, GetWeakPtr(), |
1193 result, pending_op)); | 1195 result, pending_op)); |
1194 } else { | 1196 } else { |
1195 building_backend_ = false; | 1197 building_backend_ = false; |
1196 DeletePendingOp(pending_op); | 1198 DeletePendingOp(pending_op); |
1197 } | 1199 } |
1198 | 1200 |
1199 // The cache may be gone when we return from the callback. | 1201 // The cache may be gone when we return from the callback. |
1200 if (!item->DoCallback(result, disk_cache_.get())) | 1202 if (!item->DoCallback(result, disk_cache_.get())) |
1201 item->NotifyTransaction(result, NULL); | 1203 item->NotifyTransaction(result, NULL); |
1202 } | 1204 } |
1203 | 1205 |
1204 } // namespace net | 1206 } // namespace net |
OLD | NEW |