blob: 40d5b731c3811dfd7e5784d4e29e043e888b026a [file] [log] [blame]
// Copyright 2022 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.
/**
* @fileoverview Provides behavior to fetch the list of user specified permitted
* and restricted sites on creation and when these lists are updated. Used by
* multiple pages.
*/
import {ChromeEvent} from '/tools/typescript/definitions/chrome_event.js';
import {dedupingMixin, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
type Constructor<T> = new (...args: any[]) => T;
export interface SiteSettingsDelegate {
getUserSiteSettings(): Promise<chrome.developerPrivate.UserSiteSettings>;
addUserSpecifiedSite(
siteSet: chrome.developerPrivate.UserSiteSet,
host: string): Promise<void>;
removeUserSpecifiedSite(
siteSet: chrome.developerPrivate.UserSiteSet,
host: string): Promise<void>;
getUserSiteSettingsChangedTarget():
ChromeEvent<(settings: chrome.developerPrivate.UserSiteSettings) => void>;
}
export const SiteSettingsMixin = dedupingMixin(
<T extends Constructor<PolymerElement>>(superClass: T): T&
Constructor<SiteSettingsMixinInterface> => {
class SiteSettingsMixin extends superClass {
static get properties() {
return {
delegate: Object,
enableEnhancedSiteControls: Boolean,
permittedSites: {
type: Array,
value: [],
},
restrictedSites: {
type: Array,
value: [],
},
};
}
delegate: SiteSettingsDelegate;
enableEnhancedSiteControls: boolean;
protected permittedSites: string[];
protected restrictedSites: string[];
ready() {
super.ready();
if (this.enableEnhancedSiteControls) {
this.delegate.getUserSiteSettings().then(
this.onUserSiteSettingsChanged_.bind(this));
this.delegate.getUserSiteSettingsChangedTarget().addListener(
this.onUserSiteSettingsChanged_.bind(this));
}
}
private onUserSiteSettingsChanged_({
permittedSites,
restrictedSites
}: chrome.developerPrivate.UserSiteSettings) {
this.permittedSites = permittedSites;
this.restrictedSites = restrictedSites;
}
}
return SiteSettingsMixin;
});
export interface SiteSettingsMixinInterface {
delegate: SiteSettingsDelegate;
enableEnhancedSiteControls: boolean;
}