chrome-devtools-frontend 1.0.1536371 → 1.0.1537268

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 (165) hide show
  1. package/front_end/core/host/AidaClient.ts +64 -5
  2. package/front_end/core/host/DispatchHttpRequestClient.ts +62 -0
  3. package/front_end/core/host/GdpClient.ts +8 -57
  4. package/front_end/core/host/host.ts +2 -0
  5. package/front_end/core/protocol_client/CDPConnection.ts +10 -8
  6. package/front_end/core/protocol_client/InspectorBackend.ts +36 -42
  7. package/front_end/core/sdk/EnhancedTracesParser.ts +20 -5
  8. package/front_end/core/sdk/RehydratingConnection.ts +112 -4
  9. package/front_end/core/sdk/RehydratingObject.ts +8 -0
  10. package/front_end/core/sdk/TraceObject.ts +5 -1
  11. package/front_end/models/javascript_metadata/NativeFunctions.js +1 -1
  12. package/front_end/models/trace/types/File.ts +9 -0
  13. package/front_end/panels/ai_assistance/AiAssistancePanel.ts +5 -9
  14. package/front_end/panels/ai_assistance/components/ChatView.ts +58 -70
  15. package/front_end/panels/application/BackForwardCacheTreeElement.ts +2 -6
  16. package/front_end/panels/application/components/BackForwardCacheView.ts +74 -69
  17. package/front_end/panels/application/components/FrameDetailsView.ts +8 -11
  18. package/front_end/panels/application/components/OriginTrialTreeView.ts +65 -69
  19. package/front_end/panels/application/components/backForwardCacheView.css +4 -0
  20. package/front_end/panels/application/components/badge.css +1 -1
  21. package/front_end/panels/browser_debugger/CategorizedBreakpointsSidebarPane.ts +44 -53
  22. package/front_end/panels/recorder/RecorderController.ts +1 -2
  23. package/front_end/panels/recorder/components/CreateRecordingView.ts +153 -129
  24. package/front_end/panels/settings/AISettingsTab.ts +162 -171
  25. package/front_end/panels/settings/SettingsScreen.ts +3 -7
  26. package/front_end/panels/settings/aiSettingsTab.css +151 -148
  27. package/front_end/panels/settings/settings-meta.ts +1 -2
  28. package/front_end/panels/sources/AddSourceMapURLDialog.ts +23 -26
  29. package/front_end/panels/timeline/TimelinePanel.ts +60 -11
  30. package/front_end/panels/timeline/components/ExportTraceOptions.ts +33 -34
  31. package/front_end/third_party/chromium/README.chromium +2 -2
  32. package/front_end/third_party/puppeteer/README.chromium +2 -2
  33. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.d.ts +9 -1
  34. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.d.ts.map +1 -1
  35. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.js.map +1 -1
  36. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/BrowserContext.d.ts +2 -2
  37. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/BrowserContext.d.ts.map +1 -1
  38. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/BrowserContext.js.map +1 -1
  39. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.d.ts +13 -1
  40. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.d.ts.map +1 -1
  41. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.js.map +1 -1
  42. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/BrowserContext.d.ts +2 -2
  43. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/BrowserContext.d.ts.map +1 -1
  44. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/BrowserContext.js +5 -2
  45. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/BrowserContext.js.map +1 -1
  46. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.d.ts +2 -2
  47. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.d.ts.map +1 -1
  48. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.js +3 -1
  49. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.js.map +1 -1
  50. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Realm.d.ts +1 -12
  51. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Realm.d.ts.map +1 -1
  52. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Accessibility.d.ts +6 -0
  53. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Accessibility.d.ts.map +1 -1
  54. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Accessibility.js +1 -0
  55. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Accessibility.js.map +1 -1
  56. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.d.ts +2 -2
  57. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.d.ts.map +1 -1
  58. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.js +6 -1
  59. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.js.map +1 -1
  60. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BrowserContext.d.ts +2 -1
  61. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BrowserContext.d.ts.map +1 -1
  62. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BrowserContext.js +2 -2
  63. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BrowserContext.js.map +1 -1
  64. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.d.ts +2 -2
  65. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.d.ts.map +1 -1
  66. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.js +3 -1
  67. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.js.map +1 -1
  68. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/injected.d.ts +1 -1
  69. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.d.ts +3 -3
  70. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js +3 -3
  71. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js.map +1 -1
  72. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/Mutex.d.ts +2 -2
  73. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/disposable.d.ts +2 -2
  74. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/disposable.d.ts.map +1 -1
  75. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/disposable.js +3 -1
  76. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/disposable.js.map +1 -1
  77. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/util.d.ts +1 -0
  78. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/util.d.ts.map +1 -1
  79. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/util.js +1 -0
  80. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/util.js.map +1 -1
  81. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/version.d.ts +1 -1
  82. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/version.js +1 -1
  83. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.d.ts +28 -3
  84. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +21 -10
  85. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.d.ts +9 -1
  86. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.d.ts.map +1 -1
  87. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.js.map +1 -1
  88. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/BrowserContext.d.ts +2 -2
  89. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/BrowserContext.d.ts.map +1 -1
  90. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/BrowserContext.js.map +1 -1
  91. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Input.d.ts +1 -1
  92. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Input.d.ts.map +1 -1
  93. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.d.ts +13 -1
  94. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.d.ts.map +1 -1
  95. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.js.map +1 -1
  96. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/BrowserContext.d.ts +2 -2
  97. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/BrowserContext.d.ts.map +1 -1
  98. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/BrowserContext.js +5 -2
  99. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/BrowserContext.js.map +1 -1
  100. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.d.ts +2 -2
  101. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.d.ts.map +1 -1
  102. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.js +3 -1
  103. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.js.map +1 -1
  104. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Realm.d.ts +1 -12
  105. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Realm.d.ts.map +1 -1
  106. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Accessibility.d.ts +6 -0
  107. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Accessibility.d.ts.map +1 -1
  108. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Accessibility.js +1 -0
  109. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Accessibility.js.map +1 -1
  110. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.d.ts +2 -2
  111. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.d.ts.map +1 -1
  112. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.js +6 -1
  113. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.js.map +1 -1
  114. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BrowserContext.d.ts +2 -1
  115. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BrowserContext.d.ts.map +1 -1
  116. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BrowserContext.js +2 -2
  117. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BrowserContext.js.map +1 -1
  118. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.d.ts +2 -2
  119. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.d.ts.map +1 -1
  120. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.js +3 -1
  121. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.js.map +1 -1
  122. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.d.ts +3 -3
  123. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js +3 -3
  124. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js.map +1 -1
  125. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/disposable.d.ts +2 -2
  126. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/disposable.d.ts.map +1 -1
  127. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/disposable.js +2 -2
  128. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/disposable.js.map +1 -1
  129. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/util.d.ts +1 -0
  130. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/util.d.ts.map +1 -1
  131. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/util.js +1 -0
  132. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/util.js.map +1 -1
  133. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/version.d.ts +1 -1
  134. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/version.js +1 -1
  135. package/front_end/third_party/puppeteer/package/lib/types.d.ts +28 -3
  136. package/front_end/third_party/puppeteer/package/package.json +2 -2
  137. package/front_end/third_party/puppeteer/package/src/api/Browser.ts +13 -1
  138. package/front_end/third_party/puppeteer/package/src/api/BrowserContext.ts +7 -2
  139. package/front_end/third_party/puppeteer/package/src/api/Page.ts +14 -1
  140. package/front_end/third_party/puppeteer/package/src/bidi/BrowserContext.ts +8 -5
  141. package/front_end/third_party/puppeteer/package/src/bidi/Page.ts +5 -2
  142. package/front_end/third_party/puppeteer/package/src/cdp/Accessibility.ts +8 -0
  143. package/front_end/third_party/puppeteer/package/src/cdp/Browser.ts +11 -2
  144. package/front_end/third_party/puppeteer/package/src/cdp/BrowserContext.ts +3 -2
  145. package/front_end/third_party/puppeteer/package/src/cdp/Page.ts +5 -5
  146. package/front_end/third_party/puppeteer/package/src/revisions.ts +3 -3
  147. package/front_end/third_party/puppeteer/package/src/util/disposable.ts +2 -2
  148. package/front_end/third_party/puppeteer/package/src/util/util.ts +1 -0
  149. package/front_end/third_party/puppeteer/package/src/util/version.ts +1 -1
  150. package/front_end/ui/components/text_editor/AiCodeCompletionProvider.ts +280 -0
  151. package/front_end/ui/components/text_editor/text_editor.ts +1 -0
  152. package/front_end/ui/components/tooltips/Tooltip.ts +1 -1
  153. package/front_end/ui/legacy/Dialog.ts +0 -1
  154. package/front_end/ui/legacy/SettingsUI.ts +0 -14
  155. package/front_end/ui/legacy/XLink.ts +0 -3
  156. package/front_end/ui/legacy/components/data_grid/DataGridElement.ts +9 -0
  157. package/front_end/ui/legacy/components/utils/Linkifier.ts +9 -3
  158. package/front_end/ui/visual_logging/KnownContextValues.ts +1 -1
  159. package/mcp/mcp.ts +5 -0
  160. package/package.json +1 -1
  161. package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatterBounds.snapshot.txt +0 -4
  162. package/front_end/ui/components/docs/breadcrumbs_perf/initial-breadcrumb-perf.html +0 -20
  163. package/front_end/ui/components/docs/breadcrumbs_perf/initial-breadcrumb-perf.ts +0 -25
  164. package/front_end/ui/components/docs/breadcrumbs_perf/nested-breadcrumbs-perf.html +0 -20
  165. package/front_end/ui/components/docs/breadcrumbs_perf/nested-breadcrumbs-perf.ts +0 -36
