chrome-devtools-frontend 1.0.1035409 → 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.
Files changed (36) hide show
  1. package/AUTHORS +1 -0
  2. package/config/gni/devtools_grd_files.gni +2 -0
  3. package/docs/workflows.md +4 -5
  4. package/front_end/core/i18n/locales/en-US.json +21 -6
  5. package/front_end/core/i18n/locales/en-XL.json +21 -6
  6. package/front_end/core/root/Runtime.ts +8 -3
  7. package/front_end/core/sdk/CSSStyleDeclaration.ts +1 -1
  8. package/front_end/core/sdk/NetworkManager.ts +21 -5
  9. package/front_end/core/sdk/NetworkRequest.ts +10 -0
  10. package/front_end/entrypoints/main/MainImpl.ts +6 -5
  11. package/front_end/generated/InspectorBackendCommands.js +2 -2
  12. package/front_end/generated/SupportedCSSProperties.js +8 -4
  13. package/front_end/generated/protocol.ts +7 -1
  14. package/front_end/models/persistence/NetworkPersistenceManager.ts +25 -14
  15. package/front_end/panels/application/components/Prerender2.ts +5 -7
  16. package/front_end/panels/elements/CSSRuleValidator.ts +1 -1
  17. package/front_end/panels/elements/ElementsTreeOutline.ts +3 -3
  18. package/front_end/panels/elements/StylePropertiesSection.ts +12 -0
  19. package/front_end/panels/elements/StylePropertyTreeElement.ts +1 -1
  20. package/front_end/panels/elements/StylesSidebarPane.ts +1 -0
  21. package/front_end/panels/elements/TopLayerContainer.ts +14 -13
  22. package/front_end/panels/network/NetworkLogView.ts +13 -5
  23. package/front_end/panels/settings/SettingsScreen.ts +12 -0
  24. package/front_end/panels/settings/settingsScreen.css +6 -0
  25. package/front_end/panels/sources/NavigatorView.ts +8 -10
  26. package/front_end/panels/sources/ScopeChainSidebarPane.ts +4 -3
  27. package/front_end/panels/sources/SourcesNavigator.ts +0 -37
  28. package/front_end/panels/sources/SourcesPanel.ts +34 -22
  29. package/front_end/panels/sources/components/BreakpointsView.ts +206 -0
  30. package/front_end/panels/sources/components/HeadersView.ts +8 -41
  31. package/front_end/panels/sources/components/breakpointsView.css +95 -0
  32. package/front_end/panels/sources/components/components.ts +2 -0
  33. package/front_end/ui/components/linear_memory_inspector/LinearMemoryHighlightChipList.ts +11 -9
  34. package/front_end/ui/components/linear_memory_inspector/linearMemoryHighlightChipList.css +48 -30
  35. package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +2 -2
  36. package/package.json +1 -1
package/AUTHORS CHANGED
@@ -17,6 +17,7 @@ Alexey Rodionov <fluorescent.hallucinogen@gmail.com>
17
17
  Ankit Mishra <ankit.mishra131990@gmail.com>
18
18
  Anna Agoha <annaagoha@gmail.com>
19
19
  Anthony Xie <anthonyxie64@gmail.com>
20
+ Boris Verkhovskiy <boris.verk@gmail.com>
20
21
  Carl Espe <carl@cpespe.com>
21
22
  Conner Turner <cturner@zyme.xyz>
22
23
  Daniel bellfield <dnlbellfield@gmail.com>
