blob: 1b312e703f63b3884213eaae8bfbdc4fc46fd40d [file]
// Copyright 2015 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
/** @fileoverview Suite of tests for extension-sidebar. */
import type {ExtensionsSidebarElement} from 'chrome://extensions/extensions.js';
import {navigation, Page} from 'chrome://extensions/extensions.js';
import {assertDeepEquals, assertEquals, assertFalse, assertTrue} from 'chrome://webui-test/chai_assert.js';
import {eventToPromise, microtasksFinished} from 'chrome://webui-test/test_util.js';
import {testVisible} from './test_util.js';
suite('ExtensionSidebarTest', function() {
let sidebar: ExtensionsSidebarElement;
setup(function() {
document.body.innerHTML = window.trustedTypes!.emptyHTML;
sidebar = document.createElement('extensions-sidebar');
sidebar.enableEnhancedSiteControls = false;
document.body.appendChild(sidebar);
});
test('SetSelected', async function() {
const selector = '.cr-nav-menu-item.selected';
assertFalse(!!sidebar.shadowRoot.querySelector(selector));
window.history.replaceState(undefined, '', '/shortcuts');
document.body.innerHTML = window.trustedTypes!.emptyHTML;
sidebar = document.createElement('extensions-sidebar');
document.body.appendChild(sidebar);
let whenSelected = eventToPromise('iron-select', sidebar.$.sectionMenu);
await whenSelected;
assertEquals(
sidebar.shadowRoot.querySelector(selector)!.id, 'sectionsShortcuts');
window.history.replaceState(undefined, '', '/');
document.body.innerHTML = window.trustedTypes!.emptyHTML;
sidebar = document.createElement('extensions-sidebar');
document.body.appendChild(sidebar);
whenSelected = eventToPromise('iron-select', sidebar.$.sectionMenu);
await whenSelected;
assertEquals(
sidebar.shadowRoot.querySelector(selector)!.id, 'sectionsExtensions');
});
test(
'LayoutAndClickHandlers', async () => {
const boundTestVisible = testVisible.bind(null, sidebar);
boundTestVisible('#sectionsExtensions', true);
// The site permissions link should not be visible if
// enableEnhancedSiteControls is set to false.
boundTestVisible('#sectionsSitePermissions', false);
boundTestVisible('#sectionsShortcuts', true);
boundTestVisible('#moreExtensions', true);
sidebar.enableEnhancedSiteControls = true;
await microtasksFinished();
boundTestVisible('#sectionsSitePermissions', true);
let currentPage;
navigation.addListener(newPage => {
currentPage = newPage;
});
sidebar.$.sectionsShortcuts.click();
await microtasksFinished();
assertDeepEquals(currentPage, {page: Page.SHORTCUTS});
sidebar.$.sectionsExtensions.click();
await microtasksFinished();
assertDeepEquals(currentPage, {page: Page.LIST});
sidebar.$.sectionsSitePermissions.click();
await microtasksFinished();
assertDeepEquals(currentPage, {page: Page.SITE_PERMISSIONS});
// Clicking on the link for the current page should close the dialog.
const drawerClosed = eventToPromise('close-drawer', sidebar);
sidebar.$.sectionsExtensions.click();
await drawerClosed;
});
test('HrefVerification', async () => {
sidebar.enableEnhancedSiteControls = true;
await microtasksFinished();
assertEquals('/', sidebar.$.sectionsExtensions.getAttribute('href'));
assertEquals(
'/sitePermissions',
sidebar.$.sectionsSitePermissions.getAttribute('href'));
assertEquals(
'/shortcuts', sidebar.$.sectionsShortcuts.getAttribute('href'));
assertTrue(sidebar.$.moreExtensions.querySelector('a')!
.getAttribute('href')!.includes('utm_source=ext_sidebar'));
});
});