@mcp-b/chrome-devtools-mcp 2.0.2 → 2.0.5

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 (149) hide show
  1. package/README.md +120 -10
  2. package/build/src/McpContext.js +69 -5
  3. package/build/src/browser.js +157 -51
  4. package/build/src/cli.js +11 -5
  5. package/build/src/formatters/IssueFormatter.js +190 -0
  6. package/build/src/main.js +83 -2
  7. package/build/src/telemetry/clearcut-logger.js +102 -0
  8. package/build/src/telemetry/flag-utils.js +45 -0
  9. package/build/src/telemetry/metric-utils.js +14 -0
  10. package/build/src/telemetry/persistence.js +53 -0
  11. package/build/src/telemetry/types.js +33 -0
  12. package/build/src/telemetry/watchdog/clearcut-sender.js +201 -0
  13. package/build/src/telemetry/watchdog/main.js +127 -0
  14. package/build/src/telemetry/watchdog-client.js +60 -0
  15. package/build/src/third_party/devtools-formatter-worker.js +7 -0
  16. package/build/src/third_party/index.js +1 -1
  17. package/build/src/tools/browser.js +92 -0
  18. package/build/src/tools/extension.js +31 -0
  19. package/build/src/tools/extensions.js +79 -0
  20. package/build/src/tools/input.js +6 -1
  21. package/build/src/tools/pages.js +7 -1
  22. package/build/src/tools/script.js +31 -4
  23. package/build/src/tools/tools.js +4 -0
  24. package/build/src/transports/CDPClientTransport.js +184 -0
  25. package/build/src/transports/WebMCPBridgeScript.js +11 -2
  26. package/build/src/utils/ExtensionRegistry.js +35 -0
  27. package/build/src/utils/string.js +36 -0
  28. package/build/vendor/chrome-devtools-frontend/front_end/core/common/Base64.js +20 -2
  29. package/build/vendor/chrome-devtools-frontend/front_end/core/common/Debouncer.js +8 -1
  30. package/build/vendor/chrome-devtools-frontend/front_end/core/common/Gzip.js +11 -0
  31. package/build/vendor/chrome-devtools-frontend/front_end/core/common/Object.js +6 -1
  32. package/build/vendor/chrome-devtools-frontend/front_end/core/common/ParsedURL.js +3 -0
  33. package/build/vendor/chrome-devtools-frontend/front_end/core/common/ResourceType.js +6 -0
  34. package/build/vendor/chrome-devtools-frontend/front_end/core/common/Revealer.js +0 -5
  35. package/build/vendor/chrome-devtools-frontend/front_end/core/common/Settings.js +18 -8
  36. package/build/vendor/chrome-devtools-frontend/front_end/core/host/AidaClient.js +24 -0
  37. package/build/vendor/chrome-devtools-frontend/front_end/core/host/InspectorFrontendHostStub.js +11 -3
  38. package/build/vendor/chrome-devtools-frontend/front_end/core/host/ResourceLoader.js +1 -1
  39. package/build/vendor/chrome-devtools-frontend/front_end/core/host/UserMetrics.js +27 -20
  40. package/build/vendor/chrome-devtools-frontend/front_end/core/i18n/collect-ui-strings.js +7 -8
  41. package/build/vendor/chrome-devtools-frontend/front_end/core/i18n/generate-locales-js.js +4 -5
  42. package/build/vendor/chrome-devtools-frontend/front_end/core/platform/ArrayUtilities.js +10 -0
  43. package/build/vendor/chrome-devtools-frontend/front_end/core/platform/StringUtilities.js +63 -12
  44. package/build/vendor/chrome-devtools-frontend/front_end/core/protocol_client/CDPConnection.js +1 -0
  45. package/build/vendor/chrome-devtools-frontend/front_end/core/protocol_client/InspectorBackend.js +4 -1
  46. package/build/vendor/chrome-devtools-frontend/front_end/core/root/ExperimentNames.js +30 -0
  47. package/build/vendor/chrome-devtools-frontend/front_end/core/root/root.js +2 -1
  48. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/AnimationModel.js +0 -4
  49. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CSSMatchedStyles.js +69 -9
  50. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CSSMetadata.js +6 -6
  51. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CSSModel.js +28 -13
  52. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CSSProperty.js +1 -1
  53. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CSSPropertyParserMatchers.js +6 -0
  54. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/ConsoleModel.js +0 -2
  55. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CookieModel.js +1 -1
  56. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/DOMModel.js +170 -13
  57. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/DebuggerModel.js +5 -39
  58. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/HeapProfilerModel.js +8 -1
  59. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/NetworkManager.js +20 -5
  60. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/NetworkRequest.js +12 -21
  61. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/OverlayModel.js +19 -6
  62. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/RehydratingConnection.js +5 -1
  63. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/ResourceTreeModel.js +8 -5
  64. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/SourceMap.js +15 -10
  65. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/SourceMapManager.js +1 -1
  66. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/SourceMapScopesInfo.js +13 -27
  67. package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/Target.js +3 -1
  68. package/build/vendor/chrome-devtools-frontend/front_end/generated/ARIAProperties.js +1 -7
  69. package/build/vendor/chrome-devtools-frontend/front_end/generated/Deprecation.js +1 -16
  70. package/build/vendor/chrome-devtools-frontend/front_end/generated/InspectorBackendCommands.js +82 -22
  71. package/build/vendor/chrome-devtools-frontend/front_end/generated/SupportedCSSProperties.js +265 -123
  72. package/build/vendor/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/NetworkRequestFormatter.js +2 -1
  73. package/build/vendor/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.js +10 -16
  74. package/build/vendor/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.js +97 -26
  75. package/build/vendor/chrome-devtools-frontend/front_end/models/ai_assistance/performance/AICallTree.js +35 -0
  76. package/build/vendor/chrome-devtools-frontend/front_end/models/annotations/AnnotationRepository.js +163 -0
  77. package/build/vendor/chrome-devtools-frontend/front_end/models/annotations/AnnotationType.js +10 -0
  78. package/build/vendor/chrome-devtools-frontend/front_end/models/annotations/annotations.js +5 -0
  79. package/build/vendor/chrome-devtools-frontend/front_end/models/bindings/CompilerScriptMapping.js +5 -3
  80. package/build/vendor/chrome-devtools-frontend/front_end/models/bindings/DebuggerLanguagePlugins.js +29 -58
  81. package/build/vendor/chrome-devtools-frontend/front_end/models/bindings/DebuggerWorkspaceBinding.js +7 -45
  82. package/build/vendor/chrome-devtools-frontend/front_end/models/emulation/DeviceModeModel.js +1 -1
  83. package/build/vendor/chrome-devtools-frontend/front_end/models/emulation/EmulatedDevices.js +14 -0
  84. package/build/vendor/chrome-devtools-frontend/front_end/models/formatter/FormatterWorkerPool.js +8 -5
  85. package/build/vendor/chrome-devtools-frontend/front_end/models/greendev/Prototypes.js +33 -0
  86. package/build/vendor/chrome-devtools-frontend/front_end/models/greendev/greendev.js +4 -0
  87. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/ContrastCheckTrigger.js +2 -2
  88. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/CookieIssue.js +0 -21
  89. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/CorsIssue.js +1 -38
  90. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/IssueAggregator.js +8 -0
  91. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/IssuesManager.js +6 -12
  92. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/PermissionElementIssue.js +243 -0
  93. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementActivationDisabled.md +7 -0
  94. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementActivationDisabledWithOccluder.md +9 -0
  95. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementActivationDisabledWithOccluderParent.md +9 -0
  96. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementCspFrameAncestorsMissing.md +5 -0
  97. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementFencedFrameDisallowed.md +5 -0
  98. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementFontSizeTooLarge.md +5 -0
  99. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementFontSizeTooSmall.md +5 -0
  100. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementGeolocationDeprecated.md +5 -0
  101. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementInsetBoxShadowUnsupported.md +5 -0
  102. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementInvalidDisplayStyle.md +5 -0
  103. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementInvalidSizeValue.md +5 -0
  104. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementInvalidType.md +5 -0
  105. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementInvalidTypeActivation.md +5 -0
  106. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementLowContrast.md +5 -0
  107. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementNonOpaqueColor.md +5 -0
  108. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementPaddingBottomUnsupported.md +6 -0
  109. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementPaddingRightUnsupported.md +6 -0
  110. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementPermissionsPolicyBlocked.md +5 -0
  111. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementRegistrationFailed.md +5 -0
  112. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementRequestInProgress.md +5 -0
  113. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementSecurityChecksFailed.md +5 -0
  114. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementTypeNotSupported.md +5 -0
  115. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementUntrustedEvent.md +7 -0
  116. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/issues_manager.js +2 -1
  117. package/build/vendor/chrome-devtools-frontend/front_end/models/logs/NetworkLog.js +0 -8
  118. package/build/vendor/chrome-devtools-frontend/front_end/models/source_map_scopes/NamesResolver.js +4 -8
  119. package/build/vendor/chrome-devtools-frontend/front_end/models/stack_trace/StackTrace.js +30 -1
  120. package/build/vendor/chrome-devtools-frontend/front_end/models/stack_trace/StackTraceImpl.js +70 -1
  121. package/build/vendor/chrome-devtools-frontend/front_end/models/stack_trace/StackTraceModel.js +82 -30
  122. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/EventsSerializer.js +10 -2
  123. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/LanternComputationData.js +2 -2
  124. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/ModelImpl.js +0 -3
  125. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/Processor.js +18 -19
  126. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/Styles.js +12 -4
  127. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/extras/Initiators.js +46 -0
  128. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/extras/TraceTree.js +4 -3
  129. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/extras/extras.js +1 -0
  130. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/LargestImagePaintHandler.js +2 -2
  131. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/LayoutShiftsHandler.js +1 -1
  132. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/MetaHandler.js +6 -0
  133. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/NetworkRequestsHandler.js +10 -1
  134. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/PageLoadMetricsHandler.js +44 -27
  135. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/helpers/Timing.js +9 -2
  136. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/Common.js +1 -6
  137. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/LCPBreakdown.js +2 -2
  138. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/LCPDiscovery.js +2 -4
  139. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/NetworkDependencyTree.js +3 -2
  140. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/RenderBlocking.js +1 -1
  141. package/build/vendor/chrome-devtools-frontend/front_end/models/trace/types/TraceEvents.js +33 -11
  142. package/build/vendor/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/decode/decode.js +51 -18
  143. package/build/vendor/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/encode/encoder.js +1 -1
  144. package/build/vendor/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/scopes.js +4 -0
  145. package/build/vendor/chrome-devtools-frontend/mcp/HostBindings.js +4 -0
  146. package/build/vendor/chrome-devtools-frontend/mcp/mcp.js +4 -0
  147. package/package.json +28 -21
  148. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/SameSiteInvalidSameParty.md +0 -8
  149. package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/SameSiteSamePartyCrossPartyContextSet.md +0 -10
