diff options
author | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
---|---|---|
committer | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
commit | 5f8de423f190bbb79a62f804151bc24824fa32d8 (patch) | |
tree | 10027f336435511475e392454359edea8e25895d /toolkit/crashreporter/CrashReports.jsm | |
parent | 49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff) | |
download | uxp-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz |
Add m-esr52 at 52.6.0
Diffstat (limited to 'toolkit/crashreporter/CrashReports.jsm')
-rw-r--r-- | toolkit/crashreporter/CrashReports.jsm | 91 |
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(); |