// Copyright 2022 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CONTENT_BROWSER_INTEREST_GROUP_INTEREST_GROUP_PERMISSIONS_CACHE_H_ #define CONTENT_BROWSER_INTEREST_GROUP_INTEREST_GROUP_PERMISSIONS_CACHE_H_ #include "content/common/content_export.h" #include <map> #include <memory> #include <tuple> #include "base/containers/lru_cache.h" #include "base/time/time.h" #include "base/timer/timer.h" #include "net/base/network_isolation_key.h" #include "url/origin.h" namespace content { // Cache of per-origin join/leave interest group permissions, partitioned by // NetworkIsolationKey and initiating frame origin. To minimize leaks across // first party contexts, uses a separate LRU cache "shard" for each {frame // origin, NetworkIsolationKey} pair. Each LRU cache has a maximum number of // entries, but there's no global limit, to prevent leaks. The short entry // lifetime and delay in creating entries, along with the LRU size cap, should // keep memory usage low. // // In addition to the LRU-ness of the cache, individual entries are passively // expired (i.e., no longer returned, but not proactively deleted) after // `kCacheDuration` has passed since they were added to the cache. Cache shards // are garbage collected on a timer, at some point after all their entries have // expired. Expired entries and shards are also deleted on access, which isn't // strictly necessary. // // Permissions are typically learned from .well-known fetches, and should be // cached by the network process, depending on HTTP response headers, but // caching it in the browser process results in much better performance for // sites that want to join (or, more likely, leave) large numbers of // cross-origin interest groups, due to the limit of outstanding joins/leaves in // the renderer process, and overhead on accessing the network stack's HTTP // cache. class CONTENT_EXPORT InterestGroupPermissionsCache { … }; } // namespace content #endif // CONTENT_BROWSER_INTEREST_GROUP_INTEREST_GROUP_PERMISSIONS_CACHE_H_