chrome-devtools-frontend 1.0.1667564 → 1.0.1669021

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.
Files changed (211) hide show
  1. package/.agents/skills/devtools-ci/SKILL.md +65 -0
  2. package/.agents/skills/devtools-setting-migration/SKILL.md +290 -0
  3. package/.agents/skills/gerrit-cli/SKILL.md +59 -0
  4. package/.agents/skills/gerrit-cli/references/commands.md +93 -0
  5. package/.agents/skills/gerrit-cli/references/workflows.md +56 -0
  6. package/.agents/skills/gerrit-cli/scripts/gerrit_client_wrapper.py +47 -0
  7. package/.agents/skills/gerrit-cli/scripts/import_upstream.py +230 -0
  8. package/.agents/skills/ui-eng-vision-widget-promoter/SKILL.md +11 -4
  9. package/.agents/skills/ui-widgets/SKILL.md +25 -1
  10. package/docs/contributing/infrastructure.md +7 -1
  11. package/docs/ui_engineering.md +44 -1
  12. package/front_end/core/common/Settings.ts +11 -4
  13. package/front_end/core/host/AidaClient.ts +66 -47
  14. package/front_end/core/host/GcaClient.ts +4 -6
  15. package/front_end/core/host/ResourceLoader.ts +4 -2
  16. package/front_end/core/root/Runtime.ts +5 -5
  17. package/front_end/core/sdk/CSSModel.test.api.ts +102 -0
  18. package/front_end/core/sdk/CSSModel.ts +3 -2
  19. package/front_end/core/sdk/ConsoleModel.ts +3 -2
  20. package/front_end/core/sdk/DebuggerModel.ts +16 -7
  21. package/front_end/core/sdk/SDKSettings.ts +38 -0
  22. package/front_end/core/sdk/sdk-meta.ts +0 -120
  23. package/front_end/core/sdk/sdk.ts +2 -0
  24. package/front_end/entrypoints/main/MainImpl.ts +10 -3
  25. package/front_end/foundation/Universe.ts +7 -0
  26. package/front_end/generated/InspectorBackendCommands.ts +2 -2
  27. package/front_end/generated/protocol.ts +11 -3
  28. package/front_end/models/ai_assistance/AiAgent2.ts +1 -1
  29. package/front_end/models/ai_assistance/AiUtils.ts +67 -4
  30. package/front_end/models/ai_assistance/BuiltInAi.ts +11 -6
  31. package/front_end/models/ai_assistance/ChangeManager.ts +17 -1
  32. package/front_end/models/ai_assistance/StorageItem.ts +26 -5
  33. package/front_end/models/ai_code_completion/AiCodeCompletion.ts +2 -19
  34. package/front_end/models/ai_code_generation/AiCodeGeneration.ts +2 -3
  35. package/front_end/models/javascript_metadata/NativeFunctions.js +22 -9
  36. package/front_end/models/source_map_scopes/NamesResolver.ts +23 -17
  37. package/front_end/models/trace/handlers/RendererHandler.ts +20 -4
  38. package/front_end/models/trace/types/File.ts +1 -0
  39. package/front_end/models/workspace/UISourceCode.ts +0 -10
  40. package/front_end/panels/ai_assistance/AiAssistancePanel.ts +61 -182
  41. package/front_end/panels/ai_assistance/components/ChatInput.ts +25 -8
  42. package/front_end/panels/ai_assistance/components/ChatMessage.ts +13 -69
  43. package/front_end/panels/ai_assistance/components/ChatView.ts +14 -8
  44. package/front_end/panels/ai_assistance/components/chatMessage.css +2 -20
  45. package/front_end/panels/application/ApplicationPanelSidebar.ts +2 -2
  46. package/front_end/panels/application/ApplicationPanelTreeElement.ts +41 -3
  47. package/front_end/panels/application/ServiceWorkerUpdateCycleView.ts +131 -134
  48. package/front_end/panels/application/ServiceWorkersView.ts +8 -8
  49. package/front_end/panels/application/application.ts +2 -0
  50. package/front_end/panels/application/components/AdsView.ts +10 -6
  51. package/front_end/panels/application/preloading/PreloadingView.ts +53 -45
  52. package/front_end/panels/application/preloading/components/PreloadingDetailsReportView.ts +111 -119
  53. package/front_end/panels/application/preloading/components/preloadingDetailsReportView.css +22 -24
  54. package/front_end/panels/application/serviceWorkerUpdateCycleView.css +105 -102
  55. package/front_end/panels/common/AiCodeCompletionDisclaimer.ts +107 -96
  56. package/front_end/panels/common/AiCodeCompletionSummaryToolbar.ts +17 -19
  57. package/front_end/panels/common/AiCodeCompletionTeaser.ts +6 -6
  58. package/front_end/panels/common/AiCodeGenerationTeaser.ts +28 -26
  59. package/front_end/panels/common/common.ts +1 -1
  60. package/front_end/panels/console/ConsoleInsightTeaser.ts +6 -8
  61. package/front_end/panels/console/ConsoleView.ts +6 -4
  62. package/front_end/panels/console/ConsoleViewMessage.ts +1 -1
  63. package/front_end/panels/console/console-meta.ts +28 -0
  64. package/front_end/panels/elements/StylesAiCodeCompletionProvider.ts +1 -1
  65. package/front_end/panels/elements/StylesSidebarPane.ts +3 -2
  66. package/front_end/panels/emulation/DeviceModeToolbar.ts +2 -2
  67. package/front_end/panels/emulation/DeviceModeView.ts +63 -104
  68. package/front_end/panels/emulation/DeviceModeWrapper.ts +18 -4
  69. package/front_end/panels/explain/components/ConsoleInsight.ts +4 -6
  70. package/front_end/panels/explain/explain-meta.ts +7 -49
  71. package/front_end/panels/network/NetworkDataGridNode.ts +1 -1
  72. package/front_end/panels/network/NetworkLogView.ts +1 -0
  73. package/front_end/panels/network/OriginalResourceChunkView.ts +340 -0
  74. package/front_end/panels/network/ResourceChunkView.ts +72 -46
  75. package/front_end/panels/network/ResourceDirectSocketChunkView.ts +3 -2
  76. package/front_end/panels/network/ResourceWebSocketFrameView.ts +3 -3
  77. package/front_end/panels/network/originalResourceChunkView.css +49 -0
  78. package/front_end/panels/screencast/ScreencastView.ts +401 -260
  79. package/front_end/panels/screencast/screencastView.css +113 -100
  80. package/front_end/panels/sensors/LocationsSettingsTab.ts +329 -135
  81. package/front_end/panels/sensors/locationsSettingsTab.css +78 -4
  82. package/front_end/panels/settings/AISettingsTab.ts +17 -100
  83. package/front_end/panels/snippets/ScriptSnippetFileSystem.ts +2 -2
  84. package/front_end/panels/snippets/SnippetsQuickOpen.ts +4 -4
  85. package/front_end/panels/sources/AddSourceMapURLDialog.ts +3 -3
  86. package/front_end/panels/sources/AiCodeCompletionPlugin.ts +4 -3
  87. package/front_end/panels/sources/BreakpointEditDialog.ts +14 -14
  88. package/front_end/panels/sources/BreakpointsView.ts +14 -14
  89. package/front_end/panels/sources/CallStackSidebarPane.ts +6 -6
  90. package/front_end/panels/sources/CategorizedBreakpointL10n.ts +18 -18
  91. package/front_end/panels/sources/CoveragePlugin.ts +7 -7
  92. package/front_end/panels/sources/DebuggerPausedMessage.ts +23 -23
  93. package/front_end/panels/sources/DebuggerPlugin.ts +31 -31
  94. package/front_end/panels/sources/FilteredUISourceCodeListProvider.ts +2 -2
  95. package/front_end/panels/sources/GoToLineQuickOpen.ts +10 -10
  96. package/front_end/panels/sources/NavigatorView.ts +34 -27
  97. package/front_end/panels/sources/OutlineQuickOpen.ts +3 -3
  98. package/front_end/panels/sources/PersistenceActions.ts +9 -9
  99. package/front_end/panels/sources/ProfilePlugin.ts +1 -1
  100. package/front_end/panels/sources/ScopeChainSidebarPane.ts +5 -5
  101. package/front_end/panels/sources/SnippetsPlugin.ts +2 -2
  102. package/front_end/panels/sources/SourcesNavigator.ts +20 -18
  103. package/front_end/panels/sources/SourcesPanel.ts +26 -25
  104. package/front_end/panels/sources/SourcesView.ts +5 -6
  105. package/front_end/panels/sources/TabbedEditorContainer.ts +3 -3
  106. package/front_end/panels/sources/ThreadsSidebarPane.ts +1 -1
  107. package/front_end/panels/sources/UISourceCodeFrame.ts +0 -2
  108. package/front_end/panels/sources/WatchExpressionsSidebarPane.ts +7 -7
  109. package/front_end/panels/sources/components/HeadersView.ts +2 -2
  110. package/front_end/panels/sources/sources-meta.ts +164 -71
  111. package/front_end/panels/sources/sources.ts +0 -2
  112. package/front_end/panels/timeline/TimelineHistoryManager.ts +14 -3
  113. package/front_end/panels/timeline/TimelineLoader.ts +72 -42
  114. package/front_end/panels/timeline/TimelinePanel.ts +29 -4
  115. package/front_end/panels/timeline/timelineHistoryManager.css +4 -0
  116. package/front_end/third_party/chromium/README.chromium +1 -1
  117. package/front_end/third_party/puppeteer/README.chromium +2 -2
  118. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.d.ts +187 -1
  119. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +91 -38
  120. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Browser.d.ts +145 -2
  121. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Browser.d.ts.map +1 -1
  122. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Browser.js +0 -2
  123. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Browser.js.map +1 -1
  124. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/BrowserContext.d.ts +0 -2
  125. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/BrowserContext.d.ts.map +1 -1
  126. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/BrowserContext.js +0 -2
  127. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/BrowserContext.js.map +1 -1
  128. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Dialog.d.ts +3 -2
  129. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Dialog.d.ts.map +1 -1
  130. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Dialog.js +8 -2
  131. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Dialog.js.map +1 -1
  132. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/JSHandle.d.ts +0 -2
  133. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/JSHandle.d.ts.map +1 -1
  134. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/JSHandle.js +0 -2
  135. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/JSHandle.js.map +1 -1
  136. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.d.ts +1 -3
  137. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.d.ts.map +1 -1
  138. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.js +0 -2
  139. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.js.map +1 -1
  140. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Realm.d.ts +0 -1
  141. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Realm.d.ts.map +1 -1
  142. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Realm.js +0 -1
  143. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Realm.js.map +1 -1
  144. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/BidiOverCdp.d.ts.map +1 -1
  145. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/BidiOverCdp.js +2 -2
  146. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/BidiOverCdp.js.map +1 -1
  147. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Browser.d.ts +5 -1
  148. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Browser.d.ts.map +1 -1
  149. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Browser.js +12 -0
  150. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Browser.js.map +1 -1
  151. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/HTTPResponse.d.ts.map +1 -1
  152. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/HTTPResponse.js +4 -1
  153. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/HTTPResponse.js.map +1 -1
  154. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.d.ts +5 -1
  155. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.d.ts.map +1 -1
  156. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.js +49 -0
  157. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.js.map +1 -1
  158. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/EventEmitter.d.ts +0 -6
  159. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/EventEmitter.d.ts.map +1 -1
  160. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/EventEmitter.js +0 -6
  161. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/EventEmitter.js.map +1 -1
  162. package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.d.ts +1 -1
  163. package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.d.ts.map +1 -1
  164. package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.js +1 -1
  165. package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.js.map +1 -1
  166. package/front_end/third_party/puppeteer/package/lib/puppeteer/injected/util.d.ts.map +1 -1
  167. package/front_end/third_party/puppeteer/package/lib/puppeteer/injected/util.js +3 -0
  168. package/front_end/third_party/puppeteer/package/lib/puppeteer/injected/util.js.map +1 -1
  169. package/front_end/third_party/puppeteer/package/lib/puppeteer/node/ScreenRecorder.d.ts +0 -3
  170. package/front_end/third_party/puppeteer/package/lib/puppeteer/node/ScreenRecorder.d.ts.map +1 -1
  171. package/front_end/third_party/puppeteer/package/lib/puppeteer/node/ScreenRecorder.js +0 -3
  172. package/front_end/third_party/puppeteer/package/lib/puppeteer/node/ScreenRecorder.js.map +1 -1
  173. package/front_end/third_party/puppeteer/package/lib/puppeteer/revisions.d.ts +3 -3
  174. package/front_end/third_party/puppeteer/package/lib/puppeteer/revisions.js +3 -3
  175. package/front_end/third_party/puppeteer/package/lib/puppeteer/util/disposable.d.ts +2 -2
  176. package/front_end/third_party/puppeteer/package/lib/puppeteer/util/disposable.js +2 -2
  177. package/front_end/third_party/puppeteer/package/lib/puppeteer/util/version.d.ts +1 -1
  178. package/front_end/third_party/puppeteer/package/lib/puppeteer/util/version.js +1 -1
  179. package/front_end/third_party/puppeteer/package/lib/types.d.ts +187 -1
  180. package/front_end/third_party/puppeteer/package/package.json +5 -5
  181. package/front_end/third_party/puppeteer/package/src/api/Browser.ts +155 -2
  182. package/front_end/third_party/puppeteer/package/src/api/BrowserContext.ts +0 -2
  183. package/front_end/third_party/puppeteer/package/src/api/Dialog.ts +10 -2
  184. package/front_end/third_party/puppeteer/package/src/api/JSHandle.ts +0 -2
  185. package/front_end/third_party/puppeteer/package/src/api/Page.ts +1 -3
  186. package/front_end/third_party/puppeteer/package/src/api/Realm.ts +0 -1
  187. package/front_end/third_party/puppeteer/package/src/bidi/BidiOverCdp.ts +4 -2
  188. package/front_end/third_party/puppeteer/package/src/bidi/Browser.ts +17 -0
  189. package/front_end/third_party/puppeteer/package/src/bidi/HTTPResponse.ts +5 -4
  190. package/front_end/third_party/puppeteer/package/src/cdp/Browser.ts +66 -0
  191. package/front_end/third_party/puppeteer/package/src/common/EventEmitter.ts +0 -6
  192. package/front_end/third_party/puppeteer/package/src/generated/injected.ts +1 -1
  193. package/front_end/third_party/puppeteer/package/src/injected/util.ts +4 -1
  194. package/front_end/third_party/puppeteer/package/src/node/ScreenRecorder.ts +0 -3
  195. package/front_end/third_party/puppeteer/package/src/revisions.ts +3 -3
  196. package/front_end/third_party/puppeteer/package/src/util/disposable.ts +2 -2
  197. package/front_end/third_party/puppeteer/package/src/util/version.ts +1 -1
  198. package/front_end/ui/components/text_editor/AiCodeCompletionProvider.ts +9 -7
  199. package/front_end/ui/components/text_editor/AiCodeGenerationProvider.ts +7 -8
  200. package/front_end/ui/legacy/Dialog.ts +103 -4
  201. package/front_end/ui/legacy/InspectorView.ts +1 -5
  202. package/front_end/ui/legacy/PopoverHelper.ts +5 -5
  203. package/front_end/ui/legacy/TabbedPane.ts +7 -2
  204. package/front_end/ui/legacy/components/cookie_table/CookiesTable.ts +40 -24
  205. package/front_end/ui/legacy/components/data_grid/DataGrid.ts +1 -0
  206. package/front_end/ui/legacy/components/data_grid/DataGridElement.ts +8 -4
  207. package/front_end/ui/legacy/components/perf_ui/FlameChart.ts +14 -7
  208. package/front_end/ui/legacy/components/quick_open/CommandMenu.ts +11 -1
  209. package/front_end/ui/visual_logging/KnownContextValues.ts +3 -0
  210. package/package.json +1 -1
  211. package/front_end/panels/sources/AiWarningInfobarPlugin.ts +0 -78
