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

// ArcvmNativeCollector handles crashes of native binaries in ARCVM. When the
// ARCVM kernel detects a crash, it executes arc-native-crash-dispatcher via its
// /proc/sys/kernel/core_pattern. arc-native-crash-dispatcher calls
// arc-native-crash-collector32 or arc-native-crash-collector64 and writes dump
// files at /data/vendor/arc_native_crash_reports in the ARCVM filesystem.
// ArcCrashCollector, which is a service running in ARCVM, monitors the
// /data/vendor/arc_native_crash_reports directory and sends detected dump files
// to Chrome via Mojo. Finally Chrome invokes this collector.

#ifndef CRASH_REPORTER_ARCVM_NATIVE_COLLECTOR_H_
#define CRASH_REPORTER_ARCVM_NATIVE_COLLECTOR_H_

#include "crash-reporter/arc_util.h"
#include "crash-reporter/crash_collector.h"

#include <string>

#include <base/files/file_path.h>
#include <base/files/scoped_file.h>

// Collector for native crashes in ARCVM.
class ArcvmNativeCollector : public CrashCollector {
 public:
  // The basic information about crash. They are used for the filename of files
  // passed to crash_sender.
  struct CrashInfo {
    time_t time;            // The time when the crash happens.
    pid_t pid;              // The process ID (in ARCVM) of the crashed process.
    std::string exec_name;  // The name of crashed binary.
  };

  ArcvmNativeCollector();
  ~ArcvmNativeCollector() override;

  // Handles a native crash in ARCVM.
  bool HandleCrash(const arc_util::BuildProperty& build_property,
                   const CrashInfo& crash_info);

 private:
  friend class ArcvmNativeCollectorMock;
  friend class ArcvmNativeCollectorTest;
  FRIEND_TEST(ArcvmNativeCollectorTest, HandleCrashWithMinidumpFD);
  FRIEND_TEST(ArcvmNativeCollectorTest, AddArcMetadata);

  // CrashCollector overrides.
  std::string GetProductVersion() const override;

  // Handles a native crash in ARCVM using the given FD for minidump.
  // TODO(kimiyuki): Replace |minidump_fd| with a path and make "/dev/stdin" the
  // default argument.
  bool HandleCrashWithMinidumpFD(const arc_util::BuildProperty& build_property,
                                 const CrashInfo& crash_info,
                                 base::ScopedFD minidump_fd);

  // Adds ARC-related metadata to the crash report.
  void AddArcMetadata(const arc_util::BuildProperty& build_property,
                      const CrashInfo& crash_info);

  // Reads the content from FD and writes it to the specified path.
  bool DumpFdToFile(base::ScopedFD fd, const base::FilePath& path);
};

#endif  // CRASH_REPORTER_ARCVM_NATIVE_COLLECTOR_H_
