chrome-devtools-frontend 1.0.1534717 → 1.0.1536371

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 (95) hide show
  1. package/docs/contributing/images/issues-nearestslo.png +0 -0
  2. package/docs/contributing/issues.md +32 -58
  3. package/eslint.config.mjs +1 -0
  4. package/front_end/core/common/Console.ts +1 -8
  5. package/front_end/core/common/ParsedURL.ts +10 -20
  6. package/front_end/core/common/SegmentedRange.ts +1 -2
  7. package/front_end/core/common/StringOutputStream.ts +1 -4
  8. package/front_end/core/host/InspectorFrontendHost.ts +6 -0
  9. package/front_end/core/host/UserMetrics.ts +5 -1
  10. package/front_end/core/i18n/i18nImpl.ts +0 -24
  11. package/front_end/core/protocol_client/CDPConnection.ts +53 -5
  12. package/front_end/core/protocol_client/protocol_client.ts +2 -0
  13. package/front_end/core/sdk/AnimationModel.ts +1 -2
  14. package/front_end/core/sdk/CSSMatchedStyles.ts +2 -2
  15. package/front_end/core/sdk/CSSModel.ts +1 -1
  16. package/front_end/core/sdk/CSSProperty.ts +3 -6
  17. package/front_end/core/sdk/CSSStyleDeclaration.ts +4 -4
  18. package/front_end/core/sdk/DebuggerModel.ts +1 -2
  19. package/front_end/core/sdk/EnhancedTracesParser.ts +4 -0
  20. package/front_end/core/sdk/SourceMap.ts +2 -3
  21. package/front_end/devtools_compatibility.js +32 -24
  22. package/front_end/entrypoints/node_app/NodeConnectionsPanel.ts +2 -1
  23. package/front_end/generated/InspectorBackendCommands.js +1 -2
  24. package/front_end/generated/SupportedCSSProperties.js +57 -0
  25. package/front_end/generated/protocol.ts +0 -27
  26. package/front_end/panels/accessibility/AccessibilityNodeView.ts +18 -17
  27. package/front_end/panels/accessibility/AccessibilitySidebarView.ts +9 -12
  28. package/front_end/panels/ai_assistance/PatchWidget.ts +39 -40
  29. package/front_end/panels/ai_assistance/components/ChatView.ts +5 -4
  30. package/front_end/panels/ai_assistance/components/ExploreWidget.ts +0 -2
  31. package/front_end/panels/application/AppManifestView.ts +7 -6
  32. package/front_end/panels/application/ApplicationPanelSidebar.ts +4 -4
  33. package/front_end/panels/application/OpenedWindowDetailsView.ts +6 -6
  34. package/front_end/panels/application/StorageView.ts +9 -8
  35. package/front_end/panels/application/components/BackForwardCacheView.ts +333 -314
  36. package/front_end/panels/application/components/ProtocolHandlersView.ts +3 -2
  37. package/front_end/panels/application/preloading/components/PreloadingDisabledInfobar.ts +2 -1
  38. package/front_end/panels/autofill/AutofillView.ts +2 -3
  39. package/front_end/panels/browser_debugger/ObjectEventListenersSidebarPane.ts +8 -8
  40. package/front_end/panels/changes/CombinedDiffView.ts +13 -14
  41. package/front_end/panels/common/BadgeNotification.ts +2 -1
  42. package/front_end/panels/common/GdpSignUpDialog.ts +2 -1
  43. package/front_end/panels/console/ConsoleInsightTeaser.ts +13 -2
  44. package/front_end/panels/console/ConsolePinPane.ts +12 -7
  45. package/front_end/panels/console/ConsoleView.ts +1 -0
  46. package/front_end/panels/console/consoleView.css +0 -1
  47. package/front_end/panels/developer_resources/DeveloperResourcesView.ts +9 -9
  48. package/front_end/panels/elements/ComputedStyleWidget.ts +7 -7
  49. package/front_end/panels/elements/ElementsTreeOutline.ts +1 -1
  50. package/front_end/panels/elements/EventListenersWidget.ts +9 -9
  51. package/front_end/panels/elements/NodeStackTraceWidget.ts +6 -6
  52. package/front_end/panels/elements/PlatformFontsWidget.ts +5 -5
  53. package/front_end/panels/elements/PropertiesWidget.ts +8 -8
  54. package/front_end/panels/layer_viewer/Layers3DView.ts +2 -1
  55. package/front_end/panels/layer_viewer/PaintProfilerView.ts +3 -3
  56. package/front_end/panels/network/RequestCookiesView.ts +2 -1
  57. package/front_end/panels/network/RequestTimingView.ts +2 -1
  58. package/front_end/panels/network/components/DirectSocketConnectionView.ts +4 -6
  59. package/front_end/panels/recorder/RecorderController.ts +34 -23
  60. package/front_end/panels/recorder/components/CreateRecordingView.ts +249 -240
  61. package/front_end/panels/security/CookieControlsView.ts +74 -67
  62. package/front_end/panels/security/CookieReportView.ts +18 -16
  63. package/front_end/panels/security/IPProtectionView.ts +1 -2
  64. package/front_end/panels/security/SecurityPanel.ts +19 -19
  65. package/front_end/panels/settings/AISettingsTab.ts +2 -1
  66. package/front_end/panels/settings/KeybindsSettingsTab.ts +6 -0
  67. package/front_end/panels/settings/components/SyncSection.ts +2 -1
  68. package/front_end/panels/sources/DebuggerPausedMessage.ts +4 -3
  69. package/front_end/panels/sources/ResourceOriginPlugin.ts +3 -2
  70. package/front_end/panels/sources/SourcesNavigator.ts +2 -1
  71. package/front_end/panels/sources/TabbedEditorContainer.ts +3 -2
  72. package/front_end/panels/sources/WatchExpressionsSidebarPane.ts +9 -9
  73. package/front_end/panels/timeline/TimelineSelectorStatsView.ts +36 -36
  74. package/front_end/panels/timeline/TimelineUIUtils.ts +3 -2
  75. package/front_end/panels/timeline/components/DetailsView.ts +5 -4
  76. package/front_end/panels/timeline/components/FieldSettingsDialog.ts +2 -1
  77. package/front_end/panels/timeline/components/LiveMetricsView.ts +5 -4
  78. package/front_end/panels/timeline/components/MetricCompareStrings.ts +25 -24
  79. package/front_end/panels/timeline/components/SidebarAnnotationsTab.ts +1 -2
  80. package/front_end/panels/timeline/components/insights/LCPDiscovery.ts +2 -1
  81. package/front_end/third_party/chromium/README.chromium +1 -1
  82. package/front_end/ui/components/docs/tooltip/basic.ts +1 -1
  83. package/front_end/ui/components/tooltips/Tooltip.ts +32 -17
  84. package/front_end/ui/i18n/i18n.ts +31 -0
  85. package/front_end/ui/legacy/SoftDropDown.ts +1 -12
  86. package/front_end/ui/legacy/ViewManager.ts +2 -4
  87. package/front_end/ui/legacy/Widget.ts +33 -17
  88. package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +2 -1
  89. package/front_end/ui/legacy/legacy.ts +0 -2
  90. package/front_end/ui/visual_logging/KnownContextValues.ts +5 -0
  91. package/mcp/mcp.ts +1 -0
  92. package/package.json +1 -1
  93. package/front_end/ui/components/docs/recorder_create_recording_view/basic.html +0 -20
  94. package/front_end/ui/components/docs/recorder_create_recording_view/basic.ts +0 -27
  95. package/front_end/ui/legacy/ThrottledWidget.ts +0 -48
@@ -7,8 +7,13 @@
7
7
  // https://crsrc.org/c/third_party/blink/renderer/controller/dev_tools_frontend_impl.cc;l=107
8
8
  (window => {
9
9
  /**
10
+ * A function that tries to check the remotely connected instance
11
+ * major version. You should check against this to provide
12
+ * forward and backwards compatibility.
13
+ *
10
14
  * @returns {number|null}
11
15
  */
16
+
12
17
  function getRemoteMajorVersion() {
13
18
  try {
14
19
  const remoteVersion = new URLSearchParams(window.location.search).get('remoteVersion');
@@ -97,7 +102,9 @@
97
102
  }
98
103
 
99
104
  /**
100
- * @param method
105
+ * @typedef {import('./core/host/InspectorFrontendHostAPI.js').Events} Events
106
+ * @typedef {import('./core/host/InspectorFrontendHost.js').InspectorFrontendAPIImplMethods} Methods
107
+ * @param {`${Events|Methods}`} method
101
108
  * @param args
102
109
  */
103
110
  _dispatchOnInspectorFrontendAPI(method, args) {
@@ -114,7 +121,7 @@
114
121
  // API methods below this line --------------------------------------------
115
122
 
116
123
  /**
117
- * @param extensions {ExtensionDescriptor[]}
124
+ * @param {ExtensionDescriptor[]} extensions
118
125
  */
119
126
  addExtensions(extensions) {
120
127
  // The addExtensions command is sent as the onload event happens for
@@ -128,7 +135,7 @@
128
135
  }
129
136
 
130
137
  /**
131
- * @param forbiddenOrigins {string[]}
138
+ * @param {string[]} forbiddenOrigins
132
139
  */
133
140
  setOriginsForbiddenForExtensions(forbiddenOrigins) {
134
141
  this._originsForbiddenForExtensions = forbiddenOrigins;
@@ -142,14 +149,14 @@
142
149
  }
143
150
 
144
151
  /**
145
- * @param url {string}
152
+ * @param {string} url
146
153
  */
147
154
  appendedToURL(url) {
148
155
  this._dispatchOnInspectorFrontendAPI('appendedToURL', [url]);
149
156
  }
150
157
 
151
158
  /**
152
- * @param url {string}
159
+ * @param {string} url
153
160
  */
154
161
  canceledSaveURL(url) {
155
162
  this._dispatchOnInspectorFrontendAPI('canceledSaveURL', [url]);
@@ -167,7 +174,7 @@
167
174
  }
168
175
 
169
176
  /**
170
- * @param count
177
+ * @param {number} count
171
178
  */
172
179
  deviceCountUpdated(count) {
173
180
  this._dispatchOnInspectorFrontendAPI('deviceCountUpdated', [count]);
@@ -287,7 +294,7 @@
287
294
  }
288
295
 
289
296
  /**
290
- * @param callback {(param: object) => unknown}
297
+ * @param {(param: object) => unknown} callback
291
298
  */
292
299
  setAddExtensionCallback(callback) {
293
300
  this._addExtensionCallback = callback;
@@ -298,7 +305,7 @@
298
305
  }
299
306
 
300
307
  /**
301
- * @param hard {boolean}
308
+ * @param {boolean} hard
302
309
  */
303
310
  reloadInspectedPage(hard) {
304
311
  this._dispatchOnInspectorFrontendAPI('reloadInspectedPage', [hard]);
@@ -335,7 +342,7 @@
335
342
  }
336
343
 
337
344
  /**
338
- * @param tabId {string}
345
+ * @param {string} tabId
339
346
  */
340
347
  setInspectedTabId(tabId) {
341
348
  this._inspectedTabIdValue = tabId;
@@ -344,7 +351,7 @@
344
351
  }
345
352
 
346
353
  /**
347
- * @param targetId {string}
354
+ * @param {string} targetId
348
355
  */
349
356
  setInitialTargetId(targetId) {
350
357
  this._setInitialTargetId(targetId);
@@ -358,30 +365,30 @@
358
365
  }
359
366
 
360
367
  /**
361
- * @param useSoftMenu {boolean}
368
+ * @param {boolean} useSoftMenu
362
369
  */
363
370
  setUseSoftMenu(useSoftMenu) {
364
371
  this._dispatchOnInspectorFrontendAPI('setUseSoftMenu', [useSoftMenu]);
365
372
  }
366
373
 
367
374
  /**
368
- * @param panelName {string}
375
+ * @param {string} panelName
369
376
  */
370
377
  showPanel(panelName) {
371
378
  this._dispatchOnInspectorFrontendAPI('showPanel', [panelName]);
372
379
  }
373
380
 
374
381
  /**
375
- * @param id {number}
376
- * @param chunk {string}
377
- * @param encoded {boolean}
382
+ * @param {number} id
383
+ * @param {string} chunk
384
+ * @param {boolean} encoded
378
385
  */
379
386
  streamWrite(id, chunk, encoded) {
380
387
  this._dispatchOnInspectorFrontendAPI('streamWrite', [id, encoded ? this._decodeBase64(chunk) : chunk]);
381
388
  }
382
389
 
383
390
  /**
384
- * @param chunk {string}
391
+ * @param {string} chunk
385
392
  * @returns {string}
386
393
  */
387
394
  _decodeBase64(chunk) {
@@ -516,7 +523,7 @@
516
523
 
517
524
  /**
518
525
  * @param trigger
519
- * @param callback {(param: object) => unknown}
526
+ * @param {(param: object) => unknown} callback
520
527
  */
521
528
  showSurvey(trigger, callback) {
522
529
  DevToolsAPI.sendMessageToEmbedder('showSurvey', [trigger], callback);
@@ -524,7 +531,7 @@
524
531
 
525
532
  /**
526
533
  * @param trigger
527
- * @param callback {(param: object) => unknown}
534
+ * @param {(param: object) => unknown} callback
528
535
  */
529
536
  canShowSurvey(trigger, callback) {
530
537
  DevToolsAPI.sendMessageToEmbedder('canShowSurvey', [trigger], callback);
@@ -546,7 +553,7 @@
546
553
  * @param url
547
554
  * @param headers
548
555
  * @param streamId
549
- * @param callback {(param: object) => unknown}
556
+ * @param {(param: object) => unknown} callback
550
557
  */
551
558
  loadNetworkResource(url, headers, streamId, callback) {
552
559
  DevToolsAPI.sendMessageToEmbedder('loadNetworkResource', [url, headers, streamId], callback);
@@ -561,7 +568,7 @@
561
568
  }
562
569
 
563
570
  /**
564
- * @param callback {(param: object) => unknown}
571
+ * @param {(param: object) => unknown} callback
565
572
  */
566
573
  getPreferences(callback) {
567
574
  DevToolsAPI.sendMessageToEmbedder('getPreferences', [], callback);
@@ -569,7 +576,7 @@
569
576
 
570
577
  /**
571
578
  * @param name
572
- * @param callback {(param: object) => unknown}
579
+ * @param {(param: object) => unknown} callback
573
580
  */
574
581
  getPreference(name, callback) {
575
582
  DevToolsAPI.sendMessageToEmbedder('getPreference', [name], callback);
@@ -709,9 +716,10 @@
709
716
  }
710
717
 
711
718
  /**
712
- * @param url
719
+ * @param {string} _url
713
720
  */
714
- close(url) {
721
+ close(_url) {
722
+ // This is required when InspectorFrontendHostStub is used
715
723
  }
716
724
 
717
725
  /**
@@ -1136,7 +1144,7 @@
1136
1144
  ]);
1137
1145
 
1138
1146
  /**
1139
- * @param keyCode {number}
1147
+ * @param {number} keyCode
1140
1148
  * @returns
1141
1149
  */
1142
1150
  function keyCodeToKeyIdentifier(keyCode) {
@@ -7,6 +7,7 @@ import type * as Common from '../../core/common/common.js';
7
7
  import * as Host from '../../core/host/host.js';
8
8
  import * as i18n from '../../core/i18n/i18n.js';
9
9
  import * as Buttons from '../../ui/components/buttons/buttons.js';
10
+ import * as uiI18n from '../../ui/i18n/i18n.js';
10
11
  import * as UI from '../../ui/legacy/legacy.js';
11
12
 
12
13
  import nodeConnectionsPanelStyles from './nodeConnectionsPanel.css.js';
@@ -97,7 +98,7 @@ export class NodeConnectionsView extends UI.Widget.VBox implements UI.ListWidget
97
98
  'https://nodejs.org/en/docs/inspector/', i18nString(UIStrings.nodejsDebuggingGuide), undefined, undefined,
98
99
  'node-js-debugging');
99
100
  networkDiscoveryFooter.appendChild(
100
- i18n.i18n.getFormatLocalizedString(str_, UIStrings.specifyNetworkEndpointAnd, {PH1: documentationLink}));
101
+ uiI18n.getFormatLocalizedString(str_, UIStrings.specifyNetworkEndpointAnd, {PH1: documentationLink}));
101
102
 
102
103
  this.#list = new UI.ListWidget.ListWidget(this);
103
104
  this.#list.registerRequiredCSS(nodeConnectionsPanelStyles);
@@ -1340,8 +1340,7 @@ inspectorBackend.registerType("SystemInfo.GPUDevice", [{"name": "vendorId", "typ
1340
1340
  inspectorBackend.registerType("SystemInfo.Size", [{"name": "width", "type": "number", "optional": false, "description": "Width in pixels.", "typeRef": null}, {"name": "height", "type": "number", "optional": false, "description": "Height in pixels.", "typeRef": null}]);
1341
1341
  inspectorBackend.registerType("SystemInfo.VideoDecodeAcceleratorCapability", [{"name": "profile", "type": "string", "optional": false, "description": "Video codec profile that is supported, e.g. VP9 Profile 2.", "typeRef": null}, {"name": "maxResolution", "type": "object", "optional": false, "description": "Maximum video dimensions in pixels supported for this |profile|.", "typeRef": "SystemInfo.Size"}, {"name": "minResolution", "type": "object", "optional": false, "description": "Minimum video dimensions in pixels supported for this |profile|.", "typeRef": "SystemInfo.Size"}]);
1342
1342
  inspectorBackend.registerType("SystemInfo.VideoEncodeAcceleratorCapability", [{"name": "profile", "type": "string", "optional": false, "description": "Video codec profile that is supported, e.g H264 Main.", "typeRef": null}, {"name": "maxResolution", "type": "object", "optional": false, "description": "Maximum video dimensions in pixels supported for this |profile|.", "typeRef": "SystemInfo.Size"}, {"name": "maxFramerateNumerator", "type": "number", "optional": false, "description": "Maximum encoding framerate in frames per second supported for this |profile|, as fraction's numerator and denominator, e.g. 24/1 fps, 24000/1001 fps, etc.", "typeRef": null}, {"name": "maxFramerateDenominator", "type": "number", "optional": false, "description": "", "typeRef": null}]);
1343
- inspectorBackend.registerType("SystemInfo.ImageDecodeAcceleratorCapability", [{"name": "imageType", "type": "string", "optional": false, "description": "Image coded, e.g. Jpeg.", "typeRef": "SystemInfo.ImageType"}, {"name": "maxDimensions", "type": "object", "optional": false, "description": "Maximum supported dimensions of the image in pixels.", "typeRef": "SystemInfo.Size"}, {"name": "minDimensions", "type": "object", "optional": false, "description": "Minimum supported dimensions of the image in pixels.", "typeRef": "SystemInfo.Size"}, {"name": "subsamplings", "type": "array", "optional": false, "description": "Optional array of supported subsampling formats, e.g. 4:2:0, if known.", "typeRef": "SystemInfo.SubsamplingFormat"}]);
1344
- inspectorBackend.registerType("SystemInfo.GPUInfo", [{"name": "devices", "type": "array", "optional": false, "description": "The graphics devices on the system. Element 0 is the primary GPU.", "typeRef": "SystemInfo.GPUDevice"}, {"name": "auxAttributes", "type": "object", "optional": true, "description": "An optional dictionary of additional GPU related attributes.", "typeRef": null}, {"name": "featureStatus", "type": "object", "optional": true, "description": "An optional dictionary of graphics features and their status.", "typeRef": null}, {"name": "driverBugWorkarounds", "type": "array", "optional": false, "description": "An optional array of GPU driver bug workarounds.", "typeRef": "string"}, {"name": "videoDecoding", "type": "array", "optional": false, "description": "Supported accelerated video decoding capabilities.", "typeRef": "SystemInfo.VideoDecodeAcceleratorCapability"}, {"name": "videoEncoding", "type": "array", "optional": false, "description": "Supported accelerated video encoding capabilities.", "typeRef": "SystemInfo.VideoEncodeAcceleratorCapability"}, {"name": "imageDecoding", "type": "array", "optional": false, "description": "Supported accelerated image decoding capabilities.", "typeRef": "SystemInfo.ImageDecodeAcceleratorCapability"}]);
1343
+ inspectorBackend.registerType("SystemInfo.GPUInfo", [{"name": "devices", "type": "array", "optional": false, "description": "The graphics devices on the system. Element 0 is the primary GPU.", "typeRef": "SystemInfo.GPUDevice"}, {"name": "auxAttributes", "type": "object", "optional": true, "description": "An optional dictionary of additional GPU related attributes.", "typeRef": null}, {"name": "featureStatus", "type": "object", "optional": true, "description": "An optional dictionary of graphics features and their status.", "typeRef": null}, {"name": "driverBugWorkarounds", "type": "array", "optional": false, "description": "An optional array of GPU driver bug workarounds.", "typeRef": "string"}, {"name": "videoDecoding", "type": "array", "optional": false, "description": "Supported accelerated video decoding capabilities.", "typeRef": "SystemInfo.VideoDecodeAcceleratorCapability"}, {"name": "videoEncoding", "type": "array", "optional": false, "description": "Supported accelerated video encoding capabilities.", "typeRef": "SystemInfo.VideoEncodeAcceleratorCapability"}]);
1345
1344
  inspectorBackend.registerType("SystemInfo.ProcessInfo", [{"name": "type", "type": "string", "optional": false, "description": "Specifies process type.", "typeRef": null}, {"name": "id", "type": "number", "optional": false, "description": "Specifies process id.", "typeRef": null}, {"name": "cpuTime", "type": "number", "optional": false, "description": "Specifies cumulative CPU usage in seconds across all threads of the process since the process start.", "typeRef": null}]);
1346
1345
 
1347
1346
  // Target.
@@ -421,6 +421,7 @@ export const generatedProperties = [
421
421
  "column-rule-color",
422
422
  "column-rule-outset",
423
423
  "column-rule-style",
424
+ "column-rule-visibility-items",
424
425
  "column-rule-width",
425
426
  "column-span",
426
427
  "column-width",
@@ -639,6 +640,7 @@ export const generatedProperties = [
639
640
  "row-rule-color",
640
641
  "row-rule-outset",
641
642
  "row-rule-style",
643
+ "row-rule-visibility-items",
642
644
  "row-rule-width",
643
645
  "ruby-align",
644
646
  "ruby-overhang",
@@ -720,6 +722,7 @@ export const generatedProperties = [
720
722
  "text-emphasis-style",
721
723
  "text-grow",
722
724
  "text-indent",
725
+ "text-justify",
723
726
  "text-orientation",
724
727
  "text-overflow",
725
728
  "text-rendering",
@@ -1736,6 +1739,16 @@ export const generatedProperties = [
1736
1739
  ],
1737
1740
  "name": "column-rule-style"
1738
1741
  },
1742
+ {
1743
+ "inherited": false,
1744
+ "keywords": [
1745
+ "all",
1746
+ "around",
1747
+ "between",
1748
+ "none"
1749
+ ],
1750
+ "name": "column-rule-visibility-items"
1751
+ },
1739
1752
  {
1740
1753
  "keywords": [
1741
1754
  "thin",
@@ -3714,6 +3727,16 @@ export const generatedProperties = [
3714
3727
  ],
3715
3728
  "name": "row-rule-style"
3716
3729
  },
3730
+ {
3731
+ "inherited": false,
3732
+ "keywords": [
3733
+ "all",
3734
+ "around",
3735
+ "between",
3736
+ "none"
3737
+ ],
3738
+ "name": "row-rule-visibility-items"
3739
+ },
3717
3740
  {
3718
3741
  "keywords": [
3719
3742
  "thin",
@@ -4321,6 +4344,16 @@ export const generatedProperties = [
4321
4344
  "inherited": true,
4322
4345
  "name": "text-indent"
4323
4346
  },
4347
+ {
4348
+ "inherited": true,
4349
+ "keywords": [
4350
+ "auto",
4351
+ "none",
4352
+ "inter-word",
4353
+ "inter-character"
4354
+ ],
4355
+ "name": "text-justify"
4356
+ },
4324
4357
  {
4325
4358
  "inherited": true,
4326
4359
  "keywords": [
@@ -5364,6 +5397,14 @@ export const generatedPropertyValues = {
5364
5397
  "double"
5365
5398
  ]
5366
5399
  },
5400
+ "column-rule-visibility-items": {
5401
+ "values": [
5402
+ "all",
5403
+ "around",
5404
+ "between",
5405
+ "none"
5406
+ ]
5407
+ },
5367
5408
  "column-rule-width": {
5368
5409
  "values": [
5369
5410
  "thin",
@@ -6480,6 +6521,14 @@ export const generatedPropertyValues = {
6480
6521
  "double"
6481
6522
  ]
6482
6523
  },
6524
+ "row-rule-visibility-items": {
6525
+ "values": [
6526
+ "all",
6527
+ "around",
6528
+ "between",
6529
+ "none"
6530
+ ]
6531
+ },
6483
6532
  "row-rule-width": {
6484
6533
  "values": [
6485
6534
  "thin",
@@ -6773,6 +6822,14 @@ export const generatedPropertyValues = {
6773
6822
  "currentcolor"
6774
6823
  ]
6775
6824
  },
6825
+ "text-justify": {
6826
+ "values": [
6827
+ "auto",
6828
+ "none",
6829
+ "inter-word",
6830
+ "inter-character"
6831
+ ]
6832
+ },
6776
6833
  "text-orientation": {
6777
6834
  "values": [
6778
6835
  "sideways",
@@ -18029,29 +18029,6 @@ export namespace SystemInfo {
18029
18029
  Unknown = 'unknown',
18030
18030
  }
18031
18031
 
18032
- /**
18033
- * Describes a supported image decoding profile with its associated minimum and
18034
- * maximum resolutions and subsampling.
18035
- */
18036
- export interface ImageDecodeAcceleratorCapability {
18037
- /**
18038
- * Image coded, e.g. Jpeg.
18039
- */
18040
- imageType: ImageType;
18041
- /**
18042
- * Maximum supported dimensions of the image in pixels.
18043
- */
18044
- maxDimensions: Size;
18045
- /**
18046
- * Minimum supported dimensions of the image in pixels.
18047
- */
18048
- minDimensions: Size;
18049
- /**
18050
- * Optional array of supported subsampling formats, e.g. 4:2:0, if known.
18051
- */
18052
- subsamplings: SubsamplingFormat[];
18053
- }
18054
-
18055
18032
  /**
18056
18033
  * Provides information about the GPU(s) on the system.
18057
18034
  */
@@ -18080,10 +18057,6 @@ export namespace SystemInfo {
18080
18057
  * Supported accelerated video encoding capabilities.
18081
18058
  */
18082
18059
  videoEncoding: VideoEncodeAcceleratorCapability[];
18083
- /**
18084
- * Supported accelerated image decoding capabilities.
18085
- */
18086
- imageDecoding: ImageDecodeAcceleratorCapability[];
18087
18060
  }
18088
18061
 
18089
18062
  /**
@@ -7,6 +7,7 @@ import * as Common from '../../core/common/common.js';
7
7
  import * as i18n from '../../core/i18n/i18n.js';
8
8
  import * as SDK from '../../core/sdk/sdk.js';
9
9
  import * as Protocol from '../../generated/protocol.js';
10
+ import * as uiI18n from '../../ui/i18n/i18n.js';
10
11
  import * as UI from '../../ui/legacy/legacy.js';
11
12
  import * as VisualLogging from '../../ui/visual_logging/visual_logging.js';
12
13
 
@@ -626,65 +627,65 @@ export class AXNodeIgnoredReasonTreeElement extends AXNodePropertyTreeElement {
626
627
  let reasonElement: Element|null = null;
627
628
  switch (reason) {
628
629
  case 'activeModalDialog':
629
- reasonElement = i18n.i18n.getFormatLocalizedString(str_, UIStrings.elementIsHiddenBy, {});
630
+ reasonElement = uiI18n.getFormatLocalizedString(str_, UIStrings.elementIsHiddenBy, {});
630
631
  break;
631
632
  case 'hiddenByChildTree':
632
- reasonElement = i18n.i18n.getFormatLocalizedString(str_, UIStrings.elementIsHiddenByChildTree, {});
633
+ reasonElement = uiI18n.getFormatLocalizedString(str_, UIStrings.elementIsHiddenByChildTree, {});
633
634
  break;
634
635
  case 'ancestorIsLeafNode':
635
- reasonElement = i18n.i18n.getFormatLocalizedString(str_, UIStrings.ancestorChildrenAreAll, {});
636
+ reasonElement = uiI18n.getFormatLocalizedString(str_, UIStrings.ancestorChildrenAreAll, {});
636
637
  break;
637
638
  case 'ariaHiddenElement': {
638
639
  const ariaHiddenSpan = document.createElement('span', {is: 'source-code'}).textContent = 'aria-hidden';
639
- reasonElement = i18n.i18n.getFormatLocalizedString(str_, UIStrings.elementIsPlaceholder, {PH1: ariaHiddenSpan});
640
+ reasonElement = uiI18n.getFormatLocalizedString(str_, UIStrings.elementIsPlaceholder, {PH1: ariaHiddenSpan});
640
641
  break;
641
642
  }
642
643
  case 'ariaHiddenSubtree': {
643
644
  const ariaHiddenSpan = document.createElement('span', {is: 'source-code'}).textContent = 'aria-hidden';
644
645
  const trueSpan = document.createElement('span', {is: 'source-code'}).textContent = 'true';
645
- reasonElement = i18n.i18n.getFormatLocalizedString(
646
+ reasonElement = uiI18n.getFormatLocalizedString(
646
647
  str_, UIStrings.placeholderIsPlaceholderOnAncestor, {PH1: ariaHiddenSpan, PH2: trueSpan});
647
648
  break;
648
649
  }
649
650
  case 'emptyAlt':
650
- reasonElement = i18n.i18n.getFormatLocalizedString(str_, UIStrings.elementHasEmptyAltText, {});
651
+ reasonElement = uiI18n.getFormatLocalizedString(str_, UIStrings.elementHasEmptyAltText, {});
651
652
  break;
652
653
  case 'emptyText':
653
- reasonElement = i18n.i18n.getFormatLocalizedString(str_, UIStrings.noTextContent, {});
654
+ reasonElement = uiI18n.getFormatLocalizedString(str_, UIStrings.noTextContent, {});
654
655
  break;
655
656
  case 'inertElement':
656
- reasonElement = i18n.i18n.getFormatLocalizedString(str_, UIStrings.elementIsInert, {});
657
+ reasonElement = uiI18n.getFormatLocalizedString(str_, UIStrings.elementIsInert, {});
657
658
  break;
658
659
  case 'inertSubtree':
659
- reasonElement = i18n.i18n.getFormatLocalizedString(str_, UIStrings.elementIsInAnInertSubTree, {});
660
+ reasonElement = uiI18n.getFormatLocalizedString(str_, UIStrings.elementIsInAnInertSubTree, {});
660
661
  break;
661
662
  case 'inheritsPresentation':
662
- reasonElement = i18n.i18n.getFormatLocalizedString(str_, UIStrings.elementsInheritsPresentational, {});
663
+ reasonElement = uiI18n.getFormatLocalizedString(str_, UIStrings.elementsInheritsPresentational, {});
663
664
  break;
664
665
  case 'labelContainer':
665
- reasonElement = i18n.i18n.getFormatLocalizedString(str_, UIStrings.partOfLabelElement, {});
666
+ reasonElement = uiI18n.getFormatLocalizedString(str_, UIStrings.partOfLabelElement, {});
666
667
  break;
667
668
  case 'labelFor':
668
- reasonElement = i18n.i18n.getFormatLocalizedString(str_, UIStrings.labelFor, {});
669
+ reasonElement = uiI18n.getFormatLocalizedString(str_, UIStrings.labelFor, {});
669
670
  break;
670
671
  case 'notRendered':
671
- reasonElement = i18n.i18n.getFormatLocalizedString(str_, UIStrings.elementIsNotRendered, {});
672
+ reasonElement = uiI18n.getFormatLocalizedString(str_, UIStrings.elementIsNotRendered, {});
672
673
  break;
673
674
  case 'notVisible':
674
- reasonElement = i18n.i18n.getFormatLocalizedString(str_, UIStrings.elementIsNotVisible, {});
675
+ reasonElement = uiI18n.getFormatLocalizedString(str_, UIStrings.elementIsNotVisible, {});
675
676
  break;
676
677
  case 'presentationalRole': {
677
678
  const role = axNode?.role()?.value || '';
678
679
  const rolePresentationSpan = document.createElement('span', {is: 'source-code'}).textContent = 'role=' + role;
679
680
  reasonElement =
680
- i18n.i18n.getFormatLocalizedString(str_, UIStrings.elementHasPlaceholder, {PH1: rolePresentationSpan});
681
+ uiI18n.getFormatLocalizedString(str_, UIStrings.elementHasPlaceholder, {PH1: rolePresentationSpan});
681
682
  break;
682
683
  }
683
684
  case 'probablyPresentational':
684
- reasonElement = i18n.i18n.getFormatLocalizedString(str_, UIStrings.elementIsPresentational, {});
685
+ reasonElement = uiI18n.getFormatLocalizedString(str_, UIStrings.elementIsPresentational, {});
685
686
  break;
686
687
  case 'uninteresting':
687
- reasonElement = i18n.i18n.getFormatLocalizedString(str_, UIStrings.elementNotInteresting, {});
688
+ reasonElement = uiI18n.getFormatLocalizedString(str_, UIStrings.elementNotInteresting, {});
688
689
  break;
689
690
  }
690
691
  if (reasonElement) {
@@ -15,7 +15,7 @@ import {SourceOrderPane} from './SourceOrderView.js';
15
15
 
16
16
  let accessibilitySidebarViewInstance: AccessibilitySidebarView;
17
17
 
18
- export class AccessibilitySidebarView extends UI.ThrottledWidget.ThrottledWidget {
18
+ export class AccessibilitySidebarView extends UI.Widget.VBox {
19
19
  #node: SDK.DOMModel.DOMNode|null;
20
20
  #axNode: SDK.AccessibilityModel.AccessibilityNode|null;
21
21
  private skipNextPullNode: boolean;
@@ -24,8 +24,8 @@ export class AccessibilitySidebarView extends UI.ThrottledWidget.ThrottledWidget
24
24
  private readonly ariaSubPane: ARIAAttributesPane;
25
25
  private readonly axNodeSubPane: AXNodeSubPane;
26
26
  private readonly sourceOrderSubPane: SourceOrderPane;
27
- private constructor(throttlingTimeout?: number) {
28
- super(false /* useShadowDom */, throttlingTimeout);
27
+ private constructor() {
28
+ super();
29
29
  this.element.classList.add('accessibility-sidebar-view');
30
30
  this.#node = null;
31
31
  this.#axNode = null;
@@ -44,12 +44,9 @@ export class AccessibilitySidebarView extends UI.ThrottledWidget.ThrottledWidget
44
44
  this.pullNode();
45
45
  }
46
46
 
47
- static instance(opts?: {
48
- forceNew: boolean,
49
- throttlingTimeout: number,
50
- }): AccessibilitySidebarView {
47
+ static instance(opts?: {forceNew: boolean}): AccessibilitySidebarView {
51
48
  if (!accessibilitySidebarViewInstance || opts?.forceNew) {
52
- accessibilitySidebarViewInstance = new AccessibilitySidebarView(opts?.throttlingTimeout);
49
+ accessibilitySidebarViewInstance = new AccessibilitySidebarView();
53
50
  }
54
51
  return accessibilitySidebarViewInstance;
55
52
  }
@@ -65,7 +62,7 @@ export class AccessibilitySidebarView extends UI.ThrottledWidget.ThrottledWidget
65
62
  setNode(node: SDK.DOMModel.DOMNode|null, fromAXTree?: boolean): void {
66
63
  this.skipNextPullNode = Boolean(fromAXTree);
67
64
  this.#node = node;
68
- this.update();
65
+ this.requestUpdate();
69
66
  }
70
67
 
71
68
  accessibilityNodeCallback(axNode: SDK.AccessibilityModel.AccessibilityNode|null): void {
@@ -85,7 +82,7 @@ export class AccessibilitySidebarView extends UI.ThrottledWidget.ThrottledWidget
85
82
  this.breadcrumbsSubPane.setAXNode(axNode);
86
83
  }
87
84
 
88
- override async doUpdate(): Promise<void> {
85
+ override async performUpdate(): Promise<void> {
89
86
  const node = this.node();
90
87
  this.axNodeSubPane.setNode(node);
91
88
  this.ariaSubPane.setNode(node);
@@ -109,7 +106,7 @@ export class AccessibilitySidebarView extends UI.ThrottledWidget.ThrottledWidget
109
106
  super.wasShown();
110
107
 
111
108
  // Pull down the latest date for this node.
112
- void this.doUpdate();
109
+ void this.performUpdate();
113
110
 
114
111
  SDK.TargetManager.TargetManager.instance().addModelListener(
115
112
  SDK.DOMModel.DOMModel, SDK.DOMModel.Events.AttrModified, this.onNodeChange, this, {scoped: true});
@@ -152,6 +149,6 @@ export class AccessibilitySidebarView extends UI.ThrottledWidget.ThrottledWidget
152
149
  if (this.node() !== node) {
153
150
  return;
154
151
  }
155
- this.update();
152
+ this.requestUpdate();
156
153
  }
157
154
  }
@@ -1,7 +1,6 @@
1
1
  // Copyright 2025 The Chromium Authors
2
2
  // Use of this source code is governed by a BSD-style license that can be
3
3
  // found in the LICENSE file.
4
- /* eslint-disable @devtools/no-lit-render-outside-of-view */
5
4
 
6
5
  import '../../ui/legacy/legacy.js';
7
6
  import '../../ui/components/markdown_view/markdown_view.js';
@@ -187,42 +186,8 @@ export interface ViewOutput {
187
186
  }
188
187
 
189
188
  type View = (input: ViewInput, output: ViewOutput, target: HTMLElement) => void;
190
-
191
- export class PatchWidget extends UI.Widget.Widget {
192
- changeSummary = '';
193
- changeManager: AiAssistanceModel.ChangeManager.ChangeManager|undefined;
194
- // Whether the user completed first run experience dialog or not.
195
- #aiPatchingFreCompletedSetting =
196
- Common.Settings.Settings.instance().createSetting('ai-assistance-patching-fre-completed', false);
197
- #projectIdSetting =
198
- Common.Settings.Settings.instance().createSetting('ai-assistance-patching-selected-project-id', '');
199
- #view: View;
200
- #viewOutput: ViewOutput = {};
201
- #aidaClient: Host.AidaClient.AidaClient;
202
- #applyPatchAbortController?: AbortController;
203
- #project?: Workspace.Workspace.Project;
204
- #patchSources?: string;
205
- #savedToDisk?: boolean;
206
- #noLogging: boolean; // Whether the enterprise setting is `ALLOW_WITHOUT_LOGGING` or not.
207
- #patchSuggestionState = PatchSuggestionState.INITIAL;
208
- #workspaceDiff = WorkspaceDiff.WorkspaceDiff.workspaceDiff();
209
- #workspace = Workspace.Workspace.WorkspaceImpl.instance();
210
- #automaticFileSystem =
211
- Persistence.AutomaticFileSystemManager.AutomaticFileSystemManager.instance().automaticFileSystem;
212
- #applyToDisconnectedAutomaticWorkspace = false;
213
- // `rpcId` from the `applyPatch` request
214
- #rpcId: Host.AidaClient.RpcGlobalId|null = null;
215
-
216
- constructor(element?: HTMLElement, view?: View, opts?: {
217
- aidaClient: Host.AidaClient.AidaClient,
218
- }) {
219
- super(element);
220
- this.#aidaClient = opts?.aidaClient ?? new Host.AidaClient.AidaClient();
221
- this.#noLogging = Root.Runtime.hostConfig.aidaAvailability?.enterprisePolicyValue ===
222
- Root.Runtime.GenAiEnterprisePolicyValue.ALLOW_WITHOUT_LOGGING;
223
-
224
- // clang-format off
225
- this.#view = view ?? ((input, output, target) => {
189
+ const DEFAULT_VIEW: View =
190
+ (input, output, target) => {
226
191
  if (!input.changeSummary && input.patchSuggestionState === PatchSuggestionState.INITIAL) {
227
192
  return;
228
193
  }
@@ -428,9 +393,43 @@ export class PatchWidget extends UI.Widget.Widget {
428
393
  </details>
429
394
  `;
430
395
 
431
- render(template, target, {host: target});
432
- });
433
- // clang-format on
396
+ render(template, target);
397
+ };
398
+
399
+ export class PatchWidget extends UI.Widget.Widget {
400
+ changeSummary = '';
401
+ changeManager: AiAssistanceModel.ChangeManager.ChangeManager|undefined;
402
+ // Whether the user completed first run experience dialog or not.
403
+ #aiPatchingFreCompletedSetting =
404
+ Common.Settings.Settings.instance().createSetting('ai-assistance-patching-fre-completed', false);
405
+ #projectIdSetting =
406
+ Common.Settings.Settings.instance().createSetting('ai-assistance-patching-selected-project-id', '');
407
+ #view: View;
408
+ #viewOutput: ViewOutput = {};
409
+ #aidaClient: Host.AidaClient.AidaClient;
410
+ #applyPatchAbortController?: AbortController;
411
+ #project?: Workspace.Workspace.Project;
412
+ #patchSources?: string;
413
+ #savedToDisk?: boolean;
414
+ #noLogging: boolean; // Whether the enterprise setting is `ALLOW_WITHOUT_LOGGING` or not.
415
+ #patchSuggestionState = PatchSuggestionState.INITIAL;
416
+ #workspaceDiff = WorkspaceDiff.WorkspaceDiff.workspaceDiff();
417
+ #workspace = Workspace.Workspace.WorkspaceImpl.instance();
418
+ #automaticFileSystem =
419
+ Persistence.AutomaticFileSystemManager.AutomaticFileSystemManager.instance().automaticFileSystem;
420
+ #applyToDisconnectedAutomaticWorkspace = false;
421
+ // `rpcId` from the `applyPatch` request
422
+ #rpcId: Host.AidaClient.RpcGlobalId|null = null;
423
+
424
+ constructor(element?: HTMLElement, view = DEFAULT_VIEW, opts?: {
425
+ aidaClient: Host.AidaClient.AidaClient,
426
+ }) {
427
+ super(element);
428
+ this.#aidaClient = opts?.aidaClient ?? new Host.AidaClient.AidaClient();
429
+ this.#noLogging = Root.Runtime.hostConfig.aidaAvailability?.enterprisePolicyValue ===
430
+ Root.Runtime.GenAiEnterprisePolicyValue.ALLOW_WITHOUT_LOGGING;
431
+ this.#view = view;
432
+
434
433
  this.requestUpdate();
435
434
  }
436
435