chrome-devtools-frontend 1.0.1034999 → 1.0.1036501

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 (31) 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/entrypoints/main/MainImpl.ts +6 -5
  8. package/front_end/generated/InspectorBackendCommands.js +2 -2
  9. package/front_end/generated/SupportedCSSProperties.js +8 -4
  10. package/front_end/generated/protocol.ts +7 -1
  11. package/front_end/models/persistence/NetworkPersistenceManager.ts +25 -14
  12. package/front_end/panels/application/components/Prerender2.ts +5 -7
  13. package/front_end/panels/elements/CSSRuleValidator.ts +1 -1
  14. package/front_end/panels/elements/StylePropertiesSection.ts +12 -0
  15. package/front_end/panels/elements/StylePropertyTreeElement.ts +1 -1
  16. package/front_end/panels/elements/StylesSidebarPane.ts +1 -0
  17. package/front_end/panels/network/NetworkLogView.ts +13 -5
  18. package/front_end/panels/settings/SettingsScreen.ts +12 -0
  19. package/front_end/panels/settings/settingsScreen.css +6 -0
  20. package/front_end/panels/sources/NavigatorView.ts +0 -7
  21. package/front_end/panels/sources/ScopeChainSidebarPane.ts +4 -3
  22. package/front_end/panels/sources/SourcesNavigator.ts +0 -37
  23. package/front_end/panels/sources/SourcesPanel.ts +34 -22
  24. package/front_end/panels/sources/components/BreakpointsView.ts +206 -0
  25. package/front_end/panels/sources/components/HeadersView.ts +8 -41
  26. package/front_end/panels/sources/components/breakpointsView.css +95 -0
  27. package/front_end/panels/sources/components/components.ts +2 -0
  28. package/front_end/ui/components/linear_memory_inspector/LinearMemoryHighlightChipList.ts +11 -9
  29. package/front_end/ui/components/linear_memory_inspector/linearMemoryHighlightChipList.css +48 -30
  30. package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +2 -2
  31. 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
 
@@ -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(
@@ -298,6 +298,18 @@ export class StylePropertiesSection {
298
298
  this.parentsComputedStyles = parentsComputedStyles;
299
299
  }
300
300
 
301
+ updateAuthoringHint(): void {
302
+ let child = this.propertiesTreeOutline.firstChild();
303
+ while (child) {
304
+ if (child instanceof StylePropertyTreeElement) {
305
+ child.setComputedStyles(this.computedStyles);
306
+ child.setParentsComputedStyles(this.parentsComputedStyles);
307
+ child.updateAuthoringHint();
308
+ }
309
+ child = child.nextSibling;
310
+ }
311
+ }
312
+
301
313
  setSectionIdx(sectionIdx: number): void {
302
314
  this.sectionIdx = sectionIdx;
303
315
  this.onpopulate();
@@ -761,7 +761,7 @@ export class StylePropertyTreeElement extends UI.TreeOutline.TreeElement {
761
761
  }
762
762
  }
763
763
 
764
- private updateAuthoringHint(): void {
764
+ updateAuthoringHint(): void {
765
765
  if (!Root.Runtime.experiments.isEnabled(Root.Runtime.ExperimentName.CSS_AUTHORING_HINTS)) {
766
766
  return;
767
767
  }
@@ -785,6 +785,7 @@ export class StylesSidebarPane extends Common.ObjectWrapper.eventMixin<EventType
785
785
  for (const section of this.allSections()) {
786
786
  section.setComputedStyles(computedStyles);
787
787
  section.setParentsComputedStyles(parentsComputedStyles);
788
+ section.updateAuthoringHint();
788
789
  }
789
790
  }
790
791
 
@@ -1662,7 +1662,7 @@ export class NetworkLogView extends Common.ObjectWrapper.eventMixin<EventTypes,
1662
1662
  }
1663
1663
 
1664
1664
  private async copyCurlCommand(request: SDK.NetworkRequest.NetworkRequest, platform: string): Promise<void> {
1665
- const command = await this.generateCurlCommand(request, platform);
1665
+ const command = await NetworkLogView.generateCurlCommand(request, platform);
1666
1666
  Host.InspectorFrontendHost.InspectorFrontendHostInstance.copyText(command);
1667
1667
  }
1668
1668
 
@@ -2092,7 +2092,7 @@ export class NetworkLogView extends Common.ObjectWrapper.eventMixin<EventTypes,
2092
2092
  return commands.join(' ;\n');
2093
2093
  }
