chrome-devtools-frontend 1.0.1667564 → 1.0.1669021

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (211) hide show
  1. package/.agents/skills/devtools-ci/SKILL.md +65 -0
  2. package/.agents/skills/devtools-setting-migration/SKILL.md +290 -0
  3. package/.agents/skills/gerrit-cli/SKILL.md +59 -0
  4. package/.agents/skills/gerrit-cli/references/commands.md +93 -0
  5. package/.agents/skills/gerrit-cli/references/workflows.md +56 -0
  6. package/.agents/skills/gerrit-cli/scripts/gerrit_client_wrapper.py +47 -0
  7. package/.agents/skills/gerrit-cli/scripts/import_upstream.py +230 -0
  8. package/.agents/skills/ui-eng-vision-widget-promoter/SKILL.md +11 -4
  9. package/.agents/skills/ui-widgets/SKILL.md +25 -1
  10. package/docs/contributing/infrastructure.md +7 -1
  11. package/docs/ui_engineering.md +44 -1
  12. package/front_end/core/common/Settings.ts +11 -4
  13. package/front_end/core/host/AidaClient.ts +66 -47
  14. package/front_end/core/host/GcaClient.ts +4 -6
  15. package/front_end/core/host/ResourceLoader.ts +4 -2
  16. package/front_end/core/root/Runtime.ts +5 -5
  17. package/front_end/core/sdk/CSSModel.test.api.ts +102 -0
  18. package/front_end/core/sdk/CSSModel.ts +3 -2
  19. package/front_end/core/sdk/ConsoleModel.ts +3 -2
  20. package/front_end/core/sdk/DebuggerModel.ts +16 -7
  21. package/front_end/core/sdk/SDKSettings.ts +38 -0
  22. package/front_end/core/sdk/sdk-meta.ts +0 -120
  23. package/front_end/core/sdk/sdk.ts +2 -0
  24. package/front_end/entrypoints/main/MainImpl.ts +10 -3
  25. package/front_end/foundation/Universe.ts +7 -0
  26. package/front_end/generated/InspectorBackendCommands.ts +2 -2
  27. package/front_end/generated/protocol.ts +11 -3
  28. package/front_end/models/ai_assistance/AiAgent2.ts +1 -1
  29. package/front_end/models/ai_assistance/AiUtils.ts +67 -4
  30. package/front_end/models/ai_assistance/BuiltInAi.ts +11 -6
  31. package/front_end/models/ai_assistance/ChangeManager.ts +17 -1
  32. package/front_end/models/ai_assistance/StorageItem.ts +26 -5
  33. package/front_end/models/ai_code_completion/AiCodeCompletion.ts +2 -19
  34. package/front_end/models/ai_code_generation/AiCodeGeneration.ts +2 -3
  35. package/front_end/models/javascript_metadata/NativeFunctions.js +22 -9
  36. package/front_end/models/source_map_scopes/NamesResolver.ts +23 -17
  37. package/front_end/models/trace/handlers/RendererHandler.ts +20 -4
  38. package/front_end/models/trace/types/File.ts +1 -0
  39. package/front_end/models/workspace/UISourceCode.ts +0 -10
  40. package/front_end/panels/ai_assistance/AiAssistancePanel.ts +61 -182
  41. package/front_end/panels/ai_assistance/components/ChatInput.ts +25 -8
  42. package/front_end/panels/ai_assistance/components/ChatMessage.ts +13 -69
  43. package/front_end/panels/ai_assistance/components/ChatView.ts +14 -8
  44. package/front_end/panels/ai_assistance/components/chatMessage.css +2 -20
  45. package/front_end/panels/application/ApplicationPanelSidebar.ts +2 -2
  46. package/front_end/panels/application/ApplicationPanelTreeElement.ts +41 -3
  47. package/front_end/panels/application/ServiceWorkerUpdateCycleView.ts +131 -134
  48. package/front_end/panels/application/ServiceWorkersView.ts +8 -8
  49. package/front_end/panels/application/application.ts +2 -0
  50. package/front_end/panels/application/components/AdsView.ts +10 -6
  51. package/front_end/panels/application/preloading/PreloadingView.ts +53 -45
  52. package/front_end/panels/application/preloading/components/PreloadingDetailsReportView.ts +111 -119
  53. package/front_end/panels/application/preloading/components/preloadingDetailsReportView.css +22 -24
  54. package/front_end/panels/application/serviceWorkerUpdateCycleView.css +105 -102
  55. package/front_end/panels/common/AiCodeCompletionDisclaimer.ts +107 -96
  56. package/front_end/panels/common/AiCodeCompletionSummaryToolbar.ts +17 -19
  57. package/front_end/panels/common/AiCodeCompletionTeaser.ts +6 -6
  58. package/front_end/panels/common/AiCodeGenerationTeaser.ts +28 -26
  59. package/front_end/panels/common/common.ts +1 -1
  60. package/front_end/panels/console/ConsoleInsightTeaser.ts +6 -8
  61. package/front_end/panels/console/ConsoleView.ts +6 -4
  62. package/front_end/panels/console/ConsoleViewMessage.ts +1 -1
  63. package/front_end/panels/console/console-meta.ts +28 -0
  64. package/front_end/panels/elements/StylesAiCodeCompletionProvider.ts +1 -1
  65. package/front_end/panels/elements/StylesSidebarPane.ts +3 -2
  66. package/front_end/panels/emulation/DeviceModeToolbar.ts +2 -2
  67. package/front_end/panels/emulation/DeviceModeView.ts +63 -104
  68. package/front_end/panels/emulation/DeviceModeWrapper.ts +18 -4
  69. package/front_end/panels/explain/components/ConsoleInsight.ts +4 -6
  70. package/front_end/panels/explain/explain-meta.ts +7 -49
  71. package/front_end/panels/network/NetworkDataGridNode.ts +1 -1
  72. package/front_end/panels/network/NetworkLogView.ts +1 -0
  73. package/front_end/panels/network/OriginalResourceChunkView.ts +340 -0
  74. package/front_end/panels/network/ResourceChunkView.ts +72 -46
  75. package/front_end/panels/network/ResourceDirectSocketChunkView.ts +3 -2
  76. package/front_end/panels/network/ResourceWebSocketFrameView.ts +3 -3
  77. package/front_end/panels/network/originalResourceChunkView.css +49 -0
  78. package/front_end/panels/screencast/ScreencastView.ts +401 -260
  79. package/front_end/panels/screencast/screencastView.css +113 -100
  80. package/front_end/panels/sensors/LocationsSettingsTab.ts +329 -135
  81. package/front_end/panels/sensors/locationsSettingsTab.css +78 -4
  82. package/front_end/panels/settings/AISettingsTab.ts +17 -100
  83. package/front_end/panels/snippets/ScriptSnippetFileSystem.ts +2 -2
  84. package/front_end/panels/snippets/SnippetsQuickOpen.ts +4 -4
  85. package/front_end/panels/sources/AddSourceMapURLDialog.ts +3 -3
  86. package/front_end/panels/sources/AiCodeCompletionPlugin.ts +4 -3
  87. package/front_end/panels/sources/BreakpointEditDialog.ts +14 -14
  88. package/front_end/panels/sources/BreakpointsView.ts +14 -14
  89. package/front_end/panels/sources/CallStackSidebarPane.ts +6 -6
  90. package/front_end/panels/sources/CategorizedBreakpointL10n.ts +18 -18
  91. package/front_end/panels/sources/CoveragePlugin.ts +7 -7
  92. package/front_end/panels/sources/DebuggerPausedMessage.ts +23 -23
  93. package/front_end/panels/sources/DebuggerPlugin.ts +31 -31
  94. package/front_end/panels/sources/FilteredUISourceCodeListProvider.ts +2 -2
  95. package/front_end/panels/sources/GoToLineQuickOpen.ts +10 -10
  96. package/front_end/panels/sources/NavigatorView.ts +34 -27
  97. package/front_end/panels/sources/OutlineQuickOpen.ts +3 -3
  98. package/front_end/panels/sources/PersistenceActions.ts +9 -9
  99. package/front_end/panels/sources/ProfilePlugin.ts +1 -1
  100. package/front_end/panels/sources/ScopeChainSidebarPane.ts +5 -5
  101. package/front_end/panels/sources/SnippetsPlugin.ts +2 -2
  102. package/front_end/panels/sources/SourcesNavigator.ts +20 -18
  103. package/front_end/panels/sources/SourcesPanel.ts +26 -25
  104. package/front_end/panels/sources/SourcesView.ts +5 -6
  105. package/front_end/panels/sources/TabbedEditorContainer.ts +3 -3
  106. package/front_end/panels/sources/ThreadsSidebarPane.ts +1 -1
  107. package/front_end/panels/sources/UISourceCodeFrame.ts +0 -2
  108. package/front_end/panels/sources/WatchExpressionsSidebarPane.ts +7 -7
  109. package/front_end/panels/sources/components/HeadersView.ts +2 -2
  110. package/front_end/panels/sources/sources-meta.ts +164 -71
  111. package/front_end/panels/sources/sources.ts +0 -2
  112. package/front_end/panels/timeline/TimelineHistoryManager.ts +14 -3
  113. package/front_end/panels/timeline/TimelineLoader.ts +72 -42
  114. package/front_end/panels/timeline/TimelinePanel.ts +29 -4
  115. package/front_end/panels/timeline/timelineHistoryManager.css +4 -0
  116. package/front_end/third_party/chromium/README.chromium +1 -1
  117. package/front_end/third_party/puppeteer/README.chromium +2 -2
  118. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.d.ts +187 -1
  119. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +91 -38
  120. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Browser.d.ts +145 -2
  121. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Browser.d.ts.map +1 -1
  122. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Browser.js +0 -2
  123. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Browser.js.map +1 -1
  124. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/BrowserContext.d.ts +0 -2
  125. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/BrowserContext.d.ts.map +1 -1
  126. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/BrowserContext.js +0 -2
  127. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/BrowserContext.js.map +1 -1
  128. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Dialog.d.ts +3 -2
  129. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Dialog.d.ts.map +1 -1
  130. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Dialog.js +8 -2
  131. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Dialog.js.map +1 -1
  132. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/JSHandle.d.ts +0 -2
  133. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/JSHandle.d.ts.map +1 -1
  134. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/JSHandle.js +0 -2
  135. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/JSHandle.js.map +1 -1
  136. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.d.ts +1 -3
  137. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.d.ts.map +1 -1
  138. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.js +0 -2
  139. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.js.map +1 -1
  140. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Realm.d.ts +0 -1
  141. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Realm.d.ts.map +1 -1
  142. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Realm.js +0 -1
  143. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Realm.js.map +1 -1
  144. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/BidiOverCdp.d.ts.map +1 -1
  145. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/BidiOverCdp.js +2 -2
  146. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/BidiOverCdp.js.map +1 -1
  147. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Browser.d.ts +5 -1
  148. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Browser.d.ts.map +1 -1
  149. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Browser.js +12 -0
  150. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Browser.js.map +1 -1
  151. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/HTTPResponse.d.ts.map +1 -1
  152. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/HTTPResponse.js +4 -1
  153. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/HTTPResponse.js.map +1 -1
  154. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.d.ts +5 -1
  155. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.d.ts.map +1 -1
  156. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.js +49 -0
  157. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.js.map +1 -1
  158. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/EventEmitter.d.ts +0 -6
  159. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/EventEmitter.d.ts.map +1 -1
  160. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/EventEmitter.js +0 -6
  161. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/EventEmitter.js.map +1 -1
  162. package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.d.ts +1 -1
  163. package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.d.ts.map +1 -1
  164. package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.js +1 -1
  165. package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.js.map +1 -1
  166. package/front_end/third_party/puppeteer/package/lib/puppeteer/injected/util.d.ts.map +1 -1
  167. package/front_end/third_party/puppeteer/package/lib/puppeteer/injected/util.js +3 -0
  168. package/front_end/third_party/puppeteer/package/lib/puppeteer/injected/util.js.map +1 -1
  169. package/front_end/third_party/puppeteer/package/lib/puppeteer/node/ScreenRecorder.d.ts +0 -3
  170. package/front_end/third_party/puppeteer/package/lib/puppeteer/node/ScreenRecorder.d.ts.map +1 -1
  171. package/front_end/third_party/puppeteer/package/lib/puppeteer/node/ScreenRecorder.js +0 -3
  172. package/front_end/third_party/puppeteer/package/lib/puppeteer/node/ScreenRecorder.js.map +1 -1
  173. package/front_end/third_party/puppeteer/package/lib/puppeteer/revisions.d.ts +3 -3
  174. package/front_end/third_party/puppeteer/package/lib/puppeteer/revisions.js +3 -3
  175. package/front_end/third_party/puppeteer/package/lib/puppeteer/util/disposable.d.ts +2 -2
  176. package/front_end/third_party/puppeteer/package/lib/puppeteer/util/disposable.js +2 -2
  177. package/front_end/third_party/puppeteer/package/lib/puppeteer/util/version.d.ts +1 -1
  178. package/front_end/third_party/puppeteer/package/lib/puppeteer/util/version.js +1 -1
  179. package/front_end/third_party/puppeteer/package/lib/types.d.ts +187 -1
  180. package/front_end/third_party/puppeteer/package/package.json +5 -5
  181. package/front_end/third_party/puppeteer/package/src/api/Browser.ts +155 -2
  182. package/front_end/third_party/puppeteer/package/src/api/BrowserContext.ts +0 -2
  183. package/front_end/third_party/puppeteer/package/src/api/Dialog.ts +10 -2
  184. package/front_end/third_party/puppeteer/package/src/api/JSHandle.ts +0 -2
  185. package/front_end/third_party/puppeteer/package/src/api/Page.ts +1 -3
  186. package/front_end/third_party/puppeteer/package/src/api/Realm.ts +0 -1
  187. package/front_end/third_party/puppeteer/package/src/bidi/BidiOverCdp.ts +4 -2
  188. package/front_end/third_party/puppeteer/package/src/bidi/Browser.ts +17 -0
  189. package/front_end/third_party/puppeteer/package/src/bidi/HTTPResponse.ts +5 -4
  190. package/front_end/third_party/puppeteer/package/src/cdp/Browser.ts +66 -0
  191. package/front_end/third_party/puppeteer/package/src/common/EventEmitter.ts +0 -6
  192. package/front_end/third_party/puppeteer/package/src/generated/injected.ts +1 -1
  193. package/front_end/third_party/puppeteer/package/src/injected/util.ts +4 -1
  194. package/front_end/third_party/puppeteer/package/src/node/ScreenRecorder.ts +0 -3
  195. package/front_end/third_party/puppeteer/package/src/revisions.ts +3 -3
  196. package/front_end/third_party/puppeteer/package/src/util/disposable.ts +2 -2
  197. package/front_end/third_party/puppeteer/package/src/util/version.ts +1 -1
  198. package/front_end/ui/components/text_editor/AiCodeCompletionProvider.ts +9 -7
  199. package/front_end/ui/components/text_editor/AiCodeGenerationProvider.ts +7 -8
  200. package/front_end/ui/legacy/Dialog.ts +103 -4
  201. package/front_end/ui/legacy/InspectorView.ts +1 -5
  202. package/front_end/ui/legacy/PopoverHelper.ts +5 -5
  203. package/front_end/ui/legacy/TabbedPane.ts +7 -2
  204. package/front_end/ui/legacy/components/cookie_table/CookiesTable.ts +40 -24
  205. package/front_end/ui/legacy/components/data_grid/DataGrid.ts +1 -0
  206. package/front_end/ui/legacy/components/data_grid/DataGridElement.ts +8 -4
  207. package/front_end/ui/legacy/components/perf_ui/FlameChart.ts +14 -7
  208. package/front_end/ui/legacy/components/quick_open/CommandMenu.ts +11 -1
  209. package/front_end/ui/visual_logging/KnownContextValues.ts +3 -0
  210. package/package.json +1 -1
  211. package/front_end/panels/sources/AiWarningInfobarPlugin.ts +0 -78
