chromium/chromecast/crash/cast_crashdump_uploader.h

// Copyright 2015 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROMECAST_CRASH_CAST_CRASHDUMP_UPLOADER_H_
#define CHROMECAST_CRASH_CAST_CRASHDUMP_UPLOADER_H_

#include <map>
#include <memory>
#include <string>

namespace chromecast {
class LibcurlWrapper;

struct CastCrashdumpData {
  CastCrashdumpData();
  CastCrashdumpData(const CastCrashdumpData& other);
  ~CastCrashdumpData();

  std::string product;
  std::string version;
  std::string guid;
  std::string ptime;
  std::string ctime;
  std::string email;
  std::string comments;
  std::string minidump_pathname;
  std::string crash_server;
  std::string proxy_host;
  std::string proxy_userpassword;
  std::string upload_filename;
};

class CastCrashdumpUploader {
 public:
  CastCrashdumpUploader(const CastCrashdumpData& data,
                        std::unique_ptr<LibcurlWrapper> http_layer);
  explicit CastCrashdumpUploader(const CastCrashdumpData& data);

  CastCrashdumpUploader(const CastCrashdumpUploader&) = delete;
  CastCrashdumpUploader& operator=(const CastCrashdumpUploader&) = delete;

  virtual ~CastCrashdumpUploader();

  virtual bool AddAttachment(const std::string& label,
                             const std::string& filename);
  virtual void SetParameter(const std::string& key, const std::string& value);
  virtual bool Upload(std::string* response);

 private:
  bool CheckRequiredParametersArePresent();

  std::unique_ptr<LibcurlWrapper> http_layer_;
  CastCrashdumpData data_;

  // Holds the following mapping for attachments: <label, filepath>
  std::map<std::string, std::string> attachments_;

  // Holds the following mapping for HTTP request params: <key, value>
  std::map<std::string, std::string> parameters_;
};

}  // namespace chromecast

#endif  // CHROMECAST_CRASH_CAST_CRASHDUMP_UPLOADER_H_