| // Copyright 2024 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef COMPONENTS_PERSISTENT_CACHE_BACKEND_H_ |
| #define COMPONENTS_PERSISTENT_CACHE_BACKEND_H_ |
| |
| #include <stdint.h> |
| |
| #include <optional> |
| #include <string_view> |
| |
| #include "base/component_export.h" |
| #include "base/containers/span.h" |
| #include "base/types/expected.h" |
| #include "components/persistent_cache/backend_params.h" |
| #include "components/persistent_cache/entry_metadata.h" |
| #include "components/persistent_cache/transaction_error.h" |
| |
| namespace persistent_cache { |
| |
| class Entry; |
| |
| // The persistence mechanism backing up the cache. |
| class COMPONENT_EXPORT(PERSISTENT_CACHE) Backend { |
| public: |
| virtual ~Backend(); |
| |
| // Not copyable or moveable. |
| Backend(const Backend&) = delete; |
| Backend(Backend&&) = delete; |
| Backend& operator=(const Backend&) = delete; |
| Backend& operator=(Backend&&) = delete; |
| |
| // Initializes the cache. Must be called exactly once before any other |
| // method. No further method can be called if this fails. |
| virtual bool Initialize() = 0; |
| |
| // See `PersistentCache::Find()`. |
| // Note: Backends have to outlive entries they vend. |
| // |
| // Thread-safe. |
| virtual base::expected<std::unique_ptr<Entry>, TransactionError> Find( |
| std::string_view key) = 0; |
| |
| // See `PersistentCache::Insert()`. |
| // Thread-safe. |
| virtual base::expected<void, TransactionError> Insert( |
| std::string_view key, |
| base::span<const uint8_t> content, |
| EntryMetadata metadata) = 0; |
| |
| // Used to get type of instance. Intended for things like metrics recording. |
| // Externally behavior of all backend types should be equivalent and control |
| // flow should not be tailored to the type. |
| virtual BackendType GetType() const = 0; |
| |
| // Used to understand if the instance has read only access. Intended for |
| // things like metrics recording. Externally behavior of all backend types |
| // should be equivalent for reads. Writes should probably not be attempted if |
| // not permitted. |
| virtual bool IsReadOnly() const = 0; |
| |
| // Returns params for an independent read-only connection to the instance, or |
| // nothing in case of error. |
| virtual std::optional<BackendParams> ExportReadOnlyParams() = 0; |
| |
| // Returns params for an independent read-write connection to the instance, or |
| // nothing in case of error. |
| virtual std::optional<BackendParams> ExportReadWriteParams() = 0; |
| |
| // See `PersistentCache::Abandon()` documentation. |
| virtual void Abandon() = 0; |
| |
| protected: |
| Backend(); |
| }; |
| |
| } // namespace persistent_cache |
| |
| #endif // COMPONENTS_PERSISTENT_CACHE_BACKEND_H_ |