@@ -1265,8 +1265,10 @@ grd_files_debug_sources = [
1265
1265
  "front_end/panels/sources/WatchExpressionsSidebarPane.js",
1266
1266
  "front_end/panels/sources/breakpointEditDialog.css.js",
1267
1267
  "front_end/panels/sources/callStackSidebarPane.css.js",
1268
+ "front_end/panels/sources/components/BreakpointsView.js",
1268
1269
  "front_end/panels/sources/components/HeadersView.css.js",
1269
1270
  "front_end/panels/sources/components/HeadersView.js",
1271
+ "front_end/panels/sources/components/breakpointsView.css.js",
1270
1272
  "front_end/panels/sources/debuggerPausedMessage.css.js",
1271
1273
  "front_end/panels/sources/dialog.css.js",
1272
1274
  "front_end/panels/sources/javaScriptBreakpointsSidebarPane.css.js",
package/docs/workflows.md CHANGED
@@ -44,8 +44,7 @@ gn gen out/fast-build --args='devtools_skip_typecheck=true'
44
44
  To update to latest tip of tree version:
45
45
 
46
46
  ```bash
47
- git fetch origin
48
- git checkout origin/main
47
+ git fetch origin; git checkout origin/main # or, alternatively: git rebase-update
49
48
  gclient sync
50
49
  ```
51
50
 
@@ -68,7 +67,7 @@ Open DevTools via F12 or Ctrl+Shift+J on Windows/Linux or Cmd+Option+I on Mac.
68
67
 
69
68
  If you get errors along the line of `Uncaught TypeError: Cannot read property 'setInspectedTabId'` you probably specified an incorrect path - the path has to be absolute. On Mac and Linux, the file url will start with __three__ slashes: `file:///Users/...`.
70
69
 
71
- Tip: You can inspect DevTools with DevTools by undocking DevTools and then opening a second instance of DevTools (F12 on Windows/Linux, Cmd+Option+I on Mac).
70
+ **Tip**: You can inspect DevTools with DevTools by undocking DevTools and then opening a second instance of DevTools (see keyboard shortcut above).
72
71
 
73
72
  ##### Running from remote URL
74
73
 
@@ -82,7 +81,7 @@ Then point to that web server when starting Chromium, for example:
82
81
  <path-to-devtools-frontend>/third_party/chrome/chrome-<platform>/chrome --custom-devtools-frontend=http://localhost:8000/
83
82
  ```
84
83
 
85
- Open DevTools via F12 on Windows/Linux or Cmd+Option+I on Mac.
84
+ Open DevTools via F12 or Ctrl+Shift+J on Windows/Linux or Cmd+Option+I on Mac.
86
85
 
87
86
  ##### Running in hosted mode
88
87
 
@@ -117,7 +116,7 @@ gclient sync
117
116
  Then, disable `gclient sync` for DevTools frontend inside of Chromium by editing `.gclient` config. From `chromium/src/`, run
118
117
 
119
118
  ```bash
120
- vim $(gclient root)/.gclient
119
+ vim "$(gclient root)/.gclient"
121
120
  ```
122
121
 
123
122
  In the `custom_deps` section, insert this line:
@@ -3272,6 +3272,9 @@
3272
3272
  "panels/application/components/Prerender2.ts | CrossOriginRedirect": {
3273
3273
  "message": "Attempted to prerender a URL which redirected to a cross-origin URL. Currently prerendering cross-origin pages is disallowed."
3274
3274
  },
3275
+ "panels/application/components/Prerender2.ts | DataSaverEnabled": {
3276
+ "message": "Data saver enabled"
3277
+ },
3275
3278
  "panels/application/components/Prerender2.ts | Destroyed": {
3276
3279
  "message": "A prerendered page was abandoned for unknown reasons."
3277
3280
  },
@@ -3284,9 +3287,6 @@
3284
3287
  "panels/application/components/Prerender2.ts | EmbedderTriggeredAndCrossOriginRedirected": {
3285
3288
  "message": "Prerendering triggered by Chrome internal (e.g., Omnibox prerendering) is is canceled because the navigation is redirected to another cross-origin page."
3286
3289
  },
3287
- "panels/application/components/Prerender2.ts | EmbedderTriggeredAndDestroyed": {
3288
- "message": "Prerendering triggered by Chrome internal (e.g., Omnibox prerendering) is is destroyed in the destructor."
3289
- },
3290
3290
  "panels/application/components/Prerender2.ts | EmbedderTriggeredAndSameOriginRedirected": {
3291
3291
  "message": "Prerendering triggered by Chrome internal (e.g., Omnibox prerendering) is canceled because the navigation is redirected to another same-origin page."
3292
3292
  },
@@ -9725,6 +9725,9 @@
9725
9725
  "panels/settings/SettingsScreen.ts | restoreDefaultsAndReload": {
9726
9726
  "message": "Restore defaults and reload"
9727
9727
  },
9728
+ "panels/settings/SettingsScreen.ts | sendFeedback": {
9729
+ "message": "Send feedback"
9730
+ },
9728
9731
  "panels/settings/SettingsScreen.ts | settings": {
9729
9732
  "message": "Settings"
9730
9733
  },
@@ -9830,6 +9833,18 @@
9830
9833
  "panels/sources/CallStackSidebarPane.ts | showMore": {
9831
9834
  "message": "Show more"
9832
9835
  },
9836
+ "panels/sources/components/BreakpointsView.ts | breakpointHit": {
9837
+ "message": "{PH1} breakpoint hit"
9838
+ },
9839
+ "panels/sources/components/BreakpointsView.ts | checked": {
9840
+ "message": "checked"
9841
+ },
9842
+ "panels/sources/components/BreakpointsView.ts | indeterminate": {
9843
+ "message": "mixed"
9844
+ },
9845
+ "panels/sources/components/BreakpointsView.ts | unchecked": {
9846
+ "message": "unchecked"
9847
+ },
9833
9848
  "panels/sources/components/HeadersView.ts | addHeader": {
9834
9849
  "message": "Add a header"
9835
9850
  },
@@ -10460,9 +10475,6 @@
10460
10475
  "panels/sources/sources-meta.ts | watch": {
10461
10476
  "message": "Watch"
10462
10477
  },
10463
- "panels/sources/SourcesNavigator.ts | authoredDescription": {
10464
- "message": "Group files by Authored/Deployed"
10465
- },
10466
10478
  "panels/sources/SourcesNavigator.ts | clearConfiguration": {
10467
10479
  "message": "Clear configuration"
10468
10480
  },
@@ -10541,6 +10553,9 @@
10541
10553
  "panels/sources/SourcesPanel.ts | hideDebugger": {
10542
10554
  "message": "Hide debugger"
10543
10555
  },
10556
+ "panels/sources/SourcesPanel.ts | hideIgnoreListed": {
10557
+ "message": "Hide ignore-listed sources"
10558
+ },
10544
10559
  "panels/sources/SourcesPanel.ts | hideNavigator": {
10545
10560
  "message": "Hide navigator"
10546
10561
  },
@@ -3272,6 +3272,9 @@
3272
3272
  "panels/application/components/Prerender2.ts | CrossOriginRedirect": {
3273
3273
  "message": "Ât́t̂ém̂ṕt̂éd̂ t́ô ṕr̂ér̂én̂d́êŕ â ÚR̂Ĺ ŵh́îćĥ ŕêd́îŕêćt̂éd̂ t́ô á ĉŕôśŝ-ór̂íĝín̂ ÚR̂Ĺ. Ĉúr̂ŕêńt̂ĺŷ ṕr̂ér̂én̂d́êŕîńĝ ćr̂óŝś-ôŕîǵîń p̂áĝéŝ íŝ d́îśâĺl̂óŵéd̂."
3274
3274
  },
3275
+ "panels/application/components/Prerender2.ts | DataSaverEnabled": {
3276
+ "message": "D̂át̂á ŝáv̂ér̂ én̂áb̂ĺêd́"
3277
+ },
3275
3278
  "panels/application/components/Prerender2.ts | Destroyed": {
3276
3279
  "message": "Â ṕr̂ér̂én̂d́êŕêd́ p̂áĝé ŵáŝ áb̂án̂d́ôńêd́ f̂ór̂ ún̂ḱn̂óŵń r̂éâśôńŝ."
3277
3280
  },
@@ -3284,9 +3287,6 @@
3284
3287
  "panels/application/components/Prerender2.ts | EmbedderTriggeredAndCrossOriginRedirected": {
3285
3288
  "message": "P̂ŕêŕêńd̂ér̂ín̂ǵ t̂ŕîǵĝér̂éd̂ b́ŷ Ćĥŕôḿê ín̂t́êŕn̂ál̂ (é.ĝ., Óm̂ńîb́ôx́ p̂ŕêŕêńd̂ér̂ín̂ǵ) îś îś ĉán̂ćêĺêd́ b̂éĉáûśê t́ĥé n̂áv̂íĝát̂íôń îś r̂éd̂ír̂éĉt́êd́ t̂ó âńôt́ĥér̂ ćr̂óŝś-ôŕîǵîń p̂áĝé."
3286
3289
  },
3287
- "panels/application/components/Prerender2.ts | EmbedderTriggeredAndDestroyed": {
3288
- "message": "P̂ŕêŕêńd̂ér̂ín̂ǵ t̂ŕîǵĝér̂éd̂ b́ŷ Ćĥŕôḿê ín̂t́êŕn̂ál̂ (é.ĝ., Óm̂ńîb́ôx́ p̂ŕêŕêńd̂ér̂ín̂ǵ) îś îś d̂éŝt́r̂óŷéd̂ ín̂ t́ĥé d̂éŝt́r̂úĉt́ôŕ."
3289
- },
3290
3290
  "panels/application/components/Prerender2.ts | EmbedderTriggeredAndSameOriginRedirected": {
3291
3291
  "message": "P̂ŕêŕêńd̂ér̂ín̂ǵ t̂ŕîǵĝér̂éd̂ b́ŷ Ćĥŕôḿê ín̂t́êŕn̂ál̂ (é.ĝ., Óm̂ńîb́ôx́ p̂ŕêŕêńd̂ér̂ín̂ǵ) îś ĉán̂ćêĺêd́ b̂éĉáûśê t́ĥé n̂áv̂íĝát̂íôń îś r̂éd̂ír̂éĉt́êd́ t̂ó âńôt́ĥér̂ śâḿê-ór̂íĝín̂ ṕâǵê."
3292
3292
  },
@@ -9725,6 +9725,9 @@
9725
9725
  "panels/settings/SettingsScreen.ts | restoreDefaultsAndReload": {
9726
9726
  "message": "R̂éŝt́ôŕê d́êf́âúl̂t́ŝ án̂d́ r̂él̂óâd́"
9727
9727
  },
9728
+ "panels/settings/SettingsScreen.ts | sendFeedback": {
9729
+ "message": "Ŝén̂d́ f̂éêd́b̂áĉḱ"
9730
+ },
9728
9731
  "panels/settings/SettingsScreen.ts | settings": {
9729
9732
  "message": "Ŝét̂t́îńĝś"
9730
9733
  },
@@ -9830,6 +9833,18 @@
9830
9833
  "panels/sources/CallStackSidebarPane.ts | showMore": {
9831
9834
  "message": "Ŝh́ôẃ m̂ór̂é"
9832
9835
  },
9836
+ "panels/sources/components/BreakpointsView.ts | breakpointHit": {
9837
+ "message": "{PH1} b̂ŕêák̂ṕôín̂t́ ĥít̂"
9838
+ },
9839
+ "panels/sources/components/BreakpointsView.ts | checked": {
9840
+ "message": "ĉh́êćk̂éd̂"
9841
+ },
9842
+ "panels/sources/components/BreakpointsView.ts | indeterminate": {
9843
+ "message": "m̂íx̂éd̂"
9844
+ },
9845
+ "panels/sources/components/BreakpointsView.ts | unchecked": {
9846
+ "message": "ûńĉh́êćk̂éd̂"
9847
+ },
9833
9848
  "panels/sources/components/HeadersView.ts | addHeader": {
9834
9849
  "message": "Âd́d̂ á ĥéâd́êŕ"
9835
9850
  },
@@ -10460,9 +10475,6 @@
10460
10475
  "panels/sources/sources-meta.ts | watch": {
10461
10476
  "message": "Ŵát̂ćĥ"
10462
10477
  },
10463
- "panels/sources/SourcesNavigator.ts | authoredDescription": {
10464
- "message": "Ĝŕôúp̂ f́îĺêś b̂ý Âút̂h́ôŕêd́/D̂ép̂ĺôýêd́"
10465
- },
10466
10478
  "panels/sources/SourcesNavigator.ts | clearConfiguration": {
10467
10479
  "message": "Ĉĺêár̂ ćôńf̂íĝúr̂át̂íôń"
10468
10480
  },
@@ -10541,6 +10553,9 @@
10541
10553
  "panels/sources/SourcesPanel.ts | hideDebugger": {
10542
10554
  "message": "Ĥíd̂é d̂éb̂úĝǵêŕ"
10543
10555
  },
10556
+ "panels/sources/SourcesPanel.ts | hideIgnoreListed": {
10557
+ "message": "Ĥíd̂é îǵn̂ór̂é-l̂íŝt́êd́ ŝóûŕĉéŝ"
10558
+ },
10544
10559
  "panels/sources/SourcesPanel.ts | hideNavigator": {
10545
10560
  "message": "Ĥíd̂é n̂áv̂íĝát̂ór̂"
10546
10561
  },
@@ -152,13 +152,16 @@ export class ExperimentsSupport {
152
152
  self.localStorage['experiments'] = JSON.stringify(value);
153
153
  }
154
154
 
155
- register(experimentName: string, experimentTitle: string, unstable?: boolean, docLink?: string): void {
155
+ register(
156
+ experimentName: string, experimentTitle: string, unstable?: boolean, docLink?: string,
157
+ feedbackLink?: string): void {
156
158
  Platform.DCHECK(
157
159
  () => !this.#experimentNames.has(experimentName), 'Duplicate registration of experiment ' + experimentName);
158
160
  this.#experimentNames.add(experimentName);
159
161
  this.#experiments.push(new Experiment(
160
162
  this, experimentName, experimentTitle, Boolean(unstable),
161
- docLink as Platform.DevToolsPath.UrlString ?? Platform.DevToolsPath.EmptyUrlString));
163
+ docLink as Platform.DevToolsPath.UrlString ?? Platform.DevToolsPath.EmptyUrlString,
164
+ feedbackLink as Platform.DevToolsPath.UrlString ?? Platform.DevToolsPath.EmptyUrlString));
162
165
  }
163
166
 
164
167
  isEnabled(experimentName: string): boolean {
@@ -257,14 +260,16 @@ export class Experiment {
257
260
  title: string;
258
261
  unstable: boolean;
259
262
  docLink?: Platform.DevToolsPath.UrlString;
263
+ readonly feedbackLink?: Platform.DevToolsPath.UrlString;
260
264
  readonly #experiments: ExperimentsSupport;
261
265
  constructor(
262
266
  experiments: ExperimentsSupport, name: string, title: string, unstable: boolean,
263
- docLink: Platform.DevToolsPath.UrlString) {
267
+ docLink: Platform.DevToolsPath.UrlString, feedbackLink: Platform.DevToolsPath.UrlString) {
264
268
  this.name = name;
265
269
  this.title = title;
266
270
  this.unstable = unstable;
267
271
  this.docLink = docLink;
272
+ this.feedbackLink = feedbackLink;
268
273
  this.#experiments = experiments;
269
274
  }
270
275
 
@@ -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
  }
@@ -341,7 +341,8 @@ export class MainImpl {
341
341
  // Full Accessibility Tree
342
342
  Root.Runtime.experiments.register(
343
343
  'fullAccessibilityTree', 'Enable full accessibility tree view in the Elements panel', undefined,
344
- 'https://developer.chrome.com/blog/new-in-devtools-90/#accesibility-tree');
344
+ 'https://developer.chrome.com/blog/new-in-devtools-90/#accesibility-tree',
345
+ 'https://g.co/devtools/a11y-tree-feedback');
345
346
 
346
347
  // Font Editor
347
348
  Root.Runtime.experiments.register(
@@ -373,9 +374,8 @@ export class MainImpl {
373
374
 
374
375
  // CSS <length> authoring tool.
375
376
  Root.Runtime.experiments.register(
376
- 'cssTypeComponentLength',
377
- 'Enable CSS <length> authoring tool in the Styles pane (https://g.co/devtools/length-feedback)', undefined,
378
- 'https://developer.chrome.com/blog/new-in-devtools-96/#length');
377
+ 'cssTypeComponentLength', 'Enable CSS <length> authoring tool in the Styles pane', undefined,
378
+ 'https://developer.chrome.com/blog/new-in-devtools-96/#length', 'https://g.co/devtools/length-feedback');
379
379
 
380
380
  // Display precise changes in the Changes tab.
381
381
  Root.Runtime.experiments.register(
@@ -407,7 +407,8 @@ export class MainImpl {
407
407
 
408
408
  // Change grouping of sources panel to use Authored/Deployed trees
409
409
  Root.Runtime.experiments.register(
410
- Root.Runtime.ExperimentName.AUTHORED_DEPLOYED_GROUPING, 'Group sources into Authored and Deployed trees');
410
+ Root.Runtime.ExperimentName.AUTHORED_DEPLOYED_GROUPING, 'Group sources into Authored and Deployed trees',
411
+ undefined, 'https://goo.gle/authored-deployed', 'https://goo.gle/authored-deployed-feedback');
411
412
 
412
413
  // Hide third party code (as determined by ignore lists or source maps)
413
414
  Root.Runtime.experiments.register(
@@ -554,7 +554,7 @@ inspectorBackend.registerEnum("Page.AdFrameExplanation", {ParentIsAd: "ParentIsA
554
554
  inspectorBackend.registerEnum("Page.SecureContextType", {Secure: "Secure", SecureLocalhost: "SecureLocalhost", InsecureScheme: "InsecureScheme", InsecureAncestor: "InsecureAncestor"});
555
555
  inspectorBackend.registerEnum("Page.CrossOriginIsolatedContextType", {Isolated: "Isolated", NotIsolated: "NotIsolated", NotIsolatedFeatureDisabled: "NotIsolatedFeatureDisabled"});
556
556
  inspectorBackend.registerEnum("Page.GatedAPIFeatures", {SharedArrayBuffers: "SharedArrayBuffers", SharedArrayBuffersTransferAllowed: "SharedArrayBuffersTransferAllowed", PerformanceMeasureMemory: "PerformanceMeasureMemory", PerformanceProfile: "PerformanceProfile"});
557
- inspectorBackend.registerEnum("Page.PermissionsPolicyFeature", {Accelerometer: "accelerometer", AmbientLightSensor: "ambient-light-sensor", AttributionReporting: "attribution-reporting", Autoplay: "autoplay", Bluetooth: "bluetooth", BrowsingTopics: "browsing-topics", Camera: "camera", ChDpr: "ch-dpr", ChDeviceMemory: "ch-device-memory", ChDownlink: "ch-downlink", ChEct: "ch-ect", ChPrefersColorScheme: "ch-prefers-color-scheme", ChRtt: "ch-rtt", ChSaveData: "ch-save-data", ChUa: "ch-ua", ChUaArch: "ch-ua-arch", ChUaBitness: "ch-ua-bitness", ChUaPlatform: "ch-ua-platform", ChUaModel: "ch-ua-model", ChUaMobile: "ch-ua-mobile", ChUaFull: "ch-ua-full", ChUaFullVersion: "ch-ua-full-version", ChUaFullVersionList: "ch-ua-full-version-list", ChUaPlatformVersion: "ch-ua-platform-version", ChUaReduced: "ch-ua-reduced", ChUaWow64: "ch-ua-wow64", ChViewportHeight: "ch-viewport-height", ChViewportWidth: "ch-viewport-width", ChWidth: "ch-width", ClipboardRead: "clipboard-read", ClipboardWrite: "clipboard-write", CrossOriginIsolated: "cross-origin-isolated", DirectSockets: "direct-sockets", DisplayCapture: "display-capture", DocumentDomain: "document-domain", EncryptedMedia: "encrypted-media", ExecutionWhileOutOfViewport: "execution-while-out-of-viewport", ExecutionWhileNotRendered: "execution-while-not-rendered", FederatedCredentials: "federated-credentials", FocusWithoutUserActivation: "focus-without-user-activation", Fullscreen: "fullscreen", Frobulate: "frobulate", Gamepad: "gamepad", Geolocation: "geolocation", Gyroscope: "gyroscope", Hid: "hid", IdleDetection: "idle-detection", InterestCohort: "interest-cohort", JoinAdInterestGroup: "join-ad-interest-group", KeyboardMap: "keyboard-map", LocalFonts: "local-fonts", Magnetometer: "magnetometer", Microphone: "microphone", Midi: "midi", OtpCredentials: "otp-credentials", Payment: "payment", PictureInPicture: "picture-in-picture", PublickeyCredentialsGet: "publickey-credentials-get", RunAdAuction: "run-ad-auction", ScreenWakeLock: "screen-wake-lock", Serial: "serial", SharedAutofill: "shared-autofill", SharedStorage: "shared-storage", StorageAccessAPI: "storage-access-api", SyncXhr: "sync-xhr", TrustTokenRedemption: "trust-token-redemption", Usb: "usb", VerticalScroll: "vertical-scroll", WebShare: "web-share", WindowPlacement: "window-placement", XrSpatialTracking: "xr-spatial-tracking"});
557
+ inspectorBackend.registerEnum("Page.PermissionsPolicyFeature", {Accelerometer: "accelerometer", AmbientLightSensor: "ambient-light-sensor", AttributionReporting: "attribution-reporting", Autoplay: "autoplay", Bluetooth: "bluetooth", BrowsingTopics: "browsing-topics", Camera: "camera", ChDpr: "ch-dpr", ChDeviceMemory: "ch-device-memory", ChDownlink: "ch-downlink", ChEct: "ch-ect", ChPrefersColorScheme: "ch-prefers-color-scheme", ChRtt: "ch-rtt", ChSaveData: "ch-save-data", ChUa: "ch-ua", ChUaArch: "ch-ua-arch", ChUaBitness: "ch-ua-bitness", ChUaPlatform: "ch-ua-platform", ChUaModel: "ch-ua-model", ChUaMobile: "ch-ua-mobile", ChUaFull: "ch-ua-full", ChUaFullVersion: "ch-ua-full-version", ChUaFullVersionList: "ch-ua-full-version-list", ChUaPlatformVersion: "ch-ua-platform-version", ChUaReduced: "ch-ua-reduced", ChUaWow64: "ch-ua-wow64", ChViewportHeight: "ch-viewport-height", ChViewportWidth: "ch-viewport-width", ChWidth: "ch-width", ClipboardRead: "clipboard-read", ClipboardWrite: "clipboard-write", CrossOriginIsolated: "cross-origin-isolated", DirectSockets: "direct-sockets", DisplayCapture: "display-capture", DocumentDomain: "document-domain", EncryptedMedia: "encrypted-media", ExecutionWhileOutOfViewport: "execution-while-out-of-viewport", ExecutionWhileNotRendered: "execution-while-not-rendered", FederatedCredentials: "federated-credentials", FocusWithoutUserActivation: "focus-without-user-activation", Fullscreen: "fullscreen", Frobulate: "frobulate", Gamepad: "gamepad", Geolocation: "geolocation", Gyroscope: "gyroscope", Hid: "hid", IdleDetection: "idle-detection", InterestCohort: "interest-cohort", JoinAdInterestGroup: "join-ad-interest-group", KeyboardMap: "keyboard-map", LocalFonts: "local-fonts", Magnetometer: "magnetometer", Microphone: "microphone", Midi: "midi", OtpCredentials: "otp-credentials", Payment: "payment", PictureInPicture: "picture-in-picture", PublickeyCredentialsGet: "publickey-credentials-get", RunAdAuction: "run-ad-auction", ScreenWakeLock: "screen-wake-lock", Serial: "serial", SharedAutofill: "shared-autofill", SharedStorage: "shared-storage", StorageAccessAPI: "storage-access-api", SyncXhr: "sync-xhr", TrustTokenRedemption: "trust-token-redemption", Unload: "unload", Usb: "usb", VerticalScroll: "vertical-scroll", WebShare: "web-share", WindowPlacement: "window-placement", XrSpatialTracking: "xr-spatial-tracking"});
558
558
  inspectorBackend.registerEnum("Page.PermissionsPolicyBlockReason", {Header: "Header", IframeAttribute: "IframeAttribute", InFencedFrameTree: "InFencedFrameTree", InIsolatedApp: "InIsolatedApp"});
559
559
  inspectorBackend.registerEnum("Page.OriginTrialTokenStatus", {Success: "Success", NotSupported: "NotSupported", Insecure: "Insecure", Expired: "Expired", WrongOrigin: "WrongOrigin", InvalidSignature: "InvalidSignature", Malformed: "Malformed", WrongVersion: "WrongVersion", FeatureDisabled: "FeatureDisabled", TokenDisabled: "TokenDisabled", FeatureDisabledForUser: "FeatureDisabledForUser", UnknownTrial: "UnknownTrial"});
560
560
  inspectorBackend.registerEnum("Page.OriginTrialStatus", {Enabled: "Enabled", ValidTokenNotProvided: "ValidTokenNotProvided", OSNotSupported: "OSNotSupported", TrialNotAllowed: "TrialNotAllowed"});
@@ -567,7 +567,7 @@ inspectorBackend.registerEnum("Page.ReferrerPolicy", {NoReferrer: "noReferrer",
567
567
  inspectorBackend.registerEnum("Page.NavigationType", {Navigation: "Navigation", BackForwardCacheRestore: "BackForwardCacheRestore"});
568
568
  inspectorBackend.registerEnum("Page.BackForwardCacheNotRestoredReason", {NotPrimaryMainFrame: "NotPrimaryMainFrame", BackForwardCacheDisabled: "BackForwardCacheDisabled", RelatedActiveContentsExist: "RelatedActiveContentsExist", HTTPStatusNotOK: "HTTPStatusNotOK", SchemeNotHTTPOrHTTPS: "SchemeNotHTTPOrHTTPS", Loading: "Loading", WasGrantedMediaAccess: "WasGrantedMediaAccess", DisableForRenderFrameHostCalled: "DisableForRenderFrameHostCalled", DomainNotAllowed: "DomainNotAllowed", HTTPMethodNotGET: "HTTPMethodNotGET", SubframeIsNavigating: "SubframeIsNavigating", Timeout: "Timeout", CacheLimit: "CacheLimit", JavaScriptExecution: "JavaScriptExecution", RendererProcessKilled: "RendererProcessKilled", RendererProcessCrashed: "RendererProcessCrashed", SchedulerTrackedFeatureUsed: "SchedulerTrackedFeatureUsed", ConflictingBrowsingInstance: "ConflictingBrowsingInstance", CacheFlushed: "CacheFlushed", ServiceWorkerVersionActivation: "ServiceWorkerVersionActivation", SessionRestored: "SessionRestored", ServiceWorkerPostMessage: "ServiceWorkerPostMessage", EnteredBackForwardCacheBeforeServiceWorkerHostAdded: "EnteredBackForwardCacheBeforeServiceWorkerHostAdded", RenderFrameHostReused_SameSite: "RenderFrameHostReused_SameSite", RenderFrameHostReused_CrossSite: "RenderFrameHostReused_CrossSite", ServiceWorkerClaim: "ServiceWorkerClaim", IgnoreEventAndEvict: "IgnoreEventAndEvict", HaveInnerContents: "HaveInnerContents", TimeoutPuttingInCache: "TimeoutPuttingInCache", BackForwardCacheDisabledByLowMemory: "BackForwardCacheDisabledByLowMemory", BackForwardCacheDisabledByCommandLine: "BackForwardCacheDisabledByCommandLine", NetworkRequestDatAPIpeDrainedAsBytesConsumer: "NetworkRequestDatapipeDrainedAsBytesConsumer", NetworkRequestRedirected: "NetworkRequestRedirected", NetworkRequestTimeout: "NetworkRequestTimeout", NetworkExceedsBufferLimit: "NetworkExceedsBufferLimit", NavigationCancelledWhileRestoring: "NavigationCancelledWhileRestoring", NotMostRecentNavigationEntry: "NotMostRecentNavigationEntry", BackForwardCacheDisabledForPrerender: "BackForwardCacheDisabledForPrerender", UserAgentOverrideDiffers: "UserAgentOverrideDiffers", ForegroundCacheLimit: "ForegroundCacheLimit", BrowsingInstanceNotSwapped: "BrowsingInstanceNotSwapped", BackForwardCacheDisabledForDelegate: "BackForwardCacheDisabledForDelegate", UnloadHandlerExistsInMainFrame: "UnloadHandlerExistsInMainFrame", UnloadHandlerExistsInSubFrame: "UnloadHandlerExistsInSubFrame", ServiceWorkerUnregistration: "ServiceWorkerUnregistration", CacheControlNoStore: "CacheControlNoStore", CacheControlNoStoreCookieModified: "CacheControlNoStoreCookieModified", CacheControlNoStoreHTTPOnlyCookieModified: "CacheControlNoStoreHTTPOnlyCookieModified", NoResponseHead: "NoResponseHead", Unknown: "Unknown", ActivationNavigationsDisallowedForBug1234857: "ActivationNavigationsDisallowedForBug1234857", ErrorDocument: "ErrorDocument", FencedFramesEmbedder: "FencedFramesEmbedder", WebSocket: "WebSocket", WebTransport: "WebTransport", WebRTC: "WebRTC", MainResourceHasCacheControlNoStore: "MainResourceHasCacheControlNoStore", MainResourceHasCacheControlNoCache: "MainResourceHasCacheControlNoCache", SubresourceHasCacheControlNoStore: "SubresourceHasCacheControlNoStore", SubresourceHasCacheControlNoCache: "SubresourceHasCacheControlNoCache", ContainsPlugins: "ContainsPlugins", DocumentLoaded: "DocumentLoaded", DedicatedWorkerOrWorklet: "DedicatedWorkerOrWorklet", OutstandingNetworkRequestOthers: "OutstandingNetworkRequestOthers", OutstandingIndexedDBTransaction: "OutstandingIndexedDBTransaction", RequestedNotificationsPermission: "RequestedNotificationsPermission", RequestedMIDIPermission: "RequestedMIDIPermission", RequestedAudioCapturePermission: "RequestedAudioCapturePermission", RequestedVideoCapturePermission: "RequestedVideoCapturePermission", RequestedBackForwardCacheBlockedSensors: "RequestedBackForwardCacheBlockedSensors", RequestedBackgroundWorkPermission: "RequestedBackgroundWorkPermission", BroadcastChannel: "BroadcastChannel", IndexedDBConnection: "IndexedDBConnection", WebXR: "WebXR", SharedWorker: "SharedWorker", WebLocks: "WebLocks", WebHID: "WebHID", WebShare: "WebShare", RequestedStorageAccessGrant: "RequestedStorageAccessGrant", WebNfc: "WebNfc", OutstandingNetworkRequestFetch: "OutstandingNetworkRequestFetch", OutstandingNetworkRequestXHR: "OutstandingNetworkRequestXHR", AppBanner: "AppBanner", Printing: "Printing", WebDatabase: "WebDatabase", PictureInPicture: "PictureInPicture", Portal: "Portal", SpeechRecognizer: "SpeechRecognizer", IdleManager: "IdleManager", PaymentManager: "PaymentManager", SpeechSynthesis: "SpeechSynthesis", KeyboardLock: "KeyboardLock", WebOTPService: "WebOTPService", OutstandingNetworkRequestDirectSocket: "OutstandingNetworkRequestDirectSocket", InjectedJavascript: "InjectedJavascript", InjectedStyleSheet: "InjectedStyleSheet", Dummy: "Dummy", ContentSecurityHandler: "ContentSecurityHandler", ContentWebAuthenticationAPI: "ContentWebAuthenticationAPI", ContentFileChooser: "ContentFileChooser", ContentSerial: "ContentSerial", ContentFileSystemAccess: "ContentFileSystemAccess", ContentMediaDevicesDispatcherHost: "ContentMediaDevicesDispatcherHost", ContentWebBluetooth: "ContentWebBluetooth", ContentWebUSB: "ContentWebUSB", ContentMediaSessionService: "ContentMediaSessionService", ContentScreenReader: "ContentScreenReader", EmbedderPopupBlockerTabHelper: "EmbedderPopupBlockerTabHelper", EmbedderSafeBrowsingTriggeredPopupBlocker: "EmbedderSafeBrowsingTriggeredPopupBlocker", EmbedderSafeBrowsingThreatDetails: "EmbedderSafeBrowsingThreatDetails", EmbedderAppBannerManager: "EmbedderAppBannerManager", EmbedderDomDistillerViewerSource: "EmbedderDomDistillerViewerSource", EmbedderDomDistillerSelfDeletingRequestDelegate: "EmbedderDomDistillerSelfDeletingRequestDelegate", EmbedderOomInterventionTabHelper: "EmbedderOomInterventionTabHelper", EmbedderOfflinePage: "EmbedderOfflinePage", EmbedderChromePasswordManagerClientBindCredentialManager: "EmbedderChromePasswordManagerClientBindCredentialManager", EmbedderPermissionRequestManager: "EmbedderPermissionRequestManager", EmbedderModalDialog: "EmbedderModalDialog", EmbedderExtensions: "EmbedderExtensions", EmbedderExtensionMessaging: "EmbedderExtensionMessaging", EmbedderExtensionMessagingForOpenPort: "EmbedderExtensionMessagingForOpenPort", EmbedderExtensionSentMessageToCachedFrame: "EmbedderExtensionSentMessageToCachedFrame"});
569
569
  inspectorBackend.registerEnum("Page.BackForwardCacheNotRestoredReasonType", {SupportPending: "SupportPending", PageSupportNeeded: "PageSupportNeeded", Circumstantial: "Circumstantial"});
570
- inspectorBackend.registerEnum("Page.PrerenderFinalStatus", {Activated: "Activated", Destroyed: "Destroyed", LowEndDevice: "LowEndDevice", CrossOriginRedirect: "CrossOriginRedirect", CrossOriginNavigation: "CrossOriginNavigation", InvalidSchemeRedirect: "InvalidSchemeRedirect", InvalidSchemeNavigation: "InvalidSchemeNavigation", InProgressNavigation: "InProgressNavigation", NavigationRequestBlockedByCsp: "NavigationRequestBlockedByCsp", MainFrameNavigation: "MainFrameNavigation", MojoBinderPolicy: "MojoBinderPolicy", RendererProcessCrashed: "RendererProcessCrashed", RendererProcessKilled: "RendererProcessKilled", Download: "Download", TriggerDestroyed: "TriggerDestroyed", NavigationNotCommitted: "NavigationNotCommitted", NavigationBadHttpStatus: "NavigationBadHttpStatus", ClientCertRequested: "ClientCertRequested", NavigationRequestNetworkError: "NavigationRequestNetworkError", MaxNumOfRunningPrerendersExceeded: "MaxNumOfRunningPrerendersExceeded", CancelAllHostsForTesting: "CancelAllHostsForTesting", DidFailLoad: "DidFailLoad", Stop: "Stop", SslCertificateError: "SslCertificateError", LoginAuthRequested: "LoginAuthRequested", UaChangeRequiresReload: "UaChangeRequiresReload", BlockedByClient: "BlockedByClient", AudioOutputDeviceRequested: "AudioOutputDeviceRequested", MixedContent: "MixedContent", TriggerBackgrounded: "TriggerBackgrounded", EmbedderTriggeredAndSameOriginRedirected: "EmbedderTriggeredAndSameOriginRedirected", EmbedderTriggeredAndCrossOriginRedirected: "EmbedderTriggeredAndCrossOriginRedirected", EmbedderTriggeredAndDestroyed: "EmbedderTriggeredAndDestroyed", MemoryLimitExceeded: "MemoryLimitExceeded", FailToGetMemoryUsage: "FailToGetMemoryUsage"});
570
+ inspectorBackend.registerEnum("Page.PrerenderFinalStatus", {Activated: "Activated", Destroyed: "Destroyed", LowEndDevice: "LowEndDevice", CrossOriginRedirect: "CrossOriginRedirect", CrossOriginNavigation: "CrossOriginNavigation", InvalidSchemeRedirect: "InvalidSchemeRedirect", InvalidSchemeNavigation: "InvalidSchemeNavigation", InProgressNavigation: "InProgressNavigation", NavigationRequestBlockedByCsp: "NavigationRequestBlockedByCsp", MainFrameNavigation: "MainFrameNavigation", MojoBinderPolicy: "MojoBinderPolicy", RendererProcessCrashed: "RendererProcessCrashed", RendererProcessKilled: "RendererProcessKilled", Download: "Download", TriggerDestroyed: "TriggerDestroyed", NavigationNotCommitted: "NavigationNotCommitted", NavigationBadHttpStatus: "NavigationBadHttpStatus", ClientCertRequested: "ClientCertRequested", NavigationRequestNetworkError: "NavigationRequestNetworkError", MaxNumOfRunningPrerendersExceeded: "MaxNumOfRunningPrerendersExceeded", CancelAllHostsForTesting: "CancelAllHostsForTesting", DidFailLoad: "DidFailLoad", Stop: "Stop", SslCertificateError: "SslCertificateError", LoginAuthRequested: "LoginAuthRequested", UaChangeRequiresReload: "UaChangeRequiresReload", BlockedByClient: "BlockedByClient", AudioOutputDeviceRequested: "AudioOutputDeviceRequested", MixedContent: "MixedContent", TriggerBackgrounded: "TriggerBackgrounded", EmbedderTriggeredAndSameOriginRedirected: "EmbedderTriggeredAndSameOriginRedirected", EmbedderTriggeredAndCrossOriginRedirected: "EmbedderTriggeredAndCrossOriginRedirected", MemoryLimitExceeded: "MemoryLimitExceeded", FailToGetMemoryUsage: "FailToGetMemoryUsage", DataSaverEnabled: "DataSaverEnabled"});
571
571
  inspectorBackend.registerEvent("Page.domContentEventFired", ["timestamp"]);
572
572
  inspectorBackend.registerEnum("Page.FileChooserOpenedEventMode", {SelectSingle: "selectSingle", SelectMultiple: "selectMultiple"});
573
573
  inspectorBackend.registerEvent("Page.fileChooserOpened", ["frameId", "mode", "backendNodeId"]);
@@ -90,10 +90,6 @@ export const generatedProperties = [
90
90
  "inherited": true,
91
91
  "name": "-webkit-highlight"
92
92
  },
93
- {
94
- "inherited": true,
95
- "name": "-webkit-hyphenate-character"
96
- },
97
93
  {
98
94
  "inherited": true,
99
95
  "keywords": [
@@ -1912,6 +1908,10 @@ export const generatedProperties = [
1912
1908
  ],
1913
1909
  "name": "height"
1914
1910
  },
1911
+ {
1912
+ "inherited": true,
1913
+ "name": "hyphenate-character"
1914
+ },
1915
1915
  {
1916
1916
  "inherited": true,
1917
1917
  "keywords": [
@@ -5591,6 +5591,10 @@ export const generatedAliasesFor = new Map([
5591
5591
  "-webkit-font-feature-settings",
5592
5592
  "font-feature-settings"
5593
5593
  ],
5594
+ [
5595
+ "-webkit-hyphenate-character",
5596
+ "hyphenate-character"
5597
+ ],
5594
5598
  [
5595
5599
  "-webkit-justify-content",
5596
5600
  "justify-content"
@@ -2135,6 +2135,11 @@ export namespace CSS {
2135
2135
  * The entire property range in the enclosing style declaration (if available).
2136
2136
  */
2137
2137
  range?: SourceRange;
2138
+ /**
2139
+ * Parsed longhand components of this property if it is a shorthand.
2140
+ * This field will be empty if the given property is not a shorthand.
2141
+ */
2142
+ longhandProperties?: CSSProperty[];
2138
2143
  }
2139
2144
 
2140
2145
  export const enum CSSMediaSource {
@@ -10377,6 +10382,7 @@ export namespace Page {
10377
10382
  StorageAccessAPI = 'storage-access-api',
10378
10383
  SyncXhr = 'sync-xhr',
10379
10384
  TrustTokenRedemption = 'trust-token-redemption',
10385
+ Unload = 'unload',
10380
10386
  Usb = 'usb',
10381
10387
  VerticalScroll = 'vertical-scroll',
10382
10388
  WebShare = 'web-share',
@@ -11154,9 +11160,9 @@ export namespace Page {
11154
11160
  TriggerBackgrounded = 'TriggerBackgrounded',
11155
11161
  EmbedderTriggeredAndSameOriginRedirected = 'EmbedderTriggeredAndSameOriginRedirected',
11156
11162
  EmbedderTriggeredAndCrossOriginRedirected = 'EmbedderTriggeredAndCrossOriginRedirected',
11157
- EmbedderTriggeredAndDestroyed = 'EmbedderTriggeredAndDestroyed',
11158
11163
  MemoryLimitExceeded = 'MemoryLimitExceeded',
11159
11164
  FailToGetMemoryUsage = 'FailToGetMemoryUsage',
11165
+ DataSaverEnabled = 'DataSaverEnabled',
11160
11166
  }
11161
11167
 
11162
11168
  export interface AddScriptToEvaluateOnLoadRequest {
@@ -622,19 +622,27 @@ export class NetworkPersistenceManager extends Common.ObjectWrapper.ObjectWrappe
622
622
  }
623
623
  }
624
624
 
625
- mergeHeaders(baseHeaders: Protocol.Fetch.HeaderEntry[], overrideHeaders: Protocol.Network.Headers):
625
+ mergeHeaders(baseHeaders: Protocol.Fetch.HeaderEntry[], overrideHeaders: Protocol.Fetch.HeaderEntry[]):
626
626
  Protocol.Fetch.HeaderEntry[] {
627
- const result: Protocol.Fetch.HeaderEntry[] = [];
628
- const headerMap = new Map<string, string>();
629
- for (const header of baseHeaders) {
630
- headerMap.set(header.name, header.value);
627
+ const headerMap = new Platform.MapUtilities.Multimap<string, string>();
628
+ for (const {name, value} of overrideHeaders) {
629
+ headerMap.set(name.toLowerCase(), value);
631
630
  }
632
- for (const [headerName, headerValue] of Object.entries(overrideHeaders)) {
633
- headerMap.set(headerName, headerValue);
631
+
632
+ const overriddenHeaderNames = new Set(headerMap.keysArray());
633
+ for (const {name, value} of baseHeaders) {
634
+ const lowerCaseName = name.toLowerCase();
635
+ if (!overriddenHeaderNames.has(lowerCaseName)) {
636
+ headerMap.set(lowerCaseName, value);
637
+ }
638
+ }
639
+
640
+ const result: Protocol.Fetch.HeaderEntry[] = [];
641
+ for (const headerName of headerMap.keysArray()) {
642
+ for (const headerValue of headerMap.get(headerName)) {
643
+ result.push({name: headerName, value: headerValue});
644
+ }
634
645
  }
635
- headerMap.forEach((headerValue, headerName) => {
636
- result.push({name: headerName, value: headerValue});
637
- });
638
646
  return result;
639
647
  }
640
648
 
@@ -766,20 +774,23 @@ export type EventTypes = {
766
774
 
767
775
  export interface HeaderOverride {
768
776
  applyTo: string;
769
- headers: Protocol.Network.Headers;
777
+ headers: Protocol.Fetch.HeaderEntry[];
770
778
  }
771
779
 
772
780
  interface HeaderOverrideWithRegex {
773
781
  applyToRegex: RegExp;
774
- headers: Protocol.Network.Headers;
782
+ headers: Protocol.Fetch.HeaderEntry[];
775
783
  }
776
784
 
777
785
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
778
786
  export function isHeaderOverride(arg: any): arg is HeaderOverride {
779
- if (!(arg && arg.applyTo && typeof (arg.applyTo === 'string') && arg.headers && Object.keys(arg.headers).length)) {
787
+ if (!(arg && arg.applyTo && typeof arg.applyTo === 'string' && arg.headers && arg.headers.length &&
788
+ Array.isArray(arg.headers))) {
780
789
  return false;
781
790
  }
782
- return Object.values(arg.headers).every(value => typeof value === 'string');
791
+ return arg.headers.every(
792
+ (header: Protocol.Fetch.HeaderEntry) =>
793
+ header.name && typeof header.name === 'string' && header.value && typeof header.value === 'string');
783
794
  }
784
795
 
785
796
  export function escapeRegex(pattern: string): string {
@@ -139,12 +139,6 @@ const UIStrings = {
139
139
  */
140
140
  EmbedderTriggeredAndCrossOriginRedirected:
141
141
  'Prerendering triggered by Chrome internal (e.g., Omnibox prerendering) is is canceled because the navigation is redirected to another cross-origin page.',
142
- /**
143
- *@description Description text for Prerender2 cancellation status EmbedderTriggeredAndDestroyed.
144
- */
145
- EmbedderTriggeredAndDestroyed:
146
- 'Prerendering triggered by Chrome internal (e.g., Omnibox prerendering) is is destroyed in the destructor.',
147
-
148
142
  /**
149
143
  *@description Description text for Prerender2 cancellation status MemoryLimitExceeded.
150
144
  */
@@ -154,6 +148,10 @@ const UIStrings = {
154
148
  *@description Description text for Prerender2 cancellation status FailToGetMemoryUsage.
155
149
  */
156
150
  FailToGetMemoryUsage: 'Fail to get memory usage',
151
+ /**
152
+ *@description Description text for Prerender2 cancellation status DataSaverEnabled.
153
+ */
154
+ DataSaverEnabled: 'Data saver enabled',
157
155
  };
158
156
 
159
157
  const str_ = i18n.i18n.registerUIStrings('panels/application/components/Prerender2.ts', UIStrings);
@@ -194,7 +192,7 @@ export const Prerender2ReasonDescription = {
194
192
  {name: i18nLazyString(UIStrings.EmbedderTriggeredAndSameOriginRedirected)},
195
193
  'EmbedderTriggeredAndCrossOriginRedirected':
196
194
  {name: i18nLazyString(UIStrings.EmbedderTriggeredAndCrossOriginRedirected)},
197
- 'EmbedderTriggeredAndDestroyed': {name: i18nLazyString(UIStrings.EmbedderTriggeredAndDestroyed)},
198
195
  'MemoryLimitExceeded': {name: i18nLazyString(UIStrings.MemoryLimitExceeded)},
199
196
  'FailToGetMemoryUsage': {name: i18nLazyString(UIStrings.FailToGetMemoryUsage)},
197
+ 'DataSaverEnabled': {name: i18nLazyString(UIStrings.DataSaverEnabled)},
200
198
  };
@@ -142,7 +142,7 @@ export class AlignContentValidator extends CSSRuleValidator {
142
142
  if (this.#isRuleValid(computedStyles)) {
143
143
  return;
144
144
  }
145
- const reasonPropertyDeclaration = buildPropertyText('flex-wrap');
145
+ const reasonPropertyDeclaration = buildPropertyDefinitionText('flex-wrap', 'nowrap');
146
146
  const affectedPropertyDeclarationCode = buildPropertyText('align-content');
147
147
 
148
148
  return new Hint(
@@ -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