@@ -123,6 +123,11 @@ export declare interface AddScreenParams {
123
123
  isInternal?: boolean;
124
124
  }
125
125
 
126
+ /**
127
+ * @public
128
+ */
129
+ export declare const asyncDisposeSymbol: typeof Symbol.asyncDispose;
130
+
126
131
  /**
127
132
  * Supported autofill address field names.
128
133
  *
@@ -567,6 +572,55 @@ export declare abstract class Browser extends EventEmitter<BrowserEvents> {
567
572
  * Uninstalls an extension.
568
573
  */
569
574
  abstract uninstallExtension(id: string): Promise<void>;
575
+ /**
576
+ * Installs a Progressive Web App (PWA) and returns its manifest id.
577
+ *
578
+ * @remarks
579
+ *
580
+ * Only available when connected to the browser over a pipe connection. Set
581
+ * `pipe: true` in {@link PuppeteerNode.launch | puppeteer.launch}; the launch
582
+ * option defaults to `false`. The underlying `PWA` CDP domain is not exposed
583
+ * over a WebSocket connection.
584
+ *
585
+ * The returned manifest id echoes {@link InstallPWAOptions.manifestId}, so it
586
+ * can be passed directly to {@link Browser.launchPWA},
587
+ * {@link Browser.getPWAState}, or {@link Browser.uninstallPWA}.
588
+ */
589
+ abstract installPWA(options: InstallPWAOptions): Promise<string>;
590
+ /**
591
+ * Uninstalls a previously installed Progressive Web App (PWA).
592
+ *
593
+ * @remarks
594
+ *
595
+ * Only available over a pipe connection. See {@link Browser.installPWA}.
596
+ */
597
+ abstract uninstallPWA(options: UninstallPWAOptions): Promise<void>;
598
+ /**
599
+ * Launches an installed Progressive Web App (PWA) and resolves with the
600
+ * {@link Page | page} backing the app window.
601
+ *
602
+ * @remarks
603
+ *
604
+ * Only available over a pipe connection. See {@link Browser.installPWA}.
605
+ *
606
+ * `PWA.launch` resolves with the id of the launched _tab_ target. Puppeteer
607
+ * does not expose tab targets through {@link Browser.targets}; this method
608
+ * instead resolves with the tab's child page target (the app's web contents).
609
+ * If Chromium focuses an existing app window, this returns that window's
610
+ * existing page.
611
+ */
612
+ abstract launchPWA(options: LaunchPWAOptions): Promise<Page>;
613
+ /**
614
+ * Returns the OS-integration state of an installed Progressive Web App (PWA),
615
+ * such as its badge count and registered file handlers.
616
+ *
617
+ * @remarks
618
+ *
619
+ * Only available over a pipe connection. See {@link Browser.installPWA}.
620
+ * Meaningful only for an app that is currently installed; querying an
621
+ * unknown manifest id rejects.
622
+ */
623
+ abstract getPWAState(options: GetPWAStateOptions): Promise<PWAState>;
570
624
  /**
571
625
  * Gets a list of {@link ScreenInfo | screen information objects}.
572
626
  */
