| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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/disk_cache/simple/simple_backend_impl.h" | 5 #include "net/disk_cache/simple/simple_backend_impl.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <cstdlib> | 8 #include <cstdlib> |
| 9 #include <functional> | 9 #include <functional> |
| 10 | 10 |
| (...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 249 | 249 |
| 250 int SimpleBackendImpl::GetMaxFileSize() const { | 250 int SimpleBackendImpl::GetMaxFileSize() const { |
| 251 return index_->max_size() / kMaxFileRatio; | 251 return index_->max_size() / kMaxFileRatio; |
| 252 } | 252 } |
| 253 | 253 |
| 254 void SimpleBackendImpl::OnDeactivated(const SimpleEntryImpl* entry) { | 254 void SimpleBackendImpl::OnDeactivated(const SimpleEntryImpl* entry) { |
| 255 active_entries_.erase(entry->entry_hash()); | 255 active_entries_.erase(entry->entry_hash()); |
| 256 } | 256 } |
| 257 | 257 |
| 258 void SimpleBackendImpl::OnDoomStart(uint64 entry_hash) { | 258 void SimpleBackendImpl::OnDoomStart(uint64 entry_hash) { |
| 259 // TODO(ttuttle): Revert to DCHECK once http://crbug.com/317138 is fixed. | 259 DCHECK_EQ(0u, entries_pending_doom_.count(entry_hash)); |
| 260 CHECK_EQ(0u, entries_pending_doom_.count(entry_hash)); | |
| 261 entries_pending_doom_.insert( | 260 entries_pending_doom_.insert( |
| 262 std::make_pair(entry_hash, std::vector<Closure>())); | 261 std::make_pair(entry_hash, std::vector<Closure>())); |
| 263 } | 262 } |
| 264 | 263 |
| 265 void SimpleBackendImpl::OnDoomComplete(uint64 entry_hash) { | 264 void SimpleBackendImpl::OnDoomComplete(uint64 entry_hash) { |
| 266 // TODO(ttuttle): Revert to DCHECK once http://crbug.com/317138 is fixed. | 265 DCHECK_EQ(1u, entries_pending_doom_.count(entry_hash)); |
| 267 CHECK_EQ(1u, entries_pending_doom_.count(entry_hash)); | |
| 268 base::hash_map<uint64, std::vector<Closure> >::iterator it = | 266 base::hash_map<uint64, std::vector<Closure> >::iterator it = |
| 269 entries_pending_doom_.find(entry_hash); | 267 entries_pending_doom_.find(entry_hash); |
| 270 std::vector<Closure> to_run_closures; | 268 std::vector<Closure> to_run_closures; |
| 271 to_run_closures.swap(it->second); | 269 to_run_closures.swap(it->second); |
| 272 entries_pending_doom_.erase(it); | 270 entries_pending_doom_.erase(it); |
| 273 | 271 |
| 274 std::for_each(to_run_closures.begin(), to_run_closures.end(), | 272 std::for_each(to_run_closures.begin(), to_run_closures.end(), |
| 275 std::mem_fun_ref(&Closure::Run)); | 273 std::mem_fun_ref(&Closure::Run)); |
| 276 } | 274 } |
| 277 | 275 |
| 278 void SimpleBackendImpl::DoomEntries(std::vector<uint64>* entry_hashes, | 276 void SimpleBackendImpl::DoomEntries(std::vector<uint64>* entry_hashes, |
| 279 const net::CompletionCallback& callback) { | 277 const net::CompletionCallback& callback) { |
| 280 scoped_ptr<std::vector<uint64> > | 278 scoped_ptr<std::vector<uint64> > |
| 281 mass_doom_entry_hashes(new std::vector<uint64>()); | 279 mass_doom_entry_hashes(new std::vector<uint64>()); |
| 282 mass_doom_entry_hashes->swap(*entry_hashes); | 280 mass_doom_entry_hashes->swap(*entry_hashes); |
| 283 | 281 |
| 284 std::vector<uint64> to_doom_individually_hashes; | 282 std::vector<uint64> to_doom_individually_hashes; |
| 285 | 283 |
| 286 // For each of the entry hashes, there are two cases: | 284 // For each of the entry hashes, there are two cases: |
| 287 // 1. The entry is either open or pending doom, and so it should be doomed | 285 // 1. The entry is either open or pending doom, and so it should be doomed |
| 288 // individually to avoid flakes. | 286 // individually to avoid flakes. |
| 289 // 2. The entry is not in use at all, so we can call | 287 // 2. The entry is not in use at all, so we can call |
| 290 // SimpleSynchronousEntry::DoomEntrySet and delete the files en masse. | 288 // SimpleSynchronousEntry::DoomEntrySet and delete the files en masse. |
| 291 for (int i = mass_doom_entry_hashes->size() - 1; i >= 0; --i) { | 289 for (int i = mass_doom_entry_hashes->size() - 1; i >= 0; --i) { |
| 292 const uint64 entry_hash = (*mass_doom_entry_hashes)[i]; | 290 const uint64 entry_hash = (*mass_doom_entry_hashes)[i]; |
| 293 // TODO(ttuttle): Revert to DCHECK once http://crbug.com/317138 is fixed. | 291 DCHECK(active_entries_.count(entry_hash) == 0 || |
| 294 CHECK(active_entries_.count(entry_hash) == 0 || | 292 entries_pending_doom_.count(entry_hash) == 0); |
| 295 entries_pending_doom_.count(entry_hash) == 0) | |
| 296 << "The entry 0x" << std::hex << entry_hash | |
| 297 << " is both active and pending doom."; | |
| 298 if (!active_entries_.count(entry_hash) && | 293 if (!active_entries_.count(entry_hash) && |
| 299 !entries_pending_doom_.count(entry_hash)) { | 294 !entries_pending_doom_.count(entry_hash)) { |
| 300 continue; | 295 continue; |
| 301 } | 296 } |
| 302 | 297 |
| 303 to_doom_individually_hashes.push_back(entry_hash); | 298 to_doom_individually_hashes.push_back(entry_hash); |
| 304 | 299 |
| 305 (*mass_doom_entry_hashes)[i] = mass_doom_entry_hashes->back(); | 300 (*mass_doom_entry_hashes)[i] = mass_doom_entry_hashes->back(); |
| 306 mass_doom_entry_hashes->resize(mass_doom_entry_hashes->size() - 1); | 301 mass_doom_entry_hashes->resize(mass_doom_entry_hashes->size() - 1); |
| 307 } | 302 } |
| 308 | 303 |
| 309 net::CompletionCallback barrier_callback = | 304 net::CompletionCallback barrier_callback = |
| 310 MakeBarrierCompletionCallback(to_doom_individually_hashes.size() + 1, | 305 MakeBarrierCompletionCallback(to_doom_individually_hashes.size() + 1, |
| 311 callback); | 306 callback); |
| 312 for (std::vector<uint64>::const_iterator | 307 for (std::vector<uint64>::const_iterator |
| 313 it = to_doom_individually_hashes.begin(), | 308 it = to_doom_individually_hashes.begin(), |
| 314 end = to_doom_individually_hashes.end(); it != end; ++it) { | 309 end = to_doom_individually_hashes.end(); it != end; ++it) { |
| 315 const int doom_result = DoomEntryFromHash(*it, barrier_callback); | 310 const int doom_result = DoomEntryFromHash(*it, barrier_callback); |
| 316 // TODO(ttuttle): Revert to DCHECK once http://crbug.com/317138 is fixed. | 311 DCHECK_EQ(net::ERR_IO_PENDING, doom_result); |
| 317 CHECK_EQ(net::ERR_IO_PENDING, doom_result); | |
| 318 index_->Remove(*it); | 312 index_->Remove(*it); |
| 319 } | 313 } |
| 320 | 314 |
| 321 for (std::vector<uint64>::const_iterator it = mass_doom_entry_hashes->begin(), | 315 for (std::vector<uint64>::const_iterator it = mass_doom_entry_hashes->begin(), |
| 322 end = mass_doom_entry_hashes->end(); | 316 end = mass_doom_entry_hashes->end(); |
| 323 it != end; ++it) { | 317 it != end; ++it) { |
| 324 index_->Remove(*it); | 318 index_->Remove(*it); |
| 325 OnDoomStart(*it); | 319 OnDoomStart(*it); |
| 326 } | 320 } |
| 327 | 321 |
| (...skipping 375 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 703 this)); | 697 this)); |
| 704 callback.Run(result); | 698 callback.Run(result); |
| 705 } | 699 } |
| 706 | 700 |
| 707 void SimpleBackendImpl::FlushWorkerPoolForTesting() { | 701 void SimpleBackendImpl::FlushWorkerPoolForTesting() { |
| 708 if (g_sequenced_worker_pool) | 702 if (g_sequenced_worker_pool) |
| 709 g_sequenced_worker_pool->FlushForTesting(); | 703 g_sequenced_worker_pool->FlushForTesting(); |
| 710 } | 704 } |
| 711 | 705 |
| 712 } // namespace disk_cache | 706 } // namespace disk_cache |
| OLD | NEW |