chrome-devtools-frontend 1.0.1601661 → 1.0.1602543
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/version-control/SKILL.md +71 -0
- package/AUTHORS +1 -0
- package/front_end/core/common/Settings.ts +1 -871
- package/front_end/core/common/VersionController.ts +880 -0
- package/front_end/core/common/common.ts +2 -0
- package/front_end/core/host/InspectorFrontendHostStub.ts +0 -5
- package/front_end/core/platform/HostRuntime.ts +9 -3
- package/front_end/core/protocol_client/InspectorBackend.ts +8 -0
- package/front_end/core/root/Runtime.ts +5 -8
- package/front_end/core/sdk/DOMModel.ts +5 -4
- package/front_end/core/sdk/Target.ts +5 -0
- package/front_end/core/sdk/WebMCPModel.ts +98 -0
- package/front_end/core/sdk/sdk.ts +2 -0
- package/front_end/entrypoints/heap_snapshot_worker/HeapSnapshot.ts +13 -19
- package/front_end/entrypoints/inspector_main/InspectorMain.ts +1 -1
- package/front_end/entrypoints/main/GlobalAiButton.ts +1 -1
- package/front_end/generated/InspectorBackendCommands.ts +6 -5
- package/front_end/generated/protocol.ts +36 -3
- package/front_end/models/ai_assistance/AiConversation.ts +3 -3
- package/front_end/models/ai_assistance/agents/AccessibilityAgent.ts +217 -9
- package/front_end/models/ai_assistance/agents/AiAgent.ts +14 -1
- package/front_end/models/ai_assistance/agents/ContextSelectionAgent.ts +19 -4
- package/front_end/models/ai_assistance/agents/NetworkAgent.ts +7 -1
- package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +14 -2
- package/front_end/models/ai_assistance/agents/StylingAgent.ts +0 -23
- package/front_end/models/heap_snapshot_model/HeapSnapshotModel.ts +7 -7
- package/front_end/models/javascript_metadata/NativeFunctions.js +4 -0
- package/front_end/models/lighthouse/RunTypes.ts +3 -1
- package/front_end/models/live-metrics/LiveMetrics.ts +51 -31
- package/front_end/panels/accessibility/ARIAAttributesView.ts +2 -2
- package/front_end/panels/ai_assistance/AiAssistancePanel.ts +9 -2
- package/front_end/panels/ai_assistance/components/ChatInput.ts +3 -2
- package/front_end/panels/ai_assistance/components/ChatMessage.ts +84 -27
- package/front_end/panels/ai_assistance/components/chatMessage.css +31 -2
- package/front_end/panels/application/AppManifestView.ts +2 -2
- package/front_end/panels/application/BackgroundServiceView.ts +9 -9
- package/front_end/panels/application/FrameDetailsView.ts +4 -13
- package/front_end/panels/application/IndexedDBViews.ts +1 -1
- package/front_end/panels/application/KeyValueStorageItemsView.ts +4 -4
- package/front_end/panels/application/ServiceWorkerCacheViews.ts +3 -3
- package/front_end/panels/application/components/PermissionsPolicySection.ts +1 -1
- package/front_end/panels/application/components/permissionsPolicySection.css +54 -52
- package/front_end/panels/application/frameDetailsReportView.css +13 -1
- package/front_end/panels/common/AiCodeCompletionSummaryToolbar.ts +2 -1
- package/front_end/panels/console_counters/WarningErrorCounter.ts +7 -14
- package/front_end/panels/elements/CSSValueTraceView.ts +9 -1
- package/front_end/panels/elements/NodeStackTraceWidget.ts +2 -1
- package/front_end/panels/elements/PropertiesWidget.ts +14 -13
- package/front_end/panels/elements/PropertyRenderer.ts +10 -9
- package/front_end/panels/elements/StandaloneStylesContainer.ts +15 -2
- package/front_end/panels/elements/StylePropertyTreeElement.ts +22 -1
- package/front_end/panels/elements/StylesSidebarPane.ts +34 -25
- package/front_end/panels/elements/stylePropertiesTreeOutline.css +5 -0
- package/front_end/panels/issues/AffectedSelectivePermissionsInterventionView.ts +2 -2
- package/front_end/panels/lighthouse/LighthouseController.ts +4 -1
- package/front_end/panels/media/EventDisplayTable.ts +3 -2
- package/front_end/panels/network/EventSourceMessagesView.ts +2 -2
- package/front_end/panels/network/RequestPayloadView.ts +2 -2
- package/front_end/panels/network/ResourceChunkView.ts +1 -1
- package/front_end/panels/profiler/HeapDetachedElementsView.ts +9 -4
- package/front_end/panels/profiler/HeapProfileView.ts +8 -4
- package/front_end/panels/profiler/HeapSnapshotDataGrids.ts +40 -33
- package/front_end/panels/profiler/HeapSnapshotGridNodes.ts +1 -1
- package/front_end/panels/profiler/HeapSnapshotProxy.ts +1 -1
- package/front_end/panels/profiler/HeapSnapshotView.ts +12 -18
- package/front_end/panels/profiler/LiveHeapProfileView.ts +3 -4
- package/front_end/panels/profiler/ProfileHeader.ts +5 -11
- package/front_end/panels/profiler/ProfileView.ts +1 -1
- package/front_end/panels/recorder/RecorderController.ts +4 -3
- package/front_end/panels/recorder/components/CreateRecordingView.ts +2 -1
- package/front_end/panels/recorder/components/RecordingView.ts +2 -2
- package/front_end/panels/recorder/models/RecordingPlayer.ts +3 -0
- package/front_end/panels/security/SecurityPanel.ts +3 -3
- package/front_end/panels/sensors/SensorsView.ts +149 -125
- package/front_end/panels/timeline/EventsTimelineTreeView.ts +2 -2
- package/front_end/panels/timeline/TimelineDetailsView.ts +6 -37
- package/front_end/panels/timeline/TimelineTreeView.ts +19 -17
- package/front_end/panels/timeline/TimelineUIUtils.ts +0 -118
- package/front_end/panels/timeline/components/IgnoreListSetting.ts +1 -1
- package/front_end/panels/timeline/components/SidebarInsightsTab.ts +2 -2
- package/front_end/panels/timeline/components/TimelineRangeSummaryView.ts +162 -9
- package/front_end/panels/timeline/components/timelineRangeSummaryView.css +22 -8
- package/front_end/panels/webauthn/WebauthnPane.ts +52 -0
- package/front_end/panels/whats_new/ReleaseNoteText.ts +10 -10
- package/front_end/panels/whats_new/resources/WNDT.md +6 -6
- 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/cjs/puppeteer/node/ChromeLauncher.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ChromeLauncher.js +4 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ChromeLauncher.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.d.ts +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/version.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/version.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +3 -3
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ChromeLauncher.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ChromeLauncher.js +4 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ChromeLauncher.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.d.ts +2 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/version.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/version.js +1 -1
- package/front_end/third_party/puppeteer/package/package.json +1 -1
- package/front_end/third_party/puppeteer/package/src/node/ChromeLauncher.ts +8 -0
- package/front_end/third_party/puppeteer/package/src/revisions.ts +2 -2
- package/front_end/third_party/puppeteer/package/src/util/version.ts +1 -1
- package/front_end/ui/legacy/Toolbar.ts +25 -3
- package/front_end/ui/legacy/Treeoutline.ts +7 -3
- package/front_end/ui/legacy/UIUtils.ts +13 -11
- package/front_end/ui/legacy/Widget.ts +40 -40
- package/front_end/ui/legacy/components/data_grid/DataGrid.ts +1 -1
- package/front_end/ui/legacy/components/data_grid/SortableDataGrid.ts +2 -2
- package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +39 -23
- package/front_end/ui/legacy/components/perf_ui/GCActionDelegate.ts +20 -4
- package/front_end/ui/legacy/treeoutline.css +4 -0
- package/front_end/ui/visual_logging/KnownContextValues.ts +2 -0
- package/package.json +1 -1
|
@@ -34,6 +34,7 @@ import * as StringOutputStream from './StringOutputStream.js';
|
|
|
34
34
|
import * as TextDictionary from './TextDictionary.js';
|
|
35
35
|
import * as Throttler from './Throttler.js';
|
|
36
36
|
import * as Trie from './Trie.js';
|
|
37
|
+
import * as VersionController from './VersionController.js';
|
|
37
38
|
|
|
38
39
|
/*
|
|
39
40
|
* This is re-exported here because we moved UIString into platform from
|
|
@@ -74,4 +75,5 @@ export {
|
|
|
74
75
|
TextDictionary,
|
|
75
76
|
Throttler,
|
|
76
77
|
Trie,
|
|
78
|
+
VersionController,
|
|
77
79
|
};
|
|
@@ -389,11 +389,6 @@ export class InspectorFrontendHostStub implements InspectorFrontendHostAPI {
|
|
|
389
389
|
devToolsVeLogging: {
|
|
390
390
|
enabled: true,
|
|
391
391
|
},
|
|
392
|
-
thirdPartyCookieControls: {
|
|
393
|
-
thirdPartyCookieMetadataEnabled: true,
|
|
394
|
-
thirdPartyCookieHeuristicsEnabled: true,
|
|
395
|
-
managedBlockThirdPartyCookies: 'Unset',
|
|
396
|
-
},
|
|
397
392
|
devToolsFlexibleLayout: {
|
|
398
393
|
verticalDrawerEnabled: true,
|
|
399
394
|
},
|
|
@@ -14,12 +14,18 @@ export const IS_BROWSER =
|
|
|
14
14
|
typeof window !== 'undefined' || (typeof self !== 'undefined' && typeof self.postMessage === 'function');
|
|
15
15
|
|
|
16
16
|
export const HOST_RUNTIME = await (async(): Promise<Api.HostRuntime.HostRuntime> => {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
// Check IS_BROWSER first: in some embedder environments, both IS_NODE
|
|
18
|
+
// and IS_BROWSER can be true because `process` is available in renderer
|
|
19
|
+
// contexts. The browser runtime is always correct when browser APIs
|
|
20
|
+
// (window/self) are available; the Node.js runtime should only be used in
|
|
21
|
+
// pure Node.js environments where those APIs don't exist.
|
|
20
22
|
if (IS_BROWSER) {
|
|
21
23
|
return (await import('./browser/browser.js')).HostRuntime.HOST_RUNTIME;
|
|
22
24
|
}
|
|
23
25
|
|
|
26
|
+
if (IS_NODE) {
|
|
27
|
+
return (await import('./node/node.js')).HostRuntime.HOST_RUNTIME;
|
|
28
|
+
}
|
|
29
|
+
|
|
24
30
|
throw new Error('Unknown runtime!');
|
|
25
31
|
})();
|
|
@@ -491,6 +491,10 @@ export class TargetBase {
|
|
|
491
491
|
return this.getAgent('WebAuthn');
|
|
492
492
|
}
|
|
493
493
|
|
|
494
|
+
webMCPAgent(): ProtocolProxyApi.WebMCPApi {
|
|
495
|
+
return this.getAgent('WebMCP');
|
|
496
|
+
}
|
|
497
|
+
|
|
494
498
|
// Dispatcher registration and de-registration, keep alphabetically sorted.
|
|
495
499
|
|
|
496
500
|
/**
|
|
@@ -638,6 +642,10 @@ export class TargetBase {
|
|
|
638
642
|
registerWebAuthnDispatcher(dispatcher: ProtocolProxyApi.WebAuthnDispatcher): void {
|
|
639
643
|
this.registerDispatcher('WebAuthn', dispatcher);
|
|
640
644
|
}
|
|
645
|
+
|
|
646
|
+
registerWebMCPDispatcher(dispatcher: ProtocolProxyApi.WebMCPDispatcher): void {
|
|
647
|
+
this.registerDispatcher('WebMCP', dispatcher);
|
|
648
|
+
}
|
|
641
649
|
}
|
|
642
650
|
|
|
643
651
|
/** These are not logged as console.error */
|
|
@@ -542,13 +542,6 @@ export interface HostConfigJpegXlImageFormat {
|
|
|
542
542
|
enabled: boolean;
|
|
543
543
|
}
|
|
544
544
|
|
|
545
|
-
export interface HostConfigThirdPartyCookieControls {
|
|
546
|
-
thirdPartyCookieRestrictionEnabled: boolean;
|
|
547
|
-
thirdPartyCookieMetadataEnabled: boolean;
|
|
548
|
-
thirdPartyCookieHeuristicsEnabled: boolean;
|
|
549
|
-
managedBlockThirdPartyCookies: string|boolean;
|
|
550
|
-
}
|
|
551
|
-
|
|
552
545
|
export interface HostConfigAiAssistanceV2 {
|
|
553
546
|
enabled: boolean;
|
|
554
547
|
}
|
|
@@ -613,6 +606,10 @@ interface DevToolsProtocolMonitor {
|
|
|
613
606
|
enabled: boolean;
|
|
614
607
|
}
|
|
615
608
|
|
|
609
|
+
interface DevToolsWebMCPSupport {
|
|
610
|
+
enabled: boolean;
|
|
611
|
+
}
|
|
612
|
+
|
|
616
613
|
/**
|
|
617
614
|
* The host configuration that we expect from the DevTools back-end.
|
|
618
615
|
*
|
|
@@ -651,7 +648,6 @@ export type HostConfig = Platform.TypeScriptUtilities.RecursivePartial<{
|
|
|
651
648
|
devToolsEnableOriginBoundCookies: HostConfigEnableOriginBoundCookies,
|
|
652
649
|
devToolsAnimationStylesInStylesTab: HostConfigAnimationStylesInStylesTab,
|
|
653
650
|
devToolsJpegXlImageFormat: HostConfigJpegXlImageFormat,
|
|
654
|
-
thirdPartyCookieControls: HostConfigThirdPartyCookieControls,
|
|
655
651
|
devToolsAiGeneratedTimelineLabels: AiGeneratedTimelineLabels,
|
|
656
652
|
devToolsAllowPopoverForcing: AllowPopoverForcing,
|
|
657
653
|
devToolsGlobalAiButton: GlobalAiButton,
|
|
@@ -665,6 +661,7 @@ export type HostConfig = Platform.TypeScriptUtilities.RecursivePartial<{
|
|
|
665
661
|
devToolsConsoleInsightsTeasers: ConsoleInsightsTeasers,
|
|
666
662
|
devToolsGeminiRebranding: HostConfigGeminiRebranding,
|
|
667
663
|
devToolsProtocolMonitor: DevToolsProtocolMonitor,
|
|
664
|
+
devToolsWebMCPSupport: DevToolsWebMCPSupport,
|
|
668
665
|
}>;
|
|
669
666
|
|
|
670
667
|
/**
|
|
@@ -291,7 +291,7 @@ export class DOMNode extends Common.ObjectWrapper.ObjectWrapper<DOMNodeEventType
|
|
|
291
291
|
|
|
292
292
|
this.setPseudoElements(payload.pseudoElements);
|
|
293
293
|
|
|
294
|
-
if (payload.
|
|
294
|
+
if (payload.adProvenance) {
|
|
295
295
|
this.#isAdRelatedInternal = true;
|
|
296
296
|
}
|
|
297
297
|
|
|
@@ -1831,7 +1831,8 @@ export class DOMModel extends SDKModel<EventTypes> {
|
|
|
1831
1831
|
node.setIsScrollable(isScrollable);
|
|
1832
1832
|
}
|
|
1833
1833
|
|
|
1834
|
-
adRelatedStateUpdated(nodeId: Protocol.DOM.NodeId,
|
|
1834
|
+
adRelatedStateUpdated(nodeId: Protocol.DOM.NodeId, adProvenance?: Protocol.Network.AdProvenance): void {
|
|
1835
|
+
const isAdRelated = adProvenance !== undefined;
|
|
1835
1836
|
const node = this.nodeForId(nodeId);
|
|
1836
1837
|
if (!node || node.isAdRelatedNode() === isAdRelated) {
|
|
1837
1838
|
return;
|
|
@@ -2203,8 +2204,8 @@ class DOMDispatcher implements ProtocolProxyApi.DOMDispatcher {
|
|
|
2203
2204
|
this.#domModel.affectedByStartingStylesFlagUpdated(nodeId, affectedByStartingStyles);
|
|
2204
2205
|
}
|
|
2205
2206
|
|
|
2206
|
-
adRelatedStateUpdated({nodeId,
|
|
2207
|
-
this.#domModel.adRelatedStateUpdated(nodeId,
|
|
2207
|
+
adRelatedStateUpdated({nodeId, adProvenance}: Protocol.DOM.AdRelatedStateUpdatedEvent): void {
|
|
2208
|
+
this.#domModel.adRelatedStateUpdated(nodeId, adProvenance);
|
|
2208
2209
|
}
|
|
2209
2210
|
}
|
|
2210
2211
|
|
|
@@ -6,6 +6,7 @@ import type * as Protocol from '../../generated/protocol.js';
|
|
|
6
6
|
import * as Common from '../common/common.js';
|
|
7
7
|
import * as Platform from '../platform/platform.js';
|
|
8
8
|
import * as ProtocolClient from '../protocol_client/protocol_client.js';
|
|
9
|
+
import * as Root from '../root/root.js';
|
|
9
10
|
|
|
10
11
|
import {SDKModel, type SDKModelConstructor} from './SDKModel.js';
|
|
11
12
|
import type {TargetManager} from './TargetManager.js';
|
|
@@ -50,6 +51,9 @@ export class Target extends ProtocolClient.InspectorBackend.TargetBase {
|
|
|
50
51
|
Capability.LOG | Capability.NETWORK | Capability.TARGET | Capability.TRACING | Capability.EMULATION |
|
|
51
52
|
Capability.INPUT | Capability.INSPECTOR | Capability.AUDITS | Capability.WEB_AUTHN | Capability.IO |
|
|
52
53
|
Capability.MEDIA | Capability.EVENT_BREAKPOINTS | Capability.DOM_STORAGE;
|
|
54
|
+
if (Root.Runtime.hostConfig.devToolsWebMCPSupport?.enabled) {
|
|
55
|
+
this.#capabilitiesMask |= Capability.WEB_MCP;
|
|
56
|
+
}
|
|
53
57
|
if (parentTarget?.type() !== Type.FRAME) {
|
|
54
58
|
// This matches backend exposing certain capabilities only for the main frame.
|
|
55
59
|
this.#capabilitiesMask |=
|
|
@@ -320,5 +324,6 @@ export const enum Capability {
|
|
|
320
324
|
MEDIA = 1 << 18,
|
|
321
325
|
EVENT_BREAKPOINTS = 1 << 19,
|
|
322
326
|
DOM_STORAGE = 1 << 20,
|
|
327
|
+
WEB_MCP = 1 << 21,
|
|
323
328
|
NONE = 0,
|
|
324
329
|
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
// Copyright 2026 The Chromium Authors
|
|
2
|
+
// Use of this source code is governed by a BSD-style license that can be
|
|
3
|
+
// found in the LICENSE file.
|
|
4
|
+
|
|
5
|
+
import type * as ProtocolProxyApi from '../../generated/protocol-proxy-api.js';
|
|
6
|
+
import type * as Protocol from '../../generated/protocol.js';
|
|
7
|
+
import type * as Common from '../common/common.js';
|
|
8
|
+
|
|
9
|
+
import {Events as RuntimeModelEvents, type ExecutionContext, RuntimeModel} from './RuntimeModel.js';
|
|
10
|
+
import {SDKModel} from './SDKModel.js';
|
|
11
|
+
import {Capability, type Target} from './Target.js';
|
|
12
|
+
|
|
13
|
+
export const enum Events {
|
|
14
|
+
TOOLS_ADDED = 'ToolsAdded',
|
|
15
|
+
TOOLS_REMOVED = 'ToolsRemoved',
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export interface EventTypes {
|
|
19
|
+
[Events.TOOLS_ADDED]: ReadonlyArray<Readonly<Protocol.WebMCP.Tool>>;
|
|
20
|
+
[Events.TOOLS_REMOVED]: ReadonlyArray<Readonly<Protocol.WebMCP.Tool>>;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export class WebMCPModel extends SDKModel<EventTypes> {
|
|
24
|
+
readonly #tools = new Map<Protocol.Page.FrameId, Map<string, Protocol.WebMCP.Tool>>();
|
|
25
|
+
readonly agent: ProtocolProxyApi.WebMCPApi;
|
|
26
|
+
#enabled = false;
|
|
27
|
+
|
|
28
|
+
constructor(target: Target) {
|
|
29
|
+
super(target);
|
|
30
|
+
this.agent = target.webMCPAgent();
|
|
31
|
+
target.registerWebMCPDispatcher(new WebMCPDispatcher(this));
|
|
32
|
+
|
|
33
|
+
const runtimeModel = target.model(RuntimeModel);
|
|
34
|
+
if (runtimeModel) {
|
|
35
|
+
runtimeModel.addEventListener(
|
|
36
|
+
RuntimeModelEvents.ExecutionContextDestroyed, this.#executionContextDestroyed, this);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
void this.enable();
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
get tools(): IteratorObject<Protocol.WebMCP.Tool> {
|
|
43
|
+
return this.#tools.values().flatMap(toolMap => toolMap.values());
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
async enable(): Promise<void> {
|
|
47
|
+
if (this.#enabled) {
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
await this.agent.invoke_enable();
|
|
51
|
+
this.#enabled = true;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
#executionContextDestroyed(event: Common.EventTarget.EventTargetEvent<ExecutionContext>): void {
|
|
55
|
+
const executionContext = event.data;
|
|
56
|
+
if (executionContext.isDefault && executionContext.frameId) {
|
|
57
|
+
const frameTools = this.#tools.get(executionContext.frameId);
|
|
58
|
+
if (frameTools) {
|
|
59
|
+
const toolsToRemove = [...frameTools.values()];
|
|
60
|
+
this.#tools.delete(executionContext.frameId);
|
|
61
|
+
this.dispatchEventToListeners(Events.TOOLS_REMOVED, toolsToRemove);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
onToolsRemoved(tools: Protocol.WebMCP.Tool[]): void {
|
|
67
|
+
const deletedTools = tools.filter(tool => this.#tools.get(tool.frameId)?.delete(tool.name));
|
|
68
|
+
this.dispatchEventToListeners(Events.TOOLS_REMOVED, deletedTools);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
onToolsAdded(tools: Protocol.WebMCP.Tool[]): void {
|
|
72
|
+
for (const tool of tools) {
|
|
73
|
+
const frameTools = this.#tools.get(tool.frameId) ?? new Map();
|
|
74
|
+
if (!this.#tools.has(tool.frameId)) {
|
|
75
|
+
this.#tools.set(tool.frameId, frameTools);
|
|
76
|
+
}
|
|
77
|
+
frameTools.set(tool.name, tool);
|
|
78
|
+
}
|
|
79
|
+
this.dispatchEventToListeners(Events.TOOLS_ADDED, tools);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
class WebMCPDispatcher implements ProtocolProxyApi.WebMCPDispatcher {
|
|
84
|
+
readonly #model: WebMCPModel;
|
|
85
|
+
constructor(model: WebMCPModel) {
|
|
86
|
+
this.#model = model;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
toolsAdded(params: Protocol.WebMCP.ToolsAddedEvent): void {
|
|
90
|
+
this.#model.onToolsAdded(params.tools);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
toolsRemoved(params: Protocol.WebMCP.ToolsRemovedEvent): void {
|
|
94
|
+
this.#model.onToolsRemoved(params.tools);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
SDKModel.register(WebMCPModel, {capabilities: Capability.WEB_MCP, autostart: true});
|
|
@@ -90,6 +90,7 @@ import * as Target from './Target.js';
|
|
|
90
90
|
import * as TargetManager from './TargetManager.js';
|
|
91
91
|
import * as TraceObject from './TraceObject.js';
|
|
92
92
|
import * as WebAuthnModel from './WebAuthnModel.js';
|
|
93
|
+
import * as WebMCPModel from './WebMCPModel.js';
|
|
93
94
|
|
|
94
95
|
export {
|
|
95
96
|
AccessibilityModel,
|
|
@@ -173,4 +174,5 @@ export {
|
|
|
173
174
|
TargetManager,
|
|
174
175
|
TraceObject,
|
|
175
176
|
WebAuthnModel,
|
|
177
|
+
WebMCPModel,
|
|
176
178
|
};
|
|
@@ -875,7 +875,7 @@ export abstract class HeapSnapshot {
|
|
|
875
875
|
interfaceDefinitions: string,
|
|
876
876
|
aggregates: Record<string, HeapSnapshotModel.HeapSnapshotModel.AggregateForDiff>,
|
|
877
877
|
};
|
|
878
|
-
#aggregates: Record<string, Record<string, AggregatedInfo>> = {};
|
|
878
|
+
#aggregates: Record<string, Record<string, HeapSnapshotModel.HeapSnapshotModel.AggregatedInfo>> = {};
|
|
879
879
|
#aggregatesSortedFlags: Record<string, boolean> = {};
|
|
880
880
|
profile: Profile;
|
|
881
881
|
nodeTypeOffset!: number;
|
|
@@ -1288,7 +1288,7 @@ export abstract class HeapSnapshot {
|
|
|
1288
1288
|
}
|
|
1289
1289
|
|
|
1290
1290
|
aggregatesWithFilter(nodeFilter: HeapSnapshotModel.HeapSnapshotModel.NodeFilter):
|
|
1291
|
-
Record<string, HeapSnapshotModel.HeapSnapshotModel.
|
|
1291
|
+
Record<string, HeapSnapshotModel.HeapSnapshotModel.AggregatedInfo> {
|
|
1292
1292
|
const filter = this.createFilter(nodeFilter);
|
|
1293
1293
|
// @ts-expect-error key is added in createFilter
|
|
1294
1294
|
const key = filter ? filter.key : 'allObjects';
|
|
@@ -1473,8 +1473,8 @@ export abstract class HeapSnapshot {
|
|
|
1473
1473
|
}
|
|
1474
1474
|
|
|
1475
1475
|
getAggregatesByClassKey(sortedIndexes: boolean, key?: string, filter?: ((arg0: HeapSnapshotNode) => boolean)):
|
|
1476
|
-
Record<string, HeapSnapshotModel.HeapSnapshotModel.
|
|
1477
|
-
let aggregates: Record<string, HeapSnapshotModel.HeapSnapshotModel.
|
|
1476
|
+
Record<string, HeapSnapshotModel.HeapSnapshotModel.AggregatedInfo> {
|
|
1477
|
+
let aggregates: Record<string, HeapSnapshotModel.HeapSnapshotModel.AggregatedInfo>;
|
|
1478
1478
|
if (key && this.#aggregates[key]) {
|
|
1479
1479
|
aggregates = this.#aggregates[key];
|
|
1480
1480
|
} else {
|
|
@@ -1504,7 +1504,7 @@ export abstract class HeapSnapshot {
|
|
|
1504
1504
|
}
|
|
1505
1505
|
}
|
|
1506
1506
|
|
|
1507
|
-
return aggregates
|
|
1507
|
+
return aggregates;
|
|
1508
1508
|
}
|
|
1509
1509
|
|
|
1510
1510
|
allocationTracesTops(): HeapSnapshotModel.HeapSnapshotModel.SerializedAllocationNode[] {
|
|
@@ -1653,8 +1653,9 @@ export abstract class HeapSnapshot {
|
|
|
1653
1653
|
}
|
|
1654
1654
|
}
|
|
1655
1655
|
|
|
1656
|
-
private buildAggregates(filter?: ((arg0: HeapSnapshotNode) => boolean)):
|
|
1657
|
-
|
|
1656
|
+
private buildAggregates(filter?: ((arg0: HeapSnapshotNode) => boolean)):
|
|
1657
|
+
Map<string|number, HeapSnapshotModel.HeapSnapshotModel.AggregatedInfo> {
|
|
1658
|
+
const aggregates = new Map<string|number, HeapSnapshotModel.HeapSnapshotModel.AggregatedInfo>();
|
|
1658
1659
|
|
|
1659
1660
|
const nodes = this.nodes;
|
|
1660
1661
|
const nodesLength = nodes.length;
|
|
@@ -1703,7 +1704,8 @@ export abstract class HeapSnapshot {
|
|
|
1703
1704
|
}
|
|
1704
1705
|
|
|
1705
1706
|
private calculateClassesRetainedSize(
|
|
1706
|
-
aggregates: Map<string|number, AggregatedInfo>,
|
|
1707
|
+
aggregates: Map<string|number, HeapSnapshotModel.HeapSnapshotModel.AggregatedInfo>,
|
|
1708
|
+
filter?: ((arg0: HeapSnapshotNode) => boolean)): void {
|
|
1707
1709
|
const rootNodeIndex = this.rootNodeIndexInternal;
|
|
1708
1710
|
const node = this.createNode(rootNodeIndex);
|
|
1709
1711
|
const list = [rootNodeIndex];
|
|
@@ -1725,7 +1727,7 @@ export abstract class HeapSnapshot {
|
|
|
1725
1727
|
const dominatedIndexTo = firstDominatedNodeIndex[nodeOrdinal + 1];
|
|
1726
1728
|
|
|
1727
1729
|
if (!seen && (!filter || filter(node)) && node.selfSize()) {
|
|
1728
|
-
(aggregates.get(classKey) as AggregatedInfo).maxRet += node.retainedSize();
|
|
1730
|
+
(aggregates.get(classKey) as HeapSnapshotModel.HeapSnapshotModel.AggregatedInfo).maxRet += node.retainedSize();
|
|
1729
1731
|
if (dominatedIndexFrom !== dominatedIndexTo) {
|
|
1730
1732
|
seenClassKeys.set(classKey, true);
|
|
1731
1733
|
sizes.push(list.length);
|
|
@@ -1745,7 +1747,7 @@ export abstract class HeapSnapshot {
|
|
|
1745
1747
|
}
|
|
1746
1748
|
}
|
|
1747
1749
|
|
|
1748
|
-
private sortAggregateIndexes(aggregates: Record<string, AggregatedInfo>): void {
|
|
1750
|
+
private sortAggregateIndexes(aggregates: Record<string, HeapSnapshotModel.HeapSnapshotModel.AggregatedInfo>): void {
|
|
1749
1751
|
const nodeA = this.createNode();
|
|
1750
1752
|
const nodeB = this.createNode();
|
|
1751
1753
|
|
|
@@ -2700,7 +2702,7 @@ export abstract class HeapSnapshot {
|
|
|
2700
2702
|
|
|
2701
2703
|
private calculateDiffForClass(
|
|
2702
2704
|
baseAggregate: HeapSnapshotModel.HeapSnapshotModel.AggregateForDiff,
|
|
2703
|
-
aggregate?: HeapSnapshotModel.HeapSnapshotModel.
|
|
2705
|
+
aggregate?: HeapSnapshotModel.HeapSnapshotModel.AggregatedInfo): HeapSnapshotModel.HeapSnapshotModel.Diff|null {
|
|
2704
2706
|
const baseIds = baseAggregate.ids;
|
|
2705
2707
|
const baseIndexes = baseAggregate.indexes;
|
|
2706
2708
|
const baseSelfSizes = baseAggregate.selfSizes;
|
|
@@ -4024,11 +4026,3 @@ export class JSHeapSnapshotRetainerEdge extends HeapSnapshotRetainerEdge {
|
|
|
4024
4026
|
return this.edge().isWeak();
|
|
4025
4027
|
}
|
|
4026
4028
|
}
|
|
4027
|
-
export interface AggregatedInfo {
|
|
4028
|
-
count: number;
|
|
4029
|
-
distance: number;
|
|
4030
|
-
self: number;
|
|
4031
|
-
maxRet: number;
|
|
4032
|
-
name: string;
|
|
4033
|
-
idxs: number[];
|
|
4034
|
-
}
|
|
@@ -214,7 +214,7 @@ export class NodeIndicatorProvider implements UI.Toolbar.Provider {
|
|
|
214
214
|
|
|
215
215
|
private constructor() {
|
|
216
216
|
this.#widgetElement = document.createElement('devtools-widget') as UI.Widget.WidgetElement<NodeIndicator>;
|
|
217
|
-
this.#widgetElement
|
|
217
|
+
new NodeIndicator(this.#widgetElement);
|
|
218
218
|
|
|
219
219
|
this.#toolbarItem = new UI.Toolbar.ToolbarItem(this.#widgetElement);
|
|
220
220
|
this.#toolbarItem.setVisible(false);
|
|
@@ -210,7 +210,7 @@ export class GlobalAiButtonToolbarProvider implements UI.Toolbar.Provider {
|
|
|
210
210
|
|
|
211
211
|
private constructor() {
|
|
212
212
|
this.#widgetElement = document.createElement('devtools-widget') as UI.Widget.WidgetElement<GlobalAiButton>;
|
|
213
|
-
this.#widgetElement
|
|
213
|
+
new GlobalAiButton(this.#widgetElement);
|
|
214
214
|
|
|
215
215
|
this.#toolbarItem = new UI.Toolbar.ToolbarItemWithCompactLayout(this.#widgetElement);
|
|
216
216
|
this.#toolbarItem.setVisible(false);
|
|
@@ -345,7 +345,7 @@ inspectorBackend.registerCommand("Cast.stopCasting", [{"name": "sinkName", "type
|
|
|
345
345
|
inspectorBackend.registerType("Cast.Sink", [{"name": "name", "type": "string", "optional": false, "description": "", "typeRef": null}, {"name": "id", "type": "string", "optional": false, "description": "", "typeRef": null}, {"name": "session", "type": "string", "optional": true, "description": "Text describing the current session. Present only if there is an active session on the sink.", "typeRef": null}]);
|
|
346
346
|
|
|
347
347
|
// DOM.
|
|
348
|
-
inspectorBackend.registerEnum("DOM.PseudoType", {FirstLine: "first-line", FirstLetter: "first-letter", Checkmark: "checkmark", Before: "before", After: "after", PickerIcon: "picker-icon", InterestHint: "interest-hint", Marker: "marker", Backdrop: "backdrop", Column: "column", Selection: "selection", SearchText: "search-text", TargetText: "target-text", SpellingError: "spelling-error", GrammarError: "grammar-error", Highlight: "highlight", FirstLineInherited: "first-line-inherited", ScrollMarker: "scroll-marker", ScrollMarkerGroup: "scroll-marker-group", ScrollButton: "scroll-button", Scrollbar: "scrollbar", ScrollbarThumb: "scrollbar-thumb", ScrollbarButton: "scrollbar-button", ScrollbarTrack: "scrollbar-track", ScrollbarTrackPiece: "scrollbar-track-piece", ScrollbarCorner: "scrollbar-corner", Resizer: "resizer", InputListButton: "input-list-button", ViewTransition: "view-transition", ViewTransitionGroup: "view-transition-group", ViewTransitionImagePair: "view-transition-image-pair", ViewTransitionGroupChildren: "view-transition-group-children", ViewTransitionOld: "view-transition-old", ViewTransitionNew: "view-transition-new", Placeholder: "placeholder", FileSelectorButton: "file-selector-button", DetailsContent: "details-content", Picker: "picker", PermissionIcon: "permission-icon", OverscrollAreaParent: "overscroll-area-parent"});
|
|
348
|
+
inspectorBackend.registerEnum("DOM.PseudoType", {FirstLine: "first-line", FirstLetter: "first-letter", Checkmark: "checkmark", Before: "before", After: "after", ExpandIcon: "expand-icon", PickerIcon: "picker-icon", InterestHint: "interest-hint", Marker: "marker", Backdrop: "backdrop", Column: "column", Selection: "selection", SearchText: "search-text", TargetText: "target-text", SpellingError: "spelling-error", GrammarError: "grammar-error", Highlight: "highlight", FirstLineInherited: "first-line-inherited", ScrollMarker: "scroll-marker", ScrollMarkerGroup: "scroll-marker-group", ScrollButton: "scroll-button", Scrollbar: "scrollbar", ScrollbarThumb: "scrollbar-thumb", ScrollbarButton: "scrollbar-button", ScrollbarTrack: "scrollbar-track", ScrollbarTrackPiece: "scrollbar-track-piece", ScrollbarCorner: "scrollbar-corner", Resizer: "resizer", InputListButton: "input-list-button", ViewTransition: "view-transition", ViewTransitionGroup: "view-transition-group", ViewTransitionImagePair: "view-transition-image-pair", ViewTransitionGroupChildren: "view-transition-group-children", ViewTransitionOld: "view-transition-old", ViewTransitionNew: "view-transition-new", Placeholder: "placeholder", FileSelectorButton: "file-selector-button", DetailsContent: "details-content", Picker: "picker", PermissionIcon: "permission-icon", OverscrollAreaParent: "overscroll-area-parent"});
|
|
349
349
|
inspectorBackend.registerEnum("DOM.ShadowRootType", {UserAgent: "user-agent", Open: "open", Closed: "closed"});
|
|
350
350
|
inspectorBackend.registerEnum("DOM.CompatibilityMode", {QuirksMode: "QuirksMode", LimitedQuirksMode: "LimitedQuirksMode", NoQuirksMode: "NoQuirksMode"});
|
|
351
351
|
inspectorBackend.registerEnum("DOM.PhysicalAxes", {Horizontal: "Horizontal", Vertical: "Vertical", Both: "Both"});
|
|
@@ -364,7 +364,7 @@ inspectorBackend.registerEvent("DOM.inlineStyleInvalidated", ["nodeIds"]);
|
|
|
364
364
|
inspectorBackend.registerEvent("DOM.pseudoElementAdded", ["parentId", "pseudoElement"]);
|
|
365
365
|
inspectorBackend.registerEvent("DOM.topLayerElementsUpdated", []);
|
|
366
366
|
inspectorBackend.registerEvent("DOM.scrollableFlagUpdated", ["nodeId", "isScrollable"]);
|
|
367
|
-
inspectorBackend.registerEvent("DOM.adRelatedStateUpdated", ["nodeId", "
|
|
367
|
+
inspectorBackend.registerEvent("DOM.adRelatedStateUpdated", ["nodeId", "adProvenance"]);
|
|
368
368
|
inspectorBackend.registerEvent("DOM.affectedByStartingStylesFlagUpdated", ["nodeId", "affectedByStartingStyles"]);
|
|
369
369
|
inspectorBackend.registerEvent("DOM.pseudoElementRemoved", ["parentId", "pseudoElementId"]);
|
|
370
370
|
inspectorBackend.registerEvent("DOM.setChildNodes", ["parentId", "nodes"]);
|
|
@@ -426,7 +426,7 @@ inspectorBackend.registerCommand("DOM.getQueryingDescendantsForContainer", [{"na
|
|
|
426
426
|
inspectorBackend.registerCommand("DOM.getAnchorElement", [{"name": "nodeId", "type": "number", "optional": false, "description": "Id of the positioned element from which to find the anchor.", "typeRef": "DOM.NodeId"}, {"name": "anchorSpecifier", "type": "string", "optional": true, "description": "An optional anchor specifier, as defined in https://www.w3.org/TR/css-anchor-position-1/#anchor-specifier. If not provided, it will return the implicit anchor element for the given positioned element.", "typeRef": null}], ["nodeId"], "Returns the target anchor element of the given anchor query according to https://www.w3.org/TR/css-anchor-position-1/#target.");
|
|
427
427
|
inspectorBackend.registerCommand("DOM.forceShowPopover", [{"name": "nodeId", "type": "number", "optional": false, "description": "Id of the popover HTMLElement", "typeRef": "DOM.NodeId"}, {"name": "enable", "type": "boolean", "optional": false, "description": "If true, opens the popover and keeps it open. If false, closes the popover if it was previously force-opened.", "typeRef": null}], ["nodeIds"], "When enabling, this API force-opens the popover identified by nodeId and keeps it open until disabled.");
|
|
428
428
|
inspectorBackend.registerType("DOM.BackendNode", [{"name": "nodeType", "type": "number", "optional": false, "description": "`Node`'s nodeType.", "typeRef": null}, {"name": "nodeName", "type": "string", "optional": false, "description": "`Node`'s nodeName.", "typeRef": null}, {"name": "backendNodeId", "type": "number", "optional": false, "description": "", "typeRef": "DOM.BackendNodeId"}]);
|
|
429
|
-
inspectorBackend.registerType("DOM.Node", [{"name": "nodeId", "type": "number", "optional": false, "description": "Node identifier that is passed into the rest of the DOM messages as the `nodeId`. Backend will only push node with given `id` once. It is aware of all requested nodes and will only fire DOM events for nodes known to the client.", "typeRef": "DOM.NodeId"}, {"name": "parentId", "type": "number", "optional": true, "description": "The id of the parent node if any.", "typeRef": "DOM.NodeId"}, {"name": "backendNodeId", "type": "number", "optional": false, "description": "The BackendNodeId for this node.", "typeRef": "DOM.BackendNodeId"}, {"name": "nodeType", "type": "number", "optional": false, "description": "`Node`'s nodeType.", "typeRef": null}, {"name": "nodeName", "type": "string", "optional": false, "description": "`Node`'s nodeName.", "typeRef": null}, {"name": "localName", "type": "string", "optional": false, "description": "`Node`'s localName.", "typeRef": null}, {"name": "nodeValue", "type": "string", "optional": false, "description": "`Node`'s nodeValue.", "typeRef": null}, {"name": "childNodeCount", "type": "number", "optional": true, "description": "Child count for `Container` nodes.", "typeRef": null}, {"name": "children", "type": "array", "optional": true, "description": "Child nodes of this node when requested with children.", "typeRef": "DOM.Node"}, {"name": "attributes", "type": "array", "optional": true, "description": "Attributes of the `Element` node in the form of flat array `[name1, value1, name2, value2]`.", "typeRef": "string"}, {"name": "documentURL", "type": "string", "optional": true, "description": "Document URL that `Document` or `FrameOwner` node points to.", "typeRef": null}, {"name": "baseURL", "type": "string", "optional": true, "description": "Base URL that `Document` or `FrameOwner` node uses for URL completion.", "typeRef": null}, {"name": "publicId", "type": "string", "optional": true, "description": "`DocumentType`'s publicId.", "typeRef": null}, {"name": "systemId", "type": "string", "optional": true, "description": "`DocumentType`'s systemId.", "typeRef": null}, {"name": "internalSubset", "type": "string", "optional": true, "description": "`DocumentType`'s internalSubset.", "typeRef": null}, {"name": "xmlVersion", "type": "string", "optional": true, "description": "`Document`'s XML version in case of XML documents.", "typeRef": null}, {"name": "name", "type": "string", "optional": true, "description": "`Attr`'s name.", "typeRef": null}, {"name": "value", "type": "string", "optional": true, "description": "`Attr`'s value.", "typeRef": null}, {"name": "pseudoType", "type": "string", "optional": true, "description": "Pseudo element type for this node.", "typeRef": "DOM.PseudoType"}, {"name": "pseudoIdentifier", "type": "string", "optional": true, "description": "Pseudo element identifier for this node. Only present if there is a valid pseudoType.", "typeRef": null}, {"name": "shadowRootType", "type": "string", "optional": true, "description": "Shadow root type.", "typeRef": "DOM.ShadowRootType"}, {"name": "frameId", "type": "string", "optional": true, "description": "Frame ID for frame owner elements.", "typeRef": "Page.FrameId"}, {"name": "contentDocument", "type": "object", "optional": true, "description": "Content document for frame owner elements.", "typeRef": "DOM.Node"}, {"name": "shadowRoots", "type": "array", "optional": true, "description": "Shadow root list for given element host.", "typeRef": "DOM.Node"}, {"name": "templateContent", "type": "object", "optional": true, "description": "Content document fragment for template elements.", "typeRef": "DOM.Node"}, {"name": "pseudoElements", "type": "array", "optional": true, "description": "Pseudo elements associated with this node.", "typeRef": "DOM.Node"}, {"name": "importedDocument", "type": "object", "optional": true, "description": "Deprecated, as the HTML Imports API has been removed (crbug.com/937746). This property used to return the imported document for the HTMLImport links. The property is always undefined now.", "typeRef": "DOM.Node"}, {"name": "distributedNodes", "type": "array", "optional": true, "description": "Distributed nodes for given insertion point.", "typeRef": "DOM.BackendNode"}, {"name": "isSVG", "type": "boolean", "optional": true, "description": "Whether the node is SVG.", "typeRef": null}, {"name": "compatibilityMode", "type": "string", "optional": true, "description": "", "typeRef": "DOM.CompatibilityMode"}, {"name": "assignedSlot", "type": "object", "optional": true, "description": "", "typeRef": "DOM.BackendNode"}, {"name": "isScrollable", "type": "boolean", "optional": true, "description": "", "typeRef": null}, {"name": "affectedByStartingStyles", "type": "boolean", "optional": true, "description": "", "typeRef": null}, {"name": "adoptedStyleSheets", "type": "array", "optional": true, "description": "", "typeRef": "DOM.StyleSheetId"}, {"name": "
|
|
429
|
+
inspectorBackend.registerType("DOM.Node", [{"name": "nodeId", "type": "number", "optional": false, "description": "Node identifier that is passed into the rest of the DOM messages as the `nodeId`. Backend will only push node with given `id` once. It is aware of all requested nodes and will only fire DOM events for nodes known to the client.", "typeRef": "DOM.NodeId"}, {"name": "parentId", "type": "number", "optional": true, "description": "The id of the parent node if any.", "typeRef": "DOM.NodeId"}, {"name": "backendNodeId", "type": "number", "optional": false, "description": "The BackendNodeId for this node.", "typeRef": "DOM.BackendNodeId"}, {"name": "nodeType", "type": "number", "optional": false, "description": "`Node`'s nodeType.", "typeRef": null}, {"name": "nodeName", "type": "string", "optional": false, "description": "`Node`'s nodeName.", "typeRef": null}, {"name": "localName", "type": "string", "optional": false, "description": "`Node`'s localName.", "typeRef": null}, {"name": "nodeValue", "type": "string", "optional": false, "description": "`Node`'s nodeValue.", "typeRef": null}, {"name": "childNodeCount", "type": "number", "optional": true, "description": "Child count for `Container` nodes.", "typeRef": null}, {"name": "children", "type": "array", "optional": true, "description": "Child nodes of this node when requested with children.", "typeRef": "DOM.Node"}, {"name": "attributes", "type": "array", "optional": true, "description": "Attributes of the `Element` node in the form of flat array `[name1, value1, name2, value2]`.", "typeRef": "string"}, {"name": "documentURL", "type": "string", "optional": true, "description": "Document URL that `Document` or `FrameOwner` node points to.", "typeRef": null}, {"name": "baseURL", "type": "string", "optional": true, "description": "Base URL that `Document` or `FrameOwner` node uses for URL completion.", "typeRef": null}, {"name": "publicId", "type": "string", "optional": true, "description": "`DocumentType`'s publicId.", "typeRef": null}, {"name": "systemId", "type": "string", "optional": true, "description": "`DocumentType`'s systemId.", "typeRef": null}, {"name": "internalSubset", "type": "string", "optional": true, "description": "`DocumentType`'s internalSubset.", "typeRef": null}, {"name": "xmlVersion", "type": "string", "optional": true, "description": "`Document`'s XML version in case of XML documents.", "typeRef": null}, {"name": "name", "type": "string", "optional": true, "description": "`Attr`'s name.", "typeRef": null}, {"name": "value", "type": "string", "optional": true, "description": "`Attr`'s value.", "typeRef": null}, {"name": "pseudoType", "type": "string", "optional": true, "description": "Pseudo element type for this node.", "typeRef": "DOM.PseudoType"}, {"name": "pseudoIdentifier", "type": "string", "optional": true, "description": "Pseudo element identifier for this node. Only present if there is a valid pseudoType.", "typeRef": null}, {"name": "shadowRootType", "type": "string", "optional": true, "description": "Shadow root type.", "typeRef": "DOM.ShadowRootType"}, {"name": "frameId", "type": "string", "optional": true, "description": "Frame ID for frame owner elements.", "typeRef": "Page.FrameId"}, {"name": "contentDocument", "type": "object", "optional": true, "description": "Content document for frame owner elements.", "typeRef": "DOM.Node"}, {"name": "shadowRoots", "type": "array", "optional": true, "description": "Shadow root list for given element host.", "typeRef": "DOM.Node"}, {"name": "templateContent", "type": "object", "optional": true, "description": "Content document fragment for template elements.", "typeRef": "DOM.Node"}, {"name": "pseudoElements", "type": "array", "optional": true, "description": "Pseudo elements associated with this node.", "typeRef": "DOM.Node"}, {"name": "importedDocument", "type": "object", "optional": true, "description": "Deprecated, as the HTML Imports API has been removed (crbug.com/937746). This property used to return the imported document for the HTMLImport links. The property is always undefined now.", "typeRef": "DOM.Node"}, {"name": "distributedNodes", "type": "array", "optional": true, "description": "Distributed nodes for given insertion point.", "typeRef": "DOM.BackendNode"}, {"name": "isSVG", "type": "boolean", "optional": true, "description": "Whether the node is SVG.", "typeRef": null}, {"name": "compatibilityMode", "type": "string", "optional": true, "description": "", "typeRef": "DOM.CompatibilityMode"}, {"name": "assignedSlot", "type": "object", "optional": true, "description": "", "typeRef": "DOM.BackendNode"}, {"name": "isScrollable", "type": "boolean", "optional": true, "description": "", "typeRef": null}, {"name": "affectedByStartingStyles", "type": "boolean", "optional": true, "description": "", "typeRef": null}, {"name": "adoptedStyleSheets", "type": "array", "optional": true, "description": "", "typeRef": "DOM.StyleSheetId"}, {"name": "adProvenance", "type": "object", "optional": true, "description": "", "typeRef": "Network.AdProvenance"}]);
|
|
430
430
|
inspectorBackend.registerType("DOM.DetachedElementInfo", [{"name": "treeNode", "type": "object", "optional": false, "description": "", "typeRef": "DOM.Node"}, {"name": "retainedNodeIds", "type": "array", "optional": false, "description": "", "typeRef": "DOM.NodeId"}]);
|
|
431
431
|
inspectorBackend.registerType("DOM.RGBA", [{"name": "r", "type": "number", "optional": false, "description": "The red component, in the [0-255] range.", "typeRef": null}, {"name": "g", "type": "number", "optional": false, "description": "The green component, in the [0-255] range.", "typeRef": null}, {"name": "b", "type": "number", "optional": false, "description": "The blue component, in the [0-255] range.", "typeRef": null}, {"name": "a", "type": "number", "optional": true, "description": "The alpha component, in the [0-1] range (default: 1).", "typeRef": null}]);
|
|
432
432
|
inspectorBackend.registerType("DOM.Quad", [{"name": "Quad", "type": "array", "optional": false, "description": "An array of quad vertices, x immediately followed by y for each point, points clock-wise.", "typeRef": "number"}]);
|
|
@@ -928,6 +928,7 @@ inspectorBackend.registerType("Network.ConnectTiming", [{"name": "requestTime",
|
|
|
928
928
|
inspectorBackend.registerType("Network.ClientSecurityState", [{"name": "initiatorIsSecureContext", "type": "boolean", "optional": false, "description": "", "typeRef": null}, {"name": "initiatorIPAddressSpace", "type": "string", "optional": false, "description": "", "typeRef": "Network.IPAddressSpace"}, {"name": "localNetworkAccessRequestPolicy", "type": "string", "optional": false, "description": "", "typeRef": "Network.LocalNetworkAccessRequestPolicy"}]);
|
|
929
929
|
inspectorBackend.registerType("Network.AdScriptIdentifier", [{"name": "scriptId", "type": "string", "optional": false, "description": "The script's V8 identifier.", "typeRef": "Runtime.ScriptId"}, {"name": "debuggerId", "type": "string", "optional": false, "description": "V8's debugging ID for the v8::Context.", "typeRef": "Runtime.UniqueDebuggerId"}, {"name": "name", "type": "string", "optional": false, "description": "The script's url (or generated name based on id if inline script).", "typeRef": null}]);
|
|
930
930
|
inspectorBackend.registerType("Network.AdAncestry", [{"name": "ancestryChain", "type": "array", "optional": false, "description": "A chain of `AdScriptIdentifier`s representing the ancestry of an ad script that led to the creation of a resource or element. The chain is ordered from the script itself (lowest level) up to its root ancestor that was flagged by a filter list.", "typeRef": "Network.AdScriptIdentifier"}, {"name": "rootScriptFilterlistRule", "type": "string", "optional": true, "description": "The filter list rule that caused the root (last) script in `ancestryChain` to be tagged as an ad.", "typeRef": null}]);
|
|
931
|
+
inspectorBackend.registerType("Network.AdProvenance", [{"name": "filterlistRule", "type": "string", "optional": true, "description": "The filterlist rule that matched, if any.", "typeRef": null}, {"name": "adScriptAncestry", "type": "object", "optional": true, "description": "The script ancestry that created the ad, if any.", "typeRef": "Network.AdAncestry"}]);
|
|
931
932
|
inspectorBackend.registerType("Network.CrossOriginOpenerPolicyStatus", [{"name": "value", "type": "string", "optional": false, "description": "", "typeRef": "Network.CrossOriginOpenerPolicyValue"}, {"name": "reportOnlyValue", "type": "string", "optional": false, "description": "", "typeRef": "Network.CrossOriginOpenerPolicyValue"}, {"name": "reportingEndpoint", "type": "string", "optional": true, "description": "", "typeRef": null}, {"name": "reportOnlyReportingEndpoint", "type": "string", "optional": true, "description": "", "typeRef": null}]);
|
|
932
933
|
inspectorBackend.registerType("Network.CrossOriginEmbedderPolicyStatus", [{"name": "value", "type": "string", "optional": false, "description": "", "typeRef": "Network.CrossOriginEmbedderPolicyValue"}, {"name": "reportOnlyValue", "type": "string", "optional": false, "description": "", "typeRef": "Network.CrossOriginEmbedderPolicyValue"}, {"name": "reportingEndpoint", "type": "string", "optional": true, "description": "", "typeRef": null}, {"name": "reportOnlyReportingEndpoint", "type": "string", "optional": true, "description": "", "typeRef": null}]);
|
|
933
934
|
inspectorBackend.registerType("Network.ContentSecurityPolicyStatus", [{"name": "effectiveDirectives", "type": "string", "optional": false, "description": "", "typeRef": null}, {"name": "isEnforced", "type": "boolean", "optional": false, "description": "", "typeRef": null}, {"name": "source", "type": "string", "optional": false, "description": "", "typeRef": "Network.ContentSecurityPolicySource"}]);
|
|
@@ -1493,7 +1494,7 @@ inspectorBackend.registerType("WebAudio.AudioParam", [{"name": "paramId", "type"
|
|
|
1493
1494
|
|
|
1494
1495
|
// WebAuthn.
|
|
1495
1496
|
inspectorBackend.registerEnum("WebAuthn.AuthenticatorProtocol", {U2f: "u2f", Ctap2: "ctap2"});
|
|
1496
|
-
inspectorBackend.registerEnum("WebAuthn.Ctap2Version", {Ctap2_0: "ctap2_0", Ctap2_1: "ctap2_1"});
|
|
1497
|
+
inspectorBackend.registerEnum("WebAuthn.Ctap2Version", {Ctap2_0: "ctap2_0", Ctap2_1: "ctap2_1", Ctap2_2: "ctap2_2"});
|
|
1497
1498
|
inspectorBackend.registerEnum("WebAuthn.AuthenticatorTransport", {Usb: "usb", Nfc: "nfc", Ble: "ble", Cable: "cable", Internal: "internal"});
|
|
1498
1499
|
inspectorBackend.registerEvent("WebAuthn.credentialAdded", ["authenticatorId", "credential"]);
|
|
1499
1500
|
inspectorBackend.registerEvent("WebAuthn.credentialDeleted", ["authenticatorId", "credentialId"]);
|
|
@@ -1512,7 +1513,7 @@ inspectorBackend.registerCommand("WebAuthn.clearCredentials", [{"name": "authent
|
|
|
1512
1513
|
inspectorBackend.registerCommand("WebAuthn.setUserVerified", [{"name": "authenticatorId", "type": "string", "optional": false, "description": "", "typeRef": "WebAuthn.AuthenticatorId"}, {"name": "isUserVerified", "type": "boolean", "optional": false, "description": "", "typeRef": null}], [], "Sets whether User Verification succeeds or fails for an authenticator. The default is true.");
|
|
1513
1514
|
inspectorBackend.registerCommand("WebAuthn.setAutomaticPresenceSimulation", [{"name": "authenticatorId", "type": "string", "optional": false, "description": "", "typeRef": "WebAuthn.AuthenticatorId"}, {"name": "enabled", "type": "boolean", "optional": false, "description": "", "typeRef": null}], [], "Sets whether tests of user presence will succeed immediately (if true) or fail to resolve (if false) for an authenticator. The default is true.");
|
|
1514
1515
|
inspectorBackend.registerCommand("WebAuthn.setCredentialProperties", [{"name": "authenticatorId", "type": "string", "optional": false, "description": "", "typeRef": "WebAuthn.AuthenticatorId"}, {"name": "credentialId", "type": "string", "optional": false, "description": "", "typeRef": null}, {"name": "backupEligibility", "type": "boolean", "optional": true, "description": "", "typeRef": null}, {"name": "backupState", "type": "boolean", "optional": true, "description": "", "typeRef": null}], [], "Allows setting credential properties. https://w3c.github.io/webauthn/#sctn-automation-set-credential-properties");
|
|
1515
|
-
inspectorBackend.registerType("WebAuthn.VirtualAuthenticatorOptions", [{"name": "protocol", "type": "string", "optional": false, "description": "", "typeRef": "WebAuthn.AuthenticatorProtocol"}, {"name": "ctap2Version", "type": "string", "optional": true, "description": "Defaults to ctap2_0. Ignored if |protocol| == u2f.", "typeRef": "WebAuthn.Ctap2Version"}, {"name": "transport", "type": "string", "optional": false, "description": "", "typeRef": "WebAuthn.AuthenticatorTransport"}, {"name": "hasResidentKey", "type": "boolean", "optional": true, "description": "Defaults to false.", "typeRef": null}, {"name": "hasUserVerification", "type": "boolean", "optional": true, "description": "Defaults to false.", "typeRef": null}, {"name": "hasLargeBlob", "type": "boolean", "optional": true, "description": "If set to true, the authenticator will support the largeBlob extension. https://w3c.github.io/webauthn#largeBlob Defaults to false.", "typeRef": null}, {"name": "hasCredBlob", "type": "boolean", "optional": true, "description": "If set to true, the authenticator will support the credBlob extension. https://fidoalliance.org/specs/fido-v2.1-rd-20201208/fido-client-to-authenticator-protocol-v2.1-rd-20201208.html#sctn-credBlob-extension Defaults to false.", "typeRef": null}, {"name": "hasMinPinLength", "type": "boolean", "optional": true, "description": "If set to true, the authenticator will support the minPinLength extension. https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-20210615.html#sctn-minpinlength-extension Defaults to false.", "typeRef": null}, {"name": "hasPrf", "type": "boolean", "optional": true, "description": "If set to true, the authenticator will support the prf extension. https://w3c.github.io/webauthn/#prf-extension Defaults to false.", "typeRef": null}, {"name": "automaticPresenceSimulation", "type": "boolean", "optional": true, "description": "If set to true, tests of user presence will succeed immediately. Otherwise, they will not be resolved. Defaults to true.", "typeRef": null}, {"name": "isUserVerified", "type": "boolean", "optional": true, "description": "Sets whether User Verification succeeds or fails for an authenticator. Defaults to false.", "typeRef": null}, {"name": "defaultBackupEligibility", "type": "boolean", "optional": true, "description": "Credentials created by this authenticator will have the backup eligibility (BE) flag set to this value. Defaults to false. https://w3c.github.io/webauthn/#sctn-credential-backup", "typeRef": null}, {"name": "defaultBackupState", "type": "boolean", "optional": true, "description": "Credentials created by this authenticator will have the backup state (BS) flag set to this value. Defaults to false. https://w3c.github.io/webauthn/#sctn-credential-backup", "typeRef": null}]);
|
|
1516
|
+
inspectorBackend.registerType("WebAuthn.VirtualAuthenticatorOptions", [{"name": "protocol", "type": "string", "optional": false, "description": "", "typeRef": "WebAuthn.AuthenticatorProtocol"}, {"name": "ctap2Version", "type": "string", "optional": true, "description": "Defaults to ctap2_0. Ignored if |protocol| == u2f.", "typeRef": "WebAuthn.Ctap2Version"}, {"name": "transport", "type": "string", "optional": false, "description": "", "typeRef": "WebAuthn.AuthenticatorTransport"}, {"name": "hasResidentKey", "type": "boolean", "optional": true, "description": "Defaults to false.", "typeRef": null}, {"name": "hasUserVerification", "type": "boolean", "optional": true, "description": "Defaults to false.", "typeRef": null}, {"name": "hasLargeBlob", "type": "boolean", "optional": true, "description": "If set to true, the authenticator will support the largeBlob extension. https://w3c.github.io/webauthn#largeBlob Defaults to false.", "typeRef": null}, {"name": "hasCredBlob", "type": "boolean", "optional": true, "description": "If set to true, the authenticator will support the credBlob extension. https://fidoalliance.org/specs/fido-v2.1-rd-20201208/fido-client-to-authenticator-protocol-v2.1-rd-20201208.html#sctn-credBlob-extension Defaults to false.", "typeRef": null}, {"name": "hasMinPinLength", "type": "boolean", "optional": true, "description": "If set to true, the authenticator will support the minPinLength extension. https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-20210615.html#sctn-minpinlength-extension Defaults to false.", "typeRef": null}, {"name": "hasPrf", "type": "boolean", "optional": true, "description": "If set to true, the authenticator will support the prf extension. https://w3c.github.io/webauthn/#prf-extension Defaults to false.", "typeRef": null}, {"name": "hasHmacSecret", "type": "boolean", "optional": true, "description": "If set to true, the authenticator will support the hmac-secret extension. https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-20210615.html#sctn-hmac-secret-extension Defaults to false.", "typeRef": null}, {"name": "hasHmacSecretMc", "type": "boolean", "optional": true, "description": "If set to true, the authenticator will support the hmac-secret-mc extension. https://fidoalliance.org/specs/fido-v2.2-rd-20241003/fido-client-to-authenticator-protocol-v2.2-rd-20241003.html#sctn-hmac-secret-make-cred-extension Defaults to false.", "typeRef": null}, {"name": "automaticPresenceSimulation", "type": "boolean", "optional": true, "description": "If set to true, tests of user presence will succeed immediately. Otherwise, they will not be resolved. Defaults to true.", "typeRef": null}, {"name": "isUserVerified", "type": "boolean", "optional": true, "description": "Sets whether User Verification succeeds or fails for an authenticator. Defaults to false.", "typeRef": null}, {"name": "defaultBackupEligibility", "type": "boolean", "optional": true, "description": "Credentials created by this authenticator will have the backup eligibility (BE) flag set to this value. Defaults to false. https://w3c.github.io/webauthn/#sctn-credential-backup", "typeRef": null}, {"name": "defaultBackupState", "type": "boolean", "optional": true, "description": "Credentials created by this authenticator will have the backup state (BS) flag set to this value. Defaults to false. https://w3c.github.io/webauthn/#sctn-credential-backup", "typeRef": null}]);
|
|
1516
1517
|
inspectorBackend.registerType("WebAuthn.Credential", [{"name": "credentialId", "type": "string", "optional": false, "description": "", "typeRef": null}, {"name": "isResidentCredential", "type": "boolean", "optional": false, "description": "", "typeRef": null}, {"name": "rpId", "type": "string", "optional": true, "description": "Relying Party ID the credential is scoped to. Must be set when adding a credential.", "typeRef": null}, {"name": "privateKey", "type": "string", "optional": false, "description": "The ECDSA P-256 private key in PKCS#8 format.", "typeRef": null}, {"name": "userHandle", "type": "string", "optional": true, "description": "An opaque byte sequence with a maximum size of 64 bytes mapping the credential to a specific user.", "typeRef": null}, {"name": "signCount", "type": "number", "optional": false, "description": "Signature counter. This is incremented by one for each successful assertion. See https://w3c.github.io/webauthn/#signature-counter", "typeRef": null}, {"name": "largeBlob", "type": "string", "optional": true, "description": "The large blob associated with the credential. See https://w3c.github.io/webauthn/#sctn-large-blob-extension", "typeRef": null}, {"name": "backupEligibility", "type": "boolean", "optional": true, "description": "Assertions returned by this credential will have the backup eligibility (BE) flag set to this value. Defaults to the authenticator's defaultBackupEligibility value.", "typeRef": null}, {"name": "backupState", "type": "boolean", "optional": true, "description": "Assertions returned by this credential will have the backup state (BS) flag set to this value. Defaults to the authenticator's defaultBackupState value.", "typeRef": null}, {"name": "userName", "type": "string", "optional": true, "description": "The credential's user.name property. Equivalent to empty if not set. https://w3c.github.io/webauthn/#dom-publickeycredentialentity-name", "typeRef": null}, {"name": "userDisplayName", "type": "string", "optional": true, "description": "The credential's user.displayName property. Equivalent to empty if not set. https://w3c.github.io/webauthn/#dom-publickeycredentialuserentity-displayname", "typeRef": null}]);
|
|
1517
1518
|
|
|
1518
1519
|
// WebMCP.
|
|
@@ -4576,6 +4576,7 @@ export namespace DOM {
|
|
|
4576
4576
|
Checkmark = 'checkmark',
|
|
4577
4577
|
Before = 'before',
|
|
4578
4578
|
After = 'after',
|
|
4579
|
+
ExpandIcon = 'expand-icon',
|
|
4579
4580
|
PickerIcon = 'picker-icon',
|
|
4580
4581
|
InterestHint = 'interest-hint',
|
|
4581
4582
|
Marker = 'marker',
|
|
@@ -4789,7 +4790,7 @@ export namespace DOM {
|
|
|
4789
4790
|
isScrollable?: boolean;
|
|
4790
4791
|
affectedByStartingStyles?: boolean;
|
|
4791
4792
|
adoptedStyleSheets?: StyleSheetId[];
|
|
4792
|
-
|
|
4793
|
+
adProvenance?: Network.AdProvenance;
|
|
4793
4794
|
}
|
|
4794
4795
|
|
|
4795
4796
|
/**
|
|
@@ -5856,9 +5857,9 @@ export namespace DOM {
|
|
|
5856
5857
|
*/
|
|
5857
5858
|
nodeId: DOM.NodeId;
|
|
5858
5859
|
/**
|
|
5859
|
-
*
|
|
5860
|
+
* The provenance of the ad related node, if it is ad related.
|
|
5860
5861
|
*/
|
|
5861
|
-
|
|
5862
|
+
adProvenance?: Network.AdProvenance;
|
|
5862
5863
|
}
|
|
5863
5864
|
|
|
5864
5865
|
/**
|
|
@@ -11504,6 +11505,25 @@ export namespace Network {
|
|
|
11504
11505
|
rootScriptFilterlistRule?: string;
|
|
11505
11506
|
}
|
|
11506
11507
|
|
|
11508
|
+
/**
|
|
11509
|
+
* Represents the provenance of an ad resource or element. Only one of
|
|
11510
|
+
* `filterlistRule` or `adScriptAncestry` can be set. If `filterlistRule`
|
|
11511
|
+
* is provided, the resource URL directly matches a filter list rule. If
|
|
11512
|
+
* `adScriptAncestry` is provided, an ad script initiated the resource fetch or
|
|
11513
|
+
* appended the element to the DOM. If neither is provided, the entity is
|
|
11514
|
+
* known to be an ad, but provenance tracking information is unavailable.
|
|
11515
|
+
*/
|
|
11516
|
+
export interface AdProvenance {
|
|
11517
|
+
/**
|
|
11518
|
+
* The filterlist rule that matched, if any.
|
|
11519
|
+
*/
|
|
11520
|
+
filterlistRule?: string;
|
|
11521
|
+
/**
|
|
11522
|
+
* The script ancestry that created the ad, if any.
|
|
11523
|
+
*/
|
|
11524
|
+
adScriptAncestry?: AdAncestry;
|
|
11525
|
+
}
|
|
11526
|
+
|
|
11507
11527
|
export const enum CrossOriginOpenerPolicyValue {
|
|
11508
11528
|
SameOrigin = 'SameOrigin',
|
|
11509
11529
|
SameOriginAllowPopups = 'SameOriginAllowPopups',
|
|
@@ -20302,6 +20322,7 @@ export namespace WebAuthn {
|
|
|
20302
20322
|
export const enum Ctap2Version {
|
|
20303
20323
|
Ctap2_0 = 'ctap2_0',
|
|
20304
20324
|
Ctap2_1 = 'ctap2_1',
|
|
20325
|
+
Ctap2_2 = 'ctap2_2',
|
|
20305
20326
|
}
|
|
20306
20327
|
|
|
20307
20328
|
export const enum AuthenticatorTransport {
|
|
@@ -20351,6 +20372,18 @@ export namespace WebAuthn {
|
|
|
20351
20372
|
* Defaults to false.
|
|
20352
20373
|
*/
|
|
20353
20374
|
hasPrf?: boolean;
|
|
20375
|
+
/**
|
|
20376
|
+
* If set to true, the authenticator will support the hmac-secret extension.
|
|
20377
|
+
* https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-20210615.html#sctn-hmac-secret-extension
|
|
20378
|
+
* Defaults to false.
|
|
20379
|
+
*/
|
|
20380
|
+
hasHmacSecret?: boolean;
|
|
20381
|
+
/**
|
|
20382
|
+
* If set to true, the authenticator will support the hmac-secret-mc extension.
|
|
20383
|
+
* https://fidoalliance.org/specs/fido-v2.2-rd-20241003/fido-client-to-authenticator-protocol-v2.2-rd-20241003.html#sctn-hmac-secret-make-cred-extension
|
|
20384
|
+
* Defaults to false.
|
|
20385
|
+
*/
|
|
20386
|
+
hasHmacSecretMc?: boolean;
|
|
20354
20387
|
/**
|
|
20355
20388
|
* If set to true, tests of user presence will succeed immediately.
|
|
20356
20389
|
* Otherwise, they will not be resolved. Defaults to true.
|