diff --git a/build/build-cdt-strings.js b/build/build-cdt-strings.js new file mode 100644 index 000000000000..051af63b7e04 --- /dev/null +++ b/build/build-cdt-strings.js @@ -0,0 +1,82 @@ +/** + * @license Copyright 2022 The Lighthouse Authors. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + */ + +import fs from 'fs'; + +import {LH_ROOT} from '../root.js'; + +// eslint-disable-next-line max-len +const inFile = `${LH_ROOT}/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/DeprecationIssue.ts`; +const outFile = `${LH_ROOT}/lighthouse-core/lib/deprecations-strings.js`; + +const code = fs.readFileSync(inFile, 'utf-8'); + +/** + * @param {string} text + * @param {string|RegExp} searchValue + * @param {string} replaceValue + */ +function doReplacement(text, searchValue, replaceValue) { + const newValue = text.replace(searchValue, replaceValue); + if (newValue === text) throw new Error(`could not find: ${searchValue}`); + return newValue; +} + +/** + * @param {string} text + * @param {string} startPattern + * @param {string} endPattern + * @param {[string|RegExp, string][]} replacements + */ +function extract(text, startPattern, endPattern, replacements = []) { + const startIndex = text.indexOf(startPattern); + if (startIndex === -1) throw new Error(`could not find: ${startPattern}`); + const endIndex = text.indexOf(endPattern, startIndex); + if (endIndex === -1) throw new Error(`could not find: ${endPattern}`); + + let subText = text.substring(startIndex, endIndex + endPattern.length); + for (const replacement of replacements) { + subText = doReplacement(subText, replacement[0], replacement[1]); + } + return subText; +} + +const uiStringsDeclare = extract(code, 'const UIStrings', '};', [ + // Some patterns are supported in DevTools UIStrings, but not ours. + [/\\\\/g, ''], + [`\\'plan-b\\'`, 'plan-b'], +]); +const getDescriptionDeclare = + extract(code, 'getDescription(): MarkdownIssueDescription', '});\n }', [ + ['getDescription(): MarkdownIssueDescription', 'function getDescription(issueDetails)'], + ['this.#issueDetails', 'issueDetails'], + [`let messageFunction = (): string => '';`, `let message;`], + [/messageFunction/g, 'message'], + [/i18nLazyString/g, 'str_'], + ['resolveLazyDescription', ''], + ['links,', 'links, message,'], + [/Protocol\.Audits\.DeprecationIssueType\.(\w+)/g, `'$1'`], + ]); + +fs.writeFileSync(outFile, `// auto-generated by build/build-cdt-strings.js +/* eslint-disable */ + +import * as i18n from '../lib/i18n/i18n.js'; + +${uiStringsDeclare} + +const str_ = i18n.createMessageInstanceIdFn(import.meta.url, UIStrings); + +/** + * @param {LH.Crdp.Audits.DeprecationIssueDetails} issueDetails + */ +${getDescriptionDeclare} + +export { + getDescription as getIssueDetailDescription, + UIStrings, +}; +`); diff --git a/docs/releasing.md b/docs/releasing.md index cf722b67daac..fac43402abee 100644 --- a/docs/releasing.md +++ b/docs/releasing.md @@ -47,6 +47,8 @@ In general, Lighthouse should be using the latest version of all of these depend 1. `axe-core` 1. `js-library-detector` 1. `chrome-launcher` +1. `chrome-devtools-frontend` +1. `devtools-protocol` ### On the scheduled release date diff --git a/lighthouse-cli/test/smokehouse/test-definitions/dobetterweb.js b/lighthouse-cli/test/smokehouse/test-definitions/dobetterweb.js index 2295941c1684..a5da83031a62 100644 --- a/lighthouse-cli/test/smokehouse/test-definitions/dobetterweb.js +++ b/lighthouse-cli/test/smokehouse/test-definitions/dobetterweb.js @@ -306,13 +306,12 @@ const expectations = { }, }, 'deprecations': { - _maxChromiumVersion: '103.0.5017.0', // TODO: deprecation strings need to be translated // see https://github.com/GoogleChrome/lighthouse/issues/13895 score: 0, details: { items: [ { - value: /'window.webkitStorageInfo' is deprecated/, + value: /`window.webkitStorageInfo` is deprecated/, source: { type: 'source-location', url: 'http://localhost:10200/dobetterweb/dbw_tester.js', @@ -320,9 +319,10 @@ const expectations = { line: '>0', column: 9, }, + subItems: undefined, }, { - value: /Synchronous XMLHttpRequest on the main thread is deprecated/, + value: /Synchronous `XMLHttpRequest` on the main thread is deprecated/, source: { type: 'source-location', url: 'http://localhost:10200/dobetterweb/dbw_tester.html', @@ -330,6 +330,7 @@ const expectations = { line: '>0', column: 6, }, + subItems: undefined, }, ], }, diff --git a/lighthouse-core/audits/deprecations.js b/lighthouse-core/audits/deprecations.js index 483ac431e293..dc426bc7d45c 100644 --- a/lighthouse-core/audits/deprecations.js +++ b/lighthouse-core/audits/deprecations.js @@ -13,7 +13,9 @@ import {Audit} from './audit.js'; import JsBundles from '../computed/js-bundles.js'; import * as i18n from '../lib/i18n/i18n.js'; +import {getIssueDetailDescription} from '../lib/deprecations-strings.js'; +/* eslint-disable max-len */ const UIStrings = { /** Title of a Lighthouse audit that provides detail on the use of deprecated APIs. This descriptive title is shown to users when the page does not use deprecated APIs. */ title: 'Avoids deprecated APIs', @@ -32,6 +34,7 @@ const UIStrings = { /** Table column header for line of code (eg. 432) that is using a deprecated API. */ columnLine: 'Line', }; +/* eslint-enable max-len */ const str_ = i18n.createMessageInstanceIdFn(import.meta.url, UIStrings); @@ -58,17 +61,35 @@ class Deprecations extends Audit { const bundles = await JsBundles.request(artifacts, context); const deprecations = artifacts.InspectorIssues.deprecationIssue - // TODO: translate these strings. - // see https://github.com/GoogleChrome/lighthouse/issues/13895 - .filter(deprecation => !deprecation.type || deprecation.type === 'Untranslated') .map(deprecation => { const {scriptId, url, lineNumber, columnNumber} = deprecation.sourceCodeLocation; const bundle = bundles.find(bundle => bundle.script.scriptId === scriptId); - return { - value: deprecation.message || '', + const deprecationMeta = getIssueDetailDescription(deprecation); + + /** @type {LH.Audit.Details.TableSubItems=} */ + let subItems = undefined; + if (deprecationMeta.links.length) { + subItems = { + type: 'subitems', + items: deprecationMeta.links.map(link => ({ + type: 'link', + url: link.link, + text: link.linkTitle, + })), + }; + } + + // @ts-expect-error: The english string used to be included on the protocol, but no longer is. + const legacyMessage = deprecation.message; + + /** @type {LH.Audit.Details.TableItem} */ + const item = { + value: deprecationMeta.message || legacyMessage || deprecation.type, // Protocol.Audits.SourceCodeLocation.columnNumber is 1-indexed, but we use 0-indexed. source: Audit.makeSourceLocation(url, lineNumber, columnNumber - 1, bundle), + subItems, }; + return item; }); /** @type {LH.Audit.Details.Table['headings']} */ diff --git a/lighthouse-core/lib/deprecations-strings.js b/lighthouse-core/lib/deprecations-strings.js new file mode 100644 index 000000000000..763d2fc402d2 --- /dev/null +++ b/lighthouse-core/lib/deprecations-strings.js @@ -0,0 +1,509 @@ +// auto-generated by build/build-cdt-strings.js +/* eslint-disable */ + +import * as i18n from '../lib/i18n/i18n.js'; + +const UIStrings = { + // Store strings used across messages in this block. + /** + * @description This links to the chrome feature status page when one exists. + */ + feature: 'Check the feature status page for more details.', + /** + * @description This links to the chromium dash schedule when a milestone is set. + * @example {100} milestone + */ + milestone: 'This change will go into effect with milestone {milestone}.', + /** + * @description Title of issue raised when a deprecated feature is used + */ + title: 'Deprecated Feature Used', + + // Store alphabetized messages per DeprecationIssueType in this block. + /** + * @description TODO(crbug.com/1318846): Description needed for translation + */ + authorizationCoveredByWildcard: + 'Authorization will not be covered by the wildcard symbol (*) in CORS `Access-Control-Allow-Headers` handling.', + /** + * @description This warning occurs when a page attempts to request a resource + * whose URL contained both a newline character (`\n` or `\r`), and a + * less-than character (`<`). These resources are blocked. + */ + canRequestURLHTTPContainingNewline: + '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.', + /** + * @description TODO(crbug.com/1320335): Description needed for translation + */ + chromeLoadTimesConnectionInfo: + '`chrome.loadTimes()` is deprecated, instead use standardized API: Navigation Timing 2.', + /** + * @description TODO(crbug.com/1320336): Description needed for translation + */ + chromeLoadTimesFirstPaintAfterLoadTime: + '`chrome.loadTimes()` is deprecated, instead use standardized API: Paint Timing.', + /** + * @description TODO(crbug.com/1320337): Description needed for translation + */ + chromeLoadTimesWasAlternateProtocolAvailable: + '`chrome.loadTimes()` is deprecated, instead use standardized API: `nextHopProtocol` in Navigation Timing 2.', + /** + * @description TODO(crbug.com/1318847): Description needed for translation + */ + cookieWithTruncatingChar: 'Cookies containing a `(0|r|n)` character will be rejected instead of truncated.', + /** + * @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. + */ + crossOriginAccessBasedOnDocumentDomain: + 'Relaxing the same-origin policy by setting `document.domain` is deprecated, and will be disabled by default. This deprecation warning is for a cross-origin access that was enabled by setting `document.domain`.', + /** + * @description Issue text shown when the web page uses a deprecated web API. The placeholder is + * the deprecated web API function. + * @example {window.alert} PH1 + */ + crossOriginWindowApi: 'Triggering {PH1} from cross origin iframes has been deprecated and will be removed in the future.', + /** + * @description TODO(crbug.com/1320339): Description needed for translation + */ + cssSelectorInternalMediaControlsOverlayCastButton: + 'The `disableRemotePlayback` attribute should be used in order to disable the default Cast integration instead of using `-internal-media-controls-overlay-cast-button` selector.', + /** + * @description This message is shown when the example deprecated feature is used + */ + deprecationExample: 'This is an example of a translated deprecation issue message.', + /** + * @description This warning occurs when a script modifies `document.domain` + * without having set on `Origin-Agent-Cluster` http header. In other + * words, when a script relies on the default behaviour of + * `Origin-Agent-Cluster` when setting document.domain. + */ + documentDomainSettingWithoutOriginAgentClusterHeader: + 'Relaxing the same-origin policy by setting `document.domain` is deprecated, and will be disabled by default. To continue using this feature, please opt-out of origin-keyed agent clusters by sending an `Origin-Agent-Cluster: ?0` header along with the HTTP response for the document and frames. See https://developer.chrome.com/blog/immutable-document-domain/ for more details.', + /** + * @description Warning displayed to developers when the non-standard `Event.path` API is used to notify them that this API is deprecated. + */ + eventPath: '`Event.path` is deprecated and will be removed. Please use `Event.composedPath()` instead.', + /** + * @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. + */ + geolocationInsecureOrigin: + '`getCurrentPosition()` and `watchPosition()` no longer work on insecure origins. To use this feature, you should consider switching your application to a secure origin, such as HTTPS. See https://goo.gle/chrome-insecure-origins for more details.', + /** + * @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 deprecated. + */ + geolocationInsecureOriginDeprecatedNotRemoved: + '`getCurrentPosition()` and `watchPosition()` are deprecated on insecure origins. To use this feature, you should consider switching your application to a secure origin, such as HTTPS. See https://goo.gle/chrome-insecure-origins for more details.', + /** + * @description TODO(crbug.com/1318858): Description needed for translation + */ + getUserMediaInsecureOrigin: + '`getUserMedia()` no longer works on insecure origins. To use this feature, you should consider switching your application to a secure origin, such as HTTPS. See https://goo.gle/chrome-insecure-origins for more details.', + /** + * @description A deprecation warning shown to developers in the DevTools Issues tab when code tries to use the deprecated hostCandidate field, guiding developers to use the the equivalent information in the .address and .port fields instead. + */ + hostCandidateAttributeGetter: + '`RTCPeerConnectionIceErrorEvent.hostCandidate` is deprecated. Please use `RTCPeerConnectionIceErrorEvent.address` or `RTCPeerConnectionIceErrorEvent.port` instead.', + /** + * @description TODO(crbug.com/1320343): Description needed for translation + */ + insecurePrivateNetworkSubresourceRequest: + '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.', + /** + * @description A deprecation warning shown in the DevTools Issues tab. + * It's shown when a video conferencing website attempts to disable + * use of IPv6 addresses with a non-standard API. + */ + legacyConstraintGoogIPv6: + '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.', + /** + * @description TODO(crbug.com/1318865): Description needed for translation + */ + localCSSFileExtensionRejected: + 'CSS cannot be loaded from `file:` URLs unless they end in a `.css` file extension.', + /** + * @description TODO(crbug.com/1320345): Description needed for translation + */ + mediaSourceAbortRemove: + '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.', + /** + * @description TODO(crbug.com/1320346): Description needed for translation + */ + mediaSourceDurationTruncatingBuffered: + '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`.', + /** + * @description TODO(crbug.com/1320347): Description needed for translation + */ + noSysexWebMIDIWithoutPermission: + 'Web MIDI will ask a permission to use even if the sysex is not specified in the `MIDIOptions`.', + /** + * @description Warning displayed to developers when the Notification 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. + */ + notificationInsecureOrigin: + 'The Notification API may no longer be used from insecure origins. You should consider switching your application to a secure origin, such as HTTPS. See https://goo.gle/chrome-insecure-origins for more details.', + /** + * @description Warning displayed to developers when permission to use notifications has been requested by a cross-origin iframe, to notify them that this use is no longer supported. + */ + notificationPermissionRequestedIframe: + 'Permission for the Notification API may no longer be requested from a cross-origin iframe. You should consider requesting permission from a top-level frame or opening a new window instead.', + /** + * @description TODO(crbug.com/1318867): Description needed for translation + */ + obsoleteWebRtcCipherSuite: + 'Your partner is negotiating an obsolete (D)TLS version. Please check with your partner to have this fixed.', + /** + * @description This issue indicates that a `` element with a `` parent was using an `src` attribute, which is not valid and is ignored by the browser. The `srcset` attribute should be used instead. + */ + pictureSourceSrc: + '`` with a `` parent is invalid and therefore ignored. Please use `` instead.', + /** + * @description Warning displayed to developers when the vendor-prefixed method is used rather than the equivalent unprefixed method. + * Both placeholders are Web API functions (single words). + * @example {webkitCancelAnimationFrame} PH1 + * @example {cancelAnimationFrame} PH2 + */ + vendorSpecificApi: '{PH1} is vendor-specific. Please use the standard {PH2} instead.', + /** + * @description Warning displayed to developers when `window.webkitStorageInfo` is used to notify that the API is deprecated. + */ + prefixedStorageInfo: + '`window.webkitStorageInfo` is deprecated. Please use `navigator.webkitTemporaryStorage` or `navigator.webkitPersistentStorage` instead.', + /** + * @description Standard message when one web API is deprecated in favor of another. Both + * placeholders are always web API functions. + * @example {HTMLVideoElement.webkitDisplayingFullscreen} PH1 + * @example {Document.fullscreenElement} PH2 + */ + deprecatedWithReplacement: '{PH1} is deprecated. Please use {PH2} instead.', + /** + * @description TODO(crbug.com/1320357): Description needed for translation + */ + requestedSubresourceWithEmbeddedCredentials: + 'Subresource requests whose URLs contain embedded credentials (e.g. `https://user:pass@host/`) are blocked.', + /** + * @description A deprecation warning shown in the DevTools Issues tab. + * It's shown when a video conferencing website attempts to use a + * non-standard crypto method when performing a handshake to set up a + * connection with another endpoint. + */ + rtcConstraintEnableDtlsSrtpFalse: + 'The constraint `DtlsSrtpKeyAgreement` is removed. You have specified a `false` value for this constraint, which is interpreted as an attempt to use the removed `SDES key negotiation` method. This functionality is removed; use a service that supports `DTLS key negotiation` instead.', + /** + * @description A deprecation warning shown in the DevTools Issues tab. + * It's shown when a video conferencing website uses a non-standard + * API for controlling the crypto method used, but is not having an + * effect because the desired behavior is already enabled-by-default. + */ + rtcConstraintEnableDtlsSrtpTrue: + 'The constraint `DtlsSrtpKeyAgreement` is removed. You have specified a `true` value for this constraint, which had no effect, but you can remove this constraint for tidiness.', + /** + * @description A deprecation warning shown in the DevTools Issues tab. + * The `Session Description Protocol`, or `SDP` for short, is a + * protocol used by video conferencing websites to establish the + * number of audio and/or video streams to send and/or receive. This + * warning is emitted when a web site attempts to use a deprecated + * version of the protocol, called `Plan B`, that is no longer + * supported. The spec compliant version of the protocol is called + * `Unified Plan`. + */ + rtcPeerConnectionComplexPlanBSdpUsingDefaultSdpSemantics: + '`Complex Plan B SDP` detected. This dialect of the `Session Description Protocol` is no longer supported. Please use `Unified Plan SDP` instead.', + /** + * @description A deprecation warning shown in the DevTools Issues tab. + * The `Session Description Protocol`, or `SDP` for short, is a + * protocol used by video conferencing websites to establish the + * number of audio and/or video streams to send and/or receive. This + * warning is emitted when a web site attempts to use a deprecated + * version of the protocol, called `Plan B`, that is no longer + * supported. The spec compliant version of the protocol is called + * `Unified Plan`. + */ + rtcPeerConnectionSdpSemanticsPlanB: + '`Plan B SDP semantics`, which is used when constructing an `RTCPeerConnection` with `{sdpSemantics:plan-b}`, is a legacy non-standard version of the `Session Description Protocol` that has been permanently deleted from the Web Platform. It is still available when building with `IS_FUCHSIA`, but we intend to delete it as soon as possible. Stop depending on it. See https://crbug.com/1302249 for status.', + /** + * @description A deprecation warning shown in the DevTools Issues tab. + * It's shown then a video conferencing website attempts to use the + * `RTCP MUX` policy. + */ + rtcpMuxPolicyNegotiate: 'The `rtcpMuxPolicy` option is deprecated and will be removed.', + /** + * @description TODO(crbug.com/1318878): Description needed for translation + */ + sharedArrayBufferConstructedWithoutIsolation: + '`SharedArrayBuffer` will require cross-origin isolation. See https://developer.chrome.com/blog/enabling-shared-array-buffer/ for more details.', + /** + * @description A deprecation warning shown in the DevTools Issues tab. + * It's shown when the speech synthesis API is called before the page + * receives a user activation. + */ + textToSpeech_DisallowedByAutoplay: + '`speechSynthesis.speak()` without user activation is deprecated and will be removed.', + /** + * @description TODO(crbug.com/1318879): Description needed for translation + */ + v8SharedArrayBufferConstructedInExtensionWithoutIsolation: + 'Extensions should opt into cross-origin isolation to continue using `SharedArrayBuffer`. See https://developer.chrome.com/docs/extensions/mv3/cross-origin-isolation/.', + /** + * @description TODO(crbug.com/1318881): Description needed for translation + */ + xhrJSONEncodingDetection: 'UTF-16 is not supported by response json in `XMLHttpRequest`', + /** + * @description TODO(crbug.com/1318882): Description needed for translation + */ + xmlHttpRequestSynchronousInNonWorkerOutsideBeforeUnload: + '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/.', + /** + * @description Warning displayed to developers that instead of using + * `supportsSession()`, which returns a promise that resolves if + * the XR session can be supported and rejects if not, they should + * use `isSessionSupported()` which will return a promise which + * resolves to a boolean indicating if the XR session can be + * supported or not, but may reject to throw an exception. + */ + xrSupportsSession: + '`supportsSession()` is deprecated. Please use `isSessionSupported()` and check the resolved boolean value instead.', +}; + +const str_ = i18n.createMessageInstanceIdFn(import.meta.url, UIStrings); + +/** + * @param {LH.Crdp.Audits.DeprecationIssueDetails} issueDetails + */ +function getDescription(issueDetails) { + let message; + let feature = 0; + let milestone = 0; + // Keep case statements alphabetized per DeprecationIssueType. + switch (issueDetails.type) { + case 'AuthorizationCoveredByWildcard': + message = str_(UIStrings.authorizationCoveredByWildcard); + milestone = 97; + break; + case 'CanRequestURLHTTPContainingNewline': + message = str_(UIStrings.canRequestURLHTTPContainingNewline); + feature = 5735596811091968; + break; + case 'ChromeLoadTimesConnectionInfo': + message = str_(UIStrings.chromeLoadTimesConnectionInfo); + feature = 5637885046816768; + break; + case 'ChromeLoadTimesFirstPaintAfterLoadTime': + message = str_(UIStrings.chromeLoadTimesFirstPaintAfterLoadTime); + feature = 5637885046816768; + break; + case 'ChromeLoadTimesWasAlternateProtocolAvailable': + message = str_(UIStrings.chromeLoadTimesWasAlternateProtocolAvailable); + feature = 5637885046816768; + break; + case 'CookieWithTruncatingChar': + message = str_(UIStrings.cookieWithTruncatingChar); + milestone = 103; + break; + case 'CrossOriginAccessBasedOnDocumentDomain': + message = str_(UIStrings.crossOriginAccessBasedOnDocumentDomain); + milestone = 106; + break; + case 'CrossOriginWindowAlert': + message = str_(UIStrings.crossOriginWindowApi, {PH1: 'window.alert'}); + break; + case 'CrossOriginWindowConfirm': + message = str_(UIStrings.crossOriginWindowApi, {PH1: 'window.confirm'}); + break; + case 'CSSSelectorInternalMediaControlsOverlayCastButton': + message = str_(UIStrings.cssSelectorInternalMediaControlsOverlayCastButton); + feature = 5714245488476160; + break; + case 'DeprecationExample': + message = str_(UIStrings.deprecationExample); + feature = 5684289032159232; + milestone = 100; + break; + case 'DocumentDomainSettingWithoutOriginAgentClusterHeader': + message = str_(UIStrings.documentDomainSettingWithoutOriginAgentClusterHeader); + milestone = 106; + break; + case 'EventPath': + message = str_(UIStrings.eventPath); + feature = 5726124632965120; + milestone = 109; + break; + case 'GeolocationInsecureOrigin': + message = str_(UIStrings.geolocationInsecureOrigin); + break; + case 'GeolocationInsecureOriginDeprecatedNotRemoved': + message = str_(UIStrings.geolocationInsecureOriginDeprecatedNotRemoved); + break; + case 'GetUserMediaInsecureOrigin': + message = str_(UIStrings.getUserMediaInsecureOrigin); + break; + case 'HostCandidateAttributeGetter': + message = str_(UIStrings.hostCandidateAttributeGetter); + break; + case 'InsecurePrivateNetworkSubresourceRequest': + message = str_(UIStrings.insecurePrivateNetworkSubresourceRequest); + feature = 5436853517811712; + milestone = 92; + break; + case 'LegacyConstraintGoogIPv6': + message = str_(UIStrings.legacyConstraintGoogIPv6); + milestone = 103; + break; + case 'LocalCSSFileExtensionRejected': + message = str_(UIStrings.localCSSFileExtensionRejected); + milestone = 64; + break; + case 'MediaSourceAbortRemove': + message = str_(UIStrings.mediaSourceAbortRemove); + feature = 6107495151960064; + break; + case 'MediaSourceDurationTruncatingBuffered': + message = str_(UIStrings.mediaSourceDurationTruncatingBuffered); + feature = 6107495151960064; + break; + case 'NoSysexWebMIDIWithoutPermission': + message = str_(UIStrings.noSysexWebMIDIWithoutPermission); + feature = 5138066234671104; + milestone = 82; + break; + case 'NotificationInsecureOrigin': + message = str_(UIStrings.notificationInsecureOrigin); + break; + case 'NotificationPermissionRequestedIframe': + message = str_(UIStrings.notificationPermissionRequestedIframe); + feature = 6451284559265792; + break; + case 'ObsoleteWebRtcCipherSuite': + message = str_(UIStrings.obsoleteWebRtcCipherSuite); + milestone = 81; + break; + case 'PictureSourceSrc': + message = str_(UIStrings.pictureSourceSrc); + break; + case 'PrefixedCancelAnimationFrame': + message = str_( + UIStrings.vendorSpecificApi, {PH1: 'webkitCancelAnimationFrame', PH2: 'cancelAnimationFrame'}); + break; + case 'PrefixedRequestAnimationFrame': + message = str_( + UIStrings.vendorSpecificApi, {PH1: 'webkitRequestAnimationFrame', PH2: 'requestAnimationFrame'}); + break; + case 'PrefixedStorageInfo': + message = str_(UIStrings.prefixedStorageInfo); + break; + case 'PrefixedVideoDisplayingFullscreen': + message = str_( + UIStrings.deprecatedWithReplacement, + {PH1: 'HTMLVideoElement.webkitDisplayingFullscreen', PH2: 'Document.fullscreenElement'}); + break; + case 'PrefixedVideoEnterFullScreen': + message = str_( + UIStrings.deprecatedWithReplacement, + {PH1: 'HTMLVideoElement.webkitEnterFullScreen()', PH2: 'Element.requestFullscreen()'}); + break; + case 'PrefixedVideoEnterFullscreen': + message = str_( + UIStrings.deprecatedWithReplacement, + {PH1: 'HTMLVideoElement.webkitEnterFullscreen()', PH2: 'Element.requestFullscreen()'}); + break; + case 'PrefixedVideoExitFullScreen': + message = str_( + UIStrings.deprecatedWithReplacement, + {PH1: 'HTMLVideoElement.webkitExitFullScreen()', PH2: 'Document.exitFullscreen()'}); + break; + case 'PrefixedVideoExitFullscreen': + message = str_( + UIStrings.deprecatedWithReplacement, + {PH1: 'HTMLVideoElement.webkitExitFullscreen()', PH2: 'Document.exitFullscreen()'}); + break; + case 'PrefixedVideoSupportsFullscreen': + message = str_( + UIStrings.deprecatedWithReplacement, + {PH1: 'HTMLVideoElement.webkitSupportsFullscreen', PH2: 'Document.fullscreenEnabled'}); + break; + case 'RangeExpand': + message = + str_(UIStrings.deprecatedWithReplacement, {PH1: 'Range.expand()', PH2: 'Selection.modify()'}); + break; + case 'RequestedSubresourceWithEmbeddedCredentials': + message = str_(UIStrings.requestedSubresourceWithEmbeddedCredentials); + feature = 5669008342777856; + break; + case 'RTCConstraintEnableDtlsSrtpFalse': + message = str_(UIStrings.rtcConstraintEnableDtlsSrtpFalse); + milestone = 97; + break; + case 'RTCConstraintEnableDtlsSrtpTrue': + message = str_(UIStrings.rtcConstraintEnableDtlsSrtpTrue); + milestone = 97; + break; + case 'RTCPeerConnectionComplexPlanBSdpUsingDefaultSdpSemantics': + message = str_(UIStrings.rtcPeerConnectionComplexPlanBSdpUsingDefaultSdpSemantics); + milestone = 72; + break; + case 'RTCPeerConnectionSdpSemanticsPlanB': + message = str_(UIStrings.rtcPeerConnectionSdpSemanticsPlanB); + feature = 5823036655665152; + milestone = 93; + break; + case 'RtcpMuxPolicyNegotiate': + message = str_(UIStrings.rtcpMuxPolicyNegotiate); + feature = 5654810086866944; + milestone = 62; + break; + case 'SharedArrayBufferConstructedWithoutIsolation': + message = str_(UIStrings.sharedArrayBufferConstructedWithoutIsolation); + milestone = 106; + break; + case 'TextToSpeech_DisallowedByAutoplay': + message = str_(UIStrings.textToSpeech_DisallowedByAutoplay); + feature = 5687444770914304; + milestone = 71; + break; + case 'V8SharedArrayBufferConstructedInExtensionWithoutIsolation': + message = str_(UIStrings.v8SharedArrayBufferConstructedInExtensionWithoutIsolation); + milestone = 96; + break; + case 'XHRJSONEncodingDetection': + message = str_(UIStrings.xhrJSONEncodingDetection); + milestone = 93; + break; + case 'XMLHttpRequestSynchronousInNonWorkerOutsideBeforeUnload': + message = str_(UIStrings.xmlHttpRequestSynchronousInNonWorkerOutsideBeforeUnload); + break; + case 'XRSupportsSession': + message = str_(UIStrings.xrSupportsSession); + milestone = 80; + break; + } + const links = []; + if (feature !== 0) { + links.push({ + link: `https://chromestatus.com/feature/${feature}`, + linkTitle: str_(UIStrings.feature), + }); + } + if (milestone !== 0) { + links.push({ + link: 'https://chromiumdash.appspot.com/schedule', + linkTitle: str_(UIStrings.milestone, {milestone}), + }); + } + return ({ + file: 'deprecation.md', + substitutions: new Map([ + ['PLACEHOLDER_title', str_(UIStrings.title)], + ['PLACEHOLDER_message', message], + ]), + links, message, + }); + } + +export { + getDescription as getIssueDetailDescription, + UIStrings, +}; diff --git a/lighthouse-core/scripts/i18n/collect-strings.js b/lighthouse-core/scripts/i18n/collect-strings.js index df800cfdc9b2..1ac0c6f2c15f 100644 --- a/lighthouse-core/scripts/i18n/collect-strings.js +++ b/lighthouse-core/scripts/i18n/collect-strings.js @@ -653,6 +653,8 @@ function resolveMessageCollisions(strings) { try { expect(collidingMessages).toEqual([ + '$MARKDOWN_SNIPPET_0$ is deprecated. Please use $MARKDOWN_SNIPPET_1$ or $MARKDOWN_SNIPPET_2$ instead.', + '$MARKDOWN_SNIPPET_0$ is deprecated. Please use $MARKDOWN_SNIPPET_1$ or $MARKDOWN_SNIPPET_2$ instead.', 'ARIA $MARKDOWN_SNIPPET_0$ elements do not have accessible names.', 'ARIA $MARKDOWN_SNIPPET_0$ elements do not have accessible names.', 'ARIA $MARKDOWN_SNIPPET_0$ elements do not have accessible names.', diff --git a/lighthouse-core/test/audits/deprecations-test.js b/lighthouse-core/test/audits/deprecations-test.js index bf013d5f9814..b2e5b57db42a 100644 --- a/lighthouse-core/test/audits/deprecations-test.js +++ b/lighthouse-core/test/audits/deprecations-test.js @@ -43,6 +43,22 @@ describe('Deprecations audit', () => { columnNumber: 100, }, }, + { + type: 'EventPath', + sourceCodeLocation: { + url: URL, + lineNumber: 100, + columnNumber: 100, + }, + }, + { + type: 'PrefixedVideoDisplayingFullscreen', + sourceCodeLocation: { + url: URL, + lineNumber: 101, + columnNumber: 100, + }, + }, ], }, SourceMaps: [], @@ -50,11 +66,25 @@ describe('Deprecations audit', () => { }, context); assert.equal(auditResult.score, 0); - expect(auditResult.displayValue).toBeDisplayString('2 warnings found'); - assert.equal(auditResult.details.items.length, 2); + expect(auditResult.displayValue).toBeDisplayString('4 warnings found'); + assert.equal(auditResult.details.items.length, 4); assert.equal(auditResult.details.items[0].value, 'Deprecation message 123'); assert.equal(auditResult.details.items[0].source.url, URL); assert.equal(auditResult.details.items[0].source.line, 123); assert.equal(auditResult.details.items[0].source.column, 99); + assert.equal(auditResult.details.items[1].value, 'Deprecation message 456'); + expect(auditResult.details.items[2].value).toBeDisplayString( + '`Event.path` is deprecated and will be removed. Please use `Event.composedPath()` instead.'); + expect(auditResult.details.items[2].subItems.items[0]).toMatchObject({ + text: expect.toBeDisplayString('Check the feature status page for more details.'), + url: 'https://chromestatus.com/feature/5726124632965120', + }); + expect(auditResult.details.items[2].subItems.items[1]).toMatchObject({ + text: expect.toBeDisplayString('This change will go into effect with milestone 109.'), + url: 'https://chromiumdash.appspot.com/schedule', + }); + expect(auditResult.details.items[3].value).toBeDisplayString( + // eslint-disable-next-line max-len + 'HTMLVideoElement.webkitDisplayingFullscreen is deprecated. Please use Document.fullscreenElement instead.'); }); }); diff --git a/lighthouse-core/test/gather/gatherers/inspector-issues-test.js b/lighthouse-core/test/gather/gatherers/inspector-issues-test.js index 3436008738af..c48216090d49 100644 --- a/lighthouse-core/test/gather/gatherers/inspector-issues-test.js +++ b/lighthouse-core/test/gather/gatherers/inspector-issues-test.js @@ -129,17 +129,15 @@ function mockCSP(details) { } /** - * @param {string} text + * @param {LH.Crdp.Audits.DeprecationIssueType} type * @return {LH.Crdp.Audits.InspectorIssue} */ -function mockDeprecation(text) { +function mockDeprecation(type) { return { code: 'DeprecationIssue', details: { deprecationIssueDetails: { - message: text, - deprecationType: 'test', - type: 'Untranslated', + type, sourceCodeLocation: { url: 'https://www.example.com', lineNumber: 10, @@ -184,7 +182,7 @@ describe('_getArtifact', () => { mockBlockedByResponse({request: {requestId: '3'}}), mockHeavyAd(), mockCSP(), - mockDeprecation('some warning'), + mockDeprecation('AuthorizationCoveredByWildcard'), ]; const networkRecords = [ mockRequest({requestId: '1'}), @@ -229,14 +227,12 @@ describe('_getArtifact', () => { contentSecurityPolicyViolationType: 'kInlineViolation', }], deprecationIssue: [{ - message: 'some warning', - deprecationType: 'test', + type: 'AuthorizationCoveredByWildcard', sourceCodeLocation: { url: 'https://www.example.com', columnNumber: 10, lineNumber: 10, }, - type: 'Untranslated', }], attributionReportingIssue: [], clientHintIssue: [], diff --git a/package.json b/package.json index 9fec187e0a5e..a1bc438c0c11 100644 --- a/package.json +++ b/package.json @@ -140,7 +140,7 @@ "cpy": "^8.1.2", "cross-env": "^7.0.2", "csv-validator": "^0.0.3", - "devtools-protocol": "0.0.995287", + "devtools-protocol": "0.0.999451", "es-main": "^1.0.2", "eslint": "^8.4.1", "eslint-config-google": "^0.14.0", @@ -214,8 +214,8 @@ "yargs-parser": "^21.0.0" }, "resolutions": { - "puppeteer/**/devtools-protocol": "0.0.995287", - "puppeteer-core/**/devtools-protocol": "0.0.995287", + "puppeteer/**/devtools-protocol": "0.0.999451", + "puppeteer-core/**/devtools-protocol": "0.0.999451", "testdouble/**/quibble": "connorjclark/quibble#mod-cache" }, "repository": "GoogleChrome/lighthouse", diff --git a/shared/localization/locales/en-US.json b/shared/localization/locales/en-US.json index fa50a0360172..4da06460fe2a 100644 --- a/shared/localization/locales/en-US.json +++ b/shared/localization/locales/en-US.json @@ -1901,6 +1901,138 @@ "lighthouse-core/lib/csp-evaluator.js | unsafeInlineFallback": { "message": "Consider adding 'unsafe-inline' (ignored by browsers supporting nonces/hashes) to be backward compatible with older browsers." }, + "lighthouse-core/lib/deprecations-strings.js | authorizationCoveredByWildcard": { + "message": "Authorization will not be covered by the wildcard symbol (*) in CORS `Access-Control-Allow-Headers` handling." + }, + "lighthouse-core/lib/deprecations-strings.js | canRequestURLHTTPContainingNewline": { + "message": "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." + }, + "lighthouse-core/lib/deprecations-strings.js | chromeLoadTimesConnectionInfo": { + "message": "`chrome.loadTimes()` is deprecated, instead use standardized API: Navigation Timing 2." + }, + "lighthouse-core/lib/deprecations-strings.js | chromeLoadTimesFirstPaintAfterLoadTime": { + "message": "`chrome.loadTimes()` is deprecated, instead use standardized API: Paint Timing." + }, + "lighthouse-core/lib/deprecations-strings.js | chromeLoadTimesWasAlternateProtocolAvailable": { + "message": "`chrome.loadTimes()` is deprecated, instead use standardized API: `nextHopProtocol` in Navigation Timing 2." + }, + "lighthouse-core/lib/deprecations-strings.js | cookieWithTruncatingChar": { + "message": "Cookies containing a `(0|r|n)` character will be rejected instead of truncated." + }, + "lighthouse-core/lib/deprecations-strings.js | crossOriginAccessBasedOnDocumentDomain": { + "message": "Relaxing the same-origin policy by setting `document.domain` is deprecated, and will be disabled by default. This deprecation warning is for a cross-origin access that was enabled by setting `document.domain`." + }, + "lighthouse-core/lib/deprecations-strings.js | crossOriginWindowApi": { + "message": "Triggering {PH1} from cross origin iframes has been deprecated and will be removed in the future." + }, + "lighthouse-core/lib/deprecations-strings.js | cssSelectorInternalMediaControlsOverlayCastButton": { + "message": "The `disableRemotePlayback` attribute should be used in order to disable the default Cast integration instead of using `-internal-media-controls-overlay-cast-button` selector." + }, + "lighthouse-core/lib/deprecations-strings.js | deprecatedWithReplacement": { + "message": "{PH1} is deprecated. Please use {PH2} instead." + }, + "lighthouse-core/lib/deprecations-strings.js | deprecationExample": { + "message": "This is an example of a translated deprecation issue message." + }, + "lighthouse-core/lib/deprecations-strings.js | documentDomainSettingWithoutOriginAgentClusterHeader": { + "message": "Relaxing the same-origin policy by setting `document.domain` is deprecated, and will be disabled by default. To continue using this feature, please opt-out of origin-keyed agent clusters by sending an `Origin-Agent-Cluster: ?0` header along with the HTTP response for the document and frames. See https://developer.chrome.com/blog/immutable-document-domain/ for more details." + }, + "lighthouse-core/lib/deprecations-strings.js | eventPath": { + "message": "`Event.path` is deprecated and will be removed. Please use `Event.composedPath()` instead." + }, + "lighthouse-core/lib/deprecations-strings.js | feature": { + "message": "Check the feature status page for more details." + }, + "lighthouse-core/lib/deprecations-strings.js | geolocationInsecureOrigin": { + "message": "`getCurrentPosition()` and `watchPosition()` no longer work on insecure origins. To use this feature, you should consider switching your application to a secure origin, such as HTTPS. See https://goo.gle/chrome-insecure-origins for more details." + }, + "lighthouse-core/lib/deprecations-strings.js | geolocationInsecureOriginDeprecatedNotRemoved": { + "message": "`getCurrentPosition()` and `watchPosition()` are deprecated on insecure origins. To use this feature, you should consider switching your application to a secure origin, such as HTTPS. See https://goo.gle/chrome-insecure-origins for more details." + }, + "lighthouse-core/lib/deprecations-strings.js | getUserMediaInsecureOrigin": { + "message": "`getUserMedia()` no longer works on insecure origins. To use this feature, you should consider switching your application to a secure origin, such as HTTPS. See https://goo.gle/chrome-insecure-origins for more details." + }, + "lighthouse-core/lib/deprecations-strings.js | hostCandidateAttributeGetter": { + "message": "`RTCPeerConnectionIceErrorEvent.hostCandidate` is deprecated. Please use `RTCPeerConnectionIceErrorEvent.address` or `RTCPeerConnectionIceErrorEvent.port` instead." + }, + "lighthouse-core/lib/deprecations-strings.js | insecurePrivateNetworkSubresourceRequest": { + "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." + }, + "lighthouse-core/lib/deprecations-strings.js | legacyConstraintGoogIPv6": { + "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." + }, + "lighthouse-core/lib/deprecations-strings.js | localCSSFileExtensionRejected": { + "message": "CSS cannot be loaded from `file:` URLs unless they end in a `.css` file extension." + }, + "lighthouse-core/lib/deprecations-strings.js | mediaSourceAbortRemove": { + "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." + }, + "lighthouse-core/lib/deprecations-strings.js | mediaSourceDurationTruncatingBuffered": { + "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`." + }, + "lighthouse-core/lib/deprecations-strings.js | milestone": { + "message": "This change will go into effect with milestone {milestone}." + }, + "lighthouse-core/lib/deprecations-strings.js | noSysexWebMIDIWithoutPermission": { + "message": "Web MIDI will ask a permission to use even if the sysex is not specified in the `MIDIOptions`." + }, + "lighthouse-core/lib/deprecations-strings.js | notificationInsecureOrigin": { + "message": "The Notification API may no longer be used from insecure origins. You should consider switching your application to a secure origin, such as HTTPS. See https://goo.gle/chrome-insecure-origins for more details." + }, + "lighthouse-core/lib/deprecations-strings.js | notificationPermissionRequestedIframe": { + "message": "Permission for the Notification API may no longer be requested from a cross-origin iframe. You should consider requesting permission from a top-level frame or opening a new window instead." + }, + "lighthouse-core/lib/deprecations-strings.js | obsoleteWebRtcCipherSuite": { + "message": "Your partner is negotiating an obsolete (D)TLS version. Please check with your partner to have this fixed." + }, + "lighthouse-core/lib/deprecations-strings.js | pictureSourceSrc": { + "message": "`` with a `` parent is invalid and therefore ignored. Please use `` instead." + }, + "lighthouse-core/lib/deprecations-strings.js | prefixedStorageInfo": { + "message": "`window.webkitStorageInfo` is deprecated. Please use `navigator.webkitTemporaryStorage` or `navigator.webkitPersistentStorage` instead." + }, + "lighthouse-core/lib/deprecations-strings.js | requestedSubresourceWithEmbeddedCredentials": { + "message": "Subresource requests whose URLs contain embedded credentials (e.g. `https://user:pass@host/`) are blocked." + }, + "lighthouse-core/lib/deprecations-strings.js | rtcConstraintEnableDtlsSrtpFalse": { + "message": "The constraint `DtlsSrtpKeyAgreement` is removed. You have specified a `false` value for this constraint, which is interpreted as an attempt to use the removed `SDES key negotiation` method. This functionality is removed; use a service that supports `DTLS key negotiation` instead." + }, + "lighthouse-core/lib/deprecations-strings.js | rtcConstraintEnableDtlsSrtpTrue": { + "message": "The constraint `DtlsSrtpKeyAgreement` is removed. You have specified a `true` value for this constraint, which had no effect, but you can remove this constraint for tidiness." + }, + "lighthouse-core/lib/deprecations-strings.js | rtcPeerConnectionComplexPlanBSdpUsingDefaultSdpSemantics": { + "message": "`Complex Plan B SDP` detected. This dialect of the `Session Description Protocol` is no longer supported. Please use `Unified Plan SDP` instead." + }, + "lighthouse-core/lib/deprecations-strings.js | rtcPeerConnectionSdpSemanticsPlanB": { + "message": "`Plan B SDP semantics`, which is used when constructing an `RTCPeerConnection` with `{sdpSemantics:plan-b}`, is a legacy non-standard version of the `Session Description Protocol` that has been permanently deleted from the Web Platform. It is still available when building with `IS_FUCHSIA`, but we intend to delete it as soon as possible. Stop depending on it. See https://crbug.com/1302249 for status." + }, + "lighthouse-core/lib/deprecations-strings.js | rtcpMuxPolicyNegotiate": { + "message": "The `rtcpMuxPolicy` option is deprecated and will be removed." + }, + "lighthouse-core/lib/deprecations-strings.js | sharedArrayBufferConstructedWithoutIsolation": { + "message": "`SharedArrayBuffer` will require cross-origin isolation. See https://developer.chrome.com/blog/enabling-shared-array-buffer/ for more details." + }, + "lighthouse-core/lib/deprecations-strings.js | textToSpeech_DisallowedByAutoplay": { + "message": "`speechSynthesis.speak()` without user activation is deprecated and will be removed." + }, + "lighthouse-core/lib/deprecations-strings.js | title": { + "message": "Deprecated Feature Used" + }, + "lighthouse-core/lib/deprecations-strings.js | v8SharedArrayBufferConstructedInExtensionWithoutIsolation": { + "message": "Extensions should opt into cross-origin isolation to continue using `SharedArrayBuffer`. See https://developer.chrome.com/docs/extensions/mv3/cross-origin-isolation/." + }, + "lighthouse-core/lib/deprecations-strings.js | vendorSpecificApi": { + "message": "{PH1} is vendor-specific. Please use the standard {PH2} instead." + }, + "lighthouse-core/lib/deprecations-strings.js | xhrJSONEncodingDetection": { + "message": "UTF-16 is not supported by response json in `XMLHttpRequest`" + }, + "lighthouse-core/lib/deprecations-strings.js | xmlHttpRequestSynchronousInNonWorkerOutsideBeforeUnload": { + "message": "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/." + }, + "lighthouse-core/lib/deprecations-strings.js | xrSupportsSession": { + "message": "`supportsSession()` is deprecated. Please use `isSessionSupported()` and check the resolved boolean value instead." + }, "lighthouse-core/lib/i18n/i18n.js | columnBlockingTime": { "message": "Main-Thread Blocking Time" }, diff --git a/shared/localization/locales/en-XL.json b/shared/localization/locales/en-XL.json index 9606f48f9913..7d21a047fe3e 100644 --- a/shared/localization/locales/en-XL.json +++ b/shared/localization/locales/en-XL.json @@ -1901,6 +1901,138 @@ "lighthouse-core/lib/csp-evaluator.js | unsafeInlineFallback": { "message": "Ĉón̂śîd́êŕ âd́d̂ín̂ǵ 'ûńŝáf̂é-îńl̂ín̂é' (îǵn̂ór̂éd̂ b́ŷ b́r̂óŵśêŕŝ śûṕp̂ór̂t́îńĝ ńôńĉéŝ/h́âśĥéŝ) t́ô b́ê b́âćk̂ẃâŕd̂ ćôḿp̂át̂íb̂ĺê ẃît́ĥ ól̂d́êŕ b̂ŕôẃŝér̂ś." }, + "lighthouse-core/lib/deprecations-strings.js | authorizationCoveredByWildcard": { + "message": "Âút̂h́ôŕîźât́îón̂ ẃîĺl̂ ńôt́ b̂é ĉóv̂ér̂éd̂ b́ŷ t́ĥé ŵíl̂d́ĉár̂d́ ŝým̂b́ôĺ (*) îń ĈÓR̂Ś `Access-Control-Allow-Headers` ĥán̂d́l̂ín̂ǵ." + }, + "lighthouse-core/lib/deprecations-strings.js | canRequestURLHTTPContainingNewline": { + "message": "R̂éŝóûŕĉé r̂éq̂úêśt̂ś ŵh́ôśê ÚR̂Ĺŝ ćôńt̂áîńêd́ b̂ót̂h́ r̂ém̂óv̂éd̂ ẃĥít̂éŝṕâćê `(n|r|t)` ćĥár̂áĉt́êŕŝ án̂d́ l̂éŝś-t̂h́âń ĉh́âŕâćt̂ér̂ś (`<`) âŕê b́l̂óĉḱêd́. P̂ĺêáŝé r̂ém̂óv̂é n̂éŵĺîńêś âńd̂ én̂ćôd́ê ĺêśŝ-t́ĥán̂ ćĥár̂áĉt́êŕŝ f́r̂óm̂ ṕl̂áĉéŝ ĺîḱê él̂ém̂én̂t́ ât́t̂ŕîb́ût́ê v́âĺûéŝ ín̂ ór̂d́êŕ t̂ó l̂óâd́ t̂h́êśê ŕêśôúr̂ćêś." + }, + "lighthouse-core/lib/deprecations-strings.js | chromeLoadTimesConnectionInfo": { + "message": "`chrome.loadTimes()` îś d̂ép̂ŕêćât́êd́, îńŝt́êád̂ úŝé ŝt́âńd̂ár̂d́îźêd́ ÂṔÎ: Ńâv́îǵât́îón̂ T́îḿîńĝ 2." + }, + "lighthouse-core/lib/deprecations-strings.js | chromeLoadTimesFirstPaintAfterLoadTime": { + "message": "`chrome.loadTimes()` îś d̂ép̂ŕêćât́êd́, îńŝt́êád̂ úŝé ŝt́âńd̂ár̂d́îźêd́ ÂṔÎ: Ṕâín̂t́ T̂ím̂ín̂ǵ." + }, + "lighthouse-core/lib/deprecations-strings.js | chromeLoadTimesWasAlternateProtocolAvailable": { + "message": "`chrome.loadTimes()` îś d̂ép̂ŕêćât́êd́, îńŝt́êád̂ úŝé ŝt́âńd̂ár̂d́îźêd́ ÂṔÎ: `nextHopProtocol` ín̂ Ńâv́îǵât́îón̂ T́îḿîńĝ 2." + }, + "lighthouse-core/lib/deprecations-strings.js | cookieWithTruncatingChar": { + "message": "Ĉóôḱîéŝ ćôńt̂áîńîńĝ á `(0|r|n)` ĉh́âŕâćt̂ér̂ ẃîĺl̂ b́ê ŕêj́êćt̂éd̂ ín̂śt̂éâd́ ôf́ t̂ŕûńĉát̂éd̂." + }, + "lighthouse-core/lib/deprecations-strings.js | crossOriginAccessBasedOnDocumentDomain": { + "message": "R̂él̂áx̂ín̂ǵ t̂h́ê śâḿê-ór̂íĝín̂ ṕôĺîćŷ b́ŷ śêt́t̂ín̂ǵ `document.domain` îś d̂ép̂ŕêćât́êd́, âńd̂ ẃîĺl̂ b́ê d́îśâb́l̂éd̂ b́ŷ d́êf́âúl̂t́. T̂h́îś d̂ép̂ŕêćât́îón̂ ẃâŕn̂ín̂ǵ îś f̂ór̂ á ĉŕôśŝ-ór̂íĝín̂ áĉćêśŝ t́ĥát̂ ẃâś êńâb́l̂éd̂ b́ŷ śêt́t̂ín̂ǵ `document.domain`." + }, + "lighthouse-core/lib/deprecations-strings.js | crossOriginWindowApi": { + "message": "T̂ŕîǵĝér̂ín̂ǵ {PH1} f̂ŕôḿ ĉŕôśŝ ór̂íĝín̂ íf̂ŕâḿêś ĥáŝ b́êén̂ d́êṕr̂éĉát̂éd̂ án̂d́ ŵíl̂ĺ b̂é r̂ém̂óv̂éd̂ ín̂ t́ĥé f̂út̂úr̂é." + }, + "lighthouse-core/lib/deprecations-strings.js | cssSelectorInternalMediaControlsOverlayCastButton": { + "message": "T̂h́ê `disableRemotePlayback` át̂t́r̂íb̂út̂é ŝh́ôúl̂d́ b̂é ûśêd́ îń ôŕd̂ér̂ t́ô d́îśâb́l̂é t̂h́ê d́êf́âúl̂t́ Ĉáŝt́ îńt̂éĝŕât́îón̂ ín̂śt̂éâd́ ôf́ ûśîńĝ `-internal-media-controls-overlay-cast-button` śêĺêćt̂ór̂." + }, + "lighthouse-core/lib/deprecations-strings.js | deprecatedWithReplacement": { + "message": "{PH1} îś d̂ép̂ŕêćât́êd́. P̂ĺêáŝé ûśê {PH2} ín̂śt̂éâd́." + }, + "lighthouse-core/lib/deprecations-strings.js | deprecationExample": { + "message": "T̂h́îś îś âń êx́âḿp̂ĺê óf̂ á t̂ŕâńŝĺât́êd́ d̂ép̂ŕêćât́îón̂ íŝśûé m̂éŝśâǵê." + }, + "lighthouse-core/lib/deprecations-strings.js | documentDomainSettingWithoutOriginAgentClusterHeader": { + "message": "R̂él̂áx̂ín̂ǵ t̂h́ê śâḿê-ór̂íĝín̂ ṕôĺîćŷ b́ŷ śêt́t̂ín̂ǵ `document.domain` îś d̂ép̂ŕêćât́êd́, âńd̂ ẃîĺl̂ b́ê d́îśâb́l̂éd̂ b́ŷ d́êf́âúl̂t́. T̂ó ĉón̂t́îńûé ûśîńĝ t́ĥíŝ f́êát̂úr̂é, p̂ĺêáŝé ôṕt̂-óût́ ôf́ ôŕîǵîń-k̂éŷéd̂ áĝén̂t́ ĉĺûśt̂ér̂ś b̂ý ŝén̂d́îńĝ án̂ `Origin-Agent-Cluster: ?0` h́êád̂ér̂ ál̂ón̂ǵ ŵít̂h́ t̂h́ê H́T̂T́P̂ ŕêśp̂ón̂śê f́ôŕ t̂h́ê d́ôćûḿêńt̂ án̂d́ f̂ŕâḿêś. Ŝéê h́t̂t́p̂ś://d̂év̂él̂óp̂ér̂.ćĥŕôḿê.ćôḿ/b̂ĺôǵ/îḿm̂út̂áb̂ĺê-d́ôćûḿêńt̂-d́ôḿâín̂/ f́ôŕ m̂ór̂é d̂ét̂áîĺŝ." + }, + "lighthouse-core/lib/deprecations-strings.js | eventPath": { + "message": "`Event.path` îś d̂ép̂ŕêćât́êd́ âńd̂ ẃîĺl̂ b́ê ŕêḿôv́êd́. P̂ĺêáŝé ûśê `Event.composedPath()` ín̂śt̂éâd́." + }, + "lighthouse-core/lib/deprecations-strings.js | feature": { + "message": "Ĉh́êćk̂ t́ĥé f̂éât́ûŕê śt̂át̂úŝ ṕâǵê f́ôŕ m̂ór̂é d̂ét̂áîĺŝ." + }, + "lighthouse-core/lib/deprecations-strings.js | geolocationInsecureOrigin": { + "message": "`getCurrentPosition()` âńd̂ `watchPosition()` ńô ĺôńĝér̂ ẃôŕk̂ ón̂ ín̂śêćûŕê ór̂íĝín̂ś. T̂ó ûśê t́ĥíŝ f́êát̂úr̂é, ŷóû śĥóûĺd̂ ćôńŝíd̂ér̂ śŵít̂ćĥín̂ǵ ŷóûŕ âṕp̂ĺîćât́îón̂ t́ô á ŝéĉúr̂é ôŕîǵîń, ŝúĉh́ âś ĤT́T̂ṔŜ. Śêé ĥt́t̂ṕŝ://ǵôó.ĝĺê/ćĥŕôḿê-ín̂śêćûŕê-ór̂íĝín̂ś f̂ór̂ ḿôŕê d́êt́âíl̂ś." + }, + "lighthouse-core/lib/deprecations-strings.js | geolocationInsecureOriginDeprecatedNotRemoved": { + "message": "`getCurrentPosition()` âńd̂ `watchPosition()` ár̂é d̂ép̂ŕêćât́êd́ ôń îńŝéĉúr̂é ôŕîǵîńŝ. T́ô úŝé t̂h́îś f̂éât́ûŕê, ýôú ŝh́ôúl̂d́ ĉón̂śîd́êŕ ŝẃît́ĉh́îńĝ ýôúr̂ áp̂ṕl̂íĉát̂íôń t̂ó â śêćûŕê ór̂íĝín̂, śûćĥ áŝ H́T̂T́P̂Ś. Ŝéê h́t̂t́p̂ś://ĝóô.ǵl̂é/ĉh́r̂óm̂é-îńŝéĉúr̂é-ôŕîǵîńŝ f́ôŕ m̂ór̂é d̂ét̂áîĺŝ." + }, + "lighthouse-core/lib/deprecations-strings.js | getUserMediaInsecureOrigin": { + "message": "`getUserMedia()` n̂ó l̂ón̂ǵêŕ ŵór̂ḱŝ ón̂ ín̂śêćûŕê ór̂íĝín̂ś. T̂ó ûśê t́ĥíŝ f́êát̂úr̂é, ŷóû śĥóûĺd̂ ćôńŝíd̂ér̂ śŵít̂ćĥín̂ǵ ŷóûŕ âṕp̂ĺîćât́îón̂ t́ô á ŝéĉúr̂é ôŕîǵîń, ŝúĉh́ âś ĤT́T̂ṔŜ. Śêé ĥt́t̂ṕŝ://ǵôó.ĝĺê/ćĥŕôḿê-ín̂śêćûŕê-ór̂íĝín̂ś f̂ór̂ ḿôŕê d́êt́âíl̂ś." + }, + "lighthouse-core/lib/deprecations-strings.js | hostCandidateAttributeGetter": { + "message": "`RTCPeerConnectionIceErrorEvent.hostCandidate` îś d̂ép̂ŕêćât́êd́. P̂ĺêáŝé ûśê `RTCPeerConnectionIceErrorEvent.address` ór̂ `RTCPeerConnectionIceErrorEvent.port` ín̂śt̂éâd́." + }, + "lighthouse-core/lib/deprecations-strings.js | insecurePrivateNetworkSubresourceRequest": { + "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̂." + }, + "lighthouse-core/lib/deprecations-strings.js | legacyConstraintGoogIPv6": { + "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́." + }, + "lighthouse-core/lib/deprecations-strings.js | localCSSFileExtensionRejected": { + "message": "ĈŚŜ ćâńn̂ót̂ b́ê ĺôád̂éd̂ f́r̂óm̂ `file:` ÚR̂Ĺŝ ún̂ĺêśŝ t́ĥéŷ én̂d́ îń â `.css` f́îĺê éx̂t́êńŝíôń." + }, + "lighthouse-core/lib/deprecations-strings.js | mediaSourceAbortRemove": { + "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̂śt̂éâd́. `abort()` îś îńt̂én̂d́êd́ t̂ó ôńl̂ý âb́ôŕt̂ án̂ áŝýn̂ćĥŕôńôúŝ ḿêd́îá âṕp̂én̂d́ ôŕ r̂éŝét̂ ṕâŕŝér̂ śt̂át̂é." + }, + "lighthouse-core/lib/deprecations-strings.js | mediaSourceDurationTruncatingBuffered": { + "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`." + }, + "lighthouse-core/lib/deprecations-strings.js | milestone": { + "message": "T̂h́îś ĉh́âńĝé ŵíl̂ĺ ĝó îńt̂ó êf́f̂éĉt́ ŵít̂h́ m̂íl̂éŝt́ôńê {milestone}." + }, + "lighthouse-core/lib/deprecations-strings.js | noSysexWebMIDIWithoutPermission": { + "message": "Ŵéb̂ ḾÎD́Î ẃîĺl̂ áŝḱ â ṕêŕm̂íŝśîón̂ t́ô úŝé êv́êń îf́ t̂h́ê śŷśêx́ îś n̂ót̂ śp̂éĉíf̂íêd́ îń t̂h́ê `MIDIOptions`." + }, + "lighthouse-core/lib/deprecations-strings.js | notificationInsecureOrigin": { + "message": "T̂h́ê Ńôt́îf́îćât́îón̂ ÁP̂Í m̂áŷ ńô ĺôńĝér̂ b́ê úŝéd̂ f́r̂óm̂ ín̂śêćûŕê ór̂íĝín̂ś. Ŷóû śĥóûĺd̂ ćôńŝíd̂ér̂ śŵít̂ćĥín̂ǵ ŷóûŕ âṕp̂ĺîćât́îón̂ t́ô á ŝéĉúr̂é ôŕîǵîń, ŝúĉh́ âś ĤT́T̂ṔŜ. Śêé ĥt́t̂ṕŝ://ǵôó.ĝĺê/ćĥŕôḿê-ín̂śêćûŕê-ór̂íĝín̂ś f̂ór̂ ḿôŕê d́êt́âíl̂ś." + }, + "lighthouse-core/lib/deprecations-strings.js | notificationPermissionRequestedIframe": { + "message": "P̂ér̂ḿîśŝíôń f̂ór̂ t́ĥé N̂ót̂íf̂íĉát̂íôń ÂṔÎ ḿâý n̂ó l̂ón̂ǵêŕ b̂é r̂éq̂úêśt̂éd̂ f́r̂óm̂ á ĉŕôśŝ-ór̂íĝín̂ íf̂ŕâḿê. Ýôú ŝh́ôúl̂d́ ĉón̂śîd́êŕ r̂éq̂úêśt̂ín̂ǵ p̂ér̂ḿîśŝíôń f̂ŕôḿ â t́ôṕ-l̂év̂él̂ f́r̂ám̂é ôŕ ôṕêńîńĝ á n̂éŵ ẃîńd̂óŵ ín̂śt̂éâd́." + }, + "lighthouse-core/lib/deprecations-strings.js | obsoleteWebRtcCipherSuite": { + "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́." + }, + "lighthouse-core/lib/deprecations-strings.js | pictureSourceSrc": { + "message": "`` ŵít̂h́ â `` ṕâŕêńt̂ íŝ ín̂v́âĺîd́ âńd̂ t́ĥér̂éf̂ór̂é îǵn̂ór̂éd̂. Ṕl̂éâśê úŝé `` îńŝt́êád̂." + }, + "lighthouse-core/lib/deprecations-strings.js | prefixedStorageInfo": { + "message": "`window.webkitStorageInfo` îś d̂ép̂ŕêćât́êd́. P̂ĺêáŝé ûśê `navigator.webkitTemporaryStorage` ór̂ `navigator.webkitPersistentStorage` ín̂śt̂éâd́." + }, + "lighthouse-core/lib/deprecations-strings.js | requestedSubresourceWithEmbeddedCredentials": { + "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́." + }, + "lighthouse-core/lib/deprecations-strings.js | rtcConstraintEnableDtlsSrtpFalse": { + "message": "T̂h́ê ćôńŝt́r̂áîńt̂ `DtlsSrtpKeyAgreement` íŝ ŕêḿôv́êd́. Ŷóû h́âv́ê śp̂éĉíf̂íêd́ â `false` v́âĺûé f̂ór̂ t́ĥíŝ ćôńŝt́r̂áîńt̂, ẃĥíĉh́ îś îńt̂ér̂ṕr̂ét̂éd̂ áŝ án̂ át̂t́êḿp̂t́ t̂ó ûśê t́ĥé r̂ém̂óv̂éd̂ `SDES key negotiation` ḿêt́ĥód̂. T́ĥíŝ f́ûńĉt́îón̂ál̂ít̂ý îś r̂ém̂óv̂éd̂; úŝé â śêŕv̂íĉé t̂h́ât́ ŝúp̂ṕôŕt̂ś `DTLS key negotiation` îńŝt́êád̂." + }, + "lighthouse-core/lib/deprecations-strings.js | rtcConstraintEnableDtlsSrtpTrue": { + "message": "T̂h́ê ćôńŝt́r̂áîńt̂ `DtlsSrtpKeyAgreement` íŝ ŕêḿôv́êd́. Ŷóû h́âv́ê śp̂éĉíf̂íêd́ â `true` v́âĺûé f̂ór̂ t́ĥíŝ ćôńŝt́r̂áîńt̂, ẃĥíĉh́ ĥád̂ ńô éf̂f́êćt̂, b́ût́ ŷóû ćâń r̂ém̂óv̂é t̂h́îś ĉón̂śt̂ŕâín̂t́ f̂ór̂ t́îd́îńêśŝ." + }, + "lighthouse-core/lib/deprecations-strings.js | rtcPeerConnectionComplexPlanBSdpUsingDefaultSdpSemantics": { + "message": "`Complex Plan B SDP` d̂ét̂éĉt́êd́. T̂h́îś d̂íâĺêćt̂ óf̂ t́ĥé `Session Description Protocol` îś n̂ó l̂ón̂ǵêŕ ŝúp̂ṕôŕt̂éd̂. Ṕl̂éâśê úŝé `Unified Plan SDP` îńŝt́êád̂." + }, + "lighthouse-core/lib/deprecations-strings.js | rtcPeerConnectionSdpSemanticsPlanB": { + "message": "`Plan B SDP semantics`, ŵh́îćĥ íŝ úŝéd̂ ẃĥén̂ ćôńŝt́r̂úĉt́îńĝ án̂ `RTCPeerConnection` ẃît́ĥ `{sdpSemantics:plan-b}`, íŝ á l̂éĝáĉý n̂ón̂-śt̂án̂d́âŕd̂ v́êŕŝíôń ôf́ t̂h́ê `Session Description Protocol` t́ĥát̂ h́âś b̂éêń p̂ér̂ḿâńêńt̂ĺŷ d́êĺêt́êd́ f̂ŕôḿ t̂h́ê Ẃêb́ P̂ĺât́f̂ór̂ḿ. Ît́ îś ŝt́îĺl̂ áv̂áîĺâb́l̂é ŵh́êń b̂úîĺd̂ín̂ǵ ŵít̂h́ `IS_FUCHSIA`, b̂út̂ ẃê ín̂t́êńd̂ t́ô d́êĺêt́ê ít̂ áŝ śôón̂ áŝ ṕôśŝíb̂ĺê. Śt̂óp̂ d́êṕêńd̂ín̂ǵ ôń ît́. Ŝéê h́t̂t́p̂ś://ĉŕb̂úĝ.ćôḿ/1302249 f̂ór̂ śt̂át̂úŝ." + }, + "lighthouse-core/lib/deprecations-strings.js | rtcpMuxPolicyNegotiate": { + "message": "T̂h́ê `rtcpMuxPolicy` óp̂t́îón̂ íŝ d́êṕr̂éĉát̂éd̂ án̂d́ ŵíl̂ĺ b̂é r̂ém̂óv̂éd̂." + }, + "lighthouse-core/lib/deprecations-strings.js | sharedArrayBufferConstructedWithoutIsolation": { + "message": "`SharedArrayBuffer` ŵíl̂ĺ r̂éq̂úîŕê ćr̂óŝś-ôŕîǵîń îśôĺât́îón̂. Śêé ĥt́t̂ṕŝ://d́êv́êĺôṕêŕ.ĉh́r̂óm̂é.ĉóm̂/b́l̂óĝ/én̂áb̂ĺîńĝ-śĥár̂éd̂-ár̂ŕâý-b̂úf̂f́êŕ/ f̂ór̂ ḿôŕê d́êt́âíl̂ś." + }, + "lighthouse-core/lib/deprecations-strings.js | textToSpeech_DisallowedByAutoplay": { + "message": "`speechSynthesis.speak()` ŵít̂h́ôút̂ úŝér̂ áĉt́îv́ât́îón̂ íŝ d́êṕr̂éĉát̂éd̂ án̂d́ ŵíl̂ĺ b̂é r̂ém̂óv̂éd̂." + }, + "lighthouse-core/lib/deprecations-strings.js | title": { + "message": "D̂ép̂ŕêćât́êd́ F̂éât́ûŕê Úŝéd̂" + }, + "lighthouse-core/lib/deprecations-strings.js | v8SharedArrayBufferConstructedInExtensionWithoutIsolation": { + "message": "Êx́t̂én̂śîón̂ś ŝh́ôúl̂d́ ôṕt̂ ín̂t́ô ćr̂óŝś-ôŕîǵîń îśôĺât́îón̂ t́ô ćôńt̂ín̂úê úŝín̂ǵ `SharedArrayBuffer`. Ŝéê h́t̂t́p̂ś://d̂év̂él̂óp̂ér̂.ćĥŕôḿê.ćôḿ/d̂óĉś/êx́t̂én̂śîón̂ś/m̂v́3/ĉŕôśŝ-ór̂íĝín̂-íŝól̂át̂íôń/." + }, + "lighthouse-core/lib/deprecations-strings.js | vendorSpecificApi": { + "message": "{PH1} îś v̂én̂d́ôŕ-ŝṕêćîf́îć. P̂ĺêáŝé ûśê t́ĥé ŝt́âńd̂ár̂d́ {PH2} îńŝt́êád̂." + }, + "lighthouse-core/lib/deprecations-strings.js | xhrJSONEncodingDetection": { + "message": "ÛT́F̂-16 íŝ ńôt́ ŝúp̂ṕôŕt̂éd̂ b́ŷ ŕêśp̂ón̂śê j́ŝón̂ ín̂ `XMLHttpRequest`" + }, + "lighthouse-core/lib/deprecations-strings.js | xmlHttpRequestSynchronousInNonWorkerOutsideBeforeUnload": { + "message": "Ŝýn̂ćĥŕôńôúŝ `XMLHttpRequest` ón̂ t́ĥé m̂áîń t̂h́r̂éâd́ îś d̂ép̂ŕêćât́êd́ b̂éĉáûśê óf̂ ít̂ś d̂ét̂ŕîḿêńt̂ál̂ éf̂f́êćt̂ś t̂ó t̂h́ê én̂d́ ûśêŕ’ŝ éx̂ṕêŕîén̂ćê. F́ôŕ m̂ór̂é ĥél̂ṕ, ĉh́êćk̂ h́t̂t́p̂ś://x̂h́r̂.śp̂éĉ.ẃĥát̂ẃĝ.ór̂ǵ/." + }, + "lighthouse-core/lib/deprecations-strings.js | xrSupportsSession": { + "message": "`supportsSession()` îś d̂ép̂ŕêćât́êd́. P̂ĺêáŝé ûśê `isSessionSupported()` án̂d́ ĉh́êćk̂ t́ĥé r̂éŝól̂v́êd́ b̂óôĺêán̂ v́âĺûé îńŝt́êád̂." + }, "lighthouse-core/lib/i18n/i18n.js | columnBlockingTime": { "message": "M̂áîń-T̂h́r̂éâd́ B̂ĺôćk̂ín̂ǵ T̂ím̂é" }, diff --git a/yarn.lock b/yarn.lock index 403cb0349621..5bea6971da63 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2954,10 +2954,10 @@ delayed-stream@~1.0.0: resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= -devtools-protocol@0.0.981744, devtools-protocol@0.0.995287: - version "0.0.995287" - resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.995287.tgz#843a846cff79d0f76a74818ec2d604a4fe90c2d0" - integrity sha512-HvTDDBKzY5ojCNmxAF+N+kZGQsl+hPZPIaWpG0q1BMuvUHdRwL4IrGKIH+avNLzCrImi/kKYDnsmZi7jjm0xlw== +devtools-protocol@0.0.981744, devtools-protocol@0.0.999451: + version "0.0.999451" + resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.999451.tgz#7113f2a34beb69c688e5e247980a54b5589a62d2" + integrity sha512-6TGLxJjCO2Ap+YWukCriwuFGwEmKayZ5b4oGEYnHQv1rXgaJAhBIpTWJWwsv/EBQlyPVDBxYuz3SVRs7Heq3RA== diff-sequences@^28.0.2: version "28.0.2"