Commit c2907968 authored by Daniel Classon's avatar Daniel Classon Committed by Commit Bot

[OsSettingsDeepLinking] Add deep links to the Printing Page

Adds deep links to the Printing Page and the CUPS Printers subpage. Adds
a new test for the Printing Page.

Bug: 1084154
Change-Id: I2695fb9817a29ec7bcbd9c42b141cff0bad7dd4c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2391603Reviewed-by: default avatarKyle Horimoto <khorimoto@chromium.org>
Reviewed-by: default avatarJimmy Gong <jimmyxgong@chromium.org>
Commit-Queue: Daniel Classon <dclasson@google.com>
Cr-Commit-Position: refs/heads/master@{#804350}
parent 156a9bb5
......@@ -108,6 +108,7 @@ js_library("cups_printers") {
":cups_printers_browser_proxy",
":cups_printers_entry_manager",
":cups_saved_printers",
"..:deep_linking_behavior",
"..:os_route",
"../..:router",
"../localized_link:localized_link",
......@@ -165,6 +166,7 @@ js_library("cups_saved_printers") {
js_library("os_printing_page") {
deps = [
"..:deep_linking_behavior",
"..:os_route",
"../..:router",
"../../settings_page:settings_animated_pages",
......@@ -285,6 +287,7 @@ js_library("cups_printers.m") {
":cups_printer_types.m",
":cups_printers_browser_proxy.m",
":cups_settings_add_printer_dialog.m",
"..:deep_linking_behavior.m",
"..:os_route.m",
"../..:router.m",
"//ui/webui/resources/cr_components/chromeos/network:network_listener_behavior.m",
......@@ -342,6 +345,7 @@ js_library("os_printing_page.m") {
sources = [ "$root_gen_dir/chrome/browser/resources/settings/chromeos/os_printing_page/os_printing_page.m.js" ]
deps = [
":cups_printers_browser_proxy.m",
"..:deep_linking_behavior.m",
"..:os_route.m",
"../..:router.m",
"//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled",
......
......@@ -24,6 +24,7 @@
<link rel="import" href="cups_nearby_printers.html">
<link rel="import" href="../localized_link/localized_link.html">
<link rel="import" href="../../icons.html">
<link rel="import" href="../deep_linking_behavior.html">
<link rel="import" href="../os_route.html">
<link rel="import" href="../../router.html">
<link rel="import" href="./cups_printers_browser_proxy.html">
......@@ -141,7 +142,8 @@
on-click="onAddPrinterTap_"
disabled="[[!addPrinterButtonActive_(canAddPrinter,
prefs.native_printing.user_native_printers_allowed.value)]]"
title="$i18n{addCupsPrinter}">
title="$i18n{addCupsPrinter}"
deep-link-focus-id$="[[Setting.kAddPrinter]]">
</cr-icon-button>
</div>
</div>
......
......@@ -13,6 +13,7 @@ Polymer({
is: 'settings-cups-printers',
behaviors: [
DeepLinkingBehavior,
NetworkListenerBehavior,
settings.RouteObserverBehavior,
WebUIListenerBehavior,
......@@ -85,6 +86,18 @@ Polymer({
type: Number,
value: 0,
},
/**
* Used by DeepLinkingBehavior to focus this page's deep links.
* @type {!Set<!chromeos.settings.mojom.Setting>}
*/
supportedSettingIds: {
type: Object,
value: () => new Set([
chromeos.settings.mojom.Setting.kAddPrinter,
chromeos.settings.mojom.Setting.kSavedPrinters,
]),
},
},
listeners: {
......@@ -127,6 +140,33 @@ Polymer({
this.updateCupsPrintersList_();
},
/**
* Overridden from DeepLinkingBehavior.
* @param {!chromeos.settings.mojom.Setting} settingId
* @return {boolean}
*/
beforeDeepLinkAttempt(settingId) {
// Manually show the deep links for settings nested within elements.
if (settingId !== chromeos.settings.mojom.Setting.kSavedPrinters) {
// Continue with deep link attempt.
return true;
}
Polymer.RenderStatus.afterNextRender(this, () => {
const savedPrinters = this.$$('#savedPrinters');
const printerEntry =
savedPrinters && savedPrinters.$$('settings-cups-printers-entry');
const deepLinkElement = printerEntry && printerEntry.$$('#moreActions');
if (!deepLinkElement || deepLinkElement.hidden) {
console.warn(`Element with deep link id ${settingId} not focusable.`);
return;
}
this.showDeepLinkElement(deepLinkElement);
});
// Stop deep link attempt since we completed it manually.
return false;
},
/**
* settings.RouteObserverBehavior
* @param {!settings.Route} route
......@@ -147,6 +187,7 @@ Polymer({
this.onPrintersChangedListener_ = cr.addWebUIListener(
'on-printers-changed', this.onPrintersChanged_.bind(this));
this.updateCupsPrintersList_();
this.attemptDeepLink();
},
/**
......
......@@ -24,8 +24,9 @@
</div>
</div>
<template is="dom-if" if="[[isSavedPrinter_(printerEntry.printerType)]]">
<cr-icon-button class="icon-more-vert" on-click="onOpenActionMenuTap_"
title="$i18n{moreActions}" aria-labelledby="printerName">
<cr-icon-button id="moreActions" class="icon-more-vert"
on-click="onOpenActionMenuTap_" title="$i18n{moreActions}"
aria-labelledby="printerName">
</cr-icon-button>
</template>
<template is="dom-if"
......
......@@ -2,6 +2,7 @@
<link rel="import" href="chrome://resources/html/assert.html">
<link rel="import" href="chrome://resources/html/load_time_data.html">
<link rel="import" href="../deep_linking_behavior.html">
<link rel="import" href="../os_route.html">
<link rel="import" href="../../router.html">
<link rel="import" href="../../settings_page/settings_animated_pages.html">
......@@ -25,7 +26,7 @@
on-click="onOpenPrintManagement_"
label="$i18n{printJobsTitle}"
sub-label="$i18n{printJobsSublabel}"
external>
external deep-link-focus-id$="[[Setting.kPrintJobs]]">
</cr-link-row>
</template>
</div>
......
......@@ -5,6 +5,11 @@
Polymer({
is: 'os-settings-printing-page',
behaviors: [
DeepLinkingBehavior,
settings.RouteObserverBehavior,
],
properties: {
/** Preferences state. */
prefs: {
......@@ -35,6 +40,28 @@ Polymer({
return loadTimeData.getBoolean('printManagementEnabled');
}
},
/**
* Used by DeepLinkingBehavior to focus this page's deep links.
* @type {!Set<!chromeos.settings.mojom.Setting>}
*/
supportedSettingIds: {
type: Object,
value: () => new Set([chromeos.settings.mojom.Setting.kPrintJobs]),
},
},
/**
* @param {!settings.Route} route
* @param {!settings.Route} oldRoute
*/
currentRouteChanged(route, oldRoute) {
// Does not apply to this page.
if (route !== settings.routes.OS_PRINTING) {
return;
}
this.attemptDeepLink();
},
/** @private */
......
......@@ -289,6 +289,7 @@ if (include_js_tests) {
"$root_gen_dir/chrome/test/data/webui/settings/chromeos/os_reset_page_test.m.js",
"$root_gen_dir/chrome/test/data/webui/settings/chromeos/os_people_page_test.m.js",
"$root_gen_dir/chrome/test/data/webui/settings/chromeos/os_privacy_page_test.m.js",
"$root_gen_dir/chrome/test/data/webui/settings/chromeos/os_printing_page_tests.m.js",
"$root_gen_dir/chrome/test/data/webui/settings/chromeos/smb_shares_page_tests.m.js",
"$root_gen_dir/chrome/test/data/webui/settings/chromeos/os_files_page_test.m.js",
"$root_gen_dir/chrome/test/data/webui/settings/chromeos/parental_controls_page_test.m.js",
......
......@@ -52,6 +52,7 @@ js_modulizer("modulize") {
"os_languages_page_tests.js",
"os_languages_page_v2_tests.js",
"os_reset_page_test.js",
"os_printing_page_tests.js",
"os_people_page_test.js",
"os_privacy_page_test.js",
"smb_shares_page_tests.js",
......
......@@ -14,6 +14,8 @@
// #import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
// #import {flushTasks} from '../../test_util.m.js';
// #import {getPrinterEntries} from './cups_printer_test_utils.m.js';
// #import {getDeepActiveElement} from 'chrome://resources/js/util.m.js';
// #import {waitAfterNextRender} from 'chrome://test/test_util.m.js';
// clang-format on
/**
......@@ -613,6 +615,36 @@ suite('CupsSavedPrintersTests', function() {
});
});
test('Deep link to saved printers', async () => {
loadTimeData.overrideValues({
isDeepLinkingEnabled: true,
});
createCupsPrinterPage([
cups_printer_test_util.createCupsPrinterInfo('google', '4', 'id4'),
cups_printer_test_util.createCupsPrinterInfo('test1', '1', 'id1'),
cups_printer_test_util.createCupsPrinterInfo('test2', '2', 'id2'),
cups_printer_test_util.createCupsPrinterInfo('test3', '3', 'id3'),
]);
await cupsPrintersBrowserProxy.whenCalled('getCupsPrintersList');
const params = new URLSearchParams;
params.append('settingId', '1401');
settings.Router.getInstance().navigateTo(
settings.routes.CUPS_PRINTERS, params);
Polymer.dom.flush();
const savedPrinters = page.$$('settings-cups-saved-printers');
const printerEntry =
savedPrinters && savedPrinters.$$('settings-cups-printers-entry');
const deepLinkElement = printerEntry && printerEntry.$$('#moreActions');
await test_util.waitAfterNextRender(deepLinkElement);
assertEquals(
deepLinkElement, getDeepActiveElement(),
'First saved printer menu button should be focused for settingId=1401.');
});
test('ShowMoreButtonIsInitiallyHiddenAndANewPrinterIsAdded', function() {
createCupsPrinterPage([
cups_printer_test_util.createCupsPrinterInfo('google', '4', 'id4'),
......
// Copyright 2020 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.
// clang-format off
// #import 'chrome://os-settings/chromeos/lazy_load.js';
// #import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js';
// #import {flush} from'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
// #import {assertEquals, assertFalse, assertTrue} from '../../chai_assert.js';
// #import {getDeepActiveElement} from 'chrome://resources/js/util.m.js';
// #import {Router, routes} from 'chrome://os-settings/chromeos/os_settings.js';
// #import {waitAfterNextRender} from 'chrome://test/test_util.m.js';
// clang-format on
suite('PrintingPageTests', function() {
/** @type {SettingsPrintingPageElement} */
let printingPage = null;
setup(function() {
PolymerTest.clearBody();
printingPage = document.createElement('os-settings-printing-page');
document.body.appendChild(printingPage);
Polymer.dom.flush();
});
teardown(function() {
printingPage.remove();
settings.Router.getInstance().resetRouteForTesting();
});
test('Deep link to print jobs', async () => {
loadTimeData.overrideValues({
isDeepLinkingEnabled: true,
});
const params = new URLSearchParams;
params.append('settingId', '1402');
settings.Router.getInstance().navigateTo(
settings.routes.OS_PRINTING, params);
Polymer.dom.flush();
const deepLinkElement =
printingPage.$$('#printManagement').$$('cr-icon-button');
await test_util.waitAfterNextRender(deepLinkElement);
assertEquals(
deepLinkElement, getDeepActiveElement(),
'Print jobs button should be focused for settingId=1402.');
});
});
\ No newline at end of file
......@@ -1443,6 +1443,28 @@ TEST_F(
});
GEN('#endif');
// Tests for the OS Printing page.
// eslint-disable-next-line no-var
var OSSettingsPrintingPageTest = class extends OSSettingsBrowserTest {
/** @override */
get browsePreload() {
return super.browsePreload +
'chromeos/os_printing_page/os_printing_page.html';
}
/** @override */
get extraLibraries() {
return super.extraLibraries.concat([
BROWSER_SETTINGS_PATH + '../test_util.js',
'os_printing_page_tests.js',
]);
}
};
TEST_F('OSSettingsPrintingPageTest', 'AllJsTests', () => {
mocha.run();
});
// Tests for the CUPS printer entry.
// eslint-disable-next-line no-var
var OSSettingsCupsPrinterEntryTest = class extends OSSettingsBrowserTest {
......
......@@ -91,6 +91,7 @@ TEST_F('OSSettingsOsLanguagesPageV2V3Test', 'All', () => mocha.run());
['PeoplePageChangePicture', 'people_page_change_picture_test.m.js'],
['PeoplePageKerberosAccounts', 'people_page_kerberos_accounts_test.m.js'],
['PersonalizationPage', 'personalization_page_test.m.js'],
['PrintingPage', 'os_printing_page_tests.m.js'],
['PrivacyPage', 'os_privacy_page_test.m.js'],
['SmbPage', 'smb_shares_page_tests.m.js'],
['FilesPage', 'os_files_page_test.m.js'],
......
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