mirror of
https://github.com/react/react-native-devtools-frontend.git
synced 2026-10-19 13:04:39 +08:00
We will be turning on an ESLint rule to enforce the specification of a return type in a follow-up CL. R=jacktfranklin@chromium.org Bug: 1057042 Change-Id: I56f67cf3fdafa0a867e8837f4d30d52ed1595351 Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/2587740 Commit-Queue: Tim van der Lippe <tvanderlippe@chromium.org> Auto-Submit: Tim van der Lippe <tvanderlippe@chromium.org> Reviewed-by: Jack Franklin <jacktfranklin@chromium.org>
75 lines
3.3 KiB
TypeScript
75 lines
3.3 KiB
TypeScript
// 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 BrowserSDK from '../browser_sdk/browser_sdk.js';
|
|
import * as Common from '../common/common.js'; // eslint-disable-line no-unused-vars
|
|
import * as SDK from '../sdk/sdk.js';
|
|
import * as UI from '../ui/ui.js';
|
|
import {ComboBoxOfCheckBoxes} from './ComboBoxOfCheckBoxes.js';
|
|
|
|
import {CSPViolationsListView} from './CSPViolationsListView.js';
|
|
|
|
export class CSPViolationsView extends UI.Widget.VBox {
|
|
private listView = new CSPViolationsListView();
|
|
private issuesManager = BrowserSDK.IssuesManager.IssuesManager.instance();
|
|
|
|
constructor() {
|
|
super(true);
|
|
this.registerRequiredCSS('issues/cspViolationsView.css', {enableLegacyPatching: false});
|
|
this.contentElement.classList.add('csp-violations-pane');
|
|
|
|
const topToolbar = new UI.Toolbar.Toolbar('csp-violations-toolbar', this.contentElement);
|
|
const textFilterUI = new UI.Toolbar.ToolbarInput(ls`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', SDK.ContentSecurityPolicyIssue.trustedTypesPolicyViolationCode, true);
|
|
levelMenuButton.addOption('Trusted Type Sink', SDK.ContentSecurityPolicyIssue.trustedTypesSinkViolationCode, true);
|
|
levelMenuButton.addOption('CSP Inline', SDK.ContentSecurityPolicyIssue.inlineViolationCode, true);
|
|
levelMenuButton.addOption('CSP Eval', SDK.ContentSecurityPolicyIssue.evalViolationCode, true);
|
|
levelMenuButton.addOption('CSP URL', SDK.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(BrowserSDK.IssuesManager.Events.IssueAdded, this.onIssueAdded, this);
|
|
this.issuesManager.addEventListener(
|
|
BrowserSDK.IssuesManager.Events.FullUpdateRequired, this.onFullUpdateRequired, this);
|
|
|
|
this.addAllIssues();
|
|
}
|
|
|
|
private onIssueAdded(event: Common.EventTarget.EventTargetEvent): void {
|
|
const {issue} =
|
|
/** @type {!{issuesModel: !SDK.IssuesModel.IssuesModel, issue: !SDK.Issue.Issue}} */ (event.data);
|
|
if (issue instanceof SDK.ContentSecurityPolicyIssue.ContentSecurityPolicyIssue) {
|
|
this.listView.addIssue(issue);
|
|
}
|
|
}
|
|
|
|
private onFullUpdateRequired(): void {
|
|
this.listView.clearIssues();
|
|
this.addAllIssues();
|
|
}
|
|
|
|
private addAllIssues(): void {
|
|
for (const issue of this.issuesManager.issues()) {
|
|
if (issue instanceof SDK.ContentSecurityPolicyIssue.ContentSecurityPolicyIssue) {
|
|
this.listView.addIssue(issue);
|
|
}
|
|
}
|
|
}
|
|
}
|