@@ -591,6 +645,8 @@ export declare abstract class Browser extends EventEmitter<BrowserEvents> {
591
645
  * Whether Puppeteer is connected to this {@link Browser | browser}.
592
646
  */
593
647
  abstract get connected(): boolean;
648
+ [disposeSymbol](): void;
649
+ [asyncDisposeSymbol](): Promise<void>;
594
650
  /**
595
651
  * Get debug information from Puppeteer.
596
652
  *
@@ -788,6 +844,8 @@ export declare abstract class BrowserContext extends EventEmitter<BrowserContext
788
844
  * Identifier for this {@link BrowserContext | browser context}.
789
845
  */
790
846
  get id(): string | undefined;
847
+ [disposeSymbol](): void;
848
+ [asyncDisposeSymbol](): Promise<void>;
791
849
  }
792
850
 
793
851
  /**
@@ -2067,6 +2125,11 @@ export declare interface DeviceRequestPromptDevice {
2067
2125
  */
2068
2126
  export declare abstract class Dialog {
2069
2127
  #private;
2128
+ /**
2129
+ * A boolean value indicating whether the dialog has been handled.
2130
+ */
2131
+ get handled(): boolean;
2132
+ protected set handled(handled: boolean);
2070
2133
  /**
2071
2134
  * The type of the dialog.
2072
2135
  */
@@ -2094,6 +2157,11 @@ export declare abstract class Dialog {
2094
2157
  dismiss(): Promise<void>;
2095
2158
  }
2096
2159
 
2160
+ /**
2161
+ * @public
2162
+ */
2163
+ export declare const disposeSymbol: typeof Symbol.dispose;
2164
+
2097
2165
  /**
2098
2166
  * @public
2099
2167
  */
@@ -2794,6 +2862,8 @@ export declare class EventEmitter<
2794
2862
  * @returns `this` to enable you to chain method calls.
2795
2863
  */
2796
2864
  removeAllListeners(type?: keyof EventsWithWildcard<Events>): this;
2865
+ [disposeSymbol](): void;
2866
+ [asyncDisposeSymbol](): Promise<void>;
2797
2867
  }
