chrome-devtools-frontend 1.0.1013367 → 1.0.1014853

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.
package/.eslintignore CHANGED
@@ -7,6 +7,7 @@ front_end/.eslintrc.js
7
7
  front_end/diff/diff_match_patch.js
8
8
  front_end/generated/protocol.ts
9
9
  front_end/javascript_metadata/NativeFunctions.js
10
+ front_end/javascript_metadata/DOMPinnedProperties.ts
10
11
  front_end/third_party/
11
12
  node_modules
12
13
  scripts/migration/**/*.js
package/docs/workflows.md CHANGED
@@ -246,6 +246,34 @@ third_party/blink/tools/run_web_tests.py -t Default http/tests/devtools
246
246
 
247
247
  Usual [steps](https://chromium.googlesource.com/chromium/src/+/main/docs/contributing.md#creating-a-change) for creating a change work out of the box, when executed in the DevTools frontend repository.
248
248
 
249
+ Tips to create meaningful CL descriptions:
250
+ - Provide information on what was changed and why
251
+ - Provide before/after screenshots (if applicable)
252
+ - Provide relevant link to demo or example (if applicable)
253
+ - Provide link to design doc (if applicable)
254
+
255
+ Example CL, adapted from [Chromium guidelines](https://chromium.googlesource.com/chromium/src/+/main/docs/contributing.md#uploading-a-change-for-review):
256
+
257
+ ```
258
+ Summary of change (one line)
259
+
260
+ Longer description of change addressing as appropriate:
261
+ what change was made, why the change is made, context if
262
+ it is part of many changes, description of previous behavior
263
+ and newly introduced differences, etc.
264
+
265
+ Long lines should be wrapped to 72 columns for easier log message
266
+ viewing in terminals.
267
+
268
+ How to test:
269
+ 1. ..
270
+ 2. ..
271
+
272
+ Before: https://page-to-before-screenshot.com/before
273
+ After: https://page-to-after-screenshot.com/after
274
+ Bug: 123456
275
+
276
+ ```
249
277
  ## Managing dependencies
250
278
 
251
279
  - To sync dependencies from Chromium to DevTools frontend, use `scripts/deps/roll_deps.py && npm run generate-protocol-resources`.
@@ -1412,6 +1412,9 @@
1412
1412
  "models/issues_manager/DeprecationIssue.ts | hostCandidateAttributeGetter": {
1413
1413
  "message": "RTCPeerConnectionIceErrorEvent.hostCandidate is deprecated. Please use RTCPeerConnectionIceErrorEvent.address or RTCPeerConnectionIceErrorEvent.port instead."
1414
1414
  },
1415
+ "models/issues_manager/DeprecationIssue.ts | identityInCanMakePaymentEvent": {
1416
+ "message": "The merchant origin and arbitrary data from the canmakepayment service worker event are deprecated and will be removed: topOrigin, paymentRequestOrigin, methodData, modifiers."
1417
+ },
1415
1418
  "models/issues_manager/DeprecationIssue.ts | insecurePrivateNetworkSubresourceRequest": {
1416
1419
  "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
1420
  },
@@ -1442,11 +1445,14 @@
1442
1445
  "models/issues_manager/DeprecationIssue.ts | obsoleteWebRtcCipherSuite": {
1443
1446
  "message": "Your partner is negotiating an obsolete (D)TLS version. Please check with your partner to have this fixed."
1444
1447
  },
1448
+ "models/issues_manager/DeprecationIssue.ts | openWebDatabaseInsecureContext": {
1449
+ "message": "WebSQL in non-secure contexts is deprecated and will be removed in M107. Please use Web Storage or Indexed Database."
1450
+ },
1445
1451
  "models/issues_manager/DeprecationIssue.ts | pictureSourceSrc": {
1446
1452
  "message": "<source src> with a <picture> parent is invalid and therefore ignored. Please use <source srcset> instead."
1447
1453
  },
1448
1454
  "models/issues_manager/DeprecationIssue.ts | prefixedStorageInfo": {
1449
- "message": "window.webkitStorageInfo is deprecated. Please use navigator.webkitTemporaryStorage or navigator.webkitPersistentStorage instead."
1455
+ "message": "window.webkitStorageInfo is deprecated. Please use standardized navigator.storage instead."
1450
1456
  },
1451
1457
  "models/issues_manager/DeprecationIssue.ts | requestedSubresourceWithEmbeddedCredentials": {
1452
1458
  "message": "Subresource requests whose URLs contain embedded credentials (e.g. https://user:pass@host/) are blocked."
@@ -1412,6 +1412,9 @@
1412
1412
  "models/issues_manager/DeprecationIssue.ts | hostCandidateAttributeGetter": {
1413
1413
  "message": "RTCPeerConnectionIceErrorEvent.hostCandidate îś d̂ép̂ŕêćât́êd́. P̂ĺêáŝé ûśê RTCPeerConnectionIceErrorEvent.address ór̂ RTCPeerConnectionIceErrorEvent.port ín̂śt̂éâd́."
1414
1414
  },
1415
+ "models/issues_manager/DeprecationIssue.ts | identityInCanMakePaymentEvent": {
1416
+ "message": "T̂h́ê ḿêŕĉh́âńt̂ ór̂íĝín̂ án̂d́ âŕb̂ít̂ŕâŕŷ d́ât́â f́r̂óm̂ t́ĥé canmakepayment ŝér̂v́îćê ẃôŕk̂ér̂ év̂én̂t́ âŕê d́êṕr̂éĉát̂éd̂ án̂d́ ŵíl̂ĺ b̂é r̂ém̂óv̂éd̂: topOrigin, paymentRequestOrigin, methodData, modifiers."
1417
+ },
1415
1418
  "models/issues_manager/DeprecationIssue.ts | insecurePrivateNetworkSubresourceRequest": {
1416
1419
  "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
1420
  },
@@ -1442,11 +1445,14 @@
1442
1445
  "models/issues_manager/DeprecationIssue.ts | obsoleteWebRtcCipherSuite": {
1443
1446
  "message": "Ŷóûŕ p̂ár̂t́n̂ér̂ íŝ ńêǵôt́îát̂ín̂ǵ âń ôb́ŝól̂ét̂é (D̂)T́L̂Ś v̂ér̂śîón̂. Ṕl̂éâśê ćĥéĉḱ ŵít̂h́ ŷóûŕ p̂ár̂t́n̂ér̂ t́ô h́âv́ê t́ĥíŝ f́îx́êd́."
1444
1447
  },
1448
+ "models/issues_manager/DeprecationIssue.ts | openWebDatabaseInsecureContext": {
1449
+ "message": "Ŵéb̂ŚQ̂Ĺ îń n̂ón̂-śêćûŕê ćôńt̂éx̂t́ŝ íŝ d́êṕr̂éĉát̂éd̂ án̂d́ ŵíl̂ĺ b̂é r̂ém̂óv̂éd̂ ín̂ Ḿ107. P̂ĺêáŝé ûśê Ẃêb́ Ŝt́ôŕâǵê ór̂ Ín̂d́êx́êd́ D̂át̂áb̂áŝé."
1450
+ },
1445
1451
  "models/issues_manager/DeprecationIssue.ts | pictureSourceSrc": {
1446
1452
  "message": "<source src> ŵít̂h́ â <picture> ṕâŕêńt̂ íŝ ín̂v́âĺîd́ âńd̂ t́ĥér̂éf̂ór̂é îǵn̂ór̂éd̂. Ṕl̂éâśê úŝé <source srcset> îńŝt́êád̂."
1447
1453
  },
1448
1454
  "models/issues_manager/DeprecationIssue.ts | prefixedStorageInfo": {
1449
- "message": "window.webkitStorageInfo îś d̂ép̂ŕêćât́êd́. P̂ĺêáŝé ûśê navigator.webkitTemporaryStorage ór̂ navigator.webkitPersistentStorage ín̂śt̂éâd́."
1455
+ "message": "window.webkitStorageInfo îś d̂ép̂ŕêćât́êd́. P̂ĺêáŝé ûśê śt̂án̂d́âŕd̂íẑéd̂ navigator.storage ín̂śt̂éâd́."
1450
1456
  },
1451
1457
  "models/issues_manager/DeprecationIssue.ts | requestedSubresourceWithEmbeddedCredentials": {
1452
1458
  "message": "Ŝúb̂ŕêśôúr̂ćê ŕêq́ûéŝt́ŝ ẃĥóŝé ÛŔL̂ś ĉón̂t́âín̂ ém̂b́êd́d̂éd̂ ćr̂éd̂én̂t́îál̂ś (ê.ǵ. https://user:pass@host/) âŕê b́l̂óĉḱêd́."
@@ -66,6 +66,11 @@ export interface SourceMap {
66
66
  TextUtils.ContentProvider.ContentProvider;
67
67
  embeddedContentByURL(sourceURL: Platform.DevToolsPath.UrlString): string|null;
68
68
  findEntry(lineNumber: number, columnNumber: number): SourceMapEntry|null;
69
+ findEntryRanges(lineNumber: number, columnNumber: number): {
70
+ range: TextUtils.TextRange.TextRange,
71
+ sourceRange: TextUtils.TextRange.TextRange,
72
+ sourceURL: Platform.DevToolsPath.UrlString,
73
+ }|null;
69
74
  findReverseRanges(sourceURL: Platform.DevToolsPath.UrlString, lineNumber: number, columnNumber: number):
70
75
  TextUtils.TextRange.TextRange[];
71
76
  sourceLineMapping(sourceURL: Platform.DevToolsPath.UrlString, lineNumber: number, columnNumber: number):
@@ -233,6 +238,52 @@ export class TextSourceMap implements SourceMap {
233
238
  return index ? mappings[index - 1] : null;
234
239
  }
235
240
 
241
+ findEntryRanges(lineNumber: number, columnNumber: number): {
242
+ range: TextUtils.TextRange.TextRange,
243
+ sourceRange: TextUtils.TextRange.TextRange,
244
+ sourceURL: Platform.DevToolsPath.UrlString,
245
+ }|null {
246
+ const mappings = this.mappings();
247
+ const index = Platform.ArrayUtilities.upperBound(
248
+ mappings, undefined, (unused, entry) => lineNumber - entry.lineNumber || columnNumber - entry.columnNumber);
249
+ if (!index) {
250
+ // If the line and column are preceding all the entries, then there is nothing to map.
251
+ return null;
252
+ }
253
+ const sourceURL = mappings[index].sourceURL;
254
+ if (!sourceURL) {
255
+ return null;
256
+ }
257
+
258
+ // Let us compute the range that contains the source position in the compiled code.
259
+ const endLine = index < mappings.length ? mappings[index].lineNumber : 2 ** 31 - 1;
260
+ const endColumn = index < mappings.length ? mappings[index].columnNumber : 2 ** 31 - 1;
261
+ const range = new TextUtils.TextRange.TextRange(
262
+ mappings[index - 1].lineNumber, mappings[index - 1].columnNumber, endLine, endColumn);
263
+
264
+ // Now try to find the corresponding token in the original code.
265
+ const reverseMappings = this.reversedMappings(sourceURL);
266
+ const startSourceLine = mappings[index - 1].sourceLineNumber;
267
+ const startSourceColumn = mappings[index - 1].sourceColumnNumber;
268
+ const endReverseIndex = Platform.ArrayUtilities.upperBound(
269
+ reverseMappings, undefined,
270
+ (unused, i) =>
271
+ startSourceLine - mappings[i].sourceLineNumber || startSourceColumn - mappings[i].sourceColumnNumber);
272
+ if (!endReverseIndex) {
273
+ return null;
274
+ }
275
+ const endSourceLine = endReverseIndex < reverseMappings.length ?
276
+ mappings[reverseMappings[endReverseIndex]].sourceLineNumber :
277
+ 2 ** 31 - 1;
278
+ const endSourceColumn = endReverseIndex < reverseMappings.length ?
279
+ mappings[reverseMappings[endReverseIndex]].sourceColumnNumber :
280
+ 2 ** 31 - 1;
281
+
282
+ const sourceRange =
283
+ new TextUtils.TextRange.TextRange(startSourceLine, startSourceColumn, endSourceLine, endSourceColumn);
284
+ return {range, sourceRange, sourceURL};
285
+ }
286
+
236
287
  sourceLineMapping(sourceURL: Platform.DevToolsPath.UrlString, lineNumber: number, columnNumber: number):
237
288
  SourceMapEntry|null {
238
289
  const mappings = this.mappings();
@@ -315,42 +366,53 @@ export class TextSourceMap implements SourceMap {
315
366
  }
316
367
 
317
368
  mappings(): SourceMapEntry[] {
369
+ this.#ensureMappingsProcessed();
370
+ return this.#mappingsInternal ?? [];
371
+ }
372
+
373
+ private reversedMappings(sourceURL: Platform.DevToolsPath.UrlString): number[] {
374
+ this.#ensureMappingsProcessed();
375
+ return this.#sourceInfos.get(sourceURL)?.reverseMappings ?? [];
376
+ }
377
+
378
+ #ensureMappingsProcessed(): void {
318
379
  if (this.#mappingsInternal === null) {
319
380
  this.#mappingsInternal = [];
320
381
  this.eachSection(this.parseMap.bind(this));
382
+ this.#computeReverseMappings(this.#mappingsInternal);
321
383
  this.#json = null;
322
384
  }
323
- return this.#mappingsInternal;
324
385
  }
325
386
 
326
- private reversedMappings(sourceURL: Platform.DevToolsPath.UrlString): number[] {
327
- const info = this.#sourceInfos.get(sourceURL);
328
- if (!info) {
329
- return [];
330
- }
331
- const mappings = this.mappings();
332
- if (info.reverseMappings === null) {
333
- const indexes = Array(mappings.length).fill(0).map((_, i) => i);
334
- info.reverseMappings = indexes.filter(i => mappings[i].sourceURL === sourceURL).sort(sourceMappingComparator);
387
+ #computeReverseMappings(mappings: SourceMapEntry[]): void {
388
+ const reverseMappingsPerUrl = new Map<Platform.DevToolsPath.UrlString, number[]>();
389
+ for (let i = 0; i < mappings.length; i++) {
390
+ const entryUrl = mappings[i].sourceURL;
391
+ if (!entryUrl) {
392
+ continue;
393
+ }
394
+ let reverseMap = reverseMappingsPerUrl.get(entryUrl);
395
+ if (!reverseMap) {
396
+ reverseMap = [];
397
+ reverseMappingsPerUrl.set(entryUrl, reverseMap);
398
+ }
399
+ reverseMap.push(i);
335
400
  }
336
401
 
337
- return info.reverseMappings;
402
+ for (const [url, reverseMap] of reverseMappingsPerUrl.entries()) {
403
+ const info = this.#sourceInfos.get(url);
404
+ if (!info) {
405
+ continue;
406
+ }
407
+ reverseMap.sort(sourceMappingComparator);
408
+ info.reverseMappings = reverseMap;
409
+ }
338
410
 
339
411
  function sourceMappingComparator(indexA: number, indexB: number): number {
340
412
  const a = mappings[indexA];
341
413
  const b = mappings[indexB];
342
- if (a.sourceLineNumber !== b.sourceLineNumber) {
343
- return a.sourceLineNumber - b.sourceLineNumber;
344
- }
345
- if (a.sourceColumnNumber !== b.sourceColumnNumber) {
346
- return a.sourceColumnNumber - b.sourceColumnNumber;
347
- }
348
-
349
- if (a.lineNumber !== b.lineNumber) {
350
- return a.lineNumber - b.lineNumber;
351
- }
352
-
353
- return a.columnNumber - b.columnNumber;
414
+ return a.sourceLineNumber - b.sourceLineNumber || a.sourceColumnNumber - b.sourceColumnNumber ||
415
+ a.lineNumber - b.lineNumber || a.columnNumber - b.columnNumber;
354
416
  }
355
417
  }
356
418
 
@@ -392,7 +454,7 @@ export class TextSourceMap implements SourceMap {
392
454
  if (this.#sourceInfos.has(url)) {
393
455
  continue;
394
456
  }
395
- this.#sourceInfos.set(url, new TextSourceMap.SourceInfo(source || null, null));
457
+ this.#sourceInfos.set(url, new TextSourceMap.SourceInfo(source ?? null));
396
458
  sourcesList.push(url);
397
459
  }
398
460
  sourceMapToSourceList.set(sourceMap, sourcesList);
@@ -560,11 +622,10 @@ export namespace TextSourceMap {
560
622
 
561
623
  export class SourceInfo {
562
624
  content: string|null;
563
- reverseMappings: number[]|null;
625
+ reverseMappings: number[]|null = null;
564
626
 
565
- constructor(content: string|null, reverseMappings: number[]|null) {
627
+ constructor(content: string|null) {
566
628
  this.content = content;
567
- this.reverseMappings = reverseMappings;
568
629
  }
569
630
  }
570
631
  }
@@ -77,7 +77,9 @@ const UIStrings = {
77
77
  */
78
78
  crossOriginWindowApi: 'Triggering {PH1} from cross origin iframes has been deprecated and will be removed in the future.',
79
79
  /**
80
- * @description TODO(crbug.com/1320339): Description needed for translation
80
+ * @description Warning displayed to developers when they hide the Cast button
81
+ * on a video element using the deprecated CSS selector instead of using the
82
+ * disableRemotePlayback attribute on the element.
81
83
  */
82
84
  cssSelectorInternalMediaControlsOverlayCastButton:
83
85
  'The `disableRemotePlayback` attribute should be used in order to disable the default Cast integration instead of using `-internal-media-controls-overlay-cast-button` selector.',
@@ -117,6 +119,12 @@ const UIStrings = {
117
119
  */
118
120
  hostCandidateAttributeGetter:
119
121
  '`RTCPeerConnectionIceErrorEvent.hostCandidate` is deprecated. Please use `RTCPeerConnectionIceErrorEvent.address` or `RTCPeerConnectionIceErrorEvent.port` instead.',
122
+ /**
123
+ * @description A deprecation warning shown in the DevTools Issues tab,
124
+ * when a service worker reads one of the fields from an event named
125
+ * "canmakepayment".
126
+ */
127
+ identityInCanMakePaymentEvent: 'The merchant origin and arbitrary data from the `canmakepayment` service worker event are deprecated and will be removed: `topOrigin`, `paymentRequestOrigin`, `methodData`, `modifiers`.',
120
128
  /**
121
129
  * @description TODO(crbug.com/1320343): Description needed for translation
122
130
  */
@@ -164,6 +172,11 @@ const UIStrings = {
164
172
  */
165
173
  obsoleteWebRtcCipherSuite:
166
174
  'Your partner is negotiating an obsolete (D)TLS version. Please check with your partner to have this fixed.',
175
+ /**
176
+ * @description Warning displayed to developers when `window.openDatabase` is used in non-secure contexts to notify that the API is deprecated and will be removed.
177
+ */
178
+ openWebDatabaseInsecureContext:
179
+ 'WebSQL in non-secure contexts is deprecated and will be removed in M107. Please use Web Storage or Indexed Database.',
167
180
  /**
168
181
  * @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.
169
182
  */
@@ -180,7 +193,7 @@ const UIStrings = {
180
193
  * @description Warning displayed to developers when `window.webkitStorageInfo` is used to notify that the API is deprecated.
181
194
  */
182
195
  prefixedStorageInfo:
183
- '`window.webkitStorageInfo` is deprecated. Please use `navigator.webkitTemporaryStorage` or `navigator.webkitPersistentStorage` instead.',
196
+ '`window.webkitStorageInfo` is deprecated. Please use standardized `navigator.storage` instead.',
184
197
  /**
185
198
  * @description Standard message when one web API is deprecated in favor of another. Both
186
199
  * placeholders are always web API functions.
@@ -370,6 +383,10 @@ export class DeprecationIssue extends Issue {
370
383
  case Protocol.Audits.DeprecationIssueType.HostCandidateAttributeGetter:
371
384
  messageFunction = i18nLazyString(UIStrings.hostCandidateAttributeGetter);
372
385
  break;
386
+ case Protocol.Audits.DeprecationIssueType.IdentityInCanMakePaymentEvent:
387
+ messageFunction = i18nLazyString(UIStrings.identityInCanMakePaymentEvent);
388
+ feature = 5190978431352832;
389
+ break;
373
390
  case Protocol.Audits.DeprecationIssueType.InsecurePrivateNetworkSubresourceRequest:
374
391
  messageFunction = i18nLazyString(UIStrings.insecurePrivateNetworkSubresourceRequest);
375
392
  feature = 5436853517811712;
@@ -407,6 +424,11 @@ export class DeprecationIssue extends Issue {
407
424
  messageFunction = i18nLazyString(UIStrings.obsoleteWebRtcCipherSuite);
408
425
  milestone = 81;
409
426
  break;
427
+ case Protocol.Audits.DeprecationIssueType.OpenWebDatabaseInsecureContext:
428
+ messageFunction = i18nLazyString(UIStrings.openWebDatabaseInsecureContext);
429
+ feature = 5175124599767040;
430
+ milestone = 105;
431
+ break;
410
432
  case Protocol.Audits.DeprecationIssueType.PictureSourceSrc:
411
433
  messageFunction = i18nLazyString(UIStrings.pictureSourceSrc);
412
434
  break;