chrome-devtools-frontend 1.0.1535712 → 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 (77) hide show
  1. package/docs/contributing/images/issues-nearestslo.png +0 -0
  2. package/docs/contributing/issues.md +17 -21
  3. package/front_end/core/common/Console.ts +1 -8
  4. package/front_end/core/common/ParsedURL.ts +10 -20
  5. package/front_end/core/common/SegmentedRange.ts +1 -2
  6. package/front_end/core/common/StringOutputStream.ts +1 -4
  7. package/front_end/core/i18n/i18nImpl.ts +0 -24
  8. package/front_end/core/sdk/AnimationModel.ts +1 -2
  9. package/front_end/core/sdk/CSSMatchedStyles.ts +2 -2
  10. package/front_end/core/sdk/CSSModel.ts +1 -1
  11. package/front_end/core/sdk/CSSProperty.ts +3 -6
  12. package/front_end/core/sdk/CSSStyleDeclaration.ts +4 -4
  13. package/front_end/core/sdk/DebuggerModel.ts +1 -2
  14. package/front_end/core/sdk/EnhancedTracesParser.ts +4 -0
  15. package/front_end/core/sdk/SourceMap.ts +2 -3
  16. package/front_end/entrypoints/node_app/NodeConnectionsPanel.ts +2 -1
  17. package/front_end/generated/InspectorBackendCommands.js +1 -2
  18. package/front_end/generated/SupportedCSSProperties.js +19 -0
  19. package/front_end/generated/protocol.ts +0 -27
  20. package/front_end/panels/accessibility/AccessibilityNodeView.ts +18 -17
  21. package/front_end/panels/accessibility/AccessibilitySidebarView.ts +9 -12
  22. package/front_end/panels/ai_assistance/components/ChatView.ts +5 -4
  23. package/front_end/panels/application/AppManifestView.ts +7 -6
  24. package/front_end/panels/application/ApplicationPanelSidebar.ts +4 -4
  25. package/front_end/panels/application/OpenedWindowDetailsView.ts +6 -6
  26. package/front_end/panels/application/StorageView.ts +9 -8
  27. package/front_end/panels/application/components/BackForwardCacheView.ts +333 -314
  28. package/front_end/panels/application/components/ProtocolHandlersView.ts +3 -2
  29. package/front_end/panels/application/preloading/components/PreloadingDisabledInfobar.ts +2 -1
  30. package/front_end/panels/browser_debugger/ObjectEventListenersSidebarPane.ts +8 -8
  31. package/front_end/panels/common/BadgeNotification.ts +2 -1
  32. package/front_end/panels/common/GdpSignUpDialog.ts +2 -1
  33. package/front_end/panels/console/ConsoleInsightTeaser.ts +8 -2
  34. package/front_end/panels/console/ConsolePinPane.ts +12 -7
  35. package/front_end/panels/developer_resources/DeveloperResourcesView.ts +9 -9
  36. package/front_end/panels/elements/ComputedStyleWidget.ts +7 -7
  37. package/front_end/panels/elements/EventListenersWidget.ts +9 -9
  38. package/front_end/panels/elements/NodeStackTraceWidget.ts +6 -6
  39. package/front_end/panels/elements/PlatformFontsWidget.ts +5 -5
  40. package/front_end/panels/elements/PropertiesWidget.ts +8 -8
  41. package/front_end/panels/layer_viewer/Layers3DView.ts +2 -1
  42. package/front_end/panels/layer_viewer/PaintProfilerView.ts +3 -3
  43. package/front_end/panels/network/RequestCookiesView.ts +2 -1
  44. package/front_end/panels/network/RequestTimingView.ts +2 -1
  45. package/front_end/panels/recorder/RecorderController.ts +34 -23
  46. package/front_end/panels/recorder/components/CreateRecordingView.ts +249 -240
  47. package/front_end/panels/security/CookieControlsView.ts +2 -1
  48. package/front_end/panels/security/CookieReportView.ts +3 -2
  49. package/front_end/panels/settings/AISettingsTab.ts +2 -1
  50. package/front_end/panels/settings/KeybindsSettingsTab.ts +6 -0
  51. package/front_end/panels/settings/components/SyncSection.ts +2 -1
  52. package/front_end/panels/sources/DebuggerPausedMessage.ts +4 -3
  53. package/front_end/panels/sources/ResourceOriginPlugin.ts +3 -2
  54. package/front_end/panels/sources/SourcesNavigator.ts +2 -1
  55. package/front_end/panels/sources/TabbedEditorContainer.ts +3 -2
  56. package/front_end/panels/sources/WatchExpressionsSidebarPane.ts +9 -9
  57. package/front_end/panels/timeline/TimelineUIUtils.ts +3 -2
  58. package/front_end/panels/timeline/components/DetailsView.ts +5 -4
  59. package/front_end/panels/timeline/components/FieldSettingsDialog.ts +2 -1
  60. package/front_end/panels/timeline/components/LiveMetricsView.ts +5 -4
  61. package/front_end/panels/timeline/components/MetricCompareStrings.ts +25 -24
  62. package/front_end/panels/timeline/components/insights/LCPDiscovery.ts +2 -1
  63. package/front_end/third_party/chromium/README.chromium +1 -1
  64. package/front_end/ui/components/docs/tooltip/basic.ts +1 -1
  65. package/front_end/ui/components/tooltips/Tooltip.ts +32 -17
  66. package/front_end/ui/i18n/i18n.ts +31 -0
  67. package/front_end/ui/legacy/SoftDropDown.ts +1 -12
  68. package/front_end/ui/legacy/ViewManager.ts +2 -4
  69. package/front_end/ui/legacy/Widget.ts +33 -17
  70. package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +2 -1
  71. package/front_end/ui/legacy/legacy.ts +0 -2
  72. package/front_end/ui/visual_logging/KnownContextValues.ts +3 -0
  73. package/mcp/mcp.ts +1 -0
  74. package/package.json +1 -1
  75. package/front_end/ui/components/docs/recorder_create_recording_view/basic.html +0 -20
  76. package/front_end/ui/components/docs/recorder_create_recording_view/basic.ts +0 -27
  77. package/front_end/ui/legacy/ThrottledWidget.ts +0 -48