2798
2868
 
2799
2869
  /**
@@ -3731,6 +3801,18 @@ export declare interface GeolocationOptions {
3731
3801
  accuracy?: number;
3732
3802
  }
3733
3803
 
3804
+ /**
3805
+ * Options for {@link Browser.getPWAState}.
3806
+ *
3807
+ * @public
3808
+ */
3809
+ export declare interface GetPWAStateOptions {
3810
+ /**
3811
+ * The id from the web app's manifest file.
3812
+ */
3813
+ manifestId: string;
3814
+ }
3815
+
3734
3816
  /**
3735
3817
  * @public
3736
3818
  */
@@ -4157,6 +4239,37 @@ export declare type InnerParams<T extends unknown[]> = {
4157
4239
  [K in keyof T]: FlattenHandle<T[K]>;
4158
4240
  };
4159
4241
 
4242
+ /**
4243
+ * Options for {@link Browser.installPWA}.
4244
+ *
4245
+ * @public
4246
+ */
4247
+ export declare interface InstallPWAOptions {
4248
+ /**
4249
+ * The id from the web app's manifest file, commonly the URL of the site
4250
+ * installing the web app. See
4251
+ * {@link https://web.dev/learn/pwa/web-app-manifest | Web app manifest}.
4252
+ */
4253
+ manifestId: string;
4254
+ /**
4255
+ * The URL used to install the app, or the URL of its signed web bundle.
4256
+ *
4257
+ * This is required because the browser-scoped CDP session has no associated
4258
+ * page from which Chromium could derive an install URL.
4259
+ */
4260
+ installUrlOrBundleUrl: string;
4261
+ /**
4262
+ * Whether the app should open in a standalone window or a browser tab.
4263
+ *
4264
+ * @remarks
4265
+ *
4266
+ * `PWA.install` alone leaves the app at Chromium's default display mode
4267
+ * (`browser`); setting this chains a `PWA.changeAppUserSettings` call to apply
4268
+ * the preference.
4269
+ */
4270
+ displayMode?: PWADisplayMode;
4271
+ }
4272
+
4160
4273
  /**
4161
4274
  * @public
4162
4275
  */
