chrome-devtools-frontend 1.0.970302 → 1.0.971727

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 (100) hide show
  1. package/config/gni/devtools_grd_files.gni +11 -7
  2. package/config/gni/devtools_image_files.gni +1 -0
  3. package/front_end/Images/src/ic_changes.svg +5 -0
  4. package/front_end/core/common/ParsedURL.ts +33 -4
  5. package/front_end/core/host/UserMetrics.ts +4 -1
  6. package/front_end/core/i18n/locales/en-US.json +21 -3
  7. package/front_end/core/i18n/locales/en-XL.json +21 -3
  8. package/front_end/core/platform/UserVisibleError.ts +28 -0
  9. package/front_end/core/platform/platform.ts +2 -0
  10. package/front_end/core/sdk/CSSModel.ts +21 -0
  11. package/front_end/core/sdk/CSSStyleSheetHeader.ts +10 -10
  12. package/front_end/core/sdk/ChildTargetManager.ts +0 -1
  13. package/front_end/core/sdk/CompilerSourceMappingContentProvider.ts +6 -4
  14. package/front_end/core/sdk/DOMDebuggerModel.ts +4 -3
  15. package/front_end/core/sdk/DebuggerModel.ts +21 -16
  16. package/front_end/core/sdk/NetworkManager.ts +17 -3
  17. package/front_end/core/sdk/NetworkRequest.ts +16 -5
  18. package/front_end/core/sdk/Resource.ts +10 -10
  19. package/front_end/core/sdk/ResourceTreeModel.ts +18 -13
  20. package/front_end/core/sdk/Script.ts +10 -10
  21. package/front_end/core/sdk/SourceMap.ts +3 -1
  22. package/front_end/entrypoints/lighthouse_worker/LighthouseService.ts +15 -6
  23. package/front_end/entrypoints/main/MainImpl.ts +8 -0
  24. package/front_end/generated/InspectorBackendCommands.js +14 -8
  25. package/front_end/generated/SupportedCSSProperties.js +2 -0
  26. package/front_end/generated/protocol-mapping.d.ts +5 -0
  27. package/front_end/generated/protocol-proxy-api.d.ts +5 -0
  28. package/front_end/generated/protocol.ts +20 -12
  29. package/front_end/models/bindings/BreakpointManager.ts +7 -5
  30. package/front_end/models/bindings/CSSWorkspaceBinding.ts +21 -0
  31. package/front_end/models/bindings/DebuggerLanguagePlugins.ts +2 -1
  32. package/front_end/models/bindings/ResourceMapping.ts +2 -1
  33. package/front_end/models/bindings/ResourceScriptMapping.ts +2 -1
  34. package/front_end/models/bindings/StylesSourceMapping.ts +2 -1
  35. package/front_end/models/issues_manager/FederatedAuthRequestIssue.ts +12 -12
  36. package/front_end/models/issues_manager/descriptions/{federatedAuthRequestClientIdMetadataHttpNotFound.md → federatedAuthRequestClientMetadataHttpNotFound.md} +0 -0
  37. package/front_end/models/issues_manager/descriptions/{federatedAuthRequestClientIdMetadataInvalidResponse.md → federatedAuthRequestClientMetadataInvalidResponse.md} +0 -0
  38. package/front_end/models/issues_manager/descriptions/{federatedAuthRequestClientIdMetadataNoResponse.md → federatedAuthRequestClientMetadataNoResponse.md} +0 -0
  39. package/front_end/models/issues_manager/descriptions/federatedAuthRequestManifestHttpNotFound.md +1 -0
  40. package/front_end/models/issues_manager/descriptions/federatedAuthRequestManifestInvalidResponse.md +1 -0
  41. package/front_end/models/issues_manager/descriptions/federatedAuthRequestManifestNoResponse.md +1 -0
  42. package/front_end/models/persistence/Automapping.ts +3 -33
  43. package/front_end/models/persistence/FileSystemWorkspaceBinding.ts +12 -10
  44. package/front_end/models/persistence/IsolatedFileSystem.ts +26 -22
  45. package/front_end/models/persistence/NetworkPersistenceManager.ts +8 -4
  46. package/front_end/models/persistence/PersistenceActions.ts +1 -4
  47. package/front_end/models/persistence/PlatformFileSystem.ts +6 -5
  48. package/front_end/{panels/sources/SourceMapNamesResolver.ts → models/source_map_scopes/NamesResolver.ts} +5 -5
  49. package/front_end/models/source_map_scopes/source_map_scopes.ts +7 -0
  50. package/front_end/models/text_utils/ContentProvider.ts +2 -1
  51. package/front_end/models/text_utils/StaticContentProvider.ts +5 -4
  52. package/front_end/models/workspace/UISourceCode.ts +18 -21
  53. package/front_end/models/workspace/WorkspaceImpl.ts +3 -1
  54. package/front_end/panels/application/ServiceWorkerCacheViews.ts +1 -1
  55. package/front_end/panels/browser_debugger/categorizedBreakpointsSidebarPane.css +0 -1
  56. package/front_end/panels/console/ConsolePrompt.ts +25 -2
  57. package/front_end/panels/console/ConsoleViewMessage.ts +41 -8
  58. package/front_end/panels/coverage/CoverageModel.ts +1 -1
  59. package/front_end/panels/elements/ElementsPanel.ts +25 -11
  60. package/front_end/panels/elements/ElementsTreeElement.ts +0 -6
  61. package/front_end/panels/elements/StylesSidebarPane.ts +214 -41
  62. package/front_end/panels/elements/elementsTreeOutline.css +0 -1
  63. package/front_end/panels/issues/AffectedResourcesView.ts +1 -1
  64. package/front_end/panels/issues/AffectedSourcesView.ts +1 -1
  65. package/front_end/panels/lighthouse/LighthouseController.ts +30 -0
  66. package/front_end/panels/lighthouse/LighthousePanel.ts +7 -1
  67. package/front_end/panels/lighthouse/LighthouseProtocolService.ts +6 -1
  68. package/front_end/panels/lighthouse/LighthouseReportRenderer.ts +0 -5
  69. package/front_end/panels/lighthouse/LighthouseStartView.ts +2 -2
  70. package/front_end/panels/lighthouse/LighthouseStartViewFR.ts +39 -0
  71. package/front_end/panels/network/NetworkDataGridNode.ts +1 -1
  72. package/front_end/panels/profiler/CPUProfileView.ts +1 -1
  73. package/front_end/panels/profiler/HeapProfileView.ts +0 -2
  74. package/front_end/panels/profiler/HeapSnapshotGridNodes.ts +0 -1
  75. package/front_end/panels/profiler/HeapSnapshotView.ts +2 -3
  76. package/front_end/panels/sensors/sensors.css +0 -1
  77. package/front_end/panels/snippets/ScriptSnippetFileSystem.ts +5 -5
  78. package/front_end/panels/snippets/SnippetsQuickOpen.ts +1 -1
  79. package/front_end/panels/sources/DebuggerPlugin.ts +5 -4
  80. package/front_end/panels/sources/NavigatorView.ts +10 -6
  81. package/front_end/panels/sources/ScopeChainSidebarPane.ts +6 -3
  82. package/front_end/panels/sources/SourcesNavigator.ts +7 -1
  83. package/front_end/panels/sources/TabbedEditorContainer.ts +9 -0
  84. package/front_end/panels/sources/sources-legacy.ts +5 -16
  85. package/front_end/panels/sources/sources.ts +0 -2
  86. package/front_end/panels/sources/sourcesView.css +0 -4
  87. package/front_end/panels/timeline/TimelineUIUtils.ts +4 -47
  88. package/front_end/ui/legacy/ViewManager.ts +2 -1
  89. package/front_end/ui/legacy/closeButton.css +0 -1
  90. package/front_end/ui/legacy/components/source_frame/FontView.ts +1 -1
  91. package/front_end/ui/legacy/components/source_frame/ImageView.ts +1 -1
  92. package/front_end/ui/legacy/components/utils/JSPresentationUtils.ts +2 -3
  93. package/front_end/ui/legacy/components/utils/Linkifier.ts +20 -59
  94. package/front_end/ui/legacy/tabbedPane.css +0 -3
  95. package/front_end/ui/legacy/toolbar.css +28 -3
  96. package/package.json +1 -1
  97. package/scripts/npm_test.js +1 -1
  98. package/front_end/models/issues_manager/descriptions/federatedAuthRequestWellKnownHttpNotFound.md +0 -1
  99. package/front_end/models/issues_manager/descriptions/federatedAuthRequestWellKnownInvalidResponse.md +0 -1
  100. package/front_end/models/issues_manager/descriptions/federatedAuthRequestWellKnownNoResponse.md +0 -1
