1 // Copyright 2019 The Chromium Authors 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "net/disk_cache/simple/post_operation_waiter.h" 6 7 #include "base/check_op.h" 8 #include "base/functional/bind.h" 9 #include "base/functional/callback.h" 10 #include "net/disk_cache/simple/simple_histogram_macros.h" 11 12 namespace disk_cache { 13 14 SimplePostOperationWaiterTable::SimplePostOperationWaiterTable() = default; 15 SimplePostOperationWaiterTable::~SimplePostOperationWaiterTable() = default; 16 OnOperationStart(uint64_t entry_hash)17void SimplePostOperationWaiterTable::OnOperationStart(uint64_t entry_hash) { 18 auto [_, inserted] = entries_pending_operation_.emplace( 19 entry_hash, std::vector<base::OnceClosure>()); 20 CHECK(inserted); 21 } 22 OnOperationComplete(uint64_t entry_hash)23void SimplePostOperationWaiterTable::OnOperationComplete(uint64_t entry_hash) { 24 auto it = entries_pending_operation_.find(entry_hash); 25 CHECK(it != entries_pending_operation_.end()); 26 std::vector<base::OnceClosure> to_handle_waiters; 27 to_handle_waiters.swap(it->second); 28 entries_pending_operation_.erase(it); 29 30 for (base::OnceClosure& post_operation : to_handle_waiters) { 31 std::move(post_operation).Run(); 32 } 33 } 34 Find(uint64_t entry_hash)35std::vector<base::OnceClosure>* SimplePostOperationWaiterTable::Find( 36 uint64_t entry_hash) { 37 auto doom_it = entries_pending_operation_.find(entry_hash); 38 if (doom_it != entries_pending_operation_.end()) { 39 return &doom_it->second; 40 } else { 41 return nullptr; 42 } 43 } 44 45 } // namespace disk_cache 46