@@ -4355,6 +4468,8 @@ export declare abstract class JSHandle<T = unknown> {
4355
4468
  * backing this handle.
4356
4469
  */
4357
4470
  abstract remoteObject(): Protocol.Runtime.RemoteObject;
4471
+ [disposeSymbol](): void;
4472
+ [asyncDisposeSymbol](): Promise<void>;
4358
4473
  }
4359
4474
 
4360
4475
  /**
@@ -5100,6 +5215,28 @@ export declare interface LaunchOptions extends ConnectOptions {
5100
5215
  signal?: AbortSignal;
5101
5216
  }
5102
5217
 
5218
+ /**
5219
+ * Options for {@link Browser.launchPWA}.
5220
+ *
5221
+ * @public
5222
+ */
5223
+ export declare interface LaunchPWAOptions {
5224
+ /**
5225
+ * The id from the web app's manifest file.
5226
+ */
5227
+ manifestId: string;
5228
+ /**
5229
+ * An optional URL within the app's scope to launch. Defaults to the app's
5230
+ * start URL.
5231
+ */
5232
+ url?: string;
5233
+ /**
5234
+ * Maximum time in milliseconds to wait for the app's page target to appear.
5235
+ * Defaults to 30 seconds. Pass `0` to disable the timeout.
5236
+ */
5237
+ timeout?: number;
5238
+ }
5239
+
5103
5240
  /**
5104
5241
  * Locators describe a strategy of locating objects and performing an action on
5105
5242
  * them. If the action fails because the object is not ready for the action, the
@@ -5817,7 +5954,7 @@ export declare abstract class Page extends EventEmitter<PageEvents> {
5817
5954
  abstract get tracing(): Tracing;
5818
5955
  /**
5819
5956
  * Experimental API for {@link https://github.com/webmachinelearning/webmcp| WebMCP}.
5820
- * Requires Chrome 150+ with the `--enable-features=WebMCP` flag enabled.
5957
+ * Requires Chrome 151+ with the `--enable-features=WebMCP` flag enabled.
5821
5958
  *
5822
5959
  * @experimental
5823
5960
  */
