chrome-devtools-frontend 1.0.1592362 → 1.0.1593518

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 (109) hide show
  1. package/front_end/Images/src/tab-move.svg +1 -0
  2. package/front_end/application_tokens.css +4 -4
  3. package/front_end/core/protocol_client/InspectorBackend.ts +0 -4
  4. package/front_end/core/sdk/EmulationModel.ts +1 -41
  5. package/front_end/generated/InspectorBackendCommands.ts +2 -1
  6. package/front_end/generated/SupportedCSSProperties.js +2 -2
  7. package/front_end/generated/protocol-mapping.d.ts +7 -0
  8. package/front_end/generated/protocol-proxy-api.d.ts +5 -0
  9. package/front_end/generated/protocol.ts +59 -0
  10. package/front_end/models/ai_assistance/agents/AiAgent.ts +24 -1
  11. package/front_end/models/ai_assistance/agents/BreakpointDebuggerAgent.ts +26 -86
  12. package/front_end/models/ai_assistance/agents/ContextSelectionAgent.ts +14 -4
  13. package/front_end/models/ai_assistance/agents/StylingAgent.ts +16 -2
  14. package/front_end/models/emulation/DeviceModeModel.ts +0 -47
  15. package/front_end/models/javascript_metadata/NativeFunctions.js +6 -6
  16. package/front_end/panels/accessibility/AXBreadcrumbsPane.ts +5 -3
  17. package/front_end/panels/ai_assistance/AiAssistancePanel.ts +29 -6
  18. package/front_end/panels/ai_assistance/README.md +61 -0
  19. package/front_end/panels/ai_assistance/components/ChatMessage.ts +141 -27
  20. package/front_end/panels/ai_assistance/components/ChatView.ts +5 -1
  21. package/front_end/panels/ai_assistance/components/WalkthroughView.ts +19 -7
  22. package/front_end/panels/ai_assistance/components/chatMessage.css +30 -0
  23. package/front_end/panels/ai_assistance/components/walkthroughView.css +12 -7
  24. package/front_end/panels/animation/AnimationGroupPreviewUI.ts +1 -1
  25. package/front_end/panels/application/ServiceWorkerUpdateCycleView.ts +1 -0
  26. package/front_end/panels/application/components/BackForwardCacheView.ts +4 -2
  27. package/front_end/panels/autofill/AutofillView.ts +1 -1
  28. package/front_end/panels/browser_debugger/DOMBreakpointsSidebarPane.ts +161 -154
  29. package/front_end/panels/browser_debugger/XHRBreakpointsSidebarPane.ts +1 -0
  30. package/front_end/panels/browser_debugger/domBreakpointsSidebarPane.css +58 -36
  31. package/front_end/panels/console/ConsoleViewMessage.ts +1 -0
  32. package/front_end/panels/console/consoleView.css +7 -2
  33. package/front_end/panels/elements/ComputedStyleWidget.ts +5 -1
  34. package/front_end/panels/elements/ElementsTreeElement.ts +1 -0
  35. package/front_end/panels/elements/LayoutPane.ts +8 -7
  36. package/front_end/panels/elements/StandaloneStylesContainer.ts +254 -0
  37. package/front_end/panels/elements/components/ComputedStyleTrace.ts +4 -0
  38. package/front_end/panels/elements/components/ElementsBreadcrumbs.ts +1 -1
  39. package/front_end/panels/elements/components/StylePropertyEditor.ts +2 -1
  40. package/front_end/panels/elements/components/computedStyleProperty.css +1 -1
  41. package/front_end/panels/elements/elements.ts +2 -0
  42. package/front_end/panels/emulation/DeviceModeToolbar.ts +0 -25
  43. package/front_end/panels/lighthouse/LighthouseReportRenderer.ts +1 -1
  44. package/front_end/panels/linear_memory_inspector/components/LinearMemoryValueInterpreter.ts +1 -1
  45. package/front_end/panels/linear_memory_inspector/components/ValueInterpreterDisplay.ts +1 -1
  46. package/front_end/panels/media/PlayerListView.ts +1 -1
  47. package/front_end/panels/network/NetworkLogViewColumns.ts +2 -1
  48. package/front_end/panels/network/components/RequestHeaderSection.ts +1 -1
  49. package/front_end/panels/protocol_monitor/JSONEditor.ts +1 -1
  50. package/front_end/panels/recorder/components/RecordingListView.ts +1 -1
  51. package/front_end/panels/recorder/components/StepEditor.ts +3 -3
  52. package/front_end/panels/settings/KeybindsSettingsTab.ts +2 -1
  53. package/front_end/panels/sources/components/HeadersView.ts +2 -2
  54. package/front_end/panels/timeline/components/BreadcrumbsUI.ts +1 -1
  55. package/front_end/panels/timeline/components/SidebarAnnotationsTab.ts +1 -1
  56. package/front_end/third_party/chromium/README.chromium +1 -1
  57. package/front_end/third_party/puppeteer/README.chromium +2 -2
  58. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Navigation.d.ts.map +1 -1
  59. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Navigation.js +1 -0
  60. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Navigation.js.map +1 -1
  61. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BrowserContext.js +1 -1
  62. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BrowserContext.js.map +1 -1
  63. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.js +1 -1
  64. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.js.map +1 -1
  65. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/injected.d.ts +1 -1
  66. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ChromeLauncher.d.ts.map +1 -1
  67. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ChromeLauncher.js +1 -0
  68. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ChromeLauncher.js.map +1 -1
  69. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.d.ts +3 -3
  70. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js +3 -3
  71. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js.map +1 -1
  72. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/Mutex.d.ts +2 -2
  73. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/version.d.ts +1 -1
  74. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/version.js +1 -1
  75. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +6 -6
  76. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Navigation.d.ts.map +1 -1
  77. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Navigation.js +1 -0
  78. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Navigation.js.map +1 -1
  79. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BrowserContext.js +1 -1
  80. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BrowserContext.js.map +1 -1
  81. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.js +1 -1
  82. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.js.map +1 -1
  83. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ChromeLauncher.d.ts.map +1 -1
  84. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ChromeLauncher.js +1 -0
  85. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ChromeLauncher.js.map +1 -1
  86. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.d.ts +3 -3
  87. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js +3 -3
  88. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js.map +1 -1
  89. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/version.d.ts +1 -1
  90. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/version.js +1 -1
  91. package/front_end/third_party/puppeteer/package/package.json +4 -4
  92. package/front_end/third_party/puppeteer/package/src/bidi/core/Navigation.ts +1 -0
  93. package/front_end/third_party/puppeteer/package/src/cdp/BrowserContext.ts +1 -1
  94. package/front_end/third_party/puppeteer/package/src/cdp/Page.ts +1 -1
  95. package/front_end/third_party/puppeteer/package/src/node/ChromeLauncher.ts +1 -0
  96. package/front_end/third_party/puppeteer/package/src/revisions.ts +3 -3
  97. package/front_end/third_party/puppeteer/package/src/util/version.ts +1 -1
  98. package/front_end/ui/components/suggestion_input/SuggestionInput.ts +7 -12
  99. package/front_end/ui/components/tree_outline/TreeOutline.ts +6 -2
  100. package/front_end/ui/components/tree_outline/treeOutline.css +5 -0
  101. package/front_end/ui/legacy/ListControl.ts +5 -3
  102. package/front_end/ui/legacy/ListWidget.ts +1 -1
  103. package/front_end/ui/legacy/SoftContextMenu.ts +2 -1
  104. package/front_end/ui/legacy/Treeoutline.ts +1 -0
  105. package/front_end/ui/legacy/components/data_grid/DataGrid.ts +4 -2
  106. package/front_end/ui/legacy/components/quick_open/FilteredListWidget.ts +1 -1
  107. package/front_end/ui/legacy/components/utils/JSPresentationUtils.ts +31 -0
  108. package/front_end/ui/visual_logging/KnownContextValues.ts +1 -0
  109. package/package.json +1 -1
