electron/lib/common/crash-reporter.js

101 lines
2.5 KiB
JavaScript
Raw Normal View History

2020-03-20 20:28:31 +00:00
'use strict';
2020-03-20 20:28:31 +00:00
const binding = process.electronBinding('crash_reporter');
2016-01-12 02:40:23 +00:00
class CrashReporter {
constructor () {
2020-03-20 20:28:31 +00:00
this.productName = null;
this.crashesDirectory = null;
}
2019-02-05 20:56:44 +00:00
init (options) {
2020-03-20 20:28:31 +00:00
throw new Error('Not implemented');
}
start (options) {
2020-03-20 20:28:31 +00:00
if (options == null) options = {};
2016-01-12 02:40:23 +00:00
const {
productName,
2017-10-31 02:51:22 +00:00
companyName,
extra = {},
ignoreSystemCrashHandler = false,
2017-10-31 02:51:22 +00:00
submitURL,
uploadToServer = true,
rateLimit = false,
compress = false
2020-03-20 20:28:31 +00:00
} = options;
2020-03-20 20:28:31 +00:00
if (companyName == null) throw new Error('companyName is a required option to crashReporter.start');
if (submitURL == null) throw new Error('submitURL is a required option to crashReporter.start');
2019-02-05 20:56:44 +00:00
const ret = this.init({
submitURL,
productName
2020-03-20 20:28:31 +00:00
});
2020-03-20 20:28:31 +00:00
this.productName = ret.productName;
this.crashesDirectory = ret.crashesDirectory;
2020-03-20 20:28:31 +00:00
if (extra._productName == null) extra._productName = ret.productName;
if (extra._companyName == null) extra._companyName = companyName;
if (extra._version == null) extra._version = ret.appVersion;
binding.start(submitURL, ret.crashesDirectory, uploadToServer, ignoreSystemCrashHandler, rateLimit, compress, extra);
}
2016-01-12 02:40:23 +00:00
getLastCrashReport () {
const reports = this.getUploadedReports()
2018-03-13 20:57:12 +00:00
.sort((a, b) => {
2020-03-20 20:28:31 +00:00
const ats = (a && a.date) ? new Date(a.date).getTime() : 0;
const bts = (b && b.date) ? new Date(b.date).getTime() : 0;
return bts - ats;
});
2018-03-13 20:57:12 +00:00
2020-03-20 20:28:31 +00:00
return (reports.length > 0) ? reports[0] : null;
}
2016-01-12 02:40:23 +00:00
getUploadedReports () {
2020-03-20 20:28:31 +00:00
const crashDir = this.getCrashesDirectory();
if (!crashDir) {
2020-03-20 20:28:31 +00:00
throw new Error('crashReporter has not been started');
}
2020-03-20 20:28:31 +00:00
return binding.getUploadedReports(crashDir);
}
2016-01-12 02:40:23 +00:00
getCrashesDirectory () {
2020-03-20 20:28:31 +00:00
return this.crashesDirectory;
}
2016-11-22 08:30:20 +00:00
getUploadToServer () {
if (process.type === 'browser') {
2020-03-20 20:28:31 +00:00
return binding.getUploadToServer();
} else {
2020-03-20 20:28:31 +00:00
throw new Error('getUploadToServer can only be called from the main process');
}
2016-11-08 00:03:57 +00:00
}
2016-11-22 08:30:20 +00:00
setUploadToServer (uploadToServer) {
if (process.type === 'browser') {
2020-03-20 20:28:31 +00:00
return binding.setUploadToServer(uploadToServer);
} else {
2020-03-20 20:28:31 +00:00
throw new Error('setUploadToServer can only be called from the main process');
}
2016-11-08 00:03:57 +00:00
}
2017-02-02 22:23:21 +00:00
addExtraParameter (key, value) {
2020-03-20 20:28:31 +00:00
binding.addExtraParameter(key, value);
}
removeExtraParameter (key) {
2020-03-20 20:28:31 +00:00
binding.removeExtraParameter(key);
}
getParameters () {
2020-03-20 20:28:31 +00:00
return binding.getParameters();
}
}
2020-03-20 20:28:31 +00:00
module.exports = CrashReporter;