146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// found in the LICENSE file.
446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#ifndef COMPONENTS_METRICS_METRICS_LOG_UPLOADER_H_
646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define COMPONENTS_METRICS_METRICS_LOG_UPLOADER_H_
746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include <string>
946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
1046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/basictypes.h"
1146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/callback.h"
1246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/macros.h"
1346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
1446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)namespace metrics {
1546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
1646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// MetricsLogUploader is an abstract base class for uploading UMA logs on behalf
1746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// of MetricsService.
1846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class MetricsLogUploader {
1946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) public:
2046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // Constructs the uploader that will upload logs to the specified |server_url|
2146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // with the given |mime_type|. The |on_upload_complete| callback will be
2246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // called with the HTTP response code of the upload or with -1 on an error.
2346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  MetricsLogUploader(const std::string& server_url,
2446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                     const std::string& mime_type,
2546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                     const base::Callback<void(int)>& on_upload_complete);
2646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual ~MetricsLogUploader();
2746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
28f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // Uploads a log with the specified |compressed_log_data| and |log_hash|.
29f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // |log_hash| is expected to be the hex-encoded SHA1 hash of the log data
30f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // before compression.
31f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  virtual bool UploadLog(const std::string& compressed_log_data,
3246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                         const std::string& log_hash) = 0;
3346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
3446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) protected:
3546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  const std::string server_url_;
3646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  const std::string mime_type_;
3746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  const base::Callback<void(int)> on_upload_complete_;
3846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
3946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) private:
4046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(MetricsLogUploader);
4146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)};
4246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
4346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}  // namespace metrics
4446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
4546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#endif  // COMPONENTS_METRICS_METRICS_LOG_UPLOADER_H_
46