diff --git a/.circleci/config.yml b/.circleci/config.yml index 91d3e642d4409d..8430e0e37ec756 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -35,7 +35,16 @@ jobs: command: | apt update apt install -y wget git curl jq - curl -sL https://deb.nodesource.com/setup_18.x | bash - + + apt-get update + apt-get install -y ca-certificates curl gnupg + mkdir -p /etc/apt/keyrings + curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg + + NODE_MAJOR=18 + echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list + apt-get update + apt install -y nodejs npm install --global yarn - checkout @@ -69,9 +78,9 @@ jobs: command: | if [[ -z "$CIRCLE_PULL_REQUEST" ]]; then echo "Not in a PR. Can't filter properly outside a PR. Please open a PR so that we can run the proper CI tests." - echo "Skipping!" + echo "For safety, we run all the tests!" mkdir -p /tmp/circleci/ - echo '{}' > /tmp/circleci/pipeline_config.json + echo '{ "run_all": true }' > /tmp/circleci/pipeline_config.json else PR_NUMBER="${CIRCLE_PULL_REQUEST##*/}" node ./scripts/circleci/pipeline_selection.js filter-jobs @@ -91,4 +100,7 @@ jobs: workflows: always-run: jobs: - - choose_ci_jobs + - choose_ci_jobs: + filters: + tags: + only: /.*/ diff --git a/.circleci/configurations/jobs.yml b/.circleci/configurations/jobs.yml index d0d17a83f6aa36..d21c54aee889c7 100644 --- a/.circleci/configurations/jobs.yml +++ b/.circleci/configurations/jobs.yml @@ -621,7 +621,7 @@ jobs: - run: name: Install Node JS # Note: Version set separately for non-Windows builds, see above. - command: choco install nodejs-lts + command: choco install nodejs --version=18.18.0 --allow-downgrade # Setup Dependencies - run: @@ -681,7 +681,16 @@ jobs: apt update apt install -y wget git curl jq - curl -sL https://deb.nodesource.com/setup_18.x | bash - + + apt-get update + apt-get install -y ca-certificates curl gnupg + mkdir -p /etc/apt/keyrings + curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg + + NODE_MAJOR=18 + echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list + apt-get update + apt install -y nodejs npm install --global yarn - checkout diff --git a/.circleci/configurations/top_level.yml b/.circleci/configurations/top_level.yml index f8c98c6e9ef060..6eed67c24e92dc 100644 --- a/.circleci/configurations/top_level.yml +++ b/.circleci/configurations/top_level.yml @@ -91,8 +91,8 @@ references: hermes_dsym_release_cache_key: &hermes_dsym_release_cache_key v1-hermes-release-dsym-{{ checksum "/tmp/hermes/hermesversion" }}-{{ checksum "/tmp/react-native-version" }} # Cocoapods - RNTester pods_cache_key: &pods_cache_key v10-pods-{{ .Environment.CIRCLE_JOB }}-{{ checksum "packages/rn-tester/Podfile.lock.bak" }}-{{ checksum "packages/rn-tester/Podfile" }} - cocoapods_cache_key: &cocoapods_cache_key v8-cocoapods-{{ .Environment.CIRCLE_JOB }}-{{ checksum "packages/rn-tester/Podfile.lock" }}-{{ checksum "packages/rn-tester/Podfile" }}-{{ checksum "/tmp/hermes/hermesversion" }} - rntester_podfile_lock_cache_key: &rntester_podfile_lock_cache_key v6-podfilelock-{{ .Environment.CIRCLE_JOB }}-{{ checksum "packages/rn-tester/Podfile" }}-{{ checksum "/tmp/week_year" }}-{{ checksum "/tmp/hermes/hermesversion" }} + cocoapods_cache_key: &cocoapods_cache_key v9-cocoapods-{{ .Environment.CIRCLE_JOB }}-{{ checksum "packages/rn-tester/Podfile.lock" }}-{{ checksum "packages/rn-tester/Podfile" }}-{{ checksum "/tmp/hermes/hermesversion" }} + rntester_podfile_lock_cache_key: &rntester_podfile_lock_cache_key v7-podfilelock-{{ .Environment.CIRCLE_JOB }}-{{ checksum "packages/rn-tester/Podfile" }}-{{ checksum "/tmp/week_year" }}-{{ checksum "/tmp/hermes/hermesversion" }} # Cocoapods - Template template_cocoapods_cache_key: &template_cocoapods_cache_key v4-cocoapods-{{ .Environment.CIRCLE_JOB }}-{{ checksum "/tmp/iOSTemplateProject/ios/Podfile.lock" }}-{{ checksum "/tmp/iOSTemplateProject/ios/Podfile" }}-{{ checksum "/tmp/hermes/hermesversion" }}-{{ checksum "packages/rn-tester/Podfile.lock }} diff --git a/.circleci/configurations/workflows.yml b/.circleci/configurations/workflows.yml index 4b346cb78fa40e..be128b7d0af88e 100644 --- a/.circleci/configurations/workflows.yml +++ b/.circleci/configurations/workflows.yml @@ -43,6 +43,7 @@ workflows: requires: - prepare_hermes_workspace - build_apple_slices_hermes: + filters: *only_release_tags requires: - build_hermesc_apple matrix: @@ -54,6 +55,7 @@ workflows: requires: - prepare_hermes_workspace - build_hermes_macos: + filters: *only_release_tags requires: - build_apple_slices_hermes matrix: diff --git a/.gitignore b/.gitignore index 3cddf6b3fb8cef..1ba1301cb12c4b 100644 --- a/.gitignore +++ b/.gitignore @@ -21,7 +21,6 @@ DerivedData *.xcuserstate project.xcworkspace **/.xcode.env.local -/poackages/react-native/sdks/downloads/ # Gradle /build/ diff --git a/Gemfile b/Gemfile index faa58ba5d92882..1f657254243488 100644 --- a/Gemfile +++ b/Gemfile @@ -4,4 +4,4 @@ source 'https://rubygems.org' ruby ">= 2.6.10" gem 'cocoapods', '~> 1.12' -gem 'activesupport', '>= 6.1.7.3' +gem 'activesupport', '>= 6.1.7.3', '< 7.1.0' diff --git a/flow-typed/npm/open_v7.x.x.js b/flow-typed/npm/open_v7.x.x.js new file mode 100644 index 00000000000000..a60b26aa5b7974 --- /dev/null +++ b/flow-typed/npm/open_v7.x.x.js @@ -0,0 +1,29 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @flow strict + * @format + * @oncall react_native + */ + +declare module 'open' { + import type {ChildProcess} from 'child_process'; + + declare export type Options = $ReadOnly<{ + wait?: boolean, + background?: boolean, + newInstance?: boolean, + allowNonzeroExitCode?: boolean, + ... + }>; + + declare type open = ( + target: string, + options?: Options, + ) => Promise; + + declare module.exports: open; +} diff --git a/package.json b/package.json index b9c7c0adbedcdb..2f6bc52905b795 100644 --- a/package.json +++ b/package.json @@ -55,8 +55,8 @@ "@definitelytyped/dtslint": "^0.0.127", "@jest/create-cache-key-function": "^29.6.3", "@pkgjs/parseargs": "^0.11.0", - "@react-native/metro-babel-transformer": "^0.73.11", - "@react-native/metro-config": "^0.73.0", + "@react-native/metro-babel-transformer": "^0.73.12", + "@react-native/metro-config": "^0.73.2", "@tsconfig/node18": "1.0.1", "@types/react": "^18.0.18", "@typescript-eslint/parser": "^5.57.1", @@ -91,8 +91,8 @@ "jest": "^29.6.3", "jest-junit": "^10.0.0", "jscodeshift": "^0.14.0", - "metro-babel-register": "0.79.1", - "metro-memory-fs": "0.79.1", + "metro-babel-register": "^0.80.0", + "metro-memory-fs": "^0.80.0", "micromatch": "^4.0.4", "mkdirp": "^0.5.1", "mock-fs": "^5.1.4", diff --git a/packages/assets/package.json b/packages/assets/package.json index c8e5100a2cc468..ba116d356e5465 100644 --- a/packages/assets/package.json +++ b/packages/assets/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/assets-registry", - "version": "0.73.0", + "version": "0.73.1", "description": "Asset support code for React Native.", "license": "MIT", "repository": { @@ -9,7 +9,12 @@ "directory": "packages/assets" }, "homepage": "https://github.com/facebook/react-native/tree/HEAD/packages/assets#readme", - "keywords": ["assets", "registry", "react-native", "support"], + "keywords": [ + "assets", + "registry", + "react-native", + "support" + ], "bugs": "https://github.com/facebook/react-native/issues", "engines": { "node": ">=18" diff --git a/packages/babel-plugin-codegen/package.json b/packages/babel-plugin-codegen/package.json index aa6a48c1a5f80b..6d886d9fec0dde 100644 --- a/packages/babel-plugin-codegen/package.json +++ b/packages/babel-plugin-codegen/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/babel-plugin-codegen", - "version": "0.73.0", + "version": "0.73.1", "description": "Babel plugin to generate native module and view manager code for React Native.", "license": "MIT", "repository": { @@ -9,7 +9,14 @@ "directory": "packages/babel-plugin-codegen" }, "homepage": "https://github.com/facebook/react-native/tree/HEAD/packages/babel-plugin-codegen#readme", - "keywords": ["babel", "plugin", "codegen", "react-native", "native-modules", "view-manager"], + "keywords": [ + "babel", + "plugin", + "codegen", + "react-native", + "native-modules", + "view-manager" + ], "bugs": "https://github.com/facebook/react-native/issues", "engines": { "node": ">=18" diff --git a/packages/community-cli-plugin/package.json b/packages/community-cli-plugin/package.json index 3f47a036390069..e0e0faffb79b0d 100644 --- a/packages/community-cli-plugin/package.json +++ b/packages/community-cli-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/community-cli-plugin", - "version": "0.73.1", + "version": "0.73.8", "description": "Core CLI commands for React Native", "keywords": [ "react-native", @@ -22,20 +22,20 @@ "dist" ], "dependencies": { - "@react-native/dev-middleware": "^0.73.0", - "@react-native-community/cli-server-api": "12.0.0-alpha.15", - "@react-native-community/cli-tools": "12.0.0-alpha.15", - "@react-native/metro-babel-transformer": "^0.73.11", + "@react-native/dev-middleware": "^0.73.4", + "@react-native-community/cli-server-api": "12.0.0", + "@react-native-community/cli-tools": "12.0.0", + "@react-native/metro-babel-transformer": "^0.73.12", "chalk": "^4.0.0", "execa": "^5.1.1", - "metro": "0.79.1", - "metro-config": "0.79.1", - "metro-core": "0.79.1", + "metro": "^0.80.0", + "metro-config": "^0.80.0", + "metro-core": "^0.80.0", "node-fetch": "^2.2.0", "readline": "^1.3.0" }, "devDependencies": { - "metro-resolver": "0.79.1" + "metro-resolver": "^0.80.0" }, "engines": { "node": ">=18" diff --git a/packages/community-cli-plugin/src/commands/start/attachKeyHandlers.js b/packages/community-cli-plugin/src/commands/start/attachKeyHandlers.js index 7ac9a6cffbc75a..13eb813f7c827d 100644 --- a/packages/community-cli-plugin/src/commands/start/attachKeyHandlers.js +++ b/packages/community-cli-plugin/src/commands/start/attachKeyHandlers.js @@ -15,7 +15,6 @@ import {logger} from '@react-native-community/cli-tools'; import chalk from 'chalk'; import execa from 'execa'; import fetch from 'node-fetch'; -import readline from 'readline'; import {KeyPressHandler} from '../../utils/KeyPressHandler'; const CTRL_C = '\u0003'; @@ -23,27 +22,23 @@ const CTRL_D = '\u0004'; export default function attachKeyHandlers({ cliConfig, - serverInstance, devServerUrl, messageSocket, + experimentalDebuggerFrontend, }: { cliConfig: Config, devServerUrl: string, - serverInstance: http$Server | https$Server, messageSocket: $ReadOnly<{ broadcast: (type: string, params?: Record | null) => void, ... }>, + experimentalDebuggerFrontend: boolean, }) { if (process.stdin.isTTY !== true) { logger.debug('Interactive mode is not supported in this environment'); return; } - readline.emitKeypressEvents(process.stdin); - // $FlowIgnore[prop-missing] - process.stdin.setRawMode(true); - const execaOptions = { env: {FORCE_COLOR: chalk.supportsColor ? 'true' : 'false'}, }; @@ -83,30 +78,35 @@ export default function attachKeyHandlers({ ).stdout?.pipe(process.stdout); break; case 'j': + if (!experimentalDebuggerFrontend) { + return; + } await fetch(devServerUrl + '/open-debugger', {method: 'POST'}); break; case CTRL_C: case CTRL_D: logger.info('Stopping server'); - listener?.({pause: true}); - serverInstance.close(() => { - process.emit('SIGINT'); - process.exit(); - }); + keyPressHandler.stopInterceptingKeyStrokes(); + process.emit('SIGINT'); + process.exit(); } }; const keyPressHandler = new KeyPressHandler(onPress); - const listener = keyPressHandler.createInteractionListener(); + keyPressHandler.createInteractionListener(); keyPressHandler.startInterceptingKeyStrokes(); logger.log( - ` -${chalk.bold('i')} - run on iOS -${chalk.bold('a')} - run on Android -${chalk.bold('d')} - open Dev Menu -${chalk.bold('j')} - open debugger -${chalk.bold('r')} - reload app -`, + [ + '', + `${chalk.bold('i')} - run on iOS`, + `${chalk.bold('a')} - run on Android`, + `${chalk.bold('d')} - open Dev Menu`, + ...(experimentalDebuggerFrontend + ? [`${chalk.bold('j')} - open debugger (experimental, Hermes only)`] + : []), + `${chalk.bold('r')} - reload app`, + '', + ].join('\n'), ); } diff --git a/packages/community-cli-plugin/src/commands/start/index.js b/packages/community-cli-plugin/src/commands/start/index.js index 8bcf6e1ac4b086..88028746183b9d 100644 --- a/packages/community-cli-plugin/src/commands/start/index.js +++ b/packages/community-cli-plugin/src/commands/start/index.js @@ -95,6 +95,13 @@ const startCommand: Command = { name: '--no-interactive', description: 'Disables interactive mode', }, + { + name: '--experimental-debugger', + description: + "[Experimental] Enable the new debugger experience and 'j' to " + + 'debug. This enables the new frontend experience only: connection ' + + 'reliability and some basic features are unstable in this release.', + }, ], }; diff --git a/packages/community-cli-plugin/src/commands/start/runServer.js b/packages/community-cli-plugin/src/commands/start/runServer.js index 587f755501c69a..60477b3131021f 100644 --- a/packages/community-cli-plugin/src/commands/start/runServer.js +++ b/packages/community-cli-plugin/src/commands/start/runServer.js @@ -33,6 +33,7 @@ export type StartCommandArgs = { assetPlugins?: string[], cert?: string, customLogReporterPath?: string, + experimentalDebugger: boolean, host?: string, https?: boolean, maxWorkers?: number, @@ -118,7 +119,7 @@ async function runServer( logger, unstable_experiments: { // NOTE: Only affects the /open-debugger endpoint - enableCustomDebuggerFrontend: true, + enableNewDebugger: args.experimentalDebugger, }, }); @@ -137,8 +138,8 @@ async function runServer( attachKeyHandlers({ cliConfig: ctx, devServerUrl, - serverInstance, messageSocket: messageSocketEndpoint, + experimentalDebuggerFrontend: args.experimentalDebugger, }); } }, diff --git a/packages/debugger-frontend/BUILD_INFO b/packages/debugger-frontend/BUILD_INFO index fe942450d1b284..67e1ea665da8e3 100644 --- a/packages/debugger-frontend/BUILD_INFO +++ b/packages/debugger-frontend/BUILD_INFO @@ -1,5 +1,5 @@ -@generated SignedSource<<8a0bac4cfdcc3cd44a4f7136f2611ebb>> -Git revision: 0ffb687b8e049769d2e7162ba8d7205c90e4110c +@generated SignedSource<<7fdc9e65be03ba4c6654f14c6f23d645>> +Git revision: 18f202a1ae468a01afb44ffd2f71d28023126989 Built with --nohooks: false Is local checkout: false Remote URL: https://github.com/motiz88/rn-chrome-devtools-frontend diff --git a/packages/debugger-frontend/dist/third-party/front_end/Images/Images.js b/packages/debugger-frontend/dist/third-party/front_end/Images/Images.js index 6da713f6a5c8a7..0977e3575591c3 100644 --- a/packages/debugger-frontend/dist/third-party/front_end/Images/Images.js +++ b/packages/debugger-frontend/dist/third-party/front_end/Images/Images.js @@ -13,6 +13,7 @@ style.setProperty('--image-file-chromeLeft', 'url(\"' + new URL('./chromeLeft.av style.setProperty('--image-file-chromeMiddle', 'url(\"' + new URL('./chromeMiddle.avif', import.meta.url).toString() + '\")'); style.setProperty('--image-file-chromeRight', 'url(\"' + new URL('./chromeRight.avif', import.meta.url).toString() + '\")'); style.setProperty('--image-file-cssoverview_icons_2x', 'url(\"' + new URL('./cssoverview_icons_2x.avif', import.meta.url).toString() + '\")'); +style.setProperty('--image-file-favicon', 'url(\"' + new URL('./favicon.ico', import.meta.url).toString() + '\")'); style.setProperty('--image-file-navigationControls_2x', 'url(\"' + new URL('./navigationControls_2x.png', import.meta.url).toString() + '\")'); style.setProperty('--image-file-navigationControls', 'url(\"' + new URL('./navigationControls.png', import.meta.url).toString() + '\")'); style.setProperty('--image-file-nodeIcon', 'url(\"' + new URL('./nodeIcon.avif', import.meta.url).toString() + '\")'); diff --git a/packages/debugger-frontend/dist/third-party/front_end/Images/favicon.ico b/packages/debugger-frontend/dist/third-party/front_end/Images/favicon.ico new file mode 100644 index 00000000000000..5c125de5d897c1 Binary files /dev/null and b/packages/debugger-frontend/dist/third-party/front_end/Images/favicon.ico differ diff --git a/packages/debugger-frontend/dist/third-party/front_end/core/i18n/locales/en-US.json b/packages/debugger-frontend/dist/third-party/front_end/core/i18n/locales/en-US.json index 5ae98cd338e1fa..9f9b24aa6230c4 100644 --- a/packages/debugger-frontend/dist/third-party/front_end/core/i18n/locales/en-US.json +++ b/packages/debugger-frontend/dist/third-party/front_end/core/i18n/locales/en-US.json @@ -1 +1 @@ -{"core/common/ResourceType.ts | cspviolationreport":{"message":"CSPViolationReport"},"core/common/ResourceType.ts | css":{"message":"CSS"},"core/common/ResourceType.ts | doc":{"message":"Doc"},"core/common/ResourceType.ts | document":{"message":"Document"},"core/common/ResourceType.ts | documents":{"message":"Documents"},"core/common/ResourceType.ts | eventsource":{"message":"EventSource"},"core/common/ResourceType.ts | fetch":{"message":"Fetch"},"core/common/ResourceType.ts | font":{"message":"Font"},"core/common/ResourceType.ts | fonts":{"message":"Fonts"},"core/common/ResourceType.ts | image":{"message":"Image"},"core/common/ResourceType.ts | images":{"message":"Images"},"core/common/ResourceType.ts | img":{"message":"Img"},"core/common/ResourceType.ts | js":{"message":"JS"},"core/common/ResourceType.ts | manifest":{"message":"Manifest"},"core/common/ResourceType.ts | media":{"message":"Media"},"core/common/ResourceType.ts | other":{"message":"Other"},"core/common/ResourceType.ts | ping":{"message":"Ping"},"core/common/ResourceType.ts | preflight":{"message":"Preflight"},"core/common/ResourceType.ts | script":{"message":"Script"},"core/common/ResourceType.ts | scripts":{"message":"Scripts"},"core/common/ResourceType.ts | signedexchange":{"message":"SignedExchange"},"core/common/ResourceType.ts | stylesheet":{"message":"Stylesheet"},"core/common/ResourceType.ts | stylesheets":{"message":"Stylesheets"},"core/common/ResourceType.ts | texttrack":{"message":"TextTrack"},"core/common/ResourceType.ts | wasm":{"message":"Wasm"},"core/common/ResourceType.ts | webassembly":{"message":"WebAssembly"},"core/common/ResourceType.ts | webbundle":{"message":"WebBundle"},"core/common/ResourceType.ts | websocket":{"message":"WebSocket"},"core/common/ResourceType.ts | websockets":{"message":"WebSockets"},"core/common/ResourceType.ts | webtransport":{"message":"WebTransport"},"core/common/ResourceType.ts | ws":{"message":"WS"},"core/common/ResourceType.ts | xhrAndFetch":{"message":"XHR and Fetch"},"core/common/Revealer.ts | applicationPanel":{"message":"Application panel"},"core/common/Revealer.ts | changesDrawer":{"message":"Changes drawer"},"core/common/Revealer.ts | elementsPanel":{"message":"Elements panel"},"core/common/Revealer.ts | issuesView":{"message":"Issues view"},"core/common/Revealer.ts | networkPanel":{"message":"Network panel"},"core/common/Revealer.ts | sourcesPanel":{"message":"Sources panel"},"core/common/Revealer.ts | stylesSidebar":{"message":"styles sidebar"},"core/common/SettingRegistration.ts | adorner":{"message":"Adorner"},"core/common/SettingRegistration.ts | appearance":{"message":"Appearance"},"core/common/SettingRegistration.ts | console":{"message":"Console"},"core/common/SettingRegistration.ts | debugger":{"message":"Debugger"},"core/common/SettingRegistration.ts | elements":{"message":"Elements"},"core/common/SettingRegistration.ts | extension":{"message":"Extension"},"core/common/SettingRegistration.ts | global":{"message":"Global"},"core/common/SettingRegistration.ts | grid":{"message":"Grid"},"core/common/SettingRegistration.ts | memory":{"message":"Memory"},"core/common/SettingRegistration.ts | mobile":{"message":"Mobile"},"core/common/SettingRegistration.ts | network":{"message":"Network"},"core/common/SettingRegistration.ts | performance":{"message":"Performance"},"core/common/SettingRegistration.ts | persistence":{"message":"Persistence"},"core/common/SettingRegistration.ts | rendering":{"message":"Rendering"},"core/common/SettingRegistration.ts | sources":{"message":"Sources"},"core/common/SettingRegistration.ts | sync":{"message":"Sync"},"core/host/InspectorFrontendHost.ts | devtoolsS":{"message":"DevTools - {PH1}"},"core/host/ResourceLoader.ts | cacheError":{"message":"Cache error"},"core/host/ResourceLoader.ts | certificateError":{"message":"Certificate error"},"core/host/ResourceLoader.ts | certificateManagerError":{"message":"Certificate manager error"},"core/host/ResourceLoader.ts | connectionError":{"message":"Connection error"},"core/host/ResourceLoader.ts | decodingDataUrlFailed":{"message":"Decoding Data URL failed"},"core/host/ResourceLoader.ts | dnsResolverError":{"message":"DNS resolver error"},"core/host/ResourceLoader.ts | ftpError":{"message":"FTP error"},"core/host/ResourceLoader.ts | httpError":{"message":"HTTP error"},"core/host/ResourceLoader.ts | httpErrorStatusCodeSS":{"message":"HTTP error: status code {PH1}, {PH2}"},"core/host/ResourceLoader.ts | invalidUrl":{"message":"Invalid URL"},"core/host/ResourceLoader.ts | signedExchangeError":{"message":"Signed Exchange error"},"core/host/ResourceLoader.ts | systemError":{"message":"System error"},"core/host/ResourceLoader.ts | unknownError":{"message":"Unknown error"},"core/i18n/time-utilities.ts | fdays":{"message":"{PH1} days"},"core/i18n/time-utilities.ts | fhrs":{"message":"{PH1} hrs"},"core/i18n/time-utilities.ts | fmin":{"message":"{PH1} min"},"core/i18n/time-utilities.ts | fmms":{"message":"{PH1} μs"},"core/i18n/time-utilities.ts | fms":{"message":"{PH1} ms"},"core/i18n/time-utilities.ts | fs":{"message":"{PH1} s"},"core/sdk/CompilerSourceMappingContentProvider.ts | couldNotLoadContentForSS":{"message":"Could not load content for {PH1} ({PH2})"},"core/sdk/ConsoleModel.ts | bfcacheNavigation":{"message":"Navigation to {PH1} was restored from back/forward cache (see https://web.dev/bfcache/)"},"core/sdk/ConsoleModel.ts | failedToSaveToTempVariable":{"message":"Failed to save to temp variable."},"core/sdk/ConsoleModel.ts | navigatedToS":{"message":"Navigated to {PH1}"},"core/sdk/ConsoleModel.ts | profileSFinished":{"message":"Profile ''{PH1}'' finished."},"core/sdk/ConsoleModel.ts | profileSStarted":{"message":"Profile ''{PH1}'' started."},"core/sdk/CPUProfilerModel.ts | profileD":{"message":"Profile {PH1}"},"core/sdk/CSSStyleSheetHeader.ts | couldNotFindTheOriginalStyle":{"message":"Could not find the original style sheet."},"core/sdk/CSSStyleSheetHeader.ts | thereWasAnErrorRetrievingThe":{"message":"There was an error retrieving the source styles."},"core/sdk/DebuggerModel.ts | block":{"message":"Block"},"core/sdk/DebuggerModel.ts | catchBlock":{"message":"Catch block"},"core/sdk/DebuggerModel.ts | closure":{"message":"Closure"},"core/sdk/DebuggerModel.ts | expression":{"message":"Expression"},"core/sdk/DebuggerModel.ts | global":{"message":"Global"},"core/sdk/DebuggerModel.ts | local":{"message":"Local"},"core/sdk/DebuggerModel.ts | module":{"message":"Module"},"core/sdk/DebuggerModel.ts | script":{"message":"Script"},"core/sdk/DebuggerModel.ts | withBlock":{"message":"With block"},"core/sdk/DOMDebuggerModel.ts | animation":{"message":"Animation"},"core/sdk/DOMDebuggerModel.ts | animationFrameFired":{"message":"Animation Frame Fired"},"core/sdk/DOMDebuggerModel.ts | cancelAnimationFrame":{"message":"Cancel Animation Frame"},"core/sdk/DOMDebuggerModel.ts | canvas":{"message":"Canvas"},"core/sdk/DOMDebuggerModel.ts | clipboard":{"message":"Clipboard"},"core/sdk/DOMDebuggerModel.ts | closeAudiocontext":{"message":"Close AudioContext"},"core/sdk/DOMDebuggerModel.ts | control":{"message":"Control"},"core/sdk/DOMDebuggerModel.ts | createAudiocontext":{"message":"Create AudioContext"},"core/sdk/DOMDebuggerModel.ts | createCanvasContext":{"message":"Create canvas context"},"core/sdk/DOMDebuggerModel.ts | device":{"message":"Device"},"core/sdk/DOMDebuggerModel.ts | domMutation":{"message":"DOM Mutation"},"core/sdk/DOMDebuggerModel.ts | dragDrop":{"message":"Drag / drop"},"core/sdk/DOMDebuggerModel.ts | geolocation":{"message":"Geolocation"},"core/sdk/DOMDebuggerModel.ts | keyboard":{"message":"Keyboard"},"core/sdk/DOMDebuggerModel.ts | load":{"message":"Load"},"core/sdk/DOMDebuggerModel.ts | media":{"message":"Media"},"core/sdk/DOMDebuggerModel.ts | mouse":{"message":"Mouse"},"core/sdk/DOMDebuggerModel.ts | notification":{"message":"Notification"},"core/sdk/DOMDebuggerModel.ts | parse":{"message":"Parse"},"core/sdk/DOMDebuggerModel.ts | pictureinpicture":{"message":"Picture-in-Picture"},"core/sdk/DOMDebuggerModel.ts | pointer":{"message":"Pointer"},"core/sdk/DOMDebuggerModel.ts | policyViolations":{"message":"Policy Violations"},"core/sdk/DOMDebuggerModel.ts | requestAnimationFrame":{"message":"Request Animation Frame"},"core/sdk/DOMDebuggerModel.ts | resumeAudiocontext":{"message":"Resume AudioContext"},"core/sdk/DOMDebuggerModel.ts | script":{"message":"Script"},"core/sdk/DOMDebuggerModel.ts | scriptBlockedByContentSecurity":{"message":"Script Blocked by Content Security Policy"},"core/sdk/DOMDebuggerModel.ts | scriptBlockedDueToContent":{"message":"Script blocked due to Content Security Policy directive: {PH1}"},"core/sdk/DOMDebuggerModel.ts | scriptFirstStatement":{"message":"Script First Statement"},"core/sdk/DOMDebuggerModel.ts | setInnerhtml":{"message":"Set innerHTML"},"core/sdk/DOMDebuggerModel.ts | setTimeoutOrIntervalFired":{"message":"{PH1} fired"},"core/sdk/DOMDebuggerModel.ts | sinkViolations":{"message":"Sink Violations"},"core/sdk/DOMDebuggerModel.ts | suspendAudiocontext":{"message":"Suspend AudioContext"},"core/sdk/DOMDebuggerModel.ts | timer":{"message":"Timer"},"core/sdk/DOMDebuggerModel.ts | touch":{"message":"Touch"},"core/sdk/DOMDebuggerModel.ts | trustedTypeViolations":{"message":"Trusted Type Violations"},"core/sdk/DOMDebuggerModel.ts | webaudio":{"message":"WebAudio"},"core/sdk/DOMDebuggerModel.ts | webglErrorFired":{"message":"WebGL Error Fired"},"core/sdk/DOMDebuggerModel.ts | webglErrorFiredS":{"message":"WebGL Error Fired ({PH1})"},"core/sdk/DOMDebuggerModel.ts | webglWarningFired":{"message":"WebGL Warning Fired"},"core/sdk/DOMDebuggerModel.ts | window":{"message":"Window"},"core/sdk/DOMDebuggerModel.ts | worker":{"message":"Worker"},"core/sdk/DOMDebuggerModel.ts | xhr":{"message":"XHR"},"core/sdk/EventBreakpointsModel.ts | auctionWorklet":{"message":"Ad Auction Worklet"},"core/sdk/EventBreakpointsModel.ts | beforeBidderWorkletBiddingStart":{"message":"Bidder Bidding Phase Start"},"core/sdk/EventBreakpointsModel.ts | beforeBidderWorkletReportingStart":{"message":"Bidder Reporting Phase Start"},"core/sdk/EventBreakpointsModel.ts | beforeSellerWorkletReportingStart":{"message":"Seller Reporting Phase Start"},"core/sdk/EventBreakpointsModel.ts | beforeSellerWorkletScoringStart":{"message":"Seller Scoring Phase Start"},"core/sdk/NetworkManager.ts | crossoriginReadBlockingCorb":{"message":"Cross-Origin Read Blocking (CORB) blocked cross-origin response {PH1} with MIME type {PH2}. See https://www.chromestatus.com/feature/5629709824032768 for more details."},"core/sdk/NetworkManager.ts | fastG":{"message":"Fast 3G"},"core/sdk/NetworkManager.ts | noContentForPreflight":{"message":"No content available for preflight request"},"core/sdk/NetworkManager.ts | noContentForRedirect":{"message":"No content available because this request was redirected"},"core/sdk/NetworkManager.ts | noContentForWebSocket":{"message":"Content for WebSockets is currently not supported"},"core/sdk/NetworkManager.ts | noThrottling":{"message":"No throttling"},"core/sdk/NetworkManager.ts | offline":{"message":"Offline"},"core/sdk/NetworkManager.ts | requestWasBlockedByDevtoolsS":{"message":"Request was blocked by DevTools: \"{PH1}\""},"core/sdk/NetworkManager.ts | sFailedLoadingSS":{"message":"{PH1} failed loading: {PH2} \"{PH3}\"."},"core/sdk/NetworkManager.ts | sFinishedLoadingSS":{"message":"{PH1} finished loading: {PH2} \"{PH3}\"."},"core/sdk/NetworkManager.ts | slowG":{"message":"Slow 3G"},"core/sdk/NetworkRequest.ts | anUnknownErrorWasEncounteredWhenTrying":{"message":"An unknown error was encountered when trying to store this cookie."},"core/sdk/NetworkRequest.ts | binary":{"message":"(binary)"},"core/sdk/NetworkRequest.ts | blockedReasonInvalidDomain":{"message":"This attempt to set a cookie via a Set-Cookie header was blocked because its Domain attribute was invalid with regards to the current host url."},"core/sdk/NetworkRequest.ts | blockedReasonInvalidPrefix":{"message":"This attempt to set a cookie via a Set-Cookie header was blocked because it used the \"__Secure-\" or \"__Host-\" prefix in its name and broke the additional rules applied to cookies with these prefixes as defined in https://tools.ietf.org/html/draft-west-cookie-prefixes-05."},"core/sdk/NetworkRequest.ts | blockedReasonOverwriteSecure":{"message":"This attempt to set a cookie via a Set-Cookie header was blocked because it was not sent over a secure connection and would have overwritten a cookie with the Secure attribute."},"core/sdk/NetworkRequest.ts | blockedReasonSameSiteNoneInsecure":{"message":"This attempt to set a cookie via a Set-Cookie header was blocked because it had the \"SameSite=None\" attribute but did not have the \"Secure\" attribute, which is required in order to use \"SameSite=None\"."},"core/sdk/NetworkRequest.ts | blockedReasonSameSiteStrictLax":{"message":"This attempt to set a cookie via a Set-Cookie header was blocked because it had the \"{PH1}\" attribute but came from a cross-site response which was not the response to a top-level navigation."},"core/sdk/NetworkRequest.ts | blockedReasonSameSiteUnspecifiedTreatedAsLax":{"message":"This Set-Cookie header didn't specify a \"SameSite\" attribute and was defaulted to \"SameSite=Lax,\" and was blocked because it came from a cross-site response which was not the response to a top-level navigation. The Set-Cookie had to have been set with \"SameSite=None\" to enable cross-site usage."},"core/sdk/NetworkRequest.ts | blockedReasonSecureOnly":{"message":"This attempt to set a cookie via a Set-Cookie header was blocked because it had the \"Secure\" attribute but was not received over a secure connection."},"core/sdk/NetworkRequest.ts | domainMismatch":{"message":"This cookie was blocked because neither did the request URL's domain exactly match the cookie's domain, nor was the request URL's domain a subdomain of the cookie's Domain attribute value."},"core/sdk/NetworkRequest.ts | nameValuePairExceedsMaxSize":{"message":"This cookie was blocked because it was too large. The combined size of the name and value must be less than or equal to 4096 characters."},"core/sdk/NetworkRequest.ts | notOnPath":{"message":"This cookie was blocked because its path was not an exact match for or a superdirectory of the request url's path."},"core/sdk/NetworkRequest.ts | samePartyFromCrossPartyContext":{"message":"This cookie was blocked because it had the \"SameParty\" attribute but the request was cross-party. The request was considered cross-party because the domain of the resource's URL and the domains of the resource's enclosing frames/documents are neither owners nor members in the same First-Party Set."},"core/sdk/NetworkRequest.ts | sameSiteLax":{"message":"This cookie was blocked because it had the \"SameSite=Lax\" attribute and the request was made from a different site and was not initiated by a top-level navigation."},"core/sdk/NetworkRequest.ts | sameSiteNoneInsecure":{"message":"This cookie was blocked because it had the \"SameSite=None\" attribute but was not marked \"Secure\". Cookies without SameSite restrictions must be marked \"Secure\" and sent over a secure connection."},"core/sdk/NetworkRequest.ts | sameSiteStrict":{"message":"This cookie was blocked because it had the \"SameSite=Strict\" attribute and the request was made from a different site. This includes top-level navigation requests initiated by other sites."},"core/sdk/NetworkRequest.ts | sameSiteUnspecifiedTreatedAsLax":{"message":"This cookie didn't specify a \"SameSite\" attribute when it was stored and was defaulted to \"SameSite=Lax,\" and was blocked because the request was made from a different site and was not initiated by a top-level navigation. The cookie had to have been set with \"SameSite=None\" to enable cross-site usage."},"core/sdk/NetworkRequest.ts | schemefulSameSiteLax":{"message":"This cookie was blocked because it had the \"SameSite=Lax\" attribute but the request was cross-site and was not initiated by a top-level navigation. This request is considered cross-site because the URL has a different scheme than the current site."},"core/sdk/NetworkRequest.ts | schemefulSameSiteStrict":{"message":"This cookie was blocked because it had the \"SameSite=Strict\" attribute but the request was cross-site. This includes top-level navigation requests initiated by other sites. This request is considered cross-site because the URL has a different scheme than the current site."},"core/sdk/NetworkRequest.ts | schemefulSameSiteUnspecifiedTreatedAsLax":{"message":"This cookie didn't specify a \"SameSite\" attribute when it was stored, was defaulted to \"SameSite=Lax\", and was blocked because the request was cross-site and was not initiated by a top-level navigation. This request is considered cross-site because the URL has a different scheme than the current site."},"core/sdk/NetworkRequest.ts | secureOnly":{"message":"This cookie was blocked because it had the \"Secure\" attribute and the connection was not secure."},"core/sdk/NetworkRequest.ts | setcookieHeaderIsIgnoredIn":{"message":"Set-Cookie header is ignored in response from url: {PH1}. The combined size of the name and value must be less than or equal to 4096 characters."},"core/sdk/NetworkRequest.ts | theSchemeOfThisConnectionIsNot":{"message":"The scheme of this connection is not allowed to store cookies."},"core/sdk/NetworkRequest.ts | thisSetcookieDidntSpecifyASamesite":{"message":"This Set-Cookie header didn't specify a \"SameSite\" attribute, was defaulted to \"SameSite=Lax\", and was blocked because it came from a cross-site response which was not the response to a top-level navigation. This response is considered cross-site because the URL has a different scheme than the current site."},"core/sdk/NetworkRequest.ts | thisSetcookieHadInvalidSyntax":{"message":"This Set-Cookie header had invalid syntax."},"core/sdk/NetworkRequest.ts | thisSetcookieWasBlockedBecauseItHadTheSameparty":{"message":"This attempt to set a cookie via a Set-Cookie header was blocked because it had the \"SameParty\" attribute but the request was cross-party. The request was considered cross-party because the domain of the resource's URL and the domains of the resource's enclosing frames/documents are neither owners nor members in the same First-Party Set."},"core/sdk/NetworkRequest.ts | thisSetcookieWasBlockedBecauseItHadTheSamepartyAttribute":{"message":"This attempt to set a cookie via a Set-Cookie header was blocked because it had the \"SameParty\" attribute but also had other conflicting attributes. Chrome requires cookies that use the \"SameParty\" attribute to also have the \"Secure\" attribute, and to not be restricted to \"SameSite=Strict\"."},"core/sdk/NetworkRequest.ts | thisSetcookieWasBlockedBecauseItHadTheSamesiteStrictLax":{"message":"This attempt to set a cookie via a Set-Cookie header was blocked because it had the \"{PH1}\" attribute but came from a cross-site response which was not the response to a top-level navigation. This response is considered cross-site because the URL has a different scheme than the current site."},"core/sdk/NetworkRequest.ts | thisSetcookieWasBlockedBecauseTheNameValuePairExceedsMaxSize":{"message":"This attempt to set a cookie via a Set-Cookie header was blocked because the cookie was too large. The combined size of the name and value must be less than or equal to 4096 characters."},"core/sdk/NetworkRequest.ts | thisSetcookieWasBlockedDueToUser":{"message":"This attempt to set a cookie via a Set-Cookie header was blocked due to user preferences."},"core/sdk/NetworkRequest.ts | unknownError":{"message":"An unknown error was encountered when trying to send this cookie."},"core/sdk/NetworkRequest.ts | userPreferences":{"message":"This cookie was blocked due to user preferences."},"core/sdk/OverlayModel.ts | pausedInDebugger":{"message":"Paused in debugger"},"core/sdk/PageResourceLoader.ts | loadCanceledDueToReloadOf":{"message":"Load canceled due to reload of inspected page"},"core/sdk/Script.ts | scriptRemovedOrDeleted":{"message":"Script removed or deleted."},"core/sdk/Script.ts | unableToFetchScriptSource":{"message":"Unable to fetch script source."},"core/sdk/sdk-meta.ts | achromatopsia":{"message":"Achromatopsia (no color)"},"core/sdk/sdk-meta.ts | blurredVision":{"message":"Blurred vision"},"core/sdk/sdk-meta.ts | captureAsyncStackTraces":{"message":"Capture async stack traces"},"core/sdk/sdk-meta.ts | deuteranopia":{"message":"Deuteranopia (no green)"},"core/sdk/sdk-meta.ts | disableAsyncStackTraces":{"message":"Disable async stack traces"},"core/sdk/sdk-meta.ts | disableAvifFormat":{"message":"Disable AVIF format"},"core/sdk/sdk-meta.ts | disableCache":{"message":"Disable cache (while DevTools is open)"},"core/sdk/sdk-meta.ts | disableJavascript":{"message":"Disable JavaScript"},"core/sdk/sdk-meta.ts | disableLocalFonts":{"message":"Disable local fonts"},"core/sdk/sdk-meta.ts | disableNetworkRequestBlocking":{"message":"Disable network request blocking"},"core/sdk/sdk-meta.ts | disableWebpFormat":{"message":"Disable WebP format"},"core/sdk/sdk-meta.ts | doNotCaptureAsyncStackTraces":{"message":"Do not capture async stack traces"},"core/sdk/sdk-meta.ts | doNotEmulateAFocusedPage":{"message":"Do not emulate a focused page"},"core/sdk/sdk-meta.ts | doNotEmulateAnyVisionDeficiency":{"message":"Do not emulate any vision deficiency"},"core/sdk/sdk-meta.ts | doNotEmulateCss":{"message":"Do not emulate CSS {PH1}"},"core/sdk/sdk-meta.ts | doNotEmulateCssMediaType":{"message":"Do not emulate CSS media type"},"core/sdk/sdk-meta.ts | doNotExtendGridLines":{"message":"Do not extend grid lines"},"core/sdk/sdk-meta.ts | doNotHighlightAdFrames":{"message":"Do not highlight ad frames"},"core/sdk/sdk-meta.ts | doNotPauseOnExceptions":{"message":"Do not pause on exceptions"},"core/sdk/sdk-meta.ts | doNotPreserveLogUponNavigation":{"message":"Do not preserve log upon navigation"},"core/sdk/sdk-meta.ts | doNotShowGridNamedAreas":{"message":"Do not show grid named areas"},"core/sdk/sdk-meta.ts | doNotShowGridTrackSizes":{"message":"Do not show grid track sizes"},"core/sdk/sdk-meta.ts | doNotShowRulersOnHover":{"message":"Do not show rulers on hover"},"core/sdk/sdk-meta.ts | emulateAchromatopsia":{"message":"Emulate achromatopsia (no color)"},"core/sdk/sdk-meta.ts | emulateAFocusedPage":{"message":"Emulate a focused page"},"core/sdk/sdk-meta.ts | emulateAutoDarkMode":{"message":"Emulate auto dark mode"},"core/sdk/sdk-meta.ts | emulateBlurredVision":{"message":"Emulate blurred vision"},"core/sdk/sdk-meta.ts | emulateCss":{"message":"Emulate CSS {PH1}"},"core/sdk/sdk-meta.ts | emulateCssMediaFeature":{"message":"Emulate CSS media feature {PH1}"},"core/sdk/sdk-meta.ts | emulateCssMediaType":{"message":"Emulate CSS media type"},"core/sdk/sdk-meta.ts | emulateCssPrintMediaType":{"message":"Emulate CSS print media type"},"core/sdk/sdk-meta.ts | emulateCssScreenMediaType":{"message":"Emulate CSS screen media type"},"core/sdk/sdk-meta.ts | emulateDeuteranopia":{"message":"Emulate deuteranopia (no green)"},"core/sdk/sdk-meta.ts | emulateProtanopia":{"message":"Emulate protanopia (no red)"},"core/sdk/sdk-meta.ts | emulateReducedContrast":{"message":"Emulate reduced contrast"},"core/sdk/sdk-meta.ts | emulateTritanopia":{"message":"Emulate tritanopia (no blue)"},"core/sdk/sdk-meta.ts | emulateVisionDeficiencies":{"message":"Emulate vision deficiencies"},"core/sdk/sdk-meta.ts | enableAvifFormat":{"message":"Enable AVIF format"},"core/sdk/sdk-meta.ts | enableCache":{"message":"Enable cache"},"core/sdk/sdk-meta.ts | enableCustomFormatters":{"message":"Enable custom formatters"},"core/sdk/sdk-meta.ts | enableJavascript":{"message":"Enable JavaScript"},"core/sdk/sdk-meta.ts | enableLocalFonts":{"message":"Enable local fonts"},"core/sdk/sdk-meta.ts | enableNetworkRequestBlocking":{"message":"Enable network request blocking"},"core/sdk/sdk-meta.ts | enableRemoteFileLoading":{"message":"Allow DevTools to load resources, such as source maps, from remote file paths. Disabled by default for security reasons."},"core/sdk/sdk-meta.ts | enableWebpFormat":{"message":"Enable WebP format"},"core/sdk/sdk-meta.ts | extendGridLines":{"message":"Extend grid lines"},"core/sdk/sdk-meta.ts | hideCoreWebVitalsOverlay":{"message":"Hide Core Web Vitals overlay"},"core/sdk/sdk-meta.ts | hideFramesPerSecondFpsMeter":{"message":"Hide frames per second (FPS) meter"},"core/sdk/sdk-meta.ts | hideLayerBorders":{"message":"Hide layer borders"},"core/sdk/sdk-meta.ts | hideLayoutShiftRegions":{"message":"Hide layout shift regions"},"core/sdk/sdk-meta.ts | hideLineLabels":{"message":"Hide line labels"},"core/sdk/sdk-meta.ts | hidePaintFlashingRectangles":{"message":"Hide paint flashing rectangles"},"core/sdk/sdk-meta.ts | hideScrollPerformanceBottlenecks":{"message":"Hide scroll performance bottlenecks"},"core/sdk/sdk-meta.ts | highlightAdFrames":{"message":"Highlight ad frames"},"core/sdk/sdk-meta.ts | noEmulation":{"message":"No emulation"},"core/sdk/sdk-meta.ts | pauseOnExceptions":{"message":"Pause on exceptions"},"core/sdk/sdk-meta.ts | preserveLogUponNavigation":{"message":"Preserve log upon navigation"},"core/sdk/sdk-meta.ts | print":{"message":"print"},"core/sdk/sdk-meta.ts | protanopia":{"message":"Protanopia (no red)"},"core/sdk/sdk-meta.ts | query":{"message":"query"},"core/sdk/sdk-meta.ts | reducedContrast":{"message":"Reduced contrast"},"core/sdk/sdk-meta.ts | screen":{"message":"screen"},"core/sdk/sdk-meta.ts | showAreaNames":{"message":"Show area names"},"core/sdk/sdk-meta.ts | showCoreWebVitalsOverlay":{"message":"Show Core Web Vitals overlay"},"core/sdk/sdk-meta.ts | showFramesPerSecondFpsMeter":{"message":"Show frames per second (FPS) meter"},"core/sdk/sdk-meta.ts | showGridNamedAreas":{"message":"Show grid named areas"},"core/sdk/sdk-meta.ts | showGridTrackSizes":{"message":"Show grid track sizes"},"core/sdk/sdk-meta.ts | showLayerBorders":{"message":"Show layer borders"},"core/sdk/sdk-meta.ts | showLayoutShiftRegions":{"message":"Show layout shift regions"},"core/sdk/sdk-meta.ts | showLineLabels":{"message":"Show line labels"},"core/sdk/sdk-meta.ts | showLineNames":{"message":"Show line names"},"core/sdk/sdk-meta.ts | showLineNumbers":{"message":"Show line numbers"},"core/sdk/sdk-meta.ts | showPaintFlashingRectangles":{"message":"Show paint flashing rectangles"},"core/sdk/sdk-meta.ts | showRulersOnHover":{"message":"Show rulers on hover"},"core/sdk/sdk-meta.ts | showScrollPerformanceBottlenecks":{"message":"Show scroll performance bottlenecks"},"core/sdk/sdk-meta.ts | showTrackSizes":{"message":"Show track sizes"},"core/sdk/sdk-meta.ts | tritanopia":{"message":"Tritanopia (no blue)"},"core/sdk/ServerTiming.ts | deprecatedSyntaxFoundPleaseUse":{"message":"Deprecated syntax found. Please use: ;dur=;desc="},"core/sdk/ServerTiming.ts | duplicateParameterSIgnored":{"message":"Duplicate parameter \"{PH1}\" ignored."},"core/sdk/ServerTiming.ts | extraneousTrailingCharacters":{"message":"Extraneous trailing characters."},"core/sdk/ServerTiming.ts | noValueFoundForParameterS":{"message":"No value found for parameter \"{PH1}\"."},"core/sdk/ServerTiming.ts | unableToParseSValueS":{"message":"Unable to parse \"{PH1}\" value \"{PH2}\"."},"core/sdk/ServerTiming.ts | unrecognizedParameterS":{"message":"Unrecognized parameter \"{PH1}\"."},"core/sdk/ServiceWorkerCacheModel.ts | serviceworkercacheagentError":{"message":"ServiceWorkerCacheAgent error deleting cache entry {PH1} in cache: {PH2}"},"core/sdk/ServiceWorkerManager.ts | activated":{"message":"activated"},"core/sdk/ServiceWorkerManager.ts | activating":{"message":"activating"},"core/sdk/ServiceWorkerManager.ts | installed":{"message":"installed"},"core/sdk/ServiceWorkerManager.ts | installing":{"message":"installing"},"core/sdk/ServiceWorkerManager.ts | new":{"message":"new"},"core/sdk/ServiceWorkerManager.ts | redundant":{"message":"redundant"},"core/sdk/ServiceWorkerManager.ts | running":{"message":"running"},"core/sdk/ServiceWorkerManager.ts | sSS":{"message":"{PH1} #{PH2} ({PH3})"},"core/sdk/ServiceWorkerManager.ts | starting":{"message":"starting"},"core/sdk/ServiceWorkerManager.ts | stopped":{"message":"stopped"},"core/sdk/ServiceWorkerManager.ts | stopping":{"message":"stopping"},"entrypoints/inspector_main/inspector_main-meta.ts | autoOpenDevTools":{"message":"Auto-open DevTools for popups"},"entrypoints/inspector_main/inspector_main-meta.ts | blockAds":{"message":"Block ads on this site"},"entrypoints/inspector_main/inspector_main-meta.ts | colorVisionDeficiency":{"message":"color vision deficiency"},"entrypoints/inspector_main/inspector_main-meta.ts | cssMediaFeature":{"message":"CSS media feature"},"entrypoints/inspector_main/inspector_main-meta.ts | cssMediaType":{"message":"CSS media type"},"entrypoints/inspector_main/inspector_main-meta.ts | disablePaused":{"message":"Disable paused state overlay"},"entrypoints/inspector_main/inspector_main-meta.ts | doNotAutoOpen":{"message":"Do not auto-open DevTools for popups"},"entrypoints/inspector_main/inspector_main-meta.ts | forceAdBlocking":{"message":"Force ad blocking on this site"},"entrypoints/inspector_main/inspector_main-meta.ts | fps":{"message":"fps"},"entrypoints/inspector_main/inspector_main-meta.ts | hardReloadPage":{"message":"Hard reload page"},"entrypoints/inspector_main/inspector_main-meta.ts | layout":{"message":"layout"},"entrypoints/inspector_main/inspector_main-meta.ts | paint":{"message":"paint"},"entrypoints/inspector_main/inspector_main-meta.ts | reloadPage":{"message":"Reload page"},"entrypoints/inspector_main/inspector_main-meta.ts | rendering":{"message":"Rendering"},"entrypoints/inspector_main/inspector_main-meta.ts | showAds":{"message":"Show ads on this site, if allowed"},"entrypoints/inspector_main/inspector_main-meta.ts | showRendering":{"message":"Show Rendering"},"entrypoints/inspector_main/inspector_main-meta.ts | toggleCssPrefersColorSchemeMedia":{"message":"Toggle CSS media feature prefers-color-scheme"},"entrypoints/inspector_main/inspector_main-meta.ts | visionDeficiency":{"message":"vision deficiency"},"entrypoints/inspector_main/InspectorMain.ts | javascriptIsDisabled":{"message":"JavaScript is disabled"},"entrypoints/inspector_main/InspectorMain.ts | main":{"message":"Main"},"entrypoints/inspector_main/InspectorMain.ts | openDedicatedTools":{"message":"Open dedicated DevTools for Node.js"},"entrypoints/inspector_main/InspectorMain.ts | tab":{"message":"Tab"},"entrypoints/inspector_main/OutermostTargetSelector.ts | targetNotSelected":{"message":"Page: Not selected"},"entrypoints/inspector_main/OutermostTargetSelector.ts | targetS":{"message":"Page: {PH1}"},"entrypoints/inspector_main/RenderingOptions.ts | coreWebVitals":{"message":"Core Web Vitals"},"entrypoints/inspector_main/RenderingOptions.ts | disableAvifImageFormat":{"message":"Disable AVIF image format"},"entrypoints/inspector_main/RenderingOptions.ts | disableLocalFonts":{"message":"Disable local fonts"},"entrypoints/inspector_main/RenderingOptions.ts | disablesLocalSourcesInFontface":{"message":"Disables local() sources in @font-face rules. Requires a page reload to apply."},"entrypoints/inspector_main/RenderingOptions.ts | disableWebpImageFormat":{"message":"Disable WebP image format"},"entrypoints/inspector_main/RenderingOptions.ts | emulateAFocusedPage":{"message":"Emulate a focused page"},"entrypoints/inspector_main/RenderingOptions.ts | emulateAutoDarkMode":{"message":"Enable automatic dark mode"},"entrypoints/inspector_main/RenderingOptions.ts | emulatesAFocusedPage":{"message":"Emulates a focused page."},"entrypoints/inspector_main/RenderingOptions.ts | emulatesAutoDarkMode":{"message":"Enables automatic dark mode and sets prefers-color-scheme to dark."},"entrypoints/inspector_main/RenderingOptions.ts | forcesCssColorgamutMediaFeature":{"message":"Forces CSS color-gamut media feature"},"entrypoints/inspector_main/RenderingOptions.ts | forcesCssForcedColors":{"message":"Forces CSS forced-colors media feature"},"entrypoints/inspector_main/RenderingOptions.ts | forcesCssPreferscolorschemeMedia":{"message":"Forces CSS prefers-color-scheme media feature"},"entrypoints/inspector_main/RenderingOptions.ts | forcesCssPreferscontrastMedia":{"message":"Forces CSS prefers-contrast media feature"},"entrypoints/inspector_main/RenderingOptions.ts | forcesCssPrefersreduceddataMedia":{"message":"Forces CSS prefers-reduced-data media feature"},"entrypoints/inspector_main/RenderingOptions.ts | forcesCssPrefersreducedmotion":{"message":"Forces CSS prefers-reduced-motion media feature"},"entrypoints/inspector_main/RenderingOptions.ts | forcesMediaTypeForTestingPrint":{"message":"Forces media type for testing print and screen styles"},"entrypoints/inspector_main/RenderingOptions.ts | forcesVisionDeficiencyEmulation":{"message":"Forces vision deficiency emulation"},"entrypoints/inspector_main/RenderingOptions.ts | frameRenderingStats":{"message":"Frame Rendering Stats"},"entrypoints/inspector_main/RenderingOptions.ts | highlightAdFrames":{"message":"Highlight ad frames"},"entrypoints/inspector_main/RenderingOptions.ts | highlightsAreasOfThePageBlueThat":{"message":"Highlights areas of the page (blue) that were shifted. May not be suitable for people prone to photosensitive epilepsy."},"entrypoints/inspector_main/RenderingOptions.ts | highlightsAreasOfThePageGreen":{"message":"Highlights areas of the page (green) that need to be repainted. May not be suitable for people prone to photosensitive epilepsy."},"entrypoints/inspector_main/RenderingOptions.ts | highlightsElementsTealThatCan":{"message":"Highlights elements (teal) that can slow down scrolling, including touch & wheel event handlers and other main-thread scrolling situations."},"entrypoints/inspector_main/RenderingOptions.ts | highlightsFramesRedDetectedToBe":{"message":"Highlights frames (red) detected to be ads."},"entrypoints/inspector_main/RenderingOptions.ts | layerBorders":{"message":"Layer borders"},"entrypoints/inspector_main/RenderingOptions.ts | layoutShiftRegions":{"message":"Layout Shift Regions"},"entrypoints/inspector_main/RenderingOptions.ts | paintFlashing":{"message":"Paint flashing"},"entrypoints/inspector_main/RenderingOptions.ts | plotsFrameThroughputDropped":{"message":"Plots frame throughput, dropped frames distribution, and GPU memory."},"entrypoints/inspector_main/RenderingOptions.ts | requiresAPageReloadToApplyAnd":{"message":"Requires a page reload to apply and disables caching for image requests."},"entrypoints/inspector_main/RenderingOptions.ts | scrollingPerformanceIssues":{"message":"Scrolling performance issues"},"entrypoints/inspector_main/RenderingOptions.ts | showsAnOverlayWithCoreWebVitals":{"message":"Shows an overlay with Core Web Vitals."},"entrypoints/inspector_main/RenderingOptions.ts | showsLayerBordersOrangeoliveAnd":{"message":"Shows layer borders (orange/olive) and tiles (cyan)."},"entrypoints/js_app/js_app.ts | main":{"message":"Main"},"entrypoints/main/main-meta.ts | asAuthored":{"message":"As authored"},"entrypoints/main/main-meta.ts | auto":{"message":"auto"},"entrypoints/main/main-meta.ts | bottom":{"message":"Bottom"},"entrypoints/main/main-meta.ts | browserLanguage":{"message":"Browser UI language"},"entrypoints/main/main-meta.ts | cancelSearch":{"message":"Cancel search"},"entrypoints/main/main-meta.ts | colorFormat":{"message":"Color format:"},"entrypoints/main/main-meta.ts | colorFormatSettingDisabled":{"message":"This setting is deprecated because it is incompatible with modern color spaces. To re-enable it, disable the corresponding experiment."},"entrypoints/main/main-meta.ts | darkCapital":{"message":"Dark"},"entrypoints/main/main-meta.ts | darkLower":{"message":"dark"},"entrypoints/main/main-meta.ts | devtoolsDefault":{"message":"DevTools (Default)"},"entrypoints/main/main-meta.ts | dockToBottom":{"message":"Dock to bottom"},"entrypoints/main/main-meta.ts | dockToLeft":{"message":"Dock to left"},"entrypoints/main/main-meta.ts | dockToRight":{"message":"Dock to right"},"entrypoints/main/main-meta.ts | enableCtrlShortcutToSwitchPanels":{"message":"Enable Ctrl + 1-9 shortcut to switch panels"},"entrypoints/main/main-meta.ts | enableShortcutToSwitchPanels":{"message":"Enable ⌘ + 1-9 shortcut to switch panels"},"entrypoints/main/main-meta.ts | enableSync":{"message":"Enable settings sync"},"entrypoints/main/main-meta.ts | findNextResult":{"message":"Find next result"},"entrypoints/main/main-meta.ts | findPreviousResult":{"message":"Find previous result"},"entrypoints/main/main-meta.ts | focusDebuggee":{"message":"Focus debuggee"},"entrypoints/main/main-meta.ts | horizontal":{"message":"horizontal"},"entrypoints/main/main-meta.ts | language":{"message":"Language:"},"entrypoints/main/main-meta.ts | left":{"message":"Left"},"entrypoints/main/main-meta.ts | lightCapital":{"message":"Light"},"entrypoints/main/main-meta.ts | lightLower":{"message":"light"},"entrypoints/main/main-meta.ts | nextPanel":{"message":"Next panel"},"entrypoints/main/main-meta.ts | panelLayout":{"message":"Panel layout:"},"entrypoints/main/main-meta.ts | previousPanel":{"message":"Previous panel"},"entrypoints/main/main-meta.ts | reloadDevtools":{"message":"Reload DevTools"},"entrypoints/main/main-meta.ts | resetZoomLevel":{"message":"Reset zoom level"},"entrypoints/main/main-meta.ts | restoreLastDockPosition":{"message":"Restore last dock position"},"entrypoints/main/main-meta.ts | right":{"message":"Right"},"entrypoints/main/main-meta.ts | searchAsYouTypeCommand":{"message":"Enable search as you type"},"entrypoints/main/main-meta.ts | searchAsYouTypeSetting":{"message":"Search as you type"},"entrypoints/main/main-meta.ts | searchInPanel":{"message":"Search in panel"},"entrypoints/main/main-meta.ts | searchOnEnterCommand":{"message":"Disable search as you type (press Enter to search)"},"entrypoints/main/main-meta.ts | setColorFormatAsAuthored":{"message":"Set color format as authored"},"entrypoints/main/main-meta.ts | setColorFormatToHex":{"message":"Set color format to HEX"},"entrypoints/main/main-meta.ts | setColorFormatToHsl":{"message":"Set color format to HSL"},"entrypoints/main/main-meta.ts | setColorFormatToRgb":{"message":"Set color format to RGB"},"entrypoints/main/main-meta.ts | switchToDarkTheme":{"message":"Switch to dark theme"},"entrypoints/main/main-meta.ts | switchToLightTheme":{"message":"Switch to light theme"},"entrypoints/main/main-meta.ts | switchToSystemPreferredColor":{"message":"Switch to system preferred color theme"},"entrypoints/main/main-meta.ts | systemPreference":{"message":"System preference"},"entrypoints/main/main-meta.ts | theme":{"message":"Theme:"},"entrypoints/main/main-meta.ts | toggleDrawer":{"message":"Toggle drawer"},"entrypoints/main/main-meta.ts | undocked":{"message":"Undocked"},"entrypoints/main/main-meta.ts | undockIntoSeparateWindow":{"message":"Undock into separate window"},"entrypoints/main/main-meta.ts | useAutomaticPanelLayout":{"message":"Use automatic panel layout"},"entrypoints/main/main-meta.ts | useHorizontalPanelLayout":{"message":"Use horizontal panel layout"},"entrypoints/main/main-meta.ts | useVerticalPanelLayout":{"message":"Use vertical panel layout"},"entrypoints/main/main-meta.ts | vertical":{"message":"vertical"},"entrypoints/main/main-meta.ts | zoomIn":{"message":"Zoom in"},"entrypoints/main/main-meta.ts | zoomOut":{"message":"Zoom out"},"entrypoints/main/MainImpl.ts | customizeAndControlDevtools":{"message":"Customize and control DevTools"},"entrypoints/main/MainImpl.ts | dockSide":{"message":"Dock side"},"entrypoints/main/MainImpl.ts | dockSideNaviation":{"message":"Use left and right arrow keys to navigate the options"},"entrypoints/main/MainImpl.ts | dockToBottom":{"message":"Dock to bottom"},"entrypoints/main/MainImpl.ts | dockToLeft":{"message":"Dock to left"},"entrypoints/main/MainImpl.ts | dockToRight":{"message":"Dock to right"},"entrypoints/main/MainImpl.ts | focusDebuggee":{"message":"Focus debuggee"},"entrypoints/main/MainImpl.ts | help":{"message":"Help"},"entrypoints/main/MainImpl.ts | hideConsoleDrawer":{"message":"Hide console drawer"},"entrypoints/main/MainImpl.ts | moreTools":{"message":"More tools"},"entrypoints/main/MainImpl.ts | placementOfDevtoolsRelativeToThe":{"message":"Placement of DevTools relative to the page. ({PH1} to restore last position)"},"entrypoints/main/MainImpl.ts | showConsoleDrawer":{"message":"Show console drawer"},"entrypoints/main/MainImpl.ts | undockIntoSeparateWindow":{"message":"Undock into separate window"},"entrypoints/node_app/node_app.ts | connection":{"message":"Connection"},"entrypoints/node_app/node_app.ts | networkTitle":{"message":"Node"},"entrypoints/node_app/node_app.ts | node":{"message":"node"},"entrypoints/node_app/node_app.ts | showConnection":{"message":"Show Connection"},"entrypoints/node_app/node_app.ts | showNode":{"message":"Show Node"},"entrypoints/node_app/NodeConnectionsPanel.ts | addConnection":{"message":"Add connection"},"entrypoints/node_app/NodeConnectionsPanel.ts | networkAddressEgLocalhost":{"message":"Network address (e.g. localhost:9229)"},"entrypoints/node_app/NodeConnectionsPanel.ts | noConnectionsSpecified":{"message":"No connections specified"},"entrypoints/node_app/NodeConnectionsPanel.ts | nodejsDebuggingGuide":{"message":"Node.js debugging guide"},"entrypoints/node_app/NodeConnectionsPanel.ts | specifyNetworkEndpointAnd":{"message":"Specify network endpoint and DevTools will connect to it automatically. Read {PH1} to learn more."},"entrypoints/node_app/NodeMain.ts | main":{"message":"Main"},"entrypoints/node_app/NodeMain.ts | nodejsS":{"message":"Node.js: {PH1}"},"entrypoints/worker_app/WorkerMain.ts | main":{"message":"Main"},"generated/Deprecation.ts | AuthorizationCoveredByWildcard":{"message":"Authorization will not be covered by the wildcard symbol (*) in CORS Access-Control-Allow-Headers handling."},"generated/Deprecation.ts | 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."},"generated/Deprecation.ts | ChromeLoadTimesConnectionInfo":{"message":"chrome.loadTimes() is deprecated, instead use standardized API: Navigation Timing 2."},"generated/Deprecation.ts | ChromeLoadTimesFirstPaintAfterLoadTime":{"message":"chrome.loadTimes() is deprecated, instead use standardized API: Paint Timing."},"generated/Deprecation.ts | ChromeLoadTimesWasAlternateProtocolAvailable":{"message":"chrome.loadTimes() is deprecated, instead use standardized API: nextHopProtocol in Navigation Timing 2."},"generated/Deprecation.ts | CookieWithTruncatingChar":{"message":"Cookies containing a \\(0|r|n) character will be rejected instead of truncated."},"generated/Deprecation.ts | 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."},"generated/Deprecation.ts | CrossOriginWindowAlert":{"message":"Triggering window.alert from cross origin iframes has been deprecated and will be removed in the future."},"generated/Deprecation.ts | CrossOriginWindowConfirm":{"message":"Triggering window.confirm from cross origin iframes has been deprecated and will be removed in the future."},"generated/Deprecation.ts | 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."},"generated/Deprecation.ts | DataUrlInSvgUse":{"message":"Support for data: URLs in SVGUseElement is deprecated and it will be removed in the future."},"generated/Deprecation.ts | 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."},"generated/Deprecation.ts | DOMMutationEvents":{"message":"DOM Mutation Events, including DOMSubtreeModified, DOMNodeInserted, DOMNodeRemoved, DOMNodeRemovedFromDocument, DOMNodeInsertedIntoDocument, and DOMCharacterDataModified are deprecated (https://w3c.github.io/uievents/#legacy-event-types) and will be removed. Please use MutationObserver instead."},"generated/Deprecation.ts | ExpectCTHeader":{"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."},"generated/Deprecation.ts | 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."},"generated/Deprecation.ts | 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."},"generated/Deprecation.ts | 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."},"generated/Deprecation.ts | HostCandidateAttributeGetter":{"message":"RTCPeerConnectionIceErrorEvent.hostCandidate is deprecated. Please use RTCPeerConnectionIceErrorEvent.address or RTCPeerConnectionIceErrorEvent.port instead."},"generated/Deprecation.ts | IdentityInCanMakePaymentEvent":{"message":"The merchant origin and arbitrary data from the canmakepayment service worker event are deprecated and will be removed: topOrigin, paymentRequestOrigin, methodData, modifiers."},"generated/Deprecation.ts | 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."},"generated/Deprecation.ts | InterestGroupDailyUpdateUrl":{"message":"The dailyUpdateUrl field of InterestGroups passed to joinAdInterestGroup() has been renamed to updateUrl, to more accurately reflect its behavior."},"generated/Deprecation.ts | LocalCSSFileExtensionRejected":{"message":"CSS cannot be loaded from file: URLs unless they end in a .css file extension."},"generated/Deprecation.ts | 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."},"generated/Deprecation.ts | 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."},"generated/Deprecation.ts | NonStandardDeclarativeShadowDOM":{"message":"The older, non-standardized shadowroot attribute is deprecated, and will *no longer function* in M119. Please use the new, standardized shadowrootmode attribute instead."},"generated/Deprecation.ts | NoSysexWebMIDIWithoutPermission":{"message":"Web MIDI will ask a permission to use even if the sysex is not specified in the MIDIOptions."},"generated/Deprecation.ts | 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."},"generated/Deprecation.ts | 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."},"generated/Deprecation.ts | ObsoleteCreateImageBitmapImageOrientationNone":{"message":"Option imageOrientation: 'none' in createImageBitmap is deprecated. Please use createImageBitmap with option {imageOrientation: 'from-image'} instead."},"generated/Deprecation.ts | ObsoleteWebRtcCipherSuite":{"message":"Your partner is negotiating an obsolete (D)TLS version. Please check with your partner to have this fixed."},"generated/Deprecation.ts | OverflowVisibleOnReplacedElement":{"message":"Specifying overflow: visible on img, video and canvas tags may cause them to produce visual content outside of the element bounds. See https://github.com/WICG/shared-element-transitions/blob/main/debugging_overflow_on_images.md."},"generated/Deprecation.ts | PaymentInstruments":{"message":"paymentManager.instruments is deprecated. Please use just-in-time install for payment handlers instead."},"generated/Deprecation.ts | PaymentRequestCSPViolation":{"message":"Your PaymentRequest call bypassed Content-Security-Policy (CSP) connect-src directive. This bypass is deprecated. Please add the payment method identifier from the PaymentRequest API (in supportedMethods field) to your CSP connect-src directive."},"generated/Deprecation.ts | PersistentQuotaType":{"message":"StorageType.persistent is deprecated. Please use standardized navigator.storage instead."},"generated/Deprecation.ts | PictureSourceSrc":{"message":" with a parent is invalid and therefore ignored. Please use instead."},"generated/Deprecation.ts | PrefixedCancelAnimationFrame":{"message":"webkitCancelAnimationFrame is vendor-specific. Please use the standard cancelAnimationFrame instead."},"generated/Deprecation.ts | PrefixedRequestAnimationFrame":{"message":"webkitRequestAnimationFrame is vendor-specific. Please use the standard requestAnimationFrame instead."},"generated/Deprecation.ts | PrefixedVideoDisplayingFullscreen":{"message":"HTMLVideoElement.webkitDisplayingFullscreen is deprecated. Please use Document.fullscreenElement instead."},"generated/Deprecation.ts | PrefixedVideoEnterFullscreen":{"message":"HTMLVideoElement.webkitEnterFullscreen() is deprecated. Please use Element.requestFullscreen() instead."},"generated/Deprecation.ts | PrefixedVideoEnterFullScreen":{"message":"HTMLVideoElement.webkitEnterFullScreen() is deprecated. Please use Element.requestFullscreen() instead."},"generated/Deprecation.ts | PrefixedVideoExitFullscreen":{"message":"HTMLVideoElement.webkitExitFullscreen() is deprecated. Please use Document.exitFullscreen() instead."},"generated/Deprecation.ts | PrefixedVideoExitFullScreen":{"message":"HTMLVideoElement.webkitExitFullScreen() is deprecated. Please use Document.exitFullscreen() instead."},"generated/Deprecation.ts | PrefixedVideoSupportsFullscreen":{"message":"HTMLVideoElement.webkitSupportsFullscreen is deprecated. Please use Document.fullscreenEnabled instead."},"generated/Deprecation.ts | PrivacySandboxExtensionsAPI":{"message":"We're deprecating the API chrome.privacy.websites.privacySandboxEnabled, though it will remain active for backward compatibility until release M113. Instead, please use chrome.privacy.websites.topicsEnabled, chrome.privacy.websites.fledgeEnabled and chrome.privacy.websites.adMeasurementEnabled. See https://developer.chrome.com/docs/extensions/reference/privacy/#property-websites-privacySandboxEnabled."},"generated/Deprecation.ts | RangeExpand":{"message":"Range.expand() is deprecated. Please use Selection.modify() instead."},"generated/Deprecation.ts | RequestedSubresourceWithEmbeddedCredentials":{"message":"Subresource requests whose URLs contain embedded credentials (e.g. https://user:pass@host/) are blocked."},"generated/Deprecation.ts | 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."},"generated/Deprecation.ts | 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."},"generated/Deprecation.ts | RTCPeerConnectionGetStatsLegacyNonCompliant":{"message":"The callback-based getStats() is deprecated and will be removed. Use the spec-compliant getStats() instead."},"generated/Deprecation.ts | RtcpMuxPolicyNegotiate":{"message":"The rtcpMuxPolicy option is deprecated and will be removed."},"generated/Deprecation.ts | SharedArrayBufferConstructedWithoutIsolation":{"message":"SharedArrayBuffer will require cross-origin isolation. See https://developer.chrome.com/blog/enabling-shared-array-buffer/ for more details."},"generated/Deprecation.ts | TextToSpeech_DisallowedByAutoplay":{"message":"speechSynthesis.speak() without user activation is deprecated and will be removed."},"generated/Deprecation.ts | V8SharedArrayBufferConstructedInExtensionWithoutIsolation":{"message":"Extensions should opt into cross-origin isolation to continue using SharedArrayBuffer. See https://developer.chrome.com/docs/extensions/mv3/cross-origin-isolation/."},"generated/Deprecation.ts | WebSQL":{"message":"Web SQL is deprecated. Please use SQLite WebAssembly or Indexed Database"},"generated/Deprecation.ts | WindowPlacementPermissionDescriptorUsed":{"message":"The permission descriptor window-placement is deprecated. Use window-management instead. For more help, check https://bit.ly/window-placement-rename."},"generated/Deprecation.ts | WindowPlacementPermissionPolicyParsed":{"message":"The permission policy window-placement is deprecated. Use window-management instead. For more help, check https://bit.ly/window-placement-rename."},"generated/Deprecation.ts | XHRJSONEncodingDetection":{"message":"UTF-16 is not supported by response json in XMLHttpRequest"},"generated/Deprecation.ts | 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/."},"generated/Deprecation.ts | XRSupportsSession":{"message":"supportsSession() is deprecated. Please use isSessionSupported() and check the resolved boolean value instead."},"models/bindings/ContentProviderBasedProject.ts | unknownErrorLoadingFile":{"message":"Unknown error loading file"},"models/bindings/DebuggerLanguagePlugins.ts | debugSymbolsIncomplete":{"message":"The debug information for function {PH1} is incomplete"},"models/bindings/DebuggerLanguagePlugins.ts | errorInDebuggerLanguagePlugin":{"message":"Error in debugger language plugin: {PH1}"},"models/bindings/DebuggerLanguagePlugins.ts | failedToLoadDebugSymbolsFor":{"message":"[{PH1}] Failed to load debug symbols for {PH2} ({PH3})"},"models/bindings/DebuggerLanguagePlugins.ts | failedToLoadDebugSymbolsForFunction":{"message":"No debug information for function \"{PH1}\""},"models/bindings/DebuggerLanguagePlugins.ts | loadedDebugSymbolsForButDidnt":{"message":"[{PH1}] Loaded debug symbols for {PH2}, but didn't find any source files"},"models/bindings/DebuggerLanguagePlugins.ts | loadedDebugSymbolsForFound":{"message":"[{PH1}] Loaded debug symbols for {PH2}, found {PH3} source file(s)"},"models/bindings/DebuggerLanguagePlugins.ts | loadingDebugSymbolsFor":{"message":"[{PH1}] Loading debug symbols for {PH2}..."},"models/bindings/DebuggerLanguagePlugins.ts | loadingDebugSymbolsForVia":{"message":"[{PH1}] Loading debug symbols for {PH2} (via {PH3})..."},"models/bindings/IgnoreListManager.ts | addAllContentScriptsToIgnoreList":{"message":"Add all extension scripts to ignore list"},"models/bindings/IgnoreListManager.ts | addAllThirdPartyScriptsToIgnoreList":{"message":"Add all third-party scripts to ignore list"},"models/bindings/IgnoreListManager.ts | addDirectoryToIgnoreList":{"message":"Add directory to ignore list"},"models/bindings/IgnoreListManager.ts | addScriptToIgnoreList":{"message":"Add script to ignore list"},"models/bindings/IgnoreListManager.ts | removeFromIgnoreList":{"message":"Remove from ignore list"},"models/bindings/ResourceScriptMapping.ts | liveEditCompileFailed":{"message":"LiveEdit compile failed: {PH1}"},"models/bindings/ResourceScriptMapping.ts | liveEditFailed":{"message":"LiveEdit failed: {PH1}"},"models/emulation/DeviceModeModel.ts | devicePixelRatioMustBeANumberOr":{"message":"Device pixel ratio must be a number or blank."},"models/emulation/DeviceModeModel.ts | devicePixelRatioMustBeGreater":{"message":"Device pixel ratio must be greater than or equal to {PH1}."},"models/emulation/DeviceModeModel.ts | devicePixelRatioMustBeLessThanOr":{"message":"Device pixel ratio must be less than or equal to {PH1}."},"models/emulation/DeviceModeModel.ts | heightMustBeANumber":{"message":"Height must be a number."},"models/emulation/DeviceModeModel.ts | heightMustBeGreaterThanOrEqualTo":{"message":"Height must be greater than or equal to {PH1}."},"models/emulation/DeviceModeModel.ts | heightMustBeLessThanOrEqualToS":{"message":"Height must be less than or equal to {PH1}."},"models/emulation/DeviceModeModel.ts | widthMustBeANumber":{"message":"Width must be a number."},"models/emulation/DeviceModeModel.ts | widthMustBeGreaterThanOrEqualToS":{"message":"Width must be greater than or equal to {PH1}."},"models/emulation/DeviceModeModel.ts | widthMustBeLessThanOrEqualToS":{"message":"Width must be less than or equal to {PH1}."},"models/emulation/EmulatedDevices.ts | laptopWithHiDPIScreen":{"message":"Laptop with HiDPI screen"},"models/emulation/EmulatedDevices.ts | laptopWithMDPIScreen":{"message":"Laptop with MDPI screen"},"models/emulation/EmulatedDevices.ts | laptopWithTouch":{"message":"Laptop with touch"},"models/har/Writer.ts | collectingContent":{"message":"Collecting content…"},"models/har/Writer.ts | writingFile":{"message":"Writing file…"},"models/issues_manager/BounceTrackingIssue.ts | bounceTrackingMitigations":{"message":"Bounce Tracking Mitigations"},"models/issues_manager/ClientHintIssue.ts | clientHintsInfrastructure":{"message":"Client Hints Infrastructure"},"models/issues_manager/ContentSecurityPolicyIssue.ts | contentSecurityPolicyEval":{"message":"Content Security Policy - Eval"},"models/issues_manager/ContentSecurityPolicyIssue.ts | contentSecurityPolicyInlineCode":{"message":"Content Security Policy - Inline Code"},"models/issues_manager/ContentSecurityPolicyIssue.ts | contentSecurityPolicySource":{"message":"Content Security Policy - Source Allowlists"},"models/issues_manager/ContentSecurityPolicyIssue.ts | trustedTypesFixViolations":{"message":"Trusted Types - Fix violations"},"models/issues_manager/ContentSecurityPolicyIssue.ts | trustedTypesPolicyViolation":{"message":"Trusted Types - Policy violation"},"models/issues_manager/CookieIssue.ts | anInsecure":{"message":"an insecure"},"models/issues_manager/CookieIssue.ts | aSecure":{"message":"a secure"},"models/issues_manager/CookieIssue.ts | firstPartySetsExplained":{"message":"First-Party Sets and the SameParty attribute"},"models/issues_manager/CookieIssue.ts | howSchemefulSamesiteWorks":{"message":"How Schemeful Same-Site Works"},"models/issues_manager/CookieIssue.ts | samesiteCookiesExplained":{"message":"SameSite cookies explained"},"models/issues_manager/CorsIssue.ts | CORS":{"message":"Cross-Origin Resource Sharing (CORS)"},"models/issues_manager/CorsIssue.ts | corsPrivateNetworkAccess":{"message":"Private Network Access"},"models/issues_manager/CrossOriginEmbedderPolicyIssue.ts | coopAndCoep":{"message":"COOP and COEP"},"models/issues_manager/CrossOriginEmbedderPolicyIssue.ts | samesiteAndSameorigin":{"message":"Same-Site and Same-Origin"},"models/issues_manager/DeprecationIssue.ts | feature":{"message":"Check the feature status page for more details."},"models/issues_manager/DeprecationIssue.ts | milestone":{"message":"This change will go into effect with milestone {milestone}."},"models/issues_manager/DeprecationIssue.ts | title":{"message":"Deprecated Feature Used"},"models/issues_manager/FederatedAuthRequestIssue.ts | fedCm":{"message":"Federated Credential Management API"},"models/issues_manager/FederatedAuthUserInfoRequestIssue.ts | fedCmUserInfo":{"message":"Federated Credential Management User Info API"},"models/issues_manager/GenericIssue.ts | autocompleteAttributePageTitle":{"message":"HTML attribute: autocomplete"},"models/issues_manager/GenericIssue.ts | crossOriginPortalPostMessage":{"message":"Portals - Same-origin communication channels"},"models/issues_manager/GenericIssue.ts | howDoesAutofillWorkPageTitle":{"message":"How does autofill work?"},"models/issues_manager/GenericIssue.ts | inputFormElementPageTitle":{"message":"The form input element"},"models/issues_manager/GenericIssue.ts | labelFormlementsPageTitle":{"message":"The label elements"},"models/issues_manager/HeavyAdIssue.ts | handlingHeavyAdInterventions":{"message":"Handling Heavy Ad Interventions"},"models/issues_manager/Issue.ts | breakingChangeIssue":{"message":"A breaking change issue: the page may stop working in an upcoming version of Chrome"},"models/issues_manager/Issue.ts | breakingChanges":{"message":"Breaking Changes"},"models/issues_manager/Issue.ts | improvementIssue":{"message":"An improvement issue: there is an opportunity to improve the page"},"models/issues_manager/Issue.ts | improvements":{"message":"Improvements"},"models/issues_manager/Issue.ts | pageErrorIssue":{"message":"A page error issue: the page is not working correctly"},"models/issues_manager/Issue.ts | pageErrors":{"message":"Page Errors"},"models/issues_manager/LowTextContrastIssue.ts | colorAndContrastAccessibility":{"message":"Color and contrast accessibility"},"models/issues_manager/MixedContentIssue.ts | preventingMixedContent":{"message":"Preventing mixed content"},"models/issues_manager/QuirksModeIssue.ts | documentCompatibilityMode":{"message":"Document compatibility mode"},"models/issues_manager/SharedArrayBufferIssue.ts | enablingSharedArrayBuffer":{"message":"Enabling SharedArrayBuffer"},"models/logs/logs-meta.ts | clear":{"message":"clear"},"models/logs/logs-meta.ts | doNotPreserveLogOnPageReload":{"message":"Do not preserve log on page reload / navigation"},"models/logs/logs-meta.ts | preserve":{"message":"preserve"},"models/logs/logs-meta.ts | preserveLog":{"message":"Preserve log"},"models/logs/logs-meta.ts | preserveLogOnPageReload":{"message":"Preserve log on page reload / navigation"},"models/logs/logs-meta.ts | recordNetworkLog":{"message":"Record network log"},"models/logs/logs-meta.ts | reset":{"message":"reset"},"models/logs/NetworkLog.ts | anonymous":{"message":""},"models/persistence/EditFileSystemView.ts | add":{"message":"Add"},"models/persistence/EditFileSystemView.ts | enterAPath":{"message":"Enter a path"},"models/persistence/EditFileSystemView.ts | enterAUniquePath":{"message":"Enter a unique path"},"models/persistence/EditFileSystemView.ts | excludedFolders":{"message":"Excluded folders"},"models/persistence/EditFileSystemView.ts | folderPath":{"message":"Folder path"},"models/persistence/EditFileSystemView.ts | none":{"message":"None"},"models/persistence/EditFileSystemView.ts | sViaDevtools":{"message":"{PH1} (via .devtools)"},"models/persistence/IsolatedFileSystem.ts | blobCouldNotBeLoaded":{"message":"Blob could not be loaded."},"models/persistence/IsolatedFileSystem.ts | cantReadFileSS":{"message":"Can't read file: {PH1}: {PH2}"},"models/persistence/IsolatedFileSystem.ts | fileSystemErrorS":{"message":"File system error: {PH1}"},"models/persistence/IsolatedFileSystem.ts | linkedToS":{"message":"Linked to {PH1}"},"models/persistence/IsolatedFileSystem.ts | unknownErrorReadingFileS":{"message":"Unknown error reading file: {PH1}"},"models/persistence/IsolatedFileSystemManager.ts | unableToAddFilesystemS":{"message":"Unable to add filesystem: {PH1}"},"models/persistence/persistence-meta.ts | disableOverrideNetworkRequests":{"message":"Disable override network requests"},"models/persistence/persistence-meta.ts | enableLocalOverrides":{"message":"Enable Local Overrides"},"models/persistence/persistence-meta.ts | enableOverrideNetworkRequests":{"message":"Enable override network requests"},"models/persistence/persistence-meta.ts | interception":{"message":"interception"},"models/persistence/persistence-meta.ts | network":{"message":"network"},"models/persistence/persistence-meta.ts | override":{"message":"override"},"models/persistence/persistence-meta.ts | request":{"message":"request"},"models/persistence/persistence-meta.ts | rewrite":{"message":"rewrite"},"models/persistence/persistence-meta.ts | showWorkspace":{"message":"Show Workspace"},"models/persistence/persistence-meta.ts | workspace":{"message":"Workspace"},"models/persistence/PersistenceActions.ts | openInContainingFolder":{"message":"Open in containing folder"},"models/persistence/PersistenceActions.ts | saveAs":{"message":"Save as..."},"models/persistence/PersistenceActions.ts | saveForOverrides":{"message":"Save for overrides"},"models/persistence/PersistenceActions.ts | saveImage":{"message":"Save image"},"models/persistence/PersistenceUtils.ts | linkedToS":{"message":"Linked to {PH1}"},"models/persistence/PersistenceUtils.ts | linkedToSourceMapS":{"message":"Linked to source map: {PH1}"},"models/persistence/PlatformFileSystem.ts | unableToReadFilesWithThis":{"message":"PlatformFileSystem cannot read files."},"models/persistence/WorkspaceSettingsTab.ts | addFolder":{"message":"Add folder…"},"models/persistence/WorkspaceSettingsTab.ts | folderExcludePattern":{"message":"Folder exclude pattern"},"models/persistence/WorkspaceSettingsTab.ts | mappingsAreInferredAutomatically":{"message":"Mappings are inferred automatically."},"models/persistence/WorkspaceSettingsTab.ts | remove":{"message":"Remove"},"models/persistence/WorkspaceSettingsTab.ts | workspace":{"message":"Workspace"},"models/timeline_model/TimelineJSProfile.ts | threadS":{"message":"Thread {PH1}"},"models/timeline_model/TimelineModel.ts | bidderWorklet":{"message":"Bidder Worklet"},"models/timeline_model/TimelineModel.ts | bidderWorkletS":{"message":"Bidder Worklet — {PH1}"},"models/timeline_model/TimelineModel.ts | dedicatedWorker":{"message":"Dedicated Worker"},"models/timeline_model/TimelineModel.ts | sellerWorklet":{"message":"Seller Worklet"},"models/timeline_model/TimelineModel.ts | sellerWorkletS":{"message":"Seller Worklet — {PH1}"},"models/timeline_model/TimelineModel.ts | threadS":{"message":"Thread {PH1}"},"models/timeline_model/TimelineModel.ts | unknownWorklet":{"message":"Auction Worklet"},"models/timeline_model/TimelineModel.ts | unknownWorkletS":{"message":"Auction Worklet — {PH1}"},"models/timeline_model/TimelineModel.ts | workerS":{"message":"Worker — {PH1}"},"models/timeline_model/TimelineModel.ts | workerSS":{"message":"Worker: {PH1} — {PH2}"},"models/timeline_model/TimelineModel.ts | workletService":{"message":"Auction Worklet Service"},"models/timeline_model/TimelineModel.ts | workletServiceS":{"message":"Auction Worklet Service — {PH1}"},"models/workspace/UISourceCode.ts | index":{"message":"(index)"},"models/workspace/UISourceCode.ts | thisFileWasChangedExternally":{"message":"This file was changed externally. Would you like to reload it?"},"panels/accessibility/accessibility-meta.ts | accessibility":{"message":"Accessibility"},"panels/accessibility/accessibility-meta.ts | shoAccessibility":{"message":"Show Accessibility"},"panels/accessibility/AccessibilityNodeView.ts | accessibilityNodeNotExposed":{"message":"Accessibility node not exposed"},"panels/accessibility/AccessibilityNodeView.ts | ancestorChildrenAreAll":{"message":"Ancestor's children are all presentational: "},"panels/accessibility/AccessibilityNodeView.ts | computedProperties":{"message":"Computed Properties"},"panels/accessibility/AccessibilityNodeView.ts | elementHasEmptyAltText":{"message":"Element has empty alt text."},"panels/accessibility/AccessibilityNodeView.ts | elementHasPlaceholder":{"message":"Element has {PH1}."},"panels/accessibility/AccessibilityNodeView.ts | elementIsHiddenBy":{"message":"Element is hidden by active modal dialog: "},"panels/accessibility/AccessibilityNodeView.ts | elementIsInAnInertSubTree":{"message":"Element is in an inert subtree from "},"panels/accessibility/AccessibilityNodeView.ts | elementIsInert":{"message":"Element is inert."},"panels/accessibility/AccessibilityNodeView.ts | elementIsNotRendered":{"message":"Element is not rendered."},"panels/accessibility/AccessibilityNodeView.ts | elementIsNotVisible":{"message":"Element is not visible."},"panels/accessibility/AccessibilityNodeView.ts | elementIsPlaceholder":{"message":"Element is {PH1}."},"panels/accessibility/AccessibilityNodeView.ts | elementIsPresentational":{"message":"Element is presentational."},"panels/accessibility/AccessibilityNodeView.ts | elementNotInteresting":{"message":"Element not interesting for accessibility."},"panels/accessibility/AccessibilityNodeView.ts | elementsInheritsPresentational":{"message":"Element inherits presentational role from "},"panels/accessibility/AccessibilityNodeView.ts | invalidSource":{"message":"Invalid source."},"panels/accessibility/AccessibilityNodeView.ts | labelFor":{"message":"Label for "},"panels/accessibility/AccessibilityNodeView.ts | noAccessibilityNode":{"message":"No accessibility node"},"panels/accessibility/AccessibilityNodeView.ts | noNodeWithThisId":{"message":"No node with this ID."},"panels/accessibility/AccessibilityNodeView.ts | noTextContent":{"message":"No text content."},"panels/accessibility/AccessibilityNodeView.ts | notSpecified":{"message":"Not specified"},"panels/accessibility/AccessibilityNodeView.ts | partOfLabelElement":{"message":"Part of label element: "},"panels/accessibility/AccessibilityNodeView.ts | placeholderIsPlaceholderOnAncestor":{"message":"{PH1} is {PH2} on ancestor: "},"panels/accessibility/AccessibilityStrings.ts | activeDescendant":{"message":"Active descendant"},"panels/accessibility/AccessibilityStrings.ts | aHumanreadableVersionOfTheValue":{"message":"A human-readable version of the value of a range widget (where necessary)."},"panels/accessibility/AccessibilityStrings.ts | atomicLiveRegions":{"message":"Atomic (live regions)"},"panels/accessibility/AccessibilityStrings.ts | busyLiveRegions":{"message":"Busy (live regions)"},"panels/accessibility/AccessibilityStrings.ts | canSetValue":{"message":"Can set value"},"panels/accessibility/AccessibilityStrings.ts | checked":{"message":"Checked"},"panels/accessibility/AccessibilityStrings.ts | contents":{"message":"Contents"},"panels/accessibility/AccessibilityStrings.ts | controls":{"message":"Controls"},"panels/accessibility/AccessibilityStrings.ts | describedBy":{"message":"Described by"},"panels/accessibility/AccessibilityStrings.ts | description":{"message":"Description"},"panels/accessibility/AccessibilityStrings.ts | disabled":{"message":"Disabled"},"panels/accessibility/AccessibilityStrings.ts | editable":{"message":"Editable"},"panels/accessibility/AccessibilityStrings.ts | elementOrElementsWhichFormThe":{"message":"Element or elements which form the description of this element."},"panels/accessibility/AccessibilityStrings.ts | elementOrElementsWhichMayFormThe":{"message":"Element or elements which may form the name of this element."},"panels/accessibility/AccessibilityStrings.ts | elementOrElementsWhichShouldBe":{"message":"Element or elements which should be considered descendants of this element, despite not being descendants in the DOM."},"panels/accessibility/AccessibilityStrings.ts | elementOrElementsWhoseContentOr":{"message":"Element or elements whose content or presence is/are controlled by this widget."},"panels/accessibility/AccessibilityStrings.ts | elementToWhichTheUserMayChooseTo":{"message":"Element to which the user may choose to navigate after this one, instead of the next element in the DOM order."},"panels/accessibility/AccessibilityStrings.ts | expanded":{"message":"Expanded"},"panels/accessibility/AccessibilityStrings.ts | focusable":{"message":"Focusable"},"panels/accessibility/AccessibilityStrings.ts | focused":{"message":"Focused"},"panels/accessibility/AccessibilityStrings.ts | forARangeWidgetTheMaximumAllowed":{"message":"For a range widget, the maximum allowed value."},"panels/accessibility/AccessibilityStrings.ts | forARangeWidgetTheMinimumAllowed":{"message":"For a range widget, the minimum allowed value."},"panels/accessibility/AccessibilityStrings.ts | fromAttribute":{"message":"From attribute"},"panels/accessibility/AccessibilityStrings.ts | fromCaption":{"message":"From caption"},"panels/accessibility/AccessibilityStrings.ts | fromDescription":{"message":"From description"},"panels/accessibility/AccessibilityStrings.ts | fromLabel":{"message":"From label"},"panels/accessibility/AccessibilityStrings.ts | fromLabelFor":{"message":"From label (for= attribute)"},"panels/accessibility/AccessibilityStrings.ts | fromLabelWrapped":{"message":"From label (wrapped)"},"panels/accessibility/AccessibilityStrings.ts | fromLegend":{"message":"From legend"},"panels/accessibility/AccessibilityStrings.ts | fromNativeHtml":{"message":"From native HTML"},"panels/accessibility/AccessibilityStrings.ts | fromPlaceholderAttribute":{"message":"From placeholder attribute"},"panels/accessibility/AccessibilityStrings.ts | fromRubyAnnotation":{"message":"From ruby annotation"},"panels/accessibility/AccessibilityStrings.ts | fromStyle":{"message":"From style"},"panels/accessibility/AccessibilityStrings.ts | fromTitle":{"message":"From title"},"panels/accessibility/AccessibilityStrings.ts | hasAutocomplete":{"message":"Has autocomplete"},"panels/accessibility/AccessibilityStrings.ts | hasPopup":{"message":"Has popup"},"panels/accessibility/AccessibilityStrings.ts | help":{"message":"Help"},"panels/accessibility/AccessibilityStrings.ts | ifAndHowThisElementCanBeEdited":{"message":"If and how this element can be edited."},"panels/accessibility/AccessibilityStrings.ts | ifThisElementMayReceiveLive":{"message":"If this element may receive live updates, whether the entire live region should be presented to the user on changes, or only changed nodes."},"panels/accessibility/AccessibilityStrings.ts | ifThisElementMayReceiveLiveUpdates":{"message":"If this element may receive live updates, what type of updates should trigger a notification."},"panels/accessibility/AccessibilityStrings.ts | ifThisElementMayReceiveLiveUpdatesThe":{"message":"If this element may receive live updates, the root element of the containing live region."},"panels/accessibility/AccessibilityStrings.ts | ifTrueThisElementCanReceiveFocus":{"message":"If true, this element can receive focus."},"panels/accessibility/AccessibilityStrings.ts | ifTrueThisElementCurrentlyCannot":{"message":"If true, this element currently cannot be interacted with."},"panels/accessibility/AccessibilityStrings.ts | ifTrueThisElementCurrentlyHas":{"message":"If true, this element currently has focus."},"panels/accessibility/AccessibilityStrings.ts | ifTrueThisElementMayBeInteracted":{"message":"If true, this element may be interacted with, but its value cannot be changed."},"panels/accessibility/AccessibilityStrings.ts | ifTrueThisElementsUserentered":{"message":"If true, this element's user-entered value does not conform to validation requirement."},"panels/accessibility/AccessibilityStrings.ts | implicit":{"message":"Implicit"},"panels/accessibility/AccessibilityStrings.ts | implicitValue":{"message":"Implicit value."},"panels/accessibility/AccessibilityStrings.ts | indicatesThePurposeOfThisElement":{"message":"Indicates the purpose of this element, such as a user interface idiom for a widget, or structural role within a document."},"panels/accessibility/AccessibilityStrings.ts | invalidUserEntry":{"message":"Invalid user entry"},"panels/accessibility/AccessibilityStrings.ts | labeledBy":{"message":"Labeled by"},"panels/accessibility/AccessibilityStrings.ts | level":{"message":"Level"},"panels/accessibility/AccessibilityStrings.ts | liveRegion":{"message":"Live region"},"panels/accessibility/AccessibilityStrings.ts | liveRegionRoot":{"message":"Live region root"},"panels/accessibility/AccessibilityStrings.ts | maximumValue":{"message":"Maximum value"},"panels/accessibility/AccessibilityStrings.ts | minimumValue":{"message":"Minimum value"},"panels/accessibility/AccessibilityStrings.ts | multiline":{"message":"Multi-line"},"panels/accessibility/AccessibilityStrings.ts | multiselectable":{"message":"Multi-selectable"},"panels/accessibility/AccessibilityStrings.ts | orientation":{"message":"Orientation"},"panels/accessibility/AccessibilityStrings.ts | pressed":{"message":"Pressed"},"panels/accessibility/AccessibilityStrings.ts | readonlyString":{"message":"Read-only"},"panels/accessibility/AccessibilityStrings.ts | relatedElement":{"message":"Related element"},"panels/accessibility/AccessibilityStrings.ts | relevantLiveRegions":{"message":"Relevant (live regions)"},"panels/accessibility/AccessibilityStrings.ts | requiredString":{"message":"Required"},"panels/accessibility/AccessibilityStrings.ts | role":{"message":"Role"},"panels/accessibility/AccessibilityStrings.ts | selectedString":{"message":"Selected"},"panels/accessibility/AccessibilityStrings.ts | theAccessibleDescriptionForThis":{"message":"The accessible description for this element."},"panels/accessibility/AccessibilityStrings.ts | theComputedHelpTextForThis":{"message":"The computed help text for this element."},"panels/accessibility/AccessibilityStrings.ts | theComputedNameOfThisElement":{"message":"The computed name of this element."},"panels/accessibility/AccessibilityStrings.ts | theDescendantOfThisElementWhich":{"message":"The descendant of this element which is active; i.e. the element to which focus should be delegated."},"panels/accessibility/AccessibilityStrings.ts | theHierarchicalLevelOfThis":{"message":"The hierarchical level of this element."},"panels/accessibility/AccessibilityStrings.ts | theValueOfThisElementThisMayBe":{"message":"The value of this element; this may be user-provided or developer-provided, depending on the element."},"panels/accessibility/AccessibilityStrings.ts | value":{"message":"Value"},"panels/accessibility/AccessibilityStrings.ts | valueDescription":{"message":"Value description"},"panels/accessibility/AccessibilityStrings.ts | valueFromAttribute":{"message":"Value from attribute."},"panels/accessibility/AccessibilityStrings.ts | valueFromDescriptionElement":{"message":"Value from description element."},"panels/accessibility/AccessibilityStrings.ts | valueFromElementContents":{"message":"Value from element contents."},"panels/accessibility/AccessibilityStrings.ts | valueFromFigcaptionElement":{"message":"Value from figcaption element."},"panels/accessibility/AccessibilityStrings.ts | valueFromLabelElement":{"message":"Value from label element."},"panels/accessibility/AccessibilityStrings.ts | valueFromLabelElementWithFor":{"message":"Value from label element with for= attribute."},"panels/accessibility/AccessibilityStrings.ts | valueFromLabelElementWrapped":{"message":"Value from a wrapping label element."},"panels/accessibility/AccessibilityStrings.ts | valueFromLegendElement":{"message":"Value from legend element."},"panels/accessibility/AccessibilityStrings.ts | valueFromNativeHtmlRuby":{"message":"Value from plain HTML ruby annotation."},"panels/accessibility/AccessibilityStrings.ts | valueFromNativeHtmlUnknownSource":{"message":"Value from native HTML (unknown source)."},"panels/accessibility/AccessibilityStrings.ts | valueFromPlaceholderAttribute":{"message":"Value from placeholder attribute."},"panels/accessibility/AccessibilityStrings.ts | valueFromRelatedElement":{"message":"Value from related element."},"panels/accessibility/AccessibilityStrings.ts | valueFromStyle":{"message":"Value from style."},"panels/accessibility/AccessibilityStrings.ts | valueFromTableCaption":{"message":"Value from table caption."},"panels/accessibility/AccessibilityStrings.ts | valueFromTitleAttribute":{"message":"Value from title attribute."},"panels/accessibility/AccessibilityStrings.ts | whetherAndWhatPriorityOfLive":{"message":"Whether and what priority of live updates may be expected for this element."},"panels/accessibility/AccessibilityStrings.ts | whetherAndWhatTypeOfAutocomplete":{"message":"Whether and what type of autocomplete suggestions are currently provided by this element."},"panels/accessibility/AccessibilityStrings.ts | whetherAUserMaySelectMoreThanOne":{"message":"Whether a user may select more than one option from this widget."},"panels/accessibility/AccessibilityStrings.ts | whetherTheOptionRepresentedBy":{"message":"Whether the option represented by this element is currently selected."},"panels/accessibility/AccessibilityStrings.ts | whetherTheValueOfThisElementCan":{"message":"Whether the value of this element can be set."},"panels/accessibility/AccessibilityStrings.ts | whetherThisCheckboxRadioButtonOr":{"message":"Whether this checkbox, radio button or tree item is checked, unchecked, or mixed (e.g. has both checked and un-checked children)."},"panels/accessibility/AccessibilityStrings.ts | whetherThisElementHasCausedSome":{"message":"Whether this element has caused some kind of pop-up (such as a menu) to appear."},"panels/accessibility/AccessibilityStrings.ts | whetherThisElementIsARequired":{"message":"Whether this element is a required field in a form."},"panels/accessibility/AccessibilityStrings.ts | whetherThisElementOrAnother":{"message":"Whether this element, or another grouping element it controls, is expanded."},"panels/accessibility/AccessibilityStrings.ts | whetherThisElementOrItsSubtree":{"message":"Whether this element or its subtree are currently being updated (and thus may be in an inconsistent state)."},"panels/accessibility/AccessibilityStrings.ts | whetherThisLinearElements":{"message":"Whether this linear element's orientation is horizontal or vertical."},"panels/accessibility/AccessibilityStrings.ts | whetherThisTextBoxMayHaveMore":{"message":"Whether this text box may have more than one line."},"panels/accessibility/AccessibilityStrings.ts | whetherThisToggleButtonIs":{"message":"Whether this toggle button is currently in a pressed state."},"panels/accessibility/ARIAAttributesView.ts | ariaAttributes":{"message":"ARIA Attributes"},"panels/accessibility/ARIAAttributesView.ts | noAriaAttributes":{"message":"No ARIA attributes"},"panels/accessibility/AXBreadcrumbsPane.ts | accessibilityTree":{"message":"Accessibility Tree"},"panels/accessibility/AXBreadcrumbsPane.ts | fullTreeExperimentDescription":{"message":"The accessibility tree moved to the top right corner of the DOM tree."},"panels/accessibility/AXBreadcrumbsPane.ts | fullTreeExperimentName":{"message":"Enable full-page accessibility tree"},"panels/accessibility/AXBreadcrumbsPane.ts | ignored":{"message":"Ignored"},"panels/accessibility/AXBreadcrumbsPane.ts | reloadRequired":{"message":"Reload required before the change takes effect."},"panels/accessibility/AXBreadcrumbsPane.ts | scrollIntoView":{"message":"Scroll into view"},"panels/accessibility/SourceOrderView.ts | noSourceOrderInformation":{"message":"No source order information available"},"panels/accessibility/SourceOrderView.ts | showSourceOrder":{"message":"Show source order"},"panels/accessibility/SourceOrderView.ts | sourceOrderViewer":{"message":"Source Order Viewer"},"panels/accessibility/SourceOrderView.ts | thereMayBeADelayInDisplaying":{"message":"There may be a delay in displaying source order for elements with many children"},"panels/animation/animation-meta.ts | animations":{"message":"Animations"},"panels/animation/animation-meta.ts | showAnimations":{"message":"Show Animations"},"panels/animation/AnimationTimeline.ts | animationPreviews":{"message":"Animation previews"},"panels/animation/AnimationTimeline.ts | animationPreviewS":{"message":"Animation Preview {PH1}"},"panels/animation/AnimationTimeline.ts | clearAll":{"message":"Clear all"},"panels/animation/AnimationTimeline.ts | pause":{"message":"Pause"},"panels/animation/AnimationTimeline.ts | pauseAll":{"message":"Pause all"},"panels/animation/AnimationTimeline.ts | pauseTimeline":{"message":"Pause timeline"},"panels/animation/AnimationTimeline.ts | playbackRatePlaceholder":{"message":"{PH1}%"},"panels/animation/AnimationTimeline.ts | playbackRates":{"message":"Playback rates"},"panels/animation/AnimationTimeline.ts | playTimeline":{"message":"Play timeline"},"panels/animation/AnimationTimeline.ts | replayTimeline":{"message":"Replay timeline"},"panels/animation/AnimationTimeline.ts | resumeAll":{"message":"Resume all"},"panels/animation/AnimationTimeline.ts | selectAnEffectAboveToInspectAnd":{"message":"Select an effect above to inspect and modify."},"panels/animation/AnimationTimeline.ts | setSpeedToS":{"message":"Set speed to {PH1}"},"panels/animation/AnimationTimeline.ts | waitingForAnimations":{"message":"Waiting for animations..."},"panels/animation/AnimationUI.ts | animationEndpointSlider":{"message":"Animation Endpoint slider"},"panels/animation/AnimationUI.ts | animationKeyframeSlider":{"message":"Animation Keyframe slider"},"panels/animation/AnimationUI.ts | sSlider":{"message":"{PH1} slider"},"panels/application/application-meta.ts | application":{"message":"Application"},"panels/application/application-meta.ts | clearSiteData":{"message":"Clear site data"},"panels/application/application-meta.ts | clearSiteDataIncludingThirdparty":{"message":"Clear site data (including third-party cookies)"},"panels/application/application-meta.ts | pwa":{"message":"pwa"},"panels/application/application-meta.ts | showApplication":{"message":"Show Application"},"panels/application/application-meta.ts | startRecordingEvents":{"message":"Start recording events"},"panels/application/application-meta.ts | stopRecordingEvents":{"message":"Stop recording events"},"panels/application/ApplicationPanelSidebar.ts | application":{"message":"Application"},"panels/application/ApplicationPanelSidebar.ts | applicationSidebarPanel":{"message":"Application panel sidebar"},"panels/application/ApplicationPanelSidebar.ts | appManifest":{"message":"App Manifest"},"panels/application/ApplicationPanelSidebar.ts | backgroundServices":{"message":"Background Services"},"panels/application/ApplicationPanelSidebar.ts | beforeInvokeAlert":{"message":"{PH1}: Invoke to scroll to this section in manifest"},"panels/application/ApplicationPanelSidebar.ts | clear":{"message":"Clear"},"panels/application/ApplicationPanelSidebar.ts | cookies":{"message":"Cookies"},"panels/application/ApplicationPanelSidebar.ts | cookiesUsedByFramesFromS":{"message":"Cookies used by frames from {PH1}"},"panels/application/ApplicationPanelSidebar.ts | documentNotAvailable":{"message":"Document not available"},"panels/application/ApplicationPanelSidebar.ts | frames":{"message":"Frames"},"panels/application/ApplicationPanelSidebar.ts | indexeddb":{"message":"IndexedDB"},"panels/application/ApplicationPanelSidebar.ts | keyPathS":{"message":"Key path: {PH1}"},"panels/application/ApplicationPanelSidebar.ts | localFiles":{"message":"Local Files"},"panels/application/ApplicationPanelSidebar.ts | localStorage":{"message":"Local Storage"},"panels/application/ApplicationPanelSidebar.ts | manifest":{"message":"Manifest"},"panels/application/ApplicationPanelSidebar.ts | noManifestDetected":{"message":"No manifest detected"},"panels/application/ApplicationPanelSidebar.ts | onInvokeAlert":{"message":"Scrolled to {PH1}"},"panels/application/ApplicationPanelSidebar.ts | onInvokeManifestAlert":{"message":"Manifest: Invoke to scroll to the top of manifest"},"panels/application/ApplicationPanelSidebar.ts | openedWindows":{"message":"Opened Windows"},"panels/application/ApplicationPanelSidebar.ts | preloading":{"message":"Preloading"},"panels/application/ApplicationPanelSidebar.ts | refreshIndexeddb":{"message":"Refresh IndexedDB"},"panels/application/ApplicationPanelSidebar.ts | sessionStorage":{"message":"Session Storage"},"panels/application/ApplicationPanelSidebar.ts | storage":{"message":"Storage"},"panels/application/ApplicationPanelSidebar.ts | theContentOfThisDocumentHasBeen":{"message":"The content of this document has been generated dynamically via 'document.write()'."},"panels/application/ApplicationPanelSidebar.ts | versionS":{"message":"Version: {PH1}"},"panels/application/ApplicationPanelSidebar.ts | versionSEmpty":{"message":"Version: {PH1} (empty)"},"panels/application/ApplicationPanelSidebar.ts | webSql":{"message":"Web SQL"},"panels/application/ApplicationPanelSidebar.ts | webWorkers":{"message":"Web Workers"},"panels/application/ApplicationPanelSidebar.ts | windowWithoutTitle":{"message":"Window without title"},"panels/application/ApplicationPanelSidebar.ts | worker":{"message":"worker"},"panels/application/AppManifestView.ts | actualHeightSpxOfSSDoesNotMatch":{"message":"Actual height ({PH1}px) of {PH2} {PH3} does not match specified height ({PH4}px)"},"panels/application/AppManifestView.ts | actualSizeSspxOfSSDoesNotMatch":{"message":"Actual size ({PH1}×{PH2})px of {PH3} {PH4} does not match specified size ({PH5}×{PH6}px)"},"panels/application/AppManifestView.ts | actualWidthSpxOfSSDoesNotMatch":{"message":"Actual width ({PH1}px) of {PH2} {PH3} does not match specified width ({PH4}px)"},"panels/application/AppManifestView.ts | appIdExplainer":{"message":"This is used by the browser to know whether the manifest should be updating an existing application, or whether it refers to a new web app that can be installed."},"panels/application/AppManifestView.ts | appIdNote":{"message":"{PH1} {PH2} is not specified in the manifest, {PH3} is used instead. To specify an App Id that matches the current identity, set the {PH4} field to {PH5} {PH6}."},"panels/application/AppManifestView.ts | aUrlInTheManifestContainsA":{"message":"A URL in the manifest contains a username, password, or port"},"panels/application/AppManifestView.ts | avoidPurposeAnyAndMaskable":{"message":"Declaring an icon with 'purpose: \"any maskable\"' is discouraged. It is likely to look incorrect on some platforms due to too much or too little padding."},"panels/application/AppManifestView.ts | backgroundColor":{"message":"Background color"},"panels/application/AppManifestView.ts | computedAppId":{"message":"Computed App Id"},"panels/application/AppManifestView.ts | copiedToClipboard":{"message":"Copied suggested ID {PH1} to clipboard"},"panels/application/AppManifestView.ts | copyToClipboard":{"message":"Copy to clipboard"},"panels/application/AppManifestView.ts | couldNotCheckServiceWorker":{"message":"Could not check service worker without a 'start_url' field in the manifest"},"panels/application/AppManifestView.ts | couldNotDownloadARequiredIcon":{"message":"Could not download a required icon from the manifest"},"panels/application/AppManifestView.ts | customizePwaTitleBar":{"message":"Customize the window controls overlay of your PWA's title bar."},"panels/application/AppManifestView.ts | darkBackgroundColor":{"message":"Dark background color"},"panels/application/AppManifestView.ts | darkThemeColor":{"message":"Dark theme color"},"panels/application/AppManifestView.ts | description":{"message":"Description"},"panels/application/AppManifestView.ts | descriptionMayBeTruncated":{"message":"Description may be truncated."},"panels/application/AppManifestView.ts | display":{"message":"Display"},"panels/application/AppManifestView.ts | displayOverride":{"message":"display-override"},"panels/application/AppManifestView.ts | documentationOnMaskableIcons":{"message":"documentation on maskable icons"},"panels/application/AppManifestView.ts | downloadedIconWasEmptyOr":{"message":"Downloaded icon was empty or corrupted"},"panels/application/AppManifestView.ts | errorsAndWarnings":{"message":"Errors and warnings"},"panels/application/AppManifestView.ts | icon":{"message":"Icon"},"panels/application/AppManifestView.ts | icons":{"message":"Icons"},"panels/application/AppManifestView.ts | identity":{"message":"Identity"},"panels/application/AppManifestView.ts | imageFromS":{"message":"Image from {PH1}"},"panels/application/AppManifestView.ts | installability":{"message":"Installability"},"panels/application/AppManifestView.ts | learnMore":{"message":"Learn more"},"panels/application/AppManifestView.ts | manifestContainsDisplayoverride":{"message":"Manifest contains 'display_override' field, and the first supported display mode must be one of 'standalone', 'fullscreen', or 'minimal-ui'"},"panels/application/AppManifestView.ts | manifestCouldNotBeFetchedIsEmpty":{"message":"Manifest could not be fetched, is empty, or could not be parsed"},"panels/application/AppManifestView.ts | manifestDisplayPropertyMustBeOne":{"message":"Manifest 'display' property must be one of 'standalone', 'fullscreen', or 'minimal-ui'"},"panels/application/AppManifestView.ts | manifestDoesNotContainANameOr":{"message":"Manifest does not contain a 'name' or 'short_name' field"},"panels/application/AppManifestView.ts | manifestDoesNotContainASuitable":{"message":"Manifest does not contain a suitable icon - PNG, SVG or WebP format of at least {PH1}px is required, the 'sizes' attribute must be set, and the 'purpose' attribute, if set, must include 'any'."},"panels/application/AppManifestView.ts | manifestSpecifies":{"message":"Manifest specifies 'prefer_related_applications: true'"},"panels/application/AppManifestView.ts | manifestStartUrlIsNotValid":{"message":"Manifest 'start_URL' is not valid"},"panels/application/AppManifestView.ts | name":{"message":"Name"},"panels/application/AppManifestView.ts | needHelpReadOurS":{"message":"Need help? Read {PH1}."},"panels/application/AppManifestView.ts | newNoteUrl":{"message":"New note URL"},"panels/application/AppManifestView.ts | noPlayStoreIdProvided":{"message":"No Play store ID provided"},"panels/application/AppManifestView.ts | noSuppliedIconIsAtLeastSpxSquare":{"message":"No supplied icon is at least {PH1} pixels square in PNG, SVG or WebP format, with the purpose attribute unset or set to 'any'."},"panels/application/AppManifestView.ts | note":{"message":"Note:"},"panels/application/AppManifestView.ts | orientation":{"message":"Orientation"},"panels/application/AppManifestView.ts | pageDoesNotWorkOffline":{"message":"Page does not work offline"},"panels/application/AppManifestView.ts | pageDoesNotWorkOfflineThePage":{"message":"Page does not work offline. Starting in Chrome 93, the installability criteria are changing, and this site will not be installable. See {PH1} for more information."},"panels/application/AppManifestView.ts | pageHasNoManifestLinkUrl":{"message":"Page has no manifest URL"},"panels/application/AppManifestView.ts | pageIsLoadedInAnIncognitoWindow":{"message":"Page is loaded in an incognito window"},"panels/application/AppManifestView.ts | pageIsNotLoadedInTheMainFrame":{"message":"Page is not loaded in the main frame"},"panels/application/AppManifestView.ts | pageIsNotServedFromASecureOrigin":{"message":"Page is not served from a secure origin"},"panels/application/AppManifestView.ts | preferrelatedapplicationsIsOnly":{"message":"'prefer_related_applications' is only supported on Chrome Beta and Stable channels on Android."},"panels/application/AppManifestView.ts | presentation":{"message":"Presentation"},"panels/application/AppManifestView.ts | protocolHandlers":{"message":"Protocol Handlers"},"panels/application/AppManifestView.ts | screenshot":{"message":"Screenshot"},"panels/application/AppManifestView.ts | screenshotPixelSize":{"message":"Screenshot {url} should specify a pixel size [width]x[height] instead of \"any\" as first size."},"panels/application/AppManifestView.ts | screenshotS":{"message":"Screenshot #{PH1}"},"panels/application/AppManifestView.ts | shortcutS":{"message":"Shortcut #{PH1}"},"panels/application/AppManifestView.ts | shortcutSShouldIncludeAXPixel":{"message":"Shortcut #{PH1} should include a 96x96 pixel icon"},"panels/application/AppManifestView.ts | shortName":{"message":"Short name"},"panels/application/AppManifestView.ts | showOnlyTheMinimumSafeAreaFor":{"message":"Show only the minimum safe area for maskable icons"},"panels/application/AppManifestView.ts | sSDoesNotSpecifyItsSizeInThe":{"message":"{PH1} {PH2} does not specify its size in the manifest"},"panels/application/AppManifestView.ts | sSFailedToLoad":{"message":"{PH1} {PH2} failed to load"},"panels/application/AppManifestView.ts | sSHeightDoesNotComplyWithRatioRequirement":{"message":"{PH1} {PH2} height can't be more than 2.3 times as long as the width"},"panels/application/AppManifestView.ts | sSrcIsNotSet":{"message":"{PH1} 'src' is not set"},"panels/application/AppManifestView.ts | sSShouldHaveSquareIcon":{"message":"Most operating systems require square icons. Please include at least one square icon in the array."},"panels/application/AppManifestView.ts | sSShouldSpecifyItsSizeAs":{"message":"{PH1} {PH2} should specify its size as [width]x[height]"},"panels/application/AppManifestView.ts | sSSizeShouldBeAtLeast320":{"message":"{PH1} {PH2} size should be at least 320×320"},"panels/application/AppManifestView.ts | sSSizeShouldBeAtMost3840":{"message":"{PH1} {PH2} size should be at most 3840×3840"},"panels/application/AppManifestView.ts | sSWidthDoesNotComplyWithRatioRequirement":{"message":"{PH1} {PH2} width can't be more than 2.3 times as long as the height"},"panels/application/AppManifestView.ts | startUrl":{"message":"Start URL"},"panels/application/AppManifestView.ts | sUrlSFailedToParse":{"message":"{PH1} URL ''{PH2}'' failed to parse"},"panels/application/AppManifestView.ts | theAppIsAlreadyInstalled":{"message":"The app is already installed"},"panels/application/AppManifestView.ts | themeColor":{"message":"Theme color"},"panels/application/AppManifestView.ts | thePlayStoreAppUrlAndPlayStoreId":{"message":"The Play Store app URL and Play Store ID do not match"},"panels/application/AppManifestView.ts | theSpecifiedApplicationPlatform":{"message":"The specified application platform is not supported on Android"},"panels/application/AppManifestView.ts | wcoFound":{"message":"Chrome has successfully found the {PH1} value for the {PH2} field in the {PH3}."},"panels/application/AppManifestView.ts | wcoNeedHelpReadMore":{"message":"Need help? Read {PH1}."},"panels/application/AppManifestView.ts | wcoNotFound":{"message":"Define {PH1} in the manifest to use the Window Controls Overlay API and customize your app's title bar."},"panels/application/AppManifestView.ts | windowControlsOverlay":{"message":"Window Controls Overlay"},"panels/application/BackForwardCacheTreeElement.ts | backForwardCache":{"message":"Back/forward cache"},"panels/application/BackgroundServiceView.ts | backgroundFetch":{"message":"Background Fetch"},"panels/application/BackgroundServiceView.ts | backgroundServices":{"message":"Background Services"},"panels/application/BackgroundServiceView.ts | backgroundSync":{"message":"Background Sync"},"panels/application/BackgroundServiceView.ts | clear":{"message":"Clear"},"panels/application/BackgroundServiceView.ts | clickTheRecordButtonSOrHitSTo":{"message":"Click the record button {PH1} or hit {PH2} to start recording."},"panels/application/BackgroundServiceView.ts | devtoolsWillRecordAllSActivity":{"message":"DevTools will record all {PH1} activity for up to 3 days, even when closed."},"panels/application/BackgroundServiceView.ts | empty":{"message":"empty"},"panels/application/BackgroundServiceView.ts | event":{"message":"Event"},"panels/application/BackgroundServiceView.ts | instanceId":{"message":"Instance ID"},"panels/application/BackgroundServiceView.ts | learnMore":{"message":"Learn more"},"panels/application/BackgroundServiceView.ts | noMetadataForThisEvent":{"message":"No metadata for this event"},"panels/application/BackgroundServiceView.ts | notifications":{"message":"Notifications"},"panels/application/BackgroundServiceView.ts | origin":{"message":"Origin"},"panels/application/BackgroundServiceView.ts | paymentHandler":{"message":"Payment Handler"},"panels/application/BackgroundServiceView.ts | periodicBackgroundSync":{"message":"Periodic Background Sync"},"panels/application/BackgroundServiceView.ts | pushMessaging":{"message":"Push Messaging"},"panels/application/BackgroundServiceView.ts | recordingSActivity":{"message":"Recording {PH1} activity..."},"panels/application/BackgroundServiceView.ts | saveEvents":{"message":"Save events"},"panels/application/BackgroundServiceView.ts | selectAnEntryToViewMetadata":{"message":"Select an entry to view metadata"},"panels/application/BackgroundServiceView.ts | showEventsForOtherStorageKeys":{"message":"Show events from other storage partitions"},"panels/application/BackgroundServiceView.ts | showEventsFromOtherDomains":{"message":"Show events from other domains"},"panels/application/BackgroundServiceView.ts | startRecordingEvents":{"message":"Start recording events"},"panels/application/BackgroundServiceView.ts | stopRecordingEvents":{"message":"Stop recording events"},"panels/application/BackgroundServiceView.ts | storageKey":{"message":"Storage Key"},"panels/application/BackgroundServiceView.ts | swScope":{"message":"Service Worker Scope"},"panels/application/BackgroundServiceView.ts | timestamp":{"message":"Timestamp"},"panels/application/BounceTrackingMitigationsTreeElement.ts | bounceTrackingMitigations":{"message":"Bounce Tracking Mitigations"},"panels/application/components/BackForwardCacheStrings.ts | appBanner":{"message":"Pages that requested an AppBanner are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | backForwardCacheDisabled":{"message":"Back/forward cache is disabled by flags. Visit chrome://flags/#back-forward-cache to enable it locally on this device."},"panels/application/components/BackForwardCacheStrings.ts | backForwardCacheDisabledByCommandLine":{"message":"Back/forward cache is disabled by the command line."},"panels/application/components/BackForwardCacheStrings.ts | backForwardCacheDisabledByLowMemory":{"message":"Back/forward cache is disabled due to insufficient memory."},"panels/application/components/BackForwardCacheStrings.ts | backForwardCacheDisabledForDelegate":{"message":"Back/forward cache is not supported by delegate."},"panels/application/components/BackForwardCacheStrings.ts | backForwardCacheDisabledForPrerender":{"message":"Back/forward cache is disabled for prerenderer."},"panels/application/components/BackForwardCacheStrings.ts | broadcastChannel":{"message":"The page cannot be cached because it has a BroadcastChannel instance with registered listeners."},"panels/application/components/BackForwardCacheStrings.ts | cacheControlNoStore":{"message":"Pages with cache-control:no-store header cannot enter back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | cacheFlushed":{"message":"The cache was intentionally cleared."},"panels/application/components/BackForwardCacheStrings.ts | cacheLimit":{"message":"The page was evicted from the cache to allow another page to be cached."},"panels/application/components/BackForwardCacheStrings.ts | containsPlugins":{"message":"Pages containing plugins are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | contentFileChooser":{"message":"Pages that use FileChooser API are not eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | contentFileSystemAccess":{"message":"Pages that use File System Access API are not eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | contentMediaDevicesDispatcherHost":{"message":"Pages that use Media Device Dispatcher are not eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | contentMediaPlay":{"message":"A media player was playing upon navigating away."},"panels/application/components/BackForwardCacheStrings.ts | contentMediaSession":{"message":"Pages that use MediaSession API and set a playback state are not eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | contentMediaSessionService":{"message":"Pages that use MediaSession API and set action handlers are not eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | contentScreenReader":{"message":"Back/forward cache is disabled due to screen reader."},"panels/application/components/BackForwardCacheStrings.ts | contentSecurityHandler":{"message":"Pages that use SecurityHandler are not eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | contentSerial":{"message":"Pages that use Serial API are not eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | contentWebAuthenticationAPI":{"message":"Pages that use WebAuthetication API are not eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | contentWebBluetooth":{"message":"Pages that use WebBluetooth API are not eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | contentWebUSB":{"message":"Pages that use WebUSB API are not eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | cookieDisabled":{"message":"Back/forward cache is disabled because cookies are disabled on a page that uses Cache-Control: no-store."},"panels/application/components/BackForwardCacheStrings.ts | dedicatedWorkerOrWorklet":{"message":"Pages that use a dedicated worker or worklet are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | documentLoaded":{"message":"The document did not finish loading before navigating away."},"panels/application/components/BackForwardCacheStrings.ts | embedderAppBannerManager":{"message":"App Banner was present upon navigating away."},"panels/application/components/BackForwardCacheStrings.ts | embedderChromePasswordManagerClientBindCredentialManager":{"message":"Chrome Password Manager was present upon navigating away."},"panels/application/components/BackForwardCacheStrings.ts | embedderDomDistillerSelfDeletingRequestDelegate":{"message":"DOM distillation was in progress upon navigating away."},"panels/application/components/BackForwardCacheStrings.ts | embedderDomDistillerViewerSource":{"message":"DOM Distiller Viewer was present upon navigating away."},"panels/application/components/BackForwardCacheStrings.ts | embedderExtensionMessaging":{"message":"Back/forward cache is disabled due to extensions using messaging API."},"panels/application/components/BackForwardCacheStrings.ts | embedderExtensionMessagingForOpenPort":{"message":"Extensions with long-lived connection should close the connection before entering back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | embedderExtensions":{"message":"Back/forward cache is disabled due to extensions."},"panels/application/components/BackForwardCacheStrings.ts | embedderExtensionSentMessageToCachedFrame":{"message":"Extensions with long-lived connection attempted to send messages to frames in back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | embedderModalDialog":{"message":"Modal dialog such as form resubmission or http password dialog was shown for the page upon navigating away."},"panels/application/components/BackForwardCacheStrings.ts | embedderOfflinePage":{"message":"The offline page was shown upon navigating away."},"panels/application/components/BackForwardCacheStrings.ts | embedderOomInterventionTabHelper":{"message":"Out-Of-Memory Intervention bar was present upon navigating away."},"panels/application/components/BackForwardCacheStrings.ts | embedderPermissionRequestManager":{"message":"There were permission requests upon navigating away."},"panels/application/components/BackForwardCacheStrings.ts | embedderPopupBlockerTabHelper":{"message":"Popup blocker was present upon navigating away."},"panels/application/components/BackForwardCacheStrings.ts | embedderSafeBrowsingThreatDetails":{"message":"Safe Browsing details were shown upon navigating away."},"panels/application/components/BackForwardCacheStrings.ts | embedderSafeBrowsingTriggeredPopupBlocker":{"message":"Safe Browsing considered this page to be abusive and blocked popup."},"panels/application/components/BackForwardCacheStrings.ts | enteredBackForwardCacheBeforeServiceWorkerHostAdded":{"message":"A service worker was activated while the page was in back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | errorDocument":{"message":"Back/forward cache is disabled due to a document error."},"panels/application/components/BackForwardCacheStrings.ts | fencedFramesEmbedder":{"message":"Pages using FencedFrames cannot be stored in bfcache."},"panels/application/components/BackForwardCacheStrings.ts | foregroundCacheLimit":{"message":"The page was evicted from the cache to allow another page to be cached."},"panels/application/components/BackForwardCacheStrings.ts | grantedMediaStreamAccess":{"message":"Pages that have granted media stream access are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | haveInnerContents":{"message":"Pages that use portals are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | HTTPMethodNotGET":{"message":"Only pages loaded via a GET request are eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | HTTPStatusNotOK":{"message":"Only pages with a status code of 2XX can be cached."},"panels/application/components/BackForwardCacheStrings.ts | idleManager":{"message":"Pages that use IdleManager are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | indexedDBConnection":{"message":"Pages that have an open IndexedDB connection are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | indexedDBEvent":{"message":"Back/forward cache is disabled due to an IndexedDB event."},"panels/application/components/BackForwardCacheStrings.ts | ineligibleAPI":{"message":"Ineligible APIs were used."},"panels/application/components/BackForwardCacheStrings.ts | injectedJavascript":{"message":"Pages that JavaScript is injected into by extensions are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | injectedStyleSheet":{"message":"Pages that a StyleSheet is injected into by extensions are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | internalError":{"message":"Internal error."},"panels/application/components/BackForwardCacheStrings.ts | JavaScriptExecution":{"message":"Chrome detected an attempt to execute JavaScript while in the cache."},"panels/application/components/BackForwardCacheStrings.ts | jsNetworkRequestReceivedCacheControlNoStoreResource":{"message":"Back/forward cache is disabled because some JavaScript network request received resource with Cache-Control: no-store header."},"panels/application/components/BackForwardCacheStrings.ts | keepaliveRequest":{"message":"Back/forward cache is disabled due to a keepalive request."},"panels/application/components/BackForwardCacheStrings.ts | keyboardLock":{"message":"Pages that use Keyboard lock are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | loading":{"message":"The page did not finish loading before navigating away."},"panels/application/components/BackForwardCacheStrings.ts | mainResourceHasCacheControlNoCache":{"message":"Pages whose main resource has cache-control:no-cache cannot enter back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | mainResourceHasCacheControlNoStore":{"message":"Pages whose main resource has cache-control:no-store cannot enter back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | navigationCancelledWhileRestoring":{"message":"Navigation was cancelled before the page could be restored from back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | networkExceedsBufferLimit":{"message":"The page was evicted from the cache because an active network connection received too much data. Chrome limits the amount of data that a page may receive while cached."},"panels/application/components/BackForwardCacheStrings.ts | networkRequestDatapipeDrainedAsBytesConsumer":{"message":"Pages that have inflight fetch() or XHR are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | networkRequestRedirected":{"message":"The page was evicted from back/forward cache because an active network request involved a redirect."},"panels/application/components/BackForwardCacheStrings.ts | networkRequestTimeout":{"message":"The page was evicted from the cache because a network connection was open too long. Chrome limits the amount of time that a page may receive data while cached."},"panels/application/components/BackForwardCacheStrings.ts | noResponseHead":{"message":"Pages that do not have a valid response head cannot enter back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | notMainFrame":{"message":"Navigation happened in a frame other than the main frame."},"panels/application/components/BackForwardCacheStrings.ts | outstandingIndexedDBTransaction":{"message":"Page with ongoing indexed DB transactions are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | outstandingNetworkRequestDirectSocket":{"message":"Pages with an in-flight network request are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | outstandingNetworkRequestFetch":{"message":"Pages with an in-flight fetch network request are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | outstandingNetworkRequestOthers":{"message":"Pages with an in-flight network request are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | outstandingNetworkRequestXHR":{"message":"Pages with an in-flight XHR network request are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | paymentManager":{"message":"Pages that use PaymentManager are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | pictureInPicture":{"message":"Pages that use Picture-in-Picture are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | portal":{"message":"Pages that use portals are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | printing":{"message":"Pages that show Printing UI are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | relatedActiveContentsExist":{"message":"The page was opened using 'window.open()' and another tab has a reference to it, or the page opened a window."},"panels/application/components/BackForwardCacheStrings.ts | rendererProcessCrashed":{"message":"The renderer process for the page in back/forward cache crashed."},"panels/application/components/BackForwardCacheStrings.ts | rendererProcessKilled":{"message":"The renderer process for the page in back/forward cache was killed."},"panels/application/components/BackForwardCacheStrings.ts | requestedAudioCapturePermission":{"message":"Pages that have requested audio capture permissions are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | requestedBackForwardCacheBlockedSensors":{"message":"Pages that have requested sensor permissions are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | requestedBackgroundWorkPermission":{"message":"Pages that have requested background sync or fetch permissions are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | requestedMIDIPermission":{"message":"Pages that have requested MIDI permissions are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | requestedNotificationsPermission":{"message":"Pages that have requested notifications permissions are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | requestedStorageAccessGrant":{"message":"Pages that have requested storage access are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | requestedVideoCapturePermission":{"message":"Pages that have requested video capture permissions are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | schemeNotHTTPOrHTTPS":{"message":"Only pages whose URL scheme is HTTP / HTTPS can be cached."},"panels/application/components/BackForwardCacheStrings.ts | serviceWorkerClaim":{"message":"The page was claimed by a service worker while it is in back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | serviceWorkerPostMessage":{"message":"A service worker attempted to send the page in back/forward cache a MessageEvent."},"panels/application/components/BackForwardCacheStrings.ts | serviceWorkerUnregistration":{"message":"ServiceWorker was unregistered while a page was in back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | serviceWorkerVersionActivation":{"message":"The page was evicted from back/forward cache due to a service worker activation."},"panels/application/components/BackForwardCacheStrings.ts | sessionRestored":{"message":"Chrome restarted and cleared the back/forward cache entries."},"panels/application/components/BackForwardCacheStrings.ts | sharedWorker":{"message":"Pages that use SharedWorker are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | speechRecognizer":{"message":"Pages that use SpeechRecognizer are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | speechSynthesis":{"message":"Pages that use SpeechSynthesis are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | subframeIsNavigating":{"message":"An iframe on the page started a navigation that did not complete."},"panels/application/components/BackForwardCacheStrings.ts | subresourceHasCacheControlNoCache":{"message":"Pages whose subresource has cache-control:no-cache cannot enter back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | subresourceHasCacheControlNoStore":{"message":"Pages whose subresource has cache-control:no-store cannot enter back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | timeout":{"message":"The page exceeded the maximum time in back/forward cache and was expired."},"panels/application/components/BackForwardCacheStrings.ts | timeoutPuttingInCache":{"message":"The page timed out entering back/forward cache (likely due to long-running pagehide handlers)."},"panels/application/components/BackForwardCacheStrings.ts | unloadHandlerExistsInMainFrame":{"message":"The page has an unload handler in the main frame."},"panels/application/components/BackForwardCacheStrings.ts | unloadHandlerExistsInSubFrame":{"message":"The page has an unload handler in a sub frame."},"panels/application/components/BackForwardCacheStrings.ts | userAgentOverrideDiffers":{"message":"Browser has changed the user agent override header."},"panels/application/components/BackForwardCacheStrings.ts | wasGrantedMediaAccess":{"message":"Pages that have granted access to record video or audio are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | webDatabase":{"message":"Pages that use WebDatabase are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | webHID":{"message":"Pages that use WebHID are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | webLocks":{"message":"Pages that use WebLocks are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | webNfc":{"message":"Pages that use WebNfc are not currently eligible for back/forwad cache."},"panels/application/components/BackForwardCacheStrings.ts | webOTPService":{"message":"Pages that use WebOTPService are not currently eligible for bfcache."},"panels/application/components/BackForwardCacheStrings.ts | webRTC":{"message":"Pages with WebRTC cannot enter back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | webRTCSticky":{"message":"Undefined"},"panels/application/components/BackForwardCacheStrings.ts | webShare":{"message":"Pages that use WebShare are not currently eligible for back/forwad cache."},"panels/application/components/BackForwardCacheStrings.ts | webSocket":{"message":"Pages with WebSocket cannot enter back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | webSocketSticky":{"message":"Undefined"},"panels/application/components/BackForwardCacheStrings.ts | webTransport":{"message":"Pages with WebTransport cannot enter back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | webTransportSticky":{"message":"Undefined"},"panels/application/components/BackForwardCacheStrings.ts | webXR":{"message":"Pages that use WebXR are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheView.ts | backForwardCacheTitle":{"message":"Back/forward cache"},"panels/application/components/BackForwardCacheView.ts | blankURLTitle":{"message":"Blank URL [{PH1}]"},"panels/application/components/BackForwardCacheView.ts | blockingExtensionId":{"message":"Extension id: "},"panels/application/components/BackForwardCacheView.ts | circumstantial":{"message":"Not Actionable"},"panels/application/components/BackForwardCacheView.ts | circumstantialExplanation":{"message":"These reasons are not actionable i.e. caching was prevented by something outside of the direct control of the page."},"panels/application/components/BackForwardCacheView.ts | framesPerIssue":{"message":"{n, plural, =1 {# frame} other {# frames}}"},"panels/application/components/BackForwardCacheView.ts | framesTitle":{"message":"Frames"},"panels/application/components/BackForwardCacheView.ts | issuesInMultipleFrames":{"message":"{n, plural, =1 {# issue found in {m} frames.} other {# issues found in {m} frames.}}"},"panels/application/components/BackForwardCacheView.ts | issuesInSingleFrame":{"message":"{n, plural, =1 {# issue found in 1 frame.} other {# issues found in 1 frame.}}"},"panels/application/components/BackForwardCacheView.ts | learnMore":{"message":"Learn more: back/forward cache eligibility"},"panels/application/components/BackForwardCacheView.ts | mainFrame":{"message":"Main Frame"},"panels/application/components/BackForwardCacheView.ts | neverUseUnload":{"message":"Learn more: Never use unload handler"},"panels/application/components/BackForwardCacheView.ts | normalNavigation":{"message":"Not served from back/forward cache: to trigger back/forward cache, use Chrome's back/forward buttons, or use the test button below to automatically navigate away and back."},"panels/application/components/BackForwardCacheView.ts | pageSupportNeeded":{"message":"Actionable"},"panels/application/components/BackForwardCacheView.ts | pageSupportNeededExplanation":{"message":"These reasons are actionable i.e. they can be cleaned up to make the page eligible for back/forward cache."},"panels/application/components/BackForwardCacheView.ts | restoredFromBFCache":{"message":"Successfully served from back/forward cache."},"panels/application/components/BackForwardCacheView.ts | runningTest":{"message":"Running test"},"panels/application/components/BackForwardCacheView.ts | runTest":{"message":"Test back/forward cache"},"panels/application/components/BackForwardCacheView.ts | supportPending":{"message":"Pending Support"},"panels/application/components/BackForwardCacheView.ts | supportPendingExplanation":{"message":"Chrome support for these reasons is pending i.e. they will not prevent the page from being eligible for back/forward cache in a future version of Chrome."},"panels/application/components/BackForwardCacheView.ts | unavailable":{"message":"unavailable"},"panels/application/components/BackForwardCacheView.ts | unknown":{"message":"Unknown Status"},"panels/application/components/BackForwardCacheView.ts | url":{"message":"URL:"},"panels/application/components/BounceTrackingMitigationsView.ts | bounceTrackingMitigationsTitle":{"message":"Bounce Tracking Mitigations"},"panels/application/components/BounceTrackingMitigationsView.ts | checkingPotentialTrackers":{"message":"Checking for potential bounce tracking sites."},"panels/application/components/BounceTrackingMitigationsView.ts | forceRun":{"message":"Force run"},"panels/application/components/BounceTrackingMitigationsView.ts | learnMore":{"message":"Learn more: Bounce Tracking Mitigations"},"panels/application/components/BounceTrackingMitigationsView.ts | noPotentialBounceTrackersIdentified":{"message":"State was not cleared for any potential bounce tracking sites. Either none were identified, bounce tracking mitigations are not enabled, or third-party cookies are not blocked."},"panels/application/components/BounceTrackingMitigationsView.ts | runningMitigations":{"message":"Running"},"panels/application/components/BounceTrackingMitigationsView.ts | stateDeletedFor":{"message":"State was deleted for the following sites:"},"panels/application/components/EndpointsGrid.ts | noEndpointsToDisplay":{"message":"No endpoints to display"},"panels/application/components/FrameDetailsView.ts | additionalInformation":{"message":"Additional Information"},"panels/application/components/FrameDetailsView.ts | adStatus":{"message":"Ad Status"},"panels/application/components/FrameDetailsView.ts | aFrameAncestorIsAnInsecure":{"message":"A frame ancestor is an insecure context"},"panels/application/components/FrameDetailsView.ts | apiAvailability":{"message":"API availability"},"panels/application/components/FrameDetailsView.ts | availabilityOfCertainApisDepends":{"message":"Availability of certain APIs depends on the document being cross-origin isolated."},"panels/application/components/FrameDetailsView.ts | available":{"message":"available"},"panels/application/components/FrameDetailsView.ts | availableNotTransferable":{"message":"available, not transferable"},"panels/application/components/FrameDetailsView.ts | availableTransferable":{"message":"available, transferable"},"panels/application/components/FrameDetailsView.ts | child":{"message":"child"},"panels/application/components/FrameDetailsView.ts | childDescription":{"message":"This frame has been identified as a child frame of an ad"},"panels/application/components/FrameDetailsView.ts | clickToRevealInElementsPanel":{"message":"Click to reveal in Elements panel"},"panels/application/components/FrameDetailsView.ts | clickToRevealInNetworkPanel":{"message":"Click to reveal in Network panel"},"panels/application/components/FrameDetailsView.ts | clickToRevealInNetworkPanelMight":{"message":"Click to reveal in Network panel (might require page reload)"},"panels/application/components/FrameDetailsView.ts | clickToRevealInSourcesPanel":{"message":"Click to reveal in Sources panel"},"panels/application/components/FrameDetailsView.ts | createdByAdScriptExplanation":{"message":"There was an ad script in the (async) stack when this frame was created. Examining the creation stack trace of this frame might provide more insight."},"panels/application/components/FrameDetailsView.ts | creationStackTrace":{"message":"Frame Creation Stack Trace"},"panels/application/components/FrameDetailsView.ts | creationStackTraceExplanation":{"message":"This frame was created programmatically. The stack trace shows where this happened."},"panels/application/components/FrameDetailsView.ts | creatorAdScript":{"message":"Creator Ad Script"},"panels/application/components/FrameDetailsView.ts | crossoriginIsolated":{"message":"Cross-Origin Isolated"},"panels/application/components/FrameDetailsView.ts | document":{"message":"Document"},"panels/application/components/FrameDetailsView.ts | frameId":{"message":"Frame ID"},"panels/application/components/FrameDetailsView.ts | learnMore":{"message":"Learn more"},"panels/application/components/FrameDetailsView.ts | localhostIsAlwaysASecureContext":{"message":"Localhost is always a secure context"},"panels/application/components/FrameDetailsView.ts | matchedBlockingRuleExplanation":{"message":"This frame is considered an ad frame because its current (or previous) main document is an ad resource."},"panels/application/components/FrameDetailsView.ts | measureMemory":{"message":"Measure Memory"},"panels/application/components/FrameDetailsView.ts | no":{"message":"No"},"panels/application/components/FrameDetailsView.ts | origin":{"message":"Origin"},"panels/application/components/FrameDetailsView.ts | ownerElement":{"message":"Owner Element"},"panels/application/components/FrameDetailsView.ts | parentIsAdExplanation":{"message":"This frame is considered an ad frame because its parent frame is an ad frame."},"panels/application/components/FrameDetailsView.ts | prerendering":{"message":"Prerendering"},"panels/application/components/FrameDetailsView.ts | prerenderingStatus":{"message":"Prerendering Status"},"panels/application/components/FrameDetailsView.ts | refresh":{"message":"Refresh"},"panels/application/components/FrameDetailsView.ts | reportingTo":{"message":"reporting to"},"panels/application/components/FrameDetailsView.ts | requiresCrossoriginIsolated":{"message":"requires cross-origin isolated context"},"panels/application/components/FrameDetailsView.ts | root":{"message":"root"},"panels/application/components/FrameDetailsView.ts | rootDescription":{"message":"This frame has been identified as the root frame of an ad"},"panels/application/components/FrameDetailsView.ts | secureContext":{"message":"Secure Context"},"panels/application/components/FrameDetailsView.ts | securityIsolation":{"message":"Security & Isolation"},"panels/application/components/FrameDetailsView.ts | sharedarraybufferConstructorIs":{"message":"SharedArrayBuffer constructor is available and SABs can be transferred via postMessage"},"panels/application/components/FrameDetailsView.ts | sharedarraybufferConstructorIsAvailable":{"message":"SharedArrayBuffer constructor is available but SABs cannot be transferred via postMessage"},"panels/application/components/FrameDetailsView.ts | theFramesSchemeIsInsecure":{"message":"The frame's scheme is insecure"},"panels/application/components/FrameDetailsView.ts | thePerformanceAPI":{"message":"The performance.measureUserAgentSpecificMemory() API is available"},"panels/application/components/FrameDetailsView.ts | thePerformancemeasureuseragentspecificmemory":{"message":"The performance.measureUserAgentSpecificMemory() API is not available"},"panels/application/components/FrameDetailsView.ts | thisAdditionalDebugging":{"message":"This additional (debugging) information is shown because the 'Protocol Monitor' experiment is enabled."},"panels/application/components/FrameDetailsView.ts | transferRequiresCrossoriginIsolatedPermission":{"message":"SharedArrayBuffer transfer requires enabling the permission policy:"},"panels/application/components/FrameDetailsView.ts | unavailable":{"message":"unavailable"},"panels/application/components/FrameDetailsView.ts | unreachableUrl":{"message":"Unreachable URL"},"panels/application/components/FrameDetailsView.ts | url":{"message":"URL"},"panels/application/components/FrameDetailsView.ts | willRequireCrossoriginIsolated":{"message":"⚠️ will require cross-origin isolated context in the future"},"panels/application/components/FrameDetailsView.ts | yes":{"message":"Yes"},"panels/application/components/InterestGroupAccessGrid.ts | allInterestGroupStorageEvents":{"message":"All interest group storage events."},"panels/application/components/InterestGroupAccessGrid.ts | eventTime":{"message":"Event Time"},"panels/application/components/InterestGroupAccessGrid.ts | eventType":{"message":"Access Type"},"panels/application/components/InterestGroupAccessGrid.ts | groupName":{"message":"Name"},"panels/application/components/InterestGroupAccessGrid.ts | groupOwner":{"message":"Owner"},"panels/application/components/InterestGroupAccessGrid.ts | noEvents":{"message":"No interest group events recorded."},"panels/application/components/OriginTrialTreeView.ts | expiryTime":{"message":"Expiry Time"},"panels/application/components/OriginTrialTreeView.ts | isThirdParty":{"message":"Third Party"},"panels/application/components/OriginTrialTreeView.ts | matchSubDomains":{"message":"Subdomain Matching"},"panels/application/components/OriginTrialTreeView.ts | origin":{"message":"Origin"},"panels/application/components/OriginTrialTreeView.ts | rawTokenText":{"message":"Raw Token"},"panels/application/components/OriginTrialTreeView.ts | status":{"message":"Token Status"},"panels/application/components/OriginTrialTreeView.ts | token":{"message":"Token"},"panels/application/components/OriginTrialTreeView.ts | tokens":{"message":"{PH1} tokens"},"panels/application/components/OriginTrialTreeView.ts | trialName":{"message":"Trial Name"},"panels/application/components/OriginTrialTreeView.ts | usageRestriction":{"message":"Usage Restriction"},"panels/application/components/PermissionsPolicySection.ts | allowedFeatures":{"message":"Allowed Features"},"panels/application/components/PermissionsPolicySection.ts | clickToShowHeader":{"message":"Click to reveal the request whose \"Permissions-Policy\" HTTP header disables this feature."},"panels/application/components/PermissionsPolicySection.ts | clickToShowIframe":{"message":"Click to reveal the top-most iframe which does not allow this feature in the elements panel."},"panels/application/components/PermissionsPolicySection.ts | disabledByFencedFrame":{"message":"disabled inside a fencedframe"},"panels/application/components/PermissionsPolicySection.ts | disabledByHeader":{"message":"disabled by \"Permissions-Policy\" header"},"panels/application/components/PermissionsPolicySection.ts | disabledByIframe":{"message":"missing in iframe \"allow\" attribute"},"panels/application/components/PermissionsPolicySection.ts | disabledFeatures":{"message":"Disabled Features"},"panels/application/components/PermissionsPolicySection.ts | hideDetails":{"message":"Hide details"},"panels/application/components/PermissionsPolicySection.ts | showDetails":{"message":"Show details"},"panels/application/components/Prerender2.ts | Activated":{"message":"Activated."},"panels/application/components/Prerender2.ts | ActivatedBeforeStarted":{"message":"Activated before started"},"panels/application/components/Prerender2.ts | ActivationNavigationParameterMismatch":{"message":"The page was prerendered, but the navigation ended up being performed differently than the original prerender, so the prerendered page could not be activated."},"panels/application/components/Prerender2.ts | AudioOutputDeviceRequested":{"message":"Prerendering has not supported the AudioContext API yet."},"panels/application/components/Prerender2.ts | BlockedByClient":{"message":"Resource load is blocked by the client."},"panels/application/components/Prerender2.ts | CancelAllHostsForTesting":{"message":"CancelAllHostsForTesting."},"panels/application/components/Prerender2.ts | ClientCertRequested":{"message":"The page is requesting client cert, which is not suitable for a hidden page like prerendering."},"panels/application/components/Prerender2.ts | CrossSiteNavigation":{"message":"The prerendered page navigated to a cross-site URL after loading. Currently prerendering cross-site pages is disallowed."},"panels/application/components/Prerender2.ts | CrossSiteRedirect":{"message":"Attempted to prerender a URL which redirected to a cross-site URL. Currently prerendering cross-site pages is disallowed."},"panels/application/components/Prerender2.ts | DataSaverEnabled":{"message":"Data saver enabled"},"panels/application/components/Prerender2.ts | Destroyed":{"message":"A prerendered page was abandoned for unknown reasons."},"panels/application/components/Prerender2.ts | DidFailLoad":{"message":"DidFailLoadWithError happened during prerendering."},"panels/application/components/Prerender2.ts | DisallowedApiMethod":{"message":"Disallowed API method"},"panels/application/components/Prerender2.ts | Download":{"message":"Download is disallowed in Prerender."},"panels/application/components/Prerender2.ts | EmbedderTriggeredAndCrossOriginRedirected":{"message":"Prerendering triggered by Chrome internal (e.g., Omnibox prerendering) is is canceled because the navigation is redirected to another cross-origin page."},"panels/application/components/Prerender2.ts | EmbedderTriggeredAndSameOriginRedirected":{"message":"Prerendering triggered by Chrome internal (e.g., Omnibox prerendering) is canceled because the navigation is redirected to another same-origin page."},"panels/application/components/Prerender2.ts | FailToGetMemoryUsage":{"message":"Fail to get memory usage"},"panels/application/components/Prerender2.ts | HasEffectiveUrl":{"message":"Has effective URL"},"panels/application/components/Prerender2.ts | InactivePageRestriction":{"message":"Inactive page restriction"},"panels/application/components/Prerender2.ts | InProgressNavigation":{"message":"InProgressNavigation."},"panels/application/components/Prerender2.ts | InvalidSchemeNavigation":{"message":"Only HTTP(S) navigation allowed for Prerender."},"panels/application/components/Prerender2.ts | InvalidSchemeRedirect":{"message":"Attempted to prerender a URL that redirected to a non-HTTP(S) URL. Only HTTP(S) pages can be prerendered."},"panels/application/components/Prerender2.ts | LoginAuthRequested":{"message":"Prerender does not support auth requests from UI."},"panels/application/components/Prerender2.ts | LowEndDevice":{"message":"Prerendering is not supported for low-memory devices."},"panels/application/components/Prerender2.ts | MainFrameNavigation":{"message":"Navigations after the initial prerendering navigation are disallowed"},"panels/application/components/Prerender2.ts | MaxNumOfRunningPrerendersExceeded":{"message":"Max number of prerendering exceeded."},"panels/application/components/Prerender2.ts | MemoryLimitExceeded":{"message":"Memory limit exceeded"},"panels/application/components/Prerender2.ts | MixedContent":{"message":"Prerendering is canceled by a mixed content frame."},"panels/application/components/Prerender2.ts | MojoBinderPolicy":{"message":"A disallowed API was used by the prerendered page"},"panels/application/components/Prerender2.ts | NavigationBadHttpStatus":{"message":"The initial prerendering navigation was not successful due to the server returning a non-200/204/205 status code."},"panels/application/components/Prerender2.ts | NavigationNotCommitted":{"message":"The prerendering page is not committed in the end."},"panels/application/components/Prerender2.ts | NavigationRequestBlockedByCsp":{"message":"Navigation request is blocked by CSP."},"panels/application/components/Prerender2.ts | NavigationRequestNetworkError":{"message":"Encountered a network error during prerendering."},"panels/application/components/Prerender2.ts | PrerenderingOngoing":{"message":"Prerendering ongoing"},"panels/application/components/Prerender2.ts | RendererProcessCrashed":{"message":"The prerendered page crashed."},"panels/application/components/Prerender2.ts | RendererProcessKilled":{"message":"The renderer process for the prerendering page was killed."},"panels/application/components/Prerender2.ts | SameSiteCrossOriginNavigation":{"message":"The prerendered page navigated to a same-site cross-origin URL after loading. Currently prerendering cross-origin pages is disallowed."},"panels/application/components/Prerender2.ts | SameSiteCrossOriginNavigationNotOptIn":{"message":"The prerendered page navigated to a same-site cross-origin URL after loading. This is disallowed unless the destination site sends a Supports-Loading-Mode: credentialed-prerender header."},"panels/application/components/Prerender2.ts | SameSiteCrossOriginRedirect":{"message":"Attempted to prerender a URL which redirected to a same-site cross-origin URL. Currently prerendering cross-origin pages is disallowed."},"panels/application/components/Prerender2.ts | SameSiteCrossOriginRedirectNotOptIn":{"message":"Attempted to prerender a URL which redirected to a same-site cross-origin URL. This is disallowed unless the destination site sends a Supports-Loading-Mode: credentialed-prerender header."},"panels/application/components/Prerender2.ts | SslCertificateError":{"message":"SSL certificate error."},"panels/application/components/Prerender2.ts | StartFailed":{"message":"Start failed"},"panels/application/components/Prerender2.ts | Stop":{"message":"The tab is stopped."},"panels/application/components/Prerender2.ts | TriggerBackgrounded":{"message":"The tab is in the background"},"panels/application/components/Prerender2.ts | TriggerDestroyed":{"message":"Prerender is not activated and destroyed with the trigger."},"panels/application/components/Prerender2.ts | UaChangeRequiresReload":{"message":"Reload is needed after UserAgentOverride."},"panels/application/components/ProtocolHandlersView.ts | dropdownLabel":{"message":"Select protocol handler"},"panels/application/components/ProtocolHandlersView.ts | manifest":{"message":"manifest"},"panels/application/components/ProtocolHandlersView.ts | needHelpReadOur":{"message":"Need help? Read {PH1}."},"panels/application/components/ProtocolHandlersView.ts | protocolDetected":{"message":"Found valid protocol handler registration in the {PH1}. With the app installed, test the registered protocols."},"panels/application/components/ProtocolHandlersView.ts | protocolHandlerRegistrations":{"message":"URL protocol handler registration for PWAs"},"panels/application/components/ProtocolHandlersView.ts | protocolNotDetected":{"message":"Define protocol handlers in the {PH1} to register your app as a handler for custom protocols when your app is installed."},"panels/application/components/ProtocolHandlersView.ts | testProtocol":{"message":"Test protocol"},"panels/application/components/ProtocolHandlersView.ts | textboxLabel":{"message":"Query parameter or endpoint for protocol handler"},"panels/application/components/ProtocolHandlersView.ts | textboxPlaceholder":{"message":"Enter URL"},"panels/application/components/ReportsGrid.ts | destination":{"message":"Destination"},"panels/application/components/ReportsGrid.ts | generatedAt":{"message":"Generated at"},"panels/application/components/ReportsGrid.ts | noReportsToDisplay":{"message":"No reports to display"},"panels/application/components/ReportsGrid.ts | status":{"message":"Status"},"panels/application/components/SharedStorageAccessGrid.ts | allSharedStorageEvents":{"message":"All shared storage events for this page."},"panels/application/components/SharedStorageAccessGrid.ts | eventParams":{"message":"Optional Event Params"},"panels/application/components/SharedStorageAccessGrid.ts | eventTime":{"message":"Event Time"},"panels/application/components/SharedStorageAccessGrid.ts | eventType":{"message":"Access Type"},"panels/application/components/SharedStorageAccessGrid.ts | mainFrameId":{"message":"Main Frame ID"},"panels/application/components/SharedStorageAccessGrid.ts | noEvents":{"message":"No shared storage events recorded."},"panels/application/components/SharedStorageAccessGrid.ts | ownerOrigin":{"message":"Owner Origin"},"panels/application/components/SharedStorageAccessGrid.ts | sharedStorage":{"message":"Shared Storage"},"panels/application/components/SharedStorageMetadataView.ts | budgetExplanation":{"message":"Remaining data leakage allowed within a 24-hour period for this origin in bits of entropy"},"panels/application/components/SharedStorageMetadataView.ts | creation":{"message":"Creation Time"},"panels/application/components/SharedStorageMetadataView.ts | entropyBudget":{"message":"Entropy Budget for Fenced Frames"},"panels/application/components/SharedStorageMetadataView.ts | notYetCreated":{"message":"Not yet created"},"panels/application/components/SharedStorageMetadataView.ts | numEntries":{"message":"Number of Entries"},"panels/application/components/SharedStorageMetadataView.ts | resetBudget":{"message":"Reset Budget"},"panels/application/components/SharedStorageMetadataView.ts | sharedStorage":{"message":"Shared Storage"},"panels/application/components/StackTrace.ts | cannotRenderStackTrace":{"message":"Cannot render stack trace"},"panels/application/components/StackTrace.ts | showLess":{"message":"Show less"},"panels/application/components/StackTrace.ts | showSMoreFrames":{"message":"{n, plural, =1 {Show # more frame} other {Show # more frames}}"},"panels/application/components/StorageMetadataView.ts | bucketName":{"message":"Bucket name"},"panels/application/components/StorageMetadataView.ts | durability":{"message":"Durability"},"panels/application/components/StorageMetadataView.ts | expiration":{"message":"Expiration"},"panels/application/components/StorageMetadataView.ts | isOpaque":{"message":"Is opaque"},"panels/application/components/StorageMetadataView.ts | isThirdParty":{"message":"Is third-party"},"panels/application/components/StorageMetadataView.ts | loading":{"message":"Loading…"},"panels/application/components/StorageMetadataView.ts | no":{"message":"No"},"panels/application/components/StorageMetadataView.ts | none":{"message":"None"},"panels/application/components/StorageMetadataView.ts | opaque":{"message":"(opaque)"},"panels/application/components/StorageMetadataView.ts | origin":{"message":"Origin"},"panels/application/components/StorageMetadataView.ts | persistent":{"message":"Is persistent"},"panels/application/components/StorageMetadataView.ts | quota":{"message":"Quota"},"panels/application/components/StorageMetadataView.ts | topLevelSite":{"message":"Top-level site"},"panels/application/components/StorageMetadataView.ts | yes":{"message":"Yes"},"panels/application/components/StorageMetadataView.ts | yesBecauseAncestorChainHasCrossSite":{"message":"Yes, because the ancestry chain contains a third-party origin"},"panels/application/components/StorageMetadataView.ts | yesBecauseKeyIsOpaque":{"message":"Yes, because the storage key is opaque"},"panels/application/components/StorageMetadataView.ts | yesBecauseOriginNotInTopLevelSite":{"message":"Yes, because the origin is outside of the top-level site"},"panels/application/components/StorageMetadataView.ts | yesBecauseTopLevelIsOpaque":{"message":"Yes, because the top-level site is opaque"},"panels/application/components/TrustTokensView.ts | allStoredTrustTokensAvailableIn":{"message":"All stored Private State Tokens available in this browser instance."},"panels/application/components/TrustTokensView.ts | deleteTrustTokens":{"message":"Delete all stored Private State Tokens issued by {PH1}."},"panels/application/components/TrustTokensView.ts | issuer":{"message":"Issuer"},"panels/application/components/TrustTokensView.ts | noTrustTokensStored":{"message":"No Private State Tokens are currently stored."},"panels/application/components/TrustTokensView.ts | storedTokenCount":{"message":"Stored token count"},"panels/application/components/TrustTokensView.ts | trustTokens":{"message":"Private State Tokens"},"panels/application/CookieItemsView.ts | clearAllCookies":{"message":"Clear all cookies"},"panels/application/CookieItemsView.ts | clearFilteredCookies":{"message":"Clear filtered cookies"},"panels/application/CookieItemsView.ts | cookies":{"message":"Cookies"},"panels/application/CookieItemsView.ts | numberOfCookiesShownInTableS":{"message":"Number of cookies shown in table: {PH1}"},"panels/application/CookieItemsView.ts | onlyShowCookiesWhichHaveAn":{"message":"Only show cookies that have an associated issue"},"panels/application/CookieItemsView.ts | onlyShowCookiesWithAnIssue":{"message":"Only show cookies with an issue"},"panels/application/CookieItemsView.ts | selectACookieToPreviewItsValue":{"message":"Select a cookie to preview its value"},"panels/application/CookieItemsView.ts | showUrlDecoded":{"message":"Show URL-decoded"},"panels/application/DatabaseModel.ts | anUnexpectedErrorSOccurred":{"message":"An unexpected error {PH1} occurred."},"panels/application/DatabaseModel.ts | databaseNoLongerHasExpected":{"message":"Database no longer has expected version."},"panels/application/DatabaseQueryView.ts | databaseQuery":{"message":"Database Query"},"panels/application/DatabaseQueryView.ts | queryS":{"message":"Query: {PH1}"},"panels/application/DatabaseTableView.ts | anErrorOccurredTryingToreadTheS":{"message":"An error occurred trying to read the \"{PH1}\" table."},"panels/application/DatabaseTableView.ts | database":{"message":"Database"},"panels/application/DatabaseTableView.ts | refresh":{"message":"Refresh"},"panels/application/DatabaseTableView.ts | theStableIsEmpty":{"message":"The \"{PH1}\" table is empty."},"panels/application/DatabaseTableView.ts | visibleColumns":{"message":"Visible columns"},"panels/application/DOMStorageItemsView.ts | domStorage":{"message":"DOM Storage"},"panels/application/DOMStorageItemsView.ts | domStorageItemDeleted":{"message":"The storage item was deleted."},"panels/application/DOMStorageItemsView.ts | domStorageItems":{"message":"DOM Storage Items"},"panels/application/DOMStorageItemsView.ts | domStorageItemsCleared":{"message":"DOM Storage Items cleared"},"panels/application/DOMStorageItemsView.ts | domStorageNumberEntries":{"message":"Number of entries shown in table: {PH1}"},"panels/application/DOMStorageItemsView.ts | key":{"message":"Key"},"panels/application/DOMStorageItemsView.ts | selectAValueToPreview":{"message":"Select a value to preview"},"panels/application/DOMStorageItemsView.ts | value":{"message":"Value"},"panels/application/IndexedDBViews.ts | clearObjectStore":{"message":"Clear object store"},"panels/application/IndexedDBViews.ts | collapse":{"message":"Collapse"},"panels/application/IndexedDBViews.ts | dataMayBeStale":{"message":"Data may be stale"},"panels/application/IndexedDBViews.ts | deleteDatabase":{"message":"Delete database"},"panels/application/IndexedDBViews.ts | deleteSelected":{"message":"Delete selected"},"panels/application/IndexedDBViews.ts | expandRecursively":{"message":"Expand Recursively"},"panels/application/IndexedDBViews.ts | idb":{"message":"IDB"},"panels/application/IndexedDBViews.ts | indexedDb":{"message":"Indexed DB"},"panels/application/IndexedDBViews.ts | keyGeneratorValueS":{"message":"Key generator value: {PH1}"},"panels/application/IndexedDBViews.ts | keyPath":{"message":"Key path: "},"panels/application/IndexedDBViews.ts | keyString":{"message":"Key"},"panels/application/IndexedDBViews.ts | objectStores":{"message":"Object stores"},"panels/application/IndexedDBViews.ts | pleaseConfirmDeleteOfSDatabase":{"message":"Please confirm delete of \"{PH1}\" database."},"panels/application/IndexedDBViews.ts | primaryKey":{"message":"Primary key"},"panels/application/IndexedDBViews.ts | refresh":{"message":"Refresh"},"panels/application/IndexedDBViews.ts | refreshDatabase":{"message":"Refresh database"},"panels/application/IndexedDBViews.ts | showNextPage":{"message":"Show next page"},"panels/application/IndexedDBViews.ts | showPreviousPage":{"message":"Show previous page"},"panels/application/IndexedDBViews.ts | someEntriesMayHaveBeenModified":{"message":"Some entries may have been modified"},"panels/application/IndexedDBViews.ts | startFromKey":{"message":"Start from key"},"panels/application/IndexedDBViews.ts | totalEntriesS":{"message":"Total entries: {PH1}"},"panels/application/IndexedDBViews.ts | valueString":{"message":"Value"},"panels/application/IndexedDBViews.ts | version":{"message":"Version"},"panels/application/InterestGroupStorageView.ts | clickToDisplayBody":{"message":"Click on any interest group event to display the group's current state"},"panels/application/InterestGroupStorageView.ts | noDataAvailable":{"message":"No details available for the selected interest group. The browser may have left the group."},"panels/application/InterestGroupTreeElement.ts | interestGroups":{"message":"Interest Groups"},"panels/application/OpenedWindowDetailsView.ts | accessToOpener":{"message":"Access to opener"},"panels/application/OpenedWindowDetailsView.ts | clickToRevealInElementsPanel":{"message":"Click to reveal in Elements panel"},"panels/application/OpenedWindowDetailsView.ts | closed":{"message":"closed"},"panels/application/OpenedWindowDetailsView.ts | crossoriginEmbedderPolicy":{"message":"Cross-Origin Embedder Policy"},"panels/application/OpenedWindowDetailsView.ts | document":{"message":"Document"},"panels/application/OpenedWindowDetailsView.ts | no":{"message":"No"},"panels/application/OpenedWindowDetailsView.ts | openerFrame":{"message":"Opener Frame"},"panels/application/OpenedWindowDetailsView.ts | reportingTo":{"message":"reporting to"},"panels/application/OpenedWindowDetailsView.ts | security":{"message":"Security"},"panels/application/OpenedWindowDetailsView.ts | securityIsolation":{"message":"Security & Isolation"},"panels/application/OpenedWindowDetailsView.ts | showsWhetherTheOpenedWindowIs":{"message":"Shows whether the opened window is able to access its opener and vice versa"},"panels/application/OpenedWindowDetailsView.ts | type":{"message":"Type"},"panels/application/OpenedWindowDetailsView.ts | unknown":{"message":"Unknown"},"panels/application/OpenedWindowDetailsView.ts | url":{"message":"URL"},"panels/application/OpenedWindowDetailsView.ts | webWorker":{"message":"Web Worker"},"panels/application/OpenedWindowDetailsView.ts | windowWithoutTitle":{"message":"Window without title"},"panels/application/OpenedWindowDetailsView.ts | worker":{"message":"worker"},"panels/application/OpenedWindowDetailsView.ts | yes":{"message":"Yes"},"panels/application/preloading/components/PreloadingDetailsReportView.ts | detailedStatusFailure":{"message":"Preloading failed."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | detailedStatusNotTriggered":{"message":"Preloading attempt is not yet triggered."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | detailedStatusPending":{"message":"Preloading attempt is eligible but pending."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | detailedStatusReady":{"message":"Preloading finished and the result is ready for the next navigation."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | detailedStatusRunning":{"message":"Preloading is running."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | detailedStatusSuccess":{"message":"Preloading finished and used for a navigation."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | detailsAction":{"message":"Action"},"panels/application/preloading/components/PreloadingDetailsReportView.ts | detailsDetailedInformation":{"message":"Detailed information"},"panels/application/preloading/components/PreloadingDetailsReportView.ts | detailsFailureReason":{"message":"Failure reason"},"panels/application/preloading/components/PreloadingDetailsReportView.ts | detailsRuleSet":{"message":"Rule set"},"panels/application/preloading/components/PreloadingDetailsReportView.ts | detailsStatus":{"message":"Status"},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusActivatedDuringMainFrameNavigation":{"message":"Prerendered page activated during initiating page's main frame navigation."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusActivationFramePolicyNotCompatible":{"message":"The prerender was not used because the sandboxing flags or permissions policy of the initiating page was not compatible with those of the prerendering page."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusActivationNavigationParameterMismatch":{"message":"The prerender was not used because during activation time, different navigation parameters (e.g., HTTP headers) were calculated than during the original prerendering navigation request."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusAudioOutputDeviceRequested":{"message":"The prerendered page requested audio output, which is currently not supported."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusBatterySaverEnabled":{"message":"The prerender was not performed because the user requested that the browser use less battery."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusBlockedByClient":{"message":"Some resource load was blocked."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusClientCertRequested":{"message":"The prerendering navigation required a HTTP client certificate."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusCrossSiteNavigationInInitialNavigation":{"message":"The prerendering navigation failed because it targeted a cross-site URL."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusCrossSiteNavigationInMainFrameNavigation":{"message":"The prerendered page navigated to a cross-site URL."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusCrossSiteRedirectInInitialNavigation":{"message":"The prerendering navigation failed because the prerendered URL redirected to a cross-site URL."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusCrossSiteRedirectInMainFrameNavigation":{"message":"The prerendered page navigated to a URL which redirected to a cross-site URL."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusDataSaverEnabled":{"message":"The prerender was not performed because the user requested that the browser use less data."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusDownload":{"message":"The prerendered page attempted to initiate a download, which is currently not supported."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusFailToGetMemoryUsage":{"message":"The prerender was not performed because the browser encountered an internal error attempting to determine current memory usage."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusHasEffectiveUrl":{"message":"The initiating page cannot perform prerendering, because it has an effective URL that is different from its normal URL. (For example, the New Tab Page, or hosted apps.)"},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusInvalidSchemeNavigation":{"message":"The URL was not eligible to be prerendered because its scheme was not http: or https:."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusInvalidSchemeRedirect":{"message":"The prerendering navigation failed because it redirected to a URL whose scheme was not http: or https:."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusLoginAuthRequested":{"message":"The prerendering navigation required HTTP authentication, which is currently not supported."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusLowEndDevice":{"message":"The prerender was not performed because this device does not have enough total system memory to support prerendering."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusMainFrameNavigation":{"message":"The prerendered page navigated itself to another URL, which is currently not supported."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusMaxNumOfRunningPrerendersExceeded":{"message":"The prerender was not performed because the initiating page already has too many prerenders ongoing. Remove other speculation rules to enable further prerendering."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusMemoryLimitExceeded":{"message":"The prerender was not performed because the browser exceeded the prerendering memory limit."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusMemoryPressureAfterTriggered":{"message":"The prerendered page was unloaded because the browser came under critical memory pressure."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusMemoryPressureOnTrigger":{"message":"The prerender was not performed because the browser was under critical memory pressure."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusMixedContent":{"message":"The prerendered page contained mixed content."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusMojoBinderPolicy":{"message":"The prerendered page used a forbidden JavaScript API that is currently not supported."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusNavigationBadHttpStatus":{"message":"The prerendering navigation failed because of a non-2xx HTTP response status code."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusNavigationRequestBlockedByCsp":{"message":"The prerendering navigation was blocked by a Content Security Policy."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusNavigationRequestNetworkError":{"message":"The prerendering navigation encountered a network error."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusPreloadingDisabled":{"message":"The prerender was not performed because the user disabled preloading in their browser settings."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusPrerenderingDisabledByDevTools":{"message":"The prerender was not performed because DevTools has been used to disable prerendering."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusPrimaryMainFrameRendererProcessCrashed":{"message":"The initiating page crashed."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusPrimaryMainFrameRendererProcessKilled":{"message":"The initiating page was killed."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusRendererProcessCrashed":{"message":"The prerendered page crashed."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusRendererProcessKilled":{"message":"The prerendered page was killed."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusResourceLoadBlockedByClient":{"message":"Some resource load was blocked."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusSameSiteCrossOriginNavigationNotOptInInInitialNavigation":{"message":"The prerendered page navigated itself to a cross-origin same-site URL, but the destination response did not include the appropriate Supports-Loading-Mode header."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusSameSiteCrossOriginNavigationNotOptInInMainFrameNavigation":{"message":"The prerendered page navigated to a cross-origin same-site URL, but the destination response did not include the appropriate Supports-Loading-Mode header."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusSameSiteCrossOriginRedirectNotOptInInInitialNavigation":{"message":"The prerendering navigation failed because the prerendered URL redirected to a cross-origin same-site URL, but the destination response did not include the appropriate Supports-Loading-Mode header."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusSameSiteCrossOriginRedirectNotOptInInMainFrameNavigation":{"message":"The prerendered page navigated to a URL which redirected to a cross-origin same-site URL, but the destination response did not include the appropriate Supports-Loading-Mode header."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusSslCertificateError":{"message":"The prerendering navigation failed because of an invalid SSL certificate."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusTimeoutBackgrounded":{"message":"The initiating page was backgrounded for a long time, so the prerendered page was discarded."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusTriggerBackgrounded":{"message":"The initiating page was backgrounded, so the prerendered page was discarded."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusUaChangeRequiresReload":{"message":"Changing User Agent occured in prerendering navigation."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | selectAnElementForMoreDetails":{"message":"Select an element for more details"},"panels/application/preloading/components/PreloadingGrid.ts | action":{"message":"Action"},"panels/application/preloading/components/PreloadingGrid.ts | status":{"message":"Status"},"panels/application/preloading/components/PreloadingString.ts | PrefetchEvicted":{"message":"The prefetch was discarded for a newer prefetch because |kPrefetchNewLimits| is enabled"},"panels/application/preloading/components/PreloadingString.ts | PrefetchFailedIneligibleRedirect":{"message":"The prefetch was redirected, but the redirect URL is not eligible for prefetch."},"panels/application/preloading/components/PreloadingString.ts | PrefetchFailedInvalidRedirect":{"message":"The prefetch was redirected, but there was a problem with the redirect."},"panels/application/preloading/components/PreloadingString.ts | PrefetchFailedMIMENotSupported":{"message":"The prefetch failed because the response's Content-Type header was not supported."},"panels/application/preloading/components/PreloadingString.ts | PrefetchFailedNetError":{"message":"The prefetch failed because of a network error."},"panels/application/preloading/components/PreloadingString.ts | PrefetchFailedNon2XX":{"message":"The prefetch failed because of a non-2xx HTTP response status code."},"panels/application/preloading/components/PreloadingString.ts | PrefetchFailedPerPageLimitExceeded":{"message":"The prefetch was not performed because the initiating page already has too many prefetches ongoing."},"panels/application/preloading/components/PreloadingString.ts | PrefetchIneligibleRetryAfter":{"message":"A previous prefetch to the origin got a HTTP 503 response with an Retry-After header that has not elapsed yet."},"panels/application/preloading/components/PreloadingString.ts | PrefetchIsPrivacyDecoy":{"message":"The URL was not eligible to be prefetched because there was a registered service worker or cross-site cookies for that origin, but the prefetch was put on the network anyways and not used, to disguise that the user had some kind of previous relationship with the origin."},"panels/application/preloading/components/PreloadingString.ts | PrefetchIsStale":{"message":"Too much time elapsed between the prefetch and usage, so the prefetch was discarded."},"panels/application/preloading/components/PreloadingString.ts | PrefetchNotEligibleBatterySaverEnabled":{"message":"The prefetch was not performed because the Battery Saver setting was enabled."},"panels/application/preloading/components/PreloadingString.ts | PrefetchNotEligibleBrowserContextOffTheRecord":{"message":"The prefetch was not performed because the browser is in Incognito or Guest mode."},"panels/application/preloading/components/PreloadingString.ts | PrefetchNotEligibleDataSaverEnabled":{"message":"The prefetch was not performed because the operating system is in Data Saver mode."},"panels/application/preloading/components/PreloadingString.ts | PrefetchNotEligibleExistingProxy":{"message":"The URL is not eligible to be prefetched, because in the default network context it is configured to use a proxy server."},"panels/application/preloading/components/PreloadingString.ts | PrefetchNotEligibleHostIsNonUnique":{"message":"The URL was not eligible to be prefetched because its host was not unique (e.g., a non publicly routable IP address or a hostname which is not registry-controlled), but the prefetch was required to be proxied."},"panels/application/preloading/components/PreloadingString.ts | PrefetchNotEligibleNonDefaultStoragePartition":{"message":"The URL was not eligible to be prefetched because it uses a non-default storage partition."},"panels/application/preloading/components/PreloadingString.ts | PrefetchNotEligiblePreloadingDisabled":{"message":"The prefetch was not performed because preloading was disabled."},"panels/application/preloading/components/PreloadingString.ts | PrefetchNotEligibleSameSiteCrossOriginPrefetchRequiredProxy":{"message":"The URL was not eligible to be prefetched because the default network context cannot be configured to use the prefetch proxy for a same-site cross-origin prefetch request."},"panels/application/preloading/components/PreloadingString.ts | PrefetchNotEligibleSchemeIsNotHttps":{"message":"The URL was not eligible to be prefetched because its scheme was not https:."},"panels/application/preloading/components/PreloadingString.ts | PrefetchNotEligibleUserHasCookies":{"message":"The URL was not eligible to be prefetched because it was cross-site, but the user had cookies for that origin."},"panels/application/preloading/components/PreloadingString.ts | PrefetchNotEligibleUserHasServiceWorker":{"message":"The URL was not eligible to be prefetched because there was a registered service worker for that origin, which is currently not supported."},"panels/application/preloading/components/PreloadingString.ts | PrefetchNotUsedCookiesChanged":{"message":"The prefetch was not used because it was a cross-site prefetch, and cookies were added for that URL while the prefetch was ongoing, so the prefetched response is now out-of-date."},"panels/application/preloading/components/PreloadingString.ts | PrefetchNotUsedProbeFailed":{"message":"The prefetch was blocked by your Internet Service Provider or network administrator."},"panels/application/preloading/components/PreloadingString.ts | PrefetchProxyNotAvailable":{"message":"A network error was encountered when trying to set up a connection to the prefetching proxy."},"panels/application/preloading/components/RuleSetDetailsReportView.ts | buttonClickToRevealInElementsPanel":{"message":"Click to reveal in Elements panel"},"panels/application/preloading/components/RuleSetDetailsReportView.ts | buttonClickToRevealInNetworkPanel":{"message":"Click to reveal in Network panel"},"panels/application/preloading/components/RuleSetDetailsReportView.ts | detailsDetailedInformation":{"message":"Detailed information"},"panels/application/preloading/components/RuleSetDetailsReportView.ts | detailsError":{"message":"Error"},"panels/application/preloading/components/RuleSetDetailsReportView.ts | detailsLocation":{"message":"Location"},"panels/application/preloading/components/RuleSetDetailsReportView.ts | detailsSource":{"message":"Source"},"panels/application/preloading/components/RuleSetDetailsReportView.ts | detailsValidity":{"message":"Validity"},"panels/application/preloading/components/RuleSetDetailsReportView.ts | validityInvalid":{"message":"Invalid; source is not a JSON object"},"panels/application/preloading/components/RuleSetDetailsReportView.ts | validitySomeRulesInvalid":{"message":"Some rules are invalid and ignored"},"panels/application/preloading/components/RuleSetDetailsReportView.ts | validityValid":{"message":"Valid"},"panels/application/preloading/components/RuleSetGrid.ts | location":{"message":"Location"},"panels/application/preloading/components/RuleSetGrid.ts | validity":{"message":"Validity"},"panels/application/preloading/components/UsedPreloadingView.ts | prefetchUsed":{"message":"{PH1} prefetched resources are used for this page"},"panels/application/preloading/components/UsedPreloadingView.ts | preloadingUsedForThisPage":{"message":"Preloading used for this page"},"panels/application/preloading/components/UsedPreloadingView.ts | prerenderUsed":{"message":"This page was prerendered"},"panels/application/preloading/PreloadingView.ts | extensionSettings":{"message":"Extensions settings"},"panels/application/preloading/PreloadingView.ts | filterAllRuleSets":{"message":"All rule sets"},"panels/application/preloading/PreloadingView.ts | filterFilterByRuleSet":{"message":"Filter by rule set"},"panels/application/preloading/PreloadingView.ts | filterRuleSet":{"message":"Rule set: {PH1}"},"panels/application/preloading/PreloadingView.ts | preloadingPageSettings":{"message":"Preload pages settings"},"panels/application/preloading/PreloadingView.ts | statusFailure":{"message":"Failure"},"panels/application/preloading/PreloadingView.ts | statusNotTriggered":{"message":"Not triggered"},"panels/application/preloading/PreloadingView.ts | statusPending":{"message":"Pending"},"panels/application/preloading/PreloadingView.ts | statusReady":{"message":"Ready"},"panels/application/preloading/PreloadingView.ts | statusRunning":{"message":"Running"},"panels/application/preloading/PreloadingView.ts | statusSuccess":{"message":"Success"},"panels/application/preloading/PreloadingView.ts | validityInvalid":{"message":"Invalid"},"panels/application/preloading/PreloadingView.ts | validitySomeRulesInvalid":{"message":"Some rules invalid"},"panels/application/preloading/PreloadingView.ts | validityValid":{"message":"Valid"},"panels/application/preloading/PreloadingView.ts | warningDetailPreloadingDisabledByBatterysaver":{"message":"Preloading is disabled because of the operating system's Battery Saver mode."},"panels/application/preloading/PreloadingView.ts | warningDetailPreloadingDisabledByDatasaver":{"message":"Preloading is disabled because of the operating system's Data Saver mode."},"panels/application/preloading/PreloadingView.ts | warningDetailPreloadingDisabledByFeatureFlag":{"message":"Preloading is forced-enabled because DevTools is open. When DevTools is closed, prerendering will be disabled because this browser session is part of a holdback group used for performance comparisons."},"panels/application/preloading/PreloadingView.ts | warningDetailPreloadingStateDisabled":{"message":"Preloading is disabled because of user settings or an extension. Go to {PH1} to learn more, or go to {PH2} to disable the extension."},"panels/application/preloading/PreloadingView.ts | warningDetailPrerenderingDisabledByFeatureFlag":{"message":"Prerendering is forced-enabled because DevTools is open. When DevTools is closed, prerendering will be disabled because this browser session is part of a holdback group used for performance comparisons."},"panels/application/preloading/PreloadingView.ts | warningTitlePreloadingDisabledByFeatureFlag":{"message":"Preloading was disabled, but is force-enabled now"},"panels/application/preloading/PreloadingView.ts | warningTitlePreloadingStateDisabled":{"message":"Preloading is disabled"},"panels/application/preloading/PreloadingView.ts | warningTitlePrerenderingDisabledByFeatureFlag":{"message":"Prerendering was disabled, but is force-enabled now"},"panels/application/PreloadingTreeElement.ts | prefetchingAndPrerendering":{"message":"Prefetching & Prerendering"},"panels/application/PreloadingTreeElement.ts | thisPage":{"message":"This Page"},"panels/application/ReportingApiReportsView.ts | clickToDisplayBody":{"message":"Click on any report to display its body"},"panels/application/ReportingApiTreeElement.ts | reportingApi":{"message":"Reporting API"},"panels/application/ServiceWorkerCacheTreeElement.ts | cacheStorage":{"message":"Cache Storage"},"panels/application/ServiceWorkerCacheTreeElement.ts | delete":{"message":"Delete"},"panels/application/ServiceWorkerCacheTreeElement.ts | refreshCaches":{"message":"Refresh Caches"},"panels/application/ServiceWorkerCacheViews.ts | cache":{"message":"Cache"},"panels/application/ServiceWorkerCacheViews.ts | deleteSelected":{"message":"Delete Selected"},"panels/application/ServiceWorkerCacheViews.ts | filterByPath":{"message":"Filter by Path"},"panels/application/ServiceWorkerCacheViews.ts | headers":{"message":"Headers"},"panels/application/ServiceWorkerCacheViews.ts | matchingEntriesS":{"message":"Matching entries: {PH1}"},"panels/application/ServiceWorkerCacheViews.ts | name":{"message":"Name"},"panels/application/ServiceWorkerCacheViews.ts | preview":{"message":"Preview"},"panels/application/ServiceWorkerCacheViews.ts | refresh":{"message":"Refresh"},"panels/application/ServiceWorkerCacheViews.ts | selectACacheEntryAboveToPreview":{"message":"Select a cache entry above to preview"},"panels/application/ServiceWorkerCacheViews.ts | serviceWorkerCache":{"message":"Service Worker Cache"},"panels/application/ServiceWorkerCacheViews.ts | timeCached":{"message":"Time Cached"},"panels/application/ServiceWorkerCacheViews.ts | totalEntriesS":{"message":"Total entries: {PH1}"},"panels/application/ServiceWorkerCacheViews.ts | varyHeaderWarning":{"message":"⚠️ Set ignoreVary to true when matching this entry"},"panels/application/ServiceWorkersView.ts | bypassForNetwork":{"message":"Bypass for network"},"panels/application/ServiceWorkersView.ts | bypassTheServiceWorkerAndLoad":{"message":"Bypass the service worker and load resources from the network"},"panels/application/ServiceWorkersView.ts | clients":{"message":"Clients"},"panels/application/ServiceWorkersView.ts | focus":{"message":"focus"},"panels/application/ServiceWorkersView.ts | inspect":{"message":"inspect"},"panels/application/ServiceWorkersView.ts | networkRequests":{"message":"Network requests"},"panels/application/ServiceWorkersView.ts | onPageReloadForceTheService":{"message":"On page reload, force the service worker to update, and activate it"},"panels/application/ServiceWorkersView.ts | periodicSync":{"message":"Periodic Sync"},"panels/application/ServiceWorkersView.ts | periodicSyncTag":{"message":"Periodic Sync tag"},"panels/application/ServiceWorkersView.ts | pushData":{"message":"Push data"},"panels/application/ServiceWorkersView.ts | pushString":{"message":"Push"},"panels/application/ServiceWorkersView.ts | receivedS":{"message":"Received {PH1}"},"panels/application/ServiceWorkersView.ts | sActivatedAndIsS":{"message":"#{PH1} activated and is {PH2}"},"panels/application/ServiceWorkersView.ts | sDeleted":{"message":"{PH1} - deleted"},"panels/application/ServiceWorkersView.ts | seeAllRegistrations":{"message":"See all registrations"},"panels/application/ServiceWorkersView.ts | serviceWorkerForS":{"message":"Service worker for {PH1}"},"panels/application/ServiceWorkersView.ts | serviceWorkersFromOtherOrigins":{"message":"Service workers from other origins"},"panels/application/ServiceWorkersView.ts | sIsRedundant":{"message":"#{PH1} is redundant"},"panels/application/ServiceWorkersView.ts | source":{"message":"Source"},"panels/application/ServiceWorkersView.ts | sRegistrationErrors":{"message":"{PH1} registration errors"},"panels/application/ServiceWorkersView.ts | startString":{"message":"start"},"panels/application/ServiceWorkersView.ts | status":{"message":"Status"},"panels/application/ServiceWorkersView.ts | stopString":{"message":"stop"},"panels/application/ServiceWorkersView.ts | sTryingToInstall":{"message":"#{PH1} trying to install"},"panels/application/ServiceWorkersView.ts | sWaitingToActivate":{"message":"#{PH1} waiting to activate"},"panels/application/ServiceWorkersView.ts | syncString":{"message":"Sync"},"panels/application/ServiceWorkersView.ts | syncTag":{"message":"Sync tag"},"panels/application/ServiceWorkersView.ts | testPushMessageFromDevtools":{"message":"Test push message from DevTools."},"panels/application/ServiceWorkersView.ts | unregister":{"message":"Unregister"},"panels/application/ServiceWorkersView.ts | unregisterServiceWorker":{"message":"Unregister service worker"},"panels/application/ServiceWorkersView.ts | update":{"message":"Update"},"panels/application/ServiceWorkersView.ts | updateCycle":{"message":"Update Cycle"},"panels/application/ServiceWorkersView.ts | updateOnReload":{"message":"Update on reload"},"panels/application/ServiceWorkersView.ts | workerS":{"message":"Worker: {PH1}"},"panels/application/ServiceWorkerUpdateCycleView.ts | endTimeS":{"message":"End time: {PH1}"},"panels/application/ServiceWorkerUpdateCycleView.ts | startTimeS":{"message":"Start time: {PH1}"},"panels/application/ServiceWorkerUpdateCycleView.ts | timeline":{"message":"Timeline"},"panels/application/ServiceWorkerUpdateCycleView.ts | updateActivity":{"message":"Update Activity"},"panels/application/ServiceWorkerUpdateCycleView.ts | version":{"message":"Version"},"panels/application/SharedStorageEventsView.ts | clickToDisplayBody":{"message":"Click on any shared storage event to display the event parameters."},"panels/application/SharedStorageItemsView.ts | key":{"message":"Key"},"panels/application/SharedStorageItemsView.ts | selectAValueToPreview":{"message":"Select a value to preview"},"panels/application/SharedStorageItemsView.ts | sharedStorage":{"message":"Shared Storage"},"panels/application/SharedStorageItemsView.ts | sharedStorageFilteredItemsCleared":{"message":"Shared Storage filtered items cleared"},"panels/application/SharedStorageItemsView.ts | sharedStorageItemDeleted":{"message":"The storage item was deleted."},"panels/application/SharedStorageItemsView.ts | sharedStorageItemEditCanceled":{"message":"The storage item edit was canceled."},"panels/application/SharedStorageItemsView.ts | sharedStorageItemEdited":{"message":"The storage item was edited."},"panels/application/SharedStorageItemsView.ts | sharedStorageItems":{"message":"Shared Storage Items"},"panels/application/SharedStorageItemsView.ts | sharedStorageItemsCleared":{"message":"Shared Storage items cleared"},"panels/application/SharedStorageItemsView.ts | sharedStorageNumberEntries":{"message":"Number of entries shown in table: {PH1}"},"panels/application/SharedStorageItemsView.ts | value":{"message":"Value"},"panels/application/SharedStorageListTreeElement.ts | sharedStorage":{"message":"Shared Storage"},"panels/application/StorageItemsView.ts | clearAll":{"message":"Clear All"},"panels/application/StorageItemsView.ts | deleteSelected":{"message":"Delete Selected"},"panels/application/StorageItemsView.ts | filter":{"message":"Filter"},"panels/application/StorageItemsView.ts | refresh":{"message":"Refresh"},"panels/application/StorageItemsView.ts | refreshedStatus":{"message":"Table refreshed"},"panels/application/StorageView.ts | application":{"message":"Application"},"panels/application/StorageView.ts | cache":{"message":"Cache"},"panels/application/StorageView.ts | cacheStorage":{"message":"Cache storage"},"panels/application/StorageView.ts | clearing":{"message":"Clearing..."},"panels/application/StorageView.ts | clearSiteData":{"message":"Clear site data"},"panels/application/StorageView.ts | cookies":{"message":"Cookies"},"panels/application/StorageView.ts | fileSystem":{"message":"File System"},"panels/application/StorageView.ts | includingThirdPartyCookies":{"message":"including third-party cookies"},"panels/application/StorageView.ts | indexDB":{"message":"IndexedDB"},"panels/application/StorageView.ts | internalError":{"message":"Internal error"},"panels/application/StorageView.ts | learnMore":{"message":"Learn more"},"panels/application/StorageView.ts | localAndSessionStorage":{"message":"Local and session storage"},"panels/application/StorageView.ts | mb":{"message":"MB"},"panels/application/StorageView.ts | numberMustBeNonNegative":{"message":"Number must be non-negative"},"panels/application/StorageView.ts | numberMustBeSmaller":{"message":"Number must be smaller than {PH1}"},"panels/application/StorageView.ts | other":{"message":"Other"},"panels/application/StorageView.ts | pleaseEnterANumber":{"message":"Please enter a number"},"panels/application/StorageView.ts | serviceWorkers":{"message":"Service Workers"},"panels/application/StorageView.ts | sFailedToLoad":{"message":"{PH1} (failed to load)"},"panels/application/StorageView.ts | simulateCustomStorage":{"message":"Simulate custom storage quota"},"panels/application/StorageView.ts | SiteDataCleared":{"message":"Site data cleared"},"panels/application/StorageView.ts | storageQuotaIsLimitedIn":{"message":"Storage quota is limited in Incognito mode"},"panels/application/StorageView.ts | storageQuotaUsed":{"message":"{PH1} used out of {PH2} storage quota"},"panels/application/StorageView.ts | storageQuotaUsedWithBytes":{"message":"{PH1} bytes used out of {PH2} bytes storage quota"},"panels/application/StorageView.ts | storageTitle":{"message":"Storage"},"panels/application/StorageView.ts | storageUsage":{"message":"Storage usage"},"panels/application/StorageView.ts | storageWithCustomMarker":{"message":"{PH1} (custom)"},"panels/application/StorageView.ts | unregisterServiceWorker":{"message":"Unregister service workers"},"panels/application/StorageView.ts | usage":{"message":"Usage"},"panels/application/StorageView.ts | webSql":{"message":"Web SQL"},"panels/application/TrustTokensTreeElement.ts | trustTokens":{"message":"Private State Tokens"},"panels/browser_debugger/browser_debugger-meta.ts | contentScripts":{"message":"Content scripts"},"panels/browser_debugger/browser_debugger-meta.ts | cspViolationBreakpoints":{"message":"CSP Violation Breakpoints"},"panels/browser_debugger/browser_debugger-meta.ts | domBreakpoints":{"message":"DOM Breakpoints"},"panels/browser_debugger/browser_debugger-meta.ts | eventListenerBreakpoints":{"message":"Event Listener Breakpoints"},"panels/browser_debugger/browser_debugger-meta.ts | globalListeners":{"message":"Global Listeners"},"panels/browser_debugger/browser_debugger-meta.ts | overrides":{"message":"Overrides"},"panels/browser_debugger/browser_debugger-meta.ts | page":{"message":"Page"},"panels/browser_debugger/browser_debugger-meta.ts | showContentScripts":{"message":"Show Content scripts"},"panels/browser_debugger/browser_debugger-meta.ts | showCspViolationBreakpoints":{"message":"Show CSP Violation Breakpoints"},"panels/browser_debugger/browser_debugger-meta.ts | showDomBreakpoints":{"message":"Show DOM Breakpoints"},"panels/browser_debugger/browser_debugger-meta.ts | showEventListenerBreakpoints":{"message":"Show Event Listener Breakpoints"},"panels/browser_debugger/browser_debugger-meta.ts | showGlobalListeners":{"message":"Show Global Listeners"},"panels/browser_debugger/browser_debugger-meta.ts | showOverrides":{"message":"Show Overrides"},"panels/browser_debugger/browser_debugger-meta.ts | showPage":{"message":"Show Page"},"panels/browser_debugger/browser_debugger-meta.ts | showXhrfetchBreakpoints":{"message":"Show XHR/fetch Breakpoints"},"panels/browser_debugger/browser_debugger-meta.ts | xhrfetchBreakpoints":{"message":"XHR/fetch Breakpoints"},"panels/browser_debugger/CategorizedBreakpointsSidebarPane.ts | breakpointHit":{"message":"breakpoint hit"},"panels/browser_debugger/DOMBreakpointsSidebarPane.ts | attributeModified":{"message":"Attribute modified"},"panels/browser_debugger/DOMBreakpointsSidebarPane.ts | breakOn":{"message":"Break on"},"panels/browser_debugger/DOMBreakpointsSidebarPane.ts | breakpointHit":{"message":"breakpoint hit"},"panels/browser_debugger/DOMBreakpointsSidebarPane.ts | breakpointRemoved":{"message":"Breakpoint removed"},"panels/browser_debugger/DOMBreakpointsSidebarPane.ts | breakpointSet":{"message":"Breakpoint set"},"panels/browser_debugger/DOMBreakpointsSidebarPane.ts | checked":{"message":"checked"},"panels/browser_debugger/DOMBreakpointsSidebarPane.ts | domBreakpointsList":{"message":"DOM Breakpoints list"},"panels/browser_debugger/DOMBreakpointsSidebarPane.ts | noBreakpoints":{"message":"No breakpoints"},"panels/browser_debugger/DOMBreakpointsSidebarPane.ts | nodeRemoved":{"message":"Node removed"},"panels/browser_debugger/DOMBreakpointsSidebarPane.ts | removeAllDomBreakpoints":{"message":"Remove all DOM breakpoints"},"panels/browser_debugger/DOMBreakpointsSidebarPane.ts | removeBreakpoint":{"message":"Remove breakpoint"},"panels/browser_debugger/DOMBreakpointsSidebarPane.ts | revealDomNodeInElementsPanel":{"message":"Reveal DOM node in Elements panel"},"panels/browser_debugger/DOMBreakpointsSidebarPane.ts | sBreakpointHit":{"message":"{PH1} breakpoint hit"},"panels/browser_debugger/DOMBreakpointsSidebarPane.ts | sS":{"message":"{PH1}: {PH2}"},"panels/browser_debugger/DOMBreakpointsSidebarPane.ts | sSS":{"message":"{PH1}: {PH2}, {PH3}"},"panels/browser_debugger/DOMBreakpointsSidebarPane.ts | subtreeModified":{"message":"Subtree modified"},"panels/browser_debugger/DOMBreakpointsSidebarPane.ts | unchecked":{"message":"unchecked"},"panels/browser_debugger/ObjectEventListenersSidebarPane.ts | refreshGlobalListeners":{"message":"Refresh global listeners"},"panels/browser_debugger/XHRBreakpointsSidebarPane.ts | addBreakpoint":{"message":"Add breakpoint"},"panels/browser_debugger/XHRBreakpointsSidebarPane.ts | addXhrfetchBreakpoint":{"message":"Add XHR/fetch breakpoint"},"panels/browser_debugger/XHRBreakpointsSidebarPane.ts | anyXhrOrFetch":{"message":"Any XHR or fetch"},"panels/browser_debugger/XHRBreakpointsSidebarPane.ts | breakpointHit":{"message":"breakpoint hit"},"panels/browser_debugger/XHRBreakpointsSidebarPane.ts | breakWhenUrlContains":{"message":"Break when URL contains:"},"panels/browser_debugger/XHRBreakpointsSidebarPane.ts | noBreakpoints":{"message":"No breakpoints"},"panels/browser_debugger/XHRBreakpointsSidebarPane.ts | removeAllBreakpoints":{"message":"Remove all breakpoints"},"panels/browser_debugger/XHRBreakpointsSidebarPane.ts | removeBreakpoint":{"message":"Remove breakpoint"},"panels/browser_debugger/XHRBreakpointsSidebarPane.ts | urlBreakpoint":{"message":"URL Breakpoint"},"panels/browser_debugger/XHRBreakpointsSidebarPane.ts | urlContainsS":{"message":"URL contains \"{PH1}\""},"panels/browser_debugger/XHRBreakpointsSidebarPane.ts | xhrfetchBreakpoints":{"message":"XHR/fetch Breakpoints"},"panels/changes/changes-meta.ts | changes":{"message":"Changes"},"panels/changes/changes-meta.ts | showChanges":{"message":"Show Changes"},"panels/changes/ChangesSidebar.ts | sFromSourceMap":{"message":"{PH1} (from source map)"},"panels/changes/ChangesView.ts | binaryData":{"message":"Binary data"},"panels/changes/ChangesView.ts | copy":{"message":"Copy"},"panels/changes/ChangesView.ts | copyAllChangesFromCurrentFile":{"message":"Copy all changes from current file"},"panels/changes/ChangesView.ts | noChanges":{"message":"No changes"},"panels/changes/ChangesView.ts | revertAllChangesToCurrentFile":{"message":"Revert all changes to current file"},"panels/changes/ChangesView.ts | sDeletions":{"message":"{n, plural, =1 {# deletion (-)} other {# deletions (-)}}"},"panels/changes/ChangesView.ts | sInsertions":{"message":"{n, plural, =1 {# insertion (+)} other {# insertions (+)}}"},"panels/console_counters/WarningErrorCounter.ts | openConsoleToViewS":{"message":"Open Console to view {PH1}"},"panels/console_counters/WarningErrorCounter.ts | openIssuesToView":{"message":"{n, plural, =1 {Open Issues to view # issue:} other {Open Issues to view # issues:}}"},"panels/console_counters/WarningErrorCounter.ts | sErrors":{"message":"{n, plural, =1 {# error} other {# errors}}"},"panels/console_counters/WarningErrorCounter.ts | sWarnings":{"message":"{n, plural, =1 {# warning} other {# warnings}}"},"panels/console/console-meta.ts | autocompleteFromHistory":{"message":"Autocomplete from history"},"panels/console/console-meta.ts | autocompleteOnEnter":{"message":"Accept autocomplete suggestion on Enter"},"panels/console/console-meta.ts | clearConsole":{"message":"Clear console"},"panels/console/console-meta.ts | clearConsoleHistory":{"message":"Clear console history"},"panels/console/console-meta.ts | collapseConsoleTraceMessagesByDefault":{"message":"Do not automatically expand console.trace() messages"},"panels/console/console-meta.ts | console":{"message":"Console"},"panels/console/console-meta.ts | createLiveExpression":{"message":"Create live expression"},"panels/console/console-meta.ts | doNotAutocompleteFromHistory":{"message":"Do not autocomplete from history"},"panels/console/console-meta.ts | doNotAutocompleteOnEnter":{"message":"Do not accept autocomplete suggestion on Enter"},"panels/console/console-meta.ts | doNotEagerlyEvaluateConsole":{"message":"Do not eagerly evaluate console prompt text"},"panels/console/console-meta.ts | doNotGroupSimilarMessagesIn":{"message":"Do not group similar messages in console"},"panels/console/console-meta.ts | doNotShowCorsErrorsIn":{"message":"Do not show CORS errors in console"},"panels/console/console-meta.ts | doNotTreatEvaluationAsUser":{"message":"Do not treat evaluation as user activation"},"panels/console/console-meta.ts | eagerEvaluation":{"message":"Eager evaluation"},"panels/console/console-meta.ts | eagerlyEvaluateConsolePromptText":{"message":"Eagerly evaluate console prompt text"},"panels/console/console-meta.ts | evaluateTriggersUserActivation":{"message":"Treat code evaluation as user action"},"panels/console/console-meta.ts | expandConsoleTraceMessagesByDefault":{"message":"Automatically expand console.trace() messages"},"panels/console/console-meta.ts | groupSimilarMessagesInConsole":{"message":"Group similar messages in console"},"panels/console/console-meta.ts | hideNetworkMessages":{"message":"Hide network messages"},"panels/console/console-meta.ts | hideTimestamps":{"message":"Hide timestamps"},"panels/console/console-meta.ts | logXmlhttprequests":{"message":"Log XMLHttpRequests"},"panels/console/console-meta.ts | onlyShowMessagesFromTheCurrent":{"message":"Only show messages from the current context (top, iframe, worker, extension)"},"panels/console/console-meta.ts | selectedContextOnly":{"message":"Selected context only"},"panels/console/console-meta.ts | showConsole":{"message":"Show Console"},"panels/console/console-meta.ts | showCorsErrorsInConsole":{"message":"Show CORS errors in console"},"panels/console/console-meta.ts | showMessagesFromAllContexts":{"message":"Show messages from all contexts"},"panels/console/console-meta.ts | showNetworkMessages":{"message":"Show network messages"},"panels/console/console-meta.ts | showTimestamps":{"message":"Show timestamps"},"panels/console/console-meta.ts | treatEvaluationAsUserActivation":{"message":"Treat evaluation as user activation"},"panels/console/ConsoleContextSelector.ts | extension":{"message":"Extension"},"panels/console/ConsoleContextSelector.ts | javascriptContextNotSelected":{"message":"JavaScript context: Not selected"},"panels/console/ConsoleContextSelector.ts | javascriptContextS":{"message":"JavaScript context: {PH1}"},"panels/console/ConsolePinPane.ts | evaluateAllowingSideEffects":{"message":"Evaluate, allowing side effects"},"panels/console/ConsolePinPane.ts | expression":{"message":"Expression"},"panels/console/ConsolePinPane.ts | liveExpressionEditor":{"message":"Live expression editor"},"panels/console/ConsolePinPane.ts | notAvailable":{"message":"not available"},"panels/console/ConsolePinPane.ts | removeAllExpressions":{"message":"Remove all expressions"},"panels/console/ConsolePinPane.ts | removeBlankExpression":{"message":"Remove blank expression"},"panels/console/ConsolePinPane.ts | removeExpression":{"message":"Remove expression"},"panels/console/ConsolePinPane.ts | removeExpressionS":{"message":"Remove expression: {PH1}"},"panels/console/ConsolePrompt.ts | consolePrompt":{"message":"Console prompt"},"panels/console/ConsoleSidebar.ts | dErrors":{"message":"{n, plural, =0 {No errors} =1 {# error} other {# errors}}"},"panels/console/ConsoleSidebar.ts | dInfo":{"message":"{n, plural, =0 {No info} =1 {# info} other {# info}}"},"panels/console/ConsoleSidebar.ts | dMessages":{"message":"{n, plural, =0 {No messages} =1 {# message} other {# messages}}"},"panels/console/ConsoleSidebar.ts | dUserMessages":{"message":"{n, plural, =0 {No user messages} =1 {# user message} other {# user messages}}"},"panels/console/ConsoleSidebar.ts | dVerbose":{"message":"{n, plural, =0 {No verbose} =1 {# verbose} other {# verbose}}"},"panels/console/ConsoleSidebar.ts | dWarnings":{"message":"{n, plural, =0 {No warnings} =1 {# warning} other {# warnings}}"},"panels/console/ConsoleSidebar.ts | other":{"message":""},"panels/console/ConsoleView.ts | allLevels":{"message":"All levels"},"panels/console/ConsoleView.ts | autocompleteFromHistory":{"message":"Autocomplete from history"},"panels/console/ConsoleView.ts | consoleCleared":{"message":"Console cleared"},"panels/console/ConsoleView.ts | consolePasteBlocked":{"message":"Pasting code is blocked on this page. Pasting code into devtools can allow attackers to take over your account."},"panels/console/ConsoleView.ts | consoleSettings":{"message":"Console settings"},"panels/console/ConsoleView.ts | consoleSidebarHidden":{"message":"Console sidebar hidden"},"panels/console/ConsoleView.ts | consoleSidebarShown":{"message":"Console sidebar shown"},"panels/console/ConsoleView.ts | copyVisibleStyledSelection":{"message":"Copy visible styled selection"},"panels/console/ConsoleView.ts | customLevels":{"message":"Custom levels"},"panels/console/ConsoleView.ts | default":{"message":"Default"},"panels/console/ConsoleView.ts | defaultLevels":{"message":"Default levels"},"panels/console/ConsoleView.ts | doNotClearLogOnPageReload":{"message":"Do not clear log on page reload / navigation"},"panels/console/ConsoleView.ts | eagerlyEvaluateTextInThePrompt":{"message":"Eagerly evaluate text in the prompt"},"panels/console/ConsoleView.ts | egEventdCdnUrlacom":{"message":"e.g. /eventd/ -cdn url:a.com"},"panels/console/ConsoleView.ts | errors":{"message":"Errors"},"panels/console/ConsoleView.ts | filter":{"message":"Filter"},"panels/console/ConsoleView.ts | filteredMessagesInConsole":{"message":"{PH1} messages in console"},"panels/console/ConsoleView.ts | findStringInLogs":{"message":"Find string in logs"},"panels/console/ConsoleView.ts | groupSimilarMessagesInConsole":{"message":"Group similar messages in console"},"panels/console/ConsoleView.ts | hideAll":{"message":"Hide all"},"panels/console/ConsoleView.ts | hideConsoleSidebar":{"message":"Hide console sidebar"},"panels/console/ConsoleView.ts | hideMessagesFromS":{"message":"Hide messages from {PH1}"},"panels/console/ConsoleView.ts | hideNetwork":{"message":"Hide network"},"panels/console/ConsoleView.ts | info":{"message":"Info"},"panels/console/ConsoleView.ts | issuesWithColon":{"message":"{n, plural, =0 {No Issues} =1 {# Issue:} other {# Issues:}}"},"panels/console/ConsoleView.ts | issueToolbarClickToGoToTheIssuesTab":{"message":"Click to go to the issues tab"},"panels/console/ConsoleView.ts | issueToolbarClickToView":{"message":"Click to view {issueEnumeration}"},"panels/console/ConsoleView.ts | issueToolbarTooltipGeneral":{"message":"Some problems no longer generate console messages, but are surfaced in the issues tab."},"panels/console/ConsoleView.ts | logLevels":{"message":"Log levels"},"panels/console/ConsoleView.ts | logLevelS":{"message":"Log level: {PH1}"},"panels/console/ConsoleView.ts | logXMLHttpRequests":{"message":"Log XMLHttpRequests"},"panels/console/ConsoleView.ts | onlyShowMessagesFromTheCurrentContext":{"message":"Only show messages from the current context (top, iframe, worker, extension)"},"panels/console/ConsoleView.ts | overriddenByFilterSidebar":{"message":"Overridden by filter sidebar"},"panels/console/ConsoleView.ts | preserveLog":{"message":"Preserve log"},"panels/console/ConsoleView.ts | replayXhr":{"message":"Replay XHR"},"panels/console/ConsoleView.ts | saveAs":{"message":"Save as..."},"panels/console/ConsoleView.ts | searching":{"message":"Searching…"},"panels/console/ConsoleView.ts | selectedContextOnly":{"message":"Selected context only"},"panels/console/ConsoleView.ts | sHidden":{"message":"{n, plural, =1 {# hidden} other {# hidden}}"},"panels/console/ConsoleView.ts | showConsoleSidebar":{"message":"Show console sidebar"},"panels/console/ConsoleView.ts | showCorsErrorsInConsole":{"message":"Show CORS errors in console"},"panels/console/ConsoleView.ts | sOnly":{"message":"{PH1} only"},"panels/console/ConsoleView.ts | treatEvaluationAsUserActivation":{"message":"Treat evaluation as user activation"},"panels/console/ConsoleView.ts | verbose":{"message":"Verbose"},"panels/console/ConsoleView.ts | warnings":{"message":"Warnings"},"panels/console/ConsoleView.ts | writingFile":{"message":"Writing file…"},"panels/console/ConsoleViewMessage.ts | assertionFailed":{"message":"Assertion failed: "},"panels/console/ConsoleViewMessage.ts | attribute":{"message":""},"panels/console/ConsoleViewMessage.ts | clearAllMessagesWithS":{"message":"Clear all messages with {PH1}"},"panels/console/ConsoleViewMessage.ts | cndBreakpoint":{"message":"Conditional Breakpoint"},"panels/console/ConsoleViewMessage.ts | console":{"message":"Console"},"panels/console/ConsoleViewMessage.ts | consoleclearWasPreventedDueTo":{"message":"console.clear() was prevented due to 'Preserve log'"},"panels/console/ConsoleViewMessage.ts | consoleWasCleared":{"message":"Console was cleared"},"panels/console/ConsoleViewMessage.ts | deprecationS":{"message":"[Deprecation] {PH1}"},"panels/console/ConsoleViewMessage.ts | error":{"message":"Error"},"panels/console/ConsoleViewMessage.ts | errorS":{"message":"{n, plural, =1 {Error, Repeated # time} other {Error, Repeated # times}}"},"panels/console/ConsoleViewMessage.ts | exception":{"message":""},"panels/console/ConsoleViewMessage.ts | functionWasResolvedFromBound":{"message":"Function was resolved from bound function."},"panels/console/ConsoleViewMessage.ts | index":{"message":"(index)"},"panels/console/ConsoleViewMessage.ts | interventionS":{"message":"[Intervention] {PH1}"},"panels/console/ConsoleViewMessage.ts | logpoint":{"message":"Logpoint"},"panels/console/ConsoleViewMessage.ts | Mxx":{"message":" M"},"panels/console/ConsoleViewMessage.ts | repeatS":{"message":"{n, plural, =1 {Repeated # time} other {Repeated # times}}"},"panels/console/ConsoleViewMessage.ts | someEvent":{"message":" event"},"panels/console/ConsoleViewMessage.ts | stackMessageCollapsed":{"message":"Stack table collapsed"},"panels/console/ConsoleViewMessage.ts | stackMessageExpanded":{"message":"Stack table expanded"},"panels/console/ConsoleViewMessage.ts | thisValueWasEvaluatedUponFirst":{"message":"This value was evaluated upon first expanding. It may have changed since then."},"panels/console/ConsoleViewMessage.ts | thisValueWillNotBeCollectedUntil":{"message":"This value will not be collected until console is cleared."},"panels/console/ConsoleViewMessage.ts | tookNms":{"message":"took ms"},"panels/console/ConsoleViewMessage.ts | url":{"message":""},"panels/console/ConsoleViewMessage.ts | value":{"message":"Value"},"panels/console/ConsoleViewMessage.ts | violationS":{"message":"[Violation] {PH1}"},"panels/console/ConsoleViewMessage.ts | warning":{"message":"Warning"},"panels/console/ConsoleViewMessage.ts | warningS":{"message":"{n, plural, =1 {Warning, Repeated # time} other {Warning, Repeated # times}}"},"panels/coverage/coverage-meta.ts | coverage":{"message":"Coverage"},"panels/coverage/coverage-meta.ts | instrumentCoverage":{"message":"Instrument coverage"},"panels/coverage/coverage-meta.ts | reloadPage":{"message":"Reload page"},"panels/coverage/coverage-meta.ts | showCoverage":{"message":"Show Coverage"},"panels/coverage/coverage-meta.ts | startInstrumentingCoverageAnd":{"message":"Start instrumenting coverage and reload page"},"panels/coverage/coverage-meta.ts | stopInstrumentingCoverageAndShow":{"message":"Stop instrumenting coverage and show results"},"panels/coverage/CoverageListView.ts | codeCoverage":{"message":"Code Coverage"},"panels/coverage/CoverageListView.ts | css":{"message":"CSS"},"panels/coverage/CoverageListView.ts | jsCoverageWithPerBlock":{"message":"JS coverage with per block granularity: Once a block of JavaScript was executed, that block is marked as covered."},"panels/coverage/CoverageListView.ts | jsCoverageWithPerFunction":{"message":"JS coverage with per function granularity: Once a function was executed, the whole function is marked as covered."},"panels/coverage/CoverageListView.ts | jsPerBlock":{"message":"JS (per block)"},"panels/coverage/CoverageListView.ts | jsPerFunction":{"message":"JS (per function)"},"panels/coverage/CoverageListView.ts | sBytes":{"message":"{n, plural, =1 {# byte} other {# bytes}}"},"panels/coverage/CoverageListView.ts | sBytesS":{"message":"{n, plural, =1 {# byte, {percentage}} other {# bytes, {percentage}}}"},"panels/coverage/CoverageListView.ts | sBytesSBelongToBlocksOf":{"message":"{PH1} bytes ({PH2}) belong to blocks of JavaScript that have not (yet) been executed."},"panels/coverage/CoverageListView.ts | sBytesSBelongToBlocksOfJavascript":{"message":"{PH1} bytes ({PH2}) belong to blocks of JavaScript that have executed at least once."},"panels/coverage/CoverageListView.ts | sBytesSBelongToFunctionsThatHave":{"message":"{PH1} bytes ({PH2}) belong to functions that have not (yet) been executed."},"panels/coverage/CoverageListView.ts | sBytesSBelongToFunctionsThatHaveExecuted":{"message":"{PH1} bytes ({PH2}) belong to functions that have executed at least once."},"panels/coverage/CoverageListView.ts | sOfFileUnusedSOfFileUsed":{"message":"{PH1} % of file unused, {PH2} % of file used"},"panels/coverage/CoverageListView.ts | totalBytes":{"message":"Total Bytes"},"panels/coverage/CoverageListView.ts | type":{"message":"Type"},"panels/coverage/CoverageListView.ts | unusedBytes":{"message":"Unused Bytes"},"panels/coverage/CoverageListView.ts | url":{"message":"URL"},"panels/coverage/CoverageListView.ts | usageVisualization":{"message":"Usage Visualization"},"panels/coverage/CoverageView.ts | activationNoCapture":{"message":"Could not capture coverage info because the page was prerendered in the background."},"panels/coverage/CoverageView.ts | all":{"message":"All"},"panels/coverage/CoverageView.ts | bfcacheNoCapture":{"message":"Could not capture coverage info because the page was served from the back/forward cache."},"panels/coverage/CoverageView.ts | chooseCoverageGranularityPer":{"message":"Choose coverage granularity: Per function has low overhead, per block has significant overhead."},"panels/coverage/CoverageView.ts | clearAll":{"message":"Clear all"},"panels/coverage/CoverageView.ts | clickTheRecordButtonSToStart":{"message":"Click the record button {PH1} to start capturing coverage."},"panels/coverage/CoverageView.ts | clickTheReloadButtonSToReloadAnd":{"message":"Click the reload button {PH1} to reload and start capturing coverage."},"panels/coverage/CoverageView.ts | contentScripts":{"message":"Content scripts"},"panels/coverage/CoverageView.ts | css":{"message":"CSS"},"panels/coverage/CoverageView.ts | export":{"message":"Export..."},"panels/coverage/CoverageView.ts | filterCoverageByType":{"message":"Filter coverage by type"},"panels/coverage/CoverageView.ts | filteredSTotalS":{"message":"Filtered: {PH1} Total: {PH2}"},"panels/coverage/CoverageView.ts | includeExtensionContentScripts":{"message":"Include extension content scripts"},"panels/coverage/CoverageView.ts | javascript":{"message":"JavaScript"},"panels/coverage/CoverageView.ts | perBlock":{"message":"Per block"},"panels/coverage/CoverageView.ts | perFunction":{"message":"Per function"},"panels/coverage/CoverageView.ts | reloadPrompt":{"message":"Click the reload button {PH1} to reload and get coverage."},"panels/coverage/CoverageView.ts | sOfSSUsedSoFarSUnused":{"message":"{PH1} of {PH2} ({PH3}%) used so far, {PH4} unused."},"panels/coverage/CoverageView.ts | urlFilter":{"message":"URL filter"},"panels/css_overview/components/CSSOverviewStartView.ts | captureOverview":{"message":"Capture overview"},"panels/css_overview/components/CSSOverviewStartView.ts | capturePageCSSOverview":{"message":"Capture an overview of your page’s CSS"},"panels/css_overview/components/CSSOverviewStartView.ts | identifyCSSImprovements":{"message":"Identify potential CSS improvements"},"panels/css_overview/components/CSSOverviewStartView.ts | identifyCSSImprovementsWithExampleIssues":{"message":"Identify potential CSS improvements (e.g. low contrast issues, unused declarations, color or font mismatches)"},"panels/css_overview/components/CSSOverviewStartView.ts | locateAffectedElements":{"message":"Locate the affected elements in the Elements panel"},"panels/css_overview/components/CSSOverviewStartView.ts | quickStartWithCSSOverview":{"message":"Quick start: get started with the new CSS Overview panel"},"panels/css_overview/css_overview-meta.ts | cssOverview":{"message":"CSS Overview"},"panels/css_overview/css_overview-meta.ts | showCssOverview":{"message":"Show CSS Overview"},"panels/css_overview/CSSOverviewCompletedView.ts | aa":{"message":"AA"},"panels/css_overview/CSSOverviewCompletedView.ts | aaa":{"message":"AAA"},"panels/css_overview/CSSOverviewCompletedView.ts | apca":{"message":"APCA"},"panels/css_overview/CSSOverviewCompletedView.ts | attributeSelectors":{"message":"Attribute selectors"},"panels/css_overview/CSSOverviewCompletedView.ts | backgroundColorsS":{"message":"Background colors: {PH1}"},"panels/css_overview/CSSOverviewCompletedView.ts | borderColorsS":{"message":"Border colors: {PH1}"},"panels/css_overview/CSSOverviewCompletedView.ts | classSelectors":{"message":"Class selectors"},"panels/css_overview/CSSOverviewCompletedView.ts | colors":{"message":"Colors"},"panels/css_overview/CSSOverviewCompletedView.ts | contrastIssues":{"message":"Contrast issues"},"panels/css_overview/CSSOverviewCompletedView.ts | contrastIssuesS":{"message":"Contrast issues: {PH1}"},"panels/css_overview/CSSOverviewCompletedView.ts | contrastRatio":{"message":"Contrast ratio"},"panels/css_overview/CSSOverviewCompletedView.ts | cssOverviewElements":{"message":"CSS Overview Elements"},"panels/css_overview/CSSOverviewCompletedView.ts | declaration":{"message":"Declaration"},"panels/css_overview/CSSOverviewCompletedView.ts | element":{"message":"Element"},"panels/css_overview/CSSOverviewCompletedView.ts | elements":{"message":"Elements"},"panels/css_overview/CSSOverviewCompletedView.ts | externalStylesheets":{"message":"External stylesheets"},"panels/css_overview/CSSOverviewCompletedView.ts | fillColorsS":{"message":"Fill colors: {PH1}"},"panels/css_overview/CSSOverviewCompletedView.ts | fontInfo":{"message":"Font info"},"panels/css_overview/CSSOverviewCompletedView.ts | idSelectors":{"message":"ID selectors"},"panels/css_overview/CSSOverviewCompletedView.ts | inlineStyleElements":{"message":"Inline style elements"},"panels/css_overview/CSSOverviewCompletedView.ts | mediaQueries":{"message":"Media queries"},"panels/css_overview/CSSOverviewCompletedView.ts | nOccurrences":{"message":"{n, plural, =1 {# occurrence} other {# occurrences}}"},"panels/css_overview/CSSOverviewCompletedView.ts | nonsimpleSelectors":{"message":"Non-simple selectors"},"panels/css_overview/CSSOverviewCompletedView.ts | overviewSummary":{"message":"Overview summary"},"panels/css_overview/CSSOverviewCompletedView.ts | showElement":{"message":"Show element"},"panels/css_overview/CSSOverviewCompletedView.ts | source":{"message":"Source"},"panels/css_overview/CSSOverviewCompletedView.ts | styleRules":{"message":"Style rules"},"panels/css_overview/CSSOverviewCompletedView.ts | textColorSOverSBackgroundResults":{"message":"Text color {PH1} over {PH2} background results in low contrast for {PH3} elements"},"panels/css_overview/CSSOverviewCompletedView.ts | textColorsS":{"message":"Text colors: {PH1}"},"panels/css_overview/CSSOverviewCompletedView.ts | thereAreNoFonts":{"message":"There are no fonts."},"panels/css_overview/CSSOverviewCompletedView.ts | thereAreNoMediaQueries":{"message":"There are no media queries."},"panels/css_overview/CSSOverviewCompletedView.ts | thereAreNoUnusedDeclarations":{"message":"There are no unused declarations."},"panels/css_overview/CSSOverviewCompletedView.ts | typeSelectors":{"message":"Type selectors"},"panels/css_overview/CSSOverviewCompletedView.ts | universalSelectors":{"message":"Universal selectors"},"panels/css_overview/CSSOverviewCompletedView.ts | unusedDeclarations":{"message":"Unused declarations"},"panels/css_overview/CSSOverviewProcessingView.ts | cancel":{"message":"Cancel"},"panels/css_overview/CSSOverviewSidebarPanel.ts | clearOverview":{"message":"Clear overview"},"panels/css_overview/CSSOverviewSidebarPanel.ts | cssOverviewPanelSidebar":{"message":"CSS Overview panel sidebar"},"panels/css_overview/CSSOverviewUnusedDeclarations.ts | bottomAppliedToAStatically":{"message":"Bottom applied to a statically positioned element"},"panels/css_overview/CSSOverviewUnusedDeclarations.ts | heightAppliedToAnInlineElement":{"message":"Height applied to an inline element"},"panels/css_overview/CSSOverviewUnusedDeclarations.ts | leftAppliedToAStatically":{"message":"Left applied to a statically positioned element"},"panels/css_overview/CSSOverviewUnusedDeclarations.ts | rightAppliedToAStatically":{"message":"Right applied to a statically positioned element"},"panels/css_overview/CSSOverviewUnusedDeclarations.ts | topAppliedToAStatically":{"message":"Top applied to a statically positioned element"},"panels/css_overview/CSSOverviewUnusedDeclarations.ts | verticalAlignmentAppliedTo":{"message":"Vertical alignment applied to element which is neither inline nor table-cell"},"panels/css_overview/CSSOverviewUnusedDeclarations.ts | widthAppliedToAnInlineElement":{"message":"Width applied to an inline element"},"panels/developer_resources/developer_resources-meta.ts | developerResources":{"message":"Developer Resources"},"panels/developer_resources/developer_resources-meta.ts | showDeveloperResources":{"message":"Show Developer Resources"},"panels/developer_resources/DeveloperResourcesListView.ts | copyInitiatorUrl":{"message":"Copy initiator URL"},"panels/developer_resources/DeveloperResourcesListView.ts | copyUrl":{"message":"Copy URL"},"panels/developer_resources/DeveloperResourcesListView.ts | developerResources":{"message":"Developer Resources"},"panels/developer_resources/DeveloperResourcesListView.ts | error":{"message":"Error"},"panels/developer_resources/DeveloperResourcesListView.ts | failure":{"message":"failure"},"panels/developer_resources/DeveloperResourcesListView.ts | initiator":{"message":"Initiator"},"panels/developer_resources/DeveloperResourcesListView.ts | pending":{"message":"pending"},"panels/developer_resources/DeveloperResourcesListView.ts | sBytes":{"message":"{n, plural, =1 {# byte} other {# bytes}}"},"panels/developer_resources/DeveloperResourcesListView.ts | status":{"message":"Status"},"panels/developer_resources/DeveloperResourcesListView.ts | success":{"message":"success"},"panels/developer_resources/DeveloperResourcesListView.ts | totalBytes":{"message":"Total Bytes"},"panels/developer_resources/DeveloperResourcesListView.ts | url":{"message":"URL"},"panels/developer_resources/DeveloperResourcesView.ts | enableLoadingThroughTarget":{"message":"Load through website"},"panels/developer_resources/DeveloperResourcesView.ts | enterTextToSearchTheUrlAndError":{"message":"Enter text to search the URL and Error columns"},"panels/developer_resources/DeveloperResourcesView.ts | loadHttpsDeveloperResources":{"message":"Load HTTP(S) developer resources through the website you inspect, not through DevTools"},"panels/developer_resources/DeveloperResourcesView.ts | resources":{"message":"{n, plural, =1 {# resource} other {# resources}}"},"panels/developer_resources/DeveloperResourcesView.ts | resourcesCurrentlyLoading":{"message":"{PH1} resources, {PH2} currently loading"},"panels/elements/ClassesPaneWidget.ts | addNewClass":{"message":"Add new class"},"panels/elements/ClassesPaneWidget.ts | classesSAdded":{"message":"Classes {PH1} added"},"panels/elements/ClassesPaneWidget.ts | classSAdded":{"message":"Class {PH1} added"},"panels/elements/ClassesPaneWidget.ts | elementClasses":{"message":"Element Classes"},"panels/elements/ColorSwatchPopoverIcon.ts | openCubicBezierEditor":{"message":"Open cubic bezier editor"},"panels/elements/ColorSwatchPopoverIcon.ts | openShadowEditor":{"message":"Open shadow editor"},"panels/elements/components/AccessibilityTreeNode.ts | ignored":{"message":"Ignored"},"panels/elements/components/AdornerSettingsPane.ts | closeButton":{"message":"Close"},"panels/elements/components/AdornerSettingsPane.ts | settingsTitle":{"message":"Show badges"},"panels/elements/components/CSSHintDetailsView.ts | learnMore":{"message":"Learn More"},"panels/elements/components/CSSPropertyDocsView.ts | dontShow":{"message":"Don't show"},"panels/elements/components/CSSPropertyDocsView.ts | learnMore":{"message":"Learn more"},"panels/elements/components/ElementsBreadcrumbs.ts | breadcrumbs":{"message":"DOM tree breadcrumbs"},"panels/elements/components/ElementsBreadcrumbs.ts | scrollLeft":{"message":"Scroll left"},"panels/elements/components/ElementsBreadcrumbs.ts | scrollRight":{"message":"Scroll right"},"panels/elements/components/ElementsBreadcrumbsUtils.ts | text":{"message":"(text)"},"panels/elements/components/LayoutPane.ts | chooseElementOverlayColor":{"message":"Choose the overlay color for this element"},"panels/elements/components/LayoutPane.ts | colorPickerOpened":{"message":"Color picker opened."},"panels/elements/components/LayoutPane.ts | flexbox":{"message":"Flexbox"},"panels/elements/components/LayoutPane.ts | flexboxOverlays":{"message":"Flexbox overlays"},"panels/elements/components/LayoutPane.ts | grid":{"message":"Grid"},"panels/elements/components/LayoutPane.ts | gridOverlays":{"message":"Grid overlays"},"panels/elements/components/LayoutPane.ts | noFlexboxLayoutsFoundOnThisPage":{"message":"No flexbox layouts found on this page"},"panels/elements/components/LayoutPane.ts | noGridLayoutsFoundOnThisPage":{"message":"No grid layouts found on this page"},"panels/elements/components/LayoutPane.ts | overlayDisplaySettings":{"message":"Overlay display settings"},"panels/elements/components/LayoutPane.ts | showElementInTheElementsPanel":{"message":"Show element in the Elements panel"},"panels/elements/components/StylePropertyEditor.ts | deselectButton":{"message":"Remove {propertyName}: {propertyValue}"},"panels/elements/components/StylePropertyEditor.ts | selectButton":{"message":"Add {propertyName}: {propertyValue}"},"panels/elements/ComputedStyleWidget.ts | filter":{"message":"Filter"},"panels/elements/ComputedStyleWidget.ts | filterComputedStyles":{"message":"Filter Computed Styles"},"panels/elements/ComputedStyleWidget.ts | group":{"message":"Group"},"panels/elements/ComputedStyleWidget.ts | navigateToSelectorSource":{"message":"Navigate to selector source"},"panels/elements/ComputedStyleWidget.ts | navigateToStyle":{"message":"Navigate to style"},"panels/elements/ComputedStyleWidget.ts | noMatchingProperty":{"message":"No matching property"},"panels/elements/ComputedStyleWidget.ts | showAll":{"message":"Show all"},"panels/elements/CSSRuleValidator.ts | fontVariationSettingsWarning":{"message":"Value for setting “{PH1}” {PH2} is outside the supported range [{PH3}, {PH4}] for font-family “{PH5}”."},"panels/elements/CSSRuleValidator.ts | ruleViolatedByParentElementRuleFix":{"message":"Try setting the {EXISTING_PARENT_ELEMENT_RULE} property on the parent to {TARGET_PARENT_ELEMENT_RULE}."},"panels/elements/CSSRuleValidator.ts | ruleViolatedByParentElementRuleReason":{"message":"The {REASON_PROPERTY_DECLARATION_CODE} property on the parent element prevents {AFFECTED_PROPERTY_DECLARATION_CODE} from having an effect."},"panels/elements/CSSRuleValidator.ts | ruleViolatedBySameElementRuleChangeSuggestion":{"message":"Try setting the {EXISTING_PROPERTY_DECLARATION} property to {TARGET_PROPERTY_DECLARATION}."},"panels/elements/CSSRuleValidator.ts | ruleViolatedBySameElementRuleFix":{"message":"Try setting {PROPERTY_NAME} to something other than {PROPERTY_VALUE}."},"panels/elements/CSSRuleValidator.ts | ruleViolatedBySameElementRuleReason":{"message":"The {REASON_PROPERTY_DECLARATION_CODE} property prevents {AFFECTED_PROPERTY_DECLARATION_CODE} from having an effect."},"panels/elements/DOMLinkifier.ts | node":{"message":""},"panels/elements/elements-meta.ts | captureAreaScreenshot":{"message":"Capture area screenshot"},"panels/elements/elements-meta.ts | copyStyles":{"message":"Copy styles"},"panels/elements/elements-meta.ts | disableDomWordWrap":{"message":"Disable DOM word wrap"},"panels/elements/elements-meta.ts | duplicateElement":{"message":"Duplicate element"},"panels/elements/elements-meta.ts | editAsHtml":{"message":"Edit as HTML"},"panels/elements/elements-meta.ts | elements":{"message":"Elements"},"panels/elements/elements-meta.ts | enableDomWordWrap":{"message":"Enable DOM word wrap"},"panels/elements/elements-meta.ts | eventListeners":{"message":"Event Listeners"},"panels/elements/elements-meta.ts | hideElement":{"message":"Hide element"},"panels/elements/elements-meta.ts | hideHtmlComments":{"message":"Hide HTML comments"},"panels/elements/elements-meta.ts | layout":{"message":"Layout"},"panels/elements/elements-meta.ts | properties":{"message":"Properties"},"panels/elements/elements-meta.ts | redo":{"message":"Redo"},"panels/elements/elements-meta.ts | revealDomNodeOnHover":{"message":"Reveal DOM node on hover"},"panels/elements/elements-meta.ts | selectAnElementInThePageTo":{"message":"Select an element in the page to inspect it"},"panels/elements/elements-meta.ts | showComputedStyles":{"message":"Show Computed Styles"},"panels/elements/elements-meta.ts | showCSSDocumentationTooltip":{"message":"Show CSS documentation tooltip"},"panels/elements/elements-meta.ts | showDetailedInspectTooltip":{"message":"Show detailed inspect tooltip"},"panels/elements/elements-meta.ts | showElements":{"message":"Show Elements"},"panels/elements/elements-meta.ts | showEventListeners":{"message":"Show Event Listeners"},"panels/elements/elements-meta.ts | showHtmlComments":{"message":"Show HTML comments"},"panels/elements/elements-meta.ts | showLayout":{"message":"Show Layout"},"panels/elements/elements-meta.ts | showProperties":{"message":"Show Properties"},"panels/elements/elements-meta.ts | showStackTrace":{"message":"Show Stack Trace"},"panels/elements/elements-meta.ts | showStyles":{"message":"Show Styles"},"panels/elements/elements-meta.ts | showUserAgentShadowDOM":{"message":"Show user agent shadow DOM"},"panels/elements/elements-meta.ts | stackTrace":{"message":"Stack Trace"},"panels/elements/elements-meta.ts | toggleEyeDropper":{"message":"Toggle eye dropper"},"panels/elements/elements-meta.ts | undo":{"message":"Undo"},"panels/elements/elements-meta.ts | wordWrap":{"message":"Word wrap"},"panels/elements/ElementsPanel.ts | computed":{"message":"Computed"},"panels/elements/ElementsPanel.ts | computedStylesHidden":{"message":"Computed Styles sidebar hidden"},"panels/elements/ElementsPanel.ts | computedStylesShown":{"message":"Computed Styles sidebar shown"},"panels/elements/ElementsPanel.ts | domTreeExplorer":{"message":"DOM tree explorer"},"panels/elements/ElementsPanel.ts | elementStateS":{"message":"Element state: {PH1}"},"panels/elements/ElementsPanel.ts | findByStringSelectorOrXpath":{"message":"Find by string, selector, or XPath"},"panels/elements/ElementsPanel.ts | hideComputedStylesSidebar":{"message":"Hide Computed Styles sidebar"},"panels/elements/ElementsPanel.ts | nodeCannotBeFoundInTheCurrent":{"message":"Node cannot be found in the current page."},"panels/elements/ElementsPanel.ts | revealInElementsPanel":{"message":"Reveal in Elements panel"},"panels/elements/ElementsPanel.ts | showComputedStylesSidebar":{"message":"Show Computed Styles sidebar"},"panels/elements/ElementsPanel.ts | sidePanelContent":{"message":"Side panel content"},"panels/elements/ElementsPanel.ts | sidePanelToolbar":{"message":"Side panel toolbar"},"panels/elements/ElementsPanel.ts | styles":{"message":"Styles"},"panels/elements/ElementsPanel.ts | switchToAccessibilityTreeView":{"message":"Switch to Accessibility Tree view"},"panels/elements/ElementsPanel.ts | switchToDomTreeView":{"message":"Switch to DOM Tree view"},"panels/elements/ElementsPanel.ts | theDeferredDomNodeCouldNotBe":{"message":"The deferred DOM Node could not be resolved to a valid node."},"panels/elements/ElementsPanel.ts | theRemoteObjectCouldNotBe":{"message":"The remote object could not be resolved to a valid node."},"panels/elements/ElementStatePaneWidget.ts | forceElementState":{"message":"Force element state"},"panels/elements/ElementStatePaneWidget.ts | toggleElementState":{"message":"Toggle Element State"},"panels/elements/ElementsTreeElement.ts | addAttribute":{"message":"Add attribute"},"panels/elements/ElementsTreeElement.ts | captureNodeScreenshot":{"message":"Capture node screenshot"},"panels/elements/ElementsTreeElement.ts | children":{"message":"Children:"},"panels/elements/ElementsTreeElement.ts | collapseChildren":{"message":"Collapse children"},"panels/elements/ElementsTreeElement.ts | copy":{"message":"Copy"},"panels/elements/ElementsTreeElement.ts | copyElement":{"message":"Copy element"},"panels/elements/ElementsTreeElement.ts | copyFullXpath":{"message":"Copy full XPath"},"panels/elements/ElementsTreeElement.ts | copyJsPath":{"message":"Copy JS path"},"panels/elements/ElementsTreeElement.ts | copyOuterhtml":{"message":"Copy outerHTML"},"panels/elements/ElementsTreeElement.ts | copySelector":{"message":"Copy selector"},"panels/elements/ElementsTreeElement.ts | copyStyles":{"message":"Copy styles"},"panels/elements/ElementsTreeElement.ts | copyXpath":{"message":"Copy XPath"},"panels/elements/ElementsTreeElement.ts | cut":{"message":"Cut"},"panels/elements/ElementsTreeElement.ts | deleteElement":{"message":"Delete element"},"panels/elements/ElementsTreeElement.ts | disableFlexMode":{"message":"Disable flex mode"},"panels/elements/ElementsTreeElement.ts | disableGridMode":{"message":"Disable grid mode"},"panels/elements/ElementsTreeElement.ts | disableScrollSnap":{"message":"Disable scroll-snap overlay"},"panels/elements/ElementsTreeElement.ts | duplicateElement":{"message":"Duplicate element"},"panels/elements/ElementsTreeElement.ts | editAsHtml":{"message":"Edit as HTML"},"panels/elements/ElementsTreeElement.ts | editAttribute":{"message":"Edit attribute"},"panels/elements/ElementsTreeElement.ts | editText":{"message":"Edit text"},"panels/elements/ElementsTreeElement.ts | enableFlexMode":{"message":"Enable flex mode"},"panels/elements/ElementsTreeElement.ts | enableGridMode":{"message":"Enable grid mode"},"panels/elements/ElementsTreeElement.ts | enableScrollSnap":{"message":"Enable scroll-snap overlay"},"panels/elements/ElementsTreeElement.ts | expandRecursively":{"message":"Expand recursively"},"panels/elements/ElementsTreeElement.ts | focus":{"message":"Focus"},"panels/elements/ElementsTreeElement.ts | forceState":{"message":"Force state"},"panels/elements/ElementsTreeElement.ts | hideElement":{"message":"Hide element"},"panels/elements/ElementsTreeElement.ts | paste":{"message":"Paste"},"panels/elements/ElementsTreeElement.ts | scrollIntoView":{"message":"Scroll into view"},"panels/elements/ElementsTreeElement.ts | showFrameDetails":{"message":"Show iframe details"},"panels/elements/ElementsTreeElement.ts | thisFrameWasIdentifiedAsAnAd":{"message":"This frame was identified as an ad frame"},"panels/elements/ElementsTreeElement.ts | useSInTheConsoleToReferToThis":{"message":"Use {PH1} in the console to refer to this element."},"panels/elements/ElementsTreeElement.ts | valueIsTooLargeToEdit":{"message":""},"panels/elements/ElementsTreeOutline.ts | adornerSettings":{"message":"Badge settings…"},"panels/elements/ElementsTreeOutline.ts | pageDom":{"message":"Page DOM"},"panels/elements/ElementsTreeOutline.ts | reveal":{"message":"reveal"},"panels/elements/ElementsTreeOutline.ts | showAllNodesDMore":{"message":"Show All Nodes ({PH1} More)"},"panels/elements/ElementsTreeOutline.ts | storeAsGlobalVariable":{"message":"Store as global variable"},"panels/elements/EventListenersWidget.ts | all":{"message":"All"},"panels/elements/EventListenersWidget.ts | ancestors":{"message":"Ancestors"},"panels/elements/EventListenersWidget.ts | blocking":{"message":"Blocking"},"panels/elements/EventListenersWidget.ts | eventListenersCategory":{"message":"Event listeners category"},"panels/elements/EventListenersWidget.ts | frameworkListeners":{"message":"Framework listeners"},"panels/elements/EventListenersWidget.ts | passive":{"message":"Passive"},"panels/elements/EventListenersWidget.ts | refresh":{"message":"Refresh"},"panels/elements/EventListenersWidget.ts | resolveEventListenersBoundWith":{"message":"Resolve event listeners bound with framework"},"panels/elements/EventListenersWidget.ts | showListenersOnTheAncestors":{"message":"Show listeners on the ancestors"},"panels/elements/LayersWidget.ts | cssLayersTitle":{"message":"CSS layers"},"panels/elements/LayersWidget.ts | toggleCSSLayers":{"message":"Toggle CSS Layers view"},"panels/elements/MarkerDecorator.ts | domBreakpoint":{"message":"DOM Breakpoint"},"panels/elements/MarkerDecorator.ts | elementIsHidden":{"message":"Element is hidden"},"panels/elements/NodeStackTraceWidget.ts | noStackTraceAvailable":{"message":"No stack trace available"},"panels/elements/PlatformFontsWidget.ts | dGlyphs":{"message":"{n, plural, =1 {(# glyph)} other {(# glyphs)}}"},"panels/elements/PlatformFontsWidget.ts | localFile":{"message":"Local file"},"panels/elements/PlatformFontsWidget.ts | networkResource":{"message":"Network resource"},"panels/elements/PlatformFontsWidget.ts | renderedFonts":{"message":"Rendered Fonts"},"panels/elements/PropertiesWidget.ts | filter":{"message":"Filter"},"panels/elements/PropertiesWidget.ts | filterProperties":{"message":"Filter Properties"},"panels/elements/PropertiesWidget.ts | noMatchingProperty":{"message":"No matching property"},"panels/elements/PropertiesWidget.ts | showAll":{"message":"Show all"},"panels/elements/PropertiesWidget.ts | showAllTooltip":{"message":"When unchecked, only properties whose values are neither null nor undefined will be shown"},"panels/elements/StylePropertiesSection.ts | constructedStylesheet":{"message":"constructed stylesheet"},"panels/elements/StylePropertiesSection.ts | copyAllCSSChanges":{"message":"Copy all CSS changes"},"panels/elements/StylePropertiesSection.ts | copyAllDeclarations":{"message":"Copy all declarations"},"panels/elements/StylePropertiesSection.ts | copyRule":{"message":"Copy rule"},"panels/elements/StylePropertiesSection.ts | copySelector":{"message":"Copy selector"},"panels/elements/StylePropertiesSection.ts | cssSelector":{"message":"CSS selector"},"panels/elements/StylePropertiesSection.ts | injectedStylesheet":{"message":"injected stylesheet"},"panels/elements/StylePropertiesSection.ts | insertStyleRuleBelow":{"message":"Insert Style Rule Below"},"panels/elements/StylePropertiesSection.ts | sattributesStyle":{"message":"{PH1}[Attributes Style]"},"panels/elements/StylePropertiesSection.ts | showAllPropertiesSMore":{"message":"Show All Properties ({PH1} more)"},"panels/elements/StylePropertiesSection.ts | styleAttribute":{"message":"style attribute"},"panels/elements/StylePropertiesSection.ts | userAgentStylesheet":{"message":"user agent stylesheet"},"panels/elements/StylePropertiesSection.ts | viaInspector":{"message":"via inspector"},"panels/elements/StylePropertyTreeElement.ts | copyAllCSSChanges":{"message":"Copy all CSS changes"},"panels/elements/StylePropertyTreeElement.ts | copyAllCssDeclarationsAsJs":{"message":"Copy all declarations as JS"},"panels/elements/StylePropertyTreeElement.ts | copyAllDeclarations":{"message":"Copy all declarations"},"panels/elements/StylePropertyTreeElement.ts | copyCssDeclarationAsJs":{"message":"Copy declaration as JS"},"panels/elements/StylePropertyTreeElement.ts | copyDeclaration":{"message":"Copy declaration"},"panels/elements/StylePropertyTreeElement.ts | copyProperty":{"message":"Copy property"},"panels/elements/StylePropertyTreeElement.ts | copyRule":{"message":"Copy rule"},"panels/elements/StylePropertyTreeElement.ts | copyValue":{"message":"Copy value"},"panels/elements/StylePropertyTreeElement.ts | flexboxEditorButton":{"message":"Open flexbox editor"},"panels/elements/StylePropertyTreeElement.ts | gridEditorButton":{"message":"Open grid editor"},"panels/elements/StylePropertyTreeElement.ts | openColorPickerS":{"message":"Open color picker. {PH1}"},"panels/elements/StylePropertyTreeElement.ts | revealInSourcesPanel":{"message":"Reveal in Sources panel"},"panels/elements/StylePropertyTreeElement.ts | shiftClickToChangeColorFormat":{"message":"Shift + Click to change color format."},"panels/elements/StylePropertyTreeElement.ts | togglePropertyAndContinueEditing":{"message":"Toggle property and continue editing"},"panels/elements/StylePropertyTreeElement.ts | viewComputedValue":{"message":"View computed value"},"panels/elements/StylesSidebarPane.ts | automaticDarkMode":{"message":"Automatic dark mode"},"panels/elements/StylesSidebarPane.ts | clickToRevealLayer":{"message":"Click to reveal layer in layer tree"},"panels/elements/StylesSidebarPane.ts | copiedToClipboard":{"message":"Copied to clipboard"},"panels/elements/StylesSidebarPane.ts | copyAllCSSChanges":{"message":"Copy CSS changes"},"panels/elements/StylesSidebarPane.ts | cssPropertyName":{"message":"CSS property name: {PH1}"},"panels/elements/StylesSidebarPane.ts | cssPropertyValue":{"message":"CSS property value: {PH1}"},"panels/elements/StylesSidebarPane.ts | filter":{"message":"Filter"},"panels/elements/StylesSidebarPane.ts | filterStyles":{"message":"Filter Styles"},"panels/elements/StylesSidebarPane.ts | incrementdecrementWithMousewheelHundred":{"message":"Increment/decrement with mousewheel or up/down keys. {PH1}: ±100, Shift: ±10, Alt: ±0.1"},"panels/elements/StylesSidebarPane.ts | incrementdecrementWithMousewheelOne":{"message":"Increment/decrement with mousewheel or up/down keys. {PH1}: R ±1, Shift: G ±1, Alt: B ±1"},"panels/elements/StylesSidebarPane.ts | inheritedFroms":{"message":"Inherited from "},"panels/elements/StylesSidebarPane.ts | inheritedFromSPseudoOf":{"message":"Inherited from ::{PH1} pseudo of "},"panels/elements/StylesSidebarPane.ts | invalidPropertyValue":{"message":"Invalid property value"},"panels/elements/StylesSidebarPane.ts | invalidString":{"message":"{PH1}, property name: {PH2}, property value: {PH3}"},"panels/elements/StylesSidebarPane.ts | layer":{"message":"Layer"},"panels/elements/StylesSidebarPane.ts | newStyleRule":{"message":"New Style Rule"},"panels/elements/StylesSidebarPane.ts | noMatchingSelectorOrStyle":{"message":"No matching selector or style"},"panels/elements/StylesSidebarPane.ts | pseudoSElement":{"message":"Pseudo ::{PH1} element"},"panels/elements/StylesSidebarPane.ts | specificity":{"message":"Specificity: {PH1}"},"panels/elements/StylesSidebarPane.ts | toggleRenderingEmulations":{"message":"Toggle common rendering emulations"},"panels/elements/StylesSidebarPane.ts | unknownPropertyName":{"message":"Unknown property name"},"panels/elements/StylesSidebarPane.ts | visibleSelectors":{"message":"{n, plural, =1 {# visible selector listed below} other {# visible selectors listed below}}"},"panels/elements/TopLayerContainer.ts | reveal":{"message":"reveal"},"panels/emulation/DeviceModeToolbar.ts | addDevicePixelRatio":{"message":"Add device pixel ratio"},"panels/emulation/DeviceModeToolbar.ts | addDeviceType":{"message":"Add device type"},"panels/emulation/DeviceModeToolbar.ts | autoadjustZoom":{"message":"Auto-adjust zoom"},"panels/emulation/DeviceModeToolbar.ts | closeDevtools":{"message":"Close DevTools"},"panels/emulation/DeviceModeToolbar.ts | defaultF":{"message":"Default: {PH1}"},"panels/emulation/DeviceModeToolbar.ts | devicePixelRatio":{"message":"Device pixel ratio"},"panels/emulation/DeviceModeToolbar.ts | deviceType":{"message":"Device type"},"panels/emulation/DeviceModeToolbar.ts | dimensions":{"message":"Dimensions"},"panels/emulation/DeviceModeToolbar.ts | edit":{"message":"Edit…"},"panels/emulation/DeviceModeToolbar.ts | experimentalWebPlatformFeature":{"message":"\"Experimental Web Platform Feature\" flag is enabled. Click to disable it."},"panels/emulation/DeviceModeToolbar.ts | experimentalWebPlatformFeatureFlag":{"message":"\"Experimental Web Platform Feature\" flag is disabled. Click to enable it."},"panels/emulation/DeviceModeToolbar.ts | fitToWindowF":{"message":"Fit to window ({PH1}%)"},"panels/emulation/DeviceModeToolbar.ts | heightLeaveEmptyForFull":{"message":"Height (leave empty for full)"},"panels/emulation/DeviceModeToolbar.ts | hideDeviceFrame":{"message":"Hide device frame"},"panels/emulation/DeviceModeToolbar.ts | hideMediaQueries":{"message":"Hide media queries"},"panels/emulation/DeviceModeToolbar.ts | hideRulers":{"message":"Hide rulers"},"panels/emulation/DeviceModeToolbar.ts | landscape":{"message":"Landscape"},"panels/emulation/DeviceModeToolbar.ts | moreOptions":{"message":"More options"},"panels/emulation/DeviceModeToolbar.ts | none":{"message":"None"},"panels/emulation/DeviceModeToolbar.ts | portrait":{"message":"Portrait"},"panels/emulation/DeviceModeToolbar.ts | removeDevicePixelRatio":{"message":"Remove device pixel ratio"},"panels/emulation/DeviceModeToolbar.ts | removeDeviceType":{"message":"Remove device type"},"panels/emulation/DeviceModeToolbar.ts | resetToDefaults":{"message":"Reset to defaults"},"panels/emulation/DeviceModeToolbar.ts | responsive":{"message":"Responsive"},"panels/emulation/DeviceModeToolbar.ts | rotate":{"message":"Rotate"},"panels/emulation/DeviceModeToolbar.ts | screenOrientationOptions":{"message":"Screen orientation options"},"panels/emulation/DeviceModeToolbar.ts | showDeviceFrame":{"message":"Show device frame"},"panels/emulation/DeviceModeToolbar.ts | showMediaQueries":{"message":"Show media queries"},"panels/emulation/DeviceModeToolbar.ts | showRulers":{"message":"Show rulers"},"panels/emulation/DeviceModeToolbar.ts | toggleDualscreenMode":{"message":"Toggle dual-screen mode"},"panels/emulation/DeviceModeToolbar.ts | width":{"message":"Width"},"panels/emulation/DeviceModeToolbar.ts | zoom":{"message":"Zoom"},"panels/emulation/DeviceModeView.ts | doubleclickForFullHeight":{"message":"Double-click for full height"},"panels/emulation/DeviceModeView.ts | laptop":{"message":"Laptop"},"panels/emulation/DeviceModeView.ts | laptopL":{"message":"Laptop L"},"panels/emulation/DeviceModeView.ts | mobileL":{"message":"Mobile L"},"panels/emulation/DeviceModeView.ts | mobileM":{"message":"Mobile M"},"panels/emulation/DeviceModeView.ts | mobileS":{"message":"Mobile S"},"panels/emulation/DeviceModeView.ts | tablet":{"message":"Tablet"},"panels/emulation/emulation-meta.ts | captureFullSizeScreenshot":{"message":"Capture full size screenshot"},"panels/emulation/emulation-meta.ts | captureNodeScreenshot":{"message":"Capture node screenshot"},"panels/emulation/emulation-meta.ts | captureScreenshot":{"message":"Capture screenshot"},"panels/emulation/emulation-meta.ts | device":{"message":"device"},"panels/emulation/emulation-meta.ts | hideDeviceFrame":{"message":"Hide device frame"},"panels/emulation/emulation-meta.ts | hideMediaQueries":{"message":"Hide media queries"},"panels/emulation/emulation-meta.ts | hideRulers":{"message":"Hide rulers in the Device Mode toolbar"},"panels/emulation/emulation-meta.ts | showDeviceFrame":{"message":"Show device frame"},"panels/emulation/emulation-meta.ts | showMediaQueries":{"message":"Show media queries"},"panels/emulation/emulation-meta.ts | showRulers":{"message":"Show rulers in the Device Mode toolbar"},"panels/emulation/emulation-meta.ts | toggleDeviceToolbar":{"message":"Toggle device toolbar"},"panels/emulation/MediaQueryInspector.ts | revealInSourceCode":{"message":"Reveal in source code"},"panels/event_listeners/EventListenersView.ts | deleteEventListener":{"message":"Delete event listener"},"panels/event_listeners/EventListenersView.ts | noEventListeners":{"message":"No event listeners"},"panels/event_listeners/EventListenersView.ts | passive":{"message":"Passive"},"panels/event_listeners/EventListenersView.ts | remove":{"message":"Remove"},"panels/event_listeners/EventListenersView.ts | revealInElementsPanel":{"message":"Reveal in Elements panel"},"panels/event_listeners/EventListenersView.ts | togglePassive":{"message":"Toggle Passive"},"panels/event_listeners/EventListenersView.ts | toggleWhetherEventListenerIs":{"message":"Toggle whether event listener is passive or blocking"},"panels/issues/AffectedBlockedByResponseView.ts | blockedResource":{"message":"Blocked Resource"},"panels/issues/AffectedBlockedByResponseView.ts | nRequests":{"message":"{n, plural, =1 {# request} other {# requests}}"},"panels/issues/AffectedBlockedByResponseView.ts | parentFrame":{"message":"Parent Frame"},"panels/issues/AffectedBlockedByResponseView.ts | requestC":{"message":"Request"},"panels/issues/AffectedCookiesView.ts | domain":{"message":"Domain"},"panels/issues/AffectedCookiesView.ts | filterSetCookieTitle":{"message":"Show network requests that include this Set-Cookie header in the network panel"},"panels/issues/AffectedCookiesView.ts | name":{"message":"Name"},"panels/issues/AffectedCookiesView.ts | nCookies":{"message":"{n, plural, =1 {# cookie} other {# cookies}}"},"panels/issues/AffectedCookiesView.ts | nRawCookieLines":{"message":"{n, plural, =1 {1 Raw Set-Cookie header} other {# Raw Set-Cookie headers}}"},"panels/issues/AffectedCookiesView.ts | path":{"message":"Path"},"panels/issues/AffectedDirectivesView.ts | blocked":{"message":"blocked"},"panels/issues/AffectedDirectivesView.ts | clickToRevealTheViolatingDomNode":{"message":"Click to reveal the violating DOM node in the Elements panel"},"panels/issues/AffectedDirectivesView.ts | directiveC":{"message":"Directive"},"panels/issues/AffectedDirectivesView.ts | element":{"message":"Element"},"panels/issues/AffectedDirectivesView.ts | nDirectives":{"message":"{n, plural, =1 {# directive} other {# directives}}"},"panels/issues/AffectedDirectivesView.ts | reportonly":{"message":"report-only"},"panels/issues/AffectedDirectivesView.ts | resourceC":{"message":"Resource"},"panels/issues/AffectedDirectivesView.ts | sourceLocation":{"message":"Source Location"},"panels/issues/AffectedDirectivesView.ts | status":{"message":"Status"},"panels/issues/AffectedDocumentsInQuirksModeView.ts | documentInTheDOMTree":{"message":"Document in the DOM tree"},"panels/issues/AffectedDocumentsInQuirksModeView.ts | mode":{"message":"Mode"},"panels/issues/AffectedDocumentsInQuirksModeView.ts | nDocuments":{"message":"{n, plural, =1 { document} other { documents}}"},"panels/issues/AffectedDocumentsInQuirksModeView.ts | url":{"message":"URL"},"panels/issues/AffectedElementsView.ts | nElements":{"message":"{n, plural, =1 {# element} other {# elements}}"},"panels/issues/AffectedElementsWithLowContrastView.ts | contrastRatio":{"message":"Contrast ratio"},"panels/issues/AffectedElementsWithLowContrastView.ts | element":{"message":"Element"},"panels/issues/AffectedElementsWithLowContrastView.ts | minimumAA":{"message":"Minimum AA ratio"},"panels/issues/AffectedElementsWithLowContrastView.ts | minimumAAA":{"message":"Minimum AAA ratio"},"panels/issues/AffectedElementsWithLowContrastView.ts | textSize":{"message":"Text size"},"panels/issues/AffectedElementsWithLowContrastView.ts | textWeight":{"message":"Text weight"},"panels/issues/AffectedHeavyAdView.ts | cpuPeakLimit":{"message":"CPU peak limit"},"panels/issues/AffectedHeavyAdView.ts | cpuTotalLimit":{"message":"CPU total limit"},"panels/issues/AffectedHeavyAdView.ts | frameUrl":{"message":"Frame URL"},"panels/issues/AffectedHeavyAdView.ts | limitExceeded":{"message":"Limit exceeded"},"panels/issues/AffectedHeavyAdView.ts | networkLimit":{"message":"Network limit"},"panels/issues/AffectedHeavyAdView.ts | nResources":{"message":"{n, plural, =1 {# resource} other {# resources}}"},"panels/issues/AffectedHeavyAdView.ts | removed":{"message":"Removed"},"panels/issues/AffectedHeavyAdView.ts | resolutionStatus":{"message":"Resolution Status"},"panels/issues/AffectedHeavyAdView.ts | warned":{"message":"Warned"},"panels/issues/AffectedResourcesView.ts | clickToRevealTheFramesDomNodeIn":{"message":"Click to reveal the frame's DOM node in the Elements panel"},"panels/issues/AffectedResourcesView.ts | unavailable":{"message":"unavailable"},"panels/issues/AffectedResourcesView.ts | unknown":{"message":"unknown"},"panels/issues/AffectedSharedArrayBufferIssueDetailsView.ts | aSharedarraybufferWas":{"message":"A SharedArrayBuffer was instantiated in a context that is not cross-origin isolated"},"panels/issues/AffectedSharedArrayBufferIssueDetailsView.ts | blocked":{"message":"blocked"},"panels/issues/AffectedSharedArrayBufferIssueDetailsView.ts | instantiation":{"message":"Instantiation"},"panels/issues/AffectedSharedArrayBufferIssueDetailsView.ts | nViolations":{"message":"{n, plural, =1 {# violation} other {# violations}}"},"panels/issues/AffectedSharedArrayBufferIssueDetailsView.ts | sharedarraybufferWasTransferedTo":{"message":"SharedArrayBuffer was transfered to a context that is not cross-origin isolated"},"panels/issues/AffectedSharedArrayBufferIssueDetailsView.ts | sourceLocation":{"message":"Source Location"},"panels/issues/AffectedSharedArrayBufferIssueDetailsView.ts | status":{"message":"Status"},"panels/issues/AffectedSharedArrayBufferIssueDetailsView.ts | transfer":{"message":"Transfer"},"panels/issues/AffectedSharedArrayBufferIssueDetailsView.ts | trigger":{"message":"Trigger"},"panels/issues/AffectedSharedArrayBufferIssueDetailsView.ts | warning":{"message":"warning"},"panels/issues/AffectedSourcesView.ts | nSources":{"message":"{n, plural, =1 {# source} other {# sources}}"},"panels/issues/AffectedTrackingSitesView.ts | nTrackingSites":{"message":"{n, plural, =1 {1 potentially tracking website} other {# potentially tracking websites}}"},"panels/issues/AttributionReportingIssueDetailsView.ts | element":{"message":"Element"},"panels/issues/AttributionReportingIssueDetailsView.ts | invalidHeaderValue":{"message":"Invalid Header Value"},"panels/issues/AttributionReportingIssueDetailsView.ts | nViolations":{"message":"{n, plural, =1 {# violation} other {# violations}}"},"panels/issues/AttributionReportingIssueDetailsView.ts | request":{"message":"Request"},"panels/issues/AttributionReportingIssueDetailsView.ts | untrustworthyOrigin":{"message":"Untrustworthy origin"},"panels/issues/ComboBoxOfCheckBoxes.ts | genericMenuLabel":{"message":"Menu"},"panels/issues/components/HideIssuesMenu.ts | tooltipTitle":{"message":"Hide issues"},"panels/issues/CorsIssueDetailsView.ts | allowCredentialsValueFromHeader":{"message":"Access-Control-Allow-Credentials Header Value"},"panels/issues/CorsIssueDetailsView.ts | allowedOrigin":{"message":"Allowed Origin (from header)"},"panels/issues/CorsIssueDetailsView.ts | blocked":{"message":"blocked"},"panels/issues/CorsIssueDetailsView.ts | disallowedRequestHeader":{"message":"Disallowed Request Header"},"panels/issues/CorsIssueDetailsView.ts | disallowedRequestMethod":{"message":"Disallowed Request Method"},"panels/issues/CorsIssueDetailsView.ts | failedRequest":{"message":"Failed Request"},"panels/issues/CorsIssueDetailsView.ts | header":{"message":"Header"},"panels/issues/CorsIssueDetailsView.ts | initiatorAddressSpace":{"message":"Initiator Address"},"panels/issues/CorsIssueDetailsView.ts | initiatorContext":{"message":"Initiator Context"},"panels/issues/CorsIssueDetailsView.ts | insecure":{"message":"insecure"},"panels/issues/CorsIssueDetailsView.ts | invalidValue":{"message":"Invalid Value (if available)"},"panels/issues/CorsIssueDetailsView.ts | nRequests":{"message":"{n, plural, =1 {# request} other {# requests}}"},"panels/issues/CorsIssueDetailsView.ts | preflightDisallowedRedirect":{"message":"Response to preflight was a redirect"},"panels/issues/CorsIssueDetailsView.ts | preflightInvalidStatus":{"message":"HTTP status of preflight request didn't indicate success"},"panels/issues/CorsIssueDetailsView.ts | preflightRequest":{"message":"Preflight Request"},"panels/issues/CorsIssueDetailsView.ts | preflightRequestIfProblematic":{"message":"Preflight Request (if problematic)"},"panels/issues/CorsIssueDetailsView.ts | problem":{"message":"Problem"},"panels/issues/CorsIssueDetailsView.ts | problemInvalidValue":{"message":"Invalid Value"},"panels/issues/CorsIssueDetailsView.ts | problemMissingHeader":{"message":"Missing Header"},"panels/issues/CorsIssueDetailsView.ts | problemMultipleValues":{"message":"Multiple Values"},"panels/issues/CorsIssueDetailsView.ts | request":{"message":"Request"},"panels/issues/CorsIssueDetailsView.ts | resourceAddressSpace":{"message":"Resource Address"},"panels/issues/CorsIssueDetailsView.ts | secure":{"message":"secure"},"panels/issues/CorsIssueDetailsView.ts | sourceLocation":{"message":"Source Location"},"panels/issues/CorsIssueDetailsView.ts | status":{"message":"Status"},"panels/issues/CorsIssueDetailsView.ts | unsupportedScheme":{"message":"Unsupported Scheme"},"panels/issues/CorsIssueDetailsView.ts | warning":{"message":"warning"},"panels/issues/CSPViolationsView.ts | filter":{"message":"Filter"},"panels/issues/GenericIssueDetailsView.ts | frameId":{"message":"Frame"},"panels/issues/GenericIssueDetailsView.ts | nResources":{"message":"{n, plural, =1 {# resource} other {# resources}}"},"panels/issues/GenericIssueDetailsView.ts | violatingNode":{"message":"Violating node"},"panels/issues/HiddenIssuesRow.ts | hiddenIssues":{"message":"Hidden issues"},"panels/issues/HiddenIssuesRow.ts | unhideAll":{"message":"Unhide all"},"panels/issues/IssueKindView.ts | hideAllCurrentBreakingChanges":{"message":"Hide all current Breaking Changes"},"panels/issues/IssueKindView.ts | hideAllCurrentImprovements":{"message":"Hide all current Improvements"},"panels/issues/IssueKindView.ts | hideAllCurrentPageErrors":{"message":"Hide all current Page Errors"},"panels/issues/issues-meta.ts | cspViolations":{"message":"CSP Violations"},"panels/issues/issues-meta.ts | issues":{"message":"Issues"},"panels/issues/issues-meta.ts | showCspViolations":{"message":"Show CSP Violations"},"panels/issues/issues-meta.ts | showIssues":{"message":"Show Issues"},"panels/issues/IssuesPane.ts | attributionReporting":{"message":"Attribution Reporting API"},"panels/issues/IssuesPane.ts | contentSecurityPolicy":{"message":"Content Security Policy"},"panels/issues/IssuesPane.ts | cors":{"message":"Cross Origin Resource Sharing"},"panels/issues/IssuesPane.ts | crossOriginEmbedderPolicy":{"message":"Cross Origin Embedder Policy"},"panels/issues/IssuesPane.ts | generic":{"message":"Generic"},"panels/issues/IssuesPane.ts | groupByCategory":{"message":"Group by category"},"panels/issues/IssuesPane.ts | groupByKind":{"message":"Group by kind"},"panels/issues/IssuesPane.ts | groupDisplayedIssuesUnder":{"message":"Group displayed issues under associated categories"},"panels/issues/IssuesPane.ts | groupDisplayedIssuesUnderKind":{"message":"Group displayed issues as Page errors, Breaking changes and Improvements"},"panels/issues/IssuesPane.ts | heavyAds":{"message":"Heavy Ads"},"panels/issues/IssuesPane.ts | includeCookieIssuesCausedBy":{"message":"Include cookie Issues caused by third-party sites"},"panels/issues/IssuesPane.ts | includeThirdpartyCookieIssues":{"message":"Include third-party cookie issues"},"panels/issues/IssuesPane.ts | lowTextContrast":{"message":"Low Text Contrast"},"panels/issues/IssuesPane.ts | mixedContent":{"message":"Mixed Content"},"panels/issues/IssuesPane.ts | noIssuesDetectedSoFar":{"message":"No issues detected so far"},"panels/issues/IssuesPane.ts | onlyThirdpartyCookieIssues":{"message":"Only third-party cookie issues detected so far"},"panels/issues/IssuesPane.ts | other":{"message":"Other"},"panels/issues/IssuesPane.ts | quirksMode":{"message":"Quirks Mode"},"panels/issues/IssuesPane.ts | samesiteCookie":{"message":"SameSite Cookie"},"panels/issues/IssueView.ts | affectedResources":{"message":"Affected Resources"},"panels/issues/IssueView.ts | automaticallyUpgraded":{"message":"automatically upgraded"},"panels/issues/IssueView.ts | blocked":{"message":"blocked"},"panels/issues/IssueView.ts | hideIssuesLikeThis":{"message":"Hide issues like this"},"panels/issues/IssueView.ts | learnMoreS":{"message":"Learn more: {PH1}"},"panels/issues/IssueView.ts | name":{"message":"Name"},"panels/issues/IssueView.ts | nRequests":{"message":"{n, plural, =1 {# request} other {# requests}}"},"panels/issues/IssueView.ts | nResources":{"message":"{n, plural, =1 {# resource} other {# resources}}"},"panels/issues/IssueView.ts | restrictionStatus":{"message":"Restriction Status"},"panels/issues/IssueView.ts | unhideIssuesLikeThis":{"message":"Unhide issues like this"},"panels/issues/IssueView.ts | warned":{"message":"Warned"},"panels/js_profiler/js_profiler-meta.ts | performance":{"message":"Performance"},"panels/js_profiler/js_profiler-meta.ts | profiler":{"message":"Profiler"},"panels/js_profiler/js_profiler-meta.ts | record":{"message":"Record"},"panels/js_profiler/js_profiler-meta.ts | showPerformance":{"message":"Show Performance"},"panels/js_profiler/js_profiler-meta.ts | showProfiler":{"message":"Show Profiler"},"panels/js_profiler/js_profiler-meta.ts | showRecentTimelineSessions":{"message":"Show recent timeline sessions"},"panels/js_profiler/js_profiler-meta.ts | startProfilingAndReloadPage":{"message":"Start profiling and reload page"},"panels/js_profiler/js_profiler-meta.ts | startStopRecording":{"message":"Start/stop recording"},"panels/js_profiler/js_profiler-meta.ts | stop":{"message":"Stop"},"panels/layer_viewer/layer_viewer-meta.ts | panOrRotateDown":{"message":"Pan or rotate down"},"panels/layer_viewer/layer_viewer-meta.ts | panOrRotateLeft":{"message":"Pan or rotate left"},"panels/layer_viewer/layer_viewer-meta.ts | panOrRotateRight":{"message":"Pan or rotate right"},"panels/layer_viewer/layer_viewer-meta.ts | panOrRotateUp":{"message":"Pan or rotate up"},"panels/layer_viewer/layer_viewer-meta.ts | resetView":{"message":"Reset view"},"panels/layer_viewer/layer_viewer-meta.ts | switchToPanMode":{"message":"Switch to pan mode"},"panels/layer_viewer/layer_viewer-meta.ts | switchToRotateMode":{"message":"Switch to rotate mode"},"panels/layer_viewer/layer_viewer-meta.ts | zoomIn":{"message":"Zoom in"},"panels/layer_viewer/layer_viewer-meta.ts | zoomOut":{"message":"Zoom out"},"panels/layer_viewer/LayerDetailsView.ts | compositingReasons":{"message":"Compositing Reasons"},"panels/layer_viewer/LayerDetailsView.ts | containingBlocRectangleDimensions":{"message":"Containing Block {PH1} × {PH2} (at {PH3}, {PH4})"},"panels/layer_viewer/LayerDetailsView.ts | mainThreadScrollingReason":{"message":"Main thread scrolling reason"},"panels/layer_viewer/LayerDetailsView.ts | memoryEstimate":{"message":"Memory estimate"},"panels/layer_viewer/LayerDetailsView.ts | nearestLayerShiftingContaining":{"message":"Nearest Layer Shifting Containing Block"},"panels/layer_viewer/LayerDetailsView.ts | nearestLayerShiftingStickyBox":{"message":"Nearest Layer Shifting Sticky Box"},"panels/layer_viewer/LayerDetailsView.ts | nonFastScrollable":{"message":"Non fast scrollable"},"panels/layer_viewer/LayerDetailsView.ts | paintCount":{"message":"Paint count"},"panels/layer_viewer/LayerDetailsView.ts | paintProfiler":{"message":"Paint Profiler"},"panels/layer_viewer/LayerDetailsView.ts | repaintsOnScroll":{"message":"Repaints on scroll"},"panels/layer_viewer/LayerDetailsView.ts | scrollRectangleDimensions":{"message":"{PH1} {PH2} × {PH3} (at {PH4}, {PH5})"},"panels/layer_viewer/LayerDetailsView.ts | selectALayerToSeeItsDetails":{"message":"Select a layer to see its details"},"panels/layer_viewer/LayerDetailsView.ts | size":{"message":"Size"},"panels/layer_viewer/LayerDetailsView.ts | slowScrollRegions":{"message":"Slow scroll regions"},"panels/layer_viewer/LayerDetailsView.ts | stickyAncenstorLayersS":{"message":"{PH1}: {PH2} ({PH3})"},"panels/layer_viewer/LayerDetailsView.ts | stickyBoxRectangleDimensions":{"message":"Sticky Box {PH1} × {PH2} (at {PH3}, {PH4})"},"panels/layer_viewer/LayerDetailsView.ts | stickyPositionConstraint":{"message":"Sticky position constraint"},"panels/layer_viewer/LayerDetailsView.ts | touchEventHandler":{"message":"Touch event handler"},"panels/layer_viewer/LayerDetailsView.ts | unnamed":{"message":""},"panels/layer_viewer/LayerDetailsView.ts | updateRectangleDimensions":{"message":"{PH1} × {PH2} (at {PH3}, {PH4})"},"panels/layer_viewer/LayerDetailsView.ts | wheelEventHandler":{"message":"Wheel event handler"},"panels/layer_viewer/Layers3DView.ts | cantDisplayLayers":{"message":"Can't display layers,"},"panels/layer_viewer/Layers3DView.ts | checkSForPossibleReasons":{"message":"Check {PH1} for possible reasons."},"panels/layer_viewer/Layers3DView.ts | dLayersView":{"message":"3D Layers View"},"panels/layer_viewer/Layers3DView.ts | layerInformationIsNotYet":{"message":"Layer information is not yet available."},"panels/layer_viewer/Layers3DView.ts | paints":{"message":"Paints"},"panels/layer_viewer/Layers3DView.ts | resetView":{"message":"Reset View"},"panels/layer_viewer/Layers3DView.ts | showPaintProfiler":{"message":"Show Paint Profiler"},"panels/layer_viewer/Layers3DView.ts | slowScrollRects":{"message":"Slow scroll rects"},"panels/layer_viewer/Layers3DView.ts | webglSupportIsDisabledInYour":{"message":"WebGL support is disabled in your browser."},"panels/layer_viewer/LayerTreeOutline.ts | layersTreePane":{"message":"Layers Tree Pane"},"panels/layer_viewer/LayerTreeOutline.ts | showPaintProfiler":{"message":"Show Paint Profiler"},"panels/layer_viewer/LayerTreeOutline.ts | updateChildDimension":{"message":" ({PH1} × {PH2})"},"panels/layer_viewer/LayerViewHost.ts | showInternalLayers":{"message":"Show internal layers"},"panels/layer_viewer/PaintProfilerView.ts | bitmap":{"message":"Bitmap"},"panels/layer_viewer/PaintProfilerView.ts | commandLog":{"message":"Command Log"},"panels/layer_viewer/PaintProfilerView.ts | misc":{"message":"Misc"},"panels/layer_viewer/PaintProfilerView.ts | profiling":{"message":"Profiling…"},"panels/layer_viewer/PaintProfilerView.ts | profilingResults":{"message":"Profiling results"},"panels/layer_viewer/PaintProfilerView.ts | shapes":{"message":"Shapes"},"panels/layer_viewer/PaintProfilerView.ts | text":{"message":"Text"},"panels/layer_viewer/TransformController.ts | panModeX":{"message":"Pan mode (X)"},"panels/layer_viewer/TransformController.ts | resetTransform":{"message":"Reset transform (0)"},"panels/layer_viewer/TransformController.ts | rotateModeV":{"message":"Rotate mode (V)"},"panels/layers/layers-meta.ts | layers":{"message":"Layers"},"panels/layers/layers-meta.ts | showLayers":{"message":"Show Layers"},"panels/layers/LayersPanel.ts | details":{"message":"Details"},"panels/layers/LayersPanel.ts | profiler":{"message":"Profiler"},"panels/lighthouse/lighthouse-meta.ts | showLighthouse":{"message":"Show Lighthouse"},"panels/lighthouse/LighthouseController.ts | accessibility":{"message":"Accessibility"},"panels/lighthouse/LighthouseController.ts | applyMobileEmulation":{"message":"Apply mobile emulation"},"panels/lighthouse/LighthouseController.ts | applyMobileEmulationDuring":{"message":"Apply mobile emulation during auditing"},"panels/lighthouse/LighthouseController.ts | atLeastOneCategoryMustBeSelected":{"message":"At least one category must be selected."},"panels/lighthouse/LighthouseController.ts | bestPractices":{"message":"Best practices"},"panels/lighthouse/LighthouseController.ts | canOnlyAuditHttphttpsPages":{"message":"Can only audit pages on HTTP or HTTPS. Navigate to a different page."},"panels/lighthouse/LighthouseController.ts | clearStorage":{"message":"Clear storage"},"panels/lighthouse/LighthouseController.ts | desktop":{"message":"Desktop"},"panels/lighthouse/LighthouseController.ts | devtoolsThrottling":{"message":"DevTools throttling (advanced)"},"panels/lighthouse/LighthouseController.ts | doesThisPageFollowBestPractices":{"message":"Does this page follow best practices for modern web development"},"panels/lighthouse/LighthouseController.ts | doesThisPageMeetTheStandardOfA":{"message":"Does this page meet the standard of a Progressive Web App"},"panels/lighthouse/LighthouseController.ts | howLongDoesThisAppTakeToShow":{"message":"How long does this app take to show content and become usable"},"panels/lighthouse/LighthouseController.ts | indexeddb":{"message":"IndexedDB"},"panels/lighthouse/LighthouseController.ts | isThisPageOptimizedForAdSpeedAnd":{"message":"Is this page optimized for ad speed and quality"},"panels/lighthouse/LighthouseController.ts | isThisPageOptimizedForSearch":{"message":"Is this page optimized for search engine results ranking"},"panels/lighthouse/LighthouseController.ts | isThisPageUsableByPeopleWith":{"message":"Is this page usable by people with disabilities or impairments"},"panels/lighthouse/LighthouseController.ts | javaScriptDisabled":{"message":"JavaScript is disabled. You need to enable JavaScript to audit this page. Open the Command Menu and run the Enable JavaScript command to enable JavaScript."},"panels/lighthouse/LighthouseController.ts | legacyNavigation":{"message":"Legacy navigation"},"panels/lighthouse/LighthouseController.ts | lighthouseMode":{"message":"Lighthouse mode"},"panels/lighthouse/LighthouseController.ts | localStorage":{"message":"Local Storage"},"panels/lighthouse/LighthouseController.ts | mobile":{"message":"Mobile"},"panels/lighthouse/LighthouseController.ts | multipleTabsAreBeingControlledBy":{"message":"Multiple tabs are being controlled by the same service worker. Close your other tabs on the same origin to audit this page."},"panels/lighthouse/LighthouseController.ts | navigation":{"message":"Navigation (Default)"},"panels/lighthouse/LighthouseController.ts | navigationTooltip":{"message":"Navigation mode analyzes a page load, exactly like the original Lighthouse reports."},"panels/lighthouse/LighthouseController.ts | performance":{"message":"Performance"},"panels/lighthouse/LighthouseController.ts | progressiveWebApp":{"message":"Progressive Web App"},"panels/lighthouse/LighthouseController.ts | publisherAds":{"message":"Publisher Ads"},"panels/lighthouse/LighthouseController.ts | resetStorageLocalstorage":{"message":"Reset storage (cache, service workers, etc) before auditing. (Good for performance & PWA testing)"},"panels/lighthouse/LighthouseController.ts | runLighthouseInMode":{"message":"Run Lighthouse in navigation, timespan, or snapshot mode"},"panels/lighthouse/LighthouseController.ts | seo":{"message":"SEO"},"panels/lighthouse/LighthouseController.ts | simulateASlowerPageLoadBasedOn":{"message":"Simulated throttling simulates a slower page load based on data from an initial unthrottled load. DevTools throttling actually slows down the page."},"panels/lighthouse/LighthouseController.ts | simulatedThrottling":{"message":"Simulated throttling (default)"},"panels/lighthouse/LighthouseController.ts | snapshot":{"message":"Snapshot"},"panels/lighthouse/LighthouseController.ts | snapshotTooltip":{"message":"Snapshot mode analyzes the page in a particular state, typically after user interactions."},"panels/lighthouse/LighthouseController.ts | thereMayBeStoredDataAffectingLoadingPlural":{"message":"There may be stored data affecting loading performance in these locations: {PH1}. Audit this page in an incognito window to prevent those resources from affecting your scores."},"panels/lighthouse/LighthouseController.ts | thereMayBeStoredDataAffectingSingular":{"message":"There may be stored data affecting loading performance in this location: {PH1}. Audit this page in an incognito window to prevent those resources from affecting your scores."},"panels/lighthouse/LighthouseController.ts | throttlingMethod":{"message":"Throttling method"},"panels/lighthouse/LighthouseController.ts | timespan":{"message":"Timespan"},"panels/lighthouse/LighthouseController.ts | timespanTooltip":{"message":"Timespan mode analyzes an arbitrary period of time, typically containing user interactions."},"panels/lighthouse/LighthouseController.ts | useLegacyNavigation":{"message":"Analyze the page using classic Lighthouse when in navigation mode."},"panels/lighthouse/LighthouseController.ts | webSql":{"message":"Web SQL"},"panels/lighthouse/LighthousePanel.ts | cancelling":{"message":"Cancelling"},"panels/lighthouse/LighthousePanel.ts | clearAll":{"message":"Clear all"},"panels/lighthouse/LighthousePanel.ts | dropLighthouseJsonHere":{"message":"Drop Lighthouse JSON here"},"panels/lighthouse/LighthousePanel.ts | lighthouseSettings":{"message":"Lighthouse settings"},"panels/lighthouse/LighthousePanel.ts | performAnAudit":{"message":"Perform an audit…"},"panels/lighthouse/LighthousePanel.ts | printing":{"message":"Printing"},"panels/lighthouse/LighthousePanel.ts | thePrintPopupWindowIsOpenPlease":{"message":"The print popup window is open. Please close it to continue."},"panels/lighthouse/LighthouseReportSelector.ts | newReport":{"message":"(new report)"},"panels/lighthouse/LighthouseReportSelector.ts | reports":{"message":"Reports"},"panels/lighthouse/LighthouseStartView.ts | analyzeNavigation":{"message":"Analyze page load"},"panels/lighthouse/LighthouseStartView.ts | analyzeSnapshot":{"message":"Analyze page state"},"panels/lighthouse/LighthouseStartView.ts | categories":{"message":"Categories"},"panels/lighthouse/LighthouseStartView.ts | device":{"message":"Device"},"panels/lighthouse/LighthouseStartView.ts | generateLighthouseReport":{"message":"Generate a Lighthouse report"},"panels/lighthouse/LighthouseStartView.ts | learnMore":{"message":"Learn more"},"panels/lighthouse/LighthouseStartView.ts | mode":{"message":"Mode"},"panels/lighthouse/LighthouseStartView.ts | plugins":{"message":"Plugins"},"panels/lighthouse/LighthouseStartView.ts | startTimespan":{"message":"Start timespan"},"panels/lighthouse/LighthouseStatusView.ts | ahSorryWeRanIntoAnError":{"message":"Ah, sorry! We ran into an error."},"panels/lighthouse/LighthouseStatusView.ts | almostThereLighthouseIsNow":{"message":"Almost there! Lighthouse is now generating your report."},"panels/lighthouse/LighthouseStatusView.ts | asPageLoadTimeIncreasesFromOne":{"message":"As page load time increases from one second to seven seconds, the probability of a mobile site visitor bouncing increases 113%. [Source: Think with Google]"},"panels/lighthouse/LighthouseStatusView.ts | asTheNumberOfElementsOnAPage":{"message":"As the number of elements on a page increases from 400 to 6,000, the probability of conversion drops 95%. [Source: Think with Google]"},"panels/lighthouse/LighthouseStatusView.ts | auditingS":{"message":"Auditing {PH1}"},"panels/lighthouse/LighthouseStatusView.ts | auditingYourWebPage":{"message":"Auditing your web page"},"panels/lighthouse/LighthouseStatusView.ts | byReducingTheResponseSizeOfJson":{"message":"By reducing the response size of JSON needed for displaying comments, Instagram saw increased impressions [Source: WPO Stats]"},"panels/lighthouse/LighthouseStatusView.ts | cancel":{"message":"Cancel"},"panels/lighthouse/LighthouseStatusView.ts | cancelling":{"message":"Cancelling…"},"panels/lighthouse/LighthouseStatusView.ts | fastFactMessageWithPlaceholder":{"message":"💡 {PH1}"},"panels/lighthouse/LighthouseStatusView.ts | ifASiteTakesSecondToBecome":{"message":"If a site takes >1 second to become interactive, users lose attention, and their perception of completing the page task is broken [Source: Google Developers Blog]"},"panels/lighthouse/LighthouseStatusView.ts | ifThisIssueIsReproduciblePlease":{"message":"If this issue is reproducible, please report it at the Lighthouse GitHub repo."},"panels/lighthouse/LighthouseStatusView.ts | lighthouseIsGatheringInformation":{"message":"Lighthouse is gathering information about the page to compute your score."},"panels/lighthouse/LighthouseStatusView.ts | lighthouseIsLoadingThePage":{"message":"Lighthouse is loading the page."},"panels/lighthouse/LighthouseStatusView.ts | lighthouseIsLoadingYourPage":{"message":"Lighthouse is loading your page"},"panels/lighthouse/LighthouseStatusView.ts | lighthouseIsLoadingYourPageWith":{"message":"Lighthouse is loading your page with throttling to measure performance on a mobile device on 3G."},"panels/lighthouse/LighthouseStatusView.ts | lighthouseIsLoadingYourPageWithMobile":{"message":"Lighthouse is loading your page with mobile emulation."},"panels/lighthouse/LighthouseStatusView.ts | lighthouseIsLoadingYourPageWithThrottling":{"message":"Lighthouse is loading your page with throttling to measure performance on a slow desktop on 3G."},"panels/lighthouse/LighthouseStatusView.ts | lighthouseIsWarmingUp":{"message":"Lighthouse is warming up…"},"panels/lighthouse/LighthouseStatusView.ts | lighthouseOnlySimulatesMobile":{"message":"Lighthouse only simulates mobile performance; to measure performance on a real device, try WebPageTest.org [Source: Lighthouse team]"},"panels/lighthouse/LighthouseStatusView.ts | loading":{"message":"Loading…"},"panels/lighthouse/LighthouseStatusView.ts | mbTakesAMinimumOfSecondsTo":{"message":"1MB takes a minimum of 5 seconds to download on a typical 3G connection [Source: WebPageTest and DevTools 3G definition]."},"panels/lighthouse/LighthouseStatusView.ts | OfGlobalMobileUsersInWereOnGOrG":{"message":"75% of global mobile users in 2016 were on 2G or 3G [Source: GSMA Mobile]"},"panels/lighthouse/LighthouseStatusView.ts | OfMobilePagesTakeNearlySeconds":{"message":"70% of mobile pages take nearly 7 seconds for the visual content above the fold to display on the screen. [Source: Think with Google]"},"panels/lighthouse/LighthouseStatusView.ts | rebuildingPinterestPagesFor":{"message":"Rebuilding Pinterest pages for performance increased conversion rates by 15% [Source: WPO Stats]"},"panels/lighthouse/LighthouseStatusView.ts | SecondsIsTheAverageTimeAMobile":{"message":"19 seconds is the average time a mobile web page takes to load on a 3G connection [Source: Google DoubleClick blog]"},"panels/lighthouse/LighthouseStatusView.ts | theAverageUserDeviceCostsLess":{"message":"The average user device costs less than 200 USD. [Source: International Data Corporation]"},"panels/lighthouse/LighthouseStatusView.ts | tryToNavigateToTheUrlInAFresh":{"message":"Try to navigate to the URL in a fresh Chrome profile without any other tabs or extensions open and try again."},"panels/lighthouse/LighthouseStatusView.ts | walmartSawAIncreaseInRevenueFor":{"message":"Walmart saw a 1% increase in revenue for every 100ms improvement in page load [Source: WPO Stats]"},"panels/lighthouse/LighthouseTimespanView.ts | cancel":{"message":"Cancel"},"panels/lighthouse/LighthouseTimespanView.ts | endTimespan":{"message":"End timespan"},"panels/lighthouse/LighthouseTimespanView.ts | timespanStarted":{"message":"Timespan started, interact with the page"},"panels/lighthouse/LighthouseTimespanView.ts | timespanStarting":{"message":"Timespan starting…"},"panels/media/EventDisplayTable.ts | eventDisplay":{"message":"Event display"},"panels/media/EventDisplayTable.ts | eventName":{"message":"Event name"},"panels/media/EventDisplayTable.ts | timestamp":{"message":"Timestamp"},"panels/media/EventDisplayTable.ts | value":{"message":"Value"},"panels/media/EventTimelineView.ts | bufferingStatus":{"message":"Buffering Status"},"panels/media/EventTimelineView.ts | playbackStatus":{"message":"Playback Status"},"panels/media/media-meta.ts | media":{"message":"Media"},"panels/media/media-meta.ts | showMedia":{"message":"Show Media"},"panels/media/media-meta.ts | video":{"message":"video"},"panels/media/PlayerDetailView.ts | events":{"message":"Events"},"panels/media/PlayerDetailView.ts | messages":{"message":"Messages"},"panels/media/PlayerDetailView.ts | playerEvents":{"message":"Player events"},"panels/media/PlayerDetailView.ts | playerMessages":{"message":"Player messages"},"panels/media/PlayerDetailView.ts | playerProperties":{"message":"Player properties"},"panels/media/PlayerDetailView.ts | playerTimeline":{"message":"Player timeline"},"panels/media/PlayerDetailView.ts | properties":{"message":"Properties"},"panels/media/PlayerDetailView.ts | timeline":{"message":"Timeline"},"panels/media/PlayerListView.ts | hideAllOthers":{"message":"Hide all others"},"panels/media/PlayerListView.ts | hidePlayer":{"message":"Hide player"},"panels/media/PlayerListView.ts | players":{"message":"Players"},"panels/media/PlayerListView.ts | savePlayerInfo":{"message":"Save player info"},"panels/media/PlayerMessagesView.ts | all":{"message":"All"},"panels/media/PlayerMessagesView.ts | custom":{"message":"Custom"},"panels/media/PlayerMessagesView.ts | debug":{"message":"Debug"},"panels/media/PlayerMessagesView.ts | default":{"message":"Default"},"panels/media/PlayerMessagesView.ts | error":{"message":"Error"},"panels/media/PlayerMessagesView.ts | errorCauseLabel":{"message":"Caused by:"},"panels/media/PlayerMessagesView.ts | errorCodeLabel":{"message":"Error Code:"},"panels/media/PlayerMessagesView.ts | errorDataLabel":{"message":"Data:"},"panels/media/PlayerMessagesView.ts | errorGroupLabel":{"message":"Error Group:"},"panels/media/PlayerMessagesView.ts | errorStackLabel":{"message":"Stacktrace:"},"panels/media/PlayerMessagesView.ts | filterLogMessages":{"message":"Filter log messages"},"panels/media/PlayerMessagesView.ts | info":{"message":"Info"},"panels/media/PlayerMessagesView.ts | logLevel":{"message":"Log level:"},"panels/media/PlayerMessagesView.ts | warning":{"message":"Warning"},"panels/media/PlayerPropertiesView.ts | audio":{"message":"Audio"},"panels/media/PlayerPropertiesView.ts | bitrate":{"message":"Bitrate"},"panels/media/PlayerPropertiesView.ts | decoder":{"message":"Decoder"},"panels/media/PlayerPropertiesView.ts | decoderName":{"message":"Decoder name"},"panels/media/PlayerPropertiesView.ts | decryptingDemuxer":{"message":"Decrypting demuxer"},"panels/media/PlayerPropertiesView.ts | duration":{"message":"Duration"},"panels/media/PlayerPropertiesView.ts | encoderName":{"message":"Encoder name"},"panels/media/PlayerPropertiesView.ts | fileSize":{"message":"File size"},"panels/media/PlayerPropertiesView.ts | frameRate":{"message":"Frame rate"},"panels/media/PlayerPropertiesView.ts | hardwareDecoder":{"message":"Hardware decoder"},"panels/media/PlayerPropertiesView.ts | hardwareEncoder":{"message":"Hardware encoder"},"panels/media/PlayerPropertiesView.ts | noDecoder":{"message":"No decoder"},"panels/media/PlayerPropertiesView.ts | noEncoder":{"message":"No encoder"},"panels/media/PlayerPropertiesView.ts | noTextTracks":{"message":"No text tracks"},"panels/media/PlayerPropertiesView.ts | playbackFrameTitle":{"message":"Playback frame title"},"panels/media/PlayerPropertiesView.ts | playbackFrameUrl":{"message":"Playback frame URL"},"panels/media/PlayerPropertiesView.ts | properties":{"message":"Properties"},"panels/media/PlayerPropertiesView.ts | rangeHeaderSupport":{"message":"Range header support"},"panels/media/PlayerPropertiesView.ts | rendererName":{"message":"Renderer name"},"panels/media/PlayerPropertiesView.ts | resolution":{"message":"Resolution"},"panels/media/PlayerPropertiesView.ts | singleoriginPlayback":{"message":"Single-origin playback"},"panels/media/PlayerPropertiesView.ts | startTime":{"message":"Start time"},"panels/media/PlayerPropertiesView.ts | streaming":{"message":"Streaming"},"panels/media/PlayerPropertiesView.ts | textTrack":{"message":"Text track"},"panels/media/PlayerPropertiesView.ts | track":{"message":"Track"},"panels/media/PlayerPropertiesView.ts | video":{"message":"Video"},"panels/media/PlayerPropertiesView.ts | videoFreezingScore":{"message":"Video freezing score"},"panels/media/PlayerPropertiesView.ts | videoPlaybackRoughness":{"message":"Video playback roughness"},"panels/mobile_throttling/mobile_throttling-meta.ts | device":{"message":"device"},"panels/mobile_throttling/mobile_throttling-meta.ts | enableFastGThrottling":{"message":"Enable fast 3G throttling"},"panels/mobile_throttling/mobile_throttling-meta.ts | enableSlowGThrottling":{"message":"Enable slow 3G throttling"},"panels/mobile_throttling/mobile_throttling-meta.ts | goOffline":{"message":"Go offline"},"panels/mobile_throttling/mobile_throttling-meta.ts | goOnline":{"message":"Go online"},"panels/mobile_throttling/mobile_throttling-meta.ts | showThrottling":{"message":"Show Throttling"},"panels/mobile_throttling/mobile_throttling-meta.ts | throttling":{"message":"Throttling"},"panels/mobile_throttling/mobile_throttling-meta.ts | throttlingTag":{"message":"throttling"},"panels/mobile_throttling/MobileThrottlingSelector.ts | advanced":{"message":"Advanced"},"panels/mobile_throttling/MobileThrottlingSelector.ts | disabled":{"message":"Disabled"},"panels/mobile_throttling/MobileThrottlingSelector.ts | presets":{"message":"Presets"},"panels/mobile_throttling/NetworkPanelIndicator.ts | acceptedEncodingOverrideSet":{"message":"The set of accepted Content-Encoding headers has been modified by DevTools. See the Network Conditions panel."},"panels/mobile_throttling/NetworkPanelIndicator.ts | networkThrottlingIsEnabled":{"message":"Network throttling is enabled"},"panels/mobile_throttling/NetworkPanelIndicator.ts | requestsMayBeBlocked":{"message":"Requests may be blocked"},"panels/mobile_throttling/NetworkPanelIndicator.ts | requestsMayBeRewrittenByLocal":{"message":"Requests may be rewritten by local overrides"},"panels/mobile_throttling/NetworkThrottlingSelector.ts | custom":{"message":"Custom"},"panels/mobile_throttling/NetworkThrottlingSelector.ts | disabled":{"message":"Disabled"},"panels/mobile_throttling/NetworkThrottlingSelector.ts | presets":{"message":"Presets"},"panels/mobile_throttling/ThrottlingManager.ts | add":{"message":"Add…"},"panels/mobile_throttling/ThrottlingManager.ts | addS":{"message":"Add {PH1}"},"panels/mobile_throttling/ThrottlingManager.ts | cpuThrottling":{"message":"CPU throttling"},"panels/mobile_throttling/ThrottlingManager.ts | cpuThrottlingIsEnabled":{"message":"CPU throttling is enabled"},"panels/mobile_throttling/ThrottlingManager.ts | dSlowdown":{"message":"{PH1}× slowdown"},"panels/mobile_throttling/ThrottlingManager.ts | excessConcurrency":{"message":"Exceeding the default value may degrade system performance."},"panels/mobile_throttling/ThrottlingManager.ts | forceDisconnectedFromNetwork":{"message":"Force disconnected from network"},"panels/mobile_throttling/ThrottlingManager.ts | hardwareConcurrency":{"message":"Hardware concurrency"},"panels/mobile_throttling/ThrottlingManager.ts | hardwareConcurrencyIsEnabled":{"message":"Hardware concurrency override is enabled"},"panels/mobile_throttling/ThrottlingManager.ts | hardwareConcurrencyValue":{"message":"Value of navigator.hardwareConcurrency"},"panels/mobile_throttling/ThrottlingManager.ts | noThrottling":{"message":"No throttling"},"panels/mobile_throttling/ThrottlingManager.ts | offline":{"message":"Offline"},"panels/mobile_throttling/ThrottlingManager.ts | resetConcurrency":{"message":"Reset to the default value"},"panels/mobile_throttling/ThrottlingManager.ts | sS":{"message":"{PH1}: {PH2}"},"panels/mobile_throttling/ThrottlingManager.ts | throttling":{"message":"Throttling"},"panels/mobile_throttling/ThrottlingPresets.ts | checkNetworkAndPerformancePanels":{"message":"Check Network and Performance panels"},"panels/mobile_throttling/ThrottlingPresets.ts | custom":{"message":"Custom"},"panels/mobile_throttling/ThrottlingPresets.ts | fastGXCpuSlowdown":{"message":"Fast 3G & 4x CPU slowdown"},"panels/mobile_throttling/ThrottlingPresets.ts | lowendMobile":{"message":"Low-end mobile"},"panels/mobile_throttling/ThrottlingPresets.ts | midtierMobile":{"message":"Mid-tier mobile"},"panels/mobile_throttling/ThrottlingPresets.ts | noInternetConnectivity":{"message":"No internet connectivity"},"panels/mobile_throttling/ThrottlingPresets.ts | noThrottling":{"message":"No throttling"},"panels/mobile_throttling/ThrottlingPresets.ts | slowGXCpuSlowdown":{"message":"Slow 3G & 6x CPU slowdown"},"panels/mobile_throttling/ThrottlingSettingsTab.ts | addCustomProfile":{"message":"Add custom profile..."},"panels/mobile_throttling/ThrottlingSettingsTab.ts | dms":{"message":"{PH1} ms"},"panels/mobile_throttling/ThrottlingSettingsTab.ts | download":{"message":"Download"},"panels/mobile_throttling/ThrottlingSettingsTab.ts | dskbits":{"message":"{PH1} kbit/s"},"panels/mobile_throttling/ThrottlingSettingsTab.ts | fsmbits":{"message":"{PH1} Mbit/s"},"panels/mobile_throttling/ThrottlingSettingsTab.ts | latency":{"message":"Latency"},"panels/mobile_throttling/ThrottlingSettingsTab.ts | latencyMustBeAnIntegerBetweenSms":{"message":"Latency must be an integer between {PH1} ms to {PH2} ms inclusive"},"panels/mobile_throttling/ThrottlingSettingsTab.ts | networkThrottlingProfiles":{"message":"Network Throttling Profiles"},"panels/mobile_throttling/ThrottlingSettingsTab.ts | optional":{"message":"optional"},"panels/mobile_throttling/ThrottlingSettingsTab.ts | profileName":{"message":"Profile Name"},"panels/mobile_throttling/ThrottlingSettingsTab.ts | profileNameCharactersLengthMust":{"message":"Profile Name characters length must be between 1 to {PH1} inclusive"},"panels/mobile_throttling/ThrottlingSettingsTab.ts | sMustBeANumberBetweenSkbsToSkbs":{"message":"{PH1} must be a number between {PH2} kbit/s to {PH3} kbit/s inclusive"},"panels/mobile_throttling/ThrottlingSettingsTab.ts | upload":{"message":"Upload"},"panels/network/BinaryResourceView.ts | binaryViewType":{"message":"Binary view type"},"panels/network/BinaryResourceView.ts | copiedAsBase":{"message":"Copied as Base64"},"panels/network/BinaryResourceView.ts | copiedAsHex":{"message":"Copied as Hex"},"panels/network/BinaryResourceView.ts | copiedAsUtf":{"message":"Copied as UTF-8"},"panels/network/BinaryResourceView.ts | copyAsBase":{"message":"Copy as Base64"},"panels/network/BinaryResourceView.ts | copyAsHex":{"message":"Copy as Hex"},"panels/network/BinaryResourceView.ts | copyAsUtf":{"message":"Copy as UTF-8"},"panels/network/BinaryResourceView.ts | copyToClipboard":{"message":"Copy to clipboard"},"panels/network/BinaryResourceView.ts | hexViewer":{"message":"Hex Viewer"},"panels/network/BlockedURLsPane.ts | addNetworkRequestBlockingPattern":{"message":"Add network request blocking pattern"},"panels/network/BlockedURLsPane.ts | addPattern":{"message":"Add pattern"},"panels/network/BlockedURLsPane.ts | dBlocked":{"message":"{PH1} blocked"},"panels/network/BlockedURLsPane.ts | enableNetworkRequestBlocking":{"message":"Enable network request blocking"},"panels/network/BlockedURLsPane.ts | itemDeleted":{"message":"Item successfully deleted"},"panels/network/BlockedURLsPane.ts | networkRequestsAreNotBlockedS":{"message":"Network requests are not blocked. {PH1}"},"panels/network/BlockedURLsPane.ts | patternAlreadyExists":{"message":"Pattern already exists."},"panels/network/BlockedURLsPane.ts | patternInputCannotBeEmpty":{"message":"Pattern input cannot be empty."},"panels/network/BlockedURLsPane.ts | removeAllPatterns":{"message":"Remove all patterns"},"panels/network/BlockedURLsPane.ts | textPatternToBlockMatching":{"message":"Text pattern to block matching requests; use * for wildcard"},"panels/network/components/HeaderSectionRow.ts | activeClientExperimentVariation":{"message":"Active client experiment variation IDs."},"panels/network/components/HeaderSectionRow.ts | activeClientExperimentVariationIds":{"message":"Active client experiment variation IDs that trigger server-side behavior."},"panels/network/components/HeaderSectionRow.ts | decoded":{"message":"Decoded:"},"panels/network/components/HeaderSectionRow.ts | editHeader":{"message":"Override header"},"panels/network/components/HeaderSectionRow.ts | headerNamesOnlyLetters":{"message":"Header names should contain only letters, digits, hyphens or underscores"},"panels/network/components/HeaderSectionRow.ts | learnMore":{"message":"Learn more"},"panels/network/components/HeaderSectionRow.ts | learnMoreInTheIssuesTab":{"message":"Learn more in the issues tab"},"panels/network/components/HeaderSectionRow.ts | reloadPrompt":{"message":"Refresh the page/request for these changes to take effect"},"panels/network/components/HeaderSectionRow.ts | removeOverride":{"message":"Remove this header override"},"panels/network/components/RequestHeaderSection.ts | learnMore":{"message":"Learn more"},"panels/network/components/RequestHeaderSection.ts | onlyProvisionalHeadersAre":{"message":"Only provisional headers are available because this request was not sent over the network and instead was served from a local cache, which doesn’t store the original request headers. Disable cache to see full request headers."},"panels/network/components/RequestHeaderSection.ts | provisionalHeadersAreShown":{"message":"Provisional headers are shown."},"panels/network/components/RequestHeaderSection.ts | provisionalHeadersAreShownDisableCache":{"message":"Provisional headers are shown. Disable cache to see full headers."},"panels/network/components/RequestHeadersView.ts | fromDiskCache":{"message":"(from disk cache)"},"panels/network/components/RequestHeadersView.ts | fromMemoryCache":{"message":"(from memory cache)"},"panels/network/components/RequestHeadersView.ts | fromPrefetchCache":{"message":"(from prefetch cache)"},"panels/network/components/RequestHeadersView.ts | fromServiceWorker":{"message":"(from service worker)"},"panels/network/components/RequestHeadersView.ts | fromSignedexchange":{"message":"(from signed-exchange)"},"panels/network/components/RequestHeadersView.ts | fromWebBundle":{"message":"(from Web Bundle)"},"panels/network/components/RequestHeadersView.ts | general":{"message":"General"},"panels/network/components/RequestHeadersView.ts | headerOverrides":{"message":"Header overrides"},"panels/network/components/RequestHeadersView.ts | raw":{"message":"Raw"},"panels/network/components/RequestHeadersView.ts | referrerPolicy":{"message":"Referrer Policy"},"panels/network/components/RequestHeadersView.ts | remoteAddress":{"message":"Remote Address"},"panels/network/components/RequestHeadersView.ts | requestHeaders":{"message":"Request Headers"},"panels/network/components/RequestHeadersView.ts | requestMethod":{"message":"Request Method"},"panels/network/components/RequestHeadersView.ts | requestUrl":{"message":"Request URL"},"panels/network/components/RequestHeadersView.ts | responseHeaders":{"message":"Response Headers"},"panels/network/components/RequestHeadersView.ts | revealHeaderOverrides":{"message":"Reveal header override definitions"},"panels/network/components/RequestHeadersView.ts | showMore":{"message":"Show more"},"panels/network/components/RequestHeadersView.ts | statusCode":{"message":"Status Code"},"panels/network/components/RequestTrustTokensView.ts | aClientprovidedArgumentWas":{"message":"A client-provided argument was malformed or otherwise invalid."},"panels/network/components/RequestTrustTokensView.ts | eitherNoInputsForThisOperation":{"message":"Either no inputs for this operation are available or the output exceeds the operations quota."},"panels/network/components/RequestTrustTokensView.ts | failure":{"message":"Failure"},"panels/network/components/RequestTrustTokensView.ts | issuer":{"message":"Issuer"},"panels/network/components/RequestTrustTokensView.ts | issuers":{"message":"Issuers"},"panels/network/components/RequestTrustTokensView.ts | numberOfIssuedTokens":{"message":"Number of issued tokens"},"panels/network/components/RequestTrustTokensView.ts | parameters":{"message":"Parameters"},"panels/network/components/RequestTrustTokensView.ts | refreshPolicy":{"message":"Refresh policy"},"panels/network/components/RequestTrustTokensView.ts | result":{"message":"Result"},"panels/network/components/RequestTrustTokensView.ts | status":{"message":"Status"},"panels/network/components/RequestTrustTokensView.ts | success":{"message":"Success"},"panels/network/components/RequestTrustTokensView.ts | theKeysForThisPSTIssuerAreUnavailable":{"message":"The keys for this PST issuer are unavailable. The issuer may need to be registered via the Chrome registration process."},"panels/network/components/RequestTrustTokensView.ts | theOperationFailedForAnUnknown":{"message":"The operation failed for an unknown reason."},"panels/network/components/RequestTrustTokensView.ts | theOperationsResultWasServedFrom":{"message":"The operations result was served from cache."},"panels/network/components/RequestTrustTokensView.ts | theOperationWasFulfilledLocally":{"message":"The operation was fulfilled locally, no request was sent."},"panels/network/components/RequestTrustTokensView.ts | theServersResponseWasMalformedOr":{"message":"The servers response was malformed or otherwise invalid."},"panels/network/components/RequestTrustTokensView.ts | topLevelOrigin":{"message":"Top level origin"},"panels/network/components/RequestTrustTokensView.ts | type":{"message":"Type"},"panels/network/components/ResponseHeaderSection.ts | addHeader":{"message":"Add header"},"panels/network/components/ResponseHeaderSection.ts | chooseThisOptionIfTheResourceAnd":{"message":"Choose this option if the resource and the document are served from the same site."},"panels/network/components/ResponseHeaderSection.ts | onlyChooseThisOptionIfAn":{"message":"Only choose this option if an arbitrary website including this resource does not impose a security risk."},"panels/network/components/ResponseHeaderSection.ts | thisDocumentWasBlockedFrom":{"message":"This document was blocked from loading in an iframe with a sandbox attribute because this document specified a cross-origin opener policy."},"panels/network/components/ResponseHeaderSection.ts | toEmbedThisFrameInYourDocument":{"message":"To embed this frame in your document, the response needs to enable the cross-origin embedder policy by specifying the following response header:"},"panels/network/components/ResponseHeaderSection.ts | toUseThisResourceFromADifferent":{"message":"To use this resource from a different origin, the server needs to specify a cross-origin resource policy in the response headers:"},"panels/network/components/ResponseHeaderSection.ts | toUseThisResourceFromADifferentOrigin":{"message":"To use this resource from a different origin, the server may relax the cross-origin resource policy response header:"},"panels/network/components/ResponseHeaderSection.ts | toUseThisResourceFromADifferentSite":{"message":"To use this resource from a different site, the server may relax the cross-origin resource policy response header:"},"panels/network/components/WebBundleInfoView.ts | bundledResource":{"message":"Bundled resource"},"panels/network/EventSourceMessagesView.ts | copyMessage":{"message":"Copy message"},"panels/network/EventSourceMessagesView.ts | data":{"message":"Data"},"panels/network/EventSourceMessagesView.ts | eventSource":{"message":"Event Source"},"panels/network/EventSourceMessagesView.ts | id":{"message":"Id"},"panels/network/EventSourceMessagesView.ts | time":{"message":"Time"},"panels/network/EventSourceMessagesView.ts | type":{"message":"Type"},"panels/network/network-meta.ts | clear":{"message":"Clear network log"},"panels/network/network-meta.ts | colorCode":{"message":"color code"},"panels/network/network-meta.ts | colorCodeByResourceType":{"message":"Color code by resource type"},"panels/network/network-meta.ts | colorcodeResourceTypes":{"message":"Color-code resource types"},"panels/network/network-meta.ts | diskCache":{"message":"disk cache"},"panels/network/network-meta.ts | dontGroupNetworkLogItemsByFrame":{"message":"Don't group network log items by frame"},"panels/network/network-meta.ts | frame":{"message":"frame"},"panels/network/network-meta.ts | group":{"message":"group"},"panels/network/network-meta.ts | groupNetworkLogByFrame":{"message":"Group network log by frame"},"panels/network/network-meta.ts | groupNetworkLogItemsByFrame":{"message":"Group network log items by frame"},"panels/network/network-meta.ts | hideRequestDetails":{"message":"Hide request details"},"panels/network/network-meta.ts | network":{"message":"Network"},"panels/network/network-meta.ts | netWork":{"message":"network"},"panels/network/network-meta.ts | networkConditions":{"message":"Network conditions"},"panels/network/network-meta.ts | networkRequestBlocking":{"message":"Network request blocking"},"panels/network/network-meta.ts | networkThrottling":{"message":"network throttling"},"panels/network/network-meta.ts | recordNetworkLog":{"message":"Record network log"},"panels/network/network-meta.ts | resourceType":{"message":"resource type"},"panels/network/network-meta.ts | search":{"message":"Search"},"panels/network/network-meta.ts | showNetwork":{"message":"Show Network"},"panels/network/network-meta.ts | showNetworkConditions":{"message":"Show Network conditions"},"panels/network/network-meta.ts | showNetworkRequestBlocking":{"message":"Show Network request blocking"},"panels/network/network-meta.ts | showSearch":{"message":"Show Search"},"panels/network/network-meta.ts | stopRecordingNetworkLog":{"message":"Stop recording network log"},"panels/network/network-meta.ts | useDefaultColors":{"message":"Use default colors"},"panels/network/NetworkConfigView.ts | acceptedEncoding":{"message":"Accepted Content-Encodings"},"panels/network/NetworkConfigView.ts | caching":{"message":"Caching"},"panels/network/NetworkConfigView.ts | clientHintsStatusText":{"message":"User agent updated."},"panels/network/NetworkConfigView.ts | custom":{"message":"Custom..."},"panels/network/NetworkConfigView.ts | customUserAgentFieldIsRequired":{"message":"Custom user agent field is required"},"panels/network/NetworkConfigView.ts | disableCache":{"message":"Disable cache"},"panels/network/NetworkConfigView.ts | enterACustomUserAgent":{"message":"Enter a custom user agent"},"panels/network/NetworkConfigView.ts | networkConditionsPanelShown":{"message":"Network conditions shown"},"panels/network/NetworkConfigView.ts | networkThrottling":{"message":"Network throttling"},"panels/network/NetworkConfigView.ts | selectAutomatically":{"message":"Use browser default"},"panels/network/NetworkConfigView.ts | userAgent":{"message":"User agent"},"panels/network/NetworkDataGridNode.ts | alternativeJobWonRace":{"message":"Chrome used a HTTP/3 connection induced by an 'Alt-Svc' header because it won a race against establishing a connection using a different HTTP version."},"panels/network/NetworkDataGridNode.ts | alternativeJobWonWithoutRace":{"message":"Chrome used a HTTP/3 connection induced by an 'Alt-Svc' header without racing against establishing a connection using a different HTTP version."},"panels/network/NetworkDataGridNode.ts | blockeds":{"message":"(blocked:{PH1})"},"panels/network/NetworkDataGridNode.ts | blockedTooltip":{"message":"This request was blocked due to misconfigured response headers, click to view the headers"},"panels/network/NetworkDataGridNode.ts | broken":{"message":"Chrome did not try to establish a HTTP/3 connection because it was marked as broken."},"panels/network/NetworkDataGridNode.ts | canceled":{"message":"(canceled)"},"panels/network/NetworkDataGridNode.ts | corsError":{"message":"CORS error"},"panels/network/NetworkDataGridNode.ts | crossoriginResourceSharingErrorS":{"message":"Cross-Origin Resource Sharing error: {PH1}"},"panels/network/NetworkDataGridNode.ts | csp":{"message":"csp"},"panels/network/NetworkDataGridNode.ts | data":{"message":"(data)"},"panels/network/NetworkDataGridNode.ts | devtools":{"message":"devtools"},"panels/network/NetworkDataGridNode.ts | diskCache":{"message":"(disk cache)"},"panels/network/NetworkDataGridNode.ts | dnsAlpnH3JobWonRace":{"message":"Chrome used a HTTP/3 connection due to the DNS record indicating HTTP/3 support, which won a race against establishing a connection using a different HTTP version."},"panels/network/NetworkDataGridNode.ts | dnsAlpnH3JobWonWithoutRace":{"message":"Chrome used a HTTP/3 connection due to the DNS record indicating HTTP/3 support. There was no race against establishing a connection using a different HTTP version."},"panels/network/NetworkDataGridNode.ts | failed":{"message":"(failed)"},"panels/network/NetworkDataGridNode.ts | finished":{"message":"Finished"},"panels/network/NetworkDataGridNode.ts | hasOverriddenHeaders":{"message":"Request has overridden headers"},"panels/network/NetworkDataGridNode.ts | level":{"message":"level 1"},"panels/network/NetworkDataGridNode.ts | mainJobWonRace":{"message":"Chrome used this protocol because it won a race against establishing a HTTP/3 connection."},"panels/network/NetworkDataGridNode.ts | mappingMissing":{"message":"Chrome did not use an alternative HTTP version because no alternative protocol information was available when the request was issued, but an 'Alt-Svc' header was present in the response."},"panels/network/NetworkDataGridNode.ts | memoryCache":{"message":"(memory cache)"},"panels/network/NetworkDataGridNode.ts | origin":{"message":"origin"},"panels/network/NetworkDataGridNode.ts | other":{"message":"other"},"panels/network/NetworkDataGridNode.ts | otherC":{"message":"Other"},"panels/network/NetworkDataGridNode.ts | parser":{"message":"Parser"},"panels/network/NetworkDataGridNode.ts | pending":{"message":"Pending"},"panels/network/NetworkDataGridNode.ts | pendingq":{"message":"(pending)"},"panels/network/NetworkDataGridNode.ts | prefetchCache":{"message":"(prefetch cache)"},"panels/network/NetworkDataGridNode.ts | preflight":{"message":"Preflight"},"panels/network/NetworkDataGridNode.ts | preload":{"message":"Preload"},"panels/network/NetworkDataGridNode.ts | push":{"message":"Push / "},"panels/network/NetworkDataGridNode.ts | redirect":{"message":"Redirect"},"panels/network/NetworkDataGridNode.ts | script":{"message":"Script"},"panels/network/NetworkDataGridNode.ts | selectPreflightRequest":{"message":"Select preflight request"},"panels/network/NetworkDataGridNode.ts | selectTheRequestThatTriggered":{"message":"Select the request that triggered this preflight"},"panels/network/NetworkDataGridNode.ts | servedFromDiskCacheResourceSizeS":{"message":"Served from disk cache, resource size: {PH1}"},"panels/network/NetworkDataGridNode.ts | servedFromMemoryCacheResource":{"message":"Served from memory cache, resource size: {PH1}"},"panels/network/NetworkDataGridNode.ts | servedFromPrefetchCacheResource":{"message":"Served from prefetch cache, resource size: {PH1}"},"panels/network/NetworkDataGridNode.ts | servedFromServiceworkerResource":{"message":"Served from ServiceWorker, resource size: {PH1}"},"panels/network/NetworkDataGridNode.ts | servedFromSignedHttpExchange":{"message":"Served from Signed HTTP Exchange, resource size: {PH1}"},"panels/network/NetworkDataGridNode.ts | servedFromWebBundle":{"message":"Served from Web Bundle, resource size: {PH1}"},"panels/network/NetworkDataGridNode.ts | serviceworker":{"message":"(ServiceWorker)"},"panels/network/NetworkDataGridNode.ts | signedexchange":{"message":"signed-exchange"},"panels/network/NetworkDataGridNode.ts | sPreflight":{"message":"{PH1} + Preflight"},"panels/network/NetworkDataGridNode.ts | timeSubtitleTooltipText":{"message":"Latency (response received time - start time)"},"panels/network/NetworkDataGridNode.ts | unknown":{"message":"(unknown)"},"panels/network/NetworkDataGridNode.ts | unknownExplanation":{"message":"The request status cannot be shown here because the page that issued it unloaded while the request was in flight. You can use chrome://net-export to capture a network log and see all request details."},"panels/network/NetworkDataGridNode.ts | webBundle":{"message":"(Web Bundle)"},"panels/network/NetworkDataGridNode.ts | webBundleError":{"message":"Web Bundle error"},"panels/network/NetworkDataGridNode.ts | webBundleInnerRequest":{"message":"Served from Web Bundle"},"panels/network/NetworkItemView.ts | cookies":{"message":"Cookies"},"panels/network/NetworkItemView.ts | eventstream":{"message":"EventStream"},"panels/network/NetworkItemView.ts | headers":{"message":"Headers"},"panels/network/NetworkItemView.ts | initiator":{"message":"Initiator"},"panels/network/NetworkItemView.ts | messages":{"message":"Messages"},"panels/network/NetworkItemView.ts | payload":{"message":"Payload"},"panels/network/NetworkItemView.ts | preview":{"message":"Preview"},"panels/network/NetworkItemView.ts | rawResponseData":{"message":"Raw response data"},"panels/network/NetworkItemView.ts | requestAndResponseCookies":{"message":"Request and response cookies"},"panels/network/NetworkItemView.ts | requestAndResponseTimeline":{"message":"Request and response timeline"},"panels/network/NetworkItemView.ts | requestInitiatorCallStack":{"message":"Request initiator call stack"},"panels/network/NetworkItemView.ts | response":{"message":"Response"},"panels/network/NetworkItemView.ts | responsePreview":{"message":"Response preview"},"panels/network/NetworkItemView.ts | signedexchangeError":{"message":"SignedExchange error"},"panels/network/NetworkItemView.ts | timing":{"message":"Timing"},"panels/network/NetworkItemView.ts | trustTokenOperationDetails":{"message":"Private State Token operation details"},"panels/network/NetworkItemView.ts | trustTokens":{"message":"Private State Tokens"},"panels/network/NetworkItemView.ts | websocketMessages":{"message":"WebSocket messages"},"panels/network/NetworkLogView.ts | areYouSureYouWantToClearBrowser":{"message":"Are you sure you want to clear browser cache?"},"panels/network/NetworkLogView.ts | areYouSureYouWantToClearBrowserCookies":{"message":"Are you sure you want to clear browser cookies?"},"panels/network/NetworkLogView.ts | blockedRequests":{"message":"Blocked Requests"},"panels/network/NetworkLogView.ts | blockRequestDomain":{"message":"Block request domain"},"panels/network/NetworkLogView.ts | blockRequestUrl":{"message":"Block request URL"},"panels/network/NetworkLogView.ts | clearBrowserCache":{"message":"Clear browser cache"},"panels/network/NetworkLogView.ts | clearBrowserCookies":{"message":"Clear browser cookies"},"panels/network/NetworkLogView.ts | copy":{"message":"Copy"},"panels/network/NetworkLogView.ts | copyAllAsCurl":{"message":"Copy all as cURL"},"panels/network/NetworkLogView.ts | copyAllAsCurlBash":{"message":"Copy all as cURL (bash)"},"panels/network/NetworkLogView.ts | copyAllAsCurlCmd":{"message":"Copy all as cURL (cmd)"},"panels/network/NetworkLogView.ts | copyAllAsFetch":{"message":"Copy all as fetch"},"panels/network/NetworkLogView.ts | copyAllAsHar":{"message":"Copy all as HAR"},"panels/network/NetworkLogView.ts | copyAllAsNodejsFetch":{"message":"Copy all as Node.js fetch"},"panels/network/NetworkLogView.ts | copyAllAsPowershell":{"message":"Copy all as PowerShell"},"panels/network/NetworkLogView.ts | copyAsCurl":{"message":"Copy as cURL"},"panels/network/NetworkLogView.ts | copyAsCurlBash":{"message":"Copy as cURL (bash)"},"panels/network/NetworkLogView.ts | copyAsCurlCmd":{"message":"Copy as cURL (cmd)"},"panels/network/NetworkLogView.ts | copyAsFetch":{"message":"Copy as fetch"},"panels/network/NetworkLogView.ts | copyAsNodejsFetch":{"message":"Copy as Node.js fetch"},"panels/network/NetworkLogView.ts | copyAsPowershell":{"message":"Copy as PowerShell"},"panels/network/NetworkLogView.ts | copyRequestHeaders":{"message":"Copy request headers"},"panels/network/NetworkLogView.ts | copyResponse":{"message":"Copy response"},"panels/network/NetworkLogView.ts | copyResponseHeaders":{"message":"Copy response headers"},"panels/network/NetworkLogView.ts | copyStacktrace":{"message":"Copy stack trace"},"panels/network/NetworkLogView.ts | domcontentloadedS":{"message":"DOMContentLoaded: {PH1}"},"panels/network/NetworkLogView.ts | dropHarFilesHere":{"message":"Drop HAR files here"},"panels/network/NetworkLogView.ts | finishS":{"message":"Finish: {PH1}"},"panels/network/NetworkLogView.ts | hasBlockedCookies":{"message":"Has blocked cookies"},"panels/network/NetworkLogView.ts | hideDataUrls":{"message":"Hide data URLs"},"panels/network/NetworkLogView.ts | hidesDataAndBlobUrls":{"message":"Hides data: and blob: URLs"},"panels/network/NetworkLogView.ts | invertFilter":{"message":"Invert"},"panels/network/NetworkLogView.ts | invertsFilter":{"message":"Inverts the search filter"},"panels/network/NetworkLogView.ts | learnMore":{"message":"Learn more"},"panels/network/NetworkLogView.ts | loadS":{"message":"Load: {PH1}"},"panels/network/NetworkLogView.ts | networkDataAvailable":{"message":"Network Data Available"},"panels/network/NetworkLogView.ts | onlyShowBlockedRequests":{"message":"Only show blocked requests"},"panels/network/NetworkLogView.ts | onlyShowRequestsWithBlocked":{"message":"Only show requests with blocked response cookies"},"panels/network/NetworkLogView.ts | onlyShowThirdPartyRequests":{"message":"Shows only requests with origin different from page origin"},"panels/network/NetworkLogView.ts | overrideHeaders":{"message":"Override headers"},"panels/network/NetworkLogView.ts | performARequestOrHitSToRecordThe":{"message":"Perform a request or hit {PH1} to record the reload."},"panels/network/NetworkLogView.ts | recordingNetworkActivity":{"message":"Recording network activity…"},"panels/network/NetworkLogView.ts | recordToDisplayNetworkActivity":{"message":"Record network log ({PH1}) to display network activity."},"panels/network/NetworkLogView.ts | replayXhr":{"message":"Replay XHR"},"panels/network/NetworkLogView.ts | resourceTypesToInclude":{"message":"Resource types to include"},"panels/network/NetworkLogView.ts | saveAllAsHarWithContent":{"message":"Save all as HAR with content"},"panels/network/NetworkLogView.ts | sBResourcesLoadedByThePage":{"message":"{PH1} B resources loaded by the page"},"panels/network/NetworkLogView.ts | sBSBResourcesLoadedByThePage":{"message":"{PH1} B / {PH2} B resources loaded by the page"},"panels/network/NetworkLogView.ts | sBSBTransferredOverNetwork":{"message":"{PH1} B / {PH2} B transferred over network"},"panels/network/NetworkLogView.ts | sBTransferredOverNetwork":{"message":"{PH1} B transferred over network"},"panels/network/NetworkLogView.ts | sRequests":{"message":"{PH1} requests"},"panels/network/NetworkLogView.ts | sResources":{"message":"{PH1} resources"},"panels/network/NetworkLogView.ts | sSRequests":{"message":"{PH1} / {PH2} requests"},"panels/network/NetworkLogView.ts | sSResources":{"message":"{PH1} / {PH2} resources"},"panels/network/NetworkLogView.ts | sSTransferred":{"message":"{PH1} / {PH2} transferred"},"panels/network/NetworkLogView.ts | sTransferred":{"message":"{PH1} transferred"},"panels/network/NetworkLogView.ts | thirdParty":{"message":"3rd-party requests"},"panels/network/NetworkLogView.ts | unblockS":{"message":"Unblock {PH1}"},"panels/network/NetworkLogViewColumns.ts | connectionId":{"message":"Connection ID"},"panels/network/NetworkLogViewColumns.ts | content":{"message":"Content"},"panels/network/NetworkLogViewColumns.ts | cookies":{"message":"Cookies"},"panels/network/NetworkLogViewColumns.ts | domain":{"message":"Domain"},"panels/network/NetworkLogViewColumns.ts | endTime":{"message":"End Time"},"panels/network/NetworkLogViewColumns.ts | initiator":{"message":"Initiator"},"panels/network/NetworkLogViewColumns.ts | initiatorAddressSpace":{"message":"Initiator Address Space"},"panels/network/NetworkLogViewColumns.ts | latency":{"message":"Latency"},"panels/network/NetworkLogViewColumns.ts | manageHeaderColumns":{"message":"Manage Header Columns…"},"panels/network/NetworkLogViewColumns.ts | method":{"message":"Method"},"panels/network/NetworkLogViewColumns.ts | name":{"message":"Name"},"panels/network/NetworkLogViewColumns.ts | networkLog":{"message":"Network Log"},"panels/network/NetworkLogViewColumns.ts | path":{"message":"Path"},"panels/network/NetworkLogViewColumns.ts | priority":{"message":"Priority"},"panels/network/NetworkLogViewColumns.ts | protocol":{"message":"Protocol"},"panels/network/NetworkLogViewColumns.ts | remoteAddress":{"message":"Remote Address"},"panels/network/NetworkLogViewColumns.ts | remoteAddressSpace":{"message":"Remote Address Space"},"panels/network/NetworkLogViewColumns.ts | responseHeaders":{"message":"Response Headers"},"panels/network/NetworkLogViewColumns.ts | responseTime":{"message":"Response Time"},"panels/network/NetworkLogViewColumns.ts | scheme":{"message":"Scheme"},"panels/network/NetworkLogViewColumns.ts | setCookies":{"message":"Set Cookies"},"panels/network/NetworkLogViewColumns.ts | size":{"message":"Size"},"panels/network/NetworkLogViewColumns.ts | startTime":{"message":"Start Time"},"panels/network/NetworkLogViewColumns.ts | status":{"message":"Status"},"panels/network/NetworkLogViewColumns.ts | text":{"message":"Text"},"panels/network/NetworkLogViewColumns.ts | time":{"message":"Time"},"panels/network/NetworkLogViewColumns.ts | totalDuration":{"message":"Total Duration"},"panels/network/NetworkLogViewColumns.ts | type":{"message":"Type"},"panels/network/NetworkLogViewColumns.ts | url":{"message":"Url"},"panels/network/NetworkLogViewColumns.ts | waterfall":{"message":"Waterfall"},"panels/network/NetworkManageCustomHeadersView.ts | addCustomHeader":{"message":"Add custom header…"},"panels/network/NetworkManageCustomHeadersView.ts | headerName":{"message":"Header Name"},"panels/network/NetworkManageCustomHeadersView.ts | manageHeaderColumns":{"message":"Manage Header Columns"},"panels/network/NetworkManageCustomHeadersView.ts | noCustomHeaders":{"message":"No custom headers"},"panels/network/NetworkPanel.ts | captureScreenshots":{"message":"Capture screenshots"},"panels/network/NetworkPanel.ts | captureScreenshotsWhenLoadingA":{"message":"Capture screenshots when loading a page"},"panels/network/NetworkPanel.ts | close":{"message":"Close"},"panels/network/NetworkPanel.ts | disableCache":{"message":"Disable cache"},"panels/network/NetworkPanel.ts | disableCacheWhileDevtoolsIsOpen":{"message":"Disable cache (while DevTools is open)"},"panels/network/NetworkPanel.ts | doNotClearLogOnPageReload":{"message":"Do not clear log on page reload / navigation"},"panels/network/NetworkPanel.ts | exportHar":{"message":"Export HAR..."},"panels/network/NetworkPanel.ts | fetchingFrames":{"message":"Fetching frames..."},"panels/network/NetworkPanel.ts | groupByFrame":{"message":"Group by frame"},"panels/network/NetworkPanel.ts | groupRequestsByTopLevelRequest":{"message":"Group requests by top level request frame"},"panels/network/NetworkPanel.ts | hitSToReloadAndCaptureFilmstrip":{"message":"Hit {PH1} to reload and capture filmstrip."},"panels/network/NetworkPanel.ts | importHarFile":{"message":"Import HAR file..."},"panels/network/NetworkPanel.ts | moreNetworkConditions":{"message":"More network conditions…"},"panels/network/NetworkPanel.ts | networkSettings":{"message":"Network settings"},"panels/network/NetworkPanel.ts | preserveLog":{"message":"Preserve log"},"panels/network/NetworkPanel.ts | recordingFrames":{"message":"Recording frames..."},"panels/network/NetworkPanel.ts | revealInNetworkPanel":{"message":"Reveal in Network panel"},"panels/network/NetworkPanel.ts | search":{"message":"Search"},"panels/network/NetworkPanel.ts | showMoreInformationInRequestRows":{"message":"Show more information in request rows"},"panels/network/NetworkPanel.ts | showOverview":{"message":"Show overview"},"panels/network/NetworkPanel.ts | showOverviewOfNetworkRequests":{"message":"Show overview of network requests"},"panels/network/NetworkPanel.ts | throttling":{"message":"Throttling"},"panels/network/NetworkPanel.ts | useLargeRequestRows":{"message":"Use large request rows"},"panels/network/NetworkSearchScope.ts | url":{"message":"URL"},"panels/network/NetworkTimeCalculator.ts | sDownload":{"message":"{PH1} download"},"panels/network/NetworkTimeCalculator.ts | sFromCache":{"message":"{PH1} (from cache)"},"panels/network/NetworkTimeCalculator.ts | sFromServiceworker":{"message":"{PH1} (from ServiceWorker)"},"panels/network/NetworkTimeCalculator.ts | sLatency":{"message":"{PH1} latency"},"panels/network/NetworkTimeCalculator.ts | sLatencySDownloadSTotal":{"message":"{PH1} latency, {PH2} download ({PH3} total)"},"panels/network/RequestCookiesView.ts | cookiesThatWereReceivedFromThe":{"message":"Cookies that were received from the server in the 'set-cookie' header of the response"},"panels/network/RequestCookiesView.ts | cookiesThatWereReceivedFromTheServer":{"message":"Cookies that were received from the server in the 'set-cookie' header of the response but were malformed"},"panels/network/RequestCookiesView.ts | cookiesThatWereSentToTheServerIn":{"message":"Cookies that were sent to the server in the 'cookie' header of the request"},"panels/network/RequestCookiesView.ts | learnMore":{"message":"Learn more"},"panels/network/RequestCookiesView.ts | malformedResponseCookies":{"message":"Malformed Response Cookies"},"panels/network/RequestCookiesView.ts | noRequestCookiesWereSent":{"message":"No request cookies were sent."},"panels/network/RequestCookiesView.ts | requestCookies":{"message":"Request Cookies"},"panels/network/RequestCookiesView.ts | responseCookies":{"message":"Response Cookies"},"panels/network/RequestCookiesView.ts | showFilteredOutRequestCookies":{"message":"show filtered out request cookies"},"panels/network/RequestCookiesView.ts | siteHasCookieInOtherPartition":{"message":"This site has cookies in another partition, that were not sent with this request. {PH1}"},"panels/network/RequestCookiesView.ts | thisRequestHasNoCookies":{"message":"This request has no cookies."},"panels/network/RequestHeadersView.ts | activeClientExperimentVariation":{"message":"Active client experiment variation IDs."},"panels/network/RequestHeadersView.ts | activeClientExperimentVariationIds":{"message":"Active client experiment variation IDs that trigger server-side behavior."},"panels/network/RequestHeadersView.ts | chooseThisOptionIfTheResourceAnd":{"message":"Choose this option if the resource and the document are served from the same site."},"panels/network/RequestHeadersView.ts | copyValue":{"message":"Copy value"},"panels/network/RequestHeadersView.ts | decoded":{"message":"Decoded:"},"panels/network/RequestHeadersView.ts | fromDiskCache":{"message":"(from disk cache)"},"panels/network/RequestHeadersView.ts | fromMemoryCache":{"message":"(from memory cache)"},"panels/network/RequestHeadersView.ts | fromPrefetchCache":{"message":"(from prefetch cache)"},"panels/network/RequestHeadersView.ts | fromServiceWorker":{"message":"(from service worker)"},"panels/network/RequestHeadersView.ts | fromSignedexchange":{"message":"(from signed-exchange)"},"panels/network/RequestHeadersView.ts | fromWebBundle":{"message":"(from Web Bundle)"},"panels/network/RequestHeadersView.ts | general":{"message":"General"},"panels/network/RequestHeadersView.ts | headerOverrides":{"message":"Header overrides"},"panels/network/RequestHeadersView.ts | learnMore":{"message":"Learn more"},"panels/network/RequestHeadersView.ts | learnMoreInTheIssuesTab":{"message":"Learn more in the issues tab"},"panels/network/RequestHeadersView.ts | onlyChooseThisOptionIfAn":{"message":"Only choose this option if an arbitrary website including this resource does not impose a security risk."},"panels/network/RequestHeadersView.ts | onlyProvisionalHeadersAre":{"message":"Only provisional headers are available because this request was not sent over the network and instead was served from a local cache, which doesn’t store the original request headers. Disable cache to see full request headers."},"panels/network/RequestHeadersView.ts | provisionalHeadersAreShown":{"message":"Provisional headers are shown"},"panels/network/RequestHeadersView.ts | provisionalHeadersAreShownS":{"message":"Provisional headers are shown. Disable cache to see full headers."},"panels/network/RequestHeadersView.ts | referrerPolicy":{"message":"Referrer Policy"},"panels/network/RequestHeadersView.ts | remoteAddress":{"message":"Remote Address"},"panels/network/RequestHeadersView.ts | requestHeaders":{"message":"Request Headers"},"panels/network/RequestHeadersView.ts | requestMethod":{"message":"Request Method"},"panels/network/RequestHeadersView.ts | requestUrl":{"message":"Request URL"},"panels/network/RequestHeadersView.ts | responseHeaders":{"message":"Response Headers"},"panels/network/RequestHeadersView.ts | showMore":{"message":"Show more"},"panels/network/RequestHeadersView.ts | statusCode":{"message":"Status Code"},"panels/network/RequestHeadersView.ts | thisDocumentWasBlockedFrom":{"message":"This document was blocked from loading in an iframe with a sandbox attribute because this document specified a cross-origin opener policy."},"panels/network/RequestHeadersView.ts | toEmbedThisFrameInYourDocument":{"message":"To embed this frame in your document, the response needs to enable the cross-origin embedder policy by specifying the following response header:"},"panels/network/RequestHeadersView.ts | toUseThisResourceFromADifferent":{"message":"To use this resource from a different origin, the server needs to specify a cross-origin resource policy in the response headers:"},"panels/network/RequestHeadersView.ts | toUseThisResourceFromADifferentOrigin":{"message":"To use this resource from a different origin, the server may relax the cross-origin resource policy response header:"},"panels/network/RequestHeadersView.ts | toUseThisResourceFromADifferentSite":{"message":"To use this resource from a different site, the server may relax the cross-origin resource policy response header:"},"panels/network/RequestHeadersView.ts | viewParsed":{"message":"View parsed"},"panels/network/RequestHeadersView.ts | viewSource":{"message":"View source"},"panels/network/RequestInitiatorView.ts | requestCallStack":{"message":"Request call stack"},"panels/network/RequestInitiatorView.ts | requestInitiatorChain":{"message":"Request initiator chain"},"panels/network/RequestInitiatorView.ts | thisRequestHasNoInitiatorData":{"message":"This request has no initiator data."},"panels/network/RequestPayloadView.ts | copyValue":{"message":"Copy value"},"panels/network/RequestPayloadView.ts | empty":{"message":"(empty)"},"panels/network/RequestPayloadView.ts | formData":{"message":"Form Data"},"panels/network/RequestPayloadView.ts | queryStringParameters":{"message":"Query String Parameters"},"panels/network/RequestPayloadView.ts | requestPayload":{"message":"Request Payload"},"panels/network/RequestPayloadView.ts | showMore":{"message":"Show more"},"panels/network/RequestPayloadView.ts | unableToDecodeValue":{"message":"(unable to decode value)"},"panels/network/RequestPayloadView.ts | viewDecoded":{"message":"View decoded"},"panels/network/RequestPayloadView.ts | viewDecodedL":{"message":"view decoded"},"panels/network/RequestPayloadView.ts | viewParsed":{"message":"View parsed"},"panels/network/RequestPayloadView.ts | viewParsedL":{"message":"view parsed"},"panels/network/RequestPayloadView.ts | viewSource":{"message":"View source"},"panels/network/RequestPayloadView.ts | viewSourceL":{"message":"view source"},"panels/network/RequestPayloadView.ts | viewUrlEncoded":{"message":"View URL-encoded"},"panels/network/RequestPayloadView.ts | viewUrlEncodedL":{"message":"view URL-encoded"},"panels/network/RequestPreviewView.ts | failedToLoadResponseData":{"message":"Failed to load response data"},"panels/network/RequestPreviewView.ts | previewNotAvailable":{"message":"Preview not available"},"panels/network/RequestResponseView.ts | failedToLoadResponseData":{"message":"Failed to load response data"},"panels/network/RequestResponseView.ts | thisRequestHasNoResponseData":{"message":"This request has no response data available."},"panels/network/RequestTimingView.ts | cacheStorageCacheNameS":{"message":"Cache storage cache name: {PH1}"},"panels/network/RequestTimingView.ts | cacheStorageCacheNameUnknown":{"message":"Cache storage cache name: Unknown"},"panels/network/RequestTimingView.ts | cautionRequestIsNotFinishedYet":{"message":"CAUTION: request is not finished yet!"},"panels/network/RequestTimingView.ts | connectionStart":{"message":"Connection Start"},"panels/network/RequestTimingView.ts | contentDownload":{"message":"Content Download"},"panels/network/RequestTimingView.ts | dnsLookup":{"message":"DNS Lookup"},"panels/network/RequestTimingView.ts | duration":{"message":"Duration"},"panels/network/RequestTimingView.ts | durationC":{"message":"DURATION"},"panels/network/RequestTimingView.ts | duringDevelopmentYouCanUseSToAdd":{"message":"During development, you can use {PH1} to add insights into the server-side timing of this request."},"panels/network/RequestTimingView.ts | explanation":{"message":"Explanation"},"panels/network/RequestTimingView.ts | fallbackCode":{"message":"Fallback code"},"panels/network/RequestTimingView.ts | fromHttpCache":{"message":"From HTTP cache"},"panels/network/RequestTimingView.ts | initialConnection":{"message":"Initial connection"},"panels/network/RequestTimingView.ts | label":{"message":"Label"},"panels/network/RequestTimingView.ts | networkFetch":{"message":"Network fetch"},"panels/network/RequestTimingView.ts | originalRequest":{"message":"Original Request"},"panels/network/RequestTimingView.ts | proxyNegotiation":{"message":"Proxy negotiation"},"panels/network/RequestTimingView.ts | queuedAtS":{"message":"Queued at {PH1}"},"panels/network/RequestTimingView.ts | queueing":{"message":"Queueing"},"panels/network/RequestTimingView.ts | readingPush":{"message":"Reading Push"},"panels/network/RequestTimingView.ts | receivingPush":{"message":"Receiving Push"},"panels/network/RequestTimingView.ts | requestresponse":{"message":"Request/Response"},"panels/network/RequestTimingView.ts | requestSent":{"message":"Request sent"},"panels/network/RequestTimingView.ts | requestToServiceworker":{"message":"Request to ServiceWorker"},"panels/network/RequestTimingView.ts | resourceScheduling":{"message":"Resource Scheduling"},"panels/network/RequestTimingView.ts | respondwith":{"message":"respondWith"},"panels/network/RequestTimingView.ts | responseReceived":{"message":"Response Received"},"panels/network/RequestTimingView.ts | retrievalTimeS":{"message":"Retrieval Time: {PH1}"},"panels/network/RequestTimingView.ts | serverPush":{"message":"Server Push"},"panels/network/RequestTimingView.ts | serverTiming":{"message":"Server Timing"},"panels/network/RequestTimingView.ts | serviceworkerCacheStorage":{"message":"ServiceWorker cache storage"},"panels/network/RequestTimingView.ts | sourceOfResponseS":{"message":"Source of response: {PH1}"},"panels/network/RequestTimingView.ts | ssl":{"message":"SSL"},"panels/network/RequestTimingView.ts | stalled":{"message":"Stalled"},"panels/network/RequestTimingView.ts | startedAtS":{"message":"Started at {PH1}"},"panels/network/RequestTimingView.ts | startup":{"message":"Startup"},"panels/network/RequestTimingView.ts | theServerTimingApi":{"message":"the Server Timing API"},"panels/network/RequestTimingView.ts | time":{"message":"TIME"},"panels/network/RequestTimingView.ts | total":{"message":"Total"},"panels/network/RequestTimingView.ts | unknown":{"message":"Unknown"},"panels/network/RequestTimingView.ts | waitingTtfb":{"message":"Waiting for server response"},"panels/network/RequestTimingView.ts | waterfall":{"message":"Waterfall"},"panels/network/ResourceWebSocketFrameView.ts | all":{"message":"All"},"panels/network/ResourceWebSocketFrameView.ts | binaryMessage":{"message":"Binary Message"},"panels/network/ResourceWebSocketFrameView.ts | clearAll":{"message":"Clear All"},"panels/network/ResourceWebSocketFrameView.ts | clearAllL":{"message":"Clear all"},"panels/network/ResourceWebSocketFrameView.ts | connectionCloseMessage":{"message":"Connection Close Message"},"panels/network/ResourceWebSocketFrameView.ts | continuationFrame":{"message":"Continuation Frame"},"panels/network/ResourceWebSocketFrameView.ts | copyMessage":{"message":"Copy message"},"panels/network/ResourceWebSocketFrameView.ts | copyMessageD":{"message":"Copy message..."},"panels/network/ResourceWebSocketFrameView.ts | data":{"message":"Data"},"panels/network/ResourceWebSocketFrameView.ts | enterRegex":{"message":"Enter regex, for example: (web)?socket"},"panels/network/ResourceWebSocketFrameView.ts | filter":{"message":"Filter"},"panels/network/ResourceWebSocketFrameView.ts | length":{"message":"Length"},"panels/network/ResourceWebSocketFrameView.ts | na":{"message":"N/A"},"panels/network/ResourceWebSocketFrameView.ts | pingMessage":{"message":"Ping Message"},"panels/network/ResourceWebSocketFrameView.ts | pongMessage":{"message":"Pong Message"},"panels/network/ResourceWebSocketFrameView.ts | receive":{"message":"Receive"},"panels/network/ResourceWebSocketFrameView.ts | selectMessageToBrowseItsContent":{"message":"Select message to browse its content."},"panels/network/ResourceWebSocketFrameView.ts | send":{"message":"Send"},"panels/network/ResourceWebSocketFrameView.ts | sOpcodeS":{"message":"{PH1} (Opcode {PH2})"},"panels/network/ResourceWebSocketFrameView.ts | sOpcodeSMask":{"message":"{PH1} (Opcode {PH2}, mask)"},"panels/network/ResourceWebSocketFrameView.ts | textMessage":{"message":"Text Message"},"panels/network/ResourceWebSocketFrameView.ts | time":{"message":"Time"},"panels/network/ResourceWebSocketFrameView.ts | webSocketFrame":{"message":"Web Socket Frame"},"panels/network/SignedExchangeInfoView.ts | certificate":{"message":"Certificate"},"panels/network/SignedExchangeInfoView.ts | certificateSha":{"message":"Certificate SHA256"},"panels/network/SignedExchangeInfoView.ts | certificateUrl":{"message":"Certificate URL"},"panels/network/SignedExchangeInfoView.ts | date":{"message":"Date"},"panels/network/SignedExchangeInfoView.ts | errors":{"message":"Errors"},"panels/network/SignedExchangeInfoView.ts | expires":{"message":"Expires"},"panels/network/SignedExchangeInfoView.ts | headerIntegrityHash":{"message":"Header integrity hash"},"panels/network/SignedExchangeInfoView.ts | integrity":{"message":"Integrity"},"panels/network/SignedExchangeInfoView.ts | issuer":{"message":"Issuer"},"panels/network/SignedExchangeInfoView.ts | label":{"message":"Label"},"panels/network/SignedExchangeInfoView.ts | learnmore":{"message":"Learn more"},"panels/network/SignedExchangeInfoView.ts | requestUrl":{"message":"Request URL"},"panels/network/SignedExchangeInfoView.ts | responseCode":{"message":"Response code"},"panels/network/SignedExchangeInfoView.ts | responseHeaders":{"message":"Response headers"},"panels/network/SignedExchangeInfoView.ts | signature":{"message":"Signature"},"panels/network/SignedExchangeInfoView.ts | signedHttpExchange":{"message":"Signed HTTP exchange"},"panels/network/SignedExchangeInfoView.ts | subject":{"message":"Subject"},"panels/network/SignedExchangeInfoView.ts | validFrom":{"message":"Valid from"},"panels/network/SignedExchangeInfoView.ts | validityUrl":{"message":"Validity URL"},"panels/network/SignedExchangeInfoView.ts | validUntil":{"message":"Valid until"},"panels/network/SignedExchangeInfoView.ts | viewCertificate":{"message":"View certificate"},"panels/performance_monitor/performance_monitor-meta.ts | activity":{"message":"activity"},"panels/performance_monitor/performance_monitor-meta.ts | metrics":{"message":"metrics"},"panels/performance_monitor/performance_monitor-meta.ts | monitor":{"message":"monitor"},"panels/performance_monitor/performance_monitor-meta.ts | performance":{"message":"performance"},"panels/performance_monitor/performance_monitor-meta.ts | performanceMonitor":{"message":"Performance monitor"},"panels/performance_monitor/performance_monitor-meta.ts | showPerformanceMonitor":{"message":"Show Performance monitor"},"panels/performance_monitor/performance_monitor-meta.ts | systemMonitor":{"message":"system monitor"},"panels/performance_monitor/PerformanceMonitor.ts | cpuUsage":{"message":"CPU usage"},"panels/performance_monitor/PerformanceMonitor.ts | documentFrames":{"message":"Document Frames"},"panels/performance_monitor/PerformanceMonitor.ts | documents":{"message":"Documents"},"panels/performance_monitor/PerformanceMonitor.ts | domNodes":{"message":"DOM Nodes"},"panels/performance_monitor/PerformanceMonitor.ts | graphsDisplayingARealtimeViewOf":{"message":"Graphs displaying a real-time view of performance metrics"},"panels/performance_monitor/PerformanceMonitor.ts | jsEventListeners":{"message":"JS event listeners"},"panels/performance_monitor/PerformanceMonitor.ts | jsHeapSize":{"message":"JS heap size"},"panels/performance_monitor/PerformanceMonitor.ts | layoutsSec":{"message":"Layouts / sec"},"panels/performance_monitor/PerformanceMonitor.ts | paused":{"message":"Paused"},"panels/performance_monitor/PerformanceMonitor.ts | styleRecalcsSec":{"message":"Style recalcs / sec"},"panels/profiler/CPUProfileView.ts | aggregatedSelfTime":{"message":"Aggregated self time"},"panels/profiler/CPUProfileView.ts | aggregatedTotalTime":{"message":"Aggregated total time"},"panels/profiler/CPUProfileView.ts | cpuProfiles":{"message":"CPU PROFILES"},"panels/profiler/CPUProfileView.ts | cpuProfilesShow":{"message":"CPU profiles show where the execution time is spent in your page's JavaScript functions."},"panels/profiler/CPUProfileView.ts | fms":{"message":"{PH1} ms"},"panels/profiler/CPUProfileView.ts | formatPercent":{"message":"{PH1} %"},"panels/profiler/CPUProfileView.ts | name":{"message":"Name"},"panels/profiler/CPUProfileView.ts | notOptimized":{"message":"Not optimized"},"panels/profiler/CPUProfileView.ts | recording":{"message":"Recording…"},"panels/profiler/CPUProfileView.ts | recordJavascriptCpuProfile":{"message":"Record JavaScript CPU Profile"},"panels/profiler/CPUProfileView.ts | selfTime":{"message":"Self Time"},"panels/profiler/CPUProfileView.ts | startCpuProfiling":{"message":"Start CPU profiling"},"panels/profiler/CPUProfileView.ts | stopCpuProfiling":{"message":"Stop CPU profiling"},"panels/profiler/CPUProfileView.ts | totalTime":{"message":"Total Time"},"panels/profiler/CPUProfileView.ts | url":{"message":"URL"},"panels/profiler/HeapProfilerPanel.ts | revealInSummaryView":{"message":"Reveal in Summary view"},"panels/profiler/HeapProfileView.ts | allocationSampling":{"message":"Allocation sampling"},"panels/profiler/HeapProfileView.ts | formatPercent":{"message":"{PH1} %"},"panels/profiler/HeapProfileView.ts | heapProfilerIsRecording":{"message":"Heap profiler is recording"},"panels/profiler/HeapProfileView.ts | itProvidesGoodApproximation":{"message":"It provides good approximation of allocations broken down by JavaScript execution stack."},"panels/profiler/HeapProfileView.ts | name":{"message":"Name"},"panels/profiler/HeapProfileView.ts | profileD":{"message":"Profile {PH1}"},"panels/profiler/HeapProfileView.ts | recording":{"message":"Recording…"},"panels/profiler/HeapProfileView.ts | recordMemoryAllocations":{"message":"Record memory allocations using sampling method."},"panels/profiler/HeapProfileView.ts | samplingProfiles":{"message":"SAMPLING PROFILES"},"panels/profiler/HeapProfileView.ts | sBytes":{"message":"{PH1} bytes"},"panels/profiler/HeapProfileView.ts | selectedSizeS":{"message":"Selected size: {PH1}"},"panels/profiler/HeapProfileView.ts | selfSize":{"message":"Self size"},"panels/profiler/HeapProfileView.ts | selfSizeBytes":{"message":"Self Size (bytes)"},"panels/profiler/HeapProfileView.ts | skb":{"message":"{PH1} kB"},"panels/profiler/HeapProfileView.ts | startHeapProfiling":{"message":"Start heap profiling"},"panels/profiler/HeapProfileView.ts | stopHeapProfiling":{"message":"Stop heap profiling"},"panels/profiler/HeapProfileView.ts | stopping":{"message":"Stopping…"},"panels/profiler/HeapProfileView.ts | thisProfileTypeHasMinimal":{"message":"This profile type has minimal performance overhead and can be used for long running operations."},"panels/profiler/HeapProfileView.ts | totalSize":{"message":"Total size"},"panels/profiler/HeapProfileView.ts | totalSizeBytes":{"message":"Total Size (bytes)"},"panels/profiler/HeapProfileView.ts | url":{"message":"URL"},"panels/profiler/HeapSnapshotDataGrids.ts | allocation":{"message":"Allocation"},"panels/profiler/HeapSnapshotDataGrids.ts | allocSize":{"message":"Alloc. Size"},"panels/profiler/HeapSnapshotDataGrids.ts | constructorString":{"message":"Constructor"},"panels/profiler/HeapSnapshotDataGrids.ts | count":{"message":"Count"},"panels/profiler/HeapSnapshotDataGrids.ts | Deleted":{"message":"# Deleted"},"panels/profiler/HeapSnapshotDataGrids.ts | Delta":{"message":"# Delta"},"panels/profiler/HeapSnapshotDataGrids.ts | distance":{"message":"Distance"},"panels/profiler/HeapSnapshotDataGrids.ts | distanceFromWindowObject":{"message":"Distance from window object"},"panels/profiler/HeapSnapshotDataGrids.ts | freedSize":{"message":"Freed Size"},"panels/profiler/HeapSnapshotDataGrids.ts | function":{"message":"Function"},"panels/profiler/HeapSnapshotDataGrids.ts | heapSnapshotConstructors":{"message":"Heap Snapshot Constructors"},"panels/profiler/HeapSnapshotDataGrids.ts | heapSnapshotDiff":{"message":"Heap Snapshot Diff"},"panels/profiler/HeapSnapshotDataGrids.ts | heapSnapshotRetainment":{"message":"Heap Snapshot Retainment"},"panels/profiler/HeapSnapshotDataGrids.ts | liveCount":{"message":"Live Count"},"panels/profiler/HeapSnapshotDataGrids.ts | liveSize":{"message":"Live Size"},"panels/profiler/HeapSnapshotDataGrids.ts | New":{"message":"# New"},"panels/profiler/HeapSnapshotDataGrids.ts | object":{"message":"Object"},"panels/profiler/HeapSnapshotDataGrids.ts | retainedSize":{"message":"Retained Size"},"panels/profiler/HeapSnapshotDataGrids.ts | shallowSize":{"message":"Shallow Size"},"panels/profiler/HeapSnapshotDataGrids.ts | size":{"message":"Size"},"panels/profiler/HeapSnapshotDataGrids.ts | sizeDelta":{"message":"Size Delta"},"panels/profiler/HeapSnapshotDataGrids.ts | sizeOfTheObjectItselfInBytes":{"message":"Size of the object itself in bytes"},"panels/profiler/HeapSnapshotDataGrids.ts | sizeOfTheObjectPlusTheGraphIt":{"message":"Size of the object plus the graph it retains in bytes"},"panels/profiler/HeapSnapshotGridNodes.ts | detachedFromDomTree":{"message":"Detached from DOM tree"},"panels/profiler/HeapSnapshotGridNodes.ts | genericStringsTwoPlaceholders":{"message":"{PH1}, {PH2}"},"panels/profiler/HeapSnapshotGridNodes.ts | inElement":{"message":"in"},"panels/profiler/HeapSnapshotGridNodes.ts | internalArray":{"message":"(internal array)[]"},"panels/profiler/HeapSnapshotGridNodes.ts | previewIsNotAvailable":{"message":"Preview is not available"},"panels/profiler/HeapSnapshotGridNodes.ts | revealInSummaryView":{"message":"Reveal in Summary view"},"panels/profiler/HeapSnapshotGridNodes.ts | revealObjectSWithIdSInSummary":{"message":"Reveal object ''{PH1}'' with id @{PH2} in Summary view"},"panels/profiler/HeapSnapshotGridNodes.ts | storeAsGlobalVariable":{"message":"Store as global variable"},"panels/profiler/HeapSnapshotGridNodes.ts | summary":{"message":"Summary"},"panels/profiler/HeapSnapshotGridNodes.ts | userObjectReachableFromWindow":{"message":"User object reachable from window"},"panels/profiler/HeapSnapshotProxy.ts | anErrorOccurredWhenACallToMethod":{"message":"An error occurred when a call to method ''{PH1}'' was requested"},"panels/profiler/HeapSnapshotView.ts | allObjects":{"message":"All objects"},"panels/profiler/HeapSnapshotView.ts | allocation":{"message":"Allocation"},"panels/profiler/HeapSnapshotView.ts | allocationInstrumentationOn":{"message":"Allocation instrumentation on timeline"},"panels/profiler/HeapSnapshotView.ts | allocationStack":{"message":"Allocation stack"},"panels/profiler/HeapSnapshotView.ts | allocationTimelines":{"message":"ALLOCATION TIMELINES"},"panels/profiler/HeapSnapshotView.ts | AllocationTimelinesShowInstrumented":{"message":"Allocation timelines show instrumented JavaScript memory allocations over time. Once profile is recorded you can select a time interval to see objects that were allocated within it and still alive by the end of recording. Use this profile type to isolate memory leaks."},"panels/profiler/HeapSnapshotView.ts | baseSnapshot":{"message":"Base snapshot"},"panels/profiler/HeapSnapshotView.ts | captureNumericValue":{"message":"Include numerical values in capture"},"panels/profiler/HeapSnapshotView.ts | classFilter":{"message":"Class filter"},"panels/profiler/HeapSnapshotView.ts | code":{"message":"Code"},"panels/profiler/HeapSnapshotView.ts | comparison":{"message":"Comparison"},"panels/profiler/HeapSnapshotView.ts | containment":{"message":"Containment"},"panels/profiler/HeapSnapshotView.ts | exposeInternals":{"message":"Expose internals (includes additional implementation-specific details)"},"panels/profiler/HeapSnapshotView.ts | filter":{"message":"Filter"},"panels/profiler/HeapSnapshotView.ts | find":{"message":"Find"},"panels/profiler/HeapSnapshotView.ts | heapMemoryUsage":{"message":"Heap memory usage"},"panels/profiler/HeapSnapshotView.ts | heapSnapshot":{"message":"Heap snapshot"},"panels/profiler/HeapSnapshotView.ts | heapSnapshotProfilesShowMemory":{"message":"Heap snapshot profiles show memory distribution among your page's JavaScript objects and related DOM nodes."},"panels/profiler/HeapSnapshotView.ts | heapSnapshots":{"message":"HEAP SNAPSHOTS"},"panels/profiler/HeapSnapshotView.ts | jsArrays":{"message":"JS arrays"},"panels/profiler/HeapSnapshotView.ts | liveObjects":{"message":"Live objects"},"panels/profiler/HeapSnapshotView.ts | loading":{"message":"Loading…"},"panels/profiler/HeapSnapshotView.ts | objectsAllocatedBeforeS":{"message":"Objects allocated before {PH1}"},"panels/profiler/HeapSnapshotView.ts | objectsAllocatedBetweenSAndS":{"message":"Objects allocated between {PH1} and {PH2}"},"panels/profiler/HeapSnapshotView.ts | percentagePlaceholder":{"message":"{PH1}%"},"panels/profiler/HeapSnapshotView.ts | perspective":{"message":"Perspective"},"panels/profiler/HeapSnapshotView.ts | recordAllocationStacksExtra":{"message":"Record stack traces of allocations (extra performance overhead)"},"panels/profiler/HeapSnapshotView.ts | recording":{"message":"Recording…"},"panels/profiler/HeapSnapshotView.ts | retainers":{"message":"Retainers"},"panels/profiler/HeapSnapshotView.ts | savingD":{"message":"Saving… {PH1}%"},"panels/profiler/HeapSnapshotView.ts | selectedSizeS":{"message":"Selected size: {PH1}"},"panels/profiler/HeapSnapshotView.ts | sKb":{"message":"{PH1} kB"},"panels/profiler/HeapSnapshotView.ts | snapshotD":{"message":"Snapshot {PH1}"},"panels/profiler/HeapSnapshotView.ts | snapshotting":{"message":"Snapshotting…"},"panels/profiler/HeapSnapshotView.ts | stackWasNotRecordedForThisObject":{"message":"Stack was not recorded for this object because it had been allocated before this profile recording started."},"panels/profiler/HeapSnapshotView.ts | startRecordingHeapProfile":{"message":"Start recording heap profile"},"panels/profiler/HeapSnapshotView.ts | statistics":{"message":"Statistics"},"panels/profiler/HeapSnapshotView.ts | stopRecordingHeapProfile":{"message":"Stop recording heap profile"},"panels/profiler/HeapSnapshotView.ts | strings":{"message":"Strings"},"panels/profiler/HeapSnapshotView.ts | summary":{"message":"Summary"},"panels/profiler/HeapSnapshotView.ts | systemObjects":{"message":"System objects"},"panels/profiler/HeapSnapshotView.ts | takeHeapSnapshot":{"message":"Take heap snapshot"},"panels/profiler/HeapSnapshotView.ts | typedArrays":{"message":"Typed arrays"},"panels/profiler/IsolateSelector.ts | changeRate":{"message":"{PH1}/s"},"panels/profiler/IsolateSelector.ts | decreasingBySPerSecond":{"message":"decreasing by {PH1} per second"},"panels/profiler/IsolateSelector.ts | empty":{"message":"(empty)"},"panels/profiler/IsolateSelector.ts | heapSizeChangeTrendOverTheLastS":{"message":"Heap size change trend over the last {PH1} minutes."},"panels/profiler/IsolateSelector.ts | heapSizeInUseByLiveJsObjects":{"message":"Heap size in use by live JS objects."},"panels/profiler/IsolateSelector.ts | increasingBySPerSecond":{"message":"increasing by {PH1} per second"},"panels/profiler/IsolateSelector.ts | javascriptVmInstances":{"message":"JavaScript VM instances"},"panels/profiler/IsolateSelector.ts | totalJsHeapSize":{"message":"Total JS heap size"},"panels/profiler/IsolateSelector.ts | totalPageJsHeapSizeAcrossAllVm":{"message":"Total page JS heap size across all VM instances."},"panels/profiler/IsolateSelector.ts | totalPageJsHeapSizeChangeTrend":{"message":"Total page JS heap size change trend over the last {PH1} minutes."},"panels/profiler/LiveHeapProfileView.ts | allocatedJsHeapSizeCurrentlyIn":{"message":"Allocated JS heap size currently in use"},"panels/profiler/LiveHeapProfileView.ts | anonymousScriptS":{"message":"(Anonymous Script {PH1})"},"panels/profiler/LiveHeapProfileView.ts | heapProfile":{"message":"Heap Profile"},"panels/profiler/LiveHeapProfileView.ts | jsHeap":{"message":"JS Heap"},"panels/profiler/LiveHeapProfileView.ts | kb":{"message":"kB"},"panels/profiler/LiveHeapProfileView.ts | numberOfVmsSharingTheSameScript":{"message":"Number of VMs sharing the same script source"},"panels/profiler/LiveHeapProfileView.ts | scriptUrl":{"message":"Script URL"},"panels/profiler/LiveHeapProfileView.ts | urlOfTheScriptSource":{"message":"URL of the script source"},"panels/profiler/LiveHeapProfileView.ts | vms":{"message":"VMs"},"panels/profiler/ModuleUIStrings.ts | buildingAllocationStatistics":{"message":"Building allocation statistics…"},"panels/profiler/ModuleUIStrings.ts | buildingDominatedNodes":{"message":"Building dominated nodes…"},"panels/profiler/ModuleUIStrings.ts | buildingDominatorTree":{"message":"Building dominator tree…"},"panels/profiler/ModuleUIStrings.ts | buildingEdgeIndexes":{"message":"Building edge indexes…"},"panels/profiler/ModuleUIStrings.ts | buildingLocations":{"message":"Building locations…"},"panels/profiler/ModuleUIStrings.ts | buildingPostorderIndex":{"message":"Building postorder index…"},"panels/profiler/ModuleUIStrings.ts | buildingRetainers":{"message":"Building retainers…"},"panels/profiler/ModuleUIStrings.ts | calculatingDistances":{"message":"Calculating distances…"},"panels/profiler/ModuleUIStrings.ts | calculatingNodeFlags":{"message":"Calculating node flags…"},"panels/profiler/ModuleUIStrings.ts | calculatingRetainedSizes":{"message":"Calculating retained sizes…"},"panels/profiler/ModuleUIStrings.ts | calculatingSamples":{"message":"Calculating samples…"},"panels/profiler/ModuleUIStrings.ts | calculatingStatistics":{"message":"Calculating statistics…"},"panels/profiler/ModuleUIStrings.ts | done":{"message":"Done"},"panels/profiler/ModuleUIStrings.ts | finishedProcessing":{"message":"Finished processing."},"panels/profiler/ModuleUIStrings.ts | loadingAllocationTracesD":{"message":"Loading allocation traces… {PH1}%"},"panels/profiler/ModuleUIStrings.ts | loadingEdgesD":{"message":"Loading edges… {PH1}%"},"panels/profiler/ModuleUIStrings.ts | loadingLocations":{"message":"Loading locations…"},"panels/profiler/ModuleUIStrings.ts | loadingNodesD":{"message":"Loading nodes… {PH1}%"},"panels/profiler/ModuleUIStrings.ts | loadingSamples":{"message":"Loading samples…"},"panels/profiler/ModuleUIStrings.ts | loadingSnapshotInfo":{"message":"Loading snapshot info…"},"panels/profiler/ModuleUIStrings.ts | loadingStrings":{"message":"Loading strings…"},"panels/profiler/ModuleUIStrings.ts | parsingStrings":{"message":"Parsing strings…"},"panels/profiler/ModuleUIStrings.ts | processingSnapshot":{"message":"Processing snapshot…"},"panels/profiler/ModuleUIStrings.ts | propagatingDomState":{"message":"Propagating DOM state…"},"panels/profiler/ProfileDataGrid.ts | genericTextTwoPlaceholders":{"message":"{PH1}, {PH2}"},"panels/profiler/ProfileDataGrid.ts | notOptimizedS":{"message":"Not optimized: {PH1}"},"panels/profiler/ProfileLauncherView.ts | load":{"message":"Load"},"panels/profiler/ProfileLauncherView.ts | selectJavascriptVmInstance":{"message":"Select JavaScript VM instance"},"panels/profiler/ProfileLauncherView.ts | selectProfilingType":{"message":"Select profiling type"},"panels/profiler/ProfileLauncherView.ts | start":{"message":"Start"},"panels/profiler/ProfileLauncherView.ts | stop":{"message":"Stop"},"panels/profiler/ProfileLauncherView.ts | takeSnapshot":{"message":"Take snapshot"},"panels/profiler/profiler-meta.ts | liveHeapProfile":{"message":"Live Heap Profile"},"panels/profiler/profiler-meta.ts | memory":{"message":"Memory"},"panels/profiler/profiler-meta.ts | showLiveHeapProfile":{"message":"Show Live Heap Profile"},"panels/profiler/profiler-meta.ts | showMemory":{"message":"Show Memory"},"panels/profiler/profiler-meta.ts | showNativeFunctions":{"message":"Show native functions in JS Profile"},"panels/profiler/profiler-meta.ts | startRecordingHeapAllocations":{"message":"Start recording heap allocations"},"panels/profiler/profiler-meta.ts | startRecordingHeapAllocationsAndReload":{"message":"Start recording heap allocations and reload the page"},"panels/profiler/profiler-meta.ts | startStopRecording":{"message":"Start/stop recording"},"panels/profiler/profiler-meta.ts | stopRecordingHeapAllocations":{"message":"Stop recording heap allocations"},"panels/profiler/ProfileSidebarTreeElement.ts | delete":{"message":"Delete"},"panels/profiler/ProfileSidebarTreeElement.ts | load":{"message":"Load…"},"panels/profiler/ProfileSidebarTreeElement.ts | save":{"message":"Save"},"panels/profiler/ProfileSidebarTreeElement.ts | saveWithEllipsis":{"message":"Save…"},"panels/profiler/ProfilesPanel.ts | cantLoadFileSupportedFile":{"message":"Can’t load file. Supported file extensions: ''{PH1}''."},"panels/profiler/ProfilesPanel.ts | cantLoadProfileWhileAnother":{"message":"Can’t load profile while another profile is being recorded."},"panels/profiler/ProfilesPanel.ts | clearAllProfiles":{"message":"Clear all profiles"},"panels/profiler/ProfilesPanel.ts | deprecationWarnMsg":{"message":"This panel will be deprecated in the upcoming version. Use the Performance panel to record JavaScript CPU profiles."},"panels/profiler/ProfilesPanel.ts | enableThisPanelTemporarily":{"message":"Enable this panel temporarily"},"panels/profiler/ProfilesPanel.ts | feedback":{"message":"Feedback"},"panels/profiler/ProfilesPanel.ts | goToPerformancePanel":{"message":"Go to Performance Panel"},"panels/profiler/ProfilesPanel.ts | learnMore":{"message":"Learn more"},"panels/profiler/ProfilesPanel.ts | load":{"message":"Load…"},"panels/profiler/ProfilesPanel.ts | profileLoadingFailedS":{"message":"Profile loading failed: {PH1}."},"panels/profiler/ProfilesPanel.ts | profiles":{"message":"Profiles"},"panels/profiler/ProfilesPanel.ts | runD":{"message":"Run {PH1}"},"panels/profiler/ProfileView.ts | chart":{"message":"Chart"},"panels/profiler/ProfileView.ts | excludeSelectedFunction":{"message":"Exclude selected function"},"panels/profiler/ProfileView.ts | failedToReadFile":{"message":"Failed to read file"},"panels/profiler/ProfileView.ts | fileSReadErrorS":{"message":"File ''{PH1}'' read error: {PH2}"},"panels/profiler/ProfileView.ts | findByCostMsNameOrFile":{"message":"Find by cost (>50ms), name or file"},"panels/profiler/ProfileView.ts | focusSelectedFunction":{"message":"Focus selected function"},"panels/profiler/ProfileView.ts | function":{"message":"Function"},"panels/profiler/ProfileView.ts | heavyBottomUp":{"message":"Heavy (Bottom Up)"},"panels/profiler/ProfileView.ts | loaded":{"message":"Loaded"},"panels/profiler/ProfileView.ts | loading":{"message":"Loading…"},"panels/profiler/ProfileView.ts | loadingD":{"message":"Loading… {PH1}%"},"panels/profiler/ProfileView.ts | parsing":{"message":"Parsing…"},"panels/profiler/ProfileView.ts | profile":{"message":"Profile"},"panels/profiler/ProfileView.ts | profileD":{"message":"Profile {PH1}"},"panels/profiler/ProfileView.ts | profiler":{"message":"Profiler"},"panels/profiler/ProfileView.ts | profileViewMode":{"message":"Profile view mode"},"panels/profiler/ProfileView.ts | restoreAllFunctions":{"message":"Restore all functions"},"panels/profiler/ProfileView.ts | treeTopDown":{"message":"Tree (Top Down)"},"panels/protocol_monitor/protocol_monitor-meta.ts | protocolMonitor":{"message":"Protocol monitor"},"panels/protocol_monitor/protocol_monitor-meta.ts | showProtocolMonitor":{"message":"Show Protocol monitor"},"panels/protocol_monitor/ProtocolMonitor.ts | CDPCommandEditorHidden":{"message":"CDP command editor hidden"},"panels/protocol_monitor/ProtocolMonitor.ts | CDPCommandEditorShown":{"message":"CDP command editor shown"},"panels/protocol_monitor/ProtocolMonitor.ts | clearAll":{"message":"Clear all"},"panels/protocol_monitor/ProtocolMonitor.ts | documentation":{"message":"Documentation"},"panels/protocol_monitor/ProtocolMonitor.ts | elapsedTime":{"message":"Elapsed time"},"panels/protocol_monitor/ProtocolMonitor.ts | filter":{"message":"Filter"},"panels/protocol_monitor/ProtocolMonitor.ts | hideCDPCommandEditor":{"message":"Hide CDP command editor"},"panels/protocol_monitor/ProtocolMonitor.ts | method":{"message":"Method"},"panels/protocol_monitor/ProtocolMonitor.ts | noMessageSelected":{"message":"No message selected"},"panels/protocol_monitor/ProtocolMonitor.ts | record":{"message":"Record"},"panels/protocol_monitor/ProtocolMonitor.ts | request":{"message":"Request"},"panels/protocol_monitor/ProtocolMonitor.ts | response":{"message":"Response"},"panels/protocol_monitor/ProtocolMonitor.ts | save":{"message":"Save"},"panels/protocol_monitor/ProtocolMonitor.ts | selectTarget":{"message":"Select a target"},"panels/protocol_monitor/ProtocolMonitor.ts | sendRawCDPCommand":{"message":"Send a raw CDP command"},"panels/protocol_monitor/ProtocolMonitor.ts | sendRawCDPCommandExplanation":{"message":"Format: 'Domain.commandName' for a command without parameters, or '{\"command\":\"Domain.commandName\", \"parameters\": {...}}' as a JSON object for a command with parameters. 'cmd'/'method' and 'args'/'params'/'arguments' are also supported as alternative keys for the JSON object."},"panels/protocol_monitor/ProtocolMonitor.ts | session":{"message":"Session"},"panels/protocol_monitor/ProtocolMonitor.ts | showCDPCommandEditor":{"message":"Show CDP command editor"},"panels/protocol_monitor/ProtocolMonitor.ts | sMs":{"message":"{PH1} ms"},"panels/protocol_monitor/ProtocolMonitor.ts | target":{"message":"Target"},"panels/protocol_monitor/ProtocolMonitor.ts | timestamp":{"message":"Timestamp"},"panels/protocol_monitor/ProtocolMonitor.ts | type":{"message":"Type"},"panels/recorder/components/CreateRecordingView.ts | cancelRecording":{"message":"Cancel recording"},"panels/recorder/components/CreateRecordingView.ts | createRecording":{"message":"Create a new recording"},"panels/recorder/components/CreateRecordingView.ts | includeNecessarySelectors":{"message":"You must choose CSS, Pierce, or XPath as one of your options. Only these selectors are guaranteed to be recorded since ARIA and text selectors may not be unique."},"panels/recorder/components/CreateRecordingView.ts | recordingName":{"message":"Recording name"},"panels/recorder/components/CreateRecordingView.ts | recordingNameIsRequired":{"message":"Recording name is required"},"panels/recorder/components/CreateRecordingView.ts | selectorAttribute":{"message":"Selector attribute"},"panels/recorder/components/CreateRecordingView.ts | selectorTypeARIA":{"message":"ARIA"},"panels/recorder/components/CreateRecordingView.ts | selectorTypeCSS":{"message":"CSS"},"panels/recorder/components/CreateRecordingView.ts | selectorTypePierce":{"message":"Pierce"},"panels/recorder/components/CreateRecordingView.ts | selectorTypes":{"message":"Selector types to record"},"panels/recorder/components/CreateRecordingView.ts | selectorTypeText":{"message":"Text"},"panels/recorder/components/CreateRecordingView.ts | selectorTypeXPath":{"message":"XPath"},"panels/recorder/components/CreateRecordingView.ts | startRecording":{"message":"Start recording"},"panels/recorder/components/ExtensionView.ts | closeView":{"message":"Close"},"panels/recorder/components/ExtensionView.ts | extension":{"message":"Content provided by a browser extension"},"panels/recorder/components/RecordingListView.ts | createRecording":{"message":"Create a new recording"},"panels/recorder/components/RecordingListView.ts | deleteRecording":{"message":"Delete recording"},"panels/recorder/components/RecordingListView.ts | openRecording":{"message":"Open recording"},"panels/recorder/components/RecordingListView.ts | playRecording":{"message":"Play recording"},"panels/recorder/components/RecordingListView.ts | savedRecordings":{"message":"Saved recordings"},"panels/recorder/components/RecordingView.ts | addAssertion":{"message":"Add assertion"},"panels/recorder/components/RecordingView.ts | cancelReplay":{"message":"Cancel replay"},"panels/recorder/components/RecordingView.ts | default":{"message":"Default"},"panels/recorder/components/RecordingView.ts | desktop":{"message":"Desktop"},"panels/recorder/components/RecordingView.ts | download":{"message":"Download: {value}"},"panels/recorder/components/RecordingView.ts | editReplaySettings":{"message":"Edit replay settings"},"panels/recorder/components/RecordingView.ts | editTitle":{"message":"Edit title"},"panels/recorder/components/RecordingView.ts | endRecording":{"message":"End recording"},"panels/recorder/components/RecordingView.ts | environment":{"message":"Environment"},"panels/recorder/components/RecordingView.ts | hideCode":{"message":"Hide code"},"panels/recorder/components/RecordingView.ts | latency":{"message":"Latency: {value} ms"},"panels/recorder/components/RecordingView.ts | mobile":{"message":"Mobile"},"panels/recorder/components/RecordingView.ts | network":{"message":"Network"},"panels/recorder/components/RecordingView.ts | performancePanel":{"message":"Performance panel"},"panels/recorder/components/RecordingView.ts | recording":{"message":"Recording…"},"panels/recorder/components/RecordingView.ts | recordingIsBeingStopped":{"message":"Stopping recording…"},"panels/recorder/components/RecordingView.ts | replaySettings":{"message":"Replay settings"},"panels/recorder/components/RecordingView.ts | requiredTitleError":{"message":"Title is required"},"panels/recorder/components/RecordingView.ts | screenshotForSection":{"message":"Screenshot for this section"},"panels/recorder/components/RecordingView.ts | showCode":{"message":"Show code"},"panels/recorder/components/RecordingView.ts | timeout":{"message":"Timeout: {value} ms"},"panels/recorder/components/RecordingView.ts | timeoutExplanation":{"message":"The timeout setting (in milliseconds) applies to every action when replaying the recording. For example, if a DOM element identified by a CSS selector does not appear on the page within the specified timeout, the replay fails with an error."},"panels/recorder/components/RecordingView.ts | timeoutLabel":{"message":"Timeout"},"panels/recorder/components/RecordingView.ts | upload":{"message":"Upload: {value}"},"panels/recorder/components/ReplayButton.ts | extensionGroup":{"message":"Extensions"},"panels/recorder/components/ReplayButton.ts | ReplayExtremelySlowButtonLabel":{"message":"Extremely slow replay"},"panels/recorder/components/ReplayButton.ts | ReplayExtremelySlowItemLabel":{"message":"Extremely slow"},"panels/recorder/components/ReplayButton.ts | ReplayNormalButtonLabel":{"message":"Replay"},"panels/recorder/components/ReplayButton.ts | ReplayNormalItemLabel":{"message":"Normal (Default)"},"panels/recorder/components/ReplayButton.ts | ReplaySlowButtonLabel":{"message":"Slow replay"},"panels/recorder/components/ReplayButton.ts | ReplaySlowItemLabel":{"message":"Slow"},"panels/recorder/components/ReplayButton.ts | ReplayVerySlowButtonLabel":{"message":"Very slow replay"},"panels/recorder/components/ReplayButton.ts | ReplayVerySlowItemLabel":{"message":"Very slow"},"panels/recorder/components/ReplayButton.ts | speedGroup":{"message":"Speed"},"panels/recorder/components/StartView.ts | createRecording":{"message":"Create a new recording"},"panels/recorder/components/StartView.ts | header":{"message":"Measure performance across an entire user journey"},"panels/recorder/components/StartView.ts | quickStart":{"message":"Quick start: learn the new Recorder panel in DevTools"},"panels/recorder/components/StartView.ts | step1":{"message":"Record a common user journey on your website or app"},"panels/recorder/components/StartView.ts | step2":{"message":"Replay the recording to check if the flow is working"},"panels/recorder/components/StartView.ts | step3":{"message":"Generate a detailed performance trace or export a Puppeteer script for testing"},"panels/recorder/components/StepEditor.ts | addAttribute":{"message":"Add {attributeName}"},"panels/recorder/components/StepEditor.ts | addFrameIndex":{"message":"Add frame index within the frame tree"},"panels/recorder/components/StepEditor.ts | addSelector":{"message":"Add a selector"},"panels/recorder/components/StepEditor.ts | addSelectorPart":{"message":"Add a selector part"},"panels/recorder/components/StepEditor.ts | deleteRow":{"message":"Delete row"},"panels/recorder/components/StepEditor.ts | notSaved":{"message":"Not saved: {error}"},"panels/recorder/components/StepEditor.ts | removeFrameIndex":{"message":"Remove frame index"},"panels/recorder/components/StepEditor.ts | removeSelector":{"message":"Remove a selector"},"panels/recorder/components/StepEditor.ts | removeSelectorPart":{"message":"Remove a selector part"},"panels/recorder/components/StepEditor.ts | selectorPicker":{"message":"Select an element in the page to update selectors"},"panels/recorder/components/StepEditor.ts | unknownActionType":{"message":"Unknown action type."},"panels/recorder/components/StepView.ts | addBreakpoint":{"message":"Add breakpoint"},"panels/recorder/components/StepView.ts | addStepAfter":{"message":"Add step after"},"panels/recorder/components/StepView.ts | addStepBefore":{"message":"Add step before"},"panels/recorder/components/StepView.ts | breakpoints":{"message":"Breakpoints"},"panels/recorder/components/StepView.ts | changeStepTitle":{"message":"Change"},"panels/recorder/components/StepView.ts | clickStepTitle":{"message":"Click"},"panels/recorder/components/StepView.ts | closeStepTitle":{"message":"Close"},"panels/recorder/components/StepView.ts | copyAs":{"message":"Copy as"},"panels/recorder/components/StepView.ts | customStepTitle":{"message":"Custom step"},"panels/recorder/components/StepView.ts | doubleClickStepTitle":{"message":"Double click"},"panels/recorder/components/StepView.ts | elementRoleButton":{"message":"Button"},"panels/recorder/components/StepView.ts | elementRoleFallback":{"message":"Element"},"panels/recorder/components/StepView.ts | elementRoleInput":{"message":"Input"},"panels/recorder/components/StepView.ts | emulateNetworkConditionsStepTitle":{"message":"Emulate network conditions"},"panels/recorder/components/StepView.ts | hoverStepTitle":{"message":"Hover"},"panels/recorder/components/StepView.ts | keyDownStepTitle":{"message":"Key down"},"panels/recorder/components/StepView.ts | keyUpStepTitle":{"message":"Key up"},"panels/recorder/components/StepView.ts | navigateStepTitle":{"message":"Navigate"},"panels/recorder/components/StepView.ts | openStepActions":{"message":"Open step actions"},"panels/recorder/components/StepView.ts | removeBreakpoint":{"message":"Remove breakpoint"},"panels/recorder/components/StepView.ts | removeStep":{"message":"Remove step"},"panels/recorder/components/StepView.ts | scrollStepTitle":{"message":"Scroll"},"panels/recorder/components/StepView.ts | setViewportClickTitle":{"message":"Set viewport"},"panels/recorder/components/StepView.ts | stepManagement":{"message":"Manage steps"},"panels/recorder/components/StepView.ts | waitForElementStepTitle":{"message":"Wait for element"},"panels/recorder/components/StepView.ts | waitForExpressionStepTitle":{"message":"Wait for expression"},"panels/recorder/models/RecorderSettings.ts | defaultRecordingName":{"message":"Recording {DATE} at {TIME}"},"panels/recorder/recorder-meta.ts | createRecording":{"message":"Create a new recording"},"panels/recorder/recorder-meta.ts | recorder":{"message":"Recorder"},"panels/recorder/recorder-meta.ts | replayRecording":{"message":"Replay recording"},"panels/recorder/recorder-meta.ts | showRecorder":{"message":"Show Recorder"},"panels/recorder/recorder-meta.ts | startStopRecording":{"message":"Start/Stop recording"},"panels/recorder/recorder-meta.ts | toggleCode":{"message":"Toggle code view"},"panels/recorder/RecorderController.ts | continueReplay":{"message":"Continue"},"panels/recorder/RecorderController.ts | copyShortcut":{"message":"Copy recording or selected step"},"panels/recorder/RecorderController.ts | createRecording":{"message":"Create a new recording"},"panels/recorder/RecorderController.ts | deleteRecording":{"message":"Delete recording"},"panels/recorder/RecorderController.ts | export":{"message":"Export"},"panels/recorder/RecorderController.ts | exportRecording":{"message":"Export"},"panels/recorder/RecorderController.ts | exportViaExtensions":{"message":"Export via extensions"},"panels/recorder/RecorderController.ts | getExtensions":{"message":"Get extensions…"},"panels/recorder/RecorderController.ts | importRecording":{"message":"Import recording"},"panels/recorder/RecorderController.ts | replayRecording":{"message":"Replay recording"},"panels/recorder/RecorderController.ts | sendFeedback":{"message":"Send feedback"},"panels/recorder/RecorderController.ts | startStopRecording":{"message":"Start/Stop recording"},"panels/recorder/RecorderController.ts | stepOverReplay":{"message":"Execute one step"},"panels/recorder/RecorderController.ts | toggleCode":{"message":"Toggle code view"},"panels/rn_welcome/rn_welcome-meta.ts | rnWelcome":{"message":"⚛️ Welcome"},"panels/rn_welcome/rn_welcome-meta.ts | showRnWelcome":{"message":"Show React Native Welcome panel"},"panels/rn_welcome/RNWelcome.ts | debuggerBrandName":{"message":"React Native JS Inspector"},"panels/rn_welcome/RNWelcome.ts | docsLabel":{"message":"Debugging docs"},"panels/rn_welcome/RNWelcome.ts | welcomeMessage":{"message":"Welcome to debugging in React Native"},"panels/rn_welcome/RNWelcome.ts | whatsNewLabel":{"message":"What's new"},"panels/screencast/ScreencastApp.ts | toggleScreencast":{"message":"Toggle screencast"},"panels/screencast/ScreencastView.ts | addressBar":{"message":"Address bar"},"panels/screencast/ScreencastView.ts | back":{"message":"back"},"panels/screencast/ScreencastView.ts | forward":{"message":"forward"},"panels/screencast/ScreencastView.ts | profilingInProgress":{"message":"Profiling in progress"},"panels/screencast/ScreencastView.ts | reload":{"message":"reload"},"panels/screencast/ScreencastView.ts | screencastViewOfDebugTarget":{"message":"Screencast view of debug target"},"panels/screencast/ScreencastView.ts | theTabIsInactive":{"message":"The tab is inactive"},"panels/search/SearchResultsPane.ts | lineS":{"message":"Line {PH1}"},"panels/search/SearchResultsPane.ts | matchesCountS":{"message":"Matches Count {PH1}"},"panels/search/SearchResultsPane.ts | showDMore":{"message":"Show {PH1} more"},"panels/search/SearchView.ts | clear":{"message":"Clear"},"panels/search/SearchView.ts | foundDMatchingLinesInDFiles":{"message":"Found {PH1} matching lines in {PH2} files."},"panels/search/SearchView.ts | foundDMatchingLinesInFile":{"message":"Found {PH1} matching lines in 1 file."},"panels/search/SearchView.ts | foundMatchingLineInFile":{"message":"Found 1 matching line in 1 file."},"panels/search/SearchView.ts | indexing":{"message":"Indexing…"},"panels/search/SearchView.ts | indexingInterrupted":{"message":"Indexing interrupted."},"panels/search/SearchView.ts | matchCase":{"message":"Match Case"},"panels/search/SearchView.ts | noMatchesFound":{"message":"No matches found."},"panels/search/SearchView.ts | refresh":{"message":"Refresh"},"panels/search/SearchView.ts | search":{"message":"Search"},"panels/search/SearchView.ts | searchFinished":{"message":"Search finished."},"panels/search/SearchView.ts | searching":{"message":"Searching…"},"panels/search/SearchView.ts | searchInterrupted":{"message":"Search interrupted."},"panels/search/SearchView.ts | searchQuery":{"message":"Search Query"},"panels/search/SearchView.ts | useRegularExpression":{"message":"Use Regular Expression"},"panels/security/security-meta.ts | security":{"message":"Security"},"panels/security/security-meta.ts | showSecurity":{"message":"Show Security"},"panels/security/SecurityModel.ts | cipherWithMAC":{"message":"{PH1} with {PH2}"},"panels/security/SecurityModel.ts | keyExchangeWithGroup":{"message":"{PH1} with {PH2}"},"panels/security/SecurityModel.ts | theSecurityOfThisPageIsUnknown":{"message":"The security of this page is unknown."},"panels/security/SecurityModel.ts | thisPageIsNotSecure":{"message":"This page is not secure."},"panels/security/SecurityModel.ts | thisPageIsNotSecureBrokenHttps":{"message":"This page is not secure (broken HTTPS)."},"panels/security/SecurityModel.ts | thisPageIsSecureValidHttps":{"message":"This page is secure (valid HTTPS)."},"panels/security/SecurityPanel.ts | activeContentWithCertificate":{"message":"active content with certificate errors"},"panels/security/SecurityPanel.ts | activeMixedContent":{"message":"active mixed content"},"panels/security/SecurityPanel.ts | allResourcesOnThisPageAreServed":{"message":"All resources on this page are served securely."},"panels/security/SecurityPanel.ts | allServedSecurely":{"message":"all served securely"},"panels/security/SecurityPanel.ts | blockedMixedContent":{"message":"Blocked mixed content"},"panels/security/SecurityPanel.ts | certificate":{"message":"Certificate"},"panels/security/SecurityPanel.ts | certificateExpiresSoon":{"message":"Certificate expires soon"},"panels/security/SecurityPanel.ts | certificateTransparency":{"message":"Certificate Transparency"},"panels/security/SecurityPanel.ts | chromeHasDeterminedThatThisSiteS":{"message":"Chrome has determined that this site could be fake or fraudulent."},"panels/security/SecurityPanel.ts | cipher":{"message":"Cipher"},"panels/security/SecurityPanel.ts | connection":{"message":"Connection"},"panels/security/SecurityPanel.ts | contentWithCertificateErrors":{"message":"content with certificate errors"},"panels/security/SecurityPanel.ts | enabled":{"message":"enabled"},"panels/security/SecurityPanel.ts | encryptedClientHello":{"message":"Encrypted ClientHello"},"panels/security/SecurityPanel.ts | flaggedByGoogleSafeBrowsing":{"message":"Flagged by Google Safe Browsing"},"panels/security/SecurityPanel.ts | hashAlgorithm":{"message":"Hash algorithm"},"panels/security/SecurityPanel.ts | hideFullDetails":{"message":"Hide full details"},"panels/security/SecurityPanel.ts | ifYouBelieveThisIsShownIn":{"message":"If you believe this is shown in error please visit https://g.co/chrome/lookalike-warnings."},"panels/security/SecurityPanel.ts | ifYouBelieveThisIsShownInErrorSafety":{"message":"If you believe this is shown in error please visit https://g.co/chrome/lookalike-warnings."},"panels/security/SecurityPanel.ts | info":{"message":"Info"},"panels/security/SecurityPanel.ts | insecureSha":{"message":"insecure (SHA-1)"},"panels/security/SecurityPanel.ts | issuedAt":{"message":"Issued at"},"panels/security/SecurityPanel.ts | issuer":{"message":"Issuer"},"panels/security/SecurityPanel.ts | keyExchange":{"message":"Key exchange"},"panels/security/SecurityPanel.ts | logId":{"message":"Log ID"},"panels/security/SecurityPanel.ts | logName":{"message":"Log name"},"panels/security/SecurityPanel.ts | mainOrigin":{"message":"Main origin"},"panels/security/SecurityPanel.ts | mainOriginNonsecure":{"message":"Main origin (non-secure)"},"panels/security/SecurityPanel.ts | mainOriginSecure":{"message":"Main origin (secure)"},"panels/security/SecurityPanel.ts | missing":{"message":"missing"},"panels/security/SecurityPanel.ts | mixedContent":{"message":"mixed content"},"panels/security/SecurityPanel.ts | na":{"message":"(n/a)"},"panels/security/SecurityPanel.ts | nonsecureForm":{"message":"non-secure form"},"panels/security/SecurityPanel.ts | nonsecureOrigins":{"message":"Non-secure origins"},"panels/security/SecurityPanel.ts | noSecurityDetailsAreAvailableFor":{"message":"No security details are available for this origin."},"panels/security/SecurityPanel.ts | noSecurityInformation":{"message":"No security information"},"panels/security/SecurityPanel.ts | notSecure":{"message":"Not secure"},"panels/security/SecurityPanel.ts | notSecureBroken":{"message":"Not secure (broken)"},"panels/security/SecurityPanel.ts | obsoleteConnectionSettings":{"message":"obsolete connection settings"},"panels/security/SecurityPanel.ts | openFullCertificateDetails":{"message":"Open full certificate details"},"panels/security/SecurityPanel.ts | origin":{"message":"Origin"},"panels/security/SecurityPanel.ts | overview":{"message":"Overview"},"panels/security/SecurityPanel.ts | possibleSpoofingUrl":{"message":"Possible spoofing URL"},"panels/security/SecurityPanel.ts | protocol":{"message":"Protocol"},"panels/security/SecurityPanel.ts | publickeypinningBypassed":{"message":"Public-Key-Pinning bypassed"},"panels/security/SecurityPanel.ts | publickeypinningWasBypassedByA":{"message":"Public-Key-Pinning was bypassed by a local root certificate."},"panels/security/SecurityPanel.ts | reloadThePageToRecordRequestsFor":{"message":"Reload the page to record requests for HTTP resources."},"panels/security/SecurityPanel.ts | reloadToViewDetails":{"message":"Reload to view details"},"panels/security/SecurityPanel.ts | resources":{"message":"Resources"},"panels/security/SecurityPanel.ts | rsaKeyExchangeIsObsoleteEnableAn":{"message":"RSA key exchange is obsolete. Enable an ECDHE-based cipher suite."},"panels/security/SecurityPanel.ts | sct":{"message":"SCT"},"panels/security/SecurityPanel.ts | secure":{"message":"Secure"},"panels/security/SecurityPanel.ts | secureConnectionSettings":{"message":"secure connection settings"},"panels/security/SecurityPanel.ts | secureOrigins":{"message":"Secure origins"},"panels/security/SecurityPanel.ts | securityOverview":{"message":"Security overview"},"panels/security/SecurityPanel.ts | serverSignature":{"message":"Server signature"},"panels/security/SecurityPanel.ts | showFullDetails":{"message":"Show full details"},"panels/security/SecurityPanel.ts | showLess":{"message":"Show less"},"panels/security/SecurityPanel.ts | showMoreSTotal":{"message":"Show more ({PH1} total)"},"panels/security/SecurityPanel.ts | signatureAlgorithm":{"message":"Signature algorithm"},"panels/security/SecurityPanel.ts | signatureData":{"message":"Signature data"},"panels/security/SecurityPanel.ts | sIsObsoleteEnableAnAesgcmbased":{"message":"{PH1} is obsolete. Enable an AES-GCM-based cipher suite."},"panels/security/SecurityPanel.ts | sIsObsoleteEnableTlsOrLater":{"message":"{PH1} is obsolete. Enable TLS 1.2 or later."},"panels/security/SecurityPanel.ts | source":{"message":"Source"},"panels/security/SecurityPanel.ts | subject":{"message":"Subject"},"panels/security/SecurityPanel.ts | subjectAlternativeNameMissing":{"message":"Subject Alternative Name missing"},"panels/security/SecurityPanel.ts | theCertificateChainForThisSite":{"message":"The certificate chain for this site contains a certificate signed using SHA-1."},"panels/security/SecurityPanel.ts | theCertificateForThisSiteDoesNot":{"message":"The certificate for this site does not contain a Subject Alternative Name extension containing a domain name or IP address."},"panels/security/SecurityPanel.ts | theCertificateForThisSiteExpires":{"message":"The certificate for this site expires in less than 48 hours and needs to be renewed."},"panels/security/SecurityPanel.ts | theConnectionToThisSiteIs":{"message":"The connection to this site is encrypted and authenticated using {PH1}, {PH2}, and {PH3}."},"panels/security/SecurityPanel.ts | theConnectionToThisSiteIsUsingA":{"message":"The connection to this site is using a valid, trusted server certificate issued by {PH1}."},"panels/security/SecurityPanel.ts | theSecurityDetailsAboveAreFrom":{"message":"The security details above are from the first inspected response."},"panels/security/SecurityPanel.ts | theServerSignatureUsesShaWhichIs":{"message":"The server signature uses SHA-1, which is obsolete. Enable a SHA-2 signature algorithm instead. (Note this is different from the signature in the certificate.)"},"panels/security/SecurityPanel.ts | thisIsAnErrorPage":{"message":"This is an error page."},"panels/security/SecurityPanel.ts | thisOriginIsANonhttpsSecure":{"message":"This origin is a non-HTTPS secure origin."},"panels/security/SecurityPanel.ts | thisPageHasANonhttpsSecureOrigin":{"message":"This page has a non-HTTPS secure origin."},"panels/security/SecurityPanel.ts | thisPageIncludesAFormWithA":{"message":"This page includes a form with a non-secure \"action\" attribute."},"panels/security/SecurityPanel.ts | thisPageIncludesHttpResources":{"message":"This page includes HTTP resources."},"panels/security/SecurityPanel.ts | thisPageIncludesResourcesThat":{"message":"This page includes resources that were loaded with certificate errors."},"panels/security/SecurityPanel.ts | thisPageIsDangerousFlaggedBy":{"message":"This page is dangerous (flagged by Google Safe Browsing)."},"panels/security/SecurityPanel.ts | thisPageIsInsecureUnencrypted":{"message":"This page is insecure (unencrypted HTTP)."},"panels/security/SecurityPanel.ts | thisPageIsSuspicious":{"message":"This page is suspicious"},"panels/security/SecurityPanel.ts | thisPageIsSuspiciousFlaggedBy":{"message":"This page is suspicious (flagged by Chrome)."},"panels/security/SecurityPanel.ts | thisRequestCompliesWithChromes":{"message":"This request complies with Chrome's Certificate Transparency policy."},"panels/security/SecurityPanel.ts | thisRequestDoesNotComplyWith":{"message":"This request does not comply with Chrome's Certificate Transparency policy."},"panels/security/SecurityPanel.ts | thisResponseWasLoadedFromCache":{"message":"This response was loaded from cache. Some security details might be missing."},"panels/security/SecurityPanel.ts | thisSiteIsMissingAValidTrusted":{"message":"This site is missing a valid, trusted certificate ({PH1})."},"panels/security/SecurityPanel.ts | thisSitesHostnameLooksSimilarToP":{"message":"This site's hostname looks similar to {PH1}. Attackers sometimes mimic sites by making small, hard-to-see changes to the domain name."},"panels/security/SecurityPanel.ts | toCheckThisPagesStatusVisit":{"message":"To check this page's status, visit g.co/safebrowsingstatus."},"panels/security/SecurityPanel.ts | unknownCanceled":{"message":"Unknown / canceled"},"panels/security/SecurityPanel.ts | unknownField":{"message":"unknown"},"panels/security/SecurityPanel.ts | validAndTrusted":{"message":"valid and trusted"},"panels/security/SecurityPanel.ts | validationStatus":{"message":"Validation status"},"panels/security/SecurityPanel.ts | validFrom":{"message":"Valid from"},"panels/security/SecurityPanel.ts | validUntil":{"message":"Valid until"},"panels/security/SecurityPanel.ts | viewCertificate":{"message":"View certificate"},"panels/security/SecurityPanel.ts | viewDRequestsInNetworkPanel":{"message":"{n, plural, =1 {View # request in Network Panel} other {View # requests in Network Panel}}"},"panels/security/SecurityPanel.ts | viewRequestsInNetworkPanel":{"message":"View requests in Network Panel"},"panels/security/SecurityPanel.ts | youHaveRecentlyAllowedContent":{"message":"You have recently allowed content loaded with certificate errors (such as scripts or iframes) to run on this site."},"panels/security/SecurityPanel.ts | youHaveRecentlyAllowedNonsecure":{"message":"You have recently allowed non-secure content (such as scripts or iframes) to run on this site."},"panels/security/SecurityPanel.ts | yourConnectionToThisOriginIsNot":{"message":"Your connection to this origin is not secure."},"panels/security/SecurityPanel.ts | yourPageRequestedNonsecure":{"message":"Your page requested non-secure resources that were blocked."},"panels/sensors/LocationsSettingsTab.ts | addLocation":{"message":"Add location..."},"panels/sensors/LocationsSettingsTab.ts | customLocations":{"message":"Custom locations"},"panels/sensors/LocationsSettingsTab.ts | lat":{"message":"Lat"},"panels/sensors/LocationsSettingsTab.ts | latitude":{"message":"Latitude"},"panels/sensors/LocationsSettingsTab.ts | latitudeMustBeANumber":{"message":"Latitude must be a number"},"panels/sensors/LocationsSettingsTab.ts | latitudeMustBeGreaterThanOrEqual":{"message":"Latitude must be greater than or equal to {PH1}"},"panels/sensors/LocationsSettingsTab.ts | latitudeMustBeLessThanOrEqualToS":{"message":"Latitude must be less than or equal to {PH1}"},"panels/sensors/LocationsSettingsTab.ts | locale":{"message":"Locale"},"panels/sensors/LocationsSettingsTab.ts | localeMustContainAlphabetic":{"message":"Locale must contain alphabetic characters"},"panels/sensors/LocationsSettingsTab.ts | locationName":{"message":"Location name"},"panels/sensors/LocationsSettingsTab.ts | locationNameCannotBeEmpty":{"message":"Location name cannot be empty"},"panels/sensors/LocationsSettingsTab.ts | locationNameMustBeLessThanS":{"message":"Location name must be less than {PH1} characters"},"panels/sensors/LocationsSettingsTab.ts | long":{"message":"Long"},"panels/sensors/LocationsSettingsTab.ts | longitude":{"message":"Longitude"},"panels/sensors/LocationsSettingsTab.ts | longitudeMustBeANumber":{"message":"Longitude must be a number"},"panels/sensors/LocationsSettingsTab.ts | longitudeMustBeGreaterThanOr":{"message":"Longitude must be greater than or equal to {PH1}"},"panels/sensors/LocationsSettingsTab.ts | longitudeMustBeLessThanOrEqualTo":{"message":"Longitude must be less than or equal to {PH1}"},"panels/sensors/LocationsSettingsTab.ts | timezoneId":{"message":"Timezone ID"},"panels/sensors/LocationsSettingsTab.ts | timezoneIdMustContainAlphabetic":{"message":"Timezone ID must contain alphabetic characters"},"panels/sensors/sensors-meta.ts | accelerometer":{"message":"accelerometer"},"panels/sensors/sensors-meta.ts | devicebased":{"message":"Device-based"},"panels/sensors/sensors-meta.ts | deviceOrientation":{"message":"device orientation"},"panels/sensors/sensors-meta.ts | emulateIdleDetectorState":{"message":"Emulate Idle Detector state"},"panels/sensors/sensors-meta.ts | forceEnabled":{"message":"Force enabled"},"panels/sensors/sensors-meta.ts | geolocation":{"message":"geolocation"},"panels/sensors/sensors-meta.ts | locale":{"message":"locale"},"panels/sensors/sensors-meta.ts | locales":{"message":"locales"},"panels/sensors/sensors-meta.ts | locations":{"message":"Locations"},"panels/sensors/sensors-meta.ts | noIdleEmulation":{"message":"No idle emulation"},"panels/sensors/sensors-meta.ts | sensors":{"message":"Sensors"},"panels/sensors/sensors-meta.ts | showLocations":{"message":"Show Locations"},"panels/sensors/sensors-meta.ts | showSensors":{"message":"Show Sensors"},"panels/sensors/sensors-meta.ts | timezones":{"message":"timezones"},"panels/sensors/sensors-meta.ts | touch":{"message":"Touch"},"panels/sensors/sensors-meta.ts | userActiveScreenLocked":{"message":"User active, screen locked"},"panels/sensors/sensors-meta.ts | userActiveScreenUnlocked":{"message":"User active, screen unlocked"},"panels/sensors/sensors-meta.ts | userIdleScreenLocked":{"message":"User idle, screen locked"},"panels/sensors/sensors-meta.ts | userIdleScreenUnlocked":{"message":"User idle, screen unlocked"},"panels/sensors/SensorsView.ts | adjustWithMousewheelOrUpdownKeys":{"message":"Adjust with mousewheel or up/down keys. {PH1}: ±10, Shift: ±1, Alt: ±0.01"},"panels/sensors/SensorsView.ts | alpha":{"message":"α (alpha)"},"panels/sensors/SensorsView.ts | beta":{"message":"β (beta)"},"panels/sensors/SensorsView.ts | customOrientation":{"message":"Custom orientation"},"panels/sensors/SensorsView.ts | deviceOrientationSetToAlphaSBeta":{"message":"Device orientation set to alpha: {PH1}, beta: {PH2}, gamma: {PH3}"},"panels/sensors/SensorsView.ts | displayDown":{"message":"Display down"},"panels/sensors/SensorsView.ts | displayUp":{"message":"Display up"},"panels/sensors/SensorsView.ts | enableOrientationToRotate":{"message":"Enable orientation to rotate"},"panels/sensors/SensorsView.ts | error":{"message":"Error"},"panels/sensors/SensorsView.ts | forcesSelectedIdleStateEmulation":{"message":"Forces selected idle state emulation"},"panels/sensors/SensorsView.ts | forcesTouchInsteadOfClick":{"message":"Forces touch instead of click"},"panels/sensors/SensorsView.ts | gamma":{"message":"γ (gamma)"},"panels/sensors/SensorsView.ts | landscapeLeft":{"message":"Landscape left"},"panels/sensors/SensorsView.ts | landscapeRight":{"message":"Landscape right"},"panels/sensors/SensorsView.ts | latitude":{"message":"Latitude"},"panels/sensors/SensorsView.ts | locale":{"message":"Locale"},"panels/sensors/SensorsView.ts | location":{"message":"Location"},"panels/sensors/SensorsView.ts | locationUnavailable":{"message":"Location unavailable"},"panels/sensors/SensorsView.ts | longitude":{"message":"Longitude"},"panels/sensors/SensorsView.ts | manage":{"message":"Manage"},"panels/sensors/SensorsView.ts | manageTheListOfLocations":{"message":"Manage the list of locations"},"panels/sensors/SensorsView.ts | noOverride":{"message":"No override"},"panels/sensors/SensorsView.ts | off":{"message":"Off"},"panels/sensors/SensorsView.ts | orientation":{"message":"Orientation"},"panels/sensors/SensorsView.ts | other":{"message":"Other…"},"panels/sensors/SensorsView.ts | overrides":{"message":"Overrides"},"panels/sensors/SensorsView.ts | portrait":{"message":"Portrait"},"panels/sensors/SensorsView.ts | portraitUpsideDown":{"message":"Portrait upside down"},"panels/sensors/SensorsView.ts | presets":{"message":"Presets"},"panels/sensors/SensorsView.ts | reset":{"message":"Reset"},"panels/sensors/SensorsView.ts | resetDeviceOrientation":{"message":"Reset device orientation"},"panels/sensors/SensorsView.ts | shiftdragHorizontallyToRotate":{"message":"Shift+drag horizontally to rotate around the y-axis"},"panels/sensors/SensorsView.ts | timezoneId":{"message":"Timezone ID"},"panels/settings/components/SyncSection.ts | preferencesSyncDisabled":{"message":"To turn this setting on, you must first enable settings sync in Chrome."},"panels/settings/components/SyncSection.ts | settings":{"message":"Go to Settings"},"panels/settings/components/SyncSection.ts | signedIn":{"message":"Signed into Chrome as:"},"panels/settings/components/SyncSection.ts | syncDisabled":{"message":"To turn this setting on, you must enable Chrome sync."},"panels/settings/emulation/components/UserAgentClientHintsForm.ts | addBrand":{"message":"Add Brand"},"panels/settings/emulation/components/UserAgentClientHintsForm.ts | addedBrand":{"message":"Added brand row"},"panels/settings/emulation/components/UserAgentClientHintsForm.ts | architecture":{"message":"Architecture (Sec-CH-UA-Arch)"},"panels/settings/emulation/components/UserAgentClientHintsForm.ts | architecturePlaceholder":{"message":"Architecture (e.g. x86)"},"panels/settings/emulation/components/UserAgentClientHintsForm.ts | brandFullVersionListDelete":{"message":"Delete brand from full version list"},"panels/settings/emulation/components/UserAgentClientHintsForm.ts | brandName":{"message":"Brand"},"panels/settings/emulation/components/UserAgentClientHintsForm.ts | brandNameAriaLabel":{"message":"Brand {PH1}"},"panels/settings/emulation/components/UserAgentClientHintsForm.ts | brandProperties":{"message":"User agent properties"},"panels/settings/emulation/components/UserAgentClientHintsForm.ts | brandUserAgentDelete":{"message":"Delete brand from user agent section"},"panels/settings/emulation/components/UserAgentClientHintsForm.ts | brandVersionAriaLabel":{"message":"Version {PH1}"},"panels/settings/emulation/components/UserAgentClientHintsForm.ts | brandVersionPlaceholder":{"message":"Version (e.g. 87.0.4280.88)"},"panels/settings/emulation/components/UserAgentClientHintsForm.ts | deletedBrand":{"message":"Deleted brand row"},"panels/settings/emulation/components/UserAgentClientHintsForm.ts | deviceModel":{"message":"Device model (Sec-CH-UA-Model)"},"panels/settings/emulation/components/UserAgentClientHintsForm.ts | deviceProperties":{"message":"Device properties"},"panels/settings/emulation/components/UserAgentClientHintsForm.ts | fullBrowserVersion":{"message":"Full browser version (Sec-CH-UA-Full-Browser-Version)"},"panels/settings/emulation/components/UserAgentClientHintsForm.ts | fullBrowserVersionPlaceholder":{"message":"Full browser version (e.g. 87.0.4280.88)"},"panels/settings/emulation/components/UserAgentClientHintsForm.ts | fullVersionList":{"message":"Full version list (Sec-CH-UA-Full-Version-List)"},"panels/settings/emulation/components/UserAgentClientHintsForm.ts | learnMore":{"message":"Learn more"},"panels/settings/emulation/components/UserAgentClientHintsForm.ts | mobileCheckboxLabel":{"message":"Mobile"},"panels/settings/emulation/components/UserAgentClientHintsForm.ts | notRepresentable":{"message":"Not representable as structured headers string."},"panels/settings/emulation/components/UserAgentClientHintsForm.ts | platformLabel":{"message":"Platform (Sec-CH-UA-Platform / Sec-CH-UA-Platform-Version)"},"panels/settings/emulation/components/UserAgentClientHintsForm.ts | platformPlaceholder":{"message":"Platform (e.g. Android)"},"panels/settings/emulation/components/UserAgentClientHintsForm.ts | platformProperties":{"message":"Platform properties"},"panels/settings/emulation/components/UserAgentClientHintsForm.ts | platformVersion":{"message":"Platform version"},"panels/settings/emulation/components/UserAgentClientHintsForm.ts | significantBrandVersionPlaceholder":{"message":"Significant version (e.g. 87)"},"panels/settings/emulation/components/UserAgentClientHintsForm.ts | title":{"message":"User agent client hints"},"panels/settings/emulation/components/UserAgentClientHintsForm.ts | update":{"message":"Update"},"panels/settings/emulation/components/UserAgentClientHintsForm.ts | useragent":{"message":"User agent (Sec-CH-UA)"},"panels/settings/emulation/components/UserAgentClientHintsForm.ts | userAgentClientHintsInfo":{"message":"User agent client hints are an alternative to the user agent string that identify the browser and the device in a more structured way with better privacy accounting."},"panels/settings/emulation/DevicesSettingsTab.ts | addCustomDevice":{"message":"Add custom device..."},"panels/settings/emulation/DevicesSettingsTab.ts | device":{"message":"Device"},"panels/settings/emulation/DevicesSettingsTab.ts | deviceAddedOrUpdated":{"message":"Device {PH1} successfully added/updated."},"panels/settings/emulation/DevicesSettingsTab.ts | deviceName":{"message":"Device Name"},"panels/settings/emulation/DevicesSettingsTab.ts | deviceNameCannotBeEmpty":{"message":"Device name cannot be empty."},"panels/settings/emulation/DevicesSettingsTab.ts | deviceNameMustBeLessThanS":{"message":"Device name must be less than {PH1} characters."},"panels/settings/emulation/DevicesSettingsTab.ts | devicePixelRatio":{"message":"Device pixel ratio"},"panels/settings/emulation/DevicesSettingsTab.ts | emulatedDevices":{"message":"Emulated Devices"},"panels/settings/emulation/DevicesSettingsTab.ts | height":{"message":"Height"},"panels/settings/emulation/DevicesSettingsTab.ts | userAgentString":{"message":"User agent string"},"panels/settings/emulation/DevicesSettingsTab.ts | userAgentType":{"message":"User agent type"},"panels/settings/emulation/DevicesSettingsTab.ts | width":{"message":"Width"},"panels/settings/emulation/emulation-meta.ts | devices":{"message":"Devices"},"panels/settings/emulation/emulation-meta.ts | showDevices":{"message":"Show Devices"},"panels/settings/FrameworkIgnoreListSettingsTab.ts | addFilenamePattern":{"message":"Add filename pattern"},"panels/settings/FrameworkIgnoreListSettingsTab.ts | addPattern":{"message":"Add pattern..."},"panels/settings/FrameworkIgnoreListSettingsTab.ts | automaticallyIgnoreListKnownThirdPartyScripts":{"message":"Known third-party scripts from source maps"},"panels/settings/FrameworkIgnoreListSettingsTab.ts | customExclusionRules":{"message":"Custom exclusion rules:"},"panels/settings/FrameworkIgnoreListSettingsTab.ts | debuggerWillSkipThroughThe":{"message":"Debugger will skip through the scripts and will not stop on exceptions thrown by them."},"panels/settings/FrameworkIgnoreListSettingsTab.ts | enableIgnoreListing":{"message":"Enable Ignore Listing"},"panels/settings/FrameworkIgnoreListSettingsTab.ts | enableIgnoreListingTooltip":{"message":"Uncheck to disable all ignore listing"},"panels/settings/FrameworkIgnoreListSettingsTab.ts | frameworkIgnoreList":{"message":"Framework Ignore List"},"panels/settings/FrameworkIgnoreListSettingsTab.ts | generalExclusionRules":{"message":"General exclusion rules:"},"panels/settings/FrameworkIgnoreListSettingsTab.ts | ignoreListContentScripts":{"message":"Content scripts injected by extensions"},"panels/settings/FrameworkIgnoreListSettingsTab.ts | ignoreScriptsWhoseNamesMatchS":{"message":"Ignore scripts whose names match ''{PH1}''"},"panels/settings/FrameworkIgnoreListSettingsTab.ts | learnMore":{"message":"Learn more"},"panels/settings/FrameworkIgnoreListSettingsTab.ts | pattern":{"message":"Add Pattern"},"panels/settings/FrameworkIgnoreListSettingsTab.ts | patternAlreadyExists":{"message":"Pattern already exists"},"panels/settings/FrameworkIgnoreListSettingsTab.ts | patternCannotBeEmpty":{"message":"Pattern cannot be empty"},"panels/settings/FrameworkIgnoreListSettingsTab.ts | patternMustBeAValidRegular":{"message":"Pattern must be a valid regular expression"},"panels/settings/KeybindsSettingsTab.ts | addAShortcut":{"message":"Add a shortcut"},"panels/settings/KeybindsSettingsTab.ts | confirmChanges":{"message":"Confirm changes"},"panels/settings/KeybindsSettingsTab.ts | discardChanges":{"message":"Discard changes"},"panels/settings/KeybindsSettingsTab.ts | editShortcut":{"message":"Edit shortcut"},"panels/settings/KeybindsSettingsTab.ts | FullListOfDevtoolsKeyboard":{"message":"Full list of DevTools keyboard shortcuts and gestures"},"panels/settings/KeybindsSettingsTab.ts | keyboardShortcutsList":{"message":"Keyboard shortcuts list"},"panels/settings/KeybindsSettingsTab.ts | matchShortcutsFromPreset":{"message":"Match shortcuts from preset"},"panels/settings/KeybindsSettingsTab.ts | noShortcutForAction":{"message":"No shortcut for action"},"panels/settings/KeybindsSettingsTab.ts | removeShortcut":{"message":"Remove shortcut"},"panels/settings/KeybindsSettingsTab.ts | ResetShortcutsForAction":{"message":"Reset shortcuts for action"},"panels/settings/KeybindsSettingsTab.ts | RestoreDefaultShortcuts":{"message":"Restore default shortcuts"},"panels/settings/KeybindsSettingsTab.ts | shortcutModified":{"message":"Shortcut modified"},"panels/settings/KeybindsSettingsTab.ts | shortcuts":{"message":"Shortcuts"},"panels/settings/KeybindsSettingsTab.ts | shortcutsCannotContainOnly":{"message":"Shortcuts cannot contain only modifier keys."},"panels/settings/KeybindsSettingsTab.ts | thisShortcutIsInUseByS":{"message":"This shortcut is in use by {PH1}: {PH2}."},"panels/settings/settings-meta.ts | documentation":{"message":"Documentation"},"panels/settings/settings-meta.ts | experiments":{"message":"Experiments"},"panels/settings/settings-meta.ts | ignoreList":{"message":"Ignore List"},"panels/settings/settings-meta.ts | preferences":{"message":"Preferences"},"panels/settings/settings-meta.ts | settings":{"message":"Settings"},"panels/settings/settings-meta.ts | shortcuts":{"message":"Shortcuts"},"panels/settings/settings-meta.ts | showExperiments":{"message":"Show Experiments"},"panels/settings/settings-meta.ts | showIgnoreList":{"message":"Show Ignore List"},"panels/settings/settings-meta.ts | showPreferences":{"message":"Show Preferences"},"panels/settings/settings-meta.ts | showShortcuts":{"message":"Show Shortcuts"},"panels/settings/SettingsScreen.ts | experiments":{"message":"Experiments"},"panels/settings/SettingsScreen.ts | filterExperimentsLabel":{"message":"Filter"},"panels/settings/SettingsScreen.ts | learnMore":{"message":"Learn more"},"panels/settings/SettingsScreen.ts | noResults":{"message":"No experiments match the filter"},"panels/settings/SettingsScreen.ts | oneOrMoreSettingsHaveChanged":{"message":"One or more settings have changed which requires a reload to take effect."},"panels/settings/SettingsScreen.ts | preferences":{"message":"Preferences"},"panels/settings/SettingsScreen.ts | restoreDefaultsAndReload":{"message":"Restore defaults and reload"},"panels/settings/SettingsScreen.ts | sendFeedback":{"message":"Send feedback"},"panels/settings/SettingsScreen.ts | settings":{"message":"Settings"},"panels/settings/SettingsScreen.ts | shortcuts":{"message":"Shortcuts"},"panels/settings/SettingsScreen.ts | theseExperimentsAreParticularly":{"message":"These experiments are particularly unstable. Enable at your own risk."},"panels/settings/SettingsScreen.ts | theseExperimentsCouldBeUnstable":{"message":"These experiments could be unstable or unreliable and may require you to restart DevTools."},"panels/settings/SettingsScreen.ts | warning":{"message":"WARNING:"},"panels/snippets/ScriptSnippetFileSystem.ts | linkedTo":{"message":"Linked to {PH1}"},"panels/snippets/ScriptSnippetFileSystem.ts | scriptSnippet":{"message":"Script snippet #{PH1}"},"panels/snippets/SnippetsQuickOpen.ts | noSnippetsFound":{"message":"No snippets found."},"panels/snippets/SnippetsQuickOpen.ts | run":{"message":"Run"},"panels/snippets/SnippetsQuickOpen.ts | snippet":{"message":"Snippet"},"panels/sources/AddSourceMapURLDialog.ts | add":{"message":"Add"},"panels/sources/AddSourceMapURLDialog.ts | debugInfoUrl":{"message":"DWARF symbols URL: "},"panels/sources/AddSourceMapURLDialog.ts | sourceMapUrl":{"message":"Source map URL: "},"panels/sources/BreakpointEditDialog.ts | breakpoint":{"message":"Breakpoint"},"panels/sources/BreakpointEditDialog.ts | breakpointType":{"message":"Breakpoint type"},"panels/sources/BreakpointEditDialog.ts | closeDialog":{"message":"Close edit dialog and save changes"},"panels/sources/BreakpointEditDialog.ts | conditionalBreakpoint":{"message":"Conditional breakpoint"},"panels/sources/BreakpointEditDialog.ts | expressionToCheckBeforePausingEg":{"message":"Expression to check before pausing, e.g. x > 5"},"panels/sources/BreakpointEditDialog.ts | learnMoreOnBreakpointTypes":{"message":"Learn more: Breakpoint Types"},"panels/sources/BreakpointEditDialog.ts | logAMessageToConsoleDoNotBreak":{"message":"Log a message to Console, do not break"},"panels/sources/BreakpointEditDialog.ts | logMessageEgXIsX":{"message":"Log message, e.g. 'x is', x"},"panels/sources/BreakpointEditDialog.ts | logpoint":{"message":"Logpoint"},"panels/sources/BreakpointEditDialog.ts | pauseOnlyWhenTheConditionIsTrue":{"message":"Pause only when the condition is true"},"panels/sources/CallStackSidebarPane.ts | callFrameWarnings":{"message":"Some call frames have warnings"},"panels/sources/CallStackSidebarPane.ts | callStack":{"message":"Call Stack"},"panels/sources/CallStackSidebarPane.ts | copyStackTrace":{"message":"Copy stack trace"},"panels/sources/CallStackSidebarPane.ts | debugFileNotFound":{"message":"Failed to load debug file \"{PH1}\"."},"panels/sources/CallStackSidebarPane.ts | notPaused":{"message":"Not paused"},"panels/sources/CallStackSidebarPane.ts | onIgnoreList":{"message":"on ignore list"},"panels/sources/CallStackSidebarPane.ts | restartFrame":{"message":"Restart frame"},"panels/sources/CallStackSidebarPane.ts | showIgnorelistedFrames":{"message":"Show ignore-listed frames"},"panels/sources/CallStackSidebarPane.ts | showMore":{"message":"Show more"},"panels/sources/components/BreakpointsView.ts | breakpointHit":{"message":"{PH1} breakpoint hit"},"panels/sources/components/BreakpointsView.ts | checked":{"message":"checked"},"panels/sources/components/BreakpointsView.ts | conditionCode":{"message":"Condition: {PH1}"},"panels/sources/components/BreakpointsView.ts | disableAllBreakpointsInFile":{"message":"Disable all breakpoints in file"},"panels/sources/components/BreakpointsView.ts | editCondition":{"message":"Edit condition"},"panels/sources/components/BreakpointsView.ts | editLogpoint":{"message":"Edit logpoint"},"panels/sources/components/BreakpointsView.ts | enableAllBreakpointsInFile":{"message":"Enable all breakpoints in file"},"panels/sources/components/BreakpointsView.ts | indeterminate":{"message":"mixed"},"panels/sources/components/BreakpointsView.ts | logpointCode":{"message":"Logpoint: {PH1}"},"panels/sources/components/BreakpointsView.ts | pauseOnCaughtExceptions":{"message":"Pause on caught exceptions"},"panels/sources/components/BreakpointsView.ts | pauseOnUncaughtExceptions":{"message":"Pause on uncaught exceptions"},"panels/sources/components/BreakpointsView.ts | removeAllBreakpoints":{"message":"Remove all breakpoints"},"panels/sources/components/BreakpointsView.ts | removeAllBreakpointsInFile":{"message":"Remove all breakpoints in file"},"panels/sources/components/BreakpointsView.ts | removeBreakpoint":{"message":"Remove breakpoint"},"panels/sources/components/BreakpointsView.ts | removeOtherBreakpoints":{"message":"Remove other breakpoints"},"panels/sources/components/BreakpointsView.ts | revealLocation":{"message":"Reveal location"},"panels/sources/components/BreakpointsView.ts | unchecked":{"message":"unchecked"},"panels/sources/components/HeadersView.ts | addHeader":{"message":"Add a header"},"panels/sources/components/HeadersView.ts | addOverrideRule":{"message":"Add override rule"},"panels/sources/components/HeadersView.ts | errorWhenParsing":{"message":"Error when parsing ''{PH1}''."},"panels/sources/components/HeadersView.ts | learnMore":{"message":"Learn more"},"panels/sources/components/HeadersView.ts | parsingErrorExplainer":{"message":"This is most likely due to a syntax error in ''{PH1}''. Try opening this file in an external editor to fix the error or delete the file and re-create the override."},"panels/sources/components/HeadersView.ts | removeBlock":{"message":"Remove this 'ApplyTo'-section"},"panels/sources/components/HeadersView.ts | removeHeader":{"message":"Remove this header"},"panels/sources/CoveragePlugin.ts | clickToShowCoveragePanel":{"message":"Click to show Coverage Panel"},"panels/sources/CoveragePlugin.ts | coverageNa":{"message":"Coverage: n/a"},"panels/sources/CoveragePlugin.ts | coverageS":{"message":"Coverage: {PH1}"},"panels/sources/CoveragePlugin.ts | showDetails":{"message":"Show Details"},"panels/sources/CSSPlugin.ts | openColorPicker":{"message":"Open color picker."},"panels/sources/CSSPlugin.ts | openCubicBezierEditor":{"message":"Open cubic bezier editor."},"panels/sources/DebuggerPausedMessage.ts | attributeModifications":{"message":"attribute modifications"},"panels/sources/DebuggerPausedMessage.ts | childSAdded":{"message":"Child {PH1} added"},"panels/sources/DebuggerPausedMessage.ts | debuggerPaused":{"message":"Debugger paused"},"panels/sources/DebuggerPausedMessage.ts | descendantSAdded":{"message":"Descendant {PH1} added"},"panels/sources/DebuggerPausedMessage.ts | descendantSRemoved":{"message":"Descendant {PH1} removed"},"panels/sources/DebuggerPausedMessage.ts | nodeRemoval":{"message":"node removal"},"panels/sources/DebuggerPausedMessage.ts | pausedBeforePotentialOutofmemory":{"message":"Paused before potential out-of-memory crash"},"panels/sources/DebuggerPausedMessage.ts | pausedOnAssertion":{"message":"Paused on assertion"},"panels/sources/DebuggerPausedMessage.ts | pausedOnBreakpoint":{"message":"Paused on breakpoint"},"panels/sources/DebuggerPausedMessage.ts | pausedOnCspViolation":{"message":"Paused on CSP violation"},"panels/sources/DebuggerPausedMessage.ts | pausedOnDebuggedFunction":{"message":"Paused on debugged function"},"panels/sources/DebuggerPausedMessage.ts | pausedOnEventListener":{"message":"Paused on event listener"},"panels/sources/DebuggerPausedMessage.ts | pausedOnException":{"message":"Paused on exception"},"panels/sources/DebuggerPausedMessage.ts | pausedOnPromiseRejection":{"message":"Paused on promise rejection"},"panels/sources/DebuggerPausedMessage.ts | pausedOnS":{"message":"Paused on {PH1}"},"panels/sources/DebuggerPausedMessage.ts | pausedOnXhrOrFetch":{"message":"Paused on XHR or fetch"},"panels/sources/DebuggerPausedMessage.ts | subtreeModifications":{"message":"subtree modifications"},"panels/sources/DebuggerPausedMessage.ts | trustedTypePolicyViolation":{"message":"Trusted Type Policy Violation"},"panels/sources/DebuggerPausedMessage.ts | trustedTypeSinkViolation":{"message":"Trusted Type Sink Violation"},"panels/sources/DebuggerPlugin.ts | addBreakpoint":{"message":"Add breakpoint"},"panels/sources/DebuggerPlugin.ts | addConditionalBreakpoint":{"message":"Add conditional breakpoint…"},"panels/sources/DebuggerPlugin.ts | addLogpoint":{"message":"Add logpoint…"},"panels/sources/DebuggerPlugin.ts | addSourceMap":{"message":"Add source map…"},"panels/sources/DebuggerPlugin.ts | addWasmDebugInfo":{"message":"Add DWARF debug info…"},"panels/sources/DebuggerPlugin.ts | associatedFilesAreAvailable":{"message":"Associated files are available via file tree or {PH1}."},"panels/sources/DebuggerPlugin.ts | associatedFilesShouldBeAdded":{"message":"Associated files should be added to the file tree. You can debug these resolved source files as regular JavaScript files."},"panels/sources/DebuggerPlugin.ts | configure":{"message":"Configure"},"panels/sources/DebuggerPlugin.ts | debugFileNotFound":{"message":"Failed to load debug file \"{PH1}\"."},"panels/sources/DebuggerPlugin.ts | debugInfoNotFound":{"message":"Failed to load any debug info for {PH1}."},"panels/sources/DebuggerPlugin.ts | disableBreakpoint":{"message":"{n, plural, =1 {Disable breakpoint} other {Disable all breakpoints in line}}"},"panels/sources/DebuggerPlugin.ts | editBreakpoint":{"message":"Edit breakpoint…"},"panels/sources/DebuggerPlugin.ts | enableBreakpoint":{"message":"{n, plural, =1 {Enable breakpoint} other {Enable all breakpoints in line}}"},"panels/sources/DebuggerPlugin.ts | neverPauseHere":{"message":"Never pause here"},"panels/sources/DebuggerPlugin.ts | removeBreakpoint":{"message":"{n, plural, =1 {Remove breakpoint} other {Remove all breakpoints in line}}"},"panels/sources/DebuggerPlugin.ts | removeFromIgnoreList":{"message":"Remove from ignore list"},"panels/sources/DebuggerPlugin.ts | sourceMapDetected":{"message":"Source map detected."},"panels/sources/DebuggerPlugin.ts | sourceMapFoundButIgnoredForFile":{"message":"Source map found, but ignored for file on ignore list."},"panels/sources/DebuggerPlugin.ts | theDebuggerWillSkipStepping":{"message":"The debugger will skip stepping through this script, and will not stop on exceptions."},"panels/sources/DebuggerPlugin.ts | thisScriptIsOnTheDebuggersIgnore":{"message":"This script is on the debugger's ignore list"},"panels/sources/FilteredUISourceCodeListProvider.ts | noFilesFound":{"message":"No files found"},"panels/sources/FilteredUISourceCodeListProvider.ts | sIgnoreListed":{"message":"{PH1} (ignore listed)"},"panels/sources/GoToLineQuickOpen.ts | currentLineSTypeALineNumber":{"message":"Current line: {PH1}. Type a line number between 1 and {PH2} to navigate to."},"panels/sources/GoToLineQuickOpen.ts | currentPositionXsTypeAnOffset":{"message":"Current position: 0x{PH1}. Type an offset between 0x{PH2} and 0x{PH3} to navigate to."},"panels/sources/GoToLineQuickOpen.ts | goToLineS":{"message":"Go to line {PH1}."},"panels/sources/GoToLineQuickOpen.ts | goToLineSAndColumnS":{"message":"Go to line {PH1} and column {PH2}."},"panels/sources/GoToLineQuickOpen.ts | goToOffsetXs":{"message":"Go to offset 0x{PH1}."},"panels/sources/GoToLineQuickOpen.ts | noFileSelected":{"message":"No file selected."},"panels/sources/GoToLineQuickOpen.ts | noResultsFound":{"message":"No results found"},"panels/sources/GoToLineQuickOpen.ts | typeANumberToGoToThatLine":{"message":"Type a number to go to that line."},"panels/sources/InplaceFormatterEditorAction.ts | format":{"message":"Format"},"panels/sources/InplaceFormatterEditorAction.ts | formatS":{"message":"Format {PH1}"},"panels/sources/NavigatorView.ts | areYouSureYouWantToDeleteAll":{"message":"Are you sure you want to delete all overrides contained in this folder?"},"panels/sources/NavigatorView.ts | areYouSureYouWantToDeleteThis":{"message":"Are you sure you want to delete this file?"},"panels/sources/NavigatorView.ts | areYouSureYouWantToExcludeThis":{"message":"Are you sure you want to exclude this folder?"},"panels/sources/NavigatorView.ts | areYouSureYouWantToRemoveThis":{"message":"Are you sure you want to remove this folder?"},"panels/sources/NavigatorView.ts | authored":{"message":"Authored"},"panels/sources/NavigatorView.ts | authoredTooltip":{"message":"Contains original sources"},"panels/sources/NavigatorView.ts | delete":{"message":"Delete"},"panels/sources/NavigatorView.ts | deleteAllOverrides":{"message":"Delete all overrides"},"panels/sources/NavigatorView.ts | deployed":{"message":"Deployed"},"panels/sources/NavigatorView.ts | deployedTooltip":{"message":"Contains final sources the browser sees"},"panels/sources/NavigatorView.ts | excludeFolder":{"message":"Exclude folder"},"panels/sources/NavigatorView.ts | makeACopy":{"message":"Make a copy…"},"panels/sources/NavigatorView.ts | newFile":{"message":"New file"},"panels/sources/NavigatorView.ts | noDomain":{"message":"(no domain)"},"panels/sources/NavigatorView.ts | openFolder":{"message":"Open folder"},"panels/sources/NavigatorView.ts | removeFolderFromWorkspace":{"message":"Remove folder from workspace"},"panels/sources/NavigatorView.ts | rename":{"message":"Rename…"},"panels/sources/NavigatorView.ts | searchInAllFiles":{"message":"Search in all files"},"panels/sources/NavigatorView.ts | searchInFolder":{"message":"Search in folder"},"panels/sources/NavigatorView.ts | sFromSourceMap":{"message":"{PH1} (from source map)"},"panels/sources/NavigatorView.ts | sIgnoreListed":{"message":"{PH1} (ignore listed)"},"panels/sources/OutlineQuickOpen.ts | noFileSelected":{"message":"No file selected."},"panels/sources/OutlineQuickOpen.ts | noResultsFound":{"message":"No results found"},"panels/sources/OutlineQuickOpen.ts | openAJavascriptOrCssFileToSee":{"message":"Open a JavaScript or CSS file to see symbols"},"panels/sources/ProfilePlugin.ts | kb":{"message":"kB"},"panels/sources/ProfilePlugin.ts | mb":{"message":"MB"},"panels/sources/ProfilePlugin.ts | ms":{"message":"ms"},"panels/sources/ResourceOriginPlugin.ts | fromS":{"message":"(From {PH1})"},"panels/sources/ResourceOriginPlugin.ts | sourceMappedFromS":{"message":"(Source mapped from {PH1})"},"panels/sources/ScopeChainSidebarPane.ts | closure":{"message":"Closure"},"panels/sources/ScopeChainSidebarPane.ts | closureS":{"message":"Closure ({PH1})"},"panels/sources/ScopeChainSidebarPane.ts | exception":{"message":"Exception"},"panels/sources/ScopeChainSidebarPane.ts | loading":{"message":"Loading..."},"panels/sources/ScopeChainSidebarPane.ts | notPaused":{"message":"Not paused"},"panels/sources/ScopeChainSidebarPane.ts | noVariables":{"message":"No variables"},"panels/sources/ScopeChainSidebarPane.ts | returnValue":{"message":"Return value"},"panels/sources/ScopeChainSidebarPane.ts | revealInMemoryInspectorPanel":{"message":"Reveal in Memory Inspector panel"},"panels/sources/SnippetsPlugin.ts | ctrlenter":{"message":"Ctrl+Enter"},"panels/sources/SnippetsPlugin.ts | enter":{"message":"⌘+Enter"},"panels/sources/sources-meta.ts | activateBreakpoints":{"message":"Activate breakpoints"},"panels/sources/sources-meta.ts | addFolderToWorkspace":{"message":"Add folder to workspace"},"panels/sources/sources-meta.ts | addSelectedTextToWatches":{"message":"Add selected text to watches"},"panels/sources/sources-meta.ts | all":{"message":"All"},"panels/sources/sources-meta.ts | allowScrollingPastEndOfFile":{"message":"Allow scrolling past end of file"},"panels/sources/sources-meta.ts | autocompletion":{"message":"Autocompletion"},"panels/sources/sources-meta.ts | automaticallyRevealFilesIn":{"message":"Automatically reveal files in sidebar"},"panels/sources/sources-meta.ts | bracketMatching":{"message":"Bracket matching"},"panels/sources/sources-meta.ts | breakpoints":{"message":"Breakpoints"},"panels/sources/sources-meta.ts | closeAll":{"message":"Close All"},"panels/sources/sources-meta.ts | closeTheActiveTab":{"message":"Close the active tab"},"panels/sources/sources-meta.ts | codeFolding":{"message":"Code folding"},"panels/sources/sources-meta.ts | createNewSnippet":{"message":"Create new snippet"},"panels/sources/sources-meta.ts | deactivateBreakpoints":{"message":"Deactivate breakpoints"},"panels/sources/sources-meta.ts | decrementCssUnitBy":{"message":"Decrement CSS unit by {PH1}"},"panels/sources/sources-meta.ts | detectIndentation":{"message":"Detect indentation"},"panels/sources/sources-meta.ts | disableAutocompletion":{"message":"Disable autocompletion"},"panels/sources/sources-meta.ts | disableAutoFocusOnDebuggerPaused":{"message":"Do not focus Sources panel when triggering a breakpoint"},"panels/sources/sources-meta.ts | disableBracketMatching":{"message":"Disable bracket matching"},"panels/sources/sources-meta.ts | disableCodeFolding":{"message":"Disable code folding"},"panels/sources/sources-meta.ts | disableCssSourceMaps":{"message":"Disable CSS source maps"},"panels/sources/sources-meta.ts | disableJavascriptSourceMaps":{"message":"Disable JavaScript source maps"},"panels/sources/sources-meta.ts | disableTabMovesFocus":{"message":"Disable tab moves focus"},"panels/sources/sources-meta.ts | disableWasmAutoStepping":{"message":"Disable wasm auto-stepping"},"panels/sources/sources-meta.ts | disallowScrollingPastEndOfFile":{"message":"Disallow scrolling past end of file"},"panels/sources/sources-meta.ts | displayVariableValuesInlineWhile":{"message":"Display variable values inline while debugging"},"panels/sources/sources-meta.ts | doNotAutomaticallyRevealFilesIn":{"message":"Do not automatically reveal files in sidebar"},"panels/sources/sources-meta.ts | doNotDetectIndentation":{"message":"Do not detect indentation"},"panels/sources/sources-meta.ts | doNotDisplayVariableValuesInline":{"message":"Do not display variable values inline while debugging"},"panels/sources/sources-meta.ts | doNotSearchInAnonymousAndContent":{"message":"Do not search in anonymous and content scripts"},"panels/sources/sources-meta.ts | doNotShowWhitespaceCharacters":{"message":"Do not show whitespace characters"},"panels/sources/sources-meta.ts | enableAutocompletion":{"message":"Enable autocompletion"},"panels/sources/sources-meta.ts | enableAutoFocusOnDebuggerPaused":{"message":"Focus Sources panel when triggering a breakpoint"},"panels/sources/sources-meta.ts | enableBracketMatching":{"message":"Enable bracket matching"},"panels/sources/sources-meta.ts | enableCodeFolding":{"message":"Enable code folding"},"panels/sources/sources-meta.ts | enableCssSourceMaps":{"message":"Enable CSS source maps"},"panels/sources/sources-meta.ts | enableJavascriptSourceMaps":{"message":"Enable JavaScript source maps"},"panels/sources/sources-meta.ts | enableTabMovesFocus":{"message":"Enable tab moves focus"},"panels/sources/sources-meta.ts | enableWasmAutoStepping":{"message":"Enable wasm auto-stepping"},"panels/sources/sources-meta.ts | evaluateSelectedTextInConsole":{"message":"Evaluate selected text in console"},"panels/sources/sources-meta.ts | file":{"message":"File"},"panels/sources/sources-meta.ts | filesystem":{"message":"Filesystem"},"panels/sources/sources-meta.ts | goTo":{"message":"Go to"},"panels/sources/sources-meta.ts | goToAFunctionDeclarationruleSet":{"message":"Go to a function declaration/rule set"},"panels/sources/sources-meta.ts | goToLine":{"message":"Go to line"},"panels/sources/sources-meta.ts | incrementCssUnitBy":{"message":"Increment CSS unit by {PH1}"},"panels/sources/sources-meta.ts | jumpToNextEditingLocation":{"message":"Jump to next editing location"},"panels/sources/sources-meta.ts | jumpToPreviousEditingLocation":{"message":"Jump to previous editing location"},"panels/sources/sources-meta.ts | line":{"message":"Line"},"panels/sources/sources-meta.ts | nextCallFrame":{"message":"Next call frame"},"panels/sources/sources-meta.ts | nextEditorTab":{"message":"Next editor"},"panels/sources/sources-meta.ts | none":{"message":"None"},"panels/sources/sources-meta.ts | open":{"message":"Open"},"panels/sources/sources-meta.ts | pauseScriptExecution":{"message":"Pause script execution"},"panels/sources/sources-meta.ts | previousCallFrame":{"message":"Previous call frame"},"panels/sources/sources-meta.ts | previousEditorTab":{"message":"Previous editor"},"panels/sources/sources-meta.ts | quickSource":{"message":"Quick source"},"panels/sources/sources-meta.ts | rename":{"message":"Rename"},"panels/sources/sources-meta.ts | resumeScriptExecution":{"message":"Resume script execution"},"panels/sources/sources-meta.ts | runSnippet":{"message":"Run snippet"},"panels/sources/sources-meta.ts | save":{"message":"Save"},"panels/sources/sources-meta.ts | saveAll":{"message":"Save all"},"panels/sources/sources-meta.ts | scope":{"message":"Scope"},"panels/sources/sources-meta.ts | search":{"message":"Search"},"panels/sources/sources-meta.ts | searchInAnonymousAndContent":{"message":"Search in anonymous and content scripts"},"panels/sources/sources-meta.ts | showAllWhitespaceCharacters":{"message":"Show all whitespace characters"},"panels/sources/sources-meta.ts | showBreakpoints":{"message":"Show Breakpoints"},"panels/sources/sources-meta.ts | showFilesystem":{"message":"Show Filesystem"},"panels/sources/sources-meta.ts | showQuickSource":{"message":"Show Quick source"},"panels/sources/sources-meta.ts | showScope":{"message":"Show Scope"},"panels/sources/sources-meta.ts | showSearch":{"message":"Show Search"},"panels/sources/sources-meta.ts | showSnippets":{"message":"Show Snippets"},"panels/sources/sources-meta.ts | showSources":{"message":"Show Sources"},"panels/sources/sources-meta.ts | showThreads":{"message":"Show Threads"},"panels/sources/sources-meta.ts | showTrailingWhitespaceCharacters":{"message":"Show trailing whitespace characters"},"panels/sources/sources-meta.ts | showWatch":{"message":"Show Watch"},"panels/sources/sources-meta.ts | showWhitespaceCharacters":{"message":"Show whitespace characters:"},"panels/sources/sources-meta.ts | snippets":{"message":"Snippets"},"panels/sources/sources-meta.ts | sources":{"message":"Sources"},"panels/sources/sources-meta.ts | step":{"message":"Step"},"panels/sources/sources-meta.ts | stepIntoNextFunctionCall":{"message":"Step into next function call"},"panels/sources/sources-meta.ts | stepOutOfCurrentFunction":{"message":"Step out of current function"},"panels/sources/sources-meta.ts | stepOverNextFunctionCall":{"message":"Step over next function call"},"panels/sources/sources-meta.ts | switchFile":{"message":"Switch file"},"panels/sources/sources-meta.ts | symbol":{"message":"Symbol"},"panels/sources/sources-meta.ts | threads":{"message":"Threads"},"panels/sources/sources-meta.ts | toggleBreakpoint":{"message":"Toggle breakpoint"},"panels/sources/sources-meta.ts | toggleBreakpointEnabled":{"message":"Toggle breakpoint enabled"},"panels/sources/sources-meta.ts | toggleBreakpointInputWindow":{"message":"Toggle breakpoint input window"},"panels/sources/sources-meta.ts | toggleDebuggerSidebar":{"message":"Toggle debugger sidebar"},"panels/sources/sources-meta.ts | toggleNavigatorSidebar":{"message":"Toggle navigator sidebar"},"panels/sources/sources-meta.ts | trailing":{"message":"Trailing"},"panels/sources/sources-meta.ts | wasmAutoStepping":{"message":"When debugging wasm with debug information, do not pause on wasm bytecode if possible"},"panels/sources/sources-meta.ts | watch":{"message":"Watch"},"panels/sources/SourcesNavigator.ts | clearConfiguration":{"message":"Clear configuration"},"panels/sources/SourcesNavigator.ts | contentScriptsServedByExtensions":{"message":"Content scripts served by extensions appear here"},"panels/sources/SourcesNavigator.ts | createAndSaveCodeSnippetsFor":{"message":"Create and save code snippets for later reuse"},"panels/sources/SourcesNavigator.ts | createNewSnippet":{"message":"Create new snippet"},"panels/sources/SourcesNavigator.ts | learnMore":{"message":"Learn more"},"panels/sources/SourcesNavigator.ts | learnMoreAboutWorkspaces":{"message":"Learn more about Workspaces"},"panels/sources/SourcesNavigator.ts | newSnippet":{"message":"New snippet"},"panels/sources/SourcesNavigator.ts | overridePageAssetsWithFilesFromA":{"message":"Override page assets with files from a local folder"},"panels/sources/SourcesNavigator.ts | remove":{"message":"Remove"},"panels/sources/SourcesNavigator.ts | rename":{"message":"Rename…"},"panels/sources/SourcesNavigator.ts | run":{"message":"Run"},"panels/sources/SourcesNavigator.ts | saveAs":{"message":"Save as..."},"panels/sources/SourcesNavigator.ts | selectFolderForOverrides":{"message":"Select folder for overrides"},"panels/sources/SourcesNavigator.ts | syncChangesInDevtoolsWithThe":{"message":"Sync changes in DevTools with the local filesystem"},"panels/sources/SourcesPanel.ts | continueToHere":{"message":"Continue to here"},"panels/sources/SourcesPanel.ts | copyS":{"message":"Copy {PH1}"},"panels/sources/SourcesPanel.ts | copyStringAsJSLiteral":{"message":"Copy string as JavaScript literal"},"panels/sources/SourcesPanel.ts | copyStringAsJSONLiteral":{"message":"Copy string as JSON literal"},"panels/sources/SourcesPanel.ts | copyStringContents":{"message":"Copy string contents"},"panels/sources/SourcesPanel.ts | debuggerHidden":{"message":"Debugger sidebar hidden"},"panels/sources/SourcesPanel.ts | debuggerShown":{"message":"Debugger sidebar shown"},"panels/sources/SourcesPanel.ts | dropWorkspaceFolderHere":{"message":"Drop workspace folder here"},"panels/sources/SourcesPanel.ts | groupByAuthored":{"message":"Group by Authored/Deployed"},"panels/sources/SourcesPanel.ts | groupByFolder":{"message":"Group by folder"},"panels/sources/SourcesPanel.ts | hideDebugger":{"message":"Hide debugger"},"panels/sources/SourcesPanel.ts | hideIgnoreListed":{"message":"Hide ignore-listed sources"},"panels/sources/SourcesPanel.ts | hideNavigator":{"message":"Hide navigator"},"panels/sources/SourcesPanel.ts | moreOptions":{"message":"More options"},"panels/sources/SourcesPanel.ts | navigatorHidden":{"message":"Navigator sidebar hidden"},"panels/sources/SourcesPanel.ts | navigatorShown":{"message":"Navigator sidebar shown"},"panels/sources/SourcesPanel.ts | openInSourcesPanel":{"message":"Open in Sources panel"},"panels/sources/SourcesPanel.ts | pauseOnCaughtExceptions":{"message":"Pause on caught exceptions"},"panels/sources/SourcesPanel.ts | resumeWithAllPausesBlockedForMs":{"message":"Resume with all pauses blocked for 500 ms"},"panels/sources/SourcesPanel.ts | revealInSidebar":{"message":"Reveal in sidebar"},"panels/sources/SourcesPanel.ts | showDebugger":{"message":"Show debugger"},"panels/sources/SourcesPanel.ts | showFunctionDefinition":{"message":"Show function definition"},"panels/sources/SourcesPanel.ts | showNavigator":{"message":"Show navigator"},"panels/sources/SourcesPanel.ts | storeSAsGlobalVariable":{"message":"Store {PH1} as global variable"},"panels/sources/SourcesPanel.ts | terminateCurrentJavascriptCall":{"message":"Terminate current JavaScript call"},"panels/sources/SourcesView.ts | dropInAFolderToAddToWorkspace":{"message":"Drop in a folder to add to workspace"},"panels/sources/SourcesView.ts | openFile":{"message":"Open file"},"panels/sources/SourcesView.ts | runCommand":{"message":"Run command"},"panels/sources/SourcesView.ts | sourceViewActions":{"message":"Source View Actions"},"panels/sources/TabbedEditorContainer.ts | areYouSureYouWantToCloseUnsaved":{"message":"Are you sure you want to close unsaved file: {PH1}?"},"panels/sources/TabbedEditorContainer.ts | changesToThisFileWereNotSavedTo":{"message":"Changes to this file were not saved to file system."},"panels/sources/TabbedEditorContainer.ts | unableToLoadThisContent":{"message":"Unable to load this content."},"panels/sources/ThreadsSidebarPane.ts | paused":{"message":"paused"},"panels/sources/WatchExpressionsSidebarPane.ts | addPropertyPathToWatch":{"message":"Add property path to watch"},"panels/sources/WatchExpressionsSidebarPane.ts | addWatchExpression":{"message":"Add watch expression"},"panels/sources/WatchExpressionsSidebarPane.ts | copyValue":{"message":"Copy value"},"panels/sources/WatchExpressionsSidebarPane.ts | deleteAllWatchExpressions":{"message":"Delete all watch expressions"},"panels/sources/WatchExpressionsSidebarPane.ts | deleteWatchExpression":{"message":"Delete watch expression"},"panels/sources/WatchExpressionsSidebarPane.ts | notAvailable":{"message":""},"panels/sources/WatchExpressionsSidebarPane.ts | noWatchExpressions":{"message":"No watch expressions"},"panels/sources/WatchExpressionsSidebarPane.ts | refreshWatchExpressions":{"message":"Refresh watch expressions"},"panels/timeline/AppenderUtils.ts | sSelfS":{"message":"{PH1} (self {PH2})"},"panels/timeline/CountersGraph.ts | documents":{"message":"Documents"},"panels/timeline/CountersGraph.ts | gpuMemory":{"message":"GPU Memory"},"panels/timeline/CountersGraph.ts | jsHeap":{"message":"JS Heap"},"panels/timeline/CountersGraph.ts | listeners":{"message":"Listeners"},"panels/timeline/CountersGraph.ts | nodes":{"message":"Nodes"},"panels/timeline/CountersGraph.ts | ss":{"message":"[{PH1} – {PH2}]"},"panels/timeline/EventsTimelineTreeView.ts | all":{"message":"All"},"panels/timeline/EventsTimelineTreeView.ts | Dms":{"message":"{PH1} ms"},"panels/timeline/EventsTimelineTreeView.ts | durationFilter":{"message":"Duration filter"},"panels/timeline/EventsTimelineTreeView.ts | filterEventLog":{"message":"Filter event log"},"panels/timeline/EventsTimelineTreeView.ts | startTime":{"message":"Start Time"},"panels/timeline/GPUTrackAppender.ts | gpu":{"message":"GPU"},"panels/timeline/InteractionsTrackAppender.ts | interactions":{"message":"Interactions"},"panels/timeline/LayoutShiftsTrackAppender.ts | layoutShifts":{"message":"Layout Shifts"},"panels/timeline/timeline-meta.ts | hideChromeFrameInLayersView":{"message":"Hide chrome frame in Layers view"},"panels/timeline/timeline-meta.ts | javascriptProfiler":{"message":"JavaScript Profiler"},"panels/timeline/timeline-meta.ts | loadProfile":{"message":"Load profile…"},"panels/timeline/timeline-meta.ts | nextFrame":{"message":"Next frame"},"panels/timeline/timeline-meta.ts | nextRecording":{"message":"Next recording"},"panels/timeline/timeline-meta.ts | performance":{"message":"Performance"},"panels/timeline/timeline-meta.ts | previousFrame":{"message":"Previous frame"},"panels/timeline/timeline-meta.ts | previousRecording":{"message":"Previous recording"},"panels/timeline/timeline-meta.ts | record":{"message":"Record"},"panels/timeline/timeline-meta.ts | saveProfile":{"message":"Save profile…"},"panels/timeline/timeline-meta.ts | showJavascriptProfiler":{"message":"Show JavaScript Profiler"},"panels/timeline/timeline-meta.ts | showPerformance":{"message":"Show Performance"},"panels/timeline/timeline-meta.ts | showRecentTimelineSessions":{"message":"Show recent timeline sessions"},"panels/timeline/timeline-meta.ts | startProfilingAndReloadPage":{"message":"Start profiling and reload page"},"panels/timeline/timeline-meta.ts | startStopRecording":{"message":"Start/stop recording"},"panels/timeline/timeline-meta.ts | stop":{"message":"Stop"},"panels/timeline/TimelineController.ts | cpuProfileForATargetIsNot":{"message":"CPU profile for a target is not available."},"panels/timeline/TimelineController.ts | tracingNotSupported":{"message":"Performance trace recording not supported for this type of target"},"panels/timeline/TimelineDetailsView.ts | bottomup":{"message":"Bottom-Up"},"panels/timeline/TimelineDetailsView.ts | callTree":{"message":"Call Tree"},"panels/timeline/TimelineDetailsView.ts | estimated":{"message":"estimated"},"panels/timeline/TimelineDetailsView.ts | eventLog":{"message":"Event Log"},"panels/timeline/TimelineDetailsView.ts | layers":{"message":"Layers"},"panels/timeline/TimelineDetailsView.ts | learnMore":{"message":"Learn more"},"panels/timeline/TimelineDetailsView.ts | paintProfiler":{"message":"Paint Profiler"},"panels/timeline/TimelineDetailsView.ts | rangeSS":{"message":"Range: {PH1} – {PH2}"},"panels/timeline/TimelineDetailsView.ts | summary":{"message":"Summary"},"panels/timeline/TimelineDetailsView.ts | totalBlockingTimeSmss":{"message":"Total blocking time: {PH1}ms{PH2}"},"panels/timeline/TimelineEventOverview.ts | cpu":{"message":"CPU"},"panels/timeline/TimelineEventOverview.ts | heap":{"message":"HEAP"},"panels/timeline/TimelineEventOverview.ts | net":{"message":"NET"},"panels/timeline/TimelineEventOverview.ts | sSDash":{"message":"{PH1} – {PH2}"},"panels/timeline/TimelineFlameChartDataProvider.ts | animation":{"message":"Animation"},"panels/timeline/TimelineFlameChartDataProvider.ts | droppedFrame":{"message":"Dropped Frame"},"panels/timeline/TimelineFlameChartDataProvider.ts | frame":{"message":"Frame"},"panels/timeline/TimelineFlameChartDataProvider.ts | frames":{"message":"Frames"},"panels/timeline/TimelineFlameChartDataProvider.ts | frameS":{"message":"Frame — {PH1}"},"panels/timeline/TimelineFlameChartDataProvider.ts | idleFrame":{"message":"Idle Frame"},"panels/timeline/TimelineFlameChartDataProvider.ts | longFrame":{"message":"Long frame"},"panels/timeline/TimelineFlameChartDataProvider.ts | main":{"message":"Main"},"panels/timeline/TimelineFlameChartDataProvider.ts | mainS":{"message":"Main — {PH1}"},"panels/timeline/TimelineFlameChartDataProvider.ts | onIgnoreList":{"message":"On ignore list"},"panels/timeline/TimelineFlameChartDataProvider.ts | partiallyPresentedFrame":{"message":"Partially Presented Frame"},"panels/timeline/TimelineFlameChartDataProvider.ts | raster":{"message":"Raster"},"panels/timeline/TimelineFlameChartDataProvider.ts | rasterizerThreadS":{"message":"Rasterizer Thread {PH1}"},"panels/timeline/TimelineFlameChartDataProvider.ts | sSelfS":{"message":"{PH1} (self {PH2})"},"panels/timeline/TimelineFlameChartDataProvider.ts | subframe":{"message":"Subframe"},"panels/timeline/TimelineFlameChartDataProvider.ts | thread":{"message":"Thread"},"panels/timeline/TimelineFlameChartNetworkDataProvider.ts | network":{"message":"Network"},"panels/timeline/TimelineFlameChartView.ts | sAtS":{"message":"{PH1} at {PH2}"},"panels/timeline/TimelineHistoryManager.ts | currentSessionSS":{"message":"Current Session: {PH1}. {PH2}"},"panels/timeline/TimelineHistoryManager.ts | moments":{"message":"moments"},"panels/timeline/TimelineHistoryManager.ts | noRecordings":{"message":"(no recordings)"},"panels/timeline/TimelineHistoryManager.ts | sAgo":{"message":"({PH1} ago)"},"panels/timeline/TimelineHistoryManager.ts | sD":{"message":"{PH1} #{PH2}"},"panels/timeline/TimelineHistoryManager.ts | selectTimelineSession":{"message":"Select Timeline Session"},"panels/timeline/TimelineHistoryManager.ts | sH":{"message":"{PH1} h"},"panels/timeline/TimelineHistoryManager.ts | sM":{"message":"{PH1} m"},"panels/timeline/TimelineLoader.ts | legacyTimelineFormatIsNot":{"message":"Legacy Timeline format is not supported."},"panels/timeline/TimelineLoader.ts | malformedCpuProfileFormat":{"message":"Malformed CPU profile format"},"panels/timeline/TimelineLoader.ts | malformedTimelineDataS":{"message":"Malformed timeline data: {PH1}"},"panels/timeline/TimelineLoader.ts | malformedTimelineDataUnknownJson":{"message":"Malformed timeline data: Unknown JSON format"},"panels/timeline/TimelineLoader.ts | malformedTimelineInputWrongJson":{"message":"Malformed timeline input, wrong JSON brackets balance"},"panels/timeline/TimelinePanel.ts | afterRecordingSelectAnAreaOf":{"message":"After recording, select an area of interest in the overview by dragging. Then, zoom and pan the timeline with the mousewheel or {PH1} keys. {PH2}"},"panels/timeline/TimelinePanel.ts | bufferUsage":{"message":"Buffer usage"},"panels/timeline/TimelinePanel.ts | capturesAdvancedPaint":{"message":"Captures advanced paint instrumentation, introduces significant performance overhead"},"panels/timeline/TimelinePanel.ts | captureScreenshots":{"message":"Capture screenshots"},"panels/timeline/TimelinePanel.ts | captureSettings":{"message":"Capture settings"},"panels/timeline/TimelinePanel.ts | clear":{"message":"Clear"},"panels/timeline/TimelinePanel.ts | clickTheRecordButtonSOrHitSTo":{"message":"Click the record button {PH1} or hit {PH2} to start a new recording."},"panels/timeline/TimelinePanel.ts | clickTheReloadButtonSOrHitSTo":{"message":"Click the reload button {PH1} or hit {PH2} to record the page load."},"panels/timeline/TimelinePanel.ts | close":{"message":"Close"},"panels/timeline/TimelinePanel.ts | couldNotStart":{"message":"Could not start recording, please try again later"},"panels/timeline/TimelinePanel.ts | cpu":{"message":"CPU:"},"panels/timeline/TimelinePanel.ts | CpuThrottlingIsEnabled":{"message":"- CPU throttling is enabled"},"panels/timeline/TimelinePanel.ts | description":{"message":"Description"},"panels/timeline/TimelinePanel.ts | disableJavascriptSamples":{"message":"Disable JavaScript samples"},"panels/timeline/TimelinePanel.ts | disablesJavascriptSampling":{"message":"Disables JavaScript sampling, reduces overhead when running against mobile devices"},"panels/timeline/TimelinePanel.ts | dropTimelineFileOrUrlHere":{"message":"Drop timeline file or URL here"},"panels/timeline/TimelinePanel.ts | enableAdvancedPaint":{"message":"Enable advanced paint instrumentation (slow)"},"panels/timeline/TimelinePanel.ts | failedToSaveTimelineSS":{"message":"Failed to save timeline: {PH1} ({PH2})"},"panels/timeline/TimelinePanel.ts | HardwareConcurrencyIsEnabled":{"message":"- Hardware concurrency override is enabled"},"panels/timeline/TimelinePanel.ts | initializingProfiler":{"message":"Initializing profiler…"},"panels/timeline/TimelinePanel.ts | JavascriptSamplingIsDisabled":{"message":"- JavaScript sampling is disabled"},"panels/timeline/TimelinePanel.ts | learnmore":{"message":"Learn more"},"panels/timeline/TimelinePanel.ts | loadingProfile":{"message":"Loading profile…"},"panels/timeline/TimelinePanel.ts | loadProfile":{"message":"Load profile…"},"panels/timeline/TimelinePanel.ts | memory":{"message":"Memory"},"panels/timeline/TimelinePanel.ts | network":{"message":"Network:"},"panels/timeline/TimelinePanel.ts | networkConditions":{"message":"Network conditions"},"panels/timeline/TimelinePanel.ts | NetworkThrottlingIsEnabled":{"message":"- Network throttling is enabled"},"panels/timeline/TimelinePanel.ts | processingProfile":{"message":"Processing profile…"},"panels/timeline/TimelinePanel.ts | profiling":{"message":"Profiling…"},"panels/timeline/TimelinePanel.ts | received":{"message":"Received"},"panels/timeline/TimelinePanel.ts | recordingFailed":{"message":"Recording failed"},"panels/timeline/TimelinePanel.ts | saveProfile":{"message":"Save profile…"},"panels/timeline/TimelinePanel.ts | screenshots":{"message":"Screenshots"},"panels/timeline/TimelinePanel.ts | showMemoryTimeline":{"message":"Show memory timeline"},"panels/timeline/TimelinePanel.ts | SignificantOverheadDueToPaint":{"message":"- Significant overhead due to paint instrumentation"},"panels/timeline/TimelinePanel.ts | ssec":{"message":"{PH1} sec"},"panels/timeline/TimelinePanel.ts | status":{"message":"Status"},"panels/timeline/TimelinePanel.ts | stop":{"message":"Stop"},"panels/timeline/TimelinePanel.ts | stoppingTimeline":{"message":"Stopping timeline…"},"panels/timeline/TimelinePanel.ts | time":{"message":"Time"},"panels/timeline/TimelinePanel.ts | wasd":{"message":"WASD"},"panels/timeline/TimelineTreeView.ts | activity":{"message":"Activity"},"panels/timeline/TimelineTreeView.ts | chromeExtensionsOverhead":{"message":"[Chrome extensions overhead]"},"panels/timeline/TimelineTreeView.ts | filter":{"message":"Filter"},"panels/timeline/TimelineTreeView.ts | filterBottomup":{"message":"Filter bottom-up"},"panels/timeline/TimelineTreeView.ts | filterCallTree":{"message":"Filter call tree"},"panels/timeline/TimelineTreeView.ts | fms":{"message":"{PH1} ms"},"panels/timeline/TimelineTreeView.ts | groupBy":{"message":"Group by"},"panels/timeline/TimelineTreeView.ts | groupByActivity":{"message":"Group by Activity"},"panels/timeline/TimelineTreeView.ts | groupByCategory":{"message":"Group by Category"},"panels/timeline/TimelineTreeView.ts | groupByDomain":{"message":"Group by Domain"},"panels/timeline/TimelineTreeView.ts | groupByFrame":{"message":"Group by Frame"},"panels/timeline/TimelineTreeView.ts | groupBySubdomain":{"message":"Group by Subdomain"},"panels/timeline/TimelineTreeView.ts | groupByUrl":{"message":"Group by URL"},"panels/timeline/TimelineTreeView.ts | heaviestStack":{"message":"Heaviest stack"},"panels/timeline/TimelineTreeView.ts | heaviestStackHidden":{"message":"Heaviest stack sidebar hidden"},"panels/timeline/TimelineTreeView.ts | heaviestStackShown":{"message":"Heaviest stack sidebar shown"},"panels/timeline/TimelineTreeView.ts | hideHeaviestStack":{"message":"Hide Heaviest stack"},"panels/timeline/TimelineTreeView.ts | javascript":{"message":"JavaScript"},"panels/timeline/TimelineTreeView.ts | noGrouping":{"message":"No Grouping"},"panels/timeline/TimelineTreeView.ts | notOptimizedS":{"message":"Not optimized: {PH1}"},"panels/timeline/TimelineTreeView.ts | page":{"message":"Page"},"panels/timeline/TimelineTreeView.ts | percentPlaceholder":{"message":"{PH1} %"},"panels/timeline/TimelineTreeView.ts | performance":{"message":"Performance"},"panels/timeline/TimelineTreeView.ts | selectItemForDetails":{"message":"Select item for details."},"panels/timeline/TimelineTreeView.ts | selfTime":{"message":"Self Time"},"panels/timeline/TimelineTreeView.ts | showHeaviestStack":{"message":"Show Heaviest stack"},"panels/timeline/TimelineTreeView.ts | timelineStack":{"message":"Timeline Stack"},"panels/timeline/TimelineTreeView.ts | totalTime":{"message":"Total Time"},"panels/timeline/TimelineTreeView.ts | unattributed":{"message":"[unattributed]"},"panels/timeline/TimelineTreeView.ts | vRuntime":{"message":"[V8 Runtime]"},"panels/timeline/TimelineUIUtils.ts | aggregatedTime":{"message":"Aggregated Time"},"panels/timeline/TimelineUIUtils.ts | allottedTime":{"message":"Allotted Time"},"panels/timeline/TimelineUIUtils.ts | animation":{"message":"Animation"},"panels/timeline/TimelineUIUtils.ts | animationFrameFired":{"message":"Animation Frame Fired"},"panels/timeline/TimelineUIUtils.ts | animationFrameRequested":{"message":"Animation Frame Requested"},"panels/timeline/TimelineUIUtils.ts | async":{"message":"Async"},"panels/timeline/TimelineUIUtils.ts | asyncTask":{"message":"Async Task"},"panels/timeline/TimelineUIUtils.ts | cachedWasmModule":{"message":"Cached Wasm Module"},"panels/timeline/TimelineUIUtils.ts | cacheModule":{"message":"Cache Module Code"},"panels/timeline/TimelineUIUtils.ts | cacheScript":{"message":"Cache Script Code"},"panels/timeline/TimelineUIUtils.ts | callbackFunction":{"message":"Callback Function"},"panels/timeline/TimelineUIUtils.ts | callbackId":{"message":"Callback ID"},"panels/timeline/TimelineUIUtils.ts | callStacks":{"message":"Call Stacks"},"panels/timeline/TimelineUIUtils.ts | cancelAnimationFrame":{"message":"Cancel Animation Frame"},"panels/timeline/TimelineUIUtils.ts | cancelIdleCallback":{"message":"Cancel Idle Callback"},"panels/timeline/TimelineUIUtils.ts | changedAttributeToSs":{"message":"(changed attribute to \"{PH1}\"{PH2})"},"panels/timeline/TimelineUIUtils.ts | changedClassToSs":{"message":"(changed class to \"{PH1}\"{PH2})"},"panels/timeline/TimelineUIUtils.ts | changedIdToSs":{"message":"(changed id to \"{PH1}\"{PH2})"},"panels/timeline/TimelineUIUtils.ts | changedPesudoToSs":{"message":"(changed pseudo to \"{PH1}\"{PH2})"},"panels/timeline/TimelineUIUtils.ts | changedSs":{"message":"(changed \"{PH1}\"{PH2})"},"panels/timeline/TimelineUIUtils.ts | collected":{"message":"Collected"},"panels/timeline/TimelineUIUtils.ts | commit":{"message":"Commit"},"panels/timeline/TimelineUIUtils.ts | compilationCacheSize":{"message":"Compilation cache size"},"panels/timeline/TimelineUIUtils.ts | compilationCacheStatus":{"message":"Compilation cache status"},"panels/timeline/TimelineUIUtils.ts | compile":{"message":"Compile"},"panels/timeline/TimelineUIUtils.ts | compileCode":{"message":"Compile Code"},"panels/timeline/TimelineUIUtils.ts | compiledWasmModule":{"message":"Compiled Wasm Module"},"panels/timeline/TimelineUIUtils.ts | compileModule":{"message":"Compile Module"},"panels/timeline/TimelineUIUtils.ts | compileScript":{"message":"Compile Script"},"panels/timeline/TimelineUIUtils.ts | compositeLayers":{"message":"Composite Layers"},"panels/timeline/TimelineUIUtils.ts | computeIntersections":{"message":"Compute Intersections"},"panels/timeline/TimelineUIUtils.ts | consoleTime":{"message":"Console Time"},"panels/timeline/TimelineUIUtils.ts | consumedCacheSize":{"message":"Consumed Cache Size"},"panels/timeline/TimelineUIUtils.ts | cpuTime":{"message":"CPU time"},"panels/timeline/TimelineUIUtils.ts | createWebsocket":{"message":"Create WebSocket"},"panels/timeline/TimelineUIUtils.ts | cumulativeLayoutShifts":{"message":"Cumulative Layout Shifts"},"panels/timeline/TimelineUIUtils.ts | cumulativeScore":{"message":"Cumulative Score"},"panels/timeline/TimelineUIUtils.ts | currentClusterId":{"message":"Current Cluster ID"},"panels/timeline/TimelineUIUtils.ts | currentClusterScore":{"message":"Current Cluster Score"},"panels/timeline/TimelineUIUtils.ts | decodedBody":{"message":"Decoded Body"},"panels/timeline/TimelineUIUtils.ts | decrypt":{"message":"Decrypt"},"panels/timeline/TimelineUIUtils.ts | decryptReply":{"message":"Decrypt Reply"},"panels/timeline/TimelineUIUtils.ts | deserializeCodeCache":{"message":"Deserialize Code Cache"},"panels/timeline/TimelineUIUtils.ts | destroyWebsocket":{"message":"Destroy WebSocket"},"panels/timeline/TimelineUIUtils.ts | details":{"message":"Details"},"panels/timeline/TimelineUIUtils.ts | digest":{"message":"Digest"},"panels/timeline/TimelineUIUtils.ts | digestReply":{"message":"Digest Reply"},"panels/timeline/TimelineUIUtils.ts | dimensions":{"message":"Dimensions"},"panels/timeline/TimelineUIUtils.ts | domcontentloadedEvent":{"message":"DOMContentLoaded Event"},"panels/timeline/TimelineUIUtils.ts | domGc":{"message":"DOM GC"},"panels/timeline/TimelineUIUtils.ts | drawFrame":{"message":"Draw Frame"},"panels/timeline/TimelineUIUtils.ts | duration":{"message":"Duration"},"panels/timeline/TimelineUIUtils.ts | eagerCompile":{"message":"Compiling all functions eagerly"},"panels/timeline/TimelineUIUtils.ts | elementsAffected":{"message":"Elements Affected"},"panels/timeline/TimelineUIUtils.ts | embedderCallback":{"message":"Embedder Callback"},"panels/timeline/TimelineUIUtils.ts | emptyPlaceholder":{"message":"{PH1}"},"panels/timeline/TimelineUIUtils.ts | emptyPlaceholderColon":{"message":": {PH1}"},"panels/timeline/TimelineUIUtils.ts | encodedData":{"message":"Encoded Data"},"panels/timeline/TimelineUIUtils.ts | encrypt":{"message":"Encrypt"},"panels/timeline/TimelineUIUtils.ts | encryptReply":{"message":"Encrypt Reply"},"panels/timeline/TimelineUIUtils.ts | evaluateModule":{"message":"Evaluate Module"},"panels/timeline/TimelineUIUtils.ts | evaluateScript":{"message":"Evaluate Script"},"panels/timeline/TimelineUIUtils.ts | event":{"message":"Event"},"panels/timeline/TimelineUIUtils.ts | eventTiming":{"message":"Event Timing"},"panels/timeline/TimelineUIUtils.ts | evolvedClsLink":{"message":"evolved"},"panels/timeline/TimelineUIUtils.ts | experience":{"message":"Experience"},"panels/timeline/TimelineUIUtils.ts | failedToLoadScriptFromCache":{"message":"failed to load script from cache"},"panels/timeline/TimelineUIUtils.ts | finishLoading":{"message":"Finish Loading"},"panels/timeline/TimelineUIUtils.ts | fireIdleCallback":{"message":"Fire Idle Callback"},"panels/timeline/TimelineUIUtils.ts | firstContentfulPaint":{"message":"First Contentful Paint"},"panels/timeline/TimelineUIUtils.ts | firstInvalidated":{"message":"First Invalidated"},"panels/timeline/TimelineUIUtils.ts | firstLayoutInvalidation":{"message":"First Layout Invalidation"},"panels/timeline/TimelineUIUtils.ts | firstPaint":{"message":"First Paint"},"panels/timeline/TimelineUIUtils.ts | forcedReflow":{"message":"Forced reflow"},"panels/timeline/TimelineUIUtils.ts | frame":{"message":"Frame"},"panels/timeline/TimelineUIUtils.ts | frameStart":{"message":"Frame Start"},"panels/timeline/TimelineUIUtils.ts | frameStartedLoading":{"message":"Frame Started Loading"},"panels/timeline/TimelineUIUtils.ts | frameStartMainThread":{"message":"Frame Start (main thread)"},"panels/timeline/TimelineUIUtils.ts | FromCache":{"message":" (from cache)"},"panels/timeline/TimelineUIUtils.ts | FromMemoryCache":{"message":" (from memory cache)"},"panels/timeline/TimelineUIUtils.ts | FromPush":{"message":" (from push)"},"panels/timeline/TimelineUIUtils.ts | FromServiceWorker":{"message":" (from service worker)"},"panels/timeline/TimelineUIUtils.ts | function":{"message":"Function"},"panels/timeline/TimelineUIUtils.ts | functionCall":{"message":"Function Call"},"panels/timeline/TimelineUIUtils.ts | gcEvent":{"message":"GC Event"},"panels/timeline/TimelineUIUtils.ts | gpu":{"message":"GPU"},"panels/timeline/TimelineUIUtils.ts | hadRecentInput":{"message":"Had recent input"},"panels/timeline/TimelineUIUtils.ts | handlerTookS":{"message":"Handler took {PH1}"},"panels/timeline/TimelineUIUtils.ts | hitTest":{"message":"Hit Test"},"panels/timeline/TimelineUIUtils.ts | idle":{"message":"Idle"},"panels/timeline/TimelineUIUtils.ts | idleCallbackExecutionExtended":{"message":"Idle callback execution extended beyond deadline by {PH1}"},"panels/timeline/TimelineUIUtils.ts | idleCallbackRequested":{"message":"Idle Callback Requested"},"panels/timeline/TimelineUIUtils.ts | imageDecode":{"message":"Image Decode"},"panels/timeline/TimelineUIUtils.ts | imageResize":{"message":"Image Resize"},"panels/timeline/TimelineUIUtils.ts | imageUrl":{"message":"Image URL"},"panels/timeline/TimelineUIUtils.ts | initiator":{"message":"Initiator"},"panels/timeline/TimelineUIUtils.ts | installTimer":{"message":"Install Timer"},"panels/timeline/TimelineUIUtils.ts | interactionID":{"message":"ID"},"panels/timeline/TimelineUIUtils.ts | invalidateLayout":{"message":"Invalidate Layout"},"panels/timeline/TimelineUIUtils.ts | invalidations":{"message":"Invalidations"},"panels/timeline/TimelineUIUtils.ts | invokedByTimeout":{"message":"Invoked by Timeout"},"panels/timeline/TimelineUIUtils.ts | jank":{"message":"jank"},"panels/timeline/TimelineUIUtils.ts | jsFrame":{"message":"JS Frame"},"panels/timeline/TimelineUIUtils.ts | jsIdleFrame":{"message":"JS Idle Frame"},"panels/timeline/TimelineUIUtils.ts | jsRoot":{"message":"JS Root"},"panels/timeline/TimelineUIUtils.ts | jsSystemFrame":{"message":"JS System Frame"},"panels/timeline/TimelineUIUtils.ts | largestContentfulPaint":{"message":"Largest Contentful Paint"},"panels/timeline/TimelineUIUtils.ts | layerize":{"message":"Layerize"},"panels/timeline/TimelineUIUtils.ts | layerRoot":{"message":"Layer Root"},"panels/timeline/TimelineUIUtils.ts | layerTree":{"message":"Layer tree"},"panels/timeline/TimelineUIUtils.ts | layout":{"message":"Layout"},"panels/timeline/TimelineUIUtils.ts | layoutForced":{"message":"Layout Forced"},"panels/timeline/TimelineUIUtils.ts | layoutInvalidations":{"message":"Layout Invalidations"},"panels/timeline/TimelineUIUtils.ts | layoutRoot":{"message":"Layout root"},"panels/timeline/TimelineUIUtils.ts | layoutShift":{"message":"Layout Shift"},"panels/timeline/TimelineUIUtils.ts | learnMore":{"message":"Learn more"},"panels/timeline/TimelineUIUtils.ts | loadFromCache":{"message":"load from cache"},"panels/timeline/TimelineUIUtils.ts | loading":{"message":"Loading"},"panels/timeline/TimelineUIUtils.ts | location":{"message":"Location"},"panels/timeline/TimelineUIUtils.ts | longInteractionINP":{"message":"Long interaction"},"panels/timeline/TimelineUIUtils.ts | longTask":{"message":"Long task"},"panels/timeline/TimelineUIUtils.ts | majorGc":{"message":"Major GC"},"panels/timeline/TimelineUIUtils.ts | message":{"message":"Message"},"panels/timeline/TimelineUIUtils.ts | mimeType":{"message":"Mime Type"},"panels/timeline/TimelineUIUtils.ts | mimeTypeCaps":{"message":"MIME Type"},"panels/timeline/TimelineUIUtils.ts | minorGc":{"message":"Minor GC"},"panels/timeline/TimelineUIUtils.ts | module":{"message":"Module"},"panels/timeline/TimelineUIUtils.ts | movedFrom":{"message":"Moved from"},"panels/timeline/TimelineUIUtils.ts | movedTo":{"message":"Moved to"},"panels/timeline/TimelineUIUtils.ts | networkRequest":{"message":"Network request"},"panels/timeline/TimelineUIUtils.ts | networkTransfer":{"message":"network transfer"},"panels/timeline/TimelineUIUtils.ts | no":{"message":"No"},"panels/timeline/TimelineUIUtils.ts | node":{"message":"Node:"},"panels/timeline/TimelineUIUtils.ts | nodes":{"message":"Nodes:"},"panels/timeline/TimelineUIUtils.ts | nodesThatNeedLayout":{"message":"Nodes That Need Layout"},"panels/timeline/TimelineUIUtils.ts | notOptimized":{"message":"Not optimized"},"panels/timeline/TimelineUIUtils.ts | onloadEvent":{"message":"Onload Event"},"panels/timeline/TimelineUIUtils.ts | optimizeCode":{"message":"Optimize Code"},"panels/timeline/TimelineUIUtils.ts | other":{"message":"Other"},"panels/timeline/TimelineUIUtils.ts | otherInvalidations":{"message":"Other Invalidations"},"panels/timeline/TimelineUIUtils.ts | ownerElement":{"message":"Owner Element"},"panels/timeline/TimelineUIUtils.ts | paint":{"message":"Paint"},"panels/timeline/TimelineUIUtils.ts | paintImage":{"message":"Paint Image"},"panels/timeline/TimelineUIUtils.ts | painting":{"message":"Painting"},"panels/timeline/TimelineUIUtils.ts | paintProfiler":{"message":"Paint Profiler"},"panels/timeline/TimelineUIUtils.ts | paintSetup":{"message":"Paint Setup"},"panels/timeline/TimelineUIUtils.ts | parse":{"message":"Parse"},"panels/timeline/TimelineUIUtils.ts | parseAndCompile":{"message":"Parse and Compile"},"panels/timeline/TimelineUIUtils.ts | parseHtml":{"message":"Parse HTML"},"panels/timeline/TimelineUIUtils.ts | parseStylesheet":{"message":"Parse Stylesheet"},"panels/timeline/TimelineUIUtils.ts | pendingFor":{"message":"Pending for"},"panels/timeline/TimelineUIUtils.ts | prePaint":{"message":"Pre-Paint"},"panels/timeline/TimelineUIUtils.ts | preview":{"message":"Preview"},"panels/timeline/TimelineUIUtils.ts | priority":{"message":"Priority"},"panels/timeline/TimelineUIUtils.ts | producedCacheSize":{"message":"Produced Cache Size"},"panels/timeline/TimelineUIUtils.ts | profilingOverhead":{"message":"Profiling Overhead"},"panels/timeline/TimelineUIUtils.ts | range":{"message":"Range"},"panels/timeline/TimelineUIUtils.ts | rasterizePaint":{"message":"Rasterize Paint"},"panels/timeline/TimelineUIUtils.ts | recalculateStyle":{"message":"Recalculate Style"},"panels/timeline/TimelineUIUtils.ts | recalculationForced":{"message":"Recalculation Forced"},"panels/timeline/TimelineUIUtils.ts | receiveData":{"message":"Receive Data"},"panels/timeline/TimelineUIUtils.ts | receiveResponse":{"message":"Receive Response"},"panels/timeline/TimelineUIUtils.ts | receiveWebsocketHandshake":{"message":"Receive WebSocket Handshake"},"panels/timeline/TimelineUIUtils.ts | recurringHandlerTookS":{"message":"Recurring handler took {PH1}"},"panels/timeline/TimelineUIUtils.ts | relatedNode":{"message":"Related Node"},"panels/timeline/TimelineUIUtils.ts | removeTimer":{"message":"Remove Timer"},"panels/timeline/TimelineUIUtils.ts | rendering":{"message":"Rendering"},"panels/timeline/TimelineUIUtils.ts | repeats":{"message":"Repeats"},"panels/timeline/TimelineUIUtils.ts | requestAnimationFrame":{"message":"Request Animation Frame"},"panels/timeline/TimelineUIUtils.ts | requestIdleCallback":{"message":"Request Idle Callback"},"panels/timeline/TimelineUIUtils.ts | requestMainThreadFrame":{"message":"Request Main Thread Frame"},"panels/timeline/TimelineUIUtils.ts | requestMethod":{"message":"Request Method"},"panels/timeline/TimelineUIUtils.ts | resource":{"message":"Resource"},"panels/timeline/TimelineUIUtils.ts | reveal":{"message":"Reveal"},"panels/timeline/TimelineUIUtils.ts | runMicrotasks":{"message":"Run Microtasks"},"panels/timeline/TimelineUIUtils.ts | sAndS":{"message":"{PH1} and {PH2}"},"panels/timeline/TimelineUIUtils.ts | sAndSOther":{"message":"{PH1}, {PH2}, and 1 other"},"panels/timeline/TimelineUIUtils.ts | sAtS":{"message":"{PH1} at {PH2}"},"panels/timeline/TimelineUIUtils.ts | sAtSParentheses":{"message":"{PH1} (at {PH2})"},"panels/timeline/TimelineUIUtils.ts | sBytes":{"message":"{n, plural, =1 {# Byte} other {# Bytes}}"},"panels/timeline/TimelineUIUtils.ts | scheduleStyleRecalculation":{"message":"Schedule Style Recalculation"},"panels/timeline/TimelineUIUtils.ts | sChildren":{"message":"{PH1} (children)"},"panels/timeline/TimelineUIUtils.ts | sCLSInformation":{"message":"{PH1} can result in poor user experiences. It has recently {PH2}."},"panels/timeline/TimelineUIUtils.ts | sCollected":{"message":"{PH1} collected"},"panels/timeline/TimelineUIUtils.ts | score":{"message":"Score"},"panels/timeline/TimelineUIUtils.ts | script":{"message":"Script"},"panels/timeline/TimelineUIUtils.ts | scripting":{"message":"Scripting"},"panels/timeline/TimelineUIUtils.ts | scriptLoadedFromCache":{"message":"script loaded from cache"},"panels/timeline/TimelineUIUtils.ts | scriptNotEligible":{"message":"script not eligible"},"panels/timeline/TimelineUIUtils.ts | scroll":{"message":"Scroll"},"panels/timeline/TimelineUIUtils.ts | selfTime":{"message":"Self Time"},"panels/timeline/TimelineUIUtils.ts | sendRequest":{"message":"Send Request"},"panels/timeline/TimelineUIUtils.ts | sendWebsocketHandshake":{"message":"Send WebSocket Handshake"},"panels/timeline/TimelineUIUtils.ts | sForS":{"message":"{PH1} for {PH2}"},"panels/timeline/TimelineUIUtils.ts | show":{"message":"Show"},"panels/timeline/TimelineUIUtils.ts | sign":{"message":"Sign"},"panels/timeline/TimelineUIUtils.ts | signReply":{"message":"Sign Reply"},"panels/timeline/TimelineUIUtils.ts | sIsALikelyPerformanceBottleneck":{"message":"{PH1} is a likely performance bottleneck."},"panels/timeline/TimelineUIUtils.ts | sIsLikelyPoorPageResponsiveness":{"message":"{PH1} is indicating poor page responsiveness."},"panels/timeline/TimelineUIUtils.ts | size":{"message":"Size"},"panels/timeline/TimelineUIUtils.ts | sLongFrameTimesAreAnIndicationOf":{"message":"{PH1}. Long frame times are an indication of {PH2}"},"panels/timeline/TimelineUIUtils.ts | sOfS":{"message":"{PH1} of {PH2}"},"panels/timeline/TimelineUIUtils.ts | sS":{"message":"{PH1}: {PH2}"},"panels/timeline/TimelineUIUtils.ts | sSAndSOthers":{"message":"{PH1}, {PH2}, and {PH3} others"},"panels/timeline/TimelineUIUtils.ts | sSCurlyBrackets":{"message":"({PH1}, {PH2})"},"panels/timeline/TimelineUIUtils.ts | sSDimensions":{"message":"{PH1} × {PH2}"},"panels/timeline/TimelineUIUtils.ts | sSDot":{"message":"{PH1}. {PH2}"},"panels/timeline/TimelineUIUtils.ts | sSelf":{"message":"{PH1} (self)"},"panels/timeline/TimelineUIUtils.ts | sSs":{"message":"{PH1} [{PH2}…{PH3}]"},"panels/timeline/TimelineUIUtils.ts | sSSquareBrackets":{"message":"{PH1} [{PH2}…]"},"panels/timeline/TimelineUIUtils.ts | SSSResourceLoading":{"message":" ({PH1} {PH2} + {PH3} resource loading)"},"panels/timeline/TimelineUIUtils.ts | stackTrace":{"message":"Stack Trace"},"panels/timeline/TimelineUIUtils.ts | stackTraceColon":{"message":"Stack trace:"},"panels/timeline/TimelineUIUtils.ts | state":{"message":"State"},"panels/timeline/TimelineUIUtils.ts | statusCode":{"message":"Status Code"},"panels/timeline/TimelineUIUtils.ts | sTookS":{"message":"{PH1} took {PH2}."},"panels/timeline/TimelineUIUtils.ts | streamed":{"message":"Streamed"},"panels/timeline/TimelineUIUtils.ts | streamingCompileTask":{"message":"Streaming Compile Task"},"panels/timeline/TimelineUIUtils.ts | streamingWasmResponse":{"message":"Streaming Wasm Response"},"panels/timeline/TimelineUIUtils.ts | styleInvalidations":{"message":"Style Invalidations"},"panels/timeline/TimelineUIUtils.ts | stylesheetUrl":{"message":"Stylesheet URL"},"panels/timeline/TimelineUIUtils.ts | system":{"message":"System"},"panels/timeline/TimelineUIUtils.ts | task":{"message":"Task"},"panels/timeline/TimelineUIUtils.ts | timeout":{"message":"Timeout"},"panels/timeline/TimelineUIUtils.ts | timerFired":{"message":"Timer Fired"},"panels/timeline/TimelineUIUtils.ts | timerId":{"message":"Timer ID"},"panels/timeline/TimelineUIUtils.ts | timerInstalled":{"message":"Timer Installed"},"panels/timeline/TimelineUIUtils.ts | timeSpentInRendering":{"message":"Time spent in rendering"},"panels/timeline/TimelineUIUtils.ts | timestamp":{"message":"Timestamp"},"panels/timeline/TimelineUIUtils.ts | totalTime":{"message":"Total Time"},"panels/timeline/TimelineUIUtils.ts | type":{"message":"Type"},"panels/timeline/TimelineUIUtils.ts | unknown":{"message":"unknown"},"panels/timeline/TimelineUIUtils.ts | unknownCause":{"message":"Unknown cause"},"panels/timeline/TimelineUIUtils.ts | UnknownNode":{"message":"[ unknown node ]"},"panels/timeline/TimelineUIUtils.ts | updateLayer":{"message":"Update Layer"},"panels/timeline/TimelineUIUtils.ts | updateLayerTree":{"message":"Update Layer Tree"},"panels/timeline/TimelineUIUtils.ts | url":{"message":"Url"},"panels/timeline/TimelineUIUtils.ts | userTiming":{"message":"User Timing"},"panels/timeline/TimelineUIUtils.ts | verify":{"message":"Verify"},"panels/timeline/TimelineUIUtils.ts | verifyReply":{"message":"Verify Reply"},"panels/timeline/TimelineUIUtils.ts | waitingForNetwork":{"message":"Waiting for Network"},"panels/timeline/TimelineUIUtils.ts | warning":{"message":"Warning"},"panels/timeline/TimelineUIUtils.ts | wasmModuleCacheHit":{"message":"Wasm Module Cache Hit"},"panels/timeline/TimelineUIUtils.ts | wasmModuleCacheInvalid":{"message":"Wasm Module Cache Invalid"},"panels/timeline/TimelineUIUtils.ts | websocketProtocol":{"message":"WebSocket Protocol"},"panels/timeline/TimelineUIUtils.ts | willSendRequest":{"message":"Will Send Request"},"panels/timeline/TimelineUIUtils.ts | xhrLoad":{"message":"XHR Load"},"panels/timeline/TimelineUIUtils.ts | xhrReadyStateChange":{"message":"XHR Ready State Change"},"panels/timeline/TimelineUIUtils.ts | yes":{"message":"Yes"},"panels/timeline/TimingsTrackAppender.ts | timings":{"message":"Timings"},"panels/timeline/UIDevtoolsUtils.ts | drawFrame":{"message":"Draw Frame"},"panels/timeline/UIDevtoolsUtils.ts | drawing":{"message":"Drawing"},"panels/timeline/UIDevtoolsUtils.ts | frameStart":{"message":"Frame Start"},"panels/timeline/UIDevtoolsUtils.ts | idle":{"message":"Idle"},"panels/timeline/UIDevtoolsUtils.ts | layout":{"message":"Layout"},"panels/timeline/UIDevtoolsUtils.ts | painting":{"message":"Painting"},"panels/timeline/UIDevtoolsUtils.ts | rasterizing":{"message":"Rasterizing"},"panels/timeline/UIDevtoolsUtils.ts | system":{"message":"System"},"panels/web_audio/AudioContextContentBuilder.ts | callbackBufferSize":{"message":"Callback Buffer Size"},"panels/web_audio/AudioContextContentBuilder.ts | callbackInterval":{"message":"Callback Interval"},"panels/web_audio/AudioContextContentBuilder.ts | currentTime":{"message":"Current Time"},"panels/web_audio/AudioContextContentBuilder.ts | maxOutputChannels":{"message":"Max Output Channels"},"panels/web_audio/AudioContextContentBuilder.ts | renderCapacity":{"message":"Render Capacity"},"panels/web_audio/AudioContextContentBuilder.ts | sampleRate":{"message":"Sample Rate"},"panels/web_audio/AudioContextContentBuilder.ts | state":{"message":"State"},"panels/web_audio/AudioContextSelector.ts | audioContextS":{"message":"Audio context: {PH1}"},"panels/web_audio/AudioContextSelector.ts | noRecordings":{"message":"(no recordings)"},"panels/web_audio/web_audio-meta.ts | audio":{"message":"audio"},"panels/web_audio/web_audio-meta.ts | showWebaudio":{"message":"Show WebAudio"},"panels/web_audio/web_audio-meta.ts | webaudio":{"message":"WebAudio"},"panels/web_audio/WebAudioView.ts | openAPageThatUsesWebAudioApiTo":{"message":"Open a page that uses Web Audio API to start monitoring."},"panels/webauthn/webauthn-meta.ts | showWebauthn":{"message":"Show WebAuthn"},"panels/webauthn/webauthn-meta.ts | webauthn":{"message":"WebAuthn"},"panels/webauthn/WebauthnPane.ts | actions":{"message":"Actions"},"panels/webauthn/WebauthnPane.ts | active":{"message":"Active"},"panels/webauthn/WebauthnPane.ts | add":{"message":"Add"},"panels/webauthn/WebauthnPane.ts | addAuthenticator":{"message":"Add authenticator"},"panels/webauthn/WebauthnPane.ts | authenticatorS":{"message":"Authenticator {PH1}"},"panels/webauthn/WebauthnPane.ts | credentials":{"message":"Credentials"},"panels/webauthn/WebauthnPane.ts | editName":{"message":"Edit name"},"panels/webauthn/WebauthnPane.ts | enableVirtualAuthenticator":{"message":"Enable virtual authenticator environment"},"panels/webauthn/WebauthnPane.ts | export":{"message":"Export"},"panels/webauthn/WebauthnPane.ts | id":{"message":"ID"},"panels/webauthn/WebauthnPane.ts | isResident":{"message":"Is Resident"},"panels/webauthn/WebauthnPane.ts | learnMore":{"message":"Learn more"},"panels/webauthn/WebauthnPane.ts | newAuthenticator":{"message":"New authenticator"},"panels/webauthn/WebauthnPane.ts | no":{"message":"No"},"panels/webauthn/WebauthnPane.ts | noCredentialsTryCallingSFromYour":{"message":"No credentials. Try calling {PH1} from your website."},"panels/webauthn/WebauthnPane.ts | privateKeypem":{"message":"Private key.pem"},"panels/webauthn/WebauthnPane.ts | protocol":{"message":"Protocol"},"panels/webauthn/WebauthnPane.ts | remove":{"message":"Remove"},"panels/webauthn/WebauthnPane.ts | rpId":{"message":"RP ID"},"panels/webauthn/WebauthnPane.ts | saveName":{"message":"Save name"},"panels/webauthn/WebauthnPane.ts | setSAsTheActiveAuthenticator":{"message":"Set {PH1} as the active authenticator"},"panels/webauthn/WebauthnPane.ts | signCount":{"message":"Signature Count"},"panels/webauthn/WebauthnPane.ts | supportsLargeBlob":{"message":"Supports large blob"},"panels/webauthn/WebauthnPane.ts | supportsResidentKeys":{"message":"Supports resident keys"},"panels/webauthn/WebauthnPane.ts | supportsUserVerification":{"message":"Supports user verification"},"panels/webauthn/WebauthnPane.ts | transport":{"message":"Transport"},"panels/webauthn/WebauthnPane.ts | userHandle":{"message":"User Handle"},"panels/webauthn/WebauthnPane.ts | useWebauthnForPhishingresistant":{"message":"Use WebAuthn for phishing-resistant authentication"},"panels/webauthn/WebauthnPane.ts | uuid":{"message":"UUID"},"panels/webauthn/WebauthnPane.ts | yes":{"message":"Yes"},"ui/components/data_grid/DataGrid.ts | enterToSort":{"message":"Column sort state: {PH1}. Press enter to apply sorting filter"},"ui/components/data_grid/DataGrid.ts | headerOptions":{"message":"Header Options"},"ui/components/data_grid/DataGrid.ts | resetColumns":{"message":"Reset Columns"},"ui/components/data_grid/DataGrid.ts | sortAsc":{"message":"ascending"},"ui/components/data_grid/DataGrid.ts | sortBy":{"message":"Sort By"},"ui/components/data_grid/DataGrid.ts | sortDesc":{"message":"descending"},"ui/components/data_grid/DataGrid.ts | sortNone":{"message":"none"},"ui/components/data_grid/DataGridController.ts | sortInAscendingOrder":{"message":"{PH1} sorted in ascending order"},"ui/components/data_grid/DataGridController.ts | sortInDescendingOrder":{"message":"{PH1} sorted in descending order"},"ui/components/data_grid/DataGridController.ts | sortingCanceled":{"message":"{PH1} sorting canceled"},"ui/components/dialogs/ShortcutDialog.ts | close":{"message":"Close"},"ui/components/dialogs/ShortcutDialog.ts | dialogTitle":{"message":"Keyboard shortcuts"},"ui/components/dialogs/ShortcutDialog.ts | showShortcutTitle":{"message":"Show shortcuts"},"ui/components/diff_view/DiffView.ts | additions":{"message":"Addition:"},"ui/components/diff_view/DiffView.ts | changesDiffViewer":{"message":"Changes diff viewer"},"ui/components/diff_view/DiffView.ts | deletions":{"message":"Deletion:"},"ui/components/diff_view/DiffView.ts | SkippingDMatchingLines":{"message":"( … Skipping {PH1} matching lines … )"},"ui/components/issue_counter/IssueCounter.ts | breakingChanges":{"message":"{issueCount, plural, =1 {# breaking change} other {# breaking changes}}"},"ui/components/issue_counter/IssueCounter.ts | pageErrors":{"message":"{issueCount, plural, =1 {# page error} other {# page errors}}"},"ui/components/issue_counter/IssueCounter.ts | possibleImprovements":{"message":"{issueCount, plural, =1 {# possible improvement} other {# possible improvements}}"},"ui/components/issue_counter/IssueLinkIcon.ts | clickToShowIssue":{"message":"Click to show issue in the issues tab"},"ui/components/issue_counter/IssueLinkIcon.ts | clickToShowIssueWithTitle":{"message":"Click to open the issue tab and show issue: {title}"},"ui/components/issue_counter/IssueLinkIcon.ts | issueUnavailable":{"message":"Issue unavailable at this time"},"ui/components/linear_memory_inspector/linear_memory_inspector-meta.ts | memoryInspector":{"message":"Memory Inspector"},"ui/components/linear_memory_inspector/linear_memory_inspector-meta.ts | showMemoryInspector":{"message":"Show Memory Inspector"},"ui/components/linear_memory_inspector/LinearMemoryHighlightChipList.ts | deleteHighlight":{"message":"Stop highlighting this memory"},"ui/components/linear_memory_inspector/LinearMemoryHighlightChipList.ts | jumpToAddress":{"message":"Jump to this memory"},"ui/components/linear_memory_inspector/LinearMemoryInspector.ts | addressHasToBeANumberBetweenSAnd":{"message":"Address has to be a number between {PH1} and {PH2}"},"ui/components/linear_memory_inspector/LinearMemoryInspectorController.ts | couldNotOpenLinearMemory":{"message":"Could not open linear memory inspector: failed locating buffer."},"ui/components/linear_memory_inspector/LinearMemoryInspectorPane.ts | noOpenInspections":{"message":"No open inspections"},"ui/components/linear_memory_inspector/LinearMemoryNavigator.ts | enterAddress":{"message":"Enter address"},"ui/components/linear_memory_inspector/LinearMemoryNavigator.ts | goBackInAddressHistory":{"message":"Go back in address history"},"ui/components/linear_memory_inspector/LinearMemoryNavigator.ts | goForwardInAddressHistory":{"message":"Go forward in address history"},"ui/components/linear_memory_inspector/LinearMemoryNavigator.ts | nextPage":{"message":"Next page"},"ui/components/linear_memory_inspector/LinearMemoryNavigator.ts | previousPage":{"message":"Previous page"},"ui/components/linear_memory_inspector/LinearMemoryNavigator.ts | refresh":{"message":"Refresh"},"ui/components/linear_memory_inspector/LinearMemoryValueInterpreter.ts | changeEndianness":{"message":"Change Endianness"},"ui/components/linear_memory_inspector/LinearMemoryValueInterpreter.ts | toggleValueTypeSettings":{"message":"Toggle value type settings"},"ui/components/linear_memory_inspector/ValueInterpreterDisplay.ts | addressOutOfRange":{"message":"Address out of memory range"},"ui/components/linear_memory_inspector/ValueInterpreterDisplay.ts | changeValueTypeMode":{"message":"Change mode"},"ui/components/linear_memory_inspector/ValueInterpreterDisplay.ts | jumpToPointer":{"message":"Jump to address"},"ui/components/linear_memory_inspector/ValueInterpreterDisplay.ts | signedValue":{"message":"Signed value"},"ui/components/linear_memory_inspector/ValueInterpreterDisplay.ts | unsignedValue":{"message":"Unsigned value"},"ui/components/linear_memory_inspector/ValueInterpreterDisplayUtils.ts | notApplicable":{"message":"N/A"},"ui/components/linear_memory_inspector/ValueInterpreterSettings.ts | otherGroup":{"message":"Other"},"ui/components/panel_feedback/FeedbackButton.ts | feedback":{"message":"Feedback"},"ui/components/panel_feedback/PanelFeedback.ts | previewFeature":{"message":"Preview feature"},"ui/components/panel_feedback/PanelFeedback.ts | previewText":{"message":"Our team is actively working on this feature and we would love to know what you think."},"ui/components/panel_feedback/PanelFeedback.ts | previewTextFeedbackLink":{"message":"Send us your feedback."},"ui/components/panel_feedback/PanelFeedback.ts | videoAndDocumentation":{"message":"Video and documentation"},"ui/components/panel_feedback/PreviewToggle.ts | learnMoreLink":{"message":"Learn More"},"ui/components/panel_feedback/PreviewToggle.ts | previewTextFeedbackLink":{"message":"Send us your feedback."},"ui/components/panel_feedback/PreviewToggle.ts | shortFeedbackLink":{"message":"Send feedback"},"ui/components/request_link_icon/RequestLinkIcon.ts | clickToShowRequestInTheNetwork":{"message":"Click to open the network panel and show request for URL: {url}"},"ui/components/request_link_icon/RequestLinkIcon.ts | requestUnavailableInTheNetwork":{"message":"Request unavailable in the network panel, try reloading the inspected page"},"ui/components/request_link_icon/RequestLinkIcon.ts | shortenedURL":{"message":"Shortened URL"},"ui/components/survey_link/SurveyLink.ts | anErrorOccurredWithTheSurvey":{"message":"An error occurred with the survey"},"ui/components/survey_link/SurveyLink.ts | openingSurvey":{"message":"Opening survey …"},"ui/components/survey_link/SurveyLink.ts | thankYouForYourFeedback":{"message":"Thank you for your feedback"},"ui/components/text_editor/config.ts | codeEditor":{"message":"Code editor"},"ui/components/text_editor/config.ts | sSuggestionSOfS":{"message":"{PH1}, suggestion {PH2} of {PH3}"},"ui/legacy/ActionRegistration.ts | background_services":{"message":"Background Services"},"ui/legacy/ActionRegistration.ts | console":{"message":"Console"},"ui/legacy/ActionRegistration.ts | debugger":{"message":"Debugger"},"ui/legacy/ActionRegistration.ts | drawer":{"message":"Drawer"},"ui/legacy/ActionRegistration.ts | elements":{"message":"Elements"},"ui/legacy/ActionRegistration.ts | global":{"message":"Global"},"ui/legacy/ActionRegistration.ts | help":{"message":"Help"},"ui/legacy/ActionRegistration.ts | javascript_profiler":{"message":"JavaScript Profiler"},"ui/legacy/ActionRegistration.ts | layers":{"message":"Layers"},"ui/legacy/ActionRegistration.ts | memory":{"message":"Memory"},"ui/legacy/ActionRegistration.ts | mobile":{"message":"Mobile"},"ui/legacy/ActionRegistration.ts | navigation":{"message":"Navigation"},"ui/legacy/ActionRegistration.ts | network":{"message":"Network"},"ui/legacy/ActionRegistration.ts | performance":{"message":"Performance"},"ui/legacy/ActionRegistration.ts | rendering":{"message":"Rendering"},"ui/legacy/ActionRegistration.ts | resources":{"message":"Resources"},"ui/legacy/ActionRegistration.ts | screenshot":{"message":"Screenshot"},"ui/legacy/ActionRegistration.ts | settings":{"message":"Settings"},"ui/legacy/ActionRegistration.ts | sources":{"message":"Sources"},"ui/legacy/components/color_picker/ContrastDetails.ts | aa":{"message":"AA"},"ui/legacy/components/color_picker/ContrastDetails.ts | aaa":{"message":"AAA"},"ui/legacy/components/color_picker/ContrastDetails.ts | apca":{"message":"APCA"},"ui/legacy/components/color_picker/ContrastDetails.ts | contrastRatio":{"message":"Contrast ratio"},"ui/legacy/components/color_picker/ContrastDetails.ts | noContrastInformationAvailable":{"message":"No contrast information available"},"ui/legacy/components/color_picker/ContrastDetails.ts | pickBackgroundColor":{"message":"Pick background color"},"ui/legacy/components/color_picker/ContrastDetails.ts | placeholderWithColon":{"message":": {PH1}"},"ui/legacy/components/color_picker/ContrastDetails.ts | showLess":{"message":"Show less"},"ui/legacy/components/color_picker/ContrastDetails.ts | showMore":{"message":"Show more"},"ui/legacy/components/color_picker/ContrastDetails.ts | toggleBackgroundColorPicker":{"message":"Toggle background color picker"},"ui/legacy/components/color_picker/ContrastDetails.ts | useSuggestedColorStoFixLow":{"message":"Use suggested color {PH1}to fix low contrast"},"ui/legacy/components/color_picker/FormatPickerContextMenu.ts | colorClippedTooltipText":{"message":"This color was clipped to match the format's gamut. The actual result was {PH1}"},"ui/legacy/components/color_picker/Spectrum.ts | addToPalette":{"message":"Add to palette"},"ui/legacy/components/color_picker/Spectrum.ts | changeAlpha":{"message":"Change alpha"},"ui/legacy/components/color_picker/Spectrum.ts | changeColorFormat":{"message":"Change color format"},"ui/legacy/components/color_picker/Spectrum.ts | changeHue":{"message":"Change hue"},"ui/legacy/components/color_picker/Spectrum.ts | clearPalette":{"message":"Clear palette"},"ui/legacy/components/color_picker/Spectrum.ts | colorPalettes":{"message":"Color Palettes"},"ui/legacy/components/color_picker/Spectrum.ts | colorS":{"message":"Color {PH1}"},"ui/legacy/components/color_picker/Spectrum.ts | copyColorToClipboard":{"message":"Copy color to clipboard"},"ui/legacy/components/color_picker/Spectrum.ts | hex":{"message":"HEX"},"ui/legacy/components/color_picker/Spectrum.ts | longclickOrLongpressSpaceToShow":{"message":"Long-click or long-press space to show alternate shades of {PH1}"},"ui/legacy/components/color_picker/Spectrum.ts | pressArrowKeysMessage":{"message":"Press arrow keys with or without modifiers to move swatch position. Arrow key with Shift key moves position largely, with Ctrl key it is less and with Alt key it is even less"},"ui/legacy/components/color_picker/Spectrum.ts | previewPalettes":{"message":"Preview palettes"},"ui/legacy/components/color_picker/Spectrum.ts | removeAllToTheRight":{"message":"Remove all to the right"},"ui/legacy/components/color_picker/Spectrum.ts | removeColor":{"message":"Remove color"},"ui/legacy/components/color_picker/Spectrum.ts | returnToColorPicker":{"message":"Return to color picker"},"ui/legacy/components/color_picker/Spectrum.ts | sInS":{"message":"{PH1} in {PH2}"},"ui/legacy/components/color_picker/Spectrum.ts | toggleColorPicker":{"message":"Eye dropper [{PH1}]"},"ui/legacy/components/cookie_table/CookiesTable.ts | cookies":{"message":"Cookies"},"ui/legacy/components/cookie_table/CookiesTable.ts | editableCookies":{"message":"Editable Cookies"},"ui/legacy/components/cookie_table/CookiesTable.ts | na":{"message":"N/A"},"ui/legacy/components/cookie_table/CookiesTable.ts | name":{"message":"Name"},"ui/legacy/components/cookie_table/CookiesTable.ts | opaquePartitionKey":{"message":"(opaque)"},"ui/legacy/components/cookie_table/CookiesTable.ts | session":{"message":"Session"},"ui/legacy/components/cookie_table/CookiesTable.ts | showIssueAssociatedWithThis":{"message":"Show issue associated with this cookie"},"ui/legacy/components/cookie_table/CookiesTable.ts | showRequestsWithThisCookie":{"message":"Show Requests With This Cookie"},"ui/legacy/components/cookie_table/CookiesTable.ts | size":{"message":"Size"},"ui/legacy/components/cookie_table/CookiesTable.ts | sourcePortTooltip":{"message":"Shows the source port (range 1-65535) the cookie was set on. If the port is unknown, this shows -1."},"ui/legacy/components/cookie_table/CookiesTable.ts | sourceSchemeTooltip":{"message":"Shows the source scheme (Secure, NonSecure) the cookie was set on. If the scheme is unknown, this shows Unset."},"ui/legacy/components/cookie_table/CookiesTable.ts | timeAfter":{"message":"after {date}"},"ui/legacy/components/cookie_table/CookiesTable.ts | timeAfterTooltip":{"message":"The expiration timestamp is {seconds}, which corresponds to a date after {date}"},"ui/legacy/components/cookie_table/CookiesTable.ts | value":{"message":"Value"},"ui/legacy/components/data_grid/DataGrid.ts | addNew":{"message":"Add new"},"ui/legacy/components/data_grid/DataGrid.ts | checked":{"message":"checked"},"ui/legacy/components/data_grid/DataGrid.ts | collapsed":{"message":"collapsed"},"ui/legacy/components/data_grid/DataGrid.ts | delete":{"message":"Delete"},"ui/legacy/components/data_grid/DataGrid.ts | editS":{"message":"Edit \"{PH1}\""},"ui/legacy/components/data_grid/DataGrid.ts | emptyRowCreated":{"message":"An empty table row has been created. You may double click or use context menu to edit."},"ui/legacy/components/data_grid/DataGrid.ts | expanded":{"message":"expanded"},"ui/legacy/components/data_grid/DataGrid.ts | headerOptions":{"message":"Header Options"},"ui/legacy/components/data_grid/DataGrid.ts | levelS":{"message":"level {PH1}"},"ui/legacy/components/data_grid/DataGrid.ts | refresh":{"message":"Refresh"},"ui/legacy/components/data_grid/DataGrid.ts | resetColumns":{"message":"Reset Columns"},"ui/legacy/components/data_grid/DataGrid.ts | rowsS":{"message":"Rows: {PH1}"},"ui/legacy/components/data_grid/DataGrid.ts | sortByString":{"message":"Sort By"},"ui/legacy/components/data_grid/DataGrid.ts | sRowS":{"message":"{PH1} Row {PH2}"},"ui/legacy/components/data_grid/DataGrid.ts | sSUseTheUpAndDownArrowKeysTo":{"message":"{PH1} {PH2}, use the up and down arrow keys to navigate and interact with the rows of the table; Use browse mode to read cell by cell."},"ui/legacy/components/data_grid/ShowMoreDataGridNode.ts | showAllD":{"message":"Show all {PH1}"},"ui/legacy/components/data_grid/ShowMoreDataGridNode.ts | showDAfter":{"message":"Show {PH1} after"},"ui/legacy/components/data_grid/ShowMoreDataGridNode.ts | showDBefore":{"message":"Show {PH1} before"},"ui/legacy/components/data_grid/ViewportDataGrid.ts | collapsed":{"message":"collapsed"},"ui/legacy/components/inline_editor/ColorSwatch.ts | shiftclickToChangeColorFormat":{"message":"Shift-click to change color format"},"ui/legacy/components/inline_editor/CSSShadowEditor.ts | blur":{"message":"Blur"},"ui/legacy/components/inline_editor/CSSShadowEditor.ts | spread":{"message":"Spread"},"ui/legacy/components/inline_editor/CSSShadowEditor.ts | type":{"message":"Type"},"ui/legacy/components/inline_editor/CSSShadowEditor.ts | xOffset":{"message":"X offset"},"ui/legacy/components/inline_editor/CSSShadowEditor.ts | yOffset":{"message":"Y offset"},"ui/legacy/components/inline_editor/FontEditor.ts | cssProperties":{"message":"CSS Properties"},"ui/legacy/components/inline_editor/FontEditor.ts | deleteS":{"message":"Delete {PH1}"},"ui/legacy/components/inline_editor/FontEditor.ts | fallbackS":{"message":"Fallback {PH1}"},"ui/legacy/components/inline_editor/FontEditor.ts | fontFamily":{"message":"Font Family"},"ui/legacy/components/inline_editor/FontEditor.ts | fontSelectorDeletedAtIndexS":{"message":"Font Selector deleted at index: {PH1}"},"ui/legacy/components/inline_editor/FontEditor.ts | fontSize":{"message":"Font Size"},"ui/legacy/components/inline_editor/FontEditor.ts | fontWeight":{"message":"Font Weight"},"ui/legacy/components/inline_editor/FontEditor.ts | lineHeight":{"message":"Line Height"},"ui/legacy/components/inline_editor/FontEditor.ts | PleaseEnterAValidValueForSText":{"message":"* Please enter a valid value for {PH1} text input"},"ui/legacy/components/inline_editor/FontEditor.ts | selectorInputMode":{"message":"Selector Input Mode"},"ui/legacy/components/inline_editor/FontEditor.ts | sKeyValueSelector":{"message":"{PH1} Key Value Selector"},"ui/legacy/components/inline_editor/FontEditor.ts | sliderInputMode":{"message":"Slider Input Mode"},"ui/legacy/components/inline_editor/FontEditor.ts | spacing":{"message":"Spacing"},"ui/legacy/components/inline_editor/FontEditor.ts | sSliderInput":{"message":"{PH1} Slider Input"},"ui/legacy/components/inline_editor/FontEditor.ts | sTextInput":{"message":"{PH1} Text Input"},"ui/legacy/components/inline_editor/FontEditor.ts | sToggleInputType":{"message":"{PH1} toggle input type"},"ui/legacy/components/inline_editor/FontEditor.ts | sUnitInput":{"message":"{PH1} Unit Input"},"ui/legacy/components/inline_editor/FontEditor.ts | thereIsNoValueToDeleteAtIndexS":{"message":"There is no value to delete at index: {PH1}"},"ui/legacy/components/inline_editor/FontEditor.ts | thisPropertyIsSetToContainUnits":{"message":"This property is set to contain units but does not have a defined corresponding unitsArray: {PH1}"},"ui/legacy/components/inline_editor/FontEditor.ts | units":{"message":"Units"},"ui/legacy/components/inline_editor/LinkSwatch.ts | sIsNotDefined":{"message":"{PH1} is not defined"},"ui/legacy/components/object_ui/CustomPreviewComponent.ts | showAsJavascriptObject":{"message":"Show as JavaScript object"},"ui/legacy/components/object_ui/ObjectPropertiesSection.ts | collapseChildren":{"message":"Collapse children"},"ui/legacy/components/object_ui/ObjectPropertiesSection.ts | copy":{"message":"Copy"},"ui/legacy/components/object_ui/ObjectPropertiesSection.ts | copyPropertyPath":{"message":"Copy property path"},"ui/legacy/components/object_ui/ObjectPropertiesSection.ts | copyValue":{"message":"Copy value"},"ui/legacy/components/object_ui/ObjectPropertiesSection.ts | dots":{"message":"(...)"},"ui/legacy/components/object_ui/ObjectPropertiesSection.ts | exceptionS":{"message":"[Exception: {PH1}]"},"ui/legacy/components/object_ui/ObjectPropertiesSection.ts | expandRecursively":{"message":"Expand recursively"},"ui/legacy/components/object_ui/ObjectPropertiesSection.ts | invokePropertyGetter":{"message":"Invoke property getter"},"ui/legacy/components/object_ui/ObjectPropertiesSection.ts | longTextWasTruncatedS":{"message":"long text was truncated ({PH1})"},"ui/legacy/components/object_ui/ObjectPropertiesSection.ts | noProperties":{"message":"No properties"},"ui/legacy/components/object_ui/ObjectPropertiesSection.ts | revealInMemoryInpector":{"message":"Reveal in Memory Inspector panel"},"ui/legacy/components/object_ui/ObjectPropertiesSection.ts | showAllD":{"message":"Show all {PH1}"},"ui/legacy/components/object_ui/ObjectPropertiesSection.ts | showMoreS":{"message":"Show more ({PH1})"},"ui/legacy/components/object_ui/ObjectPropertiesSection.ts | stringIsTooLargeToEdit":{"message":""},"ui/legacy/components/object_ui/ObjectPropertiesSection.ts | unknown":{"message":"unknown"},"ui/legacy/components/object_ui/ObjectPropertiesSection.ts | valueNotAccessibleToTheDebugger":{"message":"Value is not accessible to the debugger"},"ui/legacy/components/object_ui/ObjectPropertiesSection.ts | valueUnavailable":{"message":""},"ui/legacy/components/object_ui/RemoteObjectPreviewFormatter.ts | empty":{"message":"empty"},"ui/legacy/components/object_ui/RemoteObjectPreviewFormatter.ts | emptyD":{"message":"empty × {PH1}"},"ui/legacy/components/object_ui/RemoteObjectPreviewFormatter.ts | thePropertyIsComputedWithAGetter":{"message":"The property is computed with a getter"},"ui/legacy/components/perf_ui/FilmStripView.ts | doubleclickToZoomImageClickTo":{"message":"Doubleclick to zoom image. Click to view preceding requests."},"ui/legacy/components/perf_ui/FilmStripView.ts | nextFrame":{"message":"Next frame"},"ui/legacy/components/perf_ui/FilmStripView.ts | previousFrame":{"message":"Previous frame"},"ui/legacy/components/perf_ui/FilmStripView.ts | screenshot":{"message":"Screenshot"},"ui/legacy/components/perf_ui/FilmStripView.ts | screenshotForSSelectToView":{"message":"Screenshot for {PH1} - select to view preceding requests."},"ui/legacy/components/perf_ui/FlameChart.ts | flameChart":{"message":"Flame Chart"},"ui/legacy/components/perf_ui/FlameChart.ts | sCollapsed":{"message":"{PH1} collapsed"},"ui/legacy/components/perf_ui/FlameChart.ts | sExpanded":{"message":"{PH1} expanded"},"ui/legacy/components/perf_ui/FlameChart.ts | sHovered":{"message":"{PH1} hovered"},"ui/legacy/components/perf_ui/FlameChart.ts | sSelected":{"message":"{PH1} selected"},"ui/legacy/components/perf_ui/NetworkPriorities.ts | high":{"message":"High"},"ui/legacy/components/perf_ui/NetworkPriorities.ts | highest":{"message":"Highest"},"ui/legacy/components/perf_ui/NetworkPriorities.ts | low":{"message":"Low"},"ui/legacy/components/perf_ui/NetworkPriorities.ts | lowest":{"message":"Lowest"},"ui/legacy/components/perf_ui/NetworkPriorities.ts | medium":{"message":"Medium"},"ui/legacy/components/perf_ui/OverviewGrid.ts | leftResizer":{"message":"Left Resizer"},"ui/legacy/components/perf_ui/OverviewGrid.ts | overviewGridWindow":{"message":"Overview grid window"},"ui/legacy/components/perf_ui/OverviewGrid.ts | rightResizer":{"message":"Right Resizer"},"ui/legacy/components/perf_ui/perf_ui-meta.ts | collectGarbage":{"message":"Collect garbage"},"ui/legacy/components/perf_ui/perf_ui-meta.ts | flamechartMouseWheelAction":{"message":"Flamechart mouse wheel action:"},"ui/legacy/components/perf_ui/perf_ui-meta.ts | hideLiveMemoryAllocation":{"message":"Hide live memory allocation annotations"},"ui/legacy/components/perf_ui/perf_ui-meta.ts | liveMemoryAllocationAnnotations":{"message":"Live memory allocation annotations"},"ui/legacy/components/perf_ui/perf_ui-meta.ts | scroll":{"message":"Scroll"},"ui/legacy/components/perf_ui/perf_ui-meta.ts | showLiveMemoryAllocation":{"message":"Show live memory allocation annotations"},"ui/legacy/components/perf_ui/perf_ui-meta.ts | zoom":{"message":"Zoom"},"ui/legacy/components/perf_ui/PieChart.ts | total":{"message":"Total"},"ui/legacy/components/quick_open/CommandMenu.ts | command":{"message":"Command"},"ui/legacy/components/quick_open/CommandMenu.ts | deprecated":{"message":"— deprecated"},"ui/legacy/components/quick_open/CommandMenu.ts | noCommandsFound":{"message":"No commands found"},"ui/legacy/components/quick_open/CommandMenu.ts | oneOrMoreSettingsHaveChanged":{"message":"One or more settings have changed which requires a reload to take effect."},"ui/legacy/components/quick_open/CommandMenu.ts | run":{"message":"Run"},"ui/legacy/components/quick_open/FilteredListWidget.ts | noResultsFound":{"message":"No results found"},"ui/legacy/components/quick_open/FilteredListWidget.ts | quickOpen":{"message":"Quick open"},"ui/legacy/components/quick_open/FilteredListWidget.ts | quickOpenPrompt":{"message":"Quick open prompt"},"ui/legacy/components/quick_open/quick_open-meta.ts | openFile":{"message":"Open file"},"ui/legacy/components/quick_open/quick_open-meta.ts | runCommand":{"message":"Run command"},"ui/legacy/components/quick_open/QuickOpen.ts | typeToSeeAvailableCommands":{"message":"Type ? to see available commands"},"ui/legacy/components/source_frame/FontView.ts | font":{"message":"Font"},"ui/legacy/components/source_frame/FontView.ts | previewOfFontFromS":{"message":"Preview of font from {PH1}"},"ui/legacy/components/source_frame/ImageView.ts | copyImageAsDataUri":{"message":"Copy image as data URI"},"ui/legacy/components/source_frame/ImageView.ts | copyImageUrl":{"message":"Copy image URL"},"ui/legacy/components/source_frame/ImageView.ts | dD":{"message":"{PH1} × {PH2}"},"ui/legacy/components/source_frame/ImageView.ts | download":{"message":"download"},"ui/legacy/components/source_frame/ImageView.ts | dropImageFileHere":{"message":"Drop image file here"},"ui/legacy/components/source_frame/ImageView.ts | image":{"message":"Image"},"ui/legacy/components/source_frame/ImageView.ts | imageFromS":{"message":"Image from {PH1}"},"ui/legacy/components/source_frame/ImageView.ts | openImageInNewTab":{"message":"Open image in new tab"},"ui/legacy/components/source_frame/ImageView.ts | saveImageAs":{"message":"Save image as..."},"ui/legacy/components/source_frame/JSONView.ts | find":{"message":"Find"},"ui/legacy/components/source_frame/PreviewFactory.ts | nothingToPreview":{"message":"Nothing to preview"},"ui/legacy/components/source_frame/ResourceSourceFrame.ts | find":{"message":"Find"},"ui/legacy/components/source_frame/source_frame-meta.ts | defaultIndentation":{"message":"Default indentation:"},"ui/legacy/components/source_frame/source_frame-meta.ts | eSpaces":{"message":"8 spaces"},"ui/legacy/components/source_frame/source_frame-meta.ts | fSpaces":{"message":"4 spaces"},"ui/legacy/components/source_frame/source_frame-meta.ts | setIndentationToESpaces":{"message":"Set indentation to 8 spaces"},"ui/legacy/components/source_frame/source_frame-meta.ts | setIndentationToFSpaces":{"message":"Set indentation to 4 spaces"},"ui/legacy/components/source_frame/source_frame-meta.ts | setIndentationToSpaces":{"message":"Set indentation to 2 spaces"},"ui/legacy/components/source_frame/source_frame-meta.ts | setIndentationToTabCharacter":{"message":"Set indentation to tab character"},"ui/legacy/components/source_frame/source_frame-meta.ts | Spaces":{"message":"2 spaces"},"ui/legacy/components/source_frame/source_frame-meta.ts | tabCharacter":{"message":"Tab character"},"ui/legacy/components/source_frame/SourceFrame.ts | bytecodePositionXs":{"message":"Bytecode position 0x{PH1}"},"ui/legacy/components/source_frame/SourceFrame.ts | dCharactersSelected":{"message":"{PH1} characters selected"},"ui/legacy/components/source_frame/SourceFrame.ts | dLinesDCharactersSelected":{"message":"{PH1} lines, {PH2} characters selected"},"ui/legacy/components/source_frame/SourceFrame.ts | dSelectionRegions":{"message":"{PH1} selection regions"},"ui/legacy/components/source_frame/SourceFrame.ts | lineSColumnS":{"message":"Line {PH1}, Column {PH2}"},"ui/legacy/components/source_frame/SourceFrame.ts | loading":{"message":"Loading…"},"ui/legacy/components/source_frame/SourceFrame.ts | prettyPrint":{"message":"Pretty print"},"ui/legacy/components/source_frame/SourceFrame.ts | source":{"message":"Source"},"ui/legacy/components/source_frame/XMLView.ts | find":{"message":"Find"},"ui/legacy/components/utils/ImagePreview.ts | currentSource":{"message":"Current source:"},"ui/legacy/components/utils/ImagePreview.ts | fileSize":{"message":"File size:"},"ui/legacy/components/utils/ImagePreview.ts | imageFromS":{"message":"Image from {PH1}"},"ui/legacy/components/utils/ImagePreview.ts | intrinsicAspectRatio":{"message":"Intrinsic aspect ratio:"},"ui/legacy/components/utils/ImagePreview.ts | intrinsicSize":{"message":"Intrinsic size:"},"ui/legacy/components/utils/ImagePreview.ts | renderedAspectRatio":{"message":"Rendered aspect ratio:"},"ui/legacy/components/utils/ImagePreview.ts | renderedSize":{"message":"Rendered size:"},"ui/legacy/components/utils/ImagePreview.ts | unknownSource":{"message":"unknown source"},"ui/legacy/components/utils/JSPresentationUtils.ts | addToIgnore":{"message":"Add script to ignore list"},"ui/legacy/components/utils/JSPresentationUtils.ts | removeFromIgnore":{"message":"Remove from ignore list"},"ui/legacy/components/utils/JSPresentationUtils.ts | showLess":{"message":"Show less"},"ui/legacy/components/utils/JSPresentationUtils.ts | showSMoreFrames":{"message":"{n, plural, =1 {Show # more frame} other {Show # more frames}}"},"ui/legacy/components/utils/JSPresentationUtils.ts | unknownSource":{"message":"unknown"},"ui/legacy/components/utils/Linkifier.ts | auto":{"message":"auto"},"ui/legacy/components/utils/Linkifier.ts | linkHandling":{"message":"Link handling:"},"ui/legacy/components/utils/Linkifier.ts | openUsingS":{"message":"Open using {PH1}"},"ui/legacy/components/utils/Linkifier.ts | reveal":{"message":"Reveal"},"ui/legacy/components/utils/Linkifier.ts | revealInS":{"message":"Reveal in {PH1}"},"ui/legacy/components/utils/Linkifier.ts | unknown":{"message":"(unknown)"},"ui/legacy/components/utils/TargetDetachedDialog.ts | websocketDisconnected":{"message":"WebSocket disconnected"},"ui/legacy/DockController.ts | close":{"message":"Close"},"ui/legacy/DockController.ts | devToolsDockedTo":{"message":"DevTools is docked to {PH1}"},"ui/legacy/DockController.ts | devtoolsUndocked":{"message":"DevTools is undocked"},"ui/legacy/DockController.ts | dockToBottom":{"message":"Dock to bottom"},"ui/legacy/DockController.ts | dockToLeft":{"message":"Dock to left"},"ui/legacy/DockController.ts | dockToRight":{"message":"Dock to right"},"ui/legacy/DockController.ts | undockIntoSeparateWindow":{"message":"Undock into separate window"},"ui/legacy/EmptyWidget.ts | learnMore":{"message":"Learn more"},"ui/legacy/FilterBar.ts | allStrings":{"message":"All"},"ui/legacy/FilterBar.ts | clearFilter":{"message":"Clear input"},"ui/legacy/FilterBar.ts | egSmalldUrlacomb":{"message":"e.g. /small[d]+/ url:a.com/b"},"ui/legacy/FilterBar.ts | filter":{"message":"Filter"},"ui/legacy/FilterBar.ts | sclickToSelectMultipleTypes":{"message":"{PH1}Click to select multiple types"},"ui/legacy/Infobar.ts | close":{"message":"Close"},"ui/legacy/Infobar.ts | dontShowAgain":{"message":"Don't show again"},"ui/legacy/Infobar.ts | learnMore":{"message":"Learn more"},"ui/legacy/InspectorView.ts | closeDrawer":{"message":"Close drawer"},"ui/legacy/InspectorView.ts | devToolsLanguageMissmatch":{"message":"DevTools is now available in {PH1}!"},"ui/legacy/InspectorView.ts | drawer":{"message":"Tool drawer"},"ui/legacy/InspectorView.ts | drawerHidden":{"message":"Drawer hidden"},"ui/legacy/InspectorView.ts | drawerShown":{"message":"Drawer shown"},"ui/legacy/InspectorView.ts | mainToolbar":{"message":"Main toolbar"},"ui/legacy/InspectorView.ts | moreTools":{"message":"More Tools"},"ui/legacy/InspectorView.ts | moveToBottom":{"message":"Move to bottom"},"ui/legacy/InspectorView.ts | moveToTop":{"message":"Move to top"},"ui/legacy/InspectorView.ts | panels":{"message":"Panels"},"ui/legacy/InspectorView.ts | reloadDevtools":{"message":"Reload DevTools"},"ui/legacy/InspectorView.ts | selectFolder":{"message":"Select folder"},"ui/legacy/InspectorView.ts | selectOverrideFolder":{"message":"Select a folder to store override files in."},"ui/legacy/InspectorView.ts | setToBrowserLanguage":{"message":"Always match Chrome's language"},"ui/legacy/InspectorView.ts | setToSpecificLanguage":{"message":"Switch DevTools to {PH1}"},"ui/legacy/ListWidget.ts | addString":{"message":"Add"},"ui/legacy/ListWidget.ts | cancelString":{"message":"Cancel"},"ui/legacy/ListWidget.ts | editString":{"message":"Edit"},"ui/legacy/ListWidget.ts | removeString":{"message":"Remove"},"ui/legacy/ListWidget.ts | saveString":{"message":"Save"},"ui/legacy/RemoteDebuggingTerminatedScreen.ts | debuggingConnectionWasClosed":{"message":"Debugging connection was closed. Reason: "},"ui/legacy/RemoteDebuggingTerminatedScreen.ts | reconnectDevtools":{"message":"Reconnect DevTools"},"ui/legacy/RemoteDebuggingTerminatedScreen.ts | reconnectWhenReadyByReopening":{"message":"Reconnect when ready by reopening DevTools."},"ui/legacy/SearchableView.ts | cancel":{"message":"Cancel"},"ui/legacy/SearchableView.ts | dMatches":{"message":"{PH1} matches"},"ui/legacy/SearchableView.ts | dOfD":{"message":"{PH1} of {PH2}"},"ui/legacy/SearchableView.ts | findString":{"message":"Find"},"ui/legacy/SearchableView.ts | matchCase":{"message":"Match Case"},"ui/legacy/SearchableView.ts | matchString":{"message":"1 match"},"ui/legacy/SearchableView.ts | replace":{"message":"Replace"},"ui/legacy/SearchableView.ts | replaceAll":{"message":"Replace all"},"ui/legacy/SearchableView.ts | searchNext":{"message":"Search next"},"ui/legacy/SearchableView.ts | searchPrevious":{"message":"Search previous"},"ui/legacy/SearchableView.ts | useRegularExpression":{"message":"Use Regular Expression"},"ui/legacy/SettingsUI.ts | oneOrMoreSettingsHaveChanged":{"message":"One or more settings have changed which requires a reload to take effect."},"ui/legacy/SettingsUI.ts | srequiresReload":{"message":"*Requires reload"},"ui/legacy/SoftContextMenu.ts | checked":{"message":"checked"},"ui/legacy/SoftContextMenu.ts | sS":{"message":"{PH1}, {PH2}"},"ui/legacy/SoftContextMenu.ts | sSS":{"message":"{PH1}, {PH2}, {PH3}"},"ui/legacy/SoftContextMenu.ts | unchecked":{"message":"unchecked"},"ui/legacy/SoftDropDown.ts | noItemSelected":{"message":"(no item selected)"},"ui/legacy/SuggestBox.ts | sSuggestionSOfS":{"message":"{PH1}, suggestion {PH2} of {PH3}"},"ui/legacy/SuggestBox.ts | sSuggestionSSelected":{"message":"{PH1}, suggestion selected"},"ui/legacy/TabbedPane.ts | close":{"message":"Close"},"ui/legacy/TabbedPane.ts | closeAll":{"message":"Close all"},"ui/legacy/TabbedPane.ts | closeOthers":{"message":"Close others"},"ui/legacy/TabbedPane.ts | closeS":{"message":"Close {PH1}"},"ui/legacy/TabbedPane.ts | closeTabsToTheRight":{"message":"Close tabs to the right"},"ui/legacy/TabbedPane.ts | moreTabs":{"message":"More tabs"},"ui/legacy/TabbedPane.ts | previewFeature":{"message":"Preview feature"},"ui/legacy/TargetCrashedScreen.ts | devtoolsWasDisconnectedFromThe":{"message":"DevTools was disconnected from the page."},"ui/legacy/TargetCrashedScreen.ts | oncePageIsReloadedDevtoolsWill":{"message":"Once page is reloaded, DevTools will automatically reconnect."},"ui/legacy/Toolbar.ts | clearInput":{"message":"Clear input"},"ui/legacy/Toolbar.ts | notPressed":{"message":"not pressed"},"ui/legacy/Toolbar.ts | pressed":{"message":"pressed"},"ui/legacy/UIUtils.ts | anonymous":{"message":"(anonymous)"},"ui/legacy/UIUtils.ts | anotherProfilerIsAlreadyActive":{"message":"Another profiler is already active"},"ui/legacy/UIUtils.ts | asyncCall":{"message":"Async Call"},"ui/legacy/UIUtils.ts | cancel":{"message":"Cancel"},"ui/legacy/UIUtils.ts | close":{"message":"Close"},"ui/legacy/UIUtils.ts | copyFileName":{"message":"Copy file name"},"ui/legacy/UIUtils.ts | copyLinkAddress":{"message":"Copy link address"},"ui/legacy/UIUtils.ts | ok":{"message":"OK"},"ui/legacy/UIUtils.ts | openInNewTab":{"message":"Open in new tab"},"ui/legacy/UIUtils.ts | promiseRejectedAsync":{"message":"Promise rejected (async)"},"ui/legacy/UIUtils.ts | promiseResolvedAsync":{"message":"Promise resolved (async)"},"ui/legacy/UIUtils.ts | sAsync":{"message":"{PH1} (async)"},"ui/legacy/ViewManager.ts | sPanel":{"message":"{PH1} panel"},"ui/legacy/ViewRegistration.ts | drawer":{"message":"Drawer"},"ui/legacy/ViewRegistration.ts | drawer_sidebar":{"message":"Drawer sidebar"},"ui/legacy/ViewRegistration.ts | elements":{"message":"Elements"},"ui/legacy/ViewRegistration.ts | network":{"message":"Network"},"ui/legacy/ViewRegistration.ts | panel":{"message":"Panel"},"ui/legacy/ViewRegistration.ts | settings":{"message":"Settings"},"ui/legacy/ViewRegistration.ts | sources":{"message":"Sources"}} \ No newline at end of file +{"core/common/ResourceType.ts | cspviolationreport":{"message":"CSPViolationReport"},"core/common/ResourceType.ts | css":{"message":"CSS"},"core/common/ResourceType.ts | doc":{"message":"Doc"},"core/common/ResourceType.ts | document":{"message":"Document"},"core/common/ResourceType.ts | documents":{"message":"Documents"},"core/common/ResourceType.ts | eventsource":{"message":"EventSource"},"core/common/ResourceType.ts | fetch":{"message":"Fetch"},"core/common/ResourceType.ts | font":{"message":"Font"},"core/common/ResourceType.ts | fonts":{"message":"Fonts"},"core/common/ResourceType.ts | image":{"message":"Image"},"core/common/ResourceType.ts | images":{"message":"Images"},"core/common/ResourceType.ts | img":{"message":"Img"},"core/common/ResourceType.ts | js":{"message":"JS"},"core/common/ResourceType.ts | manifest":{"message":"Manifest"},"core/common/ResourceType.ts | media":{"message":"Media"},"core/common/ResourceType.ts | other":{"message":"Other"},"core/common/ResourceType.ts | ping":{"message":"Ping"},"core/common/ResourceType.ts | preflight":{"message":"Preflight"},"core/common/ResourceType.ts | script":{"message":"Script"},"core/common/ResourceType.ts | scripts":{"message":"Scripts"},"core/common/ResourceType.ts | signedexchange":{"message":"SignedExchange"},"core/common/ResourceType.ts | stylesheet":{"message":"Stylesheet"},"core/common/ResourceType.ts | stylesheets":{"message":"Stylesheets"},"core/common/ResourceType.ts | texttrack":{"message":"TextTrack"},"core/common/ResourceType.ts | wasm":{"message":"Wasm"},"core/common/ResourceType.ts | webassembly":{"message":"WebAssembly"},"core/common/ResourceType.ts | webbundle":{"message":"WebBundle"},"core/common/ResourceType.ts | websocket":{"message":"WebSocket"},"core/common/ResourceType.ts | websockets":{"message":"WebSockets"},"core/common/ResourceType.ts | webtransport":{"message":"WebTransport"},"core/common/ResourceType.ts | ws":{"message":"WS"},"core/common/ResourceType.ts | xhrAndFetch":{"message":"XHR and Fetch"},"core/common/Revealer.ts | applicationPanel":{"message":"Application panel"},"core/common/Revealer.ts | changesDrawer":{"message":"Changes drawer"},"core/common/Revealer.ts | elementsPanel":{"message":"Elements panel"},"core/common/Revealer.ts | issuesView":{"message":"Issues view"},"core/common/Revealer.ts | networkPanel":{"message":"Network panel"},"core/common/Revealer.ts | sourcesPanel":{"message":"Sources panel"},"core/common/Revealer.ts | stylesSidebar":{"message":"styles sidebar"},"core/common/SettingRegistration.ts | adorner":{"message":"Adorner"},"core/common/SettingRegistration.ts | appearance":{"message":"Appearance"},"core/common/SettingRegistration.ts | console":{"message":"Console"},"core/common/SettingRegistration.ts | debugger":{"message":"Debugger"},"core/common/SettingRegistration.ts | elements":{"message":"Elements"},"core/common/SettingRegistration.ts | extension":{"message":"Extension"},"core/common/SettingRegistration.ts | global":{"message":"Global"},"core/common/SettingRegistration.ts | grid":{"message":"Grid"},"core/common/SettingRegistration.ts | memory":{"message":"Memory"},"core/common/SettingRegistration.ts | mobile":{"message":"Mobile"},"core/common/SettingRegistration.ts | network":{"message":"Network"},"core/common/SettingRegistration.ts | performance":{"message":"Performance"},"core/common/SettingRegistration.ts | persistence":{"message":"Persistence"},"core/common/SettingRegistration.ts | rendering":{"message":"Rendering"},"core/common/SettingRegistration.ts | sources":{"message":"Sources"},"core/common/SettingRegistration.ts | sync":{"message":"Sync"},"core/host/InspectorFrontendHost.ts | devtoolsS":{"message":"DevTools - {PH1}"},"core/host/ResourceLoader.ts | cacheError":{"message":"Cache error"},"core/host/ResourceLoader.ts | certificateError":{"message":"Certificate error"},"core/host/ResourceLoader.ts | certificateManagerError":{"message":"Certificate manager error"},"core/host/ResourceLoader.ts | connectionError":{"message":"Connection error"},"core/host/ResourceLoader.ts | decodingDataUrlFailed":{"message":"Decoding Data URL failed"},"core/host/ResourceLoader.ts | dnsResolverError":{"message":"DNS resolver error"},"core/host/ResourceLoader.ts | ftpError":{"message":"FTP error"},"core/host/ResourceLoader.ts | httpError":{"message":"HTTP error"},"core/host/ResourceLoader.ts | httpErrorStatusCodeSS":{"message":"HTTP error: status code {PH1}, {PH2}"},"core/host/ResourceLoader.ts | invalidUrl":{"message":"Invalid URL"},"core/host/ResourceLoader.ts | signedExchangeError":{"message":"Signed Exchange error"},"core/host/ResourceLoader.ts | systemError":{"message":"System error"},"core/host/ResourceLoader.ts | unknownError":{"message":"Unknown error"},"core/i18n/time-utilities.ts | fdays":{"message":"{PH1} days"},"core/i18n/time-utilities.ts | fhrs":{"message":"{PH1} hrs"},"core/i18n/time-utilities.ts | fmin":{"message":"{PH1} min"},"core/i18n/time-utilities.ts | fmms":{"message":"{PH1} μs"},"core/i18n/time-utilities.ts | fms":{"message":"{PH1} ms"},"core/i18n/time-utilities.ts | fs":{"message":"{PH1} s"},"core/sdk/CompilerSourceMappingContentProvider.ts | couldNotLoadContentForSS":{"message":"Could not load content for {PH1} ({PH2})"},"core/sdk/ConsoleModel.ts | bfcacheNavigation":{"message":"Navigation to {PH1} was restored from back/forward cache (see https://web.dev/bfcache/)"},"core/sdk/ConsoleModel.ts | failedToSaveToTempVariable":{"message":"Failed to save to temp variable."},"core/sdk/ConsoleModel.ts | navigatedToS":{"message":"Navigated to {PH1}"},"core/sdk/ConsoleModel.ts | profileSFinished":{"message":"Profile ''{PH1}'' finished."},"core/sdk/ConsoleModel.ts | profileSStarted":{"message":"Profile ''{PH1}'' started."},"core/sdk/CPUProfilerModel.ts | profileD":{"message":"Profile {PH1}"},"core/sdk/CSSStyleSheetHeader.ts | couldNotFindTheOriginalStyle":{"message":"Could not find the original style sheet."},"core/sdk/CSSStyleSheetHeader.ts | thereWasAnErrorRetrievingThe":{"message":"There was an error retrieving the source styles."},"core/sdk/DebuggerModel.ts | block":{"message":"Block"},"core/sdk/DebuggerModel.ts | catchBlock":{"message":"Catch block"},"core/sdk/DebuggerModel.ts | closure":{"message":"Closure"},"core/sdk/DebuggerModel.ts | expression":{"message":"Expression"},"core/sdk/DebuggerModel.ts | global":{"message":"Global"},"core/sdk/DebuggerModel.ts | local":{"message":"Local"},"core/sdk/DebuggerModel.ts | module":{"message":"Module"},"core/sdk/DebuggerModel.ts | script":{"message":"Script"},"core/sdk/DebuggerModel.ts | withBlock":{"message":"With block"},"core/sdk/DOMDebuggerModel.ts | animation":{"message":"Animation"},"core/sdk/DOMDebuggerModel.ts | animationFrameFired":{"message":"Animation Frame Fired"},"core/sdk/DOMDebuggerModel.ts | cancelAnimationFrame":{"message":"Cancel Animation Frame"},"core/sdk/DOMDebuggerModel.ts | canvas":{"message":"Canvas"},"core/sdk/DOMDebuggerModel.ts | clipboard":{"message":"Clipboard"},"core/sdk/DOMDebuggerModel.ts | closeAudiocontext":{"message":"Close AudioContext"},"core/sdk/DOMDebuggerModel.ts | control":{"message":"Control"},"core/sdk/DOMDebuggerModel.ts | createAudiocontext":{"message":"Create AudioContext"},"core/sdk/DOMDebuggerModel.ts | createCanvasContext":{"message":"Create canvas context"},"core/sdk/DOMDebuggerModel.ts | device":{"message":"Device"},"core/sdk/DOMDebuggerModel.ts | domMutation":{"message":"DOM Mutation"},"core/sdk/DOMDebuggerModel.ts | dragDrop":{"message":"Drag / drop"},"core/sdk/DOMDebuggerModel.ts | geolocation":{"message":"Geolocation"},"core/sdk/DOMDebuggerModel.ts | keyboard":{"message":"Keyboard"},"core/sdk/DOMDebuggerModel.ts | load":{"message":"Load"},"core/sdk/DOMDebuggerModel.ts | media":{"message":"Media"},"core/sdk/DOMDebuggerModel.ts | mouse":{"message":"Mouse"},"core/sdk/DOMDebuggerModel.ts | notification":{"message":"Notification"},"core/sdk/DOMDebuggerModel.ts | parse":{"message":"Parse"},"core/sdk/DOMDebuggerModel.ts | pictureinpicture":{"message":"Picture-in-Picture"},"core/sdk/DOMDebuggerModel.ts | pointer":{"message":"Pointer"},"core/sdk/DOMDebuggerModel.ts | policyViolations":{"message":"Policy Violations"},"core/sdk/DOMDebuggerModel.ts | requestAnimationFrame":{"message":"Request Animation Frame"},"core/sdk/DOMDebuggerModel.ts | resumeAudiocontext":{"message":"Resume AudioContext"},"core/sdk/DOMDebuggerModel.ts | script":{"message":"Script"},"core/sdk/DOMDebuggerModel.ts | scriptBlockedByContentSecurity":{"message":"Script Blocked by Content Security Policy"},"core/sdk/DOMDebuggerModel.ts | scriptBlockedDueToContent":{"message":"Script blocked due to Content Security Policy directive: {PH1}"},"core/sdk/DOMDebuggerModel.ts | scriptFirstStatement":{"message":"Script First Statement"},"core/sdk/DOMDebuggerModel.ts | setInnerhtml":{"message":"Set innerHTML"},"core/sdk/DOMDebuggerModel.ts | setTimeoutOrIntervalFired":{"message":"{PH1} fired"},"core/sdk/DOMDebuggerModel.ts | sinkViolations":{"message":"Sink Violations"},"core/sdk/DOMDebuggerModel.ts | suspendAudiocontext":{"message":"Suspend AudioContext"},"core/sdk/DOMDebuggerModel.ts | timer":{"message":"Timer"},"core/sdk/DOMDebuggerModel.ts | touch":{"message":"Touch"},"core/sdk/DOMDebuggerModel.ts | trustedTypeViolations":{"message":"Trusted Type Violations"},"core/sdk/DOMDebuggerModel.ts | webaudio":{"message":"WebAudio"},"core/sdk/DOMDebuggerModel.ts | webglErrorFired":{"message":"WebGL Error Fired"},"core/sdk/DOMDebuggerModel.ts | webglErrorFiredS":{"message":"WebGL Error Fired ({PH1})"},"core/sdk/DOMDebuggerModel.ts | webglWarningFired":{"message":"WebGL Warning Fired"},"core/sdk/DOMDebuggerModel.ts | window":{"message":"Window"},"core/sdk/DOMDebuggerModel.ts | worker":{"message":"Worker"},"core/sdk/DOMDebuggerModel.ts | xhr":{"message":"XHR"},"core/sdk/EventBreakpointsModel.ts | auctionWorklet":{"message":"Ad Auction Worklet"},"core/sdk/EventBreakpointsModel.ts | beforeBidderWorkletBiddingStart":{"message":"Bidder Bidding Phase Start"},"core/sdk/EventBreakpointsModel.ts | beforeBidderWorkletReportingStart":{"message":"Bidder Reporting Phase Start"},"core/sdk/EventBreakpointsModel.ts | beforeSellerWorkletReportingStart":{"message":"Seller Reporting Phase Start"},"core/sdk/EventBreakpointsModel.ts | beforeSellerWorkletScoringStart":{"message":"Seller Scoring Phase Start"},"core/sdk/NetworkManager.ts | crossoriginReadBlockingCorb":{"message":"Cross-Origin Read Blocking (CORB) blocked cross-origin response {PH1} with MIME type {PH2}. See https://www.chromestatus.com/feature/5629709824032768 for more details."},"core/sdk/NetworkManager.ts | fastG":{"message":"Fast 3G"},"core/sdk/NetworkManager.ts | noContentForPreflight":{"message":"No content available for preflight request"},"core/sdk/NetworkManager.ts | noContentForRedirect":{"message":"No content available because this request was redirected"},"core/sdk/NetworkManager.ts | noContentForWebSocket":{"message":"Content for WebSockets is currently not supported"},"core/sdk/NetworkManager.ts | noThrottling":{"message":"No throttling"},"core/sdk/NetworkManager.ts | offline":{"message":"Offline"},"core/sdk/NetworkManager.ts | requestWasBlockedByDevtoolsS":{"message":"Request was blocked by DevTools: \"{PH1}\""},"core/sdk/NetworkManager.ts | sFailedLoadingSS":{"message":"{PH1} failed loading: {PH2} \"{PH3}\"."},"core/sdk/NetworkManager.ts | sFinishedLoadingSS":{"message":"{PH1} finished loading: {PH2} \"{PH3}\"."},"core/sdk/NetworkManager.ts | slowG":{"message":"Slow 3G"},"core/sdk/NetworkRequest.ts | anUnknownErrorWasEncounteredWhenTrying":{"message":"An unknown error was encountered when trying to store this cookie."},"core/sdk/NetworkRequest.ts | binary":{"message":"(binary)"},"core/sdk/NetworkRequest.ts | blockedReasonInvalidDomain":{"message":"This attempt to set a cookie via a Set-Cookie header was blocked because its Domain attribute was invalid with regards to the current host url."},"core/sdk/NetworkRequest.ts | blockedReasonInvalidPrefix":{"message":"This attempt to set a cookie via a Set-Cookie header was blocked because it used the \"__Secure-\" or \"__Host-\" prefix in its name and broke the additional rules applied to cookies with these prefixes as defined in https://tools.ietf.org/html/draft-west-cookie-prefixes-05."},"core/sdk/NetworkRequest.ts | blockedReasonOverwriteSecure":{"message":"This attempt to set a cookie via a Set-Cookie header was blocked because it was not sent over a secure connection and would have overwritten a cookie with the Secure attribute."},"core/sdk/NetworkRequest.ts | blockedReasonSameSiteNoneInsecure":{"message":"This attempt to set a cookie via a Set-Cookie header was blocked because it had the \"SameSite=None\" attribute but did not have the \"Secure\" attribute, which is required in order to use \"SameSite=None\"."},"core/sdk/NetworkRequest.ts | blockedReasonSameSiteStrictLax":{"message":"This attempt to set a cookie via a Set-Cookie header was blocked because it had the \"{PH1}\" attribute but came from a cross-site response which was not the response to a top-level navigation."},"core/sdk/NetworkRequest.ts | blockedReasonSameSiteUnspecifiedTreatedAsLax":{"message":"This Set-Cookie header didn't specify a \"SameSite\" attribute and was defaulted to \"SameSite=Lax,\" and was blocked because it came from a cross-site response which was not the response to a top-level navigation. The Set-Cookie had to have been set with \"SameSite=None\" to enable cross-site usage."},"core/sdk/NetworkRequest.ts | blockedReasonSecureOnly":{"message":"This attempt to set a cookie via a Set-Cookie header was blocked because it had the \"Secure\" attribute but was not received over a secure connection."},"core/sdk/NetworkRequest.ts | domainMismatch":{"message":"This cookie was blocked because neither did the request URL's domain exactly match the cookie's domain, nor was the request URL's domain a subdomain of the cookie's Domain attribute value."},"core/sdk/NetworkRequest.ts | nameValuePairExceedsMaxSize":{"message":"This cookie was blocked because it was too large. The combined size of the name and value must be less than or equal to 4096 characters."},"core/sdk/NetworkRequest.ts | notOnPath":{"message":"This cookie was blocked because its path was not an exact match for or a superdirectory of the request url's path."},"core/sdk/NetworkRequest.ts | samePartyFromCrossPartyContext":{"message":"This cookie was blocked because it had the \"SameParty\" attribute but the request was cross-party. The request was considered cross-party because the domain of the resource's URL and the domains of the resource's enclosing frames/documents are neither owners nor members in the same First-Party Set."},"core/sdk/NetworkRequest.ts | sameSiteLax":{"message":"This cookie was blocked because it had the \"SameSite=Lax\" attribute and the request was made from a different site and was not initiated by a top-level navigation."},"core/sdk/NetworkRequest.ts | sameSiteNoneInsecure":{"message":"This cookie was blocked because it had the \"SameSite=None\" attribute but was not marked \"Secure\". Cookies without SameSite restrictions must be marked \"Secure\" and sent over a secure connection."},"core/sdk/NetworkRequest.ts | sameSiteStrict":{"message":"This cookie was blocked because it had the \"SameSite=Strict\" attribute and the request was made from a different site. This includes top-level navigation requests initiated by other sites."},"core/sdk/NetworkRequest.ts | sameSiteUnspecifiedTreatedAsLax":{"message":"This cookie didn't specify a \"SameSite\" attribute when it was stored and was defaulted to \"SameSite=Lax,\" and was blocked because the request was made from a different site and was not initiated by a top-level navigation. The cookie had to have been set with \"SameSite=None\" to enable cross-site usage."},"core/sdk/NetworkRequest.ts | schemefulSameSiteLax":{"message":"This cookie was blocked because it had the \"SameSite=Lax\" attribute but the request was cross-site and was not initiated by a top-level navigation. This request is considered cross-site because the URL has a different scheme than the current site."},"core/sdk/NetworkRequest.ts | schemefulSameSiteStrict":{"message":"This cookie was blocked because it had the \"SameSite=Strict\" attribute but the request was cross-site. This includes top-level navigation requests initiated by other sites. This request is considered cross-site because the URL has a different scheme than the current site."},"core/sdk/NetworkRequest.ts | schemefulSameSiteUnspecifiedTreatedAsLax":{"message":"This cookie didn't specify a \"SameSite\" attribute when it was stored, was defaulted to \"SameSite=Lax\", and was blocked because the request was cross-site and was not initiated by a top-level navigation. This request is considered cross-site because the URL has a different scheme than the current site."},"core/sdk/NetworkRequest.ts | secureOnly":{"message":"This cookie was blocked because it had the \"Secure\" attribute and the connection was not secure."},"core/sdk/NetworkRequest.ts | setcookieHeaderIsIgnoredIn":{"message":"Set-Cookie header is ignored in response from url: {PH1}. The combined size of the name and value must be less than or equal to 4096 characters."},"core/sdk/NetworkRequest.ts | theSchemeOfThisConnectionIsNot":{"message":"The scheme of this connection is not allowed to store cookies."},"core/sdk/NetworkRequest.ts | thisSetcookieDidntSpecifyASamesite":{"message":"This Set-Cookie header didn't specify a \"SameSite\" attribute, was defaulted to \"SameSite=Lax\", and was blocked because it came from a cross-site response which was not the response to a top-level navigation. This response is considered cross-site because the URL has a different scheme than the current site."},"core/sdk/NetworkRequest.ts | thisSetcookieHadInvalidSyntax":{"message":"This Set-Cookie header had invalid syntax."},"core/sdk/NetworkRequest.ts | thisSetcookieWasBlockedBecauseItHadTheSameparty":{"message":"This attempt to set a cookie via a Set-Cookie header was blocked because it had the \"SameParty\" attribute but the request was cross-party. The request was considered cross-party because the domain of the resource's URL and the domains of the resource's enclosing frames/documents are neither owners nor members in the same First-Party Set."},"core/sdk/NetworkRequest.ts | thisSetcookieWasBlockedBecauseItHadTheSamepartyAttribute":{"message":"This attempt to set a cookie via a Set-Cookie header was blocked because it had the \"SameParty\" attribute but also had other conflicting attributes. Chrome requires cookies that use the \"SameParty\" attribute to also have the \"Secure\" attribute, and to not be restricted to \"SameSite=Strict\"."},"core/sdk/NetworkRequest.ts | thisSetcookieWasBlockedBecauseItHadTheSamesiteStrictLax":{"message":"This attempt to set a cookie via a Set-Cookie header was blocked because it had the \"{PH1}\" attribute but came from a cross-site response which was not the response to a top-level navigation. This response is considered cross-site because the URL has a different scheme than the current site."},"core/sdk/NetworkRequest.ts | thisSetcookieWasBlockedBecauseTheNameValuePairExceedsMaxSize":{"message":"This attempt to set a cookie via a Set-Cookie header was blocked because the cookie was too large. The combined size of the name and value must be less than or equal to 4096 characters."},"core/sdk/NetworkRequest.ts | thisSetcookieWasBlockedDueToUser":{"message":"This attempt to set a cookie via a Set-Cookie header was blocked due to user preferences."},"core/sdk/NetworkRequest.ts | unknownError":{"message":"An unknown error was encountered when trying to send this cookie."},"core/sdk/NetworkRequest.ts | userPreferences":{"message":"This cookie was blocked due to user preferences."},"core/sdk/OverlayModel.ts | pausedInDebugger":{"message":"Paused in debugger"},"core/sdk/PageResourceLoader.ts | loadCanceledDueToReloadOf":{"message":"Load canceled due to reload of inspected page"},"core/sdk/Script.ts | scriptRemovedOrDeleted":{"message":"Script removed or deleted."},"core/sdk/Script.ts | unableToFetchScriptSource":{"message":"Unable to fetch script source."},"core/sdk/sdk-meta.ts | achromatopsia":{"message":"Achromatopsia (no color)"},"core/sdk/sdk-meta.ts | blurredVision":{"message":"Blurred vision"},"core/sdk/sdk-meta.ts | captureAsyncStackTraces":{"message":"Capture async stack traces"},"core/sdk/sdk-meta.ts | deuteranopia":{"message":"Deuteranopia (no green)"},"core/sdk/sdk-meta.ts | disableAsyncStackTraces":{"message":"Disable async stack traces"},"core/sdk/sdk-meta.ts | disableAvifFormat":{"message":"Disable AVIF format"},"core/sdk/sdk-meta.ts | disableCache":{"message":"Disable cache (while DevTools is open)"},"core/sdk/sdk-meta.ts | disableJavascript":{"message":"Disable JavaScript"},"core/sdk/sdk-meta.ts | disableLocalFonts":{"message":"Disable local fonts"},"core/sdk/sdk-meta.ts | disableNetworkRequestBlocking":{"message":"Disable network request blocking"},"core/sdk/sdk-meta.ts | disableWebpFormat":{"message":"Disable WebP format"},"core/sdk/sdk-meta.ts | doNotCaptureAsyncStackTraces":{"message":"Do not capture async stack traces"},"core/sdk/sdk-meta.ts | doNotEmulateAFocusedPage":{"message":"Do not emulate a focused page"},"core/sdk/sdk-meta.ts | doNotEmulateAnyVisionDeficiency":{"message":"Do not emulate any vision deficiency"},"core/sdk/sdk-meta.ts | doNotEmulateCss":{"message":"Do not emulate CSS {PH1}"},"core/sdk/sdk-meta.ts | doNotEmulateCssMediaType":{"message":"Do not emulate CSS media type"},"core/sdk/sdk-meta.ts | doNotExtendGridLines":{"message":"Do not extend grid lines"},"core/sdk/sdk-meta.ts | doNotHighlightAdFrames":{"message":"Do not highlight ad frames"},"core/sdk/sdk-meta.ts | doNotPauseOnExceptions":{"message":"Do not pause on exceptions"},"core/sdk/sdk-meta.ts | doNotPreserveLogUponNavigation":{"message":"Do not preserve log upon navigation"},"core/sdk/sdk-meta.ts | doNotShowGridNamedAreas":{"message":"Do not show grid named areas"},"core/sdk/sdk-meta.ts | doNotShowGridTrackSizes":{"message":"Do not show grid track sizes"},"core/sdk/sdk-meta.ts | doNotShowRulersOnHover":{"message":"Do not show rulers on hover"},"core/sdk/sdk-meta.ts | emulateAchromatopsia":{"message":"Emulate achromatopsia (no color)"},"core/sdk/sdk-meta.ts | emulateAFocusedPage":{"message":"Emulate a focused page"},"core/sdk/sdk-meta.ts | emulateAutoDarkMode":{"message":"Emulate auto dark mode"},"core/sdk/sdk-meta.ts | emulateBlurredVision":{"message":"Emulate blurred vision"},"core/sdk/sdk-meta.ts | emulateCss":{"message":"Emulate CSS {PH1}"},"core/sdk/sdk-meta.ts | emulateCssMediaFeature":{"message":"Emulate CSS media feature {PH1}"},"core/sdk/sdk-meta.ts | emulateCssMediaType":{"message":"Emulate CSS media type"},"core/sdk/sdk-meta.ts | emulateCssPrintMediaType":{"message":"Emulate CSS print media type"},"core/sdk/sdk-meta.ts | emulateCssScreenMediaType":{"message":"Emulate CSS screen media type"},"core/sdk/sdk-meta.ts | emulateDeuteranopia":{"message":"Emulate deuteranopia (no green)"},"core/sdk/sdk-meta.ts | emulateProtanopia":{"message":"Emulate protanopia (no red)"},"core/sdk/sdk-meta.ts | emulateReducedContrast":{"message":"Emulate reduced contrast"},"core/sdk/sdk-meta.ts | emulateTritanopia":{"message":"Emulate tritanopia (no blue)"},"core/sdk/sdk-meta.ts | emulateVisionDeficiencies":{"message":"Emulate vision deficiencies"},"core/sdk/sdk-meta.ts | enableAvifFormat":{"message":"Enable AVIF format"},"core/sdk/sdk-meta.ts | enableCache":{"message":"Enable cache"},"core/sdk/sdk-meta.ts | enableCustomFormatters":{"message":"Enable custom formatters"},"core/sdk/sdk-meta.ts | enableJavascript":{"message":"Enable JavaScript"},"core/sdk/sdk-meta.ts | enableLocalFonts":{"message":"Enable local fonts"},"core/sdk/sdk-meta.ts | enableNetworkRequestBlocking":{"message":"Enable network request blocking"},"core/sdk/sdk-meta.ts | enableRemoteFileLoading":{"message":"Allow DevTools to load resources, such as source maps, from remote file paths. Disabled by default for security reasons."},"core/sdk/sdk-meta.ts | enableWebpFormat":{"message":"Enable WebP format"},"core/sdk/sdk-meta.ts | extendGridLines":{"message":"Extend grid lines"},"core/sdk/sdk-meta.ts | hideCoreWebVitalsOverlay":{"message":"Hide Core Web Vitals overlay"},"core/sdk/sdk-meta.ts | hideFramesPerSecondFpsMeter":{"message":"Hide frames per second (FPS) meter"},"core/sdk/sdk-meta.ts | hideLayerBorders":{"message":"Hide layer borders"},"core/sdk/sdk-meta.ts | hideLayoutShiftRegions":{"message":"Hide layout shift regions"},"core/sdk/sdk-meta.ts | hideLineLabels":{"message":"Hide line labels"},"core/sdk/sdk-meta.ts | hidePaintFlashingRectangles":{"message":"Hide paint flashing rectangles"},"core/sdk/sdk-meta.ts | hideScrollPerformanceBottlenecks":{"message":"Hide scroll performance bottlenecks"},"core/sdk/sdk-meta.ts | highlightAdFrames":{"message":"Highlight ad frames"},"core/sdk/sdk-meta.ts | noEmulation":{"message":"No emulation"},"core/sdk/sdk-meta.ts | pauseOnExceptions":{"message":"Pause on exceptions"},"core/sdk/sdk-meta.ts | preserveLogUponNavigation":{"message":"Preserve log upon navigation"},"core/sdk/sdk-meta.ts | print":{"message":"print"},"core/sdk/sdk-meta.ts | protanopia":{"message":"Protanopia (no red)"},"core/sdk/sdk-meta.ts | query":{"message":"query"},"core/sdk/sdk-meta.ts | reducedContrast":{"message":"Reduced contrast"},"core/sdk/sdk-meta.ts | screen":{"message":"screen"},"core/sdk/sdk-meta.ts | showAreaNames":{"message":"Show area names"},"core/sdk/sdk-meta.ts | showCoreWebVitalsOverlay":{"message":"Show Core Web Vitals overlay"},"core/sdk/sdk-meta.ts | showFramesPerSecondFpsMeter":{"message":"Show frames per second (FPS) meter"},"core/sdk/sdk-meta.ts | showGridNamedAreas":{"message":"Show grid named areas"},"core/sdk/sdk-meta.ts | showGridTrackSizes":{"message":"Show grid track sizes"},"core/sdk/sdk-meta.ts | showLayerBorders":{"message":"Show layer borders"},"core/sdk/sdk-meta.ts | showLayoutShiftRegions":{"message":"Show layout shift regions"},"core/sdk/sdk-meta.ts | showLineLabels":{"message":"Show line labels"},"core/sdk/sdk-meta.ts | showLineNames":{"message":"Show line names"},"core/sdk/sdk-meta.ts | showLineNumbers":{"message":"Show line numbers"},"core/sdk/sdk-meta.ts | showPaintFlashingRectangles":{"message":"Show paint flashing rectangles"},"core/sdk/sdk-meta.ts | showRulersOnHover":{"message":"Show rulers on hover"},"core/sdk/sdk-meta.ts | showScrollPerformanceBottlenecks":{"message":"Show scroll performance bottlenecks"},"core/sdk/sdk-meta.ts | showTrackSizes":{"message":"Show track sizes"},"core/sdk/sdk-meta.ts | tritanopia":{"message":"Tritanopia (no blue)"},"core/sdk/ServerTiming.ts | deprecatedSyntaxFoundPleaseUse":{"message":"Deprecated syntax found. Please use: ;dur=;desc="},"core/sdk/ServerTiming.ts | duplicateParameterSIgnored":{"message":"Duplicate parameter \"{PH1}\" ignored."},"core/sdk/ServerTiming.ts | extraneousTrailingCharacters":{"message":"Extraneous trailing characters."},"core/sdk/ServerTiming.ts | noValueFoundForParameterS":{"message":"No value found for parameter \"{PH1}\"."},"core/sdk/ServerTiming.ts | unableToParseSValueS":{"message":"Unable to parse \"{PH1}\" value \"{PH2}\"."},"core/sdk/ServerTiming.ts | unrecognizedParameterS":{"message":"Unrecognized parameter \"{PH1}\"."},"core/sdk/ServiceWorkerCacheModel.ts | serviceworkercacheagentError":{"message":"ServiceWorkerCacheAgent error deleting cache entry {PH1} in cache: {PH2}"},"core/sdk/ServiceWorkerManager.ts | activated":{"message":"activated"},"core/sdk/ServiceWorkerManager.ts | activating":{"message":"activating"},"core/sdk/ServiceWorkerManager.ts | installed":{"message":"installed"},"core/sdk/ServiceWorkerManager.ts | installing":{"message":"installing"},"core/sdk/ServiceWorkerManager.ts | new":{"message":"new"},"core/sdk/ServiceWorkerManager.ts | redundant":{"message":"redundant"},"core/sdk/ServiceWorkerManager.ts | running":{"message":"running"},"core/sdk/ServiceWorkerManager.ts | sSS":{"message":"{PH1} #{PH2} ({PH3})"},"core/sdk/ServiceWorkerManager.ts | starting":{"message":"starting"},"core/sdk/ServiceWorkerManager.ts | stopped":{"message":"stopped"},"core/sdk/ServiceWorkerManager.ts | stopping":{"message":"stopping"},"entrypoints/inspector_main/inspector_main-meta.ts | autoOpenDevTools":{"message":"Auto-open DevTools for popups"},"entrypoints/inspector_main/inspector_main-meta.ts | blockAds":{"message":"Block ads on this site"},"entrypoints/inspector_main/inspector_main-meta.ts | colorVisionDeficiency":{"message":"color vision deficiency"},"entrypoints/inspector_main/inspector_main-meta.ts | cssMediaFeature":{"message":"CSS media feature"},"entrypoints/inspector_main/inspector_main-meta.ts | cssMediaType":{"message":"CSS media type"},"entrypoints/inspector_main/inspector_main-meta.ts | disablePaused":{"message":"Disable paused state overlay"},"entrypoints/inspector_main/inspector_main-meta.ts | doNotAutoOpen":{"message":"Do not auto-open DevTools for popups"},"entrypoints/inspector_main/inspector_main-meta.ts | forceAdBlocking":{"message":"Force ad blocking on this site"},"entrypoints/inspector_main/inspector_main-meta.ts | fps":{"message":"fps"},"entrypoints/inspector_main/inspector_main-meta.ts | hardReloadPage":{"message":"Hard reload page"},"entrypoints/inspector_main/inspector_main-meta.ts | layout":{"message":"layout"},"entrypoints/inspector_main/inspector_main-meta.ts | paint":{"message":"paint"},"entrypoints/inspector_main/inspector_main-meta.ts | reloadPage":{"message":"Reload page"},"entrypoints/inspector_main/inspector_main-meta.ts | rendering":{"message":"Rendering"},"entrypoints/inspector_main/inspector_main-meta.ts | showAds":{"message":"Show ads on this site, if allowed"},"entrypoints/inspector_main/inspector_main-meta.ts | showRendering":{"message":"Show Rendering"},"entrypoints/inspector_main/inspector_main-meta.ts | toggleCssPrefersColorSchemeMedia":{"message":"Toggle CSS media feature prefers-color-scheme"},"entrypoints/inspector_main/inspector_main-meta.ts | visionDeficiency":{"message":"vision deficiency"},"entrypoints/inspector_main/InspectorMain.ts | javascriptIsDisabled":{"message":"JavaScript is disabled"},"entrypoints/inspector_main/InspectorMain.ts | main":{"message":"Main"},"entrypoints/inspector_main/InspectorMain.ts | openDedicatedTools":{"message":"Open dedicated DevTools for Node.js"},"entrypoints/inspector_main/InspectorMain.ts | tab":{"message":"Tab"},"entrypoints/inspector_main/OutermostTargetSelector.ts | targetNotSelected":{"message":"Page: Not selected"},"entrypoints/inspector_main/OutermostTargetSelector.ts | targetS":{"message":"Page: {PH1}"},"entrypoints/inspector_main/RenderingOptions.ts | coreWebVitals":{"message":"Core Web Vitals"},"entrypoints/inspector_main/RenderingOptions.ts | disableAvifImageFormat":{"message":"Disable AVIF image format"},"entrypoints/inspector_main/RenderingOptions.ts | disableLocalFonts":{"message":"Disable local fonts"},"entrypoints/inspector_main/RenderingOptions.ts | disablesLocalSourcesInFontface":{"message":"Disables local() sources in @font-face rules. Requires a page reload to apply."},"entrypoints/inspector_main/RenderingOptions.ts | disableWebpImageFormat":{"message":"Disable WebP image format"},"entrypoints/inspector_main/RenderingOptions.ts | emulateAFocusedPage":{"message":"Emulate a focused page"},"entrypoints/inspector_main/RenderingOptions.ts | emulateAutoDarkMode":{"message":"Enable automatic dark mode"},"entrypoints/inspector_main/RenderingOptions.ts | emulatesAFocusedPage":{"message":"Emulates a focused page."},"entrypoints/inspector_main/RenderingOptions.ts | emulatesAutoDarkMode":{"message":"Enables automatic dark mode and sets prefers-color-scheme to dark."},"entrypoints/inspector_main/RenderingOptions.ts | forcesCssColorgamutMediaFeature":{"message":"Forces CSS color-gamut media feature"},"entrypoints/inspector_main/RenderingOptions.ts | forcesCssForcedColors":{"message":"Forces CSS forced-colors media feature"},"entrypoints/inspector_main/RenderingOptions.ts | forcesCssPreferscolorschemeMedia":{"message":"Forces CSS prefers-color-scheme media feature"},"entrypoints/inspector_main/RenderingOptions.ts | forcesCssPreferscontrastMedia":{"message":"Forces CSS prefers-contrast media feature"},"entrypoints/inspector_main/RenderingOptions.ts | forcesCssPrefersreduceddataMedia":{"message":"Forces CSS prefers-reduced-data media feature"},"entrypoints/inspector_main/RenderingOptions.ts | forcesCssPrefersreducedmotion":{"message":"Forces CSS prefers-reduced-motion media feature"},"entrypoints/inspector_main/RenderingOptions.ts | forcesMediaTypeForTestingPrint":{"message":"Forces media type for testing print and screen styles"},"entrypoints/inspector_main/RenderingOptions.ts | forcesVisionDeficiencyEmulation":{"message":"Forces vision deficiency emulation"},"entrypoints/inspector_main/RenderingOptions.ts | frameRenderingStats":{"message":"Frame Rendering Stats"},"entrypoints/inspector_main/RenderingOptions.ts | highlightAdFrames":{"message":"Highlight ad frames"},"entrypoints/inspector_main/RenderingOptions.ts | highlightsAreasOfThePageBlueThat":{"message":"Highlights areas of the page (blue) that were shifted. May not be suitable for people prone to photosensitive epilepsy."},"entrypoints/inspector_main/RenderingOptions.ts | highlightsAreasOfThePageGreen":{"message":"Highlights areas of the page (green) that need to be repainted. May not be suitable for people prone to photosensitive epilepsy."},"entrypoints/inspector_main/RenderingOptions.ts | highlightsElementsTealThatCan":{"message":"Highlights elements (teal) that can slow down scrolling, including touch & wheel event handlers and other main-thread scrolling situations."},"entrypoints/inspector_main/RenderingOptions.ts | highlightsFramesRedDetectedToBe":{"message":"Highlights frames (red) detected to be ads."},"entrypoints/inspector_main/RenderingOptions.ts | layerBorders":{"message":"Layer borders"},"entrypoints/inspector_main/RenderingOptions.ts | layoutShiftRegions":{"message":"Layout Shift Regions"},"entrypoints/inspector_main/RenderingOptions.ts | paintFlashing":{"message":"Paint flashing"},"entrypoints/inspector_main/RenderingOptions.ts | plotsFrameThroughputDropped":{"message":"Plots frame throughput, dropped frames distribution, and GPU memory."},"entrypoints/inspector_main/RenderingOptions.ts | requiresAPageReloadToApplyAnd":{"message":"Requires a page reload to apply and disables caching for image requests."},"entrypoints/inspector_main/RenderingOptions.ts | scrollingPerformanceIssues":{"message":"Scrolling performance issues"},"entrypoints/inspector_main/RenderingOptions.ts | showsAnOverlayWithCoreWebVitals":{"message":"Shows an overlay with Core Web Vitals."},"entrypoints/inspector_main/RenderingOptions.ts | showsLayerBordersOrangeoliveAnd":{"message":"Shows layer borders (orange/olive) and tiles (cyan)."},"entrypoints/js_app/js_app.ts | main":{"message":"Main"},"entrypoints/main/main-meta.ts | asAuthored":{"message":"As authored"},"entrypoints/main/main-meta.ts | auto":{"message":"auto"},"entrypoints/main/main-meta.ts | bottom":{"message":"Bottom"},"entrypoints/main/main-meta.ts | browserLanguage":{"message":"Browser UI language"},"entrypoints/main/main-meta.ts | cancelSearch":{"message":"Cancel search"},"entrypoints/main/main-meta.ts | colorFormat":{"message":"Color format:"},"entrypoints/main/main-meta.ts | colorFormatSettingDisabled":{"message":"This setting is deprecated because it is incompatible with modern color spaces. To re-enable it, disable the corresponding experiment."},"entrypoints/main/main-meta.ts | darkCapital":{"message":"Dark"},"entrypoints/main/main-meta.ts | darkLower":{"message":"dark"},"entrypoints/main/main-meta.ts | devtoolsDefault":{"message":"DevTools (Default)"},"entrypoints/main/main-meta.ts | dockToBottom":{"message":"Dock to bottom"},"entrypoints/main/main-meta.ts | dockToLeft":{"message":"Dock to left"},"entrypoints/main/main-meta.ts | dockToRight":{"message":"Dock to right"},"entrypoints/main/main-meta.ts | enableCtrlShortcutToSwitchPanels":{"message":"Enable Ctrl + 1-9 shortcut to switch panels"},"entrypoints/main/main-meta.ts | enableShortcutToSwitchPanels":{"message":"Enable ⌘ + 1-9 shortcut to switch panels"},"entrypoints/main/main-meta.ts | enableSync":{"message":"Enable settings sync"},"entrypoints/main/main-meta.ts | findNextResult":{"message":"Find next result"},"entrypoints/main/main-meta.ts | findPreviousResult":{"message":"Find previous result"},"entrypoints/main/main-meta.ts | focusDebuggee":{"message":"Focus debuggee"},"entrypoints/main/main-meta.ts | horizontal":{"message":"horizontal"},"entrypoints/main/main-meta.ts | language":{"message":"Language:"},"entrypoints/main/main-meta.ts | left":{"message":"Left"},"entrypoints/main/main-meta.ts | lightCapital":{"message":"Light"},"entrypoints/main/main-meta.ts | lightLower":{"message":"light"},"entrypoints/main/main-meta.ts | nextPanel":{"message":"Next panel"},"entrypoints/main/main-meta.ts | panelLayout":{"message":"Panel layout:"},"entrypoints/main/main-meta.ts | previousPanel":{"message":"Previous panel"},"entrypoints/main/main-meta.ts | reloadDevtools":{"message":"Reload DevTools"},"entrypoints/main/main-meta.ts | resetZoomLevel":{"message":"Reset zoom level"},"entrypoints/main/main-meta.ts | restoreLastDockPosition":{"message":"Restore last dock position"},"entrypoints/main/main-meta.ts | right":{"message":"Right"},"entrypoints/main/main-meta.ts | searchAsYouTypeCommand":{"message":"Enable search as you type"},"entrypoints/main/main-meta.ts | searchAsYouTypeSetting":{"message":"Search as you type"},"entrypoints/main/main-meta.ts | searchInPanel":{"message":"Search in panel"},"entrypoints/main/main-meta.ts | searchOnEnterCommand":{"message":"Disable search as you type (press Enter to search)"},"entrypoints/main/main-meta.ts | setColorFormatAsAuthored":{"message":"Set color format as authored"},"entrypoints/main/main-meta.ts | setColorFormatToHex":{"message":"Set color format to HEX"},"entrypoints/main/main-meta.ts | setColorFormatToHsl":{"message":"Set color format to HSL"},"entrypoints/main/main-meta.ts | setColorFormatToRgb":{"message":"Set color format to RGB"},"entrypoints/main/main-meta.ts | switchToDarkTheme":{"message":"Switch to dark theme"},"entrypoints/main/main-meta.ts | switchToLightTheme":{"message":"Switch to light theme"},"entrypoints/main/main-meta.ts | switchToSystemPreferredColor":{"message":"Switch to system preferred color theme"},"entrypoints/main/main-meta.ts | systemPreference":{"message":"System preference"},"entrypoints/main/main-meta.ts | theme":{"message":"Theme:"},"entrypoints/main/main-meta.ts | toggleDrawer":{"message":"Toggle drawer"},"entrypoints/main/main-meta.ts | undocked":{"message":"Undocked"},"entrypoints/main/main-meta.ts | undockIntoSeparateWindow":{"message":"Undock into separate window"},"entrypoints/main/main-meta.ts | useAutomaticPanelLayout":{"message":"Use automatic panel layout"},"entrypoints/main/main-meta.ts | useHorizontalPanelLayout":{"message":"Use horizontal panel layout"},"entrypoints/main/main-meta.ts | useVerticalPanelLayout":{"message":"Use vertical panel layout"},"entrypoints/main/main-meta.ts | vertical":{"message":"vertical"},"entrypoints/main/main-meta.ts | zoomIn":{"message":"Zoom in"},"entrypoints/main/main-meta.ts | zoomOut":{"message":"Zoom out"},"entrypoints/main/MainImpl.ts | customizeAndControlDevtools":{"message":"Customize and control DevTools"},"entrypoints/main/MainImpl.ts | dockSide":{"message":"Dock side"},"entrypoints/main/MainImpl.ts | dockSideNaviation":{"message":"Use left and right arrow keys to navigate the options"},"entrypoints/main/MainImpl.ts | dockToBottom":{"message":"Dock to bottom"},"entrypoints/main/MainImpl.ts | dockToLeft":{"message":"Dock to left"},"entrypoints/main/MainImpl.ts | dockToRight":{"message":"Dock to right"},"entrypoints/main/MainImpl.ts | focusDebuggee":{"message":"Focus debuggee"},"entrypoints/main/MainImpl.ts | help":{"message":"Help"},"entrypoints/main/MainImpl.ts | hideConsoleDrawer":{"message":"Hide console drawer"},"entrypoints/main/MainImpl.ts | moreTools":{"message":"More tools"},"entrypoints/main/MainImpl.ts | placementOfDevtoolsRelativeToThe":{"message":"Placement of DevTools relative to the page. ({PH1} to restore last position)"},"entrypoints/main/MainImpl.ts | showConsoleDrawer":{"message":"Show console drawer"},"entrypoints/main/MainImpl.ts | undockIntoSeparateWindow":{"message":"Undock into separate window"},"entrypoints/node_app/node_app.ts | connection":{"message":"Connection"},"entrypoints/node_app/node_app.ts | networkTitle":{"message":"Node"},"entrypoints/node_app/node_app.ts | node":{"message":"node"},"entrypoints/node_app/node_app.ts | showConnection":{"message":"Show Connection"},"entrypoints/node_app/node_app.ts | showNode":{"message":"Show Node"},"entrypoints/node_app/NodeConnectionsPanel.ts | addConnection":{"message":"Add connection"},"entrypoints/node_app/NodeConnectionsPanel.ts | networkAddressEgLocalhost":{"message":"Network address (e.g. localhost:9229)"},"entrypoints/node_app/NodeConnectionsPanel.ts | noConnectionsSpecified":{"message":"No connections specified"},"entrypoints/node_app/NodeConnectionsPanel.ts | nodejsDebuggingGuide":{"message":"Node.js debugging guide"},"entrypoints/node_app/NodeConnectionsPanel.ts | specifyNetworkEndpointAnd":{"message":"Specify network endpoint and DevTools will connect to it automatically. Read {PH1} to learn more."},"entrypoints/node_app/NodeMain.ts | main":{"message":"Main"},"entrypoints/node_app/NodeMain.ts | nodejsS":{"message":"Node.js: {PH1}"},"entrypoints/worker_app/WorkerMain.ts | main":{"message":"Main"},"generated/Deprecation.ts | AuthorizationCoveredByWildcard":{"message":"Authorization will not be covered by the wildcard symbol (*) in CORS Access-Control-Allow-Headers handling."},"generated/Deprecation.ts | 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."},"generated/Deprecation.ts | ChromeLoadTimesConnectionInfo":{"message":"chrome.loadTimes() is deprecated, instead use standardized API: Navigation Timing 2."},"generated/Deprecation.ts | ChromeLoadTimesFirstPaintAfterLoadTime":{"message":"chrome.loadTimes() is deprecated, instead use standardized API: Paint Timing."},"generated/Deprecation.ts | ChromeLoadTimesWasAlternateProtocolAvailable":{"message":"chrome.loadTimes() is deprecated, instead use standardized API: nextHopProtocol in Navigation Timing 2."},"generated/Deprecation.ts | CookieWithTruncatingChar":{"message":"Cookies containing a \\(0|r|n) character will be rejected instead of truncated."},"generated/Deprecation.ts | 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."},"generated/Deprecation.ts | CrossOriginWindowAlert":{"message":"Triggering window.alert from cross origin iframes has been deprecated and will be removed in the future."},"generated/Deprecation.ts | CrossOriginWindowConfirm":{"message":"Triggering window.confirm from cross origin iframes has been deprecated and will be removed in the future."},"generated/Deprecation.ts | 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."},"generated/Deprecation.ts | DataUrlInSvgUse":{"message":"Support for data: URLs in SVGUseElement is deprecated and it will be removed in the future."},"generated/Deprecation.ts | 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."},"generated/Deprecation.ts | DOMMutationEvents":{"message":"DOM Mutation Events, including DOMSubtreeModified, DOMNodeInserted, DOMNodeRemoved, DOMNodeRemovedFromDocument, DOMNodeInsertedIntoDocument, and DOMCharacterDataModified are deprecated (https://w3c.github.io/uievents/#legacy-event-types) and will be removed. Please use MutationObserver instead."},"generated/Deprecation.ts | ExpectCTHeader":{"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."},"generated/Deprecation.ts | 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."},"generated/Deprecation.ts | 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."},"generated/Deprecation.ts | 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."},"generated/Deprecation.ts | HostCandidateAttributeGetter":{"message":"RTCPeerConnectionIceErrorEvent.hostCandidate is deprecated. Please use RTCPeerConnectionIceErrorEvent.address or RTCPeerConnectionIceErrorEvent.port instead."},"generated/Deprecation.ts | IdentityInCanMakePaymentEvent":{"message":"The merchant origin and arbitrary data from the canmakepayment service worker event are deprecated and will be removed: topOrigin, paymentRequestOrigin, methodData, modifiers."},"generated/Deprecation.ts | 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."},"generated/Deprecation.ts | InterestGroupDailyUpdateUrl":{"message":"The dailyUpdateUrl field of InterestGroups passed to joinAdInterestGroup() has been renamed to updateUrl, to more accurately reflect its behavior."},"generated/Deprecation.ts | LocalCSSFileExtensionRejected":{"message":"CSS cannot be loaded from file: URLs unless they end in a .css file extension."},"generated/Deprecation.ts | 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."},"generated/Deprecation.ts | 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."},"generated/Deprecation.ts | NonStandardDeclarativeShadowDOM":{"message":"The older, non-standardized shadowroot attribute is deprecated, and will *no longer function* in M119. Please use the new, standardized shadowrootmode attribute instead."},"generated/Deprecation.ts | NoSysexWebMIDIWithoutPermission":{"message":"Web MIDI will ask a permission to use even if the sysex is not specified in the MIDIOptions."},"generated/Deprecation.ts | 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."},"generated/Deprecation.ts | 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."},"generated/Deprecation.ts | ObsoleteCreateImageBitmapImageOrientationNone":{"message":"Option imageOrientation: 'none' in createImageBitmap is deprecated. Please use createImageBitmap with option {imageOrientation: 'from-image'} instead."},"generated/Deprecation.ts | ObsoleteWebRtcCipherSuite":{"message":"Your partner is negotiating an obsolete (D)TLS version. Please check with your partner to have this fixed."},"generated/Deprecation.ts | OverflowVisibleOnReplacedElement":{"message":"Specifying overflow: visible on img, video and canvas tags may cause them to produce visual content outside of the element bounds. See https://github.com/WICG/shared-element-transitions/blob/main/debugging_overflow_on_images.md."},"generated/Deprecation.ts | PaymentInstruments":{"message":"paymentManager.instruments is deprecated. Please use just-in-time install for payment handlers instead."},"generated/Deprecation.ts | PaymentRequestCSPViolation":{"message":"Your PaymentRequest call bypassed Content-Security-Policy (CSP) connect-src directive. This bypass is deprecated. Please add the payment method identifier from the PaymentRequest API (in supportedMethods field) to your CSP connect-src directive."},"generated/Deprecation.ts | PersistentQuotaType":{"message":"StorageType.persistent is deprecated. Please use standardized navigator.storage instead."},"generated/Deprecation.ts | PictureSourceSrc":{"message":" with a parent is invalid and therefore ignored. Please use instead."},"generated/Deprecation.ts | PrefixedCancelAnimationFrame":{"message":"webkitCancelAnimationFrame is vendor-specific. Please use the standard cancelAnimationFrame instead."},"generated/Deprecation.ts | PrefixedRequestAnimationFrame":{"message":"webkitRequestAnimationFrame is vendor-specific. Please use the standard requestAnimationFrame instead."},"generated/Deprecation.ts | PrefixedVideoDisplayingFullscreen":{"message":"HTMLVideoElement.webkitDisplayingFullscreen is deprecated. Please use Document.fullscreenElement instead."},"generated/Deprecation.ts | PrefixedVideoEnterFullscreen":{"message":"HTMLVideoElement.webkitEnterFullscreen() is deprecated. Please use Element.requestFullscreen() instead."},"generated/Deprecation.ts | PrefixedVideoEnterFullScreen":{"message":"HTMLVideoElement.webkitEnterFullScreen() is deprecated. Please use Element.requestFullscreen() instead."},"generated/Deprecation.ts | PrefixedVideoExitFullscreen":{"message":"HTMLVideoElement.webkitExitFullscreen() is deprecated. Please use Document.exitFullscreen() instead."},"generated/Deprecation.ts | PrefixedVideoExitFullScreen":{"message":"HTMLVideoElement.webkitExitFullScreen() is deprecated. Please use Document.exitFullscreen() instead."},"generated/Deprecation.ts | PrefixedVideoSupportsFullscreen":{"message":"HTMLVideoElement.webkitSupportsFullscreen is deprecated. Please use Document.fullscreenEnabled instead."},"generated/Deprecation.ts | PrivacySandboxExtensionsAPI":{"message":"We're deprecating the API chrome.privacy.websites.privacySandboxEnabled, though it will remain active for backward compatibility until release M113. Instead, please use chrome.privacy.websites.topicsEnabled, chrome.privacy.websites.fledgeEnabled and chrome.privacy.websites.adMeasurementEnabled. See https://developer.chrome.com/docs/extensions/reference/privacy/#property-websites-privacySandboxEnabled."},"generated/Deprecation.ts | RangeExpand":{"message":"Range.expand() is deprecated. Please use Selection.modify() instead."},"generated/Deprecation.ts | RequestedSubresourceWithEmbeddedCredentials":{"message":"Subresource requests whose URLs contain embedded credentials (e.g. https://user:pass@host/) are blocked."},"generated/Deprecation.ts | 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."},"generated/Deprecation.ts | 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."},"generated/Deprecation.ts | RTCPeerConnectionGetStatsLegacyNonCompliant":{"message":"The callback-based getStats() is deprecated and will be removed. Use the spec-compliant getStats() instead."},"generated/Deprecation.ts | RtcpMuxPolicyNegotiate":{"message":"The rtcpMuxPolicy option is deprecated and will be removed."},"generated/Deprecation.ts | SharedArrayBufferConstructedWithoutIsolation":{"message":"SharedArrayBuffer will require cross-origin isolation. See https://developer.chrome.com/blog/enabling-shared-array-buffer/ for more details."},"generated/Deprecation.ts | TextToSpeech_DisallowedByAutoplay":{"message":"speechSynthesis.speak() without user activation is deprecated and will be removed."},"generated/Deprecation.ts | V8SharedArrayBufferConstructedInExtensionWithoutIsolation":{"message":"Extensions should opt into cross-origin isolation to continue using SharedArrayBuffer. See https://developer.chrome.com/docs/extensions/mv3/cross-origin-isolation/."},"generated/Deprecation.ts | WebSQL":{"message":"Web SQL is deprecated. Please use SQLite WebAssembly or Indexed Database"},"generated/Deprecation.ts | WindowPlacementPermissionDescriptorUsed":{"message":"The permission descriptor window-placement is deprecated. Use window-management instead. For more help, check https://bit.ly/window-placement-rename."},"generated/Deprecation.ts | WindowPlacementPermissionPolicyParsed":{"message":"The permission policy window-placement is deprecated. Use window-management instead. For more help, check https://bit.ly/window-placement-rename."},"generated/Deprecation.ts | XHRJSONEncodingDetection":{"message":"UTF-16 is not supported by response json in XMLHttpRequest"},"generated/Deprecation.ts | 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/."},"generated/Deprecation.ts | XRSupportsSession":{"message":"supportsSession() is deprecated. Please use isSessionSupported() and check the resolved boolean value instead."},"models/bindings/ContentProviderBasedProject.ts | unknownErrorLoadingFile":{"message":"Unknown error loading file"},"models/bindings/DebuggerLanguagePlugins.ts | debugSymbolsIncomplete":{"message":"The debug information for function {PH1} is incomplete"},"models/bindings/DebuggerLanguagePlugins.ts | errorInDebuggerLanguagePlugin":{"message":"Error in debugger language plugin: {PH1}"},"models/bindings/DebuggerLanguagePlugins.ts | failedToLoadDebugSymbolsFor":{"message":"[{PH1}] Failed to load debug symbols for {PH2} ({PH3})"},"models/bindings/DebuggerLanguagePlugins.ts | failedToLoadDebugSymbolsForFunction":{"message":"No debug information for function \"{PH1}\""},"models/bindings/DebuggerLanguagePlugins.ts | loadedDebugSymbolsForButDidnt":{"message":"[{PH1}] Loaded debug symbols for {PH2}, but didn't find any source files"},"models/bindings/DebuggerLanguagePlugins.ts | loadedDebugSymbolsForFound":{"message":"[{PH1}] Loaded debug symbols for {PH2}, found {PH3} source file(s)"},"models/bindings/DebuggerLanguagePlugins.ts | loadingDebugSymbolsFor":{"message":"[{PH1}] Loading debug symbols for {PH2}..."},"models/bindings/DebuggerLanguagePlugins.ts | loadingDebugSymbolsForVia":{"message":"[{PH1}] Loading debug symbols for {PH2} (via {PH3})..."},"models/bindings/IgnoreListManager.ts | addAllContentScriptsToIgnoreList":{"message":"Add all extension scripts to ignore list"},"models/bindings/IgnoreListManager.ts | addAllThirdPartyScriptsToIgnoreList":{"message":"Add all third-party scripts to ignore list"},"models/bindings/IgnoreListManager.ts | addDirectoryToIgnoreList":{"message":"Add directory to ignore list"},"models/bindings/IgnoreListManager.ts | addScriptToIgnoreList":{"message":"Add script to ignore list"},"models/bindings/IgnoreListManager.ts | removeFromIgnoreList":{"message":"Remove from ignore list"},"models/bindings/ResourceScriptMapping.ts | liveEditCompileFailed":{"message":"LiveEdit compile failed: {PH1}"},"models/bindings/ResourceScriptMapping.ts | liveEditFailed":{"message":"LiveEdit failed: {PH1}"},"models/emulation/DeviceModeModel.ts | devicePixelRatioMustBeANumberOr":{"message":"Device pixel ratio must be a number or blank."},"models/emulation/DeviceModeModel.ts | devicePixelRatioMustBeGreater":{"message":"Device pixel ratio must be greater than or equal to {PH1}."},"models/emulation/DeviceModeModel.ts | devicePixelRatioMustBeLessThanOr":{"message":"Device pixel ratio must be less than or equal to {PH1}."},"models/emulation/DeviceModeModel.ts | heightMustBeANumber":{"message":"Height must be a number."},"models/emulation/DeviceModeModel.ts | heightMustBeGreaterThanOrEqualTo":{"message":"Height must be greater than or equal to {PH1}."},"models/emulation/DeviceModeModel.ts | heightMustBeLessThanOrEqualToS":{"message":"Height must be less than or equal to {PH1}."},"models/emulation/DeviceModeModel.ts | widthMustBeANumber":{"message":"Width must be a number."},"models/emulation/DeviceModeModel.ts | widthMustBeGreaterThanOrEqualToS":{"message":"Width must be greater than or equal to {PH1}."},"models/emulation/DeviceModeModel.ts | widthMustBeLessThanOrEqualToS":{"message":"Width must be less than or equal to {PH1}."},"models/emulation/EmulatedDevices.ts | laptopWithHiDPIScreen":{"message":"Laptop with HiDPI screen"},"models/emulation/EmulatedDevices.ts | laptopWithMDPIScreen":{"message":"Laptop with MDPI screen"},"models/emulation/EmulatedDevices.ts | laptopWithTouch":{"message":"Laptop with touch"},"models/har/Writer.ts | collectingContent":{"message":"Collecting content…"},"models/har/Writer.ts | writingFile":{"message":"Writing file…"},"models/issues_manager/BounceTrackingIssue.ts | bounceTrackingMitigations":{"message":"Bounce Tracking Mitigations"},"models/issues_manager/ClientHintIssue.ts | clientHintsInfrastructure":{"message":"Client Hints Infrastructure"},"models/issues_manager/ContentSecurityPolicyIssue.ts | contentSecurityPolicyEval":{"message":"Content Security Policy - Eval"},"models/issues_manager/ContentSecurityPolicyIssue.ts | contentSecurityPolicyInlineCode":{"message":"Content Security Policy - Inline Code"},"models/issues_manager/ContentSecurityPolicyIssue.ts | contentSecurityPolicySource":{"message":"Content Security Policy - Source Allowlists"},"models/issues_manager/ContentSecurityPolicyIssue.ts | trustedTypesFixViolations":{"message":"Trusted Types - Fix violations"},"models/issues_manager/ContentSecurityPolicyIssue.ts | trustedTypesPolicyViolation":{"message":"Trusted Types - Policy violation"},"models/issues_manager/CookieIssue.ts | anInsecure":{"message":"an insecure"},"models/issues_manager/CookieIssue.ts | aSecure":{"message":"a secure"},"models/issues_manager/CookieIssue.ts | firstPartySetsExplained":{"message":"First-Party Sets and the SameParty attribute"},"models/issues_manager/CookieIssue.ts | howSchemefulSamesiteWorks":{"message":"How Schemeful Same-Site Works"},"models/issues_manager/CookieIssue.ts | samesiteCookiesExplained":{"message":"SameSite cookies explained"},"models/issues_manager/CorsIssue.ts | CORS":{"message":"Cross-Origin Resource Sharing (CORS)"},"models/issues_manager/CorsIssue.ts | corsPrivateNetworkAccess":{"message":"Private Network Access"},"models/issues_manager/CrossOriginEmbedderPolicyIssue.ts | coopAndCoep":{"message":"COOP and COEP"},"models/issues_manager/CrossOriginEmbedderPolicyIssue.ts | samesiteAndSameorigin":{"message":"Same-Site and Same-Origin"},"models/issues_manager/DeprecationIssue.ts | feature":{"message":"Check the feature status page for more details."},"models/issues_manager/DeprecationIssue.ts | milestone":{"message":"This change will go into effect with milestone {milestone}."},"models/issues_manager/DeprecationIssue.ts | title":{"message":"Deprecated Feature Used"},"models/issues_manager/FederatedAuthRequestIssue.ts | fedCm":{"message":"Federated Credential Management API"},"models/issues_manager/FederatedAuthUserInfoRequestIssue.ts | fedCmUserInfo":{"message":"Federated Credential Management User Info API"},"models/issues_manager/GenericIssue.ts | autocompleteAttributePageTitle":{"message":"HTML attribute: autocomplete"},"models/issues_manager/GenericIssue.ts | crossOriginPortalPostMessage":{"message":"Portals - Same-origin communication channels"},"models/issues_manager/GenericIssue.ts | howDoesAutofillWorkPageTitle":{"message":"How does autofill work?"},"models/issues_manager/GenericIssue.ts | inputFormElementPageTitle":{"message":"The form input element"},"models/issues_manager/GenericIssue.ts | labelFormlementsPageTitle":{"message":"The label elements"},"models/issues_manager/HeavyAdIssue.ts | handlingHeavyAdInterventions":{"message":"Handling Heavy Ad Interventions"},"models/issues_manager/Issue.ts | breakingChangeIssue":{"message":"A breaking change issue: the page may stop working in an upcoming version of Chrome"},"models/issues_manager/Issue.ts | breakingChanges":{"message":"Breaking Changes"},"models/issues_manager/Issue.ts | improvementIssue":{"message":"An improvement issue: there is an opportunity to improve the page"},"models/issues_manager/Issue.ts | improvements":{"message":"Improvements"},"models/issues_manager/Issue.ts | pageErrorIssue":{"message":"A page error issue: the page is not working correctly"},"models/issues_manager/Issue.ts | pageErrors":{"message":"Page Errors"},"models/issues_manager/LowTextContrastIssue.ts | colorAndContrastAccessibility":{"message":"Color and contrast accessibility"},"models/issues_manager/MixedContentIssue.ts | preventingMixedContent":{"message":"Preventing mixed content"},"models/issues_manager/QuirksModeIssue.ts | documentCompatibilityMode":{"message":"Document compatibility mode"},"models/issues_manager/SharedArrayBufferIssue.ts | enablingSharedArrayBuffer":{"message":"Enabling SharedArrayBuffer"},"models/logs/logs-meta.ts | clear":{"message":"clear"},"models/logs/logs-meta.ts | doNotPreserveLogOnPageReload":{"message":"Do not preserve log on page reload / navigation"},"models/logs/logs-meta.ts | preserve":{"message":"preserve"},"models/logs/logs-meta.ts | preserveLog":{"message":"Preserve log"},"models/logs/logs-meta.ts | preserveLogOnPageReload":{"message":"Preserve log on page reload / navigation"},"models/logs/logs-meta.ts | recordNetworkLog":{"message":"Record network log"},"models/logs/logs-meta.ts | reset":{"message":"reset"},"models/logs/NetworkLog.ts | anonymous":{"message":""},"models/persistence/EditFileSystemView.ts | add":{"message":"Add"},"models/persistence/EditFileSystemView.ts | enterAPath":{"message":"Enter a path"},"models/persistence/EditFileSystemView.ts | enterAUniquePath":{"message":"Enter a unique path"},"models/persistence/EditFileSystemView.ts | excludedFolders":{"message":"Excluded folders"},"models/persistence/EditFileSystemView.ts | folderPath":{"message":"Folder path"},"models/persistence/EditFileSystemView.ts | none":{"message":"None"},"models/persistence/EditFileSystemView.ts | sViaDevtools":{"message":"{PH1} (via .devtools)"},"models/persistence/IsolatedFileSystem.ts | blobCouldNotBeLoaded":{"message":"Blob could not be loaded."},"models/persistence/IsolatedFileSystem.ts | cantReadFileSS":{"message":"Can't read file: {PH1}: {PH2}"},"models/persistence/IsolatedFileSystem.ts | fileSystemErrorS":{"message":"File system error: {PH1}"},"models/persistence/IsolatedFileSystem.ts | linkedToS":{"message":"Linked to {PH1}"},"models/persistence/IsolatedFileSystem.ts | unknownErrorReadingFileS":{"message":"Unknown error reading file: {PH1}"},"models/persistence/IsolatedFileSystemManager.ts | unableToAddFilesystemS":{"message":"Unable to add filesystem: {PH1}"},"models/persistence/persistence-meta.ts | disableOverrideNetworkRequests":{"message":"Disable override network requests"},"models/persistence/persistence-meta.ts | enableLocalOverrides":{"message":"Enable Local Overrides"},"models/persistence/persistence-meta.ts | enableOverrideNetworkRequests":{"message":"Enable override network requests"},"models/persistence/persistence-meta.ts | interception":{"message":"interception"},"models/persistence/persistence-meta.ts | network":{"message":"network"},"models/persistence/persistence-meta.ts | override":{"message":"override"},"models/persistence/persistence-meta.ts | request":{"message":"request"},"models/persistence/persistence-meta.ts | rewrite":{"message":"rewrite"},"models/persistence/persistence-meta.ts | showWorkspace":{"message":"Show Workspace"},"models/persistence/persistence-meta.ts | workspace":{"message":"Workspace"},"models/persistence/PersistenceActions.ts | openInContainingFolder":{"message":"Open in containing folder"},"models/persistence/PersistenceActions.ts | saveAs":{"message":"Save as..."},"models/persistence/PersistenceActions.ts | saveForOverrides":{"message":"Save for overrides"},"models/persistence/PersistenceActions.ts | saveImage":{"message":"Save image"},"models/persistence/PersistenceUtils.ts | linkedToS":{"message":"Linked to {PH1}"},"models/persistence/PersistenceUtils.ts | linkedToSourceMapS":{"message":"Linked to source map: {PH1}"},"models/persistence/PlatformFileSystem.ts | unableToReadFilesWithThis":{"message":"PlatformFileSystem cannot read files."},"models/persistence/WorkspaceSettingsTab.ts | addFolder":{"message":"Add folder…"},"models/persistence/WorkspaceSettingsTab.ts | folderExcludePattern":{"message":"Folder exclude pattern"},"models/persistence/WorkspaceSettingsTab.ts | mappingsAreInferredAutomatically":{"message":"Mappings are inferred automatically."},"models/persistence/WorkspaceSettingsTab.ts | remove":{"message":"Remove"},"models/persistence/WorkspaceSettingsTab.ts | workspace":{"message":"Workspace"},"models/timeline_model/TimelineJSProfile.ts | threadS":{"message":"Thread {PH1}"},"models/timeline_model/TimelineModel.ts | bidderWorklet":{"message":"Bidder Worklet"},"models/timeline_model/TimelineModel.ts | bidderWorkletS":{"message":"Bidder Worklet — {PH1}"},"models/timeline_model/TimelineModel.ts | dedicatedWorker":{"message":"Dedicated Worker"},"models/timeline_model/TimelineModel.ts | sellerWorklet":{"message":"Seller Worklet"},"models/timeline_model/TimelineModel.ts | sellerWorkletS":{"message":"Seller Worklet — {PH1}"},"models/timeline_model/TimelineModel.ts | threadS":{"message":"Thread {PH1}"},"models/timeline_model/TimelineModel.ts | unknownWorklet":{"message":"Auction Worklet"},"models/timeline_model/TimelineModel.ts | unknownWorkletS":{"message":"Auction Worklet — {PH1}"},"models/timeline_model/TimelineModel.ts | workerS":{"message":"Worker — {PH1}"},"models/timeline_model/TimelineModel.ts | workerSS":{"message":"Worker: {PH1} — {PH2}"},"models/timeline_model/TimelineModel.ts | workletService":{"message":"Auction Worklet Service"},"models/timeline_model/TimelineModel.ts | workletServiceS":{"message":"Auction Worklet Service — {PH1}"},"models/workspace/UISourceCode.ts | index":{"message":"(index)"},"models/workspace/UISourceCode.ts | thisFileWasChangedExternally":{"message":"This file was changed externally. Would you like to reload it?"},"panels/accessibility/accessibility-meta.ts | accessibility":{"message":"Accessibility"},"panels/accessibility/accessibility-meta.ts | shoAccessibility":{"message":"Show Accessibility"},"panels/accessibility/AccessibilityNodeView.ts | accessibilityNodeNotExposed":{"message":"Accessibility node not exposed"},"panels/accessibility/AccessibilityNodeView.ts | ancestorChildrenAreAll":{"message":"Ancestor's children are all presentational: "},"panels/accessibility/AccessibilityNodeView.ts | computedProperties":{"message":"Computed Properties"},"panels/accessibility/AccessibilityNodeView.ts | elementHasEmptyAltText":{"message":"Element has empty alt text."},"panels/accessibility/AccessibilityNodeView.ts | elementHasPlaceholder":{"message":"Element has {PH1}."},"panels/accessibility/AccessibilityNodeView.ts | elementIsHiddenBy":{"message":"Element is hidden by active modal dialog: "},"panels/accessibility/AccessibilityNodeView.ts | elementIsInAnInertSubTree":{"message":"Element is in an inert subtree from "},"panels/accessibility/AccessibilityNodeView.ts | elementIsInert":{"message":"Element is inert."},"panels/accessibility/AccessibilityNodeView.ts | elementIsNotRendered":{"message":"Element is not rendered."},"panels/accessibility/AccessibilityNodeView.ts | elementIsNotVisible":{"message":"Element is not visible."},"panels/accessibility/AccessibilityNodeView.ts | elementIsPlaceholder":{"message":"Element is {PH1}."},"panels/accessibility/AccessibilityNodeView.ts | elementIsPresentational":{"message":"Element is presentational."},"panels/accessibility/AccessibilityNodeView.ts | elementNotInteresting":{"message":"Element not interesting for accessibility."},"panels/accessibility/AccessibilityNodeView.ts | elementsInheritsPresentational":{"message":"Element inherits presentational role from "},"panels/accessibility/AccessibilityNodeView.ts | invalidSource":{"message":"Invalid source."},"panels/accessibility/AccessibilityNodeView.ts | labelFor":{"message":"Label for "},"panels/accessibility/AccessibilityNodeView.ts | noAccessibilityNode":{"message":"No accessibility node"},"panels/accessibility/AccessibilityNodeView.ts | noNodeWithThisId":{"message":"No node with this ID."},"panels/accessibility/AccessibilityNodeView.ts | noTextContent":{"message":"No text content."},"panels/accessibility/AccessibilityNodeView.ts | notSpecified":{"message":"Not specified"},"panels/accessibility/AccessibilityNodeView.ts | partOfLabelElement":{"message":"Part of label element: "},"panels/accessibility/AccessibilityNodeView.ts | placeholderIsPlaceholderOnAncestor":{"message":"{PH1} is {PH2} on ancestor: "},"panels/accessibility/AccessibilityStrings.ts | activeDescendant":{"message":"Active descendant"},"panels/accessibility/AccessibilityStrings.ts | aHumanreadableVersionOfTheValue":{"message":"A human-readable version of the value of a range widget (where necessary)."},"panels/accessibility/AccessibilityStrings.ts | atomicLiveRegions":{"message":"Atomic (live regions)"},"panels/accessibility/AccessibilityStrings.ts | busyLiveRegions":{"message":"Busy (live regions)"},"panels/accessibility/AccessibilityStrings.ts | canSetValue":{"message":"Can set value"},"panels/accessibility/AccessibilityStrings.ts | checked":{"message":"Checked"},"panels/accessibility/AccessibilityStrings.ts | contents":{"message":"Contents"},"panels/accessibility/AccessibilityStrings.ts | controls":{"message":"Controls"},"panels/accessibility/AccessibilityStrings.ts | describedBy":{"message":"Described by"},"panels/accessibility/AccessibilityStrings.ts | description":{"message":"Description"},"panels/accessibility/AccessibilityStrings.ts | disabled":{"message":"Disabled"},"panels/accessibility/AccessibilityStrings.ts | editable":{"message":"Editable"},"panels/accessibility/AccessibilityStrings.ts | elementOrElementsWhichFormThe":{"message":"Element or elements which form the description of this element."},"panels/accessibility/AccessibilityStrings.ts | elementOrElementsWhichMayFormThe":{"message":"Element or elements which may form the name of this element."},"panels/accessibility/AccessibilityStrings.ts | elementOrElementsWhichShouldBe":{"message":"Element or elements which should be considered descendants of this element, despite not being descendants in the DOM."},"panels/accessibility/AccessibilityStrings.ts | elementOrElementsWhoseContentOr":{"message":"Element or elements whose content or presence is/are controlled by this widget."},"panels/accessibility/AccessibilityStrings.ts | elementToWhichTheUserMayChooseTo":{"message":"Element to which the user may choose to navigate after this one, instead of the next element in the DOM order."},"panels/accessibility/AccessibilityStrings.ts | expanded":{"message":"Expanded"},"panels/accessibility/AccessibilityStrings.ts | focusable":{"message":"Focusable"},"panels/accessibility/AccessibilityStrings.ts | focused":{"message":"Focused"},"panels/accessibility/AccessibilityStrings.ts | forARangeWidgetTheMaximumAllowed":{"message":"For a range widget, the maximum allowed value."},"panels/accessibility/AccessibilityStrings.ts | forARangeWidgetTheMinimumAllowed":{"message":"For a range widget, the minimum allowed value."},"panels/accessibility/AccessibilityStrings.ts | fromAttribute":{"message":"From attribute"},"panels/accessibility/AccessibilityStrings.ts | fromCaption":{"message":"From caption"},"panels/accessibility/AccessibilityStrings.ts | fromDescription":{"message":"From description"},"panels/accessibility/AccessibilityStrings.ts | fromLabel":{"message":"From label"},"panels/accessibility/AccessibilityStrings.ts | fromLabelFor":{"message":"From label (for= attribute)"},"panels/accessibility/AccessibilityStrings.ts | fromLabelWrapped":{"message":"From label (wrapped)"},"panels/accessibility/AccessibilityStrings.ts | fromLegend":{"message":"From legend"},"panels/accessibility/AccessibilityStrings.ts | fromNativeHtml":{"message":"From native HTML"},"panels/accessibility/AccessibilityStrings.ts | fromPlaceholderAttribute":{"message":"From placeholder attribute"},"panels/accessibility/AccessibilityStrings.ts | fromRubyAnnotation":{"message":"From ruby annotation"},"panels/accessibility/AccessibilityStrings.ts | fromStyle":{"message":"From style"},"panels/accessibility/AccessibilityStrings.ts | fromTitle":{"message":"From title"},"panels/accessibility/AccessibilityStrings.ts | hasAutocomplete":{"message":"Has autocomplete"},"panels/accessibility/AccessibilityStrings.ts | hasPopup":{"message":"Has popup"},"panels/accessibility/AccessibilityStrings.ts | help":{"message":"Help"},"panels/accessibility/AccessibilityStrings.ts | ifAndHowThisElementCanBeEdited":{"message":"If and how this element can be edited."},"panels/accessibility/AccessibilityStrings.ts | ifThisElementMayReceiveLive":{"message":"If this element may receive live updates, whether the entire live region should be presented to the user on changes, or only changed nodes."},"panels/accessibility/AccessibilityStrings.ts | ifThisElementMayReceiveLiveUpdates":{"message":"If this element may receive live updates, what type of updates should trigger a notification."},"panels/accessibility/AccessibilityStrings.ts | ifThisElementMayReceiveLiveUpdatesThe":{"message":"If this element may receive live updates, the root element of the containing live region."},"panels/accessibility/AccessibilityStrings.ts | ifTrueThisElementCanReceiveFocus":{"message":"If true, this element can receive focus."},"panels/accessibility/AccessibilityStrings.ts | ifTrueThisElementCurrentlyCannot":{"message":"If true, this element currently cannot be interacted with."},"panels/accessibility/AccessibilityStrings.ts | ifTrueThisElementCurrentlyHas":{"message":"If true, this element currently has focus."},"panels/accessibility/AccessibilityStrings.ts | ifTrueThisElementMayBeInteracted":{"message":"If true, this element may be interacted with, but its value cannot be changed."},"panels/accessibility/AccessibilityStrings.ts | ifTrueThisElementsUserentered":{"message":"If true, this element's user-entered value does not conform to validation requirement."},"panels/accessibility/AccessibilityStrings.ts | implicit":{"message":"Implicit"},"panels/accessibility/AccessibilityStrings.ts | implicitValue":{"message":"Implicit value."},"panels/accessibility/AccessibilityStrings.ts | indicatesThePurposeOfThisElement":{"message":"Indicates the purpose of this element, such as a user interface idiom for a widget, or structural role within a document."},"panels/accessibility/AccessibilityStrings.ts | invalidUserEntry":{"message":"Invalid user entry"},"panels/accessibility/AccessibilityStrings.ts | labeledBy":{"message":"Labeled by"},"panels/accessibility/AccessibilityStrings.ts | level":{"message":"Level"},"panels/accessibility/AccessibilityStrings.ts | liveRegion":{"message":"Live region"},"panels/accessibility/AccessibilityStrings.ts | liveRegionRoot":{"message":"Live region root"},"panels/accessibility/AccessibilityStrings.ts | maximumValue":{"message":"Maximum value"},"panels/accessibility/AccessibilityStrings.ts | minimumValue":{"message":"Minimum value"},"panels/accessibility/AccessibilityStrings.ts | multiline":{"message":"Multi-line"},"panels/accessibility/AccessibilityStrings.ts | multiselectable":{"message":"Multi-selectable"},"panels/accessibility/AccessibilityStrings.ts | orientation":{"message":"Orientation"},"panels/accessibility/AccessibilityStrings.ts | pressed":{"message":"Pressed"},"panels/accessibility/AccessibilityStrings.ts | readonlyString":{"message":"Read-only"},"panels/accessibility/AccessibilityStrings.ts | relatedElement":{"message":"Related element"},"panels/accessibility/AccessibilityStrings.ts | relevantLiveRegions":{"message":"Relevant (live regions)"},"panels/accessibility/AccessibilityStrings.ts | requiredString":{"message":"Required"},"panels/accessibility/AccessibilityStrings.ts | role":{"message":"Role"},"panels/accessibility/AccessibilityStrings.ts | selectedString":{"message":"Selected"},"panels/accessibility/AccessibilityStrings.ts | theAccessibleDescriptionForThis":{"message":"The accessible description for this element."},"panels/accessibility/AccessibilityStrings.ts | theComputedHelpTextForThis":{"message":"The computed help text for this element."},"panels/accessibility/AccessibilityStrings.ts | theComputedNameOfThisElement":{"message":"The computed name of this element."},"panels/accessibility/AccessibilityStrings.ts | theDescendantOfThisElementWhich":{"message":"The descendant of this element which is active; i.e. the element to which focus should be delegated."},"panels/accessibility/AccessibilityStrings.ts | theHierarchicalLevelOfThis":{"message":"The hierarchical level of this element."},"panels/accessibility/AccessibilityStrings.ts | theValueOfThisElementThisMayBe":{"message":"The value of this element; this may be user-provided or developer-provided, depending on the element."},"panels/accessibility/AccessibilityStrings.ts | value":{"message":"Value"},"panels/accessibility/AccessibilityStrings.ts | valueDescription":{"message":"Value description"},"panels/accessibility/AccessibilityStrings.ts | valueFromAttribute":{"message":"Value from attribute."},"panels/accessibility/AccessibilityStrings.ts | valueFromDescriptionElement":{"message":"Value from description element."},"panels/accessibility/AccessibilityStrings.ts | valueFromElementContents":{"message":"Value from element contents."},"panels/accessibility/AccessibilityStrings.ts | valueFromFigcaptionElement":{"message":"Value from figcaption element."},"panels/accessibility/AccessibilityStrings.ts | valueFromLabelElement":{"message":"Value from label element."},"panels/accessibility/AccessibilityStrings.ts | valueFromLabelElementWithFor":{"message":"Value from label element with for= attribute."},"panels/accessibility/AccessibilityStrings.ts | valueFromLabelElementWrapped":{"message":"Value from a wrapping label element."},"panels/accessibility/AccessibilityStrings.ts | valueFromLegendElement":{"message":"Value from legend element."},"panels/accessibility/AccessibilityStrings.ts | valueFromNativeHtmlRuby":{"message":"Value from plain HTML ruby annotation."},"panels/accessibility/AccessibilityStrings.ts | valueFromNativeHtmlUnknownSource":{"message":"Value from native HTML (unknown source)."},"panels/accessibility/AccessibilityStrings.ts | valueFromPlaceholderAttribute":{"message":"Value from placeholder attribute."},"panels/accessibility/AccessibilityStrings.ts | valueFromRelatedElement":{"message":"Value from related element."},"panels/accessibility/AccessibilityStrings.ts | valueFromStyle":{"message":"Value from style."},"panels/accessibility/AccessibilityStrings.ts | valueFromTableCaption":{"message":"Value from table caption."},"panels/accessibility/AccessibilityStrings.ts | valueFromTitleAttribute":{"message":"Value from title attribute."},"panels/accessibility/AccessibilityStrings.ts | whetherAndWhatPriorityOfLive":{"message":"Whether and what priority of live updates may be expected for this element."},"panels/accessibility/AccessibilityStrings.ts | whetherAndWhatTypeOfAutocomplete":{"message":"Whether and what type of autocomplete suggestions are currently provided by this element."},"panels/accessibility/AccessibilityStrings.ts | whetherAUserMaySelectMoreThanOne":{"message":"Whether a user may select more than one option from this widget."},"panels/accessibility/AccessibilityStrings.ts | whetherTheOptionRepresentedBy":{"message":"Whether the option represented by this element is currently selected."},"panels/accessibility/AccessibilityStrings.ts | whetherTheValueOfThisElementCan":{"message":"Whether the value of this element can be set."},"panels/accessibility/AccessibilityStrings.ts | whetherThisCheckboxRadioButtonOr":{"message":"Whether this checkbox, radio button or tree item is checked, unchecked, or mixed (e.g. has both checked and un-checked children)."},"panels/accessibility/AccessibilityStrings.ts | whetherThisElementHasCausedSome":{"message":"Whether this element has caused some kind of pop-up (such as a menu) to appear."},"panels/accessibility/AccessibilityStrings.ts | whetherThisElementIsARequired":{"message":"Whether this element is a required field in a form."},"panels/accessibility/AccessibilityStrings.ts | whetherThisElementOrAnother":{"message":"Whether this element, or another grouping element it controls, is expanded."},"panels/accessibility/AccessibilityStrings.ts | whetherThisElementOrItsSubtree":{"message":"Whether this element or its subtree are currently being updated (and thus may be in an inconsistent state)."},"panels/accessibility/AccessibilityStrings.ts | whetherThisLinearElements":{"message":"Whether this linear element's orientation is horizontal or vertical."},"panels/accessibility/AccessibilityStrings.ts | whetherThisTextBoxMayHaveMore":{"message":"Whether this text box may have more than one line."},"panels/accessibility/AccessibilityStrings.ts | whetherThisToggleButtonIs":{"message":"Whether this toggle button is currently in a pressed state."},"panels/accessibility/ARIAAttributesView.ts | ariaAttributes":{"message":"ARIA Attributes"},"panels/accessibility/ARIAAttributesView.ts | noAriaAttributes":{"message":"No ARIA attributes"},"panels/accessibility/AXBreadcrumbsPane.ts | accessibilityTree":{"message":"Accessibility Tree"},"panels/accessibility/AXBreadcrumbsPane.ts | fullTreeExperimentDescription":{"message":"The accessibility tree moved to the top right corner of the DOM tree."},"panels/accessibility/AXBreadcrumbsPane.ts | fullTreeExperimentName":{"message":"Enable full-page accessibility tree"},"panels/accessibility/AXBreadcrumbsPane.ts | ignored":{"message":"Ignored"},"panels/accessibility/AXBreadcrumbsPane.ts | reloadRequired":{"message":"Reload required before the change takes effect."},"panels/accessibility/AXBreadcrumbsPane.ts | scrollIntoView":{"message":"Scroll into view"},"panels/accessibility/SourceOrderView.ts | noSourceOrderInformation":{"message":"No source order information available"},"panels/accessibility/SourceOrderView.ts | showSourceOrder":{"message":"Show source order"},"panels/accessibility/SourceOrderView.ts | sourceOrderViewer":{"message":"Source Order Viewer"},"panels/accessibility/SourceOrderView.ts | thereMayBeADelayInDisplaying":{"message":"There may be a delay in displaying source order for elements with many children"},"panels/animation/animation-meta.ts | animations":{"message":"Animations"},"panels/animation/animation-meta.ts | showAnimations":{"message":"Show Animations"},"panels/animation/AnimationTimeline.ts | animationPreviews":{"message":"Animation previews"},"panels/animation/AnimationTimeline.ts | animationPreviewS":{"message":"Animation Preview {PH1}"},"panels/animation/AnimationTimeline.ts | clearAll":{"message":"Clear all"},"panels/animation/AnimationTimeline.ts | pause":{"message":"Pause"},"panels/animation/AnimationTimeline.ts | pauseAll":{"message":"Pause all"},"panels/animation/AnimationTimeline.ts | pauseTimeline":{"message":"Pause timeline"},"panels/animation/AnimationTimeline.ts | playbackRatePlaceholder":{"message":"{PH1}%"},"panels/animation/AnimationTimeline.ts | playbackRates":{"message":"Playback rates"},"panels/animation/AnimationTimeline.ts | playTimeline":{"message":"Play timeline"},"panels/animation/AnimationTimeline.ts | replayTimeline":{"message":"Replay timeline"},"panels/animation/AnimationTimeline.ts | resumeAll":{"message":"Resume all"},"panels/animation/AnimationTimeline.ts | selectAnEffectAboveToInspectAnd":{"message":"Select an effect above to inspect and modify."},"panels/animation/AnimationTimeline.ts | setSpeedToS":{"message":"Set speed to {PH1}"},"panels/animation/AnimationTimeline.ts | waitingForAnimations":{"message":"Waiting for animations..."},"panels/animation/AnimationUI.ts | animationEndpointSlider":{"message":"Animation Endpoint slider"},"panels/animation/AnimationUI.ts | animationKeyframeSlider":{"message":"Animation Keyframe slider"},"panels/animation/AnimationUI.ts | sSlider":{"message":"{PH1} slider"},"panels/application/application-meta.ts | application":{"message":"Application"},"panels/application/application-meta.ts | clearSiteData":{"message":"Clear site data"},"panels/application/application-meta.ts | clearSiteDataIncludingThirdparty":{"message":"Clear site data (including third-party cookies)"},"panels/application/application-meta.ts | pwa":{"message":"pwa"},"panels/application/application-meta.ts | showApplication":{"message":"Show Application"},"panels/application/application-meta.ts | startRecordingEvents":{"message":"Start recording events"},"panels/application/application-meta.ts | stopRecordingEvents":{"message":"Stop recording events"},"panels/application/ApplicationPanelSidebar.ts | application":{"message":"Application"},"panels/application/ApplicationPanelSidebar.ts | applicationSidebarPanel":{"message":"Application panel sidebar"},"panels/application/ApplicationPanelSidebar.ts | appManifest":{"message":"App Manifest"},"panels/application/ApplicationPanelSidebar.ts | backgroundServices":{"message":"Background Services"},"panels/application/ApplicationPanelSidebar.ts | beforeInvokeAlert":{"message":"{PH1}: Invoke to scroll to this section in manifest"},"panels/application/ApplicationPanelSidebar.ts | clear":{"message":"Clear"},"panels/application/ApplicationPanelSidebar.ts | cookies":{"message":"Cookies"},"panels/application/ApplicationPanelSidebar.ts | cookiesUsedByFramesFromS":{"message":"Cookies used by frames from {PH1}"},"panels/application/ApplicationPanelSidebar.ts | documentNotAvailable":{"message":"Document not available"},"panels/application/ApplicationPanelSidebar.ts | frames":{"message":"Frames"},"panels/application/ApplicationPanelSidebar.ts | indexeddb":{"message":"IndexedDB"},"panels/application/ApplicationPanelSidebar.ts | keyPathS":{"message":"Key path: {PH1}"},"panels/application/ApplicationPanelSidebar.ts | localFiles":{"message":"Local Files"},"panels/application/ApplicationPanelSidebar.ts | localStorage":{"message":"Local Storage"},"panels/application/ApplicationPanelSidebar.ts | manifest":{"message":"Manifest"},"panels/application/ApplicationPanelSidebar.ts | noManifestDetected":{"message":"No manifest detected"},"panels/application/ApplicationPanelSidebar.ts | onInvokeAlert":{"message":"Scrolled to {PH1}"},"panels/application/ApplicationPanelSidebar.ts | onInvokeManifestAlert":{"message":"Manifest: Invoke to scroll to the top of manifest"},"panels/application/ApplicationPanelSidebar.ts | openedWindows":{"message":"Opened Windows"},"panels/application/ApplicationPanelSidebar.ts | preloading":{"message":"Preloading"},"panels/application/ApplicationPanelSidebar.ts | refreshIndexeddb":{"message":"Refresh IndexedDB"},"panels/application/ApplicationPanelSidebar.ts | sessionStorage":{"message":"Session Storage"},"panels/application/ApplicationPanelSidebar.ts | storage":{"message":"Storage"},"panels/application/ApplicationPanelSidebar.ts | theContentOfThisDocumentHasBeen":{"message":"The content of this document has been generated dynamically via 'document.write()'."},"panels/application/ApplicationPanelSidebar.ts | versionS":{"message":"Version: {PH1}"},"panels/application/ApplicationPanelSidebar.ts | versionSEmpty":{"message":"Version: {PH1} (empty)"},"panels/application/ApplicationPanelSidebar.ts | webSql":{"message":"Web SQL"},"panels/application/ApplicationPanelSidebar.ts | webWorkers":{"message":"Web Workers"},"panels/application/ApplicationPanelSidebar.ts | windowWithoutTitle":{"message":"Window without title"},"panels/application/ApplicationPanelSidebar.ts | worker":{"message":"worker"},"panels/application/AppManifestView.ts | actualHeightSpxOfSSDoesNotMatch":{"message":"Actual height ({PH1}px) of {PH2} {PH3} does not match specified height ({PH4}px)"},"panels/application/AppManifestView.ts | actualSizeSspxOfSSDoesNotMatch":{"message":"Actual size ({PH1}×{PH2})px of {PH3} {PH4} does not match specified size ({PH5}×{PH6}px)"},"panels/application/AppManifestView.ts | actualWidthSpxOfSSDoesNotMatch":{"message":"Actual width ({PH1}px) of {PH2} {PH3} does not match specified width ({PH4}px)"},"panels/application/AppManifestView.ts | appIdExplainer":{"message":"This is used by the browser to know whether the manifest should be updating an existing application, or whether it refers to a new web app that can be installed."},"panels/application/AppManifestView.ts | appIdNote":{"message":"{PH1} {PH2} is not specified in the manifest, {PH3} is used instead. To specify an App Id that matches the current identity, set the {PH4} field to {PH5} {PH6}."},"panels/application/AppManifestView.ts | aUrlInTheManifestContainsA":{"message":"A URL in the manifest contains a username, password, or port"},"panels/application/AppManifestView.ts | avoidPurposeAnyAndMaskable":{"message":"Declaring an icon with 'purpose: \"any maskable\"' is discouraged. It is likely to look incorrect on some platforms due to too much or too little padding."},"panels/application/AppManifestView.ts | backgroundColor":{"message":"Background color"},"panels/application/AppManifestView.ts | computedAppId":{"message":"Computed App Id"},"panels/application/AppManifestView.ts | copiedToClipboard":{"message":"Copied suggested ID {PH1} to clipboard"},"panels/application/AppManifestView.ts | copyToClipboard":{"message":"Copy to clipboard"},"panels/application/AppManifestView.ts | couldNotCheckServiceWorker":{"message":"Could not check service worker without a 'start_url' field in the manifest"},"panels/application/AppManifestView.ts | couldNotDownloadARequiredIcon":{"message":"Could not download a required icon from the manifest"},"panels/application/AppManifestView.ts | customizePwaTitleBar":{"message":"Customize the window controls overlay of your PWA's title bar."},"panels/application/AppManifestView.ts | darkBackgroundColor":{"message":"Dark background color"},"panels/application/AppManifestView.ts | darkThemeColor":{"message":"Dark theme color"},"panels/application/AppManifestView.ts | description":{"message":"Description"},"panels/application/AppManifestView.ts | descriptionMayBeTruncated":{"message":"Description may be truncated."},"panels/application/AppManifestView.ts | display":{"message":"Display"},"panels/application/AppManifestView.ts | displayOverride":{"message":"display-override"},"panels/application/AppManifestView.ts | documentationOnMaskableIcons":{"message":"documentation on maskable icons"},"panels/application/AppManifestView.ts | downloadedIconWasEmptyOr":{"message":"Downloaded icon was empty or corrupted"},"panels/application/AppManifestView.ts | errorsAndWarnings":{"message":"Errors and warnings"},"panels/application/AppManifestView.ts | icon":{"message":"Icon"},"panels/application/AppManifestView.ts | icons":{"message":"Icons"},"panels/application/AppManifestView.ts | identity":{"message":"Identity"},"panels/application/AppManifestView.ts | imageFromS":{"message":"Image from {PH1}"},"panels/application/AppManifestView.ts | installability":{"message":"Installability"},"panels/application/AppManifestView.ts | learnMore":{"message":"Learn more"},"panels/application/AppManifestView.ts | manifestContainsDisplayoverride":{"message":"Manifest contains 'display_override' field, and the first supported display mode must be one of 'standalone', 'fullscreen', or 'minimal-ui'"},"panels/application/AppManifestView.ts | manifestCouldNotBeFetchedIsEmpty":{"message":"Manifest could not be fetched, is empty, or could not be parsed"},"panels/application/AppManifestView.ts | manifestDisplayPropertyMustBeOne":{"message":"Manifest 'display' property must be one of 'standalone', 'fullscreen', or 'minimal-ui'"},"panels/application/AppManifestView.ts | manifestDoesNotContainANameOr":{"message":"Manifest does not contain a 'name' or 'short_name' field"},"panels/application/AppManifestView.ts | manifestDoesNotContainASuitable":{"message":"Manifest does not contain a suitable icon - PNG, SVG or WebP format of at least {PH1}px is required, the 'sizes' attribute must be set, and the 'purpose' attribute, if set, must include 'any'."},"panels/application/AppManifestView.ts | manifestSpecifies":{"message":"Manifest specifies 'prefer_related_applications: true'"},"panels/application/AppManifestView.ts | manifestStartUrlIsNotValid":{"message":"Manifest 'start_URL' is not valid"},"panels/application/AppManifestView.ts | name":{"message":"Name"},"panels/application/AppManifestView.ts | needHelpReadOurS":{"message":"Need help? Read {PH1}."},"panels/application/AppManifestView.ts | newNoteUrl":{"message":"New note URL"},"panels/application/AppManifestView.ts | noPlayStoreIdProvided":{"message":"No Play store ID provided"},"panels/application/AppManifestView.ts | noSuppliedIconIsAtLeastSpxSquare":{"message":"No supplied icon is at least {PH1} pixels square in PNG, SVG or WebP format, with the purpose attribute unset or set to 'any'."},"panels/application/AppManifestView.ts | note":{"message":"Note:"},"panels/application/AppManifestView.ts | orientation":{"message":"Orientation"},"panels/application/AppManifestView.ts | pageDoesNotWorkOffline":{"message":"Page does not work offline"},"panels/application/AppManifestView.ts | pageDoesNotWorkOfflineThePage":{"message":"Page does not work offline. Starting in Chrome 93, the installability criteria are changing, and this site will not be installable. See {PH1} for more information."},"panels/application/AppManifestView.ts | pageHasNoManifestLinkUrl":{"message":"Page has no manifest URL"},"panels/application/AppManifestView.ts | pageIsLoadedInAnIncognitoWindow":{"message":"Page is loaded in an incognito window"},"panels/application/AppManifestView.ts | pageIsNotLoadedInTheMainFrame":{"message":"Page is not loaded in the main frame"},"panels/application/AppManifestView.ts | pageIsNotServedFromASecureOrigin":{"message":"Page is not served from a secure origin"},"panels/application/AppManifestView.ts | preferrelatedapplicationsIsOnly":{"message":"'prefer_related_applications' is only supported on Chrome Beta and Stable channels on Android."},"panels/application/AppManifestView.ts | presentation":{"message":"Presentation"},"panels/application/AppManifestView.ts | protocolHandlers":{"message":"Protocol Handlers"},"panels/application/AppManifestView.ts | screenshot":{"message":"Screenshot"},"panels/application/AppManifestView.ts | screenshotPixelSize":{"message":"Screenshot {url} should specify a pixel size [width]x[height] instead of \"any\" as first size."},"panels/application/AppManifestView.ts | screenshotS":{"message":"Screenshot #{PH1}"},"panels/application/AppManifestView.ts | shortcutS":{"message":"Shortcut #{PH1}"},"panels/application/AppManifestView.ts | shortcutSShouldIncludeAXPixel":{"message":"Shortcut #{PH1} should include a 96x96 pixel icon"},"panels/application/AppManifestView.ts | shortName":{"message":"Short name"},"panels/application/AppManifestView.ts | showOnlyTheMinimumSafeAreaFor":{"message":"Show only the minimum safe area for maskable icons"},"panels/application/AppManifestView.ts | sSDoesNotSpecifyItsSizeInThe":{"message":"{PH1} {PH2} does not specify its size in the manifest"},"panels/application/AppManifestView.ts | sSFailedToLoad":{"message":"{PH1} {PH2} failed to load"},"panels/application/AppManifestView.ts | sSHeightDoesNotComplyWithRatioRequirement":{"message":"{PH1} {PH2} height can't be more than 2.3 times as long as the width"},"panels/application/AppManifestView.ts | sSrcIsNotSet":{"message":"{PH1} 'src' is not set"},"panels/application/AppManifestView.ts | sSShouldHaveSquareIcon":{"message":"Most operating systems require square icons. Please include at least one square icon in the array."},"panels/application/AppManifestView.ts | sSShouldSpecifyItsSizeAs":{"message":"{PH1} {PH2} should specify its size as [width]x[height]"},"panels/application/AppManifestView.ts | sSSizeShouldBeAtLeast320":{"message":"{PH1} {PH2} size should be at least 320×320"},"panels/application/AppManifestView.ts | sSSizeShouldBeAtMost3840":{"message":"{PH1} {PH2} size should be at most 3840×3840"},"panels/application/AppManifestView.ts | sSWidthDoesNotComplyWithRatioRequirement":{"message":"{PH1} {PH2} width can't be more than 2.3 times as long as the height"},"panels/application/AppManifestView.ts | startUrl":{"message":"Start URL"},"panels/application/AppManifestView.ts | sUrlSFailedToParse":{"message":"{PH1} URL ''{PH2}'' failed to parse"},"panels/application/AppManifestView.ts | theAppIsAlreadyInstalled":{"message":"The app is already installed"},"panels/application/AppManifestView.ts | themeColor":{"message":"Theme color"},"panels/application/AppManifestView.ts | thePlayStoreAppUrlAndPlayStoreId":{"message":"The Play Store app URL and Play Store ID do not match"},"panels/application/AppManifestView.ts | theSpecifiedApplicationPlatform":{"message":"The specified application platform is not supported on Android"},"panels/application/AppManifestView.ts | wcoFound":{"message":"Chrome has successfully found the {PH1} value for the {PH2} field in the {PH3}."},"panels/application/AppManifestView.ts | wcoNeedHelpReadMore":{"message":"Need help? Read {PH1}."},"panels/application/AppManifestView.ts | wcoNotFound":{"message":"Define {PH1} in the manifest to use the Window Controls Overlay API and customize your app's title bar."},"panels/application/AppManifestView.ts | windowControlsOverlay":{"message":"Window Controls Overlay"},"panels/application/BackForwardCacheTreeElement.ts | backForwardCache":{"message":"Back/forward cache"},"panels/application/BackgroundServiceView.ts | backgroundFetch":{"message":"Background Fetch"},"panels/application/BackgroundServiceView.ts | backgroundServices":{"message":"Background Services"},"panels/application/BackgroundServiceView.ts | backgroundSync":{"message":"Background Sync"},"panels/application/BackgroundServiceView.ts | clear":{"message":"Clear"},"panels/application/BackgroundServiceView.ts | clickTheRecordButtonSOrHitSTo":{"message":"Click the record button {PH1} or hit {PH2} to start recording."},"panels/application/BackgroundServiceView.ts | devtoolsWillRecordAllSActivity":{"message":"DevTools will record all {PH1} activity for up to 3 days, even when closed."},"panels/application/BackgroundServiceView.ts | empty":{"message":"empty"},"panels/application/BackgroundServiceView.ts | event":{"message":"Event"},"panels/application/BackgroundServiceView.ts | instanceId":{"message":"Instance ID"},"panels/application/BackgroundServiceView.ts | learnMore":{"message":"Learn more"},"panels/application/BackgroundServiceView.ts | noMetadataForThisEvent":{"message":"No metadata for this event"},"panels/application/BackgroundServiceView.ts | notifications":{"message":"Notifications"},"panels/application/BackgroundServiceView.ts | origin":{"message":"Origin"},"panels/application/BackgroundServiceView.ts | paymentHandler":{"message":"Payment Handler"},"panels/application/BackgroundServiceView.ts | periodicBackgroundSync":{"message":"Periodic Background Sync"},"panels/application/BackgroundServiceView.ts | pushMessaging":{"message":"Push Messaging"},"panels/application/BackgroundServiceView.ts | recordingSActivity":{"message":"Recording {PH1} activity..."},"panels/application/BackgroundServiceView.ts | saveEvents":{"message":"Save events"},"panels/application/BackgroundServiceView.ts | selectAnEntryToViewMetadata":{"message":"Select an entry to view metadata"},"panels/application/BackgroundServiceView.ts | showEventsForOtherStorageKeys":{"message":"Show events from other storage partitions"},"panels/application/BackgroundServiceView.ts | showEventsFromOtherDomains":{"message":"Show events from other domains"},"panels/application/BackgroundServiceView.ts | startRecordingEvents":{"message":"Start recording events"},"panels/application/BackgroundServiceView.ts | stopRecordingEvents":{"message":"Stop recording events"},"panels/application/BackgroundServiceView.ts | storageKey":{"message":"Storage Key"},"panels/application/BackgroundServiceView.ts | swScope":{"message":"Service Worker Scope"},"panels/application/BackgroundServiceView.ts | timestamp":{"message":"Timestamp"},"panels/application/BounceTrackingMitigationsTreeElement.ts | bounceTrackingMitigations":{"message":"Bounce Tracking Mitigations"},"panels/application/components/BackForwardCacheStrings.ts | appBanner":{"message":"Pages that requested an AppBanner are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | backForwardCacheDisabled":{"message":"Back/forward cache is disabled by flags. Visit chrome://flags/#back-forward-cache to enable it locally on this device."},"panels/application/components/BackForwardCacheStrings.ts | backForwardCacheDisabledByCommandLine":{"message":"Back/forward cache is disabled by the command line."},"panels/application/components/BackForwardCacheStrings.ts | backForwardCacheDisabledByLowMemory":{"message":"Back/forward cache is disabled due to insufficient memory."},"panels/application/components/BackForwardCacheStrings.ts | backForwardCacheDisabledForDelegate":{"message":"Back/forward cache is not supported by delegate."},"panels/application/components/BackForwardCacheStrings.ts | backForwardCacheDisabledForPrerender":{"message":"Back/forward cache is disabled for prerenderer."},"panels/application/components/BackForwardCacheStrings.ts | broadcastChannel":{"message":"The page cannot be cached because it has a BroadcastChannel instance with registered listeners."},"panels/application/components/BackForwardCacheStrings.ts | cacheControlNoStore":{"message":"Pages with cache-control:no-store header cannot enter back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | cacheFlushed":{"message":"The cache was intentionally cleared."},"panels/application/components/BackForwardCacheStrings.ts | cacheLimit":{"message":"The page was evicted from the cache to allow another page to be cached."},"panels/application/components/BackForwardCacheStrings.ts | containsPlugins":{"message":"Pages containing plugins are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | contentFileChooser":{"message":"Pages that use FileChooser API are not eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | contentFileSystemAccess":{"message":"Pages that use File System Access API are not eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | contentMediaDevicesDispatcherHost":{"message":"Pages that use Media Device Dispatcher are not eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | contentMediaPlay":{"message":"A media player was playing upon navigating away."},"panels/application/components/BackForwardCacheStrings.ts | contentMediaSession":{"message":"Pages that use MediaSession API and set a playback state are not eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | contentMediaSessionService":{"message":"Pages that use MediaSession API and set action handlers are not eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | contentScreenReader":{"message":"Back/forward cache is disabled due to screen reader."},"panels/application/components/BackForwardCacheStrings.ts | contentSecurityHandler":{"message":"Pages that use SecurityHandler are not eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | contentSerial":{"message":"Pages that use Serial API are not eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | contentWebAuthenticationAPI":{"message":"Pages that use WebAuthetication API are not eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | contentWebBluetooth":{"message":"Pages that use WebBluetooth API are not eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | contentWebUSB":{"message":"Pages that use WebUSB API are not eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | cookieDisabled":{"message":"Back/forward cache is disabled because cookies are disabled on a page that uses Cache-Control: no-store."},"panels/application/components/BackForwardCacheStrings.ts | dedicatedWorkerOrWorklet":{"message":"Pages that use a dedicated worker or worklet are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | documentLoaded":{"message":"The document did not finish loading before navigating away."},"panels/application/components/BackForwardCacheStrings.ts | embedderAppBannerManager":{"message":"App Banner was present upon navigating away."},"panels/application/components/BackForwardCacheStrings.ts | embedderChromePasswordManagerClientBindCredentialManager":{"message":"Chrome Password Manager was present upon navigating away."},"panels/application/components/BackForwardCacheStrings.ts | embedderDomDistillerSelfDeletingRequestDelegate":{"message":"DOM distillation was in progress upon navigating away."},"panels/application/components/BackForwardCacheStrings.ts | embedderDomDistillerViewerSource":{"message":"DOM Distiller Viewer was present upon navigating away."},"panels/application/components/BackForwardCacheStrings.ts | embedderExtensionMessaging":{"message":"Back/forward cache is disabled due to extensions using messaging API."},"panels/application/components/BackForwardCacheStrings.ts | embedderExtensionMessagingForOpenPort":{"message":"Extensions with long-lived connection should close the connection before entering back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | embedderExtensions":{"message":"Back/forward cache is disabled due to extensions."},"panels/application/components/BackForwardCacheStrings.ts | embedderExtensionSentMessageToCachedFrame":{"message":"Extensions with long-lived connection attempted to send messages to frames in back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | embedderModalDialog":{"message":"Modal dialog such as form resubmission or http password dialog was shown for the page upon navigating away."},"panels/application/components/BackForwardCacheStrings.ts | embedderOfflinePage":{"message":"The offline page was shown upon navigating away."},"panels/application/components/BackForwardCacheStrings.ts | embedderOomInterventionTabHelper":{"message":"Out-Of-Memory Intervention bar was present upon navigating away."},"panels/application/components/BackForwardCacheStrings.ts | embedderPermissionRequestManager":{"message":"There were permission requests upon navigating away."},"panels/application/components/BackForwardCacheStrings.ts | embedderPopupBlockerTabHelper":{"message":"Popup blocker was present upon navigating away."},"panels/application/components/BackForwardCacheStrings.ts | embedderSafeBrowsingThreatDetails":{"message":"Safe Browsing details were shown upon navigating away."},"panels/application/components/BackForwardCacheStrings.ts | embedderSafeBrowsingTriggeredPopupBlocker":{"message":"Safe Browsing considered this page to be abusive and blocked popup."},"panels/application/components/BackForwardCacheStrings.ts | enteredBackForwardCacheBeforeServiceWorkerHostAdded":{"message":"A service worker was activated while the page was in back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | errorDocument":{"message":"Back/forward cache is disabled due to a document error."},"panels/application/components/BackForwardCacheStrings.ts | fencedFramesEmbedder":{"message":"Pages using FencedFrames cannot be stored in bfcache."},"panels/application/components/BackForwardCacheStrings.ts | foregroundCacheLimit":{"message":"The page was evicted from the cache to allow another page to be cached."},"panels/application/components/BackForwardCacheStrings.ts | grantedMediaStreamAccess":{"message":"Pages that have granted media stream access are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | haveInnerContents":{"message":"Pages that use portals are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | HTTPMethodNotGET":{"message":"Only pages loaded via a GET request are eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | HTTPStatusNotOK":{"message":"Only pages with a status code of 2XX can be cached."},"panels/application/components/BackForwardCacheStrings.ts | idleManager":{"message":"Pages that use IdleManager are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | indexedDBConnection":{"message":"Pages that have an open IndexedDB connection are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | indexedDBEvent":{"message":"Back/forward cache is disabled due to an IndexedDB event."},"panels/application/components/BackForwardCacheStrings.ts | ineligibleAPI":{"message":"Ineligible APIs were used."},"panels/application/components/BackForwardCacheStrings.ts | injectedJavascript":{"message":"Pages that JavaScript is injected into by extensions are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | injectedStyleSheet":{"message":"Pages that a StyleSheet is injected into by extensions are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | internalError":{"message":"Internal error."},"panels/application/components/BackForwardCacheStrings.ts | JavaScriptExecution":{"message":"Chrome detected an attempt to execute JavaScript while in the cache."},"panels/application/components/BackForwardCacheStrings.ts | jsNetworkRequestReceivedCacheControlNoStoreResource":{"message":"Back/forward cache is disabled because some JavaScript network request received resource with Cache-Control: no-store header."},"panels/application/components/BackForwardCacheStrings.ts | keepaliveRequest":{"message":"Back/forward cache is disabled due to a keepalive request."},"panels/application/components/BackForwardCacheStrings.ts | keyboardLock":{"message":"Pages that use Keyboard lock are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | loading":{"message":"The page did not finish loading before navigating away."},"panels/application/components/BackForwardCacheStrings.ts | mainResourceHasCacheControlNoCache":{"message":"Pages whose main resource has cache-control:no-cache cannot enter back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | mainResourceHasCacheControlNoStore":{"message":"Pages whose main resource has cache-control:no-store cannot enter back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | navigationCancelledWhileRestoring":{"message":"Navigation was cancelled before the page could be restored from back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | networkExceedsBufferLimit":{"message":"The page was evicted from the cache because an active network connection received too much data. Chrome limits the amount of data that a page may receive while cached."},"panels/application/components/BackForwardCacheStrings.ts | networkRequestDatapipeDrainedAsBytesConsumer":{"message":"Pages that have inflight fetch() or XHR are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | networkRequestRedirected":{"message":"The page was evicted from back/forward cache because an active network request involved a redirect."},"panels/application/components/BackForwardCacheStrings.ts | networkRequestTimeout":{"message":"The page was evicted from the cache because a network connection was open too long. Chrome limits the amount of time that a page may receive data while cached."},"panels/application/components/BackForwardCacheStrings.ts | noResponseHead":{"message":"Pages that do not have a valid response head cannot enter back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | notMainFrame":{"message":"Navigation happened in a frame other than the main frame."},"panels/application/components/BackForwardCacheStrings.ts | outstandingIndexedDBTransaction":{"message":"Page with ongoing indexed DB transactions are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | outstandingNetworkRequestDirectSocket":{"message":"Pages with an in-flight network request are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | outstandingNetworkRequestFetch":{"message":"Pages with an in-flight fetch network request are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | outstandingNetworkRequestOthers":{"message":"Pages with an in-flight network request are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | outstandingNetworkRequestXHR":{"message":"Pages with an in-flight XHR network request are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | paymentManager":{"message":"Pages that use PaymentManager are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | pictureInPicture":{"message":"Pages that use Picture-in-Picture are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | portal":{"message":"Pages that use portals are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | printing":{"message":"Pages that show Printing UI are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | relatedActiveContentsExist":{"message":"The page was opened using 'window.open()' and another tab has a reference to it, or the page opened a window."},"panels/application/components/BackForwardCacheStrings.ts | rendererProcessCrashed":{"message":"The renderer process for the page in back/forward cache crashed."},"panels/application/components/BackForwardCacheStrings.ts | rendererProcessKilled":{"message":"The renderer process for the page in back/forward cache was killed."},"panels/application/components/BackForwardCacheStrings.ts | requestedAudioCapturePermission":{"message":"Pages that have requested audio capture permissions are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | requestedBackForwardCacheBlockedSensors":{"message":"Pages that have requested sensor permissions are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | requestedBackgroundWorkPermission":{"message":"Pages that have requested background sync or fetch permissions are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | requestedMIDIPermission":{"message":"Pages that have requested MIDI permissions are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | requestedNotificationsPermission":{"message":"Pages that have requested notifications permissions are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | requestedStorageAccessGrant":{"message":"Pages that have requested storage access are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | requestedVideoCapturePermission":{"message":"Pages that have requested video capture permissions are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | schemeNotHTTPOrHTTPS":{"message":"Only pages whose URL scheme is HTTP / HTTPS can be cached."},"panels/application/components/BackForwardCacheStrings.ts | serviceWorkerClaim":{"message":"The page was claimed by a service worker while it is in back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | serviceWorkerPostMessage":{"message":"A service worker attempted to send the page in back/forward cache a MessageEvent."},"panels/application/components/BackForwardCacheStrings.ts | serviceWorkerUnregistration":{"message":"ServiceWorker was unregistered while a page was in back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | serviceWorkerVersionActivation":{"message":"The page was evicted from back/forward cache due to a service worker activation."},"panels/application/components/BackForwardCacheStrings.ts | sessionRestored":{"message":"Chrome restarted and cleared the back/forward cache entries."},"panels/application/components/BackForwardCacheStrings.ts | sharedWorker":{"message":"Pages that use SharedWorker are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | speechRecognizer":{"message":"Pages that use SpeechRecognizer are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | speechSynthesis":{"message":"Pages that use SpeechSynthesis are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | subframeIsNavigating":{"message":"An iframe on the page started a navigation that did not complete."},"panels/application/components/BackForwardCacheStrings.ts | subresourceHasCacheControlNoCache":{"message":"Pages whose subresource has cache-control:no-cache cannot enter back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | subresourceHasCacheControlNoStore":{"message":"Pages whose subresource has cache-control:no-store cannot enter back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | timeout":{"message":"The page exceeded the maximum time in back/forward cache and was expired."},"panels/application/components/BackForwardCacheStrings.ts | timeoutPuttingInCache":{"message":"The page timed out entering back/forward cache (likely due to long-running pagehide handlers)."},"panels/application/components/BackForwardCacheStrings.ts | unloadHandlerExistsInMainFrame":{"message":"The page has an unload handler in the main frame."},"panels/application/components/BackForwardCacheStrings.ts | unloadHandlerExistsInSubFrame":{"message":"The page has an unload handler in a sub frame."},"panels/application/components/BackForwardCacheStrings.ts | userAgentOverrideDiffers":{"message":"Browser has changed the user agent override header."},"panels/application/components/BackForwardCacheStrings.ts | wasGrantedMediaAccess":{"message":"Pages that have granted access to record video or audio are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | webDatabase":{"message":"Pages that use WebDatabase are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | webHID":{"message":"Pages that use WebHID are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | webLocks":{"message":"Pages that use WebLocks are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | webNfc":{"message":"Pages that use WebNfc are not currently eligible for back/forwad cache."},"panels/application/components/BackForwardCacheStrings.ts | webOTPService":{"message":"Pages that use WebOTPService are not currently eligible for bfcache."},"panels/application/components/BackForwardCacheStrings.ts | webRTC":{"message":"Pages with WebRTC cannot enter back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | webRTCSticky":{"message":"Undefined"},"panels/application/components/BackForwardCacheStrings.ts | webShare":{"message":"Pages that use WebShare are not currently eligible for back/forwad cache."},"panels/application/components/BackForwardCacheStrings.ts | webSocket":{"message":"Pages with WebSocket cannot enter back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | webSocketSticky":{"message":"Undefined"},"panels/application/components/BackForwardCacheStrings.ts | webTransport":{"message":"Pages with WebTransport cannot enter back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | webTransportSticky":{"message":"Undefined"},"panels/application/components/BackForwardCacheStrings.ts | webXR":{"message":"Pages that use WebXR are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheView.ts | backForwardCacheTitle":{"message":"Back/forward cache"},"panels/application/components/BackForwardCacheView.ts | blankURLTitle":{"message":"Blank URL [{PH1}]"},"panels/application/components/BackForwardCacheView.ts | blockingExtensionId":{"message":"Extension id: "},"panels/application/components/BackForwardCacheView.ts | circumstantial":{"message":"Not Actionable"},"panels/application/components/BackForwardCacheView.ts | circumstantialExplanation":{"message":"These reasons are not actionable i.e. caching was prevented by something outside of the direct control of the page."},"panels/application/components/BackForwardCacheView.ts | framesPerIssue":{"message":"{n, plural, =1 {# frame} other {# frames}}"},"panels/application/components/BackForwardCacheView.ts | framesTitle":{"message":"Frames"},"panels/application/components/BackForwardCacheView.ts | issuesInMultipleFrames":{"message":"{n, plural, =1 {# issue found in {m} frames.} other {# issues found in {m} frames.}}"},"panels/application/components/BackForwardCacheView.ts | issuesInSingleFrame":{"message":"{n, plural, =1 {# issue found in 1 frame.} other {# issues found in 1 frame.}}"},"panels/application/components/BackForwardCacheView.ts | learnMore":{"message":"Learn more: back/forward cache eligibility"},"panels/application/components/BackForwardCacheView.ts | mainFrame":{"message":"Main Frame"},"panels/application/components/BackForwardCacheView.ts | neverUseUnload":{"message":"Learn more: Never use unload handler"},"panels/application/components/BackForwardCacheView.ts | normalNavigation":{"message":"Not served from back/forward cache: to trigger back/forward cache, use Chrome's back/forward buttons, or use the test button below to automatically navigate away and back."},"panels/application/components/BackForwardCacheView.ts | pageSupportNeeded":{"message":"Actionable"},"panels/application/components/BackForwardCacheView.ts | pageSupportNeededExplanation":{"message":"These reasons are actionable i.e. they can be cleaned up to make the page eligible for back/forward cache."},"panels/application/components/BackForwardCacheView.ts | restoredFromBFCache":{"message":"Successfully served from back/forward cache."},"panels/application/components/BackForwardCacheView.ts | runningTest":{"message":"Running test"},"panels/application/components/BackForwardCacheView.ts | runTest":{"message":"Test back/forward cache"},"panels/application/components/BackForwardCacheView.ts | supportPending":{"message":"Pending Support"},"panels/application/components/BackForwardCacheView.ts | supportPendingExplanation":{"message":"Chrome support for these reasons is pending i.e. they will not prevent the page from being eligible for back/forward cache in a future version of Chrome."},"panels/application/components/BackForwardCacheView.ts | unavailable":{"message":"unavailable"},"panels/application/components/BackForwardCacheView.ts | unknown":{"message":"Unknown Status"},"panels/application/components/BackForwardCacheView.ts | url":{"message":"URL:"},"panels/application/components/BounceTrackingMitigationsView.ts | bounceTrackingMitigationsTitle":{"message":"Bounce Tracking Mitigations"},"panels/application/components/BounceTrackingMitigationsView.ts | checkingPotentialTrackers":{"message":"Checking for potential bounce tracking sites."},"panels/application/components/BounceTrackingMitigationsView.ts | forceRun":{"message":"Force run"},"panels/application/components/BounceTrackingMitigationsView.ts | learnMore":{"message":"Learn more: Bounce Tracking Mitigations"},"panels/application/components/BounceTrackingMitigationsView.ts | noPotentialBounceTrackersIdentified":{"message":"State was not cleared for any potential bounce tracking sites. Either none were identified, bounce tracking mitigations are not enabled, or third-party cookies are not blocked."},"panels/application/components/BounceTrackingMitigationsView.ts | runningMitigations":{"message":"Running"},"panels/application/components/BounceTrackingMitigationsView.ts | stateDeletedFor":{"message":"State was deleted for the following sites:"},"panels/application/components/EndpointsGrid.ts | noEndpointsToDisplay":{"message":"No endpoints to display"},"panels/application/components/FrameDetailsView.ts | additionalInformation":{"message":"Additional Information"},"panels/application/components/FrameDetailsView.ts | adStatus":{"message":"Ad Status"},"panels/application/components/FrameDetailsView.ts | aFrameAncestorIsAnInsecure":{"message":"A frame ancestor is an insecure context"},"panels/application/components/FrameDetailsView.ts | apiAvailability":{"message":"API availability"},"panels/application/components/FrameDetailsView.ts | availabilityOfCertainApisDepends":{"message":"Availability of certain APIs depends on the document being cross-origin isolated."},"panels/application/components/FrameDetailsView.ts | available":{"message":"available"},"panels/application/components/FrameDetailsView.ts | availableNotTransferable":{"message":"available, not transferable"},"panels/application/components/FrameDetailsView.ts | availableTransferable":{"message":"available, transferable"},"panels/application/components/FrameDetailsView.ts | child":{"message":"child"},"panels/application/components/FrameDetailsView.ts | childDescription":{"message":"This frame has been identified as a child frame of an ad"},"panels/application/components/FrameDetailsView.ts | clickToRevealInElementsPanel":{"message":"Click to reveal in Elements panel"},"panels/application/components/FrameDetailsView.ts | clickToRevealInNetworkPanel":{"message":"Click to reveal in Network panel"},"panels/application/components/FrameDetailsView.ts | clickToRevealInNetworkPanelMight":{"message":"Click to reveal in Network panel (might require page reload)"},"panels/application/components/FrameDetailsView.ts | clickToRevealInSourcesPanel":{"message":"Click to reveal in Sources panel"},"panels/application/components/FrameDetailsView.ts | createdByAdScriptExplanation":{"message":"There was an ad script in the (async) stack when this frame was created. Examining the creation stack trace of this frame might provide more insight."},"panels/application/components/FrameDetailsView.ts | creationStackTrace":{"message":"Frame Creation Stack Trace"},"panels/application/components/FrameDetailsView.ts | creationStackTraceExplanation":{"message":"This frame was created programmatically. The stack trace shows where this happened."},"panels/application/components/FrameDetailsView.ts | creatorAdScript":{"message":"Creator Ad Script"},"panels/application/components/FrameDetailsView.ts | crossoriginIsolated":{"message":"Cross-Origin Isolated"},"panels/application/components/FrameDetailsView.ts | document":{"message":"Document"},"panels/application/components/FrameDetailsView.ts | frameId":{"message":"Frame ID"},"panels/application/components/FrameDetailsView.ts | learnMore":{"message":"Learn more"},"panels/application/components/FrameDetailsView.ts | localhostIsAlwaysASecureContext":{"message":"Localhost is always a secure context"},"panels/application/components/FrameDetailsView.ts | matchedBlockingRuleExplanation":{"message":"This frame is considered an ad frame because its current (or previous) main document is an ad resource."},"panels/application/components/FrameDetailsView.ts | measureMemory":{"message":"Measure Memory"},"panels/application/components/FrameDetailsView.ts | no":{"message":"No"},"panels/application/components/FrameDetailsView.ts | origin":{"message":"Origin"},"panels/application/components/FrameDetailsView.ts | ownerElement":{"message":"Owner Element"},"panels/application/components/FrameDetailsView.ts | parentIsAdExplanation":{"message":"This frame is considered an ad frame because its parent frame is an ad frame."},"panels/application/components/FrameDetailsView.ts | prerendering":{"message":"Prerendering"},"panels/application/components/FrameDetailsView.ts | prerenderingStatus":{"message":"Prerendering Status"},"panels/application/components/FrameDetailsView.ts | refresh":{"message":"Refresh"},"panels/application/components/FrameDetailsView.ts | reportingTo":{"message":"reporting to"},"panels/application/components/FrameDetailsView.ts | requiresCrossoriginIsolated":{"message":"requires cross-origin isolated context"},"panels/application/components/FrameDetailsView.ts | root":{"message":"root"},"panels/application/components/FrameDetailsView.ts | rootDescription":{"message":"This frame has been identified as the root frame of an ad"},"panels/application/components/FrameDetailsView.ts | secureContext":{"message":"Secure Context"},"panels/application/components/FrameDetailsView.ts | securityIsolation":{"message":"Security & Isolation"},"panels/application/components/FrameDetailsView.ts | sharedarraybufferConstructorIs":{"message":"SharedArrayBuffer constructor is available and SABs can be transferred via postMessage"},"panels/application/components/FrameDetailsView.ts | sharedarraybufferConstructorIsAvailable":{"message":"SharedArrayBuffer constructor is available but SABs cannot be transferred via postMessage"},"panels/application/components/FrameDetailsView.ts | theFramesSchemeIsInsecure":{"message":"The frame's scheme is insecure"},"panels/application/components/FrameDetailsView.ts | thePerformanceAPI":{"message":"The performance.measureUserAgentSpecificMemory() API is available"},"panels/application/components/FrameDetailsView.ts | thePerformancemeasureuseragentspecificmemory":{"message":"The performance.measureUserAgentSpecificMemory() API is not available"},"panels/application/components/FrameDetailsView.ts | thisAdditionalDebugging":{"message":"This additional (debugging) information is shown because the 'Protocol Monitor' experiment is enabled."},"panels/application/components/FrameDetailsView.ts | transferRequiresCrossoriginIsolatedPermission":{"message":"SharedArrayBuffer transfer requires enabling the permission policy:"},"panels/application/components/FrameDetailsView.ts | unavailable":{"message":"unavailable"},"panels/application/components/FrameDetailsView.ts | unreachableUrl":{"message":"Unreachable URL"},"panels/application/components/FrameDetailsView.ts | url":{"message":"URL"},"panels/application/components/FrameDetailsView.ts | willRequireCrossoriginIsolated":{"message":"⚠️ will require cross-origin isolated context in the future"},"panels/application/components/FrameDetailsView.ts | yes":{"message":"Yes"},"panels/application/components/InterestGroupAccessGrid.ts | allInterestGroupStorageEvents":{"message":"All interest group storage events."},"panels/application/components/InterestGroupAccessGrid.ts | eventTime":{"message":"Event Time"},"panels/application/components/InterestGroupAccessGrid.ts | eventType":{"message":"Access Type"},"panels/application/components/InterestGroupAccessGrid.ts | groupName":{"message":"Name"},"panels/application/components/InterestGroupAccessGrid.ts | groupOwner":{"message":"Owner"},"panels/application/components/InterestGroupAccessGrid.ts | noEvents":{"message":"No interest group events recorded."},"panels/application/components/OriginTrialTreeView.ts | expiryTime":{"message":"Expiry Time"},"panels/application/components/OriginTrialTreeView.ts | isThirdParty":{"message":"Third Party"},"panels/application/components/OriginTrialTreeView.ts | matchSubDomains":{"message":"Subdomain Matching"},"panels/application/components/OriginTrialTreeView.ts | origin":{"message":"Origin"},"panels/application/components/OriginTrialTreeView.ts | rawTokenText":{"message":"Raw Token"},"panels/application/components/OriginTrialTreeView.ts | status":{"message":"Token Status"},"panels/application/components/OriginTrialTreeView.ts | token":{"message":"Token"},"panels/application/components/OriginTrialTreeView.ts | tokens":{"message":"{PH1} tokens"},"panels/application/components/OriginTrialTreeView.ts | trialName":{"message":"Trial Name"},"panels/application/components/OriginTrialTreeView.ts | usageRestriction":{"message":"Usage Restriction"},"panels/application/components/PermissionsPolicySection.ts | allowedFeatures":{"message":"Allowed Features"},"panels/application/components/PermissionsPolicySection.ts | clickToShowHeader":{"message":"Click to reveal the request whose \"Permissions-Policy\" HTTP header disables this feature."},"panels/application/components/PermissionsPolicySection.ts | clickToShowIframe":{"message":"Click to reveal the top-most iframe which does not allow this feature in the elements panel."},"panels/application/components/PermissionsPolicySection.ts | disabledByFencedFrame":{"message":"disabled inside a fencedframe"},"panels/application/components/PermissionsPolicySection.ts | disabledByHeader":{"message":"disabled by \"Permissions-Policy\" header"},"panels/application/components/PermissionsPolicySection.ts | disabledByIframe":{"message":"missing in iframe \"allow\" attribute"},"panels/application/components/PermissionsPolicySection.ts | disabledFeatures":{"message":"Disabled Features"},"panels/application/components/PermissionsPolicySection.ts | hideDetails":{"message":"Hide details"},"panels/application/components/PermissionsPolicySection.ts | showDetails":{"message":"Show details"},"panels/application/components/Prerender2.ts | Activated":{"message":"Activated."},"panels/application/components/Prerender2.ts | ActivatedBeforeStarted":{"message":"Activated before started"},"panels/application/components/Prerender2.ts | ActivationNavigationParameterMismatch":{"message":"The page was prerendered, but the navigation ended up being performed differently than the original prerender, so the prerendered page could not be activated."},"panels/application/components/Prerender2.ts | AudioOutputDeviceRequested":{"message":"Prerendering has not supported the AudioContext API yet."},"panels/application/components/Prerender2.ts | BlockedByClient":{"message":"Resource load is blocked by the client."},"panels/application/components/Prerender2.ts | CancelAllHostsForTesting":{"message":"CancelAllHostsForTesting."},"panels/application/components/Prerender2.ts | ClientCertRequested":{"message":"The page is requesting client cert, which is not suitable for a hidden page like prerendering."},"panels/application/components/Prerender2.ts | CrossSiteNavigation":{"message":"The prerendered page navigated to a cross-site URL after loading. Currently prerendering cross-site pages is disallowed."},"panels/application/components/Prerender2.ts | CrossSiteRedirect":{"message":"Attempted to prerender a URL which redirected to a cross-site URL. Currently prerendering cross-site pages is disallowed."},"panels/application/components/Prerender2.ts | DataSaverEnabled":{"message":"Data saver enabled"},"panels/application/components/Prerender2.ts | Destroyed":{"message":"A prerendered page was abandoned for unknown reasons."},"panels/application/components/Prerender2.ts | DidFailLoad":{"message":"DidFailLoadWithError happened during prerendering."},"panels/application/components/Prerender2.ts | DisallowedApiMethod":{"message":"Disallowed API method"},"panels/application/components/Prerender2.ts | Download":{"message":"Download is disallowed in Prerender."},"panels/application/components/Prerender2.ts | EmbedderTriggeredAndCrossOriginRedirected":{"message":"Prerendering triggered by Chrome internal (e.g., Omnibox prerendering) is is canceled because the navigation is redirected to another cross-origin page."},"panels/application/components/Prerender2.ts | EmbedderTriggeredAndSameOriginRedirected":{"message":"Prerendering triggered by Chrome internal (e.g., Omnibox prerendering) is canceled because the navigation is redirected to another same-origin page."},"panels/application/components/Prerender2.ts | FailToGetMemoryUsage":{"message":"Fail to get memory usage"},"panels/application/components/Prerender2.ts | HasEffectiveUrl":{"message":"Has effective URL"},"panels/application/components/Prerender2.ts | InactivePageRestriction":{"message":"Inactive page restriction"},"panels/application/components/Prerender2.ts | InProgressNavigation":{"message":"InProgressNavigation."},"panels/application/components/Prerender2.ts | InvalidSchemeNavigation":{"message":"Only HTTP(S) navigation allowed for Prerender."},"panels/application/components/Prerender2.ts | InvalidSchemeRedirect":{"message":"Attempted to prerender a URL that redirected to a non-HTTP(S) URL. Only HTTP(S) pages can be prerendered."},"panels/application/components/Prerender2.ts | LoginAuthRequested":{"message":"Prerender does not support auth requests from UI."},"panels/application/components/Prerender2.ts | LowEndDevice":{"message":"Prerendering is not supported for low-memory devices."},"panels/application/components/Prerender2.ts | MainFrameNavigation":{"message":"Navigations after the initial prerendering navigation are disallowed"},"panels/application/components/Prerender2.ts | MaxNumOfRunningPrerendersExceeded":{"message":"Max number of prerendering exceeded."},"panels/application/components/Prerender2.ts | MemoryLimitExceeded":{"message":"Memory limit exceeded"},"panels/application/components/Prerender2.ts | MixedContent":{"message":"Prerendering is canceled by a mixed content frame."},"panels/application/components/Prerender2.ts | MojoBinderPolicy":{"message":"A disallowed API was used by the prerendered page"},"panels/application/components/Prerender2.ts | NavigationBadHttpStatus":{"message":"The initial prerendering navigation was not successful due to the server returning a non-200/204/205 status code."},"panels/application/components/Prerender2.ts | NavigationNotCommitted":{"message":"The prerendering page is not committed in the end."},"panels/application/components/Prerender2.ts | NavigationRequestBlockedByCsp":{"message":"Navigation request is blocked by CSP."},"panels/application/components/Prerender2.ts | NavigationRequestNetworkError":{"message":"Encountered a network error during prerendering."},"panels/application/components/Prerender2.ts | PrerenderingOngoing":{"message":"Prerendering ongoing"},"panels/application/components/Prerender2.ts | RendererProcessCrashed":{"message":"The prerendered page crashed."},"panels/application/components/Prerender2.ts | RendererProcessKilled":{"message":"The renderer process for the prerendering page was killed."},"panels/application/components/Prerender2.ts | SameSiteCrossOriginNavigation":{"message":"The prerendered page navigated to a same-site cross-origin URL after loading. Currently prerendering cross-origin pages is disallowed."},"panels/application/components/Prerender2.ts | SameSiteCrossOriginNavigationNotOptIn":{"message":"The prerendered page navigated to a same-site cross-origin URL after loading. This is disallowed unless the destination site sends a Supports-Loading-Mode: credentialed-prerender header."},"panels/application/components/Prerender2.ts | SameSiteCrossOriginRedirect":{"message":"Attempted to prerender a URL which redirected to a same-site cross-origin URL. Currently prerendering cross-origin pages is disallowed."},"panels/application/components/Prerender2.ts | SameSiteCrossOriginRedirectNotOptIn":{"message":"Attempted to prerender a URL which redirected to a same-site cross-origin URL. This is disallowed unless the destination site sends a Supports-Loading-Mode: credentialed-prerender header."},"panels/application/components/Prerender2.ts | SslCertificateError":{"message":"SSL certificate error."},"panels/application/components/Prerender2.ts | StartFailed":{"message":"Start failed"},"panels/application/components/Prerender2.ts | Stop":{"message":"The tab is stopped."},"panels/application/components/Prerender2.ts | TriggerBackgrounded":{"message":"The tab is in the background"},"panels/application/components/Prerender2.ts | TriggerDestroyed":{"message":"Prerender is not activated and destroyed with the trigger."},"panels/application/components/Prerender2.ts | UaChangeRequiresReload":{"message":"Reload is needed after UserAgentOverride."},"panels/application/components/ProtocolHandlersView.ts | dropdownLabel":{"message":"Select protocol handler"},"panels/application/components/ProtocolHandlersView.ts | manifest":{"message":"manifest"},"panels/application/components/ProtocolHandlersView.ts | needHelpReadOur":{"message":"Need help? Read {PH1}."},"panels/application/components/ProtocolHandlersView.ts | protocolDetected":{"message":"Found valid protocol handler registration in the {PH1}. With the app installed, test the registered protocols."},"panels/application/components/ProtocolHandlersView.ts | protocolHandlerRegistrations":{"message":"URL protocol handler registration for PWAs"},"panels/application/components/ProtocolHandlersView.ts | protocolNotDetected":{"message":"Define protocol handlers in the {PH1} to register your app as a handler for custom protocols when your app is installed."},"panels/application/components/ProtocolHandlersView.ts | testProtocol":{"message":"Test protocol"},"panels/application/components/ProtocolHandlersView.ts | textboxLabel":{"message":"Query parameter or endpoint for protocol handler"},"panels/application/components/ProtocolHandlersView.ts | textboxPlaceholder":{"message":"Enter URL"},"panels/application/components/ReportsGrid.ts | destination":{"message":"Destination"},"panels/application/components/ReportsGrid.ts | generatedAt":{"message":"Generated at"},"panels/application/components/ReportsGrid.ts | noReportsToDisplay":{"message":"No reports to display"},"panels/application/components/ReportsGrid.ts | status":{"message":"Status"},"panels/application/components/SharedStorageAccessGrid.ts | allSharedStorageEvents":{"message":"All shared storage events for this page."},"panels/application/components/SharedStorageAccessGrid.ts | eventParams":{"message":"Optional Event Params"},"panels/application/components/SharedStorageAccessGrid.ts | eventTime":{"message":"Event Time"},"panels/application/components/SharedStorageAccessGrid.ts | eventType":{"message":"Access Type"},"panels/application/components/SharedStorageAccessGrid.ts | mainFrameId":{"message":"Main Frame ID"},"panels/application/components/SharedStorageAccessGrid.ts | noEvents":{"message":"No shared storage events recorded."},"panels/application/components/SharedStorageAccessGrid.ts | ownerOrigin":{"message":"Owner Origin"},"panels/application/components/SharedStorageAccessGrid.ts | sharedStorage":{"message":"Shared Storage"},"panels/application/components/SharedStorageMetadataView.ts | budgetExplanation":{"message":"Remaining data leakage allowed within a 24-hour period for this origin in bits of entropy"},"panels/application/components/SharedStorageMetadataView.ts | creation":{"message":"Creation Time"},"panels/application/components/SharedStorageMetadataView.ts | entropyBudget":{"message":"Entropy Budget for Fenced Frames"},"panels/application/components/SharedStorageMetadataView.ts | notYetCreated":{"message":"Not yet created"},"panels/application/components/SharedStorageMetadataView.ts | numEntries":{"message":"Number of Entries"},"panels/application/components/SharedStorageMetadataView.ts | resetBudget":{"message":"Reset Budget"},"panels/application/components/SharedStorageMetadataView.ts | sharedStorage":{"message":"Shared Storage"},"panels/application/components/StackTrace.ts | cannotRenderStackTrace":{"message":"Cannot render stack trace"},"panels/application/components/StackTrace.ts | showLess":{"message":"Show less"},"panels/application/components/StackTrace.ts | showSMoreFrames":{"message":"{n, plural, =1 {Show # more frame} other {Show # more frames}}"},"panels/application/components/StorageMetadataView.ts | bucketName":{"message":"Bucket name"},"panels/application/components/StorageMetadataView.ts | durability":{"message":"Durability"},"panels/application/components/StorageMetadataView.ts | expiration":{"message":"Expiration"},"panels/application/components/StorageMetadataView.ts | isOpaque":{"message":"Is opaque"},"panels/application/components/StorageMetadataView.ts | isThirdParty":{"message":"Is third-party"},"panels/application/components/StorageMetadataView.ts | loading":{"message":"Loading…"},"panels/application/components/StorageMetadataView.ts | no":{"message":"No"},"panels/application/components/StorageMetadataView.ts | none":{"message":"None"},"panels/application/components/StorageMetadataView.ts | opaque":{"message":"(opaque)"},"panels/application/components/StorageMetadataView.ts | origin":{"message":"Origin"},"panels/application/components/StorageMetadataView.ts | persistent":{"message":"Is persistent"},"panels/application/components/StorageMetadataView.ts | quota":{"message":"Quota"},"panels/application/components/StorageMetadataView.ts | topLevelSite":{"message":"Top-level site"},"panels/application/components/StorageMetadataView.ts | yes":{"message":"Yes"},"panels/application/components/StorageMetadataView.ts | yesBecauseAncestorChainHasCrossSite":{"message":"Yes, because the ancestry chain contains a third-party origin"},"panels/application/components/StorageMetadataView.ts | yesBecauseKeyIsOpaque":{"message":"Yes, because the storage key is opaque"},"panels/application/components/StorageMetadataView.ts | yesBecauseOriginNotInTopLevelSite":{"message":"Yes, because the origin is outside of the top-level site"},"panels/application/components/StorageMetadataView.ts | yesBecauseTopLevelIsOpaque":{"message":"Yes, because the top-level site is opaque"},"panels/application/components/TrustTokensView.ts | allStoredTrustTokensAvailableIn":{"message":"All stored Private State Tokens available in this browser instance."},"panels/application/components/TrustTokensView.ts | deleteTrustTokens":{"message":"Delete all stored Private State Tokens issued by {PH1}."},"panels/application/components/TrustTokensView.ts | issuer":{"message":"Issuer"},"panels/application/components/TrustTokensView.ts | noTrustTokensStored":{"message":"No Private State Tokens are currently stored."},"panels/application/components/TrustTokensView.ts | storedTokenCount":{"message":"Stored token count"},"panels/application/components/TrustTokensView.ts | trustTokens":{"message":"Private State Tokens"},"panels/application/CookieItemsView.ts | clearAllCookies":{"message":"Clear all cookies"},"panels/application/CookieItemsView.ts | clearFilteredCookies":{"message":"Clear filtered cookies"},"panels/application/CookieItemsView.ts | cookies":{"message":"Cookies"},"panels/application/CookieItemsView.ts | numberOfCookiesShownInTableS":{"message":"Number of cookies shown in table: {PH1}"},"panels/application/CookieItemsView.ts | onlyShowCookiesWhichHaveAn":{"message":"Only show cookies that have an associated issue"},"panels/application/CookieItemsView.ts | onlyShowCookiesWithAnIssue":{"message":"Only show cookies with an issue"},"panels/application/CookieItemsView.ts | selectACookieToPreviewItsValue":{"message":"Select a cookie to preview its value"},"panels/application/CookieItemsView.ts | showUrlDecoded":{"message":"Show URL-decoded"},"panels/application/DatabaseModel.ts | anUnexpectedErrorSOccurred":{"message":"An unexpected error {PH1} occurred."},"panels/application/DatabaseModel.ts | databaseNoLongerHasExpected":{"message":"Database no longer has expected version."},"panels/application/DatabaseQueryView.ts | databaseQuery":{"message":"Database Query"},"panels/application/DatabaseQueryView.ts | queryS":{"message":"Query: {PH1}"},"panels/application/DatabaseTableView.ts | anErrorOccurredTryingToreadTheS":{"message":"An error occurred trying to read the \"{PH1}\" table."},"panels/application/DatabaseTableView.ts | database":{"message":"Database"},"panels/application/DatabaseTableView.ts | refresh":{"message":"Refresh"},"panels/application/DatabaseTableView.ts | theStableIsEmpty":{"message":"The \"{PH1}\" table is empty."},"panels/application/DatabaseTableView.ts | visibleColumns":{"message":"Visible columns"},"panels/application/DOMStorageItemsView.ts | domStorage":{"message":"DOM Storage"},"panels/application/DOMStorageItemsView.ts | domStorageItemDeleted":{"message":"The storage item was deleted."},"panels/application/DOMStorageItemsView.ts | domStorageItems":{"message":"DOM Storage Items"},"panels/application/DOMStorageItemsView.ts | domStorageItemsCleared":{"message":"DOM Storage Items cleared"},"panels/application/DOMStorageItemsView.ts | domStorageNumberEntries":{"message":"Number of entries shown in table: {PH1}"},"panels/application/DOMStorageItemsView.ts | key":{"message":"Key"},"panels/application/DOMStorageItemsView.ts | selectAValueToPreview":{"message":"Select a value to preview"},"panels/application/DOMStorageItemsView.ts | value":{"message":"Value"},"panels/application/IndexedDBViews.ts | clearObjectStore":{"message":"Clear object store"},"panels/application/IndexedDBViews.ts | collapse":{"message":"Collapse"},"panels/application/IndexedDBViews.ts | dataMayBeStale":{"message":"Data may be stale"},"panels/application/IndexedDBViews.ts | deleteDatabase":{"message":"Delete database"},"panels/application/IndexedDBViews.ts | deleteSelected":{"message":"Delete selected"},"panels/application/IndexedDBViews.ts | expandRecursively":{"message":"Expand Recursively"},"panels/application/IndexedDBViews.ts | idb":{"message":"IDB"},"panels/application/IndexedDBViews.ts | indexedDb":{"message":"Indexed DB"},"panels/application/IndexedDBViews.ts | keyGeneratorValueS":{"message":"Key generator value: {PH1}"},"panels/application/IndexedDBViews.ts | keyPath":{"message":"Key path: "},"panels/application/IndexedDBViews.ts | keyString":{"message":"Key"},"panels/application/IndexedDBViews.ts | objectStores":{"message":"Object stores"},"panels/application/IndexedDBViews.ts | pleaseConfirmDeleteOfSDatabase":{"message":"Please confirm delete of \"{PH1}\" database."},"panels/application/IndexedDBViews.ts | primaryKey":{"message":"Primary key"},"panels/application/IndexedDBViews.ts | refresh":{"message":"Refresh"},"panels/application/IndexedDBViews.ts | refreshDatabase":{"message":"Refresh database"},"panels/application/IndexedDBViews.ts | showNextPage":{"message":"Show next page"},"panels/application/IndexedDBViews.ts | showPreviousPage":{"message":"Show previous page"},"panels/application/IndexedDBViews.ts | someEntriesMayHaveBeenModified":{"message":"Some entries may have been modified"},"panels/application/IndexedDBViews.ts | startFromKey":{"message":"Start from key"},"panels/application/IndexedDBViews.ts | totalEntriesS":{"message":"Total entries: {PH1}"},"panels/application/IndexedDBViews.ts | valueString":{"message":"Value"},"panels/application/IndexedDBViews.ts | version":{"message":"Version"},"panels/application/InterestGroupStorageView.ts | clickToDisplayBody":{"message":"Click on any interest group event to display the group's current state"},"panels/application/InterestGroupStorageView.ts | noDataAvailable":{"message":"No details available for the selected interest group. The browser may have left the group."},"panels/application/InterestGroupTreeElement.ts | interestGroups":{"message":"Interest Groups"},"panels/application/OpenedWindowDetailsView.ts | accessToOpener":{"message":"Access to opener"},"panels/application/OpenedWindowDetailsView.ts | clickToRevealInElementsPanel":{"message":"Click to reveal in Elements panel"},"panels/application/OpenedWindowDetailsView.ts | closed":{"message":"closed"},"panels/application/OpenedWindowDetailsView.ts | crossoriginEmbedderPolicy":{"message":"Cross-Origin Embedder Policy"},"panels/application/OpenedWindowDetailsView.ts | document":{"message":"Document"},"panels/application/OpenedWindowDetailsView.ts | no":{"message":"No"},"panels/application/OpenedWindowDetailsView.ts | openerFrame":{"message":"Opener Frame"},"panels/application/OpenedWindowDetailsView.ts | reportingTo":{"message":"reporting to"},"panels/application/OpenedWindowDetailsView.ts | security":{"message":"Security"},"panels/application/OpenedWindowDetailsView.ts | securityIsolation":{"message":"Security & Isolation"},"panels/application/OpenedWindowDetailsView.ts | showsWhetherTheOpenedWindowIs":{"message":"Shows whether the opened window is able to access its opener and vice versa"},"panels/application/OpenedWindowDetailsView.ts | type":{"message":"Type"},"panels/application/OpenedWindowDetailsView.ts | unknown":{"message":"Unknown"},"panels/application/OpenedWindowDetailsView.ts | url":{"message":"URL"},"panels/application/OpenedWindowDetailsView.ts | webWorker":{"message":"Web Worker"},"panels/application/OpenedWindowDetailsView.ts | windowWithoutTitle":{"message":"Window without title"},"panels/application/OpenedWindowDetailsView.ts | worker":{"message":"worker"},"panels/application/OpenedWindowDetailsView.ts | yes":{"message":"Yes"},"panels/application/preloading/components/PreloadingDetailsReportView.ts | detailedStatusFailure":{"message":"Preloading failed."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | detailedStatusNotTriggered":{"message":"Preloading attempt is not yet triggered."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | detailedStatusPending":{"message":"Preloading attempt is eligible but pending."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | detailedStatusReady":{"message":"Preloading finished and the result is ready for the next navigation."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | detailedStatusRunning":{"message":"Preloading is running."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | detailedStatusSuccess":{"message":"Preloading finished and used for a navigation."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | detailsAction":{"message":"Action"},"panels/application/preloading/components/PreloadingDetailsReportView.ts | detailsDetailedInformation":{"message":"Detailed information"},"panels/application/preloading/components/PreloadingDetailsReportView.ts | detailsFailureReason":{"message":"Failure reason"},"panels/application/preloading/components/PreloadingDetailsReportView.ts | detailsRuleSet":{"message":"Rule set"},"panels/application/preloading/components/PreloadingDetailsReportView.ts | detailsStatus":{"message":"Status"},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusActivatedDuringMainFrameNavigation":{"message":"Prerendered page activated during initiating page's main frame navigation."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusActivationFramePolicyNotCompatible":{"message":"The prerender was not used because the sandboxing flags or permissions policy of the initiating page was not compatible with those of the prerendering page."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusActivationNavigationParameterMismatch":{"message":"The prerender was not used because during activation time, different navigation parameters (e.g., HTTP headers) were calculated than during the original prerendering navigation request."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusAudioOutputDeviceRequested":{"message":"The prerendered page requested audio output, which is currently not supported."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusBatterySaverEnabled":{"message":"The prerender was not performed because the user requested that the browser use less battery."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusBlockedByClient":{"message":"Some resource load was blocked."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusClientCertRequested":{"message":"The prerendering navigation required a HTTP client certificate."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusCrossSiteNavigationInInitialNavigation":{"message":"The prerendering navigation failed because it targeted a cross-site URL."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusCrossSiteNavigationInMainFrameNavigation":{"message":"The prerendered page navigated to a cross-site URL."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusCrossSiteRedirectInInitialNavigation":{"message":"The prerendering navigation failed because the prerendered URL redirected to a cross-site URL."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusCrossSiteRedirectInMainFrameNavigation":{"message":"The prerendered page navigated to a URL which redirected to a cross-site URL."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusDataSaverEnabled":{"message":"The prerender was not performed because the user requested that the browser use less data."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusDownload":{"message":"The prerendered page attempted to initiate a download, which is currently not supported."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusFailToGetMemoryUsage":{"message":"The prerender was not performed because the browser encountered an internal error attempting to determine current memory usage."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusHasEffectiveUrl":{"message":"The initiating page cannot perform prerendering, because it has an effective URL that is different from its normal URL. (For example, the New Tab Page, or hosted apps.)"},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusInvalidSchemeNavigation":{"message":"The URL was not eligible to be prerendered because its scheme was not http: or https:."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusInvalidSchemeRedirect":{"message":"The prerendering navigation failed because it redirected to a URL whose scheme was not http: or https:."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusLoginAuthRequested":{"message":"The prerendering navigation required HTTP authentication, which is currently not supported."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusLowEndDevice":{"message":"The prerender was not performed because this device does not have enough total system memory to support prerendering."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusMainFrameNavigation":{"message":"The prerendered page navigated itself to another URL, which is currently not supported."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusMaxNumOfRunningPrerendersExceeded":{"message":"The prerender was not performed because the initiating page already has too many prerenders ongoing. Remove other speculation rules to enable further prerendering."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusMemoryLimitExceeded":{"message":"The prerender was not performed because the browser exceeded the prerendering memory limit."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusMemoryPressureAfterTriggered":{"message":"The prerendered page was unloaded because the browser came under critical memory pressure."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusMemoryPressureOnTrigger":{"message":"The prerender was not performed because the browser was under critical memory pressure."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusMixedContent":{"message":"The prerendered page contained mixed content."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusMojoBinderPolicy":{"message":"The prerendered page used a forbidden JavaScript API that is currently not supported."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusNavigationBadHttpStatus":{"message":"The prerendering navigation failed because of a non-2xx HTTP response status code."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusNavigationRequestBlockedByCsp":{"message":"The prerendering navigation was blocked by a Content Security Policy."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusNavigationRequestNetworkError":{"message":"The prerendering navigation encountered a network error."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusPreloadingDisabled":{"message":"The prerender was not performed because the user disabled preloading in their browser settings."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusPrerenderingDisabledByDevTools":{"message":"The prerender was not performed because DevTools has been used to disable prerendering."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusPrimaryMainFrameRendererProcessCrashed":{"message":"The initiating page crashed."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusPrimaryMainFrameRendererProcessKilled":{"message":"The initiating page was killed."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusRendererProcessCrashed":{"message":"The prerendered page crashed."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusRendererProcessKilled":{"message":"The prerendered page was killed."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusResourceLoadBlockedByClient":{"message":"Some resource load was blocked."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusSameSiteCrossOriginNavigationNotOptInInInitialNavigation":{"message":"The prerendered page navigated itself to a cross-origin same-site URL, but the destination response did not include the appropriate Supports-Loading-Mode header."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusSameSiteCrossOriginNavigationNotOptInInMainFrameNavigation":{"message":"The prerendered page navigated to a cross-origin same-site URL, but the destination response did not include the appropriate Supports-Loading-Mode header."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusSameSiteCrossOriginRedirectNotOptInInInitialNavigation":{"message":"The prerendering navigation failed because the prerendered URL redirected to a cross-origin same-site URL, but the destination response did not include the appropriate Supports-Loading-Mode header."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusSameSiteCrossOriginRedirectNotOptInInMainFrameNavigation":{"message":"The prerendered page navigated to a URL which redirected to a cross-origin same-site URL, but the destination response did not include the appropriate Supports-Loading-Mode header."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusSslCertificateError":{"message":"The prerendering navigation failed because of an invalid SSL certificate."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusTimeoutBackgrounded":{"message":"The initiating page was backgrounded for a long time, so the prerendered page was discarded."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusTriggerBackgrounded":{"message":"The initiating page was backgrounded, so the prerendered page was discarded."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | prerenderFinalStatusUaChangeRequiresReload":{"message":"Changing User Agent occured in prerendering navigation."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | selectAnElementForMoreDetails":{"message":"Select an element for more details"},"panels/application/preloading/components/PreloadingGrid.ts | action":{"message":"Action"},"panels/application/preloading/components/PreloadingGrid.ts | status":{"message":"Status"},"panels/application/preloading/components/PreloadingString.ts | PrefetchEvicted":{"message":"The prefetch was discarded for a newer prefetch because |kPrefetchNewLimits| is enabled"},"panels/application/preloading/components/PreloadingString.ts | PrefetchFailedIneligibleRedirect":{"message":"The prefetch was redirected, but the redirect URL is not eligible for prefetch."},"panels/application/preloading/components/PreloadingString.ts | PrefetchFailedInvalidRedirect":{"message":"The prefetch was redirected, but there was a problem with the redirect."},"panels/application/preloading/components/PreloadingString.ts | PrefetchFailedMIMENotSupported":{"message":"The prefetch failed because the response's Content-Type header was not supported."},"panels/application/preloading/components/PreloadingString.ts | PrefetchFailedNetError":{"message":"The prefetch failed because of a network error."},"panels/application/preloading/components/PreloadingString.ts | PrefetchFailedNon2XX":{"message":"The prefetch failed because of a non-2xx HTTP response status code."},"panels/application/preloading/components/PreloadingString.ts | PrefetchFailedPerPageLimitExceeded":{"message":"The prefetch was not performed because the initiating page already has too many prefetches ongoing."},"panels/application/preloading/components/PreloadingString.ts | PrefetchIneligibleRetryAfter":{"message":"A previous prefetch to the origin got a HTTP 503 response with an Retry-After header that has not elapsed yet."},"panels/application/preloading/components/PreloadingString.ts | PrefetchIsPrivacyDecoy":{"message":"The URL was not eligible to be prefetched because there was a registered service worker or cross-site cookies for that origin, but the prefetch was put on the network anyways and not used, to disguise that the user had some kind of previous relationship with the origin."},"panels/application/preloading/components/PreloadingString.ts | PrefetchIsStale":{"message":"Too much time elapsed between the prefetch and usage, so the prefetch was discarded."},"panels/application/preloading/components/PreloadingString.ts | PrefetchNotEligibleBatterySaverEnabled":{"message":"The prefetch was not performed because the Battery Saver setting was enabled."},"panels/application/preloading/components/PreloadingString.ts | PrefetchNotEligibleBrowserContextOffTheRecord":{"message":"The prefetch was not performed because the browser is in Incognito or Guest mode."},"panels/application/preloading/components/PreloadingString.ts | PrefetchNotEligibleDataSaverEnabled":{"message":"The prefetch was not performed because the operating system is in Data Saver mode."},"panels/application/preloading/components/PreloadingString.ts | PrefetchNotEligibleExistingProxy":{"message":"The URL is not eligible to be prefetched, because in the default network context it is configured to use a proxy server."},"panels/application/preloading/components/PreloadingString.ts | PrefetchNotEligibleHostIsNonUnique":{"message":"The URL was not eligible to be prefetched because its host was not unique (e.g., a non publicly routable IP address or a hostname which is not registry-controlled), but the prefetch was required to be proxied."},"panels/application/preloading/components/PreloadingString.ts | PrefetchNotEligibleNonDefaultStoragePartition":{"message":"The URL was not eligible to be prefetched because it uses a non-default storage partition."},"panels/application/preloading/components/PreloadingString.ts | PrefetchNotEligiblePreloadingDisabled":{"message":"The prefetch was not performed because preloading was disabled."},"panels/application/preloading/components/PreloadingString.ts | PrefetchNotEligibleSameSiteCrossOriginPrefetchRequiredProxy":{"message":"The URL was not eligible to be prefetched because the default network context cannot be configured to use the prefetch proxy for a same-site cross-origin prefetch request."},"panels/application/preloading/components/PreloadingString.ts | PrefetchNotEligibleSchemeIsNotHttps":{"message":"The URL was not eligible to be prefetched because its scheme was not https:."},"panels/application/preloading/components/PreloadingString.ts | PrefetchNotEligibleUserHasCookies":{"message":"The URL was not eligible to be prefetched because it was cross-site, but the user had cookies for that origin."},"panels/application/preloading/components/PreloadingString.ts | PrefetchNotEligibleUserHasServiceWorker":{"message":"The URL was not eligible to be prefetched because there was a registered service worker for that origin, which is currently not supported."},"panels/application/preloading/components/PreloadingString.ts | PrefetchNotUsedCookiesChanged":{"message":"The prefetch was not used because it was a cross-site prefetch, and cookies were added for that URL while the prefetch was ongoing, so the prefetched response is now out-of-date."},"panels/application/preloading/components/PreloadingString.ts | PrefetchNotUsedProbeFailed":{"message":"The prefetch was blocked by your Internet Service Provider or network administrator."},"panels/application/preloading/components/PreloadingString.ts | PrefetchProxyNotAvailable":{"message":"A network error was encountered when trying to set up a connection to the prefetching proxy."},"panels/application/preloading/components/RuleSetDetailsReportView.ts | buttonClickToRevealInElementsPanel":{"message":"Click to reveal in Elements panel"},"panels/application/preloading/components/RuleSetDetailsReportView.ts | buttonClickToRevealInNetworkPanel":{"message":"Click to reveal in Network panel"},"panels/application/preloading/components/RuleSetDetailsReportView.ts | detailsDetailedInformation":{"message":"Detailed information"},"panels/application/preloading/components/RuleSetDetailsReportView.ts | detailsError":{"message":"Error"},"panels/application/preloading/components/RuleSetDetailsReportView.ts | detailsLocation":{"message":"Location"},"panels/application/preloading/components/RuleSetDetailsReportView.ts | detailsSource":{"message":"Source"},"panels/application/preloading/components/RuleSetDetailsReportView.ts | detailsValidity":{"message":"Validity"},"panels/application/preloading/components/RuleSetDetailsReportView.ts | validityInvalid":{"message":"Invalid; source is not a JSON object"},"panels/application/preloading/components/RuleSetDetailsReportView.ts | validitySomeRulesInvalid":{"message":"Some rules are invalid and ignored"},"panels/application/preloading/components/RuleSetDetailsReportView.ts | validityValid":{"message":"Valid"},"panels/application/preloading/components/RuleSetGrid.ts | location":{"message":"Location"},"panels/application/preloading/components/RuleSetGrid.ts | validity":{"message":"Validity"},"panels/application/preloading/components/UsedPreloadingView.ts | prefetchUsed":{"message":"{PH1} prefetched resources are used for this page"},"panels/application/preloading/components/UsedPreloadingView.ts | preloadingUsedForThisPage":{"message":"Preloading used for this page"},"panels/application/preloading/components/UsedPreloadingView.ts | prerenderUsed":{"message":"This page was prerendered"},"panels/application/preloading/PreloadingView.ts | extensionSettings":{"message":"Extensions settings"},"panels/application/preloading/PreloadingView.ts | filterAllRuleSets":{"message":"All rule sets"},"panels/application/preloading/PreloadingView.ts | filterFilterByRuleSet":{"message":"Filter by rule set"},"panels/application/preloading/PreloadingView.ts | filterRuleSet":{"message":"Rule set: {PH1}"},"panels/application/preloading/PreloadingView.ts | preloadingPageSettings":{"message":"Preload pages settings"},"panels/application/preloading/PreloadingView.ts | statusFailure":{"message":"Failure"},"panels/application/preloading/PreloadingView.ts | statusNotTriggered":{"message":"Not triggered"},"panels/application/preloading/PreloadingView.ts | statusPending":{"message":"Pending"},"panels/application/preloading/PreloadingView.ts | statusReady":{"message":"Ready"},"panels/application/preloading/PreloadingView.ts | statusRunning":{"message":"Running"},"panels/application/preloading/PreloadingView.ts | statusSuccess":{"message":"Success"},"panels/application/preloading/PreloadingView.ts | validityInvalid":{"message":"Invalid"},"panels/application/preloading/PreloadingView.ts | validitySomeRulesInvalid":{"message":"Some rules invalid"},"panels/application/preloading/PreloadingView.ts | validityValid":{"message":"Valid"},"panels/application/preloading/PreloadingView.ts | warningDetailPreloadingDisabledByBatterysaver":{"message":"Preloading is disabled because of the operating system's Battery Saver mode."},"panels/application/preloading/PreloadingView.ts | warningDetailPreloadingDisabledByDatasaver":{"message":"Preloading is disabled because of the operating system's Data Saver mode."},"panels/application/preloading/PreloadingView.ts | warningDetailPreloadingDisabledByFeatureFlag":{"message":"Preloading is forced-enabled because DevTools is open. When DevTools is closed, prerendering will be disabled because this browser session is part of a holdback group used for performance comparisons."},"panels/application/preloading/PreloadingView.ts | warningDetailPreloadingStateDisabled":{"message":"Preloading is disabled because of user settings or an extension. Go to {PH1} to learn more, or go to {PH2} to disable the extension."},"panels/application/preloading/PreloadingView.ts | warningDetailPrerenderingDisabledByFeatureFlag":{"message":"Prerendering is forced-enabled because DevTools is open. When DevTools is closed, prerendering will be disabled because this browser session is part of a holdback group used for performance comparisons."},"panels/application/preloading/PreloadingView.ts | warningTitlePreloadingDisabledByFeatureFlag":{"message":"Preloading was disabled, but is force-enabled now"},"panels/application/preloading/PreloadingView.ts | warningTitlePreloadingStateDisabled":{"message":"Preloading is disabled"},"panels/application/preloading/PreloadingView.ts | warningTitlePrerenderingDisabledByFeatureFlag":{"message":"Prerendering was disabled, but is force-enabled now"},"panels/application/PreloadingTreeElement.ts | prefetchingAndPrerendering":{"message":"Prefetching & Prerendering"},"panels/application/PreloadingTreeElement.ts | thisPage":{"message":"This Page"},"panels/application/ReportingApiReportsView.ts | clickToDisplayBody":{"message":"Click on any report to display its body"},"panels/application/ReportingApiTreeElement.ts | reportingApi":{"message":"Reporting API"},"panels/application/ServiceWorkerCacheTreeElement.ts | cacheStorage":{"message":"Cache Storage"},"panels/application/ServiceWorkerCacheTreeElement.ts | delete":{"message":"Delete"},"panels/application/ServiceWorkerCacheTreeElement.ts | refreshCaches":{"message":"Refresh Caches"},"panels/application/ServiceWorkerCacheViews.ts | cache":{"message":"Cache"},"panels/application/ServiceWorkerCacheViews.ts | deleteSelected":{"message":"Delete Selected"},"panels/application/ServiceWorkerCacheViews.ts | filterByPath":{"message":"Filter by Path"},"panels/application/ServiceWorkerCacheViews.ts | headers":{"message":"Headers"},"panels/application/ServiceWorkerCacheViews.ts | matchingEntriesS":{"message":"Matching entries: {PH1}"},"panels/application/ServiceWorkerCacheViews.ts | name":{"message":"Name"},"panels/application/ServiceWorkerCacheViews.ts | preview":{"message":"Preview"},"panels/application/ServiceWorkerCacheViews.ts | refresh":{"message":"Refresh"},"panels/application/ServiceWorkerCacheViews.ts | selectACacheEntryAboveToPreview":{"message":"Select a cache entry above to preview"},"panels/application/ServiceWorkerCacheViews.ts | serviceWorkerCache":{"message":"Service Worker Cache"},"panels/application/ServiceWorkerCacheViews.ts | timeCached":{"message":"Time Cached"},"panels/application/ServiceWorkerCacheViews.ts | totalEntriesS":{"message":"Total entries: {PH1}"},"panels/application/ServiceWorkerCacheViews.ts | varyHeaderWarning":{"message":"⚠️ Set ignoreVary to true when matching this entry"},"panels/application/ServiceWorkersView.ts | bypassForNetwork":{"message":"Bypass for network"},"panels/application/ServiceWorkersView.ts | bypassTheServiceWorkerAndLoad":{"message":"Bypass the service worker and load resources from the network"},"panels/application/ServiceWorkersView.ts | clients":{"message":"Clients"},"panels/application/ServiceWorkersView.ts | focus":{"message":"focus"},"panels/application/ServiceWorkersView.ts | inspect":{"message":"inspect"},"panels/application/ServiceWorkersView.ts | networkRequests":{"message":"Network requests"},"panels/application/ServiceWorkersView.ts | onPageReloadForceTheService":{"message":"On page reload, force the service worker to update, and activate it"},"panels/application/ServiceWorkersView.ts | periodicSync":{"message":"Periodic Sync"},"panels/application/ServiceWorkersView.ts | periodicSyncTag":{"message":"Periodic Sync tag"},"panels/application/ServiceWorkersView.ts | pushData":{"message":"Push data"},"panels/application/ServiceWorkersView.ts | pushString":{"message":"Push"},"panels/application/ServiceWorkersView.ts | receivedS":{"message":"Received {PH1}"},"panels/application/ServiceWorkersView.ts | sActivatedAndIsS":{"message":"#{PH1} activated and is {PH2}"},"panels/application/ServiceWorkersView.ts | sDeleted":{"message":"{PH1} - deleted"},"panels/application/ServiceWorkersView.ts | seeAllRegistrations":{"message":"See all registrations"},"panels/application/ServiceWorkersView.ts | serviceWorkerForS":{"message":"Service worker for {PH1}"},"panels/application/ServiceWorkersView.ts | serviceWorkersFromOtherOrigins":{"message":"Service workers from other origins"},"panels/application/ServiceWorkersView.ts | sIsRedundant":{"message":"#{PH1} is redundant"},"panels/application/ServiceWorkersView.ts | source":{"message":"Source"},"panels/application/ServiceWorkersView.ts | sRegistrationErrors":{"message":"{PH1} registration errors"},"panels/application/ServiceWorkersView.ts | startString":{"message":"start"},"panels/application/ServiceWorkersView.ts | status":{"message":"Status"},"panels/application/ServiceWorkersView.ts | stopString":{"message":"stop"},"panels/application/ServiceWorkersView.ts | sTryingToInstall":{"message":"#{PH1} trying to install"},"panels/application/ServiceWorkersView.ts | sWaitingToActivate":{"message":"#{PH1} waiting to activate"},"panels/application/ServiceWorkersView.ts | syncString":{"message":"Sync"},"panels/application/ServiceWorkersView.ts | syncTag":{"message":"Sync tag"},"panels/application/ServiceWorkersView.ts | testPushMessageFromDevtools":{"message":"Test push message from DevTools."},"panels/application/ServiceWorkersView.ts | unregister":{"message":"Unregister"},"panels/application/ServiceWorkersView.ts | unregisterServiceWorker":{"message":"Unregister service worker"},"panels/application/ServiceWorkersView.ts | update":{"message":"Update"},"panels/application/ServiceWorkersView.ts | updateCycle":{"message":"Update Cycle"},"panels/application/ServiceWorkersView.ts | updateOnReload":{"message":"Update on reload"},"panels/application/ServiceWorkersView.ts | workerS":{"message":"Worker: {PH1}"},"panels/application/ServiceWorkerUpdateCycleView.ts | endTimeS":{"message":"End time: {PH1}"},"panels/application/ServiceWorkerUpdateCycleView.ts | startTimeS":{"message":"Start time: {PH1}"},"panels/application/ServiceWorkerUpdateCycleView.ts | timeline":{"message":"Timeline"},"panels/application/ServiceWorkerUpdateCycleView.ts | updateActivity":{"message":"Update Activity"},"panels/application/ServiceWorkerUpdateCycleView.ts | version":{"message":"Version"},"panels/application/SharedStorageEventsView.ts | clickToDisplayBody":{"message":"Click on any shared storage event to display the event parameters."},"panels/application/SharedStorageItemsView.ts | key":{"message":"Key"},"panels/application/SharedStorageItemsView.ts | selectAValueToPreview":{"message":"Select a value to preview"},"panels/application/SharedStorageItemsView.ts | sharedStorage":{"message":"Shared Storage"},"panels/application/SharedStorageItemsView.ts | sharedStorageFilteredItemsCleared":{"message":"Shared Storage filtered items cleared"},"panels/application/SharedStorageItemsView.ts | sharedStorageItemDeleted":{"message":"The storage item was deleted."},"panels/application/SharedStorageItemsView.ts | sharedStorageItemEditCanceled":{"message":"The storage item edit was canceled."},"panels/application/SharedStorageItemsView.ts | sharedStorageItemEdited":{"message":"The storage item was edited."},"panels/application/SharedStorageItemsView.ts | sharedStorageItems":{"message":"Shared Storage Items"},"panels/application/SharedStorageItemsView.ts | sharedStorageItemsCleared":{"message":"Shared Storage items cleared"},"panels/application/SharedStorageItemsView.ts | sharedStorageNumberEntries":{"message":"Number of entries shown in table: {PH1}"},"panels/application/SharedStorageItemsView.ts | value":{"message":"Value"},"panels/application/SharedStorageListTreeElement.ts | sharedStorage":{"message":"Shared Storage"},"panels/application/StorageItemsView.ts | clearAll":{"message":"Clear All"},"panels/application/StorageItemsView.ts | deleteSelected":{"message":"Delete Selected"},"panels/application/StorageItemsView.ts | filter":{"message":"Filter"},"panels/application/StorageItemsView.ts | refresh":{"message":"Refresh"},"panels/application/StorageItemsView.ts | refreshedStatus":{"message":"Table refreshed"},"panels/application/StorageView.ts | application":{"message":"Application"},"panels/application/StorageView.ts | cache":{"message":"Cache"},"panels/application/StorageView.ts | cacheStorage":{"message":"Cache storage"},"panels/application/StorageView.ts | clearing":{"message":"Clearing..."},"panels/application/StorageView.ts | clearSiteData":{"message":"Clear site data"},"panels/application/StorageView.ts | cookies":{"message":"Cookies"},"panels/application/StorageView.ts | fileSystem":{"message":"File System"},"panels/application/StorageView.ts | includingThirdPartyCookies":{"message":"including third-party cookies"},"panels/application/StorageView.ts | indexDB":{"message":"IndexedDB"},"panels/application/StorageView.ts | internalError":{"message":"Internal error"},"panels/application/StorageView.ts | learnMore":{"message":"Learn more"},"panels/application/StorageView.ts | localAndSessionStorage":{"message":"Local and session storage"},"panels/application/StorageView.ts | mb":{"message":"MB"},"panels/application/StorageView.ts | numberMustBeNonNegative":{"message":"Number must be non-negative"},"panels/application/StorageView.ts | numberMustBeSmaller":{"message":"Number must be smaller than {PH1}"},"panels/application/StorageView.ts | other":{"message":"Other"},"panels/application/StorageView.ts | pleaseEnterANumber":{"message":"Please enter a number"},"panels/application/StorageView.ts | serviceWorkers":{"message":"Service Workers"},"panels/application/StorageView.ts | sFailedToLoad":{"message":"{PH1} (failed to load)"},"panels/application/StorageView.ts | simulateCustomStorage":{"message":"Simulate custom storage quota"},"panels/application/StorageView.ts | SiteDataCleared":{"message":"Site data cleared"},"panels/application/StorageView.ts | storageQuotaIsLimitedIn":{"message":"Storage quota is limited in Incognito mode"},"panels/application/StorageView.ts | storageQuotaUsed":{"message":"{PH1} used out of {PH2} storage quota"},"panels/application/StorageView.ts | storageQuotaUsedWithBytes":{"message":"{PH1} bytes used out of {PH2} bytes storage quota"},"panels/application/StorageView.ts | storageTitle":{"message":"Storage"},"panels/application/StorageView.ts | storageUsage":{"message":"Storage usage"},"panels/application/StorageView.ts | storageWithCustomMarker":{"message":"{PH1} (custom)"},"panels/application/StorageView.ts | unregisterServiceWorker":{"message":"Unregister service workers"},"panels/application/StorageView.ts | usage":{"message":"Usage"},"panels/application/StorageView.ts | webSql":{"message":"Web SQL"},"panels/application/TrustTokensTreeElement.ts | trustTokens":{"message":"Private State Tokens"},"panels/browser_debugger/browser_debugger-meta.ts | contentScripts":{"message":"Content scripts"},"panels/browser_debugger/browser_debugger-meta.ts | cspViolationBreakpoints":{"message":"CSP Violation Breakpoints"},"panels/browser_debugger/browser_debugger-meta.ts | domBreakpoints":{"message":"DOM Breakpoints"},"panels/browser_debugger/browser_debugger-meta.ts | eventListenerBreakpoints":{"message":"Event Listener Breakpoints"},"panels/browser_debugger/browser_debugger-meta.ts | globalListeners":{"message":"Global Listeners"},"panels/browser_debugger/browser_debugger-meta.ts | overrides":{"message":"Overrides"},"panels/browser_debugger/browser_debugger-meta.ts | page":{"message":"Page"},"panels/browser_debugger/browser_debugger-meta.ts | showContentScripts":{"message":"Show Content scripts"},"panels/browser_debugger/browser_debugger-meta.ts | showCspViolationBreakpoints":{"message":"Show CSP Violation Breakpoints"},"panels/browser_debugger/browser_debugger-meta.ts | showDomBreakpoints":{"message":"Show DOM Breakpoints"},"panels/browser_debugger/browser_debugger-meta.ts | showEventListenerBreakpoints":{"message":"Show Event Listener Breakpoints"},"panels/browser_debugger/browser_debugger-meta.ts | showGlobalListeners":{"message":"Show Global Listeners"},"panels/browser_debugger/browser_debugger-meta.ts | showOverrides":{"message":"Show Overrides"},"panels/browser_debugger/browser_debugger-meta.ts | showPage":{"message":"Show Page"},"panels/browser_debugger/browser_debugger-meta.ts | showXhrfetchBreakpoints":{"message":"Show XHR/fetch Breakpoints"},"panels/browser_debugger/browser_debugger-meta.ts | xhrfetchBreakpoints":{"message":"XHR/fetch Breakpoints"},"panels/browser_debugger/CategorizedBreakpointsSidebarPane.ts | breakpointHit":{"message":"breakpoint hit"},"panels/browser_debugger/DOMBreakpointsSidebarPane.ts | attributeModified":{"message":"Attribute modified"},"panels/browser_debugger/DOMBreakpointsSidebarPane.ts | breakOn":{"message":"Break on"},"panels/browser_debugger/DOMBreakpointsSidebarPane.ts | breakpointHit":{"message":"breakpoint hit"},"panels/browser_debugger/DOMBreakpointsSidebarPane.ts | breakpointRemoved":{"message":"Breakpoint removed"},"panels/browser_debugger/DOMBreakpointsSidebarPane.ts | breakpointSet":{"message":"Breakpoint set"},"panels/browser_debugger/DOMBreakpointsSidebarPane.ts | checked":{"message":"checked"},"panels/browser_debugger/DOMBreakpointsSidebarPane.ts | domBreakpointsList":{"message":"DOM Breakpoints list"},"panels/browser_debugger/DOMBreakpointsSidebarPane.ts | noBreakpoints":{"message":"No breakpoints"},"panels/browser_debugger/DOMBreakpointsSidebarPane.ts | nodeRemoved":{"message":"Node removed"},"panels/browser_debugger/DOMBreakpointsSidebarPane.ts | removeAllDomBreakpoints":{"message":"Remove all DOM breakpoints"},"panels/browser_debugger/DOMBreakpointsSidebarPane.ts | removeBreakpoint":{"message":"Remove breakpoint"},"panels/browser_debugger/DOMBreakpointsSidebarPane.ts | revealDomNodeInElementsPanel":{"message":"Reveal DOM node in Elements panel"},"panels/browser_debugger/DOMBreakpointsSidebarPane.ts | sBreakpointHit":{"message":"{PH1} breakpoint hit"},"panels/browser_debugger/DOMBreakpointsSidebarPane.ts | sS":{"message":"{PH1}: {PH2}"},"panels/browser_debugger/DOMBreakpointsSidebarPane.ts | sSS":{"message":"{PH1}: {PH2}, {PH3}"},"panels/browser_debugger/DOMBreakpointsSidebarPane.ts | subtreeModified":{"message":"Subtree modified"},"panels/browser_debugger/DOMBreakpointsSidebarPane.ts | unchecked":{"message":"unchecked"},"panels/browser_debugger/ObjectEventListenersSidebarPane.ts | refreshGlobalListeners":{"message":"Refresh global listeners"},"panels/browser_debugger/XHRBreakpointsSidebarPane.ts | addBreakpoint":{"message":"Add breakpoint"},"panels/browser_debugger/XHRBreakpointsSidebarPane.ts | addXhrfetchBreakpoint":{"message":"Add XHR/fetch breakpoint"},"panels/browser_debugger/XHRBreakpointsSidebarPane.ts | anyXhrOrFetch":{"message":"Any XHR or fetch"},"panels/browser_debugger/XHRBreakpointsSidebarPane.ts | breakpointHit":{"message":"breakpoint hit"},"panels/browser_debugger/XHRBreakpointsSidebarPane.ts | breakWhenUrlContains":{"message":"Break when URL contains:"},"panels/browser_debugger/XHRBreakpointsSidebarPane.ts | noBreakpoints":{"message":"No breakpoints"},"panels/browser_debugger/XHRBreakpointsSidebarPane.ts | removeAllBreakpoints":{"message":"Remove all breakpoints"},"panels/browser_debugger/XHRBreakpointsSidebarPane.ts | removeBreakpoint":{"message":"Remove breakpoint"},"panels/browser_debugger/XHRBreakpointsSidebarPane.ts | urlBreakpoint":{"message":"URL Breakpoint"},"panels/browser_debugger/XHRBreakpointsSidebarPane.ts | urlContainsS":{"message":"URL contains \"{PH1}\""},"panels/browser_debugger/XHRBreakpointsSidebarPane.ts | xhrfetchBreakpoints":{"message":"XHR/fetch Breakpoints"},"panels/changes/changes-meta.ts | changes":{"message":"Changes"},"panels/changes/changes-meta.ts | showChanges":{"message":"Show Changes"},"panels/changes/ChangesSidebar.ts | sFromSourceMap":{"message":"{PH1} (from source map)"},"panels/changes/ChangesView.ts | binaryData":{"message":"Binary data"},"panels/changes/ChangesView.ts | copy":{"message":"Copy"},"panels/changes/ChangesView.ts | copyAllChangesFromCurrentFile":{"message":"Copy all changes from current file"},"panels/changes/ChangesView.ts | noChanges":{"message":"No changes"},"panels/changes/ChangesView.ts | revertAllChangesToCurrentFile":{"message":"Revert all changes to current file"},"panels/changes/ChangesView.ts | sDeletions":{"message":"{n, plural, =1 {# deletion (-)} other {# deletions (-)}}"},"panels/changes/ChangesView.ts | sInsertions":{"message":"{n, plural, =1 {# insertion (+)} other {# insertions (+)}}"},"panels/console_counters/WarningErrorCounter.ts | openConsoleToViewS":{"message":"Open Console to view {PH1}"},"panels/console_counters/WarningErrorCounter.ts | openIssuesToView":{"message":"{n, plural, =1 {Open Issues to view # issue:} other {Open Issues to view # issues:}}"},"panels/console_counters/WarningErrorCounter.ts | sErrors":{"message":"{n, plural, =1 {# error} other {# errors}}"},"panels/console_counters/WarningErrorCounter.ts | sWarnings":{"message":"{n, plural, =1 {# warning} other {# warnings}}"},"panels/console/console-meta.ts | autocompleteFromHistory":{"message":"Autocomplete from history"},"panels/console/console-meta.ts | autocompleteOnEnter":{"message":"Accept autocomplete suggestion on Enter"},"panels/console/console-meta.ts | clearConsole":{"message":"Clear console"},"panels/console/console-meta.ts | clearConsoleHistory":{"message":"Clear console history"},"panels/console/console-meta.ts | collapseConsoleTraceMessagesByDefault":{"message":"Do not automatically expand console.trace() messages"},"panels/console/console-meta.ts | console":{"message":"Console"},"panels/console/console-meta.ts | createLiveExpression":{"message":"Create live expression"},"panels/console/console-meta.ts | doNotAutocompleteFromHistory":{"message":"Do not autocomplete from history"},"panels/console/console-meta.ts | doNotAutocompleteOnEnter":{"message":"Do not accept autocomplete suggestion on Enter"},"panels/console/console-meta.ts | doNotEagerlyEvaluateConsole":{"message":"Do not eagerly evaluate console prompt text"},"panels/console/console-meta.ts | doNotGroupSimilarMessagesIn":{"message":"Do not group similar messages in console"},"panels/console/console-meta.ts | doNotShowCorsErrorsIn":{"message":"Do not show CORS errors in console"},"panels/console/console-meta.ts | doNotTreatEvaluationAsUser":{"message":"Do not treat evaluation as user activation"},"panels/console/console-meta.ts | eagerEvaluation":{"message":"Eager evaluation"},"panels/console/console-meta.ts | eagerlyEvaluateConsolePromptText":{"message":"Eagerly evaluate console prompt text"},"panels/console/console-meta.ts | evaluateTriggersUserActivation":{"message":"Treat code evaluation as user action"},"panels/console/console-meta.ts | expandConsoleTraceMessagesByDefault":{"message":"Automatically expand console.trace() messages"},"panels/console/console-meta.ts | groupSimilarMessagesInConsole":{"message":"Group similar messages in console"},"panels/console/console-meta.ts | hideNetworkMessages":{"message":"Hide network messages"},"panels/console/console-meta.ts | hideTimestamps":{"message":"Hide timestamps"},"panels/console/console-meta.ts | logXmlhttprequests":{"message":"Log XMLHttpRequests"},"panels/console/console-meta.ts | onlyShowMessagesFromTheCurrent":{"message":"Only show messages from the current context (top, iframe, worker, extension)"},"panels/console/console-meta.ts | selectedContextOnly":{"message":"Selected context only"},"panels/console/console-meta.ts | showConsole":{"message":"Show Console"},"panels/console/console-meta.ts | showCorsErrorsInConsole":{"message":"Show CORS errors in console"},"panels/console/console-meta.ts | showMessagesFromAllContexts":{"message":"Show messages from all contexts"},"panels/console/console-meta.ts | showNetworkMessages":{"message":"Show network messages"},"panels/console/console-meta.ts | showTimestamps":{"message":"Show timestamps"},"panels/console/console-meta.ts | treatEvaluationAsUserActivation":{"message":"Treat evaluation as user activation"},"panels/console/ConsoleContextSelector.ts | extension":{"message":"Extension"},"panels/console/ConsoleContextSelector.ts | javascriptContextNotSelected":{"message":"JavaScript context: Not selected"},"panels/console/ConsoleContextSelector.ts | javascriptContextS":{"message":"JavaScript context: {PH1}"},"panels/console/ConsolePinPane.ts | evaluateAllowingSideEffects":{"message":"Evaluate, allowing side effects"},"panels/console/ConsolePinPane.ts | expression":{"message":"Expression"},"panels/console/ConsolePinPane.ts | liveExpressionEditor":{"message":"Live expression editor"},"panels/console/ConsolePinPane.ts | notAvailable":{"message":"not available"},"panels/console/ConsolePinPane.ts | removeAllExpressions":{"message":"Remove all expressions"},"panels/console/ConsolePinPane.ts | removeBlankExpression":{"message":"Remove blank expression"},"panels/console/ConsolePinPane.ts | removeExpression":{"message":"Remove expression"},"panels/console/ConsolePinPane.ts | removeExpressionS":{"message":"Remove expression: {PH1}"},"panels/console/ConsolePrompt.ts | consolePrompt":{"message":"Console prompt"},"panels/console/ConsoleSidebar.ts | dErrors":{"message":"{n, plural, =0 {No errors} =1 {# error} other {# errors}}"},"panels/console/ConsoleSidebar.ts | dInfo":{"message":"{n, plural, =0 {No info} =1 {# info} other {# info}}"},"panels/console/ConsoleSidebar.ts | dMessages":{"message":"{n, plural, =0 {No messages} =1 {# message} other {# messages}}"},"panels/console/ConsoleSidebar.ts | dUserMessages":{"message":"{n, plural, =0 {No user messages} =1 {# user message} other {# user messages}}"},"panels/console/ConsoleSidebar.ts | dVerbose":{"message":"{n, plural, =0 {No verbose} =1 {# verbose} other {# verbose}}"},"panels/console/ConsoleSidebar.ts | dWarnings":{"message":"{n, plural, =0 {No warnings} =1 {# warning} other {# warnings}}"},"panels/console/ConsoleSidebar.ts | other":{"message":""},"panels/console/ConsoleView.ts | allLevels":{"message":"All levels"},"panels/console/ConsoleView.ts | autocompleteFromHistory":{"message":"Autocomplete from history"},"panels/console/ConsoleView.ts | consoleCleared":{"message":"Console cleared"},"panels/console/ConsoleView.ts | consolePasteBlocked":{"message":"Pasting code is blocked on this page. Pasting code into devtools can allow attackers to take over your account."},"panels/console/ConsoleView.ts | consoleSettings":{"message":"Console settings"},"panels/console/ConsoleView.ts | consoleSidebarHidden":{"message":"Console sidebar hidden"},"panels/console/ConsoleView.ts | consoleSidebarShown":{"message":"Console sidebar shown"},"panels/console/ConsoleView.ts | copyVisibleStyledSelection":{"message":"Copy visible styled selection"},"panels/console/ConsoleView.ts | customLevels":{"message":"Custom levels"},"panels/console/ConsoleView.ts | default":{"message":"Default"},"panels/console/ConsoleView.ts | defaultLevels":{"message":"Default levels"},"panels/console/ConsoleView.ts | doNotClearLogOnPageReload":{"message":"Do not clear log on page reload / navigation"},"panels/console/ConsoleView.ts | eagerlyEvaluateTextInThePrompt":{"message":"Eagerly evaluate text in the prompt"},"panels/console/ConsoleView.ts | egEventdCdnUrlacom":{"message":"e.g. /eventd/ -cdn url:a.com"},"panels/console/ConsoleView.ts | errors":{"message":"Errors"},"panels/console/ConsoleView.ts | filter":{"message":"Filter"},"panels/console/ConsoleView.ts | filteredMessagesInConsole":{"message":"{PH1} messages in console"},"panels/console/ConsoleView.ts | findStringInLogs":{"message":"Find string in logs"},"panels/console/ConsoleView.ts | groupSimilarMessagesInConsole":{"message":"Group similar messages in console"},"panels/console/ConsoleView.ts | hideAll":{"message":"Hide all"},"panels/console/ConsoleView.ts | hideConsoleSidebar":{"message":"Hide console sidebar"},"panels/console/ConsoleView.ts | hideMessagesFromS":{"message":"Hide messages from {PH1}"},"panels/console/ConsoleView.ts | hideNetwork":{"message":"Hide network"},"panels/console/ConsoleView.ts | info":{"message":"Info"},"panels/console/ConsoleView.ts | issuesWithColon":{"message":"{n, plural, =0 {No Issues} =1 {# Issue:} other {# Issues:}}"},"panels/console/ConsoleView.ts | issueToolbarClickToGoToTheIssuesTab":{"message":"Click to go to the issues tab"},"panels/console/ConsoleView.ts | issueToolbarClickToView":{"message":"Click to view {issueEnumeration}"},"panels/console/ConsoleView.ts | issueToolbarTooltipGeneral":{"message":"Some problems no longer generate console messages, but are surfaced in the issues tab."},"panels/console/ConsoleView.ts | logLevels":{"message":"Log levels"},"panels/console/ConsoleView.ts | logLevelS":{"message":"Log level: {PH1}"},"panels/console/ConsoleView.ts | logXMLHttpRequests":{"message":"Log XMLHttpRequests"},"panels/console/ConsoleView.ts | onlyShowMessagesFromTheCurrentContext":{"message":"Only show messages from the current context (top, iframe, worker, extension)"},"panels/console/ConsoleView.ts | overriddenByFilterSidebar":{"message":"Overridden by filter sidebar"},"panels/console/ConsoleView.ts | preserveLog":{"message":"Preserve log"},"panels/console/ConsoleView.ts | replayXhr":{"message":"Replay XHR"},"panels/console/ConsoleView.ts | saveAs":{"message":"Save as..."},"panels/console/ConsoleView.ts | searching":{"message":"Searching…"},"panels/console/ConsoleView.ts | selectedContextOnly":{"message":"Selected context only"},"panels/console/ConsoleView.ts | sHidden":{"message":"{n, plural, =1 {# hidden} other {# hidden}}"},"panels/console/ConsoleView.ts | showConsoleSidebar":{"message":"Show console sidebar"},"panels/console/ConsoleView.ts | showCorsErrorsInConsole":{"message":"Show CORS errors in console"},"panels/console/ConsoleView.ts | sOnly":{"message":"{PH1} only"},"panels/console/ConsoleView.ts | treatEvaluationAsUserActivation":{"message":"Treat evaluation as user activation"},"panels/console/ConsoleView.ts | verbose":{"message":"Verbose"},"panels/console/ConsoleView.ts | warnings":{"message":"Warnings"},"panels/console/ConsoleView.ts | writingFile":{"message":"Writing file…"},"panels/console/ConsoleViewMessage.ts | assertionFailed":{"message":"Assertion failed: "},"panels/console/ConsoleViewMessage.ts | attribute":{"message":""},"panels/console/ConsoleViewMessage.ts | clearAllMessagesWithS":{"message":"Clear all messages with {PH1}"},"panels/console/ConsoleViewMessage.ts | cndBreakpoint":{"message":"Conditional Breakpoint"},"panels/console/ConsoleViewMessage.ts | console":{"message":"Console"},"panels/console/ConsoleViewMessage.ts | consoleclearWasPreventedDueTo":{"message":"console.clear() was prevented due to 'Preserve log'"},"panels/console/ConsoleViewMessage.ts | consoleWasCleared":{"message":"Console was cleared"},"panels/console/ConsoleViewMessage.ts | deprecationS":{"message":"[Deprecation] {PH1}"},"panels/console/ConsoleViewMessage.ts | error":{"message":"Error"},"panels/console/ConsoleViewMessage.ts | errorS":{"message":"{n, plural, =1 {Error, Repeated # time} other {Error, Repeated # times}}"},"panels/console/ConsoleViewMessage.ts | exception":{"message":""},"panels/console/ConsoleViewMessage.ts | functionWasResolvedFromBound":{"message":"Function was resolved from bound function."},"panels/console/ConsoleViewMessage.ts | index":{"message":"(index)"},"panels/console/ConsoleViewMessage.ts | interventionS":{"message":"[Intervention] {PH1}"},"panels/console/ConsoleViewMessage.ts | logpoint":{"message":"Logpoint"},"panels/console/ConsoleViewMessage.ts | Mxx":{"message":" M"},"panels/console/ConsoleViewMessage.ts | repeatS":{"message":"{n, plural, =1 {Repeated # time} other {Repeated # times}}"},"panels/console/ConsoleViewMessage.ts | someEvent":{"message":" event"},"panels/console/ConsoleViewMessage.ts | stackMessageCollapsed":{"message":"Stack table collapsed"},"panels/console/ConsoleViewMessage.ts | stackMessageExpanded":{"message":"Stack table expanded"},"panels/console/ConsoleViewMessage.ts | thisValueWasEvaluatedUponFirst":{"message":"This value was evaluated upon first expanding. It may have changed since then."},"panels/console/ConsoleViewMessage.ts | thisValueWillNotBeCollectedUntil":{"message":"This value will not be collected until console is cleared."},"panels/console/ConsoleViewMessage.ts | tookNms":{"message":"took ms"},"panels/console/ConsoleViewMessage.ts | url":{"message":""},"panels/console/ConsoleViewMessage.ts | value":{"message":"Value"},"panels/console/ConsoleViewMessage.ts | violationS":{"message":"[Violation] {PH1}"},"panels/console/ConsoleViewMessage.ts | warning":{"message":"Warning"},"panels/console/ConsoleViewMessage.ts | warningS":{"message":"{n, plural, =1 {Warning, Repeated # time} other {Warning, Repeated # times}}"},"panels/coverage/coverage-meta.ts | coverage":{"message":"Coverage"},"panels/coverage/coverage-meta.ts | instrumentCoverage":{"message":"Instrument coverage"},"panels/coverage/coverage-meta.ts | reloadPage":{"message":"Reload page"},"panels/coverage/coverage-meta.ts | showCoverage":{"message":"Show Coverage"},"panels/coverage/coverage-meta.ts | startInstrumentingCoverageAnd":{"message":"Start instrumenting coverage and reload page"},"panels/coverage/coverage-meta.ts | stopInstrumentingCoverageAndShow":{"message":"Stop instrumenting coverage and show results"},"panels/coverage/CoverageListView.ts | codeCoverage":{"message":"Code Coverage"},"panels/coverage/CoverageListView.ts | css":{"message":"CSS"},"panels/coverage/CoverageListView.ts | jsCoverageWithPerBlock":{"message":"JS coverage with per block granularity: Once a block of JavaScript was executed, that block is marked as covered."},"panels/coverage/CoverageListView.ts | jsCoverageWithPerFunction":{"message":"JS coverage with per function granularity: Once a function was executed, the whole function is marked as covered."},"panels/coverage/CoverageListView.ts | jsPerBlock":{"message":"JS (per block)"},"panels/coverage/CoverageListView.ts | jsPerFunction":{"message":"JS (per function)"},"panels/coverage/CoverageListView.ts | sBytes":{"message":"{n, plural, =1 {# byte} other {# bytes}}"},"panels/coverage/CoverageListView.ts | sBytesS":{"message":"{n, plural, =1 {# byte, {percentage}} other {# bytes, {percentage}}}"},"panels/coverage/CoverageListView.ts | sBytesSBelongToBlocksOf":{"message":"{PH1} bytes ({PH2}) belong to blocks of JavaScript that have not (yet) been executed."},"panels/coverage/CoverageListView.ts | sBytesSBelongToBlocksOfJavascript":{"message":"{PH1} bytes ({PH2}) belong to blocks of JavaScript that have executed at least once."},"panels/coverage/CoverageListView.ts | sBytesSBelongToFunctionsThatHave":{"message":"{PH1} bytes ({PH2}) belong to functions that have not (yet) been executed."},"panels/coverage/CoverageListView.ts | sBytesSBelongToFunctionsThatHaveExecuted":{"message":"{PH1} bytes ({PH2}) belong to functions that have executed at least once."},"panels/coverage/CoverageListView.ts | sOfFileUnusedSOfFileUsed":{"message":"{PH1} % of file unused, {PH2} % of file used"},"panels/coverage/CoverageListView.ts | totalBytes":{"message":"Total Bytes"},"panels/coverage/CoverageListView.ts | type":{"message":"Type"},"panels/coverage/CoverageListView.ts | unusedBytes":{"message":"Unused Bytes"},"panels/coverage/CoverageListView.ts | url":{"message":"URL"},"panels/coverage/CoverageListView.ts | usageVisualization":{"message":"Usage Visualization"},"panels/coverage/CoverageView.ts | activationNoCapture":{"message":"Could not capture coverage info because the page was prerendered in the background."},"panels/coverage/CoverageView.ts | all":{"message":"All"},"panels/coverage/CoverageView.ts | bfcacheNoCapture":{"message":"Could not capture coverage info because the page was served from the back/forward cache."},"panels/coverage/CoverageView.ts | chooseCoverageGranularityPer":{"message":"Choose coverage granularity: Per function has low overhead, per block has significant overhead."},"panels/coverage/CoverageView.ts | clearAll":{"message":"Clear all"},"panels/coverage/CoverageView.ts | clickTheRecordButtonSToStart":{"message":"Click the record button {PH1} to start capturing coverage."},"panels/coverage/CoverageView.ts | clickTheReloadButtonSToReloadAnd":{"message":"Click the reload button {PH1} to reload and start capturing coverage."},"panels/coverage/CoverageView.ts | contentScripts":{"message":"Content scripts"},"panels/coverage/CoverageView.ts | css":{"message":"CSS"},"panels/coverage/CoverageView.ts | export":{"message":"Export..."},"panels/coverage/CoverageView.ts | filterCoverageByType":{"message":"Filter coverage by type"},"panels/coverage/CoverageView.ts | filteredSTotalS":{"message":"Filtered: {PH1} Total: {PH2}"},"panels/coverage/CoverageView.ts | includeExtensionContentScripts":{"message":"Include extension content scripts"},"panels/coverage/CoverageView.ts | javascript":{"message":"JavaScript"},"panels/coverage/CoverageView.ts | perBlock":{"message":"Per block"},"panels/coverage/CoverageView.ts | perFunction":{"message":"Per function"},"panels/coverage/CoverageView.ts | reloadPrompt":{"message":"Click the reload button {PH1} to reload and get coverage."},"panels/coverage/CoverageView.ts | sOfSSUsedSoFarSUnused":{"message":"{PH1} of {PH2} ({PH3}%) used so far, {PH4} unused."},"panels/coverage/CoverageView.ts | urlFilter":{"message":"URL filter"},"panels/css_overview/components/CSSOverviewStartView.ts | captureOverview":{"message":"Capture overview"},"panels/css_overview/components/CSSOverviewStartView.ts | capturePageCSSOverview":{"message":"Capture an overview of your page’s CSS"},"panels/css_overview/components/CSSOverviewStartView.ts | identifyCSSImprovements":{"message":"Identify potential CSS improvements"},"panels/css_overview/components/CSSOverviewStartView.ts | identifyCSSImprovementsWithExampleIssues":{"message":"Identify potential CSS improvements (e.g. low contrast issues, unused declarations, color or font mismatches)"},"panels/css_overview/components/CSSOverviewStartView.ts | locateAffectedElements":{"message":"Locate the affected elements in the Elements panel"},"panels/css_overview/components/CSSOverviewStartView.ts | quickStartWithCSSOverview":{"message":"Quick start: get started with the new CSS Overview panel"},"panels/css_overview/css_overview-meta.ts | cssOverview":{"message":"CSS Overview"},"panels/css_overview/css_overview-meta.ts | showCssOverview":{"message":"Show CSS Overview"},"panels/css_overview/CSSOverviewCompletedView.ts | aa":{"message":"AA"},"panels/css_overview/CSSOverviewCompletedView.ts | aaa":{"message":"AAA"},"panels/css_overview/CSSOverviewCompletedView.ts | apca":{"message":"APCA"},"panels/css_overview/CSSOverviewCompletedView.ts | attributeSelectors":{"message":"Attribute selectors"},"panels/css_overview/CSSOverviewCompletedView.ts | backgroundColorsS":{"message":"Background colors: {PH1}"},"panels/css_overview/CSSOverviewCompletedView.ts | borderColorsS":{"message":"Border colors: {PH1}"},"panels/css_overview/CSSOverviewCompletedView.ts | classSelectors":{"message":"Class selectors"},"panels/css_overview/CSSOverviewCompletedView.ts | colors":{"message":"Colors"},"panels/css_overview/CSSOverviewCompletedView.ts | contrastIssues":{"message":"Contrast issues"},"panels/css_overview/CSSOverviewCompletedView.ts | contrastIssuesS":{"message":"Contrast issues: {PH1}"},"panels/css_overview/CSSOverviewCompletedView.ts | contrastRatio":{"message":"Contrast ratio"},"panels/css_overview/CSSOverviewCompletedView.ts | cssOverviewElements":{"message":"CSS Overview Elements"},"panels/css_overview/CSSOverviewCompletedView.ts | declaration":{"message":"Declaration"},"panels/css_overview/CSSOverviewCompletedView.ts | element":{"message":"Element"},"panels/css_overview/CSSOverviewCompletedView.ts | elements":{"message":"Elements"},"panels/css_overview/CSSOverviewCompletedView.ts | externalStylesheets":{"message":"External stylesheets"},"panels/css_overview/CSSOverviewCompletedView.ts | fillColorsS":{"message":"Fill colors: {PH1}"},"panels/css_overview/CSSOverviewCompletedView.ts | fontInfo":{"message":"Font info"},"panels/css_overview/CSSOverviewCompletedView.ts | idSelectors":{"message":"ID selectors"},"panels/css_overview/CSSOverviewCompletedView.ts | inlineStyleElements":{"message":"Inline style elements"},"panels/css_overview/CSSOverviewCompletedView.ts | mediaQueries":{"message":"Media queries"},"panels/css_overview/CSSOverviewCompletedView.ts | nOccurrences":{"message":"{n, plural, =1 {# occurrence} other {# occurrences}}"},"panels/css_overview/CSSOverviewCompletedView.ts | nonsimpleSelectors":{"message":"Non-simple selectors"},"panels/css_overview/CSSOverviewCompletedView.ts | overviewSummary":{"message":"Overview summary"},"panels/css_overview/CSSOverviewCompletedView.ts | showElement":{"message":"Show element"},"panels/css_overview/CSSOverviewCompletedView.ts | source":{"message":"Source"},"panels/css_overview/CSSOverviewCompletedView.ts | styleRules":{"message":"Style rules"},"panels/css_overview/CSSOverviewCompletedView.ts | textColorSOverSBackgroundResults":{"message":"Text color {PH1} over {PH2} background results in low contrast for {PH3} elements"},"panels/css_overview/CSSOverviewCompletedView.ts | textColorsS":{"message":"Text colors: {PH1}"},"panels/css_overview/CSSOverviewCompletedView.ts | thereAreNoFonts":{"message":"There are no fonts."},"panels/css_overview/CSSOverviewCompletedView.ts | thereAreNoMediaQueries":{"message":"There are no media queries."},"panels/css_overview/CSSOverviewCompletedView.ts | thereAreNoUnusedDeclarations":{"message":"There are no unused declarations."},"panels/css_overview/CSSOverviewCompletedView.ts | typeSelectors":{"message":"Type selectors"},"panels/css_overview/CSSOverviewCompletedView.ts | universalSelectors":{"message":"Universal selectors"},"panels/css_overview/CSSOverviewCompletedView.ts | unusedDeclarations":{"message":"Unused declarations"},"panels/css_overview/CSSOverviewProcessingView.ts | cancel":{"message":"Cancel"},"panels/css_overview/CSSOverviewSidebarPanel.ts | clearOverview":{"message":"Clear overview"},"panels/css_overview/CSSOverviewSidebarPanel.ts | cssOverviewPanelSidebar":{"message":"CSS Overview panel sidebar"},"panels/css_overview/CSSOverviewUnusedDeclarations.ts | bottomAppliedToAStatically":{"message":"Bottom applied to a statically positioned element"},"panels/css_overview/CSSOverviewUnusedDeclarations.ts | heightAppliedToAnInlineElement":{"message":"Height applied to an inline element"},"panels/css_overview/CSSOverviewUnusedDeclarations.ts | leftAppliedToAStatically":{"message":"Left applied to a statically positioned element"},"panels/css_overview/CSSOverviewUnusedDeclarations.ts | rightAppliedToAStatically":{"message":"Right applied to a statically positioned element"},"panels/css_overview/CSSOverviewUnusedDeclarations.ts | topAppliedToAStatically":{"message":"Top applied to a statically positioned element"},"panels/css_overview/CSSOverviewUnusedDeclarations.ts | verticalAlignmentAppliedTo":{"message":"Vertical alignment applied to element which is neither inline nor table-cell"},"panels/css_overview/CSSOverviewUnusedDeclarations.ts | widthAppliedToAnInlineElement":{"message":"Width applied to an inline element"},"panels/developer_resources/developer_resources-meta.ts | developerResources":{"message":"Developer Resources"},"panels/developer_resources/developer_resources-meta.ts | showDeveloperResources":{"message":"Show Developer Resources"},"panels/developer_resources/DeveloperResourcesListView.ts | copyInitiatorUrl":{"message":"Copy initiator URL"},"panels/developer_resources/DeveloperResourcesListView.ts | copyUrl":{"message":"Copy URL"},"panels/developer_resources/DeveloperResourcesListView.ts | developerResources":{"message":"Developer Resources"},"panels/developer_resources/DeveloperResourcesListView.ts | error":{"message":"Error"},"panels/developer_resources/DeveloperResourcesListView.ts | failure":{"message":"failure"},"panels/developer_resources/DeveloperResourcesListView.ts | initiator":{"message":"Initiator"},"panels/developer_resources/DeveloperResourcesListView.ts | pending":{"message":"pending"},"panels/developer_resources/DeveloperResourcesListView.ts | sBytes":{"message":"{n, plural, =1 {# byte} other {# bytes}}"},"panels/developer_resources/DeveloperResourcesListView.ts | status":{"message":"Status"},"panels/developer_resources/DeveloperResourcesListView.ts | success":{"message":"success"},"panels/developer_resources/DeveloperResourcesListView.ts | totalBytes":{"message":"Total Bytes"},"panels/developer_resources/DeveloperResourcesListView.ts | url":{"message":"URL"},"panels/developer_resources/DeveloperResourcesView.ts | enableLoadingThroughTarget":{"message":"Load through website"},"panels/developer_resources/DeveloperResourcesView.ts | enterTextToSearchTheUrlAndError":{"message":"Enter text to search the URL and Error columns"},"panels/developer_resources/DeveloperResourcesView.ts | loadHttpsDeveloperResources":{"message":"Load HTTP(S) developer resources through the website you inspect, not through DevTools"},"panels/developer_resources/DeveloperResourcesView.ts | resources":{"message":"{n, plural, =1 {# resource} other {# resources}}"},"panels/developer_resources/DeveloperResourcesView.ts | resourcesCurrentlyLoading":{"message":"{PH1} resources, {PH2} currently loading"},"panels/elements/ClassesPaneWidget.ts | addNewClass":{"message":"Add new class"},"panels/elements/ClassesPaneWidget.ts | classesSAdded":{"message":"Classes {PH1} added"},"panels/elements/ClassesPaneWidget.ts | classSAdded":{"message":"Class {PH1} added"},"panels/elements/ClassesPaneWidget.ts | elementClasses":{"message":"Element Classes"},"panels/elements/ColorSwatchPopoverIcon.ts | openCubicBezierEditor":{"message":"Open cubic bezier editor"},"panels/elements/ColorSwatchPopoverIcon.ts | openShadowEditor":{"message":"Open shadow editor"},"panels/elements/components/AccessibilityTreeNode.ts | ignored":{"message":"Ignored"},"panels/elements/components/AdornerSettingsPane.ts | closeButton":{"message":"Close"},"panels/elements/components/AdornerSettingsPane.ts | settingsTitle":{"message":"Show badges"},"panels/elements/components/CSSHintDetailsView.ts | learnMore":{"message":"Learn More"},"panels/elements/components/CSSPropertyDocsView.ts | dontShow":{"message":"Don't show"},"panels/elements/components/CSSPropertyDocsView.ts | learnMore":{"message":"Learn more"},"panels/elements/components/ElementsBreadcrumbs.ts | breadcrumbs":{"message":"DOM tree breadcrumbs"},"panels/elements/components/ElementsBreadcrumbs.ts | scrollLeft":{"message":"Scroll left"},"panels/elements/components/ElementsBreadcrumbs.ts | scrollRight":{"message":"Scroll right"},"panels/elements/components/ElementsBreadcrumbsUtils.ts | text":{"message":"(text)"},"panels/elements/components/LayoutPane.ts | chooseElementOverlayColor":{"message":"Choose the overlay color for this element"},"panels/elements/components/LayoutPane.ts | colorPickerOpened":{"message":"Color picker opened."},"panels/elements/components/LayoutPane.ts | flexbox":{"message":"Flexbox"},"panels/elements/components/LayoutPane.ts | flexboxOverlays":{"message":"Flexbox overlays"},"panels/elements/components/LayoutPane.ts | grid":{"message":"Grid"},"panels/elements/components/LayoutPane.ts | gridOverlays":{"message":"Grid overlays"},"panels/elements/components/LayoutPane.ts | noFlexboxLayoutsFoundOnThisPage":{"message":"No flexbox layouts found on this page"},"panels/elements/components/LayoutPane.ts | noGridLayoutsFoundOnThisPage":{"message":"No grid layouts found on this page"},"panels/elements/components/LayoutPane.ts | overlayDisplaySettings":{"message":"Overlay display settings"},"panels/elements/components/LayoutPane.ts | showElementInTheElementsPanel":{"message":"Show element in the Elements panel"},"panels/elements/components/StylePropertyEditor.ts | deselectButton":{"message":"Remove {propertyName}: {propertyValue}"},"panels/elements/components/StylePropertyEditor.ts | selectButton":{"message":"Add {propertyName}: {propertyValue}"},"panels/elements/ComputedStyleWidget.ts | filter":{"message":"Filter"},"panels/elements/ComputedStyleWidget.ts | filterComputedStyles":{"message":"Filter Computed Styles"},"panels/elements/ComputedStyleWidget.ts | group":{"message":"Group"},"panels/elements/ComputedStyleWidget.ts | navigateToSelectorSource":{"message":"Navigate to selector source"},"panels/elements/ComputedStyleWidget.ts | navigateToStyle":{"message":"Navigate to style"},"panels/elements/ComputedStyleWidget.ts | noMatchingProperty":{"message":"No matching property"},"panels/elements/ComputedStyleWidget.ts | showAll":{"message":"Show all"},"panels/elements/CSSRuleValidator.ts | fontVariationSettingsWarning":{"message":"Value for setting “{PH1}” {PH2} is outside the supported range [{PH3}, {PH4}] for font-family “{PH5}”."},"panels/elements/CSSRuleValidator.ts | ruleViolatedByParentElementRuleFix":{"message":"Try setting the {EXISTING_PARENT_ELEMENT_RULE} property on the parent to {TARGET_PARENT_ELEMENT_RULE}."},"panels/elements/CSSRuleValidator.ts | ruleViolatedByParentElementRuleReason":{"message":"The {REASON_PROPERTY_DECLARATION_CODE} property on the parent element prevents {AFFECTED_PROPERTY_DECLARATION_CODE} from having an effect."},"panels/elements/CSSRuleValidator.ts | ruleViolatedBySameElementRuleChangeSuggestion":{"message":"Try setting the {EXISTING_PROPERTY_DECLARATION} property to {TARGET_PROPERTY_DECLARATION}."},"panels/elements/CSSRuleValidator.ts | ruleViolatedBySameElementRuleFix":{"message":"Try setting {PROPERTY_NAME} to something other than {PROPERTY_VALUE}."},"panels/elements/CSSRuleValidator.ts | ruleViolatedBySameElementRuleReason":{"message":"The {REASON_PROPERTY_DECLARATION_CODE} property prevents {AFFECTED_PROPERTY_DECLARATION_CODE} from having an effect."},"panels/elements/DOMLinkifier.ts | node":{"message":""},"panels/elements/elements-meta.ts | captureAreaScreenshot":{"message":"Capture area screenshot"},"panels/elements/elements-meta.ts | copyStyles":{"message":"Copy styles"},"panels/elements/elements-meta.ts | disableDomWordWrap":{"message":"Disable DOM word wrap"},"panels/elements/elements-meta.ts | duplicateElement":{"message":"Duplicate element"},"panels/elements/elements-meta.ts | editAsHtml":{"message":"Edit as HTML"},"panels/elements/elements-meta.ts | elements":{"message":"Elements"},"panels/elements/elements-meta.ts | enableDomWordWrap":{"message":"Enable DOM word wrap"},"panels/elements/elements-meta.ts | eventListeners":{"message":"Event Listeners"},"panels/elements/elements-meta.ts | hideElement":{"message":"Hide element"},"panels/elements/elements-meta.ts | hideHtmlComments":{"message":"Hide HTML comments"},"panels/elements/elements-meta.ts | layout":{"message":"Layout"},"panels/elements/elements-meta.ts | properties":{"message":"Properties"},"panels/elements/elements-meta.ts | redo":{"message":"Redo"},"panels/elements/elements-meta.ts | revealDomNodeOnHover":{"message":"Reveal DOM node on hover"},"panels/elements/elements-meta.ts | selectAnElementInThePageTo":{"message":"Select an element in the page to inspect it"},"panels/elements/elements-meta.ts | showComputedStyles":{"message":"Show Computed Styles"},"panels/elements/elements-meta.ts | showCSSDocumentationTooltip":{"message":"Show CSS documentation tooltip"},"panels/elements/elements-meta.ts | showDetailedInspectTooltip":{"message":"Show detailed inspect tooltip"},"panels/elements/elements-meta.ts | showElements":{"message":"Show Elements"},"panels/elements/elements-meta.ts | showEventListeners":{"message":"Show Event Listeners"},"panels/elements/elements-meta.ts | showHtmlComments":{"message":"Show HTML comments"},"panels/elements/elements-meta.ts | showLayout":{"message":"Show Layout"},"panels/elements/elements-meta.ts | showProperties":{"message":"Show Properties"},"panels/elements/elements-meta.ts | showStackTrace":{"message":"Show Stack Trace"},"panels/elements/elements-meta.ts | showStyles":{"message":"Show Styles"},"panels/elements/elements-meta.ts | showUserAgentShadowDOM":{"message":"Show user agent shadow DOM"},"panels/elements/elements-meta.ts | stackTrace":{"message":"Stack Trace"},"panels/elements/elements-meta.ts | toggleEyeDropper":{"message":"Toggle eye dropper"},"panels/elements/elements-meta.ts | undo":{"message":"Undo"},"panels/elements/elements-meta.ts | wordWrap":{"message":"Word wrap"},"panels/elements/ElementsPanel.ts | computed":{"message":"Computed"},"panels/elements/ElementsPanel.ts | computedStylesHidden":{"message":"Computed Styles sidebar hidden"},"panels/elements/ElementsPanel.ts | computedStylesShown":{"message":"Computed Styles sidebar shown"},"panels/elements/ElementsPanel.ts | domTreeExplorer":{"message":"DOM tree explorer"},"panels/elements/ElementsPanel.ts | elementStateS":{"message":"Element state: {PH1}"},"panels/elements/ElementsPanel.ts | findByStringSelectorOrXpath":{"message":"Find by string, selector, or XPath"},"panels/elements/ElementsPanel.ts | hideComputedStylesSidebar":{"message":"Hide Computed Styles sidebar"},"panels/elements/ElementsPanel.ts | nodeCannotBeFoundInTheCurrent":{"message":"Node cannot be found in the current page."},"panels/elements/ElementsPanel.ts | revealInElementsPanel":{"message":"Reveal in Elements panel"},"panels/elements/ElementsPanel.ts | showComputedStylesSidebar":{"message":"Show Computed Styles sidebar"},"panels/elements/ElementsPanel.ts | sidePanelContent":{"message":"Side panel content"},"panels/elements/ElementsPanel.ts | sidePanelToolbar":{"message":"Side panel toolbar"},"panels/elements/ElementsPanel.ts | styles":{"message":"Styles"},"panels/elements/ElementsPanel.ts | switchToAccessibilityTreeView":{"message":"Switch to Accessibility Tree view"},"panels/elements/ElementsPanel.ts | switchToDomTreeView":{"message":"Switch to DOM Tree view"},"panels/elements/ElementsPanel.ts | theDeferredDomNodeCouldNotBe":{"message":"The deferred DOM Node could not be resolved to a valid node."},"panels/elements/ElementsPanel.ts | theRemoteObjectCouldNotBe":{"message":"The remote object could not be resolved to a valid node."},"panels/elements/ElementStatePaneWidget.ts | forceElementState":{"message":"Force element state"},"panels/elements/ElementStatePaneWidget.ts | toggleElementState":{"message":"Toggle Element State"},"panels/elements/ElementsTreeElement.ts | addAttribute":{"message":"Add attribute"},"panels/elements/ElementsTreeElement.ts | captureNodeScreenshot":{"message":"Capture node screenshot"},"panels/elements/ElementsTreeElement.ts | children":{"message":"Children:"},"panels/elements/ElementsTreeElement.ts | collapseChildren":{"message":"Collapse children"},"panels/elements/ElementsTreeElement.ts | copy":{"message":"Copy"},"panels/elements/ElementsTreeElement.ts | copyElement":{"message":"Copy element"},"panels/elements/ElementsTreeElement.ts | copyFullXpath":{"message":"Copy full XPath"},"panels/elements/ElementsTreeElement.ts | copyJsPath":{"message":"Copy JS path"},"panels/elements/ElementsTreeElement.ts | copyOuterhtml":{"message":"Copy outerHTML"},"panels/elements/ElementsTreeElement.ts | copySelector":{"message":"Copy selector"},"panels/elements/ElementsTreeElement.ts | copyStyles":{"message":"Copy styles"},"panels/elements/ElementsTreeElement.ts | copyXpath":{"message":"Copy XPath"},"panels/elements/ElementsTreeElement.ts | cut":{"message":"Cut"},"panels/elements/ElementsTreeElement.ts | deleteElement":{"message":"Delete element"},"panels/elements/ElementsTreeElement.ts | disableFlexMode":{"message":"Disable flex mode"},"panels/elements/ElementsTreeElement.ts | disableGridMode":{"message":"Disable grid mode"},"panels/elements/ElementsTreeElement.ts | disableScrollSnap":{"message":"Disable scroll-snap overlay"},"panels/elements/ElementsTreeElement.ts | duplicateElement":{"message":"Duplicate element"},"panels/elements/ElementsTreeElement.ts | editAsHtml":{"message":"Edit as HTML"},"panels/elements/ElementsTreeElement.ts | editAttribute":{"message":"Edit attribute"},"panels/elements/ElementsTreeElement.ts | editText":{"message":"Edit text"},"panels/elements/ElementsTreeElement.ts | enableFlexMode":{"message":"Enable flex mode"},"panels/elements/ElementsTreeElement.ts | enableGridMode":{"message":"Enable grid mode"},"panels/elements/ElementsTreeElement.ts | enableScrollSnap":{"message":"Enable scroll-snap overlay"},"panels/elements/ElementsTreeElement.ts | expandRecursively":{"message":"Expand recursively"},"panels/elements/ElementsTreeElement.ts | focus":{"message":"Focus"},"panels/elements/ElementsTreeElement.ts | forceState":{"message":"Force state"},"panels/elements/ElementsTreeElement.ts | hideElement":{"message":"Hide element"},"panels/elements/ElementsTreeElement.ts | paste":{"message":"Paste"},"panels/elements/ElementsTreeElement.ts | scrollIntoView":{"message":"Scroll into view"},"panels/elements/ElementsTreeElement.ts | showFrameDetails":{"message":"Show iframe details"},"panels/elements/ElementsTreeElement.ts | thisFrameWasIdentifiedAsAnAd":{"message":"This frame was identified as an ad frame"},"panels/elements/ElementsTreeElement.ts | useSInTheConsoleToReferToThis":{"message":"Use {PH1} in the console to refer to this element."},"panels/elements/ElementsTreeElement.ts | valueIsTooLargeToEdit":{"message":""},"panels/elements/ElementsTreeOutline.ts | adornerSettings":{"message":"Badge settings…"},"panels/elements/ElementsTreeOutline.ts | pageDom":{"message":"Page DOM"},"panels/elements/ElementsTreeOutline.ts | reveal":{"message":"reveal"},"panels/elements/ElementsTreeOutline.ts | showAllNodesDMore":{"message":"Show All Nodes ({PH1} More)"},"panels/elements/ElementsTreeOutline.ts | storeAsGlobalVariable":{"message":"Store as global variable"},"panels/elements/EventListenersWidget.ts | all":{"message":"All"},"panels/elements/EventListenersWidget.ts | ancestors":{"message":"Ancestors"},"panels/elements/EventListenersWidget.ts | blocking":{"message":"Blocking"},"panels/elements/EventListenersWidget.ts | eventListenersCategory":{"message":"Event listeners category"},"panels/elements/EventListenersWidget.ts | frameworkListeners":{"message":"Framework listeners"},"panels/elements/EventListenersWidget.ts | passive":{"message":"Passive"},"panels/elements/EventListenersWidget.ts | refresh":{"message":"Refresh"},"panels/elements/EventListenersWidget.ts | resolveEventListenersBoundWith":{"message":"Resolve event listeners bound with framework"},"panels/elements/EventListenersWidget.ts | showListenersOnTheAncestors":{"message":"Show listeners on the ancestors"},"panels/elements/LayersWidget.ts | cssLayersTitle":{"message":"CSS layers"},"panels/elements/LayersWidget.ts | toggleCSSLayers":{"message":"Toggle CSS Layers view"},"panels/elements/MarkerDecorator.ts | domBreakpoint":{"message":"DOM Breakpoint"},"panels/elements/MarkerDecorator.ts | elementIsHidden":{"message":"Element is hidden"},"panels/elements/NodeStackTraceWidget.ts | noStackTraceAvailable":{"message":"No stack trace available"},"panels/elements/PlatformFontsWidget.ts | dGlyphs":{"message":"{n, plural, =1 {(# glyph)} other {(# glyphs)}}"},"panels/elements/PlatformFontsWidget.ts | localFile":{"message":"Local file"},"panels/elements/PlatformFontsWidget.ts | networkResource":{"message":"Network resource"},"panels/elements/PlatformFontsWidget.ts | renderedFonts":{"message":"Rendered Fonts"},"panels/elements/PropertiesWidget.ts | filter":{"message":"Filter"},"panels/elements/PropertiesWidget.ts | filterProperties":{"message":"Filter Properties"},"panels/elements/PropertiesWidget.ts | noMatchingProperty":{"message":"No matching property"},"panels/elements/PropertiesWidget.ts | showAll":{"message":"Show all"},"panels/elements/PropertiesWidget.ts | showAllTooltip":{"message":"When unchecked, only properties whose values are neither null nor undefined will be shown"},"panels/elements/StylePropertiesSection.ts | constructedStylesheet":{"message":"constructed stylesheet"},"panels/elements/StylePropertiesSection.ts | copyAllCSSChanges":{"message":"Copy all CSS changes"},"panels/elements/StylePropertiesSection.ts | copyAllDeclarations":{"message":"Copy all declarations"},"panels/elements/StylePropertiesSection.ts | copyRule":{"message":"Copy rule"},"panels/elements/StylePropertiesSection.ts | copySelector":{"message":"Copy selector"},"panels/elements/StylePropertiesSection.ts | cssSelector":{"message":"CSS selector"},"panels/elements/StylePropertiesSection.ts | injectedStylesheet":{"message":"injected stylesheet"},"panels/elements/StylePropertiesSection.ts | insertStyleRuleBelow":{"message":"Insert Style Rule Below"},"panels/elements/StylePropertiesSection.ts | sattributesStyle":{"message":"{PH1}[Attributes Style]"},"panels/elements/StylePropertiesSection.ts | showAllPropertiesSMore":{"message":"Show All Properties ({PH1} more)"},"panels/elements/StylePropertiesSection.ts | styleAttribute":{"message":"style attribute"},"panels/elements/StylePropertiesSection.ts | userAgentStylesheet":{"message":"user agent stylesheet"},"panels/elements/StylePropertiesSection.ts | viaInspector":{"message":"via inspector"},"panels/elements/StylePropertyTreeElement.ts | copyAllCSSChanges":{"message":"Copy all CSS changes"},"panels/elements/StylePropertyTreeElement.ts | copyAllCssDeclarationsAsJs":{"message":"Copy all declarations as JS"},"panels/elements/StylePropertyTreeElement.ts | copyAllDeclarations":{"message":"Copy all declarations"},"panels/elements/StylePropertyTreeElement.ts | copyCssDeclarationAsJs":{"message":"Copy declaration as JS"},"panels/elements/StylePropertyTreeElement.ts | copyDeclaration":{"message":"Copy declaration"},"panels/elements/StylePropertyTreeElement.ts | copyProperty":{"message":"Copy property"},"panels/elements/StylePropertyTreeElement.ts | copyRule":{"message":"Copy rule"},"panels/elements/StylePropertyTreeElement.ts | copyValue":{"message":"Copy value"},"panels/elements/StylePropertyTreeElement.ts | flexboxEditorButton":{"message":"Open flexbox editor"},"panels/elements/StylePropertyTreeElement.ts | gridEditorButton":{"message":"Open grid editor"},"panels/elements/StylePropertyTreeElement.ts | openColorPickerS":{"message":"Open color picker. {PH1}"},"panels/elements/StylePropertyTreeElement.ts | revealInSourcesPanel":{"message":"Reveal in Sources panel"},"panels/elements/StylePropertyTreeElement.ts | shiftClickToChangeColorFormat":{"message":"Shift + Click to change color format."},"panels/elements/StylePropertyTreeElement.ts | togglePropertyAndContinueEditing":{"message":"Toggle property and continue editing"},"panels/elements/StylePropertyTreeElement.ts | viewComputedValue":{"message":"View computed value"},"panels/elements/StylesSidebarPane.ts | automaticDarkMode":{"message":"Automatic dark mode"},"panels/elements/StylesSidebarPane.ts | clickToRevealLayer":{"message":"Click to reveal layer in layer tree"},"panels/elements/StylesSidebarPane.ts | copiedToClipboard":{"message":"Copied to clipboard"},"panels/elements/StylesSidebarPane.ts | copyAllCSSChanges":{"message":"Copy CSS changes"},"panels/elements/StylesSidebarPane.ts | cssPropertyName":{"message":"CSS property name: {PH1}"},"panels/elements/StylesSidebarPane.ts | cssPropertyValue":{"message":"CSS property value: {PH1}"},"panels/elements/StylesSidebarPane.ts | filter":{"message":"Filter"},"panels/elements/StylesSidebarPane.ts | filterStyles":{"message":"Filter Styles"},"panels/elements/StylesSidebarPane.ts | incrementdecrementWithMousewheelHundred":{"message":"Increment/decrement with mousewheel or up/down keys. {PH1}: ±100, Shift: ±10, Alt: ±0.1"},"panels/elements/StylesSidebarPane.ts | incrementdecrementWithMousewheelOne":{"message":"Increment/decrement with mousewheel or up/down keys. {PH1}: R ±1, Shift: G ±1, Alt: B ±1"},"panels/elements/StylesSidebarPane.ts | inheritedFroms":{"message":"Inherited from "},"panels/elements/StylesSidebarPane.ts | inheritedFromSPseudoOf":{"message":"Inherited from ::{PH1} pseudo of "},"panels/elements/StylesSidebarPane.ts | invalidPropertyValue":{"message":"Invalid property value"},"panels/elements/StylesSidebarPane.ts | invalidString":{"message":"{PH1}, property name: {PH2}, property value: {PH3}"},"panels/elements/StylesSidebarPane.ts | layer":{"message":"Layer"},"panels/elements/StylesSidebarPane.ts | newStyleRule":{"message":"New Style Rule"},"panels/elements/StylesSidebarPane.ts | noMatchingSelectorOrStyle":{"message":"No matching selector or style"},"panels/elements/StylesSidebarPane.ts | pseudoSElement":{"message":"Pseudo ::{PH1} element"},"panels/elements/StylesSidebarPane.ts | specificity":{"message":"Specificity: {PH1}"},"panels/elements/StylesSidebarPane.ts | toggleRenderingEmulations":{"message":"Toggle common rendering emulations"},"panels/elements/StylesSidebarPane.ts | unknownPropertyName":{"message":"Unknown property name"},"panels/elements/StylesSidebarPane.ts | visibleSelectors":{"message":"{n, plural, =1 {# visible selector listed below} other {# visible selectors listed below}}"},"panels/elements/TopLayerContainer.ts | reveal":{"message":"reveal"},"panels/emulation/DeviceModeToolbar.ts | addDevicePixelRatio":{"message":"Add device pixel ratio"},"panels/emulation/DeviceModeToolbar.ts | addDeviceType":{"message":"Add device type"},"panels/emulation/DeviceModeToolbar.ts | autoadjustZoom":{"message":"Auto-adjust zoom"},"panels/emulation/DeviceModeToolbar.ts | closeDevtools":{"message":"Close DevTools"},"panels/emulation/DeviceModeToolbar.ts | defaultF":{"message":"Default: {PH1}"},"panels/emulation/DeviceModeToolbar.ts | devicePixelRatio":{"message":"Device pixel ratio"},"panels/emulation/DeviceModeToolbar.ts | deviceType":{"message":"Device type"},"panels/emulation/DeviceModeToolbar.ts | dimensions":{"message":"Dimensions"},"panels/emulation/DeviceModeToolbar.ts | edit":{"message":"Edit…"},"panels/emulation/DeviceModeToolbar.ts | experimentalWebPlatformFeature":{"message":"\"Experimental Web Platform Feature\" flag is enabled. Click to disable it."},"panels/emulation/DeviceModeToolbar.ts | experimentalWebPlatformFeatureFlag":{"message":"\"Experimental Web Platform Feature\" flag is disabled. Click to enable it."},"panels/emulation/DeviceModeToolbar.ts | fitToWindowF":{"message":"Fit to window ({PH1}%)"},"panels/emulation/DeviceModeToolbar.ts | heightLeaveEmptyForFull":{"message":"Height (leave empty for full)"},"panels/emulation/DeviceModeToolbar.ts | hideDeviceFrame":{"message":"Hide device frame"},"panels/emulation/DeviceModeToolbar.ts | hideMediaQueries":{"message":"Hide media queries"},"panels/emulation/DeviceModeToolbar.ts | hideRulers":{"message":"Hide rulers"},"panels/emulation/DeviceModeToolbar.ts | landscape":{"message":"Landscape"},"panels/emulation/DeviceModeToolbar.ts | moreOptions":{"message":"More options"},"panels/emulation/DeviceModeToolbar.ts | none":{"message":"None"},"panels/emulation/DeviceModeToolbar.ts | portrait":{"message":"Portrait"},"panels/emulation/DeviceModeToolbar.ts | removeDevicePixelRatio":{"message":"Remove device pixel ratio"},"panels/emulation/DeviceModeToolbar.ts | removeDeviceType":{"message":"Remove device type"},"panels/emulation/DeviceModeToolbar.ts | resetToDefaults":{"message":"Reset to defaults"},"panels/emulation/DeviceModeToolbar.ts | responsive":{"message":"Responsive"},"panels/emulation/DeviceModeToolbar.ts | rotate":{"message":"Rotate"},"panels/emulation/DeviceModeToolbar.ts | screenOrientationOptions":{"message":"Screen orientation options"},"panels/emulation/DeviceModeToolbar.ts | showDeviceFrame":{"message":"Show device frame"},"panels/emulation/DeviceModeToolbar.ts | showMediaQueries":{"message":"Show media queries"},"panels/emulation/DeviceModeToolbar.ts | showRulers":{"message":"Show rulers"},"panels/emulation/DeviceModeToolbar.ts | toggleDualscreenMode":{"message":"Toggle dual-screen mode"},"panels/emulation/DeviceModeToolbar.ts | width":{"message":"Width"},"panels/emulation/DeviceModeToolbar.ts | zoom":{"message":"Zoom"},"panels/emulation/DeviceModeView.ts | doubleclickForFullHeight":{"message":"Double-click for full height"},"panels/emulation/DeviceModeView.ts | laptop":{"message":"Laptop"},"panels/emulation/DeviceModeView.ts | laptopL":{"message":"Laptop L"},"panels/emulation/DeviceModeView.ts | mobileL":{"message":"Mobile L"},"panels/emulation/DeviceModeView.ts | mobileM":{"message":"Mobile M"},"panels/emulation/DeviceModeView.ts | mobileS":{"message":"Mobile S"},"panels/emulation/DeviceModeView.ts | tablet":{"message":"Tablet"},"panels/emulation/emulation-meta.ts | captureFullSizeScreenshot":{"message":"Capture full size screenshot"},"panels/emulation/emulation-meta.ts | captureNodeScreenshot":{"message":"Capture node screenshot"},"panels/emulation/emulation-meta.ts | captureScreenshot":{"message":"Capture screenshot"},"panels/emulation/emulation-meta.ts | device":{"message":"device"},"panels/emulation/emulation-meta.ts | hideDeviceFrame":{"message":"Hide device frame"},"panels/emulation/emulation-meta.ts | hideMediaQueries":{"message":"Hide media queries"},"panels/emulation/emulation-meta.ts | hideRulers":{"message":"Hide rulers in the Device Mode toolbar"},"panels/emulation/emulation-meta.ts | showDeviceFrame":{"message":"Show device frame"},"panels/emulation/emulation-meta.ts | showMediaQueries":{"message":"Show media queries"},"panels/emulation/emulation-meta.ts | showRulers":{"message":"Show rulers in the Device Mode toolbar"},"panels/emulation/emulation-meta.ts | toggleDeviceToolbar":{"message":"Toggle device toolbar"},"panels/emulation/MediaQueryInspector.ts | revealInSourceCode":{"message":"Reveal in source code"},"panels/event_listeners/EventListenersView.ts | deleteEventListener":{"message":"Delete event listener"},"panels/event_listeners/EventListenersView.ts | noEventListeners":{"message":"No event listeners"},"panels/event_listeners/EventListenersView.ts | passive":{"message":"Passive"},"panels/event_listeners/EventListenersView.ts | remove":{"message":"Remove"},"panels/event_listeners/EventListenersView.ts | revealInElementsPanel":{"message":"Reveal in Elements panel"},"panels/event_listeners/EventListenersView.ts | togglePassive":{"message":"Toggle Passive"},"panels/event_listeners/EventListenersView.ts | toggleWhetherEventListenerIs":{"message":"Toggle whether event listener is passive or blocking"},"panels/issues/AffectedBlockedByResponseView.ts | blockedResource":{"message":"Blocked Resource"},"panels/issues/AffectedBlockedByResponseView.ts | nRequests":{"message":"{n, plural, =1 {# request} other {# requests}}"},"panels/issues/AffectedBlockedByResponseView.ts | parentFrame":{"message":"Parent Frame"},"panels/issues/AffectedBlockedByResponseView.ts | requestC":{"message":"Request"},"panels/issues/AffectedCookiesView.ts | domain":{"message":"Domain"},"panels/issues/AffectedCookiesView.ts | filterSetCookieTitle":{"message":"Show network requests that include this Set-Cookie header in the network panel"},"panels/issues/AffectedCookiesView.ts | name":{"message":"Name"},"panels/issues/AffectedCookiesView.ts | nCookies":{"message":"{n, plural, =1 {# cookie} other {# cookies}}"},"panels/issues/AffectedCookiesView.ts | nRawCookieLines":{"message":"{n, plural, =1 {1 Raw Set-Cookie header} other {# Raw Set-Cookie headers}}"},"panels/issues/AffectedCookiesView.ts | path":{"message":"Path"},"panels/issues/AffectedDirectivesView.ts | blocked":{"message":"blocked"},"panels/issues/AffectedDirectivesView.ts | clickToRevealTheViolatingDomNode":{"message":"Click to reveal the violating DOM node in the Elements panel"},"panels/issues/AffectedDirectivesView.ts | directiveC":{"message":"Directive"},"panels/issues/AffectedDirectivesView.ts | element":{"message":"Element"},"panels/issues/AffectedDirectivesView.ts | nDirectives":{"message":"{n, plural, =1 {# directive} other {# directives}}"},"panels/issues/AffectedDirectivesView.ts | reportonly":{"message":"report-only"},"panels/issues/AffectedDirectivesView.ts | resourceC":{"message":"Resource"},"panels/issues/AffectedDirectivesView.ts | sourceLocation":{"message":"Source Location"},"panels/issues/AffectedDirectivesView.ts | status":{"message":"Status"},"panels/issues/AffectedDocumentsInQuirksModeView.ts | documentInTheDOMTree":{"message":"Document in the DOM tree"},"panels/issues/AffectedDocumentsInQuirksModeView.ts | mode":{"message":"Mode"},"panels/issues/AffectedDocumentsInQuirksModeView.ts | nDocuments":{"message":"{n, plural, =1 { document} other { documents}}"},"panels/issues/AffectedDocumentsInQuirksModeView.ts | url":{"message":"URL"},"panels/issues/AffectedElementsView.ts | nElements":{"message":"{n, plural, =1 {# element} other {# elements}}"},"panels/issues/AffectedElementsWithLowContrastView.ts | contrastRatio":{"message":"Contrast ratio"},"panels/issues/AffectedElementsWithLowContrastView.ts | element":{"message":"Element"},"panels/issues/AffectedElementsWithLowContrastView.ts | minimumAA":{"message":"Minimum AA ratio"},"panels/issues/AffectedElementsWithLowContrastView.ts | minimumAAA":{"message":"Minimum AAA ratio"},"panels/issues/AffectedElementsWithLowContrastView.ts | textSize":{"message":"Text size"},"panels/issues/AffectedElementsWithLowContrastView.ts | textWeight":{"message":"Text weight"},"panels/issues/AffectedHeavyAdView.ts | cpuPeakLimit":{"message":"CPU peak limit"},"panels/issues/AffectedHeavyAdView.ts | cpuTotalLimit":{"message":"CPU total limit"},"panels/issues/AffectedHeavyAdView.ts | frameUrl":{"message":"Frame URL"},"panels/issues/AffectedHeavyAdView.ts | limitExceeded":{"message":"Limit exceeded"},"panels/issues/AffectedHeavyAdView.ts | networkLimit":{"message":"Network limit"},"panels/issues/AffectedHeavyAdView.ts | nResources":{"message":"{n, plural, =1 {# resource} other {# resources}}"},"panels/issues/AffectedHeavyAdView.ts | removed":{"message":"Removed"},"panels/issues/AffectedHeavyAdView.ts | resolutionStatus":{"message":"Resolution Status"},"panels/issues/AffectedHeavyAdView.ts | warned":{"message":"Warned"},"panels/issues/AffectedResourcesView.ts | clickToRevealTheFramesDomNodeIn":{"message":"Click to reveal the frame's DOM node in the Elements panel"},"panels/issues/AffectedResourcesView.ts | unavailable":{"message":"unavailable"},"panels/issues/AffectedResourcesView.ts | unknown":{"message":"unknown"},"panels/issues/AffectedSharedArrayBufferIssueDetailsView.ts | aSharedarraybufferWas":{"message":"A SharedArrayBuffer was instantiated in a context that is not cross-origin isolated"},"panels/issues/AffectedSharedArrayBufferIssueDetailsView.ts | blocked":{"message":"blocked"},"panels/issues/AffectedSharedArrayBufferIssueDetailsView.ts | instantiation":{"message":"Instantiation"},"panels/issues/AffectedSharedArrayBufferIssueDetailsView.ts | nViolations":{"message":"{n, plural, =1 {# violation} other {# violations}}"},"panels/issues/AffectedSharedArrayBufferIssueDetailsView.ts | sharedarraybufferWasTransferedTo":{"message":"SharedArrayBuffer was transfered to a context that is not cross-origin isolated"},"panels/issues/AffectedSharedArrayBufferIssueDetailsView.ts | sourceLocation":{"message":"Source Location"},"panels/issues/AffectedSharedArrayBufferIssueDetailsView.ts | status":{"message":"Status"},"panels/issues/AffectedSharedArrayBufferIssueDetailsView.ts | transfer":{"message":"Transfer"},"panels/issues/AffectedSharedArrayBufferIssueDetailsView.ts | trigger":{"message":"Trigger"},"panels/issues/AffectedSharedArrayBufferIssueDetailsView.ts | warning":{"message":"warning"},"panels/issues/AffectedSourcesView.ts | nSources":{"message":"{n, plural, =1 {# source} other {# sources}}"},"panels/issues/AffectedTrackingSitesView.ts | nTrackingSites":{"message":"{n, plural, =1 {1 potentially tracking website} other {# potentially tracking websites}}"},"panels/issues/AttributionReportingIssueDetailsView.ts | element":{"message":"Element"},"panels/issues/AttributionReportingIssueDetailsView.ts | invalidHeaderValue":{"message":"Invalid Header Value"},"panels/issues/AttributionReportingIssueDetailsView.ts | nViolations":{"message":"{n, plural, =1 {# violation} other {# violations}}"},"panels/issues/AttributionReportingIssueDetailsView.ts | request":{"message":"Request"},"panels/issues/AttributionReportingIssueDetailsView.ts | untrustworthyOrigin":{"message":"Untrustworthy origin"},"panels/issues/ComboBoxOfCheckBoxes.ts | genericMenuLabel":{"message":"Menu"},"panels/issues/components/HideIssuesMenu.ts | tooltipTitle":{"message":"Hide issues"},"panels/issues/CorsIssueDetailsView.ts | allowCredentialsValueFromHeader":{"message":"Access-Control-Allow-Credentials Header Value"},"panels/issues/CorsIssueDetailsView.ts | allowedOrigin":{"message":"Allowed Origin (from header)"},"panels/issues/CorsIssueDetailsView.ts | blocked":{"message":"blocked"},"panels/issues/CorsIssueDetailsView.ts | disallowedRequestHeader":{"message":"Disallowed Request Header"},"panels/issues/CorsIssueDetailsView.ts | disallowedRequestMethod":{"message":"Disallowed Request Method"},"panels/issues/CorsIssueDetailsView.ts | failedRequest":{"message":"Failed Request"},"panels/issues/CorsIssueDetailsView.ts | header":{"message":"Header"},"panels/issues/CorsIssueDetailsView.ts | initiatorAddressSpace":{"message":"Initiator Address"},"panels/issues/CorsIssueDetailsView.ts | initiatorContext":{"message":"Initiator Context"},"panels/issues/CorsIssueDetailsView.ts | insecure":{"message":"insecure"},"panels/issues/CorsIssueDetailsView.ts | invalidValue":{"message":"Invalid Value (if available)"},"panels/issues/CorsIssueDetailsView.ts | nRequests":{"message":"{n, plural, =1 {# request} other {# requests}}"},"panels/issues/CorsIssueDetailsView.ts | preflightDisallowedRedirect":{"message":"Response to preflight was a redirect"},"panels/issues/CorsIssueDetailsView.ts | preflightInvalidStatus":{"message":"HTTP status of preflight request didn't indicate success"},"panels/issues/CorsIssueDetailsView.ts | preflightRequest":{"message":"Preflight Request"},"panels/issues/CorsIssueDetailsView.ts | preflightRequestIfProblematic":{"message":"Preflight Request (if problematic)"},"panels/issues/CorsIssueDetailsView.ts | problem":{"message":"Problem"},"panels/issues/CorsIssueDetailsView.ts | problemInvalidValue":{"message":"Invalid Value"},"panels/issues/CorsIssueDetailsView.ts | problemMissingHeader":{"message":"Missing Header"},"panels/issues/CorsIssueDetailsView.ts | problemMultipleValues":{"message":"Multiple Values"},"panels/issues/CorsIssueDetailsView.ts | request":{"message":"Request"},"panels/issues/CorsIssueDetailsView.ts | resourceAddressSpace":{"message":"Resource Address"},"panels/issues/CorsIssueDetailsView.ts | secure":{"message":"secure"},"panels/issues/CorsIssueDetailsView.ts | sourceLocation":{"message":"Source Location"},"panels/issues/CorsIssueDetailsView.ts | status":{"message":"Status"},"panels/issues/CorsIssueDetailsView.ts | unsupportedScheme":{"message":"Unsupported Scheme"},"panels/issues/CorsIssueDetailsView.ts | warning":{"message":"warning"},"panels/issues/CSPViolationsView.ts | filter":{"message":"Filter"},"panels/issues/GenericIssueDetailsView.ts | frameId":{"message":"Frame"},"panels/issues/GenericIssueDetailsView.ts | nResources":{"message":"{n, plural, =1 {# resource} other {# resources}}"},"panels/issues/GenericIssueDetailsView.ts | violatingNode":{"message":"Violating node"},"panels/issues/HiddenIssuesRow.ts | hiddenIssues":{"message":"Hidden issues"},"panels/issues/HiddenIssuesRow.ts | unhideAll":{"message":"Unhide all"},"panels/issues/IssueKindView.ts | hideAllCurrentBreakingChanges":{"message":"Hide all current Breaking Changes"},"panels/issues/IssueKindView.ts | hideAllCurrentImprovements":{"message":"Hide all current Improvements"},"panels/issues/IssueKindView.ts | hideAllCurrentPageErrors":{"message":"Hide all current Page Errors"},"panels/issues/issues-meta.ts | cspViolations":{"message":"CSP Violations"},"panels/issues/issues-meta.ts | issues":{"message":"Issues"},"panels/issues/issues-meta.ts | showCspViolations":{"message":"Show CSP Violations"},"panels/issues/issues-meta.ts | showIssues":{"message":"Show Issues"},"panels/issues/IssuesPane.ts | attributionReporting":{"message":"Attribution Reporting API"},"panels/issues/IssuesPane.ts | contentSecurityPolicy":{"message":"Content Security Policy"},"panels/issues/IssuesPane.ts | cors":{"message":"Cross Origin Resource Sharing"},"panels/issues/IssuesPane.ts | crossOriginEmbedderPolicy":{"message":"Cross Origin Embedder Policy"},"panels/issues/IssuesPane.ts | generic":{"message":"Generic"},"panels/issues/IssuesPane.ts | groupByCategory":{"message":"Group by category"},"panels/issues/IssuesPane.ts | groupByKind":{"message":"Group by kind"},"panels/issues/IssuesPane.ts | groupDisplayedIssuesUnder":{"message":"Group displayed issues under associated categories"},"panels/issues/IssuesPane.ts | groupDisplayedIssuesUnderKind":{"message":"Group displayed issues as Page errors, Breaking changes and Improvements"},"panels/issues/IssuesPane.ts | heavyAds":{"message":"Heavy Ads"},"panels/issues/IssuesPane.ts | includeCookieIssuesCausedBy":{"message":"Include cookie Issues caused by third-party sites"},"panels/issues/IssuesPane.ts | includeThirdpartyCookieIssues":{"message":"Include third-party cookie issues"},"panels/issues/IssuesPane.ts | lowTextContrast":{"message":"Low Text Contrast"},"panels/issues/IssuesPane.ts | mixedContent":{"message":"Mixed Content"},"panels/issues/IssuesPane.ts | noIssuesDetectedSoFar":{"message":"No issues detected so far"},"panels/issues/IssuesPane.ts | onlyThirdpartyCookieIssues":{"message":"Only third-party cookie issues detected so far"},"panels/issues/IssuesPane.ts | other":{"message":"Other"},"panels/issues/IssuesPane.ts | quirksMode":{"message":"Quirks Mode"},"panels/issues/IssuesPane.ts | samesiteCookie":{"message":"SameSite Cookie"},"panels/issues/IssueView.ts | affectedResources":{"message":"Affected Resources"},"panels/issues/IssueView.ts | automaticallyUpgraded":{"message":"automatically upgraded"},"panels/issues/IssueView.ts | blocked":{"message":"blocked"},"panels/issues/IssueView.ts | hideIssuesLikeThis":{"message":"Hide issues like this"},"panels/issues/IssueView.ts | learnMoreS":{"message":"Learn more: {PH1}"},"panels/issues/IssueView.ts | name":{"message":"Name"},"panels/issues/IssueView.ts | nRequests":{"message":"{n, plural, =1 {# request} other {# requests}}"},"panels/issues/IssueView.ts | nResources":{"message":"{n, plural, =1 {# resource} other {# resources}}"},"panels/issues/IssueView.ts | restrictionStatus":{"message":"Restriction Status"},"panels/issues/IssueView.ts | unhideIssuesLikeThis":{"message":"Unhide issues like this"},"panels/issues/IssueView.ts | warned":{"message":"Warned"},"panels/js_profiler/js_profiler-meta.ts | performance":{"message":"Performance"},"panels/js_profiler/js_profiler-meta.ts | profiler":{"message":"Profiler"},"panels/js_profiler/js_profiler-meta.ts | record":{"message":"Record"},"panels/js_profiler/js_profiler-meta.ts | showPerformance":{"message":"Show Performance"},"panels/js_profiler/js_profiler-meta.ts | showProfiler":{"message":"Show Profiler"},"panels/js_profiler/js_profiler-meta.ts | showRecentTimelineSessions":{"message":"Show recent timeline sessions"},"panels/js_profiler/js_profiler-meta.ts | startProfilingAndReloadPage":{"message":"Start profiling and reload page"},"panels/js_profiler/js_profiler-meta.ts | startStopRecording":{"message":"Start/stop recording"},"panels/js_profiler/js_profiler-meta.ts | stop":{"message":"Stop"},"panels/layer_viewer/layer_viewer-meta.ts | panOrRotateDown":{"message":"Pan or rotate down"},"panels/layer_viewer/layer_viewer-meta.ts | panOrRotateLeft":{"message":"Pan or rotate left"},"panels/layer_viewer/layer_viewer-meta.ts | panOrRotateRight":{"message":"Pan or rotate right"},"panels/layer_viewer/layer_viewer-meta.ts | panOrRotateUp":{"message":"Pan or rotate up"},"panels/layer_viewer/layer_viewer-meta.ts | resetView":{"message":"Reset view"},"panels/layer_viewer/layer_viewer-meta.ts | switchToPanMode":{"message":"Switch to pan mode"},"panels/layer_viewer/layer_viewer-meta.ts | switchToRotateMode":{"message":"Switch to rotate mode"},"panels/layer_viewer/layer_viewer-meta.ts | zoomIn":{"message":"Zoom in"},"panels/layer_viewer/layer_viewer-meta.ts | zoomOut":{"message":"Zoom out"},"panels/layer_viewer/LayerDetailsView.ts | compositingReasons":{"message":"Compositing Reasons"},"panels/layer_viewer/LayerDetailsView.ts | containingBlocRectangleDimensions":{"message":"Containing Block {PH1} × {PH2} (at {PH3}, {PH4})"},"panels/layer_viewer/LayerDetailsView.ts | mainThreadScrollingReason":{"message":"Main thread scrolling reason"},"panels/layer_viewer/LayerDetailsView.ts | memoryEstimate":{"message":"Memory estimate"},"panels/layer_viewer/LayerDetailsView.ts | nearestLayerShiftingContaining":{"message":"Nearest Layer Shifting Containing Block"},"panels/layer_viewer/LayerDetailsView.ts | nearestLayerShiftingStickyBox":{"message":"Nearest Layer Shifting Sticky Box"},"panels/layer_viewer/LayerDetailsView.ts | nonFastScrollable":{"message":"Non fast scrollable"},"panels/layer_viewer/LayerDetailsView.ts | paintCount":{"message":"Paint count"},"panels/layer_viewer/LayerDetailsView.ts | paintProfiler":{"message":"Paint Profiler"},"panels/layer_viewer/LayerDetailsView.ts | repaintsOnScroll":{"message":"Repaints on scroll"},"panels/layer_viewer/LayerDetailsView.ts | scrollRectangleDimensions":{"message":"{PH1} {PH2} × {PH3} (at {PH4}, {PH5})"},"panels/layer_viewer/LayerDetailsView.ts | selectALayerToSeeItsDetails":{"message":"Select a layer to see its details"},"panels/layer_viewer/LayerDetailsView.ts | size":{"message":"Size"},"panels/layer_viewer/LayerDetailsView.ts | slowScrollRegions":{"message":"Slow scroll regions"},"panels/layer_viewer/LayerDetailsView.ts | stickyAncenstorLayersS":{"message":"{PH1}: {PH2} ({PH3})"},"panels/layer_viewer/LayerDetailsView.ts | stickyBoxRectangleDimensions":{"message":"Sticky Box {PH1} × {PH2} (at {PH3}, {PH4})"},"panels/layer_viewer/LayerDetailsView.ts | stickyPositionConstraint":{"message":"Sticky position constraint"},"panels/layer_viewer/LayerDetailsView.ts | touchEventHandler":{"message":"Touch event handler"},"panels/layer_viewer/LayerDetailsView.ts | unnamed":{"message":""},"panels/layer_viewer/LayerDetailsView.ts | updateRectangleDimensions":{"message":"{PH1} × {PH2} (at {PH3}, {PH4})"},"panels/layer_viewer/LayerDetailsView.ts | wheelEventHandler":{"message":"Wheel event handler"},"panels/layer_viewer/Layers3DView.ts | cantDisplayLayers":{"message":"Can't display layers,"},"panels/layer_viewer/Layers3DView.ts | checkSForPossibleReasons":{"message":"Check {PH1} for possible reasons."},"panels/layer_viewer/Layers3DView.ts | dLayersView":{"message":"3D Layers View"},"panels/layer_viewer/Layers3DView.ts | layerInformationIsNotYet":{"message":"Layer information is not yet available."},"panels/layer_viewer/Layers3DView.ts | paints":{"message":"Paints"},"panels/layer_viewer/Layers3DView.ts | resetView":{"message":"Reset View"},"panels/layer_viewer/Layers3DView.ts | showPaintProfiler":{"message":"Show Paint Profiler"},"panels/layer_viewer/Layers3DView.ts | slowScrollRects":{"message":"Slow scroll rects"},"panels/layer_viewer/Layers3DView.ts | webglSupportIsDisabledInYour":{"message":"WebGL support is disabled in your browser."},"panels/layer_viewer/LayerTreeOutline.ts | layersTreePane":{"message":"Layers Tree Pane"},"panels/layer_viewer/LayerTreeOutline.ts | showPaintProfiler":{"message":"Show Paint Profiler"},"panels/layer_viewer/LayerTreeOutline.ts | updateChildDimension":{"message":" ({PH1} × {PH2})"},"panels/layer_viewer/LayerViewHost.ts | showInternalLayers":{"message":"Show internal layers"},"panels/layer_viewer/PaintProfilerView.ts | bitmap":{"message":"Bitmap"},"panels/layer_viewer/PaintProfilerView.ts | commandLog":{"message":"Command Log"},"panels/layer_viewer/PaintProfilerView.ts | misc":{"message":"Misc"},"panels/layer_viewer/PaintProfilerView.ts | profiling":{"message":"Profiling…"},"panels/layer_viewer/PaintProfilerView.ts | profilingResults":{"message":"Profiling results"},"panels/layer_viewer/PaintProfilerView.ts | shapes":{"message":"Shapes"},"panels/layer_viewer/PaintProfilerView.ts | text":{"message":"Text"},"panels/layer_viewer/TransformController.ts | panModeX":{"message":"Pan mode (X)"},"panels/layer_viewer/TransformController.ts | resetTransform":{"message":"Reset transform (0)"},"panels/layer_viewer/TransformController.ts | rotateModeV":{"message":"Rotate mode (V)"},"panels/layers/layers-meta.ts | layers":{"message":"Layers"},"panels/layers/layers-meta.ts | showLayers":{"message":"Show Layers"},"panels/layers/LayersPanel.ts | details":{"message":"Details"},"panels/layers/LayersPanel.ts | profiler":{"message":"Profiler"},"panels/lighthouse/lighthouse-meta.ts | showLighthouse":{"message":"Show Lighthouse"},"panels/lighthouse/LighthouseController.ts | accessibility":{"message":"Accessibility"},"panels/lighthouse/LighthouseController.ts | applyMobileEmulation":{"message":"Apply mobile emulation"},"panels/lighthouse/LighthouseController.ts | applyMobileEmulationDuring":{"message":"Apply mobile emulation during auditing"},"panels/lighthouse/LighthouseController.ts | atLeastOneCategoryMustBeSelected":{"message":"At least one category must be selected."},"panels/lighthouse/LighthouseController.ts | bestPractices":{"message":"Best practices"},"panels/lighthouse/LighthouseController.ts | canOnlyAuditHttphttpsPages":{"message":"Can only audit pages on HTTP or HTTPS. Navigate to a different page."},"panels/lighthouse/LighthouseController.ts | clearStorage":{"message":"Clear storage"},"panels/lighthouse/LighthouseController.ts | desktop":{"message":"Desktop"},"panels/lighthouse/LighthouseController.ts | devtoolsThrottling":{"message":"DevTools throttling (advanced)"},"panels/lighthouse/LighthouseController.ts | doesThisPageFollowBestPractices":{"message":"Does this page follow best practices for modern web development"},"panels/lighthouse/LighthouseController.ts | doesThisPageMeetTheStandardOfA":{"message":"Does this page meet the standard of a Progressive Web App"},"panels/lighthouse/LighthouseController.ts | howLongDoesThisAppTakeToShow":{"message":"How long does this app take to show content and become usable"},"panels/lighthouse/LighthouseController.ts | indexeddb":{"message":"IndexedDB"},"panels/lighthouse/LighthouseController.ts | isThisPageOptimizedForAdSpeedAnd":{"message":"Is this page optimized for ad speed and quality"},"panels/lighthouse/LighthouseController.ts | isThisPageOptimizedForSearch":{"message":"Is this page optimized for search engine results ranking"},"panels/lighthouse/LighthouseController.ts | isThisPageUsableByPeopleWith":{"message":"Is this page usable by people with disabilities or impairments"},"panels/lighthouse/LighthouseController.ts | javaScriptDisabled":{"message":"JavaScript is disabled. You need to enable JavaScript to audit this page. Open the Command Menu and run the Enable JavaScript command to enable JavaScript."},"panels/lighthouse/LighthouseController.ts | legacyNavigation":{"message":"Legacy navigation"},"panels/lighthouse/LighthouseController.ts | lighthouseMode":{"message":"Lighthouse mode"},"panels/lighthouse/LighthouseController.ts | localStorage":{"message":"Local Storage"},"panels/lighthouse/LighthouseController.ts | mobile":{"message":"Mobile"},"panels/lighthouse/LighthouseController.ts | multipleTabsAreBeingControlledBy":{"message":"Multiple tabs are being controlled by the same service worker. Close your other tabs on the same origin to audit this page."},"panels/lighthouse/LighthouseController.ts | navigation":{"message":"Navigation (Default)"},"panels/lighthouse/LighthouseController.ts | navigationTooltip":{"message":"Navigation mode analyzes a page load, exactly like the original Lighthouse reports."},"panels/lighthouse/LighthouseController.ts | performance":{"message":"Performance"},"panels/lighthouse/LighthouseController.ts | progressiveWebApp":{"message":"Progressive Web App"},"panels/lighthouse/LighthouseController.ts | publisherAds":{"message":"Publisher Ads"},"panels/lighthouse/LighthouseController.ts | resetStorageLocalstorage":{"message":"Reset storage (cache, service workers, etc) before auditing. (Good for performance & PWA testing)"},"panels/lighthouse/LighthouseController.ts | runLighthouseInMode":{"message":"Run Lighthouse in navigation, timespan, or snapshot mode"},"panels/lighthouse/LighthouseController.ts | seo":{"message":"SEO"},"panels/lighthouse/LighthouseController.ts | simulateASlowerPageLoadBasedOn":{"message":"Simulated throttling simulates a slower page load based on data from an initial unthrottled load. DevTools throttling actually slows down the page."},"panels/lighthouse/LighthouseController.ts | simulatedThrottling":{"message":"Simulated throttling (default)"},"panels/lighthouse/LighthouseController.ts | snapshot":{"message":"Snapshot"},"panels/lighthouse/LighthouseController.ts | snapshotTooltip":{"message":"Snapshot mode analyzes the page in a particular state, typically after user interactions."},"panels/lighthouse/LighthouseController.ts | thereMayBeStoredDataAffectingLoadingPlural":{"message":"There may be stored data affecting loading performance in these locations: {PH1}. Audit this page in an incognito window to prevent those resources from affecting your scores."},"panels/lighthouse/LighthouseController.ts | thereMayBeStoredDataAffectingSingular":{"message":"There may be stored data affecting loading performance in this location: {PH1}. Audit this page in an incognito window to prevent those resources from affecting your scores."},"panels/lighthouse/LighthouseController.ts | throttlingMethod":{"message":"Throttling method"},"panels/lighthouse/LighthouseController.ts | timespan":{"message":"Timespan"},"panels/lighthouse/LighthouseController.ts | timespanTooltip":{"message":"Timespan mode analyzes an arbitrary period of time, typically containing user interactions."},"panels/lighthouse/LighthouseController.ts | useLegacyNavigation":{"message":"Analyze the page using classic Lighthouse when in navigation mode."},"panels/lighthouse/LighthouseController.ts | webSql":{"message":"Web SQL"},"panels/lighthouse/LighthousePanel.ts | cancelling":{"message":"Cancelling"},"panels/lighthouse/LighthousePanel.ts | clearAll":{"message":"Clear all"},"panels/lighthouse/LighthousePanel.ts | dropLighthouseJsonHere":{"message":"Drop Lighthouse JSON here"},"panels/lighthouse/LighthousePanel.ts | lighthouseSettings":{"message":"Lighthouse settings"},"panels/lighthouse/LighthousePanel.ts | performAnAudit":{"message":"Perform an audit…"},"panels/lighthouse/LighthousePanel.ts | printing":{"message":"Printing"},"panels/lighthouse/LighthousePanel.ts | thePrintPopupWindowIsOpenPlease":{"message":"The print popup window is open. Please close it to continue."},"panels/lighthouse/LighthouseReportSelector.ts | newReport":{"message":"(new report)"},"panels/lighthouse/LighthouseReportSelector.ts | reports":{"message":"Reports"},"panels/lighthouse/LighthouseStartView.ts | analyzeNavigation":{"message":"Analyze page load"},"panels/lighthouse/LighthouseStartView.ts | analyzeSnapshot":{"message":"Analyze page state"},"panels/lighthouse/LighthouseStartView.ts | categories":{"message":"Categories"},"panels/lighthouse/LighthouseStartView.ts | device":{"message":"Device"},"panels/lighthouse/LighthouseStartView.ts | generateLighthouseReport":{"message":"Generate a Lighthouse report"},"panels/lighthouse/LighthouseStartView.ts | learnMore":{"message":"Learn more"},"panels/lighthouse/LighthouseStartView.ts | mode":{"message":"Mode"},"panels/lighthouse/LighthouseStartView.ts | plugins":{"message":"Plugins"},"panels/lighthouse/LighthouseStartView.ts | startTimespan":{"message":"Start timespan"},"panels/lighthouse/LighthouseStatusView.ts | ahSorryWeRanIntoAnError":{"message":"Ah, sorry! We ran into an error."},"panels/lighthouse/LighthouseStatusView.ts | almostThereLighthouseIsNow":{"message":"Almost there! Lighthouse is now generating your report."},"panels/lighthouse/LighthouseStatusView.ts | asPageLoadTimeIncreasesFromOne":{"message":"As page load time increases from one second to seven seconds, the probability of a mobile site visitor bouncing increases 113%. [Source: Think with Google]"},"panels/lighthouse/LighthouseStatusView.ts | asTheNumberOfElementsOnAPage":{"message":"As the number of elements on a page increases from 400 to 6,000, the probability of conversion drops 95%. [Source: Think with Google]"},"panels/lighthouse/LighthouseStatusView.ts | auditingS":{"message":"Auditing {PH1}"},"panels/lighthouse/LighthouseStatusView.ts | auditingYourWebPage":{"message":"Auditing your web page"},"panels/lighthouse/LighthouseStatusView.ts | byReducingTheResponseSizeOfJson":{"message":"By reducing the response size of JSON needed for displaying comments, Instagram saw increased impressions [Source: WPO Stats]"},"panels/lighthouse/LighthouseStatusView.ts | cancel":{"message":"Cancel"},"panels/lighthouse/LighthouseStatusView.ts | cancelling":{"message":"Cancelling…"},"panels/lighthouse/LighthouseStatusView.ts | fastFactMessageWithPlaceholder":{"message":"💡 {PH1}"},"panels/lighthouse/LighthouseStatusView.ts | ifASiteTakesSecondToBecome":{"message":"If a site takes >1 second to become interactive, users lose attention, and their perception of completing the page task is broken [Source: Google Developers Blog]"},"panels/lighthouse/LighthouseStatusView.ts | ifThisIssueIsReproduciblePlease":{"message":"If this issue is reproducible, please report it at the Lighthouse GitHub repo."},"panels/lighthouse/LighthouseStatusView.ts | lighthouseIsGatheringInformation":{"message":"Lighthouse is gathering information about the page to compute your score."},"panels/lighthouse/LighthouseStatusView.ts | lighthouseIsLoadingThePage":{"message":"Lighthouse is loading the page."},"panels/lighthouse/LighthouseStatusView.ts | lighthouseIsLoadingYourPage":{"message":"Lighthouse is loading your page"},"panels/lighthouse/LighthouseStatusView.ts | lighthouseIsLoadingYourPageWith":{"message":"Lighthouse is loading your page with throttling to measure performance on a mobile device on 3G."},"panels/lighthouse/LighthouseStatusView.ts | lighthouseIsLoadingYourPageWithMobile":{"message":"Lighthouse is loading your page with mobile emulation."},"panels/lighthouse/LighthouseStatusView.ts | lighthouseIsLoadingYourPageWithThrottling":{"message":"Lighthouse is loading your page with throttling to measure performance on a slow desktop on 3G."},"panels/lighthouse/LighthouseStatusView.ts | lighthouseIsWarmingUp":{"message":"Lighthouse is warming up…"},"panels/lighthouse/LighthouseStatusView.ts | lighthouseOnlySimulatesMobile":{"message":"Lighthouse only simulates mobile performance; to measure performance on a real device, try WebPageTest.org [Source: Lighthouse team]"},"panels/lighthouse/LighthouseStatusView.ts | loading":{"message":"Loading…"},"panels/lighthouse/LighthouseStatusView.ts | mbTakesAMinimumOfSecondsTo":{"message":"1MB takes a minimum of 5 seconds to download on a typical 3G connection [Source: WebPageTest and DevTools 3G definition]."},"panels/lighthouse/LighthouseStatusView.ts | OfGlobalMobileUsersInWereOnGOrG":{"message":"75% of global mobile users in 2016 were on 2G or 3G [Source: GSMA Mobile]"},"panels/lighthouse/LighthouseStatusView.ts | OfMobilePagesTakeNearlySeconds":{"message":"70% of mobile pages take nearly 7 seconds for the visual content above the fold to display on the screen. [Source: Think with Google]"},"panels/lighthouse/LighthouseStatusView.ts | rebuildingPinterestPagesFor":{"message":"Rebuilding Pinterest pages for performance increased conversion rates by 15% [Source: WPO Stats]"},"panels/lighthouse/LighthouseStatusView.ts | SecondsIsTheAverageTimeAMobile":{"message":"19 seconds is the average time a mobile web page takes to load on a 3G connection [Source: Google DoubleClick blog]"},"panels/lighthouse/LighthouseStatusView.ts | theAverageUserDeviceCostsLess":{"message":"The average user device costs less than 200 USD. [Source: International Data Corporation]"},"panels/lighthouse/LighthouseStatusView.ts | tryToNavigateToTheUrlInAFresh":{"message":"Try to navigate to the URL in a fresh Chrome profile without any other tabs or extensions open and try again."},"panels/lighthouse/LighthouseStatusView.ts | walmartSawAIncreaseInRevenueFor":{"message":"Walmart saw a 1% increase in revenue for every 100ms improvement in page load [Source: WPO Stats]"},"panels/lighthouse/LighthouseTimespanView.ts | cancel":{"message":"Cancel"},"panels/lighthouse/LighthouseTimespanView.ts | endTimespan":{"message":"End timespan"},"panels/lighthouse/LighthouseTimespanView.ts | timespanStarted":{"message":"Timespan started, interact with the page"},"panels/lighthouse/LighthouseTimespanView.ts | timespanStarting":{"message":"Timespan starting…"},"panels/media/EventDisplayTable.ts | eventDisplay":{"message":"Event display"},"panels/media/EventDisplayTable.ts | eventName":{"message":"Event name"},"panels/media/EventDisplayTable.ts | timestamp":{"message":"Timestamp"},"panels/media/EventDisplayTable.ts | value":{"message":"Value"},"panels/media/EventTimelineView.ts | bufferingStatus":{"message":"Buffering Status"},"panels/media/EventTimelineView.ts | playbackStatus":{"message":"Playback Status"},"panels/media/media-meta.ts | media":{"message":"Media"},"panels/media/media-meta.ts | showMedia":{"message":"Show Media"},"panels/media/media-meta.ts | video":{"message":"video"},"panels/media/PlayerDetailView.ts | events":{"message":"Events"},"panels/media/PlayerDetailView.ts | messages":{"message":"Messages"},"panels/media/PlayerDetailView.ts | playerEvents":{"message":"Player events"},"panels/media/PlayerDetailView.ts | playerMessages":{"message":"Player messages"},"panels/media/PlayerDetailView.ts | playerProperties":{"message":"Player properties"},"panels/media/PlayerDetailView.ts | playerTimeline":{"message":"Player timeline"},"panels/media/PlayerDetailView.ts | properties":{"message":"Properties"},"panels/media/PlayerDetailView.ts | timeline":{"message":"Timeline"},"panels/media/PlayerListView.ts | hideAllOthers":{"message":"Hide all others"},"panels/media/PlayerListView.ts | hidePlayer":{"message":"Hide player"},"panels/media/PlayerListView.ts | players":{"message":"Players"},"panels/media/PlayerListView.ts | savePlayerInfo":{"message":"Save player info"},"panels/media/PlayerMessagesView.ts | all":{"message":"All"},"panels/media/PlayerMessagesView.ts | custom":{"message":"Custom"},"panels/media/PlayerMessagesView.ts | debug":{"message":"Debug"},"panels/media/PlayerMessagesView.ts | default":{"message":"Default"},"panels/media/PlayerMessagesView.ts | error":{"message":"Error"},"panels/media/PlayerMessagesView.ts | errorCauseLabel":{"message":"Caused by:"},"panels/media/PlayerMessagesView.ts | errorCodeLabel":{"message":"Error Code:"},"panels/media/PlayerMessagesView.ts | errorDataLabel":{"message":"Data:"},"panels/media/PlayerMessagesView.ts | errorGroupLabel":{"message":"Error Group:"},"panels/media/PlayerMessagesView.ts | errorStackLabel":{"message":"Stacktrace:"},"panels/media/PlayerMessagesView.ts | filterLogMessages":{"message":"Filter log messages"},"panels/media/PlayerMessagesView.ts | info":{"message":"Info"},"panels/media/PlayerMessagesView.ts | logLevel":{"message":"Log level:"},"panels/media/PlayerMessagesView.ts | warning":{"message":"Warning"},"panels/media/PlayerPropertiesView.ts | audio":{"message":"Audio"},"panels/media/PlayerPropertiesView.ts | bitrate":{"message":"Bitrate"},"panels/media/PlayerPropertiesView.ts | decoder":{"message":"Decoder"},"panels/media/PlayerPropertiesView.ts | decoderName":{"message":"Decoder name"},"panels/media/PlayerPropertiesView.ts | decryptingDemuxer":{"message":"Decrypting demuxer"},"panels/media/PlayerPropertiesView.ts | duration":{"message":"Duration"},"panels/media/PlayerPropertiesView.ts | encoderName":{"message":"Encoder name"},"panels/media/PlayerPropertiesView.ts | fileSize":{"message":"File size"},"panels/media/PlayerPropertiesView.ts | frameRate":{"message":"Frame rate"},"panels/media/PlayerPropertiesView.ts | hardwareDecoder":{"message":"Hardware decoder"},"panels/media/PlayerPropertiesView.ts | hardwareEncoder":{"message":"Hardware encoder"},"panels/media/PlayerPropertiesView.ts | noDecoder":{"message":"No decoder"},"panels/media/PlayerPropertiesView.ts | noEncoder":{"message":"No encoder"},"panels/media/PlayerPropertiesView.ts | noTextTracks":{"message":"No text tracks"},"panels/media/PlayerPropertiesView.ts | playbackFrameTitle":{"message":"Playback frame title"},"panels/media/PlayerPropertiesView.ts | playbackFrameUrl":{"message":"Playback frame URL"},"panels/media/PlayerPropertiesView.ts | properties":{"message":"Properties"},"panels/media/PlayerPropertiesView.ts | rangeHeaderSupport":{"message":"Range header support"},"panels/media/PlayerPropertiesView.ts | rendererName":{"message":"Renderer name"},"panels/media/PlayerPropertiesView.ts | resolution":{"message":"Resolution"},"panels/media/PlayerPropertiesView.ts | singleoriginPlayback":{"message":"Single-origin playback"},"panels/media/PlayerPropertiesView.ts | startTime":{"message":"Start time"},"panels/media/PlayerPropertiesView.ts | streaming":{"message":"Streaming"},"panels/media/PlayerPropertiesView.ts | textTrack":{"message":"Text track"},"panels/media/PlayerPropertiesView.ts | track":{"message":"Track"},"panels/media/PlayerPropertiesView.ts | video":{"message":"Video"},"panels/media/PlayerPropertiesView.ts | videoFreezingScore":{"message":"Video freezing score"},"panels/media/PlayerPropertiesView.ts | videoPlaybackRoughness":{"message":"Video playback roughness"},"panels/mobile_throttling/mobile_throttling-meta.ts | device":{"message":"device"},"panels/mobile_throttling/mobile_throttling-meta.ts | enableFastGThrottling":{"message":"Enable fast 3G throttling"},"panels/mobile_throttling/mobile_throttling-meta.ts | enableSlowGThrottling":{"message":"Enable slow 3G throttling"},"panels/mobile_throttling/mobile_throttling-meta.ts | goOffline":{"message":"Go offline"},"panels/mobile_throttling/mobile_throttling-meta.ts | goOnline":{"message":"Go online"},"panels/mobile_throttling/mobile_throttling-meta.ts | showThrottling":{"message":"Show Throttling"},"panels/mobile_throttling/mobile_throttling-meta.ts | throttling":{"message":"Throttling"},"panels/mobile_throttling/mobile_throttling-meta.ts | throttlingTag":{"message":"throttling"},"panels/mobile_throttling/MobileThrottlingSelector.ts | advanced":{"message":"Advanced"},"panels/mobile_throttling/MobileThrottlingSelector.ts | disabled":{"message":"Disabled"},"panels/mobile_throttling/MobileThrottlingSelector.ts | presets":{"message":"Presets"},"panels/mobile_throttling/NetworkPanelIndicator.ts | acceptedEncodingOverrideSet":{"message":"The set of accepted Content-Encoding headers has been modified by DevTools. See the Network Conditions panel."},"panels/mobile_throttling/NetworkPanelIndicator.ts | networkThrottlingIsEnabled":{"message":"Network throttling is enabled"},"panels/mobile_throttling/NetworkPanelIndicator.ts | requestsMayBeBlocked":{"message":"Requests may be blocked"},"panels/mobile_throttling/NetworkPanelIndicator.ts | requestsMayBeRewrittenByLocal":{"message":"Requests may be rewritten by local overrides"},"panels/mobile_throttling/NetworkThrottlingSelector.ts | custom":{"message":"Custom"},"panels/mobile_throttling/NetworkThrottlingSelector.ts | disabled":{"message":"Disabled"},"panels/mobile_throttling/NetworkThrottlingSelector.ts | presets":{"message":"Presets"},"panels/mobile_throttling/ThrottlingManager.ts | add":{"message":"Add…"},"panels/mobile_throttling/ThrottlingManager.ts | addS":{"message":"Add {PH1}"},"panels/mobile_throttling/ThrottlingManager.ts | cpuThrottling":{"message":"CPU throttling"},"panels/mobile_throttling/ThrottlingManager.ts | cpuThrottlingIsEnabled":{"message":"CPU throttling is enabled"},"panels/mobile_throttling/ThrottlingManager.ts | dSlowdown":{"message":"{PH1}× slowdown"},"panels/mobile_throttling/ThrottlingManager.ts | excessConcurrency":{"message":"Exceeding the default value may degrade system performance."},"panels/mobile_throttling/ThrottlingManager.ts | forceDisconnectedFromNetwork":{"message":"Force disconnected from network"},"panels/mobile_throttling/ThrottlingManager.ts | hardwareConcurrency":{"message":"Hardware concurrency"},"panels/mobile_throttling/ThrottlingManager.ts | hardwareConcurrencyIsEnabled":{"message":"Hardware concurrency override is enabled"},"panels/mobile_throttling/ThrottlingManager.ts | hardwareConcurrencyValue":{"message":"Value of navigator.hardwareConcurrency"},"panels/mobile_throttling/ThrottlingManager.ts | noThrottling":{"message":"No throttling"},"panels/mobile_throttling/ThrottlingManager.ts | offline":{"message":"Offline"},"panels/mobile_throttling/ThrottlingManager.ts | resetConcurrency":{"message":"Reset to the default value"},"panels/mobile_throttling/ThrottlingManager.ts | sS":{"message":"{PH1}: {PH2}"},"panels/mobile_throttling/ThrottlingManager.ts | throttling":{"message":"Throttling"},"panels/mobile_throttling/ThrottlingPresets.ts | checkNetworkAndPerformancePanels":{"message":"Check Network and Performance panels"},"panels/mobile_throttling/ThrottlingPresets.ts | custom":{"message":"Custom"},"panels/mobile_throttling/ThrottlingPresets.ts | fastGXCpuSlowdown":{"message":"Fast 3G & 4x CPU slowdown"},"panels/mobile_throttling/ThrottlingPresets.ts | lowendMobile":{"message":"Low-end mobile"},"panels/mobile_throttling/ThrottlingPresets.ts | midtierMobile":{"message":"Mid-tier mobile"},"panels/mobile_throttling/ThrottlingPresets.ts | noInternetConnectivity":{"message":"No internet connectivity"},"panels/mobile_throttling/ThrottlingPresets.ts | noThrottling":{"message":"No throttling"},"panels/mobile_throttling/ThrottlingPresets.ts | slowGXCpuSlowdown":{"message":"Slow 3G & 6x CPU slowdown"},"panels/mobile_throttling/ThrottlingSettingsTab.ts | addCustomProfile":{"message":"Add custom profile..."},"panels/mobile_throttling/ThrottlingSettingsTab.ts | dms":{"message":"{PH1} ms"},"panels/mobile_throttling/ThrottlingSettingsTab.ts | download":{"message":"Download"},"panels/mobile_throttling/ThrottlingSettingsTab.ts | dskbits":{"message":"{PH1} kbit/s"},"panels/mobile_throttling/ThrottlingSettingsTab.ts | fsmbits":{"message":"{PH1} Mbit/s"},"panels/mobile_throttling/ThrottlingSettingsTab.ts | latency":{"message":"Latency"},"panels/mobile_throttling/ThrottlingSettingsTab.ts | latencyMustBeAnIntegerBetweenSms":{"message":"Latency must be an integer between {PH1} ms to {PH2} ms inclusive"},"panels/mobile_throttling/ThrottlingSettingsTab.ts | networkThrottlingProfiles":{"message":"Network Throttling Profiles"},"panels/mobile_throttling/ThrottlingSettingsTab.ts | optional":{"message":"optional"},"panels/mobile_throttling/ThrottlingSettingsTab.ts | profileName":{"message":"Profile Name"},"panels/mobile_throttling/ThrottlingSettingsTab.ts | profileNameCharactersLengthMust":{"message":"Profile Name characters length must be between 1 to {PH1} inclusive"},"panels/mobile_throttling/ThrottlingSettingsTab.ts | sMustBeANumberBetweenSkbsToSkbs":{"message":"{PH1} must be a number between {PH2} kbit/s to {PH3} kbit/s inclusive"},"panels/mobile_throttling/ThrottlingSettingsTab.ts | upload":{"message":"Upload"},"panels/network/BinaryResourceView.ts | binaryViewType":{"message":"Binary view type"},"panels/network/BinaryResourceView.ts | copiedAsBase":{"message":"Copied as Base64"},"panels/network/BinaryResourceView.ts | copiedAsHex":{"message":"Copied as Hex"},"panels/network/BinaryResourceView.ts | copiedAsUtf":{"message":"Copied as UTF-8"},"panels/network/BinaryResourceView.ts | copyAsBase":{"message":"Copy as Base64"},"panels/network/BinaryResourceView.ts | copyAsHex":{"message":"Copy as Hex"},"panels/network/BinaryResourceView.ts | copyAsUtf":{"message":"Copy as UTF-8"},"panels/network/BinaryResourceView.ts | copyToClipboard":{"message":"Copy to clipboard"},"panels/network/BinaryResourceView.ts | hexViewer":{"message":"Hex Viewer"},"panels/network/BlockedURLsPane.ts | addNetworkRequestBlockingPattern":{"message":"Add network request blocking pattern"},"panels/network/BlockedURLsPane.ts | addPattern":{"message":"Add pattern"},"panels/network/BlockedURLsPane.ts | dBlocked":{"message":"{PH1} blocked"},"panels/network/BlockedURLsPane.ts | enableNetworkRequestBlocking":{"message":"Enable network request blocking"},"panels/network/BlockedURLsPane.ts | itemDeleted":{"message":"Item successfully deleted"},"panels/network/BlockedURLsPane.ts | networkRequestsAreNotBlockedS":{"message":"Network requests are not blocked. {PH1}"},"panels/network/BlockedURLsPane.ts | patternAlreadyExists":{"message":"Pattern already exists."},"panels/network/BlockedURLsPane.ts | patternInputCannotBeEmpty":{"message":"Pattern input cannot be empty."},"panels/network/BlockedURLsPane.ts | removeAllPatterns":{"message":"Remove all patterns"},"panels/network/BlockedURLsPane.ts | textPatternToBlockMatching":{"message":"Text pattern to block matching requests; use * for wildcard"},"panels/network/components/HeaderSectionRow.ts | activeClientExperimentVariation":{"message":"Active client experiment variation IDs."},"panels/network/components/HeaderSectionRow.ts | activeClientExperimentVariationIds":{"message":"Active client experiment variation IDs that trigger server-side behavior."},"panels/network/components/HeaderSectionRow.ts | decoded":{"message":"Decoded:"},"panels/network/components/HeaderSectionRow.ts | editHeader":{"message":"Override header"},"panels/network/components/HeaderSectionRow.ts | headerNamesOnlyLetters":{"message":"Header names should contain only letters, digits, hyphens or underscores"},"panels/network/components/HeaderSectionRow.ts | learnMore":{"message":"Learn more"},"panels/network/components/HeaderSectionRow.ts | learnMoreInTheIssuesTab":{"message":"Learn more in the issues tab"},"panels/network/components/HeaderSectionRow.ts | reloadPrompt":{"message":"Refresh the page/request for these changes to take effect"},"panels/network/components/HeaderSectionRow.ts | removeOverride":{"message":"Remove this header override"},"panels/network/components/RequestHeaderSection.ts | learnMore":{"message":"Learn more"},"panels/network/components/RequestHeaderSection.ts | onlyProvisionalHeadersAre":{"message":"Only provisional headers are available because this request was not sent over the network and instead was served from a local cache, which doesn’t store the original request headers. Disable cache to see full request headers."},"panels/network/components/RequestHeaderSection.ts | provisionalHeadersAreShown":{"message":"Provisional headers are shown."},"panels/network/components/RequestHeaderSection.ts | provisionalHeadersAreShownDisableCache":{"message":"Provisional headers are shown. Disable cache to see full headers."},"panels/network/components/RequestHeadersView.ts | fromDiskCache":{"message":"(from disk cache)"},"panels/network/components/RequestHeadersView.ts | fromMemoryCache":{"message":"(from memory cache)"},"panels/network/components/RequestHeadersView.ts | fromPrefetchCache":{"message":"(from prefetch cache)"},"panels/network/components/RequestHeadersView.ts | fromServiceWorker":{"message":"(from service worker)"},"panels/network/components/RequestHeadersView.ts | fromSignedexchange":{"message":"(from signed-exchange)"},"panels/network/components/RequestHeadersView.ts | fromWebBundle":{"message":"(from Web Bundle)"},"panels/network/components/RequestHeadersView.ts | general":{"message":"General"},"panels/network/components/RequestHeadersView.ts | headerOverrides":{"message":"Header overrides"},"panels/network/components/RequestHeadersView.ts | raw":{"message":"Raw"},"panels/network/components/RequestHeadersView.ts | referrerPolicy":{"message":"Referrer Policy"},"panels/network/components/RequestHeadersView.ts | remoteAddress":{"message":"Remote Address"},"panels/network/components/RequestHeadersView.ts | requestHeaders":{"message":"Request Headers"},"panels/network/components/RequestHeadersView.ts | requestMethod":{"message":"Request Method"},"panels/network/components/RequestHeadersView.ts | requestUrl":{"message":"Request URL"},"panels/network/components/RequestHeadersView.ts | responseHeaders":{"message":"Response Headers"},"panels/network/components/RequestHeadersView.ts | revealHeaderOverrides":{"message":"Reveal header override definitions"},"panels/network/components/RequestHeadersView.ts | showMore":{"message":"Show more"},"panels/network/components/RequestHeadersView.ts | statusCode":{"message":"Status Code"},"panels/network/components/RequestTrustTokensView.ts | aClientprovidedArgumentWas":{"message":"A client-provided argument was malformed or otherwise invalid."},"panels/network/components/RequestTrustTokensView.ts | eitherNoInputsForThisOperation":{"message":"Either no inputs for this operation are available or the output exceeds the operations quota."},"panels/network/components/RequestTrustTokensView.ts | failure":{"message":"Failure"},"panels/network/components/RequestTrustTokensView.ts | issuer":{"message":"Issuer"},"panels/network/components/RequestTrustTokensView.ts | issuers":{"message":"Issuers"},"panels/network/components/RequestTrustTokensView.ts | numberOfIssuedTokens":{"message":"Number of issued tokens"},"panels/network/components/RequestTrustTokensView.ts | parameters":{"message":"Parameters"},"panels/network/components/RequestTrustTokensView.ts | refreshPolicy":{"message":"Refresh policy"},"panels/network/components/RequestTrustTokensView.ts | result":{"message":"Result"},"panels/network/components/RequestTrustTokensView.ts | status":{"message":"Status"},"panels/network/components/RequestTrustTokensView.ts | success":{"message":"Success"},"panels/network/components/RequestTrustTokensView.ts | theKeysForThisPSTIssuerAreUnavailable":{"message":"The keys for this PST issuer are unavailable. The issuer may need to be registered via the Chrome registration process."},"panels/network/components/RequestTrustTokensView.ts | theOperationFailedForAnUnknown":{"message":"The operation failed for an unknown reason."},"panels/network/components/RequestTrustTokensView.ts | theOperationsResultWasServedFrom":{"message":"The operations result was served from cache."},"panels/network/components/RequestTrustTokensView.ts | theOperationWasFulfilledLocally":{"message":"The operation was fulfilled locally, no request was sent."},"panels/network/components/RequestTrustTokensView.ts | theServersResponseWasMalformedOr":{"message":"The servers response was malformed or otherwise invalid."},"panels/network/components/RequestTrustTokensView.ts | topLevelOrigin":{"message":"Top level origin"},"panels/network/components/RequestTrustTokensView.ts | type":{"message":"Type"},"panels/network/components/ResponseHeaderSection.ts | addHeader":{"message":"Add header"},"panels/network/components/ResponseHeaderSection.ts | chooseThisOptionIfTheResourceAnd":{"message":"Choose this option if the resource and the document are served from the same site."},"panels/network/components/ResponseHeaderSection.ts | onlyChooseThisOptionIfAn":{"message":"Only choose this option if an arbitrary website including this resource does not impose a security risk."},"panels/network/components/ResponseHeaderSection.ts | thisDocumentWasBlockedFrom":{"message":"This document was blocked from loading in an iframe with a sandbox attribute because this document specified a cross-origin opener policy."},"panels/network/components/ResponseHeaderSection.ts | toEmbedThisFrameInYourDocument":{"message":"To embed this frame in your document, the response needs to enable the cross-origin embedder policy by specifying the following response header:"},"panels/network/components/ResponseHeaderSection.ts | toUseThisResourceFromADifferent":{"message":"To use this resource from a different origin, the server needs to specify a cross-origin resource policy in the response headers:"},"panels/network/components/ResponseHeaderSection.ts | toUseThisResourceFromADifferentOrigin":{"message":"To use this resource from a different origin, the server may relax the cross-origin resource policy response header:"},"panels/network/components/ResponseHeaderSection.ts | toUseThisResourceFromADifferentSite":{"message":"To use this resource from a different site, the server may relax the cross-origin resource policy response header:"},"panels/network/components/WebBundleInfoView.ts | bundledResource":{"message":"Bundled resource"},"panels/network/EventSourceMessagesView.ts | copyMessage":{"message":"Copy message"},"panels/network/EventSourceMessagesView.ts | data":{"message":"Data"},"panels/network/EventSourceMessagesView.ts | eventSource":{"message":"Event Source"},"panels/network/EventSourceMessagesView.ts | id":{"message":"Id"},"panels/network/EventSourceMessagesView.ts | time":{"message":"Time"},"panels/network/EventSourceMessagesView.ts | type":{"message":"Type"},"panels/network/network-meta.ts | clear":{"message":"Clear network log"},"panels/network/network-meta.ts | colorCode":{"message":"color code"},"panels/network/network-meta.ts | colorCodeByResourceType":{"message":"Color code by resource type"},"panels/network/network-meta.ts | colorcodeResourceTypes":{"message":"Color-code resource types"},"panels/network/network-meta.ts | diskCache":{"message":"disk cache"},"panels/network/network-meta.ts | dontGroupNetworkLogItemsByFrame":{"message":"Don't group network log items by frame"},"panels/network/network-meta.ts | frame":{"message":"frame"},"panels/network/network-meta.ts | group":{"message":"group"},"panels/network/network-meta.ts | groupNetworkLogByFrame":{"message":"Group network log by frame"},"panels/network/network-meta.ts | groupNetworkLogItemsByFrame":{"message":"Group network log items by frame"},"panels/network/network-meta.ts | hideRequestDetails":{"message":"Hide request details"},"panels/network/network-meta.ts | network":{"message":"Network"},"panels/network/network-meta.ts | netWork":{"message":"network"},"panels/network/network-meta.ts | networkConditions":{"message":"Network conditions"},"panels/network/network-meta.ts | networkRequestBlocking":{"message":"Network request blocking"},"panels/network/network-meta.ts | networkThrottling":{"message":"network throttling"},"panels/network/network-meta.ts | recordNetworkLog":{"message":"Record network log"},"panels/network/network-meta.ts | resourceType":{"message":"resource type"},"panels/network/network-meta.ts | search":{"message":"Search"},"panels/network/network-meta.ts | showNetwork":{"message":"Show Network"},"panels/network/network-meta.ts | showNetworkConditions":{"message":"Show Network conditions"},"panels/network/network-meta.ts | showNetworkRequestBlocking":{"message":"Show Network request blocking"},"panels/network/network-meta.ts | showSearch":{"message":"Show Search"},"panels/network/network-meta.ts | stopRecordingNetworkLog":{"message":"Stop recording network log"},"panels/network/network-meta.ts | useDefaultColors":{"message":"Use default colors"},"panels/network/NetworkConfigView.ts | acceptedEncoding":{"message":"Accepted Content-Encodings"},"panels/network/NetworkConfigView.ts | caching":{"message":"Caching"},"panels/network/NetworkConfigView.ts | clientHintsStatusText":{"message":"User agent updated."},"panels/network/NetworkConfigView.ts | custom":{"message":"Custom..."},"panels/network/NetworkConfigView.ts | customUserAgentFieldIsRequired":{"message":"Custom user agent field is required"},"panels/network/NetworkConfigView.ts | disableCache":{"message":"Disable cache"},"panels/network/NetworkConfigView.ts | enterACustomUserAgent":{"message":"Enter a custom user agent"},"panels/network/NetworkConfigView.ts | networkConditionsPanelShown":{"message":"Network conditions shown"},"panels/network/NetworkConfigView.ts | networkThrottling":{"message":"Network throttling"},"panels/network/NetworkConfigView.ts | selectAutomatically":{"message":"Use browser default"},"panels/network/NetworkConfigView.ts | userAgent":{"message":"User agent"},"panels/network/NetworkDataGridNode.ts | alternativeJobWonRace":{"message":"Chrome used a HTTP/3 connection induced by an 'Alt-Svc' header because it won a race against establishing a connection using a different HTTP version."},"panels/network/NetworkDataGridNode.ts | alternativeJobWonWithoutRace":{"message":"Chrome used a HTTP/3 connection induced by an 'Alt-Svc' header without racing against establishing a connection using a different HTTP version."},"panels/network/NetworkDataGridNode.ts | blockeds":{"message":"(blocked:{PH1})"},"panels/network/NetworkDataGridNode.ts | blockedTooltip":{"message":"This request was blocked due to misconfigured response headers, click to view the headers"},"panels/network/NetworkDataGridNode.ts | broken":{"message":"Chrome did not try to establish a HTTP/3 connection because it was marked as broken."},"panels/network/NetworkDataGridNode.ts | canceled":{"message":"(canceled)"},"panels/network/NetworkDataGridNode.ts | corsError":{"message":"CORS error"},"panels/network/NetworkDataGridNode.ts | crossoriginResourceSharingErrorS":{"message":"Cross-Origin Resource Sharing error: {PH1}"},"panels/network/NetworkDataGridNode.ts | csp":{"message":"csp"},"panels/network/NetworkDataGridNode.ts | data":{"message":"(data)"},"panels/network/NetworkDataGridNode.ts | devtools":{"message":"devtools"},"panels/network/NetworkDataGridNode.ts | diskCache":{"message":"(disk cache)"},"panels/network/NetworkDataGridNode.ts | dnsAlpnH3JobWonRace":{"message":"Chrome used a HTTP/3 connection due to the DNS record indicating HTTP/3 support, which won a race against establishing a connection using a different HTTP version."},"panels/network/NetworkDataGridNode.ts | dnsAlpnH3JobWonWithoutRace":{"message":"Chrome used a HTTP/3 connection due to the DNS record indicating HTTP/3 support. There was no race against establishing a connection using a different HTTP version."},"panels/network/NetworkDataGridNode.ts | failed":{"message":"(failed)"},"panels/network/NetworkDataGridNode.ts | finished":{"message":"Finished"},"panels/network/NetworkDataGridNode.ts | hasOverriddenHeaders":{"message":"Request has overridden headers"},"panels/network/NetworkDataGridNode.ts | level":{"message":"level 1"},"panels/network/NetworkDataGridNode.ts | mainJobWonRace":{"message":"Chrome used this protocol because it won a race against establishing a HTTP/3 connection."},"panels/network/NetworkDataGridNode.ts | mappingMissing":{"message":"Chrome did not use an alternative HTTP version because no alternative protocol information was available when the request was issued, but an 'Alt-Svc' header was present in the response."},"panels/network/NetworkDataGridNode.ts | memoryCache":{"message":"(memory cache)"},"panels/network/NetworkDataGridNode.ts | origin":{"message":"origin"},"panels/network/NetworkDataGridNode.ts | other":{"message":"other"},"panels/network/NetworkDataGridNode.ts | otherC":{"message":"Other"},"panels/network/NetworkDataGridNode.ts | parser":{"message":"Parser"},"panels/network/NetworkDataGridNode.ts | pending":{"message":"Pending"},"panels/network/NetworkDataGridNode.ts | pendingq":{"message":"(pending)"},"panels/network/NetworkDataGridNode.ts | prefetchCache":{"message":"(prefetch cache)"},"panels/network/NetworkDataGridNode.ts | preflight":{"message":"Preflight"},"panels/network/NetworkDataGridNode.ts | preload":{"message":"Preload"},"panels/network/NetworkDataGridNode.ts | push":{"message":"Push / "},"panels/network/NetworkDataGridNode.ts | redirect":{"message":"Redirect"},"panels/network/NetworkDataGridNode.ts | script":{"message":"Script"},"panels/network/NetworkDataGridNode.ts | selectPreflightRequest":{"message":"Select preflight request"},"panels/network/NetworkDataGridNode.ts | selectTheRequestThatTriggered":{"message":"Select the request that triggered this preflight"},"panels/network/NetworkDataGridNode.ts | servedFromDiskCacheResourceSizeS":{"message":"Served from disk cache, resource size: {PH1}"},"panels/network/NetworkDataGridNode.ts | servedFromMemoryCacheResource":{"message":"Served from memory cache, resource size: {PH1}"},"panels/network/NetworkDataGridNode.ts | servedFromPrefetchCacheResource":{"message":"Served from prefetch cache, resource size: {PH1}"},"panels/network/NetworkDataGridNode.ts | servedFromServiceworkerResource":{"message":"Served from ServiceWorker, resource size: {PH1}"},"panels/network/NetworkDataGridNode.ts | servedFromSignedHttpExchange":{"message":"Served from Signed HTTP Exchange, resource size: {PH1}"},"panels/network/NetworkDataGridNode.ts | servedFromWebBundle":{"message":"Served from Web Bundle, resource size: {PH1}"},"panels/network/NetworkDataGridNode.ts | serviceworker":{"message":"(ServiceWorker)"},"panels/network/NetworkDataGridNode.ts | signedexchange":{"message":"signed-exchange"},"panels/network/NetworkDataGridNode.ts | sPreflight":{"message":"{PH1} + Preflight"},"panels/network/NetworkDataGridNode.ts | timeSubtitleTooltipText":{"message":"Latency (response received time - start time)"},"panels/network/NetworkDataGridNode.ts | unknown":{"message":"(unknown)"},"panels/network/NetworkDataGridNode.ts | unknownExplanation":{"message":"The request status cannot be shown here because the page that issued it unloaded while the request was in flight. You can use chrome://net-export to capture a network log and see all request details."},"panels/network/NetworkDataGridNode.ts | webBundle":{"message":"(Web Bundle)"},"panels/network/NetworkDataGridNode.ts | webBundleError":{"message":"Web Bundle error"},"panels/network/NetworkDataGridNode.ts | webBundleInnerRequest":{"message":"Served from Web Bundle"},"panels/network/NetworkItemView.ts | cookies":{"message":"Cookies"},"panels/network/NetworkItemView.ts | eventstream":{"message":"EventStream"},"panels/network/NetworkItemView.ts | headers":{"message":"Headers"},"panels/network/NetworkItemView.ts | initiator":{"message":"Initiator"},"panels/network/NetworkItemView.ts | messages":{"message":"Messages"},"panels/network/NetworkItemView.ts | payload":{"message":"Payload"},"panels/network/NetworkItemView.ts | preview":{"message":"Preview"},"panels/network/NetworkItemView.ts | rawResponseData":{"message":"Raw response data"},"panels/network/NetworkItemView.ts | requestAndResponseCookies":{"message":"Request and response cookies"},"panels/network/NetworkItemView.ts | requestAndResponseTimeline":{"message":"Request and response timeline"},"panels/network/NetworkItemView.ts | requestInitiatorCallStack":{"message":"Request initiator call stack"},"panels/network/NetworkItemView.ts | response":{"message":"Response"},"panels/network/NetworkItemView.ts | responsePreview":{"message":"Response preview"},"panels/network/NetworkItemView.ts | signedexchangeError":{"message":"SignedExchange error"},"panels/network/NetworkItemView.ts | timing":{"message":"Timing"},"panels/network/NetworkItemView.ts | trustTokenOperationDetails":{"message":"Private State Token operation details"},"panels/network/NetworkItemView.ts | trustTokens":{"message":"Private State Tokens"},"panels/network/NetworkItemView.ts | websocketMessages":{"message":"WebSocket messages"},"panels/network/NetworkLogView.ts | areYouSureYouWantToClearBrowser":{"message":"Are you sure you want to clear browser cache?"},"panels/network/NetworkLogView.ts | areYouSureYouWantToClearBrowserCookies":{"message":"Are you sure you want to clear browser cookies?"},"panels/network/NetworkLogView.ts | blockedRequests":{"message":"Blocked Requests"},"panels/network/NetworkLogView.ts | blockRequestDomain":{"message":"Block request domain"},"panels/network/NetworkLogView.ts | blockRequestUrl":{"message":"Block request URL"},"panels/network/NetworkLogView.ts | clearBrowserCache":{"message":"Clear browser cache"},"panels/network/NetworkLogView.ts | clearBrowserCookies":{"message":"Clear browser cookies"},"panels/network/NetworkLogView.ts | copy":{"message":"Copy"},"panels/network/NetworkLogView.ts | copyAllAsCurl":{"message":"Copy all as cURL"},"panels/network/NetworkLogView.ts | copyAllAsCurlBash":{"message":"Copy all as cURL (bash)"},"panels/network/NetworkLogView.ts | copyAllAsCurlCmd":{"message":"Copy all as cURL (cmd)"},"panels/network/NetworkLogView.ts | copyAllAsFetch":{"message":"Copy all as fetch"},"panels/network/NetworkLogView.ts | copyAllAsHar":{"message":"Copy all as HAR"},"panels/network/NetworkLogView.ts | copyAllAsNodejsFetch":{"message":"Copy all as Node.js fetch"},"panels/network/NetworkLogView.ts | copyAllAsPowershell":{"message":"Copy all as PowerShell"},"panels/network/NetworkLogView.ts | copyAsCurl":{"message":"Copy as cURL"},"panels/network/NetworkLogView.ts | copyAsCurlBash":{"message":"Copy as cURL (bash)"},"panels/network/NetworkLogView.ts | copyAsCurlCmd":{"message":"Copy as cURL (cmd)"},"panels/network/NetworkLogView.ts | copyAsFetch":{"message":"Copy as fetch"},"panels/network/NetworkLogView.ts | copyAsNodejsFetch":{"message":"Copy as Node.js fetch"},"panels/network/NetworkLogView.ts | copyAsPowershell":{"message":"Copy as PowerShell"},"panels/network/NetworkLogView.ts | copyRequestHeaders":{"message":"Copy request headers"},"panels/network/NetworkLogView.ts | copyResponse":{"message":"Copy response"},"panels/network/NetworkLogView.ts | copyResponseHeaders":{"message":"Copy response headers"},"panels/network/NetworkLogView.ts | copyStacktrace":{"message":"Copy stack trace"},"panels/network/NetworkLogView.ts | domcontentloadedS":{"message":"DOMContentLoaded: {PH1}"},"panels/network/NetworkLogView.ts | dropHarFilesHere":{"message":"Drop HAR files here"},"panels/network/NetworkLogView.ts | finishS":{"message":"Finish: {PH1}"},"panels/network/NetworkLogView.ts | hasBlockedCookies":{"message":"Has blocked cookies"},"panels/network/NetworkLogView.ts | hideDataUrls":{"message":"Hide data URLs"},"panels/network/NetworkLogView.ts | hidesDataAndBlobUrls":{"message":"Hides data: and blob: URLs"},"panels/network/NetworkLogView.ts | invertFilter":{"message":"Invert"},"panels/network/NetworkLogView.ts | invertsFilter":{"message":"Inverts the search filter"},"panels/network/NetworkLogView.ts | learnMore":{"message":"Learn more"},"panels/network/NetworkLogView.ts | loadS":{"message":"Load: {PH1}"},"panels/network/NetworkLogView.ts | networkDataAvailable":{"message":"Network Data Available"},"panels/network/NetworkLogView.ts | onlyShowBlockedRequests":{"message":"Only show blocked requests"},"panels/network/NetworkLogView.ts | onlyShowRequestsWithBlocked":{"message":"Only show requests with blocked response cookies"},"panels/network/NetworkLogView.ts | onlyShowThirdPartyRequests":{"message":"Shows only requests with origin different from page origin"},"panels/network/NetworkLogView.ts | overrideHeaders":{"message":"Override headers"},"panels/network/NetworkLogView.ts | performARequestOrHitSToRecordThe":{"message":"Perform a request or hit {PH1} to record the reload."},"panels/network/NetworkLogView.ts | recordingNetworkActivity":{"message":"Recording network activity…"},"panels/network/NetworkLogView.ts | recordToDisplayNetworkActivity":{"message":"Record network log ({PH1}) to display network activity."},"panels/network/NetworkLogView.ts | replayXhr":{"message":"Replay XHR"},"panels/network/NetworkLogView.ts | resourceTypesToInclude":{"message":"Resource types to include"},"panels/network/NetworkLogView.ts | saveAllAsHarWithContent":{"message":"Save all as HAR with content"},"panels/network/NetworkLogView.ts | sBResourcesLoadedByThePage":{"message":"{PH1} B resources loaded by the page"},"panels/network/NetworkLogView.ts | sBSBResourcesLoadedByThePage":{"message":"{PH1} B / {PH2} B resources loaded by the page"},"panels/network/NetworkLogView.ts | sBSBTransferredOverNetwork":{"message":"{PH1} B / {PH2} B transferred over network"},"panels/network/NetworkLogView.ts | sBTransferredOverNetwork":{"message":"{PH1} B transferred over network"},"panels/network/NetworkLogView.ts | sRequests":{"message":"{PH1} requests"},"panels/network/NetworkLogView.ts | sResources":{"message":"{PH1} resources"},"panels/network/NetworkLogView.ts | sSRequests":{"message":"{PH1} / {PH2} requests"},"panels/network/NetworkLogView.ts | sSResources":{"message":"{PH1} / {PH2} resources"},"panels/network/NetworkLogView.ts | sSTransferred":{"message":"{PH1} / {PH2} transferred"},"panels/network/NetworkLogView.ts | sTransferred":{"message":"{PH1} transferred"},"panels/network/NetworkLogView.ts | thirdParty":{"message":"3rd-party requests"},"panels/network/NetworkLogView.ts | unblockS":{"message":"Unblock {PH1}"},"panels/network/NetworkLogViewColumns.ts | connectionId":{"message":"Connection ID"},"panels/network/NetworkLogViewColumns.ts | content":{"message":"Content"},"panels/network/NetworkLogViewColumns.ts | cookies":{"message":"Cookies"},"panels/network/NetworkLogViewColumns.ts | domain":{"message":"Domain"},"panels/network/NetworkLogViewColumns.ts | endTime":{"message":"End Time"},"panels/network/NetworkLogViewColumns.ts | initiator":{"message":"Initiator"},"panels/network/NetworkLogViewColumns.ts | initiatorAddressSpace":{"message":"Initiator Address Space"},"panels/network/NetworkLogViewColumns.ts | latency":{"message":"Latency"},"panels/network/NetworkLogViewColumns.ts | manageHeaderColumns":{"message":"Manage Header Columns…"},"panels/network/NetworkLogViewColumns.ts | method":{"message":"Method"},"panels/network/NetworkLogViewColumns.ts | name":{"message":"Name"},"panels/network/NetworkLogViewColumns.ts | networkLog":{"message":"Network Log"},"panels/network/NetworkLogViewColumns.ts | path":{"message":"Path"},"panels/network/NetworkLogViewColumns.ts | priority":{"message":"Priority"},"panels/network/NetworkLogViewColumns.ts | protocol":{"message":"Protocol"},"panels/network/NetworkLogViewColumns.ts | remoteAddress":{"message":"Remote Address"},"panels/network/NetworkLogViewColumns.ts | remoteAddressSpace":{"message":"Remote Address Space"},"panels/network/NetworkLogViewColumns.ts | responseHeaders":{"message":"Response Headers"},"panels/network/NetworkLogViewColumns.ts | responseTime":{"message":"Response Time"},"panels/network/NetworkLogViewColumns.ts | scheme":{"message":"Scheme"},"panels/network/NetworkLogViewColumns.ts | setCookies":{"message":"Set Cookies"},"panels/network/NetworkLogViewColumns.ts | size":{"message":"Size"},"panels/network/NetworkLogViewColumns.ts | startTime":{"message":"Start Time"},"panels/network/NetworkLogViewColumns.ts | status":{"message":"Status"},"panels/network/NetworkLogViewColumns.ts | text":{"message":"Text"},"panels/network/NetworkLogViewColumns.ts | time":{"message":"Time"},"panels/network/NetworkLogViewColumns.ts | totalDuration":{"message":"Total Duration"},"panels/network/NetworkLogViewColumns.ts | type":{"message":"Type"},"panels/network/NetworkLogViewColumns.ts | url":{"message":"Url"},"panels/network/NetworkLogViewColumns.ts | waterfall":{"message":"Waterfall"},"panels/network/NetworkManageCustomHeadersView.ts | addCustomHeader":{"message":"Add custom header…"},"panels/network/NetworkManageCustomHeadersView.ts | headerName":{"message":"Header Name"},"panels/network/NetworkManageCustomHeadersView.ts | manageHeaderColumns":{"message":"Manage Header Columns"},"panels/network/NetworkManageCustomHeadersView.ts | noCustomHeaders":{"message":"No custom headers"},"panels/network/NetworkPanel.ts | captureScreenshots":{"message":"Capture screenshots"},"panels/network/NetworkPanel.ts | captureScreenshotsWhenLoadingA":{"message":"Capture screenshots when loading a page"},"panels/network/NetworkPanel.ts | close":{"message":"Close"},"panels/network/NetworkPanel.ts | disableCache":{"message":"Disable cache"},"panels/network/NetworkPanel.ts | disableCacheWhileDevtoolsIsOpen":{"message":"Disable cache (while DevTools is open)"},"panels/network/NetworkPanel.ts | doNotClearLogOnPageReload":{"message":"Do not clear log on page reload / navigation"},"panels/network/NetworkPanel.ts | exportHar":{"message":"Export HAR..."},"panels/network/NetworkPanel.ts | fetchingFrames":{"message":"Fetching frames..."},"panels/network/NetworkPanel.ts | groupByFrame":{"message":"Group by frame"},"panels/network/NetworkPanel.ts | groupRequestsByTopLevelRequest":{"message":"Group requests by top level request frame"},"panels/network/NetworkPanel.ts | hitSToReloadAndCaptureFilmstrip":{"message":"Hit {PH1} to reload and capture filmstrip."},"panels/network/NetworkPanel.ts | importHarFile":{"message":"Import HAR file..."},"panels/network/NetworkPanel.ts | moreNetworkConditions":{"message":"More network conditions…"},"panels/network/NetworkPanel.ts | networkSettings":{"message":"Network settings"},"panels/network/NetworkPanel.ts | preserveLog":{"message":"Preserve log"},"panels/network/NetworkPanel.ts | recordingFrames":{"message":"Recording frames..."},"panels/network/NetworkPanel.ts | revealInNetworkPanel":{"message":"Reveal in Network panel"},"panels/network/NetworkPanel.ts | search":{"message":"Search"},"panels/network/NetworkPanel.ts | showMoreInformationInRequestRows":{"message":"Show more information in request rows"},"panels/network/NetworkPanel.ts | showOverview":{"message":"Show overview"},"panels/network/NetworkPanel.ts | showOverviewOfNetworkRequests":{"message":"Show overview of network requests"},"panels/network/NetworkPanel.ts | throttling":{"message":"Throttling"},"panels/network/NetworkPanel.ts | useLargeRequestRows":{"message":"Use large request rows"},"panels/network/NetworkSearchScope.ts | url":{"message":"URL"},"panels/network/NetworkTimeCalculator.ts | sDownload":{"message":"{PH1} download"},"panels/network/NetworkTimeCalculator.ts | sFromCache":{"message":"{PH1} (from cache)"},"panels/network/NetworkTimeCalculator.ts | sFromServiceworker":{"message":"{PH1} (from ServiceWorker)"},"panels/network/NetworkTimeCalculator.ts | sLatency":{"message":"{PH1} latency"},"panels/network/NetworkTimeCalculator.ts | sLatencySDownloadSTotal":{"message":"{PH1} latency, {PH2} download ({PH3} total)"},"panels/network/RequestCookiesView.ts | cookiesThatWereReceivedFromThe":{"message":"Cookies that were received from the server in the 'set-cookie' header of the response"},"panels/network/RequestCookiesView.ts | cookiesThatWereReceivedFromTheServer":{"message":"Cookies that were received from the server in the 'set-cookie' header of the response but were malformed"},"panels/network/RequestCookiesView.ts | cookiesThatWereSentToTheServerIn":{"message":"Cookies that were sent to the server in the 'cookie' header of the request"},"panels/network/RequestCookiesView.ts | learnMore":{"message":"Learn more"},"panels/network/RequestCookiesView.ts | malformedResponseCookies":{"message":"Malformed Response Cookies"},"panels/network/RequestCookiesView.ts | noRequestCookiesWereSent":{"message":"No request cookies were sent."},"panels/network/RequestCookiesView.ts | requestCookies":{"message":"Request Cookies"},"panels/network/RequestCookiesView.ts | responseCookies":{"message":"Response Cookies"},"panels/network/RequestCookiesView.ts | showFilteredOutRequestCookies":{"message":"show filtered out request cookies"},"panels/network/RequestCookiesView.ts | siteHasCookieInOtherPartition":{"message":"This site has cookies in another partition, that were not sent with this request. {PH1}"},"panels/network/RequestCookiesView.ts | thisRequestHasNoCookies":{"message":"This request has no cookies."},"panels/network/RequestHeadersView.ts | activeClientExperimentVariation":{"message":"Active client experiment variation IDs."},"panels/network/RequestHeadersView.ts | activeClientExperimentVariationIds":{"message":"Active client experiment variation IDs that trigger server-side behavior."},"panels/network/RequestHeadersView.ts | chooseThisOptionIfTheResourceAnd":{"message":"Choose this option if the resource and the document are served from the same site."},"panels/network/RequestHeadersView.ts | copyValue":{"message":"Copy value"},"panels/network/RequestHeadersView.ts | decoded":{"message":"Decoded:"},"panels/network/RequestHeadersView.ts | fromDiskCache":{"message":"(from disk cache)"},"panels/network/RequestHeadersView.ts | fromMemoryCache":{"message":"(from memory cache)"},"panels/network/RequestHeadersView.ts | fromPrefetchCache":{"message":"(from prefetch cache)"},"panels/network/RequestHeadersView.ts | fromServiceWorker":{"message":"(from service worker)"},"panels/network/RequestHeadersView.ts | fromSignedexchange":{"message":"(from signed-exchange)"},"panels/network/RequestHeadersView.ts | fromWebBundle":{"message":"(from Web Bundle)"},"panels/network/RequestHeadersView.ts | general":{"message":"General"},"panels/network/RequestHeadersView.ts | headerOverrides":{"message":"Header overrides"},"panels/network/RequestHeadersView.ts | learnMore":{"message":"Learn more"},"panels/network/RequestHeadersView.ts | learnMoreInTheIssuesTab":{"message":"Learn more in the issues tab"},"panels/network/RequestHeadersView.ts | onlyChooseThisOptionIfAn":{"message":"Only choose this option if an arbitrary website including this resource does not impose a security risk."},"panels/network/RequestHeadersView.ts | onlyProvisionalHeadersAre":{"message":"Only provisional headers are available because this request was not sent over the network and instead was served from a local cache, which doesn’t store the original request headers. Disable cache to see full request headers."},"panels/network/RequestHeadersView.ts | provisionalHeadersAreShown":{"message":"Provisional headers are shown"},"panels/network/RequestHeadersView.ts | provisionalHeadersAreShownS":{"message":"Provisional headers are shown. Disable cache to see full headers."},"panels/network/RequestHeadersView.ts | referrerPolicy":{"message":"Referrer Policy"},"panels/network/RequestHeadersView.ts | remoteAddress":{"message":"Remote Address"},"panels/network/RequestHeadersView.ts | requestHeaders":{"message":"Request Headers"},"panels/network/RequestHeadersView.ts | requestMethod":{"message":"Request Method"},"panels/network/RequestHeadersView.ts | requestUrl":{"message":"Request URL"},"panels/network/RequestHeadersView.ts | responseHeaders":{"message":"Response Headers"},"panels/network/RequestHeadersView.ts | showMore":{"message":"Show more"},"panels/network/RequestHeadersView.ts | statusCode":{"message":"Status Code"},"panels/network/RequestHeadersView.ts | thisDocumentWasBlockedFrom":{"message":"This document was blocked from loading in an iframe with a sandbox attribute because this document specified a cross-origin opener policy."},"panels/network/RequestHeadersView.ts | toEmbedThisFrameInYourDocument":{"message":"To embed this frame in your document, the response needs to enable the cross-origin embedder policy by specifying the following response header:"},"panels/network/RequestHeadersView.ts | toUseThisResourceFromADifferent":{"message":"To use this resource from a different origin, the server needs to specify a cross-origin resource policy in the response headers:"},"panels/network/RequestHeadersView.ts | toUseThisResourceFromADifferentOrigin":{"message":"To use this resource from a different origin, the server may relax the cross-origin resource policy response header:"},"panels/network/RequestHeadersView.ts | toUseThisResourceFromADifferentSite":{"message":"To use this resource from a different site, the server may relax the cross-origin resource policy response header:"},"panels/network/RequestHeadersView.ts | viewParsed":{"message":"View parsed"},"panels/network/RequestHeadersView.ts | viewSource":{"message":"View source"},"panels/network/RequestInitiatorView.ts | requestCallStack":{"message":"Request call stack"},"panels/network/RequestInitiatorView.ts | requestInitiatorChain":{"message":"Request initiator chain"},"panels/network/RequestInitiatorView.ts | thisRequestHasNoInitiatorData":{"message":"This request has no initiator data."},"panels/network/RequestPayloadView.ts | copyValue":{"message":"Copy value"},"panels/network/RequestPayloadView.ts | empty":{"message":"(empty)"},"panels/network/RequestPayloadView.ts | formData":{"message":"Form Data"},"panels/network/RequestPayloadView.ts | queryStringParameters":{"message":"Query String Parameters"},"panels/network/RequestPayloadView.ts | requestPayload":{"message":"Request Payload"},"panels/network/RequestPayloadView.ts | showMore":{"message":"Show more"},"panels/network/RequestPayloadView.ts | unableToDecodeValue":{"message":"(unable to decode value)"},"panels/network/RequestPayloadView.ts | viewDecoded":{"message":"View decoded"},"panels/network/RequestPayloadView.ts | viewDecodedL":{"message":"view decoded"},"panels/network/RequestPayloadView.ts | viewParsed":{"message":"View parsed"},"panels/network/RequestPayloadView.ts | viewParsedL":{"message":"view parsed"},"panels/network/RequestPayloadView.ts | viewSource":{"message":"View source"},"panels/network/RequestPayloadView.ts | viewSourceL":{"message":"view source"},"panels/network/RequestPayloadView.ts | viewUrlEncoded":{"message":"View URL-encoded"},"panels/network/RequestPayloadView.ts | viewUrlEncodedL":{"message":"view URL-encoded"},"panels/network/RequestPreviewView.ts | failedToLoadResponseData":{"message":"Failed to load response data"},"panels/network/RequestPreviewView.ts | previewNotAvailable":{"message":"Preview not available"},"panels/network/RequestResponseView.ts | failedToLoadResponseData":{"message":"Failed to load response data"},"panels/network/RequestResponseView.ts | thisRequestHasNoResponseData":{"message":"This request has no response data available."},"panels/network/RequestTimingView.ts | cacheStorageCacheNameS":{"message":"Cache storage cache name: {PH1}"},"panels/network/RequestTimingView.ts | cacheStorageCacheNameUnknown":{"message":"Cache storage cache name: Unknown"},"panels/network/RequestTimingView.ts | cautionRequestIsNotFinishedYet":{"message":"CAUTION: request is not finished yet!"},"panels/network/RequestTimingView.ts | connectionStart":{"message":"Connection Start"},"panels/network/RequestTimingView.ts | contentDownload":{"message":"Content Download"},"panels/network/RequestTimingView.ts | dnsLookup":{"message":"DNS Lookup"},"panels/network/RequestTimingView.ts | duration":{"message":"Duration"},"panels/network/RequestTimingView.ts | durationC":{"message":"DURATION"},"panels/network/RequestTimingView.ts | duringDevelopmentYouCanUseSToAdd":{"message":"During development, you can use {PH1} to add insights into the server-side timing of this request."},"panels/network/RequestTimingView.ts | explanation":{"message":"Explanation"},"panels/network/RequestTimingView.ts | fallbackCode":{"message":"Fallback code"},"panels/network/RequestTimingView.ts | fromHttpCache":{"message":"From HTTP cache"},"panels/network/RequestTimingView.ts | initialConnection":{"message":"Initial connection"},"panels/network/RequestTimingView.ts | label":{"message":"Label"},"panels/network/RequestTimingView.ts | networkFetch":{"message":"Network fetch"},"panels/network/RequestTimingView.ts | originalRequest":{"message":"Original Request"},"panels/network/RequestTimingView.ts | proxyNegotiation":{"message":"Proxy negotiation"},"panels/network/RequestTimingView.ts | queuedAtS":{"message":"Queued at {PH1}"},"panels/network/RequestTimingView.ts | queueing":{"message":"Queueing"},"panels/network/RequestTimingView.ts | readingPush":{"message":"Reading Push"},"panels/network/RequestTimingView.ts | receivingPush":{"message":"Receiving Push"},"panels/network/RequestTimingView.ts | requestresponse":{"message":"Request/Response"},"panels/network/RequestTimingView.ts | requestSent":{"message":"Request sent"},"panels/network/RequestTimingView.ts | requestToServiceworker":{"message":"Request to ServiceWorker"},"panels/network/RequestTimingView.ts | resourceScheduling":{"message":"Resource Scheduling"},"panels/network/RequestTimingView.ts | respondwith":{"message":"respondWith"},"panels/network/RequestTimingView.ts | responseReceived":{"message":"Response Received"},"panels/network/RequestTimingView.ts | retrievalTimeS":{"message":"Retrieval Time: {PH1}"},"panels/network/RequestTimingView.ts | serverPush":{"message":"Server Push"},"panels/network/RequestTimingView.ts | serverTiming":{"message":"Server Timing"},"panels/network/RequestTimingView.ts | serviceworkerCacheStorage":{"message":"ServiceWorker cache storage"},"panels/network/RequestTimingView.ts | sourceOfResponseS":{"message":"Source of response: {PH1}"},"panels/network/RequestTimingView.ts | ssl":{"message":"SSL"},"panels/network/RequestTimingView.ts | stalled":{"message":"Stalled"},"panels/network/RequestTimingView.ts | startedAtS":{"message":"Started at {PH1}"},"panels/network/RequestTimingView.ts | startup":{"message":"Startup"},"panels/network/RequestTimingView.ts | theServerTimingApi":{"message":"the Server Timing API"},"panels/network/RequestTimingView.ts | time":{"message":"TIME"},"panels/network/RequestTimingView.ts | total":{"message":"Total"},"panels/network/RequestTimingView.ts | unknown":{"message":"Unknown"},"panels/network/RequestTimingView.ts | waitingTtfb":{"message":"Waiting for server response"},"panels/network/RequestTimingView.ts | waterfall":{"message":"Waterfall"},"panels/network/ResourceWebSocketFrameView.ts | all":{"message":"All"},"panels/network/ResourceWebSocketFrameView.ts | binaryMessage":{"message":"Binary Message"},"panels/network/ResourceWebSocketFrameView.ts | clearAll":{"message":"Clear All"},"panels/network/ResourceWebSocketFrameView.ts | clearAllL":{"message":"Clear all"},"panels/network/ResourceWebSocketFrameView.ts | connectionCloseMessage":{"message":"Connection Close Message"},"panels/network/ResourceWebSocketFrameView.ts | continuationFrame":{"message":"Continuation Frame"},"panels/network/ResourceWebSocketFrameView.ts | copyMessage":{"message":"Copy message"},"panels/network/ResourceWebSocketFrameView.ts | copyMessageD":{"message":"Copy message..."},"panels/network/ResourceWebSocketFrameView.ts | data":{"message":"Data"},"panels/network/ResourceWebSocketFrameView.ts | enterRegex":{"message":"Enter regex, for example: (web)?socket"},"panels/network/ResourceWebSocketFrameView.ts | filter":{"message":"Filter"},"panels/network/ResourceWebSocketFrameView.ts | length":{"message":"Length"},"panels/network/ResourceWebSocketFrameView.ts | na":{"message":"N/A"},"panels/network/ResourceWebSocketFrameView.ts | pingMessage":{"message":"Ping Message"},"panels/network/ResourceWebSocketFrameView.ts | pongMessage":{"message":"Pong Message"},"panels/network/ResourceWebSocketFrameView.ts | receive":{"message":"Receive"},"panels/network/ResourceWebSocketFrameView.ts | selectMessageToBrowseItsContent":{"message":"Select message to browse its content."},"panels/network/ResourceWebSocketFrameView.ts | send":{"message":"Send"},"panels/network/ResourceWebSocketFrameView.ts | sOpcodeS":{"message":"{PH1} (Opcode {PH2})"},"panels/network/ResourceWebSocketFrameView.ts | sOpcodeSMask":{"message":"{PH1} (Opcode {PH2}, mask)"},"panels/network/ResourceWebSocketFrameView.ts | textMessage":{"message":"Text Message"},"panels/network/ResourceWebSocketFrameView.ts | time":{"message":"Time"},"panels/network/ResourceWebSocketFrameView.ts | webSocketFrame":{"message":"Web Socket Frame"},"panels/network/SignedExchangeInfoView.ts | certificate":{"message":"Certificate"},"panels/network/SignedExchangeInfoView.ts | certificateSha":{"message":"Certificate SHA256"},"panels/network/SignedExchangeInfoView.ts | certificateUrl":{"message":"Certificate URL"},"panels/network/SignedExchangeInfoView.ts | date":{"message":"Date"},"panels/network/SignedExchangeInfoView.ts | errors":{"message":"Errors"},"panels/network/SignedExchangeInfoView.ts | expires":{"message":"Expires"},"panels/network/SignedExchangeInfoView.ts | headerIntegrityHash":{"message":"Header integrity hash"},"panels/network/SignedExchangeInfoView.ts | integrity":{"message":"Integrity"},"panels/network/SignedExchangeInfoView.ts | issuer":{"message":"Issuer"},"panels/network/SignedExchangeInfoView.ts | label":{"message":"Label"},"panels/network/SignedExchangeInfoView.ts | learnmore":{"message":"Learn more"},"panels/network/SignedExchangeInfoView.ts | requestUrl":{"message":"Request URL"},"panels/network/SignedExchangeInfoView.ts | responseCode":{"message":"Response code"},"panels/network/SignedExchangeInfoView.ts | responseHeaders":{"message":"Response headers"},"panels/network/SignedExchangeInfoView.ts | signature":{"message":"Signature"},"panels/network/SignedExchangeInfoView.ts | signedHttpExchange":{"message":"Signed HTTP exchange"},"panels/network/SignedExchangeInfoView.ts | subject":{"message":"Subject"},"panels/network/SignedExchangeInfoView.ts | validFrom":{"message":"Valid from"},"panels/network/SignedExchangeInfoView.ts | validityUrl":{"message":"Validity URL"},"panels/network/SignedExchangeInfoView.ts | validUntil":{"message":"Valid until"},"panels/network/SignedExchangeInfoView.ts | viewCertificate":{"message":"View certificate"},"panels/performance_monitor/performance_monitor-meta.ts | activity":{"message":"activity"},"panels/performance_monitor/performance_monitor-meta.ts | metrics":{"message":"metrics"},"panels/performance_monitor/performance_monitor-meta.ts | monitor":{"message":"monitor"},"panels/performance_monitor/performance_monitor-meta.ts | performance":{"message":"performance"},"panels/performance_monitor/performance_monitor-meta.ts | performanceMonitor":{"message":"Performance monitor"},"panels/performance_monitor/performance_monitor-meta.ts | showPerformanceMonitor":{"message":"Show Performance monitor"},"panels/performance_monitor/performance_monitor-meta.ts | systemMonitor":{"message":"system monitor"},"panels/performance_monitor/PerformanceMonitor.ts | cpuUsage":{"message":"CPU usage"},"panels/performance_monitor/PerformanceMonitor.ts | documentFrames":{"message":"Document Frames"},"panels/performance_monitor/PerformanceMonitor.ts | documents":{"message":"Documents"},"panels/performance_monitor/PerformanceMonitor.ts | domNodes":{"message":"DOM Nodes"},"panels/performance_monitor/PerformanceMonitor.ts | graphsDisplayingARealtimeViewOf":{"message":"Graphs displaying a real-time view of performance metrics"},"panels/performance_monitor/PerformanceMonitor.ts | jsEventListeners":{"message":"JS event listeners"},"panels/performance_monitor/PerformanceMonitor.ts | jsHeapSize":{"message":"JS heap size"},"panels/performance_monitor/PerformanceMonitor.ts | layoutsSec":{"message":"Layouts / sec"},"panels/performance_monitor/PerformanceMonitor.ts | paused":{"message":"Paused"},"panels/performance_monitor/PerformanceMonitor.ts | styleRecalcsSec":{"message":"Style recalcs / sec"},"panels/profiler/CPUProfileView.ts | aggregatedSelfTime":{"message":"Aggregated self time"},"panels/profiler/CPUProfileView.ts | aggregatedTotalTime":{"message":"Aggregated total time"},"panels/profiler/CPUProfileView.ts | cpuProfiles":{"message":"CPU PROFILES"},"panels/profiler/CPUProfileView.ts | cpuProfilesShow":{"message":"CPU profiles show where the execution time is spent in your page's JavaScript functions."},"panels/profiler/CPUProfileView.ts | fms":{"message":"{PH1} ms"},"panels/profiler/CPUProfileView.ts | formatPercent":{"message":"{PH1} %"},"panels/profiler/CPUProfileView.ts | name":{"message":"Name"},"panels/profiler/CPUProfileView.ts | notOptimized":{"message":"Not optimized"},"panels/profiler/CPUProfileView.ts | recording":{"message":"Recording…"},"panels/profiler/CPUProfileView.ts | recordJavascriptCpuProfile":{"message":"Record JavaScript CPU Profile"},"panels/profiler/CPUProfileView.ts | selfTime":{"message":"Self Time"},"panels/profiler/CPUProfileView.ts | startCpuProfiling":{"message":"Start CPU profiling"},"panels/profiler/CPUProfileView.ts | stopCpuProfiling":{"message":"Stop CPU profiling"},"panels/profiler/CPUProfileView.ts | totalTime":{"message":"Total Time"},"panels/profiler/CPUProfileView.ts | url":{"message":"URL"},"panels/profiler/HeapProfilerPanel.ts | revealInSummaryView":{"message":"Reveal in Summary view"},"panels/profiler/HeapProfileView.ts | allocationSampling":{"message":"Allocation sampling"},"panels/profiler/HeapProfileView.ts | formatPercent":{"message":"{PH1} %"},"panels/profiler/HeapProfileView.ts | heapProfilerIsRecording":{"message":"Heap profiler is recording"},"panels/profiler/HeapProfileView.ts | itProvidesGoodApproximation":{"message":"It provides good approximation of allocations broken down by JavaScript execution stack."},"panels/profiler/HeapProfileView.ts | name":{"message":"Name"},"panels/profiler/HeapProfileView.ts | profileD":{"message":"Profile {PH1}"},"panels/profiler/HeapProfileView.ts | recording":{"message":"Recording…"},"panels/profiler/HeapProfileView.ts | recordMemoryAllocations":{"message":"Record memory allocations using sampling method."},"panels/profiler/HeapProfileView.ts | samplingProfiles":{"message":"SAMPLING PROFILES"},"panels/profiler/HeapProfileView.ts | sBytes":{"message":"{PH1} bytes"},"panels/profiler/HeapProfileView.ts | selectedSizeS":{"message":"Selected size: {PH1}"},"panels/profiler/HeapProfileView.ts | selfSize":{"message":"Self size"},"panels/profiler/HeapProfileView.ts | selfSizeBytes":{"message":"Self Size (bytes)"},"panels/profiler/HeapProfileView.ts | skb":{"message":"{PH1} kB"},"panels/profiler/HeapProfileView.ts | startHeapProfiling":{"message":"Start heap profiling"},"panels/profiler/HeapProfileView.ts | stopHeapProfiling":{"message":"Stop heap profiling"},"panels/profiler/HeapProfileView.ts | stopping":{"message":"Stopping…"},"panels/profiler/HeapProfileView.ts | thisProfileTypeHasMinimal":{"message":"This profile type has minimal performance overhead and can be used for long running operations."},"panels/profiler/HeapProfileView.ts | totalSize":{"message":"Total size"},"panels/profiler/HeapProfileView.ts | totalSizeBytes":{"message":"Total Size (bytes)"},"panels/profiler/HeapProfileView.ts | url":{"message":"URL"},"panels/profiler/HeapSnapshotDataGrids.ts | allocation":{"message":"Allocation"},"panels/profiler/HeapSnapshotDataGrids.ts | allocSize":{"message":"Alloc. Size"},"panels/profiler/HeapSnapshotDataGrids.ts | constructorString":{"message":"Constructor"},"panels/profiler/HeapSnapshotDataGrids.ts | count":{"message":"Count"},"panels/profiler/HeapSnapshotDataGrids.ts | Deleted":{"message":"# Deleted"},"panels/profiler/HeapSnapshotDataGrids.ts | Delta":{"message":"# Delta"},"panels/profiler/HeapSnapshotDataGrids.ts | distance":{"message":"Distance"},"panels/profiler/HeapSnapshotDataGrids.ts | distanceFromWindowObject":{"message":"Distance from window object"},"panels/profiler/HeapSnapshotDataGrids.ts | freedSize":{"message":"Freed Size"},"panels/profiler/HeapSnapshotDataGrids.ts | function":{"message":"Function"},"panels/profiler/HeapSnapshotDataGrids.ts | heapSnapshotConstructors":{"message":"Heap Snapshot Constructors"},"panels/profiler/HeapSnapshotDataGrids.ts | heapSnapshotDiff":{"message":"Heap Snapshot Diff"},"panels/profiler/HeapSnapshotDataGrids.ts | heapSnapshotRetainment":{"message":"Heap Snapshot Retainment"},"panels/profiler/HeapSnapshotDataGrids.ts | liveCount":{"message":"Live Count"},"panels/profiler/HeapSnapshotDataGrids.ts | liveSize":{"message":"Live Size"},"panels/profiler/HeapSnapshotDataGrids.ts | New":{"message":"# New"},"panels/profiler/HeapSnapshotDataGrids.ts | object":{"message":"Object"},"panels/profiler/HeapSnapshotDataGrids.ts | retainedSize":{"message":"Retained Size"},"panels/profiler/HeapSnapshotDataGrids.ts | shallowSize":{"message":"Shallow Size"},"panels/profiler/HeapSnapshotDataGrids.ts | size":{"message":"Size"},"panels/profiler/HeapSnapshotDataGrids.ts | sizeDelta":{"message":"Size Delta"},"panels/profiler/HeapSnapshotDataGrids.ts | sizeOfTheObjectItselfInBytes":{"message":"Size of the object itself in bytes"},"panels/profiler/HeapSnapshotDataGrids.ts | sizeOfTheObjectPlusTheGraphIt":{"message":"Size of the object plus the graph it retains in bytes"},"panels/profiler/HeapSnapshotGridNodes.ts | detachedFromDomTree":{"message":"Detached from DOM tree"},"panels/profiler/HeapSnapshotGridNodes.ts | genericStringsTwoPlaceholders":{"message":"{PH1}, {PH2}"},"panels/profiler/HeapSnapshotGridNodes.ts | inElement":{"message":"in"},"panels/profiler/HeapSnapshotGridNodes.ts | internalArray":{"message":"(internal array)[]"},"panels/profiler/HeapSnapshotGridNodes.ts | previewIsNotAvailable":{"message":"Preview is not available"},"panels/profiler/HeapSnapshotGridNodes.ts | revealInSummaryView":{"message":"Reveal in Summary view"},"panels/profiler/HeapSnapshotGridNodes.ts | revealObjectSWithIdSInSummary":{"message":"Reveal object ''{PH1}'' with id @{PH2} in Summary view"},"panels/profiler/HeapSnapshotGridNodes.ts | storeAsGlobalVariable":{"message":"Store as global variable"},"panels/profiler/HeapSnapshotGridNodes.ts | summary":{"message":"Summary"},"panels/profiler/HeapSnapshotGridNodes.ts | userObjectReachableFromWindow":{"message":"User object reachable from window"},"panels/profiler/HeapSnapshotProxy.ts | anErrorOccurredWhenACallToMethod":{"message":"An error occurred when a call to method ''{PH1}'' was requested"},"panels/profiler/HeapSnapshotView.ts | allObjects":{"message":"All objects"},"panels/profiler/HeapSnapshotView.ts | allocation":{"message":"Allocation"},"panels/profiler/HeapSnapshotView.ts | allocationInstrumentationOn":{"message":"Allocation instrumentation on timeline"},"panels/profiler/HeapSnapshotView.ts | allocationStack":{"message":"Allocation stack"},"panels/profiler/HeapSnapshotView.ts | allocationTimelines":{"message":"ALLOCATION TIMELINES"},"panels/profiler/HeapSnapshotView.ts | AllocationTimelinesShowInstrumented":{"message":"Allocation timelines show instrumented JavaScript memory allocations over time. Once profile is recorded you can select a time interval to see objects that were allocated within it and still alive by the end of recording. Use this profile type to isolate memory leaks."},"panels/profiler/HeapSnapshotView.ts | baseSnapshot":{"message":"Base snapshot"},"panels/profiler/HeapSnapshotView.ts | captureNumericValue":{"message":"Include numerical values in capture"},"panels/profiler/HeapSnapshotView.ts | classFilter":{"message":"Class filter"},"panels/profiler/HeapSnapshotView.ts | code":{"message":"Code"},"panels/profiler/HeapSnapshotView.ts | comparison":{"message":"Comparison"},"panels/profiler/HeapSnapshotView.ts | containment":{"message":"Containment"},"panels/profiler/HeapSnapshotView.ts | exposeInternals":{"message":"Expose internals (includes additional implementation-specific details)"},"panels/profiler/HeapSnapshotView.ts | filter":{"message":"Filter"},"panels/profiler/HeapSnapshotView.ts | find":{"message":"Find"},"panels/profiler/HeapSnapshotView.ts | heapMemoryUsage":{"message":"Heap memory usage"},"panels/profiler/HeapSnapshotView.ts | heapSnapshot":{"message":"Heap snapshot"},"panels/profiler/HeapSnapshotView.ts | heapSnapshotProfilesShowMemory":{"message":"Heap snapshot profiles show memory distribution among your page's JavaScript objects and related DOM nodes."},"panels/profiler/HeapSnapshotView.ts | heapSnapshots":{"message":"HEAP SNAPSHOTS"},"panels/profiler/HeapSnapshotView.ts | jsArrays":{"message":"JS arrays"},"panels/profiler/HeapSnapshotView.ts | liveObjects":{"message":"Live objects"},"panels/profiler/HeapSnapshotView.ts | loading":{"message":"Loading…"},"panels/profiler/HeapSnapshotView.ts | objectsAllocatedBeforeS":{"message":"Objects allocated before {PH1}"},"panels/profiler/HeapSnapshotView.ts | objectsAllocatedBetweenSAndS":{"message":"Objects allocated between {PH1} and {PH2}"},"panels/profiler/HeapSnapshotView.ts | percentagePlaceholder":{"message":"{PH1}%"},"panels/profiler/HeapSnapshotView.ts | perspective":{"message":"Perspective"},"panels/profiler/HeapSnapshotView.ts | recordAllocationStacksExtra":{"message":"Record stack traces of allocations (extra performance overhead)"},"panels/profiler/HeapSnapshotView.ts | recording":{"message":"Recording…"},"panels/profiler/HeapSnapshotView.ts | retainers":{"message":"Retainers"},"panels/profiler/HeapSnapshotView.ts | savingD":{"message":"Saving… {PH1}%"},"panels/profiler/HeapSnapshotView.ts | selectedSizeS":{"message":"Selected size: {PH1}"},"panels/profiler/HeapSnapshotView.ts | sKb":{"message":"{PH1} kB"},"panels/profiler/HeapSnapshotView.ts | snapshotD":{"message":"Snapshot {PH1}"},"panels/profiler/HeapSnapshotView.ts | snapshotting":{"message":"Snapshotting…"},"panels/profiler/HeapSnapshotView.ts | stackWasNotRecordedForThisObject":{"message":"Stack was not recorded for this object because it had been allocated before this profile recording started."},"panels/profiler/HeapSnapshotView.ts | startRecordingHeapProfile":{"message":"Start recording heap profile"},"panels/profiler/HeapSnapshotView.ts | statistics":{"message":"Statistics"},"panels/profiler/HeapSnapshotView.ts | stopRecordingHeapProfile":{"message":"Stop recording heap profile"},"panels/profiler/HeapSnapshotView.ts | strings":{"message":"Strings"},"panels/profiler/HeapSnapshotView.ts | summary":{"message":"Summary"},"panels/profiler/HeapSnapshotView.ts | systemObjects":{"message":"System objects"},"panels/profiler/HeapSnapshotView.ts | takeHeapSnapshot":{"message":"Take heap snapshot"},"panels/profiler/HeapSnapshotView.ts | typedArrays":{"message":"Typed arrays"},"panels/profiler/IsolateSelector.ts | changeRate":{"message":"{PH1}/s"},"panels/profiler/IsolateSelector.ts | decreasingBySPerSecond":{"message":"decreasing by {PH1} per second"},"panels/profiler/IsolateSelector.ts | empty":{"message":"(empty)"},"panels/profiler/IsolateSelector.ts | heapSizeChangeTrendOverTheLastS":{"message":"Heap size change trend over the last {PH1} minutes."},"panels/profiler/IsolateSelector.ts | heapSizeInUseByLiveJsObjects":{"message":"Heap size in use by live JS objects."},"panels/profiler/IsolateSelector.ts | increasingBySPerSecond":{"message":"increasing by {PH1} per second"},"panels/profiler/IsolateSelector.ts | javascriptVmInstances":{"message":"JavaScript VM instances"},"panels/profiler/IsolateSelector.ts | totalJsHeapSize":{"message":"Total JS heap size"},"panels/profiler/IsolateSelector.ts | totalPageJsHeapSizeAcrossAllVm":{"message":"Total page JS heap size across all VM instances."},"panels/profiler/IsolateSelector.ts | totalPageJsHeapSizeChangeTrend":{"message":"Total page JS heap size change trend over the last {PH1} minutes."},"panels/profiler/LiveHeapProfileView.ts | allocatedJsHeapSizeCurrentlyIn":{"message":"Allocated JS heap size currently in use"},"panels/profiler/LiveHeapProfileView.ts | anonymousScriptS":{"message":"(Anonymous Script {PH1})"},"panels/profiler/LiveHeapProfileView.ts | heapProfile":{"message":"Heap Profile"},"panels/profiler/LiveHeapProfileView.ts | jsHeap":{"message":"JS Heap"},"panels/profiler/LiveHeapProfileView.ts | kb":{"message":"kB"},"panels/profiler/LiveHeapProfileView.ts | numberOfVmsSharingTheSameScript":{"message":"Number of VMs sharing the same script source"},"panels/profiler/LiveHeapProfileView.ts | scriptUrl":{"message":"Script URL"},"panels/profiler/LiveHeapProfileView.ts | urlOfTheScriptSource":{"message":"URL of the script source"},"panels/profiler/LiveHeapProfileView.ts | vms":{"message":"VMs"},"panels/profiler/ModuleUIStrings.ts | buildingAllocationStatistics":{"message":"Building allocation statistics…"},"panels/profiler/ModuleUIStrings.ts | buildingDominatedNodes":{"message":"Building dominated nodes…"},"panels/profiler/ModuleUIStrings.ts | buildingDominatorTree":{"message":"Building dominator tree…"},"panels/profiler/ModuleUIStrings.ts | buildingEdgeIndexes":{"message":"Building edge indexes…"},"panels/profiler/ModuleUIStrings.ts | buildingLocations":{"message":"Building locations…"},"panels/profiler/ModuleUIStrings.ts | buildingPostorderIndex":{"message":"Building postorder index…"},"panels/profiler/ModuleUIStrings.ts | buildingRetainers":{"message":"Building retainers…"},"panels/profiler/ModuleUIStrings.ts | calculatingDistances":{"message":"Calculating distances…"},"panels/profiler/ModuleUIStrings.ts | calculatingNodeFlags":{"message":"Calculating node flags…"},"panels/profiler/ModuleUIStrings.ts | calculatingRetainedSizes":{"message":"Calculating retained sizes…"},"panels/profiler/ModuleUIStrings.ts | calculatingSamples":{"message":"Calculating samples…"},"panels/profiler/ModuleUIStrings.ts | calculatingStatistics":{"message":"Calculating statistics…"},"panels/profiler/ModuleUIStrings.ts | done":{"message":"Done"},"panels/profiler/ModuleUIStrings.ts | finishedProcessing":{"message":"Finished processing."},"panels/profiler/ModuleUIStrings.ts | loadingAllocationTracesD":{"message":"Loading allocation traces… {PH1}%"},"panels/profiler/ModuleUIStrings.ts | loadingEdgesD":{"message":"Loading edges… {PH1}%"},"panels/profiler/ModuleUIStrings.ts | loadingLocations":{"message":"Loading locations…"},"panels/profiler/ModuleUIStrings.ts | loadingNodesD":{"message":"Loading nodes… {PH1}%"},"panels/profiler/ModuleUIStrings.ts | loadingSamples":{"message":"Loading samples…"},"panels/profiler/ModuleUIStrings.ts | loadingSnapshotInfo":{"message":"Loading snapshot info…"},"panels/profiler/ModuleUIStrings.ts | loadingStrings":{"message":"Loading strings…"},"panels/profiler/ModuleUIStrings.ts | parsingStrings":{"message":"Parsing strings…"},"panels/profiler/ModuleUIStrings.ts | processingSnapshot":{"message":"Processing snapshot…"},"panels/profiler/ModuleUIStrings.ts | propagatingDomState":{"message":"Propagating DOM state…"},"panels/profiler/ProfileDataGrid.ts | genericTextTwoPlaceholders":{"message":"{PH1}, {PH2}"},"panels/profiler/ProfileDataGrid.ts | notOptimizedS":{"message":"Not optimized: {PH1}"},"panels/profiler/ProfileLauncherView.ts | load":{"message":"Load"},"panels/profiler/ProfileLauncherView.ts | selectJavascriptVmInstance":{"message":"Select JavaScript VM instance"},"panels/profiler/ProfileLauncherView.ts | selectProfilingType":{"message":"Select profiling type"},"panels/profiler/ProfileLauncherView.ts | start":{"message":"Start"},"panels/profiler/ProfileLauncherView.ts | stop":{"message":"Stop"},"panels/profiler/ProfileLauncherView.ts | takeSnapshot":{"message":"Take snapshot"},"panels/profiler/profiler-meta.ts | liveHeapProfile":{"message":"Live Heap Profile"},"panels/profiler/profiler-meta.ts | memory":{"message":"Memory"},"panels/profiler/profiler-meta.ts | showLiveHeapProfile":{"message":"Show Live Heap Profile"},"panels/profiler/profiler-meta.ts | showMemory":{"message":"Show Memory"},"panels/profiler/profiler-meta.ts | showNativeFunctions":{"message":"Show native functions in JS Profile"},"panels/profiler/profiler-meta.ts | startRecordingHeapAllocations":{"message":"Start recording heap allocations"},"panels/profiler/profiler-meta.ts | startRecordingHeapAllocationsAndReload":{"message":"Start recording heap allocations and reload the page"},"panels/profiler/profiler-meta.ts | startStopRecording":{"message":"Start/stop recording"},"panels/profiler/profiler-meta.ts | stopRecordingHeapAllocations":{"message":"Stop recording heap allocations"},"panels/profiler/ProfileSidebarTreeElement.ts | delete":{"message":"Delete"},"panels/profiler/ProfileSidebarTreeElement.ts | load":{"message":"Load…"},"panels/profiler/ProfileSidebarTreeElement.ts | save":{"message":"Save"},"panels/profiler/ProfileSidebarTreeElement.ts | saveWithEllipsis":{"message":"Save…"},"panels/profiler/ProfilesPanel.ts | cantLoadFileSupportedFile":{"message":"Can’t load file. Supported file extensions: ''{PH1}''."},"panels/profiler/ProfilesPanel.ts | cantLoadProfileWhileAnother":{"message":"Can’t load profile while another profile is being recorded."},"panels/profiler/ProfilesPanel.ts | clearAllProfiles":{"message":"Clear all profiles"},"panels/profiler/ProfilesPanel.ts | deprecationWarnMsg":{"message":"This panel will be deprecated in the upcoming version. Use the Performance panel to record JavaScript CPU profiles."},"panels/profiler/ProfilesPanel.ts | enableThisPanelTemporarily":{"message":"Enable this panel temporarily"},"panels/profiler/ProfilesPanel.ts | feedback":{"message":"Feedback"},"panels/profiler/ProfilesPanel.ts | goToPerformancePanel":{"message":"Go to Performance Panel"},"panels/profiler/ProfilesPanel.ts | learnMore":{"message":"Learn more"},"panels/profiler/ProfilesPanel.ts | load":{"message":"Load…"},"panels/profiler/ProfilesPanel.ts | profileLoadingFailedS":{"message":"Profile loading failed: {PH1}."},"panels/profiler/ProfilesPanel.ts | profiles":{"message":"Profiles"},"panels/profiler/ProfilesPanel.ts | runD":{"message":"Run {PH1}"},"panels/profiler/ProfileView.ts | chart":{"message":"Chart"},"panels/profiler/ProfileView.ts | excludeSelectedFunction":{"message":"Exclude selected function"},"panels/profiler/ProfileView.ts | failedToReadFile":{"message":"Failed to read file"},"panels/profiler/ProfileView.ts | fileSReadErrorS":{"message":"File ''{PH1}'' read error: {PH2}"},"panels/profiler/ProfileView.ts | findByCostMsNameOrFile":{"message":"Find by cost (>50ms), name or file"},"panels/profiler/ProfileView.ts | focusSelectedFunction":{"message":"Focus selected function"},"panels/profiler/ProfileView.ts | function":{"message":"Function"},"panels/profiler/ProfileView.ts | heavyBottomUp":{"message":"Heavy (Bottom Up)"},"panels/profiler/ProfileView.ts | loaded":{"message":"Loaded"},"panels/profiler/ProfileView.ts | loading":{"message":"Loading…"},"panels/profiler/ProfileView.ts | loadingD":{"message":"Loading… {PH1}%"},"panels/profiler/ProfileView.ts | parsing":{"message":"Parsing…"},"panels/profiler/ProfileView.ts | profile":{"message":"Profile"},"panels/profiler/ProfileView.ts | profileD":{"message":"Profile {PH1}"},"panels/profiler/ProfileView.ts | profiler":{"message":"Profiler"},"panels/profiler/ProfileView.ts | profileViewMode":{"message":"Profile view mode"},"panels/profiler/ProfileView.ts | restoreAllFunctions":{"message":"Restore all functions"},"panels/profiler/ProfileView.ts | treeTopDown":{"message":"Tree (Top Down)"},"panels/protocol_monitor/protocol_monitor-meta.ts | protocolMonitor":{"message":"Protocol monitor"},"panels/protocol_monitor/protocol_monitor-meta.ts | showProtocolMonitor":{"message":"Show Protocol monitor"},"panels/protocol_monitor/ProtocolMonitor.ts | CDPCommandEditorHidden":{"message":"CDP command editor hidden"},"panels/protocol_monitor/ProtocolMonitor.ts | CDPCommandEditorShown":{"message":"CDP command editor shown"},"panels/protocol_monitor/ProtocolMonitor.ts | clearAll":{"message":"Clear all"},"panels/protocol_monitor/ProtocolMonitor.ts | documentation":{"message":"Documentation"},"panels/protocol_monitor/ProtocolMonitor.ts | elapsedTime":{"message":"Elapsed time"},"panels/protocol_monitor/ProtocolMonitor.ts | filter":{"message":"Filter"},"panels/protocol_monitor/ProtocolMonitor.ts | hideCDPCommandEditor":{"message":"Hide CDP command editor"},"panels/protocol_monitor/ProtocolMonitor.ts | method":{"message":"Method"},"panels/protocol_monitor/ProtocolMonitor.ts | noMessageSelected":{"message":"No message selected"},"panels/protocol_monitor/ProtocolMonitor.ts | record":{"message":"Record"},"panels/protocol_monitor/ProtocolMonitor.ts | request":{"message":"Request"},"panels/protocol_monitor/ProtocolMonitor.ts | response":{"message":"Response"},"panels/protocol_monitor/ProtocolMonitor.ts | save":{"message":"Save"},"panels/protocol_monitor/ProtocolMonitor.ts | selectTarget":{"message":"Select a target"},"panels/protocol_monitor/ProtocolMonitor.ts | sendRawCDPCommand":{"message":"Send a raw CDP command"},"panels/protocol_monitor/ProtocolMonitor.ts | sendRawCDPCommandExplanation":{"message":"Format: 'Domain.commandName' for a command without parameters, or '{\"command\":\"Domain.commandName\", \"parameters\": {...}}' as a JSON object for a command with parameters. 'cmd'/'method' and 'args'/'params'/'arguments' are also supported as alternative keys for the JSON object."},"panels/protocol_monitor/ProtocolMonitor.ts | session":{"message":"Session"},"panels/protocol_monitor/ProtocolMonitor.ts | showCDPCommandEditor":{"message":"Show CDP command editor"},"panels/protocol_monitor/ProtocolMonitor.ts | sMs":{"message":"{PH1} ms"},"panels/protocol_monitor/ProtocolMonitor.ts | target":{"message":"Target"},"panels/protocol_monitor/ProtocolMonitor.ts | timestamp":{"message":"Timestamp"},"panels/protocol_monitor/ProtocolMonitor.ts | type":{"message":"Type"},"panels/recorder/components/CreateRecordingView.ts | cancelRecording":{"message":"Cancel recording"},"panels/recorder/components/CreateRecordingView.ts | createRecording":{"message":"Create a new recording"},"panels/recorder/components/CreateRecordingView.ts | includeNecessarySelectors":{"message":"You must choose CSS, Pierce, or XPath as one of your options. Only these selectors are guaranteed to be recorded since ARIA and text selectors may not be unique."},"panels/recorder/components/CreateRecordingView.ts | recordingName":{"message":"Recording name"},"panels/recorder/components/CreateRecordingView.ts | recordingNameIsRequired":{"message":"Recording name is required"},"panels/recorder/components/CreateRecordingView.ts | selectorAttribute":{"message":"Selector attribute"},"panels/recorder/components/CreateRecordingView.ts | selectorTypeARIA":{"message":"ARIA"},"panels/recorder/components/CreateRecordingView.ts | selectorTypeCSS":{"message":"CSS"},"panels/recorder/components/CreateRecordingView.ts | selectorTypePierce":{"message":"Pierce"},"panels/recorder/components/CreateRecordingView.ts | selectorTypes":{"message":"Selector types to record"},"panels/recorder/components/CreateRecordingView.ts | selectorTypeText":{"message":"Text"},"panels/recorder/components/CreateRecordingView.ts | selectorTypeXPath":{"message":"XPath"},"panels/recorder/components/CreateRecordingView.ts | startRecording":{"message":"Start recording"},"panels/recorder/components/ExtensionView.ts | closeView":{"message":"Close"},"panels/recorder/components/ExtensionView.ts | extension":{"message":"Content provided by a browser extension"},"panels/recorder/components/RecordingListView.ts | createRecording":{"message":"Create a new recording"},"panels/recorder/components/RecordingListView.ts | deleteRecording":{"message":"Delete recording"},"panels/recorder/components/RecordingListView.ts | openRecording":{"message":"Open recording"},"panels/recorder/components/RecordingListView.ts | playRecording":{"message":"Play recording"},"panels/recorder/components/RecordingListView.ts | savedRecordings":{"message":"Saved recordings"},"panels/recorder/components/RecordingView.ts | addAssertion":{"message":"Add assertion"},"panels/recorder/components/RecordingView.ts | cancelReplay":{"message":"Cancel replay"},"panels/recorder/components/RecordingView.ts | default":{"message":"Default"},"panels/recorder/components/RecordingView.ts | desktop":{"message":"Desktop"},"panels/recorder/components/RecordingView.ts | download":{"message":"Download: {value}"},"panels/recorder/components/RecordingView.ts | editReplaySettings":{"message":"Edit replay settings"},"panels/recorder/components/RecordingView.ts | editTitle":{"message":"Edit title"},"panels/recorder/components/RecordingView.ts | endRecording":{"message":"End recording"},"panels/recorder/components/RecordingView.ts | environment":{"message":"Environment"},"panels/recorder/components/RecordingView.ts | hideCode":{"message":"Hide code"},"panels/recorder/components/RecordingView.ts | latency":{"message":"Latency: {value} ms"},"panels/recorder/components/RecordingView.ts | mobile":{"message":"Mobile"},"panels/recorder/components/RecordingView.ts | network":{"message":"Network"},"panels/recorder/components/RecordingView.ts | performancePanel":{"message":"Performance panel"},"panels/recorder/components/RecordingView.ts | recording":{"message":"Recording…"},"panels/recorder/components/RecordingView.ts | recordingIsBeingStopped":{"message":"Stopping recording…"},"panels/recorder/components/RecordingView.ts | replaySettings":{"message":"Replay settings"},"panels/recorder/components/RecordingView.ts | requiredTitleError":{"message":"Title is required"},"panels/recorder/components/RecordingView.ts | screenshotForSection":{"message":"Screenshot for this section"},"panels/recorder/components/RecordingView.ts | showCode":{"message":"Show code"},"panels/recorder/components/RecordingView.ts | timeout":{"message":"Timeout: {value} ms"},"panels/recorder/components/RecordingView.ts | timeoutExplanation":{"message":"The timeout setting (in milliseconds) applies to every action when replaying the recording. For example, if a DOM element identified by a CSS selector does not appear on the page within the specified timeout, the replay fails with an error."},"panels/recorder/components/RecordingView.ts | timeoutLabel":{"message":"Timeout"},"panels/recorder/components/RecordingView.ts | upload":{"message":"Upload: {value}"},"panels/recorder/components/ReplayButton.ts | extensionGroup":{"message":"Extensions"},"panels/recorder/components/ReplayButton.ts | ReplayExtremelySlowButtonLabel":{"message":"Extremely slow replay"},"panels/recorder/components/ReplayButton.ts | ReplayExtremelySlowItemLabel":{"message":"Extremely slow"},"panels/recorder/components/ReplayButton.ts | ReplayNormalButtonLabel":{"message":"Replay"},"panels/recorder/components/ReplayButton.ts | ReplayNormalItemLabel":{"message":"Normal (Default)"},"panels/recorder/components/ReplayButton.ts | ReplaySlowButtonLabel":{"message":"Slow replay"},"panels/recorder/components/ReplayButton.ts | ReplaySlowItemLabel":{"message":"Slow"},"panels/recorder/components/ReplayButton.ts | ReplayVerySlowButtonLabel":{"message":"Very slow replay"},"panels/recorder/components/ReplayButton.ts | ReplayVerySlowItemLabel":{"message":"Very slow"},"panels/recorder/components/ReplayButton.ts | speedGroup":{"message":"Speed"},"panels/recorder/components/StartView.ts | createRecording":{"message":"Create a new recording"},"panels/recorder/components/StartView.ts | header":{"message":"Measure performance across an entire user journey"},"panels/recorder/components/StartView.ts | quickStart":{"message":"Quick start: learn the new Recorder panel in DevTools"},"panels/recorder/components/StartView.ts | step1":{"message":"Record a common user journey on your website or app"},"panels/recorder/components/StartView.ts | step2":{"message":"Replay the recording to check if the flow is working"},"panels/recorder/components/StartView.ts | step3":{"message":"Generate a detailed performance trace or export a Puppeteer script for testing"},"panels/recorder/components/StepEditor.ts | addAttribute":{"message":"Add {attributeName}"},"panels/recorder/components/StepEditor.ts | addFrameIndex":{"message":"Add frame index within the frame tree"},"panels/recorder/components/StepEditor.ts | addSelector":{"message":"Add a selector"},"panels/recorder/components/StepEditor.ts | addSelectorPart":{"message":"Add a selector part"},"panels/recorder/components/StepEditor.ts | deleteRow":{"message":"Delete row"},"panels/recorder/components/StepEditor.ts | notSaved":{"message":"Not saved: {error}"},"panels/recorder/components/StepEditor.ts | removeFrameIndex":{"message":"Remove frame index"},"panels/recorder/components/StepEditor.ts | removeSelector":{"message":"Remove a selector"},"panels/recorder/components/StepEditor.ts | removeSelectorPart":{"message":"Remove a selector part"},"panels/recorder/components/StepEditor.ts | selectorPicker":{"message":"Select an element in the page to update selectors"},"panels/recorder/components/StepEditor.ts | unknownActionType":{"message":"Unknown action type."},"panels/recorder/components/StepView.ts | addBreakpoint":{"message":"Add breakpoint"},"panels/recorder/components/StepView.ts | addStepAfter":{"message":"Add step after"},"panels/recorder/components/StepView.ts | addStepBefore":{"message":"Add step before"},"panels/recorder/components/StepView.ts | breakpoints":{"message":"Breakpoints"},"panels/recorder/components/StepView.ts | changeStepTitle":{"message":"Change"},"panels/recorder/components/StepView.ts | clickStepTitle":{"message":"Click"},"panels/recorder/components/StepView.ts | closeStepTitle":{"message":"Close"},"panels/recorder/components/StepView.ts | copyAs":{"message":"Copy as"},"panels/recorder/components/StepView.ts | customStepTitle":{"message":"Custom step"},"panels/recorder/components/StepView.ts | doubleClickStepTitle":{"message":"Double click"},"panels/recorder/components/StepView.ts | elementRoleButton":{"message":"Button"},"panels/recorder/components/StepView.ts | elementRoleFallback":{"message":"Element"},"panels/recorder/components/StepView.ts | elementRoleInput":{"message":"Input"},"panels/recorder/components/StepView.ts | emulateNetworkConditionsStepTitle":{"message":"Emulate network conditions"},"panels/recorder/components/StepView.ts | hoverStepTitle":{"message":"Hover"},"panels/recorder/components/StepView.ts | keyDownStepTitle":{"message":"Key down"},"panels/recorder/components/StepView.ts | keyUpStepTitle":{"message":"Key up"},"panels/recorder/components/StepView.ts | navigateStepTitle":{"message":"Navigate"},"panels/recorder/components/StepView.ts | openStepActions":{"message":"Open step actions"},"panels/recorder/components/StepView.ts | removeBreakpoint":{"message":"Remove breakpoint"},"panels/recorder/components/StepView.ts | removeStep":{"message":"Remove step"},"panels/recorder/components/StepView.ts | scrollStepTitle":{"message":"Scroll"},"panels/recorder/components/StepView.ts | setViewportClickTitle":{"message":"Set viewport"},"panels/recorder/components/StepView.ts | stepManagement":{"message":"Manage steps"},"panels/recorder/components/StepView.ts | waitForElementStepTitle":{"message":"Wait for element"},"panels/recorder/components/StepView.ts | waitForExpressionStepTitle":{"message":"Wait for expression"},"panels/recorder/models/RecorderSettings.ts | defaultRecordingName":{"message":"Recording {DATE} at {TIME}"},"panels/recorder/recorder-meta.ts | createRecording":{"message":"Create a new recording"},"panels/recorder/recorder-meta.ts | recorder":{"message":"Recorder"},"panels/recorder/recorder-meta.ts | replayRecording":{"message":"Replay recording"},"panels/recorder/recorder-meta.ts | showRecorder":{"message":"Show Recorder"},"panels/recorder/recorder-meta.ts | startStopRecording":{"message":"Start/Stop recording"},"panels/recorder/recorder-meta.ts | toggleCode":{"message":"Toggle code view"},"panels/recorder/RecorderController.ts | continueReplay":{"message":"Continue"},"panels/recorder/RecorderController.ts | copyShortcut":{"message":"Copy recording or selected step"},"panels/recorder/RecorderController.ts | createRecording":{"message":"Create a new recording"},"panels/recorder/RecorderController.ts | deleteRecording":{"message":"Delete recording"},"panels/recorder/RecorderController.ts | export":{"message":"Export"},"panels/recorder/RecorderController.ts | exportRecording":{"message":"Export"},"panels/recorder/RecorderController.ts | exportViaExtensions":{"message":"Export via extensions"},"panels/recorder/RecorderController.ts | getExtensions":{"message":"Get extensions…"},"panels/recorder/RecorderController.ts | importRecording":{"message":"Import recording"},"panels/recorder/RecorderController.ts | replayRecording":{"message":"Replay recording"},"panels/recorder/RecorderController.ts | sendFeedback":{"message":"Send feedback"},"panels/recorder/RecorderController.ts | startStopRecording":{"message":"Start/Stop recording"},"panels/recorder/RecorderController.ts | stepOverReplay":{"message":"Execute one step"},"panels/recorder/RecorderController.ts | toggleCode":{"message":"Toggle code view"},"panels/rn_welcome/rn_welcome-meta.ts | rnWelcome":{"message":"⚛️ Welcome"},"panels/rn_welcome/rn_welcome-meta.ts | showRnWelcome":{"message":"Show React Native Welcome panel"},"panels/rn_welcome/RNWelcome.ts | debuggerBrandName":{"message":"React Native JS Inspector"},"panels/rn_welcome/RNWelcome.ts | docsLabel":{"message":"Debugging docs"},"panels/rn_welcome/RNWelcome.ts | techPreviewLabel":{"message":"Technology Preview"},"panels/rn_welcome/RNWelcome.ts | welcomeMessage":{"message":"Welcome to debugging in React Native"},"panels/rn_welcome/RNWelcome.ts | whatsNewLabel":{"message":"What's new"},"panels/screencast/ScreencastApp.ts | toggleScreencast":{"message":"Toggle screencast"},"panels/screencast/ScreencastView.ts | addressBar":{"message":"Address bar"},"panels/screencast/ScreencastView.ts | back":{"message":"back"},"panels/screencast/ScreencastView.ts | forward":{"message":"forward"},"panels/screencast/ScreencastView.ts | profilingInProgress":{"message":"Profiling in progress"},"panels/screencast/ScreencastView.ts | reload":{"message":"reload"},"panels/screencast/ScreencastView.ts | screencastViewOfDebugTarget":{"message":"Screencast view of debug target"},"panels/screencast/ScreencastView.ts | theTabIsInactive":{"message":"The tab is inactive"},"panels/search/SearchResultsPane.ts | lineS":{"message":"Line {PH1}"},"panels/search/SearchResultsPane.ts | matchesCountS":{"message":"Matches Count {PH1}"},"panels/search/SearchResultsPane.ts | showDMore":{"message":"Show {PH1} more"},"panels/search/SearchView.ts | clear":{"message":"Clear"},"panels/search/SearchView.ts | foundDMatchingLinesInDFiles":{"message":"Found {PH1} matching lines in {PH2} files."},"panels/search/SearchView.ts | foundDMatchingLinesInFile":{"message":"Found {PH1} matching lines in 1 file."},"panels/search/SearchView.ts | foundMatchingLineInFile":{"message":"Found 1 matching line in 1 file."},"panels/search/SearchView.ts | indexing":{"message":"Indexing…"},"panels/search/SearchView.ts | indexingInterrupted":{"message":"Indexing interrupted."},"panels/search/SearchView.ts | matchCase":{"message":"Match Case"},"panels/search/SearchView.ts | noMatchesFound":{"message":"No matches found."},"panels/search/SearchView.ts | refresh":{"message":"Refresh"},"panels/search/SearchView.ts | search":{"message":"Search"},"panels/search/SearchView.ts | searchFinished":{"message":"Search finished."},"panels/search/SearchView.ts | searching":{"message":"Searching…"},"panels/search/SearchView.ts | searchInterrupted":{"message":"Search interrupted."},"panels/search/SearchView.ts | searchQuery":{"message":"Search Query"},"panels/search/SearchView.ts | useRegularExpression":{"message":"Use Regular Expression"},"panels/security/security-meta.ts | security":{"message":"Security"},"panels/security/security-meta.ts | showSecurity":{"message":"Show Security"},"panels/security/SecurityModel.ts | cipherWithMAC":{"message":"{PH1} with {PH2}"},"panels/security/SecurityModel.ts | keyExchangeWithGroup":{"message":"{PH1} with {PH2}"},"panels/security/SecurityModel.ts | theSecurityOfThisPageIsUnknown":{"message":"The security of this page is unknown."},"panels/security/SecurityModel.ts | thisPageIsNotSecure":{"message":"This page is not secure."},"panels/security/SecurityModel.ts | thisPageIsNotSecureBrokenHttps":{"message":"This page is not secure (broken HTTPS)."},"panels/security/SecurityModel.ts | thisPageIsSecureValidHttps":{"message":"This page is secure (valid HTTPS)."},"panels/security/SecurityPanel.ts | activeContentWithCertificate":{"message":"active content with certificate errors"},"panels/security/SecurityPanel.ts | activeMixedContent":{"message":"active mixed content"},"panels/security/SecurityPanel.ts | allResourcesOnThisPageAreServed":{"message":"All resources on this page are served securely."},"panels/security/SecurityPanel.ts | allServedSecurely":{"message":"all served securely"},"panels/security/SecurityPanel.ts | blockedMixedContent":{"message":"Blocked mixed content"},"panels/security/SecurityPanel.ts | certificate":{"message":"Certificate"},"panels/security/SecurityPanel.ts | certificateExpiresSoon":{"message":"Certificate expires soon"},"panels/security/SecurityPanel.ts | certificateTransparency":{"message":"Certificate Transparency"},"panels/security/SecurityPanel.ts | chromeHasDeterminedThatThisSiteS":{"message":"Chrome has determined that this site could be fake or fraudulent."},"panels/security/SecurityPanel.ts | cipher":{"message":"Cipher"},"panels/security/SecurityPanel.ts | connection":{"message":"Connection"},"panels/security/SecurityPanel.ts | contentWithCertificateErrors":{"message":"content with certificate errors"},"panels/security/SecurityPanel.ts | enabled":{"message":"enabled"},"panels/security/SecurityPanel.ts | encryptedClientHello":{"message":"Encrypted ClientHello"},"panels/security/SecurityPanel.ts | flaggedByGoogleSafeBrowsing":{"message":"Flagged by Google Safe Browsing"},"panels/security/SecurityPanel.ts | hashAlgorithm":{"message":"Hash algorithm"},"panels/security/SecurityPanel.ts | hideFullDetails":{"message":"Hide full details"},"panels/security/SecurityPanel.ts | ifYouBelieveThisIsShownIn":{"message":"If you believe this is shown in error please visit https://g.co/chrome/lookalike-warnings."},"panels/security/SecurityPanel.ts | ifYouBelieveThisIsShownInErrorSafety":{"message":"If you believe this is shown in error please visit https://g.co/chrome/lookalike-warnings."},"panels/security/SecurityPanel.ts | info":{"message":"Info"},"panels/security/SecurityPanel.ts | insecureSha":{"message":"insecure (SHA-1)"},"panels/security/SecurityPanel.ts | issuedAt":{"message":"Issued at"},"panels/security/SecurityPanel.ts | issuer":{"message":"Issuer"},"panels/security/SecurityPanel.ts | keyExchange":{"message":"Key exchange"},"panels/security/SecurityPanel.ts | logId":{"message":"Log ID"},"panels/security/SecurityPanel.ts | logName":{"message":"Log name"},"panels/security/SecurityPanel.ts | mainOrigin":{"message":"Main origin"},"panels/security/SecurityPanel.ts | mainOriginNonsecure":{"message":"Main origin (non-secure)"},"panels/security/SecurityPanel.ts | mainOriginSecure":{"message":"Main origin (secure)"},"panels/security/SecurityPanel.ts | missing":{"message":"missing"},"panels/security/SecurityPanel.ts | mixedContent":{"message":"mixed content"},"panels/security/SecurityPanel.ts | na":{"message":"(n/a)"},"panels/security/SecurityPanel.ts | nonsecureForm":{"message":"non-secure form"},"panels/security/SecurityPanel.ts | nonsecureOrigins":{"message":"Non-secure origins"},"panels/security/SecurityPanel.ts | noSecurityDetailsAreAvailableFor":{"message":"No security details are available for this origin."},"panels/security/SecurityPanel.ts | noSecurityInformation":{"message":"No security information"},"panels/security/SecurityPanel.ts | notSecure":{"message":"Not secure"},"panels/security/SecurityPanel.ts | notSecureBroken":{"message":"Not secure (broken)"},"panels/security/SecurityPanel.ts | obsoleteConnectionSettings":{"message":"obsolete connection settings"},"panels/security/SecurityPanel.ts | openFullCertificateDetails":{"message":"Open full certificate details"},"panels/security/SecurityPanel.ts | origin":{"message":"Origin"},"panels/security/SecurityPanel.ts | overview":{"message":"Overview"},"panels/security/SecurityPanel.ts | possibleSpoofingUrl":{"message":"Possible spoofing URL"},"panels/security/SecurityPanel.ts | protocol":{"message":"Protocol"},"panels/security/SecurityPanel.ts | publickeypinningBypassed":{"message":"Public-Key-Pinning bypassed"},"panels/security/SecurityPanel.ts | publickeypinningWasBypassedByA":{"message":"Public-Key-Pinning was bypassed by a local root certificate."},"panels/security/SecurityPanel.ts | reloadThePageToRecordRequestsFor":{"message":"Reload the page to record requests for HTTP resources."},"panels/security/SecurityPanel.ts | reloadToViewDetails":{"message":"Reload to view details"},"panels/security/SecurityPanel.ts | resources":{"message":"Resources"},"panels/security/SecurityPanel.ts | rsaKeyExchangeIsObsoleteEnableAn":{"message":"RSA key exchange is obsolete. Enable an ECDHE-based cipher suite."},"panels/security/SecurityPanel.ts | sct":{"message":"SCT"},"panels/security/SecurityPanel.ts | secure":{"message":"Secure"},"panels/security/SecurityPanel.ts | secureConnectionSettings":{"message":"secure connection settings"},"panels/security/SecurityPanel.ts | secureOrigins":{"message":"Secure origins"},"panels/security/SecurityPanel.ts | securityOverview":{"message":"Security overview"},"panels/security/SecurityPanel.ts | serverSignature":{"message":"Server signature"},"panels/security/SecurityPanel.ts | showFullDetails":{"message":"Show full details"},"panels/security/SecurityPanel.ts | showLess":{"message":"Show less"},"panels/security/SecurityPanel.ts | showMoreSTotal":{"message":"Show more ({PH1} total)"},"panels/security/SecurityPanel.ts | signatureAlgorithm":{"message":"Signature algorithm"},"panels/security/SecurityPanel.ts | signatureData":{"message":"Signature data"},"panels/security/SecurityPanel.ts | sIsObsoleteEnableAnAesgcmbased":{"message":"{PH1} is obsolete. Enable an AES-GCM-based cipher suite."},"panels/security/SecurityPanel.ts | sIsObsoleteEnableTlsOrLater":{"message":"{PH1} is obsolete. Enable TLS 1.2 or later."},"panels/security/SecurityPanel.ts | source":{"message":"Source"},"panels/security/SecurityPanel.ts | subject":{"message":"Subject"},"panels/security/SecurityPanel.ts | subjectAlternativeNameMissing":{"message":"Subject Alternative Name missing"},"panels/security/SecurityPanel.ts | theCertificateChainForThisSite":{"message":"The certificate chain for this site contains a certificate signed using SHA-1."},"panels/security/SecurityPanel.ts | theCertificateForThisSiteDoesNot":{"message":"The certificate for this site does not contain a Subject Alternative Name extension containing a domain name or IP address."},"panels/security/SecurityPanel.ts | theCertificateForThisSiteExpires":{"message":"The certificate for this site expires in less than 48 hours and needs to be renewed."},"panels/security/SecurityPanel.ts | theConnectionToThisSiteIs":{"message":"The connection to this site is encrypted and authenticated using {PH1}, {PH2}, and {PH3}."},"panels/security/SecurityPanel.ts | theConnectionToThisSiteIsUsingA":{"message":"The connection to this site is using a valid, trusted server certificate issued by {PH1}."},"panels/security/SecurityPanel.ts | theSecurityDetailsAboveAreFrom":{"message":"The security details above are from the first inspected response."},"panels/security/SecurityPanel.ts | theServerSignatureUsesShaWhichIs":{"message":"The server signature uses SHA-1, which is obsolete. Enable a SHA-2 signature algorithm instead. (Note this is different from the signature in the certificate.)"},"panels/security/SecurityPanel.ts | thisIsAnErrorPage":{"message":"This is an error page."},"panels/security/SecurityPanel.ts | thisOriginIsANonhttpsSecure":{"message":"This origin is a non-HTTPS secure origin."},"panels/security/SecurityPanel.ts | thisPageHasANonhttpsSecureOrigin":{"message":"This page has a non-HTTPS secure origin."},"panels/security/SecurityPanel.ts | thisPageIncludesAFormWithA":{"message":"This page includes a form with a non-secure \"action\" attribute."},"panels/security/SecurityPanel.ts | thisPageIncludesHttpResources":{"message":"This page includes HTTP resources."},"panels/security/SecurityPanel.ts | thisPageIncludesResourcesThat":{"message":"This page includes resources that were loaded with certificate errors."},"panels/security/SecurityPanel.ts | thisPageIsDangerousFlaggedBy":{"message":"This page is dangerous (flagged by Google Safe Browsing)."},"panels/security/SecurityPanel.ts | thisPageIsInsecureUnencrypted":{"message":"This page is insecure (unencrypted HTTP)."},"panels/security/SecurityPanel.ts | thisPageIsSuspicious":{"message":"This page is suspicious"},"panels/security/SecurityPanel.ts | thisPageIsSuspiciousFlaggedBy":{"message":"This page is suspicious (flagged by Chrome)."},"panels/security/SecurityPanel.ts | thisRequestCompliesWithChromes":{"message":"This request complies with Chrome's Certificate Transparency policy."},"panels/security/SecurityPanel.ts | thisRequestDoesNotComplyWith":{"message":"This request does not comply with Chrome's Certificate Transparency policy."},"panels/security/SecurityPanel.ts | thisResponseWasLoadedFromCache":{"message":"This response was loaded from cache. Some security details might be missing."},"panels/security/SecurityPanel.ts | thisSiteIsMissingAValidTrusted":{"message":"This site is missing a valid, trusted certificate ({PH1})."},"panels/security/SecurityPanel.ts | thisSitesHostnameLooksSimilarToP":{"message":"This site's hostname looks similar to {PH1}. Attackers sometimes mimic sites by making small, hard-to-see changes to the domain name."},"panels/security/SecurityPanel.ts | toCheckThisPagesStatusVisit":{"message":"To check this page's status, visit g.co/safebrowsingstatus."},"panels/security/SecurityPanel.ts | unknownCanceled":{"message":"Unknown / canceled"},"panels/security/SecurityPanel.ts | unknownField":{"message":"unknown"},"panels/security/SecurityPanel.ts | validAndTrusted":{"message":"valid and trusted"},"panels/security/SecurityPanel.ts | validationStatus":{"message":"Validation status"},"panels/security/SecurityPanel.ts | validFrom":{"message":"Valid from"},"panels/security/SecurityPanel.ts | validUntil":{"message":"Valid until"},"panels/security/SecurityPanel.ts | viewCertificate":{"message":"View certificate"},"panels/security/SecurityPanel.ts | viewDRequestsInNetworkPanel":{"message":"{n, plural, =1 {View # request in Network Panel} other {View # requests in Network Panel}}"},"panels/security/SecurityPanel.ts | viewRequestsInNetworkPanel":{"message":"View requests in Network Panel"},"panels/security/SecurityPanel.ts | youHaveRecentlyAllowedContent":{"message":"You have recently allowed content loaded with certificate errors (such as scripts or iframes) to run on this site."},"panels/security/SecurityPanel.ts | youHaveRecentlyAllowedNonsecure":{"message":"You have recently allowed non-secure content (such as scripts or iframes) to run on this site."},"panels/security/SecurityPanel.ts | yourConnectionToThisOriginIsNot":{"message":"Your connection to this origin is not secure."},"panels/security/SecurityPanel.ts | yourPageRequestedNonsecure":{"message":"Your page requested non-secure resources that were blocked."},"panels/sensors/LocationsSettingsTab.ts | addLocation":{"message":"Add location..."},"panels/sensors/LocationsSettingsTab.ts | customLocations":{"message":"Custom locations"},"panels/sensors/LocationsSettingsTab.ts | lat":{"message":"Lat"},"panels/sensors/LocationsSettingsTab.ts | latitude":{"message":"Latitude"},"panels/sensors/LocationsSettingsTab.ts | latitudeMustBeANumber":{"message":"Latitude must be a number"},"panels/sensors/LocationsSettingsTab.ts | latitudeMustBeGreaterThanOrEqual":{"message":"Latitude must be greater than or equal to {PH1}"},"panels/sensors/LocationsSettingsTab.ts | latitudeMustBeLessThanOrEqualToS":{"message":"Latitude must be less than or equal to {PH1}"},"panels/sensors/LocationsSettingsTab.ts | locale":{"message":"Locale"},"panels/sensors/LocationsSettingsTab.ts | localeMustContainAlphabetic":{"message":"Locale must contain alphabetic characters"},"panels/sensors/LocationsSettingsTab.ts | locationName":{"message":"Location name"},"panels/sensors/LocationsSettingsTab.ts | locationNameCannotBeEmpty":{"message":"Location name cannot be empty"},"panels/sensors/LocationsSettingsTab.ts | locationNameMustBeLessThanS":{"message":"Location name must be less than {PH1} characters"},"panels/sensors/LocationsSettingsTab.ts | long":{"message":"Long"},"panels/sensors/LocationsSettingsTab.ts | longitude":{"message":"Longitude"},"panels/sensors/LocationsSettingsTab.ts | longitudeMustBeANumber":{"message":"Longitude must be a number"},"panels/sensors/LocationsSettingsTab.ts | longitudeMustBeGreaterThanOr":{"message":"Longitude must be greater than or equal to {PH1}"},"panels/sensors/LocationsSettingsTab.ts | longitudeMustBeLessThanOrEqualTo":{"message":"Longitude must be less than or equal to {PH1}"},"panels/sensors/LocationsSettingsTab.ts | timezoneId":{"message":"Timezone ID"},"panels/sensors/LocationsSettingsTab.ts | timezoneIdMustContainAlphabetic":{"message":"Timezone ID must contain alphabetic characters"},"panels/sensors/sensors-meta.ts | accelerometer":{"message":"accelerometer"},"panels/sensors/sensors-meta.ts | devicebased":{"message":"Device-based"},"panels/sensors/sensors-meta.ts | deviceOrientation":{"message":"device orientation"},"panels/sensors/sensors-meta.ts | emulateIdleDetectorState":{"message":"Emulate Idle Detector state"},"panels/sensors/sensors-meta.ts | forceEnabled":{"message":"Force enabled"},"panels/sensors/sensors-meta.ts | geolocation":{"message":"geolocation"},"panels/sensors/sensors-meta.ts | locale":{"message":"locale"},"panels/sensors/sensors-meta.ts | locales":{"message":"locales"},"panels/sensors/sensors-meta.ts | locations":{"message":"Locations"},"panels/sensors/sensors-meta.ts | noIdleEmulation":{"message":"No idle emulation"},"panels/sensors/sensors-meta.ts | sensors":{"message":"Sensors"},"panels/sensors/sensors-meta.ts | showLocations":{"message":"Show Locations"},"panels/sensors/sensors-meta.ts | showSensors":{"message":"Show Sensors"},"panels/sensors/sensors-meta.ts | timezones":{"message":"timezones"},"panels/sensors/sensors-meta.ts | touch":{"message":"Touch"},"panels/sensors/sensors-meta.ts | userActiveScreenLocked":{"message":"User active, screen locked"},"panels/sensors/sensors-meta.ts | userActiveScreenUnlocked":{"message":"User active, screen unlocked"},"panels/sensors/sensors-meta.ts | userIdleScreenLocked":{"message":"User idle, screen locked"},"panels/sensors/sensors-meta.ts | userIdleScreenUnlocked":{"message":"User idle, screen unlocked"},"panels/sensors/SensorsView.ts | adjustWithMousewheelOrUpdownKeys":{"message":"Adjust with mousewheel or up/down keys. {PH1}: ±10, Shift: ±1, Alt: ±0.01"},"panels/sensors/SensorsView.ts | alpha":{"message":"α (alpha)"},"panels/sensors/SensorsView.ts | beta":{"message":"β (beta)"},"panels/sensors/SensorsView.ts | customOrientation":{"message":"Custom orientation"},"panels/sensors/SensorsView.ts | deviceOrientationSetToAlphaSBeta":{"message":"Device orientation set to alpha: {PH1}, beta: {PH2}, gamma: {PH3}"},"panels/sensors/SensorsView.ts | displayDown":{"message":"Display down"},"panels/sensors/SensorsView.ts | displayUp":{"message":"Display up"},"panels/sensors/SensorsView.ts | enableOrientationToRotate":{"message":"Enable orientation to rotate"},"panels/sensors/SensorsView.ts | error":{"message":"Error"},"panels/sensors/SensorsView.ts | forcesSelectedIdleStateEmulation":{"message":"Forces selected idle state emulation"},"panels/sensors/SensorsView.ts | forcesTouchInsteadOfClick":{"message":"Forces touch instead of click"},"panels/sensors/SensorsView.ts | gamma":{"message":"γ (gamma)"},"panels/sensors/SensorsView.ts | landscapeLeft":{"message":"Landscape left"},"panels/sensors/SensorsView.ts | landscapeRight":{"message":"Landscape right"},"panels/sensors/SensorsView.ts | latitude":{"message":"Latitude"},"panels/sensors/SensorsView.ts | locale":{"message":"Locale"},"panels/sensors/SensorsView.ts | location":{"message":"Location"},"panels/sensors/SensorsView.ts | locationUnavailable":{"message":"Location unavailable"},"panels/sensors/SensorsView.ts | longitude":{"message":"Longitude"},"panels/sensors/SensorsView.ts | manage":{"message":"Manage"},"panels/sensors/SensorsView.ts | manageTheListOfLocations":{"message":"Manage the list of locations"},"panels/sensors/SensorsView.ts | noOverride":{"message":"No override"},"panels/sensors/SensorsView.ts | off":{"message":"Off"},"panels/sensors/SensorsView.ts | orientation":{"message":"Orientation"},"panels/sensors/SensorsView.ts | other":{"message":"Other…"},"panels/sensors/SensorsView.ts | overrides":{"message":"Overrides"},"panels/sensors/SensorsView.ts | portrait":{"message":"Portrait"},"panels/sensors/SensorsView.ts | portraitUpsideDown":{"message":"Portrait upside down"},"panels/sensors/SensorsView.ts | presets":{"message":"Presets"},"panels/sensors/SensorsView.ts | reset":{"message":"Reset"},"panels/sensors/SensorsView.ts | resetDeviceOrientation":{"message":"Reset device orientation"},"panels/sensors/SensorsView.ts | shiftdragHorizontallyToRotate":{"message":"Shift+drag horizontally to rotate around the y-axis"},"panels/sensors/SensorsView.ts | timezoneId":{"message":"Timezone ID"},"panels/settings/components/SyncSection.ts | preferencesSyncDisabled":{"message":"To turn this setting on, you must first enable settings sync in Chrome."},"panels/settings/components/SyncSection.ts | settings":{"message":"Go to Settings"},"panels/settings/components/SyncSection.ts | signedIn":{"message":"Signed into Chrome as:"},"panels/settings/components/SyncSection.ts | syncDisabled":{"message":"To turn this setting on, you must enable Chrome sync."},"panels/settings/emulation/components/UserAgentClientHintsForm.ts | addBrand":{"message":"Add Brand"},"panels/settings/emulation/components/UserAgentClientHintsForm.ts | addedBrand":{"message":"Added brand row"},"panels/settings/emulation/components/UserAgentClientHintsForm.ts | architecture":{"message":"Architecture (Sec-CH-UA-Arch)"},"panels/settings/emulation/components/UserAgentClientHintsForm.ts | architecturePlaceholder":{"message":"Architecture (e.g. x86)"},"panels/settings/emulation/components/UserAgentClientHintsForm.ts | brandFullVersionListDelete":{"message":"Delete brand from full version list"},"panels/settings/emulation/components/UserAgentClientHintsForm.ts | brandName":{"message":"Brand"},"panels/settings/emulation/components/UserAgentClientHintsForm.ts | brandNameAriaLabel":{"message":"Brand {PH1}"},"panels/settings/emulation/components/UserAgentClientHintsForm.ts | brandProperties":{"message":"User agent properties"},"panels/settings/emulation/components/UserAgentClientHintsForm.ts | brandUserAgentDelete":{"message":"Delete brand from user agent section"},"panels/settings/emulation/components/UserAgentClientHintsForm.ts | brandVersionAriaLabel":{"message":"Version {PH1}"},"panels/settings/emulation/components/UserAgentClientHintsForm.ts | brandVersionPlaceholder":{"message":"Version (e.g. 87.0.4280.88)"},"panels/settings/emulation/components/UserAgentClientHintsForm.ts | deletedBrand":{"message":"Deleted brand row"},"panels/settings/emulation/components/UserAgentClientHintsForm.ts | deviceModel":{"message":"Device model (Sec-CH-UA-Model)"},"panels/settings/emulation/components/UserAgentClientHintsForm.ts | deviceProperties":{"message":"Device properties"},"panels/settings/emulation/components/UserAgentClientHintsForm.ts | fullBrowserVersion":{"message":"Full browser version (Sec-CH-UA-Full-Browser-Version)"},"panels/settings/emulation/components/UserAgentClientHintsForm.ts | fullBrowserVersionPlaceholder":{"message":"Full browser version (e.g. 87.0.4280.88)"},"panels/settings/emulation/components/UserAgentClientHintsForm.ts | fullVersionList":{"message":"Full version list (Sec-CH-UA-Full-Version-List)"},"panels/settings/emulation/components/UserAgentClientHintsForm.ts | learnMore":{"message":"Learn more"},"panels/settings/emulation/components/UserAgentClientHintsForm.ts | mobileCheckboxLabel":{"message":"Mobile"},"panels/settings/emulation/components/UserAgentClientHintsForm.ts | notRepresentable":{"message":"Not representable as structured headers string."},"panels/settings/emulation/components/UserAgentClientHintsForm.ts | platformLabel":{"message":"Platform (Sec-CH-UA-Platform / Sec-CH-UA-Platform-Version)"},"panels/settings/emulation/components/UserAgentClientHintsForm.ts | platformPlaceholder":{"message":"Platform (e.g. Android)"},"panels/settings/emulation/components/UserAgentClientHintsForm.ts | platformProperties":{"message":"Platform properties"},"panels/settings/emulation/components/UserAgentClientHintsForm.ts | platformVersion":{"message":"Platform version"},"panels/settings/emulation/components/UserAgentClientHintsForm.ts | significantBrandVersionPlaceholder":{"message":"Significant version (e.g. 87)"},"panels/settings/emulation/components/UserAgentClientHintsForm.ts | title":{"message":"User agent client hints"},"panels/settings/emulation/components/UserAgentClientHintsForm.ts | update":{"message":"Update"},"panels/settings/emulation/components/UserAgentClientHintsForm.ts | useragent":{"message":"User agent (Sec-CH-UA)"},"panels/settings/emulation/components/UserAgentClientHintsForm.ts | userAgentClientHintsInfo":{"message":"User agent client hints are an alternative to the user agent string that identify the browser and the device in a more structured way with better privacy accounting."},"panels/settings/emulation/DevicesSettingsTab.ts | addCustomDevice":{"message":"Add custom device..."},"panels/settings/emulation/DevicesSettingsTab.ts | device":{"message":"Device"},"panels/settings/emulation/DevicesSettingsTab.ts | deviceAddedOrUpdated":{"message":"Device {PH1} successfully added/updated."},"panels/settings/emulation/DevicesSettingsTab.ts | deviceName":{"message":"Device Name"},"panels/settings/emulation/DevicesSettingsTab.ts | deviceNameCannotBeEmpty":{"message":"Device name cannot be empty."},"panels/settings/emulation/DevicesSettingsTab.ts | deviceNameMustBeLessThanS":{"message":"Device name must be less than {PH1} characters."},"panels/settings/emulation/DevicesSettingsTab.ts | devicePixelRatio":{"message":"Device pixel ratio"},"panels/settings/emulation/DevicesSettingsTab.ts | emulatedDevices":{"message":"Emulated Devices"},"panels/settings/emulation/DevicesSettingsTab.ts | height":{"message":"Height"},"panels/settings/emulation/DevicesSettingsTab.ts | userAgentString":{"message":"User agent string"},"panels/settings/emulation/DevicesSettingsTab.ts | userAgentType":{"message":"User agent type"},"panels/settings/emulation/DevicesSettingsTab.ts | width":{"message":"Width"},"panels/settings/emulation/emulation-meta.ts | devices":{"message":"Devices"},"panels/settings/emulation/emulation-meta.ts | showDevices":{"message":"Show Devices"},"panels/settings/FrameworkIgnoreListSettingsTab.ts | addFilenamePattern":{"message":"Add filename pattern"},"panels/settings/FrameworkIgnoreListSettingsTab.ts | addPattern":{"message":"Add pattern..."},"panels/settings/FrameworkIgnoreListSettingsTab.ts | automaticallyIgnoreListKnownThirdPartyScripts":{"message":"Known third-party scripts from source maps"},"panels/settings/FrameworkIgnoreListSettingsTab.ts | customExclusionRules":{"message":"Custom exclusion rules:"},"panels/settings/FrameworkIgnoreListSettingsTab.ts | debuggerWillSkipThroughThe":{"message":"Debugger will skip through the scripts and will not stop on exceptions thrown by them."},"panels/settings/FrameworkIgnoreListSettingsTab.ts | enableIgnoreListing":{"message":"Enable Ignore Listing"},"panels/settings/FrameworkIgnoreListSettingsTab.ts | enableIgnoreListingTooltip":{"message":"Uncheck to disable all ignore listing"},"panels/settings/FrameworkIgnoreListSettingsTab.ts | frameworkIgnoreList":{"message":"Framework Ignore List"},"panels/settings/FrameworkIgnoreListSettingsTab.ts | generalExclusionRules":{"message":"General exclusion rules:"},"panels/settings/FrameworkIgnoreListSettingsTab.ts | ignoreListContentScripts":{"message":"Content scripts injected by extensions"},"panels/settings/FrameworkIgnoreListSettingsTab.ts | ignoreScriptsWhoseNamesMatchS":{"message":"Ignore scripts whose names match ''{PH1}''"},"panels/settings/FrameworkIgnoreListSettingsTab.ts | learnMore":{"message":"Learn more"},"panels/settings/FrameworkIgnoreListSettingsTab.ts | pattern":{"message":"Add Pattern"},"panels/settings/FrameworkIgnoreListSettingsTab.ts | patternAlreadyExists":{"message":"Pattern already exists"},"panels/settings/FrameworkIgnoreListSettingsTab.ts | patternCannotBeEmpty":{"message":"Pattern cannot be empty"},"panels/settings/FrameworkIgnoreListSettingsTab.ts | patternMustBeAValidRegular":{"message":"Pattern must be a valid regular expression"},"panels/settings/KeybindsSettingsTab.ts | addAShortcut":{"message":"Add a shortcut"},"panels/settings/KeybindsSettingsTab.ts | confirmChanges":{"message":"Confirm changes"},"panels/settings/KeybindsSettingsTab.ts | discardChanges":{"message":"Discard changes"},"panels/settings/KeybindsSettingsTab.ts | editShortcut":{"message":"Edit shortcut"},"panels/settings/KeybindsSettingsTab.ts | FullListOfDevtoolsKeyboard":{"message":"Full list of DevTools keyboard shortcuts and gestures"},"panels/settings/KeybindsSettingsTab.ts | keyboardShortcutsList":{"message":"Keyboard shortcuts list"},"panels/settings/KeybindsSettingsTab.ts | matchShortcutsFromPreset":{"message":"Match shortcuts from preset"},"panels/settings/KeybindsSettingsTab.ts | noShortcutForAction":{"message":"No shortcut for action"},"panels/settings/KeybindsSettingsTab.ts | removeShortcut":{"message":"Remove shortcut"},"panels/settings/KeybindsSettingsTab.ts | ResetShortcutsForAction":{"message":"Reset shortcuts for action"},"panels/settings/KeybindsSettingsTab.ts | RestoreDefaultShortcuts":{"message":"Restore default shortcuts"},"panels/settings/KeybindsSettingsTab.ts | shortcutModified":{"message":"Shortcut modified"},"panels/settings/KeybindsSettingsTab.ts | shortcuts":{"message":"Shortcuts"},"panels/settings/KeybindsSettingsTab.ts | shortcutsCannotContainOnly":{"message":"Shortcuts cannot contain only modifier keys."},"panels/settings/KeybindsSettingsTab.ts | thisShortcutIsInUseByS":{"message":"This shortcut is in use by {PH1}: {PH2}."},"panels/settings/settings-meta.ts | documentation":{"message":"Documentation"},"panels/settings/settings-meta.ts | experiments":{"message":"Experiments"},"panels/settings/settings-meta.ts | ignoreList":{"message":"Ignore List"},"panels/settings/settings-meta.ts | preferences":{"message":"Preferences"},"panels/settings/settings-meta.ts | settings":{"message":"Settings"},"panels/settings/settings-meta.ts | shortcuts":{"message":"Shortcuts"},"panels/settings/settings-meta.ts | showExperiments":{"message":"Show Experiments"},"panels/settings/settings-meta.ts | showIgnoreList":{"message":"Show Ignore List"},"panels/settings/settings-meta.ts | showPreferences":{"message":"Show Preferences"},"panels/settings/settings-meta.ts | showShortcuts":{"message":"Show Shortcuts"},"panels/settings/SettingsScreen.ts | experiments":{"message":"Experiments"},"panels/settings/SettingsScreen.ts | filterExperimentsLabel":{"message":"Filter"},"panels/settings/SettingsScreen.ts | learnMore":{"message":"Learn more"},"panels/settings/SettingsScreen.ts | noResults":{"message":"No experiments match the filter"},"panels/settings/SettingsScreen.ts | oneOrMoreSettingsHaveChanged":{"message":"One or more settings have changed which requires a reload to take effect."},"panels/settings/SettingsScreen.ts | preferences":{"message":"Preferences"},"panels/settings/SettingsScreen.ts | restoreDefaultsAndReload":{"message":"Restore defaults and reload"},"panels/settings/SettingsScreen.ts | sendFeedback":{"message":"Send feedback"},"panels/settings/SettingsScreen.ts | settings":{"message":"Settings"},"panels/settings/SettingsScreen.ts | shortcuts":{"message":"Shortcuts"},"panels/settings/SettingsScreen.ts | theseExperimentsAreParticularly":{"message":"These experiments are particularly unstable. Enable at your own risk."},"panels/settings/SettingsScreen.ts | theseExperimentsCouldBeUnstable":{"message":"These experiments could be unstable or unreliable and may require you to restart DevTools."},"panels/settings/SettingsScreen.ts | warning":{"message":"WARNING:"},"panels/snippets/ScriptSnippetFileSystem.ts | linkedTo":{"message":"Linked to {PH1}"},"panels/snippets/ScriptSnippetFileSystem.ts | scriptSnippet":{"message":"Script snippet #{PH1}"},"panels/snippets/SnippetsQuickOpen.ts | noSnippetsFound":{"message":"No snippets found."},"panels/snippets/SnippetsQuickOpen.ts | run":{"message":"Run"},"panels/snippets/SnippetsQuickOpen.ts | snippet":{"message":"Snippet"},"panels/sources/AddSourceMapURLDialog.ts | add":{"message":"Add"},"panels/sources/AddSourceMapURLDialog.ts | debugInfoUrl":{"message":"DWARF symbols URL: "},"panels/sources/AddSourceMapURLDialog.ts | sourceMapUrl":{"message":"Source map URL: "},"panels/sources/BreakpointEditDialog.ts | breakpoint":{"message":"Breakpoint"},"panels/sources/BreakpointEditDialog.ts | breakpointType":{"message":"Breakpoint type"},"panels/sources/BreakpointEditDialog.ts | closeDialog":{"message":"Close edit dialog and save changes"},"panels/sources/BreakpointEditDialog.ts | conditionalBreakpoint":{"message":"Conditional breakpoint"},"panels/sources/BreakpointEditDialog.ts | expressionToCheckBeforePausingEg":{"message":"Expression to check before pausing, e.g. x > 5"},"panels/sources/BreakpointEditDialog.ts | learnMoreOnBreakpointTypes":{"message":"Learn more: Breakpoint Types"},"panels/sources/BreakpointEditDialog.ts | logAMessageToConsoleDoNotBreak":{"message":"Log a message to Console, do not break"},"panels/sources/BreakpointEditDialog.ts | logMessageEgXIsX":{"message":"Log message, e.g. 'x is', x"},"panels/sources/BreakpointEditDialog.ts | logpoint":{"message":"Logpoint"},"panels/sources/BreakpointEditDialog.ts | pauseOnlyWhenTheConditionIsTrue":{"message":"Pause only when the condition is true"},"panels/sources/CallStackSidebarPane.ts | callFrameWarnings":{"message":"Some call frames have warnings"},"panels/sources/CallStackSidebarPane.ts | callStack":{"message":"Call Stack"},"panels/sources/CallStackSidebarPane.ts | copyStackTrace":{"message":"Copy stack trace"},"panels/sources/CallStackSidebarPane.ts | debugFileNotFound":{"message":"Failed to load debug file \"{PH1}\"."},"panels/sources/CallStackSidebarPane.ts | notPaused":{"message":"Not paused"},"panels/sources/CallStackSidebarPane.ts | onIgnoreList":{"message":"on ignore list"},"panels/sources/CallStackSidebarPane.ts | restartFrame":{"message":"Restart frame"},"panels/sources/CallStackSidebarPane.ts | showIgnorelistedFrames":{"message":"Show ignore-listed frames"},"panels/sources/CallStackSidebarPane.ts | showMore":{"message":"Show more"},"panels/sources/components/BreakpointsView.ts | breakpointHit":{"message":"{PH1} breakpoint hit"},"panels/sources/components/BreakpointsView.ts | checked":{"message":"checked"},"panels/sources/components/BreakpointsView.ts | conditionCode":{"message":"Condition: {PH1}"},"panels/sources/components/BreakpointsView.ts | disableAllBreakpointsInFile":{"message":"Disable all breakpoints in file"},"panels/sources/components/BreakpointsView.ts | editCondition":{"message":"Edit condition"},"panels/sources/components/BreakpointsView.ts | editLogpoint":{"message":"Edit logpoint"},"panels/sources/components/BreakpointsView.ts | enableAllBreakpointsInFile":{"message":"Enable all breakpoints in file"},"panels/sources/components/BreakpointsView.ts | indeterminate":{"message":"mixed"},"panels/sources/components/BreakpointsView.ts | logpointCode":{"message":"Logpoint: {PH1}"},"panels/sources/components/BreakpointsView.ts | pauseOnCaughtExceptions":{"message":"Pause on caught exceptions"},"panels/sources/components/BreakpointsView.ts | pauseOnUncaughtExceptions":{"message":"Pause on uncaught exceptions"},"panels/sources/components/BreakpointsView.ts | removeAllBreakpoints":{"message":"Remove all breakpoints"},"panels/sources/components/BreakpointsView.ts | removeAllBreakpointsInFile":{"message":"Remove all breakpoints in file"},"panels/sources/components/BreakpointsView.ts | removeBreakpoint":{"message":"Remove breakpoint"},"panels/sources/components/BreakpointsView.ts | removeOtherBreakpoints":{"message":"Remove other breakpoints"},"panels/sources/components/BreakpointsView.ts | revealLocation":{"message":"Reveal location"},"panels/sources/components/BreakpointsView.ts | unchecked":{"message":"unchecked"},"panels/sources/components/HeadersView.ts | addHeader":{"message":"Add a header"},"panels/sources/components/HeadersView.ts | addOverrideRule":{"message":"Add override rule"},"panels/sources/components/HeadersView.ts | errorWhenParsing":{"message":"Error when parsing ''{PH1}''."},"panels/sources/components/HeadersView.ts | learnMore":{"message":"Learn more"},"panels/sources/components/HeadersView.ts | parsingErrorExplainer":{"message":"This is most likely due to a syntax error in ''{PH1}''. Try opening this file in an external editor to fix the error or delete the file and re-create the override."},"panels/sources/components/HeadersView.ts | removeBlock":{"message":"Remove this 'ApplyTo'-section"},"panels/sources/components/HeadersView.ts | removeHeader":{"message":"Remove this header"},"panels/sources/CoveragePlugin.ts | clickToShowCoveragePanel":{"message":"Click to show Coverage Panel"},"panels/sources/CoveragePlugin.ts | coverageNa":{"message":"Coverage: n/a"},"panels/sources/CoveragePlugin.ts | coverageS":{"message":"Coverage: {PH1}"},"panels/sources/CoveragePlugin.ts | showDetails":{"message":"Show Details"},"panels/sources/CSSPlugin.ts | openColorPicker":{"message":"Open color picker."},"panels/sources/CSSPlugin.ts | openCubicBezierEditor":{"message":"Open cubic bezier editor."},"panels/sources/DebuggerPausedMessage.ts | attributeModifications":{"message":"attribute modifications"},"panels/sources/DebuggerPausedMessage.ts | childSAdded":{"message":"Child {PH1} added"},"panels/sources/DebuggerPausedMessage.ts | debuggerPaused":{"message":"Debugger paused"},"panels/sources/DebuggerPausedMessage.ts | descendantSAdded":{"message":"Descendant {PH1} added"},"panels/sources/DebuggerPausedMessage.ts | descendantSRemoved":{"message":"Descendant {PH1} removed"},"panels/sources/DebuggerPausedMessage.ts | nodeRemoval":{"message":"node removal"},"panels/sources/DebuggerPausedMessage.ts | pausedBeforePotentialOutofmemory":{"message":"Paused before potential out-of-memory crash"},"panels/sources/DebuggerPausedMessage.ts | pausedOnAssertion":{"message":"Paused on assertion"},"panels/sources/DebuggerPausedMessage.ts | pausedOnBreakpoint":{"message":"Paused on breakpoint"},"panels/sources/DebuggerPausedMessage.ts | pausedOnCspViolation":{"message":"Paused on CSP violation"},"panels/sources/DebuggerPausedMessage.ts | pausedOnDebuggedFunction":{"message":"Paused on debugged function"},"panels/sources/DebuggerPausedMessage.ts | pausedOnEventListener":{"message":"Paused on event listener"},"panels/sources/DebuggerPausedMessage.ts | pausedOnException":{"message":"Paused on exception"},"panels/sources/DebuggerPausedMessage.ts | pausedOnPromiseRejection":{"message":"Paused on promise rejection"},"panels/sources/DebuggerPausedMessage.ts | pausedOnS":{"message":"Paused on {PH1}"},"panels/sources/DebuggerPausedMessage.ts | pausedOnXhrOrFetch":{"message":"Paused on XHR or fetch"},"panels/sources/DebuggerPausedMessage.ts | subtreeModifications":{"message":"subtree modifications"},"panels/sources/DebuggerPausedMessage.ts | trustedTypePolicyViolation":{"message":"Trusted Type Policy Violation"},"panels/sources/DebuggerPausedMessage.ts | trustedTypeSinkViolation":{"message":"Trusted Type Sink Violation"},"panels/sources/DebuggerPlugin.ts | addBreakpoint":{"message":"Add breakpoint"},"panels/sources/DebuggerPlugin.ts | addConditionalBreakpoint":{"message":"Add conditional breakpoint…"},"panels/sources/DebuggerPlugin.ts | addLogpoint":{"message":"Add logpoint…"},"panels/sources/DebuggerPlugin.ts | addSourceMap":{"message":"Add source map…"},"panels/sources/DebuggerPlugin.ts | addWasmDebugInfo":{"message":"Add DWARF debug info…"},"panels/sources/DebuggerPlugin.ts | associatedFilesAreAvailable":{"message":"Associated files are available via file tree or {PH1}."},"panels/sources/DebuggerPlugin.ts | associatedFilesShouldBeAdded":{"message":"Associated files should be added to the file tree. You can debug these resolved source files as regular JavaScript files."},"panels/sources/DebuggerPlugin.ts | configure":{"message":"Configure"},"panels/sources/DebuggerPlugin.ts | debugFileNotFound":{"message":"Failed to load debug file \"{PH1}\"."},"panels/sources/DebuggerPlugin.ts | debugInfoNotFound":{"message":"Failed to load any debug info for {PH1}."},"panels/sources/DebuggerPlugin.ts | disableBreakpoint":{"message":"{n, plural, =1 {Disable breakpoint} other {Disable all breakpoints in line}}"},"panels/sources/DebuggerPlugin.ts | editBreakpoint":{"message":"Edit breakpoint…"},"panels/sources/DebuggerPlugin.ts | enableBreakpoint":{"message":"{n, plural, =1 {Enable breakpoint} other {Enable all breakpoints in line}}"},"panels/sources/DebuggerPlugin.ts | neverPauseHere":{"message":"Never pause here"},"panels/sources/DebuggerPlugin.ts | removeBreakpoint":{"message":"{n, plural, =1 {Remove breakpoint} other {Remove all breakpoints in line}}"},"panels/sources/DebuggerPlugin.ts | removeFromIgnoreList":{"message":"Remove from ignore list"},"panels/sources/DebuggerPlugin.ts | sourceMapDetected":{"message":"Source map detected."},"panels/sources/DebuggerPlugin.ts | sourceMapFoundButIgnoredForFile":{"message":"Source map found, but ignored for file on ignore list."},"panels/sources/DebuggerPlugin.ts | theDebuggerWillSkipStepping":{"message":"The debugger will skip stepping through this script, and will not stop on exceptions."},"panels/sources/DebuggerPlugin.ts | thisScriptIsOnTheDebuggersIgnore":{"message":"This script is on the debugger's ignore list"},"panels/sources/FilteredUISourceCodeListProvider.ts | noFilesFound":{"message":"No files found"},"panels/sources/FilteredUISourceCodeListProvider.ts | sIgnoreListed":{"message":"{PH1} (ignore listed)"},"panels/sources/GoToLineQuickOpen.ts | currentLineSTypeALineNumber":{"message":"Current line: {PH1}. Type a line number between 1 and {PH2} to navigate to."},"panels/sources/GoToLineQuickOpen.ts | currentPositionXsTypeAnOffset":{"message":"Current position: 0x{PH1}. Type an offset between 0x{PH2} and 0x{PH3} to navigate to."},"panels/sources/GoToLineQuickOpen.ts | goToLineS":{"message":"Go to line {PH1}."},"panels/sources/GoToLineQuickOpen.ts | goToLineSAndColumnS":{"message":"Go to line {PH1} and column {PH2}."},"panels/sources/GoToLineQuickOpen.ts | goToOffsetXs":{"message":"Go to offset 0x{PH1}."},"panels/sources/GoToLineQuickOpen.ts | noFileSelected":{"message":"No file selected."},"panels/sources/GoToLineQuickOpen.ts | noResultsFound":{"message":"No results found"},"panels/sources/GoToLineQuickOpen.ts | typeANumberToGoToThatLine":{"message":"Type a number to go to that line."},"panels/sources/InplaceFormatterEditorAction.ts | format":{"message":"Format"},"panels/sources/InplaceFormatterEditorAction.ts | formatS":{"message":"Format {PH1}"},"panels/sources/NavigatorView.ts | areYouSureYouWantToDeleteAll":{"message":"Are you sure you want to delete all overrides contained in this folder?"},"panels/sources/NavigatorView.ts | areYouSureYouWantToDeleteThis":{"message":"Are you sure you want to delete this file?"},"panels/sources/NavigatorView.ts | areYouSureYouWantToExcludeThis":{"message":"Are you sure you want to exclude this folder?"},"panels/sources/NavigatorView.ts | areYouSureYouWantToRemoveThis":{"message":"Are you sure you want to remove this folder?"},"panels/sources/NavigatorView.ts | authored":{"message":"Authored"},"panels/sources/NavigatorView.ts | authoredTooltip":{"message":"Contains original sources"},"panels/sources/NavigatorView.ts | delete":{"message":"Delete"},"panels/sources/NavigatorView.ts | deleteAllOverrides":{"message":"Delete all overrides"},"panels/sources/NavigatorView.ts | deployed":{"message":"Deployed"},"panels/sources/NavigatorView.ts | deployedTooltip":{"message":"Contains final sources the browser sees"},"panels/sources/NavigatorView.ts | excludeFolder":{"message":"Exclude folder"},"panels/sources/NavigatorView.ts | makeACopy":{"message":"Make a copy…"},"panels/sources/NavigatorView.ts | newFile":{"message":"New file"},"panels/sources/NavigatorView.ts | noDomain":{"message":"(no domain)"},"panels/sources/NavigatorView.ts | openFolder":{"message":"Open folder"},"panels/sources/NavigatorView.ts | removeFolderFromWorkspace":{"message":"Remove folder from workspace"},"panels/sources/NavigatorView.ts | rename":{"message":"Rename…"},"panels/sources/NavigatorView.ts | searchInAllFiles":{"message":"Search in all files"},"panels/sources/NavigatorView.ts | searchInFolder":{"message":"Search in folder"},"panels/sources/NavigatorView.ts | sFromSourceMap":{"message":"{PH1} (from source map)"},"panels/sources/NavigatorView.ts | sIgnoreListed":{"message":"{PH1} (ignore listed)"},"panels/sources/OutlineQuickOpen.ts | noFileSelected":{"message":"No file selected."},"panels/sources/OutlineQuickOpen.ts | noResultsFound":{"message":"No results found"},"panels/sources/OutlineQuickOpen.ts | openAJavascriptOrCssFileToSee":{"message":"Open a JavaScript or CSS file to see symbols"},"panels/sources/ProfilePlugin.ts | kb":{"message":"kB"},"panels/sources/ProfilePlugin.ts | mb":{"message":"MB"},"panels/sources/ProfilePlugin.ts | ms":{"message":"ms"},"panels/sources/ResourceOriginPlugin.ts | fromS":{"message":"(From {PH1})"},"panels/sources/ResourceOriginPlugin.ts | sourceMappedFromS":{"message":"(Source mapped from {PH1})"},"panels/sources/ScopeChainSidebarPane.ts | closure":{"message":"Closure"},"panels/sources/ScopeChainSidebarPane.ts | closureS":{"message":"Closure ({PH1})"},"panels/sources/ScopeChainSidebarPane.ts | exception":{"message":"Exception"},"panels/sources/ScopeChainSidebarPane.ts | loading":{"message":"Loading..."},"panels/sources/ScopeChainSidebarPane.ts | notPaused":{"message":"Not paused"},"panels/sources/ScopeChainSidebarPane.ts | noVariables":{"message":"No variables"},"panels/sources/ScopeChainSidebarPane.ts | returnValue":{"message":"Return value"},"panels/sources/ScopeChainSidebarPane.ts | revealInMemoryInspectorPanel":{"message":"Reveal in Memory Inspector panel"},"panels/sources/SnippetsPlugin.ts | ctrlenter":{"message":"Ctrl+Enter"},"panels/sources/SnippetsPlugin.ts | enter":{"message":"⌘+Enter"},"panels/sources/sources-meta.ts | activateBreakpoints":{"message":"Activate breakpoints"},"panels/sources/sources-meta.ts | addFolderToWorkspace":{"message":"Add folder to workspace"},"panels/sources/sources-meta.ts | addSelectedTextToWatches":{"message":"Add selected text to watches"},"panels/sources/sources-meta.ts | all":{"message":"All"},"panels/sources/sources-meta.ts | allowScrollingPastEndOfFile":{"message":"Allow scrolling past end of file"},"panels/sources/sources-meta.ts | autocompletion":{"message":"Autocompletion"},"panels/sources/sources-meta.ts | automaticallyRevealFilesIn":{"message":"Automatically reveal files in sidebar"},"panels/sources/sources-meta.ts | bracketMatching":{"message":"Bracket matching"},"panels/sources/sources-meta.ts | breakpoints":{"message":"Breakpoints"},"panels/sources/sources-meta.ts | closeAll":{"message":"Close All"},"panels/sources/sources-meta.ts | closeTheActiveTab":{"message":"Close the active tab"},"panels/sources/sources-meta.ts | codeFolding":{"message":"Code folding"},"panels/sources/sources-meta.ts | createNewSnippet":{"message":"Create new snippet"},"panels/sources/sources-meta.ts | deactivateBreakpoints":{"message":"Deactivate breakpoints"},"panels/sources/sources-meta.ts | decrementCssUnitBy":{"message":"Decrement CSS unit by {PH1}"},"panels/sources/sources-meta.ts | detectIndentation":{"message":"Detect indentation"},"panels/sources/sources-meta.ts | disableAutocompletion":{"message":"Disable autocompletion"},"panels/sources/sources-meta.ts | disableAutoFocusOnDebuggerPaused":{"message":"Do not focus Sources panel when triggering a breakpoint"},"panels/sources/sources-meta.ts | disableBracketMatching":{"message":"Disable bracket matching"},"panels/sources/sources-meta.ts | disableCodeFolding":{"message":"Disable code folding"},"panels/sources/sources-meta.ts | disableCssSourceMaps":{"message":"Disable CSS source maps"},"panels/sources/sources-meta.ts | disableJavascriptSourceMaps":{"message":"Disable JavaScript source maps"},"panels/sources/sources-meta.ts | disableTabMovesFocus":{"message":"Disable tab moves focus"},"panels/sources/sources-meta.ts | disableWasmAutoStepping":{"message":"Disable wasm auto-stepping"},"panels/sources/sources-meta.ts | disallowScrollingPastEndOfFile":{"message":"Disallow scrolling past end of file"},"panels/sources/sources-meta.ts | displayVariableValuesInlineWhile":{"message":"Display variable values inline while debugging"},"panels/sources/sources-meta.ts | doNotAutomaticallyRevealFilesIn":{"message":"Do not automatically reveal files in sidebar"},"panels/sources/sources-meta.ts | doNotDetectIndentation":{"message":"Do not detect indentation"},"panels/sources/sources-meta.ts | doNotDisplayVariableValuesInline":{"message":"Do not display variable values inline while debugging"},"panels/sources/sources-meta.ts | doNotSearchInAnonymousAndContent":{"message":"Do not search in anonymous and content scripts"},"panels/sources/sources-meta.ts | doNotShowWhitespaceCharacters":{"message":"Do not show whitespace characters"},"panels/sources/sources-meta.ts | enableAutocompletion":{"message":"Enable autocompletion"},"panels/sources/sources-meta.ts | enableAutoFocusOnDebuggerPaused":{"message":"Focus Sources panel when triggering a breakpoint"},"panels/sources/sources-meta.ts | enableBracketMatching":{"message":"Enable bracket matching"},"panels/sources/sources-meta.ts | enableCodeFolding":{"message":"Enable code folding"},"panels/sources/sources-meta.ts | enableCssSourceMaps":{"message":"Enable CSS source maps"},"panels/sources/sources-meta.ts | enableJavascriptSourceMaps":{"message":"Enable JavaScript source maps"},"panels/sources/sources-meta.ts | enableTabMovesFocus":{"message":"Enable tab moves focus"},"panels/sources/sources-meta.ts | enableWasmAutoStepping":{"message":"Enable wasm auto-stepping"},"panels/sources/sources-meta.ts | evaluateSelectedTextInConsole":{"message":"Evaluate selected text in console"},"panels/sources/sources-meta.ts | file":{"message":"File"},"panels/sources/sources-meta.ts | filesystem":{"message":"Filesystem"},"panels/sources/sources-meta.ts | goTo":{"message":"Go to"},"panels/sources/sources-meta.ts | goToAFunctionDeclarationruleSet":{"message":"Go to a function declaration/rule set"},"panels/sources/sources-meta.ts | goToLine":{"message":"Go to line"},"panels/sources/sources-meta.ts | incrementCssUnitBy":{"message":"Increment CSS unit by {PH1}"},"panels/sources/sources-meta.ts | jumpToNextEditingLocation":{"message":"Jump to next editing location"},"panels/sources/sources-meta.ts | jumpToPreviousEditingLocation":{"message":"Jump to previous editing location"},"panels/sources/sources-meta.ts | line":{"message":"Line"},"panels/sources/sources-meta.ts | nextCallFrame":{"message":"Next call frame"},"panels/sources/sources-meta.ts | nextEditorTab":{"message":"Next editor"},"panels/sources/sources-meta.ts | none":{"message":"None"},"panels/sources/sources-meta.ts | open":{"message":"Open"},"panels/sources/sources-meta.ts | pauseScriptExecution":{"message":"Pause script execution"},"panels/sources/sources-meta.ts | previousCallFrame":{"message":"Previous call frame"},"panels/sources/sources-meta.ts | previousEditorTab":{"message":"Previous editor"},"panels/sources/sources-meta.ts | quickSource":{"message":"Quick source"},"panels/sources/sources-meta.ts | rename":{"message":"Rename"},"panels/sources/sources-meta.ts | resumeScriptExecution":{"message":"Resume script execution"},"panels/sources/sources-meta.ts | runSnippet":{"message":"Run snippet"},"panels/sources/sources-meta.ts | save":{"message":"Save"},"panels/sources/sources-meta.ts | saveAll":{"message":"Save all"},"panels/sources/sources-meta.ts | scope":{"message":"Scope"},"panels/sources/sources-meta.ts | search":{"message":"Search"},"panels/sources/sources-meta.ts | searchInAnonymousAndContent":{"message":"Search in anonymous and content scripts"},"panels/sources/sources-meta.ts | showAllWhitespaceCharacters":{"message":"Show all whitespace characters"},"panels/sources/sources-meta.ts | showBreakpoints":{"message":"Show Breakpoints"},"panels/sources/sources-meta.ts | showFilesystem":{"message":"Show Filesystem"},"panels/sources/sources-meta.ts | showQuickSource":{"message":"Show Quick source"},"panels/sources/sources-meta.ts | showScope":{"message":"Show Scope"},"panels/sources/sources-meta.ts | showSearch":{"message":"Show Search"},"panels/sources/sources-meta.ts | showSnippets":{"message":"Show Snippets"},"panels/sources/sources-meta.ts | showSources":{"message":"Show Sources"},"panels/sources/sources-meta.ts | showThreads":{"message":"Show Threads"},"panels/sources/sources-meta.ts | showTrailingWhitespaceCharacters":{"message":"Show trailing whitespace characters"},"panels/sources/sources-meta.ts | showWatch":{"message":"Show Watch"},"panels/sources/sources-meta.ts | showWhitespaceCharacters":{"message":"Show whitespace characters:"},"panels/sources/sources-meta.ts | snippets":{"message":"Snippets"},"panels/sources/sources-meta.ts | sources":{"message":"Sources"},"panels/sources/sources-meta.ts | step":{"message":"Step"},"panels/sources/sources-meta.ts | stepIntoNextFunctionCall":{"message":"Step into next function call"},"panels/sources/sources-meta.ts | stepOutOfCurrentFunction":{"message":"Step out of current function"},"panels/sources/sources-meta.ts | stepOverNextFunctionCall":{"message":"Step over next function call"},"panels/sources/sources-meta.ts | switchFile":{"message":"Switch file"},"panels/sources/sources-meta.ts | symbol":{"message":"Symbol"},"panels/sources/sources-meta.ts | threads":{"message":"Threads"},"panels/sources/sources-meta.ts | toggleBreakpoint":{"message":"Toggle breakpoint"},"panels/sources/sources-meta.ts | toggleBreakpointEnabled":{"message":"Toggle breakpoint enabled"},"panels/sources/sources-meta.ts | toggleBreakpointInputWindow":{"message":"Toggle breakpoint input window"},"panels/sources/sources-meta.ts | toggleDebuggerSidebar":{"message":"Toggle debugger sidebar"},"panels/sources/sources-meta.ts | toggleNavigatorSidebar":{"message":"Toggle navigator sidebar"},"panels/sources/sources-meta.ts | trailing":{"message":"Trailing"},"panels/sources/sources-meta.ts | wasmAutoStepping":{"message":"When debugging wasm with debug information, do not pause on wasm bytecode if possible"},"panels/sources/sources-meta.ts | watch":{"message":"Watch"},"panels/sources/SourcesNavigator.ts | clearConfiguration":{"message":"Clear configuration"},"panels/sources/SourcesNavigator.ts | contentScriptsServedByExtensions":{"message":"Content scripts served by extensions appear here"},"panels/sources/SourcesNavigator.ts | createAndSaveCodeSnippetsFor":{"message":"Create and save code snippets for later reuse"},"panels/sources/SourcesNavigator.ts | createNewSnippet":{"message":"Create new snippet"},"panels/sources/SourcesNavigator.ts | learnMore":{"message":"Learn more"},"panels/sources/SourcesNavigator.ts | learnMoreAboutWorkspaces":{"message":"Learn more about Workspaces"},"panels/sources/SourcesNavigator.ts | newSnippet":{"message":"New snippet"},"panels/sources/SourcesNavigator.ts | overridePageAssetsWithFilesFromA":{"message":"Override page assets with files from a local folder"},"panels/sources/SourcesNavigator.ts | remove":{"message":"Remove"},"panels/sources/SourcesNavigator.ts | rename":{"message":"Rename…"},"panels/sources/SourcesNavigator.ts | run":{"message":"Run"},"panels/sources/SourcesNavigator.ts | saveAs":{"message":"Save as..."},"panels/sources/SourcesNavigator.ts | selectFolderForOverrides":{"message":"Select folder for overrides"},"panels/sources/SourcesNavigator.ts | syncChangesInDevtoolsWithThe":{"message":"Sync changes in DevTools with the local filesystem"},"panels/sources/SourcesPanel.ts | continueToHere":{"message":"Continue to here"},"panels/sources/SourcesPanel.ts | copyS":{"message":"Copy {PH1}"},"panels/sources/SourcesPanel.ts | copyStringAsJSLiteral":{"message":"Copy string as JavaScript literal"},"panels/sources/SourcesPanel.ts | copyStringAsJSONLiteral":{"message":"Copy string as JSON literal"},"panels/sources/SourcesPanel.ts | copyStringContents":{"message":"Copy string contents"},"panels/sources/SourcesPanel.ts | debuggerHidden":{"message":"Debugger sidebar hidden"},"panels/sources/SourcesPanel.ts | debuggerShown":{"message":"Debugger sidebar shown"},"panels/sources/SourcesPanel.ts | dropWorkspaceFolderHere":{"message":"Drop workspace folder here"},"panels/sources/SourcesPanel.ts | groupByAuthored":{"message":"Group by Authored/Deployed"},"panels/sources/SourcesPanel.ts | groupByFolder":{"message":"Group by folder"},"panels/sources/SourcesPanel.ts | hideDebugger":{"message":"Hide debugger"},"panels/sources/SourcesPanel.ts | hideIgnoreListed":{"message":"Hide ignore-listed sources"},"panels/sources/SourcesPanel.ts | hideNavigator":{"message":"Hide navigator"},"panels/sources/SourcesPanel.ts | moreOptions":{"message":"More options"},"panels/sources/SourcesPanel.ts | navigatorHidden":{"message":"Navigator sidebar hidden"},"panels/sources/SourcesPanel.ts | navigatorShown":{"message":"Navigator sidebar shown"},"panels/sources/SourcesPanel.ts | openInSourcesPanel":{"message":"Open in Sources panel"},"panels/sources/SourcesPanel.ts | pauseOnCaughtExceptions":{"message":"Pause on caught exceptions"},"panels/sources/SourcesPanel.ts | resumeWithAllPausesBlockedForMs":{"message":"Resume with all pauses blocked for 500 ms"},"panels/sources/SourcesPanel.ts | revealInSidebar":{"message":"Reveal in sidebar"},"panels/sources/SourcesPanel.ts | showDebugger":{"message":"Show debugger"},"panels/sources/SourcesPanel.ts | showFunctionDefinition":{"message":"Show function definition"},"panels/sources/SourcesPanel.ts | showNavigator":{"message":"Show navigator"},"panels/sources/SourcesPanel.ts | storeSAsGlobalVariable":{"message":"Store {PH1} as global variable"},"panels/sources/SourcesPanel.ts | terminateCurrentJavascriptCall":{"message":"Terminate current JavaScript call"},"panels/sources/SourcesView.ts | dropInAFolderToAddToWorkspace":{"message":"Drop in a folder to add to workspace"},"panels/sources/SourcesView.ts | openFile":{"message":"Open file"},"panels/sources/SourcesView.ts | runCommand":{"message":"Run command"},"panels/sources/SourcesView.ts | sourceViewActions":{"message":"Source View Actions"},"panels/sources/TabbedEditorContainer.ts | areYouSureYouWantToCloseUnsaved":{"message":"Are you sure you want to close unsaved file: {PH1}?"},"panels/sources/TabbedEditorContainer.ts | changesToThisFileWereNotSavedTo":{"message":"Changes to this file were not saved to file system."},"panels/sources/TabbedEditorContainer.ts | unableToLoadThisContent":{"message":"Unable to load this content."},"panels/sources/ThreadsSidebarPane.ts | paused":{"message":"paused"},"panels/sources/WatchExpressionsSidebarPane.ts | addPropertyPathToWatch":{"message":"Add property path to watch"},"panels/sources/WatchExpressionsSidebarPane.ts | addWatchExpression":{"message":"Add watch expression"},"panels/sources/WatchExpressionsSidebarPane.ts | copyValue":{"message":"Copy value"},"panels/sources/WatchExpressionsSidebarPane.ts | deleteAllWatchExpressions":{"message":"Delete all watch expressions"},"panels/sources/WatchExpressionsSidebarPane.ts | deleteWatchExpression":{"message":"Delete watch expression"},"panels/sources/WatchExpressionsSidebarPane.ts | notAvailable":{"message":""},"panels/sources/WatchExpressionsSidebarPane.ts | noWatchExpressions":{"message":"No watch expressions"},"panels/sources/WatchExpressionsSidebarPane.ts | refreshWatchExpressions":{"message":"Refresh watch expressions"},"panels/timeline/AppenderUtils.ts | sSelfS":{"message":"{PH1} (self {PH2})"},"panels/timeline/CountersGraph.ts | documents":{"message":"Documents"},"panels/timeline/CountersGraph.ts | gpuMemory":{"message":"GPU Memory"},"panels/timeline/CountersGraph.ts | jsHeap":{"message":"JS Heap"},"panels/timeline/CountersGraph.ts | listeners":{"message":"Listeners"},"panels/timeline/CountersGraph.ts | nodes":{"message":"Nodes"},"panels/timeline/CountersGraph.ts | ss":{"message":"[{PH1} – {PH2}]"},"panels/timeline/EventsTimelineTreeView.ts | all":{"message":"All"},"panels/timeline/EventsTimelineTreeView.ts | Dms":{"message":"{PH1} ms"},"panels/timeline/EventsTimelineTreeView.ts | durationFilter":{"message":"Duration filter"},"panels/timeline/EventsTimelineTreeView.ts | filterEventLog":{"message":"Filter event log"},"panels/timeline/EventsTimelineTreeView.ts | startTime":{"message":"Start Time"},"panels/timeline/GPUTrackAppender.ts | gpu":{"message":"GPU"},"panels/timeline/InteractionsTrackAppender.ts | interactions":{"message":"Interactions"},"panels/timeline/LayoutShiftsTrackAppender.ts | layoutShifts":{"message":"Layout Shifts"},"panels/timeline/timeline-meta.ts | hideChromeFrameInLayersView":{"message":"Hide chrome frame in Layers view"},"panels/timeline/timeline-meta.ts | javascriptProfiler":{"message":"JavaScript Profiler"},"panels/timeline/timeline-meta.ts | loadProfile":{"message":"Load profile…"},"panels/timeline/timeline-meta.ts | nextFrame":{"message":"Next frame"},"panels/timeline/timeline-meta.ts | nextRecording":{"message":"Next recording"},"panels/timeline/timeline-meta.ts | performance":{"message":"Performance"},"panels/timeline/timeline-meta.ts | previousFrame":{"message":"Previous frame"},"panels/timeline/timeline-meta.ts | previousRecording":{"message":"Previous recording"},"panels/timeline/timeline-meta.ts | record":{"message":"Record"},"panels/timeline/timeline-meta.ts | saveProfile":{"message":"Save profile…"},"panels/timeline/timeline-meta.ts | showJavascriptProfiler":{"message":"Show JavaScript Profiler"},"panels/timeline/timeline-meta.ts | showPerformance":{"message":"Show Performance"},"panels/timeline/timeline-meta.ts | showRecentTimelineSessions":{"message":"Show recent timeline sessions"},"panels/timeline/timeline-meta.ts | startProfilingAndReloadPage":{"message":"Start profiling and reload page"},"panels/timeline/timeline-meta.ts | startStopRecording":{"message":"Start/stop recording"},"panels/timeline/timeline-meta.ts | stop":{"message":"Stop"},"panels/timeline/TimelineController.ts | cpuProfileForATargetIsNot":{"message":"CPU profile for a target is not available."},"panels/timeline/TimelineController.ts | tracingNotSupported":{"message":"Performance trace recording not supported for this type of target"},"panels/timeline/TimelineDetailsView.ts | bottomup":{"message":"Bottom-Up"},"panels/timeline/TimelineDetailsView.ts | callTree":{"message":"Call Tree"},"panels/timeline/TimelineDetailsView.ts | estimated":{"message":"estimated"},"panels/timeline/TimelineDetailsView.ts | eventLog":{"message":"Event Log"},"panels/timeline/TimelineDetailsView.ts | layers":{"message":"Layers"},"panels/timeline/TimelineDetailsView.ts | learnMore":{"message":"Learn more"},"panels/timeline/TimelineDetailsView.ts | paintProfiler":{"message":"Paint Profiler"},"panels/timeline/TimelineDetailsView.ts | rangeSS":{"message":"Range: {PH1} – {PH2}"},"panels/timeline/TimelineDetailsView.ts | summary":{"message":"Summary"},"panels/timeline/TimelineDetailsView.ts | totalBlockingTimeSmss":{"message":"Total blocking time: {PH1}ms{PH2}"},"panels/timeline/TimelineEventOverview.ts | cpu":{"message":"CPU"},"panels/timeline/TimelineEventOverview.ts | heap":{"message":"HEAP"},"panels/timeline/TimelineEventOverview.ts | net":{"message":"NET"},"panels/timeline/TimelineEventOverview.ts | sSDash":{"message":"{PH1} – {PH2}"},"panels/timeline/TimelineFlameChartDataProvider.ts | animation":{"message":"Animation"},"panels/timeline/TimelineFlameChartDataProvider.ts | droppedFrame":{"message":"Dropped Frame"},"panels/timeline/TimelineFlameChartDataProvider.ts | frame":{"message":"Frame"},"panels/timeline/TimelineFlameChartDataProvider.ts | frames":{"message":"Frames"},"panels/timeline/TimelineFlameChartDataProvider.ts | frameS":{"message":"Frame — {PH1}"},"panels/timeline/TimelineFlameChartDataProvider.ts | idleFrame":{"message":"Idle Frame"},"panels/timeline/TimelineFlameChartDataProvider.ts | longFrame":{"message":"Long frame"},"panels/timeline/TimelineFlameChartDataProvider.ts | main":{"message":"Main"},"panels/timeline/TimelineFlameChartDataProvider.ts | mainS":{"message":"Main — {PH1}"},"panels/timeline/TimelineFlameChartDataProvider.ts | onIgnoreList":{"message":"On ignore list"},"panels/timeline/TimelineFlameChartDataProvider.ts | partiallyPresentedFrame":{"message":"Partially Presented Frame"},"panels/timeline/TimelineFlameChartDataProvider.ts | raster":{"message":"Raster"},"panels/timeline/TimelineFlameChartDataProvider.ts | rasterizerThreadS":{"message":"Rasterizer Thread {PH1}"},"panels/timeline/TimelineFlameChartDataProvider.ts | sSelfS":{"message":"{PH1} (self {PH2})"},"panels/timeline/TimelineFlameChartDataProvider.ts | subframe":{"message":"Subframe"},"panels/timeline/TimelineFlameChartDataProvider.ts | thread":{"message":"Thread"},"panels/timeline/TimelineFlameChartNetworkDataProvider.ts | network":{"message":"Network"},"panels/timeline/TimelineFlameChartView.ts | sAtS":{"message":"{PH1} at {PH2}"},"panels/timeline/TimelineHistoryManager.ts | currentSessionSS":{"message":"Current Session: {PH1}. {PH2}"},"panels/timeline/TimelineHistoryManager.ts | moments":{"message":"moments"},"panels/timeline/TimelineHistoryManager.ts | noRecordings":{"message":"(no recordings)"},"panels/timeline/TimelineHistoryManager.ts | sAgo":{"message":"({PH1} ago)"},"panels/timeline/TimelineHistoryManager.ts | sD":{"message":"{PH1} #{PH2}"},"panels/timeline/TimelineHistoryManager.ts | selectTimelineSession":{"message":"Select Timeline Session"},"panels/timeline/TimelineHistoryManager.ts | sH":{"message":"{PH1} h"},"panels/timeline/TimelineHistoryManager.ts | sM":{"message":"{PH1} m"},"panels/timeline/TimelineLoader.ts | legacyTimelineFormatIsNot":{"message":"Legacy Timeline format is not supported."},"panels/timeline/TimelineLoader.ts | malformedCpuProfileFormat":{"message":"Malformed CPU profile format"},"panels/timeline/TimelineLoader.ts | malformedTimelineDataS":{"message":"Malformed timeline data: {PH1}"},"panels/timeline/TimelineLoader.ts | malformedTimelineDataUnknownJson":{"message":"Malformed timeline data: Unknown JSON format"},"panels/timeline/TimelineLoader.ts | malformedTimelineInputWrongJson":{"message":"Malformed timeline input, wrong JSON brackets balance"},"panels/timeline/TimelinePanel.ts | afterRecordingSelectAnAreaOf":{"message":"After recording, select an area of interest in the overview by dragging. Then, zoom and pan the timeline with the mousewheel or {PH1} keys. {PH2}"},"panels/timeline/TimelinePanel.ts | bufferUsage":{"message":"Buffer usage"},"panels/timeline/TimelinePanel.ts | capturesAdvancedPaint":{"message":"Captures advanced paint instrumentation, introduces significant performance overhead"},"panels/timeline/TimelinePanel.ts | captureScreenshots":{"message":"Capture screenshots"},"panels/timeline/TimelinePanel.ts | captureSettings":{"message":"Capture settings"},"panels/timeline/TimelinePanel.ts | clear":{"message":"Clear"},"panels/timeline/TimelinePanel.ts | clickTheRecordButtonSOrHitSTo":{"message":"Click the record button {PH1} or hit {PH2} to start a new recording."},"panels/timeline/TimelinePanel.ts | clickTheReloadButtonSOrHitSTo":{"message":"Click the reload button {PH1} or hit {PH2} to record the page load."},"panels/timeline/TimelinePanel.ts | close":{"message":"Close"},"panels/timeline/TimelinePanel.ts | couldNotStart":{"message":"Could not start recording, please try again later"},"panels/timeline/TimelinePanel.ts | cpu":{"message":"CPU:"},"panels/timeline/TimelinePanel.ts | CpuThrottlingIsEnabled":{"message":"- CPU throttling is enabled"},"panels/timeline/TimelinePanel.ts | description":{"message":"Description"},"panels/timeline/TimelinePanel.ts | disableJavascriptSamples":{"message":"Disable JavaScript samples"},"panels/timeline/TimelinePanel.ts | disablesJavascriptSampling":{"message":"Disables JavaScript sampling, reduces overhead when running against mobile devices"},"panels/timeline/TimelinePanel.ts | dropTimelineFileOrUrlHere":{"message":"Drop timeline file or URL here"},"panels/timeline/TimelinePanel.ts | enableAdvancedPaint":{"message":"Enable advanced paint instrumentation (slow)"},"panels/timeline/TimelinePanel.ts | failedToSaveTimelineSS":{"message":"Failed to save timeline: {PH1} ({PH2})"},"panels/timeline/TimelinePanel.ts | HardwareConcurrencyIsEnabled":{"message":"- Hardware concurrency override is enabled"},"panels/timeline/TimelinePanel.ts | initializingProfiler":{"message":"Initializing profiler…"},"panels/timeline/TimelinePanel.ts | JavascriptSamplingIsDisabled":{"message":"- JavaScript sampling is disabled"},"panels/timeline/TimelinePanel.ts | learnmore":{"message":"Learn more"},"panels/timeline/TimelinePanel.ts | loadingProfile":{"message":"Loading profile…"},"panels/timeline/TimelinePanel.ts | loadProfile":{"message":"Load profile…"},"panels/timeline/TimelinePanel.ts | memory":{"message":"Memory"},"panels/timeline/TimelinePanel.ts | network":{"message":"Network:"},"panels/timeline/TimelinePanel.ts | networkConditions":{"message":"Network conditions"},"panels/timeline/TimelinePanel.ts | NetworkThrottlingIsEnabled":{"message":"- Network throttling is enabled"},"panels/timeline/TimelinePanel.ts | processingProfile":{"message":"Processing profile…"},"panels/timeline/TimelinePanel.ts | profiling":{"message":"Profiling…"},"panels/timeline/TimelinePanel.ts | received":{"message":"Received"},"panels/timeline/TimelinePanel.ts | recordingFailed":{"message":"Recording failed"},"panels/timeline/TimelinePanel.ts | saveProfile":{"message":"Save profile…"},"panels/timeline/TimelinePanel.ts | screenshots":{"message":"Screenshots"},"panels/timeline/TimelinePanel.ts | showMemoryTimeline":{"message":"Show memory timeline"},"panels/timeline/TimelinePanel.ts | SignificantOverheadDueToPaint":{"message":"- Significant overhead due to paint instrumentation"},"panels/timeline/TimelinePanel.ts | ssec":{"message":"{PH1} sec"},"panels/timeline/TimelinePanel.ts | status":{"message":"Status"},"panels/timeline/TimelinePanel.ts | stop":{"message":"Stop"},"panels/timeline/TimelinePanel.ts | stoppingTimeline":{"message":"Stopping timeline…"},"panels/timeline/TimelinePanel.ts | time":{"message":"Time"},"panels/timeline/TimelinePanel.ts | wasd":{"message":"WASD"},"panels/timeline/TimelineTreeView.ts | activity":{"message":"Activity"},"panels/timeline/TimelineTreeView.ts | chromeExtensionsOverhead":{"message":"[Chrome extensions overhead]"},"panels/timeline/TimelineTreeView.ts | filter":{"message":"Filter"},"panels/timeline/TimelineTreeView.ts | filterBottomup":{"message":"Filter bottom-up"},"panels/timeline/TimelineTreeView.ts | filterCallTree":{"message":"Filter call tree"},"panels/timeline/TimelineTreeView.ts | fms":{"message":"{PH1} ms"},"panels/timeline/TimelineTreeView.ts | groupBy":{"message":"Group by"},"panels/timeline/TimelineTreeView.ts | groupByActivity":{"message":"Group by Activity"},"panels/timeline/TimelineTreeView.ts | groupByCategory":{"message":"Group by Category"},"panels/timeline/TimelineTreeView.ts | groupByDomain":{"message":"Group by Domain"},"panels/timeline/TimelineTreeView.ts | groupByFrame":{"message":"Group by Frame"},"panels/timeline/TimelineTreeView.ts | groupBySubdomain":{"message":"Group by Subdomain"},"panels/timeline/TimelineTreeView.ts | groupByUrl":{"message":"Group by URL"},"panels/timeline/TimelineTreeView.ts | heaviestStack":{"message":"Heaviest stack"},"panels/timeline/TimelineTreeView.ts | heaviestStackHidden":{"message":"Heaviest stack sidebar hidden"},"panels/timeline/TimelineTreeView.ts | heaviestStackShown":{"message":"Heaviest stack sidebar shown"},"panels/timeline/TimelineTreeView.ts | hideHeaviestStack":{"message":"Hide Heaviest stack"},"panels/timeline/TimelineTreeView.ts | javascript":{"message":"JavaScript"},"panels/timeline/TimelineTreeView.ts | noGrouping":{"message":"No Grouping"},"panels/timeline/TimelineTreeView.ts | notOptimizedS":{"message":"Not optimized: {PH1}"},"panels/timeline/TimelineTreeView.ts | page":{"message":"Page"},"panels/timeline/TimelineTreeView.ts | percentPlaceholder":{"message":"{PH1} %"},"panels/timeline/TimelineTreeView.ts | performance":{"message":"Performance"},"panels/timeline/TimelineTreeView.ts | selectItemForDetails":{"message":"Select item for details."},"panels/timeline/TimelineTreeView.ts | selfTime":{"message":"Self Time"},"panels/timeline/TimelineTreeView.ts | showHeaviestStack":{"message":"Show Heaviest stack"},"panels/timeline/TimelineTreeView.ts | timelineStack":{"message":"Timeline Stack"},"panels/timeline/TimelineTreeView.ts | totalTime":{"message":"Total Time"},"panels/timeline/TimelineTreeView.ts | unattributed":{"message":"[unattributed]"},"panels/timeline/TimelineTreeView.ts | vRuntime":{"message":"[V8 Runtime]"},"panels/timeline/TimelineUIUtils.ts | aggregatedTime":{"message":"Aggregated Time"},"panels/timeline/TimelineUIUtils.ts | allottedTime":{"message":"Allotted Time"},"panels/timeline/TimelineUIUtils.ts | animation":{"message":"Animation"},"panels/timeline/TimelineUIUtils.ts | animationFrameFired":{"message":"Animation Frame Fired"},"panels/timeline/TimelineUIUtils.ts | animationFrameRequested":{"message":"Animation Frame Requested"},"panels/timeline/TimelineUIUtils.ts | async":{"message":"Async"},"panels/timeline/TimelineUIUtils.ts | asyncTask":{"message":"Async Task"},"panels/timeline/TimelineUIUtils.ts | cachedWasmModule":{"message":"Cached Wasm Module"},"panels/timeline/TimelineUIUtils.ts | cacheModule":{"message":"Cache Module Code"},"panels/timeline/TimelineUIUtils.ts | cacheScript":{"message":"Cache Script Code"},"panels/timeline/TimelineUIUtils.ts | callbackFunction":{"message":"Callback Function"},"panels/timeline/TimelineUIUtils.ts | callbackId":{"message":"Callback ID"},"panels/timeline/TimelineUIUtils.ts | callStacks":{"message":"Call Stacks"},"panels/timeline/TimelineUIUtils.ts | cancelAnimationFrame":{"message":"Cancel Animation Frame"},"panels/timeline/TimelineUIUtils.ts | cancelIdleCallback":{"message":"Cancel Idle Callback"},"panels/timeline/TimelineUIUtils.ts | changedAttributeToSs":{"message":"(changed attribute to \"{PH1}\"{PH2})"},"panels/timeline/TimelineUIUtils.ts | changedClassToSs":{"message":"(changed class to \"{PH1}\"{PH2})"},"panels/timeline/TimelineUIUtils.ts | changedIdToSs":{"message":"(changed id to \"{PH1}\"{PH2})"},"panels/timeline/TimelineUIUtils.ts | changedPesudoToSs":{"message":"(changed pseudo to \"{PH1}\"{PH2})"},"panels/timeline/TimelineUIUtils.ts | changedSs":{"message":"(changed \"{PH1}\"{PH2})"},"panels/timeline/TimelineUIUtils.ts | collected":{"message":"Collected"},"panels/timeline/TimelineUIUtils.ts | commit":{"message":"Commit"},"panels/timeline/TimelineUIUtils.ts | compilationCacheSize":{"message":"Compilation cache size"},"panels/timeline/TimelineUIUtils.ts | compilationCacheStatus":{"message":"Compilation cache status"},"panels/timeline/TimelineUIUtils.ts | compile":{"message":"Compile"},"panels/timeline/TimelineUIUtils.ts | compileCode":{"message":"Compile Code"},"panels/timeline/TimelineUIUtils.ts | compiledWasmModule":{"message":"Compiled Wasm Module"},"panels/timeline/TimelineUIUtils.ts | compileModule":{"message":"Compile Module"},"panels/timeline/TimelineUIUtils.ts | compileScript":{"message":"Compile Script"},"panels/timeline/TimelineUIUtils.ts | compositeLayers":{"message":"Composite Layers"},"panels/timeline/TimelineUIUtils.ts | computeIntersections":{"message":"Compute Intersections"},"panels/timeline/TimelineUIUtils.ts | consoleTime":{"message":"Console Time"},"panels/timeline/TimelineUIUtils.ts | consumedCacheSize":{"message":"Consumed Cache Size"},"panels/timeline/TimelineUIUtils.ts | cpuTime":{"message":"CPU time"},"panels/timeline/TimelineUIUtils.ts | createWebsocket":{"message":"Create WebSocket"},"panels/timeline/TimelineUIUtils.ts | cumulativeLayoutShifts":{"message":"Cumulative Layout Shifts"},"panels/timeline/TimelineUIUtils.ts | cumulativeScore":{"message":"Cumulative Score"},"panels/timeline/TimelineUIUtils.ts | currentClusterId":{"message":"Current Cluster ID"},"panels/timeline/TimelineUIUtils.ts | currentClusterScore":{"message":"Current Cluster Score"},"panels/timeline/TimelineUIUtils.ts | decodedBody":{"message":"Decoded Body"},"panels/timeline/TimelineUIUtils.ts | decrypt":{"message":"Decrypt"},"panels/timeline/TimelineUIUtils.ts | decryptReply":{"message":"Decrypt Reply"},"panels/timeline/TimelineUIUtils.ts | deserializeCodeCache":{"message":"Deserialize Code Cache"},"panels/timeline/TimelineUIUtils.ts | destroyWebsocket":{"message":"Destroy WebSocket"},"panels/timeline/TimelineUIUtils.ts | details":{"message":"Details"},"panels/timeline/TimelineUIUtils.ts | digest":{"message":"Digest"},"panels/timeline/TimelineUIUtils.ts | digestReply":{"message":"Digest Reply"},"panels/timeline/TimelineUIUtils.ts | dimensions":{"message":"Dimensions"},"panels/timeline/TimelineUIUtils.ts | domcontentloadedEvent":{"message":"DOMContentLoaded Event"},"panels/timeline/TimelineUIUtils.ts | domGc":{"message":"DOM GC"},"panels/timeline/TimelineUIUtils.ts | drawFrame":{"message":"Draw Frame"},"panels/timeline/TimelineUIUtils.ts | duration":{"message":"Duration"},"panels/timeline/TimelineUIUtils.ts | eagerCompile":{"message":"Compiling all functions eagerly"},"panels/timeline/TimelineUIUtils.ts | elementsAffected":{"message":"Elements Affected"},"panels/timeline/TimelineUIUtils.ts | embedderCallback":{"message":"Embedder Callback"},"panels/timeline/TimelineUIUtils.ts | emptyPlaceholder":{"message":"{PH1}"},"panels/timeline/TimelineUIUtils.ts | emptyPlaceholderColon":{"message":": {PH1}"},"panels/timeline/TimelineUIUtils.ts | encodedData":{"message":"Encoded Data"},"panels/timeline/TimelineUIUtils.ts | encrypt":{"message":"Encrypt"},"panels/timeline/TimelineUIUtils.ts | encryptReply":{"message":"Encrypt Reply"},"panels/timeline/TimelineUIUtils.ts | evaluateModule":{"message":"Evaluate Module"},"panels/timeline/TimelineUIUtils.ts | evaluateScript":{"message":"Evaluate Script"},"panels/timeline/TimelineUIUtils.ts | event":{"message":"Event"},"panels/timeline/TimelineUIUtils.ts | eventTiming":{"message":"Event Timing"},"panels/timeline/TimelineUIUtils.ts | evolvedClsLink":{"message":"evolved"},"panels/timeline/TimelineUIUtils.ts | experience":{"message":"Experience"},"panels/timeline/TimelineUIUtils.ts | failedToLoadScriptFromCache":{"message":"failed to load script from cache"},"panels/timeline/TimelineUIUtils.ts | finishLoading":{"message":"Finish Loading"},"panels/timeline/TimelineUIUtils.ts | fireIdleCallback":{"message":"Fire Idle Callback"},"panels/timeline/TimelineUIUtils.ts | firstContentfulPaint":{"message":"First Contentful Paint"},"panels/timeline/TimelineUIUtils.ts | firstInvalidated":{"message":"First Invalidated"},"panels/timeline/TimelineUIUtils.ts | firstLayoutInvalidation":{"message":"First Layout Invalidation"},"panels/timeline/TimelineUIUtils.ts | firstPaint":{"message":"First Paint"},"panels/timeline/TimelineUIUtils.ts | forcedReflow":{"message":"Forced reflow"},"panels/timeline/TimelineUIUtils.ts | frame":{"message":"Frame"},"panels/timeline/TimelineUIUtils.ts | frameStart":{"message":"Frame Start"},"panels/timeline/TimelineUIUtils.ts | frameStartedLoading":{"message":"Frame Started Loading"},"panels/timeline/TimelineUIUtils.ts | frameStartMainThread":{"message":"Frame Start (main thread)"},"panels/timeline/TimelineUIUtils.ts | FromCache":{"message":" (from cache)"},"panels/timeline/TimelineUIUtils.ts | FromMemoryCache":{"message":" (from memory cache)"},"panels/timeline/TimelineUIUtils.ts | FromPush":{"message":" (from push)"},"panels/timeline/TimelineUIUtils.ts | FromServiceWorker":{"message":" (from service worker)"},"panels/timeline/TimelineUIUtils.ts | function":{"message":"Function"},"panels/timeline/TimelineUIUtils.ts | functionCall":{"message":"Function Call"},"panels/timeline/TimelineUIUtils.ts | gcEvent":{"message":"GC Event"},"panels/timeline/TimelineUIUtils.ts | gpu":{"message":"GPU"},"panels/timeline/TimelineUIUtils.ts | hadRecentInput":{"message":"Had recent input"},"panels/timeline/TimelineUIUtils.ts | handlerTookS":{"message":"Handler took {PH1}"},"panels/timeline/TimelineUIUtils.ts | hitTest":{"message":"Hit Test"},"panels/timeline/TimelineUIUtils.ts | idle":{"message":"Idle"},"panels/timeline/TimelineUIUtils.ts | idleCallbackExecutionExtended":{"message":"Idle callback execution extended beyond deadline by {PH1}"},"panels/timeline/TimelineUIUtils.ts | idleCallbackRequested":{"message":"Idle Callback Requested"},"panels/timeline/TimelineUIUtils.ts | imageDecode":{"message":"Image Decode"},"panels/timeline/TimelineUIUtils.ts | imageResize":{"message":"Image Resize"},"panels/timeline/TimelineUIUtils.ts | imageUrl":{"message":"Image URL"},"panels/timeline/TimelineUIUtils.ts | initiator":{"message":"Initiator"},"panels/timeline/TimelineUIUtils.ts | installTimer":{"message":"Install Timer"},"panels/timeline/TimelineUIUtils.ts | interactionID":{"message":"ID"},"panels/timeline/TimelineUIUtils.ts | invalidateLayout":{"message":"Invalidate Layout"},"panels/timeline/TimelineUIUtils.ts | invalidations":{"message":"Invalidations"},"panels/timeline/TimelineUIUtils.ts | invokedByTimeout":{"message":"Invoked by Timeout"},"panels/timeline/TimelineUIUtils.ts | jank":{"message":"jank"},"panels/timeline/TimelineUIUtils.ts | jsFrame":{"message":"JS Frame"},"panels/timeline/TimelineUIUtils.ts | jsIdleFrame":{"message":"JS Idle Frame"},"panels/timeline/TimelineUIUtils.ts | jsRoot":{"message":"JS Root"},"panels/timeline/TimelineUIUtils.ts | jsSystemFrame":{"message":"JS System Frame"},"panels/timeline/TimelineUIUtils.ts | largestContentfulPaint":{"message":"Largest Contentful Paint"},"panels/timeline/TimelineUIUtils.ts | layerize":{"message":"Layerize"},"panels/timeline/TimelineUIUtils.ts | layerRoot":{"message":"Layer Root"},"panels/timeline/TimelineUIUtils.ts | layerTree":{"message":"Layer tree"},"panels/timeline/TimelineUIUtils.ts | layout":{"message":"Layout"},"panels/timeline/TimelineUIUtils.ts | layoutForced":{"message":"Layout Forced"},"panels/timeline/TimelineUIUtils.ts | layoutInvalidations":{"message":"Layout Invalidations"},"panels/timeline/TimelineUIUtils.ts | layoutRoot":{"message":"Layout root"},"panels/timeline/TimelineUIUtils.ts | layoutShift":{"message":"Layout Shift"},"panels/timeline/TimelineUIUtils.ts | learnMore":{"message":"Learn more"},"panels/timeline/TimelineUIUtils.ts | loadFromCache":{"message":"load from cache"},"panels/timeline/TimelineUIUtils.ts | loading":{"message":"Loading"},"panels/timeline/TimelineUIUtils.ts | location":{"message":"Location"},"panels/timeline/TimelineUIUtils.ts | longInteractionINP":{"message":"Long interaction"},"panels/timeline/TimelineUIUtils.ts | longTask":{"message":"Long task"},"panels/timeline/TimelineUIUtils.ts | majorGc":{"message":"Major GC"},"panels/timeline/TimelineUIUtils.ts | message":{"message":"Message"},"panels/timeline/TimelineUIUtils.ts | mimeType":{"message":"Mime Type"},"panels/timeline/TimelineUIUtils.ts | mimeTypeCaps":{"message":"MIME Type"},"panels/timeline/TimelineUIUtils.ts | minorGc":{"message":"Minor GC"},"panels/timeline/TimelineUIUtils.ts | module":{"message":"Module"},"panels/timeline/TimelineUIUtils.ts | movedFrom":{"message":"Moved from"},"panels/timeline/TimelineUIUtils.ts | movedTo":{"message":"Moved to"},"panels/timeline/TimelineUIUtils.ts | networkRequest":{"message":"Network request"},"panels/timeline/TimelineUIUtils.ts | networkTransfer":{"message":"network transfer"},"panels/timeline/TimelineUIUtils.ts | no":{"message":"No"},"panels/timeline/TimelineUIUtils.ts | node":{"message":"Node:"},"panels/timeline/TimelineUIUtils.ts | nodes":{"message":"Nodes:"},"panels/timeline/TimelineUIUtils.ts | nodesThatNeedLayout":{"message":"Nodes That Need Layout"},"panels/timeline/TimelineUIUtils.ts | notOptimized":{"message":"Not optimized"},"panels/timeline/TimelineUIUtils.ts | onloadEvent":{"message":"Onload Event"},"panels/timeline/TimelineUIUtils.ts | optimizeCode":{"message":"Optimize Code"},"panels/timeline/TimelineUIUtils.ts | other":{"message":"Other"},"panels/timeline/TimelineUIUtils.ts | otherInvalidations":{"message":"Other Invalidations"},"panels/timeline/TimelineUIUtils.ts | ownerElement":{"message":"Owner Element"},"panels/timeline/TimelineUIUtils.ts | paint":{"message":"Paint"},"panels/timeline/TimelineUIUtils.ts | paintImage":{"message":"Paint Image"},"panels/timeline/TimelineUIUtils.ts | painting":{"message":"Painting"},"panels/timeline/TimelineUIUtils.ts | paintProfiler":{"message":"Paint Profiler"},"panels/timeline/TimelineUIUtils.ts | paintSetup":{"message":"Paint Setup"},"panels/timeline/TimelineUIUtils.ts | parse":{"message":"Parse"},"panels/timeline/TimelineUIUtils.ts | parseAndCompile":{"message":"Parse and Compile"},"panels/timeline/TimelineUIUtils.ts | parseHtml":{"message":"Parse HTML"},"panels/timeline/TimelineUIUtils.ts | parseStylesheet":{"message":"Parse Stylesheet"},"panels/timeline/TimelineUIUtils.ts | pendingFor":{"message":"Pending for"},"panels/timeline/TimelineUIUtils.ts | prePaint":{"message":"Pre-Paint"},"panels/timeline/TimelineUIUtils.ts | preview":{"message":"Preview"},"panels/timeline/TimelineUIUtils.ts | priority":{"message":"Priority"},"panels/timeline/TimelineUIUtils.ts | producedCacheSize":{"message":"Produced Cache Size"},"panels/timeline/TimelineUIUtils.ts | profilingOverhead":{"message":"Profiling Overhead"},"panels/timeline/TimelineUIUtils.ts | range":{"message":"Range"},"panels/timeline/TimelineUIUtils.ts | rasterizePaint":{"message":"Rasterize Paint"},"panels/timeline/TimelineUIUtils.ts | recalculateStyle":{"message":"Recalculate Style"},"panels/timeline/TimelineUIUtils.ts | recalculationForced":{"message":"Recalculation Forced"},"panels/timeline/TimelineUIUtils.ts | receiveData":{"message":"Receive Data"},"panels/timeline/TimelineUIUtils.ts | receiveResponse":{"message":"Receive Response"},"panels/timeline/TimelineUIUtils.ts | receiveWebsocketHandshake":{"message":"Receive WebSocket Handshake"},"panels/timeline/TimelineUIUtils.ts | recurringHandlerTookS":{"message":"Recurring handler took {PH1}"},"panels/timeline/TimelineUIUtils.ts | relatedNode":{"message":"Related Node"},"panels/timeline/TimelineUIUtils.ts | removeTimer":{"message":"Remove Timer"},"panels/timeline/TimelineUIUtils.ts | rendering":{"message":"Rendering"},"panels/timeline/TimelineUIUtils.ts | repeats":{"message":"Repeats"},"panels/timeline/TimelineUIUtils.ts | requestAnimationFrame":{"message":"Request Animation Frame"},"panels/timeline/TimelineUIUtils.ts | requestIdleCallback":{"message":"Request Idle Callback"},"panels/timeline/TimelineUIUtils.ts | requestMainThreadFrame":{"message":"Request Main Thread Frame"},"panels/timeline/TimelineUIUtils.ts | requestMethod":{"message":"Request Method"},"panels/timeline/TimelineUIUtils.ts | resource":{"message":"Resource"},"panels/timeline/TimelineUIUtils.ts | reveal":{"message":"Reveal"},"panels/timeline/TimelineUIUtils.ts | runMicrotasks":{"message":"Run Microtasks"},"panels/timeline/TimelineUIUtils.ts | sAndS":{"message":"{PH1} and {PH2}"},"panels/timeline/TimelineUIUtils.ts | sAndSOther":{"message":"{PH1}, {PH2}, and 1 other"},"panels/timeline/TimelineUIUtils.ts | sAtS":{"message":"{PH1} at {PH2}"},"panels/timeline/TimelineUIUtils.ts | sAtSParentheses":{"message":"{PH1} (at {PH2})"},"panels/timeline/TimelineUIUtils.ts | sBytes":{"message":"{n, plural, =1 {# Byte} other {# Bytes}}"},"panels/timeline/TimelineUIUtils.ts | scheduleStyleRecalculation":{"message":"Schedule Style Recalculation"},"panels/timeline/TimelineUIUtils.ts | sChildren":{"message":"{PH1} (children)"},"panels/timeline/TimelineUIUtils.ts | sCLSInformation":{"message":"{PH1} can result in poor user experiences. It has recently {PH2}."},"panels/timeline/TimelineUIUtils.ts | sCollected":{"message":"{PH1} collected"},"panels/timeline/TimelineUIUtils.ts | score":{"message":"Score"},"panels/timeline/TimelineUIUtils.ts | script":{"message":"Script"},"panels/timeline/TimelineUIUtils.ts | scripting":{"message":"Scripting"},"panels/timeline/TimelineUIUtils.ts | scriptLoadedFromCache":{"message":"script loaded from cache"},"panels/timeline/TimelineUIUtils.ts | scriptNotEligible":{"message":"script not eligible"},"panels/timeline/TimelineUIUtils.ts | scroll":{"message":"Scroll"},"panels/timeline/TimelineUIUtils.ts | selfTime":{"message":"Self Time"},"panels/timeline/TimelineUIUtils.ts | sendRequest":{"message":"Send Request"},"panels/timeline/TimelineUIUtils.ts | sendWebsocketHandshake":{"message":"Send WebSocket Handshake"},"panels/timeline/TimelineUIUtils.ts | sForS":{"message":"{PH1} for {PH2}"},"panels/timeline/TimelineUIUtils.ts | show":{"message":"Show"},"panels/timeline/TimelineUIUtils.ts | sign":{"message":"Sign"},"panels/timeline/TimelineUIUtils.ts | signReply":{"message":"Sign Reply"},"panels/timeline/TimelineUIUtils.ts | sIsALikelyPerformanceBottleneck":{"message":"{PH1} is a likely performance bottleneck."},"panels/timeline/TimelineUIUtils.ts | sIsLikelyPoorPageResponsiveness":{"message":"{PH1} is indicating poor page responsiveness."},"panels/timeline/TimelineUIUtils.ts | size":{"message":"Size"},"panels/timeline/TimelineUIUtils.ts | sLongFrameTimesAreAnIndicationOf":{"message":"{PH1}. Long frame times are an indication of {PH2}"},"panels/timeline/TimelineUIUtils.ts | sOfS":{"message":"{PH1} of {PH2}"},"panels/timeline/TimelineUIUtils.ts | sS":{"message":"{PH1}: {PH2}"},"panels/timeline/TimelineUIUtils.ts | sSAndSOthers":{"message":"{PH1}, {PH2}, and {PH3} others"},"panels/timeline/TimelineUIUtils.ts | sSCurlyBrackets":{"message":"({PH1}, {PH2})"},"panels/timeline/TimelineUIUtils.ts | sSDimensions":{"message":"{PH1} × {PH2}"},"panels/timeline/TimelineUIUtils.ts | sSDot":{"message":"{PH1}. {PH2}"},"panels/timeline/TimelineUIUtils.ts | sSelf":{"message":"{PH1} (self)"},"panels/timeline/TimelineUIUtils.ts | sSs":{"message":"{PH1} [{PH2}…{PH3}]"},"panels/timeline/TimelineUIUtils.ts | sSSquareBrackets":{"message":"{PH1} [{PH2}…]"},"panels/timeline/TimelineUIUtils.ts | SSSResourceLoading":{"message":" ({PH1} {PH2} + {PH3} resource loading)"},"panels/timeline/TimelineUIUtils.ts | stackTrace":{"message":"Stack Trace"},"panels/timeline/TimelineUIUtils.ts | stackTraceColon":{"message":"Stack trace:"},"panels/timeline/TimelineUIUtils.ts | state":{"message":"State"},"panels/timeline/TimelineUIUtils.ts | statusCode":{"message":"Status Code"},"panels/timeline/TimelineUIUtils.ts | sTookS":{"message":"{PH1} took {PH2}."},"panels/timeline/TimelineUIUtils.ts | streamed":{"message":"Streamed"},"panels/timeline/TimelineUIUtils.ts | streamingCompileTask":{"message":"Streaming Compile Task"},"panels/timeline/TimelineUIUtils.ts | streamingWasmResponse":{"message":"Streaming Wasm Response"},"panels/timeline/TimelineUIUtils.ts | styleInvalidations":{"message":"Style Invalidations"},"panels/timeline/TimelineUIUtils.ts | stylesheetUrl":{"message":"Stylesheet URL"},"panels/timeline/TimelineUIUtils.ts | system":{"message":"System"},"panels/timeline/TimelineUIUtils.ts | task":{"message":"Task"},"panels/timeline/TimelineUIUtils.ts | timeout":{"message":"Timeout"},"panels/timeline/TimelineUIUtils.ts | timerFired":{"message":"Timer Fired"},"panels/timeline/TimelineUIUtils.ts | timerId":{"message":"Timer ID"},"panels/timeline/TimelineUIUtils.ts | timerInstalled":{"message":"Timer Installed"},"panels/timeline/TimelineUIUtils.ts | timeSpentInRendering":{"message":"Time spent in rendering"},"panels/timeline/TimelineUIUtils.ts | timestamp":{"message":"Timestamp"},"panels/timeline/TimelineUIUtils.ts | totalTime":{"message":"Total Time"},"panels/timeline/TimelineUIUtils.ts | type":{"message":"Type"},"panels/timeline/TimelineUIUtils.ts | unknown":{"message":"unknown"},"panels/timeline/TimelineUIUtils.ts | unknownCause":{"message":"Unknown cause"},"panels/timeline/TimelineUIUtils.ts | UnknownNode":{"message":"[ unknown node ]"},"panels/timeline/TimelineUIUtils.ts | updateLayer":{"message":"Update Layer"},"panels/timeline/TimelineUIUtils.ts | updateLayerTree":{"message":"Update Layer Tree"},"panels/timeline/TimelineUIUtils.ts | url":{"message":"Url"},"panels/timeline/TimelineUIUtils.ts | userTiming":{"message":"User Timing"},"panels/timeline/TimelineUIUtils.ts | verify":{"message":"Verify"},"panels/timeline/TimelineUIUtils.ts | verifyReply":{"message":"Verify Reply"},"panels/timeline/TimelineUIUtils.ts | waitingForNetwork":{"message":"Waiting for Network"},"panels/timeline/TimelineUIUtils.ts | warning":{"message":"Warning"},"panels/timeline/TimelineUIUtils.ts | wasmModuleCacheHit":{"message":"Wasm Module Cache Hit"},"panels/timeline/TimelineUIUtils.ts | wasmModuleCacheInvalid":{"message":"Wasm Module Cache Invalid"},"panels/timeline/TimelineUIUtils.ts | websocketProtocol":{"message":"WebSocket Protocol"},"panels/timeline/TimelineUIUtils.ts | willSendRequest":{"message":"Will Send Request"},"panels/timeline/TimelineUIUtils.ts | xhrLoad":{"message":"XHR Load"},"panels/timeline/TimelineUIUtils.ts | xhrReadyStateChange":{"message":"XHR Ready State Change"},"panels/timeline/TimelineUIUtils.ts | yes":{"message":"Yes"},"panels/timeline/TimingsTrackAppender.ts | timings":{"message":"Timings"},"panels/timeline/UIDevtoolsUtils.ts | drawFrame":{"message":"Draw Frame"},"panels/timeline/UIDevtoolsUtils.ts | drawing":{"message":"Drawing"},"panels/timeline/UIDevtoolsUtils.ts | frameStart":{"message":"Frame Start"},"panels/timeline/UIDevtoolsUtils.ts | idle":{"message":"Idle"},"panels/timeline/UIDevtoolsUtils.ts | layout":{"message":"Layout"},"panels/timeline/UIDevtoolsUtils.ts | painting":{"message":"Painting"},"panels/timeline/UIDevtoolsUtils.ts | rasterizing":{"message":"Rasterizing"},"panels/timeline/UIDevtoolsUtils.ts | system":{"message":"System"},"panels/web_audio/AudioContextContentBuilder.ts | callbackBufferSize":{"message":"Callback Buffer Size"},"panels/web_audio/AudioContextContentBuilder.ts | callbackInterval":{"message":"Callback Interval"},"panels/web_audio/AudioContextContentBuilder.ts | currentTime":{"message":"Current Time"},"panels/web_audio/AudioContextContentBuilder.ts | maxOutputChannels":{"message":"Max Output Channels"},"panels/web_audio/AudioContextContentBuilder.ts | renderCapacity":{"message":"Render Capacity"},"panels/web_audio/AudioContextContentBuilder.ts | sampleRate":{"message":"Sample Rate"},"panels/web_audio/AudioContextContentBuilder.ts | state":{"message":"State"},"panels/web_audio/AudioContextSelector.ts | audioContextS":{"message":"Audio context: {PH1}"},"panels/web_audio/AudioContextSelector.ts | noRecordings":{"message":"(no recordings)"},"panels/web_audio/web_audio-meta.ts | audio":{"message":"audio"},"panels/web_audio/web_audio-meta.ts | showWebaudio":{"message":"Show WebAudio"},"panels/web_audio/web_audio-meta.ts | webaudio":{"message":"WebAudio"},"panels/web_audio/WebAudioView.ts | openAPageThatUsesWebAudioApiTo":{"message":"Open a page that uses Web Audio API to start monitoring."},"panels/webauthn/webauthn-meta.ts | showWebauthn":{"message":"Show WebAuthn"},"panels/webauthn/webauthn-meta.ts | webauthn":{"message":"WebAuthn"},"panels/webauthn/WebauthnPane.ts | actions":{"message":"Actions"},"panels/webauthn/WebauthnPane.ts | active":{"message":"Active"},"panels/webauthn/WebauthnPane.ts | add":{"message":"Add"},"panels/webauthn/WebauthnPane.ts | addAuthenticator":{"message":"Add authenticator"},"panels/webauthn/WebauthnPane.ts | authenticatorS":{"message":"Authenticator {PH1}"},"panels/webauthn/WebauthnPane.ts | credentials":{"message":"Credentials"},"panels/webauthn/WebauthnPane.ts | editName":{"message":"Edit name"},"panels/webauthn/WebauthnPane.ts | enableVirtualAuthenticator":{"message":"Enable virtual authenticator environment"},"panels/webauthn/WebauthnPane.ts | export":{"message":"Export"},"panels/webauthn/WebauthnPane.ts | id":{"message":"ID"},"panels/webauthn/WebauthnPane.ts | isResident":{"message":"Is Resident"},"panels/webauthn/WebauthnPane.ts | learnMore":{"message":"Learn more"},"panels/webauthn/WebauthnPane.ts | newAuthenticator":{"message":"New authenticator"},"panels/webauthn/WebauthnPane.ts | no":{"message":"No"},"panels/webauthn/WebauthnPane.ts | noCredentialsTryCallingSFromYour":{"message":"No credentials. Try calling {PH1} from your website."},"panels/webauthn/WebauthnPane.ts | privateKeypem":{"message":"Private key.pem"},"panels/webauthn/WebauthnPane.ts | protocol":{"message":"Protocol"},"panels/webauthn/WebauthnPane.ts | remove":{"message":"Remove"},"panels/webauthn/WebauthnPane.ts | rpId":{"message":"RP ID"},"panels/webauthn/WebauthnPane.ts | saveName":{"message":"Save name"},"panels/webauthn/WebauthnPane.ts | setSAsTheActiveAuthenticator":{"message":"Set {PH1} as the active authenticator"},"panels/webauthn/WebauthnPane.ts | signCount":{"message":"Signature Count"},"panels/webauthn/WebauthnPane.ts | supportsLargeBlob":{"message":"Supports large blob"},"panels/webauthn/WebauthnPane.ts | supportsResidentKeys":{"message":"Supports resident keys"},"panels/webauthn/WebauthnPane.ts | supportsUserVerification":{"message":"Supports user verification"},"panels/webauthn/WebauthnPane.ts | transport":{"message":"Transport"},"panels/webauthn/WebauthnPane.ts | userHandle":{"message":"User Handle"},"panels/webauthn/WebauthnPane.ts | useWebauthnForPhishingresistant":{"message":"Use WebAuthn for phishing-resistant authentication"},"panels/webauthn/WebauthnPane.ts | uuid":{"message":"UUID"},"panels/webauthn/WebauthnPane.ts | yes":{"message":"Yes"},"ui/components/data_grid/DataGrid.ts | enterToSort":{"message":"Column sort state: {PH1}. Press enter to apply sorting filter"},"ui/components/data_grid/DataGrid.ts | headerOptions":{"message":"Header Options"},"ui/components/data_grid/DataGrid.ts | resetColumns":{"message":"Reset Columns"},"ui/components/data_grid/DataGrid.ts | sortAsc":{"message":"ascending"},"ui/components/data_grid/DataGrid.ts | sortBy":{"message":"Sort By"},"ui/components/data_grid/DataGrid.ts | sortDesc":{"message":"descending"},"ui/components/data_grid/DataGrid.ts | sortNone":{"message":"none"},"ui/components/data_grid/DataGridController.ts | sortInAscendingOrder":{"message":"{PH1} sorted in ascending order"},"ui/components/data_grid/DataGridController.ts | sortInDescendingOrder":{"message":"{PH1} sorted in descending order"},"ui/components/data_grid/DataGridController.ts | sortingCanceled":{"message":"{PH1} sorting canceled"},"ui/components/dialogs/ShortcutDialog.ts | close":{"message":"Close"},"ui/components/dialogs/ShortcutDialog.ts | dialogTitle":{"message":"Keyboard shortcuts"},"ui/components/dialogs/ShortcutDialog.ts | showShortcutTitle":{"message":"Show shortcuts"},"ui/components/diff_view/DiffView.ts | additions":{"message":"Addition:"},"ui/components/diff_view/DiffView.ts | changesDiffViewer":{"message":"Changes diff viewer"},"ui/components/diff_view/DiffView.ts | deletions":{"message":"Deletion:"},"ui/components/diff_view/DiffView.ts | SkippingDMatchingLines":{"message":"( … Skipping {PH1} matching lines … )"},"ui/components/issue_counter/IssueCounter.ts | breakingChanges":{"message":"{issueCount, plural, =1 {# breaking change} other {# breaking changes}}"},"ui/components/issue_counter/IssueCounter.ts | pageErrors":{"message":"{issueCount, plural, =1 {# page error} other {# page errors}}"},"ui/components/issue_counter/IssueCounter.ts | possibleImprovements":{"message":"{issueCount, plural, =1 {# possible improvement} other {# possible improvements}}"},"ui/components/issue_counter/IssueLinkIcon.ts | clickToShowIssue":{"message":"Click to show issue in the issues tab"},"ui/components/issue_counter/IssueLinkIcon.ts | clickToShowIssueWithTitle":{"message":"Click to open the issue tab and show issue: {title}"},"ui/components/issue_counter/IssueLinkIcon.ts | issueUnavailable":{"message":"Issue unavailable at this time"},"ui/components/linear_memory_inspector/linear_memory_inspector-meta.ts | memoryInspector":{"message":"Memory Inspector"},"ui/components/linear_memory_inspector/linear_memory_inspector-meta.ts | showMemoryInspector":{"message":"Show Memory Inspector"},"ui/components/linear_memory_inspector/LinearMemoryHighlightChipList.ts | deleteHighlight":{"message":"Stop highlighting this memory"},"ui/components/linear_memory_inspector/LinearMemoryHighlightChipList.ts | jumpToAddress":{"message":"Jump to this memory"},"ui/components/linear_memory_inspector/LinearMemoryInspector.ts | addressHasToBeANumberBetweenSAnd":{"message":"Address has to be a number between {PH1} and {PH2}"},"ui/components/linear_memory_inspector/LinearMemoryInspectorController.ts | couldNotOpenLinearMemory":{"message":"Could not open linear memory inspector: failed locating buffer."},"ui/components/linear_memory_inspector/LinearMemoryInspectorPane.ts | noOpenInspections":{"message":"No open inspections"},"ui/components/linear_memory_inspector/LinearMemoryNavigator.ts | enterAddress":{"message":"Enter address"},"ui/components/linear_memory_inspector/LinearMemoryNavigator.ts | goBackInAddressHistory":{"message":"Go back in address history"},"ui/components/linear_memory_inspector/LinearMemoryNavigator.ts | goForwardInAddressHistory":{"message":"Go forward in address history"},"ui/components/linear_memory_inspector/LinearMemoryNavigator.ts | nextPage":{"message":"Next page"},"ui/components/linear_memory_inspector/LinearMemoryNavigator.ts | previousPage":{"message":"Previous page"},"ui/components/linear_memory_inspector/LinearMemoryNavigator.ts | refresh":{"message":"Refresh"},"ui/components/linear_memory_inspector/LinearMemoryValueInterpreter.ts | changeEndianness":{"message":"Change Endianness"},"ui/components/linear_memory_inspector/LinearMemoryValueInterpreter.ts | toggleValueTypeSettings":{"message":"Toggle value type settings"},"ui/components/linear_memory_inspector/ValueInterpreterDisplay.ts | addressOutOfRange":{"message":"Address out of memory range"},"ui/components/linear_memory_inspector/ValueInterpreterDisplay.ts | changeValueTypeMode":{"message":"Change mode"},"ui/components/linear_memory_inspector/ValueInterpreterDisplay.ts | jumpToPointer":{"message":"Jump to address"},"ui/components/linear_memory_inspector/ValueInterpreterDisplay.ts | signedValue":{"message":"Signed value"},"ui/components/linear_memory_inspector/ValueInterpreterDisplay.ts | unsignedValue":{"message":"Unsigned value"},"ui/components/linear_memory_inspector/ValueInterpreterDisplayUtils.ts | notApplicable":{"message":"N/A"},"ui/components/linear_memory_inspector/ValueInterpreterSettings.ts | otherGroup":{"message":"Other"},"ui/components/panel_feedback/FeedbackButton.ts | feedback":{"message":"Feedback"},"ui/components/panel_feedback/PanelFeedback.ts | previewFeature":{"message":"Preview feature"},"ui/components/panel_feedback/PanelFeedback.ts | previewText":{"message":"Our team is actively working on this feature and we would love to know what you think."},"ui/components/panel_feedback/PanelFeedback.ts | previewTextFeedbackLink":{"message":"Send us your feedback."},"ui/components/panel_feedback/PanelFeedback.ts | videoAndDocumentation":{"message":"Video and documentation"},"ui/components/panel_feedback/PreviewToggle.ts | learnMoreLink":{"message":"Learn More"},"ui/components/panel_feedback/PreviewToggle.ts | previewTextFeedbackLink":{"message":"Send us your feedback."},"ui/components/panel_feedback/PreviewToggle.ts | shortFeedbackLink":{"message":"Send feedback"},"ui/components/request_link_icon/RequestLinkIcon.ts | clickToShowRequestInTheNetwork":{"message":"Click to open the network panel and show request for URL: {url}"},"ui/components/request_link_icon/RequestLinkIcon.ts | requestUnavailableInTheNetwork":{"message":"Request unavailable in the network panel, try reloading the inspected page"},"ui/components/request_link_icon/RequestLinkIcon.ts | shortenedURL":{"message":"Shortened URL"},"ui/components/survey_link/SurveyLink.ts | anErrorOccurredWithTheSurvey":{"message":"An error occurred with the survey"},"ui/components/survey_link/SurveyLink.ts | openingSurvey":{"message":"Opening survey …"},"ui/components/survey_link/SurveyLink.ts | thankYouForYourFeedback":{"message":"Thank you for your feedback"},"ui/components/text_editor/config.ts | codeEditor":{"message":"Code editor"},"ui/components/text_editor/config.ts | sSuggestionSOfS":{"message":"{PH1}, suggestion {PH2} of {PH3}"},"ui/legacy/ActionRegistration.ts | background_services":{"message":"Background Services"},"ui/legacy/ActionRegistration.ts | console":{"message":"Console"},"ui/legacy/ActionRegistration.ts | debugger":{"message":"Debugger"},"ui/legacy/ActionRegistration.ts | drawer":{"message":"Drawer"},"ui/legacy/ActionRegistration.ts | elements":{"message":"Elements"},"ui/legacy/ActionRegistration.ts | global":{"message":"Global"},"ui/legacy/ActionRegistration.ts | help":{"message":"Help"},"ui/legacy/ActionRegistration.ts | javascript_profiler":{"message":"JavaScript Profiler"},"ui/legacy/ActionRegistration.ts | layers":{"message":"Layers"},"ui/legacy/ActionRegistration.ts | memory":{"message":"Memory"},"ui/legacy/ActionRegistration.ts | mobile":{"message":"Mobile"},"ui/legacy/ActionRegistration.ts | navigation":{"message":"Navigation"},"ui/legacy/ActionRegistration.ts | network":{"message":"Network"},"ui/legacy/ActionRegistration.ts | performance":{"message":"Performance"},"ui/legacy/ActionRegistration.ts | rendering":{"message":"Rendering"},"ui/legacy/ActionRegistration.ts | resources":{"message":"Resources"},"ui/legacy/ActionRegistration.ts | screenshot":{"message":"Screenshot"},"ui/legacy/ActionRegistration.ts | settings":{"message":"Settings"},"ui/legacy/ActionRegistration.ts | sources":{"message":"Sources"},"ui/legacy/components/color_picker/ContrastDetails.ts | aa":{"message":"AA"},"ui/legacy/components/color_picker/ContrastDetails.ts | aaa":{"message":"AAA"},"ui/legacy/components/color_picker/ContrastDetails.ts | apca":{"message":"APCA"},"ui/legacy/components/color_picker/ContrastDetails.ts | contrastRatio":{"message":"Contrast ratio"},"ui/legacy/components/color_picker/ContrastDetails.ts | noContrastInformationAvailable":{"message":"No contrast information available"},"ui/legacy/components/color_picker/ContrastDetails.ts | pickBackgroundColor":{"message":"Pick background color"},"ui/legacy/components/color_picker/ContrastDetails.ts | placeholderWithColon":{"message":": {PH1}"},"ui/legacy/components/color_picker/ContrastDetails.ts | showLess":{"message":"Show less"},"ui/legacy/components/color_picker/ContrastDetails.ts | showMore":{"message":"Show more"},"ui/legacy/components/color_picker/ContrastDetails.ts | toggleBackgroundColorPicker":{"message":"Toggle background color picker"},"ui/legacy/components/color_picker/ContrastDetails.ts | useSuggestedColorStoFixLow":{"message":"Use suggested color {PH1}to fix low contrast"},"ui/legacy/components/color_picker/FormatPickerContextMenu.ts | colorClippedTooltipText":{"message":"This color was clipped to match the format's gamut. The actual result was {PH1}"},"ui/legacy/components/color_picker/Spectrum.ts | addToPalette":{"message":"Add to palette"},"ui/legacy/components/color_picker/Spectrum.ts | changeAlpha":{"message":"Change alpha"},"ui/legacy/components/color_picker/Spectrum.ts | changeColorFormat":{"message":"Change color format"},"ui/legacy/components/color_picker/Spectrum.ts | changeHue":{"message":"Change hue"},"ui/legacy/components/color_picker/Spectrum.ts | clearPalette":{"message":"Clear palette"},"ui/legacy/components/color_picker/Spectrum.ts | colorPalettes":{"message":"Color Palettes"},"ui/legacy/components/color_picker/Spectrum.ts | colorS":{"message":"Color {PH1}"},"ui/legacy/components/color_picker/Spectrum.ts | copyColorToClipboard":{"message":"Copy color to clipboard"},"ui/legacy/components/color_picker/Spectrum.ts | hex":{"message":"HEX"},"ui/legacy/components/color_picker/Spectrum.ts | longclickOrLongpressSpaceToShow":{"message":"Long-click or long-press space to show alternate shades of {PH1}"},"ui/legacy/components/color_picker/Spectrum.ts | pressArrowKeysMessage":{"message":"Press arrow keys with or without modifiers to move swatch position. Arrow key with Shift key moves position largely, with Ctrl key it is less and with Alt key it is even less"},"ui/legacy/components/color_picker/Spectrum.ts | previewPalettes":{"message":"Preview palettes"},"ui/legacy/components/color_picker/Spectrum.ts | removeAllToTheRight":{"message":"Remove all to the right"},"ui/legacy/components/color_picker/Spectrum.ts | removeColor":{"message":"Remove color"},"ui/legacy/components/color_picker/Spectrum.ts | returnToColorPicker":{"message":"Return to color picker"},"ui/legacy/components/color_picker/Spectrum.ts | sInS":{"message":"{PH1} in {PH2}"},"ui/legacy/components/color_picker/Spectrum.ts | toggleColorPicker":{"message":"Eye dropper [{PH1}]"},"ui/legacy/components/cookie_table/CookiesTable.ts | cookies":{"message":"Cookies"},"ui/legacy/components/cookie_table/CookiesTable.ts | editableCookies":{"message":"Editable Cookies"},"ui/legacy/components/cookie_table/CookiesTable.ts | na":{"message":"N/A"},"ui/legacy/components/cookie_table/CookiesTable.ts | name":{"message":"Name"},"ui/legacy/components/cookie_table/CookiesTable.ts | opaquePartitionKey":{"message":"(opaque)"},"ui/legacy/components/cookie_table/CookiesTable.ts | session":{"message":"Session"},"ui/legacy/components/cookie_table/CookiesTable.ts | showIssueAssociatedWithThis":{"message":"Show issue associated with this cookie"},"ui/legacy/components/cookie_table/CookiesTable.ts | showRequestsWithThisCookie":{"message":"Show Requests With This Cookie"},"ui/legacy/components/cookie_table/CookiesTable.ts | size":{"message":"Size"},"ui/legacy/components/cookie_table/CookiesTable.ts | sourcePortTooltip":{"message":"Shows the source port (range 1-65535) the cookie was set on. If the port is unknown, this shows -1."},"ui/legacy/components/cookie_table/CookiesTable.ts | sourceSchemeTooltip":{"message":"Shows the source scheme (Secure, NonSecure) the cookie was set on. If the scheme is unknown, this shows Unset."},"ui/legacy/components/cookie_table/CookiesTable.ts | timeAfter":{"message":"after {date}"},"ui/legacy/components/cookie_table/CookiesTable.ts | timeAfterTooltip":{"message":"The expiration timestamp is {seconds}, which corresponds to a date after {date}"},"ui/legacy/components/cookie_table/CookiesTable.ts | value":{"message":"Value"},"ui/legacy/components/data_grid/DataGrid.ts | addNew":{"message":"Add new"},"ui/legacy/components/data_grid/DataGrid.ts | checked":{"message":"checked"},"ui/legacy/components/data_grid/DataGrid.ts | collapsed":{"message":"collapsed"},"ui/legacy/components/data_grid/DataGrid.ts | delete":{"message":"Delete"},"ui/legacy/components/data_grid/DataGrid.ts | editS":{"message":"Edit \"{PH1}\""},"ui/legacy/components/data_grid/DataGrid.ts | emptyRowCreated":{"message":"An empty table row has been created. You may double click or use context menu to edit."},"ui/legacy/components/data_grid/DataGrid.ts | expanded":{"message":"expanded"},"ui/legacy/components/data_grid/DataGrid.ts | headerOptions":{"message":"Header Options"},"ui/legacy/components/data_grid/DataGrid.ts | levelS":{"message":"level {PH1}"},"ui/legacy/components/data_grid/DataGrid.ts | refresh":{"message":"Refresh"},"ui/legacy/components/data_grid/DataGrid.ts | resetColumns":{"message":"Reset Columns"},"ui/legacy/components/data_grid/DataGrid.ts | rowsS":{"message":"Rows: {PH1}"},"ui/legacy/components/data_grid/DataGrid.ts | sortByString":{"message":"Sort By"},"ui/legacy/components/data_grid/DataGrid.ts | sRowS":{"message":"{PH1} Row {PH2}"},"ui/legacy/components/data_grid/DataGrid.ts | sSUseTheUpAndDownArrowKeysTo":{"message":"{PH1} {PH2}, use the up and down arrow keys to navigate and interact with the rows of the table; Use browse mode to read cell by cell."},"ui/legacy/components/data_grid/ShowMoreDataGridNode.ts | showAllD":{"message":"Show all {PH1}"},"ui/legacy/components/data_grid/ShowMoreDataGridNode.ts | showDAfter":{"message":"Show {PH1} after"},"ui/legacy/components/data_grid/ShowMoreDataGridNode.ts | showDBefore":{"message":"Show {PH1} before"},"ui/legacy/components/data_grid/ViewportDataGrid.ts | collapsed":{"message":"collapsed"},"ui/legacy/components/inline_editor/ColorSwatch.ts | shiftclickToChangeColorFormat":{"message":"Shift-click to change color format"},"ui/legacy/components/inline_editor/CSSShadowEditor.ts | blur":{"message":"Blur"},"ui/legacy/components/inline_editor/CSSShadowEditor.ts | spread":{"message":"Spread"},"ui/legacy/components/inline_editor/CSSShadowEditor.ts | type":{"message":"Type"},"ui/legacy/components/inline_editor/CSSShadowEditor.ts | xOffset":{"message":"X offset"},"ui/legacy/components/inline_editor/CSSShadowEditor.ts | yOffset":{"message":"Y offset"},"ui/legacy/components/inline_editor/FontEditor.ts | cssProperties":{"message":"CSS Properties"},"ui/legacy/components/inline_editor/FontEditor.ts | deleteS":{"message":"Delete {PH1}"},"ui/legacy/components/inline_editor/FontEditor.ts | fallbackS":{"message":"Fallback {PH1}"},"ui/legacy/components/inline_editor/FontEditor.ts | fontFamily":{"message":"Font Family"},"ui/legacy/components/inline_editor/FontEditor.ts | fontSelectorDeletedAtIndexS":{"message":"Font Selector deleted at index: {PH1}"},"ui/legacy/components/inline_editor/FontEditor.ts | fontSize":{"message":"Font Size"},"ui/legacy/components/inline_editor/FontEditor.ts | fontWeight":{"message":"Font Weight"},"ui/legacy/components/inline_editor/FontEditor.ts | lineHeight":{"message":"Line Height"},"ui/legacy/components/inline_editor/FontEditor.ts | PleaseEnterAValidValueForSText":{"message":"* Please enter a valid value for {PH1} text input"},"ui/legacy/components/inline_editor/FontEditor.ts | selectorInputMode":{"message":"Selector Input Mode"},"ui/legacy/components/inline_editor/FontEditor.ts | sKeyValueSelector":{"message":"{PH1} Key Value Selector"},"ui/legacy/components/inline_editor/FontEditor.ts | sliderInputMode":{"message":"Slider Input Mode"},"ui/legacy/components/inline_editor/FontEditor.ts | spacing":{"message":"Spacing"},"ui/legacy/components/inline_editor/FontEditor.ts | sSliderInput":{"message":"{PH1} Slider Input"},"ui/legacy/components/inline_editor/FontEditor.ts | sTextInput":{"message":"{PH1} Text Input"},"ui/legacy/components/inline_editor/FontEditor.ts | sToggleInputType":{"message":"{PH1} toggle input type"},"ui/legacy/components/inline_editor/FontEditor.ts | sUnitInput":{"message":"{PH1} Unit Input"},"ui/legacy/components/inline_editor/FontEditor.ts | thereIsNoValueToDeleteAtIndexS":{"message":"There is no value to delete at index: {PH1}"},"ui/legacy/components/inline_editor/FontEditor.ts | thisPropertyIsSetToContainUnits":{"message":"This property is set to contain units but does not have a defined corresponding unitsArray: {PH1}"},"ui/legacy/components/inline_editor/FontEditor.ts | units":{"message":"Units"},"ui/legacy/components/inline_editor/LinkSwatch.ts | sIsNotDefined":{"message":"{PH1} is not defined"},"ui/legacy/components/object_ui/CustomPreviewComponent.ts | showAsJavascriptObject":{"message":"Show as JavaScript object"},"ui/legacy/components/object_ui/ObjectPropertiesSection.ts | collapseChildren":{"message":"Collapse children"},"ui/legacy/components/object_ui/ObjectPropertiesSection.ts | copy":{"message":"Copy"},"ui/legacy/components/object_ui/ObjectPropertiesSection.ts | copyPropertyPath":{"message":"Copy property path"},"ui/legacy/components/object_ui/ObjectPropertiesSection.ts | copyValue":{"message":"Copy value"},"ui/legacy/components/object_ui/ObjectPropertiesSection.ts | dots":{"message":"(...)"},"ui/legacy/components/object_ui/ObjectPropertiesSection.ts | exceptionS":{"message":"[Exception: {PH1}]"},"ui/legacy/components/object_ui/ObjectPropertiesSection.ts | expandRecursively":{"message":"Expand recursively"},"ui/legacy/components/object_ui/ObjectPropertiesSection.ts | invokePropertyGetter":{"message":"Invoke property getter"},"ui/legacy/components/object_ui/ObjectPropertiesSection.ts | longTextWasTruncatedS":{"message":"long text was truncated ({PH1})"},"ui/legacy/components/object_ui/ObjectPropertiesSection.ts | noProperties":{"message":"No properties"},"ui/legacy/components/object_ui/ObjectPropertiesSection.ts | revealInMemoryInpector":{"message":"Reveal in Memory Inspector panel"},"ui/legacy/components/object_ui/ObjectPropertiesSection.ts | showAllD":{"message":"Show all {PH1}"},"ui/legacy/components/object_ui/ObjectPropertiesSection.ts | showMoreS":{"message":"Show more ({PH1})"},"ui/legacy/components/object_ui/ObjectPropertiesSection.ts | stringIsTooLargeToEdit":{"message":""},"ui/legacy/components/object_ui/ObjectPropertiesSection.ts | unknown":{"message":"unknown"},"ui/legacy/components/object_ui/ObjectPropertiesSection.ts | valueNotAccessibleToTheDebugger":{"message":"Value is not accessible to the debugger"},"ui/legacy/components/object_ui/ObjectPropertiesSection.ts | valueUnavailable":{"message":""},"ui/legacy/components/object_ui/RemoteObjectPreviewFormatter.ts | empty":{"message":"empty"},"ui/legacy/components/object_ui/RemoteObjectPreviewFormatter.ts | emptyD":{"message":"empty × {PH1}"},"ui/legacy/components/object_ui/RemoteObjectPreviewFormatter.ts | thePropertyIsComputedWithAGetter":{"message":"The property is computed with a getter"},"ui/legacy/components/perf_ui/FilmStripView.ts | doubleclickToZoomImageClickTo":{"message":"Doubleclick to zoom image. Click to view preceding requests."},"ui/legacy/components/perf_ui/FilmStripView.ts | nextFrame":{"message":"Next frame"},"ui/legacy/components/perf_ui/FilmStripView.ts | previousFrame":{"message":"Previous frame"},"ui/legacy/components/perf_ui/FilmStripView.ts | screenshot":{"message":"Screenshot"},"ui/legacy/components/perf_ui/FilmStripView.ts | screenshotForSSelectToView":{"message":"Screenshot for {PH1} - select to view preceding requests."},"ui/legacy/components/perf_ui/FlameChart.ts | flameChart":{"message":"Flame Chart"},"ui/legacy/components/perf_ui/FlameChart.ts | sCollapsed":{"message":"{PH1} collapsed"},"ui/legacy/components/perf_ui/FlameChart.ts | sExpanded":{"message":"{PH1} expanded"},"ui/legacy/components/perf_ui/FlameChart.ts | sHovered":{"message":"{PH1} hovered"},"ui/legacy/components/perf_ui/FlameChart.ts | sSelected":{"message":"{PH1} selected"},"ui/legacy/components/perf_ui/NetworkPriorities.ts | high":{"message":"High"},"ui/legacy/components/perf_ui/NetworkPriorities.ts | highest":{"message":"Highest"},"ui/legacy/components/perf_ui/NetworkPriorities.ts | low":{"message":"Low"},"ui/legacy/components/perf_ui/NetworkPriorities.ts | lowest":{"message":"Lowest"},"ui/legacy/components/perf_ui/NetworkPriorities.ts | medium":{"message":"Medium"},"ui/legacy/components/perf_ui/OverviewGrid.ts | leftResizer":{"message":"Left Resizer"},"ui/legacy/components/perf_ui/OverviewGrid.ts | overviewGridWindow":{"message":"Overview grid window"},"ui/legacy/components/perf_ui/OverviewGrid.ts | rightResizer":{"message":"Right Resizer"},"ui/legacy/components/perf_ui/perf_ui-meta.ts | collectGarbage":{"message":"Collect garbage"},"ui/legacy/components/perf_ui/perf_ui-meta.ts | flamechartMouseWheelAction":{"message":"Flamechart mouse wheel action:"},"ui/legacy/components/perf_ui/perf_ui-meta.ts | hideLiveMemoryAllocation":{"message":"Hide live memory allocation annotations"},"ui/legacy/components/perf_ui/perf_ui-meta.ts | liveMemoryAllocationAnnotations":{"message":"Live memory allocation annotations"},"ui/legacy/components/perf_ui/perf_ui-meta.ts | scroll":{"message":"Scroll"},"ui/legacy/components/perf_ui/perf_ui-meta.ts | showLiveMemoryAllocation":{"message":"Show live memory allocation annotations"},"ui/legacy/components/perf_ui/perf_ui-meta.ts | zoom":{"message":"Zoom"},"ui/legacy/components/perf_ui/PieChart.ts | total":{"message":"Total"},"ui/legacy/components/quick_open/CommandMenu.ts | command":{"message":"Command"},"ui/legacy/components/quick_open/CommandMenu.ts | deprecated":{"message":"— deprecated"},"ui/legacy/components/quick_open/CommandMenu.ts | noCommandsFound":{"message":"No commands found"},"ui/legacy/components/quick_open/CommandMenu.ts | oneOrMoreSettingsHaveChanged":{"message":"One or more settings have changed which requires a reload to take effect."},"ui/legacy/components/quick_open/CommandMenu.ts | run":{"message":"Run"},"ui/legacy/components/quick_open/FilteredListWidget.ts | noResultsFound":{"message":"No results found"},"ui/legacy/components/quick_open/FilteredListWidget.ts | quickOpen":{"message":"Quick open"},"ui/legacy/components/quick_open/FilteredListWidget.ts | quickOpenPrompt":{"message":"Quick open prompt"},"ui/legacy/components/quick_open/quick_open-meta.ts | openFile":{"message":"Open file"},"ui/legacy/components/quick_open/quick_open-meta.ts | runCommand":{"message":"Run command"},"ui/legacy/components/quick_open/QuickOpen.ts | typeToSeeAvailableCommands":{"message":"Type ? to see available commands"},"ui/legacy/components/source_frame/FontView.ts | font":{"message":"Font"},"ui/legacy/components/source_frame/FontView.ts | previewOfFontFromS":{"message":"Preview of font from {PH1}"},"ui/legacy/components/source_frame/ImageView.ts | copyImageAsDataUri":{"message":"Copy image as data URI"},"ui/legacy/components/source_frame/ImageView.ts | copyImageUrl":{"message":"Copy image URL"},"ui/legacy/components/source_frame/ImageView.ts | dD":{"message":"{PH1} × {PH2}"},"ui/legacy/components/source_frame/ImageView.ts | download":{"message":"download"},"ui/legacy/components/source_frame/ImageView.ts | dropImageFileHere":{"message":"Drop image file here"},"ui/legacy/components/source_frame/ImageView.ts | image":{"message":"Image"},"ui/legacy/components/source_frame/ImageView.ts | imageFromS":{"message":"Image from {PH1}"},"ui/legacy/components/source_frame/ImageView.ts | openImageInNewTab":{"message":"Open image in new tab"},"ui/legacy/components/source_frame/ImageView.ts | saveImageAs":{"message":"Save image as..."},"ui/legacy/components/source_frame/JSONView.ts | find":{"message":"Find"},"ui/legacy/components/source_frame/PreviewFactory.ts | nothingToPreview":{"message":"Nothing to preview"},"ui/legacy/components/source_frame/ResourceSourceFrame.ts | find":{"message":"Find"},"ui/legacy/components/source_frame/source_frame-meta.ts | defaultIndentation":{"message":"Default indentation:"},"ui/legacy/components/source_frame/source_frame-meta.ts | eSpaces":{"message":"8 spaces"},"ui/legacy/components/source_frame/source_frame-meta.ts | fSpaces":{"message":"4 spaces"},"ui/legacy/components/source_frame/source_frame-meta.ts | setIndentationToESpaces":{"message":"Set indentation to 8 spaces"},"ui/legacy/components/source_frame/source_frame-meta.ts | setIndentationToFSpaces":{"message":"Set indentation to 4 spaces"},"ui/legacy/components/source_frame/source_frame-meta.ts | setIndentationToSpaces":{"message":"Set indentation to 2 spaces"},"ui/legacy/components/source_frame/source_frame-meta.ts | setIndentationToTabCharacter":{"message":"Set indentation to tab character"},"ui/legacy/components/source_frame/source_frame-meta.ts | Spaces":{"message":"2 spaces"},"ui/legacy/components/source_frame/source_frame-meta.ts | tabCharacter":{"message":"Tab character"},"ui/legacy/components/source_frame/SourceFrame.ts | bytecodePositionXs":{"message":"Bytecode position 0x{PH1}"},"ui/legacy/components/source_frame/SourceFrame.ts | dCharactersSelected":{"message":"{PH1} characters selected"},"ui/legacy/components/source_frame/SourceFrame.ts | dLinesDCharactersSelected":{"message":"{PH1} lines, {PH2} characters selected"},"ui/legacy/components/source_frame/SourceFrame.ts | dSelectionRegions":{"message":"{PH1} selection regions"},"ui/legacy/components/source_frame/SourceFrame.ts | lineSColumnS":{"message":"Line {PH1}, Column {PH2}"},"ui/legacy/components/source_frame/SourceFrame.ts | loading":{"message":"Loading…"},"ui/legacy/components/source_frame/SourceFrame.ts | prettyPrint":{"message":"Pretty print"},"ui/legacy/components/source_frame/SourceFrame.ts | source":{"message":"Source"},"ui/legacy/components/source_frame/XMLView.ts | find":{"message":"Find"},"ui/legacy/components/utils/ImagePreview.ts | currentSource":{"message":"Current source:"},"ui/legacy/components/utils/ImagePreview.ts | fileSize":{"message":"File size:"},"ui/legacy/components/utils/ImagePreview.ts | imageFromS":{"message":"Image from {PH1}"},"ui/legacy/components/utils/ImagePreview.ts | intrinsicAspectRatio":{"message":"Intrinsic aspect ratio:"},"ui/legacy/components/utils/ImagePreview.ts | intrinsicSize":{"message":"Intrinsic size:"},"ui/legacy/components/utils/ImagePreview.ts | renderedAspectRatio":{"message":"Rendered aspect ratio:"},"ui/legacy/components/utils/ImagePreview.ts | renderedSize":{"message":"Rendered size:"},"ui/legacy/components/utils/ImagePreview.ts | unknownSource":{"message":"unknown source"},"ui/legacy/components/utils/JSPresentationUtils.ts | addToIgnore":{"message":"Add script to ignore list"},"ui/legacy/components/utils/JSPresentationUtils.ts | removeFromIgnore":{"message":"Remove from ignore list"},"ui/legacy/components/utils/JSPresentationUtils.ts | showLess":{"message":"Show less"},"ui/legacy/components/utils/JSPresentationUtils.ts | showSMoreFrames":{"message":"{n, plural, =1 {Show # more frame} other {Show # more frames}}"},"ui/legacy/components/utils/JSPresentationUtils.ts | unknownSource":{"message":"unknown"},"ui/legacy/components/utils/Linkifier.ts | auto":{"message":"auto"},"ui/legacy/components/utils/Linkifier.ts | linkHandling":{"message":"Link handling:"},"ui/legacy/components/utils/Linkifier.ts | openUsingS":{"message":"Open using {PH1}"},"ui/legacy/components/utils/Linkifier.ts | reveal":{"message":"Reveal"},"ui/legacy/components/utils/Linkifier.ts | revealInS":{"message":"Reveal in {PH1}"},"ui/legacy/components/utils/Linkifier.ts | unknown":{"message":"(unknown)"},"ui/legacy/components/utils/TargetDetachedDialog.ts | websocketDisconnected":{"message":"WebSocket disconnected"},"ui/legacy/DockController.ts | close":{"message":"Close"},"ui/legacy/DockController.ts | devToolsDockedTo":{"message":"DevTools is docked to {PH1}"},"ui/legacy/DockController.ts | devtoolsUndocked":{"message":"DevTools is undocked"},"ui/legacy/DockController.ts | dockToBottom":{"message":"Dock to bottom"},"ui/legacy/DockController.ts | dockToLeft":{"message":"Dock to left"},"ui/legacy/DockController.ts | dockToRight":{"message":"Dock to right"},"ui/legacy/DockController.ts | undockIntoSeparateWindow":{"message":"Undock into separate window"},"ui/legacy/EmptyWidget.ts | learnMore":{"message":"Learn more"},"ui/legacy/FilterBar.ts | allStrings":{"message":"All"},"ui/legacy/FilterBar.ts | clearFilter":{"message":"Clear input"},"ui/legacy/FilterBar.ts | egSmalldUrlacomb":{"message":"e.g. /small[d]+/ url:a.com/b"},"ui/legacy/FilterBar.ts | filter":{"message":"Filter"},"ui/legacy/FilterBar.ts | sclickToSelectMultipleTypes":{"message":"{PH1}Click to select multiple types"},"ui/legacy/Infobar.ts | close":{"message":"Close"},"ui/legacy/Infobar.ts | dontShowAgain":{"message":"Don't show again"},"ui/legacy/Infobar.ts | learnMore":{"message":"Learn more"},"ui/legacy/InspectorView.ts | closeDrawer":{"message":"Close drawer"},"ui/legacy/InspectorView.ts | devToolsLanguageMissmatch":{"message":"DevTools is now available in {PH1}!"},"ui/legacy/InspectorView.ts | drawer":{"message":"Tool drawer"},"ui/legacy/InspectorView.ts | drawerHidden":{"message":"Drawer hidden"},"ui/legacy/InspectorView.ts | drawerShown":{"message":"Drawer shown"},"ui/legacy/InspectorView.ts | mainToolbar":{"message":"Main toolbar"},"ui/legacy/InspectorView.ts | moreTools":{"message":"More Tools"},"ui/legacy/InspectorView.ts | moveToBottom":{"message":"Move to bottom"},"ui/legacy/InspectorView.ts | moveToTop":{"message":"Move to top"},"ui/legacy/InspectorView.ts | panels":{"message":"Panels"},"ui/legacy/InspectorView.ts | reloadDevtools":{"message":"Reload DevTools"},"ui/legacy/InspectorView.ts | selectFolder":{"message":"Select folder"},"ui/legacy/InspectorView.ts | selectOverrideFolder":{"message":"Select a folder to store override files in."},"ui/legacy/InspectorView.ts | setToBrowserLanguage":{"message":"Always match Chrome's language"},"ui/legacy/InspectorView.ts | setToSpecificLanguage":{"message":"Switch DevTools to {PH1}"},"ui/legacy/ListWidget.ts | addString":{"message":"Add"},"ui/legacy/ListWidget.ts | cancelString":{"message":"Cancel"},"ui/legacy/ListWidget.ts | editString":{"message":"Edit"},"ui/legacy/ListWidget.ts | removeString":{"message":"Remove"},"ui/legacy/ListWidget.ts | saveString":{"message":"Save"},"ui/legacy/RemoteDebuggingTerminatedScreen.ts | debuggingConnectionWasClosed":{"message":"Debugging connection was closed. Reason: "},"ui/legacy/RemoteDebuggingTerminatedScreen.ts | reconnectDevtools":{"message":"Reconnect DevTools"},"ui/legacy/RemoteDebuggingTerminatedScreen.ts | reconnectWhenReadyByReopening":{"message":"Reconnect when ready by reopening DevTools."},"ui/legacy/SearchableView.ts | cancel":{"message":"Cancel"},"ui/legacy/SearchableView.ts | dMatches":{"message":"{PH1} matches"},"ui/legacy/SearchableView.ts | dOfD":{"message":"{PH1} of {PH2}"},"ui/legacy/SearchableView.ts | findString":{"message":"Find"},"ui/legacy/SearchableView.ts | matchCase":{"message":"Match Case"},"ui/legacy/SearchableView.ts | matchString":{"message":"1 match"},"ui/legacy/SearchableView.ts | replace":{"message":"Replace"},"ui/legacy/SearchableView.ts | replaceAll":{"message":"Replace all"},"ui/legacy/SearchableView.ts | searchNext":{"message":"Search next"},"ui/legacy/SearchableView.ts | searchPrevious":{"message":"Search previous"},"ui/legacy/SearchableView.ts | useRegularExpression":{"message":"Use Regular Expression"},"ui/legacy/SettingsUI.ts | oneOrMoreSettingsHaveChanged":{"message":"One or more settings have changed which requires a reload to take effect."},"ui/legacy/SettingsUI.ts | srequiresReload":{"message":"*Requires reload"},"ui/legacy/SoftContextMenu.ts | checked":{"message":"checked"},"ui/legacy/SoftContextMenu.ts | sS":{"message":"{PH1}, {PH2}"},"ui/legacy/SoftContextMenu.ts | sSS":{"message":"{PH1}, {PH2}, {PH3}"},"ui/legacy/SoftContextMenu.ts | unchecked":{"message":"unchecked"},"ui/legacy/SoftDropDown.ts | noItemSelected":{"message":"(no item selected)"},"ui/legacy/SuggestBox.ts | sSuggestionSOfS":{"message":"{PH1}, suggestion {PH2} of {PH3}"},"ui/legacy/SuggestBox.ts | sSuggestionSSelected":{"message":"{PH1}, suggestion selected"},"ui/legacy/TabbedPane.ts | close":{"message":"Close"},"ui/legacy/TabbedPane.ts | closeAll":{"message":"Close all"},"ui/legacy/TabbedPane.ts | closeOthers":{"message":"Close others"},"ui/legacy/TabbedPane.ts | closeS":{"message":"Close {PH1}"},"ui/legacy/TabbedPane.ts | closeTabsToTheRight":{"message":"Close tabs to the right"},"ui/legacy/TabbedPane.ts | moreTabs":{"message":"More tabs"},"ui/legacy/TabbedPane.ts | previewFeature":{"message":"Preview feature"},"ui/legacy/TargetCrashedScreen.ts | devtoolsWasDisconnectedFromThe":{"message":"DevTools was disconnected from the page."},"ui/legacy/TargetCrashedScreen.ts | oncePageIsReloadedDevtoolsWill":{"message":"Once page is reloaded, DevTools will automatically reconnect."},"ui/legacy/Toolbar.ts | clearInput":{"message":"Clear input"},"ui/legacy/Toolbar.ts | notPressed":{"message":"not pressed"},"ui/legacy/Toolbar.ts | pressed":{"message":"pressed"},"ui/legacy/UIUtils.ts | anonymous":{"message":"(anonymous)"},"ui/legacy/UIUtils.ts | anotherProfilerIsAlreadyActive":{"message":"Another profiler is already active"},"ui/legacy/UIUtils.ts | asyncCall":{"message":"Async Call"},"ui/legacy/UIUtils.ts | cancel":{"message":"Cancel"},"ui/legacy/UIUtils.ts | close":{"message":"Close"},"ui/legacy/UIUtils.ts | copyFileName":{"message":"Copy file name"},"ui/legacy/UIUtils.ts | copyLinkAddress":{"message":"Copy link address"},"ui/legacy/UIUtils.ts | ok":{"message":"OK"},"ui/legacy/UIUtils.ts | openInNewTab":{"message":"Open in new tab"},"ui/legacy/UIUtils.ts | promiseRejectedAsync":{"message":"Promise rejected (async)"},"ui/legacy/UIUtils.ts | promiseResolvedAsync":{"message":"Promise resolved (async)"},"ui/legacy/UIUtils.ts | sAsync":{"message":"{PH1} (async)"},"ui/legacy/ViewManager.ts | sPanel":{"message":"{PH1} panel"},"ui/legacy/ViewRegistration.ts | drawer":{"message":"Drawer"},"ui/legacy/ViewRegistration.ts | drawer_sidebar":{"message":"Drawer sidebar"},"ui/legacy/ViewRegistration.ts | elements":{"message":"Elements"},"ui/legacy/ViewRegistration.ts | network":{"message":"Network"},"ui/legacy/ViewRegistration.ts | panel":{"message":"Panel"},"ui/legacy/ViewRegistration.ts | settings":{"message":"Settings"},"ui/legacy/ViewRegistration.ts | sources":{"message":"Sources"}} \ No newline at end of file diff --git a/packages/debugger-frontend/dist/third-party/front_end/device_mode_emulation_frame.html b/packages/debugger-frontend/dist/third-party/front_end/device_mode_emulation_frame.html index d596abe3bf0ee3..b601a1db893ff1 100644 --- a/packages/debugger-frontend/dist/third-party/front_end/device_mode_emulation_frame.html +++ b/packages/debugger-frontend/dist/third-party/front_end/device_mode_emulation_frame.html @@ -6,7 +6,7 @@ -DevTools +DevTools (React Native) + diff --git a/packages/debugger-frontend/dist/third-party/front_end/devtools_app.html b/packages/debugger-frontend/dist/third-party/front_end/devtools_app.html index f23e08cf3955d6..d7ba2348c55833 100644 --- a/packages/debugger-frontend/dist/third-party/front_end/devtools_app.html +++ b/packages/debugger-frontend/dist/third-party/front_end/devtools_app.html @@ -6,7 +6,7 @@ -DevTools +DevTools (React Native) + diff --git a/packages/debugger-frontend/dist/third-party/front_end/entrypoints/js_app/js_app.js b/packages/debugger-frontend/dist/third-party/front_end/entrypoints/js_app/js_app.js index 1184c3ffd60ab7..3dbc4de78c677a 100644 --- a/packages/debugger-frontend/dist/third-party/front_end/entrypoints/js_app/js_app.js +++ b/packages/debugger-frontend/dist/third-party/front_end/entrypoints/js_app/js_app.js @@ -1 +1 @@ -import"../shell/shell.js";import*as t from"../../core/common/common.js";import*as e from"../../core/i18n/i18n.js";import*as i from"../../ui/legacy/legacy.js";import*as n from"../../core/root/root.js";import*as o from"../../core/host/host.js";import*as r from"../../core/sdk/sdk.js";import*as a from"../../ui/legacy/components/utils/utils.js";import*as l from"../main/main.js";const s={throttling:"Throttling",showThrottling:"Show Throttling",goOffline:"Go offline",device:"device",throttlingTag:"throttling",enableSlowGThrottling:"Enable slow `3G` throttling",enableFastGThrottling:"Enable fast `3G` throttling",goOnline:"Go online"},c=e.i18n.registerUIStrings("panels/mobile_throttling/mobile_throttling-meta.ts",s),g=e.i18n.getLazilyComputedLocalizedString.bind(void 0,c);let m;async function d(){return m||(m=await import("../../panels/mobile_throttling/mobile_throttling.js")),m}i.ViewManager.registerViewExtension({location:"settings-view",id:"throttling-conditions",title:g(s.throttling),commandPrompt:g(s.showThrottling),order:35,loadView:async()=>(await d()).ThrottlingSettingsTab.ThrottlingSettingsTab.instance(),settings:["customNetworkConditions"]}),i.ActionRegistration.registerActionExtension({actionId:"network-conditions.network-offline",category:i.ActionRegistration.ActionCategory.NETWORK,title:g(s.goOffline),loadActionDelegate:async()=>(await d()).ThrottlingManager.ActionDelegate.instance(),tags:[g(s.device),g(s.throttlingTag)]}),i.ActionRegistration.registerActionExtension({actionId:"network-conditions.network-low-end-mobile",category:i.ActionRegistration.ActionCategory.NETWORK,title:g(s.enableSlowGThrottling),loadActionDelegate:async()=>(await d()).ThrottlingManager.ActionDelegate.instance(),tags:[g(s.device),g(s.throttlingTag)]}),i.ActionRegistration.registerActionExtension({actionId:"network-conditions.network-mid-tier-mobile",category:i.ActionRegistration.ActionCategory.NETWORK,title:g(s.enableFastGThrottling),loadActionDelegate:async()=>(await d()).ThrottlingManager.ActionDelegate.instance(),tags:[g(s.device),g(s.throttlingTag)]}),i.ActionRegistration.registerActionExtension({actionId:"network-conditions.network-online",category:i.ActionRegistration.ActionCategory.NETWORK,title:g(s.goOnline),loadActionDelegate:async()=>(await d()).ThrottlingManager.ActionDelegate.instance(),tags:[g(s.device),g(s.throttlingTag)]}),t.Settings.registerSettingExtension({storageType:t.Settings.SettingStorageType.Synced,settingName:"customNetworkConditions",settingType:t.Settings.SettingType.ARRAY,defaultValue:[]});const p={profiler:"Profiler",showProfiler:"Show Profiler",performance:"Performance",showPerformance:"Show Performance",startStopRecording:"Start/stop recording",showRecentTimelineSessions:"Show recent timeline sessions",record:"Record",stop:"Stop",startProfilingAndReloadPage:"Start profiling and reload page"},w=e.i18n.registerUIStrings("panels/js_profiler/js_profiler-meta.ts",p),f=e.i18n.getLazilyComputedLocalizedString.bind(void 0,w);let h,A;async function T(){return A||(A=await import("../../panels/profiler/profiler.js")),A}async function y(){return h||(h=await import("../../panels/timeline/timeline.js")),h}function P(t){return void 0===h?[]:t(h)}i.ViewManager.registerViewExtension({location:"panel",id:"js_profiler",title:f(p.profiler),commandPrompt:f(p.showProfiler),order:65,persistence:"closeable",experiment:n.Runtime.ExperimentName.JS_PROFILER_TEMP_ENABLE,loadView:async()=>(await T()).ProfilesPanel.JSProfilerPanel.instance()}),i.ViewManager.registerViewExtension({location:"panel",id:"timeline",title:f(p.performance),commandPrompt:f(p.showPerformance),order:66,hasToolbar:!1,isPreviewFeature:!0,loadView:async()=>(await y()).TimelinePanel.TimelinePanel.instance({forceNew:null,isNode:!0})}),i.ActionRegistration.registerActionExtension({actionId:"profiler.js-toggle-recording",category:i.ActionRegistration.ActionCategory.JAVASCRIPT_PROFILER,title:f(p.startStopRecording),iconClass:"record-start",toggleable:!0,toggledIconClass:"record-stop",toggleWithRedColor:!0,contextTypes:()=>void 0===A?[]:(t=>[t.ProfilesPanel.JSProfilerPanel])(A),loadActionDelegate:async()=>(await T()).ProfilesPanel.JSProfilerPanel.instance(),bindings:[{platform:"windows,linux",shortcut:"Ctrl+E"},{platform:"mac",shortcut:"Meta+E"}]}),i.ActionRegistration.registerActionExtension({actionId:"timeline.show-history",loadActionDelegate:async()=>(await y()).TimelinePanel.ActionDelegate.instance(),category:i.ActionRegistration.ActionCategory.PERFORMANCE,title:f(p.showRecentTimelineSessions),contextTypes:()=>P((t=>[t.TimelinePanel.TimelinePanel])),bindings:[{platform:"windows,linux",shortcut:"Ctrl+H"},{platform:"mac",shortcut:"Meta+Y"}]}),i.ActionRegistration.registerActionExtension({actionId:"timeline.toggle-recording",category:i.ActionRegistration.ActionCategory.PERFORMANCE,iconClass:"record-start",toggleable:!0,toggledIconClass:"record-stop",toggleWithRedColor:!0,contextTypes:()=>P((t=>[t.TimelinePanel.TimelinePanel])),loadActionDelegate:async()=>(await y()).TimelinePanel.ActionDelegate.instance(),options:[{value:!0,title:f(p.record)},{value:!1,title:f(p.stop)}],bindings:[{platform:"windows,linux",shortcut:"Ctrl+E"},{platform:"mac",shortcut:"Meta+E"}]}),i.ActionRegistration.registerActionExtension({actionId:"timeline.record-reload",iconClass:"refresh",contextTypes:()=>P((t=>[t.TimelinePanel.TimelinePanel])),category:i.ActionRegistration.ActionCategory.PERFORMANCE,title:f(p.startProfilingAndReloadPage),loadActionDelegate:async()=>(await y()).TimelinePanel.ActionDelegate.instance(),bindings:[{platform:"windows,linux",shortcut:"Ctrl+Shift+E"},{platform:"mac",shortcut:"Meta+Shift+E"}]});const u={main:"Main"},R=e.i18n.registerUIStrings("entrypoints/js_app/js_app.ts",u),S=e.i18n.getLocalizedString.bind(void 0,R);let E;class C{static instance(t={forceNew:null}){const{forceNew:e}=t;return E&&!e||(E=new C),E}async run(){o.userMetrics.actionTaken(o.UserMetrics.Action.ConnectToNodeJSDirectly),r.Connections.initMainConnection((async()=>{r.TargetManager.TargetManager.instance().createTarget("main",S(u.main),r.Target.Type.Node,null).runtimeAgent().invoke_runIfWaitingForDebugger()}),a.TargetDetachedDialog.TargetDetachedDialog.webSocketConnectionLost)}}t.Runnable.registerEarlyInitializationRunnable(C.instance),new l.MainImpl.MainImpl;export{C as JsMainImpl}; +import"../shell/shell.js";import*as t from"../../core/common/common.js";import*as e from"../../core/i18n/i18n.js";import*as i from"../../ui/legacy/legacy.js";import*as n from"../../core/root/root.js";import*as o from"../../core/host/host.js";import*as r from"../../core/sdk/sdk.js";import*as a from"../../ui/legacy/components/utils/utils.js";import*as s from"../main/main.js";const l={throttling:"Throttling",showThrottling:"Show Throttling",goOffline:"Go offline",device:"device",throttlingTag:"throttling",enableSlowGThrottling:"Enable slow `3G` throttling",enableFastGThrottling:"Enable fast `3G` throttling",goOnline:"Go online"},c=e.i18n.registerUIStrings("panels/mobile_throttling/mobile_throttling-meta.ts",l),g=e.i18n.getLazilyComputedLocalizedString.bind(void 0,c);let d;async function m(){return d||(d=await import("../../panels/mobile_throttling/mobile_throttling.js")),d}i.ViewManager.registerViewExtension({location:"settings-view",id:"throttling-conditions",title:g(l.throttling),commandPrompt:g(l.showThrottling),order:35,loadView:async()=>(await m()).ThrottlingSettingsTab.ThrottlingSettingsTab.instance(),settings:["customNetworkConditions"]}),i.ActionRegistration.registerActionExtension({actionId:"network-conditions.network-offline",category:i.ActionRegistration.ActionCategory.NETWORK,title:g(l.goOffline),loadActionDelegate:async()=>(await m()).ThrottlingManager.ActionDelegate.instance(),tags:[g(l.device),g(l.throttlingTag)]}),i.ActionRegistration.registerActionExtension({actionId:"network-conditions.network-low-end-mobile",category:i.ActionRegistration.ActionCategory.NETWORK,title:g(l.enableSlowGThrottling),loadActionDelegate:async()=>(await m()).ThrottlingManager.ActionDelegate.instance(),tags:[g(l.device),g(l.throttlingTag)]}),i.ActionRegistration.registerActionExtension({actionId:"network-conditions.network-mid-tier-mobile",category:i.ActionRegistration.ActionCategory.NETWORK,title:g(l.enableFastGThrottling),loadActionDelegate:async()=>(await m()).ThrottlingManager.ActionDelegate.instance(),tags:[g(l.device),g(l.throttlingTag)]}),i.ActionRegistration.registerActionExtension({actionId:"network-conditions.network-online",category:i.ActionRegistration.ActionCategory.NETWORK,title:g(l.goOnline),loadActionDelegate:async()=>(await m()).ThrottlingManager.ActionDelegate.instance(),tags:[g(l.device),g(l.throttlingTag)]}),t.Settings.registerSettingExtension({storageType:t.Settings.SettingStorageType.Synced,settingName:"customNetworkConditions",settingType:t.Settings.SettingType.ARRAY,defaultValue:[]});const p={profiler:"Profiler",showProfiler:"Show Profiler",performance:"Performance",showPerformance:"Show Performance",startStopRecording:"Start/stop recording",showRecentTimelineSessions:"Show recent timeline sessions",record:"Record",stop:"Stop",startProfilingAndReloadPage:"Start profiling and reload page"},f=e.i18n.registerUIStrings("panels/js_profiler/js_profiler-meta.ts",p),h=e.i18n.getLazilyComputedLocalizedString.bind(void 0,f);let w,A;async function T(){return A||(A=await import("../../panels/profiler/profiler.js")),A}async function y(){return w||(w=await import("../../panels/timeline/timeline.js")),w}function R(t){return void 0===w?[]:t(w)}i.ViewManager.registerViewExtension({location:"panel",id:"js_profiler",title:h(p.profiler),commandPrompt:h(p.showProfiler),order:65,persistence:"permanent",experiment:n.Runtime.ExperimentName.JS_PROFILER_TEMP_ENABLE,loadView:async()=>(await T()).ProfilesPanel.JSProfilerPanel.instance()}),i.ActionRegistration.registerActionExtension({actionId:"profiler.js-toggle-recording",category:i.ActionRegistration.ActionCategory.JAVASCRIPT_PROFILER,title:h(p.startStopRecording),iconClass:"record-start",toggleable:!0,toggledIconClass:"record-stop",toggleWithRedColor:!0,contextTypes:()=>void 0===A?[]:(t=>[t.ProfilesPanel.JSProfilerPanel])(A),loadActionDelegate:async()=>(await T()).ProfilesPanel.JSProfilerPanel.instance(),bindings:[{platform:"windows,linux",shortcut:"Ctrl+E"},{platform:"mac",shortcut:"Meta+E"}]}),i.ActionRegistration.registerActionExtension({actionId:"timeline.show-history",loadActionDelegate:async()=>(await y()).TimelinePanel.ActionDelegate.instance(),category:i.ActionRegistration.ActionCategory.PERFORMANCE,title:h(p.showRecentTimelineSessions),contextTypes:()=>R((t=>[t.TimelinePanel.TimelinePanel])),bindings:[{platform:"windows,linux",shortcut:"Ctrl+H"},{platform:"mac",shortcut:"Meta+Y"}]}),i.ActionRegistration.registerActionExtension({actionId:"timeline.toggle-recording",category:i.ActionRegistration.ActionCategory.PERFORMANCE,iconClass:"record-start",toggleable:!0,toggledIconClass:"record-stop",toggleWithRedColor:!0,contextTypes:()=>R((t=>[t.TimelinePanel.TimelinePanel])),loadActionDelegate:async()=>(await y()).TimelinePanel.ActionDelegate.instance(),options:[{value:!0,title:h(p.record)},{value:!1,title:h(p.stop)}],bindings:[{platform:"windows,linux",shortcut:"Ctrl+E"},{platform:"mac",shortcut:"Meta+E"}]}),i.ActionRegistration.registerActionExtension({actionId:"timeline.record-reload",iconClass:"refresh",contextTypes:()=>R((t=>[t.TimelinePanel.TimelinePanel])),category:i.ActionRegistration.ActionCategory.PERFORMANCE,title:h(p.startProfilingAndReloadPage),loadActionDelegate:async()=>(await y()).TimelinePanel.ActionDelegate.instance(),bindings:[{platform:"windows,linux",shortcut:"Ctrl+Shift+E"},{platform:"mac",shortcut:"Meta+Shift+E"}]});const u={main:"Main"},P=e.i18n.registerUIStrings("entrypoints/js_app/js_app.ts",u),S=e.i18n.getLocalizedString.bind(void 0,P);let E;class C{static instance(t={forceNew:null}){const{forceNew:e}=t;return E&&!e||(E=new C),E}async run(){o.userMetrics.actionTaken(o.UserMetrics.Action.ConnectToNodeJSDirectly),r.Connections.initMainConnection((async()=>{r.TargetManager.TargetManager.instance().createTarget("main",S(u.main),r.Target.Type.Node,null).runtimeAgent().invoke_runIfWaitingForDebugger()}),a.TargetDetachedDialog.TargetDetachedDialog.webSocketConnectionLost)}}t.Runnable.registerEarlyInitializationRunnable(C.instance),new s.MainImpl.MainImpl;export{C as JsMainImpl}; diff --git a/packages/debugger-frontend/dist/third-party/front_end/entrypoints/main/main.js b/packages/debugger-frontend/dist/third-party/front_end/entrypoints/main/main.js index f3217f8ae94f41..f2ee82b8723b7c 100644 --- a/packages/debugger-frontend/dist/third-party/front_end/entrypoints/main/main.js +++ b/packages/debugger-frontend/dist/third-party/front_end/entrypoints/main/main.js @@ -1 +1 @@ -import*as e from"../../core/sdk/sdk.js";import*as t from"../../core/common/common.js";import*as n from"../../core/host/host.js";import*as o from"../../core/i18n/i18n.js";import*as r from"../../core/platform/platform.js";import*as s from"../../core/protocol_client/protocol_client.js";import*as i from"../../core/root/root.js";import*as a from"../../models/bindings/bindings.js";import*as l from"../../models/breakpoints/breakpoints.js";import*as c from"../../models/extensions/extensions.js";import*as d from"../../models/issues_manager/issues_manager.js";import*as m from"../../models/logs/logs.js";import*as g from"../../models/persistence/persistence.js";import*as p from"../../models/workspace/workspace.js";import*as u from"../../panels/snippets/snippets.js";import*as h from"../../panels/timeline/timeline.js";import*as f from"../../ui/components/icon_button/icon_button.js";import*as w from"../../ui/legacy/components/perf_ui/perf_ui.js";import*as S from"../../ui/legacy/components/utils/utils.js";import*as x from"../../ui/legacy/legacy.js";import*as v from"../../ui/legacy/theme_support/theme_support.js";class E{#e;#t;#n;#o;constructor(t,n){n.addFlavorChangeListener(e.RuntimeModel.ExecutionContext,this.#r,this),n.addFlavorChangeListener(e.Target.Target,this.#s,this),t.addModelListener(e.RuntimeModel.RuntimeModel,e.RuntimeModel.Events.ExecutionContextCreated,this.#i,this),t.addModelListener(e.RuntimeModel.RuntimeModel,e.RuntimeModel.Events.ExecutionContextDestroyed,this.#a,this),t.addModelListener(e.RuntimeModel.RuntimeModel,e.RuntimeModel.Events.ExecutionContextOrderChanged,this.#l,this),this.#e=t,this.#t=n,t.observeModels(e.RuntimeModel.RuntimeModel,this)}modelAdded(t){queueMicrotask(function(){this.#t.flavor(e.Target.Target)||this.#t.setFlavor(e.Target.Target,t.target())}.bind(this))}modelRemoved(t){const n=this.#t.flavor(e.RuntimeModel.ExecutionContext);n&&n.runtimeModel===t&&this.#c();const o=this.#e.models(e.RuntimeModel.RuntimeModel);this.#t.flavor(e.Target.Target)===t.target()&&o.length&&this.#t.setFlavor(e.Target.Target,o[0].target())}#r({data:t}){t&&(this.#t.setFlavor(e.Target.Target,t.target()),this.#o||(this.#n=this.#d(t)))}#d(e){return e.isDefault?e.target().name()+":"+e.frameId:""}#s({data:t}){const n=this.#t.flavor(e.RuntimeModel.ExecutionContext);if(!t||n&&n.target()===t)return;const o=t.model(e.RuntimeModel.RuntimeModel),r=o?o.executionContexts():[];if(!r.length)return;let s=null;for(let e=0;e{this.#f=e})),this.#w()}static time(e){n.InspectorFrontendHost.isUnderTest()||console.time(e)}static timeEnd(e){n.InspectorFrontendHost.isUnderTest()||console.timeEnd(e)}async#w(){console.timeStamp("Main._loaded"),i.Runtime.Runtime.setPlatform(n.Platform.platform());const e=await new Promise((e=>{n.InspectorFrontendHost.InspectorFrontendHostInstance.getPreferences(e)}));console.timeStamp("Main._gotPreferences"),this.#S(),this.createSettings(e),await this.requestAndRegisterLocaleData(),n.userMetrics.syncSetting(t.Settings.Settings.instance().moduleSetting("sync_preferences").get()),this.#x()}#S(){self.Common=self.Common||{},self.UI=self.UI||{},self.UI.panels=self.UI.panels||{},self.SDK=self.SDK||{},self.Bindings=self.Bindings||{},self.Persistence=self.Persistence||{},self.Workspace=self.Workspace||{},self.Extensions=self.Extensions||{},self.Host=self.Host||{},self.Host.userMetrics=self.Host.userMetrics||n.userMetrics,self.Host.UserMetrics=self.Host.UserMetrics||n.UserMetrics,self.ProtocolClient=self.ProtocolClient||{},self.ProtocolClient.test=self.ProtocolClient.test||s.InspectorBackend.test}async requestAndRegisterLocaleData(){const e=t.Settings.Settings.instance().moduleSetting("language").get(),r=o.DevToolsLocale.DevToolsLocale.instance({create:!0,data:{navigatorLanguage:navigator.language,settingLanguage:e,lookupClosestDevToolsLocale:o.i18n.lookupClosestSupportedDevToolsLocale}});n.userMetrics.language(r.locale),"en-US"!==r.locale&&await o.i18n.fetchAndRegisterLocaleData("en-US");try{await o.i18n.fetchAndRegisterLocaleData(r.locale)}catch(e){console.warn(`Unable to fetch & register locale data for '${r.locale}', falling back to 'en-US'. Cause: `,e),r.forceFallbackLocale()}}createSettings(e){this.#v();let o,r="";if(n.Platform.isCustomDevtoolsFrontend()?r="__custom__":i.Runtime.Runtime.queryParam("can_dock")||!Boolean(i.Runtime.Runtime.queryParam("debugFrontend"))||n.InspectorFrontendHost.isUnderTest()||(r="__bundled__"),!n.InspectorFrontendHost.isUnderTest()&&window.localStorage){const e={...t.Settings.NOOP_STORAGE,clear:()=>window.localStorage.clear()};o=new t.Settings.SettingsStorage(window.localStorage,e,r)}else o=new t.Settings.SettingsStorage({},t.Settings.NOOP_STORAGE,r);const s={register:e=>n.InspectorFrontendHost.InspectorFrontendHostInstance.registerPreference(e,{synced:!1}),set:n.InspectorFrontendHost.InspectorFrontendHostInstance.setPreference,get:e=>new Promise((t=>{n.InspectorFrontendHost.InspectorFrontendHostInstance.getPreference(e,t)})),remove:n.InspectorFrontendHost.InspectorFrontendHostInstance.removePreference,clear:n.InspectorFrontendHost.InspectorFrontendHostInstance.clearPreferences},a={...s,register:e=>n.InspectorFrontendHost.InspectorFrontendHostInstance.registerPreference(e,{synced:!0})},l=new t.Settings.SettingsStorage(e,a,r),c=new t.Settings.SettingsStorage(e,s,r);t.Settings.Settings.instance({forceNew:!0,syncedStorage:l,globalStorage:c,localStorage:o}),self.Common.settings=t.Settings.Settings.instance(),n.InspectorFrontendHost.isUnderTest()||(new t.Settings.VersionController).updateVersion()}#v(){i.Runtime.experiments.register("applyCustomStylesheet","Allow extensions to load custom stylesheets"),i.Runtime.experiments.register("captureNodeCreationStacks","Capture node creation stacks"),i.Runtime.experiments.register("sourcesPrettyPrint","Automatically pretty print minified sources"),i.Runtime.experiments.register("ignoreListJSFramesOnTimeline","Ignore List for JavaScript frames on Timeline",!0),i.Runtime.experiments.register("liveHeapProfile","Live heap profile",!0),i.Runtime.experiments.register("protocolMonitor","Protocol Monitor",void 0,"https://developer.chrome.com/blog/new-in-devtools-92/#protocol-monitor"),i.Runtime.experiments.register("developerResourcesView","Show developer resources view"),i.Runtime.experiments.register("cspViolationsView","Show CSP Violations view",void 0,"https://developer.chrome.com/blog/new-in-devtools-89/#csp"),i.Runtime.experiments.register("samplingHeapProfilerTimeline","Sampling heap profiler timeline",!0),i.Runtime.experiments.register("showOptionToExposeInternalsInHeapSnapshot","Show option to expose internals in heap snapshots"),i.Runtime.experiments.register("sourceOrderViewer","Source order viewer",void 0,"https://developer.chrome.com/blog/new-in-devtools-92/#source-order"),i.Runtime.experiments.register("webauthnPane","WebAuthn Pane"),i.Runtime.experiments.register("keyboardShortcutEditor","Enable keyboard shortcut editor",!1,"https://developer.chrome.com/blog/new-in-devtools-88/#keyboard-shortcuts"),i.Runtime.experiments.register("bfcacheDisplayTree","Show back/forward cache blocking reasons in the frame tree structure view"),i.Runtime.experiments.register("timelineEventInitiators","Timeline: event initiators"),i.Runtime.experiments.register("timelineInvalidationTracking","Timeline: invalidation tracking",!0),i.Runtime.experiments.register("timelineShowAllEvents","Timeline: show all events",!0),i.Runtime.experiments.register("timelineV8RuntimeCallStats","Timeline: V8 Runtime Call Stats on Timeline",!0),i.Runtime.experiments.register("timelineAsConsoleProfileResultPanel","View console.profile() results in the Performance panel for Node.js",!0),i.Runtime.experiments.register("jsProfilerTemporarilyEnable","Enable JavaScript Profiler temporarily",!1,"https://developer.chrome.com/blog/js-profiler-deprecation/","https://bugs.chromium.org/p/chromium/issues/detail?id=1354548"),i.Runtime.experiments.register("wasmDWARFDebugging","WebAssembly Debugging: Enable DWARF support",void 0,"https://developer.chrome.com/blog/wasm-debugging-2020/"),i.Runtime.experiments.register("evaluateExpressionsWithSourceMaps","Resolve variable names in expressions using source maps",void 0),i.Runtime.experiments.register("instrumentationBreakpoints","Enable instrumentation breakpoints",!0),i.Runtime.experiments.register("setAllBreakpointsEagerly","Set all breakpoints eagerly at startup",!0),i.Runtime.experiments.register("dualScreenSupport","Emulation: Support dual screen mode",void 0,"https://developer.chrome.com/blog/new-in-devtools-89#dual-screen"),i.Runtime.experiments.setEnabled("dualScreenSupport",!0),i.Runtime.experiments.register("APCA","Enable new Advanced Perceptual Contrast Algorithm (APCA) replacing previous contrast ratio and AA/AAA guidelines",void 0,"https://developer.chrome.com/blog/new-in-devtools-89/#apca"),i.Runtime.experiments.register("fullAccessibilityTree","Enable full accessibility tree view in the Elements panel",void 0,"https://developer.chrome.com/blog/new-in-devtools-90/#accesibility-tree","https://g.co/devtools/a11y-tree-feedback"),i.Runtime.experiments.register("fontEditor","Enable new Font Editor tool within the Styles Pane.",void 0,"https://developer.chrome.com/blog/new-in-devtools-89/#font"),i.Runtime.experiments.register("contrastIssues","Enable automatic contrast issue reporting via the Issues panel",void 0,"https://developer.chrome.com/blog/new-in-devtools-90/#low-contrast"),i.Runtime.experiments.register("experimentalCookieFeatures","Enable experimental cookie features"),i.Runtime.experiments.register("cssTypeComponentLength","Enable CSS authoring tool in the Styles pane",void 0,"https://developer.chrome.com/blog/new-in-devtools-96/#length","https://g.co/devtools/length-feedback"),i.Runtime.experiments.register(i.Runtime.ExperimentName.PRECISE_CHANGES,"Display more precise changes in the Changes tab"),i.Runtime.experiments.register(i.Runtime.ExperimentName.STYLES_PANE_CSS_CHANGES,"Sync CSS changes in the Styles pane"),i.Runtime.experiments.register(i.Runtime.ExperimentName.HIGHLIGHT_ERRORS_ELEMENTS_PANEL,"Highlights a violating node or attribute in the Elements panel DOM tree"),i.Runtime.experiments.register(i.Runtime.ExperimentName.HEADER_OVERRIDES,"Local overrides for response headers"),i.Runtime.experiments.register(i.Runtime.ExperimentName.EYEDROPPER_COLOR_PICKER,"Enable color picking outside the browser window"),i.Runtime.experiments.register(i.Runtime.ExperimentName.AUTHORED_DEPLOYED_GROUPING,"Group sources into Authored and Deployed trees",void 0,"https://goo.gle/authored-deployed","https://goo.gle/authored-deployed-feedback"),i.Runtime.experiments.register(i.Runtime.ExperimentName.JUST_MY_CODE,"Hide ignore-listed code in sources tree view"),i.Runtime.experiments.register(i.Runtime.ExperimentName.IMPORTANT_DOM_PROPERTIES,"Highlight important DOM properties in the Object Properties viewer"),i.Runtime.experiments.register(i.Runtime.ExperimentName.PRELOADING_STATUS_PANEL,"Enable Preloading Status Panel in Application panel",!0),i.Runtime.experiments.register(i.Runtime.ExperimentName.DISABLE_COLOR_FORMAT_SETTING,"Disable the deprecated `Color format` setting (requires reloading DevTools)",!1),i.Runtime.experiments.register(i.Runtime.ExperimentName.OUTERMOST_TARGET_SELECTOR,"Enable background page selector (e.g. for prerendering debugging)",!1),i.Runtime.experiments.enableExperimentsByDefault(["sourceOrderViewer","cssTypeComponentLength",i.Runtime.ExperimentName.PRECISE_CHANGES,..."EyeDropper"in window?[i.Runtime.ExperimentName.EYEDROPPER_COLOR_PICKER]:[],"keyboardShortcutEditor","sourcesPrettyPrint",i.Runtime.ExperimentName.DISABLE_COLOR_FORMAT_SETTING,i.Runtime.ExperimentName.TIMELINE_AS_CONSOLE_PROFILE_RESULT_PANEL,i.Runtime.ExperimentName.WASM_DWARF_DEBUGGING,i.Runtime.ExperimentName.HEADER_OVERRIDES]),i.Runtime.experiments.setNonConfigurableExperiments([..."EyeDropper"in window?[]:[i.Runtime.ExperimentName.EYEDROPPER_COLOR_PICKER]]),i.Runtime.experiments.cleanUpStaleExperiments();const e=i.Runtime.Runtime.queryParam("enabledExperiments");if(e&&i.Runtime.experiments.setServerEnabledExperiments(e.split(";")),i.Runtime.experiments.enableExperimentsTransiently(["bfcacheDisplayTree","webauthnPane","developerResourcesView"]),n.InspectorFrontendHost.isUnderTest()){const e=i.Runtime.Runtime.queryParam("test");e&&e.includes("live-line-level-heap-profile.js")&&i.Runtime.experiments.enableForTest("liveHeapProfile")}for(const e of i.Runtime.experiments.enabledExperiments())n.userMetrics.experimentEnabledAtLaunch(e.name)}async#x(){R.time("Main._createAppUI"),self.UI.viewManager=x.ViewManager.ViewManager.instance(),self.Persistence.isolatedFileSystemManager=g.IsolatedFileSystemManager.IsolatedFileSystemManager.instance();const o=t.Settings.Settings.instance().createSetting("uiTheme","systemPreferred");x.UIUtils.initializeUIUtils(document),v.ThemeSupport.hasInstance()||v.ThemeSupport.instance({forceNew:!0,setting:o}),v.ThemeSupport.instance().applyTheme(document);const r=()=>{v.ThemeSupport.instance().applyTheme(document)},s=window.matchMedia("(prefers-color-scheme: dark)"),h=window.matchMedia("(forced-colors: active)");s.addEventListener("change",r),h.addEventListener("change",r),o.addChangeListener(r),x.UIUtils.installComponentRootStyles(document.body),this.#E(document);const f=Boolean(i.Runtime.Runtime.queryParam("can_dock"));self.UI.zoomManager=x.ZoomManager.ZoomManager.instance({forceNew:!0,win:window,frontendHost:n.InspectorFrontendHost.InspectorFrontendHostInstance}),self.UI.inspectorView=x.InspectorView.InspectorView.instance(),x.ContextMenu.ContextMenu.initialize(),x.ContextMenu.ContextMenu.installHandler(document),m.NetworkLog.NetworkLog.instance(),e.FrameManager.FrameManager.instance(),m.LogManager.LogManager.instance(),d.IssuesManager.IssuesManager.instance({forceNew:!0,ensureFirst:!0,showThirdPartyIssuesSetting:d.Issue.getShowThirdPartyIssuesSetting(),hideIssueSetting:d.IssuesManager.getHideIssueByCodeSetting()}),d.ContrastCheckTrigger.ContrastCheckTrigger.instance(),self.UI.dockController=x.DockController.DockController.instance({forceNew:!0,canDock:f}),self.SDK.multitargetNetworkManager=e.NetworkManager.MultitargetNetworkManager.instance({forceNew:!0}),self.SDK.domDebuggerManager=e.DOMDebuggerModel.DOMDebuggerManager.instance({forceNew:!0}),e.TargetManager.TargetManager.instance().addEventListener(e.TargetManager.Events.SuspendStateChanged,this.#I.bind(this)),self.Workspace.fileManager=p.FileManager.FileManager.instance({forceNew:!0}),self.Workspace.workspace=p.Workspace.WorkspaceImpl.instance(),self.Bindings.networkProjectManager=a.NetworkProject.NetworkProjectManager.instance();const w=new a.ResourceMapping.ResourceMapping(e.TargetManager.TargetManager.instance(),p.Workspace.WorkspaceImpl.instance());self.Bindings.resourceMapping=w,new a.PresentationConsoleMessageHelper.PresentationConsoleMessageManager,self.Bindings.cssWorkspaceBinding=a.CSSWorkspaceBinding.CSSWorkspaceBinding.instance({forceNew:!0,resourceMapping:w,targetManager:e.TargetManager.TargetManager.instance()}),self.Bindings.debuggerWorkspaceBinding=a.DebuggerWorkspaceBinding.DebuggerWorkspaceBinding.instance({forceNew:!0,resourceMapping:w,targetManager:e.TargetManager.TargetManager.instance()}),e.TargetManager.TargetManager.instance().setScopeTarget(e.TargetManager.TargetManager.instance().primaryPageTarget()),x.Context.Context.instance().addFlavorChangeListener(e.Target.Target,(({data:t})=>{const n=t?.outermostTarget();e.TargetManager.TargetManager.instance().setScopeTarget(n)})),self.Bindings.breakpointManager=l.BreakpointManager.BreakpointManager.instance({forceNew:!0,workspace:p.Workspace.WorkspaceImpl.instance(),targetManager:e.TargetManager.TargetManager.instance(),debuggerWorkspaceBinding:a.DebuggerWorkspaceBinding.DebuggerWorkspaceBinding.instance()}),self.Extensions.extensionServer=c.ExtensionServer.ExtensionServer.instance({forceNew:!0}),new g.FileSystemWorkspaceBinding.FileSystemWorkspaceBinding(g.IsolatedFileSystemManager.IsolatedFileSystemManager.instance(),p.Workspace.WorkspaceImpl.instance()),g.IsolatedFileSystemManager.IsolatedFileSystemManager.instance().addPlatformFileSystem("snippet://",new u.ScriptSnippetFileSystem.SnippetFileSystem),self.Persistence.persistence=g.Persistence.PersistenceImpl.instance({forceNew:!0,workspace:p.Workspace.WorkspaceImpl.instance(),breakpointManager:l.BreakpointManager.BreakpointManager.instance()}),self.Persistence.networkPersistenceManager=g.NetworkPersistenceManager.NetworkPersistenceManager.instance({forceNew:!0,workspace:p.Workspace.WorkspaceImpl.instance()}),self.Host.Platform=n.Platform,new E(e.TargetManager.TargetManager.instance(),x.Context.Context.instance()),self.Bindings.ignoreListManager=a.IgnoreListManager.IgnoreListManager.instance({forceNew:!0,debuggerWorkspaceBinding:a.DebuggerWorkspaceBinding.DebuggerWorkspaceBinding.instance()}),new _;const S=x.ActionRegistry.ActionRegistry.instance({forceNew:!0});self.UI.actionRegistry=S,self.UI.shortcutRegistry=x.ShortcutRegistry.ShortcutRegistry.instance({forceNew:!0,actionRegistry:S}),this.#b(),R.timeEnd("Main._createAppUI");const I=t.AppProvider.getRegisteredAppProviders()[0];if(!I)throw new Error("Unable to boot DevTools, as the appprovider is missing");await this.#M(await I.loadAppProvider())}async#M(e){R.time("Main._showAppUI");const t=e.createApp();x.DockController.DockController.instance().initialize(),t.presentUI(document);const o=x.ActionRegistry.ActionRegistry.instance().action("elements.toggle-element-search");o&&n.InspectorFrontendHost.InspectorFrontendHostInstance.events.addEventListener(n.InspectorFrontendHostAPI.Events.EnterInspectElementMode,(()=>{o.execute()}),this),n.InspectorFrontendHost.InspectorFrontendHostInstance.events.addEventListener(n.InspectorFrontendHostAPI.Events.RevealSourceLine,this.#T,this),await x.InspectorView.InspectorView.instance().createToolbars(),n.InspectorFrontendHost.InspectorFrontendHostInstance.loadCompleted();const r=i.Runtime.Runtime.queryParam("loadTimelineFromURL");null!==r&&h.TimelinePanel.LoadTimelineHandler.instance().handleQueryParam(r),x.ARIAUtils.alertElementInstance(),x.DockController.DockController.instance().announceDockLocation(),window.setTimeout(this.#R.bind(this),0),R.timeEnd("Main._showAppUI")}async#R(){R.time("Main._initializeTarget");for(const e of t.Runnable.earlyInitializationRunnables())await e().run();n.InspectorFrontendHost.InspectorFrontendHostInstance.readyForTest(),this.#f(),window.setTimeout(this.#C.bind(this),100),R.timeEnd("Main._initializeTarget")}#C(){R.time("Main._lateInitialization"),c.ExtensionServer.ExtensionServer.instance().initializeExtensions();const e=t.Runnable.lateInitializationRunnables().map((async e=>(await e()).run()));if(i.Runtime.experiments.isEnabled("liveHeapProfile")){const n="memoryLiveHeapProfile";if(t.Settings.Settings.instance().moduleSetting(n).get())e.push(w.LiveHeapProfile.LiveHeapProfile.instance().run());else{const e=async o=>{o.data&&(t.Settings.Settings.instance().moduleSetting(n).removeChangeListener(e),w.LiveHeapProfile.LiveHeapProfile.instance().run())};t.Settings.Settings.instance().moduleSetting(n).addChangeListener(e)}}this.#u=Promise.all(e).then((()=>{})),R.timeEnd("Main._lateInitialization")}lateInitDonePromiseForTest(){return this.#u}readyForTest(){return this.#h}#b(){t.Console.Console.instance().addEventListener(t.Console.Events.MessageAdded,(function({data:e}){e.show&&t.Console.Console.instance().show()}))}#T(e){const{url:n,lineNumber:o,columnNumber:r}=e.data,s=p.Workspace.WorkspaceImpl.instance().uiSourceCodeForURL(n);s?t.Revealer.reveal(s.uiLocation(o,r)):p.Workspace.WorkspaceImpl.instance().addEventListener(p.Workspace.Events.UISourceCodeAdded,(function e(s){const i=s.data;i.url()===n&&(t.Revealer.reveal(i.uiLocation(o,r)),p.Workspace.WorkspaceImpl.instance().removeEventListener(p.Workspace.Events.UISourceCodeAdded,e))}))}#k(e){e.handled||x.ShortcutRegistry.ShortcutRegistry.instance().handleShortcut(e)}#D(e){const t=new CustomEvent("clipboard-"+e.type,{bubbles:!0});t.original=e;const n=e.target&&e.target.ownerDocument,o=n?r.DOMUtilities.deepActiveElement(n):null;o&&o.dispatchEvent(t),t.handled&&e.preventDefault()}#P(e){(e.handled||e.target.classList.contains("popup-glasspane"))&&e.preventDefault()}#E(e){e.addEventListener("keydown",this.#k.bind(this),!1),e.addEventListener("beforecopy",this.#D.bind(this),!0),e.addEventListener("copy",this.#D.bind(this),!1),e.addEventListener("cut",this.#D.bind(this),!1),e.addEventListener("paste",this.#D.bind(this),!1),e.addEventListener("contextmenu",this.#P.bind(this),!0)}#I(){const t=e.TargetManager.TargetManager.instance().allTargetsSuspended();x.InspectorView.InspectorView.instance().onSuspendStateChanged(t)}static instanceForTest=null}let C,k,D,P,y;globalThis.Main=globalThis.Main||{},globalThis.Main.Main=R;class L{static instance(e={forceNew:null}){const{forceNew:t}=e;return C&&!t||(C=new L),C}handleAction(e,t){if(n.InspectorFrontendHost.InspectorFrontendHostInstance.isHostedMode())return!1;switch(t){case"main.zoom-in":return n.InspectorFrontendHost.InspectorFrontendHostInstance.zoomIn(),!0;case"main.zoom-out":return n.InspectorFrontendHost.InspectorFrontendHostInstance.zoomOut(),!0;case"main.zoom-reset":return n.InspectorFrontendHost.InspectorFrontendHostInstance.resetZoom(),!0}return!1}}class F{static instance(e={forceNew:null}){const{forceNew:t}=e;return k&&!t||(k=new F),k}handleAction(e,t){let n=x.SearchableView.SearchableView.fromElement(r.DOMUtilities.deepActiveElement(document));if(!n){const e=x.InspectorView.InspectorView.instance().currentPanelDeprecated();if(e&&e.searchableView&&(n=e.searchableView()),!n)return!1}switch(t){case"main.search-in-panel.find":return n.handleFindShortcut();case"main.search-in-panel.cancel":return n.handleCancelSearchShortcut();case"main.search-in-panel.find-next":return n.handleFindNextShortcut();case"main.search-in-panel.find-previous":return n.handleFindPreviousShortcut()}return!1}}class A{#y;constructor(){this.#y=new x.Toolbar.ToolbarMenuButton(this.#L.bind(this),!0),this.#y.element.classList.add("main-menu"),this.#y.setTitle(T(b.customizeAndControlDevtools))}static instance(e={forceNew:null}){const{forceNew:t}=e;return D&&!t||(D=new A),D}item(){return this.#y}#L(t){if(x.DockController.DockController.instance().canDock()){const e=document.createElement("div");e.classList.add("flex-centered"),e.classList.add("flex-auto"),e.classList.add("location-menu"),e.tabIndex=-1,x.ARIAUtils.setLabel(e,b.dockSide+b.dockSideNaviation);const n=e.createChild("span","dockside-title");n.textContent=T(b.dockSide);const o=x.ShortcutRegistry.ShortcutRegistry.instance().shortcutsForAction("main.toggle-dock");x.Tooltip.Tooltip.install(n,T(b.placementOfDevtoolsRelativeToThe,{PH1:o[0].title()})),e.appendChild(n);const i=new x.Toolbar.Toolbar("",e);i.makeBlueOnHover();const a=new x.Toolbar.ToolbarToggle(T(b.undockIntoSeparateWindow),"dock-window"),l=new x.Toolbar.ToolbarToggle(T(b.dockToBottom),"dock-bottom"),c=new x.Toolbar.ToolbarToggle(T(b.dockToRight),"dock-right"),d=new x.Toolbar.ToolbarToggle(T(b.dockToLeft),"dock-left");a.addEventListener(x.Toolbar.ToolbarButton.Events.MouseDown,(e=>e.data.consume())),l.addEventListener(x.Toolbar.ToolbarButton.Events.MouseDown,(e=>e.data.consume())),c.addEventListener(x.Toolbar.ToolbarButton.Events.MouseDown,(e=>e.data.consume())),d.addEventListener(x.Toolbar.ToolbarButton.Events.MouseDown,(e=>e.data.consume())),a.addEventListener(x.Toolbar.ToolbarButton.Events.Click,s.bind(null,"undocked")),l.addEventListener(x.Toolbar.ToolbarButton.Events.Click,s.bind(null,"bottom")),c.addEventListener(x.Toolbar.ToolbarButton.Events.Click,s.bind(null,"right")),d.addEventListener(x.Toolbar.ToolbarButton.Events.Click,s.bind(null,"left")),a.setToggled("undocked"===x.DockController.DockController.instance().dockSide()),l.setToggled("bottom"===x.DockController.DockController.instance().dockSide()),c.setToggled("right"===x.DockController.DockController.instance().dockSide()),d.setToggled("left"===x.DockController.DockController.instance().dockSide()),i.appendToolbarItem(a),i.appendToolbarItem(d),i.appendToolbarItem(l),i.appendToolbarItem(c),e.addEventListener("keydown",(t=>{let n=0;if("ArrowLeft"===t.key)n=-1;else{if("ArrowRight"!==t.key){if("ArrowDown"===t.key){return void e.closest(".soft-context-menu")?.dispatchEvent(new KeyboardEvent("keydown",{key:"ArrowDown"}))}return}n=1}const o=[a,d,l,c];let s=o.findIndex((e=>e.element.hasFocus()));s=r.NumberUtilities.clamp(s+n,0,o.length-1),o[s].element.focus(),t.consume(!0)})),t.headerSection().appendCustomItem(e)}const o=this.#y.element;function s(e){x.DockController.DockController.instance().once("AfterDockSideChanged").then((()=>{o.focus()})),x.DockController.DockController.instance().setDockSide(e),t.discard()}if("undocked"===x.DockController.DockController.instance().dockSide()){const n=e.TargetManager.TargetManager.instance().primaryPageTarget();n&&n.type()===e.Target.Type.Frame&&t.defaultSection().appendAction("inspector_main.focus-debuggee",T(b.focusDebuggee))}t.defaultSection().appendAction("main.toggle-drawer",x.InspectorView.InspectorView.instance().drawerVisible()?T(b.hideConsoleDrawer):T(b.showConsoleDrawer)),t.appendItemsAtLocation("mainMenu");const i=t.defaultSection().appendSubMenuItem(T(b.moreTools)),a=x.ViewManager.getRegisteredViewExtensions();a.sort(((e,t)=>{const n=e.title(),o=t.title();return n.localeCompare(o)}));for(const e of a){const t=e.location(),o=e.persistence(),r=e.title(),s=e.viewId();if("issues-pane"!==s){if("closeable"===o&&("drawer-view"===t||"panel"===t))if(e.isPreviewFeature()){const e=new f.Icon.Icon;e.data={iconName:"experiment",color:"var(--icon-default)",width:"16px",height:"16px"},i.defaultSection().appendItem(r,(()=>{x.ViewManager.ViewManager.instance().showView(s,!0,!1)}),!1,e)}else i.defaultSection().appendItem(r,(()=>{x.ViewManager.ViewManager.instance().showView(s,!0,!1)}))}else i.defaultSection().appendItem(r,(()=>{n.userMetrics.issuesPanelOpenedFrom(n.UserMetrics.IssueOpener.HamburgerMenu),x.ViewManager.ViewManager.instance().showView("issues-pane",!0)}))}t.footerSection().appendSubMenuItem(T(b.help)).appendItemsAtLocation("mainMenuHelp")}}class N{#F;constructor(){this.#F=x.Toolbar.Toolbar.createActionButtonForId("settings.show",{showLabel:!1,userActionCode:void 0})}static instance(e={forceNew:null}){const{forceNew:t}=e;return P&&!t||(P=new N),P}item(){return this.#F}}class _{constructor(){e.TargetManager.TargetManager.instance().addModelListener(e.DebuggerModel.DebuggerModel,e.DebuggerModel.Events.DebuggerPaused,this.#A,this)}#A(n){e.TargetManager.TargetManager.instance().removeModelListener(e.DebuggerModel.DebuggerModel,e.DebuggerModel.Events.DebuggerPaused,this.#A,this);const o=n.data,r=o.debuggerPausedDetails();x.Context.Context.instance().setFlavor(e.Target.Target,o.target()),t.Revealer.reveal(r)}}class H{static instance(e={forceNew:null}){const{forceNew:t}=e;return y&&!t||(y=new H),y}handleAction(e,t){return"main.debug-reload"===t&&(S.Reload.reload(),!0)}}var O=Object.freeze({__proto__:null,MainImpl:R,ZoomActionDelegate:L,SearchActionDelegate:F,MainMenuItem:A,SettingsButtonProvider:N,PauseListener:_,sendOverProtocol:function(e,t){return new Promise(((n,o)=>{const r=s.InspectorBackend.test.sendRawMessage;if(!r)return o("Unable to send message to test client");r(e,t,((e,...t)=>e?o(e):n(t)))}))},ReloadActionDelegate:H});class U{presentUI(e){const t=new x.RootView.RootView;x.InspectorView.InspectorView.instance().show(t.element),t.attachToDocument(e),t.focus()}}let B;class V{static instance(e={forceNew:null}){const{forceNew:t}=e;return B&&!t||(B=new V),B}createApp(){return new U}}var W=Object.freeze({__proto__:null,SimpleApp:U,SimpleAppProvider:V});export{I as ExecutionContextSelector,O as MainImpl,W as SimpleApp}; +import*as e from"../../core/sdk/sdk.js";import*as t from"../../core/common/common.js";import*as n from"../../core/host/host.js";import*as o from"../../core/i18n/i18n.js";import*as r from"../../core/platform/platform.js";import*as s from"../../core/protocol_client/protocol_client.js";import*as i from"../../core/root/root.js";import*as a from"../../models/bindings/bindings.js";import*as l from"../../models/breakpoints/breakpoints.js";import*as c from"../../models/extensions/extensions.js";import*as d from"../../models/issues_manager/issues_manager.js";import*as g from"../../models/logs/logs.js";import*as m from"../../models/persistence/persistence.js";import*as p from"../../models/workspace/workspace.js";import*as u from"../../panels/snippets/snippets.js";import*as h from"../../panels/timeline/timeline.js";import*as f from"../../ui/components/icon_button/icon_button.js";import*as w from"../../ui/legacy/components/perf_ui/perf_ui.js";import*as S from"../../ui/legacy/components/utils/utils.js";import*as x from"../../ui/legacy/legacy.js";import*as v from"../../ui/legacy/theme_support/theme_support.js";class E{#e;#t;#n;#o;constructor(t,n){n.addFlavorChangeListener(e.RuntimeModel.ExecutionContext,this.#r,this),n.addFlavorChangeListener(e.Target.Target,this.#s,this),t.addModelListener(e.RuntimeModel.RuntimeModel,e.RuntimeModel.Events.ExecutionContextCreated,this.#i,this),t.addModelListener(e.RuntimeModel.RuntimeModel,e.RuntimeModel.Events.ExecutionContextDestroyed,this.#a,this),t.addModelListener(e.RuntimeModel.RuntimeModel,e.RuntimeModel.Events.ExecutionContextOrderChanged,this.#l,this),this.#e=t,this.#t=n,t.observeModels(e.RuntimeModel.RuntimeModel,this)}modelAdded(t){queueMicrotask(function(){this.#t.flavor(e.Target.Target)||this.#t.setFlavor(e.Target.Target,t.target())}.bind(this))}modelRemoved(t){const n=this.#t.flavor(e.RuntimeModel.ExecutionContext);n&&n.runtimeModel===t&&this.#c();const o=this.#e.models(e.RuntimeModel.RuntimeModel);this.#t.flavor(e.Target.Target)===t.target()&&o.length&&this.#t.setFlavor(e.Target.Target,o[0].target())}#r({data:t}){t&&(this.#t.setFlavor(e.Target.Target,t.target()),this.#o||(this.#n=this.#d(t)))}#d(e){return e.isDefault?e.target().name()+":"+e.frameId:""}#s({data:t}){const n=this.#t.flavor(e.RuntimeModel.ExecutionContext);if(!t||n&&n.target()===t)return;const o=t.model(e.RuntimeModel.RuntimeModel),r=o?o.executionContexts():[];if(!r.length)return;let s=null;for(let e=0;e{this.#f=e})),this.#w()}static time(e){n.InspectorFrontendHost.isUnderTest()||console.time(e)}static timeEnd(e){n.InspectorFrontendHost.isUnderTest()||console.timeEnd(e)}async#w(){console.timeStamp("Main._loaded"),i.Runtime.Runtime.setPlatform(n.Platform.platform());const e=await new Promise((e=>{n.InspectorFrontendHost.InspectorFrontendHostInstance.getPreferences(e)}));console.timeStamp("Main._gotPreferences"),this.#S(),this.createSettings(e),await this.requestAndRegisterLocaleData(),n.userMetrics.syncSetting(t.Settings.Settings.instance().moduleSetting("sync_preferences").get()),this.#x()}#S(){self.Common=self.Common||{},self.UI=self.UI||{},self.UI.panels=self.UI.panels||{},self.SDK=self.SDK||{},self.Bindings=self.Bindings||{},self.Persistence=self.Persistence||{},self.Workspace=self.Workspace||{},self.Extensions=self.Extensions||{},self.Host=self.Host||{},self.Host.userMetrics=self.Host.userMetrics||n.userMetrics,self.Host.UserMetrics=self.Host.UserMetrics||n.UserMetrics,self.ProtocolClient=self.ProtocolClient||{},self.ProtocolClient.test=self.ProtocolClient.test||s.InspectorBackend.test}async requestAndRegisterLocaleData(){const e=t.Settings.Settings.instance().moduleSetting("language").get(),r=o.DevToolsLocale.DevToolsLocale.instance({create:!0,data:{navigatorLanguage:navigator.language,settingLanguage:e,lookupClosestDevToolsLocale:o.i18n.lookupClosestSupportedDevToolsLocale}});n.userMetrics.language(r.locale),"en-US"!==r.locale&&await o.i18n.fetchAndRegisterLocaleData("en-US");try{await o.i18n.fetchAndRegisterLocaleData(r.locale)}catch(e){console.warn(`Unable to fetch & register locale data for '${r.locale}', falling back to 'en-US'. Cause: `,e),r.forceFallbackLocale()}}createSettings(e){this.#v();let o,r="";if(n.Platform.isCustomDevtoolsFrontend()?r="__custom__":i.Runtime.Runtime.queryParam("can_dock")||!Boolean(i.Runtime.Runtime.queryParam("debugFrontend"))||n.InspectorFrontendHost.isUnderTest()||(r="__bundled__"),!n.InspectorFrontendHost.isUnderTest()&&window.localStorage){const e={...t.Settings.NOOP_STORAGE,clear:()=>window.localStorage.clear()};o=new t.Settings.SettingsStorage(window.localStorage,e,r)}else o=new t.Settings.SettingsStorage({},t.Settings.NOOP_STORAGE,r);const s={register:e=>n.InspectorFrontendHost.InspectorFrontendHostInstance.registerPreference(e,{synced:!1}),set:n.InspectorFrontendHost.InspectorFrontendHostInstance.setPreference,get:e=>new Promise((t=>{n.InspectorFrontendHost.InspectorFrontendHostInstance.getPreference(e,t)})),remove:n.InspectorFrontendHost.InspectorFrontendHostInstance.removePreference,clear:n.InspectorFrontendHost.InspectorFrontendHostInstance.clearPreferences},a={...s,register:e=>n.InspectorFrontendHost.InspectorFrontendHostInstance.registerPreference(e,{synced:!0})},l=new t.Settings.SettingsStorage(e,a,r),c=new t.Settings.SettingsStorage(e,s,r);t.Settings.Settings.instance({forceNew:!0,syncedStorage:l,globalStorage:c,localStorage:o}),self.Common.settings=t.Settings.Settings.instance(),n.InspectorFrontendHost.isUnderTest()||(new t.Settings.VersionController).updateVersion()}#v(){i.Runtime.experiments.register("applyCustomStylesheet","Allow extensions to load custom stylesheets"),i.Runtime.experiments.register("captureNodeCreationStacks","Capture node creation stacks"),i.Runtime.experiments.register("sourcesPrettyPrint","Automatically pretty print minified sources"),i.Runtime.experiments.register("ignoreListJSFramesOnTimeline","Ignore List for JavaScript frames on Timeline",!0),i.Runtime.experiments.register("liveHeapProfile","Live heap profile",!0),i.Runtime.experiments.register("protocolMonitor","Protocol Monitor",void 0,"https://developer.chrome.com/blog/new-in-devtools-92/#protocol-monitor"),i.Runtime.experiments.register("developerResourcesView","Show developer resources view"),i.Runtime.experiments.register("cspViolationsView","Show CSP Violations view",void 0,"https://developer.chrome.com/blog/new-in-devtools-89/#csp"),i.Runtime.experiments.register("samplingHeapProfilerTimeline","Sampling heap profiler timeline",!0),i.Runtime.experiments.register("showOptionToExposeInternalsInHeapSnapshot","Show option to expose internals in heap snapshots"),i.Runtime.experiments.register("sourceOrderViewer","Source order viewer",void 0,"https://developer.chrome.com/blog/new-in-devtools-92/#source-order"),i.Runtime.experiments.register("webauthnPane","WebAuthn Pane"),i.Runtime.experiments.register("keyboardShortcutEditor","Enable keyboard shortcut editor",!1,"https://developer.chrome.com/blog/new-in-devtools-88/#keyboard-shortcuts"),i.Runtime.experiments.register("bfcacheDisplayTree","Show back/forward cache blocking reasons in the frame tree structure view"),i.Runtime.experiments.register("timelineEventInitiators","Timeline: event initiators"),i.Runtime.experiments.register("timelineInvalidationTracking","Timeline: invalidation tracking",!0),i.Runtime.experiments.register("timelineShowAllEvents","Timeline: show all events",!0),i.Runtime.experiments.register("timelineV8RuntimeCallStats","Timeline: V8 Runtime Call Stats on Timeline",!0),i.Runtime.experiments.register("timelineAsConsoleProfileResultPanel","View console.profile() results in the Performance panel for Node.js",!0),i.Runtime.experiments.register("wasmDWARFDebugging","WebAssembly Debugging: Enable DWARF support",void 0,"https://developer.chrome.com/blog/wasm-debugging-2020/"),i.Runtime.experiments.register("evaluateExpressionsWithSourceMaps","Resolve variable names in expressions using source maps",void 0),i.Runtime.experiments.register("instrumentationBreakpoints","Enable instrumentation breakpoints",!0),i.Runtime.experiments.register("setAllBreakpointsEagerly","Set all breakpoints eagerly at startup",!0),i.Runtime.experiments.register("dualScreenSupport","Emulation: Support dual screen mode",void 0,"https://developer.chrome.com/blog/new-in-devtools-89#dual-screen"),i.Runtime.experiments.setEnabled("dualScreenSupport",!0),i.Runtime.experiments.register("APCA","Enable new Advanced Perceptual Contrast Algorithm (APCA) replacing previous contrast ratio and AA/AAA guidelines",void 0,"https://developer.chrome.com/blog/new-in-devtools-89/#apca"),i.Runtime.experiments.register("fullAccessibilityTree","Enable full accessibility tree view in the Elements panel",void 0,"https://developer.chrome.com/blog/new-in-devtools-90/#accesibility-tree","https://g.co/devtools/a11y-tree-feedback"),i.Runtime.experiments.register("fontEditor","Enable new Font Editor tool within the Styles Pane.",void 0,"https://developer.chrome.com/blog/new-in-devtools-89/#font"),i.Runtime.experiments.register("contrastIssues","Enable automatic contrast issue reporting via the Issues panel",void 0,"https://developer.chrome.com/blog/new-in-devtools-90/#low-contrast"),i.Runtime.experiments.register("experimentalCookieFeatures","Enable experimental cookie features"),i.Runtime.experiments.register("cssTypeComponentLength","Enable CSS authoring tool in the Styles pane",void 0,"https://developer.chrome.com/blog/new-in-devtools-96/#length","https://g.co/devtools/length-feedback"),i.Runtime.experiments.register(i.Runtime.ExperimentName.PRECISE_CHANGES,"Display more precise changes in the Changes tab"),i.Runtime.experiments.register(i.Runtime.ExperimentName.STYLES_PANE_CSS_CHANGES,"Sync CSS changes in the Styles pane"),i.Runtime.experiments.register(i.Runtime.ExperimentName.HIGHLIGHT_ERRORS_ELEMENTS_PANEL,"Highlights a violating node or attribute in the Elements panel DOM tree"),i.Runtime.experiments.register(i.Runtime.ExperimentName.HEADER_OVERRIDES,"Local overrides for response headers"),i.Runtime.experiments.register(i.Runtime.ExperimentName.EYEDROPPER_COLOR_PICKER,"Enable color picking outside the browser window"),i.Runtime.experiments.register(i.Runtime.ExperimentName.AUTHORED_DEPLOYED_GROUPING,"Group sources into Authored and Deployed trees",void 0,"https://goo.gle/authored-deployed","https://goo.gle/authored-deployed-feedback"),i.Runtime.experiments.register(i.Runtime.ExperimentName.JUST_MY_CODE,"Hide ignore-listed code in sources tree view"),i.Runtime.experiments.register(i.Runtime.ExperimentName.IMPORTANT_DOM_PROPERTIES,"Highlight important DOM properties in the Object Properties viewer"),i.Runtime.experiments.register(i.Runtime.ExperimentName.PRELOADING_STATUS_PANEL,"Enable Preloading Status Panel in Application panel",!0),i.Runtime.experiments.register(i.Runtime.ExperimentName.DISABLE_COLOR_FORMAT_SETTING,"Disable the deprecated `Color format` setting (requires reloading DevTools)",!1),i.Runtime.experiments.register(i.Runtime.ExperimentName.OUTERMOST_TARGET_SELECTOR,"Enable background page selector (e.g. for prerendering debugging)",!1),i.Runtime.experiments.enableExperimentsByDefault(["sourceOrderViewer","cssTypeComponentLength",i.Runtime.ExperimentName.PRECISE_CHANGES,..."EyeDropper"in window?[i.Runtime.ExperimentName.EYEDROPPER_COLOR_PICKER]:[],"keyboardShortcutEditor","sourcesPrettyPrint",i.Runtime.ExperimentName.DISABLE_COLOR_FORMAT_SETTING,i.Runtime.ExperimentName.TIMELINE_AS_CONSOLE_PROFILE_RESULT_PANEL,i.Runtime.ExperimentName.WASM_DWARF_DEBUGGING,i.Runtime.ExperimentName.HEADER_OVERRIDES]),i.Runtime.experiments.setNonConfigurableExperiments([..."EyeDropper"in window?[]:[i.Runtime.ExperimentName.EYEDROPPER_COLOR_PICKER]]),i.Runtime.experiments.cleanUpStaleExperiments();const e=i.Runtime.Runtime.queryParam("enabledExperiments");if(e&&i.Runtime.experiments.setServerEnabledExperiments(e.split(";")),i.Runtime.experiments.enableExperimentsTransiently(["bfcacheDisplayTree","webauthnPane","developerResourcesView"]),n.InspectorFrontendHost.isUnderTest()){const e=i.Runtime.Runtime.queryParam("test");e&&e.includes("live-line-level-heap-profile.js")&&i.Runtime.experiments.enableForTest("liveHeapProfile")}for(const e of i.Runtime.experiments.enabledExperiments())n.userMetrics.experimentEnabledAtLaunch(e.name)}async#x(){R.time("Main._createAppUI"),self.UI.viewManager=x.ViewManager.ViewManager.instance(),self.Persistence.isolatedFileSystemManager=m.IsolatedFileSystemManager.IsolatedFileSystemManager.instance();const o=t.Settings.Settings.instance().createSetting("uiTheme","systemPreferred");x.UIUtils.initializeUIUtils(document),v.ThemeSupport.hasInstance()||v.ThemeSupport.instance({forceNew:!0,setting:o}),v.ThemeSupport.instance().applyTheme(document);const r=()=>{v.ThemeSupport.instance().applyTheme(document)},s=window.matchMedia("(prefers-color-scheme: dark)"),h=window.matchMedia("(forced-colors: active)");s.addEventListener("change",r),h.addEventListener("change",r),o.addChangeListener(r),x.UIUtils.installComponentRootStyles(document.body),this.#E(document);const f=Boolean(i.Runtime.Runtime.queryParam("can_dock"));self.UI.zoomManager=x.ZoomManager.ZoomManager.instance({forceNew:!0,win:window,frontendHost:n.InspectorFrontendHost.InspectorFrontendHostInstance}),self.UI.inspectorView=x.InspectorView.InspectorView.instance(),x.ContextMenu.ContextMenu.initialize(),x.ContextMenu.ContextMenu.installHandler(document),g.NetworkLog.NetworkLog.instance(),e.FrameManager.FrameManager.instance(),g.LogManager.LogManager.instance(),d.IssuesManager.IssuesManager.instance({forceNew:!0,ensureFirst:!0,showThirdPartyIssuesSetting:d.Issue.getShowThirdPartyIssuesSetting(),hideIssueSetting:d.IssuesManager.getHideIssueByCodeSetting()}),d.ContrastCheckTrigger.ContrastCheckTrigger.instance(),self.UI.dockController=x.DockController.DockController.instance({forceNew:!0,canDock:f}),self.SDK.multitargetNetworkManager=e.NetworkManager.MultitargetNetworkManager.instance({forceNew:!0}),self.SDK.domDebuggerManager=e.DOMDebuggerModel.DOMDebuggerManager.instance({forceNew:!0}),e.TargetManager.TargetManager.instance().addEventListener(e.TargetManager.Events.SuspendStateChanged,this.#I.bind(this)),self.Workspace.fileManager=p.FileManager.FileManager.instance({forceNew:!0}),self.Workspace.workspace=p.Workspace.WorkspaceImpl.instance(),self.Bindings.networkProjectManager=a.NetworkProject.NetworkProjectManager.instance();const w=new a.ResourceMapping.ResourceMapping(e.TargetManager.TargetManager.instance(),p.Workspace.WorkspaceImpl.instance());self.Bindings.resourceMapping=w,new a.PresentationConsoleMessageHelper.PresentationConsoleMessageManager,self.Bindings.cssWorkspaceBinding=a.CSSWorkspaceBinding.CSSWorkspaceBinding.instance({forceNew:!0,resourceMapping:w,targetManager:e.TargetManager.TargetManager.instance()}),self.Bindings.debuggerWorkspaceBinding=a.DebuggerWorkspaceBinding.DebuggerWorkspaceBinding.instance({forceNew:!0,resourceMapping:w,targetManager:e.TargetManager.TargetManager.instance()}),e.TargetManager.TargetManager.instance().setScopeTarget(e.TargetManager.TargetManager.instance().primaryPageTarget()),x.Context.Context.instance().addFlavorChangeListener(e.Target.Target,(({data:t})=>{const n=t?.outermostTarget();e.TargetManager.TargetManager.instance().setScopeTarget(n)})),self.Bindings.breakpointManager=l.BreakpointManager.BreakpointManager.instance({forceNew:!0,workspace:p.Workspace.WorkspaceImpl.instance(),targetManager:e.TargetManager.TargetManager.instance(),debuggerWorkspaceBinding:a.DebuggerWorkspaceBinding.DebuggerWorkspaceBinding.instance()}),self.Extensions.extensionServer=c.ExtensionServer.ExtensionServer.instance({forceNew:!0}),new m.FileSystemWorkspaceBinding.FileSystemWorkspaceBinding(m.IsolatedFileSystemManager.IsolatedFileSystemManager.instance(),p.Workspace.WorkspaceImpl.instance()),m.IsolatedFileSystemManager.IsolatedFileSystemManager.instance().addPlatformFileSystem("snippet://",new u.ScriptSnippetFileSystem.SnippetFileSystem),self.Persistence.persistence=m.Persistence.PersistenceImpl.instance({forceNew:!0,workspace:p.Workspace.WorkspaceImpl.instance(),breakpointManager:l.BreakpointManager.BreakpointManager.instance()}),self.Persistence.networkPersistenceManager=m.NetworkPersistenceManager.NetworkPersistenceManager.instance({forceNew:!0,workspace:p.Workspace.WorkspaceImpl.instance()}),self.Host.Platform=n.Platform,new E(e.TargetManager.TargetManager.instance(),x.Context.Context.instance()),self.Bindings.ignoreListManager=a.IgnoreListManager.IgnoreListManager.instance({forceNew:!0,debuggerWorkspaceBinding:a.DebuggerWorkspaceBinding.DebuggerWorkspaceBinding.instance()}),new _;const S=x.ActionRegistry.ActionRegistry.instance({forceNew:!0});self.UI.actionRegistry=S,self.UI.shortcutRegistry=x.ShortcutRegistry.ShortcutRegistry.instance({forceNew:!0,actionRegistry:S}),this.#M(),R.timeEnd("Main._createAppUI");const I=t.AppProvider.getRegisteredAppProviders()[0];if(!I)throw new Error("Unable to boot DevTools, as the appprovider is missing");await this.#T(await I.loadAppProvider())}async#T(e){R.time("Main._showAppUI");const t=e.createApp();x.DockController.DockController.instance().initialize(),t.presentUI(document);const o=x.ActionRegistry.ActionRegistry.instance().action("elements.toggle-element-search");o&&n.InspectorFrontendHost.InspectorFrontendHostInstance.events.addEventListener(n.InspectorFrontendHostAPI.Events.EnterInspectElementMode,(()=>{o.execute()}),this),n.InspectorFrontendHost.InspectorFrontendHostInstance.events.addEventListener(n.InspectorFrontendHostAPI.Events.RevealSourceLine,this.#b,this),await x.InspectorView.InspectorView.instance().createToolbars(),n.InspectorFrontendHost.InspectorFrontendHostInstance.loadCompleted();const r=i.Runtime.Runtime.queryParam("loadTimelineFromURL");null!==r&&h.TimelinePanel.LoadTimelineHandler.instance().handleQueryParam(r),x.ARIAUtils.alertElementInstance(),x.DockController.DockController.instance().announceDockLocation(),window.setTimeout(this.#R.bind(this),0),R.timeEnd("Main._showAppUI")}async#R(){R.time("Main._initializeTarget");for(const e of t.Runnable.earlyInitializationRunnables())await e().run();n.InspectorFrontendHost.InspectorFrontendHostInstance.readyForTest(),this.#f(),window.setTimeout(this.#C.bind(this),100),R.timeEnd("Main._initializeTarget")}#C(){R.time("Main._lateInitialization"),c.ExtensionServer.ExtensionServer.instance().initializeExtensions();const e=t.Runnable.lateInitializationRunnables().map((async e=>(await e()).run()));if(i.Runtime.experiments.isEnabled("liveHeapProfile")){const n="memoryLiveHeapProfile";if(t.Settings.Settings.instance().moduleSetting(n).get())e.push(w.LiveHeapProfile.LiveHeapProfile.instance().run());else{const e=async o=>{o.data&&(t.Settings.Settings.instance().moduleSetting(n).removeChangeListener(e),w.LiveHeapProfile.LiveHeapProfile.instance().run())};t.Settings.Settings.instance().moduleSetting(n).addChangeListener(e)}}this.#u=Promise.all(e).then((()=>{})),R.timeEnd("Main._lateInitialization")}lateInitDonePromiseForTest(){return this.#u}readyForTest(){return this.#h}#M(){t.Console.Console.instance().addEventListener(t.Console.Events.MessageAdded,(function({data:e}){e.show&&t.Console.Console.instance().show()}))}#b(e){const{url:n,lineNumber:o,columnNumber:r}=e.data,s=p.Workspace.WorkspaceImpl.instance().uiSourceCodeForURL(n);s?t.Revealer.reveal(s.uiLocation(o,r)):p.Workspace.WorkspaceImpl.instance().addEventListener(p.Workspace.Events.UISourceCodeAdded,(function e(s){const i=s.data;i.url()===n&&(t.Revealer.reveal(i.uiLocation(o,r)),p.Workspace.WorkspaceImpl.instance().removeEventListener(p.Workspace.Events.UISourceCodeAdded,e))}))}#k(e){e.handled||x.ShortcutRegistry.ShortcutRegistry.instance().handleShortcut(e)}#D(e){const t=new CustomEvent("clipboard-"+e.type,{bubbles:!0});t.original=e;const n=e.target&&e.target.ownerDocument,o=n?r.DOMUtilities.deepActiveElement(n):null;o&&o.dispatchEvent(t),t.handled&&e.preventDefault()}#P(e){(e.handled||e.target.classList.contains("popup-glasspane"))&&e.preventDefault()}#E(e){e.addEventListener("keydown",this.#k.bind(this),!1),e.addEventListener("beforecopy",this.#D.bind(this),!0),e.addEventListener("copy",this.#D.bind(this),!1),e.addEventListener("cut",this.#D.bind(this),!1),e.addEventListener("paste",this.#D.bind(this),!1),e.addEventListener("contextmenu",this.#P.bind(this),!0)}#I(){const t=e.TargetManager.TargetManager.instance().allTargetsSuspended();x.InspectorView.InspectorView.instance().onSuspendStateChanged(t)}static instanceForTest=null}let C,k,D,P,y;globalThis.Main=globalThis.Main||{},globalThis.Main.Main=R;class L{static instance(e={forceNew:null}){const{forceNew:t}=e;return C&&!t||(C=new L),C}handleAction(e,t){if(n.InspectorFrontendHost.InspectorFrontendHostInstance.isHostedMode())return!1;switch(t){case"main.zoom-in":return n.InspectorFrontendHost.InspectorFrontendHostInstance.zoomIn(),!0;case"main.zoom-out":return n.InspectorFrontendHost.InspectorFrontendHostInstance.zoomOut(),!0;case"main.zoom-reset":return n.InspectorFrontendHost.InspectorFrontendHostInstance.resetZoom(),!0}return!1}}class F{static instance(e={forceNew:null}){const{forceNew:t}=e;return k&&!t||(k=new F),k}handleAction(e,t){let n=x.SearchableView.SearchableView.fromElement(r.DOMUtilities.deepActiveElement(document));if(!n){const e=x.InspectorView.InspectorView.instance().currentPanelDeprecated();if(e&&e.searchableView&&(n=e.searchableView()),!n)return!1}switch(t){case"main.search-in-panel.find":return n.handleFindShortcut();case"main.search-in-panel.cancel":return n.handleCancelSearchShortcut();case"main.search-in-panel.find-next":return n.handleFindNextShortcut();case"main.search-in-panel.find-previous":return n.handleFindPreviousShortcut()}return!1}}class A{#y;constructor(){this.#y=new x.Toolbar.ToolbarMenuButton(this.#L.bind(this),!0),this.#y.element.classList.add("main-menu"),this.#y.setTitle(b(M.customizeAndControlDevtools))}static instance(e={forceNew:null}){const{forceNew:t}=e;return D&&!t||(D=new A),D}item(){return this.#y}#L(t){if(x.DockController.DockController.instance().canDock()){const e=document.createElement("div");e.classList.add("flex-centered"),e.classList.add("flex-auto"),e.classList.add("location-menu"),e.tabIndex=-1,x.ARIAUtils.setLabel(e,M.dockSide+M.dockSideNaviation);const n=e.createChild("span","dockside-title");n.textContent=b(M.dockSide);const o=x.ShortcutRegistry.ShortcutRegistry.instance().shortcutsForAction("main.toggle-dock");x.Tooltip.Tooltip.install(n,b(M.placementOfDevtoolsRelativeToThe,{PH1:o[0].title()})),e.appendChild(n);const i=new x.Toolbar.Toolbar("",e);i.makeBlueOnHover();const a=new x.Toolbar.ToolbarToggle(b(M.undockIntoSeparateWindow),"dock-window"),l=new x.Toolbar.ToolbarToggle(b(M.dockToBottom),"dock-bottom"),c=new x.Toolbar.ToolbarToggle(b(M.dockToRight),"dock-right"),d=new x.Toolbar.ToolbarToggle(b(M.dockToLeft),"dock-left");a.addEventListener(x.Toolbar.ToolbarButton.Events.MouseDown,(e=>e.data.consume())),l.addEventListener(x.Toolbar.ToolbarButton.Events.MouseDown,(e=>e.data.consume())),c.addEventListener(x.Toolbar.ToolbarButton.Events.MouseDown,(e=>e.data.consume())),d.addEventListener(x.Toolbar.ToolbarButton.Events.MouseDown,(e=>e.data.consume())),a.addEventListener(x.Toolbar.ToolbarButton.Events.Click,s.bind(null,"undocked")),l.addEventListener(x.Toolbar.ToolbarButton.Events.Click,s.bind(null,"bottom")),c.addEventListener(x.Toolbar.ToolbarButton.Events.Click,s.bind(null,"right")),d.addEventListener(x.Toolbar.ToolbarButton.Events.Click,s.bind(null,"left")),a.setToggled("undocked"===x.DockController.DockController.instance().dockSide()),l.setToggled("bottom"===x.DockController.DockController.instance().dockSide()),c.setToggled("right"===x.DockController.DockController.instance().dockSide()),d.setToggled("left"===x.DockController.DockController.instance().dockSide()),i.appendToolbarItem(a),i.appendToolbarItem(d),i.appendToolbarItem(l),i.appendToolbarItem(c),e.addEventListener("keydown",(t=>{let n=0;if("ArrowLeft"===t.key)n=-1;else{if("ArrowRight"!==t.key){if("ArrowDown"===t.key){return void e.closest(".soft-context-menu")?.dispatchEvent(new KeyboardEvent("keydown",{key:"ArrowDown"}))}return}n=1}const o=[a,d,l,c];let s=o.findIndex((e=>e.element.hasFocus()));s=r.NumberUtilities.clamp(s+n,0,o.length-1),o[s].element.focus(),t.consume(!0)})),t.headerSection().appendCustomItem(e)}const o=this.#y.element;function s(e){x.DockController.DockController.instance().once("AfterDockSideChanged").then((()=>{o.focus()})),x.DockController.DockController.instance().setDockSide(e),t.discard()}if("undocked"===x.DockController.DockController.instance().dockSide()){const n=e.TargetManager.TargetManager.instance().primaryPageTarget();n&&n.type()===e.Target.Type.Frame&&t.defaultSection().appendAction("inspector_main.focus-debuggee",b(M.focusDebuggee))}t.defaultSection().appendAction("main.toggle-drawer",x.InspectorView.InspectorView.instance().drawerVisible()?b(M.hideConsoleDrawer):b(M.showConsoleDrawer)),t.appendItemsAtLocation("mainMenu");const i=t.defaultSection().appendSubMenuItem(b(M.moreTools)),a=x.ViewManager.getRegisteredViewExtensions();a.sort(((e,t)=>{const n=e.title(),o=t.title();return n.localeCompare(o)}));for(const e of a){const t=e.location(),o=e.persistence(),r=e.title(),s=e.viewId();if("issues-pane"!==s){if("closeable"===o&&("drawer-view"===t||"panel"===t))if(e.isPreviewFeature()){const e=new f.Icon.Icon;e.data={iconName:"experiment",color:"var(--icon-default)",width:"16px",height:"16px"},i.defaultSection().appendItem(r,(()=>{x.ViewManager.ViewManager.instance().showView(s,!0,!1)}),!1,e)}else i.defaultSection().appendItem(r,(()=>{x.ViewManager.ViewManager.instance().showView(s,!0,!1)}))}else i.defaultSection().appendItem(r,(()=>{n.userMetrics.issuesPanelOpenedFrom(n.UserMetrics.IssueOpener.HamburgerMenu),x.ViewManager.ViewManager.instance().showView("issues-pane",!0)}))}t.footerSection().appendSubMenuItem(b(M.help)).appendItemsAtLocation("mainMenuHelp")}}class N{#F;constructor(){this.#F=x.Toolbar.Toolbar.createActionButtonForId("settings.show",{showLabel:!1,userActionCode:void 0})}static instance(e={forceNew:null}){const{forceNew:t}=e;return P&&!t||(P=new N),P}item(){return this.#F}}class _{constructor(){e.TargetManager.TargetManager.instance().addModelListener(e.DebuggerModel.DebuggerModel,e.DebuggerModel.Events.DebuggerPaused,this.#A,this)}#A(n){e.TargetManager.TargetManager.instance().removeModelListener(e.DebuggerModel.DebuggerModel,e.DebuggerModel.Events.DebuggerPaused,this.#A,this);const o=n.data,r=o.debuggerPausedDetails();x.Context.Context.instance().setFlavor(e.Target.Target,o.target()),t.Revealer.reveal(r)}}class H{static instance(e={forceNew:null}){const{forceNew:t}=e;return y&&!t||(y=new H),y}handleAction(e,t){return"main.debug-reload"===t&&(S.Reload.reload(),!0)}}var O=Object.freeze({__proto__:null,MainImpl:R,ZoomActionDelegate:L,SearchActionDelegate:F,MainMenuItem:A,SettingsButtonProvider:N,PauseListener:_,sendOverProtocol:function(e,t){return new Promise(((n,o)=>{const r=s.InspectorBackend.test.sendRawMessage;if(!r)return o("Unable to send message to test client");r(e,t,((e,...t)=>e?o(e):n(t)))}))},ReloadActionDelegate:H});class U{presentUI(e){const t=new x.RootView.RootView;x.InspectorView.InspectorView.instance().show(t.element),t.attachToDocument(e),t.focus()}}let B;class V{static instance(e={forceNew:null}){const{forceNew:t}=e;return B&&!t||(B=new V),B}createApp(){return new U}}var W=Object.freeze({__proto__:null,SimpleApp:U,SimpleAppProvider:V});export{I as ExecutionContextSelector,O as MainImpl,W as SimpleApp}; diff --git a/packages/debugger-frontend/dist/third-party/front_end/entrypoints/node_app/node_app.js b/packages/debugger-frontend/dist/third-party/front_end/entrypoints/node_app/node_app.js index e010aa3ec552b4..6e78a03e4cebfa 100644 --- a/packages/debugger-frontend/dist/third-party/front_end/entrypoints/node_app/node_app.js +++ b/packages/debugger-frontend/dist/third-party/front_end/entrypoints/node_app/node_app.js @@ -1 +1 @@ -import"../shell/shell.js";import*as e from"../../core/common/common.js";import*as t from"../../core/i18n/i18n.js";import*as n from"../../ui/legacy/legacy.js";import*as o from"../../core/root/root.js";import*as i from"../main/main.js";import*as s from"../../core/host/host.js";import*as r from"../../ui/legacy/components/utils/utils.js";import*as a from"../../core/sdk/sdk.js";const c={throttling:"Throttling",showThrottling:"Show Throttling",goOffline:"Go offline",device:"device",throttlingTag:"throttling",enableSlowGThrottling:"Enable slow `3G` throttling",enableFastGThrottling:"Enable fast `3G` throttling",goOnline:"Go online"},l=t.i18n.registerUIStrings("panels/mobile_throttling/mobile_throttling-meta.ts",c),d=t.i18n.getLazilyComputedLocalizedString.bind(void 0,l);let g;async function h(){return g||(g=await import("../../panels/mobile_throttling/mobile_throttling.js")),g}n.ViewManager.registerViewExtension({location:"settings-view",id:"throttling-conditions",title:d(c.throttling),commandPrompt:d(c.showThrottling),order:35,loadView:async()=>(await h()).ThrottlingSettingsTab.ThrottlingSettingsTab.instance(),settings:["customNetworkConditions"]}),n.ActionRegistration.registerActionExtension({actionId:"network-conditions.network-offline",category:n.ActionRegistration.ActionCategory.NETWORK,title:d(c.goOffline),loadActionDelegate:async()=>(await h()).ThrottlingManager.ActionDelegate.instance(),tags:[d(c.device),d(c.throttlingTag)]}),n.ActionRegistration.registerActionExtension({actionId:"network-conditions.network-low-end-mobile",category:n.ActionRegistration.ActionCategory.NETWORK,title:d(c.enableSlowGThrottling),loadActionDelegate:async()=>(await h()).ThrottlingManager.ActionDelegate.instance(),tags:[d(c.device),d(c.throttlingTag)]}),n.ActionRegistration.registerActionExtension({actionId:"network-conditions.network-mid-tier-mobile",category:n.ActionRegistration.ActionCategory.NETWORK,title:d(c.enableFastGThrottling),loadActionDelegate:async()=>(await h()).ThrottlingManager.ActionDelegate.instance(),tags:[d(c.device),d(c.throttlingTag)]}),n.ActionRegistration.registerActionExtension({actionId:"network-conditions.network-online",category:n.ActionRegistration.ActionCategory.NETWORK,title:d(c.goOnline),loadActionDelegate:async()=>(await h()).ThrottlingManager.ActionDelegate.instance(),tags:[d(c.device),d(c.throttlingTag)]}),e.Settings.registerSettingExtension({storageType:e.Settings.SettingStorageType.Synced,settingName:"customNetworkConditions",settingType:e.Settings.SettingType.ARRAY,defaultValue:[]});const p={profiler:"Profiler",showProfiler:"Show Profiler",performance:"Performance",showPerformance:"Show Performance",startStopRecording:"Start/stop recording",showRecentTimelineSessions:"Show recent timeline sessions",record:"Record",stop:"Stop",startProfilingAndReloadPage:"Start profiling and reload page"},w=t.i18n.registerUIStrings("panels/js_profiler/js_profiler-meta.ts",p),m=t.i18n.getLazilyComputedLocalizedString.bind(void 0,w);let f,v;async function y(){return v||(v=await import("../../panels/profiler/profiler.js")),v}async function u(){return f||(f=await import("../../panels/timeline/timeline.js")),f}function C(e){return void 0===f?[]:e(f)}n.ViewManager.registerViewExtension({location:"panel",id:"js_profiler",title:m(p.profiler),commandPrompt:m(p.showProfiler),order:65,persistence:"closeable",experiment:o.Runtime.ExperimentName.JS_PROFILER_TEMP_ENABLE,loadView:async()=>(await y()).ProfilesPanel.JSProfilerPanel.instance()}),n.ViewManager.registerViewExtension({location:"panel",id:"timeline",title:m(p.performance),commandPrompt:m(p.showPerformance),order:66,hasToolbar:!1,isPreviewFeature:!0,loadView:async()=>(await u()).TimelinePanel.TimelinePanel.instance({forceNew:null,isNode:!0})}),n.ActionRegistration.registerActionExtension({actionId:"profiler.js-toggle-recording",category:n.ActionRegistration.ActionCategory.JAVASCRIPT_PROFILER,title:m(p.startStopRecording),iconClass:"record-start",toggleable:!0,toggledIconClass:"record-stop",toggleWithRedColor:!0,contextTypes:()=>void 0===v?[]:(e=>[e.ProfilesPanel.JSProfilerPanel])(v),loadActionDelegate:async()=>(await y()).ProfilesPanel.JSProfilerPanel.instance(),bindings:[{platform:"windows,linux",shortcut:"Ctrl+E"},{platform:"mac",shortcut:"Meta+E"}]}),n.ActionRegistration.registerActionExtension({actionId:"timeline.show-history",loadActionDelegate:async()=>(await u()).TimelinePanel.ActionDelegate.instance(),category:n.ActionRegistration.ActionCategory.PERFORMANCE,title:m(p.showRecentTimelineSessions),contextTypes:()=>C((e=>[e.TimelinePanel.TimelinePanel])),bindings:[{platform:"windows,linux",shortcut:"Ctrl+H"},{platform:"mac",shortcut:"Meta+Y"}]}),n.ActionRegistration.registerActionExtension({actionId:"timeline.toggle-recording",category:n.ActionRegistration.ActionCategory.PERFORMANCE,iconClass:"record-start",toggleable:!0,toggledIconClass:"record-stop",toggleWithRedColor:!0,contextTypes:()=>C((e=>[e.TimelinePanel.TimelinePanel])),loadActionDelegate:async()=>(await u()).TimelinePanel.ActionDelegate.instance(),options:[{value:!0,title:m(p.record)},{value:!1,title:m(p.stop)}],bindings:[{platform:"windows,linux",shortcut:"Ctrl+E"},{platform:"mac",shortcut:"Meta+E"}]}),n.ActionRegistration.registerActionExtension({actionId:"timeline.record-reload",iconClass:"refresh",contextTypes:()=>C((e=>[e.TimelinePanel.TimelinePanel])),category:n.ActionRegistration.ActionCategory.PERFORMANCE,title:m(p.startProfilingAndReloadPage),loadActionDelegate:async()=>(await u()).TimelinePanel.ActionDelegate.instance(),bindings:[{platform:"windows,linux",shortcut:"Ctrl+Shift+E"},{platform:"mac",shortcut:"Meta+Shift+E"}]});const T={main:"Main",nodejsS:"Node.js: {PH1}"},x=t.i18n.registerUIStrings("entrypoints/node_app/NodeMain.ts",T),k=t.i18n.getLocalizedString.bind(void 0,x);let A;class I{static instance(e={forceNew:null}){const{forceNew:t}=e;return A&&!t||(A=new I),A}async run(){s.userMetrics.actionTaken(s.UserMetrics.Action.ConnectToNodeJSFromFrontend),a.Connections.initMainConnection((async()=>{a.TargetManager.TargetManager.instance().createTarget("main",k(T.main),a.Target.Type.Browser,null).setInspectedURL("Node.js")}),r.TargetDetachedDialog.TargetDetachedDialog.webSocketConnectionLost)}}class D extends a.SDKModel.SDKModel{#e;#t;#n;#o;#i;constructor(e){super(e),this.#e=e.targetManager(),this.#t=e,this.#n=e.targetAgent(),this.#o=new Map,this.#i=new Map,e.registerTargetDispatcher(this),this.#n.invoke_setDiscoverTargets({discover:!0}),s.InspectorFrontendHost.InspectorFrontendHostInstance.events.addEventListener(s.InspectorFrontendHostAPI.Events.DevicesDiscoveryConfigChanged,this.#s,this),s.InspectorFrontendHost.InspectorFrontendHostInstance.setDevicesUpdatesEnabled(!1),s.InspectorFrontendHost.InspectorFrontendHostInstance.setDevicesUpdatesEnabled(!0)}#s({data:e}){const t=[];for(const n of e.networkDiscoveryConfig){const e=n.split(":"),o=parseInt(e[1],10);e[0]&&o&&t.push({host:e[0],port:o})}this.#n.invoke_setRemoteLocations({locations:t})}dispose(){s.InspectorFrontendHost.InspectorFrontendHostInstance.events.removeEventListener(s.InspectorFrontendHostAPI.Events.DevicesDiscoveryConfigChanged,this.#s,this);for(const e of this.#o.keys())this.detachedFromTarget({sessionId:e})}targetCreated({targetInfo:e}){"node"!==e.type||e.attached||this.#n.invoke_attachToTarget({targetId:e.targetId,flatten:!1})}targetInfoChanged(e){}targetDestroyed(e){}attachedToTarget({sessionId:e,targetInfo:t}){const n=k(T.nodejsS,{PH1:t.url}),o=new S(this.#n,e);this.#i.set(e,o);const i=this.#e.createTarget(t.targetId,n,a.Target.Type.Node,this.#t,void 0,void 0,o);this.#o.set(e,i),i.runtimeAgent().invoke_runIfWaitingForDebugger()}detachedFromTarget({sessionId:e}){const t=this.#o.get(e);t&&t.dispose("target terminated"),this.#o.delete(e),this.#i.delete(e)}receivedMessageFromTarget({sessionId:e,message:t}){const n=this.#i.get(e),o=n?n.onMessage:null;o&&o.call(null,t)}targetCrashed(e){}}class S{#n;#r;onMessage;#a;constructor(e,t){this.#n=e,this.#r=t,this.onMessage=null,this.#a=null}setOnMessage(e){this.onMessage=e}setOnDisconnect(e){this.#a=e}sendRawMessage(e){this.#n.invoke_sendMessageToTarget({message:e,sessionId:this.#r})}async disconnect(){this.#a&&this.#a.call(null,"force disconnect"),this.#a=null,this.onMessage=null,await this.#n.invoke_detachFromTarget({sessionId:this.#r})}}a.SDKModel.SDKModel.register(D,{capabilities:a.Target.Capability.Target,autostart:!0});const E=new CSSStyleSheet;E.replaceSync(".add-network-target-button{margin:10px 25px;align-self:center}.network-discovery-list{flex:none;max-width:600px;max-height:202px;margin:20px 0 5px}.network-discovery-list-empty{flex:auto;height:30px;display:flex;align-items:center;justify-content:center}.network-discovery-list-item{padding:3px 5px;height:30px;display:flex;align-items:center;position:relative;flex:auto 1 1}.network-discovery-value{flex:3 1 0}.list-item .network-discovery-value{white-space:nowrap;text-overflow:ellipsis;user-select:none;color:var(--color-text-primary);overflow:hidden}.network-discovery-edit-row{flex:none;display:flex;flex-direction:row;margin:6px 5px;align-items:center}.network-discovery-edit-row input{width:100%;text-align:inherit}.network-discovery-footer{margin:0;overflow:hidden;max-width:500px;padding:3px}.network-discovery-footer > *{white-space:pre-wrap}.node-panel{align-items:center;justify-content:flex-start;overflow-y:auto}.network-discovery-view{min-width:400px;text-align:left}:host-context(.node-frontend) .network-discovery-list-empty{height:40px}:host-context(.node-frontend) .network-discovery-list-item{padding:3px 15px;height:40px}.node-panel-center{max-width:600px;padding-top:50px;text-align:center}.node-panel-logo{width:400px;margin-bottom:50px}:host-context(.node-frontend) .network-discovery-edit-row input{height:30px;padding-left:5px}:host-context(.node-frontend) .network-discovery-edit-row{margin:6px 9px}\n/*# sourceURL=nodeConnectionsPanel.css */\n");const P={nodejsDebuggingGuide:"Node.js debugging guide",specifyNetworkEndpointAnd:"Specify network endpoint and DevTools will connect to it automatically. Read {PH1} to learn more.",noConnectionsSpecified:"No connections specified",addConnection:"Add connection",networkAddressEgLocalhost:"Network address (e.g. localhost:9229)"},R=t.i18n.registerUIStrings("entrypoints/node_app/NodeConnectionsPanel.ts",P),b=t.i18n.getLocalizedString.bind(void 0,R);let M;class N extends n.Panel.Panel{#c;#l;constructor(){super("node-connection"),this.contentElement.classList.add("node-panel");const e=this.contentElement.createChild("div","node-panel-center");e.createChild("img","node-panel-logo").src="https://nodejs.org/static/images/logos/nodejs-new-pantone-black.svg",s.InspectorFrontendHost.InspectorFrontendHostInstance.events.addEventListener(s.InspectorFrontendHostAPI.Events.DevicesDiscoveryConfigChanged,this.#s,this),this.contentElement.tabIndex=0,this.setDefaultFocusedElement(this.contentElement),s.InspectorFrontendHost.InspectorFrontendHostInstance.setDevicesUpdatesEnabled(!1),s.InspectorFrontendHost.InspectorFrontendHostInstance.setDevicesUpdatesEnabled(!0),this.#l=new F((e=>{this.#c.networkDiscoveryConfig=e,s.InspectorFrontendHost.InspectorFrontendHostInstance.setDevicesDiscoveryConfig(this.#c)})),this.#l.show(e)}static instance(e={forceNew:null}){const{forceNew:t}=e;return M&&!t||(M=new N),M}#s({data:e}){this.#c=e,this.#l.discoveryConfigChanged(this.#c.networkDiscoveryConfig)}wasShown(){super.wasShown(),this.registerCSSFiles([E])}}class F extends n.Widget.VBox{#d;#g;#h;#p;constructor(e){super(),this.#d=e,this.element.classList.add("network-discovery-view");const o=this.element.createChild("div","network-discovery-footer"),i=n.XLink.XLink.create("https://nodejs.org/en/docs/inspector/",b(P.nodejsDebuggingGuide));o.appendChild(t.i18n.getFormatLocalizedString(R,P.specifyNetworkEndpointAnd,{PH1:i})),this.#g=new n.ListWidget.ListWidget(this),this.#g.element.classList.add("network-discovery-list");const s=document.createElement("div");s.classList.add("network-discovery-list-empty"),s.textContent=b(P.noConnectionsSpecified),this.#g.setEmptyPlaceholder(s),this.#g.show(this.element),this.#h=null;const r=n.UIUtils.createTextButton(b(P.addConnection),this.#w.bind(this),"add-network-target-button",!0);this.element.appendChild(r),this.#p=[],this.element.classList.add("node-frontend")}#m(){const e=this.#p.map((e=>e.address));this.#d.call(null,e)}#w(){this.#g.addNewItem(this.#p.length,{address:"",port:""})}discoveryConfigChanged(e){this.#p=[],this.#g.clear();for(const t of e){const e={address:t,port:""};this.#p.push(e),this.#g.appendItem(e,!0)}}renderItem(e,t){const n=document.createElement("div");return n.classList.add("network-discovery-list-item"),n.createChild("div","network-discovery-value network-discovery-address").textContent=e.address,n}removeItemRequested(e,t){this.#p.splice(t,1),this.#g.removeItem(t),this.#m()}commitEdit(e,t,n){e.address=t.control("address").value.trim(),n&&this.#p.push(e),this.#m()}beginEdit(e){const t=this.#f();return t.control("address").value=e.address,t}#f(){if(this.#h)return this.#h;const e=new n.ListWidget.Editor;this.#h=e;const t=e.contentElement().createChild("div","network-discovery-edit-row"),o=e.createInput("address","text",b(P.networkAddressEgLocalhost),(function(e,t,n){const o=n.value.trim().match(/^([a-zA-Z0-9\.\-_]+):(\d+)$/);if(!o)return{valid:!1,errorMessage:void 0};return{valid:parseInt(o[2],10)<=65535,errorMessage:void 0}}));return t.createChild("div","network-discovery-value network-discovery-address").appendChild(o),e}wasShown(){super.wasShown(),this.#g.registerCSSFiles([E])}}const L={connection:"Connection",node:"node",showConnection:"Show Connection",networkTitle:"Node",showNode:"Show Node"},j=t.i18n.registerUIStrings("entrypoints/node_app/node_app.ts",L),H=t.i18n.getLazilyComputedLocalizedString.bind(void 0,j);let V;n.ViewManager.registerViewExtension({location:"panel",id:"node-connection",title:H(L.connection),commandPrompt:H(L.showConnection),order:0,loadView:async()=>N.instance(),tags:[H(L.node)]}),n.ViewManager.registerViewExtension({location:"navigator-view",id:"navigator-network",title:H(L.networkTitle),commandPrompt:H(L.showNode),order:2,persistence:"permanent",loadView:async()=>(await async function(){return V||(V=await import("../../panels/sources/sources.js")),V}()).SourcesNavigator.NetworkNavigatorView.instance()}),self.runtime=o.Runtime.Runtime.instance({forceNew:!0}),e.Runnable.registerEarlyInitializationRunnable(I.instance),new i.MainImpl.MainImpl; +import"../shell/shell.js";import*as e from"../../core/common/common.js";import*as t from"../../core/i18n/i18n.js";import*as n from"../../ui/legacy/legacy.js";import*as o from"../../core/root/root.js";import*as i from"../main/main.js";import*as s from"../../core/host/host.js";import*as r from"../../ui/legacy/components/utils/utils.js";import*as a from"../../core/sdk/sdk.js";const c={throttling:"Throttling",showThrottling:"Show Throttling",goOffline:"Go offline",device:"device",throttlingTag:"throttling",enableSlowGThrottling:"Enable slow `3G` throttling",enableFastGThrottling:"Enable fast `3G` throttling",goOnline:"Go online"},d=t.i18n.registerUIStrings("panels/mobile_throttling/mobile_throttling-meta.ts",c),l=t.i18n.getLazilyComputedLocalizedString.bind(void 0,d);let g;async function h(){return g||(g=await import("../../panels/mobile_throttling/mobile_throttling.js")),g}n.ViewManager.registerViewExtension({location:"settings-view",id:"throttling-conditions",title:l(c.throttling),commandPrompt:l(c.showThrottling),order:35,loadView:async()=>(await h()).ThrottlingSettingsTab.ThrottlingSettingsTab.instance(),settings:["customNetworkConditions"]}),n.ActionRegistration.registerActionExtension({actionId:"network-conditions.network-offline",category:n.ActionRegistration.ActionCategory.NETWORK,title:l(c.goOffline),loadActionDelegate:async()=>(await h()).ThrottlingManager.ActionDelegate.instance(),tags:[l(c.device),l(c.throttlingTag)]}),n.ActionRegistration.registerActionExtension({actionId:"network-conditions.network-low-end-mobile",category:n.ActionRegistration.ActionCategory.NETWORK,title:l(c.enableSlowGThrottling),loadActionDelegate:async()=>(await h()).ThrottlingManager.ActionDelegate.instance(),tags:[l(c.device),l(c.throttlingTag)]}),n.ActionRegistration.registerActionExtension({actionId:"network-conditions.network-mid-tier-mobile",category:n.ActionRegistration.ActionCategory.NETWORK,title:l(c.enableFastGThrottling),loadActionDelegate:async()=>(await h()).ThrottlingManager.ActionDelegate.instance(),tags:[l(c.device),l(c.throttlingTag)]}),n.ActionRegistration.registerActionExtension({actionId:"network-conditions.network-online",category:n.ActionRegistration.ActionCategory.NETWORK,title:l(c.goOnline),loadActionDelegate:async()=>(await h()).ThrottlingManager.ActionDelegate.instance(),tags:[l(c.device),l(c.throttlingTag)]}),e.Settings.registerSettingExtension({storageType:e.Settings.SettingStorageType.Synced,settingName:"customNetworkConditions",settingType:e.Settings.SettingType.ARRAY,defaultValue:[]});const p={profiler:"Profiler",showProfiler:"Show Profiler",performance:"Performance",showPerformance:"Show Performance",startStopRecording:"Start/stop recording",showRecentTimelineSessions:"Show recent timeline sessions",record:"Record",stop:"Stop",startProfilingAndReloadPage:"Start profiling and reload page"},w=t.i18n.registerUIStrings("panels/js_profiler/js_profiler-meta.ts",p),m=t.i18n.getLazilyComputedLocalizedString.bind(void 0,w);let f,v;async function y(){return v||(v=await import("../../panels/profiler/profiler.js")),v}async function u(){return f||(f=await import("../../panels/timeline/timeline.js")),f}function C(e){return void 0===f?[]:e(f)}n.ViewManager.registerViewExtension({location:"panel",id:"js_profiler",title:m(p.profiler),commandPrompt:m(p.showProfiler),order:65,persistence:"permanent",experiment:o.Runtime.ExperimentName.JS_PROFILER_TEMP_ENABLE,loadView:async()=>(await y()).ProfilesPanel.JSProfilerPanel.instance()}),n.ActionRegistration.registerActionExtension({actionId:"profiler.js-toggle-recording",category:n.ActionRegistration.ActionCategory.JAVASCRIPT_PROFILER,title:m(p.startStopRecording),iconClass:"record-start",toggleable:!0,toggledIconClass:"record-stop",toggleWithRedColor:!0,contextTypes:()=>void 0===v?[]:(e=>[e.ProfilesPanel.JSProfilerPanel])(v),loadActionDelegate:async()=>(await y()).ProfilesPanel.JSProfilerPanel.instance(),bindings:[{platform:"windows,linux",shortcut:"Ctrl+E"},{platform:"mac",shortcut:"Meta+E"}]}),n.ActionRegistration.registerActionExtension({actionId:"timeline.show-history",loadActionDelegate:async()=>(await u()).TimelinePanel.ActionDelegate.instance(),category:n.ActionRegistration.ActionCategory.PERFORMANCE,title:m(p.showRecentTimelineSessions),contextTypes:()=>C((e=>[e.TimelinePanel.TimelinePanel])),bindings:[{platform:"windows,linux",shortcut:"Ctrl+H"},{platform:"mac",shortcut:"Meta+Y"}]}),n.ActionRegistration.registerActionExtension({actionId:"timeline.toggle-recording",category:n.ActionRegistration.ActionCategory.PERFORMANCE,iconClass:"record-start",toggleable:!0,toggledIconClass:"record-stop",toggleWithRedColor:!0,contextTypes:()=>C((e=>[e.TimelinePanel.TimelinePanel])),loadActionDelegate:async()=>(await u()).TimelinePanel.ActionDelegate.instance(),options:[{value:!0,title:m(p.record)},{value:!1,title:m(p.stop)}],bindings:[{platform:"windows,linux",shortcut:"Ctrl+E"},{platform:"mac",shortcut:"Meta+E"}]}),n.ActionRegistration.registerActionExtension({actionId:"timeline.record-reload",iconClass:"refresh",contextTypes:()=>C((e=>[e.TimelinePanel.TimelinePanel])),category:n.ActionRegistration.ActionCategory.PERFORMANCE,title:m(p.startProfilingAndReloadPage),loadActionDelegate:async()=>(await u()).TimelinePanel.ActionDelegate.instance(),bindings:[{platform:"windows,linux",shortcut:"Ctrl+Shift+E"},{platform:"mac",shortcut:"Meta+Shift+E"}]});const T={main:"Main",nodejsS:"Node.js: {PH1}"},k=t.i18n.registerUIStrings("entrypoints/node_app/NodeMain.ts",T),x=t.i18n.getLocalizedString.bind(void 0,k);let A;class I{static instance(e={forceNew:null}){const{forceNew:t}=e;return A&&!t||(A=new I),A}async run(){s.userMetrics.actionTaken(s.UserMetrics.Action.ConnectToNodeJSFromFrontend),a.Connections.initMainConnection((async()=>{a.TargetManager.TargetManager.instance().createTarget("main",x(T.main),a.Target.Type.Browser,null).setInspectedURL("Node.js")}),r.TargetDetachedDialog.TargetDetachedDialog.webSocketConnectionLost)}}class D extends a.SDKModel.SDKModel{#e;#t;#n;#o;#i;constructor(e){super(e),this.#e=e.targetManager(),this.#t=e,this.#n=e.targetAgent(),this.#o=new Map,this.#i=new Map,e.registerTargetDispatcher(this),this.#n.invoke_setDiscoverTargets({discover:!0}),s.InspectorFrontendHost.InspectorFrontendHostInstance.events.addEventListener(s.InspectorFrontendHostAPI.Events.DevicesDiscoveryConfigChanged,this.#s,this),s.InspectorFrontendHost.InspectorFrontendHostInstance.setDevicesUpdatesEnabled(!1),s.InspectorFrontendHost.InspectorFrontendHostInstance.setDevicesUpdatesEnabled(!0)}#s({data:e}){const t=[];for(const n of e.networkDiscoveryConfig){const e=n.split(":"),o=parseInt(e[1],10);e[0]&&o&&t.push({host:e[0],port:o})}this.#n.invoke_setRemoteLocations({locations:t})}dispose(){s.InspectorFrontendHost.InspectorFrontendHostInstance.events.removeEventListener(s.InspectorFrontendHostAPI.Events.DevicesDiscoveryConfigChanged,this.#s,this);for(const e of this.#o.keys())this.detachedFromTarget({sessionId:e})}targetCreated({targetInfo:e}){"node"!==e.type||e.attached||this.#n.invoke_attachToTarget({targetId:e.targetId,flatten:!1})}targetInfoChanged(e){}targetDestroyed(e){}attachedToTarget({sessionId:e,targetInfo:t}){const n=x(T.nodejsS,{PH1:t.url}),o=new S(this.#n,e);this.#i.set(e,o);const i=this.#e.createTarget(t.targetId,n,a.Target.Type.Node,this.#t,void 0,void 0,o);this.#o.set(e,i),i.runtimeAgent().invoke_runIfWaitingForDebugger()}detachedFromTarget({sessionId:e}){const t=this.#o.get(e);t&&t.dispose("target terminated"),this.#o.delete(e),this.#i.delete(e)}receivedMessageFromTarget({sessionId:e,message:t}){const n=this.#i.get(e),o=n?n.onMessage:null;o&&o.call(null,t)}targetCrashed(e){}}class S{#n;#r;onMessage;#a;constructor(e,t){this.#n=e,this.#r=t,this.onMessage=null,this.#a=null}setOnMessage(e){this.onMessage=e}setOnDisconnect(e){this.#a=e}sendRawMessage(e){this.#n.invoke_sendMessageToTarget({message:e,sessionId:this.#r})}async disconnect(){this.#a&&this.#a.call(null,"force disconnect"),this.#a=null,this.onMessage=null,await this.#n.invoke_detachFromTarget({sessionId:this.#r})}}a.SDKModel.SDKModel.register(D,{capabilities:a.Target.Capability.Target,autostart:!0});const E=new CSSStyleSheet;E.replaceSync(".add-network-target-button{margin:10px 25px;align-self:center}.network-discovery-list{flex:none;max-width:600px;max-height:202px;margin:20px 0 5px}.network-discovery-list-empty{flex:auto;height:30px;display:flex;align-items:center;justify-content:center}.network-discovery-list-item{padding:3px 5px;height:30px;display:flex;align-items:center;position:relative;flex:auto 1 1}.network-discovery-value{flex:3 1 0}.list-item .network-discovery-value{white-space:nowrap;text-overflow:ellipsis;user-select:none;color:var(--color-text-primary);overflow:hidden}.network-discovery-edit-row{flex:none;display:flex;flex-direction:row;margin:6px 5px;align-items:center}.network-discovery-edit-row input{width:100%;text-align:inherit}.network-discovery-footer{margin:0;overflow:hidden;max-width:500px;padding:3px}.network-discovery-footer > *{white-space:pre-wrap}.node-panel{align-items:center;justify-content:flex-start;overflow-y:auto}.network-discovery-view{min-width:400px;text-align:left}:host-context(.node-frontend) .network-discovery-list-empty{height:40px}:host-context(.node-frontend) .network-discovery-list-item{padding:3px 15px;height:40px}.node-panel-center{max-width:600px;padding-top:50px;text-align:center}.node-panel-logo{width:400px;margin-bottom:50px}:host-context(.node-frontend) .network-discovery-edit-row input{height:30px;padding-left:5px}:host-context(.node-frontend) .network-discovery-edit-row{margin:6px 9px}\n/*# sourceURL=nodeConnectionsPanel.css */\n");const P={nodejsDebuggingGuide:"Node.js debugging guide",specifyNetworkEndpointAnd:"Specify network endpoint and DevTools will connect to it automatically. Read {PH1} to learn more.",noConnectionsSpecified:"No connections specified",addConnection:"Add connection",networkAddressEgLocalhost:"Network address (e.g. localhost:9229)"},R=t.i18n.registerUIStrings("entrypoints/node_app/NodeConnectionsPanel.ts",P),b=t.i18n.getLocalizedString.bind(void 0,R);let M;class N extends n.Panel.Panel{#c;#d;constructor(){super("node-connection"),this.contentElement.classList.add("node-panel");const e=this.contentElement.createChild("div","node-panel-center");e.createChild("img","node-panel-logo").src="https://nodejs.org/static/images/logos/nodejs-new-pantone-black.svg",s.InspectorFrontendHost.InspectorFrontendHostInstance.events.addEventListener(s.InspectorFrontendHostAPI.Events.DevicesDiscoveryConfigChanged,this.#s,this),this.contentElement.tabIndex=0,this.setDefaultFocusedElement(this.contentElement),s.InspectorFrontendHost.InspectorFrontendHostInstance.setDevicesUpdatesEnabled(!1),s.InspectorFrontendHost.InspectorFrontendHostInstance.setDevicesUpdatesEnabled(!0),this.#d=new F((e=>{this.#c.networkDiscoveryConfig=e,s.InspectorFrontendHost.InspectorFrontendHostInstance.setDevicesDiscoveryConfig(this.#c)})),this.#d.show(e)}static instance(e={forceNew:null}){const{forceNew:t}=e;return M&&!t||(M=new N),M}#s({data:e}){this.#c=e,this.#d.discoveryConfigChanged(this.#c.networkDiscoveryConfig)}wasShown(){super.wasShown(),this.registerCSSFiles([E])}}class F extends n.Widget.VBox{#l;#g;#h;#p;constructor(e){super(),this.#l=e,this.element.classList.add("network-discovery-view");const o=this.element.createChild("div","network-discovery-footer"),i=n.XLink.XLink.create("https://nodejs.org/en/docs/inspector/",b(P.nodejsDebuggingGuide));o.appendChild(t.i18n.getFormatLocalizedString(R,P.specifyNetworkEndpointAnd,{PH1:i})),this.#g=new n.ListWidget.ListWidget(this),this.#g.element.classList.add("network-discovery-list");const s=document.createElement("div");s.classList.add("network-discovery-list-empty"),s.textContent=b(P.noConnectionsSpecified),this.#g.setEmptyPlaceholder(s),this.#g.show(this.element),this.#h=null;const r=n.UIUtils.createTextButton(b(P.addConnection),this.#w.bind(this),"add-network-target-button",!0);this.element.appendChild(r),this.#p=[],this.element.classList.add("node-frontend")}#m(){const e=this.#p.map((e=>e.address));this.#l.call(null,e)}#w(){this.#g.addNewItem(this.#p.length,{address:"",port:""})}discoveryConfigChanged(e){this.#p=[],this.#g.clear();for(const t of e){const e={address:t,port:""};this.#p.push(e),this.#g.appendItem(e,!0)}}renderItem(e,t){const n=document.createElement("div");return n.classList.add("network-discovery-list-item"),n.createChild("div","network-discovery-value network-discovery-address").textContent=e.address,n}removeItemRequested(e,t){this.#p.splice(t,1),this.#g.removeItem(t),this.#m()}commitEdit(e,t,n){e.address=t.control("address").value.trim(),n&&this.#p.push(e),this.#m()}beginEdit(e){const t=this.#f();return t.control("address").value=e.address,t}#f(){if(this.#h)return this.#h;const e=new n.ListWidget.Editor;this.#h=e;const t=e.contentElement().createChild("div","network-discovery-edit-row"),o=e.createInput("address","text",b(P.networkAddressEgLocalhost),(function(e,t,n){const o=n.value.trim().match(/^([a-zA-Z0-9\.\-_]+):(\d+)$/);if(!o)return{valid:!1,errorMessage:void 0};return{valid:parseInt(o[2],10)<=65535,errorMessage:void 0}}));return t.createChild("div","network-discovery-value network-discovery-address").appendChild(o),e}wasShown(){super.wasShown(),this.#g.registerCSSFiles([E])}}const L={connection:"Connection",node:"node",showConnection:"Show Connection",networkTitle:"Node",showNode:"Show Node"},j=t.i18n.registerUIStrings("entrypoints/node_app/node_app.ts",L),H=t.i18n.getLazilyComputedLocalizedString.bind(void 0,j);let _;n.ViewManager.registerViewExtension({location:"panel",id:"node-connection",title:H(L.connection),commandPrompt:H(L.showConnection),order:0,loadView:async()=>N.instance(),tags:[H(L.node)]}),n.ViewManager.registerViewExtension({location:"navigator-view",id:"navigator-network",title:H(L.networkTitle),commandPrompt:H(L.showNode),order:2,persistence:"permanent",loadView:async()=>(await async function(){return _||(_=await import("../../panels/sources/sources.js")),_}()).SourcesNavigator.NetworkNavigatorView.instance()}),self.runtime=o.Runtime.Runtime.instance({forceNew:!0}),e.Runnable.registerEarlyInitializationRunnable(I.instance),new i.MainImpl.MainImpl; diff --git a/packages/debugger-frontend/dist/third-party/front_end/entrypoints/rn_inspector/rn_inspector.js b/packages/debugger-frontend/dist/third-party/front_end/entrypoints/rn_inspector/rn_inspector.js index 7628e054f8093c..85fc7c66c4016e 100644 --- a/packages/debugger-frontend/dist/third-party/front_end/entrypoints/rn_inspector/rn_inspector.js +++ b/packages/debugger-frontend/dist/third-party/front_end/entrypoints/rn_inspector/rn_inspector.js @@ -1 +1 @@ -import"../shell/shell.js";import*as e from"../../core/common/common.js";import*as t from"../../core/root/root.js";import*as i from"../../ui/legacy/legacy.js";import*as o from"../../core/i18n/i18n.js";import*as n from"../../models/issues_manager/issues_manager.js";import*as a from"../main/main.js";const r={toggleDeviceToolbar:"Toggle device toolbar",captureScreenshot:"Capture screenshot",captureFullSizeScreenshot:"Capture full size screenshot",captureNodeScreenshot:"Capture node screenshot",showMediaQueries:"Show media queries",device:"device",hideMediaQueries:"Hide media queries",showRulers:"Show rulers in the Device Mode toolbar",hideRulers:"Hide rulers in the Device Mode toolbar",showDeviceFrame:"Show device frame",hideDeviceFrame:"Hide device frame"},s=o.i18n.registerUIStrings("panels/emulation/emulation-meta.ts",r),l=o.i18n.getLazilyComputedLocalizedString.bind(void 0,s);let c;async function g(){return c||(c=await import("../../panels/emulation/emulation.js")),c}i.ActionRegistration.registerActionExtension({category:i.ActionRegistration.ActionCategory.MOBILE,actionId:"emulation.toggle-device-mode",toggleable:!0,loadActionDelegate:async()=>(await g()).DeviceModeWrapper.ActionDelegate.instance(),condition:t.Runtime.ConditionName.CAN_DOCK,title:l(r.toggleDeviceToolbar),iconClass:"devices",bindings:[{platform:"windows,linux",shortcut:"Shift+Ctrl+M"},{platform:"mac",shortcut:"Shift+Meta+M"}]}),i.ActionRegistration.registerActionExtension({actionId:"emulation.capture-screenshot",category:i.ActionRegistration.ActionCategory.SCREENSHOT,loadActionDelegate:async()=>(await g()).DeviceModeWrapper.ActionDelegate.instance(),condition:t.Runtime.ConditionName.CAN_DOCK,title:l(r.captureScreenshot)}),i.ActionRegistration.registerActionExtension({actionId:"emulation.capture-full-height-screenshot",category:i.ActionRegistration.ActionCategory.SCREENSHOT,loadActionDelegate:async()=>(await g()).DeviceModeWrapper.ActionDelegate.instance(),condition:t.Runtime.ConditionName.CAN_DOCK,title:l(r.captureFullSizeScreenshot)}),i.ActionRegistration.registerActionExtension({actionId:"emulation.capture-node-screenshot",category:i.ActionRegistration.ActionCategory.SCREENSHOT,loadActionDelegate:async()=>(await g()).DeviceModeWrapper.ActionDelegate.instance(),condition:t.Runtime.ConditionName.CAN_DOCK,title:l(r.captureNodeScreenshot)}),e.Settings.registerSettingExtension({category:e.Settings.SettingCategory.MOBILE,settingName:"showMediaQueryInspector",settingType:e.Settings.SettingType.BOOLEAN,defaultValue:!1,options:[{value:!0,title:l(r.showMediaQueries)},{value:!1,title:l(r.hideMediaQueries)}],tags:[l(r.device)]}),e.Settings.registerSettingExtension({category:e.Settings.SettingCategory.MOBILE,settingName:"emulation.showRulers",settingType:e.Settings.SettingType.BOOLEAN,defaultValue:!1,options:[{value:!0,title:l(r.showRulers)},{value:!1,title:l(r.hideRulers)}],tags:[l(r.device)]}),e.Settings.registerSettingExtension({category:e.Settings.SettingCategory.MOBILE,settingName:"emulation.showDeviceOutline",settingType:e.Settings.SettingType.BOOLEAN,defaultValue:!1,options:[{value:!0,title:l(r.showDeviceFrame)},{value:!1,title:l(r.hideDeviceFrame)}],tags:[l(r.device)]}),i.Toolbar.registerToolbarItem({actionId:"emulation.toggle-device-mode",condition:t.Runtime.ConditionName.CAN_DOCK,location:i.Toolbar.ToolbarItemLocation.MAIN_TOOLBAR_LEFT,order:1,showLabel:void 0,loadItem:void 0,separator:void 0}),e.AppProvider.registerAppProvider({loadAppProvider:async()=>(await g()).AdvancedApp.AdvancedAppProvider.instance(),condition:t.Runtime.ConditionName.CAN_DOCK,order:0}),i.ContextMenu.registerItem({location:i.ContextMenu.ItemLocation.DEVICE_MODE_MENU_SAVE,order:12,actionId:"emulation.capture-screenshot"}),i.ContextMenu.registerItem({location:i.ContextMenu.ItemLocation.DEVICE_MODE_MENU_SAVE,order:13,actionId:"emulation.capture-full-height-screenshot"});const d={sensors:"Sensors",geolocation:"geolocation",timezones:"timezones",locale:"locale",locales:"locales",accelerometer:"accelerometer",deviceOrientation:"device orientation",locations:"Locations",touch:"Touch",devicebased:"Device-based",forceEnabled:"Force enabled",emulateIdleDetectorState:"Emulate Idle Detector state",noIdleEmulation:"No idle emulation",userActiveScreenUnlocked:"User active, screen unlocked",userActiveScreenLocked:"User active, screen locked",userIdleScreenUnlocked:"User idle, screen unlocked",userIdleScreenLocked:"User idle, screen locked",showSensors:"Show Sensors",showLocations:"Show Locations"},m=o.i18n.registerUIStrings("panels/sensors/sensors-meta.ts",d),u=o.i18n.getLazilyComputedLocalizedString.bind(void 0,m);let p;async function S(){return p||(p=await import("../../panels/sensors/sensors.js")),p}i.ViewManager.registerViewExtension({location:"drawer-view",commandPrompt:u(d.showSensors),title:u(d.sensors),id:"sensors",persistence:"closeable",order:100,loadView:async()=>(await S()).SensorsView.SensorsView.instance(),tags:[u(d.geolocation),u(d.timezones),u(d.locale),u(d.locales),u(d.accelerometer),u(d.deviceOrientation)]}),i.ViewManager.registerViewExtension({location:"settings-view",id:"emulation-locations",commandPrompt:u(d.showLocations),title:u(d.locations),order:40,loadView:async()=>(await S()).LocationsSettingsTab.LocationsSettingsTab.instance(),settings:["emulation.locations"]}),e.Settings.registerSettingExtension({storageType:e.Settings.SettingStorageType.Synced,settingName:"emulation.locations",settingType:e.Settings.SettingType.ARRAY,defaultValue:[{title:"Berlin",lat:52.520007,long:13.404954,timezoneId:"Europe/Berlin",locale:"de-DE"},{title:"London",lat:51.507351,long:-.127758,timezoneId:"Europe/London",locale:"en-GB"},{title:"Moscow",lat:55.755826,long:37.6173,timezoneId:"Europe/Moscow",locale:"ru-RU"},{title:"Mountain View",lat:37.386052,long:-122.083851,timezoneId:"America/Los_Angeles",locale:"en-US"},{title:"Mumbai",lat:19.075984,long:72.877656,timezoneId:"Asia/Kolkata",locale:"mr-IN"},{title:"San Francisco",lat:37.774929,long:-122.419416,timezoneId:"America/Los_Angeles",locale:"en-US"},{title:"Shanghai",lat:31.230416,long:121.473701,timezoneId:"Asia/Shanghai",locale:"zh-Hans-CN"},{title:"São Paulo",lat:-23.55052,long:-46.633309,timezoneId:"America/Sao_Paulo",locale:"pt-BR"},{title:"Tokyo",lat:35.689487,long:139.691706,timezoneId:"Asia/Tokyo",locale:"ja-JP"}]}),e.Settings.registerSettingExtension({title:u(d.touch),reloadRequired:!0,settingName:"emulation.touch",settingType:e.Settings.SettingType.ENUM,defaultValue:"none",options:[{value:"none",title:u(d.devicebased),text:u(d.devicebased)},{value:"force",title:u(d.forceEnabled),text:u(d.forceEnabled)}]}),e.Settings.registerSettingExtension({title:u(d.emulateIdleDetectorState),settingName:"emulation.idleDetection",settingType:e.Settings.SettingType.ENUM,defaultValue:"none",options:[{value:"none",title:u(d.noIdleEmulation),text:u(d.noIdleEmulation)},{value:'{"isUserActive":true,"isScreenUnlocked":true}',title:u(d.userActiveScreenUnlocked),text:u(d.userActiveScreenUnlocked)},{value:'{"isUserActive":true,"isScreenUnlocked":false}',title:u(d.userActiveScreenLocked),text:u(d.userActiveScreenLocked)},{value:'{"isUserActive":false,"isScreenUnlocked":true}',title:u(d.userIdleScreenUnlocked),text:u(d.userIdleScreenUnlocked)},{value:'{"isUserActive":false,"isScreenUnlocked":false}',title:u(d.userIdleScreenLocked),text:u(d.userIdleScreenLocked)}]});const A={developerResources:"Developer Resources",showDeveloperResources:"Show Developer Resources"},w=o.i18n.registerUIStrings("panels/developer_resources/developer_resources-meta.ts",A),y=o.i18n.getLazilyComputedLocalizedString.bind(void 0,w);let h;i.ViewManager.registerViewExtension({location:"drawer-view",id:"resource-loading-pane",title:y(A.developerResources),commandPrompt:y(A.showDeveloperResources),order:100,persistence:"closeable",experiment:t.Runtime.ExperimentName.DEVELOPER_RESOURCES_VIEW,loadView:async()=>new((await async function(){return h||(h=await import("../../panels/developer_resources/developer_resources.js")),h}()).DeveloperResourcesView.DeveloperResourcesView)});const R={rendering:"Rendering",showRendering:"Show Rendering",paint:"paint",layout:"layout",fps:"fps",cssMediaType:"CSS media type",cssMediaFeature:"CSS media feature",visionDeficiency:"vision deficiency",colorVisionDeficiency:"color vision deficiency",reloadPage:"Reload page",hardReloadPage:"Hard reload page",forceAdBlocking:"Force ad blocking on this site",blockAds:"Block ads on this site",showAds:"Show ads on this site, if allowed",autoOpenDevTools:"Auto-open DevTools for popups",doNotAutoOpen:"Do not auto-open DevTools for popups",disablePaused:"Disable paused state overlay",toggleCssPrefersColorSchemeMedia:"Toggle CSS media feature prefers-color-scheme"},E=o.i18n.registerUIStrings("entrypoints/inspector_main/inspector_main-meta.ts",R),T=o.i18n.getLazilyComputedLocalizedString.bind(void 0,E);let f;async function v(){return f||(f=await import("../inspector_main/inspector_main.js")),f}i.ViewManager.registerViewExtension({location:"drawer-view",id:"rendering",title:T(R.rendering),commandPrompt:T(R.showRendering),persistence:"closeable",order:50,loadView:async()=>(await v()).RenderingOptions.RenderingOptionsView.instance(),tags:[T(R.paint),T(R.layout),T(R.fps),T(R.cssMediaType),T(R.cssMediaFeature),T(R.visionDeficiency),T(R.colorVisionDeficiency)]}),i.ActionRegistration.registerActionExtension({category:i.ActionRegistration.ActionCategory.NAVIGATION,actionId:"inspector_main.reload",loadActionDelegate:async()=>(await v()).InspectorMain.ReloadActionDelegate.instance(),iconClass:"refresh",title:T(R.reloadPage),bindings:[{platform:"windows,linux",shortcut:"Ctrl+R"},{platform:"windows,linux",shortcut:"F5"},{platform:"mac",shortcut:"Meta+R"}]}),i.ActionRegistration.registerActionExtension({category:i.ActionRegistration.ActionCategory.NAVIGATION,actionId:"inspector_main.hard-reload",loadActionDelegate:async()=>(await v()).InspectorMain.ReloadActionDelegate.instance(),title:T(R.hardReloadPage),bindings:[{platform:"windows,linux",shortcut:"Shift+Ctrl+R"},{platform:"windows,linux",shortcut:"Shift+F5"},{platform:"windows,linux",shortcut:"Ctrl+F5"},{platform:"windows,linux",shortcut:"Ctrl+Shift+F5"},{platform:"mac",shortcut:"Shift+Meta+R"}]}),i.ActionRegistration.registerActionExtension({actionId:"rendering.toggle-prefers-color-scheme",category:i.ActionRegistration.ActionCategory.RENDERING,title:T(R.toggleCssPrefersColorSchemeMedia),loadActionDelegate:async()=>(await v()).RenderingOptions.ReloadActionDelegate.instance()}),e.Settings.registerSettingExtension({category:e.Settings.SettingCategory.NETWORK,title:T(R.forceAdBlocking),settingName:"network.adBlockingEnabled",settingType:e.Settings.SettingType.BOOLEAN,storageType:e.Settings.SettingStorageType.Session,defaultValue:!1,options:[{value:!0,title:T(R.blockAds)},{value:!1,title:T(R.showAds)}]}),e.Settings.registerSettingExtension({category:e.Settings.SettingCategory.GLOBAL,storageType:e.Settings.SettingStorageType.Synced,title:T(R.autoOpenDevTools),settingName:"autoAttachToCreatedPages",settingType:e.Settings.SettingType.BOOLEAN,order:2,defaultValue:!1,options:[{value:!0,title:T(R.autoOpenDevTools)},{value:!1,title:T(R.doNotAutoOpen)}]}),e.Settings.registerSettingExtension({category:e.Settings.SettingCategory.APPEARANCE,storageType:e.Settings.SettingStorageType.Synced,title:T(R.disablePaused),settingName:"disablePausedStateOverlay",settingType:e.Settings.SettingType.BOOLEAN,defaultValue:!1}),i.Toolbar.registerToolbarItem({loadItem:async()=>(await v()).InspectorMain.NodeIndicator.instance(),order:2,location:i.Toolbar.ToolbarItemLocation.MAIN_TOOLBAR_LEFT,showLabel:void 0,condition:void 0,separator:void 0,actionId:void 0}),i.Toolbar.registerToolbarItem({loadItem:async()=>(await v()).OutermostTargetSelector.OutermostTargetSelector.instance(),order:98,location:i.Toolbar.ToolbarItemLocation.MAIN_TOOLBAR_RIGHT,showLabel:void 0,condition:void 0,separator:void 0,actionId:void 0,experiment:t.Runtime.ExperimentName.OUTERMOST_TARGET_SELECTOR});const I={issues:"Issues",showIssues:"Show Issues",cspViolations:"CSP Violations",showCspViolations:"Show CSP Violations"},C=o.i18n.registerUIStrings("panels/issues/issues-meta.ts",I),P=o.i18n.getLazilyComputedLocalizedString.bind(void 0,C);let x;async function N(){return x||(x=await import("../../panels/issues/issues.js")),x}i.ViewManager.registerViewExtension({location:"drawer-view",id:"issues-pane",title:P(I.issues),commandPrompt:P(I.showIssues),order:100,persistence:"closeable",loadView:async()=>(await N()).IssuesPane.IssuesPane.instance()}),i.ViewManager.registerViewExtension({location:"drawer-view",id:"csp-violations-pane",title:P(I.cspViolations),commandPrompt:P(I.showCspViolations),order:100,persistence:"closeable",loadView:async()=>(await N()).CSPViolationsView.CSPViolationsView.instance(),experiment:t.Runtime.ExperimentName.CSP_VIOLATIONS_VIEW}),e.Revealer.registerRevealer({contextTypes:()=>[n.Issue.Issue],destination:e.Revealer.RevealerDestination.ISSUES_VIEW,loadRevealer:async()=>(await N()).IssueRevealer.IssueRevealer.instance()});const D={throttling:"Throttling",showThrottling:"Show Throttling",goOffline:"Go offline",device:"device",throttlingTag:"throttling",enableSlowGThrottling:"Enable slow `3G` throttling",enableFastGThrottling:"Enable fast `3G` throttling",goOnline:"Go online"},M=o.i18n.registerUIStrings("panels/mobile_throttling/mobile_throttling-meta.ts",D),b=o.i18n.getLazilyComputedLocalizedString.bind(void 0,M);let O;async function L(){return O||(O=await import("../../panels/mobile_throttling/mobile_throttling.js")),O}i.ViewManager.registerViewExtension({location:"settings-view",id:"throttling-conditions",title:b(D.throttling),commandPrompt:b(D.showThrottling),order:35,loadView:async()=>(await L()).ThrottlingSettingsTab.ThrottlingSettingsTab.instance(),settings:["customNetworkConditions"]}),i.ActionRegistration.registerActionExtension({actionId:"network-conditions.network-offline",category:i.ActionRegistration.ActionCategory.NETWORK,title:b(D.goOffline),loadActionDelegate:async()=>(await L()).ThrottlingManager.ActionDelegate.instance(),tags:[b(D.device),b(D.throttlingTag)]}),i.ActionRegistration.registerActionExtension({actionId:"network-conditions.network-low-end-mobile",category:i.ActionRegistration.ActionCategory.NETWORK,title:b(D.enableSlowGThrottling),loadActionDelegate:async()=>(await L()).ThrottlingManager.ActionDelegate.instance(),tags:[b(D.device),b(D.throttlingTag)]}),i.ActionRegistration.registerActionExtension({actionId:"network-conditions.network-mid-tier-mobile",category:i.ActionRegistration.ActionCategory.NETWORK,title:b(D.enableFastGThrottling),loadActionDelegate:async()=>(await L()).ThrottlingManager.ActionDelegate.instance(),tags:[b(D.device),b(D.throttlingTag)]}),i.ActionRegistration.registerActionExtension({actionId:"network-conditions.network-online",category:i.ActionRegistration.ActionCategory.NETWORK,title:b(D.goOnline),loadActionDelegate:async()=>(await L()).ThrottlingManager.ActionDelegate.instance(),tags:[b(D.device),b(D.throttlingTag)]}),e.Settings.registerSettingExtension({storageType:e.Settings.SettingStorageType.Synced,settingName:"customNetworkConditions",settingType:e.Settings.SettingType.ARRAY,defaultValue:[]});const V={performance:"Performance",showPerformance:"Show Performance",javascriptProfiler:"JavaScript Profiler",showJavascriptProfiler:"Show JavaScript Profiler",record:"Record",stop:"Stop",startProfilingAndReloadPage:"Start profiling and reload page",saveProfile:"Save profile…",loadProfile:"Load profile…",previousFrame:"Previous frame",nextFrame:"Next frame",showRecentTimelineSessions:"Show recent timeline sessions",previousRecording:"Previous recording",nextRecording:"Next recording",hideChromeFrameInLayersView:"Hide `chrome` frame in Layers view",startStopRecording:"Start/stop recording"},_=o.i18n.registerUIStrings("panels/timeline/timeline-meta.ts",V),k=o.i18n.getLazilyComputedLocalizedString.bind(void 0,_);let U,F;async function z(){return U||(U=await import("../../panels/timeline/timeline.js")),U}async function B(){return F||(F=await import("../../panels/profiler/profiler.js")),F}function j(e){return void 0===U?[]:e(U)}i.ViewManager.registerViewExtension({location:"panel",id:"timeline",title:k(V.performance),commandPrompt:k(V.showPerformance),order:50,loadView:async()=>(await z()).TimelinePanel.TimelinePanel.instance()}),i.ViewManager.registerViewExtension({location:"panel",id:"js_profiler",title:k(V.javascriptProfiler),commandPrompt:k(V.showJavascriptProfiler),persistence:"closeable",order:65,experiment:t.Runtime.ExperimentName.JS_PROFILER_TEMP_ENABLE,loadView:async()=>(await B()).ProfilesPanel.JSProfilerPanel.instance()}),i.ActionRegistration.registerActionExtension({actionId:"timeline.toggle-recording",category:i.ActionRegistration.ActionCategory.PERFORMANCE,iconClass:"record-start",toggleable:!0,toggledIconClass:"record-stop",toggleWithRedColor:!0,contextTypes:()=>j((e=>[e.TimelinePanel.TimelinePanel])),loadActionDelegate:async()=>(await z()).TimelinePanel.ActionDelegate.instance(),options:[{value:!0,title:k(V.record)},{value:!1,title:k(V.stop)}],bindings:[{platform:"windows,linux",shortcut:"Ctrl+E"},{platform:"mac",shortcut:"Meta+E"}]}),i.ActionRegistration.registerActionExtension({actionId:"timeline.record-reload",iconClass:"refresh",contextTypes:()=>j((e=>[e.TimelinePanel.TimelinePanel])),category:i.ActionRegistration.ActionCategory.PERFORMANCE,title:k(V.startProfilingAndReloadPage),loadActionDelegate:async()=>(await z()).TimelinePanel.ActionDelegate.instance(),bindings:[{platform:"windows,linux",shortcut:"Ctrl+Shift+E"},{platform:"mac",shortcut:"Meta+Shift+E"}]}),i.ActionRegistration.registerActionExtension({category:i.ActionRegistration.ActionCategory.PERFORMANCE,actionId:"timeline.save-to-file",contextTypes:()=>j((e=>[e.TimelinePanel.TimelinePanel])),loadActionDelegate:async()=>(await z()).TimelinePanel.ActionDelegate.instance(),title:k(V.saveProfile),bindings:[{platform:"windows,linux",shortcut:"Ctrl+S"},{platform:"mac",shortcut:"Meta+S"}]}),i.ActionRegistration.registerActionExtension({category:i.ActionRegistration.ActionCategory.PERFORMANCE,actionId:"timeline.load-from-file",contextTypes:()=>j((e=>[e.TimelinePanel.TimelinePanel])),loadActionDelegate:async()=>(await z()).TimelinePanel.ActionDelegate.instance(),title:k(V.loadProfile),bindings:[{platform:"windows,linux",shortcut:"Ctrl+O"},{platform:"mac",shortcut:"Meta+O"}]}),i.ActionRegistration.registerActionExtension({actionId:"timeline.jump-to-previous-frame",category:i.ActionRegistration.ActionCategory.PERFORMANCE,title:k(V.previousFrame),contextTypes:()=>j((e=>[e.TimelinePanel.TimelinePanel])),loadActionDelegate:async()=>(await z()).TimelinePanel.ActionDelegate.instance(),bindings:[{shortcut:"["}]}),i.ActionRegistration.registerActionExtension({actionId:"timeline.jump-to-next-frame",category:i.ActionRegistration.ActionCategory.PERFORMANCE,title:k(V.nextFrame),contextTypes:()=>j((e=>[e.TimelinePanel.TimelinePanel])),loadActionDelegate:async()=>(await z()).TimelinePanel.ActionDelegate.instance(),bindings:[{shortcut:"]"}]}),i.ActionRegistration.registerActionExtension({actionId:"timeline.show-history",loadActionDelegate:async()=>(await z()).TimelinePanel.ActionDelegate.instance(),category:i.ActionRegistration.ActionCategory.PERFORMANCE,title:k(V.showRecentTimelineSessions),contextTypes:()=>j((e=>[e.TimelinePanel.TimelinePanel])),bindings:[{platform:"windows,linux",shortcut:"Ctrl+H"},{platform:"mac",shortcut:"Meta+Y"}]}),i.ActionRegistration.registerActionExtension({actionId:"timeline.previous-recording",category:i.ActionRegistration.ActionCategory.PERFORMANCE,loadActionDelegate:async()=>(await z()).TimelinePanel.ActionDelegate.instance(),title:k(V.previousRecording),contextTypes:()=>j((e=>[e.TimelinePanel.TimelinePanel])),bindings:[{platform:"windows,linux",shortcut:"Alt+Left"},{platform:"mac",shortcut:"Meta+Left"}]}),i.ActionRegistration.registerActionExtension({actionId:"timeline.next-recording",category:i.ActionRegistration.ActionCategory.PERFORMANCE,loadActionDelegate:async()=>(await z()).TimelinePanel.ActionDelegate.instance(),title:k(V.nextRecording),contextTypes:()=>j((e=>[e.TimelinePanel.TimelinePanel])),bindings:[{platform:"windows,linux",shortcut:"Alt+Right"},{platform:"mac",shortcut:"Meta+Right"}]}),i.ActionRegistration.registerActionExtension({actionId:"profiler.js-toggle-recording",category:i.ActionRegistration.ActionCategory.JAVASCRIPT_PROFILER,title:k(V.startStopRecording),iconClass:"record-start",toggleable:!0,toggledIconClass:"record-stop",toggleWithRedColor:!0,contextTypes:()=>void 0===F?[]:(e=>[e.ProfilesPanel.JSProfilerPanel])(F),loadActionDelegate:async()=>(await B()).ProfilesPanel.JSProfilerPanel.instance(),bindings:[{platform:"windows,linux",shortcut:"Ctrl+E"},{platform:"mac",shortcut:"Meta+E"}]}),e.Settings.registerSettingExtension({category:e.Settings.SettingCategory.PERFORMANCE,storageType:e.Settings.SettingStorageType.Synced,title:k(V.hideChromeFrameInLayersView),settingName:"frameViewerHideChromeWindow",settingType:e.Settings.SettingType.BOOLEAN,defaultValue:!1}),e.Linkifier.registerLinkifier({contextTypes:()=>j((e=>[e.CLSLinkifier.CLSRect])),loadLinkifier:async()=>(await z()).CLSLinkifier.Linkifier.instance()}),i.ContextMenu.registerItem({location:i.ContextMenu.ItemLocation.TIMELINE_MENU_OPEN,actionId:"timeline.load-from-file",order:10}),i.ContextMenu.registerItem({location:i.ContextMenu.ItemLocation.TIMELINE_MENU_OPEN,actionId:"timeline.save-to-file",order:15});const W={rnWelcome:"⚛️ Welcome",showRnWelcome:"Show React Native Welcome panel"},G=o.i18n.registerUIStrings("panels/rn_welcome/rn_welcome-meta.ts",W),H=o.i18n.getLazilyComputedLocalizedString.bind(void 0,G);let K;i.ViewManager.registerViewExtension({location:"panel",id:"rn-welcome",title:H(W.rnWelcome),commandPrompt:H(W.showRnWelcome),order:-10,persistence:"permanent",loadView:async()=>(await async function(){return K||(K=await import("../../panels/rn_welcome/rn_welcome.js")),K}()).RNWelcome.RNWelcomeImpl.instance(),experiment:t.Runtime.ExperimentName.REACT_NATIVE_SPECIFIC_UI}),t.Runtime.experiments.register(t.Runtime.ExperimentName.REACT_NATIVE_SPECIFIC_UI,"Show React Native-specific UI",!1),t.Runtime.experiments.enableExperimentsByDefault([t.Runtime.ExperimentName.REACT_NATIVE_SPECIFIC_UI]),self.runtime=t.Runtime.Runtime.instance({forceNew:!0}),new a.MainImpl.MainImpl; +import"../shell/shell.js";import*as e from"../../core/common/common.js";import*as t from"../../core/root/root.js";import*as i from"../../ui/legacy/legacy.js";import*as o from"../../core/i18n/i18n.js";import*as n from"../../models/issues_manager/issues_manager.js";import*as a from"../main/main.js";const r={toggleDeviceToolbar:"Toggle device toolbar",captureScreenshot:"Capture screenshot",captureFullSizeScreenshot:"Capture full size screenshot",captureNodeScreenshot:"Capture node screenshot",showMediaQueries:"Show media queries",device:"device",hideMediaQueries:"Hide media queries",showRulers:"Show rulers in the Device Mode toolbar",hideRulers:"Hide rulers in the Device Mode toolbar",showDeviceFrame:"Show device frame",hideDeviceFrame:"Hide device frame"},s=o.i18n.registerUIStrings("panels/emulation/emulation-meta.ts",r),l=o.i18n.getLazilyComputedLocalizedString.bind(void 0,s);let c;async function g(){return c||(c=await import("../../panels/emulation/emulation.js")),c}i.ActionRegistration.registerActionExtension({category:i.ActionRegistration.ActionCategory.MOBILE,actionId:"emulation.toggle-device-mode",toggleable:!0,loadActionDelegate:async()=>(await g()).DeviceModeWrapper.ActionDelegate.instance(),condition:t.Runtime.ConditionName.CAN_DOCK,title:l(r.toggleDeviceToolbar),iconClass:"devices",bindings:[{platform:"windows,linux",shortcut:"Shift+Ctrl+M"},{platform:"mac",shortcut:"Shift+Meta+M"}]}),i.ActionRegistration.registerActionExtension({actionId:"emulation.capture-screenshot",category:i.ActionRegistration.ActionCategory.SCREENSHOT,loadActionDelegate:async()=>(await g()).DeviceModeWrapper.ActionDelegate.instance(),condition:t.Runtime.ConditionName.CAN_DOCK,title:l(r.captureScreenshot)}),i.ActionRegistration.registerActionExtension({actionId:"emulation.capture-full-height-screenshot",category:i.ActionRegistration.ActionCategory.SCREENSHOT,loadActionDelegate:async()=>(await g()).DeviceModeWrapper.ActionDelegate.instance(),condition:t.Runtime.ConditionName.CAN_DOCK,title:l(r.captureFullSizeScreenshot)}),i.ActionRegistration.registerActionExtension({actionId:"emulation.capture-node-screenshot",category:i.ActionRegistration.ActionCategory.SCREENSHOT,loadActionDelegate:async()=>(await g()).DeviceModeWrapper.ActionDelegate.instance(),condition:t.Runtime.ConditionName.CAN_DOCK,title:l(r.captureNodeScreenshot)}),e.Settings.registerSettingExtension({category:e.Settings.SettingCategory.MOBILE,settingName:"showMediaQueryInspector",settingType:e.Settings.SettingType.BOOLEAN,defaultValue:!1,options:[{value:!0,title:l(r.showMediaQueries)},{value:!1,title:l(r.hideMediaQueries)}],tags:[l(r.device)]}),e.Settings.registerSettingExtension({category:e.Settings.SettingCategory.MOBILE,settingName:"emulation.showRulers",settingType:e.Settings.SettingType.BOOLEAN,defaultValue:!1,options:[{value:!0,title:l(r.showRulers)},{value:!1,title:l(r.hideRulers)}],tags:[l(r.device)]}),e.Settings.registerSettingExtension({category:e.Settings.SettingCategory.MOBILE,settingName:"emulation.showDeviceOutline",settingType:e.Settings.SettingType.BOOLEAN,defaultValue:!1,options:[{value:!0,title:l(r.showDeviceFrame)},{value:!1,title:l(r.hideDeviceFrame)}],tags:[l(r.device)]}),i.Toolbar.registerToolbarItem({actionId:"emulation.toggle-device-mode",condition:t.Runtime.ConditionName.CAN_DOCK,location:i.Toolbar.ToolbarItemLocation.MAIN_TOOLBAR_LEFT,order:1,showLabel:void 0,loadItem:void 0,separator:void 0}),e.AppProvider.registerAppProvider({loadAppProvider:async()=>(await g()).AdvancedApp.AdvancedAppProvider.instance(),condition:t.Runtime.ConditionName.CAN_DOCK,order:0}),i.ContextMenu.registerItem({location:i.ContextMenu.ItemLocation.DEVICE_MODE_MENU_SAVE,order:12,actionId:"emulation.capture-screenshot"}),i.ContextMenu.registerItem({location:i.ContextMenu.ItemLocation.DEVICE_MODE_MENU_SAVE,order:13,actionId:"emulation.capture-full-height-screenshot"});const d={sensors:"Sensors",geolocation:"geolocation",timezones:"timezones",locale:"locale",locales:"locales",accelerometer:"accelerometer",deviceOrientation:"device orientation",locations:"Locations",touch:"Touch",devicebased:"Device-based",forceEnabled:"Force enabled",emulateIdleDetectorState:"Emulate Idle Detector state",noIdleEmulation:"No idle emulation",userActiveScreenUnlocked:"User active, screen unlocked",userActiveScreenLocked:"User active, screen locked",userIdleScreenUnlocked:"User idle, screen unlocked",userIdleScreenLocked:"User idle, screen locked",showSensors:"Show Sensors",showLocations:"Show Locations"},m=o.i18n.registerUIStrings("panels/sensors/sensors-meta.ts",d),u=o.i18n.getLazilyComputedLocalizedString.bind(void 0,m);let p;async function S(){return p||(p=await import("../../panels/sensors/sensors.js")),p}i.ViewManager.registerViewExtension({location:"drawer-view",commandPrompt:u(d.showSensors),title:u(d.sensors),id:"sensors",persistence:"closeable",order:100,loadView:async()=>(await S()).SensorsView.SensorsView.instance(),tags:[u(d.geolocation),u(d.timezones),u(d.locale),u(d.locales),u(d.accelerometer),u(d.deviceOrientation)]}),i.ViewManager.registerViewExtension({location:"settings-view",id:"emulation-locations",commandPrompt:u(d.showLocations),title:u(d.locations),order:40,loadView:async()=>(await S()).LocationsSettingsTab.LocationsSettingsTab.instance(),settings:["emulation.locations"]}),e.Settings.registerSettingExtension({storageType:e.Settings.SettingStorageType.Synced,settingName:"emulation.locations",settingType:e.Settings.SettingType.ARRAY,defaultValue:[{title:"Berlin",lat:52.520007,long:13.404954,timezoneId:"Europe/Berlin",locale:"de-DE"},{title:"London",lat:51.507351,long:-.127758,timezoneId:"Europe/London",locale:"en-GB"},{title:"Moscow",lat:55.755826,long:37.6173,timezoneId:"Europe/Moscow",locale:"ru-RU"},{title:"Mountain View",lat:37.386052,long:-122.083851,timezoneId:"America/Los_Angeles",locale:"en-US"},{title:"Mumbai",lat:19.075984,long:72.877656,timezoneId:"Asia/Kolkata",locale:"mr-IN"},{title:"San Francisco",lat:37.774929,long:-122.419416,timezoneId:"America/Los_Angeles",locale:"en-US"},{title:"Shanghai",lat:31.230416,long:121.473701,timezoneId:"Asia/Shanghai",locale:"zh-Hans-CN"},{title:"São Paulo",lat:-23.55052,long:-46.633309,timezoneId:"America/Sao_Paulo",locale:"pt-BR"},{title:"Tokyo",lat:35.689487,long:139.691706,timezoneId:"Asia/Tokyo",locale:"ja-JP"}]}),e.Settings.registerSettingExtension({title:u(d.touch),reloadRequired:!0,settingName:"emulation.touch",settingType:e.Settings.SettingType.ENUM,defaultValue:"none",options:[{value:"none",title:u(d.devicebased),text:u(d.devicebased)},{value:"force",title:u(d.forceEnabled),text:u(d.forceEnabled)}]}),e.Settings.registerSettingExtension({title:u(d.emulateIdleDetectorState),settingName:"emulation.idleDetection",settingType:e.Settings.SettingType.ENUM,defaultValue:"none",options:[{value:"none",title:u(d.noIdleEmulation),text:u(d.noIdleEmulation)},{value:'{"isUserActive":true,"isScreenUnlocked":true}',title:u(d.userActiveScreenUnlocked),text:u(d.userActiveScreenUnlocked)},{value:'{"isUserActive":true,"isScreenUnlocked":false}',title:u(d.userActiveScreenLocked),text:u(d.userActiveScreenLocked)},{value:'{"isUserActive":false,"isScreenUnlocked":true}',title:u(d.userIdleScreenUnlocked),text:u(d.userIdleScreenUnlocked)},{value:'{"isUserActive":false,"isScreenUnlocked":false}',title:u(d.userIdleScreenLocked),text:u(d.userIdleScreenLocked)}]});const w={developerResources:"Developer Resources",showDeveloperResources:"Show Developer Resources"},A=o.i18n.registerUIStrings("panels/developer_resources/developer_resources-meta.ts",w),h=o.i18n.getLazilyComputedLocalizedString.bind(void 0,A);let y;i.ViewManager.registerViewExtension({location:"drawer-view",id:"resource-loading-pane",title:h(w.developerResources),commandPrompt:h(w.showDeveloperResources),order:100,persistence:"closeable",experiment:t.Runtime.ExperimentName.DEVELOPER_RESOURCES_VIEW,loadView:async()=>new((await async function(){return y||(y=await import("../../panels/developer_resources/developer_resources.js")),y}()).DeveloperResourcesView.DeveloperResourcesView)});const R={rendering:"Rendering",showRendering:"Show Rendering",paint:"paint",layout:"layout",fps:"fps",cssMediaType:"CSS media type",cssMediaFeature:"CSS media feature",visionDeficiency:"vision deficiency",colorVisionDeficiency:"color vision deficiency",reloadPage:"Reload page",hardReloadPage:"Hard reload page",forceAdBlocking:"Force ad blocking on this site",blockAds:"Block ads on this site",showAds:"Show ads on this site, if allowed",autoOpenDevTools:"Auto-open DevTools for popups",doNotAutoOpen:"Do not auto-open DevTools for popups",disablePaused:"Disable paused state overlay",toggleCssPrefersColorSchemeMedia:"Toggle CSS media feature prefers-color-scheme"},E=o.i18n.registerUIStrings("entrypoints/inspector_main/inspector_main-meta.ts",R),v=o.i18n.getLazilyComputedLocalizedString.bind(void 0,E);let T;async function f(){return T||(T=await import("../inspector_main/inspector_main.js")),T}i.ViewManager.registerViewExtension({location:"drawer-view",id:"rendering",title:v(R.rendering),commandPrompt:v(R.showRendering),persistence:"closeable",order:50,loadView:async()=>(await f()).RenderingOptions.RenderingOptionsView.instance(),tags:[v(R.paint),v(R.layout),v(R.fps),v(R.cssMediaType),v(R.cssMediaFeature),v(R.visionDeficiency),v(R.colorVisionDeficiency)]}),i.ActionRegistration.registerActionExtension({category:i.ActionRegistration.ActionCategory.NAVIGATION,actionId:"inspector_main.reload",loadActionDelegate:async()=>(await f()).InspectorMain.ReloadActionDelegate.instance(),iconClass:"refresh",title:v(R.reloadPage),bindings:[{platform:"windows,linux",shortcut:"Ctrl+R"},{platform:"windows,linux",shortcut:"F5"},{platform:"mac",shortcut:"Meta+R"}]}),i.ActionRegistration.registerActionExtension({category:i.ActionRegistration.ActionCategory.NAVIGATION,actionId:"inspector_main.hard-reload",loadActionDelegate:async()=>(await f()).InspectorMain.ReloadActionDelegate.instance(),title:v(R.hardReloadPage),bindings:[{platform:"windows,linux",shortcut:"Shift+Ctrl+R"},{platform:"windows,linux",shortcut:"Shift+F5"},{platform:"windows,linux",shortcut:"Ctrl+F5"},{platform:"windows,linux",shortcut:"Ctrl+Shift+F5"},{platform:"mac",shortcut:"Shift+Meta+R"}]}),i.ActionRegistration.registerActionExtension({actionId:"rendering.toggle-prefers-color-scheme",category:i.ActionRegistration.ActionCategory.RENDERING,title:v(R.toggleCssPrefersColorSchemeMedia),loadActionDelegate:async()=>(await f()).RenderingOptions.ReloadActionDelegate.instance()}),e.Settings.registerSettingExtension({category:e.Settings.SettingCategory.NETWORK,title:v(R.forceAdBlocking),settingName:"network.adBlockingEnabled",settingType:e.Settings.SettingType.BOOLEAN,storageType:e.Settings.SettingStorageType.Session,defaultValue:!1,options:[{value:!0,title:v(R.blockAds)},{value:!1,title:v(R.showAds)}]}),e.Settings.registerSettingExtension({category:e.Settings.SettingCategory.GLOBAL,storageType:e.Settings.SettingStorageType.Synced,title:v(R.autoOpenDevTools),settingName:"autoAttachToCreatedPages",settingType:e.Settings.SettingType.BOOLEAN,order:2,defaultValue:!1,options:[{value:!0,title:v(R.autoOpenDevTools)},{value:!1,title:v(R.doNotAutoOpen)}]}),e.Settings.registerSettingExtension({category:e.Settings.SettingCategory.APPEARANCE,storageType:e.Settings.SettingStorageType.Synced,title:v(R.disablePaused),settingName:"disablePausedStateOverlay",settingType:e.Settings.SettingType.BOOLEAN,defaultValue:!1}),i.Toolbar.registerToolbarItem({loadItem:async()=>(await f()).InspectorMain.NodeIndicator.instance(),order:2,location:i.Toolbar.ToolbarItemLocation.MAIN_TOOLBAR_LEFT,showLabel:void 0,condition:void 0,separator:void 0,actionId:void 0}),i.Toolbar.registerToolbarItem({loadItem:async()=>(await f()).OutermostTargetSelector.OutermostTargetSelector.instance(),order:98,location:i.Toolbar.ToolbarItemLocation.MAIN_TOOLBAR_RIGHT,showLabel:void 0,condition:void 0,separator:void 0,actionId:void 0,experiment:t.Runtime.ExperimentName.OUTERMOST_TARGET_SELECTOR});const I={issues:"Issues",showIssues:"Show Issues",cspViolations:"CSP Violations",showCspViolations:"Show CSP Violations"},C=o.i18n.registerUIStrings("panels/issues/issues-meta.ts",I),N=o.i18n.getLazilyComputedLocalizedString.bind(void 0,C);let P;async function x(){return P||(P=await import("../../panels/issues/issues.js")),P}i.ViewManager.registerViewExtension({location:"drawer-view",id:"issues-pane",title:N(I.issues),commandPrompt:N(I.showIssues),order:100,persistence:"closeable",loadView:async()=>(await x()).IssuesPane.IssuesPane.instance()}),i.ViewManager.registerViewExtension({location:"drawer-view",id:"csp-violations-pane",title:N(I.cspViolations),commandPrompt:N(I.showCspViolations),order:100,persistence:"closeable",loadView:async()=>(await x()).CSPViolationsView.CSPViolationsView.instance(),experiment:t.Runtime.ExperimentName.CSP_VIOLATIONS_VIEW}),e.Revealer.registerRevealer({contextTypes:()=>[n.Issue.Issue],destination:e.Revealer.RevealerDestination.ISSUES_VIEW,loadRevealer:async()=>(await x()).IssueRevealer.IssueRevealer.instance()});const D={throttling:"Throttling",showThrottling:"Show Throttling",goOffline:"Go offline",device:"device",throttlingTag:"throttling",enableSlowGThrottling:"Enable slow `3G` throttling",enableFastGThrottling:"Enable fast `3G` throttling",goOnline:"Go online"},b=o.i18n.registerUIStrings("panels/mobile_throttling/mobile_throttling-meta.ts",D),O=o.i18n.getLazilyComputedLocalizedString.bind(void 0,b);let M;async function V(){return M||(M=await import("../../panels/mobile_throttling/mobile_throttling.js")),M}i.ViewManager.registerViewExtension({location:"settings-view",id:"throttling-conditions",title:O(D.throttling),commandPrompt:O(D.showThrottling),order:35,loadView:async()=>(await V()).ThrottlingSettingsTab.ThrottlingSettingsTab.instance(),settings:["customNetworkConditions"]}),i.ActionRegistration.registerActionExtension({actionId:"network-conditions.network-offline",category:i.ActionRegistration.ActionCategory.NETWORK,title:O(D.goOffline),loadActionDelegate:async()=>(await V()).ThrottlingManager.ActionDelegate.instance(),tags:[O(D.device),O(D.throttlingTag)]}),i.ActionRegistration.registerActionExtension({actionId:"network-conditions.network-low-end-mobile",category:i.ActionRegistration.ActionCategory.NETWORK,title:O(D.enableSlowGThrottling),loadActionDelegate:async()=>(await V()).ThrottlingManager.ActionDelegate.instance(),tags:[O(D.device),O(D.throttlingTag)]}),i.ActionRegistration.registerActionExtension({actionId:"network-conditions.network-mid-tier-mobile",category:i.ActionRegistration.ActionCategory.NETWORK,title:O(D.enableFastGThrottling),loadActionDelegate:async()=>(await V()).ThrottlingManager.ActionDelegate.instance(),tags:[O(D.device),O(D.throttlingTag)]}),i.ActionRegistration.registerActionExtension({actionId:"network-conditions.network-online",category:i.ActionRegistration.ActionCategory.NETWORK,title:O(D.goOnline),loadActionDelegate:async()=>(await V()).ThrottlingManager.ActionDelegate.instance(),tags:[O(D.device),O(D.throttlingTag)]}),e.Settings.registerSettingExtension({storageType:e.Settings.SettingStorageType.Synced,settingName:"customNetworkConditions",settingType:e.Settings.SettingType.ARRAY,defaultValue:[]});const _={profiler:"Profiler",showProfiler:"Show Profiler",performance:"Performance",showPerformance:"Show Performance",startStopRecording:"Start/stop recording",showRecentTimelineSessions:"Show recent timeline sessions",record:"Record",stop:"Stop",startProfilingAndReloadPage:"Start profiling and reload page"},L=o.i18n.registerUIStrings("panels/js_profiler/js_profiler-meta.ts",_),k=o.i18n.getLazilyComputedLocalizedString.bind(void 0,L);let U,z;async function F(){return z||(z=await import("../../panels/profiler/profiler.js")),z}async function B(){return U||(U=await import("../../panels/timeline/timeline.js")),U}function W(e){return void 0===U?[]:e(U)}i.ViewManager.registerViewExtension({location:"panel",id:"js_profiler",title:k(_.profiler),commandPrompt:k(_.showProfiler),order:65,persistence:"permanent",experiment:t.Runtime.ExperimentName.JS_PROFILER_TEMP_ENABLE,loadView:async()=>(await F()).ProfilesPanel.JSProfilerPanel.instance()}),i.ActionRegistration.registerActionExtension({actionId:"profiler.js-toggle-recording",category:i.ActionRegistration.ActionCategory.JAVASCRIPT_PROFILER,title:k(_.startStopRecording),iconClass:"record-start",toggleable:!0,toggledIconClass:"record-stop",toggleWithRedColor:!0,contextTypes:()=>void 0===z?[]:(e=>[e.ProfilesPanel.JSProfilerPanel])(z),loadActionDelegate:async()=>(await F()).ProfilesPanel.JSProfilerPanel.instance(),bindings:[{platform:"windows,linux",shortcut:"Ctrl+E"},{platform:"mac",shortcut:"Meta+E"}]}),i.ActionRegistration.registerActionExtension({actionId:"timeline.show-history",loadActionDelegate:async()=>(await B()).TimelinePanel.ActionDelegate.instance(),category:i.ActionRegistration.ActionCategory.PERFORMANCE,title:k(_.showRecentTimelineSessions),contextTypes:()=>W((e=>[e.TimelinePanel.TimelinePanel])),bindings:[{platform:"windows,linux",shortcut:"Ctrl+H"},{platform:"mac",shortcut:"Meta+Y"}]}),i.ActionRegistration.registerActionExtension({actionId:"timeline.toggle-recording",category:i.ActionRegistration.ActionCategory.PERFORMANCE,iconClass:"record-start",toggleable:!0,toggledIconClass:"record-stop",toggleWithRedColor:!0,contextTypes:()=>W((e=>[e.TimelinePanel.TimelinePanel])),loadActionDelegate:async()=>(await B()).TimelinePanel.ActionDelegate.instance(),options:[{value:!0,title:k(_.record)},{value:!1,title:k(_.stop)}],bindings:[{platform:"windows,linux",shortcut:"Ctrl+E"},{platform:"mac",shortcut:"Meta+E"}]}),i.ActionRegistration.registerActionExtension({actionId:"timeline.record-reload",iconClass:"refresh",contextTypes:()=>W((e=>[e.TimelinePanel.TimelinePanel])),category:i.ActionRegistration.ActionCategory.PERFORMANCE,title:k(_.startProfilingAndReloadPage),loadActionDelegate:async()=>(await B()).TimelinePanel.ActionDelegate.instance(),bindings:[{platform:"windows,linux",shortcut:"Ctrl+Shift+E"},{platform:"mac",shortcut:"Meta+Shift+E"}]});const j={rnWelcome:"⚛️ Welcome",showRnWelcome:"Show React Native Welcome panel"},G=o.i18n.registerUIStrings("panels/rn_welcome/rn_welcome-meta.ts",j),K=o.i18n.getLazilyComputedLocalizedString.bind(void 0,G);let H;i.ViewManager.registerViewExtension({location:"panel",id:"rn-welcome",title:K(j.rnWelcome),commandPrompt:K(j.showRnWelcome),order:-10,persistence:"permanent",loadView:async()=>(await async function(){return H||(H=await import("../../panels/rn_welcome/rn_welcome.js")),H}()).RNWelcome.RNWelcomeImpl.instance(),experiment:t.Runtime.ExperimentName.REACT_NATIVE_SPECIFIC_UI}),t.Runtime.experiments.register(t.Runtime.ExperimentName.JS_PROFILER_TEMP_ENABLE,"Enable JavaScript Profiler (legacy)",!1),t.Runtime.experiments.register(t.Runtime.ExperimentName.REACT_NATIVE_SPECIFIC_UI,"Show React Native-specific UI",!1),t.Runtime.experiments.enableExperimentsByDefault([t.Runtime.ExperimentName.JS_PROFILER_TEMP_ENABLE,t.Runtime.ExperimentName.REACT_NATIVE_SPECIFIC_UI]),self.runtime=t.Runtime.Runtime.instance({forceNew:!0}),new a.MainImpl.MainImpl; diff --git a/packages/debugger-frontend/dist/third-party/front_end/inspector.html b/packages/debugger-frontend/dist/third-party/front_end/inspector.html index e0ffaada6db85a..3484b3280d95bd 100644 --- a/packages/debugger-frontend/dist/third-party/front_end/inspector.html +++ b/packages/debugger-frontend/dist/third-party/front_end/inspector.html @@ -6,7 +6,7 @@ -DevTools +DevTools (React Native) + diff --git a/packages/debugger-frontend/dist/third-party/front_end/js_app.html b/packages/debugger-frontend/dist/third-party/front_end/js_app.html index 75ebccc0da689b..b55821f5acc5db 100644 --- a/packages/debugger-frontend/dist/third-party/front_end/js_app.html +++ b/packages/debugger-frontend/dist/third-party/front_end/js_app.html @@ -6,7 +6,7 @@ -DevTools +DevTools (React Native) + diff --git a/packages/debugger-frontend/dist/third-party/front_end/ndb_app.html b/packages/debugger-frontend/dist/third-party/front_end/ndb_app.html index 4044bdca9c23b2..d7cad3a743df1b 100644 --- a/packages/debugger-frontend/dist/third-party/front_end/ndb_app.html +++ b/packages/debugger-frontend/dist/third-party/front_end/ndb_app.html @@ -6,7 +6,7 @@ -DevTools +DevTools (React Native) + diff --git a/packages/debugger-frontend/dist/third-party/front_end/node_app.html b/packages/debugger-frontend/dist/third-party/front_end/node_app.html index 41aa1cfb4b9aed..70b82d8edcc517 100644 --- a/packages/debugger-frontend/dist/third-party/front_end/node_app.html +++ b/packages/debugger-frontend/dist/third-party/front_end/node_app.html @@ -6,7 +6,7 @@ -DevTools +DevTools (React Native) + diff --git a/packages/debugger-frontend/dist/third-party/front_end/panels/js_profiler/js_profiler-meta.js b/packages/debugger-frontend/dist/third-party/front_end/panels/js_profiler/js_profiler-meta.js index 84a0a6b2ddc1cb..8be612235ef86e 100644 --- a/packages/debugger-frontend/dist/third-party/front_end/panels/js_profiler/js_profiler-meta.js +++ b/packages/debugger-frontend/dist/third-party/front_end/panels/js_profiler/js_profiler-meta.js @@ -1 +1 @@ -import*as e from"../../core/i18n/i18n.js";import*as t from"../../core/root/root.js";import*as i from"../../ui/legacy/legacy.js";const o={profiler:"Profiler",showProfiler:"Show Profiler",performance:"Performance",showPerformance:"Show Performance",startStopRecording:"Start/stop recording",showRecentTimelineSessions:"Show recent timeline sessions",record:"Record",stop:"Stop",startProfilingAndReloadPage:"Start profiling and reload page"},n=e.i18n.registerUIStrings("panels/js_profiler/js_profiler-meta.ts",o),r=e.i18n.getLazilyComputedLocalizedString.bind(void 0,n);let a,l;async function s(){return l||(l=await import("../profiler/profiler.js")),l}async function c(){return a||(a=await import("../timeline/timeline.js")),a}function g(e){return void 0===a?[]:e(a)}i.ViewManager.registerViewExtension({location:"panel",id:"js_profiler",title:r(o.profiler),commandPrompt:r(o.showProfiler),order:65,persistence:"closeable",experiment:t.Runtime.ExperimentName.JS_PROFILER_TEMP_ENABLE,loadView:async()=>(await s()).ProfilesPanel.JSProfilerPanel.instance()}),i.ViewManager.registerViewExtension({location:"panel",id:"timeline",title:r(o.performance),commandPrompt:r(o.showPerformance),order:66,hasToolbar:!1,isPreviewFeature:!0,loadView:async()=>(await c()).TimelinePanel.TimelinePanel.instance({forceNew:null,isNode:!0})}),i.ActionRegistration.registerActionExtension({actionId:"profiler.js-toggle-recording",category:i.ActionRegistration.ActionCategory.JAVASCRIPT_PROFILER,title:r(o.startStopRecording),iconClass:"record-start",toggleable:!0,toggledIconClass:"record-stop",toggleWithRedColor:!0,contextTypes(){return e=e=>[e.ProfilesPanel.JSProfilerPanel],void 0===l?[]:e(l);var e},loadActionDelegate:async()=>(await s()).ProfilesPanel.JSProfilerPanel.instance(),bindings:[{platform:"windows,linux",shortcut:"Ctrl+E"},{platform:"mac",shortcut:"Meta+E"}]}),i.ActionRegistration.registerActionExtension({actionId:"timeline.show-history",loadActionDelegate:async()=>(await c()).TimelinePanel.ActionDelegate.instance(),category:i.ActionRegistration.ActionCategory.PERFORMANCE,title:r(o.showRecentTimelineSessions),contextTypes:()=>g((e=>[e.TimelinePanel.TimelinePanel])),bindings:[{platform:"windows,linux",shortcut:"Ctrl+H"},{platform:"mac",shortcut:"Meta+Y"}]}),i.ActionRegistration.registerActionExtension({actionId:"timeline.toggle-recording",category:i.ActionRegistration.ActionCategory.PERFORMANCE,iconClass:"record-start",toggleable:!0,toggledIconClass:"record-stop",toggleWithRedColor:!0,contextTypes:()=>g((e=>[e.TimelinePanel.TimelinePanel])),loadActionDelegate:async()=>(await c()).TimelinePanel.ActionDelegate.instance(),options:[{value:!0,title:r(o.record)},{value:!1,title:r(o.stop)}],bindings:[{platform:"windows,linux",shortcut:"Ctrl+E"},{platform:"mac",shortcut:"Meta+E"}]}),i.ActionRegistration.registerActionExtension({actionId:"timeline.record-reload",iconClass:"refresh",contextTypes:()=>g((e=>[e.TimelinePanel.TimelinePanel])),category:i.ActionRegistration.ActionCategory.PERFORMANCE,title:r(o.startProfilingAndReloadPage),loadActionDelegate:async()=>(await c()).TimelinePanel.ActionDelegate.instance(),bindings:[{platform:"windows,linux",shortcut:"Ctrl+Shift+E"},{platform:"mac",shortcut:"Meta+Shift+E"}]}); +import*as e from"../../core/i18n/i18n.js";import*as t from"../../core/root/root.js";import*as i from"../../ui/legacy/legacy.js";const o={profiler:"Profiler",showProfiler:"Show Profiler",performance:"Performance",showPerformance:"Show Performance",startStopRecording:"Start/stop recording",showRecentTimelineSessions:"Show recent timeline sessions",record:"Record",stop:"Stop",startProfilingAndReloadPage:"Start profiling and reload page"},n=e.i18n.registerUIStrings("panels/js_profiler/js_profiler-meta.ts",o),r=e.i18n.getLazilyComputedLocalizedString.bind(void 0,n);let a,l;async function s(){return l||(l=await import("../profiler/profiler.js")),l}async function c(){return a||(a=await import("../timeline/timeline.js")),a}function g(e){return void 0===a?[]:e(a)}i.ViewManager.registerViewExtension({location:"panel",id:"js_profiler",title:r(o.profiler),commandPrompt:r(o.showProfiler),order:65,persistence:"permanent",experiment:t.Runtime.ExperimentName.JS_PROFILER_TEMP_ENABLE,loadView:async()=>(await s()).ProfilesPanel.JSProfilerPanel.instance()}),i.ActionRegistration.registerActionExtension({actionId:"profiler.js-toggle-recording",category:i.ActionRegistration.ActionCategory.JAVASCRIPT_PROFILER,title:r(o.startStopRecording),iconClass:"record-start",toggleable:!0,toggledIconClass:"record-stop",toggleWithRedColor:!0,contextTypes(){return e=e=>[e.ProfilesPanel.JSProfilerPanel],void 0===l?[]:e(l);var e},loadActionDelegate:async()=>(await s()).ProfilesPanel.JSProfilerPanel.instance(),bindings:[{platform:"windows,linux",shortcut:"Ctrl+E"},{platform:"mac",shortcut:"Meta+E"}]}),i.ActionRegistration.registerActionExtension({actionId:"timeline.show-history",loadActionDelegate:async()=>(await c()).TimelinePanel.ActionDelegate.instance(),category:i.ActionRegistration.ActionCategory.PERFORMANCE,title:r(o.showRecentTimelineSessions),contextTypes:()=>g((e=>[e.TimelinePanel.TimelinePanel])),bindings:[{platform:"windows,linux",shortcut:"Ctrl+H"},{platform:"mac",shortcut:"Meta+Y"}]}),i.ActionRegistration.registerActionExtension({actionId:"timeline.toggle-recording",category:i.ActionRegistration.ActionCategory.PERFORMANCE,iconClass:"record-start",toggleable:!0,toggledIconClass:"record-stop",toggleWithRedColor:!0,contextTypes:()=>g((e=>[e.TimelinePanel.TimelinePanel])),loadActionDelegate:async()=>(await c()).TimelinePanel.ActionDelegate.instance(),options:[{value:!0,title:r(o.record)},{value:!1,title:r(o.stop)}],bindings:[{platform:"windows,linux",shortcut:"Ctrl+E"},{platform:"mac",shortcut:"Meta+E"}]}),i.ActionRegistration.registerActionExtension({actionId:"timeline.record-reload",iconClass:"refresh",contextTypes:()=>g((e=>[e.TimelinePanel.TimelinePanel])),category:i.ActionRegistration.ActionCategory.PERFORMANCE,title:r(o.startProfilingAndReloadPage),loadActionDelegate:async()=>(await c()).TimelinePanel.ActionDelegate.instance(),bindings:[{platform:"windows,linux",shortcut:"Ctrl+Shift+E"},{platform:"mac",shortcut:"Meta+Shift+E"}]}); diff --git a/packages/debugger-frontend/dist/third-party/front_end/panels/profiler/profiler.js b/packages/debugger-frontend/dist/third-party/front_end/panels/profiler/profiler.js index dd3456378ec617..07ff97d1b0a8ea 100644 --- a/packages/debugger-frontend/dist/third-party/front_end/panels/profiler/profiler.js +++ b/packages/debugger-frontend/dist/third-party/front_end/panels/profiler/profiler.js @@ -4,4 +4,4 @@ import*as e from"../../core/platform/platform.js";import*as t from"../../core/i1 ${t} @${this.snapshotNodeId} - `,r=i.$("container");this.prefixObjectCell(r),this.reachableFromWindow&&r.appendChild(s.Fragment.html`🗖`),this.detachedDOMTreeNode&&r.appendChild(s.Fragment.html``),this.appendSourceLocation(r);const o=i.element();return this.depth&&o.style.setProperty("padding-left",this.depth*this.dataGrid.indentWidth+"px"),o}prefixObjectCell(e){}async appendSourceLocation(e){const t=s.Fragment.html``;e.appendChild(t);const i=await this.dataGridInternal.dataDisplayDelegate().linkifyObject(this.snapshotNodeIndex);i?(t.appendChild(i),this.linkElement=i):t.remove()}async queryObjectContent(e,t){return await this.tryQueryObjectContent(e,t)||e.runtimeModel().createRemoteObjectFromPrimitiveValue(qe(Je.previewIsNotAvailable))}async tryQueryObjectContent(e,t){return"string"===this.type?e.runtimeModel().createRemoteObjectFromPrimitiveValue(this.nameInternal):await e.objectForSnapshotObjectId(String(this.snapshotNodeId),t)}async updateHasChildren(){const e=await this.provider().isEmpty();this.setHasChildren(!e)}shortenWindowURL(t,i){const r=t.indexOf("/"),s=i?t.indexOf("@"):t.length;if(-1===r||-1===s)return t;const o=t.substring(r+1,s).trimLeft();let n=e.StringUtilities.trimURL(o);return n.length>40&&(n=e.StringUtilities.trimMiddle(n,40)),t.substr(0,r+2)+n+t.substr(s)}populateContextMenu(e,t,i){if(e.revealSection().appendItem(qe(Je.revealInSummaryView),(()=>{t.showObject(String(this.snapshotNodeId),qe(Je.summary))})),this.referenceName)for(const i of this.referenceName.matchAll(/\((?[^@)]*) @(?\d+)\)/g)){const{objectName:r,snapshotNodeId:s}=i.groups;e.revealSection().appendItem(qe(Je.revealObjectSWithIdSInSummary,{PH1:r,PH2:s}),(()=>{t.showObject(s,qe(Je.summary))}))}i&&e.revealSection().appendItem(qe(Je.storeAsGlobalVariable),(async()=>{const e=await this.tryQueryObjectContent(i,"");if(e){const t=i.target().model(l.ConsoleModel.ConsoleModel);await(t?.saveToTempVariable(s.Context.Context.instance().flavor(l.RuntimeModel.ExecutionContext),e))}else o.Console.Console.instance().error(qe(Je.previewIsNotAvailable))}))}}class Ze extends Ye{referenceName;referenceType;edgeIndex;snapshot;parentObjectNode;cycledWithAncestorGridNode;constructor(e,t,i,r){super(e,i.node),this.referenceName=i.name,this.referenceType=i.type,this.edgeIndex=i.edgeIndex,this.snapshot=t,this.parentObjectNode=r,this.cycledWithAncestorGridNode=this.findAncestorWithSameSnapshotNodeId(),this.cycledWithAncestorGridNode||this.updateHasChildren();const s=this.data;s.count="",s.addedCount="",s.removedCount="",s.countDelta="",s.addedSize="",s.removedSize="",s.sizeDelta=""}retainersDataSource(){return void 0===this.snapshotNodeIndex?null:{snapshot:this.snapshot,snapshotNodeIndex:this.snapshotNodeIndex}}createProvider(){if(void 0===this.snapshotNodeIndex)throw new Error("Cannot create a provider on a root node");return this.snapshot.createEdgesProvider(this.snapshotNodeIndex)}findAncestorWithSameSnapshotNodeId(){let e=this.parentObjectNode;for(;e;){if(e.snapshotNodeId===this.snapshotNodeId)return e;e=e.parentObjectNode}return null}createChildNode(e){return new Ze(this.dataGridInternal,this.snapshot,e,this)}getHash(){return this.edgeIndex}comparator(){const e=this.dataGridInternal.isSortOrderAscending();switch(this.dataGridInternal.sortColumnId()){case"object":return new p.HeapSnapshotModel.ComparatorConfig("!edgeName",e,"retainedSize",!1);case"count":default:return new p.HeapSnapshotModel.ComparatorConfig("!edgeName",!0,"retainedSize",!1);case"shallowSize":return new p.HeapSnapshotModel.ComparatorConfig("selfSize",e,"!edgeName",!0);case"retainedSize":return new p.HeapSnapshotModel.ComparatorConfig("retainedSize",e,"!edgeName",!0);case"distance":return new p.HeapSnapshotModel.ComparatorConfig("distance",e,"name",!0)}}prefixObjectCell(e){let t=this.referenceName||"(empty)",i="name";switch(this.referenceType){case"context":i="object-value-number";break;case"internal":case"hidden":case"weak":i="object-value-null";break;case"element":t=`[${t}]`}this.cycledWithAncestorGridNode&&e.classList.add("cycled-ancessor-node"),e.prepend(s.Fragment.html`${t} ${this.edgeNodeSeparator()}`)}edgeNodeSeparator(){return"::"}}class Xe extends Ze{constructor(e,t,i,r){super(e,t,i,r)}createProvider(){if(void 0===this.snapshotNodeIndex)throw new Error("Cannot create providers on root nodes");return this.snapshot.createRetainingEdgesProvider(this.snapshotNodeIndex)}createChildNode(e){return new Xe(this.dataGridInternal,this.snapshot,e,this)}edgeNodeSeparator(){return qe(Je.inElement)}expand(){this.expandRetainersChain(20)}expandRetainersChain(e){if(!this.populated)return this.once(Ke.Events.PopulateComplete).then((()=>this.expandRetainersChain(e))),void this.populate();if(super.expand(),--e>0&&this.children.length>0){const t=this.children[0];if((t.distance||0)>1)return void t.expandRetainersChain(e)}this.dataGridInternal.dispatchEventToListeners(pt.ExpandRetainersComplete)}}class et extends Ye{baseSnapshotOrSnapshot;isDeletedNode;constructor(t,i,r,s){super(t,r),this.baseSnapshotOrSnapshot=i,this.isDeletedNode=s,this.updateHasChildren();const o=this.data;o.count="",o.countDelta="",o.sizeDelta="",this.isDeletedNode?(o.addedCount="",o.addedSize="",o.removedCount="•",o.removedSize=e.NumberUtilities.withThousandsSeparator(this.shallowSize||0)):(o.addedCount="•",o.addedSize=e.NumberUtilities.withThousandsSeparator(this.shallowSize||0),o.removedCount="",o.removedSize="")}retainersDataSource(){return void 0===this.snapshotNodeIndex?null:{snapshot:this.baseSnapshotOrSnapshot,snapshotNodeIndex:this.snapshotNodeIndex}}createProvider(){if(void 0===this.snapshotNodeIndex)throw new Error("Cannot create providers on root nodes");return this.baseSnapshotOrSnapshot.createEdgesProvider(this.snapshotNodeIndex)}createChildNode(e){return new Ze(this.dataGridInternal,this.baseSnapshotOrSnapshot,e,null)}getHash(){if(void 0===this.snapshotNodeId)throw new Error("Cannot hash root nodes");return this.snapshotNodeId}comparator(){const e=this.dataGridInternal.isSortOrderAscending();switch(this.dataGridInternal.sortColumnId()){case"object":return new p.HeapSnapshotModel.ComparatorConfig("!edgeName",e,"retainedSize",!1);case"distance":return new p.HeapSnapshotModel.ComparatorConfig("distance",e,"retainedSize",!1);case"count":default:return new p.HeapSnapshotModel.ComparatorConfig("!edgeName",!0,"retainedSize",!1);case"addedSize":case"removedSize":case"shallowSize":return new p.HeapSnapshotModel.ComparatorConfig("selfSize",e,"!edgeName",!0);case"retainedSize":return new p.HeapSnapshotModel.ComparatorConfig("retainedSize",e,"!edgeName",!0)}}}class tt extends Ke{nameInternal;nodeFilter;distance;count;shallowSize;retainedSize;constructor(t,i,r,s){super(t,r.count>0),this.nameInternal=i,this.nodeFilter=s,this.distance=r.distance,this.count=r.count,this.shallowSize=r.self,this.retainedSize=r.maxRet;const o=t.snapshot,n=this.retainedSize/o.totalSize*100,a=this.shallowSize/o.totalSize*100;this.data={object:i,count:e.NumberUtilities.withThousandsSeparator(this.count),distance:this.toUIDistance(this.distance),shallowSize:e.NumberUtilities.withThousandsSeparator(this.shallowSize),retainedSize:e.NumberUtilities.withThousandsSeparator(this.retainedSize),"shallowSize-percent":this.toPercentString(a),"retainedSize-percent":this.toPercentString(n)}}get name(){return this.nameInternal}createProvider(){return this.dataGridInternal.snapshot.createNodesProviderForClass(this.nameInternal,this.nodeFilter)}async populateNodeBySnapshotObjectId(e){this.dataGridInternal.resetNameFilter(),await this.expandWithoutPopulate();const t=await this.provider().nodePosition(e);if(-1===t)return this.collapse(),[];await this.populateChildren(t,null);const i=this.childForPosition(t);return i?[this,i]:[]}filteredOut(e){return-1===this.nameInternal.toLowerCase().indexOf(e)}createCell(e){const t="object"===e?super.createCell(e):this.createValueCell(e);return"object"===e&&this.count>1&&t.appendChild(s.Fragment.html`×${this.count}`),t}createChildNode(e){return new et(this.dataGridInternal,this.dataGridInternal.snapshot,e,!1)}comparator(){const e=this.dataGridInternal.isSortOrderAscending(),t=this.dataGridInternal.sortColumnId();switch(t){case"object":return new p.HeapSnapshotModel.ComparatorConfig("name",e,"id",!0);case"distance":return new p.HeapSnapshotModel.ComparatorConfig("distance",e,"retainedSize",!1);case"shallowSize":return new p.HeapSnapshotModel.ComparatorConfig("selfSize",e,"id",!0);case"retainedSize":return new p.HeapSnapshotModel.ComparatorConfig("retainedSize",e,"id",!0);default:throw new Error(`Invalid sort column id ${t}`)}}}class it{addedNodesProvider;deletedNodesProvider;addedCount;removedCount;constructor(e,t,i,r){this.addedNodesProvider=e,this.deletedNodesProvider=t,this.addedCount=i,this.removedCount=r}dispose(){this.addedNodesProvider.dispose(),this.deletedNodesProvider.dispose()}nodePosition(e){throw new Error("Unreachable")}isEmpty(){return Promise.resolve(!1)}async serializeItemsRange(e,t){let i,r;if(e=t)return i.totalLength=this.addedCount+this.removedCount,i;r=i,i=await this.deletedNodesProvider.serializeItemsRange(0,t-i.endPosition)}else r=new p.HeapSnapshotModel.ItemsRange(0,0,0,[]),i=await this.deletedNodesProvider.serializeItemsRange(e-this.addedCount,t-this.addedCount);r.items.length||(r.startPosition=this.addedCount+i.startPosition);for(const e of i.items)e.isAddedNotRemoved=!1;return r.items.push(...i.items),r.endPosition=this.addedCount+i.endPosition,r.totalLength=this.addedCount+this.removedCount,r}async sortAndRewind(e){await this.addedNodesProvider.sortAndRewind(e),await this.deletedNodesProvider.sortAndRewind(e)}}class rt extends Ke{nameInternal;addedCount;removedCount;countDelta;addedSize;removedSize;sizeDelta;deletedIndexes;constructor(t,i,r){super(t,!0),this.nameInternal=i,this.addedCount=r.addedCount,this.removedCount=r.removedCount,this.countDelta=r.countDelta,this.addedSize=r.addedSize,this.removedSize=r.removedSize,this.sizeDelta=r.sizeDelta,this.deletedIndexes=r.deletedIndexes,this.data={object:i,addedCount:e.NumberUtilities.withThousandsSeparator(this.addedCount),removedCount:e.NumberUtilities.withThousandsSeparator(this.removedCount),countDelta:this.signForDelta(this.countDelta)+e.NumberUtilities.withThousandsSeparator(Math.abs(this.countDelta)),addedSize:e.NumberUtilities.withThousandsSeparator(this.addedSize),removedSize:e.NumberUtilities.withThousandsSeparator(this.removedSize),sizeDelta:this.signForDelta(this.sizeDelta)+e.NumberUtilities.withThousandsSeparator(Math.abs(this.sizeDelta))}}get name(){return this.nameInternal}createProvider(){const e=this.dataGridInternal;if(null===e.snapshot||void 0===e.baseSnapshot||void 0===e.baseSnapshot.uid)throw new Error("Data sources have not been set correctly");const t=e.snapshot.createAddedNodesProvider(e.baseSnapshot.uid,this.nameInternal),i=e.baseSnapshot.createDeletedNodesProvider(this.deletedIndexes);if(!t||!i)throw new Error("Failed to create node providers");return new it(t,i,this.addedCount,this.removedCount)}createCell(e){const t=super.createCell(e);return"object"!==e&&t.classList.add("numeric-column"),t}createChildNode(e){const t=this.dataGridInternal;if(e.isAddedNotRemoved){if(null===t.snapshot)throw new Error("Data sources have not been set correctly");return new et(this.dataGridInternal,t.snapshot,e,!1)}if(void 0===t.baseSnapshot)throw new Error("Data sources have not been set correctly");return new et(this.dataGridInternal,t.baseSnapshot,e,!0)}comparator(){const e=this.dataGridInternal.isSortOrderAscending(),t=this.dataGridInternal.sortColumnId();switch(t){case"object":return new p.HeapSnapshotModel.ComparatorConfig("name",e,"id",!0);case"addedCount":case"removedCount":case"countDelta":return new p.HeapSnapshotModel.ComparatorConfig("name",!0,"id",!0);case"addedSize":case"removedSize":case"sizeDelta":return new p.HeapSnapshotModel.ComparatorConfig("selfSize",e,"id",!0);default:throw new Error(`Invalid sort column ${t}`)}}filteredOut(e){return-1===this.nameInternal.toLowerCase().indexOf(e)}signForDelta(e){return 0===e?"":e>0?"+":"−"}}class st extends Ke{populated;allocationNode;constructor(t,i){super(t,i.hasChildren),this.populated=!1,this.allocationNode=i,this.data={liveCount:e.NumberUtilities.withThousandsSeparator(i.liveCount),count:e.NumberUtilities.withThousandsSeparator(i.count),liveSize:e.NumberUtilities.withThousandsSeparator(i.liveSize),size:e.NumberUtilities.withThousandsSeparator(i.size),name:i.name}}populate(){this.populated||this.doPopulate()}async doPopulate(){this.populated=!0;const e=await this.dataGridInternal.snapshot.allocationNodeCallers(this.allocationNode.id),t=e.nodesWithSingleCaller;let i=this;const r=this.dataGridInternal;for(const e of t){const t=new st(r,e);r.appendNode(i,t),i=t,i.populated=!0,this.expanded&&i.expand()}const s=e.branchingCallers;s.sort(this.dataGridInternal.createComparator());for(const e of s)r.appendNode(i,new st(r,e));r.updateVisibleNodes(!0)}expand(){super.expand(),1===this.children.length&&this.children[0].expand()}createCell(e){if("name"!==e)return this.createValueCell(e);const t=super.createCell(e),i=this.allocationNode,r=this.dataGridInternal.heapProfilerModel();if(i.scriptId){const e=this.dataGridInternal.linkifier.linkifyScriptLocation(r?r.target():null,String(i.scriptId),i.scriptName,i.line-1,{columnNumber:i.column-1,inlineFrameIndex:0,className:"profile-node-file"});e.style.maxWidth="75%",t.insertBefore(e,t.firstChild)}return t}allocationNodeId(){return this.allocationNode.id}}var ot=Object.freeze({__proto__:null,get HeapSnapshotGridNode(){return Ke},HeapSnapshotGenericObjectNode:Ye,HeapSnapshotObjectNode:Ze,HeapSnapshotRetainingObjectNode:Xe,HeapSnapshotInstanceNode:et,HeapSnapshotConstructorNode:tt,HeapSnapshotDiffNodesProvider:it,HeapSnapshotDiffNode:rt,AllocationGridNode:st});const nt={distanceFromWindowObject:"Distance from window object",sizeOfTheObjectItselfInBytes:"Size of the object itself in bytes",sizeOfTheObjectPlusTheGraphIt:"Size of the object plus the graph it retains in bytes",object:"Object",distance:"Distance",shallowSize:"Shallow Size",retainedSize:"Retained Size",heapSnapshotRetainment:"Heap Snapshot Retainment",constructorString:"Constructor",heapSnapshotConstructors:"Heap Snapshot Constructors",New:"# New",Deleted:"# Deleted",Delta:"# Delta",allocSize:"Alloc. Size",freedSize:"Freed Size",sizeDelta:"Size Delta",heapSnapshotDiff:"Heap Snapshot Diff",liveCount:"Live Count",count:"Count",liveSize:"Live Size",size:"Size",function:"Function",allocation:"Allocation"},at=t.i18n.registerUIStrings("panels/profiler/HeapSnapshotDataGrids.ts",nt),lt=t.i18n.getLocalizedString.bind(void 0,at),dt=new WeakMap;class ht extends r.DataGrid.DataGridImpl{}class ct extends(o.ObjectWrapper.eventMixin(ht)){snapshot;selectedNode;heapProfilerModelInternal;dataDisplayDelegateInternal;recursiveSortingDepth;populatedAndSorted;nameFilter;nodeFilterInternal;lastSortColumnId;lastSortAscending;constructor(e,t,i){super(i),this.snapshot=null,this.selectedNode=null,this.heapProfilerModelInternal=e,this.dataDisplayDelegateInternal=t;const s=[["distance",lt(nt.distanceFromWindowObject)],["shallowSize",lt(nt.sizeOfTheObjectItselfInBytes)],["retainedSize",lt(nt.sizeOfTheObjectPlusTheGraphIt)]];for(const e of s){const t=this.headerTableHeader(e[0]);t&&t.setAttribute("title",e[1])}this.recursiveSortingDepth=0,this.populatedAndSorted=!1,this.nameFilter=null,this.nodeFilterInternal=new p.HeapSnapshotModel.NodeFilter,this.addEventListener(pt.SortingComplete,this.sortingComplete,this),this.addEventListener(r.DataGrid.Events.SortingChanged,this.sortingChanged,this),this.setRowContextMenuCallback(this.populateContextMenu.bind(this))}async setDataSource(e,t){}isFilteredOut(e){const t=this.nameFilter?this.nameFilter.value().toLowerCase():"";return!!(t&&(e instanceof rt||e instanceof tt)&&e.filteredOut(t))}heapProfilerModel(){return this.heapProfilerModelInternal}dataDisplayDelegate(){return this.dataDisplayDelegateInternal}nodeFilter(){return this.nodeFilterInternal}setNameFilter(e){this.nameFilter=e}defaultPopulateCount(){return 100}disposeAllNodes(){const e=this.topLevelNodes();for(let t=0,i=e.length;ts?1:0;return i.ascending1||(o=-o),0!==o||(r=e[i.fieldName2],s=t[i.fieldName2],o=rs?1:0,i.ascending2||(o=-o)),o}))}performSorting(e){this.recursiveSortingEnter();const t=this.allChildren(this.rootNode());this.rootNode().removeChildren(),t.sort(e);for(let e=0,i=t.length;e=this.topPaddingHeight&&r>=this.bottomPaddingHeight)return;i-=500,s+=1e3;const o=this.selectedNode;this.rootNode().removeChildren(),this.topPaddingHeight=0,this.bottomPaddingHeight=0,this.addVisibleNodes(this.rootNode(),i,i+s),this.setVerticalPadding(this.topPaddingHeight,this.bottomPaddingHeight),o&&(o.parent?o.select(!0):this.selectedNode=o)}addVisibleNodes(e,t,i){if(!e.expanded)return 0;const r=this.allChildren(e);let s=0,o=0;for(;ot)break;s=i}let n=s;for(;o=r&&t{console.assert(!this.scrollToResolveCallback),this.scrollToResolveCallback=e.bind(null,i),this.scrollContainer.window().requestAnimationFrame((()=>{this.scrollToResolveCallback&&(this.scrollToResolveCallback(),this.scrollToResolveCallback=null)}))}))}calculateOffset(e){let t=this.rootNode(),i=0;if(0===e.length)return 0;for(let r=0;r=t}onResize(){super.onResize(),this.updateVisibleNodes(!1)}onScroll(e){this.updateVisibleNodes(!1),this.scrollToResolveCallback&&(this.scrollToResolveCallback(),this.scrollToResolveCallback=null)}}class ft extends ct{constructor(e,t,i,s){super(e,t,{displayName:i,columns:s=s||[{id:"object",title:lt(nt.object),disclosure:!0,sortable:!0},{id:"distance",title:lt(nt.distance),width:"70px",sortable:!0,fixedWidth:!0},{id:"shallowSize",title:lt(nt.shallowSize),width:"110px",sortable:!0,fixedWidth:!0},{id:"retainedSize",title:lt(nt.retainedSize),width:"110px",sortable:!0,fixedWidth:!0,sort:r.DataGrid.Order.Descending}]})}async setDataSource(e,t){this.snapshot=e;const i=new p.HeapSnapshotModel.Node(-1,"root",0,t||e.rootNodeIndex,0,0,"");this.setRootNode(this.createRootNode(e,i)),this.rootNode().sort()}createRootNode(e,t){const i=new p.HeapSnapshotModel.Edge("",t,"",-1);return new Ze(this,e,i,null)}sortingChanged(){const e=this.rootNode();e.hasChildren()&&e.sort()}}class gt extends ft{constructor(e,t){const i=[{id:"object",title:lt(nt.object),disclosure:!0,sortable:!0},{id:"distance",title:lt(nt.distance),width:"70px",sortable:!0,fixedWidth:!0,sort:r.DataGrid.Order.Ascending},{id:"shallowSize",title:lt(nt.shallowSize),width:"110px",sortable:!0,fixedWidth:!0},{id:"retainedSize",title:lt(nt.retainedSize),width:"110px",sortable:!0,fixedWidth:!0}];super(e,t,lt(nt.heapSnapshotRetainment),i)}createRootNode(e,t){const i=new p.HeapSnapshotModel.Edge("",t,"",-1);return new Xe(this,e,i,null)}sortFields(e,t){switch(e){case"object":return new p.HeapSnapshotModel.ComparatorConfig("name",t,"count",!1);case"count":return new p.HeapSnapshotModel.ComparatorConfig("count",t,"name",!0);case"shallowSize":return new p.HeapSnapshotModel.ComparatorConfig("shallowSize",t,"name",!0);case"retainedSize":return new p.HeapSnapshotModel.ComparatorConfig("retainedSize",t,"name",!0);case"distance":return new p.HeapSnapshotModel.ComparatorConfig("distance",t,"name",!0);default:throw new Error(`Unknown column ${e}`)}}reset(){this.rootNode().removeChildren(),this.resetSortingCache()}async setDataSource(e,t){await super.setDataSource(e,t),this.rootNode().expand()}}!function(e){e.ExpandRetainersComplete="ExpandRetainersComplete"}(ut||(ut={}));class vt extends mt{profileIndex;objectIdToSelect;nextRequestedFilter;lastFilter;filterInProgress;constructor(e,t){const i=[{id:"object",title:lt(nt.constructorString),disclosure:!0,sortable:!0},{id:"distance",title:lt(nt.distance),width:"70px",sortable:!0,fixedWidth:!0},{id:"shallowSize",title:lt(nt.shallowSize),width:"110px",sortable:!0,fixedWidth:!0},{id:"retainedSize",title:lt(nt.retainedSize),width:"110px",sort:r.DataGrid.Order.Descending,sortable:!0,fixedWidth:!0}];super(e,t,{displayName:lt(nt.heapSnapshotConstructors).toString(),columns:i}),this.profileIndex=-1,this.objectIdToSelect=null,this.nextRequestedFilter=null}sortFields(e,t){switch(e){case"object":return new p.HeapSnapshotModel.ComparatorConfig("name",t,"retainedSize",!1);case"distance":return new p.HeapSnapshotModel.ComparatorConfig("distance",t,"retainedSize",!1);case"shallowSize":return new p.HeapSnapshotModel.ComparatorConfig("shallowSize",t,"name",!0);case"retainedSize":return new p.HeapSnapshotModel.ComparatorConfig("retainedSize",t,"name",!0);default:throw new Error(`Unknown column ${e}`)}}async revealObjectByHeapSnapshotId(e){if(!this.snapshot)return this.objectIdToSelect=e,null;const t=await this.snapshot.nodeClassName(parseInt(e,10));if(!t)return null;const i=this.topLevelNodes().find((e=>e.name===t));if(!i)return null;const r=await i.populateNodeBySnapshotObjectId(parseInt(e,10));return r.length?this.revealTreeNode(r):null}clear(){this.nextRequestedFilter=null,this.lastFilter=null,this.removeTopLevelNodes()}async setDataSource(e,t){this.snapshot=e,-1===this.profileIndex&&this.populateChildren(),this.objectIdToSelect&&(this.revealObjectByHeapSnapshotId(this.objectIdToSelect),this.objectIdToSelect=null)}setSelectionRange(e,t){this.nodeFilterInternal=new p.HeapSnapshotModel.NodeFilter(e,t),this.populateChildren(this.nodeFilterInternal)}setAllocationNodeId(e){this.nodeFilterInternal=new p.HeapSnapshotModel.NodeFilter,this.nodeFilterInternal.allocationNodeId=e,this.populateChildren(this.nodeFilterInternal)}aggregatesReceived(e,t){this.filterInProgress=null,this.nextRequestedFilter&&this.snapshot&&(this.snapshot.aggregatesWithFilter(this.nextRequestedFilter).then(this.aggregatesReceived.bind(this,this.nextRequestedFilter)),this.filterInProgress=this.nextRequestedFilter,this.nextRequestedFilter=null),this.removeTopLevelNodes(),this.resetSortingCache();for(const i in t)this.appendNode(this.rootNode(),new tt(this,i,t[i],e));this.sortingChanged(),this.lastFilter=e}async populateChildren(e){const t=e||new p.HeapSnapshotModel.NodeFilter;if(this.filterInProgress)this.nextRequestedFilter=this.filterInProgress.equals(t)?null:t;else if((!this.lastFilter||!this.lastFilter.equals(t))&&(this.filterInProgress=t,this.snapshot)){const e=await this.snapshot.aggregatesWithFilter(t);this.aggregatesReceived(t,e)}}filterSelectIndexChanged(e,t){if(this.profileIndex=t,this.nodeFilterInternal=void 0,-1!==t){const i=t>0?e[t-1].maxJSObjectId:0,r=e[t].maxJSObjectId;this.nodeFilterInternal=new p.HeapSnapshotModel.NodeFilter(i,r)}this.populateChildren(this.nodeFilterInternal)}}class wt extends mt{baseSnapshot;constructor(e,t){const i=[{id:"object",title:lt(nt.constructorString),disclosure:!0,sortable:!0},{id:"addedCount",title:lt(nt.New),width:"75px",sortable:!0,fixedWidth:!0},{id:"removedCount",title:lt(nt.Deleted),width:"75px",sortable:!0,fixedWidth:!0},{id:"countDelta",title:lt(nt.Delta),width:"65px",sortable:!0,fixedWidth:!0},{id:"addedSize",title:lt(nt.allocSize),width:"75px",sortable:!0,fixedWidth:!0,sort:r.DataGrid.Order.Descending},{id:"removedSize",title:lt(nt.freedSize),width:"75px",sortable:!0,fixedWidth:!0},{id:"sizeDelta",title:lt(nt.sizeDelta),width:"75px",sortable:!0,fixedWidth:!0}];super(e,t,{displayName:lt(nt.heapSnapshotDiff).toString(),columns:i})}defaultPopulateCount(){return 50}sortFields(e,t){switch(e){case"object":return new p.HeapSnapshotModel.ComparatorConfig("name",t,"count",!1);case"addedCount":return new p.HeapSnapshotModel.ComparatorConfig("addedCount",t,"name",!0);case"removedCount":return new p.HeapSnapshotModel.ComparatorConfig("removedCount",t,"name",!0);case"countDelta":return new p.HeapSnapshotModel.ComparatorConfig("countDelta",t,"name",!0);case"addedSize":return new p.HeapSnapshotModel.ComparatorConfig("addedSize",t,"name",!0);case"removedSize":return new p.HeapSnapshotModel.ComparatorConfig("removedSize",t,"name",!0);case"sizeDelta":return new p.HeapSnapshotModel.ComparatorConfig("sizeDelta",t,"name",!0);default:throw new Error(`Unknown column ${e}`)}}async setDataSource(e,t){this.snapshot=e}setBaseDataSource(e){this.baseSnapshot=e,this.removeTopLevelNodes(),this.resetSortingCache(),this.baseSnapshot!==this.snapshot?this.populateChildren():this.dispatchEventToListeners(pt.SortingComplete)}async populateChildren(){if(null===this.snapshot||void 0===this.baseSnapshot||void 0===this.baseSnapshot.uid)throw new Error("Data sources have not been set correctly");const e=await this.baseSnapshot.aggregatesForDiff(),t=await this.snapshot.calculateSnapshotDiff(this.baseSnapshot.uid,e);for(const e in t){const i=t[e];this.appendNode(this.rootNode(),new rt(this,e,i))}this.sortingChanged()}}class St extends mt{linkifierInternal;topNodes;constructor(e,t){const i=[{id:"liveCount",title:lt(nt.liveCount),width:"75px",sortable:!0,fixedWidth:!0},{id:"count",title:lt(nt.count),width:"65px",sortable:!0,fixedWidth:!0},{id:"liveSize",title:lt(nt.liveSize),width:"75px",sortable:!0,fixedWidth:!0},{id:"size",title:lt(nt.size),width:"75px",sortable:!0,fixedWidth:!0,sort:r.DataGrid.Order.Descending},{id:"name",title:lt(nt.function),disclosure:!0,sortable:!0}];super(e,t,{displayName:lt(nt.allocation).toString(),columns:i}),this.linkifierInternal=new d.Linkifier.Linkifier}get linkifier(){return this.linkifierInternal}dispose(){this.linkifierInternal.reset()}async setDataSource(e,t){this.snapshot=e,this.topNodes=await this.snapshot.allocationTracesTops(),this.populateChildren()}populateChildren(){this.removeTopLevelNodes();const e=this.rootNode(),t=this.topNodes||[];for(const i of t)this.appendNode(e,new st(this,i));this.updateVisibleNodes(!0)}sortingChanged(){void 0!==this.topNodes&&(this.topNodes.sort(this.createComparator()),this.rootNode().removeChildren(),this.populateChildren())}createComparator(){const e=this.sortColumnId(),t=this.sortOrder()===r.DataGrid.Order.Ascending?1:-1;return function(i,r){return i[e]>r[e]?t:i[e]{e(t?new r(this,n):null)})),this.postMessage({callId:s,disposition:"factory",objectId:t,methodName:i,methodArguments:o,newObjectId:n}),null):(this.postMessage({callId:s,disposition:"factory",objectId:t,methodName:i,methodArguments:o,newObjectId:n}),new r(this,n))}callMethod(e,t,i){const r=this.nextCallId++,s=Array.prototype.slice.call(arguments,3);e&&this.callbacks.set(r,e),this.postMessage({callId:r,disposition:"method",objectId:t,methodName:i,methodArguments:s})}startCheckingForLongRunningCalls(){this.interval||(this.checkLongRunningCalls(),this.interval=window.setInterval(this.checkLongRunningCalls.bind(this),300))}checkLongRunningCalls(){for(const e of this.previousCallbacks)this.callbacks.has(e)||this.previousCallbacks.delete(e);const e=Boolean(this.previousCallbacks.size);this.dispatchEventToListeners("Wait",e);for(const e of this.callbacks.keys())this.previousCallbacks.add(e)}messageReceived(e){const t=e.data;if(t.eventName)return void(this.eventHandler&&this.eventHandler(t.eventName,t.data));if(t.error)return t.errorMethodName&&o.Console.Console.instance().error(Tt(Ct.anErrorOccurredWhenACallToMethod,{PH1:t.errorMethodName})),o.Console.Console.instance().error(t.errorCallStack),void this.callbacks.delete(t.callId);const i=this.callbacks.get(t.callId);i&&(this.callbacks.delete(t.callId),i(t.result))}postMessage(e){this.worker.postMessage(e)}}class yt{worker;objectId;constructor(e,t){this.worker=e,this.objectId=t}callWorker(e,t){t.splice(1,0,this.objectId);const i=this.worker[e];if(!i)throw new Error(`Could not find worker with name ${e}.`);return i.apply(this.worker,t)}dispose(){this.worker.disposeObject(this.objectId)}disposeWorker(){this.worker.dispose()}callFactoryMethod(e,t,i,...r){return this.callWorker("callFactoryMethod",Array.prototype.slice.call(arguments,0))}callMethodPromise(e,...t){const i=Array.prototype.slice.call(arguments);return new Promise((e=>this.callWorker("callMethod",[e,...i])))}}class It extends yt{profileUid;snapshotReceivedCallback;constructor(e,t,i,r){super(e,t),this.profileUid=i,this.snapshotReceivedCallback=r}async write(e){await this.callMethodPromise("write",e)}async close(){await this.callMethodPromise("close");const e=await new Promise((e=>this.callFactoryMethod(e,"buildSnapshot",Rt)));this.dispose(),e.setProfileUid(this.profileUid),await e.updateStaticData(),this.snapshotReceivedCallback(e)}}class Rt extends yt{staticData;profileUid;constructor(e,t){super(e,t),this.staticData=null}search(e,t){return this.callMethodPromise("search",e,t)}aggregatesWithFilter(e){return this.callMethodPromise("aggregatesWithFilter",e)}aggregatesForDiff(){return this.callMethodPromise("aggregatesForDiff")}calculateSnapshotDiff(e,t){return this.callMethodPromise("calculateSnapshotDiff",e,t)}nodeClassName(e){return this.callMethodPromise("nodeClassName",e)}createEdgesProvider(e){return this.callFactoryMethod(null,"createEdgesProvider",Et,e)}createRetainingEdgesProvider(e){return this.callFactoryMethod(null,"createRetainingEdgesProvider",Et,e)}createAddedNodesProvider(e,t){return this.callFactoryMethod(null,"createAddedNodesProvider",Et,e,t)}createDeletedNodesProvider(e){return this.callFactoryMethod(null,"createDeletedNodesProvider",Et,e)}createNodesProvider(e){return this.callFactoryMethod(null,"createNodesProvider",Et,e)}createNodesProviderForClass(e,t){return this.callFactoryMethod(null,"createNodesProviderForClass",Et,e,t)}allocationTracesTops(){return this.callMethodPromise("allocationTracesTops")}allocationNodeCallers(e){return this.callMethodPromise("allocationNodeCallers",e)}allocationStack(e){return this.callMethodPromise("allocationStack",e)}dispose(){throw new Error("Should never be called")}get nodeCount(){return this.staticData?this.staticData.nodeCount:0}get rootNodeIndex(){return this.staticData?this.staticData.rootNodeIndex:0}async updateStaticData(){this.staticData=await this.callMethodPromise("updateStaticData")}getStatistics(){return this.callMethodPromise("getStatistics")}getLocation(e){return this.callMethodPromise("getLocation",e)}getSamples(){return this.callMethodPromise("getSamples")}get totalSize(){return this.staticData?this.staticData.totalSize:0}get uid(){return this.profileUid}setProfileUid(e){this.profileUid=e}maxJSObjectId(){return this.staticData?this.staticData.maxJSObjectId:0}}class Et extends yt{constructor(e,t){super(e,t)}nodePosition(e){return this.callMethodPromise("nodePosition",e)}isEmpty(){return this.callMethodPromise("isEmpty")}serializeItemsRange(e,t){return this.callMethodPromise("serializeItemsRange",e,t)}async sortAndRewind(e){await this.callMethodPromise("sortAndRewind",e)}}var Nt=Object.freeze({__proto__:null,HeapSnapshotWorkerProxy:xt,HeapSnapshotProxyObject:yt,HeapSnapshotLoaderProxy:It,HeapSnapshotProxy:Rt,HeapSnapshotProviderProxy:Et});const kt={find:"Find",containment:"Containment",retainers:"Retainers",allocationStack:"Allocation stack",perspective:"Perspective",baseSnapshot:"Base snapshot",filter:"Filter",classFilter:"Class filter",code:"Code",strings:"Strings",jsArrays:"JS arrays",typedArrays:"Typed arrays",systemObjects:"System objects",selectedSizeS:"Selected size: {PH1}",allObjects:"All objects",objectsAllocatedBeforeS:"Objects allocated before {PH1}",objectsAllocatedBetweenSAndS:"Objects allocated between {PH1} and {PH2}",summary:"Summary",comparison:"Comparison",allocation:"Allocation",liveObjects:"Live objects",statistics:"Statistics",heapSnapshot:"Heap snapshot",takeHeapSnapshot:"Take heap snapshot",heapSnapshots:"HEAP SNAPSHOTS",heapSnapshotProfilesShowMemory:"Heap snapshot profiles show memory distribution among your page's JavaScript objects and related DOM nodes.",exposeInternals:"Expose internals (includes additional implementation-specific details)",captureNumericValue:"Include numerical values in capture",snapshotting:"Snapshotting…",snapshotD:"Snapshot {PH1}",percentagePlaceholder:"{PH1}%",allocationInstrumentationOn:"Allocation instrumentation on timeline",stopRecordingHeapProfile:"Stop recording heap profile",startRecordingHeapProfile:"Start recording heap profile",recordAllocationStacksExtra:"Record stack traces of allocations (extra performance overhead)",recording:"Recording…",allocationTimelines:"ALLOCATION TIMELINES",AllocationTimelinesShowInstrumented:"Allocation timelines show instrumented JavaScript memory allocations over time. Once profile is recorded you can select a time interval to see objects that were allocated within it and still alive by the end of recording. Use this profile type to isolate memory leaks.",loading:"Loading…",savingD:"Saving… {PH1}%",sKb:"{PH1} kB",heapMemoryUsage:"Heap memory usage",stackWasNotRecordedForThisObject:"Stack was not recorded for this object because it had been allocated before this profile recording started."},Dt=t.i18n.registerUIStrings("panels/profiler/HeapSnapshotView.ts",kt),Mt=t.i18n.getLocalizedString.bind(void 0,Dt),Ft=t.i18n.registerUIStrings("panels/profiler/ModuleUIStrings.ts",{buildingEdgeIndexes:"Building edge indexes…",buildingRetainers:"Building retainers…",propagatingDomState:"Propagating DOM state…",calculatingNodeFlags:"Calculating node flags…",calculatingDistances:"Calculating distances…",buildingPostorderIndex:"Building postorder index…",buildingDominatorTree:"Building dominator tree…",calculatingRetainedSizes:"Calculating retained sizes…",buildingDominatedNodes:"Building dominated nodes…",calculatingStatistics:"Calculating statistics…",calculatingSamples:"Calculating samples…",buildingLocations:"Building locations…",finishedProcessing:"Finished processing.",buildingAllocationStatistics:"Building allocation statistics…",done:"Done",processingSnapshot:"Processing snapshot…",parsingStrings:"Parsing strings…",loadingSnapshotInfo:"Loading snapshot info…",loadingNodesD:"Loading nodes… {PH1}%",loadingEdgesD:"Loading edges… {PH1}%",loadingAllocationTracesD:"Loading allocation traces… {PH1}%",loadingSamples:"Loading samples…",loadingLocations:"Loading locations…",loadingStrings:"Loading strings…"}),Ht=t.i18n.getLocalizedString.bind(void 0,Ft);class Lt extends s.View.SimpleView{searchResults;profile;linkifier;parentDataDisplayDelegate;searchableViewInternal;splitWidget;containmentDataGrid;containmentWidget;statisticsView;constructorsDataGrid;constructorsWidget;diffDataGrid;diffWidget;allocationDataGrid;allocationWidget;allocationStackView;tabbedPane;retainmentDataGrid;retainmentWidget;objectDetailsView;perspectives;comparisonPerspective;perspectiveSelect;baseSelect;filterSelect;classNameFilter;selectedSizeText;popoverHelper;currentPerspectiveIndex;currentPerspective;dataGrid;searchThrottler;baseProfile;trackingOverviewGrid;currentSearchResultIndex=-1;currentQuery;constructor(e,t){super(Mt(kt.heapSnapshot)),this.searchResults=[],this.element.classList.add("heap-snapshot-view"),this.profile=t,this.linkifier=new d.Linkifier.Linkifier;const i=t.profileType();i.addEventListener("SnapshotReceived",this.onReceiveSnapshot,this),i.addEventListener(D.RemoveProfileHeader,this.onProfileHeaderRemoved,this);const n=i.id===At.TypeId;n&&this.createOverview();const a=Kt.trackingHeapSnapshotProfileType.recordAllocationStacksSetting().get();this.parentDataDisplayDelegate=e,this.searchableViewInternal=new s.SearchableView.SearchableView(this,null),this.searchableViewInternal.setPlaceholder(Mt(kt.find),Mt(kt.find)),this.searchableViewInternal.show(this.element),this.splitWidget=new s.SplitWidget.SplitWidget(!1,!0,"heapSnapshotSplitViewState",200,200),this.splitWidget.show(this.searchableViewInternal.element);const l=t.heapProfilerModel();let h;if(this.containmentDataGrid=new ft(l,this,Mt(kt.containment)),this.containmentDataGrid.addEventListener(r.DataGrid.Events.SelectedNode,this.selectionChanged,this),this.containmentWidget=this.containmentDataGrid.asWidget(),this.containmentWidget.setMinimumSize(50,25),this.statisticsView=new _t,this.constructorsDataGrid=new vt(l,this),this.constructorsDataGrid.addEventListener(r.DataGrid.Events.SelectedNode,this.selectionChanged,this),this.constructorsWidget=this.constructorsDataGrid.asWidget(),this.constructorsWidget.setMinimumSize(50,25),this.diffDataGrid=new wt(l,this),this.diffDataGrid.addEventListener(r.DataGrid.Events.SelectedNode,this.selectionChanged,this),this.diffWidget=this.diffDataGrid.asWidget(),this.diffWidget.setMinimumSize(50,25),this.allocationDataGrid=null,n&&a&&(this.allocationDataGrid=new St(l,this),this.allocationDataGrid.addEventListener(r.DataGrid.Events.SelectedNode,this.onSelectAllocationNode,this),this.allocationWidget=this.allocationDataGrid.asWidget(),this.allocationWidget.setMinimumSize(50,25),this.allocationStackView=new Jt(l),this.allocationStackView.setMinimumSize(50,25),this.tabbedPane=new s.TabbedPane.TabbedPane),this.retainmentDataGrid=new gt(l,this),this.retainmentWidget=this.retainmentDataGrid.asWidget(),this.retainmentWidget.setMinimumSize(50,21),this.retainmentWidget.element.classList.add("retaining-paths-view"),this.allocationStackView)this.tabbedPane=new s.TabbedPane.TabbedPane,this.tabbedPane.appendTab("retainers",Mt(kt.retainers),this.retainmentWidget),this.tabbedPane.appendTab("allocation-stack",Mt(kt.allocationStack),this.allocationStackView),h=this.tabbedPane.headerElement(),this.objectDetailsView=this.tabbedPane;else{const e=document.createElement("div");e.classList.add("heap-snapshot-view-resizer");const t=e.createChild("div","title");e.createChild("div","verticalResizerIcon");t.createChild("span").textContent=Mt(kt.retainers),h=e,this.objectDetailsView=new s.Widget.VBox,this.objectDetailsView.element.appendChild(e),this.retainmentWidget.show(this.objectDetailsView.element)}this.splitWidget.hideDefaultResizer(),this.splitWidget.installResizer(h),this.retainmentDataGrid.addEventListener(r.DataGrid.Events.SelectedNode,this.inspectedObjectChanged,this),this.retainmentDataGrid.reset(),this.perspectives=[],this.comparisonPerspective=new zt,this.perspectives.push(new Ot),t.profileType()!==Kt.trackingHeapSnapshotProfileType&&this.perspectives.push(this.comparisonPerspective),this.perspectives.push(new Bt),this.allocationWidget&&this.perspectives.push(new Gt),this.perspectives.push(new Vt),this.perspectiveSelect=new s.Toolbar.ToolbarComboBox(this.onSelectedPerspectiveChanged.bind(this),Mt(kt.perspective)),this.updatePerspectiveOptions(),this.baseSelect=new s.Toolbar.ToolbarComboBox(this.changeBase.bind(this),Mt(kt.baseSnapshot)),this.baseSelect.setVisible(!1),this.updateBaseOptions(),this.filterSelect=new s.Toolbar.ToolbarComboBox(this.changeFilter.bind(this),Mt(kt.filter)),this.filterSelect.setVisible(!1),this.updateFilterOptions(),this.classNameFilter=new s.Toolbar.ToolbarInput(Mt(kt.classFilter)),this.classNameFilter.setVisible(!1),this.constructorsDataGrid.setNameFilter(this.classNameFilter),this.diffDataGrid.setNameFilter(this.classNameFilter),this.selectedSizeText=new s.Toolbar.ToolbarText,this.popoverHelper=new s.PopoverHelper.PopoverHelper(this.element,this.getPopoverRequest.bind(this)),this.popoverHelper.setDisableOnClick(!0),this.popoverHelper.setHasPadding(!0),this.element.addEventListener("scroll",this.popoverHelper.hidePopover.bind(this.popoverHelper),!0),this.currentPerspectiveIndex=0,this.currentPerspective=this.perspectives[0],this.currentPerspective.activate(this),this.dataGrid=this.currentPerspective.masterGrid(this),this.populate(),this.searchThrottler=new o.Throttler.Throttler(0);for(const e of this.profiles())e.addEventListener(k.ProfileTitleChanged,this.updateControls,this)}createOverview(){const e=this.profile.profileType();this.trackingOverviewGrid=new Re,this.trackingOverviewGrid.addEventListener("IdsRangeChanged",this.onIdsRangeChanged.bind(this)),this.profile.fromFile()||e.profileBeingRecorded()!==this.profile||(e.addEventListener("HeapStatsUpdate",this.onHeapStatsUpdate,this),e.addEventListener("TrackingStopped",this.onStopTracking,this),this.trackingOverviewGrid.start())}onStopTracking(){const e=this.profile.profileType();e.removeEventListener("HeapStatsUpdate",this.onHeapStatsUpdate,this),e.removeEventListener("TrackingStopped",this.onStopTracking,this),this.trackingOverviewGrid&&this.trackingOverviewGrid.stop()}onHeapStatsUpdate({data:e}){this.trackingOverviewGrid&&this.trackingOverviewGrid.setSamples(e)}searchableView(){return this.searchableViewInternal}showProfile(e){return this.parentDataDisplayDelegate.showProfile(e)}showObject(e,t){Number(e)<=this.profile.maxJSObjectId?this.selectLiveObject(t,e):this.parentDataDisplayDelegate.showObject(e,t)}async linkifyObject(e){const t=this.profile.heapProfilerModel();if(!t)return null;const i=await this.profile.getLocation(e);if(!i)return null;const r=t.runtimeModel().debuggerModel().createRawLocationByScriptId(String(i.scriptId),i.lineNumber,i.columnNumber);if(!r)return null;const s=r.script(),o=s&&s.sourceURL;return o&&this.linkifier?this.linkifier.linkifyRawLocation(r,o):null}async populate(){const e=await this.profile.loadPromise;if(this.retrieveStatistics(e),this.dataGrid&&this.dataGrid.setDataSource(e,0),this.profile.profileType().id===At.TypeId&&this.profile.fromFile()){const t=await e.getSamples();if(t){console.assert(Boolean(t.timestamps.length));const e=new Ne;e.sizes=t.sizes,e.ids=t.lastAssignedIds,e.timestamps=t.timestamps,e.max=t.sizes,e.totalTime=Math.max(t.timestamps[t.timestamps.length-1]||0,1e4),this.trackingOverviewGrid&&this.trackingOverviewGrid.setSamples(e)}}const t=this.profiles().indexOf(this.profile);this.baseSelect.setSelectedIndex(Math.max(0,t-1)),this.trackingOverviewGrid&&this.trackingOverviewGrid.updateGrid()}async retrieveStatistics(e){const t=await e.getStatistics(),i=[{value:t.code,color:"#f77",title:Mt(kt.code)},{value:t.strings,color:"#5e5",title:Mt(kt.strings)},{value:t.jsArrays,color:"#7af",title:Mt(kt.jsArrays)},{value:t.native,color:"#fc5",title:Mt(kt.typedArrays)},{value:t.system,color:"#98f",title:Mt(kt.systemObjects)}];return this.statisticsView.setTotalAndRecords(t.total,i),t}onIdsRangeChanged(t){const{minId:i,maxId:r}=t.data;this.selectedSizeText.setText(Mt(kt.selectedSizeS,{PH1:e.NumberUtilities.bytesToString(t.data.size)})),this.constructorsDataGrid.snapshot&&this.constructorsDataGrid.setSelectionRange(i,r)}async toolbarItems(){const e=[this.perspectiveSelect,this.classNameFilter];return this.profile.profileType()!==Kt.trackingHeapSnapshotProfileType&&e.push(this.baseSelect,this.filterSelect),e.push(this.selectedSizeText),e}willHide(){this.currentSearchResultIndex=-1,this.popoverHelper.hidePopover()}supportsCaseSensitiveSearch(){return!0}supportsRegexSearch(){return!1}onSearchCanceled(){this.currentSearchResultIndex=-1,this.searchResults=[]}selectRevealedNode(e){e&&e.select()}performSearch(e,t,i){const r=new p.HeapSnapshotModel.SearchConfig(e.query.trim(),e.caseSensitive,e.isRegex,t,i||!1);this.searchThrottler.schedule(this.performSearchInternal.bind(this,r))}async performSearchInternal(e){if(this.onSearchCanceled(),!this.currentPerspective.supportsSearch())return;this.currentQuery=e;const t=e.query.trim();if(!t)return;if("@"===t.charAt(0)){const e=parseInt(t.substring(1),10);if(isNaN(e))return;if(!this.dataGrid)return;const i=await this.dataGrid.revealObjectByHeapSnapshotId(String(e));return void this.selectRevealedNode(i)}if(!this.profile.snapshotProxy||!this.dataGrid)return;const i=this.dataGrid.nodeFilter();this.searchResults=i?await this.profile.snapshotProxy.search(this.currentQuery,i):[],this.searchableViewInternal.updateSearchMatchesCount(this.searchResults.length),this.searchResults.length&&(this.currentSearchResultIndex=e.jumpBackward?this.searchResults.length-1:0),await this.jumpToSearchResult(this.currentSearchResultIndex)}jumpToNextSearchResult(){this.searchResults.length&&(this.currentSearchResultIndex=(this.currentSearchResultIndex+1)%this.searchResults.length,this.searchThrottler.schedule(this.jumpToSearchResult.bind(this,this.currentSearchResultIndex)))}jumpToPreviousSearchResult(){this.searchResults.length&&(this.currentSearchResultIndex=(this.currentSearchResultIndex+this.searchResults.length-1)%this.searchResults.length,this.searchThrottler.schedule(this.jumpToSearchResult.bind(this,this.currentSearchResultIndex)))}async jumpToSearchResult(e){if(this.searchableViewInternal.updateCurrentMatchIndex(e),-1===e)return;if(!this.dataGrid)return;const t=await this.dataGrid.revealObjectByHeapSnapshotId(String(this.searchResults[e]));this.selectRevealedNode(t)}refreshVisibleData(){if(!this.dataGrid)return;let e=this.dataGrid.rootNode().children[0];for(;e;)e.refresh(),e=e.traverseNextNode(!1,null,!0)}changeBase(){if(this.baseProfile===this.profiles()[this.baseSelect.selectedIndex()])return;this.baseProfile=this.profiles()[this.baseSelect.selectedIndex()];const e=this.dataGrid;e.snapshot&&this.baseProfile.loadPromise.then(e.setBaseDataSource.bind(e)),this.currentQuery&&this.searchResults&&this.performSearch(this.currentQuery,!1)}changeFilter(){const e=this.filterSelect.selectedIndex()-1;this.dataGrid&&(this.dataGrid.filterSelectIndexChanged(this.profiles(),e),this.currentQuery&&this.searchResults&&this.performSearch(this.currentQuery,!1))}profiles(){return this.profile.profileType().getProfiles()}selectionChanged(e){const t=e.data;this.setSelectedNodeForDetailsView(t),this.inspectedObjectChanged(e)}onSelectAllocationNode(e){const t=e.data;this.constructorsDataGrid.setAllocationNodeId(t.allocationNodeId()),this.setSelectedNodeForDetailsView(null)}inspectedObjectChanged(e){const t=e.data,i=this.profile.heapProfilerModel();i&&t instanceof Ye&&i.addInspectedHeapObject(String(t.snapshotNodeId))}setSelectedNodeForDetailsView(e){const t=e&&e.retainersDataSource();t?(this.retainmentDataGrid.setDataSource(t.snapshot,t.snapshotNodeIndex),this.allocationStackView&&this.allocationStackView.setAllocatedObject(t.snapshot,t.snapshotNodeIndex)):(this.allocationStackView&&this.allocationStackView.clear(),this.retainmentDataGrid.reset())}async changePerspectiveAndWait(e){const t=this.perspectives.findIndex((t=>t.title()===e));if(-1===t||this.currentPerspectiveIndex===t)return;const i=this.perspectives[t].masterGrid(this);if(!i)return;const r=i.once(pt.ContentShown),s=this.perspectiveSelect.options().find((e=>e.value===String(t)));this.perspectiveSelect.select(s),this.changePerspective(t),await r}async updateDataSourceAndView(){const e=this.dataGrid;if(!e||e.snapshot)return;const t=await this.profile.loadPromise;if(this.dataGrid!==e)return;if(e.snapshot!==t&&e.setDataSource(t,0),e!==this.diffDataGrid)return;this.baseProfile||(this.baseProfile=this.profiles()[this.baseSelect.selectedIndex()]);const i=await this.baseProfile.loadPromise;this.diffDataGrid.baseSnapshot!==i&&this.diffDataGrid.setBaseDataSource(i)}onSelectedPerspectiveChanged(e){this.changePerspective(Number(e.target.selectedOptions[0].value))}changePerspective(e){if(e===this.currentPerspectiveIndex)return;this.currentPerspectiveIndex=e,this.currentPerspective.deactivate(this);const t=this.perspectives[e];this.currentPerspective=t,this.dataGrid=t.masterGrid(this),t.activate(this),this.refreshVisibleData(),this.dataGrid&&this.dataGrid.updateWidths(),this.updateDataSourceAndView(),this.currentQuery&&this.searchResults&&this.performSearch(this.currentQuery,!1)}async selectLiveObject(e,t){if(await this.changePerspectiveAndWait(e),!this.dataGrid)return;const i=await this.dataGrid.revealObjectByHeapSnapshotId(t);i?i.select():o.Console.Console.instance().error("Cannot find corresponding heap snapshot node")}getPopoverRequest(e){const t=s.UIUtils.enclosingNodeOrSelfWithNodeName(e.target,"span"),i=s.UIUtils.enclosingNodeOrSelfWithNodeName(e.target,"tr");if(!i)return null;if(!this.dataGrid)return null;const r=this.dataGrid.dataGridNodeFromNode(i)||this.containmentDataGrid.dataGridNodeFromNode(i)||this.constructorsDataGrid.dataGridNodeFromNode(i)||this.diffDataGrid.dataGridNodeFromNode(i)||this.allocationDataGrid&&this.allocationDataGrid.dataGridNodeFromNode(i)||this.retainmentDataGrid.dataGridNodeFromNode(i),o=this.profile.heapProfilerModel();if(!r||!t||!o)return null;let n;return{box:t.boxInWindow(),show:async e=>{if(!o)return!1;const t=await r.queryObjectContent(o,"popover");return!!t&&(n=await u.ObjectPopoverHelper.ObjectPopoverHelper.buildObjectPopover(t,e),!!n||(o.runtimeModel().releaseObjectGroup("popover"),!1))},hide:()=>{o.runtimeModel().releaseObjectGroup("popover"),n&&n.dispose()}}}updatePerspectiveOptions(){const e=this.profiles().length>1;this.perspectiveSelect.removeOptions(),this.perspectives.forEach(((t,i)=>{(e||t!==this.comparisonPerspective)&&this.perspectiveSelect.createOption(t.title(),String(i))}))}updateBaseOptions(){const e=this.profiles(),t=this.baseSelect.selectedIndex();this.baseSelect.removeOptions();for(const t of e)this.baseSelect.createOption(t.title);t>-1&&this.baseSelect.setSelectedIndex(t)}updateFilterOptions(){const e=this.profiles(),t=this.filterSelect.selectedIndex();this.filterSelect.removeOptions(),this.filterSelect.createOption(Mt(kt.allObjects));for(let t=0;t-1&&this.filterSelect.setSelectedIndex(t)}updateControls(){this.updatePerspectiveOptions(),this.updateBaseOptions(),this.updateFilterOptions()}onReceiveSnapshot(e){this.updateControls();e.data.addEventListener(k.ProfileTitleChanged,this.updateControls,this)}onProfileHeaderRemoved(e){const t=e.data;t.removeEventListener(k.ProfileTitleChanged,this.updateControls,this),this.profile===t?(this.detach(),this.profile.profileType().removeEventListener("SnapshotReceived",this.onReceiveSnapshot,this),this.profile.profileType().removeEventListener(D.RemoveProfileHeader,this.onProfileHeaderRemoved,this),this.dispose()):this.updateControls()}dispose(){this.linkifier.dispose(),this.popoverHelper.dispose(),this.allocationStackView&&(this.allocationStackView.clear(),this.allocationDataGrid&&this.allocationDataGrid.dispose()),this.onStopTracking(),this.trackingOverviewGrid&&this.trackingOverviewGrid.removeEventListener("IdsRangeChanged",this.onIdsRangeChanged.bind(this))}}class jt{titleInternal;constructor(e){this.titleInternal=e}activate(e){}deactivate(e){e.baseSelect.setVisible(!1),e.filterSelect.setVisible(!1),e.classNameFilter.setVisible(!1),e.trackingOverviewGrid&&e.trackingOverviewGrid.detach(),e.allocationWidget&&e.allocationWidget.detach(),e.statisticsView&&e.statisticsView.detach(),e.splitWidget.detach(),e.splitWidget.detachChildWidgets()}masterGrid(e){return null}title(){return this.titleInternal}supportsSearch(){return!1}}class Ot extends jt{constructor(){super(Mt(kt.summary))}activate(e){e.splitWidget.setMainWidget(e.constructorsWidget),e.splitWidget.setSidebarWidget(e.objectDetailsView),e.splitWidget.show(e.searchableViewInternal.element),e.filterSelect.setVisible(!0),e.classNameFilter.setVisible(!0),e.trackingOverviewGrid&&(e.trackingOverviewGrid.show(e.searchableViewInternal.element,e.splitWidget.element),e.trackingOverviewGrid.update(),e.trackingOverviewGrid.updateGrid())}masterGrid(e){return e.constructorsDataGrid}supportsSearch(){return!0}}class zt extends jt{constructor(){super(Mt(kt.comparison))}activate(e){e.splitWidget.setMainWidget(e.diffWidget),e.splitWidget.setSidebarWidget(e.objectDetailsView),e.splitWidget.show(e.searchableViewInternal.element),e.baseSelect.setVisible(!0),e.classNameFilter.setVisible(!0)}masterGrid(e){return e.diffDataGrid}supportsSearch(){return!0}}class Bt extends jt{constructor(){super(Mt(kt.containment))}activate(e){e.splitWidget.setMainWidget(e.containmentWidget),e.splitWidget.setSidebarWidget(e.objectDetailsView),e.splitWidget.show(e.searchableViewInternal.element)}masterGrid(e){return e.containmentDataGrid}}class Gt extends jt{allocationSplitWidget;constructor(){super(Mt(kt.allocation)),this.allocationSplitWidget=new s.SplitWidget.SplitWidget(!1,!0,"heapSnapshotAllocationSplitViewState",200,200),this.allocationSplitWidget.setSidebarWidget(new s.Widget.VBox)}activate(e){e.allocationWidget&&this.allocationSplitWidget.setMainWidget(e.allocationWidget),e.splitWidget.setMainWidget(e.constructorsWidget),e.splitWidget.setSidebarWidget(e.objectDetailsView);const t=new s.Widget.VBox,i=document.createElement("div");i.classList.add("heap-snapshot-view-resizer");const r=i.createChild("div","title").createChild("span");if(i.createChild("div","verticalResizerIcon"),r.textContent=Mt(kt.liveObjects),this.allocationSplitWidget.hideDefaultResizer(),this.allocationSplitWidget.installResizer(i),t.element.appendChild(i),e.splitWidget.show(t.element),this.allocationSplitWidget.setSidebarWidget(t),this.allocationSplitWidget.show(e.searchableViewInternal.element),e.constructorsDataGrid.clear(),e.allocationDataGrid){const t=e.allocationDataGrid.selectedNode;t&&e.constructorsDataGrid.setAllocationNodeId(t.allocationNodeId())}}deactivate(e){this.allocationSplitWidget.detach(),super.deactivate(e)}masterGrid(e){return e.allocationDataGrid}}class Vt extends jt{constructor(){super(Mt(kt.statistics))}activate(e){e.statisticsView.show(e.searchableViewInternal.element)}masterGrid(e){return null}}class Ut extends(o.ObjectWrapper.eventMixin(L)){exposeInternals;captureNumericValue;customContentInternal;constructor(e,t){super(e||Ut.TypeId,t||Mt(kt.heapSnapshot)),l.TargetManager.TargetManager.instance().observeModels(l.HeapProfilerModel.HeapProfilerModel,this),l.TargetManager.TargetManager.instance().addModelListener(l.HeapProfilerModel.HeapProfilerModel,l.HeapProfilerModel.Events.ResetProfiles,this.resetProfiles,this),l.TargetManager.TargetManager.instance().addModelListener(l.HeapProfilerModel.HeapProfilerModel,l.HeapProfilerModel.Events.AddHeapSnapshotChunk,this.addHeapSnapshotChunk,this),l.TargetManager.TargetManager.instance().addModelListener(l.HeapProfilerModel.HeapProfilerModel,l.HeapProfilerModel.Events.ReportHeapSnapshotProgress,this.reportHeapSnapshotProgress,this),this.exposeInternals=o.Settings.Settings.instance().createSetting("exposeInternals",!1),this.captureNumericValue=o.Settings.Settings.instance().createSetting("captureNumericValue",!1),this.customContentInternal=null}modelAdded(e){e.enable()}modelRemoved(e){}getProfiles(){return super.getProfiles()}fileExtension(){return".heapsnapshot"}get buttonTooltip(){return Mt(kt.takeHeapSnapshot)}isInstantProfile(){return!0}buttonClicked(){return this.takeHeapSnapshot(),a.userMetrics.actionTaken(a.UserMetrics.Action.ProfilesHeapProfileTaken),!1}get treeItemTitle(){return Mt(kt.heapSnapshots)}get description(){return Mt(kt.heapSnapshotProfilesShowMemory)}customContent(){const e=document.createElement("div"),t=c.Runtime.experiments.isEnabled("showOptionToExposeInternalsInHeapSnapshot"),i=!t;if(t){const t=s.SettingsUI.createSettingCheckbox(Mt(kt.exposeInternals),this.exposeInternals,i);e.appendChild(t)}const r=s.SettingsUI.createSettingCheckbox(Mt(kt.captureNumericValue),this.captureNumericValue,i);return e.appendChild(r),this.customContentInternal=e,e}setCustomContentEnabled(e){this.customContentInternal&&this.customContentInternal.querySelectorAll("[is=dt-checkbox]").forEach((t=>{t.checkboxElement.disabled=!e}))}createProfileLoadedFromFile(e){return new Wt(null,this,e)}async takeHeapSnapshot(){if(this.profileBeingRecorded())return;const e=s.Context.Context.instance().flavor(l.HeapProfilerModel.HeapProfilerModel);if(!e)return;let t=new Wt(e,this);this.setProfileBeingRecorded(t),this.addProfile(t),t.updateStatus(Mt(kt.snapshotting)),await e.takeHeapSnapshot({reportProgress:!0,captureNumericValue:this.captureNumericValue.get(),exposeInternals:this.exposeInternals.get()}),t=this.profileBeingRecorded(),t&&(t.title=Mt(kt.snapshotD,{PH1:t.uid}),t.finishLoad(),this.setProfileBeingRecorded(null),this.dispatchEventToListeners(D.ProfileComplete,t))}addHeapSnapshotChunk(e){const t=this.profileBeingRecorded();t&&t.transferChunk(e.data)}reportHeapSnapshotProgress(e){const t=this.profileBeingRecorded();if(!t)return;const{done:i,total:r,finished:s}=e.data;t.updateStatus(Mt(kt.percentagePlaceholder,{PH1:(i/r*100).toFixed(0)}),!0),s&&t.prepareToLoad()}resetProfiles(e){const t=e.data;for(const e of this.getProfiles())e.heapProfilerModel()===t&&this.removeProfile(e)}snapshotReceived(e){this.profileBeingRecorded()===e&&this.setProfileBeingRecorded(null),this.dispatchEventToListeners("SnapshotReceived",e)}static TypeId="HEAP";static SnapshotReceived="SnapshotReceived"}class At extends(o.ObjectWrapper.eventMixin(Ut)){recordAllocationStacksSettingInternal;customContentInternal;recording;profileSamples;constructor(){super(At.TypeId,Mt(kt.allocationInstrumentationOn)),this.recordAllocationStacksSettingInternal=o.Settings.Settings.instance().createSetting("recordAllocationStacks",!1),this.customContentInternal=null,this.recording=!1}modelAdded(e){super.modelAdded(e),e.addEventListener(l.HeapProfilerModel.Events.HeapStatsUpdate,this.heapStatsUpdate,this),e.addEventListener(l.HeapProfilerModel.Events.LastSeenObjectId,this.lastSeenObjectId,this)}modelRemoved(e){super.modelRemoved(e),e.removeEventListener(l.HeapProfilerModel.Events.HeapStatsUpdate,this.heapStatsUpdate,this),e.removeEventListener(l.HeapProfilerModel.Events.LastSeenObjectId,this.lastSeenObjectId,this)}heapStatsUpdate(e){if(!this.profileSamples)return;const t=e.data;let i;for(let e=0;e{this.fulfillLoad=e})),this.totalNumberOfChunks=0,this.bufferedWriter=null,this.onTempFileReady=null}heapProfilerModel(){return this.heapProfilerModelInternal}async getLocation(e){return this.snapshotProxy?this.snapshotProxy.getLocation(e):null}createSidebarTreeElement(e){return new A(e,this,"heap-snapshot-sidebar-tree-item")}createView(e){return new Lt(e,this)}prepareToLoad(){console.assert(!this.receiver,"Already loading"),this.setupWorker(),this.updateStatus(Mt(kt.loading),!0)}finishLoad(){!this.wasDisposed&&this.receiver&&this.receiver.close(),this.bufferedWriter&&this.didWriteToTempFile(this.bufferedWriter)}didWriteToTempFile(e){this.wasDisposed?e&&e.remove():(this.tempFile=e,e||(this.failedToCreateTempFile=!0),this.onTempFileReady&&(this.onTempFileReady(),this.onTempFileReady=null))}setupWorker(){console.assert(!this.workerProxy,"HeapSnapshotWorkerProxy already exists"),this.workerProxy=new xt(this.handleWorkerEvent.bind(this)),this.workerProxy.addEventListener("Wait",(e=>{this.updateStatus(null,e.data)}),this),this.receiver=this.workerProxy.createLoader(this.uid,this.snapshotReceived.bind(this))}handleWorkerEvent(e,i){if(p.HeapSnapshotModel.HeapSnapshotProgressEvent.BrokenSnapshot===e){const e=i;return void o.Console.Console.instance().error(e)}if(p.HeapSnapshotModel.HeapSnapshotProgressEvent.Update!==e)return;const r=i,s=t.i18n.deserializeUIString(r);this.updateStatus(Ht(s.string,s.values))}dispose(){this.workerProxy&&this.workerProxy.dispose(),this.removeTempFile(),this.wasDisposed=!0}didCompleteSnapshotTransfer(){this.snapshotProxy&&this.updateStatus(e.NumberUtilities.bytesToString(this.snapshotProxy.totalSize),!1)}transferChunk(e){this.bufferedWriter||(this.bufferedWriter=new h.TempFile.TempFile),this.bufferedWriter.write([e]),++this.totalNumberOfChunks,this.receiver&&this.receiver.write(e)}snapshotReceived(e){this.wasDisposed||(this.receiver=null,this.snapshotProxy=e,this.maxJSObjectId=e.maxJSObjectId(),this.didCompleteSnapshotTransfer(),this.workerProxy&&this.workerProxy.startCheckingForLongRunningCalls(),this.notifySnapshotReceived())}notifySnapshotReceived(){this.snapshotProxy&&this.fulfillLoad&&this.fulfillLoad(this.snapshotProxy),this.profileType().snapshotReceived(this),this.canSaveToFile()&&this.dispatchEventToListeners(k.ProfileReceived)}canSaveToFile(){return!this.fromFile()&&Boolean(this.snapshotProxy)}saveToFile(){const t=new h.FileUtils.FileOutputStream;this.fileName=this.fileName||"Heap-"+e.DateUtilities.toISO8601Compact(new Date)+this.profileType().fileExtension();const i=async e=>{if(e){if(this.failedToCreateTempFile)return o.Console.Console.instance().error("Failed to open temp file with heap snapshot"),void t.close();if(this.tempFile){const e=await this.tempFile.copyToOutputStream(t,this.onChunkTransferred.bind(this));return e&&o.Console.Console.instance().error("Failed to read heap snapshot from temp file: "+e.message),void this.didCompleteSnapshotTransfer()}this.onTempFileReady=()=>{i(e)},this.updateSaveProgress(0,1)}};t.open(this.fileName).then(i.bind(this))}onChunkTransferred(e){this.updateSaveProgress(e.loadedSize(),e.fileSize())}updateSaveProgress(e,t){const i=(100*(t&&e/t)).toFixed(0);this.updateStatus(Mt(kt.savingD,{PH1:i}))}async loadFromFile(e){this.updateStatus(Mt(kt.loading),!0),this.setupWorker();const t=new h.FileUtils.ChunkedFileReader(e,1e7),i=await t.read(this.receiver);if(!i){const e=t.error();e&&this.updateStatus(e.message)}return i?null:t.error()}profileType(){return super.profileType()}}class _t extends s.Widget.VBox{pieChart;constructor(){super(),this.element.classList.add("heap-snapshot-statistics-view"),this.pieChart=new n.PieChart.PieChart,this.setTotalAndRecords(0,[]),this.pieChart.classList.add("heap-snapshot-stats-pie-chart"),this.element.appendChild(this.pieChart)}static valueFormatter(t){return Mt(kt.sKb,{PH1:e.NumberUtilities.withThousandsSeparator(Math.round(t/1e3))})}setTotalAndRecords(e,t){this.pieChart.data={chartName:Mt(kt.heapMemoryUsage),size:150,formatter:_t.valueFormatter,showLegend:!0,total:e,slices:t}}}class Jt extends s.Widget.Widget{heapProfilerModel;linkifier;frameElements;constructor(e){super(),this.heapProfilerModel=e,this.linkifier=new d.Linkifier.Linkifier,this.frameElements=[]}onContextMenu(e,t){const i=new s.ContextMenu.ContextMenu(t);i.containsTarget(e)||i.appendApplicableItems(e),i.show(),t.consume(!0)}onStackViewKeydown(e){const t=e.target;if(!t)return;if("Enter"===e.key){const i=$t.get(t);if(!i)return;const r=d.Linkifier.Linkifier.linkInfo(i);if(!r)return;return void(d.Linkifier.Linkifier.invokeFirstAction(r)&&e.consume(!0))}let i;const r=e;if("ArrowUp"===r.key)i=!1;else{if("ArrowDown"!==r.key)return;i=!0}const s=this.frameElements.indexOf(t);if(-1===s)return;const o=i?s+1:s-1;if(o<0||o>=this.frameElements.length)return;const n=this.frameElements[o];n.tabIndex=0,t.tabIndex=-1,n.focus(),e.consume(!0)}async setAllocatedObject(e,t){this.clear();const i=await e.allocationStack(t);if(!i){const e=this.element.createChild("div","no-heap-allocation-stack");return void s.UIUtils.createTextChild(e,Mt(kt.stackWasNotRecordedForThisObject))}const r=this.element.createChild("div","heap-allocation-stack");r.addEventListener("keydown",this.onStackViewKeydown.bind(this),!1);for(const e of i){const t=r.createChild("div","stack-frame");this.frameElements.push(t),t.tabIndex=-1;if(t.createChild("div").textContent=s.UIUtils.beautifyFunctionName(e.functionName),!e.scriptId)continue;const i=this.heapProfilerModel?this.heapProfilerModel.target():null,o={columnNumber:e.column-1,inlineFrameIndex:0},n=this.linkifier.linkifyScriptLocation(i,String(e.scriptId),e.scriptName,e.line-1,o);t.appendChild(n),$t.set(t,n),t.addEventListener("contextmenu",this.onContextMenu.bind(this,n))}this.frameElements[0].tabIndex=0}clear(){this.element.removeChildren(),this.frameElements=[],this.linkifier.reset()}}const $t=new WeakMap;var qt=Object.freeze({__proto__:null,HeapSnapshotView:Lt,Perspective:jt,SummaryPerspective:Ot,ComparisonPerspective:zt,ContainmentPerspective:Bt,AllocationPerspective:Gt,StatisticsPerspective:Vt,HeapSnapshotProfileType:Ut,TrackingHeapSnapshotProfileType:At,HeapProfileHeader:Wt,HeapSnapshotStatisticsView:_t,HeapAllocationStackView:Jt});class Qt{cpuProfileType;heapSnapshotProfileType;samplingHeapProfileType;trackingHeapSnapshotProfileType;constructor(){this.cpuProfileType=new oe,this.heapSnapshotProfileType=new Ut,this.samplingHeapProfileType=new Be,this.trackingHeapSnapshotProfileType=new At}}const Kt=new Qt;var Yt=Object.freeze({__proto__:null,ProfileTypeRegistry:Qt,instance:Kt});const Zt={clearAllProfiles:"Clear all profiles",cantLoadFileSupportedFile:"Can’t load file. Supported file extensions: ''{PH1}''.",cantLoadProfileWhileAnother:"Can’t load profile while another profile is being recorded.",profileLoadingFailedS:"Profile loading failed: {PH1}.",load:"Load…",runD:"Run {PH1}",profiles:"Profiles",deprecationWarnMsg:"This panel will be deprecated in the upcoming version. Use the Performance panel to record JavaScript CPU profiles.",learnMore:"Learn more",feedback:"Feedback",goToPerformancePanel:"Go to Performance Panel",enableThisPanelTemporarily:"Enable this panel temporarily"},Xt=t.i18n.registerUIStrings("panels/profiler/ProfilesPanel.ts",Zt),ei=t.i18n.getLocalizedString.bind(void 0,Xt);class ti extends s.Panel.PanelWithSidebar{profileTypes;profilesItemTreeElement;sidebarTree;profileViews;toolbarElement;toggleRecordAction;toggleRecordButton;clearResultsButton;profileViewToolbar;profileGroups;launcherView;visibleView;profileToView;typeIdToSidebarSection;fileSelectorElement;selectedProfileType;constructor(e,t,i){super(e),this.profileTypes=t;const r=new s.Widget.VBox;this.splitWidget().setMainWidget(r),this.profilesItemTreeElement=new oi(this),this.sidebarTree=new s.TreeOutline.TreeOutlineInShadow,this.sidebarTree.element.classList.add("profiles-sidebar-tree-box"),this.panelSidebarElement().appendChild(this.sidebarTree.element),this.sidebarTree.appendChild(this.profilesItemTreeElement),this.sidebarTree.element.addEventListener("keydown",this.onKeyDown.bind(this),!1),this.profileViews=document.createElement("div"),this.profileViews.id="profile-views",this.profileViews.classList.add("vbox"),r.element.appendChild(this.profileViews),this.toolbarElement=document.createElement("div"),this.toolbarElement.classList.add("profiles-toolbar"),r.element.insertBefore(this.toolbarElement,r.element.firstChild),this.panelSidebarElement().classList.add("profiles-tree-sidebar");const o=document.createElement("div");o.classList.add("profiles-toolbar"),this.panelSidebarElement().insertBefore(o,this.panelSidebarElement().firstChild);const n=new s.Toolbar.Toolbar("",o);this.toggleRecordAction=s.ActionRegistry.ActionRegistry.instance().action(i),this.toggleRecordButton=s.Toolbar.Toolbar.createActionButton(this.toggleRecordAction),n.appendToolbarItem(this.toggleRecordButton),this.clearResultsButton=new s.Toolbar.ToolbarButton(ei(Zt.clearAllProfiles),"clear"),this.clearResultsButton.addEventListener(s.Toolbar.ToolbarButton.Events.Click,this.reset,this),n.appendToolbarItem(this.clearResultsButton),n.appendSeparator(),n.appendToolbarItem(s.Toolbar.Toolbar.createActionButtonForId("components.collect-garbage")),this.profileViewToolbar=new s.Toolbar.Toolbar("",this.toolbarElement),this.profileViewToolbar.makeWrappable(!0),this.profileGroups={},this.launcherView=new xe(this),this.launcherView.addEventListener(ye.ProfileTypeSelected,this.onProfileTypeSelected,this),this.profileToView=[],this.typeIdToSidebarSection={};const a=this.profileTypes;for(let e=0;eBoolean(t.fileExtension())&&e.endsWith(t.fileExtension()||"")))||null}async loadFromFile(e){this.createFileSelectorElement();const t=this.findProfileTypeByExtension(e.name);if(!t){const e=new Set(this.profileTypes.map((e=>e.fileExtension())).filter((e=>e)));return void o.Console.Console.instance().error(ei(Zt.cantLoadFileSupportedFile,{PH1:Array.from(e).join("', '")}))}if(Boolean(t.profileBeingRecorded()))return void o.Console.Console.instance().error(ei(Zt.cantLoadProfileWhileAnother));const i=await t.loadFromFile(e);i&&"message"in i&&s.UIUtils.MessageDialog.show(ei(Zt.profileLoadingFailedS,{PH1:i.message}))}toggleRecord(){if(!this.toggleRecordAction.enabled())return!0;const t=e.DOMUtilities.deepActiveElement(this.element.ownerDocument),i=this.selectedProfileType;if(!i)return!0;const r=i.buttonClicked();return this.updateToggleRecordAction(r),r?(this.launcherView.profileStarted(),i.hasTemporaryView()&&this.showProfile(i.profileBeingRecorded())):this.launcherView.profileFinished(),t&&t.focus(),!0}onSuspendStateChanged(){this.updateToggleRecordAction(this.toggleRecordAction.toggled())}updateToggleRecordAction(e){const t=Boolean(s.Context.Context.instance().flavor(l.CPUProfilerModel.CPUProfilerModel)||s.Context.Context.instance().flavor(l.HeapProfilerModel.HeapProfilerModel)),i=e||!l.TargetManager.TargetManager.instance().allTargetsSuspended()&&t;this.toggleRecordAction.setEnabled(i),this.toggleRecordAction.setToggled(e),i?this.toggleRecordButton.setTitle(this.selectedProfileType?this.selectedProfileType.buttonTooltip:""):this.toggleRecordButton.setTitle(s.UIUtils.anotherProfilerActiveLabel()),this.selectedProfileType&&this.launcherView.updateProfileType(this.selectedProfileType,i)}profileBeingRecordedRemoved(){this.updateToggleRecordAction(!1),this.launcherView.profileFinished()}onProfileTypeSelected(e){this.selectedProfileType=e.data,this.updateProfileTypeSpecificUI()}updateProfileTypeSpecificUI(){this.updateToggleRecordAction(this.toggleRecordAction.toggled())}reset(){this.profileTypes.forEach((e=>e.reset())),delete this.visibleView,this.profileGroups={},this.updateToggleRecordAction(!1),this.launcherView.profileFinished(),this.sidebarTree.element.classList.remove("some-expandable"),this.launcherView.detach(),this.profileViews.removeChildren(),this.profileViewToolbar.removeToolbarItems(),this.clearResultsButton.element.classList.remove("hidden"),this.profilesItemTreeElement.select(),this.showLauncherView()}showLauncherView(){this.closeVisibleView(),this.profileViewToolbar.removeToolbarItems(),this.launcherView.show(this.profileViews),this.visibleView=this.launcherView,this.toolbarElement.classList.add("hidden")}registerProfileType(e){this.launcherView.addProfileType(e);const t=new ii(this,e);this.typeIdToSidebarSection[e.id]=t,this.sidebarTree.appendChild(t),t.childrenListElement.addEventListener("contextmenu",this.handleContextMenuEvent.bind(this),!1),e.addEventListener(D.ViewUpdated,this.updateProfileTypeSpecificUI,this),e.addEventListener(D.AddProfileHeader,(function(e){this.addProfileHeader(e.data)}),this),e.addEventListener(D.RemoveProfileHeader,(function(e){this.removeProfileHeader(e.data)}),this),e.addEventListener(D.ProfileComplete,(function(e){this.showProfile(e.data)}),this);const i=e.getProfiles();for(let e=0;e{e.map((e=>this.profileViewToolbar.appendToolbarItem(e)))})),t}showObject(e,t){}async linkifyObject(e){return null}viewForProfile(e){const t=this.indexOfViewForProfile(e);if(-1!==t)return this.profileToView[t].view;const i=e.createView(this);return i.element.classList.add("profile-view"),this.profileToView.push({profile:e,view:i}),i}indexOfViewForProfile(e){return this.profileToView.findIndex((t=>t.profile===e))}closeVisibleView(){this.visibleView&&this.visibleView.detach(),delete this.visibleView}focus(){this.sidebarTree.focus()}wasShown(){super.wasShown(),this.registerCSSFiles([he,pe,ce]),this.sidebarTree.registerCSSFiles([ue])}}class ii extends s.TreeOutline.TreeElement{dataDisplayDelegate;profileTreeElements;profileGroups;constructor(e,t){super(t.treeItemTitle,!0),this.selectable=!1,this.dataDisplayDelegate=e,this.profileTreeElements=[],this.profileGroups={},this.expand(),this.hidden=!0,this.setCollapsible(!1)}addProfileHeader(e){this.hidden=!1;const t=e.profileType();let i=this;const r=e.createSidebarTreeElement(this.dataDisplayDelegate);if(this.profileTreeElements.push(r),!e.fromFile()&&t.profileBeingRecorded()!==e){const t=e.title;let s=this.profileGroups[t];s||(s=new ri,this.profileGroups[t]=s),s.profileSidebarTreeElements.push(r);const o=s.profileSidebarTreeElements.length;if(2===o){s.sidebarTreeElement=new si(this.dataDisplayDelegate,e.title);const t=s.profileSidebarTreeElements[0],i=this.children().indexOf(t);this.insertChild(s.sidebarTreeElement,i);const r=t.selected;this.removeChild(t),s.sidebarTreeElement.appendChild(t),r&&t.revealAndSelect(),t.setSmall(!0),t.setMainTitle(ei(Zt.runD,{PH1:1})),this.treeOutline&&this.treeOutline.element.classList.add("some-expandable")}o>=2&&(i=s.sidebarTreeElement,r.setSmall(!0),r.setMainTitle(ei(Zt.runD,{PH1:o})))}i&&i.appendChild(r)}removeProfileHeader(e){const t=this.sidebarElementIndex(e);if(-1===t)return!1;const i=this.profileTreeElements[t];this.profileTreeElements.splice(t,1);let r=this;const s=this.profileGroups[e.title];if(s){const t=s.profileSidebarTreeElements;if(t.splice(t.indexOf(i),1),1===t.length){const i=r.children().indexOf(s.sidebarTreeElement);s.sidebarTreeElement&&s.sidebarTreeElement.removeChild(t[0]),this.insertChild(t[0],i),t[0].setSmall(!1),t[0].setMainTitle(e.title),s.sidebarTreeElement&&this.removeChild(s.sidebarTreeElement)}0!==t.length&&(r=s.sidebarTreeElement)}return r&&r.removeChild(i),i.dispose(),!this.childCount()&&(this.hidden=!0,!0)}sidebarElementForProfile(e){const t=this.sidebarElementIndex(e);return-1===t?null:this.profileTreeElements[t]}sidebarElementIndex(e){const t=this.profileTreeElements;for(let i=0;i0;if(e){const e=this.lastChild();e instanceof A&&this.dataDisplayDelegate.showProfile(e.profile)}return e}onattach(){this.listItemElement.classList.add("profile-group-sidebar-tree-item"),this.listItemElement.createChild("div","icon"),this.listItemElement.createChild("div","titles no-subtitle").createChild("span","title-container").createChild("span","title").textContent=this.profileTitle}}class oi extends s.TreeOutline.TreeElement{panel;constructor(e){super("",!1),this.selectable=!0,this.panel=e}onselect(){return this.panel.showLauncherView(),!0}onattach(){this.listItemElement.classList.add("profile-launcher-view-tree-item"),this.listItemElement.createChild("div","icon"),this.listItemElement.createChild("div","titles no-subtitle").createChild("span","title-container").createChild("span","title").textContent=ei(Zt.profiles)}}let ni;class ai extends ti{constructor(){super("js_profiler",[Kt.cpuProfileType],"profiler.js-toggle-recording"),this.splitWidget().mainWidget()?.setMinimumSize(350,0),c.Runtime.experiments.isEnabled("jsProfilerTemporarilyEnable")?this.#t():this.#i()}static instance(e={forceNew:null}){const{forceNew:t}=e;return ni&&!t||(ni=new ai),ni}#t(){function e(){a.InspectorFrontendHost.InspectorFrontendHostInstance.openInNewTab("https://github.com/ChromeDevTools/rfcs/discussions/2")}const t=new s.Infobar.Infobar(s.Infobar.Type.Warning,ei(Zt.deprecationWarnMsg),[{text:ei(Zt.learnMore),highlight:!1,delegate:e,dismiss:!1},{text:ei(Zt.feedback),highlight:!1,delegate:e,dismiss:!1},{text:ei(Zt.goToPerformancePanel),highlight:!0,delegate:async function(){await s.InspectorView.InspectorView.instance().showPanel("timeline")},dismiss:!1}],void 0);t.setParentView(this),this.splitWidget().mainWidget()?.element.prepend(t.element)}#i(){const e=this.splitWidget().mainWidget();if(e?.detachChildWidgets(),e){const t=new s.Widget.VBox;t.contentElement.classList.add("empty-landing-page","fill");const i=t.contentElement.createChild("div");i.createChild("p").textContent="This panel is deprecated and will be removed in the next version. Use the Performance panel to record JavaScript CPU profiles.",i.createChild("p").textContent="You can temporarily enable this panel with Settings > Experiments > Enable JavaScript Profiler.",i.appendChild(s.UIUtils.createTextButton(ei(Zt.goToPerformancePanel),(async function(){await s.InspectorView.InspectorView.instance().showPanel("timeline")}),"infobar-button primary-button")),i.appendChild(s.UIUtils.createTextButton(ei(Zt.learnMore),(function(){a.InspectorFrontendHost.InspectorFrontendHostInstance.openInNewTab("https://developer.chrome.com/blog/js-profiler-deprecation/")}))),i.appendChild(s.UIUtils.createTextButton(ei(Zt.feedback),(function(){a.InspectorFrontendHost.InspectorFrontendHostInstance.openInNewTab("https://bugs.chromium.org/p/chromium/issues/detail?id=1354548")}))),i.appendChild(s.UIUtils.createTextButton(ei(Zt.enableThisPanelTemporarily),(async function(){await s.ViewManager.ViewManager.instance().showView("experiments");(await s.ViewManager.ViewManager.instance().view("experiments").widget()).setFilter("Enable JavaScript Profiler temporarily")}))),t.show(e.element)}}wasShown(){super.wasShown(),s.Context.Context.instance().setFlavor(ai,this)}willHide(){s.Context.Context.instance().setFlavor(ai,null)}handleAction(e,t){const i=s.Context.Context.instance().flavor(ai);if(!(i instanceof ai))throw new Error("non-null JSProfilerPanel expected!");return i.toggleRecord(),!0}}var li=Object.freeze({__proto__:null,ProfilesPanel:ti,ProfileTypeSidebarSection:ii,ProfileGroup:ri,ProfileGroupSidebarTreeElement:si,ProfilesSidebarTreeElement:oi,JSProfilerPanel:ai});const di={revealInSummaryView:"Reveal in Summary view"},hi=t.i18n.registerUIStrings("panels/profiler/HeapProfilerPanel.ts",di),ci=t.i18n.getLocalizedString.bind(void 0,hi);let pi;class ui extends ti{constructor(){const e=Kt;super("heap_profiler",[e.heapSnapshotProfileType,e.trackingHeapSnapshotProfileType,e.samplingHeapProfileType],"profiler.heap-toggle-recording")}static instance(){return pi||(pi=new ui),pi}appendApplicableItems(e,t,i){if(!(i instanceof l.RemoteObject.RemoteObject))return;if(!this.isShowing())return;const r=i;if(!r.objectId)return;const s=r.objectId;if(!Kt.heapSnapshotProfileType.getProfiles().length)return;const o=r.runtimeModel().heapProfilerModel();o&&t.revealSection().appendItem(ci(di.revealInSummaryView),function(e){o.snapshotObjectIdForObjectId(s).then((t=>{this.isShowing()&&t&&this.showObject(t,e)}))}.bind(this,"Summary"))}handleAction(e,t){const i=s.Context.Context.instance().flavor(ui);return console.assert(Boolean(i)&&i instanceof ui),i&&i.toggleRecord(),!0}wasShown(){super.wasShown(),s.Context.Context.instance().setFlavor(ui,this),a.userMetrics.panelLoaded("heap_profiler","DevTools.Launch.HeapProfiler")}willHide(){s.Context.Context.instance().setFlavor(ui,null)}showObject(e,t){const i=Kt.heapSnapshotProfileType.getProfiles();for(let r=0;r=parseInt(e,10)){this.showProfile(s);this.viewForProfile(s).selectLiveObject(t,e);break}}}}var mi=Object.freeze({__proto__:null,HeapProfilerPanel:ui});const fi=new CSSStyleSheet;fi.replaceSync(".data-grid{border:none}.data-grid td .size-units{margin-left:4px;font-size:75%}.data-grid tr:not(.selected) td .size-units{color:var(--color-text-secondary)}.toolbar{border-bottom:1px solid var(--color-details-hairline)}\n/*# sourceURL=liveHeapProfile.css */\n");const gi={jsHeap:"JS Heap",allocatedJsHeapSizeCurrentlyIn:"Allocated JS heap size currently in use",vms:"VMs",numberOfVmsSharingTheSameScript:"Number of VMs sharing the same script source",scriptUrl:"Script URL",urlOfTheScriptSource:"URL of the script source",heapProfile:"Heap Profile",anonymousScriptS:"(Anonymous Script {PH1})",kb:"kB"},vi=t.i18n.registerUIStrings("panels/profiler/LiveHeapProfileView.ts",gi),wi=t.i18n.getLocalizedString.bind(void 0,vi);let Si,bi;class Ci extends s.Widget.VBox{gridNodeByUrl;setting;toggleRecordAction;toggleRecordButton;startWithReloadButton;dataGrid;currentPollId;constructor(){super(!0),this.gridNodeByUrl=new Map,this.setting=o.Settings.Settings.instance().moduleSetting("memoryLiveHeapProfile");const e=new s.Toolbar.Toolbar("live-heap-profile-toolbar",this.contentElement);this.toggleRecordAction=s.ActionRegistry.ActionRegistry.instance().action("live-heap-profile.toggle-recording"),this.toggleRecordButton=s.Toolbar.Toolbar.createActionButton(this.toggleRecordAction),this.toggleRecordButton.setToggled(this.setting.get()),e.appendToolbarItem(this.toggleRecordButton);const t=l.TargetManager.TargetManager.instance().primaryPageTarget();if(t&&t.model(l.ResourceTreeModel.ResourceTreeModel)){const t=s.ActionRegistry.ActionRegistry.instance().action("live-heap-profile.start-with-reload");this.startWithReloadButton=s.Toolbar.Toolbar.createActionButton(t),e.appendToolbarItem(this.startWithReloadButton)}this.dataGrid=this.createDataGrid(),this.dataGrid.asWidget().show(this.contentElement),this.currentPollId=0}static instance(){return Si||(Si=new Ci),Si}createDataGrid(){const e={id:"",title:o.UIString.LocalizedEmptyString,width:void 0,fixedWidth:!0,sortable:!0,align:r.DataGrid.Align.Right,sort:r.DataGrid.Order.Descending,titleDOMFragment:void 0,editable:void 0,nonSelectable:void 0,longText:void 0,disclosure:void 0,weight:void 0,allowInSortByEvenWhenHidden:void 0,dataType:void 0,defaultWeight:void 0},t=[{...e,id:"size",title:wi(gi.jsHeap),width:"72px",fixedWidth:!0,sortable:!0,align:r.DataGrid.Align.Right,sort:r.DataGrid.Order.Descending,tooltip:wi(gi.allocatedJsHeapSizeCurrentlyIn)},{...e,id:"isolates",title:wi(gi.vms),width:"40px",fixedWidth:!0,align:r.DataGrid.Align.Right,tooltip:wi(gi.numberOfVmsSharingTheSameScript)},{...e,id:"url",title:wi(gi.scriptUrl),fixedWidth:!1,sortable:!0,tooltip:wi(gi.urlOfTheScriptSource)}],i=new r.SortableDataGrid.SortableDataGrid({displayName:wi(gi.heapProfile),columns:t,editCallback:void 0,deleteCallback:void 0,refreshCallback:void 0});i.setResizeMethod(r.DataGrid.ResizeMethod.Last),i.element.classList.add("flex-auto"),i.element.addEventListener("keydown",this.onKeyDown.bind(this),!1),i.addEventListener(r.DataGrid.Events.OpenedNode,this.revealSourceForSelectedNode,this),i.addEventListener(r.DataGrid.Events.SortingChanged,this.sortingChanged,this);for(const e of t){const t=i.headerTableHeader(e.id);t&&t.setAttribute("title",e.tooltip)}return i}wasShown(){super.wasShown(),this.poll(),this.registerCSSFiles([fi]),this.setting.addChangeListener(this.settingChanged,this)}willHide(){++this.currentPollId,this.setting.removeChangeListener(this.settingChanged,this)}settingChanged(e){this.toggleRecordButton.setToggled(e.data)}async poll(){const e=this.currentPollId;do{const t=Array.from(l.IsolateManager.IsolateManager.instance().isolates()),i=await Promise.all(t.map((e=>{const t=e.heapProfilerModel();return t?t.getSamplingProfile():null})));if(this.currentPollId!==e)return;this.update(t,i),await new Promise((e=>window.setTimeout(e,3e3)))}while(this.currentPollId===e)}update(e,t){const i=new Map;t.forEach(((t,i)=>{t&&o(e[i],"",t.head)}));const r=this.dataGrid.rootNode(),s=new Set;for(const e of i){const t=e[0],i=e[1].size,o=e[1].isolates.size;if(!t){console.info(`Node with empty URL: ${i} bytes`);continue}let n=this.gridNodeByUrl.get(t);n?n.updateNode(i,o):(n=new Pi(t,i,o),this.gridNodeByUrl.set(t,n),r.appendChild(n)),s.add(n)}for(const e of r.children.slice()){s.has(e)||e.remove();const t=e;this.gridNodeByUrl.delete(t.url)}function o(e,t,r){const s=r.callFrame.url||t||function(e){const t=e.callFrame.functionName;return t.startsWith("(")&&"(root)"!==t?t:""}(r)||function(e){return Number(e.callFrame.scriptId)?wi(gi.anonymousScriptS,{PH1:e.callFrame.scriptId}):""}(r);if(r.children.forEach(o.bind(null,e,s)),!r.selfSize)return;let n=i.get(s);n||(n={size:0,isolates:new Set},i.set(s,n)),n.size+=r.selfSize,n.isolates.add(e)}this.sortingChanged()}onKeyDown(e){"Enter"===e.key&&(e.consume(!0),this.revealSourceForSelectedNode())}revealSourceForSelectedNode(){const e=this.dataGrid.selectedNode;if(!e||!e.url)return;const t=m.Workspace.WorkspaceImpl.instance().uiSourceCodeForURL(e.url);t&&o.Revealer.reveal(t)}sortingChanged(){const e=this.dataGrid.sortColumnId();if(!e)return;const t="url"===e?function(e,t){return t.url.localeCompare(e.url)}:function(e,t){return t.size-e.size};this.dataGrid.sortNodes(t,this.dataGrid.isSortOrderAscending())}toggleRecording(){!this.setting.get()?this.startRecording(!1):this.stopRecording()}startRecording(e){if(this.setting.set(!0),!e)return;const t=l.TargetManager.TargetManager.instance().primaryPageTarget();if(!t)return;const i=t.model(l.ResourceTreeModel.ResourceTreeModel);i&&i.reloadPage()}async stopRecording(){this.setting.set(!1)}}class Pi extends r.SortableDataGrid.SortableDataGridNode{url;size;isolateCount;constructor(e,t,i){super(),this.url=e,this.size=t,this.isolateCount=i}updateNode(e,t){this.size===e&&this.isolateCount===t||(this.size=e,this.isolateCount=t,this.refresh())}createCell(t){const i=this.createTD(t);switch(t){case"url":i.textContent=this.url;break;case"size":i.textContent=e.NumberUtilities.withThousandsSeparator(Math.round(this.size/1e3)),i.createChild("span","size-units").textContent=wi(gi.kb);break;case"isolates":i.textContent=`${this.isolateCount}`}return i}}class Ti{static instance(e={forceNew:null}){const{forceNew:t}=e;return bi&&!t||(bi=new Ti),bi}handleAction(e,t){return(async()=>{const e="live_heap_profile";await s.ViewManager.ViewManager.instance().showView(e);const i=s.ViewManager.ViewManager.instance().view(e);if(i){const e=await i.widget();this.innerHandleAction(e,t)}})(),!0}innerHandleAction(e,t){switch(t){case"live-heap-profile.toggle-recording":e.toggleRecording();break;case"live-heap-profile.start-with-reload":e.startRecording(!0);break;default:console.assert(!1,`Unknown action: ${t}`)}}}var xi=Object.freeze({__proto__:null,LiveHeapProfileView:Ci,GridNode:Pi,ActionDelegate:Ti});export{T as BottomUpProfileDataGrid,M as CPUProfileFlameChart,de as CPUProfileView,x as ChildrenProvider,_e as HeapProfileView,mi as HeapProfilerPanel,bt as HeapSnapshotDataGrids,ot as HeapSnapshotGridNodes,Nt as HeapSnapshotProxy,qt as HeapSnapshotView,De as HeapTimelineOverview,Se as IsolateSelector,xi as LiveHeapProfileView,b as ProfileDataGrid,j as ProfileHeader,Ie as ProfileLauncherView,W as ProfileSidebarTreeElement,Yt as ProfileTypeRegistry,ee as ProfileView,li as ProfilesPanel,$ as TopDownProfileDataGrid}; + `,r=i.$("container");this.prefixObjectCell(r),this.reachableFromWindow&&r.appendChild(s.Fragment.html`🗖`),this.detachedDOMTreeNode&&r.appendChild(s.Fragment.html``),this.appendSourceLocation(r);const o=i.element();return this.depth&&o.style.setProperty("padding-left",this.depth*this.dataGrid.indentWidth+"px"),o}prefixObjectCell(e){}async appendSourceLocation(e){const t=s.Fragment.html``;e.appendChild(t);const i=await this.dataGridInternal.dataDisplayDelegate().linkifyObject(this.snapshotNodeIndex);i?(t.appendChild(i),this.linkElement=i):t.remove()}async queryObjectContent(e,t){return await this.tryQueryObjectContent(e,t)||e.runtimeModel().createRemoteObjectFromPrimitiveValue(qe(Je.previewIsNotAvailable))}async tryQueryObjectContent(e,t){return"string"===this.type?e.runtimeModel().createRemoteObjectFromPrimitiveValue(this.nameInternal):await e.objectForSnapshotObjectId(String(this.snapshotNodeId),t)}async updateHasChildren(){const e=await this.provider().isEmpty();this.setHasChildren(!e)}shortenWindowURL(t,i){const r=t.indexOf("/"),s=i?t.indexOf("@"):t.length;if(-1===r||-1===s)return t;const o=t.substring(r+1,s).trimLeft();let n=e.StringUtilities.trimURL(o);return n.length>40&&(n=e.StringUtilities.trimMiddle(n,40)),t.substr(0,r+2)+n+t.substr(s)}populateContextMenu(e,t,i){if(e.revealSection().appendItem(qe(Je.revealInSummaryView),(()=>{t.showObject(String(this.snapshotNodeId),qe(Je.summary))})),this.referenceName)for(const i of this.referenceName.matchAll(/\((?[^@)]*) @(?\d+)\)/g)){const{objectName:r,snapshotNodeId:s}=i.groups;e.revealSection().appendItem(qe(Je.revealObjectSWithIdSInSummary,{PH1:r,PH2:s}),(()=>{t.showObject(s,qe(Je.summary))}))}i&&e.revealSection().appendItem(qe(Je.storeAsGlobalVariable),(async()=>{const e=await this.tryQueryObjectContent(i,"");if(e){const t=i.target().model(l.ConsoleModel.ConsoleModel);await(t?.saveToTempVariable(s.Context.Context.instance().flavor(l.RuntimeModel.ExecutionContext),e))}else o.Console.Console.instance().error(qe(Je.previewIsNotAvailable))}))}}class Ze extends Ye{referenceName;referenceType;edgeIndex;snapshot;parentObjectNode;cycledWithAncestorGridNode;constructor(e,t,i,r){super(e,i.node),this.referenceName=i.name,this.referenceType=i.type,this.edgeIndex=i.edgeIndex,this.snapshot=t,this.parentObjectNode=r,this.cycledWithAncestorGridNode=this.findAncestorWithSameSnapshotNodeId(),this.cycledWithAncestorGridNode||this.updateHasChildren();const s=this.data;s.count="",s.addedCount="",s.removedCount="",s.countDelta="",s.addedSize="",s.removedSize="",s.sizeDelta=""}retainersDataSource(){return void 0===this.snapshotNodeIndex?null:{snapshot:this.snapshot,snapshotNodeIndex:this.snapshotNodeIndex}}createProvider(){if(void 0===this.snapshotNodeIndex)throw new Error("Cannot create a provider on a root node");return this.snapshot.createEdgesProvider(this.snapshotNodeIndex)}findAncestorWithSameSnapshotNodeId(){let e=this.parentObjectNode;for(;e;){if(e.snapshotNodeId===this.snapshotNodeId)return e;e=e.parentObjectNode}return null}createChildNode(e){return new Ze(this.dataGridInternal,this.snapshot,e,this)}getHash(){return this.edgeIndex}comparator(){const e=this.dataGridInternal.isSortOrderAscending();switch(this.dataGridInternal.sortColumnId()){case"object":return new p.HeapSnapshotModel.ComparatorConfig("!edgeName",e,"retainedSize",!1);case"count":default:return new p.HeapSnapshotModel.ComparatorConfig("!edgeName",!0,"retainedSize",!1);case"shallowSize":return new p.HeapSnapshotModel.ComparatorConfig("selfSize",e,"!edgeName",!0);case"retainedSize":return new p.HeapSnapshotModel.ComparatorConfig("retainedSize",e,"!edgeName",!0);case"distance":return new p.HeapSnapshotModel.ComparatorConfig("distance",e,"name",!0)}}prefixObjectCell(e){let t=this.referenceName||"(empty)",i="name";switch(this.referenceType){case"context":i="object-value-number";break;case"internal":case"hidden":case"weak":i="object-value-null";break;case"element":t=`[${t}]`}this.cycledWithAncestorGridNode&&e.classList.add("cycled-ancessor-node"),e.prepend(s.Fragment.html`${t} ${this.edgeNodeSeparator()}`)}edgeNodeSeparator(){return"::"}}class Xe extends Ze{constructor(e,t,i,r){super(e,t,i,r)}createProvider(){if(void 0===this.snapshotNodeIndex)throw new Error("Cannot create providers on root nodes");return this.snapshot.createRetainingEdgesProvider(this.snapshotNodeIndex)}createChildNode(e){return new Xe(this.dataGridInternal,this.snapshot,e,this)}edgeNodeSeparator(){return qe(Je.inElement)}expand(){this.expandRetainersChain(20)}expandRetainersChain(e){if(!this.populated)return this.once(Ke.Events.PopulateComplete).then((()=>this.expandRetainersChain(e))),void this.populate();if(super.expand(),--e>0&&this.children.length>0){const t=this.children[0];if((t.distance||0)>1)return void t.expandRetainersChain(e)}this.dataGridInternal.dispatchEventToListeners(pt.ExpandRetainersComplete)}}class et extends Ye{baseSnapshotOrSnapshot;isDeletedNode;constructor(t,i,r,s){super(t,r),this.baseSnapshotOrSnapshot=i,this.isDeletedNode=s,this.updateHasChildren();const o=this.data;o.count="",o.countDelta="",o.sizeDelta="",this.isDeletedNode?(o.addedCount="",o.addedSize="",o.removedCount="•",o.removedSize=e.NumberUtilities.withThousandsSeparator(this.shallowSize||0)):(o.addedCount="•",o.addedSize=e.NumberUtilities.withThousandsSeparator(this.shallowSize||0),o.removedCount="",o.removedSize="")}retainersDataSource(){return void 0===this.snapshotNodeIndex?null:{snapshot:this.baseSnapshotOrSnapshot,snapshotNodeIndex:this.snapshotNodeIndex}}createProvider(){if(void 0===this.snapshotNodeIndex)throw new Error("Cannot create providers on root nodes");return this.baseSnapshotOrSnapshot.createEdgesProvider(this.snapshotNodeIndex)}createChildNode(e){return new Ze(this.dataGridInternal,this.baseSnapshotOrSnapshot,e,null)}getHash(){if(void 0===this.snapshotNodeId)throw new Error("Cannot hash root nodes");return this.snapshotNodeId}comparator(){const e=this.dataGridInternal.isSortOrderAscending();switch(this.dataGridInternal.sortColumnId()){case"object":return new p.HeapSnapshotModel.ComparatorConfig("!edgeName",e,"retainedSize",!1);case"distance":return new p.HeapSnapshotModel.ComparatorConfig("distance",e,"retainedSize",!1);case"count":default:return new p.HeapSnapshotModel.ComparatorConfig("!edgeName",!0,"retainedSize",!1);case"addedSize":case"removedSize":case"shallowSize":return new p.HeapSnapshotModel.ComparatorConfig("selfSize",e,"!edgeName",!0);case"retainedSize":return new p.HeapSnapshotModel.ComparatorConfig("retainedSize",e,"!edgeName",!0)}}}class tt extends Ke{nameInternal;nodeFilter;distance;count;shallowSize;retainedSize;constructor(t,i,r,s){super(t,r.count>0),this.nameInternal=i,this.nodeFilter=s,this.distance=r.distance,this.count=r.count,this.shallowSize=r.self,this.retainedSize=r.maxRet;const o=t.snapshot,n=this.retainedSize/o.totalSize*100,a=this.shallowSize/o.totalSize*100;this.data={object:i,count:e.NumberUtilities.withThousandsSeparator(this.count),distance:this.toUIDistance(this.distance),shallowSize:e.NumberUtilities.withThousandsSeparator(this.shallowSize),retainedSize:e.NumberUtilities.withThousandsSeparator(this.retainedSize),"shallowSize-percent":this.toPercentString(a),"retainedSize-percent":this.toPercentString(n)}}get name(){return this.nameInternal}createProvider(){return this.dataGridInternal.snapshot.createNodesProviderForClass(this.nameInternal,this.nodeFilter)}async populateNodeBySnapshotObjectId(e){this.dataGridInternal.resetNameFilter(),await this.expandWithoutPopulate();const t=await this.provider().nodePosition(e);if(-1===t)return this.collapse(),[];await this.populateChildren(t,null);const i=this.childForPosition(t);return i?[this,i]:[]}filteredOut(e){return-1===this.nameInternal.toLowerCase().indexOf(e)}createCell(e){const t="object"===e?super.createCell(e):this.createValueCell(e);return"object"===e&&this.count>1&&t.appendChild(s.Fragment.html`×${this.count}`),t}createChildNode(e){return new et(this.dataGridInternal,this.dataGridInternal.snapshot,e,!1)}comparator(){const e=this.dataGridInternal.isSortOrderAscending(),t=this.dataGridInternal.sortColumnId();switch(t){case"object":return new p.HeapSnapshotModel.ComparatorConfig("name",e,"id",!0);case"distance":return new p.HeapSnapshotModel.ComparatorConfig("distance",e,"retainedSize",!1);case"shallowSize":return new p.HeapSnapshotModel.ComparatorConfig("selfSize",e,"id",!0);case"retainedSize":return new p.HeapSnapshotModel.ComparatorConfig("retainedSize",e,"id",!0);default:throw new Error(`Invalid sort column id ${t}`)}}}class it{addedNodesProvider;deletedNodesProvider;addedCount;removedCount;constructor(e,t,i,r){this.addedNodesProvider=e,this.deletedNodesProvider=t,this.addedCount=i,this.removedCount=r}dispose(){this.addedNodesProvider.dispose(),this.deletedNodesProvider.dispose()}nodePosition(e){throw new Error("Unreachable")}isEmpty(){return Promise.resolve(!1)}async serializeItemsRange(e,t){let i,r;if(e=t)return i.totalLength=this.addedCount+this.removedCount,i;r=i,i=await this.deletedNodesProvider.serializeItemsRange(0,t-i.endPosition)}else r=new p.HeapSnapshotModel.ItemsRange(0,0,0,[]),i=await this.deletedNodesProvider.serializeItemsRange(e-this.addedCount,t-this.addedCount);r.items.length||(r.startPosition=this.addedCount+i.startPosition);for(const e of i.items)e.isAddedNotRemoved=!1;return r.items.push(...i.items),r.endPosition=this.addedCount+i.endPosition,r.totalLength=this.addedCount+this.removedCount,r}async sortAndRewind(e){await this.addedNodesProvider.sortAndRewind(e),await this.deletedNodesProvider.sortAndRewind(e)}}class rt extends Ke{nameInternal;addedCount;removedCount;countDelta;addedSize;removedSize;sizeDelta;deletedIndexes;constructor(t,i,r){super(t,!0),this.nameInternal=i,this.addedCount=r.addedCount,this.removedCount=r.removedCount,this.countDelta=r.countDelta,this.addedSize=r.addedSize,this.removedSize=r.removedSize,this.sizeDelta=r.sizeDelta,this.deletedIndexes=r.deletedIndexes,this.data={object:i,addedCount:e.NumberUtilities.withThousandsSeparator(this.addedCount),removedCount:e.NumberUtilities.withThousandsSeparator(this.removedCount),countDelta:this.signForDelta(this.countDelta)+e.NumberUtilities.withThousandsSeparator(Math.abs(this.countDelta)),addedSize:e.NumberUtilities.withThousandsSeparator(this.addedSize),removedSize:e.NumberUtilities.withThousandsSeparator(this.removedSize),sizeDelta:this.signForDelta(this.sizeDelta)+e.NumberUtilities.withThousandsSeparator(Math.abs(this.sizeDelta))}}get name(){return this.nameInternal}createProvider(){const e=this.dataGridInternal;if(null===e.snapshot||void 0===e.baseSnapshot||void 0===e.baseSnapshot.uid)throw new Error("Data sources have not been set correctly");const t=e.snapshot.createAddedNodesProvider(e.baseSnapshot.uid,this.nameInternal),i=e.baseSnapshot.createDeletedNodesProvider(this.deletedIndexes);if(!t||!i)throw new Error("Failed to create node providers");return new it(t,i,this.addedCount,this.removedCount)}createCell(e){const t=super.createCell(e);return"object"!==e&&t.classList.add("numeric-column"),t}createChildNode(e){const t=this.dataGridInternal;if(e.isAddedNotRemoved){if(null===t.snapshot)throw new Error("Data sources have not been set correctly");return new et(this.dataGridInternal,t.snapshot,e,!1)}if(void 0===t.baseSnapshot)throw new Error("Data sources have not been set correctly");return new et(this.dataGridInternal,t.baseSnapshot,e,!0)}comparator(){const e=this.dataGridInternal.isSortOrderAscending(),t=this.dataGridInternal.sortColumnId();switch(t){case"object":return new p.HeapSnapshotModel.ComparatorConfig("name",e,"id",!0);case"addedCount":case"removedCount":case"countDelta":return new p.HeapSnapshotModel.ComparatorConfig("name",!0,"id",!0);case"addedSize":case"removedSize":case"sizeDelta":return new p.HeapSnapshotModel.ComparatorConfig("selfSize",e,"id",!0);default:throw new Error(`Invalid sort column ${t}`)}}filteredOut(e){return-1===this.nameInternal.toLowerCase().indexOf(e)}signForDelta(e){return 0===e?"":e>0?"+":"−"}}class st extends Ke{populated;allocationNode;constructor(t,i){super(t,i.hasChildren),this.populated=!1,this.allocationNode=i,this.data={liveCount:e.NumberUtilities.withThousandsSeparator(i.liveCount),count:e.NumberUtilities.withThousandsSeparator(i.count),liveSize:e.NumberUtilities.withThousandsSeparator(i.liveSize),size:e.NumberUtilities.withThousandsSeparator(i.size),name:i.name}}populate(){this.populated||this.doPopulate()}async doPopulate(){this.populated=!0;const e=await this.dataGridInternal.snapshot.allocationNodeCallers(this.allocationNode.id),t=e.nodesWithSingleCaller;let i=this;const r=this.dataGridInternal;for(const e of t){const t=new st(r,e);r.appendNode(i,t),i=t,i.populated=!0,this.expanded&&i.expand()}const s=e.branchingCallers;s.sort(this.dataGridInternal.createComparator());for(const e of s)r.appendNode(i,new st(r,e));r.updateVisibleNodes(!0)}expand(){super.expand(),1===this.children.length&&this.children[0].expand()}createCell(e){if("name"!==e)return this.createValueCell(e);const t=super.createCell(e),i=this.allocationNode,r=this.dataGridInternal.heapProfilerModel();if(i.scriptId){const e=this.dataGridInternal.linkifier.linkifyScriptLocation(r?r.target():null,String(i.scriptId),i.scriptName,i.line-1,{columnNumber:i.column-1,inlineFrameIndex:0,className:"profile-node-file"});e.style.maxWidth="75%",t.insertBefore(e,t.firstChild)}return t}allocationNodeId(){return this.allocationNode.id}}var ot=Object.freeze({__proto__:null,get HeapSnapshotGridNode(){return Ke},HeapSnapshotGenericObjectNode:Ye,HeapSnapshotObjectNode:Ze,HeapSnapshotRetainingObjectNode:Xe,HeapSnapshotInstanceNode:et,HeapSnapshotConstructorNode:tt,HeapSnapshotDiffNodesProvider:it,HeapSnapshotDiffNode:rt,AllocationGridNode:st});const nt={distanceFromWindowObject:"Distance from window object",sizeOfTheObjectItselfInBytes:"Size of the object itself in bytes",sizeOfTheObjectPlusTheGraphIt:"Size of the object plus the graph it retains in bytes",object:"Object",distance:"Distance",shallowSize:"Shallow Size",retainedSize:"Retained Size",heapSnapshotRetainment:"Heap Snapshot Retainment",constructorString:"Constructor",heapSnapshotConstructors:"Heap Snapshot Constructors",New:"# New",Deleted:"# Deleted",Delta:"# Delta",allocSize:"Alloc. Size",freedSize:"Freed Size",sizeDelta:"Size Delta",heapSnapshotDiff:"Heap Snapshot Diff",liveCount:"Live Count",count:"Count",liveSize:"Live Size",size:"Size",function:"Function",allocation:"Allocation"},at=t.i18n.registerUIStrings("panels/profiler/HeapSnapshotDataGrids.ts",nt),lt=t.i18n.getLocalizedString.bind(void 0,at),dt=new WeakMap;class ht extends r.DataGrid.DataGridImpl{}class ct extends(o.ObjectWrapper.eventMixin(ht)){snapshot;selectedNode;heapProfilerModelInternal;dataDisplayDelegateInternal;recursiveSortingDepth;populatedAndSorted;nameFilter;nodeFilterInternal;lastSortColumnId;lastSortAscending;constructor(e,t,i){super(i),this.snapshot=null,this.selectedNode=null,this.heapProfilerModelInternal=e,this.dataDisplayDelegateInternal=t;const s=[["distance",lt(nt.distanceFromWindowObject)],["shallowSize",lt(nt.sizeOfTheObjectItselfInBytes)],["retainedSize",lt(nt.sizeOfTheObjectPlusTheGraphIt)]];for(const e of s){const t=this.headerTableHeader(e[0]);t&&t.setAttribute("title",e[1])}this.recursiveSortingDepth=0,this.populatedAndSorted=!1,this.nameFilter=null,this.nodeFilterInternal=new p.HeapSnapshotModel.NodeFilter,this.addEventListener(pt.SortingComplete,this.sortingComplete,this),this.addEventListener(r.DataGrid.Events.SortingChanged,this.sortingChanged,this),this.setRowContextMenuCallback(this.populateContextMenu.bind(this))}async setDataSource(e,t){}isFilteredOut(e){const t=this.nameFilter?this.nameFilter.value().toLowerCase():"";return!!(t&&(e instanceof rt||e instanceof tt)&&e.filteredOut(t))}heapProfilerModel(){return this.heapProfilerModelInternal}dataDisplayDelegate(){return this.dataDisplayDelegateInternal}nodeFilter(){return this.nodeFilterInternal}setNameFilter(e){this.nameFilter=e}defaultPopulateCount(){return 100}disposeAllNodes(){const e=this.topLevelNodes();for(let t=0,i=e.length;ts?1:0;return i.ascending1||(o=-o),0!==o||(r=e[i.fieldName2],s=t[i.fieldName2],o=rs?1:0,i.ascending2||(o=-o)),o}))}performSorting(e){this.recursiveSortingEnter();const t=this.allChildren(this.rootNode());this.rootNode().removeChildren(),t.sort(e);for(let e=0,i=t.length;e=this.topPaddingHeight&&r>=this.bottomPaddingHeight)return;i-=500,s+=1e3;const o=this.selectedNode;this.rootNode().removeChildren(),this.topPaddingHeight=0,this.bottomPaddingHeight=0,this.addVisibleNodes(this.rootNode(),i,i+s),this.setVerticalPadding(this.topPaddingHeight,this.bottomPaddingHeight),o&&(o.parent?o.select(!0):this.selectedNode=o)}addVisibleNodes(e,t,i){if(!e.expanded)return 0;const r=this.allChildren(e);let s=0,o=0;for(;ot)break;s=i}let n=s;for(;o=r&&t{console.assert(!this.scrollToResolveCallback),this.scrollToResolveCallback=e.bind(null,i),this.scrollContainer.window().requestAnimationFrame((()=>{this.scrollToResolveCallback&&(this.scrollToResolveCallback(),this.scrollToResolveCallback=null)}))}))}calculateOffset(e){let t=this.rootNode(),i=0;if(0===e.length)return 0;for(let r=0;r=t}onResize(){super.onResize(),this.updateVisibleNodes(!1)}onScroll(e){this.updateVisibleNodes(!1),this.scrollToResolveCallback&&(this.scrollToResolveCallback(),this.scrollToResolveCallback=null)}}class ft extends ct{constructor(e,t,i,s){super(e,t,{displayName:i,columns:s=s||[{id:"object",title:lt(nt.object),disclosure:!0,sortable:!0},{id:"distance",title:lt(nt.distance),width:"70px",sortable:!0,fixedWidth:!0},{id:"shallowSize",title:lt(nt.shallowSize),width:"110px",sortable:!0,fixedWidth:!0},{id:"retainedSize",title:lt(nt.retainedSize),width:"110px",sortable:!0,fixedWidth:!0,sort:r.DataGrid.Order.Descending}]})}async setDataSource(e,t){this.snapshot=e;const i=new p.HeapSnapshotModel.Node(-1,"root",0,t||e.rootNodeIndex,0,0,"");this.setRootNode(this.createRootNode(e,i)),this.rootNode().sort()}createRootNode(e,t){const i=new p.HeapSnapshotModel.Edge("",t,"",-1);return new Ze(this,e,i,null)}sortingChanged(){const e=this.rootNode();e.hasChildren()&&e.sort()}}class gt extends ft{constructor(e,t){const i=[{id:"object",title:lt(nt.object),disclosure:!0,sortable:!0},{id:"distance",title:lt(nt.distance),width:"70px",sortable:!0,fixedWidth:!0,sort:r.DataGrid.Order.Ascending},{id:"shallowSize",title:lt(nt.shallowSize),width:"110px",sortable:!0,fixedWidth:!0},{id:"retainedSize",title:lt(nt.retainedSize),width:"110px",sortable:!0,fixedWidth:!0}];super(e,t,lt(nt.heapSnapshotRetainment),i)}createRootNode(e,t){const i=new p.HeapSnapshotModel.Edge("",t,"",-1);return new Xe(this,e,i,null)}sortFields(e,t){switch(e){case"object":return new p.HeapSnapshotModel.ComparatorConfig("name",t,"count",!1);case"count":return new p.HeapSnapshotModel.ComparatorConfig("count",t,"name",!0);case"shallowSize":return new p.HeapSnapshotModel.ComparatorConfig("shallowSize",t,"name",!0);case"retainedSize":return new p.HeapSnapshotModel.ComparatorConfig("retainedSize",t,"name",!0);case"distance":return new p.HeapSnapshotModel.ComparatorConfig("distance",t,"name",!0);default:throw new Error(`Unknown column ${e}`)}}reset(){this.rootNode().removeChildren(),this.resetSortingCache()}async setDataSource(e,t){await super.setDataSource(e,t),this.rootNode().expand()}}!function(e){e.ExpandRetainersComplete="ExpandRetainersComplete"}(ut||(ut={}));class vt extends mt{profileIndex;objectIdToSelect;nextRequestedFilter;lastFilter;filterInProgress;constructor(e,t){const i=[{id:"object",title:lt(nt.constructorString),disclosure:!0,sortable:!0},{id:"distance",title:lt(nt.distance),width:"70px",sortable:!0,fixedWidth:!0},{id:"shallowSize",title:lt(nt.shallowSize),width:"110px",sortable:!0,fixedWidth:!0},{id:"retainedSize",title:lt(nt.retainedSize),width:"110px",sort:r.DataGrid.Order.Descending,sortable:!0,fixedWidth:!0}];super(e,t,{displayName:lt(nt.heapSnapshotConstructors).toString(),columns:i}),this.profileIndex=-1,this.objectIdToSelect=null,this.nextRequestedFilter=null}sortFields(e,t){switch(e){case"object":return new p.HeapSnapshotModel.ComparatorConfig("name",t,"retainedSize",!1);case"distance":return new p.HeapSnapshotModel.ComparatorConfig("distance",t,"retainedSize",!1);case"shallowSize":return new p.HeapSnapshotModel.ComparatorConfig("shallowSize",t,"name",!0);case"retainedSize":return new p.HeapSnapshotModel.ComparatorConfig("retainedSize",t,"name",!0);default:throw new Error(`Unknown column ${e}`)}}async revealObjectByHeapSnapshotId(e){if(!this.snapshot)return this.objectIdToSelect=e,null;const t=await this.snapshot.nodeClassName(parseInt(e,10));if(!t)return null;const i=this.topLevelNodes().find((e=>e.name===t));if(!i)return null;const r=await i.populateNodeBySnapshotObjectId(parseInt(e,10));return r.length?this.revealTreeNode(r):null}clear(){this.nextRequestedFilter=null,this.lastFilter=null,this.removeTopLevelNodes()}async setDataSource(e,t){this.snapshot=e,-1===this.profileIndex&&this.populateChildren(),this.objectIdToSelect&&(this.revealObjectByHeapSnapshotId(this.objectIdToSelect),this.objectIdToSelect=null)}setSelectionRange(e,t){this.nodeFilterInternal=new p.HeapSnapshotModel.NodeFilter(e,t),this.populateChildren(this.nodeFilterInternal)}setAllocationNodeId(e){this.nodeFilterInternal=new p.HeapSnapshotModel.NodeFilter,this.nodeFilterInternal.allocationNodeId=e,this.populateChildren(this.nodeFilterInternal)}aggregatesReceived(e,t){this.filterInProgress=null,this.nextRequestedFilter&&this.snapshot&&(this.snapshot.aggregatesWithFilter(this.nextRequestedFilter).then(this.aggregatesReceived.bind(this,this.nextRequestedFilter)),this.filterInProgress=this.nextRequestedFilter,this.nextRequestedFilter=null),this.removeTopLevelNodes(),this.resetSortingCache();for(const i in t)this.appendNode(this.rootNode(),new tt(this,i,t[i],e));this.sortingChanged(),this.lastFilter=e}async populateChildren(e){const t=e||new p.HeapSnapshotModel.NodeFilter;if(this.filterInProgress)this.nextRequestedFilter=this.filterInProgress.equals(t)?null:t;else if((!this.lastFilter||!this.lastFilter.equals(t))&&(this.filterInProgress=t,this.snapshot)){const e=await this.snapshot.aggregatesWithFilter(t);this.aggregatesReceived(t,e)}}filterSelectIndexChanged(e,t){if(this.profileIndex=t,this.nodeFilterInternal=void 0,-1!==t){const i=t>0?e[t-1].maxJSObjectId:0,r=e[t].maxJSObjectId;this.nodeFilterInternal=new p.HeapSnapshotModel.NodeFilter(i,r)}this.populateChildren(this.nodeFilterInternal)}}class wt extends mt{baseSnapshot;constructor(e,t){const i=[{id:"object",title:lt(nt.constructorString),disclosure:!0,sortable:!0},{id:"addedCount",title:lt(nt.New),width:"75px",sortable:!0,fixedWidth:!0},{id:"removedCount",title:lt(nt.Deleted),width:"75px",sortable:!0,fixedWidth:!0},{id:"countDelta",title:lt(nt.Delta),width:"65px",sortable:!0,fixedWidth:!0},{id:"addedSize",title:lt(nt.allocSize),width:"75px",sortable:!0,fixedWidth:!0,sort:r.DataGrid.Order.Descending},{id:"removedSize",title:lt(nt.freedSize),width:"75px",sortable:!0,fixedWidth:!0},{id:"sizeDelta",title:lt(nt.sizeDelta),width:"75px",sortable:!0,fixedWidth:!0}];super(e,t,{displayName:lt(nt.heapSnapshotDiff).toString(),columns:i})}defaultPopulateCount(){return 50}sortFields(e,t){switch(e){case"object":return new p.HeapSnapshotModel.ComparatorConfig("name",t,"count",!1);case"addedCount":return new p.HeapSnapshotModel.ComparatorConfig("addedCount",t,"name",!0);case"removedCount":return new p.HeapSnapshotModel.ComparatorConfig("removedCount",t,"name",!0);case"countDelta":return new p.HeapSnapshotModel.ComparatorConfig("countDelta",t,"name",!0);case"addedSize":return new p.HeapSnapshotModel.ComparatorConfig("addedSize",t,"name",!0);case"removedSize":return new p.HeapSnapshotModel.ComparatorConfig("removedSize",t,"name",!0);case"sizeDelta":return new p.HeapSnapshotModel.ComparatorConfig("sizeDelta",t,"name",!0);default:throw new Error(`Unknown column ${e}`)}}async setDataSource(e,t){this.snapshot=e}setBaseDataSource(e){this.baseSnapshot=e,this.removeTopLevelNodes(),this.resetSortingCache(),this.baseSnapshot!==this.snapshot?this.populateChildren():this.dispatchEventToListeners(pt.SortingComplete)}async populateChildren(){if(null===this.snapshot||void 0===this.baseSnapshot||void 0===this.baseSnapshot.uid)throw new Error("Data sources have not been set correctly");const e=await this.baseSnapshot.aggregatesForDiff(),t=await this.snapshot.calculateSnapshotDiff(this.baseSnapshot.uid,e);for(const e in t){const i=t[e];this.appendNode(this.rootNode(),new rt(this,e,i))}this.sortingChanged()}}class St extends mt{linkifierInternal;topNodes;constructor(e,t){const i=[{id:"liveCount",title:lt(nt.liveCount),width:"75px",sortable:!0,fixedWidth:!0},{id:"count",title:lt(nt.count),width:"65px",sortable:!0,fixedWidth:!0},{id:"liveSize",title:lt(nt.liveSize),width:"75px",sortable:!0,fixedWidth:!0},{id:"size",title:lt(nt.size),width:"75px",sortable:!0,fixedWidth:!0,sort:r.DataGrid.Order.Descending},{id:"name",title:lt(nt.function),disclosure:!0,sortable:!0}];super(e,t,{displayName:lt(nt.allocation).toString(),columns:i}),this.linkifierInternal=new d.Linkifier.Linkifier}get linkifier(){return this.linkifierInternal}dispose(){this.linkifierInternal.reset()}async setDataSource(e,t){this.snapshot=e,this.topNodes=await this.snapshot.allocationTracesTops(),this.populateChildren()}populateChildren(){this.removeTopLevelNodes();const e=this.rootNode(),t=this.topNodes||[];for(const i of t)this.appendNode(e,new st(this,i));this.updateVisibleNodes(!0)}sortingChanged(){void 0!==this.topNodes&&(this.topNodes.sort(this.createComparator()),this.rootNode().removeChildren(),this.populateChildren())}createComparator(){const e=this.sortColumnId(),t=this.sortOrder()===r.DataGrid.Order.Ascending?1:-1;return function(i,r){return i[e]>r[e]?t:i[e]{e(t?new r(this,n):null)})),this.postMessage({callId:s,disposition:"factory",objectId:t,methodName:i,methodArguments:o,newObjectId:n}),null):(this.postMessage({callId:s,disposition:"factory",objectId:t,methodName:i,methodArguments:o,newObjectId:n}),new r(this,n))}callMethod(e,t,i){const r=this.nextCallId++,s=Array.prototype.slice.call(arguments,3);e&&this.callbacks.set(r,e),this.postMessage({callId:r,disposition:"method",objectId:t,methodName:i,methodArguments:s})}startCheckingForLongRunningCalls(){this.interval||(this.checkLongRunningCalls(),this.interval=window.setInterval(this.checkLongRunningCalls.bind(this),300))}checkLongRunningCalls(){for(const e of this.previousCallbacks)this.callbacks.has(e)||this.previousCallbacks.delete(e);const e=Boolean(this.previousCallbacks.size);this.dispatchEventToListeners("Wait",e);for(const e of this.callbacks.keys())this.previousCallbacks.add(e)}messageReceived(e){const t=e.data;if(t.eventName)return void(this.eventHandler&&this.eventHandler(t.eventName,t.data));if(t.error)return t.errorMethodName&&o.Console.Console.instance().error(Tt(Ct.anErrorOccurredWhenACallToMethod,{PH1:t.errorMethodName})),o.Console.Console.instance().error(t.errorCallStack),void this.callbacks.delete(t.callId);const i=this.callbacks.get(t.callId);i&&(this.callbacks.delete(t.callId),i(t.result))}postMessage(e){this.worker.postMessage(e)}}class yt{worker;objectId;constructor(e,t){this.worker=e,this.objectId=t}callWorker(e,t){t.splice(1,0,this.objectId);const i=this.worker[e];if(!i)throw new Error(`Could not find worker with name ${e}.`);return i.apply(this.worker,t)}dispose(){this.worker.disposeObject(this.objectId)}disposeWorker(){this.worker.dispose()}callFactoryMethod(e,t,i,...r){return this.callWorker("callFactoryMethod",Array.prototype.slice.call(arguments,0))}callMethodPromise(e,...t){const i=Array.prototype.slice.call(arguments);return new Promise((e=>this.callWorker("callMethod",[e,...i])))}}class It extends yt{profileUid;snapshotReceivedCallback;constructor(e,t,i,r){super(e,t),this.profileUid=i,this.snapshotReceivedCallback=r}async write(e){await this.callMethodPromise("write",e)}async close(){await this.callMethodPromise("close");const e=await new Promise((e=>this.callFactoryMethod(e,"buildSnapshot",Rt)));this.dispose(),e.setProfileUid(this.profileUid),await e.updateStaticData(),this.snapshotReceivedCallback(e)}}class Rt extends yt{staticData;profileUid;constructor(e,t){super(e,t),this.staticData=null}search(e,t){return this.callMethodPromise("search",e,t)}aggregatesWithFilter(e){return this.callMethodPromise("aggregatesWithFilter",e)}aggregatesForDiff(){return this.callMethodPromise("aggregatesForDiff")}calculateSnapshotDiff(e,t){return this.callMethodPromise("calculateSnapshotDiff",e,t)}nodeClassName(e){return this.callMethodPromise("nodeClassName",e)}createEdgesProvider(e){return this.callFactoryMethod(null,"createEdgesProvider",Et,e)}createRetainingEdgesProvider(e){return this.callFactoryMethod(null,"createRetainingEdgesProvider",Et,e)}createAddedNodesProvider(e,t){return this.callFactoryMethod(null,"createAddedNodesProvider",Et,e,t)}createDeletedNodesProvider(e){return this.callFactoryMethod(null,"createDeletedNodesProvider",Et,e)}createNodesProvider(e){return this.callFactoryMethod(null,"createNodesProvider",Et,e)}createNodesProviderForClass(e,t){return this.callFactoryMethod(null,"createNodesProviderForClass",Et,e,t)}allocationTracesTops(){return this.callMethodPromise("allocationTracesTops")}allocationNodeCallers(e){return this.callMethodPromise("allocationNodeCallers",e)}allocationStack(e){return this.callMethodPromise("allocationStack",e)}dispose(){throw new Error("Should never be called")}get nodeCount(){return this.staticData?this.staticData.nodeCount:0}get rootNodeIndex(){return this.staticData?this.staticData.rootNodeIndex:0}async updateStaticData(){this.staticData=await this.callMethodPromise("updateStaticData")}getStatistics(){return this.callMethodPromise("getStatistics")}getLocation(e){return this.callMethodPromise("getLocation",e)}getSamples(){return this.callMethodPromise("getSamples")}get totalSize(){return this.staticData?this.staticData.totalSize:0}get uid(){return this.profileUid}setProfileUid(e){this.profileUid=e}maxJSObjectId(){return this.staticData?this.staticData.maxJSObjectId:0}}class Et extends yt{constructor(e,t){super(e,t)}nodePosition(e){return this.callMethodPromise("nodePosition",e)}isEmpty(){return this.callMethodPromise("isEmpty")}serializeItemsRange(e,t){return this.callMethodPromise("serializeItemsRange",e,t)}async sortAndRewind(e){await this.callMethodPromise("sortAndRewind",e)}}var Nt=Object.freeze({__proto__:null,HeapSnapshotWorkerProxy:xt,HeapSnapshotProxyObject:yt,HeapSnapshotLoaderProxy:It,HeapSnapshotProxy:Rt,HeapSnapshotProviderProxy:Et});const kt={find:"Find",containment:"Containment",retainers:"Retainers",allocationStack:"Allocation stack",perspective:"Perspective",baseSnapshot:"Base snapshot",filter:"Filter",classFilter:"Class filter",code:"Code",strings:"Strings",jsArrays:"JS arrays",typedArrays:"Typed arrays",systemObjects:"System objects",selectedSizeS:"Selected size: {PH1}",allObjects:"All objects",objectsAllocatedBeforeS:"Objects allocated before {PH1}",objectsAllocatedBetweenSAndS:"Objects allocated between {PH1} and {PH2}",summary:"Summary",comparison:"Comparison",allocation:"Allocation",liveObjects:"Live objects",statistics:"Statistics",heapSnapshot:"Heap snapshot",takeHeapSnapshot:"Take heap snapshot",heapSnapshots:"HEAP SNAPSHOTS",heapSnapshotProfilesShowMemory:"Heap snapshot profiles show memory distribution among your page's JavaScript objects and related DOM nodes.",exposeInternals:"Expose internals (includes additional implementation-specific details)",captureNumericValue:"Include numerical values in capture",snapshotting:"Snapshotting…",snapshotD:"Snapshot {PH1}",percentagePlaceholder:"{PH1}%",allocationInstrumentationOn:"Allocation instrumentation on timeline",stopRecordingHeapProfile:"Stop recording heap profile",startRecordingHeapProfile:"Start recording heap profile",recordAllocationStacksExtra:"Record stack traces of allocations (extra performance overhead)",recording:"Recording…",allocationTimelines:"ALLOCATION TIMELINES",AllocationTimelinesShowInstrumented:"Allocation timelines show instrumented JavaScript memory allocations over time. Once profile is recorded you can select a time interval to see objects that were allocated within it and still alive by the end of recording. Use this profile type to isolate memory leaks.",loading:"Loading…",savingD:"Saving… {PH1}%",sKb:"{PH1} kB",heapMemoryUsage:"Heap memory usage",stackWasNotRecordedForThisObject:"Stack was not recorded for this object because it had been allocated before this profile recording started."},Dt=t.i18n.registerUIStrings("panels/profiler/HeapSnapshotView.ts",kt),Mt=t.i18n.getLocalizedString.bind(void 0,Dt),Ft=t.i18n.registerUIStrings("panels/profiler/ModuleUIStrings.ts",{buildingEdgeIndexes:"Building edge indexes…",buildingRetainers:"Building retainers…",propagatingDomState:"Propagating DOM state…",calculatingNodeFlags:"Calculating node flags…",calculatingDistances:"Calculating distances…",buildingPostorderIndex:"Building postorder index…",buildingDominatorTree:"Building dominator tree…",calculatingRetainedSizes:"Calculating retained sizes…",buildingDominatedNodes:"Building dominated nodes…",calculatingStatistics:"Calculating statistics…",calculatingSamples:"Calculating samples…",buildingLocations:"Building locations…",finishedProcessing:"Finished processing.",buildingAllocationStatistics:"Building allocation statistics…",done:"Done",processingSnapshot:"Processing snapshot…",parsingStrings:"Parsing strings…",loadingSnapshotInfo:"Loading snapshot info…",loadingNodesD:"Loading nodes… {PH1}%",loadingEdgesD:"Loading edges… {PH1}%",loadingAllocationTracesD:"Loading allocation traces… {PH1}%",loadingSamples:"Loading samples…",loadingLocations:"Loading locations…",loadingStrings:"Loading strings…"}),Ht=t.i18n.getLocalizedString.bind(void 0,Ft);class Lt extends s.View.SimpleView{searchResults;profile;linkifier;parentDataDisplayDelegate;searchableViewInternal;splitWidget;containmentDataGrid;containmentWidget;statisticsView;constructorsDataGrid;constructorsWidget;diffDataGrid;diffWidget;allocationDataGrid;allocationWidget;allocationStackView;tabbedPane;retainmentDataGrid;retainmentWidget;objectDetailsView;perspectives;comparisonPerspective;perspectiveSelect;baseSelect;filterSelect;classNameFilter;selectedSizeText;popoverHelper;currentPerspectiveIndex;currentPerspective;dataGrid;searchThrottler;baseProfile;trackingOverviewGrid;currentSearchResultIndex=-1;currentQuery;constructor(e,t){super(Mt(kt.heapSnapshot)),this.searchResults=[],this.element.classList.add("heap-snapshot-view"),this.profile=t,this.linkifier=new d.Linkifier.Linkifier;const i=t.profileType();i.addEventListener("SnapshotReceived",this.onReceiveSnapshot,this),i.addEventListener(D.RemoveProfileHeader,this.onProfileHeaderRemoved,this);const n=i.id===At.TypeId;n&&this.createOverview();const a=Kt.trackingHeapSnapshotProfileType.recordAllocationStacksSetting().get();this.parentDataDisplayDelegate=e,this.searchableViewInternal=new s.SearchableView.SearchableView(this,null),this.searchableViewInternal.setPlaceholder(Mt(kt.find),Mt(kt.find)),this.searchableViewInternal.show(this.element),this.splitWidget=new s.SplitWidget.SplitWidget(!1,!0,"heapSnapshotSplitViewState",200,200),this.splitWidget.show(this.searchableViewInternal.element);const l=t.heapProfilerModel();let h;if(this.containmentDataGrid=new ft(l,this,Mt(kt.containment)),this.containmentDataGrid.addEventListener(r.DataGrid.Events.SelectedNode,this.selectionChanged,this),this.containmentWidget=this.containmentDataGrid.asWidget(),this.containmentWidget.setMinimumSize(50,25),this.statisticsView=new _t,this.constructorsDataGrid=new vt(l,this),this.constructorsDataGrid.addEventListener(r.DataGrid.Events.SelectedNode,this.selectionChanged,this),this.constructorsWidget=this.constructorsDataGrid.asWidget(),this.constructorsWidget.setMinimumSize(50,25),this.diffDataGrid=new wt(l,this),this.diffDataGrid.addEventListener(r.DataGrid.Events.SelectedNode,this.selectionChanged,this),this.diffWidget=this.diffDataGrid.asWidget(),this.diffWidget.setMinimumSize(50,25),this.allocationDataGrid=null,n&&a&&(this.allocationDataGrid=new St(l,this),this.allocationDataGrid.addEventListener(r.DataGrid.Events.SelectedNode,this.onSelectAllocationNode,this),this.allocationWidget=this.allocationDataGrid.asWidget(),this.allocationWidget.setMinimumSize(50,25),this.allocationStackView=new Jt(l),this.allocationStackView.setMinimumSize(50,25),this.tabbedPane=new s.TabbedPane.TabbedPane),this.retainmentDataGrid=new gt(l,this),this.retainmentWidget=this.retainmentDataGrid.asWidget(),this.retainmentWidget.setMinimumSize(50,21),this.retainmentWidget.element.classList.add("retaining-paths-view"),this.allocationStackView)this.tabbedPane=new s.TabbedPane.TabbedPane,this.tabbedPane.appendTab("retainers",Mt(kt.retainers),this.retainmentWidget),this.tabbedPane.appendTab("allocation-stack",Mt(kt.allocationStack),this.allocationStackView),h=this.tabbedPane.headerElement(),this.objectDetailsView=this.tabbedPane;else{const e=document.createElement("div");e.classList.add("heap-snapshot-view-resizer");const t=e.createChild("div","title");e.createChild("div","verticalResizerIcon");t.createChild("span").textContent=Mt(kt.retainers),h=e,this.objectDetailsView=new s.Widget.VBox,this.objectDetailsView.element.appendChild(e),this.retainmentWidget.show(this.objectDetailsView.element)}this.splitWidget.hideDefaultResizer(),this.splitWidget.installResizer(h),this.retainmentDataGrid.addEventListener(r.DataGrid.Events.SelectedNode,this.inspectedObjectChanged,this),this.retainmentDataGrid.reset(),this.perspectives=[],this.comparisonPerspective=new zt,this.perspectives.push(new Ot),t.profileType()!==Kt.trackingHeapSnapshotProfileType&&this.perspectives.push(this.comparisonPerspective),this.perspectives.push(new Bt),this.allocationWidget&&this.perspectives.push(new Gt),this.perspectives.push(new Vt),this.perspectiveSelect=new s.Toolbar.ToolbarComboBox(this.onSelectedPerspectiveChanged.bind(this),Mt(kt.perspective)),this.updatePerspectiveOptions(),this.baseSelect=new s.Toolbar.ToolbarComboBox(this.changeBase.bind(this),Mt(kt.baseSnapshot)),this.baseSelect.setVisible(!1),this.updateBaseOptions(),this.filterSelect=new s.Toolbar.ToolbarComboBox(this.changeFilter.bind(this),Mt(kt.filter)),this.filterSelect.setVisible(!1),this.updateFilterOptions(),this.classNameFilter=new s.Toolbar.ToolbarInput(Mt(kt.classFilter)),this.classNameFilter.setVisible(!1),this.constructorsDataGrid.setNameFilter(this.classNameFilter),this.diffDataGrid.setNameFilter(this.classNameFilter),this.selectedSizeText=new s.Toolbar.ToolbarText,this.popoverHelper=new s.PopoverHelper.PopoverHelper(this.element,this.getPopoverRequest.bind(this)),this.popoverHelper.setDisableOnClick(!0),this.popoverHelper.setHasPadding(!0),this.element.addEventListener("scroll",this.popoverHelper.hidePopover.bind(this.popoverHelper),!0),this.currentPerspectiveIndex=0,this.currentPerspective=this.perspectives[0],this.currentPerspective.activate(this),this.dataGrid=this.currentPerspective.masterGrid(this),this.populate(),this.searchThrottler=new o.Throttler.Throttler(0);for(const e of this.profiles())e.addEventListener(k.ProfileTitleChanged,this.updateControls,this)}createOverview(){const e=this.profile.profileType();this.trackingOverviewGrid=new Re,this.trackingOverviewGrid.addEventListener("IdsRangeChanged",this.onIdsRangeChanged.bind(this)),this.profile.fromFile()||e.profileBeingRecorded()!==this.profile||(e.addEventListener("HeapStatsUpdate",this.onHeapStatsUpdate,this),e.addEventListener("TrackingStopped",this.onStopTracking,this),this.trackingOverviewGrid.start())}onStopTracking(){const e=this.profile.profileType();e.removeEventListener("HeapStatsUpdate",this.onHeapStatsUpdate,this),e.removeEventListener("TrackingStopped",this.onStopTracking,this),this.trackingOverviewGrid&&this.trackingOverviewGrid.stop()}onHeapStatsUpdate({data:e}){this.trackingOverviewGrid&&this.trackingOverviewGrid.setSamples(e)}searchableView(){return this.searchableViewInternal}showProfile(e){return this.parentDataDisplayDelegate.showProfile(e)}showObject(e,t){Number(e)<=this.profile.maxJSObjectId?this.selectLiveObject(t,e):this.parentDataDisplayDelegate.showObject(e,t)}async linkifyObject(e){const t=this.profile.heapProfilerModel();if(!t)return null;const i=await this.profile.getLocation(e);if(!i)return null;const r=t.runtimeModel().debuggerModel().createRawLocationByScriptId(String(i.scriptId),i.lineNumber,i.columnNumber);if(!r)return null;const s=r.script(),o=s&&s.sourceURL;return o&&this.linkifier?this.linkifier.linkifyRawLocation(r,o):null}async populate(){const e=await this.profile.loadPromise;if(this.retrieveStatistics(e),this.dataGrid&&this.dataGrid.setDataSource(e,0),this.profile.profileType().id===At.TypeId&&this.profile.fromFile()){const t=await e.getSamples();if(t){console.assert(Boolean(t.timestamps.length));const e=new Ne;e.sizes=t.sizes,e.ids=t.lastAssignedIds,e.timestamps=t.timestamps,e.max=t.sizes,e.totalTime=Math.max(t.timestamps[t.timestamps.length-1]||0,1e4),this.trackingOverviewGrid&&this.trackingOverviewGrid.setSamples(e)}}const t=this.profiles().indexOf(this.profile);this.baseSelect.setSelectedIndex(Math.max(0,t-1)),this.trackingOverviewGrid&&this.trackingOverviewGrid.updateGrid()}async retrieveStatistics(e){const t=await e.getStatistics(),i=[{value:t.code,color:"#f77",title:Mt(kt.code)},{value:t.strings,color:"#5e5",title:Mt(kt.strings)},{value:t.jsArrays,color:"#7af",title:Mt(kt.jsArrays)},{value:t.native,color:"#fc5",title:Mt(kt.typedArrays)},{value:t.system,color:"#98f",title:Mt(kt.systemObjects)}];return this.statisticsView.setTotalAndRecords(t.total,i),t}onIdsRangeChanged(t){const{minId:i,maxId:r}=t.data;this.selectedSizeText.setText(Mt(kt.selectedSizeS,{PH1:e.NumberUtilities.bytesToString(t.data.size)})),this.constructorsDataGrid.snapshot&&this.constructorsDataGrid.setSelectionRange(i,r)}async toolbarItems(){const e=[this.perspectiveSelect,this.classNameFilter];return this.profile.profileType()!==Kt.trackingHeapSnapshotProfileType&&e.push(this.baseSelect,this.filterSelect),e.push(this.selectedSizeText),e}willHide(){this.currentSearchResultIndex=-1,this.popoverHelper.hidePopover()}supportsCaseSensitiveSearch(){return!0}supportsRegexSearch(){return!1}onSearchCanceled(){this.currentSearchResultIndex=-1,this.searchResults=[]}selectRevealedNode(e){e&&e.select()}performSearch(e,t,i){const r=new p.HeapSnapshotModel.SearchConfig(e.query.trim(),e.caseSensitive,e.isRegex,t,i||!1);this.searchThrottler.schedule(this.performSearchInternal.bind(this,r))}async performSearchInternal(e){if(this.onSearchCanceled(),!this.currentPerspective.supportsSearch())return;this.currentQuery=e;const t=e.query.trim();if(!t)return;if("@"===t.charAt(0)){const e=parseInt(t.substring(1),10);if(isNaN(e))return;if(!this.dataGrid)return;const i=await this.dataGrid.revealObjectByHeapSnapshotId(String(e));return void this.selectRevealedNode(i)}if(!this.profile.snapshotProxy||!this.dataGrid)return;const i=this.dataGrid.nodeFilter();this.searchResults=i?await this.profile.snapshotProxy.search(this.currentQuery,i):[],this.searchableViewInternal.updateSearchMatchesCount(this.searchResults.length),this.searchResults.length&&(this.currentSearchResultIndex=e.jumpBackward?this.searchResults.length-1:0),await this.jumpToSearchResult(this.currentSearchResultIndex)}jumpToNextSearchResult(){this.searchResults.length&&(this.currentSearchResultIndex=(this.currentSearchResultIndex+1)%this.searchResults.length,this.searchThrottler.schedule(this.jumpToSearchResult.bind(this,this.currentSearchResultIndex)))}jumpToPreviousSearchResult(){this.searchResults.length&&(this.currentSearchResultIndex=(this.currentSearchResultIndex+this.searchResults.length-1)%this.searchResults.length,this.searchThrottler.schedule(this.jumpToSearchResult.bind(this,this.currentSearchResultIndex)))}async jumpToSearchResult(e){if(this.searchableViewInternal.updateCurrentMatchIndex(e),-1===e)return;if(!this.dataGrid)return;const t=await this.dataGrid.revealObjectByHeapSnapshotId(String(this.searchResults[e]));this.selectRevealedNode(t)}refreshVisibleData(){if(!this.dataGrid)return;let e=this.dataGrid.rootNode().children[0];for(;e;)e.refresh(),e=e.traverseNextNode(!1,null,!0)}changeBase(){if(this.baseProfile===this.profiles()[this.baseSelect.selectedIndex()])return;this.baseProfile=this.profiles()[this.baseSelect.selectedIndex()];const e=this.dataGrid;e.snapshot&&this.baseProfile.loadPromise.then(e.setBaseDataSource.bind(e)),this.currentQuery&&this.searchResults&&this.performSearch(this.currentQuery,!1)}changeFilter(){const e=this.filterSelect.selectedIndex()-1;this.dataGrid&&(this.dataGrid.filterSelectIndexChanged(this.profiles(),e),this.currentQuery&&this.searchResults&&this.performSearch(this.currentQuery,!1))}profiles(){return this.profile.profileType().getProfiles()}selectionChanged(e){const t=e.data;this.setSelectedNodeForDetailsView(t),this.inspectedObjectChanged(e)}onSelectAllocationNode(e){const t=e.data;this.constructorsDataGrid.setAllocationNodeId(t.allocationNodeId()),this.setSelectedNodeForDetailsView(null)}inspectedObjectChanged(e){const t=e.data,i=this.profile.heapProfilerModel();i&&t instanceof Ye&&i.addInspectedHeapObject(String(t.snapshotNodeId))}setSelectedNodeForDetailsView(e){const t=e&&e.retainersDataSource();t?(this.retainmentDataGrid.setDataSource(t.snapshot,t.snapshotNodeIndex),this.allocationStackView&&this.allocationStackView.setAllocatedObject(t.snapshot,t.snapshotNodeIndex)):(this.allocationStackView&&this.allocationStackView.clear(),this.retainmentDataGrid.reset())}async changePerspectiveAndWait(e){const t=this.perspectives.findIndex((t=>t.title()===e));if(-1===t||this.currentPerspectiveIndex===t)return;const i=this.perspectives[t].masterGrid(this);if(!i)return;const r=i.once(pt.ContentShown),s=this.perspectiveSelect.options().find((e=>e.value===String(t)));this.perspectiveSelect.select(s),this.changePerspective(t),await r}async updateDataSourceAndView(){const e=this.dataGrid;if(!e||e.snapshot)return;const t=await this.profile.loadPromise;if(this.dataGrid!==e)return;if(e.snapshot!==t&&e.setDataSource(t,0),e!==this.diffDataGrid)return;this.baseProfile||(this.baseProfile=this.profiles()[this.baseSelect.selectedIndex()]);const i=await this.baseProfile.loadPromise;this.diffDataGrid.baseSnapshot!==i&&this.diffDataGrid.setBaseDataSource(i)}onSelectedPerspectiveChanged(e){this.changePerspective(Number(e.target.selectedOptions[0].value))}changePerspective(e){if(e===this.currentPerspectiveIndex)return;this.currentPerspectiveIndex=e,this.currentPerspective.deactivate(this);const t=this.perspectives[e];this.currentPerspective=t,this.dataGrid=t.masterGrid(this),t.activate(this),this.refreshVisibleData(),this.dataGrid&&this.dataGrid.updateWidths(),this.updateDataSourceAndView(),this.currentQuery&&this.searchResults&&this.performSearch(this.currentQuery,!1)}async selectLiveObject(e,t){if(await this.changePerspectiveAndWait(e),!this.dataGrid)return;const i=await this.dataGrid.revealObjectByHeapSnapshotId(t);i?i.select():o.Console.Console.instance().error("Cannot find corresponding heap snapshot node")}getPopoverRequest(e){const t=s.UIUtils.enclosingNodeOrSelfWithNodeName(e.target,"span"),i=s.UIUtils.enclosingNodeOrSelfWithNodeName(e.target,"tr");if(!i)return null;if(!this.dataGrid)return null;const r=this.dataGrid.dataGridNodeFromNode(i)||this.containmentDataGrid.dataGridNodeFromNode(i)||this.constructorsDataGrid.dataGridNodeFromNode(i)||this.diffDataGrid.dataGridNodeFromNode(i)||this.allocationDataGrid&&this.allocationDataGrid.dataGridNodeFromNode(i)||this.retainmentDataGrid.dataGridNodeFromNode(i),o=this.profile.heapProfilerModel();if(!r||!t||!o)return null;let n;return{box:t.boxInWindow(),show:async e=>{if(!o)return!1;const t=await r.queryObjectContent(o,"popover");return!!t&&(n=await u.ObjectPopoverHelper.ObjectPopoverHelper.buildObjectPopover(t,e),!!n||(o.runtimeModel().releaseObjectGroup("popover"),!1))},hide:()=>{o.runtimeModel().releaseObjectGroup("popover"),n&&n.dispose()}}}updatePerspectiveOptions(){const e=this.profiles().length>1;this.perspectiveSelect.removeOptions(),this.perspectives.forEach(((t,i)=>{(e||t!==this.comparisonPerspective)&&this.perspectiveSelect.createOption(t.title(),String(i))}))}updateBaseOptions(){const e=this.profiles(),t=this.baseSelect.selectedIndex();this.baseSelect.removeOptions();for(const t of e)this.baseSelect.createOption(t.title);t>-1&&this.baseSelect.setSelectedIndex(t)}updateFilterOptions(){const e=this.profiles(),t=this.filterSelect.selectedIndex();this.filterSelect.removeOptions(),this.filterSelect.createOption(Mt(kt.allObjects));for(let t=0;t-1&&this.filterSelect.setSelectedIndex(t)}updateControls(){this.updatePerspectiveOptions(),this.updateBaseOptions(),this.updateFilterOptions()}onReceiveSnapshot(e){this.updateControls();e.data.addEventListener(k.ProfileTitleChanged,this.updateControls,this)}onProfileHeaderRemoved(e){const t=e.data;t.removeEventListener(k.ProfileTitleChanged,this.updateControls,this),this.profile===t?(this.detach(),this.profile.profileType().removeEventListener("SnapshotReceived",this.onReceiveSnapshot,this),this.profile.profileType().removeEventListener(D.RemoveProfileHeader,this.onProfileHeaderRemoved,this),this.dispose()):this.updateControls()}dispose(){this.linkifier.dispose(),this.popoverHelper.dispose(),this.allocationStackView&&(this.allocationStackView.clear(),this.allocationDataGrid&&this.allocationDataGrid.dispose()),this.onStopTracking(),this.trackingOverviewGrid&&this.trackingOverviewGrid.removeEventListener("IdsRangeChanged",this.onIdsRangeChanged.bind(this))}}class jt{titleInternal;constructor(e){this.titleInternal=e}activate(e){}deactivate(e){e.baseSelect.setVisible(!1),e.filterSelect.setVisible(!1),e.classNameFilter.setVisible(!1),e.trackingOverviewGrid&&e.trackingOverviewGrid.detach(),e.allocationWidget&&e.allocationWidget.detach(),e.statisticsView&&e.statisticsView.detach(),e.splitWidget.detach(),e.splitWidget.detachChildWidgets()}masterGrid(e){return null}title(){return this.titleInternal}supportsSearch(){return!1}}class Ot extends jt{constructor(){super(Mt(kt.summary))}activate(e){e.splitWidget.setMainWidget(e.constructorsWidget),e.splitWidget.setSidebarWidget(e.objectDetailsView),e.splitWidget.show(e.searchableViewInternal.element),e.filterSelect.setVisible(!0),e.classNameFilter.setVisible(!0),e.trackingOverviewGrid&&(e.trackingOverviewGrid.show(e.searchableViewInternal.element,e.splitWidget.element),e.trackingOverviewGrid.update(),e.trackingOverviewGrid.updateGrid())}masterGrid(e){return e.constructorsDataGrid}supportsSearch(){return!0}}class zt extends jt{constructor(){super(Mt(kt.comparison))}activate(e){e.splitWidget.setMainWidget(e.diffWidget),e.splitWidget.setSidebarWidget(e.objectDetailsView),e.splitWidget.show(e.searchableViewInternal.element),e.baseSelect.setVisible(!0),e.classNameFilter.setVisible(!0)}masterGrid(e){return e.diffDataGrid}supportsSearch(){return!0}}class Bt extends jt{constructor(){super(Mt(kt.containment))}activate(e){e.splitWidget.setMainWidget(e.containmentWidget),e.splitWidget.setSidebarWidget(e.objectDetailsView),e.splitWidget.show(e.searchableViewInternal.element)}masterGrid(e){return e.containmentDataGrid}}class Gt extends jt{allocationSplitWidget;constructor(){super(Mt(kt.allocation)),this.allocationSplitWidget=new s.SplitWidget.SplitWidget(!1,!0,"heapSnapshotAllocationSplitViewState",200,200),this.allocationSplitWidget.setSidebarWidget(new s.Widget.VBox)}activate(e){e.allocationWidget&&this.allocationSplitWidget.setMainWidget(e.allocationWidget),e.splitWidget.setMainWidget(e.constructorsWidget),e.splitWidget.setSidebarWidget(e.objectDetailsView);const t=new s.Widget.VBox,i=document.createElement("div");i.classList.add("heap-snapshot-view-resizer");const r=i.createChild("div","title").createChild("span");if(i.createChild("div","verticalResizerIcon"),r.textContent=Mt(kt.liveObjects),this.allocationSplitWidget.hideDefaultResizer(),this.allocationSplitWidget.installResizer(i),t.element.appendChild(i),e.splitWidget.show(t.element),this.allocationSplitWidget.setSidebarWidget(t),this.allocationSplitWidget.show(e.searchableViewInternal.element),e.constructorsDataGrid.clear(),e.allocationDataGrid){const t=e.allocationDataGrid.selectedNode;t&&e.constructorsDataGrid.setAllocationNodeId(t.allocationNodeId())}}deactivate(e){this.allocationSplitWidget.detach(),super.deactivate(e)}masterGrid(e){return e.allocationDataGrid}}class Vt extends jt{constructor(){super(Mt(kt.statistics))}activate(e){e.statisticsView.show(e.searchableViewInternal.element)}masterGrid(e){return null}}class Ut extends(o.ObjectWrapper.eventMixin(L)){exposeInternals;captureNumericValue;customContentInternal;constructor(e,t){super(e||Ut.TypeId,t||Mt(kt.heapSnapshot)),l.TargetManager.TargetManager.instance().observeModels(l.HeapProfilerModel.HeapProfilerModel,this),l.TargetManager.TargetManager.instance().addModelListener(l.HeapProfilerModel.HeapProfilerModel,l.HeapProfilerModel.Events.ResetProfiles,this.resetProfiles,this),l.TargetManager.TargetManager.instance().addModelListener(l.HeapProfilerModel.HeapProfilerModel,l.HeapProfilerModel.Events.AddHeapSnapshotChunk,this.addHeapSnapshotChunk,this),l.TargetManager.TargetManager.instance().addModelListener(l.HeapProfilerModel.HeapProfilerModel,l.HeapProfilerModel.Events.ReportHeapSnapshotProgress,this.reportHeapSnapshotProgress,this),this.exposeInternals=o.Settings.Settings.instance().createSetting("exposeInternals",!1),this.captureNumericValue=o.Settings.Settings.instance().createSetting("captureNumericValue",!1),this.customContentInternal=null}modelAdded(e){e.enable()}modelRemoved(e){}getProfiles(){return super.getProfiles()}fileExtension(){return".heapsnapshot"}get buttonTooltip(){return Mt(kt.takeHeapSnapshot)}isInstantProfile(){return!0}buttonClicked(){return this.takeHeapSnapshot(),a.userMetrics.actionTaken(a.UserMetrics.Action.ProfilesHeapProfileTaken),!1}get treeItemTitle(){return Mt(kt.heapSnapshots)}get description(){return Mt(kt.heapSnapshotProfilesShowMemory)}customContent(){const e=document.createElement("div"),t=c.Runtime.experiments.isEnabled("showOptionToExposeInternalsInHeapSnapshot"),i=!t;if(t){const t=s.SettingsUI.createSettingCheckbox(Mt(kt.exposeInternals),this.exposeInternals,i);e.appendChild(t)}const r=s.SettingsUI.createSettingCheckbox(Mt(kt.captureNumericValue),this.captureNumericValue,i);return e.appendChild(r),this.customContentInternal=e,e}setCustomContentEnabled(e){this.customContentInternal&&this.customContentInternal.querySelectorAll("[is=dt-checkbox]").forEach((t=>{t.checkboxElement.disabled=!e}))}createProfileLoadedFromFile(e){return new Wt(null,this,e)}async takeHeapSnapshot(){if(this.profileBeingRecorded())return;const e=s.Context.Context.instance().flavor(l.HeapProfilerModel.HeapProfilerModel);if(!e)return;let t=new Wt(e,this);this.setProfileBeingRecorded(t),this.addProfile(t),t.updateStatus(Mt(kt.snapshotting)),await e.takeHeapSnapshot({reportProgress:!0,captureNumericValue:this.captureNumericValue.get(),exposeInternals:this.exposeInternals.get()}),t=this.profileBeingRecorded(),t&&(t.title=Mt(kt.snapshotD,{PH1:t.uid}),t.finishLoad(),this.setProfileBeingRecorded(null),this.dispatchEventToListeners(D.ProfileComplete,t))}addHeapSnapshotChunk(e){const t=this.profileBeingRecorded();t&&t.transferChunk(e.data)}reportHeapSnapshotProgress(e){const t=this.profileBeingRecorded();if(!t)return;const{done:i,total:r,finished:s}=e.data;t.updateStatus(Mt(kt.percentagePlaceholder,{PH1:(i/r*100).toFixed(0)}),!0),s&&t.prepareToLoad()}resetProfiles(e){const t=e.data;for(const e of this.getProfiles())e.heapProfilerModel()===t&&this.removeProfile(e)}snapshotReceived(e){this.profileBeingRecorded()===e&&this.setProfileBeingRecorded(null),this.dispatchEventToListeners("SnapshotReceived",e)}static TypeId="HEAP";static SnapshotReceived="SnapshotReceived"}class At extends(o.ObjectWrapper.eventMixin(Ut)){recordAllocationStacksSettingInternal;customContentInternal;recording;profileSamples;constructor(){super(At.TypeId,Mt(kt.allocationInstrumentationOn)),this.recordAllocationStacksSettingInternal=o.Settings.Settings.instance().createSetting("recordAllocationStacks",!1),this.customContentInternal=null,this.recording=!1}modelAdded(e){super.modelAdded(e),e.addEventListener(l.HeapProfilerModel.Events.HeapStatsUpdate,this.heapStatsUpdate,this),e.addEventListener(l.HeapProfilerModel.Events.LastSeenObjectId,this.lastSeenObjectId,this)}modelRemoved(e){super.modelRemoved(e),e.removeEventListener(l.HeapProfilerModel.Events.HeapStatsUpdate,this.heapStatsUpdate,this),e.removeEventListener(l.HeapProfilerModel.Events.LastSeenObjectId,this.lastSeenObjectId,this)}heapStatsUpdate(e){if(!this.profileSamples)return;const t=e.data;let i;for(let e=0;e{this.fulfillLoad=e})),this.totalNumberOfChunks=0,this.bufferedWriter=null,this.onTempFileReady=null}heapProfilerModel(){return this.heapProfilerModelInternal}async getLocation(e){return this.snapshotProxy?this.snapshotProxy.getLocation(e):null}createSidebarTreeElement(e){return new A(e,this,"heap-snapshot-sidebar-tree-item")}createView(e){return new Lt(e,this)}prepareToLoad(){console.assert(!this.receiver,"Already loading"),this.setupWorker(),this.updateStatus(Mt(kt.loading),!0)}finishLoad(){!this.wasDisposed&&this.receiver&&this.receiver.close(),this.bufferedWriter&&this.didWriteToTempFile(this.bufferedWriter)}didWriteToTempFile(e){this.wasDisposed?e&&e.remove():(this.tempFile=e,e||(this.failedToCreateTempFile=!0),this.onTempFileReady&&(this.onTempFileReady(),this.onTempFileReady=null))}setupWorker(){console.assert(!this.workerProxy,"HeapSnapshotWorkerProxy already exists"),this.workerProxy=new xt(this.handleWorkerEvent.bind(this)),this.workerProxy.addEventListener("Wait",(e=>{this.updateStatus(null,e.data)}),this),this.receiver=this.workerProxy.createLoader(this.uid,this.snapshotReceived.bind(this))}handleWorkerEvent(e,i){if(p.HeapSnapshotModel.HeapSnapshotProgressEvent.BrokenSnapshot===e){const e=i;return void o.Console.Console.instance().error(e)}if(p.HeapSnapshotModel.HeapSnapshotProgressEvent.Update!==e)return;const r=i,s=t.i18n.deserializeUIString(r);this.updateStatus(Ht(s.string,s.values))}dispose(){this.workerProxy&&this.workerProxy.dispose(),this.removeTempFile(),this.wasDisposed=!0}didCompleteSnapshotTransfer(){this.snapshotProxy&&this.updateStatus(e.NumberUtilities.bytesToString(this.snapshotProxy.totalSize),!1)}transferChunk(e){this.bufferedWriter||(this.bufferedWriter=new h.TempFile.TempFile),this.bufferedWriter.write([e]),++this.totalNumberOfChunks,this.receiver&&this.receiver.write(e)}snapshotReceived(e){this.wasDisposed||(this.receiver=null,this.snapshotProxy=e,this.maxJSObjectId=e.maxJSObjectId(),this.didCompleteSnapshotTransfer(),this.workerProxy&&this.workerProxy.startCheckingForLongRunningCalls(),this.notifySnapshotReceived())}notifySnapshotReceived(){this.snapshotProxy&&this.fulfillLoad&&this.fulfillLoad(this.snapshotProxy),this.profileType().snapshotReceived(this),this.canSaveToFile()&&this.dispatchEventToListeners(k.ProfileReceived)}canSaveToFile(){return!this.fromFile()&&Boolean(this.snapshotProxy)}saveToFile(){const t=new h.FileUtils.FileOutputStream;this.fileName=this.fileName||"Heap-"+e.DateUtilities.toISO8601Compact(new Date)+this.profileType().fileExtension();const i=async e=>{if(e){if(this.failedToCreateTempFile)return o.Console.Console.instance().error("Failed to open temp file with heap snapshot"),void t.close();if(this.tempFile){const e=await this.tempFile.copyToOutputStream(t,this.onChunkTransferred.bind(this));return e&&o.Console.Console.instance().error("Failed to read heap snapshot from temp file: "+e.message),void this.didCompleteSnapshotTransfer()}this.onTempFileReady=()=>{i(e)},this.updateSaveProgress(0,1)}};t.open(this.fileName).then(i.bind(this))}onChunkTransferred(e){this.updateSaveProgress(e.loadedSize(),e.fileSize())}updateSaveProgress(e,t){const i=(100*(t&&e/t)).toFixed(0);this.updateStatus(Mt(kt.savingD,{PH1:i}))}async loadFromFile(e){this.updateStatus(Mt(kt.loading),!0),this.setupWorker();const t=new h.FileUtils.ChunkedFileReader(e,1e7),i=await t.read(this.receiver);if(!i){const e=t.error();e&&this.updateStatus(e.message)}return i?null:t.error()}profileType(){return super.profileType()}}class _t extends s.Widget.VBox{pieChart;constructor(){super(),this.element.classList.add("heap-snapshot-statistics-view"),this.pieChart=new n.PieChart.PieChart,this.setTotalAndRecords(0,[]),this.pieChart.classList.add("heap-snapshot-stats-pie-chart"),this.element.appendChild(this.pieChart)}static valueFormatter(t){return Mt(kt.sKb,{PH1:e.NumberUtilities.withThousandsSeparator(Math.round(t/1e3))})}setTotalAndRecords(e,t){this.pieChart.data={chartName:Mt(kt.heapMemoryUsage),size:150,formatter:_t.valueFormatter,showLegend:!0,total:e,slices:t}}}class Jt extends s.Widget.Widget{heapProfilerModel;linkifier;frameElements;constructor(e){super(),this.heapProfilerModel=e,this.linkifier=new d.Linkifier.Linkifier,this.frameElements=[]}onContextMenu(e,t){const i=new s.ContextMenu.ContextMenu(t);i.containsTarget(e)||i.appendApplicableItems(e),i.show(),t.consume(!0)}onStackViewKeydown(e){const t=e.target;if(!t)return;if("Enter"===e.key){const i=$t.get(t);if(!i)return;const r=d.Linkifier.Linkifier.linkInfo(i);if(!r)return;return void(d.Linkifier.Linkifier.invokeFirstAction(r)&&e.consume(!0))}let i;const r=e;if("ArrowUp"===r.key)i=!1;else{if("ArrowDown"!==r.key)return;i=!0}const s=this.frameElements.indexOf(t);if(-1===s)return;const o=i?s+1:s-1;if(o<0||o>=this.frameElements.length)return;const n=this.frameElements[o];n.tabIndex=0,t.tabIndex=-1,n.focus(),e.consume(!0)}async setAllocatedObject(e,t){this.clear();const i=await e.allocationStack(t);if(!i){const e=this.element.createChild("div","no-heap-allocation-stack");return void s.UIUtils.createTextChild(e,Mt(kt.stackWasNotRecordedForThisObject))}const r=this.element.createChild("div","heap-allocation-stack");r.addEventListener("keydown",this.onStackViewKeydown.bind(this),!1);for(const e of i){const t=r.createChild("div","stack-frame");this.frameElements.push(t),t.tabIndex=-1;if(t.createChild("div").textContent=s.UIUtils.beautifyFunctionName(e.functionName),!e.scriptId)continue;const i=this.heapProfilerModel?this.heapProfilerModel.target():null,o={columnNumber:e.column-1,inlineFrameIndex:0},n=this.linkifier.linkifyScriptLocation(i,String(e.scriptId),e.scriptName,e.line-1,o);t.appendChild(n),$t.set(t,n),t.addEventListener("contextmenu",this.onContextMenu.bind(this,n))}this.frameElements[0].tabIndex=0}clear(){this.element.removeChildren(),this.frameElements=[],this.linkifier.reset()}}const $t=new WeakMap;var qt=Object.freeze({__proto__:null,HeapSnapshotView:Lt,Perspective:jt,SummaryPerspective:Ot,ComparisonPerspective:zt,ContainmentPerspective:Bt,AllocationPerspective:Gt,StatisticsPerspective:Vt,HeapSnapshotProfileType:Ut,TrackingHeapSnapshotProfileType:At,HeapProfileHeader:Wt,HeapSnapshotStatisticsView:_t,HeapAllocationStackView:Jt});class Qt{cpuProfileType;heapSnapshotProfileType;samplingHeapProfileType;trackingHeapSnapshotProfileType;constructor(){this.cpuProfileType=new oe,this.heapSnapshotProfileType=new Ut,this.samplingHeapProfileType=new Be,this.trackingHeapSnapshotProfileType=new At}}const Kt=new Qt;var Yt=Object.freeze({__proto__:null,ProfileTypeRegistry:Qt,instance:Kt});const Zt={clearAllProfiles:"Clear all profiles",cantLoadFileSupportedFile:"Can’t load file. Supported file extensions: ''{PH1}''.",cantLoadProfileWhileAnother:"Can’t load profile while another profile is being recorded.",profileLoadingFailedS:"Profile loading failed: {PH1}.",load:"Load…",runD:"Run {PH1}",profiles:"Profiles",deprecationWarnMsg:"This panel will be deprecated in the upcoming version. Use the Performance panel to record JavaScript CPU profiles.",learnMore:"Learn more",feedback:"Feedback",goToPerformancePanel:"Go to Performance Panel",enableThisPanelTemporarily:"Enable this panel temporarily"},Xt=t.i18n.registerUIStrings("panels/profiler/ProfilesPanel.ts",Zt),ei=t.i18n.getLocalizedString.bind(void 0,Xt);class ti extends s.Panel.PanelWithSidebar{profileTypes;profilesItemTreeElement;sidebarTree;profileViews;toolbarElement;toggleRecordAction;toggleRecordButton;clearResultsButton;profileViewToolbar;profileGroups;launcherView;visibleView;profileToView;typeIdToSidebarSection;fileSelectorElement;selectedProfileType;constructor(e,t,i){super(e),this.profileTypes=t;const r=new s.Widget.VBox;this.splitWidget().setMainWidget(r),this.profilesItemTreeElement=new oi(this),this.sidebarTree=new s.TreeOutline.TreeOutlineInShadow,this.sidebarTree.element.classList.add("profiles-sidebar-tree-box"),this.panelSidebarElement().appendChild(this.sidebarTree.element),this.sidebarTree.appendChild(this.profilesItemTreeElement),this.sidebarTree.element.addEventListener("keydown",this.onKeyDown.bind(this),!1),this.profileViews=document.createElement("div"),this.profileViews.id="profile-views",this.profileViews.classList.add("vbox"),r.element.appendChild(this.profileViews),this.toolbarElement=document.createElement("div"),this.toolbarElement.classList.add("profiles-toolbar"),r.element.insertBefore(this.toolbarElement,r.element.firstChild),this.panelSidebarElement().classList.add("profiles-tree-sidebar");const o=document.createElement("div");o.classList.add("profiles-toolbar"),this.panelSidebarElement().insertBefore(o,this.panelSidebarElement().firstChild);const n=new s.Toolbar.Toolbar("",o);this.toggleRecordAction=s.ActionRegistry.ActionRegistry.instance().action(i),this.toggleRecordButton=s.Toolbar.Toolbar.createActionButton(this.toggleRecordAction),n.appendToolbarItem(this.toggleRecordButton),this.clearResultsButton=new s.Toolbar.ToolbarButton(ei(Zt.clearAllProfiles),"clear"),this.clearResultsButton.addEventListener(s.Toolbar.ToolbarButton.Events.Click,this.reset,this),n.appendToolbarItem(this.clearResultsButton),n.appendSeparator(),n.appendToolbarItem(s.Toolbar.Toolbar.createActionButtonForId("components.collect-garbage")),this.profileViewToolbar=new s.Toolbar.Toolbar("",this.toolbarElement),this.profileViewToolbar.makeWrappable(!0),this.profileGroups={},this.launcherView=new xe(this),this.launcherView.addEventListener(ye.ProfileTypeSelected,this.onProfileTypeSelected,this),this.profileToView=[],this.typeIdToSidebarSection={};const a=this.profileTypes;for(let e=0;eBoolean(t.fileExtension())&&e.endsWith(t.fileExtension()||"")))||null}async loadFromFile(e){this.createFileSelectorElement();const t=this.findProfileTypeByExtension(e.name);if(!t){const e=new Set(this.profileTypes.map((e=>e.fileExtension())).filter((e=>e)));return void o.Console.Console.instance().error(ei(Zt.cantLoadFileSupportedFile,{PH1:Array.from(e).join("', '")}))}if(Boolean(t.profileBeingRecorded()))return void o.Console.Console.instance().error(ei(Zt.cantLoadProfileWhileAnother));const i=await t.loadFromFile(e);i&&"message"in i&&s.UIUtils.MessageDialog.show(ei(Zt.profileLoadingFailedS,{PH1:i.message}))}toggleRecord(){if(!this.toggleRecordAction.enabled())return!0;const t=e.DOMUtilities.deepActiveElement(this.element.ownerDocument),i=this.selectedProfileType;if(!i)return!0;const r=i.buttonClicked();return this.updateToggleRecordAction(r),r?(this.launcherView.profileStarted(),i.hasTemporaryView()&&this.showProfile(i.profileBeingRecorded())):this.launcherView.profileFinished(),t&&t.focus(),!0}onSuspendStateChanged(){this.updateToggleRecordAction(this.toggleRecordAction.toggled())}updateToggleRecordAction(e){const t=Boolean(s.Context.Context.instance().flavor(l.CPUProfilerModel.CPUProfilerModel)||s.Context.Context.instance().flavor(l.HeapProfilerModel.HeapProfilerModel)),i=e||!l.TargetManager.TargetManager.instance().allTargetsSuspended()&&t;this.toggleRecordAction.setEnabled(i),this.toggleRecordAction.setToggled(e),i?this.toggleRecordButton.setTitle(this.selectedProfileType?this.selectedProfileType.buttonTooltip:""):this.toggleRecordButton.setTitle(s.UIUtils.anotherProfilerActiveLabel()),this.selectedProfileType&&this.launcherView.updateProfileType(this.selectedProfileType,i)}profileBeingRecordedRemoved(){this.updateToggleRecordAction(!1),this.launcherView.profileFinished()}onProfileTypeSelected(e){this.selectedProfileType=e.data,this.updateProfileTypeSpecificUI()}updateProfileTypeSpecificUI(){this.updateToggleRecordAction(this.toggleRecordAction.toggled())}reset(){this.profileTypes.forEach((e=>e.reset())),delete this.visibleView,this.profileGroups={},this.updateToggleRecordAction(!1),this.launcherView.profileFinished(),this.sidebarTree.element.classList.remove("some-expandable"),this.launcherView.detach(),this.profileViews.removeChildren(),this.profileViewToolbar.removeToolbarItems(),this.clearResultsButton.element.classList.remove("hidden"),this.profilesItemTreeElement.select(),this.showLauncherView()}showLauncherView(){this.closeVisibleView(),this.profileViewToolbar.removeToolbarItems(),this.launcherView.show(this.profileViews),this.visibleView=this.launcherView,this.toolbarElement.classList.add("hidden")}registerProfileType(e){this.launcherView.addProfileType(e);const t=new ii(this,e);this.typeIdToSidebarSection[e.id]=t,this.sidebarTree.appendChild(t),t.childrenListElement.addEventListener("contextmenu",this.handleContextMenuEvent.bind(this),!1),e.addEventListener(D.ViewUpdated,this.updateProfileTypeSpecificUI,this),e.addEventListener(D.AddProfileHeader,(function(e){this.addProfileHeader(e.data)}),this),e.addEventListener(D.RemoveProfileHeader,(function(e){this.removeProfileHeader(e.data)}),this),e.addEventListener(D.ProfileComplete,(function(e){this.showProfile(e.data)}),this);const i=e.getProfiles();for(let e=0;e{e.map((e=>this.profileViewToolbar.appendToolbarItem(e)))})),t}showObject(e,t){}async linkifyObject(e){return null}viewForProfile(e){const t=this.indexOfViewForProfile(e);if(-1!==t)return this.profileToView[t].view;const i=e.createView(this);return i.element.classList.add("profile-view"),this.profileToView.push({profile:e,view:i}),i}indexOfViewForProfile(e){return this.profileToView.findIndex((t=>t.profile===e))}closeVisibleView(){this.visibleView&&this.visibleView.detach(),delete this.visibleView}focus(){this.sidebarTree.focus()}wasShown(){super.wasShown(),this.registerCSSFiles([he,pe,ce]),this.sidebarTree.registerCSSFiles([ue])}}class ii extends s.TreeOutline.TreeElement{dataDisplayDelegate;profileTreeElements;profileGroups;constructor(e,t){super(t.treeItemTitle,!0),this.selectable=!1,this.dataDisplayDelegate=e,this.profileTreeElements=[],this.profileGroups={},this.expand(),this.hidden=!0,this.setCollapsible(!1)}addProfileHeader(e){this.hidden=!1;const t=e.profileType();let i=this;const r=e.createSidebarTreeElement(this.dataDisplayDelegate);if(this.profileTreeElements.push(r),!e.fromFile()&&t.profileBeingRecorded()!==e){const t=e.title;let s=this.profileGroups[t];s||(s=new ri,this.profileGroups[t]=s),s.profileSidebarTreeElements.push(r);const o=s.profileSidebarTreeElements.length;if(2===o){s.sidebarTreeElement=new si(this.dataDisplayDelegate,e.title);const t=s.profileSidebarTreeElements[0],i=this.children().indexOf(t);this.insertChild(s.sidebarTreeElement,i);const r=t.selected;this.removeChild(t),s.sidebarTreeElement.appendChild(t),r&&t.revealAndSelect(),t.setSmall(!0),t.setMainTitle(ei(Zt.runD,{PH1:1})),this.treeOutline&&this.treeOutline.element.classList.add("some-expandable")}o>=2&&(i=s.sidebarTreeElement,r.setSmall(!0),r.setMainTitle(ei(Zt.runD,{PH1:o})))}i&&i.appendChild(r)}removeProfileHeader(e){const t=this.sidebarElementIndex(e);if(-1===t)return!1;const i=this.profileTreeElements[t];this.profileTreeElements.splice(t,1);let r=this;const s=this.profileGroups[e.title];if(s){const t=s.profileSidebarTreeElements;if(t.splice(t.indexOf(i),1),1===t.length){const i=r.children().indexOf(s.sidebarTreeElement);s.sidebarTreeElement&&s.sidebarTreeElement.removeChild(t[0]),this.insertChild(t[0],i),t[0].setSmall(!1),t[0].setMainTitle(e.title),s.sidebarTreeElement&&this.removeChild(s.sidebarTreeElement)}0!==t.length&&(r=s.sidebarTreeElement)}return r&&r.removeChild(i),i.dispose(),!this.childCount()&&(this.hidden=!0,!0)}sidebarElementForProfile(e){const t=this.sidebarElementIndex(e);return-1===t?null:this.profileTreeElements[t]}sidebarElementIndex(e){const t=this.profileTreeElements;for(let i=0;i0;if(e){const e=this.lastChild();e instanceof A&&this.dataDisplayDelegate.showProfile(e.profile)}return e}onattach(){this.listItemElement.classList.add("profile-group-sidebar-tree-item"),this.listItemElement.createChild("div","icon"),this.listItemElement.createChild("div","titles no-subtitle").createChild("span","title-container").createChild("span","title").textContent=this.profileTitle}}class oi extends s.TreeOutline.TreeElement{panel;constructor(e){super("",!1),this.selectable=!0,this.panel=e}onselect(){return this.panel.showLauncherView(),!0}onattach(){this.listItemElement.classList.add("profile-launcher-view-tree-item"),this.listItemElement.createChild("div","icon"),this.listItemElement.createChild("div","titles no-subtitle").createChild("span","title-container").createChild("span","title").textContent=ei(Zt.profiles)}}let ni;class ai extends ti{constructor(){super("js_profiler",[Kt.cpuProfileType],"profiler.js-toggle-recording"),this.splitWidget().mainWidget()?.setMinimumSize(350,0),c.Runtime.experiments.isEnabled(c.Runtime.ExperimentName.REACT_NATIVE_SPECIFIC_UI)||(c.Runtime.experiments.isEnabled("jsProfilerTemporarilyEnable")?this.#t():this.#i())}static instance(e={forceNew:null}){const{forceNew:t}=e;return ni&&!t||(ni=new ai),ni}#t(){function e(){a.InspectorFrontendHost.InspectorFrontendHostInstance.openInNewTab("https://github.com/ChromeDevTools/rfcs/discussions/2")}const t=new s.Infobar.Infobar(s.Infobar.Type.Warning,ei(Zt.deprecationWarnMsg),[{text:ei(Zt.learnMore),highlight:!1,delegate:e,dismiss:!1},{text:ei(Zt.feedback),highlight:!1,delegate:e,dismiss:!1},{text:ei(Zt.goToPerformancePanel),highlight:!0,delegate:async function(){await s.InspectorView.InspectorView.instance().showPanel("timeline")},dismiss:!1}],void 0);t.setParentView(this),this.splitWidget().mainWidget()?.element.prepend(t.element)}#i(){const e=this.splitWidget().mainWidget();if(e?.detachChildWidgets(),e){const t=new s.Widget.VBox;t.contentElement.classList.add("empty-landing-page","fill");const i=t.contentElement.createChild("div");i.createChild("p").textContent="This panel is deprecated and will be removed in the next version. Use the Performance panel to record JavaScript CPU profiles.",i.createChild("p").textContent="You can temporarily enable this panel with Settings > Experiments > Enable JavaScript Profiler.",i.appendChild(s.UIUtils.createTextButton(ei(Zt.goToPerformancePanel),(async function(){await s.InspectorView.InspectorView.instance().showPanel("timeline")}),"infobar-button primary-button")),i.appendChild(s.UIUtils.createTextButton(ei(Zt.learnMore),(function(){a.InspectorFrontendHost.InspectorFrontendHostInstance.openInNewTab("https://developer.chrome.com/blog/js-profiler-deprecation/")}))),i.appendChild(s.UIUtils.createTextButton(ei(Zt.feedback),(function(){a.InspectorFrontendHost.InspectorFrontendHostInstance.openInNewTab("https://bugs.chromium.org/p/chromium/issues/detail?id=1354548")}))),i.appendChild(s.UIUtils.createTextButton(ei(Zt.enableThisPanelTemporarily),(async function(){await s.ViewManager.ViewManager.instance().showView("experiments");(await s.ViewManager.ViewManager.instance().view("experiments").widget()).setFilter("Enable JavaScript Profiler temporarily")}))),t.show(e.element)}}wasShown(){super.wasShown(),s.Context.Context.instance().setFlavor(ai,this)}willHide(){s.Context.Context.instance().setFlavor(ai,null)}handleAction(e,t){const i=s.Context.Context.instance().flavor(ai);if(!(i instanceof ai))throw new Error("non-null JSProfilerPanel expected!");return i.toggleRecord(),!0}}var li=Object.freeze({__proto__:null,ProfilesPanel:ti,ProfileTypeSidebarSection:ii,ProfileGroup:ri,ProfileGroupSidebarTreeElement:si,ProfilesSidebarTreeElement:oi,JSProfilerPanel:ai});const di={revealInSummaryView:"Reveal in Summary view"},hi=t.i18n.registerUIStrings("panels/profiler/HeapProfilerPanel.ts",di),ci=t.i18n.getLocalizedString.bind(void 0,hi);let pi;class ui extends ti{constructor(){const e=Kt;super("heap_profiler",[e.heapSnapshotProfileType,e.trackingHeapSnapshotProfileType,e.samplingHeapProfileType],"profiler.heap-toggle-recording")}static instance(){return pi||(pi=new ui),pi}appendApplicableItems(e,t,i){if(!(i instanceof l.RemoteObject.RemoteObject))return;if(!this.isShowing())return;const r=i;if(!r.objectId)return;const s=r.objectId;if(!Kt.heapSnapshotProfileType.getProfiles().length)return;const o=r.runtimeModel().heapProfilerModel();o&&t.revealSection().appendItem(ci(di.revealInSummaryView),function(e){o.snapshotObjectIdForObjectId(s).then((t=>{this.isShowing()&&t&&this.showObject(t,e)}))}.bind(this,"Summary"))}handleAction(e,t){const i=s.Context.Context.instance().flavor(ui);return console.assert(Boolean(i)&&i instanceof ui),i&&i.toggleRecord(),!0}wasShown(){super.wasShown(),s.Context.Context.instance().setFlavor(ui,this),a.userMetrics.panelLoaded("heap_profiler","DevTools.Launch.HeapProfiler")}willHide(){s.Context.Context.instance().setFlavor(ui,null)}showObject(e,t){const i=Kt.heapSnapshotProfileType.getProfiles();for(let r=0;r=parseInt(e,10)){this.showProfile(s);this.viewForProfile(s).selectLiveObject(t,e);break}}}}var mi=Object.freeze({__proto__:null,HeapProfilerPanel:ui});const fi=new CSSStyleSheet;fi.replaceSync(".data-grid{border:none}.data-grid td .size-units{margin-left:4px;font-size:75%}.data-grid tr:not(.selected) td .size-units{color:var(--color-text-secondary)}.toolbar{border-bottom:1px solid var(--color-details-hairline)}\n/*# sourceURL=liveHeapProfile.css */\n");const gi={jsHeap:"JS Heap",allocatedJsHeapSizeCurrentlyIn:"Allocated JS heap size currently in use",vms:"VMs",numberOfVmsSharingTheSameScript:"Number of VMs sharing the same script source",scriptUrl:"Script URL",urlOfTheScriptSource:"URL of the script source",heapProfile:"Heap Profile",anonymousScriptS:"(Anonymous Script {PH1})",kb:"kB"},vi=t.i18n.registerUIStrings("panels/profiler/LiveHeapProfileView.ts",gi),wi=t.i18n.getLocalizedString.bind(void 0,vi);let Si,bi;class Ci extends s.Widget.VBox{gridNodeByUrl;setting;toggleRecordAction;toggleRecordButton;startWithReloadButton;dataGrid;currentPollId;constructor(){super(!0),this.gridNodeByUrl=new Map,this.setting=o.Settings.Settings.instance().moduleSetting("memoryLiveHeapProfile");const e=new s.Toolbar.Toolbar("live-heap-profile-toolbar",this.contentElement);this.toggleRecordAction=s.ActionRegistry.ActionRegistry.instance().action("live-heap-profile.toggle-recording"),this.toggleRecordButton=s.Toolbar.Toolbar.createActionButton(this.toggleRecordAction),this.toggleRecordButton.setToggled(this.setting.get()),e.appendToolbarItem(this.toggleRecordButton);const t=l.TargetManager.TargetManager.instance().primaryPageTarget();if(t&&t.model(l.ResourceTreeModel.ResourceTreeModel)){const t=s.ActionRegistry.ActionRegistry.instance().action("live-heap-profile.start-with-reload");this.startWithReloadButton=s.Toolbar.Toolbar.createActionButton(t),e.appendToolbarItem(this.startWithReloadButton)}this.dataGrid=this.createDataGrid(),this.dataGrid.asWidget().show(this.contentElement),this.currentPollId=0}static instance(){return Si||(Si=new Ci),Si}createDataGrid(){const e={id:"",title:o.UIString.LocalizedEmptyString,width:void 0,fixedWidth:!0,sortable:!0,align:r.DataGrid.Align.Right,sort:r.DataGrid.Order.Descending,titleDOMFragment:void 0,editable:void 0,nonSelectable:void 0,longText:void 0,disclosure:void 0,weight:void 0,allowInSortByEvenWhenHidden:void 0,dataType:void 0,defaultWeight:void 0},t=[{...e,id:"size",title:wi(gi.jsHeap),width:"72px",fixedWidth:!0,sortable:!0,align:r.DataGrid.Align.Right,sort:r.DataGrid.Order.Descending,tooltip:wi(gi.allocatedJsHeapSizeCurrentlyIn)},{...e,id:"isolates",title:wi(gi.vms),width:"40px",fixedWidth:!0,align:r.DataGrid.Align.Right,tooltip:wi(gi.numberOfVmsSharingTheSameScript)},{...e,id:"url",title:wi(gi.scriptUrl),fixedWidth:!1,sortable:!0,tooltip:wi(gi.urlOfTheScriptSource)}],i=new r.SortableDataGrid.SortableDataGrid({displayName:wi(gi.heapProfile),columns:t,editCallback:void 0,deleteCallback:void 0,refreshCallback:void 0});i.setResizeMethod(r.DataGrid.ResizeMethod.Last),i.element.classList.add("flex-auto"),i.element.addEventListener("keydown",this.onKeyDown.bind(this),!1),i.addEventListener(r.DataGrid.Events.OpenedNode,this.revealSourceForSelectedNode,this),i.addEventListener(r.DataGrid.Events.SortingChanged,this.sortingChanged,this);for(const e of t){const t=i.headerTableHeader(e.id);t&&t.setAttribute("title",e.tooltip)}return i}wasShown(){super.wasShown(),this.poll(),this.registerCSSFiles([fi]),this.setting.addChangeListener(this.settingChanged,this)}willHide(){++this.currentPollId,this.setting.removeChangeListener(this.settingChanged,this)}settingChanged(e){this.toggleRecordButton.setToggled(e.data)}async poll(){const e=this.currentPollId;do{const t=Array.from(l.IsolateManager.IsolateManager.instance().isolates()),i=await Promise.all(t.map((e=>{const t=e.heapProfilerModel();return t?t.getSamplingProfile():null})));if(this.currentPollId!==e)return;this.update(t,i),await new Promise((e=>window.setTimeout(e,3e3)))}while(this.currentPollId===e)}update(e,t){const i=new Map;t.forEach(((t,i)=>{t&&o(e[i],"",t.head)}));const r=this.dataGrid.rootNode(),s=new Set;for(const e of i){const t=e[0],i=e[1].size,o=e[1].isolates.size;if(!t){console.info(`Node with empty URL: ${i} bytes`);continue}let n=this.gridNodeByUrl.get(t);n?n.updateNode(i,o):(n=new Pi(t,i,o),this.gridNodeByUrl.set(t,n),r.appendChild(n)),s.add(n)}for(const e of r.children.slice()){s.has(e)||e.remove();const t=e;this.gridNodeByUrl.delete(t.url)}function o(e,t,r){const s=r.callFrame.url||t||function(e){const t=e.callFrame.functionName;return t.startsWith("(")&&"(root)"!==t?t:""}(r)||function(e){return Number(e.callFrame.scriptId)?wi(gi.anonymousScriptS,{PH1:e.callFrame.scriptId}):""}(r);if(r.children.forEach(o.bind(null,e,s)),!r.selfSize)return;let n=i.get(s);n||(n={size:0,isolates:new Set},i.set(s,n)),n.size+=r.selfSize,n.isolates.add(e)}this.sortingChanged()}onKeyDown(e){"Enter"===e.key&&(e.consume(!0),this.revealSourceForSelectedNode())}revealSourceForSelectedNode(){const e=this.dataGrid.selectedNode;if(!e||!e.url)return;const t=m.Workspace.WorkspaceImpl.instance().uiSourceCodeForURL(e.url);t&&o.Revealer.reveal(t)}sortingChanged(){const e=this.dataGrid.sortColumnId();if(!e)return;const t="url"===e?function(e,t){return t.url.localeCompare(e.url)}:function(e,t){return t.size-e.size};this.dataGrid.sortNodes(t,this.dataGrid.isSortOrderAscending())}toggleRecording(){!this.setting.get()?this.startRecording(!1):this.stopRecording()}startRecording(e){if(this.setting.set(!0),!e)return;const t=l.TargetManager.TargetManager.instance().primaryPageTarget();if(!t)return;const i=t.model(l.ResourceTreeModel.ResourceTreeModel);i&&i.reloadPage()}async stopRecording(){this.setting.set(!1)}}class Pi extends r.SortableDataGrid.SortableDataGridNode{url;size;isolateCount;constructor(e,t,i){super(),this.url=e,this.size=t,this.isolateCount=i}updateNode(e,t){this.size===e&&this.isolateCount===t||(this.size=e,this.isolateCount=t,this.refresh())}createCell(t){const i=this.createTD(t);switch(t){case"url":i.textContent=this.url;break;case"size":i.textContent=e.NumberUtilities.withThousandsSeparator(Math.round(this.size/1e3)),i.createChild("span","size-units").textContent=wi(gi.kb);break;case"isolates":i.textContent=`${this.isolateCount}`}return i}}class Ti{static instance(e={forceNew:null}){const{forceNew:t}=e;return bi&&!t||(bi=new Ti),bi}handleAction(e,t){return(async()=>{const e="live_heap_profile";await s.ViewManager.ViewManager.instance().showView(e);const i=s.ViewManager.ViewManager.instance().view(e);if(i){const e=await i.widget();this.innerHandleAction(e,t)}})(),!0}innerHandleAction(e,t){switch(t){case"live-heap-profile.toggle-recording":e.toggleRecording();break;case"live-heap-profile.start-with-reload":e.startRecording(!0);break;default:console.assert(!1,`Unknown action: ${t}`)}}}var xi=Object.freeze({__proto__:null,LiveHeapProfileView:Ci,GridNode:Pi,ActionDelegate:Ti});export{T as BottomUpProfileDataGrid,M as CPUProfileFlameChart,de as CPUProfileView,x as ChildrenProvider,_e as HeapProfileView,mi as HeapProfilerPanel,bt as HeapSnapshotDataGrids,ot as HeapSnapshotGridNodes,Nt as HeapSnapshotProxy,qt as HeapSnapshotView,De as HeapTimelineOverview,Se as IsolateSelector,xi as LiveHeapProfileView,b as ProfileDataGrid,j as ProfileHeader,Ie as ProfileLauncherView,W as ProfileSidebarTreeElement,Yt as ProfileTypeRegistry,ee as ProfileView,li as ProfilesPanel,$ as TopDownProfileDataGrid}; diff --git a/packages/debugger-frontend/dist/third-party/front_end/panels/rn_welcome/rn_welcome.js b/packages/debugger-frontend/dist/third-party/front_end/panels/rn_welcome/rn_welcome.js index 7f74fa4d8da6b6..1507012ddf5b09 100644 --- a/packages/debugger-frontend/dist/third-party/front_end/panels/rn_welcome/rn_welcome.js +++ b/packages/debugger-frontend/dist/third-party/front_end/panels/rn_welcome/rn_welcome.js @@ -1 +1 @@ -import*as e from"../../ui/legacy/legacy.js";import*as t from"../../core/i18n/i18n.js";import*as n from"../../ui/lit-html/lit-html.js";const i=new CSSStyleSheet;i.replaceSync('.rn-welcome-panel{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;padding:16px;text-align:center;background-color:var(--color-background-elevation-0)}.rn-welcome-header{display:flex;align-items:center;margin-bottom:16px}.rn-welcome-icon{width:30px;height:30px;border-radius:4px;margin-right:12px}.rn-welcome-title{font-size:20px;color:var(--color-text-primary)}.rn-welcome-tagline{margin-bottom:24px;font-size:1rem;line-height:1.3;color:var(--color-text-secondary)}.rn-welcome-links{display:flex;align-items:center}.rn-welcome-links > .devtools-link{position:relative;margin:0 16px;font-size:14px}.rn-welcome-links > .devtools-link:not(:last-child)::after{content:"";position:absolute;right:-16px;height:16px;border-right:1px solid var(--color-details-hairline)}\n/*# sourceURL=rnWelcome.css */\n');const o={debuggerBrandName:"React Native JS Inspector",welcomeMessage:"Welcome to debugging in React Native",docsLabel:"Debugging docs",whatsNewLabel:"What's new"},{render:r,html:l}=n,s=t.i18n.registerUIStrings("panels/rn_welcome/RNWelcome.ts",o),c=t.i18n.getLocalizedString.bind(void 0,s);let a;class d extends e.Widget.VBox{static instance(e={forceNew:null}){const{forceNew:t}=e;return a&&!t||(a=new d),a}constructor(){super(!0,!0)}wasShown(){super.wasShown(),this.registerCSSFiles([i]),this.render(),e.InspectorView.InspectorView.instance().showDrawer(!0)}render(){const e=new URL("../../Images/react_native/welcomeIcon.png",import.meta.url).toString();r(l`
${c(o.debuggerBrandName)}
${c(o.welcomeMessage)}
`,this.contentElement,{host:this})}}var g=Object.freeze({__proto__:null,RNWelcomeImpl:d});export{g as RNWelcome}; +import*as e from"../../ui/legacy/legacy.js";import*as r from"../../core/i18n/i18n.js";import*as t from"../../ui/lit-html/lit-html.js";const o=new CSSStyleSheet;o.replaceSync('.rn-welcome-panel{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;padding:16px;text-align:center;background-color:var(--color-background-elevation-0)}.rn-welcome-header{display:flex;align-items:center;margin-bottom:16px}.rn-welcome-icon{width:30px;height:30px;border-radius:4px;margin-right:12px}.rn-welcome-title{font-size:20px;color:var(--color-text-primary)}.rn-welcome-title-accessory{margin-left:12px;padding:4px 8px;border-radius:4px;background-color:var(--color-purple-bright);font-size:12px;color:var(--color-on-primary)}.rn-welcome-tagline{margin-bottom:24px;font-size:1rem;line-height:1.3;color:var(--color-text-secondary)}.rn-welcome-links{display:flex;align-items:center}.rn-welcome-links > .devtools-link{position:relative;margin:0 16px;font-size:14px}.rn-welcome-links > .devtools-link:not(:last-child)::after{content:"";position:absolute;right:-16px;height:16px;border-right:1px solid var(--color-details-hairline)}\n/*# sourceURL=rnWelcome.css */\n');const n={debuggerBrandName:"React Native JS Inspector",techPreviewLabel:"Technology Preview",welcomeMessage:"Welcome to debugging in React Native",docsLabel:"Debugging docs",whatsNewLabel:"What's new"},{render:i,html:l}=t,s=r.i18n.registerUIStrings("panels/rn_welcome/RNWelcome.ts",n),c=r.i18n.getLocalizedString.bind(void 0,s);let a;class d extends e.Widget.VBox{static instance(e={forceNew:null}){const{forceNew:r}=e;return a&&!r||(a=new d),a}constructor(){super(!0,!0)}wasShown(){super.wasShown(),this.registerCSSFiles([o]),this.render(),e.InspectorView.InspectorView.instance().showDrawer(!0)}render(){const e=new URL("../../Images/react_native/welcomeIcon.png",import.meta.url).toString();i(l`
${c(n.debuggerBrandName)}
${c(n.techPreviewLabel)}
${c(n.welcomeMessage)}
`,this.contentElement,{host:this})}}var m=Object.freeze({__proto__:null,RNWelcomeImpl:d});export{m as RNWelcome}; diff --git a/packages/debugger-frontend/dist/third-party/front_end/rn_inspector.html b/packages/debugger-frontend/dist/third-party/front_end/rn_inspector.html index d06c98426a7d1b..8240cf910ef714 100644 --- a/packages/debugger-frontend/dist/third-party/front_end/rn_inspector.html +++ b/packages/debugger-frontend/dist/third-party/front_end/rn_inspector.html @@ -6,7 +6,7 @@ -DevTools +DevTools (React Native) + diff --git a/packages/debugger-frontend/dist/third-party/front_end/worker_app.html b/packages/debugger-frontend/dist/third-party/front_end/worker_app.html index c76371f81a3f4a..060998a61b4778 100644 --- a/packages/debugger-frontend/dist/third-party/front_end/worker_app.html +++ b/packages/debugger-frontend/dist/third-party/front_end/worker_app.html @@ -6,7 +6,7 @@ -DevTools +DevTools (React Native) + diff --git a/packages/debugger-frontend/package.json b/packages/debugger-frontend/package.json index 55ff9250d0b2eb..652794653053b8 100644 --- a/packages/debugger-frontend/package.json +++ b/packages/debugger-frontend/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/debugger-frontend", - "version": "0.73.0", + "version": "0.73.2", "description": "Debugger frontend for React Native based on Chrome DevTools", "keywords": [ "react-native", diff --git a/packages/dev-middleware/package.json b/packages/dev-middleware/package.json index cf44092dc1cc32..2567884ee6a67f 100644 --- a/packages/dev-middleware/package.json +++ b/packages/dev-middleware/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/dev-middleware", - "version": "0.73.1", + "version": "0.73.4", "description": "Dev server middleware for React Native", "keywords": [ "react-native", @@ -23,12 +23,13 @@ ], "dependencies": { "@isaacs/ttlcache": "^1.4.1", - "@react-native/debugger-frontend": "^0.73.0", + "@react-native/debugger-frontend": "^0.73.2", "chrome-launcher": "^0.15.2", "chromium-edge-launcher": "^1.0.0", "connect": "^3.6.5", "debug": "^2.2.0", "node-fetch": "^2.2.0", + "open": "^7.0.3", "serve-static": "^1.13.1", "temp-dir": "^2.0.0" }, diff --git a/packages/dev-middleware/src/createDevMiddleware.js b/packages/dev-middleware/src/createDevMiddleware.js index 2e5cf12b1c28a1..7feeb8555e946b 100644 --- a/packages/dev-middleware/src/createDevMiddleware.js +++ b/packages/dev-middleware/src/createDevMiddleware.js @@ -20,6 +20,7 @@ import connect from 'connect'; import path from 'path'; // $FlowFixMe[untyped-import] TODO: type serve-static import serveStaticMiddleware from 'serve-static'; +import deprecated_openFlipperMiddleware from './middleware/deprecated_openFlipperMiddleware'; import openDebuggerMiddleware from './middleware/openDebuggerMiddleware'; import InspectorProxy from './inspector-proxy/InspectorProxy'; import DefaultBrowserLauncher from './utils/DefaultBrowserLauncher'; @@ -86,14 +87,18 @@ export default function createDevMiddleware({ const middleware = connect() .use( '/open-debugger', - openDebuggerMiddleware({ - serverBaseUrl, - inspectorProxy, - browserLauncher: unstable_browserLauncher, - eventReporter: unstable_eventReporter, - experiments, - logger, - }), + experiments.enableNewDebugger + ? openDebuggerMiddleware({ + serverBaseUrl, + inspectorProxy, + browserLauncher: unstable_browserLauncher, + eventReporter: unstable_eventReporter, + experiments, + logger, + }) + : deprecated_openFlipperMiddleware({ + logger, + }), ) .use( '/debugger-frontend', @@ -111,7 +116,7 @@ export default function createDevMiddleware({ function getExperiments(config: ExperimentsConfig): Experiments { return { - enableCustomDebuggerFrontend: config.enableCustomDebuggerFrontend ?? false, + enableNewDebugger: config.enableNewDebugger ?? false, enableOpenDebuggerRedirect: config.enableOpenDebuggerRedirect ?? false, }; } diff --git a/packages/dev-middleware/src/inspector-proxy/InspectorProxy.js b/packages/dev-middleware/src/inspector-proxy/InspectorProxy.js index 0cfb55a05ff1ec..2fd08a01a7e883 100644 --- a/packages/dev-middleware/src/inspector-proxy/InspectorProxy.js +++ b/packages/dev-middleware/src/inspector-proxy/InspectorProxy.js @@ -94,12 +94,13 @@ export default class InspectorProxy implements InspectorProxyQueries { response: ServerResponse, next: (?Error) => mixed, ) { + const pathname = url.parse(request.url).pathname; if ( - request.url === PAGES_LIST_JSON_URL || - request.url === PAGES_LIST_JSON_URL_2 + pathname === PAGES_LIST_JSON_URL || + pathname === PAGES_LIST_JSON_URL_2 ) { this._sendJsonResponse(response, this.getPageDescriptions()); - } else if (request.url === PAGES_LIST_JSON_VERSION_URL) { + } else if (pathname === PAGES_LIST_JSON_VERSION_URL) { this._sendJsonResponse(response, { Browser: 'Mobile JavaScript', 'Protocol-Version': '1.1', diff --git a/packages/dev-middleware/src/middleware/deprecated_openFlipperMiddleware.js b/packages/dev-middleware/src/middleware/deprecated_openFlipperMiddleware.js new file mode 100644 index 00000000000000..35a222ce7f0207 --- /dev/null +++ b/packages/dev-middleware/src/middleware/deprecated_openFlipperMiddleware.js @@ -0,0 +1,60 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @flow strict-local + * @format + * @oncall react_native + */ + +import type {NextHandleFunction} from 'connect'; +import type {IncomingMessage, ServerResponse} from 'http'; +import type {Logger} from '../types/Logger'; + +import open from 'open'; + +const FLIPPER_SELF_CONNECT_URL = + 'flipper://null/Hermesdebuggerrn?device=React%20Native'; + +type Options = $ReadOnly<{ + logger?: Logger, +}>; + +/** + * Open the legacy Flipper debugger (Hermes). + * + * @deprecated This replicates the pre-0.73 workflow of opening Flipper via the + * `flipper://` URL scheme, failing if Flipper is not installed locally. This + * flow will be removed in a future version. + */ +export default function deprecated_openFlipperMiddleware({ + logger, +}: Options): NextHandleFunction { + return async ( + req: IncomingMessage, + res: ServerResponse, + next: (err?: Error) => void, + ) => { + if (req.method === 'POST') { + logger?.info('Launching JS debugger...'); + + try { + logger?.warn( + 'Attempting to debug JS in Flipper (deprecated). This requires ' + + 'Flipper to be installed on your system to handle the ' + + "'flipper://' URL scheme.", + ); + await open(FLIPPER_SELF_CONNECT_URL); + res.end(); + } catch (e) { + logger?.error( + 'Error launching Flipper: ' + e.message ?? 'Unknown error', + ); + res.writeHead(500); + res.end(); + } + } + }; +} diff --git a/packages/dev-middleware/src/middleware/openDebuggerMiddleware.js b/packages/dev-middleware/src/middleware/openDebuggerMiddleware.js index 2e3e1f5594bfb5..14ee05051a6099 100644 --- a/packages/dev-middleware/src/middleware/openDebuggerMiddleware.js +++ b/packages/dev-middleware/src/middleware/openDebuggerMiddleware.js @@ -72,7 +72,7 @@ export default function openDebuggerMiddleware({ if (typeof appId === 'string') { logger?.info( (launchType === 'launch' ? 'Launching' : 'Redirecting to') + - ' JS debugger...', + ' JS debugger (experimental)...', ); target = targets.find(_target => _target.description === appId); } else { @@ -108,7 +108,6 @@ export default function openDebuggerMiddleware({ getDevToolsFrontendUrl( target.webSocketDebuggerUrl, serverBaseUrl, - experiments, ), ), ); @@ -120,7 +119,6 @@ export default function openDebuggerMiddleware({ target.webSocketDebuggerUrl, // Use a relative URL. '', - experiments, ), }); res.end(); diff --git a/packages/dev-middleware/src/types/Experiments.js b/packages/dev-middleware/src/types/Experiments.js index 8e0db090f44ffc..9f15d94c8ef3d7 100644 --- a/packages/dev-middleware/src/types/Experiments.js +++ b/packages/dev-middleware/src/types/Experiments.js @@ -10,10 +10,11 @@ export type Experiments = $ReadOnly<{ /** - * Enables the use of the custom debugger frontend (@react-native/debugger-frontend) - * in the /open-debugger endpoint. + * Enables the new JS debugger launch flow and custom debugger frontend + * (@react-native/debugger-frontend). When disabled, /open-debugger will + * trigger the legacy Flipper connection flow. */ - enableCustomDebuggerFrontend: boolean, + enableNewDebugger: boolean, /** * Enables the handling of GET requests in the /open-debugger endpoint, diff --git a/packages/dev-middleware/src/utils/getDevToolsFrontendUrl.js b/packages/dev-middleware/src/utils/getDevToolsFrontendUrl.js index 4d95f18bf48457..0178c4db2d3f73 100644 --- a/packages/dev-middleware/src/utils/getDevToolsFrontendUrl.js +++ b/packages/dev-middleware/src/utils/getDevToolsFrontendUrl.js @@ -9,40 +9,18 @@ * @oncall react_native */ -import type {Experiments} from '../types/Experiments'; - -/** - * The Chrome DevTools frontend revision to use. This should be set to the - * latest version known to be compatible with Hermes. - * - * Revision should be the full identifier from: - * https://chromium.googlesource.com/chromium/src.git - */ -const DEVTOOLS_FRONTEND_REV = 'd9568d04d7dd79269c5a655d7ada69650c5a8336'; // Chrome 100.0.4896.75 - /** - * Construct the URL to Chrome DevTools connected to a given debugger target. + * Get the DevTools frontend URL to debug a given React Native CDP target. */ export default function getDevToolsFrontendUrl( webSocketDebuggerUrl: string, devServerUrl: string, - experiments: Experiments, ): string { const scheme = new URL(webSocketDebuggerUrl).protocol.slice(0, -1); - const webSocketUrlWithoutProtocol = webSocketDebuggerUrl.replace( - /^wss?:\/\//, - '', + const appUrl = `${devServerUrl}/debugger-frontend/rn_inspector.html`; + const webSocketUrlWithoutProtocol = encodeURIComponent( + webSocketDebuggerUrl.replace(/^wss?:\/\//, ''), ); - if (experiments.enableCustomDebuggerFrontend) { - const urlBase = `${devServerUrl}/debugger-frontend/rn_inspector.html`; - return `${urlBase}?${scheme}=${encodeURIComponent( - webSocketUrlWithoutProtocol, - )}&sources.hide_add_folder=true`; - } - - const urlBase = `https://chrome-devtools-frontend.appspot.com/serve_rev/@${DEVTOOLS_FRONTEND_REV}/devtools_app.html`; - return `${urlBase}?panel=console&${scheme}=${encodeURIComponent( - webSocketUrlWithoutProtocol, - )}`; + return `${appUrl}?${scheme}=${webSocketUrlWithoutProtocol}&sources.hide_add_folder=true`; } diff --git a/packages/eslint-config-react-native/package.json b/packages/eslint-config-react-native/package.json index 343b5f2e27bc60..1eb71f2d4004b0 100644 --- a/packages/eslint-config-react-native/package.json +++ b/packages/eslint-config-react-native/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/eslint-config", - "version": "0.73.0", + "version": "0.73.1", "description": "ESLint config for React Native", "license": "MIT", "repository": { @@ -22,7 +22,7 @@ "dependencies": { "@babel/core": "^7.20.0", "@babel/eslint-parser": "^7.20.0", - "@react-native/eslint-plugin": "^0.73.0", + "@react-native/eslint-plugin": "^0.73.1", "@typescript-eslint/eslint-plugin": "^5.57.1", "@typescript-eslint/parser": "^5.57.1", "eslint-config-prettier": "^8.5.0", diff --git a/packages/eslint-plugin-react-native/package.json b/packages/eslint-plugin-react-native/package.json index 3b098f81572810..22d99e18b58613 100644 --- a/packages/eslint-plugin-react-native/package.json +++ b/packages/eslint-plugin-react-native/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/eslint-plugin", - "version": "0.73.0", + "version": "0.73.1", "description": "ESLint rules for @react-native/eslint-config", "license": "MIT", "repository": { @@ -9,7 +9,12 @@ "directory": "packages/eslint-plugin-react-native" }, "homepage": "https://github.com/facebook/react-native/tree/HEAD/packages/eslint-plugin-react-native#readme", - "keywords": ["eslint", "rules", "eslint-config", "react-native"], + "keywords": [ + "eslint", + "rules", + "eslint-config", + "react-native" + ], "bugs": "https://github.com/facebook/react-native/issues", "engines": { "node": ">=18" diff --git a/packages/eslint-plugin-specs/package.json b/packages/eslint-plugin-specs/package.json index 3c5c534e2359ee..b7125bb71688ae 100644 --- a/packages/eslint-plugin-specs/package.json +++ b/packages/eslint-plugin-specs/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/eslint-plugin-specs", - "version": "0.73.0", + "version": "0.73.1", "description": "ESLint rules to validate NativeModule and Component Specs", "license": "MIT", "repository": { @@ -9,7 +9,14 @@ "directory": "packages/eslint-plugin-specs" }, "homepage": "https://github.com/facebook/react-native/tree/HEAD/packages/eslint-plugin-specs#readme", - "keywords": ["eslint", "rules", "react-native", "native-modules", "components", "specs"], + "keywords": [ + "eslint", + "rules", + "react-native", + "native-modules", + "components", + "specs" + ], "bugs": "https://github.com/facebook/react-native/issues", "engines": { "node": ">=18" diff --git a/packages/metro-config/package.json b/packages/metro-config/package.json index 39e03521aa32c5..7876a404c06d94 100644 --- a/packages/metro-config/package.json +++ b/packages/metro-config/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/metro-config", - "version": "0.73.0", + "version": "0.73.2", "description": "Metro configuration for React Native.", "license": "MIT", "repository": { @@ -9,16 +9,20 @@ "directory": "packages/metro-config" }, "homepage": "https://github.com/facebook/react-native/tree/HEAD/packages/metro-config#readme", - "keywords": ["metro", "config", "react-native"], + "keywords": [ + "metro", + "config", + "react-native" + ], "bugs": "https://github.com/facebook/react-native/issues", "engines": { "node": ">=18" }, "exports": "./index.js", "dependencies": { - "@react-native/metro-babel-transformer": "^0.73.11", - "@react-native/js-polyfills": "^0.73.0", - "metro-config": "0.79.1", - "metro-runtime": "0.79.1" + "@react-native/metro-babel-transformer": "^0.73.12", + "@react-native/js-polyfills": "^0.73.1", + "metro-config": "^0.80.0", + "metro-runtime": "^0.80.0" } } diff --git a/packages/normalize-color/package.json b/packages/normalize-color/package.json index ab3fa6fd89f26a..ea7487bab9c312 100644 --- a/packages/normalize-color/package.json +++ b/packages/normalize-color/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/normalize-colors", - "version": "0.73.0", + "version": "0.73.2", "description": "Color normalization for React Native.", "license": "MIT", "repository": { @@ -9,9 +9,11 @@ "directory": "packages/normalize-color" }, "homepage": "https://github.com/facebook/react-native/tree/HEAD/packages/normalize-color#readme", - "keywords": ["color", "normalization", "normalize-colors", "react-native"], - "bugs": "https://github.com/facebook/react-native/issues", - "engines": { - "node": ">=18" - } + "keywords": [ + "color", + "normalization", + "normalize-colors", + "react-native" + ], + "bugs": "https://github.com/facebook/react-native/issues" } diff --git a/packages/polyfills/package.json b/packages/polyfills/package.json index 8cefc9909f6b1d..40a6b359cf2b82 100644 --- a/packages/polyfills/package.json +++ b/packages/polyfills/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/js-polyfills", - "version": "0.73.0", + "version": "0.73.1", "description": "Polyfills for React Native.", "license": "MIT", "repository": { @@ -9,7 +9,13 @@ "directory": "packages/polyfills" }, "homepage": "https://github.com/facebook/react-native/tree/HEAD/packages/polyfills#readme", - "keywords": ["polyfill", "polyfills", "js", "js-polyfills", "react-native"], + "keywords": [ + "polyfill", + "polyfills", + "js", + "js-polyfills", + "react-native" + ], "bugs": "https://github.com/facebook/react-native/issues", "engines": { "node": ">=18" diff --git a/packages/react-native-babel-preset/package.json b/packages/react-native-babel-preset/package.json index 2e6dbc5985cf58..2f7884498b8508 100644 --- a/packages/react-native-babel-preset/package.json +++ b/packages/react-native-babel-preset/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/babel-preset", - "version": "0.73.16", + "version": "0.73.18", "description": "Babel preset for React Native applications", "main": "src/index.js", "repository": { diff --git a/packages/react-native-babel-transformer/package.json b/packages/react-native-babel-transformer/package.json index 0862b76d176fb1..df87e3e4c8ff9e 100644 --- a/packages/react-native-babel-transformer/package.json +++ b/packages/react-native-babel-transformer/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/metro-babel-transformer", - "version": "0.73.11", + "version": "0.73.12", "description": "Babel transformer for React Native applications.", "main": "src/index.js", "repository": { diff --git a/packages/react-native-codegen/package.json b/packages/react-native-codegen/package.json index db17a0354f0dcd..5e1220954c98e0 100644 --- a/packages/react-native-codegen/package.json +++ b/packages/react-native-codegen/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/codegen", - "version": "0.73.0", + "version": "0.73.1", "description": "Code generation tools for React Native", "license": "MIT", "repository": { diff --git a/packages/react-native-gradle-plugin/build.gradle.kts b/packages/react-native-gradle-plugin/build.gradle.kts index 8934f0f30ba3e4..c4a31beb010e19 100644 --- a/packages/react-native-gradle-plugin/build.gradle.kts +++ b/packages/react-native-gradle-plugin/build.gradle.kts @@ -66,6 +66,7 @@ tasks.withType().configureEach { apiVersion = "1.5" // See comment above on JDK 11 support jvmTarget = "11" + allWarningsAsErrors = true } } diff --git a/packages/react-native-gradle-plugin/package.json b/packages/react-native-gradle-plugin/package.json index a1b8f3a2ce7559..dcecbd9107c186 100644 --- a/packages/react-native-gradle-plugin/package.json +++ b/packages/react-native-gradle-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/gradle-plugin", - "version": "0.73.0", + "version": "0.73.3", "description": "Gradle Plugin for React Native", "license": "MIT", "repository": { @@ -9,7 +9,11 @@ "directory": "packages/react-native-gradle-plugin" }, "homepage": "https://github.com/facebook/react-native/tree/HEAD/packages/react-native-gradle-plugin#readme", - "keywords": ["gradle", "plugin", "react-native"], + "keywords": [ + "gradle", + "plugin", + "react-native" + ], "bugs": "https://github.com/facebook/react-native/issues", "engines": { "node": ">=18" diff --git a/packages/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/ReactPlugin.kt b/packages/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/ReactPlugin.kt index 6ab11a38c079aa..718dc4e4970cbe 100644 --- a/packages/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/ReactPlugin.kt +++ b/packages/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/ReactPlugin.kt @@ -12,8 +12,10 @@ import com.android.build.gradle.internal.tasks.factory.dependsOn import com.facebook.react.internal.PrivateReactExtension import com.facebook.react.tasks.GenerateCodegenArtifactsTask import com.facebook.react.tasks.GenerateCodegenSchemaTask -import com.facebook.react.utils.AgpConfiguratorUtils.configureBuildConfigFields +import com.facebook.react.utils.AgpConfiguratorUtils.configureBuildConfigFieldsForApp +import com.facebook.react.utils.AgpConfiguratorUtils.configureBuildConfigFieldsForLibraries import com.facebook.react.utils.AgpConfiguratorUtils.configureDevPorts +import com.facebook.react.utils.AgpConfiguratorUtils.configureNamespaceForLibraries import com.facebook.react.utils.BackwardCompatUtils.configureBackwardCompatibilityReactMap import com.facebook.react.utils.DependencyUtils.configureDependencies import com.facebook.react.utils.DependencyUtils.configureRepositories @@ -64,9 +66,10 @@ class ReactPlugin : Plugin { } configureReactNativeNdk(project, extension) - configureBuildConfigFields(project, extension) + configureBuildConfigFieldsForApp(project, extension) configureDevPorts(project) configureBackwardCompatibilityReactMap(project) + configureJavaToolChains(project) project.extensions.getByType(AndroidComponentsExtension::class.java).apply { onVariants(selector().all()) { variant -> @@ -77,12 +80,11 @@ class ReactPlugin : Plugin { } // Library Only Configuration + configureBuildConfigFieldsForLibraries(project) + configureNamespaceForLibraries(project) project.pluginManager.withPlugin("com.android.library") { configureCodegen(project, extension, rootExtension, isLibrary = true) } - - // Library and App Configurations - configureJavaToolChains(project) } private fun checkJvmVersion(project: Project) { diff --git a/packages/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/TaskConfiguration.kt b/packages/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/TaskConfiguration.kt index ed5551d0987f3f..e839e5c37ba3b7 100644 --- a/packages/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/TaskConfiguration.kt +++ b/packages/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/TaskConfiguration.kt @@ -23,6 +23,7 @@ internal fun Project.configureReactTasks(variant: Variant, config: ReactExtensio val targetName = variant.name.capitalizeCompat() val targetPath = variant.name + val buildDir = this.layout.buildDirectory.get().asFile // Resources: generated/assets/react//index.android.bundle val resourcesDir = File(buildDir, "generated/res/react/$targetPath") // Bundle: generated/assets/react//index.android.bundle diff --git a/packages/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/utils/AgpConfiguratorUtils.kt b/packages/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/utils/AgpConfiguratorUtils.kt index 0312095b0fe7dd..90593bdbf7419c 100644 --- a/packages/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/utils/AgpConfiguratorUtils.kt +++ b/packages/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/utils/AgpConfiguratorUtils.kt @@ -8,17 +8,22 @@ package com.facebook.react.utils import com.android.build.api.variant.AndroidComponentsExtension +import com.android.build.gradle.LibraryExtension import com.facebook.react.ReactExtension import com.facebook.react.utils.ProjectUtils.isHermesEnabled import com.facebook.react.utils.ProjectUtils.isNewArchEnabled +import java.io.File +import javax.xml.parsers.DocumentBuilder +import javax.xml.parsers.DocumentBuilderFactory import org.gradle.api.Action import org.gradle.api.Project import org.gradle.api.plugins.AppliedPlugin +import org.w3c.dom.Element @Suppress("UnstableApiUsage") internal object AgpConfiguratorUtils { - fun configureBuildConfigFields(project: Project, extension: ReactExtension) { + fun configureBuildConfigFieldsForApp(project: Project, extension: ReactExtension) { val action = Action { project.extensions.getByType(AndroidComponentsExtension::class.java).finalizeDsl { ext -> @@ -35,6 +40,16 @@ internal object AgpConfiguratorUtils { project.pluginManager.withPlugin("com.android.library", action) } + fun configureBuildConfigFieldsForLibraries(appProject: Project) { + appProject.rootProject.allprojects { subproject -> + subproject.pluginManager.withPlugin("com.android.library") { + subproject.extensions.getByType(AndroidComponentsExtension::class.java).finalizeDsl { ext -> + ext.buildFeatures.buildConfig = true + } + } + } + } + fun configureDevPorts(project: Project) { val devServerPort = project.properties["reactNativeDevServerPort"]?.toString() ?: DEFAULT_DEV_SERVER_PORT @@ -53,6 +68,43 @@ internal object AgpConfiguratorUtils { project.pluginManager.withPlugin("com.android.application", action) project.pluginManager.withPlugin("com.android.library", action) } + + fun configureNamespaceForLibraries(appProject: Project) { + appProject.rootProject.allprojects { subproject -> + subproject.pluginManager.withPlugin("com.android.library") { + subproject.extensions.getByType(AndroidComponentsExtension::class.java).finalizeDsl { ext -> + if (ext.namespace == null) { + val android = subproject.extensions.getByType(LibraryExtension::class.java) + val manifestFile = android.sourceSets.getByName("main").manifest.srcFile + + manifestFile + .takeIf { it.exists() } + ?.let { file -> + getPackageNameFromManifest(file)?.let { packageName -> + ext.namespace = packageName + } + } + } + } + } + } + } } const val DEFAULT_DEV_SERVER_PORT = "8081" + +fun getPackageNameFromManifest(manifest: File): String? { + val factory: DocumentBuilderFactory = DocumentBuilderFactory.newInstance() + val builder: DocumentBuilder = factory.newDocumentBuilder() + + try { + val xmlDocument = builder.parse(manifest) + + val manifestElement = xmlDocument.getElementsByTagName("manifest").item(0) as? Element + val packageName = manifestElement?.getAttribute("package") + + return if (packageName.isNullOrEmpty()) null else packageName + } catch (e: Exception) { + return null + } +} diff --git a/packages/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/utils/AgpConfiguratorUtilsTest.kt b/packages/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/utils/AgpConfiguratorUtilsTest.kt new file mode 100644 index 00000000000000..1c9c07eb0b6fb7 --- /dev/null +++ b/packages/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/utils/AgpConfiguratorUtilsTest.kt @@ -0,0 +1,65 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +package com.facebook.react.utils + +import java.io.File +import org.junit.Assert.* +import org.junit.Rule +import org.junit.Test +import org.junit.rules.TemporaryFolder + +class AgpConfiguratorUtilsTest { + + @get:Rule val tempFolder = TemporaryFolder() + + @Test + fun getPackageNameFromManifest_withEmptyFile_returnsNull() { + val mainFolder = tempFolder.newFolder("awesome-module/src/main/") + val manifest = File(mainFolder, "AndroidManifest.xml").apply { writeText("") } + + val actual = getPackageNameFromManifest(manifest) + assertNull(actual) + } + + @Test + fun getPackageNameFromManifest_withMissingPackage_returnsNull() { + val mainFolder = tempFolder.newFolder("awesome-module/src/main/") + val manifest = + File(mainFolder, "AndroidManifest.xml").apply { + writeText( + // language=xml + """ + + + """ + .trimIndent()) + } + + val actual = getPackageNameFromManifest(manifest) + assertNull(actual) + } + + @Test + fun getPackageNameFromManifest_withPackage_returnsPackage() { + val mainFolder = tempFolder.newFolder("awesome-module/src/main/") + val manifest = + File(mainFolder, "AndroidManifest.xml").apply { + writeText( + // language=xml + """ + + + """ + .trimIndent()) + } + + val actual = getPackageNameFromManifest(manifest) + assertNotNull(actual) + assertEquals("com.facebook.react", actual) + } +} diff --git a/packages/react-native/Libraries/Animated/nodes/AnimatedStyle.js b/packages/react-native/Libraries/Animated/nodes/AnimatedStyle.js index 8fdc6532aeb2e3..8766d5e913b796 100644 --- a/packages/react-native/Libraries/Animated/nodes/AnimatedStyle.js +++ b/packages/react-native/Libraries/Animated/nodes/AnimatedStyle.js @@ -30,7 +30,7 @@ function createAnimatedStyle( const animatedStyles: any = {}; for (const key in style) { const value = style[key]; - if (key === 'transform') { + if (value != null && key === 'transform') { animatedStyles[key] = ReactNativeFeatureFlags.shouldUseAnimatedObjectForTransform() ? new AnimatedObject(value) diff --git a/packages/react-native/Libraries/AppDelegate/RCTAppDelegate.mm b/packages/react-native/Libraries/AppDelegate/RCTAppDelegate.mm index 5552b1fc4baf80..00851d6c9e2fe9 100644 --- a/packages/react-native/Libraries/AppDelegate/RCTAppDelegate.mm +++ b/packages/react-native/Libraries/AppDelegate/RCTAppDelegate.mm @@ -94,6 +94,13 @@ - (void)applicationDidFinishLaunching:(NSNotification *)notification if (enableBridgeless) { #if RCT_NEW_ARCH_ENABLED + // Enable native view config interop only if both bridgeless mode and Fabric is enabled. + RCTSetUseNativeViewConfigsInBridgelessMode([self fabricEnabled]); + + // Enable TurboModule interop by default in Bridgeless mode + RCTEnableTurboModuleInterop(YES); + RCTEnableTurboModuleInteropBridgeProxy(YES); + [self createReactHost]; [self unstable_registerLegacyComponents]; [RCTComponentViewFactory currentComponentViewFactory].thirdPartyFabricComponentsProvider = self; @@ -220,7 +227,7 @@ - (void)windowScene:(UIWindowScene *)windowScene interfaceOrientation:(UIInterfaceOrientation)previousInterfaceOrientation traitCollection:(UITraitCollection *)previousTraitCollection API_AVAILABLE(ios(13.0)) { - [[NSNotificationCenter defaultCenter] postNotificationName:RCTRootViewFrameDidChangeNotification object:self]; + [[NSNotificationCenter defaultCenter] postNotificationName:RCTWindowFrameDidChangeNotification object:self]; } #endif // [macOS] diff --git a/packages/react-native/Libraries/AppDelegate/React-RCTAppDelegate.podspec b/packages/react-native/Libraries/AppDelegate/React-RCTAppDelegate.podspec index 1da904f8946f17..04796aacd5b687 100644 --- a/packages/react-native/Libraries/AppDelegate/React-RCTAppDelegate.podspec +++ b/packages/react-native/Libraries/AppDelegate/React-RCTAppDelegate.podspec @@ -117,15 +117,19 @@ Pod::Spec.new do |s| s.dependency "React-debug" s.dependency "React-rendererdebug" + rel_path_from_pods_root_to_app = Pathname.new(ENV['APP_PATH']).relative_path_from(Pod::Config.instance.installation_root) + rel_path_from_pods_to_app = Pathname.new(ENV['APP_PATH']).relative_path_from(File.join(Pod::Config.instance.installation_root, 'Pods')) + + s.script_phases = { :name => "Generate Legacy Components Interop", :script => " WITH_ENVIRONMENT=\"$REACT_NATIVE_PATH/scripts/xcode/with-environment.sh\" source $WITH_ENVIRONMENT -${NODE_BINARY} ${REACT_NATIVE_PATH}/scripts/codegen/generate-legacy-interop-components.js -p #{ENV['APP_PATH']} -o ${REACT_NATIVE_PATH}/Libraries/AppDelegate +${NODE_BINARY} ${REACT_NATIVE_PATH}/scripts/codegen/generate-legacy-interop-components.js -p #{rel_path_from_pods_to_app} -o ${REACT_NATIVE_PATH}/Libraries/AppDelegate ", :execution_position => :before_compile, - :input_files => ["#{ENV['APP_PATH']}/react-native.config.js"], + :input_files => ["#{rel_path_from_pods_root_to_app}/react-native.config.js"], :output_files => ["${REACT_NATIVE_PATH}/Libraries/AppDelegate/RCTLegacyInteropComponents.mm"], } end diff --git a/packages/react-native/Libraries/Core/ReactNativeVersion.js b/packages/react-native/Libraries/Core/ReactNativeVersion.js index 1d82274f85cb23..f091db6bdb79a6 100644 --- a/packages/react-native/Libraries/Core/ReactNativeVersion.js +++ b/packages/react-native/Libraries/Core/ReactNativeVersion.js @@ -10,8 +10,8 @@ */ exports.version = { - major: 1000, - minor: 0, + major: 0, + minor: 73, patch: 0, - prerelease: null, + prerelease: 'rc.4', }; diff --git a/packages/react-native/Libraries/Core/ReactNativeVersionCheck.js b/packages/react-native/Libraries/Core/ReactNativeVersionCheck.js index 8b41988696d6b5..a9e1bc4b1f663f 100644 --- a/packages/react-native/Libraries/Core/ReactNativeVersionCheck.js +++ b/packages/react-native/Libraries/Core/ReactNativeVersionCheck.js @@ -40,7 +40,9 @@ exports.checkVersions = function checkVersions(): void { }; function _formatVersion( - version: (typeof Platform)['constants']['reactNativeVersion'], + version: + | (typeof Platform)['constants']['reactNativeVersion'] + | {major: number, minor: number, patch: number, prerelease: ?string}, ): string { return ( `${version.major}.${version.minor}.${version.patch}` + diff --git a/packages/react-native/Libraries/LogBox/Data/LogBoxData.js b/packages/react-native/Libraries/LogBox/Data/LogBoxData.js index d3e06b0451303c..abc2401ac42159 100644 --- a/packages/react-native/Libraries/LogBox/Data/LogBoxData.js +++ b/packages/react-native/Libraries/LogBox/Data/LogBoxData.js @@ -30,6 +30,7 @@ export type LogData = $ReadOnly<{| message: Message, category: Category, componentStack: ComponentStack, + stack?: string, |}>; export type Observer = ( @@ -198,7 +199,7 @@ export function addLog(log: LogData): void { // otherwise spammy logs would pause rendering. setImmediate(() => { try { - const stack = parseErrorStack(errorForStackTrace?.stack); + const stack = parseErrorStack(log.stack ?? errorForStackTrace?.stack); appendNewLog( new LogBoxLog({ diff --git a/packages/react-native/Libraries/NativeComponent/NativeComponentRegistry.js b/packages/react-native/Libraries/NativeComponent/NativeComponentRegistry.js index ace5eb38e605cd..46dab04b7723a0 100644 --- a/packages/react-native/Libraries/NativeComponent/NativeComponentRegistry.js +++ b/packages/react-native/Libraries/NativeComponent/NativeComponentRegistry.js @@ -55,14 +55,20 @@ export function get( ): HostComponent { ReactNativeViewConfigRegistry.register(name, () => { const {native, strict, verify} = getRuntimeConfig?.(name) ?? { - native: true, + native: !global.RN$Bridgeless, strict: false, verify: false, }; - const viewConfig = native - ? getNativeComponentAttributes(name) - : createViewConfig(viewConfigProvider()); + let viewConfig; + if (native) { + viewConfig = getNativeComponentAttributes(name); + } else { + viewConfig = createViewConfig(viewConfigProvider()); + if (viewConfig == null) { + viewConfig = getNativeComponentAttributes(name); + } + } if (verify) { const nativeViewConfig = native diff --git a/packages/react-native/Libraries/ReactNative/BridgelessUIManager.js b/packages/react-native/Libraries/ReactNative/BridgelessUIManager.js index 8b9a746815e5b4..d7f0efd654e162 100644 --- a/packages/react-native/Libraries/ReactNative/BridgelessUIManager.js +++ b/packages/react-native/Libraries/ReactNative/BridgelessUIManager.js @@ -13,7 +13,6 @@ import type {RootTag} from '../Types/RootTagTypes'; import {unstable_hasComponent} from '../NativeComponent/NativeComponentRegistryUnstable'; -import ReactNativeFeatureFlags from './ReactNativeFeatureFlags'; let cachedConstants = null; @@ -22,6 +21,10 @@ const errorMessageForMethod = (methodName: string): string => methodName + "' is not available in the new React Native architecture."; +function nativeViewConfigsInBridgelessModeEnabled(): boolean { + return global.RN$LegacyInterop_UIManager_getConstants !== undefined; +} + function getCachedConstants(): Object { if (!cachedConstants) { cachedConstants = global.RN$LegacyInterop_UIManager_getConstants(); @@ -31,7 +34,7 @@ function getCachedConstants(): Object { const UIManagerJS: {[string]: $FlowFixMe} = { getViewManagerConfig: (viewManagerName: string): mixed => { - if (ReactNativeFeatureFlags.enableNativeViewConfigsInBridgelessMode()) { + if (nativeViewConfigsInBridgelessModeEnabled()) { return getCachedConstants()[viewManagerName]; } else { console.error( @@ -46,7 +49,7 @@ const UIManagerJS: {[string]: $FlowFixMe} = { return unstable_hasComponent(viewManagerName); }, getConstants: (): Object => { - if (ReactNativeFeatureFlags.enableNativeViewConfigsInBridgelessMode()) { + if (nativeViewConfigsInBridgelessModeEnabled()) { return getCachedConstants(); } else { console.error(errorMessageForMethod('getConstants')); @@ -179,7 +182,7 @@ const UIManagerJS: {[string]: $FlowFixMe} = { console.error(errorMessageForMethod('dismissPopupMenu')), }; -if (ReactNativeFeatureFlags.enableNativeViewConfigsInBridgelessMode()) { +if (nativeViewConfigsInBridgelessModeEnabled()) { Object.keys(getCachedConstants()).forEach(viewConfigName => { UIManagerJS[viewConfigName] = getCachedConstants()[viewConfigName]; }); diff --git a/packages/react-native/Libraries/ReactNative/ReactNativeFeatureFlags.js b/packages/react-native/Libraries/ReactNative/ReactNativeFeatureFlags.js index 01a56fb5098b58..95d15e6e2f968c 100644 --- a/packages/react-native/Libraries/ReactNative/ReactNativeFeatureFlags.js +++ b/packages/react-native/Libraries/ReactNative/ReactNativeFeatureFlags.js @@ -54,10 +54,6 @@ export type FeatureFlags = {| * Enables use of setNativeProps in JS driven animations. */ shouldUseSetNativePropsInFabric: () => boolean, - /** - * Enables native view configs in brdgeless mode. - */ - enableNativeViewConfigsInBridgelessMode: () => boolean, /** * Enables a hotfix for forcing materialization of views with elevation set. */ @@ -74,7 +70,6 @@ const ReactNativeFeatureFlags: FeatureFlags = { enableAccessToHostTreeInFabric: () => false, shouldUseAnimatedObjectForTransform: () => false, shouldUseSetNativePropsInFabric: () => false, - enableNativeViewConfigsInBridgelessMode: () => false, shouldForceUnflattenForElevation: () => false, }; diff --git a/packages/react-native/Libraries/promiseRejectionTrackingOptions.js b/packages/react-native/Libraries/promiseRejectionTrackingOptions.js index b951f612ecf6c7..5f9c9a1dafd880 100644 --- a/packages/react-native/Libraries/promiseRejectionTrackingOptions.js +++ b/packages/react-native/Libraries/promiseRejectionTrackingOptions.js @@ -10,6 +10,8 @@ import typeof {enable} from 'promise/setimmediate/rejection-tracking'; +import LogBox from './LogBox/LogBox'; + let rejectionTrackingOptions: $NonMaybeType[0]> = { allRejections: true, onUnhandled: (id, rejection = {}) => { @@ -34,17 +36,29 @@ let rejectionTrackingOptions: $NonMaybeType[0]> = { } } - const warning = - `Possible Unhandled Promise Rejection (id: ${id}):\n` + - `${message ?? ''}\n` + - (stack == null ? '' : stack); - console.warn(warning); + const warning = `Possible unhandled promise rejection (id: ${id}):\n${ + message ?? '' + }`; + if (__DEV__) { + LogBox.addLog({ + level: 'warn', + message: { + content: warning, + substitutions: [], + }, + componentStack: [], + stack, + category: 'possible_unhandled_promise_rejection', + }); + } else { + console.warn(warning); + } }, onHandled: id => { const warning = - `Promise Rejection Handled (id: ${id})\n` + + `Promise rejection handled (id: ${id})\n` + 'This means you can ignore any previous messages of the form ' + - `"Possible Unhandled Promise Rejection (id: ${id}):"`; + `"Possible unhandled promise rejection (id: ${id}):"`; console.warn(warning); }, }; diff --git a/packages/react-native/React/Base/RCTBridgeProxy.mm b/packages/react-native/React/Base/RCTBridgeProxy.mm index 8aee50219048dc..82fb8f93cd7017 100644 --- a/packages/react-native/React/Base/RCTBridgeProxy.mm +++ b/packages/react-native/React/Base/RCTBridgeProxy.mm @@ -351,6 +351,11 @@ - (RCTUIManager *)uiManager return (RCTUIManager *)_uiManagerProxy; } +- (RCTBridgeProxy *)object +{ + return self; +} + /** * NSProxy setup */ @@ -387,12 +392,14 @@ - (void)logError:(NSString *)message cmd:(SEL)cmd @implementation RCTUIManagerProxy { RCTViewRegistry *_viewRegistry; + NSMutableDictionary *_legacyViewRegistry; } - (instancetype)initWithViewRegistry:(RCTViewRegistry *)viewRegistry { self = [super self]; if (self) { _viewRegistry = viewRegistry; + _legacyViewRegistry = [NSMutableDictionary new]; } return self; } @@ -404,20 +411,21 @@ - (RCTPlatformView *)viewForReactTag:(NSNumber *)reactTag // [macOS] { [self logWarning:@"Please migrate to RCTViewRegistry: @synthesize viewRegistry_DEPRECATED = _viewRegistry_DEPRECATED." cmd:_cmd]; - return [_viewRegistry viewForReactTag:reactTag]; + return [_viewRegistry viewForReactTag:reactTag] ? [_viewRegistry viewForReactTag:reactTag] + : [_legacyViewRegistry objectForKey:reactTag]; } - (void)addUIBlock:(RCTViewManagerUIBlock)block { [self logWarning: - @"This method isn't implemented faithfully: the viewRegistry passed to RCTViewManagerUIBlock is nil. Please migrate to RCTViewRegistry: @synthesize viewRegistry_DEPRECATED = _viewRegistry_DEPRECATED." + @"This method isn't implemented faithfully. Please migrate to RCTViewRegistry if possible: @synthesize viewRegistry_DEPRECATED = _viewRegistry_DEPRECATED." cmd:_cmd]; __weak __typeof(self) weakSelf = self; RCTExecuteOnMainQueue(^{ __typeof(self) strongSelf = weakSelf; if (strongSelf) { - block((RCTUIManager *)strongSelf, nil); + block((RCTUIManager *)strongSelf, strongSelf->_legacyViewRegistry); } }); } diff --git a/packages/react-native/React/Base/RCTConstants.h b/packages/react-native/React/Base/RCTConstants.h index ca9a2649cc66e4..a2d470c71f9b4f 100644 --- a/packages/react-native/React/Base/RCTConstants.h +++ b/packages/react-native/React/Base/RCTConstants.h @@ -16,7 +16,7 @@ RCT_EXTERN NSString *const RCTUserInterfaceStyleDidChangeNotificationTraitCollec RCT_EXTERN NSString *const RCTUserInterfaceStyleDidChangeNotificationAppearanceKey; #endif // macOS] -RCT_EXTERN NSString *const RCTRootViewFrameDidChangeNotification; +RCT_EXTERN NSString *const RCTWindowFrameDidChangeNotification; /** * This notification fires when the bridge initializes. diff --git a/packages/react-native/React/Base/RCTConstants.m b/packages/react-native/React/Base/RCTConstants.m index e375a2f0c18916..7490301f7fd0ac 100644 --- a/packages/react-native/React/Base/RCTConstants.m +++ b/packages/react-native/React/Base/RCTConstants.m @@ -20,7 +20,7 @@ NSString *const RCTUserInterfaceStyleDidChangeNotificationAppearanceKey = @"appearance"; #endif // macOS] -NSString *const RCTRootViewFrameDidChangeNotification = @"RCTRootViewFrameDidChangeNotification"; +NSString *const RCTWindowFrameDidChangeNotification = @"RCTWindowFrameDidChangeNotification"; NSString *const RCTJavaScriptDidFailToLoadNotification = @"RCTJavaScriptDidFailToLoadNotification"; NSString *const RCTJavaScriptDidLoadNotification = @"RCTJavaScriptDidLoadNotification"; diff --git a/packages/react-native/React/Base/RCTRootContentView.m b/packages/react-native/React/Base/RCTRootContentView.m index 32aec8ca69eeb8..854a101690669b 100644 --- a/packages/react-native/React/Base/RCTRootContentView.m +++ b/packages/react-native/React/Base/RCTRootContentView.m @@ -78,7 +78,7 @@ - (void)viewDidMoveToWindow - (void)sendFrameChangedEvent:(__unused NSNotification *)notification { - [[NSNotificationCenter defaultCenter] postNotificationName:RCTRootViewFrameDidChangeNotification object:self]; + [[NSNotificationCenter defaultCenter] postNotificationName:RCTWindowFrameDidChangeNotification object:self]; } #endif // macOS] diff --git a/packages/react-native/React/Base/RCTVersion.m b/packages/react-native/React/Base/RCTVersion.m index 1794ca2e5213d9..cc92c90193481f 100644 --- a/packages/react-native/React/Base/RCTVersion.m +++ b/packages/react-native/React/Base/RCTVersion.m @@ -21,10 +21,10 @@ static dispatch_once_t onceToken; dispatch_once(&onceToken, ^(void){ __rnVersion = @{ - RCTVersionMajor: @(1000), - RCTVersionMinor: @(0), + RCTVersionMajor: @(0), + RCTVersionMinor: @(73), RCTVersionPatch: @(0), - RCTVersionPrerelease: [NSNull null], + RCTVersionPrerelease: @"rc.4", }; }); return __rnVersion; diff --git a/packages/react-native/React/Base/Surface/RCTSurfaceRootShadowView.h b/packages/react-native/React/Base/Surface/RCTSurfaceRootShadowView.h index 2898b16b385d15..4e0ed8458d2ce1 100644 --- a/packages/react-native/React/Base/Surface/RCTSurfaceRootShadowView.h +++ b/packages/react-native/React/Base/Surface/RCTSurfaceRootShadowView.h @@ -27,6 +27,6 @@ */ @property (nonatomic, assign) YGDirection baseDirection; -- (void)layoutWithAffectedShadowViews:(NSHashTable *)affectedShadowViews; +- (void)layoutWithAffectedShadowViews:(NSPointerArray *)affectedShadowViews; @end diff --git a/packages/react-native/React/Base/Surface/RCTSurfaceRootShadowView.m b/packages/react-native/React/Base/Surface/RCTSurfaceRootShadowView.m index 37c551cb4bd318..95cf3390657f6c 100644 --- a/packages/react-native/React/Base/Surface/RCTSurfaceRootShadowView.m +++ b/packages/react-native/React/Base/Surface/RCTSurfaceRootShadowView.m @@ -41,7 +41,7 @@ - (void)insertReactSubview:(RCTShadowView *)subview atIndex:(NSInteger)atIndex } } -- (void)layoutWithAffectedShadowViews:(NSHashTable *)affectedShadowViews +- (void)layoutWithAffectedShadowViews:(NSPointerArray *)affectedShadowViews { NSHashTable *other = [NSHashTable new]; diff --git a/packages/react-native/React/CoreModules/RCTDeviceInfo.mm b/packages/react-native/React/CoreModules/RCTDeviceInfo.mm index b39e14e5639f81..50b75c6c7862c6 100644 --- a/packages/react-native/React/CoreModules/RCTDeviceInfo.mm +++ b/packages/react-native/React/CoreModules/RCTDeviceInfo.mm @@ -79,7 +79,7 @@ - (void)initialize #endif // [macOS] [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(interfaceFrameDidChange) - name:RCTRootViewFrameDidChangeNotification + name:RCTWindowFrameDidChangeNotification object:nil]; } diff --git a/packages/react-native/React/Modules/RCTUIManager.h b/packages/react-native/React/Modules/RCTUIManager.h index cabdb6997a7d53..ae70d203c401ff 100644 --- a/packages/react-native/React/Modules/RCTUIManager.h +++ b/packages/react-native/React/Modules/RCTUIManager.h @@ -7,6 +7,7 @@ #import #import +#import #import #import #import // [macOS] @@ -174,6 +175,12 @@ void RCTTraverseViewNodes(id view, void (^block)(id) @end +@interface RCTBridgeProxy (RCTUIManager) + +@property (nonatomic, readonly) RCTUIManager *uiManager; + +@end + RCT_EXTERN NSMutableDictionary *RCTModuleConstantsForDestructuredComponent( NSMutableDictionary *directEvents, NSMutableDictionary *bubblingEvents, diff --git a/packages/react-native/React/Modules/RCTUIManager.m b/packages/react-native/React/Modules/RCTUIManager.m index b8fa35f3589ed8..b36041d3a8d201 100644 --- a/packages/react-native/React/Modules/RCTUIManager.m +++ b/packages/react-native/React/Modules/RCTUIManager.m @@ -568,7 +568,7 @@ - (RCTViewManagerUIBlock)uiBlockWithLayoutUpdateForRootView:(RCTRootShadowView * { RCTAssertUIManagerQueue(); - NSHashTable *affectedShadowViews = [NSHashTable weakObjectsHashTable]; + NSPointerArray *affectedShadowViews = [NSPointerArray weakObjectsPointerArray]; [rootShadowView layoutWithAffectedShadowViews:affectedShadowViews]; if (!affectedShadowViews.count) { @@ -1545,9 +1545,10 @@ static void RCTMeasureLayout(RCTShadowView *view, RCTShadowView *ancestor, RCTRe // lazifyViewManagerConfig function in JS. This fuction uses NativeModules global object that is not available in the // New Architecture. To make native view configs work in the New Architecture we will populate these properties in // native. - moduleConstants[@"Commands"] = viewConfig[@"Commands"]; - moduleConstants[@"Constants"] = viewConfig[@"Constants"]; - + if (RCTGetUseNativeViewConfigsInBridgelessMode()) { + moduleConstants[@"Commands"] = viewConfig[@"Commands"]; + moduleConstants[@"Constants"] = viewConfig[@"Constants"]; + } // Add direct events for (NSString *eventName in viewConfig[@"directEvents"]) { if (!directEvents[eventName]) { diff --git a/packages/react-native/React/UIUtils/RCTUIUtils.h b/packages/react-native/React/UIUtils/RCTUIUtils.h index d585bb270067c4..caa61a41e69300 100644 --- a/packages/react-native/React/UIUtils/RCTUIUtils.h +++ b/packages/react-native/React/UIUtils/RCTUIUtils.h @@ -27,7 +27,7 @@ RCTDimensions RCTGetDimensions(CGFloat fontScale); #if !TARGET_OS_OSX // [macOS] // Get font size multiplier for font base size (Large) by content size category extern __attribute__((visibility("default"))) CGFloat RCTGetMultiplierForContentSizeCategory( - UIContentSizeCategory category); + UIContentSizeCategory category) __deprecated; #endif // [macOS] #ifdef __cplusplus diff --git a/packages/react-native/React/Views/RCTComponentData.m b/packages/react-native/React/Views/RCTComponentData.m index 6bc1979ad5a26b..5a017935b723fc 100644 --- a/packages/react-native/React/Views/RCTComponentData.m +++ b/packages/react-native/React/Views/RCTComponentData.m @@ -71,7 +71,7 @@ - (RCTViewManager *)manager object:nil userInfo:@{@"module" : _bridgelessViewManager}]; } - return _manager ?: _bridgelessViewManager; + return _manager ? _manager : _bridgelessViewManager; } RCT_NOT_IMPLEMENTED(-(instancetype)init) @@ -482,11 +482,6 @@ - (void)setProps:(NSDictionary *)props forShadowView:(RCTShadowV } } - NSDictionary *commands = [self commandsForViewMangerClass:managerClass - methods:methods - methodCount:count]; - free(methods); - #if RCT_DEBUG for (NSString *event in bubblingEvents) { if ([directEvents containsObject:event]) { @@ -501,15 +496,22 @@ - (void)setProps:(NSDictionary *)props forShadowView:(RCTShadowV Class superClass = [managerClass superclass]; - return @{ + NSMutableDictionary *result = [[NSMutableDictionary alloc] initWithDictionary:@{ @"propTypes" : propTypes, @"directEvents" : directEvents, @"bubblingEvents" : bubblingEvents, @"capturingEvents" : capturingEvents, @"baseModuleName" : superClass == [NSObject class] ? (id)kCFNull : RCTViewManagerModuleNameForClass(superClass), - @"Commands" : commands, - @"Constants" : [self constantsForViewMangerClass:managerClass], - }; + }]; + + if (RCTGetUseNativeViewConfigsInBridgelessMode()) { + result[@"Commands"] = [self commandsForViewMangerClass:managerClass methods:methods methodCount:count]; + result[@"Constants"] = [self constantsForViewMangerClass:managerClass]; + } + + free(methods); + + return result; } - (NSDictionary *)viewConfig diff --git a/packages/react-native/React/Views/RCTLayout.h b/packages/react-native/React/Views/RCTLayout.h index 5403e9c0da35ee..ac084eeb2b3529 100644 --- a/packages/react-native/React/Views/RCTLayout.h +++ b/packages/react-native/React/Views/RCTLayout.h @@ -31,7 +31,7 @@ typedef struct CG_BOXABLE RCTLayoutMetrics RCTLayoutMetrics; struct RCTLayoutContext { CGPoint absolutePosition; - __unsafe_unretained NSHashTable *_Nonnull affectedShadowViews; + __unsafe_unretained NSPointerArray *_Nonnull affectedShadowViews; __unsafe_unretained NSHashTable *_Nonnull other; }; typedef struct CG_BOXABLE RCTLayoutContext RCTLayoutContext; diff --git a/packages/react-native/React/Views/RCTRootShadowView.h b/packages/react-native/React/Views/RCTRootShadowView.h index a312d9abfede82..aecfc4d0a6ecef 100644 --- a/packages/react-native/React/Views/RCTRootShadowView.h +++ b/packages/react-native/React/Views/RCTRootShadowView.h @@ -29,6 +29,6 @@ */ @property (nonatomic, assign) YGDirection baseDirection; -- (void)layoutWithAffectedShadowViews:(NSHashTable *)affectedShadowViews; +- (void)layoutWithAffectedShadowViews:(NSPointerArray *)affectedShadowViews; @end diff --git a/packages/react-native/React/Views/RCTRootShadowView.m b/packages/react-native/React/Views/RCTRootShadowView.m index 9db376d7c49fd9..b80ab28ba8531e 100644 --- a/packages/react-native/React/Views/RCTRootShadowView.m +++ b/packages/react-native/React/Views/RCTRootShadowView.m @@ -23,7 +23,7 @@ - (instancetype)init return self; } -- (void)layoutWithAffectedShadowViews:(NSHashTable *)affectedShadowViews +- (void)layoutWithAffectedShadowViews:(NSPointerArray *)affectedShadowViews { NSHashTable *other = [NSHashTable new]; diff --git a/packages/react-native/React/Views/RCTShadowView.m b/packages/react-native/React/Views/RCTShadowView.m index 9b3ec441f5f8c0..802d6b6da8d149 100644 --- a/packages/react-native/React/Views/RCTShadowView.m +++ b/packages/react-native/React/Views/RCTShadowView.m @@ -314,7 +314,7 @@ - (void)layoutWithMetrics:(RCTLayoutMetrics)layoutMetrics layoutContext:(RCTLayo { if (!RCTLayoutMetricsEqualToLayoutMetrics(self.layoutMetrics, layoutMetrics)) { self.layoutMetrics = layoutMetrics; - [layoutContext.affectedShadowViews addObject:self]; + [layoutContext.affectedShadowViews addPointer:((__bridge void *)self)]; } } diff --git a/packages/react-native/React/Views/ScrollView/RCTScrollView.m b/packages/react-native/React/Views/ScrollView/RCTScrollView.m index 43aeedd7f32e54..ffe7919c141626 100644 --- a/packages/react-native/React/Views/ScrollView/RCTScrollView.m +++ b/packages/react-native/React/Views/ScrollView/RCTScrollView.m @@ -1445,7 +1445,7 @@ - (void)sendScrollEventWithName:(NSString *)eventName } CGPoint offset = scrollView.contentOffset; - if ([UIApplication sharedApplication].userInterfaceLayoutDirection == UIUserInterfaceLayoutDirectionRightToLeft) { + if ([self reactLayoutDirection] == UIUserInterfaceLayoutDirectionRightToLeft) { offset.x = scrollView.contentSize.width - scrollView.frame.size.width - offset.x; } diff --git a/packages/react-native/React/Views/UIView+React.m b/packages/react-native/React/Views/UIView+React.m index 353fe3ef4e2862..cda5a77398bd7b 100644 --- a/packages/react-native/React/Views/UIView+React.m +++ b/packages/react-native/React/Views/UIView+React.m @@ -236,7 +236,10 @@ - (void)reactSetFrame:(CGRect)frame self.frame = frame; #endif // macOS] - updateTransform(self); + id transformOrigin = objc_getAssociatedObject(self, @selector(reactTransformOrigin)); + if (transformOrigin) { + updateTransform(self); + } } #pragma mark - Transforms @@ -274,31 +277,35 @@ - (void)setReactTransformOrigin:(RCTTransformOrigin)reactTransformOrigin static void updateTransform(RCTPlatformView *view) // [macOS] { - CGSize size = view.bounds.size; - RCTTransformOrigin transformOrigin = view.reactTransformOrigin; - - CGFloat anchorPointX = 0; - CGFloat anchorPointY = 0; - CGFloat anchorPointZ = 0; - - if (transformOrigin.x.unit == YGUnitPoint) { - anchorPointX = transformOrigin.x.value - size.width * 0.5; - } else if (transformOrigin.x.unit == YGUnitPercent) { - anchorPointX = (transformOrigin.x.value * 0.01 - 0.5) * size.width; - } + CATransform3D transform; + id rawTansformOrigin = objc_getAssociatedObject(view, @selector(reactTransformOrigin)); + if (rawTansformOrigin) { + CGSize size = view.bounds.size; + CGFloat anchorPointX = 0; + CGFloat anchorPointY = 0; + CGFloat anchorPointZ = 0; + RCTTransformOrigin transformOrigin; + [rawTansformOrigin getValue:&transformOrigin]; + if (transformOrigin.x.unit == YGUnitPoint) { + anchorPointX = transformOrigin.x.value - size.width * 0.5; + } else if (transformOrigin.x.unit == YGUnitPercent) { + anchorPointX = (transformOrigin.x.value * 0.01 - 0.5) * size.width; + } - if (transformOrigin.y.unit == YGUnitPoint) { - anchorPointY = transformOrigin.y.value - size.height * 0.5; - } else if (transformOrigin.y.unit == YGUnitPercent) { - anchorPointY = (transformOrigin.y.value * 0.01 - 0.5) * size.height; + if (transformOrigin.y.unit == YGUnitPoint) { + anchorPointY = transformOrigin.y.value - size.height * 0.5; + } else if (transformOrigin.y.unit == YGUnitPercent) { + anchorPointY = (transformOrigin.y.value * 0.01 - 0.5) * size.height; + } + anchorPointZ = transformOrigin.z; + transform = CATransform3DConcat( + view.reactTransform, CATransform3DMakeTranslation(anchorPointX, anchorPointY, anchorPointZ)); + transform = + CATransform3DConcat(CATransform3DMakeTranslation(-anchorPointX, -anchorPointY, -anchorPointZ), transform); + } else { + transform = view.reactTransform; } - anchorPointZ = transformOrigin.z; - - CATransform3D transform = CATransform3DMakeTranslation(anchorPointX, anchorPointY, anchorPointZ); - transform = CATransform3DConcat(view.reactTransform, transform); - transform = CATransform3DTranslate(transform, -anchorPointX, -anchorPointY, -anchorPointZ); - view.layer.transform = transform; // Enable edge antialiasing in rotation, skew, or perspective transforms view.layer.allowsEdgeAntialiasing = transform.m12 != 0.0f || transform.m21 != 0.0f || transform.m34 != 0.0f; diff --git a/packages/react-native/ReactAndroid/flipper-integration/src/debug/java/com/facebook/react/flipper/ReactNativeFlipper.kt b/packages/react-native/ReactAndroid/flipper-integration/src/debug/java/com/facebook/react/flipper/ReactNativeFlipper.kt index ecbef22f773105..e4bad1d94ed439 100644 --- a/packages/react-native/ReactAndroid/flipper-integration/src/debug/java/com/facebook/react/flipper/ReactNativeFlipper.kt +++ b/packages/react-native/ReactAndroid/flipper-integration/src/debug/java/com/facebook/react/flipper/ReactNativeFlipper.kt @@ -21,6 +21,7 @@ import com.facebook.flipper.plugins.sharedpreferences.SharedPreferencesFlipperPl import com.facebook.react.ReactInstanceEventListener import com.facebook.react.ReactInstanceManager import com.facebook.react.bridge.ReactContext +import com.facebook.react.config.ReactFeatureFlags import com.facebook.react.modules.network.NetworkingModule /** @@ -30,6 +31,9 @@ import com.facebook.react.modules.network.NetworkingModule object ReactNativeFlipper { @JvmStatic fun initializeFlipper(context: Context, reactInstanceManager: ReactInstanceManager) { + if (ReactFeatureFlags.enableBridgelessArchitecture) { + return + } if (FlipperUtils.shouldEnableFlipper(context)) { val client = AndroidFlipperClient.getInstance(context) client.addPlugin(InspectorFlipperPlugin(context, DescriptorMapping.withDefaults())) diff --git a/packages/react-native/ReactAndroid/gradle.properties b/packages/react-native/ReactAndroid/gradle.properties index 924f82a0637dbe..4a35ff5254ac91 100644 --- a/packages/react-native/ReactAndroid/gradle.properties +++ b/packages/react-native/ReactAndroid/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=1000.0.0 +VERSION_NAME=0.73.0-rc.4 react.internal.publishingGroup=com.facebook.react android.useAndroidX=true diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactActivityDelegate.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactActivityDelegate.java index 8546a5d6e149b7..61d8e0af79f1e2 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactActivityDelegate.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactActivityDelegate.java @@ -19,7 +19,6 @@ import com.facebook.infer.annotation.Assertions; import com.facebook.react.bridge.Callback; import com.facebook.react.config.ReactFeatureFlags; -import com.facebook.react.interfaces.ReactHost; import com.facebook.react.modules.core.PermissionListener; /** diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactApplication.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactApplication.kt index 3f572fa149eae4..5131e55c4c5a16 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactApplication.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactApplication.kt @@ -8,7 +8,6 @@ package com.facebook.react import com.facebook.react.common.annotations.UnstableReactNativeAPI -import com.facebook.react.interfaces.ReactHost @OptIn(UnstableReactNativeAPI::class) /** Interface that represents an instance of a React Native application */ diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactDelegate.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactDelegate.java index de1ca03272207c..fab2a26dde2842 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactDelegate.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactDelegate.java @@ -16,7 +16,6 @@ import com.facebook.infer.annotation.Assertions; import com.facebook.react.config.ReactFeatureFlags; import com.facebook.react.devsupport.DoubleTapReloadRecognizer; -import com.facebook.react.interfaces.ReactHost; import com.facebook.react.interfaces.fabric.ReactSurface; import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler; diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/interfaces/ReactHost.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactHost.kt similarity index 96% rename from packages/react-native/ReactAndroid/src/main/java/com/facebook/react/interfaces/ReactHost.kt rename to packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactHost.kt index 4c5ef17ae36481..a1c3ab897cdfb5 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/interfaces/ReactHost.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactHost.kt @@ -5,7 +5,7 @@ * LICENSE file in the root directory of this source tree. */ -package com.facebook.react.interfaces +package com.facebook.react import android.app.Activity import android.content.Context @@ -13,8 +13,8 @@ import android.os.Bundle import com.facebook.react.bridge.ReactContext import com.facebook.react.bridge.queue.ReactQueueConfiguration import com.facebook.react.common.LifecycleState -import com.facebook.react.common.annotations.UnstableReactNativeAPI import com.facebook.react.devsupport.interfaces.DevSupportManager +import com.facebook.react.interfaces.TaskInterface import com.facebook.react.interfaces.fabric.ReactSurface import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler @@ -25,7 +25,6 @@ import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler * * The implementation of this interface should be Thread Safe */ -@UnstableReactNativeAPI interface ReactHost { /** The current [LifecycleState] for React Host */ diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactContext.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactContext.java index dfb1e641215fbf..b57513cb67216e 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactContext.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactContext.java @@ -71,7 +71,7 @@ public interface RCTDeviceEventEmitter extends JavaScriptModule { private @Nullable JSExceptionHandler mExceptionHandlerWrapper; private @Nullable WeakReference mCurrentActivity; - private @Nullable InteropModuleRegistry mInteropModuleRegistry; + protected @Nullable InteropModuleRegistry mInteropModuleRegistry; private boolean mIsInitialized = false; public ReactContext(Context base) { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/common/annotations/UnstableReactNativeAPI.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/common/annotations/UnstableReactNativeAPI.kt index 3996580c313e4d..5ae0b1779a3b24 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/common/annotations/UnstableReactNativeAPI.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/common/annotations/UnstableReactNativeAPI.kt @@ -8,7 +8,7 @@ package com.facebook.react.common.annotations @Retention(AnnotationRetention.RUNTIME) -@Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION) +@Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY) @RequiresOptIn( level = RequiresOptIn.Level.ERROR, message = "This API is experimental and is likely to change or to be removed in the future") diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultNewArchitectureEntryPoint.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultNewArchitectureEntryPoint.kt index e3aa9aebae05e4..fa6ff875dda211 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultNewArchitectureEntryPoint.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultNewArchitectureEntryPoint.kt @@ -34,6 +34,8 @@ object DefaultNewArchitectureEntryPoint { ReactFeatureFlags.enableFabricRenderer = fabricEnabled ReactFeatureFlags.unstable_useFabricInterop = fabricEnabled ReactFeatureFlags.enableBridgelessArchitecture = bridgelessEnabled + ReactFeatureFlags.useNativeViewConfigsInBridgelessMode = fabricEnabled && bridgelessEnabled + ReactFeatureFlags.unstable_useTurboModuleInterop = bridgelessEnabled this.privateFabricEnabled = fabricEnabled this.privateTurboModulesEnabled = turboModulesEnabled diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultReactHost.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultReactHost.kt index cb8ce917c46680..d481e33c0bd1d9 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultReactHost.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultReactHost.kt @@ -8,20 +8,41 @@ package com.facebook.react.defaults import android.content.Context +import com.facebook.react.JSEngineResolutionAlgorithm +import com.facebook.react.ReactHost +import com.facebook.react.ReactNativeHost import com.facebook.react.ReactPackage import com.facebook.react.bridge.JSBundleLoader import com.facebook.react.common.annotations.UnstableReactNativeAPI import com.facebook.react.fabric.ComponentFactory -import com.facebook.react.interfaces.ReactHost import com.facebook.react.interfaces.exceptionmanager.ReactJsExceptionHandler import com.facebook.react.runtime.JSCInstance import com.facebook.react.runtime.ReactHostImpl import com.facebook.react.runtime.hermes.HermesInstance -@UnstableReactNativeAPI +/** + * A utility class that allows you to simplify the setup of a [ReactHost] for new apps in Open + * Source. + * + * [ReactHost] is an interface responsible of handling the lifecycle of a React Native app when + * running in bridgeless mode. + */ object DefaultReactHost { private var reactHost: ReactHost? = null + /** + * Util function to create a default [ReactHost] to be used in your application. This method is + * used by the New App template. + * + * @param context the Android [Context] to use for creating the [ReactHost] + * @param packageList the list of [ReactPackage]s to use for creating the [ReactHost] + * @param jsMainModulePath the path to your app's main module on Metro. Usually `index` or + * `index.` + * @param jsBundleAssetPath the path to the JS bundle relative to the assets directory. Will be + * composed in a `asset://...` URL + * @param isHermesEnabled whether to use Hermes as the JS engine, default to true. + */ + @OptIn(UnstableReactNativeAPI::class) @JvmStatic fun getDefaultReactHost( context: Context, @@ -47,13 +68,42 @@ object DefaultReactHost { // TODO: T164788699 find alternative of accessing ReactHostImpl for initialising reactHost reactHost = ReactHostImpl( - context, - defaultReactHostDelegate, - componentFactory, - true, - reactJsExceptionHandler, - true) + context, + defaultReactHostDelegate, + componentFactory, + true, + reactJsExceptionHandler, + true) + .apply { + jsEngineResolutionAlgorithm = + if (isHermesEnabled) { + JSEngineResolutionAlgorithm.HERMES + } else { + JSEngineResolutionAlgorithm.JSC + } + } } return reactHost as ReactHost } + + /** + * Util function to create a default [ReactHost] to be used in your application. This method is + * used by the New App template. + * + * This method takes in input a [ReactNativeHost] (bridge-mode) and uses its configuration to + * create an equivalent [ReactHost] (bridgeless-mode). + * + * @param context the Android [Context] to use for creating the [ReactHost] + * @param reactNativeHost the [ReactNativeHost] to use for creating the [ReactHost] + */ + @JvmStatic + fun getDefaultReactHost( + context: Context, + reactNativeHost: ReactNativeHost, + ): ReactHost { + require(reactNativeHost is DefaultReactNativeHost) { + "You can call getDefaultReactHost only with instances of DefaultReactNativeHost" + } + return reactNativeHost.toReactHost(context) + } } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultReactNativeHost.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultReactNativeHost.kt index 23c0bada20a220..77cc1a7d1de6b9 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultReactNativeHost.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultReactNativeHost.kt @@ -8,7 +8,9 @@ package com.facebook.react.defaults import android.app.Application +import android.content.Context import com.facebook.react.JSEngineResolutionAlgorithm +import com.facebook.react.ReactHost import com.facebook.react.ReactNativeHost import com.facebook.react.ReactPackageTurboModuleManagerDelegate import com.facebook.react.bridge.JSIModulePackage @@ -68,4 +70,18 @@ protected constructor( */ protected open val isHermesEnabled: Boolean? get() = null + + /** + * Converts this [ReactNativeHost] (bridge-mode) to a [ReactHost] (bridgeless-mode). + * + * @param context the Android [Context] to use for creating the [ReactHost] + */ + fun toReactHost(context: Context): ReactHost = + DefaultReactHost.getDefaultReactHost( + context, + packages, + jsMainModuleName, + bundleAssetName ?: "index", + isHermesEnabled ?: true, + ) } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/BridgeDevSupportManager.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/BridgeDevSupportManager.java index 9b3a7d7486ac34..79977623cde704 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/BridgeDevSupportManager.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/BridgeDevSupportManager.java @@ -86,9 +86,6 @@ public BridgeDevSupportManager( surfaceDelegateFactory, devLoadingViewManager); - mReactInstanceManagerHelper = reactInstanceManagerHelper; - mDevLoadingViewManager = devLoadingViewManager; - if (getDevSettings().isStartSamplingProfilerOnInit()) { // Only start the profiler. If its already running, there is an error if (!mIsSamplingProfilerEnabled) { @@ -112,14 +109,6 @@ public void onOptionSelected() { }); } - public DevLoadingViewManager getDevLoadingViewManager() { - return mDevLoadingViewManager; - } - - public ReactInstanceDevHelper getReactInstanceManagerHelper() { - return mReactInstanceManagerHelper; - } - @Override protected String getUniqueTag() { return "Bridge"; diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerBase.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerBase.java index bed2db92d8630f..57f0b9ac76fa1f 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerBase.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerBase.java @@ -695,7 +695,11 @@ public DevServerHelper getDevServerHelper() { return mDevServerHelper; } - protected ReactInstanceDevHelper getReactInstanceDevHelper() { + public DevLoadingViewManager getDevLoadingViewManager() { + return mDevLoadingViewManager; + } + + public ReactInstanceDevHelper getReactInstanceDevHelper() { return mReactInstanceDevHelper; } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/jscexecutor/JSCExecutor.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/jscexecutor/JSCExecutor.kt index 8dc018deca0d33..9816ba833d574e 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/jscexecutor/JSCExecutor.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/jscexecutor/JSCExecutor.kt @@ -31,6 +31,6 @@ class JSCExecutor internal constructor(jscConfig: ReadableNativeMap) : SoLoader.loadLibrary("jscexecutor") } - private external fun initHybrid(jscConfig: ReadableNativeMap): HybridData? + @JvmStatic private external fun initHybrid(jscConfig: ReadableNativeMap): HybridData? } } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/devloading/DevLoadingModule.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/devloading/DevLoadingModule.java index 4eaa3f2d0b9a34..8bd3731584de6c 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/devloading/DevLoadingModule.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/devloading/DevLoadingModule.java @@ -13,8 +13,7 @@ import com.facebook.react.bridge.NativeModule; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.UiThreadUtil; -import com.facebook.react.devsupport.BridgeDevSupportManager; -import com.facebook.react.devsupport.DefaultDevLoadingViewImplementation; +import com.facebook.react.devsupport.DevSupportManagerBase; import com.facebook.react.devsupport.interfaces.DevLoadingViewManager; import com.facebook.react.module.annotations.ReactModule; @@ -28,14 +27,9 @@ public class DevLoadingModule extends NativeDevLoadingViewSpec { public DevLoadingModule(ReactApplicationContext reactContext) { super(reactContext); mJSExceptionHandler = reactContext.getJSExceptionHandler(); - if (mJSExceptionHandler != null && mJSExceptionHandler instanceof BridgeDevSupportManager) { + if (mJSExceptionHandler != null && mJSExceptionHandler instanceof DevSupportManagerBase) { mDevLoadingViewManager = - ((BridgeDevSupportManager) mJSExceptionHandler).getDevLoadingViewManager(); - mDevLoadingViewManager = - mDevLoadingViewManager != null - ? mDevLoadingViewManager - : new DefaultDevLoadingViewImplementation( - ((BridgeDevSupportManager) mJSExceptionHandler).getReactInstanceManagerHelper()); + ((DevSupportManagerBase) mJSExceptionHandler).getDevLoadingViewManager(); } } @@ -46,7 +40,9 @@ public void showMessage(final String message, final Double color, final Double b new Runnable() { @Override public void run() { - mDevLoadingViewManager.showMessage(message); + if (mDevLoadingViewManager != null) { + mDevLoadingViewManager.showMessage(message); + } } }); } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.java index ea97bff8de8051..b8be587a16b655 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.java @@ -15,8 +15,8 @@ public class ReactNativeVersion { public static final Map VERSION = MapBuilder.of( - "major", 1000, - "minor", 0, + "major", 0, + "minor", 73, "patch", 0, - "prerelease", null); + "prerelease", "rc.4"); } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/BridgelessReactContext.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/BridgelessReactContext.java index de5519395dd043..ad4b76d4b549dc 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/BridgelessReactContext.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/BridgelessReactContext.java @@ -22,6 +22,7 @@ import com.facebook.react.bridge.ReactNoCrashBridgeNotAllowedSoftException; import com.facebook.react.bridge.ReactSoftExceptionLogger; import com.facebook.react.bridge.WritableNativeArray; +import com.facebook.react.config.ReactFeatureFlags; import com.facebook.react.devsupport.interfaces.DevSupportManager; import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler; import com.facebook.react.uimanager.events.EventDispatcher; @@ -49,6 +50,9 @@ class BridgelessReactContext extends ReactApplicationContext implements EventDis BridgelessReactContext(Context context, ReactHostImpl host) { super(context); mReactHost = host; + if (ReactFeatureFlags.unstable_useFabricInterop) { + initializeInteropModules(); + } } @Override @@ -124,6 +128,10 @@ public BridgelessJSModuleInvocationHandler( @Override public T getJSModule(Class jsInterface) { + if (mInteropModuleRegistry != null + && mInteropModuleRegistry.shouldReturnInteropModule(jsInterface)) { + return mInteropModuleRegistry.getInteropModule(jsInterface); + } JavaScriptModule interfaceProxy = (JavaScriptModule) Proxy.newProxyInstance( diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/CoreReactPackage.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/CoreReactPackage.java index 5ed3e4aa8d1129..7ba138cd6b9654 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/CoreReactPackage.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/CoreReactPackage.java @@ -19,6 +19,7 @@ import com.facebook.react.module.model.ReactModuleInfoProvider; import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler; import com.facebook.react.modules.core.DeviceEventManagerModule; +import com.facebook.react.modules.core.ExceptionsManagerModule; import com.facebook.react.modules.debug.DevSettingsModule; import com.facebook.react.modules.debug.SourceCodeModule; import com.facebook.react.modules.deviceinfo.DeviceInfoModule; @@ -36,6 +37,7 @@ SourceCodeModule.class, LogBoxModule.class, DeviceEventManagerModule.class, + ExceptionsManagerModule.class, }) class CoreReactPackage extends TurboReactPackage { @@ -63,6 +65,8 @@ public NativeModule getModule(String name, ReactApplicationContext reactContext) return new DeviceEventManagerModule(reactContext, mHardwareBackBtnHandler); case LogBoxModule.NAME: return new LogBoxModule(reactContext, mDevSupportManager); + case ExceptionsManagerModule.NAME: + return new ExceptionsManagerModule(mDevSupportManager); default: throw new IllegalArgumentException( "In BridgelessReactPackage, could not find Native module for " + name); @@ -85,6 +89,7 @@ public ReactModuleInfoProvider getReactModuleInfoProvider() { DevSettingsModule.class, DeviceEventManagerModule.class, LogBoxModule.class, + ExceptionsManagerModule.class, }; final Map reactModuleInfoMap = new HashMap<>(); for (Class moduleClass : moduleList) { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/JSTimerExecutor.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/JSTimerExecutor.java index 69cffd5cfa9229..7c23e701b430f1 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/JSTimerExecutor.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/JSTimerExecutor.java @@ -9,13 +9,15 @@ import com.facebook.infer.annotation.Nullsafe; import com.facebook.jni.HybridData; -import com.facebook.jni.annotations.DoNotStrip; +import com.facebook.jni.annotations.DoNotStripAny; +import com.facebook.proguard.annotations.DoNotStrip; import com.facebook.react.bridge.WritableArray; import com.facebook.react.bridge.WritableNativeArray; import com.facebook.react.modules.core.JavaScriptTimerExecutor; import com.facebook.soloader.SoLoader; @Nullsafe(Nullsafe.Mode.LOCAL) +@DoNotStripAny class JSTimerExecutor implements JavaScriptTimerExecutor { static { @@ -24,6 +26,7 @@ class JSTimerExecutor implements JavaScriptTimerExecutor { @DoNotStrip private final HybridData mHybridData; + @DoNotStrip public JSTimerExecutor(HybridData hybridData) { mHybridData = hybridData; } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImpl.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImpl.java index 70062476d33794..494aeb61ff15a7 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImpl.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImpl.java @@ -25,6 +25,7 @@ import com.facebook.infer.annotation.ThreadSafe; import com.facebook.react.JSEngineResolutionAlgorithm; import com.facebook.react.MemoryPressureRouter; +import com.facebook.react.ReactHost; import com.facebook.react.ReactInstanceEventListener; import com.facebook.react.bridge.Callback; import com.facebook.react.bridge.JSBundleLoader; @@ -48,7 +49,6 @@ import com.facebook.react.devsupport.interfaces.DevSupportManager; import com.facebook.react.fabric.ComponentFactory; import com.facebook.react.fabric.FabricUIManager; -import com.facebook.react.interfaces.ReactHost; import com.facebook.react.interfaces.TaskInterface; import com.facebook.react.interfaces.exceptionmanager.ReactJsExceptionHandler; import com.facebook.react.interfaces.fabric.ReactSurface; @@ -597,7 +597,8 @@ T getNativeModule(Class nativeModuleInterface) { return null; } - public DefaultHardwareBackBtnHandler getDefaultBackButtonHandler() { + /* package */ + DefaultHardwareBackBtnHandler getDefaultBackButtonHandler() { return () -> { UiThreadUtil.assertOnUiThread(); if (mDefaultHardwareBackBtnHandler != null) { @@ -637,6 +638,9 @@ public DefaultHardwareBackBtnHandler getDefaultBackButtonHandler() { final String method = "handleHostException(message = \"" + e.getMessage() + "\")"; log(method); + if (DEV) { + mDevSupportManager.handleException(e); + } destroy(method, e); mReactHostDelegate.handleInstanceException(e); } @@ -921,6 +925,7 @@ private Task newGetOrCreateReactInstanceTask() { final JSBundleLoader bundleLoader = task.getResult(); final BridgelessReactContext reactContext = getOrCreateReactContext(); final DevSupportManager devSupportManager = getDevSupportManager(); + reactContext.setJSExceptionHandler(devSupportManager); log(method, "Creating ReactInstance"); final ReactInstance instance = @@ -1035,6 +1040,7 @@ private Task oldGetOrCreateReactInstanceTask() { final BridgelessReactContext reactContext = getOrCreateReactContext(); final DevSupportManager devSupportManager = getDevSupportManager(); + reactContext.setJSExceptionHandler(devSupportManager); return getJsBundleLoader() .onSuccess( diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactInstance.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactInstance.java index f97db18472926f..e129342bbc8513 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactInstance.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactInstance.java @@ -71,6 +71,7 @@ import java.util.List; import java.util.Map; import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; import javax.annotation.Nullable; /** @@ -93,6 +94,7 @@ final class ReactInstance { private final TurboModuleManager mTurboModuleManager; private final FabricUIManager mFabricUIManager; private final JavaTimerManager mJavaTimerManager; + private final Map mViewManagers = new ConcurrentHashMap<>(); @DoNotStrip @Nullable private ComponentNameResolverManager mComponentNameResolverManager; @DoNotStrip @Nullable private UIConstantsProviderManager mUIConstantsProviderManager; @@ -489,8 +491,12 @@ public void registerSegment(int segmentId, String path) { } private @Nullable ViewManager createViewManager(String viewManagerName) { + // Return cached view manager if available, no matter it's eagerly or lazily loaded + if (mViewManagers.containsKey(viewManagerName)) { + return mViewManagers.get(viewManagerName); + } + List packages = mReactPackages; if (mDelegate != null) { - List packages = mReactPackages; if (packages != null) { synchronized (packages) { for (ReactPackage reactPackage : packages) { @@ -499,6 +505,7 @@ public void registerSegment(int segmentId, String path) { ((ViewManagerOnDemandReactPackage) reactPackage) .createViewManager(mBridgelessReactContext, viewManagerName); if (viewManager != null) { + mViewManagers.put(viewManagerName, viewManager); return viewManager; } } @@ -507,7 +514,17 @@ public void registerSegment(int segmentId, String path) { } } - return null; + // Once a view manager is not found in all react packages via lazy loading, fall back to default + // implementation: eagerly initialize all view managers + for (ReactPackage reactPackage : packages) { + List viewManagersInPackage = + reactPackage.createViewManagers(mBridgelessReactContext); + for (ViewManager viewManager : viewManagersInPackage) { + mViewManagers.put(viewManager.getName(), viewManager); + } + } + + return mViewManagers.get(viewManagerName); } private @NonNull Collection getViewManagerNames() { @@ -534,8 +551,28 @@ public void registerSegment(int segmentId, String path) { private @NonNull NativeMap getUIManagerConstants() { List viewManagers = new ArrayList(); - for (String viewManagerName : getViewManagerNames()) { - viewManagers.add(createViewManager(viewManagerName)); + boolean canLoadViewManagersLazily = true; + + List packages = mReactPackages; + for (ReactPackage reactPackage : packages) { + if (!(reactPackage instanceof ViewManagerOnDemandReactPackage)) { + canLoadViewManagersLazily = false; + break; + } + } + // 1, Retrive view managers via on demand loading + if (canLoadViewManagersLazily) { + for (String viewManagerName : getViewManagerNames()) { + viewManagers.add(createViewManager(viewManagerName)); + } + } else { + // 2, There are packages that don't implement ViewManagerOnDemandReactPackage so we retrieve + // view managers via eager loading + for (ReactPackage reactPackage : packages) { + List viewManagersInPackage = + reactPackage.createViewManagers(mBridgelessReactContext); + viewManagers.addAll(viewManagersInPackage); + } } Map constants = UIManagerModule.createConstants(viewManagers, new HashMap<>(), new HashMap<>()); diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/shell/MainReactPackage.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/shell/MainReactPackage.java index 860fb362be4c48..c6b95d08f55666 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/shell/MainReactPackage.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/shell/MainReactPackage.java @@ -26,6 +26,7 @@ import com.facebook.react.modules.blob.FileReaderModule; import com.facebook.react.modules.camera.ImageStoreManager; import com.facebook.react.modules.clipboard.ClipboardModule; +import com.facebook.react.modules.devloading.DevLoadingModule; import com.facebook.react.modules.devtoolssettings.DevToolsSettingsManagerModule; import com.facebook.react.modules.dialog.DialogModule; import com.facebook.react.modules.fresco.FrescoModule; @@ -73,6 +74,7 @@ AppearanceModule.class, AppStateModule.class, BlobModule.class, + DevLoadingModule.class, FileReaderModule.class, ClipboardModule.class, DialogModule.class, @@ -114,6 +116,8 @@ public MainReactPackage(MainPackageConfig config) { return new AppStateModule(context); case BlobModule.NAME: return new BlobModule(context); + case DevLoadingModule.NAME: + return new DevLoadingModule(context); case FileReaderModule.NAME: return new FileReaderModule(context); case ClipboardModule.NAME: @@ -260,6 +264,7 @@ public ReactModuleInfoProvider getReactModuleInfoProvider() { AppearanceModule.class, AppStateModule.class, BlobModule.class, + DevLoadingModule.class, FileReaderModule.class, ClipboardModule.class, DialogModule.class, diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/FabricViewStateManager.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/FabricViewStateManager.java new file mode 100644 index 00000000000000..02ea431f7f4828 --- /dev/null +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/FabricViewStateManager.java @@ -0,0 +1,95 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +package com.facebook.react.uimanager; + +import androidx.annotation.Nullable; +import com.facebook.common.logging.FLog; +import com.facebook.react.bridge.ReadableMap; +import com.facebook.react.bridge.WritableMap; + +/** + * This is a helper base class for ViewGroups that use Fabric State. + * + *

Reason to use this: UpdateState calls from the View layer to the Fabric core can fail, and + * optionally Fabric will call a "failure callback" if that happens. This class abstracts that and + * makes it easier ensure that State in Fabric is always up-to-date. + * + *

1. Whenever ViewManager.updateState is called, call View.setStateWrapper. 2. Instead of + * calling StateWrapper.updateState directly, call View.setState and it will automatically keep + * retrying the UpdateState call until it succeeds; or you call setState again; or the View layer is + * updated with a newer StateWrapper. + */ +@Deprecated( + since = + "Deprecated class since v0.73.0, please use com.facebook.react.uimanager.StateWrapper instead.", + forRemoval = true) +public class FabricViewStateManager { + private static final String TAG = "FabricViewStateManager"; + + @Deprecated + public interface HasFabricViewStateManager { + FabricViewStateManager getFabricViewStateManager(); + } + + @Deprecated + public interface StateUpdateCallback { + WritableMap getStateUpdate(); + } + + @Nullable private StateWrapper mStateWrapper = null; + + @Deprecated + public void setStateWrapper(StateWrapper stateWrapper) { + mStateWrapper = stateWrapper; + } + + @Deprecated + public boolean hasStateWrapper() { + return mStateWrapper != null; + } + + private void setState( + @Nullable final StateWrapper stateWrapper, + final StateUpdateCallback stateUpdateCallback, + final int numTries) { + // The StateWrapper will change, breaking the async loop, whenever the UpdateState MountItem + // is executed. + // The caller is responsible for detecting if data is up-to-date, and doing nothing, or + // detecting if state is stale and calling setState again. + if (stateWrapper == null) { + FLog.e(TAG, "setState called without a StateWrapper"); + return; + } + if (stateWrapper != mStateWrapper) { + return; + } + // We bail out after an arbitrary number of tries. In practice this should never go higher + // than 2 or 3, but there's nothing guaranteeing that. + if (numTries > 60) { + return; + } + + @Nullable WritableMap stateUpdate = stateUpdateCallback.getStateUpdate(); + if (stateUpdate == null) { + return; + } + + // TODO: State update cannot fail; remove `failureRunnable` and custom retrying logic. + stateWrapper.updateState(stateUpdate); + } + + @Deprecated + public void setState(final StateUpdateCallback stateUpdateCallback) { + setState(mStateWrapper, stateUpdateCallback, 0); + } + + @Deprecated + public @Nullable ReadableMap getStateData() { + return mStateWrapper != null ? mStateWrapper.getStateData() : null; + } +} diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactShadowNode.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactShadowNode.java index db10bf379e46ba..efaba33cdc3f3a 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactShadowNode.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactShadowNode.java @@ -123,9 +123,9 @@ public interface ReactShadowNode { */ void onCollectExtraUpdates(UIViewOperationQueue uiViewOperationQueue); - /** @return true if layout (position or dimensions) changed, false otherwise. */ + /* package */ boolean dispatchUpdatesWillChangeLayout(float absoluteX, float absoluteY); - /* package */ boolean dispatchUpdates( + /* package */ void dispatchUpdates( float absoluteX, float absoluteY, UIViewOperationQueue uiViewOperationQueue, diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactShadowNodeImpl.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactShadowNodeImpl.java index f62e6085ae459f..1bb6e9ee4c1b6a 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactShadowNodeImpl.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactShadowNodeImpl.java @@ -337,9 +337,32 @@ public void onAfterUpdateTransaction() { @Override public void onCollectExtraUpdates(UIViewOperationQueue uiViewOperationQueue) {} - /** @return true if layout (position or dimensions) changed, false otherwise. */ @Override - public boolean dispatchUpdates( + public boolean dispatchUpdatesWillChangeLayout(float absoluteX, float absoluteY) { + if (!hasNewLayout()) { + return false; + } + + float layoutX = getLayoutX(); + float layoutY = getLayoutY(); + int newAbsoluteLeft = Math.round(absoluteX + layoutX); + int newAbsoluteTop = Math.round(absoluteY + layoutY); + int newAbsoluteRight = Math.round(absoluteX + layoutX + getLayoutWidth()); + int newAbsoluteBottom = Math.round(absoluteY + layoutY + getLayoutHeight()); + + int newScreenX = Math.round(layoutX); + int newScreenY = Math.round(layoutY); + int newScreenWidth = newAbsoluteRight - newAbsoluteLeft; + int newScreenHeight = newAbsoluteBottom - newAbsoluteTop; + + return newScreenX != mScreenX + || newScreenY != mScreenY + || newScreenWidth != mScreenWidth + || newScreenHeight != mScreenHeight; + } + + @Override + public void dispatchUpdates( float absoluteX, float absoluteY, UIViewOperationQueue uiViewOperationQueue, @@ -386,10 +409,6 @@ public boolean dispatchUpdates( getScreenHeight()); } } - - return layoutHasChanged; - } else { - return false; } } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIImplementation.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIImplementation.java index f15004e38e91d2..894f32380bda2c 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIImplementation.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIImplementation.java @@ -29,7 +29,9 @@ import com.facebook.systrace.SystraceMessage; import com.facebook.yoga.YogaConstants; import com.facebook.yoga.YogaDirection; +import java.util.ArrayList; import java.util.Arrays; +import java.util.List; import java.util.Map; /** @@ -665,7 +667,20 @@ protected void updateViewHierarchy() { .arg("rootTag", cssRoot.getReactTag()) .flush(); try { - applyUpdatesRecursive(cssRoot, 0f, 0f); + List onLayoutNodes = new ArrayList<>(); + applyUpdatesRecursive(cssRoot, 0f, 0f, onLayoutNodes); + + for (ReactShadowNode node : onLayoutNodes) { + mEventDispatcher.dispatchEvent( + OnLayoutEvent.obtain( + -1, /* surfaceId not used in classic renderer */ + node.getReactTag(), + node.getScreenX(), + node.getScreenY(), + node.getScreenWidth(), + node.getScreenHeight())); + } + } finally { Systrace.endSection(Systrace.TRACE_TAG_REACT_JAVA_BRIDGE); } @@ -951,39 +966,34 @@ protected void calculateRootLayout(ReactShadowNode cssRoot) { } } - protected void applyUpdatesRecursive(ReactShadowNode cssNode, float absoluteX, float absoluteY) { + protected void applyUpdatesRecursive( + ReactShadowNode cssNode, + float absoluteX, + float absoluteY, + List onLayoutNodes) { if (!cssNode.hasUpdates()) { return; } + if (cssNode.dispatchUpdatesWillChangeLayout(absoluteX, absoluteY) + && cssNode.shouldNotifyOnLayout() + && !mShadowNodeRegistry.isRootNode(cssNode.getReactTag())) { + onLayoutNodes.add(cssNode); + } + Iterable cssChildren = cssNode.calculateLayoutOnChildren(); if (cssChildren != null) { for (ReactShadowNode cssChild : cssChildren) { applyUpdatesRecursive( - cssChild, absoluteX + cssNode.getLayoutX(), absoluteY + cssNode.getLayoutY()); + cssChild, + absoluteX + cssNode.getLayoutX(), + absoluteY + cssNode.getLayoutY(), + onLayoutNodes); } } - int tag = cssNode.getReactTag(); - if (!mShadowNodeRegistry.isRootNode(tag)) { - boolean frameDidChange = - cssNode.dispatchUpdates( - absoluteX, absoluteY, mOperationsQueue, mNativeViewHierarchyOptimizer); - - // Notify JS about layout event if requested - // and if the position or dimensions actually changed - // (consistent with iOS). - if (frameDidChange && cssNode.shouldNotifyOnLayout()) { - mEventDispatcher.dispatchEvent( - OnLayoutEvent.obtain( - -1, /* surfaceId not used in classic renderer */ - tag, - cssNode.getScreenX(), - cssNode.getScreenY(), - cssNode.getScreenWidth(), - cssNode.getScreenHeight())); - } - } + cssNode.dispatchUpdates(absoluteX, absoluteY, mOperationsQueue, mNativeViewHierarchyOptimizer); + cssNode.markUpdateSeen(); mNativeViewHierarchyOptimizer.onViewUpdatesCompleted(cssNode); } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/TextAttributeProps.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/TextAttributeProps.java index eb03a50743f0d6..c5484cd0b84986 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/TextAttributeProps.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/TextAttributeProps.java @@ -59,6 +59,7 @@ public class TextAttributeProps { public static final short TA_KEY_ACCESSIBILITY_ROLE = 24; public static final short TA_KEY_LINE_BREAK_STRATEGY = 25; public static final short TA_KEY_ROLE = 26; + public static final short TA_KEY_TEXT_TRANSFORM = 27; public static final int UNSET = -1; @@ -219,6 +220,9 @@ public static TextAttributeProps fromMapBuffer(MapBuffer props) { case TA_KEY_ROLE: result.setRole(Role.values()[entry.getIntValue()]); break; + case TA_KEY_TEXT_TRANSFORM: + result.setTextTransform(entry.getStringValue()); + break; } } @@ -226,7 +230,6 @@ public static TextAttributeProps fromMapBuffer(MapBuffer props) { // setNumberOfLines // setColor // setIncludeFontPadding - // setTextTransform return result; } diff --git a/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h b/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h index 5d89f4efaae213..29866eb74f0cc6 100644 --- a/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h +++ b/packages/react-native/ReactCommon/cxxreact/ReactNativeVersion.h @@ -15,10 +15,10 @@ namespace facebook::react { constexpr struct { - int32_t Major = 1000; - int32_t Minor = 0; + int32_t Major = 0; + int32_t Minor = 73; int32_t Patch = 0; - std::string_view Prerelease = ""; + std::string_view Prerelease = "rc.4"; } ReactNativeVersion; } // namespace facebook::react diff --git a/packages/react-native/ReactCommon/hermes/executor/HermesExecutorFactory.cpp b/packages/react-native/ReactCommon/hermes/executor/HermesExecutorFactory.cpp index 8ae8766f5e3e84..58b56e83f0cc45 100644 --- a/packages/react-native/ReactCommon/hermes/executor/HermesExecutorFactory.cpp +++ b/packages/react-native/ReactCommon/hermes/executor/HermesExecutorFactory.cpp @@ -43,13 +43,16 @@ class HermesExecutorRuntimeAdapter } void tickleJs() override { - // The queue will ensure that runtime_ is still valid when this - // gets invoked. - thread_->runOnQueue([&runtime = runtime_]() { - auto func = - runtime->global().getPropertyAsFunction(*runtime, "__tickleJs"); - func.call(*runtime); - }); + thread_->runOnQueue( + [weakRuntime = std::weak_ptr(runtime_)]() { + auto runtime = weakRuntime.lock(); + if (!runtime) { + return; + } + jsi::Function func = + runtime->global().getPropertyAsFunction(*runtime, "__tickleJs"); + func.call(*runtime); + }); } private: diff --git a/packages/react-native/ReactCommon/jsinspector/.clang-tidy b/packages/react-native/ReactCommon/jsinspector/.clang-tidy deleted file mode 100644 index 9f33ef5a06d828..00000000000000 --- a/packages/react-native/ReactCommon/jsinspector/.clang-tidy +++ /dev/null @@ -1,6 +0,0 @@ ---- -Checks: '> -clang-diagnostic-*, -' -InheritParentConfig: true -... diff --git a/packages/react-native/ReactCommon/jsinspector/InspectorInterfaces.cpp b/packages/react-native/ReactCommon/jsinspector/InspectorInterfaces.cpp deleted file mode 100644 index 93ab7fad40db91..00000000000000 --- a/packages/react-native/ReactCommon/jsinspector/InspectorInterfaces.cpp +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -#include "InspectorInterfaces.h" - -#include -#include -#include - -namespace facebook::react { - -// pure destructors in C++ are odd. You would think they don't want an -// implementation, but in fact the linker requires one. Define them to be -// empty so that people don't count on them for any particular behaviour. -IDestructible::~IDestructible() {} -ILocalConnection::~ILocalConnection() {} -IRemoteConnection::~IRemoteConnection() {} -IInspector::~IInspector() {} - -namespace { - -class InspectorImpl : public IInspector { - public: - int addPage( - const std::string& title, - const std::string& vm, - ConnectFunc connectFunc) override; - void removePage(int pageId) override; - - std::vector getPages() const override; - std::unique_ptr connect( - int pageId, - std::unique_ptr remote) override; - - private: - mutable std::mutex mutex_; - int nextPageId_{1}; - std::unordered_map> titles_; - std::unordered_map connectFuncs_; -}; - -int InspectorImpl::addPage( - const std::string& title, - const std::string& vm, - ConnectFunc connectFunc) { - std::scoped_lock lock(mutex_); - - int pageId = nextPageId_++; - titles_[pageId] = std::make_tuple(title, vm); - connectFuncs_[pageId] = std::move(connectFunc); - - return pageId; -} - -void InspectorImpl::removePage(int pageId) { - std::scoped_lock lock(mutex_); - - titles_.erase(pageId); - connectFuncs_.erase(pageId); -} - -std::vector InspectorImpl::getPages() const { - std::scoped_lock lock(mutex_); - - std::vector inspectorPages; - for (auto& it : titles_) { - inspectorPages.push_back(InspectorPage{ - it.first, std::get<0>(it.second), std::get<1>(it.second)}); - } - - return inspectorPages; -} - -std::unique_ptr InspectorImpl::connect( - int pageId, - std::unique_ptr remote) { - IInspector::ConnectFunc connectFunc; - - { - std::scoped_lock lock(mutex_); - - auto it = connectFuncs_.find(pageId); - if (it != connectFuncs_.end()) { - connectFunc = it->second; - } - } - - return connectFunc ? connectFunc(std::move(remote)) : nullptr; -} - -} // namespace - -IInspector& getInspectorInstance() { - static InspectorImpl instance; - return instance; -} - -std::unique_ptr makeTestInspectorInstance() { - return std::make_unique(); -} - -} // namespace facebook::react diff --git a/packages/react-native/ReactCommon/jsinspector/InspectorInterfaces.h b/packages/react-native/ReactCommon/jsinspector/InspectorInterfaces.h deleted file mode 100644 index c92e41db907dea..00000000000000 --- a/packages/react-native/ReactCommon/jsinspector/InspectorInterfaces.h +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -#pragma once - -#include -#include -#include -#include - -#ifndef JSINSPECTOR_EXPORT -#ifdef _MSC_VER -#ifdef CREATE_SHARED_LIBRARY -#define JSINSPECTOR_EXPORT __declspec(dllexport) -#else -#define JSINSPECTOR_EXPORT -#endif // CREATE_SHARED_LIBRARY -#else // _MSC_VER -#define JSINSPECTOR_EXPORT __attribute__((visibility("default"))) -#endif // _MSC_VER -#endif // !defined(JSINSPECTOR_EXPORT) - -namespace facebook::react { - -class IDestructible { - public: - virtual ~IDestructible() = 0; -}; - -struct InspectorPage { - const int id; - const std::string title; - const std::string vm; -}; - -/// IRemoteConnection allows the VM to send debugger messages to the client. -class JSINSPECTOR_EXPORT IRemoteConnection : public IDestructible { - public: - virtual ~IRemoteConnection() = 0; - virtual void onMessage(std::string message) = 0; - virtual void onDisconnect() = 0; -}; - -/// ILocalConnection allows the client to send debugger messages to the VM. -class JSINSPECTOR_EXPORT ILocalConnection : public IDestructible { - public: - virtual ~ILocalConnection() = 0; - virtual void sendMessage(std::string message) = 0; - virtual void disconnect() = 0; -}; - -/// IInspector tracks debuggable JavaScript targets (pages). -class JSINSPECTOR_EXPORT IInspector : public IDestructible { - public: - using ConnectFunc = std::function( - std::unique_ptr)>; - - virtual ~IInspector() = 0; - - /// addPage is called by the VM to add a page to the list of debuggable pages. - virtual int addPage( - const std::string& title, - const std::string& vm, - ConnectFunc connectFunc) = 0; - - /// removePage is called by the VM to remove a page from the list of - /// debuggable pages. - virtual void removePage(int pageId) = 0; - - /// getPages is called by the client to list all debuggable pages. - virtual std::vector getPages() const = 0; - - /// connect is called by the client to initiate a debugging session on the - /// given page. - virtual std::unique_ptr connect( - int pageId, - std::unique_ptr remote) = 0; -}; - -/// getInspectorInstance retrieves the singleton inspector that tracks all -/// debuggable pages in this process. -extern IInspector& getInspectorInstance(); - -/// makeTestInspectorInstance creates an independent inspector instance that -/// should only be used in tests. -extern std::unique_ptr makeTestInspectorInstance(); - -} // namespace facebook::react diff --git a/packages/react-native/ReactCommon/react/bridging/Object.h b/packages/react-native/ReactCommon/react/bridging/Object.h index 599b5ceb935788..89e5714b798f0f 100644 --- a/packages/react-native/ReactCommon/react/bridging/Object.h +++ b/packages/react-native/ReactCommon/react/bridging/Object.h @@ -31,7 +31,7 @@ struct Bridging< std::shared_ptr, std::enable_if_t>> { static std::shared_ptr fromJs(jsi::Runtime& rt, const jsi::Object& value) { - return value.asHostObject(rt); + return value.getHostObject(rt); } static jsi::Object toJs(jsi::Runtime& rt, std::shared_ptr value) { diff --git a/packages/react-native/ReactCommon/react/renderer/attributedstring/conversions.h b/packages/react-native/ReactCommon/react/renderer/attributedstring/conversions.h index 9b562666bc7992..445e452e1f4d98 100644 --- a/packages/react-native/ReactCommon/react/renderer/attributedstring/conversions.h +++ b/packages/react-native/ReactCommon/react/renderer/attributedstring/conversions.h @@ -970,6 +970,7 @@ constexpr static MapBuffer::Key TA_KEY_LAYOUT_DIRECTION = 23; constexpr static MapBuffer::Key TA_KEY_ACCESSIBILITY_ROLE = 24; constexpr static MapBuffer::Key TA_KEY_LINE_BREAK_STRATEGY = 25; constexpr static MapBuffer::Key TA_KEY_ROLE = 26; +constexpr static MapBuffer::Key TA_KEY_TEXT_TRANSFORM = 27; // constants for ParagraphAttributes serialization constexpr static MapBuffer::Key PA_KEY_MAX_NUMBER_OF_LINES = 0; @@ -1077,6 +1078,11 @@ inline MapBuffer toMapBuffer(const TextAttributes& textAttributes) { TA_KEY_LINE_BREAK_STRATEGY, toString(*textAttributes.lineBreakStrategy)); } + if (textAttributes.textTransform.has_value()) { + builder.putString( + TA_KEY_TEXT_TRANSFORM, toString(*textAttributes.textTransform)); + } + // Decoration if (textAttributes.textDecorationColor) { builder.putInt( diff --git a/packages/react-native/ReactCommon/react/renderer/components/legacyviewmanagerinterop/LegacyViewManagerInteropComponentDescriptor.mm b/packages/react-native/ReactCommon/react/renderer/components/legacyviewmanagerinterop/LegacyViewManagerInteropComponentDescriptor.mm index df08d6e29fa899..5ecfdce4ee0bc0 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/legacyviewmanagerinterop/LegacyViewManagerInteropComponentDescriptor.mm +++ b/packages/react-native/ReactCommon/react/renderer/components/legacyviewmanagerinterop/LegacyViewManagerInteropComponentDescriptor.mm @@ -8,6 +8,7 @@ #include "LegacyViewManagerInteropComponentDescriptor.h" #include #include +#include #include #include #include @@ -73,19 +74,45 @@ static Class getViewManagerFromComponentName(const std::string &componentName) return nil; } +static Class getViewManagerClass(const std::string &componentName, RCTBridge *bridge, RCTBridgeProxy *bridgeProxy) +{ + Class viewManager = getViewManagerFromComponentName(componentName); + if (viewManager != nil) { + return viewManager; + } + + // If all the heuristics fail, let's try to retrieve the view manager from the bridge/bridgeProxy + if (bridge != nil) { + return [[bridge moduleForName:RCTNSStringFromString(componentName)] class]; + } + + if (bridgeProxy != nil) { + return [[bridgeProxy moduleForName:RCTNSStringFromString(componentName) lazilyLoadIfNecessary:YES] class]; + } + + return nil; +} + static const std::shared_ptr constructCoordinator( const ContextContainer::Shared &contextContainer, const ComponentDescriptor::Flavor &flavor) { - auto componentName = *std::static_pointer_cast(flavor); - Class viewManagerClass = getViewManagerFromComponentName(componentName); - assert(viewManagerClass); auto optionalBridge = contextContainer->find>("Bridge"); RCTBridge *bridge; if (optionalBridge) { bridge = unwrapManagedObjectWeakly(optionalBridge.value()); } + RCTBridgeProxy *bridgeProxy; + auto optionalBridgeProxy = contextContainer->find>("RCTBridgeProxy"); + if (optionalBridgeProxy) { + bridgeProxy = unwrapManagedObjectWeakly(optionalBridgeProxy.value()); + } + + auto componentName = *std::static_pointer_cast(flavor); + Class viewManagerClass = getViewManagerClass(componentName, bridge, bridgeProxy); + assert(viewManagerClass); + auto optionalEventDispatcher = contextContainer->find>("RCTEventDispatcher"); RCTEventDispatcher *eventDispatcher; if (optionalEventDispatcher) { @@ -104,6 +131,7 @@ static Class getViewManagerFromComponentName(const std::string &componentName) return wrapManagedObject([[RCTLegacyViewManagerInteropCoordinator alloc] initWithComponentData:componentData bridge:bridge + bridgeProxy:bridgeProxy bridgelessInteropData:bridgeModuleDecorator]); } diff --git a/packages/react-native/ReactCommon/react/renderer/components/legacyviewmanagerinterop/RCTLegacyViewManagerInteropCoordinator.h b/packages/react-native/ReactCommon/react/renderer/components/legacyviewmanagerinterop/RCTLegacyViewManagerInteropCoordinator.h index 2981a75f56d402..5f6935c9764e92 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/legacyviewmanagerinterop/RCTLegacyViewManagerInteropCoordinator.h +++ b/packages/react-native/ReactCommon/react/renderer/components/legacyviewmanagerinterop/RCTLegacyViewManagerInteropCoordinator.h @@ -14,13 +14,15 @@ NS_ASSUME_NONNULL_BEGIN @class RCTComponentData; @class RCTBridge; +@class RCTBridgeProxy; typedef void (^InterceptorBlock)(std::string eventName, folly::dynamic event); @interface RCTLegacyViewManagerInteropCoordinator : NSObject - (instancetype)initWithComponentData:(RCTComponentData *)componentData - bridge:(RCTBridge *)bridge + bridge:(nullable RCTBridge *)bridge + bridgeProxy:(nullable RCTBridgeProxy *)bridgeProxy bridgelessInteropData:(RCTBridgeModuleDecorator *)bridgelessInteropData; - (RCTPlatformView *)createPaperViewWithTag:(NSInteger)tag; // [macOS] diff --git a/packages/react-native/ReactCommon/react/renderer/components/legacyviewmanagerinterop/RCTLegacyViewManagerInteropCoordinator.mm b/packages/react-native/ReactCommon/react/renderer/components/legacyviewmanagerinterop/RCTLegacyViewManagerInteropCoordinator.mm index 268dc6f94bd07a..7112ad98b94099 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/legacyviewmanagerinterop/RCTLegacyViewManagerInteropCoordinator.mm +++ b/packages/react-native/ReactCommon/react/renderer/components/legacyviewmanagerinterop/RCTLegacyViewManagerInteropCoordinator.mm @@ -8,6 +8,7 @@ #include "RCTLegacyViewManagerInteropCoordinator.h" #include #include +#include #include #include #include @@ -16,6 +17,7 @@ #include #include #include +#include #include #include @@ -25,6 +27,8 @@ @implementation RCTLegacyViewManagerInteropCoordinator { RCTComponentData *_componentData; __weak RCTBridge *_bridge; __weak RCTBridgeModuleDecorator *_bridgelessInteropData; + __weak RCTBridgeProxy *_bridgeProxy; + /* Each instance of `RCTLegacyViewManagerInteropComponentView` registers a block to which events are dispatched. This is the container that maps unretained UIView pointer to a block to which the event is dispatched. @@ -40,13 +44,16 @@ @implementation RCTLegacyViewManagerInteropCoordinator { } - (instancetype)initWithComponentData:(RCTComponentData *)componentData - bridge:(RCTBridge *)bridge + bridge:(nullable RCTBridge *)bridge + bridgeProxy:(nullable RCTBridgeProxy *)bridgeProxy bridgelessInteropData:(RCTBridgeModuleDecorator *)bridgelessInteropData; { if (self = [super init]) { _componentData = componentData; _bridge = bridge; _bridgelessInteropData = bridgelessInteropData; + _bridgeProxy = bridgeProxy; + if (bridgelessInteropData) { // During bridge mode, RCTBridgeModules will be decorated with these APIs by the bridge. RCTAssert( @@ -62,7 +69,9 @@ - (instancetype)initWithComponentData:(RCTComponentData *)componentData if (strongSelf) { InterceptorBlock block = [strongSelf->_eventInterceptors objectForKey:reactTag]; if (block) { - block(std::string([RCTNormalizeInputEventName(eventName) UTF8String]), convertIdToFollyDynamic(event ?: @{})); + block( + std::string([RCTNormalizeInputEventName(eventName) UTF8String]), + convertIdToFollyDynamic(event ? event : @{})); } } }; @@ -92,6 +101,10 @@ - (void)setProps:(const folly::dynamic &)props forView:(RCTPlatformView *)view / if (props.isObject()) { NSDictionary *convertedProps = convertFollyDynamicToId(props); [_componentData setProps:convertedProps forView:view]; + + if ([view respondsToSelector:@selector(didSetProps:)]) { + [view performSelector:@selector(didSetProps:) withObject:[convertedProps allKeys]]; + } } } @@ -131,15 +144,9 @@ - (void)handleCommand:(NSString *)commandName NSArray *newArgs = [@[ [NSNumber numberWithInteger:tag] ] arrayByAddingObjectsFromArray:args]; if (_bridge) { - [_bridge.batchedBridge - dispatchBlock:^{ - [method invokeWithBridge:self->_bridge module:self->_componentData.manager arguments:newArgs]; - [self->_bridge.uiManager setNeedsLayout]; - } - queue:RCTGetUIManagerQueue()]; + [self _handleCommandsOnBridge:method withArgs:newArgs]; } else { - // TODO T86826778 - Figure out which queue this should be dispatched to. - [method invokeWithBridge:nil module:self->_componentData.manager arguments:newArgs]; + [self _handleCommandsOnBridgeless:method withArgs:newArgs]; } } @@ -169,8 +176,37 @@ - (void)removeViewFromRegistryWithTag:(NSInteger)tag } #pragma mark - Private +- (void)_handleCommandsOnBridge:(id)method withArgs:(NSArray *)newArgs +{ + [_bridge.batchedBridge + dispatchBlock:^{ + [method invokeWithBridge:self->_bridge module:self->_componentData.manager arguments:newArgs]; + [self->_bridge.uiManager setNeedsLayout]; + } + queue:RCTGetUIManagerQueue()]; +} + +- (void)_handleCommandsOnBridgeless:(id)method withArgs:(NSArray *)newArgs +{ + RCTViewManager *componentViewManager = self->_componentData.manager; + [componentViewManager setValue:_bridgeProxy forKey:@"bridge"]; + + [self->_bridgeProxy.uiManager + addUIBlock:^(RCTUIManager *uiManager, NSDictionary *viewRegistry) { + [method invokeWithBridge:nil module:componentViewManager arguments:newArgs]; + }]; +} - (void)_addUIBlock:(RCTViewManagerUIBlock)block +{ + if (_bridge) { + [self _addUIBlockOnBridge:block]; + } else { + [self->_bridgeProxy.uiManager addUIBlock:block]; + } +} + +- (void)_addUIBlockOnBridge:(RCTViewManagerUIBlock)block { __weak __typeof__(self) weakSelf = self; [_bridge.batchedBridge diff --git a/packages/react-native/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTInstance.mm b/packages/react-native/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTInstance.mm index 4783e8ba7ac95c..64a0b1e186bba6 100644 --- a/packages/react-native/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTInstance.mm +++ b/packages/react-native/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTInstance.mm @@ -227,24 +227,23 @@ - (void)_start RuntimeExecutor bufferedRuntimeExecutor = _reactInstance->getBufferedRuntimeExecutor(); timerManager->setRuntimeExecutor(bufferedRuntimeExecutor); - RCTBridgeProxy *bridgeProxy = RCTTurboModuleInteropEnabled() && RCTTurboModuleInteropBridgeProxyEnabled() - ? [[RCTBridgeProxy alloc] initWithViewRegistry:_bridgeModuleDecorator.viewRegistry_DEPRECATED - moduleRegistry:_bridgeModuleDecorator.moduleRegistry - bundleManager:_bridgeModuleDecorator.bundleManager - callableJSModules:_bridgeModuleDecorator.callableJSModules - dispatchToJSThread:^(dispatch_block_t block) { - __strong __typeof(self) strongSelf = weakSelf; - if (strongSelf && strongSelf->_valid) { - strongSelf->_reactInstance->getBufferedRuntimeExecutor()([=](jsi::Runtime &runtime) { block(); }); - } + RCTBridgeProxy *bridgeProxy = + [[RCTBridgeProxy alloc] initWithViewRegistry:_bridgeModuleDecorator.viewRegistry_DEPRECATED + moduleRegistry:_bridgeModuleDecorator.moduleRegistry + bundleManager:_bridgeModuleDecorator.bundleManager + callableJSModules:_bridgeModuleDecorator.callableJSModules + dispatchToJSThread:^(dispatch_block_t block) { + __strong __typeof(self) strongSelf = weakSelf; + if (strongSelf && strongSelf->_valid) { + strongSelf->_reactInstance->getBufferedRuntimeExecutor()([=](jsi::Runtime &runtime) { block(); }); } - registerSegmentWithId:^(NSNumber *segmentId, NSString *path) { - __strong __typeof(self) strongSelf = weakSelf; - if (strongSelf && strongSelf->_valid) { - [strongSelf registerSegmentWithId:segmentId path:path]; - } - }] - : nil; + } + registerSegmentWithId:^(NSNumber *segmentId, NSString *path) { + __strong __typeof(self) strongSelf = weakSelf; + if (strongSelf && strongSelf->_valid) { + [strongSelf registerSegmentWithId:segmentId path:path]; + } + }]; // Set up TurboModules _turboModuleManager = [[RCTTurboModuleManager alloc] @@ -269,6 +268,7 @@ - (void)_start facebook::react::wrapManagedObject([_turboModuleManager moduleForName:"RCTEventDispatcher"])); contextContainer->insert("RCTBridgeModuleDecorator", facebook::react::wrapManagedObject(_bridgeModuleDecorator)); contextContainer->insert("RuntimeScheduler", std::weak_ptr(_reactInstance->getRuntimeScheduler())); + contextContainer->insert("RCTBridgeProxy", facebook::react::wrapManagedObject(bridgeProxy)); _surfacePresenter = [[RCTSurfacePresenter alloc] initWithContextContainer:contextContainer diff --git a/packages/react-native/gradle/libs.versions.toml b/packages/react-native/gradle/libs.versions.toml index 85876f065cda7b..de80b09d068505 100644 --- a/packages/react-native/gradle/libs.versions.toml +++ b/packages/react-native/gradle/libs.versions.toml @@ -16,7 +16,7 @@ assertj = "3.21.0" download = "5.4.0" fbjni = "0.5.1" flipper = "0.201.0" -fresco = "3.0.0" +fresco = "3.1.3" infer-annotation = "0.18.0" javax-inject = "1" jsr305 = "3.0.2" diff --git a/packages/react-native/package.json b/packages/react-native/package.json index e74c5eec48a66a..a13fbedfcbd9d1 100644 --- a/packages/react-native/package.json +++ b/packages/react-native/package.json @@ -1,6 +1,6 @@ { "name": "react-native-macos", - "version": "1000.0.0", + "version": "0.73.0-rc.4", "description": "React Native for macOS", "license": "MIT", "repository": { @@ -94,29 +94,29 @@ }, "dependencies": { "@jest/create-cache-key-function": "^29.6.3", - "@react-native-community/cli": "12.0.0-alpha.15", - "@react-native-community/cli-platform-android": "12.0.0-alpha.15", - "@react-native-community/cli-platform-ios": "12.0.0-alpha.15", - "@react-native/assets-registry": "^0.73.0", - "@react-native/community-cli-plugin": "^0.73.0", - "@react-native/codegen": "^0.73.0", - "@react-native/gradle-plugin": "^0.73.0", - "@react-native/js-polyfills": "^0.73.0", - "@react-native/normalize-colors": "^0.73.0", - "@react-native-mac/virtualized-lists": "^0.73.0", + "@react-native-community/cli": "12.0.0", + "@react-native-community/cli-platform-android": "12.0.0", + "@react-native-community/cli-platform-ios": "12.0.0", + "@react-native/assets-registry": "^0.73.1", + "@react-native/community-cli-plugin": "^0.73.8", + "@react-native/codegen": "^0.73.1", + "@react-native/gradle-plugin": "^0.73.3", + "@react-native/js-polyfills": "^0.73.1", + "@react-native/normalize-colors": "^0.73.2", + "@react-native-mac/virtualized-lists": "^0.73.3", "abort-controller": "^3.0.0", "anser": "^1.4.9", "ansi-regex": "^5.0.0", "base64-js": "^1.5.1", - "deprecated-react-native-prop-types": "4.2.1", + "deprecated-react-native-prop-types": "^5.0.0", "event-target-shim": "^5.0.1", "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", "jest-environment-node": "^29.6.3", "jsc-android": "^250231.0.0", "memoize-one": "^5.0.0", - "metro-runtime": "0.79.1", - "metro-source-map": "0.79.1", + "metro-runtime": "^0.80.0", + "metro-source-map": "^0.80.0", "mkdirp": "^0.5.1", "nullthrows": "^1.1.1", "pretty-format": "^26.5.2", diff --git a/packages/react-native/scripts/cocoapods/__tests__/utils-test.rb b/packages/react-native/scripts/cocoapods/__tests__/utils-test.rb index 89de036c170e9a..4c57727fa8f466 100644 --- a/packages/react-native/scripts/cocoapods/__tests__/utils-test.rb +++ b/packages/react-native/scripts/cocoapods/__tests__/utils-test.rb @@ -613,7 +613,7 @@ def test_applyXcode15Patch_whenXcodebuild15_correctlyAppliesNecessaryPatch # Assert user_project_mock.build_configurations.each do |config| - assert_equal("$(inherited) -Wl -ld_classic ", config.build_settings["OTHER_LDFLAGS"]) + assert_equal("$(inherited) -Wl -ld_classic", config.build_settings["OTHER_LDFLAGS"]) end # User project and Pods project @@ -662,7 +662,7 @@ def test_applyXcode15Patch_whenXcodebuild14ButProjectHasSettings_correctlyRemove # Assert user_project_mock.build_configurations.each do |config| - assert_equal("$(inherited) ", config.build_settings["OTHER_LDFLAGS"]) + assert_equal("$(inherited)", config.build_settings["OTHER_LDFLAGS"]) end # User project and Pods project diff --git a/packages/react-native/scripts/cocoapods/utils.rb b/packages/react-native/scripts/cocoapods/utils.rb index 2cf986c48b2af9..f837cf7941f3b7 100644 --- a/packages/react-native/scripts/cocoapods/utils.rb +++ b/packages/react-native/scripts/cocoapods/utils.rb @@ -76,7 +76,7 @@ def self.exclude_i386_architecture_while_using_hermes(installer) excluded_archs_includes_I386 = current_setting.include?("i386") if !excluded_archs_includes_I386 - # Hermes does not support `i386` architecture + # Hermes does not support 'i386' architecture config.build_settings[key] = "#{current_setting} i386".strip end end @@ -291,33 +291,17 @@ def self.update_search_paths(installer) end def self.updateOSDeploymentTarget(installer) - pod_to_update = Set.new([ - "boost", - "CocoaAsyncSocket", - "Flipper", - "Flipper-DoubleConversion", - "Flipper-Fmt", - "Flipper-Boost-iOSX", - "Flipper-Folly", - "Flipper-Glog", - "Flipper-PeerTalk", - "FlipperKit", - "fmt", - "libevent", - "OpenSSL-Universal", - "RCT-Folly", - "SocketRocket", - "YogaKit" - ]) - installer.target_installation_results.pod_target_installation_results .each do |pod_name, target_installation_result| - unless pod_to_update.include?(pod_name) - next - end target_installation_result.native_target.build_configurations.each do |config| - config.build_settings["IPHONEOS_DEPLOYMENT_TARGET"] = Helpers::Constants.min_ios_version_supported - config.build_settings["MACOSX_DEPLOYMENT_TARGET"] = Helpers::Constants.min_ios_version_supported # [macOS] + old_iphone_deploy_target = config.build_settings["IPHONEOS_DEPLOYMENT_TARGET"] ? + config.build_settings["IPHONEOS_DEPLOYMENT_TARGET"] : + Helpers::Constants.min_ios_version_supported + config.build_settings["IPHONEOS_DEPLOYMENT_TARGET"] = [Helpers::Constants.min_ios_version_supported.to_f, old_iphone_deploy_target.to_f].max.to_s + old_macos_deploy_target = config.build_settings["MACOSX_DEPLOYMENT_TARGET"] ? + config.build_settings["MACOSX_DEPLOYMENT_TARGET"] : + Helpers::Constants.min_macos_version_supported + config.build_settings["MACOSX_DEPLOYMENT_TARGET"] = [Helpers::Constants.min_macos_version_supported.to_f, old_macos_deploy_target.to_f].max.to_s end end end @@ -342,20 +326,26 @@ def self.safe_init(config, setting_name) def self.add_value_to_setting_if_missing(config, setting_name, value) old_config = config.build_settings[setting_name] - if !old_config.include?(value) - config.build_settings[setting_name] << value + if old_config.is_a?(Array) + old_config = old_config.join(" ") + end + + trimmed_value = value.strip() + if !old_config.include?(trimmed_value) + config.build_settings[setting_name] = "#{old_config.strip()} #{trimmed_value}".strip() end end def self.remove_value_to_setting_if_present(config, setting_name, value) old_config = config.build_settings[setting_name] - if old_config.include?(value) - # Old config can be either an Array or a String - if old_config.is_a?(Array) - old_config = old_config.join(" ") - end - new_config = old_config.gsub(value, "") - config.build_settings[setting_name] = new_config + if old_config.is_a?(Array) + old_config = old_config.join(" ") + end + + trimmed_value = value.strip() + if old_config.include?(trimmed_value) + new_config = old_config.gsub(trimmed_value, "") + config.build_settings[setting_name] = new_config.strip() end end diff --git a/packages/react-native/scripts/codegen/generate-legacy-interop-components.js b/packages/react-native/scripts/codegen/generate-legacy-interop-components.js index 49ac074c91644d..fc94a96080cd1e 100644 --- a/packages/react-native/scripts/codegen/generate-legacy-interop-components.js +++ b/packages/react-native/scripts/codegen/generate-legacy-interop-components.js @@ -11,6 +11,7 @@ const yargs = require('yargs'); const fs = require('fs'); +const p = require('path'); const CONFIG_FILE_NAME = 'react-native.config.js'; const PROJECT_FIELD = 'project'; @@ -93,7 +94,11 @@ function extractComponentsNames(reactNativeConfig) { } function generateRCTLegacyInteropComponents() { - const configFilePath = `${appRoot}/${CONFIG_FILE_NAME}`; + const cwd = process.cwd(); + const configFilePath = p.join(cwd, appRoot, CONFIG_FILE_NAME); + console.log( + `Looking for a react-native.config.js file at ${configFilePath}...`, + ); let reactNativeConfig = null; try { reactNativeConfig = require(configFilePath); @@ -107,7 +112,7 @@ function generateRCTLegacyInteropComponents() { console.log('Skip LegacyInterop generation'); return; } - + console.log(`Components found: ${componentNames}`); let componentsArray = componentNames.map(name => `\t\t\t@"${name}",`); // Remove the last comma if (componentsArray.length > 0) { @@ -118,6 +123,7 @@ function generateRCTLegacyInteropComponents() { const filePath = `${outputPath}/${OUTPUT_FILE_NAME}`; fs.writeFileSync(filePath, fileBody(componentsArray.join('\n'))); + console.log(`${filePath} updated!`); } generateRCTLegacyInteropComponents(); diff --git a/packages/react-native/scripts/react_native_pods.rb b/packages/react-native/scripts/react_native_pods.rb index a8d5ce4ee8474b..4a97e2d316ebc3 100644 --- a/packages/react-native/scripts/react_native_pods.rb +++ b/packages/react-native/scripts/react_native_pods.rb @@ -268,7 +268,7 @@ def react_native_post_install( flipper_post_install(installer) end - fabric_enabled = ReactNativePodsUtils.has_pod(installer, 'React-Fabric') + fabric_enabled = ENV['RCT_FABRIC_ENABLED'] == '1' hermes_enabled = ReactNativePodsUtils.has_pod(installer, "React-hermes") if hermes_enabled diff --git a/packages/react-native/sdks/.hermesversion b/packages/react-native/sdks/.hermesversion new file mode 100644 index 00000000000000..a612ccf72e73ab --- /dev/null +++ b/packages/react-native/sdks/.hermesversion @@ -0,0 +1 @@ +hermes-2023-09-26-RNv0.73.0-ee2922a50fb719bdb378025d95dbd32ad93cd679 \ No newline at end of file diff --git a/packages/react-native/sdks/hermes-engine/hermes-engine.podspec b/packages/react-native/sdks/hermes-engine/hermes-engine.podspec index 8fd33af931a9d7..c7e22ddf572225 100644 --- a/packages/react-native/sdks/hermes-engine/hermes-engine.podspec +++ b/packages/react-native/sdks/hermes-engine/hermes-engine.podspec @@ -60,7 +60,13 @@ Pod::Spec.new do |spec| :execution_position => :before_compile, :script => <<-EOS . "$REACT_NATIVE_PATH/scripts/xcode/with-environment.sh" - "$NODE_BINARY" "$REACT_NATIVE_PATH/sdks/hermes-engine/utils/replace_hermes_version.js" -c "$CONFIGURATION" -r "#{version}" -p "$REACT_NATIVE_PATH" + + CONFIG="Release" + if echo $GCC_PREPROCESSOR_DEFINITIONS | grep -q "DEBUG=1"; then + CONFIG="Debug" + fi + + "$NODE_BINARY" "$REACT_NATIVE_PATH/sdks/hermes-engine/utils/replace_hermes_version.js" -c "$CONFIG" -r "#{version}" -p "$PODS_ROOT" EOS } end diff --git a/packages/react-native/sdks/hermes-engine/hermes-utils.rb b/packages/react-native/sdks/hermes-engine/hermes-utils.rb index b3a28250b07a86..8c2f4f6c665a83 100644 --- a/packages/react-native/sdks/hermes-engine/hermes-utils.rb +++ b/packages/react-native/sdks/hermes-engine/hermes-utils.rb @@ -125,7 +125,7 @@ def podspec_source_build_from_local_source_dir(react_native_path) source_dir_path = ENV['REACT_NATIVE_OVERRIDE_HERMES_DIR'] if Dir.exist?(source_dir_path) hermes_log("Using source code from local path: #{source_dir_path}") - tarball_path = File.join(react_native_path, "sdks", "hermes-engine", "hermes-engine-from-local-source-dir.tar.gz") + tarball_path = File.join(artifacts_dir(), "hermes-engine-from-local-source-dir.tar.gz") exclude_paths = [ "__tests__", "./external/flowtest", @@ -192,6 +192,10 @@ def podspec_source_download_prebuilt_nightly_tarball(version) # HELPERS +def artifacts_dir() + return File.join(Pod::Config.instance.project_pods_root, "hermes-engine-artifacts") +end + def hermestag_file(react_native_path) return File.join(react_native_path, "sdks", ".hermesversion") end @@ -208,15 +212,14 @@ def download_stable_hermes(react_native_path, version, configuration) end def download_hermes_tarball(react_native_path, tarball_url, version, configuration) - destination_folder = "#{react_native_path}/sdks/downloads" destination_path = configuration == nil ? - "#{destination_folder}/hermes-ios-#{version}.tar.gz" : - "#{destination_folder}/hermes-ios-#{version}-#{configuration}.tar.gz" + "#{artifacts_dir()}/hermes-ios-#{version}.tar.gz" : + "#{artifacts_dir()}/hermes-ios-#{version}-#{configuration}.tar.gz" unless File.exist?(destination_path) # Download to a temporary file first so we don't cache incomplete downloads. - tmp_file = "#{destination_folder}/hermes-ios.download" - `mkdir -p "#{destination_folder}" && curl "#{tarball_url}" -Lo "#{tmp_file}" && mv "#{tmp_file}" "#{destination_path}"` + tmp_file = "#{artifacts_dir()}/hermes-ios.download" + `mkdir -p "#{artifacts_dir()}" && curl "#{tarball_url}" -Lo "#{tmp_file}" && mv "#{tmp_file}" "#{destination_path}"` end return destination_path end diff --git a/packages/react-native/sdks/hermes-engine/utils/replace_hermes_version.js b/packages/react-native/sdks/hermes-engine/utils/replace_hermes_version.js index ce1bb48f542bd8..116ae680d99d14 100644 --- a/packages/react-native/sdks/hermes-engine/utils/replace_hermes_version.js +++ b/packages/react-native/sdks/hermes-engine/utils/replace_hermes_version.js @@ -52,8 +52,8 @@ function shouldReplaceHermesConfiguration(configuration) { return true; } -function replaceHermesConfiguration(configuration, version, reactNativePath) { - const tarballURLPath = `${reactNativePath}/sdks/downloads/hermes-ios-${version}-${configuration}.tar.gz`; +function replaceHermesConfiguration(configuration, version, podsRoot) { + const tarballURLPath = `${podsRoot}/hermes-engine-artifacts/hermes-ios-${version}-${configuration}.tar.gz`; const finalLocation = 'hermes-engine'; console.log('Preparing the final location'); @@ -68,7 +68,7 @@ function updateLastBuildConfiguration(configuration) { fs.writeFileSync(LAST_BUILD_FILENAME, configuration); } -function main(configuration, version, reactNativePath) { +function main(configuration, version, podsRoot) { validateBuildConfiguration(configuration); validateVersion(version); @@ -76,7 +76,7 @@ function main(configuration, version, reactNativePath) { return; } - replaceHermesConfiguration(configuration, version, reactNativePath); + replaceHermesConfiguration(configuration, version, podsRoot); updateLastBuildConfiguration(configuration); console.log('Done replacing hermes-engine'); } @@ -94,13 +94,13 @@ const argv = yargs 'The Version of React Native associated with the Hermes tarball.', }) .option('p', { - alias: 'reactNativePath', - description: 'The path to the React Native root folder', + alias: 'podsRoot', + description: 'The path to the Pods root folder', }) .usage('Usage: $0 -c Debug -r -p ').argv; const configuration = argv.configuration; const version = argv.reactNativeVersion; -const reactNativePath = argv.reactNativePath; +const podsRoot = argv.podsRoot; -main(configuration, version, reactNativePath); +main(configuration, version, podsRoot); diff --git a/packages/react-native/template/Gemfile b/packages/react-native/template/Gemfile index 1fa2c2e1abdee6..6a7d5c7a49c357 100644 --- a/packages/react-native/template/Gemfile +++ b/packages/react-native/template/Gemfile @@ -3,4 +3,5 @@ source 'https://rubygems.org' # You may use http://rbenv.org/ or https://rvm.io/ to install and use this version ruby ">= 2.6.10" -gem 'cocoapods', '~> 1.12' +gem 'cocoapods', '~> 1.13' +gem 'activesupport', '>= 6.1.7.3', '< 7.1.0' diff --git a/packages/react-native/template/android/app/build.gradle b/packages/react-native/template/android/app/build.gradle index 94222a1e807ac6..86512f88a4a693 100644 --- a/packages/react-native/template/android/app/build.gradle +++ b/packages/react-native/template/android/app/build.gradle @@ -71,7 +71,7 @@ def jscFlavor = 'org.webkit:android-jsc:+' android { ndkVersion rootProject.ext.ndkVersion - + buildToolsVersion rootProject.ext.buildToolsVersion compileSdk rootProject.ext.compileSdkVersion namespace "com.helloworld" diff --git a/packages/react-native/template/android/app/src/main/java/com/helloworld/MainApplication.kt b/packages/react-native/template/android/app/src/main/java/com/helloworld/MainApplication.kt index 77a64826ad98c7..1c38e10c0f7da6 100644 --- a/packages/react-native/template/android/app/src/main/java/com/helloworld/MainApplication.kt +++ b/packages/react-native/template/android/app/src/main/java/com/helloworld/MainApplication.kt @@ -3,9 +3,11 @@ package com.helloworld import android.app.Application import com.facebook.react.PackageList import com.facebook.react.ReactApplication +import com.facebook.react.ReactHost import com.facebook.react.ReactNativeHost import com.facebook.react.ReactPackage import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load +import com.facebook.react.defaults.DefaultReactHost.getDefaultReactHost import com.facebook.react.defaults.DefaultReactNativeHost import com.facebook.react.flipper.ReactNativeFlipper import com.facebook.soloader.SoLoader @@ -28,6 +30,9 @@ class MainApplication : Application(), ReactApplication { override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED } + override val reactHost: ReactHost + get() = getDefaultReactHost(this.applicationContext, reactNativeHost) + override fun onCreate() { super.onCreate() SoLoader.init(this, false) diff --git a/packages/react-native/template/index.js b/packages/react-native/template/index.js index cd33b74bb3aa34..a850d031de7911 100644 --- a/packages/react-native/template/index.js +++ b/packages/react-native/template/index.js @@ -6,13 +6,4 @@ import {AppRegistry} from 'react-native'; import App from './App'; import {name as appName} from './app.json'; -if (global.RN$Bridgeless) { - require('react-native/Libraries/NativeComponent/NativeComponentRegistry').setRuntimeConfigProvider( - name => { - // In bridgeless mode, never load native ViewConfig. - return {native: false, strict: false, verify: false}; - }, - ); -} - AppRegistry.registerComponent(appName, () => App); diff --git a/packages/react-native/template/package.json b/packages/react-native/template/package.json index c7bbde7ba18082..c06768658d7ae1 100644 --- a/packages/react-native/template/package.json +++ b/packages/react-native/template/package.json @@ -12,16 +12,16 @@ }, "dependencies": { "react": "18.2.0", - "react-native-macos": "1000.0.0" + "react-native-macos": "0.73.0-rc.4" }, "devDependencies": { "@babel/core": "^7.20.0", "@babel/preset-env": "^7.20.0", "@babel/runtime": "^7.20.0", - "@react-native/babel-preset": "^0.73.16", - "@react-native/eslint-config": "^0.73.0", - "@react-native/metro-config": "^0.73.0", - "@react-native/typescript-config": "^0.73.0", + "@react-native/babel-preset": "^0.73.18", + "@react-native/eslint-config": "^0.73.1", + "@react-native/metro-config": "^0.73.2", + "@react-native/typescript-config": "^0.73.1", "@types/react": "^18.2.6", "@types/react-test-renderer": "^18.0.0", "babel-jest": "^29.6.3", diff --git a/packages/react-native/third-party-podspecs/glog.podspec b/packages/react-native/third-party-podspecs/glog.podspec index 7fbf939939a5be..f921ec63cdb1d1 100644 --- a/packages/react-native/third-party-podspecs/glog.podspec +++ b/packages/react-native/third-party-podspecs/glog.podspec @@ -29,10 +29,23 @@ Pod::Spec.new do |spec| 'src/base/*.h' spec.exclude_files = "src/windows/**/*" spec.compiler_flags = '-Wno-shorten-64-to-32' + + # TODO: T167482718 Remove this code after April 2024, when Apple will + # push the lower version of Xcode required to upload apps to the Store. + xcode_path = `xcodebuild -version` # This return the current version of Xcode + + match = xcode_path.match(/Xcode (\d+)\.(\d+)/) + major_version = match[1].to_i + minor_version = match[2].to_i + is_greater_than_15 = major_version >= 15 + is_greater_than_14_3 = major_version == 14 && minor_version >= 3 + should_define_modules = is_greater_than_15 ? "YES" : is_greater_than_14_3 ? "YES" : "NO" + # End TODO. + spec.pod_target_xcconfig = { "USE_HEADERMAP" => "NO", "HEADER_SEARCH_PATHS" => "$(PODS_TARGET_SRCROOT)/src", - "DEFINES_MODULE" => "YES" + "DEFINES_MODULE" => should_define_modules # When the workaround is removed, set this var to "YES" } # Pinning to the same version as React.podspec. diff --git a/packages/rn-tester/Gemfile b/packages/rn-tester/Gemfile index a66fd6c04cbc12..4de6c10e5d6df3 100644 --- a/packages/rn-tester/Gemfile +++ b/packages/rn-tester/Gemfile @@ -3,3 +3,4 @@ source 'https://rubygems.org' gem 'cocoapods', '~> 1.12' gem 'rexml' +gem 'activesupport', '>= 6.1.7.3', '< 7.1.0' diff --git a/packages/rn-tester/NativeComponentExample/js/MyNativeView.js b/packages/rn-tester/NativeComponentExample/js/MyNativeView.js index c74c0f084e7648..fe32899209e87a 100644 --- a/packages/rn-tester/NativeComponentExample/js/MyNativeView.js +++ b/packages/rn-tester/NativeComponentExample/js/MyNativeView.js @@ -87,6 +87,7 @@ export default function MyNativeView(props: {}): React.Node { const ref = useRef | null>(null); const legacyRef = useRef | null>(null); const [opacity, setOpacity] = useState(1.0); + const [arrayValues, setArrayValues] = useState([1, 2, 3]); const [hsba, setHsba] = useState(new HSBA()); const [cornerRadiusIndex, setCornerRadiusIndex] = useState(0); const [legacyMeasure, setLegacyMeasure] = @@ -102,7 +103,7 @@ export default function MyNativeView(props: {}): React.Node { ref={ref} style={{flex: 1}} opacity={opacity} - values={[0, 1, 2, 3, 4]} + values={arrayValues} onIntArrayChanged={event => { console.log(event.nativeEvent.values); console.log(event.nativeEvent.boolValues); @@ -154,6 +155,11 @@ export default function MyNativeView(props: {}): React.Node { title="Set Opacity" onPress={() => { setOpacity(Math.random()); + setArrayValues([ + Math.floor(Math.random() * 100), + Math.floor(Math.random() * 100), + Math.floor(Math.random() * 100), + ]); }} />