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

Unified Diff: chrome/browser/resources/print_preview/print_preview.js

Issue 8055036: Revert 103010 - Refactored code to move cloudprint specific code into print_preview_cloud.js. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 years, 3 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/resources/print_preview/print_preview.js
===================================================================
--- chrome/browser/resources/print_preview/print_preview.js (revision 103066)
+++ chrome/browser/resources/print_preview/print_preview.js (working copy)
@@ -85,6 +85,10 @@
// True if we need to generate draft preview data.
var generateDraftData = true;
+// TODO(abodenha@chromium.org) A lot of cloud print specific logic has
+// made its way into this file. Refactor to create a cleaner boundary
+// between print preview and GCP code. Reference bug 88098 when fixing.
+
// A dictionary of cloud printers that have been added to the printer
// dropdown.
var addedCloudPrinters = {};
@@ -219,17 +223,20 @@
var skip_refresh = false;
var selectedValue = printerList.options[selectedIndex].value;
if (cloudprint.isCloudPrint(printerList.options[selectedIndex])) {
- cloudprint.updatePrinterCaps(printerList.options[selectedIndex],
- doUpdateCloudPrinterCapabilities);
+ updateWithCloudPrinterCapabilities();
skip_refresh = true;
+ } else if (selectedValue == PRINT_WITH_CLOUD_PRINT) {
+ // If a preview is pending this will just disable controls.
+ // Once the preview completes we'll try again.
+ printWithCloudPrintDialog();
+ skip_refresh = true;
} else if (selectedValue == SIGN_IN ||
selectedValue == MANAGE_CLOUD_PRINTERS ||
selectedValue == MANAGE_LOCAL_PRINTERS) {
printerList.selectedIndex = lastSelectedPrinterIndex;
chrome.send(selectedValue);
skip_refresh = true;
- } else if (selectedValue == PRINT_TO_PDF ||
- selectedValue == PRINT_WITH_CLOUD_PRINT) {
+ } else if (selectedValue == PRINT_TO_PDF) {
updateWithPrinterCapabilities({
'disableColorOption': true,
'setColorAsDefault': true,
@@ -251,6 +258,17 @@
}
/**
+ * Updates the printer capabilities for the currently selected
+ * cloud print printer.
+ */
+function updateWithCloudPrinterCapabilities() {
+ var printerList = $('printer-list');
+ var selectedIndex = printerList.selectedIndex;
+ cloudprint.updatePrinterCaps(printerList.options[selectedIndex],
+ doUpdateCloudPrinterCapabilities);
+}
+
+/**
* Helper function to do the actual work of updating cloud printer
* capabilities.
* @param {Object} printer The printer object to set capabilities for.
@@ -311,11 +329,9 @@
* @return {boolean} true if settings are valid, false if not.
*/
function areSettingsValid() {
- var selectedPrinter = getSelectedPrinterName();
return pageSettings.isPageSelectionValid() &&
(copiesSettings.isValid() ||
- selectedPrinter == PRINT_TO_PDF ||
- selectedPrinter == PRINT_WITH_CLOUD_PRINT);
+ getSelectedPrinterName() == PRINT_TO_PDF);
}
/**
@@ -325,8 +341,7 @@
*/
function getSettings() {
var deviceName = getSelectedPrinterName();
- var printToPDF = deviceName == PRINT_TO_PDF;
- var printWithCloudPrint = deviceName == PRINT_WITH_CLOUD_PRINT;
+ var printToPDF = (deviceName == PRINT_TO_PDF);
var settings =
{'deviceName': deviceName,
@@ -337,7 +352,6 @@
'landscape': layoutSettings.isLandscape(),
'color': colorSettings.colorMode,
'printToPDF': printToPDF,
- 'printWithCloudPrint': printWithCloudPrint,
'isFirstRequest' : false,
'headerFooterEnabled': headerFooterSettings.hasHeaderFooter(),
'defaultMarginsSelected': marginSettings.isDefaultMarginsSelected(),
@@ -421,15 +435,11 @@
*/
function requestToPrintDocument() {
hasPendingPrintDocumentRequest = !isPrintReadyMetafileReady;
- var selectedPrinterName = getSelectedPrinterName();
- var printToPDF = selectedPrinterName == PRINT_TO_PDF;
- var printWithCloudPrint = selectedPrinterName == PRINT_WITH_CLOUD_PRINT;
+ var printToPDF = getSelectedPrinterName() == PRINT_TO_PDF;
+
if (hasPendingPrintDocumentRequest) {
if (printToPDF) {
sendPrintDocumentRequest();
- } else if (printWithCloudPrint) {
- showCustomMessage(localStrings.getString('printWithCloudPrintWait'));
- disableInputElementsInSidebar();
} else {
isTabHidden = true;
chrome.send('hidePreview');
@@ -542,7 +552,7 @@
if (cloudPrintData) {
cloudprint.setDefaultPrinter(printer_name,
cloudPrintData,
- addDestinationListOptionAtPosition,
+ addCloudPrinters,
doUpdateCloudPrinterCapabilities);
} else {
$('printer-list')[0].value = defaultOrLastUsedPrinterName;
@@ -588,14 +598,14 @@
}
// Add options to manage printers.
if (!cr.isChromeOS) {
- addDestinationListOption(localStrings.getString('managePrinters'),
+ addDestinationListOption(localStrings.getString('manageLocalPrinters'),
MANAGE_LOCAL_PRINTERS, false, false, false);
} else if (useCloudPrint) {
// Fetch recent printers.
- cloudprint.fetchPrinters(addDestinationListOptionAtPosition, false);
+ cloudprint.fetchPrinters(addCloudPrinters, false);
// Fetch the full printer list.
- cloudprint.fetchPrinters(addDestinationListOptionAtPosition, true);
- addDestinationListOption(localStrings.getString('managePrinters'),
+ cloudprint.fetchPrinters(addCloudPrinters, true);
+ addDestinationListOption(localStrings.getString('manageCloudPrinters'),
MANAGE_CLOUD_PRINTERS, false, false, false);
}
@@ -673,7 +683,109 @@
printerList.add(option, before);
return option;
}
+
/**
+ * Test if a particular cloud printer has already been added to the
+ * printer dropdown.
+ * @param {string} id A unique value to track this printer.
+ * @return {boolean} True if this id has previously been passed to
+ * trackCloudPrinterAdded.
+ */
+function cloudPrinterAlreadyAdded(id) {
+ return (addedCloudPrinters[id]);
+}
+
+/**
+ * Record that a cloud printer will added to the printer dropdown.
+ * @param {string} id A unique value to track this printer.
+ * @return {boolean} False if adding this printer would exceed
+ * |maxCloudPrinters|.
+ */
+function trackCloudPrinterAdded(id) {
+ if (Object.keys(addedCloudPrinters).length < maxCloudPrinters) {
+ addedCloudPrinters[id] = true;
+ return true;
+ } else {
+ return false;
+ }
+}
+
+
+/**
+ * Add cloud printers to the list drop down.
+ * Called from the cloudprint object on receipt of printer information from the
+ * cloud print server.
+ * @param {Array} printers Array of printer info objects.
+ * @return {Object} The currently selected printer.
+ */
+function addCloudPrinters(printers) {
+ var isFirstPass = false;
+ var printerList = $('printer-list');
+
+ if (firstCloudPrintOptionPos == lastCloudPrintOptionPos) {
+ isFirstPass = true;
+ // Remove empty entry added by setDefaultPrinter.
+ if (printerList[0] && printerList[0].textContent == '')
+ printerList.remove(0);
+ var option = addDestinationListOptionAtPosition(
+ lastCloudPrintOptionPos++,
+ localStrings.getString('cloudPrinters'),
+ 'Label',
+ false,
+ true,
+ false);
+ cloudprint.setCloudPrint(option, null, null);
+ }
+ if (printers != null) {
+ for (var i = 0; i < printers.length; i++) {
+ if (!cloudPrinterAlreadyAdded(printers[i]['id'])) {
+ if (!trackCloudPrinterAdded(printers[i]['id'])) {
+ break;
+ }
+ var option = addDestinationListOptionAtPosition(
+ lastCloudPrintOptionPos++,
+ printers[i]['name'],
+ printers[i]['id'],
+ printers[i]['name'] == defaultOrLastUsedPrinterName,
+ false,
+ false);
+ cloudprint.setCloudPrint(option,
+ printers[i]['name'],
+ printers[i]['id']);
+ }
+ }
+ } else {
+ if (!cloudPrinterAlreadyAdded(SIGN_IN)) {
+ addDestinationListOptionAtPosition(lastCloudPrintOptionPos++,
+ localStrings.getString('signIn'),
+ SIGN_IN,
+ false,
+ false,
+ false);
+ trackCloudPrinterAdded(SIGN_IN);
+ }
+ }
+ if (isFirstPass) {
+ addDestinationListOptionAtPosition(lastCloudPrintOptionPos,
+ '',
+ '',
+ false,
+ true,
+ true);
+ addDestinationListOptionAtPosition(lastCloudPrintOptionPos + 1,
+ localStrings.getString('localPrinters'),
+ '',
+ false,
+ true,
+ false);
+ }
+ var selectedPrinter = printerList.selectedIndex;
+ if (selectedPrinter < 0)
+ return null;
+ return printerList.options[selectedPrinter];
+}
+
+/**
* Sets the color mode for the PDF plugin.
* Called from PrintPreviewHandler::ProcessColorSetting().
* @param {boolean} color is true if the PDF plugin should display in color.
@@ -797,9 +909,9 @@
*/
function checkAndHideOverlayLayerIfValid() {
var selectedPrinter = getSelectedPrinterName();
- var printToDialog = selectedPrinter == PRINT_TO_PDF ||
- selectedPrinter == PRINT_WITH_CLOUD_PRINT;
- if ((printToDialog || !previewModifiable) &&
+ var printToPDF = selectedPrinter == PRINT_TO_PDF;
+ var printWithCloudPrint = selectedPrinter == PRINT_WITH_CLOUD_PRINT;
+ if ((printToPDF || printWithCloudPrint || !previewModifiable) &&
!isPrintReadyMetafileReady && hasPendingPrintDocumentRequest) {
return;
}
@@ -904,14 +1016,19 @@
// printing. If the preview source is modifiable, we need to wait till all
// the requested pages are loaded in the plugin for printing.
var selectedPrinter = getSelectedPrinterName();
- var printToDialog = selectedPrinter == PRINT_TO_PDF ||
- selectedPrinter == PRINT_WITH_CLOUD_PRINT;
- if (((printToDialog || !previewModifiable) && !isPrintReadyMetafileReady) ||
+ var printToPDF = selectedPrinter == PRINT_TO_PDF;
+ var printWithCloudPrint = selectedPrinter == PRINT_WITH_CLOUD_PRINT;
+ if (((printToPDF || !previewModifiable || printWithCloudPrint) &&
+ !isPrintReadyMetafileReady) ||
(previewModifiable && hasPendingPreviewRequest)) {
return;
}
hasPendingPrintDocumentRequest = false;
+ if (printWithCloudPrint) {
+ chrome.send('printWithCloudPrint');
+ return;
+ }
if (!areSettingsValid()) {
if (isTabHidden)
@@ -1024,6 +1141,21 @@
'printPreviewTitleFormat', initiatorTabTitle);
}
+/**
+ * Attempt to hide the preview tab and display the Cloud Print
+ * dialog instead. Just disables controls if we're waiting on a new preview
+ * to be generated.
+ */
+function printWithCloudPrintDialog() {
+ if (isPrintReadyMetafileReady) {
+ chrome.send('printWithCloudPrint');
+ } else {
+ showCustomMessage(localStrings.getString('printWithCloudPrintWait'));
+ disableInputElementsInSidebar();
+ hasPendingPrintDocumentRequest = true;
+ }
+}
+
/// Pull in all other scripts in a single shot.
<include src="print_preview_animations.js"/>
<include src="print_preview_cloud.js"/>

Powered by Google App Engine
This is Rietveld 408576698