chrome-devtools-frontend 1.0.1003496 → 1.0.1004641

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 (47) hide show
  1. package/config/gni/devtools_grd_files.gni +2 -0
  2. package/front_end/core/common/ParsedURL.ts +7 -3
  3. package/front_end/core/host/UserMetrics.ts +1 -1
  4. package/front_end/core/i18n/locales/en-US.json +48 -3
  5. package/front_end/core/i18n/locales/en-XL.json +48 -3
  6. package/front_end/core/sdk/DebuggerModel.ts +12 -0
  7. package/front_end/core/sdk/NetworkManager.ts +2 -2
  8. package/front_end/core/sdk/ResourceTreeModel.ts +32 -6
  9. package/front_end/core/sdk/RuntimeModel.ts +5 -3
  10. package/front_end/core/sdk/WebAuthnModel.ts +1 -1
  11. package/front_end/entrypoints/main/MainImpl.ts +2 -2
  12. package/front_end/generated/InspectorBackendCommands.js +8 -2
  13. package/front_end/generated/SupportedCSSProperties.js +4 -0
  14. package/front_end/generated/protocol-mapping.d.ts +14 -2
  15. package/front_end/generated/protocol-proxy-api.d.ts +14 -2
  16. package/front_end/generated/protocol.ts +23 -1
  17. package/front_end/models/extensions/ExtensionPanel.ts +1 -1
  18. package/front_end/models/extensions/ExtensionServer.ts +12 -14
  19. package/front_end/models/har/Log.ts +4 -3
  20. package/front_end/panels/application/components/FrameDetailsView.ts +28 -0
  21. package/front_end/panels/console/ErrorStackParser.ts +2 -5
  22. package/front_end/panels/issues/AffectedDirectivesView.ts +4 -3
  23. package/front_end/panels/lighthouse/LighthouseController.ts +6 -6
  24. package/front_end/panels/lighthouse/LighthousePanel.ts +1 -3
  25. package/front_end/panels/lighthouse/LighthouseProtocolService.ts +2 -1
  26. package/front_end/panels/network/NetworkItemView.ts +10 -1
  27. package/front_end/panels/network/NetworkLogView.ts +7 -4
  28. package/front_end/panels/network/RequestHeadersView.ts +1 -1
  29. package/front_end/panels/network/ResourceWebSocketFrameView.ts +2 -2
  30. package/front_end/panels/network/components/RequestHeadersView.css +78 -0
  31. package/front_end/panels/network/components/RequestHeadersView.ts +262 -0
  32. package/front_end/panels/network/components/components.ts +2 -0
  33. package/front_end/panels/network/forward/UIRequestLocation.ts +1 -0
  34. package/front_end/panels/network/networkLogView.css +3 -3
  35. package/front_end/panels/network/requestHeadersTree.css +6 -0
  36. package/front_end/panels/profiler/HeapSnapshotView.ts +11 -13
  37. package/front_end/panels/profiler/LiveHeapProfileView.ts +0 -1
  38. package/front_end/panels/screencast/ScreencastView.ts +0 -1
  39. package/front_end/panels/settings/SettingsScreen.ts +0 -1
  40. package/front_end/panels/sources/CallStackSidebarPane.ts +13 -0
  41. package/front_end/panels/sources/NavigatorView.ts +0 -2
  42. package/front_end/panels/sources/ScopeChainSidebarPane.ts +4 -3
  43. package/front_end/panels/sources/SourcesSearchScope.ts +0 -2
  44. package/front_end/panels/sources/sourcesView.css +4 -0
  45. package/front_end/ui/legacy/components/data_grid/DataGrid.ts +16 -2
  46. package/front_end/ui/legacy/components/data_grid/ViewportDataGrid.ts +2 -2
  47. package/package.json +1 -1
@@ -31,8 +31,6 @@
31
31
  // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration
32
32
  /* eslint-disable @typescript-eslint/naming-convention */
33
33
 
