#include <string>
#include "atom/common/crash_reporter/crash_reporter.h"
+#include "atom/common/native_mate_converters/file_path_converter.h"
#include "base/bind.h"
#include "native_mate/dictionary.h"
base::Bind(&CrashReporter::Start, report));
dict.SetMethod("_getUploadedReports",
base::Bind(&CrashReporter::GetUploadedReports, report));
+ dict.SetMethod("_getCrashesDirectory",
+ base::Bind(&CrashReporter::GetCrashesDirectory, report));
}
} // namespace
const std::string& product_name,
const std::string& temp_path);
+ base::FilePath GetCrashesDirectory(const std::string& product_name,
+ const std::string& temp_dir);
+
protected:
CrashReporter();
virtual ~CrashReporter();
bool skip_system_crash_handler);
virtual void SetUploadParameters();
- base::FilePath GetCrashesDirectory(const std::string& product_name,
- const std::string& temp_dir);
-
StringMap upload_parameters_;
bool is_browser_;
namespace {
const char kApplicationName[] = "application-name";
+const char kCrashesDirectory[] = "crashes-directory";
const wchar_t kPipeNameFormat[] = L"\\\\.\\pipe\\$1 Crash Service";
const wchar_t kStandardLogFile[] = L"operation_log.txt";
// noop.
}
-bool GetCrashServiceDirectory(const std::wstring& application_name,
- base::FilePath* dir) {
- base::FilePath temp_dir;
- if (!base::GetTempDir(&temp_dir))
- return false;
- temp_dir = temp_dir.Append(application_name + L" Crashes");
+bool CreateCrashServiceDirectory(const base::FilePath& temp_dir) {
if (!base::PathExists(temp_dir)) {
if (!base::CreateDirectory(temp_dir))
return false;
}
- *dir = temp_dir;
return true;
}
std::wstring application_name = cmd_line.GetSwitchValueNative(
kApplicationName);
+ if (!cmd_line.HasSwitch(kCrashesDirectory)) {
+ LOG(ERROR) << "Crashes directory path must be specified with --"
+ << kCrashesDirectory;
+ return 1;
+ }
+
// We use/create a directory under the user's temp folder, for logging.
- base::FilePath operating_dir;
- GetCrashServiceDirectory(application_name, &operating_dir);
+ base::FilePath operating_dir(
+ cmd_line.GetSwitchValueNative(kCrashesDirectory));
+ GetCrashServiceDirectory(operating_dir);
base::FilePath log_file = operating_dir.Append(kStandardLogFile);
// Logging to stderr (to help with debugging failures on the
}
if (process.platform === 'win32') {
- const args = ['--reporter-url=' + submitURL, '--application-name=' + this.productName, '--v=1']
+ const args = [
+ '--reporter-url=' + submitURL,
+ '--application-name=' + this.productName,
+ '--crashes-directory=' + bindings._getCrashesDirectory(this.productName, this.tempDirectory),
+ '--v=1'
+ ]
const env = {
ELECTRON_INTERNAL_CRASH_SERVICE: 1
}
const assert = require('assert')
-const fs = require('fs')
const http = require('http')
const multiparty = require('multiparty')
const path = require('path')