Pass crashes directory to crash service process
This commit is contained in:
parent
2fbb98a97c
commit
0380d3ae50
5 changed files with 23 additions and 14 deletions
|
@ -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
|
||||||
|
|
|
@ -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_;
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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')
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue