chromium/chromecast/crash/linux/crash_util.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_LINUX_CRASH_UTIL_H_
#define CHROMECAST_CRASH_LINUX_CRASH_UTIL_H_

#include <stdint.h>

#include <string>

#include "base/files/file_path.h"
#include "base/functional/callback.h"

namespace chromecast {

struct Attachment;

class CrashUtil {
 public:
  // Returns true if the filesystem has sufficient space to collect the crash.
  // Performs I/O on the current thread.
  static bool HasSpaceToCollectCrash();

  // Runs the dumpstate utility and sends its output to a file
  // named after the minidump, but with ".txt.gz" appended to the name.
  // This blocks the current thread to perform I/O (for multiple seconds).
  static bool CollectDumpstate(const base::FilePath& minidump_path,
                               base::FilePath* dumpstate_path);

  // Helper function to request upload an existing minidump file. Returns true
  // on success, false otherwise.
  static bool RequestUploadCrashDump(
      const std::string& existing_minidump_path,
      uint64_t crashed_pid,
      uint64_t crashed_process_start_time_ms,
      const std::vector<Attachment>* attachments = nullptr);

  // Util function to get current time in ms. This is used to record
  // crashed_process_start_time_ms in client side.
  static uint64_t GetCurrentTimeMs();

  // Call this to set a callback to be used instead of invoking an executable
  // in a seperate process. See MinidumpWriter::SetDumpStateCbForTest() for more
  // details on this callback's signature.
  static void SetDumpStateCbForTest(
      base::OnceCallback<int(const std::string&)> cb);
};

}  // namespace chromecast

#endif  // CHROMECAST_CRASH_LINUX_CRASH_UTIL_H_