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