Commit 0e38f663 authored by Jimmy Gong's avatar Jimmy Gong Committed by Commit Bot

Add CupsPrintersEntryManager class to printer settings

- CupsPrintersEntryManager contains both saved and nearby printers.
- This new class handles the model manipulation of printers and calls
  on its listeners to let the views know when the models have been
  updated.
- Adds CupsPrintersEntryListBehavior to observe the change events
  from CupsPrintersEntryManager.
- Updated tests to reflect this change.

Bug: 1009659
Test: End to end manual, browsertests
Change-Id: I86f2a4d521de644a0fb4b5e3c01ef55e704642a8
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1830292Reviewed-by: default avatarSteven Bennetts <stevenjb@chromium.org>
Reviewed-by: default avatarKyle Horimoto <khorimoto@chromium.org>
Commit-Queue: jimmy gong <jimmyxgong@chromium.org>
Cr-Commit-Position: refs/heads/master@{#705150}
parent db177501
...@@ -775,6 +775,18 @@ ...@@ -775,6 +775,18 @@
<structure name="IDR_OS_SETTINGS_CUPS_PRINTERS_ENTRY_LIST_JS" <structure name="IDR_OS_SETTINGS_CUPS_PRINTERS_ENTRY_LIST_JS"
file="printing_page/cups_printers_entry_list.js" file="printing_page/cups_printers_entry_list.js"
type="chrome_html" /> type="chrome_html" />
<structure name="IDR_OS_SETTINGS_CUPS_PRINTERS_ENTRY_LIST_BEHAVIOR_HTML"
file="printing_page/cups_printers_entry_list_behavior.html"
type="chrome_html" />
<structure name="IDR_OS_SETTINGS_CUPS_PRINTERS_ENTRY_LIST_BEHAVIOR_JS"
file="printing_page/cups_printers_entry_list_behavior.js"
type="chrome_html" />
<structure name="IDR_OS_SETTINGS_CUPS_PRINTERS_ENTRY_MANAGER_HTML"
file="printing_page/cups_printers_entry_manager.html"
type="chrome_html" />
<structure name="IDR_OS_SETTINGS_CUPS_PRINTERS_ENTRY_MANAGER_JS"
file="printing_page/cups_printers_entry_manager.js"
type="chrome_html" />
<structure name="IDR_OS_SETTINGS_CUPS_PRINTERS_LIST_HTML" <structure name="IDR_OS_SETTINGS_CUPS_PRINTERS_LIST_HTML"
file="printing_page/cups_printers_list.html" file="printing_page/cups_printers_list.html"
type="chrome_html" /> type="chrome_html" />
......
...@@ -22,6 +22,8 @@ js_type_check("closure_compile") { ...@@ -22,6 +22,8 @@ js_type_check("closure_compile") {
":cups_printers_browser_proxy", ":cups_printers_browser_proxy",
":cups_printers_entry", ":cups_printers_entry",
":cups_printers_entry_list", ":cups_printers_entry_list",
":cups_printers_entry_list_behavior",
":cups_printers_entry_manager",
":cups_printers_list", ":cups_printers_list",
":cups_saved_printers", ":cups_saved_printers",
":printing_browser_proxy", ":printing_browser_proxy",
...@@ -82,6 +84,9 @@ if (is_chromeos) { ...@@ -82,6 +84,9 @@ if (is_chromeos) {
deps = [ deps = [
":cups_printer_types", ":cups_printer_types",
":cups_printers_browser_proxy", ":cups_printers_browser_proxy",
":cups_printers_entry_list_behavior",
":cups_printers_entry_manager",
"//ui/webui/resources/js:list_property_update_behavior",
"//ui/webui/resources/js:web_ui_listener_behavior", "//ui/webui/resources/js:web_ui_listener_behavior",
] ]
} }
...@@ -102,6 +107,7 @@ if (is_chromeos) { ...@@ -102,6 +107,7 @@ if (is_chromeos) {
deps = [ deps = [
":cups_nearby_printers", ":cups_nearby_printers",
":cups_printers_browser_proxy", ":cups_printers_browser_proxy",
":cups_printers_entry_manager",
":cups_saved_printers", ":cups_saved_printers",
"..:route", "..:route",
"//ui/webui/resources/cr_components/chromeos/network:mojo_interface_provider", "//ui/webui/resources/cr_components/chromeos/network:mojo_interface_provider",
...@@ -136,6 +142,22 @@ if (is_chromeos) { ...@@ -136,6 +142,22 @@ if (is_chromeos) {
] ]
} }
js_library("cups_printers_entry_list_behavior") {
deps = [
":cups_printer_types",
"//ui/webui/resources/js:list_property_update_behavior",
]
}
js_library("cups_printers_entry_manager") {
deps = [
":cups_printer_types",
":cups_printers_browser_proxy",
"//ui/webui/resources/js:assert",
"//ui/webui/resources/js:cr",
]
}
js_library("cups_printers_list") { js_library("cups_printers_list") {
deps = [ deps = [
":cups_printers_browser_proxy", ":cups_printers_browser_proxy",
...@@ -149,7 +171,10 @@ if (is_chromeos) { ...@@ -149,7 +171,10 @@ if (is_chromeos) {
deps = [ deps = [
":cups_printer_types", ":cups_printer_types",
":cups_printers_browser_proxy", ":cups_printers_browser_proxy",
":cups_printers_entry_list_behavior",
":cups_printers_entry_manager",
"//ui/webui/resources/cr_elements/cr_action_menu:cr_action_menu", "//ui/webui/resources/cr_elements/cr_action_menu:cr_action_menu",
"//ui/webui/resources/js:list_property_update_behavior",
"//ui/webui/resources/js:web_ui_listener_behavior", "//ui/webui/resources/js:web_ui_listener_behavior",
] ]
} }
......
<link rel="import" href="chrome://resources/html/polymer.html"> <link rel="import" href="chrome://resources/html/polymer.html">
<link rel="import" href="chrome://resources/html/list_property_update_behavior.html">
<link rel="import" href="chrome://resources/html/web_ui_listener_behavior.html"> <link rel="import" href="chrome://resources/html/web_ui_listener_behavior.html">
<link rel="import" href="cups_printer_types.html"> <link rel="import" href="cups_printer_types.html">
<link rel="import" href="cups_printers_browser_proxy.html"> <link rel="import" href="cups_printers_browser_proxy.html">
<link rel="import" href="cups_printers_entry_list.html"> <link rel="import" href="cups_printers_entry_list.html">
<link rel="import" href="cups_printers_entry_list_behavior.html">
<link rel="import" href="cups_printers_entry_manager.html">
<link rel="import" href="../settings_shared_css.html"> <link rel="import" href="../settings_shared_css.html">
<dom-module id="settings-cups-nearby-printers"> <dom-module id="settings-cups-nearby-printers">
<template> <template>
<settings-cups-printers-entry-list printers="[[nearbyPrinters_]]" <settings-cups-printers-entry-list printers="[[nearbyPrinters]]"
search-term="[[searchTerm]]"> search-term="[[searchTerm]]">
</settings-cups-printers-entry-list> </settings-cups-printers-entry-list>
</template> </template>
......
...@@ -9,20 +9,16 @@ ...@@ -9,20 +9,16 @@
Polymer({ Polymer({
is: 'settings-cups-nearby-printers', is: 'settings-cups-nearby-printers',
behaviors: [WebUIListenerBehavior], // ListPropertyUpdateBehavior is used in CupsPrintersEntryListBehavior.
behaviors: [
CupsPrintersEntryListBehavior,
ListPropertyUpdateBehavior,
WebUIListenerBehavior,
],
properties: { properties: {
/** /**
* @type {!Array<!PrinterListEntry>} * Search term for filtering |nearbyPrinters|.
* @private
*/
nearbyPrinters_: {
type: Array,
value: () => [],
},
/**
* Search term for filtering |nearbyPrinters_|.
* @type {string} * @type {string}
*/ */
searchTerm: { searchTerm: {
...@@ -30,6 +26,12 @@ Polymer({ ...@@ -30,6 +26,12 @@ Polymer({
value: '', value: '',
}, },
/** @type {?CupsPrinterInfo} */
activePrinter: {
type: Object,
notify: true,
},
/** /**
* @type {number} * @type {number}
* @private * @private
...@@ -38,51 +40,12 @@ Polymer({ ...@@ -38,51 +40,12 @@ Polymer({
type: Number, type: Number,
value: -1, value: -1,
}, },
/** @type {?CupsPrinterInfo} */
activePrinter: {
type: Object,
notify: true,
},
}, },
listeners: { listeners: {
'add-automatic-printer': 'onAddAutomaticPrinter_', 'add-automatic-printer': 'onAddAutomaticPrinter_',
}, },
/** @override */
attached: function() {
settings.CupsPrintersBrowserProxyImpl.getInstance()
.startDiscoveringPrinters();
this.addWebUIListener(
'on-nearby-printers-changed', this.onNearbyPrintersChanged_.bind(this));
},
/**
* @param {!Array<!CupsPrinterInfo>} automaticPrinters
* @param {!Array<!CupsPrinterInfo>} discoveredPrinters
* @private
*/
onNearbyPrintersChanged_: function(automaticPrinters, discoveredPrinters) {
if (!automaticPrinters && !discoveredPrinters) {
return;
}
const printers = /** @type{!Array<!PrinterListEntry>} */ ([]);
for (const printer of automaticPrinters) {
printers.push({printerInfo: printer,
printerType: PrinterType.AUTOMATIC});
}
for (const printer of discoveredPrinters) {
printers.push({printerInfo: printer,
printerType: PrinterType.DISCOVERED});
}
this.nearbyPrinters_ = printers;
},
/** /**
* @param {!CustomEvent<{item: !PrinterListEntry}>} e * @param {!CustomEvent<{item: !PrinterListEntry}>} e
* @private * @private
...@@ -106,12 +69,11 @@ Polymer({ ...@@ -106,12 +69,11 @@ Polymer({
* @private * @private
*/ */
setActivePrinter_: function(item) { setActivePrinter_: function(item) {
this.activePrinterListEntryIndex_ = this.activePrinterListEntryIndex_ = this.nearbyPrinters.findIndex(
this.nearbyPrinters_.findIndex( printer => printer.printerInfo.printerId == item.printerInfo.printerId);
printer => printer.printerInfo == item.printerInfo);
this.activePrinter = this.activePrinter =
this.get(['nearbyPrinters_', this.activePrinterListEntryIndex_]) this.get(['nearbyPrinters', this.activePrinterListEntryIndex_])
.printerInfo; .printerInfo;
}, },
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
<link rel="import" href="cups_add_printer_dialog.html"> <link rel="import" href="cups_add_printer_dialog.html">
<link rel="import" href="cups_edit_printer_dialog.html"> <link rel="import" href="cups_edit_printer_dialog.html">
<link rel="import" href="cups_printer_shared_css.html"> <link rel="import" href="cups_printer_shared_css.html">
<link rel="import" href="cups_printers_entry_manager.html">
<link rel="import" href="cups_printers_list.html"> <link rel="import" href="cups_printers_list.html">
<link rel="import" href="cups_saved_printers.html"> <link rel="import" href="cups_saved_printers.html">
<link rel="import" href="cups_nearby_printers.html"> <link rel="import" href="cups_nearby_printers.html">
...@@ -142,7 +143,6 @@ ...@@ -142,7 +143,6 @@
<settings-cups-saved-printers id="savedPrinters" <settings-cups-saved-printers id="savedPrinters"
active-printer="{{activePrinter}}" active-printer="{{activePrinter}}"
saved-printers="[[savedPrinters_]]"
search-term="[[searchTerm]]"> search-term="[[searchTerm]]">
</settings-cups-saved-printers> </settings-cups-saved-printers>
</div> </div>
......
...@@ -81,11 +81,16 @@ Polymer({ ...@@ -81,11 +81,16 @@ Polymer({
/** @private {?chromeos.networkConfig.mojom.CrosNetworkConfigRemote} */ /** @private {?chromeos.networkConfig.mojom.CrosNetworkConfigRemote} */
networkConfig_: null, networkConfig_: null,
/** @private {settings.printing.CupsPrintersEntryManager} */
entryManager_: null,
/** @override */ /** @override */
created: function() { created: function() {
this.networkConfig_ = this.networkConfig_ =
network_config.MojoInterfaceProviderImpl.getInstance() network_config.MojoInterfaceProviderImpl.getInstance()
.getMojoServiceRemote(); .getMojoServiceRemote();
this.entryManager_ =
settings.printing.CupsPrintersEntryManager.getInstance();
}, },
/** @override */ /** @override */
...@@ -110,7 +115,6 @@ Polymer({ ...@@ -110,7 +115,6 @@ Polymer({
this.updateCupsPrintersList_(); this.updateCupsPrintersList_();
}, },
/** /**
* settings.RouteObserverBehavior * settings.RouteObserverBehavior
* @param {!settings.Route} route * @param {!settings.Route} route
...@@ -119,10 +123,14 @@ Polymer({ ...@@ -119,10 +123,14 @@ Polymer({
currentRouteChanged: function(route) { currentRouteChanged: function(route) {
if (route != settings.routes.CUPS_PRINTERS) { if (route != settings.routes.CUPS_PRINTERS) {
cr.removeWebUIListener('on-printers-changed'); cr.removeWebUIListener('on-printers-changed');
this.entryManager_.removeWebUIListeners();
return; return;
} }
this.entryManager_.addWebUIListeners();
cr.addWebUIListener( cr.addWebUIListener(
'on-printers-changed', this.onPrintersChanged_.bind(this)); 'on-printers-changed', this.onPrintersChanged_.bind(this));
this.updateCupsPrintersList_();
}, },
/** /**
...@@ -152,13 +160,11 @@ Polymer({ ...@@ -152,13 +160,11 @@ Polymer({
const printerName = event.detail.printerName; const printerName = event.detail.printerName;
switch (event.detail.resultCode) { switch (event.detail.resultCode) {
case PrinterSetupResult.SUCCESS: case PrinterSetupResult.SUCCESS:
this.updateCupsPrintersList_();
this.addPrinterResultText_ = this.addPrinterResultText_ =
loadTimeData.getStringF('printerAddedSuccessfulMessage', loadTimeData.getStringF('printerAddedSuccessfulMessage',
printerName); printerName);
break; break;
case PrinterSetupResult.EDIT_SUCCESS: case PrinterSetupResult.EDIT_SUCCESS:
this.updateCupsPrintersList_();
this.addPrinterResultText_ = this.addPrinterResultText_ =
loadTimeData.getStringF('printerEditedSuccessfulMessage', loadTimeData.getStringF('printerEditedSuccessfulMessage',
printerName); printerName);
...@@ -203,6 +209,7 @@ Polymer({ ...@@ -203,6 +209,7 @@ Polymer({
printer => /** @type {!PrinterListEntry} */({ printer => /** @type {!PrinterListEntry} */({
printerInfo: printer, printerInfo: printer,
printerType: PrinterType.SAVED})); printerType: PrinterType.SAVED}));
this.entryManager_.setSavedPrintersList(this.savedPrinters_);
} else { } else {
this.printers = cupsPrintersList.printerList; this.printers = cupsPrintersList.printerList;
} }
......
...@@ -69,12 +69,14 @@ Polymer({ ...@@ -69,12 +69,14 @@ Polymer({
// |filteredPrinters_| is just |printers|. // |filteredPrinters_| is just |printers|.
const updatedPrinters = this.searchTerm ? const updatedPrinters = this.searchTerm ?
this.printers.filter( this.printers.filter(
item =>this.matchesSearchTerm_(item.printerInfo,this.searchTerm)) : item =>
this.matchesSearchTerm_(item.printerInfo, this.searchTerm)) :
this.printers.slice(); this.printers.slice();
updatedPrinters.sort(this.sortPrinters_); updatedPrinters.sort(this.sortPrinters_);
this.updateList('filteredPrinters_', printer => printer.printerInfo, this.updateList(
'filteredPrinters_', printer => printer.printerInfo.printerId,
updatedPrinters); updatedPrinters);
this.showNoSearchResultsMessage_ = this.showNoSearchResultsMessage_ =
......
<link rel="import" href="cups_printer_types.html">
<script src="cups_printers_entry_list_behavior.js"></script>
\ No newline at end of file
// 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/null fields 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);
},
/**
* @param {!Array<!PrinterListEntry>} printerList
* @private
*/
onNearbyPrintersChanged_: function(printerList) {
this.updateList(
'nearbyPrinters', printer => printer.printerInfo.printerId,
printerList);
}
};
\ No newline at end of file
<link rel="import" href="chrome://resources/html/assert.html">
<link rel="import" href="chrome://resources/html/cr.html">
<link rel="import" href="cups_printer_types.html">
<link rel="import" href="cups_printers_browser_proxy.html">
<script src="cups_printers_entry_manager.js"></script>
\ No newline at end of file
// 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.
/**
* Function which provides the client with metadata about a change
* to a list of saved printers. The first parameter is the updated list of
* printers after the change, the second parameter is the newly-added printer
* (if it exists), and the third parameter is the newly-removed printer
* (if it exists).
* @typedef {!function(!Array<!PrinterListEntry>, !Array<!PrinterListEntry>,
* !Array<!PrinterListEntry>): void}
*/
let PrintersListWithDeltasCallback;
/**
* Function which provides the client with a list that contains the nearby
* printers list. The parameter is the updated list of printers after any
* changes.
* @typedef {function(!Array<!PrinterListEntry>): void}
*/
let PrintersListCallback;
cr.define('settings.printing', function() {
/**
* @param {!PrinterListEntry} first
* @param {!PrinterListEntry} second
* @return {boolean}
* @private
*/
function arePrinterIdsEqual_(first, second) {
return first.printerInfo.printerId == second.printerInfo.printerId;
}
/**
* Finds the printers that are in |firstArr| but not in |secondArr|.
* @param {!Array<!PrinterListEntry>} firstArr
* @param {!Array<!PrinterListEntry>} secondArr
* @return {!Array<!PrinterListEntry>}
* @private
*/
function findDifference_(firstArr, secondArr) {
return firstArr.filter((firstArrEntry) => {
return !secondArr.some(arePrinterIdsEqual_.bind(this, firstArrEntry));
});
}
/**
* Class for managing printer entries. Holds both Saved and Nearby printers
* and notifies observers of any applicable changes to either printer lists.
*/
class CupsPrintersEntryManager {
constructor() {
/** @private {!Array<!PrinterListEntry>} */
this.savedPrinters_ = [];
/** @private {!Array<!PrinterListEntry>} */
this.nearbyPrinters_ = [];
/** @private {!Array<PrintersListWithDeltasCallback>} */
this.onSavedPrintersChangedListeners_ = [];
/** @type {!Array<PrintersListCallback>} */
this.onNearbyPrintersChangedListeners_ = [];
}
addWebUIListeners() {
// TODO(1005905): Add on-printers-changed listener here once legacy code
// is removed.
cr.addWebUIListener(
'on-nearby-printers-changed', this.setNearbyPrintersList.bind(this));
settings.CupsPrintersBrowserProxyImpl.getInstance()
.startDiscoveringPrinters();
}
removeWebUIListeners() {
cr.removeWebUIListener('on-nearby-printers-changed');
}
/** @return {!Array<!PrinterListEntry>} */
get savedPrinters() {
return this.savedPrinters_;
}
/** @return {!Array<!PrinterListEntry>} */
get nearbyPrinters() {
return this.nearbyPrinters_;
}
/** @param {PrintersListWithDeltasCallback} listener */
addOnSavedPrintersChangedListener(listener) {
this.onSavedPrintersChangedListeners_.push(listener);
}
/** @param {PrintersListWithDeltasCallback} listener */
removeOnSavedPrintersChangedListener(listener) {
this.onSavedPrintersChangedListeners_ =
this.onSavedPrintersChangedListeners_.filter(lis => lis != listener);
}
/** @param {PrintersListCallback} listener */
addOnNearbyPrintersChangedListener(listener) {
this.onNearbyPrintersChangedListeners_.push(listener);
}
/** @param {PrintersListCallback} listener */
removeOnNearbyPrintersChangedListener(listener) {
this.onNearbyPrintersChangedListeners_ =
this.onNearbyPrintersChangedListeners_.filter(lis => lis != listener);
}
/**
* Sets the saved printers list and notifies observers of any applicable
* changes.
* @param {!Array<!PrinterListEntry>} printerList
*/
setSavedPrintersList(printerList) {
if (printerList.length > this.savedPrinters_.length) {
const diff = findDifference_(printerList, this.savedPrinters_);
this.savedPrinters_ = printerList;
this.notifyOnSavedPrintersChangedListeners_(
this.savedPrinters_, diff, [] /* printersRemoved */);
return;
}
if (printerList.length < this.savedPrinters_.length) {
const diff = findDifference_(this.savedPrinters_, printerList);
this.savedPrinters_ = printerList;
this.notifyOnSavedPrintersChangedListeners_(
this.savedPrinters_, [] /* printersAdded */, diff);
return;
}
this.savedPrinters_ = printerList;
this.notifyOnSavedPrintersChangedListeners_(
this.savedPrinters_, [] /* printersAdded */,
[] /* printersRemoved */);
}
/**
* Sets the nearby printers list and notifies observers of any applicable
* changes.
* @param {!Array<!CupsPrinterInfo>} automaticPrinters
* @param {!Array<!CupsPrinterInfo>} discoveredPrinters
*/
setNearbyPrintersList(automaticPrinters, discoveredPrinters) {
if (!automaticPrinters && !discoveredPrinters) {
return;
}
this.nearbyPrinters_ = [];
for (const printer of automaticPrinters) {
this.nearbyPrinters_.push(
{printerInfo: printer, printerType: PrinterType.AUTOMATIC});
}
for (const printer of discoveredPrinters) {
this.nearbyPrinters_.push(
{printerInfo: printer, printerType: PrinterType.DISCOVERED});
}
this.notifyOnNearbyPrintersChangedListeners_();
}
/**
* Non-empty/null fields indicate the applicable change to be notified.
* @param {!Array<!PrinterListEntry>} savedPrinters
* @param {!Array<!PrinterListEntry>} addedPrinter
* @param {!Array<!PrinterListEntry>} removedPrinter
* @private
*/
notifyOnSavedPrintersChangedListeners_(
savedPrinters, addedPrinter, removedPrinter) {
this.onSavedPrintersChangedListeners_.forEach(
listener => listener(savedPrinters, addedPrinter, removedPrinter));
}
/** @private */
notifyOnNearbyPrintersChangedListeners_() {
this.onNearbyPrintersChangedListeners_.forEach(
listener => listener(this.nearbyPrinters_));
}
}
cr.addSingletonGetter(CupsPrintersEntryManager);
return {
CupsPrintersEntryManager: CupsPrintersEntryManager,
};
});
\ No newline at end of file
<link rel="import" href="chrome://resources/html/polymer.html"> <link rel="import" href="chrome://resources/html/polymer.html">
<link rel="import" href="chrome://resources/cr_elements/cr_action_menu/cr_action_menu.html"> <link rel="import" href="chrome://resources/cr_elements/cr_action_menu/cr_action_menu.html">
<link rel="import" href="chrome://resources/html/list_property_update_behavior.html">
<link rel="import" href="chrome://resources/html/web_ui_listener_behavior.html"> <link rel="import" href="chrome://resources/html/web_ui_listener_behavior.html">
<link rel="import" href="cups_printer_types.html"> <link rel="import" href="cups_printer_types.html">
<link rel="import" href="cups_printers_browser_proxy.html"> <link rel="import" href="cups_printers_browser_proxy.html">
<link rel="import" href="cups_printers_entry_list.html"> <link rel="import" href="cups_printers_entry_list.html">
<link rel="import" href="cups_printers_entry_list_behavior.html">
<link rel="import" href="../settings_shared_css.html"> <link rel="import" href="../settings_shared_css.html">
<dom-module id="settings-cups-saved-printers"> <dom-module id="settings-cups-saved-printers">
......
...@@ -9,16 +9,14 @@ ...@@ -9,16 +9,14 @@
Polymer({ Polymer({
is: 'settings-cups-saved-printers', is: 'settings-cups-saved-printers',
// ListPropertyUpdateBehavior is used in CupsPrintersEntryListBehavior.
behaviors: [ behaviors: [
WebUIListenerBehavior, CupsPrintersEntryListBehavior,
ListPropertyUpdateBehavior,
WebUIListenerBehavior,
], ],
properties: { properties: {
/** @type {!Array<!PrinterListEntry>} */
savedPrinters: {
type: Array,
},
/** /**
* Search term for filtering |savedPrinters|. * Search term for filtering |savedPrinters|.
* @type {string} * @type {string}
...@@ -28,6 +26,12 @@ Polymer({ ...@@ -28,6 +26,12 @@ Polymer({
value: '', value: '',
}, },
/** @type {?CupsPrinterInfo} */
activePrinter: {
type: Object,
notify: true,
},
/** /**
* @type {number} * @type {number}
* @private * @private
...@@ -36,12 +40,6 @@ Polymer({ ...@@ -36,12 +40,6 @@ Polymer({
type: Number, type: Number,
value: -1, value: -1,
}, },
/** @type {?CupsPrinterInfo} */
activePrinter: {
type: Object,
notify: true,
},
}, },
listeners: { listeners: {
...@@ -62,9 +60,8 @@ Polymer({ ...@@ -62,9 +60,8 @@ Polymer({
*/ */
onOpenActionMenu_: function(e) { onOpenActionMenu_: function(e) {
const item = /** @type {!PrinterListEntry} */(e.detail.item); const item = /** @type {!PrinterListEntry} */(e.detail.item);
this.activePrinterListEntryIndex_ = this.activePrinterListEntryIndex_ = this.savedPrinters.findIndex(
this.savedPrinters.findIndex( printer => printer.printerInfo.printerId == item.printerInfo.printerId);
printer => printer.printerInfo == item.printerInfo);
this.activePrinter = this.activePrinter =
this.get(['savedPrinters', this.activePrinterListEntryIndex_]) this.get(['savedPrinters', this.activePrinterListEntryIndex_])
.printerInfo; .printerInfo;
...@@ -92,5 +89,6 @@ Polymer({ ...@@ -92,5 +89,6 @@ Polymer({
/** @private */ /** @private */
closeActionMenu_: function() { closeActionMenu_: function() {
this.$$('cr-action-menu').close(); this.$$('cr-action-menu').close();
} },
}); });
...@@ -987,6 +987,18 @@ ...@@ -987,6 +987,18 @@
<structure name="IDR_SETTINGS_CUPS_PRINTERS_ENTRY_LIST_JS" <structure name="IDR_SETTINGS_CUPS_PRINTERS_ENTRY_LIST_JS"
file="printing_page/cups_printers_entry_list.js" file="printing_page/cups_printers_entry_list.js"
type="chrome_html" /> type="chrome_html" />
<structure name="IDR_SETTINGS_CUPS_PRINTERS_ENTRY_LIST_BEHAVIOR_HTML"
file="printing_page/cups_printers_entry_list_behavior.html"
type="chrome_html" />
<structure name="IDR_SETTINGS_CUPS_PRINTERS_ENTRY_LIST_BEHAVIOR_JS"
file="printing_page/cups_printers_entry_list_behavior.js"
type="chrome_html" />
<structure name="IDR_SETTINGS_CUPS_PRINTERS_ENTRY_MANAGER_HTML"
file="printing_page/cups_printers_entry_manager.html"
type="chrome_html" />
<structure name="IDR_SETTINGS_CUPS_PRINTERS_ENTRY_MANAGER_JS"
file="printing_page/cups_printers_entry_manager.js"
type="chrome_html" />
<structure name="IDR_SETTINGS_CUPS_PRINTERS_LIST_HTML" <structure name="IDR_SETTINGS_CUPS_PRINTERS_LIST_HTML"
file="printing_page/cups_printers_list.html" file="printing_page/cups_printers_list.html"
type="chrome_html" /> type="chrome_html" />
......
...@@ -966,6 +966,7 @@ void CupsPrintersHandler::VerifyPpdContents(const base::FilePath& path, ...@@ -966,6 +966,7 @@ void CupsPrintersHandler::VerifyPpdContents(const base::FilePath& path,
void CupsPrintersHandler::HandleStartDiscovery(const base::ListValue* args) { void CupsPrintersHandler::HandleStartDiscovery(const base::ListValue* args) {
PRINTER_LOG(DEBUG) << "Start printer discovery"; PRINTER_LOG(DEBUG) << "Start printer discovery";
AllowJavascript();
discovery_active_ = true; discovery_active_ = true;
OnPrintersChanged(PrinterClass::kAutomatic, OnPrintersChanged(PrinterClass::kAutomatic,
printers_manager_->GetPrinters(PrinterClass::kAutomatic)); printers_manager_->GetPrinters(PrinterClass::kAutomatic));
......
...@@ -544,10 +544,6 @@ suite('CupsNearbyPrintersTests', function() { ...@@ -544,10 +544,6 @@ suite('CupsNearbyPrintersTests', function() {
nearbyPrintersElement = page.$$('settings-cups-nearby-printers'); nearbyPrintersElement = page.$$('settings-cups-nearby-printers');
assertTrue(!!nearbyPrintersElement); assertTrue(!!nearbyPrintersElement);
// Assert that no printers have been detected.
let nearbyPrinterEntries = getPrinterEntries(nearbyPrintersElement);
assertEquals(0, nearbyPrinterEntries.length);
// Simuluate finding nearby printers. // Simuluate finding nearby printers.
cr.webUIListenerCallback( cr.webUIListenerCallback(
'on-nearby-printers-changed', automaticPrinterList, 'on-nearby-printers-changed', automaticPrinterList,
...@@ -570,10 +566,6 @@ suite('CupsNearbyPrintersTests', function() { ...@@ -570,10 +566,6 @@ suite('CupsNearbyPrintersTests', function() {
nearbyPrintersElement = page.$$('settings-cups-nearby-printers'); nearbyPrintersElement = page.$$('settings-cups-nearby-printers');
assertTrue(!!nearbyPrintersElement); assertTrue(!!nearbyPrintersElement);
// Assert that no printers are detected.
let nearbyPrinterEntries = getPrinterEntries(nearbyPrintersElement);
assertEquals(0, nearbyPrinterEntries.length);
// Simuluate finding nearby printers. // Simuluate finding nearby printers.
cr.webUIListenerCallback( cr.webUIListenerCallback(
'on-nearby-printers-changed', automaticPrinterList, 'on-nearby-printers-changed', automaticPrinterList,
...@@ -613,10 +605,6 @@ suite('CupsNearbyPrintersTests', function() { ...@@ -613,10 +605,6 @@ suite('CupsNearbyPrintersTests', function() {
nearbyPrintersElement = page.$$('settings-cups-nearby-printers'); nearbyPrintersElement = page.$$('settings-cups-nearby-printers');
assertTrue(!!nearbyPrintersElement); assertTrue(!!nearbyPrintersElement);
// Assert that there are initially no detected printers.
let nearbyPrinterEntries = getPrinterEntries(nearbyPrintersElement);
assertEquals(0, nearbyPrinterEntries.length);
// Simuluate finding nearby printers. // Simuluate finding nearby printers.
cr.webUIListenerCallback( cr.webUIListenerCallback(
'on-nearby-printers-changed', automaticPrinterList, 'on-nearby-printers-changed', automaticPrinterList,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment