diff options
Diffstat (limited to 'chromium/chrome/browser/resources/settings/printing_page/cups_printers_entry_list_behavior.js')
-rw-r--r-- | chromium/chrome/browser/resources/settings/printing_page/cups_printers_entry_list_behavior.js | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/chromium/chrome/browser/resources/settings/printing_page/cups_printers_entry_list_behavior.js b/chromium/chrome/browser/resources/settings/printing_page/cups_printers_entry_list_behavior.js new file mode 100644 index 00000000000..59588b24629 --- /dev/null +++ b/chromium/chrome/browser/resources/settings/printing_page/cups_printers_entry_list_behavior.js @@ -0,0 +1,98 @@ +// Copyright 2019 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. + +/** + * @fileoverview Polymer behavior for observing CupsPrintersEntryManager events. + * Use this behavior if you want to receive a dynamically updated list of both + * saved and nearby printers. + */ + +/** @polymerBehavior */ +const CupsPrintersEntryListBehavior = { + properties: { + /** @private {!settings.printing.CupsPrintersEntryManager} */ + entryManager_: Object, + + /** @type {!Array<!PrinterListEntry>} */ + savedPrinters: { + type: Array, + value: () => [], + }, + + /** @type {!Array<!PrinterListEntry>} */ + nearbyPrinters: { + type: Array, + value: () => [], + }, + }, + + /** @override */ + created: function() { + this.entryManager_ = + settings.printing.CupsPrintersEntryManager.getInstance(); + }, + + /** @override */ + attached: function() { + this.entryManager_.addOnSavedPrintersChangedListener( + this.onSavedPrintersChanged_.bind(this)); + this.entryManager_.addOnNearbyPrintersChangedListener( + this.onNearbyPrintersChanged_.bind(this)); + + // Initialize saved and nearby printers list. + this.onSavedPrintersChanged_( + this.entryManager_.savedPrinters, [] /* printerAdded */, + [] /* printerRemoved */); + this.onNearbyPrintersChanged_(this.entryManager_.nearbyPrinters); + }, + + /** @override */ + detached: function() { + this.entryManager_.removeOnSavedPrintersChangedListener( + this.onSavedPrintersChanged_.bind(this)); + this.entryManager_.removeOnNearbyPrintersChangedListener( + this.onNearbyPrintersChanged_.bind(this)); + }, + + /** + * Non-empty params indicate the applicable change to be notified. + * @param {!Array<!PrinterListEntry>} savedPrinters + * @param {!Array<!PrinterListEntry>} addedPrinters + * @param {!Array<!PrinterListEntry>} removedPrinters + * @private + */ + onSavedPrintersChanged_: function( + savedPrinters, addedPrinters, removedPrinters) { + this.updateList( + 'savedPrinters', printer => printer.printerInfo.printerId, + savedPrinters); + + assert(!(addedPrinters.length && removedPrinters.length)); + + if (addedPrinters.length) { + this.onSavedPrintersAdded(addedPrinters); + } else if (removedPrinters.length) { + this.onSavedPrintersRemoved(removedPrinters); + } + }, + + /** + * @param {!Array<!PrinterListEntry>} printerList + * @private + */ + onNearbyPrintersChanged_: function(printerList) { + this.updateList( + 'nearbyPrinters', printer => printer.printerInfo.printerId, + printerList); + }, + + // CupsPrintersEntryListBehavior methods. Override these in the + // implementations. + + /** @param{!Array<!PrinterListEntry>} addedPrinters */ + onSavedPrintersAdded: function(addedPrinters) {}, + + /** @param{!Array<!PrinterListEntry>} removedPrinters */ + onSavedPrintersRemoved: function(removedPrinters) {}, +};
\ No newline at end of file |