summaryrefslogtreecommitdiff
path: root/toolkit/crashreporter/CrashReports.jsm
diff options
context:
space:
mode:
authorMatt A. Tobin <mattatobin@localhost.localdomain>2018-02-02 04:16:08 -0500
committerMatt A. Tobin <mattatobin@localhost.localdomain>2018-02-02 04:16:08 -0500
commit5f8de423f190bbb79a62f804151bc24824fa32d8 (patch)
tree10027f336435511475e392454359edea8e25895d /toolkit/crashreporter/CrashReports.jsm
parent49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff)
downloaduxp-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz
Add m-esr52 at 52.6.0
Diffstat (limited to 'toolkit/crashreporter/CrashReports.jsm')
-rw-r--r--toolkit/crashreporter/CrashReports.jsm91
1 files changed, 91 insertions, 0 deletions
diff --git a/toolkit/crashreporter/CrashReports.jsm b/toolkit/crashreporter/CrashReports.jsm
new file mode 100644
index 0000000000..d34d6795e8
--- /dev/null
+++ b/toolkit/crashreporter/CrashReports.jsm
@@ -0,0 +1,91 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+Components.utils.import("resource://gre/modules/Services.jsm");
+
+this.EXPORTED_SYMBOLS = [
+ "CrashReports"
+];
+
+this.CrashReports = {
+ pendingDir: null,
+ reportsDir: null,
+ submittedDir: null,
+ getReports: function CrashReports_getReports()
+ {
+ let reports = [];
+
+ try {
+ // Ignore any non http/https urls
+ if (!/^https?:/i.test(Services.prefs.getCharPref("breakpad.reportURL")))
+ return reports;
+ }
+ catch (e) { }
+
+ if (this.submittedDir.exists() && this.submittedDir.isDirectory()) {
+ let entries = this.submittedDir.directoryEntries;
+ while (entries.hasMoreElements()) {
+ let file = entries.getNext().QueryInterface(Components.interfaces.nsIFile);
+ let leaf = file.leafName;
+ if (leaf.startsWith("bp-") &&
+ leaf.endsWith(".txt")) {
+ let entry = {
+ id: leaf.slice(0, -4),
+ date: file.lastModifiedTime,
+ pending: false
+ };
+ reports.push(entry);
+ }
+ }
+ }
+
+ if (this.pendingDir.exists() && this.pendingDir.isDirectory()) {
+ let uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
+ let entries = this.pendingDir.directoryEntries;
+ while (entries.hasMoreElements()) {
+ let file = entries.getNext().QueryInterface(Components.interfaces.nsIFile);
+ let leaf = file.leafName;
+ let id = leaf.slice(0, -4);
+ if (leaf.endsWith(".dmp") && uuidRegex.test(id)) {
+ let entry = {
+ id: id,
+ date: file.lastModifiedTime,
+ pending: true
+ };
+ reports.push(entry);
+ }
+ }
+ }
+
+ // Sort reports descending by date
+ return reports.sort( (a, b) => b.date - a.date);
+ }
+}
+
+function CrashReports_pendingDir()
+{
+ let pendingDir = Services.dirsvc.get("UAppData", Components.interfaces.nsIFile);
+ pendingDir.append("Crash Reports");
+ pendingDir.append("pending");
+ return pendingDir;
+}
+
+function CrashReports_reportsDir()
+{
+ let reportsDir = Services.dirsvc.get("UAppData", Components.interfaces.nsIFile);
+ reportsDir.append("Crash Reports");
+ return reportsDir;
+}
+
+function CrashReports_submittedDir()
+{
+ let submittedDir = Services.dirsvc.get("UAppData", Components.interfaces.nsIFile);
+ submittedDir.append("Crash Reports");
+ submittedDir.append("submitted");
+ return submittedDir;
+}
+
+this.CrashReports.pendingDir = CrashReports_pendingDir();
+this.CrashReports.reportsDir = CrashReports_reportsDir();
+this.CrashReports.submittedDir = CrashReports_submittedDir();