lighthouse 9.5.0-dev.20220812 → 9.5.0-dev.20220815
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/cli/run.js +13 -0
- package/core/lib/cdt/generated/SourceMap.js +113 -27
- package/core/lib/deprecations-strings.js +74 -10
- package/core/lib/network-request.js +1 -0
- package/package.json +5 -5
- package/shared/localization/locales/en-US.json +13 -1
- package/shared/localization/locales/en-XL.json +13 -1
package/cli/run.js
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
/* eslint-disable no-console */
|
|
8
8
|
|
|
9
9
|
import path from 'path';
|
|
10
|
+
import os from 'os';
|
|
10
11
|
|
|
11
12
|
import psList from 'ps-list';
|
|
12
13
|
import * as ChromeLauncher from 'chrome-launcher';
|
|
@@ -70,6 +71,18 @@ function parseChromeFlags(flags = '') {
|
|
|
70
71
|
* @return {Promise<ChromeLauncher.LaunchedChrome>}
|
|
71
72
|
*/
|
|
72
73
|
function getDebuggableChrome(flags) {
|
|
74
|
+
if (process.platform === 'darwin' && process.arch === 'x64') {
|
|
75
|
+
const cpus = os.cpus();
|
|
76
|
+
if (cpus[0].model.includes('Apple')) {
|
|
77
|
+
throw new Error(
|
|
78
|
+
'Launching Chrome on Mac Silicon (arm64) from an x64 Node installation results in ' +
|
|
79
|
+
'Rosetta translating the Chrome binary, even if Chrome is already arm64. This would ' +
|
|
80
|
+
'result in huge performance issues. To resolve this, you must run Lighthouse CLI with ' +
|
|
81
|
+
'a version of Node built for arm64. You should also confirm that your Chrome install ' +
|
|
82
|
+
'says arm64 in chrome://version');
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
73
86
|
return ChromeLauncher.launch({
|
|
74
87
|
port: flags.port,
|
|
75
88
|
ignoreDefaultFlags: flags.chromeIgnoreDefaultFlags,
|
|
@@ -56,6 +56,8 @@ class SourceMapV3 {
|
|
|
56
56
|
sourceRoot;
|
|
57
57
|
names;
|
|
58
58
|
sourcesContent;
|
|
59
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
60
|
+
x_google_ignoreList;
|
|
59
61
|
constructor() {
|
|
60
62
|
}
|
|
61
63
|
}
|
|
@@ -153,6 +155,38 @@ class TextSourceMap {
|
|
|
153
155
|
const index = Platform.ArrayUtilities.upperBound(mappings, undefined, (unused, entry) => lineNumber - entry.lineNumber || columnNumber - entry.columnNumber);
|
|
154
156
|
return index ? mappings[index - 1] : null;
|
|
155
157
|
}
|
|
158
|
+
findEntryRanges(lineNumber, columnNumber) {
|
|
159
|
+
const mappings = this.mappings();
|
|
160
|
+
const index = Platform.ArrayUtilities.upperBound(mappings, undefined, (unused, entry) => lineNumber - entry.lineNumber || columnNumber - entry.columnNumber);
|
|
161
|
+
if (!index) {
|
|
162
|
+
// If the line and column are preceding all the entries, then there is nothing to map.
|
|
163
|
+
return null;
|
|
164
|
+
}
|
|
165
|
+
const sourceURL = mappings[index].sourceURL;
|
|
166
|
+
if (!sourceURL) {
|
|
167
|
+
return null;
|
|
168
|
+
}
|
|
169
|
+
// Let us compute the range that contains the source position in the compiled code.
|
|
170
|
+
const endLine = index < mappings.length ? mappings[index].lineNumber : 2 ** 31 - 1;
|
|
171
|
+
const endColumn = index < mappings.length ? mappings[index].columnNumber : 2 ** 31 - 1;
|
|
172
|
+
const range = new TextUtils.TextRange.TextRange(mappings[index - 1].lineNumber, mappings[index - 1].columnNumber, endLine, endColumn);
|
|
173
|
+
// Now try to find the corresponding token in the original code.
|
|
174
|
+
const reverseMappings = this.reversedMappings(sourceURL);
|
|
175
|
+
const startSourceLine = mappings[index - 1].sourceLineNumber;
|
|
176
|
+
const startSourceColumn = mappings[index - 1].sourceColumnNumber;
|
|
177
|
+
const endReverseIndex = Platform.ArrayUtilities.upperBound(reverseMappings, undefined, (unused, i) => startSourceLine - mappings[i].sourceLineNumber || startSourceColumn - mappings[i].sourceColumnNumber);
|
|
178
|
+
if (!endReverseIndex) {
|
|
179
|
+
return null;
|
|
180
|
+
}
|
|
181
|
+
const endSourceLine = endReverseIndex < reverseMappings.length ?
|
|
182
|
+
mappings[reverseMappings[endReverseIndex]].sourceLineNumber :
|
|
183
|
+
2 ** 31 - 1;
|
|
184
|
+
const endSourceColumn = endReverseIndex < reverseMappings.length ?
|
|
185
|
+
mappings[reverseMappings[endReverseIndex]].sourceColumnNumber :
|
|
186
|
+
2 ** 31 - 1;
|
|
187
|
+
const sourceRange = new TextUtils.TextRange.TextRange(startSourceLine, startSourceColumn, endSourceLine, endSourceColumn);
|
|
188
|
+
return { range, sourceRange, sourceURL };
|
|
189
|
+
}
|
|
156
190
|
sourceLineMapping(sourceURL, lineNumber, columnNumber) {
|
|
157
191
|
const mappings = this.mappings();
|
|
158
192
|
const reverseMappings = this.reversedMappings(sourceURL);
|
|
@@ -219,37 +253,48 @@ class TextSourceMap {
|
|
|
219
253
|
}
|
|
220
254
|
/** @return {Array<{lineNumber: number, columnNumber: number, sourceURL?: string, sourceLineNumber: number, sourceColumnNumber: number, name?: string, lastColumnNumber?: number}>} */
|
|
221
255
|
mappings() {
|
|
256
|
+
this.#ensureMappingsProcessed();
|
|
257
|
+
return this.#mappingsInternal ?? [];
|
|
258
|
+
}
|
|
259
|
+
reversedMappings(sourceURL) {
|
|
260
|
+
this.#ensureMappingsProcessed();
|
|
261
|
+
return this.#sourceInfos.get(sourceURL)?.reverseMappings ?? [];
|
|
262
|
+
}
|
|
263
|
+
#ensureMappingsProcessed() {
|
|
222
264
|
if (this.#mappingsInternal === null) {
|
|
223
265
|
this.#mappingsInternal = [];
|
|
224
266
|
this.eachSection(this.parseMap.bind(this));
|
|
267
|
+
this.#computeReverseMappings(this.#mappingsInternal);
|
|
225
268
|
this.#json = null;
|
|
226
269
|
}
|
|
227
|
-
return this.#mappingsInternal;
|
|
228
270
|
}
|
|
229
|
-
|
|
230
|
-
const
|
|
231
|
-
|
|
232
|
-
|
|
271
|
+
#computeReverseMappings(mappings) {
|
|
272
|
+
const reverseMappingsPerUrl = new Map();
|
|
273
|
+
for (let i = 0; i < mappings.length; i++) {
|
|
274
|
+
const entryUrl = mappings[i].sourceURL;
|
|
275
|
+
if (!entryUrl) {
|
|
276
|
+
continue;
|
|
277
|
+
}
|
|
278
|
+
let reverseMap = reverseMappingsPerUrl.get(entryUrl);
|
|
279
|
+
if (!reverseMap) {
|
|
280
|
+
reverseMap = [];
|
|
281
|
+
reverseMappingsPerUrl.set(entryUrl, reverseMap);
|
|
282
|
+
}
|
|
283
|
+
reverseMap.push(i);
|
|
233
284
|
}
|
|
234
|
-
const
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
285
|
+
for (const [url, reverseMap] of reverseMappingsPerUrl.entries()) {
|
|
286
|
+
const info = this.#sourceInfos.get(url);
|
|
287
|
+
if (!info) {
|
|
288
|
+
continue;
|
|
289
|
+
}
|
|
290
|
+
reverseMap.sort(sourceMappingComparator);
|
|
291
|
+
info.reverseMappings = reverseMap;
|
|
238
292
|
}
|
|
239
|
-
return info.reverseMappings;
|
|
240
293
|
function sourceMappingComparator(indexA, indexB) {
|
|
241
294
|
const a = mappings[indexA];
|
|
242
295
|
const b = mappings[indexB];
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
}
|
|
246
|
-
if (a.sourceColumnNumber !== b.sourceColumnNumber) {
|
|
247
|
-
return a.sourceColumnNumber - b.sourceColumnNumber;
|
|
248
|
-
}
|
|
249
|
-
if (a.lineNumber !== b.lineNumber) {
|
|
250
|
-
return a.lineNumber - b.lineNumber;
|
|
251
|
-
}
|
|
252
|
-
return a.columnNumber - b.columnNumber;
|
|
296
|
+
return a.sourceLineNumber - b.sourceLineNumber || a.sourceColumnNumber - b.sourceColumnNumber ||
|
|
297
|
+
a.lineNumber - b.lineNumber || a.columnNumber - b.columnNumber;
|
|
253
298
|
}
|
|
254
299
|
}
|
|
255
300
|
eachSection(callback) {
|
|
@@ -267,6 +312,7 @@ class TextSourceMap {
|
|
|
267
312
|
parseSources(sourceMap) {
|
|
268
313
|
const sourcesList = [];
|
|
269
314
|
const sourceRoot = sourceMap.sourceRoot || Platform.DevToolsPath.EmptyUrlString;
|
|
315
|
+
const ignoreList = new Set(sourceMap.x_google_ignoreList);
|
|
270
316
|
for (let i = 0; i < sourceMap.sources.length; ++i) {
|
|
271
317
|
let href = sourceMap.sources[i];
|
|
272
318
|
// The source map v3 proposal says to prepend the sourceRoot to the source URL
|
|
@@ -286,11 +332,12 @@ class TextSourceMap {
|
|
|
286
332
|
const source = sourceMap.sourcesContent && sourceMap.sourcesContent[i];
|
|
287
333
|
if (url === this.#compiledURLInternal && source) {
|
|
288
334
|
}
|
|
289
|
-
if (this.#sourceInfos.has(url)) {
|
|
290
|
-
continue;
|
|
291
|
-
}
|
|
292
|
-
this.#sourceInfos.set(url, new TextSourceMap.SourceInfo(source || null, null));
|
|
293
335
|
sourcesList.push(url);
|
|
336
|
+
if (!this.#sourceInfos.has(url)) {
|
|
337
|
+
const content = source ?? null;
|
|
338
|
+
const ignoreListHint = ignoreList.has(i);
|
|
339
|
+
this.#sourceInfos.set(url, new TextSourceMap.SourceInfo(content, ignoreListHint));
|
|
340
|
+
}
|
|
294
341
|
}
|
|
295
342
|
sourceMapToSourceList.set(sourceMap, sourcesList);
|
|
296
343
|
}
|
|
@@ -394,6 +441,44 @@ class TextSourceMap {
|
|
|
394
441
|
}
|
|
395
442
|
return false;
|
|
396
443
|
}
|
|
444
|
+
hasIgnoreListHint(sourceURL) {
|
|
445
|
+
return this.#sourceInfos.get(sourceURL)?.ignoreListHint ?? false;
|
|
446
|
+
}
|
|
447
|
+
/**
|
|
448
|
+
* Returns a list of ranges in the generated script for original sources that
|
|
449
|
+
* match a predicate. Each range is a [begin, end) pair, meaning that code at
|
|
450
|
+
* the beginning location, up to but not including the end location, matches
|
|
451
|
+
* the predicate.
|
|
452
|
+
*/
|
|
453
|
+
findRanges(predicate, options) {
|
|
454
|
+
const mappings = this.mappings();
|
|
455
|
+
const ranges = [];
|
|
456
|
+
if (!mappings.length) {
|
|
457
|
+
return [];
|
|
458
|
+
}
|
|
459
|
+
let current = null;
|
|
460
|
+
// If the first mapping isn't at the beginning of the original source, it's
|
|
461
|
+
// up to the caller to decide if it should be considered matching the
|
|
462
|
+
// predicate or not. By default, it's not.
|
|
463
|
+
if ((mappings[0].lineNumber !== 0 || mappings[0].columnNumber !== 0) && options?.isStartMatching) {
|
|
464
|
+
current = TextUtils.TextRange.TextRange.createUnboundedFromLocation(0, 0);
|
|
465
|
+
ranges.push(current);
|
|
466
|
+
}
|
|
467
|
+
for (const { sourceURL, lineNumber, columnNumber } of mappings) {
|
|
468
|
+
const ignoreListHint = sourceURL && predicate(sourceURL);
|
|
469
|
+
if (!current && ignoreListHint) {
|
|
470
|
+
current = TextUtils.TextRange.TextRange.createUnboundedFromLocation(lineNumber, columnNumber);
|
|
471
|
+
ranges.push(current);
|
|
472
|
+
continue;
|
|
473
|
+
}
|
|
474
|
+
if (current && !ignoreListHint) {
|
|
475
|
+
current.endLine = lineNumber;
|
|
476
|
+
current.endColumn = columnNumber;
|
|
477
|
+
current = null;
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
return ranges;
|
|
481
|
+
}
|
|
397
482
|
}
|
|
398
483
|
exports.TextSourceMap = TextSourceMap;
|
|
399
484
|
(function (TextSourceMap) {
|
|
@@ -426,10 +511,11 @@ exports.TextSourceMap = TextSourceMap;
|
|
|
426
511
|
TextSourceMap.StringCharIterator = StringCharIterator;
|
|
427
512
|
class SourceInfo {
|
|
428
513
|
content;
|
|
429
|
-
|
|
430
|
-
|
|
514
|
+
ignoreListHint;
|
|
515
|
+
reverseMappings = null;
|
|
516
|
+
constructor(content, ignoreListHint) {
|
|
431
517
|
this.content = content;
|
|
432
|
-
this.
|
|
518
|
+
this.ignoreListHint = ignoreListHint;
|
|
433
519
|
}
|
|
434
520
|
}
|
|
435
521
|
TextSourceMap.SourceInfo = SourceInfo;
|
|
@@ -19,9 +19,14 @@ const UIStrings = {
|
|
|
19
19
|
*/
|
|
20
20
|
title: 'Deprecated Feature Used',
|
|
21
21
|
|
|
22
|
-
// Store alphabetized messages per DeprecationIssueType in this block.
|
|
23
22
|
/**
|
|
24
|
-
* @description
|
|
23
|
+
* @description We show this warning when 1) an "authorization" header is
|
|
24
|
+
* attached to the request by scripts, 2) there is no "authorization" in
|
|
25
|
+
* the "access-control-allow-headers" header in the response, and 3) there
|
|
26
|
+
* is a wildcard symbol ("*") in the "access-control-allow-header" header
|
|
27
|
+
* in the response. This is allowed now, but we're planning to reject such
|
|
28
|
+
* responses and require responses to have an "access-control-allow-headers"
|
|
29
|
+
* containing "authorization".
|
|
25
30
|
*/
|
|
26
31
|
authorizationCoveredByWildcard:
|
|
27
32
|
'Authorization will not be covered by the wildcard symbol (*) in CORS `Access-Control-Allow-Headers` handling.',
|
|
@@ -69,7 +74,9 @@ const UIStrings = {
|
|
|
69
74
|
*/
|
|
70
75
|
crossOriginWindowApi: 'Triggering {PH1} from cross origin iframes has been deprecated and will be removed in the future.',
|
|
71
76
|
/**
|
|
72
|
-
* @description
|
|
77
|
+
* @description Warning displayed to developers when they hide the Cast button
|
|
78
|
+
* on a video element using the deprecated CSS selector instead of using the
|
|
79
|
+
* disableRemotePlayback attribute on the element.
|
|
73
80
|
*/
|
|
74
81
|
cssSelectorInternalMediaControlsOverlayCastButton:
|
|
75
82
|
'The `disableRemotePlayback` attribute should be used in order to disable the default Cast integration instead of using `-internal-media-controls-overlay-cast-button` selector.',
|
|
@@ -89,6 +96,10 @@ const UIStrings = {
|
|
|
89
96
|
* @description Warning displayed to developers when the non-standard `Event.path` API is used to notify them that this API is deprecated.
|
|
90
97
|
*/
|
|
91
98
|
eventPath: '`Event.path` is deprecated and will be removed. Please use `Event.composedPath()` instead.',
|
|
99
|
+
/**
|
|
100
|
+
* @description This message is shown when the deprecated Expect-CT header is present.
|
|
101
|
+
*/
|
|
102
|
+
expectCTHeader: 'The `Expect-CT` header is deprecated and will be removed. Chrome requires Certificate Transparency for all publicly trusted certificates issued after April 30, 2018.',
|
|
92
103
|
/**
|
|
93
104
|
* @description Warning displayed to developers when the Geolocation API is used from an insecure origin (one that isn't localhost or doesn't use HTTPS) to notify them that this use is no longer supported.
|
|
94
105
|
*/
|
|
@@ -109,6 +120,12 @@ const UIStrings = {
|
|
|
109
120
|
*/
|
|
110
121
|
hostCandidateAttributeGetter:
|
|
111
122
|
'`RTCPeerConnectionIceErrorEvent.hostCandidate` is deprecated. Please use `RTCPeerConnectionIceErrorEvent.address` or `RTCPeerConnectionIceErrorEvent.port` instead.',
|
|
123
|
+
/**
|
|
124
|
+
* @description A deprecation warning shown in the DevTools Issues tab,
|
|
125
|
+
* when a service worker reads one of the fields from an event named
|
|
126
|
+
* "canmakepayment".
|
|
127
|
+
*/
|
|
128
|
+
identityInCanMakePaymentEvent: 'The merchant origin and arbitrary data from the `canmakepayment` service worker event are deprecated and will be removed: `topOrigin`, `paymentRequestOrigin`, `methodData`, `modifiers`.',
|
|
112
129
|
/**
|
|
113
130
|
* @description TODO(crbug.com/1320343): Description needed for translation
|
|
114
131
|
*/
|
|
@@ -156,6 +173,16 @@ const UIStrings = {
|
|
|
156
173
|
*/
|
|
157
174
|
obsoleteWebRtcCipherSuite:
|
|
158
175
|
'Your partner is negotiating an obsolete (D)TLS version. Please check with your partner to have this fixed.',
|
|
176
|
+
/**
|
|
177
|
+
* @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.
|
|
178
|
+
*/
|
|
179
|
+
openWebDatabaseInsecureContext:
|
|
180
|
+
'WebSQL in non-secure contexts is deprecated and will be removed in M107. Please use Web Storage or Indexed Database.',
|
|
181
|
+
/**
|
|
182
|
+
* @description Warning displayed to developers when persistent storage type is used to notify that storage type is deprecated.
|
|
183
|
+
*/
|
|
184
|
+
persistentQuotaType:
|
|
185
|
+
'`StorageType.persistent` is deprecated. Please use standardized `navigator.storage` instead.',
|
|
159
186
|
/**
|
|
160
187
|
* @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.
|
|
161
188
|
*/
|
|
@@ -172,7 +199,7 @@ const UIStrings = {
|
|
|
172
199
|
* @description Warning displayed to developers when `window.webkitStorageInfo` is used to notify that the API is deprecated.
|
|
173
200
|
*/
|
|
174
201
|
prefixedStorageInfo:
|
|
175
|
-
'`window.webkitStorageInfo` is deprecated. Please use
|
|
202
|
+
'`window.webkitStorageInfo` is deprecated. Please use standardized `navigator.storage` instead.',
|
|
176
203
|
/**
|
|
177
204
|
* @description Standard message when one web API is deprecated in favor of another. Both
|
|
178
205
|
* placeholders are always web API functions.
|
|
@@ -232,7 +259,8 @@ const UIStrings = {
|
|
|
232
259
|
*/
|
|
233
260
|
rtcpMuxPolicyNegotiate: 'The `rtcpMuxPolicy` option is deprecated and will be removed.',
|
|
234
261
|
/**
|
|
235
|
-
* @description
|
|
262
|
+
* @description A deprecation warning shown in the DevTools Issues tab. The placeholder is always the noun
|
|
263
|
+
* "SharedArrayBuffer" which refers to a JavaScript construct.
|
|
236
264
|
*/
|
|
237
265
|
sharedArrayBufferConstructedWithoutIsolation:
|
|
238
266
|
'`SharedArrayBuffer` will require cross-origin isolation. See https://developer.chrome.com/blog/enabling-shared-array-buffer/ for more details.',
|
|
@@ -244,16 +272,24 @@ const UIStrings = {
|
|
|
244
272
|
textToSpeech_DisallowedByAutoplay:
|
|
245
273
|
'`speechSynthesis.speak()` without user activation is deprecated and will be removed.',
|
|
246
274
|
/**
|
|
247
|
-
* @description
|
|
275
|
+
* @description A deprecation warning shown in the DevTools Issues tab. The placeholder is always the noun
|
|
276
|
+
* "SharedArrayBuffer" which refers to a JavaScript construct. "Extensions" refers to Chrome extensions. The warning is shown
|
|
277
|
+
* when Chrome Extensions attempt to use "SharedArrayBuffer"s under insecure circumstances.
|
|
248
278
|
*/
|
|
249
279
|
v8SharedArrayBufferConstructedInExtensionWithoutIsolation:
|
|
250
280
|
'Extensions should opt into cross-origin isolation to continue using `SharedArrayBuffer`. See https://developer.chrome.com/docs/extensions/mv3/cross-origin-isolation/.',
|
|
251
281
|
/**
|
|
252
|
-
* @description
|
|
282
|
+
* @description Warning displayed to developers that they are using
|
|
283
|
+
* `XMLHttpRequest` API in a way that they expect an unsupported character
|
|
284
|
+
* encoding `UTF-16` could be used in the server reply.
|
|
253
285
|
*/
|
|
254
286
|
xhrJSONEncodingDetection: 'UTF-16 is not supported by response json in `XMLHttpRequest`',
|
|
255
287
|
/**
|
|
256
|
-
* @description
|
|
288
|
+
* @description Warning displayed to developers. It is shown when
|
|
289
|
+
* the `XMLHttpRequest` API is used in a way that it slows down the page load
|
|
290
|
+
* of the next page. The `main thread` refers to an operating systems thread
|
|
291
|
+
* used to run most of the processing of HTML documents, so please use a
|
|
292
|
+
* consistent wording.
|
|
257
293
|
*/
|
|
258
294
|
xmlHttpRequestSynchronousInNonWorkerOutsideBeforeUnload:
|
|
259
295
|
'Synchronous `XMLHttpRequest` on the main thread is deprecated because of its detrimental effects to the end user\u2019s experience. For more help, check https://xhr.spec.whatwg.org/.',
|
|
@@ -306,7 +342,7 @@ function getDescription(issueDetails) {
|
|
|
306
342
|
break;
|
|
307
343
|
case 'CrossOriginAccessBasedOnDocumentDomain':
|
|
308
344
|
message = str_(UIStrings.crossOriginAccessBasedOnDocumentDomain);
|
|
309
|
-
milestone =
|
|
345
|
+
milestone = 109;
|
|
310
346
|
break;
|
|
311
347
|
case 'CrossOriginWindowAlert':
|
|
312
348
|
message = str_(UIStrings.crossOriginWindowApi, {PH1: 'window.alert'});
|
|
@@ -325,13 +361,18 @@ function getDescription(issueDetails) {
|
|
|
325
361
|
break;
|
|
326
362
|
case 'DocumentDomainSettingWithoutOriginAgentClusterHeader':
|
|
327
363
|
message = str_(UIStrings.documentDomainSettingWithoutOriginAgentClusterHeader);
|
|
328
|
-
milestone =
|
|
364
|
+
milestone = 109;
|
|
329
365
|
break;
|
|
330
366
|
case 'EventPath':
|
|
331
367
|
message = str_(UIStrings.eventPath);
|
|
332
368
|
feature = 5726124632965120;
|
|
333
369
|
milestone = 109;
|
|
334
370
|
break;
|
|
371
|
+
case 'ExpectCTHeader':
|
|
372
|
+
message = str_(UIStrings.expectCTHeader);
|
|
373
|
+
feature = 6244547273687040;
|
|
374
|
+
milestone = 107;
|
|
375
|
+
break;
|
|
335
376
|
case 'GeolocationInsecureOrigin':
|
|
336
377
|
message = str_(UIStrings.geolocationInsecureOrigin);
|
|
337
378
|
break;
|
|
@@ -344,6 +385,10 @@ function getDescription(issueDetails) {
|
|
|
344
385
|
case 'HostCandidateAttributeGetter':
|
|
345
386
|
message = str_(UIStrings.hostCandidateAttributeGetter);
|
|
346
387
|
break;
|
|
388
|
+
case 'IdentityInCanMakePaymentEvent':
|
|
389
|
+
message = str_(UIStrings.identityInCanMakePaymentEvent);
|
|
390
|
+
feature = 5190978431352832;
|
|
391
|
+
break;
|
|
347
392
|
case 'InsecurePrivateNetworkSubresourceRequest':
|
|
348
393
|
message = str_(UIStrings.insecurePrivateNetworkSubresourceRequest);
|
|
349
394
|
feature = 5436853517811712;
|
|
@@ -365,6 +410,15 @@ function getDescription(issueDetails) {
|
|
|
365
410
|
message = str_(UIStrings.mediaSourceDurationTruncatingBuffered);
|
|
366
411
|
feature = 6107495151960064;
|
|
367
412
|
break;
|
|
413
|
+
case 'NavigateEventRestoreScroll':
|
|
414
|
+
message = str_(
|
|
415
|
+
UIStrings.deprecatedWithReplacement, {PH1: 'navigateEvent.restoreScroll()', PH2: 'navigateEvent.scroll()'});
|
|
416
|
+
break;
|
|
417
|
+
case 'NavigateEventTransitionWhile':
|
|
418
|
+
message = str_(
|
|
419
|
+
UIStrings.deprecatedWithReplacement,
|
|
420
|
+
{PH1: 'navigateEvent.transitionWhile()', PH2: 'navigateEvent.intercept()'});
|
|
421
|
+
break;
|
|
368
422
|
case 'NoSysexWebMIDIWithoutPermission':
|
|
369
423
|
message = str_(UIStrings.noSysexWebMIDIWithoutPermission);
|
|
370
424
|
feature = 5138066234671104;
|
|
@@ -381,6 +435,16 @@ function getDescription(issueDetails) {
|
|
|
381
435
|
message = str_(UIStrings.obsoleteWebRtcCipherSuite);
|
|
382
436
|
milestone = 81;
|
|
383
437
|
break;
|
|
438
|
+
case 'OpenWebDatabaseInsecureContext':
|
|
439
|
+
message = str_(UIStrings.openWebDatabaseInsecureContext);
|
|
440
|
+
feature = 5175124599767040;
|
|
441
|
+
milestone = 105;
|
|
442
|
+
break;
|
|
443
|
+
case 'PersistentQuotaType':
|
|
444
|
+
message = str_(UIStrings.persistentQuotaType);
|
|
445
|
+
feature = 5176235376246784;
|
|
446
|
+
milestone = 106;
|
|
447
|
+
break;
|
|
384
448
|
case 'PictureSourceSrc':
|
|
385
449
|
message = str_(UIStrings.pictureSourceSrc);
|
|
386
450
|
break;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lighthouse",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "9.5.0-dev.
|
|
4
|
+
"version": "9.5.0-dev.20220815",
|
|
5
5
|
"description": "Automated auditing, performance metrics, and best practices for the web.",
|
|
6
6
|
"main": "./core/index.js",
|
|
7
7
|
"bin": {
|
|
@@ -134,13 +134,13 @@
|
|
|
134
134
|
"archiver": "^3.0.0",
|
|
135
135
|
"c8": "^7.11.3",
|
|
136
136
|
"chalk": "^2.4.1",
|
|
137
|
-
"chrome-devtools-frontend": "1.0.
|
|
137
|
+
"chrome-devtools-frontend": "1.0.1034999",
|
|
138
138
|
"concurrently": "^6.4.0",
|
|
139
139
|
"conventional-changelog-cli": "^2.1.1",
|
|
140
140
|
"cpy": "^8.1.2",
|
|
141
141
|
"cross-env": "^7.0.2",
|
|
142
142
|
"csv-validator": "^0.0.3",
|
|
143
|
-
"devtools-protocol": "0.0.
|
|
143
|
+
"devtools-protocol": "0.0.1034970",
|
|
144
144
|
"es-main": "^1.0.2",
|
|
145
145
|
"eslint": "^8.4.1",
|
|
146
146
|
"eslint-config-google": "^0.14.0",
|
|
@@ -214,8 +214,8 @@
|
|
|
214
214
|
"yargs-parser": "^21.0.0"
|
|
215
215
|
},
|
|
216
216
|
"resolutions": {
|
|
217
|
-
"puppeteer/**/devtools-protocol": "0.0.
|
|
218
|
-
"puppeteer-core/**/devtools-protocol": "0.0.
|
|
217
|
+
"puppeteer/**/devtools-protocol": "0.0.1034970",
|
|
218
|
+
"puppeteer-core/**/devtools-protocol": "0.0.1034970",
|
|
219
219
|
"testdouble/**/quibble": "connorjclark/quibble#mod-cache"
|
|
220
220
|
},
|
|
221
221
|
"repository": "GoogleChrome/lighthouse",
|
|
@@ -1796,6 +1796,9 @@
|
|
|
1796
1796
|
"core/lib/deprecations-strings.js | eventPath": {
|
|
1797
1797
|
"message": "`Event.path` is deprecated and will be removed. Please use `Event.composedPath()` instead."
|
|
1798
1798
|
},
|
|
1799
|
+
"core/lib/deprecations-strings.js | expectCTHeader": {
|
|
1800
|
+
"message": "The `Expect-CT` header is deprecated and will be removed. Chrome requires Certificate Transparency for all publicly trusted certificates issued after April 30, 2018."
|
|
1801
|
+
},
|
|
1799
1802
|
"core/lib/deprecations-strings.js | feature": {
|
|
1800
1803
|
"message": "Check the feature status page for more details."
|
|
1801
1804
|
},
|
|
@@ -1811,6 +1814,9 @@
|
|
|
1811
1814
|
"core/lib/deprecations-strings.js | hostCandidateAttributeGetter": {
|
|
1812
1815
|
"message": "`RTCPeerConnectionIceErrorEvent.hostCandidate` is deprecated. Please use `RTCPeerConnectionIceErrorEvent.address` or `RTCPeerConnectionIceErrorEvent.port` instead."
|
|
1813
1816
|
},
|
|
1817
|
+
"core/lib/deprecations-strings.js | identityInCanMakePaymentEvent": {
|
|
1818
|
+
"message": "The merchant origin and arbitrary data from the `canmakepayment` service worker event are deprecated and will be removed: `topOrigin`, `paymentRequestOrigin`, `methodData`, `modifiers`."
|
|
1819
|
+
},
|
|
1814
1820
|
"core/lib/deprecations-strings.js | insecurePrivateNetworkSubresourceRequest": {
|
|
1815
1821
|
"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."
|
|
1816
1822
|
},
|
|
@@ -1841,11 +1847,17 @@
|
|
|
1841
1847
|
"core/lib/deprecations-strings.js | obsoleteWebRtcCipherSuite": {
|
|
1842
1848
|
"message": "Your partner is negotiating an obsolete (D)TLS version. Please check with your partner to have this fixed."
|
|
1843
1849
|
},
|
|
1850
|
+
"core/lib/deprecations-strings.js | openWebDatabaseInsecureContext": {
|
|
1851
|
+
"message": "WebSQL in non-secure contexts is deprecated and will be removed in M107. Please use Web Storage or Indexed Database."
|
|
1852
|
+
},
|
|
1853
|
+
"core/lib/deprecations-strings.js | persistentQuotaType": {
|
|
1854
|
+
"message": "`StorageType.persistent` is deprecated. Please use standardized `navigator.storage` instead."
|
|
1855
|
+
},
|
|
1844
1856
|
"core/lib/deprecations-strings.js | pictureSourceSrc": {
|
|
1845
1857
|
"message": "`<source src>` with a `<picture>` parent is invalid and therefore ignored. Please use `<source srcset>` instead."
|
|
1846
1858
|
},
|
|
1847
1859
|
"core/lib/deprecations-strings.js | prefixedStorageInfo": {
|
|
1848
|
-
"message": "`window.webkitStorageInfo` is deprecated. Please use
|
|
1860
|
+
"message": "`window.webkitStorageInfo` is deprecated. Please use standardized `navigator.storage` instead."
|
|
1849
1861
|
},
|
|
1850
1862
|
"core/lib/deprecations-strings.js | requestedSubresourceWithEmbeddedCredentials": {
|
|
1851
1863
|
"message": "Subresource requests whose URLs contain embedded credentials (e.g. `https://user:pass@host/`) are blocked."
|
|
@@ -1796,6 +1796,9 @@
|
|
|
1796
1796
|
"core/lib/deprecations-strings.js | eventPath": {
|
|
1797
1797
|
"message": "`Event.path` îś d̂ép̂ŕêćât́êd́ âńd̂ ẃîĺl̂ b́ê ŕêḿôv́êd́. P̂ĺêáŝé ûśê `Event.composedPath()` ín̂śt̂éâd́."
|
|
1798
1798
|
},
|
|
1799
|
+
"core/lib/deprecations-strings.js | expectCTHeader": {
|
|
1800
|
+
"message": "T̂h́ê `Expect-CT` h́êád̂ér̂ íŝ d́êṕr̂éĉát̂éd̂ án̂d́ ŵíl̂ĺ b̂é r̂ém̂óv̂éd̂. Ćĥŕôḿê ŕêq́ûír̂éŝ Ćêŕt̂íf̂íĉát̂é T̂ŕâńŝṕâŕêńĉý f̂ór̂ ál̂ĺ p̂úb̂ĺîćl̂ý t̂ŕûśt̂éd̂ ćêŕt̂íf̂íĉát̂éŝ íŝśûéd̂ áf̂t́êŕ Âṕr̂íl̂ 30, 2018."
|
|
1801
|
+
},
|
|
1799
1802
|
"core/lib/deprecations-strings.js | feature": {
|
|
1800
1803
|
"message": "Ĉh́êćk̂ t́ĥé f̂éât́ûŕê śt̂át̂úŝ ṕâǵê f́ôŕ m̂ór̂é d̂ét̂áîĺŝ."
|
|
1801
1804
|
},
|
|
@@ -1811,6 +1814,9 @@
|
|
|
1811
1814
|
"core/lib/deprecations-strings.js | hostCandidateAttributeGetter": {
|
|
1812
1815
|
"message": "`RTCPeerConnectionIceErrorEvent.hostCandidate` îś d̂ép̂ŕêćât́êd́. P̂ĺêáŝé ûśê `RTCPeerConnectionIceErrorEvent.address` ór̂ `RTCPeerConnectionIceErrorEvent.port` ín̂śt̂éâd́."
|
|
1813
1816
|
},
|
|
1817
|
+
"core/lib/deprecations-strings.js | identityInCanMakePaymentEvent": {
|
|
1818
|
+
"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`."
|
|
1819
|
+
},
|
|
1814
1820
|
"core/lib/deprecations-strings.js | insecurePrivateNetworkSubresourceRequest": {
|
|
1815
1821
|
"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̂."
|
|
1816
1822
|
},
|
|
@@ -1841,11 +1847,17 @@
|
|
|
1841
1847
|
"core/lib/deprecations-strings.js | obsoleteWebRtcCipherSuite": {
|
|
1842
1848
|
"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́."
|
|
1843
1849
|
},
|
|
1850
|
+
"core/lib/deprecations-strings.js | openWebDatabaseInsecureContext": {
|
|
1851
|
+
"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̂áŝé."
|
|
1852
|
+
},
|
|
1853
|
+
"core/lib/deprecations-strings.js | persistentQuotaType": {
|
|
1854
|
+
"message": "`StorageType.persistent` îś d̂ép̂ŕêćât́êd́. P̂ĺêáŝé ûśê śt̂án̂d́âŕd̂íẑéd̂ `navigator.storage` ín̂śt̂éâd́."
|
|
1855
|
+
},
|
|
1844
1856
|
"core/lib/deprecations-strings.js | pictureSourceSrc": {
|
|
1845
1857
|
"message": "`<source src>` ŵít̂h́ â `<picture>` ṕâŕêńt̂ íŝ ín̂v́âĺîd́ âńd̂ t́ĥér̂éf̂ór̂é îǵn̂ór̂éd̂. Ṕl̂éâśê úŝé `<source srcset>` îńŝt́êád̂."
|
|
1846
1858
|
},
|
|
1847
1859
|
"core/lib/deprecations-strings.js | prefixedStorageInfo": {
|
|
1848
|
-
"message": "`window.webkitStorageInfo` îś d̂ép̂ŕêćât́êd́. P̂ĺêáŝé ûśê
|
|
1860
|
+
"message": "`window.webkitStorageInfo` îś d̂ép̂ŕêćât́êd́. P̂ĺêáŝé ûśê śt̂án̂d́âŕd̂íẑéd̂ `navigator.storage` ín̂śt̂éâd́."
|
|
1849
1861
|
},
|
|
1850
1862
|
"core/lib/deprecations-strings.js | requestedSubresourceWithEmbeddedCredentials": {
|
|
1851
1863
|
"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́."
|