Commit 21fff260 authored by dpapad's avatar dpapad Committed by Commit Bot

Settings: Prep work for JS type checking of various privacy tests

Specifically:
 -  Fixing several type violations and adding JS type checking for
    - test_site_settings_prefs_browser_proxy.js
    - test_local_data_browser_proxy.js
    - test_util.js
 - Removing usage of mockMethods() from
   TestSiteSettingsPrefsBrowserProxy, as this pattern is incompatible
   with static type checking.
 - Updating various js_library() targets with missing dependencies as
   needed.

Bug: 1000989
Change-Id: I6b6924804ac96b048c6bde98e0101a7e90b4472a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2183015
Commit-Queue: dpapad <dpapad@chromium.org>
Reviewed-by: default avatarRebekah Potter <rbpotter@chromium.org>
Cr-Commit-Position: refs/heads/master@{#766541}
parent 5f279cea
......@@ -191,6 +191,7 @@ js_type_check("closure_compile_local_module") {
":global_scroll_target_behavior.m",
":hats_browser_proxy",
":i18n_setup",
":lazy_load",
":lifetime_browser_proxy.m",
":metrics_browser_proxy",
":open_window_proxy",
......@@ -238,6 +239,14 @@ js_library("hats_browser_proxy") {
deps = [ "//ui/webui/resources/js:cr.m" ]
}
js_library("lazy_load") {
deps = [
"site_settings:local_data_browser_proxy",
"site_settings:protocol_handlers",
"site_settings:site_settings_prefs_browser_proxy",
]
}
js_library("lifetime_browser_proxy.m") {
sources = [ "$root_gen_dir/chrome/browser/resources/settings/lifetime_browser_proxy.m.js" ]
deps = [ "//ui/webui/resources/js:cr.m" ]
......
......@@ -20,7 +20,6 @@ import './site_settings/category_setting_exceptions.js';
import './site_settings/chooser_exception_list.js';
import './site_settings/media_picker.js';
import './site_settings/pdf_documents.js';
import './site_settings/protocol_handlers.js';
import './site_settings/site_data.js';
import './site_settings/site_details.js';
import './site_settings/zoom_levels.js';
......@@ -47,6 +46,7 @@ import './system_page/system_page.js';
// <if expr="not is_macosx">
import './languages_page/edit_dictionary_page.js';
// </if>
export {getToastManager} from 'chrome://resources/cr_elements/cr_toast/cr_toast_manager.m.js';
......@@ -84,11 +84,13 @@ export {AndroidInfoBrowserProxyImpl} from './site_settings/android_info_browser_
// </if>
export {ChooserType, ContentSetting, ContentSettingsTypes, CookieControlsMode, SITE_EXCEPTION_WILDCARD, SiteSettingSource, SortMethod} from './site_settings/constants.js';
export {cookieInfo} from './site_settings/cookie_info.js';
export {LocalDataBrowserProxyImpl} from './site_settings/local_data_browser_proxy.js';
export {CookieList, LocalDataBrowserProxy, LocalDataBrowserProxyImpl, LocalDataItem} from './site_settings/local_data_browser_proxy.js';
export {HandlerEntry, ProtocolEntry} from './site_settings/protocol_handlers.js';
export {kControlledByLookup} from './site_settings/site_settings_behavior.js';
export {ContentSettingProvider, SiteSettingsPrefsBrowserProxyImpl} from './site_settings/site_settings_prefs_browser_proxy.js';
export {ContentSettingProvider, CookieControlsManagedState, DefaultContentSetting, RawChooserException, RawSiteException, RecentSitePermissions, SiteGroup, SiteSettingsPrefsBrowserProxy, SiteSettingsPrefsBrowserProxyImpl, ZoomLevelEntry} from './site_settings/site_settings_prefs_browser_proxy.js';
export {WebsiteUsageBrowserProxyImpl} from './site_settings/website_usage_browser_proxy.js';
export {defaultSettingLabel} from './site_settings_page/site_settings_list.js';
// <if expr="not chromeos">
export {SystemPageBrowserProxyImpl} from './system_page/system_page_browser_proxy.js';
// </if>
......@@ -58,7 +58,10 @@ js_library("all_sites") {
":site_settings_prefs_browser_proxy",
"..:global_scroll_target_behavior.m",
"..:router.m",
"..:settings_routes",
"//third_party/polymer/v3_0/components-chromium/iron-list",
"//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled",
"//ui/webui/resources/cr_elements/cr_action_menu:cr_action_menu.m",
"//ui/webui/resources/js:i18n_behavior.m",
"//ui/webui/resources/js:load_time_data.m",
"//ui/webui/resources/js:web_ui_listener_behavior.m",
......@@ -295,6 +298,7 @@ js_library("site_settings_prefs_browser_proxy") {
"//ui/webui/resources/cr_elements/policy:cr_policy_indicator_behavior.m",
"//ui/webui/resources/js:cr.m",
]
externs_list = [ "$externs_path/settings_private.js" ]
}
js_library("website_usage_browser_proxy") {
......
......@@ -44,14 +44,14 @@ const MenuActions = {
* protocol_display_name: string,
* spec: string}}
*/
let HandlerEntry;
export let HandlerEntry;
/**
* @typedef {{handlers: !Array<!HandlerEntry>,
* protocol: string,
* protocol_display_name: string}}
*/
let ProtocolEntry;
export let ProtocolEntry;
Polymer({
is: 'protocol-handlers',
......
......@@ -238,7 +238,8 @@ export class SiteSettingsPrefsBrowserProxy {
/**
* Gets the exceptions (site list) for a particular category.
* @param {string} contentType The name of the category to query.
* @param {!ContentSettingsTypes} contentType The name of the category to
* query.
* @return {!Promise<!Array<!RawSiteException>>}
*/
getExceptionList(contentType) {}
......@@ -250,7 +251,7 @@ export class SiteSettingsPrefsBrowserProxy {
* @param {string} origin The origin to look up permissions for.
* @param {!Array<!ContentSettingsTypes>} contentTypes A list of
* categories to retrieve the ContentSetting for.
* @return {!Promise<!NodeList<!RawSiteException>>}
* @return {!Promise<!Array<!RawSiteException>>}
*/
getOriginPermissions(origin, contentTypes) {}
......
......@@ -65,12 +65,37 @@ js_type_check("closure_compile") {
":settings_page_test_util",
":test_about_page_browser_proxy",
":test_lifetime_browser_proxy.m",
":test_local_data_browser_proxy",
":test_search_engines_browser_proxy.m",
":test_site_settings_prefs_browser_proxy",
":test_util",
# TODO(crbug.com/1000989): Add targets for more files here.
]
}
js_library("test_local_data_browser_proxy") {
deps = [
"..:test_browser_proxy.m",
"//chrome/browser/resources/settings:lazy_load",
]
}
js_library("test_site_settings_prefs_browser_proxy") {
deps = [
":test_util",
"..:test_browser_proxy.m",
"//chrome/browser/resources/settings:lazy_load",
]
}
js_library("test_util") {
deps = [
"//chrome/browser/resources/settings:lazy_load",
"//chrome/browser/resources/settings:settings",
]
}
js_library("about_page_tests") {
deps = [
":test_about_page_browser_proxy",
......
......@@ -325,8 +325,7 @@ suite('CrSettingsCookiesPageTest', function() {
source: SiteSettingSource.POLICY
}))],
[]);
siteSettingsBrowserProxy.setResultFor(
'getCookieControlsManagedState', Promise.resolve(managedControlState));
siteSettingsBrowserProxy.setCookieControlsManagedState(managedControlState);
siteSettingsBrowserProxy.setPrefs(managedPrefs);
await siteSettingsBrowserProxy.whenCalled('getDefaultValueForContentType');
await siteSettingsBrowserProxy.whenCalled('getCookieControlsManagedState');
......@@ -365,9 +364,8 @@ suite('CrSettingsCookiesPageTest', function() {
}))],
[]);
siteSettingsBrowserProxy.reset();
siteSettingsBrowserProxy.setResultFor(
'getCookieControlsManagedState',
Promise.resolve(unmanagedControlState));
siteSettingsBrowserProxy.setCookieControlsManagedState(
unmanagedControlState);
siteSettingsBrowserProxy.setPrefs(unmanagedPrefs);
await siteSettingsBrowserProxy.whenCalled('getDefaultValueForContentType');
await siteSettingsBrowserProxy.whenCalled('getCookieControlsManagedState');
......
......@@ -268,8 +268,7 @@ suite('PrivacyPageRedesignEnabled', function() {
setup(function() {
siteSettingsBrowserProxy = new TestSiteSettingsPrefsBrowserProxy();
SiteSettingsPrefsBrowserProxyImpl.instance_ = siteSettingsBrowserProxy;
siteSettingsBrowserProxy.setResultFor(
'getCookieSettingDescription', Promise.resolve(testLabels[0]));
siteSettingsBrowserProxy.setCookieSettingDescription(testLabels[0]);
PolymerTest.clearBody();
page = document.createElement('settings-privacy-page');
document.body.appendChild(page);
......
......@@ -36,7 +36,7 @@ suite('CrSettingsRecentSitePermissionsTest', function() {
});
test('No recent permissions', async function() {
browserProxy.setResultFor('getRecentSitePermissions', Promise.resolve([]));
browserProxy.setRecentSitePermissions([]);
testElement.currentRouteChanged(routes.SITE_SETTINGS);
await browserProxy.whenCalled('getRecentSitePermissions');
flush();
......@@ -67,7 +67,7 @@ suite('CrSettingsRecentSitePermissionsTest', function() {
]
},
]);
browserProxy.setResultFor('getRecentSitePermissions', mockData);
browserProxy.setRecentSitePermissions(mockData);
testElement.currentRouteChanged(routes.SITE_SETTINGS);
await browserProxy.whenCalled('getRecentSitePermissions');
flush();
......
......@@ -1016,12 +1016,13 @@ suite('EditExceptionDialog', function() {
input.value = expectedPattern;
input.fire('input');
return browserProxy.whenCalled('isPatternValidForType')
.then(function(pattern, category) {
assertEquals(expectedPattern, pattern);
assertTrue(actionButton.disabled);
assertTrue(input.invalid);
});
return browserProxy.whenCalled('isPatternValidForType').then(function([
pattern, category
]) {
assertEquals(expectedPattern, pattern);
assertTrue(actionButton.disabled);
assertTrue(input.invalid);
});
});
test('action button calls proxy', function() {
......@@ -1108,11 +1109,12 @@ suite('AddExceptionDialog', function() {
input.value = expectedPattern;
input.fire('input');
return browserProxy.whenCalled('isPatternValidForType')
.then(function(pattern) {
assertEquals(expectedPattern, pattern);
assertTrue(actionButton.disabled);
assertTrue(input.invalid);
});
return browserProxy.whenCalled('isPatternValidForType').then(function([
pattern, category
]) {
assertEquals(expectedPattern, pattern);
assertTrue(actionButton.disabled);
assertTrue(input.invalid);
});
});
});
......@@ -30,8 +30,7 @@ suite('SiteSettingsPage', function() {
function setupPage() {
siteSettingsBrowserProxy = new TestSiteSettingsPrefsBrowserProxy();
SiteSettingsPrefsBrowserProxyImpl.instance_ = siteSettingsBrowserProxy;
siteSettingsBrowserProxy.setResultFor(
'getCookieSettingDescription', Promise.resolve(testLabels[0]));
siteSettingsBrowserProxy.setCookieSettingDescription(testLabels[0]);
PolymerTest.clearBody();
page = document.createElement('settings-site-settings-page');
document.body.appendChild(page);
......
......@@ -3,7 +3,9 @@
// found in the LICENSE file.
// clang-format off
import {TestBrowserProxy} from 'chrome://test/test_browser_proxy.m.js';
import { CookieList,LocalDataBrowserProxy, LocalDataItem} from 'chrome://settings/lazy_load.js';
import {TestBrowserProxy} from '../test_browser_proxy.m.js';
// clang-format on
/**
......@@ -24,7 +26,7 @@ export class TestLocalDataBrowserProxy extends TestBrowserProxy {
'getNumCookiesString',
'reloadCookies',
'removeCookie',
'removeThirdPartyCookies',
'removeAllThirdPartyCookies',
]);
/** @private {?CookieList} */
......@@ -32,6 +34,9 @@ export class TestLocalDataBrowserProxy extends TestBrowserProxy {
/** @private {Array<!LocalDataItem>} */
this.cookieList_ = [];
/** @private {!Array<!LocalDataItem>} */
this.filteredCookieList_ = [];
}
/**
......@@ -56,13 +61,14 @@ export class TestLocalDataBrowserProxy extends TestBrowserProxy {
if (filter === undefined) {
filter = '';
}
/** @type {!Array<!LocalDataItem>} */
const output = [];
for (let i = 0; i < this.cookieList_.length; ++i) {
if (this.cookieList_[i].site.indexOf(filter) >= 0) {
output.push(this.filteredCookieList_[i]);
}
}
return Promise.resolve({items: output});
return Promise.resolve({items: output, total: output.length});
}
/** @override */
......@@ -84,7 +90,8 @@ export class TestLocalDataBrowserProxy extends TestBrowserProxy {
/** @override */
getCookieDetails(site) {
this.methodCalled('getCookieDetails', site);
return Promise.resolve(this.cookieDetails_ || {id: '', children: []});
return Promise.resolve(
this.cookieDetails_ || {id: '', children: [], start: 0});
}
/** @override */
......@@ -106,7 +113,8 @@ export class TestLocalDataBrowserProxy extends TestBrowserProxy {
}
/** @override */
removeThirdPartyCookies() {
this.methodCalled('removeThirdPartyCookies');
removeAllThirdPartyCookies() {
this.methodCalled('removeAllThirdPartyCookies');
return Promise.resolve();
}
}
......@@ -5,22 +5,13 @@
// clang-format off
import {assert} from 'chrome://resources/js/assert.m.js';
import {webUIListenerCallback} from 'chrome://resources/js/cr.m.js';
import {ContentSetting,SiteSettingSource} from 'chrome://settings/lazy_load.js';
import {createSiteGroup,createSiteSettingsPrefs, getContentSettingsTypeFromChooserType} from 'chrome://test/settings/test_util.js';
import {TestBrowserProxy} from 'chrome://test/test_browser_proxy.m.js';
import {ContentSetting, ContentSettingsTypes, CookieControlsManagedState, HandlerEntry, ProtocolEntry, RawChooserException, RawSiteException, RecentSitePermissions, SiteSettingSource, SiteSettingsPrefsBrowserProxy, ZoomLevelEntry} from 'chrome://settings/lazy_load.js';
import {TestBrowserProxy} from '../test_browser_proxy.m.js';
import {createOriginInfo, createSiteGroup,createSiteSettingsPrefs, getContentSettingsTypeFromChooserType, SiteSettingsPref} from './test_util.js';
// clang-format on
/**
* In the real (non-test) code, this data comes from the C++ handler.
* Only used for tests.
* @typedef {{defaults: !Object<ContentSettingsTypes,
* !DefaultContentSetting>,
* exceptions: !Object<ContentSettingsTypes,
* !Array<!RawSiteException>>,
* chooserExceptions: !Object<ContentSettingsTypes,
* !Array<!RawChooserException>>}}
*/
let SiteSettingsPref;
/**
* A test version of SiteSettingsPrefsBrowserProxy. Provides helper methods
......@@ -58,6 +49,9 @@ export class TestSiteSettingsPrefsBrowserProxy extends TestBrowserProxy {
'clearEtldPlus1DataAndCookies',
'clearOriginDataAndCookies',
'recordAction',
'getCookieControlsManagedState',
'getCookieSettingDescription',
'getRecentSitePermissions',
]);
/** @private {boolean} */
......@@ -81,11 +75,14 @@ export class TestSiteSettingsPrefsBrowserProxy extends TestBrowserProxy {
/** @private {boolean} */
this.isPatternValidForType_ = true;
this.mockMethods([
'getCookieSettingDescription',
'getCookieControlsManagedState',
'getRecentSitePermissions',
]);
/** @private {!CookieControlsManagedState|undefined} */
this.cookieControlsManagedState_ = undefined;
/** @private {string} */
this.cookieSettingDesciption_ = '';
/** @private {!Array<!RecentSitePermissions>} */
this.recentSitePermissions_ = [];
}
/**
......@@ -165,7 +162,7 @@ export class TestSiteSettingsPrefsBrowserProxy extends TestBrowserProxy {
/**
* Sets the prefs to use when testing.
* @param {!Array<!HandlerEntry>}
* @param {!Array<!HandlerEntry>} list
*/
setIgnoredProtocols(list) {
// Shallow copy of the passed-in array so mutation won't impact the source
......@@ -297,8 +294,8 @@ export class TestSiteSettingsPrefsBrowserProxy extends TestBrowserProxy {
// Create a deep copy of the pref so that the chooser-exception-list element
// is able update the UI appropriately when incognito mode is toggled.
const pref =
JSON.parse(JSON.stringify(this.prefs_.chooserExceptions[setting]));
const pref = /** @type {!Array<!RawChooserException>} */ (
JSON.parse(JSON.stringify(this.prefs_.chooserExceptions[setting])));
assert(pref !== undefined, 'Pref is missing for ' + chooserType);
if (this.hasIncognito_) {
......@@ -340,7 +337,7 @@ export class TestSiteSettingsPrefsBrowserProxy extends TestBrowserProxy {
/** @override */
isPatternValidForType(pattern, category) {
this.methodCalled('isPatternValidForType', pattern, category);
this.methodCalled('isPatternValidForType', [pattern, category]);
return Promise.resolve({
isValid: this.isPatternValidForType_,
reason: this.isPatternValidForType_ ? '' : 'pattern is invalid',
......@@ -360,7 +357,6 @@ export class TestSiteSettingsPrefsBrowserProxy extends TestBrowserProxy {
this.methodCalled(
'resetCategoryPermissionForPattern',
[primaryPattern, secondaryPattern, contentType, incognito]);
return Promise.resolve();
}
/** @override */
......@@ -369,7 +365,6 @@ export class TestSiteSettingsPrefsBrowserProxy extends TestBrowserProxy {
this.methodCalled(
'resetChooserExceptionForSite',
[chooserType, origin, embeddingOrigin, exception]);
return Promise.resolve();
}
/** @override */
......@@ -425,7 +420,6 @@ export class TestSiteSettingsPrefsBrowserProxy extends TestBrowserProxy {
this.methodCalled(
'setCategoryPermissionForPattern',
[primaryPattern, secondaryPattern, contentType, value, incognito]);
return Promise.resolve();
}
/** @override */
......@@ -487,4 +481,51 @@ export class TestSiteSettingsPrefsBrowserProxy extends TestBrowserProxy {
recordAction() {
this.methodCalled('recordAction');
}
/** @param {!CookieControlsManagedState} state */
setCookieControlsManagedState(state) {
this.cookieControlsManagedState_ = state;
}
/** @override */
getCookieControlsManagedState() {
this.methodCalled('getCookieControlsManagedState');
return Promise.resolve(/** @type {!CookieControlsManagedState} */ (
this.cookieControlsManagedState_));
}
/** @param {string} label */
setCookieSettingDescription(label) {
this.cookieSettingDesciption_ = label;
}
/** @override */
getCookieSettingDescription() {
this.methodCalled('getCookieSettingDescription');
return Promise.resolve(this.cookieSettingDesciption_);
}
/** @param {!Array<!RecentSitePermissions>} permissions */
setRecentSitePermissions(permissions) {
this.recentSitePermissions_ = permissions;
}
/** @override */
getRecentSitePermissions() {
this.methodCalled('getRecentSitePermissions');
return Promise.resolve(this.recentSitePermissions_);
}
/** @override */
getDefaultCaptureDevices() {}
/** @override */
setDefaultCaptureDevice() {}
/** @override */
setProtocolHandlerDefault() {}
/** @override */
showAndroidManageAppLinks() {}
}
......@@ -3,7 +3,7 @@
// found in the LICENSE file.
// clang-format off
import {ChooserType, ContentSetting, ContentSettingsTypes, SiteSettingSource} from 'chrome://settings/lazy_load.js';
import {ChooserType, ContentSetting, ContentSettingsTypes, DefaultContentSetting, RawChooserException, RawSiteException, SiteGroup, SiteSettingSource} from 'chrome://settings/lazy_load.js';
import {Route, Router} from 'chrome://settings/settings.js';
// clang-format on
......@@ -15,7 +15,7 @@ import {Route, Router} from 'chrome://settings/settings.js';
* @param {ContentSettingsTypes} contentType The ContentSettingsType
* to use as the key.
* @param {Object} value The value to map to |contentType|.
* @return {Object<setting: ContentSettingsTypes, value: Object>}
* @return {Object<ContentSettingsTypes, Object>}
*/
export function createContentSettingTypeToValuePair(contentType, value) {
return {setting: contentType, value: value};
......@@ -26,18 +26,18 @@ export function createContentSettingTypeToValuePair(contentType, value) {
* @param {!Object=} override An object with a subset of the properties of
* DefaultContentSetting. Properties defined in |override| will
* overwrite the defaults in this function's return value.
* @return {DefaultContentSetting}
* @return {!DefaultContentSetting}
*/
export function createDefaultContentSetting(override) {
if (override === undefined) {
override = {};
}
return Object.assign(
return /** @type {!DefaultContentSetting} */ (Object.assign(
{
setting: ContentSetting.ASK,
source: SiteSettingSource.PREFERENCE,
},
override);
override));
}
/**
......@@ -46,13 +46,13 @@ export function createDefaultContentSetting(override) {
* @param {!Object=} override An object with a subset of the properties of
* RawSiteException. Properties defined in |override| will overwrite the
* defaults in this function's return value.
* @return {RawSiteException}
* @return {!RawSiteException}
*/
export function createRawSiteException(origin, override) {
if (override === undefined) {
override = {};
}
return Object.assign(
return /** @type {!RawSiteException} */ (Object.assign(
{
embeddingOrigin: origin,
incognito: false,
......@@ -61,7 +61,7 @@ export function createRawSiteException(origin, override) {
setting: ContentSetting.ALLOW,
source: SiteSettingSource.PREFERENCE,
},
override);
override));
}
/**
......@@ -72,14 +72,31 @@ export function createRawSiteException(origin, override) {
* @param {!Object=} override An object with a subset of the properties of
* RawChooserException. Properties defined in |override| will overwrite
* the defaults in this function's return value.
* @return {RawChooserException}
* @return {!RawChooserException}
*/
export function createRawChooserException(chooserType, sites, override) {
return Object.assign(
{chooserType: chooserType, displayName: '', object: {}, sites: sites},
override || {});
return /** @type {!RawChooserException} */ (Object.assign(
{
chooserType: chooserType,
displayName: '',
object: {},
sites: sites,
},
override));
}
/**
* In the real (non-test) code, this data comes from the C++ handler.
* Only used for tests.
* @typedef {{
* defaults: !Object<ContentSettingsTypes, !DefaultContentSetting>,
* exceptions: !Object<ContentSettingsTypes, !Array<!RawSiteException>>,
* chooserExceptions: !Object<ContentSettingsTypes,
* !Array<!RawChooserException>>
* }}
*/
export let SiteSettingsPref;
/**
* Helper to create a mock SiteSettingsPref.
* @param {!Array<{setting: ContentSettingsTypes,
......@@ -150,7 +167,7 @@ export function createSiteSettingsPrefs(
* eTLD+1.
* @param {number=} mockUsage The override initial usage value for each origin
* in the site group.
* @return {SiteGroup}
* @return {!SiteGroup}
*/
export function createSiteGroup(eTLDPlus1Name, originList, mockUsage) {
if (mockUsage === undefined) {
......@@ -162,6 +179,7 @@ export function createSiteGroup(eTLDPlus1Name, originList, mockUsage) {
etldPlus1: eTLDPlus1Name,
origins: originInfoList,
numCookies: 0,
hasInstalledPWA: false,
};
}
......@@ -185,7 +203,7 @@ export function createOriginInfo(origin, override) {
* |chooserType|.
* @param {ChooserType} chooserType The chooser type of the
* permission.
* @return {?ContentSettingsType}
* @return {?ContentSettingsTypes}
*/
export function getContentSettingsTypeFromChooserType(chooserType) {
switch (chooserType) {
......
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