chrome-devtools-frontend 1.0.1004171 → 1.0.1005672

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 (34) hide show
  1. package/config/gni/devtools_grd_files.gni +2 -0
  2. package/front_end/core/common/ParsedURL.ts +3 -3
  3. package/front_end/core/i18n/locales/en-US.json +41 -8
  4. package/front_end/core/i18n/locales/en-XL.json +41 -8
  5. package/front_end/core/sdk/DOMModel.ts +15 -0
  6. package/front_end/core/sdk/DebuggerModel.ts +12 -0
  7. package/front_end/core/sdk/RuntimeModel.ts +5 -3
  8. package/front_end/generated/InspectorBackendCommands.js +0 -2
  9. package/front_end/generated/protocol.ts +1 -2
  10. package/front_end/models/extensions/ExtensionPanel.ts +1 -1
  11. package/front_end/models/extensions/ExtensionServer.ts +11 -10
  12. package/front_end/models/har/Log.ts +4 -3
  13. package/front_end/models/issues_manager/DeprecationIssue.ts +5 -23
  14. package/front_end/panels/elements/ComputedStyleWidget.ts +6 -5
  15. package/front_end/panels/elements/ElementsTreeElement.ts +41 -0
  16. package/front_end/panels/elements/ElementsTreeOutline.ts +5 -0
  17. package/front_end/panels/elements/components/AdornerManager.ts +7 -0
  18. package/front_end/panels/elements/elementsTreeOutline.css +9 -0
  19. package/front_end/panels/network/NetworkItemView.ts +10 -1
  20. package/front_end/panels/network/RequestHeadersView.ts +1 -1
  21. package/front_end/panels/network/components/RequestHeadersView.css +78 -0
  22. package/front_end/panels/network/components/RequestHeadersView.ts +262 -0
  23. package/front_end/panels/network/components/components.ts +2 -0
  24. package/front_end/panels/network/forward/UIRequestLocation.ts +1 -0
  25. package/front_end/panels/network/networkLogView.css +3 -3
  26. package/front_end/panels/network/requestHeadersTree.css +6 -0
  27. package/front_end/panels/sources/CallStackSidebarPane.ts +13 -0
  28. package/front_end/panels/sources/ScopeChainSidebarPane.ts +4 -3
  29. package/front_end/panels/sources/sourcesView.css +4 -0
  30. package/front_end/ui/components/text_editor/config.ts +0 -1
  31. package/front_end/ui/legacy/components/data_grid/DataGrid.ts +16 -2
  32. package/front_end/ui/legacy/components/data_grid/ViewportDataGrid.ts +2 -2
  33. package/front_end/ui/legacy/components/inline_editor/ColorSwatch.ts +4 -0
  34. package/package.json +1 -1
