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

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

Issue 6982030: Print Preview: Detecting plugin existence before generating the preview. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressing comments Created 9 years, 7 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 // Whether or not the PDF plugin supports all the capabilities needed for
8 // print preview.
9 var hasCompatiblePDFPlugin = true;
10
11 // 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
12 // user has selected. 8 // user has selected.
13 var totalPageCount = -1; 9 var totalPageCount = -1;
14 10
15 // The previously selected pages by the user. It is used in 11 // The previously selected pages by the user. It is used in
16 // onPageSelectionMayHaveChanged() to make sure that a new preview is not 12 // onPageSelectionMayHaveChanged() to make sure that a new preview is not
17 // requested more often than necessary. 13 // requested more often than necessary.
18 var previouslySelectedPages = []; 14 var previouslySelectedPages = [];
19 15
20 // The previously selected layout mode. It is used in order to prevent the 16 // The previously selected layout mode. It is used in order to prevent the
(...skipping 20 matching lines...) Expand all
41 37
42 // Destination list special value constants. 38 // Destination list special value constants.
43 const PRINT_TO_PDF = 'Print To PDF'; 39 const PRINT_TO_PDF = 'Print To PDF';
44 const MANAGE_PRINTERS = 'Manage Printers'; 40 const MANAGE_PRINTERS = 'Manage Printers';
45 41
46 /** 42 /**
47 * Window onload handler, sets up the page and starts print preview by getting 43 * Window onload handler, sets up the page and starts print preview by getting
48 * the printer list. 44 * the printer list.
49 */ 45 */
50 function onLoad() { 46 function onLoad() {
47 $('system-dialog-link').addEventListener('click', showSystemDialog);
48 $('cancel-button').addEventListener('click', handleCancelButtonClick);
49 $('dummy-viewer').classList.add('hidden');
50
51 if(!checkCompatiblePluginExists()) {
Lei Zhang 2011/05/11 22:19:51 nit: space after if
dpapad 2011/05/11 23:31:03 Done.
52 displayErrorMessage(localStrings.getString('noPlugin'));
53 return;
54 }
55
vandebo (ex-Chrome) 2011/05/11 22:13:54 Should we remove the dummy-viewer is some way so t
dpapad 2011/05/11 23:31:03 The plugin is removed from the page on line 49. If
51 $('printer-list').disabled = true; 56 $('printer-list').disabled = true;
52 $('print-button').disabled = true; 57 $('print-button').disabled = true;
53 $('print-button').addEventListener('click', printFile); 58 $('print-button').addEventListener('click', printFile);
54 $('cancel-button').addEventListener('click', handleCancelButtonClick);
55 $('all-pages').addEventListener('click', onPageSelectionMayHaveChanged); 59 $('all-pages').addEventListener('click', onPageSelectionMayHaveChanged);
56 $('copies').addEventListener('input', copiesFieldChanged); 60 $('copies').addEventListener('input', copiesFieldChanged);
57 $('print-pages').addEventListener('click', handleIndividualPagesCheckbox); 61 $('print-pages').addEventListener('click', handleIndividualPagesCheckbox);
58 $('individual-pages').addEventListener('blur', function() { 62 $('individual-pages').addEventListener('blur', function() {
59 clearTimeout(timerId); 63 clearTimeout(timerId);
60 onPageSelectionMayHaveChanged(); 64 onPageSelectionMayHaveChanged();
61 }); 65 });
62 $('individual-pages').addEventListener('focus', addTimerToPageRangeField); 66 $('individual-pages').addEventListener('focus', addTimerToPageRangeField);
63 $('individual-pages').addEventListener('input', pageRangesFieldChanged); 67 $('individual-pages').addEventListener('input', pageRangesFieldChanged);
64 $('two-sided').addEventListener('click', handleTwoSidedClick) 68 $('two-sided').addEventListener('click', handleTwoSidedClick)
65 $('landscape').addEventListener('click', onLayoutModeToggle); 69 $('landscape').addEventListener('click', onLayoutModeToggle);
66 $('portrait').addEventListener('click', onLayoutModeToggle); 70 $('portrait').addEventListener('click', onLayoutModeToggle);
67 $('color').addEventListener('click', function() { setColor(true); }); 71 $('color').addEventListener('click', function() { setColor(true); });
68 $('bw').addEventListener('click', function() { setColor(false); }); 72 $('bw').addEventListener('click', function() { setColor(false); });
69 $('printer-list').addEventListener( 73 $('printer-list').addEventListener(
70 'change', updateControlsWithSelectedPrinterCapabilities); 74 'change', updateControlsWithSelectedPrinterCapabilities);
71 $('system-dialog-link').addEventListener('click', showSystemDialog);
72 $('increment').addEventListener('click', 75 $('increment').addEventListener('click',
73 function() { onCopiesButtonsClicked(1); }); 76 function() { onCopiesButtonsClicked(1); });
74 $('decrement').addEventListener('click', 77 $('decrement').addEventListener('click',
75 function() { onCopiesButtonsClicked(-1); }); 78 function() { onCopiesButtonsClicked(-1); });
76 $('controls').onsubmit = function() { return false; }; 79 $('controls').onsubmit = function() { return false; };
77 chrome.send('getPrinters'); 80 chrome.send('getPrinters');
78 } 81 }
79 82
80 /** 83 /**
81 * Asks the browser to close the preview tab. 84 * Asks the browser to close the preview tab.
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
316 function printFile() { 319 function printFile() {
317 chrome.send('print', [getSettingsJSON()]); 320 chrome.send('print', [getSettingsJSON()]);
318 } 321 }
319 322
320 /** 323 /**
321 * Asks the browser to generate a preview PDF based on current print settings. 324 * Asks the browser to generate a preview PDF based on current print settings.
322 */ 325 */
323 function requestPrintPreview() { 326 function requestPrintPreview() {
324 isPreviewStillLoading = true; 327 isPreviewStillLoading = true;
325 setControlsDisabled(true); 328 setControlsDisabled(true);
326 $('dancing-dots').classList.remove('hidden');
327 $('dancing-dots').classList.remove('invisible'); 329 $('dancing-dots').classList.remove('invisible');
328 chrome.send('getPreview', [getSettingsJSON()]); 330 chrome.send('getPreview', [getSettingsJSON()]);
329 } 331 }
330 332
331 /** 333 /**
332 * Fill the printer list drop down. 334 * Fill the printer list drop down.
333 * Called from PrintPreviewHandler::SendPrinterList(). 335 * Called from PrintPreviewHandler::SendPrinterList().
334 * @param {Array} printers Array of printer info objects. 336 * @param {Array} printers Array of printer info objects.
335 * @param {number} defaultPrinterIndex The index of the default printer. 337 * @param {number} defaultPrinterIndex The index of the default printer.
336 */ 338 */
(...skipping 30 matching lines...) Expand all
367 if (is_default) 369 if (is_default)
368 option.selected = true; 370 option.selected = true;
369 } 371 }
370 372
371 /** 373 /**
372 * Sets the color mode for the PDF plugin. 374 * Sets the color mode for the PDF plugin.
373 * Called from PrintPreviewHandler::ProcessColorSetting(). 375 * Called from PrintPreviewHandler::ProcessColorSetting().
374 * @param {boolean} color is true if the PDF plugin should display in color. 376 * @param {boolean} color is true if the PDF plugin should display in color.
375 */ 377 */
376 function setColor(color) { 378 function setColor(color) {
377 if (!hasCompatiblePDFPlugin) {
378 return;
379 }
380 var pdfViewer = $('pdf-viewer'); 379 var pdfViewer = $('pdf-viewer');
381 if (!pdfViewer) { 380 if (!pdfViewer) {
382 return; 381 return;
383 } 382 }
384 pdfViewer.grayscale(!color); 383 pdfViewer.grayscale(!color);
385 } 384 }
386 385
387 /** 386 /**
388 * Display an error message in the center of the preview area. 387 * Display an error message in the center of the preview area.
389 * @param (string) errorMessage The error message to be displayed. 388 * @param (string) errorMessage The error message to be displayed.
390 */ 389 */
391 function displayErrorMessage(errorMessage) { 390 function displayErrorMessage(errorMessage) {
392 isPreviewStillLoading = false; 391 isPreviewStillLoading = false;
392 $('dancing-dots').classList.remove('invisible');
393 $('dancing-dots-text').classList.add('hidden'); 393 $('dancing-dots-text').classList.add('hidden');
394 $('error-text').innerHTML = errorMessage; 394 $('error-text').innerHTML = errorMessage;
395 $('error-text').classList.remove('hidden'); 395 $('error-text').classList.remove('hidden');
396 setControlsDisabled(true); 396 setControlsDisabled(true);
397 397
398 var pdfViewer = $('pdf-viewer'); 398 var pdfViewer = $('pdf-viewer');
399 if (pdfViewer) 399 if (pdfViewer)
400 $('mainview').removeChild(pdfViewer); 400 $('mainview').removeChild(pdfViewer);
401 } 401 }
402 402
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
455 455
456 createPDFPlugin(); 456 createPDFPlugin();
457 isPreviewStillLoading = false; 457 isPreviewStillLoading = false;
458 updatePrintSummary(); 458 updatePrintSummary();
459 } 459 }
460 460
461 /** 461 /**
462 * Create the PDF plugin or reload the existing one. 462 * Create the PDF plugin or reload the existing one.
463 */ 463 */
464 function createPDFPlugin() { 464 function createPDFPlugin() {
465 if (!hasCompatiblePDFPlugin) {
466 return;
467 }
468
469 // Enable the print button. 465 // Enable the print button.
470 if (!$('printer-list').disabled) { 466 if (!$('printer-list').disabled) {
471 $('print-button').disabled = false; 467 $('print-button').disabled = false;
472 } 468 }
473 469
474 var pdfViewer = $('pdf-viewer'); 470 var pdfViewer = $('pdf-viewer');
475 if (pdfViewer) { 471 if (pdfViewer) {
476 // Older version of the PDF plugin may not have this method. 472 // Older version of the PDF plugin may not have this method.
477 // TODO(thestig) Eventually remove this check. 473 // TODO(thestig) Eventually remove this check.
478 if (pdfViewer.goToPage) { 474 if (pdfViewer.goToPage) {
479 // Need to call this before the reload(), where the plugin resets its 475 // Need to call this before the reload(), where the plugin resets its
480 // internal page count. 476 // internal page count.
481 pdfViewer.goToPage('0'); 477 pdfViewer.goToPage('0');
482 } 478 }
483 pdfViewer.reload(); 479 pdfViewer.reload();
484 pdfViewer.grayscale(!isColor()); 480 pdfViewer.grayscale(!isColor());
485 return; 481 return;
486 } 482 }
487 483
488 var pdfPlugin = document.createElement('embed'); 484 var pdfPlugin = document.createElement('embed');
489 pdfPlugin.setAttribute('id', 'pdf-viewer'); 485 pdfPlugin.setAttribute('id', 'pdf-viewer');
490 pdfPlugin.setAttribute('type', 'application/pdf'); 486 pdfPlugin.setAttribute('type', 'application/pdf');
491 pdfPlugin.setAttribute('src', 'chrome://print/print.pdf'); 487 pdfPlugin.setAttribute('src', 'chrome://print/print.pdf');
492 var mainView = $('mainview'); 488 var mainView = $('mainview');
493 mainView.appendChild(pdfPlugin); 489 mainView.appendChild(pdfPlugin);
494
495 // Check to see if the PDF plugin is our PDF plugin. (or compatible)
496 if (!pdfPlugin.onload) {
497 hasCompatiblePDFPlugin = false;
498 displayErrorMessage(localStrings.getString('noPlugin'));
499 return;
500 }
501 pdfPlugin.onload('onPDFLoad()'); 490 pdfPlugin.onload('onPDFLoad()');
502 491
503 // Older version of the PDF plugin may not have this method. 492 // Older version of the PDF plugin may not have this method.
504 // TODO(thestig) Eventually remove this check. 493 // TODO(thestig) Eventually remove this check.
505 if (pdfPlugin.removePrintButton) { 494 if (pdfPlugin.removePrintButton) {
506 pdfPlugin.removePrintButton(); 495 pdfPlugin.removePrintButton();
507 } 496 }
508 497
509 pdfPlugin.grayscale(true); 498 pdfPlugin.grayscale(true);
510 } 499 }
511 500
512 /** 501 /**
502 * Returns true if a compatible pdf plugin exists, false if it doesn't.
503 */
504 function checkCompatiblePluginExists() {
505 var dummyPlugin = $('dummy-viewer')
506 return !!dummyPlugin.onload;
507 }
508
509 /**
513 * Updates the state of print button depending on the user selection. 510 * Updates the state of print button depending on the user selection.
514 * The button is enabled only when the following conditions are true. 511 * The button is enabled only when the following conditions are true.
515 * 1) The selected page ranges are valid. 512 * 1) The selected page ranges are valid.
516 * 2) The number of copies is valid. 513 * 2) The number of copies is valid.
517 */ 514 */
518 function updatePrintButtonState() { 515 function updatePrintButtonState() {
519 $('print-button').disabled = (!isNumberOfCopiesValid() || 516 $('print-button').disabled = (!isNumberOfCopiesValid() ||
520 getSelectedPagesValidityLevel() != 1); 517 getSelectedPagesValidityLevel() != 1);
521 } 518 }
522 519
(...skipping 365 matching lines...) Expand 10 before | Expand all | Expand 10 after
888 /** 885 /**
889 * Executed when the 'increment' or 'decrement' button is clicked. 886 * Executed when the 'increment' or 'decrement' button is clicked.
890 */ 887 */
891 function onCopiesButtonsClicked(sign) { 888 function onCopiesButtonsClicked(sign) {
892 if($('copies').value == 1 && (sign == -1)) 889 if($('copies').value == 1 && (sign == -1))
893 return; 890 return;
894 $('copies').value = getCopies() + sign * 1; 891 $('copies').value = getCopies() + sign * 1;
895 copiesFieldChanged(); 892 copiesFieldChanged();
896 } 893 }
897 894
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698