chrome-devtools-frontend 1.0.934169 → 1.0.935332

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 (68) hide show
  1. package/config/gni/all_devtools_files.gni +0 -11
  2. package/config/gni/devtools_grd_files.gni +4 -5
  3. package/front_end/Tests.js +2 -2
  4. package/front_end/core/host/UserMetrics.ts +0 -1
  5. package/front_end/core/i18n/locales/en-US.json +12 -0
  6. package/front_end/core/i18n/locales/en-XL.json +12 -0
  7. package/front_end/core/root/Runtime.ts +0 -1
  8. package/front_end/core/sdk/DOMModel.ts +3 -3
  9. package/front_end/core/sdk/sdk-meta.ts +3 -0
  10. package/front_end/entrypoints/inspector_main/RenderingOptions.ts +1 -1
  11. package/front_end/entrypoints/inspector_main/inspector_main-meta.ts +1 -0
  12. package/front_end/entrypoints/main/MainImpl.ts +1 -11
  13. package/front_end/entrypoints/main/main-meta.ts +2 -1
  14. package/front_end/entrypoints/shell/shell.json +0 -5
  15. package/front_end/models/emulation/EmulatedDevices.ts +306 -84
  16. package/front_end/panels/application/module.json +0 -2
  17. package/front_end/panels/changes/changes-meta.ts +0 -3
  18. package/front_end/panels/console/module.json +0 -2
  19. package/front_end/panels/coverage/module.json +0 -1
  20. package/front_end/panels/css_overview/module.json +1 -2
  21. package/front_end/panels/developer_resources/module.json +1 -2
  22. package/front_end/panels/elements/StylesSidebarPane.ts +15 -0
  23. package/front_end/panels/elements/elements-meta.ts +5 -0
  24. package/front_end/panels/event_listeners/module.json +1 -2
  25. package/front_end/panels/lighthouse/LighthouseProtocolService.ts +1 -5
  26. package/front_end/panels/media/module.json +0 -1
  27. package/front_end/panels/mobile_throttling/mobile_throttling-meta.ts +1 -0
  28. package/front_end/panels/network/module.json +0 -2
  29. package/front_end/panels/network/network-meta.ts +2 -0
  30. package/front_end/panels/profiler/module.json +1 -3
  31. package/front_end/panels/profiler/profiler-meta.ts +1 -0
  32. package/front_end/panels/sensors/sensors-meta.ts +1 -0
  33. package/front_end/panels/settings/emulation/devicesSettingsTab.css +1 -1
  34. package/front_end/panels/sources/CallStackSidebarPane.ts +21 -0
  35. package/front_end/panels/sources/NavigatorView.ts +8 -8
  36. package/front_end/panels/sources/WatchExpressionsSidebarPane.ts +15 -0
  37. package/front_end/panels/sources/module.json +0 -3
  38. package/front_end/panels/sources/sources-meta.ts +12 -0
  39. package/front_end/panels/sources/watchExpressionsSidebarPane.css +10 -3
  40. package/front_end/panels/timeline/module.json +0 -1
  41. package/front_end/panels/timeline/timeline-meta.ts +1 -0
  42. package/front_end/panels/webauthn/module.json +0 -1
  43. package/front_end/ui/components/text_editor/config.ts +1 -1
  44. package/front_end/ui/components/text_editor/theme.ts +8 -0
  45. package/front_end/ui/legacy/GlassPane.ts +4 -0
  46. package/front_end/ui/legacy/InspectorView.ts +0 -4
  47. package/front_end/ui/legacy/TabbedPane.ts +4 -0
  48. package/front_end/ui/legacy/ViewManager.ts +10 -2
  49. package/front_end/ui/legacy/components/cookie_table/module.json +1 -2
  50. package/front_end/ui/legacy/components/data_grid/DataGrid.ts +3 -1
  51. package/front_end/ui/legacy/components/data_grid/dataGrid.css +5 -0
  52. package/front_end/ui/legacy/components/inline_editor/CSSLength.ts +10 -3
  53. package/front_end/ui/legacy/components/inline_editor/cssLength.css +30 -9
  54. package/front_end/ui/legacy/components/object_ui/CustomPreviewComponent.ts +2 -1
  55. package/front_end/ui/legacy/components/object_ui/ObjectPopoverHelper.ts +4 -3
  56. package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +5 -5
  57. package/front_end/ui/legacy/components/perf_ui/perf_ui-meta.ts +1 -0
  58. package/front_end/ui/legacy/components/quick_open/FilteredListWidget.ts +3 -1
  59. package/front_end/ui/legacy/components/quick_open/quick_open-meta.ts +0 -3
  60. package/front_end/ui/legacy/components/source_frame/module.json +1 -2
  61. package/front_end/ui/legacy/components/source_frame/source_frame-meta.ts +1 -0
  62. package/front_end/ui/legacy/themeColors.css +4 -0
  63. package/package.json +1 -1
  64. package/front_end/panels/changes/module.json +0 -7
  65. package/front_end/panels/snippets/module.json +0 -6
  66. package/front_end/ui/legacy/components/data_grid/module.json +0 -8
  67. package/front_end/ui/legacy/components/object_ui/module.json +0 -11
  68. package/front_end/ui/legacy/components/quick_open/module.json +0 -8
