Pass crashes directory to crash service process
authorKevin Sawicki <kevinsawicki@gmail.com>
Wed, 5 Oct 2016 23:15:49 +0000 (16:15 -0700)
committerKevin Sawicki <kevinsawicki@gmail.com>
Thu, 6 Oct 2016 16:02:02 +0000 (09:02 -0700)
atom/common/api/atom_api_crash_reporter.cc
atom/common/crash_reporter/crash_reporter.h
atom/common/crash_reporter/win/crash_service_main.cc
lib/common/api/crash-reporter.js
spec/api-crash-reporter-spec.js

index 184a70c..b416bda 100644 (file)
@@ -6,6 +6,7 @@
 #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"
 
@@ -39,6 +40,8 @@ void Initialize(v8::Local<v8::Object> exports, v8::Local<v8::Value> unused,
                  base::Bind(&CrashReporter::Start, report));
   dict.SetMethod("_getUploadedReports",
                  base::Bind(&CrashReporter::GetUploadedReports, report));
+  dict.SetMethod("_getCrashesDirectory",
+                 base::Bind(&CrashReporter::GetCrashesDirectory, report));
 }
 
 }  // namespace
index 84208df..40a1f5a 100644 (file)
@@ -34,6 +34,9 @@ class CrashReporter {
       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();
@@ -47,9 +50,6 @@ class 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_;
 
index c6325f0..c672c0e 100644 (file)
@@ -16,6 +16,7 @@ namespace crash_service {
 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";
@@ -25,17 +26,11 @@ void InvalidParameterHandler(const wchar_t*, const wchar_t*, const wchar_t*,
   // 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;
 }
 
@@ -59,9 +54,16 @@ int Main(const wchar_t* cmd) {
   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
index ac0c98d..ca429df 100644 (file)
@@ -43,7 +43,12 @@ class CrashReporter {
     }
 
     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
       }
index bb114f9..72e9317 100644 (file)
@@ -1,5 +1,4 @@
 const assert = require('assert')
-const fs = require('fs')
 const http = require('http')
 const multiparty = require('multiparty')
 const path = require('path')