@quick-game/cli
Version:
Command line interface for rapid qg development
83 lines • 4.17 kB
JavaScript
// 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.
import * as IssuesManager from '../../models/issues_manager/issues_manager.js';
import cspViolationsViewStyles from './cspViolationsView.css.js';
import * as i18n from '../../core/i18n/i18n.js';
import * as UI from '../../ui/legacy/legacy.js';
import { ComboBoxOfCheckBoxes } from './ComboBoxOfCheckBoxes.js';
import { CSPViolationsListView } from './CSPViolationsListView.js';
const UIStrings = {
/**
*@description Text to filter result items
*/
filter: 'Filter',
};
const str_ = i18n.i18n.registerUIStrings('panels/issues/CSPViolationsView.ts', UIStrings);
const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
let cspViolationsViewInstance;
export class CSPViolationsView extends UI.Widget.VBox {
#listView = new CSPViolationsListView();
#issuesManager = IssuesManager.IssuesManager.IssuesManager.instance();
/**
* @private
*/
constructor() {
super(true);
this.contentElement.classList.add('csp-violations-pane');
const topToolbar = new UI.Toolbar.Toolbar('csp-violations-toolbar', this.contentElement);
const textFilterUI = new UI.Toolbar.ToolbarInput(i18nString(UIStrings.filter), '', 1, .2, '');
textFilterUI.addEventListener(UI.Toolbar.ToolbarInput.Event.TextChanged, () => {
this.#listView.updateTextFilter(textFilterUI.value());
});
topToolbar.appendToolbarItem(textFilterUI);
const levelMenuButton = new ComboBoxOfCheckBoxes('Categories');
levelMenuButton.setText('Categories');
levelMenuButton.addOption('Trusted Type Policy', IssuesManager.ContentSecurityPolicyIssue.trustedTypesPolicyViolationCode, true);
levelMenuButton.addOption('Trusted Type Sink', IssuesManager.ContentSecurityPolicyIssue.trustedTypesSinkViolationCode, true);
levelMenuButton.addOption('CSP Inline', IssuesManager.ContentSecurityPolicyIssue.inlineViolationCode, true);
levelMenuButton.addOption('CSP Eval', IssuesManager.ContentSecurityPolicyIssue.evalViolationCode, true);
levelMenuButton.addOption('CSP URL', IssuesManager.ContentSecurityPolicyIssue.urlViolationCode, true);
levelMenuButton.addHeader('Reset', () => {
levelMenuButton.getOptions().forEach((x, i) => levelMenuButton.setOptionEnabled(i, x.default));
});
levelMenuButton.setOnOptionClicked(() => {
const categories = new Set(levelMenuButton.getOptions().filter(x => x.enabled).map(x => x.value));
this.#listView.updateCategoryFilter(categories);
});
topToolbar.appendToolbarItem(levelMenuButton);
this.#listView.show(this.contentElement);
this.#issuesManager.addEventListener("IssueAdded" /* IssuesManager.IssuesManager.Events.IssueAdded */, this.#onIssueAdded, this);
this.#issuesManager.addEventListener("FullUpdateRequired" /* IssuesManager.IssuesManager.Events.FullUpdateRequired */, this.#onFullUpdateRequired, this);
this.#addAllIssues();
}
static instance(opts = { forceNew: null }) {
const { forceNew } = opts;
if (!cspViolationsViewInstance || forceNew) {
cspViolationsViewInstance = new CSPViolationsView();
}
return cspViolationsViewInstance;
}
#onIssueAdded(event) {
const { issue } = event.data;
if (issue instanceof IssuesManager.ContentSecurityPolicyIssue.ContentSecurityPolicyIssue) {
this.#listView.addIssue(issue);
}
}
#onFullUpdateRequired() {
this.#listView.clearIssues();
this.#addAllIssues();
}
#addAllIssues() {
for (const issue of this.#issuesManager.issues()) {
if (issue instanceof IssuesManager.ContentSecurityPolicyIssue.ContentSecurityPolicyIssue) {
this.#listView.addIssue(issue);
}
}
}
wasShown() {
super.wasShown();
this.registerCSSFiles([cspViolationsViewStyles]);
}
}
//# sourceMappingURL=CSPViolationsView.js.map