123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- // Copyright 2017 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #ifndef NET_REPORTING_REPORTING_SERVICE_H_
- #define NET_REPORTING_REPORTING_SERVICE_H_
- #include <memory>
- #include <string>
- #include "base/callback.h"
- #include "base/containers/flat_map.h"
- #include "base/unguessable_token.h"
- #include "net/base/net_export.h"
- #include "net/reporting/reporting_cache.h"
- #include "net/reporting/reporting_cache_observer.h"
- #include "third_party/abseil-cpp/absl/types/optional.h"
- class GURL;
- namespace base {
- class Value;
- } // namespace base
- namespace url {
- class Origin;
- } // namespace url
- namespace net {
- class IsolationInfo;
- class NetworkIsolationKey;
- class ReportingContext;
- struct ReportingPolicy;
- class URLRequestContext;
- // The external interface to the Reporting system, used by the embedder of //net
- // and also other parts of //net.
- class NET_EXPORT ReportingService {
- public:
- ReportingService(const ReportingService&) = delete;
- ReportingService& operator=(const ReportingService&) = delete;
- virtual ~ReportingService();
- // Creates a ReportingService. |policy| will be copied. |request_context| must
- // outlive the ReportingService. |store| must outlive the ReportingService.
- // If |store| is null, the ReportingCache will be in-memory only.
- static std::unique_ptr<ReportingService> Create(
- const ReportingPolicy& policy,
- URLRequestContext* request_context,
- ReportingCache::PersistentReportingStore* store);
- // Creates a ReportingService for testing purposes using an
- // already-constructed ReportingContext. The ReportingService will take
- // ownership of |reporting_context| and destroy it when the service is
- // destroyed.
- static std::unique_ptr<ReportingService> CreateForTesting(
- std::unique_ptr<ReportingContext> reporting_context);
- // Queues a report for delivery. |url| is the URL that originated the report.
- // |reporting_source| is the reporting source token for the document or
- // worker which triggered this report, if it can be associated with one, or
- // nullopt otherwise. If present, it may not be empty.
- // Along with |network_isolation_key|, it is used to restrict what reports
- // can be merged, and for sending the report.
- // |user_agent| is the User-Agent header that was used for the request.
- // |group| is the endpoint group to which the report should be delivered.
- // |type| is the type of the report. |body| is the body of the report.
- //
- // The Reporting system will take ownership of |body|; all other parameters
- // will be copied.
- virtual void QueueReport(
- const GURL& url,
- const absl::optional<base::UnguessableToken>& reporting_source,
- const NetworkIsolationKey& network_isolation_key,
- const std::string& user_agent,
- const std::string& group,
- const std::string& type,
- base::Value::Dict body,
- int depth) = 0;
- // Processes a Report-To header. |origin| is the Origin of the URL that the
- // header came from; |header_value| is the normalized value of the Report-To
- // header.
- virtual void ProcessReportToHeader(
- const url::Origin& origin,
- const NetworkIsolationKey& network_isolation_key,
- const std::string& header_value) = 0;
- // Configures reporting endpoints set by the Reporting-Endpoints header, once
- // the associated document or worker (represented by |reporting_source|) has
- // been committed.
- // |reporting_source| is the unique identifier for the resource with which
- // this header was received, and must not be empty.
- // |endpoints| is a mapping of endpoint names to URLs.
- // |origin| is the origin of the reporting source, and
- // |isolation_info| is the appropriate IsolationInfo struct for that source.
- virtual void SetDocumentReportingEndpoints(
- const base::UnguessableToken& reporting_source,
- const url::Origin& origin,
- const IsolationInfo& isolation_info,
- const base::flat_map<std::string, std::string>& endpoints) = 0;
- // Attempts to send any queued reports and removes all associated
- // configuration for `reporting_source`. This is called when a source is
- // destroyed.
- virtual void SendReportsAndRemoveSource(
- const base::UnguessableToken& reporting_source) = 0;
- // Removes browsing data from the Reporting system. See
- // ReportingBrowsingDataRemover for more details.
- virtual void RemoveBrowsingData(
- uint64_t data_type_mask,
- const base::RepeatingCallback<bool(const url::Origin&)>&
- origin_filter) = 0;
- // Like RemoveBrowsingData except removes data for all origins without a
- // filter.
- virtual void RemoveAllBrowsingData(uint64_t data_type_mask) = 0;
- // Shuts down the Reporting service so that no new headers or reports are
- // processed, and pending uploads are cancelled.
- virtual void OnShutdown() = 0;
- virtual const ReportingPolicy& GetPolicy() const = 0;
- virtual base::Value StatusAsValue() const;
- virtual std::vector<const ReportingReport*> GetReports() const = 0;
- virtual base::flat_map<url::Origin, std::vector<ReportingEndpoint>>
- GetV1ReportingEndpointsByOrigin() const = 0;
- virtual void AddReportingCacheObserver(ReportingCacheObserver* observer) = 0;
- virtual void RemoveReportingCacheObserver(
- ReportingCacheObserver* observer) = 0;
- virtual ReportingContext* GetContextForTesting() const = 0;
- protected:
- ReportingService() = default;
- };
- } // namespace net
- #endif // NET_REPORTING_REPORTING_SERVICE_H_
|