xref: /aosp_15_r20/external/cronet/components/metrics/metrics_log_uploader.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2014 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker 
5*6777b538SAndroid Build Coastguard Worker #ifndef COMPONENTS_METRICS_METRICS_LOG_UPLOADER_H_
6*6777b538SAndroid Build Coastguard Worker #define COMPONENTS_METRICS_METRICS_LOG_UPLOADER_H_
7*6777b538SAndroid Build Coastguard Worker 
8*6777b538SAndroid Build Coastguard Worker #include <string>
9*6777b538SAndroid Build Coastguard Worker 
10*6777b538SAndroid Build Coastguard Worker #include "base/functional/callback.h"
11*6777b538SAndroid Build Coastguard Worker #include "base/strings/string_piece.h"
12*6777b538SAndroid Build Coastguard Worker #include "components/metrics/metrics_log.h"
13*6777b538SAndroid Build Coastguard Worker 
14*6777b538SAndroid Build Coastguard Worker namespace metrics {
15*6777b538SAndroid Build Coastguard Worker 
16*6777b538SAndroid Build Coastguard Worker class ReportingInfo;
17*6777b538SAndroid Build Coastguard Worker 
18*6777b538SAndroid Build Coastguard Worker // MetricsLogUploader is an abstract base class for uploading UMA logs on behalf
19*6777b538SAndroid Build Coastguard Worker // of MetricsService.
20*6777b538SAndroid Build Coastguard Worker class MetricsLogUploader {
21*6777b538SAndroid Build Coastguard Worker  public:
22*6777b538SAndroid Build Coastguard Worker   // Type for OnUploadComplete callbacks. These callbacks receive five
23*6777b538SAndroid Build Coastguard Worker   // parameters:
24*6777b538SAndroid Build Coastguard Worker   //   - a response code,
25*6777b538SAndroid Build Coastguard Worker   //   - a net error code,
26*6777b538SAndroid Build Coastguard Worker   //   - a boolean specifying if the connection was secure (over HTTPS),
27*6777b538SAndroid Build Coastguard Worker   //   - a boolean specifying if the log should be discarded regardless of
28*6777b538SAndroid Build Coastguard Worker   //     response/error code,
29*6777b538SAndroid Build Coastguard Worker   //   - a string specifying the reason why the log was forcibly discarded (or
30*6777b538SAndroid Build Coastguard Worker   //     empty string if not).
31*6777b538SAndroid Build Coastguard Worker   using UploadCallback =
32*6777b538SAndroid Build Coastguard Worker       base::RepeatingCallback<void(int, int, bool, bool, base::StringPiece)>;
33*6777b538SAndroid Build Coastguard Worker 
34*6777b538SAndroid Build Coastguard Worker   // Possible service types. This should correspond to a type from
35*6777b538SAndroid Build Coastguard Worker   // DataUseUserData.
36*6777b538SAndroid Build Coastguard Worker   // TODO(crbug.com/40912258) Investigate cleaning up this enum if it isn't
37*6777b538SAndroid Build Coastguard Worker   // needed anymore.
38*6777b538SAndroid Build Coastguard Worker   enum MetricServiceType {
39*6777b538SAndroid Build Coastguard Worker     UMA,
40*6777b538SAndroid Build Coastguard Worker     UKM,
41*6777b538SAndroid Build Coastguard Worker     STRUCTURED_METRICS,
42*6777b538SAndroid Build Coastguard Worker   };
43*6777b538SAndroid Build Coastguard Worker 
44*6777b538SAndroid Build Coastguard Worker   virtual ~MetricsLogUploader() = default;
45*6777b538SAndroid Build Coastguard Worker 
46*6777b538SAndroid Build Coastguard Worker   // Uploads a log with the specified |compressed_log_data|, a |log_hash| and
47*6777b538SAndroid Build Coastguard Worker   // |log_signature| for data validation, and |reporting_info|. |log_hash| is
48*6777b538SAndroid Build Coastguard Worker   // expected to be the hex-encoded SHA1 hash of the log data before
49*6777b538SAndroid Build Coastguard Worker   // compression, and |log_signature| is expected to be a base64-encoded
50*6777b538SAndroid Build Coastguard Worker   // HMAC-SHA256 signature of the log data before compression. When the server
51*6777b538SAndroid Build Coastguard Worker   // receives an upload, it recomputes the hash and signature of the upload and
52*6777b538SAndroid Build Coastguard Worker   // compares it to the ones included in the upload. If there is a mismatch, the
53*6777b538SAndroid Build Coastguard Worker   // upload is flagged. If an Uploader implementation uploads to a server that
54*6777b538SAndroid Build Coastguard Worker   // doesn't do this validation, then |log_hash| and |log_signature| can be
55*6777b538SAndroid Build Coastguard Worker   // ignored.
56*6777b538SAndroid Build Coastguard Worker   virtual void UploadLog(const std::string& compressed_log_data,
57*6777b538SAndroid Build Coastguard Worker                          const LogMetadata& log_metadata,
58*6777b538SAndroid Build Coastguard Worker                          const std::string& log_hash,
59*6777b538SAndroid Build Coastguard Worker                          const std::string& log_signature,
60*6777b538SAndroid Build Coastguard Worker                          const ReportingInfo& reporting_info) = 0;
61*6777b538SAndroid Build Coastguard Worker };
62*6777b538SAndroid Build Coastguard Worker 
63*6777b538SAndroid Build Coastguard Worker }  // namespace metrics
64*6777b538SAndroid Build Coastguard Worker 
65*6777b538SAndroid Build Coastguard Worker #endif  // COMPONENTS_METRICS_METRICS_LOG_UPLOADER_H_
66