// Copyright 2019 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef NET_DISK_CACHE_SIMPLE_POST_OPERATION_WAITER_H_ #define NET_DISK_CACHE_SIMPLE_POST_OPERATION_WAITER_H_ #include #include #include #include "base/functional/callback.h" #include "base/memory/ref_counted.h" #include "net/base/cache_type.h" namespace disk_cache { // See |SimpleBackendImpl::post_doom_waiting_| for the description. This is // refcounted since sometimes this needs to survive backend destruction to // complete some per-entry operations. class SimplePostOperationWaiterTable : public base::RefCounted { friend class base::RefCounted; public: SimplePostOperationWaiterTable(); SimplePostOperationWaiterTable(const SimplePostOperationWaiterTable&) = delete; SimplePostOperationWaiterTable& operator=( const SimplePostOperationWaiterTable&) = delete; // The entry for |entry_hash| is performing an operation like doom or opening // by hash; the backend will not attempt to run new operations for this // |entry_hash| until it is is completed. void OnOperationStart(uint64_t entry_hash); // The entry for |entry_hash| has been successfully doomed or had its key // figured out, we can now allow operations on this entry, and we can run any // operations enqueued while the operation was taking place. This will happen // synchronously. void OnOperationComplete(uint64_t entry_hash); // Returns nullptr if not found. std::vector* Find(uint64_t entry_hash); bool Has(uint64_t entry_hash) { return entries_pending_operation_.contains(entry_hash); } private: ~SimplePostOperationWaiterTable(); std::unordered_map> entries_pending_operation_; }; } // namespace disk_cache #endif // NET_DISK_CACHE_SIMPLE_POST_OPERATION_WAITER_H_