chrome-devtools-frontend 1.0.920568 → 1.0.922044
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/all_devtools_files.gni +1 -1
- package/config/gni/devtools_grd_files.gni +5 -0
- package/config/typescript/tsconfig.base.json +1 -0
- package/extension-api/ExtensionAPI.d.ts +1 -1
- package/front_end/core/common/ColorUtils.ts +2 -1
- package/front_end/core/common/Object.ts +36 -1
- package/front_end/core/common/WasmDisassembly.ts +6 -14
- package/front_end/core/common/common.ts +2 -1
- package/front_end/core/i18n/locales/af.json +53 -32
- package/front_end/core/i18n/locales/am.json +56 -35
- package/front_end/core/i18n/locales/ar.json +53 -32
- package/front_end/core/i18n/locales/as.json +63 -42
- package/front_end/core/i18n/locales/az.json +53 -32
- package/front_end/core/i18n/locales/be.json +52 -31
- package/front_end/core/i18n/locales/bg.json +51 -30
- package/front_end/core/i18n/locales/bn.json +63 -42
- package/front_end/core/i18n/locales/bs.json +57 -36
- package/front_end/core/i18n/locales/ca.json +55 -34
- package/front_end/core/i18n/locales/cs.json +51 -30
- package/front_end/core/i18n/locales/cy.json +63 -42
- package/front_end/core/i18n/locales/da.json +55 -34
- package/front_end/core/i18n/locales/de.json +52 -31
- package/front_end/core/i18n/locales/el.json +58 -37
- package/front_end/core/i18n/locales/en-GB.json +51 -30
- package/front_end/core/i18n/locales/en-US.json +67 -34
- package/front_end/core/i18n/locales/en-XL.json +67 -34
- package/front_end/core/i18n/locales/es-419.json +53 -32
- package/front_end/core/i18n/locales/es.json +52 -31
- package/front_end/core/i18n/locales/et.json +54 -33
- package/front_end/core/i18n/locales/eu.json +71 -50
- package/front_end/core/i18n/locales/fa.json +54 -33
- package/front_end/core/i18n/locales/fi.json +55 -34
- package/front_end/core/i18n/locales/fil.json +59 -38
- package/front_end/core/i18n/locales/fr-CA.json +52 -31
- package/front_end/core/i18n/locales/fr.json +54 -33
- package/front_end/core/i18n/locales/gl.json +57 -36
- package/front_end/core/i18n/locales/gu.json +65 -44
- package/front_end/core/i18n/locales/he.json +56 -35
- package/front_end/core/i18n/locales/hi.json +61 -40
- package/front_end/core/i18n/locales/hr.json +55 -34
- package/front_end/core/i18n/locales/hu.json +53 -32
- package/front_end/core/i18n/locales/hy.json +54 -33
- package/front_end/core/i18n/locales/id.json +59 -38
- package/front_end/core/i18n/locales/is.json +51 -30
- package/front_end/core/i18n/locales/it.json +51 -30
- package/front_end/core/i18n/locales/ja.json +52 -31
- package/front_end/core/i18n/locales/ka.json +51 -30
- package/front_end/core/i18n/locales/kk.json +56 -35
- package/front_end/core/i18n/locales/km.json +59 -38
- package/front_end/core/i18n/locales/kn.json +63 -42
- package/front_end/core/i18n/locales/ko.json +59 -38
- package/front_end/core/i18n/locales/ky.json +54 -33
- package/front_end/core/i18n/locales/lo.json +59 -38
- package/front_end/core/i18n/locales/lt.json +52 -31
- package/front_end/core/i18n/locales/lv.json +60 -39
- package/front_end/core/i18n/locales/mk.json +51 -30
- package/front_end/core/i18n/locales/ml.json +65 -44
- package/front_end/core/i18n/locales/mn.json +59 -38
- package/front_end/core/i18n/locales/mr.json +61 -40
- package/front_end/core/i18n/locales/ms.json +59 -38
- package/front_end/core/i18n/locales/my.json +59 -38
- package/front_end/core/i18n/locales/ne.json +63 -42
- package/front_end/core/i18n/locales/nl.json +55 -34
- package/front_end/core/i18n/locales/no.json +54 -33
- package/front_end/core/i18n/locales/or.json +63 -42
- package/front_end/core/i18n/locales/pa.json +61 -40
- package/front_end/core/i18n/locales/pl.json +51 -30
- package/front_end/core/i18n/locales/pt-PT.json +52 -31
- package/front_end/core/i18n/locales/pt.json +59 -38
- package/front_end/core/i18n/locales/ro.json +52 -31
- package/front_end/core/i18n/locales/ru.json +52 -31
- package/front_end/core/i18n/locales/si.json +59 -38
- package/front_end/core/i18n/locales/sk.json +52 -31
- package/front_end/core/i18n/locales/sl.json +52 -31
- package/front_end/core/i18n/locales/sq.json +51 -30
- package/front_end/core/i18n/locales/sr-Latn.json +52 -31
- package/front_end/core/i18n/locales/sr.json +52 -31
- package/front_end/core/i18n/locales/sv.json +52 -31
- package/front_end/core/i18n/locales/sw.json +60 -39
- package/front_end/core/i18n/locales/ta.json +67 -46
- package/front_end/core/i18n/locales/te.json +62 -41
- package/front_end/core/i18n/locales/th.json +52 -31
- package/front_end/core/i18n/locales/tr.json +55 -34
- package/front_end/core/i18n/locales/uk.json +55 -34
- package/front_end/core/i18n/locales/ur.json +60 -39
- package/front_end/core/i18n/locales/uz.json +52 -31
- package/front_end/core/i18n/locales/vi.json +54 -33
- package/front_end/core/i18n/locales/zh-HK.json +52 -31
- package/front_end/core/i18n/locales/zh-TW.json +57 -36
- package/front_end/core/i18n/locales/zh.json +56 -35
- package/front_end/core/i18n/locales/zu.json +59 -38
- package/front_end/core/sdk/RemoteObject.ts +43 -20
- package/front_end/core/sdk/TracingModel.ts +1 -1
- package/front_end/generated/SupportedCSSProperties.js +4 -4
- package/front_end/legacy/legacy-defs.d.ts +24 -0
- package/front_end/models/extensions/ExtensionAPI.ts +9 -4
- package/front_end/models/extensions/ExtensionServer.ts +1 -1
- package/front_end/models/issues_manager/AttributionReportingIssue.ts +4 -1
- package/front_end/models/issues_manager/SameSiteCookieIssue.ts +12 -3
- package/front_end/models/issues_manager/descriptions/SameSiteSamePartyCrossPartyContextSet.md +10 -0
- package/front_end/models/issues_manager/descriptions/arAttributionEventSourceTriggerDataTooLarge.md +4 -0
- package/front_end/models/timeline_model/TimelineModel.ts +5 -1
- package/front_end/panels/application/ApplicationPanelSidebar.ts +2 -2
- package/front_end/panels/application/DatabaseQueryView.ts +7 -1
- package/front_end/panels/changes/ChangesSidebar.ts +6 -1
- package/front_end/panels/console/ConsolePrompt.ts +6 -1
- package/front_end/panels/css_overview/CSSOverviewCompletedView.ts +2 -2
- package/front_end/panels/css_overview/CSSOverviewSidebarPanel.ts +8 -1
- package/front_end/panels/elements/ElementsPanel.ts +25 -1
- package/front_end/panels/elements/StylesSidebarPane.ts +12 -2
- package/front_end/panels/elements/components/ElementsBreadcrumbs.ts +13 -1
- package/front_end/panels/elements/layoutPane.css +1 -0
- package/front_end/panels/emulation/AdvancedApp.ts +2 -12
- package/front_end/panels/emulation/InspectedPagePlaceholder.ts +14 -1
- package/front_end/panels/issues/AttributionReportingIssueDetailsView.ts +10 -0
- package/front_end/panels/issues/IssueAggregator.ts +2 -2
- package/front_end/panels/layer_viewer/LayerDetailsView.ts +7 -1
- package/front_end/panels/layer_viewer/Layers3DView.ts +7 -1
- package/front_end/panels/layer_viewer/PaintProfilerView.ts +7 -1
- package/front_end/panels/lighthouse/LighthousePanel.ts +6 -7
- package/front_end/panels/mobile_throttling/ThrottlingSettingsTab.ts +8 -4
- package/front_end/panels/mobile_throttling/throttlingSettingsTab.css +4 -0
- package/front_end/panels/network/NetworkItemView.ts +24 -4
- package/front_end/panels/network/NetworkLogView.ts +14 -5
- package/front_end/panels/network/NetworkPanel.ts +7 -6
- package/front_end/panels/network/RequestHeadersView.ts +0 -345
- package/front_end/panels/network/RequestPayloadView.ts +529 -0
- package/front_end/panels/network/RequestTimingView.ts +3 -1
- package/front_end/panels/network/forward/UIRequestLocation.ts +1 -0
- package/front_end/panels/network/module.json +0 -3
- package/front_end/panels/network/network-legacy.ts +5 -0
- package/front_end/panels/network/network.ts +2 -0
- package/front_end/panels/network/requestPayloadTree.css +130 -0
- package/front_end/panels/network/requestPayloadView.css +16 -0
- package/front_end/panels/profiler/CPUProfileFlameChart.ts +3 -3
- package/front_end/panels/profiler/ProfileLauncherView.ts +6 -1
- package/front_end/panels/profiler/ProfileView.ts +1 -1
- package/front_end/panels/profiler/ProfilesPanel.ts +2 -2
- package/front_end/panels/sources/InplaceFormatterEditorAction.ts +5 -5
- package/front_end/panels/sources/ScriptFormatterEditorAction.ts +5 -6
- package/front_end/panels/sources/SourcesPanel.ts +4 -5
- package/front_end/panels/sources/SourcesView.ts +16 -3
- package/front_end/panels/sources/UISourceCodeFrame.ts +7 -1
- package/front_end/panels/sources/watchExpressionsSidebarPane.css +2 -7
- package/front_end/panels/timeline/TimelineFlameChartView.ts +4 -4
- package/front_end/panels/timeline/TimelineLayersView.ts +7 -7
- package/front_end/panels/timeline/TimelinePanel.ts +5 -4
- package/front_end/ui/legacy/ARIAUtils.ts +12 -0
- package/front_end/ui/legacy/Fragment.ts +1 -1
- package/front_end/ui/legacy/InspectorView.ts +17 -0
- package/front_end/ui/legacy/SplitWidget.ts +6 -1
- package/front_end/ui/legacy/TabbedPane.ts +4 -0
- package/front_end/ui/legacy/UIUtils.ts +1 -1
- package/front_end/ui/legacy/components/data_grid/dataGrid.css +5 -0
- package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +16 -66
- package/front_end/ui/legacy/components/perf_ui/FilmStripView.ts +8 -1
- package/front_end/ui/legacy/components/perf_ui/FlameChart.ts +9 -1
- package/front_end/ui/legacy/components/perf_ui/TimelineOverviewPane.ts +11 -1
- package/front_end/ui/legacy/components/source_frame/ImageView.ts +6 -3
- package/front_end/ui/legacy/utils/focus-changed.ts +1 -1
- package/inspector_overlay/common.ts +3 -3
- package/inspector_overlay/tool_viewport_size.ts +1 -1
- package/package.json +1 -1
|
@@ -42,6 +42,11 @@ const UIStrings = {
|
|
|
42
42
|
* parameter.
|
|
43
43
|
*/
|
|
44
44
|
invalidTriggerData: 'Invalid `trigger-data`',
|
|
45
|
+
/**
|
|
46
|
+
* @description Label for the column showing the invalid value used for the
|
|
47
|
+
* 'event-source-trigger-data' query parameter.
|
|
48
|
+
*/
|
|
49
|
+
invalidEventSourceTriggerData: 'Invalid `event-source-trigger-data`',
|
|
45
50
|
};
|
|
46
51
|
const str_ = i18n.i18n.registerUIStrings('panels/issues/AttributionReportingIssueDetailsView.ts', UIStrings);
|
|
47
52
|
const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
|
|
@@ -89,6 +94,10 @@ export class AttributionReportingIssueDetailsView extends AffectedResourcesView
|
|
|
89
94
|
this.appendColumnTitle(header, i18nString(UIStrings.request));
|
|
90
95
|
this.appendColumnTitle(header, i18nString(UIStrings.invalidTriggerData));
|
|
91
96
|
break;
|
|
97
|
+
case IssuesManager.AttributionReportingIssue.IssueCode.AttributionEventSourceTriggerDataTooLarge:
|
|
98
|
+
this.appendColumnTitle(header, i18nString(UIStrings.request));
|
|
99
|
+
this.appendColumnTitle(header, i18nString(UIStrings.invalidEventSourceTriggerData));
|
|
100
|
+
break;
|
|
92
101
|
case IssuesManager.AttributionReportingIssue.IssueCode.InvalidAttributionSourceEventId:
|
|
93
102
|
this.appendColumnTitle(header, i18nString(UIStrings.frame));
|
|
94
103
|
this.appendColumnTitle(header, i18nString(UIStrings.element));
|
|
@@ -132,6 +141,7 @@ export class AttributionReportingIssueDetailsView extends AffectedResourcesView
|
|
|
132
141
|
this.appendIssueDetailCell(element, details.invalidParameter || '');
|
|
133
142
|
break;
|
|
134
143
|
case IssuesManager.AttributionReportingIssue.IssueCode.AttributionTriggerDataTooLarge:
|
|
144
|
+
case IssuesManager.AttributionReportingIssue.IssueCode.AttributionEventSourceTriggerDataTooLarge:
|
|
135
145
|
case IssuesManager.AttributionReportingIssue.IssueCode.AttributionUntrustworthyOrigin:
|
|
136
146
|
case IssuesManager.AttributionReportingIssue.IssueCode.InvalidAttributionData:
|
|
137
147
|
this.appendRequestOrEmptyCell(element, details.request);
|
|
@@ -271,7 +271,7 @@ export class IssueAggregator extends Common.ObjectWrapper.ObjectWrapper<EventTyp
|
|
|
271
271
|
|
|
272
272
|
private aggregateIssueByStatus(
|
|
273
273
|
aggregatedIssuesMap: Map<AggregationKey, AggregatedIssue>, issue: IssuesManager.Issue.Issue): AggregatedIssue {
|
|
274
|
-
const key = issue.code() as AggregationKey;
|
|
274
|
+
const key = issue.code() as unknown as AggregationKey;
|
|
275
275
|
let aggregatedIssue = aggregatedIssuesMap.get(key);
|
|
276
276
|
if (!aggregatedIssue) {
|
|
277
277
|
aggregatedIssue = new AggregatedIssue(issue.code(), key);
|
|
@@ -310,7 +310,7 @@ export class IssueAggregator extends Common.ObjectWrapper.ObjectWrapper<EventTyp
|
|
|
310
310
|
}
|
|
311
311
|
|
|
312
312
|
keyForIssue(issue: IssuesManager.Issue.Issue<string>): AggregationKey {
|
|
313
|
-
return issue.code() as AggregationKey;
|
|
313
|
+
return issue.code() as unknown as AggregationKey;
|
|
314
314
|
}
|
|
315
315
|
}
|
|
316
316
|
|
|
@@ -28,6 +28,7 @@
|
|
|
28
28
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
29
29
|
*/
|
|
30
30
|
|
|
31
|
+
import * as Common from '../../core/common/common.js';
|
|
31
32
|
import * as i18n from '../../core/i18n/i18n.js';
|
|
32
33
|
import * as Platform from '../../core/platform/platform.js';
|
|
33
34
|
import * as SDK from '../../core/sdk/sdk.js';
|
|
@@ -155,7 +156,8 @@ const UIStrings = {
|
|
|
155
156
|
const str_ = i18n.i18n.registerUIStrings('panels/layer_viewer/LayerDetailsView.ts', UIStrings);
|
|
156
157
|
const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
|
|
157
158
|
const i18nLazyString = i18n.i18n.getLazilyComputedLocalizedString.bind(undefined, str_);
|
|
158
|
-
export class LayerDetailsView extends UI.Widget.Widget
|
|
159
|
+
export class LayerDetailsView extends Common.ObjectWrapper.eventMixin<EventTypes, typeof UI.Widget.Widget>(
|
|
160
|
+
UI.Widget.Widget) implements LayerView {
|
|
159
161
|
private readonly layerViewHost: LayerViewHost;
|
|
160
162
|
private readonly emptyWidget: UI.EmptyWidget.EmptyWidget;
|
|
161
163
|
private layerSnapshotMap: Map<SDK.LayerTreeBase.Layer, SnapshotSelection>;
|
|
@@ -470,6 +472,10 @@ export enum Events {
|
|
|
470
472
|
PaintProfilerRequested = 'PaintProfilerRequested',
|
|
471
473
|
}
|
|
472
474
|
|
|
475
|
+
export type EventTypes = {
|
|
476
|
+
[Events.PaintProfilerRequested]: Selection,
|
|
477
|
+
};
|
|
478
|
+
|
|
473
479
|
export const slowScrollRectNames = new Map([
|
|
474
480
|
[SDK.LayerTreeBase.Layer.ScrollRectType.NonFastScrollable, i18nLazyString(UIStrings.nonFastScrollable)],
|
|
475
481
|
[SDK.LayerTreeBase.Layer.ScrollRectType.TouchEventHandler, i18nLazyString(UIStrings.touchEventHandler)],
|
|
@@ -99,7 +99,8 @@ const uniformSamplerLocations = new Map<WebGLProgram, WebGLUniformLocation|null>
|
|
|
99
99
|
|
|
100
100
|
const imageForTexture = new Map<WebGLTexture, HTMLImageElement>();
|
|
101
101
|
|
|
102
|
-
export class Layers3DView extends UI.Widget.VBox
|
|
102
|
+
export class Layers3DView extends Common.ObjectWrapper.eventMixin<EventTypes, typeof UI.Widget.VBox>(UI.Widget.VBox)
|
|
103
|
+
implements LayerView {
|
|
103
104
|
private readonly failBanner: UI.Widget.VBox;
|
|
104
105
|
private readonly layerViewHost: LayerViewHost;
|
|
105
106
|
private transformController: TransformController;
|
|
@@ -892,6 +893,11 @@ export enum Events {
|
|
|
892
893
|
ScaleChanged = 'ScaleChanged',
|
|
893
894
|
}
|
|
894
895
|
|
|
896
|
+
export type EventTypes = {
|
|
897
|
+
[Events.PaintProfilerRequested]: Selection,
|
|
898
|
+
[Events.ScaleChanged]: void,
|
|
899
|
+
};
|
|
900
|
+
|
|
895
901
|
export const enum ChromeTexture {
|
|
896
902
|
Left = 0,
|
|
897
903
|
Middle = 1,
|
|
@@ -28,6 +28,7 @@
|
|
|
28
28
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
29
29
|
*/
|
|
30
30
|
|
|
31
|
+
import * as Common from '../../core/common/common.js';
|
|
31
32
|
import * as i18n from '../../core/i18n/i18n.js';
|
|
32
33
|
import * as Platform from '../../core/platform/platform.js';
|
|
33
34
|
import * as PerfUI from '../../ui/legacy/components/perf_ui/perf_ui.js';
|
|
@@ -75,7 +76,8 @@ let categories: {[x: string]: PaintProfilerCategory}|null = null;
|
|
|
75
76
|
|
|
76
77
|
let logItemCategoriesMap: {[x: string]: PaintProfilerCategory}|null = null;
|
|
77
78
|
|
|
78
|
-
export class PaintProfilerView extends UI.Widget.HBox
|
|
79
|
+
export class PaintProfilerView extends Common.ObjectWrapper.eventMixin<EventTypes, typeof UI.Widget.HBox>(
|
|
80
|
+
UI.Widget.HBox) {
|
|
79
81
|
private canvasContainer: HTMLElement;
|
|
80
82
|
private readonly progressBanner: HTMLElement;
|
|
81
83
|
private pieChart: PerfUI.PieChart.PieChart;
|
|
@@ -422,6 +424,10 @@ export enum Events {
|
|
|
422
424
|
WindowChanged = 'WindowChanged',
|
|
423
425
|
}
|
|
424
426
|
|
|
427
|
+
export type EventTypes = {
|
|
428
|
+
[Events.WindowChanged]: void,
|
|
429
|
+
};
|
|
430
|
+
|
|
425
431
|
export class PaintProfilerCommandLogView extends UI.ThrottledWidget.ThrottledWidget {
|
|
426
432
|
private readonly treeOutline: UI.TreeOutline.TreeOutlineInShadow;
|
|
427
433
|
private log: SDK.PaintProfiler.PaintProfilerLogItem[];
|
|
@@ -317,15 +317,14 @@ export class LighthousePanel extends UI.Panel.Panel {
|
|
|
317
317
|
}
|
|
318
318
|
const item = items[0];
|
|
319
319
|
if (item.kind === 'file') {
|
|
320
|
-
const
|
|
321
|
-
if (!
|
|
320
|
+
const file = items[0].getAsFile();
|
|
321
|
+
if (!file) {
|
|
322
322
|
return;
|
|
323
323
|
}
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
});
|
|
324
|
+
|
|
325
|
+
const reader = new FileReader();
|
|
326
|
+
reader.onload = (): void => this.loadedFromFile(reader.result as string);
|
|
327
|
+
reader.readAsText(file);
|
|
329
328
|
}
|
|
330
329
|
}
|
|
331
330
|
|
|
@@ -210,19 +210,23 @@ export class ThrottlingSettingsTab extends UI.Widget.VBox implements
|
|
|
210
210
|
const titles = content.createChild('div', 'conditions-edit-row');
|
|
211
211
|
const nameLabel = titles.createChild('div', 'conditions-list-text conditions-list-title');
|
|
212
212
|
const nameStr = i18nString(UIStrings.profileName);
|
|
213
|
-
nameLabel.
|
|
213
|
+
const nameLabelText = nameLabel.createChild('div', 'conditions-list-title-text');
|
|
214
|
+
nameLabelText.textContent = nameStr;
|
|
214
215
|
titles.createChild('div', 'conditions-list-separator conditions-list-separator-invisible');
|
|
215
216
|
const downloadLabel = titles.createChild('div', 'conditions-list-text');
|
|
216
217
|
const downloadStr = i18nString(UIStrings.download);
|
|
217
|
-
downloadLabel.
|
|
218
|
+
const downloadLabelText = downloadLabel.createChild('div', 'conditions-list-title-text');
|
|
219
|
+
downloadLabelText.textContent = downloadStr;
|
|
218
220
|
titles.createChild('div', 'conditions-list-separator conditions-list-separator-invisible');
|
|
219
221
|
const uploadLabel = titles.createChild('div', 'conditions-list-text');
|
|
222
|
+
const uploadLabelText = uploadLabel.createChild('div', 'conditions-list-title-text');
|
|
220
223
|
const uploadStr = i18nString(UIStrings.upload);
|
|
221
|
-
|
|
224
|
+
uploadLabelText.textContent = uploadStr;
|
|
222
225
|
titles.createChild('div', 'conditions-list-separator conditions-list-separator-invisible');
|
|
223
226
|
const latencyLabel = titles.createChild('div', 'conditions-list-text');
|
|
224
227
|
const latencyStr = i18nString(UIStrings.latency);
|
|
225
|
-
latencyLabel.
|
|
228
|
+
const latencyLabelText = latencyLabel.createChild('div', 'conditions-list-title-text');
|
|
229
|
+
latencyLabelText.textContent = latencyStr;
|
|
226
230
|
|
|
227
231
|
const fields = content.createChild('div', 'conditions-edit-row');
|
|
228
232
|
const nameInput = editor.createInput('title', 'text', '', titleValidator);
|
|
@@ -39,6 +39,7 @@ import {EventSourceMessagesView} from './EventSourceMessagesView.js';
|
|
|
39
39
|
import type {NetworkTimeCalculator} from './NetworkTimeCalculator.js';
|
|
40
40
|
import {RequestCookiesView} from './RequestCookiesView.js';
|
|
41
41
|
import {RequestHeadersView} from './RequestHeadersView.js';
|
|
42
|
+
import {RequestPayloadView} from './RequestPayloadView.js';
|
|
42
43
|
import {RequestInitiatorView} from './RequestInitiatorView.js';
|
|
43
44
|
import {RequestPreviewView} from './RequestPreviewView.js';
|
|
44
45
|
import {RequestResponseView} from './RequestResponseView.js';
|
|
@@ -53,7 +54,7 @@ const UIStrings = {
|
|
|
53
54
|
/**
|
|
54
55
|
*@description Text in Network Item View of the Network panel
|
|
55
56
|
*/
|
|
56
|
-
|
|
57
|
+
payload: 'Payload',
|
|
57
58
|
/**
|
|
58
59
|
*@description Text in Network Item View of the Network panel
|
|
59
60
|
*/
|
|
@@ -129,6 +130,7 @@ export class NetworkItemView extends UI.TabbedPane.TabbedPane {
|
|
|
129
130
|
private requestInternal: SDK.NetworkRequest.NetworkRequest;
|
|
130
131
|
private readonly resourceViewTabSetting: Common.Settings.Setting<NetworkForward.UIRequestLocation.UIRequestTabs>;
|
|
131
132
|
private readonly headersView: RequestHeadersView;
|
|
133
|
+
private payloadView: RequestPayloadView|null;
|
|
132
134
|
private readonly responseView: RequestResponseView|undefined;
|
|
133
135
|
private cookiesView: RequestCookiesView|null;
|
|
134
136
|
private initialTab?: NetworkForward.UIRequestLocation.UIRequestTabs;
|
|
@@ -146,7 +148,10 @@ export class NetworkItemView extends UI.TabbedPane.TabbedPane {
|
|
|
146
148
|
this.headersView = new RequestHeadersView(request);
|
|
147
149
|
this.appendTab(
|
|
148
150
|
NetworkForward.UIRequestLocation.UIRequestTabs.Headers, i18nString(UIStrings.headers), this.headersView,
|
|
149
|
-
i18nString(UIStrings.
|
|
151
|
+
i18nString(UIStrings.headers));
|
|
152
|
+
|
|
153
|
+
this.payloadView = null;
|
|
154
|
+
this.maybeAppendPayloadPanel();
|
|
150
155
|
|
|
151
156
|
this.addEventListener(UI.TabbedPane.Events.TabSelected, this.tabSelected, this);
|
|
152
157
|
|
|
@@ -201,7 +206,7 @@ export class NetworkItemView extends UI.TabbedPane.TabbedPane {
|
|
|
201
206
|
wasShown(): void {
|
|
202
207
|
super.wasShown();
|
|
203
208
|
this.requestInternal.addEventListener(
|
|
204
|
-
SDK.NetworkRequest.Events.RequestHeadersChanged, this.
|
|
209
|
+
SDK.NetworkRequest.Events.RequestHeadersChanged, this.requestHeadersChanged, this);
|
|
205
210
|
this.requestInternal.addEventListener(
|
|
206
211
|
SDK.NetworkRequest.Events.ResponseHeadersChanged, this.maybeAppendCookiesPanel, this);
|
|
207
212
|
this.requestInternal.addEventListener(
|
|
@@ -221,13 +226,18 @@ export class NetworkItemView extends UI.TabbedPane.TabbedPane {
|
|
|
221
226
|
|
|
222
227
|
willHide(): void {
|
|
223
228
|
this.requestInternal.removeEventListener(
|
|
224
|
-
SDK.NetworkRequest.Events.RequestHeadersChanged, this.
|
|
229
|
+
SDK.NetworkRequest.Events.RequestHeadersChanged, this.requestHeadersChanged, this);
|
|
225
230
|
this.requestInternal.removeEventListener(
|
|
226
231
|
SDK.NetworkRequest.Events.ResponseHeadersChanged, this.maybeAppendCookiesPanel, this);
|
|
227
232
|
this.requestInternal.removeEventListener(
|
|
228
233
|
SDK.NetworkRequest.Events.TrustTokenResultAdded, this.maybeShowErrorIconInTrustTokenTabHeader, this);
|
|
229
234
|
}
|
|
230
235
|
|
|
236
|
+
private async requestHeadersChanged(): Promise<void> {
|
|
237
|
+
this.maybeAppendCookiesPanel();
|
|
238
|
+
this.maybeAppendPayloadPanel();
|
|
239
|
+
}
|
|
240
|
+
|
|
231
241
|
private maybeAppendCookiesPanel(): void {
|
|
232
242
|
const cookiesPresent = this.requestInternal.hasRequestCookies() || this.requestInternal.responseCookies.length > 0;
|
|
233
243
|
console.assert(cookiesPresent || !this.cookiesView, 'Cookies were introduced in headers and then removed!');
|
|
@@ -239,6 +249,16 @@ export class NetworkItemView extends UI.TabbedPane.TabbedPane {
|
|
|
239
249
|
}
|
|
240
250
|
}
|
|
241
251
|
|
|
252
|
+
private async maybeAppendPayloadPanel(): Promise<void> {
|
|
253
|
+
if (this.requestInternal.queryParameters || await this.requestInternal.requestFormData()) {
|
|
254
|
+
this.payloadView = new RequestPayloadView(this.requestInternal);
|
|
255
|
+
this.appendTab(
|
|
256
|
+
NetworkForward.UIRequestLocation.UIRequestTabs.Payload, i18nString(UIStrings.payload), this.payloadView,
|
|
257
|
+
i18nString(UIStrings.payload), /* userGesture=*/ void 0,
|
|
258
|
+
/* isCloseable=*/ void 0, /* index=*/ 1);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
|
|
242
262
|
private maybeShowErrorIconInTrustTokenTabHeader(): void {
|
|
243
263
|
const trustTokenResult = this.requestInternal.trustTokenOperationDoneEvent();
|
|
244
264
|
if (trustTokenResult &&
|
|
@@ -748,12 +748,10 @@ export class NetworkLogView extends UI.Widget.VBox implements
|
|
|
748
748
|
if (!items.length) {
|
|
749
749
|
return;
|
|
750
750
|
}
|
|
751
|
-
const
|
|
752
|
-
if (
|
|
753
|
-
|
|
751
|
+
const file = items[0].getAsFile();
|
|
752
|
+
if (file) {
|
|
753
|
+
this.onLoadFromFile(file);
|
|
754
754
|
}
|
|
755
|
-
|
|
756
|
-
entry.file(this.onLoadFromFile.bind(this));
|
|
757
755
|
}
|
|
758
756
|
|
|
759
757
|
async onLoadFromFile(file: File): Promise<void> {
|
|
@@ -1719,6 +1717,15 @@ export class NetworkLogView extends UI.Widget.VBox implements
|
|
|
1719
1717
|
return true;
|
|
1720
1718
|
}
|
|
1721
1719
|
|
|
1720
|
+
private isValidUrl(url: string): boolean {
|
|
1721
|
+
try {
|
|
1722
|
+
new URL(url);
|
|
1723
|
+
return true;
|
|
1724
|
+
} catch (e) {
|
|
1725
|
+
return false;
|
|
1726
|
+
}
|
|
1727
|
+
}
|
|
1728
|
+
|
|
1722
1729
|
private parseFilterQuery(query: string, invert: boolean): void {
|
|
1723
1730
|
// A query string can have multiple filters, some of them regular
|
|
1724
1731
|
// expressions, some not. Each one of those filters can be negated with a
|
|
@@ -1736,6 +1743,8 @@ export class NetworkLogView extends UI.Widget.VBox implements
|
|
|
1736
1743
|
NetworkLogView.requestPathFilter.bind(null, new RegExp(defaultText, 'i'));
|
|
1737
1744
|
} else if (descriptor.regex) {
|
|
1738
1745
|
filter = NetworkLogView.requestPathFilter.bind(null, (regex as RegExp));
|
|
1746
|
+
} else if (this.isValidUrl(text)) {
|
|
1747
|
+
filter = NetworkLogView.requestUrlFilter.bind(null, text);
|
|
1739
1748
|
} else {
|
|
1740
1749
|
filter = NetworkLogView.requestPathFilter.bind(
|
|
1741
1750
|
null, new RegExp(Platform.StringUtilities.escapeForRegExp(text), 'i'));
|
|
@@ -369,7 +369,8 @@ export class NetworkPanel extends UI.Panel.Panel implements UI.ContextMenu.Provi
|
|
|
369
369
|
return this.throttlingSelect;
|
|
370
370
|
}
|
|
371
371
|
|
|
372
|
-
private onWindowChanged(event: Common.EventTarget.EventTargetEvent):
|
|
372
|
+
private onWindowChanged(event: Common.EventTarget.EventTargetEvent<PerfUI.TimelineOverviewPane.WindowChangedEvent>):
|
|
373
|
+
void {
|
|
373
374
|
const startTime = Math.max(this.calculator.minimumBoundary(), event.data.startTime / 1000);
|
|
374
375
|
const endTime = Math.min(this.calculator.maximumBoundary(), event.data.endTime / 1000);
|
|
375
376
|
this.networkLogView.setWindow(startTime, endTime);
|
|
@@ -766,18 +767,18 @@ export class NetworkPanel extends UI.Panel.Panel implements UI.ContextMenu.Provi
|
|
|
766
767
|
appendRevealItem.call(this, request);
|
|
767
768
|
}
|
|
768
769
|
|
|
769
|
-
private onFilmFrameSelected(event: Common.EventTarget.EventTargetEvent): void {
|
|
770
|
-
const timestamp =
|
|
770
|
+
private onFilmFrameSelected(event: Common.EventTarget.EventTargetEvent<number>): void {
|
|
771
|
+
const timestamp = event.data;
|
|
771
772
|
this.overviewPane.setWindowTimes(0, timestamp);
|
|
772
773
|
}
|
|
773
774
|
|
|
774
|
-
private onFilmFrameEnter(event: Common.EventTarget.EventTargetEvent): void {
|
|
775
|
-
const timestamp =
|
|
775
|
+
private onFilmFrameEnter(event: Common.EventTarget.EventTargetEvent<number>): void {
|
|
776
|
+
const timestamp = event.data;
|
|
776
777
|
this.networkOverview.selectFilmStripFrame(timestamp);
|
|
777
778
|
this.networkLogView.selectFilmStripFrame(timestamp / 1000);
|
|
778
779
|
}
|
|
779
780
|
|
|
780
|
-
private onFilmFrameExit(
|
|
781
|
+
private onFilmFrameExit(): void {
|
|
781
782
|
this.networkOverview.clearFilmStripFrame();
|
|
782
783
|
this.networkLogView.clearFilmStripFrame();
|
|
783
784
|
}
|
|
@@ -41,7 +41,6 @@ import * as Protocol from '../../generated/protocol.js';
|
|
|
41
41
|
import * as IssuesManager from '../../models/issues_manager/issues_manager.js';
|
|
42
42
|
import * as NetworkForward from '../../panels/network/forward/forward.js';
|
|
43
43
|
import * as ClientVariations from '../../third_party/chromium/client-variations/client-variations.js';
|
|
44
|
-
import * as ObjectUI from '../../ui/legacy/components/object_ui/object_ui.js';
|
|
45
44
|
// eslint-disable-next-line rulesdir/es_modules_import
|
|
46
45
|
import objectPropertiesSectionStyles from '../../ui/legacy/components/object_ui/objectPropertiesSection.css.js';
|
|
47
46
|
// eslint-disable-next-line rulesdir/es_modules_import
|
|
@@ -57,11 +56,6 @@ const UIStrings = {
|
|
|
57
56
|
*/
|
|
58
57
|
general: 'General',
|
|
59
58
|
/**
|
|
60
|
-
* @description Text in Request Headers View of the Network panel. This is a noun-phrase meaning the
|
|
61
|
-
* payload of a network request.
|
|
62
|
-
*/
|
|
63
|
-
requestPayload: 'Request Payload',
|
|
64
|
-
/**
|
|
65
59
|
*@description A context menu item in the Watch Expressions Sidebar Pane of the Sources panel and Network pane request.
|
|
66
60
|
*/
|
|
67
61
|
copyValue: 'Copy value',
|
|
@@ -76,20 +70,8 @@ const UIStrings = {
|
|
|
76
70
|
/**
|
|
77
71
|
*@description Text in Request Headers View of the Network panel
|
|
78
72
|
*/
|
|
79
|
-
unableToDecodeValue: '(unable to decode value)',
|
|
80
|
-
/**
|
|
81
|
-
*@description Text in Request Headers View of the Network panel
|
|
82
|
-
*/
|
|
83
73
|
requestUrl: 'Request URL',
|
|
84
74
|
/**
|
|
85
|
-
*@description Text in Request Headers View of the Network panel
|
|
86
|
-
*/
|
|
87
|
-
queryStringParameters: 'Query String Parameters',
|
|
88
|
-
/**
|
|
89
|
-
*@description Text in Request Headers View of the Network panel
|
|
90
|
-
*/
|
|
91
|
-
formData: 'Form Data',
|
|
92
|
-
/**
|
|
93
75
|
*@description Text to show more content
|
|
94
76
|
*/
|
|
95
77
|
showMore: 'Show more',
|
|
@@ -98,42 +80,10 @@ const UIStrings = {
|
|
|
98
80
|
*/
|
|
99
81
|
viewParsed: 'View parsed',
|
|
100
82
|
/**
|
|
101
|
-
*@description Text to show an item is empty
|
|
102
|
-
*/
|
|
103
|
-
empty: '(empty)',
|
|
104
|
-
/**
|
|
105
83
|
*@description Text for toggling the view of header data (e.g. query string parameters) from parsed to source in the headers tab
|
|
106
84
|
*/
|
|
107
85
|
viewSource: 'View source',
|
|
108
86
|
/**
|
|
109
|
-
* @description Text for toggling header data (e.g. query string parameters) from decoded to
|
|
110
|
-
* encoded in the headers tab or in the cookies preview. URL-encoded is a different data format for
|
|
111
|
-
* the same data, which the user sees when they click this command.
|
|
112
|
-
*/
|
|
113
|
-
viewUrlEncoded: 'View URL-encoded',
|
|
114
|
-
/**
|
|
115
|
-
*@description Text for toggling header data (e.g. query string parameters) from encoded to decoded in the headers tab or in the cookies preview
|
|
116
|
-
*/
|
|
117
|
-
viewDecoded: 'View decoded',
|
|
118
|
-
/**
|
|
119
|
-
*@description Text for toggling header data (e.g. query string parameters) from decoded to
|
|
120
|
-
* encoded in the headers tab or in the cookies preview. URL-encoded is a different data format for
|
|
121
|
-
* the same data, which the user sees when they click this command.
|
|
122
|
-
*/
|
|
123
|
-
viewUrlEncodedL: 'view URL-encoded',
|
|
124
|
-
/**
|
|
125
|
-
*@description Text in Request Headers View of the Network panel
|
|
126
|
-
*/
|
|
127
|
-
viewDecodedL: 'view decoded',
|
|
128
|
-
/**
|
|
129
|
-
*@description Text in Request Headers View of the Network panel
|
|
130
|
-
*/
|
|
131
|
-
viewParsedL: 'view parsed',
|
|
132
|
-
/**
|
|
133
|
-
*@description Text in Request Headers View of the Network panel
|
|
134
|
-
*/
|
|
135
|
-
viewSourceL: 'view source',
|
|
136
|
-
/**
|
|
137
87
|
*@description Text in Request Headers View of the Network panel
|
|
138
88
|
*/
|
|
139
89
|
requestHeaders: 'Request Headers',
|
|
@@ -250,7 +200,6 @@ const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
|
|
|
250
200
|
const i18nLazyString = i18n.i18n.getLazilyComputedLocalizedString.bind(undefined, str_);
|
|
251
201
|
export class RequestHeadersView extends UI.Widget.VBox {
|
|
252
202
|
private request: SDK.NetworkRequest.NetworkRequest;
|
|
253
|
-
private decodeRequestParameters: boolean;
|
|
254
203
|
private showRequestHeadersText: boolean;
|
|
255
204
|
private showResponseHeadersText: boolean;
|
|
256
205
|
private highlightedElement: UI.TreeOutline.TreeElement|null;
|
|
@@ -262,9 +211,6 @@ export class RequestHeadersView extends UI.Widget.VBox {
|
|
|
262
211
|
private readonly referrerPolicyItem: UI.TreeOutline.TreeElement;
|
|
263
212
|
private readonly responseHeadersCategory: Category;
|
|
264
213
|
private readonly requestHeadersCategory: Category;
|
|
265
|
-
private queryStringCategory: Category;
|
|
266
|
-
private formDataCategory: Category;
|
|
267
|
-
private requestPayloadCategory: Category;
|
|
268
214
|
|
|
269
215
|
constructor(request: SDK.NetworkRequest.NetworkRequest) {
|
|
270
216
|
super();
|
|
@@ -272,15 +218,9 @@ export class RequestHeadersView extends UI.Widget.VBox {
|
|
|
272
218
|
this.element.classList.add('request-headers-view');
|
|
273
219
|
|
|
274
220
|
this.request = request;
|
|
275
|
-
this.decodeRequestParameters = true;
|
|
276
221
|
this.showRequestHeadersText = false;
|
|
277
222
|
this.showResponseHeadersText = false;
|
|
278
223
|
|
|
279
|
-
const contentType = request.requestContentType();
|
|
280
|
-
if (contentType) {
|
|
281
|
-
this.decodeRequestParameters = Boolean(contentType.match(/^application\/x-www-form-urlencoded\s*(;.*)?$/i));
|
|
282
|
-
}
|
|
283
|
-
|
|
284
224
|
this.highlightedElement = null;
|
|
285
225
|
|
|
286
226
|
const root = new UI.TreeOutline.TreeOutlineInShadow();
|
|
@@ -306,9 +246,6 @@ export class RequestHeadersView extends UI.Widget.VBox {
|
|
|
306
246
|
|
|
307
247
|
this.responseHeadersCategory = new Category(root, 'responseHeaders', '');
|
|
308
248
|
this.requestHeadersCategory = new Category(root, 'requestHeaders', '');
|
|
309
|
-
this.queryStringCategory = new Category(root, 'queryString', '');
|
|
310
|
-
this.formDataCategory = new Category(root, 'formData', '');
|
|
311
|
-
this.requestPayloadCategory = new Category(root, 'requestPayload', i18nString(UIStrings.requestPayload));
|
|
312
249
|
}
|
|
313
250
|
|
|
314
251
|
wasShown(): void {
|
|
@@ -320,7 +257,6 @@ export class RequestHeadersView extends UI.Widget.VBox {
|
|
|
320
257
|
this.request.addEventListener(SDK.NetworkRequest.Events.FinishedLoading, this.refreshHTTPInformation, this);
|
|
321
258
|
|
|
322
259
|
this.refreshURL();
|
|
323
|
-
this.refreshQueryString();
|
|
324
260
|
this.refreshRequestHeaders();
|
|
325
261
|
this.refreshResponseHeaders();
|
|
326
262
|
this.refreshHTTPInformation();
|
|
@@ -426,75 +362,12 @@ export class RequestHeadersView extends UI.Widget.VBox {
|
|
|
426
362
|
return fragment;
|
|
427
363
|
}
|
|
428
364
|
|
|
429
|
-
private formatParameter(value: string, className: string, decodeParameters: boolean): Element {
|
|
430
|
-
let errorDecoding = false;
|
|
431
|
-
|
|
432
|
-
if (decodeParameters) {
|
|
433
|
-
value = value.replace(/\+/g, ' ');
|
|
434
|
-
if (value.indexOf('%') >= 0) {
|
|
435
|
-
try {
|
|
436
|
-
value = decodeURIComponent(value);
|
|
437
|
-
} catch (e) {
|
|
438
|
-
errorDecoding = true;
|
|
439
|
-
}
|
|
440
|
-
}
|
|
441
|
-
}
|
|
442
|
-
const div = document.createElement('div');
|
|
443
|
-
if (className) {
|
|
444
|
-
div.className = className;
|
|
445
|
-
}
|
|
446
|
-
if (value === '') {
|
|
447
|
-
div.classList.add('empty-value');
|
|
448
|
-
}
|
|
449
|
-
if (errorDecoding) {
|
|
450
|
-
div.createChild('span', 'header-decode-error').textContent = i18nString(UIStrings.unableToDecodeValue);
|
|
451
|
-
} else {
|
|
452
|
-
div.textContent = value;
|
|
453
|
-
}
|
|
454
|
-
return div;
|
|
455
|
-
}
|
|
456
|
-
|
|
457
365
|
private refreshURL(): void {
|
|
458
366
|
const requestURL = this.request.url();
|
|
459
367
|
this.urlItem.title = this.formatHeader(i18nString(UIStrings.requestUrl), requestURL);
|
|
460
368
|
this.addEntryContextMenuHandler(this.urlItem, requestURL);
|
|
461
369
|
}
|
|
462
370
|
|
|
463
|
-
private refreshQueryString(): void {
|
|
464
|
-
const queryString = this.request.queryString();
|
|
465
|
-
const queryParameters = this.request.queryParameters;
|
|
466
|
-
this.queryStringCategory.hidden = !queryParameters;
|
|
467
|
-
if (queryParameters) {
|
|
468
|
-
this.refreshParams(
|
|
469
|
-
i18nString(UIStrings.queryStringParameters), queryParameters, queryString, this.queryStringCategory);
|
|
470
|
-
}
|
|
471
|
-
}
|
|
472
|
-
|
|
473
|
-
private async refreshFormData(): Promise<void> {
|
|
474
|
-
const formData = await this.request.requestFormData();
|
|
475
|
-
if (!formData) {
|
|
476
|
-
this.formDataCategory.hidden = true;
|
|
477
|
-
this.requestPayloadCategory.hidden = true;
|
|
478
|
-
return;
|
|
479
|
-
}
|
|
480
|
-
|
|
481
|
-
const formParameters = await this.request.formParameters();
|
|
482
|
-
if (formParameters) {
|
|
483
|
-
this.formDataCategory.hidden = false;
|
|
484
|
-
this.requestPayloadCategory.hidden = true;
|
|
485
|
-
this.refreshParams(i18nString(UIStrings.formData), formParameters, formData, this.formDataCategory);
|
|
486
|
-
} else {
|
|
487
|
-
this.requestPayloadCategory.hidden = false;
|
|
488
|
-
this.formDataCategory.hidden = true;
|
|
489
|
-
try {
|
|
490
|
-
const json = JSON.parse(formData);
|
|
491
|
-
this.refreshRequestJSONPayload(json, formData);
|
|
492
|
-
} catch (e) {
|
|
493
|
-
this.populateTreeElementWithSourceText(this.requestPayloadCategory, formData);
|
|
494
|
-
}
|
|
495
|
-
}
|
|
496
|
-
}
|
|
497
|
-
|
|
498
371
|
private populateTreeElementWithSourceText(treeElement: UI.TreeOutline.TreeElement, sourceText: string|null): void {
|
|
499
372
|
// TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration)
|
|
500
373
|
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
@@ -535,220 +408,6 @@ export class RequestHeadersView extends UI.Widget.VBox {
|
|
|
535
408
|
sourceTextElement.appendChild(showMoreButton);
|
|
536
409
|
}
|
|
537
410
|
|
|
538
|
-
private refreshParams(
|
|
539
|
-
title: string, params: SDK.NetworkRequest.NameValue[]|null, sourceText: string|null,
|
|
540
|
-
paramsTreeElement: UI.TreeOutline.TreeElement): void {
|
|
541
|
-
paramsTreeElement.removeChildren();
|
|
542
|
-
|
|
543
|
-
paramsTreeElement.listItemElement.removeChildren();
|
|
544
|
-
paramsTreeElement.listItemElement.createChild('div', 'selection fill');
|
|
545
|
-
UI.UIUtils.createTextChild(paramsTreeElement.listItemElement, title);
|
|
546
|
-
|
|
547
|
-
const headerCount = document.createElement('span');
|
|
548
|
-
headerCount.classList.add('header-count');
|
|
549
|
-
const numberOfParams = params ? params.length : 0;
|
|
550
|
-
headerCount.textContent = `\xA0(${numberOfParams})`;
|
|
551
|
-
paramsTreeElement.listItemElement.appendChild(headerCount);
|
|
552
|
-
|
|
553
|
-
const shouldViewSource = viewSourceForItems.has(paramsTreeElement);
|
|
554
|
-
if (shouldViewSource) {
|
|
555
|
-
this.appendParamsSource(title, params, sourceText, paramsTreeElement);
|
|
556
|
-
} else {
|
|
557
|
-
this.appendParamsParsed(title, params, sourceText, paramsTreeElement);
|
|
558
|
-
}
|
|
559
|
-
}
|
|
560
|
-
|
|
561
|
-
private appendParamsSource(
|
|
562
|
-
title: string, params: SDK.NetworkRequest.NameValue[]|null, sourceText: string|null,
|
|
563
|
-
paramsTreeElement: UI.TreeOutline.TreeElement): void {
|
|
564
|
-
this.populateTreeElementWithSourceText(paramsTreeElement, sourceText);
|
|
565
|
-
|
|
566
|
-
const listItemElement = paramsTreeElement.listItemElement;
|
|
567
|
-
|
|
568
|
-
const viewParsed = function(this: RequestHeadersView, event: Event): void {
|
|
569
|
-
listItemElement.removeEventListener('contextmenu', viewParsedContextMenu);
|
|
570
|
-
|
|
571
|
-
viewSourceForItems.delete(paramsTreeElement);
|
|
572
|
-
this.refreshParams(title, params, sourceText, paramsTreeElement);
|
|
573
|
-
event.consume();
|
|
574
|
-
};
|
|
575
|
-
|
|
576
|
-
const viewParsedContextMenu = (event: Event): void => {
|
|
577
|
-
if (!paramsTreeElement.expanded) {
|
|
578
|
-
return;
|
|
579
|
-
}
|
|
580
|
-
const contextMenu = new UI.ContextMenu.ContextMenu(event);
|
|
581
|
-
contextMenu.newSection().appendItem(i18nString(UIStrings.viewParsed), viewParsed.bind(this, event));
|
|
582
|
-
contextMenu.show();
|
|
583
|
-
};
|
|
584
|
-
|
|
585
|
-
const viewParsedButton = this.createViewSourceToggle(/* viewSource */ true, viewParsed.bind(this));
|
|
586
|
-
listItemElement.appendChild(viewParsedButton);
|
|
587
|
-
|
|
588
|
-
listItemElement.addEventListener('contextmenu', viewParsedContextMenu);
|
|
589
|
-
}
|
|
590
|
-
|
|
591
|
-
private appendParamsParsed(
|
|
592
|
-
title: string, params: SDK.NetworkRequest.NameValue[]|null, sourceText: string|null,
|
|
593
|
-
paramsTreeElement: UI.TreeOutline.TreeElement): void {
|
|
594
|
-
for (const param of params || []) {
|
|
595
|
-
const paramNameValue = document.createDocumentFragment();
|
|
596
|
-
if (param.name !== '') {
|
|
597
|
-
const name = this.formatParameter(param.name + ': ', 'header-name', this.decodeRequestParameters);
|
|
598
|
-
const value = this.formatParameter(param.value, 'header-value source-code', this.decodeRequestParameters);
|
|
599
|
-
paramNameValue.appendChild(name);
|
|
600
|
-
paramNameValue.createChild('span', 'header-separator');
|
|
601
|
-
paramNameValue.appendChild(value);
|
|
602
|
-
} else {
|
|
603
|
-
paramNameValue.appendChild(
|
|
604
|
-
this.formatParameter(i18nString(UIStrings.empty), 'empty-request-header', this.decodeRequestParameters));
|
|
605
|
-
}
|
|
606
|
-
|
|
607
|
-
const paramTreeElement = new UI.TreeOutline.TreeElement(paramNameValue);
|
|
608
|
-
this.addEntryContextMenuHandler(paramTreeElement, param.value);
|
|
609
|
-
paramsTreeElement.appendChild(paramTreeElement);
|
|
610
|
-
}
|
|
611
|
-
|
|
612
|
-
const listItemElement = paramsTreeElement.listItemElement;
|
|
613
|
-
|
|
614
|
-
const viewSource = function(this: RequestHeadersView, event: Event): void {
|
|
615
|
-
listItemElement.removeEventListener('contextmenu', viewSourceContextMenu);
|
|
616
|
-
|
|
617
|
-
viewSourceForItems.add(paramsTreeElement);
|
|
618
|
-
this.refreshParams(title, params, sourceText, paramsTreeElement);
|
|
619
|
-
event.consume();
|
|
620
|
-
};
|
|
621
|
-
|
|
622
|
-
const toggleURLDecoding = function(this: RequestHeadersView, event: Event): void {
|
|
623
|
-
listItemElement.removeEventListener('contextmenu', viewSourceContextMenu);
|
|
624
|
-
this.toggleURLDecoding(event);
|
|
625
|
-
};
|
|
626
|
-
|
|
627
|
-
const viewSourceContextMenu = (event: Event): void => {
|
|
628
|
-
if (!paramsTreeElement.expanded) {
|
|
629
|
-
return;
|
|
630
|
-
}
|
|
631
|
-
const contextMenu = new UI.ContextMenu.ContextMenu(event);
|
|
632
|
-
const section = contextMenu.newSection();
|
|
633
|
-
section.appendItem(i18nString(UIStrings.viewSource), viewSource.bind(this, event));
|
|
634
|
-
const viewURLEncodedText =
|
|
635
|
-
this.decodeRequestParameters ? i18nString(UIStrings.viewUrlEncoded) : i18nString(UIStrings.viewDecoded);
|
|
636
|
-
section.appendItem(viewURLEncodedText, toggleURLDecoding.bind(this, event));
|
|
637
|
-
contextMenu.show();
|
|
638
|
-
};
|
|
639
|
-
|
|
640
|
-
const viewSourceButton = this.createViewSourceToggle(/* viewSource */ false, viewSource.bind(this));
|
|
641
|
-
listItemElement.appendChild(viewSourceButton);
|
|
642
|
-
|
|
643
|
-
const toggleTitle =
|
|
644
|
-
this.decodeRequestParameters ? i18nString(UIStrings.viewUrlEncodedL) : i18nString(UIStrings.viewDecodedL);
|
|
645
|
-
const toggleButton = this.createToggleButton(toggleTitle);
|
|
646
|
-
toggleButton.addEventListener('click', toggleURLDecoding.bind(this), false);
|
|
647
|
-
listItemElement.appendChild(toggleButton);
|
|
648
|
-
|
|
649
|
-
listItemElement.addEventListener('contextmenu', viewSourceContextMenu);
|
|
650
|
-
}
|
|
651
|
-
|
|
652
|
-
// TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration)
|
|
653
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
654
|
-
private refreshRequestJSONPayload(parsedObject: any, sourceText: string): void {
|
|
655
|
-
const rootListItem = this.requestPayloadCategory;
|
|
656
|
-
rootListItem.removeChildren();
|
|
657
|
-
|
|
658
|
-
const rootListItemElement = rootListItem.listItemElement;
|
|
659
|
-
rootListItemElement.removeChildren();
|
|
660
|
-
rootListItemElement.createChild('div', 'selection fill');
|
|
661
|
-
UI.UIUtils.createTextChild(rootListItemElement, this.requestPayloadCategory.title.toString());
|
|
662
|
-
|
|
663
|
-
if (viewSourceForItems.has(rootListItem)) {
|
|
664
|
-
this.appendJSONPayloadSource(rootListItem, parsedObject, sourceText);
|
|
665
|
-
} else {
|
|
666
|
-
this.appendJSONPayloadParsed(rootListItem, parsedObject, sourceText);
|
|
667
|
-
}
|
|
668
|
-
}
|
|
669
|
-
|
|
670
|
-
// TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration)
|
|
671
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
672
|
-
private appendJSONPayloadSource(rootListItem: Category, parsedObject: any, sourceText: string): void {
|
|
673
|
-
const rootListItemElement = rootListItem.listItemElement;
|
|
674
|
-
this.populateTreeElementWithSourceText(rootListItem, sourceText);
|
|
675
|
-
|
|
676
|
-
const viewParsed = function(this: RequestHeadersView, event: Event): void {
|
|
677
|
-
rootListItemElement.removeEventListener('contextmenu', viewParsedContextMenu);
|
|
678
|
-
viewSourceForItems.delete(rootListItem);
|
|
679
|
-
this.refreshRequestJSONPayload(parsedObject, sourceText);
|
|
680
|
-
event.consume();
|
|
681
|
-
};
|
|
682
|
-
|
|
683
|
-
const viewParsedButton = this.createViewSourceToggle(/* viewSource */ true, viewParsed.bind(this));
|
|
684
|
-
rootListItemElement.appendChild(viewParsedButton);
|
|
685
|
-
|
|
686
|
-
const viewParsedContextMenu = (event: Event): void => {
|
|
687
|
-
if (!rootListItem.expanded) {
|
|
688
|
-
return;
|
|
689
|
-
}
|
|
690
|
-
const contextMenu = new UI.ContextMenu.ContextMenu(event);
|
|
691
|
-
contextMenu.newSection().appendItem(i18nString(UIStrings.viewParsed), viewParsed.bind(this, event));
|
|
692
|
-
contextMenu.show();
|
|
693
|
-
};
|
|
694
|
-
|
|
695
|
-
rootListItemElement.addEventListener('contextmenu', viewParsedContextMenu);
|
|
696
|
-
}
|
|
697
|
-
|
|
698
|
-
// TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration)
|
|
699
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
700
|
-
private appendJSONPayloadParsed(rootListItem: Category, parsedObject: any, sourceText: string): void {
|
|
701
|
-
const object = (SDK.RemoteObject.RemoteObject.fromLocalObject(parsedObject) as SDK.RemoteObject.LocalJSONObject);
|
|
702
|
-
const section = new ObjectUI.ObjectPropertiesSection.RootElement(object);
|
|
703
|
-
section.title = (object.description as string);
|
|
704
|
-
section.expand();
|
|
705
|
-
// `editable` is not a valid property for `ObjectUI.ObjectPropertiesSection.RootElement`. Only for
|
|
706
|
-
// `ObjectUI.ObjectPropertiesSection.ObjectPropertiesSection`. We do not know if this assignment is
|
|
707
|
-
// safe to delete.
|
|
708
|
-
// @ts-ignore
|
|
709
|
-
section.editable = false;
|
|
710
|
-
rootListItem.childrenListElement.classList.add('source-code', 'object-properties-section');
|
|
711
|
-
|
|
712
|
-
rootListItem.appendChild(section);
|
|
713
|
-
const rootListItemElement = rootListItem.listItemElement;
|
|
714
|
-
|
|
715
|
-
const viewSource = function(this: RequestHeadersView, event: Event): void {
|
|
716
|
-
rootListItemElement.removeEventListener('contextmenu', viewSourceContextMenu);
|
|
717
|
-
|
|
718
|
-
viewSourceForItems.add(rootListItem);
|
|
719
|
-
this.refreshRequestJSONPayload(parsedObject, sourceText);
|
|
720
|
-
event.consume();
|
|
721
|
-
};
|
|
722
|
-
|
|
723
|
-
const viewSourceContextMenu = (event: Event): void => {
|
|
724
|
-
if (!rootListItem.expanded) {
|
|
725
|
-
return;
|
|
726
|
-
}
|
|
727
|
-
const contextMenu = new UI.ContextMenu.ContextMenu(event);
|
|
728
|
-
contextMenu.newSection().appendItem(i18nString(UIStrings.viewSource), viewSource.bind(this, event));
|
|
729
|
-
contextMenu.show();
|
|
730
|
-
};
|
|
731
|
-
|
|
732
|
-
const viewSourceButton = this.createViewSourceToggle(/* viewSource */ false, viewSource.bind(this));
|
|
733
|
-
rootListItemElement.appendChild(viewSourceButton);
|
|
734
|
-
|
|
735
|
-
rootListItemElement.addEventListener('contextmenu', viewSourceContextMenu);
|
|
736
|
-
}
|
|
737
|
-
|
|
738
|
-
private createViewSourceToggle(viewSource: boolean, handler: (arg0: Event) => void): Element {
|
|
739
|
-
const viewSourceToggleTitle = viewSource ? i18nString(UIStrings.viewParsedL) : i18nString(UIStrings.viewSourceL);
|
|
740
|
-
const viewSourceToggleButton = this.createToggleButton(viewSourceToggleTitle);
|
|
741
|
-
viewSourceToggleButton.addEventListener('click', handler, false);
|
|
742
|
-
return viewSourceToggleButton;
|
|
743
|
-
}
|
|
744
|
-
|
|
745
|
-
private toggleURLDecoding(event: Event): void {
|
|
746
|
-
this.decodeRequestParameters = !this.decodeRequestParameters;
|
|
747
|
-
this.refreshQueryString();
|
|
748
|
-
this.refreshFormData();
|
|
749
|
-
event.consume();
|
|
750
|
-
}
|
|
751
|
-
|
|
752
411
|
private refreshRequestHeaders(): void {
|
|
753
412
|
const treeElement = this.requestHeadersCategory;
|
|
754
413
|
const headers = this.request.requestHeaders().slice();
|
|
@@ -768,8 +427,6 @@ export class RequestHeadersView extends UI.Widget.VBox {
|
|
|
768
427
|
toggleButton.addEventListener('click', this.toggleRequestHeadersText.bind(this), false);
|
|
769
428
|
treeElement.listItemElement.appendChild(toggleButton);
|
|
770
429
|
}
|
|
771
|
-
|
|
772
|
-
this.refreshFormData();
|
|
773
430
|
}
|
|
774
431
|
|
|
775
432
|
private refreshResponseHeaders(): void {
|
|
@@ -1058,8 +715,6 @@ export class RequestHeadersView extends UI.Widget.VBox {
|
|
|
1058
715
|
}
|
|
1059
716
|
}
|
|
1060
717
|
|
|
1061
|
-
const viewSourceForItems = new WeakSet<Category|UI.TreeOutline.TreeElement>();
|
|
1062
|
-
|
|
1063
718
|
const headerNames = new WeakMap<UI.TreeOutline.TreeElement, string>();
|
|
1064
719
|
|
|
1065
720
|
export class Category extends UI.TreeOutline.TreeElement {
|