@@ -7560,6 +7697,8 @@ export declare abstract class Page extends EventEmitter<PageEvents> {
7560
7697
  * @experimental
7561
7698
  */
7562
7699
  abstract windowId(): Promise<WindowId>;
7700
+ [disposeSymbol](): void;
7701
+ [asyncDisposeSymbol](): Promise<void>;
7563
7702
  /**
7564
7703
  * Opens DevTools for the this page if not already open and returns the DevTools page.
7565
7704
  * This method is only available in Chrome.
@@ -8188,6 +8327,12 @@ declare namespace Puppeteer_2 {
8188
8327
  WorkAreaInsets,
8189
8328
  AddScreenParams,
8190
8329
  ExtensionInstallOptions,
8330
+ PWADisplayMode,
8331
+ InstallPWAOptions,
8332
+ UninstallPWAOptions,
8333
+ LaunchPWAOptions,
8334
+ GetPWAStateOptions,
8335
+ PWAState,
8191
8336
  BrowserContextEvents,
8192
8337
  CDPEvents,
8193
8338
  CDPSessionEvents,
@@ -8371,6 +8516,8 @@ declare namespace Puppeteer_2 {
8371
8516
  FileChooser,
8372
8517
  Puppeteer,
8373
8518
  SecurityDetails,
8519
+ disposeSymbol,
8520
+ asyncDisposeSymbol,
8374
8521
  BrowserLauncher,
8375
8522
  PuppeteerNode,
8376
8523
  ScreenRecorder,
@@ -8537,6 +8684,31 @@ export declare class PuppeteerNode extends Puppeteer {
8537
8684
  trimCache(): Promise<void>;
8538
8685
  }
8539
8686
 
8687
+ /**
8688
+ * If the user prefers opening an installed web app in a standalone window or in
8689
+ * a browser tab.
8690
+ *
8691
+ * @public
8692
+ */
8693
+ export declare type PWADisplayMode = 'standalone' | 'browser';
8694
+
8695
+ /**
8696
+ * The OS-integration state of an installed web app, returned by
8697
+ * {@link Browser.getPWAState}.
8698
+ *
8699
+ * @public
8700
+ */
8701
+ export declare interface PWAState {
8702
+ /**
8703
+ * The current badge count shown on the app icon.
8704
+ */
8705
+ badgeCount: number;
8706
+ /**
8707
+ * The file handlers registered by the app with the OS.
8708
+ */
8709
+ fileHandlers: Protocol.PWA.FileHandler[];
8710
+ }
8711
+
8540
8712
  /**
8541
8713
  * @public
8542
8714
  */
@@ -8682,6 +8854,7 @@ export declare abstract class Realm {
8682
8854
  },
8683
8855
  ...args: Params
8684
8856
  ): Promise<HandleFor<Awaited<ReturnType<Func>>>>;
8857
+ [disposeSymbol](): void;
8685
8858
  }
8686
8859
 
8687
8860
  /**
@@ -8865,6 +9038,7 @@ export declare class ScreenRecorder extends PassThrough {
8865
9038
  * @public
8866
9039
  */
8867
9040
  stop(): Promise<void>;
9041
+ [asyncDisposeSymbol](): Promise<void>;
8868
9042
  }
8869
9043
 
8870
9044
  /**
@@ -9338,6 +9512,18 @@ export declare interface TracingOptions {
9338
9512
  categories?: string[];
9339
9513
  }
9340
9514
 
9515
+ /**
9516
+ * Options for {@link Browser.uninstallPWA}.
9517
+ *
9518
+ * @public
9519
+ */
9520
+ export declare interface UninstallPWAOptions {
9521
+ /**
9522
+ * The id from the web app's manifest file.
9523
+ */
9524
+ manifestId: string;
9525
+ }
9526
+
9341
9527
  /**
9342
9528
  * Puppeteer will throw this error if a method is not
9343
9529
  * supported by the currently used protocol
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "puppeteer-core",
3
- "version": "25.3.0",
3
+ "version": "25.4.0",
4
4
  "description": "A high-level API to control headless Chrome over the DevTools Protocol",
5
5
  "keywords": [
6
6
  "puppeteer",
@@ -149,14 +149,14 @@
149
149
  "license": "Apache-2.0",
150
150
  "dependencies": {
151
151
  "@puppeteer/browsers": "3.0.6",
152
- "chromium-bidi": "16.0.1",
153
- "devtools-protocol": "0.0.1638949",
152
+ "chromium-bidi": "17.0.2",
153
+ "devtools-protocol": "0.0.1653615",
154
154
  "typed-query-selector": "^2.12.2",
155
155
  "webdriver-bidi-protocol": "0.4.2",
156
- "ws": "^8.21.0"
156
+ "ws": "^8.21.1"
157
157
  },
158
158
  "devDependencies": {
159
- "@types/chrome": "0.2.0",
159
+ "@types/chrome": "0.2.2",
160
160
  "@types/node": "^18.17.15",
161
161
  "@types/ws": "8.18.1",
162
162
  "mitt": "3.0.1",
@@ -334,6 +334,108 @@ export interface ExtensionInstallOptions {
334
334
  enabledInIncognito: boolean;
335
335
  }
336
336
 
337
+ /**
338
+ * If the user prefers opening an installed web app in a standalone window or in
339
+ * a browser tab.
340
+ *
341
+ * @public
342
+ */
343
+ export type PWADisplayMode = 'standalone' | 'browser';
344
+
345
+ /**
346
+ * Options for {@link Browser.installPWA}.
347
+ *
348
+ * @public
349
+ */
350
+ export interface InstallPWAOptions {
351
+ /**
352
+ * The id from the web app's manifest file, commonly the URL of the site
353
+ * installing the web app. See
354
+ * {@link https://web.dev/learn/pwa/web-app-manifest | Web app manifest}.
355
+ */
356
+ manifestId: string;
357
+ /**
358
+ * The URL used to install the app, or the URL of its signed web bundle.
359
+ *
360
+ * This is required because the browser-scoped CDP session has no associated
361
+ * page from which Chromium could derive an install URL.
362
+ */
363
+ installUrlOrBundleUrl: string;
364
+ /**
365
+ * Whether the app should open in a standalone window or a browser tab.
366
+ *
367
+ * @remarks
368
+ *
369
+ * `PWA.install` alone leaves the app at Chromium's default display mode
370
+ * (`browser`); setting this chains a `PWA.changeAppUserSettings` call to apply
371
+ * the preference.
372
+ */
373
+ displayMode?: PWADisplayMode;
374
+ }
375
+
376
+ /**
377
+ * Options for {@link Browser.uninstallPWA}.
378
+ *
379
+ * @public
380
+ */
381
+ export interface UninstallPWAOptions {
382
+ /**
383
+ * The id from the web app's manifest file.
384
+ */
385
+ manifestId: string;
386
+ }
387
+
388
+ /**
389
+ * Options for {@link Browser.launchPWA}.
390
+ *
391
+ * @public
392
+ */
393
+ export interface LaunchPWAOptions {
394
+ /**
395
+ * The id from the web app's manifest file.
396
+ */
397
+ manifestId: string;
398
+ /**
399
+ * An optional URL within the app's scope to launch. Defaults to the app's
400
+ * start URL.
401
+ */
402
+ url?: string;
403
+ /**
404
+ * Maximum time in milliseconds to wait for the app's page target to appear.
405
+ * Defaults to 30 seconds. Pass `0` to disable the timeout.
406
+ */
407
+ timeout?: number;
408
+ }
409
+
410
+ /**
411
+ * Options for {@link Browser.getPWAState}.
412
+ *
413
+ * @public
414
+ */
415
+ export interface GetPWAStateOptions {
416
+ /**
417
+ * The id from the web app's manifest file.
418
+ */
419
+ manifestId: string;
420
+ }
421
+
422
+ /**
423
+ * The OS-integration state of an installed web app, returned by
424
+ * {@link Browser.getPWAState}.
425
+ *
426
+ * @public
427
+ */
428
+ export interface PWAState {
429
+ /**
430
+ * The current badge count shown on the app icon.
431
+ */
432
+ badgeCount: number;
433
+ /**
434
+ * The file handlers registered by the app with the OS.
435
+ */
436
+ fileHandlers: Protocol.PWA.FileHandler[];
437
+ }
438
+
337
439
  /**
338
440
  * {@link Browser} represents a browser instance that is either:
339
441
  *
@@ -662,6 +764,59 @@ export abstract class Browser extends EventEmitter<BrowserEvents> {
662
764
  */
