chrome-devtools-frontend 1.0.1662289 → 1.0.1662965
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/skills/devtools-unicode-escaping/SKILL.md +64 -0
- package/.agents/skills/migrate-chromium-test/SKILL.md +29 -4
- package/front_end/core/common/SettingRegistration.ts +0 -5
- package/front_end/core/common/Settings.ts +69 -3
- package/front_end/core/platform/StringUtilities.ts +38 -6
- package/front_end/core/sdk/ServiceWorkerCacheModel.ts +0 -10
- package/front_end/core/sdk/StorageBucketsModel.ts +0 -10
- package/front_end/core/sdk/sdk-meta.ts +0 -1
- package/front_end/entrypoints/inspector_main/OutermostTargetSelector.ts +0 -13
- package/front_end/entrypoints/inspector_main/RenderingOptions.ts +8 -3
- package/front_end/entrypoints/inspector_main/inspector_main-meta.ts +3 -3
- package/front_end/entrypoints/main/MainImpl.ts +7 -2
- package/front_end/foundation/Universe.ts +16 -0
- package/front_end/generated/InspectorBackendCommands.ts +2 -14
- package/front_end/generated/protocol-mapping.d.ts +0 -53
- package/front_end/generated/protocol-proxy-api.d.ts +0 -46
- package/front_end/generated/protocol.ts +0 -148
- package/front_end/models/ai_assistance/AiAgent2.ts +3 -3
- package/front_end/models/ai_assistance/AiConversation.ts +21 -10
- package/front_end/models/ai_assistance/AiHistoryStorage.ts +21 -10
- package/front_end/models/ai_assistance/ChangeManager.ts +2 -2
- package/front_end/models/ai_assistance/ExtensionScope.ts +6 -2
- package/front_end/models/ai_assistance/agents/AccessibilityAgent.ts +1 -1
- package/front_end/models/ai_assistance/agents/AiAgent.ts +8 -1
- package/front_end/models/ai_assistance/agents/StylingAgent.ts +1 -1
- package/front_end/models/badges/UserBadges.ts +31 -17
- package/front_end/models/bindings/NetworkProject.ts +16 -4
- package/front_end/models/emulation/DeviceModeModel.ts +67 -5
- package/front_end/models/extensions/RecorderPluginManager.ts +10 -6
- package/front_end/models/har/Log.snapshot.txt +193 -0
- package/front_end/models/har/Log.ts +3 -2
- package/front_end/models/source_map_scopes/FunctionCodeResolver.ts +7 -5
- package/front_end/models/source_map_scopes/NamesResolver.ts +36 -30
- package/front_end/models/stack_trace/StackTrace.ts +17 -0
- package/front_end/panels/application/IndexedDBModel.ts +0 -10
- package/front_end/panels/application/IndexedDBViews.ts +240 -164
- package/front_end/panels/application/SharedStorageModel.ts +0 -10
- package/front_end/panels/application/components/AdsView.ts +23 -0
- package/front_end/panels/application/components/SharedStorageAccessGrid.ts +1 -1
- package/front_end/panels/application/components/adsView.css +21 -1
- package/front_end/panels/application/indexedDBViews.css +1 -1
- package/front_end/panels/network/NetworkDataGridNode.ts +43 -1
- package/front_end/panels/network/RequestInitiatorView.ts +24 -2
- package/front_end/panels/network/networkLogView.css +5 -0
- package/front_end/panels/network/requestInitiatorViewTree.css +5 -0
- package/front_end/panels/profiler/HeapProfileView.ts +198 -79
- package/front_end/panels/recorder/README.md +1 -2
- package/front_end/panels/recorder/RecorderPanel.ts +1749 -17
- package/front_end/panels/recorder/recorder.ts +0 -2
- package/front_end/panels/settings/AISettingsTab.ts +13 -0
- package/front_end/third_party/chromium/README.chromium +1 -1
- package/front_end/ui/components/spinners/Spinner.ts +29 -32
- package/front_end/ui/components/spinners/spinner.css +32 -84
- package/front_end/ui/legacy/Treeoutline.ts +14 -6
- package/front_end/ui/legacy/UIUtils.ts +25 -10
- package/front_end/ui/legacy/Widget.ts +17 -10
- package/front_end/ui/legacy/components/data_grid/DataGridElement.ts +36 -7
- package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +63 -68
- package/front_end/ui/legacy/components/object_ui/RemoteObjectPreviewFormatter.ts +1 -1
- package/front_end/ui/legacy/components/object_ui/objectValue.css +2 -1
- package/front_end/ui/legacy/inspectorCommon.css +4 -4
- package/front_end/ui/lit/lit.ts +1 -0
- package/front_end/ui/lit/render.ts +44 -10
- package/front_end/ui/lit/strip-whitespace.ts +23 -2
- package/package.json +1 -1
- package/front_end/panels/recorder/RecorderController.ts +0 -1759
- /package/front_end/panels/recorder/{recorderController.css → recorderPanel.css} +0 -0
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: devtools-unicode-escaping
|
|
3
|
+
description: Guidelines for escaping strings and handling user-controlled data in DevTools to prevent layout bleed-through, XSS, and security issues.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Unicode Escaping and User-Controlled Data Guidelines
|
|
7
|
+
|
|
8
|
+
When displaying inspected data, user-controlled strings, or untrusted input in the DevTools UI (e.g., console messages, object properties, DOM tree nodes, or UI titles/descriptions), you must ensure they are properly escaped to prevent layout bleed-through (such as Right-to-Left leaks) or security vulnerabilities.
|
|
9
|
+
|
|
10
|
+
DevTools provides two primary Unicode escaping functions in `Platform.StringUtilities`:
|
|
11
|
+
|
|
12
|
+
## 1. Escaping for Text Representation (`escapeUnicodeAsText`)
|
|
13
|
+
|
|
14
|
+
Use `Platform.StringUtilities.escapeUnicodeAsText(content)` when rendering values that developers need to inspect (e.g. string values inside the Console or the Object properties view) where hidden, invisible, or formatting characters should be made explicitly visible.
|
|
15
|
+
|
|
16
|
+
* **Behavior**: Escapes all formatting and surrogate characters into literal Unicode escape sequences (e.g., `\u202E`, `\u200B`).
|
|
17
|
+
* **Example Usage**:
|
|
18
|
+
```typescript
|
|
19
|
+
const text = Platform.StringUtilities.escapeUnicodeAsText(JSON.stringify(description));
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## 2. Escaping for UI Rendering (`safeEscapeUnicode`)
|
|
23
|
+
|
|
24
|
+
Use `Platform.StringUtilities.safeEscapeUnicode(content)` when rendering content inside templates or HTML markup where you want safe layout-critical zero-width formatting characters to function normally for word wrapping or rendering layout, but want to escape dangerous layout-disrupting characters (like bidi overrides).
|
|
25
|
+
|
|
26
|
+
* **Behavior**: Escapes dangerous formatting and surrogate characters (like `\u202E`), but leaves safe formatting characters untouched:
|
|
27
|
+
* Zero Width Space (`\u200B`)
|
|
28
|
+
* Zero Width Non-Joiner (`\u200C`)
|
|
29
|
+
* Zero Width Joiner (`\u200D`)
|
|
30
|
+
* **Example Usage**:
|
|
31
|
+
Used automatically by the global Lit template wrapper.
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## 3. Global Lit Template Wrapper
|
|
36
|
+
|
|
37
|
+
DevTools wraps Lit's default `html` function inside `front_end/ui/lit/strip-whitespace.ts` (re-exported via `ui/lit/lit.js`). This wrapper automatically intercepts and escapes standard string values using `Platform.StringUtilities.safeEscapeUnicode(val)` at runtime.
|
|
38
|
+
|
|
39
|
+
* **What is escaped automatically**: Any standard string interpolated directly in a template (e.g., `html`<span>${myString}</span>``).
|
|
40
|
+
* **Array items**: Array values are traversed recursively, and string elements inside arrays are escaped automatically.
|
|
41
|
+
* **Lit directives**: Directives (like `ifDefined`, `live`, `repeat`, `classMap`, etc.) are automatically traversed, and any string arguments inside their `values` array are escaped recursively.
|
|
42
|
+
|
|
43
|
+
### Directives Rule:
|
|
44
|
+
Because the wrapper automatically processes directive arguments, you **do not** need to manually escape strings passed to standard Lit directives. They will be handled safely at runtime.
|
|
45
|
+
|
|
46
|
+
### Correct Example:
|
|
47
|
+
```typescript
|
|
48
|
+
title=${ifDefined(tooLong ? undefined : description)} // Automatically escaped!
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## 4. Manual DOM Assignments & Non-Lit Rendering
|
|
54
|
+
|
|
55
|
+
Any manual assignments that bypass Lit entirely (e.g., setting `element.textContent`, `element.title`, or constructing DOM elements imperatively) will also bypass the Lit wrapper.
|
|
56
|
+
|
|
57
|
+
* Always wrap user-controlled strings in these contexts with the appropriate escaping helper:
|
|
58
|
+
* Use `escapeUnicodeAsText` if you want hidden characters to display as text (e.g., showing `\\u202E`).
|
|
59
|
+
* Use `safeEscapeUnicode` if you want zero-width spaces to function but other dangerous characters to be escaped.
|
|
60
|
+
|
|
61
|
+
### Correct Example:
|
|
62
|
+
```typescript
|
|
63
|
+
nameElement.textContent = Platform.StringUtilities.escapeUnicodeAsText(name);
|
|
64
|
+
```
|
|
@@ -42,10 +42,35 @@ description: Use when migrating Chromium layout tests to DevTools unit tests
|
|
|
42
42
|
- If the newly added test does not test any logic from the component but just the getters from the mocked data explain to the user that this test does not add value and it's better to close it without adding the test. Provide a command without executing it to close the issue as "Fixed".
|
|
43
43
|
- If the newly added test uses too extensive mocks of CDP objects and methods explain to the user that the test should be foundation e2e test instead of unit test and we won't migrate it. Provide a command without executing it to close the issue as "Won't Fix (Infeasible)".
|
|
44
44
|
|
|
45
|
-
7.
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
45
|
+
7. **Upload the CL:**
|
|
46
|
+
|
|
47
|
+
## Commit message & CL upload requirements
|
|
48
|
+
|
|
49
|
+
When committing and uploading CLs, **STRICTLY** follow this format and constraints:
|
|
50
|
+
|
|
51
|
+
1. **Title line**: `[test-migration] Migrate <short test name> test to unit test`
|
|
52
|
+
2. **Body**: `This CL migrates the legacy layout test <long test name> to a unit test in <new test name>. <optional additional explanation>`
|
|
53
|
+
2. **Body appendix**: `https://crsrc.org/c/third_party/blink/web_tests/<long test name>;drc=4d51e9cab50efd0f8029c45a486e199a1d519fd1`
|
|
54
|
+
3. **Bug line**: `Fixed: <issue number>`
|
|
55
|
+
4. **Formatting constraints**: Wrap all lines to a maximum of 72 characters per line.
|
|
56
|
+
|
|
57
|
+
Example commit message:
|
|
58
|
+
|
|
59
|
+
```text
|
|
60
|
+
[test-migration] Migrate console-eval-global test to unit test
|
|
61
|
+
|
|
62
|
+
This CL migrates the legacy layout test
|
|
63
|
+
http/tests/devtools/console/console-eval-global.js to a unit test in
|
|
64
|
+
ConsolePrompt.test.ts. It verifies that the evaluation in ConsolePrompt
|
|
65
|
+
is performed in the correct execution context (the active one) and with
|
|
66
|
+
the correct expression.
|
|
67
|
+
|
|
68
|
+
https://crsrc.org/c/third_party/blink/web_tests/http/tests/devtools/console/console-eval-global.js;drc=4d51e9cab50efd0f8029c45a486e199a1d519fd1
|
|
69
|
+
|
|
70
|
+
Fixed: <issue number>
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Use the `version-control` skill to upload the CL.
|
|
49
74
|
|
|
50
75
|
## Example Conversion
|
|
51
76
|
|
|
@@ -268,11 +268,6 @@ export interface SettingRegistration {
|
|
|
268
268
|
* Determines if the setting value is stored in the global, local or session storage.
|
|
269
269
|
*/
|
|
270
270
|
storageType?: SettingStorageType;
|
|
271
|
-
/**
|
|
272
|
-
* A condition that, when present in the queryParamsObject of Runtime, constraints the value
|
|
273
|
-
* of the setting to be changed only if the user set it.
|
|
274
|
-
*/
|
|
275
|
-
userActionCondition?: string;
|
|
276
271
|
/**
|
|
277
272
|
* A condition is a function that will make the setting available if it
|
|
278
273
|
* returns true, and not available, otherwise. Make sure that objects you
|
|
@@ -23,6 +23,75 @@ import {
|
|
|
23
23
|
} from './SettingRegistration.js';
|
|
24
24
|
import {VersionController} from './VersionController.js';
|
|
25
25
|
|
|
26
|
+
/**
|
|
27
|
+
* Describes and configures a Setting.
|
|
28
|
+
*
|
|
29
|
+
* Use `Settings#resolve` to get the concrete `Setting` instance for a descriptor.
|
|
30
|
+
*/
|
|
31
|
+
export interface SettingDescriptor<ValueT> {
|
|
32
|
+
/** The unique identifier of a setting */
|
|
33
|
+
readonly name: string;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Determines how the possible values of the setting are expressed.
|
|
37
|
+
*
|
|
38
|
+
* - If the setting can only be enabled and disabled use BOOLEAN
|
|
39
|
+
* - If the setting has a list of possible values use ENUM
|
|
40
|
+
* - If each setting value is a set of objects use ARRAY
|
|
41
|
+
* - If the setting value is a regular expression use REGEX
|
|
42
|
+
*/
|
|
43
|
+
readonly type: SettingType;
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* The default value for this setting.
|
|
47
|
+
*
|
|
48
|
+
* Can be computed based on the `hostConfig` (but NOTHING ELSE).
|
|
49
|
+
*/
|
|
50
|
+
readonly defaultValue: ValueT|((hostConfig: Root.Runtime.HostConfig) => ValueT);
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Determines if the setting value is stored in the global, local or session storage.
|
|
54
|
+
*/
|
|
55
|
+
readonly storageType?: SettingStorageType;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Describes and configures a Setting that might be unavailable or disabled depending on the HostConfig.
|
|
60
|
+
*
|
|
61
|
+
* See {@link SettingAvailability} for details.
|
|
62
|
+
*
|
|
63
|
+
* Use `Settings#maybeResolve` to get the concrete `Setting` instance (or a reason why it's not available).
|
|
64
|
+
*/
|
|
65
|
+
export interface ConditionalSettingDescriptor<ValueT, ReasonT> extends SettingDescriptor<ValueT> {
|
|
66
|
+
/** The function used as `isAvailable` must only read the host config, NOTHING ELSE. */
|
|
67
|
+
isAvailable: (hostConfig: Root.Runtime.HostConfig) => SettingAvailabilityStatus<ReasonT>;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export type SettingAvailabilityStatus<ReasonT> = {
|
|
71
|
+
status: SettingAvailability.AVAILABLE,
|
|
72
|
+
}|{
|
|
73
|
+
status: SettingAvailability.UNAVAILABLE | SettingAvailability.DISABLED,
|
|
74
|
+
reason: ReasonT,
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
export const enum SettingAvailability {
|
|
78
|
+
/**
|
|
79
|
+
* Setting is available and can be changed by the user or programmatically.
|
|
80
|
+
*/
|
|
81
|
+
AVAILABLE = 1,
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Setting is not available at all. Any `maybeResolve` or `resolve` call will fail.
|
|
85
|
+
* The setting should be hidden from the user.
|
|
86
|
+
*/
|
|
87
|
+
UNAVAILABLE = 2,
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Setting is available, but its value can't be read or written.
|
|
91
|
+
*/
|
|
92
|
+
DISABLED = 3,
|
|
93
|
+
}
|
|
94
|
+
|
|
26
95
|
export interface SettingsCreationOptions {
|
|
27
96
|
syncedStorage: SettingsStorage;
|
|
28
97
|
globalStorage: SettingsStorage;
|
|
@@ -75,9 +144,6 @@ export class Settings {
|
|
|
75
144
|
this.createSetting(settingName, evaluatedDefaultValue, storageType);
|
|
76
145
|
|
|
77
146
|
setting.setTitleFunction(registration.title);
|
|
78
|
-
if (registration.userActionCondition) {
|
|
79
|
-
setting.setRequiresUserAction(Boolean(Root.Runtime.Runtime.queryParam(registration.userActionCondition)));
|
|
80
|
-
}
|
|
81
147
|
setting.setRegistration(registration);
|
|
82
148
|
|
|
83
149
|
this.registerModuleSetting(setting);
|
|
@@ -50,8 +50,40 @@ const escapedReplacements = new Map([
|
|
|
50
50
|
['</script', '\\x3C/script'],
|
|
51
51
|
]);
|
|
52
52
|
|
|
53
|
-
|
|
54
|
-
|
|
53
|
+
const UNICODE_ESCAPE_SOURCE = '[\\p{Format}\\p{Surrogate}]';
|
|
54
|
+
const UNICODE_ESCAPE_REGEX = new RegExp(UNICODE_ESCAPE_SOURCE, 'u');
|
|
55
|
+
const UNICODE_ESCAPE_GLOBAL_REGEX = new RegExp(UNICODE_ESCAPE_SOURCE, 'gu');
|
|
56
|
+
|
|
57
|
+
const UNICODE_ESCAPE_EXCEPT_ZWSP_SOURCE = '(?![\\u200B\\u200C\\u200D])[\\p{Format}]|\\p{Surrogate}';
|
|
58
|
+
const UNICODE_ESCAPE_EXCEPT_ZWSP_REGEX = new RegExp(UNICODE_ESCAPE_EXCEPT_ZWSP_SOURCE, 'u');
|
|
59
|
+
const UNICODE_ESCAPE_EXCEPT_ZWSP_GLOBAL_REGEX = new RegExp(UNICODE_ESCAPE_EXCEPT_ZWSP_SOURCE, 'gu');
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Escapes formatting and surrogate characters in the string into literal Unicode escape sequences (e.g. \u200B).
|
|
63
|
+
* Use this when displaying strings to developers for inspection (e.g. in the Console or Object properties)
|
|
64
|
+
* where you want hidden or invisible characters to be explicitly visible as literal text.
|
|
65
|
+
*/
|
|
66
|
+
export const escapeUnicodeAsText = (content: string): string => {
|
|
67
|
+
if (!UNICODE_ESCAPE_REGEX.test(content)) {
|
|
68
|
+
return content;
|
|
69
|
+
}
|
|
70
|
+
return content.replaceAll(UNICODE_ESCAPE_GLOBAL_REGEX, match => {
|
|
71
|
+
return match.split('').map(char => '\\u' + toHexadecimal(char.charCodeAt(0), 4)).join('');
|
|
72
|
+
});
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Escapes dangerous formatting and surrogate characters (like bidi override characters) to prevent
|
|
77
|
+
* security and layout issues, but leaves safe, layout-critical zero-width formatting characters
|
|
78
|
+
* (Zero Width Space \u200B, Zero Width Non-Joiner \u200C, and Zero Width Joiner \u200D) untouched.
|
|
79
|
+
* Use this when rendering user-controlled content inside templates or HTML markup where you want formatting
|
|
80
|
+
* characters to function normally for word wrapping or rendering layout, rather than showing as literal text.
|
|
81
|
+
*/
|
|
82
|
+
export const safeEscapeUnicode = (content: string): string => {
|
|
83
|
+
if (!UNICODE_ESCAPE_EXCEPT_ZWSP_REGEX.test(content)) {
|
|
84
|
+
return content;
|
|
85
|
+
}
|
|
86
|
+
return content.replaceAll(UNICODE_ESCAPE_EXCEPT_ZWSP_GLOBAL_REGEX, match => {
|
|
55
87
|
return match.split('').map(char => '\\u' + toHexadecimal(char.charCodeAt(0), 4)).join('');
|
|
56
88
|
});
|
|
57
89
|
};
|
|
@@ -176,8 +208,8 @@ export const toBase64 = (inputString: string): string => {
|
|
|
176
208
|
shift = i % 3;
|
|
177
209
|
v |= data[i] << (16 >>> shift & 24);
|
|
178
210
|
if (shift === 2) {
|
|
179
|
-
encoded += String.fromCharCode(
|
|
180
|
-
|
|
211
|
+
encoded += String.fromCharCode(encodeBits(v >>> 18 & 63), encodeBits(v >>> 12 & 63), encodeBits(v >>> 6 & 63),
|
|
212
|
+
encodeBits(v & 63));
|
|
181
213
|
v = 0;
|
|
182
214
|
}
|
|
183
215
|
}
|
|
@@ -312,8 +344,8 @@ export const filterRegex = function(query: string): RegExp {
|
|
|
312
344
|
return new RegExp(regexString, 'i');
|
|
313
345
|
};
|
|
314
346
|
|
|
315
|
-
export const createSearchRegex = function(
|
|
316
|
-
|
|
347
|
+
export const createSearchRegex = function(query: string, caseSensitive: boolean, isRegex: boolean,
|
|
348
|
+
matchWholeWord = false): RegExp {
|
|
317
349
|
const regexFlags = caseSensitive ? 'g' : 'gi';
|
|
318
350
|
let regexObject;
|
|
319
351
|
|
|
@@ -273,16 +273,6 @@ export class ServiceWorkerCacheModel extends SDKModel<EventTypes> implements Pro
|
|
|
273
273
|
indexedDBContentUpdated(_event: Protocol.Storage.IndexedDBContentUpdatedEvent): void {
|
|
274
274
|
}
|
|
275
275
|
|
|
276
|
-
interestGroupAuctionEventOccurred(_event: Protocol.Storage.InterestGroupAuctionEventOccurredEvent): void {
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
interestGroupAccessed(_event: Protocol.Storage.InterestGroupAccessedEvent): void {
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
interestGroupAuctionNetworkRequestCreated(_event: Protocol.Storage.InterestGroupAuctionNetworkRequestCreatedEvent):
|
|
283
|
-
void {
|
|
284
|
-
}
|
|
285
|
-
|
|
286
276
|
sharedStorageAccessed(_event: Protocol.Storage.SharedStorageAccessedEvent): void {
|
|
287
277
|
}
|
|
288
278
|
|
|
@@ -142,16 +142,6 @@ export class StorageBucketsModel extends SDKModel<EventTypes> implements Protoco
|
|
|
142
142
|
}
|
|
143
143
|
}
|
|
144
144
|
|
|
145
|
-
interestGroupAccessed(_event: Protocol.Storage.InterestGroupAccessedEvent): void {
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
interestGroupAuctionEventOccurred(_event: Protocol.Storage.InterestGroupAuctionEventOccurredEvent): void {
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
interestGroupAuctionNetworkRequestCreated(_event: Protocol.Storage.InterestGroupAuctionNetworkRequestCreatedEvent):
|
|
152
|
-
void {
|
|
153
|
-
}
|
|
154
|
-
|
|
155
145
|
indexedDBListUpdated(_event: Protocol.Storage.IndexedDBListUpdatedEvent): void {
|
|
156
146
|
}
|
|
157
147
|
|
|
@@ -27,8 +27,6 @@ const UIStrings = {
|
|
|
27
27
|
const str_ = i18n.i18n.registerUIStrings('entrypoints/inspector_main/OutermostTargetSelector.ts', UIStrings);
|
|
28
28
|
const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
|
|
29
29
|
|
|
30
|
-
let outermostTargetSelectorInstance: OutermostTargetSelector;
|
|
31
|
-
|
|
32
30
|
export class OutermostTargetSelector implements SDK.TargetManager.Observer, UI.SoftDropDown.Delegate<SDK.Target.Target>,
|
|
33
31
|
UI.Toolbar.Provider {
|
|
34
32
|
readonly listItems = new UI.ListModel.ListModel<SDK.Target.Target>();
|
|
@@ -54,17 +52,6 @@ export class OutermostTargetSelector implements SDK.TargetManager.Observer, UI.S
|
|
|
54
52
|
UI.Context.Context.instance().addFlavorChangeListener(SDK.Target.Target, this.#targetChanged, this);
|
|
55
53
|
}
|
|
56
54
|
|
|
57
|
-
static instance(opts: {
|
|
58
|
-
forceNew: boolean|null,
|
|
59
|
-
} = {forceNew: null}): OutermostTargetSelector {
|
|
60
|
-
const {forceNew} = opts;
|
|
61
|
-
if (!outermostTargetSelectorInstance || forceNew) {
|
|
62
|
-
outermostTargetSelectorInstance = new OutermostTargetSelector();
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
return outermostTargetSelectorInstance;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
55
|
item(): UI.Toolbar.ToolbarItem {
|
|
69
56
|
return this.#toolbarItem;
|
|
70
57
|
}
|
|
@@ -216,9 +216,14 @@ export class RenderingOptionsView extends UI.Widget.VBox {
|
|
|
216
216
|
this.#appendCheckbox(
|
|
217
217
|
i18nString(UIStrings.scrollingPerformanceIssues), i18nString(UIStrings.highlightsElementsTealThatCan),
|
|
218
218
|
Common.Settings.Settings.instance().moduleSetting('show-scroll-bottleneck-rects'));
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
219
|
+
|
|
220
|
+
// The 'Highlight ads' setting now lives in the Ads panel under Application.
|
|
221
|
+
// We display this legacy setting only when the Ads panel isn't enabled.
|
|
222
|
+
if (!Root.Runtime.hostConfig.devToolsAdsPanel?.enabled) {
|
|
223
|
+
this.#appendCheckbox(i18nString(UIStrings.highlightAds), i18nString(UIStrings.highlightsElementsRedDetectedToBe),
|
|
224
|
+
Common.Settings.Settings.instance().moduleSetting('show-ad-highlights'));
|
|
225
|
+
}
|
|
226
|
+
|
|
222
227
|
this.#appendCheckbox(
|
|
223
228
|
i18nString(UIStrings.disableLocalFonts), i18nString(UIStrings.disablesLocalSourcesInFontface),
|
|
224
229
|
Common.Settings.Settings.instance().moduleSetting('local-fonts-disabled'));
|
|
@@ -246,10 +246,10 @@ UI.Toolbar.registerToolbarItem({
|
|
|
246
246
|
});
|
|
247
247
|
|
|
248
248
|
UI.Toolbar.registerToolbarItem({
|
|
249
|
-
async
|
|
249
|
+
loadItem: Common.Lazy.lazy(async () => {
|
|
250
250
|
const InspectorMain = await loadInspectorMainModule();
|
|
251
|
-
return InspectorMain.OutermostTargetSelector.OutermostTargetSelector
|
|
252
|
-
}
|
|
251
|
+
return new InspectorMain.OutermostTargetSelector.OutermostTargetSelector();
|
|
252
|
+
}) as () => Promise<UI.Toolbar.Provider>,
|
|
253
253
|
order: 97,
|
|
254
254
|
location: UI.Toolbar.ToolbarItemLocation.MAIN_TOOLBAR_RIGHT,
|
|
255
255
|
});
|
|
@@ -215,6 +215,11 @@ export class MainImpl {
|
|
|
215
215
|
this.#universe = new Foundation.Universe.Universe(creationOptions);
|
|
216
216
|
Root.DevToolsContext.setGlobalInstance(this.#universe.context as Root.DevToolsContext.WritableDevToolsContext);
|
|
217
217
|
|
|
218
|
+
// Mark 'cache-disabled' as requiring user interaction when multiple CDP clients are attached.
|
|
219
|
+
if (Root.Runtime.Runtime.queryParam('hasOtherClients')) {
|
|
220
|
+
this.#universe.settings.moduleSetting('cache-disabled').setRequiresUserAction(true);
|
|
221
|
+
}
|
|
222
|
+
|
|
218
223
|
Root.Runtime.experiments.cleanUpStaleExperiments();
|
|
219
224
|
|
|
220
225
|
await this.requestAndRegisterLocaleData();
|
|
@@ -503,8 +508,8 @@ export class MainImpl {
|
|
|
503
508
|
'no-profile-and-not-eligible';
|
|
504
509
|
void VisualLogging.logFunctionCall('gdp-client-initialize', contextString);
|
|
505
510
|
});
|
|
506
|
-
void
|
|
507
|
-
|
|
511
|
+
void this.#universe.userBadges.initialize();
|
|
512
|
+
this.#universe.userBadges.addEventListener(Badges.Events.BADGE_TRIGGERED, async ev => {
|
|
508
513
|
loadedPanelCommonModule ??= await import('../../panels/common/common.js') as typeof PanelCommon;
|
|
509
514
|
const badgeNotification = new loadedPanelCommonModule.BadgeNotification();
|
|
510
515
|
const {badge, reason} = ev.data;
|
|
@@ -6,7 +6,9 @@ import * as Common from '../core/common/common.js';
|
|
|
6
6
|
import * as Host from '../core/host/host.js';
|
|
7
7
|
import * as Root from '../core/root/root.js';
|
|
8
8
|
import * as SDK from '../core/sdk/sdk.js';
|
|
9
|
+
import * as AiAssistance from '../models/ai_assistance/ai_assistance.js';
|
|
9
10
|
import * as AutofillManager from '../models/autofill_manager/autofill_manager.js';
|
|
11
|
+
import * as Badges from '../models/badges/badges.js';
|
|
10
12
|
import * as Bindings from '../models/bindings/bindings.js';
|
|
11
13
|
import * as Breakpoints from '../models/breakpoints/breakpoints.js';
|
|
12
14
|
import * as CrUXManager from '../models/crux-manager/crux-manager.js';
|
|
@@ -186,6 +188,12 @@ export class Universe {
|
|
|
186
188
|
const liveMetrics = new LiveMetrics.LiveMetrics(targetManager, deviceModeModel);
|
|
187
189
|
context.set(LiveMetrics.LiveMetrics, liveMetrics);
|
|
188
190
|
|
|
191
|
+
const userBadges = new Badges.UserBadges(settings, gdpClient);
|
|
192
|
+
context.set(Badges.UserBadges, userBadges);
|
|
193
|
+
|
|
194
|
+
const aiHistoryStorage = new AiAssistance.AiHistoryStorage.AiHistoryStorage(settings);
|
|
195
|
+
context.set(AiAssistance.AiHistoryStorage.AiHistoryStorage, aiHistoryStorage);
|
|
196
|
+
|
|
189
197
|
this.autofillManager = new AutofillManager.AutofillManager.AutofillManager(targetManager, frameManager);
|
|
190
198
|
}
|
|
191
199
|
|
|
@@ -198,6 +206,10 @@ export class Universe {
|
|
|
198
206
|
return this.context.get(Persistence.AutomaticFileSystemWorkspaceBinding.AutomaticFileSystemWorkspaceBinding);
|
|
199
207
|
}
|
|
200
208
|
|
|
209
|
+
get aiHistoryStorage(): AiAssistance.AiHistoryStorage.AiHistoryStorage {
|
|
210
|
+
return this.context.get(AiAssistance.AiHistoryStorage.AiHistoryStorage);
|
|
211
|
+
}
|
|
212
|
+
|
|
201
213
|
get breakpointManager(): Breakpoints.BreakpointManager.BreakpointManager {
|
|
202
214
|
return this.context.get(Breakpoints.BreakpointManager.BreakpointManager);
|
|
203
215
|
}
|
|
@@ -286,6 +298,10 @@ export class Universe {
|
|
|
286
298
|
return this.context.get(SDK.TargetManager.TargetManager);
|
|
287
299
|
}
|
|
288
300
|
|
|
301
|
+
get userBadges(): Badges.UserBadges {
|
|
302
|
+
return this.context.get(Badges.UserBadges);
|
|
303
|
+
}
|
|
304
|
+
|
|
289
305
|
get workspace(): Workspace.Workspace.WorkspaceImpl {
|
|
290
306
|
return this.context.get(Workspace.Workspace.WorkspaceImpl);
|
|
291
307
|
}
|
|
@@ -77,7 +77,7 @@ inspectorBackend.registerEnum("Audits.CookieOperation", {SetCookie: "SetCookie",
|
|
|
77
77
|
inspectorBackend.registerEnum("Audits.InsightType", {GitHubResource: "GitHubResource", GracePeriod: "GracePeriod", Heuristics: "Heuristics"});
|
|
78
78
|
inspectorBackend.registerEnum("Audits.PerformanceIssueType", {DocumentCookie: "DocumentCookie"});
|
|
79
79
|
inspectorBackend.registerEnum("Audits.MixedContentResolutionStatus", {MixedContentBlocked: "MixedContentBlocked", MixedContentAutomaticallyUpgraded: "MixedContentAutomaticallyUpgraded", MixedContentWarning: "MixedContentWarning"});
|
|
80
|
-
inspectorBackend.registerEnum("Audits.MixedContentResourceType", {
|
|
80
|
+
inspectorBackend.registerEnum("Audits.MixedContentResourceType", {Audio: "Audio", Beacon: "Beacon", CSPReport: "CSPReport", Download: "Download", EventSource: "EventSource", Favicon: "Favicon", Font: "Font", Form: "Form", Frame: "Frame", Image: "Image", Import: "Import", JSON: "JSON", Manifest: "Manifest", Ping: "Ping", PluginData: "PluginData", PluginResource: "PluginResource", Prefetch: "Prefetch", Resource: "Resource", Script: "Script", ServiceWorker: "ServiceWorker", SharedWorker: "SharedWorker", SpeculationRules: "SpeculationRules", Stylesheet: "Stylesheet", Track: "Track", Video: "Video", Worker: "Worker", XMLHttpRequest: "XMLHttpRequest", XSLT: "XSLT"});
|
|
81
81
|
inspectorBackend.registerEnum("Audits.BlockedByResponseReason", {CoepFrameResourceNeedsCoepHeader: "CoepFrameResourceNeedsCoepHeader", CoopSandboxedIFrameCannotNavigateToCoopPage: "CoopSandboxedIFrameCannotNavigateToCoopPage", CorpNotSameOrigin: "CorpNotSameOrigin", CorpNotSameOriginAfterDefaultedToSameOriginByCoep: "CorpNotSameOriginAfterDefaultedToSameOriginByCoep", CorpNotSameOriginAfterDefaultedToSameOriginByDip: "CorpNotSameOriginAfterDefaultedToSameOriginByDip", CorpNotSameOriginAfterDefaultedToSameOriginByCoepAndDip: "CorpNotSameOriginAfterDefaultedToSameOriginByCoepAndDip", CorpNotSameSite: "CorpNotSameSite", SRIMessageSignatureMismatch: "SRIMessageSignatureMismatch"});
|
|
82
82
|
inspectorBackend.registerEnum("Audits.HeavyAdResolutionStatus", {HeavyAdBlocked: "HeavyAdBlocked", HeavyAdWarning: "HeavyAdWarning"});
|
|
83
83
|
inspectorBackend.registerEnum("Audits.HeavyAdReason", {NetworkTotalLimit: "NetworkTotalLimit", CpuTotalLimit: "CpuTotalLimit", CpuPeakLimit: "CpuPeakLimit"});
|
|
@@ -203,7 +203,6 @@ inspectorBackend.registerEnum("Browser.WindowState", {Normal: "normal", Minimize
|
|
|
203
203
|
inspectorBackend.registerEnum("Browser.PermissionType", {Ar: "ar", AudioCapture: "audioCapture", AutomaticFullscreen: "automaticFullscreen", BackgroundFetch: "backgroundFetch", BackgroundSync: "backgroundSync", CameraPanTiltZoom: "cameraPanTiltZoom", CapturedSurfaceControl: "capturedSurfaceControl", ClipboardReadWrite: "clipboardReadWrite", ClipboardSanitizedWrite: "clipboardSanitizedWrite", DisplayCapture: "displayCapture", DurableStorage: "durableStorage", Geolocation: "geolocation", HandTracking: "handTracking", IdleDetection: "idleDetection", KeyboardLock: "keyboardLock", LocalFonts: "localFonts", LocalNetwork: "localNetwork", LocalNetworkAccess: "localNetworkAccess", LoopbackNetwork: "loopbackNetwork", Midi: "midi", MidiSysex: "midiSysex", Nfc: "nfc", Notifications: "notifications", PaymentHandler: "paymentHandler", PeriodicBackgroundSync: "periodicBackgroundSync", PointerLock: "pointerLock", ProtectedMediaIdentifier: "protectedMediaIdentifier", Sensors: "sensors", SmartCard: "smartCard", SpeakerSelection: "speakerSelection", StorageAccess: "storageAccess", TopLevelStorageAccess: "topLevelStorageAccess", VideoCapture: "videoCapture", Vr: "vr", WakeLockScreen: "wakeLockScreen", WakeLockSystem: "wakeLockSystem", WebAppInstallation: "webAppInstallation", WebPrinting: "webPrinting", WindowManagement: "windowManagement"});
|
|
204
204
|
inspectorBackend.registerEnum("Browser.PermissionSetting", {Granted: "granted", Denied: "denied", Prompt: "prompt"});
|
|
205
205
|
inspectorBackend.registerEnum("Browser.BrowserCommandId", {OpenTabSearch: "openTabSearch", CloseTabSearch: "closeTabSearch", OpenGlic: "openGlic"});
|
|
206
|
-
inspectorBackend.registerEnum("Browser.PrivacySandboxAPI", {BiddingAndAuctionServices: "BiddingAndAuctionServices", TrustedKeyValue: "TrustedKeyValue"});
|
|
207
206
|
inspectorBackend.registerEvent("Browser.downloadWillBegin", ["frameId", "guid", "url", "suggestedFilename"]);
|
|
208
207
|
inspectorBackend.registerEnum("Browser.DownloadProgressEventState", {InProgress: "inProgress", Completed: "completed", Canceled: "canceled"});
|
|
209
208
|
inspectorBackend.registerEvent("Browser.downloadProgress", ["guid", "totalBytes", "receivedBytes", "state", "filePath"]);
|
|
@@ -227,7 +226,6 @@ inspectorBackend.registerCommand("Browser.setContentsSize", [{"name": "windowId"
|
|
|
227
226
|
inspectorBackend.registerCommand("Browser.setDockTile", [{"name": "badgeLabel", "type": "string", "optional": true, "description": "", "typeRef": null}, {"name": "image", "type": "string", "optional": true, "description": "Png encoded image.", "typeRef": null}], [], "Set dock tile details, platform-specific.");
|
|
228
227
|
inspectorBackend.registerCommand("Browser.executeBrowserCommand", [{"name": "commandId", "type": "string", "optional": false, "description": "", "typeRef": "Browser.BrowserCommandId"}], [], "Invoke custom browser commands used by telemetry.");
|
|
229
228
|
inspectorBackend.registerCommand("Browser.addPrivacySandboxEnrollmentOverride", [{"name": "url", "type": "string", "optional": false, "description": "", "typeRef": null}], [], "Allows a site to use privacy sandbox features that require enrollment without the site actually being enrolled. Only supported on page targets.");
|
|
230
|
-
inspectorBackend.registerCommand("Browser.addPrivacySandboxCoordinatorKeyConfig", [{"name": "api", "type": "string", "optional": false, "description": "", "typeRef": "Browser.PrivacySandboxAPI"}, {"name": "coordinatorOrigin", "type": "string", "optional": false, "description": "", "typeRef": null}, {"name": "keyConfig", "type": "string", "optional": false, "description": "", "typeRef": null}, {"name": "browserContextId", "type": "string", "optional": true, "description": "BrowserContext to perform the action in. When omitted, default browser context is used.", "typeRef": "Browser.BrowserContextID"}], [], "Configures encryption keys used with a given privacy sandbox API to talk to a trusted coordinator. Since this is intended for test automation only, coordinatorOrigin must be a .test domain. No existing coordinator configuration for the origin may exist.");
|
|
231
229
|
inspectorBackend.registerType("Browser.Bounds", [{"name": "left", "type": "number", "optional": true, "description": "The offset from the left edge of the screen to the window in pixels.", "typeRef": null}, {"name": "top", "type": "number", "optional": true, "description": "The offset from the top edge of the screen to the window in pixels.", "typeRef": null}, {"name": "width", "type": "number", "optional": true, "description": "The window width in pixels.", "typeRef": null}, {"name": "height", "type": "number", "optional": true, "description": "The window height in pixels.", "typeRef": null}, {"name": "windowState", "type": "string", "optional": true, "description": "The window state. Default to normal.", "typeRef": "Browser.WindowState"}]);
|
|
232
230
|
inspectorBackend.registerType("Browser.PermissionDescriptor", [{"name": "name", "type": "string", "optional": false, "description": "Name of permission. See https://cs.chromium.org/chromium/src/third_party/blink/renderer/modules/permissions/permission_descriptor.idl for valid permission names.", "typeRef": null}, {"name": "sysex", "type": "boolean", "optional": true, "description": "For \\\"midi\\\" permission, may also specify sysex control.", "typeRef": null}, {"name": "userVisibleOnly", "type": "boolean", "optional": true, "description": "For \\\"push\\\" permission, may specify userVisibleOnly. Note that userVisibleOnly = true is the only currently supported type.", "typeRef": null}, {"name": "allowWithoutSanitization", "type": "boolean", "optional": true, "description": "For \\\"clipboard\\\" permission, may specify allowWithoutSanitization.", "typeRef": null}, {"name": "allowWithoutGesture", "type": "boolean", "optional": true, "description": "For \\\"fullscreen\\\" permission, must specify allowWithoutGesture:true.", "typeRef": null}, {"name": "panTiltZoom", "type": "boolean", "optional": true, "description": "For \\\"camera\\\" permission, may specify panTiltZoom.", "typeRef": null}]);
|
|
233
231
|
inspectorBackend.registerType("Browser.Bucket", [{"name": "low", "type": "number", "optional": false, "description": "Minimum value (inclusive).", "typeRef": null}, {"name": "high", "type": "number", "optional": false, "description": "Maximum value (exclusive).", "typeRef": null}, {"name": "count", "type": "number", "optional": false, "description": "Number of samples.", "typeRef": null}]);
|
|
@@ -1319,19 +1317,13 @@ inspectorBackend.registerType("SmartCardEmulation.ReaderStateOut", [{"name": "re
|
|
|
1319
1317
|
|
|
1320
1318
|
// Storage.
|
|
1321
1319
|
inspectorBackend.registerEnum("Storage.StorageType", {Cookies: "cookies", File_systems: "file_systems", Indexeddb: "indexeddb", Local_storage: "local_storage", Shader_cache: "shader_cache", Websql: "websql", Service_workers: "service_workers", Cache_storage: "cache_storage", Interest_groups: "interest_groups", Shared_storage: "shared_storage", Storage_buckets: "storage_buckets", All: "all", Other: "other"});
|
|
1322
|
-
inspectorBackend.registerEnum("Storage.
|
|
1323
|
-
inspectorBackend.registerEnum("Storage.InterestGroupAuctionEventType", {Started: "started", ConfigResolved: "configResolved"});
|
|
1324
|
-
inspectorBackend.registerEnum("Storage.InterestGroupAuctionFetchType", {BidderJs: "bidderJs", BidderWasm: "bidderWasm", SellerJs: "sellerJs", BidderTrustedSignals: "bidderTrustedSignals", SellerTrustedSignals: "sellerTrustedSignals"});
|
|
1325
|
-
inspectorBackend.registerEnum("Storage.SharedStorageAccessScope", {Window: "window", SharedStorageWorklet: "sharedStorageWorklet", ProtectedAudienceWorklet: "protectedAudienceWorklet", Header: "header"});
|
|
1320
|
+
inspectorBackend.registerEnum("Storage.SharedStorageAccessScope", {Window: "window", SharedStorageWorklet: "sharedStorageWorklet", Header: "header"});
|
|
1326
1321
|
inspectorBackend.registerEnum("Storage.SharedStorageAccessMethod", {AddModule: "addModule", CreateWorklet: "createWorklet", SelectURL: "selectURL", Run: "run", BatchUpdate: "batchUpdate", Set: "set", Append: "append", Delete: "delete", Clear: "clear", Get: "get", Keys: "keys", Values: "values", Entries: "entries", Length: "length", RemainingBudget: "remainingBudget"});
|
|
1327
1322
|
inspectorBackend.registerEnum("Storage.StorageBucketsDurability", {Relaxed: "relaxed", Strict: "strict"});
|
|
1328
1323
|
inspectorBackend.registerEvent("Storage.cacheStorageContentUpdated", ["origin", "storageKey", "bucketId", "cacheName"]);
|
|
1329
1324
|
inspectorBackend.registerEvent("Storage.cacheStorageListUpdated", ["origin", "storageKey", "bucketId"]);
|
|
1330
1325
|
inspectorBackend.registerEvent("Storage.indexedDBContentUpdated", ["origin", "storageKey", "bucketId", "databaseName", "objectStoreName"]);
|
|
1331
1326
|
inspectorBackend.registerEvent("Storage.indexedDBListUpdated", ["origin", "storageKey", "bucketId"]);
|
|
1332
|
-
inspectorBackend.registerEvent("Storage.interestGroupAccessed", ["accessTime", "type", "ownerOrigin", "name", "componentSellerOrigin", "bid", "bidCurrency", "uniqueAuctionId"]);
|
|
1333
|
-
inspectorBackend.registerEvent("Storage.interestGroupAuctionEventOccurred", ["eventTime", "type", "uniqueAuctionId", "parentAuctionId", "auctionConfig"]);
|
|
1334
|
-
inspectorBackend.registerEvent("Storage.interestGroupAuctionNetworkRequestCreated", ["type", "requestId", "auctions"]);
|
|
1335
1327
|
inspectorBackend.registerEvent("Storage.sharedStorageAccessed", ["accessTime", "scope", "method", "mainFrameId", "ownerOrigin", "ownerSite", "params"]);
|
|
1336
1328
|
inspectorBackend.registerEvent("Storage.sharedStorageWorkletOperationExecutionFinished", ["finishedTime", "executionTime", "method", "operationId", "workletTargetId", "mainFrameId", "ownerOrigin"]);
|
|
1337
1329
|
inspectorBackend.registerEvent("Storage.storageBucketCreatedOrUpdated", ["bucketInfo"]);
|
|
@@ -1355,9 +1347,6 @@ inspectorBackend.registerCommand("Storage.untrackIndexedDBForOrigin", [{"name":
|
|
|
1355
1347
|
inspectorBackend.registerCommand("Storage.untrackIndexedDBForStorageKey", [{"name": "storageKey", "type": "string", "optional": false, "description": "Storage key.", "typeRef": null}], [], "Unregisters storage key from receiving notifications for IndexedDB.");
|
|
1356
1348
|
inspectorBackend.registerCommand("Storage.getTrustTokens", [], ["tokens"], "Returns the number of stored Trust Tokens per issuer for the current browsing context.");
|
|
1357
1349
|
inspectorBackend.registerCommand("Storage.clearTrustTokens", [{"name": "issuerOrigin", "type": "string", "optional": false, "description": "", "typeRef": null}], ["didDeleteTokens"], "Removes all Trust Tokens issued by the provided issuerOrigin. Leaves other stored data, including the issuer's Redemption Records, intact.");
|
|
1358
|
-
inspectorBackend.registerCommand("Storage.getInterestGroupDetails", [{"name": "ownerOrigin", "type": "string", "optional": false, "description": "", "typeRef": null}, {"name": "name", "type": "string", "optional": false, "description": "", "typeRef": null}], ["details"], "Gets details for a named interest group.");
|
|
1359
|
-
inspectorBackend.registerCommand("Storage.setInterestGroupTracking", [{"name": "enable", "type": "boolean", "optional": false, "description": "", "typeRef": null}], [], "Enables/Disables issuing of interestGroupAccessed events.");
|
|
1360
|
-
inspectorBackend.registerCommand("Storage.setInterestGroupAuctionTracking", [{"name": "enable", "type": "boolean", "optional": false, "description": "", "typeRef": null}], [], "Enables/Disables issuing of interestGroupAuctionEventOccurred and interestGroupAuctionNetworkRequestCreated.");
|
|
1361
1350
|
inspectorBackend.registerCommand("Storage.getSharedStorageMetadata", [{"name": "ownerOrigin", "type": "string", "optional": false, "description": "", "typeRef": null}], ["metadata"], "Gets metadata for an origin's shared storage.");
|
|
1362
1351
|
inspectorBackend.registerCommand("Storage.getSharedStorageEntries", [{"name": "ownerOrigin", "type": "string", "optional": false, "description": "", "typeRef": null}], ["entries"], "Gets the entries in an given origin's shared storage.");
|
|
1363
1352
|
inspectorBackend.registerCommand("Storage.setSharedStorageEntry", [{"name": "ownerOrigin", "type": "string", "optional": false, "description": "", "typeRef": null}, {"name": "key", "type": "string", "optional": false, "description": "", "typeRef": null}, {"name": "value", "type": "string", "optional": false, "description": "", "typeRef": null}, {"name": "ignoreIfPresent", "type": "boolean", "optional": true, "description": "If `ignoreIfPresent` is included and true, then only sets the entry if `key` doesn't already exist.", "typeRef": null}], [], "Sets entry with `key` and `value` for a given origin's shared storage.");
|
|
@@ -1369,7 +1358,6 @@ inspectorBackend.registerCommand("Storage.setStorageBucketTracking", [{"name": "
|
|
|
1369
1358
|
inspectorBackend.registerCommand("Storage.deleteStorageBucket", [{"name": "bucket", "type": "object", "optional": false, "description": "", "typeRef": "Storage.StorageBucket"}], [], "Deletes the Storage Bucket with the given storage key and bucket name.");
|
|
1370
1359
|
inspectorBackend.registerCommand("Storage.runBounceTrackingMitigations", [], ["deletedSites"], "Deletes state for sites identified as potential bounce trackers, immediately.");
|
|
1371
1360
|
inspectorBackend.registerCommand("Storage.getRelatedWebsiteSets", [], ["sets"], "Returns the effective Related Website Sets in use by this profile for the browser session. The effective Related Website Sets will not change during a browser session.");
|
|
1372
|
-
inspectorBackend.registerCommand("Storage.setProtectedAudienceKAnonymity", [{"name": "owner", "type": "string", "optional": false, "description": "", "typeRef": null}, {"name": "name", "type": "string", "optional": false, "description": "", "typeRef": null}, {"name": "hashes", "type": "array", "optional": false, "description": "", "typeRef": "binary"}], [], "");
|
|
1373
1361
|
inspectorBackend.registerType("Storage.UsageForType", [{"name": "storageType", "type": "string", "optional": false, "description": "Name of storage type.", "typeRef": "Storage.StorageType"}, {"name": "usage", "type": "number", "optional": false, "description": "Storage usage (bytes).", "typeRef": null}]);
|
|
1374
1362
|
inspectorBackend.registerType("Storage.TrustTokens", [{"name": "issuerOrigin", "type": "string", "optional": false, "description": "", "typeRef": null}, {"name": "count", "type": "number", "optional": false, "description": "", "typeRef": null}]);
|
|
1375
1363
|
inspectorBackend.registerType("Storage.SharedStorageEntry", [{"name": "key", "type": "string", "optional": false, "description": "", "typeRef": null}, {"name": "value", "type": "string", "optional": false, "description": "", "typeRef": null}]);
|
|
@@ -781,23 +781,6 @@ export namespace ProtocolMapping {
|
|
|
781
781
|
* The origin's IndexedDB database list has been modified.
|
|
782
782
|
*/
|
|
783
783
|
'Storage.indexedDBListUpdated': [Protocol.Storage.IndexedDBListUpdatedEvent];
|
|
784
|
-
/**
|
|
785
|
-
* One of the interest groups was accessed. Note that these events are global
|
|
786
|
-
* to all targets sharing an interest group store.
|
|
787
|
-
*/
|
|
788
|
-
'Storage.interestGroupAccessed': [Protocol.Storage.InterestGroupAccessedEvent];
|
|
789
|
-
/**
|
|
790
|
-
* An auction involving interest groups is taking place. These events are
|
|
791
|
-
* target-specific.
|
|
792
|
-
*/
|
|
793
|
-
'Storage.interestGroupAuctionEventOccurred': [Protocol.Storage.InterestGroupAuctionEventOccurredEvent];
|
|
794
|
-
/**
|
|
795
|
-
* Specifies which auctions a particular network fetch may be related to, and
|
|
796
|
-
* in what role. Note that it is not ordered with respect to
|
|
797
|
-
* Network.requestWillBeSent (but will happen before loadingFinished
|
|
798
|
-
* loadingFailed).
|
|
799
|
-
*/
|
|
800
|
-
'Storage.interestGroupAuctionNetworkRequestCreated': [Protocol.Storage.InterestGroupAuctionNetworkRequestCreatedEvent];
|
|
801
784
|
/**
|
|
802
785
|
* Shared storage was accessed by the associated page.
|
|
803
786
|
* The following parameters are included in all events.
|
|
@@ -1510,16 +1493,6 @@ export namespace ProtocolMapping {
|
|
|
1510
1493
|
paramsType: [Protocol.Browser.AddPrivacySandboxEnrollmentOverrideRequest];
|
|
1511
1494
|
returnType: void;
|
|
1512
1495
|
};
|
|
1513
|
-
/**
|
|
1514
|
-
* Configures encryption keys used with a given privacy sandbox API to talk
|
|
1515
|
-
* to a trusted coordinator. Since this is intended for test automation only,
|
|
1516
|
-
* coordinatorOrigin must be a .test domain. No existing coordinator
|
|
1517
|
-
* configuration for the origin may exist.
|
|
1518
|
-
*/
|
|
1519
|
-
'Browser.addPrivacySandboxCoordinatorKeyConfig': {
|
|
1520
|
-
paramsType: [Protocol.Browser.AddPrivacySandboxCoordinatorKeyConfigRequest];
|
|
1521
|
-
returnType: void;
|
|
1522
|
-
};
|
|
1523
1496
|
/**
|
|
1524
1497
|
* Inserts a new rule with the given `ruleText` in a stylesheet with given `styleSheetId`, at the
|
|
1525
1498
|
* position specified by `location`.
|
|
@@ -4920,28 +4893,6 @@ export namespace ProtocolMapping {
|
|
|
4920
4893
|
paramsType: [Protocol.Storage.ClearTrustTokensRequest];
|
|
4921
4894
|
returnType: Protocol.Storage.ClearTrustTokensResponse;
|
|
4922
4895
|
};
|
|
4923
|
-
/**
|
|
4924
|
-
* Gets details for a named interest group.
|
|
4925
|
-
*/
|
|
4926
|
-
'Storage.getInterestGroupDetails': {
|
|
4927
|
-
paramsType: [Protocol.Storage.GetInterestGroupDetailsRequest];
|
|
4928
|
-
returnType: Protocol.Storage.GetInterestGroupDetailsResponse;
|
|
4929
|
-
};
|
|
4930
|
-
/**
|
|
4931
|
-
* Enables/Disables issuing of interestGroupAccessed events.
|
|
4932
|
-
*/
|
|
4933
|
-
'Storage.setInterestGroupTracking': {
|
|
4934
|
-
paramsType: [Protocol.Storage.SetInterestGroupTrackingRequest];
|
|
4935
|
-
returnType: void;
|
|
4936
|
-
};
|
|
4937
|
-
/**
|
|
4938
|
-
* Enables/Disables issuing of interestGroupAuctionEventOccurred and
|
|
4939
|
-
* interestGroupAuctionNetworkRequestCreated.
|
|
4940
|
-
*/
|
|
4941
|
-
'Storage.setInterestGroupAuctionTracking': {
|
|
4942
|
-
paramsType: [Protocol.Storage.SetInterestGroupAuctionTrackingRequest];
|
|
4943
|
-
returnType: void;
|
|
4944
|
-
};
|
|
4945
4896
|
/**
|
|
4946
4897
|
* Gets metadata for an origin's shared storage.
|
|
4947
4898
|
*/
|
|
@@ -5020,10 +4971,6 @@ export namespace ProtocolMapping {
|
|
|
5020
4971
|
paramsType: [];
|
|
5021
4972
|
returnType: Protocol.Storage.GetRelatedWebsiteSetsResponse;
|
|
5022
4973
|
};
|
|
5023
|
-
'Storage.setProtectedAudienceKAnonymity': {
|
|
5024
|
-
paramsType: [Protocol.Storage.SetProtectedAudienceKAnonymityRequest];
|
|
5025
|
-
returnType: void;
|
|
5026
|
-
};
|
|
5027
4974
|
/**
|
|
5028
4975
|
* Returns information about the system.
|
|
5029
4976
|
*/
|