2094
2094
 
2095
- private async generateCurlCommand(request: SDK.NetworkRequest.NetworkRequest, platform: string): Promise<string> {
2095
+ static async generateCurlCommand(request: SDK.NetworkRequest.NetworkRequest, platform: string): Promise<string> {
2096
2096
  let command: string[] = [];
2097
2097
  // Most of these headers are derived from the URL and are automatically added by cURL.
2098
2098
  // The |Accept-Encoding| header is ignored to prevent decompression errors. crbug.com/1015321
@@ -2115,7 +2115,7 @@ export class NetworkLogView extends Common.ObjectWrapper.eventMixin<EventTypes,
2115
2115
  gets to MS Crt parser safely.
2116
2116
 
2117
2117
  The % character is special because MS Crt parser will try and look for
2118
- ENV variables and fill them in it's place. We cannot escape them with %
2118
+ ENV variables and fill them in its place. We cannot escape them with %
2119
2119
  and cannot escape them with ^ (because it's cmd.exe's escape not MS Crt
2120
2120
  parser); So we can get cmd.exe parser to escape the character after it,
2121
2121
  if it is followed by a valid beginning character of an ENV variable.
@@ -2191,7 +2191,14 @@ export class NetworkLogView extends Common.ObjectWrapper.eventMixin<EventTypes,
2191
2191
  if (ignoredHeaders.has(name.toLowerCase())) {
2192
2192
  continue;
2193
2193
  }
2194
- command.push('-H ' + escapeString(name + ': ' + header.value));
2194
+ if (header.value.trim()) {
2195
+ command.push('-H ' + escapeString(name + ': ' + header.value));
2196
+ } else {
2197
+ // A header passed with -H with no value or only whitespace as its
2198
+ // value tells curl to not set the header at all. To post an empty
2199
+ // header, you have to terminate it with a semicolon.
2200
+ command.push('-H ' + escapeString(name + ';'));
2201
+ }
2195
2202
  }
2196
2203
  command = command.concat(data);
2197
2204
  command.push('--compressed');
@@ -2205,7 +2212,8 @@ export class NetworkLogView extends Common.ObjectWrapper.eventMixin<EventTypes,
2205
2212
  private async generateAllCurlCommand(requests: SDK.NetworkRequest.NetworkRequest[], platform: string):
2206
2213
  Promise<string> {
2207
2214
  const nonBlobRequests = this.filterOutBlobRequests(requests);
2208
- const commands = await Promise.all(nonBlobRequests.map(request => this.generateCurlCommand(request, platform)));
2215
+ const commands =
2216
+ await Promise.all(nonBlobRequests.map(request => NetworkLogView.generateCurlCommand(request, platform)));
2209
2217
  if (platform === 'win') {
2210
2218
  return commands.join(' &\r\n');
2211
2219
  }
@@ -93,6 +93,10 @@ const UIStrings = {
93
93
  *@description Text that is usually a hyperlink to more documentation
94
94
  */
95
95
  learnMore: 'Learn more',
96
+ /**
97
+ *@description Text that is usually a hyperlink to a feedback form
98
+ */
99
+ sendFeedback: 'Send feedback',
96
100
  };
97
101
  const str_ = i18n.i18n.registerUIStrings('panels/settings/SettingsScreen.ts', UIStrings);
98
102
  const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
@@ -489,6 +493,14 @@ export class ExperimentsSettingsTab extends SettingsTab {
489
493
  p.appendChild(link);
490
494
  }
491
495
 
496
+ if (experiment.feedbackLink) {
497
+ const link = UI.XLink.XLink.create(experiment.feedbackLink);
498
+ link.textContent = i18nString(UIStrings.sendFeedback);
499
+ link.classList.add('feedback-link');
500
+
501
+ p.appendChild(link);
502
+ }
503
+
492
504
  return p;
493
505
  }
494
506
  }
@@ -199,6 +199,12 @@ label {
199
199
  color: var(--color-text-secondary);
200
200
  }
201
201
 
202
+ .settings-experiment .feedback-link {
203
+ color: var(--color-primary);
204
+ text-decoration-line: underline;
205
+ margin-left: 4px;
206
+ }
207
+
202
208
  @media (forced-colors: active) {
203
209
  .settings-window-title {
204
210
  color: canvastext;