chrome-devtools-frontend 1.0.1657855 → 1.0.1660788
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/migrate-chromium-test/SKILL.md +15 -70
- package/.agents/skills/ui-eng-vision-orchestrator/SKILL.md +37 -18
- package/.agents/skills/version-control/SKILL.md +8 -1
- package/AUTHORS +1 -0
- package/SECURITY.md +3 -0
- package/docs/get_the_code.md +6 -0
- package/front_end/Tests.js +6 -6
- package/front_end/core/common/Gzip.ts +12 -5
- package/front_end/core/host/AidaClient.ts +35 -9
- package/front_end/core/host/GdpClient.ts +10 -7
- package/front_end/core/platform/StringUtilities.ts +35 -0
- package/front_end/core/sdk/AccessibilityModel.snapshot.txt +17 -0
- package/front_end/core/sdk/AccessibilityModel.ts +132 -2
- package/front_end/core/sdk/CPUThrottlingManager.ts +8 -5
- package/front_end/core/sdk/CompilerSourceMappingContentProvider.ts +2 -5
- package/front_end/core/sdk/ConsoleModel.ts +5 -5
- package/front_end/core/sdk/DOMDebuggerModel.ts +5 -1
- package/front_end/core/sdk/DOMModel.ts +32 -18
- package/front_end/core/sdk/NetworkManager.ts +57 -11
- package/front_end/core/sdk/NetworkRequest.ts +37 -1
- package/front_end/core/sdk/OverlayModel.ts +45 -6
- package/front_end/core/sdk/ResourceTreeModel.ts +6 -7
- package/front_end/core/sdk/ScreenCaptureModel.ts +2 -2
- package/front_end/core/sdk/ServerTiming.ts +17 -13
- package/front_end/core/sdk/ServiceWorkerCacheModel.ts +4 -2
- package/front_end/core/sdk/ServiceWorkerManager.ts +19 -5
- package/front_end/core/sdk/TargetManager.ts +10 -1
- package/front_end/core/sdk/TraceObject.ts +4 -2
- package/front_end/core/sdk/sdk-meta.ts +170 -0
- package/front_end/design_system_tokens.css +0 -5
- package/front_end/entrypoints/formatter_worker/FormattedContentBuilder.ts +5 -2
- package/front_end/entrypoints/formatter_worker/HTMLFormatter.ts +26 -4
- package/front_end/entrypoints/formatter_worker/JavaScriptFormatter.ts +8 -3
- package/front_end/entrypoints/inspector_main/InspectorMain.ts +4 -4
- package/front_end/entrypoints/inspector_main/OutermostTargetSelector.ts +2 -2
- package/front_end/entrypoints/inspector_main/RenderingOptions.ts +36 -37
- package/front_end/entrypoints/inspector_main/inspector_main-meta.ts +15 -33
- package/front_end/entrypoints/js_app/js_app.ts +6 -5
- package/front_end/entrypoints/main/GlobalAiButton.ts +4 -4
- package/front_end/entrypoints/main/MainImpl.ts +18 -21
- package/front_end/entrypoints/main/main-meta.ts +42 -42
- package/front_end/entrypoints/node_app/node_app.ts +3 -2
- package/front_end/entrypoints/worker_app/WorkerMain.ts +1 -1
- package/front_end/foundation/Universe.ts +44 -1
- package/front_end/generated/InspectorBackendCommands.ts +2 -2
- package/front_end/generated/SupportedCSSProperties.js +19 -12
- package/front_end/generated/protocol.ts +3 -1
- package/front_end/models/ai_assistance/AiConversation.ts +19 -17
- package/front_end/models/ai_assistance/AiHistoryStorage.ts +37 -14
- package/front_end/models/ai_assistance/AiUtils.ts +38 -42
- package/front_end/models/ai_assistance/agents/AiAgent.ts +5 -1
- package/front_end/models/ai_assistance/agents/ContextSelectionAgent.ts +3 -2
- package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +2 -1
- package/front_end/models/ai_assistance/agents/StorageAgent.ts +7 -5
- package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.snapshot.txt +270 -286
- package/front_end/models/ai_assistance/data_formatters/UnitFormatters.ts +20 -0
- package/front_end/models/ai_assistance/performance/AICallTree.ts +3 -1
- package/front_end/models/ai_assistance/tools/ListNetworkRequests.ts +3 -2
- package/front_end/models/autofill_manager/AutofillManager.ts +3 -1
- package/front_end/models/bindings/CompilerScriptMapping.ts +2 -1
- package/front_end/models/bindings/DebuggerLanguagePlugins.ts +2 -1
- package/front_end/models/bindings/NetworkProject.ts +4 -0
- package/front_end/models/bindings/PresentationConsoleMessageHelper.ts +2 -1
- package/front_end/models/bindings/ResourceUtils.ts +1 -1
- package/front_end/models/bindings/SASSSourceMapping.ts +8 -5
- package/front_end/models/emulation/EmulatedDevices.ts +389 -8
- package/front_end/models/extensions/ExtensionAPI.ts +6 -6
- package/front_end/models/extensions/LanguageExtensionEndpoint.ts +13 -12
- package/front_end/models/issues_manager/BounceTrackingIssue.ts +1 -1
- package/front_end/models/issues_manager/ClientHintIssue.ts +1 -1
- package/front_end/models/issues_manager/ConnectionAllowlistIssue.ts +1 -1
- package/front_end/models/issues_manager/ContentSecurityPolicyIssue.ts +7 -7
- package/front_end/models/issues_manager/CookieDeprecationMetadataIssue.ts +2 -2
- package/front_end/models/issues_manager/CookieIssue.ts +6 -7
- package/front_end/models/issues_manager/CorsIssue.ts +3 -3
- package/front_end/models/issues_manager/CrossOriginEmbedderPolicyIssue.ts +2 -2
- package/front_end/models/issues_manager/DeprecationIssue.ts +3 -3
- package/front_end/models/issues_manager/EmailVerificationRequestIssue.ts +1 -1
- package/front_end/models/issues_manager/FederatedAuthRequestIssue.ts +1 -1
- package/front_end/models/issues_manager/FederatedAuthUserInfoRequestIssue.ts +1 -1
- package/front_end/models/issues_manager/GenericIssue.ts +7 -7
- package/front_end/models/issues_manager/HeavyAdIssue.ts +3 -3
- package/front_end/models/issues_manager/Issue.ts +8 -8
- package/front_end/models/issues_manager/MixedContentIssue.ts +1 -1
- package/front_end/models/issues_manager/PartitioningBlobURLIssue.ts +3 -3
- package/front_end/models/issues_manager/QuirksModeIssue.ts +1 -1
- package/front_end/models/issues_manager/SRIMessageSignatureIssue.ts +2 -2
- package/front_end/models/issues_manager/SelectivePermissionsInterventionIssue.ts +2 -2
- package/front_end/models/issues_manager/SharedArrayBufferIssue.ts +2 -2
- package/front_end/models/issues_manager/SharedDictionaryIssue.ts +1 -1
- package/front_end/models/issues_manager/UnencodedDigestIssue.ts +3 -3
- package/front_end/models/javascript_metadata/NativeFunctions.js +5 -1
- package/front_end/models/stack_trace/StackTraceModel.ts +3 -3
- package/front_end/models/text_utils/ContentData.ts +27 -0
- package/front_end/models/trace/helpers/SamplesIntegrator.ts +21 -5
- package/front_end/models/trace_source_maps_resolver/SourceMapsResolver.ts +29 -14
- package/front_end/models/web_mcp/WebMCPModel.ts +24 -6
- package/front_end/models/workspace/IgnoreListManager.ts +6 -6
- package/front_end/models/workspace/UISourceCode.ts +3 -3
- package/front_end/panels/ai_assistance/AiAssistancePanel.ts +25 -22
- package/front_end/panels/ai_assistance/ExportConversation.ts +3 -4
- package/front_end/panels/ai_assistance/ai_assistance-meta.ts +3 -3
- package/front_end/panels/ai_assistance/components/ChatInput.ts +2 -2
- package/front_end/panels/ai_assistance/components/ChatMessage.ts +7 -0
- package/front_end/panels/ai_assistance/components/DisabledWidget.ts +2 -2
- package/front_end/panels/animation/AnimationTimeline.ts +17 -19
- package/front_end/panels/animation/AnimationUI.ts +5 -5
- package/front_end/panels/animation/animation-meta.ts +2 -2
- package/front_end/panels/application/ApplicationPanelSidebar.ts +4 -3
- package/front_end/panels/application/DeviceBoundSessionsView.ts +2 -6
- package/front_end/panels/application/IndexedDBViews.ts +220 -266
- package/front_end/panels/application/OpenedWindowDetailsView.ts +1 -1
- package/front_end/panels/application/ResourcesPanel.ts +9 -2
- package/front_end/panels/application/ServiceWorkersView.ts +252 -211
- package/front_end/panels/application/StorageView.ts +97 -33
- package/front_end/panels/application/WebMCPView.ts +15 -1
- package/front_end/panels/application/indexedDBViews.css +38 -9
- package/front_end/panels/application/preloading/helper/PreloadingForward.ts +2 -1
- package/front_end/panels/application/storageView.css +26 -9
- package/front_end/panels/browser_debugger/XHRBreakpointsSidebarPane.ts +5 -1
- package/front_end/panels/browser_debugger/browser_debugger-meta.ts +8 -6
- package/front_end/panels/common/DOMLinkifier.ts +1 -1
- package/front_end/panels/common/ExtensionServer.ts +119 -14
- package/front_end/panels/console/ConsoleContextSelector.ts +1 -1
- package/front_end/panels/console/ConsolePinPane.ts +2 -2
- package/front_end/panels/console/ConsolePrompt.ts +2 -2
- package/front_end/panels/console/ConsoleView.ts +1 -1
- package/front_end/panels/console/SymbolizedErrorWidget.ts +2 -1
- package/front_end/panels/console_counters/WarningErrorCounter.ts +2 -2
- package/front_end/panels/coverage/CoverageListView.ts +28 -28
- package/front_end/panels/coverage/CoverageModel.ts +2 -1
- package/front_end/panels/coverage/CoverageView.ts +22 -22
- package/front_end/panels/coverage/coverage-meta.ts +5 -5
- package/front_end/panels/css_overview/CSSOverviewCompletedView.ts +36 -36
- package/front_end/panels/css_overview/CSSOverviewProcessingView.ts +1 -1
- package/front_end/panels/css_overview/CSSOverviewSidebarPanel.ts +2 -2
- package/front_end/panels/css_overview/CSSOverviewStartView.ts +6 -6
- package/front_end/panels/css_overview/CSSOverviewUnusedDeclarations.ts +6 -6
- package/front_end/panels/css_overview/css_overview-meta.ts +2 -2
- package/front_end/panels/developer_resources/DeveloperResourcesListView.ts +1 -1
- package/front_end/panels/elements/AccessibilityTreeUtils.ts +8 -102
- package/front_end/panels/elements/AccessibilityTreeView.ts +163 -70
- package/front_end/panels/elements/ElementsPanel.ts +17 -11
- package/front_end/panels/elements/ElementsTreeElement.ts +4 -1
- package/front_end/panels/elements/ElementsTreeOutline.ts +4 -4
- package/front_end/panels/elements/LayoutPane.ts +1 -1
- package/front_end/panels/elements/MetricsSidebarPane.ts +100 -34
- package/front_end/panels/elements/StylePropertiesSection.ts +2 -2
- package/front_end/panels/elements/StylePropertyTreeElement.ts +8 -2
- package/front_end/panels/elements/StylesSidebarPane.ts +1 -1
- package/front_end/panels/elements/components/AccessibilityTreeNode.ts +7 -18
- package/front_end/panels/elements/components/ElementsBreadcrumbs.ts +2 -2
- package/front_end/panels/elements/components/QueryContainer.ts +1 -1
- package/front_end/panels/issues/AffectedDirectivesView.ts +1 -1
- package/front_end/panels/issues/AffectedResourcesView.ts +2 -1
- package/front_end/panels/layer_viewer/LayerViewHost.ts +1 -1
- package/front_end/panels/network/NetworkDataGridNode.ts +124 -36
- package/front_end/panels/network/NetworkLogView.ts +9 -1
- package/front_end/panels/network/NetworkLogViewColumns.ts +18 -0
- package/front_end/panels/network/NetworkPanel.ts +2 -1
- package/front_end/panels/network/RequestPayloadView.ts +53 -7
- package/front_end/panels/network/RequestPreviewView.ts +7 -1
- package/front_end/panels/network/components/ResponseHeaderSection.ts +1 -1
- package/front_end/panels/network/forward/UIFilter.ts +1 -0
- package/front_end/panels/network/requestPayloadView.css +10 -0
- package/front_end/panels/performance_monitor/PerformanceMonitor.ts +12 -12
- package/front_end/panels/performance_monitor/performance_monitor-meta.ts +7 -7
- package/front_end/panels/profiler/HeapDetachedElementsView.ts +2 -2
- package/front_end/panels/profiler/HeapProfileView.ts +563 -51
- package/front_end/panels/profiler/HeapSnapshotView.ts +13 -8
- package/front_end/panels/profiler/ProfilesPanel.ts +13 -7
- package/front_end/panels/profiler/WritableProfileHeader.ts +152 -0
- package/front_end/panels/profiler/profiler.ts +2 -2
- package/front_end/panels/recorder/RecorderController.ts +14 -15
- package/front_end/panels/recorder/components/CreateRecordingView.ts +11 -11
- package/front_end/panels/recorder/components/ExtensionView.ts +74 -83
- package/front_end/panels/recorder/components/RecordingListView.ts +3 -3
- package/front_end/panels/recorder/components/RecordingView.ts +13 -10
- package/front_end/panels/recorder/components/ReplaySection.ts +9 -9
- package/front_end/panels/recorder/components/StepEditor.ts +352 -321
- package/front_end/panels/recorder/components/StepView.ts +36 -37
- package/front_end/panels/recorder/components/recordingView.css +1 -1
- package/front_end/panels/recorder/models/RecorderSettings.ts +2 -2
- package/front_end/panels/recorder/recorder-meta.ts +7 -7
- package/front_end/panels/screencast/ScreencastApp.ts +1 -1
- package/front_end/panels/screencast/ScreencastView.ts +12 -12
- package/front_end/panels/search/SearchResultsPane.ts +4 -4
- package/front_end/panels/search/SearchView.ts +20 -20
- package/front_end/panels/security/SecurityModel.ts +7 -7
- package/front_end/panels/security/SecurityPanel.ts +99 -107
- package/front_end/panels/security/SecurityPanelSidebar.ts +7 -7
- package/front_end/panels/security/security-meta.ts +2 -2
- package/front_end/panels/sensors/LocationsSettingsTab.ts +19 -19
- package/front_end/panels/sensors/SensorsView.ts +27 -27
- package/front_end/panels/sensors/sensors-meta.ts +13 -167
- package/front_end/panels/settings/AISettingsTab.ts +98 -56
- package/front_end/panels/settings/EditFileSystemView.ts +2 -2
- package/front_end/panels/settings/FrameworkIgnoreListSettingsTab.ts +20 -20
- package/front_end/panels/settings/KeybindsSettingsTab.ts +20 -21
- package/front_end/panels/settings/SettingsScreen.ts +11 -11
- package/front_end/panels/settings/WorkspaceSettingsTab.ts +5 -5
- package/front_end/panels/settings/components/SyncSection.ts +12 -12
- package/front_end/panels/settings/emulation/DevicesSettingsTab.ts +13 -13
- package/front_end/panels/settings/emulation/components/UserAgentClientHintsForm.ts +31 -31
- package/front_end/panels/settings/emulation/emulation-meta.ts +1 -1
- package/front_end/panels/settings/settings-meta.ts +14 -14
- package/front_end/panels/sources/NavigatorView.ts +7 -6
- package/front_end/panels/sources/ScopeChainSidebarPane.ts +83 -37
- package/front_end/panels/sources/SourcesNavigator.ts +20 -18
- package/front_end/panels/sources/SourcesView.ts +10 -1
- package/front_end/panels/sources/scopeChainSidebarPane.css +12 -4
- package/front_end/panels/sources/sources-meta.ts +4 -4
- package/front_end/panels/timeline/CompatibilityTracksAppender.ts +5 -2
- package/front_end/panels/timeline/TimelineFlameChartDataProvider.ts +2 -1
- package/front_end/panels/timeline/TimelineFlameChartNetworkDataProvider.ts +2 -1
- package/front_end/panels/timeline/TimelineFlameChartView.ts +1 -1
- package/front_end/panels/timeline/TimelinePanel.ts +2 -1
- package/front_end/panels/timeline/TimelineUIUtils.ts +5 -2
- package/front_end/panels/timeline/components/NetworkRequestDetails.ts +4 -2
- package/front_end/panels/timeline/components/NetworkRequestTooltip.ts +4 -2
- package/front_end/panels/timeline/components/insights/ImageRef.ts +2 -1
- package/front_end/panels/utils/utils.ts +7 -3
- package/front_end/panels/web_audio/WebAudioView.ts +17 -18
- package/front_end/panels/web_audio/web_audio-meta.ts +3 -3
- package/front_end/panels/whats_new/ReleaseNoteView.ts +1 -1
- package/front_end/panels/whats_new/whats_new-meta.ts +11 -11
- package/front_end/third_party/chromium/README.chromium +1 -1
- package/front_end/third_party/lit/lib/async-directive.d.ts +2 -1
- package/front_end/third_party/lit/lib/async-directive.js +1 -1
- package/front_end/third_party/lit/lib/async-directive.js.map +1 -1
- package/front_end/third_party/lit/lib/decorators.d.ts +2 -1
- package/front_end/third_party/lit/lib/decorators.js.map +1 -1
- package/front_end/third_party/lit/lib/directive.d.ts +2 -1
- package/front_end/third_party/lit/lib/directive.js.map +1 -1
- package/front_end/third_party/lit/lib/directives.d.ts +2 -1
- package/front_end/third_party/lit/lib/directives.js +8 -8
- package/front_end/third_party/lit/lib/directives.js.map +1 -1
- package/front_end/third_party/lit/lib/lit.d.ts +2 -1
- package/front_end/third_party/lit/lib/lit.js +1 -1
- package/front_end/third_party/lit/lib/lit.js.map +1 -1
- package/front_end/third_party/lit/lib/static-html.d.ts +2 -1
- package/front_end/third_party/lit/lib/static-html.js +1 -1
- package/front_end/third_party/lit/lib/static-html.js.map +1 -1
- package/front_end/third_party/lit/package.json +2 -2
- package/front_end/third_party/lit/rebuild.sh +1 -1
- package/front_end/third_party/lit/src/async-directive.ts +5 -0
- package/front_end/ui/components/dialogs/Dialog.ts +1 -1
- package/front_end/ui/components/dialogs/ShortcutDialog.ts +1 -1
- package/front_end/ui/components/diff_view/DiffView.ts +2 -2
- package/front_end/ui/components/issue_counter/IssueCounter.ts +3 -3
- package/front_end/ui/components/issue_counter/IssueLinkIcon.ts +5 -5
- package/front_end/ui/components/lists/List.ts +2 -2
- package/front_end/ui/components/panel_feedback/PreviewToggle.ts +1 -1
- package/front_end/ui/components/request_link_icon/RequestLinkIcon.ts +5 -5
- package/front_end/ui/components/settings/SettingCheckbox.ts +1 -1
- package/front_end/ui/components/snackbars/Snackbar.ts +1 -1
- package/front_end/ui/components/survey_link/SurveyLink.ts +3 -3
- package/front_end/ui/components/text_editor/config.ts +2 -2
- package/front_end/ui/components/tree_outline/TreeOutline.ts +34 -1
- package/front_end/ui/legacy/ReportView.ts +5 -0
- package/front_end/ui/legacy/Treeoutline.ts +3 -0
- package/front_end/ui/legacy/View.ts +1 -1
- package/front_end/ui/legacy/components/data_grid/DataGrid.ts +2 -0
- package/front_end/ui/legacy/components/data_grid/DataGridElement.ts +8 -3
- package/front_end/ui/legacy/components/data_grid/data_grid.ts +1 -0
- package/front_end/ui/legacy/components/object_ui/ObjectPopoverHelper.ts +1 -1
- package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +100 -36
- package/front_end/ui/legacy/components/source_frame/ResourceSourceFrame.ts +7 -1
- package/front_end/ui/legacy/components/utils/ImagePreview.ts +4 -2
- package/front_end/ui/legacy/inspectorCommon.css +5 -0
- package/front_end/ui/visual_logging/KnownContextValues.ts +3 -0
- package/mcp/mcp.ts +2 -0
- package/package.json +4 -4
- package/front_end/panels/profiler/ProfileView.ts +0 -611
|
@@ -3,9 +3,10 @@
|
|
|
3
3
|
// found in the LICENSE file.
|
|
4
4
|
|
|
5
5
|
import type * as ProtocolProxyApi from '../../generated/protocol-proxy-api.js';
|
|
6
|
-
import
|
|
6
|
+
import * as Protocol from '../../generated/protocol.js';
|
|
7
7
|
|
|
8
|
-
import {DeferredDOMNode, DOMModel, type DOMNode, Events as DOMModelEvents} from './DOMModel.js';
|
|
8
|
+
import {DeferredDOMNode, DOMDocument, DOMModel, type DOMNode, Events as DOMModelEvents} from './DOMModel.js';
|
|
9
|
+
import type {FrameManager} from './FrameManager.js';
|
|
9
10
|
import {SDKModel} from './SDKModel.js';
|
|
10
11
|
import {Capability, type Target} from './Target.js';
|
|
11
12
|
|
|
@@ -23,6 +24,7 @@ export interface CoreOrProtocolAxProperty {
|
|
|
23
24
|
|
|
24
25
|
export class AccessibilityNode {
|
|
25
26
|
readonly #accessibilityModel: AccessibilityModel;
|
|
27
|
+
readonly #frameManager: FrameManager;
|
|
26
28
|
readonly #id: Protocol.Accessibility.AXNodeId;
|
|
27
29
|
readonly #backendDOMNodeId: Protocol.DOM.BackendNodeId|null;
|
|
28
30
|
readonly #deferredDOMNode: DeferredDOMNode|null;
|
|
@@ -39,6 +41,7 @@ export class AccessibilityNode {
|
|
|
39
41
|
|
|
40
42
|
constructor(accessibilityModel: AccessibilityModel, payload: Protocol.Accessibility.AXNode) {
|
|
41
43
|
this.#accessibilityModel = accessibilityModel;
|
|
44
|
+
this.#frameManager = accessibilityModel.target().targetManager().getFrameManager();
|
|
42
45
|
|
|
43
46
|
this.#id = payload.nodeId;
|
|
44
47
|
accessibilityModel.setAXNodeForAXId(this.#id, this);
|
|
@@ -190,6 +193,63 @@ export class AccessibilityNode {
|
|
|
190
193
|
getFrameId(): Protocol.Page.FrameId|null {
|
|
191
194
|
return this.#frameId || this.parentNode()?.getFrameId() || null;
|
|
192
195
|
}
|
|
196
|
+
|
|
197
|
+
isLeafNode(): boolean {
|
|
198
|
+
return this.numChildren() === 0 && this.role()?.value !== 'Iframe';
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
getNodeId(): string {
|
|
202
|
+
return this.getFrameId() + '#' + this.id();
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
async getChildren(): Promise<AccessibilityNode[]> {
|
|
206
|
+
if (this.role()?.value === 'Iframe') {
|
|
207
|
+
const domNode = await this.deferredDOMNode()?.resolvePromise();
|
|
208
|
+
if (!domNode) {
|
|
209
|
+
throw new Error('Could not find corresponding DOMNode');
|
|
210
|
+
}
|
|
211
|
+
const frameId = domNode.frameOwnerFrameId();
|
|
212
|
+
if (!frameId) {
|
|
213
|
+
throw new Error('No owner frameId on iframe node');
|
|
214
|
+
}
|
|
215
|
+
const localRoot = await getRootNode(frameId, this.#frameManager);
|
|
216
|
+
return [localRoot];
|
|
217
|
+
}
|
|
218
|
+
return await this.accessibilityModel().requestAXChildren(this.id(), this.getFrameId() || undefined);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
async axNodeToText(depth = 0): Promise<string> {
|
|
222
|
+
const indent = ' '.repeat(depth);
|
|
223
|
+
const role = this.role()?.value || '';
|
|
224
|
+
const name = this.name()?.value || '';
|
|
225
|
+
const properties = this.properties() || [];
|
|
226
|
+
const ignored = this.ignored();
|
|
227
|
+
let childDepth = depth + 1;
|
|
228
|
+
|
|
229
|
+
const lines = [];
|
|
230
|
+
if (ignored) {
|
|
231
|
+
if (depth === 0) {
|
|
232
|
+
lines.push('Ignored\n');
|
|
233
|
+
} else {
|
|
234
|
+
childDepth = depth;
|
|
235
|
+
}
|
|
236
|
+
} else {
|
|
237
|
+
let line = `${indent}${role} "${name}"`;
|
|
238
|
+
for (const prop of properties) {
|
|
239
|
+
if (prop.value && isPrintableType(prop.value.type)) {
|
|
240
|
+
line += ` ${prop.name}: ${prop.value.value}`;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
lines.push(line + '\n');
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
const children = await this.getChildren();
|
|
247
|
+
for (const child of children) {
|
|
248
|
+
lines.push(await child.axNodeToText(childDepth));
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
return lines.join('');
|
|
252
|
+
}
|
|
193
253
|
}
|
|
194
254
|
|
|
195
255
|
export const enum Events {
|
|
@@ -363,3 +423,73 @@ export class AccessibilityModel extends SDKModel<EventTypes> implements Protocol
|
|
|
363
423
|
}
|
|
364
424
|
|
|
365
425
|
SDKModel.register(AccessibilityModel, {capabilities: Capability.DOM, autostart: false});
|
|
426
|
+
|
|
427
|
+
function getModel(frameId: Protocol.Page.FrameId, frameManager: FrameManager): AccessibilityModel {
|
|
428
|
+
const frame = frameManager.getFrame(frameId);
|
|
429
|
+
const model = frame?.resourceTreeModel().target().model(AccessibilityModel);
|
|
430
|
+
if (!model) {
|
|
431
|
+
throw new Error('Could not instantiate model for frameId');
|
|
432
|
+
}
|
|
433
|
+
return model;
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
export async function getRootNode(frameId: Protocol.Page.FrameId,
|
|
437
|
+
frameManager: FrameManager): Promise<AccessibilityNode> {
|
|
438
|
+
const model = getModel(frameId, frameManager);
|
|
439
|
+
const root = await model.requestRootNode(frameId);
|
|
440
|
+
if (!root) {
|
|
441
|
+
throw new Error('No accessibility root for frame');
|
|
442
|
+
}
|
|
443
|
+
return root;
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
function getFrameIdForNodeOrDocument(node: DOMNode): Protocol.Page.FrameId {
|
|
447
|
+
let frameId;
|
|
448
|
+
if (node instanceof DOMDocument) {
|
|
449
|
+
frameId = node.body?.frameId();
|
|
450
|
+
} else {
|
|
451
|
+
frameId = node.frameId();
|
|
452
|
+
}
|
|
453
|
+
if (!frameId) {
|
|
454
|
+
throw new Error('No frameId for DOM node');
|
|
455
|
+
}
|
|
456
|
+
return frameId;
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
export async function getNodeAndAncestorsFromDOMNode(domNode: DOMNode): Promise<AccessibilityNode[]> {
|
|
460
|
+
const frameManager = domNode.domModel().target().targetManager().getFrameManager();
|
|
461
|
+
let frameId = getFrameIdForNodeOrDocument(domNode);
|
|
462
|
+
const model = getModel(frameId, frameManager);
|
|
463
|
+
const result = await model.requestAndLoadSubTreeToNode(domNode);
|
|
464
|
+
if (!result) {
|
|
465
|
+
throw new Error('Could not retrieve accessibility node for inspected DOM node');
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
const outermostFrameId = frameManager.getOutermostFrame()?.id;
|
|
469
|
+
if (!outermostFrameId) {
|
|
470
|
+
return result;
|
|
471
|
+
}
|
|
472
|
+
while (frameId !== outermostFrameId) {
|
|
473
|
+
const node = await frameManager.getFrame(frameId)?.getOwnerDOMNodeOrDocument();
|
|
474
|
+
if (!node) {
|
|
475
|
+
break;
|
|
476
|
+
}
|
|
477
|
+
frameId = getFrameIdForNodeOrDocument(node);
|
|
478
|
+
const model = getModel(frameId, frameManager);
|
|
479
|
+
const ancestors = await model.requestAndLoadSubTreeToNode(node);
|
|
480
|
+
result.push(...ancestors || []);
|
|
481
|
+
}
|
|
482
|
+
return result;
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
export function isPrintableType(valueType: Protocol.Accessibility.AXValueType): boolean {
|
|
486
|
+
switch (valueType) {
|
|
487
|
+
case Protocol.Accessibility.AXValueType.Boolean:
|
|
488
|
+
case Protocol.Accessibility.AXValueType.BooleanOrUndefined:
|
|
489
|
+
case Protocol.Accessibility.AXValueType.String:
|
|
490
|
+
case Protocol.Accessibility.AXValueType.Number:
|
|
491
|
+
return true;
|
|
492
|
+
default:
|
|
493
|
+
return false;
|
|
494
|
+
}
|
|
495
|
+
}
|
|
@@ -19,7 +19,10 @@ export class CPUThrottlingManager extends Common.ObjectWrapper.ObjectWrapper<Eve
|
|
|
19
19
|
super();
|
|
20
20
|
this.#targetManager = targetManager;
|
|
21
21
|
this.#cpuThrottlingRate = 1; // No throttling
|
|
22
|
-
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
initialize(): void {
|
|
25
|
+
this.#targetManager.observeModels(EmulationModel, this);
|
|
23
26
|
}
|
|
24
27
|
|
|
25
28
|
static instance(opts: {
|
|
@@ -29,10 +32,10 @@ export class CPUThrottlingManager extends Common.ObjectWrapper.ObjectWrapper<Eve
|
|
|
29
32
|
} = {forceNew: null}): CPUThrottlingManager {
|
|
30
33
|
const {forceNew} = opts;
|
|
31
34
|
if (!Root.DevToolsContext.globalInstance().has(CPUThrottlingManager) || forceNew) {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
35
|
+
const manager = new CPUThrottlingManager(opts.settings ?? Common.Settings.Settings.instance(),
|
|
36
|
+
opts.targetManager ?? TargetManager.instance());
|
|
37
|
+
manager.initialize();
|
|
38
|
+
Root.DevToolsContext.globalInstance().set(CPUThrottlingManager, manager);
|
|
36
39
|
}
|
|
37
40
|
|
|
38
41
|
return Root.DevToolsContext.globalInstance().get(CPUThrottlingManager);
|
|
@@ -7,7 +7,7 @@ import type * as Common from '../common/common.js';
|
|
|
7
7
|
import * as i18n from '../i18n/i18n.js';
|
|
8
8
|
import type * as Platform from '../platform/platform.js';
|
|
9
9
|
|
|
10
|
-
import {PageResourceLoader,
|
|
10
|
+
import type {PageResourceLoader, PageResourceLoadInitiator} from './PageResourceLoader.js';
|
|
11
11
|
|
|
12
12
|
const UIStrings = {
|
|
13
13
|
/**
|
|
@@ -28,10 +28,7 @@ export class CompilerSourceMappingContentProvider implements TextUtils.ContentPr
|
|
|
28
28
|
readonly #pageResourceLoader: PageResourceLoader;
|
|
29
29
|
|
|
30
30
|
constructor(sourceURL: Platform.DevToolsPath.UrlString, contentType: Common.ResourceType.ResourceType,
|
|
31
|
-
initiator: PageResourceLoadInitiator,
|
|
32
|
-
pageResourceLoader: PageResourceLoader = initiator.target ?
|
|
33
|
-
initiator.target.targetManager().context.get(PageResourceLoader) :
|
|
34
|
-
PageResourceLoader.instance()) {
|
|
31
|
+
initiator: PageResourceLoadInitiator, pageResourceLoader: PageResourceLoader) {
|
|
35
32
|
this.#sourceURL = sourceURL;
|
|
36
33
|
this.#contentType = contentType;
|
|
37
34
|
this.#initiator = initiator;
|
|
@@ -35,7 +35,7 @@ import {
|
|
|
35
35
|
} from './RuntimeModel.js';
|
|
36
36
|
import {SDKModel} from './SDKModel.js';
|
|
37
37
|
import {Capability, type Target, Type} from './Target.js';
|
|
38
|
-
import {TargetManager} from './TargetManager.js';
|
|
38
|
+
import type {TargetManager} from './TargetManager.js';
|
|
39
39
|
|
|
40
40
|
export {FrontendMessageType} from './ConsoleModelTypes.js';
|
|
41
41
|
|
|
@@ -357,7 +357,7 @@ export class ConsoleModel extends SDKModel<EventTypes> {
|
|
|
357
357
|
}
|
|
358
358
|
|
|
359
359
|
// messages[] are not ordered by timestamp.
|
|
360
|
-
static allMessagesUnordered(targetManager: TargetManager
|
|
360
|
+
static allMessagesUnordered(targetManager: TargetManager): ConsoleMessage[] {
|
|
361
361
|
const messages = [];
|
|
362
362
|
for (const target of targetManager.targets()) {
|
|
363
363
|
const targetMessages = target.model(ConsoleModel)?.messages() || [];
|
|
@@ -366,7 +366,7 @@ export class ConsoleModel extends SDKModel<EventTypes> {
|
|
|
366
366
|
return messages;
|
|
367
367
|
}
|
|
368
368
|
|
|
369
|
-
static requestClearMessages(targetManager: TargetManager
|
|
369
|
+
static requestClearMessages(targetManager: TargetManager): void {
|
|
370
370
|
for (const logModel of targetManager.models(LogModel)) {
|
|
371
371
|
logModel.requestClear();
|
|
372
372
|
}
|
|
@@ -394,7 +394,7 @@ export class ConsoleModel extends SDKModel<EventTypes> {
|
|
|
394
394
|
return this.#errors;
|
|
395
395
|
}
|
|
396
396
|
|
|
397
|
-
static allErrors(targetManager: TargetManager
|
|
397
|
+
static allErrors(targetManager: TargetManager): number {
|
|
398
398
|
let errors = 0;
|
|
399
399
|
for (const target of targetManager.targets()) {
|
|
400
400
|
errors += target.model(ConsoleModel)?.errors() || 0;
|
|
@@ -406,7 +406,7 @@ export class ConsoleModel extends SDKModel<EventTypes> {
|
|
|
406
406
|
return this.#warnings;
|
|
407
407
|
}
|
|
408
408
|
|
|
409
|
-
static allWarnings(targetManager: TargetManager
|
|
409
|
+
static allWarnings(targetManager: TargetManager): number {
|
|
410
410
|
let warnings = 0;
|
|
411
411
|
for (const target of targetManager.targets()) {
|
|
412
412
|
warnings += target.model(ConsoleModel)?.warnings() || 0;
|
|
@@ -661,7 +661,9 @@ export class DOMDebuggerManager implements SDKModelObserver<DOMDebuggerModel> {
|
|
|
661
661
|
this.createEventListenerBreakpoints(
|
|
662
662
|
Category.XHR, ['readystatechange', 'load', 'loadstart', 'loadend', 'abort', 'error', 'progress', 'timeout'],
|
|
663
663
|
['xmlhttprequest', 'xmlhttprequestupload']);
|
|
664
|
+
}
|
|
664
665
|
|
|
666
|
+
initialize(): void {
|
|
665
667
|
this.#targetManager.observeModels(DOMDebuggerModel, this);
|
|
666
668
|
}
|
|
667
669
|
|
|
@@ -671,9 +673,11 @@ export class DOMDebuggerManager implements SDKModelObserver<DOMDebuggerModel> {
|
|
|
671
673
|
} = {forceNew: null}): DOMDebuggerManager {
|
|
672
674
|
const {forceNew, targetManager} = opts;
|
|
673
675
|
if (!Root.DevToolsContext.globalInstance().has(DOMDebuggerManager) || forceNew) {
|
|
676
|
+
const manager = new DOMDebuggerManager(targetManager ?? TargetManager.instance());
|
|
677
|
+
manager.initialize();
|
|
674
678
|
Root.DevToolsContext.globalInstance().set(
|
|
675
679
|
DOMDebuggerManager,
|
|
676
|
-
|
|
680
|
+
manager,
|
|
677
681
|
);
|
|
678
682
|
}
|
|
679
683
|
|
|
@@ -1127,27 +1127,33 @@ export class DOMNode extends Common.ObjectWrapper.ObjectWrapper<DOMNodeEventType
|
|
|
1127
1127
|
return model;
|
|
1128
1128
|
}
|
|
1129
1129
|
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
node = node.parentNode;
|
|
1130
|
+
canInspectNode(): boolean {
|
|
1131
|
+
if (this.ancestorUserAgentShadowRoot()) {
|
|
1132
|
+
return false;
|
|
1134
1133
|
}
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1134
|
+
|
|
1135
|
+
if (this.#pseudoType) {
|
|
1136
|
+
return [
|
|
1137
|
+
Protocol.DOM.PseudoType.Before,
|
|
1138
|
+
Protocol.DOM.PseudoType.After,
|
|
1139
|
+
Protocol.DOM.PseudoType.Marker,
|
|
1140
|
+
Protocol.DOM.PseudoType.ScrollMarker,
|
|
1141
|
+
Protocol.DOM.PseudoType.Backdrop,
|
|
1142
|
+
Protocol.DOM.PseudoType.ViewTransition,
|
|
1143
|
+
Protocol.DOM.PseudoType.ViewTransitionGroup,
|
|
1144
|
+
Protocol.DOM.PseudoType.ViewTransitionImagePair,
|
|
1145
|
+
Protocol.DOM.PseudoType.ViewTransitionOld,
|
|
1146
|
+
Protocol.DOM.PseudoType.ViewTransitionNew,
|
|
1147
|
+
].includes(this.#pseudoType);
|
|
1146
1148
|
}
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
+
return true;
|
|
1150
|
+
}
|
|
1151
|
+
|
|
1152
|
+
async setAsInspectedNode(): Promise<void> {
|
|
1153
|
+
if (!this.canInspectNode()) {
|
|
1154
|
+
return;
|
|
1149
1155
|
}
|
|
1150
|
-
await this.#agent.invoke_setInspectedNode({nodeId:
|
|
1156
|
+
await this.#agent.invoke_setInspectedNode({nodeId: this.id});
|
|
1151
1157
|
}
|
|
1152
1158
|
|
|
1153
1159
|
enclosingElementOrSelf(): DOMNode|null {
|
|
@@ -2365,6 +2371,10 @@ export class DOMNodeSnapshot extends DOMNode {
|
|
|
2365
2371
|
_callback?: ((arg0: string|null, arg1: DOMNode|null) => void)|undefined): void {
|
|
2366
2372
|
}
|
|
2367
2373
|
|
|
2374
|
+
override canInspectNode(): boolean {
|
|
2375
|
+
return false;
|
|
2376
|
+
}
|
|
2377
|
+
|
|
2368
2378
|
override setAsInspectedNode(): Promise<void> {
|
|
2369
2379
|
return Promise.resolve();
|
|
2370
2380
|
}
|
|
@@ -2410,6 +2420,10 @@ export class DOMDocumentSnapshot extends DOMDocument {
|
|
|
2410
2420
|
_callback?: ((arg0: string|null, arg1: DOMNode|null) => void)|undefined): void {
|
|
2411
2421
|
}
|
|
2412
2422
|
|
|
2423
|
+
override canInspectNode(): boolean {
|
|
2424
|
+
return false;
|
|
2425
|
+
}
|
|
2426
|
+
|
|
2413
2427
|
override setAsInspectedNode(): Promise<void> {
|
|
2414
2428
|
return Promise.resolve();
|
|
2415
2429
|
}
|
|
@@ -323,6 +323,45 @@ export class NetworkManager extends SDKModel<EventTypes> {
|
|
|
323
323
|
}
|
|
324
324
|
}
|
|
325
325
|
|
|
326
|
+
/**
|
|
327
|
+
* Returns the request post data as a ContentData suitable for binary
|
|
328
|
+
* viewers (hex, base64, utf-8) in the Payload tab. When the backend
|
|
329
|
+
* provides base64-encoded (possibly compressed) data, the body is
|
|
330
|
+
* decompressed first so viewers show the actual payload bytes rather
|
|
331
|
+
* than gzip/deflate framing.
|
|
332
|
+
*/
|
|
333
|
+
static async requestPostDataContentData(request: NetworkRequest): Promise<TextUtils.ContentData.ContentDataOrError> {
|
|
334
|
+
const manager = NetworkManager.forRequest(request);
|
|
335
|
+
if (!manager) {
|
|
336
|
+
return {error: 'No network manager for request'};
|
|
337
|
+
}
|
|
338
|
+
const requestId = request.backendRequestId();
|
|
339
|
+
if (!requestId) {
|
|
340
|
+
return {error: 'No backend request id for request'};
|
|
341
|
+
}
|
|
342
|
+
try {
|
|
343
|
+
const response = await manager.#networkAgent.invoke_getRequestPostData({requestId});
|
|
344
|
+
const error = response.getError();
|
|
345
|
+
if (error) {
|
|
346
|
+
return {error};
|
|
347
|
+
}
|
|
348
|
+
const {postData, base64Encoded} = response;
|
|
349
|
+
if (!postData) {
|
|
350
|
+
return {error: 'No post data'};
|
|
351
|
+
}
|
|
352
|
+
const requestContentType = request.requestContentType() ?? 'application/octet-stream';
|
|
353
|
+
const {charset} = Platform.MimeType.parseContentType(requestContentType);
|
|
354
|
+
|
|
355
|
+
if (base64Encoded && postData) {
|
|
356
|
+
return await TextUtils.ContentData.ContentData.fromCompressedBase64(
|
|
357
|
+
postData, requestContentType, charset ?? undefined, request.requestContentEncoding());
|
|
358
|
+
}
|
|
359
|
+
return new TextUtils.ContentData.ContentData(postData, false, requestContentType, charset ?? undefined);
|
|
360
|
+
} catch (e) {
|
|
361
|
+
return {error: e.message};
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
|
|
326
365
|
/**
|
|
327
366
|
* Attempts to decompress a compressed request body.
|
|
328
367
|
* Returns the decompressed string, or null if decompression is not applicable.
|
|
@@ -658,6 +697,7 @@ export class NetworkDispatcher implements ProtocolProxyApi.NetworkDispatcher {
|
|
|
658
697
|
networkRequest.setReferrerPolicy(request.referrerPolicy);
|
|
659
698
|
networkRequest.setIsSameSite(request.isSameSite || false);
|
|
660
699
|
networkRequest.setIsAdRelated(request.isAdRelated || false);
|
|
700
|
+
networkRequest.setIsLinkPreload(request.isLinkPreload || false);
|
|
661
701
|
}
|
|
662
702
|
|
|
663
703
|
private updateNetworkRequestWithResponse(networkRequest: NetworkRequest, response: Protocol.Network.Response): void {
|
|
@@ -847,7 +887,7 @@ export class NetworkDispatcher implements ProtocolProxyApi.NetworkDispatcher {
|
|
|
847
887
|
} else {
|
|
848
888
|
networkRequest = NetworkRequest.create(
|
|
849
889
|
requestId, request.url as Platform.DevToolsPath.UrlString, documentURL as Platform.DevToolsPath.UrlString,
|
|
850
|
-
frameId ?? null, loaderId, initiator, hasUserGesture);
|
|
890
|
+
frameId ?? null, loaderId, initiator, hasUserGesture, this.#manager.target().targetManager().getConsole());
|
|
851
891
|
if (renderBlockingBehavior) {
|
|
852
892
|
networkRequest.setRenderBlockingBehavior(renderBlockingBehavior);
|
|
853
893
|
}
|
|
@@ -969,7 +1009,8 @@ export class NetworkDispatcher implements ProtocolProxyApi.NetworkDispatcher {
|
|
|
969
1009
|
|
|
970
1010
|
webSocketCreated({requestId, url: requestURL, initiator}: Protocol.Network.WebSocketCreatedEvent): void {
|
|
971
1011
|
const networkRequest =
|
|
972
|
-
NetworkRequest.createForSocket(requestId, requestURL as Platform.DevToolsPath.UrlString, initiator
|
|
1012
|
+
NetworkRequest.createForSocket(requestId, requestURL as Platform.DevToolsPath.UrlString, initiator,
|
|
1013
|
+
this.#manager.target().targetManager().getConsole());
|
|
973
1014
|
requestToManagerMap.set(networkRequest, this.#manager);
|
|
974
1015
|
networkRequest.setResourceType(Common.ResourceType.resourceTypes.WebSocket);
|
|
975
1016
|
this.startNetworkRequest(networkRequest, null);
|
|
@@ -1174,7 +1215,7 @@ export class NetworkDispatcher implements ProtocolProxyApi.NetworkDispatcher {
|
|
|
1174
1215
|
const newNetworkRequest = NetworkRequest.create(
|
|
1175
1216
|
requestId, redirectURL, originalNetworkRequest.documentURL, originalNetworkRequest.frameId,
|
|
1176
1217
|
originalNetworkRequest.loaderId, originalNetworkRequest.initiator(),
|
|
1177
|
-
originalNetworkRequest.hasUserGesture() ?? undefined);
|
|
1218
|
+
originalNetworkRequest.hasUserGesture() ?? undefined, this.#manager.target().targetManager().getConsole());
|
|
1178
1219
|
requestToManagerMap.set(newNetworkRequest, this.#manager);
|
|
1179
1220
|
newNetworkRequest.setRedirectSource(originalNetworkRequest);
|
|
1180
1221
|
originalNetworkRequest.setRedirectDestination(newNetworkRequest);
|
|
@@ -1296,7 +1337,8 @@ export class NetworkDispatcher implements ProtocolProxyApi.NetworkDispatcher {
|
|
|
1296
1337
|
webTransportCreated({transportId, url: requestURL, timestamp: time, initiator}:
|
|
1297
1338
|
Protocol.Network.WebTransportCreatedEvent): void {
|
|
1298
1339
|
const networkRequest =
|
|
1299
|
-
NetworkRequest.createForSocket(transportId, requestURL as Platform.DevToolsPath.UrlString, initiator
|
|
1340
|
+
NetworkRequest.createForSocket(transportId, requestURL as Platform.DevToolsPath.UrlString, initiator,
|
|
1341
|
+
this.#manager.target().targetManager().getConsole());
|
|
1300
1342
|
networkRequest.hasNetworkData = true;
|
|
1301
1343
|
requestToManagerMap.set(networkRequest, this.#manager);
|
|
1302
1344
|
networkRequest.setResourceType(Common.ResourceType.resourceTypes.WebTransport);
|
|
@@ -1333,8 +1375,9 @@ export class NetworkDispatcher implements ProtocolProxyApi.NetworkDispatcher {
|
|
|
1333
1375
|
|
|
1334
1376
|
directTCPSocketCreated(event: Protocol.Network.DirectTCPSocketCreatedEvent): void {
|
|
1335
1377
|
const requestURL = this.concatHostPort(event.remoteAddr, event.remotePort);
|
|
1336
|
-
const networkRequest =
|
|
1337
|
-
event.identifier, requestURL as Platform.DevToolsPath.UrlString, event.initiator
|
|
1378
|
+
const networkRequest =
|
|
1379
|
+
NetworkRequest.createForSocket(event.identifier, requestURL as Platform.DevToolsPath.UrlString, event.initiator,
|
|
1380
|
+
this.#manager.target().targetManager().getConsole());
|
|
1338
1381
|
networkRequest.hasNetworkData = true;
|
|
1339
1382
|
networkRequest.setRemoteAddress(event.remoteAddr, event.remotePort);
|
|
1340
1383
|
networkRequest.protocol = i18n.i18n.lockedString('tcp');
|
|
@@ -1448,8 +1491,9 @@ export class NetworkDispatcher implements ProtocolProxyApi.NetworkDispatcher {
|
|
|
1448
1491
|
// is not specified.
|
|
1449
1492
|
return;
|
|
1450
1493
|
}
|
|
1451
|
-
const networkRequest =
|
|
1452
|
-
event.identifier, requestURL as Platform.DevToolsPath.UrlString, event.initiator
|
|
1494
|
+
const networkRequest =
|
|
1495
|
+
NetworkRequest.createForSocket(event.identifier, requestURL as Platform.DevToolsPath.UrlString, event.initiator,
|
|
1496
|
+
this.#manager.target().targetManager().getConsole());
|
|
1453
1497
|
networkRequest.hasNetworkData = true;
|
|
1454
1498
|
if (event.options.remoteAddr && event.options.remotePort) {
|
|
1455
1499
|
networkRequest.setRemoteAddress(event.options.remoteAddr, event.options.remotePort);
|
|
@@ -1633,9 +1677,9 @@ export class NetworkDispatcher implements ProtocolProxyApi.NetworkDispatcher {
|
|
|
1633
1677
|
protected createNetworkRequest(
|
|
1634
1678
|
requestId: Protocol.Network.RequestId, frameId: Protocol.Page.FrameId, loaderId: Protocol.Network.LoaderId,
|
|
1635
1679
|
url: string, documentURL: string, initiator: Protocol.Network.Initiator|null): NetworkRequest {
|
|
1636
|
-
const request = NetworkRequest.create(
|
|
1637
|
-
|
|
1638
|
-
|
|
1680
|
+
const request = NetworkRequest.create(requestId, url as Platform.DevToolsPath.UrlString,
|
|
1681
|
+
documentURL as Platform.DevToolsPath.UrlString, frameId, loaderId, initiator,
|
|
1682
|
+
undefined, this.#manager.target().targetManager().getConsole());
|
|
1639
1683
|
requestToManagerMap.set(request, this.#manager);
|
|
1640
1684
|
return request;
|
|
1641
1685
|
}
|
|
@@ -1964,6 +2008,7 @@ export class RequestConditions extends Common.ObjectWrapper.ObjectWrapper<Reques
|
|
|
1964
2008
|
promises.push(agent
|
|
1965
2009
|
.invoke_emulateNetworkConditionsByRule({
|
|
1966
2010
|
offline,
|
|
2011
|
+
emulateOfflineServiceWorker: offline,
|
|
1967
2012
|
matchedNetworkConditions: matchedNetworkConditions.map(
|
|
1968
2013
|
({urlPattern, conditions}) => ({
|
|
1969
2014
|
urlPattern: urlPattern ?? '',
|
|
@@ -1974,6 +2019,7 @@ export class RequestConditions extends Common.ObjectWrapper.ObjectWrapper<Reques
|
|
|
1974
2019
|
packetQueueLength: conditions.packetQueueLength,
|
|
1975
2020
|
packetReordering: conditions.packetReordering,
|
|
1976
2021
|
connectionType: NetworkManager.connectionType(conditions),
|
|
2022
|
+
offline,
|
|
1977
2023
|
}))
|
|
1978
2024
|
})
|
|
1979
2025
|
.then(response => {
|
|
@@ -296,7 +296,9 @@ export class NetworkRequest extends Common.ObjectWrapper.ObjectWrapper<EventType
|
|
|
296
296
|
directSocketInfo?: DirectSocketInfo;
|
|
297
297
|
readonly #directSocketChunks: DirectSocketChunk[] = [];
|
|
298
298
|
#isAdRelated: boolean;
|
|
299
|
+
#isLinkPreload: boolean;
|
|
299
300
|
#appliedNetworkConditionsId?: string;
|
|
301
|
+
readonly #console: Common.Console.Console;
|
|
300
302
|
|
|
301
303
|
constructor(
|
|
302
304
|
requestId: string,
|
|
@@ -307,6 +309,7 @@ export class NetworkRequest extends Common.ObjectWrapper.ObjectWrapper<EventType
|
|
|
307
309
|
loaderId: Protocol.Network.LoaderId|null,
|
|
308
310
|
initiator: Protocol.Network.Initiator|null,
|
|
309
311
|
hasUserGesture?: boolean,
|
|
312
|
+
console: Common.Console.Console = Common.Console.Console.instance(),
|
|
310
313
|
) {
|
|
311
314
|
super();
|
|
312
315
|
|
|
@@ -319,6 +322,8 @@ export class NetworkRequest extends Common.ObjectWrapper.ObjectWrapper<EventType
|
|
|
319
322
|
this.#initiator = initiator;
|
|
320
323
|
this.#hasUserGesture = hasUserGesture;
|
|
321
324
|
this.#isAdRelated = false;
|
|
325
|
+
this.#isLinkPreload = false;
|
|
326
|
+
this.#console = console;
|
|
322
327
|
}
|
|
323
328
|
|
|
324
329
|
static create(
|
|
@@ -329,6 +334,7 @@ export class NetworkRequest extends Common.ObjectWrapper.ObjectWrapper<EventType
|
|
|
329
334
|
loaderId: Protocol.Network.LoaderId|null,
|
|
330
335
|
initiator: Protocol.Network.Initiator|null,
|
|
331
336
|
hasUserGesture?: boolean,
|
|
337
|
+
console?: Common.Console.Console,
|
|
332
338
|
): NetworkRequest {
|
|
333
339
|
return new NetworkRequest(
|
|
334
340
|
backendRequestId,
|
|
@@ -339,6 +345,7 @@ export class NetworkRequest extends Common.ObjectWrapper.ObjectWrapper<EventType
|
|
|
339
345
|
loaderId,
|
|
340
346
|
initiator,
|
|
341
347
|
hasUserGesture,
|
|
348
|
+
console,
|
|
342
349
|
);
|
|
343
350
|
}
|
|
344
351
|
|
|
@@ -346,6 +353,7 @@ export class NetworkRequest extends Common.ObjectWrapper.ObjectWrapper<EventType
|
|
|
346
353
|
backendRequestId: Protocol.Network.RequestId,
|
|
347
354
|
requestURL: Platform.DevToolsPath.UrlString,
|
|
348
355
|
initiator?: Protocol.Network.Initiator,
|
|
356
|
+
console?: Common.Console.Console,
|
|
349
357
|
): NetworkRequest {
|
|
350
358
|
return new NetworkRequest(
|
|
351
359
|
backendRequestId,
|
|
@@ -355,6 +363,8 @@ export class NetworkRequest extends Common.ObjectWrapper.ObjectWrapper<EventType
|
|
|
355
363
|
null,
|
|
356
364
|
null,
|
|
357
365
|
initiator || null,
|
|
366
|
+
undefined,
|
|
367
|
+
console,
|
|
358
368
|
);
|
|
359
369
|
}
|
|
360
370
|
|
|
@@ -363,6 +373,7 @@ export class NetworkRequest extends Common.ObjectWrapper.ObjectWrapper<EventType
|
|
|
363
373
|
url: Platform.DevToolsPath.UrlString,
|
|
364
374
|
documentURL: Platform.DevToolsPath.UrlString,
|
|
365
375
|
initiator: Protocol.Network.Initiator|null,
|
|
376
|
+
console?: Common.Console.Console,
|
|
366
377
|
): NetworkRequest {
|
|
367
378
|
return new NetworkRequest(
|
|
368
379
|
requestId,
|
|
@@ -372,6 +383,8 @@ export class NetworkRequest extends Common.ObjectWrapper.ObjectWrapper<EventType
|
|
|
372
383
|
null,
|
|
373
384
|
null,
|
|
374
385
|
initiator,
|
|
386
|
+
undefined,
|
|
387
|
+
console,
|
|
375
388
|
);
|
|
376
389
|
}
|
|
377
390
|
|
|
@@ -909,6 +922,11 @@ export class NetworkRequest extends Common.ObjectWrapper.ObjectWrapper<EventType
|
|
|
909
922
|
this.#initiator.type === Protocol.Network.InitiatorType.Preflight);
|
|
910
923
|
}
|
|
911
924
|
|
|
925
|
+
isPreloadRequest(): boolean {
|
|
926
|
+
return (this.#initiator !== null && this.#initiator !== undefined &&
|
|
927
|
+
this.#initiator.type === Protocol.Network.InitiatorType.Preload);
|
|
928
|
+
}
|
|
929
|
+
|
|
912
930
|
redirectDestination(): NetworkRequest|null {
|
|
913
931
|
return this.#redirectDestination;
|
|
914
932
|
}
|
|
@@ -960,6 +978,15 @@ export class NetworkRequest extends Common.ObjectWrapper.ObjectWrapper<EventType
|
|
|
960
978
|
this.#formParametersPromise = null;
|
|
961
979
|
}
|
|
962
980
|
|
|
981
|
+
/**
|
|
982
|
+
* Returns the raw request body as ContentData, preserving base64 encoding
|
|
983
|
+
* for binary payloads. This enables binary viewers (hex, base64, utf-8)
|
|
984
|
+
* in the Payload tab.
|
|
985
|
+
*/
|
|
986
|
+
requestFormDataContentData(): Promise<TextUtils.ContentData.ContentDataOrError> {
|
|
987
|
+
return NetworkManager.requestPostDataContentData(this);
|
|
988
|
+
}
|
|
989
|
+
|
|
963
990
|
private filteredProtocolName(): string {
|
|
964
991
|
const protocol = this.protocol.toLowerCase();
|
|
965
992
|
if (protocol === 'h2') {
|
|
@@ -1201,7 +1228,8 @@ export class NetworkRequest extends Common.ObjectWrapper.ObjectWrapper<EventType
|
|
|
1201
1228
|
get serverTimings(): ServerTiming[]|null {
|
|
1202
1229
|
if (typeof this.#serverTimings === 'undefined') {
|
|
1203
1230
|
this.#serverTimings = ServerTiming.parseHeaders(
|
|
1204
|
-
this.responseHeaders,
|
|
1231
|
+
this.responseHeaders.map(x => ({name: x.name, value: x.value})),
|
|
1232
|
+
this.#console,
|
|
1205
1233
|
);
|
|
1206
1234
|
}
|
|
1207
1235
|
return this.#serverTimings;
|
|
@@ -1837,6 +1865,14 @@ export class NetworkRequest extends Common.ObjectWrapper.ObjectWrapper<EventType
|
|
|
1837
1865
|
return this.#isAdRelated;
|
|
1838
1866
|
}
|
|
1839
1867
|
|
|
1868
|
+
setIsLinkPreload(isLinkPreload: boolean): void {
|
|
1869
|
+
this.#isLinkPreload = isLinkPreload;
|
|
1870
|
+
}
|
|
1871
|
+
|
|
1872
|
+
isLinkPreload(): boolean {
|
|
1873
|
+
return this.#isLinkPreload;
|
|
1874
|
+
}
|
|
1875
|
+
|
|
1840
1876
|
getAssociatedData(key: string): object|null {
|
|
1841
1877
|
return this.#associatedData.get(key) || null;
|
|
1842
1878
|
}
|