chrome-devtools-frontend 1.0.1524741 → 1.0.1526203
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/policy/slow-close.md +22 -19
- package/front_end/core/common/Settings.ts +1 -1
- package/front_end/core/sdk/PreloadingModel.ts +3 -0
- package/front_end/core/sdk/ResourceTreeModel.ts +1 -1
- package/front_end/{models/source_map_scopes → core/sdk}/ScopeTreeCache.ts +8 -7
- package/front_end/core/sdk/SourceMapScopesInfo.ts +57 -0
- package/front_end/core/sdk/sdk.ts +2 -0
- package/front_end/entrypoints/formatter_worker/FormatterActions.ts +7 -0
- package/front_end/entrypoints/formatter_worker/ScopeParser.ts +15 -12
- package/front_end/generated/InspectorBackendCommands.js +4 -4
- package/front_end/generated/SupportedCSSProperties.js +0 -19
- package/front_end/generated/protocol-mapping.d.ts +1 -1
- package/front_end/generated/protocol-proxy-api.d.ts +1 -1
- package/front_end/generated/protocol.ts +9 -8
- package/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.snapshot.txt +43 -8
- package/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.ts +50 -32
- package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.snapshot.txt +29 -29
- package/front_end/models/formatter/FormatterWorkerPool.ts +1 -1
- package/front_end/models/javascript_metadata/NativeFunctions.js +3 -8
- package/front_end/models/source_map_scopes/NamesResolver.ts +1 -3
- package/front_end/models/source_map_scopes/source_map_scopes.ts +0 -2
- package/front_end/models/trace/handlers/UserTimingsHandler.ts +1 -1
- package/front_end/models/trace/insights/CLSCulprits.ts +2 -1
- package/front_end/models/trace/insights/Cache.ts +2 -1
- package/front_end/models/trace/insights/DOMSize.ts +2 -1
- package/front_end/models/trace/insights/DocumentLatency.ts +2 -1
- package/front_end/models/trace/insights/DuplicatedJavaScript.ts +2 -1
- package/front_end/models/trace/insights/FontDisplay.ts +2 -1
- package/front_end/models/trace/insights/ForcedReflow.ts +2 -1
- package/front_end/models/trace/insights/INPBreakdown.ts +2 -1
- package/front_end/models/trace/insights/ImageDelivery.ts +2 -1
- package/front_end/models/trace/insights/LCPBreakdown.ts +2 -1
- package/front_end/models/trace/insights/LCPDiscovery.ts +2 -1
- package/front_end/models/trace/insights/LegacyJavaScript.ts +2 -1
- package/front_end/models/trace/insights/ModernHTTP.ts +2 -1
- package/front_end/models/trace/insights/NetworkDependencyTree.ts +2 -1
- package/front_end/models/trace/insights/RenderBlocking.ts +2 -1
- package/front_end/models/trace/insights/SlowCSSSelector.ts +2 -1
- package/front_end/models/trace/insights/ThirdParties.ts +2 -1
- package/front_end/models/trace/insights/Viewport.ts +2 -1
- package/front_end/models/trace/insights/types.ts +2 -1
- package/front_end/panels/application/ReportingApiView.ts +8 -7
- package/front_end/panels/application/StorageView.ts +2 -1
- package/front_end/panels/application/preloading/components/PreloadingString.ts +2 -0
- package/front_end/panels/changes/ChangesSidebar.ts +10 -3
- package/front_end/panels/changes/ChangesView.ts +69 -69
- package/front_end/panels/changes/CombinedDiffView.ts +1 -1
- package/front_end/panels/changes/changesView.css +4 -0
- package/front_end/panels/console/ConsolePrompt.ts +24 -4
- package/front_end/panels/lighthouse/LighthouseController.ts +5 -0
- package/front_end/panels/linear_memory_inspector/LinearMemoryInspectorPane.ts +43 -46
- package/front_end/panels/linear_memory_inspector/components/LinearMemoryInspector.ts +254 -153
- package/front_end/panels/linear_memory_inspector/components/linearMemoryInspector.css +28 -21
- package/front_end/panels/timeline/TimelinePanel.ts +10 -8
- package/front_end/panels/timeline/components/ExportTraceOptions.ts +1 -1
- package/front_end/third_party/chromium/README.chromium +1 -1
- package/front_end/ui/components/buttons/Button.ts +17 -0
- package/front_end/ui/components/docs/linear_memory_inspector/basic.ts +21 -9
- package/front_end/ui/components/highlighting/HighlightManager.ts +21 -1
- package/front_end/ui/components/tooltips/Tooltip.ts +22 -5
- package/front_end/ui/legacy/SearchableView.ts +1 -1
- package/front_end/ui/legacy/components/data_grid/DataGridElement.ts +48 -5
- package/front_end/ui/legacy/components/perf_ui/FlameChart.ts +2 -2
- package/front_end/ui/legacy/components/source_frame/JSONView.ts +28 -0
- package/front_end/ui/legacy/components/source_frame/StreamingContentHexView.ts +18 -20
- package/package.json +22 -22
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
<small>([go/chrome-devtools:slow-close-policy])</small>
|
|
5
5
|
|
|
6
6
|
In November 2024, we instituted a slow close policy for Chrome DevTools to
|
|
7
|
-
automatically maintain hygiene of our bug database. We ended up with a list
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
7
|
+
automatically maintain hygiene of our bug database. We ended up with a list of
|
|
8
|
+
over 1650 open bugs and over 750 open feature requests, some of them going back
|
|
9
|
+
over 10 years, which was not only challenging to maintain, but also made it
|
|
10
|
+
difficult to determine what's relevant and where we should invest our resources
|
|
11
|
+
best.
|
|
12
12
|
|
|
13
13
|
By automatically nudging and closing stale bugs and feature requests, we can
|
|
14
14
|
reduce this burden, and better communicate to our users what will actually be
|
|
@@ -20,28 +20,31 @@ actioned, and hear from them what remains relevant.
|
|
|
20
20
|
|
|
21
21
|
The criteria for slow close:
|
|
22
22
|
|
|
23
|
-
-
|
|
24
|
-
-
|
|
25
|
-
-
|
|
26
|
-
-
|
|
27
|
-
-
|
|
28
|
-
-
|
|
23
|
+
- Status: unassigned
|
|
24
|
+
- Type: Bug or Feature Request
|
|
25
|
+
- Created: over 3 years ago
|
|
26
|
+
- Last updated: over 90 days ago
|
|
27
|
+
- Popularity: (cc count + vote count) < 10
|
|
28
|
+
- No open descendants
|
|
29
29
|
|
|
30
30
|
Googlers can mark issues as exempt from slow close by adding them to the
|
|
31
31
|
[`DevTools-Blintz-Close-Exempt` hotlist](https://issues.chromium.org/hotlists/6459983).
|
|
32
|
+
All issues on the
|
|
33
|
+
[`ChromeTooling-Icebox`](https://issues.chromium.org/hotlists/7363836) are also
|
|
34
|
+
automatically exempt from slow close.
|
|
32
35
|
|
|
33
36
|
## Process
|
|
34
37
|
|
|
35
38
|
The automation runs on a daily basis, and performs the following steps:
|
|
36
39
|
|
|
37
|
-
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
-
|
|
40
|
+
- Issues that meet the criteria outlined above are added to the
|
|
41
|
+
[`DevTools-Blintz-Close-Candidate` hotlist](https://issues.chromium.org/hotlists/6459982)
|
|
42
|
+
for closure.
|
|
43
|
+
- If 14 days have passed and no updates have occurred, the issue will be
|
|
44
|
+
closed and moved to the
|
|
45
|
+
[`DevTools-Blintz-Close` hotlist](https://issues.chromium.org/hotlists/6460812)
|
|
46
|
+
for recording purposes.
|
|
47
|
+
- No more than 25 issues will be updated in a single run.
|
|
45
48
|
|
|
46
49
|
## Implementation
|
|
47
50
|
|
|
@@ -131,7 +131,7 @@ export class Settings {
|
|
|
131
131
|
* to store UI state such as how a user choses to position a split widget or
|
|
132
132
|
* which panel they last opened.
|
|
133
133
|
* If you are creating a setting that you expect the user to control, and
|
|
134
|
-
* sync, prefer {@
|
|
134
|
+
* sync, prefer {@link Settings.createSetting}
|
|
135
135
|
*/
|
|
136
136
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
137
137
|
moduleSetting<T = any>(settingName: string): Setting<T> {
|
|
@@ -626,6 +626,8 @@ class PreloadingAttemptRegistry {
|
|
|
626
626
|
return 0;
|
|
627
627
|
case Protocol.Preload.SpeculationAction.Prerender:
|
|
628
628
|
return 1;
|
|
629
|
+
case Protocol.Preload.SpeculationAction.PrerenderUntilScript:
|
|
630
|
+
return 2;
|
|
629
631
|
}
|
|
630
632
|
}
|
|
631
633
|
|
|
@@ -736,6 +738,7 @@ class PreloadingAttemptRegistry {
|
|
|
736
738
|
};
|
|
737
739
|
break;
|
|
738
740
|
case Protocol.Preload.SpeculationAction.Prerender:
|
|
741
|
+
case Protocol.Preload.SpeculationAction.PrerenderUntilScript:
|
|
739
742
|
attempt = {
|
|
740
743
|
action: Protocol.Preload.SpeculationAction.Prerender,
|
|
741
744
|
key,
|
|
@@ -106,7 +106,7 @@ export class ResourceTreeModel extends SDKModel<EventTypes> {
|
|
|
106
106
|
}
|
|
107
107
|
|
|
108
108
|
// TODO(crbug.com/445966299): Refactor to use `storageAgent().invoke_getStorageKey()` instead.
|
|
109
|
-
const response = await this.storageAgent.
|
|
109
|
+
const response = await this.storageAgent.invoke_getStorageKey({frameId});
|
|
110
110
|
if (response.getError() === 'Frame tree node for given frame not found') {
|
|
111
111
|
return null;
|
|
112
112
|
}
|
|
@@ -2,24 +2,25 @@
|
|
|
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
4
|
|
|
5
|
-
import
|
|
6
|
-
import * as
|
|
7
|
-
|
|
5
|
+
import * as Formatter from '../../models/formatter/formatter.js';
|
|
6
|
+
import * as TextUtils from '../../models/text_utils/text_utils.js';
|
|
7
|
+
|
|
8
|
+
import type {Script} from './Script.js';
|
|
8
9
|
|
|
9
10
|
type ScopeTreeNode = Formatter.FormatterWorkerPool.ScopeTreeNode;
|
|
10
11
|
|
|
11
12
|
/** If a script failed to parse, we stash null in order to prevent unnecessary re-parsing */
|
|
12
|
-
const scopeTrees = new WeakMap<
|
|
13
|
+
const scopeTrees = new WeakMap<Script, Promise<ScopeTreeNode|null>>();
|
|
13
14
|
|
|
14
15
|
/**
|
|
15
16
|
* Computes and caches the scope tree for `script`.
|
|
16
17
|
*
|
|
17
|
-
* We use {@link
|
|
18
|
-
* {@link
|
|
18
|
+
* We use {@link Script} as a key to uniquely identify scripts.
|
|
19
|
+
* {@link Script} boils down to "target" + "script ID". This
|
|
19
20
|
* duplicates work in case of identitical script running on multiple targets
|
|
20
21
|
* (e.g. workers).
|
|
21
22
|
*/
|
|
22
|
-
export function scopeTreeForScript(script:
|
|
23
|
+
export function scopeTreeForScript(script: Script): Promise<ScopeTreeNode|null> {
|
|
23
24
|
let promise = scopeTrees.get(script);
|
|
24
25
|
if (promise === undefined) {
|
|
25
26
|
promise = script.requestContentData().then(content => {
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
// found in the LICENSE file.
|
|
4
4
|
|
|
5
5
|
import * as Protocol from '../../generated/protocol.js';
|
|
6
|
+
import * as Formatter from '../../models/formatter/formatter.js';
|
|
7
|
+
import type * as TextUtils from '../../models/text_utils/text_utils.js';
|
|
6
8
|
import type * as ScopesCodec from '../../third_party/source-map-scopes-codec/source-map-scopes-codec.js';
|
|
7
9
|
|
|
8
10
|
import type {CallFrame, ScopeChainEntry} from './DebuggerModel.js';
|
|
@@ -22,6 +24,61 @@ export class SourceMapScopesInfo {
|
|
|
22
24
|
this.#generatedRanges = scopeInfo.ranges;
|
|
23
25
|
}
|
|
24
26
|
|
|
27
|
+
/**
|
|
28
|
+
* If the source map does not contain any scopes information, this factory function attempts to create bare bones scope information
|
|
29
|
+
* via the script's AST combined with the mappings.
|
|
30
|
+
*
|
|
31
|
+
* We create the generated ranges from the scope tree and for each range we create an original scope that matches the bounds 1:1.
|
|
32
|
+
* We don't map the bounds via mappings as mappings are often iffy and it's not strictly required to translate stack traces where we
|
|
33
|
+
* map call-sites separately.
|
|
34
|
+
*/
|
|
35
|
+
static createFromAst(
|
|
36
|
+
sourceMap: SourceMap, scopeTree: Formatter.FormatterWorkerPool.ScopeTreeNode,
|
|
37
|
+
text: TextUtils.Text.Text): SourceMapScopesInfo {
|
|
38
|
+
const {scope, range} = convertScope(scopeTree, undefined, undefined);
|
|
39
|
+
return new SourceMapScopesInfo(sourceMap, {scopes: [scope], ranges: [range]});
|
|
40
|
+
|
|
41
|
+
function convertScope(
|
|
42
|
+
node: Formatter.FormatterWorkerPool.ScopeTreeNode, parentScope: ScopesCodec.OriginalScope|undefined,
|
|
43
|
+
parentRange: ScopesCodec.GeneratedRange|
|
|
44
|
+
undefined): {scope: ScopesCodec.OriginalScope, range: ScopesCodec.GeneratedRange} {
|
|
45
|
+
const start = positionFromOffset(node.start);
|
|
46
|
+
const end = positionFromOffset(node.end);
|
|
47
|
+
const isStackFrame = node.kind === Formatter.FormatterWorkerPool.ScopeKind.FUNCTION;
|
|
48
|
+
|
|
49
|
+
const scope: ScopesCodec.OriginalScope = {
|
|
50
|
+
start,
|
|
51
|
+
end,
|
|
52
|
+
name: sourceMap.findEntry(start.line, start.column, 0)?.name,
|
|
53
|
+
isStackFrame,
|
|
54
|
+
variables: [],
|
|
55
|
+
children: [],
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
const range: ScopesCodec.GeneratedRange = {
|
|
59
|
+
start,
|
|
60
|
+
end,
|
|
61
|
+
originalScope: scope,
|
|
62
|
+
isStackFrame,
|
|
63
|
+
isHidden: false,
|
|
64
|
+
values: [],
|
|
65
|
+
children: [],
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
parentRange?.children.push(range);
|
|
69
|
+
parentScope?.children.push(scope);
|
|
70
|
+
|
|
71
|
+
node.children.forEach(child => convertScope(child, scope, range));
|
|
72
|
+
|
|
73
|
+
return {scope, range};
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
function positionFromOffset(offset: number): ScopesCodec.Position {
|
|
77
|
+
const location = text.positionFromOffset(offset);
|
|
78
|
+
return {line: location.lineNumber, column: location.columnNumber};
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
25
82
|
addOriginalScopes(scopes: Array<ScopesCodec.OriginalScope|null>): void {
|
|
26
83
|
for (const scope of scopes) {
|
|
27
84
|
this.#originalScopes.push(scope);
|
|
@@ -68,6 +68,7 @@ import * as RemoteObject from './RemoteObject.js';
|
|
|
68
68
|
import * as Resource from './Resource.js';
|
|
69
69
|
import * as ResourceTreeModel from './ResourceTreeModel.js';
|
|
70
70
|
import * as RuntimeModel from './RuntimeModel.js';
|
|
71
|
+
import * as ScopeTreeCache from './ScopeTreeCache.js';
|
|
71
72
|
import * as ScreenCaptureModel from './ScreenCaptureModel.js';
|
|
72
73
|
import * as Script from './Script.js';
|
|
73
74
|
import * as SDKModel from './SDKModel.js';
|
|
@@ -149,6 +150,7 @@ export {
|
|
|
149
150
|
Resource,
|
|
150
151
|
ResourceTreeModel,
|
|
151
152
|
RuntimeModel,
|
|
153
|
+
ScopeTreeCache,
|
|
152
154
|
ScreenCaptureModel,
|
|
153
155
|
Script,
|
|
154
156
|
SDKModel,
|
|
@@ -44,9 +44,16 @@ export const enum DefinitionKind {
|
|
|
44
44
|
FIXED = 3,
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
+
export const enum ScopeKind {
|
|
48
|
+
BLOCK = 1,
|
|
49
|
+
FUNCTION = 2,
|
|
50
|
+
GLOBAL = 3,
|
|
51
|
+
}
|
|
52
|
+
|
|
47
53
|
export interface ScopeTreeNode {
|
|
48
54
|
variables: Array<{name: string, kind: DefinitionKind, offsets: number[]}>;
|
|
49
55
|
start: number;
|
|
50
56
|
end: number;
|
|
57
|
+
kind: ScopeKind;
|
|
51
58
|
children: ScopeTreeNode[];
|
|
52
59
|
}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import * as Acorn from '../../third_party/acorn/acorn.js';
|
|
6
6
|
|
|
7
7
|
import {ECMA_VERSION} from './AcornTokenizer.js';
|
|
8
|
-
import {DefinitionKind, type ScopeTreeNode} from './FormatterActions.js';
|
|
8
|
+
import {DefinitionKind, ScopeKind, type ScopeTreeNode} from './FormatterActions.js';
|
|
9
9
|
|
|
10
10
|
export function parseScopes(expression: string, sourceType: 'module'|'script' = 'script'): Scope|null {
|
|
11
11
|
// Parse the expression and find variables and scopes.
|
|
@@ -36,12 +36,14 @@ export class Scope {
|
|
|
36
36
|
readonly parent: Scope|null;
|
|
37
37
|
readonly start: number;
|
|
38
38
|
readonly end: number;
|
|
39
|
+
readonly kind: ScopeKind;
|
|
39
40
|
readonly children: Scope[] = [];
|
|
40
41
|
|
|
41
|
-
constructor(start: number, end: number, parent: Scope|null) {
|
|
42
|
+
constructor(start: number, end: number, parent: Scope|null, kind: ScopeKind) {
|
|
42
43
|
this.start = start;
|
|
43
44
|
this.end = end;
|
|
44
45
|
this.parent = parent;
|
|
46
|
+
this.kind = kind;
|
|
45
47
|
if (parent) {
|
|
46
48
|
parent.children.push(this);
|
|
47
49
|
}
|
|
@@ -61,6 +63,7 @@ export class Scope {
|
|
|
61
63
|
start: this.start,
|
|
62
64
|
end: this.end,
|
|
63
65
|
variables,
|
|
66
|
+
kind: this.kind,
|
|
64
67
|
children,
|
|
65
68
|
};
|
|
66
69
|
}
|
|
@@ -137,7 +140,7 @@ export class ScopeVariableAnalysis {
|
|
|
137
140
|
|
|
138
141
|
constructor(node: Acorn.ESTree.Node) {
|
|
139
142
|
this.#rootNode = node;
|
|
140
|
-
this.#rootScope = new Scope(node.start, node.end, null);
|
|
143
|
+
this.#rootScope = new Scope(node.start, node.end, null, ScopeKind.GLOBAL);
|
|
141
144
|
this.#currentScope = this.#rootScope;
|
|
142
145
|
}
|
|
143
146
|
|
|
@@ -169,7 +172,7 @@ export class ScopeVariableAnalysis {
|
|
|
169
172
|
node.elements.forEach(item => this.#processNode(item));
|
|
170
173
|
break;
|
|
171
174
|
case 'ArrowFunctionExpression': {
|
|
172
|
-
this.#pushScope(node.start, node.end);
|
|
175
|
+
this.#pushScope(node.start, node.end, ScopeKind.FUNCTION);
|
|
173
176
|
node.params.forEach(this.#processNodeAsDefinition.bind(this, DefinitionKind.VAR, false));
|
|
174
177
|
if (node.body.type === 'BlockStatement') {
|
|
175
178
|
// Include the body of the arrow function in the same scope as the arguments.
|
|
@@ -188,7 +191,7 @@ export class ScopeVariableAnalysis {
|
|
|
188
191
|
this.#processNode(node.right);
|
|
189
192
|
break;
|
|
190
193
|
case 'BlockStatement':
|
|
191
|
-
this.#pushScope(node.start, node.end);
|
|
194
|
+
this.#pushScope(node.start, node.end, ScopeKind.BLOCK);
|
|
192
195
|
node.body.forEach(this.#processNode.bind(this));
|
|
193
196
|
this.#popScope(false);
|
|
194
197
|
break;
|
|
@@ -202,7 +205,7 @@ export class ScopeVariableAnalysis {
|
|
|
202
205
|
break;
|
|
203
206
|
}
|
|
204
207
|
case 'CatchClause':
|
|
205
|
-
this.#pushScope(node.start, node.end);
|
|
208
|
+
this.#pushScope(node.start, node.end, ScopeKind.BLOCK);
|
|
206
209
|
this.#processNodeAsDefinition(DefinitionKind.LET, false, node.param);
|
|
207
210
|
this.#processNode(node.body);
|
|
208
211
|
this.#popScope(false);
|
|
@@ -234,14 +237,14 @@ export class ScopeVariableAnalysis {
|
|
|
234
237
|
break;
|
|
235
238
|
case 'ForInStatement':
|
|
236
239
|
case 'ForOfStatement':
|
|
237
|
-
this.#pushScope(node.start, node.end);
|
|
240
|
+
this.#pushScope(node.start, node.end, ScopeKind.BLOCK);
|
|
238
241
|
this.#processNode(node.left);
|
|
239
242
|
this.#processNode(node.right);
|
|
240
243
|
this.#processNode(node.body);
|
|
241
244
|
this.#popScope(false);
|
|
242
245
|
break;
|
|
243
246
|
case 'ForStatement':
|
|
244
|
-
this.#pushScope(node.start, node.end);
|
|
247
|
+
this.#pushScope(node.start, node.end, ScopeKind.BLOCK);
|
|
245
248
|
this.#processNode(node.init ?? null);
|
|
246
249
|
this.#processNode(node.test ?? null);
|
|
247
250
|
this.#processNode(node.update ?? null);
|
|
@@ -250,7 +253,7 @@ export class ScopeVariableAnalysis {
|
|
|
250
253
|
break;
|
|
251
254
|
case 'FunctionDeclaration':
|
|
252
255
|
this.#processNodeAsDefinition(DefinitionKind.VAR, false, node.id);
|
|
253
|
-
this.#pushScope(node.id?.end ?? node.start, node.end);
|
|
256
|
+
this.#pushScope(node.id?.end ?? node.start, node.end, ScopeKind.FUNCTION);
|
|
254
257
|
this.#addVariable('this', node.start, DefinitionKind.FIXED);
|
|
255
258
|
this.#addVariable('arguments', node.start, DefinitionKind.FIXED);
|
|
256
259
|
node.params.forEach(this.#processNodeAsDefinition.bind(this, DefinitionKind.LET, false));
|
|
@@ -259,7 +262,7 @@ export class ScopeVariableAnalysis {
|
|
|
259
262
|
this.#popScope(true);
|
|
260
263
|
break;
|
|
261
264
|
case 'FunctionExpression':
|
|
262
|
-
this.#pushScope(node.id?.end ?? node.start, node.end);
|
|
265
|
+
this.#pushScope(node.id?.end ?? node.start, node.end, ScopeKind.FUNCTION);
|
|
263
266
|
this.#addVariable('this', node.start, DefinitionKind.FIXED);
|
|
264
267
|
this.#addVariable('arguments', node.start, DefinitionKind.FIXED);
|
|
265
268
|
node.params.forEach(this.#processNodeAsDefinition.bind(this, DefinitionKind.LET, false));
|
|
@@ -421,8 +424,8 @@ export class ScopeVariableAnalysis {
|
|
|
421
424
|
return this.#allNames;
|
|
422
425
|
}
|
|
423
426
|
|
|
424
|
-
#pushScope(start: number, end: number): void {
|
|
425
|
-
this.#currentScope = new Scope(start, end, this.#currentScope);
|
|
427
|
+
#pushScope(start: number, end: number, kind: ScopeKind): void {
|
|
428
|
+
this.#currentScope = new Scope(start, end, this.#currentScope, kind);
|
|
426
429
|
}
|
|
427
430
|
|
|
428
431
|
#popScope(isFunctionContext: boolean): void {
|
|
@@ -214,7 +214,7 @@ inspectorBackend.registerEnum("Browser.PrivacySandboxAPI", {BiddingAndAuctionSer
|
|
|
214
214
|
inspectorBackend.registerEvent("Browser.downloadWillBegin", ["frameId", "guid", "url", "suggestedFilename"]);
|
|
215
215
|
inspectorBackend.registerEnum("Browser.DownloadProgressEventState", {InProgress: "inProgress", Completed: "completed", Canceled: "canceled"});
|
|
216
216
|
inspectorBackend.registerEvent("Browser.downloadProgress", ["guid", "totalBytes", "receivedBytes", "state", "filePath"]);
|
|
217
|
-
inspectorBackend.registerCommand("Browser.setPermission", [{"name": "permission", "type": "object", "optional": false, "description": "Descriptor of permission to override.", "typeRef": "Browser.PermissionDescriptor"}, {"name": "setting", "type": "string", "optional": false, "description": "Setting of the permission.", "typeRef": "Browser.PermissionSetting"}, {"name": "origin", "type": "string", "optional": true, "description": "
|
|
217
|
+
inspectorBackend.registerCommand("Browser.setPermission", [{"name": "permission", "type": "object", "optional": false, "description": "Descriptor of permission to override.", "typeRef": "Browser.PermissionDescriptor"}, {"name": "setting", "type": "string", "optional": false, "description": "Setting of the permission.", "typeRef": "Browser.PermissionSetting"}, {"name": "origin", "type": "string", "optional": true, "description": "Embedding origin the permission applies to, all origins if not specified.", "typeRef": null}, {"name": "embeddedOrigin", "type": "string", "optional": true, "description": "Embedded origin the permission applies to. It is ignored unless the embedding origin is present and valid. If the embedding origin is provided but the embedded origin isn't, the embedding origin is used as the embedded origin.", "typeRef": null}, {"name": "browserContextId", "type": "string", "optional": true, "description": "Context to override. When omitted, default browser context is used.", "typeRef": "Browser.BrowserContextID"}], [], "Set permission settings for given embedding and embedded origins.");
|
|
218
218
|
inspectorBackend.registerCommand("Browser.grantPermissions", [{"name": "permissions", "type": "array", "optional": false, "description": "", "typeRef": "Browser.PermissionType"}, {"name": "origin", "type": "string", "optional": true, "description": "Origin the permission applies to, all origins if not specified.", "typeRef": null}, {"name": "browserContextId", "type": "string", "optional": true, "description": "BrowserContext to override permissions. When omitted, default browser context is used.", "typeRef": "Browser.BrowserContextID"}], [], "Grant specific permissions to the given origin and reject all others. Deprecated. Use setPermission instead.");
|
|
219
219
|
inspectorBackend.registerCommand("Browser.resetPermissions", [{"name": "browserContextId", "type": "string", "optional": true, "description": "BrowserContext to reset permissions. When omitted, default browser context is used.", "typeRef": "Browser.BrowserContextID"}], [], "Reset all permission management for all origins.");
|
|
220
220
|
inspectorBackend.registerEnum("Browser.SetDownloadBehaviorRequestBehavior", {Deny: "deny", Allow: "allow", AllowAndName: "allowAndName", Default: "default"});
|
|
@@ -870,7 +870,7 @@ inspectorBackend.registerCommand("Network.getResponseBodyForInterception", [{"na
|
|
|
870
870
|
inspectorBackend.registerCommand("Network.takeResponseBodyForInterceptionAsStream", [{"name": "interceptionId", "type": "string", "optional": false, "description": "", "typeRef": "Network.InterceptionId"}], ["stream"], "Returns a handle to the stream representing the response body. Note that after this command, the intercepted request can't be continued as is -- you either need to cancel it or to provide the response body. The stream only supports sequential read, IO.read will fail if the position is specified.");
|
|
871
871
|
inspectorBackend.registerCommand("Network.replayXHR", [{"name": "requestId", "type": "string", "optional": false, "description": "Identifier of XHR to replay.", "typeRef": "Network.RequestId"}], [], "This method sends a new XMLHttpRequest which is identical to the original one. The following parameters should be identical: method, url, async, request body, extra headers, withCredentials attribute, user, password.");
|
|
872
872
|
inspectorBackend.registerCommand("Network.searchInResponseBody", [{"name": "requestId", "type": "string", "optional": false, "description": "Identifier of the network response to search.", "typeRef": "Network.RequestId"}, {"name": "query", "type": "string", "optional": false, "description": "String to search for.", "typeRef": null}, {"name": "caseSensitive", "type": "boolean", "optional": true, "description": "If true, search is case sensitive.", "typeRef": null}, {"name": "isRegex", "type": "boolean", "optional": true, "description": "If true, treats string parameter as regex.", "typeRef": null}], ["result"], "Searches for given string in response content.");
|
|
873
|
-
inspectorBackend.registerCommand("Network.setBlockedURLs", [{"name": "urlPatterns", "type": "array", "optional": true, "description": "URL patterns to block. Patterns use the URLPattern constructor string syntax (https://urlpattern.spec.whatwg.org/). Example: `*://*:*/*.css`.", "typeRef": "string"}, {"name": "urls", "type": "array", "optional": true, "description": "URL patterns to block. Wildcards ('*') are allowed.", "typeRef": "string"}], [], "Blocks URLs from loading.");
|
|
873
|
+
inspectorBackend.registerCommand("Network.setBlockedURLs", [{"name": "urlPatterns", "type": "array", "optional": true, "description": "URL patterns to block. Patterns use the URLPattern constructor string syntax (https://urlpattern.spec.whatwg.org/) and must be absolute. Example: `*://*:*/*.css`.", "typeRef": "string"}, {"name": "urls", "type": "array", "optional": true, "description": "URL patterns to block. Wildcards ('*') are allowed.", "typeRef": "string"}], [], "Blocks URLs from loading.");
|
|
874
874
|
inspectorBackend.registerCommand("Network.setBypassServiceWorker", [{"name": "bypass", "type": "boolean", "optional": false, "description": "Bypass service worker and load from network.", "typeRef": null}], [], "Toggles ignoring of service worker for each request.");
|
|
875
875
|
inspectorBackend.registerCommand("Network.setCacheDisabled", [{"name": "cacheDisabled", "type": "boolean", "optional": false, "description": "Cache disabled state.", "typeRef": null}], [], "Toggles ignoring cache for each request. If `true`, cache will not be used.");
|
|
876
876
|
inspectorBackend.registerCommand("Network.setCookie", [{"name": "name", "type": "string", "optional": false, "description": "Cookie name.", "typeRef": null}, {"name": "value", "type": "string", "optional": false, "description": "Cookie value.", "typeRef": null}, {"name": "url", "type": "string", "optional": true, "description": "The request-URI to associate with the setting of the cookie. This value can affect the default domain, path, source port, and source scheme values of the created cookie.", "typeRef": null}, {"name": "domain", "type": "string", "optional": true, "description": "Cookie domain.", "typeRef": null}, {"name": "path", "type": "string", "optional": true, "description": "Cookie path.", "typeRef": null}, {"name": "secure", "type": "boolean", "optional": true, "description": "True if cookie is secure.", "typeRef": null}, {"name": "httpOnly", "type": "boolean", "optional": true, "description": "True if cookie is http-only.", "typeRef": null}, {"name": "sameSite", "type": "string", "optional": true, "description": "Cookie SameSite type.", "typeRef": "Network.CookieSameSite"}, {"name": "expires", "type": "number", "optional": true, "description": "Cookie expiration date, session cookie if not set", "typeRef": "Network.TimeSinceEpoch"}, {"name": "priority", "type": "string", "optional": true, "description": "Cookie Priority type.", "typeRef": "Network.CookiePriority"}, {"name": "sameParty", "type": "boolean", "optional": true, "description": "True if cookie is SameParty.", "typeRef": null}, {"name": "sourceScheme", "type": "string", "optional": true, "description": "Cookie source scheme type.", "typeRef": "Network.CookieSourceScheme"}, {"name": "sourcePort", "type": "number", "optional": true, "description": "Cookie source port. Valid values are {-1, [1, 65535]}, -1 indicates an unspecified port. An unspecified port value allows protocol clients to emulate legacy cookie scope for the port. This is a temporary ability and it will be removed in the future.", "typeRef": null}, {"name": "partitionKey", "type": "object", "optional": true, "description": "Cookie partition key. If not set, the cookie will be set as not partitioned.", "typeRef": "Network.CookiePartitionKey"}], ["success"], "Sets a cookie with the given cookie data; may overwrite equivalent cookies if they exist.");
|
|
@@ -911,7 +911,7 @@ inspectorBackend.registerType("Network.SignedExchangeSignature", [{"name": "labe
|
|
|
911
911
|
inspectorBackend.registerType("Network.SignedExchangeHeader", [{"name": "requestUrl", "type": "string", "optional": false, "description": "Signed exchange request URL.", "typeRef": null}, {"name": "responseCode", "type": "number", "optional": false, "description": "Signed exchange response code.", "typeRef": null}, {"name": "responseHeaders", "type": "object", "optional": false, "description": "Signed exchange response headers.", "typeRef": "Network.Headers"}, {"name": "signatures", "type": "array", "optional": false, "description": "Signed exchange response signature.", "typeRef": "Network.SignedExchangeSignature"}, {"name": "headerIntegrity", "type": "string", "optional": false, "description": "Signed exchange header integrity hash in the form of `sha256-<base64-hash-value>`.", "typeRef": null}]);
|
|
912
912
|
inspectorBackend.registerType("Network.SignedExchangeError", [{"name": "message", "type": "string", "optional": false, "description": "Error message.", "typeRef": null}, {"name": "signatureIndex", "type": "number", "optional": true, "description": "The index of the signature which caused the error.", "typeRef": null}, {"name": "errorField", "type": "string", "optional": true, "description": "The field which caused the error.", "typeRef": "Network.SignedExchangeErrorField"}]);
|
|
913
913
|
inspectorBackend.registerType("Network.SignedExchangeInfo", [{"name": "outerResponse", "type": "object", "optional": false, "description": "The outer response of signed HTTP exchange which was received from network.", "typeRef": "Network.Response"}, {"name": "hasExtraInfo", "type": "boolean", "optional": false, "description": "Whether network response for the signed exchange was accompanied by extra headers.", "typeRef": null}, {"name": "header", "type": "object", "optional": true, "description": "Information about the signed exchange header.", "typeRef": "Network.SignedExchangeHeader"}, {"name": "securityDetails", "type": "object", "optional": true, "description": "Security details for the signed exchange header.", "typeRef": "Network.SecurityDetails"}, {"name": "errors", "type": "array", "optional": true, "description": "Errors occurred while handling the signed exchange.", "typeRef": "Network.SignedExchangeError"}]);
|
|
914
|
-
inspectorBackend.registerType("Network.NetworkConditions", [{"name": "urlPattern", "type": "string", "optional": false, "description": "Only matching requests will be affected by these conditions. Patterns use the URLPattern constructor string syntax (https://urlpattern.spec.whatwg.org/). If the pattern is empty, all requests are matched (including p2p connections).", "typeRef": null}, {"name": "latency", "type": "number", "optional": false, "description": "Minimum latency from request sent to response headers received (ms).", "typeRef": null}, {"name": "downloadThroughput", "type": "number", "optional": false, "description": "Maximal aggregated download throughput (bytes/sec). -1 disables download throttling.", "typeRef": null}, {"name": "uploadThroughput", "type": "number", "optional": false, "description": "Maximal aggregated upload throughput (bytes/sec). -1 disables upload throttling.", "typeRef": null}, {"name": "connectionType", "type": "string", "optional": true, "description": "Connection type if known.", "typeRef": "Network.ConnectionType"}, {"name": "packetLoss", "type": "number", "optional": true, "description": "WebRTC packet loss (percent, 0-100). 0 disables packet loss emulation, 100 drops all the packets.", "typeRef": null}, {"name": "packetQueueLength", "type": "number", "optional": true, "description": "WebRTC packet queue length (packet). 0 removes any queue length limitations.", "typeRef": null}, {"name": "packetReordering", "type": "boolean", "optional": true, "description": "WebRTC packetReordering feature.", "typeRef": null}]);
|
|
914
|
+
inspectorBackend.registerType("Network.NetworkConditions", [{"name": "urlPattern", "type": "string", "optional": false, "description": "Only matching requests will be affected by these conditions. Patterns use the URLPattern constructor string syntax (https://urlpattern.spec.whatwg.org/) and must be absolute. If the pattern is empty, all requests are matched (including p2p connections).", "typeRef": null}, {"name": "latency", "type": "number", "optional": false, "description": "Minimum latency from request sent to response headers received (ms).", "typeRef": null}, {"name": "downloadThroughput", "type": "number", "optional": false, "description": "Maximal aggregated download throughput (bytes/sec). -1 disables download throttling.", "typeRef": null}, {"name": "uploadThroughput", "type": "number", "optional": false, "description": "Maximal aggregated upload throughput (bytes/sec). -1 disables upload throttling.", "typeRef": null}, {"name": "connectionType", "type": "string", "optional": true, "description": "Connection type if known.", "typeRef": "Network.ConnectionType"}, {"name": "packetLoss", "type": "number", "optional": true, "description": "WebRTC packet loss (percent, 0-100). 0 disables packet loss emulation, 100 drops all the packets.", "typeRef": null}, {"name": "packetQueueLength", "type": "number", "optional": true, "description": "WebRTC packet queue length (packet). 0 removes any queue length limitations.", "typeRef": null}, {"name": "packetReordering", "type": "boolean", "optional": true, "description": "WebRTC packetReordering feature.", "typeRef": null}]);
|
|
915
915
|
inspectorBackend.registerType("Network.DirectTCPSocketOptions", [{"name": "noDelay", "type": "boolean", "optional": false, "description": "TCP_NODELAY option", "typeRef": null}, {"name": "keepAliveDelay", "type": "number", "optional": true, "description": "Expected to be unsigned integer.", "typeRef": null}, {"name": "sendBufferSize", "type": "number", "optional": true, "description": "Expected to be unsigned integer.", "typeRef": null}, {"name": "receiveBufferSize", "type": "number", "optional": true, "description": "Expected to be unsigned integer.", "typeRef": null}, {"name": "dnsQueryType", "type": "string", "optional": true, "description": "", "typeRef": "Network.DirectSocketDnsQueryType"}]);
|
|
916
916
|
inspectorBackend.registerType("Network.DirectUDPSocketOptions", [{"name": "remoteAddr", "type": "string", "optional": true, "description": "", "typeRef": null}, {"name": "remotePort", "type": "number", "optional": true, "description": "Unsigned int 16.", "typeRef": null}, {"name": "localAddr", "type": "string", "optional": true, "description": "", "typeRef": null}, {"name": "localPort", "type": "number", "optional": true, "description": "Unsigned int 16.", "typeRef": null}, {"name": "dnsQueryType", "type": "string", "optional": true, "description": "", "typeRef": "Network.DirectSocketDnsQueryType"}, {"name": "sendBufferSize", "type": "number", "optional": true, "description": "Expected to be unsigned integer.", "typeRef": null}, {"name": "receiveBufferSize", "type": "number", "optional": true, "description": "Expected to be unsigned integer.", "typeRef": null}]);
|
|
917
917
|
inspectorBackend.registerType("Network.DirectUDPMessage", [{"name": "data", "type": "string", "optional": false, "description": "", "typeRef": null}, {"name": "remoteAddr", "type": "string", "optional": true, "description": "Null for connected mode.", "typeRef": null}, {"name": "remotePort", "type": "number", "optional": true, "description": "Null for connected mode. Expected to be unsigned integer.", "typeRef": null}]);
|
|
@@ -1176,7 +1176,7 @@ inspectorBackend.registerType("PerformanceTimeline.TimelineEvent", [{"name": "fr
|
|
|
1176
1176
|
|
|
1177
1177
|
// Preload.
|
|
1178
1178
|
inspectorBackend.registerEnum("Preload.RuleSetErrorType", {SourceIsNotJsonObject: "SourceIsNotJsonObject", InvalidRulesSkipped: "InvalidRulesSkipped", InvalidRulesetLevelTag: "InvalidRulesetLevelTag"});
|
|
1179
|
-
inspectorBackend.registerEnum("Preload.SpeculationAction", {Prefetch: "Prefetch", Prerender: "Prerender"});
|
|
1179
|
+
inspectorBackend.registerEnum("Preload.SpeculationAction", {Prefetch: "Prefetch", Prerender: "Prerender", PrerenderUntilScript: "PrerenderUntilScript"});
|
|
1180
1180
|
inspectorBackend.registerEnum("Preload.SpeculationTargetHint", {Blank: "Blank", Self: "Self"});
|
|
1181
1181
|
inspectorBackend.registerEnum("Preload.PrerenderFinalStatus", {Activated: "Activated", Destroyed: "Destroyed", LowEndDevice: "LowEndDevice", InvalidSchemeRedirect: "InvalidSchemeRedirect", InvalidSchemeNavigation: "InvalidSchemeNavigation", NavigationRequestBlockedByCsp: "NavigationRequestBlockedByCsp", MojoBinderPolicy: "MojoBinderPolicy", RendererProcessCrashed: "RendererProcessCrashed", RendererProcessKilled: "RendererProcessKilled", Download: "Download", TriggerDestroyed: "TriggerDestroyed", NavigationNotCommitted: "NavigationNotCommitted", NavigationBadHttpStatus: "NavigationBadHttpStatus", ClientCertRequested: "ClientCertRequested", NavigationRequestNetworkError: "NavigationRequestNetworkError", CancelAllHostsForTesting: "CancelAllHostsForTesting", DidFailLoad: "DidFailLoad", Stop: "Stop", SslCertificateError: "SslCertificateError", LoginAuthRequested: "LoginAuthRequested", UaChangeRequiresReload: "UaChangeRequiresReload", BlockedByClient: "BlockedByClient", AudioOutputDeviceRequested: "AudioOutputDeviceRequested", MixedContent: "MixedContent", TriggerBackgrounded: "TriggerBackgrounded", MemoryLimitExceeded: "MemoryLimitExceeded", DataSaverEnabled: "DataSaverEnabled", TriggerUrlHasEffectiveUrl: "TriggerUrlHasEffectiveUrl", ActivatedBeforeStarted: "ActivatedBeforeStarted", InactivePageRestriction: "InactivePageRestriction", StartFailed: "StartFailed", TimeoutBackgrounded: "TimeoutBackgrounded", CrossSiteRedirectInInitialNavigation: "CrossSiteRedirectInInitialNavigation", CrossSiteNavigationInInitialNavigation: "CrossSiteNavigationInInitialNavigation", SameSiteCrossOriginRedirectNotOptInInInitialNavigation: "SameSiteCrossOriginRedirectNotOptInInInitialNavigation", SameSiteCrossOriginNavigationNotOptInInInitialNavigation: "SameSiteCrossOriginNavigationNotOptInInInitialNavigation", ActivationNavigationParameterMismatch: "ActivationNavigationParameterMismatch", ActivatedInBackground: "ActivatedInBackground", EmbedderHostDisallowed: "EmbedderHostDisallowed", ActivationNavigationDestroyedBeforeSuccess: "ActivationNavigationDestroyedBeforeSuccess", TabClosedByUserGesture: "TabClosedByUserGesture", TabClosedWithoutUserGesture: "TabClosedWithoutUserGesture", PrimaryMainFrameRendererProcessCrashed: "PrimaryMainFrameRendererProcessCrashed", PrimaryMainFrameRendererProcessKilled: "PrimaryMainFrameRendererProcessKilled", ActivationFramePolicyNotCompatible: "ActivationFramePolicyNotCompatible", PreloadingDisabled: "PreloadingDisabled", BatterySaverEnabled: "BatterySaverEnabled", ActivatedDuringMainFrameNavigation: "ActivatedDuringMainFrameNavigation", PreloadingUnsupportedByWebContents: "PreloadingUnsupportedByWebContents", CrossSiteRedirectInMainFrameNavigation: "CrossSiteRedirectInMainFrameNavigation", CrossSiteNavigationInMainFrameNavigation: "CrossSiteNavigationInMainFrameNavigation", SameSiteCrossOriginRedirectNotOptInInMainFrameNavigation: "SameSiteCrossOriginRedirectNotOptInInMainFrameNavigation", SameSiteCrossOriginNavigationNotOptInInMainFrameNavigation: "SameSiteCrossOriginNavigationNotOptInInMainFrameNavigation", MemoryPressureOnTrigger: "MemoryPressureOnTrigger", MemoryPressureAfterTriggered: "MemoryPressureAfterTriggered", PrerenderingDisabledByDevTools: "PrerenderingDisabledByDevTools", SpeculationRuleRemoved: "SpeculationRuleRemoved", ActivatedWithAuxiliaryBrowsingContexts: "ActivatedWithAuxiliaryBrowsingContexts", MaxNumOfRunningEagerPrerendersExceeded: "MaxNumOfRunningEagerPrerendersExceeded", MaxNumOfRunningNonEagerPrerendersExceeded: "MaxNumOfRunningNonEagerPrerendersExceeded", MaxNumOfRunningEmbedderPrerendersExceeded: "MaxNumOfRunningEmbedderPrerendersExceeded", PrerenderingUrlHasEffectiveUrl: "PrerenderingUrlHasEffectiveUrl", RedirectedPrerenderingUrlHasEffectiveUrl: "RedirectedPrerenderingUrlHasEffectiveUrl", ActivationUrlHasEffectiveUrl: "ActivationUrlHasEffectiveUrl", JavaScriptInterfaceAdded: "JavaScriptInterfaceAdded", JavaScriptInterfaceRemoved: "JavaScriptInterfaceRemoved", AllPrerenderingCanceled: "AllPrerenderingCanceled", WindowClosed: "WindowClosed", SlowNetwork: "SlowNetwork", OtherPrerenderedPageActivated: "OtherPrerenderedPageActivated", V8OptimizerDisabled: "V8OptimizerDisabled", PrerenderFailedDuringPrefetch: "PrerenderFailedDuringPrefetch", BrowsingDataRemoved: "BrowsingDataRemoved", PrerenderHostReused: "PrerenderHostReused"});
|
|
1182
1182
|
inspectorBackend.registerEnum("Preload.PreloadingStatus", {Pending: "Pending", Running: "Running", Ready: "Ready", Success: "Success", Failure: "Failure", NotSupported: "NotSupported"});
|
|
@@ -733,7 +733,6 @@ export const generatedProperties = [
|
|
|
733
733
|
"text-wrap-mode",
|
|
734
734
|
"text-wrap-style",
|
|
735
735
|
"timeline-scope",
|
|
736
|
-
"timeline-trigger-behavior",
|
|
737
736
|
"timeline-trigger-exit-range-end",
|
|
738
737
|
"timeline-trigger-exit-range-start",
|
|
739
738
|
"timeline-trigger-name",
|
|
@@ -4432,7 +4431,6 @@ export const generatedProperties = [
|
|
|
4432
4431
|
"longhands": [
|
|
4433
4432
|
"timeline-trigger-name",
|
|
4434
4433
|
"timeline-trigger-source",
|
|
4435
|
-
"timeline-trigger-behavior",
|
|
4436
4434
|
"timeline-trigger-range-start",
|
|
4437
4435
|
"timeline-trigger-range-end",
|
|
4438
4436
|
"timeline-trigger-exit-range-start",
|
|
@@ -4440,15 +4438,6 @@ export const generatedProperties = [
|
|
|
4440
4438
|
],
|
|
4441
4439
|
"name": "timeline-trigger"
|
|
4442
4440
|
},
|
|
4443
|
-
{
|
|
4444
|
-
"keywords": [
|
|
4445
|
-
"once",
|
|
4446
|
-
"repeat",
|
|
4447
|
-
"alternate",
|
|
4448
|
-
"state"
|
|
4449
|
-
],
|
|
4450
|
-
"name": "timeline-trigger-behavior"
|
|
4451
|
-
},
|
|
4452
4441
|
{
|
|
4453
4442
|
"name": "timeline-trigger-exit-range-end"
|
|
4454
4443
|
},
|
|
@@ -6846,14 +6835,6 @@ export const generatedPropertyValues = {
|
|
|
6846
6835
|
"stable"
|
|
6847
6836
|
]
|
|
6848
6837
|
},
|
|
6849
|
-
"timeline-trigger-behavior": {
|
|
6850
|
-
"values": [
|
|
6851
|
-
"once",
|
|
6852
|
-
"repeat",
|
|
6853
|
-
"alternate",
|
|
6854
|
-
"state"
|
|
6855
|
-
]
|
|
6856
|
-
},
|
|
6857
6838
|
"timeline-trigger-source": {
|
|
6858
6839
|
"values": [
|
|
6859
6840
|
"none",
|
|
@@ -1231,7 +1231,7 @@ export namespace ProtocolMapping {
|
|
|
1231
1231
|
returnType: void;
|
|
1232
1232
|
};
|
|
1233
1233
|
/**
|
|
1234
|
-
* Set permission settings for given
|
|
1234
|
+
* Set permission settings for given embedding and embedded origins.
|
|
1235
1235
|
*/
|
|
1236
1236
|
'Browser.setPermission': {
|
|
1237
1237
|
paramsType: [Protocol.Browser.SetPermissionRequest];
|
|
@@ -591,7 +591,7 @@ declare namespace ProtocolProxyApi {
|
|
|
591
591
|
|
|
592
592
|
export interface BrowserApi {
|
|
593
593
|
/**
|
|
594
|
-
* Set permission settings for given
|
|
594
|
+
* Set permission settings for given embedding and embedded origins.
|
|
595
595
|
*/
|
|
596
596
|
invoke_setPermission(params: Protocol.Browser.SetPermissionRequest): Promise<Protocol.ProtocolResponseWithError>;
|
|
597
597
|
|
|
@@ -2289,15 +2289,15 @@ export namespace Browser {
|
|
|
2289
2289
|
*/
|
|
2290
2290
|
setting: PermissionSetting;
|
|
2291
2291
|
/**
|
|
2292
|
-
*
|
|
2292
|
+
* Embedding origin the permission applies to, all origins if not specified.
|
|
2293
2293
|
*/
|
|
2294
2294
|
origin?: string;
|
|
2295
2295
|
/**
|
|
2296
|
-
*
|
|
2297
|
-
* present and valid. If the
|
|
2298
|
-
*
|
|
2296
|
+
* Embedded origin the permission applies to. It is ignored unless the embedding origin is
|
|
2297
|
+
* present and valid. If the embedding origin is provided but the embedded origin isn't, the
|
|
2298
|
+
* embedding origin is used as the embedded origin.
|
|
2299
2299
|
*/
|
|
2300
|
-
|
|
2300
|
+
embeddedOrigin?: string;
|
|
2301
2301
|
/**
|
|
2302
2302
|
* Context to override. When omitted, default browser context is used.
|
|
2303
2303
|
*/
|
|
@@ -11012,8 +11012,8 @@ export namespace Network {
|
|
|
11012
11012
|
export interface NetworkConditions {
|
|
11013
11013
|
/**
|
|
11014
11014
|
* Only matching requests will be affected by these conditions. Patterns use the URLPattern constructor string
|
|
11015
|
-
* syntax (https://urlpattern.spec.whatwg.org/). If the pattern is empty, all requests are
|
|
11016
|
-
* connections).
|
|
11015
|
+
* syntax (https://urlpattern.spec.whatwg.org/) and must be absolute. If the pattern is empty, all requests are
|
|
11016
|
+
* matched (including p2p connections).
|
|
11017
11017
|
*/
|
|
11018
11018
|
urlPattern: string;
|
|
11019
11019
|
/**
|
|
@@ -11608,7 +11608,7 @@ export namespace Network {
|
|
|
11608
11608
|
export interface SetBlockedURLsRequest {
|
|
11609
11609
|
/**
|
|
11610
11610
|
* URL patterns to block. Patterns use the URLPattern constructor string syntax
|
|
11611
|
-
* (https://urlpattern.spec.whatwg.org/). Example: `*://*:*\/*.css`.
|
|
11611
|
+
* (https://urlpattern.spec.whatwg.org/) and must be absolute. Example: `*://*:*\/*.css`.
|
|
11612
11612
|
*/
|
|
11613
11613
|
urlPatterns?: string[];
|
|
11614
11614
|
/**
|
|
@@ -16126,6 +16126,7 @@ export namespace Preload {
|
|
|
16126
16126
|
export const enum SpeculationAction {
|
|
16127
16127
|
Prefetch = 'Prefetch',
|
|
16128
16128
|
Prerender = 'Prerender',
|
|
16129
|
+
PrerenderUntilScript = 'PrerenderUntilScript',
|
|
16129
16130
|
}
|
|
16130
16131
|
|
|
16131
16132
|
/**
|