chrome-ai-bridge 1.0.2 → 1.0.4
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/build/node_modules/chrome-devtools-frontend/front_end/core/common/Base64.js +20 -2
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Gzip.js +11 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Object.js +6 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ParsedURL.js +3 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ResourceType.js +6 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Settings.js +18 -8
- package/build/node_modules/chrome-devtools-frontend/front_end/core/host/InspectorFrontendHostStub.js +3 -3
- package/build/node_modules/chrome-devtools-frontend/front_end/core/host/ResourceLoader.js +1 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/core/host/UserMetrics.js +17 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/ArrayUtilities.js +10 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/StringUtilities.js +63 -12
- package/build/node_modules/chrome-devtools-frontend/front_end/core/protocol_client/CDPConnection.js +1 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/protocol_client/InspectorBackend.js +4 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSMatchedStyles.js +44 -9
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSMetadata.js +6 -6
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSModel.js +1 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/DOMModel.js +169 -12
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/DebuggerModel.js +2 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/IsolateManager.js +6 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/NetworkManager.js +18 -4
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/NetworkRequest.js +7 -21
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/OverlayModel.js +17 -5
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/RehydratingConnection.js +5 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ResourceTreeModel.js +8 -5
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMap.js +14 -2
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMapManager.js +1 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMapScopesInfo.js +11 -4
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/Target.js +3 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/generated/ARIAProperties.js +1 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/generated/Deprecation.js +1 -16
- package/build/node_modules/chrome-devtools-frontend/front_end/generated/InspectorBackendCommands.js +35 -14
- package/build/node_modules/chrome-devtools-frontend/front_end/generated/SupportedCSSProperties.js +197 -101
- package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/NetworkRequestFormatter.js +2 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.js +10 -16
- package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.js +97 -26
- package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/performance/AICallTree.js +35 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/CompilerScriptMapping.js +5 -3
- package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/DebuggerWorkspaceBinding.js +7 -3
- package/build/node_modules/chrome-devtools-frontend/front_end/models/emulation/DeviceModeModel.js +1 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/models/emulation/EmulatedDevices.js +14 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/formatter/FormatterWorkerPool.js +8 -5
- package/build/node_modules/chrome-devtools-frontend/front_end/models/stack_trace/StackTraceImpl.js +70 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/models/stack_trace/StackTraceModel.js +82 -30
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/EventsSerializer.js +7 -2
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/LanternComputationData.js +2 -2
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/Processor.js +18 -19
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/Styles.js +12 -4
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/Initiators.js +46 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/TraceTree.js +4 -3
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/extras.js +1 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/LargestImagePaintHandler.js +2 -2
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/LayoutShiftsHandler.js +1 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/MetaHandler.js +6 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/NetworkRequestsHandler.js +10 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/PageLoadMetricsHandler.js +44 -27
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/Timing.js +9 -2
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Common.js +1 -6
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/LCPBreakdown.js +2 -2
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/LCPDiscovery.js +2 -4
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/NetworkDependencyTree.js +3 -2
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/RenderBlocking.js +1 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/TraceEvents.js +30 -11
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/decode/decode.js +28 -13
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/encode/encoder.js +1 -1
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/scopes.js +4 -0
- package/build/src/tools/chatgpt-web.js +102 -64
- package/build/src/tools/gemini-web.js +43 -16
- package/build/src/tools/pages.js +0 -1
- package/package.json +1 -1
|
@@ -8,7 +8,7 @@ import { CSSModel } from './CSSModel.js';
|
|
|
8
8
|
import { FrameManager } from './FrameManager.js';
|
|
9
9
|
import { OverlayModel } from './OverlayModel.js';
|
|
10
10
|
import { RemoteObject } from './RemoteObject.js';
|
|
11
|
-
import { ResourceTreeModel } from './ResourceTreeModel.js';
|
|
11
|
+
import { Events as ResourceTreeModelEvents, ResourceTreeModel } from './ResourceTreeModel.js';
|
|
12
12
|
import { RuntimeModel } from './RuntimeModel.js';
|
|
13
13
|
import { SDKModel } from './SDKModel.js';
|
|
14
14
|
import { TargetManager } from './TargetManager.js';
|
|
@@ -69,7 +69,16 @@ export const ARIA_ATTRIBUTES = new Set([
|
|
|
69
69
|
'aria-valuenow',
|
|
70
70
|
'aria-valuetext',
|
|
71
71
|
]);
|
|
72
|
-
export
|
|
72
|
+
export var DOMNodeEvents;
|
|
73
|
+
(function (DOMNodeEvents) {
|
|
74
|
+
DOMNodeEvents["TOP_LAYER_INDEX_CHANGED"] = "TopLayerIndexChanged";
|
|
75
|
+
DOMNodeEvents["SCROLLABLE_FLAG_UPDATED"] = "ScrollableFlagUpdated";
|
|
76
|
+
DOMNodeEvents["GRID_OVERLAY_STATE_CHANGED"] = "GridOverlayStateChanged";
|
|
77
|
+
DOMNodeEvents["FLEX_CONTAINER_OVERLAY_STATE_CHANGED"] = "FlexContainerOverlayStateChanged";
|
|
78
|
+
DOMNodeEvents["SCROLL_SNAP_OVERLAY_STATE_CHANGED"] = "ScrollSnapOverlayStateChanged";
|
|
79
|
+
DOMNodeEvents["CONTAINER_QUERY_OVERLAY_STATE_CHANGED"] = "ContainerQueryOverlayStateChanged";
|
|
80
|
+
})(DOMNodeEvents || (DOMNodeEvents = {}));
|
|
81
|
+
export class DOMNode extends Common.ObjectWrapper.ObjectWrapper {
|
|
73
82
|
#domModel;
|
|
74
83
|
#agent;
|
|
75
84
|
ownerDocument;
|
|
@@ -122,7 +131,14 @@ export class DOMNode {
|
|
|
122
131
|
*/
|
|
123
132
|
detached = false;
|
|
124
133
|
#retainedNodes;
|
|
134
|
+
#adoptedStyleSheets = [];
|
|
135
|
+
/**
|
|
136
|
+
* 1-based index of the node in the top layer. Only set
|
|
137
|
+
* for non-backdrop nodes.
|
|
138
|
+
*/
|
|
139
|
+
#topLayerIndex = -1;
|
|
125
140
|
constructor(domModel) {
|
|
141
|
+
super();
|
|
126
142
|
this.#domModel = domModel;
|
|
127
143
|
this.#agent = this.#domModel.getAgent();
|
|
128
144
|
}
|
|
@@ -137,6 +153,7 @@ export class DOMNode {
|
|
|
137
153
|
this.#isInShadowTree = isInShadowTree;
|
|
138
154
|
this.id = payload.nodeId;
|
|
139
155
|
this.#backendNodeId = payload.backendNodeId;
|
|
156
|
+
this.#frameOwnerFrameId = payload.frameId || null;
|
|
140
157
|
this.#domModel.registerNode(this);
|
|
141
158
|
this.#nodeType = payload.nodeType;
|
|
142
159
|
this.#nodeName = payload.nodeName;
|
|
@@ -145,7 +162,6 @@ export class DOMNode {
|
|
|
145
162
|
this.#pseudoType = payload.pseudoType;
|
|
146
163
|
this.#pseudoIdentifier = payload.pseudoIdentifier;
|
|
147
164
|
this.#shadowRootType = payload.shadowRootType;
|
|
148
|
-
this.#frameOwnerFrameId = payload.frameId || null;
|
|
149
165
|
this.#xmlVersion = payload.xmlVersion;
|
|
150
166
|
this.#isSVGNode = Boolean(payload.isSVG);
|
|
151
167
|
this.#isScrollable = Boolean(payload.isScrollable);
|
|
@@ -157,6 +173,9 @@ export class DOMNode {
|
|
|
157
173
|
if (payload.attributes) {
|
|
158
174
|
this.setAttributesPayload(payload.attributes);
|
|
159
175
|
}
|
|
176
|
+
if (payload.adoptedStyleSheets) {
|
|
177
|
+
this.#adoptedStyleSheets = this.toAdoptedStyleSheets(payload.adoptedStyleSheets);
|
|
178
|
+
}
|
|
160
179
|
this.childNodeCountInternal = payload.childNodeCount || 0;
|
|
161
180
|
if (payload.shadowRoots) {
|
|
162
181
|
for (let i = 0; i < payload.shadowRoots.length; ++i) {
|
|
@@ -223,6 +242,16 @@ export class DOMNode {
|
|
|
223
242
|
const childModel = frame.resourceTreeModel()?.target().model(DOMModel);
|
|
224
243
|
return await (childModel?.requestDocument() || null);
|
|
225
244
|
}
|
|
245
|
+
setTopLayerIndex(idx) {
|
|
246
|
+
const oldIndex = this.#topLayerIndex;
|
|
247
|
+
this.#topLayerIndex = idx;
|
|
248
|
+
if (oldIndex !== idx) {
|
|
249
|
+
this.dispatchEventToListeners(DOMNodeEvents.TOP_LAYER_INDEX_CHANGED);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
topLayerIndex() {
|
|
253
|
+
return this.#topLayerIndex;
|
|
254
|
+
}
|
|
226
255
|
isAdFrameNode() {
|
|
227
256
|
if (this.isIframe() && this.#frameOwnerFrameId) {
|
|
228
257
|
const frame = FrameManager.instance().getFrame(this.#frameOwnerFrameId);
|
|
@@ -233,6 +262,12 @@ export class DOMNode {
|
|
|
233
262
|
}
|
|
234
263
|
return false;
|
|
235
264
|
}
|
|
265
|
+
isRootNode() {
|
|
266
|
+
if (this.nodeType() === Node.ELEMENT_NODE && this.nodeName() === 'HTML') {
|
|
267
|
+
return true;
|
|
268
|
+
}
|
|
269
|
+
return false;
|
|
270
|
+
}
|
|
236
271
|
isSVGNode() {
|
|
237
272
|
return this.#isSVGNode;
|
|
238
273
|
}
|
|
@@ -283,6 +318,11 @@ export class DOMNode {
|
|
|
283
318
|
}
|
|
284
319
|
setIsScrollable(isScrollable) {
|
|
285
320
|
this.#isScrollable = isScrollable;
|
|
321
|
+
this.dispatchEventToListeners(DOMNodeEvents.SCROLLABLE_FLAG_UPDATED);
|
|
322
|
+
if (this.nodeName() === '#document') {
|
|
323
|
+
// We show the scroll badge of the document on the <html> element.
|
|
324
|
+
this.ownerDocument?.documentElement?.setIsScrollable(isScrollable);
|
|
325
|
+
}
|
|
286
326
|
}
|
|
287
327
|
setAffectedByStartingStyles(affectedByStartingStyles) {
|
|
288
328
|
this.#affectedByStartingStyles = affectedByStartingStyles;
|
|
@@ -684,6 +724,16 @@ export class DOMNode {
|
|
|
684
724
|
}
|
|
685
725
|
}
|
|
686
726
|
}
|
|
727
|
+
toAdoptedStyleSheets(ids) {
|
|
728
|
+
return ids.map(id => (new AdoptedStyleSheet(id, this)));
|
|
729
|
+
}
|
|
730
|
+
setAdoptedStyleSheets(ids) {
|
|
731
|
+
this.#adoptedStyleSheets = this.toAdoptedStyleSheets(ids);
|
|
732
|
+
this.#domModel.dispatchEventToListeners(Events.AdoptedStyleSheetsModified, this);
|
|
733
|
+
}
|
|
734
|
+
get adoptedStyleSheetsForNode() {
|
|
735
|
+
return this.#adoptedStyleSheets;
|
|
736
|
+
}
|
|
687
737
|
setDistributedNodePayloads(payloads) {
|
|
688
738
|
this.#distributedNodes = [];
|
|
689
739
|
for (const payload of payloads) {
|
|
@@ -987,10 +1037,14 @@ export class DOMNodeShortcut {
|
|
|
987
1037
|
nodeType;
|
|
988
1038
|
nodeName;
|
|
989
1039
|
deferredNode;
|
|
990
|
-
|
|
1040
|
+
// Shortctus to elements that children of the element this shortcut is for.
|
|
1041
|
+
// Currently, use for backdrop elements in the top layer.«
|
|
1042
|
+
childShortcuts = [];
|
|
1043
|
+
constructor(target, backendNodeId, nodeType, nodeName, childShortcuts = []) {
|
|
991
1044
|
this.nodeType = nodeType;
|
|
992
1045
|
this.nodeName = nodeName;
|
|
993
1046
|
this.deferredNode = new DeferredDOMNode(target, backendNodeId);
|
|
1047
|
+
this.childShortcuts = childShortcuts;
|
|
994
1048
|
}
|
|
995
1049
|
}
|
|
996
1050
|
export class DOMDocument extends DOMNode {
|
|
@@ -1007,9 +1061,21 @@ export class DOMDocument extends DOMNode {
|
|
|
1007
1061
|
this.baseURL = (payload.baseURL || '');
|
|
1008
1062
|
}
|
|
1009
1063
|
}
|
|
1064
|
+
export class AdoptedStyleSheet {
|
|
1065
|
+
id;
|
|
1066
|
+
parent;
|
|
1067
|
+
constructor(id, parent) {
|
|
1068
|
+
this.id = id;
|
|
1069
|
+
this.parent = parent;
|
|
1070
|
+
}
|
|
1071
|
+
get cssModel() {
|
|
1072
|
+
return this.parent.domModel().cssModel();
|
|
1073
|
+
}
|
|
1074
|
+
}
|
|
1010
1075
|
export class DOMModel extends SDKModel {
|
|
1011
1076
|
agent;
|
|
1012
1077
|
idToDOMNode = new Map();
|
|
1078
|
+
frameIdToOwnerNode = new Map();
|
|
1013
1079
|
#document = null;
|
|
1014
1080
|
#attributeLoadNodeIds = new Set();
|
|
1015
1081
|
runtimeModelInternal;
|
|
@@ -1018,11 +1084,16 @@ export class DOMModel extends SDKModel {
|
|
|
1018
1084
|
#frameOwnerNode;
|
|
1019
1085
|
#loadNodeAttributesTimeout;
|
|
1020
1086
|
#searchId;
|
|
1087
|
+
#topLayerThrottler = new Common.Throttler.Throttler(100);
|
|
1088
|
+
#topLayerNodes = [];
|
|
1089
|
+
#resourceTreeModel = null;
|
|
1021
1090
|
constructor(target) {
|
|
1022
1091
|
super(target);
|
|
1023
1092
|
this.agent = target.domAgent();
|
|
1024
1093
|
target.registerDOMDispatcher(new DOMDispatcher(this));
|
|
1025
1094
|
this.runtimeModelInternal = target.model(RuntimeModel);
|
|
1095
|
+
this.#resourceTreeModel = target.model(ResourceTreeModel);
|
|
1096
|
+
this.#resourceTreeModel?.addEventListener(ResourceTreeModelEvents.DocumentOpened, this.onDocumentOpened, this);
|
|
1026
1097
|
if (!target.suspended()) {
|
|
1027
1098
|
void this.agent.invoke_enable({});
|
|
1028
1099
|
}
|
|
@@ -1057,6 +1128,18 @@ export class DOMModel extends SDKModel {
|
|
|
1057
1128
|
this.dispatchEventToListeners(Events.DOMMutated, node);
|
|
1058
1129
|
}
|
|
1059
1130
|
}
|
|
1131
|
+
onDocumentOpened(event) {
|
|
1132
|
+
const frame = event.data;
|
|
1133
|
+
const node = this.frameIdToOwnerNode.get(frame.id);
|
|
1134
|
+
if (node) {
|
|
1135
|
+
const contentDocument = node.contentDocument();
|
|
1136
|
+
if (contentDocument && contentDocument.documentURL !== frame.url) {
|
|
1137
|
+
contentDocument.documentURL = frame.url;
|
|
1138
|
+
contentDocument.baseURL = frame.url;
|
|
1139
|
+
this.dispatchEventToListeners(Events.DocumentURLChanged, contentDocument);
|
|
1140
|
+
}
|
|
1141
|
+
}
|
|
1142
|
+
}
|
|
1060
1143
|
requestDocument() {
|
|
1061
1144
|
if (this.#document) {
|
|
1062
1145
|
return Promise.resolve(this.#document);
|
|
@@ -1215,6 +1298,7 @@ export class DOMModel extends SDKModel {
|
|
|
1215
1298
|
}
|
|
1216
1299
|
setDocument(payload) {
|
|
1217
1300
|
this.idToDOMNode = new Map();
|
|
1301
|
+
this.frameIdToOwnerNode = new Map();
|
|
1218
1302
|
if (payload && 'nodeId' in payload) {
|
|
1219
1303
|
this.#document = new DOMDocument(this, payload);
|
|
1220
1304
|
}
|
|
@@ -1331,13 +1415,19 @@ export class DOMModel extends SDKModel {
|
|
|
1331
1415
|
this.dispatchEventToListeners(Events.NodeInserted, node);
|
|
1332
1416
|
this.scheduleMutationEvent(node);
|
|
1333
1417
|
}
|
|
1418
|
+
adoptedStyleSheetsModified(parentId, styleSheets) {
|
|
1419
|
+
const parent = this.idToDOMNode.get(parentId);
|
|
1420
|
+
if (!parent) {
|
|
1421
|
+
return;
|
|
1422
|
+
}
|
|
1423
|
+
parent.setAdoptedStyleSheets(styleSheets);
|
|
1424
|
+
}
|
|
1334
1425
|
scrollableFlagUpdated(nodeId, isScrollable) {
|
|
1335
1426
|
const node = this.nodeForId(nodeId);
|
|
1336
1427
|
if (!node || node.isScrollable() === isScrollable) {
|
|
1337
1428
|
return;
|
|
1338
1429
|
}
|
|
1339
1430
|
node.setIsScrollable(isScrollable);
|
|
1340
|
-
this.dispatchEventToListeners(Events.ScrollableFlagUpdated, { node });
|
|
1341
1431
|
}
|
|
1342
1432
|
affectedByStartingStylesFlagUpdated(nodeId, affectedByStartingStyles) {
|
|
1343
1433
|
const node = this.nodeForId(nodeId);
|
|
@@ -1347,9 +1437,6 @@ export class DOMModel extends SDKModel {
|
|
|
1347
1437
|
node.setAffectedByStartingStyles(affectedByStartingStyles);
|
|
1348
1438
|
this.dispatchEventToListeners(Events.AffectedByStartingStylesFlagUpdated, { node });
|
|
1349
1439
|
}
|
|
1350
|
-
topLayerElementsUpdated() {
|
|
1351
|
-
this.dispatchEventToListeners(Events.TopLayerElementsChanged);
|
|
1352
|
-
}
|
|
1353
1440
|
pseudoElementRemoved(parentId, pseudoElementId) {
|
|
1354
1441
|
const parent = this.idToDOMNode.get(parentId);
|
|
1355
1442
|
if (!parent) {
|
|
@@ -1375,6 +1462,10 @@ export class DOMModel extends SDKModel {
|
|
|
1375
1462
|
}
|
|
1376
1463
|
unbind(node) {
|
|
1377
1464
|
this.idToDOMNode.delete(node.id);
|
|
1465
|
+
const frameId = node.frameOwnerFrameId();
|
|
1466
|
+
if (frameId) {
|
|
1467
|
+
this.frameIdToOwnerNode.delete(frameId);
|
|
1468
|
+
}
|
|
1378
1469
|
const children = node.children();
|
|
1379
1470
|
for (let i = 0; children && i < children.length; ++i) {
|
|
1380
1471
|
this.unbind(children[i]);
|
|
@@ -1437,6 +1528,66 @@ export class DOMModel extends SDKModel {
|
|
|
1437
1528
|
getTopLayerElements() {
|
|
1438
1529
|
return this.agent.invoke_getTopLayerElements().then(({ nodeIds }) => nodeIds);
|
|
1439
1530
|
}
|
|
1531
|
+
topLayerElementsUpdated() {
|
|
1532
|
+
void this.#topLayerThrottler.schedule(async () => {
|
|
1533
|
+
// This returns top layer nodes for all local frames.
|
|
1534
|
+
const result = await this.agent.invoke_getTopLayerElements();
|
|
1535
|
+
if (result.getError()) {
|
|
1536
|
+
return;
|
|
1537
|
+
}
|
|
1538
|
+
// Re-set indexes as we re-create top layer nodes list.
|
|
1539
|
+
const previousDocs = new Set();
|
|
1540
|
+
for (const node of this.#topLayerNodes) {
|
|
1541
|
+
node.setTopLayerIndex(-1);
|
|
1542
|
+
if (node.ownerDocument) {
|
|
1543
|
+
previousDocs.add(node.ownerDocument);
|
|
1544
|
+
}
|
|
1545
|
+
}
|
|
1546
|
+
this.#topLayerNodes.splice(0);
|
|
1547
|
+
const nodes = result.nodeIds.map(id => this.idToDOMNode.get(id)).filter((node) => Boolean(node));
|
|
1548
|
+
const nodesByDocument = new Map();
|
|
1549
|
+
for (const node of nodes) {
|
|
1550
|
+
const document = node.ownerDocument;
|
|
1551
|
+
if (!document) {
|
|
1552
|
+
continue;
|
|
1553
|
+
}
|
|
1554
|
+
if (!nodesByDocument.has(document)) {
|
|
1555
|
+
nodesByDocument.set(document, []);
|
|
1556
|
+
}
|
|
1557
|
+
nodesByDocument.get(document)?.push(node);
|
|
1558
|
+
}
|
|
1559
|
+
for (const [document, nodes] of nodesByDocument) {
|
|
1560
|
+
let topLayerIdx = 1;
|
|
1561
|
+
const documentShortcuts = [];
|
|
1562
|
+
for (const [idx, node] of nodes.entries()) {
|
|
1563
|
+
if (node.nodeName() === '::backdrop') {
|
|
1564
|
+
continue;
|
|
1565
|
+
}
|
|
1566
|
+
const childShortcuts = [];
|
|
1567
|
+
const previousNode = result.nodeIds[idx - 1] ? this.idToDOMNode.get(result.nodeIds[idx - 1]) : null;
|
|
1568
|
+
if (previousNode && previousNode.nodeName() === '::backdrop') {
|
|
1569
|
+
childShortcuts.push(new DOMNodeShortcut(this.target(), previousNode.backendNodeId(), 0, previousNode.nodeName()));
|
|
1570
|
+
}
|
|
1571
|
+
const shortcut = new DOMNodeShortcut(this.target(), node.backendNodeId(), 0, node.nodeName(), childShortcuts);
|
|
1572
|
+
node.setTopLayerIndex(topLayerIdx++);
|
|
1573
|
+
this.#topLayerNodes.push(node);
|
|
1574
|
+
documentShortcuts.push(shortcut);
|
|
1575
|
+
previousDocs.delete(document);
|
|
1576
|
+
}
|
|
1577
|
+
this.dispatchEventToListeners(Events.TopLayerElementsChanged, {
|
|
1578
|
+
document,
|
|
1579
|
+
documentShortcuts,
|
|
1580
|
+
});
|
|
1581
|
+
}
|
|
1582
|
+
// Emit empty events for documents that are no longer in the top layer.
|
|
1583
|
+
for (const document of previousDocs) {
|
|
1584
|
+
this.dispatchEventToListeners(Events.TopLayerElementsChanged, {
|
|
1585
|
+
document,
|
|
1586
|
+
documentShortcuts: [],
|
|
1587
|
+
});
|
|
1588
|
+
}
|
|
1589
|
+
});
|
|
1590
|
+
}
|
|
1440
1591
|
getDetachedDOMNodes() {
|
|
1441
1592
|
return this.agent.invoke_getDetachedDomNodes().then(({ detachedNodes }) => detachedNodes);
|
|
1442
1593
|
}
|
|
@@ -1470,6 +1621,7 @@ export class DOMModel extends SDKModel {
|
|
|
1470
1621
|
await this.agent.invoke_enable({});
|
|
1471
1622
|
}
|
|
1472
1623
|
dispose() {
|
|
1624
|
+
this.#resourceTreeModel?.removeEventListener(ResourceTreeModelEvents.DocumentOpened, this.onDocumentOpened, this);
|
|
1473
1625
|
DOMModelUndoStack.instance().dispose(this);
|
|
1474
1626
|
}
|
|
1475
1627
|
parentModel() {
|
|
@@ -1481,6 +1633,10 @@ export class DOMModel extends SDKModel {
|
|
|
1481
1633
|
}
|
|
1482
1634
|
registerNode(node) {
|
|
1483
1635
|
this.idToDOMNode.set(node.id, node);
|
|
1636
|
+
const frameId = node.frameOwnerFrameId();
|
|
1637
|
+
if (frameId) {
|
|
1638
|
+
this.frameIdToOwnerNode.set(frameId, node);
|
|
1639
|
+
}
|
|
1484
1640
|
}
|
|
1485
1641
|
}
|
|
1486
1642
|
export var Events;
|
|
@@ -1490,6 +1646,7 @@ export var Events;
|
|
|
1490
1646
|
Events["AttrRemoved"] = "AttrRemoved";
|
|
1491
1647
|
Events["CharacterDataModified"] = "CharacterDataModified";
|
|
1492
1648
|
Events["DOMMutated"] = "DOMMutated";
|
|
1649
|
+
Events["DocumentURLChanged"] = "DocumentURLChanged";
|
|
1493
1650
|
Events["NodeInserted"] = "NodeInserted";
|
|
1494
1651
|
Events["NodeRemoved"] = "NodeRemoved";
|
|
1495
1652
|
Events["DocumentUpdated"] = "DocumentUpdated";
|
|
@@ -1497,8 +1654,8 @@ export var Events;
|
|
|
1497
1654
|
Events["DistributedNodesChanged"] = "DistributedNodesChanged";
|
|
1498
1655
|
Events["MarkersChanged"] = "MarkersChanged";
|
|
1499
1656
|
Events["TopLayerElementsChanged"] = "TopLayerElementsChanged";
|
|
1500
|
-
Events["ScrollableFlagUpdated"] = "ScrollableFlagUpdated";
|
|
1501
1657
|
Events["AffectedByStartingStylesFlagUpdated"] = "AffectedByStartingStylesFlagUpdated";
|
|
1658
|
+
Events["AdoptedStyleSheetsModified"] = "AdoptedStyleSheetsModified";
|
|
1502
1659
|
/* eslint-enable @typescript-eslint/naming-convention */
|
|
1503
1660
|
})(Events || (Events = {}));
|
|
1504
1661
|
class DOMDispatcher {
|
|
@@ -1506,9 +1663,6 @@ class DOMDispatcher {
|
|
|
1506
1663
|
constructor(domModel) {
|
|
1507
1664
|
this.#domModel = domModel;
|
|
1508
1665
|
}
|
|
1509
|
-
adoptedStyleSheetsModified(_params) {
|
|
1510
|
-
// TODO: implementation
|
|
1511
|
-
}
|
|
1512
1666
|
documentUpdated() {
|
|
1513
1667
|
this.#domModel.documentUpdated();
|
|
1514
1668
|
}
|
|
@@ -1518,6 +1672,9 @@ class DOMDispatcher {
|
|
|
1518
1672
|
attributeRemoved({ nodeId, name }) {
|
|
1519
1673
|
this.#domModel.attributeRemoved(nodeId, name);
|
|
1520
1674
|
}
|
|
1675
|
+
adoptedStyleSheetsModified({ nodeId, adoptedStyleSheets }) {
|
|
1676
|
+
this.#domModel.adoptedStyleSheetsModified(nodeId, adoptedStyleSheets);
|
|
1677
|
+
}
|
|
1521
1678
|
inlineStyleInvalidated({ nodeIds }) {
|
|
1522
1679
|
this.#domModel.inlineStyleInvalidated(nodeIds);
|
|
1523
1680
|
}
|
|
@@ -785,7 +785,8 @@ export class DebuggerModel extends SDKModel {
|
|
|
785
785
|
*/
|
|
786
786
|
async *iterateAsyncParents(stackTraceOrPausedDetails) {
|
|
787
787
|
// We make `DebuggerPausedDetails` look like a stack trace. We are only interested in `parent` and `parentId` in any case.
|
|
788
|
-
|
|
788
|
+
const isPausedDetails = (details) => !('parent' in details) && !('parentId' in details);
|
|
789
|
+
let stackTrace = isPausedDetails(stackTraceOrPausedDetails) ?
|
|
789
790
|
{
|
|
790
791
|
callFrames: [],
|
|
791
792
|
parent: stackTraceOrPausedDetails.asyncStackTrace,
|
|
@@ -35,6 +35,12 @@ export class IsolateManager extends Common.ObjectWrapper.ObjectWrapper {
|
|
|
35
35
|
observer.isolateAdded(isolate);
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
|
+
unobserveIsolates(observer) {
|
|
39
|
+
this.#observers.delete(observer);
|
|
40
|
+
if (!this.#observers.size) {
|
|
41
|
+
this.#pollId++;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
38
44
|
modelAdded(model) {
|
|
39
45
|
void this.#modelAdded(model);
|
|
40
46
|
}
|
|
@@ -330,6 +330,9 @@ export class NetworkManager extends SDKModel {
|
|
|
330
330
|
async enableReportingApi(enable = true) {
|
|
331
331
|
return await this.#networkAgent.invoke_enableReportingApi({ enable });
|
|
332
332
|
}
|
|
333
|
+
async enableDeviceBoundSessions(enable = true) {
|
|
334
|
+
return await this.#networkAgent.invoke_enableDeviceBoundSessions({ enable });
|
|
335
|
+
}
|
|
333
336
|
async loadNetworkResource(frameId, url, options) {
|
|
334
337
|
const result = await this.#networkAgent.invoke_loadNetworkResource({ frameId: frameId ?? undefined, url, options });
|
|
335
338
|
if (result.getError()) {
|
|
@@ -355,6 +358,8 @@ export var Events;
|
|
|
355
358
|
Events["ReportingApiReportAdded"] = "ReportingApiReportAdded";
|
|
356
359
|
Events["ReportingApiReportUpdated"] = "ReportingApiReportUpdated";
|
|
357
360
|
Events["ReportingApiEndpointsChangedForOrigin"] = "ReportingApiEndpointsChangedForOrigin";
|
|
361
|
+
Events["DeviceBoundSessionsAdded"] = "DeviceBoundSessionsAdded";
|
|
362
|
+
Events["DeviceBoundSessionEventOccurred"] = "DeviceBoundSessionEventOccurred";
|
|
358
363
|
/* eslint-enable @typescript-eslint/naming-convention */
|
|
359
364
|
})(Events || (Events = {}));
|
|
360
365
|
/**
|
|
@@ -612,7 +617,7 @@ export class NetworkDispatcher {
|
|
|
612
617
|
this.getExtraInfoBuilder(requestId).addHasExtraInfo(info.hasExtraInfo);
|
|
613
618
|
this.#manager.dispatchEventToListeners(Events.ResponseReceived, { request: networkRequest, response: info.outerResponse });
|
|
614
619
|
}
|
|
615
|
-
requestWillBeSent({ requestId, loaderId, documentURL, request, timestamp, wallTime, initiator, redirectHasExtraInfo, redirectResponse, type, frameId, hasUserGesture, }) {
|
|
620
|
+
requestWillBeSent({ requestId, loaderId, documentURL, request, timestamp, wallTime, initiator, redirectHasExtraInfo, redirectResponse, type, frameId, hasUserGesture, renderBlockingBehavior, }) {
|
|
616
621
|
let networkRequest = this.#requestsById.get(requestId);
|
|
617
622
|
if (networkRequest) {
|
|
618
623
|
// FIXME: move this check to the backend.
|
|
@@ -639,6 +644,9 @@ export class NetworkDispatcher {
|
|
|
639
644
|
}
|
|
640
645
|
else {
|
|
641
646
|
networkRequest = NetworkRequest.create(requestId, request.url, documentURL, frameId ?? null, loaderId, initiator, hasUserGesture);
|
|
647
|
+
if (renderBlockingBehavior) {
|
|
648
|
+
networkRequest.setRenderBlockingBehavior(renderBlockingBehavior);
|
|
649
|
+
}
|
|
642
650
|
requestToManagerMap.set(networkRequest, this.#manager);
|
|
643
651
|
}
|
|
644
652
|
networkRequest.hasNetworkData = true;
|
|
@@ -1268,6 +1276,12 @@ export class NetworkDispatcher {
|
|
|
1268
1276
|
reportingApiEndpointsChangedForOrigin(data) {
|
|
1269
1277
|
this.#manager.dispatchEventToListeners(Events.ReportingApiEndpointsChangedForOrigin, data);
|
|
1270
1278
|
}
|
|
1279
|
+
deviceBoundSessionsAdded(_params) {
|
|
1280
|
+
this.#manager.dispatchEventToListeners(Events.DeviceBoundSessionsAdded, _params.sessions);
|
|
1281
|
+
}
|
|
1282
|
+
deviceBoundSessionEventOccurred(_params) {
|
|
1283
|
+
this.#manager.dispatchEventToListeners(Events.DeviceBoundSessionEventOccurred, _params);
|
|
1284
|
+
}
|
|
1271
1285
|
policyUpdated() {
|
|
1272
1286
|
}
|
|
1273
1287
|
/**
|
|
@@ -1536,9 +1550,9 @@ export class RequestConditions extends Common.ObjectWrapper.ObjectWrapper {
|
|
|
1536
1550
|
matchedNetworkConditions.push({ ruleIds, urlPattern, conditions });
|
|
1537
1551
|
}
|
|
1538
1552
|
}
|
|
1539
|
-
|
|
1540
|
-
|
|
1541
|
-
}
|
|
1553
|
+
}
|
|
1554
|
+
if (globalConditions) {
|
|
1555
|
+
matchedNetworkConditions.push({ conditions: globalConditions });
|
|
1542
1556
|
}
|
|
1543
1557
|
const promises = [];
|
|
1544
1558
|
for (const agent of agents) {
|
|
@@ -70,10 +70,6 @@ const UIStrings = {
|
|
|
70
70
|
* @description Tooltip to explain why a cookie was blocked due to Schemeful Same-Site
|
|
71
71
|
*/
|
|
72
72
|
schemefulSameSiteUnspecifiedTreatedAsLax: 'This cookie didn\'t specify a "`SameSite`" attribute when it was stored, was defaulted to "`SameSite=Lax"`, and was blocked because the request was cross-site and was not initiated by a top-level navigation. This request is considered cross-site because the URL has a different scheme than the current site.',
|
|
73
|
-
/**
|
|
74
|
-
* @description Tooltip to explain why a cookie was blocked due to SameParty
|
|
75
|
-
*/
|
|
76
|
-
samePartyFromCrossPartyContext: 'This cookie was blocked because it had the "`SameParty`" attribute but the request was cross-party. The request was considered cross-party because the domain of the resource\'s URL and the domains of the resource\'s enclosing frames/documents are neither owners nor members in the same First-Party Set.',
|
|
77
73
|
/**
|
|
78
74
|
* @description Tooltip to explain why a cookie was blocked due to exceeding the maximum size
|
|
79
75
|
*/
|
|
@@ -111,14 +107,6 @@ const UIStrings = {
|
|
|
111
107
|
* @description Tooltip to explain why a cookie was blocked due to Schemeful Same-Site
|
|
112
108
|
*/
|
|
113
109
|
thisSetcookieDidntSpecifyASamesite: 'This `Set-Cookie` header didn\'t specify a "`SameSite`" attribute, was defaulted to "`SameSite=Lax"`, and was blocked because it came from a cross-site response which was not the response to a top-level navigation. This response is considered cross-site because the URL has a different scheme than the current site.',
|
|
114
|
-
/**
|
|
115
|
-
* @description Tooltip to explain why a cookie was blocked due to SameParty
|
|
116
|
-
*/
|
|
117
|
-
thisSetcookieWasBlockedBecauseItHadTheSameparty: 'This attempt to set a cookie via a `Set-Cookie` header was blocked because it had the "`SameParty`" attribute but the request was cross-party. The request was considered cross-party because the domain of the resource\'s URL and the domains of the resource\'s enclosing frames/documents are neither owners nor members in the same First-Party Set.',
|
|
118
|
-
/**
|
|
119
|
-
* @description Tooltip to explain why a cookie was blocked due to SameParty
|
|
120
|
-
*/
|
|
121
|
-
thisSetcookieWasBlockedBecauseItHadTheSamepartyAttribute: 'This attempt to set a cookie via a `Set-Cookie` header was blocked because it had the "`SameParty`" attribute but also had other conflicting attributes. Chrome requires cookies that use the "`SameParty`" attribute to also have the "Secure" attribute, and to not be restricted to "`SameSite=Strict`".',
|
|
122
110
|
/**
|
|
123
111
|
* @description Tooltip to explain why an attempt to set a cookie via a `Set-Cookie` HTTP header on a request's response was blocked.
|
|
124
112
|
*/
|
|
@@ -214,6 +202,7 @@ export class NetworkRequest extends Common.ObjectWrapper.ObjectWrapper {
|
|
|
214
202
|
#startTime = -1;
|
|
215
203
|
#endTime = -1;
|
|
216
204
|
#blockedReason = undefined;
|
|
205
|
+
#renderBlockingBehavior;
|
|
217
206
|
#corsErrorStatus = undefined;
|
|
218
207
|
statusCode = 0;
|
|
219
208
|
statusText = '';
|
|
@@ -533,6 +522,12 @@ export class NetworkRequest extends Common.ObjectWrapper.ObjectWrapper {
|
|
|
533
522
|
setBlockedReason(reason) {
|
|
534
523
|
this.#blockedReason = reason;
|
|
535
524
|
}
|
|
525
|
+
setRenderBlockingBehavior(renderBlocking) {
|
|
526
|
+
this.#renderBlockingBehavior = renderBlocking;
|
|
527
|
+
}
|
|
528
|
+
renderBlockingBehavior() {
|
|
529
|
+
return this.#renderBlockingBehavior;
|
|
530
|
+
}
|
|
536
531
|
corsErrorStatus() {
|
|
537
532
|
return this.#corsErrorStatus;
|
|
538
533
|
}
|
|
@@ -1521,8 +1516,6 @@ export const cookieBlockedReasonToUiString = function (blockedReason) {
|
|
|
1521
1516
|
return i18nString(UIStrings.schemefulSameSiteLax);
|
|
1522
1517
|
case "SchemefulSameSiteUnspecifiedTreatedAsLax" /* Protocol.Network.CookieBlockedReason.SchemefulSameSiteUnspecifiedTreatedAsLax */:
|
|
1523
1518
|
return i18nString(UIStrings.schemefulSameSiteUnspecifiedTreatedAsLax);
|
|
1524
|
-
case "SamePartyFromCrossPartyContext" /* Protocol.Network.CookieBlockedReason.SamePartyFromCrossPartyContext */:
|
|
1525
|
-
return i18nString(UIStrings.samePartyFromCrossPartyContext);
|
|
1526
1519
|
case "NameValuePairExceedsMaxSize" /* Protocol.Network.CookieBlockedReason.NameValuePairExceedsMaxSize */:
|
|
1527
1520
|
return i18nString(UIStrings.nameValuePairExceedsMaxSize);
|
|
1528
1521
|
case "ThirdPartyPhaseout" /* Protocol.Network.CookieBlockedReason.ThirdPartyPhaseout */:
|
|
@@ -1566,10 +1559,6 @@ export const setCookieBlockedReasonToUiString = function (blockedReason) {
|
|
|
1566
1559
|
return i18nString(UIStrings.thisSetcookieWasBlockedBecauseItHadTheSamesiteStrictLax, { PH1: 'SameSite=Lax' });
|
|
1567
1560
|
case "SchemefulSameSiteUnspecifiedTreatedAsLax" /* Protocol.Network.SetCookieBlockedReason.SchemefulSameSiteUnspecifiedTreatedAsLax */:
|
|
1568
1561
|
return i18nString(UIStrings.thisSetcookieDidntSpecifyASamesite);
|
|
1569
|
-
case "SamePartyFromCrossPartyContext" /* Protocol.Network.SetCookieBlockedReason.SamePartyFromCrossPartyContext */:
|
|
1570
|
-
return i18nString(UIStrings.thisSetcookieWasBlockedBecauseItHadTheSameparty);
|
|
1571
|
-
case "SamePartyConflictsWithOtherAttributes" /* Protocol.Network.SetCookieBlockedReason.SamePartyConflictsWithOtherAttributes */:
|
|
1572
|
-
return i18nString(UIStrings.thisSetcookieWasBlockedBecauseItHadTheSamepartyAttribute);
|
|
1573
1562
|
case "NameValuePairExceedsMaxSize" /* Protocol.Network.SetCookieBlockedReason.NameValuePairExceedsMaxSize */:
|
|
1574
1563
|
return i18nString(UIStrings.thisSetcookieWasBlockedBecauseTheNameValuePairExceedsMaxSize);
|
|
1575
1564
|
case "DisallowedCharacter" /* Protocol.Network.SetCookieBlockedReason.DisallowedCharacter */:
|
|
@@ -1595,7 +1584,6 @@ export const cookieBlockedReasonToAttribute = function (blockedReason) {
|
|
|
1595
1584
|
case "SchemefulSameSiteLax" /* Protocol.Network.CookieBlockedReason.SchemefulSameSiteLax */:
|
|
1596
1585
|
case "SchemefulSameSiteUnspecifiedTreatedAsLax" /* Protocol.Network.CookieBlockedReason.SchemefulSameSiteUnspecifiedTreatedAsLax */:
|
|
1597
1586
|
return "same-site" /* Attribute.SAME_SITE */;
|
|
1598
|
-
case "SamePartyFromCrossPartyContext" /* Protocol.Network.CookieBlockedReason.SamePartyFromCrossPartyContext */:
|
|
1599
1587
|
case "NameValuePairExceedsMaxSize" /* Protocol.Network.CookieBlockedReason.NameValuePairExceedsMaxSize */:
|
|
1600
1588
|
case "UserPreferences" /* Protocol.Network.CookieBlockedReason.UserPreferences */:
|
|
1601
1589
|
case "ThirdPartyPhaseout" /* Protocol.Network.CookieBlockedReason.ThirdPartyPhaseout */:
|
|
@@ -1621,8 +1609,6 @@ export const setCookieBlockedReasonToAttribute = function (blockedReason) {
|
|
|
1621
1609
|
return "domain" /* Attribute.DOMAIN */;
|
|
1622
1610
|
case "InvalidPrefix" /* Protocol.Network.SetCookieBlockedReason.InvalidPrefix */:
|
|
1623
1611
|
return "name" /* Attribute.NAME */;
|
|
1624
|
-
case "SamePartyConflictsWithOtherAttributes" /* Protocol.Network.SetCookieBlockedReason.SamePartyConflictsWithOtherAttributes */:
|
|
1625
|
-
case "SamePartyFromCrossPartyContext" /* Protocol.Network.SetCookieBlockedReason.SamePartyFromCrossPartyContext */:
|
|
1626
1612
|
case "NameValuePairExceedsMaxSize" /* Protocol.Network.SetCookieBlockedReason.NameValuePairExceedsMaxSize */:
|
|
1627
1613
|
case "UserPreferences" /* Protocol.Network.SetCookieBlockedReason.UserPreferences */:
|
|
1628
1614
|
case "ThirdPartyPhaseout" /* Protocol.Network.SetCookieBlockedReason.ThirdPartyPhaseout */:
|
|
@@ -5,7 +5,7 @@ import * as Common from '../common/common.js';
|
|
|
5
5
|
import * as i18n from '../i18n/i18n.js';
|
|
6
6
|
import * as Root from '../root/root.js';
|
|
7
7
|
import { DebuggerModel, Events as DebuggerModelEvents } from './DebuggerModel.js';
|
|
8
|
-
import { DeferredDOMNode, DOMModel, Events as DOMModelEvents } from './DOMModel.js';
|
|
8
|
+
import { DeferredDOMNode, DOMModel, DOMNodeEvents, Events as DOMModelEvents } from './DOMModel.js';
|
|
9
9
|
import { OverlayPersistentHighlighter } from './OverlayPersistentHighlighter.js';
|
|
10
10
|
import { SDKModel } from './SDKModel.js';
|
|
11
11
|
import { TargetManager } from './TargetManager.js';
|
|
@@ -72,10 +72,22 @@ export class OverlayModel extends SDKModel {
|
|
|
72
72
|
void this.wireAgentToSettings();
|
|
73
73
|
}
|
|
74
74
|
this.#persistentHighlighter = new OverlayPersistentHighlighter(this, {
|
|
75
|
-
onGridOverlayStateChanged: ({ nodeId, enabled }) =>
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
75
|
+
onGridOverlayStateChanged: ({ nodeId, enabled }) => {
|
|
76
|
+
this.#domModel.nodeForId(nodeId)?.dispatchEventToListeners(DOMNodeEvents.GRID_OVERLAY_STATE_CHANGED, { enabled });
|
|
77
|
+
this.dispatchEventToListeners("PersistentGridOverlayStateChanged" /* Events.PERSISTENT_GRID_OVERLAY_STATE_CHANGED */, { nodeId, enabled });
|
|
78
|
+
},
|
|
79
|
+
onFlexOverlayStateChanged: ({ nodeId, enabled }) => {
|
|
80
|
+
this.#domModel.nodeForId(nodeId)?.dispatchEventToListeners(DOMNodeEvents.FLEX_CONTAINER_OVERLAY_STATE_CHANGED, { enabled });
|
|
81
|
+
this.dispatchEventToListeners("PersistentFlexContainerOverlayStateChanged" /* Events.PERSISTENT_FLEX_CONTAINER_OVERLAY_STATE_CHANGED */, { nodeId, enabled });
|
|
82
|
+
},
|
|
83
|
+
onContainerQueryOverlayStateChanged: ({ nodeId, enabled }) => {
|
|
84
|
+
this.#domModel.nodeForId(nodeId)?.dispatchEventToListeners(DOMNodeEvents.CONTAINER_QUERY_OVERLAY_STATE_CHANGED, { enabled });
|
|
85
|
+
this.dispatchEventToListeners("PersistentContainerQueryOverlayStateChanged" /* Events.PERSISTENT_CONTAINER_QUERY_OVERLAY_STATE_CHANGED */, { nodeId, enabled });
|
|
86
|
+
},
|
|
87
|
+
onScrollSnapOverlayStateChanged: ({ nodeId, enabled }) => {
|
|
88
|
+
this.#domModel.nodeForId(nodeId)?.dispatchEventToListeners(DOMNodeEvents.SCROLL_SNAP_OVERLAY_STATE_CHANGED, { enabled });
|
|
89
|
+
this.dispatchEventToListeners("PersistentScrollSnapOverlayStateChanged" /* Events.PERSISTENT_SCROLL_SNAP_OVERLAY_STATE_CHANGED */, { nodeId, enabled });
|
|
90
|
+
},
|
|
79
91
|
});
|
|
80
92
|
this.#domModel.addEventListener(DOMModelEvents.NodeRemoved, () => {
|
|
81
93
|
if (!this.#persistentHighlighter) {
|
package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/RehydratingConnection.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
// found in the LICENSE file.
|
|
4
4
|
import * as Common from '../common/common.js';
|
|
5
5
|
import * as i18n from '../i18n/i18n.js';
|
|
6
|
+
import * as ProtocolClient from '../protocol_client/protocol_client.js';
|
|
6
7
|
import * as Root from '../root/root.js';
|
|
7
8
|
import * as EnhancedTraces from './EnhancedTracesParser.js';
|
|
8
9
|
import { TraceObject } from './TraceObject.js';
|
|
@@ -261,7 +262,10 @@ export class RehydratingSession extends RehydratingSessionBase {
|
|
|
261
262
|
default:
|
|
262
263
|
this.sendMessageToFrontend({
|
|
263
264
|
id: data.id,
|
|
264
|
-
|
|
265
|
+
error: {
|
|
266
|
+
message: `Command ${data.method} not implemented in RehydratingSession.`,
|
|
267
|
+
code: ProtocolClient.CDPConnection.CDPErrorStatus.DEVTOOLS_STUB_ERROR,
|
|
268
|
+
}
|
|
265
269
|
});
|
|
266
270
|
break;
|
|
267
271
|
}
|
|
@@ -86,7 +86,6 @@ export class ResourceTreeModel extends SDKModel {
|
|
|
86
86
|
if (!this.framesInternal.has(frameId)) {
|
|
87
87
|
return null;
|
|
88
88
|
}
|
|
89
|
-
// TODO(crbug.com/445966299): Refactor to use `storageAgent().invoke_getStorageKey()` instead.
|
|
90
89
|
const response = await this.storageAgent.invoke_getStorageKey({ frameId });
|
|
91
90
|
if (response.getError() === 'Frame tree node for given frame not found') {
|
|
92
91
|
return null;
|
|
@@ -198,10 +197,13 @@ export class ResourceTreeModel extends SDKModel {
|
|
|
198
197
|
documentOpened(framePayload) {
|
|
199
198
|
this.frameNavigated(framePayload, undefined);
|
|
200
199
|
const frame = this.framesInternal.get(framePayload.id);
|
|
201
|
-
if (frame
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
200
|
+
if (frame) {
|
|
201
|
+
this.dispatchEventToListeners(Events.DocumentOpened, frame);
|
|
202
|
+
if (!frame.getResourcesMap().get(framePayload.url)) {
|
|
203
|
+
const frameResource = this.createResourceFromFramePayload(framePayload, framePayload.url, Common.ResourceType.resourceTypes.Document, framePayload.mimeType, null, null);
|
|
204
|
+
frameResource.isGenerated = true;
|
|
205
|
+
frame.addResource(frameResource);
|
|
206
|
+
}
|
|
205
207
|
}
|
|
206
208
|
}
|
|
207
209
|
frameDetached(frameId, isSwap) {
|
|
@@ -480,6 +482,7 @@ export var Events;
|
|
|
480
482
|
Events["FrameDetached"] = "FrameDetached";
|
|
481
483
|
Events["FrameResized"] = "FrameResized";
|
|
482
484
|
Events["FrameWillNavigate"] = "FrameWillNavigate";
|
|
485
|
+
Events["DocumentOpened"] = "DocumentOpened";
|
|
483
486
|
Events["PrimaryPageChanged"] = "PrimaryPageChanged";
|
|
484
487
|
Events["ResourceAdded"] = "ResourceAdded";
|
|
485
488
|
Events["WillLoadCachedResources"] = "WillLoadCachedResources";
|