chrome-devtools-frontend 1.0.1036501 → 1.0.1036726

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.
@@ -184,7 +184,7 @@ export class CSSStyleDeclaration {
184
184
  for (const shorthand of shorthands) {
185
185
  if (propertiesSet.has(shorthand)) {
186
186
  continue;
187
- } // There already is a shorthand this #longhands falls under.
187
+ } // There already is a shorthand this #longhand falls under.
188
188
  const shorthandValue = this.#shorthandValues.get(shorthand);
189
189
  if (!shorthandValue) {
190
190
  continue;
@@ -141,7 +141,7 @@ export class NetworkManager extends SDKModel<EventTypes> {
141
141
  constructor(target: Target) {
142
142
  super(target);
143
143
  this.dispatcher = new NetworkDispatcher(this);
144
- this.fetchDispatcher = new FetchDispatcher(target.fetchAgent());
144
+ this.fetchDispatcher = new FetchDispatcher(target.fetchAgent(), this);
145
145
  this.#networkAgent = target.networkAgent();
146
146
  target.registerNetworkDispatcher(this.dispatcher);
147
147
  target.registerFetchDispatcher(this.fetchDispatcher);
@@ -264,7 +264,7 @@ export class NetworkManager extends SDKModel<EventTypes> {
264
264
  return this.dispatcher.requestForURL(url);
265
265
  }
266
266
 
267
- requestforId(id: string): NetworkRequest|null {
267
+ requestForId(id: string): NetworkRequest|null {
268
268
  return this.dispatcher.requestForId(id);
269
269
  }
270
270
 
@@ -392,15 +392,18 @@ const MAX_EAGER_POST_REQUEST_BODY_LENGTH = 64 * 1024; // bytes
392
392
 
393
393
  export class FetchDispatcher implements ProtocolProxyApi.FetchDispatcher {
394
394
  readonly #fetchAgent: ProtocolProxyApi.FetchApi;
395
+ readonly #manager: NetworkManager;
395
396
 
396
- constructor(agent: ProtocolProxyApi.FetchApi) {
397
+ constructor(agent: ProtocolProxyApi.FetchApi, manager: NetworkManager) {
397
398
  this.#fetchAgent = agent;
399
+ this.#manager = manager;
398
400
  }
399
401
 
400
- requestPaused({requestId, request, resourceType, responseStatusCode, responseHeaders}:
402
+ requestPaused({requestId, request, resourceType, responseStatusCode, responseHeaders, networkId}:
401
403
  Protocol.Fetch.RequestPausedEvent): void {
404
+ const networkRequest = networkId ? this.#manager.requestForId(networkId) : null;
402
405
  void MultitargetNetworkManager.instance().requestIntercepted(new InterceptedRequest(
403
- this.#fetchAgent, request, resourceType, requestId, responseStatusCode, responseHeaders));
406
+ this.#fetchAgent, request, resourceType, requestId, networkRequest, responseStatusCode, responseHeaders));
404
407
  }
405
408
 
406
409
  authRequired({}: Protocol.Fetch.AuthRequiredEvent): void {
@@ -1549,12 +1552,14 @@ export class InterceptedRequest {
1549
1552
  responseStatusCode: number|undefined;
1550
1553
  responseHeaders: Protocol.Fetch.HeaderEntry[]|undefined;
1551
1554
  requestId: Protocol.Fetch.RequestId;
1555
+ networkRequest: NetworkRequest|null;
1552
1556
 
1553
1557
  constructor(
1554
1558
  fetchAgent: ProtocolProxyApi.FetchApi,
1555
1559
  request: Protocol.Network.Request,
1556
1560
  resourceType: Protocol.Network.ResourceType,
1557
1561
  requestId: Protocol.Fetch.RequestId,
1562
+ networkRequest: NetworkRequest|null,
1558
1563
  responseStatusCode?: number,
1559
1564
  responseHeaders?: Protocol.Fetch.HeaderEntry[],
1560
1565
  ) {
@@ -1565,6 +1570,17 @@ export class InterceptedRequest {
1565
1570
  this.responseStatusCode = responseStatusCode;
1566
1571
  this.responseHeaders = responseHeaders;
1567
1572
  this.requestId = requestId;
1573
+ this.networkRequest = networkRequest;
1574
+ if (this.networkRequest && this.responseHeaders) {
1575
+ // This populates 'NetworkRequest.originalResponseHeaders' with the
1576
+ // response headers from CDP's 'Fetch.requestPaused'. Populating this
1577
+ // field together with 'NetworkRequest.responseHeaders' with the info
1578
+ // from 'Network.responseReceivedExtraInfo' would have been easier, but we
1579
+ // are not sure whether the response headers from the 2 CDP events are
1580
+ // always exactly the same.
1581
+ // Creates a deep copy.
1582
+ this.networkRequest.originalResponseHeaders = this.responseHeaders.map(headerEntry => ({...headerEntry}));
1583
+ }
1568
1584
  }
1569
1585
 
1570
1586
  hasResponded(): boolean {
@@ -236,6 +236,7 @@ export class NetworkRequest extends Common.ObjectWrapper.ObjectWrapper<EventType
236
236
  [x: string]: string|undefined,
237
237
  };
238
238
  #responseHeadersTextInternal: string;
239
+ #originalResponseHeaders: Protocol.Fetch.HeaderEntry[];
239
240
  #requestHeadersInternal: NameValue[];
240
241
  #requestHeaderValues: {
241
242
  [x: string]: string|undefined,
@@ -336,6 +337,7 @@ export class NetworkRequest extends Common.ObjectWrapper.ObjectWrapper<EventType
336
337
 
337
338
  this.#responseHeaderValues = {};
338
339
  this.#responseHeadersTextInternal = '';
340
+ this.#originalResponseHeaders = [];
339
341
 
340
342
  this.#requestHeadersInternal = [];
341
343
  this.#requestHeaderValues = {};
@@ -939,6 +941,14 @@ export class NetworkRequest extends Common.ObjectWrapper.ObjectWrapper<EventType
939
941
  this.dispatchEventToListeners(Events.ResponseHeadersChanged);
940
942
  }
941
943
 
944
+ get originalResponseHeaders(): Protocol.Fetch.HeaderEntry[] {
945
+ return this.#originalResponseHeaders;
946
+ }
947
+
948
+ set originalResponseHeaders(headers: Protocol.Fetch.HeaderEntry[]) {
949
+ this.#originalResponseHeaders = headers;
950
+ }
951
+
942
952
  get responseHeadersText(): string {
943
953
  return this.#responseHeadersTextInternal;
944
954
  }
@@ -1189,7 +1189,7 @@ export class ElementsTreeOutline extends
1189
1189
  }
1190
1190
  const container = new TopLayerContainer(parent.treeOutline, domModel);
1191
1191
  await container.throttledUpdateTopLayerElements();
1192
- if (container.currentTopLayerElements.size > 0) {
1192
+ if (container.currentTopLayerDOMNodes.size > 0) {
1193
1193
  parent.appendChild(container);
1194
1194
  }
1195
1195
  this.#topLayerContainerByParent.set(parent, container);
@@ -1460,10 +1460,10 @@ export class ElementsTreeOutline extends
1460
1460
  private async topLayerElementsChanged(): Promise<void> {
1461
1461
  for (const [parent, container] of this.#topLayerContainerByParent) {
1462
1462
  await container.throttledUpdateTopLayerElements();
1463
- if (container.currentTopLayerElements.size > 0 && container.parent !== parent) {
1463
+ if (container.currentTopLayerDOMNodes.size > 0 && container.parent !== parent) {
1464
1464
  parent.appendChild(container);
1465
1465
  }
1466
- container.hidden = container.currentTopLayerElements.size === 0;
1466
+ container.hidden = container.currentTopLayerDOMNodes.size === 0;
1467
1467
  }
1468
1468
  }
1469
1469
 
@@ -25,14 +25,13 @@ const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
25
25
  export class TopLayerContainer extends UI.TreeOutline.TreeElement {
26
26
  tree: ElementsTreeOutline.ElementsTreeOutline;
27
27
  domModel: SDK.DOMModel.DOMModel;
28
- currentTopLayerElements: Set<ElementsTreeElement>;
28
+ currentTopLayerDOMNodes: Set<SDK.DOMModel.DOMNode> = new Set();
29
29
  topLayerUpdateThrottler: Common.Throttler.Throttler;
30
30
 
31
31
  constructor(tree: ElementsTreeOutline.ElementsTreeOutline, domModel: SDK.DOMModel.DOMModel) {
32
32
  super('#top-layer');
33
33
  this.tree = tree;
34
34
  this.domModel = domModel;
35
- this.currentTopLayerElements = new Set();
36
35
  this.topLayerUpdateThrottler = new Common.Throttler.Throttler(1);
37
36
  }
38
37
 
@@ -43,7 +42,7 @@ export class TopLayerContainer extends UI.TreeOutline.TreeElement {
43
42
  async updateTopLayerElements(): Promise<void> {
44
43
  this.removeChildren();
45
44
  this.removeCurrentTopLayerElementsAdorners();
46
- this.currentTopLayerElements = new Set();
45
+ this.currentTopLayerDOMNodes = new Set();
47
46
 
48
47
  const newTopLayerElementsIDs = await this.domModel.getTopLayerElements();
49
48
  if (!newTopLayerElementsIDs || newTopLayerElementsIDs.length === 0) {
@@ -57,15 +56,9 @@ export class TopLayerContainer extends UI.TreeOutline.TreeElement {
57
56
  const topLayerElementShortcut = new SDK.DOMModel.DOMNodeShortcut(
58
57
  this.domModel.target(), topLayerDOMNode.backendNodeId(), 0, topLayerDOMNode.nodeName());
59
58
  const topLayerElementRepresentation = new ElementsTreeOutline.ShortcutTreeElement(topLayerElementShortcut);
60
- const topLayerTreeElement = this.tree.treeElementByNode.get(topLayerDOMNode);
61
- if (!topLayerTreeElement) {
62
- continue;
63
- }
64
-
65
- topLayerElementIndex++;
66
- this.addTopLayerAdorner(topLayerTreeElement, topLayerElementRepresentation, topLayerElementIndex);
67
- this.currentTopLayerElements.add(topLayerTreeElement);
68
59
  this.appendChild(topLayerElementRepresentation);
60
+ this.currentTopLayerDOMNodes.add(topLayerDOMNode);
61
+
69
62
  // Add the element's backdrop if previous top layer element is a backdrop.
70
63
  const previousTopLayerDOMNode =
71
64
  (i > 0) ? this.domModel.idToDOMNode.get(newTopLayerElementsIDs[i - 1]) : undefined;
@@ -75,13 +68,21 @@ export class TopLayerContainer extends UI.TreeOutline.TreeElement {
75
68
  const backdropElementRepresentation = new ElementsTreeOutline.ShortcutTreeElement(backdropElementShortcut);
76
69
  topLayerElementRepresentation.appendChild(backdropElementRepresentation);
77
70
  }
71
+
72
+ // TODO(changhaohan): store not-yet-inserted DOMNodes and adorn them when inserted.
73
+ const topLayerTreeElement = this.tree.treeElementByNode.get(topLayerDOMNode);
74
+ if (topLayerTreeElement) {
75
+ this.addTopLayerAdorner(topLayerTreeElement, topLayerElementRepresentation, ++topLayerElementIndex);
76
+ }
78
77
  }
79
78
  }
80
79
  }
81
80
 
82
81
  private removeCurrentTopLayerElementsAdorners(): void {
83
- for (const topLayerElement of this.currentTopLayerElements) {
84
- topLayerElement.removeAllAdorners();
82
+ for (const node of this.currentTopLayerDOMNodes) {
83
+ const topLayerTreeElement = this.tree.treeElementByNode.get(node);
84
+ // TODO(changhaohan): remove only top layer adorner.
85
+ topLayerTreeElement?.removeAllAdorners();
85
86
  }
86
87
  }
87
88
 
@@ -594,12 +594,17 @@ export class NavigatorView extends UI.Widget.VBox implements SDK.TargetManager.O
594
594
  project: Workspace.Workspace.Project, target: SDK.Target.Target|null,
595
595
  frame: SDK.ResourceTreeModel.ResourceTreeFrame|null, projectOrigin: string, isFromSourceMap: boolean,
596
596
  path: Platform.DevToolsPath.EncodedPathString): string {
597
- let targetId = target && !(this.groupByAuthored && isFromSourceMap) ? target.id() : '';
598
597
  const projectId = project.type() === Workspace.Workspace.projectTypes.FileSystem ? project.id() : '';
598
+ let targetId = target && !(this.groupByAuthored && isFromSourceMap) ? target.id() : '';
599
+ let frameId = this.groupByFrame && frame ? frame.id : '';
599
600
  if (this.groupByAuthored) {
600
- targetId = isFromSourceMap ? 'Authored' : 'Deployed:' + targetId;
601
+ if (isFromSourceMap) {
602
+ targetId = 'Authored';
603
+ frameId = '';
604
+ } else {
605
+ targetId = 'Deployed:' + targetId;
606
+ }
601
607
  }
602
- const frameId = this.groupByFrame && frame ? frame.id : '';
603
608
  return targetId + ':' + projectId + ':' + frameId + ':' + projectOrigin + ':' + path;
604
609
  }
605
610
 
package/package.json CHANGED
@@ -56,5 +56,5 @@
56
56
  "unittest": "scripts/test/run_unittests.py --no-text-coverage",
57
57
  "watch": "vpython third_party/node/node.py --output scripts/watch_build.js"
58
58
  },
59
- "version": "1.0.1036501"
59
+ "version": "1.0.1036726"
60
60
  }