chrome-devtools-frontend 1.0.1654411 → 1.0.1656897

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 (204) hide show
  1. package/.agents/skills/ui-eng-vision-local-lit-renderer/SKILL.md +116 -0
  2. package/.agents/skills/ui-eng-vision-logic-consolidator/SKILL.md +82 -0
  3. package/.agents/skills/ui-eng-vision-orchestrator/SKILL.md +123 -0
  4. package/.agents/skills/ui-eng-vision-test-scaffolder/SKILL.md +125 -0
  5. package/.agents/skills/ui-eng-vision-widget-promoter/SKILL.md +75 -0
  6. package/AUTHORS +1 -0
  7. package/config/owner/COMMON_OWNERS +0 -4
  8. package/docs/playbook.md +1 -1
  9. package/front_end/Tests.js +1 -0
  10. package/front_end/core/common/Settings.ts +47 -30
  11. package/front_end/core/sdk/CPUThrottlingManager.ts +10 -159
  12. package/front_end/core/sdk/ConsoleModel.ts +13 -11
  13. package/front_end/core/sdk/DOMDebuggerModel.ts +11 -5
  14. package/front_end/core/sdk/DOMModel.ts +7 -5
  15. package/front_end/core/sdk/EventBreakpointsModel.ts +9 -5
  16. package/front_end/core/sdk/IsolateManager.ts +6 -6
  17. package/front_end/core/sdk/ResourceTreeModel.ts +5 -3
  18. package/front_end/core/sdk/SourceMapCache.ts +2 -4
  19. package/front_end/core/sdk/SourceMapManager.ts +8 -7
  20. package/front_end/core/sdk/TargetManager.ts +17 -0
  21. package/front_end/entrypoints/devtools_app/devtools_app.ts +0 -1
  22. package/front_end/entrypoints/main/MainImpl.ts +12 -36
  23. package/front_end/entrypoints/main/SimpleApp.ts +0 -13
  24. package/front_end/entrypoints/main/main-meta.ts +1 -1
  25. package/front_end/foundation/Universe.ts +110 -3
  26. package/front_end/generated/InspectorBackendCommands.ts +5 -1
  27. package/front_end/generated/SupportedCSSProperties.js +2 -6
  28. package/front_end/generated/protocol-mapping.d.ts +8 -0
  29. package/front_end/generated/protocol-proxy-api.d.ts +15 -0
  30. package/front_end/generated/protocol.ts +36 -1
  31. package/front_end/models/ai_assistance/AiConversation.ts +0 -6
  32. package/front_end/models/ai_assistance/agents/NetworkAgent.snapshot.txt +1 -1
  33. package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +2 -156
  34. package/front_end/models/ai_assistance/agents/StylingAgent.snapshot.txt +0 -24
  35. package/front_end/models/ai_assistance/agents/StylingAgent.ts +2 -358
  36. package/front_end/models/ai_assistance/ai_assistance.ts +0 -6
  37. package/front_end/models/ai_assistance/contexts/RequestContext.snapshot.txt +0 -1
  38. package/front_end/models/ai_assistance/data_formatters/NetworkRequestFormatter.ts +0 -2
  39. package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.ts +1 -14
  40. package/front_end/models/autofill_manager/AutofillManager.ts +1 -2
  41. package/front_end/models/crux-manager/CrUXManager.ts +16 -11
  42. package/front_end/models/javascript_metadata/NativeFunctions.js +1 -1
  43. package/front_end/models/persistence/AutomaticFileSystemManager.ts +14 -13
  44. package/front_end/models/persistence/AutomaticFileSystemWorkspaceBinding.ts +12 -9
  45. package/front_end/models/persistence/IsolatedFileSystemManager.ts +18 -9
  46. package/front_end/models/project_settings/ProjectSettingsModel.ts +12 -11
  47. package/front_end/models/trace/handlers/ScreenshotsHandler.ts +14 -59
  48. package/front_end/panels/ai_assistance/AiAssistancePanel.ts +3 -29
  49. package/front_end/panels/application/DeviceBoundSessionsView.ts +15 -3
  50. package/front_end/panels/application/FrameDetailsView.ts +2 -1
  51. package/front_end/panels/application/ServiceWorkersView.ts +193 -161
  52. package/front_end/panels/application/serviceWorkersView.css +8 -0
  53. package/front_end/panels/common/CPUThrottlingOption.ts +142 -0
  54. package/front_end/panels/common/ThrottlingUtils.ts +9 -4
  55. package/front_end/panels/common/common.ts +1 -1
  56. package/front_end/panels/console/ConsoleViewMessage.ts +45 -0
  57. package/front_end/panels/elements/ElementsPanel.ts +35 -102
  58. package/front_end/panels/elements/ElementsTreeOutline.ts +0 -4
  59. package/front_end/panels/elements/elements-meta.ts +3 -2
  60. package/front_end/panels/emulation/DeviceModeToolbar.ts +46 -45
  61. package/front_end/panels/mobile_throttling/CalibrationController.ts +6 -5
  62. package/front_end/panels/mobile_throttling/MobileThrottlingSelector.ts +1 -1
  63. package/front_end/panels/mobile_throttling/ThrottlingManager.ts +40 -13
  64. package/front_end/panels/mobile_throttling/ThrottlingPresets.ts +13 -17
  65. package/front_end/panels/mobile_throttling/ThrottlingSettingsTab.ts +15 -13
  66. package/front_end/panels/network/NetworkLogView.ts +0 -9
  67. package/front_end/panels/network/NetworkPanel.ts +1 -63
  68. package/front_end/panels/network/RequestInitiatorView.ts +29 -4
  69. package/front_end/panels/network/components/HeaderSectionRow.css +9 -7
  70. package/front_end/panels/network/components/HeaderSectionRow.ts +20 -1
  71. package/front_end/panels/network/components/RequestHeaderSection.css +5 -3
  72. package/front_end/panels/network/components/RequestHeaderSection.ts +1 -2
  73. package/front_end/panels/network/components/RequestHeadersView.css +1 -1
  74. package/front_end/panels/security/SecurityPanel.ts +36 -23
  75. package/front_end/panels/settings/SettingsScreen.ts +18 -103
  76. package/front_end/panels/settings/settings-meta.ts +0 -24
  77. package/front_end/panels/timeline/TimelineController.ts +3 -2
  78. package/front_end/panels/timeline/TimelinePanel.ts +20 -3
  79. package/front_end/panels/timeline/components/CPUThrottlingSelector.ts +15 -14
  80. package/front_end/panels/timeline/timelineFlamechartPopover.css +2 -0
  81. package/front_end/panels/utils/utils.ts +25 -24
  82. package/front_end/third_party/chromium/README.chromium +1 -1
  83. package/front_end/third_party/puppeteer/README.chromium +2 -2
  84. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.d.ts +34 -55
  85. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +96 -83
  86. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Browser.d.ts +10 -1
  87. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Browser.d.ts.map +1 -1
  88. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Browser.js.map +1 -1
  89. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/BrowserContext.d.ts.map +1 -1
  90. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/BrowserContext.js +1 -1
  91. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/BrowserContext.js.map +1 -1
  92. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/CDPSession.d.ts.map +1 -1
  93. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/CDPSession.js.map +1 -1
  94. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/HTTPResponse.d.ts +3 -2
  95. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/HTTPResponse.d.ts.map +1 -1
  96. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/HTTPResponse.js.map +1 -1
  97. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Realm.d.ts.map +1 -1
  98. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Realm.js.map +1 -1
  99. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Target.d.ts +1 -1
  100. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Target.js +1 -1
  101. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/locators/locators.d.ts.map +1 -1
  102. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/locators/locators.js.map +1 -1
  103. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/HTTPResponse.d.ts.map +1 -1
  104. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/HTTPResponse.js +2 -1
  105. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/HTTPResponse.js.map +1 -1
  106. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/core/Realm.d.ts.map +1 -1
  107. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/core/Realm.js.map +1 -1
  108. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.d.ts +2 -2
  109. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.d.ts.map +1 -1
  110. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.js +5 -2
  111. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.js.map +1 -1
  112. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Frame.js +1 -1
  113. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Frame.js.map +1 -1
  114. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/FrameManager.d.ts.map +1 -1
  115. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/FrameManager.js +23 -13
  116. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/FrameManager.js.map +1 -1
  117. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/HTTPResponse.d.ts.map +1 -1
  118. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/HTTPResponse.js +4 -1
  119. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/HTTPResponse.js.map +1 -1
  120. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Input.js +1 -1
  121. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/LifecycleWatcher.d.ts.map +1 -1
  122. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/LifecycleWatcher.js.map +1 -1
  123. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Target.d.ts.map +1 -1
  124. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Target.js.map +1 -1
  125. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/WebMCP.d.ts +3 -41
  126. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/WebMCP.d.ts.map +1 -1
  127. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/WebMCP.js.map +1 -1
  128. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/ConnectOptions.d.ts.map +1 -1
  129. package/front_end/third_party/puppeteer/package/lib/puppeteer/node/BrowserLauncher.d.ts.map +1 -1
  130. package/front_end/third_party/puppeteer/package/lib/puppeteer/node/BrowserLauncher.js +4 -2
  131. package/front_end/third_party/puppeteer/package/lib/puppeteer/node/BrowserLauncher.js.map +1 -1
  132. package/front_end/third_party/puppeteer/package/lib/puppeteer/node/LaunchOptions.d.ts +5 -0
  133. package/front_end/third_party/puppeteer/package/lib/puppeteer/node/LaunchOptions.d.ts.map +1 -1
  134. package/front_end/third_party/puppeteer/package/lib/puppeteer/revisions.d.ts +1 -1
  135. package/front_end/third_party/puppeteer/package/lib/puppeteer/revisions.js +1 -1
  136. package/front_end/third_party/puppeteer/package/lib/puppeteer/util/httpUtils.d.ts +1 -1
  137. package/front_end/third_party/puppeteer/package/lib/puppeteer/util/httpUtils.d.ts.map +1 -1
  138. package/front_end/third_party/puppeteer/package/lib/puppeteer/util/httpUtils.js +5 -5
  139. package/front_end/third_party/puppeteer/package/lib/puppeteer/util/httpUtils.js.map +1 -1
  140. package/front_end/third_party/puppeteer/package/lib/puppeteer/util/version.d.ts +1 -1
  141. package/front_end/third_party/puppeteer/package/lib/puppeteer/util/version.js +1 -1
  142. package/front_end/third_party/puppeteer/package/lib/types.d.ts +34 -55
  143. package/front_end/third_party/puppeteer/package/package.json +4 -4
  144. package/front_end/third_party/puppeteer/package/src/api/Browser.ts +13 -1
  145. package/front_end/third_party/puppeteer/package/src/api/BrowserContext.ts +2 -3
  146. package/front_end/third_party/puppeteer/package/src/api/CDPSession.ts +3 -1
  147. package/front_end/third_party/puppeteer/package/src/api/HTTPResponse.ts +3 -2
  148. package/front_end/third_party/puppeteer/package/src/api/Realm.ts +1 -2
  149. package/front_end/third_party/puppeteer/package/src/api/Target.ts +1 -1
  150. package/front_end/third_party/puppeteer/package/src/api/locators/locators.ts +1 -2
  151. package/front_end/third_party/puppeteer/package/src/bidi/HTTPResponse.ts +3 -1
  152. package/front_end/third_party/puppeteer/package/src/bidi/core/Realm.ts +1 -3
  153. package/front_end/third_party/puppeteer/package/src/cdp/Browser.ts +13 -3
  154. package/front_end/third_party/puppeteer/package/src/cdp/Frame.ts +1 -1
  155. package/front_end/third_party/puppeteer/package/src/cdp/FrameManager.ts +24 -13
  156. package/front_end/third_party/puppeteer/package/src/cdp/HTTPResponse.ts +4 -1
  157. package/front_end/third_party/puppeteer/package/src/cdp/Input.ts +1 -1
  158. package/front_end/third_party/puppeteer/package/src/cdp/LifecycleWatcher.ts +1 -4
  159. package/front_end/third_party/puppeteer/package/src/cdp/Target.ts +2 -4
  160. package/front_end/third_party/puppeteer/package/src/cdp/WebMCP.ts +7 -76
  161. package/front_end/third_party/puppeteer/package/src/common/ConnectOptions.ts +1 -4
  162. package/front_end/third_party/puppeteer/package/src/node/BrowserLauncher.ts +4 -1
  163. package/front_end/third_party/puppeteer/package/src/node/LaunchOptions.ts +5 -0
  164. package/front_end/third_party/puppeteer/package/src/revisions.ts +1 -1
  165. package/front_end/third_party/puppeteer/package/src/util/httpUtils.ts +5 -5
  166. package/front_end/third_party/puppeteer/package/src/util/version.ts +1 -1
  167. package/front_end/third_party/puppeteer/third_party/parsel/README.chromium +1 -1
  168. package/front_end/ui/components/dialogs/Dialog.ts +3 -0
  169. package/front_end/ui/components/markdown_view/MarkdownLinksMap.ts +0 -7
  170. package/front_end/ui/helpers/OpenInNewTab.ts +15 -7
  171. package/front_end/ui/legacy/TabbedPane.ts +1 -108
  172. package/front_end/ui/legacy/components/data_grid/DataGrid.ts +9 -0
  173. package/front_end/ui/legacy/components/data_grid/DataGridElement.ts +172 -123
  174. package/front_end/ui/legacy/components/data_grid/DataGridExporter.ts +89 -0
  175. package/front_end/ui/legacy/components/data_grid/dataGrid.css +10 -0
  176. package/front_end/ui/legacy/components/data_grid/data_grid.ts +3 -1
  177. package/front_end/ui/legacy/components/perf_ui/FlameChart.ts +89 -40
  178. package/front_end/ui/visual_logging/KnownContextValues.ts +2 -0
  179. package/package.json +1 -1
  180. package/front_end/Images/navigationControls.png +0 -0
  181. package/front_end/Images/navigationControls_2x.png +0 -0
  182. package/front_end/Images/popoverArrows.png +0 -0
  183. package/front_end/entrypoints/greendev_floaty/FloatyEntrypoint.ts +0 -746
  184. package/front_end/entrypoints/greendev_floaty/floaty.css +0 -301
  185. package/front_end/entrypoints/greendev_floaty/floaty.html +0 -38
  186. package/front_end/entrypoints/greendev_floaty/greendev_floaty.ts +0 -415
  187. package/front_end/models/ai_assistance/agents/GreenDevAgent.ts +0 -834
  188. package/front_end/models/ai_assistance/agents/GreenDevAgentAntigravityCliSocketClient.ts +0 -53
  189. package/front_end/models/ai_assistance/agents/GreenDevAgentGeminiCliSocketClient.ts +0 -117
  190. package/front_end/models/annotations/AnnotationRepository.ts +0 -238
  191. package/front_end/models/annotations/AnnotationType.ts +0 -10
  192. package/front_end/models/annotations/README.md +0 -7
  193. package/front_end/models/annotations/annotations.ts +0 -6
  194. package/front_end/models/greendev/Prototypes.ts +0 -68
  195. package/front_end/models/greendev/README.md +0 -5
  196. package/front_end/models/greendev/greendev.ts +0 -5
  197. package/front_end/panels/common/Annotation.ts +0 -184
  198. package/front_end/panels/common/AnnotationManager.ts +0 -208
  199. package/front_end/panels/common/annotation.css +0 -40
  200. package/front_end/panels/greendev/GreenDevPanel.css +0 -282
  201. package/front_end/panels/greendev/GreenDevPanel.ts +0 -364
  202. package/front_end/panels/greendev/GreenDevShared.ts +0 -13
  203. package/front_end/panels/greendev/greendev-meta.ts +0 -52
  204. package/front_end/panels/greendev/greendev.ts +0 -9
