Modify crash-reporter to collect crash information for unofficial builds.
BUG=chromium-os:12207
TESTS=logging_UserCrash, logging_CrashSender, manual test which involves
purposely crashing a test to determine if minidump information is properly
collected
Change-Id: Id2195125289a695515b1722442116d6a6d9c4895
Review URL: http://codereview.chromium.org/6559003
diff --git a/crash_reporter/crash_collector.cc b/crash_reporter/crash_collector.cc
index afd72d1..bdad63f 100644
--- a/crash_reporter/crash_collector.cc
+++ b/crash_reporter/crash_collector.cc
@@ -24,6 +24,7 @@
static const char kShellPath[] = "/bin/sh";
static const char kSystemCrashPath[] = "/var/spool/crash";
static const char kUserCrashPath[] = "/home/chronos/user/crash";
+static const char kCrashTestInProgressPath[] = "/tmp/crash-test-in-progress";
// Directory mode of the user crash spool directory.
static const mode_t kUserCrashPathMode = 0755;
@@ -410,3 +411,7 @@
logger_->LogError("Unable to write %s", meta_path.value().c_str());
}
}
+
+bool CrashCollector::IsCrashTestInProgress() {
+ return file_util::PathExists(FilePath(kCrashTestInProgressPath));
+}
diff --git a/crash_reporter/crash_collector.h b/crash_reporter/crash_collector.h
index f3fcbe5..6680399 100644
--- a/crash_reporter/crash_collector.h
+++ b/crash_reporter/crash_collector.h
@@ -138,6 +138,9 @@
const std::string &exec_name,
const std::string &payload_path);
+ // Returns true if the a crash test is currently running.
+ bool IsCrashTestInProgress();
+
CountCrashFunction count_crash_function_;
IsFeedbackAllowedFunction is_feedback_allowed_function_;
SystemLogging *logger_;
diff --git a/crash_reporter/user_collector.cc b/crash_reporter/user_collector.cc
index 6e6c765..13df5ce 100644
--- a/crash_reporter/user_collector.cc
+++ b/crash_reporter/user_collector.cc
@@ -472,6 +472,13 @@
logger_->LogWarning("Received crash notification for %s[%d] sig %d (%s)",
exec.c_str(), pid, signal, handling_string);
+ // For developer builds, we always want to keep the crash reports unless
+ // we're testing the crash facilities themselves.
+ if (file_util::PathExists(FilePath(kLeaveCoreFile)) &&
+ !IsCrashTestInProgress()) {
+ feedback = true;
+ }
+
if (feedback) {
count_crash_function_();