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

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

Issue 12209086: Page range comparisons should use document size. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 10 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/native_layer.js
diff --git a/chrome/browser/resources/print_preview/native_layer.js b/chrome/browser/resources/print_preview/native_layer.js
index 240416412d47b8a29659b5aac7bb656195f40abc..51bca33428b1108bde2eca663f220236f1a3149a 100644
--- a/chrome/browser/resources/print_preview/native_layer.js
+++ b/chrome/browser/resources/print_preview/native_layer.js
@@ -1,721 +1,717 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-cr.define('print_preview', function() {
- 'use strict';
-
- /**
- * An interface to the native Chromium printing system layer.
- * @constructor
- * @extends {cr.EventTarget}
- */
- function NativeLayer() {
- cr.EventTarget.call(this);
-
- // Bind global handlers
- global['setInitialSettings'] = this.onSetInitialSettings_.bind(this);
- global['setUseCloudPrint'] = this.onSetUseCloudPrint_.bind(this);
- global['setPrinters'] = this.onSetPrinters_.bind(this);
- global['updateWithPrinterCapabilities'] =
- this.onUpdateWithPrinterCapabilities_.bind(this);
- global['failedToGetPrinterCapabilities'] =
- this.onFailedToGetPrinterCapabilities_.bind(this);
- global['reloadPrintersList'] = this.onReloadPrintersList_.bind(this);
- global['printToCloud'] = this.onPrintToCloud_.bind(this);
- global['fileSelectionCancelled'] =
- this.onFileSelectionCancelled_.bind(this);
- global['fileSelectionCompleted'] =
- this.onFileSelectionCompleted_.bind(this);
- global['printPreviewFailed'] = this.onPrintPreviewFailed_.bind(this);
- global['invalidPrinterSettings'] =
- this.onInvalidPrinterSettings_.bind(this);
- global['onDidGetDefaultPageLayout'] =
- this.onDidGetDefaultPageLayout_.bind(this);
- global['onDidGetPreviewPageCount'] =
- this.onDidGetPreviewPageCount_.bind(this);
- global['reloadPreviewPages'] = this.onReloadPreviewPages_.bind(this);
- global['onDidPreviewPage'] = this.onDidPreviewPage_.bind(this);
- global['updatePrintPreview'] = this.onUpdatePrintPreview_.bind(this);
- global['printScalingDisabledForSourcePDF'] =
- this.onPrintScalingDisabledForSourcePDF_.bind(this);
- };
-
- /**
- * Event types dispatched from the Chromium native layer.
- * @enum {string}
- * @const
- */
- NativeLayer.EventType = {
- CAPABILITIES_SET: 'print_preview.NativeLayer.CAPABILITIES_SET',
- CLOUD_PRINT_ENABLE: 'print_preview.NativeLayer.CLOUD_PRINT_ENABLE',
- DESTINATIONS_RELOAD: 'print_preview.NativeLayer.DESTINATIONS_RELOAD',
- DISABLE_SCALING: 'print_preview.NativeLayer.DISABLE_SCALING',
- FILE_SELECTION_CANCEL: 'print_preview.NativeLayer.FILE_SELECTION_CANCEL',
- FILE_SELECTION_COMPLETE:
- 'print_preview.NativeLayer.FILE_SELECTION_COMPLETE',
- GET_CAPABILITIES_FAIL: 'print_preview.NativeLayer.GET_CAPABILITIES_FAIL',
- INITIAL_SETTINGS_SET: 'print_preview.NativeLayer.INITIAL_SETTINGS_SET',
- LOCAL_DESTINATIONS_SET: 'print_preview.NativeLayer.LOCAL_DESTINATIONS_SET',
- PAGE_COUNT_READY: 'print_preview.NativeLayer.PAGE_COUNT_READY',
- PAGE_LAYOUT_READY: 'print_preview.NativeLayer.PAGE_LAYOUT_READY',
- PAGE_PREVIEW_READY: 'print_preview.NativeLayer.PAGE_PREVIEW_READY',
- PREVIEW_GENERATION_DONE:
- 'print_preview.NativeLayer.PREVIEW_GENERATION_DONE',
- PREVIEW_GENERATION_FAIL:
- 'print_preview.NativeLayer.PREVIEW_GENERATION_FAIL',
- PREVIEW_RELOAD: 'print_preview.NativeLayer.PREVIEW_RELOAD',
- PRINT_TO_CLOUD: 'print_preview.NativeLayer.PRINT_TO_CLOUD',
- SETTINGS_INVALID: 'print_preview.NativeLayer.SETTINGS_INVALID'
- };
-
- /**
- * Constant values matching printing::DuplexMode enum.
- * @enum {number}
- */
- NativeLayer.DuplexMode = {
- SIMPLEX: 0,
- LONG_EDGE: 1,
- UNKNOWN_DUPLEX_MODE: -1
- };
-
- /**
- * Enumeration of color modes used by Chromium.
- * @enum {number}
- * @private
- */
- NativeLayer.ColorMode_ = {
- GRAY: 1,
- COLOR: 2
- };
-
- /**
- * Version of the serialized state of the print preview.
- * @type {number}
- * @const
- * @private
- */
- NativeLayer.SERIALIZED_STATE_VERSION_ = 1;
-
- NativeLayer.prototype = {
- __proto__: cr.EventTarget.prototype,
-
- /** Gets the initial settings to initialize the print preview with. */
- startGetInitialSettings: function() {
- chrome.send('getInitialSettings');
- },
-
- /**
- * Requests the system's local print destinations. A LOCAL_DESTINATIONS_SET
- * event will be dispatched in response.
- */
- startGetLocalDestinations: function() {
- chrome.send('getPrinters');
- },
-
- /**
- * Requests the destination's printing capabilities. A CAPABILITIES_SET
- * event will be dispatched in response.
- * @param {string} destinationId ID of the destination.
- */
- startGetLocalDestinationCapabilities: function(destinationId) {
- chrome.send('getPrinterCapabilities', [destinationId]);
- },
-
- /**
- * Requests that a preview be generated. The following events may be
- * dispatched in response:
- * - PAGE_COUNT_READY
- * - PAGE_LAYOUT_READY
- * - PAGE_PREVIEW_READY
- * - PREVIEW_GENERATION_DONE
- * - PREVIEW_GENERATION_FAIL
- * - PREVIEW_RELOAD
- * @param {print_preview.Destination} destination Destination to print to.
- * @param {!print_preview.PrintTicketStore} printTicketStore Used to get the
- * state of the print ticket.
- * @param {number} ID of the preview request.
- */
- startGetPreview: function(destination, printTicketStore, requestId) {
- assert(printTicketStore.isTicketValidForPreview(),
- 'Trying to generate preview when ticket is not valid');
-
- var pageRanges =
- (requestId > 0 && printTicketStore.hasPageRangeCapability()) ?
- printTicketStore.getPageNumberSet().getPageRanges() : [];
-
- var ticket = {
- 'pageRange': pageRanges,
- 'landscape': printTicketStore.isLandscapeEnabled(),
- 'color': printTicketStore.isColorEnabled() ?
- NativeLayer.ColorMode_.COLOR : NativeLayer.ColorMode_.GRAY,
- 'headerFooterEnabled': printTicketStore.isHeaderFooterEnabled(),
- 'marginsType': printTicketStore.getMarginsType(),
- 'isFirstRequest': requestId == 0,
- 'requestID': requestId,
- 'previewModifiable': printTicketStore.isDocumentModifiable,
- 'printToPDF':
- destination != null &&
- destination.id ==
- print_preview.Destination.GooglePromotedId.SAVE_AS_PDF,
- 'printWithCloudPrint': destination != null && !destination.isLocal,
- 'deviceName': destination == null ? 'foo' : destination.id,
- 'generateDraftData': printTicketStore.isDocumentModifiable,
- 'fitToPageEnabled': printTicketStore.isFitToPageEnabled(),
-
- // NOTE: Even though the following fields don't directly relate to the
- // preview, they still need to be included.
- 'duplex': printTicketStore.isDuplexEnabled() ?
- NativeLayer.DuplexMode.LONG_EDGE : NativeLayer.DuplexMode.SIMPLEX,
- 'copies': printTicketStore.getCopies(),
- 'collate': printTicketStore.isCollateEnabled(),
- 'shouldPrintBackgrounds': printTicketStore.isCssBackgroundEnabled(),
- 'shouldPrintSelectionOnly': printTicketStore.isSelectionOnlyEnabled()
- };
-
- // Set 'cloudPrintID' only if the destination is not local.
- if (!destination.isLocal) {
- ticket['cloudPrintID'] = destination.id;
- }
-
- if (printTicketStore.hasMarginsCapability() &&
- printTicketStore.getMarginsType() ==
- print_preview.ticket_items.MarginsType.Value.CUSTOM) {
- var customMargins = printTicketStore.getCustomMargins();
- var orientationEnum =
- print_preview.ticket_items.CustomMargins.Orientation;
- ticket['marginsCustom'] = {
- 'marginTop': customMargins.get(orientationEnum.TOP),
- 'marginRight': customMargins.get(orientationEnum.RIGHT),
- 'marginBottom': customMargins.get(orientationEnum.BOTTOM),
- 'marginLeft': customMargins.get(orientationEnum.LEFT)
- };
- }
-
- chrome.send(
- 'getPreview',
- [JSON.stringify(ticket),
- requestId > 0 ? printTicketStore.pageCount : -1,
- printTicketStore.isDocumentModifiable]);
- },
-
- /**
- * Requests that the document be printed.
- * @param {!print_preview.Destination} destination Destination to print to.
- * @param {!print_preview.PrintTicketStore} printTicketStore Used to get the
- * state of the print ticket.
- * @param {print_preview.CloudPrintInterface} cloudPrintInterface Interface
- * to Google Cloud Print.
- * @param {boolean=} opt_isOpenPdfInPreview Whether to open the PDF in the
- * system's preview application.
- */
- startPrint: function(destination, printTicketStore, cloudPrintInterface,
- opt_isOpenPdfInPreview) {
- assert(printTicketStore.isTicketValid(),
- 'Trying to print when ticket is not valid');
-
- var ticket = {
- 'pageRange': printTicketStore.hasPageRangeCapability() ?
- printTicketStore.getPageNumberSet().getPageRanges() : [],
- 'landscape': printTicketStore.isLandscapeEnabled(),
- 'color': printTicketStore.isColorEnabled() ?
- NativeLayer.ColorMode_.COLOR : NativeLayer.ColorMode_.GRAY,
- 'headerFooterEnabled': printTicketStore.isHeaderFooterEnabled(),
- 'marginsType': printTicketStore.getMarginsType(),
- 'generateDraftData': true, // TODO(rltoscano): What should this be?
- 'duplex': printTicketStore.isDuplexEnabled() ?
- NativeLayer.DuplexMode.LONG_EDGE : NativeLayer.DuplexMode.SIMPLEX,
- 'copies': printTicketStore.getCopies(),
- 'collate': printTicketStore.isCollateEnabled(),
- 'shouldPrintBackgrounds': printTicketStore.isCssBackgroundEnabled(),
- 'shouldPrintSelectionOnly': printTicketStore.isSelectionOnlyEnabled(),
- 'previewModifiable': printTicketStore.isDocumentModifiable,
- 'printToPDF': destination.id ==
- print_preview.Destination.GooglePromotedId.SAVE_AS_PDF,
- 'printWithCloudPrint': !destination.isLocal,
- 'deviceName': destination.id,
- 'isFirstRequest': false,
- 'requestID': -1,
- 'fitToPageEnabled': printTicketStore.isFitToPageEnabled()
- };
-
- if (!destination.isLocal) {
- // We can't set cloudPrintID if the destination is "Print with Cloud
- // Print" because the native system will try to print to Google Cloud
- // Print with this ID instead of opening a Google Cloud Print dialog.
- ticket['cloudPrintID'] = destination.id;
- }
-
- if (printTicketStore.hasMarginsCapability() &&
- printTicketStore.getMarginsType() ==
- print_preview.ticket_items.MarginsType.Value.CUSTOM) {
- var customMargins = printTicketStore.getCustomMargins();
- var orientationEnum =
- print_preview.ticket_items.CustomMargins.Orientation;
- ticket['marginsCustom'] = {
- 'marginTop': customMargins.get(orientationEnum.TOP),
- 'marginRight': customMargins.get(orientationEnum.RIGHT),
- 'marginBottom': customMargins.get(orientationEnum.BOTTOM),
- 'marginLeft': customMargins.get(orientationEnum.LEFT)
- };
- }
-
- if (opt_isOpenPdfInPreview) {
- ticket['OpenPDFInPreview'] = true;
- }
-
- chrome.send('print', [JSON.stringify(ticket)]);
- },
-
- /** Requests that the current pending print request be cancelled. */
- startCancelPendingPrint: function() {
- chrome.send('cancelPendingPrintRequest');
- },
-
- /** Shows the system's native printing dialog. */
- startShowSystemDialog: function() {
- chrome.send('showSystemDialog');
- },
-
- /** Shows Google Cloud Print's web-based print dialog. */
- startShowCloudPrintDialog: function() {
- chrome.send('printWithCloudPrint');
- },
-
- /** Closes the print preview dialog. */
- startCloseDialog: function() {
- chrome.send('closePrintPreviewDialog');
- chrome.send('DialogClose');
- },
-
- /** Hide the print preview dialog and allow the native layer to close it. */
- startHideDialog: function() {
- chrome.send('hidePreview');
- },
-
- /**
- * Opens the Google Cloud Print sign-in dialog. The DESTINATIONS_RELOAD
- * event will be dispatched in response.
- */
- startCloudPrintSignIn: function() {
- chrome.send('signIn');
- },
-
- /** Navigates the user to the system printer settings interface. */
- startManageLocalDestinations: function() {
- chrome.send('manageLocalPrinters');
- },
-
- /** Navigates the user to the Google Cloud Print management page. */
- startManageCloudDestinations: function() {
- chrome.send('manageCloudPrinters');
- },
-
- /** Forces browser to open a new tab with the given URL address. */
- startForceOpenNewTab: function(url) {
- chrome.send('forceOpenNewTab', [url]);
- },
-
- /**
- * @param {!Object} initialSettings Object containing all initial settings.
- */
- onSetInitialSettings_: function(initialSettings) {
- var numberFormatSymbols =
- print_preview.MeasurementSystem.parseNumberFormat(
- initialSettings['numberFormat']);
- var unitType = print_preview.MeasurementSystem.UnitType.IMPERIAL;
- if (initialSettings['measurementSystem'] != null) {
- unitType = initialSettings['measurementSystem'];
- }
-
- var nativeInitialSettings = new print_preview.NativeInitialSettings(
- initialSettings['printAutomaticallyInKioskMode'] || false,
- numberFormatSymbols[0] || ',',
- numberFormatSymbols[1] || '.',
- unitType,
- initialSettings['previewModifiable'] || false,
- initialSettings['initiatorTabTitle'] || '',
- initialSettings['documentHasSelection'] || null,
- initialSettings['shouldPrintSelectionOnly'] || null,
- initialSettings['printerName'] || null,
- initialSettings['appState'] || null);
-
- var initialSettingsSetEvent = new cr.Event(
- NativeLayer.EventType.INITIAL_SETTINGS_SET);
- initialSettingsSetEvent.initialSettings = nativeInitialSettings;
- this.dispatchEvent(initialSettingsSetEvent);
- },
-
- /**
- * Turn on the integration of Cloud Print.
- * @param {string} cloudPrintURL The URL to use for cloud print servers.
- * @private
- */
- onSetUseCloudPrint_: function(cloudPrintURL) {
- var cloudPrintEnableEvent = new cr.Event(
- NativeLayer.EventType.CLOUD_PRINT_ENABLE);
- cloudPrintEnableEvent.baseCloudPrintUrl = cloudPrintURL;
- this.dispatchEvent(cloudPrintEnableEvent);
- },
-
- /**
- * Updates the print preview with local printers.
- * Called from PrintPreviewHandler::SetupPrinterList().
- * @param {Array} printers Array of printer info objects.
- * @private
- */
- onSetPrinters_: function(printers) {
- var localDestsSetEvent = new cr.Event(
- NativeLayer.EventType.LOCAL_DESTINATIONS_SET);
- localDestsSetEvent.destinationInfos = printers;
- this.dispatchEvent(localDestsSetEvent);
- },
-
- /**
- * Called when native layer gets settings information for a requested local
- * destination.
- * @param {Object} settingsInfo printer setting information.
- * @private
- */
- onUpdateWithPrinterCapabilities_: function(settingsInfo) {
- var capsSetEvent = new cr.Event(NativeLayer.EventType.CAPABILITIES_SET);
- capsSetEvent.settingsInfo = settingsInfo;
- this.dispatchEvent(capsSetEvent);
- },
-
- /**
- * Called when native layer gets settings information for a requested local
- * destination.
- * @param {string} printerId printer affected by error.
- * @private
- */
- onFailedToGetPrinterCapabilities_: function(destinationId) {
- var getCapsFailEvent = new cr.Event(
- NativeLayer.EventType.GET_CAPABILITIES_FAIL);
- getCapsFailEvent.destinationId = destinationId;
- this.dispatchEvent(getCapsFailEvent);
- },
-
- /** Reloads the printer list. */
- onReloadPrintersList_: function() {
- cr.dispatchSimpleEvent(this, NativeLayer.EventType.DESTINATIONS_RELOAD);
- },
-
- /**
- * Called from the C++ layer.
- * Take the PDF data handed to us and submit it to the cloud, closing the
- * print preview tab once the upload is successful.
- * @param {string} data Data to send as the print job.
- * @private
- */
- onPrintToCloud_: function(data) {
- var printToCloudEvent = new cr.Event(
- NativeLayer.EventType.PRINT_TO_CLOUD);
- printToCloudEvent.data = data;
- this.dispatchEvent(printToCloudEvent);
- },
-
- /**
- * Called from PrintPreviewUI::OnFileSelectionCancelled to notify the print
- * preview tab regarding the file selection cancel event.
- * @private
- */
- onFileSelectionCancelled_: function() {
- cr.dispatchSimpleEvent(this, NativeLayer.EventType.FILE_SELECTION_CANCEL);
- },
-
- /**
- * Called from PrintPreviewUI::OnFileSelectionCompleted to notify the print
- * preview tab regarding the file selection completed event.
- * @private
- */
- onFileSelectionCompleted_: function() {
- // If the file selection is completed and the tab is not already closed it
- // means that a pending print to pdf request exists.
- cr.dispatchSimpleEvent(
- this, NativeLayer.EventType.FILE_SELECTION_COMPLETE);
- },
-
- /**
- * Display an error message when print preview fails.
- * Called from PrintPreviewMessageHandler::OnPrintPreviewFailed().
- * @private
- */
- onPrintPreviewFailed_: function() {
- cr.dispatchSimpleEvent(
- this, NativeLayer.EventType.PREVIEW_GENERATION_FAIL);
- },
-
- /**
- * Display an error message when encountered invalid printer settings.
- * Called from PrintPreviewMessageHandler::OnInvalidPrinterSettings().
- * @private
- */
- onInvalidPrinterSettings_: function() {
- cr.dispatchSimpleEvent(this, NativeLayer.EventType.SETTINGS_INVALID);
- },
-
- /**
- * @param {{contentWidth: number, contentHeight: number, marginLeft: number,
- * marginRight: number, marginTop: number, marginBottom: number,
- * printableAreaX: number, printableAreaY: number,
- * printableAreaWidth: number, printableAreaHeight: number}}
- * pageLayout Specifies default page layout details in points.
- * @param {boolean} hasCustomPageSizeStyle Indicates whether the previewed
- * document has a custom page size style.
- * @private
- */
- onDidGetDefaultPageLayout_: function(pageLayout, hasCustomPageSizeStyle) {
- var pageLayoutChangeEvent = new cr.Event(
- NativeLayer.EventType.PAGE_LAYOUT_READY);
- pageLayoutChangeEvent.pageLayout = pageLayout;
- pageLayoutChangeEvent.hasCustomPageSizeStyle = hasCustomPageSizeStyle;
- this.dispatchEvent(pageLayoutChangeEvent);
- },
-
- /**
- * Update the page count and check the page range.
- * Called from PrintPreviewUI::OnDidGetPreviewPageCount().
- * @param {number} pageCount The number of pages.
- * @param {number} previewResponseId The preview request id that resulted in
- * this response.
- * @private
- */
- onDidGetPreviewPageCount_: function(pageCount, previewResponseId) {
- var pageCountChangeEvent = new cr.Event(
- NativeLayer.EventType.PAGE_COUNT_READY);
- pageCountChangeEvent.pageCount = pageCount;
- pageCountChangeEvent.previewResponseId = previewResponseId;
- this.dispatchEvent(pageCountChangeEvent);
- },
-
- /**
- * Called when no pipelining previewed pages.
- * @param {number} previewUid Preview unique identifier.
- * @param {number} previewResponseId The preview request id that resulted in
- * this response.
- * @private
- */
- onReloadPreviewPages_: function(previewUid, previewResponseId) {
- var previewReloadEvent = new cr.Event(
- NativeLayer.EventType.PREVIEW_RELOAD);
- previewReloadEvent.previewUid = previewUid;
- previewReloadEvent.previewResponseId = previewResponseId;
- this.dispatchEvent(previewReloadEvent);
- },
-
- /**
- * Notification that a print preview page has been rendered.
- * Check if the settings have changed and request a regeneration if needed.
- * Called from PrintPreviewUI::OnDidPreviewPage().
- * @param {number} pageNumber The page number, 0-based.
- * @param {number} previewUid Preview unique identifier.
- * @param {number} previewResponseId The preview request id that resulted in
- * this response.
- * @private
- */
- onDidPreviewPage_: function(pageNumber, previewUid, previewResponseId) {
- var pagePreviewGenEvent = new cr.Event(
- NativeLayer.EventType.PAGE_PREVIEW_READY);
- pagePreviewGenEvent.pageIndex = pageNumber;
- pagePreviewGenEvent.previewUid = previewUid;
- pagePreviewGenEvent.previewResponseId = previewResponseId;
- this.dispatchEvent(pagePreviewGenEvent);
- },
-
- /**
- * Update the print preview when new preview data is available.
- * Create the PDF plugin as needed.
- * Called from PrintPreviewUI::PreviewDataIsAvailable().
- * @param {number} previewUid Preview unique identifier.
- * @param {number} previewResponseId The preview request id that resulted in
- * this response.
- * @private
- */
- onUpdatePrintPreview_: function(previewUid, previewResponseId) {
- var previewGenDoneEvent = new cr.Event(
- NativeLayer.EventType.PREVIEW_GENERATION_DONE);
- previewGenDoneEvent.previewUid = previewUid;
- previewGenDoneEvent.previewResponseId = previewResponseId;
- this.dispatchEvent(previewGenDoneEvent);
- },
-
- /**
- * Updates the fit to page option state based on the print scaling option of
- * source pdf. PDF's have an option to enable/disable print scaling. When we
- * find out that the print scaling option is disabled for the source pdf, we
- * uncheck the fitToPage_ to page checkbox. This function is called from C++
- * code.
- * @private
- */
- onPrintScalingDisabledForSourcePDF_: function() {
- cr.dispatchSimpleEvent(this, NativeLayer.EventType.DISABLE_SCALING);
- }
- };
-
- /**
- * Initial settings retrieved from the native layer.
- * @param {boolean} isInKioskAutoPrintMode Whether the print preview should be
- * in auto-print mode.
- * @param {string} thousandsDelimeter Character delimeter of thousands digits.
- * @param {string} decimalDelimeter Character delimeter of the decimal point.
- * @param {!print_preview.MeasurementSystem.UnitType} unitType Unit type of
- * local machine's measurement system.
- * @param {boolean} isDocumentModifiable Whether the document to print is
- * modifiable.
- * @param {string} documentTitle Title of the document.
- * @param {boolean} documentHasSelection Whether the document has selected
- * content.
- * @param {boolean} selectionOnly Whether only selected content should be
- * printed.
- * @param {?string} systemDefaultDestinationId ID of the system default
- * destination.
- * @param {?string} serializedAppStateStr Serialized app state.
- * @constructor
- */
- function NativeInitialSettings(
- isInKioskAutoPrintMode,
- thousandsDelimeter,
- decimalDelimeter,
- unitType,
- isDocumentModifiable,
- documentTitle,
- documentHasSelection,
- selectionOnly,
- systemDefaultDestinationId,
- serializedAppStateStr) {
-
- /**
- * Whether the print preview should be in auto-print mode.
- * @type {boolean}
- * @private
- */
- this.isInKioskAutoPrintMode_ = isInKioskAutoPrintMode;
-
- /**
- * Character delimeter of thousands digits.
- * @type {string}
- * @private
- */
- this.thousandsDelimeter_ = thousandsDelimeter;
-
- /**
- * Character delimeter of the decimal point.
- * @type {string}
- * @private
- */
- this.decimalDelimeter_ = decimalDelimeter;
-
- /**
- * Unit type of local machine's measurement system.
- * @type {string}
- * @private
- */
- this.unitType_ = unitType;
-
- /**
- * Whether the document to print is modifiable.
- * @type {boolean}
- * @private
- */
- this.isDocumentModifiable_ = isDocumentModifiable;
-
- /**
- * Title of the document.
- * @type {string}
- * @private
- */
- this.documentTitle_ = documentTitle;
-
- /**
- * Whether the document has selection.
- * @type {string}
- * @private
- */
- this.documentHasSelection_ = documentHasSelection;
-
- /**
- * Whether selection only should be printed.
- * @type {string}
- * @private
- */
- this.selectionOnly_ = selectionOnly;
-
- /**
- * ID of the system default destination.
- * @type {?string}
- * @private
- */
- this.systemDefaultDestinationId_ = systemDefaultDestinationId;
-
- /**
- * Serialized app state.
- * @type {?string}
- * @private
- */
- this.serializedAppStateStr_ = serializedAppStateStr;
- };
-
- NativeInitialSettings.prototype = {
- /**
- * @return {boolean} Whether the print preview should be in auto-print mode.
- */
- get isInKioskAutoPrintMode() {
- return this.isInKioskAutoPrintMode_;
- },
-
- /** @return {string} Character delimeter of thousands digits. */
- get thousandsDelimeter() {
- return this.thousandsDelimeter_;
- },
-
- /** @return {string} Character delimeter of the decimal point. */
- get decimalDelimeter() {
- return this.decimalDelimeter_;
- },
-
- /**
- * @return {!print_preview.MeasurementSystem.UnitType} Unit type of local
- * machine's measurement system.
- */
- get unitType() {
- return this.unitType_;
- },
-
- /** @return {boolean} Whether the document to print is modifiable. */
- get isDocumentModifiable() {
- return this.isDocumentModifiable_;
- },
-
- /** @return {string} Document title. */
- get documentTitle() {
- return this.documentTitle_;
- },
-
- /** @return {bool} Whether the document has selection. */
- get documentHasSelection() {
- return this.documentHasSelection_;
- },
-
- /** @return {bool} Whether selection only should be printed. */
- get selectionOnly() {
- return this.selectionOnly_;
- },
-
- /** @return {?string} ID of the system default destination. */
- get systemDefaultDestinationId() {
- return this.systemDefaultDestinationId_;
- },
-
- /** @return {?string} Serialized app state. */
- get serializedAppStateStr() {
- return this.serializedAppStateStr_;
- }
- };
-
- // Export
- return {
- NativeInitialSettings: NativeInitialSettings,
- NativeLayer: NativeLayer
- };
-});
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+cr.define('print_preview', function() {
+ 'use strict';
+
+ /**
+ * An interface to the native Chromium printing system layer.
+ * @constructor
+ * @extends {cr.EventTarget}
+ */
+ function NativeLayer() {
+ cr.EventTarget.call(this);
+
+ // Bind global handlers
+ global['setInitialSettings'] = this.onSetInitialSettings_.bind(this);
+ global['setUseCloudPrint'] = this.onSetUseCloudPrint_.bind(this);
+ global['setPrinters'] = this.onSetPrinters_.bind(this);
+ global['updateWithPrinterCapabilities'] =
+ this.onUpdateWithPrinterCapabilities_.bind(this);
+ global['failedToGetPrinterCapabilities'] =
+ this.onFailedToGetPrinterCapabilities_.bind(this);
+ global['reloadPrintersList'] = this.onReloadPrintersList_.bind(this);
+ global['printToCloud'] = this.onPrintToCloud_.bind(this);
+ global['fileSelectionCancelled'] =
+ this.onFileSelectionCancelled_.bind(this);
+ global['fileSelectionCompleted'] =
+ this.onFileSelectionCompleted_.bind(this);
+ global['printPreviewFailed'] = this.onPrintPreviewFailed_.bind(this);
+ global['invalidPrinterSettings'] =
+ this.onInvalidPrinterSettings_.bind(this);
+ global['onDidGetDefaultPageLayout'] =
+ this.onDidGetDefaultPageLayout_.bind(this);
+ global['onDidGetPreviewPageCount'] =
+ this.onDidGetPreviewPageCount_.bind(this);
+ global['reloadPreviewPages'] = this.onReloadPreviewPages_.bind(this);
+ global['onDidPreviewPage'] = this.onDidPreviewPage_.bind(this);
+ global['updatePrintPreview'] = this.onUpdatePrintPreview_.bind(this);
+ global['printScalingDisabledForSourcePDF'] =
+ this.onPrintScalingDisabledForSourcePDF_.bind(this);
+ };
+
+ /**
+ * Event types dispatched from the Chromium native layer.
+ * @enum {string}
+ * @const
+ */
+ NativeLayer.EventType = {
+ CAPABILITIES_SET: 'print_preview.NativeLayer.CAPABILITIES_SET',
+ CLOUD_PRINT_ENABLE: 'print_preview.NativeLayer.CLOUD_PRINT_ENABLE',
+ DESTINATIONS_RELOAD: 'print_preview.NativeLayer.DESTINATIONS_RELOAD',
+ DISABLE_SCALING: 'print_preview.NativeLayer.DISABLE_SCALING',
+ FILE_SELECTION_CANCEL: 'print_preview.NativeLayer.FILE_SELECTION_CANCEL',
+ FILE_SELECTION_COMPLETE:
+ 'print_preview.NativeLayer.FILE_SELECTION_COMPLETE',
+ GET_CAPABILITIES_FAIL: 'print_preview.NativeLayer.GET_CAPABILITIES_FAIL',
+ INITIAL_SETTINGS_SET: 'print_preview.NativeLayer.INITIAL_SETTINGS_SET',
+ LOCAL_DESTINATIONS_SET: 'print_preview.NativeLayer.LOCAL_DESTINATIONS_SET',
+ PAGE_COUNT_READY: 'print_preview.NativeLayer.PAGE_COUNT_READY',
+ PAGE_LAYOUT_READY: 'print_preview.NativeLayer.PAGE_LAYOUT_READY',
+ PAGE_PREVIEW_READY: 'print_preview.NativeLayer.PAGE_PREVIEW_READY',
+ PREVIEW_GENERATION_DONE:
+ 'print_preview.NativeLayer.PREVIEW_GENERATION_DONE',
+ PREVIEW_GENERATION_FAIL:
+ 'print_preview.NativeLayer.PREVIEW_GENERATION_FAIL',
+ PREVIEW_RELOAD: 'print_preview.NativeLayer.PREVIEW_RELOAD',
+ PRINT_TO_CLOUD: 'print_preview.NativeLayer.PRINT_TO_CLOUD',
+ SETTINGS_INVALID: 'print_preview.NativeLayer.SETTINGS_INVALID'
+ };
+
+ /**
+ * Constant values matching printing::DuplexMode enum.
+ * @enum {number}
+ */
+ NativeLayer.DuplexMode = {
+ SIMPLEX: 0,
+ LONG_EDGE: 1,
+ UNKNOWN_DUPLEX_MODE: -1
+ };
+
+ /**
+ * Enumeration of color modes used by Chromium.
+ * @enum {number}
+ * @private
+ */
+ NativeLayer.ColorMode_ = {
+ GRAY: 1,
+ COLOR: 2
+ };
+
+ /**
+ * Version of the serialized state of the print preview.
+ * @type {number}
+ * @const
+ * @private
+ */
+ NativeLayer.SERIALIZED_STATE_VERSION_ = 1;
+
+ NativeLayer.prototype = {
+ __proto__: cr.EventTarget.prototype,
+
+ /** Gets the initial settings to initialize the print preview with. */
+ startGetInitialSettings: function() {
+ chrome.send('getInitialSettings');
+ },
+
+ /**
+ * Requests the system's local print destinations. A LOCAL_DESTINATIONS_SET
+ * event will be dispatched in response.
+ */
+ startGetLocalDestinations: function() {
+ chrome.send('getPrinters');
+ },
+
+ /**
+ * Requests the destination's printing capabilities. A CAPABILITIES_SET
+ * event will be dispatched in response.
+ * @param {string} destinationId ID of the destination.
+ */
+ startGetLocalDestinationCapabilities: function(destinationId) {
+ chrome.send('getPrinterCapabilities', [destinationId]);
+ },
+
+ /**
+ * Requests that a preview be generated. The following events may be
+ * dispatched in response:
+ * - PAGE_COUNT_READY
+ * - PAGE_LAYOUT_READY
+ * - PAGE_PREVIEW_READY
+ * - PREVIEW_GENERATION_DONE
+ * - PREVIEW_GENERATION_FAIL
+ * - PREVIEW_RELOAD
+ * @param {print_preview.Destination} destination Destination to print to.
+ * @param {!print_preview.PrintTicketStore} printTicketStore Used to get the
+ * state of the print ticket.
+ * @param {number} ID of the preview request.
+ */
+ startGetPreview: function(destination, printTicketStore, requestId) {
+ assert(printTicketStore.isTicketValidForPreview(),
+ 'Trying to generate preview when ticket is not valid');
+
+ var ticket = {
+ 'pageRange': printTicketStore.getDocumentPageRanges(),
Toscano 2013/02/12 01:39:05 Can we just pass in printTicketStore.getPageRanges
Vitaly Buka (NO REVIEWS) 2013/02/12 01:45:30 Huge arrays of pages. On 2013/02/12 01:39:05, T
+ 'landscape': printTicketStore.isLandscapeEnabled(),
+ 'color': printTicketStore.isColorEnabled() ?
+ NativeLayer.ColorMode_.COLOR : NativeLayer.ColorMode_.GRAY,
+ 'headerFooterEnabled': printTicketStore.isHeaderFooterEnabled(),
+ 'marginsType': printTicketStore.getMarginsType(),
+ 'isFirstRequest': requestId == 0,
+ 'requestID': requestId,
+ 'previewModifiable': printTicketStore.isDocumentModifiable,
+ 'printToPDF':
+ destination != null &&
+ destination.id ==
+ print_preview.Destination.GooglePromotedId.SAVE_AS_PDF,
+ 'printWithCloudPrint': destination != null && !destination.isLocal,
+ 'deviceName': destination == null ? 'foo' : destination.id,
+ 'generateDraftData': printTicketStore.isDocumentModifiable,
+ 'fitToPageEnabled': printTicketStore.isFitToPageEnabled(),
+
+ // NOTE: Even though the following fields don't directly relate to the
+ // preview, they still need to be included.
+ 'duplex': printTicketStore.isDuplexEnabled() ?
+ NativeLayer.DuplexMode.LONG_EDGE : NativeLayer.DuplexMode.SIMPLEX,
+ 'copies': printTicketStore.getCopies(),
+ 'collate': printTicketStore.isCollateEnabled(),
+ 'shouldPrintBackgrounds': printTicketStore.isCssBackgroundEnabled(),
+ 'shouldPrintSelectionOnly': printTicketStore.isSelectionOnlyEnabled()
+ };
+
+ // Set 'cloudPrintID' only if the destination is not local.
+ if (!destination.isLocal) {
+ ticket['cloudPrintID'] = destination.id;
+ }
+
+ if (printTicketStore.hasMarginsCapability() &&
+ printTicketStore.getMarginsType() ==
+ print_preview.ticket_items.MarginsType.Value.CUSTOM) {
+ var customMargins = printTicketStore.getCustomMargins();
+ var orientationEnum =
+ print_preview.ticket_items.CustomMargins.Orientation;
+ ticket['marginsCustom'] = {
+ 'marginTop': customMargins.get(orientationEnum.TOP),
+ 'marginRight': customMargins.get(orientationEnum.RIGHT),
+ 'marginBottom': customMargins.get(orientationEnum.BOTTOM),
+ 'marginLeft': customMargins.get(orientationEnum.LEFT)
+ };
+ }
+
+ chrome.send(
+ 'getPreview',
+ [JSON.stringify(ticket),
+ requestId > 0 ? printTicketStore.pageCount : -1,
+ printTicketStore.isDocumentModifiable]);
+ },
+
+ /**
+ * Requests that the document be printed.
+ * @param {!print_preview.Destination} destination Destination to print to.
+ * @param {!print_preview.PrintTicketStore} printTicketStore Used to get the
+ * state of the print ticket.
+ * @param {print_preview.CloudPrintInterface} cloudPrintInterface Interface
+ * to Google Cloud Print.
+ * @param {boolean=} opt_isOpenPdfInPreview Whether to open the PDF in the
+ * system's preview application.
+ */
+ startPrint: function(destination, printTicketStore, cloudPrintInterface,
+ opt_isOpenPdfInPreview) {
+ assert(printTicketStore.isTicketValid(),
+ 'Trying to print when ticket is not valid');
+
+ var ticket = {
+ 'pageRange': printTicketStore.getDocumentPageRanges(),
+ 'pageCount': printTicketStore.getPageNumberSet().size,
Toscano 2013/02/12 01:39:05 Why are we submitting the pageCount now?
+ 'landscape': printTicketStore.isLandscapeEnabled(),
+ 'color': printTicketStore.isColorEnabled() ?
+ NativeLayer.ColorMode_.COLOR : NativeLayer.ColorMode_.GRAY,
+ 'headerFooterEnabled': printTicketStore.isHeaderFooterEnabled(),
+ 'marginsType': printTicketStore.getMarginsType(),
+ 'generateDraftData': true, // TODO(rltoscano): What should this be?
+ 'duplex': printTicketStore.isDuplexEnabled() ?
+ NativeLayer.DuplexMode.LONG_EDGE : NativeLayer.DuplexMode.SIMPLEX,
+ 'copies': printTicketStore.getCopies(),
+ 'collate': printTicketStore.isCollateEnabled(),
+ 'shouldPrintBackgrounds': printTicketStore.isCssBackgroundEnabled(),
+ 'shouldPrintSelectionOnly': printTicketStore.isSelectionOnlyEnabled(),
+ 'previewModifiable': printTicketStore.isDocumentModifiable,
+ 'printToPDF': destination.id ==
+ print_preview.Destination.GooglePromotedId.SAVE_AS_PDF,
+ 'printWithCloudPrint': !destination.isLocal,
+ 'deviceName': destination.id,
+ 'isFirstRequest': false,
+ 'requestID': -1,
+ 'fitToPageEnabled': printTicketStore.isFitToPageEnabled()
+ };
+
+ if (!destination.isLocal) {
+ // We can't set cloudPrintID if the destination is "Print with Cloud
+ // Print" because the native system will try to print to Google Cloud
+ // Print with this ID instead of opening a Google Cloud Print dialog.
+ ticket['cloudPrintID'] = destination.id;
+ }
+
+ if (printTicketStore.hasMarginsCapability() &&
+ printTicketStore.getMarginsType() ==
+ print_preview.ticket_items.MarginsType.Value.CUSTOM) {
+ var customMargins = printTicketStore.getCustomMargins();
+ var orientationEnum =
+ print_preview.ticket_items.CustomMargins.Orientation;
+ ticket['marginsCustom'] = {
+ 'marginTop': customMargins.get(orientationEnum.TOP),
+ 'marginRight': customMargins.get(orientationEnum.RIGHT),
+ 'marginBottom': customMargins.get(orientationEnum.BOTTOM),
+ 'marginLeft': customMargins.get(orientationEnum.LEFT)
+ };
+ }
+
+ if (opt_isOpenPdfInPreview) {
+ ticket['OpenPDFInPreview'] = true;
+ }
+
+ chrome.send('print', [JSON.stringify(ticket)]);
+ },
+
+ /** Requests that the current pending print request be cancelled. */
+ startCancelPendingPrint: function() {
+ chrome.send('cancelPendingPrintRequest');
+ },
+
+ /** Shows the system's native printing dialog. */
+ startShowSystemDialog: function() {
+ chrome.send('showSystemDialog');
+ },
+
+ /** Shows Google Cloud Print's web-based print dialog. */
+ startShowCloudPrintDialog: function() {
+ chrome.send('printWithCloudPrint');
+ },
+
+ /** Closes the print preview dialog. */
+ startCloseDialog: function() {
+ chrome.send('closePrintPreviewDialog');
+ chrome.send('DialogClose');
+ },
+
+ /** Hide the print preview dialog and allow the native layer to close it. */
+ startHideDialog: function() {
+ chrome.send('hidePreview');
+ },
+
+ /**
+ * Opens the Google Cloud Print sign-in dialog. The DESTINATIONS_RELOAD
+ * event will be dispatched in response.
+ */
+ startCloudPrintSignIn: function() {
+ chrome.send('signIn');
+ },
+
+ /** Navigates the user to the system printer settings interface. */
+ startManageLocalDestinations: function() {
+ chrome.send('manageLocalPrinters');
+ },
+
+ /** Navigates the user to the Google Cloud Print management page. */
+ startManageCloudDestinations: function() {
+ chrome.send('manageCloudPrinters');
+ },
+
+ /** Forces browser to open a new tab with the given URL address. */
+ startForceOpenNewTab: function(url) {
+ chrome.send('forceOpenNewTab', [url]);
+ },
+
+ /**
+ * @param {!Object} initialSettings Object containing all initial settings.
+ */
+ onSetInitialSettings_: function(initialSettings) {
+ var numberFormatSymbols =
+ print_preview.MeasurementSystem.parseNumberFormat(
+ initialSettings['numberFormat']);
+ var unitType = print_preview.MeasurementSystem.UnitType.IMPERIAL;
+ if (initialSettings['measurementSystem'] != null) {
+ unitType = initialSettings['measurementSystem'];
+ }
+
+ var nativeInitialSettings = new print_preview.NativeInitialSettings(
+ initialSettings['printAutomaticallyInKioskMode'] || false,
+ numberFormatSymbols[0] || ',',
+ numberFormatSymbols[1] || '.',
+ unitType,
+ initialSettings['previewModifiable'] || false,
+ initialSettings['initiatorTabTitle'] || '',
+ initialSettings['documentHasSelection'] || null,
+ initialSettings['shouldPrintSelectionOnly'] || null,
+ initialSettings['printerName'] || null,
+ initialSettings['appState'] || null);
+
+ var initialSettingsSetEvent = new cr.Event(
+ NativeLayer.EventType.INITIAL_SETTINGS_SET);
+ initialSettingsSetEvent.initialSettings = nativeInitialSettings;
+ this.dispatchEvent(initialSettingsSetEvent);
+ },
+
+ /**
+ * Turn on the integration of Cloud Print.
+ * @param {string} cloudPrintURL The URL to use for cloud print servers.
+ * @private
+ */
+ onSetUseCloudPrint_: function(cloudPrintURL) {
+ var cloudPrintEnableEvent = new cr.Event(
+ NativeLayer.EventType.CLOUD_PRINT_ENABLE);
+ cloudPrintEnableEvent.baseCloudPrintUrl = cloudPrintURL;
+ this.dispatchEvent(cloudPrintEnableEvent);
+ },
+
+ /**
+ * Updates the print preview with local printers.
+ * Called from PrintPreviewHandler::SetupPrinterList().
+ * @param {Array} printers Array of printer info objects.
+ * @private
+ */
+ onSetPrinters_: function(printers) {
+ var localDestsSetEvent = new cr.Event(
+ NativeLayer.EventType.LOCAL_DESTINATIONS_SET);
+ localDestsSetEvent.destinationInfos = printers;
+ this.dispatchEvent(localDestsSetEvent);
+ },
+
+ /**
+ * Called when native layer gets settings information for a requested local
+ * destination.
+ * @param {Object} settingsInfo printer setting information.
+ * @private
+ */
+ onUpdateWithPrinterCapabilities_: function(settingsInfo) {
+ var capsSetEvent = new cr.Event(NativeLayer.EventType.CAPABILITIES_SET);
+ capsSetEvent.settingsInfo = settingsInfo;
+ this.dispatchEvent(capsSetEvent);
+ },
+
+ /**
+ * Called when native layer gets settings information for a requested local
+ * destination.
+ * @param {string} printerId printer affected by error.
+ * @private
+ */
+ onFailedToGetPrinterCapabilities_: function(destinationId) {
+ var getCapsFailEvent = new cr.Event(
+ NativeLayer.EventType.GET_CAPABILITIES_FAIL);
+ getCapsFailEvent.destinationId = destinationId;
+ this.dispatchEvent(getCapsFailEvent);
+ },
+
+ /** Reloads the printer list. */
+ onReloadPrintersList_: function() {
+ cr.dispatchSimpleEvent(this, NativeLayer.EventType.DESTINATIONS_RELOAD);
+ },
+
+ /**
+ * Called from the C++ layer.
+ * Take the PDF data handed to us and submit it to the cloud, closing the
+ * print preview tab once the upload is successful.
+ * @param {string} data Data to send as the print job.
+ * @private
+ */
+ onPrintToCloud_: function(data) {
+ var printToCloudEvent = new cr.Event(
+ NativeLayer.EventType.PRINT_TO_CLOUD);
+ printToCloudEvent.data = data;
+ this.dispatchEvent(printToCloudEvent);
+ },
+
+ /**
+ * Called from PrintPreviewUI::OnFileSelectionCancelled to notify the print
+ * preview tab regarding the file selection cancel event.
+ * @private
+ */
+ onFileSelectionCancelled_: function() {
+ cr.dispatchSimpleEvent(this, NativeLayer.EventType.FILE_SELECTION_CANCEL);
+ },
+
+ /**
+ * Called from PrintPreviewUI::OnFileSelectionCompleted to notify the print
+ * preview tab regarding the file selection completed event.
+ * @private
+ */
+ onFileSelectionCompleted_: function() {
+ // If the file selection is completed and the tab is not already closed it
+ // means that a pending print to pdf request exists.
+ cr.dispatchSimpleEvent(
+ this, NativeLayer.EventType.FILE_SELECTION_COMPLETE);
+ },
+
+ /**
+ * Display an error message when print preview fails.
+ * Called from PrintPreviewMessageHandler::OnPrintPreviewFailed().
+ * @private
+ */
+ onPrintPreviewFailed_: function() {
+ cr.dispatchSimpleEvent(
+ this, NativeLayer.EventType.PREVIEW_GENERATION_FAIL);
+ },
+
+ /**
+ * Display an error message when encountered invalid printer settings.
+ * Called from PrintPreviewMessageHandler::OnInvalidPrinterSettings().
+ * @private
+ */
+ onInvalidPrinterSettings_: function() {
+ cr.dispatchSimpleEvent(this, NativeLayer.EventType.SETTINGS_INVALID);
+ },
+
+ /**
+ * @param {{contentWidth: number, contentHeight: number, marginLeft: number,
+ * marginRight: number, marginTop: number, marginBottom: number,
+ * printableAreaX: number, printableAreaY: number,
+ * printableAreaWidth: number, printableAreaHeight: number}}
+ * pageLayout Specifies default page layout details in points.
+ * @param {boolean} hasCustomPageSizeStyle Indicates whether the previewed
+ * document has a custom page size style.
+ * @private
+ */
+ onDidGetDefaultPageLayout_: function(pageLayout, hasCustomPageSizeStyle) {
+ var pageLayoutChangeEvent = new cr.Event(
+ NativeLayer.EventType.PAGE_LAYOUT_READY);
+ pageLayoutChangeEvent.pageLayout = pageLayout;
+ pageLayoutChangeEvent.hasCustomPageSizeStyle = hasCustomPageSizeStyle;
+ this.dispatchEvent(pageLayoutChangeEvent);
+ },
+
+ /**
+ * Update the page count and check the page range.
+ * Called from PrintPreviewUI::OnDidGetPreviewPageCount().
+ * @param {number} pageCount The number of pages.
+ * @param {number} previewResponseId The preview request id that resulted in
+ * this response.
+ * @private
+ */
+ onDidGetPreviewPageCount_: function(pageCount, previewResponseId) {
+ var pageCountChangeEvent = new cr.Event(
+ NativeLayer.EventType.PAGE_COUNT_READY);
+ pageCountChangeEvent.pageCount = pageCount;
+ pageCountChangeEvent.previewResponseId = previewResponseId;
+ this.dispatchEvent(pageCountChangeEvent);
+ },
+
+ /**
+ * Called when no pipelining previewed pages.
+ * @param {number} previewUid Preview unique identifier.
+ * @param {number} previewResponseId The preview request id that resulted in
+ * this response.
+ * @private
+ */
+ onReloadPreviewPages_: function(previewUid, previewResponseId) {
+ var previewReloadEvent = new cr.Event(
+ NativeLayer.EventType.PREVIEW_RELOAD);
+ previewReloadEvent.previewUid = previewUid;
+ previewReloadEvent.previewResponseId = previewResponseId;
+ this.dispatchEvent(previewReloadEvent);
+ },
+
+ /**
+ * Notification that a print preview page has been rendered.
+ * Check if the settings have changed and request a regeneration if needed.
+ * Called from PrintPreviewUI::OnDidPreviewPage().
+ * @param {number} pageNumber The page number, 0-based.
+ * @param {number} previewUid Preview unique identifier.
+ * @param {number} previewResponseId The preview request id that resulted in
+ * this response.
+ * @private
+ */
+ onDidPreviewPage_: function(pageNumber, previewUid, previewResponseId) {
+ var pagePreviewGenEvent = new cr.Event(
+ NativeLayer.EventType.PAGE_PREVIEW_READY);
+ pagePreviewGenEvent.pageIndex = pageNumber;
+ pagePreviewGenEvent.previewUid = previewUid;
+ pagePreviewGenEvent.previewResponseId = previewResponseId;
+ this.dispatchEvent(pagePreviewGenEvent);
+ },
+
+ /**
+ * Update the print preview when new preview data is available.
+ * Create the PDF plugin as needed.
+ * Called from PrintPreviewUI::PreviewDataIsAvailable().
+ * @param {number} previewUid Preview unique identifier.
+ * @param {number} previewResponseId The preview request id that resulted in
+ * this response.
+ * @private
+ */
+ onUpdatePrintPreview_: function(previewUid, previewResponseId) {
+ var previewGenDoneEvent = new cr.Event(
+ NativeLayer.EventType.PREVIEW_GENERATION_DONE);
+ previewGenDoneEvent.previewUid = previewUid;
+ previewGenDoneEvent.previewResponseId = previewResponseId;
+ this.dispatchEvent(previewGenDoneEvent);
+ },
+
+ /**
+ * Updates the fit to page option state based on the print scaling option of
+ * source pdf. PDF's have an option to enable/disable print scaling. When we
+ * find out that the print scaling option is disabled for the source pdf, we
+ * uncheck the fitToPage_ to page checkbox. This function is called from C++
+ * code.
+ * @private
+ */
+ onPrintScalingDisabledForSourcePDF_: function() {
+ cr.dispatchSimpleEvent(this, NativeLayer.EventType.DISABLE_SCALING);
+ }
+ };
+
+ /**
+ * Initial settings retrieved from the native layer.
+ * @param {boolean} isInKioskAutoPrintMode Whether the print preview should be
+ * in auto-print mode.
+ * @param {string} thousandsDelimeter Character delimeter of thousands digits.
+ * @param {string} decimalDelimeter Character delimeter of the decimal point.
+ * @param {!print_preview.MeasurementSystem.UnitType} unitType Unit type of
+ * local machine's measurement system.
+ * @param {boolean} isDocumentModifiable Whether the document to print is
+ * modifiable.
+ * @param {string} documentTitle Title of the document.
+ * @param {boolean} documentHasSelection Whether the document has selected
+ * content.
+ * @param {boolean} selectionOnly Whether only selected content should be
+ * printed.
+ * @param {?string} systemDefaultDestinationId ID of the system default
+ * destination.
+ * @param {?string} serializedAppStateStr Serialized app state.
+ * @constructor
+ */
+ function NativeInitialSettings(
+ isInKioskAutoPrintMode,
+ thousandsDelimeter,
+ decimalDelimeter,
+ unitType,
+ isDocumentModifiable,
+ documentTitle,
+ documentHasSelection,
+ selectionOnly,
+ systemDefaultDestinationId,
+ serializedAppStateStr) {
+
+ /**
+ * Whether the print preview should be in auto-print mode.
+ * @type {boolean}
+ * @private
+ */
+ this.isInKioskAutoPrintMode_ = isInKioskAutoPrintMode;
+
+ /**
+ * Character delimeter of thousands digits.
+ * @type {string}
+ * @private
+ */
+ this.thousandsDelimeter_ = thousandsDelimeter;
+
+ /**
+ * Character delimeter of the decimal point.
+ * @type {string}
+ * @private
+ */
+ this.decimalDelimeter_ = decimalDelimeter;
+
+ /**
+ * Unit type of local machine's measurement system.
+ * @type {string}
+ * @private
+ */
+ this.unitType_ = unitType;
+
+ /**
+ * Whether the document to print is modifiable.
+ * @type {boolean}
+ * @private
+ */
+ this.isDocumentModifiable_ = isDocumentModifiable;
+
+ /**
+ * Title of the document.
+ * @type {string}
+ * @private
+ */
+ this.documentTitle_ = documentTitle;
+
+ /**
+ * Whether the document has selection.
+ * @type {string}
+ * @private
+ */
+ this.documentHasSelection_ = documentHasSelection;
+
+ /**
+ * Whether selection only should be printed.
+ * @type {string}
+ * @private
+ */
+ this.selectionOnly_ = selectionOnly;
+
+ /**
+ * ID of the system default destination.
+ * @type {?string}
+ * @private
+ */
+ this.systemDefaultDestinationId_ = systemDefaultDestinationId;
+
+ /**
+ * Serialized app state.
+ * @type {?string}
+ * @private
+ */
+ this.serializedAppStateStr_ = serializedAppStateStr;
+ };
+
+ NativeInitialSettings.prototype = {
+ /**
+ * @return {boolean} Whether the print preview should be in auto-print mode.
+ */
+ get isInKioskAutoPrintMode() {
+ return this.isInKioskAutoPrintMode_;
+ },
+
+ /** @return {string} Character delimeter of thousands digits. */
+ get thousandsDelimeter() {
+ return this.thousandsDelimeter_;
+ },
+
+ /** @return {string} Character delimeter of the decimal point. */
+ get decimalDelimeter() {
+ return this.decimalDelimeter_;
+ },
+
+ /**
+ * @return {!print_preview.MeasurementSystem.UnitType} Unit type of local
+ * machine's measurement system.
+ */
+ get unitType() {
+ return this.unitType_;
+ },
+
+ /** @return {boolean} Whether the document to print is modifiable. */
+ get isDocumentModifiable() {
+ return this.isDocumentModifiable_;
+ },
+
+ /** @return {string} Document title. */
+ get documentTitle() {
+ return this.documentTitle_;
+ },
+
+ /** @return {bool} Whether the document has selection. */
+ get documentHasSelection() {
+ return this.documentHasSelection_;
+ },
+
+ /** @return {bool} Whether selection only should be printed. */
+ get selectionOnly() {
+ return this.selectionOnly_;
+ },
+
+ /** @return {?string} ID of the system default destination. */
+ get systemDefaultDestinationId() {
+ return this.systemDefaultDestinationId_;
+ },
+
+ /** @return {?string} Serialized app state. */
+ get serializedAppStateStr() {
+ return this.serializedAppStateStr_;
+ }
+ };
+
+ // Export
+ return {
+ NativeInitialSettings: NativeInitialSettings,
+ NativeLayer: NativeLayer
+ };
+});

Powered by Google App Engine
This is Rietveld 408576698