34
- // TODO(crbug.com/1253323): Casts to UrlString will be removed from this file when migration to branded types is complete.
35
-
36
34
  import * as Common from '../../core/common/common.js';
37
35
  import * as Host from '../../core/host/host.js';
38
36
  import * as i18n from '../../core/i18n/i18n.js';
@@ -56,7 +54,7 @@ import {ExtensionTraceProvider} from './ExtensionTraceProvider.js';
56
54
  import {LanguageExtensionEndpoint} from './LanguageExtensionEndpoint.js';
57
55
  import {PrivateAPI} from './ExtensionAPI.js';
58
56
 
59
- const extensionOrigins: WeakMap<MessagePort, string> = new WeakMap();
57
+ const extensionOrigins: WeakMap<MessagePort, Platform.DevToolsPath.UrlString> = new WeakMap();
60
58
 
61
59
  declare global {
62
60
  interface Window {
@@ -344,7 +342,7 @@ export class ExtensionServer extends Common.ObjectWrapper.ObjectWrapper<EventTyp
344
342
  return undefined;
345
343
  }
346
344
 
347
- private getExtensionOrigin(port: MessagePort): string {
345
+ private getExtensionOrigin(port: MessagePort): Platform.DevToolsPath.UrlString {
348
346
  const origin = extensionOrigins.get(port);
349
347
  if (!origin) {
350
348
  throw new Error('Received a message from an unregistered extension');
@@ -503,8 +501,7 @@ export class ExtensionServer extends Common.ObjectWrapper.ObjectWrapper<EventTyp
503
501
  if (message.command !== PrivateAPI.Commands.OpenResource) {
504
502
  return this.status.E_BADARG('command', `expected ${PrivateAPI.Commands.OpenResource}`);
505
503
  }
506
- const uiSourceCode =
507
- Workspace.Workspace.WorkspaceImpl.instance().uiSourceCodeForURL(message.url as Platform.DevToolsPath.UrlString);
504
+ const uiSourceCode = Workspace.Workspace.WorkspaceImpl.instance().uiSourceCodeForURL(message.url);
508
505
  if (uiSourceCode) {
509
506
  void Common.Revealer.reveal(uiSourceCode.uiLocation(message.lineNumber, message.columnNumber));
510
507
  return this.status.OK();
@@ -840,7 +837,7 @@ export class ExtensionServer extends Common.ObjectWrapper.ObjectWrapper<EventTyp
840
837
  this.postNotification(PrivateAPI.Events.PanelObjectSelected + 'elements');
841
838
  }
842
839
 
843
- sourceSelectionChanged(url: string, range: TextUtils.TextRange.TextRange): void {
840
+ sourceSelectionChanged(url: Platform.DevToolsPath.UrlString, range: TextUtils.TextRange.TextRange): void {
844
841
  this.postNotification(PrivateAPI.Events.PanelObjectSelected + 'sources', {
845
842
  startLine: range.startLine,
846
843
  startColumn: range.startColumn,
@@ -896,7 +893,7 @@ export class ExtensionServer extends Common.ObjectWrapper.ObjectWrapper<EventTyp
896
893
  return true;
897
894
  }
898
895
 
899
- private registerExtension(origin: string, port: MessagePort): void {
896
+ private registerExtension(origin: Platform.DevToolsPath.UrlString, port: MessagePort): void {
900
897
  if (!this.registeredExtensions.has(origin)) {
901
898
  if (origin !== window.location.origin) { // Just ignore inspector frames.
902
899
  console.error('Ignoring unauthorized client request from ' + origin);
@@ -910,7 +907,7 @@ export class ExtensionServer extends Common.ObjectWrapper.ObjectWrapper<EventTyp
910
907
 
911
908
  private onWindowMessage(event: MessageEvent): void {
912
909
  if (event.data === 'registerExtension') {
913
- this.registerExtension(event.origin, event.ports[0]);
910
+ this.registerExtension(event.origin as Platform.DevToolsPath.UrlString, event.ports[0]);
914
911
  }
915
912
  }
916
913
 
@@ -984,8 +981,9 @@ export class ExtensionServer extends Common.ObjectWrapper.ObjectWrapper<EventTyp
984
981
  removeLastEventListener.bind(this));
985
982
  }
986
983
 
987
- private expandResourcePath(extensionPath: string, resourcePath: string): string {
988
- return extensionPath + '/' + Common.ParsedURL.normalizePath(resourcePath);
984
+ private expandResourcePath(extensionPath: Platform.DevToolsPath.UrlString, resourcePath: string):
985
+ Platform.DevToolsPath.UrlString {
986
+ return extensionPath + '/' + Common.ParsedURL.normalizePath(resourcePath) as Platform.DevToolsPath.UrlString;
989
987
  }
990
988
 
991
989
  evaluate(
@@ -995,7 +993,7 @@ export class ExtensionServer extends Common.ObjectWrapper.ObjectWrapper<EventTyp
995
993
  |undefined {
996
994
  let context;
997
995
 
998
- function resolveURLToFrame(url: string): SDK.ResourceTreeModel.ResourceTreeFrame|null {
996
+ function resolveURLToFrame(url: Platform.DevToolsPath.UrlString): SDK.ResourceTreeModel.ResourceTreeFrame|null {
999
997
  let found = null;
1000
998
  function hasMatchingURL(frame: SDK.ResourceTreeModel.ResourceTreeFrame): SDK.ResourceTreeModel.ResourceTreeFrame|
1001
999
  null {
@@ -1009,7 +1007,7 @@ export class ExtensionServer extends Common.ObjectWrapper.ObjectWrapper<EventTyp
1009
1007
  options = options || {};
1010
1008
  let frame;
1011
1009
  if (options.frameURL) {
1012
- frame = resolveURLToFrame(options.frameURL);
1010
+ frame = resolveURLToFrame(options.frameURL as Platform.DevToolsPath.UrlString);
1013
1011
  } else {
1014
1012
  const target = SDK.TargetManager.TargetManager.instance().mainTarget();
1015
1013
  const resourceTreeModel = target && target.model(SDK.ResourceTreeModel.ResourceTreeModel);
@@ -1088,7 +1086,7 @@ export class ExtensionServer extends Common.ObjectWrapper.ObjectWrapper<EventTyp
1088
1086
  return undefined;
1089
1087
  }
1090
1088
 
1091
- private canInspectURL(url: string): boolean {
1089
+ private canInspectURL(url: Platform.DevToolsPath.UrlString): boolean {
1092
1090
  let parsedURL;
1093
1091
  // This is only to work around invalid URLs we're occasionally getting from some tests.
1094
1092
  // TODO(caseq): make sure tests supply valid URLs or we specifically handle invalid ones.
@@ -35,6 +35,7 @@
35
35
  // See https://bugs.webkit.org/show_bug.cgi?id=58127 for details.
36
36
 
37
37
  import * as Common from '../../core/common/common.js';
38
+ import type * as Platform from '../../core/platform/platform.js';
38
39
  import * as SDK from '../../core/sdk/sdk.js';
39
40
  import type * as Protocol from '../../generated/protocol.js';
40
41
 
@@ -346,8 +347,8 @@ export class Entry {
346
347
  return parameters.slice();
347
348
  }
348
349
 
349
- private buildRequestURL(url: string): string {
350
- return url.split('#', 2)[0];
350
+ private buildRequestURL(url: Platform.DevToolsPath.UrlString): Platform.DevToolsPath.UrlString {
351
+ return Common.ParsedURL.ParsedURL.split(url, '#', 2)[0];
351
352
  }
352
353
 
353
354
  private buildCookies(cookies: SDK.Cookie.Cookie[]): CookieDTO[] {
@@ -438,7 +439,7 @@ export interface Content {
438
439
 
439
440
  export interface Request {
440
441
  method: string;
441
- url: string;
442
+ url: Platform.DevToolsPath.UrlString;
442
443
  httpVersion: string;
443
444
  headers: Object;
444
445
  queryString: Parameter[];
@@ -240,6 +240,14 @@ const UIStrings = {
240
240
  *@description Label for a button which when clicked causes some information to be refreshed/updated.
241
241
  */
242
242
  refresh: 'Refresh',
243
+ /**
244
+ *@description Label for section of frame details view
245
+ */
246
+ prerendering: 'Prerendering',
247
+ /**
248
+ *@description Label for subtitle of frame details view
249
+ */
250
+ prerenderingStatus: 'Prerendering Status',
243
251
  };
244
252
  const str_ = i18n.i18n.registerUIStrings('panels/application/components/FrameDetailsView.ts', UIStrings);
245
253
  const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
@@ -253,6 +261,8 @@ export class FrameDetailsView extends UI.ThrottledWidget.ThrottledWidget {
253
261
  this.contentElement.classList.add('overflow-auto');
254
262
  this.contentElement.appendChild(this.#reportView);
255
263
  this.update();
264
+ frame.resourceTreeModel().addEventListener(
265
+ SDK.ResourceTreeModel.Events.PrerenderingStatusUpdated, this.update, this);
256
266
  }
257
267
 
258
268
  async doUpdate(): Promise<void> {
@@ -311,6 +321,7 @@ export class FrameDetailsReportView extends HTMLElement {
311
321
  </${PermissionsPolicySection.litTagName}>
312
322
  `;
313
323
  }), LitHtml.nothing)}
324
+ ${this.#renderPrerenderingSection()}
314
325
  ${this.#protocolMonitorExperimentEnabled ? this.#renderAdditionalInfoSection() : LitHtml.nothing}
315
326
  </${ReportView.ReportView.Report.litTagName}>
316
327
  `, this.#shadow, {host: this});
@@ -750,6 +761,23 @@ export class FrameDetailsReportView extends HTMLElement {
750
761
  return LitHtml.nothing;
751
762
  }
752
763
 
764
+ #renderPrerenderingSection(): LitHtml.LitTemplate {
765
+ if (!this.#frame || !this.#frame.prerenderFinalStatus) {
766
+ return LitHtml.nothing;
767
+ }
768
+
769
+ return LitHtml.html`
770
+ <${ReportView.ReportView.ReportSectionHeader.litTagName}>
771
+ ${i18nString(UIStrings.prerendering)}</${ReportView.ReportView.ReportSectionHeader.litTagName}>
772
+ <${ReportView.ReportView.ReportKey.litTagName}>${i18nString(UIStrings.prerenderingStatus)}</${
773
+ ReportView.ReportView.ReportKey.litTagName}>
774
+ <${ReportView.ReportView.ReportValue.litTagName}>
775
+ <div class="text-ellipsis" title=${this.#frame.prerenderFinalStatus}>${this.#frame.prerenderFinalStatus}</div>
776
+ </${ReportView.ReportView.ReportValue.litTagName}>
777
+ <${ReportView.ReportView.ReportSectionDivider.litTagName}></${
778
+ ReportView.ReportView.ReportSectionDivider.litTagName}>`;
779
+ }
780
+
753
781
  #renderAdditionalInfoSection(): LitHtml.LitTemplate {
754
782
  if (!this.#frame) {
755
783
  return LitHtml.nothing;
@@ -7,8 +7,6 @@ import type * as Platform from '../../core/platform/platform.js';
7
7
  import type * as SDK from '../../core/sdk/sdk.js';
8
8
  import type * as Protocol from '../../generated/protocol.js';
9
9
 
10
- // TODO(crbug.com/1253323): Casts to UrlString will be removed from this file when migration to branded types is complete.
11
-
12
10
  export interface ParsedErrorFrame {
13
11
  line: string;
14
12
  link?: {
@@ -109,9 +107,8 @@ function parseOrScriptMatch(debuggerModel: SDK.DebuggerModel.DebuggerModel, url:
109
107
  if (!url) {
110
108
  return null;
111
109
  }
112
- const parsedURL = Common.ParsedURL.ParsedURL.fromString(url);
113
- if (parsedURL) {
114
- return parsedURL.url as Platform.DevToolsPath.UrlString;
110
+ if (Common.ParsedURL.ParsedURL.isValidUrlString(url)) {
111
+ return url;
115
112
  }
116
113
  if (debuggerModel.scriptsForSourceURL(url).length) {
117
114
  return url;
@@ -5,7 +5,7 @@
5
5
  import * as Common from '../../core/common/common.js';
6
6
  import * as Host from '../../core/host/host.js';
7
7
  import * as i18n from '../../core/i18n/i18n.js';
8
- import type * as Platform from '../../core/platform/platform.js';
8
+ import * as Platform from '../../core/platform/platform.js';
9
9
  import type * as Protocol from '../../generated/protocol.js';
10
10
  import * as SDK from '../../core/sdk/sdk.js';
11
11
  import * as IssuesManager from '../../models/issues_manager/issues_manager.js';
@@ -79,7 +79,7 @@ export class AffectedDirectivesView extends AffectedResourcesView {
79
79
  element.appendChild(violatedDirective);
80
80
  }
81
81
 
82
- #appendBlockedURL(element: Element, url: string): void {
82
+ #appendBlockedURL(element: Element, url: Platform.DevToolsPath.UrlString): void {
83
83
  const info = document.createElement('td');
84
84
  info.classList.add('affected-resource-directive-info');
85
85
  info.textContent = url;
@@ -178,7 +178,8 @@ export class AffectedDirectivesView extends AffectedResourcesView {
178
178
  this.appendSourceLocation(element, location, maybeTarget);
179
179
  this.#appendStatus(element, cspIssueDetails.isReportOnly);
180
180
  } else if (this.issue.code() === IssuesManager.ContentSecurityPolicyIssue.urlViolationCode) {
181
- const url = cspIssueDetails.blockedURL ? cspIssueDetails.blockedURL : '';
181
+ const url = cspIssueDetails.blockedURL ? cspIssueDetails.blockedURL as Platform.DevToolsPath.UrlString :
182
+ Platform.DevToolsPath.EmptyUrlString;
182
183
  this.#appendBlockedURL(element, url);
183
184
  this.#appendStatus(element, cspIssueDetails.isReportOnly);
184
185
  this.#appendViolatedDirective(element, cspIssueDetails.violatedDirective);
@@ -4,7 +4,7 @@
4
4
 
5
5
  import * as Common from '../../core/common/common.js';
6
6
  import * as i18n from '../../core/i18n/i18n.js';
7
- import type * as Platform from '../../core/platform/platform.js';
7
+ import * as Platform from '../../core/platform/platform.js';
8
8
  import * as SDK from '../../core/sdk/sdk.js';
9
9
  import * as Protocol from '../../generated/protocol.js';
10
10
 
@@ -186,7 +186,7 @@ export class LighthouseController extends Common.ObjectWrapper.ObjectWrapper<Eve
186
186
  SDK.TargetManager.SDKModelObserver<SDK.ServiceWorkerManager.ServiceWorkerManager> {
187
187
  private manager?: SDK.ServiceWorkerManager.ServiceWorkerManager|null;
188
188
  private serviceWorkerListeners?: Common.EventTarget.EventDescriptor[];
189
- private inspectedURL?: string;
189
+ private inspectedURL?: Platform.DevToolsPath.UrlString;
190
190
 
191
191
  constructor(protocolService: ProtocolService) {
192
192
  super();
@@ -314,9 +314,9 @@ export class LighthouseController extends Common.ObjectWrapper.ObjectWrapper<Eve
314
314
  return '';
315
315
  }
316
316
 
317
- private async evaluateInspectedURL(): Promise<string> {
317
+ private async evaluateInspectedURL(): Promise<Platform.DevToolsPath.UrlString> {
318
318
  if (!this.manager) {
319
- return '';
319
+ return Platform.DevToolsPath.EmptyUrlString;
320
320
  }
321
321
  const mainTarget = this.manager.target();
322
322
  // target.inspectedURL is reliably populated, however it lacks any url #hash
@@ -331,7 +331,7 @@ export class LighthouseController extends Common.ObjectWrapper.ObjectWrapper<Eve
331
331
 
332
332
  const {currentIndex, entries} = navHistory;
333
333
  const navigationEntry = entries[currentIndex];
334
- return navigationEntry.url;
334
+ return navigationEntry.url as Platform.DevToolsPath.UrlString;
335
335
  }
336
336
 
337
337
  getFlags(): {
@@ -365,7 +365,7 @@ export class LighthouseController extends Common.ObjectWrapper.ObjectWrapper<Eve
365
365
  return categoryIDs;
366
366
  }
367
367
 
368
- async getInspectedURL(options?: {force: boolean}): Promise<string> {
368
+ async getInspectedURL(options?: {force: boolean}): Promise<Platform.DevToolsPath.UrlString> {
369
369
  if (options && options.force || !this.inspectedURL) {
370
370
  this.inspectedURL = await this.evaluateInspectedURL();
371
371
  }
@@ -5,7 +5,6 @@
5
5
  import * as Common from '../../core/common/common.js';
6
6
  import * as Host from '../../core/host/host.js';
7
7
  import * as i18n from '../../core/i18n/i18n.js';
8
- import type * as Platform from '../../core/platform/platform.js';
9
8
  import * as Root from '../../core/root/root.js';
10
9
  import * as SDK from '../../core/sdk/sdk.js';
11
10
  import * as EmulationModel from '../../models/emulation/emulation.js';
@@ -503,8 +502,7 @@ export class LighthousePanel extends UI.Panel.Panel {
503
502
  }
504
503
  // reload to reset the page state
505
504
  const inspectedURL = await this.controller.getInspectedURL();
506
- // TODO(crbug.com/1253323): Cast to UrlString will be removed when migration to branded types is complete.
507
- await resourceTreeModel.navigate(inspectedURL as Platform.DevToolsPath.UrlString);
505
+ await resourceTreeModel.navigate(inspectedURL);
508
506
  }
509
507
 
510
508
  wasShown(): void {
@@ -4,6 +4,7 @@
4
4
 
5
5
  import * as i18n from '../../core/i18n/i18n.js';
6
6
  import type * as ProtocolClient from '../../core/protocol_client/protocol_client.js';
7
+ import type * as Platform from '../../core/platform/platform.js';
7
8
  import * as SDK from '../../core/sdk/sdk.js';
8
9
 
9
10
  import type * as ReportRenderer from './LighthouseReporterTypes.js';
@@ -45,7 +46,7 @@ LighthouseWorkerService ││ Either ConnectionProxy or LegacyPort
45
46
  let lastId = 1;
46
47
 
47
48
  export interface LighthouseRun {
48
- inspectedURL: string;
49
+ inspectedURL: Platform.DevToolsPath.UrlString;
49
50
  categoryIDs: string[];
50
51
  flags: Record<string, Object|undefined>;
51
52
  }
@@ -30,12 +30,14 @@
30
30
 
31
31
  import * as Common from '../../core/common/common.js';
32
32
  import * as i18n from '../../core/i18n/i18n.js';
33
+ import * as Root from '../../core/root/root.js';
33
34
  import * as SDK from '../../core/sdk/sdk.js';
34
35
  import * as NetworkForward from '../../panels/network/forward/forward.js';
35
36
  import * as UI from '../../ui/legacy/legacy.js';
36
- import * as NetworkComponents from './components/components.js';
37
37
 
38
+ import * as NetworkComponents from './components/components.js';
38
39
  import {EventSourceMessagesView} from './EventSourceMessagesView.js';
40
+
39
41
  import type {NetworkTimeCalculator} from './NetworkTimeCalculator.js';
40
42
  import {RequestCookiesView} from './RequestCookiesView.js';
41
43
  import {RequestHeadersView} from './RequestHeadersView.js';
@@ -130,6 +132,7 @@ export class NetworkItemView extends UI.TabbedPane.TabbedPane {
130
132
  private requestInternal: SDK.NetworkRequest.NetworkRequest;
131
133
  private readonly resourceViewTabSetting: Common.Settings.Setting<NetworkForward.UIRequestLocation.UIRequestTabs>;
132
134
  private readonly headersView: RequestHeadersView;
135
+ private readonly headersViewComponent: NetworkComponents.RequestHeadersView.RequestHeadersView;
133
136
  private payloadView: RequestPayloadView|null;
134
137
  private readonly responseView: RequestResponseView|undefined;
135
138
  private cookiesView: RequestCookiesView|null;
@@ -149,6 +152,12 @@ export class NetworkItemView extends UI.TabbedPane.TabbedPane {
149
152
  this.appendTab(
150
153
  NetworkForward.UIRequestLocation.UIRequestTabs.Headers, i18nString(UIStrings.headers), this.headersView,
151
154
  i18nString(UIStrings.headers));
155
+ this.headersViewComponent = new NetworkComponents.RequestHeadersView.RequestHeadersView(request);
156
+ if (Root.Runtime.experiments.isEnabled(Root.Runtime.ExperimentName.HEADER_OVERRIDES)) {
157
+ this.appendTab(
158
+ NetworkForward.UIRequestLocation.UIRequestTabs.HeadersComponent, i18nString(UIStrings.headers),
159
+ this.headersViewComponent, i18nString(UIStrings.headers));
160
+ }
152
161
 
153
162
  this.payloadView = null;
154
163
  void this.maybeAppendPayloadPanel();
@@ -36,6 +36,7 @@ import * as Common from '../../core/common/common.js';
36
36
  import * as Host from '../../core/host/host.js';
37
37
  import * as i18n from '../../core/i18n/i18n.js';
38
38
  import * as Platform from '../../core/platform/platform.js';
39
+ import * as Root from '../../core/root/root.js';
39
40
  import * as SDK from '../../core/sdk/sdk.js';
40
41
  import * as Protocol from '../../generated/protocol.js';
41
42
  import * as Bindings from '../../models/bindings/bindings.js';
@@ -1583,10 +1584,12 @@ export class NetworkLogView extends Common.ObjectWrapper.eventMixin<EventTypes,
1583
1584
 
1584
1585
  contextMenu.saveSection().appendItem(i18nString(UIStrings.saveAllAsHarWithContent), this.exportAll.bind(this));
1585
1586
 
1586
- contextMenu.editSection().appendItem(
1587
- i18nString(UIStrings.createResponseHeaderOverride),
1588
- this.#handleCreateResponseHeaderOverrideClick.bind(this, request));
1589
- contextMenu.editSection().appendSeparator();
1587
+ if (Root.Runtime.experiments.isEnabled(Root.Runtime.ExperimentName.HEADER_OVERRIDES)) {
1588
+ contextMenu.editSection().appendItem(
1589
+ i18nString(UIStrings.createResponseHeaderOverride),
1590
+ this.#handleCreateResponseHeaderOverrideClick.bind(this, request));
1591
+ contextMenu.editSection().appendSeparator();
1592
+ }
1590
1593
  contextMenu.editSection().appendItem(i18nString(UIStrings.clearBrowserCache), this.clearBrowserCache.bind(this));
1591
1594
  contextMenu.editSection().appendItem(
1592
1595
  i18nString(UIStrings.clearBrowserCookies), this.clearBrowserCookies.bind(this));
@@ -451,7 +451,7 @@ export class RequestHeadersView extends UI.Widget.VBox {
451
451
  if (headersText) {
452
452
  const toggleButton = this.createHeadersToggleButton(this.showRequestHeadersText);
453
453
  toggleButton.addEventListener('click', this.toggleRequestHeadersText.bind(this), false);
454
- treeElement.listItemElement.appendChild(toggleButton);
454
+ treeElement.listItemElement.querySelector('.headers-title-left')?.appendChild(toggleButton);
455
455
  }
456
456
  }
457
457
 
@@ -388,13 +388,13 @@ export const _filterTypes: UI.FilterBar.Item[] = [
388
388
  ];
389
389
 
390
390
  export class ResourceWebSocketFrameNode extends DataGrid.SortableDataGrid.SortableDataGridNode<unknown> {
391
- private readonly url: string;
391
+ private readonly url: Platform.DevToolsPath.UrlString;
392
392
  readonly frame: SDK.NetworkRequest.WebSocketFrame;
393
393
  private readonly isTextFrame: boolean;
394
394
  private dataTextInternal: string;
395
395
  private binaryViewInternal: BinaryResourceView|null;
396
396
 
397
- constructor(url: string, frame: SDK.NetworkRequest.WebSocketFrame) {
397
+ constructor(url: Platform.DevToolsPath.UrlString, frame: SDK.NetworkRequest.WebSocketFrame) {
398
398
  let length = String(frame.text.length);
399
399
  const time = new Date(frame.time * 1000);
400
400
  const timeText = ('0' + time.getHours()).substr(-2) + ':' + ('0' + time.getMinutes()).substr(-2) + ':' +
@@ -0,0 +1,78 @@
1
+ /*
2
+ * Copyright 2022 The Chromium Authors. All rights reserved.
3
+ * Use of this source code is governed by a BSD-style license that can be
4
+ * found in the LICENSE file.
5
+ */
6
+
7
+ .header {
8
+ background-color: var(--color-background-elevation-1);
9
+ border-bottom: var(--legacy-divider-border);
10
+ border-top: var(--legacy-divider-border);
11
+ line-height: 25px;
12
+ padding: 0 5px;
13
+ }
14
+
15
+ .header::marker {
16
+ color: rgb(110 110 110); /* stylelint-disable-line plugin/use_theme_colors */
17
+ /* See: crbug.com/1152736 for color variable migration. */
18
+ font-size: 11px;
19
+ line-height: 1;
20
+ }
21
+
22
+ .header:focus {
23
+ background-color: var(--legacy-focus-bg-color);
24
+ }
25
+
26
+ .row {
27
+ display: flex;
28
+ line-height: 20px;
29
+ padding-left: 25px;
30
+ }
31
+
32
+ .row:first-of-type {
33
+ margin-top: 2px;
34
+ }
35
+
36
+ .row:last-child {
37
+ margin-bottom: 10px;
38
+ }
39
+
40
+ .header-name {
41
+ color: var(--color-primary);
42
+ font-weight: bold;
43
+ width: 160px;
44
+ flex-shrink: 0;
45
+ }
46
+
47
+ .header-value {
48
+ word-break: break-all;
49
+ user-select: text;
50
+ }
51
+
52
+ .green-circle::before,
53
+ .red-circle::before,
54
+ .yellow-circle::before {
55
+ content: "";
56
+ display: inline-block;
57
+ width: 12px;
58
+ height: 12px;
59
+ border-radius: 6px;
60
+ vertical-align: text-top;
61
+ margin-right: 2px;
62
+ }
63
+
64
+ .green-circle::before {
65
+ background-color: var(--color-accent-green);
66
+ }
67
+
68
+ .red-circle::before {
69
+ background-color: var(--color-accent-red);
70
+ }
71
+
72
+ .yellow-circle::before {
73
+ background-color: var(--issue-color-yellow);
74
+ }
75
+
76
+ .status-with-comment {
77
+ color: var(--color-text-secondary);
78
+ }