663
765
  abstract uninstallExtension(id: string): Promise<void>;
664
766
 
767
+ /**
768
+ * Installs a Progressive Web App (PWA) and returns its manifest id.
769
+ *
770
+ * @remarks
771
+ *
772
+ * Only available when connected to the browser over a pipe connection. Set
773
+ * `pipe: true` in {@link PuppeteerNode.launch | puppeteer.launch}; the launch
774
+ * option defaults to `false`. The underlying `PWA` CDP domain is not exposed
775
+ * over a WebSocket connection.
776
+ *
777
+ * The returned manifest id echoes {@link InstallPWAOptions.manifestId}, so it
778
+ * can be passed directly to {@link Browser.launchPWA},
779
+ * {@link Browser.getPWAState}, or {@link Browser.uninstallPWA}.
780
+ */
781
+ abstract installPWA(options: InstallPWAOptions): Promise<string>;
782
+
783
+ /**
784
+ * Uninstalls a previously installed Progressive Web App (PWA).
785
+ *
786
+ * @remarks
787
+ *
788
+ * Only available over a pipe connection. See {@link Browser.installPWA}.
789
+ */
790
+ abstract uninstallPWA(options: UninstallPWAOptions): Promise<void>;
791
+
792
+ /**
793
+ * Launches an installed Progressive Web App (PWA) and resolves with the
794
+ * {@link Page | page} backing the app window.
795
+ *
796
+ * @remarks
797
+ *
798
+ * Only available over a pipe connection. See {@link Browser.installPWA}.
799
+ *
800
+ * `PWA.launch` resolves with the id of the launched _tab_ target. Puppeteer
801
+ * does not expose tab targets through {@link Browser.targets}; this method
802
+ * instead resolves with the tab's child page target (the app's web contents).
803
+ * If Chromium focuses an existing app window, this returns that window's
804
+ * existing page.
805
+ */
806
+ abstract launchPWA(options: LaunchPWAOptions): Promise<Page>;
807
+
808
+ /**
809
+ * Returns the OS-integration state of an installed Progressive Web App (PWA),
810
+ * such as its badge count and registered file handlers.
811
+ *
812
+ * @remarks
813
+ *
814
+ * Only available over a pipe connection. See {@link Browser.installPWA}.
815
+ * Meaningful only for an app that is currently installed; querying an
816
+ * unknown manifest id rejects.
817
+ */
818
+ abstract getPWAState(options: GetPWAStateOptions): Promise<PWAState>;
819
+
665
820
  /**
666
821
  * Gets a list of {@link ScreenInfo | screen information objects}.
667
822
  */
