OLD | NEW |
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.define('print_preview', function() { | 5 cr.define('print_preview', function() { |
6 'use strict'; | 6 'use strict'; |
7 | 7 |
8 /** | 8 /** |
9 * A data store that stores destinations and dispatches events when the data | 9 * A data store that stores destinations and dispatches events when the data |
10 * store changes. | 10 * store changes. |
11 * @param {!Array<!print_preview.Destination.Origin>} origins Match | |
12 * destinations from these origins. | |
13 * @param {RegExp} idRegExp Match destination's id. | |
14 * @param {RegExp} displayNameRegExp Match destination's displayName. | |
15 * @param {boolean} skipVirtualDestinations Whether to ignore virtual | |
16 * destinations, for example, Save as PDF. | |
17 * @constructor | |
18 */ | |
19 function DestinationMatch( | |
20 origins, idRegExp, displayNameRegExp, skipVirtualDestinations) { | |
21 | |
22 /** @private {!Array<!print_preview.Destination.Origin>} */ | |
23 this.origins_ = origins; | |
24 | |
25 /** @private {RegExp} */ | |
26 this.idRegExp_ = idRegExp; | |
27 | |
28 /** @private {RegExp} */ | |
29 this.displayNameRegExp_ = displayNameRegExp; | |
30 | |
31 /** @private {boolean} */ | |
32 this.skipVirtualDestinations_ = skipVirtualDestinations; | |
33 }; | |
34 | |
35 DestinationMatch.prototype = { | |
36 | |
37 /** | |
38 * @param {!print_preview.Destination.Origin} origin Origin to match. | |
39 * @return {boolean} Whether the origin is one of the {@code origins_}. | |
40 */ | |
41 matchOrigin: function(origin) { | |
42 return arrayContains(this.origins_, origin); | |
43 }, | |
44 | |
45 /** | |
46 * @param {string} id Id of the destination. | |
47 * @param {string} origin Origin of the destination. | |
48 * @return {boolean} Whether destination is the same as initial. | |
49 */ | |
50 matchIdAndOrigin: function(id, origin) { | |
51 return this.matchOrigin(origin) && | |
52 this.idRegExp_ && | |
53 this.idRegExp_.test(id); | |
54 }, | |
55 | |
56 /** | |
57 * @param {!print_preview.Destination} destination Destination to match. | |
58 * @return {boolean} Whether {@code destination} matches the last user | |
59 * selected one. | |
60 */ | |
61 match: function(destination) { | |
62 if (!this.matchOrigin(destination.origin)) { | |
63 return false; | |
64 } | |
65 if (this.idRegExp_ && !this.idRegExp_.test(destination.id)) { | |
66 return false; | |
67 } | |
68 if (this.displayNameRegExp_ && | |
69 !this.displayNameRegExp_.test(destination.displayName)) { | |
70 return false; | |
71 } | |
72 if (this.skipVirtualDestinations_ && | |
73 this.isVirtualDestination_(destination)) { | |
74 return false; | |
75 } | |
76 return true; | |
77 }, | |
78 | |
79 /** | |
80 * @param {!print_preview.Destination} destination Destination to check. | |
81 * @return {boolean} Whether {@code destination} is virtual, in terms of | |
82 * destination selection. | |
83 * @private | |
84 */ | |
85 isVirtualDestination_: function(destination) { | |
86 if (destination.origin == print_preview.Destination.Origin.LOCAL) { | |
87 return arrayContains( | |
88 [print_preview.Destination.GooglePromotedId.SAVE_AS_PDF], | |
89 destination.id); | |
90 } | |
91 return arrayContains( | |
92 [print_preview.Destination.GooglePromotedId.DOCS], | |
93 destination.id); | |
94 } | |
95 }; | |
96 | |
97 /** | |
98 * A data store that stores destinations and dispatches events when the data | |
99 * store changes. | |
100 * @param {!print_preview.NativeLayer} nativeLayer Used to fetch local print | 11 * @param {!print_preview.NativeLayer} nativeLayer Used to fetch local print |
101 * destinations. | 12 * destinations. |
102 * @param {!print_preview.UserInfo} userInfo User information repository. | 13 * @param {!print_preview.UserInfo} userInfo User information repository. |
103 * @param {!print_preview.AppState} appState Application state. | 14 * @param {!print_preview.AppState} appState Application state. |
104 * @constructor | 15 * @constructor |
105 * @extends {cr.EventTarget} | 16 * @extends {cr.EventTarget} |
106 */ | 17 */ |
107 function DestinationStore(nativeLayer, userInfo, appState) { | 18 function DestinationStore(nativeLayer, userInfo, appState) { |
108 cr.EventTarget.call(this); | 19 cr.EventTarget.call(this); |
109 | 20 |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
189 /** | 100 /** |
190 * Used to fetch cloud-based print destinations. | 101 * Used to fetch cloud-based print destinations. |
191 * @type {cloudprint.CloudPrintInterface} | 102 * @type {cloudprint.CloudPrintInterface} |
192 * @private | 103 * @private |
193 */ | 104 */ |
194 this.cloudPrintInterface_ = null; | 105 this.cloudPrintInterface_ = null; |
195 | 106 |
196 /** | 107 /** |
197 * Maps user account to the list of origins for which destinations are | 108 * Maps user account to the list of origins for which destinations are |
198 * already loaded. | 109 * already loaded. |
199 * @type {!Object<Array<print_preview.Destination.Origin>>} | 110 * @type {!Object<Array<print_preview.DestinationOrigin>>} |
200 * @private | 111 * @private |
201 */ | 112 */ |
202 this.loadedCloudOrigins_ = {}; | 113 this.loadedCloudOrigins_ = {}; |
203 | 114 |
204 /** | 115 /** |
205 * ID of a timeout after the initial destination ID is set. If no inserted | 116 * ID of a timeout after the initial destination ID is set. If no inserted |
206 * destination matches the initial destination ID after the specified | 117 * destination matches the initial destination ID after the specified |
207 * timeout, the first destination in the store will be automatically | 118 * timeout, the first destination in the store will be automatically |
208 * selected. | 119 * selected. |
209 * @type {?number} | 120 * @type {?number} |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
275 /** | 186 /** |
276 * MDNS service name of destination that we are waiting to register. | 187 * MDNS service name of destination that we are waiting to register. |
277 * @type {?string} | 188 * @type {?string} |
278 * @private | 189 * @private |
279 */ | 190 */ |
280 this.waitForRegisterDestination_ = null; | 191 this.waitForRegisterDestination_ = null; |
281 | 192 |
282 /** | 193 /** |
283 * Local destinations are CROS destinations on ChromeOS because they require | 194 * Local destinations are CROS destinations on ChromeOS because they require |
284 * extra setup. | 195 * extra setup. |
285 * @type {!print_preview.Destination.Origin} | 196 * @type {!print_preview.DestinationOrigin} |
286 * @private | 197 * @private |
287 */ | 198 */ |
288 this.platformOrigin_ = cr.isChromeOS ? | 199 this.platformOrigin_ = cr.isChromeOS ? |
289 print_preview.Destination.Origin.CROS : | 200 print_preview.DestinationOrigin.CROS : |
290 print_preview.Destination.Origin.LOCAL; | 201 print_preview.DestinationOrigin.LOCAL; |
291 | 202 |
292 this.addEventListeners_(); | 203 this.addEventListeners_(); |
293 this.reset_(); | 204 this.reset_(); |
294 }; | 205 } |
295 | 206 |
296 /** | 207 /** |
297 * Event types dispatched by the data store. | 208 * Event types dispatched by the data store. |
298 * @enum {string} | 209 * @enum {string} |
299 */ | 210 */ |
300 DestinationStore.EventType = { | 211 DestinationStore.EventType = { |
301 DESTINATION_SEARCH_DONE: | 212 DESTINATION_SEARCH_DONE: |
302 'print_preview.DestinationStore.DESTINATION_SEARCH_DONE', | 213 'print_preview.DestinationStore.DESTINATION_SEARCH_DONE', |
303 DESTINATION_SEARCH_STARTED: | 214 DESTINATION_SEARCH_STARTED: |
304 'print_preview.DestinationStore.DESTINATION_SEARCH_STARTED', | 215 'print_preview.DestinationStore.DESTINATION_SEARCH_STARTED', |
305 DESTINATION_SELECT: 'print_preview.DestinationStore.DESTINATION_SELECT', | 216 DESTINATION_SELECT: 'print_preview.DestinationStore.DESTINATION_SELECT', |
306 DESTINATIONS_INSERTED: | 217 DESTINATIONS_INSERTED: |
307 'print_preview.DestinationStore.DESTINATIONS_INSERTED', | 218 'print_preview.DestinationStore.DESTINATIONS_INSERTED', |
308 PROVISIONAL_DESTINATION_RESOLVED: | 219 PROVISIONAL_DESTINATION_RESOLVED: |
309 'print_preview.DestinationStore.PROVISIONAL_DESTINATION_RESOLVED', | 220 'print_preview.DestinationStore.PROVISIONAL_DESTINATION_RESOLVED', |
310 CACHED_SELECTED_DESTINATION_INFO_READY: | 221 CACHED_SELECTED_DESTINATION_INFO_READY: |
311 'print_preview.DestinationStore.CACHED_SELECTED_DESTINATION_INFO_READY', | 222 'print_preview.DestinationStore.CACHED_SELECTED_DESTINATION_INFO_READY', |
312 SELECTED_DESTINATION_CAPABILITIES_READY: | 223 SELECTED_DESTINATION_CAPABILITIES_READY: |
313 'print_preview.DestinationStore.SELECTED_DESTINATION_CAPABILITIES_READY'
, | 224 'print_preview.DestinationStore' + |
| 225 '.SELECTED_DESTINATION_CAPABILITIES_READY', |
314 }; | 226 }; |
315 | 227 |
316 /** | 228 /** |
317 * Delay in milliseconds before the destination store ignores the initial | 229 * Delay in milliseconds before the destination store ignores the initial |
318 * destination ID and just selects any printer (since the initial destination | 230 * destination ID and just selects any printer (since the initial destination |
319 * was not found). | 231 * was not found). |
320 * @private {number} | 232 * @private {number} |
321 * @const | 233 * @const |
322 */ | 234 */ |
323 DestinationStore.AUTO_SELECT_TIMEOUT_ = 15000; | 235 DestinationStore.AUTO_SELECT_TIMEOUT_ = 15000; |
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
506 'PRC_5': 'prc5 Envelope', | 418 'PRC_5': 'prc5 Envelope', |
507 'PRC_6': 'prc6 Envelope', | 419 'PRC_6': 'prc6 Envelope', |
508 'PRC_7': 'prc7 Envelope', | 420 'PRC_7': 'prc7 Envelope', |
509 'PRC_8': 'prc8 Envelope', | 421 'PRC_8': 'prc8 Envelope', |
510 'ROC_16K': 'ROC 16K', | 422 'ROC_16K': 'ROC 16K', |
511 'ROC_8K': 'ROC 8k', | 423 'ROC_8K': 'ROC 8k', |
512 }; | 424 }; |
513 | 425 |
514 /** | 426 /** |
515 * Localizes printer capabilities. | 427 * Localizes printer capabilities. |
516 * @param {!Object} capabilities Printer capabilities to localize. | 428 * @param {!print_preview.Cdd} capabilities Printer capabilities to localize. |
517 * @return {!Object} Localized capabilities. | 429 * @return {!print_preview.Cdd} Localized capabilities. |
518 * @private | 430 * @private |
519 */ | 431 */ |
520 DestinationStore.localizeCapabilities_ = function(capabilities) { | 432 DestinationStore.localizeCapabilities_ = function(capabilities) { |
521 if (!capabilities.printer) | 433 if (!capabilities.printer) |
522 return capabilities; | 434 return capabilities; |
523 | 435 |
524 var mediaSize = capabilities.printer.media_size; | 436 var mediaSize = capabilities.printer.media_size; |
525 if (!mediaSize) | 437 if (!mediaSize) |
526 return capabilities; | 438 return capabilities; |
527 | 439 |
528 for (var i = 0, media; media = mediaSize.option[i]; i++) { | 440 for (var i = 0, media; (media = mediaSize.option[i]); i++) { |
529 // No need to patch capabilities with localized names provided. | 441 // No need to patch capabilities with localized names provided. |
530 if (!media.custom_display_name_localized) { | 442 if (!media.custom_display_name_localized) { |
531 media.custom_display_name = | 443 media.custom_display_name = |
532 media.custom_display_name || | 444 media.custom_display_name || |
533 DestinationStore.MEDIA_DISPLAY_NAMES_[media.name] || | 445 DestinationStore.MEDIA_DISPLAY_NAMES_[media.name] || |
534 media.name; | 446 media.name; |
535 } | 447 } |
536 } | 448 } |
537 return capabilities; | 449 return capabilities; |
538 }; | 450 }; |
539 | 451 |
540 /** | 452 /** |
541 * Compare two media sizes by their names. | 453 * Compare two media sizes by their names. |
542 * @param {!Object} a Media to compare. | 454 * @param {!Object} a Media to compare. |
543 * @param {!Object} b Media to compare. | 455 * @param {!Object} b Media to compare. |
544 * @return {number} 1 if a > b, -1 if a < b, or 0 if a == b. | 456 * @return {number} 1 if a > b, -1 if a < b, or 0 if a == b. |
545 * @private | 457 * @private |
546 */ | 458 */ |
547 DestinationStore.compareMediaNames_ = function(a, b) { | 459 DestinationStore.compareMediaNames_ = function(a, b) { |
548 var nameA = a.custom_display_name_localized || a.custom_display_name; | 460 var nameA = a.custom_display_name_localized || a.custom_display_name; |
549 var nameB = b.custom_display_name_localized || b.custom_display_name; | 461 var nameB = b.custom_display_name_localized || b.custom_display_name; |
550 return nameA == nameB ? 0 : (nameA > nameB ? 1 : -1); | 462 return nameA == nameB ? 0 : (nameA > nameB ? 1 : -1); |
551 }; | 463 }; |
552 | 464 |
553 /** | 465 /** |
554 * Sort printer media sizes. | 466 * Sort printer media sizes. |
555 * @param {!Object} capabilities Printer capabilities to localize. | 467 * @param {!print_preview.Cdd} capabilities Printer capabilities to localize. |
556 * @return {!Object} Localized capabilities. | 468 * @return {!print_preview.Cdd} Localized capabilities. |
557 * @private | 469 * @private |
558 */ | 470 */ |
559 DestinationStore.sortMediaSizes_ = function(capabilities) { | 471 DestinationStore.sortMediaSizes_ = function(capabilities) { |
560 if (!capabilities.printer) | 472 if (!capabilities.printer) |
561 return capabilities; | 473 return capabilities; |
562 | 474 |
563 var mediaSize = capabilities.printer.media_size; | 475 var mediaSize = capabilities.printer.media_size; |
564 if (!mediaSize) | 476 if (!mediaSize) |
565 return capabilities; | 477 return capabilities; |
566 | 478 |
567 // For the standard sizes, separate into categories, as seen in the Cloud | 479 // For the standard sizes, separate into categories, as seen in the Cloud |
568 // Print CDD guide: | 480 // Print CDD guide: |
569 // - North American | 481 // - North American |
570 // - Chinese | 482 // - Chinese |
571 // - ISO | 483 // - ISO |
572 // - Japanese | 484 // - Japanese |
573 // - Other metric | 485 // - Other metric |
574 // Otherwise, assume they are custom sizes. | 486 // Otherwise, assume they are custom sizes. |
575 var categoryStandardNA = []; | 487 var categoryStandardNA = []; |
576 var categoryStandardCN = []; | 488 var categoryStandardCN = []; |
577 var categoryStandardISO = []; | 489 var categoryStandardISO = []; |
578 var categoryStandardJP = []; | 490 var categoryStandardJP = []; |
579 var categoryStandardMisc = []; | 491 var categoryStandardMisc = []; |
580 var categoryCustom = []; | 492 var categoryCustom = []; |
581 for (var i = 0, media; media = mediaSize.option[i]; i++) { | 493 for (var i = 0, media; (media = mediaSize.option[i]); i++) { |
582 var name = media.name || 'CUSTOM'; | 494 var name = media.name || 'CUSTOM'; |
583 var category; | 495 var category; |
584 if (name.startsWith('NA_')) { | 496 if (name.startsWith('NA_')) { |
585 category = categoryStandardNA; | 497 category = categoryStandardNA; |
586 } else if (name.startsWith('PRC_') || name.startsWith('ROC_') || | 498 } else if (name.startsWith('PRC_') || name.startsWith('ROC_') || |
587 name == 'OM_DAI_PA_KAI' || name == 'OM_JUURO_KU_KAI' || | 499 name == 'OM_DAI_PA_KAI' || name == 'OM_JUURO_KU_KAI' || |
588 name == 'OM_PA_KAI') { | 500 name == 'OM_PA_KAI') { |
589 category = categoryStandardCN; | 501 category = categoryStandardCN; |
590 } else if (name.startsWith('ISO_')) { | 502 } else if (name.startsWith('ISO_')) { |
591 category = categoryStandardISO; | 503 category = categoryStandardISO; |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
657 }, | 569 }, |
658 | 570 |
659 /** | 571 /** |
660 * @return {boolean} Whether a search for cloud destinations is in progress. | 572 * @return {boolean} Whether a search for cloud destinations is in progress. |
661 */ | 573 */ |
662 get isCloudDestinationSearchInProgress() { | 574 get isCloudDestinationSearchInProgress() { |
663 return !!this.cloudPrintInterface_ && | 575 return !!this.cloudPrintInterface_ && |
664 this.cloudPrintInterface_.isCloudDestinationSearchInProgress; | 576 this.cloudPrintInterface_.isCloudDestinationSearchInProgress; |
665 }, | 577 }, |
666 | 578 |
667 /* | 579 /** |
668 * Initializes the destination store. Sets the initially selected | 580 * Initializes the destination store. Sets the initially selected |
669 * destination. If any inserted destinations match this ID, that destination | 581 * destination. If any inserted destinations match this ID, that destination |
670 * will be automatically selected. This method must be called after the | 582 * will be automatically selected. This method must be called after the |
671 * print_preview.AppState has been initialized. | 583 * print_preview.AppState has been initialized. |
672 * @param {boolean} isInAppKioskMode Whether the print preview is in App | 584 * @param {boolean} isInAppKioskMode Whether the print preview is in App |
673 * Kiosk mode. | 585 * Kiosk mode. |
674 * @param {?string} systemDefaultDestinationId ID of the system default | 586 * @param {?string} systemDefaultDestinationId ID of the system default |
675 * destination. | 587 * destination. |
676 * @param {?string} serializedDefaultDestinationSelectionRulesStr Serialized | 588 * @param {?string} serializedDefaultDestinationSelectionRulesStr Serialized |
677 * default destination selection rules. | 589 * default destination selection rules. |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
739 name, | 651 name, |
740 capabilities, | 652 capabilities, |
741 extensionId, | 653 extensionId, |
742 extensionName); | 654 extensionName); |
743 } | 655 } |
744 } | 656 } |
745 } | 657 } |
746 if (foundDestination) return; | 658 if (foundDestination) return; |
747 | 659 |
748 // Try the system default | 660 // Try the system default |
749 id = this.systemDefaultDestinationId_; | 661 id = this.systemDefaultDestinationId_ || ''; |
750 origin = id == print_preview.Destination.GooglePromotedId.SAVE_AS_PDF ? | 662 origin = id == print_preview.Destination.GooglePromotedId.SAVE_AS_PDF ? |
751 print_preview.Destination.Origin.LOCAL : | 663 print_preview.DestinationOrigin.LOCAL : |
752 this.platformOrigin_; | 664 this.platformOrigin_; |
753 account = ''; | 665 account = ''; |
754 var candidate = | 666 var candidate = |
755 this.destinationMap_[this.getDestinationKey_(origin, id, account)]; | 667 this.destinationMap_[this.getDestinationKey_(origin, id, account)]; |
756 if (candidate != null) { | 668 if (candidate != null) { |
757 this.selectDestination(candidate); | 669 this.selectDestination(candidate); |
758 return; | 670 return; |
759 } | 671 } |
760 | 672 |
761 if (this.fetchPreselectedDestination_( | 673 if (this.fetchPreselectedDestination_( |
762 origin, | 674 origin, |
763 id, | 675 id, |
764 account, | 676 account, |
765 name, | 677 name, |
766 capabilities, | 678 capabilities, |
767 extensionId, | 679 extensionId, |
768 extensionName)) { | 680 extensionName)) { |
769 return; | 681 return; |
770 } | 682 } |
771 | 683 |
772 this.selectPdfDestination_(); | 684 this.selectPdfDestination_(); |
773 }, | 685 }, |
774 | 686 |
775 /** | 687 /** |
776 * Attempts to fetch capabilities of the destination identified by the | 688 * Attempts to fetch capabilities of the destination identified by the |
777 * provided origin, id and account. | 689 * provided origin, id and account. |
778 * @param {!print_preview.Destination.Origin} origin Destination origin. | 690 * @param {string | print_preview.DestinationOrigin} origin Destination |
| 691 * origin. |
779 * @param {string} id Destination id. | 692 * @param {string} id Destination id. |
780 * @param {string} account User account destination is registered for. | 693 * @param {string} account User account destination is registered for. |
781 * @param {string} name Destination display name. | 694 * @param {string} name Destination display name. |
782 * @param {?print_preview.Cdd} capabilities Destination capabilities. | 695 * @param {?print_preview.Cdd} capabilities Destination capabilities. |
783 * @param {string} extensionId Extension ID associated with this | 696 * @param {string} extensionId Extension ID associated with this |
784 * destination. | 697 * destination. |
785 * @param {string} extensionName Extension name associated with this | 698 * @param {string} extensionName Extension name associated with this |
786 * destination. | 699 * destination. |
787 * @private | 700 * @private |
788 */ | 701 */ |
789 fetchPreselectedDestination_: function( | 702 fetchPreselectedDestination_: function( |
790 origin, id, account, name, capabilities, extensionId, extensionName) { | 703 origin, id, account, name, capabilities, extensionId, extensionName) { |
791 this.autoSelectMatchingDestination_ = | 704 this.autoSelectMatchingDestination_ = |
792 this.createExactDestinationMatch_(origin, id); | 705 this.createExactDestinationMatch_(origin, id); |
793 | 706 |
794 if (origin == print_preview.Destination.Origin.LOCAL || | 707 if (origin == print_preview.DestinationOrigin.LOCAL || |
795 origin == print_preview.Destination.Origin.CROS) { | 708 origin == print_preview.DestinationOrigin.CROS) { |
796 this.nativeLayer_.startGetLocalDestinationCapabilities(id); | 709 this.nativeLayer_.startGetLocalDestinationCapabilities(id); |
797 return true; | 710 return true; |
798 } | 711 } |
799 | 712 |
800 if (this.cloudPrintInterface_ && | 713 if (this.cloudPrintInterface_ && |
801 (origin == print_preview.Destination.Origin.COOKIES || | 714 (origin == print_preview.DestinationOrigin.COOKIES || |
802 origin == print_preview.Destination.Origin.DEVICE)) { | 715 origin == print_preview.DestinationOrigin.DEVICE)) { |
803 this.cloudPrintInterface_.printer(id, origin, account); | 716 this.cloudPrintInterface_.printer( |
| 717 id, |
| 718 /** @type {print_preview.DestinationOrigin} */(origin), |
| 719 account); |
804 return true; | 720 return true; |
805 } | 721 } |
806 | 722 |
807 if (origin == print_preview.Destination.Origin.PRIVET) { | 723 if (origin == print_preview.DestinationOrigin.PRIVET) { |
808 // TODO(noamsml): Resolve a specific printer instead of listing all | 724 // TODO(noamsml): Resolve a specific printer instead of listing all |
809 // privet printers in this case. | 725 // privet printers in this case. |
810 this.nativeLayer_.startGetPrivetDestinations(); | 726 this.nativeLayer_.startGetPrivetDestinations(); |
811 | 727 |
812 // Create a fake selectedDestination_ that is not actually in the | 728 // Create a fake selectedDestination_ that is not actually in the |
813 // destination store. When the real destination is created, this | 729 // destination store. When the real destination is created, this |
814 // destination will be overwritten. | 730 // destination will be overwritten. |
815 this.selectedDestination_ = new print_preview.Destination( | 731 this.selectedDestination_ = new print_preview.Destination( |
816 id, | 732 id, |
817 print_preview.Destination.Type.LOCAL, | 733 print_preview.DestinationType.LOCAL, |
818 print_preview.Destination.Origin.PRIVET, | 734 print_preview.DestinationOrigin.PRIVET, |
819 name, | 735 name, |
820 false /*isRecent*/, | 736 false /*isRecent*/, |
821 print_preview.Destination.ConnectionStatus.ONLINE); | 737 print_preview.DestinationConnectionStatus.ONLINE); |
822 this.selectedDestination_.capabilities = capabilities; | 738 this.selectedDestination_.capabilities = capabilities; |
823 | 739 |
824 cr.dispatchSimpleEvent( | 740 cr.dispatchSimpleEvent( |
825 this, | 741 this, |
826 DestinationStore.EventType.CACHED_SELECTED_DESTINATION_INFO_READY); | 742 DestinationStore.EventType.CACHED_SELECTED_DESTINATION_INFO_READY); |
827 return true; | 743 return true; |
828 } | 744 } |
829 | 745 |
830 if (origin == print_preview.Destination.Origin.EXTENSION) { | 746 if (origin == print_preview.DestinationOrigin.EXTENSION) { |
831 // TODO(tbarzic): Add support for requesting a single extension's | 747 // TODO(tbarzic): Add support for requesting a single extension's |
832 // printer list. | 748 // printer list. |
833 this.startLoadExtensionDestinations(); | 749 this.startLoadExtensionDestinations(); |
834 | 750 |
835 this.selectedDestination_ = | 751 this.selectedDestination_ = |
836 print_preview.ExtensionDestinationParser.parse({ | 752 print_preview.ExtensionDestinationParser.parse({ |
837 extensionId: extensionId, | 753 extensionId: extensionId, |
838 extensionName: extensionName, | 754 extensionName: extensionName, |
839 id: id, | 755 id: id, |
840 name: name | 756 name: name |
(...skipping 15 matching lines...) Expand all Loading... |
856 | 772 |
857 /** | 773 /** |
858 * Attempts to find a destination matching the provided rules. | 774 * Attempts to find a destination matching the provided rules. |
859 * @param {!print_preview.DestinationMatch} destinationMatch Rules to match. | 775 * @param {!print_preview.DestinationMatch} destinationMatch Rules to match. |
860 * @private | 776 * @private |
861 */ | 777 */ |
862 fetchMatchingDestination_: function(destinationMatch) { | 778 fetchMatchingDestination_: function(destinationMatch) { |
863 this.autoSelectMatchingDestination_ = destinationMatch; | 779 this.autoSelectMatchingDestination_ = destinationMatch; |
864 | 780 |
865 if (destinationMatch.matchOrigin( | 781 if (destinationMatch.matchOrigin( |
866 print_preview.Destination.Origin.LOCAL) || | 782 print_preview.DestinationOrigin.LOCAL) || |
867 destinationMatch.matchOrigin( | 783 destinationMatch.matchOrigin( |
868 print_preview.Destination.Origin.CROS)) { | 784 print_preview.DestinationOrigin.CROS)) { |
869 this.startLoadLocalDestinations(); | 785 this.startLoadLocalDestinations(); |
870 } | 786 } |
871 if (destinationMatch.matchOrigin( | 787 if (destinationMatch.matchOrigin( |
872 print_preview.Destination.Origin.PRIVET)) { | 788 print_preview.DestinationOrigin.PRIVET)) { |
873 this.startLoadPrivetDestinations(); | 789 this.startLoadPrivetDestinations(); |
874 } | 790 } |
875 if (destinationMatch.matchOrigin( | 791 if (destinationMatch.matchOrigin( |
876 print_preview.Destination.Origin.EXTENSION)) { | 792 print_preview.DestinationOrigin.EXTENSION)) { |
877 this.startLoadExtensionDestinations(); | 793 this.startLoadExtensionDestinations(); |
878 } | 794 } |
879 if (destinationMatch.matchOrigin( | 795 if (destinationMatch.matchOrigin( |
880 print_preview.Destination.Origin.COOKIES) || | 796 print_preview.DestinationOrigin.COOKIES) || |
881 destinationMatch.matchOrigin( | 797 destinationMatch.matchOrigin( |
882 print_preview.Destination.Origin.DEVICE) || | 798 print_preview.DestinationOrigin.DEVICE) || |
883 destinationMatch.matchOrigin( | 799 destinationMatch.matchOrigin( |
884 print_preview.Destination.Origin.PROFILE)) { | 800 print_preview.DestinationOrigin.PROFILE)) { |
885 this.startLoadCloudDestinations(); | 801 this.startLoadCloudDestinations(); |
886 } | 802 } |
887 }, | 803 }, |
888 | 804 |
889 /** | 805 /** |
890 * @param {?string} serializedDefaultDestinationSelectionRulesStr Serialized | 806 * @param {?string} serializedDefaultDestinationSelectionRulesStr Serialized |
891 * default destination selection rules. | 807 * default destination selection rules. |
892 * @return {!print_preview.DestinationMatch} Creates rules matching | 808 * @return {?print_preview.DestinationMatch} Creates rules matching |
893 * previously selected destination. | 809 * previously selected destination. |
894 * @private | 810 * @private |
895 */ | 811 */ |
896 convertToDestinationMatch_: function( | 812 convertToDestinationMatch_: function( |
897 serializedDefaultDestinationSelectionRulesStr) { | 813 serializedDefaultDestinationSelectionRulesStr) { |
898 var matchRules = null; | 814 var matchRules = null; |
899 try { | 815 try { |
900 if (serializedDefaultDestinationSelectionRulesStr) { | 816 if (serializedDefaultDestinationSelectionRulesStr) { |
901 matchRules = | 817 matchRules = |
902 JSON.parse(serializedDefaultDestinationSelectionRulesStr); | 818 JSON.parse(serializedDefaultDestinationSelectionRulesStr); |
903 } | 819 } |
904 } catch(e) { | 820 } catch(e) { |
905 console.error( | 821 console.error( |
906 'Failed to parse defaultDestinationSelectionRules: ' + e); | 822 'Failed to parse defaultDestinationSelectionRules: ' + e); |
907 } | 823 } |
908 if (!matchRules) | 824 if (!matchRules) |
909 return; | 825 return null; |
910 | 826 |
911 var isLocal = !matchRules.kind || matchRules.kind == 'local'; | 827 var isLocal = !matchRules.kind || matchRules.kind == 'local'; |
912 var isCloud = !matchRules.kind || matchRules.kind == 'cloud'; | 828 var isCloud = !matchRules.kind || matchRules.kind == 'cloud'; |
913 if (!isLocal && !isCloud) { | 829 if (!isLocal && !isCloud) { |
914 console.error('Unsupported type: "' + matchRules.kind + '"'); | 830 console.error('Unsupported type: "' + matchRules.kind + '"'); |
915 return null; | 831 return null; |
916 } | 832 } |
917 | 833 |
918 var origins = []; | 834 var origins = []; |
919 if (isLocal) { | 835 if (isLocal) { |
920 origins.push(print_preview.Destination.Origin.LOCAL); | 836 origins.push(print_preview.DestinationOrigin.LOCAL); |
921 origins.push(print_preview.Destination.Origin.PRIVET); | 837 origins.push(print_preview.DestinationOrigin.PRIVET); |
922 origins.push(print_preview.Destination.Origin.EXTENSION); | 838 origins.push(print_preview.DestinationOrigin.EXTENSION); |
923 origins.push(print_preview.Destination.Origin.CROS); | 839 origins.push(print_preview.DestinationOrigin.CROS); |
924 } | 840 } |
925 if (isCloud) { | 841 if (isCloud) { |
926 origins.push(print_preview.Destination.Origin.COOKIES); | 842 origins.push(print_preview.DestinationOrigin.COOKIES); |
927 origins.push(print_preview.Destination.Origin.DEVICE); | 843 origins.push(print_preview.DestinationOrigin.DEVICE); |
928 origins.push(print_preview.Destination.Origin.PROFILE); | 844 origins.push(print_preview.DestinationOrigin.PROFILE); |
929 } | 845 } |
930 | 846 |
931 var idRegExp = null; | 847 var idRegExp = null; |
932 try { | 848 try { |
933 if (matchRules.idPattern) { | 849 if (matchRules.idPattern) { |
934 idRegExp = new RegExp(matchRules.idPattern || '.*'); | 850 idRegExp = new RegExp(matchRules.idPattern || '.*'); |
935 } | 851 } |
936 } catch (e) { | 852 } catch (e) { |
937 console.error('Failed to parse regexp for "id": ' + e); | 853 console.error('Failed to parse regexp for "id": ' + e); |
938 } | 854 } |
939 | 855 |
940 var displayNameRegExp = null; | 856 var displayNameRegExp = null; |
941 try { | 857 try { |
942 if (matchRules.namePattern) { | 858 if (matchRules.namePattern) { |
943 displayNameRegExp = new RegExp(matchRules.namePattern || '.*'); | 859 displayNameRegExp = new RegExp(matchRules.namePattern || '.*'); |
944 } | 860 } |
945 } catch (e) { | 861 } catch (e) { |
946 console.error('Failed to parse regexp for "name": ' + e); | 862 console.error('Failed to parse regexp for "name": ' + e); |
947 } | 863 } |
948 | 864 |
949 return new DestinationMatch( | 865 return new print_preview.DestinationMatch( |
950 origins, | 866 origins, |
951 idRegExp, | 867 idRegExp, |
952 displayNameRegExp, | 868 displayNameRegExp, |
953 true /*skipVirtualDestinations*/); | 869 true /*skipVirtualDestinations*/); |
954 }, | 870 }, |
955 | 871 |
956 /** | 872 /** |
957 * @return {print_preview.DestinationMatch} Creates rules matching | 873 * @return {print_preview.DestinationMatch} Creates rules matching |
958 * previously selected destination. | 874 * previously selected destination. |
959 * @private | 875 * @private |
960 */ | 876 */ |
961 convertPreselectedToDestinationMatch_: function() { | 877 convertPreselectedToDestinationMatch_: function() { |
962 if (this.appState_.isSelectedDestinationValid()) { | 878 if (this.appState_.isSelectedDestinationValid()) { |
963 return this.createExactDestinationMatch_( | 879 return this.createExactDestinationMatch_( |
964 this.appState_.selectedDestination.origin, | 880 this.appState_.selectedDestination.origin, |
965 this.appState_.selectedDestination.id); | 881 this.appState_.selectedDestination.id); |
966 } | 882 } |
967 if (this.systemDefaultDestinationId_) { | 883 if (this.systemDefaultDestinationId_) { |
968 return this.createExactDestinationMatch_( | 884 return this.createExactDestinationMatch_( |
969 this.platformOrigin_, | 885 this.platformOrigin_, |
970 this.systemDefaultDestinationId_); | 886 this.systemDefaultDestinationId_); |
971 } | 887 } |
972 return null; | 888 return null; |
973 }, | 889 }, |
974 | 890 |
975 /** | 891 /** |
976 * @param {!print_preview.Destination.Origin} origin Destination origin. | 892 * @param {string | print_preview.DestinationOrigin} origin Destination |
| 893 * origin. |
977 * @param {string} id Destination id. | 894 * @param {string} id Destination id. |
978 * @return {!print_preview.DestinationMatch} Creates rules matching | 895 * @return {!print_preview.DestinationMatch} Creates rules matching |
979 * provided destination. | 896 * provided destination. |
980 * @private | 897 * @private |
981 */ | 898 */ |
982 createExactDestinationMatch_: function(origin, id) { | 899 createExactDestinationMatch_: function(origin, id) { |
983 return new DestinationMatch( | 900 return new print_preview.DestinationMatch( |
984 [origin], | 901 [origin], |
985 new RegExp('^' + id.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') + '$'), | 902 new RegExp('^' + id.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') + '$'), |
986 null /*displayNameRegExp*/, | 903 null /*displayNameRegExp*/, |
987 false /*skipVirtualDestinations*/); | 904 false /*skipVirtualDestinations*/); |
988 }, | 905 }, |
989 | 906 |
990 /** | 907 /** |
991 * Sets the destination store's Google Cloud Print interface. | 908 * Sets the destination store's Google Cloud Print interface. |
992 * @param {!cloudprint.CloudPrintInterface} cloudPrintInterface Interface | 909 * @param {!cloudprint.CloudPrintInterface} cloudPrintInterface Interface |
993 * to set. | 910 * to set. |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1094 } | 1011 } |
1095 }, | 1012 }, |
1096 | 1013 |
1097 /** | 1014 /** |
1098 * Attempt to resolve the capabilities for a Chrome OS printer. | 1015 * Attempt to resolve the capabilities for a Chrome OS printer. |
1099 * @param {!print_preview.Destination} destination The destination which | 1016 * @param {!print_preview.Destination} destination The destination which |
1100 * requires resolution. | 1017 * requires resolution. |
1101 * @return {!Promise<!print_preview.PrinterSetupResponse>} | 1018 * @return {!Promise<!print_preview.PrinterSetupResponse>} |
1102 */ | 1019 */ |
1103 resolveCrosDestination: function(destination) { | 1020 resolveCrosDestination: function(destination) { |
1104 assert(destination.origin == print_preview.Destination.Origin.CROS); | 1021 assert(destination.origin == print_preview.DestinationOrigin.CROS); |
1105 return this.nativeLayer_.setupPrinter(destination.id); | 1022 return this.nativeLayer_.setupPrinter(destination.id); |
1106 }, | 1023 }, |
1107 | 1024 |
1108 /** | 1025 /** |
1109 * Attempts to resolve a provisional destination. | 1026 * Attempts to resolve a provisional destination. |
1110 * @param {!print_preview.Destination} destinaion Provisional destination | 1027 * @param {!print_preview.Destination} destination Provisional destination |
1111 * that should be resolved. | 1028 * that should be resolved. |
1112 */ | 1029 */ |
1113 resolveProvisionalDestination: function(destination) { | 1030 resolveProvisionalDestination: function(destination) { |
1114 assert( | 1031 assert( |
1115 destination.provisionalType == | 1032 destination.provisionalType == |
1116 print_preview.Destination.ProvisionalType.NEEDS_USB_PERMISSION, | 1033 print_preview.DestinationProvisionalType.NEEDS_USB_PERMISSION, |
1117 'Provisional type cannot be resolved.'); | 1034 'Provisional type cannot be resolved.'); |
1118 this.nativeLayer_.grantExtensionPrinterAccess(destination.id); | 1035 this.nativeLayer_.grantExtensionPrinterAccess(destination.id); |
1119 }, | 1036 }, |
1120 | 1037 |
1121 /** | 1038 /** |
1122 * Selects 'Save to PDF' destination (since it always exists). | 1039 * Selects 'Save to PDF' destination (since it always exists). |
1123 * @private | 1040 * @private |
1124 */ | 1041 */ |
1125 selectPdfDestination_: function() { | 1042 selectPdfDestination_: function() { |
1126 var saveToPdfKey = this.getDestinationKey_( | 1043 var saveToPdfKey = this.getDestinationKey_( |
1127 print_preview.Destination.Origin.LOCAL, | 1044 print_preview.DestinationOrigin.LOCAL, |
1128 print_preview.Destination.GooglePromotedId.SAVE_AS_PDF, | 1045 print_preview.Destination.GooglePromotedId.SAVE_AS_PDF, |
1129 ''); | 1046 ''); |
1130 this.selectDestination( | 1047 this.selectDestination( |
1131 this.destinationMap_[saveToPdfKey] || this.destinations_[0] || null); | 1048 this.destinationMap_[saveToPdfKey] || this.destinations_[0] || null); |
1132 }, | 1049 }, |
1133 | 1050 |
1134 /** | 1051 /** |
1135 * Attempts to select system default destination with a fallback to | 1052 * Attempts to select system default destination with a fallback to |
1136 * 'Save to PDF' destination. | 1053 * 'Save to PDF' destination. |
1137 * @private | 1054 * @private |
1138 */ | 1055 */ |
1139 selectDefaultDestination_: function() { | 1056 selectDefaultDestination_: function() { |
1140 if (this.systemDefaultDestinationId_) { | 1057 if (this.systemDefaultDestinationId_) { |
1141 if (this.autoSelectMatchingDestination_ && | 1058 if (this.autoSelectMatchingDestination_ && |
1142 !this.autoSelectMatchingDestination_.matchIdAndOrigin( | 1059 !this.autoSelectMatchingDestination_.matchIdAndOrigin( |
1143 this.systemDefaultDestinationId_, | 1060 this.systemDefaultDestinationId_, |
1144 this.plaformOrigin_)) { | 1061 this.platformOrigin_)) { |
1145 if (this.fetchPreselectedDestination_( | 1062 if (this.fetchPreselectedDestination_( |
1146 this.platformOrigin_, | 1063 this.platformOrigin_, |
1147 this.systemDefaultDestinationId_, | 1064 this.systemDefaultDestinationId_, |
1148 '' /*account*/, | 1065 '' /*account*/, |
1149 '' /*name*/, | 1066 '' /*name*/, |
1150 null /*capabilities*/, | 1067 null /*capabilities*/, |
1151 '' /*extensionId*/, | 1068 '' /*extensionId*/, |
1152 '' /*extensionName*/)) { | 1069 '' /*extensionName*/)) { |
1153 return; | 1070 return; |
1154 } | 1071 } |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1195 this.nativeLayer_.startGetExtensionDestinations(); | 1112 this.nativeLayer_.startGetExtensionDestinations(); |
1196 cr.dispatchSimpleEvent( | 1113 cr.dispatchSimpleEvent( |
1197 this, DestinationStore.EventType.DESTINATION_SEARCH_STARTED); | 1114 this, DestinationStore.EventType.DESTINATION_SEARCH_STARTED); |
1198 this.extensionSearchTimeout_ = setTimeout( | 1115 this.extensionSearchTimeout_ = setTimeout( |
1199 this.endExtensionPrinterSearch_.bind(this), | 1116 this.endExtensionPrinterSearch_.bind(this), |
1200 DestinationStore.EXTENSION_SEARCH_DURATION_); | 1117 DestinationStore.EXTENSION_SEARCH_DURATION_); |
1201 }, | 1118 }, |
1202 | 1119 |
1203 /** | 1120 /** |
1204 * Initiates loading of cloud destinations. | 1121 * Initiates loading of cloud destinations. |
1205 * @param {print_preview.Destination.Origin=} opt_origin Search destinations | 1122 * @param {print_preview.DestinationOrigin=} opt_origin Search destinations |
1206 * for the specified origin only. | 1123 * for the specified origin only. |
1207 */ | 1124 */ |
1208 startLoadCloudDestinations: function(opt_origin) { | 1125 startLoadCloudDestinations: function(opt_origin) { |
1209 if (this.cloudPrintInterface_ != null) { | 1126 if (this.cloudPrintInterface_ != null) { |
1210 var origins = this.loadedCloudOrigins_[this.userInfo_.activeUser] || []; | 1127 var origins = this.loadedCloudOrigins_[this.userInfo_.activeUser] || []; |
1211 if (origins.length == 0 || | 1128 if (origins.length == 0 || |
1212 (opt_origin && origins.indexOf(opt_origin) < 0)) { | 1129 (opt_origin && origins.indexOf(opt_origin) < 0)) { |
1213 this.cloudPrintInterface_.search( | 1130 this.cloudPrintInterface_.search( |
1214 this.userInfo_.activeUser, opt_origin); | 1131 this.userInfo_.activeUser || '', opt_origin); |
1215 cr.dispatchSimpleEvent( | 1132 cr.dispatchSimpleEvent( |
1216 this, DestinationStore.EventType.DESTINATION_SEARCH_STARTED); | 1133 this, DestinationStore.EventType.DESTINATION_SEARCH_STARTED); |
1217 } | 1134 } |
1218 } | 1135 } |
1219 }, | 1136 }, |
1220 | 1137 |
1221 /** Requests load of COOKIE based cloud destinations. */ | 1138 /** Requests load of COOKIE based cloud destinations. */ |
1222 reloadUserCookieBasedDestinations: function() { | 1139 reloadUserCookieBasedDestinations: function() { |
1223 var origins = this.loadedCloudOrigins_[this.userInfo_.activeUser] || []; | 1140 var origins = this.loadedCloudOrigins_[this.userInfo_.activeUser] || []; |
1224 if (origins.indexOf(print_preview.Destination.Origin.COOKIES) >= 0) { | 1141 if (origins.indexOf(print_preview.DestinationOrigin.COOKIES) >= 0) { |
1225 cr.dispatchSimpleEvent( | 1142 cr.dispatchSimpleEvent( |
1226 this, DestinationStore.EventType.DESTINATION_SEARCH_DONE); | 1143 this, DestinationStore.EventType.DESTINATION_SEARCH_DONE); |
1227 } else { | 1144 } else { |
1228 this.startLoadCloudDestinations( | 1145 this.startLoadCloudDestinations( |
1229 print_preview.Destination.Origin.COOKIES); | 1146 print_preview.DestinationOrigin.COOKIES); |
1230 } | 1147 } |
1231 }, | 1148 }, |
1232 | 1149 |
1233 /** Initiates loading of all known destination types. */ | 1150 /** Initiates loading of all known destination types. */ |
1234 startLoadAllDestinations: function() { | 1151 startLoadAllDestinations: function() { |
1235 this.startLoadCloudDestinations(); | 1152 this.startLoadCloudDestinations(); |
1236 this.startLoadLocalDestinations(); | 1153 this.startLoadLocalDestinations(); |
1237 this.startLoadPrivetDestinations(); | 1154 this.startLoadPrivetDestinations(); |
1238 this.startLoadExtensionDestinations(); | 1155 this.startLoadExtensionDestinations(); |
1239 }, | 1156 }, |
(...skipping 10 matching lines...) Expand all Loading... |
1250 * Event handler for {@code | 1167 * Event handler for {@code |
1251 * print_preview.NativeLayer.EventType.PROVISIONAL_DESTINATION_RESOLVED}. | 1168 * print_preview.NativeLayer.EventType.PROVISIONAL_DESTINATION_RESOLVED}. |
1252 * Currently assumes the provisional destination is an extension | 1169 * Currently assumes the provisional destination is an extension |
1253 * destination. | 1170 * destination. |
1254 * Called when a provisional destination resolvement attempt finishes. | 1171 * Called when a provisional destination resolvement attempt finishes. |
1255 * The provisional destination is removed from the store and replaced with | 1172 * The provisional destination is removed from the store and replaced with |
1256 * a destination created from the resolved destination properties, if any | 1173 * a destination created from the resolved destination properties, if any |
1257 * are reported. | 1174 * are reported. |
1258 * Emits {@code DestinationStore.EventType.PROVISIONAL_DESTINATION_RESOLVED} | 1175 * Emits {@code DestinationStore.EventType.PROVISIONAL_DESTINATION_RESOLVED} |
1259 * event. | 1176 * event. |
1260 * @param {!Event} The event containing the provisional destination ID and | 1177 * @param {!Event} evt The event containing the provisional destination ID |
1261 * resolved destination description. If the destination was not | 1178 * and resolved destination description. If the destination was not |
1262 * successfully resolved, the description will not be set. | 1179 * successfully resolved, the description will not be set. |
1263 * @private | 1180 * @private |
1264 */ | 1181 */ |
1265 handleProvisionalDestinationResolved_: function(evt) { | 1182 handleProvisionalDestinationResolved_: function(evt) { |
1266 var provisionalDestinationIndex = -1; | 1183 var provisionalDestinationIndex = -1; |
1267 var provisionalDestination = null; | 1184 var provisionalDestination = null; |
1268 for (var i = 0; i < this.destinations_.length; ++i) { | 1185 for (var i = 0; i < this.destinations_.length; ++i) { |
1269 if (evt.provisionalId == this.destinations_[i].id) { | 1186 if (evt.provisionalId == this.destinations_[i].id) { |
1270 provisionalDestinationIndex = i; | 1187 provisionalDestinationIndex = i; |
1271 provisionalDestination = this.destinations_[i]; | 1188 provisionalDestination = this.destinations_[i]; |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1349 | 1266 |
1350 /** | 1267 /** |
1351 * Updates an existing print destination with capabilities and display name | 1268 * Updates an existing print destination with capabilities and display name |
1352 * information. If the destination doesn't already exist, it will be added. | 1269 * information. If the destination doesn't already exist, it will be added. |
1353 * @param {!print_preview.Destination} destination Destination to update. | 1270 * @param {!print_preview.Destination} destination Destination to update. |
1354 * @private | 1271 * @private |
1355 */ | 1272 */ |
1356 updateDestination_: function(destination) { | 1273 updateDestination_: function(destination) { |
1357 assert(destination.constructor !== Array, 'Single printer expected'); | 1274 assert(destination.constructor !== Array, 'Single printer expected'); |
1358 destination.capabilities_ = DestinationStore.localizeCapabilities_( | 1275 destination.capabilities_ = DestinationStore.localizeCapabilities_( |
1359 destination.capabilities_); | 1276 assert(destination.capabilities_)); |
1360 destination.capabilities_ = DestinationStore.sortMediaSizes_( | 1277 destination.capabilities_ = DestinationStore.sortMediaSizes_( |
1361 destination.capabilities_); | 1278 destination.capabilities_); |
1362 var existingDestination = this.destinationMap_[this.getKey_(destination)]; | 1279 var existingDestination = this.destinationMap_[this.getKey_(destination)]; |
1363 if (existingDestination != null) { | 1280 if (existingDestination != null) { |
1364 existingDestination.capabilities = destination.capabilities; | 1281 existingDestination.capabilities = destination.capabilities; |
1365 } else { | 1282 } else { |
1366 this.insertDestination_(destination); | 1283 this.insertDestination_(destination); |
1367 } | 1284 } |
1368 | 1285 |
1369 if (this.selectedDestination_ && | 1286 if (this.selectedDestination_ && |
(...skipping 24 matching lines...) Expand all Loading... |
1394 */ | 1311 */ |
1395 endExtensionPrinterSearch_: function() { | 1312 endExtensionPrinterSearch_: function() { |
1396 this.isExtensionDestinationSearchInProgress_ = false; | 1313 this.isExtensionDestinationSearchInProgress_ = false; |
1397 this.hasLoadedAllExtensionDestinations_ = true; | 1314 this.hasLoadedAllExtensionDestinations_ = true; |
1398 cr.dispatchSimpleEvent( | 1315 cr.dispatchSimpleEvent( |
1399 this, DestinationStore.EventType.DESTINATION_SEARCH_DONE); | 1316 this, DestinationStore.EventType.DESTINATION_SEARCH_DONE); |
1400 // Clear initially selected (cached) extension destination if it hasn't | 1317 // Clear initially selected (cached) extension destination if it hasn't |
1401 // been found among reported extension destinations. | 1318 // been found among reported extension destinations. |
1402 if (this.autoSelectMatchingDestination_ && | 1319 if (this.autoSelectMatchingDestination_ && |
1403 this.autoSelectMatchingDestination_.matchOrigin( | 1320 this.autoSelectMatchingDestination_.matchOrigin( |
1404 print_preview.Destination.Origin.EXTENSION) && | 1321 print_preview.DestinationOrigin.EXTENSION) && |
1405 this.selectedDestination_ && | 1322 this.selectedDestination_ && |
1406 this.selectedDestination_.isExtension) { | 1323 this.selectedDestination_.isExtension) { |
1407 this.selectDefaultDestination_(); | 1324 this.selectDefaultDestination_(); |
1408 } | 1325 } |
1409 }, | 1326 }, |
1410 | 1327 |
1411 /** | 1328 /** |
1412 * Inserts a destination into the store without dispatching any events. | 1329 * Inserts a destination into the store without dispatching any events. |
1413 * @return {boolean} Whether the inserted destination was not already in the | 1330 * @return {boolean} Whether the inserted destination was not already in the |
1414 * store. | 1331 * store. |
1415 * @private | 1332 * @private |
1416 */ | 1333 */ |
1417 insertIntoStore_: function(destination) { | 1334 insertIntoStore_: function(destination) { |
1418 var key = this.getKey_(destination); | 1335 var key = this.getKey_(destination); |
1419 var existingDestination = this.destinationMap_[key]; | 1336 var existingDestination = this.destinationMap_[key]; |
1420 if (existingDestination == null) { | 1337 if (existingDestination == null) { |
1421 destination.isRecent |= this.appState_.recentDestinations.some( | 1338 destination.isRecent |= this.appState_.recentDestinations.some( |
1422 function(recent) { | 1339 function(recent) { |
1423 return (destination.id == recent.id && | 1340 return (destination.id == recent.id && |
1424 destination.origin == recent.origin); | 1341 destination.origin == recent.origin); |
1425 }, this); | 1342 }, this); |
1426 this.destinations_.push(destination); | 1343 this.destinations_.push(destination); |
1427 this.destinationMap_[key] = destination; | 1344 this.destinationMap_[key] = destination; |
1428 return true; | 1345 return true; |
1429 } else if (existingDestination.connectionStatus == | 1346 } else if (existingDestination.connectionStatus == |
1430 print_preview.Destination.ConnectionStatus.UNKNOWN && | 1347 print_preview.DestinationConnectionStatus.UNKNOWN && |
1431 destination.connectionStatus != | 1348 destination.connectionStatus != |
1432 print_preview.Destination.ConnectionStatus.UNKNOWN) { | 1349 print_preview.DestinationConnectionStatus.UNKNOWN) { |
1433 existingDestination.connectionStatus = destination.connectionStatus; | 1350 existingDestination.connectionStatus = destination.connectionStatus; |
1434 return true; | 1351 return true; |
1435 } else { | 1352 } else { |
1436 return false; | 1353 return false; |
1437 } | 1354 } |
1438 }, | 1355 }, |
1439 | 1356 |
1440 /** | 1357 /** |
1441 * Binds handlers to events. | 1358 * Binds handlers to events. |
1442 * @private | 1359 * @private |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1475 print_preview.NativeLayer.EventType.EXTENSION_CAPABILITIES_SET, | 1392 print_preview.NativeLayer.EventType.EXTENSION_CAPABILITIES_SET, |
1476 this.onExtensionCapabilitiesSet_.bind(this)); | 1393 this.onExtensionCapabilitiesSet_.bind(this)); |
1477 this.tracker_.add( | 1394 this.tracker_.add( |
1478 this.nativeLayer_, | 1395 this.nativeLayer_, |
1479 print_preview.NativeLayer.EventType.PROVISIONAL_DESTINATION_RESOLVED, | 1396 print_preview.NativeLayer.EventType.PROVISIONAL_DESTINATION_RESOLVED, |
1480 this.handleProvisionalDestinationResolved_.bind(this)); | 1397 this.handleProvisionalDestinationResolved_.bind(this)); |
1481 }, | 1398 }, |
1482 | 1399 |
1483 /** | 1400 /** |
1484 * Creates a local PDF print destination. | 1401 * Creates a local PDF print destination. |
1485 * @return {!print_preview.Destination} Created print destination. | |
1486 * @private | 1402 * @private |
1487 */ | 1403 */ |
1488 createLocalPdfPrintDestination_: function() { | 1404 createLocalPdfPrintDestination_: function() { |
1489 // TODO(alekseys): Create PDF printer in the native code and send its | 1405 // TODO(alekseys): Create PDF printer in the native code and send its |
1490 // capabilities back with other local printers. | 1406 // capabilities back with other local printers. |
1491 if (this.pdfPrinterEnabled_) { | 1407 if (this.pdfPrinterEnabled_) { |
1492 this.insertDestination_(new print_preview.Destination( | 1408 this.insertDestination_(new print_preview.Destination( |
1493 print_preview.Destination.GooglePromotedId.SAVE_AS_PDF, | 1409 print_preview.Destination.GooglePromotedId.SAVE_AS_PDF, |
1494 print_preview.Destination.Type.LOCAL, | 1410 print_preview.DestinationType.LOCAL, |
1495 print_preview.Destination.Origin.LOCAL, | 1411 print_preview.DestinationOrigin.LOCAL, |
1496 loadTimeData.getString('printToPDF'), | 1412 loadTimeData.getString('printToPDF'), |
1497 false /*isRecent*/, | 1413 false /*isRecent*/, |
1498 print_preview.Destination.ConnectionStatus.ONLINE)); | 1414 print_preview.DestinationConnectionStatus.ONLINE)); |
1499 } | 1415 } |
1500 }, | 1416 }, |
1501 | 1417 |
1502 /** | 1418 /** |
1503 * Resets the state of the destination store to its initial state. | 1419 * Resets the state of the destination store to its initial state. |
1504 * @private | 1420 * @private |
1505 */ | 1421 */ |
1506 reset_: function() { | 1422 reset_: function() { |
1507 this.destinations_ = []; | 1423 this.destinations_ = []; |
1508 this.destinationMap_ = {}; | 1424 this.destinationMap_ = {}; |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1543 * @private | 1459 * @private |
1544 */ | 1460 */ |
1545 onLocalDestinationCapabilitiesSet_: function(event) { | 1461 onLocalDestinationCapabilitiesSet_: function(event) { |
1546 var destinationId = event.settingsInfo['printerId']; | 1462 var destinationId = event.settingsInfo['printerId']; |
1547 var printerName = event.settingsInfo['printerName']; | 1463 var printerName = event.settingsInfo['printerName']; |
1548 var printerDescription = event.settingsInfo['printerDescription']; | 1464 var printerDescription = event.settingsInfo['printerDescription']; |
1549 // PDF is special since we don't need to query the device for | 1465 // PDF is special since we don't need to query the device for |
1550 // capabilities. | 1466 // capabilities. |
1551 var origin = destinationId == | 1467 var origin = destinationId == |
1552 print_preview.Destination.GooglePromotedId.SAVE_AS_PDF ? | 1468 print_preview.Destination.GooglePromotedId.SAVE_AS_PDF ? |
1553 print_preview.Destination.Origin.LOCAL : this.platformOrigin_; | 1469 print_preview.DestinationOrigin.LOCAL : this.platformOrigin_; |
1554 var key = this.getDestinationKey_( | 1470 var key = this.getDestinationKey_( |
1555 origin, | 1471 origin, |
1556 destinationId, | 1472 destinationId, |
1557 ''); | 1473 ''); |
1558 var destination = this.destinationMap_[key]; | 1474 var destination = this.destinationMap_[key]; |
1559 var capabilities = DestinationStore.localizeCapabilities_( | 1475 var capabilities = DestinationStore.localizeCapabilities_( |
1560 event.settingsInfo.capabilities); | 1476 event.settingsInfo.capabilities); |
1561 // Special case for PDF printer (until local printers capabilities are | 1477 // Special case for PDF printer (until local printers capabilities are |
1562 // reported in CDD format too). | 1478 // reported in CDD format too). |
1563 if (destinationId == | 1479 if (destinationId == |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1667 onCloudPrintProcessInviteDone_: function(event) { | 1583 onCloudPrintProcessInviteDone_: function(event) { |
1668 if (event.accept && event.printer) { | 1584 if (event.accept && event.printer) { |
1669 // Hint the destination list to promote this new destination. | 1585 // Hint the destination list to promote this new destination. |
1670 event.printer.isRecent = true; | 1586 event.printer.isRecent = true; |
1671 this.insertDestination_(event.printer); | 1587 this.insertDestination_(event.printer); |
1672 } | 1588 } |
1673 }, | 1589 }, |
1674 | 1590 |
1675 /** | 1591 /** |
1676 * Called when a Privet printer is added to the local network. | 1592 * Called when a Privet printer is added to the local network. |
1677 * @param {Object} event Contains information about the added printer. | 1593 * @param {{printer: {serviceName: string, |
| 1594 * name: string, |
| 1595 * hasLocalPrinting: boolean, |
| 1596 * isUnregistered: boolean, |
| 1597 * cloudID: string}}} event Contains information about |
| 1598 * the added printer. |
1678 * @private | 1599 * @private |
1679 */ | 1600 */ |
1680 onPrivetPrinterAdded_: function(event) { | 1601 onPrivetPrinterAdded_: function(event) { |
1681 if (event.printer.serviceName == this.waitForRegisterDestination_ && | 1602 if (event.printer.serviceName == this.waitForRegisterDestination_ && |
1682 !event.printer.isUnregistered) { | 1603 !event.printer.isUnregistered) { |
1683 this.waitForRegisterDestination_ = null; | 1604 this.waitForRegisterDestination_ = null; |
1684 this.onDestinationsReload_(); | 1605 this.onDestinationsReload_(); |
1685 } else { | 1606 } else { |
1686 this.insertDestinations_( | 1607 this.insertDestinations_( |
1687 print_preview.PrivetDestinationParser.parse(event.printer)); | 1608 print_preview.PrivetDestinationParser.parse(event.printer)); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1722 } | 1643 } |
1723 }, | 1644 }, |
1724 | 1645 |
1725 /** | 1646 /** |
1726 * Called when capabilities for an extension managed printer are set. | 1647 * Called when capabilities for an extension managed printer are set. |
1727 * @param {Object} event Contains the printer's capabilities and ID. | 1648 * @param {Object} event Contains the printer's capabilities and ID. |
1728 * @private | 1649 * @private |
1729 */ | 1650 */ |
1730 onExtensionCapabilitiesSet_: function(event) { | 1651 onExtensionCapabilitiesSet_: function(event) { |
1731 var destinationKey = this.getDestinationKey_( | 1652 var destinationKey = this.getDestinationKey_( |
1732 print_preview.Destination.Origin.EXTENSION, | 1653 print_preview.DestinationOrigin.EXTENSION, |
1733 event.printerId, | 1654 event.printerId, |
1734 '' /* account */); | 1655 '' /* account */); |
1735 var destination = this.destinationMap_[destinationKey]; | 1656 var destination = this.destinationMap_[destinationKey]; |
1736 if (!destination) | 1657 if (!destination) |
1737 return; | 1658 return; |
1738 destination.capabilities = event.capabilities; | 1659 destination.capabilities = event.capabilities; |
1739 this.updateDestination_(destination); | 1660 this.updateDestination_(destination); |
1740 }, | 1661 }, |
1741 | 1662 |
1742 /** | 1663 /** |
1743 * Called from native layer after the user was requested to sign in, and did | 1664 * Called from native layer after the user was requested to sign in, and did |
1744 * so successfully. | 1665 * so successfully. |
1745 * @private | 1666 * @private |
1746 */ | 1667 */ |
1747 onDestinationsReload_: function() { | 1668 onDestinationsReload_: function() { |
1748 this.reset_(); | 1669 this.reset_(); |
1749 this.autoSelectMatchingDestination_ = | 1670 this.autoSelectMatchingDestination_ = |
1750 this.convertPreselectedToDestinationMatch_(); | 1671 this.convertPreselectedToDestinationMatch_(); |
1751 this.createLocalPdfPrintDestination_(); | 1672 this.createLocalPdfPrintDestination_(); |
1752 this.startLoadAllDestinations(); | 1673 this.startLoadAllDestinations(); |
1753 }, | 1674 }, |
1754 | 1675 |
1755 // TODO(vitalybuka): Remove three next functions replacing Destination.id | 1676 // TODO(vitalybuka): Remove three next functions replacing Destination.id |
1756 // and Destination.origin by complex ID. | 1677 // and Destination.origin by complex ID. |
1757 /** | 1678 /** |
1758 * Returns key to be used with {@code destinationMap_}. | 1679 * Returns key to be used with {@code destinationMap_}. |
1759 * @param {!print_preview.Destination.Origin} origin Destination origin. | 1680 * @param {print_preview.DestinationOrigin | string} origin Destination |
| 1681 * origin. |
1760 * @param {string} id Destination id. | 1682 * @param {string} id Destination id. |
1761 * @param {string} account User account destination is registered for. | 1683 * @param {string} account User account destination is registered for. |
1762 * @private | 1684 * @private |
1763 */ | 1685 */ |
1764 getDestinationKey_: function(origin, id, account) { | 1686 getDestinationKey_: function(origin, id, account) { |
1765 return origin + '/' + id + '/' + account; | 1687 return origin + '/' + id + '/' + account; |
1766 }, | 1688 }, |
1767 | 1689 |
1768 /** | 1690 /** |
1769 * Returns key to be used with {@code destinationMap_}. | 1691 * Returns key to be used with {@code destinationMap_}. |
1770 * @param {!print_preview.Destination} destination Destination. | 1692 * @param {!print_preview.Destination} destination Destination. |
1771 * @private | 1693 * @private |
1772 */ | 1694 */ |
1773 getKey_: function(destination) { | 1695 getKey_: function(destination) { |
1774 return this.getDestinationKey_( | 1696 return this.getDestinationKey_( |
1775 destination.origin, destination.id, destination.account); | 1697 destination.origin, destination.id, destination.account); |
1776 } | 1698 } |
1777 }; | 1699 }; |
1778 | 1700 |
1779 // Export | 1701 // Export |
1780 return { | 1702 return { |
1781 DestinationStore: DestinationStore | 1703 DestinationStore: DestinationStore |
1782 }; | 1704 }; |
1783 }); | 1705 }); |
OLD | NEW |