Bug 1668242, report printing errors in telemetry in the frontend r=mstriemer

Differential Revision: https://phabricator.services.mozilla.com/D93419
This commit is contained in:
Emma Malysz 2020-10-16 14:55:38 +00:00
parent db6627077f
commit 70754a80e3
2 changed files with 99 additions and 30 deletions

View File

@ -188,13 +188,23 @@ var PrintEventHandler = {
// First check the available destinations to ensure we get settings for an
// accessible printer.
let {
destinations,
let destinations,
defaultSystemPrinter,
fallbackPaperList,
selectedPrinter,
printersByName,
} = await this.getPrintDestinations();
printersByName;
try {
({
destinations,
defaultSystemPrinter,
fallbackPaperList,
selectedPrinter,
printersByName,
} = await this.getPrintDestinations());
} catch (e) {
this.reportPrintingError("PRINT_DESTINATIONS");
throw e;
}
PrintSettingsViewProxy.availablePrinters = printersByName;
PrintSettingsViewProxy.fallbackPaperList = fallbackPaperList;
PrintSettingsViewProxy.defaultSystemPrinter = defaultSystemPrinter;
@ -357,9 +367,15 @@ var PrintEventHandler = {
},
async refreshSettings(printerName) {
let currentPrinter = await PrintSettingsViewProxy.resolvePropertiesForPrinter(
printerName
);
let currentPrinter;
try {
currentPrinter = await PrintSettingsViewProxy.resolvePropertiesForPrinter(
printerName
);
} catch (e) {
this.reportPrintingError("PRINTER_PROPERTIES");
throw e;
}
this.settings = currentPrinter.settings;
this.defaultSettings = currentPrinter.defaultSettings;
@ -513,9 +529,14 @@ var PrintEventHandler = {
if (printerChanged || changedSettings.paperId) {
// The paper's margin properties are async,
// so resolve those now before we update the settings
await PrintSettingsViewProxy.fetchPaperMargins(
changedSettings.paperId || this.viewSettings.paperId
);
try {
await PrintSettingsViewProxy.fetchPaperMargins(
changedSettings.paperId || this.viewSettings.paperId
);
} catch (e) {
this.reportPrintingError("PAPER_MARGINS");
throw e;
}
}
for (let [setting, value] of Object.entries(changedSettings)) {
@ -601,10 +622,16 @@ var PrintEventHandler = {
// This resolves with a PrintPreviewSuccessInfo dictionary. That also has
// a `sheetCount` property available which we should use (bug 1662331).
let {
totalPageCount,
hasSelection,
} = await previewBrowser.frameLoader.printPreview(settings, sourceWinId);
let totalPageCount, hasSelection;
try {
({
totalPageCount,
hasSelection,
} = await previewBrowser.frameLoader.printPreview(settings, sourceWinId));
} catch (e) {
this.reportPrintingError("PRINT_PREVIEW");
throw e;
}
// Send the page count and show the preview.
let numPages = totalPageCount;
@ -661,11 +688,29 @@ var PrintEventHandler = {
if (Cu.isInAutomation) {
printers = await Promise.resolve(window._mockPrinters || []);
} else {
printers = await printerList.printers;
try {
printers = await printerList.printers;
} catch (e) {
this.reportPrintingError("PRINTER_LIST");
throw e;
}
}
const fallbackPaperList = await printerList.fallbackPaperList;
const lastUsedPrinterName = PSSVC.lastUsedPrinterName;
let fallbackPaperList;
try {
fallbackPaperList = await printerList.fallbackPaperList;
} catch (e) {
this.reportPrintingError("FALLBACK_PAPER_LIST");
throw e;
}
let lastUsedPrinterName;
try {
lastUsedPrinterName = PSSVC.lastUsedPrinterName;
} catch (e) {
this.reportPrintingError("LAST_USED_PRINTER");
throw e;
}
const defaultPrinterName = printerList.systemDefaultPrinterName;
const printersByName = {};
@ -768,6 +813,10 @@ var PrintEventHandler = {
}
},
reportPrintingError(aMessage) {
Services.telemetry.keyedScalarAdd("printing.error", aMessage, 1);
},
/**
* Prints the window. This method has been abstracted into a helper for
* testing purposes.
@ -892,7 +941,13 @@ var PrintSettingsViewProxy = {
// We've already resolved and calculated these values
return;
}
let margins = await paperInfo.paper.unwriteableMargin;
let margins;
try {
margins = await paperInfo.paper.unwriteableMargin;
} catch (e) {
this.reportPrintingError("UNWRITEABLE_MARGIN");
throw e;
}
margins.QueryInterface(Ci.nsIPaperMargin);
// margin dimenions are given on the paper in points, setting values need to be in inches
@ -915,18 +970,23 @@ var PrintSettingsViewProxy = {
// Await the async printer data.
if (printerInfo.printer) {
[
printerInfo.supportsColor,
printerInfo.supportsMonochrome,
printerInfo.paperList,
printerInfo.defaultSettings,
] = await Promise.all([
printerInfo.printer.supportsColor,
printerInfo.printer.supportsMonochrome,
printerInfo.printer.paperList,
// get a set of default settings for this printer
printerInfo.printer.createDefaultSettings(printerName),
]);
try {
[
printerInfo.supportsColor,
printerInfo.supportsMonochrome,
printerInfo.paperList,
printerInfo.defaultSettings,
] = await Promise.all([
printerInfo.printer.supportsColor,
printerInfo.printer.supportsMonochrome,
printerInfo.printer.paperList,
// get a set of default settings for this printer
printerInfo.printer.createDefaultSettings(printerName),
]);
} catch (e) {
this.reportPrintingError("PRINTER_SETTINGS");
throw e;
}
printerInfo.defaultSettings.QueryInterface(Ci.nsIPrintSettings);
} else if (printerName == PrintUtils.SAVE_TO_PDF_PRINTER) {
// The Mozilla PDF pseudo-printer has no actual nsIPrinter implementation

View File

@ -4127,6 +4127,15 @@ printing:
- 'OUT_OF_MEMORY'
- 'UNEXPECTED'
- 'FAILURE'
- 'FALLBACK_PAPER_LIST'
- 'LAST_USED_PRINTER'
- 'PAPER_MARGINS'
- 'PRINT_DESTINATIONS'
- 'PRINT_PREVIEW'
- 'PRINTER_LIST'
- 'PRINTER_PROPERTIES'
- 'PRINTER_SETTINGS'
- 'UNWRITEABLE_MARGIN'
expires: never
kind: uint
notification_emails: