chrome-devtools-frontend 1.0.1651641 → 1.0.1654411
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.
- package/.agents/skills/fixing-skipped-tests/SKILL.md +32 -0
- package/.agents/skills/migrate-chromium-test/SKILL.md +144 -0
- package/docs/get_the_code.md +1 -2
- package/docs/ui_engineering.md +3 -1
- package/eslint.config.mjs +0 -5
- package/front_end/core/sdk/CPUThrottlingManager.ts +13 -8
- package/front_end/core/sdk/CSSMetadata.ts +23 -0
- package/front_end/core/sdk/CompilerSourceMappingContentProvider.ts +8 -4
- package/front_end/core/sdk/DOMModel.ts +4 -0
- package/front_end/core/sdk/EmulationModel.ts +4 -0
- package/front_end/core/sdk/ResourceTreeModel.ts +3 -2
- package/front_end/entrypoints/heap_snapshot_worker/HeapSnapshot.ts +459 -74
- package/front_end/entrypoints/main/MainImpl.ts +0 -6
- package/front_end/foundation/Universe.ts +18 -0
- package/front_end/generated/InspectorBackendCommands.ts +7 -6
- package/front_end/generated/SupportedCSSProperties.js +208 -34
- package/front_end/generated/protocol.ts +64 -7
- package/front_end/models/ai_assistance/AiAgent2.ts +3 -3
- package/front_end/models/ai_assistance/AiConversation.ts +2 -1
- package/front_end/models/ai_assistance/README.md +5 -4
- package/front_end/models/ai_assistance/agents/ContextSelectionAgent.ts +1 -1
- package/front_end/models/ai_assistance/agents/PerformanceAgent.snapshot.txt +2 -2
- package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +11 -164
- package/front_end/models/ai_assistance/ai_assistance.ts +6 -2
- package/front_end/models/ai_assistance/contexts/PerformanceTraceContext.ts +295 -0
- package/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.snapshot.txt +10 -10
- package/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.ts +12 -11
- package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.snapshot.txt +6 -6
- package/front_end/models/ai_assistance/skills/accessibility.md +4 -2
- package/front_end/models/ai_assistance/tools/GetElementAccessibilityDetails.ts +142 -0
- package/front_end/models/ai_assistance/tools/GetStyles.ts +1 -1
- package/front_end/models/ai_assistance/tools/README.md +22 -2
- package/front_end/models/ai_assistance/tools/{ResolveLighthousePath.ts → ResolveDevtoolsNodePath.ts} +18 -17
- package/front_end/models/ai_assistance/tools/Tool.ts +7 -2
- package/front_end/models/ai_assistance/tools/ToolRegistry.ts +10 -8
- package/front_end/models/autofill_manager/AutofillManager.ts +7 -15
- package/front_end/models/bindings/NetworkProject.ts +4 -8
- package/front_end/models/breakpoints/BreakpointManager.ts +9 -9
- package/front_end/models/emulation/DeviceModeModel.ts +24 -0
- package/front_end/models/emulation/EmulatedDevices.ts +108 -0
- package/front_end/models/heap_snapshot/HeapSnapshotModel.ts +36 -0
- package/front_end/models/heap_snapshot/HeapSnapshotProxy.ts +8 -0
- package/front_end/models/issues_manager/IssuesManager.ts +10 -6
- package/front_end/models/javascript_metadata/JavaScriptMetadata.ts +4 -5
- package/front_end/models/live-metrics/LiveMetrics.ts +6 -6
- package/front_end/models/live-metrics/web-vitals-injected/spec/spec.ts +5 -5
- package/front_end/models/live-metrics/web-vitals-injected/web-vitals-injected.ts +3 -3
- package/front_end/models/logs/LogManager.ts +25 -10
- package/front_end/models/logs/NetworkLog.ts +24 -19
- package/front_end/models/persistence/AutomaticFileSystemWorkspaceBinding.ts +14 -5
- package/front_end/models/persistence/IsolatedFileSystem.ts +9 -11
- package/front_end/models/persistence/IsolatedFileSystemManager.ts +5 -3
- package/front_end/models/persistence/NetworkPersistenceManager.ts +73 -44
- package/front_end/models/persistence/PersistenceImpl.ts +4 -5
- package/front_end/models/trace/EntityMapper.ts +1 -1
- package/front_end/panels/ai_assistance/AiAssistancePanel.ts +9 -9
- package/front_end/panels/ai_assistance/ExportConversation.ts +4 -1
- package/front_end/panels/ai_assistance/components/ChatInput.ts +2 -2
- package/front_end/panels/application/IndexedDBViews.ts +38 -36
- package/front_end/panels/application/components/AdsView.ts +4 -0
- package/front_end/panels/autofill/AutofillView.ts +1 -1
- package/front_end/panels/autofill/autofill-meta.ts +3 -2
- package/front_end/panels/elements/AccessibilityTreeUtils.ts +26 -15
- package/front_end/panels/elements/AccessibilityTreeView.ts +12 -9
- package/front_end/panels/elements/ElementsTreeOutline.ts +5 -0
- package/front_end/panels/layer_viewer/LayerTreeOutline.ts +118 -68
- package/front_end/panels/layer_viewer/Layers3DView.ts +1 -1
- package/front_end/panels/layer_viewer/layerTreeOutline.css +20 -13
- package/front_end/panels/layers/LayersPanel.ts +1 -1
- package/front_end/panels/mobile_throttling/ThrottlingSettingsTab.ts +64 -17
- package/front_end/panels/mobile_throttling/throttlingSettingsTab.css +5 -0
- package/front_end/panels/network/LinkPreloadGenerator.ts +101 -0
- package/front_end/panels/network/NetworkLogView.ts +28 -0
- package/front_end/panels/network/network.ts +2 -0
- package/front_end/panels/profiler/HeapSnapshotView.ts +121 -33
- package/front_end/panels/profiler/ModuleUIStrings.ts +4 -0
- package/front_end/panels/sources/ScopeChainSidebarPane.ts +0 -12
- package/front_end/panels/timeline/TimelineHistoryManager.ts +38 -37
- package/front_end/panels/timeline/TimelinePanel.ts +32 -8
- package/front_end/panels/timeline/components/CPUThrottlingSelector.ts +7 -6
- package/front_end/panels/timeline/components/LiveMetricsView.ts +38 -38
- package/front_end/panels/timeline/components/MetricCard.ts +18 -18
- package/front_end/panels/timeline/components/liveMetricsView.css +6 -6
- package/front_end/panels/timeline/components/metricCard.css +4 -4
- package/front_end/panels/whats_new/ReleaseNoteText.ts +3 -3
- package/front_end/panels/whats_new/resources/WNDT.md +1 -1
- package/front_end/third_party/chromium/README.chromium +1 -1
- package/front_end/ui/legacy/InspectorDrawerView.ts +7 -5
- package/front_end/ui/legacy/ListWidget.ts +12 -0
- package/front_end/ui/legacy/SplitWidget.ts +12 -11
- package/front_end/ui/legacy/components/data_grid/DataGridElement.ts +23 -19
- package/front_end/ui/legacy/components/object_ui/CustomPreviewComponent.ts +8 -1
- package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +110 -17
- package/front_end/ui/legacy/treeoutline.css +1 -1
- package/front_end/ui/visual_logging/KnownContextValues.ts +1 -0
- package/package.json +4 -3
|
@@ -142,7 +142,7 @@ const UIStrings = {
|
|
|
142
142
|
} as const;
|
|
143
143
|
const str_ = i18n.i18n.registerUIStrings('ui/legacy/components/object_ui/ObjectPropertiesSection.ts', UIStrings);
|
|
144
144
|
const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
|
|
145
|
-
const EXPANDABLE_MAX_DEPTH = 100;
|
|
145
|
+
export const EXPANDABLE_MAX_DEPTH = 100;
|
|
146
146
|
|
|
147
147
|
const objectPropertiesSectionMap = new WeakMap<Element, ObjectPropertiesSection>();
|
|
148
148
|
|
|
@@ -406,7 +406,10 @@ export abstract class ObjectTreeNodeBase extends Common.ObjectWrapper.ObjectWrap
|
|
|
406
406
|
} else {
|
|
407
407
|
this.options.expansionTracker?.collapse(this);
|
|
408
408
|
}
|
|
409
|
-
this.#expanded
|
|
409
|
+
if (this.#expanded !== val) {
|
|
410
|
+
this.#expanded = val;
|
|
411
|
+
this.dispatchEventToListeners(ObjectTreeNodeBase.Events.EXPANDED_CHANGED, val);
|
|
412
|
+
}
|
|
410
413
|
}
|
|
411
414
|
|
|
412
415
|
get readOnly(): boolean {
|
|
@@ -425,6 +428,10 @@ export abstract class ObjectTreeNodeBase extends Common.ObjectWrapper.ObjectWrap
|
|
|
425
428
|
this.setFilter({includeNullOrUndefinedValues: value, regex: this.filter?.regex ?? null});
|
|
426
429
|
}
|
|
427
430
|
|
|
431
|
+
get canExpandRecursively(): boolean {
|
|
432
|
+
return true;
|
|
433
|
+
}
|
|
434
|
+
|
|
428
435
|
get sortPropertiesAlphabetically(): boolean {
|
|
429
436
|
if (this.isWasm) {
|
|
430
437
|
return false;
|
|
@@ -440,14 +447,16 @@ export abstract class ObjectTreeNodeBase extends Common.ObjectWrapper.ObjectWrap
|
|
|
440
447
|
setting.set(value);
|
|
441
448
|
this.removeChildren();
|
|
442
449
|
}
|
|
443
|
-
|
|
444
450
|
// Performs a pre-order tree traversal over the populated children. If any children need to be populated, callers must
|
|
445
451
|
// do that while walking (pre-order visitation enables that).
|
|
446
|
-
* #walk(maxDepth = -1): Generator<ObjectTreeNodeBase> {
|
|
452
|
+
* #walk(maxDepth = -1, filter?: (node: ObjectTreeNodeBase) => boolean): Generator<ObjectTreeNodeBase> {
|
|
453
|
+
if (filter && !filter(this)) {
|
|
454
|
+
return;
|
|
455
|
+
}
|
|
447
456
|
function* walkChildren(children: ObjectTreeNodeBase[]|undefined): Generator<ObjectTreeNodeBase> {
|
|
448
457
|
if (children) {
|
|
449
458
|
for (const child of children) {
|
|
450
|
-
yield* child.#walk(Math.max(-1, maxDepth - 1));
|
|
459
|
+
yield* child.#walk(Math.max(-1, maxDepth - 1), filter);
|
|
451
460
|
}
|
|
452
461
|
}
|
|
453
462
|
}
|
|
@@ -460,7 +469,7 @@ export abstract class ObjectTreeNodeBase extends Common.ObjectWrapper.ObjectWrap
|
|
|
460
469
|
}
|
|
461
470
|
|
|
462
471
|
async expandRecursively(maxDepth: number): Promise<void> {
|
|
463
|
-
for (const node of this.#walk(maxDepth)) {
|
|
472
|
+
for (const node of this.#walk(maxDepth, n => n.canExpandRecursively)) {
|
|
464
473
|
await node.populateChildrenIfNeeded();
|
|
465
474
|
node.expanded = true;
|
|
466
475
|
}
|
|
@@ -655,11 +664,13 @@ export namespace ObjectTreeNodeBase {
|
|
|
655
664
|
VALUE_CHANGED = 'value-changed',
|
|
656
665
|
CHILDREN_CHANGED = 'children-changed',
|
|
657
666
|
FILTER_CHANGED = 'filter-changed',
|
|
667
|
+
EXPANDED_CHANGED = 'expanded-changed',
|
|
658
668
|
}
|
|
659
669
|
export interface EventTypes {
|
|
660
670
|
[Events.VALUE_CHANGED]: void;
|
|
661
671
|
[Events.CHILDREN_CHANGED]: void;
|
|
662
672
|
[Events.FILTER_CHANGED]: void;
|
|
673
|
+
[Events.EXPANDED_CHANGED]: boolean;
|
|
663
674
|
}
|
|
664
675
|
}
|
|
665
676
|
|
|
@@ -758,6 +769,10 @@ export class ObjectTreeNode extends ObjectTreeNodeBase {
|
|
|
758
769
|
return Boolean(this.filter && !this.property.match(this.filter));
|
|
759
770
|
}
|
|
760
771
|
|
|
772
|
+
override get canExpandRecursively(): boolean {
|
|
773
|
+
return this.property.name !== '[[Prototype]]';
|
|
774
|
+
}
|
|
775
|
+
|
|
761
776
|
get name(): string {
|
|
762
777
|
return this.property.name;
|
|
763
778
|
}
|
|
@@ -1664,6 +1679,7 @@ export class ObjectPropertyTreeElement extends UI.TreeOutline.TreeElement {
|
|
|
1664
1679
|
this.property.addEventListener(ObjectTreeNodeBase.Events.VALUE_CHANGED, this.#updateValue, this);
|
|
1665
1680
|
this.property.addEventListener(ObjectTreeNodeBase.Events.CHILDREN_CHANGED, this.#updateChildren, this);
|
|
1666
1681
|
this.property.addEventListener(ObjectTreeNodeBase.Events.FILTER_CHANGED, this.#updateFilter, this);
|
|
1682
|
+
this.property.addEventListener(ObjectTreeNodeBase.Events.EXPANDED_CHANGED, this.#onExpandedChanged, this);
|
|
1667
1683
|
this.toggleOnClick = true;
|
|
1668
1684
|
this.linkifier = linkifier;
|
|
1669
1685
|
this.maxNumPropertiesToShow = InitialVisibleChildrenLimit;
|
|
@@ -1684,12 +1700,51 @@ export class ObjectPropertyTreeElement extends UI.TreeOutline.TreeElement {
|
|
|
1684
1700
|
linkifier?: Components.Linkifier.Linkifier,
|
|
1685
1701
|
emptyPlaceholder?: string|null,
|
|
1686
1702
|
): Promise<void> {
|
|
1687
|
-
|
|
1703
|
+
await ObjectPropertyTreeElement.populateChildrenIfNeeded(value);
|
|
1704
|
+
ObjectPropertyTreeElement.populateImpl(treeElement, value, skipProto, skipGettersAndSetters, linkifier,
|
|
1705
|
+
emptyPlaceholder);
|
|
1706
|
+
}
|
|
1707
|
+
|
|
1708
|
+
static async populateChildrenIfNeeded(value: ObjectTreeNodeBase): Promise<void> {
|
|
1709
|
+
const children = await value.populateChildrenIfNeeded();
|
|
1710
|
+
await ArrayGroupingTreeElement.populateChildrenIfNeeded(children);
|
|
1711
|
+
}
|
|
1712
|
+
|
|
1713
|
+
static populateImpl(
|
|
1714
|
+
treeElement: UI.TreeOutline.TreeElement,
|
|
1715
|
+
value: ObjectTreeNodeBase,
|
|
1716
|
+
skipProto: boolean,
|
|
1717
|
+
skipGettersAndSetters: boolean,
|
|
1718
|
+
linkifier?: Components.Linkifier.Linkifier,
|
|
1719
|
+
emptyPlaceholder?: string|null,
|
|
1720
|
+
): void {
|
|
1721
|
+
for (const childNode of ObjectPropertyTreeElement.createNodes(
|
|
1722
|
+
value, skipProto, skipGettersAndSetters, linkifier, emptyPlaceholder,
|
|
1723
|
+
property => treeElement instanceof ObjectPropertyTreeElement &&
|
|
1724
|
+
!ObjectPropertiesSection.isDisplayableProperty(property, treeElement.property?.property))) {
|
|
1725
|
+
treeElement.appendChild(childNode);
|
|
1726
|
+
}
|
|
1727
|
+
}
|
|
1728
|
+
|
|
1729
|
+
static *
|
|
1730
|
+
createNodes(
|
|
1731
|
+
value: ObjectTreeNodeBase,
|
|
1732
|
+
skipProto: boolean,
|
|
1733
|
+
skipGettersAndSetters: boolean,
|
|
1734
|
+
linkifier?: Components.Linkifier.Linkifier,
|
|
1735
|
+
emptyPlaceholder?: string|null,
|
|
1736
|
+
isNotDisplayablePropertyCallback?: (property: SDK.RemoteObject.RemoteObjectProperty) => boolean,
|
|
1737
|
+
): Generator<UI.TreeOutline.TreeElement> {
|
|
1738
|
+
const properties = value.children;
|
|
1739
|
+
if (!properties) {
|
|
1740
|
+
return;
|
|
1741
|
+
}
|
|
1688
1742
|
if (properties.arrayRanges) {
|
|
1689
|
-
|
|
1743
|
+
yield* ArrayGroupingTreeElement.createNodes(properties, linkifier, isNotDisplayablePropertyCallback);
|
|
1690
1744
|
} else {
|
|
1691
|
-
|
|
1692
|
-
|
|
1745
|
+
yield*
|
|
1746
|
+
ObjectPropertyTreeElement.createPropertyNodes(properties, skipProto, skipGettersAndSetters, linkifier,
|
|
1747
|
+
emptyPlaceholder, isNotDisplayablePropertyCallback);
|
|
1693
1748
|
}
|
|
1694
1749
|
}
|
|
1695
1750
|
|
|
@@ -1869,6 +1924,15 @@ export class ObjectPropertyTreeElement extends UI.TreeOutline.TreeElement {
|
|
|
1869
1924
|
this.hidden = this.property.isFiltered;
|
|
1870
1925
|
}
|
|
1871
1926
|
|
|
1927
|
+
#onExpandedChanged(event: Common.EventTarget.EventTargetEvent<boolean>): void {
|
|
1928
|
+
const expanded = event.data;
|
|
1929
|
+
if (expanded) {
|
|
1930
|
+
this.expand();
|
|
1931
|
+
} else {
|
|
1932
|
+
this.collapse();
|
|
1933
|
+
}
|
|
1934
|
+
}
|
|
1935
|
+
|
|
1872
1936
|
getContextMenu(event: Event): UI.ContextMenu.ContextMenu {
|
|
1873
1937
|
const contextMenu = new UI.ContextMenu.ContextMenu(event);
|
|
1874
1938
|
contextMenu.appendApplicableItems(this);
|
|
@@ -2082,6 +2146,7 @@ export class ArrayGroupingTreeElement extends UI.TreeOutline.TreeElement {
|
|
|
2082
2146
|
super(Platform.StringUtilities.sprintf('[%d … %d]', child.range.fromIndex, child.range.toIndex), true);
|
|
2083
2147
|
this.#child = child;
|
|
2084
2148
|
this.#child.addEventListener(ObjectTreeNodeBase.Events.CHILDREN_CHANGED, this.onpopulate, this);
|
|
2149
|
+
this.#child.addEventListener(ObjectTreeNodeBase.Events.EXPANDED_CHANGED, this.#onExpandedChanged, this);
|
|
2085
2150
|
this.toggleOnClick = true;
|
|
2086
2151
|
this.linkifier = linkifier;
|
|
2087
2152
|
if (child.expanded) {
|
|
@@ -2089,25 +2154,53 @@ export class ArrayGroupingTreeElement extends UI.TreeOutline.TreeElement {
|
|
|
2089
2154
|
}
|
|
2090
2155
|
}
|
|
2091
2156
|
|
|
2092
|
-
|
|
2093
|
-
|
|
2094
|
-
|
|
2157
|
+
#onExpandedChanged(event: Common.EventTarget.EventTargetEvent<boolean>): void {
|
|
2158
|
+
const expanded = event.data;
|
|
2159
|
+
if (expanded) {
|
|
2160
|
+
this.expand();
|
|
2161
|
+
} else {
|
|
2162
|
+
this.collapse();
|
|
2163
|
+
}
|
|
2164
|
+
}
|
|
2165
|
+
|
|
2166
|
+
static *
|
|
2167
|
+
createNodes(children: NodeChildren, linkifier?: Components.Linkifier.Linkifier,
|
|
2168
|
+
isNotDisplayablePropertyCallback?: (property: SDK.RemoteObject.RemoteObjectProperty) => boolean):
|
|
2169
|
+
Generator<UI.TreeOutline.TreeElement> {
|
|
2095
2170
|
if (!children.arrayRanges) {
|
|
2096
2171
|
return;
|
|
2097
2172
|
}
|
|
2098
2173
|
if (children.arrayRanges.length === 1) {
|
|
2099
|
-
|
|
2174
|
+
yield*
|
|
2175
|
+
ObjectPropertyTreeElement.createNodes(children.arrayRanges[0], false, false, linkifier, null,
|
|
2176
|
+
isNotDisplayablePropertyCallback);
|
|
2100
2177
|
} else {
|
|
2101
2178
|
for (const child of children.arrayRanges) {
|
|
2102
2179
|
if (child.singular) {
|
|
2103
|
-
|
|
2180
|
+
yield*
|
|
2181
|
+
ObjectPropertyTreeElement.createNodes(child, false, false, linkifier, null,
|
|
2182
|
+
isNotDisplayablePropertyCallback);
|
|
2104
2183
|
} else {
|
|
2105
|
-
|
|
2184
|
+
yield new ArrayGroupingTreeElement(child, linkifier);
|
|
2106
2185
|
}
|
|
2107
2186
|
}
|
|
2108
2187
|
}
|
|
2109
2188
|
|
|
2110
|
-
|
|
2189
|
+
yield*
|
|
2190
|
+
ObjectPropertyTreeElement.createPropertyNodes(children, false, false, linkifier, null,
|
|
2191
|
+
isNotDisplayablePropertyCallback);
|
|
2192
|
+
}
|
|
2193
|
+
|
|
2194
|
+
static async populateChildrenIfNeeded(children: NodeChildren): Promise<void> {
|
|
2195
|
+
if (!children.arrayRanges) {
|
|
2196
|
+
return;
|
|
2197
|
+
}
|
|
2198
|
+
if (children.arrayRanges.length === 1) {
|
|
2199
|
+
await ObjectPropertyTreeElement.populateChildrenIfNeeded(children.arrayRanges[0]);
|
|
2200
|
+
} else {
|
|
2201
|
+
await Promise.all(children.arrayRanges.filter(child => child.singular)
|
|
2202
|
+
.map(child => ObjectPropertyTreeElement.populateChildrenIfNeeded(child)));
|
|
2203
|
+
}
|
|
2111
2204
|
}
|
|
2112
2205
|
|
|
2113
2206
|
override onexpand(): void {
|
package/package.json
CHANGED
|
@@ -30,7 +30,8 @@
|
|
|
30
30
|
"start": "vpython3 third_party/node/node.py --output scripts/run_start.mjs",
|
|
31
31
|
"webtest": "vpython3 third_party/node/node.py --output scripts/npm_test.js",
|
|
32
32
|
"watch": "npm run build -- --watch",
|
|
33
|
-
"test": "vpython3 third_party/node/node.py --output scripts/run_on_target.mjs gen/test/run.js"
|
|
33
|
+
"test": "vpython3 third_party/node/node.py --output scripts/run_on_target.mjs gen/test/run.js",
|
|
34
|
+
"test-health": "node scripts/test_health.ts"
|
|
34
35
|
},
|
|
35
36
|
"devDependencies": {
|
|
36
37
|
"@rollup/plugin-node-resolve": "16.0.3",
|
|
@@ -75,7 +76,7 @@
|
|
|
75
76
|
"mocha": "11.7.5",
|
|
76
77
|
"ora": "9.0.0",
|
|
77
78
|
"postcss": "8.5.15",
|
|
78
|
-
"puppeteer-core": "25.0
|
|
79
|
+
"puppeteer-core": "25.2.0",
|
|
79
80
|
"rollup": "4.60.4",
|
|
80
81
|
"rollup-plugin-sourcemaps2": "0.5.4",
|
|
81
82
|
"sinon": "22.0.0",
|
|
@@ -91,5 +92,5 @@
|
|
|
91
92
|
"webidl2": "24.5.0",
|
|
92
93
|
"yargs": "17.7.2"
|
|
93
94
|
},
|
|
94
|
-
"version": "1.0.
|
|
95
|
+
"version": "1.0.1654411"
|
|
95
96
|
}
|