summaryrefslogtreecommitdiffstats
path: root/chromium/chrome/browser/resources/settings/printing_page/cups_printers_entry_list_behavior.js
blob: 59588b2462924c20ee3a5d067de9fa0627daaf16 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
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) {},
};