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.
- package/docs/contributing/images/issues-nearestslo.png +0 -0
- package/docs/contributing/issues.md +17 -21
- package/front_end/core/common/Console.ts +1 -8
- package/front_end/core/common/ParsedURL.ts +10 -20
- package/front_end/core/common/SegmentedRange.ts +1 -2
- package/front_end/core/common/StringOutputStream.ts +1 -4
- package/front_end/core/i18n/i18nImpl.ts +0 -24
- package/front_end/core/sdk/AnimationModel.ts +1 -2
- package/front_end/core/sdk/CSSMatchedStyles.ts +2 -2
- package/front_end/core/sdk/CSSModel.ts +1 -1
- package/front_end/core/sdk/CSSProperty.ts +3 -6
- package/front_end/core/sdk/CSSStyleDeclaration.ts +4 -4
- package/front_end/core/sdk/DebuggerModel.ts +1 -2
- package/front_end/core/sdk/EnhancedTracesParser.ts +4 -0
- package/front_end/core/sdk/SourceMap.ts +2 -3
- package/front_end/entrypoints/node_app/NodeConnectionsPanel.ts +2 -1
- package/front_end/generated/InspectorBackendCommands.js +1 -2
- package/front_end/generated/SupportedCSSProperties.js +19 -0
- package/front_end/generated/protocol.ts +0 -27
- package/front_end/panels/accessibility/AccessibilityNodeView.ts +18 -17
- package/front_end/panels/accessibility/AccessibilitySidebarView.ts +9 -12
- package/front_end/panels/ai_assistance/components/ChatView.ts +5 -4
- package/front_end/panels/application/AppManifestView.ts +7 -6
- package/front_end/panels/application/ApplicationPanelSidebar.ts +4 -4
- package/front_end/panels/application/OpenedWindowDetailsView.ts +6 -6
- package/front_end/panels/application/StorageView.ts +9 -8
- package/front_end/panels/application/components/BackForwardCacheView.ts +333 -314
- package/front_end/panels/application/components/ProtocolHandlersView.ts +3 -2
- package/front_end/panels/application/preloading/components/PreloadingDisabledInfobar.ts +2 -1
- package/front_end/panels/browser_debugger/ObjectEventListenersSidebarPane.ts +8 -8
- package/front_end/panels/common/BadgeNotification.ts +2 -1
- package/front_end/panels/common/GdpSignUpDialog.ts +2 -1
- package/front_end/panels/console/ConsoleInsightTeaser.ts +8 -2
- package/front_end/panels/console/ConsolePinPane.ts +12 -7
- package/front_end/panels/developer_resources/DeveloperResourcesView.ts +9 -9
- package/front_end/panels/elements/ComputedStyleWidget.ts +7 -7
- package/front_end/panels/elements/EventListenersWidget.ts +9 -9
- package/front_end/panels/elements/NodeStackTraceWidget.ts +6 -6
- package/front_end/panels/elements/PlatformFontsWidget.ts +5 -5
- package/front_end/panels/elements/PropertiesWidget.ts +8 -8
- package/front_end/panels/layer_viewer/Layers3DView.ts +2 -1
- package/front_end/panels/layer_viewer/PaintProfilerView.ts +3 -3
- package/front_end/panels/network/RequestCookiesView.ts +2 -1
- package/front_end/panels/network/RequestTimingView.ts +2 -1
- package/front_end/panels/recorder/RecorderController.ts +34 -23
- package/front_end/panels/recorder/components/CreateRecordingView.ts +249 -240
- package/front_end/panels/security/CookieControlsView.ts +2 -1
- package/front_end/panels/security/CookieReportView.ts +3 -2
- package/front_end/panels/settings/AISettingsTab.ts +2 -1
- package/front_end/panels/settings/KeybindsSettingsTab.ts +6 -0
- package/front_end/panels/settings/components/SyncSection.ts +2 -1
- package/front_end/panels/sources/DebuggerPausedMessage.ts +4 -3
- package/front_end/panels/sources/ResourceOriginPlugin.ts +3 -2
- package/front_end/panels/sources/SourcesNavigator.ts +2 -1
- package/front_end/panels/sources/TabbedEditorContainer.ts +3 -2
- package/front_end/panels/sources/WatchExpressionsSidebarPane.ts +9 -9
- package/front_end/panels/timeline/TimelineUIUtils.ts +3 -2
- package/front_end/panels/timeline/components/DetailsView.ts +5 -4
- package/front_end/panels/timeline/components/FieldSettingsDialog.ts +2 -1
- package/front_end/panels/timeline/components/LiveMetricsView.ts +5 -4
- package/front_end/panels/timeline/components/MetricCompareStrings.ts +25 -24
- package/front_end/panels/timeline/components/insights/LCPDiscovery.ts +2 -1
- package/front_end/third_party/chromium/README.chromium +1 -1
- package/front_end/ui/components/docs/tooltip/basic.ts +1 -1
- package/front_end/ui/components/tooltips/Tooltip.ts +32 -17
- package/front_end/ui/i18n/i18n.ts +31 -0
- package/front_end/ui/legacy/SoftDropDown.ts +1 -12
- package/front_end/ui/legacy/ViewManager.ts +2 -4
- package/front_end/ui/legacy/Widget.ts +33 -17
- package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +2 -1
- package/front_end/ui/legacy/legacy.ts +0 -2
- package/front_end/ui/visual_logging/KnownContextValues.ts +3 -0
- package/mcp/mcp.ts +1 -0
- package/package.json +1 -1
- package/front_end/ui/components/docs/recorder_create_recording_view/basic.html +0 -20
- package/front_end/ui/components/docs/recorder_create_recording_view/basic.ts +0 -27
- package/front_end/ui/legacy/ThrottledWidget.ts +0 -48
|
Binary file
|
|
@@ -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
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
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
|
|
178
|
-
or Task are out of scope for SLOs (with the notable exception of
|
|
179
|
-
items, where Chrome also enforces SLOs for non-bug issues).
|
|
180
|
-
restrict these SLOs to bugs in [crbug], and are not concerned
|
|
181
|
-
tracked in other places such as GitHub. Below is a high level
|
|
182
|
-
(Googlers can check the [Chrome
|
|
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
|
-
|
|
193
|
-
|
|
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
|

|
|
197
194
|
|
|
@@ -200,7 +197,7 @@ surfaces SLO violations easily:
|
|
|
200
197
|
|
|
201
198
|
### Release Blocking Issues
|
|
202
199
|
|
|
203
|
-
In
|
|
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
|
|
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
|
|
60
|
+
isValid = false;
|
|
61
61
|
url: string;
|
|
62
|
-
scheme
|
|
63
|
-
user
|
|
64
|
-
host
|
|
65
|
-
port
|
|
66
|
-
path
|
|
67
|
-
queryParams
|
|
68
|
-
fragment
|
|
69
|
-
folderPathComponents
|
|
70
|
-
lastPathComponent
|
|
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
|
|
|
@@ -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
|
|
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().
|
|
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:
|
|
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
|
|
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
|
|
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
|
|
17
|
+
#allProperties: CSSProperty[] = [];
|
|
18
18
|
styleSheetId?: Protocol.CSS.StyleSheetId;
|
|
19
|
-
range
|
|
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
|
|
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
|
|
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]
|
|
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
|
-
|
|
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.
|
|
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 =
|
|
630
|
+
reasonElement = uiI18n.getFormatLocalizedString(str_, UIStrings.elementIsHiddenBy, {});
|
|
630
631
|
break;
|
|
631
632
|
case 'hiddenByChildTree':
|
|
632
|
-
reasonElement =
|
|
633
|
+
reasonElement = uiI18n.getFormatLocalizedString(str_, UIStrings.elementIsHiddenByChildTree, {});
|
|
633
634
|
break;
|
|
634
635
|
case 'ancestorIsLeafNode':
|
|
635
|
-
reasonElement =
|
|
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 =
|
|
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 =
|
|
646
|
+
reasonElement = uiI18n.getFormatLocalizedString(
|
|
646
647
|
str_, UIStrings.placeholderIsPlaceholderOnAncestor, {PH1: ariaHiddenSpan, PH2: trueSpan});
|
|
647
648
|
break;
|
|
648
649
|
}
|
|
649
650
|
case 'emptyAlt':
|
|
650
|
-
reasonElement =
|
|
651
|
+
reasonElement = uiI18n.getFormatLocalizedString(str_, UIStrings.elementHasEmptyAltText, {});
|
|
651
652
|
break;
|
|
652
653
|
case 'emptyText':
|
|
653
|
-
reasonElement =
|
|
654
|
+
reasonElement = uiI18n.getFormatLocalizedString(str_, UIStrings.noTextContent, {});
|
|
654
655
|
break;
|
|
655
656
|
case 'inertElement':
|
|
656
|
-
reasonElement =
|
|
657
|
+
reasonElement = uiI18n.getFormatLocalizedString(str_, UIStrings.elementIsInert, {});
|
|
657
658
|
break;
|
|
658
659
|
case 'inertSubtree':
|
|
659
|
-
reasonElement =
|
|
660
|
+
reasonElement = uiI18n.getFormatLocalizedString(str_, UIStrings.elementIsInAnInertSubTree, {});
|
|
660
661
|
break;
|
|
661
662
|
case 'inheritsPresentation':
|
|
662
|
-
reasonElement =
|
|
663
|
+
reasonElement = uiI18n.getFormatLocalizedString(str_, UIStrings.elementsInheritsPresentational, {});
|
|
663
664
|
break;
|
|
664
665
|
case 'labelContainer':
|
|
665
|
-
reasonElement =
|
|
666
|
+
reasonElement = uiI18n.getFormatLocalizedString(str_, UIStrings.partOfLabelElement, {});
|
|
666
667
|
break;
|
|
667
668
|
case 'labelFor':
|
|
668
|
-
reasonElement =
|
|
669
|
+
reasonElement = uiI18n.getFormatLocalizedString(str_, UIStrings.labelFor, {});
|
|
669
670
|
break;
|
|
670
671
|
case 'notRendered':
|
|
671
|
-
reasonElement =
|
|
672
|
+
reasonElement = uiI18n.getFormatLocalizedString(str_, UIStrings.elementIsNotRendered, {});
|
|
672
673
|
break;
|
|
673
674
|
case 'notVisible':
|
|
674
|
-
reasonElement =
|
|
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
|
-
|
|
681
|
+
uiI18n.getFormatLocalizedString(str_, UIStrings.elementHasPlaceholder, {PH1: rolePresentationSpan});
|
|
681
682
|
break;
|
|
682
683
|
}
|
|
683
684
|
case 'probablyPresentational':
|
|
684
|
-
reasonElement =
|
|
685
|
+
reasonElement = uiI18n.getFormatLocalizedString(str_, UIStrings.elementIsPresentational, {});
|
|
685
686
|
break;
|
|
686
687
|
case 'uninteresting':
|
|
687
|
-
reasonElement =
|
|
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.
|
|
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(
|
|
28
|
-
super(
|
|
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(
|
|
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.
|
|
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
|
|
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.
|
|
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.
|
|
152
|
+
this.requestUpdate();
|
|
156
153
|
}
|
|
157
154
|
}
|