@@ -70,10 +70,6 @@ const UIStrings = {
70
70
  * @description Tooltip to explain why a cookie was blocked due to Schemeful Same-Site
71
71
  */
72
72
  schemefulSameSiteUnspecifiedTreatedAsLax: 'This cookie didn\'t specify a "`SameSite`" attribute when it was stored, was defaulted to "`SameSite=Lax"`, and was blocked because the request was cross-site and was not initiated by a top-level navigation. This request is considered cross-site because the URL has a different scheme than the current site.',
73
- /**
74
- * @description Tooltip to explain why a cookie was blocked due to SameParty
75
- */
76
- samePartyFromCrossPartyContext: 'This cookie was blocked because it had the "`SameParty`" attribute but the request was cross-party. The request was considered cross-party because the domain of the resource\'s URL and the domains of the resource\'s enclosing frames/documents are neither owners nor members in the same First-Party Set.',
77
73
  /**
78
74
  * @description Tooltip to explain why a cookie was blocked due to exceeding the maximum size
79
75
  */
@@ -111,14 +107,6 @@ const UIStrings = {
111
107
  * @description Tooltip to explain why a cookie was blocked due to Schemeful Same-Site
112
108
  */
113
109
  thisSetcookieDidntSpecifyASamesite: 'This `Set-Cookie` header didn\'t specify a "`SameSite`" attribute, was defaulted to "`SameSite=Lax"`, and was blocked because it came from a cross-site response which was not the response to a top-level navigation. This response is considered cross-site because the URL has a different scheme than the current site.',
114
- /**
115
- * @description Tooltip to explain why a cookie was blocked due to SameParty
116
- */
117
- thisSetcookieWasBlockedBecauseItHadTheSameparty: 'This attempt to set a cookie via a `Set-Cookie` header was blocked because it had the "`SameParty`" attribute but the request was cross-party. The request was considered cross-party because the domain of the resource\'s URL and the domains of the resource\'s enclosing frames/documents are neither owners nor members in the same First-Party Set.',
118
- /**
119
- * @description Tooltip to explain why a cookie was blocked due to SameParty
120
- */
121
- thisSetcookieWasBlockedBecauseItHadTheSamepartyAttribute: 'This attempt to set a cookie via a `Set-Cookie` header was blocked because it had the "`SameParty`" attribute but also had other conflicting attributes. Chrome requires cookies that use the "`SameParty`" attribute to also have the "Secure" attribute, and to not be restricted to "`SameSite=Strict`".',
122
110
  /**
123
111
  * @description Tooltip to explain why an attempt to set a cookie via a `Set-Cookie` HTTP header on a request's response was blocked.
124
112
  */
@@ -214,6 +202,7 @@ export class NetworkRequest extends Common.ObjectWrapper.ObjectWrapper {
214
202
  #startTime = -1;
215
203
  #endTime = -1;
216
204
  #blockedReason = undefined;
205
+ #renderBlockingBehavior;
217
206
  #corsErrorStatus = undefined;
218
207
  statusCode = 0;
219
208
  statusText = '';
@@ -256,6 +245,7 @@ export class NetworkRequest extends Common.ObjectWrapper.ObjectWrapper {
256
245
  #exemptedResponseCookies = [];
257
246
  #responseCookiesPartitionKey = null;
258
247
  #responseCookiesPartitionKeyOpaque = null;
248
+ #deviceBoundSessionUsages = [];
259
249
  #siteHasCookieInOtherPartition = false;
260
250
  localizedFailDescription = null;
261
251
  #url;
@@ -533,6 +523,12 @@ export class NetworkRequest extends Common.ObjectWrapper.ObjectWrapper {
533
523
  setBlockedReason(reason) {
534
524
  this.#blockedReason = reason;
535
525
  }
526
+ setRenderBlockingBehavior(renderBlocking) {
527
+ this.#renderBlockingBehavior = renderBlocking;
528
+ }
529
+ renderBlockingBehavior() {
530
+ return this.#renderBlockingBehavior;
531
+ }
536
532
  corsErrorStatus() {
537
533
  return this.#corsErrorStatus;
538
534
  }
@@ -1252,6 +1248,7 @@ export class NetworkRequest extends Common.ObjectWrapper.ObjectWrapper {
1252
1248
  this.setRequestHeaders(extraRequestInfo.requestHeaders);
1253
1249
  this.#hasExtraRequestInfo = true;
1254
1250
  this.setRequestHeadersText(''); // Mark request headers as non-provisional
1251
+ this.#deviceBoundSessionUsages = extraRequestInfo.deviceBoundSessionUsages || [];
1255
1252
  this.#clientSecurityState = extraRequestInfo.clientSecurityState;
1256
1253
  this.#appliedNetworkConditionsId = extraRequestInfo.appliedNetworkConditionsId;
1257
1254
  if (extraRequestInfo.connectTiming) {
@@ -1263,6 +1260,9 @@ export class NetworkRequest extends Common.ObjectWrapper.ObjectWrapper {
1263
1260
  setAppliedNetworkConditions(appliedNetworkConditionsId) {
1264
1261
  this.#appliedNetworkConditionsId = appliedNetworkConditionsId;
1265
1262
  }
1263
+ getDeviceBoundSessionUsages() {
1264
+ return this.#deviceBoundSessionUsages;
1265
+ }
1266
1266
  hasExtraRequestInfo() {
1267
1267
  return this.#hasExtraRequestInfo;
1268
1268
  }
@@ -1521,8 +1521,6 @@ export const cookieBlockedReasonToUiString = function (blockedReason) {
1521
1521
  return i18nString(UIStrings.schemefulSameSiteLax);
1522
1522
  case "SchemefulSameSiteUnspecifiedTreatedAsLax" /* Protocol.Network.CookieBlockedReason.SchemefulSameSiteUnspecifiedTreatedAsLax */:
1523
1523
  return i18nString(UIStrings.schemefulSameSiteUnspecifiedTreatedAsLax);
1524
- case "SamePartyFromCrossPartyContext" /* Protocol.Network.CookieBlockedReason.SamePartyFromCrossPartyContext */:
1525
- return i18nString(UIStrings.samePartyFromCrossPartyContext);
1526
1524
  case "NameValuePairExceedsMaxSize" /* Protocol.Network.CookieBlockedReason.NameValuePairExceedsMaxSize */:
1527
1525
  return i18nString(UIStrings.nameValuePairExceedsMaxSize);
1528
1526
  case "ThirdPartyPhaseout" /* Protocol.Network.CookieBlockedReason.ThirdPartyPhaseout */:
@@ -1566,10 +1564,6 @@ export const setCookieBlockedReasonToUiString = function (blockedReason) {
1566
1564
  return i18nString(UIStrings.thisSetcookieWasBlockedBecauseItHadTheSamesiteStrictLax, { PH1: 'SameSite=Lax' });
1567
1565
  case "SchemefulSameSiteUnspecifiedTreatedAsLax" /* Protocol.Network.SetCookieBlockedReason.SchemefulSameSiteUnspecifiedTreatedAsLax */:
1568
1566
  return i18nString(UIStrings.thisSetcookieDidntSpecifyASamesite);
1569
- case "SamePartyFromCrossPartyContext" /* Protocol.Network.SetCookieBlockedReason.SamePartyFromCrossPartyContext */:
1570
- return i18nString(UIStrings.thisSetcookieWasBlockedBecauseItHadTheSameparty);
1571
- case "SamePartyConflictsWithOtherAttributes" /* Protocol.Network.SetCookieBlockedReason.SamePartyConflictsWithOtherAttributes */:
1572
- return i18nString(UIStrings.thisSetcookieWasBlockedBecauseItHadTheSamepartyAttribute);
1573
1567
  case "NameValuePairExceedsMaxSize" /* Protocol.Network.SetCookieBlockedReason.NameValuePairExceedsMaxSize */:
1574
1568
  return i18nString(UIStrings.thisSetcookieWasBlockedBecauseTheNameValuePairExceedsMaxSize);
1575
1569
  case "DisallowedCharacter" /* Protocol.Network.SetCookieBlockedReason.DisallowedCharacter */:
@@ -1595,7 +1589,6 @@ export const cookieBlockedReasonToAttribute = function (blockedReason) {
1595
1589
  case "SchemefulSameSiteLax" /* Protocol.Network.CookieBlockedReason.SchemefulSameSiteLax */:
1596
1590
  case "SchemefulSameSiteUnspecifiedTreatedAsLax" /* Protocol.Network.CookieBlockedReason.SchemefulSameSiteUnspecifiedTreatedAsLax */:
1597
1591
  return "same-site" /* Attribute.SAME_SITE */;
1598
- case "SamePartyFromCrossPartyContext" /* Protocol.Network.CookieBlockedReason.SamePartyFromCrossPartyContext */:
1599
1592
  case "NameValuePairExceedsMaxSize" /* Protocol.Network.CookieBlockedReason.NameValuePairExceedsMaxSize */:
1600
1593
  case "UserPreferences" /* Protocol.Network.CookieBlockedReason.UserPreferences */:
1601
1594
  case "ThirdPartyPhaseout" /* Protocol.Network.CookieBlockedReason.ThirdPartyPhaseout */:
@@ -1621,8 +1614,6 @@ export const setCookieBlockedReasonToAttribute = function (blockedReason) {
1621
1614
  return "domain" /* Attribute.DOMAIN */;
1622
1615
  case "InvalidPrefix" /* Protocol.Network.SetCookieBlockedReason.InvalidPrefix */:
1623
1616
  return "name" /* Attribute.NAME */;
1624
- case "SamePartyConflictsWithOtherAttributes" /* Protocol.Network.SetCookieBlockedReason.SamePartyConflictsWithOtherAttributes */:
1625
- case "SamePartyFromCrossPartyContext" /* Protocol.Network.SetCookieBlockedReason.SamePartyFromCrossPartyContext */:
1626
1617
  case "NameValuePairExceedsMaxSize" /* Protocol.Network.SetCookieBlockedReason.NameValuePairExceedsMaxSize */:
1627
1618
  case "UserPreferences" /* Protocol.Network.SetCookieBlockedReason.UserPreferences */:
1628
1619
  case "ThirdPartyPhaseout" /* Protocol.Network.SetCookieBlockedReason.ThirdPartyPhaseout */:
@@ -5,7 +5,7 @@ import * as Common from '../common/common.js';
5
5
  import * as i18n from '../i18n/i18n.js';
6
6
  import * as Root from '../root/root.js';
7
7
  import { DebuggerModel, Events as DebuggerModelEvents } from './DebuggerModel.js';
8
- import { DeferredDOMNode, DOMModel, Events as DOMModelEvents } from './DOMModel.js';
8
+ import { DeferredDOMNode, DOMModel, DOMNodeEvents, Events as DOMModelEvents } from './DOMModel.js';
9
9
  import { OverlayPersistentHighlighter } from './OverlayPersistentHighlighter.js';
10
10
  import { SDKModel } from './SDKModel.js';
11
11
  import { TargetManager } from './TargetManager.js';
@@ -72,10 +72,22 @@ export class OverlayModel extends SDKModel {
72
72
  void this.wireAgentToSettings();
73
73
  }
74
74
  this.#persistentHighlighter = new OverlayPersistentHighlighter(this, {
75
- onGridOverlayStateChanged: ({ nodeId, enabled }) => this.dispatchEventToListeners("PersistentGridOverlayStateChanged" /* Events.PERSISTENT_GRID_OVERLAY_STATE_CHANGED */, { nodeId, enabled }),
76
- onFlexOverlayStateChanged: ({ nodeId, enabled }) => this.dispatchEventToListeners("PersistentFlexContainerOverlayStateChanged" /* Events.PERSISTENT_FLEX_CONTAINER_OVERLAY_STATE_CHANGED */, { nodeId, enabled }),
77
- onContainerQueryOverlayStateChanged: ({ nodeId, enabled }) => this.dispatchEventToListeners("PersistentContainerQueryOverlayStateChanged" /* Events.PERSISTENT_CONTAINER_QUERY_OVERLAY_STATE_CHANGED */, { nodeId, enabled }),
78
- onScrollSnapOverlayStateChanged: ({ nodeId, enabled }) => this.dispatchEventToListeners("PersistentScrollSnapOverlayStateChanged" /* Events.PERSISTENT_SCROLL_SNAP_OVERLAY_STATE_CHANGED */, { nodeId, enabled }),
75
+ onGridOverlayStateChanged: ({ nodeId, enabled }) => {
76
+ this.#domModel.nodeForId(nodeId)?.dispatchEventToListeners(DOMNodeEvents.GRID_OVERLAY_STATE_CHANGED, { enabled });
77
+ this.dispatchEventToListeners("PersistentGridOverlayStateChanged" /* Events.PERSISTENT_GRID_OVERLAY_STATE_CHANGED */, { nodeId, enabled });
78
+ },
79
+ onFlexOverlayStateChanged: ({ nodeId, enabled }) => {
80
+ this.#domModel.nodeForId(nodeId)?.dispatchEventToListeners(DOMNodeEvents.FLEX_CONTAINER_OVERLAY_STATE_CHANGED, { enabled });
81
+ this.dispatchEventToListeners("PersistentFlexContainerOverlayStateChanged" /* Events.PERSISTENT_FLEX_CONTAINER_OVERLAY_STATE_CHANGED */, { nodeId, enabled });
82
+ },
83
+ onContainerQueryOverlayStateChanged: ({ nodeId, enabled }) => {
84
+ this.#domModel.nodeForId(nodeId)?.dispatchEventToListeners(DOMNodeEvents.CONTAINER_QUERY_OVERLAY_STATE_CHANGED, { enabled });
85
+ this.dispatchEventToListeners("PersistentContainerQueryOverlayStateChanged" /* Events.PERSISTENT_CONTAINER_QUERY_OVERLAY_STATE_CHANGED */, { nodeId, enabled });
86
+ },
87
+ onScrollSnapOverlayStateChanged: ({ nodeId, enabled }) => {
88
+ this.#domModel.nodeForId(nodeId)?.dispatchEventToListeners(DOMNodeEvents.SCROLL_SNAP_OVERLAY_STATE_CHANGED, { enabled });
89
+ this.dispatchEventToListeners("PersistentScrollSnapOverlayStateChanged" /* Events.PERSISTENT_SCROLL_SNAP_OVERLAY_STATE_CHANGED */, { nodeId, enabled });
90
+ },
79
91
  });
80
92
  this.#domModel.addEventListener(DOMModelEvents.NodeRemoved, () => {
81
93
  if (!this.#persistentHighlighter) {
@@ -395,7 +407,8 @@ export class OverlayModel extends SDKModel {
395
407
  gridHighlightConfig: {},
396
408
  flexContainerHighlightConfig: {},
397
409
  flexItemHighlightConfig: {},
398
- contrastAlgorithm: Root.Runtime.experiments.isEnabled('apca') ? "apca" /* Protocol.Overlay.ContrastAlgorithm.Apca */ :
410
+ contrastAlgorithm: Root.Runtime.experiments.isEnabled(Root.ExperimentNames.ExperimentName.APCA) ?
411
+ "apca" /* Protocol.Overlay.ContrastAlgorithm.Apca */ :
399
412
  "aa" /* Protocol.Overlay.ContrastAlgorithm.Aa */,
400
413
  };
401
414
  if (mode === 'all' || mode === 'content') {
@@ -3,6 +3,7 @@
3
3
  // found in the LICENSE file.
4
4
  import * as Common from '../common/common.js';
5
5
  import * as i18n from '../i18n/i18n.js';
6
+ import * as ProtocolClient from '../protocol_client/protocol_client.js';
6
7
  import * as Root from '../root/root.js';
7
8
  import * as EnhancedTraces from './EnhancedTracesParser.js';
8
9
  import { TraceObject } from './TraceObject.js';
@@ -261,7 +262,10 @@ export class RehydratingSession extends RehydratingSessionBase {
261
262
  default:
262
263
  this.sendMessageToFrontend({
263
264
  id: data.id,
264
- result: {},
265
+ error: {
266
+ message: `Command ${data.method} not implemented in RehydratingSession.`,
267
+ code: ProtocolClient.CDPConnection.CDPErrorStatus.DEVTOOLS_STUB_ERROR,
268
+ }
265
269
  });
266
270
  break;
267
271
  }
@@ -86,7 +86,6 @@ export class ResourceTreeModel extends SDKModel {
86
86
  if (!this.framesInternal.has(frameId)) {
87
87
  return null;
88
88
  }
89
- // TODO(crbug.com/445966299): Refactor to use `storageAgent().invoke_getStorageKey()` instead.
90
89
  const response = await this.storageAgent.invoke_getStorageKey({ frameId });
91
90
  if (response.getError() === 'Frame tree node for given frame not found') {
92
91
  return null;
@@ -198,10 +197,13 @@ export class ResourceTreeModel extends SDKModel {
198
197
  documentOpened(framePayload) {
199
198
  this.frameNavigated(framePayload, undefined);
200
199
  const frame = this.framesInternal.get(framePayload.id);
201
- if (frame && !frame.getResourcesMap().get(framePayload.url)) {
202
- const frameResource = this.createResourceFromFramePayload(framePayload, framePayload.url, Common.ResourceType.resourceTypes.Document, framePayload.mimeType, null, null);
203
- frameResource.isGenerated = true;
204
- frame.addResource(frameResource);
200
+ if (frame) {
201
+ this.dispatchEventToListeners(Events.DocumentOpened, frame);
202
+ if (!frame.getResourcesMap().get(framePayload.url)) {
203
+ const frameResource = this.createResourceFromFramePayload(framePayload, framePayload.url, Common.ResourceType.resourceTypes.Document, framePayload.mimeType, null, null);
204
+ frameResource.isGenerated = true;
205
+ frame.addResource(frameResource);
206
+ }
205
207
  }
206
208
  }
207
209
  frameDetached(frameId, isSwap) {
@@ -480,6 +482,7 @@ export var Events;
480
482
  Events["FrameDetached"] = "FrameDetached";
481
483
  Events["FrameResized"] = "FrameResized";
482
484
  Events["FrameWillNavigate"] = "FrameWillNavigate";
485
+ Events["DocumentOpened"] = "DocumentOpened";
483
486
  Events["PrimaryPageChanged"] = "PrimaryPageChanged";
484
487
  Events["ResourceAdded"] = "ResourceAdded";
485
488
  Events["WillLoadCachedResources"] = "WillLoadCachedResources";
@@ -63,7 +63,7 @@ export class SourceMap {
63
63
  #script;
64
64
  #scopesInfo = null;
65
65
  #debugId;
66
- scopesFallbackPromiseForTest;
66
+ #scopesFallbackPromise;
67
67
  /**
68
68
  * Implements Source Map V3 model. See https://github.com/google/closure-compiler/wiki/Source-Maps
69
69
  * for format description.
@@ -135,6 +135,10 @@ export class SourceMap {
135
135
  this.#ensureSourceMapProcessed();
136
136
  return this.#scopesInfo !== null && !this.#scopesInfo.isEmpty();
137
137
  }
138
+ waitForScopeInfo() {
139
+ this.#ensureSourceMapProcessed();
140
+ return this.#scopesFallbackPromise ?? Promise.resolve();
141
+ }
138
142
  findEntry(lineNumber, columnNumber, inlineFrameIndex) {
139
143
  this.#ensureSourceMapProcessed();
140
144
  if (inlineFrameIndex && this.#scopesInfo !== null) {
@@ -160,6 +164,14 @@ export class SourceMap {
160
164
  const index = Platform.ArrayUtilities.upperBound(mappings, undefined, (_, entry) => lineNumber - entry.lineNumber || columnNumber - entry.columnNumber);
161
165
  return index ? mappings[index - 1] : null;
162
166
  }
167
+ /** Returns the entry at the given position but only if an entry exists for that exact position */
168
+ findEntryExact(lineNumber, columnNumber) {
169
+ const entry = this.findEntry(lineNumber, columnNumber);
170
+ if (entry?.lineNumber === lineNumber && entry.columnNumber === columnNumber) {
171
+ return entry;
172
+ }
173
+ return null;
174
+ }
163
175
  findEntryRanges(lineNumber, columnNumber) {
164
176
  const mappings = this.mappings();
165
177
  const endIndex = Platform.ArrayUtilities.upperBound(mappings, undefined, (_, entry) => lineNumber - entry.lineNumber || columnNumber - entry.columnNumber);
@@ -285,7 +297,7 @@ export class SourceMap {
285
297
  try {
286
298
  this.eachSection(this.parseMap.bind(this));
287
299
  if (!this.hasScopeInfo()) {
288
- this.scopesFallbackPromiseForTest = this.#buildScopesFallback().then(info => {
300
+ this.#scopesFallbackPromise = this.#buildScopesFallback().then(info => {
289
301
  this.#scopesInfo = info;
290
302
  });
291
303
  }
@@ -423,7 +435,7 @@ export class SourceMap {
423
435
  nameIndex += tokenIter.nextVLQ();
424
436
  this.mappings().push(new SourceMapEntry(lineNumber, columnNumber, sourceIndex, sourceURL, sourceLineNumber, sourceColumnNumber, names[nameIndex]));
425
437
  }
426
- if (Root.Runtime.experiments.isEnabled("use-source-map-scopes" /* Root.Runtime.ExperimentName.USE_SOURCE_MAP_SCOPES */)) {
438
+ if (Root.Runtime.experiments.isEnabled(Root.ExperimentNames.ExperimentName.USE_SOURCE_MAP_SCOPES)) {
427
439
  if (!this.#scopesInfo) {
428
440
  this.#scopesInfo = new SourceMapScopesInfo(this, { scopes: [], ranges: [] });
429
441
  }
@@ -591,13 +603,6 @@ export class SourceMap {
591
603
  return this.embeddedContentByURL(sourceURL) === other.embeddedContentByURL(sourceURL) &&
592
604
  this.hasIgnoreListHint(sourceURL) === other.hasIgnoreListHint(sourceURL);
593
605
  }
594
- expandCallFrame(frame) {
595
- this.#ensureSourceMapProcessed();
596
- if (this.#scopesInfo === null) {
597
- return [frame];
598
- }
599
- return this.#scopesInfo.expandCallFrame(frame);
600
- }
601
606
  resolveScopeChain(frame) {
602
607
  this.#ensureSourceMapProcessed();
603
608
  if (this.#scopesInfo === null) {
@@ -158,7 +158,7 @@ export class SourceMapManager extends Common.ObjectWrapper.ObjectWrapper {
158
158
  }
159
159
  }
160
160
  waitForSourceMapsProcessedForTest() {
161
- return Promise.all(this.#sourceMaps.keys().map(sourceMap => sourceMap.scopesFallbackPromiseForTest));
161
+ return Promise.all(this.#sourceMaps.keys().map(sourceMap => sourceMap.waitForScopeInfo()));
162
162
  }
163
163
  }
164
164
  async function loadSourceMap(resourceLoader, url, debugId, initiator) {
@@ -100,15 +100,22 @@ export class SourceMapScopesInfo {
100
100
  sourceIndex < numSourceUrls;
101
101
  const isStackFrame = node.kind === 2 /* Formatter.FormatterWorkerPool.ScopeKind.FUNCTION */ ||
102
102
  node.kind === 4 /* Formatter.FormatterWorkerPool.ScopeKind.ARROW_FUNCTION */;
103
- // TODO(crbug.com/368222773): Instead of mapping `start`, we should report a number of candidates. e.g. for arrow functions we should
104
- // follow the spec and map the `=>` as the spec says that is where the original name (if any) for arrow functions can be found.
105
- const name = node.kind === 2 /* Formatter.FormatterWorkerPool.ScopeKind.FUNCTION */ ? startEntry?.name : undefined;
103
+ let name = undefined;
104
+ for (const offset of node.nameMappingLocations ?? []) {
105
+ const position = positionFromOffset(offset);
106
+ const entry = sourceMap.findEntryExact(position.line, position.column);
107
+ if (entry?.name !== undefined) {
108
+ // Only consider named mappings.
109
+ name = entry.name;
110
+ break;
111
+ }
112
+ }
106
113
  let scope;
107
114
  if (canMapOriginalPosition) {
108
115
  scope = {
109
116
  start: { line: startEntry.sourceLineNumber, column: startEntry.sourceColumnNumber },
110
117
  end: { line: endEntry.sourceLineNumber, column: endEntry.sourceColumnNumber },
111
- name,
118
+ name: name ?? node.name,
112
119
  isStackFrame,
113
120
  variables: [],
114
121
  children: [],
@@ -150,7 +157,8 @@ export class SourceMapScopesInfo {
150
157
  return Boolean(this.#originalScopes[sourceIdx]);
151
158
  }
152
159
  isEmpty() {
153
- return !this.#originalScopes.length && !this.#generatedRanges.length;
160
+ const noScopes = this.#originalScopes.every(scope => scope === null);
161
+ return noScopes && !this.#generatedRanges.length;
154
162
  }
155
163
  addOriginalScopesAtIndex(sourceIdx, scope) {
156
164
  if (!this.#originalScopes[sourceIdx]) {
@@ -228,28 +236,6 @@ export class SourceMapScopesInfo {
228
236
  }
229
237
  return result;
230
238
  }
231
- /**
232
- * Takes a V8 provided call frame and expands any inlined frames into virtual call frames.
233
- *
234
- * For call frames where nothing was inlined, the result contains only a single element,
235
- * the provided frame but with the original name.
236
- *
237
- * For call frames where we are paused in inlined code, this function returns a list of
238
- * call frames from "inner to outer". This is the call frame at index 0
239
- * signifies the top of this stack trace fragment.
240
- *
241
- * The rest are "virtual" call frames and will have an "inlineFrameIndex" set in ascending
242
- * order, so the condition `result[index] === result[index].inlineFrameIndex` always holds.
243
- */
244
- expandCallFrame(callFrame) {
245
- const { originalFunctionName, inlinedFunctions } = this.findInlinedFunctions(callFrame.location().lineNumber, callFrame.location().columnNumber);
246
- const result = [];
247
- for (const [index, fn] of inlinedFunctions.entries()) {
248
- result.push(callFrame.createVirtualCallFrame(index, fn.name));
249
- }
250
- result.push(callFrame.createVirtualCallFrame(result.length, originalFunctionName));
251
- return result;
252
- }
253
239
  /**
254
240
  * Given a generated position, this returns all the surrounding generated ranges from outer
255
241
  * to inner.
@@ -56,7 +56,9 @@ export class Target extends ProtocolClient.InspectorBackend.TargetBase {
56
56
  this.#capabilitiesMask = 4 /* Capability.JS */ | 8 /* Capability.LOG */ | 16 /* Capability.NETWORK */ | 32 /* Capability.TARGET */ |
57
57
  2048 /* Capability.INSPECTOR */ | 131072 /* Capability.IO */ | 524288 /* Capability.EVENT_BREAKPOINTS */;
58
58
  if (parentTarget?.type() !== Type.FRAME) {
59
- this.#capabilitiesMask |= 1 /* Capability.BROWSER */ | 8192 /* Capability.STORAGE */;
59
+ // TODO(crbug.com/406991275): This should also grant the `STORAGE` capability, but first the
60
+ // crashers in https://crbug.com/466134219 have to be resolved.
61
+ this.#capabilitiesMask |= 1 /* Capability.BROWSER */;
60
62
  }
61
63
  break;
62
64
  case Type.SHARED_WORKER:
@@ -1,4 +1,4 @@
1
- // Copyright 2025 The Chromium Authors
1
+ // Copyright 2026 The Chromium Authors
2
2
  // Use of this source code is governed by a BSD-style license that can be
3
3
  // found in the LICENSE file.
4
4
  export const config = {
@@ -1313,9 +1313,6 @@ export const config = {
1313
1313
  ]
1314
1314
  },
1315
1315
  {
1316
- "implicitValues": {
1317
- "aria-live": "off"
1318
- },
1319
1316
  "name": "marquee",
1320
1317
  "nameFrom": [
1321
1318
  "author"
@@ -1974,9 +1971,6 @@ export const config = {
1974
1971
  ]
1975
1972
  },
1976
1973
  {
1977
- "implicitValues": {
1978
- "aria-live": "off"
1979
- },
1980
1974
  "name": "timer",
1981
1975
  "nameFrom": [
1982
1976
  "author"
@@ -1,4 +1,4 @@
1
- // Copyright 2025 The Chromium Authors
1
+ // Copyright 2026 The Chromium Authors
2
2
  // Use of this source code is governed by a BSD-style license that can be
3
3
  // found in the LICENSE file.
4
4
  // This file is auto-generated, do not edit manually.
@@ -28,10 +28,6 @@ export const UIStrings = {
28
28
  * @description This warning occurs when the website attempts to invoke the deprecated `chrome.loadTimes().wasAlternateProtocolAvailable` API.
29
29
  */
30
30
  ChromeLoadTimesWasAlternateProtocolAvailable: "`chrome.loadTimes()` is deprecated, instead use standardized API: `nextHopProtocol` in Navigation Timing 2.",
31
- /**
32
- * @description This warning occurs when the browser attempts to store a cookie containing a banned character. Rather than the cookie string being truncated at the banned character, the entire cookie will be rejected now.
33
- */
34
- CookieWithTruncatingChar: "Cookies containing a `\\(0|r|n)` character will be rejected instead of truncated.",
35
31
  /**
36
32
  * @description This warning occurs when a frame accesses another frame's data after having set `document.domain` without having set the `Origin-Agent-Cluster` http header. This is a companion warning to `documentDomainSettingWithoutOriginAgentClusterHeader`, where that warning occurs when `document.domain` is set, and this warning occurs when an access has been made, based on that previous `document.domain` setting.
37
33
  */
@@ -244,10 +240,6 @@ export const UIStrings = {
244
240
  * @description Warning displayed to developers. It is shown when the `XMLHttpRequest` API is used in a way that it slows down the page load of the next page. The `main thread` refers to an operating systems thread used to run most of the processing of HTML documents, so please use a consistent wording.
245
241
  */
246
242
  XMLHttpRequestSynchronousInNonWorkerOutsideBeforeUnload: "Synchronous `XMLHttpRequest` on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.",
247
- /**
248
- * @description Warning displayed to developers that they are using externally loaded entities in an XML document that constitutes a part of the web page. Externally loaded entities are a technical concept of XML document processing.
249
- */
250
- XMLNoExternalEntities: "Externally loaded entities in XML parsing have been deprecated and will be removed from this browser soon.",
251
243
  /**
252
244
  * @description Warning displayed to developers that they are using either the XSLTProcessor API, or XSLT processing instructions, both of which have been deprecated and are scheduled to be removed.
253
245
  */
@@ -278,9 +270,6 @@ export const DEPRECATIONS_METADATA = {
278
270
  "ChromeLoadTimesWasAlternateProtocolAvailable": {
279
271
  "chromeStatusFeature": 5637885046816768
280
272
  },
281
- "CookieWithTruncatingChar": {
282
- "milestone": 103
283
- },
284
273
  "CrossOriginAccessBasedOnDocumentDomain": {
285
274
  "milestone": 115
286
275
  },
@@ -373,10 +362,6 @@ export const DEPRECATIONS_METADATA = {
373
362
  "XHRJSONEncodingDetection": {
374
363
  "milestone": 93
375
364
  },
376
- "XMLNoExternalEntities": {
377
- "chromeStatusFeature": 6734457763659776,
378
- "milestone": 144
379
- },
380
365
  "XSLT": {
381
366
  "chromeStatusFeature": 4709671889534976,
382
367
  "milestone": 143