summaryrefslogtreecommitdiffstats
path: root/chrome/browser/resources/print_preview/native_layer.js
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/resources/print_preview/native_layer.js')
-rw-r--r--chrome/browser/resources/print_preview/native_layer.js727
1 files changed, 727 insertions, 0 deletions
diff --git a/chrome/browser/resources/print_preview/native_layer.js b/chrome/browser/resources/print_preview/native_layer.js
new file mode 100644
index 0000000..8acec69
--- /dev/null
+++ b/chrome/browser/resources/print_preview/native_layer.js
@@ -0,0 +1,727 @@
+// 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['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',
+ 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
+ };
+
+ 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 = [];
+ if (requestId > 0 &&
+ !printTicketStore.isDocumentModifiable &&
+ printTicketStore.hasPageRangeCapability()) {
+ pageRanges = printTicketStore.getPageNumberSet().getPageRanges();
+ }
+
+ var ticket = {
+ 'pageRange': pageRanges, // 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,
+ 'cloudPrintID': 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()
+ };
+
+ 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), -1, printTicketStore.isDocumentModifiable]);
+ },
+
+ /**
+ * Persists the selected destination and print ticket for the next print
+ * session.
+ * @param {!print_preview.Destination} destination Destination to save.
+ * @param {!print_preview.PrintTicketStore} printTicketStore Used for
+ * generating the serialized print ticket to persist.
+ */
+ startSaveDestinationAndTicket: function(destination, printTicketStore) {
+ chrome.send('saveLastPrinter', [destination.id, '' /*TODO(rltoscano)*/]);
+ },
+
+ /**
+ * 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(),
+ '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 && !destination.isPrintWithCloudPrint) {
+ // 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;
+ }
+
+ var cloudTicket = null;
+ if (!destination.isLocal) {
+ assert(cloudPrintInterface != null,
+ 'Trying to print to a cloud destination but Google Cloud ' +
+ 'Print integration is disabled');
+ cloudTicket = cloudPrintInterface.createPrintTicket(
+ destination, printTicketStore);
+ cloudTicket = JSON.stringify(cloudTicket);
+ }
+
+ chrome.send('print', [JSON.stringify(ticket), cloudTicket]);
+ },
+
+ /** 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');
+ },
+
+ /** Closes the print preview dialog. */
+ startCloseDialog: function() {
+ chrome.send('closePrintPreviewTab');
+ 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. */
+ startManageLocalPrinters: function() {
+ chrome.send('manageLocalPrinters');
+ },
+
+ /** Navigates the user to the Google Cloud Print management page. */
+ startManageCloudPrinters: function() {
+ chrome.send('manageCloudPrinters');
+ },
+
+ /**
+ * @param {object} initialSettings Object containing all initial settings.
+ */
+ onSetInitialSettings_: function(initialSettings) {
+ // TODO(rltoscano): Use initialSettings['cloudPrintData'] to prepopulate
+ // destination and initial print ticket.
+ var numberFormatSymbols =
+ print_preview.MeasurementSystem.parseNumberFormat(
+ initialSettings['numberFormat']);
+ var unitType = print_preview.MeasurementSystem.UnitType.IMPERIAL;
+ if (initialSettings['measurementSystem'] != null) {
+ unitType = initialSettings['measurementSystem'];
+ }
+ var measurementSystem = new print_preview.MeasurementSystem(
+ numberFormatSymbols[0],
+ numberFormatSymbols[1],
+ unitType);
+
+ var customMargins = null;
+ if (initialSettings.hasOwnProperty('marginTop') &&
+ initialSettings.hasOwnProperty('marginRight') &&
+ initialSettings.hasOwnProperty('marginBottom') &&
+ initialSettings.hasOwnProperty('marginLeft')) {
+ customMargins = new print_preview.Margins(
+ initialSettings['marginTop'] || 0,
+ initialSettings['marginRight'] || 0,
+ initialSettings['marginBottom'] || 0,
+ initialSettings['marginLeft'] || 0);
+ }
+
+ var marginsType = null;
+ if (initialSettings.hasOwnProperty('marginsType')) {
+ marginsType = initialSettings['marginsType'];
+ }
+
+ var nativeInitialSettings = new print_preview.NativeInitialSettings(
+ initialSettings['printAutomaticallyInKioskMode'] || false,
+ numberFormatSymbols[0] || ',',
+ numberFormatSymbols[1] || '.',
+ unitType,
+ initialSettings['previewModifiable'] || false,
+ marginsType,
+ customMargins,
+ initialSettings['duplex'] || false,
+ initialSettings['headerFooterEnabled'] || false,
+ initialSettings['printerName'] || 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);
+ },
+
+ /** 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 {string} 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 {string} 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 {string} 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 {?print_preview.ticket_items.MarginsType.Value} marginsType Initial
+ * margins type.
+ * @param {print_preview.Margins} customMargins Initial custom margins.
+ * @param {boolean} isDuplexEnabled Whether duplexing is initially enabled.
+ * @param {boolean} isHeaderFooterEnabled Whether the header-footer is
+ * initially enabled.
+ * @param {?string} initialDestinationId ID of the destination to initially
+ * select.
+ * @constructor
+ */
+ function NativeInitialSettings(
+ isInKioskAutoPrintMode,
+ thousandsDelimeter,
+ decimalDelimeter,
+ unitType,
+ isDocumentModifiable,
+ marginsType,
+ customMargins,
+ isDuplexEnabled,
+ isHeaderFooterEnabled,
+ initialDestinationId) {
+
+ /**
+ * 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;
+
+ /**
+ * Initial margins type.
+ * @type {?print_preview.ticket_items.MarginsType.Value}
+ * @private
+ */
+ this.marginsType_ = marginsType;
+
+ /**
+ * Initial custom margins.
+ * @type {print_preview.Margins}
+ * @private
+ */
+ this.customMargins_ = customMargins;
+
+ /**
+ * Whether duplexing is initially enabled.
+ * @type {boolean}
+ * @private
+ */
+ this.isDuplexEnabled_ = isDuplexEnabled;
+
+ /**
+ * Whether the header-footer is initially enabled.
+ * @type {boolean}
+ * @private
+ */
+ this.isHeaderFooterEnabled_ = isHeaderFooterEnabled;
+
+ /**
+ * ID of the initially selected destination.
+ * @type {?string}
+ * @private
+ */
+ this.initialDestinationId_ = initialDestinationId;
+ };
+
+ 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 {?print_preview.ticket_items.MarginsType.Value} Initial margins
+ * type or {@code null} if not initially set.
+ */
+ get marginsType() {
+ return this.marginsType_;
+ },
+
+ /** @return {print_preview.Margins} Initial custom margins. */
+ get customMargins() {
+ return this.customMargins_;
+ },
+
+ /** @return {boolean} Whether duplexing is initially enabled. */
+ get isDuplexEnabled() {
+ return this.isDuplexEnabled_;
+ },
+
+ /** @return {boolean} Whether the header-footer is initially enabled. */
+ get isHeaderFooterEnabled() {
+ return this.isHeaderFooterEnabled_;
+ },
+
+ /** @return {?string} ID of the initially selected destination. */
+ get initialDestinationId() {
+ return this.initialDestinationId_;
+ }
+ };
+
+ // Export
+ return {
+ NativeInitialSettings: NativeInitialSettings,
+ NativeLayer: NativeLayer
+ };
+});