// 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_DELIVERY_AGENT_H_ #define NET_REPORTING_REPORTING_DELIVERY_AGENT_H_ #include <memory> #include "base/unguessable_token.h" #include "net/base/net_export.h" #include "net/base/rand_callback.h" namespace base { class OneShotTimer; } // namespace base namespace net { class ReportingContext; // Batches reports fetched from the ReportingCache and uploads them using the // ReportingUploader. // // Reports are only considered for delivery if all of the following are true: // - The report is not already part of a pending upload request. // - Uploads are allowed for the report's origin (i.e. the origin of the URL // associated with the reported event). // - There is not already a pending upload for any reports sharing the same // (NAK, origin, group) key. // // Reports are batched for upload to an endpoint URL such that: // - The available reports with the same (NAK, origin, group) are always // uploaded together. // - All reports uploaded together must share a NAK and origin. // - Reports for the same (NAK, origin) can be uploaded separately if they are // for different groups. // - Reports for different groups can be batched together, if they are assigned // to ReportingEndpoints sharing a URL (that is, the upload URL). // // There is no limit to the number of reports that can be uploaded together. // (Aside from the global cap on total reports.) // // TODO(juliatuttle): Consider capping the maximum number of reports per // delivery attempt. class NET_EXPORT ReportingDeliveryAgent { … }; } // namespace net #endif // NET_REPORTING_REPORTING_DELIVERY_AGENT_H_