Commit 6268a44d authored by Jimmy Gong's avatar Jimmy Gong Committed by Commit Bot

Hide saved printers when empty

- The header for saved printers will be hidden when the saved printers
  list is empty.
- Adds a browsertest to reflect this change.

Bug: 993819
Test: browser tests, end to end manual
Change-Id: I4bbae8f389161a7c3252df09d39380c896413fa2
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1767488
Commit-Queue: jimmy gong <jimmyxgong@chromium.org>
Reviewed-by: default avatarKyle Horimoto <khorimoto@chromium.org>
Reviewed-by: default avatarBailey Berro <baileyberro@chromium.org>
Cr-Commit-Position: refs/heads/master@{#691391}
parent f296a1cd
...@@ -103,6 +103,7 @@ if (is_chromeos) { ...@@ -103,6 +103,7 @@ if (is_chromeos) {
":cups_nearby_printers", ":cups_nearby_printers",
":cups_printers_browser_proxy", ":cups_printers_browser_proxy",
":cups_saved_printers", ":cups_saved_printers",
"..:route",
"//ui/webui/resources/cr_components/chromeos/network:mojo_interface_provider", "//ui/webui/resources/cr_components/chromeos/network:mojo_interface_provider",
"//ui/webui/resources/cr_elements/chromeos/network:cr_network_listener_behavior", "//ui/webui/resources/cr_elements/chromeos/network:cr_network_listener_behavior",
"//ui/webui/resources/cr_elements/cr_toast:cr_toast", "//ui/webui/resources/cr_elements/cr_toast:cr_toast",
......
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
<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">
<link rel="import" href="../route.html">
<dom-module id="settings-cups-printers"> <dom-module id="settings-cups-printers">
<template> <template>
...@@ -121,16 +122,21 @@ ...@@ -121,16 +122,21 @@
</div> </div>
</template> </template>
<div class="settings-box first"> <template is="dom-if"
<div class="start"> if="[[doesAccountHaveSavedPrinters_(savedPrinters_)]]"
<span>$i18n{savedPrintersTitle}</span> id="savedPrintersSection" restamp>
<div class="settings-box first">
<div class="start">
<span>$i18n{savedPrintersTitle}</span>
</div>
</div> </div>
</div>
<settings-cups-saved-printers id="savedPrinters" <settings-cups-saved-printers id="savedPrinters"
active-printer="{{activePrinter}}" active-printer="{{activePrinter}}"
search-term="[[searchTerm]]"> saved-printers="[[savedPrinters_]]"
</settings-cups-saved-printers> search-term="[[searchTerm]]">
</settings-cups-saved-printers>
</template>
<div class="padded first" id="nearbyPrinters"> <div class="padded first" id="nearbyPrinters">
<div>$i18n{nearbyPrintersListTitle}</div> <div>$i18n{nearbyPrintersListTitle}</div>
......
...@@ -14,6 +14,7 @@ Polymer({ ...@@ -14,6 +14,7 @@ Polymer({
behaviors: [ behaviors: [
CrNetworkListenerBehavior, CrNetworkListenerBehavior,
settings.RouteObserverBehavior,
WebUIListenerBehavior, WebUIListenerBehavior,
], ],
...@@ -42,6 +43,15 @@ Polymer({ ...@@ -42,6 +43,15 @@ Polymer({
reflectToAttribute: true, reflectToAttribute: true,
}, },
/**
* @type {!Array<!PrinterListEntry>}
* @private
*/
savedPrinters_: {
type: Array,
value: () => [],
},
/** @private */ /** @private */
showCupsEditPrinterDialog_: Boolean, showCupsEditPrinterDialog_: Boolean,
...@@ -93,9 +103,6 @@ Polymer({ ...@@ -93,9 +103,6 @@ Polymer({
if (this.enableUpdatedUi_) { if (this.enableUpdatedUi_) {
return; return;
} }
this.addWebUIListener(
'on-printers-changed', this.printersChanged_.bind(this));
}, },
/** @override */ /** @override */
...@@ -103,6 +110,21 @@ Polymer({ ...@@ -103,6 +110,21 @@ Polymer({
this.updateCupsPrintersList_(); this.updateCupsPrintersList_();
}, },
/**
* settings.RouteObserverBehavior
* @param {!settings.Route} route
* @protected
*/
currentRouteChanged: function(route) {
if (route != settings.routes.CUPS_PRINTERS) {
cr.removeWebUIListener('on-printers-changed');
return;
}
cr.addWebUIListener(
'on-printers-changed', this.onPrintersChanged_.bind(this));
},
/** /**
* CrosNetworkConfigObserver impl * CrosNetworkConfigObserver impl
* @param {!Array<chromeos.networkConfig.mojom.NetworkStateProperties>} * @param {!Array<chromeos.networkConfig.mojom.NetworkStateProperties>}
...@@ -130,21 +152,13 @@ Polymer({ ...@@ -130,21 +152,13 @@ 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:
if (this.enableUpdatedUi_) { this.updateCupsPrintersList_();
this.$$('#savedPrinters').updateSavedPrintersList();
} else {
this.updateCupsPrintersList_();
}
this.addPrinterResultText_ = this.addPrinterResultText_ =
loadTimeData.getStringF('printerAddedSuccessfulMessage', loadTimeData.getStringF('printerAddedSuccessfulMessage',
printerName); printerName);
break; break;
case PrinterSetupResult.EDIT_SUCCESS: case PrinterSetupResult.EDIT_SUCCESS:
if (this.enableUpdatedUi_) { this.updateCupsPrintersList_();
this.$$('#savedPrinters').updateSavedPrintersList();
} else {
this.updateCupsPrintersList_();
}
this.addPrinterResultText_ = this.addPrinterResultText_ =
loadTimeData.getStringF('printerEditedSuccessfulMessage', loadTimeData.getStringF('printerEditedSuccessfulMessage',
printerName); printerName);
...@@ -176,15 +190,22 @@ Polymer({ ...@@ -176,15 +190,22 @@ Polymer({
updateCupsPrintersList_: function() { updateCupsPrintersList_: function() {
settings.CupsPrintersBrowserProxyImpl.getInstance() settings.CupsPrintersBrowserProxyImpl.getInstance()
.getCupsPrintersList() .getCupsPrintersList()
.then(this.printersChanged_.bind(this)); .then(this.onPrintersChanged_.bind(this));
}, },
/** /**
* @param {!CupsPrintersList} cupsPrintersList * @param {!CupsPrintersList} cupsPrintersList
* @private * @private
*/ */
printersChanged_: function(cupsPrintersList) { onPrintersChanged_: function(cupsPrintersList) {
this.printers = cupsPrintersList.printerList; if (this.enableUpdatedUi_) {
this.savedPrinters_ = cupsPrintersList.printerList.map(
printer => /** @type {!PrinterListEntry} */({
printerInfo: printer,
printerType: PrinterType.SAVED}));
} else {
this.printers = cupsPrintersList.printerList;
}
}, },
/** @private */ /** @private */
...@@ -235,5 +256,13 @@ Polymer({ ...@@ -235,5 +256,13 @@ Polymer({
addPrinterButtonActive_: function( addPrinterButtonActive_: function(
connectedToNetwork, userNativePrintersAllowed) { connectedToNetwork, userNativePrintersAllowed) {
return connectedToNetwork && userNativePrintersAllowed; return connectedToNetwork && userNativePrintersAllowed;
},
/**
* @return {boolean} Whether |savedPrinters_| is empty.
* @private
*/
doesAccountHaveSavedPrinters_: function() {
return !!this.savedPrinters_.length;
} }
}); });
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
</cr-action-menu> </cr-action-menu>
<style include="settings-shared"></style> <style include="settings-shared"></style>
<settings-cups-printers-entry-list printers="[[savedPrinters_]]" <settings-cups-printers-entry-list printers="[[savedPrinters]]"
search-term="[[searchTerm]]"> search-term="[[searchTerm]]">
</settings-cups-printers-entry-list> </settings-cups-printers-entry-list>
</template> </template>
......
...@@ -14,17 +14,13 @@ Polymer({ ...@@ -14,17 +14,13 @@ Polymer({
], ],
properties: { properties: {
/** /** @type {!Array<!PrinterListEntry>} */
* @type {!Array<!PrinterListEntry>} savedPrinters: {
* @private
*/
savedPrinters_: {
type: Array, type: Array,
value: () => [],
}, },
/** /**
* Search term for filtering |savedPrinters_|. * Search term for filtering |savedPrinters|.
* @type {string} * @type {string}
*/ */
searchTerm: { searchTerm: {
...@@ -60,35 +56,6 @@ Polymer({ ...@@ -60,35 +56,6 @@ Polymer({
this.browserProxy_ = settings.CupsPrintersBrowserProxyImpl.getInstance(); this.browserProxy_ = settings.CupsPrintersBrowserProxyImpl.getInstance();
}, },
/** @override */
ready: function() {
this.addWebUIListener(
'on-printers-changed', this.printersChanged_.bind(this));
this.updateSavedPrintersList();
},
/** Public function to update the printer list. */
updateSavedPrintersList: function() {
settings.CupsPrintersBrowserProxyImpl.getInstance()
.getCupsPrintersList()
.then(this.printersChanged_.bind(this));
},
/**
* @param {!CupsPrintersList} cupsPrintersList
* @private
*/
printersChanged_: function(cupsPrintersList) {
if (!cupsPrintersList) {
return;
}
this.savedPrinters_ = cupsPrintersList.printerList.map(
printer => /** @type {!PrinterListEntry} */({
printerInfo: printer,
printerType: PrinterType.SAVED}));
},
/** /**
* @param {!CustomEvent<{target: !HTMLElement, item: !PrinterListEntry}>} e * @param {!CustomEvent<{target: !HTMLElement, item: !PrinterListEntry}>} e
* @private * @private
...@@ -96,10 +63,10 @@ Polymer({ ...@@ -96,10 +63,10 @@ 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 == item.printerInfo); printer => printer.printerInfo == item.printerInfo);
this.activePrinter = this.activePrinter =
this.get(['savedPrinters_', this.activePrinterListEntryIndex_]) this.get(['savedPrinters', this.activePrinterListEntryIndex_])
.printerInfo; .printerInfo;
const target = /** @type {!HTMLElement} */ (e.detail.target); const target = /** @type {!HTMLElement} */ (e.detail.target);
...@@ -115,7 +82,6 @@ Polymer({ ...@@ -115,7 +82,6 @@ Polymer({
/** @private */ /** @private */
onRemoveTap_: function() { onRemoveTap_: function() {
this.splice('savedPrinters_', this.activePrinterListEntryIndex_, 1);
this.browserProxy_.removeCupsPrinter( this.browserProxy_.removeCupsPrinter(
this.activePrinter.printerId, this.activePrinter.printerName); this.activePrinter.printerId, this.activePrinter.printerName);
this.activePrinter = null; this.activePrinter = null;
......
...@@ -130,34 +130,52 @@ function verifyPrintersList(entryList, printerList) { ...@@ -130,34 +130,52 @@ function verifyPrintersList(entryList, printerList) {
} }
/** /**
* Removes a saved printer located at |index| and then verify that saved * Removes a saved printer located at |index|.
* printers list is updated accordingly.
* @param {!TestCupsPrintersBrowserProxy} cupsPrintersBrowserProxy * @param {!TestCupsPrintersBrowserProxy} cupsPrintersBrowserProxy
* @param {!HTMLElement} savedPrinters * @param {!HTMLElement} savedPrintersElement
* @param {!HTMLElement} entryList
* @param {!Array<!CupsPrinterInfo>} printerList
* @param {number} index * @param {number} index
* @return {!Promise} * @return {!Promise}
*/ */
function removeAndVerifyPrinters( function removePrinter(cupsPrintersBrowserProxy, savedPrintersElement, index) {
cupsPrintersBrowserProxy, savedPrinters, entryList, printerList, index) { let printerList = cupsPrintersBrowserProxy.printerList.printerList;
clickThreeDotMenu(entryList[index]); let savedPrinterEntries = getPrinterEntries(savedPrintersElement);
savedPrinters.$$('#removeButton').click();
clickThreeDotMenu(savedPrinterEntries[index]);
savedPrintersElement.$$('#removeButton').click();
return cupsPrintersBrowserProxy.whenCalled('removeCupsPrinter') return cupsPrintersBrowserProxy.whenCalled('removeCupsPrinter')
.then(function() { .then(function() {
// Simulate removing the printer from |cupsPrintersBrowserProxy|. // Simulate removing the printer from |cupsPrintersBrowserProxy|.
printerList.splice(index, 1); printerList.splice(index, 1);
// Simuluate saved printer changes.
cr.webUIListenerCallback(
'on-printers-changed', cupsPrintersBrowserProxy.printerList);
Polymer.dom.flush(); Polymer.dom.flush();
return cupsPrintersBrowserProxy.whenCalled('getCupsPrintersList');
})
.then(function() {
entryList = getPrinterEntries(savedPrinters);
verifyPrintersList(entryList, printerList);
}); });
} }
/**
* Removes all saved printers through recursion.
* @param {!TestCupsPrintersBrowserProxy} cupsPrintersBrowserProxy
* @param {!HTMLElement} savedPrintersElement
* @return {!Promise}
*/
function removeAllPrinters(cupsPrintersBrowserProxy, savedPrintersElement) {
let printerList = cupsPrintersBrowserProxy.printerList.printerList;
let savedPrinterEntries = getPrinterEntries(savedPrintersElement);
if (!printerList.length) {
return Promise.resolve();
}
return removePrinter(
cupsPrintersBrowserProxy, savedPrintersElement, 0 /* index */)
.then(test_util.flushTasks)
.then(removeAllPrinters.bind(
this, cupsPrintersBrowserProxy, savedPrintersElement));
}
/** /**
* @param {string} printerName * @param {string} printerName
* @param {string} printerAddress * @param {string} printerAddress
...@@ -237,6 +255,8 @@ suite('CupsSavedPrintersTests', function() { ...@@ -237,6 +255,8 @@ suite('CupsSavedPrintersTests', function() {
api_.enableNetworkType('WiFi'); api_.enableNetworkType('WiFi');
PolymerTest.clearBody(); PolymerTest.clearBody();
settings.navigateTo(settings.routes.CUPS_PRINTERS);
page = document.createElement('settings-cups-printers'); page = document.createElement('settings-cups-printers');
// Enable feature flag to show the new saved printers list. // Enable feature flag to show the new saved printers list.
// TODO(jimmyxgong): Remove this line when the feature flag is removed. // TODO(jimmyxgong): Remove this line when the feature flag is removed.
...@@ -245,9 +265,6 @@ suite('CupsSavedPrintersTests', function() { ...@@ -245,9 +265,6 @@ suite('CupsSavedPrintersTests', function() {
assertTrue(!!page); assertTrue(!!page);
Polymer.dom.flush(); Polymer.dom.flush();
savedPrintersElement = page.$$('settings-cups-saved-printers');
assertTrue(!!savedPrintersElement);
}); });
teardown(function() { teardown(function() {
...@@ -260,49 +277,63 @@ suite('CupsSavedPrintersTests', function() { ...@@ -260,49 +277,63 @@ suite('CupsSavedPrintersTests', function() {
}); });
test('SavedPrintersSuccessfullyPopulates', function() { test('SavedPrintersSuccessfullyPopulates', function() {
// List component contained by CupsSavedPrinters. // Wait for saved printers to populate.
const savedPrintersList = return test_util.flushTasks().then(() => {
savedPrintersElement.$$('settings-cups-printers-entry-list'); savedPrintersElement = page.$$('settings-cups-saved-printers');
assertTrue(!!savedPrintersElement);
return cupsPrintersBrowserProxy.whenCalled('getCupsPrintersList') // List component contained by CupsSavedPrinters.
.then(function() { const savedPrintersList =
// Wait for saved printers to populate. savedPrintersElement.$$('settings-cups-printers-entry-list');
Polymer.dom.flush();
const printerListEntries = getPrinterEntries(savedPrintersElement); const printerListEntries = getPrinterEntries(savedPrintersElement);
verifyPrintersList(printerListEntries, printerList); verifyPrintersList(printerListEntries, printerList);
}); });
}); });
test('SuccessfullyRemoveMultipleSavedPrinters', function() { test('SuccessfullyRemoveMultipleSavedPrinters', function() {
let savedPrinterEntries = []; let savedPrinterEntries = [];
return cupsPrintersBrowserProxy.whenCalled('getCupsPrintersList') // Wait for saved printers to populate.
.then(function() { return test_util.flushTasks()
// Wait for saved printers to populate. .then(() => {
Polymer.dom.flush(); savedPrintersElement = page.$$('settings-cups-saved-printers');
assertTrue(!!savedPrintersElement);
return removeAllPrinters(
cupsPrintersBrowserProxy, savedPrintersElement);
})
.then(() => {
let entryList = getPrinterEntries(savedPrintersElement);
verifyPrintersList(entryList, printerList);
});
});
test('HideSavedPrintersWhenEmpty', function() {
// List component contained by CupsSavedPrinters.
let savedPrintersList = [];
let savedPrinterEntries = [];
// Wait for saved printers to populate.
return test_util.flushTasks()
.then(() => {
savedPrintersElement = page.$$('settings-cups-saved-printers');
assertTrue(!!savedPrintersElement);
savedPrintersList =
savedPrintersElement.$$('settings-cups-printers-entry-list');
savedPrinterEntries = getPrinterEntries(savedPrintersElement); savedPrinterEntries = getPrinterEntries(savedPrintersElement);
return removeAndVerifyPrinters( verifyPrintersList(savedPrinterEntries, printerList);
cupsPrintersBrowserProxy, savedPrintersElement,
savedPrinterEntries, printerList, 1 /** index */); assertTrue(!!page.$$('#savedPrinters'));
})
.then(function() { return removeAllPrinters(
return removeAndVerifyPrinters( cupsPrintersBrowserProxy, savedPrintersElement);
cupsPrintersBrowserProxy, savedPrintersElement,
savedPrinterEntries, printerList, 0 /** index */);
})
.then(function() {
return removeAndVerifyPrinters(
cupsPrintersBrowserProxy, savedPrintersElement,
savedPrinterEntries, printerList, 1 /** index */);
}) })
.then(function() { .then(() => {
return removeAndVerifyPrinters( assertFalse(!!page.$$('#savedPrinters'));
cupsPrintersBrowserProxy, savedPrintersElement,
savedPrinterEntries, printerList, 0 /** index */);
}); });
}); });
...@@ -312,10 +343,11 @@ suite('CupsSavedPrintersTests', function() { ...@@ -312,10 +343,11 @@ suite('CupsSavedPrintersTests', function() {
let editDialog = null; let editDialog = null;
let savedPrinterEntries = null; let savedPrinterEntries = null;
return cupsPrintersBrowserProxy.whenCalled('getCupsPrintersList') // Wait for saved printers to populate.
.then(function() { return test_util.flushTasks()
// Wait for saved printers to populate. .then(() => {
Polymer.dom.flush(); savedPrintersElement = page.$$('settings-cups-saved-printers');
assertTrue(!!savedPrintersElement);
savedPrinterEntries = getPrinterEntries(savedPrintersElement); savedPrinterEntries = getPrinterEntries(savedPrintersElement);
...@@ -339,7 +371,7 @@ suite('CupsSavedPrintersTests', function() { ...@@ -339,7 +371,7 @@ suite('CupsSavedPrintersTests', function() {
return cupsPrintersBrowserProxy.whenCalled('updateCupsPrinter'); return cupsPrintersBrowserProxy.whenCalled('updateCupsPrinter');
}) })
.then(function() { .then(() => {
assertEquals(expectedName, editDialog.activePrinter.printerName); assertEquals(expectedName, editDialog.activePrinter.printerName);
// Mimic changes to |cupsPrintersBrowserProxy.printerList|. // Mimic changes to |cupsPrintersBrowserProxy.printerList|.
...@@ -356,10 +388,11 @@ suite('CupsSavedPrintersTests', function() { ...@@ -356,10 +388,11 @@ suite('CupsSavedPrintersTests', function() {
let savedPrinterEntries = null; let savedPrinterEntries = null;
let editDialog = null; let editDialog = null;
return cupsPrintersBrowserProxy.whenCalled('getCupsPrintersList') // Wait for saved printers to populate.
.then(function() { return test_util.flushTasks()
// Wait for saved printers to populate. .then(() => {
Polymer.dom.flush(); savedPrintersElement = page.$$('settings-cups-saved-printers');
assertTrue(!!savedPrintersElement);
savedPrinterEntries = getPrinterEntries(savedPrintersElement); savedPrinterEntries = getPrinterEntries(savedPrintersElement);
...@@ -387,7 +420,7 @@ suite('CupsSavedPrintersTests', function() { ...@@ -387,7 +420,7 @@ suite('CupsSavedPrintersTests', function() {
return cupsPrintersBrowserProxy.whenCalled('reconfigureCupsPrinter'); return cupsPrintersBrowserProxy.whenCalled('reconfigureCupsPrinter');
}) })
.then(function() { .then(() => {
assertEquals(expectedName, editDialog.activePrinter.printerName); assertEquals(expectedName, editDialog.activePrinter.printerName);
assertEquals( assertEquals(
expectedAddress, editDialog.activePrinter.printerAddress); expectedAddress, editDialog.activePrinter.printerAddress);
...@@ -458,6 +491,8 @@ suite('CupsNearbyPrintersTests', function() { ...@@ -458,6 +491,8 @@ suite('CupsNearbyPrintersTests', function() {
setNetworksForTest(api_, activeNetworks_); setNetworksForTest(api_, activeNetworks_);
PolymerTest.clearBody(); PolymerTest.clearBody();
settings.navigateTo(settings.routes.CUPS_PRINTERS);
page = document.createElement('settings-cups-printers'); page = document.createElement('settings-cups-printers');
// Enable feature flag to show the new saved printers list. // Enable feature flag to show the new saved printers list.
// TODO(jimmyxgong): Remove this line when the feature flag is removed. // TODO(jimmyxgong): Remove this line when the feature flag is removed.
......
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