Index: chrome/browser/resources/print_preview/print_preview.js |
diff --git a/chrome/browser/resources/print_preview/print_preview.js b/chrome/browser/resources/print_preview/print_preview.js |
index e26fcd89b427de43a04d3abaf974c8a4807209a2..2870e7b132a9ca3aecb6f1efbca953bf01063edc 100644 |
--- a/chrome/browser/resources/print_preview/print_preview.js |
+++ b/chrome/browser/resources/print_preview/print_preview.js |
@@ -33,6 +33,9 @@ var defaultOrLastUsedPrinterName = ''; |
// True when a pending print preview request exists. |
var hasPendingPreviewRequest = false; |
+// The ID of the last preview request. |
+var lastPreviewRequestID = -1; |
+ |
// True when a pending print file request exists. |
var hasPendingPrintFileRequest = false; |
@@ -341,31 +344,40 @@ function getDuplexMode() { |
} |
/** |
- * Creates a JSON string based on the values in the printer settings. |
+ * Creates an object based on the values in the printer settings. |
* |
- * @return {string} JSON string with print job settings. |
+ * @return {Object} Object containing print job settings. |
*/ |
-function getSettingsJSON() { |
+function getSettings() { |
var deviceName = getSelectedPrinterName(); |
var printToPDF = (deviceName == PRINT_TO_PDF); |
- var settings = {'deviceName': deviceName, |
- 'pageRange': pageSettings.selectedPageRanges, |
- 'printAll': pageSettings.allPagesRadioButton.checked, |
- 'duplex': getDuplexMode(), |
- 'copies': copiesSettings.numberOfCopies, |
- 'collate': isCollated(), |
- 'landscape': isLandscape(), |
- 'color': isColor(), |
- 'printToPDF': printToPDF}; |
+ var settings = |
+ {'deviceName': deviceName, |
+ 'pageRange': pageSettings.selectedPageRanges, |
+ 'printAll': pageSettings.allPagesRadioButton.checked, |
+ 'duplex': getDuplexMode(), |
+ 'copies': copiesSettings.numberOfCopies, |
+ 'collate': isCollated(), |
+ 'landscape': isLandscape(), |
+ 'color': isColor(), |
+ 'printToPDF': printToPDF, |
+ 'requestID': 0}; |
+ |
var printerList = $('printer-list'); |
var selectedPrinter = printerList.selectedIndex; |
if (cloudprint.isCloudPrint(printerList.options[selectedPrinter])) { |
settings['cloudPrintID'] = |
printerList.options[selectedPrinter].value; |
} |
+ return settings; |
+} |
- return JSON.stringify(settings); |
+/** |
+ * @return {number} The next unused preview request id. |
+ */ |
+function generatePreviewRequestID() { |
+ return ++lastPreviewRequestID; |
} |
/** |
@@ -441,7 +453,7 @@ function sendPrintFileRequest() { |
var printer = printerList[printerList.selectedIndex]; |
chrome.send('saveLastPrinter', [printer.textContent, |
cloudprint.getData(printer)]); |
- chrome.send('print', [getSettingsJSON(), |
+ chrome.send('print', [JSON.stringify(getSettings()), |
cloudprint.getPrintTicketJSON(printer)]); |
} |
@@ -455,7 +467,9 @@ function requestPrintPreview() { |
if (!isTabHidden) |
showLoadingAnimation(); |
- chrome.send('getPreview', [getSettingsJSON()]); |
+ var settings = getSettings(); |
+ settings.requestID = generatePreviewRequestID(); |
+ chrome.send('getPreview', [JSON.stringify(settings)]); |
} |
/** |
@@ -800,8 +814,15 @@ function onDidPreviewPage(pageNumber) { |
* @param {string} jobTitle The print job title. |
* @param {boolean} modifiable If the preview is modifiable. |
* @param {string} previewUid Preview unique identifier. |
- */ |
-function updatePrintPreview(jobTitle, modifiable, previewUid) { |
+ * @param {number} previewRequestId The preview request id that resulted in this |
+ * response. |
+ */ |
+function updatePrintPreview(jobTitle, |
+ modifiable, |
+ previewUid, |
+ previewRequestId) { |
+ if (lastPreviewRequestID != previewRequestId) |
+ return; |
hasPendingPreviewRequest = false; |
if (checkIfSettingsChangedAndRegeneratePreview()) |