Settings: Migrate site_data tests to TypeScript
Bug: 1263610
Change-Id: I168e4d4f75063e83752db7237ea5cfc4d0f32d59
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3538466
Reviewed-by: Demetrios Papadopoulos <dpapad@chromium.org>
Commit-Queue: Rebekah Potter <rbpotter@chromium.org>
Cr-Commit-Position: refs/heads/main@{#983559}
diff --git a/chrome/browser/resources/settings/lazy_load.ts b/chrome/browser/resources/settings/lazy_load.ts
index 418ff44c..3a1bb5d 100644
--- a/chrome/browser/resources/settings/lazy_load.ts
+++ b/chrome/browser/resources/settings/lazy_load.ts
@@ -180,6 +180,8 @@
export {LocalDataBrowserProxy, LocalDataBrowserProxyImpl, LocalDataItem} from './site_settings/local_data_browser_proxy.js';
export {AppHandlerEntry, AppProtocolEntry, HandlerEntry, ProtocolEntry, ProtocolHandlersElement} from './site_settings/protocol_handlers.js';
export {SettingsCategoryDefaultRadioGroupElement} from './site_settings/settings_category_default_radio_group.js';
+export {SiteDataElement} from './site_settings/site_data.js';
+export {SiteDataDetailsSubpageElement} from './site_settings/site_data_details_subpage.js';
export {SiteDetailsElement} from './site_settings/site_details.js';
export {SiteDetailsPermissionElement} from './site_settings/site_details_permission.js';
export {SiteEntryElement} from './site_settings/site_entry.js';
diff --git a/chrome/browser/resources/settings/site_settings/site_data.ts b/chrome/browser/resources/settings/site_settings/site_data.ts
index d6f2cc2d..14ca8f7 100644
--- a/chrome/browser/resources/settings/site_settings/site_data.ts
+++ b/chrome/browser/resources/settings/site_settings/site_data.ts
@@ -23,6 +23,7 @@
import {focusWithoutInk} from 'chrome://resources/js/cr/ui/focus_without_ink.m.js';
import {ListPropertyUpdateMixin} from 'chrome://resources/js/list_property_update_mixin.js';
import {WebUIListenerMixin} from 'chrome://resources/js/web_ui_listener_mixin.js';
+import {IronListElement} from 'chrome://resources/polymer/v3_0/iron-list/iron-list.js';
import {DomRepeatEvent, microTask, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
import {BaseMixin} from '../base_mixin.js';
@@ -42,10 +43,11 @@
index: number,
};
-interface SiteDataElement {
+export interface SiteDataElement {
$: {
confirmDeleteDialog: CrDialogElement,
confirmDeleteThirdPartyDialog: CrDialogElement,
+ list: IronListElement,
removeShowingSites: HTMLElement,
removeAllThirdPartyCookies: HTMLElement,
};
@@ -54,7 +56,7 @@
const SiteDataElementBase = ListPropertyUpdateMixin(
GlobalScrollTargetMixin(WebUIListenerMixin(BaseMixin(PolymerElement))));
-class SiteDataElement extends SiteDataElementBase {
+export class SiteDataElement extends SiteDataElementBase {
static get is() {
return 'site-data';
}
@@ -311,4 +313,10 @@
}
}
+declare global {
+ interface HTMLElementTagNameMap {
+ 'site-data': SiteDataElement;
+ }
+}
+
customElements.define(SiteDataElement.is, SiteDataElement);
diff --git a/chrome/browser/resources/settings/site_settings/site_data_details_subpage.ts b/chrome/browser/resources/settings/site_settings/site_data_details_subpage.ts
index 6ef1747..82bdeb9 100644
--- a/chrome/browser/resources/settings/site_settings/site_data_details_subpage.ts
+++ b/chrome/browser/resources/settings/site_settings/site_data_details_subpage.ts
@@ -44,7 +44,8 @@
RouteObserverMixinInterface
};
-class SiteDataDetailsSubpageElement extends SiteDataDetailsSubpageElementBase {
+export class SiteDataDetailsSubpageElement extends
+ SiteDataDetailsSubpageElementBase {
static get is() {
return 'site-data-details-subpage';
}
diff --git a/chrome/test/data/webui/settings/BUILD.gn b/chrome/test/data/webui/settings/BUILD.gn
index ee23582d..5dde892 100644
--- a/chrome/test/data/webui/settings/BUILD.gn
+++ b/chrome/test/data/webui/settings/BUILD.gn
@@ -104,8 +104,8 @@
"settings_subpage_test.ts",
"settings_textarea_tests.ts",
"settings_ui_tests.ts",
- "site_data_details_subpage_tests.js",
- "site_data_test.js",
+ "site_data_details_subpage_tests.ts",
+ "site_data_test.ts",
"site_details_permission_tests.ts",
"site_details_tests.ts",
"site_entry_tests.ts",
diff --git a/chrome/test/data/webui/settings/site_data_details_subpage_tests.js b/chrome/test/data/webui/settings/site_data_details_subpage_tests.ts
similarity index 73%
rename from chrome/test/data/webui/settings/site_data_details_subpage_tests.js
rename to chrome/test/data/webui/settings/site_data_details_subpage_tests.ts
index eecd779..81093c3 100644
--- a/chrome/test/data/webui/settings/site_data_details_subpage_tests.js
+++ b/chrome/test/data/webui/settings/site_data_details_subpage_tests.ts
@@ -4,9 +4,10 @@
// clang-format off
import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
-import {cookieInfo, LocalDataBrowserProxyImpl} from 'chrome://settings/lazy_load.js';
+import {CookieDetails, cookieInfo, LocalDataBrowserProxyImpl, SiteDataDetailsSubpageElement} from 'chrome://settings/lazy_load.js';
import {MetricsBrowserProxyImpl, PrivacyElementInteractions, Router,routes} from 'chrome://settings/settings.js';
+import {assertEquals} from 'chrome://webui-test/chai_assert.js';
import {flushTasks} from 'chrome://webui-test/test_util.js';
import {TestLocalDataBrowserProxy} from './test_local_data_browser_proxy.js';
@@ -16,17 +17,13 @@
/** @fileoverview Suite of tests for site-data-details-subpage. */
suite('SiteDataDetailsSubpage', function() {
- /** @type {?SiteDataDetailsSubpageElement} */
- let page = null;
+ let page: SiteDataDetailsSubpageElement;
- /** @type {TestLocalDataBrowserProxy} */
- let browserProxy = null;
+ let browserProxy: TestLocalDataBrowserProxy;
- /** @type {!TestMetricsBrowserProxy} */
- let testMetricsBrowserProxy;
+ let testMetricsBrowserProxy: TestMetricsBrowserProxy;
- /** @type {!CookieDetails} */
- const cookieDetails = {
+ const cookieDetails: CookieDetails&{[key: string]: string | boolean} = {
accessibleToScript: 'Yes',
content: 'dummy_cookie_contents',
created: 'Tuesday, February 7, 2017 at 11:28:45 AM',
@@ -39,10 +36,11 @@
path: '/',
sendfor: 'Any kind of connection',
title: 'abcd',
+ totalUsage: '1kB',
type: 'cookie'
};
- const site = 'foo.com';
+ const site: string = 'foo.com';
setup(function() {
browserProxy = new TestLocalDataBrowserProxy();
@@ -50,7 +48,7 @@
LocalDataBrowserProxyImpl.setInstance(browserProxy);
testMetricsBrowserProxy = new TestMetricsBrowserProxy();
MetricsBrowserProxyImpl.setInstance(testMetricsBrowserProxy);
- PolymerTest.clearBody();
+ document.body.innerHTML = '';
page = document.createElement('site-data-details-subpage');
Router.getInstance().navigateTo(
routes.SITE_SETTINGS_DATA_DETAILS, new URLSearchParams('site=' + site));
@@ -64,23 +62,24 @@
test('DetailsShownForCookie', function() {
return browserProxy.whenCalled('getCookieDetails')
- .then(function(actualSite) {
+ .then(function(actualSite: string) {
assertEquals(site, actualSite);
flush();
- const entries = page.root.querySelectorAll('.cr-row');
+ const entries = page.shadowRoot!.querySelectorAll('.cr-row');
assertEquals(1, entries.length);
- const listItems = page.root.querySelectorAll('.list-item');
+ const listItems = page.shadowRoot!.querySelectorAll('.list-item');
// |cookieInfo| is a global var defined in
// site_settings/cookie_info.js, and specifies the fields that are
// shown for a cookie.
- assertEquals(cookieInfo.cookie.length, listItems.length);
+ assertEquals(cookieInfo['cookie']!.length, listItems.length);
// Check that all the cookie information is presented in the DOM.
- const cookieDetailValues = page.root.querySelectorAll('.secondary');
- cookieDetailValues.forEach(function(div, i) {
- const key = cookieInfo.cookie[i][0];
+ const cookieDetailValues =
+ page.shadowRoot!.querySelectorAll<HTMLElement>('.secondary');
+ cookieDetailValues.forEach(function(div: HTMLElement, i: number) {
+ const key = cookieInfo['cookie']![i]![0]!;
assertEquals(cookieDetails[key], div.textContent);
});
});
@@ -89,7 +88,7 @@
test('InteractionMetrics', async function() {
// Confirm that various page interactions record the appropriate metric.
await flushTasks();
- page.shadowRoot.querySelector('.icon-clear').click();
+ page.shadowRoot!.querySelector<HTMLElement>('.icon-clear')!.click();
let metric =
await testMetricsBrowserProxy.whenCalled('recordSettingsPageHistogram');
assertEquals(PrivacyElementInteractions.COOKIE_DETAILS_REMOVE_ITEM, metric);
@@ -104,5 +103,4 @@
await testMetricsBrowserProxy.whenCalled('recordSettingsPageHistogram');
assertEquals(PrivacyElementInteractions.COOKIE_DETAILS_REMOVE_ALL, metric);
});
-
});
diff --git a/chrome/test/data/webui/settings/site_data_test.js b/chrome/test/data/webui/settings/site_data_test.ts
similarity index 86%
rename from chrome/test/data/webui/settings/site_data_test.js
rename to chrome/test/data/webui/settings/site_data_test.ts
index 1ec60f31..6d602f9 100644
--- a/chrome/test/data/webui/settings/site_data_test.js
+++ b/chrome/test/data/webui/settings/site_data_test.ts
@@ -4,8 +4,9 @@
// clang-format off
import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
-import {LocalDataBrowserProxyImpl} from 'chrome://settings/lazy_load.js';
+import {LocalDataBrowserProxyImpl, SiteDataElement} from 'chrome://settings/lazy_load.js';
import {MetricsBrowserProxyImpl, PrivacyElementInteractions, Router,routes} from 'chrome://settings/settings.js';
+import {assertEquals, assertTrue} from 'chrome://webui-test/chai_assert.js';
import {eventToPromise, flushTasks} from 'chrome://webui-test/test_util.js';
import {TestLocalDataBrowserProxy} from './test_local_data_browser_proxy.js';
@@ -14,14 +15,11 @@
// clang-format on
suite('SiteDataTest', function() {
- /** @type {SiteDataElement} */
- let siteData;
+ let siteData: SiteDataElement;
- /** @type {TestLocalDataBrowserProxy} */
- let testBrowserProxy;
+ let testBrowserProxy: TestLocalDataBrowserProxy;
- /** @type {!TestMetricsBrowserProxy} */
- let testMetricsBrowserProxy;
+ let testMetricsBrowserProxy: TestMetricsBrowserProxy;
setup(function() {
Router.getInstance().navigateTo(routes.SITE_SETTINGS);
@@ -47,7 +45,9 @@
await eventToPromise('site-data-list-complete', siteData);
flush();
- const button = siteData.$$('site-data-entry').$$('.icon-delete-gray');
+ const button =
+ siteData.shadowRoot!.querySelector('site-data-entry')!.shadowRoot!
+ .querySelector<HTMLElement>('.icon-delete-gray');
assertTrue(!!button);
assertEquals('CR-ICON-BUTTON', button.tagName);
button.click();
@@ -68,10 +68,10 @@
Router.getInstance().navigateTo(routes.SITE_SETTINGS_SITE_DATA);
await eventToPromise('site-data-list-complete', siteData);
- assertEquals(2, siteData.$.list.items.length);
+ assertEquals(2, siteData.$.list.items!.length);
siteData.filter = 'Hello';
await eventToPromise('site-data-list-complete', siteData);
- assertEquals(1, siteData.$.list.items.length);
+ assertEquals(1, siteData.$.list.items!.length);
});
test('calls reloadCookies() when created', async function() {
@@ -106,10 +106,10 @@
// Check that the remove button correctly records an interaction metric
// based on whether the list is filtered or not.
document.body.appendChild(siteData);
- siteData.$$('#removeShowingSites').click();
+ siteData.$.removeShowingSites.click();
flush();
- siteData.$$('.action-button').click();
+ siteData.shadowRoot!.querySelector<HTMLElement>('.action-button')!.click();
let metric =
await testMetricsBrowserProxy.whenCalled('recordSettingsPageHistogram');
assertEquals(PrivacyElementInteractions.SITE_DATA_REMOVE_ALL, metric);
@@ -117,10 +117,10 @@
// Add a filter and repeat.
siteData.filter = 'Test';
- siteData.$$('#removeShowingSites').click();
+ siteData.$.removeShowingSites.click();
flush();
- siteData.$$('.action-button').click();
+ siteData.shadowRoot!.querySelector<HTMLElement>('.action-button')!.click();
metric =
await testMetricsBrowserProxy.whenCalled('recordSettingsPageHistogram');
assertEquals(PrivacyElementInteractions.SITE_DATA_REMOVE_FILTERED, metric);
@@ -147,5 +147,4 @@
filter = await testBrowserProxy.whenCalled('getDisplayList');
assertEquals('Test2', filter);
});
-
});