// Copyright 2017 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_REPORTING_REPORTING_CACHE_H_ #define NET_REPORTING_REPORTING_CACHE_H_ #include <memory> #include <optional> #include <set> #include <string> #include <vector> #include "base/containers/flat_map.h" #include "base/containers/flat_set.h" #include "base/functional/callback.h" #include "base/memory/raw_ptr.h" #include "base/time/time.h" #include "base/unguessable_token.h" #include "base/values.h" #include "net/base/net_export.h" #include "net/reporting/reporting_endpoint.h" #include "net/reporting/reporting_header_parser.h" #include "net/reporting/reporting_report.h" #include "net/reporting/reporting_target_type.h" #include "url/gurl.h" #include "url/origin.h" namespace net { class ReportingContext; class IsolationInfo; class NetworkAnonymizationKey; // The cache holds undelivered reports and clients (per-origin endpoint // configurations) in memory. (It is not responsible for persisting them.) // // Each Reporting "endpoint" represents a report collector at some specified // URL. Endpoints are organized into named "endpoint groups", each of which // additionally specifies some properties such as expiration time. // A "client" represents the entire endpoint configuration set by an origin via // a Report-To header, which consists of multiple endpoint groups, each of which // consists of multiple endpoints. An endpoint group is keyed by its name. An // endpoint is unkeyed except by the client and group structure tree above it. // // The cache implementation corresponds roughly to the "Reporting cache" // described in the spec, except that endpoints and clients are stored in a more // structurally-convenient way, and endpoint failures/retry-after are tracked in // ReportingEndpointManager. // // The cache implementation has the notion of "pending" reports. These are // reports that are part of an active delivery attempt, so they won't be // actually deallocated. Any attempt to remove a pending report will mark it // "doomed", which will cause it to be deallocated once it is no longer pending. class NET_EXPORT ReportingCache { … }; // Persistent storage for Reporting reports and clients. class NET_EXPORT ReportingCache::PersistentReportingStore { … }; } // namespace net #endif // NET_REPORTING_REPORTING_CACHE_H_