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

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

Issue 7038028: Initial support for cloudprint in print preview (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Review feedback 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/resources/print_preview.html ('k') | chrome/browser/resources/print_preview_cloud.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/resources/print_preview.js
diff --git a/chrome/browser/resources/print_preview.js b/chrome/browser/resources/print_preview.js
index d6adce83b27dfa34c8e8700583fb262f3ebb0789..12b9e85df4b568480a6f1ae334004fa300fa1038 100644
--- a/chrome/browser/resources/print_preview.js
+++ b/chrome/browser/resources/print_preview.js
@@ -2,8 +2,13 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+// require: cr/ui/print_preview_cloud.js
+
var localStrings = new LocalStrings();
+var useCloudPrint = false;
+var maxCloudPrinters = 10;
+
// The total page count of the previewed document regardless of which pages the
// user has selected.
var totalPageCount = -1;
@@ -24,8 +29,12 @@ var lastSelectedPrinterIndex = 0;
var previewModifiable = false;
// Destination list special value constants.
+const ADD_PRINTER = 'addPrinter';
+const MANAGE_CLOUD_PRINTERS = 'manageCloudPrinters';
+const MANAGE_LOCAL_PRINTERS = 'manageLocalPrinters';
+const MORE_PRINTERS = 'morePrinters';
+const SIGN_IN = 'signIn';
const PRINT_TO_PDF = 'Print To PDF';
-const MANAGE_PRINTERS = 'Manage Printers';
// State of the print preview settings.
var printSettings = new PrintSettings();
@@ -200,22 +209,56 @@ function updateControlsWithSelectedPrinterCapabilities() {
var selectedIndex = printerList.selectedIndex;
if (selectedIndex < 0)
return;
-
+ var skip_refresh = false;
var selectedValue = printerList.options[selectedIndex].value;
- if (selectedValue == PRINT_TO_PDF) {
- updateWithPrinterCapabilities({'disableColorOption': true,
- 'setColorAsDefault': true,
- 'disableCopiesOption': true});
- } else if (selectedValue == MANAGE_PRINTERS) {
+ if (printerList.options[selectedIndex].isCloudPrint) {
+ updateWithCloudPrinterCapabilities();
+ skip_refresh = true;
+ } else if (selectedValue == SIGN_IN ||
+ selectedValue == MANAGE_CLOUD_PRINTERS ||
+ selectedValue == MANAGE_LOCAL_PRINTERS) {
printerList.selectedIndex = lastSelectedPrinterIndex;
- chrome.send('managePrinters');
+ chrome.send(selectedValue);
return;
sanjeevr 2011/06/15 20:24:36 You forgot setting skip_refresh to true here inste
+ } else if (selectedValue == PRINT_TO_PDF) {
+ updateWithPrinterCapabilities({'disableColorOption': true,
+ 'setColorAsDefault': true,
+ 'disableCopiesOption': true,
+ 'disableLandscapeOption': false});
} else {
// This message will call back to 'updateWithPrinterCapabilities'
// function.
chrome.send('getPrinterCapabilities', [selectedValue]);
}
+ if (!skip_refresh) {
+ lastSelectedPrinterIndex = selectedIndex;
+
+ // Regenerate the preview data based on selected printer settings.
+ setDefaultValuesAndRegeneratePreview();
+ }
+}
+
+function updateWithCloudPrinterCapabilities() {
+ var printerList = $('printer-list');
+ var selectedIndex = printerList.selectedIndex;
+ if (printerList.options[selectedIndex].capabilities) {
+ doUpdateCloudPrinterCapabilities(
+ printerList.options[selectedIndex],
+ printerList.options[selectedIndex].capabilities);
+ } else {
+ cloudprint.updatePrinterCaps(printerList.options[selectedIndex],
+ doUpdateCloudPrinterCapabilities);
+ }
+}
+function doUpdateCloudPrinterCapabilities(printer) {
+ var settings = {'disableColorOption': !cloudprint.supportsColor(printer),
+ 'setColorAsDefault': cloudprint.colorIsDefault(printer),
+ 'disableCopiesOption': true,
+ 'disableLandscapeOption': true};
+ updateWithPrinterCapabilities(settings);
+ var printerList = $('printer-list');
+ var selectedIndex = printerList.selectedIndex;
lastSelectedPrinterIndex = selectedIndex;
// Regenerate the preview data based on selected printer settings.
@@ -230,6 +273,7 @@ function updateWithPrinterCapabilities(settingInfo) {
var disableColorOption = settingInfo.disableColorOption;
var disableCopiesOption = settingInfo.disableCopiesOption;
var setColorAsDefault = settingInfo.setColorAsDefault;
+ var disableLandscapeOption = settingInfo.disableLandscapeOption;
var colorOption = $('color');
var bwOption = $('bw');
@@ -241,6 +285,12 @@ function updateWithPrinterCapabilities(settingInfo) {
$('hr-before-copies').classList.add('invisible');
}
+ if (disableLandscapeOption) {
+ fadeOutElement($('landscape-option'));
+ } else {
+ fadeInElement($('landscape-option'));
+ }
+
disableColorOption ? fadeOutElement($('color-options')) :
fadeInElement($('color-options'));
@@ -251,6 +301,31 @@ function updateWithPrinterCapabilities(settingInfo) {
}
/**
+ * Turn on the integration of Cloud Print.
+ * @param {enable} true if cloud print should be used.
+ */
+function setUseCloudPrint(enable, cloudPrintURL) {
+ useCloudPrint = enable;
+ cloudprint.setBaseURL(cloudPrintURL);
+}
+
+/**
+ * Take the PDF data handed to us and submit it to the cloud, closing the print
+ * preview tab once the upload is successful.
+ * @param {pdfData} data to send as the print job.
+ */
+function printToCloud(data) {
+ cloudprint.printToCloud(data, finishedCloudPrinting);
+}
+
+/**
+ * Cloud print upload of the PDF file is finished, time to close the dialog.
+ */
+function finishedCloudPrinting() {
+ window.location = cloudprint.getBaseURL();
+}
+
+/**
* Validates the copies text field value.
* NOTE: An empty copies field text is considered valid because the blur event
* listener of this field will set it back to a default value.
@@ -341,19 +416,27 @@ function getDuplexMode() {
* @return {string} JSON string with print job settings.
*/
function getSettingsJSON() {
+ var printerList = $('printer-list');
+ var selectedPrinter = printerList.selectedIndex;
var printAll = $('all-pages').checked;
var deviceName = getSelectedPrinterName();
var printToPDF = (deviceName == PRINT_TO_PDF);
- return JSON.stringify({'deviceName': deviceName,
- 'pageRange': getSelectedPageRanges(),
- 'printAll': printAll,
- 'duplex': getDuplexMode(),
- 'copies': getCopies(),
- 'collate': isCollated(),
- 'landscape': isLandscape(),
- 'color': isColor(),
- 'printToPDF': printToPDF});
+ var settings = {'deviceName': deviceName,
+ 'pageRange': getSelectedPageRanges(),
+ 'printAll': printAll,
+ 'duplex': getDuplexMode(),
+ 'copies': getCopies(),
+ 'collate': isCollated(),
+ 'landscape': isLandscape(),
+ 'color': isColor(),
+ 'printToPDF': printToPDF};
+ if (printerList.options[selectedPrinter].isCloudPrint) {
+ settings['cloudPrintID'] =
+ printerList.options[selectedPrinter].value;
+ }
+
+ return JSON.stringify(settings);
}
/**
@@ -386,10 +469,12 @@ function printFile() {
$('cancel-button').classList.add('loading');
$('print-summary').innerHTML = localStrings.getString('printing');
removeEventListeners();
- window.setTimeout(function() { chrome.send('print', [getSettingsJSON()]); },
- 1000);
+ var printerList = $('printer-list')
+ var printer = printerList[printerList.selectedIndex];
+ window.setTimeout(function() { chrome.send('print',
+ [getSettingsJSON(), cloudprint.getPrintTicketJSON(printer)]); }, 1000);
} else {
- chrome.send('print', [getSettingsJSON()]);
+ chrome.send('print', [getSettingsJSON(), null]);
}
}
@@ -426,6 +511,16 @@ function setDefaultPrinter(printer) {
*/
function setPrinters(printers) {
var printerList = $('printer-list');
+ if (useCloudPrint) {
+ cloudprint.fetchPrinters(addCloudPrinters);
+ if (printers.length > 0) {
+ option = addDestinationListOption('', '', false, true);
+ option = addDestinationListOption(localStrings.getString('localPrinters'),
+ '',
+ false,
+ true);
+ }
+ }
// If there exists a dummy printer value, then setDefaultPrinter() already
// requested a preview, so no need to do it again.
var needPreview = (printerList[0].value == '');
@@ -448,9 +543,15 @@ function setPrinters(printers) {
false);
addDestinationListOption('', '', false, true);
- // Add an option to manage printers.
- addDestinationListOption(localStrings.getString('managePrinters'),
- MANAGE_PRINTERS, false, false);
+ // Add options to manage printers.
+ if (!cr.isChromeOS) {
+ addDestinationListOption(localStrings.getString('manageLocalPrinters'),
+ MANAGE_LOCAL_PRINTERS, false, false);
+ }
+ if (useCloudPrint) {
+ addDestinationListOption(localStrings.getString('manageCloudPrinters'),
+ MANAGE_CLOUD_PRINTERS, false, false);
+ }
printerList.disabled = false;
@@ -464,6 +565,7 @@ function setPrinters(printers) {
* @param {String} optionValue specifies the option value.
* @param {boolean} isDefault is true if the option needs to be selected.
* @param {boolean} isDisabled is true if the option needs to be disabled.
+ * returns the created option.
*/
function addDestinationListOption(optionText, optionValue, isDefault,
isDisabled) {
@@ -473,6 +575,44 @@ function addDestinationListOption(optionText, optionValue, isDefault,
$('printer-list').add(option);
option.selected = isDefault;
option.disabled = isDisabled;
+ return option;
+}
+
+/**
+ * Add cloud printers to the list drop down.
+ * Called from the cloudprint object on receipt of printer information from the
+ * cloud print server.
+ */
+function addCloudPrinters(printers) {
+ addDestinationListOption(localStrings.getString('cloudPrinters'),
+ '',
+ false,
+ true);
+ if (printers != null) {
+ var l = printers.length;
+ if (l > maxCloudPrinters) {
+ l = maxCloudPrinters;
+ }
+ for (var i = 0; i < l; i++) {
+ var option = addDestinationListOption(printers[i]['name'],
+ printers[i]['id'],
+ i == 0,
+ printers[i]['name'] == defaultOrLastUsedPrinterName);
+ option.isCloudPrint = true;
+ }
+ if (printers.length == 0) {
+ addDestinationListOption(localStrings.getString('addCloudPrinter'),
+ ADD_PRINTER, false, false);
+ }
+ if (l < printers.length) {
+ var option = addDestinationListOption('', '', false, true);
+ addDestinationListOption(localStrings.getString('morePrinters'),
+ MORE_PRINTERS, false, false);
+ }
+ } else {
+ addDestinationListOption(localStrings.getString('signIn'),
+ SIGN_IN, false, false);
+ }
}
/**
@@ -486,6 +626,8 @@ function setColor(color) {
return;
}
pdfViewer.grayscale(!color);
+ var printerList = $('printer-list')
+ cloudprint.setColor(printerList[printerList.selectedIndex], color);
}
/**
@@ -1038,3 +1180,4 @@ PrintSettings.prototype.save = function() {
this.deviceName = getSelectedPrinterName();
this.isLandscape = isLandscape();
}
+
« no previous file with comments | « chrome/browser/resources/print_preview.html ('k') | chrome/browser/resources/print_preview_cloud.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698