@@ -4,185 +4,188 @@
4
4
  * found in the LICENSE file.
5
5
  */
6
6
 
7
- * {
8
- box-sizing: border-box;
9
- }
10
-
11
- :host {
12
- container-type: inline-size;
13
- container-name: ai-settings;
14
- }
7
+ @scope to (devtools-widget > *){
8
+ .ai-settings-container {
9
+ container-type: inline-size;
10
+ container-name: ai-settings;
11
+
12
+ @container ai-settings (min-width: 480px) {
13
+ .settings-container-wrapper {
14
+ align-items: center;
15
+ }
16
+ }
17
+ }
15
18
 
16
- .shared-disclaimer {
17
- background: linear-gradient(135deg, var(--sys-color-gradient-primary), var(--sys-color-gradient-tertiary));
18
- border-radius: var(--sys-size-5);
19
- padding: var(--sys-size-9) var(--sys-size-11);
20
- max-width: var(--sys-size-35);
21
- min-width: var(--sys-size-28);
19
+ * {
20
+ box-sizing: border-box;
21
+ min-height: auto;
22
+ }
22
23
 
23
- h2 {
24
- font: var(--sys-typescale-headline5);
25
- margin: 0 0 var(--sys-size-6);
24
+ .shared-disclaimer {
25
+ background: linear-gradient(135deg, var(--sys-color-gradient-primary), var(--sys-color-gradient-tertiary));
26
+ border-radius: var(--sys-size-5);
27
+ padding: var(--sys-size-9) var(--sys-size-11);
28
+ max-width: var(--sys-size-35);
29
+ min-width: var(--sys-size-28);
30
+
31
+ h2 {
32
+ font: var(--sys-typescale-headline5);
33
+ margin: 0 0 var(--sys-size-6);
34
+ }
26
35
  }
27
- }
28
36
 
29
- .disclaimer-list-header {
30
- font: var(--sys-typescale-body5-medium);
31
- margin: 0;
32
- }
37
+ .disclaimer-list-header {
38
+ font: var(--sys-typescale-body5-medium);
39
+ margin: 0;
40
+ }
33
41
 
34
- .disclaimer-list {
35
- padding: var(--sys-size-6) 0 0;
36
- display: grid;
37
- grid-template-columns: var(--sys-size-12) auto;
38
- gap: var(--sys-size-6) 0;
39
- line-height: var(--sys-typescale-body5-line-height);
40
- }
42
+ .disclaimer-list {
43
+ padding: var(--sys-size-6) 0 0;
44
+ display: grid;
45
+ grid-template-columns: var(--sys-size-12) auto;
46
+ gap: var(--sys-size-6) 0;
47
+ line-height: var(--sys-typescale-body5-line-height);
48
+ }
41
49
 
42
- .settings-container {
43
- display: grid;
44
- grid-template-columns: 1fr auto auto;
45
- border-radius: var(--sys-size-5);
46
- box-shadow: var(--sys-elevation-level2);
47
- margin: var(--sys-size-11) 0 var(--sys-size-4);
48
- line-height: var(--sys-typescale-body5-line-height);
49
- min-width: var(--sys-size-28);
50
- max-width: var(--sys-size-35);
51
- background-color: var(--app-color-card-background);
52
- }
50
+ .settings-container {
51
+ display: grid;
52
+ grid-template-columns: 1fr auto auto;
53
+ border-radius: var(--sys-size-5);
54
+ box-shadow: var(--sys-elevation-level2);
55
+ margin: var(--sys-size-11) 0 var(--sys-size-4);
56
+ line-height: var(--sys-typescale-body5-line-height);
57
+ min-width: var(--sys-size-28);
58
+ max-width: var(--sys-size-35);
59
+ background-color: var(--app-color-card-background);
60
+ }
53
61
 
54
- .accordion-header {
55
- display: grid;
56
- grid-template-columns: auto 1fr auto;
62
+ .accordion-header {
63
+ display: grid;
64
+ grid-template-columns: auto 1fr auto;
57
65
 
58
- &:hover {
59
- background-color: var(--sys-color-state-hover-on-subtle);
66
+ &:hover {
67
+ background-color: var(--sys-color-state-hover-on-subtle);
68
+ }
60
69
  }
61
- }
62
70
 
63
- .icon-container,
64
- .dropdown {
65
- padding: 0 var(--sys-size-8);
66
- }
71
+ .icon-container,
72
+ .dropdown {
73
+ padding: 0 var(--sys-size-8);
74
+ }
67
75
 
68
- .toggle-container {
69
- padding: 0 var(--sys-size-8) 0 var(--sys-size-9);
76
+ .toggle-container {
77
+ padding: 0 var(--sys-size-8) 0 var(--sys-size-9);
70
78
 
71
- &:hover {
72
- background-color: var(--sys-color-state-hover-on-subtle);
79
+ &:hover {
80
+ background-color: var(--sys-color-state-hover-on-subtle);
81
+ }
73
82
  }
74
- }
75
83
 
76
- .expansion-grid {
77
- padding: var(--sys-size-4) var(--sys-size-8) var(--sys-size-6);
78
- display: grid;
79
- grid-template-columns: var(--sys-size-9) auto;
80
- gap: var(--sys-size-6) var(--sys-size-8);
81
- line-height: var(--sys-typescale-body5-line-height);
82
- color: var(--sys-color-on-surface-subtle);
83
- }
84
+ .expansion-grid {
85
+ padding: var(--sys-size-4) var(--sys-size-8) var(--sys-size-6);
86
+ display: grid;
87
+ grid-template-columns: var(--sys-size-9) auto;
88
+ gap: var(--sys-size-6) var(--sys-size-8);
89
+ line-height: var(--sys-typescale-body5-line-height);
90
+ color: var(--sys-color-on-surface-subtle);
91
+ }
84
92
 
85
- .expansion-grid-whole-row {
86
- grid-column: span 2;
87
- font-weight: var(--ref-typeface-weight-medium);
88
- color: var(--sys-color-on-surface);
89
- padding-top: var(--sys-size-4);
90
- margin: 0;
91
- font-size: inherit;
92
- }
93
+ .expansion-grid-whole-row {
94
+ grid-column: span 2;
95
+ font-weight: var(--ref-typeface-weight-medium);
96
+ color: var(--sys-color-on-surface);
97
+ padding-top: var(--sys-size-4);
98
+ margin: 0;
99
+ font-size: inherit;
100
+ }
93
101
 
94
- .setting-description {
95
- color: var(--sys-color-on-surface-subtle);
96
- }
102
+ .setting-description {
103
+ color: var(--sys-color-on-surface-subtle);
104
+ }
97
105
 
98
- .centered {
99
- display: grid;
100
- place-content: center;
101
- }
106
+ .centered {
107
+ display: grid;
108
+ place-content: center;
109
+ }
102
110
 
103
- .setting-card {
104
- padding: var(--sys-size-6) 0;
111
+ .setting-card {
112
+ padding: var(--sys-size-6) 0;
105
113
 
106
- h2 {
107
- margin: 0;
108
- font: inherit;
114
+ h2 {
115
+ margin: 0;
116
+ font: inherit;
117
+ }
109
118
  }
110
- }
111
119
 
112
- .divider {
113
- margin: var(--sys-size-5) 0;
114
- border-left: var(--sys-size-1) solid var(--sys-color-divider);
115
- }
116
-
117
- .accordion-header ~ .accordion-header,
118
- .divider ~ .divider,
119
- .toggle-container ~ .toggle-container {
120
- border-top: var(--sys-size-1) solid var(--sys-color-divider);
121
- }
120
+ .divider {
121
+ margin: var(--sys-size-5) 0;
122
+ border-left: var(--sys-size-1) solid var(--sys-color-divider);
123
+ }
122
124
 
123
- .whole-row {
124
- grid-column: span 5;
125
- overflow: hidden;
126
- display: grid;
127
- grid-template-rows: 0fr;
128
- transition: grid-template-rows var(--sys-motion-duration-short4) ease-in;
129
- }
125
+ .accordion-header ~ .accordion-header,
126
+ .divider ~ .divider,
127
+ .toggle-container ~ .toggle-container {
128
+ border-top: var(--sys-size-1) solid var(--sys-color-divider);
129
+ }
130
130
 
131
- .whole-row.open {
132
- grid-template-rows: 1fr;
133
- }
131
+ .whole-row {
132
+ grid-column: span 5;
133
+ overflow: hidden;
134
+ display: grid;
135
+ grid-template-rows: 0fr;
136
+ transition: grid-template-rows var(--sys-motion-duration-short4) ease-in;
137
+ }
134
138
 
135
- .overflow-hidden {
136
- overflow: hidden;
137
- }
139
+ .whole-row.open {
140
+ grid-template-rows: 1fr;
141
+ }
138
142
 
139
- .link,
140
- .devtools-link {
141
- color: var(--sys-color-primary);
142
- text-decoration: underline;
143
- cursor: pointer;
144
- outline-offset: var(--sys-size-2);
145
- padding: 0;
146
- font-weight: var(--ref-typeface-weight-regular);
147
- }
143
+ .overflow-hidden {
144
+ overflow: hidden;
145
+ }
148
146
 
149
- .padded {
150
- padding: var(--sys-size-2) 0;
151
- }
147
+ .link,
148
+ .devtools-link {
149
+ color: var(--sys-color-primary);
150
+ text-decoration: underline;
151
+ cursor: pointer;
152
+ outline-offset: var(--sys-size-2);
153
+ padding: 0;
154
+ font-weight: var(--ref-typeface-weight-regular);
155
+ }
152
156
 
153
- .settings-container-wrapper {
154
- position: absolute;
155
- inset: var(--sys-size-8) 0 0;
156
- overflow: auto;
157
- padding: var(--sys-size-3) var(--sys-size-6) var(--sys-size-6);
158
- display: flex;
159
- flex-direction: column;
160
- }
157
+ .padded {
158
+ padding: var(--sys-size-2) 0;
159
+ }
161
160
 
162
- @container ai-settings (min-width: 480px) {
163
161
  .settings-container-wrapper {
164
- align-items: center;
162
+ position: absolute;
163
+ inset: var(--sys-size-8) 0 0;
164
+ overflow: auto;
165
+ padding: var(--sys-size-3) var(--sys-size-6) var(--sys-size-6);
166
+ display: flex;
167
+ flex-direction: column;
165
168
  }
166
- }
167
169
 
168
- header {
169
- font-size: var(--sys-typescale-headline3-size);
170
- font-weight: var(--ref-typeface-weight-regular);
171
- }
170
+ header {
171
+ font-size: var(--sys-typescale-headline3-size);
172
+ font-weight: var(--ref-typeface-weight-regular);
173
+ }
172
174
 
173
- .disabled-explainer {
174
- background-color: var(--sys-color-surface-yellow);
175
- border-radius: var(--sys-shape-corner-medium-small);
176
- margin-top: var(--sys-size-11);
177
- padding: var(--sys-size-6) var(--sys-size-11) var(--sys-size-8);
178
- width: 100%;
179
- max-width: var(--sys-size-35);
180
- min-width: var(--sys-size-28);
181
- color: var(--sys-color-yellow);
182
- }
175
+ .disabled-explainer {
176
+ background-color: var(--sys-color-surface-yellow);
177
+ border-radius: var(--sys-shape-corner-medium-small);
178
+ margin-top: var(--sys-size-11);
179
+ padding: var(--sys-size-6) var(--sys-size-11) var(--sys-size-8);
180
+ width: 100%;
181
+ max-width: var(--sys-size-35);
182
+ min-width: var(--sys-size-28);
183
+ color: var(--sys-color-yellow);
184
+ }
183
185
 
184
- .disabled-explainer-row {
185
- display: flex;
186
- gap: var(--sys-size-6);
187
- margin-top: var(--sys-size-4);
186
+ .disabled-explainer-row {
187
+ display: flex;
188
+ gap: var(--sys-size-6);
189
+ margin-top: var(--sys-size-4);
190
+ }
188
191
  }
@@ -7,7 +7,6 @@ import './emulation/emulation-meta.js';
7
7
  import * as Common from '../../core/common/common.js';
8
8
  import * as i18n from '../../core/i18n/i18n.js';
9
9
  import * as Root from '../../core/root/root.js';
10
- import * as LegacyWrapper from '../../ui/components/legacy_wrapper/legacy_wrapper.js';
11
10
  import * as UI from '../../ui/legacy/legacy.js';
12
11
 
13
12
  import type * as Settings from './settings.js';
@@ -117,7 +116,7 @@ UI.ViewManager.registerViewExtension({
117
116
  order: 2,
118
117
  async loadView() {
119
118
  const Settings = await loadSettingsModule();
120
- return LegacyWrapper.LegacyWrapper.legacyWrapper(UI.Widget.VBox, new Settings.AISettingsTab.AISettingsTab());
119
+ return new Settings.AISettingsTab.AISettingsTab();
121
120
  },
122
121
  iconName: 'button-magic',
123
122
  settings: ['console-insights-enabled'],
@@ -6,7 +6,7 @@ import * as i18n from '../../core/i18n/i18n.js';
6
6
  import type * as Platform from '../../core/platform/platform.js';
7
7
  import * as Buttons from '../../ui/components/buttons/buttons.js';
8
8
  import * as UI from '../../ui/legacy/legacy.js';
9
- import {Directives, html, render} from '../../ui/lit/lit.js';
9
+ import {html, render} from '../../ui/lit/lit.js';
10
10
  import * as VisualLogging from '../../ui/visual_logging/visual_logging.js';
11
11
 
12
12
  import dialogStyles from './dialog.css.js';
@@ -27,28 +27,29 @@ const UIStrings = {
27
27
  } as const;
28
28
  const str_ = i18n.i18n.registerUIStrings('panels/sources/AddSourceMapURLDialog.ts', UIStrings);
29
29
  const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
30
- const {ref} = Directives;
31
30
 
32
31
  interface ViewInput {
33
32
  label: Platform.UIString.LocalizedString;
34
- onKeyDown: (event: KeyboardEvent) => void;
33
+ onEnter: (value: string) => void;
34
+ onInputChange: (value: string) => void;
35
35
  apply: () => void;
36
36
  }
37
37
 
38
- interface ViewOutput {
39
- input: HTMLInputElement;
40
- }
41
-
42
- type View = (input: ViewInput, output: ViewOutput, target: HTMLElement) => void;
38
+ type View = (input: ViewInput, output: undefined, target: HTMLElement) => void;
43
39
 
44
- export const DEFAULT_VIEW: View = (input, output, target) => {
40
+ export const DEFAULT_VIEW: View = (input, _output, target) => {
45
41
  // clang-format off
46
42
  render(html`
47
43
  <style>${dialogStyles}</style>
48
44
  <label>${input.label}</label>
49
45
  <input class="harmony-input add-source-map" spellcheck="false" type="text"
50
46
  jslog=${VisualLogging.textField('url').track({keydown: 'Enter', change: true})}
51
- @keydown=${input.onKeyDown} ${ref(e => { output.input = e as HTMLInputElement; })}>
47
+ @keydown=${(e: KeyboardEvent) => { if (e.key === 'Enter') {
48
+ e.consume(true);
49
+ input.onEnter((e.target as HTMLInputElement).value); }
50
+ }}
51
+ @change=${(e: Event) => input.onInputChange((e.target as HTMLInputElement).value)}
52
+ autofocus>
52
53
  <devtools-button @click=${input.apply} .jslogContext=${'add'}
53
54
  .variant=${Buttons.Button.Variant.OUTLINED}>${i18nString(UIStrings.add)}</devtools-button>`,
54
55
  target);
@@ -56,7 +57,7 @@ export const DEFAULT_VIEW: View = (input, output, target) => {
56
57
  };
57
58
 
58
59
  export class AddDebugInfoURLDialog extends UI.Widget.HBox {
59
- private input!: HTMLInputElement;
60
+ private url = '';
60
61
  private readonly dialog: UI.Dialog.Dialog;
61
62
  private readonly callback: (arg0: Platform.DevToolsPath.UrlString) => void;
62
63
  private constructor(
@@ -66,20 +67,14 @@ export class AddDebugInfoURLDialog extends UI.Widget.HBox {
66
67
 
67
68
  const viewInput = {
68
69
  label,
69
- onKeyDown: this.onKeyDown.bind(this),
70
+ onEnter: this.onEnter.bind(this),
71
+ onInputChange: this.onInputChange.bind(this),
70
72
  apply: this.apply.bind(this),
71
73
  };
72
- const that = this;
73
- const viewOutput = {
74
- set input(input: HTMLInputElement) {
75
- that.input = input;
76
- },
77
- };
78
- view(viewInput, viewOutput, this.contentElement);
74
+ view(viewInput, undefined, this.contentElement);
79
75
 
80
76
  this.dialog = new UI.Dialog.Dialog(jslogContext);
81
77
  this.dialog.setSizeBehavior(UI.GlassPane.SizeBehavior.MEASURE_CONTENT);
82
- this.dialog.setDefaultFocusedElement(this.input);
83
78
 
84
79
  this.callback = callback;
85
80
  }
@@ -103,14 +98,16 @@ export class AddDebugInfoURLDialog extends UI.Widget.HBox {
103
98
  this.callback(value);
104
99
  }
105
100
 
101
+ private onInputChange(value: string): void {
102
+ this.url = value;
103
+ }
104
+
106
105
  private apply(): void {
107
- this.done(this.input.value as Platform.DevToolsPath.UrlString);
106
+ this.done(this.url as Platform.DevToolsPath.UrlString);
108
107
  }
109
108
 
110
- private onKeyDown(event: KeyboardEvent): void {
111
- if (event.key === 'Enter') {
112
- event.consume(true);
113
- this.apply();
114
- }
109
+ private onEnter(value: string): void {
110
+ this.url = value;
111
+ this.apply();
115
112
  }
116
113
  }
@@ -42,7 +42,7 @@ import * as i18n from '../../core/i18n/i18n.js';
42
42
  import * as Platform from '../../core/platform/platform.js';
43
43
  import * as Root from '../../core/root/root.js';
44
44
  import * as SDK from '../../core/sdk/sdk.js';
45
- import type * as Protocol from '../../generated/protocol.js';
45
+ import * as Protocol from '../../generated/protocol.js';
46
46
  import * as AiAssistanceModel from '../../models/ai_assistance/ai_assistance.js';
47
47
  import * as Badges from '../../models/badges/badges.js';
48
48
  import * as CrUXManager from '../../models/crux-manager/crux-manager.js';
@@ -1364,7 +1364,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
1364
1364
  }
1365
1365
 
1366
1366
  async saveToFile(config: {
1367
- includeScriptContent: boolean,
1367
+ includeResourceContent: boolean,
1368
1368
  includeSourceMaps: boolean,
1369
1369
  /**
1370
1370
  * Includes many things:
@@ -1399,9 +1399,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
1399
1399
  if (Trace.Types.Events.isAnyScriptSourceEvent(event) && event.name !== 'StubScriptCatchup') {
1400
1400
  const mappedScript = scriptByIdMap.get(`${event.args.data.isolate}.${event.args.data.scriptId}`);
1401
1401
 
1402
- // If the checkbox to include script content is not checked or if it comes from and
1403
- // extension we dont include the script content.
1404
- if (!config.includeScriptContent ||
1402
+ if (!config.includeResourceContent ||
1405
1403
  (mappedScript?.url && Trace.Helpers.Trace.isExtensionUrl(mappedScript.url))) {
1406
1404
  return {
1407
1405
  cat: event.cat,
@@ -1434,7 +1432,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
1434
1432
 
1435
1433
  try {
1436
1434
  await this.innerSaveToFile(traceEvents, metadata, {
1437
- includeScriptContent: config.includeScriptContent,
1435
+ includeResourceContent: config.includeResourceContent,
1438
1436
  includeSourceMaps: config.includeSourceMaps,
1439
1437
  addModifications: config.addModifications,
1440
1438
  shouldCompress: config.shouldCompress,
@@ -1454,7 +1452,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
1454
1452
  }
1455
1453
 
1456
1454
  async innerSaveToFile(traceEvents: readonly Trace.Types.Events.Event[], metadata: Trace.Types.File.MetaData, config: {
1457
- includeScriptContent: boolean,
1455
+ includeResourceContent: boolean,
1458
1456
  includeSourceMaps: boolean,
1459
1457
  addModifications: boolean,
1460
1458
  shouldCompress: boolean,
@@ -1464,9 +1462,9 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
1464
1462
  Platform.DateUtilities.toISO8601Compact(metadata.startTime ? new Date(metadata.startTime) : new Date());
1465
1463
 
1466
1464
  const isCpuProfile = metadata.dataOrigin === Trace.Types.File.DataOrigin.CPU_PROFILE;
1467
- const {includeScriptContent, includeSourceMaps} = config;
1465
+ const {includeResourceContent, includeSourceMaps} = config;
1468
1466
  metadata.enhancedTraceVersion =
1469
- includeScriptContent ? SDK.EnhancedTracesParser.EnhancedTracesParser.enhancedTraceVersion : undefined;
1467
+ includeResourceContent ? SDK.EnhancedTracesParser.EnhancedTracesParser.enhancedTraceVersion : undefined;
1470
1468
 
1471
1469
  let fileName =
1472
1470
  (isCpuProfile ? `CPU-${isoDate}.cpuprofile` : `Trace-${isoDate}.json`) as Platform.DevToolsPath.RawPathString;
@@ -1477,10 +1475,12 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
1477
1475
  blobParts = [JSON.stringify(profile)];
1478
1476
  } else {
1479
1477
  const filteredMetadataSourceMaps =
1480
- includeScriptContent && includeSourceMaps ? this.#filterMetadataSourceMaps(metadata) : undefined;
1478
+ includeResourceContent && includeSourceMaps ? this.#filterMetadataSourceMaps(metadata) : undefined;
1479
+ const filteredResources = includeResourceContent ? this.#filterMetadataResoures(metadata) : undefined;
1481
1480
  const formattedTraceIter = traceJsonGenerator(traceEvents, {
1482
1481
  ...metadata,
1483
1482
  sourceMaps: filteredMetadataSourceMaps,
1483
+ resources: filteredResources,
1484
1484
  });
1485
1485
  blobParts = Array.from(formattedTraceIter);
1486
1486
  }
@@ -1531,7 +1531,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
1531
1531
  this.saveButton.element as TimelineComponents.ExportTraceOptions.ExportTraceOptions;
1532
1532
  const state = exportTraceOptionsElement.state;
1533
1533
  await this.saveToFile({
1534
- includeScriptContent: state.includeScriptContent,
1534
+ includeResourceContent: state.includeResourceContent,
1535
1535
  includeSourceMaps: state.includeSourceMaps,
1536
1536
  addModifications: state.includeAnnotations,
1537
1537
  shouldCompress: state.shouldCompress,
@@ -1550,6 +1550,14 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
1550
1550
  });
1551
1551
  }
1552
1552
 
1553
+ #filterMetadataResoures(metadata: Trace.Types.File.MetaData): Trace.Types.File.MetadataResource[]|undefined {
1554
+ if (!metadata.resources) {
1555
+ return undefined;
1556
+ }
1557
+
1558
+ return metadata.resources;
1559
+ }
1560
+
1553
1561
  #showExportTraceErrorDialog(error: Error): void {
1554
1562
  if (this.statusDialog) {
1555
1563
  this.statusDialog.remove();
@@ -2744,6 +2752,45 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
2744
2752
  };
2745
2753
  }
2746
2754
 
2755
+ async #retainResourceContentsForEnhancedTrace(
2756
+ parsedTrace: Trace.TraceModel.ParsedTrace, metadata: Trace.Types.File.MetaData): Promise<void> {
2757
+ // Scripts are already stored as trace events.
2758
+ const resourceTypesToRetain =
2759
+ new Set([Protocol.Network.ResourceType.Document, Protocol.Network.ResourceType.Stylesheet]);
2760
+
2761
+ for (const request of parsedTrace.data.NetworkRequests.byId.values()) {
2762
+ if (!resourceTypesToRetain.has(request.args.data.resourceType)) {
2763
+ continue;
2764
+ }
2765
+
2766
+ const url = request.args.data.url as Platform.DevToolsPath.UrlString;
2767
+ const resource = SDK.ResourceTreeModel.ResourceTreeModel.resourceForURL(url);
2768
+ if (!resource) {
2769
+ continue;
2770
+ }
2771
+
2772
+ const content = await resource.requestContentData();
2773
+ if ('error' in content) {
2774
+ continue;
2775
+ }
2776
+
2777
+ if (!content.isTextContent) {
2778
+ continue;
2779
+ }
2780
+
2781
+ if (!metadata.resources) {
2782
+ metadata.resources = [];
2783
+ }
2784
+
2785
+ metadata.resources.push({
2786
+ url,
2787
+ frame: resource.frameId ?? '',
2788
+ content: content.text,
2789
+ mimeType: content.mimeType,
2790
+ });
2791
+ }
2792
+ }
2793
+
2747
2794
  async #executeNewTrace(
2748
2795
  collectedEvents: Trace.Types.Events.Event[], isFreshRecording: boolean,
2749
2796
  metadata: Trace.Types.File.MetaData|null): Promise<void> {
@@ -2772,11 +2819,13 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
2772
2819
 
2773
2820
  // Store all source maps on the trace metadata.
2774
2821
  // If not fresh, we can't validate the maps are still accurate.
2822
+ // Also handle HTML content.
2775
2823
  if (isFreshRecording && metadata) {
2776
2824
  const traceIndex = this.#traceEngineModel.lastTraceIndex();
2777
2825
  const parsedTrace = this.#traceEngineModel.parsedTrace(traceIndex);
2778
2826
  if (parsedTrace) {
2779
2827
  await this.#retainSourceMapsForEnhancedTrace(parsedTrace, metadata);
2828
+ await this.#retainResourceContentsForEnhancedTrace(parsedTrace, metadata);
2780
2829
  }
2781
2830
  }
2782
2831
  }