@@ -57,7 +57,7 @@ export interface ViewInput {
57
57
  renderInline?: boolean;
58
58
  portBindingEnabled?: boolean;
59
59
  schemeBindingEnabled?: boolean;
60
- onEdit: (data: CookieData, columnId: string, valueBeforeEditing: string, newText: string) => void;
60
+ onEdit: (data: CookieData, columnId: string, valueBeforeEditing: string|boolean, newText: string|boolean) => void;
61
61
  onCreate: (data: CookieData) => void;
62
62
  onRefresh: () => void;
63
63
  onDelete: (data: CookieData) => void;
@@ -71,18 +71,21 @@ type ViewFunction = (input: ViewInput, output: object, target: HTMLElement) => v
71
71
  type AttributeWithIcon = SDK.Cookie.Attribute.NAME|SDK.Cookie.Attribute.VALUE|SDK.Cookie.Attribute.DOMAIN|
72
72
  SDK.Cookie.Attribute.PATH|SDK.Cookie.Attribute.SECURE|SDK.Cookie.Attribute.SAME_SITE;
73
73
 
74
- type CookieData = Partial<Record<SDK.Cookie.Attribute, string>>&{
75
- name: string,
76
- value: string,
77
- }&{
78
- key?: string,
79
- flagged?: boolean,
80
- icons?: Partial<Record<AttributeWithIcon, Icon>>,
81
- priorityValue?: number,
82
- expiresTooltip?: string,
83
- dirty?: boolean,
84
- inactive?: boolean,
85
- };
74
+ type BooleanAttributes =
75
+ SDK.Cookie.Attribute.HTTP_ONLY|SDK.Cookie.Attribute.SECURE|SDK.Cookie.Attribute.HAS_CROSS_SITE_ANCESTOR;
76
+ type CookieData = Partial<Record<Exclude<SDK.Cookie.Attribute, BooleanAttributes>, string>>&
77
+ Partial<Record<BooleanAttributes, string|boolean>>&{
78
+ name: string,
79
+ value: string,
80
+ }&{
81
+ key?: string,
82
+ flagged?: boolean,
83
+ icons?: Partial<Record<AttributeWithIcon, Icon>>,
84
+ priorityValue?: number,
85
+ expiresTooltip?: string,
86
+ dirty?: boolean,
87
+ inactive?: boolean,
88
+ };
86
89
 
87
90
  const {repeat, ifDefined} = Directives;
88
91
 
@@ -185,6 +188,10 @@ const i18nLazyString = i18n.i18n.getLazilyComputedLocalizedString.bind(undefined
185
188
 
186
189
  const expiresSessionValue = i18nLazyString(UIStrings.session);
187
190
 
191
+ function isFlagAttribute(attribute: SDK.Cookie.Attribute): attribute is BooleanAttributes {
192
+ return attribute === SDK.Cookie.Attribute.HTTP_ONLY || attribute === SDK.Cookie.Attribute.SECURE;
193
+ }
194
+
188
195
  export interface CookiesTableData {
189
196
  cookies: SDK.Cookie.Cookie[];
190
197
  cookieToBlockedReasons?: ReadonlyMap<SDK.Cookie.Cookie, SDK.CookieModel.BlockedReason[]>;
@@ -280,13 +287,13 @@ export class CookiesTable extends UI.Widget.VBox {
280
287
  </th>` : ''}
281
288
  </tr>
282
289
  ${repeat(this.data, cookie => cookie.key, cookie => {
283
- const isHttpOnly = cookie['http-only'] === 'true';
290
+ const isHttpOnly = Boolean(cookie['http-only']);
284
291
  return html`
285
292
  <tr ?selected=${cookie.key === input.selectedKey}
286
293
  ?inactive=${cookie.inactive}
287
294
  ?dirty=${cookie.dirty}
288
295
  ?highlighted=${cookie.flagged}
289
- @edit=${(e: CustomEvent<{columnId: string, valueBeforeEditing: string, newText: string}>) =>
296
+ @edit=${(e: CustomEvent<{columnId: string, valueBeforeEditing: string|boolean, newText: string|boolean}>) =>
290
297
  input.onEdit(cookie, e.detail.columnId, e.detail.valueBeforeEditing, e.detail.newText)}
291
298
  @delete=${()=> input.onDelete(cookie)}
292
299
  @contextmenu=${(e: CustomEvent<UI.ContextMenu.ContextMenu>) => input.onContextMenu(cookie, e.detail)}
@@ -479,7 +486,8 @@ export class CookiesTable extends UI.Widget.VBox {
479
486
  }
480
487
  }
481
488
 
482
- private onUpdateCookie(oldData: CookieData, columnIdentifier: string, _oldText: string, newText: string): void {
489
+ private onUpdateCookie(oldData: CookieData, columnIdentifier: string, _oldText: string|boolean,
490
+ newText: string|boolean): void {
483
491
  const oldCookie = this.cookies.find(cookie => cookie.key() === oldData.key);
484
492
  if (!oldCookie) {
485
493
  return;
@@ -547,7 +555,14 @@ export class CookiesTable extends UI.Widget.VBox {
547
555
  of [SDK.Cookie.Attribute.DOMAIN, SDK.Cookie.Attribute.PATH, SDK.Cookie.Attribute.HTTP_ONLY,
548
556
  SDK.Cookie.Attribute.SECURE, SDK.Cookie.Attribute.SAME_SITE, SDK.Cookie.Attribute.SOURCE_SCHEME]) {
549
557
  if (attribute in data) {
550
- cookie.addAttribute(attribute, data[attribute]);
558
+ const value = data[attribute];
559
+ if (isFlagAttribute(attribute)) {
560
+ if (value === true) {
561
+ cookie.addAttribute(attribute);
562
+ }
563
+ } else {
564
+ cookie.addAttribute(attribute, value);
565
+ }
551
566
  }
552
567
  }
553
568
  if (data.expires && data.expires !== expiresSessionValue()) {
@@ -559,11 +574,8 @@ export class CookiesTable extends UI.Widget.VBox {
559
574
  Number.parseInt(data[SDK.Cookie.Attribute.SOURCE_PORT] || '', 10) || undefined);
560
575
  }
561
576
  if (data[SDK.Cookie.Attribute.PARTITION_KEY_SITE]) {
562
- cookie.setPartitionKey(
563
- data[SDK.Cookie.Attribute.PARTITION_KEY_SITE],
564
- Boolean(
565
- data[SDK.Cookie.Attribute.HAS_CROSS_SITE_ANCESTOR] ? data[SDK.Cookie.Attribute.HAS_CROSS_SITE_ANCESTOR] :
566
- false));
577
+ cookie.setPartitionKey(data[SDK.Cookie.Attribute.PARTITION_KEY_SITE],
578
+ data[SDK.Cookie.Attribute.HAS_CROSS_SITE_ANCESTOR] === true);
567
579
  }
568
580
  cookie.setSize(data[SDK.Cookie.Attribute.NAME].length + data[SDK.Cookie.Attribute.VALUE].length);
569
581
  return cookie;
@@ -578,7 +590,11 @@ export class CookiesTable extends UI.Widget.VBox {
578
590
  of [SDK.Cookie.Attribute.HTTP_ONLY, SDK.Cookie.Attribute.SECURE, SDK.Cookie.Attribute.SAME_SITE,
579
591
  SDK.Cookie.Attribute.SOURCE_SCHEME, SDK.Cookie.Attribute.SOURCE_PORT]) {
580
592
  if (cookie.hasAttribute(attribute)) {
581
- data[attribute] = String(cookie.getAttribute(attribute) ?? true);
593
+ if (isFlagAttribute(attribute)) {
594
+ data[attribute] = true;
595
+ } else {
596
+ data[attribute] = String(cookie.getAttribute(attribute) ?? true);
597
+ }
582
598
  }
583
599
  }
584
600
  data[SDK.Cookie.Attribute.DOMAIN] = cookie.domain() || (isRequest ? i18nString(UIStrings.na) : '');
@@ -596,7 +612,7 @@ export class CookiesTable extends UI.Widget.VBox {
596
612
  }
597
613
  data[SDK.Cookie.Attribute.PARTITION_KEY_SITE] =
598
614
  cookie.partitionKeyOpaque() ? i18nString(UIStrings.opaquePartitionKey).toString() : cookie.topLevelSite();
599
- data[SDK.Cookie.Attribute.HAS_CROSS_SITE_ANCESTOR] = cookie.hasCrossSiteAncestor() ? 'true' : '';
615
+ data[SDK.Cookie.Attribute.HAS_CROSS_SITE_ANCESTOR] = cookie.hasCrossSiteAncestor();
600
616
  data[SDK.Cookie.Attribute.SIZE] = String(cookie.size());
601
617
  data[SDK.Cookie.Attribute.PRIORITY] = cookie.priority();
602
618
  data.priorityValue = ['Low', 'Medium', 'High'].indexOf(cookie.priority());
@@ -1719,6 +1719,7 @@ export const enum Align {
1719
1719
  export const enum DataType {
1720
1720
  STRING = 'String',
1721
1721
  BOOLEAN = 'Boolean',
1722
+ NUMBER = 'Number',
1722
1723
  }
1723
1724
 
1724
1725
  export const ColumnResizePadding = 30;
@@ -285,7 +285,9 @@ export class DataGridElement extends UI.UIUtils.HTMLElementWithLightDOMTemplate
285
285
  if (align !== Align.CENTER && align !== Align.RIGHT) {
286
286
  align = undefined;
287
287
  }
288
- const dataType = column.getAttribute('type') === 'boolean' ? DataType.BOOLEAN : DataType.STRING;
288
+ const typeAttr = column.getAttribute('type');
289
+ const dataType =
290
+ typeAttr === 'boolean' ? DataType.BOOLEAN : (typeAttr === 'numeric' ? DataType.NUMBER : DataType.STRING);
289
291
  const weight = parseFloat(column.getAttribute('weight') || '') ?? undefined;
290
292
  const editable = column.hasAttribute('editable');
291
293
  if (editable) {
@@ -318,7 +320,6 @@ export class DataGridElement extends UI.UIUtils.HTMLElementWithLightDOMTemplate
318
320
  const visibleColumns = new Set(this.#columns.map(({id}) => id).filter(id => !this.#hiddenColumns.has(id)));
319
321
  this.#dataGrid.setColumnsVisibility(visibleColumns);
320
322
  this.#dataGrid.setEditCallback(hasEditableColumn ? this.#editCallback.bind(this) : undefined, INTERNAL_TOKEN);
321
- this.#dataGrid.deleteCallback = this.#deleteCallback.bind(this);
322
323
  }
323
324
 
324
325
  #needUpdateColumns(mutationList: MutationRecord[]): boolean {
@@ -509,8 +510,8 @@ export class DataGridElement extends UI.UIUtils.HTMLElementWithLightDOMTemplate
509
510
  }
510
511
  }
511
512
 
512
- #editCallback(node: DataGridElementNode, columnId: string, valueBeforeEditing: string, newText: string,
513
- moveDirection?: string): void {
513
+ #editCallback(node: DataGridElementNode, columnId: string, valueBeforeEditing: string|boolean,
514
+ newText: string|boolean, moveDirection?: string): void {
514
515
  if (node.isCreationNode) {
515
516
  this.#usedCreationNode = node;
516
517
  let hasNextEditableColumn = false;
@@ -543,6 +544,9 @@ export class DataGridElement extends UI.UIUtils.HTMLElementWithLightDOMTemplate
543
544
  if (args[0] === 'refresh') {
544
545
  this.#dataGrid.refreshCallback = this.#refreshCallback.bind(this);
545
546
  }
547
+ if (args[0] === 'delete') {
548
+ this.#dataGrid.deleteCallback = this.#deleteCallback.bind(this);
549
+ }
546
550
  }
547
551
 
548
552
  #refreshCallback(): void {
@@ -12,7 +12,7 @@ import type * as NetworkTimeCalculator from '../../../../models/network_time_cal
12
12
  import * as Trace from '../../../../models/trace/trace.js';
13
13
  import * as VisualLogging from '../../../../ui/visual_logging/visual_logging.js';
14
14
  import * as Buttons from '../../../components/buttons/buttons.js';
15
- import {html, render, type TemplateResult} from '../../../lit/lit.js';
15
+ import {html, nothing, render, type TemplateResult} from '../../../lit/lit.js';
16
16
  import * as UI from '../../legacy.js';
17
17
  import * as ThemeSupport from '../../theme_support/theme_support.js';
18
18
 
@@ -621,7 +621,7 @@ export class FlameChart extends Common.ObjectWrapper.eventMixin<EventTypes, type
621
621
 
622
622
  hideHighlight(): void {
623
623
  if (this.#searchResultEntryIndex === null) {
624
- this.popoverElement.removeChildren();
624
+ this.#renderPopover(nothing);
625
625
  this.lastPopoverState = {
626
626
  entryIndex: -1,
627
627
  groupIndex: -1,
@@ -794,7 +794,7 @@ export class FlameChart extends Common.ObjectWrapper.eventMixin<EventTypes, type
794
794
  this.viewportElement.style.cursor = 'pointer';
795
795
  const iconTooltipElement = this.#prepareIconInfo(groupIndex, hoverType);
796
796
  if (iconTooltipElement) {
797
- this.popoverElement.appendChild(iconTooltipElement);
797
+ this.#renderPopover(iconTooltipElement);
798
798
  this.updatePopoverOffset();
799
799
  }
800
800
  return;
@@ -923,9 +923,13 @@ export class FlameChart extends Common.ObjectWrapper.eventMixin<EventTypes, type
923
923
  };
924
924
  }
925
925
 
926
- updatePopoverContents(popoverElement: Element|TemplateResult): void {
926
+ #renderPopover(content: Element|TemplateResult|string|typeof nothing): void {
927
927
  // eslint-disable-next-line @devtools/no-lit-render-outside-of-view
928
- render(html`${popoverElement}`, this.popoverElement);
928
+ render(html`${content}`, this.popoverElement);
929
+ }
930
+
931
+ updatePopoverContents(popoverElement: Element|TemplateResult): void {
932
+ this.#renderPopover(popoverElement);
929
933
  // Must update the offset AFTER the new content has been added.
930
934
  this.updatePopoverOffset();
931
935
  this.lastPopoverState.entryIndex = -1;
@@ -941,13 +945,14 @@ export class FlameChart extends Common.ObjectWrapper.eventMixin<EventTypes, type
941
945
  if (groupIndex === this.lastPopoverState.groupIndex) {
942
946
  return this.updatePopoverOffset();
943
947
  }
944
- this.popoverElement.removeChildren();
945
948
  const data = this.timelineData();
946
949
  if (!data) {
950
+ this.#renderPopover(nothing);
947
951
  return;
948
952
  }
949
953
  const group = data.groups.at(groupIndex);
950
954
  if (!group) {
955
+ this.#renderPopover(nothing);
951
956
  return;
952
957
  }
953
958
  // Only show a popover tooltip if the group has a pre-defined `fullTrackName`
@@ -956,8 +961,10 @@ export class FlameChart extends Common.ObjectWrapper.eventMixin<EventTypes, type
956
961
  const fullTrackName = group.fullTrackName;
957
962
 
958
963
  if (fullTrackName) {
959
- this.popoverElement.innerText = fullTrackName;
964
+ this.#renderPopover(fullTrackName);
960
965
  this.updatePopoverOffset();
966
+ } else {
967
+ this.#renderPopover(nothing);
961
968
  }
962
969
  this.lastPopoverState = {
963
970
  groupIndex,
@@ -228,7 +228,17 @@ export class CommandMenu {
228
228
  if (!options || !registeredSettingUI.uiDescriptor.category) {
229
229
  continue;
230
230
  }
231
- const setting = Common.Settings.Settings.instance().resolve(registeredSettingUI.descriptor);
231
+ let setting: Common.Settings.Setting<unknown>;
232
+ if ('isAvailable' in registeredSettingUI.descriptor) {
233
+ const settingResult = Common.Settings.Settings.instance().maybeResolve(
234
+ registeredSettingUI.descriptor as Common.Settings.ConditionalSettingDescriptor<unknown, unknown>);
235
+ if (!('setting' in settingResult)) {
236
+ continue;
237
+ }
238
+ setting = settingResult.setting;
239
+ } else {
240
+ setting = Common.Settings.Settings.instance().resolve(registeredSettingUI.descriptor);
241
+ }
232
242
  for (const pair of options) {
233
243
  this.#commands.push(
234
244
  CommandMenu.createSettingCommand(setting, pair.title(), pair.value, registeredSettingUI.uiDescriptor));
@@ -2601,6 +2601,7 @@ export const knownContextValues = new Set([
2601
2601
  'lmi-interpreter-settings',
2602
2602
  'lo',
2603
2603
  'load',
2604
+ 'load-cpu-profile-confirmation',
2604
2605
  'load-through-target',
2605
2606
  'loadeddata',
2606
2607
  'loadedmetadata',
@@ -2614,6 +2615,7 @@ export const knownContextValues = new Set([
2614
2615
  'local-storage-for-domain',
2615
2616
  'locale',
2616
2617
  'location',
2618
+ 'location-dialog',
2617
2619
  'log-level',
2618
2620
  'logpoint',
2619
2621
  'long',
@@ -2861,6 +2863,7 @@ export const knownContextValues = new Set([
2861
2863
  'network.add-network-request-blocking-pattern',
2862
2864
  'network.blocked-urls',
2863
2865
  'network.clear',
2866
+ 'network.clear-all',
2864
2867
  'network.config',
2865
2868
  'network.enable-remote-file-loading',
2866
2869
  'network.enable-remote-file-loading-documentation',
package/package.json CHANGED
@@ -91,5 +91,5 @@
91
91
  "webidl2": "24.5.0",
92
92
  "yargs": "17.7.2"
93
93
  },
94
- "version": "1.0.1667564"
94
+ "version": "1.0.1669021"
95
95
  }
@@ -1,78 +0,0 @@
1
- // Copyright 2025 The Chromium Authors
2
- // Use of this source code is governed by a BSD-style license that can be
3
- // found in the LICENSE file.
4
-
5
- import * as i18n from '../../core/i18n/i18n.js';
6
- import * as Workspace from '../../models/workspace/workspace.js';
7
- import type * as TextEditor from '../../ui/components/text_editor/text_editor.js';
8
- import * as SourceFrame from '../../ui/legacy/components/source_frame/source_frame.js';
9
- import * as UI from '../../ui/legacy/legacy.js';
10
-
11
- import {Plugin} from './Plugin.js';
12
-
13
- const UIStrings = {
14
- /**
15
- * @description Infobar text announcing that the file contents have been changed by AI
16
- */
17
- aiContentWarning: 'This file contains AI-generated content',
18
- } as const;
19
- const str_ = i18n.i18n.registerUIStrings('panels/sources/AiWarningInfobarPlugin.ts', UIStrings);
20
- const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
21
-
22
- export class AiWarningInfobarPlugin extends Plugin {
23
- #editor: TextEditor.TextEditor.TextEditor|undefined = undefined;
24
- #aiWarningInfobar: UI.Infobar.Infobar|null = null;
25
-
26
- constructor(uiSourceCode: Workspace.UISourceCode.UISourceCode) {
27
- super(uiSourceCode);
28
- this.uiSourceCode.addEventListener(
29
- Workspace.UISourceCode.Events.WorkingCopyCommitted, this.#onWorkingCopyCommitted, this);
30
- }
31
-
32
- override dispose(): void {
33
- this.#aiWarningInfobar?.dispose();
34
- this.#aiWarningInfobar = null;
35
- this.uiSourceCode.removeEventListener(
36
- Workspace.UISourceCode.Events.WorkingCopyCommitted, this.#onWorkingCopyCommitted, this);
37
- super.dispose();
38
- }
39
-
40
- static override accepts(uiSourceCode: Workspace.UISourceCode.UISourceCode): boolean {
41
- return uiSourceCode.contentType().hasScripts() || uiSourceCode.contentType().hasStyleSheets();
42
- }
43
-
44
- override editorInitialized(editor: TextEditor.TextEditor.TextEditor): void {
45
- this.#editor = editor;
46
- if (this.uiSourceCode.containsAiChanges()) {
47
- this.#showAiWarningInfobar();
48
- }
49
- }
50
-
51
- #onWorkingCopyCommitted(): void {
52
- if (!this.uiSourceCode.containsAiChanges()) {
53
- this.#aiWarningInfobar?.dispose();
54
- this.#aiWarningInfobar = null;
55
- }
56
- }
57
-
58
- #showAiWarningInfobar(): void {
59
- const infobar = new UI.Infobar.Infobar(
60
- UI.Infobar.Type.WARNING, i18nString(UIStrings.aiContentWarning), undefined, undefined,
61
- 'contains-ai-content-warning');
62
- this.#aiWarningInfobar = infobar;
63
- infobar.setCloseCallback(() => this.removeInfobar(this.#aiWarningInfobar));
64
- this.attachInfobar(this.#aiWarningInfobar);
65
- }
66
-
67
- attachInfobar(bar: UI.Infobar.Infobar): void {
68
- if (this.#editor) {
69
- this.#editor.dispatch({effects: SourceFrame.SourceFrame.addSourceFrameInfobar.of({element: bar.element})});
70
- }
71
- }
72
-
73
- removeInfobar(bar: UI.Infobar.Infobar|null): void {
74
- if (this.#editor && bar) {
75
- this.#editor.dispatch({effects: SourceFrame.SourceFrame.removeSourceFrameInfobar.of({element: bar.element})});
76
- }
77
- }
78
- }