@@ -1112,6 +1112,8 @@ grd_files_debug_sources = [
1112
1112
  "front_end/panels/network/SignedExchangeInfoView.js",
1113
1113
  "front_end/panels/network/binaryResourceView.css.js",
1114
1114
  "front_end/panels/network/blockedURLsPane.css.js",
1115
+ "front_end/panels/network/components/RequestHeadersView.css.js",
1116
+ "front_end/panels/network/components/RequestHeadersView.js",
1115
1117
  "front_end/panels/network/components/RequestTrustTokensView.css.js",
1116
1118
  "front_end/panels/network/components/RequestTrustTokensView.js",
1117
1119
  "front_end/panels/network/components/WebBundleInfoView.css.js",
@@ -264,9 +264,9 @@ export class ParsedURL {
264
264
  return devToolsPaths.join(separator) as DevToolsPathType;
265
265
  }
266
266
 
267
- static split<DevToolsPathType extends BrandedPathString>(devToolsPath: DevToolsPathType, separator: string|RegExp):
268
- DevToolsPathType[] {
269
- return devToolsPath.split(separator) as DevToolsPathType[];
267
+ static split<DevToolsPathType extends BrandedPathString>(
268
+ devToolsPath: DevToolsPathType, separator: string|RegExp, limit?: number): DevToolsPathType[] {
269
+ return devToolsPath.split(separator, limit) as DevToolsPathType[];
270
270
  }
271
271
 
272
272
  static toLowerCase<DevToolsPathType extends BrandedPathString>(devToolsPath: DevToolsPathType): DevToolsPathType {
@@ -1416,16 +1416,13 @@
1416
1416
  "message": "The website requested a subresource from a network that it could only access because of its users' privileged network position. These requests expose non-public devices and servers to the internet, increasing the risk of a cross-site request forgery (CSRF) attack, and/or information leakage. To mitigate these risks, Chrome deprecates requests to non-public subresources when initiated from non-secure contexts, and will start blocking them."
1417
1417
  },
1418
1418
  "models/issues_manager/DeprecationIssue.ts | legacyConstraintGoogIPv6": {
1419
- "message": "IPv6 is enabled-by-default and the ability to disable it using googIPv6 will soon be removed. Please stop using this legacy constraint."
1419
+ "message": "IPv6 is enabled-by-default and the ability to disable it using googIPv6 is targeted to be removed in M108, after which it will be ignored. Please stop using this legacy constraint."
1420
1420
  },
1421
1421
  "models/issues_manager/DeprecationIssue.ts | localCSSFileExtensionRejected": {
1422
1422
  "message": "CSS cannot be loaded from file: URLs unless they end in a .css file extension."
1423
1423
  },
1424
- "models/issues_manager/DeprecationIssue.ts | mediaElementAudioSourceNode": {
1425
- "message": "Creating a MediaElementAudioSourceNode on an OfflineAudioContext is deprecated and will be removed."
1426
- },
1427
1424
  "models/issues_manager/DeprecationIssue.ts | mediaSourceAbortRemove": {
1428
- "message": "Using SourceBuffer.abort() to abort remove()'s asynchronous range removal is deprecated due to specification change. Support will be removed in the future. You should instead await updateend. abort() is intended to only abort an asynchronous media append or reset parser state."
1425
+ "message": "Using SourceBuffer.abort() to abort remove()'s asynchronous range removal is deprecated due to specification change. Support will be removed in the future. You should listen to the updateend event instead. abort() is intended to only abort an asynchronous media append or reset parser state."
1429
1426
  },
1430
1427
  "models/issues_manager/DeprecationIssue.ts | mediaSourceDurationTruncatingBuffered": {
1431
1428
  "message": "Setting MediaSource.duration below the highest presentation timestamp of any buffered coded frames is deprecated due to specification change. Support for implicit removal of truncated buffered media will be removed in the future. You should instead perform explicit remove(newDuration, oldDuration) on all sourceBuffers, where newDuration < oldDuration."
@@ -1448,9 +1445,6 @@
1448
1445
  "models/issues_manager/DeprecationIssue.ts | paymentRequestBasicCard": {
1449
1446
  "message": "The basic-card payment method is deprecated and will be removed."
1450
1447
  },
1451
- "models/issues_manager/DeprecationIssue.ts | paymentRequestShowWithoutGesture": {
1452
- "message": "Calling PaymentRequest.show() without user activation is deprecated and will be removed."
1453
- },
1454
1448
  "models/issues_manager/DeprecationIssue.ts | pictureSourceSrc": {
1455
1449
  "message": "<source src> with a <picture> parent is invalid and therefore ignored. Please use <source srcset> instead."
1456
1450
  },
@@ -6599,6 +6593,42 @@
6599
6593
  "panels/network/BlockedURLsPane.ts | textPatternToBlockMatching": {
6600
6594
  "message": "Text pattern to block matching requests; use * for wildcard"
6601
6595
  },
6596
+ "panels/network/components/RequestHeadersView.ts | fromDiskCache": {
6597
+ "message": "(from disk cache)"
6598
+ },
6599
+ "panels/network/components/RequestHeadersView.ts | fromMemoryCache": {
6600
+ "message": "(from memory cache)"
6601
+ },
6602
+ "panels/network/components/RequestHeadersView.ts | fromPrefetchCache": {
6603
+ "message": "(from prefetch cache)"
6604
+ },
6605
+ "panels/network/components/RequestHeadersView.ts | fromServiceWorker": {
6606
+ "message": "(from service worker)"
6607
+ },
6608
+ "panels/network/components/RequestHeadersView.ts | fromSignedexchange": {
6609
+ "message": "(from signed-exchange)"
6610
+ },
6611
+ "panels/network/components/RequestHeadersView.ts | fromWebBundle": {
6612
+ "message": "(from Web Bundle)"
6613
+ },
6614
+ "panels/network/components/RequestHeadersView.ts | general": {
6615
+ "message": "General"
6616
+ },
6617
+ "panels/network/components/RequestHeadersView.ts | referrerPolicy": {
6618
+ "message": "Referrer Policy"
6619
+ },
6620
+ "panels/network/components/RequestHeadersView.ts | remoteAddress": {
6621
+ "message": "Remote Address"
6622
+ },
6623
+ "panels/network/components/RequestHeadersView.ts | requestMethod": {
6624
+ "message": "Request Method"
6625
+ },
6626
+ "panels/network/components/RequestHeadersView.ts | requestUrl": {
6627
+ "message": "Request URL"
6628
+ },
6629
+ "panels/network/components/RequestHeadersView.ts | statusCode": {
6630
+ "message": "Status Code"
6631
+ },
6602
6632
  "panels/network/components/RequestTrustTokensView.ts | aClientprovidedArgumentWas": {
6603
6633
  "message": "A client-provided argument was malformed or otherwise invalid."
6604
6634
  },
@@ -9461,6 +9491,9 @@
9461
9491
  "panels/sources/CallStackSidebarPane.ts | removeFromIgnoreList": {
9462
9492
  "message": "Remove from ignore list"
9463
9493
  },
9494
+ "panels/sources/CallStackSidebarPane.ts | restartFrame": {
9495
+ "message": "Restart frame"
9496
+ },
9464
9497
  "panels/sources/CallStackSidebarPane.ts | showIgnorelistedFrames": {
9465
9498
  "message": "Show ignore-listed frames"
9466
9499
  },
@@ -1416,16 +1416,13 @@
1416
1416
  "message": "T̂h́ê ẃêb́ŝít̂é r̂éq̂úêśt̂éd̂ á ŝúb̂ŕêśôúr̂ćê f́r̂óm̂ á n̂ét̂ẃôŕk̂ t́ĥát̂ ít̂ ćôúl̂d́ ôńl̂ý âćĉéŝś b̂éĉáûśê óf̂ ít̂ś ûśêŕŝ' ṕr̂ív̂íl̂éĝéd̂ ńêt́ŵór̂ḱ p̂óŝít̂íôń. T̂h́êśê ŕêq́ûéŝt́ŝ éx̂ṕôśê ńôń-p̂úb̂ĺîć d̂év̂íĉéŝ án̂d́ ŝér̂v́êŕŝ t́ô t́ĥé îńt̂ér̂ńêt́, îńĉŕêáŝín̂ǵ t̂h́ê ŕîśk̂ óf̂ á ĉŕôśŝ-śît́ê ŕêq́ûéŝt́ f̂ór̂ǵêŕŷ (ĆŜŔF̂) át̂t́âćk̂, án̂d́/ôŕ îńf̂ór̂ḿât́îón̂ ĺêák̂áĝé. T̂ó m̂ít̂íĝát̂é t̂h́êśê ŕîśk̂ś, Ĉh́r̂óm̂é d̂ép̂ŕêćât́êś r̂éq̂úêśt̂ś t̂ó n̂ón̂-ṕûb́l̂íĉ śûb́r̂éŝóûŕĉéŝ ẃĥén̂ ín̂ít̂íât́êd́ f̂ŕôḿ n̂ón̂-śêćûŕê ćôńt̂éx̂t́ŝ, án̂d́ ŵíl̂ĺ ŝt́âŕt̂ b́l̂óĉḱîńĝ t́ĥém̂."
1417
1417
  },
1418
1418
  "models/issues_manager/DeprecationIssue.ts | legacyConstraintGoogIPv6": {
1419
- "message": "ÎṔv̂6 íŝ én̂áb̂ĺêd́-b̂ý-d̂éf̂áûĺt̂ án̂d́ t̂h́ê áb̂íl̂ít̂ý t̂ó d̂íŝáb̂ĺê ít̂ úŝín̂ǵ googIPv6 íl̂ĺ ŝóôń b̂é r̂ém̂óv̂éd̂. Ṕl̂éâśê śt̂óp̂ úŝín̂ǵ t̂h́îś l̂éĝáĉý ĉón̂śt̂ŕâín̂t́."
1419
+ "message": "ÎṔv̂6 íŝ én̂áb̂ĺêd́-b̂ý-d̂éf̂áûĺt̂ án̂d́ t̂h́ê áb̂íl̂ít̂ý t̂ó d̂íŝáb̂ĺê ít̂ úŝín̂ǵ googIPv6 îś t̂ár̂ǵêt́êd́ t̂ó b̂é r̂ém̂óv̂éd̂ ín̂ Ḿ108, âf́t̂ér̂ ẃĥíĉh́ ît́ ŵíl̂ĺ b̂é îǵn̂ór̂éd̂. Ṕl̂éâśê śt̂óp̂ úŝín̂ǵ t̂h́îś l̂éĝáĉý ĉón̂śt̂ŕâín̂t́."
1420
1420
  },
1421
1421
  "models/issues_manager/DeprecationIssue.ts | localCSSFileExtensionRejected": {
1422
1422
  "message": "ĈŚŜ ćâńn̂ót̂ b́ê ĺôád̂éd̂ f́r̂óm̂ file: ÚR̂Ĺŝ ún̂ĺêśŝ t́ĥéŷ én̂d́ îń â .css f́îĺê éx̂t́êńŝíôń."
1423
1423
  },
1424
- "models/issues_manager/DeprecationIssue.ts | mediaElementAudioSourceNode": {
1425
- "message": "Ĉŕêát̂ín̂ǵ â MediaElementAudioSourceNode ón̂ án̂ OfflineAudioContext íŝ d́êṕr̂éĉát̂éd̂ án̂d́ ŵíl̂ĺ b̂é r̂ém̂óv̂éd̂."
1426
- },
1427
1424
  "models/issues_manager/DeprecationIssue.ts | mediaSourceAbortRemove": {
1428
- "message": "Ûśîńĝ SourceBuffer.abort() t́ô áb̂ór̂t́ remove()'ŝ áŝýn̂ćĥŕôńôúŝ ŕâńĝé r̂ém̂óv̂ál̂ íŝ d́êṕr̂éĉát̂éd̂ d́ûé t̂ó ŝṕêćîf́îćât́îón̂ ćĥán̂ǵê. Śûṕp̂ór̂t́ ŵíl̂ĺ b̂é r̂ém̂óv̂éd̂ ín̂ t́ĥé f̂út̂úr̂é. Ŷóû śĥóûĺd̂ ín̂śt̂éâd́ âẃâít̂ updateend. abort() í ín̂t́êd̂é t́ô ón̂ĺb̂ór̂śŷńĉh́r̂ón̂óûéd̂íâ áp̂ṕêń ór̂ ŕêśêár̂śêŕt́âê."
1425
+ "message": "Ûśîńĝ SourceBuffer.abort() t́ô áb̂ór̂t́ remove()'ŝ áŝýn̂ćĥŕôńôúŝ ŕâńĝé r̂ém̂óv̂ál̂ íŝ d́êṕr̂éĉát̂éd̂ d́ûé t̂ó ŝṕêćîf́îćât́îón̂ ćĥán̂ǵê. Śûṕp̂ór̂t́ ŵíl̂ĺ b̂é r̂ém̂óv̂éd̂ ín̂ t́ĥé f̂út̂úr̂é. Ŷóû śĥóûĺd̂ îśt̂én̂ t́ t́ĥé updateend êv́êńt̂ n̂śéâd́. abort() îś îńt̂éd́êd́ t̂ó ńl̂ý âb́ôŕt̂ án̂ áŝýn̂ćĥŕôúŝ ḿêd́îá ṕp̂én̂d́ ôŕ ét̂ ṕâŕŝé t̂át̂é."
1429
1426
  },
1430
1427
  "models/issues_manager/DeprecationIssue.ts | mediaSourceDurationTruncatingBuffered": {
1431
1428
  "message": "Ŝét̂t́îńĝ MediaSource.duration b́êĺôẃ t̂h́ê h́îǵĥéŝt́ p̂ŕêśêńt̂át̂íôń t̂ím̂éŝt́âḿp̂ óf̂ án̂ý b̂úf̂f́êŕêd́ ĉód̂éd̂ f́r̂ám̂éŝ íŝ d́êṕr̂éĉát̂éd̂ d́ûé t̂ó ŝṕêćîf́îćât́îón̂ ćĥán̂ǵê. Śûṕp̂ór̂t́ f̂ór̂ ím̂ṕl̂íĉít̂ ŕêḿôv́âĺ ôf́ t̂ŕûńĉát̂éd̂ b́ûf́f̂ér̂éd̂ ḿêd́îá ŵíl̂ĺ b̂é r̂ém̂óv̂éd̂ ín̂ t́ĥé f̂út̂úr̂é. Ŷóû śĥóûĺd̂ ín̂śt̂éâd́ p̂ér̂f́ôŕm̂ éx̂ṕl̂íĉít̂ remove(newDuration, oldDuration) ón̂ ál̂ĺ sourceBuffers, ŵh́êŕê newDuration < oldDuration."
@@ -1448,9 +1445,6 @@
1448
1445
  "models/issues_manager/DeprecationIssue.ts | paymentRequestBasicCard": {
1449
1446
  "message": "T̂h́ê basic-card ṕâým̂én̂t́ m̂ét̂h́ôd́ îś d̂ép̂ŕêćât́êd́ âńd̂ ẃîĺl̂ b́ê ŕêḿôv́êd́."
1450
1447
  },
1451
- "models/issues_manager/DeprecationIssue.ts | paymentRequestShowWithoutGesture": {
1452
- "message": "Ĉál̂ĺîńĝ PaymentRequest.show() ẃît́ĥóût́ ûśêŕ âćt̂ív̂át̂íôń îś d̂ép̂ŕêćât́êd́ âńd̂ ẃîĺl̂ b́ê ŕêḿôv́êd́."
1453
- },
1454
1448
  "models/issues_manager/DeprecationIssue.ts | pictureSourceSrc": {
1455
1449
  "message": "<source src> ŵít̂h́ â <picture> ṕâŕêńt̂ íŝ ín̂v́âĺîd́ âńd̂ t́ĥér̂éf̂ór̂é îǵn̂ór̂éd̂. Ṕl̂éâśê úŝé <source srcset> îńŝt́êád̂."
1456
1450
  },
@@ -6599,6 +6593,42 @@
6599
6593
  "panels/network/BlockedURLsPane.ts | textPatternToBlockMatching": {
6600
6594
  "message": "T̂éx̂t́ p̂át̂t́êŕn̂ t́ô b́l̂óĉḱ m̂át̂ćĥín̂ǵ r̂éq̂úêśt̂ś; ûśê * f́ôŕ ŵíl̂d́ĉár̂d́"
6601
6595
  },
6596
+ "panels/network/components/RequestHeadersView.ts | fromDiskCache": {
6597
+ "message": "(f̂ŕôḿ d̂íŝḱ ĉáĉh́ê)"
6598
+ },
6599
+ "panels/network/components/RequestHeadersView.ts | fromMemoryCache": {
6600
+ "message": "(f̂ŕôḿ m̂ém̂ór̂ý ĉáĉh́ê)"
6601
+ },
6602
+ "panels/network/components/RequestHeadersView.ts | fromPrefetchCache": {
6603
+ "message": "(f̂ŕôḿ p̂ŕêf́êt́ĉh́ ĉáĉh́ê)"
6604
+ },
6605
+ "panels/network/components/RequestHeadersView.ts | fromServiceWorker": {
6606
+ "message": "(f̂ŕôḿ service worker)"
6607
+ },
6608
+ "panels/network/components/RequestHeadersView.ts | fromSignedexchange": {
6609
+ "message": "(f̂ŕôḿ ŝíĝńêd́-êx́ĉh́âńĝé)"
6610
+ },
6611
+ "panels/network/components/RequestHeadersView.ts | fromWebBundle": {
6612
+ "message": "(f̂ŕôḿ Ŵéb̂ B́ûńd̂ĺê)"
6613
+ },
6614
+ "panels/network/components/RequestHeadersView.ts | general": {
6615
+ "message": "Ĝén̂ér̂ál̂"
6616
+ },
6617
+ "panels/network/components/RequestHeadersView.ts | referrerPolicy": {
6618
+ "message": "R̂éf̂ér̂ŕêŕ P̂ól̂íĉý"
6619
+ },
6620
+ "panels/network/components/RequestHeadersView.ts | remoteAddress": {
6621
+ "message": "R̂ém̂ót̂é Âd́d̂ŕêśŝ"
6622
+ },
6623
+ "panels/network/components/RequestHeadersView.ts | requestMethod": {
6624
+ "message": "R̂éq̂úêśt̂ Ḿêt́ĥód̂"
6625
+ },
6626
+ "panels/network/components/RequestHeadersView.ts | requestUrl": {
6627
+ "message": "R̂éq̂úêśt̂ ÚR̂Ĺ"
6628
+ },
6629
+ "panels/network/components/RequestHeadersView.ts | statusCode": {
6630
+ "message": "Ŝt́ât́ûś Ĉód̂é"
6631
+ },
6602
6632
  "panels/network/components/RequestTrustTokensView.ts | aClientprovidedArgumentWas": {
6603
6633
  "message": "Â ćl̂íêńt̂-ṕr̂óv̂íd̂éd̂ ár̂ǵûḿêńt̂ ẃâś m̂ál̂f́ôŕm̂éd̂ ór̂ ót̂h́êŕŵíŝé îńv̂ál̂íd̂."
6604
6634
  },
@@ -9461,6 +9491,9 @@
9461
9491
  "panels/sources/CallStackSidebarPane.ts | removeFromIgnoreList": {
9462
9492
  "message": "R̂ém̂óv̂é f̂ŕôḿ îǵn̂ór̂é l̂íŝt́"
9463
9493
  },
9494
+ "panels/sources/CallStackSidebarPane.ts | restartFrame": {
9495
+ "message": "R̂éŝt́âŕt̂ f́r̂ám̂é"
9496
+ },
9464
9497
  "panels/sources/CallStackSidebarPane.ts | showIgnorelistedFrames": {
9465
9498
  "message": "Ŝh́ôẃ îǵn̂ór̂é-l̂íŝt́êd́ f̂ŕâḿêś"
9466
9499
  },
@@ -71,6 +71,7 @@ export class DOMNode {
71
71
  #creationStackTraceInternal: Promise<Protocol.Runtime.StackTrace|null>|null;
72
72
  pseudoElementsInternal: Map<string, DOMNode>;
73
73
  #distributedNodesInternal: DOMNodeShortcut[];
74
+ assignedSlot: DOMNodeShortcut|null;
74
75
  readonly shadowRootsInternal: DOMNode[];
75
76
  #attributesInternal: Map<string, Attribute>;
76
77
  // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration
@@ -101,6 +102,7 @@ export class DOMNode {
101
102
  this.#creationStackTraceInternal = null;
102
103
  this.pseudoElementsInternal = new Map();
103
104
  this.#distributedNodesInternal = [];
105
+ this.assignedSlot = null;
104
106
  this.shadowRootsInternal = [];
105
107
  this.#attributesInternal = new Map();
106
108
  this.#markers = new Map();
@@ -181,6 +183,10 @@ export class DOMNode {
181
183
  this.setDistributedNodePayloads(payload.distributedNodes);
182
184
  }
183
185
 
186
+ if (payload.assignedSlot) {
187
+ this.setAssignedSlot(payload.assignedSlot);
188
+ }
189
+
184
190
  if (payload.children) {
185
191
  this.setChildrenPayload(payload.children);
186
192
  }
@@ -341,6 +347,10 @@ export class DOMNode {
341
347
  return this.pseudoElementsInternal.get(DOMNode.PseudoElementNames.Marker) || null;
342
348
  }
343
349
 
350
+ hasAssignedSlot(): boolean {
351
+ return this.assignedSlot !== null;
352
+ }
353
+
344
354
  isInsertionPoint(): boolean {
345
355
  return !this.isXMLNode() &&
346
356
  (this.#nodeNameInternal === 'SHADOW' || this.#nodeNameInternal === 'CONTENT' ||
@@ -680,6 +690,11 @@ export class DOMNode {
680
690
  }
681
691
  }
682
692
 
693
+ setAssignedSlot(payload: Protocol.DOM.BackendNode): void {
694
+ this.assignedSlot =
695
+ new DOMNodeShortcut(this.#domModelInternal.target(), payload.backendNodeId, payload.nodeType, payload.nodeName);
696
+ }
697
+
683
698
  private renumber(): void {
684
699
  if (!this.childrenInternal) {
685
700
  throw new Error('DOMNode._children is expected to not be null.');
@@ -1248,6 +1248,8 @@ export class CallFrame {
1248
1248
  #returnValueInternal: RemoteObject|null;
1249
1249
  readonly warnings: string[] = [];
1250
1250
 
1251
+ readonly canBeRestarted: boolean;
1252
+
1251
1253
  constructor(
1252
1254
  debuggerModel: DebuggerModel, script: Script, payload: Protocol.Debugger.CallFrame, inlineFrameIndex?: number,
1253
1255
  functionName?: string) {
@@ -1259,6 +1261,7 @@ export class CallFrame {
1259
1261
  this.#localScopeInternal = null;
1260
1262
  this.#inlineFrameIndexInternal = inlineFrameIndex || 0;
1261
1263
  this.#functionNameInternal = functionName || payload.functionName;
1264
+ this.canBeRestarted = Boolean(payload.canBeRestarted);
1262
1265
  for (let i = 0; i < payload.scopeChain.length; ++i) {
1263
1266
  const scope = new Scope(this, i);
1264
1267
  this.#scopeChainInternal.push(scope);
@@ -1390,6 +1393,15 @@ export class CallFrame {
1390
1393
  return {object: runtimeModel.createRemoteObject(response.result), exceptionDetails: response.exceptionDetails};
1391
1394
  }
1392
1395
 
1396
+ async restart(): Promise<void> {
1397
+ console.assert(this.canBeRestarted, 'This frame can not be restarted.');
1398
+ // Note that even if `canBeRestarted` is true, the restart frame call can still fail.
1399
+ // The user can evaluate arbitrary code between pausing and restarting the frame that
1400
+ // could mess with the call stack.
1401
+ await this.debuggerModel.agent.invoke_restartFrame(
1402
+ {callFrameId: this.id, mode: Protocol.Debugger.RestartFrameRequestMode.StepInto});
1403
+ }
1404
+
1393
1405
  getPayload(): Protocol.Debugger.CallFrame {
1394
1406
  return this.payload;
1395
1407
  }
@@ -36,6 +36,7 @@ import * as Common from '../common/common.js';
36
36
  import * as Host from '../host/host.js';
37
37
  import type * as ProtocolProxyApi from '../../generated/protocol-proxy-api.js';
38
38
  import type * as Protocol from '../../generated/protocol.js';
39
+ import type * as Platform from '../platform/platform.js';
39
40
 
40
41
  import type {FunctionDetails} from './DebuggerModel.js';
41
42
  import {DebuggerModel} from './DebuggerModel.js';
@@ -121,7 +122,8 @@ export class RuntimeModel extends SDKModel<EventTypes> {
121
122
  executionContextCreated(context: Protocol.Runtime.ExecutionContextDescription): void {
122
123
  const data = context.auxData || {isDefault: true};
123
124
  const executionContext = new ExecutionContext(
124
- this, context.id, context.uniqueId, context.name, context.origin, data['isDefault'], data['frameId']);
125
+ this, context.id, context.uniqueId, context.name, context.origin as Platform.DevToolsPath.UrlString,
126
+ data['isDefault'], data['frameId']);
125
127
  this.#executionContextById.set(executionContext.id, executionContext);
126
128
  this.dispatchEventToListeners(Events.ExecutionContextCreated, executionContext);
127
129
  }
@@ -561,14 +563,14 @@ export class ExecutionContext {
561
563
  uniqueId: string;
562
564
  name: string;
563
565
  #labelInternal: string|null;
564
- origin: string;
566
+ origin: Platform.DevToolsPath.UrlString;
565
567
  isDefault: boolean;
566
568
  runtimeModel: RuntimeModel;
567
569
  debuggerModel: DebuggerModel;
568
570
  frameId: Protocol.Page.FrameId|undefined;
569
571
  constructor(
570
572
  runtimeModel: RuntimeModel, id: Protocol.Runtime.ExecutionContextId, uniqueId: string, name: string,
571
- origin: string, isDefault: boolean, frameId?: Protocol.Page.FrameId) {
573
+ origin: Platform.DevToolsPath.UrlString, isDefault: boolean, frameId?: Protocol.Page.FrameId) {
572
574
  this.id = id;
573
575
  this.uniqueId = uniqueId;
574
576
  this.name = name;
@@ -291,7 +291,6 @@ export function registerCommands(inspectorBackend) {
291
291
  InsecurePrivateNetworkSubresourceRequest: 'InsecurePrivateNetworkSubresourceRequest',
292
292
  LegacyConstraintGoogIPv6: 'LegacyConstraintGoogIPv6',
293
293
  LocalCSSFileExtensionRejected: 'LocalCSSFileExtensionRejected',
294
- MediaElementAudioSourceNode: 'MediaElementAudioSourceNode',
295
294
  MediaSourceAbortRemove: 'MediaSourceAbortRemove',
296
295
  MediaSourceDurationTruncatingBuffered: 'MediaSourceDurationTruncatingBuffered',
297
296
  NoSysexWebMIDIWithoutPermission: 'NoSysexWebMIDIWithoutPermission',
@@ -299,7 +298,6 @@ export function registerCommands(inspectorBackend) {
299
298
  NotificationPermissionRequestedIframe: 'NotificationPermissionRequestedIframe',
300
299
  ObsoleteWebRtcCipherSuite: 'ObsoleteWebRtcCipherSuite',
301
300
  PaymentRequestBasicCard: 'PaymentRequestBasicCard',
302
- PaymentRequestShowWithoutGesture: 'PaymentRequestShowWithoutGesture',
303
301
  PictureSourceSrc: 'PictureSourceSrc',
304
302
  PrefixedCancelAnimationFrame: 'PrefixedCancelAnimationFrame',
305
303
  PrefixedRequestAnimationFrame: 'PrefixedRequestAnimationFrame',
@@ -1038,7 +1038,6 @@ export namespace Audits {
1038
1038
  InsecurePrivateNetworkSubresourceRequest = 'InsecurePrivateNetworkSubresourceRequest',
1039
1039
  LegacyConstraintGoogIPv6 = 'LegacyConstraintGoogIPv6',
1040
1040
  LocalCSSFileExtensionRejected = 'LocalCSSFileExtensionRejected',
1041
- MediaElementAudioSourceNode = 'MediaElementAudioSourceNode',
1042
1041
  MediaSourceAbortRemove = 'MediaSourceAbortRemove',
1043
1042
  MediaSourceDurationTruncatingBuffered = 'MediaSourceDurationTruncatingBuffered',
1044
1043
  NoSysexWebMIDIWithoutPermission = 'NoSysexWebMIDIWithoutPermission',
@@ -1046,7 +1045,6 @@ export namespace Audits {
1046
1045
  NotificationPermissionRequestedIframe = 'NotificationPermissionRequestedIframe',
1047
1046
  ObsoleteWebRtcCipherSuite = 'ObsoleteWebRtcCipherSuite',
1048
1047
  PaymentRequestBasicCard = 'PaymentRequestBasicCard',
1049
- PaymentRequestShowWithoutGesture = 'PaymentRequestShowWithoutGesture',
1050
1048
  PictureSourceSrc = 'PictureSourceSrc',
1051
1049
  PrefixedCancelAnimationFrame = 'PrefixedCancelAnimationFrame',
1052
1050
  PrefixedRequestAnimationFrame = 'PrefixedRequestAnimationFrame',
@@ -3212,6 +3210,7 @@ export namespace DOM {
3212
3210
  */
3213
3211
  isSVG?: boolean;
3214
3212
  compatibilityMode?: CompatibilityMode;
3213
+ assignedSlot?: BackendNode;
3215
3214
  }
3216
3215
 
3217
3216
  /**
@@ -157,7 +157,7 @@ export class ExtensionSidebarPane extends UI.View.SimpleView {
157
157
  expression, true, false, evaluateOptions, securityOrigin, this.onEvaluate.bind(this, title, callback));
158
158
  }
159
159
 
160
- setPage(url: string): void {
160
+ setPage(url: Platform.DevToolsPath.UrlString): void {
161
161
  if (this.objectPropertiesView) {
162
162
  this.objectPropertiesView.detach();
163
163
  delete this.objectPropertiesView;
@@ -54,7 +54,7 @@ import {ExtensionTraceProvider} from './ExtensionTraceProvider.js';
54
54
  import {LanguageExtensionEndpoint} from './LanguageExtensionEndpoint.js';
55
55
  import {PrivateAPI} from './ExtensionAPI.js';
56
56
 
57
- const extensionOrigins: WeakMap<MessagePort, string> = new WeakMap();
57
+ const extensionOrigins: WeakMap<MessagePort, Platform.DevToolsPath.UrlString> = new WeakMap();
58
58
 
59
59
  declare global {
60
60
  interface Window {
@@ -342,7 +342,7 @@ export class ExtensionServer extends Common.ObjectWrapper.ObjectWrapper<EventTyp
342
342
  return undefined;
343
343
  }
344
344
 
345
- private getExtensionOrigin(port: MessagePort): string {
345
+ private getExtensionOrigin(port: MessagePort): Platform.DevToolsPath.UrlString {
346
346
  const origin = extensionOrigins.get(port);
347
347
  if (!origin) {
348
348
  throw new Error('Received a message from an unregistered extension');
@@ -837,7 +837,7 @@ export class ExtensionServer extends Common.ObjectWrapper.ObjectWrapper<EventTyp
837
837
  this.postNotification(PrivateAPI.Events.PanelObjectSelected + 'elements');
838
838
  }
839
839
 
840
- sourceSelectionChanged(url: string, range: TextUtils.TextRange.TextRange): void {
840
+ sourceSelectionChanged(url: Platform.DevToolsPath.UrlString, range: TextUtils.TextRange.TextRange): void {
841
841
  this.postNotification(PrivateAPI.Events.PanelObjectSelected + 'sources', {
842
842
  startLine: range.startLine,
843
843
  startColumn: range.startColumn,
@@ -893,7 +893,7 @@ export class ExtensionServer extends Common.ObjectWrapper.ObjectWrapper<EventTyp
893
893
  return true;
894
894
  }
895
895
 
896
- private registerExtension(origin: string, port: MessagePort): void {
896
+ private registerExtension(origin: Platform.DevToolsPath.UrlString, port: MessagePort): void {
897
897
  if (!this.registeredExtensions.has(origin)) {
898
898
  if (origin !== window.location.origin) { // Just ignore inspector frames.
899
899
  console.error('Ignoring unauthorized client request from ' + origin);
@@ -907,7 +907,7 @@ export class ExtensionServer extends Common.ObjectWrapper.ObjectWrapper<EventTyp
907
907
 
908
908
  private onWindowMessage(event: MessageEvent): void {
909
909
  if (event.data === 'registerExtension') {
910
- this.registerExtension(event.origin, event.ports[0]);
910
+ this.registerExtension(event.origin as Platform.DevToolsPath.UrlString, event.ports[0]);
911
911
  }
912
912
  }
913
913
 
@@ -981,8 +981,9 @@ export class ExtensionServer extends Common.ObjectWrapper.ObjectWrapper<EventTyp
981
981
  removeLastEventListener.bind(this));
982
982
  }
983
983
 
984
- private expandResourcePath(extensionPath: string, resourcePath: string): string {
985
- return extensionPath + '/' + Common.ParsedURL.normalizePath(resourcePath);
984
+ private expandResourcePath(extensionPath: Platform.DevToolsPath.UrlString, resourcePath: string):
985
+ Platform.DevToolsPath.UrlString {
986
+ return extensionPath + '/' + Common.ParsedURL.normalizePath(resourcePath) as Platform.DevToolsPath.UrlString;
986
987
  }
987
988
 
988
989
  evaluate(
@@ -992,7 +993,7 @@ export class ExtensionServer extends Common.ObjectWrapper.ObjectWrapper<EventTyp
992
993
  |undefined {
993
994
  let context;
994
995
 
995
- function resolveURLToFrame(url: string): SDK.ResourceTreeModel.ResourceTreeFrame|null {
996
+ function resolveURLToFrame(url: Platform.DevToolsPath.UrlString): SDK.ResourceTreeModel.ResourceTreeFrame|null {
996
997
  let found = null;
997
998
  function hasMatchingURL(frame: SDK.ResourceTreeModel.ResourceTreeFrame): SDK.ResourceTreeModel.ResourceTreeFrame|
998
999
  null {
@@ -1006,7 +1007,7 @@ export class ExtensionServer extends Common.ObjectWrapper.ObjectWrapper<EventTyp
1006
1007
  options = options || {};
1007
1008
  let frame;
1008
1009
  if (options.frameURL) {
1009
- frame = resolveURLToFrame(options.frameURL);
1010
+ frame = resolveURLToFrame(options.frameURL as Platform.DevToolsPath.UrlString);
1010
1011
  } else {
1011
1012
  const target = SDK.TargetManager.TargetManager.instance().mainTarget();
1012
1013
  const resourceTreeModel = target && target.model(SDK.ResourceTreeModel.ResourceTreeModel);
@@ -1085,7 +1086,7 @@ export class ExtensionServer extends Common.ObjectWrapper.ObjectWrapper<EventTyp
1085
1086
  return undefined;
1086
1087
  }
1087
1088
 
1088
- private canInspectURL(url: string): boolean {
1089
+ private canInspectURL(url: Platform.DevToolsPath.UrlString): boolean {
1089
1090
  let parsedURL;
1090
1091
  // This is only to work around invalid URLs we're occasionally getting from some tests.
1091
1092
  // TODO(caseq): make sure tests supply valid URLs or we specifically handle invalid ones.
@@ -35,6 +35,7 @@
35
35
  // See https://bugs.webkit.org/show_bug.cgi?id=58127 for details.
36
36
 
37
37
  import * as Common from '../../core/common/common.js';
38
+ import type * as Platform from '../../core/platform/platform.js';
38
39
  import * as SDK from '../../core/sdk/sdk.js';
39
40
  import type * as Protocol from '../../generated/protocol.js';
40
41
 
@@ -346,8 +347,8 @@ export class Entry {
346
347
  return parameters.slice();
347
348
  }
348
349
 
349
- private buildRequestURL(url: string): string {
350
- return url.split('#', 2)[0];
350
+ private buildRequestURL(url: Platform.DevToolsPath.UrlString): Platform.DevToolsPath.UrlString {
351
+ return Common.ParsedURL.ParsedURL.split(url, '#', 2)[0];
351
352
  }
352
353
 
353
354
  private buildCookies(cookies: SDK.Cookie.Cookie[]): CookieDTO[] {
@@ -438,7 +439,7 @@ export interface Content {
438
439
 
439
440
  export interface Request {
440
441
  method: string;
441
- url: string;
442
+ url: Platform.DevToolsPath.UrlString;
442
443
  httpVersion: string;
443
444
  headers: Object;
444
445
  queryString: Parameter[];
@@ -34,7 +34,9 @@ const UIStrings = {
34
34
  authorizationCoveredByWildcard:
35
35
  'Authorization will not be covered by the wildcard symbol (*) in CORS `Access-Control-Allow-Headers` handling.',
36
36
  /**
37
- * @description TODO(crbug.com/1320334): Description needed for translation
37
+ * @description This warning occurs when a page attempts to request a resource
38
+ * whose URL contained both a newline character (`\n` or `\r`), and a
39
+ * less-than character (`<`). These resources are blocked.
38
40
  */
39
41
  canRequestURLHTTPContainingNewline:
40
42
  'Resource requests whose URLs contained both removed whitespace `\\(n|r|t)` characters and less-than characters (`<`) are blocked. Please remove newlines and encode less-than characters from places like element attribute values in order to load these resources.',
@@ -131,22 +133,17 @@ const UIStrings = {
131
133
  * use of IPv6 addresses with a non-standard API.
132
134
  */
133
135
  legacyConstraintGoogIPv6:
134
- 'IPv6 is enabled-by-default and the ability to disable it using `googIPv6` will soon be removed. Please stop using this legacy constraint.',
136
+ 'IPv6 is enabled-by-default and the ability to disable it using `googIPv6` is targeted to be removed in M108, after which it will be ignored. Please stop using this legacy constraint.',
135
137
  /**
136
138
  * @description TODO(crbug.com/1318865): Description needed for translation
137
139
  */
138
140
  localCSSFileExtensionRejected:
139
141
  'CSS cannot be loaded from `file:` URLs unless they end in a `.css` file extension.',
140
- /**
141
- * @description TODO(crbug.com/1320344): Description needed for translation
142
- */
143
- mediaElementAudioSourceNode:
144
- 'Creating a `MediaElementAudioSourceNode` on an `OfflineAudioContext` is deprecated and will be removed.',
145
142
  /**
146
143
  * @description TODO(crbug.com/1320345): Description needed for translation
147
144
  */
148
145
  mediaSourceAbortRemove:
149
- 'Using `SourceBuffer.abort()` to abort `remove()`\'s asynchronous range removal is deprecated due to specification change. Support will be removed in the future. You should instead await `updateend`. `abort()` is intended to only abort an asynchronous media append or reset parser state.',
146
+ 'Using `SourceBuffer.abort()` to abort `remove()`\'s asynchronous range removal is deprecated due to specification change. Support will be removed in the future. You should listen to the `updateend` event instead. `abort()` is intended to only abort an asynchronous media append or reset parser state.',
150
147
  /**
151
148
  * @description TODO(crbug.com/1320346): Description needed for translation
152
149
  */
@@ -176,11 +173,6 @@ const UIStrings = {
176
173
  * @description TODO(crbug.com/1320349): Description needed for translation
177
174
  */
178
175
  paymentRequestBasicCard: 'The `basic-card` payment method is deprecated and will be removed.',
179
- /**
180
- * @description TODO(crbug.com/1320350): Description needed for translation
181
- */
182
- paymentRequestShowWithoutGesture:
183
- 'Calling `PaymentRequest.show()` without user activation is deprecated and will be removed.',
184
176
  /**
185
177
  * @description This issue indicates that a `<source>` element with a `<picture>` parent was using an `src` attribute, which is not valid and is ignored by the browser. The `srcset` attribute should be used instead.
186
178
  */
@@ -415,11 +407,6 @@ export class DeprecationIssue extends Issue {
415
407
  messageFunction = i18nLazyString(UIStrings.localCSSFileExtensionRejected);
416
408
  milestone = 64;
417
409
  break;
418
- case Protocol.Audits.DeprecationIssueType.MediaElementAudioSourceNode:
419
- messageFunction = i18nLazyString(UIStrings.mediaElementAudioSourceNode);
420
- feature = 5258622686724096;
421
- milestone = 71;
422
- break;
423
410
  case Protocol.Audits.DeprecationIssueType.MediaSourceAbortRemove:
424
411
  messageFunction = i18nLazyString(UIStrings.mediaSourceAbortRemove);
425
412
  feature = 6107495151960064;
@@ -449,11 +436,6 @@ export class DeprecationIssue extends Issue {
449
436
  feature = 5730051011117056;
450
437
  milestone = 100;
451
438
  break;
452
- case Protocol.Audits.DeprecationIssueType.PaymentRequestShowWithoutGesture:
453
- messageFunction = i18nLazyString(UIStrings.paymentRequestShowWithoutGesture);
454
- feature = 5948593429020672;
455
- milestone = 102;
456
- break;
457
439
  case Protocol.Audits.DeprecationIssueType.PictureSourceSrc:
458
440
  messageFunction = i18nLazyString(UIStrings.pictureSourceSrc);
459
441
  break;
@@ -97,7 +97,7 @@ const createPropertyElement = (node: SDK.DOMModel.DOMNode, propertyName: string,
97
97
  const propertyElement = new ElementsComponents.ComputedStyleProperty.ComputedStyleProperty();
98
98
 
99
99
  const renderer = new StylesSidebarPropertyRenderer(null, node, propertyName, propertyValue);
100
- renderer.setColorHandler(processColor.bind(null, false /* computed styles don't provide the original format */));
100
+ renderer.setColorHandler(processColor);
101
101
 
102
102
  const propertyNameElement = renderer.renderName();
103
103
  propertyNameElement.slot = 'property-name';
@@ -117,7 +117,7 @@ const createTraceElement =
117
117
  const trace = new ElementsComponents.ComputedStyleTrace.ComputedStyleTrace();
118
118
 
119
119
  const renderer = new StylesSidebarPropertyRenderer(null, node, property.name, (property.value as string));
120
- renderer.setColorHandler(processColor.bind(null, true));
120
+ renderer.setColorHandler(processColor);
121
121
  const valueElement = renderer.renderValue();
122
122
  valueElement.slot = 'trace-value';
123
123
  trace.appendChild(valueElement);
@@ -138,11 +138,11 @@ const createTraceElement =
138
138
  return trace;
139
139
  };
140
140
 
141
- const processColor = (autoDetectFormat: boolean, text: string): Node => {
141
+ const processColor = (text: string): Node => {
142
142
  const swatch = new InlineEditor.ColorSwatch.ColorSwatch();
143
- swatch.renderColor(text, autoDetectFormat || Common.Color.Format.RGB);
143
+ swatch.renderColor(text, true);
144
144
  const valueElement = document.createElement('span');
145
- valueElement.textContent = text;
145
+ valueElement.textContent = swatch.getText();
146
146
  swatch.append(valueElement);
147
147
 
148
148
  swatch.addEventListener(
@@ -252,6 +252,7 @@ export class ComputedStyleWidget extends UI.ThrottledWidget.ThrottledWidget {
252
252
  fontsWidget.show(this.contentElement);
253
253
 
254
254
  this.idleCallbackManager = new IdleCallbackManager();
255
+ Common.Settings.Settings.instance().moduleSetting('colorFormat').addChangeListener(this.update.bind(this));
255
256
  }
256
257
 
257
258
  onResize(): void {