/* 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/. */ var EXPORTED_SYMBOLS = ["CrashReports"]; var 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.nextFile; 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.nextFile; let leaf = file.leafName; let id = leaf.slice(0, -4); if (leaf.endsWith(".dmp") && uuidRegex.test(id)) { let entry = { 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", Ci.nsIFile); pendingDir.append("Crash Reports"); pendingDir.append("pending"); return pendingDir; } function CrashReports_reportsDir() { let reportsDir = Services.dirsvc.get("UAppData", Ci.nsIFile); reportsDir.append("Crash Reports"); return reportsDir; } function CrashReports_submittedDir() { let submittedDir = Services.dirsvc.get("UAppData", Ci.nsIFile); submittedDir.append("Crash Reports"); submittedDir.append("submitted"); return submittedDir; } CrashReports.pendingDir = CrashReports_pendingDir(); CrashReports.reportsDir = CrashReports_reportsDir(); CrashReports.submittedDir = CrashReports_submittedDir();