Commit a8a024c7 authored by Matt Menard's avatar Matt Menard Committed by Chromium LUCI CQ

Always update print servers config

This addresses the issue when the print servers config is updated before
the print destination dialog is open which causes the print servers
names never to be populated and doesn't allow print servers to be
updated in this case.

Bug: b:168650771
Change-Id: Ia8ec86d9660f86e05342247bed2f171ea13cf019
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2623110
Commit-Queue: Matt Menard <mattme@google.com>
Reviewed-by: default avatarRebekah Potter <rbpotter@chromium.org>
Cr-Commit-Position: refs/heads/master@{#844001}
parent 53378481
...@@ -66,8 +66,11 @@ export class PrintServerStore extends EventTarget { ...@@ -66,8 +66,11 @@ export class PrintServerStore extends EventTarget {
* Gets the currently available print servers and fetching mode. * Gets the currently available print servers and fetching mode.
* @return {!Promise<!PrintServersConfig>} The print servers configuration. * @return {!Promise<!PrintServersConfig>} The print servers configuration.
*/ */
getPrintServersConfig() { async getPrintServersConfig() {
return this.nativeLayerCros_.getPrintServersConfig(); const printServersConfig =
await this.nativeLayerCros_.getPrintServersConfig();
this.updatePrintServersConfig(printServersConfig);
return printServersConfig;
} }
/** /**
...@@ -83,6 +86,23 @@ export class PrintServerStore extends EventTarget { ...@@ -83,6 +86,23 @@ export class PrintServerStore extends EventTarget {
* configuration. * configuration.
*/ */
onPrintServersConfigChanged_(printServersConfig) { onPrintServersConfigChanged_(printServersConfig) {
this.updatePrintServersConfig(printServersConfig);
const eventData = {
printServerNames: Array.from(this.printServersByName_.keys()),
isSingleServerFetchingMode: this.isSingleServerFetchingMode_
};
this.dispatchEvent(new CustomEvent(
PrintServerStore.EventType.PRINT_SERVERS_CHANGED, {detail: eventData}));
}
/**
* Updates the print servers configuration when new print servers and fetching
* mode are available.
* @param {!PrintServersConfig} printServersConfig The print servers
* configuration.
* @private
*/
updatePrintServersConfig(printServersConfig) {
this.isSingleServerFetchingMode_ = this.isSingleServerFetchingMode_ =
printServersConfig.isSingleServerFetchingMode; printServersConfig.isSingleServerFetchingMode;
this.printServersByName_ = new Map(); this.printServersByName_ = new Map();
...@@ -93,12 +113,6 @@ export class PrintServerStore extends EventTarget { ...@@ -93,12 +113,6 @@ export class PrintServerStore extends EventTarget {
this.printServersByName_.set(printServer.name, [printServer]); this.printServersByName_.set(printServer.name, [printServer]);
} }
} }
const eventData = {
printServerNames: Array.from(this.printServersByName_.keys()),
isSingleServerFetchingMode: this.isSingleServerFetchingMode_
};
this.dispatchEvent(new CustomEvent(
PrintServerStore.EventType.PRINT_SERVERS_CHANGED, {detail: eventData}));
} }
/** /**
......
...@@ -105,7 +105,18 @@ class PrintPreviewHandlerChromeOS::AccessTokenService ...@@ -105,7 +105,18 @@ class PrintPreviewHandlerChromeOS::AccessTokenService
PrintPreviewHandlerChromeOS::PrintPreviewHandlerChromeOS() {} PrintPreviewHandlerChromeOS::PrintPreviewHandlerChromeOS() {}
PrintPreviewHandlerChromeOS::~PrintPreviewHandlerChromeOS() {} PrintPreviewHandlerChromeOS::~PrintPreviewHandlerChromeOS() {
if (!base::FeatureList::IsEnabled(chromeos::features::kPrintServerScaling)) {
return;
}
Profile* profile = Profile::FromWebUI(web_ui());
auto* cups_manager =
CupsPrintersManagerFactory::GetForBrowserContext(profile);
if (cups_manager) {
auto* print_servers_manager = cups_manager->GetPrintServersManager();
print_servers_manager->RemoveObserver(this);
}
}
void PrintPreviewHandlerChromeOS::RegisterMessages() { void PrintPreviewHandlerChromeOS::RegisterMessages() {
web_ui()->RegisterMessageCallback( web_ui()->RegisterMessageCallback(
......
...@@ -153,4 +153,9 @@ export class NativeLayerCrosStub extends TestBrowserProxy { ...@@ -153,4 +153,9 @@ export class NativeLayerCrosStub extends TestBrowserProxy {
this.methodCalled('getPrintServersConfig'); this.methodCalled('getPrintServersConfig');
return Promise.resolve(this.printServersConfig_); return Promise.resolve(this.printServersConfig_);
} }
/** @param {!PrintServersConfig} printServersConfig */
setPrintServersConfig(printServersConfig) {
this.printServersConfig_ = printServersConfig;
}
} }
...@@ -675,6 +675,13 @@ TEST_F( ...@@ -675,6 +675,13 @@ TEST_F(
this.runMochaTest(print_server_store_test.TestNames.PrintServersChanged); this.runMochaTest(print_server_store_test.TestNames.PrintServersChanged);
}); });
TEST_F(
'PrintPreviewPrintServerStoreTestCros', 'GetPrintServersConfig',
function() {
this.runMochaTest(
print_server_store_test.TestNames.GetPrintServersConfig);
});
TEST_F( TEST_F(
'PrintPreviewPrintServerStoreTestCros', 'ServerPrintersLoading', 'PrintPreviewPrintServerStoreTestCros', 'ServerPrintersLoading',
function() { function() {
......
...@@ -17,6 +17,7 @@ print_server_store_test.suiteName = 'PrintServerStoreTest'; ...@@ -17,6 +17,7 @@ print_server_store_test.suiteName = 'PrintServerStoreTest';
/** @enum {string} */ /** @enum {string} */
print_server_store_test.TestNames = { print_server_store_test.TestNames = {
PrintServersChanged: 'print servers changed', PrintServersChanged: 'print servers changed',
GetPrintServersConfig: 'get print servers config',
ServerPrintersLoading: 'server printers loading', ServerPrintersLoading: 'server printers loading',
ChoosePrintServers: 'choose print servers', ChoosePrintServers: 'choose print servers',
}; };
...@@ -99,6 +100,33 @@ suite(print_server_store_test.suiteName, function() { ...@@ -99,6 +100,33 @@ suite(print_server_store_test.suiteName, function() {
assertTrue(printServersChangedEvent.detail.isSingleServerFetchingMode); assertTrue(printServersChangedEvent.detail.isSingleServerFetchingMode);
}); });
// Tests that print servers and fetching mode are updated when
// getPrintServersConfig is called and an update to the print servers config
// occurs.
test(
assert(print_server_store_test.TestNames.GetPrintServersConfig),
async () => {
const printServers = [
{id: 'server1', name: 'Print Server 1'},
{id: 'server2', name: 'Print Server 2'},
];
const expectedPrintServersConfig = {
printServers: printServers,
isSingleServerFetchingMode: true
};
nativeLayerCros.setPrintServersConfig(expectedPrintServersConfig);
const actualPrintServersConfig =
await printServerStore.getPrintServersConfig();
const pendingPrintServerIds =
nativeLayerCros.whenCalled('choosePrintServers');
printServerStore.choosePrintServers('Print Server 1');
assertDeepEquals(['server1'], await pendingPrintServerIds);
assertDeepEquals(printServers, actualPrintServersConfig.printServers);
assertTrue(actualPrintServersConfig.isSingleServerFetchingMode);
});
// Tests that an event is dispatched are updated when SERVER_PRINTERS_LOADING // Tests that an event is dispatched are updated when SERVER_PRINTERS_LOADING
// is called. // is called.
test( test(
......
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