@@ -2,7 +2,6 @@ Title: RequestContext getPromptDetails describes the network request correctly
2
2
  Content:
3
3
  # Selected network request
4
4
  Request: https://www.example.com/api/users
5
-
6
5
  Request headers:
7
6
  Accept: application/json
8
7
 
@@ -6,7 +6,6 @@ import * as Common from '../../../core/common/common.js';
6
6
  import type * as Platform from '../../../core/platform/platform.js';
7
7
  import type * as SDK from '../../../core/sdk/sdk.js';
8
8
  import * as Protocol from '../../../generated/protocol.js';
9
- import * as Annotations from '../../annotations/annotations.js';
10
9
  import * as Logs from '../../logs/logs.js';
11
10
  import * as NetworkTimeCalculator from '../../network_time_calculator/network_time_calculator.js';
12
11
  import * as TextUtils from '../../text_utils/text_utils.js';
@@ -163,7 +162,6 @@ export class NetworkRequestFormatter {
163
162
  }
164
163
 
165
164
  return `Request: ${this.#request.url()}
166
- ${Annotations.AnnotationRepository.annotationsEnabled() ? `\nRequest ID: ${this.#request.requestId()}\n` : ''}
167
165
  ${this.formatRequestHeaders()}
168
166
 
169
167
  ${this.formatResponseHeaders()}${responseBody}
@@ -4,7 +4,6 @@
4
4
 
5
5
  import type * as Platform from '../../../core/platform/platform.js';
6
6
  import type * as Protocol from '../../../generated/protocol.js';
7
- import * as Annotations from '../../annotations/annotations.js';
8
7
  import * as CrUXManager from '../../crux-manager/crux-manager.js';
9
8
  import type * as SourceMapScopes from '../../source_map_scopes/source_map_scopes.js';
10
9
  import * as Trace from '../../trace/trace.js';
@@ -186,16 +185,6 @@ export class PerformanceTraceFormatter {
186
185
  if (cls) {
187
186
  const eventText = cls.worstClusterEvent ? `, event: ${this.serializeEvent(cls.worstClusterEvent)}` : '';
188
187
  parts.push(` - CLS: ${cls.value.toFixed(2)}${eventText}`);
189
-
190
- if (Annotations.AnnotationRepository.annotationsEnabled()) {
191
- const worstClusterEvent = cls.worstClusterEvent as Trace.Types.Events.SyntheticLayoutShiftCluster;
192
- const layoutShiftData =
193
- worstClusterEvent?.worstShiftEvent?.args?.data as Trace.Types.Events.LayoutShiftData;
194
- if (layoutShiftData?.impacted_nodes && layoutShiftData.impacted_nodes?.length > 0) {
195
- Annotations.AnnotationRepository.instance().addElementsAnnotation(
196
- 'This element is impacted by a layout shift', layoutShiftData.impacted_nodes[0].node_id.toString());
197
- }
198
- }
199
188
  }
200
189
  } else {
201
190
  parts.push('Metrics (lab / observed): n/a');
@@ -601,7 +590,6 @@ export class PerformanceTraceFormatter {
601
590
  string {
602
591
  const {
603
592
  url,
604
- requestId,
605
593
  statusCode,
606
594
  initialPriority,
607
595
  priority,
@@ -662,8 +650,7 @@ export class PerformanceTraceFormatter {
662
650
  const eventKey = this.#eventsSerializer.keyForEvent(request);
663
651
  const eventKeyLine = eventKey ? `eventKey: ${eventKey}\n` : '';
664
652
 
665
- return `${titlePrefix}: ${url}${
666
- Annotations.AnnotationRepository.annotationsEnabled() ? `\nrequestId: ${requestId}` : ''}
653
+ return `${titlePrefix}: ${url}
667
654
  ${eventKeyLine}Timings:
668
655
  - Queued at: ${micros(startTimesForLifecycle.queuedAt)}
669
656
  - Request sent at: ${micros(startTimesForLifecycle.requestSentAt)}
@@ -14,8 +14,7 @@ export class AutofillManager extends Common.ObjectWrapper.ObjectWrapper<EventTyp
14
14
  #autofillModel: SDK.AutofillModel.AutofillModel|null = null;
15
15
  #frameManager: SDK.FrameManager.FrameManager;
16
16
 
17
- constructor(targetManager: SDK.TargetManager.TargetManager,
18
- frameManager: SDK.FrameManager.FrameManager = SDK.FrameManager.FrameManager.instance()) {
17
+ constructor(targetManager: SDK.TargetManager.TargetManager, frameManager: SDK.FrameManager.FrameManager) {
19
18
  super();
20
19
  this.#frameManager = frameManager;
21
20
  targetManager.addModelListener(SDK.AutofillModel.AutofillModel, SDK.AutofillModel.Events.ADDRESS_FORM_FILLED,
@@ -102,8 +102,6 @@ export interface ConfigSetting {
102
102
  originMappings?: OriginMapping[];
103
103
  }
104
104
 
105
- let cruxManagerInstance: CrUXManager;
106
-
107
105
  /** TODO: Potentially support `TABLET`. Tablet field data will always be `null` until then. **/
108
106
  export const DEVICE_SCOPE_LIST: DeviceScope[] = ['ALL', 'DESKTOP', 'PHONE'];
109
107
 
@@ -128,11 +126,13 @@ export class CrUXManager extends Common.ObjectWrapper.ObjectWrapper<EventTypes>
128
126
  #configSetting: Common.Settings.Setting<ConfigSetting>;
129
127
  #endpoint = DEFAULT_ENDPOINT;
130
128
  #pageResult?: PageResult;
129
+ readonly #targetManager: SDK.TargetManager.TargetManager;
131
130
  fieldDeviceOption: DeviceOption = 'AUTO';
132
131
  fieldPageScope: PageScope = 'url';
133
132
 
134
- private constructor() {
133
+ constructor(targetManager: SDK.TargetManager.TargetManager, settings: Common.Settings.Settings) {
135
134
  super();
135
+ this.#targetManager = targetManager;
136
136
 
137
137
  /**
138
138
  * In an incognito or guest window - which is called an "OffTheRecord"
@@ -149,7 +149,7 @@ export class CrUXManager extends Common.ObjectWrapper.ObjectWrapper<EventTypes>
149
149
  const storageTypeForConsent =
150
150
  useSessionStorage ? Common.Settings.SettingStorageType.SESSION : Common.Settings.SettingStorageType.GLOBAL;
151
151
 
152
- this.#configSetting = Common.Settings.Settings.instance().createSetting<ConfigSetting>(
152
+ this.#configSetting = settings.createSetting<ConfigSetting>(
153
153
  'field-data', {enabled: false, override: '', originMappings: [], overrideEnabled: false},
154
154
  storageTypeForConsent);
155
155
 
@@ -157,18 +157,23 @@ export class CrUXManager extends Common.ObjectWrapper.ObjectWrapper<EventTypes>
157
157
  void this.refresh();
158
158
  });
159
159
 
160
- SDK.TargetManager.TargetManager.instance().addModelListener(
161
- SDK.ResourceTreeModel.ResourceTreeModel, SDK.ResourceTreeModel.Events.FrameNavigated, this.#onFrameNavigated,
162
- this);
160
+ this.#targetManager.addModelListener(SDK.ResourceTreeModel.ResourceTreeModel,
161
+ SDK.ResourceTreeModel.Events.FrameNavigated, this.#onFrameNavigated, this);
163
162
  }
164
163
 
165
164
  static instance(opts: {forceNew: boolean|null} = {forceNew: null}): CrUXManager {
166
165
  const {forceNew} = opts;
167
- if (!cruxManagerInstance || forceNew) {
168
- cruxManagerInstance = new CrUXManager();
166
+ if (!Root.DevToolsContext.globalInstance().has(CrUXManager) || forceNew) {
167
+ Root.DevToolsContext.globalInstance().set(
168
+ CrUXManager,
169
+ new CrUXManager(SDK.TargetManager.TargetManager.instance(), Common.Settings.Settings.instance()));
169
170
  }
170
171
 
171
- return cruxManagerInstance;
172
+ return Root.DevToolsContext.globalInstance().get(CrUXManager);
173
+ }
174
+
175
+ static removeInstance(): void {
176
+ Root.DevToolsContext.globalInstance().delete(CrUXManager);
172
177
  }
173
178
 
174
179
  /** The most recent page result from the CrUX service. */
@@ -264,7 +269,7 @@ export class CrUXManager extends Common.ObjectWrapper.ObjectWrapper<EventTypes>
264
269
  }
265
270
 
266
271
  async #getInspectedURL(): Promise<string> {
267
- const targetManager = SDK.TargetManager.TargetManager.instance();
272
+ const targetManager = this.#targetManager;
268
273
  let inspectedURL = targetManager.inspectedURL();
269
274
  if (!inspectedURL) {
270
275
  inspectedURL = await new Promise(resolve => {
@@ -7255,7 +7255,7 @@ export const NativeFunctions = [
7255
7255
  },
7256
7256
  {
7257
7257
  name: "RTCEncodedAudioFrame",
7258
- signatures: [["originalFrame","?options"]]
7258
+ signatures: [["init"],["originalFrame","?options"]]
7259
7259
  },
7260
7260
  {
7261
7261
  name: "setMetadata",
@@ -5,6 +5,7 @@
5
5
  import * as Common from '../../core/common/common.js';
6
6
  import * as Host from '../../core/host/host.js';
7
7
  import type * as Platform from '../../core/platform/platform.js';
8
+ import * as Root from '../../core/root/root.js';
8
9
  import * as ProjectSettings from '../project_settings/project_settings.js';
9
10
 
10
11
  /**
@@ -26,8 +27,6 @@ export interface AutomaticFileSystem {
26
27
  */
27
28
  export type AutomaticFileSystemAvailability = 'available'|'unavailable';
28
29
 
29
- let automaticFileSystemManagerInstance: AutomaticFileSystemManager|undefined;
30
-
31
30
  /**
32
31
  * Automatically connects and disconnects workspace folders.
33
32
  *
@@ -66,9 +65,8 @@ export class AutomaticFileSystemManager extends Common.ObjectWrapper.ObjectWrapp
66
65
  /**
67
66
  * @internal
68
67
  */
69
- private constructor(
70
- inspectorFrontendHost: Host.InspectorFrontendHostAPI.InspectorFrontendHostAPI,
71
- projectSettingsModel: ProjectSettings.ProjectSettingsModel.ProjectSettingsModel) {
68
+ constructor(inspectorFrontendHost: Host.InspectorFrontendHostAPI.InspectorFrontendHostAPI,
69
+ projectSettingsModel: ProjectSettings.ProjectSettingsModel.ProjectSettingsModel) {
72
70
  super();
73
71
  this.#automaticFileSystem = null;
74
72
  this.#inspectorFrontendHost = inspectorFrontendHost;
@@ -93,27 +91,30 @@ export class AutomaticFileSystemManager extends Common.ObjectWrapper.ObjectWrapp
93
91
  inspectorFrontendHost: Host.InspectorFrontendHostAPI.InspectorFrontendHostAPI|null,
94
92
  projectSettingsModel: ProjectSettings.ProjectSettingsModel.ProjectSettingsModel|null,
95
93
  } = {forceNew: false, inspectorFrontendHost: null, projectSettingsModel: null}): AutomaticFileSystemManager {
96
- if (!automaticFileSystemManagerInstance || forceNew) {
94
+ if (!Root.DevToolsContext.globalInstance().has(AutomaticFileSystemManager) || forceNew) {
97
95
  if (!inspectorFrontendHost || !projectSettingsModel) {
98
96
  throw new Error(
99
97
  'Unable to create AutomaticFileSystemManager: ' +
100
98
  'inspectorFrontendHost, and projectSettingsModel must be provided');
101
99
  }
102
- automaticFileSystemManagerInstance = new AutomaticFileSystemManager(
103
- inspectorFrontendHost,
104
- projectSettingsModel,
100
+ Root.DevToolsContext.globalInstance().set(
101
+ AutomaticFileSystemManager,
102
+ new AutomaticFileSystemManager(
103
+ inspectorFrontendHost,
104
+ projectSettingsModel,
105
+ ),
105
106
  );
106
107
  }
107
- return automaticFileSystemManagerInstance;
108
+ return Root.DevToolsContext.globalInstance().get(AutomaticFileSystemManager);
108
109
  }
109
110
 
110
111
  /**
111
112
  * Clears the `AutomaticFileSystemManager` singleton (if any);
112
113
  */
113
114
  static removeInstance(): void {
114
- if (automaticFileSystemManagerInstance) {
115
- automaticFileSystemManagerInstance.#dispose();
116
- automaticFileSystemManagerInstance = undefined;
115
+ if (Root.DevToolsContext.globalInstance().has(AutomaticFileSystemManager)) {
116
+ Root.DevToolsContext.globalInstance().get(AutomaticFileSystemManager).#dispose();
117
+ Root.DevToolsContext.globalInstance().delete(AutomaticFileSystemManager);
117
118
  }
118
119
  }
119
120
 
@@ -5,6 +5,7 @@
5
5
  import * as Common from '../../core/common/common.js';
6
6
  import * as Host from '../../core/host/host.js';
7
7
  import type * as Platform from '../../core/platform/platform.js';
8
+ import * as Root from '../../core/root/root.js';
8
9
  import type {ContentDataOrError} from '../text_utils/ContentData.js';
9
10
  import type {SearchMatch} from '../text_utils/ContentProvider.js';
10
11
  import * as Workspace from '../workspace/workspace.js';
@@ -169,8 +170,6 @@ export class FileSystem implements Workspace.Workspace.Project {
169
170
  }
170
171
  }
171
172
 
172
- let automaticFileSystemWorkspaceBindingInstance: AutomaticFileSystemWorkspaceBinding|undefined;
173
-
174
173
  /**
175
174
  * Provides a transient workspace `Project` that doesn't contain any `UISourceCode`s,
176
175
  * and only acts as a placeholder for the automatic file system, while it's not
@@ -186,7 +185,7 @@ export class AutomaticFileSystemWorkspaceBinding {
186
185
  /**
187
186
  * @internal
188
187
  */
189
- private constructor(
188
+ constructor(
190
189
  automaticFileSystemManager: AutomaticFileSystemManager,
191
190
  isolatedFileSystemManager: IsolatedFileSystemManager,
192
191
  workspace: Workspace.Workspace.WorkspaceImpl,
@@ -219,29 +218,33 @@ export class AutomaticFileSystemWorkspaceBinding {
219
218
  isolatedFileSystemManager: null,
220
219
  workspace: null,
221
220
  }): AutomaticFileSystemWorkspaceBinding {
222
- if (!automaticFileSystemWorkspaceBindingInstance || forceNew) {
221
+ if (!Root.DevToolsContext.globalInstance().has(AutomaticFileSystemWorkspaceBinding) || forceNew) {
223
222
  if (!automaticFileSystemManager || !isolatedFileSystemManager || !workspace) {
224
223
  throw new Error(
225
224
  'Unable to create AutomaticFileSystemWorkspaceBinding: ' +
226
225
  'automaticFileSystemManager, isolatedFileSystemManager, ' +
227
226
  'and workspace must be provided');
228
227
  }
229
- automaticFileSystemWorkspaceBindingInstance = new AutomaticFileSystemWorkspaceBinding(
228
+ const automaticFileSystemWorkspaceBinding = new AutomaticFileSystemWorkspaceBinding(
230
229
  automaticFileSystemManager,
231
230
  isolatedFileSystemManager,
232
231
  workspace,
233
232
  );
233
+ Root.DevToolsContext.globalInstance().set(AutomaticFileSystemWorkspaceBinding,
234
+ automaticFileSystemWorkspaceBinding);
234
235
  }
235
- return automaticFileSystemWorkspaceBindingInstance;
236
+ return Root.DevToolsContext.globalInstance().get(AutomaticFileSystemWorkspaceBinding);
236
237
  }
237
238
 
238
239
  /**
239
240
  * Clears the `AutomaticFileSystemWorkspaceBinding` singleton (if any);
240
241
  */
241
242
  static removeInstance(): void {
242
- if (automaticFileSystemWorkspaceBindingInstance) {
243
- automaticFileSystemWorkspaceBindingInstance.#dispose();
244
- automaticFileSystemWorkspaceBindingInstance = undefined;
243
+ if (Root.DevToolsContext.globalInstance().has(AutomaticFileSystemWorkspaceBinding)) {
244
+ const automaticFileSystemWorkspaceBinding =
245
+ Root.DevToolsContext.globalInstance().get(AutomaticFileSystemWorkspaceBinding);
246
+ automaticFileSystemWorkspaceBinding.#dispose();
247
+ Root.DevToolsContext.globalInstance().delete(AutomaticFileSystemWorkspaceBinding);
245
248
  }
246
249
  }
247
250
 
@@ -6,6 +6,7 @@ import * as Common from '../../core/common/common.js';
6
6
  import * as Host from '../../core/host/host.js';
7
7
  import * as i18n from '../../core/i18n/i18n.js';
8
8
  import * as Platform from '../../core/platform/platform.js';
9
+ import * as Root from '../../core/root/root.js';
9
10
 
10
11
  import type {FilesChangedData} from './FileSystemWorkspaceBinding.js';
11
12
  import {IsolatedFileSystem} from './IsolatedFileSystem.js';
@@ -24,7 +25,6 @@ const UIStrings = {
24
25
  } as const;
25
26
  const str_ = i18n.i18n.registerUIStrings('models/persistence/IsolatedFileSystemManager.ts', UIStrings);
26
27
  const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
27
- let isolatedFileSystemManagerInstance: IsolatedFileSystemManager|null;
28
28
 
29
29
  export class IsolatedFileSystemManager extends Common.ObjectWrapper.ObjectWrapper<EventTypes> {
30
30
  readonly #fileSystems: Map<Platform.DevToolsPath.UrlString, PlatformFileSystem>;
@@ -34,9 +34,11 @@ export class IsolatedFileSystemManager extends Common.ObjectWrapper.ObjectWrappe
34
34
  private fileSystemRequestResolve: ((arg0: IsolatedFileSystem|null) => void)|null;
35
35
  private readonly fileSystemsLoadedPromise: Promise<IsolatedFileSystem[]>;
36
36
  readonly #settings: Common.Settings.Settings;
37
- private constructor(settings: Common.Settings.Settings = Common.Settings.Settings.instance()) {
37
+ readonly #console: Common.Console.Console;
38
+ constructor(settings: Common.Settings.Settings, console: Common.Console.Console) {
38
39
  super();
39
40
  this.#settings = settings;
41
+ this.#console = console;
40
42
 
41
43
  this.#fileSystems = new Map();
42
44
  this.callbacks = new Map();
@@ -99,17 +101,24 @@ export class IsolatedFileSystemManager extends Common.ObjectWrapper.ObjectWrappe
99
101
  this.fileSystemsLoadedPromise = this.requestFileSystems();
100
102
  }
101
103
 
102
- static instance(opts: {forceNew: boolean|null} = {forceNew: null}): IsolatedFileSystemManager {
103
- const {forceNew} = opts;
104
- if (!isolatedFileSystemManagerInstance || forceNew) {
105
- isolatedFileSystemManagerInstance = new IsolatedFileSystemManager();
104
+ static instance(opts: {
105
+ forceNew?: boolean|null,
106
+ settings?: Common.Settings.Settings|null,
107
+ console?: Common.Console.Console|null,
108
+ } = {}): IsolatedFileSystemManager {
109
+ const forceNew = opts.forceNew ?? null;
110
+ const settings = opts.settings ?? Common.Settings.Settings.instance();
111
+ const console = opts.console ?? Common.Console.Console.instance();
112
+ if (!Root.DevToolsContext.globalInstance().has(IsolatedFileSystemManager) || forceNew) {
113
+ const instance = new IsolatedFileSystemManager(settings, console);
114
+ Root.DevToolsContext.globalInstance().set(IsolatedFileSystemManager, instance);
106
115
  }
107
116
 
108
- return isolatedFileSystemManagerInstance;
117
+ return Root.DevToolsContext.globalInstance().get(IsolatedFileSystemManager);
109
118
  }
110
119
 
111
120
  static removeInstance(): void {
112
- isolatedFileSystemManagerInstance = null;
121
+ Root.DevToolsContext.globalInstance().delete(IsolatedFileSystemManager);
113
122
  }
114
123
 
115
124
  private requestFileSystems(): Promise<IsolatedFileSystem[]> {
@@ -190,7 +199,7 @@ export class IsolatedFileSystemManager extends Common.ObjectWrapper.ObjectWrappe
190
199
  const {errorMessage, fileSystem} = event.data;
191
200
  if (errorMessage) {
192
201
  if (errorMessage !== '<selection cancelled>' && errorMessage !== '<permission denied>') {
193
- Common.Console.Console.instance().error(i18nString(UIStrings.unableToAddFilesystemS, {PH1: errorMessage}));
202
+ this.#console.error(i18nString(UIStrings.unableToAddFilesystemS, {PH1: errorMessage}));
194
203
  }
195
204
  if (!this.fileSystemRequestResolve) {
196
205
  return;
@@ -4,7 +4,7 @@
4
4
 
5
5
  import * as Common from '../../core/common/common.js';
6
6
  import * as Platform from '../../core/platform/platform.js';
7
- import type * as Root from '../../core/root/root.js';
7
+ import * as Root from '../../core/root/root.js';
8
8
  import * as SDK from '../../core/sdk/sdk.js';
9
9
 
10
10
  /** The security origin for all DevTools (front-end) resources. */
@@ -72,8 +72,6 @@ export type ProjectSettingsAvailability = 'available'|'unavailable';
72
72
  const EMPTY_PROJECT_SETTINGS: ProjectSettings = Object.freeze({});
73
73
  const IDLE_PROMISE: Promise<void> = Promise.resolve();
74
74
 
75
- let projectSettingsModelInstance: ProjectSettingsModel|undefined;
76
-
77
75
  export class ProjectSettingsModel extends Common.ObjectWrapper.ObjectWrapper<EventTypes> {
78
76
  readonly #pageResourceLoader: SDK.PageResourceLoader.PageResourceLoader;
79
77
  readonly #targetManager: SDK.TargetManager.TargetManager;
@@ -108,7 +106,7 @@ export class ProjectSettingsModel extends Common.ObjectWrapper.ObjectWrapper<Eve
108
106
  return this.#promise.then(() => this.#projectSettings);
109
107
  }
110
108
 
111
- private constructor(
109
+ constructor(
112
110
  hostConfig: Root.Runtime.HostConfig,
113
111
  pageResourceLoader: SDK.PageResourceLoader.PageResourceLoader,
114
112
  targetManager: SDK.TargetManager.TargetManager,
@@ -140,24 +138,27 @@ export class ProjectSettingsModel extends Common.ObjectWrapper.ObjectWrapper<Eve
140
138
  pageResourceLoader: SDK.PageResourceLoader.PageResourceLoader|null,
141
139
  targetManager: SDK.TargetManager.TargetManager|null,
142
140
  }): ProjectSettingsModel {
143
- if (!projectSettingsModelInstance || forceNew) {
141
+ if (!Root.DevToolsContext.globalInstance().has(ProjectSettingsModel) || forceNew) {
144
142
  if (!hostConfig || !pageResourceLoader || !targetManager) {
145
143
  throw new Error(
146
144
  'Unable to create ProjectSettingsModel: ' +
147
145
  'hostConfig, pageResourceLoader, and targetManager must be provided');
148
146
  }
149
- projectSettingsModelInstance = new ProjectSettingsModel(hostConfig, pageResourceLoader, targetManager);
147
+ Root.DevToolsContext.globalInstance().set(
148
+ ProjectSettingsModel,
149
+ new ProjectSettingsModel(hostConfig, pageResourceLoader, targetManager),
150
+ );
150
151
  }
151
- return projectSettingsModelInstance;
152
+ return Root.DevToolsContext.globalInstance().get(ProjectSettingsModel);
152
153
  }
153
154
 
154
155
  /**
155
- * Clears the `ProjectSettingsModel` singleton (if any).
156
+ * Clears the `ProjectSettingsModel` singleton (if any);
156
157
  */
157
158
  static removeInstance(): void {
158
- if (projectSettingsModelInstance) {
159
- projectSettingsModelInstance.#dispose();
160
- projectSettingsModelInstance = undefined;
159
+ if (Root.DevToolsContext.globalInstance().has(ProjectSettingsModel)) {
160
+ Root.DevToolsContext.globalInstance().get(ProjectSettingsModel).#dispose();
161
+ Root.DevToolsContext.globalInstance().delete(ProjectSettingsModel);
161
162
  }
162
163
  }
163
164
 
@@ -7,21 +7,14 @@ import * as Types from '../types/types.js';
7
7
 
8
8
  import type {HandlerName} from './types.js';
9
9
 
10
- // Each thread contains events. Events indicate the thread and process IDs, which are
11
- // used to store the event in the correct process thread entry below.
12
- let unpairedAsyncEvents: Types.Events.PipelineReporter[] = [];
13
-
14
10
  let legacyScreenshotEvents: Types.Events.LegacyScreenshot[] = [];
15
11
  let modernScreenshotEvents: Types.Events.Screenshot[] = [];
16
12
  let syntheticScreenshots: Types.Events.LegacySyntheticScreenshot[] = [];
17
- let frameSequenceToTs: Record<string, Types.Timing.Micro> = {};
18
13
 
19
14
  export function reset(): void {
20
- unpairedAsyncEvents = [];
21
15
  legacyScreenshotEvents = [];
22
16
  syntheticScreenshots = [];
23
17
  modernScreenshotEvents = [];
24
- frameSequenceToTs = {};
25
18
  }
26
19
 
27
20
  export function handleEvent(event: Types.Events.Event): void {
@@ -29,39 +22,26 @@ export function handleEvent(event: Types.Events.Event): void {
29
22
  legacyScreenshotEvents.push(event);
30
23
  } else if (Types.Events.isScreenshot(event)) {
31
24
  modernScreenshotEvents.push(event);
32
- } else if (Types.Events.isPipelineReporter(event)) {
33
- unpairedAsyncEvents.push(event);
34
25
  }
35
26
  }
36
27
 
37
28
  export async function finalize(): Promise<void> {
38
- const pipelineReporterEvents = Helpers.Trace.createMatchedSortedSyntheticEvents(unpairedAsyncEvents);
39
-
40
- frameSequenceToTs = Object.fromEntries(pipelineReporterEvents.map(evt => {
41
- const args = evt.args.data.beginEvent.args;
42
- const frameReporter = 'frame_reporter' in args ? args.frame_reporter : args.chrome_frame_reporter;
43
- const frameSequenceId = frameReporter.frame_sequence;
44
- const presentationTs = Types.Timing.Micro(evt.ts + evt.dur);
45
- return [frameSequenceId, presentationTs];
46
- }));
47
-
48
29
  for (const snapshotEvent of legacyScreenshotEvents) {
49
30
  const {cat, name, ph, pid, tid} = snapshotEvent;
50
- const syntheticEvent = Helpers.SyntheticEvents.SyntheticEventsManager.registerSyntheticEvent<
51
- Types.Events.LegacySyntheticScreenshot>({
52
- rawSourceEvent: snapshotEvent,
53
- cat,
54
- name,
55
- ph,
56
- pid,
57
- tid,
58
- // TODO(paulirish, crbug.com/41363012): investigate why getPresentationTimestamp(snapshotEvent) seems less accurate. Resolve screenshot timing inaccuracy.
59
- // `getPresentationTimestamp(snapshotEvent) - snapshotEvent.ts` is how many microsec the screenshot should be adjusted to the right/later
60
- ts: snapshotEvent.ts,
61
- args: {
62
- dataUri: `data:image/jpg;base64,${snapshotEvent.args.snapshot}`,
63
- },
64
- });
31
+ const syntheticEvent =
32
+ Helpers.SyntheticEvents.SyntheticEventsManager.registerSyntheticEvent<Types.Events.LegacySyntheticScreenshot>({
33
+ rawSourceEvent: snapshotEvent,
34
+ cat,
35
+ name,
36
+ ph,
37
+ pid,
38
+ tid,
39
+ // TODO(paulirish, crbug.com/41363012): fix snapshot timestamps.
40
+ ts: snapshotEvent.ts,
41
+ args: {
42
+ dataUri: `data:image/jpg;base64,${snapshotEvent.args.snapshot}`,
43
+ },
44
+ });
65
45
  syntheticScreenshots.push(syntheticEvent);
66
46
  }
67
47
  }
@@ -73,31 +53,6 @@ export function screenshotImageDataUri(event: Types.Events.LegacySyntheticScreen
73
53
  return `data:image/jpg;base64,${event.args.snapshot}`;
74
54
  }
75
55
 
76
- /**
77
- * Correct the screenshot timestamps
78
- * The screenshot 'snapshot object' trace event has the "frame sequence number" attached as an ID.
79
- * We match that up with the "PipelineReporter" trace events as they terminate at presentation.
80
- * Presentation == when the pixels hit the screen. AKA Swap on the GPU
81
- */
82
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
83
- function getPresentationTimestamp(screenshotEvent: Types.Events.LegacyScreenshot): Types.Timing.Micro {
84
- const frameSequence = parseInt(screenshotEvent.id, 16);
85
- // If it's 1, then it's an old trace (before https://crrev.com/c/4957973) and cannot be corrected.
86
- if (frameSequence === 1) {
87
- return screenshotEvent.ts;
88
- }
89
- // The screenshot trace event's `ts` reflects the "expected display time" which is ESTIMATE.
90
- // It is set by the compositor frame sink from the `expected_display_time`, which is based on a previously known
91
- // frame start PLUS the vsync interval (eg 16.6ms)
92
- const updatedTs = frameSequenceToTs[frameSequence];
93
- // Do we always find a match? No...
94
- // We generally don't match the very first screenshot and, sometimes, the last
95
- // The very first screenshot is requested immediately (even if nothing is painting). As a result there's no compositor
96
- // instrumentation running alongside.
97
- // The last one is sometimes missing as because the trace terminates right before the associated PipelineReporter is emitted.
98
- return updatedTs ?? screenshotEvent.ts;
99
- }
100
-
101
56
  export interface Data {
102
57
  // These are nullable because in January 2025 a CL in Chromium
103
58
  // crrev.com/c/6197645 landed which changed the format of screenshots. For a
@@ -11,9 +11,7 @@ import * as Platform from '../../core/platform/platform.js';
11
11
  import * as Root from '../../core/root/root.js';
12
12
  import * as SDK from '../../core/sdk/sdk.js';
13
13
  import * as AiAssistanceModel from '../../models/ai_assistance/ai_assistance.js';
14
- import * as Annotations from '../../models/annotations/annotations.js';
15
14
  import * as Badges from '../../models/badges/badges.js';
16
- import * as Greendev from '../../models/greendev/greendev.js';
17
15
  import type * as LHModel from '../../models/lighthouse/lighthouse.js';
18
16
  import type * as Trace from '../../models/trace/trace.js';
19
17
  import * as Workspace from '../../models/workspace/workspace.js';
@@ -51,7 +49,6 @@ import {ExploreWidget} from './components/ExploreWidget.js';
51
49
  import {MarkdownRendererWithCodeBlock} from './components/MarkdownRendererWithCodeBlock.js';
52
50
  import {OptInChangeDialog} from './components/OptInChangeDialog.js';
53
51
  import {PerformanceAgentMarkdownRenderer} from './components/PerformanceAgentMarkdownRenderer.js';
54
- import {StylingAgentMarkdownRenderer} from './components/StylingAgentMarkdownRenderer.js';
55
52
  import {
56
53
  WalkthroughView,
57
54
  } from './components/WalkthroughView.js';
@@ -280,10 +277,6 @@ const lockedString = i18n.i18n.lockedString;
280
277
 
281
278
  function selectedElementFilter(maybeNode: SDK.DOMModel.DOMNode|null): SDK.DOMModel.DOMNode|null {
282
279
  if (maybeNode) {
283
- if (Greendev.Prototypes.instance().isEnabled('emulationCapabilities')) {
284
- return maybeNode;
285
- }
286
-
287
280
  return maybeNode.nodeType() === Node.ELEMENT_NODE ? maybeNode : null;
288
281
  }
289
282
 
@@ -311,12 +304,7 @@ async function getEmptyStateSuggestions(conversation?: AiAssistanceModel.AiConve
311
304
  return [
312
305
  {title: 'What can you help me with?', jslogContext: 'styling-default'},
313
306
  {title: 'Why isn’t this element visible?', jslogContext: 'styling-default'},
314
- {
315
- title: Greendev.Prototypes.instance().isEnabled('emulationCapabilities') ?
316
- 'Are there display issues on this page for people using an Android phone?' :
317
- 'How do I center this element?',
318
- jslogContext: 'styling-default'
319
- },
307
+ {title: 'How do I center this element?', jslogContext: 'styling-default'},
320
308
  ];
321
309
  case AiAssistanceModel.AiHistoryStorage.ConversationType.FILE:
322
310
  return [
@@ -408,14 +396,7 @@ function getMarkdownRenderer(conversation?: AiAssistanceModel.AiConversation.AiC
408
396
  // Handle historical conversations (can't linkify anything).
409
397
  return new PerformanceAgentMarkdownRenderer();
410
398
  }
411
- if (Greendev.Prototypes.instance().isEnabled('emulationCapabilities') &&
412
- conversation?.type === AiAssistanceModel.AiHistoryStorage.ConversationType.STYLING &&
413
- SDK.TargetManager.TargetManager.instance().primaryPageTarget()?.model(SDK.DOMModel.DOMModel)) {
414
- const domModel = SDK.TargetManager.TargetManager.instance().primaryPageTarget()?.model(SDK.DOMModel.DOMModel);
415
- const resourceTreeModel = domModel?.target().model(SDK.ResourceTreeModel.ResourceTreeModel);
416
- const mainFrameId = resourceTreeModel?.mainFrame?.id;
417
- return new StylingAgentMarkdownRenderer(mainFrameId);
418
- }
399
+
419
400
  if (conversation?.type === AiAssistanceModel.AiHistoryStorage.ConversationType.ACCESSIBILITY) {
420
401
  const domModel = SDK.TargetManager.TargetManager.instance().primaryPageTarget()?.model(SDK.DOMModel.DOMModel);
421
402
  const mainDocumentURL = domModel?.existingDocument()?.documentURL;
@@ -1737,9 +1718,6 @@ export class AiAssistancePanel extends UI.Panel.Panel {
1737
1718
  this.#resetWalkthrough();
1738
1719
  UI.ARIAUtils.LiveAnnouncer.alert(i18nString(UIStrings.newChatCreated));
1739
1720
 
1740
- if (Annotations.AnnotationRepository.annotationsEnabled()) {
1741
- Annotations.AnnotationRepository.instance().deleteAllAnnotations();
1742
- }
1743
1721
  }
1744
1722
 
1745
1723
  #cancel(): void {
@@ -1863,12 +1841,8 @@ export class AiAssistancePanel extends UI.Panel.Panel {
1863
1841
  Badges.UserBadges.instance().recordAction(Badges.BadgeAction.STARTED_AI_CONVERSATION);
1864
1842
  }
1865
1843
 
1866
- const greenDevEmulationEnabled = Greendev.Prototypes.instance().isEnabled('emulationCapabilities');
1867
1844
  let multimodalInput: AiAssistanceModel.AiAgent.MultimodalInput|undefined;
1868
- const pendingInput = this.#conversation.getPendingMultimodalInput();
1869
- if (greenDevEmulationEnabled && pendingInput) {
1870
- multimodalInput = pendingInput;
1871
- } else if (isAiAssistanceMultimodalInputEnabled() && imageInput && multimodalInputType) {
1845
+ if (isAiAssistanceMultimodalInputEnabled() && imageInput && multimodalInputType) {
1872
1846
  multimodalInput = {
1873
1847
  input: imageInput,
1874
1848
  id: crypto.randomUUID(),
@@ -218,11 +218,19 @@ const UIStrings = {
218
218
  /**
219
219
  *@description Explanation for an event outcome. Key refers to a cryptographic key.
220
220
  */
221
- keyError: 'Key error',
221
+ signingKeyGenerationError: 'Signing key generation error',
222
+ /**
223
+ *@description Explanation for an event outcome. Key refers to a cryptographic key.
224
+ */
225
+ attestationKeyGenerationError: 'Attestation key generation error',
222
226
  /**
223
227
  *@description Explanation for an event outcome. Signing refers to cryptographic signing.
224
228
  */
225
229
  signingError: 'Signing error',
230
+ /**
231
+ *@description Explanation for an event outcome. Signing refers to cryptographic signing.
232
+ */
233
+ transientSigningError: 'Transient signing error',
226
234
  /**
227
235
  *@description Explanation for an event outcome.
228
236
  */
@@ -942,10 +950,14 @@ function fetchResultToString(fetchResult: Protocol.Network.DeviceBoundSessionFet
942
950
  switch (fetchResult) {
943
951
  case Protocol.Network.DeviceBoundSessionFetchResult.Success:
944
952
  return i18nString(UIStrings.success);
945
- case Protocol.Network.DeviceBoundSessionFetchResult.KeyError:
946
- return i18nString(UIStrings.keyError);
953
+ case Protocol.Network.DeviceBoundSessionFetchResult.SigningKeyGenerationError:
954
+ return i18nString(UIStrings.signingKeyGenerationError);
955
+ case Protocol.Network.DeviceBoundSessionFetchResult.AttestationKeyGenerationError:
956
+ return i18nString(UIStrings.attestationKeyGenerationError);
947
957
  case Protocol.Network.DeviceBoundSessionFetchResult.SigningError:
948
958
  return i18nString(UIStrings.signingError);
959
+ case Protocol.Network.DeviceBoundSessionFetchResult.TransientSigningError:
960
+ return i18nString(UIStrings.transientSigningError);
949
961
  case Protocol.Network.DeviceBoundSessionFetchResult.ServerRequestedTermination:
950
962
  return i18nString(UIStrings.serverRequestedTermination);
951
963
  case Protocol.Network.DeviceBoundSessionFetchResult.InvalidSessionId: