chrome-devtools-frontend 1.0.1556696 → 1.0.1559913

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 (201) hide show
  1. package/front_end/Images/src/container.svg +4 -0
  2. package/front_end/core/common/Gzip.ts +15 -0
  3. package/front_end/core/common/Object.ts +5 -1
  4. package/front_end/core/host/ResourceLoader.ts +1 -1
  5. package/front_end/core/host/UserMetrics.ts +3 -1
  6. package/front_end/core/sdk/CSSMetadata.ts +6 -6
  7. package/front_end/core/sdk/CSSModel.ts +2 -2
  8. package/front_end/core/sdk/DOMModel.ts +14 -3
  9. package/front_end/core/sdk/NetworkManager.ts +0 -7
  10. package/front_end/core/sdk/SourceMap.ts +16 -2
  11. package/front_end/core/sdk/SourceMapManager.ts +1 -1
  12. package/front_end/core/sdk/SourceMapScopesInfo.ts +11 -4
  13. package/front_end/entrypoints/formatter_worker/FormatterActions.ts +1 -0
  14. package/front_end/entrypoints/formatter_worker/ScopeParser.ts +51 -8
  15. package/front_end/entrypoints/main/GlobalAiButton.ts +5 -1
  16. package/front_end/generated/Deprecation.ts +0 -7
  17. package/front_end/generated/InspectorBackendCommands.ts +5 -4
  18. package/front_end/generated/SupportedCSSProperties.js +64 -32
  19. package/front_end/generated/protocol-mapping.d.ts +9 -0
  20. package/front_end/generated/protocol-proxy-api.d.ts +7 -0
  21. package/front_end/generated/protocol.ts +23 -1
  22. package/front_end/models/ai_assistance/agents/StylingAgent.ts +1 -1
  23. package/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.ts +11 -7
  24. package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.snapshot.txt +3 -3
  25. package/front_end/models/bindings/CompilerScriptMapping.ts +7 -6
  26. package/front_end/models/bindings/DebuggerWorkspaceBinding.ts +4 -4
  27. package/front_end/models/javascript_metadata/NativeFunctions.js +2 -2
  28. package/front_end/models/stack_trace/StackTraceImpl.ts +5 -3
  29. package/front_end/models/stack_trace/StackTraceModel.ts +53 -40
  30. package/front_end/models/trace/EventsSerializer.ts +8 -2
  31. package/front_end/models/trace/LanternComputationData.ts +4 -3
  32. package/front_end/models/trace/Processor.ts +6 -5
  33. package/front_end/models/trace/Styles.ts +10 -1
  34. package/front_end/models/trace/handlers/LargestImagePaintHandler.ts +2 -2
  35. package/front_end/models/trace/handlers/LayoutShiftsHandler.ts +2 -2
  36. package/front_end/models/trace/handlers/MetaHandler.ts +14 -0
  37. package/front_end/models/trace/handlers/PageLoadMetricsHandler.ts +54 -34
  38. package/front_end/models/trace/helpers/Timing.ts +8 -1
  39. package/front_end/models/trace/insights/Common.ts +1 -1
  40. package/front_end/models/trace/insights/LCPBreakdown.ts +4 -4
  41. package/front_end/models/trace/insights/LCPDiscovery.ts +3 -3
  42. package/front_end/models/trace/insights/RenderBlocking.ts +1 -1
  43. package/front_end/models/trace/insights/types.ts +1 -1
  44. package/front_end/models/trace/types/TraceEvents.ts +62 -10
  45. package/front_end/panels/application/AppManifestView.ts +134 -223
  46. package/front_end/panels/application/CookieItemsView.ts +1 -0
  47. package/front_end/panels/application/SharedStorageTreeElement.ts +3 -0
  48. package/front_end/panels/application/appManifestView.css +1 -1
  49. package/front_end/panels/common/AiCodeGenerationTeaser.ts +48 -12
  50. package/front_end/panels/common/aiCodeGenerationTeaser.css +14 -0
  51. package/front_end/panels/common/common.ts +1 -1
  52. package/front_end/panels/console/ConsoleViewMessage.ts +4 -3
  53. package/front_end/panels/console/consoleView.css +1 -1
  54. package/front_end/panels/elements/CSSRuleValidator.ts +38 -0
  55. package/front_end/panels/elements/ElementsTreeElement.ts +108 -58
  56. package/front_end/panels/elements/ElementsTreeOutline.ts +0 -17
  57. package/front_end/panels/elements/ElementsTreeOutlineRenderer.ts +7 -1
  58. package/front_end/panels/elements/StylesSidebarPane.ts +15 -4
  59. package/front_end/panels/elements/components/AdornerManager.ts +8 -0
  60. package/front_end/panels/emulation/DeviceModeToolbar.ts +3 -1
  61. package/front_end/panels/issues/AffectedResourcesView.ts +0 -1
  62. package/front_end/panels/lighthouse/LighthousePanel.ts +10 -0
  63. package/front_end/panels/lighthouse/lighthousePanel.css +46 -3
  64. package/front_end/panels/network/NetworkLogViewColumns.ts +9 -9
  65. package/front_end/panels/network/RequestCookiesView.ts +125 -141
  66. package/front_end/panels/network/components/RequestHeadersView.ts +2 -2
  67. package/front_end/panels/network/requestCookiesView.css +22 -20
  68. package/front_end/panels/recorder/components/RecordingView.ts +3 -3
  69. package/front_end/panels/recorder/components/StepView.ts +2 -1
  70. package/front_end/panels/settings/keybindsSettingsTab.css +4 -0
  71. package/front_end/panels/sources/CallStackSidebarPane.ts +7 -3
  72. package/front_end/panels/sources/DebuggerPausedMessage.ts +125 -90
  73. package/front_end/panels/sources/SourcesPanel.ts +10 -7
  74. package/front_end/panels/sources/debuggerPausedMessage.css +8 -0
  75. package/front_end/panels/timeline/StatusDialog.ts +4 -3
  76. package/front_end/panels/timeline/TimelineFlameChartNetworkDataProvider.ts +3 -16
  77. package/front_end/panels/timeline/TimelineFlameChartView.ts +64 -21
  78. package/front_end/panels/timeline/TimelinePanel.ts +71 -24
  79. package/front_end/panels/timeline/TimelineUIUtils.ts +28 -2
  80. package/front_end/panels/timeline/TimingsTrackAppender.ts +3 -1
  81. package/front_end/panels/timeline/components/SidebarSingleInsightSet.ts +1 -1
  82. package/front_end/panels/timeline/components/insights/RenderBlocking.ts +6 -4
  83. package/front_end/panels/timeline/components/sidebarInsightsTab.css +2 -0
  84. package/front_end/panels/timeline/overlays/OverlaysImpl.ts +4 -0
  85. package/front_end/panels/timeline/timelinePanel.css +8 -1
  86. package/front_end/panels/timeline/utils/EntryNodes.ts +2 -1
  87. package/front_end/third_party/acorn/estree-legacy.d.ts +2 -0
  88. package/front_end/third_party/chromium/README.chromium +1 -1
  89. package/front_end/third_party/puppeteer/README.chromium +2 -2
  90. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.d.ts +12 -0
  91. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.d.ts.map +1 -1
  92. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.js.map +1 -1
  93. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.d.ts +14 -2
  94. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.d.ts.map +1 -1
  95. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.js.map +1 -1
  96. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Browser.d.ts +3 -1
  97. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Browser.d.ts.map +1 -1
  98. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Browser.js +6 -0
  99. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Browser.js.map +1 -1
  100. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/HTTPRequest.d.ts +0 -1
  101. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/HTTPRequest.d.ts.map +1 -1
  102. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/HTTPRequest.js +0 -20
  103. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/HTTPRequest.js.map +1 -1
  104. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.d.ts +3 -1
  105. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.d.ts.map +1 -1
  106. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.js +10 -14
  107. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.js.map +1 -1
  108. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/BrowsingContext.d.ts +1 -0
  109. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/BrowsingContext.d.ts.map +1 -1
  110. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/BrowsingContext.js +14 -0
  111. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/BrowsingContext.js.map +1 -1
  112. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.d.ts +3 -1
  113. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.d.ts.map +1 -1
  114. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.js +12 -0
  115. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.js.map +1 -1
  116. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/EmulationManager.d.ts +1 -0
  117. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/EmulationManager.d.ts.map +1 -1
  118. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/EmulationManager.js +22 -0
  119. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/EmulationManager.js.map +1 -1
  120. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.d.ts +3 -1
  121. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.d.ts.map +1 -1
  122. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.js +9 -2
  123. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.js.map +1 -1
  124. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/injected.d.ts +1 -1
  125. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.d.ts +3 -3
  126. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js +3 -3
  127. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js.map +1 -1
  128. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/Mutex.d.ts +2 -2
  129. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/version.d.ts +1 -1
  130. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/version.js +1 -1
  131. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.d.ts +26 -0
  132. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +72 -15
  133. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.d.ts +12 -0
  134. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.d.ts.map +1 -1
  135. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.js.map +1 -1
  136. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.d.ts +14 -2
  137. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.d.ts.map +1 -1
  138. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.js.map +1 -1
  139. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Browser.d.ts +3 -1
  140. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Browser.d.ts.map +1 -1
  141. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Browser.js +6 -0
  142. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Browser.js.map +1 -1
  143. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/HTTPRequest.d.ts +0 -1
  144. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/HTTPRequest.d.ts.map +1 -1
  145. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/HTTPRequest.js +0 -20
  146. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/HTTPRequest.js.map +1 -1
  147. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.d.ts +3 -1
  148. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.d.ts.map +1 -1
  149. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.js +11 -15
  150. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.js.map +1 -1
  151. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/BrowsingContext.d.ts +1 -0
  152. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/BrowsingContext.d.ts.map +1 -1
  153. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/BrowsingContext.js +14 -0
  154. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/BrowsingContext.js.map +1 -1
  155. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.d.ts +3 -1
  156. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.d.ts.map +1 -1
  157. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.js +12 -0
  158. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.js.map +1 -1
  159. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/EmulationManager.d.ts +1 -0
  160. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/EmulationManager.d.ts.map +1 -1
  161. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/EmulationManager.js +22 -0
  162. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/EmulationManager.js.map +1 -1
  163. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.d.ts +3 -1
  164. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.d.ts.map +1 -1
  165. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.js +9 -2
  166. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.js.map +1 -1
  167. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.d.ts +3 -3
  168. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js +3 -3
  169. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js.map +1 -1
  170. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/version.d.ts +1 -1
  171. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/version.js +1 -1
  172. package/front_end/third_party/puppeteer/package/lib/types.d.ts +26 -0
  173. package/front_end/third_party/puppeteer/package/package.json +1 -1
  174. package/front_end/third_party/puppeteer/package/src/api/Browser.ts +18 -0
  175. package/front_end/third_party/puppeteer/package/src/api/Page.ts +16 -2
  176. package/front_end/third_party/puppeteer/package/src/bidi/Browser.ts +13 -0
  177. package/front_end/third_party/puppeteer/package/src/bidi/HTTPRequest.ts +0 -33
  178. package/front_end/third_party/puppeteer/package/src/bidi/Page.ts +14 -28
  179. package/front_end/third_party/puppeteer/package/src/bidi/core/BrowsingContext.ts +19 -0
  180. package/front_end/third_party/puppeteer/package/src/cdp/Browser.ts +19 -0
  181. package/front_end/third_party/puppeteer/package/src/cdp/EmulationManager.ts +30 -0
  182. package/front_end/third_party/puppeteer/package/src/cdp/Page.ts +15 -6
  183. package/front_end/third_party/puppeteer/package/src/revisions.ts +3 -3
  184. package/front_end/third_party/puppeteer/package/src/util/version.ts +1 -1
  185. package/front_end/ui/components/icon_button/iconButton.css +3 -1
  186. package/front_end/ui/components/report_view/ReportView.ts +11 -2
  187. package/front_end/ui/components/report_view/report.css +16 -0
  188. package/front_end/ui/components/text_editor/AiCodeGenerationProvider.ts +202 -32
  189. package/front_end/ui/components/text_editor/config.ts +6 -6
  190. package/front_end/ui/legacy/ContextMenu.ts +11 -2
  191. package/front_end/ui/legacy/SearchableView.ts +11 -5
  192. package/front_end/ui/legacy/SplitWidget.ts +1 -1
  193. package/front_end/ui/legacy/TextPrompt.ts +1 -1
  194. package/front_end/ui/legacy/Toolbar.ts +4 -0
  195. package/front_end/ui/legacy/UIUtils.ts +0 -2
  196. package/front_end/ui/legacy/components/cookie_table/CookiesTable.ts +18 -3
  197. package/front_end/ui/legacy/components/data_grid/DataGrid.ts +3 -3
  198. package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +6 -0
  199. package/front_end/ui/legacy/components/perf_ui/FlameChart.ts +43 -9
  200. package/front_end/ui/visual_logging/KnownContextValues.ts +13 -0
  201. package/package.json +1 -1
@@ -0,0 +1,4 @@
1
+ <svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M4.5 17C4.08333 17 3.72933 16.854 3.438 16.562C3.146 16.2707 3 15.9167 3 15.5V4.5C3 4.08333 3.146 3.72933 3.438 3.438C3.72933 3.146 4.08333 3 4.5 3H15.5C15.9167 3 16.2707 3.146 16.562 3.438C16.854 3.72933 17 4.08333 17 4.5V15.5C17 15.9167 16.854 16.2707 16.562 16.562C16.2707 16.854 15.9167 17 15.5 17H4.5ZM4.5 15.5H15.5V4.5H4.5V15.5Z" fill="black"/>
3
+ <path d="M6.85714 14C6.61905 14 6.41676 13.9166 6.25029 13.7497C6.08343 13.5833 6 13.381 6 13.1429V6.85714C6 6.61905 6.08343 6.41676 6.25029 6.25029C6.41676 6.08343 6.61905 6 6.85714 6H13.1429C13.381 6 13.5833 6.08343 13.7497 6.25029C13.9166 6.41676 14 6.61905 14 6.85714V13.1429C14 13.381 13.9166 13.5833 13.7497 13.7497C13.5833 13.9166 13.381 14 13.1429 14H6.85714ZM7.5 12.5H12.5V7.5H7.5V12.5Z" fill="black"/>
4
+ </svg>
@@ -68,7 +68,22 @@ export function decompressStream(stream: ReadableStream): ReadableStream {
68
68
  const ds = new DecompressionStream('gzip');
69
69
  return stream.pipeThrough(ds);
70
70
  }
71
+
71
72
  export function compressStream(stream: ReadableStream): ReadableStream {
72
73
  const cs = new CompressionStream('gzip');
73
74
  return stream.pipeThrough(cs);
74
75
  }
76
+
77
+ export function createMonitoredStream(stream: ReadableStream, onProgress: (bytesRead: number) => void): ReadableStream {
78
+ let bytesRead = 0;
79
+
80
+ const progressTransformer = new TransformStream({
81
+ transform(chunk, controller) {
82
+ bytesRead += chunk.byteLength;
83
+ onProgress(bytesRead);
84
+ controller.enqueue(chunk);
85
+ }
86
+ });
87
+
88
+ return stream.pipeThrough(progressTransformer);
89
+ }
@@ -105,7 +105,11 @@ export class ObjectWrapper<Events> implements EventTarget<Events> {
105
105
  // new listeners.
106
106
  for (const listener of [...listeners]) {
107
107
  if (!listener.disposed) {
108
- listener.listener.call(listener.thisObject, event);
108
+ try {
109
+ listener.listener.call(listener.thisObject, event);
110
+ } catch (err) {
111
+ console.error(`Event listener for ${String(eventType)} throw an error:`, err);
112
+ }
109
113
  }
110
114
  }
111
115
  }
