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.
Files changed (163) hide show
  1. package/config/gni/all_devtools_files.gni +1 -1
  2. package/config/gni/devtools_grd_files.gni +5 -0
  3. package/config/typescript/tsconfig.base.json +1 -0
  4. package/extension-api/ExtensionAPI.d.ts +1 -1
  5. package/front_end/core/common/ColorUtils.ts +2 -1
  6. package/front_end/core/common/Object.ts +36 -1
  7. package/front_end/core/common/WasmDisassembly.ts +6 -14
  8. package/front_end/core/common/common.ts +2 -1
  9. package/front_end/core/i18n/locales/af.json +53 -32
  10. package/front_end/core/i18n/locales/am.json +56 -35
  11. package/front_end/core/i18n/locales/ar.json +53 -32
  12. package/front_end/core/i18n/locales/as.json +63 -42
  13. package/front_end/core/i18n/locales/az.json +53 -32
  14. package/front_end/core/i18n/locales/be.json +52 -31
  15. package/front_end/core/i18n/locales/bg.json +51 -30
  16. package/front_end/core/i18n/locales/bn.json +63 -42
  17. package/front_end/core/i18n/locales/bs.json +57 -36
  18. package/front_end/core/i18n/locales/ca.json +55 -34
  19. package/front_end/core/i18n/locales/cs.json +51 -30
  20. package/front_end/core/i18n/locales/cy.json +63 -42
  21. package/front_end/core/i18n/locales/da.json +55 -34
  22. package/front_end/core/i18n/locales/de.json +52 -31
  23. package/front_end/core/i18n/locales/el.json +58 -37
  24. package/front_end/core/i18n/locales/en-GB.json +51 -30
  25. package/front_end/core/i18n/locales/en-US.json +67 -34
  26. package/front_end/core/i18n/locales/en-XL.json +67 -34
  27. package/front_end/core/i18n/locales/es-419.json +53 -32
  28. package/front_end/core/i18n/locales/es.json +52 -31
  29. package/front_end/core/i18n/locales/et.json +54 -33
  30. package/front_end/core/i18n/locales/eu.json +71 -50
  31. package/front_end/core/i18n/locales/fa.json +54 -33
  32. package/front_end/core/i18n/locales/fi.json +55 -34
  33. package/front_end/core/i18n/locales/fil.json +59 -38
  34. package/front_end/core/i18n/locales/fr-CA.json +52 -31
  35. package/front_end/core/i18n/locales/fr.json +54 -33
  36. package/front_end/core/i18n/locales/gl.json +57 -36
  37. package/front_end/core/i18n/locales/gu.json +65 -44
  38. package/front_end/core/i18n/locales/he.json +56 -35
  39. package/front_end/core/i18n/locales/hi.json +61 -40
  40. package/front_end/core/i18n/locales/hr.json +55 -34
  41. package/front_end/core/i18n/locales/hu.json +53 -32
  42. package/front_end/core/i18n/locales/hy.json +54 -33
  43. package/front_end/core/i18n/locales/id.json +59 -38
  44. package/front_end/core/i18n/locales/is.json +51 -30
  45. package/front_end/core/i18n/locales/it.json +51 -30
  46. package/front_end/core/i18n/locales/ja.json +52 -31
  47. package/front_end/core/i18n/locales/ka.json +51 -30
  48. package/front_end/core/i18n/locales/kk.json +56 -35
  49. package/front_end/core/i18n/locales/km.json +59 -38
  50. package/front_end/core/i18n/locales/kn.json +63 -42
  51. package/front_end/core/i18n/locales/ko.json +59 -38
  52. package/front_end/core/i18n/locales/ky.json +54 -33
  53. package/front_end/core/i18n/locales/lo.json +59 -38
  54. package/front_end/core/i18n/locales/lt.json +52 -31
  55. package/front_end/core/i18n/locales/lv.json +60 -39
  56. package/front_end/core/i18n/locales/mk.json +51 -30
  57. package/front_end/core/i18n/locales/ml.json +65 -44
  58. package/front_end/core/i18n/locales/mn.json +59 -38
  59. package/front_end/core/i18n/locales/mr.json +61 -40
  60. package/front_end/core/i18n/locales/ms.json +59 -38
  61. package/front_end/core/i18n/locales/my.json +59 -38
  62. package/front_end/core/i18n/locales/ne.json +63 -42
  63. package/front_end/core/i18n/locales/nl.json +55 -34
  64. package/front_end/core/i18n/locales/no.json +54 -33
  65. package/front_end/core/i18n/locales/or.json +63 -42
  66. package/front_end/core/i18n/locales/pa.json +61 -40
  67. package/front_end/core/i18n/locales/pl.json +51 -30
  68. package/front_end/core/i18n/locales/pt-PT.json +52 -31
  69. package/front_end/core/i18n/locales/pt.json +59 -38
  70. package/front_end/core/i18n/locales/ro.json +52 -31
  71. package/front_end/core/i18n/locales/ru.json +52 -31
  72. package/front_end/core/i18n/locales/si.json +59 -38
  73. package/front_end/core/i18n/locales/sk.json +52 -31
  74. package/front_end/core/i18n/locales/sl.json +52 -31
  75. package/front_end/core/i18n/locales/sq.json +51 -30
  76. package/front_end/core/i18n/locales/sr-Latn.json +52 -31
  77. package/front_end/core/i18n/locales/sr.json +52 -31
  78. package/front_end/core/i18n/locales/sv.json +52 -31
  79. package/front_end/core/i18n/locales/sw.json +60 -39
  80. package/front_end/core/i18n/locales/ta.json +67 -46
  81. package/front_end/core/i18n/locales/te.json +62 -41
  82. package/front_end/core/i18n/locales/th.json +52 -31
  83. package/front_end/core/i18n/locales/tr.json +55 -34
  84. package/front_end/core/i18n/locales/uk.json +55 -34
  85. package/front_end/core/i18n/locales/ur.json +60 -39
  86. package/front_end/core/i18n/locales/uz.json +52 -31
  87. package/front_end/core/i18n/locales/vi.json +54 -33
  88. package/front_end/core/i18n/locales/zh-HK.json +52 -31
  89. package/front_end/core/i18n/locales/zh-TW.json +57 -36
  90. package/front_end/core/i18n/locales/zh.json +56 -35
  91. package/front_end/core/i18n/locales/zu.json +59 -38
  92. package/front_end/core/sdk/RemoteObject.ts +43 -20
  93. package/front_end/core/sdk/TracingModel.ts +1 -1
  94. package/front_end/generated/SupportedCSSProperties.js +4 -4
  95. package/front_end/legacy/legacy-defs.d.ts +24 -0
  96. package/front_end/models/extensions/ExtensionAPI.ts +9 -4
  97. package/front_end/models/extensions/ExtensionServer.ts +1 -1
  98. package/front_end/models/issues_manager/AttributionReportingIssue.ts +4 -1
  99. package/front_end/models/issues_manager/SameSiteCookieIssue.ts +12 -3
  100. package/front_end/models/issues_manager/descriptions/SameSiteSamePartyCrossPartyContextSet.md +10 -0
  101. package/front_end/models/issues_manager/descriptions/arAttributionEventSourceTriggerDataTooLarge.md +4 -0
  102. package/front_end/models/timeline_model/TimelineModel.ts +5 -1
  103. package/front_end/panels/application/ApplicationPanelSidebar.ts +2 -2
  104. package/front_end/panels/application/DatabaseQueryView.ts +7 -1
  105. package/front_end/panels/changes/ChangesSidebar.ts +6 -1
  106. package/front_end/panels/console/ConsolePrompt.ts +6 -1
  107. package/front_end/panels/css_overview/CSSOverviewCompletedView.ts +2 -2
  108. package/front_end/panels/css_overview/CSSOverviewSidebarPanel.ts +8 -1
  109. package/front_end/panels/elements/ElementsPanel.ts +25 -1
  110. package/front_end/panels/elements/StylesSidebarPane.ts +12 -2
  111. package/front_end/panels/elements/components/ElementsBreadcrumbs.ts +13 -1
  112. package/front_end/panels/elements/layoutPane.css +1 -0
  113. package/front_end/panels/emulation/AdvancedApp.ts +2 -12
  114. package/front_end/panels/emulation/InspectedPagePlaceholder.ts +14 -1
  115. package/front_end/panels/issues/AttributionReportingIssueDetailsView.ts +10 -0
  116. package/front_end/panels/issues/IssueAggregator.ts +2 -2
  117. package/front_end/panels/layer_viewer/LayerDetailsView.ts +7 -1
  118. package/front_end/panels/layer_viewer/Layers3DView.ts +7 -1
  119. package/front_end/panels/layer_viewer/PaintProfilerView.ts +7 -1
  120. package/front_end/panels/lighthouse/LighthousePanel.ts +6 -7
  121. package/front_end/panels/mobile_throttling/ThrottlingSettingsTab.ts +8 -4
  122. package/front_end/panels/mobile_throttling/throttlingSettingsTab.css +4 -0
  123. package/front_end/panels/network/NetworkItemView.ts +24 -4
  124. package/front_end/panels/network/NetworkLogView.ts +14 -5
  125. package/front_end/panels/network/NetworkPanel.ts +7 -6
  126. package/front_end/panels/network/RequestHeadersView.ts +0 -345
  127. package/front_end/panels/network/RequestPayloadView.ts +529 -0
  128. package/front_end/panels/network/RequestTimingView.ts +3 -1
  129. package/front_end/panels/network/forward/UIRequestLocation.ts +1 -0
  130. package/front_end/panels/network/module.json +0 -3
  131. package/front_end/panels/network/network-legacy.ts +5 -0
  132. package/front_end/panels/network/network.ts +2 -0
  133. package/front_end/panels/network/requestPayloadTree.css +130 -0
  134. package/front_end/panels/network/requestPayloadView.css +16 -0
  135. package/front_end/panels/profiler/CPUProfileFlameChart.ts +3 -3
  136. package/front_end/panels/profiler/ProfileLauncherView.ts +6 -1
  137. package/front_end/panels/profiler/ProfileView.ts +1 -1
  138. package/front_end/panels/profiler/ProfilesPanel.ts +2 -2
  139. package/front_end/panels/sources/InplaceFormatterEditorAction.ts +5 -5
  140. package/front_end/panels/sources/ScriptFormatterEditorAction.ts +5 -6
  141. package/front_end/panels/sources/SourcesPanel.ts +4 -5
  142. package/front_end/panels/sources/SourcesView.ts +16 -3
  143. package/front_end/panels/sources/UISourceCodeFrame.ts +7 -1
  144. package/front_end/panels/sources/watchExpressionsSidebarPane.css +2 -7
  145. package/front_end/panels/timeline/TimelineFlameChartView.ts +4 -4
  146. package/front_end/panels/timeline/TimelineLayersView.ts +7 -7
  147. package/front_end/panels/timeline/TimelinePanel.ts +5 -4
  148. package/front_end/ui/legacy/ARIAUtils.ts +12 -0
  149. package/front_end/ui/legacy/Fragment.ts +1 -1
  150. package/front_end/ui/legacy/InspectorView.ts +17 -0
  151. package/front_end/ui/legacy/SplitWidget.ts +6 -1
  152. package/front_end/ui/legacy/TabbedPane.ts +4 -0
  153. package/front_end/ui/legacy/UIUtils.ts +1 -1
  154. package/front_end/ui/legacy/components/data_grid/dataGrid.css +5 -0
  155. package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +16 -66
  156. package/front_end/ui/legacy/components/perf_ui/FilmStripView.ts +8 -1
  157. package/front_end/ui/legacy/components/perf_ui/FlameChart.ts +9 -1
  158. package/front_end/ui/legacy/components/perf_ui/TimelineOverviewPane.ts +11 -1
  159. package/front_end/ui/legacy/components/source_frame/ImageView.ts +6 -3
  160. package/front_end/ui/legacy/utils/focus-changed.ts +1 -1
  161. package/inspector_overlay/common.ts +3 -3
  162. package/inspector_overlay/tool_viewport_size.ts +1 -1
  163. 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 implements LayerView {
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 implements LayerView {
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 entry = items[0].webkitGetAsEntry();
321
- if (!entry.isFile) {
320
+ const file = items[0].getAsFile();
321
+ if (!file) {
322
322
  return;
323
323
  }
324
- entry.file((file: Blob) => {
325
- const reader = new FileReader();
326
- reader.onload = (): void => this.loadedFromFile(reader.result as string);
327
- reader.readAsText(file);
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.textContent = nameStr;
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.textContent = downloadStr;
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
- uploadLabel.textContent = uploadStr;
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.textContent = latencyStr;
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);
@@ -97,3 +97,7 @@
97
97
  right: 0;
98
98
  color: var(--color-text-disabled);
99
99
  }
100
+
101
+ .editor-buttons {
102
+ margin-top: 10px;
103
+ }
@@ -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
- headersAndRequestBody: 'Headers and request body',
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.headersAndRequestBody));
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.maybeAppendCookiesPanel, 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.maybeAppendCookiesPanel, 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 entry = items[0].webkitGetAsEntry();
752
- if (entry.isDirectory) {
753
- return;
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): void {
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 = (event.data as number);
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 = (event.data as number);
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(_event: Common.EventTarget.EventTargetEvent): void {
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 {