chrome-devtools-frontend 1.0.1632065 → 1.0.1635876
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/front_end/core/host/UserMetrics.ts +5 -2
- package/front_end/core/root/ExperimentNames.ts +1 -0
- package/front_end/core/root/Runtime.ts +5 -0
- package/front_end/core/sdk/SourceMapCache.ts +13 -11
- package/front_end/core/sdk/SourceMapManager.ts +7 -3
- package/front_end/entrypoints/greendev_floaty/FloatyEntrypoint.ts +84 -22
- package/front_end/entrypoints/main/MainImpl.ts +8 -0
- package/front_end/generated/InspectorBackendCommands.ts +3 -4
- package/front_end/generated/SupportedCSSProperties.js +272 -2
- package/front_end/generated/protocol-mapping.d.ts +0 -10
- package/front_end/generated/protocol-proxy-api.d.ts +0 -8
- package/front_end/generated/protocol.ts +5 -7
- package/front_end/models/ai_assistance/AiConversation.ts +16 -11
- package/front_end/models/ai_assistance/agents/AccessibilityAgent.ts +13 -2
- package/front_end/models/ai_assistance/agents/AiAgent.ts +65 -11
- package/front_end/models/ai_assistance/agents/ContextSelectionAgent.ts +42 -2
- package/front_end/models/ai_assistance/agents/GreenDevAgent.ts +68 -5
- package/front_end/models/ai_assistance/agents/GreenDevAgentAntigravityCliSocketClient.ts +53 -0
- package/front_end/models/ai_assistance/agents/GreenDevAgentGeminiCliSocketClient.ts +117 -0
- package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +30 -1
- package/front_end/models/ai_assistance/ai_assistance.ts +4 -0
- package/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.ts +4 -2
- package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.ts +5 -2
- package/front_end/models/extensions/RecorderExtensionEndpoint.ts +9 -1
- package/front_end/models/extensions/RecorderPluginManager.ts +1 -0
- package/front_end/models/greendev/Prototypes.ts +17 -5
- package/front_end/models/trace/handlers/FramesHandler.ts +19 -13
- package/front_end/panels/ai_assistance/components/AccessibilityAgentMarkdownRenderer.ts +3 -0
- package/front_end/panels/ai_assistance/components/ChatInput.ts +4 -2
- package/front_end/panels/ai_assistance/components/ChatMessage.ts +3 -1
- package/front_end/panels/application/preloading/components/PreloadingString.ts +0 -8
- package/front_end/panels/common/ExtensionServer.ts +34 -11
- package/front_end/panels/elements/CSSRuleValidator.ts +37 -34
- package/front_end/panels/elements/CSSRuleValidatorHelper.ts +8 -6
- package/front_end/panels/elements/ElementsTreeElement.ts +8 -2
- package/front_end/panels/elements/components/CSSHintDetailsView.ts +5 -5
- package/front_end/panels/js_timeline/js_timeline-meta.ts +30 -0
- package/front_end/panels/protocol_monitor/JSONEditor.ts +4 -4
- package/front_end/panels/protocol_monitor/ProtocolMonitor.ts +2 -2
- package/front_end/panels/recorder/RecorderController.ts +50 -1
- package/front_end/panels/recorder/extensions/ExtensionManager.ts +1 -0
- package/front_end/panels/recorder/models/RecordingPlayer.ts +12 -3
- package/front_end/panels/recorder/testing/RecorderHelpers.ts +2 -0
- package/front_end/panels/settings/SettingsScreen.ts +3 -2
- package/front_end/panels/sources/FilteredUISourceCodeListProvider.ts +5 -2
- package/front_end/panels/timeline/timeline-meta.ts +10 -6
- package/front_end/panels/whats_new/ReleaseNoteText.ts +9 -9
- package/front_end/panels/whats_new/resources/WNDT.md +9 -9
- package/front_end/third_party/chromium/README.chromium +1 -1
- package/front_end/third_party/puppeteer/README.chromium +2 -2
- package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.d.ts +8 -5
- package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +35 -33
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/TargetManager.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/TargetManager.js +0 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/TargetManager.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/WebMCP.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/WebMCP.js +0 -3
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/WebMCP.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/Debug.d.ts +8 -8
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/Debug.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/Debug.js +8 -8
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/Debug.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/injected/CustomQuerySelector.d.ts +2 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/injected/CustomQuerySelector.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/injected/CustomQuerySelector.js +2 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/injected/CustomQuerySelector.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/injected/injected.d.ts +2 -7
- package/front_end/third_party/puppeteer/package/lib/puppeteer/injected/injected.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/node/PuppeteerNode.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/node/PuppeteerNode.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/revisions.d.ts +3 -3
- package/front_end/third_party/puppeteer/package/lib/puppeteer/revisions.js +3 -3
- package/front_end/third_party/puppeteer/package/lib/puppeteer/revisions.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/util/Mutex.d.ts +10 -7
- package/front_end/third_party/puppeteer/package/lib/puppeteer/util/Mutex.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/util/Mutex.js +16 -12
- package/front_end/third_party/puppeteer/package/lib/puppeteer/util/Mutex.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/util/version.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/util/version.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/types.d.ts +8 -5
- package/front_end/third_party/puppeteer/package/package.json +5 -7
- package/front_end/third_party/puppeteer/package/src/cdp/TargetManager.ts +0 -1
- package/front_end/third_party/puppeteer/package/src/cdp/WebMCP.ts +0 -3
- package/front_end/third_party/puppeteer/package/src/common/Debug.ts +11 -11
- package/front_end/third_party/puppeteer/package/src/generated/injected.ts +1 -1
- package/front_end/third_party/puppeteer/package/src/injected/CustomQuerySelector.ts +3 -2
- package/front_end/third_party/puppeteer/package/src/node/PuppeteerNode.ts +1 -1
- package/front_end/third_party/puppeteer/package/src/revisions.ts +3 -3
- package/front_end/third_party/puppeteer/package/src/util/Mutex.ts +17 -12
- package/front_end/third_party/puppeteer/package/src/util/version.ts +1 -1
- package/front_end/ui/components/markdown_view/MarkdownLinksMap.ts +7 -0
- package/front_end/ui/legacy/InspectorDrawerView.ts +2 -1
- package/front_end/ui/legacy/InspectorView.ts +1 -1
- package/front_end/ui/legacy/PlusButton.ts +269 -0
- package/front_end/ui/legacy/ViewManager.ts +38 -11
- package/front_end/ui/legacy/components/source_frame/FontView.ts +11 -3
- package/front_end/ui/legacy/components/source_frame/ImageView.ts +16 -0
- package/front_end/ui/legacy/components/source_frame/imageView.css +13 -0
- package/front_end/ui/legacy/components/utils/Linkifier.ts +1 -1
- package/front_end/ui/legacy/legacy.ts +2 -0
- package/front_end/ui/visual_logging/KnownContextValues.ts +21 -0
- package/mcp/mcp.ts +1 -1
- package/package.json +1 -10
|
@@ -746,6 +746,7 @@ export enum KeyboardShortcutAction {
|
|
|
746
746
|
MAX_VALUE = 120,
|
|
747
747
|
}
|
|
748
748
|
|
|
749
|
+
/** Update DevToolsIssuesPanelOpenedFrom in tools/metrics/histograms/metadata/dev/enums.xml if new enum is added. **/
|
|
749
750
|
export const enum IssueOpener {
|
|
750
751
|
CONSOLE_INFO_BAR = 0,
|
|
751
752
|
LEARN_MORE_LINK_COEP = 1,
|
|
@@ -753,7 +754,8 @@ export const enum IssueOpener {
|
|
|
753
754
|
HAMBURGER_MENU = 3,
|
|
754
755
|
ADORNER = 4,
|
|
755
756
|
COMMAND_MENU = 5,
|
|
756
|
-
|
|
757
|
+
MORE_TOOLS_MENU = 6,
|
|
758
|
+
MAX_VALUE = 7,
|
|
757
759
|
}
|
|
758
760
|
|
|
759
761
|
/**
|
|
@@ -767,10 +769,11 @@ export enum DevtoolsExperiments {
|
|
|
767
769
|
'use-source-map-scopes' = 76,
|
|
768
770
|
'durable-messages' = 110,
|
|
769
771
|
'jpeg-xl' = 111,
|
|
772
|
+
'plus-button' = 112,
|
|
770
773
|
/* eslint-enable @typescript-eslint/naming-convention */
|
|
771
774
|
|
|
772
775
|
// Increment this when new experiments are added.
|
|
773
|
-
MAX_VALUE =
|
|
776
|
+
MAX_VALUE = 113,
|
|
774
777
|
}
|
|
775
778
|
|
|
776
779
|
/** Update DevToolsIssuesPanelIssueExpanded from tools/metrics/histograms/enums.xml if new enum is added. **/
|
|
@@ -9,6 +9,7 @@ export enum ExperimentName {
|
|
|
9
9
|
USE_SOURCE_MAP_SCOPES = 'use-source-map-scopes',
|
|
10
10
|
DURABLE_MESSAGES = 'durable-messages',
|
|
11
11
|
JPEG_XL = 'jpeg-xl',
|
|
12
|
+
PLUS_BUTTON = 'plus-button',
|
|
12
13
|
// Adding or removing an entry from this enum?
|
|
13
14
|
// You will need to update:
|
|
14
15
|
// 1. DevToolsExperiments enum in host/UserMetrics.ts
|
|
@@ -633,6 +633,10 @@ interface DevToolsWebMCPSupport {
|
|
|
633
633
|
enabled: boolean;
|
|
634
634
|
}
|
|
635
635
|
|
|
636
|
+
interface DevToolsPlusButton {
|
|
637
|
+
enabled: boolean;
|
|
638
|
+
}
|
|
639
|
+
|
|
636
640
|
/**
|
|
637
641
|
* The host configuration that we expect from the DevTools back-end.
|
|
638
642
|
*
|
|
@@ -687,6 +691,7 @@ export type HostConfig = Platform.TypeScriptUtilities.RecursivePartial<{
|
|
|
687
691
|
devToolsProtocolMonitor: DevToolsProtocolMonitor,
|
|
688
692
|
devToolsWebMCPSupport: DevToolsWebMCPSupport,
|
|
689
693
|
devToolsUseGcaApi: UseGcaApi,
|
|
694
|
+
devToolsPlusButton: DevToolsPlusButton,
|
|
690
695
|
}>;
|
|
691
696
|
|
|
692
697
|
/**
|
|
@@ -2,6 +2,8 @@
|
|
|
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 type * as Platform from '../platform/platform.js';
|
|
6
|
+
|
|
5
7
|
import type {DebugId, SourceMapV3} from './SourceMap.js';
|
|
6
8
|
|
|
7
9
|
/** A thin wrapper around the Cache API to store source map JSONs keyed on Debug IDs */
|
|
@@ -28,14 +30,14 @@ export class SourceMapCache {
|
|
|
28
30
|
this.#name = name;
|
|
29
31
|
}
|
|
30
32
|
|
|
31
|
-
async set(debugId: DebugId, sourceMap: SourceMapV3): Promise<void> {
|
|
33
|
+
async set(debugId: DebugId, securityOrigin: Platform.DevToolsPath.UrlString, sourceMap: SourceMapV3): Promise<void> {
|
|
32
34
|
const cache = await this.#cache();
|
|
33
|
-
await cache.put(SourceMapCache.#urlForDebugId(debugId), new Response(JSON.stringify(sourceMap)));
|
|
35
|
+
await cache.put(SourceMapCache.#urlForDebugId(debugId, securityOrigin), new Response(JSON.stringify(sourceMap)));
|
|
34
36
|
}
|
|
35
37
|
|
|
36
|
-
async get(debugId: DebugId): Promise<SourceMapV3|null> {
|
|
38
|
+
async get(debugId: DebugId, securityOrigin: Platform.DevToolsPath.UrlString): Promise<SourceMapV3|null> {
|
|
37
39
|
const cache = await this.#cache();
|
|
38
|
-
const response = await cache.match(SourceMapCache.#urlForDebugId(debugId));
|
|
40
|
+
const response = await cache.match(SourceMapCache.#urlForDebugId(debugId, securityOrigin));
|
|
39
41
|
return await response?.json() ?? null;
|
|
40
42
|
}
|
|
41
43
|
|
|
@@ -49,8 +51,8 @@ export class SourceMapCache {
|
|
|
49
51
|
}
|
|
50
52
|
|
|
51
53
|
/** The Cache API only allows URL as keys, so we construct a simple one. Given that we have our own cache, we have no risk of conflicting URLs */
|
|
52
|
-
static #urlForDebugId(debugId: DebugId): string {
|
|
53
|
-
return
|
|
54
|
+
static #urlForDebugId(debugId: DebugId, securityOrigin: Platform.DevToolsPath.UrlString): string {
|
|
55
|
+
return `http://debug.id/${encodeURIComponent(debugId)}?origin=${encodeURIComponent(securityOrigin)}`;
|
|
54
56
|
}
|
|
55
57
|
|
|
56
58
|
async disposeForTest(): Promise<void> {
|
|
@@ -59,14 +61,14 @@ export class SourceMapCache {
|
|
|
59
61
|
}
|
|
60
62
|
|
|
61
63
|
const IN_MEMORY_INSTANCE = new (class implements Pick<SourceMapCache, 'get'|'set'|'disposeForTest'> {
|
|
62
|
-
readonly #cache = new Map<
|
|
64
|
+
readonly #cache = new Map<string, SourceMapV3>();
|
|
63
65
|
|
|
64
|
-
async set(debugId: DebugId, sourceMap: SourceMapV3): Promise<void> {
|
|
65
|
-
this.#cache.set(debugId
|
|
66
|
+
async set(debugId: DebugId, securityOrigin: Platform.DevToolsPath.UrlString, sourceMap: SourceMapV3): Promise<void> {
|
|
67
|
+
this.#cache.set(`${debugId}|${securityOrigin}`, sourceMap);
|
|
66
68
|
}
|
|
67
69
|
|
|
68
|
-
async get(debugId: DebugId): Promise<SourceMapV3|null> {
|
|
69
|
-
return this.#cache.get(debugId) ?? null;
|
|
70
|
+
async get(debugId: DebugId, securityOrigin: Platform.DevToolsPath.UrlString): Promise<SourceMapV3|null> {
|
|
71
|
+
return this.#cache.get(`${debugId}|${securityOrigin}`) ?? null;
|
|
70
72
|
}
|
|
71
73
|
|
|
72
74
|
async disposeForTest(): Promise<void> {
|
|
@@ -190,7 +190,9 @@ async function loadSourceMap(
|
|
|
190
190
|
initiator: PageResourceLoadInitiator): Promise<SourceMapV3> {
|
|
191
191
|
try {
|
|
192
192
|
if (debugId) {
|
|
193
|
-
const
|
|
193
|
+
const securityOrigin = initiator.initiatorUrl ? Common.ParsedURL.ParsedURL.extractOrigin(initiator.initiatorUrl) :
|
|
194
|
+
Platform.DevToolsPath.EmptyUrlString;
|
|
195
|
+
const cachedSourceMap = await SourceMapCache.instance().get(debugId, securityOrigin);
|
|
194
196
|
if (cachedSourceMap) {
|
|
195
197
|
return cachedSourceMap;
|
|
196
198
|
}
|
|
@@ -198,9 +200,11 @@ async function loadSourceMap(
|
|
|
198
200
|
|
|
199
201
|
const {content} = await resourceLoader.loadResource(url, initiator);
|
|
200
202
|
const sourceMap = parseSourceMap(content);
|
|
201
|
-
if ('debugId' in sourceMap && sourceMap.debugId) {
|
|
203
|
+
if (debugId && 'debugId' in sourceMap && sourceMap.debugId === debugId) {
|
|
202
204
|
// In case something goes wrong with updating the cache, we still want to use the source map.
|
|
203
|
-
|
|
205
|
+
const securityOrigin = initiator.initiatorUrl ? Common.ParsedURL.ParsedURL.extractOrigin(initiator.initiatorUrl) :
|
|
206
|
+
Platform.DevToolsPath.EmptyUrlString;
|
|
207
|
+
await SourceMapCache.instance().set(sourceMap.debugId as DebugId, securityOrigin, sourceMap).catch();
|
|
204
208
|
}
|
|
205
209
|
return sourceMap;
|
|
206
210
|
} catch (cause) {
|
|
@@ -45,6 +45,9 @@ class GreenDevFloaty {
|
|
|
45
45
|
#backendNodeId?: Protocol.DOM.BackendNodeId;
|
|
46
46
|
#syncChannel: BroadcastChannel;
|
|
47
47
|
#isFloatyWindow: boolean;
|
|
48
|
+
#socketClient:
|
|
49
|
+
AiAssistance.GreenDevAgentAntigravityCliSocketClient.GreenDevAgentAntigravityCliSocketClient|
|
|
50
|
+
AiAssistance.GreenDevAgentGeminiCliSocketClient.GreenDevAgentGeminiCliSocketClient;
|
|
48
51
|
|
|
49
52
|
constructor(document: Document) {
|
|
50
53
|
const params = new URLSearchParams(window.location.hash.substring(1));
|
|
@@ -57,6 +60,12 @@ class GreenDevFloaty {
|
|
|
57
60
|
};
|
|
58
61
|
|
|
59
62
|
this.#initFloatyMode(document);
|
|
63
|
+
if (Greendev.Prototypes.instance().isEnabled('beyondStylingAntigravity')) {
|
|
64
|
+
this.#socketClient =
|
|
65
|
+
new AiAssistance.GreenDevAgentAntigravityCliSocketClient.GreenDevAgentAntigravityCliSocketClient();
|
|
66
|
+
} else {
|
|
67
|
+
this.#socketClient = new AiAssistance.GreenDevAgentGeminiCliSocketClient.GreenDevAgentGeminiCliSocketClient();
|
|
68
|
+
}
|
|
60
69
|
}
|
|
61
70
|
|
|
62
71
|
#initFloatyMode(doc: Document): void {
|
|
@@ -269,12 +278,67 @@ class GreenDevFloaty {
|
|
|
269
278
|
const query = this.#textField.value || this.#textField.placeholder;
|
|
270
279
|
this.#textField.value = '';
|
|
271
280
|
|
|
272
|
-
const
|
|
281
|
+
const useAntigravity = Greendev.Prototypes.instance().isEnabled('beyondStylingAntigravity');
|
|
282
|
+
const useGemini = Greendev.Prototypes.instance().isEnabled('beyondStylingGemini');
|
|
283
|
+
const useGreenDevAgent = useAntigravity || useGemini;
|
|
284
|
+
const isAntigravity = useAntigravity;
|
|
273
285
|
|
|
274
286
|
if (!this.#agent) {
|
|
275
287
|
const aidaClient = new AidaClient();
|
|
276
288
|
if (useGreenDevAgent) {
|
|
289
|
+
if (isAntigravity) {
|
|
290
|
+
this.#socketClient =
|
|
291
|
+
new AiAssistance.GreenDevAgentAntigravityCliSocketClient.GreenDevAgentAntigravityCliSocketClient();
|
|
292
|
+
} else {
|
|
293
|
+
this.#socketClient = new AiAssistance.GreenDevAgentGeminiCliSocketClient.GreenDevAgentGeminiCliSocketClient();
|
|
294
|
+
}
|
|
295
|
+
|
|
277
296
|
this.#agent = new AiAssistance.GreenDevAgent.GreenDevAgent({aidaClient});
|
|
297
|
+
this.#agent.addEventListener(
|
|
298
|
+
AiAssistance.GreenDevAgent.Events.CLI_PROMPT_REQUESTED,
|
|
299
|
+
async (
|
|
300
|
+
event: Common.EventTarget.EventTargetEvent<
|
|
301
|
+
AiAssistance.GreenDevAgent.EventTypes[AiAssistance.GreenDevAgent.Events.CLI_PROMPT_REQUESTED]>) => {
|
|
302
|
+
const {prompt} = event.data;
|
|
303
|
+
const remoteName = isAntigravity ? 'Antigravity' : 'Gemini';
|
|
304
|
+
const aiContent =
|
|
305
|
+
this.#addMessageInternal(`Fix has been submitted to ${remoteName} CLI, please wait...`, false);
|
|
306
|
+
|
|
307
|
+
if (isAntigravity) {
|
|
308
|
+
let fullResponse = '';
|
|
309
|
+
void (
|
|
310
|
+
this.#socketClient as
|
|
311
|
+
AiAssistance.GreenDevAgentAntigravityCliSocketClient.GreenDevAgentAntigravityCliSocketClient)
|
|
312
|
+
.sendPrompt(prompt, (chunk: string) => {
|
|
313
|
+
fullResponse += chunk;
|
|
314
|
+
const responseText = `Antigravity CLI responds: ${fullResponse}`;
|
|
315
|
+
const markdown = new MarkdownView.MarkdownView.MarkdownView();
|
|
316
|
+
markdown.data = {
|
|
317
|
+
tokens: Marked.Marked.lexer(responseText),
|
|
318
|
+
};
|
|
319
|
+
|
|
320
|
+
const style = document.createElement('style');
|
|
321
|
+
style.textContent =
|
|
322
|
+
'.message { font-size: 1.0rem; } .message code { font-size: 1.0rem; font-family: \'Roboto Mono\', ' +
|
|
323
|
+
'monospace; color: green; } .message ul { margin-left: 20px; }';
|
|
324
|
+
markdown.shadowRoot?.appendChild(style);
|
|
325
|
+
|
|
326
|
+
this.#updateAiMessage(aiContent, markdown, responseText);
|
|
327
|
+
});
|
|
328
|
+
} else {
|
|
329
|
+
const response =
|
|
330
|
+
await (this.#socketClient as
|
|
331
|
+
AiAssistance.GreenDevAgentGeminiCliSocketClient.GreenDevAgentGeminiCliSocketClient)
|
|
332
|
+
.sendPrompt(prompt);
|
|
333
|
+
|
|
334
|
+
const responseText = `Gemini CLI responds: ${response}`;
|
|
335
|
+
const markdown = new MarkdownView.MarkdownView.MarkdownView();
|
|
336
|
+
markdown.data = {
|
|
337
|
+
tokens: Marked.Marked.lexer(responseText),
|
|
338
|
+
};
|
|
339
|
+
this.#updateAiMessage(aiContent, markdown, responseText);
|
|
340
|
+
}
|
|
341
|
+
});
|
|
278
342
|
} else {
|
|
279
343
|
this.#agent = new AiAssistance.StylingAgent.StylingAgent({aidaClient});
|
|
280
344
|
this.#nodeContext = new AiAssistance.StylingAgent.NodeContext(this.#node);
|
|
@@ -282,22 +346,7 @@ class GreenDevFloaty {
|
|
|
282
346
|
}
|
|
283
347
|
|
|
284
348
|
this.#addMessageInternal(query, true);
|
|
285
|
-
this.#syncChannel.postMessage({
|
|
286
|
-
type: 'new-message',
|
|
287
|
-
text: query,
|
|
288
|
-
isUser: true,
|
|
289
|
-
sessionId: this.#backendNodeId,
|
|
290
|
-
nodeDescription: document.querySelector('.green-dev-floaty-dialog-node-description')?.textContent,
|
|
291
|
-
});
|
|
292
|
-
|
|
293
349
|
const aiContent = this.#addMessageInternal('Thinking...', false);
|
|
294
|
-
this.#syncChannel.postMessage({
|
|
295
|
-
type: 'new-message',
|
|
296
|
-
text: 'Thinking...',
|
|
297
|
-
isUser: false,
|
|
298
|
-
sessionId: this.#backendNodeId,
|
|
299
|
-
nodeDescription: document.querySelector('.green-dev-floaty-dialog-node-description')?.textContent,
|
|
300
|
-
});
|
|
301
350
|
|
|
302
351
|
let agentFinished = false;
|
|
303
352
|
let steps = 0;
|
|
@@ -433,7 +482,8 @@ ${axTree}`;
|
|
|
433
482
|
markdown.data = {
|
|
434
483
|
tokens: Marked.Marked.lexer(sanitizedText),
|
|
435
484
|
};
|
|
436
|
-
aiContent.
|
|
485
|
+
this.#updateAiMessage(aiContent, markdown, result.text);
|
|
486
|
+
|
|
437
487
|
void new Promise(resolve => setTimeout(resolve, 0)).then(() => {
|
|
438
488
|
const style = document.createElement('style');
|
|
439
489
|
style.textContent =
|
|
@@ -456,15 +506,12 @@ ${axTree}`;
|
|
|
456
506
|
}
|
|
457
507
|
}
|
|
458
508
|
});
|
|
459
|
-
this.#syncChannel.postMessage(
|
|
460
|
-
{type: 'update-last-message', text: result.text, sessionId: this.#backendNodeId});
|
|
461
509
|
agentFinished = true;
|
|
462
510
|
break;
|
|
463
511
|
}
|
|
464
512
|
case ResponseType.ERROR:
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
{type: 'update-last-message', text: this.#formatError(result.error), sessionId: this.#backendNodeId});
|
|
513
|
+
this.#updateAiMessage(
|
|
514
|
+
aiContent, document.createTextNode(this.#formatError(result.error)), this.#formatError(result.error));
|
|
468
515
|
agentFinished = true;
|
|
469
516
|
break;
|
|
470
517
|
case ResponseType.SIDE_EFFECT:
|
|
@@ -503,8 +550,23 @@ ${axTree}`;
|
|
|
503
550
|
this.#chatContainer.appendChild(messageElement);
|
|
504
551
|
this.#chatContainer.scrollTop = this.#chatContainer.scrollHeight;
|
|
505
552
|
}
|
|
553
|
+
|
|
554
|
+
this.#syncChannel.postMessage({
|
|
555
|
+
type: 'new-message',
|
|
556
|
+
text,
|
|
557
|
+
isUser,
|
|
558
|
+
sessionId: this.#backendNodeId,
|
|
559
|
+
nodeDescription: document.querySelector('.green-dev-floaty-dialog-node-description')?.textContent,
|
|
560
|
+
});
|
|
561
|
+
|
|
506
562
|
return content;
|
|
507
563
|
}
|
|
564
|
+
|
|
565
|
+
#updateAiMessage(aiContentElement: HTMLDivElement, newContent: Node, newText: string): void {
|
|
566
|
+
aiContentElement.textContent = '';
|
|
567
|
+
aiContentElement.append(newContent);
|
|
568
|
+
this.#syncChannel.postMessage({type: 'update-last-message', text: newText, sessionId: this.#backendNodeId});
|
|
569
|
+
}
|
|
508
570
|
}
|
|
509
571
|
|
|
510
572
|
let greenDevFloatyInstance: GreenDevFloaty;
|
|
@@ -384,6 +384,14 @@ export class MainImpl {
|
|
|
384
384
|
requiresChromeRestart: true,
|
|
385
385
|
});
|
|
386
386
|
|
|
387
|
+
Root.Runtime.experiments.registerHostExperiment({
|
|
388
|
+
name: Root.ExperimentNames.ExperimentName.PLUS_BUTTON,
|
|
389
|
+
title: 'Show "+" button on the tab strip for adding tools',
|
|
390
|
+
aboutFlag: 'devtools-plus-button',
|
|
391
|
+
isEnabled: Root.Runtime.hostConfig.devToolsPlusButton?.enabled ?? false,
|
|
392
|
+
requiresChromeRestart: false,
|
|
393
|
+
});
|
|
394
|
+
|
|
387
395
|
Root.Runtime.experiments.enableExperimentsByDefault([
|
|
388
396
|
Root.ExperimentNames.ExperimentName.USE_SOURCE_MAP_SCOPES,
|
|
389
397
|
]);
|
|
@@ -540,8 +540,7 @@ inspectorBackend.registerCommand("Emulation.getOverriddenSensorInformation", [{"
|
|
|
540
540
|
inspectorBackend.registerCommand("Emulation.setSensorOverrideEnabled", [{"name": "enabled", "type": "boolean", "optional": false, "description": "", "typeRef": null}, {"name": "type", "type": "string", "optional": false, "description": "", "typeRef": "Emulation.SensorType"}, {"name": "metadata", "type": "object", "optional": true, "description": "", "typeRef": "Emulation.SensorMetadata"}], [], "Overrides a platform sensor of a given type. If |enabled| is true, calls to Sensor.start() will use a virtual sensor as backend rather than fetching data from a real hardware sensor. Otherwise, existing virtual sensor-backend Sensor objects will fire an error event and new calls to Sensor.start() will attempt to use a real sensor instead.");
|
|
541
541
|
inspectorBackend.registerCommand("Emulation.setSensorOverrideReadings", [{"name": "type", "type": "string", "optional": false, "description": "", "typeRef": "Emulation.SensorType"}, {"name": "reading", "type": "object", "optional": false, "description": "", "typeRef": "Emulation.SensorReading"}], [], "Updates the sensor readings reported by a sensor type previously overridden by setSensorOverrideEnabled.");
|
|
542
542
|
inspectorBackend.registerCommand("Emulation.setPressureSourceOverrideEnabled", [{"name": "enabled", "type": "boolean", "optional": false, "description": "", "typeRef": null}, {"name": "source", "type": "string", "optional": false, "description": "", "typeRef": "Emulation.PressureSource"}, {"name": "metadata", "type": "object", "optional": true, "description": "", "typeRef": "Emulation.PressureMetadata"}], [], "Overrides a pressure source of a given type, as used by the Compute Pressure API, so that updates to PressureObserver.observe() are provided via setPressureStateOverride instead of being retrieved from platform-provided telemetry data.");
|
|
543
|
-
inspectorBackend.registerCommand("Emulation.setPressureStateOverride", [{"name": "source", "type": "string", "optional": false, "description": "", "typeRef": "Emulation.PressureSource"}, {"name": "state", "type": "string", "optional": false, "description": "", "typeRef": "Emulation.PressureState"}], [], "
|
|
544
|
-
inspectorBackend.registerCommand("Emulation.setPressureDataOverride", [{"name": "source", "type": "string", "optional": false, "description": "", "typeRef": "Emulation.PressureSource"}, {"name": "state", "type": "string", "optional": false, "description": "", "typeRef": "Emulation.PressureState"}, {"name": "ownContributionEstimate", "type": "number", "optional": true, "description": "", "typeRef": null}], [], "Provides a given pressure data set that will be processed and eventually be delivered to PressureObserver users. |source| must have been previously overridden by setPressureSourceOverrideEnabled.");
|
|
543
|
+
inspectorBackend.registerCommand("Emulation.setPressureStateOverride", [{"name": "source", "type": "string", "optional": false, "description": "", "typeRef": "Emulation.PressureSource"}, {"name": "state", "type": "string", "optional": false, "description": "", "typeRef": "Emulation.PressureState"}], [], "Provides a given pressure state that will be processed and eventually be delivered to PressureObserver users. |source| must have been previously overridden by setPressureSourceOverrideEnabled.");
|
|
545
544
|
inspectorBackend.registerCommand("Emulation.setIdleOverride", [{"name": "isUserActive", "type": "boolean", "optional": false, "description": "Mock isUserActive", "typeRef": null}, {"name": "isScreenUnlocked", "type": "boolean", "optional": false, "description": "Mock isScreenUnlocked", "typeRef": null}], [], "Overrides the Idle state.");
|
|
546
545
|
inspectorBackend.registerCommand("Emulation.clearIdleOverride", [], [], "Clears Idle state overrides.");
|
|
547
546
|
inspectorBackend.registerCommand("Emulation.setNavigatorOverrides", [{"name": "platform", "type": "string", "optional": false, "description": "The platform navigator.platform should return.", "typeRef": null}], [], "Overrides value returned by the javascript navigator object.");
|
|
@@ -1212,7 +1211,7 @@ inspectorBackend.registerEnum("Preload.SpeculationAction", {Prefetch: "Prefetch"
|
|
|
1212
1211
|
inspectorBackend.registerEnum("Preload.SpeculationTargetHint", {Blank: "Blank", Self: "Self"});
|
|
1213
1212
|
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", FormSubmitWhenPrerendering: "FormSubmitWhenPrerendering", CrossDocumentRestart: "CrossDocumentRestart"});
|
|
1214
1213
|
inspectorBackend.registerEnum("Preload.PreloadingStatus", {Pending: "Pending", Running: "Running", Ready: "Ready", Success: "Success", Failure: "Failure", NotSupported: "NotSupported"});
|
|
1215
|
-
inspectorBackend.registerEnum("Preload.PrefetchStatus", {PrefetchAllowed: "PrefetchAllowed", PrefetchFailedIneligibleRedirect: "PrefetchFailedIneligibleRedirect", PrefetchFailedInvalidRedirect: "PrefetchFailedInvalidRedirect", PrefetchFailedMIMENotSupported: "PrefetchFailedMIMENotSupported", PrefetchFailedNetError: "PrefetchFailedNetError", PrefetchFailedNon2XX: "PrefetchFailedNon2XX", PrefetchEvictedAfterBrowsingDataRemoved: "PrefetchEvictedAfterBrowsingDataRemoved", PrefetchEvictedAfterCandidateRemoved: "PrefetchEvictedAfterCandidateRemoved", PrefetchEvictedForNewerPrefetch: "PrefetchEvictedForNewerPrefetch", PrefetchHeldback: "PrefetchHeldback", PrefetchIneligibleRetryAfter: "PrefetchIneligibleRetryAfter", PrefetchIsPrivacyDecoy: "PrefetchIsPrivacyDecoy", PrefetchIsStale: "PrefetchIsStale", PrefetchNotEligibleBrowserContextOffTheRecord: "PrefetchNotEligibleBrowserContextOffTheRecord", PrefetchNotEligibleDataSaverEnabled: "PrefetchNotEligibleDataSaverEnabled", PrefetchNotEligibleExistingProxy: "PrefetchNotEligibleExistingProxy", PrefetchNotEligibleHostIsNonUnique: "PrefetchNotEligibleHostIsNonUnique", PrefetchNotEligibleNonDefaultStoragePartition: "PrefetchNotEligibleNonDefaultStoragePartition", PrefetchNotEligibleSameSiteCrossOriginPrefetchRequiredProxy: "PrefetchNotEligibleSameSiteCrossOriginPrefetchRequiredProxy", PrefetchNotEligibleSchemeIsNotHttps: "PrefetchNotEligibleSchemeIsNotHttps", PrefetchNotEligibleUserHasCookies: "PrefetchNotEligibleUserHasCookies", PrefetchNotEligibleUserHasServiceWorker: "PrefetchNotEligibleUserHasServiceWorker", PrefetchNotEligibleUserHasServiceWorkerNoFetchHandler: "PrefetchNotEligibleUserHasServiceWorkerNoFetchHandler", PrefetchNotEligibleRedirectFromServiceWorker: "PrefetchNotEligibleRedirectFromServiceWorker", PrefetchNotEligibleRedirectToServiceWorker: "PrefetchNotEligibleRedirectToServiceWorker", PrefetchNotEligibleBatterySaverEnabled: "PrefetchNotEligibleBatterySaverEnabled", PrefetchNotEligiblePreloadingDisabled: "PrefetchNotEligiblePreloadingDisabled", PrefetchNotFinishedInTime: "PrefetchNotFinishedInTime", PrefetchNotStarted: "PrefetchNotStarted", PrefetchNotUsedCookiesChanged: "PrefetchNotUsedCookiesChanged", PrefetchProxyNotAvailable: "PrefetchProxyNotAvailable", PrefetchResponseUsed: "PrefetchResponseUsed", PrefetchSuccessfulButNotUsed: "PrefetchSuccessfulButNotUsed", PrefetchNotUsedProbeFailed: "PrefetchNotUsedProbeFailed"
|
|
1214
|
+
inspectorBackend.registerEnum("Preload.PrefetchStatus", {PrefetchAllowed: "PrefetchAllowed", PrefetchFailedIneligibleRedirect: "PrefetchFailedIneligibleRedirect", PrefetchFailedInvalidRedirect: "PrefetchFailedInvalidRedirect", PrefetchFailedMIMENotSupported: "PrefetchFailedMIMENotSupported", PrefetchFailedNetError: "PrefetchFailedNetError", PrefetchFailedNon2XX: "PrefetchFailedNon2XX", PrefetchEvictedAfterBrowsingDataRemoved: "PrefetchEvictedAfterBrowsingDataRemoved", PrefetchEvictedAfterCandidateRemoved: "PrefetchEvictedAfterCandidateRemoved", PrefetchEvictedForNewerPrefetch: "PrefetchEvictedForNewerPrefetch", PrefetchHeldback: "PrefetchHeldback", PrefetchIneligibleRetryAfter: "PrefetchIneligibleRetryAfter", PrefetchIsPrivacyDecoy: "PrefetchIsPrivacyDecoy", PrefetchIsStale: "PrefetchIsStale", PrefetchNotEligibleBrowserContextOffTheRecord: "PrefetchNotEligibleBrowserContextOffTheRecord", PrefetchNotEligibleDataSaverEnabled: "PrefetchNotEligibleDataSaverEnabled", PrefetchNotEligibleExistingProxy: "PrefetchNotEligibleExistingProxy", PrefetchNotEligibleHostIsNonUnique: "PrefetchNotEligibleHostIsNonUnique", PrefetchNotEligibleNonDefaultStoragePartition: "PrefetchNotEligibleNonDefaultStoragePartition", PrefetchNotEligibleSameSiteCrossOriginPrefetchRequiredProxy: "PrefetchNotEligibleSameSiteCrossOriginPrefetchRequiredProxy", PrefetchNotEligibleSchemeIsNotHttps: "PrefetchNotEligibleSchemeIsNotHttps", PrefetchNotEligibleUserHasCookies: "PrefetchNotEligibleUserHasCookies", PrefetchNotEligibleUserHasServiceWorker: "PrefetchNotEligibleUserHasServiceWorker", PrefetchNotEligibleUserHasServiceWorkerNoFetchHandler: "PrefetchNotEligibleUserHasServiceWorkerNoFetchHandler", PrefetchNotEligibleRedirectFromServiceWorker: "PrefetchNotEligibleRedirectFromServiceWorker", PrefetchNotEligibleRedirectToServiceWorker: "PrefetchNotEligibleRedirectToServiceWorker", PrefetchNotEligibleBatterySaverEnabled: "PrefetchNotEligibleBatterySaverEnabled", PrefetchNotEligiblePreloadingDisabled: "PrefetchNotEligiblePreloadingDisabled", PrefetchNotFinishedInTime: "PrefetchNotFinishedInTime", PrefetchNotStarted: "PrefetchNotStarted", PrefetchNotUsedCookiesChanged: "PrefetchNotUsedCookiesChanged", PrefetchProxyNotAvailable: "PrefetchProxyNotAvailable", PrefetchResponseUsed: "PrefetchResponseUsed", PrefetchSuccessfulButNotUsed: "PrefetchSuccessfulButNotUsed", PrefetchNotUsedProbeFailed: "PrefetchNotUsedProbeFailed"});
|
|
1216
1215
|
inspectorBackend.registerEvent("Preload.ruleSetUpdated", ["ruleSet"]);
|
|
1217
1216
|
inspectorBackend.registerEvent("Preload.ruleSetRemoved", ["id"]);
|
|
1218
1217
|
inspectorBackend.registerEvent("Preload.preloadEnabledStateUpdated", ["disabledByPreference", "disabledByDataSaver", "disabledByBatterySaver", "disabledByHoldbackPrefetchSpeculationRules", "disabledByHoldbackPrerenderSpeculationRules"]);
|
|
@@ -1410,7 +1409,7 @@ inspectorBackend.registerCommand("Target.setDiscoverTargets", [{"name": "discove
|
|
|
1410
1409
|
inspectorBackend.registerCommand("Target.setRemoteLocations", [{"name": "locations", "type": "array", "optional": false, "description": "List of remote locations.", "typeRef": "Target.RemoteLocation"}], [], "Enables target discovery for the specified locations, when `setDiscoverTargets` was set to `true`.");
|
|
1411
1410
|
inspectorBackend.registerCommand("Target.getDevToolsTarget", [{"name": "targetId", "type": "string", "optional": false, "description": "Page or tab target ID.", "typeRef": "Target.TargetID"}], ["targetId"], "Gets the targetId of the DevTools page target opened for the given target (if any).");
|
|
1412
1411
|
inspectorBackend.registerCommand("Target.openDevTools", [{"name": "targetId", "type": "string", "optional": false, "description": "This can be the page or tab target ID.", "typeRef": "Target.TargetID"}, {"name": "panelId", "type": "string", "optional": true, "description": "The id of the panel we want DevTools to open initially. Currently supported panels are elements, console, network, sources, resources and performance.", "typeRef": null}], ["targetId"], "Opens a DevTools window for the target.");
|
|
1413
|
-
inspectorBackend.registerType("Target.TargetInfo", [{"name": "targetId", "type": "string", "optional": false, "description": "", "typeRef": "Target.TargetID"}, {"name": "type", "type": "string", "optional": false, "description": "List of types: https://source.chromium.org/chromium/chromium/src/+/main:content/browser/devtools/devtools_agent_host_impl.cc?ss=chromium&q=f:devtools%20-f:out%20%22::kTypeTab%5B%5D%22", "typeRef": null}, {"name": "title", "type": "string", "optional": false, "description": "", "typeRef": null}, {"name": "url", "type": "string", "optional": false, "description": "", "typeRef": null}, {"name": "attached", "type": "boolean", "optional": false, "description": "Whether the target has an attached client.", "typeRef": null}, {"name": "parentId", "type": "string", "optional": true, "description": "Id of the parent target, if any. For example, \\\"iframe\\\" target may have a \\\"page\\\" parent.", "typeRef": "Target.TargetID"}, {"name": "openerId", "type": "string", "optional": true, "description": "Opener target Id", "typeRef": "Target.TargetID"}, {"name": "canAccessOpener", "type": "boolean", "optional": false, "description": "Whether the target has access to the originating window.", "typeRef": null}, {"name": "openerFrameId", "type": "string", "optional": true, "description": "Frame id of originating window (is only set if target has an opener).", "typeRef": "Page.FrameId"}, {"name": "parentFrameId", "type": "string", "optional": true, "description": "Id of the parent frame, present for \\\"iframe\\\" and \\\"worker\\\" targets. For nested workers, this is the \\\"ancestor\\\" frame that created the first worker in the nested chain.", "typeRef": "Page.FrameId"}, {"name": "browserContextId", "type": "string", "optional": true, "description": "", "typeRef": "Browser.BrowserContextID"}, {"name": "subtype", "type": "string", "optional": true, "description": "Provides additional details for specific target types. For example, for the type of \\\"page\\\", this may be set to \\\"prerender\\\".", "typeRef": null}]);
|
|
1412
|
+
inspectorBackend.registerType("Target.TargetInfo", [{"name": "targetId", "type": "string", "optional": false, "description": "", "typeRef": "Target.TargetID"}, {"name": "type", "type": "string", "optional": false, "description": "List of types: https://source.chromium.org/chromium/chromium/src/+/main:content/browser/devtools/devtools_agent_host_impl.cc?ss=chromium&q=f:devtools%20-f:out%20%22::kTypeTab%5B%5D%22", "typeRef": null}, {"name": "title", "type": "string", "optional": false, "description": "", "typeRef": null}, {"name": "url", "type": "string", "optional": false, "description": "", "typeRef": null}, {"name": "attached", "type": "boolean", "optional": false, "description": "Whether the target has an attached client.", "typeRef": null}, {"name": "parentId", "type": "string", "optional": true, "description": "Id of the parent target, if any. For example, \\\"iframe\\\" target may have a \\\"page\\\" parent.", "typeRef": "Target.TargetID"}, {"name": "openerId", "type": "string", "optional": true, "description": "Opener target Id", "typeRef": "Target.TargetID"}, {"name": "canAccessOpener", "type": "boolean", "optional": false, "description": "Whether the target has access to the originating window.", "typeRef": null}, {"name": "openerFrameId", "type": "string", "optional": true, "description": "Frame id of originating window (is only set if target has an opener).", "typeRef": "Page.FrameId"}, {"name": "parentFrameId", "type": "string", "optional": true, "description": "Id of the parent frame, present for \\\"iframe\\\" and \\\"worker\\\" targets. For nested workers, this is the \\\"ancestor\\\" frame that created the first worker in the nested chain.", "typeRef": "Page.FrameId"}, {"name": "browserContextId", "type": "string", "optional": true, "description": "", "typeRef": "Browser.BrowserContextID"}, {"name": "subtype", "type": "string", "optional": true, "description": "Provides additional details for specific target types. For example, for the type of \\\"page\\\", this may be set to \\\"prerender\\\".", "typeRef": null}, {"name": "embedderData", "type": "object", "optional": true, "description": "Embedder-specific target metadata. This is only set for targets of type \\\"tab\\\".", "typeRef": null}]);
|
|
1414
1413
|
inspectorBackend.registerType("Target.FilterEntry", [{"name": "exclude", "type": "boolean", "optional": true, "description": "If set, causes exclusion of matching targets from the list.", "typeRef": null}, {"name": "type", "type": "string", "optional": true, "description": "If not present, matches any type.", "typeRef": null}]);
|
|
1415
1414
|
inspectorBackend.registerType("Target.TargetFilter", [{"name": "TargetFilter", "type": "array", "optional": false, "description": "The entries in TargetFilter are matched sequentially against targets and the first entry that matches determines if the target is included or not, depending on the value of `exclude` field in the entry. If filter is not specified, the one assumed is [{type: \\\"browser\\\", exclude: true}, {type: \\\"tab\\\", exclude: true}, {}] (i.e. include everything but `browser` and `tab`).", "typeRef": "Target.FilterEntry"}]);
|
|
1416
1415
|
inspectorBackend.registerType("Target.RemoteLocation", [{"name": "host", "type": "string", "optional": false, "description": "", "typeRef": null}, {"name": "port", "type": "number", "optional": false, "description": "", "typeRef": null}]);
|