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") { ...@@ -108,6 +108,7 @@ js_library("cups_printers") {
":cups_printers_browser_proxy", ":cups_printers_browser_proxy",
":cups_printers_entry_manager", ":cups_printers_entry_manager",
":cups_saved_printers", ":cups_saved_printers",
"..:deep_linking_behavior",
"..:os_route", "..:os_route",
"../..:router", "../..:router",
"../localized_link:localized_link", "../localized_link:localized_link",
...@@ -165,6 +166,7 @@ js_library("cups_saved_printers") { ...@@ -165,6 +166,7 @@ js_library("cups_saved_printers") {
js_library("os_printing_page") { js_library("os_printing_page") {
deps = [ deps = [
"..:deep_linking_behavior",
"..:os_route", "..:os_route",
"../..:router", "../..:router",
"../../settings_page:settings_animated_pages", "../../settings_page:settings_animated_pages",
...@@ -285,6 +287,7 @@ js_library("cups_printers.m") { ...@@ -285,6 +287,7 @@ js_library("cups_printers.m") {
":cups_printer_types.m", ":cups_printer_types.m",
":cups_printers_browser_proxy.m", ":cups_printers_browser_proxy.m",
":cups_settings_add_printer_dialog.m", ":cups_settings_add_printer_dialog.m",
"..:deep_linking_behavior.m",
"..:os_route.m", "..:os_route.m",
"../..:router.m", "../..:router.m",
"//ui/webui/resources/cr_components/chromeos/network:network_listener_behavior.m", "//ui/webui/resources/cr_components/chromeos/network:network_listener_behavior.m",
...@@ -342,6 +345,7 @@ js_library("os_printing_page.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" ] sources = [ "$root_gen_dir/chrome/browser/resources/settings/chromeos/os_printing_page/os_printing_page.m.js" ]
deps = [ deps = [
":cups_printers_browser_proxy.m", ":cups_printers_browser_proxy.m",
"..:deep_linking_behavior.m",
"..:os_route.m", "..:os_route.m",
"../..:router.m", "../..:router.m",
"//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled", "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled",
......
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
<link rel="import" href="cups_nearby_printers.html"> <link rel="import" href="cups_nearby_printers.html">
<link rel="import" href="../localized_link/localized_link.html"> <link rel="import" href="../localized_link/localized_link.html">
<link rel="import" href="../../icons.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="../os_route.html">
<link rel="import" href="../../router.html"> <link rel="import" href="../../router.html">
<link rel="import" href="./cups_printers_browser_proxy.html"> <link rel="import" href="./cups_printers_browser_proxy.html">
...@@ -141,7 +142,8 @@ ...@@ -141,7 +142,8 @@
on-click="onAddPrinterTap_" on-click="onAddPrinterTap_"
disabled="[[!addPrinterButtonActive_(canAddPrinter, disabled="[[!addPrinterButtonActive_(canAddPrinter,
prefs.native_printing.user_native_printers_allowed.value)]]" prefs.native_printing.user_native_printers_allowed.value)]]"
title="$i18n{addCupsPrinter}"> title="$i18n{addCupsPrinter}"
deep-link-focus-id$="[[Setting.kAddPrinter]]">
</cr-icon-button> </cr-icon-button>
</div> </div>
</div> </div>
......
...@@ -13,6 +13,7 @@ Polymer({ ...@@ -13,6 +13,7 @@ Polymer({
is: 'settings-cups-printers', is: 'settings-cups-printers',
behaviors: [ behaviors: [
DeepLinkingBehavior,
NetworkListenerBehavior, NetworkListenerBehavior,
settings.RouteObserverBehavior, settings.RouteObserverBehavior,
WebUIListenerBehavior, WebUIListenerBehavior,
...@@ -85,6 +86,18 @@ Polymer({ ...@@ -85,6 +86,18 @@ Polymer({
type: Number, type: Number,
value: 0, 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: { listeners: {
...@@ -127,6 +140,33 @@ Polymer({ ...@@ -127,6 +140,33 @@ Polymer({
this.updateCupsPrintersList_(); 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 * settings.RouteObserverBehavior
* @param {!settings.Route} route * @param {!settings.Route} route
...@@ -147,6 +187,7 @@ Polymer({ ...@@ -147,6 +187,7 @@ Polymer({
this.onPrintersChangedListener_ = cr.addWebUIListener( this.onPrintersChangedListener_ = cr.addWebUIListener(
'on-printers-changed', this.onPrintersChanged_.bind(this)); 'on-printers-changed', this.onPrintersChanged_.bind(this));
this.updateCupsPrintersList_(); this.updateCupsPrintersList_();
this.attemptDeepLink();
}, },
/** /**
......
...@@ -24,8 +24,9 @@ ...@@ -24,8 +24,9 @@
</div> </div>
</div> </div>
<template is="dom-if" if="[[isSavedPrinter_(printerEntry.printerType)]]"> <template is="dom-if" if="[[isSavedPrinter_(printerEntry.printerType)]]">
<cr-icon-button class="icon-more-vert" on-click="onOpenActionMenuTap_" <cr-icon-button id="moreActions" class="icon-more-vert"
title="$i18n{moreActions}" aria-labelledby="printerName"> on-click="onOpenActionMenuTap_" title="$i18n{moreActions}"
aria-labelledby="printerName">
</cr-icon-button> </cr-icon-button>
</template> </template>
<template is="dom-if" <template is="dom-if"
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
<link rel="import" href="chrome://resources/html/assert.html"> <link rel="import" href="chrome://resources/html/assert.html">
<link rel="import" href="chrome://resources/html/load_time_data.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="../os_route.html">
<link rel="import" href="../../router.html"> <link rel="import" href="../../router.html">
<link rel="import" href="../../settings_page/settings_animated_pages.html"> <link rel="import" href="../../settings_page/settings_animated_pages.html">
...@@ -25,7 +26,7 @@ ...@@ -25,7 +26,7 @@
on-click="onOpenPrintManagement_" on-click="onOpenPrintManagement_"
label="$i18n{printJobsTitle}" label="$i18n{printJobsTitle}"
sub-label="$i18n{printJobsSublabel}" sub-label="$i18n{printJobsSublabel}"
external> external deep-link-focus-id$="[[Setting.kPrintJobs]]">
</cr-link-row> </cr-link-row>
</template> </template>
</div> </div>
......
...@@ -5,6 +5,11 @@ ...@@ -5,6 +5,11 @@
Polymer({ Polymer({
is: 'os-settings-printing-page', is: 'os-settings-printing-page',
behaviors: [
DeepLinkingBehavior,
settings.RouteObserverBehavior,
],
properties: { properties: {
/** Preferences state. */ /** Preferences state. */
prefs: { prefs: {
...@@ -35,6 +40,28 @@ Polymer({ ...@@ -35,6 +40,28 @@ Polymer({
return loadTimeData.getBoolean('printManagementEnabled'); 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 */ /** @private */
......
...@@ -289,6 +289,7 @@ if (include_js_tests) { ...@@ -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_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_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_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/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/os_files_page_test.m.js",
"$root_gen_dir/chrome/test/data/webui/settings/chromeos/parental_controls_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") { ...@@ -52,6 +52,7 @@ js_modulizer("modulize") {
"os_languages_page_tests.js", "os_languages_page_tests.js",
"os_languages_page_v2_tests.js", "os_languages_page_v2_tests.js",
"os_reset_page_test.js", "os_reset_page_test.js",
"os_printing_page_tests.js",
"os_people_page_test.js", "os_people_page_test.js",
"os_privacy_page_test.js", "os_privacy_page_test.js",
"smb_shares_page_tests.js", "smb_shares_page_tests.js",
......
...@@ -14,6 +14,8 @@ ...@@ -14,6 +14,8 @@
// #import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; // #import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
// #import {flushTasks} from '../../test_util.m.js'; // #import {flushTasks} from '../../test_util.m.js';
// #import {getPrinterEntries} from './cups_printer_test_utils.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 // clang-format on
/** /**
...@@ -613,6 +615,36 @@ suite('CupsSavedPrintersTests', function() { ...@@ -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() { test('ShowMoreButtonIsInitiallyHiddenAndANewPrinterIsAdded', function() {
createCupsPrinterPage([ createCupsPrinterPage([
cups_printer_test_util.createCupsPrinterInfo('google', '4', 'id4'), 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( ...@@ -1443,6 +1443,28 @@ TEST_F(
}); });
GEN('#endif'); 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. // Tests for the CUPS printer entry.
// eslint-disable-next-line no-var // eslint-disable-next-line no-var
var OSSettingsCupsPrinterEntryTest = class extends OSSettingsBrowserTest { var OSSettingsCupsPrinterEntryTest = class extends OSSettingsBrowserTest {
......
...@@ -91,6 +91,7 @@ TEST_F('OSSettingsOsLanguagesPageV2V3Test', 'All', () => mocha.run()); ...@@ -91,6 +91,7 @@ TEST_F('OSSettingsOsLanguagesPageV2V3Test', 'All', () => mocha.run());
['PeoplePageChangePicture', 'people_page_change_picture_test.m.js'], ['PeoplePageChangePicture', 'people_page_change_picture_test.m.js'],
['PeoplePageKerberosAccounts', 'people_page_kerberos_accounts_test.m.js'], ['PeoplePageKerberosAccounts', 'people_page_kerberos_accounts_test.m.js'],
['PersonalizationPage', 'personalization_page_test.m.js'], ['PersonalizationPage', 'personalization_page_test.m.js'],
['PrintingPage', 'os_printing_page_tests.m.js'],
['PrivacyPage', 'os_privacy_page_test.m.js'], ['PrivacyPage', 'os_privacy_page_test.m.js'],
['SmbPage', 'smb_shares_page_tests.m.js'], ['SmbPage', 'smb_shares_page_tests.m.js'],
['FilesPage', 'os_files_page_test.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