chrome-devtools-frontend 1.0.1650232 → 1.0.1651641
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 +5 -1
- package/config/typescript/tsconfig.base.json +1 -0
- package/front_end/core/host/InspectorFrontendHostAPI.ts +0 -1
- package/front_end/core/host/UserMetrics.ts +0 -11
- package/front_end/core/sdk/CSSMatchedStyles.ts +20 -4
- package/front_end/devtools_compatibility.js +1 -2
- package/front_end/entrypoints/heap_snapshot_worker/HeapSnapshot.ts +94 -0
- package/front_end/foundation/Universe.ts +7 -0
- package/front_end/generated/InspectorBackendCommands.ts +4 -1
- package/front_end/generated/SupportedCSSProperties.js +284 -0
- package/front_end/generated/protocol-mapping.d.ts +7 -0
- package/front_end/generated/protocol-proxy-api.d.ts +5 -0
- package/front_end/generated/protocol.ts +60 -0
- package/front_end/models/ai_assistance/AiAgent2.ts +11 -1
- package/front_end/models/ai_assistance/README.md +4 -0
- package/front_end/models/ai_assistance/agents/AccessibilityAgent.ts +2 -0
- package/front_end/models/ai_assistance/agents/AiAgent.ts +3 -0
- package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +2 -0
- package/front_end/models/ai_assistance/ai_assistance.ts +4 -0
- package/front_end/models/ai_assistance/skills/Skill.ts +1 -1
- package/front_end/models/ai_assistance/skills/SkillRegistry.ts +2 -0
- package/front_end/models/ai_assistance/skills/accessibility.md +13 -0
- package/front_end/models/ai_assistance/tools/GetLighthouseAudits.ts +54 -0
- package/front_end/models/ai_assistance/tools/ResolveLighthousePath.ts +124 -0
- package/front_end/models/ai_assistance/tools/Tool.ts +12 -2
- package/front_end/models/ai_assistance/tools/ToolRegistry.ts +4 -0
- package/front_end/models/heap_snapshot/HeapSnapshotModel.ts +14 -0
- package/front_end/models/heap_snapshot/HeapSnapshotProxy.ts +4 -0
- package/front_end/models/javascript_metadata/NativeFunctions.js +4 -0
- package/front_end/models/persistence/NetworkPersistenceManager.ts +9 -1
- package/front_end/panels/ai_assistance/components/ChatMessage.ts +3 -11
- package/front_end/panels/common/ExtensionServer.ts +70 -50
- package/front_end/panels/elements/CSSSpecificityBreakdown.ts +106 -0
- package/front_end/panels/elements/ElementsPanel.ts +1 -1
- package/front_end/panels/elements/StylePropertiesSection.ts +40 -13
- package/front_end/panels/elements/StylePropertyTreeElement.ts +6 -5
- package/front_end/panels/elements/components/CSSQuery.ts +119 -4
- package/front_end/panels/elements/elements.ts +3 -0
- package/front_end/panels/elements/stylesSidebarPane.css +34 -0
- package/front_end/panels/js_timeline/js_timeline-meta.ts +1 -2
- package/front_end/panels/layer_viewer/PaintProfilerView.ts +0 -3
- package/front_end/panels/network/RequestHeadersView.ts +2 -2
- package/front_end/panels/network/components/RequestHeadersView.css +1 -0
- package/front_end/panels/network/components/ResponseHeaderSection.css +5 -1
- package/front_end/panels/recorder/testing/RecorderHelpers.ts +2 -0
- package/front_end/panels/timeline/timeline-meta.ts +1 -1
- 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/README.md +14 -0
- package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.d.ts +60 -24
- package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +271 -164
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Browser.d.ts +2 -6
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Browser.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Browser.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Browser.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/BrowserContext.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/BrowserContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/HTTPRequest.js +11 -7
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/HTTPRequest.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/JSHandle.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/JSHandle.js +3 -10
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/JSHandle.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.d.ts +9 -4
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.js +4 -4
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/WebWorker.d.ts +13 -0
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/WebWorker.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/WebWorker.js +14 -0
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/WebWorker.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/locators/locators.js +5 -5
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/locators/locators.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/BidiOverCdp.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/BidiOverCdp.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Browser.js +3 -3
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Browser.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/BrowserConnector.js +5 -3
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/BrowserConnector.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/BrowserContext.js +6 -6
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/BrowserContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Connection.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Connection.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Connection.js +3 -3
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Connection.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Deserializer.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Deserializer.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/ExposedFunction.js +6 -6
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/ExposedFunction.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Frame.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Frame.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Page.d.ts +1 -0
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Page.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Page.js +3 -0
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Page.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Realm.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Realm.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/core/BrowsingContext.d.ts +1 -0
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/core/BrowsingContext.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/core/BrowsingContext.js +11 -0
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/core/BrowsingContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Accessibility.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Accessibility.js +4 -4
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Accessibility.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Binding.js +3 -3
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Binding.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.js +13 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/BrowserConnector.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/BrowserConnector.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Connection.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Connection.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Coverage.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Coverage.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/ElementHandle.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/ElementHandle.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/EmulationManager.d.ts +1 -0
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/EmulationManager.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/EmulationManager.js +25 -4
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/EmulationManager.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/ExecutionContext.js +3 -3
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/ExecutionContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Extension.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Extension.js +9 -11
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Extension.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Frame.js +3 -3
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Frame.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/FrameManager.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/FrameManager.js +7 -7
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/FrameManager.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/HTTPRequest.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/HTTPRequest.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/JSHandle.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/JSHandle.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/NetworkManager.d.ts +3 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/NetworkManager.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/NetworkManager.js +18 -10
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/NetworkManager.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Page.d.ts +1 -0
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Page.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Page.js +17 -11
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Page.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Target.js +3 -3
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Target.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/TargetManager.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/TargetManager.js +28 -10
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/TargetManager.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/WebMCP.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/WebMCP.js +10 -6
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/WebMCP.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/WebWorker.d.ts +3 -0
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/WebWorker.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/WebWorker.js +20 -5
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/WebWorker.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/BrowserConnector.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/BrowserConnector.js +11 -0
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/BrowserConnector.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/BrowserWebSocketTransport.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/BrowserWebSocketTransport.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/CallbackRegistry.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/CallbackRegistry.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/Configuration.d.ts +4 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/Configuration.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/ConnectOptions.d.ts +26 -13
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/ConnectOptions.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/Debug.d.ts +1 -6
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/Debug.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/Debug.js +24 -33
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/Debug.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/EventEmitter.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/EventEmitter.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/util.d.ts +8 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/util.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/util.js +8 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/util.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/environment.d.ts +2 -0
- package/front_end/third_party/puppeteer/package/lib/puppeteer/environment.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/environment.js +4 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/environment.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/injected/TextContent.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/injected/TextContent.js +15 -5
- package/front_end/third_party/puppeteer/package/lib/puppeteer/injected/TextContent.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/node/BrowserLauncher.d.ts +5 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/node/BrowserLauncher.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/node/BrowserLauncher.js +17 -16
- package/front_end/third_party/puppeteer/package/lib/puppeteer/node/BrowserLauncher.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/node/ChromeLauncher.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/node/ChromeLauncher.js +14 -9
- package/front_end/third_party/puppeteer/package/lib/puppeteer/node/ChromeLauncher.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/node/FirefoxLauncher.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/node/FirefoxLauncher.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/node/NodeWebSocketTransport.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/node/NodeWebSocketTransport.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/node/PipeTransport.js +3 -3
- package/front_end/third_party/puppeteer/package/lib/puppeteer/node/PipeTransport.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/node/ScreenRecorder.d.ts +20 -0
- package/front_end/third_party/puppeteer/package/lib/puppeteer/node/ScreenRecorder.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/node/ScreenRecorder.js +38 -9
- package/front_end/third_party/puppeteer/package/lib/puppeteer/node/ScreenRecorder.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/node-env-setup.d.ts +7 -0
- package/front_end/third_party/puppeteer/package/lib/puppeteer/node-env-setup.d.ts.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/puppeteer/node-env-setup.js +16 -0
- package/front_end/third_party/puppeteer/package/lib/puppeteer/node-env-setup.js.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/puppeteer/puppeteer-core.d.ts +1 -0
- package/front_end/third_party/puppeteer/package/lib/puppeteer/puppeteer-core.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/puppeteer-core.js +3 -8
- package/front_end/third_party/puppeteer/package/lib/puppeteer/puppeteer-core.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/revisions.d.ts +3 -3
- package/front_end/third_party/puppeteer/package/lib/puppeteer/revisions.js +3 -3
- package/front_end/third_party/puppeteer/package/lib/puppeteer/revisions.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/util/version.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/util/version.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/types.d.ts +60 -24
- package/front_end/third_party/puppeteer/package/package.json +4 -4
- package/front_end/third_party/puppeteer/package/src/api/Browser.ts +4 -8
- package/front_end/third_party/puppeteer/package/src/api/BrowserContext.ts +2 -2
- package/front_end/third_party/puppeteer/package/src/api/HTTPRequest.ts +10 -10
- package/front_end/third_party/puppeteer/package/src/api/JSHandle.ts +3 -10
- package/front_end/third_party/puppeteer/package/src/api/Page.ts +14 -8
- package/front_end/third_party/puppeteer/package/src/api/WebWorker.ts +30 -0
- package/front_end/third_party/puppeteer/package/src/api/locators/locators.ts +5 -5
- package/front_end/third_party/puppeteer/package/src/bidi/BidiOverCdp.ts +2 -2
- package/front_end/third_party/puppeteer/package/src/bidi/Browser.ts +3 -3
- package/front_end/third_party/puppeteer/package/src/bidi/BrowserConnector.ts +5 -3
- package/front_end/third_party/puppeteer/package/src/bidi/BrowserContext.ts +6 -6
- package/front_end/third_party/puppeteer/package/src/bidi/Connection.ts +4 -4
- package/front_end/third_party/puppeteer/package/src/bidi/Deserializer.ts +2 -2
- package/front_end/third_party/puppeteer/package/src/bidi/ExposedFunction.ts +6 -6
- package/front_end/third_party/puppeteer/package/src/bidi/Frame.ts +1 -1
- package/front_end/third_party/puppeteer/package/src/bidi/Page.ts +4 -0
- package/front_end/third_party/puppeteer/package/src/bidi/Realm.ts +1 -1
- package/front_end/third_party/puppeteer/package/src/bidi/core/BrowsingContext.ts +11 -0
- package/front_end/third_party/puppeteer/package/src/cdp/Accessibility.ts +6 -4
- package/front_end/third_party/puppeteer/package/src/cdp/Binding.ts +3 -3
- package/front_end/third_party/puppeteer/package/src/cdp/Browser.ts +14 -2
- package/front_end/third_party/puppeteer/package/src/cdp/BrowserConnector.ts +2 -2
- package/front_end/third_party/puppeteer/package/src/cdp/Connection.ts +2 -2
- package/front_end/third_party/puppeteer/package/src/cdp/Coverage.ts +2 -2
- package/front_end/third_party/puppeteer/package/src/cdp/ElementHandle.ts +1 -1
- package/front_end/third_party/puppeteer/package/src/cdp/EmulationManager.ts +36 -4
- package/front_end/third_party/puppeteer/package/src/cdp/ExecutionContext.ts +3 -3
- package/front_end/third_party/puppeteer/package/src/cdp/Extension.ts +16 -17
- package/front_end/third_party/puppeteer/package/src/cdp/Frame.ts +3 -3
- package/front_end/third_party/puppeteer/package/src/cdp/FrameManager.ts +12 -7
- package/front_end/third_party/puppeteer/package/src/cdp/HTTPRequest.ts +1 -1
- package/front_end/third_party/puppeteer/package/src/cdp/JSHandle.ts +1 -1
- package/front_end/third_party/puppeteer/package/src/cdp/NetworkManager.ts +22 -11
- package/front_end/third_party/puppeteer/package/src/cdp/Page.ts +18 -10
- package/front_end/third_party/puppeteer/package/src/cdp/Target.ts +3 -3
- package/front_end/third_party/puppeteer/package/src/cdp/TargetManager.ts +37 -12
- package/front_end/third_party/puppeteer/package/src/cdp/WebMCP.ts +11 -9
- package/front_end/third_party/puppeteer/package/src/cdp/WebWorker.ts +33 -5
- package/front_end/third_party/puppeteer/package/src/common/BrowserConnector.ts +11 -0
- package/front_end/third_party/puppeteer/package/src/common/BrowserWebSocketTransport.ts +2 -2
- package/front_end/third_party/puppeteer/package/src/common/CallbackRegistry.ts +2 -2
- package/front_end/third_party/puppeteer/package/src/common/Configuration.ts +4 -2
- package/front_end/third_party/puppeteer/package/src/common/ConnectOptions.ts +26 -13
- package/front_end/third_party/puppeteer/package/src/common/Debug.ts +30 -40
- package/front_end/third_party/puppeteer/package/src/common/EventEmitter.ts +2 -2
- package/front_end/third_party/puppeteer/package/src/common/util.ts +9 -1
- package/front_end/third_party/puppeteer/package/src/environment.ts +7 -3
- package/front_end/third_party/puppeteer/package/src/generated/injected.ts +1 -1
- package/front_end/third_party/puppeteer/package/src/injected/TextContent.ts +15 -5
- package/front_end/third_party/puppeteer/package/src/node/BrowserLauncher.ts +23 -23
- package/front_end/third_party/puppeteer/package/src/node/ChromeLauncher.ts +19 -13
- package/front_end/third_party/puppeteer/package/src/node/FirefoxLauncher.ts +2 -2
- package/front_end/third_party/puppeteer/package/src/node/NodeWebSocketTransport.ts +2 -2
- package/front_end/third_party/puppeteer/package/src/node/PipeTransport.ts +3 -3
- package/front_end/third_party/puppeteer/package/src/node/ScreenRecorder.ts +44 -9
- package/front_end/third_party/puppeteer/package/src/node-env-setup.ts +18 -0
- package/front_end/third_party/puppeteer/package/src/puppeteer-core.ts +5 -9
- package/front_end/third_party/puppeteer/package/src/revisions.ts +3 -3
- package/front_end/third_party/puppeteer/package/src/util/version.ts +1 -1
- package/front_end/third_party/puppeteer/puppeteer-tsconfig.json +1 -0
- package/front_end/tsconfig.json +1 -2
- package/inspector_overlay/tsconfig.json +3 -10
- package/mcp/tsconfig.json +1 -5
- package/package.json +1 -2
|
@@ -7,7 +7,7 @@ import type {Protocol} from 'devtools-protocol';
|
|
|
7
7
|
|
|
8
8
|
import {type CDPSession, CDPSessionEvent} from '../api/CDPSession.js';
|
|
9
9
|
import type {GeolocationOptions, MediaFeature} from '../api/Page.js';
|
|
10
|
-
import {debugError} from '../common/util.js';
|
|
10
|
+
import {debugError, debugCatchError} from '../common/util.js';
|
|
11
11
|
import type {Viewport} from '../common/Viewport.js';
|
|
12
12
|
import {assert} from '../util/assert.js';
|
|
13
13
|
import {invokeAtMostOnceForArguments} from '../util/decorators.js';
|
|
@@ -31,6 +31,11 @@ interface TimezoneState {
|
|
|
31
31
|
active: boolean;
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
+
interface LocaleState {
|
|
35
|
+
locale?: string;
|
|
36
|
+
active: boolean;
|
|
37
|
+
}
|
|
38
|
+
|
|
34
39
|
interface VisionDeficiencyState {
|
|
35
40
|
visionDeficiency?: Protocol.Emulation.SetEmulatedVisionDeficiencyRequest['type'];
|
|
36
41
|
active: boolean;
|
|
@@ -148,6 +153,13 @@ export class EmulationManager implements ClientProvider {
|
|
|
148
153
|
this,
|
|
149
154
|
this.#emulateTimezone,
|
|
150
155
|
);
|
|
156
|
+
#localeState = new EmulatedState<LocaleState>(
|
|
157
|
+
{
|
|
158
|
+
active: false,
|
|
159
|
+
},
|
|
160
|
+
this,
|
|
161
|
+
this.#emulateLocale,
|
|
162
|
+
);
|
|
151
163
|
#visionDeficiencyState = new EmulatedState<VisionDeficiencyState>(
|
|
152
164
|
{
|
|
153
165
|
active: false,
|
|
@@ -235,7 +247,7 @@ export class EmulationManager implements ClientProvider {
|
|
|
235
247
|
// the target is unpaused.
|
|
236
248
|
void Promise.all(
|
|
237
249
|
this.#states.map(s => {
|
|
238
|
-
return s.sync().catch(
|
|
250
|
+
return s.sync().catch(debugCatchError);
|
|
239
251
|
}),
|
|
240
252
|
);
|
|
241
253
|
}
|
|
@@ -281,7 +293,7 @@ export class EmulationManager implements ClientProvider {
|
|
|
281
293
|
client.send('Emulation.setTouchEmulationEnabled', {
|
|
282
294
|
enabled: false,
|
|
283
295
|
}),
|
|
284
|
-
]).catch(
|
|
296
|
+
]).catch(debugCatchError);
|
|
285
297
|
return;
|
|
286
298
|
}
|
|
287
299
|
const {viewport} = viewportState;
|
|
@@ -308,7 +320,7 @@ export class EmulationManager implements ClientProvider {
|
|
|
308
320
|
if (
|
|
309
321
|
err.message.includes('Target does not support metrics override')
|
|
310
322
|
) {
|
|
311
|
-
debugError(err);
|
|
323
|
+
debugError?.(err);
|
|
312
324
|
return;
|
|
313
325
|
}
|
|
314
326
|
throw err;
|
|
@@ -374,6 +386,26 @@ export class EmulationManager implements ClientProvider {
|
|
|
374
386
|
});
|
|
375
387
|
}
|
|
376
388
|
|
|
389
|
+
@invokeAtMostOnceForArguments
|
|
390
|
+
async #emulateLocale(
|
|
391
|
+
client: CDPSession,
|
|
392
|
+
localeState: LocaleState,
|
|
393
|
+
): Promise<void> {
|
|
394
|
+
if (!localeState.active) {
|
|
395
|
+
return;
|
|
396
|
+
}
|
|
397
|
+
await client.send('Emulation.setLocaleOverride', {
|
|
398
|
+
locale: localeState.locale,
|
|
399
|
+
});
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
async emulateLocale(locale?: string): Promise<void> {
|
|
403
|
+
await this.#localeState.setState({
|
|
404
|
+
locale,
|
|
405
|
+
active: true,
|
|
406
|
+
});
|
|
407
|
+
}
|
|
408
|
+
|
|
377
409
|
@invokeAtMostOnceForArguments
|
|
378
410
|
async #emulateVisionDeficiency(
|
|
379
411
|
client: CDPSession,
|
|
@@ -159,7 +159,7 @@ export class ExecutionContext
|
|
|
159
159
|
}
|
|
160
160
|
}
|
|
161
161
|
|
|
162
|
-
debugError(error);
|
|
162
|
+
debugError?.(error);
|
|
163
163
|
}
|
|
164
164
|
}
|
|
165
165
|
|
|
@@ -192,7 +192,7 @@ export class ExecutionContext
|
|
|
192
192
|
const binding = this.#bindings.get(name);
|
|
193
193
|
await binding?.run(this, seq, args, isTrivial);
|
|
194
194
|
} catch (err) {
|
|
195
|
-
debugError(err);
|
|
195
|
+
debugError?.(err);
|
|
196
196
|
}
|
|
197
197
|
}
|
|
198
198
|
|
|
@@ -239,7 +239,7 @@ export class ExecutionContext
|
|
|
239
239
|
} catch (err) {
|
|
240
240
|
// If the binding cannot be added, the context is broken. We cannot
|
|
241
241
|
// recover so we ignore the error.
|
|
242
|
-
debugError(err);
|
|
242
|
+
debugError?.(err);
|
|
243
243
|
}
|
|
244
244
|
}
|
|
245
245
|
|
|
@@ -41,24 +41,23 @@ export class CdpExtension extends Extension {
|
|
|
41
41
|
);
|
|
42
42
|
});
|
|
43
43
|
|
|
44
|
-
const workers
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
debugError(err);
|
|
55
|
-
continue;
|
|
44
|
+
const workers = await Promise.all(
|
|
45
|
+
extensionWorkers.map(async target => {
|
|
46
|
+
try {
|
|
47
|
+
return await target.worker();
|
|
48
|
+
} catch (err) {
|
|
49
|
+
if (this.#canIgnoreError(err)) {
|
|
50
|
+
debugError?.(err);
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
throw err;
|
|
56
54
|
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
}
|
|
55
|
+
}),
|
|
56
|
+
);
|
|
60
57
|
|
|
61
|
-
return workers
|
|
58
|
+
return workers.filter((worker): worker is WebWorker => {
|
|
59
|
+
return worker !== null;
|
|
60
|
+
});
|
|
62
61
|
}
|
|
63
62
|
|
|
64
63
|
async pages(): Promise<Page[]> {
|
|
@@ -78,7 +77,7 @@ export class CdpExtension extends Extension {
|
|
|
78
77
|
return await target.asPage();
|
|
79
78
|
} catch (err) {
|
|
80
79
|
if (this.#canIgnoreError(err)) {
|
|
81
|
-
debugError(err);
|
|
80
|
+
debugError?.(err);
|
|
82
81
|
return null;
|
|
83
82
|
}
|
|
84
83
|
throw err;
|
|
@@ -14,7 +14,7 @@ import {Frame, FrameEvent, throwIfDetached} from '../api/Frame.js';
|
|
|
14
14
|
import type {HTTPResponse} from '../api/HTTPResponse.js';
|
|
15
15
|
import type {WaitTimeoutOptions} from '../api/Page.js';
|
|
16
16
|
import {UnsupportedOperation} from '../common/Errors.js';
|
|
17
|
-
import {
|
|
17
|
+
import {debugCatchError} from '../common/util.js';
|
|
18
18
|
import type {Realm} from '../puppeteer-core.js';
|
|
19
19
|
import {Deferred} from '../util/Deferred.js';
|
|
20
20
|
import {disposeSymbol} from '../util/disposable.js';
|
|
@@ -351,7 +351,7 @@ export class CdpFrame extends Frame {
|
|
|
351
351
|
this.#client.send('Runtime.addBinding', {
|
|
352
352
|
name: CDP_BINDING_PREFIX + binding.name,
|
|
353
353
|
}),
|
|
354
|
-
this.evaluate(binding.initSource).catch(
|
|
354
|
+
this.evaluate(binding.initSource).catch(debugCatchError),
|
|
355
355
|
]);
|
|
356
356
|
}
|
|
357
357
|
|
|
@@ -370,7 +370,7 @@ export class CdpFrame extends Frame {
|
|
|
370
370
|
// Removes the dangling Puppeteer binding wrapper.
|
|
371
371
|
// @ts-expect-error: In a different context.
|
|
372
372
|
globalThis[name] = undefined;
|
|
373
|
-
}, binding.name).catch(
|
|
373
|
+
}, binding.name).catch(debugCatchError),
|
|
374
374
|
]);
|
|
375
375
|
}
|
|
376
376
|
|
|
@@ -11,7 +11,12 @@ import {FrameEvent} from '../api/Frame.js';
|
|
|
11
11
|
import {PageEvent, type NewDocumentScriptEvaluation} from '../api/Page.js';
|
|
12
12
|
import {EventEmitter} from '../common/EventEmitter.js';
|
|
13
13
|
import type {TimeoutSettings} from '../common/TimeoutSettings.js';
|
|
14
|
-
import {
|
|
14
|
+
import {
|
|
15
|
+
debugError,
|
|
16
|
+
PuppeteerURL,
|
|
17
|
+
UTILITY_WORLD_NAME,
|
|
18
|
+
debugCatchError,
|
|
19
|
+
} from '../common/util.js';
|
|
15
20
|
import {assert} from '../util/assert.js';
|
|
16
21
|
import {Deferred} from '../util/Deferred.js';
|
|
17
22
|
import {disposeSymbol} from '../util/disposable.js';
|
|
@@ -93,7 +98,7 @@ export class FrameManager extends EventEmitter<FrameManagerEvents> {
|
|
|
93
98
|
this.#timeoutSettings = timeoutSettings;
|
|
94
99
|
this.setupEventListeners(this.#client);
|
|
95
100
|
client.once(CDPSessionEvent.Disconnected, () => {
|
|
96
|
-
this.#onClientDisconnect().catch(
|
|
101
|
+
void this.#onClientDisconnect().catch(debugCatchError);
|
|
97
102
|
});
|
|
98
103
|
}
|
|
99
104
|
|
|
@@ -149,7 +154,7 @@ export class FrameManager extends EventEmitter<FrameManagerEvents> {
|
|
|
149
154
|
}
|
|
150
155
|
this.setupEventListeners(client);
|
|
151
156
|
client.once(CDPSessionEvent.Disconnected, () => {
|
|
152
|
-
this.#onClientDisconnect().catch(
|
|
157
|
+
void this.#onClientDisconnect().catch(debugCatchError);
|
|
153
158
|
});
|
|
154
159
|
await this.initialize(client, frame);
|
|
155
160
|
await this.#networkManager.addClient(client);
|
|
@@ -331,7 +336,7 @@ export class FrameManager extends EventEmitter<FrameManagerEvents> {
|
|
|
331
336
|
.send('Page.removeScriptToEvaluateOnNewDocument', {
|
|
332
337
|
identifier,
|
|
333
338
|
})
|
|
334
|
-
.catch(
|
|
339
|
+
.catch(debugCatchError);
|
|
335
340
|
}),
|
|
336
341
|
);
|
|
337
342
|
}
|
|
@@ -346,7 +351,7 @@ export class FrameManager extends EventEmitter<FrameManagerEvents> {
|
|
|
346
351
|
frame.updateClient(target._session()!);
|
|
347
352
|
}
|
|
348
353
|
this.setupEventListeners(target._session()!);
|
|
349
|
-
void this.initialize(target._session()!, frame).catch(
|
|
354
|
+
void this.initialize(target._session()!, frame).catch(debugCatchError);
|
|
350
355
|
}
|
|
351
356
|
|
|
352
357
|
_deviceRequestPromptManager(
|
|
@@ -500,7 +505,7 @@ export class FrameManager extends EventEmitter<FrameManagerEvents> {
|
|
|
500
505
|
worldName: name,
|
|
501
506
|
grantUniveralAccess: true,
|
|
502
507
|
})
|
|
503
|
-
.catch(
|
|
508
|
+
.catch(debugCatchError);
|
|
504
509
|
}),
|
|
505
510
|
);
|
|
506
511
|
|
|
@@ -583,7 +588,7 @@ export class FrameManager extends EventEmitter<FrameManagerEvents> {
|
|
|
583
588
|
const extId = this.#extractExtensionId(origin);
|
|
584
589
|
|
|
585
590
|
if (!extId) {
|
|
586
|
-
debugError('Error while parsing extension id');
|
|
591
|
+
debugError?.('Error while parsing extension id');
|
|
587
592
|
return;
|
|
588
593
|
}
|
|
589
594
|
|
|
@@ -121,6 +121,6 @@ export async function releaseObject(
|
|
|
121
121
|
.catch(error => {
|
|
122
122
|
// Exceptions might happen in case of a page been navigated or closed.
|
|
123
123
|
// Swallow these since they are harmless and we don't leak anything in this case.
|
|
124
|
-
debugError(error);
|
|
124
|
+
debugError?.(error);
|
|
125
125
|
});
|
|
126
126
|
}
|
|
@@ -8,13 +8,13 @@ import type {Protocol} from 'devtools-protocol';
|
|
|
8
8
|
|
|
9
9
|
import {CDPSessionEvent, type CDPSession} from '../api/CDPSession.js';
|
|
10
10
|
import type {Frame} from '../api/Frame.js';
|
|
11
|
-
import type {Credentials} from '../api/Page.js';
|
|
11
|
+
import type {Credentials, Page} from '../api/Page.js';
|
|
12
12
|
import {EventEmitter} from '../common/EventEmitter.js';
|
|
13
13
|
import {
|
|
14
14
|
NetworkManagerEvent,
|
|
15
15
|
type NetworkManagerEvents,
|
|
16
16
|
} from '../common/NetworkManagerEvents.js';
|
|
17
|
-
import {debugError, isString} from '../common/util.js';
|
|
17
|
+
import {debugError, isString, debugCatchError} from '../common/util.js';
|
|
18
18
|
import {assert} from '../util/assert.js';
|
|
19
19
|
import {DisposableStack} from '../util/disposable.js';
|
|
20
20
|
import {isErrorLike} from '../util/ErrorLike.js';
|
|
@@ -65,6 +65,7 @@ export interface InternalNetworkConditions extends NetworkConditions {
|
|
|
65
65
|
*/
|
|
66
66
|
export interface FrameProvider {
|
|
67
67
|
frame(id: string): Frame | null;
|
|
68
|
+
page(): Page;
|
|
68
69
|
}
|
|
69
70
|
|
|
70
71
|
/**
|
|
@@ -83,6 +84,7 @@ export class NetworkManager extends EventEmitter<NetworkManagerEvents> {
|
|
|
83
84
|
#userAgent?: string;
|
|
84
85
|
#userAgentMetadata?: Protocol.Emulation.UserAgentMetadata;
|
|
85
86
|
#platform?: string;
|
|
87
|
+
#acceptLanguage?: string;
|
|
86
88
|
|
|
87
89
|
readonly #handlers = [
|
|
88
90
|
['Fetch.requestPaused', this.#onRequestPaused],
|
|
@@ -98,7 +100,7 @@ export class NetworkManager extends EventEmitter<NetworkManagerEvents> {
|
|
|
98
100
|
] as const;
|
|
99
101
|
|
|
100
102
|
#clients = new Map<CDPSession, DisposableStack>();
|
|
101
|
-
#networkEnabled
|
|
103
|
+
#networkEnabled: boolean;
|
|
102
104
|
|
|
103
105
|
constructor(frameManager: FrameProvider, networkEnabled?: boolean) {
|
|
104
106
|
super();
|
|
@@ -277,13 +279,22 @@ export class NetworkManager extends EventEmitter<NetworkManagerEvents> {
|
|
|
277
279
|
await this.#applyToAllClients(this.#applyUserAgent.bind(this));
|
|
278
280
|
}
|
|
279
281
|
|
|
282
|
+
async setAcceptLanguage(acceptLanguage: string | undefined): Promise<void> {
|
|
283
|
+
this.#acceptLanguage = acceptLanguage;
|
|
284
|
+
await this.#applyToAllClients(this.#applyUserAgent.bind(this));
|
|
285
|
+
}
|
|
286
|
+
|
|
280
287
|
async #applyUserAgent(client: CDPSession) {
|
|
281
|
-
|
|
288
|
+
const userAgent =
|
|
289
|
+
this.#userAgent ??
|
|
290
|
+
(await this.#frameManager.page().browser().userAgent());
|
|
291
|
+
if (userAgent === undefined) {
|
|
282
292
|
return;
|
|
283
293
|
}
|
|
284
294
|
try {
|
|
285
295
|
await client.send('Network.setUserAgentOverride', {
|
|
286
|
-
userAgent
|
|
296
|
+
userAgent,
|
|
297
|
+
acceptLanguage: this.#acceptLanguage,
|
|
287
298
|
userAgentMetadata: this.#userAgentMetadata,
|
|
288
299
|
platform: this.#platform,
|
|
289
300
|
});
|
|
@@ -403,12 +414,12 @@ export class NetworkManager extends EventEmitter<NetworkManagerEvents> {
|
|
|
403
414
|
username: undefined,
|
|
404
415
|
password: undefined,
|
|
405
416
|
};
|
|
406
|
-
client
|
|
417
|
+
void client
|
|
407
418
|
.send('Fetch.continueWithAuth', {
|
|
408
419
|
requestId: event.requestId,
|
|
409
420
|
authChallengeResponse: {response, username, password},
|
|
410
421
|
})
|
|
411
|
-
.catch(
|
|
422
|
+
.catch(debugCatchError);
|
|
412
423
|
}
|
|
413
424
|
|
|
414
425
|
/**
|
|
@@ -426,11 +437,11 @@ export class NetworkManager extends EventEmitter<NetworkManagerEvents> {
|
|
|
426
437
|
!this.#userRequestInterceptionEnabled &&
|
|
427
438
|
this.#protocolRequestInterceptionEnabled
|
|
428
439
|
) {
|
|
429
|
-
client
|
|
440
|
+
void client
|
|
430
441
|
.send('Fetch.continueRequest', {
|
|
431
442
|
requestId: event.requestId,
|
|
432
443
|
})
|
|
433
|
-
.catch(
|
|
444
|
+
.catch(debugCatchError);
|
|
434
445
|
}
|
|
435
446
|
|
|
436
447
|
const {networkId: networkRequestId, requestId: fetchRequestId} = event;
|
|
@@ -602,7 +613,7 @@ export class NetworkManager extends EventEmitter<NetworkManagerEvents> {
|
|
|
602
613
|
request = this.#networkEventManager.getRequest(event.requestId);
|
|
603
614
|
}
|
|
604
615
|
if (!request) {
|
|
605
|
-
debugError(
|
|
616
|
+
debugError?.(
|
|
606
617
|
new Error(
|
|
607
618
|
`Request ${event.requestId} was served from cache but we could not find the corresponding request object`,
|
|
608
619
|
),
|
|
@@ -646,7 +657,7 @@ export class NetworkManager extends EventEmitter<NetworkManagerEvents> {
|
|
|
646
657
|
responseReceived.requestId,
|
|
647
658
|
);
|
|
648
659
|
if (extraInfos.length) {
|
|
649
|
-
debugError(
|
|
660
|
+
debugError?.(
|
|
650
661
|
new Error(
|
|
651
662
|
'Unexpected extraInfo events for request ' +
|
|
652
663
|
responseReceived.requestId,
|
|
@@ -56,6 +56,7 @@ import {
|
|
|
56
56
|
parsePDFOptions,
|
|
57
57
|
timeout,
|
|
58
58
|
validateDialogType,
|
|
59
|
+
debugCatchError,
|
|
59
60
|
} from '../common/util.js';
|
|
60
61
|
import type {Viewport} from '../common/Viewport.js';
|
|
61
62
|
import {environment} from '../environment.js';
|
|
@@ -126,7 +127,7 @@ export class CdpPage extends Page {
|
|
|
126
127
|
await page.setViewport(defaultViewport);
|
|
127
128
|
} catch (err) {
|
|
128
129
|
if (isErrorLike(err) && isTargetClosedError(err)) {
|
|
129
|
-
debugError(err);
|
|
130
|
+
debugError?.(err);
|
|
130
131
|
} else {
|
|
131
132
|
throw err;
|
|
132
133
|
}
|
|
@@ -246,7 +247,7 @@ export class CdpPage extends Page {
|
|
|
246
247
|
this.#onDetachedFromTarget,
|
|
247
248
|
);
|
|
248
249
|
|
|
249
|
-
this.#tabTarget._isClosedDeferred
|
|
250
|
+
void this.#tabTarget._isClosedDeferred
|
|
250
251
|
.valueOrThrow()
|
|
251
252
|
.then(() => {
|
|
252
253
|
this.#targetManager.off(
|
|
@@ -257,7 +258,7 @@ export class CdpPage extends Page {
|
|
|
257
258
|
this.emit(PageEvent.Close, undefined);
|
|
258
259
|
this.#closed = true;
|
|
259
260
|
})
|
|
260
|
-
.catch(
|
|
261
|
+
.catch(debugCatchError);
|
|
261
262
|
|
|
262
263
|
this.#setupPrimaryTargetListeners();
|
|
263
264
|
this.#attachExistingTargets();
|
|
@@ -309,10 +310,12 @@ export class CdpPage extends Page {
|
|
|
309
310
|
if (session.target()._subtype() !== 'prerender') {
|
|
310
311
|
return;
|
|
311
312
|
}
|
|
312
|
-
this.#frameManager
|
|
313
|
-
this.#emulationManager
|
|
313
|
+
void this.#frameManager
|
|
314
314
|
.registerSpeculativeSession(session)
|
|
315
|
-
.catch(
|
|
315
|
+
.catch(debugCatchError);
|
|
316
|
+
void this.#emulationManager
|
|
317
|
+
.registerSpeculativeSession(session)
|
|
318
|
+
.catch(debugCatchError);
|
|
316
319
|
}
|
|
317
320
|
|
|
318
321
|
/**
|
|
@@ -378,7 +381,7 @@ export class CdpPage extends Page {
|
|
|
378
381
|
// eslint-disable-next-line max-len -- The comment is long.
|
|
379
382
|
// eslint-disable-next-line @puppeteer/use-using -- These are not owned by this function.
|
|
380
383
|
for (const arg of message.args()) {
|
|
381
|
-
void arg.dispose().catch(
|
|
384
|
+
void arg.dispose().catch(debugCatchError);
|
|
382
385
|
}
|
|
383
386
|
return;
|
|
384
387
|
}
|
|
@@ -402,7 +405,7 @@ export class CdpPage extends Page {
|
|
|
402
405
|
]);
|
|
403
406
|
} catch (err) {
|
|
404
407
|
if (isErrorLike(err) && isTargetClosedError(err)) {
|
|
405
|
-
debugError(err);
|
|
408
|
+
debugError?.(err);
|
|
406
409
|
} else {
|
|
407
410
|
throw err;
|
|
408
411
|
}
|
|
@@ -950,7 +953,7 @@ export class CdpPage extends Page {
|
|
|
950
953
|
// eslint-disable-next-line max-len -- The comment is long.
|
|
951
954
|
// eslint-disable-next-line @puppeteer/use-using -- These are not owned by this function.
|
|
952
955
|
for (const value of values) {
|
|
953
|
-
void value.dispose().catch(
|
|
956
|
+
void value.dispose().catch(debugCatchError);
|
|
954
957
|
}
|
|
955
958
|
}
|
|
956
959
|
return;
|
|
@@ -1085,6 +1088,11 @@ export class CdpPage extends Page {
|
|
|
1085
1088
|
return await this.#emulationManager.emulateTimezone(timezoneId);
|
|
1086
1089
|
}
|
|
1087
1090
|
|
|
1091
|
+
override async emulateLocale(locale?: string): Promise<void> {
|
|
1092
|
+
await this.#emulationManager.emulateLocale(locale);
|
|
1093
|
+
await this.#frameManager.networkManager.setAcceptLanguage(locale);
|
|
1094
|
+
}
|
|
1095
|
+
|
|
1088
1096
|
override async emulateIdleState(overrides?: {
|
|
1089
1097
|
isUserActive: boolean;
|
|
1090
1098
|
isScreenUnlocked: boolean;
|
|
@@ -1152,7 +1160,7 @@ export class CdpPage extends Page {
|
|
|
1152
1160
|
stack.defer(async () => {
|
|
1153
1161
|
await this.#emulationManager
|
|
1154
1162
|
.resetDefaultBackgroundColor()
|
|
1155
|
-
.catch(
|
|
1163
|
+
.catch(debugCatchError);
|
|
1156
1164
|
});
|
|
1157
1165
|
}
|
|
1158
1166
|
|
|
@@ -10,7 +10,7 @@ import type {Browser} from '../api/Browser.js';
|
|
|
10
10
|
import type {BrowserContext} from '../api/BrowserContext.js';
|
|
11
11
|
import {PageEvent, type Page} from '../api/Page.js';
|
|
12
12
|
import {Target, TargetType} from '../api/Target.js';
|
|
13
|
-
import {
|
|
13
|
+
import {debugCatchError} from '../common/util.js';
|
|
14
14
|
import type {Viewport} from '../common/Viewport.js';
|
|
15
15
|
import {Deferred} from '../util/Deferred.js';
|
|
16
16
|
|
|
@@ -233,7 +233,7 @@ export class PageTarget extends CdpTarget {
|
|
|
233
233
|
}
|
|
234
234
|
|
|
235
235
|
override _initialize(): void {
|
|
236
|
-
this._initializedDeferred
|
|
236
|
+
void this._initializedDeferred
|
|
237
237
|
.valueOrThrow()
|
|
238
238
|
.then(async result => {
|
|
239
239
|
if (result === InitializationStatus.ABORTED) {
|
|
@@ -254,7 +254,7 @@ export class PageTarget extends CdpTarget {
|
|
|
254
254
|
openerPage.emit(PageEvent.Popup, popupPage);
|
|
255
255
|
return true;
|
|
256
256
|
})
|
|
257
|
-
.catch(
|
|
257
|
+
.catch(debugCatchError);
|
|
258
258
|
this._checkIfInitialized();
|
|
259
259
|
}
|
|
260
260
|
|
|
@@ -11,7 +11,7 @@ import type {TargetFilterCallback} from '../api/Browser.js';
|
|
|
11
11
|
import type {CDPSession} from '../api/CDPSession.js';
|
|
12
12
|
import {CDPSessionEvent} from '../api/CDPSession.js';
|
|
13
13
|
import {EventEmitter} from '../common/EventEmitter.js';
|
|
14
|
-
import {
|
|
14
|
+
import {debugCatchError} from '../common/util.js';
|
|
15
15
|
import {assert} from '../util/assert.js';
|
|
16
16
|
import {Deferred} from '../util/Deferred.js';
|
|
17
17
|
|
|
@@ -229,14 +229,16 @@ export class TargetManager
|
|
|
229
229
|
session: CdpCDPSession,
|
|
230
230
|
parentSession: Connection | CDPSession,
|
|
231
231
|
): Promise<void> => {
|
|
232
|
-
await session
|
|
232
|
+
await session
|
|
233
|
+
.send('Runtime.runIfWaitingForDebugger')
|
|
234
|
+
.catch(debugCatchError);
|
|
233
235
|
// We don't use `session.detach()` because that dispatches all commands on
|
|
234
236
|
// the connection instead of the parent session.
|
|
235
237
|
await parentSession
|
|
236
238
|
.send('Target.detachFromTarget', {
|
|
237
239
|
sessionId: session.id(),
|
|
238
240
|
})
|
|
239
|
-
.catch(
|
|
241
|
+
.catch(debugCatchError);
|
|
240
242
|
};
|
|
241
243
|
|
|
242
244
|
#getParentTarget = (
|
|
@@ -342,6 +344,7 @@ export class TargetManager
|
|
|
342
344
|
}
|
|
343
345
|
|
|
344
346
|
if (!this.#connection.isAutoAttached(targetInfo.targetId)) {
|
|
347
|
+
await this.#maybeSetupNetworkConditions(session, targetInfo);
|
|
345
348
|
return;
|
|
346
349
|
}
|
|
347
350
|
|
|
@@ -360,6 +363,13 @@ export class TargetManager
|
|
|
360
363
|
// should determine if a target is auto-attached or not with the help of
|
|
361
364
|
// CDP.
|
|
362
365
|
if (targetInfo.type === 'service_worker') {
|
|
366
|
+
if (!this.isUrlAllowed(targetInfo.url)) {
|
|
367
|
+
await Promise.all([
|
|
368
|
+
this.#maybeSetupNetworkConditions(session, targetInfo),
|
|
369
|
+
session.send('Runtime.runIfWaitingForDebugger'),
|
|
370
|
+
]).catch(debugCatchError);
|
|
371
|
+
return;
|
|
372
|
+
}
|
|
363
373
|
await this.#silentDetach(session, parentSession);
|
|
364
374
|
if (
|
|
365
375
|
this.#attachedTargetsByTargetId.has(targetInfo.targetId) ||
|
|
@@ -427,8 +437,8 @@ export class TargetManager
|
|
|
427
437
|
this.#finishInitializationIfReady(parentTarget._targetId);
|
|
428
438
|
}
|
|
429
439
|
|
|
430
|
-
//
|
|
431
|
-
//
|
|
440
|
+
// The browser might be shutting down here, so we
|
|
441
|
+
// ignore potential errors.
|
|
432
442
|
await Promise.all([
|
|
433
443
|
session.send('Target.setAutoAttach', {
|
|
434
444
|
waitForDebuggerOnStart: true,
|
|
@@ -436,9 +446,9 @@ export class TargetManager
|
|
|
436
446
|
autoAttach: true,
|
|
437
447
|
filter: this.#discoveryFilter,
|
|
438
448
|
}),
|
|
439
|
-
this.#maybeSetupNetworkConditions(session),
|
|
449
|
+
this.#maybeSetupNetworkConditions(session, targetInfo),
|
|
440
450
|
session.send('Runtime.runIfWaitingForDebugger'),
|
|
441
|
-
]).catch(
|
|
451
|
+
]).catch(debugCatchError);
|
|
442
452
|
};
|
|
443
453
|
|
|
444
454
|
#finishInitializationIfReady(targetId?: string): void {
|
|
@@ -512,7 +522,10 @@ export class TargetManager
|
|
|
512
522
|
return result;
|
|
513
523
|
}
|
|
514
524
|
|
|
515
|
-
#maybeSetupNetworkConditions = async (
|
|
525
|
+
#maybeSetupNetworkConditions = async (
|
|
526
|
+
session: CDPSession,
|
|
527
|
+
targetInfo: Protocol.Target.TargetInfo,
|
|
528
|
+
): Promise<void> => {
|
|
516
529
|
if (this.#blocklist.length === 0 && this.#allowlist.length === 0) {
|
|
517
530
|
return;
|
|
518
531
|
}
|
|
@@ -547,9 +560,21 @@ export class TargetManager
|
|
|
547
560
|
});
|
|
548
561
|
}
|
|
549
562
|
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
563
|
+
const needsNetwork =
|
|
564
|
+
targetInfo.type === 'worker' ||
|
|
565
|
+
targetInfo.type === 'service_worker' ||
|
|
566
|
+
targetInfo.type === 'shared_worker';
|
|
567
|
+
|
|
568
|
+
const promises = [];
|
|
569
|
+
if (needsNetwork) {
|
|
570
|
+
promises.push(session.send('Network.enable'));
|
|
571
|
+
}
|
|
572
|
+
promises.push(
|
|
573
|
+
session.send('Network.emulateNetworkConditionsByRule', {
|
|
574
|
+
offline: this.#blocklist.length > 0 ? true : undefined,
|
|
575
|
+
matchedNetworkConditions,
|
|
576
|
+
}),
|
|
577
|
+
);
|
|
578
|
+
await Promise.all(promises).catch(debugCatchError);
|
|
554
579
|
};
|
|
555
580
|
}
|