blob: 561f216f07cd5aa340270966e8eed12fdeefc133 [file]
// Copyright 2026 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_SQL_SQL_SHARED_CACHE_HANDLE_H_
#define NET_DISK_CACHE_SQL_SQL_SHARED_CACHE_HANDLE_H_
#include "base/memory/ref_counted.h"
#include "base/memory/weak_ptr.h"
#include "base/types/pass_key.h"
#include "net/base/net_export.h"
namespace disk_cache {
class SqlSharedCache;
// A ref-counted handle to a `SqlSharedCache` instance.
//
// Holding a `SqlSharedCacheHandle` keeps the underlying `SqlSharedCache` alive
// and prevents its lifetime from being cleaned up by `SqlSharedCacheManager`.
class NET_EXPORT_PRIVATE SqlSharedCacheHandle
: public base::RefCounted<SqlSharedCacheHandle> {
public:
// Creates a handle associated with `weak_cache`. Can only be constructed
// by `SqlSharedCache` using a passkey.
SqlSharedCacheHandle(base::WeakPtr<SqlSharedCache> weak_cache,
base::PassKey<SqlSharedCache>);
SqlSharedCacheHandle(const SqlSharedCacheHandle&) = delete;
SqlSharedCacheHandle& operator=(const SqlSharedCacheHandle&) = delete;
// Returns true if the underlying `SqlSharedCache` is still valid and alive.
explicit operator bool() const;
// Accesses the underlying `SqlSharedCache`. Returns nullptr if destroyed.
SqlSharedCache* operator->() const;
// Returns a raw pointer to the underlying `SqlSharedCache`. Returns nullptr
// if the cache has been destroyed.
SqlSharedCache* get() const;
private:
friend class base::RefCounted<SqlSharedCacheHandle>;
~SqlSharedCacheHandle();
base::WeakPtr<SqlSharedCache> weak_cache_;
};
} // namespace disk_cache
#endif // NET_DISK_CACHE_SQL_SQL_SHARED_CACHE_HANDLE_H_