|  | // 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_REPORT_H_ | 
|  | #define NET_REPORTING_REPORTING_REPORT_H_ | 
|  |  | 
|  | #include <memory> | 
|  | #include <string> | 
|  |  | 
|  | #include "base/time/time.h" | 
|  | #include "net/base/net_export.h" | 
|  | #include "url/gurl.h" | 
|  |  | 
|  | namespace base { | 
|  | class Value; | 
|  | }  // namespace base | 
|  |  | 
|  | namespace net { | 
|  |  | 
|  | // An undelivered report. | 
|  | struct NET_EXPORT ReportingReport { | 
|  | public: | 
|  | // Used in histograms; please add new items at end and do not reorder. | 
|  | enum class Outcome { | 
|  | UNKNOWN = 0, | 
|  | DISCARDED_NO_URL_REQUEST_CONTEXT = 1, | 
|  | DISCARDED_NO_REPORTING_SERVICE = 2, | 
|  | ERASED_FAILED = 3, | 
|  | ERASED_EXPIRED = 4, | 
|  | ERASED_EVICTED = 5, | 
|  | ERASED_NETWORK_CHANGED = 6, | 
|  | ERASED_BROWSING_DATA_REMOVED = 7, | 
|  | ERASED_REPORTING_SHUT_DOWN = 8, | 
|  | DELIVERED = 9, | 
|  |  | 
|  | MAX | 
|  | }; | 
|  |  | 
|  | ReportingReport(const GURL& url, | 
|  | const std::string& user_agent, | 
|  | const std::string& group, | 
|  | const std::string& type, | 
|  | std::unique_ptr<const base::Value> body, | 
|  | int depth, | 
|  | base::TimeTicks queued, | 
|  | int attempts); | 
|  | ~ReportingReport(); | 
|  |  | 
|  | static void RecordReportDiscardedForNoURLRequestContext(); | 
|  | static void RecordReportDiscardedForNoReportingService(); | 
|  |  | 
|  | void RecordOutcome(base::TimeTicks now); | 
|  |  | 
|  | // The URL of the document that triggered the report. (Included in the | 
|  | // delivered report.) | 
|  | GURL url; | 
|  |  | 
|  | // The User-Agent header that was used for the request. | 
|  | std::string user_agent; | 
|  |  | 
|  | // The endpoint group that should be used to deliver the report. (Not included | 
|  | // in the delivered report.) | 
|  | std::string group; | 
|  |  | 
|  | // The type of the report. (Included in the delivered report.) | 
|  | std::string type; | 
|  |  | 
|  | // The body of the report. (Included in the delivered report.) | 
|  | std::unique_ptr<const base::Value> body; | 
|  |  | 
|  | // How many uploads deep the related request was: 0 if the related request was | 
|  | // not an upload (or there was no related request), or n+1 if it was an upload | 
|  | // reporting on requests of at most depth n. | 
|  | int depth; | 
|  |  | 
|  | // When the report was queued. (Included in the delivered report as an age | 
|  | // relative to the time of the delivery attempt.) | 
|  | base::TimeTicks queued; | 
|  |  | 
|  | // The number of delivery attempts made so far, not including an active | 
|  | // attempt. (Not included in the delivered report.) | 
|  | int attempts = 0; | 
|  |  | 
|  | Outcome outcome; | 
|  |  | 
|  | private: | 
|  | bool recorded_outcome; | 
|  |  | 
|  | DISALLOW_COPY_AND_ASSIGN(ReportingReport); | 
|  | }; | 
|  |  | 
|  | }  // namespace net | 
|  |  | 
|  | #endif  // NET_REPORTING_REPORTING_REPORT_H_ |