@@ -132,6 +132,7 @@ UI.ActionRegistration.registerActionExtension({
132
132
  });
133
133
 
134
134
  Common.Settings.registerSettingExtension({
135
+ storageType: Common.Settings.SettingStorageType.Synced,
135
136
  settingName: 'customNetworkConditions',
136
137
  settingType: Common.Settings.SettingType.ARRAY,
137
138
  defaultValue: [],
@@ -1,9 +1,7 @@
1
1
  {
2
2
  "dependencies": [
3
3
  "ui/legacy/components/cookie_table",
4
- "ui/legacy/components/data_grid",
5
4
  "panels/mobile_throttling",
6
- "ui/legacy/components/object_ui",
7
5
  "ui/legacy/components/perf_ui",
8
6
  "panels/search",
9
7
  "ui/legacy/components/source_frame",
@@ -275,6 +275,7 @@ UI.ActionRegistration.registerActionExtension({
275
275
 
276
276
  Common.Settings.registerSettingExtension({
277
277
  category: Common.Settings.SettingCategory.NETWORK,
278
+ storageType: Common.Settings.SettingStorageType.Synced,
278
279
  title: i18nLazyString(UIStrings.colorcodeResourceTypes),
279
280
  settingName: 'networkColorCodeResourceTypes',
280
281
  settingType: Common.Settings.SettingType.BOOLEAN,
@@ -297,6 +298,7 @@ Common.Settings.registerSettingExtension({
297
298
 
298
299
  Common.Settings.registerSettingExtension({
299
300
  category: Common.Settings.SettingCategory.NETWORK,
301
+ storageType: Common.Settings.SettingStorageType.Synced,
300
302
  title: i18nLazyString(UIStrings.groupNetworkLogByFrame),
301
303
  settingName: 'network.group-by-frame',
302
304
  settingType: Common.Settings.SettingType.BOOLEAN,
@@ -1,8 +1,6 @@
1
1
  {
2
2
  "dependencies": [
3
3
  "ui/legacy",
4
- "ui/legacy/components/perf_ui",
5
- "ui/legacy/components/data_grid",
6
- "ui/legacy/components/object_ui"
4
+ "ui/legacy/components/perf_ui"
7
5
  ]
8
6
  }
@@ -162,6 +162,7 @@ UI.ActionRegistration.registerActionExtension({
162
162
 
163
163
  Common.Settings.registerSettingExtension({
164
164
  category: Common.Settings.SettingCategory.PERFORMANCE,
165
+ storageType: Common.Settings.SettingStorageType.Synced,
165
166
  title: i18nLazyString(UIStrings.showNativeFunctions),
166
167
  settingName: 'showNativeFunctionsInJSProfile',
167
168
  settingType: Common.Settings.SettingType.BOOLEAN,
@@ -154,6 +154,7 @@ UI.ActionRegistration.registerActionExtension({
154
154
  });
155
155
 
156
156
  Common.Settings.registerSettingExtension({
157
+ storageType: Common.Settings.SettingStorageType.Synced,
157
158
  settingName: 'emulation.locations',
158
159
  settingType: Common.Settings.SettingType.ARRAY,
159
160
  // TODO(crbug.com/1136655): http://crrev.com/c/2666426 regressed localization of city titles.
@@ -24,7 +24,7 @@
24
24
  }
25
25
 
26
26
  .devices-settings-tab .devices-list {
27
- width: 350px;
27
+ width: min(350px, 100%);
28
28
  margin-top: 10px;
29
29
  }
30
30
 
@@ -82,6 +82,10 @@ const UIStrings = {
82
82
  *@description A context menu item in the Call Stack Sidebar Pane of the Sources panel
83
83
  */
84
84
  addAllContentScriptsToIgnoreList: 'Add all content scripts to ignore list',
85
+ /**
86
+ *@description Text in Call Stack Sidebar Pane of the Sources panel when some call frames have warnings
87
+ */
88
+ callFrameWarnings: 'Some call frames have warnings',
85
89
  };
86
90
  const str_ = i18n.i18n.registerUIStrings('panels/sources/CallStackSidebarPane.ts', UIStrings);
87
91
  const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
@@ -92,6 +96,7 @@ export class CallStackSidebarPane extends UI.View.SimpleView implements UI.Conte
92
96
  UI.ListControl.ListDelegate<Item> {
93
97
  private readonly ignoreListMessageElement: Element;
94
98
  private readonly notPausedMessageElement: HTMLElement;
99
+ private readonly callFrameWarningsElement: HTMLElement;
95
100
  private readonly items: UI.ListModel.ListModel<Item>;
96
101
  private list: UI.ListControl.ListControl<Item>;
97
102
  private readonly showMoreMessageElement: Element;
@@ -113,6 +118,12 @@ export class CallStackSidebarPane extends UI.View.SimpleView implements UI.Conte
113
118
  this.notPausedMessageElement.textContent = i18nString(UIStrings.notPaused);
114
119
  this.notPausedMessageElement.tabIndex = -1;
115
120
 
121
+ this.callFrameWarningsElement = this.contentElement.createChild('div', 'ignore-listed-message');
122
+ const icon = UI.Icon.Icon.create('smallicon-warning', 'call-frame-warning-icon');
123
+ this.callFrameWarningsElement.appendChild(icon);
124
+ this.callFrameWarningsElement.appendChild(document.createTextNode(i18nString(UIStrings.callFrameWarnings)));
125
+ this.callFrameWarningsElement.tabIndex = -1;
126
+
116
127
  this.items = new UI.ListModel.ListModel();
117
128
  this.list = new UI.ListControl.ListControl(this.items, this, UI.ListControl.ListMode.NonViewport);
118
129
  this.contentElement.appendChild(this.list.element);
@@ -164,6 +175,8 @@ export class CallStackSidebarPane extends UI.View.SimpleView implements UI.Conte
164
175
  private async doUpdate(): Promise<void> {
165
176
  this.locationPool.disposeAll();
166
177
 
178
+ this.callFrameWarningsElement.classList.add('hidden');
179
+
167
180
  const details = UI.Context.Context.instance().flavor(SDK.DebuggerModel.DebuggerPausedDetails);
168
181
  if (!details) {
169
182
  this.notPausedMessageElement.classList.remove('hidden');
@@ -178,6 +191,7 @@ export class CallStackSidebarPane extends UI.View.SimpleView implements UI.Conte
178
191
  this.notPausedMessageElement.classList.add('hidden');
179
192
 
180
193
  const itemPromises = [];
194
+ const uniqueWarnings: Set<string> = new Set();
181
195
  for (const frame of details.callFrames) {
182
196
  const itemPromise =
183
197
  Item.createForDebuggerCallFrame(frame, this.locationPool, this.refreshItem.bind(this)).then(item => {
@@ -185,8 +199,15 @@ export class CallStackSidebarPane extends UI.View.SimpleView implements UI.Conte
185
199
  return item;
186
200
  });
187
201
  itemPromises.push(itemPromise);
202
+ for (const warning of frame.warnings) {
203
+ uniqueWarnings.add(warning);
204
+ }
188
205
  }
189
206
  const items = await Promise.all(itemPromises);
207
+ if (uniqueWarnings.size) {
208
+ this.callFrameWarningsElement.classList.remove('hidden');
209
+ UI.Tooltip.Tooltip.install(this.callFrameWarningsElement, Array.from(uniqueWarnings).join('\n'));
210
+ }
190
211
 
191
212
  let asyncStackTrace: Protocol.Runtime.StackTrace|null|undefined = details.asyncStackTrace;
192
213
  if (!asyncStackTrace && details.asyncStackTraceId) {
@@ -782,8 +782,8 @@ export class NavigatorView extends UI.Widget.VBox implements SDK.TargetManager.O
782
782
  this.rename(node, false);
783
783
  }
784
784
 
785
- private handleContextMenuExclude(project: Workspace.Workspace.Project, path: string): void {
786
- const shouldExclude = window.confirm(i18nString(UIStrings.areYouSureYouWantToExcludeThis));
785
+ private async handleContextMenuExclude(project: Workspace.Workspace.Project, path: string): Promise<void> {
786
+ const shouldExclude = await UI.UIUtils.ConfirmDialog.show(i18nString(UIStrings.areYouSureYouWantToExcludeThis));
787
787
  if (shouldExclude) {
788
788
  UI.UIUtils.startBatchUpdate();
789
789
  project.excludeFolder(
@@ -792,8 +792,8 @@ export class NavigatorView extends UI.Widget.VBox implements SDK.TargetManager.O
792
792
  }
793
793
  }
794
794
 
795
- private handleContextMenuDelete(uiSourceCode: Workspace.UISourceCode.UISourceCode): void {
796
- const shouldDelete = window.confirm(i18nString(UIStrings.areYouSureYouWantToDeleteThis));
795
+ private async handleContextMenuDelete(uiSourceCode: Workspace.UISourceCode.UISourceCode): Promise<void> {
796
+ const shouldDelete = await UI.UIUtils.ConfirmDialog.show(i18nString(UIStrings.areYouSureYouWantToDeleteThis));
797
797
  if (shouldDelete) {
798
798
  uiSourceCode.project().deleteFile(uiSourceCode);
799
799
  }
@@ -816,8 +816,8 @@ export class NavigatorView extends UI.Widget.VBox implements SDK.TargetManager.O
816
816
  contextMenu.show();
817
817
  }
818
818
 
819
- private handleDeleteOverrides(node: NavigatorTreeNode): void {
820
- const shouldRemove = window.confirm(i18nString(UIStrings.areYouSureYouWantToDeleteAll));
819
+ private async handleDeleteOverrides(node: NavigatorTreeNode): Promise<void> {
820
+ const shouldRemove = await UI.UIUtils.ConfirmDialog.show(i18nString(UIStrings.areYouSureYouWantToDeleteAll));
821
821
  if (shouldRemove) {
822
822
  this.handleDeleteOverridesHelper(node);
823
823
  }
@@ -871,8 +871,8 @@ export class NavigatorView extends UI.Widget.VBox implements SDK.TargetManager.O
871
871
  if (project.type() === Workspace.Workspace.projectTypes.FileSystem) {
872
872
  contextMenu.defaultSection().appendAction('sources.add-folder-to-workspace', undefined, true);
873
873
  if (node instanceof NavigatorGroupTreeNode) {
874
- contextMenu.defaultSection().appendItem(i18nString(UIStrings.removeFolderFromWorkspace), () => {
875
- const shouldRemove = window.confirm(i18nString(UIStrings.areYouSureYouWantToRemoveThis));
874
+ contextMenu.defaultSection().appendItem(i18nString(UIStrings.removeFolderFromWorkspace), async () => {
875
+ const shouldRemove = await UI.UIUtils.ConfirmDialog.show(i18nString(UIStrings.areYouSureYouWantToRemoveThis));
876
876
  if (shouldRemove) {
877
877
  project.remove();
878
878
  }
@@ -303,6 +303,7 @@ export class WatchExpression extends Common.ObjectWrapper.ObjectWrapper<EventTyp
303
303
  private textPrompt?: ObjectUI.ObjectPropertiesSection.ObjectPropertyPrompt;
304
304
  private result?: SDK.RemoteObject.RemoteObject|null;
305
305
  private preventClickTimeout?: number;
306
+ private resizeObserver?: ResizeObserver;
306
307
  constructor(
307
308
  expression: string|null,
308
309
  expandController: ObjectUI.ObjectPropertiesSection.ObjectPropertiesSectionsTreeExpandController,
@@ -412,6 +413,7 @@ export class WatchExpression extends Common.ObjectWrapper.ObjectWrapper<EventTyp
412
413
  if (this.expressionInternal) {
413
414
  this.expandController.stopWatchSectionsWithId(this.expressionInternal);
414
415
  }
416
+ this.resizeObserver?.disconnect();
415
417
  this.expressionInternal = newExpression;
416
418
  this.update();
417
419
  this.dispatchEventToListeners(Events.ExpressionUpdated, this);
@@ -442,6 +444,19 @@ export class WatchExpression extends Common.ObjectWrapper.ObjectWrapper<EventTyp
442
444
  expressionValue?: SDK.RemoteObject.RemoteObject, exceptionDetails?: Protocol.Runtime.ExceptionDetails): Element {
443
445
  const headerElement = this.element.createChild('div', 'watch-expression-header');
444
446
  const deleteButton = UI.Icon.Icon.create('smallicon-cross', 'watch-expression-delete-button');
447
+ this.resizeObserver = new ResizeObserver(entries => {
448
+ entries.forEach(entry => {
449
+ // 55 serves as a width threshold here (in px)
450
+ if (entry.contentRect.width < 55) {
451
+ deleteButton.classList.remove('right-aligned');
452
+ deleteButton.classList.add('left-aligned');
453
+ } else {
454
+ deleteButton.classList.remove('left-aligned');
455
+ deleteButton.classList.add('right-aligned');
456
+ }
457
+ });
458
+ });
459
+ this.resizeObserver.observe(headerElement);
445
460
  UI.Tooltip.Tooltip.install(deleteButton, i18nString(UIStrings.deleteWatchExpression));
446
461
  deleteButton.addEventListener('click', this.deleteWatchExpression.bind(this), false);
447
462
 
@@ -3,12 +3,9 @@
3
3
  "ui/legacy",
4
4
  "panels/search",
5
5
  "ui/legacy/components/source_frame",
6
- "panels/snippets",
7
- "ui/legacy/components/quick_open",
8
6
  "ui/legacy/components/inline_editor",
9
7
  "ui/legacy/components/color_picker",
10
8
  "panels/event_listeners",
11
- "ui/legacy/components/object_ui",
12
9
  "panels/coverage"
13
10
  ]
14
11
  }
@@ -1249,6 +1249,7 @@ Common.Settings.registerSettingExtension({
1249
1249
 
1250
1250
  Common.Settings.registerSettingExtension({
1251
1251
  category: Common.Settings.SettingCategory.SOURCES,
1252
+ storageType: Common.Settings.SettingStorageType.Synced,
1252
1253
  title: i18nLazyString(UIStrings.searchInAnonymousAndContent),
1253
1254
  settingName: 'searchInAnonymousAndContentScripts',
1254
1255
  settingType: Common.Settings.SettingType.BOOLEAN,
@@ -1267,6 +1268,7 @@ Common.Settings.registerSettingExtension({
1267
1268
 
1268
1269
  Common.Settings.registerSettingExtension({
1269
1270
  category: Common.Settings.SettingCategory.SOURCES,
1271
+ storageType: Common.Settings.SettingStorageType.Synced,
1270
1272
  title: i18nLazyString(UIStrings.automaticallyRevealFilesIn),
1271
1273
  settingName: 'autoRevealInNavigator',
1272
1274
  settingType: Common.Settings.SettingType.BOOLEAN,
@@ -1285,6 +1287,7 @@ Common.Settings.registerSettingExtension({
1285
1287
 
1286
1288
  Common.Settings.registerSettingExtension({
1287
1289
  category: Common.Settings.SettingCategory.SOURCES,
1290
+ storageType: Common.Settings.SettingStorageType.Synced,
1288
1291
  title: i18nLazyString(UIStrings.enableJavascriptSourceMaps),
1289
1292
  settingName: 'jsSourceMapsEnabled',
1290
1293
  settingType: Common.Settings.SettingType.BOOLEAN,
@@ -1303,6 +1306,7 @@ Common.Settings.registerSettingExtension({
1303
1306
 
1304
1307
  Common.Settings.registerSettingExtension({
1305
1308
  category: Common.Settings.SettingCategory.SOURCES,
1309
+ storageType: Common.Settings.SettingStorageType.Synced,
1306
1310
  title: i18nLazyString(UIStrings.enableTabMovesFocus),
1307
1311
  settingName: 'textEditorTabMovesFocus',
1308
1312
  settingType: Common.Settings.SettingType.BOOLEAN,
@@ -1321,6 +1325,7 @@ Common.Settings.registerSettingExtension({
1321
1325
 
1322
1326
  Common.Settings.registerSettingExtension({
1323
1327
  category: Common.Settings.SettingCategory.SOURCES,
1328
+ storageType: Common.Settings.SettingStorageType.Synced,
1324
1329
  title: i18nLazyString(UIStrings.detectIndentation),
1325
1330
  settingName: 'textEditorAutoDetectIndent',
1326
1331
  settingType: Common.Settings.SettingType.BOOLEAN,
@@ -1339,6 +1344,7 @@ Common.Settings.registerSettingExtension({
1339
1344
 
1340
1345
  Common.Settings.registerSettingExtension({
1341
1346
  category: Common.Settings.SettingCategory.SOURCES,
1347
+ storageType: Common.Settings.SettingStorageType.Synced,
1342
1348
  title: i18nLazyString(UIStrings.autocompletion),
1343
1349
  settingName: 'textEditorAutocompletion',
1344
1350
  settingType: Common.Settings.SettingType.BOOLEAN,
@@ -1375,6 +1381,7 @@ Common.Settings.registerSettingExtension({
1375
1381
 
1376
1382
  Common.Settings.registerSettingExtension({
1377
1383
  category: Common.Settings.SettingCategory.SOURCES,
1384
+ storageType: Common.Settings.SettingStorageType.Synced,
1378
1385
  title: i18nLazyString(UIStrings.codeFolding),
1379
1386
  settingName: 'textEditorCodeFolding',
1380
1387
  settingType: Common.Settings.SettingType.BOOLEAN,
@@ -1393,6 +1400,7 @@ Common.Settings.registerSettingExtension({
1393
1400
 
1394
1401
  Common.Settings.registerSettingExtension({
1395
1402
  category: Common.Settings.SettingCategory.SOURCES,
1403
+ storageType: Common.Settings.SettingStorageType.Synced,
1396
1404
  title: i18nLazyString(UIStrings.showWhitespaceCharacters),
1397
1405
  settingName: 'showWhitespacesInEditor',
1398
1406
  settingType: Common.Settings.SettingType.ENUM,
@@ -1418,6 +1426,7 @@ Common.Settings.registerSettingExtension({
1418
1426
 
1419
1427
  Common.Settings.registerSettingExtension({
1420
1428
  category: Common.Settings.SettingCategory.SOURCES,
1429
+ storageType: Common.Settings.SettingStorageType.Synced,
1421
1430
  title: i18nLazyString(UIStrings.displayVariableValuesInlineWhile),
1422
1431
  settingName: 'inlineVariableValues',
1423
1432
  settingType: Common.Settings.SettingType.BOOLEAN,
@@ -1436,6 +1445,7 @@ Common.Settings.registerSettingExtension({
1436
1445
 
1437
1446
  Common.Settings.registerSettingExtension({
1438
1447
  category: Common.Settings.SettingCategory.SOURCES,
1448
+ storageType: Common.Settings.SettingStorageType.Synced,
1439
1449
  title: i18nLazyString(UIStrings.enableAutoFocusOnDebuggerPaused),
1440
1450
  settingName: 'autoFocusOnDebuggerPausedEnabled',
1441
1451
  settingType: Common.Settings.SettingType.BOOLEAN,
@@ -1454,6 +1464,7 @@ Common.Settings.registerSettingExtension({
1454
1464
 
1455
1465
  Common.Settings.registerSettingExtension({
1456
1466
  category: Common.Settings.SettingCategory.SOURCES,
1467
+ storageType: Common.Settings.SettingStorageType.Synced,
1457
1468
  title: i18nLazyString(UIStrings.enableCssSourceMaps),
1458
1469
  settingName: 'cssSourceMapsEnabled',
1459
1470
  settingType: Common.Settings.SettingType.BOOLEAN,
@@ -1472,6 +1483,7 @@ Common.Settings.registerSettingExtension({
1472
1483
 
1473
1484
  Common.Settings.registerSettingExtension({
1474
1485
  category: Common.Settings.SettingCategory.SOURCES,
1486
+ storageType: Common.Settings.SettingStorageType.Synced,
1475
1487
  title: i18nLazyString(UIStrings.allowScrollingPastEndOfFile),
1476
1488
  settingName: 'allowScrollPastEof',
1477
1489
  settingType: Common.Settings.SettingType.BOOLEAN,
@@ -7,12 +7,19 @@
7
7
  .watch-expression-delete-button {
8
8
  position: absolute;
9
9
  top: 5px;
10
- right: 16px;
11
10
  cursor: pointer;
12
11
  opacity: 0%;
13
12
  }
14
13
 
15
- .watch-expression-header:hover .watch-expression-delete-button {
14
+ .right-aligned {
15
+ right: 16px;
16
+ }
17
+
18
+ .left-aligned {
19
+ left: -11px;
20
+ }
21
+
22
+ .watch-expression-title:hover .watch-expression-delete-button {
16
23
  opacity: 100%;
17
24
  }
18
25
 
@@ -108,7 +115,7 @@ li.watch-expression-editing::before {
108
115
  }
109
116
 
110
117
  @media (forced-colors: active) {
111
- .watch-expression-header:hover .watch-expression-delete-button,
118
+ .watch-expression-title:hover .watch-expression-delete-button,
112
119
  .watch-expressions .dimmed {
113
120
  opacity: 100%;
114
121
  }
@@ -4,7 +4,6 @@
4
4
  "panels/coverage",
5
5
  "panels/layer_viewer",
6
6
  "ui/legacy/components/perf_ui",
7
- "ui/legacy/components/data_grid",
8
7
  "panels/profiler",
9
8
  "panels/mobile_throttling"
10
9
  ]
@@ -390,6 +390,7 @@ UI.ActionRegistration.registerActionExtension({
390
390
 
391
391
  Common.Settings.registerSettingExtension({
392
392
  category: Common.Settings.SettingCategory.PERFORMANCE,
393
+ storageType: Common.Settings.SettingStorageType.Synced,
393
394
  title: i18nLazyString(UIStrings.hideChromeFrameInLayersView),
394
395
  settingName: 'frameViewerHideChromeWindow',
395
396
  settingType: Common.Settings.SettingType.BOOLEAN,
@@ -1,6 +1,5 @@
1
1
  {
2
2
  "dependencies": [
3
- "ui/legacy/components/data_grid",
4
3
  "ui/legacy"
5
4
  ]
6
5
  }
@@ -57,7 +57,7 @@ export const tabMovesFocus = DynamicSetting.bool('textEditorTabMovesFocus', CM.k
57
57
  shift: (view: CM.EditorView): boolean => view.state.doc.length ? CM.indentLess(view) : false,
58
58
  }]));
59
59
 
60
- export const autocompletion = DynamicSetting.bool('textEditorAutocompletion', CM.autocompletion());
60
+ export const autocompletion = DynamicSetting.bool('textEditorAutocompletion', CM.autocompletion({icons: false}));
61
61
 
62
62
  export const bracketMatching = DynamicSetting.bool('textEditorBracketMatching', CM.bracketMatching());
63
63
 
@@ -112,6 +112,14 @@ export const editorTheme = CM.EditorView.theme({
112
112
  width: 'fit-content',
113
113
  },
114
114
 
115
+ '.cm-tooltip.cm-tooltip-autocomplete > ul': {
116
+ minWidth: '16em',
117
+ '& > li[aria-selected]': {
118
+ backgroundColor: 'var(--color-selected-option-background)',
119
+ color: 'var(--color-selected-option)',
120
+ },
121
+ },
122
+
115
123
  '.cm-highlightedLine': {
116
124
  animation: 'cm-fading-highlight 2s 0s',
117
125
  },
@@ -58,6 +58,10 @@ export class GlassPane {
58
58
  this.widgetInternal.registerRequiredCSS(cssFile);
59
59
  }
60
60
 
61
+ registerCSSFiles(cssFiles: CSSStyleSheet[]): void {
62
+ this.widgetInternal.registerCSSFiles(cssFiles);
63
+ }
64
+
61
65
  setDefaultFocusedElement(element: Element|null): void {
62
66
  this.widgetInternal.setDefaultFocusedElement(element);
63
67
  }
@@ -443,10 +443,6 @@ function getDisableLocaleInfoBarSetting(): Common.Settings.Setting<boolean> {
443
443
  }
444
444
 
445
445
  function shouldShowLocaleInfobar(): boolean {
446
- if (!Root.Runtime.experiments.isEnabled(Root.Runtime.ExperimentName.LOCALIZED_DEVTOOLS)) {
447
- return false;
448
- }
449
-
450
446
  if (getDisableLocaleInfoBarSetting().get()) {
451
447
  return false;
452
448
  }
@@ -251,6 +251,10 @@ export class TabbedPane extends Common.ObjectWrapper.eventMixin<EventTypes, type
251
251
  }
252
252
 
253
253
  closeTabs(ids: string[], userGesture?: boolean): void {
254
+ if (ids.length === 0) {
255
+ return;
256
+ }
257
+
254
258
  const focused = this.hasFocus();
255
259
  for (let i = 0; i < ids.length; ++i) {
256
260
  this.innerCloseTab(ids[i], userGesture);
@@ -28,6 +28,11 @@ const UIStrings = {
28
28
  };
29
29
  const str_ = i18n.i18n.registerUIStrings('ui/legacy/ViewManager.ts', UIStrings);
30
30
  const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
31
+
32
+ export const defaultOptionsForTabs = {
33
+ security: true,
34
+ };
35
+
31
36
  export class PreRegisteredView implements View {
32
37
  private readonly viewRegistration: ViewRegistration;
33
38
  private widgetRequested: boolean;
@@ -615,9 +620,12 @@ export class _TabbedLocation extends Location implements TabbedViewLocation {
615
620
  private setOrUpdateCloseableTabsSetting(): void {
616
621
  // Update the setting value, we respect the closed state decided by the user
617
622
  // and append the new tabs with value of true so they are shown open
618
- const defaultOptionsForTabs = {'security': true};
619
623
  const tabs = this.closeableTabSetting.get();
620
- const newClosable = Object.assign(defaultOptionsForTabs, tabs);
624
+ const newClosable = Object.assign(
625
+ {
626
+ ...defaultOptionsForTabs,
627
+ },
628
+ tabs);
621
629
  this.closeableTabSetting.set(newClosable);
622
630
  }
623
631
 
@@ -1,7 +1,6 @@
1
1
  {
2
2
  "dependencies": [
3
- "ui/legacy",
4
- "ui/legacy/components/data_grid"
3
+ "ui/legacy"
5
4
  ],
6
5
  "resources": [
7
6
  "cookiesTable.css"
@@ -31,6 +31,8 @@ import * as i18n from '../../../../core/i18n/i18n.js';
31
31
  import * as Platform from '../../../../core/platform/platform.js';
32
32
  import * as UI from '../../legacy.js';
33
33
 
34
+ import dataGridStyles from './dataGrid.css.js';
35
+
34
36
  const UIStrings = {
35
37
  /**
36
38
  *@description Accessible text label for expandible nodes in datagrids
@@ -169,7 +171,6 @@ export class DataGridImpl<T> extends Common.ObjectWrapper.ObjectWrapper<EventTyp
169
171
  const {displayName, columns: columnsArray, editCallback, deleteCallback, refreshCallback} = dataGridParameters;
170
172
  this.element = document.createElement('div');
171
173
  this.element.classList.add('data-grid');
172
- UI.Utils.appendStyle(this.element, 'ui/legacy/components/data_grid/dataGrid.css');
173
174
  this.element.tabIndex = 0;
174
175
  this.element.addEventListener('keydown', this.keyDown.bind(this), false);
175
176
  this.element.addEventListener('contextmenu', this.contextMenu.bind(this), true);
@@ -2351,6 +2352,7 @@ export class DataGridWidget<T> extends UI.Widget.VBox {
2351
2352
  }
2352
2353
 
2353
2354
  wasShown(): void {
2355
+ this.registerCSSFiles([dataGridStyles]);
2354
2356
  this.dataGrid.wasShown();
2355
2357
  }
2356
2358
 
@@ -154,6 +154,7 @@
154
154
  }
155
155
 
156
156
  .data-grid th .sort-order-icon-container {
157
+ background-color: var(--color-background-elevation-1);
157
158
  position: absolute;
158
159
  top: 1px;
159
160
  right: 0;
@@ -162,6 +163,10 @@
162
163
  align-items: center;
163
164
  }
164
165
 
166
+ .data-grid th:hover .sort-order-icon-container {
167
+ background-color: var(--color-background-highlight);
168
+ }
169
+
165
170
  .data-grid th .sort-order-icon {
166
171
  margin-right: 4px;
167
172
  margin-bottom: -2px;
@@ -77,6 +77,10 @@ export class CSSLength extends HTMLElement {
77
77
  }
78
78
 
79
79
  private onValueMousedown(event: MouseEvent): void {
80
+ if (event.button !== 0) {
81
+ return;
82
+ }
83
+
80
84
  this.currentMouseClientX = event.clientX;
81
85
  const targetDocument = event.target instanceof Node && event.target.ownerDocument;
82
86
  if (targetDocument) {
@@ -136,9 +140,12 @@ export class CSSLength extends HTMLElement {
136
140
  <span class="value"
137
141
  @mousedown=${this.onValueMousedown}
138
142
  @mouseup=${this.onValueMouseup}
139
- >${this.length.value}</span><select class="unit ${this.length.unit}" @mouseup=${this.onUnitMouseup} @change=${this.onUnitChange}>
140
- ${options}
141
- </select>
143
+ >${this.length.value}</span><span class="unit">${this.length.unit}</span><div class="unit-dropdown">
144
+ <span class="icon"></span>
145
+ <select @mouseup=${this.onUnitMouseup} @change=${this.onUnitChange}>
146
+ ${options}
147
+ </select>
148
+ </div>
142
149
  `;
143
150
  // clang-format on
144
151
  }
@@ -14,21 +14,42 @@
14
14
  cursor: ew-resize;
15
15
  }
16
16
 
17
- select.unit {
17
+ .unit-dropdown {
18
+ display: none;
19
+ }
20
+
21
+ .unit-dropdown select {
18
22
  all: unset;
19
23
  cursor: pointer;
20
- width: 2ch;
24
+ opacity: 0%;
25
+ width: 0.8em;
26
+ }
27
+
28
+ .icon {
29
+ position: absolute;
30
+ display: inline-block;
31
+ -webkit-mask-image: var(--image-file-chevrons);
32
+ -webkit-mask-position: -12px 4px;
33
+ -webkit-mask-size: 19px 6px;
34
+ -webkit-mask-repeat: no-repeat;
35
+ background-color: var(--color-text-primary);
36
+ content: '';
37
+ height: 1em;
38
+ width: 1em;
39
+ }
40
+
41
+ :host(:not(:last-child)) {
42
+ margin-right: 0.1em;
21
43
  }
22
44
 
23
- select.unit:hover {
24
- text-decoration: underline;
45
+ :host(:not(:last-child)) .unit-dropdown {
46
+ position: absolute;
25
47
  }
26
48
 
27
- select.unit.rem {
28
- width: 3ch;
49
+ .css-length:hover .unit-dropdown {
50
+ display: inline-block;
29
51
  }
30
52
 
31
- select.unit.vmin,
32
- select.unit.vmax {
33
- width: 4ch;
53
+ :host(:last-child) .unit-dropdown select {
54
+ width: 0.6em;
34
55
  }
@@ -9,6 +9,7 @@ import * as UI from '../../legacy.js';
9
9
  import type * as Protocol from '../../../../generated/protocol.js';
10
10
 
11
11
  import {ObjectPropertiesSection} from './ObjectPropertiesSection.js';
12
+ import customPreviewComponentStyles from './customPreviewComponent.css.js';
12
13
 
13
14
  const UIStrings = {
14
15
  /**
@@ -188,7 +189,7 @@ export class CustomPreviewComponent {
188
189
  this.element = document.createElement('span');
189
190
  this.element.classList.add('source-code');
190
191
  const shadowRoot = UI.Utils.createShadowRootWithCoreStyles(this.element, {
191
- cssFile: 'ui/legacy/components/object_ui/customPreviewComponent.css',
192
+ cssFile: [customPreviewComponentStyles],
192
193
  delegatesFocus: undefined,
193
194
  });
194
195
  this.element.addEventListener('contextmenu', this.contextMenuEventFired.bind(this), false);
@@ -34,7 +34,9 @@ import * as UI from '../../legacy.js';
34
34
  import * as Components from '../utils/utils.js';
35
35
 
36
36
  import {CustomPreviewComponent} from './CustomPreviewComponent.js';
37
+ import objectPopoverStyles from './objectPopover.css.js';
37
38
  import {ObjectPropertiesSection} from './ObjectPropertiesSection.js';
39
+ import objectValueStyles from './objectValue.css.js';
38
40
 
39
41
  export class ObjectPopoverHelper {
40
42
  private readonly linkifier: Components.Linkifier.Linkifier|null;
@@ -72,7 +74,7 @@ export class ObjectPopoverHelper {
72
74
  } else {
73
75
  popoverContentElement = document.createElement('div');
74
76
  popoverContentElement.classList.add('object-popover-content');
75
- UI.Utils.appendStyle(popoverContentElement, 'ui/legacy/components/object_ui/objectPopover.css');
77
+ popover.registerCSSFiles([objectPopoverStyles]);
76
78
  const titleElement = popoverContentElement.createChild('div', 'monospace object-popover-title');
77
79
  titleElement.createChild('span').textContent = description;
78
80
  linkifier = new Components.Linkifier.Linkifier();
@@ -90,8 +92,7 @@ export class ObjectPopoverHelper {
90
92
 
91
93
  popoverContentElement = document.createElement('span');
92
94
  popoverContentElement.dataset.stableNameForTest = 'object-popover-content';
93
- UI.Utils.appendStyle(popoverContentElement, 'ui/legacy/components/object_ui/objectValue.css');
94
- UI.Utils.appendStyle(popoverContentElement, 'ui/legacy/components/object_ui/objectPopover.css');
95
+ popover.registerCSSFiles([objectValueStyles, objectPopoverStyles]);
95
96
  const valueElement = popoverContentElement.createChild('span', 'monospace object-value-' + result.type);
96
97
  valueElement.style.whiteSpace = 'pre';
97
98