@@ -48,10 +48,11 @@ to Markdown (with a preview below the text input box).
48
48
  1. Replace `<from chrome://version/>` and `<OS version>` with the relevant
49
49
  version information.
50
50
  1. Outline exact steps to reproduce the problem. Make sure to provide steps
51
- that are easy and accessible. Ideally create a minified test case on
52
- [glitch.com](http://glitch.com) or [GitHub](http://github.com). Also
53
- make sure to include screenshots and videos that help us to reproduce
54
- and understand the problem you are facing.
51
+ that are easy and accessible. Ideally create a [minimal, reproducible
52
+ example](https://stackoverflow.com/help/minimal-reproducible-example), e.g.
53
+ on [codepen.io](https://codepen.io), [jsbin.com](https://jsbin.com) or
54
+ [GitHub](https://github.com). Also make sure to include screenshots and
55
+ videos that help us to reproduce and understand the problem you are facing.
55
56
 
56
57
  ## Overview
57
58
 
@@ -173,25 +174,21 @@ DevTools we want to
173
174
  1. reduce the number of regressions that ship to the (Chrome) Stable channel, and
174
175
  2. reduce the number of bugs overall.
175
176
 
176
- The following SLOs (Service Level Objectives) apply to issues of type Bug,
177
- Vulnerability, and Privacy Issue. other types of issues such as Feature Request
178
- or Task are out of scope for SLOs (with the notable exception of Postmortem action
179
- items, where Chrome also enforces SLOs for non-bug issues). We also explicitly
180
- restrict these SLOs to bugs in [crbug], and are not concerned with bugs that are
181
- tracked in other places such as GitHub. Below is a high level summary of our SLOs
182
- (Googlers can check the [Chrome DevTools SLO Policy] and [Chrome SLO Policy] for
183
- more details):
177
+ The following SLOs (Service Level Objectives) apply to issues of type "Bug",
178
+ "Vulnerability", and "Privacy Issue". other types of issues such as "Feature
179
+ Request" or "Task" are out of scope for SLOs (with the notable exception of
180
+ Postmortem action items, where Chrome also enforces SLOs for non-bug issues).
181
+ We also explicitly restrict these SLOs to bugs in [crbug], and are not concerned
182
+ with bugs that are tracked in other places such as GitHub. Below is a high level
183
+ summary of our SLOs (Googlers can check the [Chrome SLO Policy] for details):
184
184
 
185
185
  | | Assignment | Response | Closure
186
186
  | ---- | -------------- | ------------------ | --------
187
187
  | `P0` | 1 business day | Every business day | 1 week
188
188
  | `P1` | 1 week | 1 week | 4 weeks
189
- | `P2` | 2 months | - | 6 months
190
- | `P3` | 1 year | - | -
191
189
 
192
- The first two rows are identical to [go/chrome-slo], with the last two rows being
193
- specific to Chrome DevTools. [crbug] provides a **Nearest SLO** column that
194
- surfaces SLO violations easily:
190
+ These are identical to [go/chrome-slo]. [crbug] provides a **Nearest SLO**
191
+ column that surfaces SLO violations easily:
195
192
 
196
193
  ![Nearest SLO in crbug](./images/issues-nearestslo.png "Nearest SLO in crbug")
197
194
 
@@ -200,7 +197,7 @@ surfaces SLO violations easily:
200
197
 
201
198
  ### Release Blocking Issues
202
199
 
203
- In accordance with go/chrome-slo there are special SLOs for issues that are
200
+ In compliance with [go/chrome-slo] there are special SLOs for issues that are
204
201
  severe enough to block a release shipping to users (see [go/chrome-release-slos]).
205
202
  They apply to bug types in the same way as the above SLOs.
206
203
 
@@ -237,12 +234,11 @@ refreshed every 2-4 hours, to see SLO compliance for a given lead.
237
234
  [How to file a good browser bug]: https://web.dev/articles/how-to-file-a-good-bug
238
235
  [Open Chromium DevTools Bugs]: https://issues.chromium.org/issues?q=status:open%20componentid:1457055%2B%20type:bug
239
236
  [goo.gle/devtools-bug]: https://goo.gle/devtools-bug
240
- [Chrome DevTools SLO Policy]: https://b.corp.google.com/slos/61348
241
- [Chrome SLO Policy]: https://b.corp.google.com/slos/1834
237
+ [Chrome SLO Policy]: http://b/slos/1834
242
238
  [go/chrome-slo]: http://go/chrome-slo
243
239
  [go/chrome-release-slos]: http://go/chrome-release-slos
244
240
  [go/chrome-tooling/project-management]: http://go/chrome-tooling/project-management
245
- [Buganizer SLO Compliance]: go/b-slo-compliance
241
+ [Buganizer SLO Compliance]: http://go/b-slo-compliance
246
242
  [TaskFlow]: http://go/chrome-devtools:taskflow
247
243
  [TaskFlow Inbox]: http://go/chrome-devtools:taskflow/inbox
248
244
  [Chromium>Platform>DevTools]: https://issues.chromium.org/components/1457055
@@ -8,14 +8,7 @@ import {reveal} from './Revealer.js';
8
8
  let consoleInstance: Console|undefined;
9
9
 
10
10
  export class Console extends ObjectWrapper<EventTypes> {
11
- readonly #messages: Message[];
12
- /**
13
- * Instantiable via the instance() factory below.
14
- */
15
- constructor() {
16
- super();
17
- this.#messages = [];
18
- }
11
+ readonly #messages: Message[] = [];
19
12
 
20
13
  static instance(opts?: {forceNew: boolean}): Console {
21
14
  if (!consoleInstance || opts?.forceNew) {
@@ -57,33 +57,23 @@ type BrandedPathString =
57
57
  Platform.DevToolsPath.UrlString|Platform.DevToolsPath.RawPathString|Platform.DevToolsPath.EncodedPathString;
58
58
 
59
59
  export class ParsedURL {
60
- isValid: boolean;
60
+ isValid = false;
61
61
  url: string;
62
- scheme: string;
63
- user: string;
64
- host: string;
65
- port: string;
66
- path: string;
67
- queryParams: string;
68
- fragment: string;
69
- folderPathComponents: string;
70
- lastPathComponent: string;
62
+ scheme = '';
63
+ user = '';
64
+ host = '';
65
+ port = '';
66
+ path = '';
67
+ queryParams = '';
68
+ fragment = '';
69
+ folderPathComponents = '';
70
+ lastPathComponent = '';
71
71
  readonly blobInnerScheme: string|undefined;
72
72
  #displayName?: string;
73
73
  #dataURLDisplayName?: string;
74
74
 
75
75
  constructor(url: string) {
76
- this.isValid = false;
77
76
  this.url = url;
78
- this.scheme = '';
79
- this.user = '';
80
- this.host = '';
81
- this.port = '';
82
- this.path = '';
83
- this.queryParams = '';
84
- this.fragment = '';
85
- this.folderPathComponents = '';
86
- this.lastPathComponent = '';
87
77
 
88
78
  const isBlobUrl = this.url.startsWith('blob:');
89
79
  const urlToMatch = isBlobUrl ? url.substring(5) : url;
@@ -24,11 +24,10 @@ export class Segment<T> {
24
24
  }
25
25
 
26
26
  export class SegmentedRange<T> {
27
- #segments: Array<Segment<T>>;
27
+ #segments: Array<Segment<T>> = [];
28
28
  readonly #mergeCallback: ((arg0: Segment<T>, arg1: Segment<T>) => Segment<T>| null)|undefined;
29
29
 
30
30
  constructor(mergeCallback?: ((arg0: Segment<T>, arg1: Segment<T>) => Segment<T>| null)) {
31
- this.#segments = [];
32
31
  this.#mergeCallback = mergeCallback;
33
32
  }
34
33
 
@@ -8,10 +8,7 @@ export interface OutputStream {
8
8
  }
9
9
 
10
10
  export class StringOutputStream implements OutputStream {
11
- #data: string;
12
- constructor() {
13
- this.#data = '';
14
- }
11
+ #data = '';
15
12
 
16
13
  async write(chunk: string): Promise<void> {
17
14
  this.#data += chunk;
@@ -1,7 +1,6 @@
1
1
  // Copyright 2020 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-imperative-dom-api */
5
4
 
6
5
  import * as I18n from '../../third_party/i18n/i18n.js';
7
6
  import type * as Platform from '../platform/platform.js';
@@ -117,29 +116,6 @@ export function registerUIStrings(
117
116
  return i18nInstance.registerFileStrings(path, stringStructure);
118
117
  }
119
118
 
120
- /**
121
- * Returns a span element that may contains other DOM element as placeholders
122
- */
123
- export function getFormatLocalizedString(
124
- registeredStrings: I18n.LocalizedStringSet.RegisteredFileStrings, stringId: string,
125
- placeholders: Record<string, Object>): HTMLSpanElement {
126
- const formatter =
127
- registeredStrings.getLocalizedStringSetFor(DevToolsLocale.instance().locale).getMessageFormatterFor(stringId);
128
-
129
- const element = document.createElement('span');
130
- for (const icuElement of formatter.getAst()) {
131
- if (icuElement.type === /* argumentElement */ 1) {
132
- const placeholderValue = placeholders[icuElement.value];
133
- if (placeholderValue) {
134
- element.append(placeholderValue as Node | string);
135
- }
136
- } else if ('value' in icuElement) {
137
- element.append(String(icuElement.value));
138
- }
139
- }
140
- return element;
141
- }
142
-
143
119
  export function serializeUIString(string: string, values: Record<string, Object> = {}): string {
144
120
  const serializedMessage = {string, values};
145
121
  return JSON.stringify(serializedMessage);
@@ -836,12 +836,11 @@ export class AnimationGroup {
836
836
  readonly #id: string;
837
837
  #scrollNode: AnimationDOMNode|undefined;
838
838
  #animations: AnimationImpl[];
839
- #paused: boolean;
839
+ #paused = false;
840
840
  constructor(animationModel: AnimationModel, id: string, animations: AnimationImpl[]) {
841
841
  this.#animationModel = animationModel;
842
842
  this.#id = id;
843
843
  this.#animations = animations;
844
- this.#paused = false;
845
844
  }
846
845
 
847
846
  isScrollDriven(): boolean {
@@ -361,7 +361,7 @@ export class CSSMatchedStyles {
361
361
  inheritedResult.matchedCSSRules = cleanUserAgentPayload(inheritedResult.matchedCSSRules);
362
362
  }
363
363
 
364
- this.#environmentVariables = await this.cssModel().getEnvironmentVariales();
364
+ this.#environmentVariables = await this.cssModel().getEnvironmentVariables();
365
365
 
366
366
  this.#mainDOMCascade = await this.buildMainCascade(
367
367
  inlinePayload, attributesPayload, matchedPayload, inheritedPayload, animationStylesPayload,
@@ -450,7 +450,7 @@ export class CSSMatchedStyles {
450
450
  nodeCascades.push(new NodeCascade(this, nodeStyles, this.#node, false /* #isInherited */));
451
451
 
452
452
  // Walk the node structure and identify styles with inherited properties.
453
- let parentNode: (DOMNode|null) = this.#node.parentNode;
453
+ let parentNode: DOMNode|null = this.#node.parentNode;
454
454
  const traverseParentInFlatTree = async(node: DOMNode): Promise<DOMNode|null> => {
455
455
  if (node.hasAssignedSlot()) {
456
456
  return await node.assignedSlot?.deferredNode.resolvePromise() ?? null;
@@ -407,7 +407,7 @@ export class CSSModel extends SDKModel<EventTypes> {
407
407
  };
408
408
  }
409
409
 
410
- async getEnvironmentVariales(): Promise<Record<string, string>> {
410
+ async getEnvironmentVariables(): Promise<Record<string, string>> {
411
411
  const response = await this.agent.invoke_getEnvironmentVariables();
412
412
  if (response.getError()) {
413
413
  return {};
@@ -41,9 +41,9 @@ export class CSSProperty extends Common.ObjectWrapper.ObjectWrapper<EventTypes>
41
41
  implicit: boolean;
42
42
  text: string|null|undefined;
43
43
  range: TextUtils.TextRange.TextRange|null;
44
- #active: boolean;
45
- #nameRange: TextUtils.TextRange.TextRange|null;
46
- #valueRange: TextUtils.TextRange.TextRange|null;
44
+ #active = true;
45
+ #nameRange: TextUtils.TextRange.TextRange|null = null;
46
+ #valueRange: TextUtils.TextRange.TextRange|null = null;
47
47
  #invalidString?: Common.UIString.LocalizedString;
48
48
  #longhandProperties: CSSProperty[] = [];
49
49
 
@@ -62,9 +62,6 @@ export class CSSProperty extends Common.ObjectWrapper.ObjectWrapper<EventTypes>
62
62
  this.implicit = implicit; // A longhand, implicitly set by missing values of shorthand.
63
63
  this.text = text;
64
64
  this.range = range ? TextUtils.TextRange.TextRange.fromObject(range) : null;
65
- this.#active = true;
66
- this.#nameRange = null;
67
- this.#valueRange = null;
68
65
 
69
66
  if (longhandProperties && longhandProperties.length > 0) {
70
67
  for (const property of longhandProperties) {
@@ -14,14 +14,14 @@ import type {Target} from './Target.js';
14
14
  export class CSSStyleDeclaration {
15
15
  readonly #cssModel: CSSModel;
16
16
  parentRule: CSSRule|null;
17
- #allProperties!: CSSProperty[];
17
+ #allProperties: CSSProperty[] = [];
18
18
  styleSheetId?: Protocol.CSS.StyleSheetId;
19
- range!: TextUtils.TextRange.TextRange|null;
19
+ range: TextUtils.TextRange.TextRange|null = null;
20
20
  cssText?: string;
21
21
  #shorthandValues = new Map<string, string>();
22
22
  #shorthandIsImportant = new Set<string>();
23
23
  #activePropertyMap = new Map<string, CSSProperty>();
24
- #leadingProperties!: CSSProperty[]|null;
24
+ #leadingProperties: CSSProperty[]|null = null;
25
25
  type: Type;
26
26
  // For CSSStyles coming from animations,
27
27
  // This holds the name of the animation.
@@ -97,7 +97,7 @@ export class CSSStyleDeclaration {
97
97
  this.#computeInactiveProperties();
98
98
 
99
99
  // TODO(changhaohan): verify if this #activePropertyMap is still necessary, or if it is
100
- // providing different information against the activeness in allPropertiesInternal.
100
+ // providing different information against the activeness in #allProperties.
101
101
  this.#activePropertyMap = new Map();
102
102
  for (const property of this.#allProperties) {
103
103
  if (!property.activeInStyle()) {
@@ -1402,14 +1402,13 @@ export class Scope implements ScopeChainEntry {
1402
1402
  readonly #name: string|undefined;
1403
1403
  #ordinal: number;
1404
1404
  readonly #locationRange: LocationRange|null;
1405
- #object: RemoteObject|null;
1405
+ #object: RemoteObject|null = null;
1406
1406
  constructor(callFrame: CallFrame, ordinal: number) {
1407
1407
  this.#callFrame = callFrame;
1408
1408
  this.#payload = callFrame.getPayload().scopeChain[ordinal];
1409
1409
  this.#type = this.#payload.type;
1410
1410
  this.#name = this.#payload.name;
1411
1411
  this.#ordinal = ordinal;
1412
- this.#object = null;
1413
1412
 
1414
1413
  const start =
1415
1414
  this.#payload.startLocation ? Location.fromPayload(callFrame.debuggerModel, this.#payload.startLocation) : null;
@@ -164,6 +164,10 @@ export class EnhancedTracesParser {
164
164
  if (frame.url === 'about:blank') {
165
165
  continue;
166
166
  }
167
+ if (!frame.isInPrimaryMainFrame) {
168
+ continue;
169
+ }
170
+
167
171
  const frameId = frame.frame as string as Protocol.Target.TargetID;
168
172
  if (!this.#targets.find(target => target.targetId === frameId)) {
169
173
  const frameType = frame.isOutermostMainFrame ? 'page' : 'iframe';
@@ -128,7 +128,7 @@ export class SourceMap {
128
128
  readonly #compiledURL: Platform.DevToolsPath.UrlString;
129
129
  readonly #sourceMappingURL: Platform.DevToolsPath.UrlString;
130
130
  readonly #baseURL: Platform.DevToolsPath.UrlString;
131
- #mappings: SourceMapEntry[]|null;
131
+ #mappings: SourceMapEntry[]|null = null;
132
132
 
133
133
  readonly #sourceInfos: SourceInfo[] = [];
134
134
  readonly #sourceInfoByURL = new Map<Platform.DevToolsPath.UrlString, SourceInfo>();
@@ -154,7 +154,6 @@ export class SourceMap {
154
154
  this.#baseURL = (Common.ParsedURL.schemeIs(sourceMappingURL, 'data:')) ? compiledURL : sourceMappingURL;
155
155
  this.#debugId = 'debugId' in payload ? (payload.debugId as DebugId | undefined) : undefined;
156
156
 
157
- this.#mappings = null;
158
157
  if ('sections' in this.#json) {
159
158
  if (this.#json.sections.find(section => 'url' in section)) {
160
159
  Common.Console.Console.instance().warn(
@@ -435,7 +434,7 @@ export class SourceMap {
435
434
  #computeReverseMappings(mappings: SourceMapEntry[]): void {
436
435
  const reverseMappingsPerUrl = new Map<Platform.DevToolsPath.UrlString, number[]>();
437
436
  for (let i = 0; i < mappings.length; i++) {
438
- const entryUrl = mappings[i].sourceURL;
437
+ const entryUrl = mappings[i]?.sourceURL;
439
438
  if (!entryUrl) {
440
439
  continue;
441
440
  }
@@ -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.
@@ -640,6 +640,7 @@ export const generatedProperties = [
640
640
  "row-rule-color",
641
641
  "row-rule-outset",
642
642
  "row-rule-style",
643
+ "row-rule-visibility-items",
643
644
  "row-rule-width",
644
645
  "ruby-align",
645
646
  "ruby-overhang",
@@ -3726,6 +3727,16 @@ export const generatedProperties = [
3726
3727
  ],
3727
3728
  "name": "row-rule-style"
3728
3729
  },
3730
+ {
3731
+ "inherited": false,
3732
+ "keywords": [
3733
+ "all",
3734
+ "around",
3735
+ "between",
3736
+ "none"
3737
+ ],
3738
+ "name": "row-rule-visibility-items"
3739
+ },
3729
3740
  {
3730
3741
  "keywords": [
3731
3742
  "thin",
@@ -6510,6 +6521,14 @@ export const generatedPropertyValues = {
6510
6521
  "double"
6511
6522
  ]
6512
6523
  },
6524
+ "row-rule-visibility-items": {
6525
+ "values": [
6526
+ "all",
6527
+ "around",
6528
+ "between",
6529
+ "none"
6530
+ ]
6531
+ },
6513
6532
  "row-rule-width": {
6514
6533
  "values": [
6515
6534
  "thin",
@@ -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
  }