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

Side by Side Diff: chrome/browser/resources/print_preview/native_layer.js

Issue 2969383003: Print Preview: Finish removing global Javascript functions. (Closed)
Patch Set: Fix test Created 3 years, 5 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 cr.exportPath('print_preview'); 5 cr.exportPath('print_preview');
6 6
7 /** 7 /**
8 * @typedef {{selectSaveAsPdfDestination: boolean, 8 * @typedef {{selectSaveAsPdfDestination: boolean,
9 * layoutSettings.portrait: boolean, 9 * layoutSettings.portrait: boolean,
10 * pageRange: string, 10 * pageRange: string,
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
78 print_preview.ProvisionalDestinationInfo; 78 print_preview.ProvisionalDestinationInfo;
79 79
80 cr.define('print_preview', function() { 80 cr.define('print_preview', function() {
81 'use strict'; 81 'use strict';
82 82
83 /** 83 /**
84 * An interface to the native Chromium printing system layer. 84 * An interface to the native Chromium printing system layer.
85 * @constructor 85 * @constructor
86 */ 86 */
87 function NativeLayer() { 87 function NativeLayer() {
88 // Bind global handlers
89 global.reloadPrintersList = this.onReloadPrintersList_.bind(this);
90 global.onDidGetDefaultPageLayout =
91 this.onDidGetDefaultPageLayout_.bind(this);
92 global.onDidGetPreviewPageCount = this.onDidGetPreviewPageCount_.bind(this);
93 global.onDidPreviewPage = this.onDidPreviewPage_.bind(this);
94 global.onEnableManipulateSettingsForTest =
95 this.onEnableManipulateSettingsForTest_.bind(this);
96 global.printPresetOptionsFromDocument =
97 this.onPrintPresetOptionsFromDocument_.bind(this);
98
99 /** @private {!cr.EventTarget} */
100 this.eventTarget_ = new cr.EventTarget();
101 } 88 }
102 89
103 /** @private {?print_preview.NativeLayer} */ 90 /** @private {?print_preview.NativeLayer} */
104 var currentInstance = null; 91 var currentInstance = null;
105 92
106 /** 93 /**
107 * @return {!print_preview.NativeLayer} The singleton instance. 94 * @return {!print_preview.NativeLayer} The singleton instance.
108 * Creates a new NativeLayer if the current instance is not set. 95 * Creates a new NativeLayer if the current instance is not set.
109 */ 96 */
110 NativeLayer.getInstance = function() { 97 NativeLayer.getInstance = function() {
111 if (currentInstance == null) 98 if (currentInstance == null)
112 currentInstance = new NativeLayer(); 99 currentInstance = new NativeLayer();
113 return assert(currentInstance); 100 return assert(currentInstance);
114 }; 101 };
115 102
116 /** 103 /**
117 * @param {!print_preview.NativeLayer} instance The NativeLayer instance 104 * @param {!print_preview.NativeLayer} instance The NativeLayer instance
118 * to set for print preview construction. 105 * to set for print preview construction.
119 */ 106 */
120 NativeLayer.setInstance = function(instance) { 107 NativeLayer.setInstance = function(instance) {
121 currentInstance = instance; 108 currentInstance = instance;
122 }; 109 };
123 110
124 /** 111 /**
125 * Event types dispatched from the Chromium native layer.
126 * @enum {string}
127 * @const
128 */
129 NativeLayer.EventType = {
130 DESTINATIONS_RELOAD: 'print_preview.NativeLayer.DESTINATIONS_RELOAD',
131 DISABLE_SCALING: 'print_preview.NativeLayer.DISABLE_SCALING',
132 MANIPULATE_SETTINGS_FOR_TEST:
133 'print_preview.NativeLayer.MANIPULATE_SETTINGS_FOR_TEST',
134 PAGE_COUNT_READY: 'print_preview.NativeLayer.PAGE_COUNT_READY',
135 PAGE_LAYOUT_READY: 'print_preview.NativeLayer.PAGE_LAYOUT_READY',
136 PAGE_PREVIEW_READY: 'print_preview.NativeLayer.PAGE_PREVIEW_READY',
137 PREVIEW_GENERATION_DONE:
138 'print_preview.NativeLayer.PREVIEW_GENERATION_DONE',
139 PREVIEW_GENERATION_FAIL:
140 'print_preview.NativeLayer.PREVIEW_GENERATION_FAIL',
141 SETTINGS_INVALID: 'print_preview.NativeLayer.SETTINGS_INVALID',
142 PRINT_PRESET_OPTIONS: 'print_preview.NativeLayer.PRINT_PRESET_OPTIONS',
143 };
144
145 /**
146 * Constant values matching printing::DuplexMode enum. 112 * Constant values matching printing::DuplexMode enum.
147 * @enum {number} 113 * @enum {number}
148 */ 114 */
149 NativeLayer.DuplexMode = {SIMPLEX: 0, LONG_EDGE: 1, UNKNOWN_DUPLEX_MODE: -1}; 115 NativeLayer.DuplexMode = {SIMPLEX: 0, LONG_EDGE: 1, UNKNOWN_DUPLEX_MODE: -1};
150 116
151 /** 117 /**
152 * Enumeration of color modes used by Chromium. 118 * Enumeration of color modes used by Chromium.
153 * @enum {number} 119 * @enum {number}
154 * @private 120 * @private
155 */ 121 */
156 NativeLayer.ColorMode_ = {GRAY: 1, COLOR: 2}; 122 NativeLayer.ColorMode_ = {GRAY: 1, COLOR: 2};
157 123
158 /** 124 /**
159 * Version of the serialized state of the print preview. 125 * Version of the serialized state of the print preview.
160 * @type {number} 126 * @type {number}
161 * @const 127 * @const
162 * @private 128 * @private
163 */ 129 */
164 NativeLayer.SERIALIZED_STATE_VERSION_ = 1; 130 NativeLayer.SERIALIZED_STATE_VERSION_ = 1;
165 131
166 NativeLayer.prototype = { 132 NativeLayer.prototype = {
167 /** @return {!cr.EventTarget} The event target for the native layer.*/
168 getEventTarget: function() {
169 return this.eventTarget_;
170 },
171
172 /** 133 /**
173 * Requests access token for cloud print requests. 134 * Requests access token for cloud print requests.
174 * @param {string} authType type of access token. 135 * @param {string} authType type of access token.
175 * @return {!Promise<string>} 136 * @return {!Promise<string>}
176 */ 137 */
177 getAccessToken: function(authType) { 138 getAccessToken: function(authType) {
178 return cr.sendWithPromise('getAccessToken', authType); 139 return cr.sendWithPromise('getAccessToken', authType);
179 }, 140 },
180 141
181 /** 142 /**
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
307 var option = destination.isLocal ? color.getSelectedOption() : null; 268 var option = destination.isLocal ? color.getSelectedOption() : null;
308 var nativeColorModel = parseInt(option ? option.vendor_id : null, 10); 269 var nativeColorModel = parseInt(option ? option.vendor_id : null, 10);
309 if (isNaN(nativeColorModel)) { 270 if (isNaN(nativeColorModel)) {
310 return color.getValue() ? NativeLayer.ColorMode_.COLOR : 271 return color.getValue() ? NativeLayer.ColorMode_.COLOR :
311 NativeLayer.ColorMode_.GRAY; 272 NativeLayer.ColorMode_.GRAY;
312 } 273 }
313 return nativeColorModel; 274 return nativeColorModel;
314 }, 275 },
315 276
316 /** 277 /**
317 * Requests that a preview be generated. The following events may be 278 * Requests that a preview be generated. The following Web UI events may
318 * dispatched in response: 279 * be triggered in response:
319 * - PAGE_COUNT_READY 280 * 'print-preset-options',
320 * - PAGE_LAYOUT_READY 281 * 'page-count-ready',
321 * - PAGE_PREVIEW_READY 282 * 'page-layout-ready',
322 * - PREVIEW_GENERATION_DONE 283 * 'page-preview-ready'
323 * - PREVIEW_GENERATION_FAIL
324 * @param {!print_preview.Destination} destination Destination to print to. 284 * @param {!print_preview.Destination} destination Destination to print to.
325 * @param {!print_preview.PrintTicketStore} printTicketStore Used to get the 285 * @param {!print_preview.PrintTicketStore} printTicketStore Used to get the
326 * state of the print ticket. 286 * state of the print ticket.
327 * @param {!print_preview.DocumentInfo} documentInfo Document data model. 287 * @param {!print_preview.DocumentInfo} documentInfo Document data model.
328 * @param {boolean} generateDraft Tell the renderer to re-render. 288 * @param {boolean} generateDraft Tell the renderer to re-render.
329 * @param {number} requestId ID of the preview request. 289 * @param {number} requestId ID of the preview request.
330 * @return {!Promise<number>} Promise that resolves with the unique ID of 290 * @return {!Promise<number>} Promise that resolves with the unique ID of
331 * the preview UI when the preview has been generated. 291 * the preview UI when the preview has been generated.
332 */ 292 */
333 getPreview: function( 293 getPreview: function(
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after
519 /** Hide the print preview dialog and allow the native layer to close it. */ 479 /** Hide the print preview dialog and allow the native layer to close it. */
520 startHideDialog: function() { 480 startHideDialog: function() {
521 chrome.send('hidePreview'); 481 chrome.send('hidePreview');
522 }, 482 },
523 483
524 /** 484 /**
525 * Opens the Google Cloud Print sign-in tab. The DESTINATIONS_RELOAD event 485 * Opens the Google Cloud Print sign-in tab. The DESTINATIONS_RELOAD event
526 * will be dispatched in response. 486 * will be dispatched in response.
527 * @param {boolean} addAccount Whether to open an 'add a new account' or 487 * @param {boolean} addAccount Whether to open an 'add a new account' or
528 * default sign in page. 488 * default sign in page.
489 * @return {!Promise} Promise that resolves when the sign in tab has been
490 * closed and the destinations should be reloaded.
529 */ 491 */
530 startCloudPrintSignIn: function(addAccount) { 492 signIn: function(addAccount) {
531 chrome.send('signIn', [addAccount]); 493 return cr.sendWithPromise('signIn', addAccount);
532 }, 494 },
533 495
534 /** Navigates the user to the system printer settings interface. */ 496 /** Navigates the user to the system printer settings interface. */
535 startManageLocalDestinations: function() { 497 startManageLocalDestinations: function() {
536 chrome.send('manageLocalPrinters'); 498 chrome.send('manageLocalPrinters');
537 }, 499 },
538 500
539 /** 501 /**
540 * Navigates the user to the Google Cloud Print management page. 502 * Navigates the user to the Google Cloud Print management page.
541 * @param {?string} user Email address of the user to open the management 503 * @param {?string} user Email address of the user to open the management
542 * page for (user must be currently logged in, indeed) or {@code null} 504 * page for (user must be currently logged in, indeed) or {@code null}
543 * to open this page for the primary user. 505 * to open this page for the primary user.
544 */ 506 */
545 startManageCloudDestinations: function(user) { 507 startManageCloudDestinations: function(user) {
546 chrome.send('manageCloudPrinters', [user || '']); 508 chrome.send('manageCloudPrinters', [user || '']);
547 }, 509 },
548 510
549 /** Forces browser to open a new tab with the given URL address. */ 511 /** Forces browser to open a new tab with the given URL address. */
550 startForceOpenNewTab: function(url) { 512 startForceOpenNewTab: function(url) {
551 chrome.send('forceOpenNewTab', [url]); 513 chrome.send('forceOpenNewTab', [url]);
552 }, 514 },
553 515
554 /** Reloads the printer list. */
555 onReloadPrintersList_: function() {
556 cr.dispatchSimpleEvent(
557 this.eventTarget_, NativeLayer.EventType.DESTINATIONS_RELOAD);
558 },
559
560 /**
561 * @param {{contentWidth: number, contentHeight: number, marginLeft: number,
562 * marginRight: number, marginTop: number, marginBottom: number,
563 * printableAreaX: number, printableAreaY: number,
564 * printableAreaWidth: number, printableAreaHeight: number}}
565 * pageLayout Specifies default page layout details in points.
566 * @param {boolean} hasCustomPageSizeStyle Indicates whether the previewed
567 * document has a custom page size style.
568 * @private
569 */
570 onDidGetDefaultPageLayout_: function(pageLayout, hasCustomPageSizeStyle) {
571 var pageLayoutChangeEvent =
572 new Event(NativeLayer.EventType.PAGE_LAYOUT_READY);
573 pageLayoutChangeEvent.pageLayout = pageLayout;
574 pageLayoutChangeEvent.hasCustomPageSizeStyle = hasCustomPageSizeStyle;
575 this.eventTarget_.dispatchEvent(pageLayoutChangeEvent);
576 },
577
578 /**
579 * Update the page count and check the page range.
580 * Called from PrintPreviewUI::OnDidGetPreviewPageCount().
581 * @param {number} pageCount The number of pages.
582 * @param {number} previewResponseId The preview request id that resulted in
583 * this response.
584 * @param {number} fitToPageScaling The scaling percentage required to fit
585 * the document to page, rounded to the nearest integer.
586 * @private
587 */
588 onDidGetPreviewPageCount_: function(
589 pageCount, previewResponseId, fitToPageScaling) {
590 var pageCountChangeEvent =
591 new Event(NativeLayer.EventType.PAGE_COUNT_READY);
592 pageCountChangeEvent.pageCount = pageCount;
593 pageCountChangeEvent.previewResponseId = previewResponseId;
594 pageCountChangeEvent.fitToPageScaling = fitToPageScaling;
595 this.eventTarget_.dispatchEvent(pageCountChangeEvent);
596 },
597
598 /**
599 * Notification that a print preview page has been rendered.
600 * Check if the settings have changed and request a regeneration if needed.
601 * Called from PrintPreviewUI::OnDidPreviewPage().
602 * @param {number} pageNumber The page number, 0-based.
603 * @param {number} previewUid Preview unique identifier.
604 * @param {number} previewResponseId The preview request id that resulted in
605 * this response.
606 * @private
607 */
608 onDidPreviewPage_: function(pageNumber, previewUid, previewResponseId) {
609 var pagePreviewGenEvent =
610 new Event(NativeLayer.EventType.PAGE_PREVIEW_READY);
611 pagePreviewGenEvent.pageIndex = pageNumber;
612 pagePreviewGenEvent.previewUid = previewUid;
613 pagePreviewGenEvent.previewResponseId = previewResponseId;
614 this.eventTarget_.dispatchEvent(pagePreviewGenEvent);
615 },
616
617 /**
618 * Updates print preset options from source PDF document.
619 * Called from PrintPreviewUI::OnSetOptionsFromDocument().
620 * @param {{disableScaling: boolean, copies: number,
621 * duplex: number}} options Specifies
622 * printing options according to source document presets.
623 * @private
624 */
625 onPrintPresetOptionsFromDocument_: function(options) {
626 var printPresetOptionsEvent =
627 new Event(NativeLayer.EventType.PRINT_PRESET_OPTIONS);
628 printPresetOptionsEvent.optionsFromDocument = options;
629 this.eventTarget_.dispatchEvent(printPresetOptionsEvent);
630 },
631
632 /**
633 * Allows for onManipulateSettings to be called
634 * from the native layer.
635 * @private
636 */
637 onEnableManipulateSettingsForTest_: function() {
638 global.onManipulateSettingsForTest =
639 this.onManipulateSettingsForTest_.bind(this);
640 },
641
642 /**
643 * Dispatches an event to print_preview.js to change
644 * a particular setting for print preview.
645 * @param {!print_preview.PreviewSettings} settings Object containing the
646 * value to be changed and that value should be set to.
647 * @private
648 */
649 onManipulateSettingsForTest_: function(settings) {
650 var manipulateSettingsEvent =
651 new Event(NativeLayer.EventType.MANIPULATE_SETTINGS_FOR_TEST);
652 manipulateSettingsEvent.settings = settings;
653 this.eventTarget_.dispatchEvent(manipulateSettingsEvent);
654 },
655
656 /** 516 /**
657 * Sends a message to the test, letting it know that an 517 * Sends a message to the test, letting it know that an
658 * option has been set to a particular value and that the change has 518 * option has been set to a particular value and that the change has
659 * finished modifying the preview area. 519 * finished modifying the preview area.
660 */ 520 */
661 previewReadyForTest: function() { 521 previewReadyForTest: function() {
662 if (global.onManipulateSettingsForTest) 522 chrome.send('UILoadedForTest');
663 chrome.send('UILoadedForTest');
664 }, 523 },
665 524
666 /** 525 /**
667 * Notifies the test that the option it tried to change 526 * Notifies the test that the option it tried to change
668 * had not been changed successfully. 527 * had not been changed successfully.
669 */ 528 */
670 previewFailedForTest: function() { 529 previewFailedForTest: function() {
671 if (global.onManipulateSettingsForTest) 530 chrome.send('UIFailedLoadingForTest');
672 chrome.send('UIFailedLoadingForTest');
673 } 531 }
674 }; 532 };
675 533
676 /** 534 /**
677 * Initial settings retrieved from the native layer. 535 * Initial settings retrieved from the native layer.
678 * @param {boolean} isInKioskAutoPrintMode Whether the print preview should be 536 * @param {boolean} isInKioskAutoPrintMode Whether the print preview should be
679 * in auto-print mode. 537 * in auto-print mode.
680 * @param {boolean} isInAppKioskMode Whether the print preview is in App Kiosk 538 * @param {boolean} isInAppKioskMode Whether the print preview is in App Kiosk
681 * mode. 539 * mode.
682 * @param {string} thousandsDelimeter Character delimeter of thousands digits. 540 * @param {string} thousandsDelimeter Character delimeter of thousands digits.
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
845 return this.serializedDefaultDestinationSelectionRulesStr_; 703 return this.serializedDefaultDestinationSelectionRulesStr_;
846 } 704 }
847 }; 705 };
848 706
849 // Export 707 // Export
850 return { 708 return {
851 NativeInitialSettings: NativeInitialSettings, 709 NativeInitialSettings: NativeInitialSettings,
852 NativeLayer: NativeLayer 710 NativeLayer: NativeLayer
853 }; 711 };
854 }); 712 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698