chrome-devtools-frontend 1.0.1565595 → 1.0.1567721
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/docs/contributing/performance.md +24 -0
- package/front_end/Images/src/lock-person.svg +1 -0
- package/front_end/core/common/Base64.ts +21 -2
- package/front_end/core/common/ResourceType.ts +7 -0
- package/front_end/core/host/InspectorFrontendHostStub.ts +3 -0
- package/front_end/core/host/UserMetrics.ts +20 -0
- package/front_end/core/root/Runtime.ts +5 -0
- package/front_end/core/sdk/DOMModel.ts +32 -2
- package/front_end/core/sdk/NetworkManager.ts +16 -3
- package/front_end/core/sdk/ResourceTreeModel.ts +11 -6
- package/front_end/entrypoints/main/MainImpl.ts +1 -7
- package/front_end/generated/Deprecation.ts +0 -8
- package/front_end/generated/InspectorBackendCommands.ts +10 -1
- package/front_end/generated/SupportedCSSProperties.js +48 -62
- package/front_end/generated/protocol-mapping.d.ts +4 -0
- package/front_end/generated/protocol-proxy-api.d.ts +5 -0
- package/front_end/generated/protocol.ts +203 -0
- package/front_end/models/ai_assistance/agents/AiAgent.ts +2 -1
- package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +98 -105
- package/front_end/models/emulation/DeviceModeModel.ts +1 -1
- package/front_end/models/formatter/FormatterWorkerPool.ts +8 -6
- package/front_end/models/javascript_metadata/NativeFunctions.js +4 -9
- package/front_end/models/persistence/PersistenceImpl.ts +8 -0
- package/front_end/models/text_utils/TextUtils.snapshot.txt +83 -0
- package/front_end/panels/ai_assistance/ai_assistance-meta.ts +0 -1
- package/front_end/panels/ai_assistance/components/ArtifactsViewer.ts +28 -4
- package/front_end/panels/ai_assistance/components/ChatView.ts +52 -169
- package/front_end/panels/ai_assistance/components/CollapsibleAssistanceContentWidget.ts +27 -8
- package/front_end/panels/ai_assistance/components/PerformanceAgentMarkdownRenderer.ts +19 -4
- package/front_end/panels/application/ApplicationPanelSidebar.ts +29 -0
- package/front_end/panels/application/ApplicationPanelTreeElement.ts +12 -0
- package/front_end/panels/application/DeviceBoundSessionsModel.ts +169 -0
- package/front_end/panels/application/DeviceBoundSessionsTreeElement.ts +219 -0
- package/front_end/panels/application/DeviceBoundSessionsView.ts +1096 -0
- package/front_end/panels/application/ResourcesPanel.ts +19 -0
- package/front_end/panels/application/application.ts +6 -0
- package/front_end/panels/application/deviceBoundSessionsView.css +27 -0
- package/front_end/panels/common/AiCodeGenerationUpgradeDialog.ts +115 -0
- package/front_end/panels/common/aiCodeGenerationUpgradeDialog.css +79 -0
- package/front_end/panels/common/common.ts +1 -0
- package/front_end/panels/console/ConsoleInsightTeaser.ts +41 -8
- package/front_end/panels/console/ConsoleViewMessage.ts +20 -13
- package/front_end/panels/elements/ElementsTreeOutline.ts +13 -0
- package/front_end/panels/elements/MetricsSidebarPane.ts +3 -1
- package/front_end/panels/issues/AffectedSourcesView.ts +0 -1
- package/front_end/panels/issues/IssuesPane.ts +0 -4
- package/front_end/panels/network/RequestTimingView.ts +5 -20
- package/front_end/panels/network/networkTimingTable.css +5 -5
- package/front_end/panels/recorder/components/StepEditor.ts +15 -8
- package/front_end/panels/security/SecurityPanelSidebar.ts +0 -1
- package/front_end/panels/settings/AISettingsTab.ts +31 -2
- package/front_end/panels/sources/InplaceFormatterEditorAction.ts +8 -6
- package/front_end/panels/sources/UISourceCodeFrame.ts +9 -3
- package/front_end/panels/timeline/TimelinePanel.ts +12 -4
- package/front_end/panels/timeline/components/insights/DuplicatedJavaScript.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/lib/cjs/puppeteer/api/Browser.d.ts +9 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.d.ts +8 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.js +8 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Browser.d.ts +2 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Browser.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Browser.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Browser.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/BrowserContext.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/BrowserContext.js +3 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/BrowserContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/BrowsingContext.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/BrowsingContext.js +3 -3
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/BrowsingContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/UserContext.d.ts +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/UserContext.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/UserContext.js +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/UserContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.js +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.js +33 -31
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/WebWorker.d.ts +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/WebWorker.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/WebWorker.js +1 -4
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/WebWorker.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ConsoleMessage.d.ts +7 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ConsoleMessage.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ConsoleMessage.js +11 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ConsoleMessage.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Cookie.d.ts +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/injected.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.d.ts +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/Mutex.d.ts +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/version.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/version.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.d.ts +13 -4
- package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +62 -42
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.d.ts +9 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.d.ts +8 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.js +8 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Browser.d.ts +2 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Browser.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Browser.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Browser.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/BrowserContext.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/BrowserContext.js +3 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/BrowserContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/BrowsingContext.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/BrowsingContext.js +3 -3
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/BrowsingContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/UserContext.d.ts +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/UserContext.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/UserContext.js +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/UserContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.js +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.js +33 -31
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/WebWorker.d.ts +2 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/WebWorker.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/WebWorker.js +1 -4
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/WebWorker.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ConsoleMessage.d.ts +7 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ConsoleMessage.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ConsoleMessage.js +11 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ConsoleMessage.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Cookie.d.ts +2 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.d.ts +2 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/version.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/version.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/types.d.ts +13 -4
- package/front_end/third_party/puppeteer/package/package.json +3 -3
- package/front_end/third_party/puppeteer/package/src/api/Browser.ts +11 -3
- package/front_end/third_party/puppeteer/package/src/api/Page.ts +9 -0
- package/front_end/third_party/puppeteer/package/src/bidi/Browser.ts +3 -3
- package/front_end/third_party/puppeteer/package/src/bidi/BrowserContext.ts +3 -1
- package/front_end/third_party/puppeteer/package/src/bidi/Frame.ts +1 -0
- package/front_end/third_party/puppeteer/package/src/bidi/core/BrowsingContext.ts +3 -5
- package/front_end/third_party/puppeteer/package/src/bidi/core/UserContext.ts +2 -0
- package/front_end/third_party/puppeteer/package/src/cdp/Browser.ts +1 -0
- package/front_end/third_party/puppeteer/package/src/cdp/Page.ts +43 -45
- package/front_end/third_party/puppeteer/package/src/cdp/WebWorker.ts +3 -11
- package/front_end/third_party/puppeteer/package/src/common/ConsoleMessage.ts +12 -0
- package/front_end/third_party/puppeteer/package/src/common/Cookie.ts +2 -2
- package/front_end/third_party/puppeteer/package/src/revisions.ts +2 -2
- package/front_end/third_party/puppeteer/package/src/util/version.ts +1 -1
- package/front_end/third_party/source-map-scopes-codec/README.chromium +2 -5
- package/front_end/third_party/source-map-scopes-codec/package/_dist/src/builder/builder.d.ts +1 -1
- package/front_end/third_party/source-map-scopes-codec/package/_dist/src/builder/builder.d.ts.map +1 -1
- package/front_end/third_party/source-map-scopes-codec/package/_dist/src/builder/safe_builder.d.ts +1 -1
- package/front_end/third_party/source-map-scopes-codec/package/_dist/src/builder/safe_builder.d.ts.map +1 -1
- package/front_end/third_party/source-map-scopes-codec/package/_dist/src/decode/decode.d.ts +1 -1
- package/front_end/third_party/source-map-scopes-codec/package/_dist/src/decode/decode.d.ts.map +1 -1
- package/front_end/third_party/source-map-scopes-codec/package/_dist/src/encode/encode.d.ts +1 -1
- package/front_end/third_party/source-map-scopes-codec/package/_dist/src/encode/encode.d.ts.map +1 -1
- package/front_end/third_party/source-map-scopes-codec/package/_dist/src/mod.d.ts +1 -1
- package/front_end/third_party/source-map-scopes-codec/package/_dist/src/mod.d.ts.map +1 -1
- package/front_end/third_party/source-map-scopes-codec/package/_dist/src/scopes.d.ts +130 -0
- package/front_end/third_party/source-map-scopes-codec/package/_dist/src/scopes.d.ts.map +1 -0
- package/front_end/third_party/source-map-scopes-codec/package/deno.json +1 -1
- package/front_end/third_party/source-map-scopes-codec/package/package.json +1 -1
- package/front_end/third_party/source-map-scopes-codec/package/src/builder/builder.ts +1 -1
- package/front_end/third_party/source-map-scopes-codec/package/src/builder/safe_builder.ts +1 -1
- package/front_end/third_party/source-map-scopes-codec/package/src/codec.js +4 -0
- package/front_end/third_party/source-map-scopes-codec/package/src/codec.js.map +1 -1
- package/front_end/third_party/source-map-scopes-codec/package/src/codec.ts +4 -0
- package/front_end/third_party/source-map-scopes-codec/package/src/decode/decode.js +30 -13
- package/front_end/third_party/source-map-scopes-codec/package/src/decode/decode.js.map +1 -1
- package/front_end/third_party/source-map-scopes-codec/package/src/decode/decode.ts +35 -17
- package/front_end/third_party/source-map-scopes-codec/package/src/encode/encode.ts +1 -1
- package/front_end/third_party/source-map-scopes-codec/package/src/encode/encoder.js +1 -1
- package/front_end/third_party/source-map-scopes-codec/package/src/encode/encoder.js.map +1 -1
- package/front_end/third_party/source-map-scopes-codec/package/src/encode/encoder.ts +2 -2
- package/front_end/third_party/source-map-scopes-codec/package/src/mod.ts +1 -1
- package/front_end/third_party/source-map-scopes-codec/package/src/scopes.js +7 -0
- package/front_end/third_party/source-map-scopes-codec/package/src/scopes.js.map +1 -0
- package/front_end/third_party/source-map-scopes-codec/package/src/util.ts +1 -1
- package/front_end/ui/legacy/components/color_picker/FormatPickerContextMenu.ts +8 -1
- package/front_end/ui/legacy/components/data_grid/DataGridElement.ts +4 -0
- package/front_end/ui/visual_logging/KnownContextValues.ts +13 -0
- package/mcp/mcp.ts +1 -0
- package/package.json +1 -2
- package/front_end/third_party/source-map-scopes-codec/package/src/scopes-tsconfig.json +0 -8
- /package/front_end/third_party/source-map-scopes-codec/package/src/{scopes.d.ts → scopes.ts} +0 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Performance testing
|
|
2
|
+
|
|
3
|
+
Performance tests run in Chromium infra to measure panel loading times. The `devtools_frontend` Crossbench benchmark collects the load time for the five major panels (elements, console, network, sources, resources) against three pages: [blank](about:blank), [speedometertests](https://chromium-workloads.web.app/speedometer/v3.1/?iterationCount=1&startAutomatically&suites=TodoMVC-Angular-Complex-DOM,TodoMVC-JavaScript-ES5-Complex-DOM,TodoMVC-React-Complex-DOM), and [dailybroadcast](https://browserben.ch/speedometer/v3.1/resources/newssite/news-next/dist/index.html).
|
|
4
|
+
|
|
5
|
+
Official results can be viewed on this [Skia-perf page](https://chrome-perf.corp.goog/m?begin=1767637318&end=1768242118&shortcut=53b911343bb42697c4a8e9f750aa421d&totalGraphs=1).
|
|
6
|
+
|
|
7
|
+
## How to run perf benchmark locally
|
|
8
|
+
|
|
9
|
+
Crossbench is available within the Chromium repository at `./tools/perf` and is kept up-to-date by running `gclient sync`. Alternatively you can clone the Crossbench [repo](sso://chromium/crossbench). The Crossbench executable is named `cb.py`.
|
|
10
|
+
|
|
11
|
+
To execute the full DevTools benchmark:
|
|
12
|
+
`./cb.py devtools_frontend --repeat=N`.
|
|
13
|
+
When --repeat argument is missing we run every scenario 2 times.
|
|
14
|
+
|
|
15
|
+
To execute the benchmark against a subset of panels and/or sites:
|
|
16
|
+
`./cb.py devtools_frontend --panels=elements,resources --sites=blank,dailybroadcast`
|
|
17
|
+
|
|
18
|
+
To run the benchmark against a local Chromium build, specify the path to your browser executable:
|
|
19
|
+
`./cb.py devtools_frontend --browser=path/to/chrome`
|
|
20
|
+
|
|
21
|
+
To run the benchmark against your local DevTools build:
|
|
22
|
+
`./cb.py devtools-frontend --browser=path/to/chrome -- --custom-devtools-frontend=file://$(realpath ./path/to/devtools)`
|
|
23
|
+
|
|
24
|
+
At the end of each run, Crossbench generates a report and outputs its path. Review the `devtools_frontend_load_time.json` file in the report folder and compare your numbers with the official performance runs.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#e3e3e3"><path d="M720-240q25 0 42.5-17.5T780-300q0-25-17.5-42.5T720-360q-25 0-42.5 17.5T660-300q0 25 17.5 42.5T720-240Zm0 120q30 0 56-14t43-39q-23-14-48-20.5t-51-6.5q-26 0-51 6.5T621-173q17 25 43 39t56 14ZM360-640h240v-80q0-50-35-85t-85-35q-50 0-85 35t-35 85v80ZM490-80H240q-33 0-56.5-23.5T160-160v-400q0-33 23.5-56.5T240-640h40v-80q0-83 58.5-141.5T480-920q83 0 141.5 58.5T680-720v80h40q33 0 56.5 23.5T800-560v52q-18-6-37.5-9t-42.5-3v-40H240v400h212q8 24 16 41.5T490-80Zm230 40q-83 0-141.5-58.5T520-240q0-83 58.5-141.5T720-440q83 0 141.5 58.5T920-240q0 83-58.5 141.5T720-40ZM240-560v400-400Z"/></svg>
|
|
@@ -32,13 +32,32 @@ export function decode(input: string): Uint8Array<ArrayBuffer> {
|
|
|
32
32
|
return bytes;
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
+
/**
|
|
36
|
+
* Note: if input can be very large (larger than the max string size), callers should
|
|
37
|
+
* expect this to throw an error.
|
|
38
|
+
*/
|
|
35
39
|
export function encode(input: BlobPart): Promise<string> {
|
|
36
40
|
return new Promise((resolve, reject) => {
|
|
37
41
|
const reader = new FileReader();
|
|
38
|
-
reader.onerror = () => reject(new Error('failed to convert to base64'));
|
|
42
|
+
reader.onerror = () => reject(new Error('failed to convert to base64: internal error'));
|
|
39
43
|
reader.onload = () => {
|
|
44
|
+
// The input was too large to encode as a string. The caller should anticipate
|
|
45
|
+
// this and use a workaround. See TimelinePanel.ts innerSaveToFile for an example.
|
|
46
|
+
// For more information, see crbug.com/436482118.
|
|
47
|
+
if (reader.result === '') {
|
|
48
|
+
reject(new Error('failed to convert to base64: input too large to encode as base64 string'));
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// This string can be very large, so take care to not double memory. `split`
|
|
53
|
+
// was used here before, which always results in new strings in V8. By using
|
|
54
|
+
// slice instead, we leverage the sliced string optimization in V8 and avoid
|
|
55
|
+
// doubling the memory requirement (even if temporarily: that is a potential
|
|
56
|
+
// source of OOM crashes given large enough input, such as is common with
|
|
57
|
+
// Performance traces).
|
|
40
58
|
const blobAsUrl = reader.result as string;
|
|
41
|
-
const
|
|
59
|
+
const index = blobAsUrl.indexOf(',');
|
|
60
|
+
const base64 = blobAsUrl.slice(index + 1);
|
|
42
61
|
resolve(base64);
|
|
43
62
|
};
|
|
44
63
|
|
|
@@ -250,6 +250,13 @@ export class ResourceType {
|
|
|
250
250
|
return regex.test(contentType) ? 'application/json' : contentType;
|
|
251
251
|
}
|
|
252
252
|
|
|
253
|
+
/**
|
|
254
|
+
* Checks whether the given MIME type represents JavaScript content.
|
|
255
|
+
*/
|
|
256
|
+
static isJavaScriptMimeType(mimeType: string): boolean {
|
|
257
|
+
return mimeType === 'application/javascript' || mimeType === 'text/javascript';
|
|
258
|
+
}
|
|
259
|
+
|
|
253
260
|
/**
|
|
254
261
|
* Adds suffixes iff the mimeType is 'text/javascript' to denote whether the JS is minified or from
|
|
255
262
|
* a source map.
|
|
@@ -147,6 +147,9 @@ export class InspectorFrontendHostStub implements InspectorFrontendHostAPI {
|
|
|
147
147
|
}
|
|
148
148
|
|
|
149
149
|
inspectedURLChanged(url: Platform.DevToolsPath.UrlString): void {
|
|
150
|
+
if (!('document' in globalThis)) {
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
150
153
|
document.title = i18nString(UIStrings.devtoolsS, {PH1: url.replace(/^https?:\/\//, '')});
|
|
151
154
|
}
|
|
152
155
|
|
|
@@ -317,6 +317,26 @@ export class UserMetrics {
|
|
|
317
317
|
InspectorFrontendHostInstance.recordPerformanceHistogram(
|
|
318
318
|
'DevTools.Insights.TeaserFirstChunkGenerationTime', timeInMilliseconds);
|
|
319
319
|
}
|
|
320
|
+
|
|
321
|
+
consoleInsightTeaserAbortedAfterFirstCharacter(timeInMilliseconds: number): void {
|
|
322
|
+
InspectorFrontendHostInstance.recordPerformanceHistogram(
|
|
323
|
+
'DevTools.Insights.TeaserAfterFirstCharacterAbortionTime', timeInMilliseconds);
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
consoleInsightTeaserAbortedBeforeFirstCharacter(timeInMilliseconds: number): void {
|
|
327
|
+
InspectorFrontendHostInstance.recordPerformanceHistogram(
|
|
328
|
+
'DevTools.Insights.TeaserBeforeFirstCharacterAbortionTime', timeInMilliseconds);
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
consoleInsightLongTeaserGenerated(timeInMilliseconds: number): void {
|
|
332
|
+
InspectorFrontendHostInstance.recordPerformanceHistogram(
|
|
333
|
+
'DevTools.Insights.LongTeaserGenerationTime', timeInMilliseconds);
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
consoleInsightShortTeaserGenerated(timeInMilliseconds: number): void {
|
|
337
|
+
InspectorFrontendHostInstance.recordPerformanceHistogram(
|
|
338
|
+
'DevTools.Insights.ShortTeaserGenerationTime', timeInMilliseconds);
|
|
339
|
+
}
|
|
320
340
|
}
|
|
321
341
|
|
|
322
342
|
/**
|
|
@@ -505,6 +505,10 @@ interface DevToolsFlexibleLayout {
|
|
|
505
505
|
verticalDrawerEnabled: boolean;
|
|
506
506
|
}
|
|
507
507
|
|
|
508
|
+
interface DeviceBoundSessionsDebugging {
|
|
509
|
+
enabled: boolean;
|
|
510
|
+
}
|
|
511
|
+
|
|
508
512
|
interface AiPromptApi {
|
|
509
513
|
enabled: boolean;
|
|
510
514
|
allowWithoutGpu: boolean;
|
|
@@ -566,6 +570,7 @@ export type HostConfig = Platform.TypeScriptUtilities.RecursivePartial<{
|
|
|
566
570
|
devToolsGdpProfilesAvailability: GdpProfilesAvailability,
|
|
567
571
|
devToolsLiveEdit: LiveEdit,
|
|
568
572
|
devToolsFlexibleLayout: DevToolsFlexibleLayout,
|
|
573
|
+
deviceBoundSessionsDebugging: DeviceBoundSessionsDebugging,
|
|
569
574
|
devToolsAiPromptApi: AiPromptApi,
|
|
570
575
|
devToolsEnableDurableMessages: DevToolsEnableDurableMessages,
|
|
571
576
|
devToolsAiAssistanceContextSelectionAgent: HostConfigAiAssistanceContextSelectionAgent,
|
|
@@ -44,7 +44,7 @@ import {CSSModel} from './CSSModel.js';
|
|
|
44
44
|
import {FrameManager} from './FrameManager.js';
|
|
45
45
|
import {OverlayModel} from './OverlayModel.js';
|
|
46
46
|
import {RemoteObject} from './RemoteObject.js';
|
|
47
|
-
import {ResourceTreeModel} from './ResourceTreeModel.js';
|
|
47
|
+
import {Events as ResourceTreeModelEvents, type ResourceTreeFrame, ResourceTreeModel} from './ResourceTreeModel.js';
|
|
48
48
|
import {RuntimeModel} from './RuntimeModel.js';
|
|
49
49
|
import {SDKModel} from './SDKModel.js';
|
|
50
50
|
import {Capability, type Target} from './Target.js';
|
|
@@ -209,6 +209,7 @@ export class DOMNode extends Common.ObjectWrapper.ObjectWrapper<DOMNodeEventType
|
|
|
209
209
|
|
|
210
210
|
this.id = payload.nodeId;
|
|
211
211
|
this.#backendNodeId = payload.backendNodeId;
|
|
212
|
+
this.#frameOwnerFrameId = payload.frameId || null;
|
|
212
213
|
this.#domModel.registerNode(this);
|
|
213
214
|
this.#nodeType = payload.nodeType;
|
|
214
215
|
this.#nodeName = payload.nodeName;
|
|
@@ -217,7 +218,6 @@ export class DOMNode extends Common.ObjectWrapper.ObjectWrapper<DOMNodeEventType
|
|
|
217
218
|
this.#pseudoType = payload.pseudoType;
|
|
218
219
|
this.#pseudoIdentifier = payload.pseudoIdentifier;
|
|
219
220
|
this.#shadowRootType = payload.shadowRootType;
|
|
220
|
-
this.#frameOwnerFrameId = payload.frameId || null;
|
|
221
221
|
this.#xmlVersion = payload.xmlVersion;
|
|
222
222
|
this.#isSVGNode = Boolean(payload.isSVG);
|
|
223
223
|
this.#isScrollable = Boolean(payload.isScrollable);
|
|
@@ -1287,6 +1287,7 @@ export class AdoptedStyleSheet {
|
|
|
1287
1287
|
export class DOMModel extends SDKModel<EventTypes> {
|
|
1288
1288
|
agent: ProtocolProxyApi.DOMApi;
|
|
1289
1289
|
idToDOMNode = new Map<Protocol.DOM.NodeId, DOMNode>();
|
|
1290
|
+
frameIdToOwnerNode = new Map<Protocol.Page.FrameId, DOMNode>();
|
|
1290
1291
|
#document: DOMDocument|null = null;
|
|
1291
1292
|
readonly #attributeLoadNodeIds = new Set<Protocol.DOM.NodeId>();
|
|
1292
1293
|
readonly runtimeModelInternal: RuntimeModel;
|
|
@@ -1297,6 +1298,7 @@ export class DOMModel extends SDKModel<EventTypes> {
|
|
|
1297
1298
|
#searchId?: string;
|
|
1298
1299
|
#topLayerThrottler = new Common.Throttler.Throttler(100);
|
|
1299
1300
|
#topLayerNodes: DOMNode[] = [];
|
|
1301
|
+
#resourceTreeModel: ResourceTreeModel|null = null;
|
|
1300
1302
|
|
|
1301
1303
|
constructor(target: Target) {
|
|
1302
1304
|
super(target);
|
|
@@ -1306,6 +1308,9 @@ export class DOMModel extends SDKModel<EventTypes> {
|
|
|
1306
1308
|
target.registerDOMDispatcher(new DOMDispatcher(this));
|
|
1307
1309
|
this.runtimeModelInternal = (target.model(RuntimeModel) as RuntimeModel);
|
|
1308
1310
|
|
|
1311
|
+
this.#resourceTreeModel = target.model(ResourceTreeModel);
|
|
1312
|
+
this.#resourceTreeModel?.addEventListener(ResourceTreeModelEvents.DocumentOpened, this.onDocumentOpened, this);
|
|
1313
|
+
|
|
1309
1314
|
if (!target.suspended()) {
|
|
1310
1315
|
void this.agent.invoke_enable({});
|
|
1311
1316
|
}
|
|
@@ -1350,6 +1355,19 @@ export class DOMModel extends SDKModel<EventTypes> {
|
|
|
1350
1355
|
}
|
|
1351
1356
|
}
|
|
1352
1357
|
|
|
1358
|
+
private onDocumentOpened(event: Common.EventTarget.EventTargetEvent<ResourceTreeFrame>): void {
|
|
1359
|
+
const frame = event.data;
|
|
1360
|
+
const node = this.frameIdToOwnerNode.get(frame.id);
|
|
1361
|
+
if (node) {
|
|
1362
|
+
const contentDocument = node.contentDocument();
|
|
1363
|
+
if (contentDocument && contentDocument.documentURL !== frame.url) {
|
|
1364
|
+
contentDocument.documentURL = frame.url;
|
|
1365
|
+
contentDocument.baseURL = frame.url;
|
|
1366
|
+
this.dispatchEventToListeners(Events.DocumentURLChanged, contentDocument);
|
|
1367
|
+
}
|
|
1368
|
+
}
|
|
1369
|
+
}
|
|
1370
|
+
|
|
1353
1371
|
requestDocument(): Promise<DOMDocument|null> {
|
|
1354
1372
|
if (this.#document) {
|
|
1355
1373
|
return Promise.resolve(this.#document);
|
|
@@ -1526,6 +1544,7 @@ export class DOMModel extends SDKModel<EventTypes> {
|
|
|
1526
1544
|
|
|
1527
1545
|
private setDocument(payload: Protocol.DOM.Node|null): void {
|
|
1528
1546
|
this.idToDOMNode = new Map();
|
|
1547
|
+
this.frameIdToOwnerNode = new Map();
|
|
1529
1548
|
if (payload && 'nodeId' in payload) {
|
|
1530
1549
|
this.#document = new DOMDocument(this, payload);
|
|
1531
1550
|
} else {
|
|
@@ -1704,6 +1723,10 @@ export class DOMModel extends SDKModel<EventTypes> {
|
|
|
1704
1723
|
|
|
1705
1724
|
private unbind(node: DOMNode): void {
|
|
1706
1725
|
this.idToDOMNode.delete(node.id);
|
|
1726
|
+
const frameId = node.frameOwnerFrameId();
|
|
1727
|
+
if (frameId) {
|
|
1728
|
+
this.frameIdToOwnerNode.delete(frameId);
|
|
1729
|
+
}
|
|
1707
1730
|
const children = node.children();
|
|
1708
1731
|
for (let i = 0; children && i < children.length; ++i) {
|
|
1709
1732
|
this.unbind(children[i]);
|
|
@@ -1891,6 +1914,7 @@ export class DOMModel extends SDKModel<EventTypes> {
|
|
|
1891
1914
|
}
|
|
1892
1915
|
|
|
1893
1916
|
override dispose(): void {
|
|
1917
|
+
this.#resourceTreeModel?.removeEventListener(ResourceTreeModelEvents.DocumentOpened, this.onDocumentOpened, this);
|
|
1894
1918
|
DOMModelUndoStack.instance().dispose(this);
|
|
1895
1919
|
}
|
|
1896
1920
|
|
|
@@ -1905,6 +1929,10 @@ export class DOMModel extends SDKModel<EventTypes> {
|
|
|
1905
1929
|
|
|
1906
1930
|
registerNode(node: DOMNode): void {
|
|
1907
1931
|
this.idToDOMNode.set(node.id, node);
|
|
1932
|
+
const frameId = node.frameOwnerFrameId();
|
|
1933
|
+
if (frameId) {
|
|
1934
|
+
this.frameIdToOwnerNode.set(frameId, node);
|
|
1935
|
+
}
|
|
1908
1936
|
}
|
|
1909
1937
|
}
|
|
1910
1938
|
|
|
@@ -1914,6 +1942,7 @@ export enum Events {
|
|
|
1914
1942
|
AttrRemoved = 'AttrRemoved',
|
|
1915
1943
|
CharacterDataModified = 'CharacterDataModified',
|
|
1916
1944
|
DOMMutated = 'DOMMutated',
|
|
1945
|
+
DocumentURLChanged = 'DocumentURLChanged',
|
|
1917
1946
|
NodeInserted = 'NodeInserted',
|
|
1918
1947
|
NodeRemoved = 'NodeRemoved',
|
|
1919
1948
|
DocumentUpdated = 'DocumentUpdated',
|
|
@@ -1931,6 +1960,7 @@ export interface EventTypes {
|
|
|
1931
1960
|
[Events.AttrRemoved]: {node: DOMNode, name: string};
|
|
1932
1961
|
[Events.CharacterDataModified]: DOMNode;
|
|
1933
1962
|
[Events.DOMMutated]: DOMNode;
|
|
1963
|
+
[Events.DocumentURLChanged]: DOMDocument;
|
|
1934
1964
|
[Events.NodeInserted]: DOMNode;
|
|
1935
1965
|
[Events.NodeRemoved]: {node: DOMNode, parent: DOMNode};
|
|
1936
1966
|
[Events.DocumentUpdated]: DOMModel;
|
|
@@ -386,6 +386,10 @@ export class NetworkManager extends SDKModel<EventTypes> {
|
|
|
386
386
|
return await this.#networkAgent.invoke_enableReportingApi({enable});
|
|
387
387
|
}
|
|
388
388
|
|
|
389
|
+
async enableDeviceBoundSessions(enable = true): Promise<Promise<Protocol.ProtocolResponseWithError>> {
|
|
390
|
+
return await this.#networkAgent.invoke_enableDeviceBoundSessions({enable});
|
|
391
|
+
}
|
|
392
|
+
|
|
389
393
|
async loadNetworkResource(
|
|
390
394
|
frameId: Protocol.Page.FrameId|null, url: Platform.DevToolsPath.UrlString,
|
|
391
395
|
options: Protocol.Network.LoadNetworkResourceOptions): Promise<Protocol.Network.LoadNetworkResourcePageResult> {
|
|
@@ -414,6 +418,8 @@ export enum Events {
|
|
|
414
418
|
ReportingApiReportAdded = 'ReportingApiReportAdded',
|
|
415
419
|
ReportingApiReportUpdated = 'ReportingApiReportUpdated',
|
|
416
420
|
ReportingApiEndpointsChangedForOrigin = 'ReportingApiEndpointsChangedForOrigin',
|
|
421
|
+
DeviceBoundSessionsAdded = 'DeviceBoundSessionsAdded',
|
|
422
|
+
DeviceBoundSessionEventOccurred = 'DeviceBoundSessionEventOccurred',
|
|
417
423
|
/* eslint-enable @typescript-eslint/naming-convention */
|
|
418
424
|
}
|
|
419
425
|
|
|
@@ -445,6 +451,8 @@ export interface EventTypes {
|
|
|
445
451
|
[Events.ReportingApiReportAdded]: Protocol.Network.ReportingApiReport;
|
|
446
452
|
[Events.ReportingApiReportUpdated]: Protocol.Network.ReportingApiReport;
|
|
447
453
|
[Events.ReportingApiEndpointsChangedForOrigin]: Protocol.Network.ReportingApiEndpointsChangedForOriginEvent;
|
|
454
|
+
[Events.DeviceBoundSessionsAdded]: Protocol.Network.DeviceBoundSession[];
|
|
455
|
+
[Events.DeviceBoundSessionEventOccurred]: Protocol.Network.DeviceBoundSessionEventOccurredEvent;
|
|
448
456
|
}
|
|
449
457
|
|
|
450
458
|
/**
|
|
@@ -1555,6 +1563,11 @@ export class NetworkDispatcher implements ProtocolProxyApi.NetworkDispatcher {
|
|
|
1555
1563
|
}
|
|
1556
1564
|
|
|
1557
1565
|
deviceBoundSessionsAdded(_params: Protocol.Network.DeviceBoundSessionsAddedEvent): void {
|
|
1566
|
+
this.#manager.dispatchEventToListeners(Events.DeviceBoundSessionsAdded, _params.sessions);
|
|
1567
|
+
}
|
|
1568
|
+
|
|
1569
|
+
deviceBoundSessionEventOccurred(_params: Protocol.Network.DeviceBoundSessionEventOccurredEvent): void {
|
|
1570
|
+
this.#manager.dispatchEventToListeners(Events.DeviceBoundSessionEventOccurred, _params);
|
|
1558
1571
|
}
|
|
1559
1572
|
|
|
1560
1573
|
policyUpdated(): void {
|
|
@@ -1900,10 +1913,10 @@ export class RequestConditions extends Common.ObjectWrapper.ObjectWrapper<Reques
|
|
|
1900
1913
|
matchedNetworkConditions.push({ruleIds, urlPattern, conditions});
|
|
1901
1914
|
}
|
|
1902
1915
|
}
|
|
1916
|
+
}
|
|
1903
1917
|
|
|
1904
|
-
|
|
1905
|
-
|
|
1906
|
-
}
|
|
1918
|
+
if (globalConditions) {
|
|
1919
|
+
matchedNetworkConditions.push({conditions: globalConditions});
|
|
1907
1920
|
}
|
|
1908
1921
|
|
|
1909
1922
|
const promises: Array<Promise<unknown>> = [];
|
|
@@ -233,12 +233,15 @@ export class ResourceTreeModel extends SDKModel<EventTypes> {
|
|
|
233
233
|
documentOpened(framePayload: Protocol.Page.Frame): void {
|
|
234
234
|
this.frameNavigated(framePayload, undefined);
|
|
235
235
|
const frame = this.framesInternal.get(framePayload.id);
|
|
236
|
-
if (frame
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
236
|
+
if (frame) {
|
|
237
|
+
this.dispatchEventToListeners(Events.DocumentOpened, frame);
|
|
238
|
+
if (!frame.getResourcesMap().get(framePayload.url)) {
|
|
239
|
+
const frameResource = this.createResourceFromFramePayload(
|
|
240
|
+
framePayload, framePayload.url as Platform.DevToolsPath.UrlString,
|
|
241
|
+
Common.ResourceType.resourceTypes.Document, framePayload.mimeType, null, null);
|
|
242
|
+
frameResource.isGenerated = true;
|
|
243
|
+
frame.addResource(frameResource);
|
|
244
|
+
}
|
|
242
245
|
}
|
|
243
246
|
}
|
|
244
247
|
|
|
@@ -582,6 +585,7 @@ export enum Events {
|
|
|
582
585
|
FrameDetached = 'FrameDetached',
|
|
583
586
|
FrameResized = 'FrameResized',
|
|
584
587
|
FrameWillNavigate = 'FrameWillNavigate',
|
|
588
|
+
DocumentOpened = 'DocumentOpened',
|
|
585
589
|
PrimaryPageChanged = 'PrimaryPageChanged',
|
|
586
590
|
ResourceAdded = 'ResourceAdded',
|
|
587
591
|
WillLoadCachedResources = 'WillLoadCachedResources',
|
|
@@ -604,6 +608,7 @@ export interface EventTypes {
|
|
|
604
608
|
[Events.FrameDetached]: {frame: ResourceTreeFrame, isSwap: boolean};
|
|
605
609
|
[Events.FrameResized]: void;
|
|
606
610
|
[Events.FrameWillNavigate]: ResourceTreeFrame;
|
|
611
|
+
[Events.DocumentOpened]: ResourceTreeFrame;
|
|
607
612
|
[Events.PrimaryPageChanged]: {frame: ResourceTreeFrame, type: PrimaryPageChangeType};
|
|
608
613
|
[Events.ResourceAdded]: Resource;
|
|
609
614
|
[Events.WillLoadCachedResources]: void;
|
|
@@ -971,7 +971,6 @@ export class MainMenuItem implements UI.Toolbar.Provider {
|
|
|
971
971
|
const persistence = viewExtension.persistence();
|
|
972
972
|
const title = viewExtension.title();
|
|
973
973
|
const id = viewExtension.viewId();
|
|
974
|
-
const promotionId = viewExtension.featurePromotionId();
|
|
975
974
|
|
|
976
975
|
if (id === 'issues-pane') {
|
|
977
976
|
moreTools.defaultSection().appendItem(title, () => {
|
|
@@ -988,14 +987,9 @@ export class MainMenuItem implements UI.Toolbar.Provider {
|
|
|
988
987
|
continue;
|
|
989
988
|
}
|
|
990
989
|
|
|
991
|
-
let additionalElement = undefined;
|
|
992
|
-
if (promotionId) {
|
|
993
|
-
additionalElement = UI.UIUtils.maybeCreateNewBadge(promotionId);
|
|
994
|
-
}
|
|
995
|
-
|
|
996
990
|
moreTools.defaultSection().appendItem(title, () => {
|
|
997
991
|
void UI.ViewManager.ViewManager.instance().showView(id, true, false);
|
|
998
|
-
}, {
|
|
992
|
+
}, {isPreviewFeature: viewExtension.isPreviewFeature(), jslogContext: id});
|
|
999
993
|
}
|
|
1000
994
|
|
|
1001
995
|
const helpSubMenu = contextMenu.footerSection().appendSubMenuItem(i18nString(UIStrings.help), false, 'help');
|
|
@@ -242,10 +242,6 @@ export const UIStrings = {
|
|
|
242
242
|
* @description Warning displayed to developers. It is shown when the `XMLHttpRequest` API is used in a way that it slows down the page load of the next page. The `main thread` refers to an operating systems thread used to run most of the processing of HTML documents, so please use a consistent wording.
|
|
243
243
|
*/
|
|
244
244
|
XMLHttpRequestSynchronousInNonWorkerOutsideBeforeUnload: "Synchronous `XMLHttpRequest` on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.",
|
|
245
|
-
/**
|
|
246
|
-
* @description Warning displayed to developers that they are using externally loaded entities in an XML document that constitutes a part of the web page. Externally loaded entities are a technical concept of XML document processing.
|
|
247
|
-
*/
|
|
248
|
-
XMLNoExternalEntities: "Externally loaded entities in XML parsing have been deprecated and will be removed from this browser soon.",
|
|
249
245
|
/**
|
|
250
246
|
* @description Warning displayed to developers that they are using either the XSLTProcessor API, or XSLT processing instructions, both of which have been deprecated and are scheduled to be removed.
|
|
251
247
|
*/
|
|
@@ -374,10 +370,6 @@ export const DEPRECATIONS_METADATA: Partial<Record<string, DeprecationDescriptor
|
|
|
374
370
|
"XHRJSONEncodingDetection": {
|
|
375
371
|
"milestone": 93
|
|
376
372
|
},
|
|
377
|
-
"XMLNoExternalEntities": {
|
|
378
|
-
"chromeStatusFeature": 6734457763659776,
|
|
379
|
-
"milestone": 144
|
|
380
|
-
},
|
|
381
373
|
"XSLT": {
|
|
382
374
|
"chromeStatusFeature": 4709671889534976,
|
|
383
375
|
"milestone": 143
|
|
@@ -789,6 +789,10 @@ inspectorBackend.registerEnum("Network.CrossOriginEmbedderPolicyValue", {None: "
|
|
|
789
789
|
inspectorBackend.registerEnum("Network.ContentSecurityPolicySource", {HTTP: "HTTP", Meta: "Meta"});
|
|
790
790
|
inspectorBackend.registerEnum("Network.ReportStatus", {Queued: "Queued", Pending: "Pending", MarkedForRemoval: "MarkedForRemoval", Success: "Success"});
|
|
791
791
|
inspectorBackend.registerEnum("Network.DeviceBoundSessionUrlRuleRuleType", {Exclude: "Exclude", Include: "Include"});
|
|
792
|
+
inspectorBackend.registerEnum("Network.DeviceBoundSessionFetchResult", {Success: "Success", KeyError: "KeyError", SigningError: "SigningError", ServerRequestedTermination: "ServerRequestedTermination", InvalidSessionId: "InvalidSessionId", InvalidChallenge: "InvalidChallenge", TooManyChallenges: "TooManyChallenges", InvalidFetcherUrl: "InvalidFetcherUrl", InvalidRefreshUrl: "InvalidRefreshUrl", TransientHttpError: "TransientHttpError", ScopeOriginSameSiteMismatch: "ScopeOriginSameSiteMismatch", RefreshUrlSameSiteMismatch: "RefreshUrlSameSiteMismatch", MismatchedSessionId: "MismatchedSessionId", MissingScope: "MissingScope", NoCredentials: "NoCredentials", SubdomainRegistrationWellKnownUnavailable: "SubdomainRegistrationWellKnownUnavailable", SubdomainRegistrationUnauthorized: "SubdomainRegistrationUnauthorized", SubdomainRegistrationWellKnownMalformed: "SubdomainRegistrationWellKnownMalformed", SessionProviderWellKnownUnavailable: "SessionProviderWellKnownUnavailable", RelyingPartyWellKnownUnavailable: "RelyingPartyWellKnownUnavailable", FederatedKeyThumbprintMismatch: "FederatedKeyThumbprintMismatch", InvalidFederatedSessionUrl: "InvalidFederatedSessionUrl", InvalidFederatedKey: "InvalidFederatedKey", TooManyRelyingOriginLabels: "TooManyRelyingOriginLabels", BoundCookieSetForbidden: "BoundCookieSetForbidden", NetError: "NetError", ProxyError: "ProxyError", EmptySessionConfig: "EmptySessionConfig", InvalidCredentialsConfig: "InvalidCredentialsConfig", InvalidCredentialsType: "InvalidCredentialsType", InvalidCredentialsEmptyName: "InvalidCredentialsEmptyName", InvalidCredentialsCookie: "InvalidCredentialsCookie", PersistentHttpError: "PersistentHttpError", RegistrationAttemptedChallenge: "RegistrationAttemptedChallenge", InvalidScopeOrigin: "InvalidScopeOrigin", ScopeOriginContainsPath: "ScopeOriginContainsPath", RefreshInitiatorNotString: "RefreshInitiatorNotString", RefreshInitiatorInvalidHostPattern: "RefreshInitiatorInvalidHostPattern", InvalidScopeSpecification: "InvalidScopeSpecification", MissingScopeSpecificationType: "MissingScopeSpecificationType", EmptyScopeSpecificationDomain: "EmptyScopeSpecificationDomain", EmptyScopeSpecificationPath: "EmptyScopeSpecificationPath", InvalidScopeSpecificationType: "InvalidScopeSpecificationType", InvalidScopeIncludeSite: "InvalidScopeIncludeSite", MissingScopeIncludeSite: "MissingScopeIncludeSite", FederatedNotAuthorizedByProvider: "FederatedNotAuthorizedByProvider", FederatedNotAuthorizedByRelyingParty: "FederatedNotAuthorizedByRelyingParty", SessionProviderWellKnownMalformed: "SessionProviderWellKnownMalformed", SessionProviderWellKnownHasProviderOrigin: "SessionProviderWellKnownHasProviderOrigin", RelyingPartyWellKnownMalformed: "RelyingPartyWellKnownMalformed", RelyingPartyWellKnownHasRelyingOrigins: "RelyingPartyWellKnownHasRelyingOrigins", InvalidFederatedSessionProviderSessionMissing: "InvalidFederatedSessionProviderSessionMissing", InvalidFederatedSessionWrongProviderOrigin: "InvalidFederatedSessionWrongProviderOrigin", InvalidCredentialsCookieCreationTime: "InvalidCredentialsCookieCreationTime", InvalidCredentialsCookieName: "InvalidCredentialsCookieName", InvalidCredentialsCookieParsing: "InvalidCredentialsCookieParsing", InvalidCredentialsCookieUnpermittedAttribute: "InvalidCredentialsCookieUnpermittedAttribute", InvalidCredentialsCookieInvalidDomain: "InvalidCredentialsCookieInvalidDomain", InvalidCredentialsCookiePrefix: "InvalidCredentialsCookiePrefix", InvalidScopeRulePath: "InvalidScopeRulePath", InvalidScopeRuleHostPattern: "InvalidScopeRuleHostPattern", ScopeRuleOriginScopedHostPatternMismatch: "ScopeRuleOriginScopedHostPatternMismatch", ScopeRuleSiteScopedHostPatternMismatch: "ScopeRuleSiteScopedHostPatternMismatch", SigningQuotaExceeded: "SigningQuotaExceeded", InvalidConfigJson: "InvalidConfigJson", InvalidFederatedSessionProviderFailedToRestoreKey: "InvalidFederatedSessionProviderFailedToRestoreKey", FailedToUnwrapKey: "FailedToUnwrapKey", SessionDeletedDuringRefresh: "SessionDeletedDuringRefresh"});
|
|
793
|
+
inspectorBackend.registerEnum("Network.RefreshEventDetailsRefreshResult", {Refreshed: "Refreshed", InitializedService: "InitializedService", Unreachable: "Unreachable", ServerError: "ServerError", RefreshQuotaExceeded: "RefreshQuotaExceeded", FatalError: "FatalError", SigningQuotaExceeded: "SigningQuotaExceeded"});
|
|
794
|
+
inspectorBackend.registerEnum("Network.TerminationEventDetailsDeletionReason", {Expired: "Expired", FailedToRestoreKey: "FailedToRestoreKey", FailedToUnwrapKey: "FailedToUnwrapKey", StoragePartitionCleared: "StoragePartitionCleared", ClearBrowsingData: "ClearBrowsingData", ServerRequested: "ServerRequested", InvalidSessionParams: "InvalidSessionParams", RefreshFatalError: "RefreshFatalError"});
|
|
795
|
+
inspectorBackend.registerEnum("Network.ChallengeEventDetailsChallengeResult", {Success: "Success", NoSessionId: "NoSessionId", NoSessionMatch: "NoSessionMatch", CantSetBoundCookie: "CantSetBoundCookie"});
|
|
792
796
|
inspectorBackend.registerEvent("Network.dataReceived", ["requestId", "timestamp", "dataLength", "encodedDataLength", "data"]);
|
|
793
797
|
inspectorBackend.registerEvent("Network.eventSourceMessageReceived", ["requestId", "timestamp", "eventName", "eventId", "data"]);
|
|
794
798
|
inspectorBackend.registerEvent("Network.loadingFailed", ["requestId", "timestamp", "type", "errorText", "canceled", "blockedReason", "corsErrorStatus"]);
|
|
@@ -833,6 +837,7 @@ inspectorBackend.registerEvent("Network.reportingApiReportAdded", ["report"]);
|
|
|
833
837
|
inspectorBackend.registerEvent("Network.reportingApiReportUpdated", ["report"]);
|
|
834
838
|
inspectorBackend.registerEvent("Network.reportingApiEndpointsChangedForOrigin", ["origin", "endpoints"]);
|
|
835
839
|
inspectorBackend.registerEvent("Network.deviceBoundSessionsAdded", ["sessions"]);
|
|
840
|
+
inspectorBackend.registerEvent("Network.deviceBoundSessionEventOccurred", ["eventId", "site", "succeeded", "sessionId", "creationEventDetails", "refreshEventDetails", "terminationEventDetails", "challengeEventDetails"]);
|
|
836
841
|
inspectorBackend.registerCommand("Network.setAcceptedEncodings", [{"name": "encodings", "type": "array", "optional": false, "description": "List of accepted content encodings.", "typeRef": "Network.ContentEncoding"}], [], "Sets a list of content encodings that will be accepted. Empty list means no encoding is accepted.");
|
|
837
842
|
inspectorBackend.registerCommand("Network.clearAcceptedEncodingsOverride", [], [], "Clears accepted encodings set by setAcceptedEncodings");
|
|
838
843
|
inspectorBackend.registerCommand("Network.canClearBrowserCache", [], ["result"], "Tells whether clearing browser cache is supported.");
|
|
@@ -852,7 +857,7 @@ inspectorBackend.registerCommand("Network.getAllCookies", [], ["cookies"], "Retu
|
|
|
852
857
|
inspectorBackend.registerCommand("Network.getCertificate", [{"name": "origin", "type": "string", "optional": false, "description": "Origin to get certificate for.", "typeRef": null}], ["tableNames"], "Returns the DER-encoded certificate.");
|
|
853
858
|
inspectorBackend.registerCommand("Network.getCookies", [{"name": "urls", "type": "array", "optional": true, "description": "The list of URLs for which applicable cookies will be fetched. If not specified, it's assumed to be set to the list containing the URLs of the page and all of its subframes.", "typeRef": "string"}], ["cookies"], "Returns all browser cookies for the current URL. Depending on the backend support, will return detailed cookie information in the `cookies` field.");
|
|
854
859
|
inspectorBackend.registerCommand("Network.getResponseBody", [{"name": "requestId", "type": "string", "optional": false, "description": "Identifier of the network request to get content for.", "typeRef": "Network.RequestId"}], ["body", "base64Encoded"], "Returns content served for the given request.");
|
|
855
|
-
inspectorBackend.registerCommand("Network.getRequestPostData", [{"name": "requestId", "type": "string", "optional": false, "description": "Identifier of the network request to get content for.", "typeRef": "Network.RequestId"}], ["postData"], "Returns post data sent with the request. Returns an error when no data was sent with the request.");
|
|
860
|
+
inspectorBackend.registerCommand("Network.getRequestPostData", [{"name": "requestId", "type": "string", "optional": false, "description": "Identifier of the network request to get content for.", "typeRef": "Network.RequestId"}], ["postData", "base64Encoded"], "Returns post data sent with the request. Returns an error when no data was sent with the request.");
|
|
856
861
|
inspectorBackend.registerCommand("Network.getResponseBodyForInterception", [{"name": "interceptionId", "type": "string", "optional": false, "description": "Identifier for the intercepted request to get body for.", "typeRef": "Network.InterceptionId"}], ["body", "base64Encoded"], "Returns content served for the given currently intercepted request.");
|
|
857
862
|
inspectorBackend.registerCommand("Network.takeResponseBodyForInterceptionAsStream", [{"name": "interceptionId", "type": "string", "optional": false, "description": "", "typeRef": "Network.InterceptionId"}], ["stream"], "Returns a handle to the stream representing the response body. Note that after this command, the intercepted request can't be continued as is -- you either need to cancel it or to provide the response body. The stream only supports sequential read, IO.read will fail if the position is specified.");
|
|
858
863
|
inspectorBackend.registerCommand("Network.replayXHR", [{"name": "requestId", "type": "string", "optional": false, "description": "Identifier of XHR to replay.", "typeRef": "Network.RequestId"}], [], "This method sends a new XMLHttpRequest which is identical to the original one. The following parameters should be identical: method, url, async, request body, extra headers, withCredentials attribute, user, password.");
|
|
@@ -918,6 +923,10 @@ inspectorBackend.registerType("Network.DeviceBoundSessionCookieCraving", [{"name
|
|
|
918
923
|
inspectorBackend.registerType("Network.DeviceBoundSessionUrlRule", [{"name": "ruleType", "type": "string", "optional": false, "description": "See comments on `net::device_bound_sessions::SessionInclusionRules::UrlRule::rule_type`.", "typeRef": null}, {"name": "hostPattern", "type": "string", "optional": false, "description": "See comments on `net::device_bound_sessions::SessionInclusionRules::UrlRule::host_pattern`.", "typeRef": null}, {"name": "pathPrefix", "type": "string", "optional": false, "description": "See comments on `net::device_bound_sessions::SessionInclusionRules::UrlRule::path_prefix`.", "typeRef": null}]);
|
|
919
924
|
inspectorBackend.registerType("Network.DeviceBoundSessionInclusionRules", [{"name": "origin", "type": "string", "optional": false, "description": "See comments on `net::device_bound_sessions::SessionInclusionRules::origin_`.", "typeRef": null}, {"name": "includeSite", "type": "boolean", "optional": false, "description": "Whether the whole site is included. See comments on `net::device_bound_sessions::SessionInclusionRules::include_site_` for more details; this boolean is true if that value is populated.", "typeRef": null}, {"name": "urlRules", "type": "array", "optional": false, "description": "See comments on `net::device_bound_sessions::SessionInclusionRules::url_rules_`.", "typeRef": "Network.DeviceBoundSessionUrlRule"}]);
|
|
920
925
|
inspectorBackend.registerType("Network.DeviceBoundSession", [{"name": "key", "type": "object", "optional": false, "description": "The site and session ID of the session.", "typeRef": "Network.DeviceBoundSessionKey"}, {"name": "refreshUrl", "type": "string", "optional": false, "description": "See comments on `net::device_bound_sessions::Session::refresh_url_`.", "typeRef": null}, {"name": "inclusionRules", "type": "object", "optional": false, "description": "See comments on `net::device_bound_sessions::Session::inclusion_rules_`.", "typeRef": "Network.DeviceBoundSessionInclusionRules"}, {"name": "cookieCravings", "type": "array", "optional": false, "description": "See comments on `net::device_bound_sessions::Session::cookie_cravings_`.", "typeRef": "Network.DeviceBoundSessionCookieCraving"}, {"name": "expiryDate", "type": "number", "optional": false, "description": "See comments on `net::device_bound_sessions::Session::expiry_date_`.", "typeRef": "Network.TimeSinceEpoch"}, {"name": "cachedChallenge", "type": "string", "optional": true, "description": "See comments on `net::device_bound_sessions::Session::cached_challenge__`.", "typeRef": null}, {"name": "allowedRefreshInitiators", "type": "array", "optional": false, "description": "See comments on `net::device_bound_sessions::Session::allowed_refresh_initiators_`.", "typeRef": "string"}]);
|
|
926
|
+
inspectorBackend.registerType("Network.CreationEventDetails", [{"name": "fetchResult", "type": "string", "optional": false, "description": "The result of the fetch attempt.", "typeRef": "Network.DeviceBoundSessionFetchResult"}, {"name": "newSession", "type": "object", "optional": true, "description": "The session if there was a newly created session. This is populated for all successful creation events.", "typeRef": "Network.DeviceBoundSession"}]);
|
|
927
|
+
inspectorBackend.registerType("Network.RefreshEventDetails", [{"name": "refreshResult", "type": "string", "optional": false, "description": "The result of a refresh.", "typeRef": null}, {"name": "fetchResult", "type": "string", "optional": true, "description": "If there was a fetch attempt, the result of that.", "typeRef": "Network.DeviceBoundSessionFetchResult"}, {"name": "newSession", "type": "object", "optional": true, "description": "The session display if there was a newly created session. This is populated for any refresh event that modifies the session config.", "typeRef": "Network.DeviceBoundSession"}, {"name": "wasFullyProactiveRefresh", "type": "boolean", "optional": false, "description": "See comments on `net::device_bound_sessions::RefreshEventResult::was_fully_proactive_refresh`.", "typeRef": null}]);
|
|
928
|
+
inspectorBackend.registerType("Network.TerminationEventDetails", [{"name": "deletionReason", "type": "string", "optional": false, "description": "The reason for a session being deleted.", "typeRef": null}]);
|
|
929
|
+
inspectorBackend.registerType("Network.ChallengeEventDetails", [{"name": "challengeResult", "type": "string", "optional": false, "description": "The result of a challenge.", "typeRef": null}, {"name": "challenge", "type": "string", "optional": false, "description": "The challenge set.", "typeRef": null}]);
|
|
921
930
|
inspectorBackend.registerType("Network.LoadNetworkResourcePageResult", [{"name": "success", "type": "boolean", "optional": false, "description": "", "typeRef": null}, {"name": "netError", "type": "number", "optional": true, "description": "Optional values used for error reporting.", "typeRef": null}, {"name": "netErrorName", "type": "string", "optional": true, "description": "", "typeRef": null}, {"name": "httpStatusCode", "type": "number", "optional": true, "description": "", "typeRef": null}, {"name": "stream", "type": "string", "optional": true, "description": "If successful, one of the following two fields holds the result.", "typeRef": "IO.StreamHandle"}, {"name": "headers", "type": "object", "optional": true, "description": "Response headers.", "typeRef": "Network.Headers"}]);
|
|
922
931
|
inspectorBackend.registerType("Network.LoadNetworkResourceOptions", [{"name": "disableCache", "type": "boolean", "optional": false, "description": "", "typeRef": null}, {"name": "includeCredentials", "type": "boolean", "optional": false, "description": "", "typeRef": null}]);
|
|
923
932
|
|