@@ -690,12 +845,10 @@ export abstract class Browser extends EventEmitter<BrowserEvents> {
690
845
  */
691
846
  abstract get connected(): boolean;
692
847
 
693
- /** @internal */
694
848
  override [disposeSymbol](): void {
695
849
  return void this[asyncDisposeSymbol]().catch(debugCatchError);
696
850
  }
697
851
 
698
- /** @internal */
699
852
  override async [asyncDisposeSymbol](): Promise<void> {
700
853
  if (this.process()) {
701
854
  await this.close();
@@ -371,12 +371,10 @@ export abstract class BrowserContext extends EventEmitter<BrowserContextEvents>
371
371
  return undefined;
372
372
  }
373
373
 
374
- /** @internal */
375
374
  override [disposeSymbol](): void {
376
375
  return void this[asyncDisposeSymbol]().catch(debugCatchError);
377
376
  }
378
377
 
379
- /** @internal */
380
378
  override async [asyncDisposeSymbol](): Promise<void> {
381
379
  await this.close();
382
380
  await super[asyncDisposeSymbol]();
@@ -34,10 +34,18 @@ export abstract class Dialog {
34
34
  #type: Protocol.Page.DialogType;
35
35
  #message: string;
36
36
  #defaultValue: string;
37
+ #handled = false;
38
+
37
39
  /**
38
- * @internal
40
+ * A boolean value indicating whether the dialog has been handled.
39
41
  */
40
- protected handled = false;
42
+ public get handled(): boolean {
43
+ return this.#handled;
44
+ }
45
+
46
+ protected set handled(handled: boolean) {
47
+ this.#handled = handled;
48
+ }
41
49
 
42
50
  /**
43
51
  * @internal
@@ -193,12 +193,10 @@ export abstract class JSHandle<T = unknown> {
193
193
  */
194
194
  abstract remoteObject(): Protocol.Runtime.RemoteObject;
195
195
 
196
- /** @internal */
197
196
  [disposeSymbol](): void {
198
197
  return void this[asyncDisposeSymbol]().catch(debugCatchError);
199
198
  }
200
199
 
201
- /** @internal */
202
200
  [asyncDisposeSymbol](): Promise<void> {
203
201
  return this.dispose();
204
202
  }
@@ -957,7 +957,7 @@ export abstract class Page extends EventEmitter<PageEvents> {
957
957
 
958
958
  /**
959
959
  * Experimental API for {@link https://github.com/webmachinelearning/webmcp| WebMCP}.
960
- * Requires Chrome 150+ with the `--enable-features=WebMCP` flag enabled.
960
+ * Requires Chrome 151+ with the `--enable-features=WebMCP` flag enabled.
961
961
  *
962
962
  * @experimental
963
963
  */
@@ -3232,12 +3232,10 @@ export abstract class Page extends EventEmitter<PageEvents> {
3232
3232
  */
3233
3233
  abstract windowId(): Promise<WindowId>;
3234
3234
 
3235
- /** @internal */
3236
3235
  override [disposeSymbol](): void {
3237
3236
  return void this[asyncDisposeSymbol]().catch(debugCatchError);
3238
3237
  }
3239
3238
 
3240
- /** @internal */
3241
3239
  override async [asyncDisposeSymbol](): Promise<void> {
3242
3240
  await this.close();
3243
3241
  await super[asyncDisposeSymbol]();
@@ -199,7 +199,6 @@ export abstract class Realm {
199
199
  );
200
200
  }
201
201
 
202
- /** @internal */
203
202
  [disposeSymbol](): void {
204
203
  this.dispose();
205
204
  }
@@ -15,8 +15,10 @@ import type {Handler} from '../common/EventEmitter.js';
15
15
 
16
16
  import {BidiConnection} from './Connection.js';
17
17
 
18
- const bidiServerLogger = (prefix: string, ...args: unknown[]): void => {
19
- debug(`bidi:${prefix}`)?.(args);
18
+ const bidiServerLogger = (
19
+ prefix: string,
20
+ ): ((...args: unknown[]) => void) | undefined => {
21
+ return debug(`bidi:${prefix}`);
20
22
  };
21
23
 
22
24
  /**
@@ -19,6 +19,7 @@ import {
19
19
  type WindowBounds,
20
20
  type WindowId,
21
21
  type DebugInfo,
22
+ type PWAState,
22
23
  } from '../api/Browser.js';
23
24
  import {BrowserContextEvent} from '../api/BrowserContext.js';
24
25
  import type {Extension} from '../api/Extension.js';
@@ -297,6 +298,22 @@ export class BidiBrowser extends Browser {
297
298
  await this.#browserCore.uninstallExtension(id);
298
299
  }
299
300
 
301
+ override installPWA(): Promise<string> {
302
+ throw new UnsupportedOperation();
303
+ }
304
+
305
+ override uninstallPWA(): Promise<void> {
306
+ throw new UnsupportedOperation();
307
+ }
308
+
309
+ override launchPWA(): Promise<Page> {
310
+ throw new UnsupportedOperation();
311
+ }
312
+
313
+ override getPWAState(): Promise<PWAState> {
314
+ throw new UnsupportedOperation();
315
+ }
316
+
300
317
  override screens(): Promise<ScreenInfo[]> {
301
318
  throw new UnsupportedOperation();
302
319
  }
@@ -102,10 +102,11 @@ export class BidiHTTPResponse extends HTTPResponse {
102
102
  // https://w3c.github.io/webdriver-bidi/#type-network-Header
103
103
  if (header.value.type === 'string') {
104
104
  const headerName = header.name.toLowerCase();
105
- headers[headerName] = normalizeHeaderValue(
106
- headerName,
107
- header.value.value,
108
- );
105
+ const value =
106
+ headerName in headers
107
+ ? `${headers[headerName]}\n${header.value.value}`
108
+ : header.value.value;
109
+ headers[headerName] = normalizeHeaderValue(headerName, value);
109
110
  }
110
111
  }
111
112
  return headers;