chrome-devtools-frontend 1.0.951410 → 1.0.952713
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/config/gni/devtools_grd_files.gni +3 -0
- package/extension-api/ExtensionAPI.d.ts +1 -1
- package/front_end/.eslintrc.js +6 -0
- package/front_end/Tests.js +10 -0
- package/front_end/core/common/App.ts +0 -3
- package/front_end/core/common/AppProvider.ts +0 -3
- package/front_end/core/common/JavaScriptMetaData.ts +0 -3
- package/front_end/core/common/QueryParamHandler.ts +0 -3
- package/front_end/core/common/Runnable.ts +0 -3
- package/front_end/core/common/SimpleHistoryManager.ts +0 -3
- package/front_end/core/host/UserMetrics.ts +2 -1
- package/front_end/core/i18n/locales/en-US.json +3 -0
- package/front_end/core/i18n/locales/en-XL.json +3 -0
- package/front_end/core/root/Runtime.ts +4 -12
- package/front_end/core/sdk/OverlayPersistentHighlighter.ts +0 -12
- package/front_end/core/sdk/PageResourceLoader.ts +2 -1
- package/front_end/core/sdk/TracingManager.ts +0 -3
- package/front_end/entrypoints/formatter_worker/AcornTokenizer.ts +39 -39
- package/front_end/entrypoints/formatter_worker/CSSFormatter.ts +54 -54
- package/front_end/entrypoints/formatter_worker/ESTreeWalker.ts +20 -20
- package/front_end/entrypoints/formatter_worker/FormattedContentBuilder.ts +54 -54
- package/front_end/entrypoints/formatter_worker/HTMLFormatter.ts +145 -144
- package/front_end/entrypoints/formatter_worker/JavaScriptFormatter.ts +40 -40
- package/front_end/entrypoints/heap_snapshot_worker/AllocationProfile.ts +64 -69
- package/front_end/entrypoints/heap_snapshot_worker/HeapSnapshot.ts +203 -203
- package/front_end/entrypoints/heap_snapshot_worker/HeapSnapshotLoader.ts +109 -108
- package/front_end/entrypoints/heap_snapshot_worker/HeapSnapshotWorkerDispatcher.ts +17 -17
- package/front_end/entrypoints/inspector_main/InspectorMain.ts +30 -30
- package/front_end/entrypoints/inspector_main/RenderingOptions.ts +25 -25
- package/front_end/entrypoints/main/ExecutionContextSelector.ts +52 -55
- package/front_end/entrypoints/main/MainImpl.ts +49 -49
- package/front_end/entrypoints/node_app/NodeConnectionsPanel.ts +43 -43
- package/front_end/entrypoints/node_app/NodeMain.ts +38 -38
- package/front_end/generated/InspectorBackendCommands.js +5 -1
- package/front_end/generated/protocol.d.ts +16 -0
- package/front_end/legacy/legacy-defs.d.ts +0 -21
- package/front_end/models/bindings/CSSWorkspaceBinding.ts +0 -3
- package/front_end/models/bindings/DebuggerWorkspaceBinding.ts +0 -3
- package/front_end/models/bindings/FileUtils.ts +0 -3
- package/front_end/models/extensions/ExtensionAPI.ts +2 -1
- package/front_end/models/extensions/ExtensionTraceProvider.ts +0 -3
- package/front_end/models/heap_snapshot_model/HeapSnapshotModel.ts +1 -1
- package/front_end/models/issues_manager/ClientHintIssue.ts +95 -0
- package/front_end/models/issues_manager/ContentSecurityPolicyIssue.ts +6 -6
- package/front_end/models/issues_manager/ContrastCheckTrigger.ts +15 -15
- package/front_end/models/issues_manager/CorsIssue.ts +9 -9
- package/front_end/models/issues_manager/CrossOriginEmbedderPolicyIssue.ts +5 -5
- package/front_end/models/issues_manager/DeprecationIssue.ts +7 -7
- package/front_end/models/issues_manager/GenericIssue.ts +5 -5
- package/front_end/models/issues_manager/HeavyAdIssue.ts +5 -5
- package/front_end/models/issues_manager/Issue.ts +10 -10
- package/front_end/models/issues_manager/IssueResolver.ts +11 -10
- package/front_end/models/issues_manager/IssuesManager.ts +61 -56
- package/front_end/models/issues_manager/LowTextContrastIssue.ts +4 -4
- package/front_end/models/issues_manager/MixedContentIssue.ts +7 -7
- package/front_end/models/issues_manager/NavigatorUserAgentIssue.ts +7 -7
- package/front_end/models/issues_manager/QuirksModeIssue.ts +4 -4
- package/front_end/models/issues_manager/SameSiteCookieIssue.ts +16 -16
- package/front_end/models/issues_manager/SharedArrayBufferIssue.ts +5 -5
- package/front_end/models/issues_manager/SourceFrameIssuesManager.ts +32 -31
- package/front_end/models/issues_manager/TrustedWebActivityIssue.ts +5 -5
- package/front_end/models/issues_manager/WasmCrossOriginModuleSharingIssue.ts +5 -5
- package/front_end/models/issues_manager/descriptions/clientHintMetaTagAllowListInvalidOrigin.md +4 -0
- package/front_end/models/issues_manager/descriptions/clientHintMetaTagModifiedHTML.md +4 -0
- package/front_end/models/issues_manager/issues_manager.ts +2 -0
- package/front_end/models/timeline_model/TimelineModel.ts +1 -1
- package/front_end/panels/application/components/BackForwardCacheView.ts +33 -33
- package/front_end/panels/application/components/EndpointsGrid.ts +12 -12
- package/front_end/panels/application/components/FrameDetailsView.ts +108 -110
- package/front_end/panels/application/components/OriginTrialTreeView.ts +45 -45
- package/front_end/panels/application/components/PermissionsPolicySection.ts +19 -19
- package/front_end/panels/application/components/ReportsGrid.ts +30 -30
- package/front_end/panels/application/components/StackTrace.ts +48 -47
- package/front_end/panels/application/components/TrustTokensView.ts +31 -31
- package/front_end/panels/console/ConsoleView.ts +1 -1
- package/front_end/panels/console/ConsoleViewMessage.ts +1 -25
- package/front_end/panels/console/consoleView.css +5 -0
- package/front_end/panels/css_overview/CSSOverviewCompletedView.ts +41 -52
- package/front_end/panels/css_overview/CSSOverviewController.ts +2 -2
- package/front_end/panels/css_overview/CSSOverviewPanel.ts +18 -27
- package/front_end/panels/css_overview/CSSOverviewProcessingView.ts +2 -2
- package/front_end/panels/css_overview/CSSOverviewSidebarPanel.ts +6 -6
- package/front_end/panels/css_overview/components/CSSOverviewStartView.ts +4 -4
- package/front_end/panels/elements/ElementsTreeElement.ts +2 -6
- package/front_end/panels/elements/components/AccessibilityTreeNode.ts +17 -17
- package/front_end/panels/elements/components/AdornerManager.ts +21 -21
- package/front_end/panels/elements/components/AdornerSettingsPane.ts +14 -14
- package/front_end/panels/elements/components/CSSQuery.ts +16 -16
- package/front_end/panels/elements/components/ComputedStyleProperty.ts +14 -14
- package/front_end/panels/elements/components/ComputedStyleTrace.ts +15 -15
- package/front_end/panels/elements/components/ElementsBreadcrumbs.ts +78 -78
- package/front_end/panels/elements/components/ElementsPanelLink.ts +16 -16
- package/front_end/panels/elements/components/LayoutPane.ts +47 -47
- package/front_end/panels/elements/components/NodeText.ts +18 -18
- package/front_end/panels/elements/components/QueryContainer.ts +40 -40
- package/front_end/panels/elements/components/StylePropertyEditor.ts +18 -18
- package/front_end/panels/emulation/components/DeviceSizeInputElement.ts +4 -4
- package/front_end/panels/event_listeners/EventListenersUtils.ts +2 -1
- package/front_end/panels/issues/AffectedBlockedByResponseView.ts +4 -4
- package/front_end/panels/issues/AffectedCookiesView.ts +4 -5
- package/front_end/panels/issues/AffectedDirectivesView.ts +19 -19
- package/front_end/panels/issues/AffectedDocumentsInQuirksModeView.ts +7 -8
- package/front_end/panels/issues/AffectedElementsView.ts +4 -4
- package/front_end/panels/issues/AffectedElementsWithLowContrastView.ts +7 -8
- package/front_end/panels/issues/AffectedHeavyAdView.ts +8 -8
- package/front_end/panels/issues/AffectedResourcesView.ts +25 -26
- package/front_end/panels/issues/AffectedSharedArrayBufferIssueDetailsView.ts +8 -8
- package/front_end/panels/issues/AffectedSourcesView.ts +4 -4
- package/front_end/panels/issues/AffectedTrustedWebActivityIssueDetailsView.ts +4 -4
- package/front_end/panels/issues/AttributionReportingIssueDetailsView.ts +17 -17
- package/front_end/panels/issues/CSPViolationsListView.ts +22 -23
- package/front_end/panels/issues/CSPViolationsView.ts +17 -17
- package/front_end/panels/issues/ComboBoxOfCheckBoxes.ts +13 -13
- package/front_end/panels/issues/CorsIssueDetailsView.ts +23 -23
- package/front_end/panels/issues/GenericIssueDetailsView.ts +4 -4
- package/front_end/panels/issues/HiddenIssuesRow.ts +7 -7
- package/front_end/panels/issues/IssueAggregator.ts +95 -95
- package/front_end/panels/issues/IssueKindView.ts +14 -14
- package/front_end/panels/issues/IssueView.ts +98 -98
- package/front_end/panels/issues/IssuesPane.ts +102 -102
- package/front_end/panels/issues/WasmCrossOriginModuleSharingAffectedResourcesView.ts +5 -5
- package/front_end/panels/issues/components/HideIssuesMenu.ts +10 -10
- package/front_end/panels/media/PlayerListView.ts +160 -97
- package/front_end/panels/media/PlayerMessagesView.ts +1 -0
- package/front_end/panels/media/playerListView.css +58 -0
- package/front_end/panels/network/NetworkLogView.ts +2 -6
- package/front_end/panels/network/NetworkWaterfallColumn.ts +2 -4
- package/front_end/panels/network/components/RequestTrustTokensView.ts +40 -40
- package/front_end/panels/network/components/WebBundleInfoView.ts +9 -9
- package/front_end/panels/performance_monitor/PerformanceMonitor.ts +92 -37
- package/front_end/panels/performance_monitor/performanceMonitor.css +32 -0
- package/front_end/panels/protocol_monitor/ProtocolMonitor.ts +2 -2
- package/front_end/panels/search/SearchConfig.ts +0 -6
- package/front_end/panels/settings/KeybindsSettingsTab.ts +4 -0
- package/front_end/panels/settings/components/SyncSection.ts +14 -14
- package/front_end/panels/settings/emulation/components/UserAgentClientHintsForm.ts +96 -96
- package/front_end/panels/sources/BreakpointEditDialog.ts +4 -3
- package/front_end/panels/sources/NavigatorView.ts +3 -9
- package/front_end/panels/sources/SourceMapNamesResolver.ts +3 -3
- package/front_end/panels/sources/SourcesPanel.ts +1 -3
- package/front_end/panels/sources/SourcesView.ts +0 -3
- package/front_end/panels/sources/TabbedEditorContainer.ts +0 -3
- package/front_end/panels/timeline/TimelineFlameChartView.ts +1 -1
- package/front_end/panels/timeline/TimelineLoader.ts +0 -3
- package/front_end/panels/timeline/TimelineTreeView.ts +1 -1
- package/front_end/panels/timeline/components/WebVitalsLane.ts +77 -76
- package/front_end/panels/timeline/components/WebVitalsTimeline.ts +133 -133
- package/front_end/panels/timeline/components/WebVitalsTooltip.ts +9 -9
- package/front_end/panels/webauthn/WebauthnPane.ts +203 -205
- package/front_end/third_party/codemirror.next/bundle.ts +3 -3
- package/front_end/third_party/codemirror.next/chunk/codemirror.js +1 -1
- package/front_end/third_party/codemirror.next/chunk/markdown.js +2 -1
- package/front_end/third_party/codemirror.next/codemirror.next.d.ts +10 -1
- package/front_end/third_party/codemirror.next/codemirror.next.js +2 -1
- package/front_end/third_party/codemirror.next/package.json +3 -3
- package/front_end/third_party/diff/DiffWrapper.ts +7 -0
- package/front_end/ui/components/adorners/Adorner.ts +2 -2
- package/front_end/ui/components/buttons/Button.ts +9 -9
- package/front_end/ui/components/data_grid/DataGrid.ts +64 -64
- package/front_end/ui/components/data_grid/DataGridController.ts +22 -22
- package/front_end/ui/components/data_grid/DataGridUtils.ts +3 -0
- package/front_end/ui/components/diff_view/DiffView.ts +6 -6
- package/front_end/ui/components/expandable_list/ExpandableList.ts +5 -5
- package/front_end/ui/components/icon_button/Icon.ts +4 -4
- package/front_end/ui/components/icon_button/IconButton.ts +4 -4
- package/front_end/ui/components/issue_counter/IssueCounter.ts +3 -3
- package/front_end/ui/components/issue_counter/IssueLinkIcon.ts +11 -11
- package/front_end/ui/components/linear_memory_inspector/LinearMemoryInspector.ts +50 -50
- package/front_end/ui/components/linear_memory_inspector/LinearMemoryInspectorController.ts +6 -6
- package/front_end/ui/components/linear_memory_inspector/LinearMemoryInspectorPane.ts +4 -4
- package/front_end/ui/components/linear_memory_inspector/LinearMemoryNavigator.ts +12 -12
- package/front_end/ui/components/linear_memory_inspector/LinearMemoryValueInterpreter.ts +11 -11
- package/front_end/ui/components/linear_memory_inspector/LinearMemoryViewer.ts +40 -39
- package/front_end/ui/components/linear_memory_inspector/ValueInterpreterDisplay.ts +18 -18
- package/front_end/ui/components/linear_memory_inspector/ValueInterpreterSettings.ts +6 -6
- package/front_end/ui/components/linkifier/LinkifierImpl.ts +4 -4
- package/front_end/ui/components/markdown_view/MarkdownImage.ts +5 -5
- package/front_end/ui/components/markdown_view/MarkdownLink.ts +2 -2
- package/front_end/ui/components/markdown_view/MarkdownView.ts +4 -4
- package/front_end/ui/components/panel_feedback/FeedbackButton.ts +2 -2
- package/front_end/ui/components/panel_feedback/PanelFeedback.ts +2 -2
- package/front_end/ui/components/panel_feedback/PreviewToggle.ts +4 -4
- package/front_end/ui/components/render_coordinator/RenderCoordinator.ts +22 -22
- package/front_end/ui/components/report_view/ReportView.ts +16 -16
- package/front_end/ui/components/request_link_icon/RequestLinkIcon.ts +14 -14
- package/front_end/ui/components/settings/SettingCheckbox.ts +5 -5
- package/front_end/ui/components/survey_link/SurveyLink.ts +8 -8
- package/front_end/ui/components/text_editor/TextEditor.ts +9 -9
- package/front_end/ui/components/text_editor/cursor_tooltip.ts +7 -1
- package/front_end/ui/components/text_prompt/TextPrompt.ts +18 -18
- package/front_end/ui/components/tree_outline/TreeOutline.ts +69 -70
- package/front_end/ui/legacy/ContextFlavorListener.ts +0 -4
- package/front_end/ui/legacy/SearchableView.ts +13 -4
- package/front_end/ui/legacy/SuggestBox.ts +0 -3
- package/front_end/ui/legacy/components/data_grid/DataGrid.ts +6 -6
- package/front_end/ui/legacy/components/perf_ui/FlameChart.ts +0 -3
- package/front_end/ui/legacy/components/source_frame/JSONView.ts +1 -1
- package/front_end/ui/legacy/components/source_frame/SourceFrame.ts +13 -12
- package/front_end/ui/legacy/components/source_frame/XMLView.ts +2 -2
- package/front_end/ui/legacy/themeColors.css +2 -0
- package/front_end/ui/legacy/theme_support/theme_support_impl.ts +34 -7
- package/package.json +1 -1
- package/scripts/eslint_rules/lib/use_private_class_members.js +41 -0
- package/scripts/eslint_rules/tests/use_private_class_members_test.js +62 -0
- package/scripts/migration/class-fields/migrate.js +2 -3
- package/scripts/migration/class-fields/migrate.sh +1 -3
- package/scripts/migration/class-fields/package.json +1 -1
- package/config/gni/all_devtools_files.gni +0 -255
- package/scripts/build/devtools_file_hashes.py +0 -82
- package/scripts/devtools_run/devtools_run_cli +0 -49
- package/scripts/devtools_run/package.json +0 -13
- package/scripts/unzip.py +0 -20
- package/scripts/visualize_deps/jquery_svg.html +0 -57
- package/scripts/visualize_deps/run_visualize.js +0 -119
|
@@ -110,13 +110,11 @@ const str_ = i18n.i18n.registerUIStrings('panels/issues/IssuesPane.ts', UIString
|
|
|
110
110
|
const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
|
|
111
111
|
|
|
112
112
|
class IssueCategoryView extends UI.TreeOutline.TreeElement {
|
|
113
|
-
|
|
114
|
-
private issues: AggregatedIssue[];
|
|
113
|
+
#category: IssuesManager.Issue.IssueCategory;
|
|
115
114
|
|
|
116
115
|
constructor(category: IssuesManager.Issue.IssueCategory) {
|
|
117
116
|
super();
|
|
118
|
-
this
|
|
119
|
-
this.issues = [];
|
|
117
|
+
this.#category = category;
|
|
120
118
|
|
|
121
119
|
this.toggleOnClick = true;
|
|
122
120
|
this.listItemElement.classList.add('issue-category');
|
|
@@ -124,7 +122,7 @@ class IssueCategoryView extends UI.TreeOutline.TreeElement {
|
|
|
124
122
|
}
|
|
125
123
|
|
|
126
124
|
getCategoryName(): string {
|
|
127
|
-
switch (this
|
|
125
|
+
switch (this.#category) {
|
|
128
126
|
case IssuesManager.Issue.IssueCategory.CrossOriginEmbedderPolicy:
|
|
129
127
|
return i18nString(UIStrings.crossOriginEmbedderPolicy);
|
|
130
128
|
case IssuesManager.Issue.IssueCategory.MixedContent:
|
|
@@ -153,10 +151,10 @@ class IssueCategoryView extends UI.TreeOutline.TreeElement {
|
|
|
153
151
|
}
|
|
154
152
|
|
|
155
153
|
onattach(): void {
|
|
156
|
-
this
|
|
154
|
+
this.#appendHeader();
|
|
157
155
|
}
|
|
158
156
|
|
|
159
|
-
|
|
157
|
+
#appendHeader(): void {
|
|
160
158
|
const header = document.createElement('div');
|
|
161
159
|
header.classList.add('header');
|
|
162
160
|
|
|
@@ -176,49 +174,50 @@ export function getGroupIssuesByCategorySetting(): Common.Settings.Setting<boole
|
|
|
176
174
|
let issuesPaneInstance: IssuesPane;
|
|
177
175
|
|
|
178
176
|
export class IssuesPane extends UI.Widget.VBox {
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
177
|
+
#categoryViews: Map<IssuesManager.Issue.IssueCategory, IssueCategoryView>;
|
|
178
|
+
#issueViews: Map<AggregationKey, IssueView>;
|
|
179
|
+
#kindViews: Map<IssuesManager.Issue.IssueKind, IssueKindView>;
|
|
180
|
+
#showThirdPartyCheckbox: UI.Toolbar.ToolbarSettingCheckbox|null;
|
|
181
|
+
#issuesTree: UI.TreeOutline.TreeOutlineInShadow;
|
|
182
|
+
#hiddenIssuesRow: HiddenIssuesRow;
|
|
183
|
+
#noIssuesMessageDiv: HTMLDivElement;
|
|
184
|
+
#issuesManager: IssuesManager.IssuesManager.IssuesManager;
|
|
185
|
+
#aggregator: IssueAggregator;
|
|
186
|
+
#issueViewUpdatePromise: Promise<void> = Promise.resolve();
|
|
189
187
|
|
|
190
188
|
private constructor() {
|
|
191
189
|
super(true);
|
|
192
190
|
|
|
193
191
|
this.contentElement.classList.add('issues-pane');
|
|
194
192
|
|
|
195
|
-
this
|
|
196
|
-
this
|
|
197
|
-
this
|
|
198
|
-
this
|
|
193
|
+
this.#categoryViews = new Map();
|
|
194
|
+
this.#kindViews = new Map();
|
|
195
|
+
this.#issueViews = new Map();
|
|
196
|
+
this.#showThirdPartyCheckbox = null;
|
|
199
197
|
|
|
200
|
-
this
|
|
198
|
+
this.#createToolbars();
|
|
201
199
|
|
|
202
|
-
this
|
|
200
|
+
this.#issuesTree = new UI.TreeOutline.TreeOutlineInShadow();
|
|
203
201
|
|
|
204
|
-
this
|
|
205
|
-
this
|
|
206
|
-
this.contentElement.appendChild(this
|
|
202
|
+
this.#issuesTree.setShowSelectionOnKeyboardFocus(true);
|
|
203
|
+
this.#issuesTree.contentElement.classList.add('issues');
|
|
204
|
+
this.contentElement.appendChild(this.#issuesTree.element);
|
|
207
205
|
|
|
208
|
-
this
|
|
209
|
-
this
|
|
206
|
+
this.#hiddenIssuesRow = new HiddenIssuesRow();
|
|
207
|
+
this.#issuesTree.appendChild(this.#hiddenIssuesRow);
|
|
210
208
|
|
|
211
|
-
this
|
|
212
|
-
this
|
|
213
|
-
this.contentElement.appendChild(this
|
|
209
|
+
this.#noIssuesMessageDiv = document.createElement('div');
|
|
210
|
+
this.#noIssuesMessageDiv.classList.add('issues-pane-no-issues');
|
|
211
|
+
this.contentElement.appendChild(this.#noIssuesMessageDiv);
|
|
214
212
|
|
|
215
|
-
this
|
|
216
|
-
this
|
|
217
|
-
this
|
|
218
|
-
this
|
|
219
|
-
this
|
|
220
|
-
this
|
|
221
|
-
this
|
|
213
|
+
this.#issuesManager = IssuesManager.IssuesManager.IssuesManager.instance();
|
|
214
|
+
this.#aggregator = new IssueAggregator(this.#issuesManager);
|
|
215
|
+
this.#aggregator.addEventListener(IssueAggregatorEvents.AggregatedIssueUpdated, this.#issueUpdated, this);
|
|
216
|
+
this.#aggregator.addEventListener(IssueAggregatorEvents.FullUpdateRequired, this.#onFullUpdate, this);
|
|
217
|
+
this.#hiddenIssuesRow.hidden = this.#issuesManager.numberOfHiddenIssues() === 0;
|
|
218
|
+
this.#onFullUpdate();
|
|
219
|
+
this.#issuesManager.addEventListener(
|
|
220
|
+
IssuesManager.IssuesManager.Events.IssuesCountUpdated, this.#updateCounts, this);
|
|
222
221
|
}
|
|
223
222
|
|
|
224
223
|
static instance(opts: {forceNew: boolean|null} = {forceNew: null}): IssuesPane {
|
|
@@ -231,10 +230,10 @@ export class IssuesPane extends UI.Widget.VBox {
|
|
|
231
230
|
}
|
|
232
231
|
|
|
233
232
|
elementsToRestoreScrollPositionsFor(): Element[] {
|
|
234
|
-
return [this
|
|
233
|
+
return [this.#issuesTree.element];
|
|
235
234
|
}
|
|
236
235
|
|
|
237
|
-
|
|
236
|
+
#createToolbars(): {toolbarContainer: Element} {
|
|
238
237
|
const toolbarContainer = this.contentElement.createChild('div', 'issues-toolbar-container');
|
|
239
238
|
new UI.Toolbar.Toolbar('issues-toolbar-left', toolbarContainer);
|
|
240
239
|
const rightToolbar = new UI.Toolbar.Toolbar('issues-toolbar-right', toolbarContainer);
|
|
@@ -246,7 +245,7 @@ export class IssuesPane extends UI.Widget.VBox {
|
|
|
246
245
|
groupByCategoryCheckbox.setVisible(false);
|
|
247
246
|
rightToolbar.appendToolbarItem(groupByCategoryCheckbox);
|
|
248
247
|
groupByCategorySetting.addChangeListener(() => {
|
|
249
|
-
this
|
|
248
|
+
this.#fullUpdate(true);
|
|
250
249
|
});
|
|
251
250
|
|
|
252
251
|
const groupByKindSetting = getGroupIssuesByKindSetting();
|
|
@@ -254,16 +253,16 @@ export class IssuesPane extends UI.Widget.VBox {
|
|
|
254
253
|
groupByKindSetting, i18nString(UIStrings.groupDisplayedIssuesUnderKind), i18nString(UIStrings.groupByKind));
|
|
255
254
|
rightToolbar.appendToolbarItem(groupByKindSettingCheckbox);
|
|
256
255
|
groupByKindSetting.addChangeListener(() => {
|
|
257
|
-
this
|
|
256
|
+
this.#fullUpdate(true);
|
|
258
257
|
});
|
|
259
258
|
groupByKindSettingCheckbox.setVisible(Root.Runtime.experiments.isEnabled('groupAndHideIssuesByKind'));
|
|
260
259
|
|
|
261
260
|
const thirdPartySetting = IssuesManager.Issue.getShowThirdPartyIssuesSetting();
|
|
262
|
-
this
|
|
261
|
+
this.#showThirdPartyCheckbox = new UI.Toolbar.ToolbarSettingCheckbox(
|
|
263
262
|
thirdPartySetting, i18nString(UIStrings.includeCookieIssuesCausedBy),
|
|
264
263
|
i18nString(UIStrings.includeThirdpartyCookieIssues));
|
|
265
|
-
rightToolbar.appendToolbarItem(this
|
|
266
|
-
this.setDefaultFocusedElement(this
|
|
264
|
+
rightToolbar.appendToolbarItem(this.#showThirdPartyCheckbox);
|
|
265
|
+
this.setDefaultFocusedElement(this.#showThirdPartyCheckbox.inputElement);
|
|
267
266
|
|
|
268
267
|
rightToolbar.appendSeparator();
|
|
269
268
|
const issueCounter = new IssueCounter.IssueCounter.IssueCounter();
|
|
@@ -283,17 +282,17 @@ export class IssuesPane extends UI.Widget.VBox {
|
|
|
283
282
|
return {toolbarContainer};
|
|
284
283
|
}
|
|
285
284
|
|
|
286
|
-
|
|
287
|
-
this
|
|
285
|
+
#issueUpdated(event: Common.EventTarget.EventTargetEvent<AggregatedIssue>): void {
|
|
286
|
+
this.#scheduleIssueViewUpdate(event.data);
|
|
288
287
|
}
|
|
289
288
|
|
|
290
|
-
|
|
291
|
-
this
|
|
289
|
+
#scheduleIssueViewUpdate(issue: AggregatedIssue): void {
|
|
290
|
+
this.#issueViewUpdatePromise = this.#issueViewUpdatePromise.then(() => this.#updateIssueView(issue));
|
|
292
291
|
}
|
|
293
292
|
|
|
294
293
|
/** Don't call directly. Use `scheduleIssueViewUpdate` instead. */
|
|
295
|
-
|
|
296
|
-
let issueView = this
|
|
294
|
+
async #updateIssueView(issue: AggregatedIssue): Promise<void> {
|
|
295
|
+
let issueView = this.#issueViews.get(issue.aggregationKey());
|
|
297
296
|
if (!issueView) {
|
|
298
297
|
const description = issue.getDescription();
|
|
299
298
|
if (!description) {
|
|
@@ -303,12 +302,12 @@ export class IssuesPane extends UI.Widget.VBox {
|
|
|
303
302
|
const markdownDescription =
|
|
304
303
|
await IssuesManager.MarkdownIssueDescription.createIssueDescriptionFromMarkdown(description);
|
|
305
304
|
issueView = new IssueView(issue, markdownDescription);
|
|
306
|
-
this
|
|
307
|
-
const parent = this
|
|
305
|
+
this.#issueViews.set(issue.aggregationKey(), issueView);
|
|
306
|
+
const parent = this.#getIssueViewParent(issue);
|
|
308
307
|
this.appendIssueViewToParent(issueView, parent);
|
|
309
308
|
} else {
|
|
310
309
|
issueView.setIssue(issue);
|
|
311
|
-
const newParent = this
|
|
310
|
+
const newParent = this.#getIssueViewParent(issue);
|
|
312
311
|
if (issueView.parent !== newParent &&
|
|
313
312
|
!(newParent instanceof UI.TreeOutline.TreeOutline && issueView.parent === newParent.rootElement())) {
|
|
314
313
|
issueView.parent?.removeChild(issueView);
|
|
@@ -316,7 +315,7 @@ export class IssuesPane extends UI.Widget.VBox {
|
|
|
316
315
|
}
|
|
317
316
|
}
|
|
318
317
|
issueView.update();
|
|
319
|
-
this
|
|
318
|
+
this.#updateCounts();
|
|
320
319
|
}
|
|
321
320
|
|
|
322
321
|
appendIssueViewToParent(issueView: IssueView, parent: UI.TreeOutline.TreeOutline|UI.TreeOutline.TreeElement): void {
|
|
@@ -335,49 +334,49 @@ export class IssuesPane extends UI.Widget.VBox {
|
|
|
335
334
|
});
|
|
336
335
|
}
|
|
337
336
|
|
|
338
|
-
|
|
337
|
+
#getIssueViewParent(issue: AggregatedIssue): UI.TreeOutline.TreeOutline|UI.TreeOutline.TreeElement {
|
|
339
338
|
const groupByKind = Root.Runtime.experiments.isEnabled('groupAndHideIssuesByKind');
|
|
340
339
|
if (issue.isHidden()) {
|
|
341
|
-
return this
|
|
340
|
+
return this.#hiddenIssuesRow;
|
|
342
341
|
}
|
|
343
342
|
if (groupByKind && getGroupIssuesByKindSetting().get()) {
|
|
344
343
|
const kind = issue.getKind();
|
|
345
|
-
const view = this
|
|
344
|
+
const view = this.#kindViews.get(kind);
|
|
346
345
|
if (view) {
|
|
347
346
|
return view;
|
|
348
347
|
}
|
|
349
348
|
|
|
350
349
|
const newView = new IssueKindView(kind);
|
|
351
|
-
this
|
|
350
|
+
this.#issuesTree.appendChild(newView, (a, b) => {
|
|
352
351
|
if (a instanceof IssueKindView && b instanceof IssueKindView) {
|
|
353
352
|
return issueKindViewSortPriority(a, b);
|
|
354
353
|
}
|
|
355
354
|
return 0;
|
|
356
355
|
});
|
|
357
|
-
this
|
|
356
|
+
this.#kindViews.set(kind, newView);
|
|
358
357
|
return newView;
|
|
359
358
|
}
|
|
360
359
|
if (getGroupIssuesByCategorySetting().get()) {
|
|
361
360
|
const category = issue.getCategory();
|
|
362
|
-
const view = this
|
|
361
|
+
const view = this.#categoryViews.get(category);
|
|
363
362
|
if (view) {
|
|
364
363
|
return view;
|
|
365
364
|
}
|
|
366
365
|
|
|
367
366
|
const newView = new IssueCategoryView(category);
|
|
368
|
-
this
|
|
367
|
+
this.#issuesTree.appendChild(newView, (a, b) => {
|
|
369
368
|
if (a instanceof IssueCategoryView && b instanceof IssueCategoryView) {
|
|
370
369
|
return a.getCategoryName().localeCompare(b.getCategoryName());
|
|
371
370
|
}
|
|
372
371
|
return 0;
|
|
373
372
|
});
|
|
374
|
-
this
|
|
373
|
+
this.#categoryViews.set(category, newView);
|
|
375
374
|
return newView;
|
|
376
375
|
}
|
|
377
|
-
return this
|
|
376
|
+
return this.#issuesTree;
|
|
378
377
|
}
|
|
379
378
|
|
|
380
|
-
|
|
379
|
+
#clearViews<T>(views: Map<T, UI.TreeOutline.TreeElement>, preservedSet?: Set<T>): void {
|
|
381
380
|
for (const [key, view] of Array.from(views.entries())) {
|
|
382
381
|
if (preservedSet?.has(key)) {
|
|
383
382
|
continue;
|
|
@@ -387,74 +386,75 @@ export class IssuesPane extends UI.Widget.VBox {
|
|
|
387
386
|
}
|
|
388
387
|
}
|
|
389
388
|
|
|
390
|
-
|
|
391
|
-
this
|
|
389
|
+
#onFullUpdate(): void {
|
|
390
|
+
this.#fullUpdate(false);
|
|
392
391
|
}
|
|
393
392
|
|
|
394
|
-
|
|
395
|
-
this
|
|
396
|
-
this
|
|
397
|
-
this
|
|
398
|
-
if (this
|
|
399
|
-
for (const issue of this
|
|
400
|
-
this
|
|
393
|
+
#fullUpdate(force: boolean): void {
|
|
394
|
+
this.#clearViews(this.#categoryViews, force ? undefined : this.#aggregator.aggregatedIssueCategories());
|
|
395
|
+
this.#clearViews(this.#kindViews, force ? undefined : this.#aggregator.aggregatedIssueKinds());
|
|
396
|
+
this.#clearViews(this.#issueViews, force ? undefined : this.#aggregator.aggregatedIssueCodes());
|
|
397
|
+
if (this.#aggregator) {
|
|
398
|
+
for (const issue of this.#aggregator.aggregatedIssues()) {
|
|
399
|
+
this.#scheduleIssueViewUpdate(issue);
|
|
401
400
|
}
|
|
402
401
|
}
|
|
403
|
-
this
|
|
402
|
+
this.#updateCounts();
|
|
404
403
|
}
|
|
405
404
|
|
|
406
|
-
|
|
407
|
-
for (const view of this
|
|
408
|
-
const count = this
|
|
405
|
+
#updateIssueKindViewsCount(): void {
|
|
406
|
+
for (const view of this.#kindViews.values()) {
|
|
407
|
+
const count = this.#issuesManager.numberOfIssues(view.getKind());
|
|
409
408
|
view.update(count);
|
|
410
409
|
}
|
|
411
410
|
}
|
|
412
411
|
|
|
413
|
-
|
|
412
|
+
#updateCounts(): void {
|
|
414
413
|
const groupByKind = Root.Runtime.experiments.isEnabled('groupAndHideIssuesByKind');
|
|
415
|
-
this
|
|
416
|
-
this
|
|
414
|
+
this.#showIssuesTreeOrNoIssuesDetectedMessage(
|
|
415
|
+
this.#issuesManager.numberOfIssues(), this.#issuesManager.numberOfHiddenIssues());
|
|
417
416
|
if (groupByKind && getGroupIssuesByKindSetting().get()) {
|
|
418
|
-
this
|
|
417
|
+
this.#updateIssueKindViewsCount();
|
|
419
418
|
}
|
|
420
419
|
}
|
|
421
420
|
|
|
422
|
-
|
|
421
|
+
#showIssuesTreeOrNoIssuesDetectedMessage(issuesCount: number, hiddenIssueCount: number): void {
|
|
423
422
|
if (issuesCount > 0 || hiddenIssueCount > 0) {
|
|
424
|
-
this
|
|
425
|
-
this
|
|
426
|
-
this
|
|
427
|
-
this
|
|
428
|
-
const firstChild = this
|
|
423
|
+
this.#hiddenIssuesRow.hidden = hiddenIssueCount === 0;
|
|
424
|
+
this.#hiddenIssuesRow.update(hiddenIssueCount);
|
|
425
|
+
this.#issuesTree.element.hidden = false;
|
|
426
|
+
this.#noIssuesMessageDiv.style.display = 'none';
|
|
427
|
+
const firstChild = this.#issuesTree.firstChild();
|
|
429
428
|
if (firstChild) {
|
|
430
429
|
firstChild.select(/* omitFocus= */ true);
|
|
431
430
|
this.setDefaultFocusedElement(firstChild.listItemElement);
|
|
432
431
|
}
|
|
433
432
|
} else {
|
|
434
|
-
this
|
|
435
|
-
if (this
|
|
436
|
-
this.setDefaultFocusedElement(this
|
|
433
|
+
this.#issuesTree.element.hidden = true;
|
|
434
|
+
if (this.#showThirdPartyCheckbox) {
|
|
435
|
+
this.setDefaultFocusedElement(this.#showThirdPartyCheckbox.inputElement);
|
|
437
436
|
}
|
|
438
437
|
// We alreay know that issesCount is zero here.
|
|
439
|
-
const hasOnlyThirdPartyIssues = this
|
|
440
|
-
this
|
|
441
|
-
|
|
442
|
-
|
|
438
|
+
const hasOnlyThirdPartyIssues = this.#issuesManager.numberOfAllStoredIssues() > 0;
|
|
439
|
+
this.#noIssuesMessageDiv.textContent = hasOnlyThirdPartyIssues ?
|
|
440
|
+
i18nString(UIStrings.onlyThirdpartyCookieIssues) :
|
|
441
|
+
i18nString(UIStrings.noIssuesDetectedSoFar);
|
|
442
|
+
this.#noIssuesMessageDiv.style.display = 'flex';
|
|
443
443
|
}
|
|
444
444
|
}
|
|
445
445
|
|
|
446
446
|
async reveal(issue: IssuesManager.Issue.Issue): Promise<void> {
|
|
447
|
-
await this
|
|
448
|
-
const key = this
|
|
449
|
-
const issueView = this
|
|
447
|
+
await this.#issueViewUpdatePromise;
|
|
448
|
+
const key = this.#aggregator.keyForIssue(issue);
|
|
449
|
+
const issueView = this.#issueViews.get(key);
|
|
450
450
|
const groupByKind = Root.Runtime.experiments.isEnabled('groupAndHideIssuesByKind');
|
|
451
451
|
if (issueView) {
|
|
452
452
|
if (issueView.isForHiddenIssue()) {
|
|
453
|
-
this
|
|
454
|
-
this
|
|
453
|
+
this.#hiddenIssuesRow.expand();
|
|
454
|
+
this.#hiddenIssuesRow.reveal();
|
|
455
455
|
}
|
|
456
456
|
if (groupByKind && getGroupIssuesByKindSetting().get() && !issueView.isForHiddenIssue()) {
|
|
457
|
-
const kindView = this
|
|
457
|
+
const kindView = this.#kindViews.get(issueView.getIssueKind());
|
|
458
458
|
kindView?.expand();
|
|
459
459
|
kindView?.reveal();
|
|
460
460
|
}
|
|
@@ -466,7 +466,7 @@ export class IssuesPane extends UI.Widget.VBox {
|
|
|
466
466
|
|
|
467
467
|
wasShown(): void {
|
|
468
468
|
super.wasShown();
|
|
469
|
-
this
|
|
469
|
+
this.#issuesTree.registerCSSFiles([issuesTreeStyles]);
|
|
470
470
|
this.registerCSSFiles([issuesPaneStyles]);
|
|
471
471
|
}
|
|
472
472
|
}
|
|
@@ -49,8 +49,8 @@ const str_ =
|
|
|
49
49
|
const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
|
|
50
50
|
|
|
51
51
|
export class WasmCrossOriginModuleSharingAffectedResourcesView extends AffectedResourcesView {
|
|
52
|
-
|
|
53
|
-
|
|
52
|
+
#appendIssues(issues: Iterable<IssuesManager.WasmCrossOriginModuleSharingIssue.WasmCrossOriginModuleSharingIssue>):
|
|
53
|
+
void {
|
|
54
54
|
const header = document.createElement('tr');
|
|
55
55
|
this.appendColumnTitle(header, i18nString(UIStrings.wasmModuleUrl));
|
|
56
56
|
this.appendColumnTitle(header, i18nString(UIStrings.sourceOrigin));
|
|
@@ -61,7 +61,7 @@ export class WasmCrossOriginModuleSharingAffectedResourcesView extends AffectedR
|
|
|
61
61
|
|
|
62
62
|
let count = 0;
|
|
63
63
|
for (const issue of issues) {
|
|
64
|
-
this
|
|
64
|
+
this.#appendDetails(issue.details());
|
|
65
65
|
count++;
|
|
66
66
|
}
|
|
67
67
|
this.updateAffectedResourceCount(count);
|
|
@@ -71,7 +71,7 @@ export class WasmCrossOriginModuleSharingAffectedResourcesView extends AffectedR
|
|
|
71
71
|
return i18nString(UIStrings.nModuleTransfers, {n: count});
|
|
72
72
|
}
|
|
73
73
|
|
|
74
|
-
|
|
74
|
+
#appendDetails(details: Protocol.Audits.WasmCrossOriginModuleSharingIssueDetails): void {
|
|
75
75
|
const element = document.createElement('tr');
|
|
76
76
|
|
|
77
77
|
element.appendChild(this.createIssueDetailCell(details.wasmModuleUrl));
|
|
@@ -85,6 +85,6 @@ export class WasmCrossOriginModuleSharingAffectedResourcesView extends AffectedR
|
|
|
85
85
|
|
|
86
86
|
update(): void {
|
|
87
87
|
this.clear();
|
|
88
|
-
this
|
|
88
|
+
this.#appendIssues(this.issue.getWasmCrossOriginModuleSharingIssue());
|
|
89
89
|
}
|
|
90
90
|
}
|
|
@@ -29,18 +29,18 @@ export interface HiddenIssuesMenuData {
|
|
|
29
29
|
|
|
30
30
|
export class HideIssuesMenu extends HTMLElement {
|
|
31
31
|
static readonly litTagName = LitHtml.literal`devtools-hide-issues-menu`;
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
32
|
+
readonly #shadow: ShadowRoot = this.attachShadow({mode: 'open'});
|
|
33
|
+
#menuItemLabel: Common.UIString.LocalizedString = Common.UIString.LocalizedEmptyString;
|
|
34
|
+
#menuItemAction: () => void = () => {};
|
|
35
35
|
|
|
36
36
|
set data(data: HiddenIssuesMenuData) {
|
|
37
|
-
this
|
|
38
|
-
this
|
|
39
|
-
this
|
|
37
|
+
this.#menuItemLabel = data.menuItemLabel;
|
|
38
|
+
this.#menuItemAction = data.menuItemAction;
|
|
39
|
+
this.#render();
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
connectedCallback(): void {
|
|
43
|
-
this
|
|
43
|
+
this.#shadow.adoptedStyleSheets = [hideIssuesMenuStyles];
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
onMenuOpen(event: Event): void {
|
|
@@ -51,12 +51,12 @@ export class HideIssuesMenu extends HTMLElement {
|
|
|
51
51
|
this.classList.toggle('has-context-menu-opened', false);
|
|
52
52
|
},
|
|
53
53
|
});
|
|
54
|
-
contextMenu.headerSection().appendItem(this
|
|
54
|
+
contextMenu.headerSection().appendItem(this.#menuItemLabel, () => this.#menuItemAction());
|
|
55
55
|
contextMenu.show();
|
|
56
56
|
this.classList.toggle('has-context-menu-opened', true);
|
|
57
57
|
}
|
|
58
58
|
|
|
59
|
-
|
|
59
|
+
#render(): void {
|
|
60
60
|
// Disabled until https://crbug.com/1079231 is fixed.
|
|
61
61
|
// clang-format off
|
|
62
62
|
LitHtml.render(LitHtml.html`
|
|
@@ -66,7 +66,7 @@ export class HideIssuesMenu extends HTMLElement {
|
|
|
66
66
|
>
|
|
67
67
|
</${IconButton.Icon.Icon.litTagName}>
|
|
68
68
|
</button>
|
|
69
|
-
`, this
|
|
69
|
+
`, this.#shadow, {host: this});
|
|
70
70
|
}
|
|
71
71
|
}
|
|
72
72
|
|