// Copyright 2018 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.

#ifndef CRASH_REPORTER_PATHS_H_
#define CRASH_REPORTER_PATHS_H_

#include <base/files/file_path.h>
#include <base/strings/string_piece.h>

namespace paths {

// Directory where we keep various state flags.
constexpr char kSystemRunStateDirectory[] = "/run/crash_reporter";

// Subdirectory to store crashes that occur when persistent storage is not
// available.
constexpr char kSystemRunCrashDirectory[] = "/run/crash_reporter/crash";

// Directory where crash_reporter stores flag for metrics_daemon.
constexpr char kSystemRunMetricsFlagDirectory[] =
    "/run/metrics/external/crash-reporter";

// Directory where crash_reporter stores files (ex. saved version info).
constexpr char kCrashReporterStateDirectory[] = "/var/lib/crash_reporter";

// Directory where system crashes are saved.
constexpr char kSystemCrashDirectory[] = "/var/spool/crash";

// Ephemeral directory to persist crashes in absence of /var/spool. Any crashes
// stored here will be lost on power loss/reboot.
constexpr char kEncryptedRebootVaultCrashDirectory[] =
    "/mnt/stateful_partition/reboot_vault/crash";

// Path to indicate OOBE completion.
constexpr char kOobeCompletePath[] = "/home/chronos/.oobe_completed";

// Directory where system configuration files are located.
constexpr char kEtcDirectory[] = "/etc";

// The system file that gives the number of file descriptors in use.
constexpr char kProcFileNr[] = "/proc/sys/fs/file-nr";

// The system file that gives information about the amount of memory in use.
constexpr char kProcMeminfo[] = "/proc/meminfo";

// Main system log path.
constexpr char kMessageLogPath[] = "/var/log/messages";

// Directory containing system Chrome logs (when the user isn't logged in).
constexpr char kSystemChromeLogDirectory[] = "/var/log/chrome";

// Directory where per-user crashes are saved before the user logs in.
//
// Normally this path is not used.  Unfortunately, there are a few edge cases
// where we need this.  Any process that runs as kDefaultUserName that crashes
// is consider a "user crash".  That includes the initial Chrome browser that
// runs the login screen.  If that blows up, there is no logged in user yet,
// so there is no per-user dir for us to stash things in.  Instead we fallback
// to this path as it is at least encrypted on a per-system basis.
//
// This also comes up when running integration tests.  The GUI is sitting at the
// login screen while tests are sshing in, changing users, and triggering
// crashes as the user (purposefully).
constexpr char kFallbackUserCrashDirectory[] = "/home/chronos/crash";

// The paths /home/root/<hash>/crash are bind mounted to
// /run/daemon-store/crash/<hash> by cryptohomed. We prefer to use this path
// because it requires fewer privileges to access and it provides a way to
// expose the crash spool directory to a daemon without exposing the whole
// daemon-store.
constexpr char kCryptohomeCrashDirectory[] = "/run/daemon-store/crash";

// File whose existence indicates this is a developer image.
constexpr char kLeaveCoreFile[] = "/root/.leave_core";

// Base name of file whose existence indicates a crash test is currently
// running. File will be in directory kSystemRunStateDirectory.
// This is used in integration tests, including tast.platform.KernelWarning and
// tast.platform.ServiceFailure. (see local/crash/crash.go in the tast-tests
// repo)
constexpr char kCrashTestInProgress[] = "crash-test-in-progress";

// Base name of file whose existence indicates that we should treat consent as
// granted. File will be in directory kSystemRunStateDirectory.
// This is used in integration tests, including tast.platform.KernelWarning and
// tast.platform.ServiceFailure. (see local/crash/crash.go in the tast-tests
// repo)
constexpr char kMockConsent[] = "mock-consent";

// Base name of file whose existence indicates that the anomaly detector is
// ready for anomalies.
constexpr char kAnomalyDetectorReady[] = "anomaly-detector-ready";

// Base name of file whose contents tell us which crashes, if any, to filter.
// Used for tests only. Exact details of how the file is interpreted can be
// found on the method documentation of `utils::SkipCrashCollection`
constexpr char kFilterInFile[] = "filter-in";

// Base name of file whose contents tell us which crashes, if any, to *ignore*.
// Used for tests only. Implementation details can be found on the method
// documentation of `utils::SkipCrashCollection`
constexpr char kFilterOutFile[] = "filter-out";

// Base name of the file containing the name of the in-progress tast test, if
// any.  If there is a tast test name here when a crash happens, it's added to
// the .meta file.
constexpr char kInProgressTestName[] = "test-in-prog";

// Base name of file whose existence indicates uploading of device coredumps is
// allowed.
constexpr char kDeviceCoredumpUploadAllowed[] =
    "device_coredump_upload_allowed";

// Base name of file that contains Chrome OS version info.
constexpr char kLsbRelease[] = "lsb-release";

// Basename of file in the state directory that has the client ID.
constexpr char kClientId[] = "client_id";

// Crash sender lock in case the sender is already running.
constexpr char kCrashSenderLockFile[] = "/run/lock/crash_sender";

// Location in the home dir (or fallback home dir) where experiment IDs are
// written.
constexpr char kVariationsListFile[] = ".variations-list.txt";

// Fallback directory to the home dir, where we write variant-list if no one's
// logged in.
constexpr char kFallbackToHomeDir[] = "/home/chronos";

// Gets a FilePath from the given path. A prefix will be added if the prefix is
// set with SetPrefixForTesting().
base::FilePath Get(base::StringPiece file_path);

// Gets a FilePath from the given directory and the base name. A prefix will be
// added if the prefix is set with SetPrefixForTesting().
base::FilePath GetAt(base::StringPiece directory, base::StringPiece base_name);

// Sets a prefix that'll be added when Get() is called, for unit testing.
// For example, if "/tmp" is set as the prefix, Get("/run/foo") will return
// "/tmp/run/foo". Passing "" will reset the prefix.
void SetPrefixForTesting(const base::FilePath& prefix);

}  // namespace paths

#endif  // CRASH_REPORTER_PATHS_H_
