Pass crashes directory to crash service process

This commit is contained in:
Kevin Sawicki 2016-10-05 16:15:49 -07:00
parent 2fbb98a97c
commit 0380d3ae50
5 changed files with 23 additions and 14 deletions

View file

@ -6,6 +6,7 @@
#include <string> #include <string>
#include "atom/common/crash_reporter/crash_reporter.h" #include "atom/common/crash_reporter/crash_reporter.h"
#include "atom/common/native_mate_converters/file_path_converter.h"
#include "base/bind.h" #include "base/bind.h"
#include "native_mate/dictionary.h" #include "native_mate/dictionary.h"
@ -39,6 +40,8 @@ void Initialize(v8::Local<v8::Object> exports, v8::Local<v8::Value> unused,
base::Bind(&CrashReporter::Start, report)); base::Bind(&CrashReporter::Start, report));
dict.SetMethod("_getUploadedReports", dict.SetMethod("_getUploadedReports",
base::Bind(&CrashReporter::GetUploadedReports, report)); base::Bind(&CrashReporter::GetUploadedReports, report));
dict.SetMethod("_getCrashesDirectory",
base::Bind(&CrashReporter::GetCrashesDirectory, report));
} }
} // namespace } // namespace

View file

@ -34,6 +34,9 @@ class CrashReporter {
const std::string& product_name, const std::string& product_name,
const std::string& temp_path); const std::string& temp_path);
base::FilePath GetCrashesDirectory(const std::string& product_name,
const std::string& temp_dir);
protected: protected:
CrashReporter(); CrashReporter();
virtual ~CrashReporter(); virtual ~CrashReporter();
@ -47,9 +50,6 @@ class CrashReporter {
bool skip_system_crash_handler); bool skip_system_crash_handler);
virtual void SetUploadParameters(); virtual void SetUploadParameters();
base::FilePath GetCrashesDirectory(const std::string& product_name,
const std::string& temp_dir);
StringMap upload_parameters_; StringMap upload_parameters_;
bool is_browser_; bool is_browser_;

View file

@ -16,6 +16,7 @@ namespace crash_service {
namespace { namespace {
const char kApplicationName[] = "application-name"; const char kApplicationName[] = "application-name";
const char kCrashesDirectory[] = "crashes-directory";
const wchar_t kPipeNameFormat[] = L"\\\\.\\pipe\\$1 Crash Service"; const wchar_t kPipeNameFormat[] = L"\\\\.\\pipe\\$1 Crash Service";
const wchar_t kStandardLogFile[] = L"operation_log.txt"; const wchar_t kStandardLogFile[] = L"operation_log.txt";
@ -25,17 +26,11 @@ void InvalidParameterHandler(const wchar_t*, const wchar_t*, const wchar_t*,
// noop. // noop.
} }
bool GetCrashServiceDirectory(const std::wstring& application_name, bool CreateCrashServiceDirectory(const base::FilePath& temp_dir) {
base::FilePath* dir) {
base::FilePath temp_dir;
if (!base::GetTempDir(&temp_dir))
return false;
temp_dir = temp_dir.Append(application_name + L" Crashes");
if (!base::PathExists(temp_dir)) { if (!base::PathExists(temp_dir)) {
if (!base::CreateDirectory(temp_dir)) if (!base::CreateDirectory(temp_dir))
return false; return false;
} }
*dir = temp_dir;
return true; return true;
} }
@ -59,9 +54,16 @@ int Main(const wchar_t* cmd) {
std::wstring application_name = cmd_line.GetSwitchValueNative( std::wstring application_name = cmd_line.GetSwitchValueNative(
kApplicationName); 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. // We use/create a directory under the user's temp folder, for logging.
base::FilePath operating_dir; base::FilePath operating_dir(
GetCrashServiceDirectory(application_name, &operating_dir); cmd_line.GetSwitchValueNative(kCrashesDirectory));
GetCrashServiceDirectory(operating_dir);
base::FilePath log_file = operating_dir.Append(kStandardLogFile); base::FilePath log_file = operating_dir.Append(kStandardLogFile);
// Logging to stderr (to help with debugging failures on the // Logging to stderr (to help with debugging failures on the

View file

@ -43,7 +43,12 @@ class CrashReporter {
} }
if (process.platform === 'win32') { 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 = { const env = {
ELECTRON_INTERNAL_CRASH_SERVICE: 1 ELECTRON_INTERNAL_CRASH_SERVICE: 1
} }

View file

@ -1,5 +1,4 @@
const assert = require('assert') const assert = require('assert')
const fs = require('fs')
const http = require('http') const http = require('http')
const multiparty = require('multiparty') const multiparty = require('multiparty')
const path = require('path') const path = require('path')