@@ -412,6 +412,16 @@ export class NetworkDispatcher implements ProtocolProxyApi.NetworkDispatcher {
412
412
  * once it is created in `requestWillBeSent`.
413
413
  */
414
414
  this.#requestIdToTrustTokenEvent = new Map();
415
+
416
+ MultitargetNetworkManager.instance().addEventListener(
417
+ MultitargetNetworkManager.Events.RequestIntercepted, this.#markAsIntercepted.bind(this));
418
+ }
419
+
420
+ #markAsIntercepted(event: Common.EventTarget.EventTargetEvent<string>): void {
421
+ const request = this.requestForURL(event.data);
422
+ if (request) {
423
+ request.setWasIntercepted(true);
424
+ }
415
425
  }
416
426
 
417
427
  private headersMapToHeadersArray(headersMap: Protocol.Network.Headers): NameValue[] {
@@ -446,7 +456,7 @@ export class NetworkDispatcher implements ProtocolProxyApi.NetworkDispatcher {
446
456
  if (!networkRequest.statusText) {
447
457
  networkRequest.statusText = response.statusText;
448
458
  }
449
- if (!networkRequest.hasExtraResponseInfo()) {
459
+ if (!networkRequest.hasExtraResponseInfo() || networkRequest.wasIntercepted()) {
450
460
  networkRequest.responseHeaders = this.headersMapToHeadersArray(response.headers);
451
461
  }
452
462
 
@@ -620,7 +630,7 @@ export class NetworkDispatcher implements ProtocolProxyApi.NetworkDispatcher {
620
630
  const lastModifiedHeader = lowercaseHeaders['last-modified'];
621
631
  // We missed the requestWillBeSent.
622
632
  const eventData: RequestUpdateDroppedEventData = {
623
- url: response.url,
633
+ url: response.url as Platform.DevToolsPath.UrlString,
624
634
  frameId: frameId ?? null,
625
635
  loaderId: loaderId,
626
636
  resourceType: type,
@@ -1401,6 +1411,8 @@ export class MultitargetNetworkManager extends Common.ObjectWrapper.ObjectWrappe
1401
1411
  for (const requestInterceptor of this.#urlsForRequestInterceptor.keysArray()) {
1402
1412
  await requestInterceptor(interceptedRequest);
1403
1413
  if (interceptedRequest.hasResponded()) {
1414
+ this.dispatchEventToListeners(
1415
+ MultitargetNetworkManager.Events.RequestIntercepted, interceptedRequest.request.url);
1404
1416
  return;
1405
1417
  }
1406
1418
  }
@@ -1467,6 +1479,7 @@ export namespace MultitargetNetworkManager {
1467
1479
  UserAgentChanged = 'UserAgentChanged',
1468
1480
  InterceptorsChanged = 'InterceptorsChanged',
1469
1481
  AcceptedEncodingsChanged = 'AcceptedEncodingsChanged',
1482
+ RequestIntercepted = 'RequestIntercepted',
1470
1483
  }
1471
1484
 
1472
1485
  export type EventTypes = {
@@ -1475,6 +1488,7 @@ export namespace MultitargetNetworkManager {
1475
1488
  [Events.UserAgentChanged]: void,
1476
1489
  [Events.InterceptorsChanged]: void,
1477
1490
  [Events.AcceptedEncodingsChanged]: void,
1491
+ [Events.RequestIntercepted]: string,
1478
1492
  };
1479
1493
  }
1480
1494
 
@@ -1709,7 +1723,7 @@ export interface InterceptionPattern {
1709
1723
  export type RequestInterceptor = (request: InterceptedRequest) => Promise<void>;
1710
1724
 
1711
1725
  export interface RequestUpdateDroppedEventData {
1712
- url: string;
1726
+ url: Platform.DevToolsPath.UrlString;
1713
1727
  frameId: Protocol.Page.FrameId|null;
1714
1728
  loaderId: Protocol.Network.LoaderId;
1715
1729
  resourceType: Protocol.Network.ResourceType;
@@ -257,7 +257,7 @@ export class NetworkRequest extends Common.ObjectWrapper.ObjectWrapper<EventType
257
257
  #includedRequestCookiesInternal: Cookie[];
258
258
  #blockedResponseCookiesInternal: BlockedSetCookieWithReason[];
259
259
  localizedFailDescription: string|null;
260
- #urlInternal!: string;
260
+ #urlInternal!: Platform.DevToolsPath.UrlString;
261
261
  #responseReceivedTimeInternal!: number;
262
262
  #transferSizeInternal!: number;
263
263
  #finishedInternal!: boolean;
@@ -290,6 +290,7 @@ export class NetworkRequest extends Common.ObjectWrapper.ObjectWrapper<EventType
290
290
  #parsedQueryParameters?: NameValue[];
291
291
  #contentDataProvider?: (() => Promise<ContentData>);
292
292
  #isSameSiteInternal: boolean|null;
293
+ #wasIntercepted: boolean;
293
294
 
294
295
  private constructor(
295
296
  requestId: string, backendRequestId: Protocol.Network.RequestId|undefined, url: string, documentURL: string,
@@ -363,6 +364,8 @@ export class NetworkRequest extends Common.ObjectWrapper.ObjectWrapper<EventType
363
364
 
364
365
  this.localizedFailDescription = null;
365
366
  this.#isSameSiteInternal = null;
367
+
368
+ this.#wasIntercepted = false;
366
369
  }
367
370
 
368
371
  static create(
@@ -403,7 +406,7 @@ export class NetworkRequest extends Common.ObjectWrapper.ObjectWrapper<EventType
403
406
  return this.#backendRequestIdInternal;
404
407
  }
405
408
 
406
- url(): string {
409
+ url(): Platform.DevToolsPath.UrlString {
407
410
  return this.#urlInternal;
408
411
  }
409
412
 
@@ -411,12 +414,13 @@ export class NetworkRequest extends Common.ObjectWrapper.ObjectWrapper<EventType
411
414
  return this.#urlInternal.startsWith('blob:');
412
415
  }
413
416
 
417
+ // TODO(crbug.com/1253323): Cast to UrlString will be removed when migration to branded types is complete.
414
418
  setUrl(x: string): void {
415
419
  if (this.#urlInternal === x) {
416
420
  return;
417
421
  }
418
422
 
419
- this.#urlInternal = x;
423
+ this.#urlInternal = x as Platform.DevToolsPath.UrlString;
420
424
  this.#parsedURLInternal = new Common.ParsedURL.ParsedURL(x);
421
425
  this.#queryStringInternal = undefined;
422
426
  this.#parsedQueryParameters = undefined;
@@ -964,6 +968,14 @@ export class NetworkRequest extends Common.ObjectWrapper.ObjectWrapper<EventType
964
968
  return this.#responseHeaderValues[headerName];
965
969
  }
966
970
 
971
+ wasIntercepted(): boolean {
972
+ return this.#wasIntercepted;
973
+ }
974
+
975
+ setWasIntercepted(wasIntercepted: boolean): void {
976
+ this.#wasIntercepted = wasIntercepted;
977
+ }
978
+
967
979
  get responseCookies(): Cookie[] {
968
980
  if (!this.#responseCookiesInternal) {
969
981
  this.#responseCookiesInternal =
@@ -1175,8 +1187,7 @@ export class NetworkRequest extends Common.ObjectWrapper.ObjectWrapper<EventType
1175
1187
  this.#contentDataProvider = dataProvider;
1176
1188
  }
1177
1189
 
1178
- // TODO(crbug.com/1253323): Cast to RawPathString will be removed when migration to branded types is complete.
1179
- contentURL(): string {
1190
+ contentURL(): Platform.DevToolsPath.UrlString {
1180
1191
  return this.#urlInternal;
1181
1192
  }
1182
1193
 
@@ -42,8 +42,8 @@ import type {ResourceTreeFrame, ResourceTreeModel} from './ResourceTreeModel.js'
42
42
  export class Resource implements TextUtils.ContentProvider.ContentProvider {
43
43
  readonly #resourceTreeModel: ResourceTreeModel;
44
44
  #requestInternal: NetworkRequest|null;
45
- #urlInternal!: string;
46
- readonly #documentURLInternal: string;
45
+ #urlInternal!: Platform.DevToolsPath.UrlString;
46
+ readonly #documentURLInternal: Platform.DevToolsPath.UrlString;
47
47
  readonly #frameIdInternal: Protocol.Page.FrameId|null;
48
48
  readonly #loaderIdInternal: Protocol.Network.LoaderId|null;
49
49
  readonly #type: Common.ResourceType.ResourceType;
@@ -58,9 +58,10 @@ export class Resource implements TextUtils.ContentProvider.ContentProvider {
58
58
  #contentRequested?: boolean;
59
59
 
60
60
  constructor(
61
- resourceTreeModel: ResourceTreeModel, request: NetworkRequest|null, url: string, documentURL: string,
62
- frameId: Protocol.Page.FrameId|null, loaderId: Protocol.Network.LoaderId|null,
63
- type: Common.ResourceType.ResourceType, mimeType: string, lastModified: Date|null, contentSize: number|null) {
61
+ resourceTreeModel: ResourceTreeModel, request: NetworkRequest|null, url: Platform.DevToolsPath.UrlString,
62
+ documentURL: Platform.DevToolsPath.UrlString, frameId: Protocol.Page.FrameId|null,
63
+ loaderId: Protocol.Network.LoaderId|null, type: Common.ResourceType.ResourceType, mimeType: string,
64
+ lastModified: Date|null, contentSize: number|null) {
64
65
  this.#resourceTreeModel = resourceTreeModel;
65
66
  this.#requestInternal = request;
66
67
  this.url = url;
@@ -101,11 +102,11 @@ export class Resource implements TextUtils.ContentProvider.ContentProvider {
101
102
  return this.#requestInternal;
102
103
  }
103
104
 
104
- get url(): string {
105
+ get url(): Platform.DevToolsPath.UrlString {
105
106
  return this.#urlInternal;
106
107
  }
107
108
 
108
- set url(x: string) {
109
+ set url(x: Platform.DevToolsPath.UrlString) {
109
110
  this.#urlInternal = x;
110
111
  this.#parsedURLInternal = new Common.ParsedURL.ParsedURL(x);
111
112
  }
@@ -114,7 +115,7 @@ export class Resource implements TextUtils.ContentProvider.ContentProvider {
114
115
  return this.#parsedURLInternal;
115
116
  }
116
117
 
117
- get documentURL(): string {
118
+ get documentURL(): Platform.DevToolsPath.UrlString {
118
119
  return this.#documentURLInternal;
119
120
  }
120
121
 
@@ -150,8 +151,7 @@ export class Resource implements TextUtils.ContentProvider.ContentProvider {
150
151
  this.#isGeneratedInternal = val;
151
152
  }
152
153
 
153
- // TODO(crbug.com/1253323): Cast to RawPathString will be removed when migration to branded types is complete.
154
- contentURL(): string {
154
+ contentURL(): Platform.DevToolsPath.UrlString {
155
155
  return this.#urlInternal;
156
156
  }
157
157
 
@@ -34,6 +34,7 @@
34
34
 
35
35
  import * as Common from '../common/common.js';
36
36
  import * as i18n from '../i18n/i18n.js';
37
+ import type * as Platform from '../platform/platform.js';
37
38
  import type * as ProtocolProxyApi from '../../generated/protocol-proxy-api.js';
38
39
  import * as Protocol from '../../generated/protocol.js';
39
40
 
@@ -50,6 +51,8 @@ import {SDKModel} from './SDKModel.js';
50
51
  import {TargetManager} from './TargetManager.js';
51
52
  import {SecurityOriginManager} from './SecurityOriginManager.js';
52
53
 
54
+ // TODO(crbug.com/1253323): Casts to UrlString will be removed from this file when migration to branded types is complete.
55
+
53
56
  export class ResourceTreeModel extends SDKModel<EventTypes> {
54
57
  readonly agent: ProtocolProxyApi.PageApi;
55
58
  readonly #securityOriginManager: SecurityOriginManager;
@@ -237,8 +240,8 @@ export class ResourceTreeModel extends SDKModel<EventTypes> {
237
240
  const frame = this.framesInternal.get(framePayload.id);
238
241
  if (frame && !frame.getResourcesMap().get(framePayload.url)) {
239
242
  const frameResource = this.createResourceFromFramePayload(
240
- framePayload, framePayload.url, Common.ResourceType.resourceTypes.Document, framePayload.mimeType, null,
241
- null);
243
+ framePayload, framePayload.url as Platform.DevToolsPath.UrlString, Common.ResourceType.resourceTypes.Document,
244
+ framePayload.mimeType, null, null);
242
245
  frameResource.isGenerated = true;
243
246
  frame.addResource(frameResource);
244
247
  }
@@ -301,8 +304,8 @@ export class ResourceTreeModel extends SDKModel<EventTypes> {
301
304
  }
302
305
 
303
306
  const resource = new Resource(
304
- this, null, url, frame.url, frameId, data.loaderId, Common.ResourceType.resourceTypes[data.resourceType],
305
- data.mimeType, data.lastModified, null);
307
+ this, null, url, frame.url as Platform.DevToolsPath.UrlString, frameId, data.loaderId,
308
+ Common.ResourceType.resourceTypes[data.resourceType], data.mimeType, data.lastModified, null);
306
309
  frame.addResource(resource);
307
310
  }
308
311
 
@@ -342,25 +345,27 @@ export class ResourceTreeModel extends SDKModel<EventTypes> {
342
345
  for (let i = 0; i < frameTreePayload.resources.length; ++i) {
343
346
  const subresource = frameTreePayload.resources[i];
344
347
  const resource = this.createResourceFromFramePayload(
345
- framePayload, subresource.url, Common.ResourceType.resourceTypes[subresource.type], subresource.mimeType,
346
- subresource.lastModified || null, subresource.contentSize || null);
348
+ framePayload, subresource.url as Platform.DevToolsPath.UrlString,
349
+ Common.ResourceType.resourceTypes[subresource.type], subresource.mimeType, subresource.lastModified || null,
350
+ subresource.contentSize || null);
347
351
  frame.addResource(resource);
348
352
  }
349
353
 
350
354
  if (!frame.getResourcesMap().get(framePayload.url)) {
351
355
  const frameResource = this.createResourceFromFramePayload(
352
- framePayload, framePayload.url, Common.ResourceType.resourceTypes.Document, framePayload.mimeType, null,
353
- null);
356
+ framePayload, framePayload.url as Platform.DevToolsPath.UrlString, Common.ResourceType.resourceTypes.Document,
357
+ framePayload.mimeType, null, null);
354
358
  frame.addResource(frameResource);
355
359
  }
356
360
  }
357
361
 
358
362
  private createResourceFromFramePayload(
359
- frame: Protocol.Page.Frame, url: string, type: Common.ResourceType.ResourceType, mimeType: string,
360
- lastModifiedTime: number|null, contentSize: number|null): Resource {
363
+ frame: Protocol.Page.Frame, url: Platform.DevToolsPath.UrlString, type: Common.ResourceType.ResourceType,
364
+ mimeType: string, lastModifiedTime: number|null, contentSize: number|null): Resource {
361
365
  const lastModified = typeof lastModifiedTime === 'number' ? new Date(lastModifiedTime * 1000) : null;
362
366
  return new Resource(
363
- this, null, url, frame.url, frame.id, frame.loaderId, type, mimeType, lastModified, contentSize);
367
+ this, null, url, frame.url as Platform.DevToolsPath.UrlString, frame.id, frame.loaderId, type, mimeType,
368
+ lastModified, contentSize);
364
369
  }
365
370
 
366
371
  suspendReload(): void {
@@ -842,8 +847,8 @@ export class ResourceTreeFrame {
842
847
  return;
843
848
  }
844
849
  resource = new Resource(
845
- this.#model, request, request.url(), request.documentURL, request.frameId, request.loaderId,
846
- request.resourceType(), request.mimeType, null, null);
850
+ this.#model, request, request.url(), request.documentURL as Platform.DevToolsPath.UrlString, request.frameId,
851
+ request.loaderId, request.resourceType(), request.mimeType, null, null);
847
852
  this.resourcesMap.set(resource.url, resource);
848
853
  this.#model.dispatchEventToListeners(Events.ResourceAdded, resource);
849
854
  }
@@ -29,6 +29,7 @@
29
29
 
30
30
  import * as Protocol from '../../generated/protocol.js';
31
31
  import * as TextUtils from '../../models/text_utils/text_utils.js';
32
+ import type * as Platform from '../../core/platform/platform.js';
32
33
  import * as Common from '../common/common.js';
33
34
  import * as i18n from '../i18n/i18n.js';
34
35
 
@@ -56,7 +57,7 @@ const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
56
57
  export class Script implements TextUtils.ContentProvider.ContentProvider, FrameAssociated {
57
58
  debuggerModel: DebuggerModel;
58
59
  scriptId: Protocol.Runtime.ScriptId;
59
- sourceURL: string;
60
+ sourceURL: Platform.DevToolsPath.UrlString;
60
61
  lineOffset: number;
61
62
  columnOffset: number;
62
63
  endLine: number;
@@ -65,7 +66,7 @@ export class Script implements TextUtils.ContentProvider.ContentProvider, FrameA
65
66
  hash: string;
66
67
  readonly #isContentScriptInternal: boolean;
67
68
  readonly #isLiveEditInternal: boolean;
68
- sourceMapURL: string|undefined;
69
+ sourceMapURL: Platform.DevToolsPath.UrlString|undefined;
69
70
  debugSymbols: Protocol.Debugger.DebugSymbols|null;
70
71
  hasSourceURL: boolean;
71
72
  contentLength: number;
@@ -77,12 +78,12 @@ export class Script implements TextUtils.ContentProvider.ContentProvider, FrameA
77
78
  readonly #embedderNameInternal: string|null;
78
79
  readonly isModule: boolean|null;
79
80
  constructor(
80
- debuggerModel: DebuggerModel, scriptId: Protocol.Runtime.ScriptId, sourceURL: string, startLine: number,
81
- startColumn: number, endLine: number, endColumn: number, executionContextId: number, hash: string,
82
- isContentScript: boolean, isLiveEdit: boolean, sourceMapURL: string|undefined, hasSourceURL: boolean,
83
- length: number, isModule: boolean|null, originStackTrace: Protocol.Runtime.StackTrace|null,
84
- codeOffset: number|null, scriptLanguage: string|null, debugSymbols: Protocol.Debugger.DebugSymbols|null,
85
- embedderName: string|null) {
81
+ debuggerModel: DebuggerModel, scriptId: Protocol.Runtime.ScriptId, sourceURL: Platform.DevToolsPath.UrlString,
82
+ startLine: number, startColumn: number, endLine: number, endColumn: number, executionContextId: number,
83
+ hash: string, isContentScript: boolean, isLiveEdit: boolean,
84
+ sourceMapURL: Platform.DevToolsPath.UrlString|undefined, hasSourceURL: boolean, length: number,
85
+ isModule: boolean|null, originStackTrace: Protocol.Runtime.StackTrace|null, codeOffset: number|null,
86
+ scriptLanguage: string|null, debugSymbols: Protocol.Debugger.DebugSymbols|null, embedderName: string|null) {
86
87
  this.debuggerModel = debuggerModel;
87
88
  this.scriptId = scriptId;
88
89
  this.sourceURL = sourceURL;
@@ -163,8 +164,7 @@ export class Script implements TextUtils.ContentProvider.ContentProvider, FrameA
163
164
  return this.#isLiveEditInternal;
164
165
  }
165
166
 
166
- // TODO(crbug.com/1253323): Cast to RawPathString will be removed when migration to branded types is complete.
167
- contentURL(): string {
167
+ contentURL(): Platform.DevToolsPath.UrlString {
168
168
  return this.sourceURL;
169
169
  }
170
170
 
@@ -211,7 +211,9 @@ export class TextSourceMap implements SourceMap {
211
211
  if (info && info.content) {
212
212
  return TextUtils.StaticContentProvider.StaticContentProvider.fromString(sourceURL, contentType, info.content);
213
213
  }
214
- return new CompilerSourceMappingContentProvider(sourceURL, contentType, this.#initiator);
214
+ // TODO(crbug.com/1253323): Cast to UrlString will be removed when migration to branded types is complete.
215
+ return new CompilerSourceMappingContentProvider(
216
+ sourceURL as Platform.DevToolsPath.UrlString, contentType, this.#initiator);
215
217
  }
216
218
 
217
219
  embeddedContentByURL(sourceURL: string): string|null {
@@ -103,7 +103,7 @@ async function start(method: string, params: any): Promise<unknown> {
103
103
  const url = params.url;
104
104
 
105
105
  // Handle legacy Lighthouse runner path.
106
- if (method === 'start') {
106
+ if (method === 'legacyNavigation') {
107
107
  // @ts-expect-error https://github.com/GoogleChrome/lighthouse/issues/11628
108
108
  const connection = self.setUpWorkerConnection(port);
109
109
  // @ts-expect-error https://github.com/GoogleChrome/lighthouse/issues/11628
@@ -115,14 +115,21 @@ async function start(method: string, params: any): Promise<unknown> {
115
115
  puppeteerConnection =
116
116
  await Puppeteer.PuppeteerConnection.getPuppeteerConnection(rawConnection, mainFrameId, mainTargetId);
117
117
 
118
+ if (method === 'snapshot') {
119
+ // @ts-expect-error https://github.com/GoogleChrome/lighthouse/issues/11628
120
+ return await self.runLighthouseSnapshot({
121
+ url,
122
+ config,
123
+ page: puppeteerConnection.page,
124
+ });
125
+ }
126
+
118
127
  // @ts-expect-error https://github.com/GoogleChrome/lighthouse/issues/11628
119
- const result = await self.runLighthouseNavigation({
128
+ return await self.runLighthouseNavigation({
120
129
  url,
121
130
  config,
122
131
  page: puppeteerConnection.page,
123
132
  });
124
-
125
- return result;
126
133
  } catch (err) {
127
134
  return ({
128
135
  fatal: true,
@@ -179,8 +186,10 @@ function notifyFrontendViaWorkerMessage(method: string, params: any): void {
179
186
  self.onmessage = async(event: MessageEvent): Promise<void> => {
180
187
  const messageFromFrontend = JSON.parse(event.data);
181
188
  switch (messageFromFrontend.method) {
182
- case 'navigate':
183
- case 'start': {
189
+ case 'navigation':
190
+ case 'timespan':
191
+ case 'snapshot':
192
+ case 'legacyNavigation': {
184
193
  const result = await start(messageFromFrontend.method, messageFromFrontend.params);
185
194
  self.postMessage(JSON.stringify({id: messageFromFrontend.id, result}));
186
195
  break;
@@ -309,9 +309,14 @@ export class MainImpl {
309
309
  'timelineV8RuntimeCallStats', 'Timeline: V8 Runtime Call Stats on Timeline', true);
310
310
  Root.Runtime.experiments.register('timelineWebGL', 'Timeline: WebGL-based flamechart');
311
311
  Root.Runtime.experiments.register('timelineReplayEvent', 'Timeline: Replay input events', true);
312
+
313
+ // Debugging
312
314
  Root.Runtime.experiments.register(
313
315
  'wasmDWARFDebugging', 'WebAssembly Debugging: Enable DWARF support', undefined,
314
316
  'https://developer.chrome.com/blog/wasm-debugging-2020/');
317
+ Root.Runtime.experiments.register(
318
+ 'evaluateExpressionsWithSourceMaps', 'Console: Resolve variable names in expressions using source maps',
319
+ undefined);
315
320
 
316
321
  // Dual-screen
317
322
  Root.Runtime.experiments.register(
@@ -376,6 +381,9 @@ export class MainImpl {
376
381
  Root.Runtime.experiments.register(
377
382
  Root.Runtime.ExperimentName.HEADER_OVERRIDES, 'Local overrides for response headers');
378
383
 
384
+ // New Lighthouse panel with timespan and snapshot mode
385
+ Root.Runtime.experiments.register('lighthousePanelFR', 'Use Lighthouse panel with timespan and snapshot modes');
386
+
379
387
  Root.Runtime.experiments.enableExperimentsByDefault([
380
388
  'sourceOrderViewer',
381
389
  'hideIssuesFeature',
@@ -285,12 +285,12 @@ export function registerCommands(inspectorBackend) {
285
285
  inspectorBackend.registerEnum('Audits.FederatedAuthRequestIssueReason', {
286
286
  ApprovalDeclined: 'ApprovalDeclined',
287
287
  TooManyRequests: 'TooManyRequests',
288
- WellKnownHttpNotFound: 'WellKnownHttpNotFound',
289
- WellKnownNoResponse: 'WellKnownNoResponse',
290
- WellKnownInvalidResponse: 'WellKnownInvalidResponse',
291
- ClientIdMetadataHttpNotFound: 'ClientIdMetadataHttpNotFound',
292
- ClientIdMetadataNoResponse: 'ClientIdMetadataNoResponse',
293
- ClientIdMetadataInvalidResponse: 'ClientIdMetadataInvalidResponse',
288
+ ManifestHttpNotFound: 'ManifestHttpNotFound',
289
+ ManifestNoResponse: 'ManifestNoResponse',
290
+ ManifestInvalidResponse: 'ManifestInvalidResponse',
291
+ ClientMetadataHttpNotFound: 'ClientMetadataHttpNotFound',
292
+ ClientMetadataNoResponse: 'ClientMetadataNoResponse',
293
+ ClientMetadataInvalidResponse: 'ClientMetadataInvalidResponse',
294
294
  ErrorFetchingSignin: 'ErrorFetchingSignin',
295
295
  InvalidSigninResponse: 'InvalidSigninResponse',
296
296
  AccountsHttpNotFound: 'AccountsHttpNotFound',
@@ -552,6 +552,13 @@ export function registerCommands(inspectorBackend) {
552
552
  {'name': 'range', 'type': 'object', 'optional': false}, {'name': 'text', 'type': 'string', 'optional': false}
553
553
  ],
554
554
  ['containerQuery']);
555
+ inspectorBackend.registerCommand(
556
+ 'CSS.setSupportsText',
557
+ [
558
+ {'name': 'styleSheetId', 'type': 'string', 'optional': false},
559
+ {'name': 'range', 'type': 'object', 'optional': false}, {'name': 'text', 'type': 'string', 'optional': false}
560
+ ],
561
+ ['supports']);
555
562
  inspectorBackend.registerCommand(
556
563
  'CSS.setRuleSelector',
557
564
  [
@@ -1124,7 +1131,6 @@ export function registerCommands(inspectorBackend) {
1124
1131
  [
1125
1132
  {'name': 'policy', 'type': 'string', 'optional': false}, {'name': 'budget', 'type': 'number', 'optional': true},
1126
1133
  {'name': 'maxVirtualTimeTaskStarvationCount', 'type': 'number', 'optional': true},
1127
- {'name': 'waitForNavigation', 'type': 'boolean', 'optional': true},
1128
1134
  {'name': 'initialVirtualTime', 'type': 'number', 'optional': true}
1129
1135
  ],
1130
1136
  ['virtualTimeTicksBase']);
@@ -2033,6 +2039,7 @@ export function registerCommands(inspectorBackend) {
2033
2039
  ChViewportHeight: 'ch-viewport-height',
2034
2040
  ChViewportWidth: 'ch-viewport-width',
2035
2041
  ChWidth: 'ch-width',
2042
+ ChPartitionedCookies: 'ch-partitioned-cookies',
2036
2043
  ClipboardRead: 'clipboard-read',
2037
2044
  ClipboardWrite: 'clipboard-write',
2038
2045
  CrossOriginIsolated: 'cross-origin-isolated',
@@ -2050,7 +2057,6 @@ export function registerCommands(inspectorBackend) {
2050
2057
  Gyroscope: 'gyroscope',
2051
2058
  Hid: 'hid',
2052
2059
  IdleDetection: 'idle-detection',
2053
- InterestCohort: 'interest-cohort',
2054
2060
  JoinAdInterestGroup: 'join-ad-interest-group',
2055
2061
  KeyboardMap: 'keyboard-map',
2056
2062
  Magnetometer: 'magnetometer',
@@ -152,6 +152,7 @@ export const generatedProperties = [
152
152
  {'name': 'background-repeat-x'},
153
153
  {'name': 'background-repeat-y'},
154
154
  {'name': 'background-size', 'keywords': ['auto', 'cover', 'contain']},
155
+ {'name': 'base-palette'},
155
156
  {'name': 'baseline-shift', 'keywords': ['baseline', 'sub', 'super']},
156
157
  {'name': 'block-size', 'keywords': ['auto']},
157
158
  {
@@ -619,6 +620,7 @@ export const generatedProperties = [
619
620
  {'name': 'overflow-wrap', 'inherited': true, 'keywords': ['normal', 'break-word', 'anywhere']},
620
621
  {'name': 'overflow-x', 'keywords': ['visible', 'hidden', 'scroll', 'auto', 'overlay', 'clip']},
621
622
  {'name': 'overflow-y', 'keywords': ['visible', 'hidden', 'scroll', 'auto', 'overlay', 'clip']},
623
+ {'name': 'override-colors'},
622
624
  {'longhands': ['overscroll-behavior-x', 'overscroll-behavior-y'], 'name': 'overscroll-behavior'},
623
625
  {'name': 'overscroll-behavior-block'},
624
626
  {'name': 'overscroll-behavior-inline'},
@@ -1011,6 +1011,11 @@ export namespace ProtocolMapping {
1011
1011
  'CSS.setContainerQueryText': {
1012
1012
  paramsType: [Protocol.CSS.SetContainerQueryTextRequest]; returnType: Protocol.CSS.SetContainerQueryTextResponse;
1013
1013
  };
1014
+ /**
1015
+ * Modifies the expression of a supports at-rule.
1016
+ */
1017
+ 'CSS.setSupportsText':
1018
+ {paramsType: [Protocol.CSS.SetSupportsTextRequest]; returnType: Protocol.CSS.SetSupportsTextResponse;};
1014
1019
  /**
1015
1020
  * Modifies the rule selector.
1016
1021
  */
@@ -631,6 +631,11 @@ declare namespace ProtocolProxyApi {
631
631
  invoke_setContainerQueryText(params: Protocol.CSS.SetContainerQueryTextRequest):
632
632
  Promise<Protocol.CSS.SetContainerQueryTextResponse>;
633
633
 
634
+ /**
635
+ * Modifies the expression of a supports at-rule.
636
+ */
637
+ invoke_setSupportsText(params: Protocol.CSS.SetSupportsTextRequest): Promise<Protocol.CSS.SetSupportsTextResponse>;
638
+
634
639
  /**
635
640
  * Modifies the rule selector.
636
641
  */
@@ -1065,12 +1065,12 @@ export namespace Audits {
1065
1065
  export const enum FederatedAuthRequestIssueReason {
1066
1066
  ApprovalDeclined = 'ApprovalDeclined',
1067
1067
  TooManyRequests = 'TooManyRequests',
1068
- WellKnownHttpNotFound = 'WellKnownHttpNotFound',
1069
- WellKnownNoResponse = 'WellKnownNoResponse',
1070
- WellKnownInvalidResponse = 'WellKnownInvalidResponse',
1071
- ClientIdMetadataHttpNotFound = 'ClientIdMetadataHttpNotFound',
1072
- ClientIdMetadataNoResponse = 'ClientIdMetadataNoResponse',
1073
- ClientIdMetadataInvalidResponse = 'ClientIdMetadataInvalidResponse',
1068
+ ManifestHttpNotFound = 'ManifestHttpNotFound',
1069
+ ManifestNoResponse = 'ManifestNoResponse',
1070
+ ManifestInvalidResponse = 'ManifestInvalidResponse',
1071
+ ClientMetadataHttpNotFound = 'ClientMetadataHttpNotFound',
1072
+ ClientMetadataNoResponse = 'ClientMetadataNoResponse',
1073
+ ClientMetadataInvalidResponse = 'ClientMetadataInvalidResponse',
1074
1074
  ErrorFetchingSignin = 'ErrorFetchingSignin',
1075
1075
  InvalidSigninResponse = 'InvalidSigninResponse',
1076
1076
  AccountsHttpNotFound = 'AccountsHttpNotFound',
@@ -2554,6 +2554,19 @@ export namespace CSS {
2554
2554
  containerQuery: CSSContainerQuery;
2555
2555
  }
2556
2556
 
2557
+ export interface SetSupportsTextRequest {
2558
+ styleSheetId: StyleSheetId;
2559
+ range: SourceRange;
2560
+ text: string;
2561
+ }
2562
+
2563
+ export interface SetSupportsTextResponse extends ProtocolResponseWithError {
2564
+ /**
2565
+ * The resulting CSS Supports rule after modification.
2566
+ */
2567
+ supports: CSSSupports;
2568
+ }
2569
+
2557
2570
  export interface SetRuleSelectorRequest {
2558
2571
  styleSheetId: StyleSheetId;
2559
2572
  range: SourceRange;
@@ -5273,11 +5286,6 @@ export namespace Emulation {
5273
5286
  * forwards to prevent deadlock.
5274
5287
  */
5275
5288
  maxVirtualTimeTaskStarvationCount?: integer;
5276
- /**
5277
- * If set the virtual time policy change should be deferred until any frame starts navigating.
5278
- * Note any previous deferred policy change is superseded.
5279
- */
5280
- waitForNavigation?: boolean;
5281
5289
  /**
5282
5290
  * If set, base::Time::Now will be overridden to initially return this value.
5283
5291
  */
@@ -10052,6 +10060,7 @@ export namespace Page {
10052
10060
  ChViewportHeight = 'ch-viewport-height',
10053
10061
  ChViewportWidth = 'ch-viewport-width',
10054
10062
  ChWidth = 'ch-width',
10063
+ ChPartitionedCookies = 'ch-partitioned-cookies',
10055
10064
  ClipboardRead = 'clipboard-read',
10056
10065
  ClipboardWrite = 'clipboard-write',
10057
10066
  CrossOriginIsolated = 'cross-origin-isolated',
@@ -10069,7 +10078,6 @@ export namespace Page {
10069
10078
  Gyroscope = 'gyroscope',
10070
10079
  Hid = 'hid',
10071
10080
  IdleDetection = 'idle-detection',
10072
- InterestCohort = 'interest-cohort',
10073
10081
  JoinAdInterestGroup = 'join-ad-interest-group',
10074
10082
  KeyboardMap = 'keyboard-map',
10075
10083
  Magnetometer = 'magnetometer',
@@ -32,6 +32,7 @@
32
32
 
33
33
  import * as Common from '../../core/common/common.js';
34
34
  import * as SDK from '../../core/sdk/sdk.js';
35
+ import type * as Platform from '../../core/platform/platform.js';
35
36
  import type * as Protocol from '../../generated/protocol.js';
36
37
  import type * as TextUtils from '../text_utils/text_utils.js';
37
38
  import * as Workspace from '../workspace/workspace.js';
@@ -305,7 +306,7 @@ export type EventTypes = {
305
306
 
306
307
  export class Breakpoint implements SDK.TargetManager.SDKModelObserver<SDK.DebuggerModel.DebuggerModel> {
307
308
  readonly breakpointManager: BreakpointManager;
308
- urlInternal: string;
309
+ urlInternal: Platform.DevToolsPath.UrlString;
309
310
  readonly #lineNumberInternal: number;
310
311
  readonly #columnNumberInternal: number|undefined;
311
312
  readonly #uiLocations: Set<Workspace.UISourceCode.UILocation>;
@@ -317,8 +318,9 @@ export class Breakpoint implements SDK.TargetManager.SDKModelObserver<SDK.Debugg
317
318
  readonly #modelBreakpoints: Map<SDK.DebuggerModel.DebuggerModel, ModelBreakpoint>;
318
319
 
319
320
  constructor(
320
- breakpointManager: BreakpointManager, primaryUISourceCode: Workspace.UISourceCode.UISourceCode, url: string,
321
- lineNumber: number, columnNumber: number|undefined, condition: string, enabled: boolean) {
321
+ breakpointManager: BreakpointManager, primaryUISourceCode: Workspace.UISourceCode.UISourceCode,
322
+ url: Platform.DevToolsPath.UrlString, lineNumber: number, columnNumber: number|undefined, condition: string,
323
+ enabled: boolean) {
322
324
  this.breakpointManager = breakpointManager;
323
325
  this.urlInternal = url;
324
326
  this.#lineNumberInternal = lineNumber;
@@ -398,7 +400,7 @@ export class Breakpoint implements SDK.TargetManager.SDKModelObserver<SDK.Debugg
398
400
  }
399
401
  }
400
402
 
401
- url(): string {
403
+ url(): Platform.DevToolsPath.UrlString {
402
404
  return this.urlInternal;
403
405
  }
404
406
 
@@ -791,7 +793,7 @@ export class ModelBreakpoint {
791
793
  }
792
794
 
793
795
  interface Position {
794
- url: string;
796
+ url: Platform.DevToolsPath.UrlString;
795
797
  scriptId: Protocol.Runtime.ScriptId;
796
798
  scriptHash: string;
797
799
  lineNumber: number;