@@ -1449,6 +1449,7 @@ export class ConsoleViewMessage implements ConsoleViewportElement {
1449
1449
  this.elementInternal.className = 'console-message-wrapper';
1450
1450
  this.elementInternal.setAttribute('jslog', `${VisualLogging.item('console-message').track({
1451
1451
  click: true,
1452
+ resize: true,
1452
1453
  keydown: 'ArrowUp|ArrowDown|ArrowLeft|ArrowRight|Enter|Space|Home|End',
1453
1454
  })}`);
1454
1455
  this.elementInternal.removeChildren();
@@ -435,11 +435,16 @@
435
435
  --display-ignored-formatted-stack-frame: var(--display-formatted-stack-frame-default);
436
436
  }
437
437
 
438
- &:has(.formatted-stack-frame .ignore-list-link):has(.formatted-stack-frame .devtools-link:not(.ignore-list-link)) {
438
+ &:has(.formatted-stack-frame .ignore-list-link):has(.formatted-stack-frame .devtools-link:not(.ignore-list-link)),
439
+ &:has(.formatted-stack-frame .ignore-list-link):has(.stack-preview-container.has-non-ignored-links) {
439
440
  /* If there are ignored frames and unignored frames, then we want
440
441
  to enable the show more/less links. To do that we override some
441
442
  variables to always display the structured stack trace, but possibly
442
- only the links at the bottom of it, as we share its show more/less links. */
443
+ only the links at the bottom of it, as we share its show more/less links.
444
+ We also check the structured stack trace (StackTracePreviewContent) for
445
+ non-ignored links, so that when all inline Error frames are ignored but
446
+ the console.error() call stack has non-ignored frames (e.g. in async
447
+ traces), the toggle is still shown. See crbug.com/379788109. */
443
448
  --override-display-stack-preview-toggle-link: table-row;
444
449
  --override-display-stack-preview-hidden-div: block;
445
450
 
@@ -369,7 +369,10 @@ export class ComputedStyleWidget extends UI.Widget.VBox {
369
369
  this.#computedStylesTree.classList.toggle('computed-narrow', isNarrow);
370
370
  }
371
371
 
372
- get filterText(): string {
372
+ get filterText(): RegExp|string {
373
+ if (this.#filterIsRegex) {
374
+ return new RegExp(this.#filterText);
375
+ }
373
376
  return this.#filterText;
374
377
  }
375
378
 
@@ -385,6 +388,7 @@ export class ComputedStyleWidget extends UI.Widget.VBox {
385
388
  this.#filterText = newFilter.source;
386
389
  this.#filterIsRegex = true;
387
390
  }
391
+ this.filterRegex = this.#buildFilterRegex(this.#filterText);
388
392
  this.requestUpdate();
389
393
  }
390
394
 
@@ -1120,6 +1120,7 @@ export class ElementsTreeElement extends UI.TreeOutline.TreeElement {
1120
1120
  this.listItemElement.setAttribute(
1121
1121
  'jslog', `${VisualLogging.treeItem().parent('elementsTreeOutline').track({
1122
1122
  keydown: 'ArrowUp|ArrowDown|ArrowLeft|ArrowRight|Backspace|Delete|Enter|Space|Home|End',
1123
+ resize: true,
1123
1124
  drag: true,
1124
1125
  click: true,
1125
1126
  })}`);
@@ -228,26 +228,27 @@ const DEFAULT_VIEW: View = (input, output, target) => {
228
228
  event.preventDefault();
229
229
  }
230
230
  };
231
+ // clang-format off
231
232
  const renderElement = (element: LayoutElement): Lit.LitTemplate => html`<div
232
233
  class="element"
233
- jslog=${VisualLogging.item()}>
234
+ jslog=${VisualLogging.item().track({resize: true})}>
234
235
  <devtools-checkbox
235
236
  data-element="true"
236
237
  class="checkbox-label"
237
238
  .checked=${element.enabled}
238
239
  @change=${(e: Event) => input.onElementToggle(element, e)}
239
- jslog=${VisualLogging.toggle().track({
240
- click: true
241
- })}>
240
+ jslog=${VisualLogging.toggle().track({click: true, resize: true })}>
242
241
  <span
243
242
  class="node-text-container"
244
243
  data-label="true"
245
244
  @mouseenter=${(e: MouseEvent) => input.onMouseEnter(element, e)}
246
245
  @mouseleave=${(e: MouseEvent) => input.onMouseLeave(element, e)}>
247
246
  <devtools-node-text .data=${{
248
- nodeId: element.domId, nodeTitle: element.name, nodeClasses: element.domClasses,
249
- }
250
- }></devtools-node-text>
247
+ nodeId: element.domId,
248
+ nodeTitle: element.name,
249
+ nodeClasses: element.domClasses
250
+ }}>
251
+ </devtools-node-text>
251
252
  </span>
252
253
  </devtools-checkbox>
253
254
  <label
@@ -0,0 +1,254 @@
1
+ // Copyright 2026 The Chromium Authors
2
+ // Use of this source code is governed by a BSD-style license that can be
3
+ // found in the LICENSE file.
4
+
5
+ import * as Common from '../../core/common/common.js';
6
+ import type * as SDK from '../../core/sdk/sdk.js';
7
+ import * as ComputedStyle from '../../models/computed_style/computed_style.js';
8
+ import type * as TextUtils from '../../models/text_utils/text_utils.js';
9
+ import * as InlineEditor from '../../ui/legacy/components/inline_editor/inline_editor.js';
10
+ import * as Components from '../../ui/legacy/components/utils/utils.js';
11
+ import * as UI from '../../ui/legacy/legacy.js';
12
+ import {html, render} from '../../ui/lit/lit.js';
13
+ import * as VisualLogging from '../../ui/visual_logging/visual_logging.js';
14
+
15
+ import * as ElementsComponents from './components/components.js';
16
+ import {StylePropertiesSection} from './StylePropertiesSection.js';
17
+ import type {StylePropertyTreeElement} from './StylePropertyTreeElement.js';
18
+ import type {StylesContainer} from './StylesContainer.js';
19
+ import stylesSidebarPaneStyles from './stylesSidebarPane.css.js';
20
+ import {WebCustomData} from './WebCustomData.js';
21
+
22
+ interface ViewInput {
23
+ sections: StylePropertiesSection[];
24
+ }
25
+
26
+ type View = (input: ViewInput, output_: undefined, target: HTMLElement) => void;
27
+
28
+ export const DEFAULT_VIEW: View = (input, _output, target) => {
29
+ render(
30
+ html`
31
+ <style>${stylesSidebarPaneStyles}</style>
32
+ <div class="style-panes-wrapper" jslog=${VisualLogging.section('standalone-styles').track({
33
+ resize: true
34
+ })}>
35
+ <div class="styles-pane">
36
+ ${input.sections.map(section => section.element)}
37
+ </div>
38
+ </div>
39
+ `,
40
+ target);
41
+ };
42
+
43
+ export class StandaloneStylesContainer extends UI.Widget.VBox implements StylesContainer {
44
+ activeCSSAngle: InlineEditor.CSSAngle.CSSAngle|null = null;
45
+ isEditingStyle = false;
46
+ readonly sectionByElement = new WeakMap<Node, StylePropertiesSection>();
47
+ // TODO: Reference the MAX_LINK_LENGTH from StylesSidebarPane at a later stage, when we have a reference to it.
48
+ readonly linkifier: Components.Linkifier.Linkifier =
49
+ new Components.Linkifier.Linkifier(23, /* useLinkDecorator */ true);
50
+
51
+ #webCustomData: WebCustomData|undefined;
52
+ #userOperation = false;
53
+ #sections: StylePropertiesSection[] = [];
54
+ #swatchPopoverHelper = new InlineEditor.SwatchPopoverHelper.SwatchPopoverHelper();
55
+ #computedStyleModelInternal = new ComputedStyle.ComputedStyleModel.ComputedStyleModel();
56
+ #view: View;
57
+
58
+ constructor(element?: HTMLElement, view: View = DEFAULT_VIEW) {
59
+ super(element, {useShadowDom: true});
60
+ this.#view = view;
61
+ }
62
+
63
+ get userOperation(): boolean {
64
+ return this.#userOperation;
65
+ }
66
+
67
+ get webCustomData(): WebCustomData|undefined {
68
+ if (!this.#webCustomData &&
69
+ Common.Settings.Settings.instance().moduleSetting('show-css-property-documentation-on-hover').get()) {
70
+ this.#webCustomData = WebCustomData.create();
71
+ }
72
+ return this.#webCustomData;
73
+ }
74
+
75
+ async #updateSections(): Promise<void> {
76
+ const node = this.node();
77
+ if (!node) {
78
+ this.#sections = [];
79
+ this.requestUpdate();
80
+ return;
81
+ }
82
+
83
+ const cssModel = node.domModel().cssModel();
84
+ const matchedStyles = await cssModel.cachedMatchedCascadeForNode(node);
85
+ const parentNodeId = matchedStyles?.getParentLayoutNodeId();
86
+
87
+ const [parentStyles, computedStyles, extraStyles] = await Promise.all([
88
+ parentNodeId ? cssModel.getComputedStyle(parentNodeId) : null, cssModel.getComputedStyle(node.id),
89
+ cssModel.getComputedStyleExtraFields(node.id)
90
+ ]);
91
+
92
+ if (!matchedStyles) {
93
+ return;
94
+ }
95
+
96
+ const newSections: StylePropertiesSection[] = [];
97
+ let sectionIdx = 0;
98
+ for (const style of matchedStyles.nodeStyles()) {
99
+ const section = new StylePropertiesSection(
100
+ this, matchedStyles, style, sectionIdx++, computedStyles, parentStyles, extraStyles);
101
+ newSections.push(section);
102
+ this.sectionByElement.set(section.element, section);
103
+ }
104
+ this.#sections = newSections;
105
+ this.swatchPopoverHelper().reposition();
106
+ }
107
+
108
+ override async performUpdate(): Promise<void> {
109
+ if (this.isEditingStyle || this.#userOperation) {
110
+ return;
111
+ }
112
+
113
+ await this.#updateSections();
114
+
115
+ const viewInput: ViewInput = {
116
+ sections: this.#sections,
117
+ };
118
+ this.#view(viewInput, undefined, this.contentElement);
119
+ }
120
+
121
+ swatchPopoverHelper(): InlineEditor.SwatchPopoverHelper.SwatchPopoverHelper {
122
+ return this.#swatchPopoverHelper;
123
+ }
124
+
125
+ // TODO: Refactor StylesContainer to use getter for node(), so that we can have a `node` setter here: set node().
126
+ set domNode(node: SDK.DOMModel.DOMNode|null) {
127
+ if (this.#computedStyleModelInternal.node === node) {
128
+ return;
129
+ }
130
+ this.#computedStyleModelInternal.node = node;
131
+ this.requestUpdate();
132
+ }
133
+
134
+ node(): SDK.DOMModel.DOMNode|null {
135
+ return this.#computedStyleModelInternal.node;
136
+ }
137
+
138
+ cssModel(): SDK.CSSModel.CSSModel|null {
139
+ return this.#computedStyleModelInternal.cssModel();
140
+ }
141
+
142
+ computedStyleModel(): ComputedStyle.ComputedStyleModel.ComputedStyleModel {
143
+ return this.#computedStyleModelInternal;
144
+ }
145
+
146
+ setActiveProperty(_treeElement: StylePropertyTreeElement|null): void {
147
+ }
148
+
149
+ refreshUpdate(editedSection: StylePropertiesSection, editedTreeElement?: StylePropertyTreeElement): void {
150
+ if (editedTreeElement) {
151
+ for (const section of this.#sections) {
152
+ section.updateVarFunctions(editedTreeElement);
153
+ }
154
+ }
155
+
156
+ if (this.isEditingStyle) {
157
+ return;
158
+ }
159
+
160
+ for (const section of this.#sections) {
161
+ section.update(section === editedSection);
162
+ }
163
+ this.swatchPopoverHelper().reposition();
164
+ }
165
+
166
+ filterRegex(): RegExp|null {
167
+ return null;
168
+ }
169
+
170
+ setEditingStyle(editing: boolean): void {
171
+ this.isEditingStyle = editing;
172
+ }
173
+
174
+ setUserOperation(userOperation: boolean): void {
175
+ this.#userOperation = userOperation;
176
+ }
177
+
178
+ forceUpdate(): void {
179
+ this.hideAllPopovers();
180
+ this.requestUpdate();
181
+ }
182
+
183
+ hideAllPopovers(): void {
184
+ this.#swatchPopoverHelper.hide();
185
+ }
186
+
187
+ allSections(): StylePropertiesSection[] {
188
+ return this.#sections;
189
+ }
190
+
191
+ getVariablePopoverContents(
192
+ matchedStyles: SDK.CSSMatchedStyles.CSSMatchedStyles, variableName: string,
193
+ computedValue: string|null): ElementsComponents.CSSVariableValueView.CSSVariableValueView {
194
+ const registration = matchedStyles.getRegisteredProperty(variableName);
195
+ return new ElementsComponents.CSSVariableValueView.CSSVariableValueView({
196
+ variableName,
197
+ value: computedValue ?? undefined,
198
+ // TODO: provide a goToDefinition to jump to the StylesSidebarPane
199
+ details: registration ? {registration, goToDefinition: () => {}} : undefined,
200
+ });
201
+ }
202
+
203
+ getVariableParserError(_matchedStyles: SDK.CSSMatchedStyles.CSSMatchedStyles, _variableName: string):
204
+ ElementsComponents.CSSVariableValueView.CSSVariableParserError|null {
205
+ return null;
206
+ }
207
+
208
+ jumpToFunctionDefinition(_functionName: string): void {
209
+ }
210
+
211
+ continueEditingElement(_sectionIndex: number, _propertyIndex: number): void {
212
+ }
213
+
214
+ revealProperty(_cssProperty: SDK.CSSProperty.CSSProperty): void {
215
+ }
216
+
217
+ resetFocus(): void {
218
+ const firstVisibleSection = this.#sections[0]?.findCurrentOrNextVisible(true);
219
+ if (firstVisibleSection) {
220
+ firstVisibleSection.element.tabIndex = this.hasFocus() ? -1 : 0;
221
+ }
222
+ }
223
+
224
+ removeSection(_section: StylePropertiesSection): void {
225
+ }
226
+
227
+ focusedSectionIndex(): number {
228
+ return this.#sections.findIndex(section => section.element.hasFocus());
229
+ }
230
+
231
+ addBlankSection(
232
+ _insertAfterSection: StylePropertiesSection, _styleSheetHeader: SDK.CSSStyleSheetHeader.CSSStyleSheetHeader,
233
+ _ruleLocation: TextUtils.TextRange.TextRange): void {
234
+ }
235
+
236
+ jumpToProperty(_propertyName: string, _sectionName?: string, _blockName?: string): boolean {
237
+ return false;
238
+ }
239
+
240
+ jumpToSectionBlock(_section: string): void {
241
+ }
242
+
243
+ jumpToFontPaletteDefinition(_paletteName: string): void {
244
+ }
245
+
246
+ jumpToDeclaration(_valueSource: SDK.CSSMatchedStyles.CSSValueSource): void {
247
+ }
248
+
249
+ addStyleUpdateListener(_listener: () => void): void {
250
+ }
251
+
252
+ removeStyleUpdateListener(_listener: () => void): void {
253
+ }
254
+ }
@@ -24,6 +24,10 @@ export class ComputedStyleTrace extends HTMLElement {
24
24
  #onNavigateToSource: ((event?: Event) => void) = () => {};
25
25
  #ruleOriginNode?: Node;
26
26
 
27
+ connectedCallback(): void {
28
+ this.#render();
29
+ }
30
+
27
31
  set data(data: ComputedStyleTraceData) {
28
32
  this.#selector = data.selector;
29
33
  this.#active = data.active;
@@ -303,7 +303,7 @@ export class ElementsBreadcrumbs extends HTMLElement {
303
303
  data-crumb="true"
304
304
  >
305
305
  <a href="#" draggable=false class="crumb-link"
306
- jslog=${VisualLogging.item().track({click:true})}
306
+ jslog=${VisualLogging.item().track({click:true, resize:true})}
307
307
  @click=${this.#onCrumbClick(crumb.node)}
308
308
  @mousemove=${this.#onCrumbMouseMove(crumb.node)}
309
309
  @mouseleave=${this.#onCrumbMouseLeave(crumb.node)}
@@ -194,7 +194,8 @@ export class StylePropertyEditor extends HTMLElement {
194
194
  return html`
195
195
  <button title=${title}
196
196
  class=${classes}
197
- jslog=${VisualLogging.item().track({click: true}).context(`${propertyName}-${propertyValue}`)}
197
+ jslog=${
198
+ VisualLogging.item().track({click: true, resize: true}).context(`${propertyName}-${propertyValue}`)}
198
199
  @click=${() => this.#onButtonClick(propertyName, propertyValue, selected)}>
199
200
  <devtools-icon style=${transform} name=${iconInfo.iconName}>
200
201
  </devtools-icon>
@@ -19,7 +19,7 @@
19
19
  min-height: 16px;
20
20
  box-sizing: border-box;
21
21
  padding-top: 2px;
22
- white-space: nowrap;
22
+ white-space: var(--override-computed-style-property-white-space, nowrap);
23
23
  user-select: text;
24
24
  }
25
25
 
@@ -54,6 +54,7 @@ import * as NodeStackTraceWidget from './NodeStackTraceWidget.js';
54
54
  import * as PlatformFontsWidget from './PlatformFontsWidget.js';
55
55
  import * as PropertiesWidget from './PropertiesWidget.js';
56
56
  import * as PropertyRenderer from './PropertyRenderer.js';
57
+ import * as StandaloneStylesContainer from './StandaloneStylesContainer.js';
57
58
  import * as StyleEditorWidget from './StyleEditorWidget.js';
58
59
  import * as StylePropertiesSection from './StylePropertiesSection.js';
59
60
  import * as StylePropertyHighlighter from './StylePropertyHighlighter.js';
@@ -90,6 +91,7 @@ export {
90
91
  PlatformFontsWidget,
91
92
  PropertiesWidget,
92
93
  PropertyRenderer,
94
+ StandaloneStylesContainer,
93
95
  StyleEditorWidget,
94
96
  StylePropertiesSection,
95
97
  StylePropertyHighlighter,
@@ -163,11 +163,6 @@ const UIStrings = {
163
163
  * @description Tooltip of the rotate/screen orientation button.
164
164
  */
165
165
  screenOrientationOptions: 'Screen orientation options',
166
- /**
167
- * @description Tooltip shown on the rotate button when screen orientation is locked by the page
168
- * via screen.orientation.lock().
169
- */
170
- screenOrientationLocked: 'Screen orientation is locked by the page',
171
166
  /**
172
167
  * @description Tooltip for a button which turns on/off dual-screen mode, which emulates devices
173
168
  * like tablets which have two screens.
@@ -622,9 +617,6 @@ export class DeviceModeToolbar {
622
617
  private modeMenuClicked(event: {
623
618
  data: Event,
624
619
  }): void {
625
- if (this.model.isScreenOrientationLocked()) {
626
- return;
627
- }
628
620
  const device = this.model.device();
629
621
  const model = this.model;
630
622
  const autoAdjustScaleSetting = this.autoAdjustScaleSetting;
@@ -812,23 +804,6 @@ export class DeviceModeToolbar {
812
804
  }
813
805
  this.persistenceSetting.set(value);
814
806
  }
815
-
816
- // When screen orientation is locked by the page (via screen.orientation.lock()),
817
- // disable the rotate button to prevent user-initiated rotation.
818
- // When unlocked, restore the button to its normal state.
819
- if (this.model.isScreenOrientationLocked()) {
820
- this.modeButton.setEnabled(false);
821
- setTitleForButton(this.modeButton, i18nString(UIStrings.screenOrientationLocked));
822
- } else if (this.cachedModelDevice) {
823
- const modeCount = this.cachedModelDevice.modes.length;
824
- this.modeButton.setEnabled(modeCount >= 2);
825
- setTitleForButton(
826
- this.modeButton,
827
- modeCount === 2 ? i18nString(UIStrings.rotate) : i18nString(UIStrings.screenOrientationOptions));
828
- } else if (this.model.type() === EmulationModel.DeviceModeModel.Type.Responsive) {
829
- this.modeButton.setEnabled(true);
830
- setTitleForButton(this.modeButton, i18nString(UIStrings.rotate));
831
- }
832
807
  }
833
808
 
834
809
  restore(): void {
@@ -197,7 +197,7 @@ export class LighthouseReportRenderer {
197
197
  continue;
198
198
  }
199
199
 
200
- auditEl.setAttribute('jslog', `${VisualLogging.item(`lighthouse.audit.${id}`)}`);
200
+ auditEl.setAttribute('jslog', `${VisualLogging.item(`lighthouse.audit.${id}`).track({resize: true})}`);
201
201
 
202
202
  let state: string|undefined;
203
203
  for (const className of auditEl.classList) {
@@ -60,7 +60,7 @@ function renderEndiannessSetting(
60
60
  data-endianness="true" @change=${(e: Event) => onEndiannessChanged((e.target as HTMLSelectElement).value as Endianness)}>
61
61
  ${[Endianness.LITTLE, Endianness.BIG].map(endianness => {
62
62
  return html`<option value=${endianness} .selected=${currentEndiannes === endianness}
63
- jslog=${VisualLogging.item(Platform.StringUtilities.toKebabCase(endianness)).track({click: true})}>${
63
+ jslog=${VisualLogging.item(Platform.StringUtilities.toKebabCase(endianness)).track({click: true, resize: true})}>${
64
64
  i18n.i18n.lockedString(endianness)}</option>`;
65
65
  })}
66
66
  </select>
@@ -104,7 +104,7 @@ export const DEFAULT_VIEW: View = (input: ViewInput, _output: undefined, target:
104
104
  ${VALUE_TYPE_MODE_LIST.filter(x => isValidMode(type, x)).map(mode => {
105
105
  return html`
106
106
  <option value=${mode} .selected=${input.valueTypeModes.get(type) === mode}
107
- jslog=${VisualLogging.item(mode).track({click: true})}>${
107
+ jslog=${VisualLogging.item(mode).track({click: true, resize: true})}>${
108
108
  i18n.i18n.lockedString(mode)}
109
109
  </option>`;
110
110
  })}
@@ -84,7 +84,7 @@ const DEFAULT_VIEW: View = (input, _output, target) => {
84
84
  @contextmenu=${(e: Event) => input.onPlayerContextMenu(player.playerID, e)}
85
85
  role="option"
86
86
  aria-selected=${isSelected}
87
- jslog=${VisualLogging.item('player').track({click: true})}>
87
+ jslog=${VisualLogging.item('player').track({click: true, resize: true})}>
88
88
  <div class="player-entry-status-icon vbox">
89
89
  <div class="player-entry-status-icon-centering">
90
90
  <devtools-icon name=${player.iconName}></devtools-icon>
@@ -408,7 +408,8 @@ export class NetworkLogViewColumns {
408
408
 
409
409
  private createWaterfallHeader(): void {
410
410
  this.waterfallHeaderElement = this.waterfallColumn.contentElement.createChild('div', 'network-waterfall-header');
411
- this.waterfallHeaderElement.setAttribute('jslog', `${VisualLogging.tableHeader('waterfall').track({click: true})}`);
411
+ this.waterfallHeaderElement.setAttribute(
412
+ 'jslog', `${VisualLogging.tableHeader('waterfall').track({click: true, resize: true})}`);
412
413
  this.waterfallHeaderElement.addEventListener('click', waterfallHeaderClicked.bind(this));
413
414
  this.waterfallHeaderElement.addEventListener('contextmenu', event => {
414
415
  const contextMenu = new UI.ContextMenu.ContextMenu(event);
@@ -62,7 +62,7 @@ export const DEFAULT_VIEW: View = (input, output, target) => {
62
62
  ${headers.map(header => html`
63
63
  <devtools-header-section-row
64
64
  .data=${{ header }}
65
- jslog=${VisualLogging.item('request-header')}
65
+ jslog=${VisualLogging.item('request-header').track({resize: true})}
66
66
  ></devtools-header-section-row>
67
67
  `)}
68
68
  `, target);
@@ -990,7 +990,7 @@ function renderTargetSelectorRow(input: ViewInput): Lit.TemplateResult|undefined
990
990
  jslog=${VisualLogging.dropDown('target-selector').track({change: true})}
991
991
  @change=${input.onTargetSelected}>
992
992
  ${input.targets.map(target => html`
993
- <option jslog=${VisualLogging.item('target').track({click: true})}
993
+ <option jslog=${VisualLogging.item('target').track({click: true, resize: true})}
994
994
  value=${target.id()} ?selected=${target.id() === input.targetId}>
995
995
  ${target.name()} (${target.inspectedURL()})
996
996
  </option>`)}
@@ -140,7 +140,7 @@ export const DEFAULT_VIEW = (input: ViewInput, _output: ViewOutput, target: HTML
140
140
  @keydown=${(event: Event) => onKeyDown(recording.storageName, event)}
141
141
  @click=${(event: Event) => onOpenClick(recording.storageName, event)}
142
142
  jslog=${VisualLogging.item()
143
- .track({ click: true })
143
+ .track({ click: true, resize: true })
144
144
  .context('recording')}>
145
145
  <div class="icon">
146
146
  <devtools-icon name="flow">
@@ -646,7 +646,7 @@ export class StepEditor extends LitElement {
646
646
  #renderTypeRow(editable: boolean): Lit.TemplateResult {
647
647
  this.#renderedAttributes.add('type');
648
648
  // clang-format off
649
- return html`<div class="row attribute" data-attribute="type" jslog=${VisualLogging.treeItem('type')}>
649
+ return html`<div class="row attribute" data-attribute="type" jslog=${VisualLogging.treeItem('type').track({resize: true})}>
650
650
  <div id="type">type<span class="separator">:</span></div>
651
651
  <devtools-suggestion-input
652
652
  aria-labelledby="type"
@@ -667,7 +667,7 @@ export class StepEditor extends LitElement {
667
667
  return;
668
668
  }
669
669
  // clang-format off
670
- return html`<div class="row attribute" data-attribute=${attribute} jslog=${VisualLogging.treeItem(Platform.StringUtilities.toKebabCase(attribute))}>
670
+ return html`<div class="row attribute" data-attribute=${attribute} jslog=${VisualLogging.treeItem(Platform.StringUtilities.toKebabCase(attribute)).track({resize: true})}>
671
671
  <div id=${attribute}>${attribute}<span class="separator">:</span></div>
672
672
  <devtools-suggestion-input
673
673
  .disabled=${this.disabled}
@@ -706,7 +706,7 @@ export class StepEditor extends LitElement {
706
706
  }
707
707
  // clang-format off
708
708
  return html`
709
- <div class="attribute" data-attribute="frame" jslog=${VisualLogging.treeItem('frame')}>
709
+ <div class="attribute" data-attribute="frame" jslog=${VisualLogging.treeItem('frame').track({resize: true})}>
710
710
  <div class="row">
711
711
  <div id="frame">frame<span class="separator">:</span></div>
712
712
  ${this.#renderDeleteButton('frame')}
@@ -345,7 +345,8 @@ export class ShortcutListItem {
345
345
  this.settingsTab = settingsTab;
346
346
  this.item = item;
347
347
  this.element = document.createElement('div');
348
- this.element.setAttribute('jslog', `${VisualLogging.item().context(item.id()).track({keydown: 'Escape'})}`);
348
+ this.element.setAttribute(
349
+ 'jslog', `${VisualLogging.item().context(item.id()).track({keydown: 'Escape', resize: true})}`);
349
350
  this.editedShortcuts = new Map();
350
351
  this.shortcutInputs = new Map();
351
352
  this.shortcuts = UI.ShortcutRegistry.ShortcutRegistry.instance().shortcutsForAction(item.id());
@@ -404,7 +404,7 @@ export class HeadersViewComponent extends HTMLElement {
404
404
  // clang-format off
405
405
  return html`
406
406
  <div class="row" data-block-index=${blockIndex}
407
- jslog=${VisualLogging.treeItem(pattern === '*' ? pattern : undefined)}>
407
+ jslog=${VisualLogging.treeItem(pattern === '*' ? pattern : undefined).track({resize: true})}>
408
408
  <div>${i18n.i18n.lockedString('Apply to')}</div>
409
409
  <div class="separator">:</div>
410
410
  ${this.#renderEditable(pattern, 'apply-to')}
@@ -427,7 +427,7 @@ export class HeadersViewComponent extends HTMLElement {
427
427
  // clang-format off
428
428
  return html`
429
429
  <div class="row padded" data-block-index=${blockIndex} data-header-index=${headerIndex}
430
- jslog=${VisualLogging.treeItem(header.name).parent('headers-editor-row-parent')}>
430
+ jslog=${VisualLogging.treeItem(header.name).parent('headers-editor-row-parent').track({resize: true})}>
431
431
  ${this.#renderEditable(header.name, 'header-name red', true)}
432
432
  <div class="separator">:</div>
433
433
  ${this.#renderEditable(header.value, 'header-value')}
@@ -111,7 +111,7 @@ export class BreadcrumbsUI extends HTMLElement {
111
111
  // clang-format off
112
112
  return html`
113
113
  <div class="breadcrumb" @contextmenu=${(event: Event) => this.#onContextMenu(event, breadcrumb)} @click=${() => this.#activateBreadcrumb(breadcrumb)}
114
- jslog=${VisualLogging.item('timeline.breadcrumb-select').track({click: true})}>
114
+ jslog=${VisualLogging.item('timeline.breadcrumb-select').track({click: true, resize: true})}>
115
115
  <span class="${(breadcrumb === this.#activeBreadcrumb) ? 'active-breadcrumb' : ''} range">
116
116
  ${(index === 0) ?
117
117
  `Full range (${i18n.TimeUtilities.preciseMillisToString(breadcrumbRange, 2)})` :
@@ -424,7 +424,7 @@ export const DEFAULT_VIEW: (input: SidebarAnnotationsTabViewInput, output: objec
424
424
  @mouseout=${() => (annotation.type === 'ENTRY_LABEL') ? input.onAnnotationHoverOut() : null}
425
425
  aria-label=${label}
426
426
  tabindex="0"
427
- jslog=${VisualLogging.item(`timeline.annotation-sidebar.annotation-${jslogForAnnotation(annotation)}`).track({click: true})}
427
+ jslog=${VisualLogging.item(`timeline.annotation-sidebar.annotation-${jslogForAnnotation(annotation)}`).track({click: true, resize: true})}
428
428
  >
429
429
  <div class="annotation">
430
430
  ${renderAnnotationIdentifier(annotation, input.annotationEntryToColorMap)}
@@ -1,7 +1,7 @@
1
1
  Name: Dependencies sourced from the upstream `chromium` repository
2
2
  URL: Internal
3
3
  Version: N/A
4
- Revision: 34d76fab4749ed03ad2a80ed0b2770700ad0cfbc
4
+ Revision: ccc5d606ce500bcd7af0b441cfc69add07349417
5
5
  Update Mechanism: Manual (https://crbug.com/428069060)
6
6
  License: BSD-3-Clause
7
7
  License File: LICENSE
@@ -1,10 +1,10 @@
1
1
  Name: Puppeteer Core
2
2
  Short Name: Puppeteer Core
3
3
  URL: https://github.com/puppeteer/puppeteer/tree/main/packages/puppeteer-core
4
- Version: 24.37.5
4
+ Version: 24.38.0
5
5
  License: Apache-2.0
6
6
  License File: LICENSE
7
- Revision: fcb37e3b3a4f6b55b6f81a40811243260bcea16f
7
+ Revision: d3356fac46478974c5b88ba2b26b26954cb741ff
8
8
  Security Critical: no
9
9
  Shipped: yes
10
10
  Update Mechanism: Autoroll
@@ -1 +1 @@
1
- {"version":3,"file":"Navigation.d.ts","sourceRoot":"","sources":["../../../../../src/bidi/core/Navigation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAC,YAAY,EAAC,MAAM,8BAA8B,CAAC;AAE1D,OAAO,EAAkB,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAExE,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,cAAc,CAAC;AAE1C;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,IAAI,CAAC;CACjB;AAED;;GAEG;AACH,qBAAa,UAAW,SAAQ,YAAY,CAAC;IAC3C,gEAAgE;IAChE,OAAO,EAAE,OAAO,CAAC;IACjB,iDAAiD;IACjD,QAAQ,EAAE,cAAc,CAAC;IACzB,sCAAsC;IACtC,MAAM,EAAE,cAAc,CAAC;IACvB,2CAA2C;IAC3C,OAAO,EAAE,cAAc,CAAC;CACzB,CAAC;;IACA,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,GAAG,UAAU;IAYjD,OAAO;IA2GP,IAAI,QAAQ,IAAI,OAAO,CAEtB;IACD,IAAI,OAAO,IAAI,OAAO,GAAG,SAAS,CAEjC;IACD,IAAI,UAAU,IAAI,UAAU,GAAG,SAAS,CAEvC;IAGD,OAAO,CAAC,OAAO;IAIN,CAAC,aAAa,CAAC,IAAI,IAAI;CAIjC"}
1
+ {"version":3,"file":"Navigation.d.ts","sourceRoot":"","sources":["../../../../../src/bidi/core/Navigation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAC,YAAY,EAAC,MAAM,8BAA8B,CAAC;AAE1D,OAAO,EAAkB,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAExE,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,cAAc,CAAC;AAE1C;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,IAAI,CAAC;CACjB;AAED;;GAEG;AACH,qBAAa,UAAW,SAAQ,YAAY,CAAC;IAC3C,gEAAgE;IAChE,OAAO,EAAE,OAAO,CAAC;IACjB,iDAAiD;IACjD,QAAQ,EAAE,cAAc,CAAC;IACzB,sCAAsC;IACtC,MAAM,EAAE,cAAc,CAAC;IACvB,2CAA2C;IAC3C,OAAO,EAAE,cAAc,CAAC;CACzB,CAAC;;IACA,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,GAAG,UAAU;IAYjD,OAAO;IA4GP,IAAI,QAAQ,IAAI,OAAO,CAEtB;IACD,IAAI,OAAO,IAAI,OAAO,GAAG,SAAS,CAEjC;IACD,IAAI,UAAU,IAAI,UAAU,GAAG,SAAS,CAEvC;IAGD,OAAO,CAAC,OAAO;IAIN,CAAC,aAAa,CAAC,IAAI,IAAI;CAIjC"}