// 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['failedToGetPrivetPrinterCapabilities'] = this.onFailedToGetPrivetPrinterCapabilities_.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['onDidPreviewPage'] = this.onDidPreviewPage_.bind(this); global['updatePrintPreview'] = this.onUpdatePrintPreview_.bind(this); global['printScalingDisabledForSourcePDF'] = this.onPrintScalingDisabledForSourcePDF_.bind(this); global['onDidGetAccessToken'] = this.onDidGetAccessToken_.bind(this); global['autoCancelForTesting'] = this.autoCancelForTesting_.bind(this); global['onPrivetPrinterChanged'] = this.onPrivetPrinterChanged_.bind(this); global['onPrivetCapabilitiesSet'] = this.onPrivetCapabilitiesSet_.bind(this); global['onPrivetPrintFailed'] = this.onPrivetPrintFailed_.bind(this); }; /** * Event types dispatched from the Chromium native layer. * @enum {string} * @const */ NativeLayer.EventType = { ACCESS_TOKEN_READY: 'print_preview.NativeLayer.ACCESS_TOKEN_READY', 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', PRINT_TO_CLOUD: 'print_preview.NativeLayer.PRINT_TO_CLOUD', SETTINGS_INVALID: 'print_preview.NativeLayer.SETTINGS_INVALID', PRIVET_PRINTER_CHANGED: 'print_preview.NativeLayer.PRIVET_PRINTER_CHANGED', PRIVET_CAPABILITIES_SET: 'print_preview.NativeLayer.PRIVET_CAPABILITIES_SET', PRIVET_PRINT_FAILED: 'print_preview.NativeLayer.PRIVET_PRINT_FAILED' }; /** * 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, /** * Requests access token for cloud print requests. * @param {string} authType type of access token. */ startGetAccessToken: function(authType) { chrome.send('getAccessToken', [authType]); }, /** 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 network's privet print destinations. A number of * PRIVET_PRINTER_CHANGED events will be fired in response, followed by a * PRIVET_SEARCH_ENDED. */ startGetPrivetDestinations: function() { chrome.send('getPrivetPrinters'); }, /** * Requests that the privet print stack stop searching for privet print * destinations. */ stopGetPrivetDestinations: function() { chrome.send('stopGetPrivetPrinters'); }, /** * Requests the privet destination's printing capabilities. A * PRIVET_CAPABILITIES_SET event will be dispatched in response. * @param {string} destinationId ID of the destination. */ startGetPrivetDestinationCapabilities: function(destinationId) { chrome.send('getPrivetPrinterCapabilities', [destinationId]); }, /** * 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 * @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.DocumentInfo} documentInfo Document data model. * @param {number} ID of the preview request. */ startGetPreview: function( destination, printTicketStore, documentInfo, requestId) { assert(printTicketStore.isTicketValidForPreview(), 'Trying to generate preview when ticket is not valid'); var ticket = { 'pageRange': printTicketStore.pageRange.getDocumentPageRanges(), 'landscape': printTicketStore.landscape.getValue(), 'color': printTicketStore.color.getValue() ? NativeLayer.ColorMode_.COLOR : NativeLayer.ColorMode_.GRAY, 'headerFooterEnabled': printTicketStore.headerFooter.getValue(), 'marginsType': printTicketStore.marginsType.getValue(), 'isFirstRequest': requestId == 0, 'requestID': requestId, 'previewModifiable': documentInfo.isModifiable, 'printToPDF': destination != null && destination.id == print_preview.Destination.GooglePromotedId.SAVE_AS_PDF, 'printWithCloudPrint': destination != null && !destination.isLocal, 'printWithPrivet': destination != null && destination.isPrivet, 'deviceName': destination == null ? 'foo' : destination.id, 'generateDraftData': documentInfo.isModifiable, 'fitToPageEnabled': printTicketStore.fitToPage.getValue(), // NOTE: Even though the following fields don't directly relate to the // preview, they still need to be included. 'duplex': printTicketStore.duplex.getValue() ? NativeLayer.DuplexMode.LONG_EDGE : NativeLayer.DuplexMode.SIMPLEX, 'copies': printTicketStore.copies.getValueAsNumber(), 'collate': printTicketStore.collate.getValue(), 'shouldPrintBackgrounds': printTicketStore.cssBackground.getValue(), 'shouldPrintSelectionOnly': printTicketStore.selectionOnly.getValue() }; // Set 'cloudPrintID' only if the destination is not local. if (destination && !destination.isLocal) { ticket['cloudPrintID'] = destination.id; } if (printTicketStore.marginsType.isCapabilityAvailable() && printTicketStore.marginsType.getValue() == print_preview.ticket_items.MarginsType.Value.CUSTOM) { var customMargins = printTicketStore.customMargins.getValue(); 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 ? documentInfo.pageCount : -1, documentInfo.isModifiable]); }, /** * 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 {!print_preview.DocumentInfo} documentInfo Document data model. * @param {boolean=} opt_isOpenPdfInPreview Whether to open the PDF in the * system's preview application. */ startPrint: function(destination, printTicketStore, cloudPrintInterface, documentInfo, opt_isOpenPdfInPreview) { assert(printTicketStore.isTicketValid(), 'Trying to print when ticket is not valid'); var ticket = { 'pageRange': printTicketStore.pageRange.getDocumentPageRanges(), 'pageCount': printTicketStore.pageRange.getPageNumberSet().size, 'landscape': printTicketStore.landscape.getValue(), 'color': printTicketStore.color.getValue() ? NativeLayer.ColorMode_.COLOR : NativeLayer.ColorMode_.GRAY, 'headerFooterEnabled': printTicketStore.headerFooter.getValue(), 'marginsType': printTicketStore.marginsType.getValue(), 'generateDraftData': true, // TODO(rltoscano): What should this be? 'duplex': printTicketStore.duplex.getValue() ? NativeLayer.DuplexMode.LONG_EDGE : NativeLayer.DuplexMode.SIMPLEX, 'copies': printTicketStore.copies.getValueAsNumber(), 'collate': printTicketStore.collate.getValue(), 'shouldPrintBackgrounds': printTicketStore.cssBackground.getValue(), 'shouldPrintSelectionOnly': printTicketStore.selectionOnly.getValue(), 'previewModifiable': documentInfo.isModifiable, 'printToPDF': destination.id == print_preview.Destination.GooglePromotedId.SAVE_AS_PDF, 'printWithCloudPrint': !destination.isLocal, 'printWithPrivet': destination.isPrivet, 'deviceName': destination.id, 'isFirstRequest': false, 'requestID': -1, 'fitToPageEnabled': printTicketStore.fitToPage.getValue(), 'pageWidth': documentInfo.pageSize.width, 'pageHeight': documentInfo.pageSize.height, }; 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.marginsType.isCapabilityAvailable() && printTicketStore.marginsType.isValueEqual( print_preview.ticket_items.MarginsType.Value.CUSTOM)) { var customMargins = printTicketStore.customMargins.getValue(); 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 (destination.isPrivet) { ticket['ticket'] = printTicketStore.createPrintTicket(destination); } 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. * @param {number} pageCount Number of pages to print. */ startShowCloudPrintDialog: function(pageCount) { chrome.send('printWithCloudPrintDialog', [pageCount]); }, /** 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, initialSettings['hidePrintWithSystemDialogLink'] || false, numberFormatSymbols[0] || ',', numberFormatSymbols[1] || '.', unitType, initialSettings['previewModifiable'] || false, initialSettings['initiatorTitle'] || '', initialSettings['documentHasSelection'] || false, initialSettings['shouldPrintSelectionOnly'] || false, initialSettings['printerName'] || null, initialSettings['appState'] || null); var initialSettingsSetEvent = new 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 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 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 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 Event( NativeLayer.EventType.GET_CAPABILITIES_FAIL); getCapsFailEvent.destinationId = destinationId; getCapsFailEvent.destinationOrigin = print_preview.Destination.Origin.LOCAL; this.dispatchEvent(getCapsFailEvent); }, /** * Called when native layer gets settings information for a requested privet * destination. * @param {string} printerId printer affected by error. * @private */ onFailedToGetPrivetPrinterCapabilities_: function(destinationId) { var getCapsFailEvent = new Event( NativeLayer.EventType.GET_CAPABILITIES_FAIL); getCapsFailEvent.destinationId = destinationId; getCapsFailEvent.destinationOrigin = print_preview.Destination.Origin.PRIVET; 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 dialog once the upload is successful. * @param {string} data Data to send as the print job. * @private */ onPrintToCloud_: function(data) { var printToCloudEvent = new Event( NativeLayer.EventType.PRINT_TO_CLOUD); printToCloudEvent.data = data; this.dispatchEvent(printToCloudEvent); }, /** * Called from PrintPreviewUI::OnFileSelectionCancelled to notify the print * preview dialog 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 dialog regarding the file selection completed event. * @private */ onFileSelectionCompleted_: function() { // If the file selection is completed and the dialog 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 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 Event( NativeLayer.EventType.PAGE_COUNT_READY); pageCountChangeEvent.pageCount = pageCount; pageCountChangeEvent.previewResponseId = previewResponseId; this.dispatchEvent(pageCountChangeEvent); }, /** * 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 Event( NativeLayer.EventType.PAGE_PREVIEW_READY); pagePreviewGenEvent.pageIndex = pageNumber; pagePreviewGenEvent.previewUid = previewUid; pagePreviewGenEvent.previewResponseId = previewResponseId; this.dispatchEvent(pagePreviewGenEvent); }, /** * Notification that access token is ready. * @param {string} authType Type of access token. * @param {string} accessToken Access token. * @private */ onDidGetAccessToken_: function(authType, accessToken) { var getAccessTokenEvent = new Event( NativeLayer.EventType.ACCESS_TOKEN_READY); getAccessTokenEvent.authType = authType; getAccessTokenEvent.accessToken = accessToken; this.dispatchEvent(getAccessTokenEvent); }, /** * 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 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); }, /** * Simulates a user click on the print preview dialog cancel button. Used * only for testing. * @private */ autoCancelForTesting_: function() { var properties = {view: window, bubbles: true, cancelable: true}; var click = new MouseEvent('click', properties); document.querySelector('#print-header .cancel').dispatchEvent(click); }, /** * @param {{serviceName: string, name: string}} printer Specifies * information about the printer that was added. * @private */ onPrivetPrinterChanged_: function(printer) { var privetPrinterChangedEvent = new Event(NativeLayer.EventType.PRIVET_PRINTER_CHANGED); privetPrinterChangedEvent.printer = printer; this.dispatchEvent(privetPrinterChangedEvent); }, /** * @param {Object} printer Specifies information about the printer that was * added. * @private */ onPrivetCapabilitiesSet_: function(printer, capabilities) { var privetCapabilitiesSetEvent = new Event(NativeLayer.EventType.PRIVET_CAPABILITIES_SET); privetCapabilitiesSetEvent.printer = printer; privetCapabilitiesSetEvent.capabilities = capabilities; this.dispatchEvent(privetCapabilitiesSetEvent); }, /** * @param {string} http_error The HTTP response code or -1 if not an HTTP * error. * @private */ onPrivetPrintFailed_: function(http_error) { var privetPrintFailedEvent = new Event(NativeLayer.EventType.PRIVET_PRINT_FAILED); privetPrintFailedEvent.httpError = http_error; this.dispatchEvent(privetPrintFailedEvent); } }; /** * 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, hidePrintWithSystemDialogLink, 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; /** * Whether we should hide the link which shows the system print dialog. * @type {boolean} * @private */ this.hidePrintWithSystemDialogLink_ = hidePrintWithSystemDialogLink; /** * 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 {boolean} Whether we should hide the link which shows the system print dialog. */ get hidePrintWithSystemDialogLink() { return this.hidePrintWithSystemDialogLink_; }, /** @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 }; });