Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(330)

Side by Side Diff: chrome/browser/resources/print_preview.js

Issue 7056070: PrintPreview: Preview generation should not block print button. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: '' Created 9 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 var localStrings = new LocalStrings(); 5 var localStrings = new LocalStrings();
6 6
7 // The total page count of the previewed document regardless of which pages the 7 // The total page count of the previewed document regardless of which pages the
8 // user has selected. 8 // user has selected.
9 var totalPageCount = -1; 9 var totalPageCount = -1;
10 10
(...skipping 12 matching lines...) Expand all
23 // Used to disable some printing options when the preview is not modifiable. 23 // Used to disable some printing options when the preview is not modifiable.
24 var previewModifiable = false; 24 var previewModifiable = false;
25 25
26 // Destination list special value constants. 26 // Destination list special value constants.
27 const PRINT_TO_PDF = 'Print To PDF'; 27 const PRINT_TO_PDF = 'Print To PDF';
28 const MANAGE_PRINTERS = 'Manage Printers'; 28 const MANAGE_PRINTERS = 'Manage Printers';
29 29
30 // State of the print preview settings. 30 // State of the print preview settings.
31 var printSettings = new PrintSettings(); 31 var printSettings = new PrintSettings();
32 32
33 // Total number of print preview requests submitted.
34 var previewRequestCount = 0;
35
36 // True when a pending print file request exists.
37 var hasPendingPrintFileRequest = false;
38
33 /** 39 /**
34 * Window onload handler, sets up the page and starts print preview by getting 40 * Window onload handler, sets up the page and starts print preview by getting
35 * the printer list. 41 * the printer list.
36 */ 42 */
37 function onLoad() { 43 function onLoad() {
38 $('system-dialog-link').addEventListener('click', showSystemDialog);
39 $('cancel-button').addEventListener('click', handleCancelButtonClick); 44 $('cancel-button').addEventListener('click', handleCancelButtonClick);
40 45
41 if (!checkCompatiblePluginExists()) { 46 if (!checkCompatiblePluginExists()) {
42 displayErrorMessage(localStrings.getString('noPlugin'), false); 47 displayErrorMessage(localStrings.getString('noPlugin'), false);
43 $('mainview').parentElement.removeChild($('dummy-viewer')); 48 $('mainview').parentElement.removeChild($('dummy-viewer'));
49 $('print-button').addEventListener('click', showSystemDialog);
44 return; 50 return;
45 } 51 }
52 $('system-dialog-link').addEventListener('click', showSystemDialog);
dpapad 2011/06/06 18:07:35 Why move this line? If the there is no compatible
kmadhusu 2011/06/06 18:44:08 Print button is now enabled. In line #49, I have a
46 $('mainview').parentElement.removeChild($('dummy-viewer')); 53 $('mainview').parentElement.removeChild($('dummy-viewer'));
47 54
48 $('printer-list').disabled = true; 55 $('printer-list').disabled = true;
49 $('print-button').disabled = true; 56 $('print-button').onclick = printFile;
57
58 addEventListenersToPagesControls();
59 addEventListenersToCopiesControl();
50 showLoadingAnimation(); 60 showLoadingAnimation();
51 chrome.send('getDefaultPrinter'); 61 chrome.send('getDefaultPrinter');
52 } 62 }
53 63
54 /** 64 /**
55 * Adds event listeners to the settings controls. 65 * Adds event listeners to the pages section controls.
56 */ 66 */
57 function addEventListeners() { 67 function addEventListenersToPagesControls() {
58 $('print-button').onclick = printFile;
59
60 // Controls that require preview rendering.
61 $('all-pages').onclick = onPageSelectionMayHaveChanged; 68 $('all-pages').onclick = onPageSelectionMayHaveChanged;
62 $('print-pages').onclick = handleIndividualPagesCheckbox; 69 $('print-pages').onclick = handleIndividualPagesCheckbox;
63 var individualPages = $('individual-pages'); 70 var individualPages = $('individual-pages');
64 individualPages.onblur = function() { 71 individualPages.onblur = function() {
65 clearTimeout(timerId); 72 clearTimeout(timerId);
66 onPageSelectionMayHaveChanged(); 73 onPageSelectionMayHaveChanged();
67 }; 74 };
68 individualPages.onfocus = addTimerToPageRangeField; 75 individualPages.onfocus = addTimerToPageRangeField;
69 individualPages.oninput = resetPageRangeFieldTimer; 76 individualPages.oninput = resetPageRangeFieldTimer;
70 $('landscape').onclick = onLayoutModeToggle; 77 }
71 $('portrait').onclick = onLayoutModeToggle;
72 $('printer-list').onchange = updateControlsWithSelectedPrinterCapabilities;
73 78
74 // Controls that dont require preview rendering. 79 /**
80 * Adds event listeners to the copies controls.
81 */
82 function addEventListenersToCopiesControl() {
dpapad 2011/06/06 18:07:35 rename to addEventListenersToCopiesControls for co
kmadhusu 2011/06/06 18:44:08 Done.
75 $('copies').oninput = function() { 83 $('copies').oninput = function() {
76 copiesFieldChanged(); 84 copiesFieldChanged();
77 updatePrintButtonState(); 85 updatePrintButtonState();
78 updatePrintSummary(); 86 updatePrintSummary();
79 }; 87 };
80 $('two-sided').onclick = handleTwoSidedClick;
81 $('color').onclick = function() { setColor(true); };
82 $('bw').onclick = function() { setColor(false); };
83 $('increment').onclick = function() { 88 $('increment').onclick = function() {
84 onCopiesButtonsClicked(1); 89 onCopiesButtonsClicked(1);
85 updatePrintButtonState(); 90 updatePrintButtonState();
86 updatePrintSummary(); 91 updatePrintSummary();
87 }; 92 };
88 $('decrement').onclick = function() { 93 $('decrement').onclick = function() {
89 onCopiesButtonsClicked(-1); 94 onCopiesButtonsClicked(-1);
90 updatePrintButtonState(); 95 updatePrintButtonState();
91 updatePrintSummary(); 96 updatePrintSummary();
92 }; 97 };
93 } 98 }
94 99
95 /** 100 /**
101 * Adds event listeners to the settings controls.
102 */
103 function addEventListeners() {
104 // Controls that require preview rendering.
105 $('landscape').onclick = onLayoutModeToggle;
106 $('portrait').onclick = onLayoutModeToggle;
107 $('printer-list').onchange = updateControlsWithSelectedPrinterCapabilities;
108
109 // Controls that dont require preview rendering.
110 $('two-sided').onclick = handleTwoSidedClick;
111 $('color').onclick = function() { setColor(true); };
112 $('bw').onclick = function() { setColor(false); };
113 }
114
115 /**
96 * Removes event listeners from the settings controls. 116 * Removes event listeners from the settings controls.
97 */ 117 */
98 function removeEventListeners() { 118 function removeEventListeners() {
99 // Controls that require preview rendering. 119 // Controls that require preview rendering.
100 $('print-button').disabled = true;
101 $('all-pages').onclick = null;
102 $('print-pages').onclick = null;
103 var individualPages = $('individual-pages');
104 individualPages.onblur = null;
105 individualPages.onfocus = null;
106 individualPages.oninput = null;
107 clearTimeout(timerId);
108 $('landscape').onclick = null; 120 $('landscape').onclick = null;
109 $('portrait').onclick = null; 121 $('portrait').onclick = null;
110 $('printer-list').onchange = null; 122 $('printer-list').onchange = null;
111 123
112 // Controls that dont require preview rendering. 124 // Controls that dont require preview rendering.
113 $('copies').oninput = copiesFieldChanged;
114 $('two-sided').onclick = null; 125 $('two-sided').onclick = null;
115 $('color').onclick = null; 126 $('color').onclick = null;
116 $('bw').onclick = null; 127 $('bw').onclick = null;
117 $('increment').onclick = function() { onCopiesButtonsClicked(1); };
118 $('decrement').onclick = function() { onCopiesButtonsClicked(-1); };
119 } 128 }
120 129
121 /** 130 /**
122 * Asks the browser to close the preview tab. 131 * Asks the browser to close the preview tab.
123 */ 132 */
124 function handleCancelButtonClick() { 133 function handleCancelButtonClick() {
125 chrome.send('closePrintPreviewTab'); 134 chrome.send('closePrintPreviewTab');
126 } 135 }
127 136
128 /** 137 /**
129 * Asks the browser to show the native print dialog for printing. 138 * Asks the browser to show the native print dialog for printing.
130 */ 139 */
131 function showSystemDialog() { 140 function showSystemDialog() {
132 chrome.send('showSystemDialog'); 141 chrome.send('showSystemDialog');
133 } 142 }
134 143
135 /** 144 /**
136 * Disables the controls which need the initiator tab to generate preview 145 * Disables the controls which need the initiator tab to generate preview
137 * data. This function is called when the initiator tab is closed. 146 * data. This function is called when the initiator tab is closed.
138 * @param {string} initiatorTabURL The URL of the initiator tab. 147 * @param {string} initiatorTabURL The URL of the initiator tab.
139 */ 148 */
140 function onInitiatorTabClosed(initiatorTabURL) { 149 function onInitiatorTabClosed(initiatorTabURL) {
141 $('reopen-page').addEventListener('click', function() { 150 $('reopen-page').addEventListener('click', function() {
142 window.location = initiatorTabURL; 151 window.location = initiatorTabURL;
143 }); 152 });
144 displayErrorMessage(localStrings.getString('initiatorTabClosed'), true); 153 displayErrorMessage(localStrings.getString('initiatorTabClosed'), true);
154 $('print-button').disabled = true;
145 } 155 }
146 156
147 /** 157 /**
148 * Gets the selected printer capabilities and updates the controls accordingly. 158 * Gets the selected printer capabilities and updates the controls accordingly.
149 */ 159 */
150 function updateControlsWithSelectedPrinterCapabilities() { 160 function updateControlsWithSelectedPrinterCapabilities() {
151 var printerList = $('printer-list'); 161 var printerList = $('printer-list');
152 var selectedIndex = printerList.selectedIndex; 162 var selectedIndex = printerList.selectedIndex;
153 if (selectedIndex < 0) 163 if (selectedIndex < 0)
154 return; 164 return;
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
319 var deviceName = ''; 329 var deviceName = '';
320 if (selectedPrinter >= 0) 330 if (selectedPrinter >= 0)
321 deviceName = printerList.options[selectedPrinter].value; 331 deviceName = printerList.options[selectedPrinter].value;
322 return deviceName; 332 return deviceName;
323 } 333 }
324 334
325 /** 335 /**
326 * Asks the browser to print the preview PDF based on current print settings. 336 * Asks the browser to print the preview PDF based on current print settings.
327 */ 337 */
328 function printFile() { 338 function printFile() {
339 $('print-summary').innerHTML = localStrings.getString('printing');
dpapad 2011/06/06 18:07:35 I suspect that if you select Print to PDF, the hit
kmadhusu 2011/06/06 18:44:08 Done.
340
341 if (previewRequestCount > 0)
342 hasPendingPrintFileRequest = true;
343 else
344 hasPendingPrintFileRequest = false;
dpapad 2011/06/06 18:07:35 Replace if/else with hasPendingPrintFileRequest =
kmadhusu 2011/06/06 18:44:08 Done.
345
346 if (hasPendingPrintFileRequest) {
347 if (getSelectedPrinterName() != PRINT_TO_PDF)
348 chrome.send('hidePreview');
349 return;
350 }
351
329 if (getSelectedPrinterName() != PRINT_TO_PDF) { 352 if (getSelectedPrinterName() != PRINT_TO_PDF) {
330 $('print-button').classList.add('loading'); 353 $('print-button').classList.add('loading');
331 $('cancel-button').classList.add('loading'); 354 $('cancel-button').classList.add('loading');
332 $('print-summary').innerHTML = localStrings.getString('printing'); 355
333 removeEventListeners(); 356 removeEventListeners();
334 window.setTimeout(function() { chrome.send('print', [getSettingsJSON()]); }, 357 window.setTimeout(function() {chrome.send('print', [getSettingsJSON()]); },
335 1000); 358 1000);
336 } else 359 } else {
337 chrome.send('print', [getSettingsJSON()]); 360 chrome.send('print', [getSettingsJSON()]);
361 }
338 } 362 }
339 363
340 /** 364 /**
341 * Asks the browser to generate a preview PDF based on current print settings. 365 * Asks the browser to generate a preview PDF based on current print settings.
342 */ 366 */
343 function requestPrintPreview() { 367 function requestPrintPreview() {
368 previewRequestCount++;
344 removeEventListeners(); 369 removeEventListeners();
345 printSettings.save(); 370 printSettings.save();
346 showLoadingAnimation(); 371 showLoadingAnimation();
347 chrome.send('getPreview', [getSettingsJSON()]); 372 chrome.send('getPreview', [getSettingsJSON()]);
348 } 373 }
349 374
350 /** 375 /**
351 * Set the default printer. If there is one, generate a print preview. 376 * Set the default printer. If there is one, generate a print preview.
352 * @param {string} printer Name of the default printer. Empty if none. 377 * @param {string} printer Name of the default printer. Empty if none.
353 */ 378 */
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
490 * @param {string} jobTitle The print job title. 515 * @param {string} jobTitle The print job title.
491 * @param {boolean} modifiable If the preview is modifiable. 516 * @param {boolean} modifiable If the preview is modifiable.
492 * @param {string} previewUid Preview unique identifier. 517 * @param {string} previewUid Preview unique identifier.
493 */ 518 */
494 function updatePrintPreview(pageCount, jobTitle, modifiable, previewUid) { 519 function updatePrintPreview(pageCount, jobTitle, modifiable, previewUid) {
495 var tempPrintSettings = new PrintSettings(); 520 var tempPrintSettings = new PrintSettings();
496 tempPrintSettings.save(); 521 tempPrintSettings.save();
497 522
498 previewModifiable = modifiable; 523 previewModifiable = modifiable;
499 524
525 if (previewRequestCount > 0)
526 previewRequestCount--;
527
500 if (totalPageCount == -1) 528 if (totalPageCount == -1)
501 totalPageCount = pageCount; 529 totalPageCount = pageCount;
502 530
503 if (previouslySelectedPages.length == 0) 531 if (previouslySelectedPages.length == 0)
504 for (var i = 0; i < totalPageCount; i++) 532 for (var i = 0; i < totalPageCount; i++)
505 previouslySelectedPages.push(i+1); 533 previouslySelectedPages.push(i+1);
506 534
507 if (printSettings.deviceName != tempPrintSettings.deviceName) { 535 if (printSettings.deviceName != tempPrintSettings.deviceName) {
508 updateControlsWithSelectedPrinterCapabilities(); 536 updateControlsWithSelectedPrinterCapabilities();
509 return; 537 return;
510 } else if (printSettings.isLandscape != tempPrintSettings.isLandscape) { 538 } else if (printSettings.isLandscape != tempPrintSettings.isLandscape) {
511 setDefaultValuesAndRegeneratePreview(); 539 setDefaultValuesAndRegeneratePreview();
512 return; 540 return;
513 } else if (getSelectedPagesValidityLevel() == 1) { 541 } else if (getSelectedPagesValidityLevel() == 1) {
514 var currentlySelectedPages = getSelectedPagesSet(); 542 var currentlySelectedPages = getSelectedPagesSet();
515 if (!areArraysEqual(previouslySelectedPages, currentlySelectedPages)) { 543 if (!areArraysEqual(previouslySelectedPages, currentlySelectedPages)) {
516 previouslySelectedPages = currentlySelectedPages; 544 previouslySelectedPages = currentlySelectedPages;
517 requestPrintPreview(); 545 requestPrintPreview();
518 return; 546 return;
519 } 547 }
520 } 548 }
521 549
522 if (getSelectedPagesValidityLevel() != 1) 550 if (getSelectedPagesValidityLevel() != 1)
523 pageRangesFieldChanged(); 551 pageRangesFieldChanged();
524 552
525 // Update the current tab title. 553 // Update the current tab title.
526 document.title = localStrings.getStringF('printPreviewTitleFormat', jobTitle); 554 document.title = localStrings.getStringF('printPreviewTitleFormat', jobTitle);
527 555
528 createPDFPlugin(previewUid); 556 createPDFPlugin(previewUid);
557
558 if (previewRequestCount == 0 && hasPendingPrintFileRequest) {
559 printFile();
560 return;
561 }
562
529 updatePrintSummary(); 563 updatePrintSummary();
530 updatePrintButtonState(); 564 updatePrintButtonState();
531 addEventListeners(); 565 addEventListeners();
532 } 566 }
533 567
534 /** 568 /**
535 * Create the PDF plugin or reload the existing one. 569 * Create the PDF plugin or reload the existing one.
536 * @param {string} previewUid Preview unique identifier. 570 * @param {string} previewUid Preview unique identifier.
537 */ 571 */
538 function createPDFPlugin(previewUid) { 572 function createPDFPlugin(previewUid) {
(...skipping 425 matching lines...) Expand 10 before | Expand all | Expand 10 after
964 this.isLandscape = ''; 998 this.isLandscape = '';
965 } 999 }
966 1000
967 /** 1001 /**
968 * Takes a snapshot of the print settings. 1002 * Takes a snapshot of the print settings.
969 */ 1003 */
970 PrintSettings.prototype.save = function() { 1004 PrintSettings.prototype.save = function() {
971 this.deviceName = getSelectedPrinterName(); 1005 this.deviceName = getSelectedPrinterName();
972 this.isLandscape = isLandscape(); 1006 this.isLandscape = isLandscape();
973 } 1007 }
OLDNEW
« no previous file with comments | « chrome/browser/printing/print_preview_tab_controller.cc ('k') | chrome/browser/ui/webui/print_preview_handler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698