@@ -206,7 +206,7 @@ async function fetchToString(url: string): Promise<string> {
206
206
 
207
207
  function canBeRemoteFilePath(url: string): boolean {
208
208
  try {
209
- const urlObject = new URL(url);
209
+ const urlObject = new URL(new URL(url).toString()); // Normalize first.
210
210
  return urlObject.protocol === 'file:' && urlObject.host !== '';
211
211
  } catch {
212
212
  return false;
@@ -531,7 +531,9 @@ export enum Action {
531
531
  AiCodeGenerationSuggestionAccepted = 196,
532
532
  InsightTeaserModelDownloadStarted = 197,
533
533
  InsightTeaserModelDownloadCompleted = 198,
534
- MAX_VALUE = 199,
534
+ AiCodeGenerationError = 199,
535
+ AiCodeGenerationRequestTriggered = 200,
536
+ MAX_VALUE = 201,
535
537
  /* eslint-enable @typescript-eslint/naming-convention */
536
538
  }
537
539
 
@@ -644,7 +644,7 @@ const extraPropertyValues = new Map<string, Set<string>>([
644
644
  ['background-repeat', new Set(['repeat', 'repeat-x', 'repeat-y', 'no-repeat', 'space', 'round'])],
645
645
  ['content', new Set(['normal', 'close-quote', 'no-close-quote', 'no-open-quote', 'open-quote'])],
646
646
  ['baseline-shift', new Set(['baseline'])],
647
- ['max-height', new Set(['min-content', 'max-content', '-webkit-fill-available', 'fit-content'])],
647
+ ['max-height', new Set(['min-content', 'max-content', '-webkit-fill-available', 'fit-content', 'stretch'])],
648
648
  ['color', new Set(['black'])],
649
649
  ['background-color', new Set(['white'])],
650
650
  ['box-shadow', new Set(['inset'])],
@@ -718,7 +718,7 @@ const extraPropertyValues = new Map<string, Set<string>>([
718
718
  ]),
719
719
  ],
720
720
  ['zoom', new Set(['normal'])],
721
- ['max-width', new Set(['min-content', 'max-content', '-webkit-fill-available', 'fit-content'])],
721
+ ['max-width', new Set(['min-content', 'max-content', '-webkit-fill-available', 'fit-content', 'stretch'])],
722
722
  ['-webkit-font-smoothing', new Set(['antialiased', 'subpixel-antialiased'])],
723
723
  [
724
724
  'border',
@@ -1109,7 +1109,7 @@ const extraPropertyValues = new Map<string, Set<string>>([
1109
1109
  ]),
1110
1110
  ],
1111
1111
  ['flex-flow', new Set(['nowrap', 'row', 'row-reverse', 'column', 'column-reverse', 'wrap', 'wrap-reverse'])],
1112
- ['height', new Set(['-webkit-fill-available'])],
1112
+ ['height', new Set(['-webkit-fill-available', 'stretch'])],
1113
1113
  ['inline-size', new Set(['-webkit-fill-available', 'min-content', 'max-content', 'fit-content'])],
1114
1114
  [
1115
1115
  'list-style',
@@ -1176,9 +1176,9 @@ const extraPropertyValues = new Map<string, Set<string>>([
1176
1176
  ['max-block-size', new Set(['-webkit-fill-available', 'min-content', 'max-content', 'fit-content'])],
1177
1177
  ['max-inline-size', new Set(['-webkit-fill-available', 'min-content', 'max-content', 'fit-content'])],
1178
1178
  ['min-block-size', new Set(['-webkit-fill-available', 'min-content', 'max-content', 'fit-content'])],
1179
- ['min-height', new Set(['-webkit-fill-available', 'min-content', 'max-content', 'fit-content'])],
1179
+ ['min-height', new Set(['-webkit-fill-available', 'min-content', 'max-content', 'fit-content', 'stretch'])],
1180
1180
  ['min-inline-size', new Set(['-webkit-fill-available', 'min-content', 'max-content', 'fit-content'])],
1181
- ['min-width', new Set(['-webkit-fill-available', 'min-content', 'max-content', 'fit-content'])],
1181
+ ['min-width', new Set(['-webkit-fill-available', 'min-content', 'max-content', 'fit-content', 'stretch'])],
1182
1182
  ['object-position', new Set(['top', 'bottom', 'left', 'right', 'center'])],
1183
1183
  ['shape-outside', new Set(['border-box', 'content-box', 'padding-box', 'margin-box'])],
1184
1184
  [
@@ -1340,7 +1340,7 @@ const extraPropertyValues = new Map<string, Set<string>>([
1340
1340
  ['-webkit-text-stroke-width', new Set(['medium', 'thick', 'thin'])],
1341
1341
  ['-webkit-transform-origin-x', new Set(['left', 'right', 'center'])],
1342
1342
  ['-webkit-transform-origin-y', new Set(['top', 'bottom', 'center'])],
1343
- ['width', new Set(['-webkit-fill-available'])],
1343
+ ['width', new Set(['-webkit-fill-available', 'stretch'])],
1344
1344
  ['contain-intrinsic-width', new Set(['auto none', 'auto 100px'])],
1345
1345
  ['contain-intrinsic-height', new Set(['auto none', 'auto 100px'])],
1346
1346
  ['contain-intrinsic-size', new Set(['auto none', 'auto 100px'])],
@@ -38,7 +38,7 @@ export interface LayoutProperties {
38
38
  isGrid: boolean;
39
39
  isSubgrid: boolean;
40
40
  isGridLanes: boolean;
41
- isContainer: boolean;
41
+ containerType?: string;
42
42
  hasScroll: boolean;
43
43
  }
44
44
 
@@ -402,7 +402,7 @@ export class CSSModel extends SDKModel<EventTypes> {
402
402
  isGrid,
403
403
  isSubgrid,
404
404
  isGridLanes,
405
- isContainer,
405
+ containerType: isContainer ? containerType : undefined,
406
406
  hasScroll,
407
407
  };
408
408
  }
@@ -110,10 +110,12 @@ export const ARIA_ATTRIBUTES = new Set<string>([
110
110
 
111
111
  export enum DOMNodeEvents {
112
112
  TOP_LAYER_INDEX_CHANGED = 'TopLayerIndexChanged',
113
+ SCROLLABLE_FLAG_UPDATED = 'ScrollableFlagUpdated',
113
114
  }
114
115
 
115
116
  export interface DOMNodeEventTypes {
116
117
  [DOMNodeEvents.TOP_LAYER_INDEX_CHANGED]: void;
118
+ [DOMNodeEvents.SCROLLABLE_FLAG_UPDATED]: void;
117
119
  }
118
120
 
119
121
  export class DOMNode extends Common.ObjectWrapper.ObjectWrapper<DOMNodeEventTypes> {
@@ -322,6 +324,13 @@ export class DOMNode extends Common.ObjectWrapper.ObjectWrapper<DOMNodeEventType
322
324
  return false;
323
325
  }
324
326
 
327
+ isRootNode(): boolean {
328
+ if (this.nodeType() === Node.ELEMENT_NODE && this.nodeName() === 'HTML') {
329
+ return true;
330
+ }
331
+ return false;
332
+ }
333
+
325
334
  isSVGNode(): boolean {
326
335
  return this.#isSVGNode;
327
336
  }
@@ -385,6 +394,11 @@ export class DOMNode extends Common.ObjectWrapper.ObjectWrapper<DOMNodeEventType
385
394
 
386
395
  setIsScrollable(isScrollable: boolean): void {
387
396
  this.#isScrollable = isScrollable;
397
+ this.dispatchEventToListeners(DOMNodeEvents.SCROLLABLE_FLAG_UPDATED);
398
+ if (this.nodeName() === '#document') {
399
+ // We show the scroll badge of the document on the <html> element.
400
+ this.ownerDocument?.documentElement?.setIsScrollable(isScrollable);
401
+ }
388
402
  }
389
403
 
390
404
  setAffectedByStartingStyles(affectedByStartingStyles: boolean): void {
@@ -1644,7 +1658,6 @@ export class DOMModel extends SDKModel<EventTypes> {
1644
1658
  return;
1645
1659
  }
1646
1660
  node.setIsScrollable(isScrollable);
1647
- this.dispatchEventToListeners(Events.ScrollableFlagUpdated, {node});
1648
1661
  }
1649
1662
 
1650
1663
  affectedByStartingStylesFlagUpdated(nodeId: Protocol.DOM.NodeId, affectedByStartingStyles: boolean): void {
@@ -1900,7 +1913,6 @@ export enum Events {
1900
1913
  DistributedNodesChanged = 'DistributedNodesChanged',
1901
1914
  MarkersChanged = 'MarkersChanged',
1902
1915
  TopLayerElementsChanged = 'TopLayerElementsChanged',
1903
- ScrollableFlagUpdated = 'ScrollableFlagUpdated',
1904
1916
  AffectedByStartingStylesFlagUpdated = 'AffectedByStartingStylesFlagUpdated',
1905
1917
  AdoptedStyleSheetsModified = 'AdoptedStyleSheetsModified',
1906
1918
  /* eslint-enable @typescript-eslint/naming-convention */
@@ -1918,7 +1930,6 @@ export interface EventTypes {
1918
1930
  [Events.DistributedNodesChanged]: DOMNode;
1919
1931
  [Events.MarkersChanged]: DOMNode;
1920
1932
  [Events.TopLayerElementsChanged]: {document: DOMDocument, documentShortcuts: DOMNodeShortcut[]};
1921
- [Events.ScrollableFlagUpdated]: {node: DOMNode};
1922
1933
  [Events.AffectedByStartingStylesFlagUpdated]: {node: DOMNode};
1923
1934
  [Events.AdoptedStyleSheetsModified]: DOMNode;
1924
1935
  }
@@ -2716,13 +2716,6 @@ export interface Conditions {
2716
2716
  packetLoss?: number;
2717
2717
  packetQueueLength?: number;
2718
2718
  packetReordering?: boolean;
2719
- // TODO(crbug.com/1219425): In the future, it might be worthwhile to
2720
- // consider avoiding mixing up presentation state (e.g.: displayed
2721
- // titles) with behavioral state (e.g.: the throttling amounts). In
2722
- // this particular case, the title (along with other properties)
2723
- // doubles as both part of group of fields which (loosely) uniquely
2724
- // identify instances, as well as the literal string displayed in the
2725
- // UI, which leads to complications around persistance.
2726
2719
  // TODO(crbug.com/422682525): make this just a function because we use lazy string everywhere.
2727
2720
  title: string|(() => string);
2728
2721
  // Instances may be serialized to local storage, so localized titles
@@ -138,7 +138,7 @@ export class SourceMap {
138
138
 
139
139
  readonly #debugId?: DebugId;
140
140
 
141
- scopesFallbackPromiseForTest?: Promise<unknown>;
141
+ #scopesFallbackPromise?: Promise<void>;
142
142
 
143
143
  /**
144
144
  * Implements Source Map V3 model. See https://github.com/google/closure-compiler/wiki/Source-Maps
@@ -225,6 +225,11 @@ export class SourceMap {
225
225
  return this.#scopesInfo !== null && !this.#scopesInfo.isEmpty();
226
226
  }
227
227
 
228
+ waitForScopeInfo(): Promise<void> {
229
+ this.#ensureSourceMapProcessed();
230
+ return this.#scopesFallbackPromise ?? Promise.resolve();
231
+ }
232
+
228
233
  findEntry(lineNumber: number, columnNumber: number, inlineFrameIndex?: number): SourceMapEntry|null {
229
234
  this.#ensureSourceMapProcessed();
230
235
  if (inlineFrameIndex && this.#scopesInfo !== null) {
@@ -252,6 +257,15 @@ export class SourceMap {
252
257
  return index ? mappings[index - 1] : null;
253
258
  }
254
259
 
260
+ /** Returns the entry at the given position but only if an entry exists for that exact position */
261
+ findEntryExact(lineNumber: number, columnNumber: number): SourceMapEntry|null {
262
+ const entry = this.findEntry(lineNumber, columnNumber);
263
+ if (entry?.lineNumber === lineNumber && entry.columnNumber === columnNumber) {
264
+ return entry;
265
+ }
266
+ return null;
267
+ }
268
+
255
269
  findEntryRanges(lineNumber: number, columnNumber: number): {
256
270
  range: TextUtils.TextRange.TextRange,
257
271
  sourceRange: TextUtils.TextRange.TextRange,
@@ -411,7 +425,7 @@ export class SourceMap {
411
425
  try {
412
426
  this.eachSection(this.parseMap.bind(this));
413
427
  if (!this.hasScopeInfo()) {
414
- this.scopesFallbackPromiseForTest = this.#buildScopesFallback().then(info => {
428
+ this.#scopesFallbackPromise = this.#buildScopesFallback().then(info => {
415
429
  this.#scopesInfo = info;
416
430
  });
417
431
  }
@@ -182,7 +182,7 @@ export class SourceMapManager<T extends FrameAssociated> extends Common.ObjectWr
182
182
  }
183
183
 
184
184
  waitForSourceMapsProcessedForTest(): Promise<unknown> {
185
- return Promise.all(this.#sourceMaps.keys().map(sourceMap => sourceMap.scopesFallbackPromiseForTest));
185
+ return Promise.all(this.#sourceMaps.keys().map(sourceMap => sourceMap.waitForScopeInfo()));
186
186
  }
187
187
  }
188
188
 
@@ -123,16 +123,23 @@ export class SourceMapScopesInfo {
123
123
  sourceIndex < numSourceUrls;
124
124
  const isStackFrame = node.kind === Formatter.FormatterWorkerPool.ScopeKind.FUNCTION ||
125
125
  node.kind === Formatter.FormatterWorkerPool.ScopeKind.ARROW_FUNCTION;
126
- // TODO(crbug.com/368222773): Instead of mapping `start`, we should report a number of candidates. e.g. for arrow functions we should
127
- // follow the spec and map the `=>` as the spec says that is where the original name (if any) for arrow functions can be found.
128
- const name = node.kind === Formatter.FormatterWorkerPool.ScopeKind.FUNCTION ? startEntry?.name : undefined;
126
+ let name: string|undefined = undefined;
127
+ for (const offset of node.nameMappingLocations ?? []) {
128
+ const position = positionFromOffset(offset);
129
+ const entry = sourceMap.findEntryExact(position.line, position.column);
130
+ if (entry?.name !== undefined) {
131
+ // Only consider named mappings.
132
+ name = entry.name;
133
+ break;
134
+ }
135
+ }
129
136
 
130
137
  let scope: ScopesCodec.OriginalScope|undefined;
131
138
  if (canMapOriginalPosition) {
132
139
  scope = {
133
140
  start: {line: startEntry.sourceLineNumber, column: startEntry.sourceColumnNumber},
134
141
  end: {line: endEntry.sourceLineNumber, column: endEntry.sourceColumnNumber},
135
- name,
142
+ name: name ?? node.name,
136
143
  isStackFrame,
137
144
  variables: [],
138
145
  children: [],
@@ -57,6 +57,7 @@ export interface ScopeTreeNode {
57
57
  end: number;
58
58
  // If present, apply source map mappings to these locations to figure out the original function name.
59
59
  nameMappingLocations?: number[];
60
+ name?: string;
60
61
  kind: ScopeKind;
61
62
  children: ScopeTreeNode[];
62
63
  }
@@ -37,14 +37,17 @@ export class Scope {
37
37
  readonly start: number;
38
38
  readonly end: number;
39
39
  readonly kind: ScopeKind;
40
+ readonly name?: string;
40
41
  readonly nameMappingLocations?: number[];
41
42
  readonly children: Scope[] = [];
42
43
 
43
- constructor(start: number, end: number, parent: Scope|null, kind: ScopeKind, nameMappingLocations?: number[]) {
44
+ constructor(
45
+ start: number, end: number, parent: Scope|null, kind: ScopeKind, name?: string, nameMappingLocations?: number[]) {
44
46
  this.start = start;
45
47
  this.end = end;
46
48
  this.parent = parent;
47
49
  this.kind = kind;
50
+ this.name = name;
48
51
  this.nameMappingLocations = nameMappingLocations;
49
52
  if (parent) {
50
53
  parent.children.push(this);
@@ -66,6 +69,7 @@ export class Scope {
66
69
  end: this.end,
67
70
  variables,
68
71
  kind: this.kind,
72
+ name: this.name,
69
73
  nameMappingLocations: this.nameMappingLocations,
70
74
  children,
71
75
  };
@@ -141,6 +145,7 @@ export class ScopeVariableAnalysis {
141
145
  #currentScope: Scope;
142
146
  readonly #rootNode: Acorn.ESTree.Node;
143
147
  readonly #sourceText: string;
148
+ #methodName: string|undefined;
144
149
  #additionalMappingLocations: number[] = [];
145
150
 
146
151
  constructor(node: Acorn.ESTree.Node, sourceText: string) {
@@ -178,7 +183,9 @@ export class ScopeVariableAnalysis {
178
183
  node.elements.forEach(item => this.#processNode(item));
179
184
  break;
180
185
  case 'ArrowFunctionExpression': {
181
- this.#pushScope(node.start, node.end, ScopeKind.ARROW_FUNCTION);
186
+ this.#pushScope(
187
+ node.start, node.end, ScopeKind.ARROW_FUNCTION, undefined,
188
+ mappingLocationsForArrowFunctions(node, this.#sourceText));
182
189
  node.params.forEach(this.#processNodeAsDefinition.bind(this, DefinitionKind.VAR, false));
183
190
  if (node.body.type === 'BlockStatement') {
184
191
  // Include the body of the arrow function in the same scope as the arguments.
@@ -260,7 +267,7 @@ export class ScopeVariableAnalysis {
260
267
  case 'FunctionDeclaration':
261
268
  this.#processNodeAsDefinition(DefinitionKind.VAR, false, node.id);
262
269
  this.#pushScope(
263
- node.id?.end ?? node.start, node.end, ScopeKind.FUNCTION,
270
+ node.id?.end ?? node.start, node.end, ScopeKind.FUNCTION, node.id.name,
264
271
  mappingLocationsForFunctionDeclaration(node, this.#sourceText));
265
272
  this.#addVariable('this', node.start, DefinitionKind.FIXED);
266
273
  this.#addVariable('arguments', node.start, DefinitionKind.FIXED);
@@ -271,8 +278,10 @@ export class ScopeVariableAnalysis {
271
278
  break;
272
279
  case 'FunctionExpression':
273
280
  this.#pushScope(
274
- node.id?.end ?? node.start, node.end, ScopeKind.FUNCTION,
281
+ node.id?.end ?? node.start, node.end, ScopeKind.FUNCTION, this.#methodName ?? node.id?.name,
275
282
  [...this.#additionalMappingLocations, ...mappingLocationsForFunctionExpression(node, this.#sourceText)]);
283
+ this.#additionalMappingLocations = [];
284
+ this.#methodName = undefined;
276
285
  this.#addVariable('this', node.start, DefinitionKind.FIXED);
277
286
  this.#addVariable('arguments', node.start, DefinitionKind.FIXED);
278
287
  node.params.forEach(this.#processNodeAsDefinition.bind(this, DefinitionKind.LET, false));
@@ -298,9 +307,9 @@ export class ScopeVariableAnalysis {
298
307
  this.#processNode(node.key);
299
308
  } else {
300
309
  this.#additionalMappingLocations = mappingLocationsForMethodDefinition(node);
310
+ this.#methodName = nameForMethodDefinition(node);
301
311
  }
302
312
  this.#processNode(node.value);
303
- this.#additionalMappingLocations = [];
304
313
  break;
305
314
  case 'NewExpression':
306
315
  this.#processNode(node.callee);
@@ -335,6 +344,9 @@ export class ScopeVariableAnalysis {
335
344
  } else {
336
345
  if (node.computed) {
337
346
  this.#processNode(node.key);
347
+ } else if (node.value.type === 'FunctionExpression') {
348
+ this.#additionalMappingLocations = mappingLocationsForMethodDefinition(node);
349
+ this.#methodName = nameForMethodDefinition(node);
338
350
  }
339
351
  this.#processNode(node.value);
340
352
  }
@@ -437,8 +449,8 @@ export class ScopeVariableAnalysis {
437
449
  return this.#allNames;
438
450
  }
439
451
 
440
- #pushScope(start: number, end: number, kind: ScopeKind, nameMappingLocations?: number[]): void {
441
- this.#currentScope = new Scope(start, end, this.#currentScope, kind, nameMappingLocations);
452
+ #pushScope(start: number, end: number, kind: ScopeKind, name?: string, nameMappingLocations?: number[]): void {
453
+ this.#currentScope = new Scope(start, end, this.#currentScope, kind, name, nameMappingLocations);
442
454
  }
443
455
 
444
456
  #popScope(isFunctionContext: boolean): void {
@@ -537,7 +549,7 @@ function mappingLocationsForFunctionExpression(node: Acorn.ESTree.FunctionExpres
537
549
  return result;
538
550
  }
539
551
 
540
- function mappingLocationsForMethodDefinition(node: Acorn.ESTree.MethodDefinition): number[] {
552
+ function mappingLocationsForMethodDefinition(node: Acorn.ESTree.MethodDefinition|Acorn.ESTree.Property): number[] {
541
553
  // Method definitions use a FunctionExpression as their "value" child. So we only
542
554
  // record the start of the "key" here and let 'mappingLocationsForFunctionExpression' handle
543
555
  // the parenthesis.
@@ -548,6 +560,37 @@ function mappingLocationsForMethodDefinition(node: Acorn.ESTree.MethodDefinition
548
560
  return [];
549
561
  }
550
562
 
563
+ function nameForMethodDefinition(node: Acorn.ESTree.MethodDefinition|Acorn.ESTree.Property): string|undefined {
564
+ if (node.key.type === 'Identifier') {
565
+ return node.key.name;
566
+ }
567
+ if (node.key.type === 'PrivateIdentifier') {
568
+ return '#' + node.key.name;
569
+ }
570
+ return undefined;
571
+ }
572
+
573
+ function mappingLocationsForArrowFunctions(node: Acorn.ESTree.ArrowFunctionExpression, sourceText: string): number[] {
574
+ // For arrow functions we use the `(' parenthesis if present, and the `=>` arrow as per spec.
575
+ // Both are not 100% accurate as acorn doesn't tell us their location so we have to search, which is brittle.
576
+ const result = [];
577
+
578
+ const searchParenStartPos = node.async ? node.start + 5 : node.start;
579
+ const searchParenEndPos = node.params.length ? node.params[0].start : node.body.start;
580
+ const parenPos = indexOfCharInBounds(sourceText, '(', searchParenStartPos, searchParenEndPos);
581
+ if (parenPos >= 0) {
582
+ result.push(parenPos);
583
+ }
584
+
585
+ const searchArrowStartPos = node.params.length ? node.params[node.params.length - 1].end : node.start;
586
+ const arrowPos = indexOfCharInBounds(sourceText, '=', searchArrowStartPos, node.body.start);
587
+ if (arrowPos >= 0 && sourceText[arrowPos + 1] === '>') {
588
+ result.push(arrowPos);
589
+ }
590
+
591
+ return result;
592
+ }
593
+
551
594
  function indexOfCharInBounds(str: string, needle: string, start: number, end: number): number {
552
595
  for (let i = start; i < end; ++i) {
553
596
  if (str[i] === needle) {
@@ -18,6 +18,10 @@ const UIStrings = {
18
18
  * @description Button's string in promotion state.
19
19
  */
20
20
  aiAssistance: 'AI assistance',
21
+ /**
22
+ * @description Button's tooltip text.
23
+ */
24
+ openAiAssistance: 'Open AI assistance panel',
21
25
  } as const;
22
26
  const str_ = i18n.i18n.registerUIStrings('entrypoints/main/GlobalAiButton.ts', UIStrings);
23
27
  const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
@@ -55,7 +59,7 @@ export const DEFAULT_VIEW = (input: ViewInput, output: undefined, target: HTMLEl
55
59
  render(html`
56
60
  <style>${globalAiButtonStyles}</style>
57
61
  <div class="global-ai-button-container">
58
- <button class=${classes} @click=${input.onClick} jslog=${VisualLogging.action().track({click: true}).context('global-ai-button')}>
62
+ <button class=${classes} @click=${input.onClick} title=${i18nString(UIStrings.openAiAssistance)} jslog=${VisualLogging.action().track({click: true}).context('global-ai-button')}>
59
63
  <devtools-icon name="smart-assistant"></devtools-icon>
60
64
  <span class="button-text">${` ${i18nString(UIStrings.aiAssistance)}`}</span>
61
65
  </button>
@@ -30,10 +30,6 @@ export const UIStrings = {
30
30
  * @description This warning occurs when the website attempts to invoke the deprecated `chrome.loadTimes().wasAlternateProtocolAvailable` API.
31
31
  */
32
32
  ChromeLoadTimesWasAlternateProtocolAvailable: "`chrome.loadTimes()` is deprecated, instead use standardized API: `nextHopProtocol` in Navigation Timing 2.",
33
- /**
34
- * @description This warning occurs when the browser attempts to store a cookie containing a banned character. Rather than the cookie string being truncated at the banned character, the entire cookie will be rejected now.
35
- */
36
- CookieWithTruncatingChar: "Cookies containing a `\\(0|r|n)` character will be rejected instead of truncated.",
37
33
  /**
38
34
  * @description This warning occurs when a frame accesses another frame's data after having set `document.domain` without having set the `Origin-Agent-Cluster` http header. This is a companion warning to `documentDomainSettingWithoutOriginAgentClusterHeader`, where that warning occurs when `document.domain` is set, and this warning occurs when an access has been made, based on that previous `document.domain` setting.
39
35
  */
@@ -286,9 +282,6 @@ export const DEPRECATIONS_METADATA: Partial<Record<string, DeprecationDescriptor
286
282
  "ChromeLoadTimesWasAlternateProtocolAvailable": {
287
283
  "chromeStatusFeature": 5637885046816768
288
284
  },
289
- "CookieWithTruncatingChar": {
290
- "milestone": 103
291
- },
292
285
  "CrossOriginAccessBasedOnDocumentDomain": {
293
286
  "milestone": 115
294
287
  },
@@ -81,7 +81,7 @@ inspectorBackend.registerEnum("Audits.AttributionReportingIssueType", {Permissio
81
81
  inspectorBackend.registerEnum("Audits.SharedDictionaryError", {UseErrorCrossOriginNoCorsRequest: "UseErrorCrossOriginNoCorsRequest", UseErrorDictionaryLoadFailure: "UseErrorDictionaryLoadFailure", UseErrorMatchingDictionaryNotUsed: "UseErrorMatchingDictionaryNotUsed", UseErrorUnexpectedContentDictionaryHeader: "UseErrorUnexpectedContentDictionaryHeader", WriteErrorCossOriginNoCorsRequest: "WriteErrorCossOriginNoCorsRequest", WriteErrorDisallowedBySettings: "WriteErrorDisallowedBySettings", WriteErrorExpiredResponse: "WriteErrorExpiredResponse", WriteErrorFeatureDisabled: "WriteErrorFeatureDisabled", WriteErrorInsufficientResources: "WriteErrorInsufficientResources", WriteErrorInvalidMatchField: "WriteErrorInvalidMatchField", WriteErrorInvalidStructuredHeader: "WriteErrorInvalidStructuredHeader", WriteErrorInvalidTTLField: "WriteErrorInvalidTTLField", WriteErrorNavigationRequest: "WriteErrorNavigationRequest", WriteErrorNoMatchField: "WriteErrorNoMatchField", WriteErrorNonIntegerTTLField: "WriteErrorNonIntegerTTLField", WriteErrorNonListMatchDestField: "WriteErrorNonListMatchDestField", WriteErrorNonSecureContext: "WriteErrorNonSecureContext", WriteErrorNonStringIdField: "WriteErrorNonStringIdField", WriteErrorNonStringInMatchDestList: "WriteErrorNonStringInMatchDestList", WriteErrorNonStringMatchField: "WriteErrorNonStringMatchField", WriteErrorNonTokenTypeField: "WriteErrorNonTokenTypeField", WriteErrorRequestAborted: "WriteErrorRequestAborted", WriteErrorShuttingDown: "WriteErrorShuttingDown", WriteErrorTooLongIdField: "WriteErrorTooLongIdField", WriteErrorUnsupportedType: "WriteErrorUnsupportedType"});
82
82
  inspectorBackend.registerEnum("Audits.SRIMessageSignatureError", {MissingSignatureHeader: "MissingSignatureHeader", MissingSignatureInputHeader: "MissingSignatureInputHeader", InvalidSignatureHeader: "InvalidSignatureHeader", InvalidSignatureInputHeader: "InvalidSignatureInputHeader", SignatureHeaderValueIsNotByteSequence: "SignatureHeaderValueIsNotByteSequence", SignatureHeaderValueIsParameterized: "SignatureHeaderValueIsParameterized", SignatureHeaderValueIsIncorrectLength: "SignatureHeaderValueIsIncorrectLength", SignatureInputHeaderMissingLabel: "SignatureInputHeaderMissingLabel", SignatureInputHeaderValueNotInnerList: "SignatureInputHeaderValueNotInnerList", SignatureInputHeaderValueMissingComponents: "SignatureInputHeaderValueMissingComponents", SignatureInputHeaderInvalidComponentType: "SignatureInputHeaderInvalidComponentType", SignatureInputHeaderInvalidComponentName: "SignatureInputHeaderInvalidComponentName", SignatureInputHeaderInvalidHeaderComponentParameter: "SignatureInputHeaderInvalidHeaderComponentParameter", SignatureInputHeaderInvalidDerivedComponentParameter: "SignatureInputHeaderInvalidDerivedComponentParameter", SignatureInputHeaderKeyIdLength: "SignatureInputHeaderKeyIdLength", SignatureInputHeaderInvalidParameter: "SignatureInputHeaderInvalidParameter", SignatureInputHeaderMissingRequiredParameters: "SignatureInputHeaderMissingRequiredParameters", ValidationFailedSignatureExpired: "ValidationFailedSignatureExpired", ValidationFailedInvalidLength: "ValidationFailedInvalidLength", ValidationFailedSignatureMismatch: "ValidationFailedSignatureMismatch", ValidationFailedIntegrityMismatch: "ValidationFailedIntegrityMismatch"});
83
83
  inspectorBackend.registerEnum("Audits.UnencodedDigestError", {MalformedDictionary: "MalformedDictionary", UnknownAlgorithm: "UnknownAlgorithm", IncorrectDigestType: "IncorrectDigestType", IncorrectDigestLength: "IncorrectDigestLength"});
84
- inspectorBackend.registerEnum("Audits.GenericIssueErrorType", {FormLabelForNameError: "FormLabelForNameError", FormDuplicateIdForInputError: "FormDuplicateIdForInputError", FormInputWithNoLabelError: "FormInputWithNoLabelError", FormAutocompleteAttributeEmptyError: "FormAutocompleteAttributeEmptyError", FormEmptyIdAndNameAttributesForInputError: "FormEmptyIdAndNameAttributesForInputError", FormAriaLabelledByToNonExistingIdError: "FormAriaLabelledByToNonExistingIdError", FormInputAssignedAutocompleteValueToIdOrNameAttributeError: "FormInputAssignedAutocompleteValueToIdOrNameAttributeError", FormLabelHasNeitherForNorNestedInputError: "FormLabelHasNeitherForNorNestedInputError", FormLabelForMatchesNonExistingIdError: "FormLabelForMatchesNonExistingIdError", FormInputHasWrongButWellIntendedAutocompleteValueError: "FormInputHasWrongButWellIntendedAutocompleteValueError", ResponseWasBlockedByORB: "ResponseWasBlockedByORB", NavigationEntryMarkedSkippable: "NavigationEntryMarkedSkippable"});
84
+ inspectorBackend.registerEnum("Audits.GenericIssueErrorType", {FormLabelForNameError: "FormLabelForNameError", FormDuplicateIdForInputError: "FormDuplicateIdForInputError", FormInputWithNoLabelError: "FormInputWithNoLabelError", FormAutocompleteAttributeEmptyError: "FormAutocompleteAttributeEmptyError", FormEmptyIdAndNameAttributesForInputError: "FormEmptyIdAndNameAttributesForInputError", FormAriaLabelledByToNonExistingIdError: "FormAriaLabelledByToNonExistingIdError", FormInputAssignedAutocompleteValueToIdOrNameAttributeError: "FormInputAssignedAutocompleteValueToIdOrNameAttributeError", FormLabelHasNeitherForNorNestedInputError: "FormLabelHasNeitherForNorNestedInputError", FormLabelForMatchesNonExistingIdError: "FormLabelForMatchesNonExistingIdError", FormInputHasWrongButWellIntendedAutocompleteValueError: "FormInputHasWrongButWellIntendedAutocompleteValueError", ResponseWasBlockedByORB: "ResponseWasBlockedByORB", NavigationEntryMarkedSkippable: "NavigationEntryMarkedSkippable", AutofillAndManualTextPolicyControlledFeaturesInfo: "AutofillAndManualTextPolicyControlledFeaturesInfo", AutofillPolicyControlledFeatureInfo: "AutofillPolicyControlledFeatureInfo", ManualTextPolicyControlledFeatureInfo: "ManualTextPolicyControlledFeatureInfo"});
85
85
  inspectorBackend.registerEnum("Audits.ClientHintIssueReason", {MetaTagAllowListInvalidOrigin: "MetaTagAllowListInvalidOrigin", MetaTagModifiedHTML: "MetaTagModifiedHTML"});
86
86
  inspectorBackend.registerEnum("Audits.FederatedAuthRequestIssueReason", {ShouldEmbargo: "ShouldEmbargo", TooManyRequests: "TooManyRequests", WellKnownHttpNotFound: "WellKnownHttpNotFound", WellKnownNoResponse: "WellKnownNoResponse", WellKnownInvalidResponse: "WellKnownInvalidResponse", WellKnownListEmpty: "WellKnownListEmpty", WellKnownInvalidContentType: "WellKnownInvalidContentType", ConfigNotInWellKnown: "ConfigNotInWellKnown", WellKnownTooBig: "WellKnownTooBig", ConfigHttpNotFound: "ConfigHttpNotFound", ConfigNoResponse: "ConfigNoResponse", ConfigInvalidResponse: "ConfigInvalidResponse", ConfigInvalidContentType: "ConfigInvalidContentType", ClientMetadataHttpNotFound: "ClientMetadataHttpNotFound", ClientMetadataNoResponse: "ClientMetadataNoResponse", ClientMetadataInvalidResponse: "ClientMetadataInvalidResponse", ClientMetadataInvalidContentType: "ClientMetadataInvalidContentType", IdpNotPotentiallyTrustworthy: "IdpNotPotentiallyTrustworthy", DisabledInSettings: "DisabledInSettings", DisabledInFlags: "DisabledInFlags", ErrorFetchingSignin: "ErrorFetchingSignin", InvalidSigninResponse: "InvalidSigninResponse", AccountsHttpNotFound: "AccountsHttpNotFound", AccountsNoResponse: "AccountsNoResponse", AccountsInvalidResponse: "AccountsInvalidResponse", AccountsListEmpty: "AccountsListEmpty", AccountsInvalidContentType: "AccountsInvalidContentType", IdTokenHttpNotFound: "IdTokenHttpNotFound", IdTokenNoResponse: "IdTokenNoResponse", IdTokenInvalidResponse: "IdTokenInvalidResponse", IdTokenIdpErrorResponse: "IdTokenIdpErrorResponse", IdTokenCrossSiteIdpErrorResponse: "IdTokenCrossSiteIdpErrorResponse", IdTokenInvalidRequest: "IdTokenInvalidRequest", IdTokenInvalidContentType: "IdTokenInvalidContentType", ErrorIdToken: "ErrorIdToken", Canceled: "Canceled", RpPageNotVisible: "RpPageNotVisible", SilentMediationFailure: "SilentMediationFailure", ThirdPartyCookiesBlocked: "ThirdPartyCookiesBlocked", NotSignedInWithIdp: "NotSignedInWithIdp", MissingTransientUserActivation: "MissingTransientUserActivation", ReplacedByActiveMode: "ReplacedByActiveMode", InvalidFieldsSpecified: "InvalidFieldsSpecified", RelyingPartyOriginIsOpaque: "RelyingPartyOriginIsOpaque", TypeNotMatching: "TypeNotMatching", UiDismissedNoEmbargo: "UiDismissedNoEmbargo", CorsError: "CorsError", SuppressedBySegmentationPlatform: "SuppressedBySegmentationPlatform"});
87
87
  inspectorBackend.registerEnum("Audits.FederatedAuthUserInfoRequestIssueReason", {NotSameOrigin: "NotSameOrigin", NotIframe: "NotIframe", NotPotentiallyTrustworthy: "NotPotentiallyTrustworthy", NoAPIPermission: "NoApiPermission", NotSignedInWithIdp: "NotSignedInWithIdp", NoAccountSharingPermission: "NoAccountSharingPermission", InvalidConfigOrWellKnown: "InvalidConfigOrWellKnown", InvalidAccountsResponse: "InvalidAccountsResponse", NoReturningUserFromFetchedAccounts: "NoReturningUserFromFetchedAccounts"});
@@ -191,7 +191,7 @@ inspectorBackend.registerType("BluetoothEmulation.CharacteristicProperties", [{"
191
191
 
192
192
  // Browser.
193
193
  inspectorBackend.registerEnum("Browser.WindowState", {Normal: "normal", Minimized: "minimized", Maximized: "maximized", Fullscreen: "fullscreen"});
194
- inspectorBackend.registerEnum("Browser.PermissionType", {Ar: "ar", AudioCapture: "audioCapture", AutomaticFullscreen: "automaticFullscreen", BackgroundFetch: "backgroundFetch", BackgroundSync: "backgroundSync", CameraPanTiltZoom: "cameraPanTiltZoom", CapturedSurfaceControl: "capturedSurfaceControl", ClipboardReadWrite: "clipboardReadWrite", ClipboardSanitizedWrite: "clipboardSanitizedWrite", DisplayCapture: "displayCapture", DurableStorage: "durableStorage", Geolocation: "geolocation", HandTracking: "handTracking", IdleDetection: "idleDetection", KeyboardLock: "keyboardLock", LocalFonts: "localFonts", LocalNetworkAccess: "localNetworkAccess", Midi: "midi", MidiSysex: "midiSysex", Nfc: "nfc", Notifications: "notifications", PaymentHandler: "paymentHandler", PeriodicBackgroundSync: "periodicBackgroundSync", PointerLock: "pointerLock", ProtectedMediaIdentifier: "protectedMediaIdentifier", Sensors: "sensors", SmartCard: "smartCard", SpeakerSelection: "speakerSelection", StorageAccess: "storageAccess", TopLevelStorageAccess: "topLevelStorageAccess", VideoCapture: "videoCapture", Vr: "vr", WakeLockScreen: "wakeLockScreen", WakeLockSystem: "wakeLockSystem", WebAppInstallation: "webAppInstallation", WebPrinting: "webPrinting", WindowManagement: "windowManagement"});
194
+ inspectorBackend.registerEnum("Browser.PermissionType", {Ar: "ar", AudioCapture: "audioCapture", AutomaticFullscreen: "automaticFullscreen", BackgroundFetch: "backgroundFetch", BackgroundSync: "backgroundSync", CameraPanTiltZoom: "cameraPanTiltZoom", CapturedSurfaceControl: "capturedSurfaceControl", ClipboardReadWrite: "clipboardReadWrite", ClipboardSanitizedWrite: "clipboardSanitizedWrite", DisplayCapture: "displayCapture", DurableStorage: "durableStorage", Geolocation: "geolocation", HandTracking: "handTracking", IdleDetection: "idleDetection", KeyboardLock: "keyboardLock", LocalFonts: "localFonts", LocalNetwork: "localNetwork", LocalNetworkAccess: "localNetworkAccess", LoopbackNetwork: "loopbackNetwork", Midi: "midi", MidiSysex: "midiSysex", Nfc: "nfc", Notifications: "notifications", PaymentHandler: "paymentHandler", PeriodicBackgroundSync: "periodicBackgroundSync", PointerLock: "pointerLock", ProtectedMediaIdentifier: "protectedMediaIdentifier", Sensors: "sensors", SmartCard: "smartCard", SpeakerSelection: "speakerSelection", StorageAccess: "storageAccess", TopLevelStorageAccess: "topLevelStorageAccess", VideoCapture: "videoCapture", Vr: "vr", WakeLockScreen: "wakeLockScreen", WakeLockSystem: "wakeLockSystem", WebAppInstallation: "webAppInstallation", WebPrinting: "webPrinting", WindowManagement: "windowManagement"});
195
195
  inspectorBackend.registerEnum("Browser.PermissionSetting", {Granted: "granted", Denied: "denied", Prompt: "prompt"});
196
196
  inspectorBackend.registerEnum("Browser.BrowserCommandId", {OpenTabSearch: "openTabSearch", CloseTabSearch: "closeTabSearch", OpenGlic: "openGlic"});
197
197
  inspectorBackend.registerEnum("Browser.PrivacySandboxAPI", {BiddingAndAuctionServices: "BiddingAndAuctionServices", TrustedKeyValue: "TrustedKeyValue"});
@@ -843,7 +843,8 @@ inspectorBackend.registerCommand("Network.disable", [], [], "Disables network tr
843
843
  inspectorBackend.registerCommand("Network.emulateNetworkConditions", [{"name": "offline", "type": "boolean", "optional": false, "description": "True to emulate internet disconnection.", "typeRef": null}, {"name": "latency", "type": "number", "optional": false, "description": "Minimum latency from request sent to response headers received (ms).", "typeRef": null}, {"name": "downloadThroughput", "type": "number", "optional": false, "description": "Maximal aggregated download throughput (bytes/sec). -1 disables download throttling.", "typeRef": null}, {"name": "uploadThroughput", "type": "number", "optional": false, "description": "Maximal aggregated upload throughput (bytes/sec). -1 disables upload throttling.", "typeRef": null}, {"name": "connectionType", "type": "string", "optional": true, "description": "Connection type if known.", "typeRef": "Network.ConnectionType"}, {"name": "packetLoss", "type": "number", "optional": true, "description": "WebRTC packet loss (percent, 0-100). 0 disables packet loss emulation, 100 drops all the packets.", "typeRef": null}, {"name": "packetQueueLength", "type": "number", "optional": true, "description": "WebRTC packet queue length (packet). 0 removes any queue length limitations.", "typeRef": null}, {"name": "packetReordering", "type": "boolean", "optional": true, "description": "WebRTC packetReordering feature.", "typeRef": null}], [], "Activates emulation of network conditions. This command is deprecated in favor of the emulateNetworkConditionsByRule and overrideNetworkState commands, which can be used together to the same effect.");
844
844
  inspectorBackend.registerCommand("Network.emulateNetworkConditionsByRule", [{"name": "offline", "type": "boolean", "optional": false, "description": "True to emulate internet disconnection.", "typeRef": null}, {"name": "matchedNetworkConditions", "type": "array", "optional": false, "description": "Configure conditions for matching requests. If multiple entries match a request, the first entry wins. Global conditions can be configured by leaving the urlPattern for the conditions empty. These global conditions are also applied for throttling of p2p connections.", "typeRef": "Network.NetworkConditions"}], ["ruleIds"], "Activates emulation of network conditions for individual requests using URL match patterns. Unlike the deprecated Network.emulateNetworkConditions this method does not affect `navigator` state. Use Network.overrideNetworkState to explicitly modify `navigator` behavior.");
845
845
  inspectorBackend.registerCommand("Network.overrideNetworkState", [{"name": "offline", "type": "boolean", "optional": false, "description": "True to emulate internet disconnection.", "typeRef": null}, {"name": "latency", "type": "number", "optional": false, "description": "Minimum latency from request sent to response headers received (ms).", "typeRef": null}, {"name": "downloadThroughput", "type": "number", "optional": false, "description": "Maximal aggregated download throughput (bytes/sec). -1 disables download throttling.", "typeRef": null}, {"name": "uploadThroughput", "type": "number", "optional": false, "description": "Maximal aggregated upload throughput (bytes/sec). -1 disables upload throttling.", "typeRef": null}, {"name": "connectionType", "type": "string", "optional": true, "description": "Connection type if known.", "typeRef": "Network.ConnectionType"}], [], "Override the state of navigator.onLine and navigator.connection.");
846
- inspectorBackend.registerCommand("Network.enable", [{"name": "maxTotalBufferSize", "type": "number", "optional": true, "description": "Buffer size in bytes to use when preserving network payloads (XHRs, etc).", "typeRef": null}, {"name": "maxResourceBufferSize", "type": "number", "optional": true, "description": "Per-resource buffer size in bytes to use when preserving network payloads (XHRs, etc).", "typeRef": null}, {"name": "maxPostDataSize", "type": "number", "optional": true, "description": "Longest post body size (in bytes) that would be included in requestWillBeSent notification", "typeRef": null}, {"name": "reportDirectSocketTraffic", "type": "boolean", "optional": true, "description": "Whether DirectSocket chunk send/receive events should be reported.", "typeRef": null}, {"name": "enableDurableMessages", "type": "boolean", "optional": true, "description": "Enable storing response bodies outside of renderer, so that these survive a cross-process navigation. Requires maxTotalBufferSize to be set. Currently defaults to false.", "typeRef": null}], [], "Enables network tracking, network events will now be delivered to the client.");
846
+ inspectorBackend.registerCommand("Network.enable", [{"name": "maxTotalBufferSize", "type": "number", "optional": true, "description": "Buffer size in bytes to use when preserving network payloads (XHRs, etc).", "typeRef": null}, {"name": "maxResourceBufferSize", "type": "number", "optional": true, "description": "Per-resource buffer size in bytes to use when preserving network payloads (XHRs, etc).", "typeRef": null}, {"name": "maxPostDataSize", "type": "number", "optional": true, "description": "Longest post body size (in bytes) that would be included in requestWillBeSent notification", "typeRef": null}, {"name": "reportDirectSocketTraffic", "type": "boolean", "optional": true, "description": "Whether DirectSocket chunk send/receive events should be reported.", "typeRef": null}, {"name": "enableDurableMessages", "type": "boolean", "optional": true, "description": "Enable storing response bodies outside of renderer, so that these survive a cross-process navigation. Requires maxTotalBufferSize to be set. Currently defaults to false. This field is being deprecated in favor of the dedicated configureDurableMessages command, due to the possibility of deadlocks when awaiting Network.enable before issuing Runtime.runIfWaitingForDebugger.", "typeRef": null}], [], "Enables network tracking, network events will now be delivered to the client.");
847
+ inspectorBackend.registerCommand("Network.configureDurableMessages", [{"name": "maxTotalBufferSize", "type": "number", "optional": true, "description": "Buffer size in bytes to use when preserving network payloads (XHRs, etc).", "typeRef": null}, {"name": "maxResourceBufferSize", "type": "number", "optional": true, "description": "Per-resource buffer size in bytes to use when preserving network payloads (XHRs, etc).", "typeRef": null}], [], "Configures storing response bodies outside of renderer, so that these survive a cross-process navigation. If maxTotalBufferSize is not set, durable messages are disabled.");
847
848
  inspectorBackend.registerCommand("Network.getAllCookies", [], ["cookies"], "Returns all browser cookies. Depending on the backend support, will return detailed cookie information in the `cookies` field. Deprecated. Use Storage.getCookies instead.");
848
849
  inspectorBackend.registerCommand("Network.getCertificate", [{"name": "origin", "type": "string", "optional": false, "description": "Origin to get certificate for.", "typeRef": null}], ["tableNames"], "Returns the DER-encoded certificate.");
849
850
  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.");
@@ -1345,7 +1346,7 @@ inspectorBackend.registerCommand("Target.attachToBrowserTarget", [], ["sessionId
1345
1346
  inspectorBackend.registerCommand("Target.closeTarget", [{"name": "targetId", "type": "string", "optional": false, "description": "", "typeRef": "Target.TargetID"}], ["success"], "Closes the target. If the target is a page that gets closed too.");
1346
1347
  inspectorBackend.registerCommand("Target.exposeDevToolsProtocol", [{"name": "targetId", "type": "string", "optional": false, "description": "", "typeRef": "Target.TargetID"}, {"name": "bindingName", "type": "string", "optional": true, "description": "Binding name, 'cdp' if not specified.", "typeRef": null}, {"name": "inheritPermissions", "type": "boolean", "optional": true, "description": "If true, inherits the current root session's permissions (default: false).", "typeRef": null}], [], "Inject object to the target's main frame that provides a communication channel with browser target. Injected object will be available as `window[bindingName]`. The object has the following API: - `binding.send(json)` - a method to send messages over the remote debugging protocol - `binding.onmessage = json => handleMessage(json)` - a callback that will be called for the protocol notifications and command responses.");
1347
1348
  inspectorBackend.registerCommand("Target.createBrowserContext", [{"name": "disposeOnDetach", "type": "boolean", "optional": true, "description": "If specified, disposes this context when debugging session disconnects.", "typeRef": null}, {"name": "proxyServer", "type": "string", "optional": true, "description": "Proxy server, similar to the one passed to --proxy-server", "typeRef": null}, {"name": "proxyBypassList", "type": "string", "optional": true, "description": "Proxy bypass list, similar to the one passed to --proxy-bypass-list", "typeRef": null}, {"name": "originsWithUniversalNetworkAccess", "type": "array", "optional": true, "description": "An optional list of origins to grant unlimited cross-origin access to. Parts of the URL other than those constituting origin are ignored.", "typeRef": "string"}], ["browserContextId"], "Creates a new empty BrowserContext. Similar to an incognito profile but you can have more than one.");
1348
- inspectorBackend.registerCommand("Target.getBrowserContexts", [], ["browserContextIds"], "Returns all browser contexts created with `Target.createBrowserContext` method.");
1349
+ inspectorBackend.registerCommand("Target.getBrowserContexts", [], ["browserContextIds", "defaultBrowserContextId"], "Returns all browser contexts created with `Target.createBrowserContext` method.");
1349
1350
  inspectorBackend.registerCommand("Target.createTarget", [{"name": "url", "type": "string", "optional": false, "description": "The initial URL the page will be navigated to. An empty string indicates about:blank.", "typeRef": null}, {"name": "left", "type": "number", "optional": true, "description": "Frame left origin in DIP (requires newWindow to be true or headless shell).", "typeRef": null}, {"name": "top", "type": "number", "optional": true, "description": "Frame top origin in DIP (requires newWindow to be true or headless shell).", "typeRef": null}, {"name": "width", "type": "number", "optional": true, "description": "Frame width in DIP (requires newWindow to be true or headless shell).", "typeRef": null}, {"name": "height", "type": "number", "optional": true, "description": "Frame height in DIP (requires newWindow to be true or headless shell).", "typeRef": null}, {"name": "windowState", "type": "string", "optional": true, "description": "Frame window state (requires newWindow to be true or headless shell). Default is normal.", "typeRef": "Target.WindowState"}, {"name": "browserContextId", "type": "string", "optional": true, "description": "The browser context to create the page in.", "typeRef": "Browser.BrowserContextID"}, {"name": "enableBeginFrameControl", "type": "boolean", "optional": true, "description": "Whether BeginFrames for this target will be controlled via DevTools (headless shell only, not supported on MacOS yet, false by default).", "typeRef": null}, {"name": "newWindow", "type": "boolean", "optional": true, "description": "Whether to create a new Window or Tab (false by default, not supported by headless shell).", "typeRef": null}, {"name": "background", "type": "boolean", "optional": true, "description": "Whether to create the target in background or foreground (false by default, not supported by headless shell).", "typeRef": null}, {"name": "forTab", "type": "boolean", "optional": true, "description": "Whether to create the target of type \\\"tab\\\".", "typeRef": null}, {"name": "hidden", "type": "boolean", "optional": true, "description": "Whether to create a hidden target. The hidden target is observable via protocol, but not present in the tab UI strip. Cannot be created with `forTab: true`, `newWindow: true` or `background: false`. The life-time of the tab is limited to the life-time of the session.", "typeRef": null}], ["targetId"], "Creates a new page.");
1350
1351
  inspectorBackend.registerCommand("Target.detachFromTarget", [{"name": "sessionId", "type": "string", "optional": true, "description": "Session to detach.", "typeRef": "Target.SessionID"}, {"name": "targetId", "type": "string", "optional": true, "description": "Deprecated.", "typeRef": "Target.TargetID"}], [], "Detaches session with given id.");
1351
1352
  inspectorBackend.registerCommand("Target.disposeBrowserContext", [{"name": "browserContextId", "type": "string", "optional": false, "description": "", "typeRef": "Browser.BrowserContextID"}], [], "Deletes a BrowserContext. All the belonging pages will be closed without calling their beforeunload hooks.");