OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // require: cr/ui/print_preview_cloud.js | 5 // require: cr/ui/print_preview_cloud.js |
6 | 6 |
7 var localStrings = new LocalStrings(); | 7 var localStrings = new LocalStrings(); |
8 | 8 |
9 // If useCloudPrint is true we attempt to connect to cloud print | 9 // If useCloudPrint is true we attempt to connect to cloud print |
10 // and populate the list of printers with cloud print printers. | 10 // and populate the list of printers with cloud print printers. |
(...skipping 15 matching lines...) Expand all Loading... |
26 | 26 |
27 // State of the print preview settings. | 27 // State of the print preview settings. |
28 var printSettings = new PrintSettings(); | 28 var printSettings = new PrintSettings(); |
29 | 29 |
30 // The name of the default or last used printer. | 30 // The name of the default or last used printer. |
31 var defaultOrLastUsedPrinterName = ''; | 31 var defaultOrLastUsedPrinterName = ''; |
32 | 32 |
33 // True when a pending print preview request exists. | 33 // True when a pending print preview request exists. |
34 var hasPendingPreviewRequest = false; | 34 var hasPendingPreviewRequest = false; |
35 | 35 |
| 36 // The ID of the last preview request. |
| 37 var lastPreviewRequestID = -1; |
| 38 |
36 // True when a pending print file request exists. | 39 // True when a pending print file request exists. |
37 var hasPendingPrintFileRequest = false; | 40 var hasPendingPrintFileRequest = false; |
38 | 41 |
39 // True when preview tab is hidden. | 42 // True when preview tab is hidden. |
40 var isTabHidden = false; | 43 var isTabHidden = false; |
41 | 44 |
42 // Object holding all the pages related settings. | 45 // Object holding all the pages related settings. |
43 var pageSettings; | 46 var pageSettings; |
44 | 47 |
45 // Object holding all the copies related settings. | 48 // Object holding all the copies related settings. |
(...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
334 * @return {number} duplex mode. | 337 * @return {number} duplex mode. |
335 */ | 338 */ |
336 function getDuplexMode() { | 339 function getDuplexMode() { |
337 // Constants values matches printing::DuplexMode enum. | 340 // Constants values matches printing::DuplexMode enum. |
338 const SIMPLEX = 0; | 341 const SIMPLEX = 0; |
339 const LONG_EDGE = 1; | 342 const LONG_EDGE = 1; |
340 return !copiesSettings.twoSidedCheckbox.checked ? SIMPLEX : LONG_EDGE; | 343 return !copiesSettings.twoSidedCheckbox.checked ? SIMPLEX : LONG_EDGE; |
341 } | 344 } |
342 | 345 |
343 /** | 346 /** |
344 * Creates a JSON string based on the values in the printer settings. | 347 * Creates an object based on the values in the printer settings. |
345 * | 348 * |
346 * @return {string} JSON string with print job settings. | 349 * @return {Object} Object containing print job settings. |
347 */ | 350 */ |
348 function getSettingsJSON() { | 351 function getSettings() { |
349 var deviceName = getSelectedPrinterName(); | 352 var deviceName = getSelectedPrinterName(); |
350 var printToPDF = (deviceName == PRINT_TO_PDF); | 353 var printToPDF = (deviceName == PRINT_TO_PDF); |
351 | 354 |
352 var settings = {'deviceName': deviceName, | 355 var settings = |
353 'pageRange': pageSettings.selectedPageRanges, | 356 {'deviceName': deviceName, |
354 'printAll': pageSettings.allPagesRadioButton.checked, | 357 'pageRange': pageSettings.selectedPageRanges, |
355 'duplex': getDuplexMode(), | 358 'printAll': pageSettings.allPagesRadioButton.checked, |
356 'copies': copiesSettings.numberOfCopies, | 359 'duplex': getDuplexMode(), |
357 'collate': isCollated(), | 360 'copies': copiesSettings.numberOfCopies, |
358 'landscape': isLandscape(), | 361 'collate': isCollated(), |
359 'color': isColor(), | 362 'landscape': isLandscape(), |
360 'printToPDF': printToPDF}; | 363 'color': isColor(), |
| 364 'printToPDF': printToPDF, |
| 365 'requestID': 0}; |
| 366 |
361 var printerList = $('printer-list'); | 367 var printerList = $('printer-list'); |
362 var selectedPrinter = printerList.selectedIndex; | 368 var selectedPrinter = printerList.selectedIndex; |
363 if (cloudprint.isCloudPrint(printerList.options[selectedPrinter])) { | 369 if (cloudprint.isCloudPrint(printerList.options[selectedPrinter])) { |
364 settings['cloudPrintID'] = | 370 settings['cloudPrintID'] = |
365 printerList.options[selectedPrinter].value; | 371 printerList.options[selectedPrinter].value; |
366 } | 372 } |
367 | 373 return settings; |
368 return JSON.stringify(settings); | |
369 } | 374 } |
370 | 375 |
371 /** | 376 /** |
| 377 * @return {number} The next unused preview request id. |
| 378 */ |
| 379 function generatePreviewRequestID() { |
| 380 return ++lastPreviewRequestID; |
| 381 } |
| 382 |
| 383 /** |
372 * Returns the name of the selected printer or the empty string if no | 384 * Returns the name of the selected printer or the empty string if no |
373 * printer is selected. | 385 * printer is selected. |
374 * @return {string} The name of the currently selected printer. | 386 * @return {string} The name of the currently selected printer. |
375 */ | 387 */ |
376 function getSelectedPrinterName() { | 388 function getSelectedPrinterName() { |
377 var printerList = $('printer-list') | 389 var printerList = $('printer-list') |
378 var selectedPrinter = printerList.selectedIndex; | 390 var selectedPrinter = printerList.selectedIndex; |
379 if (selectedPrinter < 0) | 391 if (selectedPrinter < 0) |
380 return ''; | 392 return ''; |
381 return printerList.options[selectedPrinter].value; | 393 return printerList.options[selectedPrinter].value; |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
434 } | 446 } |
435 | 447 |
436 /** | 448 /** |
437 * Sends a message to initiate print workflow. | 449 * Sends a message to initiate print workflow. |
438 */ | 450 */ |
439 function sendPrintFileRequest() { | 451 function sendPrintFileRequest() { |
440 var printerList = $('printer-list'); | 452 var printerList = $('printer-list'); |
441 var printer = printerList[printerList.selectedIndex]; | 453 var printer = printerList[printerList.selectedIndex]; |
442 chrome.send('saveLastPrinter', [printer.textContent, | 454 chrome.send('saveLastPrinter', [printer.textContent, |
443 cloudprint.getData(printer)]); | 455 cloudprint.getData(printer)]); |
444 chrome.send('print', [getSettingsJSON(), | 456 chrome.send('print', [JSON.stringify(getSettings()), |
445 cloudprint.getPrintTicketJSON(printer)]); | 457 cloudprint.getPrintTicketJSON(printer)]); |
446 } | 458 } |
447 | 459 |
448 /** | 460 /** |
449 * Asks the browser to generate a preview PDF based on current print settings. | 461 * Asks the browser to generate a preview PDF based on current print settings. |
450 */ | 462 */ |
451 function requestPrintPreview() { | 463 function requestPrintPreview() { |
452 hasPendingPreviewRequest = true; | 464 hasPendingPreviewRequest = true; |
453 removeEventListeners(); | 465 removeEventListeners(); |
454 printSettings.save(); | 466 printSettings.save(); |
455 if (!isTabHidden) | 467 if (!isTabHidden) |
456 showLoadingAnimation(); | 468 showLoadingAnimation(); |
457 | 469 |
458 chrome.send('getPreview', [getSettingsJSON()]); | 470 var settings = getSettings(); |
| 471 settings.requestID = generatePreviewRequestID(); |
| 472 chrome.send('getPreview', [JSON.stringify(settings)]); |
459 } | 473 } |
460 | 474 |
461 /** | 475 /** |
462 * Called from PrintPreviewUI::OnFileSelectionCancelled to notify the print | 476 * Called from PrintPreviewUI::OnFileSelectionCancelled to notify the print |
463 * preview tab regarding the file selection cancel event. | 477 * preview tab regarding the file selection cancel event. |
464 */ | 478 */ |
465 function fileSelectionCancelled() { | 479 function fileSelectionCancelled() { |
466 // TODO(thestig) re-enable controls here. | 480 // TODO(thestig) re-enable controls here. |
467 } | 481 } |
468 | 482 |
(...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
793 // TODO(thestig) Make use of |pageNumber| for pipelined preview generation. | 807 // TODO(thestig) Make use of |pageNumber| for pipelined preview generation. |
794 } | 808 } |
795 | 809 |
796 /** | 810 /** |
797 * Update the print preview when new preview data is available. | 811 * Update the print preview when new preview data is available. |
798 * Create the PDF plugin as needed. | 812 * Create the PDF plugin as needed. |
799 * Called from PrintPreviewUI::PreviewDataIsAvailable(). | 813 * Called from PrintPreviewUI::PreviewDataIsAvailable(). |
800 * @param {string} jobTitle The print job title. | 814 * @param {string} jobTitle The print job title. |
801 * @param {boolean} modifiable If the preview is modifiable. | 815 * @param {boolean} modifiable If the preview is modifiable. |
802 * @param {string} previewUid Preview unique identifier. | 816 * @param {string} previewUid Preview unique identifier. |
| 817 * @param {number} previewRequestId The preview request id that resulted in this |
| 818 * response. |
803 */ | 819 */ |
804 function updatePrintPreview(jobTitle, modifiable, previewUid) { | 820 function updatePrintPreview(jobTitle, |
| 821 modifiable, |
| 822 previewUid, |
| 823 previewRequestId) { |
| 824 if (lastPreviewRequestID != previewRequestId) |
| 825 return; |
805 hasPendingPreviewRequest = false; | 826 hasPendingPreviewRequest = false; |
806 | 827 |
807 if (checkIfSettingsChangedAndRegeneratePreview()) | 828 if (checkIfSettingsChangedAndRegeneratePreview()) |
808 return; | 829 return; |
809 | 830 |
810 previewModifiable = modifiable; | 831 previewModifiable = modifiable; |
811 document.title = localStrings.getStringF('printPreviewTitleFormat', jobTitle); | 832 document.title = localStrings.getStringF('printPreviewTitleFormat', jobTitle); |
812 | 833 |
813 createPDFPlugin(previewUid); | 834 createPDFPlugin(previewUid); |
814 updatePrintSummary(); | 835 updatePrintSummary(); |
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
983 } | 1004 } |
984 | 1005 |
985 /** | 1006 /** |
986 * Takes a snapshot of the print settings. | 1007 * Takes a snapshot of the print settings. |
987 */ | 1008 */ |
988 PrintSettings.prototype.save = function() { | 1009 PrintSettings.prototype.save = function() { |
989 this.deviceName = getSelectedPrinterName(); | 1010 this.deviceName = getSelectedPrinterName(); |
990 this.isLandscape = isLandscape(); | 1011 this.isLandscape = isLandscape(); |
991 } | 1012 } |
992 | 1013 |
OLD | NEW |