diff --git a/public/Images/Images.js b/public/Images/Images.js
index ab1279c4c..3cc610c8d 100644
--- a/public/Images/Images.js
+++ b/public/Images/Images.js
@@ -192,6 +192,7 @@ style.setProperty('--image-file-mop', 'url(\"' + new URL(new URL('mop.svg', impo
style.setProperty('--image-file-mouse', 'url(\"' + new URL(new URL('mouse.svg', import.meta.url).href, import.meta.url).toString() + '\")');
style.setProperty('--image-file-network-settings', 'url(\"' + new URL(new URL('network-settings.svg', import.meta.url).href, import.meta.url).toString() + '\")');
style.setProperty('--image-file-open-externally', 'url(\"' + new URL(new URL('open-externally.svg', import.meta.url).href, import.meta.url).toString() + '\")');
+style.setProperty('--image-file-pause-circle', 'url(\"' + new URL(new URL('pause-circle.svg', import.meta.url).href, import.meta.url).toString() + '\")');
style.setProperty('--image-file-pause', 'url(\"' + new URL(new URL('pause.svg', import.meta.url).href, import.meta.url).toString() + '\")');
style.setProperty('--image-file-pen-spark', 'url(\"' + new URL(new URL('pen-spark.svg', import.meta.url).href, import.meta.url).toString() + '\")');
style.setProperty('--image-file-performance-panel-diagram', 'url(\"' + new URL(new URL('performance-panel-diagram.svg', import.meta.url).href, import.meta.url).toString() + '\")');
@@ -228,6 +229,7 @@ style.setProperty('--image-file-select-element', 'url(\"' + new URL(new URL('sel
style.setProperty('--image-file-send', 'url(\"' + new URL(new URL('send.svg', import.meta.url).href, import.meta.url).toString() + '\")');
style.setProperty('--image-file-shadow', 'url(\"' + new URL(new URL('shadow.svg', import.meta.url).href, import.meta.url).toString() + '\")');
style.setProperty('--image-file-small-status-dot', 'url(\"' + new URL(new URL('small-status-dot.svg', import.meta.url).href, import.meta.url).toString() + '\")');
+style.setProperty('--image-file-smart-assistant', 'url(\"' + new URL(new URL('smart-assistant.svg', import.meta.url).href, import.meta.url).toString() + '\")');
style.setProperty('--image-file-snippet', 'url(\"' + new URL(new URL('snippet.svg', import.meta.url).href, import.meta.url).toString() + '\")');
style.setProperty('--image-file-spark-info', 'url(\"' + new URL(new URL('spark-info.svg', import.meta.url).href, import.meta.url).toString() + '\")');
style.setProperty('--image-file-spark', 'url(\"' + new URL(new URL('spark.svg', import.meta.url).href, import.meta.url).toString() + '\")');
diff --git a/public/Images/Images.prebundle.js b/public/Images/Images.prebundle.js
index adde92e59..fe246e94f 100644
--- a/public/Images/Images.prebundle.js
+++ b/public/Images/Images.prebundle.js
@@ -193,6 +193,7 @@ style.setProperty('--image-file-mop', 'url(\"' + new URL('./src/mop.svg', import
style.setProperty('--image-file-mouse', 'url(\"' + new URL('./src/mouse.svg', import.meta.url).toString() + '\")');
style.setProperty('--image-file-network-settings', 'url(\"' + new URL('./src/network-settings.svg', import.meta.url).toString() + '\")');
style.setProperty('--image-file-open-externally', 'url(\"' + new URL('./src/open-externally.svg', import.meta.url).toString() + '\")');
+style.setProperty('--image-file-pause-circle', 'url(\"' + new URL('./src/pause-circle.svg', import.meta.url).toString() + '\")');
style.setProperty('--image-file-pause', 'url(\"' + new URL('./src/pause.svg', import.meta.url).toString() + '\")');
style.setProperty('--image-file-pen-spark', 'url(\"' + new URL('./src/pen-spark.svg', import.meta.url).toString() + '\")');
style.setProperty('--image-file-performance-panel-diagram', 'url(\"' + new URL('./src/performance-panel-diagram.svg', import.meta.url).toString() + '\")');
@@ -229,6 +230,7 @@ style.setProperty('--image-file-select-element', 'url(\"' + new URL('./src/selec
style.setProperty('--image-file-send', 'url(\"' + new URL('./src/send.svg', import.meta.url).toString() + '\")');
style.setProperty('--image-file-shadow', 'url(\"' + new URL('./src/shadow.svg', import.meta.url).toString() + '\")');
style.setProperty('--image-file-small-status-dot', 'url(\"' + new URL('./src/small-status-dot.svg', import.meta.url).toString() + '\")');
+style.setProperty('--image-file-smart-assistant', 'url(\"' + new URL('./src/smart-assistant.svg', import.meta.url).toString() + '\")');
style.setProperty('--image-file-snippet', 'url(\"' + new URL('./src/snippet.svg', import.meta.url).toString() + '\")');
style.setProperty('--image-file-spark-info', 'url(\"' + new URL('./src/spark-info.svg', import.meta.url).toString() + '\")');
style.setProperty('--image-file-spark', 'url(\"' + new URL('./src/spark.svg', import.meta.url).toString() + '\")');
diff --git a/public/Images/pause-circle.svg b/public/Images/pause-circle.svg
new file mode 100644
index 000000000..d53330860
--- /dev/null
+++ b/public/Images/pause-circle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/Images/smart-assistant.svg b/public/Images/smart-assistant.svg
new file mode 100644
index 000000000..36cb0d9f3
--- /dev/null
+++ b/public/Images/smart-assistant.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/Images/src/pause-circle.svg b/public/Images/src/pause-circle.svg
new file mode 100644
index 000000000..4700d493a
--- /dev/null
+++ b/public/Images/src/pause-circle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/Images/src/smart-assistant.svg b/public/Images/src/smart-assistant.svg
new file mode 100644
index 000000000..08207ef40
--- /dev/null
+++ b/public/Images/src/smart-assistant.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/core/common/SettingRegistration.d.ts b/public/core/common/SettingRegistration.d.ts
index 0b6ae7252..7e7d9a99e 100644
--- a/public/core/common/SettingRegistration.d.ts
+++ b/public/core/common/SettingRegistration.d.ts
@@ -119,7 +119,7 @@ export interface SettingRegistration {
*/
disabledCondition?: (config?: Root.Runtime.HostConfig) => DisabledConditionResult;
/**
- * If a setting is deprecated, define this notice to show an appropriate warning according to the `warning` propertiy.
+ * If a setting is deprecated, define this notice to show an appropriate warning according to the `warning` property.
* If `disabled` is set, the setting will be disabled in the settings UI. In that case, `experiment` optionally can be
* set to link to an experiment (by experiment name). The information icon in the settings UI can then be clicked to
* jump to the experiment. If a setting is not disabled, the experiment entry will be ignored.
@@ -129,6 +129,20 @@ export interface SettingRegistration {
warning: () => Platform.UIString.LocalizedString;
experiment?: string;
};
+ /**
+ * Optional information to learn more about the setting. If provided, a `(?)` icon will show next to the setting
+ * in the Settings panel with a link to learn more, and the `tooltip` will be presented to the user when hovering
+ * the `(?)` icon.
+ */
+ learnMore?: LearnMore;
+}
+/**
+ * Metadata to learn more about a setting. The `url` will be used to construct
+ * a `(?)` icon link and the `tooltip` will be shown when hovering the icon.
+ */
+export interface LearnMore {
+ tooltip: () => Platform.UIString.LocalizedString;
+ url: Platform.DevToolsPath.UrlString;
}
interface LocalizedSettingExtensionOption {
value: boolean | string;
diff --git a/public/core/common/SettingRegistration.js.map b/public/core/common/SettingRegistration.js.map
index e92c6dd87..0e593a8a3 100644
--- a/public/core/common/SettingRegistration.js.map
+++ b/public/core/common/SettingRegistration.js.map
@@ -1 +1 @@
-{"version":3,"file":"SettingRegistration.js","sourceRoot":"","sources":["../../../../../../front_end/core/common/SettingRegistration.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2020 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\nimport * as i18n from '../i18n/i18n.js';\nimport type * as Platform from '../platform/platform.js';\nimport * as Root from '../root/root.js';\n\nimport {type SettingStorageType} from './Settings.js';\n\nconst UIStrings = {\n /**\n *@description Title of the Elements Panel\n */\n elements: 'Elements',\n /**\n *@description Text for DevTools appearance\n */\n appearance: 'Appearance',\n /**\n *@description Name of the Sources panel\n */\n sources: 'Sources',\n /**\n *@description Title of the Network tool\n */\n network: 'Network',\n /**\n *@description Text for the performance of something\n */\n performance: 'Performance',\n /**\n *@description Title of the Console tool\n */\n console: 'Console',\n /**\n *@description A title of the 'Persistence' setting category\n */\n persistence: 'Persistence',\n /**\n *@description Text that refers to the debugger\n */\n debugger: 'Debugger',\n /**\n *@description Text describing global shortcuts and settings that are available throughout the DevTools\n */\n global: 'Global',\n /**\n *@description Title of the Rendering tool\n */\n rendering: 'Rendering',\n /**\n *@description Title of a section on CSS Grid tooling\n */\n grid: 'Grid',\n /**\n *@description Text for the mobile platform, as opposed to desktop\n */\n mobile: 'Mobile',\n /**\n *@description Text for the memory of the page\n */\n memory: 'Memory',\n /**\n *@description Text for the extension of the page\n */\n extension: 'Extension',\n /**\n *@description Text for the adorner of the page\n */\n adorner: 'Adorner',\n /**\n * @description Header for the \"Sync\" section in the settings UI. The \"Sync\"\n * section allows users to configure which DevTools data is synced via Chrome Sync.\n */\n sync: 'Sync',\n};\nconst str_ = i18n.i18n.registerUIStrings('core/common/SettingRegistration.ts', UIStrings);\nconst i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);\nlet registeredSettings: Array = [];\nconst settingNameSet = new Set();\n\nexport function registerSettingExtension(registration: SettingRegistration): void {\n const settingName = registration.settingName;\n if (settingNameSet.has(settingName)) {\n throw new Error(`Duplicate setting name '${settingName}'`);\n }\n settingNameSet.add(settingName);\n registeredSettings.push(registration);\n}\n\nexport function getRegisteredSettings(config: Root.Runtime.HostConfig): Array {\n return registeredSettings.filter(\n setting => Root.Runtime.Runtime.isDescriptorEnabled(\n {experiment: setting.experiment, condition: setting.condition}, config));\n}\n\nexport function registerSettingsForTest(settings: Array, forceReset: boolean = false): void {\n if (registeredSettings.length === 0 || forceReset) {\n registeredSettings = settings;\n settingNameSet.clear();\n for (const setting of settings) {\n const settingName = setting.settingName;\n if (settingNameSet.has(settingName)) {\n throw new Error(`Duplicate setting name '${settingName}'`);\n }\n settingNameSet.add(settingName);\n }\n }\n}\n\nexport function resetSettings(): void {\n registeredSettings = [];\n settingNameSet.clear();\n}\n\nexport function maybeRemoveSettingExtension(settingName: string): boolean {\n const settingIndex = registeredSettings.findIndex(setting => setting.settingName === settingName);\n if (settingIndex < 0 || !settingNameSet.delete(settingName)) {\n return false;\n }\n registeredSettings.splice(settingIndex, 1);\n return true;\n}\n\nexport const enum SettingCategory {\n NONE = '', // `NONE` must be a falsy value. Legacy code uses if-checks for the category.\n ELEMENTS = 'ELEMENTS',\n APPEARANCE = 'APPEARANCE',\n SOURCES = 'SOURCES',\n NETWORK = 'NETWORK',\n PERFORMANCE = 'PERFORMANCE',\n CONSOLE = 'CONSOLE',\n PERSISTENCE = 'PERSISTENCE',\n DEBUGGER = 'DEBUGGER',\n GLOBAL = 'GLOBAL',\n RENDERING = 'RENDERING',\n GRID = 'GRID',\n MOBILE = 'MOBILE',\n EMULATION = 'EMULATION',\n MEMORY = 'MEMORY',\n EXTENSIONS = 'EXTENSIONS',\n ADORNER = 'ADORNER',\n SYNC = 'SYNC',\n}\n\nexport function getLocalizedSettingsCategory(category: SettingCategory): Platform.UIString.LocalizedString {\n switch (category) {\n case SettingCategory.ELEMENTS:\n return i18nString(UIStrings.elements);\n case SettingCategory.APPEARANCE:\n return i18nString(UIStrings.appearance);\n case SettingCategory.SOURCES:\n return i18nString(UIStrings.sources);\n case SettingCategory.NETWORK:\n return i18nString(UIStrings.network);\n case SettingCategory.PERFORMANCE:\n return i18nString(UIStrings.performance);\n case SettingCategory.CONSOLE:\n return i18nString(UIStrings.console);\n case SettingCategory.PERSISTENCE:\n return i18nString(UIStrings.persistence);\n case SettingCategory.DEBUGGER:\n return i18nString(UIStrings.debugger);\n case SettingCategory.GLOBAL:\n return i18nString(UIStrings.global);\n case SettingCategory.RENDERING:\n return i18nString(UIStrings.rendering);\n case SettingCategory.GRID:\n return i18nString(UIStrings.grid);\n case SettingCategory.MOBILE:\n return i18nString(UIStrings.mobile);\n case SettingCategory.EMULATION:\n return i18nString(UIStrings.console);\n case SettingCategory.MEMORY:\n return i18nString(UIStrings.memory);\n case SettingCategory.EXTENSIONS:\n return i18nString(UIStrings.extension);\n case SettingCategory.ADORNER:\n return i18nString(UIStrings.adorner);\n case SettingCategory.NONE:\n return i18n.i18n.lockedString('');\n case SettingCategory.SYNC:\n return i18nString(UIStrings.sync);\n }\n}\n\nexport const enum SettingType {\n ARRAY = 'array',\n REGEX = 'regex',\n ENUM = 'enum',\n BOOLEAN = 'boolean',\n}\n\nexport interface RegExpSettingItem {\n /**\n * A regular expression matched against URLs for ignore listing.\n */\n pattern: string;\n /**\n * If true, ignore this rule.\n */\n disabled?: boolean;\n /**\n * When a rule is disabled due to requesting through a script's context menu\n * that it no longer be ignore listed, this field is set to the URL of that\n * script, so that if the user requests through the same context menu to\n * enable ignore listing, the rule can be reenabled.\n */\n disabledForUrl?: Platform.DevToolsPath.UrlString;\n}\n\nexport interface SettingRegistration {\n /**\n * The category with which the setting is displayed in the UI.\n */\n category?: SettingCategory;\n /**\n * Used to sort on screen the settings that belong to the same category.\n */\n order?: number;\n /**\n * The title with which the setting is shown on screen.\n */\n title?: () => Platform.UIString.LocalizedString;\n /**\n * The identifier of the setting.\n */\n settingName: string;\n /**\n * Determines how the possible values of the setting are expressed.\n *\n * - If the setting can only be enabled and disabled use BOOLEAN\n * - If the setting has a list of possible values use ENUM\n * - If each setting value is a set of objects use ARRAY\n * - If the setting value is a regular expression use REGEX\n */\n settingType: SettingType;\n /**\n * The value set by default to the setting.\n */\n defaultValue: unknown;\n /**\n * Words used to find a setting in the Command Menu.\n */\n tags?: Array<() => Platform.UIString.LocalizedString>;\n /**\n * The possible values the setting can have, each with a description composed of a title and an optional text.\n */\n options?: Array;\n /**\n * Whether DevTools must be reloaded for a change in the setting to take effect.\n */\n reloadRequired?: boolean;\n /**\n * Determines if the setting value is stored in the global, local or session storage.\n */\n storageType?: SettingStorageType;\n /**\n * A condition that, when present in the queryParamsObject of Runtime, constraints the value\n * of the setting to be changed only if the user set it.\n */\n userActionCondition?: string;\n /**\n * The name of the experiment a setting is associated with. Enabling and disabling the declared\n * experiment will enable and disable the setting respectively.\n */\n experiment?: Root.Runtime.ExperimentName;\n /**\n * A condition is a function that will make the setting available if it\n * returns true, and not available, otherwise. Make sure that objects you\n * access from inside the condition function are ready at the time when the\n * setting conditions are checked.\n */\n condition?: Root.Runtime.Condition;\n\n /**\n * A function that returns true if the setting should be disabled, along with\n * the reason why.\n */\n disabledCondition?: (config?: Root.Runtime.HostConfig) => DisabledConditionResult;\n\n /**\n * If a setting is deprecated, define this notice to show an appropriate warning according to the `warning` propertiy.\n * If `disabled` is set, the setting will be disabled in the settings UI. In that case, `experiment` optionally can be\n * set to link to an experiment (by experiment name). The information icon in the settings UI can then be clicked to\n * jump to the experiment. If a setting is not disabled, the experiment entry will be ignored.\n */\n deprecationNotice?: {disabled: boolean, warning: () => Platform.UIString.LocalizedString, experiment?: string};\n}\ninterface LocalizedSettingExtensionOption {\n value: boolean|string;\n title: () => Platform.UIString.LocalizedString;\n text?: () => Platform.UIString.LocalizedString;\n raw?: false;\n}\ninterface RawSettingExtensionOption {\n value: boolean|string;\n title: () => Platform.UIString.LocalizedString;\n /**\n * Text used to describe the option. Must be localized if 'raw' is false.\n */\n text?: string;\n raw: true;\n}\nexport type SettingExtensionOption = LocalizedSettingExtensionOption|RawSettingExtensionOption;\nexport type DisabledConditionResult = {\n disabled: true,\n reason: string,\n}|{disabled: false};\n"]}
\ No newline at end of file
+{"version":3,"file":"SettingRegistration.js","sourceRoot":"","sources":["../../../../../../front_end/core/common/SettingRegistration.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2020 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\nimport * as i18n from '../i18n/i18n.js';\nimport type * as Platform from '../platform/platform.js';\nimport * as Root from '../root/root.js';\n\nimport {type SettingStorageType} from './Settings.js';\n\nconst UIStrings = {\n /**\n *@description Title of the Elements Panel\n */\n elements: 'Elements',\n /**\n *@description Text for DevTools appearance\n */\n appearance: 'Appearance',\n /**\n *@description Name of the Sources panel\n */\n sources: 'Sources',\n /**\n *@description Title of the Network tool\n */\n network: 'Network',\n /**\n *@description Text for the performance of something\n */\n performance: 'Performance',\n /**\n *@description Title of the Console tool\n */\n console: 'Console',\n /**\n *@description A title of the 'Persistence' setting category\n */\n persistence: 'Persistence',\n /**\n *@description Text that refers to the debugger\n */\n debugger: 'Debugger',\n /**\n *@description Text describing global shortcuts and settings that are available throughout the DevTools\n */\n global: 'Global',\n /**\n *@description Title of the Rendering tool\n */\n rendering: 'Rendering',\n /**\n *@description Title of a section on CSS Grid tooling\n */\n grid: 'Grid',\n /**\n *@description Text for the mobile platform, as opposed to desktop\n */\n mobile: 'Mobile',\n /**\n *@description Text for the memory of the page\n */\n memory: 'Memory',\n /**\n *@description Text for the extension of the page\n */\n extension: 'Extension',\n /**\n *@description Text for the adorner of the page\n */\n adorner: 'Adorner',\n /**\n * @description Header for the \"Sync\" section in the settings UI. The \"Sync\"\n * section allows users to configure which DevTools data is synced via Chrome Sync.\n */\n sync: 'Sync',\n};\nconst str_ = i18n.i18n.registerUIStrings('core/common/SettingRegistration.ts', UIStrings);\nconst i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);\nlet registeredSettings: Array = [];\nconst settingNameSet = new Set();\n\nexport function registerSettingExtension(registration: SettingRegistration): void {\n const settingName = registration.settingName;\n if (settingNameSet.has(settingName)) {\n throw new Error(`Duplicate setting name '${settingName}'`);\n }\n settingNameSet.add(settingName);\n registeredSettings.push(registration);\n}\n\nexport function getRegisteredSettings(config: Root.Runtime.HostConfig): Array {\n return registeredSettings.filter(\n setting => Root.Runtime.Runtime.isDescriptorEnabled(\n {experiment: setting.experiment, condition: setting.condition}, config));\n}\n\nexport function registerSettingsForTest(settings: Array, forceReset: boolean = false): void {\n if (registeredSettings.length === 0 || forceReset) {\n registeredSettings = settings;\n settingNameSet.clear();\n for (const setting of settings) {\n const settingName = setting.settingName;\n if (settingNameSet.has(settingName)) {\n throw new Error(`Duplicate setting name '${settingName}'`);\n }\n settingNameSet.add(settingName);\n }\n }\n}\n\nexport function resetSettings(): void {\n registeredSettings = [];\n settingNameSet.clear();\n}\n\nexport function maybeRemoveSettingExtension(settingName: string): boolean {\n const settingIndex = registeredSettings.findIndex(setting => setting.settingName === settingName);\n if (settingIndex < 0 || !settingNameSet.delete(settingName)) {\n return false;\n }\n registeredSettings.splice(settingIndex, 1);\n return true;\n}\n\nexport const enum SettingCategory {\n NONE = '', // `NONE` must be a falsy value. Legacy code uses if-checks for the category.\n ELEMENTS = 'ELEMENTS',\n APPEARANCE = 'APPEARANCE',\n SOURCES = 'SOURCES',\n NETWORK = 'NETWORK',\n PERFORMANCE = 'PERFORMANCE',\n CONSOLE = 'CONSOLE',\n PERSISTENCE = 'PERSISTENCE',\n DEBUGGER = 'DEBUGGER',\n GLOBAL = 'GLOBAL',\n RENDERING = 'RENDERING',\n GRID = 'GRID',\n MOBILE = 'MOBILE',\n EMULATION = 'EMULATION',\n MEMORY = 'MEMORY',\n EXTENSIONS = 'EXTENSIONS',\n ADORNER = 'ADORNER',\n SYNC = 'SYNC',\n}\n\nexport function getLocalizedSettingsCategory(category: SettingCategory): Platform.UIString.LocalizedString {\n switch (category) {\n case SettingCategory.ELEMENTS:\n return i18nString(UIStrings.elements);\n case SettingCategory.APPEARANCE:\n return i18nString(UIStrings.appearance);\n case SettingCategory.SOURCES:\n return i18nString(UIStrings.sources);\n case SettingCategory.NETWORK:\n return i18nString(UIStrings.network);\n case SettingCategory.PERFORMANCE:\n return i18nString(UIStrings.performance);\n case SettingCategory.CONSOLE:\n return i18nString(UIStrings.console);\n case SettingCategory.PERSISTENCE:\n return i18nString(UIStrings.persistence);\n case SettingCategory.DEBUGGER:\n return i18nString(UIStrings.debugger);\n case SettingCategory.GLOBAL:\n return i18nString(UIStrings.global);\n case SettingCategory.RENDERING:\n return i18nString(UIStrings.rendering);\n case SettingCategory.GRID:\n return i18nString(UIStrings.grid);\n case SettingCategory.MOBILE:\n return i18nString(UIStrings.mobile);\n case SettingCategory.EMULATION:\n return i18nString(UIStrings.console);\n case SettingCategory.MEMORY:\n return i18nString(UIStrings.memory);\n case SettingCategory.EXTENSIONS:\n return i18nString(UIStrings.extension);\n case SettingCategory.ADORNER:\n return i18nString(UIStrings.adorner);\n case SettingCategory.NONE:\n return i18n.i18n.lockedString('');\n case SettingCategory.SYNC:\n return i18nString(UIStrings.sync);\n }\n}\n\nexport const enum SettingType {\n ARRAY = 'array',\n REGEX = 'regex',\n ENUM = 'enum',\n BOOLEAN = 'boolean',\n}\n\nexport interface RegExpSettingItem {\n /**\n * A regular expression matched against URLs for ignore listing.\n */\n pattern: string;\n /**\n * If true, ignore this rule.\n */\n disabled?: boolean;\n /**\n * When a rule is disabled due to requesting through a script's context menu\n * that it no longer be ignore listed, this field is set to the URL of that\n * script, so that if the user requests through the same context menu to\n * enable ignore listing, the rule can be reenabled.\n */\n disabledForUrl?: Platform.DevToolsPath.UrlString;\n}\n\nexport interface SettingRegistration {\n /**\n * The category with which the setting is displayed in the UI.\n */\n category?: SettingCategory;\n /**\n * Used to sort on screen the settings that belong to the same category.\n */\n order?: number;\n /**\n * The title with which the setting is shown on screen.\n */\n title?: () => Platform.UIString.LocalizedString;\n /**\n * The identifier of the setting.\n */\n settingName: string;\n /**\n * Determines how the possible values of the setting are expressed.\n *\n * - If the setting can only be enabled and disabled use BOOLEAN\n * - If the setting has a list of possible values use ENUM\n * - If each setting value is a set of objects use ARRAY\n * - If the setting value is a regular expression use REGEX\n */\n settingType: SettingType;\n /**\n * The value set by default to the setting.\n */\n defaultValue: unknown;\n /**\n * Words used to find a setting in the Command Menu.\n */\n tags?: Array<() => Platform.UIString.LocalizedString>;\n /**\n * The possible values the setting can have, each with a description composed of a title and an optional text.\n */\n options?: Array;\n /**\n * Whether DevTools must be reloaded for a change in the setting to take effect.\n */\n reloadRequired?: boolean;\n /**\n * Determines if the setting value is stored in the global, local or session storage.\n */\n storageType?: SettingStorageType;\n /**\n * A condition that, when present in the queryParamsObject of Runtime, constraints the value\n * of the setting to be changed only if the user set it.\n */\n userActionCondition?: string;\n /**\n * The name of the experiment a setting is associated with. Enabling and disabling the declared\n * experiment will enable and disable the setting respectively.\n */\n experiment?: Root.Runtime.ExperimentName;\n /**\n * A condition is a function that will make the setting available if it\n * returns true, and not available, otherwise. Make sure that objects you\n * access from inside the condition function are ready at the time when the\n * setting conditions are checked.\n */\n condition?: Root.Runtime.Condition;\n\n /**\n * A function that returns true if the setting should be disabled, along with\n * the reason why.\n */\n disabledCondition?: (config?: Root.Runtime.HostConfig) => DisabledConditionResult;\n\n /**\n * If a setting is deprecated, define this notice to show an appropriate warning according to the `warning` property.\n * If `disabled` is set, the setting will be disabled in the settings UI. In that case, `experiment` optionally can be\n * set to link to an experiment (by experiment name). The information icon in the settings UI can then be clicked to\n * jump to the experiment. If a setting is not disabled, the experiment entry will be ignored.\n */\n deprecationNotice?: {disabled: boolean, warning: () => Platform.UIString.LocalizedString, experiment?: string};\n\n /**\n * Optional information to learn more about the setting. If provided, a `(?)` icon will show next to the setting\n * in the Settings panel with a link to learn more, and the `tooltip` will be presented to the user when hovering\n * the `(?)` icon.\n */\n learnMore?: LearnMore;\n}\n\n/**\n * Metadata to learn more about a setting. The `url` will be used to construct\n * a `(?)` icon link and the `tooltip` will be shown when hovering the icon.\n */\nexport interface LearnMore {\n tooltip: () => Platform.UIString.LocalizedString;\n url: Platform.DevToolsPath.UrlString;\n}\n\ninterface LocalizedSettingExtensionOption {\n value: boolean|string;\n title: () => Platform.UIString.LocalizedString;\n text?: () => Platform.UIString.LocalizedString;\n raw?: false;\n}\ninterface RawSettingExtensionOption {\n value: boolean|string;\n title: () => Platform.UIString.LocalizedString;\n /**\n * Text used to describe the option. Must be localized if 'raw' is false.\n */\n text?: string;\n raw: true;\n}\nexport type SettingExtensionOption = LocalizedSettingExtensionOption|RawSettingExtensionOption;\nexport type DisabledConditionResult = {\n disabled: true,\n reason: string,\n}|{disabled: false};\n"]}
\ No newline at end of file
diff --git a/public/core/common/Settings.d.ts b/public/core/common/Settings.d.ts
index 22068d01d..c14d4b7a5 100644
--- a/public/core/common/Settings.d.ts
+++ b/public/core/common/Settings.d.ts
@@ -2,7 +2,7 @@ import * as Platform from '../platform/platform.js';
import * as Root from '../root/root.js';
import { type EventDescriptor, type EventTargetEvent, type GenericEvents } from './EventTarget.js';
import { ObjectWrapper } from './Object.js';
-import { getLocalizedSettingsCategory, maybeRemoveSettingExtension, type RegExpSettingItem, registerSettingExtension, registerSettingsForTest, resetSettings, SettingCategory, type SettingExtensionOption, type SettingRegistration, SettingType } from './SettingRegistration.js';
+import { getLocalizedSettingsCategory, type LearnMore, maybeRemoveSettingExtension, type RegExpSettingItem, registerSettingExtension, registerSettingsForTest, resetSettings, SettingCategory, type SettingExtensionOption, type SettingRegistration, SettingType } from './SettingRegistration.js';
export declare class Settings {
#private;
readonly syncedStorage: SettingsStorage;
@@ -84,6 +84,7 @@ export declare class Setting {
disabledReason(): string | undefined;
setDisabled(disabled: boolean): void;
get(): V;
+ getIfNotDisabled(): V | undefined;
forceGet(): Promise;
set(value: V): void;
setRegistration(registration: SettingRegistration): void;
@@ -93,6 +94,7 @@ export declare class Setting {
category(): SettingCategory | null;
tags(): string | null;
order(): number | null;
+ learnMore(): LearnMore | null;
get deprecation(): Deprecation | null;
private printSettingsSavingError;
}
diff --git a/public/core/common/Settings.js b/public/core/common/Settings.js
index e9bf26434..89c4ced84 100644
--- a/public/core/common/Settings.js
+++ b/public/core/common/Settings.js
@@ -369,6 +369,15 @@ export class Setting {
}
return this.#value;
}
+ // Prefer this getter for settings which are "disableable". The plain getter returns `this.#value`,
+ // even if the setting is disabled, which means the callsite has to explicitly call the `disabled()`
+ // getter and add its own logic for the disabled state.
+ getIfNotDisabled() {
+ if (this.disabled()) {
+ return;
+ }
+ return this.get();
+ }
async forceGet() {
const name = this.name;
const oldValue = this.storage.get(name);
@@ -462,6 +471,9 @@ export class Setting {
}
return null;
}
+ learnMore() {
+ return this.#registration?.learnMore ?? null;
+ }
get deprecation() {
if (!this.#registration || !this.#registration.deprecationNotice) {
return null;
diff --git a/public/core/common/Settings.js.map b/public/core/common/Settings.js.map
index 3b2459cc8..a5217cefc 100644
--- a/public/core/common/Settings.js.map
+++ b/public/core/common/Settings.js.map
@@ -1 +1 @@
-{"version":3,"file":"Settings.js","sourceRoot":"","sources":["../../../../../../front_end/core/common/Settings.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright (C) 2009 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n * * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport * as Platform from '../platform/platform.js';\nimport * as Root from '../root/root.js';\n\nimport {Console} from './Console.js';\nimport {type EventDescriptor, type EventTargetEvent, type GenericEvents} from './EventTarget.js';\nimport {ObjectWrapper} from './Object.js';\nimport {\n getLocalizedSettingsCategory,\n getRegisteredSettings as getRegisteredSettingsInternal,\n maybeRemoveSettingExtension,\n type RegExpSettingItem,\n registerSettingExtension,\n registerSettingsForTest,\n resetSettings,\n SettingCategory,\n type SettingExtensionOption,\n type SettingRegistration,\n SettingType,\n} from './SettingRegistration.js';\n\nlet settingsInstance: Settings|undefined;\n\nexport class Settings {\n readonly #sessionStorage: SettingsStorage;\n settingNameSet: Set;\n orderValuesBySettingCategory: Map>;\n #eventSupport: ObjectWrapper;\n #registry: Map>;\n readonly moduleSettings: Map>;\n readonly #config: Root.Runtime.HostConfig;\n\n private constructor(\n readonly syncedStorage: SettingsStorage, readonly globalStorage: SettingsStorage,\n readonly localStorage: SettingsStorage, config?: Root.Runtime.HostConfig) {\n this.#sessionStorage = new SettingsStorage({});\n\n this.settingNameSet = new Set();\n\n this.orderValuesBySettingCategory = new Map();\n\n this.#eventSupport = new ObjectWrapper();\n this.#registry = new Map();\n this.moduleSettings = new Map();\n\n this.#config = config || {};\n for (const registration of this.getRegisteredSettings()) {\n const {settingName, defaultValue, storageType} = registration;\n const isRegex = registration.settingType === SettingType.REGEX;\n\n const evaluatedDefaultValue = typeof defaultValue === 'function' ? defaultValue(this.#config) : defaultValue;\n const setting = isRegex && typeof evaluatedDefaultValue === 'string' ?\n this.createRegExpSetting(settingName, evaluatedDefaultValue, undefined, storageType) :\n this.createSetting(settingName, evaluatedDefaultValue, storageType);\n\n setting.setTitleFunction(registration.title);\n if (registration.userActionCondition) {\n setting.setRequiresUserAction(Boolean(Root.Runtime.Runtime.queryParam(registration.userActionCondition)));\n }\n setting.setRegistration(registration);\n\n this.registerModuleSetting(setting);\n }\n }\n\n getRegisteredSettings(): SettingRegistration[] {\n return getRegisteredSettingsInternal(this.#config);\n }\n\n static hasInstance(): boolean {\n return typeof settingsInstance !== 'undefined';\n }\n\n static instance(opts: {\n forceNew: boolean|null,\n syncedStorage: SettingsStorage|null,\n globalStorage: SettingsStorage|null,\n localStorage: SettingsStorage|null,\n config?: Root.Runtime.HostConfig,\n } = {forceNew: null, syncedStorage: null, globalStorage: null, localStorage: null}): Settings {\n const {forceNew, syncedStorage, globalStorage, localStorage, config} = opts;\n if (!settingsInstance || forceNew) {\n if (!syncedStorage || !globalStorage || !localStorage) {\n throw new Error(`Unable to create settings: global and local storage must be provided: ${new Error().stack}`);\n }\n\n settingsInstance = new Settings(syncedStorage, globalStorage, localStorage, config);\n }\n\n return settingsInstance;\n }\n\n static removeInstance(): void {\n settingsInstance = undefined;\n }\n\n getHostConfig(): Root.Runtime.HostConfig {\n return this.#config;\n }\n\n private registerModuleSetting(setting: Setting): void {\n const settingName = setting.name;\n const category = setting.category();\n const order = setting.order();\n if (this.settingNameSet.has(settingName)) {\n throw new Error(`Duplicate Setting name '${settingName}'`);\n }\n if (category && order) {\n const orderValues = this.orderValuesBySettingCategory.get(category) || new Set();\n if (orderValues.has(order)) {\n throw new Error(`Duplicate order value '${order}' for settings category '${category}'`);\n }\n orderValues.add(order);\n this.orderValuesBySettingCategory.set(category, orderValues);\n }\n this.settingNameSet.add(settingName);\n this.moduleSettings.set(setting.name, setting);\n }\n\n static normalizeSettingName(name: string): string {\n if ([\n VersionController.GLOBAL_VERSION_SETTING_NAME,\n VersionController.SYNCED_VERSION_SETTING_NAME,\n VersionController.LOCAL_VERSION_SETTING_NAME,\n 'currentDockState',\n 'isUnderTest',\n ].includes(name)) {\n return name;\n }\n return Platform.StringUtilities.toKebabCase(name);\n }\n\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n moduleSetting(settingName: string): Setting {\n const setting = this.moduleSettings.get(settingName) as Setting;\n if (!setting) {\n throw new Error('No setting registered: ' + settingName);\n }\n return setting;\n }\n\n settingForTest(settingName: string): Setting {\n const setting = this.#registry.get(settingName);\n if (!setting) {\n throw new Error('No setting registered: ' + settingName);\n }\n return setting;\n }\n\n /**\n * Get setting via key, and create a new setting if the requested setting does not exist.\n */\n createSetting(key: string, defaultValue: T, storageType?: SettingStorageType): Setting {\n const storage = this.storageFromType(storageType);\n let setting = (this.#registry.get(key) as Setting);\n if (!setting) {\n setting = new Setting(key, defaultValue, this.#eventSupport, storage);\n this.#registry.set(key, setting);\n }\n return setting;\n }\n\n createLocalSetting(key: string, defaultValue: T): Setting {\n return this.createSetting(key, defaultValue, SettingStorageType.LOCAL);\n }\n\n createRegExpSetting(key: string, defaultValue: string, regexFlags?: string, storageType?: SettingStorageType):\n RegExpSetting {\n if (!this.#registry.get(key)) {\n this.#registry.set(\n key, new RegExpSetting(key, defaultValue, this.#eventSupport, this.storageFromType(storageType), regexFlags));\n }\n return this.#registry.get(key) as RegExpSetting;\n }\n\n clearAll(): void {\n this.globalStorage.removeAll();\n this.syncedStorage.removeAll();\n this.localStorage.removeAll();\n new VersionController().resetToCurrent();\n }\n\n private storageFromType(storageType?: SettingStorageType): SettingsStorage {\n switch (storageType) {\n case SettingStorageType.LOCAL:\n return this.localStorage;\n case SettingStorageType.SESSION:\n return this.#sessionStorage;\n case SettingStorageType.GLOBAL:\n return this.globalStorage;\n case SettingStorageType.SYNCED:\n return this.syncedStorage;\n }\n return this.globalStorage;\n }\n\n getRegistry(): Map> {\n return this.#registry;\n }\n}\n\nexport interface SettingsBackingStore {\n register(setting: string): void;\n get(setting: string): Promise;\n set(setting: string, value: string): void;\n remove(setting: string): void;\n clear(): void;\n}\n\nexport const NOOP_STORAGE: SettingsBackingStore = {\n register: () => {},\n set: () => {},\n get: () => Promise.resolve(''),\n remove: () => {},\n clear: () => {},\n};\n\nexport class SettingsStorage {\n constructor(\n private object: Record, private readonly backingStore: SettingsBackingStore = NOOP_STORAGE,\n private readonly storagePrefix: string = '') {\n }\n\n register(name: string): void {\n name = this.storagePrefix + name;\n this.backingStore.register(name);\n }\n\n set(name: string, value: string): void {\n name = this.storagePrefix + name;\n this.object[name] = value;\n this.backingStore.set(name, value);\n }\n\n has(name: string): boolean {\n name = this.storagePrefix + name;\n return name in this.object;\n }\n\n get(name: string): string {\n name = this.storagePrefix + name;\n return this.object[name];\n }\n\n async forceGet(originalName: string): Promise {\n const name = this.storagePrefix + originalName;\n const value = await this.backingStore.get(name);\n if (value && value !== this.object[name]) {\n this.set(originalName, value);\n } else if (!value) {\n this.remove(originalName);\n }\n return value;\n }\n\n remove(name: string): void {\n name = this.storagePrefix + name;\n delete this.object[name];\n this.backingStore.remove(name);\n }\n\n removeAll(): void {\n this.object = {};\n this.backingStore.clear();\n }\n\n keys(): string[] {\n return Object.keys(this.object);\n }\n\n dumpSizes(): void {\n Console.instance().log('Ten largest settings: ');\n\n const sizes: {\n [x: string]: number,\n // @ts-expect-error __proto__ optimization\n } = {__proto__: null};\n for (const key in this.object) {\n sizes[key] = this.object[key].length;\n }\n const keys = Object.keys(sizes);\n\n function comparator(key1: string, key2: string): number {\n return sizes[key2] - sizes[key1];\n }\n\n keys.sort(comparator);\n\n for (let i = 0; i < 10 && i < keys.length; ++i) {\n Console.instance().log('Setting: \\'' + keys[i] + '\\', size: ' + sizes[keys[i]]);\n }\n }\n}\n\nfunction removeSetting(setting: {name: string, storage: SettingsStorage}): void {\n const name = setting.name;\n const settings = Settings.instance();\n\n settings.getRegistry().delete(name);\n settings.moduleSettings.delete(name);\n\n setting.storage.remove(name);\n}\n\nexport class Deprecation {\n readonly disabled: boolean;\n readonly warning: Platform.UIString.LocalizedString;\n readonly experiment?: Root.Runtime.Experiment;\n\n constructor({deprecationNotice}: SettingRegistration) {\n if (!deprecationNotice) {\n throw new Error('Cannot create deprecation info for a non-deprecated setting');\n }\n this.disabled = deprecationNotice.disabled;\n this.warning = deprecationNotice.warning();\n this.experiment = deprecationNotice.experiment ?\n Root.Runtime.experiments.allConfigurableExperiments().find(e => e.name === deprecationNotice.experiment) :\n undefined;\n }\n}\n\nexport class Setting {\n #titleFunction?: () => Platform.UIString.LocalizedString;\n #titleInternal!: string;\n #registration: SettingRegistration|null = null;\n #requiresUserAction?: boolean;\n #value?: V;\n // TODO(crbug.com/1172300) Type cannot be inferred without changes to consumers. See above.\n #serializer: Serializer = JSON;\n #hadUserAction?: boolean;\n #disabled?: boolean;\n #deprecation: Deprecation|null = null;\n\n constructor(\n readonly name: string, readonly defaultValue: V, private readonly eventSupport: ObjectWrapper,\n readonly storage: SettingsStorage) {\n storage.register(this.name);\n }\n\n setSerializer(serializer: Serializer): void {\n this.#serializer = serializer;\n }\n\n addChangeListener(listener: (arg0: EventTargetEvent) => void, thisObject?: Object): EventDescriptor {\n return this.eventSupport.addEventListener(this.name, listener, thisObject);\n }\n\n removeChangeListener(listener: (arg0: EventTargetEvent) => void, thisObject?: Object): void {\n this.eventSupport.removeEventListener(this.name, listener, thisObject);\n }\n\n title(): string {\n if (this.#titleInternal) {\n return this.#titleInternal;\n }\n if (this.#titleFunction) {\n return this.#titleFunction();\n }\n return '';\n }\n\n setTitleFunction(titleFunction: (() => Platform.UIString.LocalizedString)|undefined): void {\n if (titleFunction) {\n this.#titleFunction = titleFunction;\n }\n }\n\n setTitle(title: string): void {\n this.#titleInternal = title;\n }\n\n setRequiresUserAction(requiresUserAction: boolean): void {\n this.#requiresUserAction = requiresUserAction;\n }\n\n disabled(): boolean {\n if (this.#registration?.disabledCondition) {\n const {disabled} = this.#registration.disabledCondition(Settings.instance().getHostConfig());\n // If registration does not disable it, pass through to #disabled\n // attribute check.\n if (disabled) {\n return true;\n }\n }\n return this.#disabled || false;\n }\n\n disabledReason(): string|undefined {\n if (this.#registration?.disabledCondition) {\n const result = this.#registration.disabledCondition(Settings.instance().getHostConfig());\n if (result.disabled) {\n return result.reason;\n }\n }\n return undefined;\n }\n\n setDisabled(disabled: boolean): void {\n this.#disabled = disabled;\n this.eventSupport.dispatchEventToListeners(this.name);\n }\n\n get(): V {\n if (this.#requiresUserAction && !this.#hadUserAction) {\n return this.defaultValue;\n }\n\n if (typeof this.#value !== 'undefined') {\n return this.#value;\n }\n\n this.#value = this.defaultValue;\n if (this.storage.has(this.name)) {\n try {\n this.#value = this.#serializer.parse(this.storage.get(this.name));\n } catch (e) {\n this.storage.remove(this.name);\n }\n }\n return this.#value;\n }\n\n async forceGet(): Promise {\n const name = this.name;\n const oldValue = this.storage.get(name);\n const value = await this.storage.forceGet(name);\n this.#value = this.defaultValue;\n if (value) {\n try {\n this.#value = this.#serializer.parse(value);\n } catch (e) {\n this.storage.remove(this.name);\n }\n }\n\n if (oldValue !== value) {\n this.eventSupport.dispatchEventToListeners(this.name, this.#value);\n }\n\n return this.#value;\n }\n\n set(value: V): void {\n this.#hadUserAction = true;\n this.#value = value;\n try {\n const settingString = this.#serializer.stringify(value);\n try {\n this.storage.set(this.name, settingString);\n } catch (e) {\n this.printSettingsSavingError(e.message, this.name, settingString);\n }\n } catch (e) {\n Console.instance().error('Cannot stringify setting with name: ' + this.name + ', error: ' + e.message);\n }\n this.eventSupport.dispatchEventToListeners(this.name, value);\n }\n\n setRegistration(registration: SettingRegistration): void {\n this.#registration = registration;\n const {deprecationNotice} = registration;\n if (deprecationNotice?.disabled) {\n const experiment = deprecationNotice.experiment ?\n Root.Runtime.experiments.allConfigurableExperiments().find(e => e.name === deprecationNotice.experiment) :\n undefined;\n if ((!experiment || experiment.isEnabled())) {\n this.set(this.defaultValue);\n this.setDisabled(true);\n }\n }\n }\n\n type(): SettingType|null {\n if (this.#registration) {\n return this.#registration.settingType;\n }\n return null;\n }\n\n options(): SimpleSettingOption[] {\n if (this.#registration && this.#registration.options) {\n return this.#registration.options.map(opt => {\n const {value, title, text, raw} = opt;\n return {\n value,\n title: title(),\n text: typeof text === 'function' ? text() : text,\n raw,\n };\n });\n }\n return [];\n }\n\n reloadRequired(): boolean|null {\n if (this.#registration) {\n return this.#registration.reloadRequired || null;\n }\n return null;\n }\n\n category(): SettingCategory|null {\n if (this.#registration) {\n return this.#registration.category || null;\n }\n return null;\n }\n\n tags(): string|null {\n if (this.#registration && this.#registration.tags) {\n // Get localized keys and separate by null character to prevent fuzzy matching from matching across them.\n return this.#registration.tags.map(tag => tag()).join('\\0');\n }\n return null;\n }\n\n order(): number|null {\n if (this.#registration) {\n return this.#registration.order || null;\n }\n return null;\n }\n\n get deprecation(): Deprecation|null {\n if (!this.#registration || !this.#registration.deprecationNotice) {\n return null;\n }\n if (!this.#deprecation) {\n this.#deprecation = new Deprecation(this.#registration);\n }\n return this.#deprecation;\n }\n\n private printSettingsSavingError(message: string, name: string, value: string): void {\n const errorMessage =\n 'Error saving setting with name: ' + this.name + ', value length: ' + value.length + '. Error: ' + message;\n console.error(errorMessage);\n Console.instance().error(errorMessage);\n this.storage.dumpSizes();\n }\n}\n\n// TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport class RegExpSetting extends Setting {\n #regexFlags: string|undefined;\n #regex?: RegExp|null;\n\n constructor(\n name: string, defaultValue: string, eventSupport: ObjectWrapper, storage: SettingsStorage,\n regexFlags?: string) {\n super(name, defaultValue ? [{pattern: defaultValue}] : [], eventSupport, storage);\n this.#regexFlags = regexFlags;\n }\n\n override get(): string {\n const result = [];\n const items = this.getAsArray();\n for (let i = 0; i < items.length; ++i) {\n const item = items[i];\n if (item.pattern && !item.disabled) {\n result.push(item.pattern);\n }\n }\n return result.join('|');\n }\n\n getAsArray(): RegExpSettingItem[] {\n return super.get();\n }\n\n override set(value: string): void {\n this.setAsArray([{pattern: value, disabled: false}]);\n }\n\n setAsArray(value: RegExpSettingItem[]): void {\n this.#regex = undefined;\n super.set(value);\n }\n\n asRegExp(): RegExp|null {\n if (typeof this.#regex !== 'undefined') {\n return this.#regex;\n }\n this.#regex = null;\n try {\n const pattern = this.get();\n if (pattern) {\n this.#regex = new RegExp(pattern, this.#regexFlags || '');\n }\n } catch (e) {\n }\n return this.#regex;\n }\n}\n\nexport class VersionController {\n static readonly GLOBAL_VERSION_SETTING_NAME = 'inspectorVersion';\n static readonly SYNCED_VERSION_SETTING_NAME = 'syncedInspectorVersion';\n static readonly LOCAL_VERSION_SETTING_NAME = 'localInspectorVersion';\n\n static readonly CURRENT_VERSION = 37;\n\n readonly #globalVersionSetting: Setting;\n readonly #syncedVersionSetting: Setting;\n readonly #localVersionSetting: Setting;\n\n constructor() {\n // If no version setting is found, we initialize with the current version and don't do anything.\n this.#globalVersionSetting = Settings.instance().createSetting(\n VersionController.GLOBAL_VERSION_SETTING_NAME, VersionController.CURRENT_VERSION, SettingStorageType.GLOBAL);\n this.#syncedVersionSetting = Settings.instance().createSetting(\n VersionController.SYNCED_VERSION_SETTING_NAME, VersionController.CURRENT_VERSION, SettingStorageType.SYNCED);\n this.#localVersionSetting = Settings.instance().createSetting(\n VersionController.LOCAL_VERSION_SETTING_NAME, VersionController.CURRENT_VERSION, SettingStorageType.LOCAL);\n }\n\n /**\n * Force re-sets all version number settings to the current version without\n * running any migrations.\n */\n resetToCurrent(): void {\n this.#globalVersionSetting.set(VersionController.CURRENT_VERSION);\n this.#syncedVersionSetting.set(VersionController.CURRENT_VERSION);\n this.#localVersionSetting.set(VersionController.CURRENT_VERSION);\n }\n\n /**\n * Runs the appropriate migrations and updates the version settings accordingly.\n *\n * To determine what migrations to run we take the minimum of all version number settings.\n *\n * IMPORTANT: All migrations must be idempotent since they might be applied multiple times.\n */\n updateVersion(): void {\n const currentVersion = VersionController.CURRENT_VERSION;\n const minimumVersion =\n Math.min(this.#globalVersionSetting.get(), this.#syncedVersionSetting.get(), this.#localVersionSetting.get());\n const methodsToRun = this.methodsToRunToUpdateVersion(minimumVersion, currentVersion);\n console.assert(\n // @ts-ignore\n this[`updateVersionFrom${currentVersion}To${currentVersion + 1}`] === undefined,\n 'Unexpected migration method found. Increment CURRENT_VERSION or remove the method.');\n for (const method of methodsToRun) {\n // @ts-ignore Special version method matching\n this[method].call(this);\n }\n this.resetToCurrent();\n }\n\n private methodsToRunToUpdateVersion(oldVersion: number, currentVersion: number): string[] {\n const result = [];\n for (let i = oldVersion; i < currentVersion; ++i) {\n result.push('updateVersionFrom' + i + 'To' + (i + 1));\n }\n return result;\n }\n\n private updateVersionFrom0To1(): void {\n this.clearBreakpointsWhenTooMany(Settings.instance().createLocalSetting('breakpoints', []), 500000);\n }\n\n private updateVersionFrom1To2(): void {\n Settings.instance().createSetting('previouslyViewedFiles', []).set([]);\n }\n\n private updateVersionFrom2To3(): void {\n Settings.instance().createSetting('fileSystemMapping', {}).set({});\n removeSetting(Settings.instance().createSetting('fileMappingEntries', []));\n }\n\n private updateVersionFrom3To4(): void {\n const advancedMode = Settings.instance().createSetting('showHeaSnapshotObjectsHiddenProperties', false);\n moduleSetting('showAdvancedHeapSnapshotProperties').set(advancedMode.get());\n removeSetting(advancedMode);\n }\n\n private updateVersionFrom4To5(): void {\n const settingNames: {\n [x: string]: string,\n } = {\n FileSystemViewSidebarWidth: 'fileSystemViewSplitViewState',\n elementsSidebarWidth: 'elementsPanelSplitViewState',\n StylesPaneSplitRatio: 'stylesPaneSplitViewState',\n heapSnapshotRetainersViewSize: 'heapSnapshotSplitViewState',\n 'InspectorView.splitView': 'InspectorView.splitViewState',\n 'InspectorView.screencastSplitView': 'InspectorView.screencastSplitViewState',\n 'Inspector.drawerSplitView': 'Inspector.drawerSplitViewState',\n layerDetailsSplitView: 'layerDetailsSplitViewState',\n networkSidebarWidth: 'networkPanelSplitViewState',\n sourcesSidebarWidth: 'sourcesPanelSplitViewState',\n scriptsPanelNavigatorSidebarWidth: 'sourcesPanelNavigatorSplitViewState',\n sourcesPanelSplitSidebarRatio: 'sourcesPanelDebuggerSidebarSplitViewState',\n 'timeline-details': 'timelinePanelDetailsSplitViewState',\n 'timeline-split': 'timelinePanelRecorsSplitViewState',\n 'timeline-view': 'timelinePanelTimelineStackSplitViewState',\n auditsSidebarWidth: 'auditsPanelSplitViewState',\n layersSidebarWidth: 'layersPanelSplitViewState',\n profilesSidebarWidth: 'profilesPanelSplitViewState',\n resourcesSidebarWidth: 'resourcesPanelSplitViewState',\n };\n const empty = {};\n for (const oldName in settingNames) {\n const newName = settingNames[oldName];\n const oldNameH = oldName + 'H';\n\n let newValue: {}|null = null;\n const oldSetting = Settings.instance().createSetting(oldName, empty);\n if (oldSetting.get() !== empty) {\n newValue = newValue || {};\n // @ts-expect-error\n newValue.vertical = {};\n // @ts-expect-error\n newValue.vertical.size = oldSetting.get();\n removeSetting(oldSetting);\n }\n const oldSettingH = Settings.instance().createSetting(oldNameH, empty);\n if (oldSettingH.get() !== empty) {\n newValue = newValue || {};\n // @ts-expect-error\n newValue.horizontal = {};\n // @ts-expect-error\n newValue.horizontal.size = oldSettingH.get();\n removeSetting(oldSettingH);\n }\n if (newValue) {\n Settings.instance().createSetting(newName, {}).set(newValue);\n }\n }\n }\n\n private updateVersionFrom5To6(): void {\n const settingNames: {\n [x: string]: string,\n } = {\n debuggerSidebarHidden: 'sourcesPanelSplitViewState',\n navigatorHidden: 'sourcesPanelNavigatorSplitViewState',\n 'WebInspector.Drawer.showOnLoad': 'Inspector.drawerSplitViewState',\n };\n\n for (const oldName in settingNames) {\n const oldSetting = Settings.instance().createSetting(oldName, null);\n if (oldSetting.get() === null) {\n removeSetting(oldSetting);\n continue;\n }\n\n const newName = settingNames[oldName];\n const invert = oldName === 'WebInspector.Drawer.showOnLoad';\n const hidden = oldSetting.get() !== invert;\n removeSetting(oldSetting);\n const showMode = hidden ? 'OnlyMain' : 'Both';\n\n const newSetting = Settings.instance().createSetting(newName, {});\n const newValue = newSetting.get() || {};\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // @ts-expect-error\n newValue.vertical = newValue.vertical || {};\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // @ts-expect-error\n newValue.vertical.showMode = showMode;\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // @ts-expect-error\n newValue.horizontal = newValue.horizontal || {};\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // @ts-expect-error\n newValue.horizontal.showMode = showMode;\n newSetting.set(newValue);\n }\n }\n\n private updateVersionFrom6To7(): void {\n const settingNames = {\n sourcesPanelNavigatorSplitViewState: 'sourcesPanelNavigatorSplitViewState',\n elementsPanelSplitViewState: 'elementsPanelSplitViewState',\n stylesPaneSplitViewState: 'stylesPaneSplitViewState',\n sourcesPanelDebuggerSidebarSplitViewState: 'sourcesPanelDebuggerSidebarSplitViewState',\n };\n\n const empty = {};\n for (const name in settingNames) {\n const setting =\n Settings.instance().createSetting<{vertical?: {size?: number}, horizontal?: {size?: number}}>(name, empty);\n const value = setting.get();\n if (value === empty) {\n continue;\n }\n // Zero out saved percentage sizes, and they will be restored to defaults.\n if (value.vertical && value.vertical.size && value.vertical.size < 1) {\n value.vertical.size = 0;\n }\n if (value.horizontal && value.horizontal.size && value.horizontal.size < 1) {\n value.horizontal.size = 0;\n }\n setting.set(value);\n }\n }\n\n private updateVersionFrom7To8(): void {\n }\n\n private updateVersionFrom8To9(): void {\n const settingNames = ['skipStackFramesPattern', 'workspaceFolderExcludePattern'];\n\n for (let i = 0; i < settingNames.length; ++i) {\n const setting = Settings.instance().createSetting(settingNames[i], '');\n let value = setting.get();\n if (!value) {\n return;\n }\n if (typeof value === 'string') {\n value = [value];\n }\n for (let j = 0; j < value.length; ++j) {\n if (typeof value[j] === 'string') {\n value[j] = {pattern: value[j]};\n }\n }\n setting.set(value);\n }\n }\n\n private updateVersionFrom9To10(): void {\n // This one is localStorage specific, which is fine.\n if (!window.localStorage) {\n return;\n }\n for (const key in window.localStorage) {\n if (key.startsWith('revision-history')) {\n window.localStorage.removeItem(key);\n }\n }\n }\n\n private updateVersionFrom10To11(): void {\n const oldSettingName = 'customDevicePresets';\n const newSettingName = 'customEmulatedDeviceList';\n const oldSetting = Settings.instance().createSetting(oldSettingName, undefined);\n const list = oldSetting.get();\n if (!Array.isArray(list)) {\n return;\n }\n const newList = [];\n for (let i = 0; i < list.length; ++i) {\n const value = list[i];\n const device: {\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [x: string]: any,\n } = {};\n device['title'] = value['title'];\n device['type'] = 'unknown';\n device['user-agent'] = value['userAgent'];\n device['capabilities'] = [];\n if (value['touch']) {\n device['capabilities'].push('touch');\n }\n if (value['mobile']) {\n device['capabilities'].push('mobile');\n }\n device['screen'] = {};\n device['screen']['vertical'] = {width: value['width'], height: value['height']};\n device['screen']['horizontal'] = {width: value['height'], height: value['width']};\n device['screen']['device-pixel-ratio'] = value['deviceScaleFactor'];\n device['modes'] = [];\n device['show-by-default'] = true;\n device['show'] = 'Default';\n newList.push(device);\n }\n if (newList.length) {\n Settings.instance().createSetting(newSettingName, []).set(newList);\n }\n removeSetting(oldSetting);\n }\n\n private updateVersionFrom11To12(): void {\n this.migrateSettingsFromLocalStorage();\n }\n\n private updateVersionFrom12To13(): void {\n this.migrateSettingsFromLocalStorage();\n removeSetting(Settings.instance().createSetting('timelineOverviewMode', ''));\n }\n\n private updateVersionFrom13To14(): void {\n const defaultValue = {throughput: -1, latency: 0};\n Settings.instance().createSetting('networkConditions', defaultValue).set(defaultValue);\n }\n\n private updateVersionFrom14To15(): void {\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const setting = Settings.instance().createLocalSetting('workspaceExcludedFolders', {});\n const oldValue = setting.get();\n const newValue: {\n [x: string]: string[],\n } = {};\n for (const fileSystemPath in oldValue) {\n newValue[fileSystemPath] = [];\n for (const entry of oldValue[fileSystemPath]) {\n newValue[fileSystemPath].push(entry.path);\n }\n }\n setting.set(newValue);\n }\n\n private updateVersionFrom15To16(): void {\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const setting = Settings.instance().createSetting('InspectorView.panelOrder', {});\n const tabOrders = setting.get();\n for (const key of Object.keys(tabOrders)) {\n tabOrders[key] = (tabOrders[key] + 1) * 10;\n }\n setting.set(tabOrders);\n }\n\n private updateVersionFrom16To17(): void {\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const setting = Settings.instance().createSetting('networkConditionsCustomProfiles', []);\n const oldValue = setting.get();\n const newValue = [];\n if (Array.isArray(oldValue)) {\n for (const preset of oldValue) {\n if (typeof preset.title === 'string' && typeof preset.value === 'object' &&\n typeof preset.value.throughput === 'number' && typeof preset.value.latency === 'number') {\n newValue.push({\n title: preset.title,\n value: {download: preset.value.throughput, upload: preset.value.throughput, latency: preset.value.latency},\n });\n }\n }\n }\n setting.set(newValue);\n }\n\n private updateVersionFrom17To18(): void {\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const setting = Settings.instance().createLocalSetting('workspaceExcludedFolders', {});\n const oldValue = setting.get();\n const newValue: {\n [x: string]: string,\n } = {};\n for (const oldKey in oldValue) {\n let newKey = oldKey.replace(/\\\\/g, '/');\n if (!newKey.startsWith('file://')) {\n if (newKey.startsWith('/')) {\n newKey = 'file://' + newKey;\n } else {\n newKey = 'file:///' + newKey;\n }\n }\n newValue[newKey] = oldValue[oldKey];\n }\n setting.set(newValue);\n }\n\n private updateVersionFrom18To19(): void {\n const defaultColumns = {status: true, type: true, initiator: true, size: true, time: true};\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const visibleColumnSettings = Settings.instance().createSetting('networkLogColumnsVisibility', defaultColumns);\n const visibleColumns = visibleColumnSettings.get();\n visibleColumns.name = true;\n visibleColumns.timeline = true;\n\n const configs: {\n [x: string]: {\n visible: number,\n },\n } = {};\n for (const columnId in visibleColumns) {\n if (!visibleColumns.hasOwnProperty(columnId)) {\n continue;\n }\n configs[columnId.toLowerCase()] = {visible: visibleColumns[columnId]};\n }\n const newSetting = Settings.instance().createSetting('networkLogColumns', {});\n newSetting.set(configs);\n removeSetting(visibleColumnSettings);\n }\n\n private updateVersionFrom19To20(): void {\n const oldSetting = Settings.instance().createSetting('InspectorView.panelOrder', {});\n const newSetting = Settings.instance().createSetting('panel-tabOrder', {});\n newSetting.set(oldSetting.get());\n removeSetting(oldSetting);\n }\n\n private updateVersionFrom20To21(): void {\n const networkColumns = Settings.instance().createSetting('networkLogColumns', {});\n const columns = (networkColumns.get() as {\n [x: string]: string,\n });\n delete columns['timeline'];\n delete columns['waterfall'];\n networkColumns.set(columns);\n }\n\n private updateVersionFrom21To22(): void {\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const breakpointsSetting = Settings.instance().createLocalSetting('breakpoints', []);\n const breakpoints = breakpointsSetting.get();\n for (const breakpoint of breakpoints) {\n breakpoint['url'] = breakpoint['sourceFileId'];\n delete breakpoint['sourceFileId'];\n }\n breakpointsSetting.set(breakpoints);\n }\n\n private updateVersionFrom22To23(): void {\n // This update is no-op.\n }\n\n private updateVersionFrom23To24(): void {\n const oldSetting = Settings.instance().createSetting('searchInContentScripts', false);\n const newSetting = Settings.instance().createSetting('searchInAnonymousAndContentScripts', false);\n newSetting.set(oldSetting.get());\n removeSetting(oldSetting);\n }\n\n private updateVersionFrom24To25(): void {\n const defaultColumns = {status: true, type: true, initiator: true, size: true, time: true};\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const networkLogColumnsSetting = Settings.instance().createSetting('networkLogColumns', defaultColumns);\n const columns = networkLogColumnsSetting.get();\n delete columns.product;\n networkLogColumnsSetting.set(columns);\n }\n\n private updateVersionFrom25To26(): void {\n const oldSetting = Settings.instance().createSetting('messageURLFilters', {});\n const urls = Object.keys(oldSetting.get());\n const textFilter = urls.map(url => `-url:${url}`).join(' ');\n if (textFilter) {\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const textFilterSetting = Settings.instance().createSetting('console.textFilter', '');\n const suffix = textFilterSetting.get() ? ` ${textFilterSetting.get()}` : '';\n textFilterSetting.set(`${textFilter}${suffix}`);\n }\n removeSetting(oldSetting);\n }\n\n private updateVersionFrom26To27(): void {\n function renameKeyInObjectSetting(settingName: string, from: string, to: string): void {\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const setting = Settings.instance().createSetting(settingName, {});\n const value = setting.get();\n if (from in value) {\n value[to] = value[from];\n delete value[from];\n setting.set(value);\n }\n }\n\n function renameInStringSetting(settingName: string, from: string, to: string): void {\n const setting = Settings.instance().createSetting(settingName, '');\n const value = setting.get();\n if (value === from) {\n setting.set(to);\n }\n }\n\n renameKeyInObjectSetting('panel-tabOrder', 'audits2', 'audits');\n renameKeyInObjectSetting('panel-closeableTabs', 'audits2', 'audits');\n renameInStringSetting('panel-selectedTab', 'audits2', 'audits');\n }\n\n private updateVersionFrom27To28(): void {\n const setting = Settings.instance().createSetting('uiTheme', 'systemPreferred');\n if (setting.get() === 'default') {\n setting.set('systemPreferred');\n }\n }\n\n private updateVersionFrom28To29(): void {\n function renameKeyInObjectSetting(settingName: string, from: string, to: string): void {\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const setting = Settings.instance().createSetting(settingName, {});\n const value = setting.get();\n if (from in value) {\n value[to] = value[from];\n delete value[from];\n setting.set(value);\n }\n }\n\n function renameInStringSetting(settingName: string, from: string, to: string): void {\n const setting = Settings.instance().createSetting(settingName, '');\n const value = setting.get();\n if (value === from) {\n setting.set(to);\n }\n }\n\n renameKeyInObjectSetting('panel-tabOrder', 'audits', 'lighthouse');\n renameKeyInObjectSetting('panel-closeableTabs', 'audits', 'lighthouse');\n renameInStringSetting('panel-selectedTab', 'audits', 'lighthouse');\n }\n\n private updateVersionFrom29To30(): void {\n // Create new location agnostic setting\n const closeableTabSetting = Settings.instance().createSetting('closeableTabs', {});\n\n // Read current settings\n const panelCloseableTabSetting = Settings.instance().createSetting('panel-closeableTabs', {});\n const drawerCloseableTabSetting = Settings.instance().createSetting('drawer-view-closeableTabs', {});\n const openTabsInPanel = panelCloseableTabSetting.get();\n const openTabsInDrawer = panelCloseableTabSetting.get();\n\n // Set #value of new setting\n const newValue = Object.assign(openTabsInDrawer, openTabsInPanel);\n closeableTabSetting.set(newValue);\n\n // Remove old settings\n removeSetting(panelCloseableTabSetting);\n removeSetting(drawerCloseableTabSetting);\n }\n\n private updateVersionFrom30To31(): void {\n // Remove recorder_recordings setting that was used for storing recordings\n // by an old recorder experiment.\n const recordingsSetting = Settings.instance().createSetting('recorder_recordings', []);\n removeSetting(recordingsSetting);\n }\n\n updateVersionFrom31To32(): void {\n // Introduce the new 'resourceTypeName' property on stored breakpoints. Prior to\n // this change we synchronized the breakpoint only by URL, but since we don't\n // know on which resource type the given breakpoint was set, we just assume\n // 'script' here to keep things simple.\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const breakpointsSetting = Settings.instance().createLocalSetting('breakpoints', []);\n const breakpoints = breakpointsSetting.get();\n for (const breakpoint of breakpoints) {\n breakpoint['resourceTypeName'] = 'script';\n }\n breakpointsSetting.set(breakpoints);\n }\n\n updateVersionFrom32To33(): void {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const previouslyViewedFilesSetting = Settings.instance().createLocalSetting('previouslyViewedFiles', []);\n let previouslyViewedFiles = previouslyViewedFilesSetting.get();\n\n // Discard old 'previouslyViewedFiles' items that don't have a 'url' property.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n previouslyViewedFiles = previouslyViewedFiles.filter((previouslyViewedFile: any) => 'url' in previouslyViewedFile);\n\n // Introduce the new 'resourceTypeName' property on previously viewed files.\n // Prior to this change we only keyed them based on the URL, but since we\n // don't know which resource type the given file had, we just assume 'script'\n // here to keep things simple.\n for (const previouslyViewedFile of previouslyViewedFiles) {\n previouslyViewedFile['resourceTypeName'] = 'script';\n }\n\n previouslyViewedFilesSetting.set(previouslyViewedFiles);\n }\n\n updateVersionFrom33To34(): void {\n // Introduces the 'isLogpoint' property on stored breakpoints. This information was\n // previously encoded in the 'condition' itself. This migration leaves the condition\n // alone but ensures that 'isLogpoint' is accurate for already stored breakpoints.\n // This enables us to use the 'isLogpoint' property in code.\n // A separate migration will remove the special encoding from the condition itself\n // once all refactorings are done.\n\n // The prefix/suffix are hardcoded here, since these constants will be removed in\n // the future.\n const logpointPrefix = '/** DEVTOOLS_LOGPOINT */ console.log(';\n const logpointSuffix = ')';\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const breakpointsSetting = Settings.instance().createLocalSetting('breakpoints', []);\n const breakpoints = breakpointsSetting.get();\n for (const breakpoint of breakpoints) {\n const isLogpoint =\n breakpoint.condition.startsWith(logpointPrefix) && breakpoint.condition.endsWith(logpointSuffix);\n breakpoint['isLogpoint'] = isLogpoint;\n }\n breakpointsSetting.set(breakpoints);\n }\n\n updateVersionFrom34To35(): void {\n // Uses the 'isLogpoint' property on stored breakpoints to remove the prefix/suffix\n // from logpoints. This way, we store the entered log point condition as the user\n // entered it.\n\n // The prefix/suffix are hardcoded here, since these constants will be removed in\n // the future.\n const logpointPrefix = '/** DEVTOOLS_LOGPOINT */ console.log(';\n const logpointSuffix = ')';\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const breakpointsSetting = Settings.instance().createLocalSetting('breakpoints', []);\n const breakpoints = breakpointsSetting.get();\n for (const breakpoint of breakpoints) {\n const {condition, isLogpoint} = breakpoint;\n if (isLogpoint) {\n breakpoint.condition = condition.slice(logpointPrefix.length, condition.length - logpointSuffix.length);\n }\n }\n breakpointsSetting.set(breakpoints);\n }\n\n updateVersionFrom35To36(): void {\n // We have changed the default from 'false' to 'true' and this updates the existing setting just for once.\n Settings.instance().createSetting('showThirdPartyIssues', true).set(true);\n }\n\n updateVersionFrom36To37(): void {\n const updateStorage = (storage: SettingsStorage): void => {\n for (const key of storage.keys()) {\n const normalizedKey = Settings.normalizeSettingName(key);\n if (normalizedKey !== key) {\n const value = storage.get(key);\n removeSetting({name: key, storage});\n storage.set(normalizedKey, value);\n }\n }\n };\n updateStorage(Settings.instance().globalStorage);\n updateStorage(Settings.instance().syncedStorage);\n updateStorage(Settings.instance().localStorage);\n\n for (const key of Settings.instance().globalStorage.keys()) {\n if ((key.startsWith('data-grid-') && key.endsWith('-column-weights')) || key.endsWith('-tab-order') ||\n key === 'views-location-override' || key === 'closeable-tabs') {\n const setting = Settings.instance().createSetting(key, {});\n setting.set(Platform.StringUtilities.toKebabCaseKeys(setting.get()));\n }\n if (key.endsWith('-selected-tab')) {\n const setting = Settings.instance().createSetting(key, '');\n setting.set(Platform.StringUtilities.toKebabCase(setting.get()));\n }\n }\n }\n\n /*\n * Any new migration should be added before this comment.\n *\n * IMPORTANT: Migrations must be idempotent, since they may be applied\n * multiple times! E.g. when renaming a setting one has to check that the\n * a setting with the new name does not yet exist.\n * ----------------------------------------------------------------------- */\n\n private migrateSettingsFromLocalStorage(): void {\n // This step migrates all the settings except for the ones below into the browser profile.\n const localSettings = new Set([\n 'advancedSearchConfig',\n 'breakpoints',\n 'consoleHistory',\n 'domBreakpoints',\n 'eventListenerBreakpoints',\n 'fileSystemMapping',\n 'lastSelectedSourcesSidebarPaneTab',\n 'previouslyViewedFiles',\n 'savedURLs',\n 'watchExpressions',\n 'workspaceExcludedFolders',\n 'xhrBreakpoints',\n ]);\n if (!window.localStorage) {\n return;\n }\n\n for (const key in window.localStorage) {\n if (localSettings.has(key)) {\n continue;\n }\n const value = window.localStorage[key];\n window.localStorage.removeItem(key);\n Settings.instance().globalStorage.set(key, value);\n }\n }\n\n private clearBreakpointsWhenTooMany(breakpointsSetting: Setting, maxBreakpointsCount: number): void {\n // If there are too many breakpoints in a storage, it is likely due to a recent bug that caused\n // periodical breakpoints duplication leading to inspector slowness.\n if (breakpointsSetting.get().length > maxBreakpointsCount) {\n breakpointsSetting.set([]);\n }\n }\n}\n\nexport const enum SettingStorageType {\n /**\n * Synced storage persists settings with the active Chrome profile but also\n * syncs the settings across devices via Chrome Sync.\n */\n SYNCED = 'Synced',\n /** Global storage persists settings with the active Chrome profile */\n GLOBAL = 'Global',\n /** Uses Window.localStorage */\n LOCAL = 'Local',\n /** Session storage dies when DevTools window closes */\n SESSION = 'Session',\n}\n\nexport function moduleSetting(settingName: string): Setting {\n return Settings.instance().moduleSetting(settingName);\n}\n\nexport function settingForTest(settingName: string): Setting {\n return Settings.instance().settingForTest(settingName);\n}\n\nexport {\n getLocalizedSettingsCategory,\n maybeRemoveSettingExtension,\n registerSettingExtension,\n RegExpSettingItem,\n SettingCategory,\n SettingExtensionOption,\n SettingRegistration,\n SettingType,\n registerSettingsForTest,\n resetSettings,\n};\n\nexport interface Serializer {\n stringify: (value: I) => string;\n parse: (value: string) => O;\n}\n\nexport interface SimpleSettingOption {\n value: string|boolean;\n title: string;\n text?: string;\n raw?: boolean;\n}\n"]}
\ No newline at end of file
+{"version":3,"file":"Settings.js","sourceRoot":"","sources":["../../../../../../front_end/core/common/Settings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AACpD,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAC;AAExC,OAAO,EAAC,OAAO,EAAC,MAAM,cAAc,CAAC;AAErC,OAAO,EAAC,aAAa,EAAC,MAAM,aAAa,CAAC;AAC1C,OAAO,EACL,4BAA4B,EAC5B,qBAAqB,IAAI,6BAA6B,EAEtD,2BAA2B,EAE3B,wBAAwB,EACxB,uBAAuB,EACvB,aAAa,GAKd,MAAM,0BAA0B,CAAC;AAElC,IAAI,gBAAoC,CAAC;AAEzC,MAAM,OAAO,QAAQ;IAUN;IAAyC;IACzC;IAVJ,eAAe,CAAkB;IAC1C,cAAc,CAAc;IAC5B,4BAA4B,CAAoC;IAChE,aAAa,CAA+B;IAC5C,SAAS,CAAgC;IAChC,cAAc,CAAgC;IAC9C,OAAO,CAA0B;IAE1C,YACa,aAA8B,EAAW,aAA8B,EACvE,YAA6B,EAAE,MAAgC;QAD/D,kBAAa,GAAb,aAAa,CAAiB;QAAW,kBAAa,GAAb,aAAa,CAAiB;QACvE,iBAAY,GAAZ,YAAY,CAAiB;QACxC,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,CAAC,EAAE,CAAC,CAAC;QAE/C,IAAI,CAAC,cAAc,GAAG,IAAI,GAAG,EAAE,CAAC;QAEhC,IAAI,CAAC,4BAA4B,GAAG,IAAI,GAAG,EAAE,CAAC;QAE9C,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,EAAiB,CAAC;QACxD,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC;QAC3B,IAAI,CAAC,cAAc,GAAG,IAAI,GAAG,EAAE,CAAC;QAEhC,IAAI,CAAC,OAAO,GAAG,MAAM,IAAI,EAAE,CAAC;QAC5B,KAAK,MAAM,YAAY,IAAI,IAAI,CAAC,qBAAqB,EAAE,EAAE,CAAC;YACxD,MAAM,EAAC,WAAW,EAAE,YAAY,EAAE,WAAW,EAAC,GAAG,YAAY,CAAC;YAC9D,MAAM,OAAO,GAAG,YAAY,CAAC,WAAW,oCAAsB,CAAC;YAE/D,MAAM,qBAAqB,GAAG,OAAO,YAAY,KAAK,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;YAC7G,MAAM,OAAO,GAAG,OAAO,IAAI,OAAO,qBAAqB,KAAK,QAAQ,CAAC,CAAC;gBAClE,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,qBAAqB,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC;gBACtF,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,qBAAqB,EAAE,WAAW,CAAC,CAAC;YAExE,OAAO,CAAC,gBAAgB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YAC7C,IAAI,YAAY,CAAC,mBAAmB,EAAE,CAAC;gBACrC,OAAO,CAAC,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;YAC5G,CAAC;YACD,OAAO,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;YAEtC,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,qBAAqB;QACnB,OAAO,6BAA6B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,CAAC,WAAW;QAChB,OAAO,OAAO,gBAAgB,KAAK,WAAW,CAAC;IACjD,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,OAMZ,EAAC,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAC;QAChF,MAAM,EAAC,QAAQ,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,EAAC,GAAG,IAAI,CAAC;QAC5E,IAAI,CAAC,gBAAgB,IAAI,QAAQ,EAAE,CAAC;YAClC,IAAI,CAAC,aAAa,IAAI,CAAC,aAAa,IAAI,CAAC,YAAY,EAAE,CAAC;gBACtD,MAAM,IAAI,KAAK,CAAC,yEAAyE,IAAI,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;YAChH,CAAC;YAED,gBAAgB,GAAG,IAAI,QAAQ,CAAC,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;QACtF,CAAC;QAED,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAED,MAAM,CAAC,cAAc;QACnB,gBAAgB,GAAG,SAAS,CAAC;IAC/B,CAAC;IAED,aAAa;QACX,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAEO,qBAAqB,CAAC,OAAyB;QACrD,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;QACjC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;QAC9B,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,2BAA2B,WAAW,GAAG,CAAC,CAAC;QAC7D,CAAC;QACD,IAAI,QAAQ,IAAI,KAAK,EAAE,CAAC;YACtB,MAAM,WAAW,GAAG,IAAI,CAAC,4BAA4B,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;YACjF,IAAI,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC3B,MAAM,IAAI,KAAK,CAAC,0BAA0B,KAAK,4BAA4B,QAAQ,GAAG,CAAC,CAAC;YAC1F,CAAC;YACD,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACvB,IAAI,CAAC,4BAA4B,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAC/D,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACrC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,CAAC,oBAAoB,CAAC,IAAY;QACtC,IAAI;YACE,iBAAiB,CAAC,2BAA2B;YAC7C,iBAAiB,CAAC,2BAA2B;YAC7C,iBAAiB,CAAC,0BAA0B;YAC5C,kBAAkB;YAClB,aAAa;SACd,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,QAAQ,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACpD,CAAC;IAED,mEAAmE;IACnE,8DAA8D;IAC9D,aAAa,CAAU,WAAmB;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,CAAe,CAAC;QACnE,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,WAAW,CAAC,CAAC;QAC3D,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,cAAc,CAAC,WAAmB;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAChD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,WAAW,CAAC,CAAC;QAC3D,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,aAAa,CAAI,GAAW,EAAE,YAAe,EAAE,WAAgC;QAC7E,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;QAClD,IAAI,OAAO,GAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAgB,CAAC;QACtD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,YAAY,EAAE,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;YACtE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,kBAAkB,CAAI,GAAW,EAAE,YAAe;QAChD,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,YAAY,yCAA2B,CAAC;IACzE,CAAC;IAED,mBAAmB,CAAC,GAAW,EAAE,YAAoB,EAAE,UAAmB,EAAE,WAAgC;QAE1G,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,SAAS,CAAC,GAAG,CACd,GAAG,EAAE,IAAI,aAAa,CAAC,GAAG,EAAE,YAAY,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;QACpH,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAkB,CAAC;IAClD,CAAC;IAED,QAAQ;QACN,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC;QAC/B,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC;QAC/B,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC;QAC9B,IAAI,iBAAiB,EAAE,CAAC,cAAc,EAAE,CAAC;IAC3C,CAAC;IAEO,eAAe,CAAC,WAAgC;QACtD,QAAQ,WAAW,EAAE,CAAC;YACpB;gBACE,OAAO,IAAI,CAAC,YAAY,CAAC;YAC3B;gBACE,OAAO,IAAI,CAAC,eAAe,CAAC;YAC9B;gBACE,OAAO,IAAI,CAAC,aAAa,CAAC;YAC5B;gBACE,OAAO,IAAI,CAAC,aAAa,CAAC;QAC9B,CAAC;QACD,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;CACF;AAUD,MAAM,CAAC,MAAM,YAAY,GAAyB;IAChD,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC;IAClB,GAAG,EAAE,GAAG,EAAE,GAAE,CAAC;IACb,GAAG,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;IAC9B,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC;IAChB,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;CAChB,CAAC;AAEF,MAAM,OAAO,eAAe;IAEd;IAAiD;IACxC;IAFrB,YACY,MAA8B,EAAmB,eAAqC,YAAY,EACzF,gBAAwB,EAAE;QADnC,WAAM,GAAN,MAAM,CAAwB;QAAmB,iBAAY,GAAZ,YAAY,CAAqC;QACzF,kBAAa,GAAb,aAAa,CAAa;IAC/C,CAAC;IAED,QAAQ,CAAC,IAAY;QACnB,IAAI,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QACjC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,GAAG,CAAC,IAAY,EAAE,KAAa;QAC7B,IAAI,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QACjC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACrC,CAAC;IAED,GAAG,CAAC,IAAY;QACd,IAAI,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QACjC,OAAO,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC;IAC7B,CAAC;IAED,GAAG,CAAC,IAAY;QACd,IAAI,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QACjC,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,YAAoB;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;QAC/C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,KAAK,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACzC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QAChC,CAAC;aAAM,IAAI,CAAC,KAAK,EAAE,CAAC;YAClB,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC5B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,CAAC,IAAY;QACjB,IAAI,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QACjC,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACzB,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,SAAS;QACP,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;IAED,IAAI;QACF,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;IAED,SAAS;QACP,OAAO,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QAEjD,MAAM,KAAK,GAGP,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC;QACtB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC9B,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;QACvC,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEhC,SAAS,UAAU,CAAC,IAAY,EAAE,IAAY;YAC5C,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAEtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;YAC/C,OAAO,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClF,CAAC;IACH,CAAC;CACF;AAED,SAAS,aAAa,CAAC,OAAiD;IACtE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC1B,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC;IAErC,QAAQ,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACpC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAErC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,OAAO,WAAW;IACb,QAAQ,CAAU;IAClB,OAAO,CAAoC;IAC3C,UAAU,CAA2B;IAE9C,YAAY,EAAC,iBAAiB,EAAsB;QAClD,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;QACjF,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,iBAAiB,CAAC,QAAQ,CAAC;QAC3C,IAAI,CAAC,OAAO,GAAG,iBAAiB,CAAC,OAAO,EAAE,CAAC;QAC3C,IAAI,CAAC,UAAU,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;YAC5C,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,0BAA0B,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC;YAC1G,SAAS,CAAC;IAChB,CAAC;CACF;AAED,MAAM,OAAO,OAAO;IAaL;IAAuB;IAAkC;IACzD;IAbb,cAAc,CAA2C;IACzD,cAAc,CAAU;IACxB,aAAa,GAA6B,IAAI,CAAC;IAC/C,mBAAmB,CAAW;IAC9B,MAAM,CAAK;IACX,2FAA2F;IAC3F,WAAW,GAA2B,IAAI,CAAC;IAC3C,cAAc,CAAW;IACzB,SAAS,CAAW;IACpB,YAAY,GAAqB,IAAI,CAAC;IAEtC,YACa,IAAY,EAAW,YAAe,EAAmB,YAA0C,EACnG,OAAwB;QADxB,SAAI,GAAJ,IAAI,CAAQ;QAAW,iBAAY,GAAZ,YAAY,CAAG;QAAmB,iBAAY,GAAZ,YAAY,CAA8B;QACnG,YAAO,GAAP,OAAO,CAAiB;QACnC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,aAAa,CAAC,UAAkC;QAC9C,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;IAChC,CAAC;IAED,iBAAiB,CAAC,QAA6C,EAAE,UAAmB;QAClF,OAAO,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC7E,CAAC;IAED,oBAAoB,CAAC,QAA6C,EAAE,UAAmB;QACrF,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;IACzE,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,cAAc,CAAC;QAC7B,CAAC;QACD,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC;QAC/B,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,gBAAgB,CAAC,aAAkE;QACjF,IAAI,aAAa,EAAE,CAAC;YAClB,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;QACtC,CAAC;IACH,CAAC;IAED,QAAQ,CAAC,KAAa;QACpB,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;IAC9B,CAAC;IAED,qBAAqB,CAAC,kBAA2B;QAC/C,IAAI,CAAC,mBAAmB,GAAG,kBAAkB,CAAC;IAChD,CAAC;IAED,QAAQ;QACN,IAAI,IAAI,CAAC,aAAa,EAAE,iBAAiB,EAAE,CAAC;YAC1C,MAAM,EAAC,QAAQ,EAAC,GAAG,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,aAAa,EAAE,CAAC,CAAC;YAC7F,iEAAiE;YACjE,mBAAmB;YACnB,IAAI,QAAQ,EAAE,CAAC;gBACb,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC;IACjC,CAAC;IAED,cAAc;QACZ,IAAI,IAAI,CAAC,aAAa,EAAE,iBAAiB,EAAE,CAAC;YAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,aAAa,EAAE,CAAC,CAAC;YACzF,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACpB,OAAO,MAAM,CAAC,MAAM,CAAC;YACvB,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,WAAW,CAAC,QAAiB;QAC3B,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,YAAY,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxD,CAAC;IAED,GAAG;QACD,IAAI,IAAI,CAAC,mBAAmB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACrD,OAAO,IAAI,CAAC,YAAY,CAAC;QAC3B,CAAC;QAED,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YACvC,OAAO,IAAI,CAAC,MAAM,CAAC;QACrB,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC;QAChC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC;gBACH,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACpE,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,mGAAmG;IACnG,oGAAoG;IACpG,uDAAuD;IACvD,gBAAgB;QACd,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;YACpB,OAAO;QACT,CAAC;QACD,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC;QAChC,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC;gBACH,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC9C,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;QAED,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;YACvB,IAAI,CAAC,YAAY,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACrE,CAAC;QAED,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,GAAG,CAAC,KAAQ;QACV,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YACxD,IAAI,CAAC;gBACH,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;YAC7C,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,sCAAsC,GAAG,IAAI,CAAC,IAAI,GAAG,WAAW,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;QACzG,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC/D,CAAC;IAED,eAAe,CAAC,YAAiC;QAC/C,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;QAClC,MAAM,EAAC,iBAAiB,EAAC,GAAG,YAAY,CAAC;QACzC,IAAI,iBAAiB,EAAE,QAAQ,EAAE,CAAC;YAChC,MAAM,UAAU,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;gBAC7C,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,0BAA0B,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC;gBAC1G,SAAS,CAAC;YACd,IAAI,CAAC,CAAC,UAAU,IAAI,UAAU,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC;gBAC5C,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAC5B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI;QACF,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC;QACxC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;YACrD,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;gBAC1C,MAAM,EAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAC,GAAG,GAAG,CAAC;gBACtC,OAAO;oBACL,KAAK;oBACL,KAAK,EAAE,KAAK,EAAE;oBACd,IAAI,EAAE,OAAO,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI;oBAChD,GAAG;iBACJ,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,cAAc;QACZ,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC,aAAa,CAAC,cAAc,IAAI,IAAI,CAAC;QACnD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,QAAQ;QACN,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,IAAI,IAAI,CAAC;QAC7C,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI;QACF,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;YAClD,yGAAyG;YACzG,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9D,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,IAAI,IAAI,CAAC;QAC1C,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,aAAa,EAAE,SAAS,IAAI,IAAI,CAAC;IAC/C,CAAC;IAED,IAAI,WAAW;QACb,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,iBAAiB,EAAE,CAAC;YACjE,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,IAAI,CAAC,YAAY,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC1D,CAAC;QACD,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAEO,wBAAwB,CAAC,OAAe,EAAE,IAAY,EAAE,KAAa;QAC3E,MAAM,YAAY,GACd,kCAAkC,GAAG,IAAI,CAAC,IAAI,GAAG,kBAAkB,GAAG,KAAK,CAAC,MAAM,GAAG,WAAW,GAAG,OAAO,CAAC;QAC/G,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC5B,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACvC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;IAC3B,CAAC;CACF;AAED,mEAAmE;AACnE,8DAA8D;AAC9D,MAAM,OAAO,aAAc,SAAQ,OAAY;IAC7C,WAAW,CAAmB;IAC9B,MAAM,CAAe;IAErB,YACI,IAAY,EAAE,YAAoB,EAAE,YAA0C,EAAE,OAAwB,EACxG,UAAmB;QACrB,KAAK,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,EAAC,OAAO,EAAE,YAAY,EAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;QAClF,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;IAChC,CAAC;IAEQ,GAAG;QACV,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACnC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED,UAAU;QACR,OAAO,KAAK,CAAC,GAAG,EAAE,CAAC;IACrB,CAAC;IAEQ,GAAG,CAAC,KAAa;QACxB,IAAI,CAAC,UAAU,CAAC,CAAC,EAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAC,CAAC,CAAC,CAAC;IACvD,CAAC;IAED,UAAU,CAAC,KAA0B;QACnC,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QACxB,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACnB,CAAC;IAED,QAAQ;QACN,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YACvC,OAAO,IAAI,CAAC,MAAM,CAAC;QACrB,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC3B,IAAI,OAAO,EAAE,CAAC;gBACZ,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;QACb,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;CACF;AAED,MAAM,OAAO,iBAAiB;IAC5B,MAAM,CAAU,2BAA2B,GAAG,kBAAkB,CAAC;IACjE,MAAM,CAAU,2BAA2B,GAAG,wBAAwB,CAAC;IACvE,MAAM,CAAU,0BAA0B,GAAG,uBAAuB,CAAC;IAErE,MAAM,CAAU,eAAe,GAAG,EAAE,CAAC;IAE5B,qBAAqB,CAAkB;IACvC,qBAAqB,CAAkB;IACvC,oBAAoB,CAAkB;IAE/C;QACE,gGAAgG;QAChG,IAAI,CAAC,qBAAqB,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,aAAa,CAC1D,iBAAiB,CAAC,2BAA2B,EAAE,iBAAiB,CAAC,eAAe,2CAA4B,CAAC;QACjH,IAAI,CAAC,qBAAqB,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,aAAa,CAC1D,iBAAiB,CAAC,2BAA2B,EAAE,iBAAiB,CAAC,eAAe,2CAA4B,CAAC;QACjH,IAAI,CAAC,oBAAoB,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,aAAa,CACzD,iBAAiB,CAAC,0BAA0B,EAAE,iBAAiB,CAAC,eAAe,yCAA2B,CAAC;IACjH,CAAC;IAED;;;OAGG;IACH,cAAc;QACZ,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAC;QAClE,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAC;QAClE,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAC;IACnE,CAAC;IAED;;;;;;OAMG;IACH,aAAa;QACX,MAAM,cAAc,GAAG,iBAAiB,CAAC,eAAe,CAAC;QACzD,MAAM,cAAc,GAChB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,qBAAqB,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,CAAC,CAAC;QAClH,MAAM,YAAY,GAAG,IAAI,CAAC,2BAA2B,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;QACtF,OAAO,CAAC,MAAM;QACV,aAAa;QACb,IAAI,CAAC,oBAAoB,cAAc,KAAK,cAAc,GAAG,CAAC,EAAE,CAAC,KAAK,SAAS,EAC/E,oFAAoF,CAAC,CAAC;QAC1F,KAAK,MAAM,MAAM,IAAI,YAAY,EAAE,CAAC;YAClC,6CAA6C;YAC7C,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QACD,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;IAEO,2BAA2B,CAAC,UAAkB,EAAE,cAAsB;QAC5E,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,KAAK,IAAI,CAAC,GAAG,UAAU,EAAE,CAAC,GAAG,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC;YACjD,MAAM,CAAC,IAAI,CAAC,mBAAmB,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,qBAAqB;QAC3B,IAAI,CAAC,2BAA2B,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,kBAAkB,CAAC,aAAa,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;IACtG,CAAC;IAEO,qBAAqB;QAC3B,QAAQ,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,uBAAuB,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACzE,CAAC;IAEO,qBAAqB;QAC3B,QAAQ,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACnE,aAAa,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC,CAAC;IAC7E,CAAC;IAEO,qBAAqB;QAC3B,MAAM,YAAY,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,wCAAwC,EAAE,KAAK,CAAC,CAAC;QACxG,aAAa,CAAC,oCAAoC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC;QAC5E,aAAa,CAAC,YAAY,CAAC,CAAC;IAC9B,CAAC;IAEO,qBAAqB;QAC3B,MAAM,YAAY,GAEd;YACF,0BAA0B,EAAE,8BAA8B;YAC1D,oBAAoB,EAAE,6BAA6B;YACnD,oBAAoB,EAAE,0BAA0B;YAChD,6BAA6B,EAAE,4BAA4B;YAC3D,yBAAyB,EAAE,8BAA8B;YACzD,mCAAmC,EAAE,wCAAwC;YAC7E,2BAA2B,EAAE,gCAAgC;YAC7D,qBAAqB,EAAE,4BAA4B;YACnD,mBAAmB,EAAE,4BAA4B;YACjD,mBAAmB,EAAE,4BAA4B;YACjD,iCAAiC,EAAE,qCAAqC;YACxE,6BAA6B,EAAE,2CAA2C;YAC1E,kBAAkB,EAAE,oCAAoC;YACxD,gBAAgB,EAAE,mCAAmC;YACrD,eAAe,EAAE,0CAA0C;YAC3D,kBAAkB,EAAE,2BAA2B;YAC/C,kBAAkB,EAAE,2BAA2B;YAC/C,oBAAoB,EAAE,6BAA6B;YACnD,qBAAqB,EAAE,8BAA8B;SACtD,CAAC;QACF,MAAM,KAAK,GAAG,EAAE,CAAC;QACjB,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;YACnC,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;YACtC,MAAM,QAAQ,GAAG,OAAO,GAAG,GAAG,CAAC;YAE/B,IAAI,QAAQ,GAAY,IAAI,CAAC;YAC7B,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACrE,IAAI,UAAU,CAAC,GAAG,EAAE,KAAK,KAAK,EAAE,CAAC;gBAC/B,QAAQ,GAAG,QAAQ,IAAI,EAAE,CAAC;gBAC1B,mBAAmB;gBACnB,QAAQ,CAAC,QAAQ,GAAG,EAAE,CAAC;gBACvB,mBAAmB;gBACnB,QAAQ,CAAC,QAAQ,CAAC,IAAI,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC;gBAC1C,aAAa,CAAC,UAAU,CAAC,CAAC;YAC5B,CAAC;YACD,MAAM,WAAW,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YACvE,IAAI,WAAW,CAAC,GAAG,EAAE,KAAK,KAAK,EAAE,CAAC;gBAChC,QAAQ,GAAG,QAAQ,IAAI,EAAE,CAAC;gBAC1B,mBAAmB;gBACnB,QAAQ,CAAC,UAAU,GAAG,EAAE,CAAC;gBACzB,mBAAmB;gBACnB,QAAQ,CAAC,UAAU,CAAC,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;gBAC7C,aAAa,CAAC,WAAW,CAAC,CAAC;YAC7B,CAAC;YACD,IAAI,QAAQ,EAAE,CAAC;gBACb,QAAQ,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC;IACH,CAAC;IAEO,qBAAqB;QAC3B,MAAM,YAAY,GAEd;YACF,qBAAqB,EAAE,4BAA4B;YACnD,eAAe,EAAE,qCAAqC;YACtD,gCAAgC,EAAE,gCAAgC;SACnE,CAAC;QAEF,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;YACnC,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACpE,IAAI,UAAU,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC;gBAC9B,aAAa,CAAC,UAAU,CAAC,CAAC;gBAC1B,SAAS;YACX,CAAC;YAED,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;YACtC,MAAM,MAAM,GAAG,OAAO,KAAK,gCAAgC,CAAC;YAC5D,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,EAAE,KAAK,MAAM,CAAC;YAC3C,aAAa,CAAC,UAAU,CAAC,CAAC;YAC1B,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC;YAE9C,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAClE,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;YACxC,mEAAmE;YACnE,mBAAmB;YACnB,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAC;YAC5C,mEAAmE;YACnE,mBAAmB;YACnB,QAAQ,CAAC,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC;YACtC,mEAAmE;YACnE,mBAAmB;YACnB,QAAQ,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,IAAI,EAAE,CAAC;YAChD,mEAAmE;YACnE,mBAAmB;YACnB,QAAQ,CAAC,UAAU,CAAC,QAAQ,GAAG,QAAQ,CAAC;YACxC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAEO,qBAAqB;QAC3B,MAAM,YAAY,GAAG;YACnB,mCAAmC,EAAE,qCAAqC;YAC1E,2BAA2B,EAAE,6BAA6B;YAC1D,wBAAwB,EAAE,0BAA0B;YACpD,yCAAyC,EAAE,2CAA2C;SACvF,CAAC;QAEF,MAAM,KAAK,GAAG,EAAE,CAAC;QACjB,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;YAChC,MAAM,OAAO,GACT,QAAQ,CAAC,QAAQ,EAAE,CAAC,aAAa,CAA6D,IAAI,EAAE,KAAK,CAAC,CAAC;YAC/G,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;YAC5B,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;gBACpB,SAAS;YACX,CAAC;YACD,0EAA0E;YAC1E,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;gBACrE,KAAK,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC;YAC1B,CAAC;YACD,IAAI,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;gBAC3E,KAAK,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC;YAC5B,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAEO,qBAAqB;IAC7B,CAAC;IAEO,qBAAqB;QAC3B,MAAM,YAAY,GAAG,CAAC,wBAAwB,EAAE,+BAA+B,CAAC,CAAC;QAEjF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;YAC7C,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAmB,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACzF,IAAI,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;YAC1B,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO;YACT,CAAC;YACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9B,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;YAClB,CAAC;YACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;gBACtC,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;oBACjC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,EAAC,CAAC;gBACjC,CAAC;YACH,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAEO,sBAAsB;QAC5B,oDAAoD;QACpD,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YACtC,IAAI,GAAG,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;gBACvC,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;IACH,CAAC;IAEO,uBAAuB;QAC7B,MAAM,cAAc,GAAG,qBAAqB,CAAC;QAC7C,MAAM,cAAc,GAAG,0BAA0B,CAAC;QAClD,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAU,cAAc,EAAE,SAAS,CAAC,CAAC;QACzF,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QACD,MAAM,OAAO,GAAG,EAAE,CAAC;QACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;YACrC,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACtB,MAAM,MAAM,GAIR,EAAE,CAAC;YACP,MAAM,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;YACjC,MAAM,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;YAC3B,MAAM,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC;YAC1C,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC;YAC5B,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;gBACnB,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACvC,CAAC;YACD,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACpB,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACxC,CAAC;YACD,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;YACtB,MAAM,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,GAAG,EAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAC,CAAC;YAChF,MAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,GAAG,EAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,EAAC,CAAC;YAClF,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC,GAAG,KAAK,CAAC,mBAAmB,CAAC,CAAC;YACpE,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YACrB,MAAM,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC;YACjC,MAAM,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;YAC3B,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvB,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,QAAQ,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAY,cAAc,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAChF,CAAC;QACD,aAAa,CAAC,UAAU,CAAC,CAAC;IAC5B,CAAC;IAEO,uBAAuB;QAC7B,IAAI,CAAC,+BAA+B,EAAE,CAAC;IACzC,CAAC;IAEO,uBAAuB;QAC7B,IAAI,CAAC,+BAA+B,EAAE,CAAC;QACvC,aAAa,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAC,CAAC;IAC/E,CAAC;IAEO,uBAAuB;QAC7B,MAAM,YAAY,GAAG,EAAC,UAAU,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAC,CAAC;QAClD,QAAQ,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,mBAAmB,EAAE,YAAY,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACzF,CAAC;IAEO,uBAAuB;QAC7B,mEAAmE;QACnE,8DAA8D;QAC9D,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,kBAAkB,CAAM,0BAA0B,EAAE,EAAE,CAAC,CAAC;QAC5F,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAEV,EAAE,CAAC;QACP,KAAK,MAAM,cAAc,IAAI,QAAQ,EAAE,CAAC;YACtC,QAAQ,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC;YAC9B,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;gBAC7C,QAAQ,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACxB,CAAC;IAEO,uBAAuB;QAC7B,mEAAmE;QACnE,8DAA8D;QAC9D,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAM,0BAA0B,EAAE,EAAE,CAAC,CAAC;QACvF,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAChC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YACzC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;QAC7C,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACzB,CAAC;IAEO,uBAAuB;QAC7B,mEAAmE;QACnE,8DAA8D;QAC9D,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAM,iCAAiC,EAAE,EAAE,CAAC,CAAC;QAC9F,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAAG,EAAE,CAAC;QACpB,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;gBAC9B,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ;oBACpE,OAAO,MAAM,CAAC,KAAK,CAAC,UAAU,KAAK,QAAQ,IAAI,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;oBAC5F,QAAQ,CAAC,IAAI,CAAC;wBACZ,KAAK,EAAE,MAAM,CAAC,KAAK;wBACnB,KAAK,EAAE,EAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,EAAC;qBAC3G,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACxB,CAAC;IAEO,uBAAuB;QAC7B,mEAAmE;QACnE,8DAA8D;QAC9D,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,kBAAkB,CAAM,0BAA0B,EAAE,EAAE,CAAC,CAAC;QAC5F,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAEV,EAAE,CAAC;QACP,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;YAC9B,IAAI,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACxC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBAClC,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC3B,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;gBAC9B,CAAC;qBAAM,CAAC;oBACN,MAAM,GAAG,UAAU,GAAG,MAAM,CAAC;gBAC/B,CAAC;YACH,CAAC;YACD,QAAQ,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACxB,CAAC;IAEO,uBAAuB;QAC7B,MAAM,cAAc,GAAG,EAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAC,CAAC;QAC3F,mEAAmE;QACnE,8DAA8D;QAC9D,MAAM,qBAAqB,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAM,6BAA6B,EAAE,cAAc,CAAC,CAAC;QACpH,MAAM,cAAc,GAAG,qBAAqB,CAAC,GAAG,EAAE,CAAC;QACnD,cAAc,CAAC,IAAI,GAAG,IAAI,CAAC;QAC3B,cAAc,CAAC,QAAQ,GAAG,IAAI,CAAC;QAE/B,MAAM,OAAO,GAIT,EAAE,CAAC;QACP,KAAK,MAAM,QAAQ,IAAI,cAAc,EAAE,CAAC;YACtC,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC7C,SAAS;YACX,CAAC;YACD,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,GAAG,EAAC,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC,EAAC,CAAC;QACxE,CAAC;QACD,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;QAC9E,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACxB,aAAa,CAAC,qBAAqB,CAAC,CAAC;IACvC,CAAC;IAEO,uBAAuB;QAC7B,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,0BAA0B,EAAE,EAAE,CAAC,CAAC;QACrF,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;QAC3E,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC;QACjC,aAAa,CAAC,UAAU,CAAC,CAAC;IAC5B,CAAC;IAEO,uBAAuB;QAC7B,MAAM,cAAc,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;QAClF,MAAM,OAAO,GAAI,cAAc,CAAC,GAAG,EAEjC,CAAC;QACH,OAAO,OAAO,CAAC,UAAU,CAAC,CAAC;QAC3B,OAAO,OAAO,CAAC,WAAW,CAAC,CAAC;QAC5B,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;IAEO,uBAAuB;QAC7B,mEAAmE;QACnE,8DAA8D;QAC9D,MAAM,kBAAkB,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,kBAAkB,CAAM,aAAa,EAAE,EAAE,CAAC,CAAC;QAC1F,MAAM,WAAW,GAAG,kBAAkB,CAAC,GAAG,EAAE,CAAC;QAC7C,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACrC,UAAU,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;YAC/C,OAAO,UAAU,CAAC,cAAc,CAAC,CAAC;QACpC,CAAC;QACD,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACtC,CAAC;IAEO,uBAAuB;QAC7B,wBAAwB;IAC1B,CAAC;IAEO,uBAAuB;QAC7B,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;QACtF,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAC;QAClG,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC;QACjC,aAAa,CAAC,UAAU,CAAC,CAAC;IAC5B,CAAC;IAEO,uBAAuB;QAC7B,MAAM,cAAc,GAAG,EAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAC,CAAC;QAC3F,mEAAmE;QACnE,8DAA8D;QAC9D,MAAM,wBAAwB,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAM,mBAAmB,EAAE,cAAc,CAAC,CAAC;QAC7G,MAAM,OAAO,GAAG,wBAAwB,CAAC,GAAG,EAAE,CAAC;QAC/C,OAAO,OAAO,CAAC,OAAO,CAAC;QACvB,wBAAwB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IAEO,uBAAuB;QAC7B,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;QAC9E,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC;QAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC5D,IAAI,UAAU,EAAE,CAAC;YACf,mEAAmE;YACnE,8DAA8D;YAC9D,MAAM,iBAAiB,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAM,oBAAoB,EAAE,EAAE,CAAC,CAAC;YAC3F,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,iBAAiB,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5E,iBAAiB,CAAC,GAAG,CAAC,GAAG,UAAU,GAAG,MAAM,EAAE,CAAC,CAAC;QAClD,CAAC;QACD,aAAa,CAAC,UAAU,CAAC,CAAC;IAC5B,CAAC;IAEO,uBAAuB;QAC7B,SAAS,wBAAwB,CAAC,WAAmB,EAAE,IAAY,EAAE,EAAU;YAC7E,mEAAmE;YACnE,8DAA8D;YAC9D,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAM,WAAW,EAAE,EAAE,CAAC,CAAC;YACxE,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;YAC5B,IAAI,IAAI,IAAI,KAAK,EAAE,CAAC;gBAClB,KAAK,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;gBACxB,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;QAED,SAAS,qBAAqB,CAAC,WAAmB,EAAE,IAAY,EAAE,EAAU;YAC1E,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;YACnE,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;YAC5B,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAED,wBAAwB,CAAC,gBAAgB,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QAChE,wBAAwB,CAAC,qBAAqB,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QACrE,qBAAqB,CAAC,mBAAmB,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAClE,CAAC;IAEO,uBAAuB;QAC7B,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;QAChF,IAAI,OAAO,CAAC,GAAG,EAAE,KAAK,SAAS,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAEO,uBAAuB;QAC7B,SAAS,wBAAwB,CAAC,WAAmB,EAAE,IAAY,EAAE,EAAU;YAC7E,mEAAmE;YACnE,8DAA8D;YAC9D,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAM,WAAW,EAAE,EAAE,CAAC,CAAC;YACxE,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;YAC5B,IAAI,IAAI,IAAI,KAAK,EAAE,CAAC;gBAClB,KAAK,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;gBACxB,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;QAED,SAAS,qBAAqB,CAAC,WAAmB,EAAE,IAAY,EAAE,EAAU;YAC1E,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;YACnE,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;YAC5B,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAED,wBAAwB,CAAC,gBAAgB,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;QACnE,wBAAwB,CAAC,qBAAqB,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;QACxE,qBAAqB,CAAC,mBAAmB,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;IACrE,CAAC;IAEO,uBAAuB;QAC7B,uCAAuC;QACvC,MAAM,mBAAmB,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;QAEnF,wBAAwB;QACxB,MAAM,wBAAwB,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;QAC9F,MAAM,yBAAyB,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,2BAA2B,EAAE,EAAE,CAAC,CAAC;QACrG,MAAM,eAAe,GAAG,wBAAwB,CAAC,GAAG,EAAE,CAAC;QACvD,MAAM,gBAAgB,GAAG,wBAAwB,CAAC,GAAG,EAAE,CAAC;QAExD,4BAA4B;QAC5B,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAC;QAClE,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAElC,sBAAsB;QACtB,aAAa,CAAC,wBAAwB,CAAC,CAAC;QACxC,aAAa,CAAC,yBAAyB,CAAC,CAAC;IAC3C,CAAC;IAEO,uBAAuB;QAC7B,0EAA0E;QAC1E,iCAAiC;QACjC,MAAM,iBAAiB,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;QACvF,aAAa,CAAC,iBAAiB,CAAC,CAAC;IACnC,CAAC;IAED,uBAAuB;QACrB,gFAAgF;QAChF,6EAA6E;QAC7E,2EAA2E;QAC3E,uCAAuC;QAEvC,8DAA8D;QAC9D,MAAM,kBAAkB,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,kBAAkB,CAAM,aAAa,EAAE,EAAE,CAAC,CAAC;QAC1F,MAAM,WAAW,GAAG,kBAAkB,CAAC,GAAG,EAAE,CAAC;QAC7C,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACrC,UAAU,CAAC,kBAAkB,CAAC,GAAG,QAAQ,CAAC;QAC5C,CAAC;QACD,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACtC,CAAC;IAED,uBAAuB;QACrB,8DAA8D;QAC9D,MAAM,4BAA4B,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,kBAAkB,CAAM,uBAAuB,EAAE,EAAE,CAAC,CAAC;QAC9G,IAAI,qBAAqB,GAAG,4BAA4B,CAAC,GAAG,EAAE,CAAC;QAE/D,8EAA8E;QAC9E,8DAA8D;QAC9D,qBAAqB,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC,oBAAyB,EAAE,EAAE,CAAC,KAAK,IAAI,oBAAoB,CAAC,CAAC;QAEnH,4EAA4E;QAC5E,yEAAyE;QACzE,6EAA6E;QAC7E,8BAA8B;QAC9B,KAAK,MAAM,oBAAoB,IAAI,qBAAqB,EAAE,CAAC;YACzD,oBAAoB,CAAC,kBAAkB,CAAC,GAAG,QAAQ,CAAC;QACtD,CAAC;QAED,4BAA4B,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IAC1D,CAAC;IAED,uBAAuB;QACrB,mFAAmF;QACnF,oFAAoF;QACpF,kFAAkF;QAClF,4DAA4D;QAC5D,kFAAkF;QAClF,kCAAkC;QAElC,iFAAiF;QACjF,cAAc;QACd,MAAM,cAAc,GAAG,uCAAuC,CAAC;QAC/D,MAAM,cAAc,GAAG,GAAG,CAAC;QAE3B,8DAA8D;QAC9D,MAAM,kBAAkB,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,kBAAkB,CAAM,aAAa,EAAE,EAAE,CAAC,CAAC;QAC1F,MAAM,WAAW,GAAG,kBAAkB,CAAC,GAAG,EAAE,CAAC;QAC7C,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACrC,MAAM,UAAU,GACZ,UAAU,CAAC,SAAS,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;YACrG,UAAU,CAAC,YAAY,CAAC,GAAG,UAAU,CAAC;QACxC,CAAC;QACD,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACtC,CAAC;IAED,uBAAuB;QACrB,mFAAmF;QACnF,iFAAiF;QACjF,cAAc;QAEd,iFAAiF;QACjF,cAAc;QACd,MAAM,cAAc,GAAG,uCAAuC,CAAC;QAC/D,MAAM,cAAc,GAAG,GAAG,CAAC;QAE3B,8DAA8D;QAC9D,MAAM,kBAAkB,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,kBAAkB,CAAM,aAAa,EAAE,EAAE,CAAC,CAAC;QAC1F,MAAM,WAAW,GAAG,kBAAkB,CAAC,GAAG,EAAE,CAAC;QAC7C,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACrC,MAAM,EAAC,SAAS,EAAE,UAAU,EAAC,GAAG,UAAU,CAAC;YAC3C,IAAI,UAAU,EAAE,CAAC;gBACf,UAAU,CAAC,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;YAC1G,CAAC;QACH,CAAC;QACD,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACtC,CAAC;IAED,uBAAuB;QACrB,0GAA0G;QAC1G,QAAQ,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC5E,CAAC;IAED,uBAAuB;QACrB,MAAM,aAAa,GAAG,CAAC,OAAwB,EAAQ,EAAE;YACvD,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;gBACjC,MAAM,aAAa,GAAG,QAAQ,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;gBACzD,IAAI,aAAa,KAAK,GAAG,EAAE,CAAC;oBAC1B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBAC/B,aAAa,CAAC,EAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAC,CAAC,CAAC;oBACpC,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;gBACpC,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QACF,aAAa,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,CAAC;QACjD,aAAa,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,CAAC;QACjD,aAAa,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,YAAY,CAAC,CAAC;QAEhD,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,CAAC;YAC3D,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC;gBAC/F,GAAG,KAAK,yBAAyB,IAAI,GAAG,KAAK,gBAAgB,EAAE,CAAC;gBAClE,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBAC3D,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACvE,CAAC;YACD,IAAI,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;gBAClC,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBAC3D,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACnE,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;;;iFAM6E;IAErE,+BAA+B;QACrC,0FAA0F;QAC1F,MAAM,aAAa,GAAG,IAAI,GAAG,CAAS;YACpC,sBAAsB;YACtB,aAAa;YACb,gBAAgB;YAChB,gBAAgB;YAChB,0BAA0B;YAC1B,mBAAmB;YACnB,mCAAmC;YACnC,uBAAuB;YACvB,WAAW;YACX,kBAAkB;YAClB,0BAA0B;YAC1B,gBAAgB;SACjB,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QAED,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YACtC,IAAI,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC3B,SAAS;YACX,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;YACvC,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YACpC,QAAQ,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAEO,2BAA2B,CAAC,kBAAsC,EAAE,mBAA2B;QACrG,+FAA+F;QAC/F,oEAAoE;QACpE,IAAI,kBAAkB,CAAC,GAAG,EAAE,CAAC,MAAM,GAAG,mBAAmB,EAAE,CAAC;YAC1D,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;;AAiBH,MAAM,UAAU,aAAa,CAAC,WAAmB;IAC/C,OAAO,QAAQ,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,WAAmB;IAChD,OAAO,QAAQ,CAAC,QAAQ,EAAE,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;AACzD,CAAC;AAED,OAAO,EACL,4BAA4B,EAC5B,2BAA2B,EAC3B,wBAAwB,EAMxB,uBAAuB,EACvB,aAAa,GACd,CAAC","sourcesContent":["/*\n * Copyright (C) 2009 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n * * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport * as Platform from '../platform/platform.js';\nimport * as Root from '../root/root.js';\n\nimport {Console} from './Console.js';\nimport {type EventDescriptor, type EventTargetEvent, type GenericEvents} from './EventTarget.js';\nimport {ObjectWrapper} from './Object.js';\nimport {\n getLocalizedSettingsCategory,\n getRegisteredSettings as getRegisteredSettingsInternal,\n type LearnMore,\n maybeRemoveSettingExtension,\n type RegExpSettingItem,\n registerSettingExtension,\n registerSettingsForTest,\n resetSettings,\n SettingCategory,\n type SettingExtensionOption,\n type SettingRegistration,\n SettingType,\n} from './SettingRegistration.js';\n\nlet settingsInstance: Settings|undefined;\n\nexport class Settings {\n readonly #sessionStorage: SettingsStorage;\n settingNameSet: Set;\n orderValuesBySettingCategory: Map>;\n #eventSupport: ObjectWrapper;\n #registry: Map>;\n readonly moduleSettings: Map>;\n readonly #config: Root.Runtime.HostConfig;\n\n private constructor(\n readonly syncedStorage: SettingsStorage, readonly globalStorage: SettingsStorage,\n readonly localStorage: SettingsStorage, config?: Root.Runtime.HostConfig) {\n this.#sessionStorage = new SettingsStorage({});\n\n this.settingNameSet = new Set();\n\n this.orderValuesBySettingCategory = new Map();\n\n this.#eventSupport = new ObjectWrapper();\n this.#registry = new Map();\n this.moduleSettings = new Map();\n\n this.#config = config || {};\n for (const registration of this.getRegisteredSettings()) {\n const {settingName, defaultValue, storageType} = registration;\n const isRegex = registration.settingType === SettingType.REGEX;\n\n const evaluatedDefaultValue = typeof defaultValue === 'function' ? defaultValue(this.#config) : defaultValue;\n const setting = isRegex && typeof evaluatedDefaultValue === 'string' ?\n this.createRegExpSetting(settingName, evaluatedDefaultValue, undefined, storageType) :\n this.createSetting(settingName, evaluatedDefaultValue, storageType);\n\n setting.setTitleFunction(registration.title);\n if (registration.userActionCondition) {\n setting.setRequiresUserAction(Boolean(Root.Runtime.Runtime.queryParam(registration.userActionCondition)));\n }\n setting.setRegistration(registration);\n\n this.registerModuleSetting(setting);\n }\n }\n\n getRegisteredSettings(): SettingRegistration[] {\n return getRegisteredSettingsInternal(this.#config);\n }\n\n static hasInstance(): boolean {\n return typeof settingsInstance !== 'undefined';\n }\n\n static instance(opts: {\n forceNew: boolean|null,\n syncedStorage: SettingsStorage|null,\n globalStorage: SettingsStorage|null,\n localStorage: SettingsStorage|null,\n config?: Root.Runtime.HostConfig,\n } = {forceNew: null, syncedStorage: null, globalStorage: null, localStorage: null}): Settings {\n const {forceNew, syncedStorage, globalStorage, localStorage, config} = opts;\n if (!settingsInstance || forceNew) {\n if (!syncedStorage || !globalStorage || !localStorage) {\n throw new Error(`Unable to create settings: global and local storage must be provided: ${new Error().stack}`);\n }\n\n settingsInstance = new Settings(syncedStorage, globalStorage, localStorage, config);\n }\n\n return settingsInstance;\n }\n\n static removeInstance(): void {\n settingsInstance = undefined;\n }\n\n getHostConfig(): Root.Runtime.HostConfig {\n return this.#config;\n }\n\n private registerModuleSetting(setting: Setting): void {\n const settingName = setting.name;\n const category = setting.category();\n const order = setting.order();\n if (this.settingNameSet.has(settingName)) {\n throw new Error(`Duplicate Setting name '${settingName}'`);\n }\n if (category && order) {\n const orderValues = this.orderValuesBySettingCategory.get(category) || new Set();\n if (orderValues.has(order)) {\n throw new Error(`Duplicate order value '${order}' for settings category '${category}'`);\n }\n orderValues.add(order);\n this.orderValuesBySettingCategory.set(category, orderValues);\n }\n this.settingNameSet.add(settingName);\n this.moduleSettings.set(setting.name, setting);\n }\n\n static normalizeSettingName(name: string): string {\n if ([\n VersionController.GLOBAL_VERSION_SETTING_NAME,\n VersionController.SYNCED_VERSION_SETTING_NAME,\n VersionController.LOCAL_VERSION_SETTING_NAME,\n 'currentDockState',\n 'isUnderTest',\n ].includes(name)) {\n return name;\n }\n return Platform.StringUtilities.toKebabCase(name);\n }\n\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n moduleSetting(settingName: string): Setting {\n const setting = this.moduleSettings.get(settingName) as Setting;\n if (!setting) {\n throw new Error('No setting registered: ' + settingName);\n }\n return setting;\n }\n\n settingForTest(settingName: string): Setting {\n const setting = this.#registry.get(settingName);\n if (!setting) {\n throw new Error('No setting registered: ' + settingName);\n }\n return setting;\n }\n\n /**\n * Get setting via key, and create a new setting if the requested setting does not exist.\n */\n createSetting(key: string, defaultValue: T, storageType?: SettingStorageType): Setting {\n const storage = this.storageFromType(storageType);\n let setting = (this.#registry.get(key) as Setting);\n if (!setting) {\n setting = new Setting(key, defaultValue, this.#eventSupport, storage);\n this.#registry.set(key, setting);\n }\n return setting;\n }\n\n createLocalSetting(key: string, defaultValue: T): Setting {\n return this.createSetting(key, defaultValue, SettingStorageType.LOCAL);\n }\n\n createRegExpSetting(key: string, defaultValue: string, regexFlags?: string, storageType?: SettingStorageType):\n RegExpSetting {\n if (!this.#registry.get(key)) {\n this.#registry.set(\n key, new RegExpSetting(key, defaultValue, this.#eventSupport, this.storageFromType(storageType), regexFlags));\n }\n return this.#registry.get(key) as RegExpSetting;\n }\n\n clearAll(): void {\n this.globalStorage.removeAll();\n this.syncedStorage.removeAll();\n this.localStorage.removeAll();\n new VersionController().resetToCurrent();\n }\n\n private storageFromType(storageType?: SettingStorageType): SettingsStorage {\n switch (storageType) {\n case SettingStorageType.LOCAL:\n return this.localStorage;\n case SettingStorageType.SESSION:\n return this.#sessionStorage;\n case SettingStorageType.GLOBAL:\n return this.globalStorage;\n case SettingStorageType.SYNCED:\n return this.syncedStorage;\n }\n return this.globalStorage;\n }\n\n getRegistry(): Map> {\n return this.#registry;\n }\n}\n\nexport interface SettingsBackingStore {\n register(setting: string): void;\n get(setting: string): Promise;\n set(setting: string, value: string): void;\n remove(setting: string): void;\n clear(): void;\n}\n\nexport const NOOP_STORAGE: SettingsBackingStore = {\n register: () => {},\n set: () => {},\n get: () => Promise.resolve(''),\n remove: () => {},\n clear: () => {},\n};\n\nexport class SettingsStorage {\n constructor(\n private object: Record, private readonly backingStore: SettingsBackingStore = NOOP_STORAGE,\n private readonly storagePrefix: string = '') {\n }\n\n register(name: string): void {\n name = this.storagePrefix + name;\n this.backingStore.register(name);\n }\n\n set(name: string, value: string): void {\n name = this.storagePrefix + name;\n this.object[name] = value;\n this.backingStore.set(name, value);\n }\n\n has(name: string): boolean {\n name = this.storagePrefix + name;\n return name in this.object;\n }\n\n get(name: string): string {\n name = this.storagePrefix + name;\n return this.object[name];\n }\n\n async forceGet(originalName: string): Promise {\n const name = this.storagePrefix + originalName;\n const value = await this.backingStore.get(name);\n if (value && value !== this.object[name]) {\n this.set(originalName, value);\n } else if (!value) {\n this.remove(originalName);\n }\n return value;\n }\n\n remove(name: string): void {\n name = this.storagePrefix + name;\n delete this.object[name];\n this.backingStore.remove(name);\n }\n\n removeAll(): void {\n this.object = {};\n this.backingStore.clear();\n }\n\n keys(): string[] {\n return Object.keys(this.object);\n }\n\n dumpSizes(): void {\n Console.instance().log('Ten largest settings: ');\n\n const sizes: {\n [x: string]: number,\n // @ts-expect-error __proto__ optimization\n } = {__proto__: null};\n for (const key in this.object) {\n sizes[key] = this.object[key].length;\n }\n const keys = Object.keys(sizes);\n\n function comparator(key1: string, key2: string): number {\n return sizes[key2] - sizes[key1];\n }\n\n keys.sort(comparator);\n\n for (let i = 0; i < 10 && i < keys.length; ++i) {\n Console.instance().log('Setting: \\'' + keys[i] + '\\', size: ' + sizes[keys[i]]);\n }\n }\n}\n\nfunction removeSetting(setting: {name: string, storage: SettingsStorage}): void {\n const name = setting.name;\n const settings = Settings.instance();\n\n settings.getRegistry().delete(name);\n settings.moduleSettings.delete(name);\n\n setting.storage.remove(name);\n}\n\nexport class Deprecation {\n readonly disabled: boolean;\n readonly warning: Platform.UIString.LocalizedString;\n readonly experiment?: Root.Runtime.Experiment;\n\n constructor({deprecationNotice}: SettingRegistration) {\n if (!deprecationNotice) {\n throw new Error('Cannot create deprecation info for a non-deprecated setting');\n }\n this.disabled = deprecationNotice.disabled;\n this.warning = deprecationNotice.warning();\n this.experiment = deprecationNotice.experiment ?\n Root.Runtime.experiments.allConfigurableExperiments().find(e => e.name === deprecationNotice.experiment) :\n undefined;\n }\n}\n\nexport class Setting {\n #titleFunction?: () => Platform.UIString.LocalizedString;\n #titleInternal!: string;\n #registration: SettingRegistration|null = null;\n #requiresUserAction?: boolean;\n #value?: V;\n // TODO(crbug.com/1172300) Type cannot be inferred without changes to consumers. See above.\n #serializer: Serializer = JSON;\n #hadUserAction?: boolean;\n #disabled?: boolean;\n #deprecation: Deprecation|null = null;\n\n constructor(\n readonly name: string, readonly defaultValue: V, private readonly eventSupport: ObjectWrapper,\n readonly storage: SettingsStorage) {\n storage.register(this.name);\n }\n\n setSerializer(serializer: Serializer): void {\n this.#serializer = serializer;\n }\n\n addChangeListener(listener: (arg0: EventTargetEvent) => void, thisObject?: Object): EventDescriptor {\n return this.eventSupport.addEventListener(this.name, listener, thisObject);\n }\n\n removeChangeListener(listener: (arg0: EventTargetEvent) => void, thisObject?: Object): void {\n this.eventSupport.removeEventListener(this.name, listener, thisObject);\n }\n\n title(): string {\n if (this.#titleInternal) {\n return this.#titleInternal;\n }\n if (this.#titleFunction) {\n return this.#titleFunction();\n }\n return '';\n }\n\n setTitleFunction(titleFunction: (() => Platform.UIString.LocalizedString)|undefined): void {\n if (titleFunction) {\n this.#titleFunction = titleFunction;\n }\n }\n\n setTitle(title: string): void {\n this.#titleInternal = title;\n }\n\n setRequiresUserAction(requiresUserAction: boolean): void {\n this.#requiresUserAction = requiresUserAction;\n }\n\n disabled(): boolean {\n if (this.#registration?.disabledCondition) {\n const {disabled} = this.#registration.disabledCondition(Settings.instance().getHostConfig());\n // If registration does not disable it, pass through to #disabled\n // attribute check.\n if (disabled) {\n return true;\n }\n }\n return this.#disabled || false;\n }\n\n disabledReason(): string|undefined {\n if (this.#registration?.disabledCondition) {\n const result = this.#registration.disabledCondition(Settings.instance().getHostConfig());\n if (result.disabled) {\n return result.reason;\n }\n }\n return undefined;\n }\n\n setDisabled(disabled: boolean): void {\n this.#disabled = disabled;\n this.eventSupport.dispatchEventToListeners(this.name);\n }\n\n get(): V {\n if (this.#requiresUserAction && !this.#hadUserAction) {\n return this.defaultValue;\n }\n\n if (typeof this.#value !== 'undefined') {\n return this.#value;\n }\n\n this.#value = this.defaultValue;\n if (this.storage.has(this.name)) {\n try {\n this.#value = this.#serializer.parse(this.storage.get(this.name));\n } catch (e) {\n this.storage.remove(this.name);\n }\n }\n return this.#value;\n }\n\n // Prefer this getter for settings which are \"disableable\". The plain getter returns `this.#value`,\n // even if the setting is disabled, which means the callsite has to explicitly call the `disabled()`\n // getter and add its own logic for the disabled state.\n getIfNotDisabled(): V|undefined {\n if (this.disabled()) {\n return;\n }\n return this.get();\n }\n\n async forceGet(): Promise {\n const name = this.name;\n const oldValue = this.storage.get(name);\n const value = await this.storage.forceGet(name);\n this.#value = this.defaultValue;\n if (value) {\n try {\n this.#value = this.#serializer.parse(value);\n } catch (e) {\n this.storage.remove(this.name);\n }\n }\n\n if (oldValue !== value) {\n this.eventSupport.dispatchEventToListeners(this.name, this.#value);\n }\n\n return this.#value;\n }\n\n set(value: V): void {\n this.#hadUserAction = true;\n this.#value = value;\n try {\n const settingString = this.#serializer.stringify(value);\n try {\n this.storage.set(this.name, settingString);\n } catch (e) {\n this.printSettingsSavingError(e.message, this.name, settingString);\n }\n } catch (e) {\n Console.instance().error('Cannot stringify setting with name: ' + this.name + ', error: ' + e.message);\n }\n this.eventSupport.dispatchEventToListeners(this.name, value);\n }\n\n setRegistration(registration: SettingRegistration): void {\n this.#registration = registration;\n const {deprecationNotice} = registration;\n if (deprecationNotice?.disabled) {\n const experiment = deprecationNotice.experiment ?\n Root.Runtime.experiments.allConfigurableExperiments().find(e => e.name === deprecationNotice.experiment) :\n undefined;\n if ((!experiment || experiment.isEnabled())) {\n this.set(this.defaultValue);\n this.setDisabled(true);\n }\n }\n }\n\n type(): SettingType|null {\n if (this.#registration) {\n return this.#registration.settingType;\n }\n return null;\n }\n\n options(): SimpleSettingOption[] {\n if (this.#registration && this.#registration.options) {\n return this.#registration.options.map(opt => {\n const {value, title, text, raw} = opt;\n return {\n value,\n title: title(),\n text: typeof text === 'function' ? text() : text,\n raw,\n };\n });\n }\n return [];\n }\n\n reloadRequired(): boolean|null {\n if (this.#registration) {\n return this.#registration.reloadRequired || null;\n }\n return null;\n }\n\n category(): SettingCategory|null {\n if (this.#registration) {\n return this.#registration.category || null;\n }\n return null;\n }\n\n tags(): string|null {\n if (this.#registration && this.#registration.tags) {\n // Get localized keys and separate by null character to prevent fuzzy matching from matching across them.\n return this.#registration.tags.map(tag => tag()).join('\\0');\n }\n return null;\n }\n\n order(): number|null {\n if (this.#registration) {\n return this.#registration.order || null;\n }\n return null;\n }\n\n learnMore(): LearnMore|null {\n return this.#registration?.learnMore ?? null;\n }\n\n get deprecation(): Deprecation|null {\n if (!this.#registration || !this.#registration.deprecationNotice) {\n return null;\n }\n if (!this.#deprecation) {\n this.#deprecation = new Deprecation(this.#registration);\n }\n return this.#deprecation;\n }\n\n private printSettingsSavingError(message: string, name: string, value: string): void {\n const errorMessage =\n 'Error saving setting with name: ' + this.name + ', value length: ' + value.length + '. Error: ' + message;\n console.error(errorMessage);\n Console.instance().error(errorMessage);\n this.storage.dumpSizes();\n }\n}\n\n// TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport class RegExpSetting extends Setting {\n #regexFlags: string|undefined;\n #regex?: RegExp|null;\n\n constructor(\n name: string, defaultValue: string, eventSupport: ObjectWrapper, storage: SettingsStorage,\n regexFlags?: string) {\n super(name, defaultValue ? [{pattern: defaultValue}] : [], eventSupport, storage);\n this.#regexFlags = regexFlags;\n }\n\n override get(): string {\n const result = [];\n const items = this.getAsArray();\n for (let i = 0; i < items.length; ++i) {\n const item = items[i];\n if (item.pattern && !item.disabled) {\n result.push(item.pattern);\n }\n }\n return result.join('|');\n }\n\n getAsArray(): RegExpSettingItem[] {\n return super.get();\n }\n\n override set(value: string): void {\n this.setAsArray([{pattern: value, disabled: false}]);\n }\n\n setAsArray(value: RegExpSettingItem[]): void {\n this.#regex = undefined;\n super.set(value);\n }\n\n asRegExp(): RegExp|null {\n if (typeof this.#regex !== 'undefined') {\n return this.#regex;\n }\n this.#regex = null;\n try {\n const pattern = this.get();\n if (pattern) {\n this.#regex = new RegExp(pattern, this.#regexFlags || '');\n }\n } catch (e) {\n }\n return this.#regex;\n }\n}\n\nexport class VersionController {\n static readonly GLOBAL_VERSION_SETTING_NAME = 'inspectorVersion';\n static readonly SYNCED_VERSION_SETTING_NAME = 'syncedInspectorVersion';\n static readonly LOCAL_VERSION_SETTING_NAME = 'localInspectorVersion';\n\n static readonly CURRENT_VERSION = 37;\n\n readonly #globalVersionSetting: Setting;\n readonly #syncedVersionSetting: Setting;\n readonly #localVersionSetting: Setting;\n\n constructor() {\n // If no version setting is found, we initialize with the current version and don't do anything.\n this.#globalVersionSetting = Settings.instance().createSetting(\n VersionController.GLOBAL_VERSION_SETTING_NAME, VersionController.CURRENT_VERSION, SettingStorageType.GLOBAL);\n this.#syncedVersionSetting = Settings.instance().createSetting(\n VersionController.SYNCED_VERSION_SETTING_NAME, VersionController.CURRENT_VERSION, SettingStorageType.SYNCED);\n this.#localVersionSetting = Settings.instance().createSetting(\n VersionController.LOCAL_VERSION_SETTING_NAME, VersionController.CURRENT_VERSION, SettingStorageType.LOCAL);\n }\n\n /**\n * Force re-sets all version number settings to the current version without\n * running any migrations.\n */\n resetToCurrent(): void {\n this.#globalVersionSetting.set(VersionController.CURRENT_VERSION);\n this.#syncedVersionSetting.set(VersionController.CURRENT_VERSION);\n this.#localVersionSetting.set(VersionController.CURRENT_VERSION);\n }\n\n /**\n * Runs the appropriate migrations and updates the version settings accordingly.\n *\n * To determine what migrations to run we take the minimum of all version number settings.\n *\n * IMPORTANT: All migrations must be idempotent since they might be applied multiple times.\n */\n updateVersion(): void {\n const currentVersion = VersionController.CURRENT_VERSION;\n const minimumVersion =\n Math.min(this.#globalVersionSetting.get(), this.#syncedVersionSetting.get(), this.#localVersionSetting.get());\n const methodsToRun = this.methodsToRunToUpdateVersion(minimumVersion, currentVersion);\n console.assert(\n // @ts-ignore\n this[`updateVersionFrom${currentVersion}To${currentVersion + 1}`] === undefined,\n 'Unexpected migration method found. Increment CURRENT_VERSION or remove the method.');\n for (const method of methodsToRun) {\n // @ts-ignore Special version method matching\n this[method].call(this);\n }\n this.resetToCurrent();\n }\n\n private methodsToRunToUpdateVersion(oldVersion: number, currentVersion: number): string[] {\n const result = [];\n for (let i = oldVersion; i < currentVersion; ++i) {\n result.push('updateVersionFrom' + i + 'To' + (i + 1));\n }\n return result;\n }\n\n private updateVersionFrom0To1(): void {\n this.clearBreakpointsWhenTooMany(Settings.instance().createLocalSetting('breakpoints', []), 500000);\n }\n\n private updateVersionFrom1To2(): void {\n Settings.instance().createSetting('previouslyViewedFiles', []).set([]);\n }\n\n private updateVersionFrom2To3(): void {\n Settings.instance().createSetting('fileSystemMapping', {}).set({});\n removeSetting(Settings.instance().createSetting('fileMappingEntries', []));\n }\n\n private updateVersionFrom3To4(): void {\n const advancedMode = Settings.instance().createSetting('showHeaSnapshotObjectsHiddenProperties', false);\n moduleSetting('showAdvancedHeapSnapshotProperties').set(advancedMode.get());\n removeSetting(advancedMode);\n }\n\n private updateVersionFrom4To5(): void {\n const settingNames: {\n [x: string]: string,\n } = {\n FileSystemViewSidebarWidth: 'fileSystemViewSplitViewState',\n elementsSidebarWidth: 'elementsPanelSplitViewState',\n StylesPaneSplitRatio: 'stylesPaneSplitViewState',\n heapSnapshotRetainersViewSize: 'heapSnapshotSplitViewState',\n 'InspectorView.splitView': 'InspectorView.splitViewState',\n 'InspectorView.screencastSplitView': 'InspectorView.screencastSplitViewState',\n 'Inspector.drawerSplitView': 'Inspector.drawerSplitViewState',\n layerDetailsSplitView: 'layerDetailsSplitViewState',\n networkSidebarWidth: 'networkPanelSplitViewState',\n sourcesSidebarWidth: 'sourcesPanelSplitViewState',\n scriptsPanelNavigatorSidebarWidth: 'sourcesPanelNavigatorSplitViewState',\n sourcesPanelSplitSidebarRatio: 'sourcesPanelDebuggerSidebarSplitViewState',\n 'timeline-details': 'timelinePanelDetailsSplitViewState',\n 'timeline-split': 'timelinePanelRecorsSplitViewState',\n 'timeline-view': 'timelinePanelTimelineStackSplitViewState',\n auditsSidebarWidth: 'auditsPanelSplitViewState',\n layersSidebarWidth: 'layersPanelSplitViewState',\n profilesSidebarWidth: 'profilesPanelSplitViewState',\n resourcesSidebarWidth: 'resourcesPanelSplitViewState',\n };\n const empty = {};\n for (const oldName in settingNames) {\n const newName = settingNames[oldName];\n const oldNameH = oldName + 'H';\n\n let newValue: {}|null = null;\n const oldSetting = Settings.instance().createSetting(oldName, empty);\n if (oldSetting.get() !== empty) {\n newValue = newValue || {};\n // @ts-expect-error\n newValue.vertical = {};\n // @ts-expect-error\n newValue.vertical.size = oldSetting.get();\n removeSetting(oldSetting);\n }\n const oldSettingH = Settings.instance().createSetting(oldNameH, empty);\n if (oldSettingH.get() !== empty) {\n newValue = newValue || {};\n // @ts-expect-error\n newValue.horizontal = {};\n // @ts-expect-error\n newValue.horizontal.size = oldSettingH.get();\n removeSetting(oldSettingH);\n }\n if (newValue) {\n Settings.instance().createSetting(newName, {}).set(newValue);\n }\n }\n }\n\n private updateVersionFrom5To6(): void {\n const settingNames: {\n [x: string]: string,\n } = {\n debuggerSidebarHidden: 'sourcesPanelSplitViewState',\n navigatorHidden: 'sourcesPanelNavigatorSplitViewState',\n 'WebInspector.Drawer.showOnLoad': 'Inspector.drawerSplitViewState',\n };\n\n for (const oldName in settingNames) {\n const oldSetting = Settings.instance().createSetting(oldName, null);\n if (oldSetting.get() === null) {\n removeSetting(oldSetting);\n continue;\n }\n\n const newName = settingNames[oldName];\n const invert = oldName === 'WebInspector.Drawer.showOnLoad';\n const hidden = oldSetting.get() !== invert;\n removeSetting(oldSetting);\n const showMode = hidden ? 'OnlyMain' : 'Both';\n\n const newSetting = Settings.instance().createSetting(newName, {});\n const newValue = newSetting.get() || {};\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // @ts-expect-error\n newValue.vertical = newValue.vertical || {};\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // @ts-expect-error\n newValue.vertical.showMode = showMode;\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // @ts-expect-error\n newValue.horizontal = newValue.horizontal || {};\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // @ts-expect-error\n newValue.horizontal.showMode = showMode;\n newSetting.set(newValue);\n }\n }\n\n private updateVersionFrom6To7(): void {\n const settingNames = {\n sourcesPanelNavigatorSplitViewState: 'sourcesPanelNavigatorSplitViewState',\n elementsPanelSplitViewState: 'elementsPanelSplitViewState',\n stylesPaneSplitViewState: 'stylesPaneSplitViewState',\n sourcesPanelDebuggerSidebarSplitViewState: 'sourcesPanelDebuggerSidebarSplitViewState',\n };\n\n const empty = {};\n for (const name in settingNames) {\n const setting =\n Settings.instance().createSetting<{vertical?: {size?: number}, horizontal?: {size?: number}}>(name, empty);\n const value = setting.get();\n if (value === empty) {\n continue;\n }\n // Zero out saved percentage sizes, and they will be restored to defaults.\n if (value.vertical && value.vertical.size && value.vertical.size < 1) {\n value.vertical.size = 0;\n }\n if (value.horizontal && value.horizontal.size && value.horizontal.size < 1) {\n value.horizontal.size = 0;\n }\n setting.set(value);\n }\n }\n\n private updateVersionFrom7To8(): void {\n }\n\n private updateVersionFrom8To9(): void {\n const settingNames = ['skipStackFramesPattern', 'workspaceFolderExcludePattern'];\n\n for (let i = 0; i < settingNames.length; ++i) {\n const setting = Settings.instance().createSetting(settingNames[i], '');\n let value = setting.get();\n if (!value) {\n return;\n }\n if (typeof value === 'string') {\n value = [value];\n }\n for (let j = 0; j < value.length; ++j) {\n if (typeof value[j] === 'string') {\n value[j] = {pattern: value[j]};\n }\n }\n setting.set(value);\n }\n }\n\n private updateVersionFrom9To10(): void {\n // This one is localStorage specific, which is fine.\n if (!window.localStorage) {\n return;\n }\n for (const key in window.localStorage) {\n if (key.startsWith('revision-history')) {\n window.localStorage.removeItem(key);\n }\n }\n }\n\n private updateVersionFrom10To11(): void {\n const oldSettingName = 'customDevicePresets';\n const newSettingName = 'customEmulatedDeviceList';\n const oldSetting = Settings.instance().createSetting(oldSettingName, undefined);\n const list = oldSetting.get();\n if (!Array.isArray(list)) {\n return;\n }\n const newList = [];\n for (let i = 0; i < list.length; ++i) {\n const value = list[i];\n const device: {\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [x: string]: any,\n } = {};\n device['title'] = value['title'];\n device['type'] = 'unknown';\n device['user-agent'] = value['userAgent'];\n device['capabilities'] = [];\n if (value['touch']) {\n device['capabilities'].push('touch');\n }\n if (value['mobile']) {\n device['capabilities'].push('mobile');\n }\n device['screen'] = {};\n device['screen']['vertical'] = {width: value['width'], height: value['height']};\n device['screen']['horizontal'] = {width: value['height'], height: value['width']};\n device['screen']['device-pixel-ratio'] = value['deviceScaleFactor'];\n device['modes'] = [];\n device['show-by-default'] = true;\n device['show'] = 'Default';\n newList.push(device);\n }\n if (newList.length) {\n Settings.instance().createSetting(newSettingName, []).set(newList);\n }\n removeSetting(oldSetting);\n }\n\n private updateVersionFrom11To12(): void {\n this.migrateSettingsFromLocalStorage();\n }\n\n private updateVersionFrom12To13(): void {\n this.migrateSettingsFromLocalStorage();\n removeSetting(Settings.instance().createSetting('timelineOverviewMode', ''));\n }\n\n private updateVersionFrom13To14(): void {\n const defaultValue = {throughput: -1, latency: 0};\n Settings.instance().createSetting('networkConditions', defaultValue).set(defaultValue);\n }\n\n private updateVersionFrom14To15(): void {\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const setting = Settings.instance().createLocalSetting('workspaceExcludedFolders', {});\n const oldValue = setting.get();\n const newValue: {\n [x: string]: string[],\n } = {};\n for (const fileSystemPath in oldValue) {\n newValue[fileSystemPath] = [];\n for (const entry of oldValue[fileSystemPath]) {\n newValue[fileSystemPath].push(entry.path);\n }\n }\n setting.set(newValue);\n }\n\n private updateVersionFrom15To16(): void {\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const setting = Settings.instance().createSetting('InspectorView.panelOrder', {});\n const tabOrders = setting.get();\n for (const key of Object.keys(tabOrders)) {\n tabOrders[key] = (tabOrders[key] + 1) * 10;\n }\n setting.set(tabOrders);\n }\n\n private updateVersionFrom16To17(): void {\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const setting = Settings.instance().createSetting('networkConditionsCustomProfiles', []);\n const oldValue = setting.get();\n const newValue = [];\n if (Array.isArray(oldValue)) {\n for (const preset of oldValue) {\n if (typeof preset.title === 'string' && typeof preset.value === 'object' &&\n typeof preset.value.throughput === 'number' && typeof preset.value.latency === 'number') {\n newValue.push({\n title: preset.title,\n value: {download: preset.value.throughput, upload: preset.value.throughput, latency: preset.value.latency},\n });\n }\n }\n }\n setting.set(newValue);\n }\n\n private updateVersionFrom17To18(): void {\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const setting = Settings.instance().createLocalSetting('workspaceExcludedFolders', {});\n const oldValue = setting.get();\n const newValue: {\n [x: string]: string,\n } = {};\n for (const oldKey in oldValue) {\n let newKey = oldKey.replace(/\\\\/g, '/');\n if (!newKey.startsWith('file://')) {\n if (newKey.startsWith('/')) {\n newKey = 'file://' + newKey;\n } else {\n newKey = 'file:///' + newKey;\n }\n }\n newValue[newKey] = oldValue[oldKey];\n }\n setting.set(newValue);\n }\n\n private updateVersionFrom18To19(): void {\n const defaultColumns = {status: true, type: true, initiator: true, size: true, time: true};\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const visibleColumnSettings = Settings.instance().createSetting('networkLogColumnsVisibility', defaultColumns);\n const visibleColumns = visibleColumnSettings.get();\n visibleColumns.name = true;\n visibleColumns.timeline = true;\n\n const configs: {\n [x: string]: {\n visible: number,\n },\n } = {};\n for (const columnId in visibleColumns) {\n if (!visibleColumns.hasOwnProperty(columnId)) {\n continue;\n }\n configs[columnId.toLowerCase()] = {visible: visibleColumns[columnId]};\n }\n const newSetting = Settings.instance().createSetting('networkLogColumns', {});\n newSetting.set(configs);\n removeSetting(visibleColumnSettings);\n }\n\n private updateVersionFrom19To20(): void {\n const oldSetting = Settings.instance().createSetting('InspectorView.panelOrder', {});\n const newSetting = Settings.instance().createSetting('panel-tabOrder', {});\n newSetting.set(oldSetting.get());\n removeSetting(oldSetting);\n }\n\n private updateVersionFrom20To21(): void {\n const networkColumns = Settings.instance().createSetting('networkLogColumns', {});\n const columns = (networkColumns.get() as {\n [x: string]: string,\n });\n delete columns['timeline'];\n delete columns['waterfall'];\n networkColumns.set(columns);\n }\n\n private updateVersionFrom21To22(): void {\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const breakpointsSetting = Settings.instance().createLocalSetting('breakpoints', []);\n const breakpoints = breakpointsSetting.get();\n for (const breakpoint of breakpoints) {\n breakpoint['url'] = breakpoint['sourceFileId'];\n delete breakpoint['sourceFileId'];\n }\n breakpointsSetting.set(breakpoints);\n }\n\n private updateVersionFrom22To23(): void {\n // This update is no-op.\n }\n\n private updateVersionFrom23To24(): void {\n const oldSetting = Settings.instance().createSetting('searchInContentScripts', false);\n const newSetting = Settings.instance().createSetting('searchInAnonymousAndContentScripts', false);\n newSetting.set(oldSetting.get());\n removeSetting(oldSetting);\n }\n\n private updateVersionFrom24To25(): void {\n const defaultColumns = {status: true, type: true, initiator: true, size: true, time: true};\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const networkLogColumnsSetting = Settings.instance().createSetting('networkLogColumns', defaultColumns);\n const columns = networkLogColumnsSetting.get();\n delete columns.product;\n networkLogColumnsSetting.set(columns);\n }\n\n private updateVersionFrom25To26(): void {\n const oldSetting = Settings.instance().createSetting('messageURLFilters', {});\n const urls = Object.keys(oldSetting.get());\n const textFilter = urls.map(url => `-url:${url}`).join(' ');\n if (textFilter) {\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const textFilterSetting = Settings.instance().createSetting('console.textFilter', '');\n const suffix = textFilterSetting.get() ? ` ${textFilterSetting.get()}` : '';\n textFilterSetting.set(`${textFilter}${suffix}`);\n }\n removeSetting(oldSetting);\n }\n\n private updateVersionFrom26To27(): void {\n function renameKeyInObjectSetting(settingName: string, from: string, to: string): void {\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const setting = Settings.instance().createSetting(settingName, {});\n const value = setting.get();\n if (from in value) {\n value[to] = value[from];\n delete value[from];\n setting.set(value);\n }\n }\n\n function renameInStringSetting(settingName: string, from: string, to: string): void {\n const setting = Settings.instance().createSetting(settingName, '');\n const value = setting.get();\n if (value === from) {\n setting.set(to);\n }\n }\n\n renameKeyInObjectSetting('panel-tabOrder', 'audits2', 'audits');\n renameKeyInObjectSetting('panel-closeableTabs', 'audits2', 'audits');\n renameInStringSetting('panel-selectedTab', 'audits2', 'audits');\n }\n\n private updateVersionFrom27To28(): void {\n const setting = Settings.instance().createSetting('uiTheme', 'systemPreferred');\n if (setting.get() === 'default') {\n setting.set('systemPreferred');\n }\n }\n\n private updateVersionFrom28To29(): void {\n function renameKeyInObjectSetting(settingName: string, from: string, to: string): void {\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const setting = Settings.instance().createSetting(settingName, {});\n const value = setting.get();\n if (from in value) {\n value[to] = value[from];\n delete value[from];\n setting.set(value);\n }\n }\n\n function renameInStringSetting(settingName: string, from: string, to: string): void {\n const setting = Settings.instance().createSetting(settingName, '');\n const value = setting.get();\n if (value === from) {\n setting.set(to);\n }\n }\n\n renameKeyInObjectSetting('panel-tabOrder', 'audits', 'lighthouse');\n renameKeyInObjectSetting('panel-closeableTabs', 'audits', 'lighthouse');\n renameInStringSetting('panel-selectedTab', 'audits', 'lighthouse');\n }\n\n private updateVersionFrom29To30(): void {\n // Create new location agnostic setting\n const closeableTabSetting = Settings.instance().createSetting('closeableTabs', {});\n\n // Read current settings\n const panelCloseableTabSetting = Settings.instance().createSetting('panel-closeableTabs', {});\n const drawerCloseableTabSetting = Settings.instance().createSetting('drawer-view-closeableTabs', {});\n const openTabsInPanel = panelCloseableTabSetting.get();\n const openTabsInDrawer = panelCloseableTabSetting.get();\n\n // Set #value of new setting\n const newValue = Object.assign(openTabsInDrawer, openTabsInPanel);\n closeableTabSetting.set(newValue);\n\n // Remove old settings\n removeSetting(panelCloseableTabSetting);\n removeSetting(drawerCloseableTabSetting);\n }\n\n private updateVersionFrom30To31(): void {\n // Remove recorder_recordings setting that was used for storing recordings\n // by an old recorder experiment.\n const recordingsSetting = Settings.instance().createSetting('recorder_recordings', []);\n removeSetting(recordingsSetting);\n }\n\n updateVersionFrom31To32(): void {\n // Introduce the new 'resourceTypeName' property on stored breakpoints. Prior to\n // this change we synchronized the breakpoint only by URL, but since we don't\n // know on which resource type the given breakpoint was set, we just assume\n // 'script' here to keep things simple.\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const breakpointsSetting = Settings.instance().createLocalSetting('breakpoints', []);\n const breakpoints = breakpointsSetting.get();\n for (const breakpoint of breakpoints) {\n breakpoint['resourceTypeName'] = 'script';\n }\n breakpointsSetting.set(breakpoints);\n }\n\n updateVersionFrom32To33(): void {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const previouslyViewedFilesSetting = Settings.instance().createLocalSetting('previouslyViewedFiles', []);\n let previouslyViewedFiles = previouslyViewedFilesSetting.get();\n\n // Discard old 'previouslyViewedFiles' items that don't have a 'url' property.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n previouslyViewedFiles = previouslyViewedFiles.filter((previouslyViewedFile: any) => 'url' in previouslyViewedFile);\n\n // Introduce the new 'resourceTypeName' property on previously viewed files.\n // Prior to this change we only keyed them based on the URL, but since we\n // don't know which resource type the given file had, we just assume 'script'\n // here to keep things simple.\n for (const previouslyViewedFile of previouslyViewedFiles) {\n previouslyViewedFile['resourceTypeName'] = 'script';\n }\n\n previouslyViewedFilesSetting.set(previouslyViewedFiles);\n }\n\n updateVersionFrom33To34(): void {\n // Introduces the 'isLogpoint' property on stored breakpoints. This information was\n // previously encoded in the 'condition' itself. This migration leaves the condition\n // alone but ensures that 'isLogpoint' is accurate for already stored breakpoints.\n // This enables us to use the 'isLogpoint' property in code.\n // A separate migration will remove the special encoding from the condition itself\n // once all refactorings are done.\n\n // The prefix/suffix are hardcoded here, since these constants will be removed in\n // the future.\n const logpointPrefix = '/** DEVTOOLS_LOGPOINT */ console.log(';\n const logpointSuffix = ')';\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const breakpointsSetting = Settings.instance().createLocalSetting('breakpoints', []);\n const breakpoints = breakpointsSetting.get();\n for (const breakpoint of breakpoints) {\n const isLogpoint =\n breakpoint.condition.startsWith(logpointPrefix) && breakpoint.condition.endsWith(logpointSuffix);\n breakpoint['isLogpoint'] = isLogpoint;\n }\n breakpointsSetting.set(breakpoints);\n }\n\n updateVersionFrom34To35(): void {\n // Uses the 'isLogpoint' property on stored breakpoints to remove the prefix/suffix\n // from logpoints. This way, we store the entered log point condition as the user\n // entered it.\n\n // The prefix/suffix are hardcoded here, since these constants will be removed in\n // the future.\n const logpointPrefix = '/** DEVTOOLS_LOGPOINT */ console.log(';\n const logpointSuffix = ')';\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const breakpointsSetting = Settings.instance().createLocalSetting('breakpoints', []);\n const breakpoints = breakpointsSetting.get();\n for (const breakpoint of breakpoints) {\n const {condition, isLogpoint} = breakpoint;\n if (isLogpoint) {\n breakpoint.condition = condition.slice(logpointPrefix.length, condition.length - logpointSuffix.length);\n }\n }\n breakpointsSetting.set(breakpoints);\n }\n\n updateVersionFrom35To36(): void {\n // We have changed the default from 'false' to 'true' and this updates the existing setting just for once.\n Settings.instance().createSetting('showThirdPartyIssues', true).set(true);\n }\n\n updateVersionFrom36To37(): void {\n const updateStorage = (storage: SettingsStorage): void => {\n for (const key of storage.keys()) {\n const normalizedKey = Settings.normalizeSettingName(key);\n if (normalizedKey !== key) {\n const value = storage.get(key);\n removeSetting({name: key, storage});\n storage.set(normalizedKey, value);\n }\n }\n };\n updateStorage(Settings.instance().globalStorage);\n updateStorage(Settings.instance().syncedStorage);\n updateStorage(Settings.instance().localStorage);\n\n for (const key of Settings.instance().globalStorage.keys()) {\n if ((key.startsWith('data-grid-') && key.endsWith('-column-weights')) || key.endsWith('-tab-order') ||\n key === 'views-location-override' || key === 'closeable-tabs') {\n const setting = Settings.instance().createSetting(key, {});\n setting.set(Platform.StringUtilities.toKebabCaseKeys(setting.get()));\n }\n if (key.endsWith('-selected-tab')) {\n const setting = Settings.instance().createSetting(key, '');\n setting.set(Platform.StringUtilities.toKebabCase(setting.get()));\n }\n }\n }\n\n /*\n * Any new migration should be added before this comment.\n *\n * IMPORTANT: Migrations must be idempotent, since they may be applied\n * multiple times! E.g. when renaming a setting one has to check that the\n * a setting with the new name does not yet exist.\n * ----------------------------------------------------------------------- */\n\n private migrateSettingsFromLocalStorage(): void {\n // This step migrates all the settings except for the ones below into the browser profile.\n const localSettings = new Set([\n 'advancedSearchConfig',\n 'breakpoints',\n 'consoleHistory',\n 'domBreakpoints',\n 'eventListenerBreakpoints',\n 'fileSystemMapping',\n 'lastSelectedSourcesSidebarPaneTab',\n 'previouslyViewedFiles',\n 'savedURLs',\n 'watchExpressions',\n 'workspaceExcludedFolders',\n 'xhrBreakpoints',\n ]);\n if (!window.localStorage) {\n return;\n }\n\n for (const key in window.localStorage) {\n if (localSettings.has(key)) {\n continue;\n }\n const value = window.localStorage[key];\n window.localStorage.removeItem(key);\n Settings.instance().globalStorage.set(key, value);\n }\n }\n\n private clearBreakpointsWhenTooMany(breakpointsSetting: Setting, maxBreakpointsCount: number): void {\n // If there are too many breakpoints in a storage, it is likely due to a recent bug that caused\n // periodical breakpoints duplication leading to inspector slowness.\n if (breakpointsSetting.get().length > maxBreakpointsCount) {\n breakpointsSetting.set([]);\n }\n }\n}\n\nexport const enum SettingStorageType {\n /**\n * Synced storage persists settings with the active Chrome profile but also\n * syncs the settings across devices via Chrome Sync.\n */\n SYNCED = 'Synced',\n /** Global storage persists settings with the active Chrome profile */\n GLOBAL = 'Global',\n /** Uses Window.localStorage */\n LOCAL = 'Local',\n /** Session storage dies when DevTools window closes */\n SESSION = 'Session',\n}\n\nexport function moduleSetting(settingName: string): Setting {\n return Settings.instance().moduleSetting(settingName);\n}\n\nexport function settingForTest(settingName: string): Setting {\n return Settings.instance().settingForTest(settingName);\n}\n\nexport {\n getLocalizedSettingsCategory,\n maybeRemoveSettingExtension,\n registerSettingExtension,\n RegExpSettingItem,\n SettingCategory,\n SettingExtensionOption,\n SettingRegistration,\n SettingType,\n registerSettingsForTest,\n resetSettings,\n};\n\nexport interface Serializer {\n stringify: (value: I) => string;\n parse: (value: string) => O;\n}\n\nexport interface SimpleSettingOption {\n value: string|boolean;\n title: string;\n text?: string;\n raw?: boolean;\n}\n"]}
\ No newline at end of file
diff --git a/public/core/common/Settings.test.js b/public/core/common/Settings.test.js
index 061d594fa..daeff174f 100644
--- a/public/core/common/Settings.test.js
+++ b/public/core/common/Settings.test.js
@@ -162,6 +162,21 @@ describe('Settings instance', () => {
assert.strictEqual(await testSetting.forceGet(), 'new');
});
});
+ it('getIfNotDisabled returns the setting\'s value only if the setting is not disabled', async () => {
+ const registeredSettings = new Set();
+ const mockBackingStore = {
+ ...Common.Settings.NOOP_STORAGE,
+ register: (name) => registeredSettings.add(name),
+ };
+ const storage = new SettingsStorage({}, mockBackingStore, '__prefix__.');
+ const settings = Common.Settings.Settings.instance({ forceNew: true, syncedStorage: storage, globalStorage: storage, localStorage: storage });
+ const testSetting = settings.createSetting('test-setting', 'some value');
+ assert.strictEqual(testSetting.getIfNotDisabled(), 'some value');
+ testSetting.setDisabled(true);
+ assert.isUndefined(testSetting.getIfNotDisabled());
+ testSetting.setDisabled(false);
+ assert.strictEqual(testSetting.getIfNotDisabled(), 'some value');
+ });
});
describe('VersionController', () => {
let settings;
diff --git a/public/core/common/Settings.test.js.map b/public/core/common/Settings.test.js.map
index f02207412..ae833f0e4 100644
--- a/public/core/common/Settings.test.js.map
+++ b/public/core/common/Settings.test.js.map
@@ -1 +1 @@
-{"version":3,"file":"Settings.test.js","sourceRoot":"","sources":["../../../../../../front_end/core/common/Settings.test.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2019 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\nimport * as Common from './common.js';\n\nconst SettingsStorage = Common.Settings.SettingsStorage;\nconst VersionController = Common.Settings.VersionController;\n\nclass MockStore implements Common.Settings.SettingsBackingStore {\n #store = new Map();\n register() {\n }\n set(key: string, value: string) {\n this.#store.set(key, value);\n }\n get(key: string) {\n return this.#store.get(key);\n }\n remove(key: string) {\n this.#store.delete(key);\n }\n clear() {\n this.#store.clear();\n }\n}\n\ndescribe('SettingsStorage class', () => {\n it('is able to set a name', () => {\n const settingsStorage = new SettingsStorage({});\n settingsStorage.set('Test Name', 'Test Value');\n assert.strictEqual(settingsStorage.get('Test Name'), 'Test Value', 'Name was not retrieve correctly');\n });\n\n it('is able to check if a name that it has exists', () => {\n const settingsStorage = new SettingsStorage({});\n settingsStorage.set('Test Name', 'Test Value');\n assert.isTrue(settingsStorage.has('Test Name'), 'the class should have that name');\n });\n\n it('is able to check if a name that it does not have exists', () => {\n const settingsStorage = new SettingsStorage({});\n assert.isFalse(settingsStorage.has('Test Name'), 'the class should not have that name');\n });\n\n it('is able to remove a name', () => {\n const settingsStorage = new SettingsStorage({});\n settingsStorage.set('Test Name', 'Test Value');\n settingsStorage.remove('Test Name');\n assert.isFalse(settingsStorage.has('Test Name'), 'the class should not have that name');\n });\n\n it('is able to remove all names', () => {\n const settingsStorage = new SettingsStorage({});\n settingsStorage.set('Test Name 1', 'Test Value 1');\n settingsStorage.set('Test Name 2', 'Test Value 2');\n settingsStorage.removeAll();\n assert.isFalse(settingsStorage.has('Test Name 1'), 'the class should not have any names');\n assert.isFalse(settingsStorage.has('Test Name 2'), 'the class should not have any names');\n });\n\n describe('forceGet', () => {\n it('returns the value of the backing store, not the cached one', async () => {\n const mockStore = new MockStore();\n const settingsStorage = new SettingsStorage({}, mockStore);\n settingsStorage.set('test', 'value');\n\n mockStore.set('test', 'changed');\n\n assert.strictEqual(await settingsStorage.forceGet('test'), 'changed');\n assert.strictEqual(await settingsStorage.forceGet('test'), 'changed');\n });\n it('updates the cached value of a SettingsStorage', async () => {\n const mockStore = new MockStore();\n const settingsStorage = new SettingsStorage({}, mockStore);\n settingsStorage.set('test', 'value');\n mockStore.set('test', 'changed');\n assert.strictEqual(settingsStorage.get('test'), 'value');\n\n await settingsStorage.forceGet('test');\n\n assert.strictEqual(settingsStorage.get('test'), 'changed');\n });\n it('leaves the cached value alone if the backing store has the same value', async () => {\n const mockStore = new MockStore();\n const settingsStorage = new SettingsStorage({}, mockStore);\n\n mockStore.set('test', 'value');\n settingsStorage.set('test', 'value');\n\n assert.strictEqual(mockStore.get('test'), 'value');\n assert.strictEqual(await settingsStorage.forceGet('test'), 'value');\n assert.strictEqual(mockStore.get('test'), 'value');\n assert.strictEqual(await settingsStorage.forceGet('test'), 'value');\n });\n });\n});\n\ndescribe('Settings instance', () => {\n afterEach(() => {\n Common.Settings.Settings.removeInstance();\n Common.Settings.resetSettings(); // Clear SettingsRegistrations.\n });\n\n it('can be instantiated in a test', () => {\n const dummyStorage = new SettingsStorage({});\n\n const settings = Common.Settings.Settings.instance({\n forceNew: true,\n syncedStorage: dummyStorage,\n globalStorage: dummyStorage,\n localStorage: dummyStorage,\n });\n\n assert.isOk(settings);\n });\n\n it('throws when constructed without storage', () => {\n assert.throws(() => Common.Settings.Settings.instance());\n assert.throws(\n () => Common.Settings.Settings.instance(\n {forceNew: true, syncedStorage: null, globalStorage: null, localStorage: null}));\n });\n\n it('stores synced settings in the correct storage', () => {\n const syncedStorage = new SettingsStorage({});\n const dummyStorage = new SettingsStorage({});\n Common.Settings.registerSettingExtension({\n settingName: 'static-synced-setting',\n settingType: Common.Settings.SettingType.BOOLEAN,\n defaultValue: false,\n storageType: Common.Settings.SettingStorageType.SYNCED,\n });\n const settings = Common.Settings.Settings.instance(\n {forceNew: true, syncedStorage, globalStorage: dummyStorage, localStorage: dummyStorage});\n\n const dynamicSetting: Common.Settings.Setting =\n settings.createSetting('dynamic-synced-setting', 'default val', Common.Settings.SettingStorageType.SYNCED);\n dynamicSetting.set('foo value');\n const staticSetting: Common.Settings.Setting = settings.moduleSetting('static-synced-setting');\n staticSetting.set(true);\n\n assert.isFalse(dummyStorage.has('dynamic-synced-setting'));\n assert.isFalse(dummyStorage.has('static-synced-setting'));\n assert.strictEqual(syncedStorage.get('dynamic-synced-setting'), '\"foo value\"');\n assert.strictEqual(syncedStorage.get('static-synced-setting'), 'true');\n });\n\n it('registers settings with the backing store when creating them', () => {\n const registeredSettings = new Set();\n const mockBackingStore: Common.Settings.SettingsBackingStore = {\n ...Common.Settings.NOOP_STORAGE,\n register: (name: string) => registeredSettings.add(name),\n };\n const storage = new SettingsStorage({}, mockBackingStore, '__prefix__.');\n Common.Settings.registerSettingExtension({\n settingName: 'static-global-setting',\n settingType: Common.Settings.SettingType.BOOLEAN,\n defaultValue: false,\n storageType: Common.Settings.SettingStorageType.GLOBAL,\n });\n\n const settings = Common.Settings.Settings.instance(\n {forceNew: true, syncedStorage: storage, globalStorage: storage, localStorage: storage});\n settings.createSetting('dynamic-local-setting', 42, Common.Settings.SettingStorageType.LOCAL);\n settings.createSetting('dynamic-synced-setting', 'foo', Common.Settings.SettingStorageType.SYNCED);\n\n assert.isTrue(registeredSettings.has('__prefix__.static-global-setting'));\n assert.isTrue(registeredSettings.has('__prefix__.dynamic-local-setting'));\n assert.isTrue(registeredSettings.has('__prefix__.dynamic-synced-setting'));\n });\n\n describe('forceGet', () => {\n it('triggers a setting changed event in case the value in the backing store got updated and we update the cached value',\n async () => {\n const mockStore = new MockStore();\n const settingsStorage = new SettingsStorage({}, mockStore);\n mockStore.set('test', '\"old\"');\n const settings = Common.Settings.Settings.instance({\n forceNew: true,\n syncedStorage: settingsStorage,\n globalStorage: settingsStorage,\n localStorage: settingsStorage,\n });\n const testSetting: Common.Settings.Setting =\n settings.createSetting('test', 'default val', Common.Settings.SettingStorageType.GLOBAL);\n const changes: string[] = [];\n testSetting.addChangeListener((event: Common.EventTarget.EventTargetEvent) => {\n changes.push(event.data);\n });\n mockStore.set('test', '\"new\"');\n assert.strictEqual(await testSetting.forceGet(), 'new');\n assert.deepEqual(changes, ['new']);\n assert.strictEqual(mockStore.get('test'), '\"new\"');\n assert.strictEqual(await settingsStorage.forceGet('test'), '\"new\"');\n assert.strictEqual(await testSetting.forceGet(), 'new');\n });\n });\n});\n\ndescribe('VersionController', () => {\n let settings: Common.Settings.Settings;\n let syncedStorage: Common.Settings.SettingsStorage;\n let globalStorage: Common.Settings.SettingsStorage;\n let localStorage: Common.Settings.SettingsStorage;\n\n beforeEach(() => {\n const mockStore = new MockStore();\n syncedStorage = new Common.Settings.SettingsStorage({}, mockStore);\n globalStorage = new Common.Settings.SettingsStorage({}, mockStore);\n localStorage = new Common.Settings.SettingsStorage({}, mockStore);\n settings = Common.Settings.Settings.instance({\n forceNew: true,\n syncedStorage,\n globalStorage,\n localStorage,\n });\n });\n\n afterEach(() => {\n Common.Settings.Settings.removeInstance();\n });\n\n describe('updateVersion', () => {\n it('initializes version settings with the current version if the setting doesn\\'t exist yet', () => {\n assert.isFalse(globalStorage.has(VersionController.GLOBAL_VERSION_SETTING_NAME));\n assert.isFalse(syncedStorage.has(VersionController.SYNCED_VERSION_SETTING_NAME));\n assert.isFalse(localStorage.has(VersionController.LOCAL_VERSION_SETTING_NAME));\n\n new VersionController().updateVersion();\n\n const currentVersion = VersionController.CURRENT_VERSION.toString();\n assert.strictEqual(globalStorage.get(VersionController.GLOBAL_VERSION_SETTING_NAME), currentVersion);\n assert.strictEqual(syncedStorage.get(VersionController.SYNCED_VERSION_SETTING_NAME), currentVersion);\n assert.strictEqual(localStorage.get(VersionController.LOCAL_VERSION_SETTING_NAME), currentVersion);\n });\n\n function spyAllUpdateMethods(versionController: Common.Settings.VersionController) {\n const spies: Array> = [];\n for (let i = 0; i < VersionController.CURRENT_VERSION; ++i) {\n spies.push(\n sinon.spy(versionController, `updateVersionFrom${i}To${i + 1}` as keyof Common.Settings.VersionController));\n }\n assert.lengthOf(spies, VersionController.CURRENT_VERSION);\n return spies;\n }\n\n it('does not run any update* methods if no version setting exist yet', () => {\n const versionController = new VersionController();\n const spies = spyAllUpdateMethods(versionController);\n\n versionController.updateVersion();\n\n for (const spy of spies) {\n assert.isFalse(spy.called);\n }\n });\n\n it('does not run any update* methods if all version settings are already current', () => {\n const currentVersion = VersionController.CURRENT_VERSION.toString();\n globalStorage.set(VersionController.GLOBAL_VERSION_SETTING_NAME, currentVersion);\n syncedStorage.set(VersionController.SYNCED_VERSION_SETTING_NAME, currentVersion);\n localStorage.set(VersionController.LOCAL_VERSION_SETTING_NAME, currentVersion);\n const versionController = new VersionController();\n const spies = spyAllUpdateMethods(versionController);\n\n versionController.updateVersion();\n\n for (const spy of spies) {\n assert.isFalse(spy.called);\n }\n });\n\n it('runs correct update* methods if the local bucket lags behind', () => {\n const currentVersion = VersionController.CURRENT_VERSION.toString();\n const localVersion = (VersionController.CURRENT_VERSION - 3).toString();\n globalStorage.set(VersionController.GLOBAL_VERSION_SETTING_NAME, currentVersion);\n syncedStorage.set(VersionController.SYNCED_VERSION_SETTING_NAME, currentVersion);\n localStorage.set(VersionController.LOCAL_VERSION_SETTING_NAME, localVersion);\n const versionController = new VersionController();\n const spies = spyAllUpdateMethods(versionController);\n\n versionController.updateVersion();\n\n const expectedUncalledSpies = spies.slice(0, -3);\n for (const spy of expectedUncalledSpies) {\n assert.isFalse(spy.called);\n }\n\n const expectedCalledSpies = spies.slice(-3);\n for (const spy of expectedCalledSpies) {\n assert.isTrue(spy.called);\n }\n });\n\n it('runs correct update* methods if the synced bucket runs ahead', () => {\n const currentVersion = VersionController.CURRENT_VERSION.toString();\n const oldVersion = (VersionController.CURRENT_VERSION - 1).toString();\n globalStorage.set(VersionController.GLOBAL_VERSION_SETTING_NAME, oldVersion);\n syncedStorage.set(VersionController.SYNCED_VERSION_SETTING_NAME, currentVersion);\n localStorage.set(VersionController.LOCAL_VERSION_SETTING_NAME, oldVersion);\n const versionController = new VersionController();\n const spies = spyAllUpdateMethods(versionController);\n\n versionController.updateVersion();\n\n const expectedUncalledSpies = spies.slice(0, -1);\n for (const spy of expectedUncalledSpies) {\n assert.isFalse(spy.called);\n }\n\n const expectedCalledSpies = spies.slice(-1);\n for (const spy of expectedCalledSpies) {\n assert.isTrue(spy.called);\n }\n });\n });\n\n describe('updateVersionFrom31To32', () => {\n it('correctly adds resourceTypeName to breakpoints', () => {\n const versionController = new VersionController();\n const breakpointsSetting = settings.createLocalSetting('breakpoints', [\n {url: 'webpack:///src/foo.ts', lineNumber: 4, condition: '', enabled: false},\n {url: 'foo.js', lineNumber: 1, columnNumber: 42, condition: 'false', enabled: true},\n ]);\n versionController.updateVersionFrom31To32();\n const breakpoints = breakpointsSetting.get();\n assert.lengthOf(breakpoints, 2);\n assert.propertyVal(breakpoints[0], 'url', 'webpack:///src/foo.ts');\n assert.propertyVal(breakpoints[0], 'resourceTypeName', 'script');\n assert.propertyVal(breakpoints[0], 'lineNumber', 4);\n assert.notProperty(breakpoints[0], 'columnNumber');\n assert.propertyVal(breakpoints[0], 'condition', '');\n assert.propertyVal(breakpoints[0], 'enabled', false);\n assert.propertyVal(breakpoints[1], 'url', 'foo.js');\n assert.propertyVal(breakpoints[1], 'resourceTypeName', 'script');\n assert.propertyVal(breakpoints[1], 'lineNumber', 1);\n assert.propertyVal(breakpoints[1], 'columnNumber', 42);\n assert.propertyVal(breakpoints[1], 'condition', 'false');\n assert.propertyVal(breakpoints[1], 'enabled', true);\n });\n });\n\n describe('updateVersionFrom32To33', () => {\n it('correctly discards previously viewed files without url properties', () => {\n const versionController = new VersionController();\n const previouslyViewedFilesSetting = settings.createLocalSetting('previouslyViewedFiles', [\n {url: 'http://localhost:3000', scrollLineNumber: 1},\n {scrollLineNumber: 1},\n {},\n {url: 'webpack:///src/foo.ts'},\n ]);\n versionController.updateVersionFrom32To33();\n const previouslyViewedFiles = previouslyViewedFilesSetting.get();\n assert.lengthOf(previouslyViewedFiles, 2);\n assert.propertyVal(previouslyViewedFiles[0], 'url', 'http://localhost:3000');\n assert.notProperty(previouslyViewedFiles[0], 'selectionRange');\n assert.propertyVal(previouslyViewedFiles[0], 'scrollLineNumber', 1);\n assert.propertyVal(previouslyViewedFiles[1], 'url', 'webpack:///src/foo.ts');\n assert.notProperty(previouslyViewedFiles[1], 'selectionRange');\n assert.notProperty(previouslyViewedFiles[1], 'scrollLineNumber');\n });\n\n it('correctly adds resourceTypeName to previously viewed files', () => {\n const versionController = new VersionController();\n const previouslyViewedFilesSetting = settings.createLocalSetting('previouslyViewedFiles', [\n {url: 'http://localhost:3000', scrollLineNumber: 1},\n {url: 'webpack:///src/foo.ts'},\n ]);\n versionController.updateVersionFrom32To33();\n const previouslyViewedFiles = previouslyViewedFilesSetting.get();\n assert.lengthOf(previouslyViewedFiles, 2);\n assert.propertyVal(previouslyViewedFiles[0], 'url', 'http://localhost:3000');\n assert.propertyVal(previouslyViewedFiles[0], 'resourceTypeName', 'script');\n assert.notProperty(previouslyViewedFiles[0], 'selectionRange');\n assert.propertyVal(previouslyViewedFiles[0], 'scrollLineNumber', 1);\n assert.propertyVal(previouslyViewedFiles[1], 'url', 'webpack:///src/foo.ts');\n assert.propertyVal(previouslyViewedFiles[1], 'resourceTypeName', 'script');\n assert.notProperty(previouslyViewedFiles[1], 'selectionRange');\n assert.notProperty(previouslyViewedFiles[1], 'scrollLineNumber');\n });\n });\n\n describe('updateVersionFrom33To34', () => {\n it('correctly adds isLogpoint to breakpoints', () => {\n const versionController = new VersionController();\n const breakpointsSetting = settings.createLocalSetting('breakpoints', [\n {\n url: 'webpack:///src/foo.ts',\n lineNumber: 4,\n resourceTypeName: 'script',\n condition: '/** DEVTOOLS_LOGPOINT */ console.log(foo.property)',\n enabled: true,\n },\n {\n url: 'foo.js',\n lineNumber: 1,\n columnNumber: 42,\n resourceTypeName: 'script',\n condition: 'x === 42',\n enabled: true,\n },\n {url: 'bar.js', lineNumber: 5, columnNumber: 1, resourceTypeName: 'script', condition: '', enabled: true},\n ]);\n\n versionController.updateVersionFrom33To34();\n const breakpoints = breakpointsSetting.get();\n\n assert.propertyVal(breakpoints[0], 'isLogpoint', true);\n assert.propertyVal(breakpoints[1], 'isLogpoint', false);\n assert.propertyVal(breakpoints[2], 'isLogpoint', false);\n });\n });\n\n describe('updateVersionFrom34To35', () => {\n it('removes the logpoint prefix/suffix from logpoints', () => {\n const versionController = new VersionController();\n const breakpointsSetting =\n settings.createLocalSetting('breakpoints', [{\n url: 'webpack:///src/foo.ts',\n lineNumber: 4,\n resourceTypeName: 'script',\n condition: '/** DEVTOOLS_LOGPOINT */ console.log(foo.property)',\n enabled: true,\n isLogpoint: true,\n }]);\n\n versionController.updateVersionFrom34To35();\n\n const breakpoints = breakpointsSetting.get();\n assert.lengthOf(breakpoints, 1);\n assert.propertyVal(breakpoints[0], 'condition', 'foo.property');\n });\n\n it('leaves conditional breakpoints alone', () => {\n const versionController = new VersionController();\n const breakpointsSetting = settings.createLocalSetting('breakpoints', [{\n url: 'webpack:///src/foo.ts',\n lineNumber: 4,\n resourceTypeName: 'script',\n condition: 'x === 42',\n enabled: true,\n isLogpoint: false,\n }]);\n\n versionController.updateVersionFrom34To35();\n\n const breakpoints = breakpointsSetting.get();\n assert.lengthOf(breakpoints, 1);\n assert.propertyVal(breakpoints[0], 'condition', 'x === 42');\n });\n });\n\n describe('updateVersionFrom35To36', () => {\n it('update showThirdPartyIssues setting value to true', () => {\n const versionController = new VersionController();\n const showThirdPartyIssuesSetting = settings.createLocalSetting('showThirdPartyIssues', false);\n versionController.updateVersionFrom35To36();\n assert.isTrue(showThirdPartyIssuesSetting.get());\n });\n });\n\n describe('updateVersionFrom36To37', () => {\n it('updates all keys to kebab case', () => {\n const versionController = new VersionController();\n settings.globalStorage.set('globalSetting1', '');\n settings.globalStorage.set('globalSetting2', '');\n settings.localStorage.set('localSetting', '');\n settings.syncedStorage.set('syncedSetting', '');\n\n versionController.updateVersionFrom36To37();\n\n assert.deepEqual(settings.globalStorage.keys(), ['global-setting-1', 'global-setting-2']);\n assert.deepEqual(settings.localStorage.keys(), ['local-setting']);\n assert.deepEqual(settings.syncedStorage.keys(), ['synced-setting']);\n });\n\n it('keeps kebab case settings as is', () => {\n const versionController = new VersionController();\n settings.globalStorage.set('setting', '123');\n settings.localStorage.set('another-setting', '456');\n\n versionController.updateVersionFrom36To37();\n\n assert.deepEqual(settings.globalStorage.keys(), ['setting']);\n assert.strictEqual(settings.globalStorage.get('setting'), '123');\n assert.strictEqual(settings.localStorage.get('another-setting'), '456');\n });\n\n it('update data grid column weights value', () => {\n const versionController = new VersionController();\n settings.globalStorage.set('dataGrid-foo-columnWeights', JSON.stringify({\n columnOne: 1,\n columnTwo: 2,\n }));\n\n versionController.updateVersionFrom36To37();\n\n const setting = settings.createSetting('data-grid-foo-column-weights', {});\n\n assert.deepEqual(setting.get(), {'column-one': 1, 'column-two': 2});\n });\n\n it('update view manager settings values', () => {\n const versionController = new VersionController();\n settings.globalStorage.set('viewsLocationOverride', JSON.stringify({\n somePanel: 'main',\n other_panel: 'drawer',\n }));\n settings.globalStorage.set('closeableTabs', JSON.stringify({\n somePanel: false,\n other_panel: true,\n }));\n settings.globalStorage.set('main-tabOrder', JSON.stringify({\n somePanel: 2,\n other_panel: 1,\n }));\n settings.globalStorage.set('main-selectedTab', JSON.stringify('somePanel'));\n\n versionController.updateVersionFrom36To37();\n\n assert.deepEqual(\n settings.createSetting('views-location-override', {}).get(), {'some-panel': 'main', 'other-panel': 'drawer'});\n assert.deepEqual(settings.createSetting('closeable-tabs', {}).get(), {'some-panel': false, 'other-panel': true});\n assert.deepEqual(settings.createSetting('main-tab-order', {}).get(), {'some-panel': 2, 'other-panel': 1});\n assert.deepEqual(settings.createSetting('main-selected-tab', '').get(), 'some-panel');\n });\n });\n});\n"]}
\ No newline at end of file
+{"version":3,"file":"Settings.test.js","sourceRoot":"","sources":["../../../../../../front_end/core/common/Settings.test.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2019 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\nimport * as Common from './common.js';\n\nconst SettingsStorage = Common.Settings.SettingsStorage;\nconst VersionController = Common.Settings.VersionController;\n\nclass MockStore implements Common.Settings.SettingsBackingStore {\n #store = new Map();\n register() {\n }\n set(key: string, value: string) {\n this.#store.set(key, value);\n }\n get(key: string) {\n return this.#store.get(key);\n }\n remove(key: string) {\n this.#store.delete(key);\n }\n clear() {\n this.#store.clear();\n }\n}\n\ndescribe('SettingsStorage class', () => {\n it('is able to set a name', () => {\n const settingsStorage = new SettingsStorage({});\n settingsStorage.set('Test Name', 'Test Value');\n assert.strictEqual(settingsStorage.get('Test Name'), 'Test Value', 'Name was not retrieve correctly');\n });\n\n it('is able to check if a name that it has exists', () => {\n const settingsStorage = new SettingsStorage({});\n settingsStorage.set('Test Name', 'Test Value');\n assert.isTrue(settingsStorage.has('Test Name'), 'the class should have that name');\n });\n\n it('is able to check if a name that it does not have exists', () => {\n const settingsStorage = new SettingsStorage({});\n assert.isFalse(settingsStorage.has('Test Name'), 'the class should not have that name');\n });\n\n it('is able to remove a name', () => {\n const settingsStorage = new SettingsStorage({});\n settingsStorage.set('Test Name', 'Test Value');\n settingsStorage.remove('Test Name');\n assert.isFalse(settingsStorage.has('Test Name'), 'the class should not have that name');\n });\n\n it('is able to remove all names', () => {\n const settingsStorage = new SettingsStorage({});\n settingsStorage.set('Test Name 1', 'Test Value 1');\n settingsStorage.set('Test Name 2', 'Test Value 2');\n settingsStorage.removeAll();\n assert.isFalse(settingsStorage.has('Test Name 1'), 'the class should not have any names');\n assert.isFalse(settingsStorage.has('Test Name 2'), 'the class should not have any names');\n });\n\n describe('forceGet', () => {\n it('returns the value of the backing store, not the cached one', async () => {\n const mockStore = new MockStore();\n const settingsStorage = new SettingsStorage({}, mockStore);\n settingsStorage.set('test', 'value');\n\n mockStore.set('test', 'changed');\n\n assert.strictEqual(await settingsStorage.forceGet('test'), 'changed');\n assert.strictEqual(await settingsStorage.forceGet('test'), 'changed');\n });\n it('updates the cached value of a SettingsStorage', async () => {\n const mockStore = new MockStore();\n const settingsStorage = new SettingsStorage({}, mockStore);\n settingsStorage.set('test', 'value');\n mockStore.set('test', 'changed');\n assert.strictEqual(settingsStorage.get('test'), 'value');\n\n await settingsStorage.forceGet('test');\n\n assert.strictEqual(settingsStorage.get('test'), 'changed');\n });\n it('leaves the cached value alone if the backing store has the same value', async () => {\n const mockStore = new MockStore();\n const settingsStorage = new SettingsStorage({}, mockStore);\n\n mockStore.set('test', 'value');\n settingsStorage.set('test', 'value');\n\n assert.strictEqual(mockStore.get('test'), 'value');\n assert.strictEqual(await settingsStorage.forceGet('test'), 'value');\n assert.strictEqual(mockStore.get('test'), 'value');\n assert.strictEqual(await settingsStorage.forceGet('test'), 'value');\n });\n });\n});\n\ndescribe('Settings instance', () => {\n afterEach(() => {\n Common.Settings.Settings.removeInstance();\n Common.Settings.resetSettings(); // Clear SettingsRegistrations.\n });\n\n it('can be instantiated in a test', () => {\n const dummyStorage = new SettingsStorage({});\n\n const settings = Common.Settings.Settings.instance({\n forceNew: true,\n syncedStorage: dummyStorage,\n globalStorage: dummyStorage,\n localStorage: dummyStorage,\n });\n\n assert.isOk(settings);\n });\n\n it('throws when constructed without storage', () => {\n assert.throws(() => Common.Settings.Settings.instance());\n assert.throws(\n () => Common.Settings.Settings.instance(\n {forceNew: true, syncedStorage: null, globalStorage: null, localStorage: null}));\n });\n\n it('stores synced settings in the correct storage', () => {\n const syncedStorage = new SettingsStorage({});\n const dummyStorage = new SettingsStorage({});\n Common.Settings.registerSettingExtension({\n settingName: 'static-synced-setting',\n settingType: Common.Settings.SettingType.BOOLEAN,\n defaultValue: false,\n storageType: Common.Settings.SettingStorageType.SYNCED,\n });\n const settings = Common.Settings.Settings.instance(\n {forceNew: true, syncedStorage, globalStorage: dummyStorage, localStorage: dummyStorage});\n\n const dynamicSetting: Common.Settings.Setting =\n settings.createSetting('dynamic-synced-setting', 'default val', Common.Settings.SettingStorageType.SYNCED);\n dynamicSetting.set('foo value');\n const staticSetting: Common.Settings.Setting = settings.moduleSetting('static-synced-setting');\n staticSetting.set(true);\n\n assert.isFalse(dummyStorage.has('dynamic-synced-setting'));\n assert.isFalse(dummyStorage.has('static-synced-setting'));\n assert.strictEqual(syncedStorage.get('dynamic-synced-setting'), '\"foo value\"');\n assert.strictEqual(syncedStorage.get('static-synced-setting'), 'true');\n });\n\n it('registers settings with the backing store when creating them', () => {\n const registeredSettings = new Set();\n const mockBackingStore: Common.Settings.SettingsBackingStore = {\n ...Common.Settings.NOOP_STORAGE,\n register: (name: string) => registeredSettings.add(name),\n };\n const storage = new SettingsStorage({}, mockBackingStore, '__prefix__.');\n Common.Settings.registerSettingExtension({\n settingName: 'static-global-setting',\n settingType: Common.Settings.SettingType.BOOLEAN,\n defaultValue: false,\n storageType: Common.Settings.SettingStorageType.GLOBAL,\n });\n\n const settings = Common.Settings.Settings.instance(\n {forceNew: true, syncedStorage: storage, globalStorage: storage, localStorage: storage});\n settings.createSetting('dynamic-local-setting', 42, Common.Settings.SettingStorageType.LOCAL);\n settings.createSetting('dynamic-synced-setting', 'foo', Common.Settings.SettingStorageType.SYNCED);\n\n assert.isTrue(registeredSettings.has('__prefix__.static-global-setting'));\n assert.isTrue(registeredSettings.has('__prefix__.dynamic-local-setting'));\n assert.isTrue(registeredSettings.has('__prefix__.dynamic-synced-setting'));\n });\n\n describe('forceGet', () => {\n it('triggers a setting changed event in case the value in the backing store got updated and we update the cached value',\n async () => {\n const mockStore = new MockStore();\n const settingsStorage = new SettingsStorage({}, mockStore);\n mockStore.set('test', '\"old\"');\n const settings = Common.Settings.Settings.instance({\n forceNew: true,\n syncedStorage: settingsStorage,\n globalStorage: settingsStorage,\n localStorage: settingsStorage,\n });\n const testSetting: Common.Settings.Setting =\n settings.createSetting('test', 'default val', Common.Settings.SettingStorageType.GLOBAL);\n const changes: string[] = [];\n testSetting.addChangeListener((event: Common.EventTarget.EventTargetEvent) => {\n changes.push(event.data);\n });\n mockStore.set('test', '\"new\"');\n assert.strictEqual(await testSetting.forceGet(), 'new');\n assert.deepEqual(changes, ['new']);\n assert.strictEqual(mockStore.get('test'), '\"new\"');\n assert.strictEqual(await settingsStorage.forceGet('test'), '\"new\"');\n assert.strictEqual(await testSetting.forceGet(), 'new');\n });\n });\n\n it('getIfNotDisabled returns the setting\\'s value only if the setting is not disabled', async () => {\n const registeredSettings = new Set();\n const mockBackingStore: Common.Settings.SettingsBackingStore = {\n ...Common.Settings.NOOP_STORAGE,\n register: (name: string) => registeredSettings.add(name),\n };\n const storage = new SettingsStorage({}, mockBackingStore, '__prefix__.');\n const settings = Common.Settings.Settings.instance(\n {forceNew: true, syncedStorage: storage, globalStorage: storage, localStorage: storage});\n const testSetting = settings.createSetting('test-setting', 'some value');\n assert.strictEqual(testSetting.getIfNotDisabled(), 'some value');\n\n testSetting.setDisabled(true);\n assert.isUndefined(testSetting.getIfNotDisabled());\n\n testSetting.setDisabled(false);\n assert.strictEqual(testSetting.getIfNotDisabled(), 'some value');\n });\n});\n\ndescribe('VersionController', () => {\n let settings: Common.Settings.Settings;\n let syncedStorage: Common.Settings.SettingsStorage;\n let globalStorage: Common.Settings.SettingsStorage;\n let localStorage: Common.Settings.SettingsStorage;\n\n beforeEach(() => {\n const mockStore = new MockStore();\n syncedStorage = new Common.Settings.SettingsStorage({}, mockStore);\n globalStorage = new Common.Settings.SettingsStorage({}, mockStore);\n localStorage = new Common.Settings.SettingsStorage({}, mockStore);\n settings = Common.Settings.Settings.instance({\n forceNew: true,\n syncedStorage,\n globalStorage,\n localStorage,\n });\n });\n\n afterEach(() => {\n Common.Settings.Settings.removeInstance();\n });\n\n describe('updateVersion', () => {\n it('initializes version settings with the current version if the setting doesn\\'t exist yet', () => {\n assert.isFalse(globalStorage.has(VersionController.GLOBAL_VERSION_SETTING_NAME));\n assert.isFalse(syncedStorage.has(VersionController.SYNCED_VERSION_SETTING_NAME));\n assert.isFalse(localStorage.has(VersionController.LOCAL_VERSION_SETTING_NAME));\n\n new VersionController().updateVersion();\n\n const currentVersion = VersionController.CURRENT_VERSION.toString();\n assert.strictEqual(globalStorage.get(VersionController.GLOBAL_VERSION_SETTING_NAME), currentVersion);\n assert.strictEqual(syncedStorage.get(VersionController.SYNCED_VERSION_SETTING_NAME), currentVersion);\n assert.strictEqual(localStorage.get(VersionController.LOCAL_VERSION_SETTING_NAME), currentVersion);\n });\n\n function spyAllUpdateMethods(versionController: Common.Settings.VersionController) {\n const spies: Array> = [];\n for (let i = 0; i < VersionController.CURRENT_VERSION; ++i) {\n spies.push(\n sinon.spy(versionController, `updateVersionFrom${i}To${i + 1}` as keyof Common.Settings.VersionController));\n }\n assert.lengthOf(spies, VersionController.CURRENT_VERSION);\n return spies;\n }\n\n it('does not run any update* methods if no version setting exist yet', () => {\n const versionController = new VersionController();\n const spies = spyAllUpdateMethods(versionController);\n\n versionController.updateVersion();\n\n for (const spy of spies) {\n assert.isFalse(spy.called);\n }\n });\n\n it('does not run any update* methods if all version settings are already current', () => {\n const currentVersion = VersionController.CURRENT_VERSION.toString();\n globalStorage.set(VersionController.GLOBAL_VERSION_SETTING_NAME, currentVersion);\n syncedStorage.set(VersionController.SYNCED_VERSION_SETTING_NAME, currentVersion);\n localStorage.set(VersionController.LOCAL_VERSION_SETTING_NAME, currentVersion);\n const versionController = new VersionController();\n const spies = spyAllUpdateMethods(versionController);\n\n versionController.updateVersion();\n\n for (const spy of spies) {\n assert.isFalse(spy.called);\n }\n });\n\n it('runs correct update* methods if the local bucket lags behind', () => {\n const currentVersion = VersionController.CURRENT_VERSION.toString();\n const localVersion = (VersionController.CURRENT_VERSION - 3).toString();\n globalStorage.set(VersionController.GLOBAL_VERSION_SETTING_NAME, currentVersion);\n syncedStorage.set(VersionController.SYNCED_VERSION_SETTING_NAME, currentVersion);\n localStorage.set(VersionController.LOCAL_VERSION_SETTING_NAME, localVersion);\n const versionController = new VersionController();\n const spies = spyAllUpdateMethods(versionController);\n\n versionController.updateVersion();\n\n const expectedUncalledSpies = spies.slice(0, -3);\n for (const spy of expectedUncalledSpies) {\n assert.isFalse(spy.called);\n }\n\n const expectedCalledSpies = spies.slice(-3);\n for (const spy of expectedCalledSpies) {\n assert.isTrue(spy.called);\n }\n });\n\n it('runs correct update* methods if the synced bucket runs ahead', () => {\n const currentVersion = VersionController.CURRENT_VERSION.toString();\n const oldVersion = (VersionController.CURRENT_VERSION - 1).toString();\n globalStorage.set(VersionController.GLOBAL_VERSION_SETTING_NAME, oldVersion);\n syncedStorage.set(VersionController.SYNCED_VERSION_SETTING_NAME, currentVersion);\n localStorage.set(VersionController.LOCAL_VERSION_SETTING_NAME, oldVersion);\n const versionController = new VersionController();\n const spies = spyAllUpdateMethods(versionController);\n\n versionController.updateVersion();\n\n const expectedUncalledSpies = spies.slice(0, -1);\n for (const spy of expectedUncalledSpies) {\n assert.isFalse(spy.called);\n }\n\n const expectedCalledSpies = spies.slice(-1);\n for (const spy of expectedCalledSpies) {\n assert.isTrue(spy.called);\n }\n });\n });\n\n describe('updateVersionFrom31To32', () => {\n it('correctly adds resourceTypeName to breakpoints', () => {\n const versionController = new VersionController();\n const breakpointsSetting = settings.createLocalSetting('breakpoints', [\n {url: 'webpack:///src/foo.ts', lineNumber: 4, condition: '', enabled: false},\n {url: 'foo.js', lineNumber: 1, columnNumber: 42, condition: 'false', enabled: true},\n ]);\n versionController.updateVersionFrom31To32();\n const breakpoints = breakpointsSetting.get();\n assert.lengthOf(breakpoints, 2);\n assert.propertyVal(breakpoints[0], 'url', 'webpack:///src/foo.ts');\n assert.propertyVal(breakpoints[0], 'resourceTypeName', 'script');\n assert.propertyVal(breakpoints[0], 'lineNumber', 4);\n assert.notProperty(breakpoints[0], 'columnNumber');\n assert.propertyVal(breakpoints[0], 'condition', '');\n assert.propertyVal(breakpoints[0], 'enabled', false);\n assert.propertyVal(breakpoints[1], 'url', 'foo.js');\n assert.propertyVal(breakpoints[1], 'resourceTypeName', 'script');\n assert.propertyVal(breakpoints[1], 'lineNumber', 1);\n assert.propertyVal(breakpoints[1], 'columnNumber', 42);\n assert.propertyVal(breakpoints[1], 'condition', 'false');\n assert.propertyVal(breakpoints[1], 'enabled', true);\n });\n });\n\n describe('updateVersionFrom32To33', () => {\n it('correctly discards previously viewed files without url properties', () => {\n const versionController = new VersionController();\n const previouslyViewedFilesSetting = settings.createLocalSetting('previouslyViewedFiles', [\n {url: 'http://localhost:3000', scrollLineNumber: 1},\n {scrollLineNumber: 1},\n {},\n {url: 'webpack:///src/foo.ts'},\n ]);\n versionController.updateVersionFrom32To33();\n const previouslyViewedFiles = previouslyViewedFilesSetting.get();\n assert.lengthOf(previouslyViewedFiles, 2);\n assert.propertyVal(previouslyViewedFiles[0], 'url', 'http://localhost:3000');\n assert.notProperty(previouslyViewedFiles[0], 'selectionRange');\n assert.propertyVal(previouslyViewedFiles[0], 'scrollLineNumber', 1);\n assert.propertyVal(previouslyViewedFiles[1], 'url', 'webpack:///src/foo.ts');\n assert.notProperty(previouslyViewedFiles[1], 'selectionRange');\n assert.notProperty(previouslyViewedFiles[1], 'scrollLineNumber');\n });\n\n it('correctly adds resourceTypeName to previously viewed files', () => {\n const versionController = new VersionController();\n const previouslyViewedFilesSetting = settings.createLocalSetting('previouslyViewedFiles', [\n {url: 'http://localhost:3000', scrollLineNumber: 1},\n {url: 'webpack:///src/foo.ts'},\n ]);\n versionController.updateVersionFrom32To33();\n const previouslyViewedFiles = previouslyViewedFilesSetting.get();\n assert.lengthOf(previouslyViewedFiles, 2);\n assert.propertyVal(previouslyViewedFiles[0], 'url', 'http://localhost:3000');\n assert.propertyVal(previouslyViewedFiles[0], 'resourceTypeName', 'script');\n assert.notProperty(previouslyViewedFiles[0], 'selectionRange');\n assert.propertyVal(previouslyViewedFiles[0], 'scrollLineNumber', 1);\n assert.propertyVal(previouslyViewedFiles[1], 'url', 'webpack:///src/foo.ts');\n assert.propertyVal(previouslyViewedFiles[1], 'resourceTypeName', 'script');\n assert.notProperty(previouslyViewedFiles[1], 'selectionRange');\n assert.notProperty(previouslyViewedFiles[1], 'scrollLineNumber');\n });\n });\n\n describe('updateVersionFrom33To34', () => {\n it('correctly adds isLogpoint to breakpoints', () => {\n const versionController = new VersionController();\n const breakpointsSetting = settings.createLocalSetting('breakpoints', [\n {\n url: 'webpack:///src/foo.ts',\n lineNumber: 4,\n resourceTypeName: 'script',\n condition: '/** DEVTOOLS_LOGPOINT */ console.log(foo.property)',\n enabled: true,\n },\n {\n url: 'foo.js',\n lineNumber: 1,\n columnNumber: 42,\n resourceTypeName: 'script',\n condition: 'x === 42',\n enabled: true,\n },\n {url: 'bar.js', lineNumber: 5, columnNumber: 1, resourceTypeName: 'script', condition: '', enabled: true},\n ]);\n\n versionController.updateVersionFrom33To34();\n const breakpoints = breakpointsSetting.get();\n\n assert.propertyVal(breakpoints[0], 'isLogpoint', true);\n assert.propertyVal(breakpoints[1], 'isLogpoint', false);\n assert.propertyVal(breakpoints[2], 'isLogpoint', false);\n });\n });\n\n describe('updateVersionFrom34To35', () => {\n it('removes the logpoint prefix/suffix from logpoints', () => {\n const versionController = new VersionController();\n const breakpointsSetting =\n settings.createLocalSetting('breakpoints', [{\n url: 'webpack:///src/foo.ts',\n lineNumber: 4,\n resourceTypeName: 'script',\n condition: '/** DEVTOOLS_LOGPOINT */ console.log(foo.property)',\n enabled: true,\n isLogpoint: true,\n }]);\n\n versionController.updateVersionFrom34To35();\n\n const breakpoints = breakpointsSetting.get();\n assert.lengthOf(breakpoints, 1);\n assert.propertyVal(breakpoints[0], 'condition', 'foo.property');\n });\n\n it('leaves conditional breakpoints alone', () => {\n const versionController = new VersionController();\n const breakpointsSetting = settings.createLocalSetting('breakpoints', [{\n url: 'webpack:///src/foo.ts',\n lineNumber: 4,\n resourceTypeName: 'script',\n condition: 'x === 42',\n enabled: true,\n isLogpoint: false,\n }]);\n\n versionController.updateVersionFrom34To35();\n\n const breakpoints = breakpointsSetting.get();\n assert.lengthOf(breakpoints, 1);\n assert.propertyVal(breakpoints[0], 'condition', 'x === 42');\n });\n });\n\n describe('updateVersionFrom35To36', () => {\n it('update showThirdPartyIssues setting value to true', () => {\n const versionController = new VersionController();\n const showThirdPartyIssuesSetting = settings.createLocalSetting('showThirdPartyIssues', false);\n versionController.updateVersionFrom35To36();\n assert.isTrue(showThirdPartyIssuesSetting.get());\n });\n });\n\n describe('updateVersionFrom36To37', () => {\n it('updates all keys to kebab case', () => {\n const versionController = new VersionController();\n settings.globalStorage.set('globalSetting1', '');\n settings.globalStorage.set('globalSetting2', '');\n settings.localStorage.set('localSetting', '');\n settings.syncedStorage.set('syncedSetting', '');\n\n versionController.updateVersionFrom36To37();\n\n assert.deepEqual(settings.globalStorage.keys(), ['global-setting-1', 'global-setting-2']);\n assert.deepEqual(settings.localStorage.keys(), ['local-setting']);\n assert.deepEqual(settings.syncedStorage.keys(), ['synced-setting']);\n });\n\n it('keeps kebab case settings as is', () => {\n const versionController = new VersionController();\n settings.globalStorage.set('setting', '123');\n settings.localStorage.set('another-setting', '456');\n\n versionController.updateVersionFrom36To37();\n\n assert.deepEqual(settings.globalStorage.keys(), ['setting']);\n assert.strictEqual(settings.globalStorage.get('setting'), '123');\n assert.strictEqual(settings.localStorage.get('another-setting'), '456');\n });\n\n it('update data grid column weights value', () => {\n const versionController = new VersionController();\n settings.globalStorage.set('dataGrid-foo-columnWeights', JSON.stringify({\n columnOne: 1,\n columnTwo: 2,\n }));\n\n versionController.updateVersionFrom36To37();\n\n const setting = settings.createSetting('data-grid-foo-column-weights', {});\n\n assert.deepEqual(setting.get(), {'column-one': 1, 'column-two': 2});\n });\n\n it('update view manager settings values', () => {\n const versionController = new VersionController();\n settings.globalStorage.set('viewsLocationOverride', JSON.stringify({\n somePanel: 'main',\n other_panel: 'drawer',\n }));\n settings.globalStorage.set('closeableTabs', JSON.stringify({\n somePanel: false,\n other_panel: true,\n }));\n settings.globalStorage.set('main-tabOrder', JSON.stringify({\n somePanel: 2,\n other_panel: 1,\n }));\n settings.globalStorage.set('main-selectedTab', JSON.stringify('somePanel'));\n\n versionController.updateVersionFrom36To37();\n\n assert.deepEqual(\n settings.createSetting('views-location-override', {}).get(), {'some-panel': 'main', 'other-panel': 'drawer'});\n assert.deepEqual(settings.createSetting('closeable-tabs', {}).get(), {'some-panel': false, 'other-panel': true});\n assert.deepEqual(settings.createSetting('main-tab-order', {}).get(), {'some-panel': 2, 'other-panel': 1});\n assert.deepEqual(settings.createSetting('main-selected-tab', '').get(), 'some-panel');\n });\n });\n});\n"]}
\ No newline at end of file
diff --git a/public/core/host/AidaClient.d.ts b/public/core/host/AidaClient.d.ts
index cbcef3ec2..37a6997dc 100644
--- a/public/core/host/AidaClient.d.ts
+++ b/public/core/host/AidaClient.d.ts
@@ -79,6 +79,7 @@ export interface AidaResponseMetadata {
export interface AidaResponse {
explanation: string;
metadata: AidaResponseMetadata;
+ completed: boolean;
}
export declare const enum AidaAccessPreconditions {
AVAILABLE = "available",
diff --git a/public/core/host/AidaClient.js b/public/core/host/AidaClient.js
index 095574f40..8d0a3d445 100644
--- a/public/core/host/AidaClient.js
+++ b/public/core/host/AidaClient.js
@@ -46,6 +46,7 @@ export var RecitationAction;
RecitationAction["EXEMPT_FOUND_IN_PROMPT"] = "EXEMPT_FOUND_IN_PROMPT";
})(RecitationAction || (RecitationAction = {}));
export const CLIENT_NAME = 'CHROME_DEVTOOLS';
+const CODE_CHUNK_SEPARATOR = '\n`````\n';
export class AidaClient {
static buildConsoleInsightsRequest(input) {
const request = {
@@ -155,7 +156,6 @@ export class AidaClient {
catch (error) {
throw new Error('Cannot parse chunk: ' + chunk, { cause: error });
}
- const CODE_CHUNK_SEPARATOR = '\n`````\n';
for (const result of results) {
if ('metadata' in result) {
metadata.rpcGlobalId = result.metadata.rpcGlobalId;
@@ -193,9 +193,15 @@ export class AidaClient {
yield {
explanation: text.join('') + (inCodeChunk ? CODE_CHUNK_SEPARATOR : ''),
metadata,
+ completed: false,
};
}
}
+ yield {
+ explanation: text.join('') + (inCodeChunk ? CODE_CHUNK_SEPARATOR : ''),
+ metadata,
+ completed: true,
+ };
}
registerClientEvent(clientEvent) {
const { promise, resolve } = Promise.withResolvers();
diff --git a/public/core/host/AidaClient.js.map b/public/core/host/AidaClient.js.map
index 0c137044a..af7182845 100644
--- a/public/core/host/AidaClient.js.map
+++ b/public/core/host/AidaClient.js.map
@@ -1 +1 @@
-{"version":3,"file":"AidaClient.js","sourceRoot":"","sources":["../../../../../../front_end/core/host/AidaClient.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2023 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\nimport * as Common from '../common/common.js';\n\nimport {InspectorFrontendHostInstance} from './InspectorFrontendHost.js';\nimport {type AidaClientResult, type SyncInformation} from './InspectorFrontendHostAPI.js';\nimport {bindOutputStream} from './ResourceLoader.js';\n\nexport enum Entity {\n UNKNOWN = 0,\n USER = 1,\n SYSTEM = 2,\n}\n\nexport const enum Rating {\n POSITIVE = 'POSITIVE',\n NEGATIVE = 'NEGATIVE',\n}\n\nexport interface Chunk {\n text: string;\n entity: Entity;\n}\n\nexport enum FunctionalityType {\n // Unspecified functionality type.\n FUNCTIONALITY_TYPE_UNSPECIFIED = 0,\n // The generic AI chatbot functionality.\n CHAT = 1,\n // The explain error functionality.\n EXPLAIN_ERROR = 2,\n}\n\nexport enum ClientFeature {\n // Unspecified client feature.\n CLIENT_FEATURE_UNSPECIFIED = 0,\n // Chrome console insights feature.\n CHROME_CONSOLE_INSIGHTS = 1,\n // Chrome freestyler.\n CHROME_FREESTYLER = 2,\n}\n\nexport enum UserTier {\n // Unspecified user tier.\n USER_TIER_UNSPECIFIED = 0,\n // Users who are internal testers.\n TESTERS = 1,\n // Users in the general public.\n PUBLIC = 3,\n}\n\nexport interface AidaRequest {\n input: string;\n preamble?: string;\n // eslint-disable-next-line @typescript-eslint/naming-convention\n chat_history?: Chunk[];\n client: string;\n options?: {\n temperature?: Number,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n model_id?: string,\n };\n metadata?: {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n disable_user_content_logging: boolean,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n string_session_id?: string,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n user_tier?: UserTier,\n };\n // eslint-disable-next-line @typescript-eslint/naming-convention\n functionality_type?: FunctionalityType;\n // eslint-disable-next-line @typescript-eslint/naming-convention\n client_feature?: ClientFeature;\n}\n\nexport interface AidaDoConversationClientEvent {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n corresponding_aida_rpc_global_id: number;\n // eslint-disable-next-line @typescript-eslint/naming-convention\n disable_user_content_logging: boolean;\n // eslint-disable-next-line @typescript-eslint/naming-convention\n do_conversation_client_event: {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n user_feedback: {\n sentiment?: Rating,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n user_input?: {\n comment?: string,\n },\n },\n };\n}\n\nexport enum RecitationAction {\n ACTION_UNSPECIFIED = 'ACTION_UNSPECIFIED',\n CITE = 'CITE',\n BLOCK = 'BLOCK',\n NO_ACTION = 'NO_ACTION',\n EXEMPT_FOUND_IN_PROMPT = 'EXEMPT_FOUND_IN_PROMPT',\n}\n\nexport interface Citation {\n startIndex: number;\n endIndex: number;\n url: string;\n}\n\nexport interface AttributionMetadata {\n attributionAction: RecitationAction;\n citations: Citation[];\n}\n\nexport interface AidaResponseMetadata {\n rpcGlobalId?: number;\n attributionMetadata?: AttributionMetadata[];\n}\n\nexport interface AidaResponse {\n explanation: string;\n metadata: AidaResponseMetadata;\n}\n\nexport const enum AidaAccessPreconditions {\n AVAILABLE = 'available',\n NO_ACCOUNT_EMAIL = 'no-account-email',\n NO_ACTIVE_SYNC = 'no-active-sync',\n NO_INTERNET = 'no-internet',\n}\n\nexport const CLIENT_NAME = 'CHROME_DEVTOOLS';\n\nexport class AidaClient {\n static buildConsoleInsightsRequest(input: string): AidaRequest {\n const request: AidaRequest = {\n input,\n client: CLIENT_NAME,\n functionality_type: FunctionalityType.EXPLAIN_ERROR,\n client_feature: ClientFeature.CHROME_CONSOLE_INSIGHTS,\n };\n const config = Common.Settings.Settings.instance().getHostConfig();\n let temperature = NaN;\n let modelId = '';\n if (config.devToolsConsoleInsights?.enabled) {\n temperature = config.devToolsConsoleInsights.temperature || 0;\n modelId = config.devToolsConsoleInsights.modelId || '';\n }\n const disallowLogging = config.aidaAvailability?.disallowLogging ?? true;\n\n if (!isNaN(temperature)) {\n request.options ??= {};\n request.options.temperature = temperature;\n }\n if (modelId) {\n request.options ??= {};\n request.options.model_id = modelId;\n }\n if (disallowLogging) {\n request.metadata = {\n disable_user_content_logging: true,\n };\n }\n return request;\n }\n\n static async checkAccessPreconditions(): Promise {\n if (!navigator.onLine) {\n return AidaAccessPreconditions.NO_INTERNET;\n }\n\n const syncInfo = await new Promise(\n resolve => InspectorFrontendHostInstance.getSyncInformation(syncInfo => resolve(syncInfo)));\n if (!syncInfo.accountEmail) {\n return AidaAccessPreconditions.NO_ACCOUNT_EMAIL;\n }\n\n if (!syncInfo.isSyncActive) {\n return AidaAccessPreconditions.NO_ACTIVE_SYNC;\n }\n\n return AidaAccessPreconditions.AVAILABLE;\n }\n\n async * fetch(request: AidaRequest): AsyncGenerator {\n if (!InspectorFrontendHostInstance.doAidaConversation) {\n throw new Error('doAidaConversation is not available');\n }\n const stream = (() => {\n let {promise, resolve, reject} = Promise.withResolvers();\n return {\n write: async(data: string): Promise => {\n resolve(data);\n ({promise, resolve, reject} = Promise.withResolvers());\n },\n close: async(): Promise => {\n resolve(null);\n },\n read: (): Promise => {\n return promise;\n },\n fail: (e: Error) => reject(e),\n };\n })();\n const streamId = bindOutputStream(stream);\n InspectorFrontendHostInstance.doAidaConversation(JSON.stringify(request), streamId, result => {\n if (result.statusCode === 403) {\n stream.fail(new Error('Server responded: permission denied'));\n } else if (result.error) {\n stream.fail(new Error(`Cannot send request: ${result.error} ${result.detail || ''}`));\n } else if (result.statusCode !== 200) {\n stream.fail(new Error(`Request failed: ${JSON.stringify(result)}`));\n } else {\n void stream.close();\n }\n });\n let chunk;\n const text = [];\n let inCodeChunk = false;\n const metadata: AidaResponseMetadata = {rpcGlobalId: 0};\n while ((chunk = await stream.read())) {\n let textUpdated = false;\n // The AIDA response is a JSON array of objects, split at the object\n // boundary. Therefore each chunk may start with `[` or `,` and possibly\n // followed by `]`. Each chunk may include one or more objects, so we\n // make sure that each chunk becomes a well-formed JSON array when we\n // parse it by adding `[` and `]` and removing `,` where appropriate.\n if (!chunk.length) {\n continue;\n }\n if (chunk.startsWith(',')) {\n chunk = chunk.slice(1);\n }\n if (!chunk.startsWith('[')) {\n chunk = '[' + chunk;\n }\n if (!chunk.endsWith(']')) {\n chunk = chunk + ']';\n }\n let results;\n try {\n results = JSON.parse(chunk);\n } catch (error) {\n throw new Error('Cannot parse chunk: ' + chunk, {cause: error});\n }\n const CODE_CHUNK_SEPARATOR = '\\n`````\\n';\n for (const result of results) {\n if ('metadata' in result) {\n metadata.rpcGlobalId = result.metadata.rpcGlobalId;\n if ('attributionMetadata' in result.metadata) {\n if (!metadata.attributionMetadata) {\n metadata.attributionMetadata = [];\n }\n metadata.attributionMetadata.push(result.metadata.attributionMetadata);\n }\n }\n if ('textChunk' in result) {\n if (inCodeChunk) {\n text.push(CODE_CHUNK_SEPARATOR);\n inCodeChunk = false;\n }\n text.push(result.textChunk.text);\n textUpdated = true;\n } else if ('codeChunk' in result) {\n if (!inCodeChunk) {\n text.push(CODE_CHUNK_SEPARATOR);\n inCodeChunk = true;\n }\n text.push(result.codeChunk.code);\n textUpdated = true;\n } else if ('error' in result) {\n throw new Error(`Server responded: ${JSON.stringify(result)}`);\n } else {\n throw new Error('Unknown chunk result');\n }\n }\n if (textUpdated) {\n yield {\n explanation: text.join('') + (inCodeChunk ? CODE_CHUNK_SEPARATOR : ''),\n metadata,\n };\n }\n }\n }\n\n registerClientEvent(clientEvent: AidaDoConversationClientEvent): Promise {\n const {promise, resolve} = Promise.withResolvers();\n InspectorFrontendHostInstance.registerAidaClientEvent(\n JSON.stringify({\n client: CLIENT_NAME,\n event_time: new Date().toISOString(),\n ...clientEvent,\n }),\n resolve,\n );\n\n return promise;\n }\n}\n\nexport function convertToUserTierEnum(userTier: string|undefined): UserTier {\n if (userTier) {\n switch (userTier) {\n case 'TESTERS':\n return UserTier.TESTERS;\n case 'PUBLIC':\n return UserTier.PUBLIC;\n }\n }\n return UserTier.TESTERS;\n}\n"]}
\ No newline at end of file
+{"version":3,"file":"AidaClient.js","sourceRoot":"","sources":["../../../../../../front_end/core/host/AidaClient.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2023 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\nimport * as Common from '../common/common.js';\n\nimport {InspectorFrontendHostInstance} from './InspectorFrontendHost.js';\nimport {type AidaClientResult, type SyncInformation} from './InspectorFrontendHostAPI.js';\nimport {bindOutputStream} from './ResourceLoader.js';\n\nexport enum Entity {\n UNKNOWN = 0,\n USER = 1,\n SYSTEM = 2,\n}\n\nexport const enum Rating {\n POSITIVE = 'POSITIVE',\n NEGATIVE = 'NEGATIVE',\n}\n\nexport interface Chunk {\n text: string;\n entity: Entity;\n}\n\nexport enum FunctionalityType {\n // Unspecified functionality type.\n FUNCTIONALITY_TYPE_UNSPECIFIED = 0,\n // The generic AI chatbot functionality.\n CHAT = 1,\n // The explain error functionality.\n EXPLAIN_ERROR = 2,\n}\n\nexport enum ClientFeature {\n // Unspecified client feature.\n CLIENT_FEATURE_UNSPECIFIED = 0,\n // Chrome console insights feature.\n CHROME_CONSOLE_INSIGHTS = 1,\n // Chrome freestyler.\n CHROME_FREESTYLER = 2,\n}\n\nexport enum UserTier {\n // Unspecified user tier.\n USER_TIER_UNSPECIFIED = 0,\n // Users who are internal testers.\n TESTERS = 1,\n // Users in the general public.\n PUBLIC = 3,\n}\n\nexport interface AidaRequest {\n input: string;\n preamble?: string;\n // eslint-disable-next-line @typescript-eslint/naming-convention\n chat_history?: Chunk[];\n client: string;\n options?: {\n temperature?: Number,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n model_id?: string,\n };\n metadata?: {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n disable_user_content_logging: boolean,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n string_session_id?: string,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n user_tier?: UserTier,\n };\n // eslint-disable-next-line @typescript-eslint/naming-convention\n functionality_type?: FunctionalityType;\n // eslint-disable-next-line @typescript-eslint/naming-convention\n client_feature?: ClientFeature;\n}\n\nexport interface AidaDoConversationClientEvent {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n corresponding_aida_rpc_global_id: number;\n // eslint-disable-next-line @typescript-eslint/naming-convention\n disable_user_content_logging: boolean;\n // eslint-disable-next-line @typescript-eslint/naming-convention\n do_conversation_client_event: {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n user_feedback: {\n sentiment?: Rating,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n user_input?: {\n comment?: string,\n },\n },\n };\n}\n\nexport enum RecitationAction {\n ACTION_UNSPECIFIED = 'ACTION_UNSPECIFIED',\n CITE = 'CITE',\n BLOCK = 'BLOCK',\n NO_ACTION = 'NO_ACTION',\n EXEMPT_FOUND_IN_PROMPT = 'EXEMPT_FOUND_IN_PROMPT',\n}\n\nexport interface Citation {\n startIndex: number;\n endIndex: number;\n url: string;\n}\n\nexport interface AttributionMetadata {\n attributionAction: RecitationAction;\n citations: Citation[];\n}\n\nexport interface AidaResponseMetadata {\n rpcGlobalId?: number;\n attributionMetadata?: AttributionMetadata[];\n}\n\nexport interface AidaResponse {\n explanation: string;\n metadata: AidaResponseMetadata;\n completed: boolean;\n}\n\nexport const enum AidaAccessPreconditions {\n AVAILABLE = 'available',\n NO_ACCOUNT_EMAIL = 'no-account-email',\n NO_ACTIVE_SYNC = 'no-active-sync',\n NO_INTERNET = 'no-internet',\n}\n\nexport const CLIENT_NAME = 'CHROME_DEVTOOLS';\n\nconst CODE_CHUNK_SEPARATOR = '\\n`````\\n';\n\nexport class AidaClient {\n static buildConsoleInsightsRequest(input: string): AidaRequest {\n const request: AidaRequest = {\n input,\n client: CLIENT_NAME,\n functionality_type: FunctionalityType.EXPLAIN_ERROR,\n client_feature: ClientFeature.CHROME_CONSOLE_INSIGHTS,\n };\n const config = Common.Settings.Settings.instance().getHostConfig();\n let temperature = NaN;\n let modelId = '';\n if (config.devToolsConsoleInsights?.enabled) {\n temperature = config.devToolsConsoleInsights.temperature || 0;\n modelId = config.devToolsConsoleInsights.modelId || '';\n }\n const disallowLogging = config.aidaAvailability?.disallowLogging ?? true;\n\n if (!isNaN(temperature)) {\n request.options ??= {};\n request.options.temperature = temperature;\n }\n if (modelId) {\n request.options ??= {};\n request.options.model_id = modelId;\n }\n if (disallowLogging) {\n request.metadata = {\n disable_user_content_logging: true,\n };\n }\n return request;\n }\n\n static async checkAccessPreconditions(): Promise {\n if (!navigator.onLine) {\n return AidaAccessPreconditions.NO_INTERNET;\n }\n\n const syncInfo = await new Promise(\n resolve => InspectorFrontendHostInstance.getSyncInformation(syncInfo => resolve(syncInfo)));\n if (!syncInfo.accountEmail) {\n return AidaAccessPreconditions.NO_ACCOUNT_EMAIL;\n }\n\n if (!syncInfo.isSyncActive) {\n return AidaAccessPreconditions.NO_ACTIVE_SYNC;\n }\n\n return AidaAccessPreconditions.AVAILABLE;\n }\n\n async * fetch(request: AidaRequest): AsyncGenerator {\n if (!InspectorFrontendHostInstance.doAidaConversation) {\n throw new Error('doAidaConversation is not available');\n }\n const stream = (() => {\n let {promise, resolve, reject} = Promise.withResolvers();\n return {\n write: async(data: string): Promise => {\n resolve(data);\n ({promise, resolve, reject} = Promise.withResolvers());\n },\n close: async(): Promise => {\n resolve(null);\n },\n read: (): Promise => {\n return promise;\n },\n fail: (e: Error) => reject(e),\n };\n })();\n const streamId = bindOutputStream(stream);\n InspectorFrontendHostInstance.doAidaConversation(JSON.stringify(request), streamId, result => {\n if (result.statusCode === 403) {\n stream.fail(new Error('Server responded: permission denied'));\n } else if (result.error) {\n stream.fail(new Error(`Cannot send request: ${result.error} ${result.detail || ''}`));\n } else if (result.statusCode !== 200) {\n stream.fail(new Error(`Request failed: ${JSON.stringify(result)}`));\n } else {\n void stream.close();\n }\n });\n let chunk;\n const text = [];\n let inCodeChunk = false;\n const metadata: AidaResponseMetadata = {rpcGlobalId: 0};\n while ((chunk = await stream.read())) {\n let textUpdated = false;\n // The AIDA response is a JSON array of objects, split at the object\n // boundary. Therefore each chunk may start with `[` or `,` and possibly\n // followed by `]`. Each chunk may include one or more objects, so we\n // make sure that each chunk becomes a well-formed JSON array when we\n // parse it by adding `[` and `]` and removing `,` where appropriate.\n if (!chunk.length) {\n continue;\n }\n if (chunk.startsWith(',')) {\n chunk = chunk.slice(1);\n }\n if (!chunk.startsWith('[')) {\n chunk = '[' + chunk;\n }\n if (!chunk.endsWith(']')) {\n chunk = chunk + ']';\n }\n let results;\n try {\n results = JSON.parse(chunk);\n } catch (error) {\n throw new Error('Cannot parse chunk: ' + chunk, {cause: error});\n }\n\n for (const result of results) {\n if ('metadata' in result) {\n metadata.rpcGlobalId = result.metadata.rpcGlobalId;\n if ('attributionMetadata' in result.metadata) {\n if (!metadata.attributionMetadata) {\n metadata.attributionMetadata = [];\n }\n metadata.attributionMetadata.push(result.metadata.attributionMetadata);\n }\n }\n if ('textChunk' in result) {\n if (inCodeChunk) {\n text.push(CODE_CHUNK_SEPARATOR);\n inCodeChunk = false;\n }\n text.push(result.textChunk.text);\n textUpdated = true;\n } else if ('codeChunk' in result) {\n if (!inCodeChunk) {\n text.push(CODE_CHUNK_SEPARATOR);\n inCodeChunk = true;\n }\n text.push(result.codeChunk.code);\n textUpdated = true;\n } else if ('error' in result) {\n throw new Error(`Server responded: ${JSON.stringify(result)}`);\n } else {\n throw new Error('Unknown chunk result');\n }\n }\n if (textUpdated) {\n yield {\n explanation: text.join('') + (inCodeChunk ? CODE_CHUNK_SEPARATOR : ''),\n metadata,\n completed: false,\n };\n }\n }\n yield {\n explanation: text.join('') + (inCodeChunk ? CODE_CHUNK_SEPARATOR : ''),\n metadata,\n completed: true,\n };\n }\n\n registerClientEvent(clientEvent: AidaDoConversationClientEvent): Promise {\n const {promise, resolve} = Promise.withResolvers();\n InspectorFrontendHostInstance.registerAidaClientEvent(\n JSON.stringify({\n client: CLIENT_NAME,\n event_time: new Date().toISOString(),\n ...clientEvent,\n }),\n resolve,\n );\n\n return promise;\n }\n}\n\nexport function convertToUserTierEnum(userTier: string|undefined): UserTier {\n if (userTier) {\n switch (userTier) {\n case 'TESTERS':\n return UserTier.TESTERS;\n case 'PUBLIC':\n return UserTier.PUBLIC;\n }\n }\n return UserTier.TESTERS;\n}\n"]}
\ No newline at end of file
diff --git a/public/core/host/AidaClient.test.js b/public/core/host/AidaClient.test.js
index 0608373f8..18e59f00e 100644
--- a/public/core/host/AidaClient.test.js
+++ b/public/core/host/AidaClient.test.js
@@ -126,9 +126,10 @@ describeWithEnvironment('AidaClient', () => {
const provider = new Host.AidaClient.AidaClient();
const results = await getAllResults(provider);
assert.deepStrictEqual(results, [
- { explanation: 'hello ', metadata: { rpcGlobalId: 123 } },
- { explanation: 'hello brave ', metadata: { rpcGlobalId: 123 } },
- { explanation: 'hello brave new world!', metadata: { rpcGlobalId: 123 } },
+ { explanation: 'hello ', metadata: { rpcGlobalId: 123 }, completed: false },
+ { explanation: 'hello brave ', metadata: { rpcGlobalId: 123 }, completed: false },
+ { explanation: 'hello brave new world!', metadata: { rpcGlobalId: 123 }, completed: false },
+ { explanation: 'hello brave new world!', metadata: { rpcGlobalId: 123 }, completed: true },
]);
});
it('handles single square bracket as a chunk', async () => {
@@ -144,7 +145,8 @@ describeWithEnvironment('AidaClient', () => {
const provider = new Host.AidaClient.AidaClient();
const results = await getAllResults(provider);
assert.deepStrictEqual(results, [
- { explanation: 'hello world', metadata: { rpcGlobalId: 123 } },
+ { explanation: 'hello world', metadata: { rpcGlobalId: 123 }, completed: false },
+ { explanation: 'hello world', metadata: { rpcGlobalId: 123 }, completed: true },
]);
});
it('handles chunked response with multiple objects per chunk', async () => {
@@ -178,6 +180,7 @@ describeWithEnvironment('AidaClient', () => {
explanation: 'Friends, Romans, countrymen, lend me your ears;\n' +
'I come to bury Caesar, not to praise him.\n',
metadata: { rpcGlobalId: 123 },
+ completed: false,
},
{
explanation: 'Friends, Romans, countrymen, lend me your ears;\n' +
@@ -186,6 +189,7 @@ describeWithEnvironment('AidaClient', () => {
'The good is oft interred with their bones;\n' +
'So let it be with Caesar. The noble Brutus\n',
metadata: { rpcGlobalId: 123 },
+ completed: false,
},
{
explanation: 'Friends, Romans, countrymen, lend me your ears;\n' +
@@ -195,6 +199,7 @@ describeWithEnvironment('AidaClient', () => {
'So let it be with Caesar. The noble Brutus\n' +
'Hath told you Caesar was ambitious:\n',
metadata: { rpcGlobalId: 123 },
+ completed: false,
},
{
explanation: 'Friends, Romans, countrymen, lend me your ears;\n' +
@@ -206,6 +211,19 @@ describeWithEnvironment('AidaClient', () => {
'If it were so, it was a grievous fault,\n' +
'And grievously hath Caesar answer’d it.\n',
metadata: { rpcGlobalId: 123 },
+ completed: false,
+ },
+ {
+ explanation: 'Friends, Romans, countrymen, lend me your ears;\n' +
+ 'I come to bury Caesar, not to praise him.\n' +
+ 'The evil that men do lives after them;\n' +
+ 'The good is oft interred with their bones;\n' +
+ 'So let it be with Caesar. The noble Brutus\n' +
+ 'Hath told you Caesar was ambitious:\n' +
+ 'If it were so, it was a grievous fault,\n' +
+ 'And grievously hath Caesar answer’d it.\n',
+ metadata: { rpcGlobalId: 123 },
+ completed: true,
},
]);
});
@@ -247,6 +265,22 @@ describeWithEnvironment('AidaClient', () => {
},
],
},
+ completed: false,
+ },
+ {
+ explanation: 'Chunk1\n' +
+ 'Chunk2\n',
+ metadata: {
+ rpcGlobalId: 123,
+ attributionMetadata: [
+ { attributionAction: Host.AidaClient.RecitationAction.BLOCK, citations: [] },
+ {
+ attributionAction: Host.AidaClient.RecitationAction.CITE,
+ citations: [{ startIndex: 0, endIndex: 1, url: 'https://example.com' }],
+ },
+ ],
+ },
+ completed: true,
},
]);
});
@@ -266,7 +300,12 @@ describeWithEnvironment('AidaClient', () => {
});
const provider = new Host.AidaClient.AidaClient();
const results = (await getAllResults(provider)).map(r => r.explanation);
- assert.deepStrictEqual(results, ['hello ', 'hello \n`````\nbrave \n`````\n', 'hello \n`````\nbrave new World()\n`````\n']);
+ assert.deepStrictEqual(results, [
+ 'hello ',
+ 'hello \n`````\nbrave \n`````\n',
+ 'hello \n`````\nbrave new World()\n`````\n',
+ 'hello \n`````\nbrave new World()\n`````\n',
+ ]);
});
it('throws a readable error on 403', async () => {
sinon.stub(Host.InspectorFrontendHost.InspectorFrontendHostInstance, 'doAidaConversation').callsArgWith(2, {
diff --git a/public/core/host/AidaClient.test.js.map b/public/core/host/AidaClient.test.js.map
index 96f7961f3..a2020aee3 100644
--- a/public/core/host/AidaClient.test.js.map
+++ b/public/core/host/AidaClient.test.js.map
@@ -1 +1 @@
-{"version":3,"file":"AidaClient.test.js","sourceRoot":"","sources":["../../../../../../front_end/core/host/AidaClient.test.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2023 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\nimport {describeWithEnvironment, getGetHostConfigStub} from '../../testing/EnvironmentHelpers.js';\n\nimport * as Host from './host.js';\n\nconst TEST_MODEL_ID = 'testModelId';\n\ndescribeWithEnvironment('AidaClient', () => {\n it('adds no model temperature if console insights is not enabled', () => {\n const stub = getGetHostConfigStub({});\n const request = Host.AidaClient.AidaClient.buildConsoleInsightsRequest('foo');\n assert.deepStrictEqual(request, {\n input: 'foo',\n client: 'CHROME_DEVTOOLS',\n client_feature: 1,\n functionality_type: 2,\n });\n stub.restore();\n });\n\n it('adds a model temperature', () => {\n const stub = getGetHostConfigStub({\n devToolsConsoleInsights: {\n enabled: true,\n temperature: 0.5,\n },\n });\n const request = Host.AidaClient.AidaClient.buildConsoleInsightsRequest('foo');\n assert.deepStrictEqual(request, {\n input: 'foo',\n client: 'CHROME_DEVTOOLS',\n options: {\n temperature: 0.5,\n },\n client_feature: 1,\n functionality_type: 2,\n });\n stub.restore();\n });\n\n it('adds a model temperature of 0', () => {\n const stub = getGetHostConfigStub({\n devToolsConsoleInsights: {\n enabled: true,\n temperature: 0,\n },\n });\n const request = Host.AidaClient.AidaClient.buildConsoleInsightsRequest('foo');\n assert.deepStrictEqual(request, {\n input: 'foo',\n client: 'CHROME_DEVTOOLS',\n options: {\n temperature: 0,\n },\n client_feature: 1,\n functionality_type: 2,\n });\n stub.restore();\n });\n\n it('adds a model id and temperature', () => {\n const stub = getGetHostConfigStub({\n devToolsConsoleInsights: {\n enabled: true,\n modelId: TEST_MODEL_ID,\n temperature: 0.5,\n },\n });\n const request = Host.AidaClient.AidaClient.buildConsoleInsightsRequest('foo');\n assert.deepStrictEqual(request, {\n input: 'foo',\n client: 'CHROME_DEVTOOLS',\n options: {\n model_id: TEST_MODEL_ID,\n temperature: 0.5,\n },\n client_feature: 1,\n functionality_type: 2,\n });\n stub.restore();\n });\n\n it('adds metadata to disallow logging', () => {\n const stub = getGetHostConfigStub({\n aidaAvailability: {\n disallowLogging: true,\n },\n devToolsConsoleInsights: {\n enabled: true,\n temperature: 0.5,\n },\n });\n const request = Host.AidaClient.AidaClient.buildConsoleInsightsRequest('foo');\n assert.deepStrictEqual(request, {\n input: 'foo',\n client: 'CHROME_DEVTOOLS',\n metadata: {\n disable_user_content_logging: true,\n },\n options: {\n temperature: 0.5,\n },\n client_feature: 1,\n functionality_type: 2,\n });\n stub.restore();\n });\n\n async function getAllResults(provider: Host.AidaClient.AidaClient): Promise {\n const results = [];\n for await (const result of provider.fetch(Host.AidaClient.AidaClient.buildConsoleInsightsRequest('foo'))) {\n results.push(result);\n }\n return results;\n }\n\n it('handles chunked response', async () => {\n sinon.stub(Host.InspectorFrontendHost.InspectorFrontendHostInstance, 'doAidaConversation')\n .callsFake(async (_, streamId, callback) => {\n const response = JSON.stringify([\n {textChunk: {text: 'hello '}, metadata: {rpcGlobalId: 123}},\n {textChunk: {text: 'brave '}, metadata: {rpcGlobalId: 123}},\n {textChunk: {text: 'new world!'}},\n ]);\n let first = true;\n for (const chunk of response.split(',{')) {\n await new Promise(resolve => setTimeout(resolve, 0));\n Host.ResourceLoader.streamWrite(streamId, first ? chunk : ',{' + chunk);\n first = false;\n }\n callback({statusCode: 200});\n });\n\n const provider = new Host.AidaClient.AidaClient();\n const results = await getAllResults(provider);\n assert.deepStrictEqual(results, [\n {explanation: 'hello ', metadata: {rpcGlobalId: 123}},\n {explanation: 'hello brave ', metadata: {rpcGlobalId: 123}},\n {explanation: 'hello brave new world!', metadata: {rpcGlobalId: 123}},\n ]);\n });\n\n it('handles single square bracket as a chunk', async () => {\n sinon.stub(Host.InspectorFrontendHost.InspectorFrontendHostInstance, 'doAidaConversation')\n .callsFake(async (_, streamId, callback) => {\n const response = ['[', JSON.stringify({textChunk: {text: 'hello world'}, metadata: {rpcGlobalId: 123}}), ']'];\n for (const chunk of response) {\n await new Promise(resolve => setTimeout(resolve, 0));\n Host.ResourceLoader.streamWrite(streamId, chunk);\n }\n callback({statusCode: 200});\n });\n\n const provider = new Host.AidaClient.AidaClient();\n const results = await getAllResults(provider);\n assert.deepStrictEqual(results, [\n {explanation: 'hello world', metadata: {rpcGlobalId: 123}},\n ]);\n });\n\n it('handles chunked response with multiple objects per chunk', async () => {\n sinon.stub(Host.InspectorFrontendHost.InspectorFrontendHostInstance, 'doAidaConversation')\n .callsFake(async (_, streamId, callback) => {\n const response = JSON.stringify([\n {textChunk: {text: 'Friends, Romans, countrymen, lend me your ears;\\n'}, metadata: {rpcGlobalId: 123}},\n {textChunk: {text: 'I come to bury Caesar, not to praise him.\\n'}, metadata: {rpcGlobalId: 123}},\n {textChunk: {text: 'The evil that men do lives after them;\\n'}, metadata: {rpcGlobalId: 123}},\n {textChunk: {text: 'The good is oft interred with their bones;\\n'}, metadata: {rpcGlobalId: 123}},\n {textChunk: {text: 'So let it be with Caesar. The noble Brutus\\n'}, metadata: {rpcGlobalId: 123}},\n {textChunk: {text: 'Hath told you Caesar was ambitious:\\n'}, metadata: {rpcGlobalId: 123}},\n {textChunk: {text: 'If it were so, it was a grievous fault,\\n'}, metadata: {rpcGlobalId: 123}},\n {textChunk: {text: 'And grievously hath Caesar answer’d it.\\n'}, metadata: {rpcGlobalId: 123}},\n ]);\n const chunks = response.split(',{');\n await new Promise(resolve => setTimeout(resolve, 0));\n Host.ResourceLoader.streamWrite(streamId, chunks[0] + ',{' + chunks[1]);\n await new Promise(resolve => setTimeout(resolve, 0));\n Host.ResourceLoader.streamWrite(streamId, ',{' + chunks[2] + ',{' + chunks[3] + ',{' + chunks[4]);\n await new Promise(resolve => setTimeout(resolve, 0));\n Host.ResourceLoader.streamWrite(streamId, ',{' + chunks[5]);\n await new Promise(resolve => setTimeout(resolve, 0));\n Host.ResourceLoader.streamWrite(streamId, ',{' + chunks[6] + ',{' + chunks[7]);\n callback({statusCode: 200});\n });\n\n const provider = new Host.AidaClient.AidaClient();\n const results = await getAllResults(provider);\n assert.deepStrictEqual(results, [\n {\n explanation: 'Friends, Romans, countrymen, lend me your ears;\\n' +\n 'I come to bury Caesar, not to praise him.\\n',\n metadata: {rpcGlobalId: 123},\n },\n {\n explanation: 'Friends, Romans, countrymen, lend me your ears;\\n' +\n 'I come to bury Caesar, not to praise him.\\n' +\n 'The evil that men do lives after them;\\n' +\n 'The good is oft interred with their bones;\\n' +\n 'So let it be with Caesar. The noble Brutus\\n',\n metadata: {rpcGlobalId: 123},\n },\n {\n explanation: 'Friends, Romans, countrymen, lend me your ears;\\n' +\n 'I come to bury Caesar, not to praise him.\\n' +\n 'The evil that men do lives after them;\\n' +\n 'The good is oft interred with their bones;\\n' +\n 'So let it be with Caesar. The noble Brutus\\n' +\n 'Hath told you Caesar was ambitious:\\n',\n metadata: {rpcGlobalId: 123},\n },\n {\n explanation: 'Friends, Romans, countrymen, lend me your ears;\\n' +\n 'I come to bury Caesar, not to praise him.\\n' +\n 'The evil that men do lives after them;\\n' +\n 'The good is oft interred with their bones;\\n' +\n 'So let it be with Caesar. The noble Brutus\\n' +\n 'Hath told you Caesar was ambitious:\\n' +\n 'If it were so, it was a grievous fault,\\n' +\n 'And grievously hath Caesar answer’d it.\\n',\n metadata: {rpcGlobalId: 123},\n },\n ]);\n });\n\n it('handles attributionMetadata', async () => {\n sinon.stub(Host.InspectorFrontendHost.InspectorFrontendHostInstance, 'doAidaConversation')\n .callsFake(async (_, streamId, callback) => {\n const response = JSON.stringify([\n {\n textChunk: {text: 'Chunk1\\n'},\n metadata: {rpcGlobalId: 123, attributionMetadata: {attributionAction: 'BLOCK', citations: []}},\n },\n {\n textChunk: {text: 'Chunk2\\n'},\n metadata: {\n rpcGlobalId: 123,\n attributionMetadata:\n {attributionAction: 'CITE', citations: [{startIndex: 0, endIndex: 1, url: 'https://example.com'}]},\n },\n },\n ]);\n const chunks = response.split(',{');\n await new Promise(resolve => setTimeout(resolve, 0));\n Host.ResourceLoader.streamWrite(streamId, chunks[0] + ',{' + chunks[1]);\n await new Promise(resolve => setTimeout(resolve, 0));\n callback({statusCode: 200});\n });\n\n const provider = new Host.AidaClient.AidaClient();\n const results = await getAllResults(provider);\n assert.deepStrictEqual(results, [\n {\n explanation: 'Chunk1\\n' +\n 'Chunk2\\n',\n metadata: {\n rpcGlobalId: 123,\n attributionMetadata: [\n {attributionAction: Host.AidaClient.RecitationAction.BLOCK, citations: []},\n {\n attributionAction: Host.AidaClient.RecitationAction.CITE,\n citations: [{startIndex: 0, endIndex: 1, url: 'https://example.com'}],\n },\n ],\n },\n },\n ]);\n });\n\n it('handles subsequent code chunks', async () => {\n sinon.stub(Host.InspectorFrontendHost.InspectorFrontendHostInstance, 'doAidaConversation')\n .callsFake(async (_, streamId, callback) => {\n const response = JSON.stringify([\n {textChunk: {text: 'hello '}},\n {codeChunk: {code: 'brave '}},\n {codeChunk: {code: 'new World()'}},\n ]);\n for (const chunk of response.split(',')) {\n await new Promise(resolve => setTimeout(resolve, 0));\n Host.ResourceLoader.streamWrite(streamId, chunk);\n }\n callback({statusCode: 200});\n });\n\n const provider = new Host.AidaClient.AidaClient();\n const results = (await getAllResults(provider)).map(r => r.explanation);\n assert.deepStrictEqual(\n results, ['hello ', 'hello \\n`````\\nbrave \\n`````\\n', 'hello \\n`````\\nbrave new World()\\n`````\\n']);\n });\n\n it('throws a readable error on 403', async () => {\n sinon.stub(Host.InspectorFrontendHost.InspectorFrontendHostInstance, 'doAidaConversation').callsArgWith(2, {\n statusCode: 403,\n });\n const provider = new Host.AidaClient.AidaClient();\n try {\n await getAllResults(provider);\n expect.fail('provider.fetch did not throw');\n } catch (err) {\n expect(err.message).equals('Server responded: permission denied');\n }\n });\n\n it('throws an error for other codes', async () => {\n sinon.stub(Host.InspectorFrontendHost.InspectorFrontendHostInstance, 'doAidaConversation').callsArgWith(2, {\n statusCode: 418,\n });\n const provider = new Host.AidaClient.AidaClient();\n try {\n await getAllResults(provider);\n expect.fail('provider.fetch did not throw');\n } catch (err) {\n expect(err.message).equals('Request failed: {\"statusCode\":418}');\n }\n });\n\n it('throws an error with all details for other failures', async () => {\n sinon.stub(Host.InspectorFrontendHost.InspectorFrontendHostInstance, 'doAidaConversation').callsArgWith(2, {\n error: 'Cannot get OAuth credentials',\n detail: '{\\'@type\\': \\'type.googleapis.com/google.rpc.DebugInfo\\', \\'detail\\': \\'DETAILS\\'}',\n });\n const provider = new Host.AidaClient.AidaClient();\n try {\n await getAllResults(provider);\n expect.fail('provider.fetch did not throw');\n } catch (err) {\n expect(err.message)\n .equals(\n 'Cannot send request: Cannot get OAuth credentials {\\'@type\\': \\'type.googleapis.com/google.rpc.DebugInfo\\', \\'detail\\': \\'DETAILS\\'}');\n }\n });\n\n describe('getAidaClientAvailability', () => {\n function mockGetSyncInformation(information: Host.InspectorFrontendHostAPI.SyncInformation): void {\n sinon.stub(Host.InspectorFrontendHost.InspectorFrontendHostInstance, 'getSyncInformation').callsFake(cb => {\n cb(information);\n });\n }\n\n beforeEach(() => {\n sinon.restore();\n });\n\n it('should return NO_INTERNET when navigator is not online', async () => {\n const navigatorDescriptor = Object.getOwnPropertyDescriptor(globalThis, 'navigator')!;\n Object.defineProperty(globalThis, 'navigator', {\n get() {\n return {onLine: false};\n },\n });\n\n try {\n const result = await Host.AidaClient.AidaClient.checkAccessPreconditions();\n assert.strictEqual(result, Host.AidaClient.AidaAccessPreconditions.NO_INTERNET);\n } finally {\n Object.defineProperty(globalThis, 'navigator', navigatorDescriptor);\n }\n });\n\n it('should return NO_ACCOUNT_EMAIL when the syncInfo doesn\\'t contain accountEmail', async () => {\n mockGetSyncInformation({accountEmail: undefined, isSyncActive: true});\n\n const result = await Host.AidaClient.AidaClient.checkAccessPreconditions();\n\n assert.strictEqual(result, Host.AidaClient.AidaAccessPreconditions.NO_ACCOUNT_EMAIL);\n });\n\n it('should return NO_ACTIVE_SYNC when the syncInfo.isSyncActive is not true', async () => {\n mockGetSyncInformation({accountEmail: 'some-email', isSyncActive: false});\n\n const result = await Host.AidaClient.AidaClient.checkAccessPreconditions();\n\n assert.strictEqual(result, Host.AidaClient.AidaAccessPreconditions.NO_ACTIVE_SYNC);\n });\n\n it('should return AVAILABLE when navigator is online, accountEmail exists and isSyncActive is true', async () => {\n mockGetSyncInformation({accountEmail: 'some-email', isSyncActive: true});\n\n const result = await Host.AidaClient.AidaClient.checkAccessPreconditions();\n\n assert.strictEqual(result, Host.AidaClient.AidaAccessPreconditions.AVAILABLE);\n });\n });\n\n describe('registerClientEvent', () => {\n it('should populate the default value for Aida Client event', async () => {\n const stub = sinon.stub(Host.InspectorFrontendHost.InspectorFrontendHostInstance, 'registerAidaClientEvent');\n const RPC_ID = 0;\n\n const provider = new Host.AidaClient.AidaClient();\n void provider.registerClientEvent({\n corresponding_aida_rpc_global_id: RPC_ID,\n disable_user_content_logging: false,\n do_conversation_client_event: {user_feedback: {sentiment: Host.AidaClient.Rating.POSITIVE}},\n });\n const arg = JSON.parse(stub.getCalls()[0].args[0]);\n\n sinon.assert.match(arg, sinon.match({\n client: Host.AidaClient.CLIENT_NAME,\n event_time: sinon.match.string,\n corresponding_aida_rpc_global_id: RPC_ID,\n do_conversation_client_event: {\n user_feedback: {\n sentiment: 'POSITIVE',\n },\n },\n }));\n });\n });\n});\n"]}
\ No newline at end of file
+{"version":3,"file":"AidaClient.test.js","sourceRoot":"","sources":["../../../../../../front_end/core/host/AidaClient.test.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2023 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\nimport {describeWithEnvironment, getGetHostConfigStub} from '../../testing/EnvironmentHelpers.js';\n\nimport * as Host from './host.js';\n\nconst TEST_MODEL_ID = 'testModelId';\n\ndescribeWithEnvironment('AidaClient', () => {\n it('adds no model temperature if console insights is not enabled', () => {\n const stub = getGetHostConfigStub({});\n const request = Host.AidaClient.AidaClient.buildConsoleInsightsRequest('foo');\n assert.deepStrictEqual(request, {\n input: 'foo',\n client: 'CHROME_DEVTOOLS',\n client_feature: 1,\n functionality_type: 2,\n });\n stub.restore();\n });\n\n it('adds a model temperature', () => {\n const stub = getGetHostConfigStub({\n devToolsConsoleInsights: {\n enabled: true,\n temperature: 0.5,\n },\n });\n const request = Host.AidaClient.AidaClient.buildConsoleInsightsRequest('foo');\n assert.deepStrictEqual(request, {\n input: 'foo',\n client: 'CHROME_DEVTOOLS',\n options: {\n temperature: 0.5,\n },\n client_feature: 1,\n functionality_type: 2,\n });\n stub.restore();\n });\n\n it('adds a model temperature of 0', () => {\n const stub = getGetHostConfigStub({\n devToolsConsoleInsights: {\n enabled: true,\n temperature: 0,\n },\n });\n const request = Host.AidaClient.AidaClient.buildConsoleInsightsRequest('foo');\n assert.deepStrictEqual(request, {\n input: 'foo',\n client: 'CHROME_DEVTOOLS',\n options: {\n temperature: 0,\n },\n client_feature: 1,\n functionality_type: 2,\n });\n stub.restore();\n });\n\n it('adds a model id and temperature', () => {\n const stub = getGetHostConfigStub({\n devToolsConsoleInsights: {\n enabled: true,\n modelId: TEST_MODEL_ID,\n temperature: 0.5,\n },\n });\n const request = Host.AidaClient.AidaClient.buildConsoleInsightsRequest('foo');\n assert.deepStrictEqual(request, {\n input: 'foo',\n client: 'CHROME_DEVTOOLS',\n options: {\n model_id: TEST_MODEL_ID,\n temperature: 0.5,\n },\n client_feature: 1,\n functionality_type: 2,\n });\n stub.restore();\n });\n\n it('adds metadata to disallow logging', () => {\n const stub = getGetHostConfigStub({\n aidaAvailability: {\n disallowLogging: true,\n },\n devToolsConsoleInsights: {\n enabled: true,\n temperature: 0.5,\n },\n });\n const request = Host.AidaClient.AidaClient.buildConsoleInsightsRequest('foo');\n assert.deepStrictEqual(request, {\n input: 'foo',\n client: 'CHROME_DEVTOOLS',\n metadata: {\n disable_user_content_logging: true,\n },\n options: {\n temperature: 0.5,\n },\n client_feature: 1,\n functionality_type: 2,\n });\n stub.restore();\n });\n\n async function getAllResults(provider: Host.AidaClient.AidaClient): Promise {\n const results = [];\n for await (const result of provider.fetch(Host.AidaClient.AidaClient.buildConsoleInsightsRequest('foo'))) {\n results.push(result);\n }\n return results;\n }\n\n it('handles chunked response', async () => {\n sinon.stub(Host.InspectorFrontendHost.InspectorFrontendHostInstance, 'doAidaConversation')\n .callsFake(async (_, streamId, callback) => {\n const response = JSON.stringify([\n {textChunk: {text: 'hello '}, metadata: {rpcGlobalId: 123}},\n {textChunk: {text: 'brave '}, metadata: {rpcGlobalId: 123}},\n {textChunk: {text: 'new world!'}},\n ]);\n let first = true;\n for (const chunk of response.split(',{')) {\n await new Promise(resolve => setTimeout(resolve, 0));\n Host.ResourceLoader.streamWrite(streamId, first ? chunk : ',{' + chunk);\n first = false;\n }\n callback({statusCode: 200});\n });\n\n const provider = new Host.AidaClient.AidaClient();\n const results = await getAllResults(provider);\n assert.deepStrictEqual(results, [\n {explanation: 'hello ', metadata: {rpcGlobalId: 123}, completed: false},\n {explanation: 'hello brave ', metadata: {rpcGlobalId: 123}, completed: false},\n {explanation: 'hello brave new world!', metadata: {rpcGlobalId: 123}, completed: false},\n {explanation: 'hello brave new world!', metadata: {rpcGlobalId: 123}, completed: true},\n ]);\n });\n\n it('handles single square bracket as a chunk', async () => {\n sinon.stub(Host.InspectorFrontendHost.InspectorFrontendHostInstance, 'doAidaConversation')\n .callsFake(async (_, streamId, callback) => {\n const response = ['[', JSON.stringify({textChunk: {text: 'hello world'}, metadata: {rpcGlobalId: 123}}), ']'];\n for (const chunk of response) {\n await new Promise(resolve => setTimeout(resolve, 0));\n Host.ResourceLoader.streamWrite(streamId, chunk);\n }\n callback({statusCode: 200});\n });\n\n const provider = new Host.AidaClient.AidaClient();\n const results = await getAllResults(provider);\n assert.deepStrictEqual(results, [\n {explanation: 'hello world', metadata: {rpcGlobalId: 123}, completed: false},\n {explanation: 'hello world', metadata: {rpcGlobalId: 123}, completed: true},\n ]);\n });\n\n it('handles chunked response with multiple objects per chunk', async () => {\n sinon.stub(Host.InspectorFrontendHost.InspectorFrontendHostInstance, 'doAidaConversation')\n .callsFake(async (_, streamId, callback) => {\n const response = JSON.stringify([\n {textChunk: {text: 'Friends, Romans, countrymen, lend me your ears;\\n'}, metadata: {rpcGlobalId: 123}},\n {textChunk: {text: 'I come to bury Caesar, not to praise him.\\n'}, metadata: {rpcGlobalId: 123}},\n {textChunk: {text: 'The evil that men do lives after them;\\n'}, metadata: {rpcGlobalId: 123}},\n {textChunk: {text: 'The good is oft interred with their bones;\\n'}, metadata: {rpcGlobalId: 123}},\n {textChunk: {text: 'So let it be with Caesar. The noble Brutus\\n'}, metadata: {rpcGlobalId: 123}},\n {textChunk: {text: 'Hath told you Caesar was ambitious:\\n'}, metadata: {rpcGlobalId: 123}},\n {textChunk: {text: 'If it were so, it was a grievous fault,\\n'}, metadata: {rpcGlobalId: 123}},\n {textChunk: {text: 'And grievously hath Caesar answer’d it.\\n'}, metadata: {rpcGlobalId: 123}},\n ]);\n const chunks = response.split(',{');\n await new Promise(resolve => setTimeout(resolve, 0));\n Host.ResourceLoader.streamWrite(streamId, chunks[0] + ',{' + chunks[1]);\n await new Promise(resolve => setTimeout(resolve, 0));\n Host.ResourceLoader.streamWrite(streamId, ',{' + chunks[2] + ',{' + chunks[3] + ',{' + chunks[4]);\n await new Promise(resolve => setTimeout(resolve, 0));\n Host.ResourceLoader.streamWrite(streamId, ',{' + chunks[5]);\n await new Promise(resolve => setTimeout(resolve, 0));\n Host.ResourceLoader.streamWrite(streamId, ',{' + chunks[6] + ',{' + chunks[7]);\n callback({statusCode: 200});\n });\n\n const provider = new Host.AidaClient.AidaClient();\n const results = await getAllResults(provider);\n assert.deepStrictEqual(results, [\n {\n explanation: 'Friends, Romans, countrymen, lend me your ears;\\n' +\n 'I come to bury Caesar, not to praise him.\\n',\n metadata: {rpcGlobalId: 123},\n completed: false,\n },\n {\n explanation: 'Friends, Romans, countrymen, lend me your ears;\\n' +\n 'I come to bury Caesar, not to praise him.\\n' +\n 'The evil that men do lives after them;\\n' +\n 'The good is oft interred with their bones;\\n' +\n 'So let it be with Caesar. The noble Brutus\\n',\n metadata: {rpcGlobalId: 123},\n completed: false,\n },\n {\n explanation: 'Friends, Romans, countrymen, lend me your ears;\\n' +\n 'I come to bury Caesar, not to praise him.\\n' +\n 'The evil that men do lives after them;\\n' +\n 'The good is oft interred with their bones;\\n' +\n 'So let it be with Caesar. The noble Brutus\\n' +\n 'Hath told you Caesar was ambitious:\\n',\n metadata: {rpcGlobalId: 123},\n completed: false,\n },\n {\n explanation: 'Friends, Romans, countrymen, lend me your ears;\\n' +\n 'I come to bury Caesar, not to praise him.\\n' +\n 'The evil that men do lives after them;\\n' +\n 'The good is oft interred with their bones;\\n' +\n 'So let it be with Caesar. The noble Brutus\\n' +\n 'Hath told you Caesar was ambitious:\\n' +\n 'If it were so, it was a grievous fault,\\n' +\n 'And grievously hath Caesar answer’d it.\\n',\n metadata: {rpcGlobalId: 123},\n completed: false,\n },\n {\n explanation: 'Friends, Romans, countrymen, lend me your ears;\\n' +\n 'I come to bury Caesar, not to praise him.\\n' +\n 'The evil that men do lives after them;\\n' +\n 'The good is oft interred with their bones;\\n' +\n 'So let it be with Caesar. The noble Brutus\\n' +\n 'Hath told you Caesar was ambitious:\\n' +\n 'If it were so, it was a grievous fault,\\n' +\n 'And grievously hath Caesar answer’d it.\\n',\n metadata: {rpcGlobalId: 123},\n completed: true,\n },\n ]);\n });\n\n it('handles attributionMetadata', async () => {\n sinon.stub(Host.InspectorFrontendHost.InspectorFrontendHostInstance, 'doAidaConversation')\n .callsFake(async (_, streamId, callback) => {\n const response = JSON.stringify([\n {\n textChunk: {text: 'Chunk1\\n'},\n metadata: {rpcGlobalId: 123, attributionMetadata: {attributionAction: 'BLOCK', citations: []}},\n },\n {\n textChunk: {text: 'Chunk2\\n'},\n metadata: {\n rpcGlobalId: 123,\n attributionMetadata:\n {attributionAction: 'CITE', citations: [{startIndex: 0, endIndex: 1, url: 'https://example.com'}]},\n },\n },\n ]);\n const chunks = response.split(',{');\n await new Promise(resolve => setTimeout(resolve, 0));\n Host.ResourceLoader.streamWrite(streamId, chunks[0] + ',{' + chunks[1]);\n await new Promise(resolve => setTimeout(resolve, 0));\n callback({statusCode: 200});\n });\n\n const provider = new Host.AidaClient.AidaClient();\n const results = await getAllResults(provider);\n assert.deepStrictEqual(results, [\n {\n explanation: 'Chunk1\\n' +\n 'Chunk2\\n',\n metadata: {\n rpcGlobalId: 123,\n attributionMetadata: [\n {attributionAction: Host.AidaClient.RecitationAction.BLOCK, citations: []},\n {\n attributionAction: Host.AidaClient.RecitationAction.CITE,\n citations: [{startIndex: 0, endIndex: 1, url: 'https://example.com'}],\n },\n ],\n },\n completed: false,\n },\n {\n explanation: 'Chunk1\\n' +\n 'Chunk2\\n',\n metadata: {\n rpcGlobalId: 123,\n attributionMetadata: [\n {attributionAction: Host.AidaClient.RecitationAction.BLOCK, citations: []},\n {\n attributionAction: Host.AidaClient.RecitationAction.CITE,\n citations: [{startIndex: 0, endIndex: 1, url: 'https://example.com'}],\n },\n ],\n },\n completed: true,\n },\n ]);\n });\n\n it('handles subsequent code chunks', async () => {\n sinon.stub(Host.InspectorFrontendHost.InspectorFrontendHostInstance, 'doAidaConversation')\n .callsFake(async (_, streamId, callback) => {\n const response = JSON.stringify([\n {textChunk: {text: 'hello '}},\n {codeChunk: {code: 'brave '}},\n {codeChunk: {code: 'new World()'}},\n ]);\n for (const chunk of response.split(',')) {\n await new Promise(resolve => setTimeout(resolve, 0));\n Host.ResourceLoader.streamWrite(streamId, chunk);\n }\n callback({statusCode: 200});\n });\n\n const provider = new Host.AidaClient.AidaClient();\n const results = (await getAllResults(provider)).map(r => r.explanation);\n assert.deepStrictEqual(results, [\n 'hello ',\n 'hello \\n`````\\nbrave \\n`````\\n',\n 'hello \\n`````\\nbrave new World()\\n`````\\n',\n 'hello \\n`````\\nbrave new World()\\n`````\\n',\n ]);\n });\n\n it('throws a readable error on 403', async () => {\n sinon.stub(Host.InspectorFrontendHost.InspectorFrontendHostInstance, 'doAidaConversation').callsArgWith(2, {\n statusCode: 403,\n });\n const provider = new Host.AidaClient.AidaClient();\n try {\n await getAllResults(provider);\n expect.fail('provider.fetch did not throw');\n } catch (err) {\n expect(err.message).equals('Server responded: permission denied');\n }\n });\n\n it('throws an error for other codes', async () => {\n sinon.stub(Host.InspectorFrontendHost.InspectorFrontendHostInstance, 'doAidaConversation').callsArgWith(2, {\n statusCode: 418,\n });\n const provider = new Host.AidaClient.AidaClient();\n try {\n await getAllResults(provider);\n expect.fail('provider.fetch did not throw');\n } catch (err) {\n expect(err.message).equals('Request failed: {\"statusCode\":418}');\n }\n });\n\n it('throws an error with all details for other failures', async () => {\n sinon.stub(Host.InspectorFrontendHost.InspectorFrontendHostInstance, 'doAidaConversation').callsArgWith(2, {\n error: 'Cannot get OAuth credentials',\n detail: '{\\'@type\\': \\'type.googleapis.com/google.rpc.DebugInfo\\', \\'detail\\': \\'DETAILS\\'}',\n });\n const provider = new Host.AidaClient.AidaClient();\n try {\n await getAllResults(provider);\n expect.fail('provider.fetch did not throw');\n } catch (err) {\n expect(err.message)\n .equals(\n 'Cannot send request: Cannot get OAuth credentials {\\'@type\\': \\'type.googleapis.com/google.rpc.DebugInfo\\', \\'detail\\': \\'DETAILS\\'}');\n }\n });\n\n describe('getAidaClientAvailability', () => {\n function mockGetSyncInformation(information: Host.InspectorFrontendHostAPI.SyncInformation): void {\n sinon.stub(Host.InspectorFrontendHost.InspectorFrontendHostInstance, 'getSyncInformation').callsFake(cb => {\n cb(information);\n });\n }\n\n beforeEach(() => {\n sinon.restore();\n });\n\n it('should return NO_INTERNET when navigator is not online', async () => {\n const navigatorDescriptor = Object.getOwnPropertyDescriptor(globalThis, 'navigator')!;\n Object.defineProperty(globalThis, 'navigator', {\n get() {\n return {onLine: false};\n },\n });\n\n try {\n const result = await Host.AidaClient.AidaClient.checkAccessPreconditions();\n assert.strictEqual(result, Host.AidaClient.AidaAccessPreconditions.NO_INTERNET);\n } finally {\n Object.defineProperty(globalThis, 'navigator', navigatorDescriptor);\n }\n });\n\n it('should return NO_ACCOUNT_EMAIL when the syncInfo doesn\\'t contain accountEmail', async () => {\n mockGetSyncInformation({accountEmail: undefined, isSyncActive: true});\n\n const result = await Host.AidaClient.AidaClient.checkAccessPreconditions();\n\n assert.strictEqual(result, Host.AidaClient.AidaAccessPreconditions.NO_ACCOUNT_EMAIL);\n });\n\n it('should return NO_ACTIVE_SYNC when the syncInfo.isSyncActive is not true', async () => {\n mockGetSyncInformation({accountEmail: 'some-email', isSyncActive: false});\n\n const result = await Host.AidaClient.AidaClient.checkAccessPreconditions();\n\n assert.strictEqual(result, Host.AidaClient.AidaAccessPreconditions.NO_ACTIVE_SYNC);\n });\n\n it('should return AVAILABLE when navigator is online, accountEmail exists and isSyncActive is true', async () => {\n mockGetSyncInformation({accountEmail: 'some-email', isSyncActive: true});\n\n const result = await Host.AidaClient.AidaClient.checkAccessPreconditions();\n\n assert.strictEqual(result, Host.AidaClient.AidaAccessPreconditions.AVAILABLE);\n });\n });\n\n describe('registerClientEvent', () => {\n it('should populate the default value for Aida Client event', async () => {\n const stub = sinon.stub(Host.InspectorFrontendHost.InspectorFrontendHostInstance, 'registerAidaClientEvent');\n const RPC_ID = 0;\n\n const provider = new Host.AidaClient.AidaClient();\n void provider.registerClientEvent({\n corresponding_aida_rpc_global_id: RPC_ID,\n disable_user_content_logging: false,\n do_conversation_client_event: {user_feedback: {sentiment: Host.AidaClient.Rating.POSITIVE}},\n });\n const arg = JSON.parse(stub.getCalls()[0].args[0]);\n\n sinon.assert.match(arg, sinon.match({\n client: Host.AidaClient.CLIENT_NAME,\n event_time: sinon.match.string,\n corresponding_aida_rpc_global_id: RPC_ID,\n do_conversation_client_event: {\n user_feedback: {\n sentiment: 'POSITIVE',\n },\n },\n }));\n });\n });\n});\n"]}
\ No newline at end of file
diff --git a/public/core/host/InspectorFrontendHost.js b/public/core/host/InspectorFrontendHost.js
index 3b83cc34e..36754e574 100644
--- a/public/core/host/InspectorFrontendHost.js
+++ b/public/core/host/InspectorFrontendHost.js
@@ -331,6 +331,9 @@ export class InspectorFrontendHostStub {
enabled: true,
testing: false,
},
+ devToolsPrivacyUI: {
+ enabled: false,
+ },
isOffTheRecord: false,
};
if ('hostConfigForTesting' in globalThis) {
diff --git a/public/core/host/InspectorFrontendHost.js.map b/public/core/host/InspectorFrontendHost.js.map
index be0b24061..cfdb1b669 100644
--- a/public/core/host/InspectorFrontendHost.js.map
+++ b/public/core/host/InspectorFrontendHost.js.map
@@ -1 +1 @@
-{"version":3,"file":"InspectorFrontendHost.js","sourceRoot":"","sources":["../../../../../../front_end/core/host/InspectorFrontendHost.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright (C) 2009 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n * * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n// TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration)\n/* eslint-disable @typescript-eslint/no-unused-vars */\n\nimport * as Common from '../common/common.js';\nimport * as i18n from '../i18n/i18n.js';\nimport * as Platform from '../platform/platform.js';\nimport * as Root from '../root/root.js';\n\nimport {\n type AidaClientResult,\n type CanShowSurveyResult,\n type ChangeEvent,\n type ClickEvent,\n type ContextMenuDescriptor,\n type DoAidaConversationResult,\n type DragEvent,\n type EnumeratedHistogram,\n EventDescriptors,\n Events,\n type EventTypes,\n type ExtensionDescriptor,\n type HoverEvent,\n type ImpressionEvent,\n type InspectorFrontendHostAPI,\n type KeyDownEvent,\n type LoadNetworkResourceResult,\n type ResizeEvent,\n type ShowSurveyResult,\n type SyncInformation,\n} from './InspectorFrontendHostAPI.js';\nimport {streamWrite as resourceLoaderStreamWrite} from './ResourceLoader.js';\n\ninterface DecompressionStream extends GenericTransformStream {\n readonly format: string;\n}\ndeclare const DecompressionStream: {\n prototype: DecompressionStream,\n new (format: string): DecompressionStream,\n};\n\nconst UIStrings = {\n /**\n *@description Document title in Inspector Frontend Host of the DevTools window\n *@example {example.com} PH1\n */\n devtoolsS: 'DevTools - {PH1}',\n};\nconst str_ = i18n.i18n.registerUIStrings('core/host/InspectorFrontendHost.ts', UIStrings);\nconst i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);\n\nconst MAX_RECORDED_HISTOGRAMS_SIZE = 100;\nconst OVERRIDES_FILE_SYSTEM_PATH = '/overrides' as Platform.DevToolsPath.RawPathString;\n\n/**\n * The InspectorFrontendHostStub is a stub interface used the frontend is loaded like a webpage. Examples:\n * - devtools://devtools/bundled/devtools_app.html\n * - https://chrome-devtools-frontend.appspot.com/serve_rev/@030cc140435b0152645522b9864b75cac6c0a854/worker_app.html\n * - http://localhost:9222/devtools/inspector.html?ws=localhost:9222/devtools/page/xTARGET_IDx\n *\n * When the frontend runs within the native embedder, then the InspectorFrontendHostAPI methods are provided\n * by devtools_compatibility.js. Those leverage `DevToolsAPI.sendMessageToEmbedder()` which match up with\n * the embedder API defined here: https://source.chromium.org/search?q=f:devtools%20f:dispatcher%20f:cc%20symbol:CreateForDevToolsFrontend&sq=&ss=chromium%2Fchromium%2Fsrc\n * The native implementations live in devtools_ui_bindings.cc: https://source.chromium.org/chromium/chromium/src/+/main:chrome/browser/devtools/devtools_ui_bindings.cc\n */\nexport class InspectorFrontendHostStub implements InspectorFrontendHostAPI {\n readonly #urlsBeingSaved: Map;\n events!: Common.EventTarget.EventTarget;\n #fileSystem: FileSystem|null = null;\n\n recordedCountHistograms:\n {histogramName: string, sample: number, min: number, exclusiveMax: number, bucketSize: number}[] = [];\n recordedEnumeratedHistograms: {actionName: EnumeratedHistogram, actionCode: number}[] = [];\n recordedPerformanceHistograms: {histogramName: string, duration: number}[] = [];\n\n constructor() {\n this.#urlsBeingSaved = new Map();\n\n // Guard against errors should this file ever be imported at the top level\n // within a worker - in which case this constructor is run. If there's no\n // document, we can early exit.\n if (typeof document === 'undefined') {\n return;\n }\n\n function stopEventPropagation(this: InspectorFrontendHostAPI, event: KeyboardEvent): void {\n // Let browser handle Ctrl+/Ctrl- shortcuts in hosted mode.\n const zoomModifier = this.platform() === 'mac' ? event.metaKey : event.ctrlKey;\n if (zoomModifier && (event.key === '+' || event.key === '-')) {\n event.stopPropagation();\n }\n }\n\n document.addEventListener('keydown', event => {\n stopEventPropagation.call(this, (event as KeyboardEvent));\n }, true);\n }\n\n platform(): string {\n const userAgent = navigator.userAgent;\n if (userAgent.includes('Windows NT')) {\n return 'windows';\n }\n if (userAgent.includes('Mac OS X')) {\n return 'mac';\n }\n return 'linux';\n }\n\n loadCompleted(): void {\n }\n\n bringToFront(): void {\n }\n\n closeWindow(): void {\n }\n\n setIsDocked(isDocked: boolean, callback: () => void): void {\n window.setTimeout(callback, 0);\n }\n\n showSurvey(trigger: string, callback: (arg0: ShowSurveyResult) => void): void {\n window.setTimeout(() => callback({surveyShown: false}), 0);\n }\n\n canShowSurvey(trigger: string, callback: (arg0: CanShowSurveyResult) => void): void {\n window.setTimeout(() => callback({canShowSurvey: false}), 0);\n }\n\n /**\n * Requests inspected page to be placed atop of the inspector frontend with specified bounds.\n */\n setInspectedPageBounds(bounds: {\n x: number,\n y: number,\n width: number,\n height: number,\n }): void {\n }\n\n inspectElementCompleted(): void {\n }\n\n setInjectedScriptForOrigin(origin: string, script: string): void {\n }\n\n inspectedURLChanged(url: Platform.DevToolsPath.UrlString): void {\n document.title = i18nString(UIStrings.devtoolsS, {PH1: url.replace(/^https?:\\/\\//, '')});\n }\n\n copyText(text: string|null|undefined): void {\n if (text === undefined || text === null) {\n return;\n }\n void navigator.clipboard.writeText(text);\n }\n\n openInNewTab(url: Platform.DevToolsPath.UrlString): void {\n window.open(url, '_blank');\n }\n\n openSearchResultsInNewTab(query: string): void {\n Common.Console.Console.instance().error(\n 'Search is not enabled in hosted mode. Please inspect using chrome://inspect');\n }\n\n showItemInFolder(fileSystemPath: Platform.DevToolsPath.RawPathString): void {\n Common.Console.Console.instance().error(\n 'Show item in folder is not enabled in hosted mode. Please inspect using chrome://inspect');\n }\n\n save(\n url: Platform.DevToolsPath.RawPathString|Platform.DevToolsPath.UrlString, content: string, forceSaveAs: boolean,\n isBase64: boolean): void {\n let buffer = this.#urlsBeingSaved.get(url);\n if (!buffer) {\n buffer = [];\n this.#urlsBeingSaved.set(url, buffer);\n }\n buffer.push(content);\n this.events.dispatchEventToListeners(Events.SavedURL, {url, fileSystemPath: url});\n }\n\n append(url: Platform.DevToolsPath.RawPathString|Platform.DevToolsPath.UrlString, content: string): void {\n const buffer = this.#urlsBeingSaved.get(url);\n if (buffer) {\n buffer.push(content);\n this.events.dispatchEventToListeners(Events.AppendedToURL, url);\n }\n }\n\n close(url: Platform.DevToolsPath.RawPathString|Platform.DevToolsPath.UrlString): void {\n const buffer = this.#urlsBeingSaved.get(url) || [];\n this.#urlsBeingSaved.delete(url);\n let fileName = '';\n\n if (url) {\n try {\n const trimmed = Platform.StringUtilities.trimURL(url);\n fileName = Platform.StringUtilities.removeURLFragment(trimmed);\n } catch (error) {\n // If url is not a valid URL, it is probably a filename.\n fileName = url;\n }\n }\n\n const link = document.createElement('a');\n link.download = fileName;\n const blob = new Blob([buffer.join('')], {type: 'text/plain'});\n const blobUrl = URL.createObjectURL(blob);\n link.href = blobUrl;\n link.click();\n URL.revokeObjectURL(blobUrl);\n }\n\n sendMessageToBackend(message: string): void {\n }\n\n recordCountHistogram(histogramName: string, sample: number, min: number, exclusiveMax: number, bucketSize: number):\n void {\n if (this.recordedCountHistograms.length >= MAX_RECORDED_HISTOGRAMS_SIZE) {\n this.recordedCountHistograms.shift();\n }\n this.recordedCountHistograms.push({histogramName, sample, min, exclusiveMax, bucketSize});\n }\n\n recordEnumeratedHistogram(actionName: EnumeratedHistogram, actionCode: number, bucketSize: number): void {\n if (this.recordedEnumeratedHistograms.length >= MAX_RECORDED_HISTOGRAMS_SIZE) {\n this.recordedEnumeratedHistograms.shift();\n }\n this.recordedEnumeratedHistograms.push({actionName, actionCode});\n }\n\n recordPerformanceHistogram(histogramName: string, duration: number): void {\n if (this.recordedPerformanceHistograms.length >= MAX_RECORDED_HISTOGRAMS_SIZE) {\n this.recordedPerformanceHistograms.shift();\n }\n this.recordedPerformanceHistograms.push({histogramName, duration});\n }\n\n recordUserMetricsAction(umaName: string): void {\n }\n\n requestFileSystems(): void {\n this.events.dispatchEventToListeners(Events.FileSystemsLoaded, []);\n }\n\n addFileSystem(type?: string): void {\n const onFileSystem = (fs: FileSystem): void => {\n this.#fileSystem = fs;\n const fileSystem = {\n fileSystemName: 'sandboxedRequestedFileSystem',\n fileSystemPath: OVERRIDES_FILE_SYSTEM_PATH,\n rootURL: 'filesystem:devtools://devtools/isolated/',\n type: 'overrides',\n };\n this.events.dispatchEventToListeners(Events.FileSystemAdded, {fileSystem});\n };\n window.webkitRequestFileSystem(window.TEMPORARY, 1024 * 1024, onFileSystem);\n }\n\n removeFileSystem(fileSystemPath: Platform.DevToolsPath.RawPathString): void {\n const removalCallback = (entries: Entry[]): void => {\n entries.forEach(entry => {\n if (entry.isDirectory) {\n (entry as DirectoryEntry).removeRecursively(() => {});\n } else if (entry.isFile) {\n entry.remove(() => {});\n }\n });\n };\n\n if (this.#fileSystem) {\n this.#fileSystem.root.createReader().readEntries(removalCallback);\n }\n\n this.#fileSystem = null;\n this.events.dispatchEventToListeners(Events.FileSystemRemoved, OVERRIDES_FILE_SYSTEM_PATH);\n }\n\n isolatedFileSystem(fileSystemId: string, registeredName: string): FileSystem|null {\n return this.#fileSystem;\n }\n\n loadNetworkResource(\n url: string, headers: string, streamId: number, callback: (arg0: LoadNetworkResourceResult) => void): void {\n // Read the first 3 bytes looking for the gzip signature in the file header\n function isGzip(ab: ArrayBuffer): boolean {\n const buf = new Uint8Array(ab);\n if (!buf || buf.length < 3) {\n return false;\n }\n\n // https://www.rfc-editor.org/rfc/rfc1952#page-6\n return buf[0] === 0x1F && buf[1] === 0x8B && buf[2] === 0x08;\n }\n fetch(url)\n .then(async result => {\n const resultArrayBuf = await result.arrayBuffer();\n let decoded: ReadableStream|ArrayBuffer = resultArrayBuf;\n if (isGzip(resultArrayBuf)) {\n const ds = new DecompressionStream('gzip');\n const writer = ds.writable.getWriter();\n void writer.write(resultArrayBuf);\n void writer.close();\n decoded = ds.readable;\n }\n const text = await new Response(decoded).text();\n return text;\n })\n .then(function(text) {\n resourceLoaderStreamWrite(streamId, text);\n callback({\n statusCode: 200,\n headers: undefined,\n messageOverride: undefined,\n netError: undefined,\n netErrorName: undefined,\n urlValid: undefined,\n });\n })\n .catch(function() {\n callback({\n statusCode: 404,\n headers: undefined,\n messageOverride: undefined,\n netError: undefined,\n netErrorName: undefined,\n urlValid: undefined,\n });\n });\n }\n\n registerPreference(name: string, options: {synced?: boolean}): void {\n }\n\n getPreferences(callback: (arg0: {\n [x: string]: string,\n }) => void): void {\n const prefs: {\n [x: string]: string,\n } = {};\n for (const name in window.localStorage) {\n prefs[name] = window.localStorage[name];\n }\n callback(prefs);\n }\n\n getPreference(name: string, callback: (arg0: string) => void): void {\n callback(window.localStorage[name]);\n }\n\n setPreference(name: string, value: string): void {\n window.localStorage[name] = value;\n }\n\n removePreference(name: string): void {\n delete window.localStorage[name];\n }\n\n clearPreferences(): void {\n window.localStorage.clear();\n }\n\n getSyncInformation(callback: (arg0: SyncInformation) => void): void {\n if ('getSyncInformationForTesting' in globalThis) {\n // @ts-ignore for testing\n return callback(globalThis.getSyncInformationForTesting());\n }\n callback({\n isSyncActive: false,\n arePreferencesSynced: false,\n });\n }\n\n getHostConfig(callback: (arg0: Root.Runtime.HostConfig) => void): void {\n const result: Root.Runtime.HostConfig = {\n aidaAvailability: {\n enabled: true,\n blockedByAge: false,\n blockedByEnterprisePolicy: false,\n blockedByGeo: false,\n disallowLogging: false,\n },\n devToolsConsoleInsights: {\n modelId: '',\n temperature: 0,\n enabled: false,\n },\n devToolsFreestylerDogfood: {\n modelId: '',\n temperature: 0,\n enabled: false,\n },\n devToolsVeLogging: {\n enabled: true,\n testing: false,\n },\n isOffTheRecord: false,\n };\n if ('hostConfigForTesting' in globalThis) {\n const {hostConfigForTesting} = (globalThis as unknown as {hostConfigForTesting: Root.Runtime.HostConfig});\n for (const key of Object.keys(hostConfigForTesting)) {\n const mergeEntry = (key: K): void => {\n if (typeof result[key] === 'object' && typeof hostConfigForTesting[key] === 'object') {\n // If the config is an object, merge the settings, but preferring\n // the hostConfigForTesting values over the result values.\n result[key] = {...result[key], ...hostConfigForTesting[key]};\n } else {\n // Override with the testing config if the value is present + not null/undefined.\n result[key] = hostConfigForTesting[key] ?? result[key];\n }\n };\n mergeEntry(key as keyof Root.Runtime.HostConfig);\n }\n }\n callback(result);\n }\n\n upgradeDraggedFileSystemPermissions(fileSystem: FileSystem): void {\n }\n\n indexPath(requestId: number, fileSystemPath: Platform.DevToolsPath.RawPathString, excludedFolders: string): void {\n }\n\n stopIndexing(requestId: number): void {\n }\n\n searchInPath(requestId: number, fileSystemPath: Platform.DevToolsPath.RawPathString, query: string): void {\n }\n\n zoomFactor(): number {\n return 1;\n }\n\n zoomIn(): void {\n }\n\n zoomOut(): void {\n }\n\n resetZoom(): void {\n }\n\n setWhitelistedShortcuts(shortcuts: string): void {\n }\n\n setEyeDropperActive(active: boolean): void {\n }\n\n showCertificateViewer(certChain: string[]): void {\n }\n\n reattach(callback: () => void): void {\n }\n\n readyForTest(): void {\n }\n\n connectionReady(): void {\n }\n\n setOpenNewWindowForPopups(value: boolean): void {\n }\n\n setDevicesDiscoveryConfig(config: Adb.Config): void {\n }\n\n setDevicesUpdatesEnabled(enabled: boolean): void {\n }\n\n performActionOnRemotePage(pageId: string, action: string): void {\n }\n\n openRemotePage(browserId: string, url: string): void {\n }\n\n openNodeFrontend(): void {\n }\n\n showContextMenuAtPoint(x: number, y: number, items: ContextMenuDescriptor[], document: Document): void {\n throw 'Soft context menu should be used';\n }\n\n isHostedMode(): boolean {\n return true;\n }\n\n setAddExtensionCallback(callback: (arg0: ExtensionDescriptor) => void): void {\n // Extensions are not supported in hosted mode.\n }\n\n async initialTargetId(): Promise {\n return null;\n }\n\n doAidaConversation(request: string, streamId: number, callback: (result: DoAidaConversationResult) => void): void {\n callback({\n error: 'Not implemented',\n });\n }\n\n registerAidaClientEvent(request: string, callback: (result: AidaClientResult) => void): void {\n callback({\n error: 'Not implemented',\n });\n }\n\n recordImpression(event: ImpressionEvent): void {\n }\n recordResize(event: ResizeEvent): void {\n }\n recordClick(event: ClickEvent): void {\n }\n recordHover(event: HoverEvent): void {\n }\n recordDrag(event: DragEvent): void {\n }\n recordChange(event: ChangeEvent): void {\n }\n recordKeyDown(event: KeyDownEvent): void {\n }\n}\n\n// @ts-ignore Global injected by devtools-compatibility.js\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport let InspectorFrontendHostInstance: InspectorFrontendHostStub = globalThis.InspectorFrontendHost;\n\nclass InspectorFrontendAPIImpl {\n constructor() {\n for (const descriptor of EventDescriptors) {\n // @ts-ignore Dispatcher magic\n this[descriptor[1]] = this.dispatch.bind(this, descriptor[0], descriptor[2], descriptor[3]);\n }\n }\n\n private dispatch(name: symbol, signature: string[], runOnceLoaded: boolean, ...params: string[]): void {\n // Single argument methods get dispatched with the param.\n if (signature.length < 2) {\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n InspectorFrontendHostInstance.events.dispatchEventToListeners(name, params[0]);\n } catch (error) {\n console.error(error + ' ' + error.stack);\n }\n return;\n }\n const data: {\n [x: string]: string,\n } = {};\n for (let i = 0; i < signature.length; ++i) {\n data[signature[i]] = params[i];\n }\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n InspectorFrontendHostInstance.events.dispatchEventToListeners(name, data);\n } catch (error) {\n console.error(error + ' ' + error.stack);\n }\n }\n\n streamWrite(id: number, chunk: string): void {\n resourceLoaderStreamWrite(id, chunk);\n }\n}\n\n(function(): void {\n\nfunction initializeInspectorFrontendHost(): void {\n let proto;\n if (!InspectorFrontendHostInstance) {\n // Instantiate stub for web-hosted mode if necessary.\n // @ts-ignore Global injected by devtools-compatibility.js\n globalThis.InspectorFrontendHost = InspectorFrontendHostInstance = new InspectorFrontendHostStub();\n } else {\n // Otherwise add stubs for missing methods that are declared in the interface.\n proto = InspectorFrontendHostStub.prototype;\n for (const name of Object.getOwnPropertyNames(proto)) {\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration)\n // @ts-expect-error\n const stub = proto[name];\n // @ts-ignore Global injected by devtools-compatibility.js\n if (typeof stub !== 'function' || InspectorFrontendHostInstance[name]) {\n continue;\n }\n\n console.error(`Incompatible embedder: method Host.InspectorFrontendHost.${name} is missing. Using stub instead.`);\n // @ts-ignore Global injected by devtools-compatibility.js\n InspectorFrontendHostInstance[name] = stub;\n }\n }\n\n // Attach the events object.\n InspectorFrontendHostInstance.events = new Common.ObjectWrapper.ObjectWrapper();\n}\n\n// FIXME: This file is included into both apps, since the devtools_app needs the InspectorFrontendHostAPI only,\n// so the host instance should not be initialized there.\ninitializeInspectorFrontendHost();\n// @ts-ignore Global injected by devtools-compatibility.js\nglobalThis.InspectorFrontendAPI = new InspectorFrontendAPIImpl();\n})();\n\nexport function isUnderTest(prefs?: {\n [x: string]: string,\n}): boolean {\n // Integration tests rely on test queryParam.\n if (Root.Runtime.Runtime.queryParam('test')) {\n return true;\n }\n // Browser tests rely on prefs.\n if (prefs) {\n return prefs['isUnderTest'] === 'true';\n }\n return Common.Settings.Settings.hasInstance() &&\n Common.Settings.Settings.instance().createSetting('isUnderTest', false).get();\n}\n"]}
\ No newline at end of file
+{"version":3,"file":"InspectorFrontendHost.js","sourceRoot":"","sources":["../../../../../../front_end/core/host/InspectorFrontendHost.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright (C) 2009 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n * * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n// TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration)\n/* eslint-disable @typescript-eslint/no-unused-vars */\n\nimport * as Common from '../common/common.js';\nimport * as i18n from '../i18n/i18n.js';\nimport * as Platform from '../platform/platform.js';\nimport * as Root from '../root/root.js';\n\nimport {\n type AidaClientResult,\n type CanShowSurveyResult,\n type ChangeEvent,\n type ClickEvent,\n type ContextMenuDescriptor,\n type DoAidaConversationResult,\n type DragEvent,\n type EnumeratedHistogram,\n EventDescriptors,\n Events,\n type EventTypes,\n type ExtensionDescriptor,\n type HoverEvent,\n type ImpressionEvent,\n type InspectorFrontendHostAPI,\n type KeyDownEvent,\n type LoadNetworkResourceResult,\n type ResizeEvent,\n type ShowSurveyResult,\n type SyncInformation,\n} from './InspectorFrontendHostAPI.js';\nimport {streamWrite as resourceLoaderStreamWrite} from './ResourceLoader.js';\n\ninterface DecompressionStream extends GenericTransformStream {\n readonly format: string;\n}\ndeclare const DecompressionStream: {\n prototype: DecompressionStream,\n new (format: string): DecompressionStream,\n};\n\nconst UIStrings = {\n /**\n *@description Document title in Inspector Frontend Host of the DevTools window\n *@example {example.com} PH1\n */\n devtoolsS: 'DevTools - {PH1}',\n};\nconst str_ = i18n.i18n.registerUIStrings('core/host/InspectorFrontendHost.ts', UIStrings);\nconst i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);\n\nconst MAX_RECORDED_HISTOGRAMS_SIZE = 100;\nconst OVERRIDES_FILE_SYSTEM_PATH = '/overrides' as Platform.DevToolsPath.RawPathString;\n\n/**\n * The InspectorFrontendHostStub is a stub interface used the frontend is loaded like a webpage. Examples:\n * - devtools://devtools/bundled/devtools_app.html\n * - https://chrome-devtools-frontend.appspot.com/serve_rev/@030cc140435b0152645522b9864b75cac6c0a854/worker_app.html\n * - http://localhost:9222/devtools/inspector.html?ws=localhost:9222/devtools/page/xTARGET_IDx\n *\n * When the frontend runs within the native embedder, then the InspectorFrontendHostAPI methods are provided\n * by devtools_compatibility.js. Those leverage `DevToolsAPI.sendMessageToEmbedder()` which match up with\n * the embedder API defined here: https://source.chromium.org/search?q=f:devtools%20f:dispatcher%20f:cc%20symbol:CreateForDevToolsFrontend&sq=&ss=chromium%2Fchromium%2Fsrc\n * The native implementations live in devtools_ui_bindings.cc: https://source.chromium.org/chromium/chromium/src/+/main:chrome/browser/devtools/devtools_ui_bindings.cc\n */\nexport class InspectorFrontendHostStub implements InspectorFrontendHostAPI {\n readonly #urlsBeingSaved: Map;\n events!: Common.EventTarget.EventTarget;\n #fileSystem: FileSystem|null = null;\n\n recordedCountHistograms:\n {histogramName: string, sample: number, min: number, exclusiveMax: number, bucketSize: number}[] = [];\n recordedEnumeratedHistograms: {actionName: EnumeratedHistogram, actionCode: number}[] = [];\n recordedPerformanceHistograms: {histogramName: string, duration: number}[] = [];\n\n constructor() {\n this.#urlsBeingSaved = new Map();\n\n // Guard against errors should this file ever be imported at the top level\n // within a worker - in which case this constructor is run. If there's no\n // document, we can early exit.\n if (typeof document === 'undefined') {\n return;\n }\n\n function stopEventPropagation(this: InspectorFrontendHostAPI, event: KeyboardEvent): void {\n // Let browser handle Ctrl+/Ctrl- shortcuts in hosted mode.\n const zoomModifier = this.platform() === 'mac' ? event.metaKey : event.ctrlKey;\n if (zoomModifier && (event.key === '+' || event.key === '-')) {\n event.stopPropagation();\n }\n }\n\n document.addEventListener('keydown', event => {\n stopEventPropagation.call(this, (event as KeyboardEvent));\n }, true);\n }\n\n platform(): string {\n const userAgent = navigator.userAgent;\n if (userAgent.includes('Windows NT')) {\n return 'windows';\n }\n if (userAgent.includes('Mac OS X')) {\n return 'mac';\n }\n return 'linux';\n }\n\n loadCompleted(): void {\n }\n\n bringToFront(): void {\n }\n\n closeWindow(): void {\n }\n\n setIsDocked(isDocked: boolean, callback: () => void): void {\n window.setTimeout(callback, 0);\n }\n\n showSurvey(trigger: string, callback: (arg0: ShowSurveyResult) => void): void {\n window.setTimeout(() => callback({surveyShown: false}), 0);\n }\n\n canShowSurvey(trigger: string, callback: (arg0: CanShowSurveyResult) => void): void {\n window.setTimeout(() => callback({canShowSurvey: false}), 0);\n }\n\n /**\n * Requests inspected page to be placed atop of the inspector frontend with specified bounds.\n */\n setInspectedPageBounds(bounds: {\n x: number,\n y: number,\n width: number,\n height: number,\n }): void {\n }\n\n inspectElementCompleted(): void {\n }\n\n setInjectedScriptForOrigin(origin: string, script: string): void {\n }\n\n inspectedURLChanged(url: Platform.DevToolsPath.UrlString): void {\n document.title = i18nString(UIStrings.devtoolsS, {PH1: url.replace(/^https?:\\/\\//, '')});\n }\n\n copyText(text: string|null|undefined): void {\n if (text === undefined || text === null) {\n return;\n }\n void navigator.clipboard.writeText(text);\n }\n\n openInNewTab(url: Platform.DevToolsPath.UrlString): void {\n window.open(url, '_blank');\n }\n\n openSearchResultsInNewTab(query: string): void {\n Common.Console.Console.instance().error(\n 'Search is not enabled in hosted mode. Please inspect using chrome://inspect');\n }\n\n showItemInFolder(fileSystemPath: Platform.DevToolsPath.RawPathString): void {\n Common.Console.Console.instance().error(\n 'Show item in folder is not enabled in hosted mode. Please inspect using chrome://inspect');\n }\n\n save(\n url: Platform.DevToolsPath.RawPathString|Platform.DevToolsPath.UrlString, content: string, forceSaveAs: boolean,\n isBase64: boolean): void {\n let buffer = this.#urlsBeingSaved.get(url);\n if (!buffer) {\n buffer = [];\n this.#urlsBeingSaved.set(url, buffer);\n }\n buffer.push(content);\n this.events.dispatchEventToListeners(Events.SavedURL, {url, fileSystemPath: url});\n }\n\n append(url: Platform.DevToolsPath.RawPathString|Platform.DevToolsPath.UrlString, content: string): void {\n const buffer = this.#urlsBeingSaved.get(url);\n if (buffer) {\n buffer.push(content);\n this.events.dispatchEventToListeners(Events.AppendedToURL, url);\n }\n }\n\n close(url: Platform.DevToolsPath.RawPathString|Platform.DevToolsPath.UrlString): void {\n const buffer = this.#urlsBeingSaved.get(url) || [];\n this.#urlsBeingSaved.delete(url);\n let fileName = '';\n\n if (url) {\n try {\n const trimmed = Platform.StringUtilities.trimURL(url);\n fileName = Platform.StringUtilities.removeURLFragment(trimmed);\n } catch (error) {\n // If url is not a valid URL, it is probably a filename.\n fileName = url;\n }\n }\n\n const link = document.createElement('a');\n link.download = fileName;\n const blob = new Blob([buffer.join('')], {type: 'text/plain'});\n const blobUrl = URL.createObjectURL(blob);\n link.href = blobUrl;\n link.click();\n URL.revokeObjectURL(blobUrl);\n }\n\n sendMessageToBackend(message: string): void {\n }\n\n recordCountHistogram(histogramName: string, sample: number, min: number, exclusiveMax: number, bucketSize: number):\n void {\n if (this.recordedCountHistograms.length >= MAX_RECORDED_HISTOGRAMS_SIZE) {\n this.recordedCountHistograms.shift();\n }\n this.recordedCountHistograms.push({histogramName, sample, min, exclusiveMax, bucketSize});\n }\n\n recordEnumeratedHistogram(actionName: EnumeratedHistogram, actionCode: number, bucketSize: number): void {\n if (this.recordedEnumeratedHistograms.length >= MAX_RECORDED_HISTOGRAMS_SIZE) {\n this.recordedEnumeratedHistograms.shift();\n }\n this.recordedEnumeratedHistograms.push({actionName, actionCode});\n }\n\n recordPerformanceHistogram(histogramName: string, duration: number): void {\n if (this.recordedPerformanceHistograms.length >= MAX_RECORDED_HISTOGRAMS_SIZE) {\n this.recordedPerformanceHistograms.shift();\n }\n this.recordedPerformanceHistograms.push({histogramName, duration});\n }\n\n recordUserMetricsAction(umaName: string): void {\n }\n\n requestFileSystems(): void {\n this.events.dispatchEventToListeners(Events.FileSystemsLoaded, []);\n }\n\n addFileSystem(type?: string): void {\n const onFileSystem = (fs: FileSystem): void => {\n this.#fileSystem = fs;\n const fileSystem = {\n fileSystemName: 'sandboxedRequestedFileSystem',\n fileSystemPath: OVERRIDES_FILE_SYSTEM_PATH,\n rootURL: 'filesystem:devtools://devtools/isolated/',\n type: 'overrides',\n };\n this.events.dispatchEventToListeners(Events.FileSystemAdded, {fileSystem});\n };\n window.webkitRequestFileSystem(window.TEMPORARY, 1024 * 1024, onFileSystem);\n }\n\n removeFileSystem(fileSystemPath: Platform.DevToolsPath.RawPathString): void {\n const removalCallback = (entries: Entry[]): void => {\n entries.forEach(entry => {\n if (entry.isDirectory) {\n (entry as DirectoryEntry).removeRecursively(() => {});\n } else if (entry.isFile) {\n entry.remove(() => {});\n }\n });\n };\n\n if (this.#fileSystem) {\n this.#fileSystem.root.createReader().readEntries(removalCallback);\n }\n\n this.#fileSystem = null;\n this.events.dispatchEventToListeners(Events.FileSystemRemoved, OVERRIDES_FILE_SYSTEM_PATH);\n }\n\n isolatedFileSystem(fileSystemId: string, registeredName: string): FileSystem|null {\n return this.#fileSystem;\n }\n\n loadNetworkResource(\n url: string, headers: string, streamId: number, callback: (arg0: LoadNetworkResourceResult) => void): void {\n // Read the first 3 bytes looking for the gzip signature in the file header\n function isGzip(ab: ArrayBuffer): boolean {\n const buf = new Uint8Array(ab);\n if (!buf || buf.length < 3) {\n return false;\n }\n\n // https://www.rfc-editor.org/rfc/rfc1952#page-6\n return buf[0] === 0x1F && buf[1] === 0x8B && buf[2] === 0x08;\n }\n fetch(url)\n .then(async result => {\n const resultArrayBuf = await result.arrayBuffer();\n let decoded: ReadableStream|ArrayBuffer = resultArrayBuf;\n if (isGzip(resultArrayBuf)) {\n const ds = new DecompressionStream('gzip');\n const writer = ds.writable.getWriter();\n void writer.write(resultArrayBuf);\n void writer.close();\n decoded = ds.readable;\n }\n const text = await new Response(decoded).text();\n return text;\n })\n .then(function(text) {\n resourceLoaderStreamWrite(streamId, text);\n callback({\n statusCode: 200,\n headers: undefined,\n messageOverride: undefined,\n netError: undefined,\n netErrorName: undefined,\n urlValid: undefined,\n });\n })\n .catch(function() {\n callback({\n statusCode: 404,\n headers: undefined,\n messageOverride: undefined,\n netError: undefined,\n netErrorName: undefined,\n urlValid: undefined,\n });\n });\n }\n\n registerPreference(name: string, options: {synced?: boolean}): void {\n }\n\n getPreferences(callback: (arg0: {\n [x: string]: string,\n }) => void): void {\n const prefs: {\n [x: string]: string,\n } = {};\n for (const name in window.localStorage) {\n prefs[name] = window.localStorage[name];\n }\n callback(prefs);\n }\n\n getPreference(name: string, callback: (arg0: string) => void): void {\n callback(window.localStorage[name]);\n }\n\n setPreference(name: string, value: string): void {\n window.localStorage[name] = value;\n }\n\n removePreference(name: string): void {\n delete window.localStorage[name];\n }\n\n clearPreferences(): void {\n window.localStorage.clear();\n }\n\n getSyncInformation(callback: (arg0: SyncInformation) => void): void {\n if ('getSyncInformationForTesting' in globalThis) {\n // @ts-ignore for testing\n return callback(globalThis.getSyncInformationForTesting());\n }\n callback({\n isSyncActive: false,\n arePreferencesSynced: false,\n });\n }\n\n getHostConfig(callback: (arg0: Root.Runtime.HostConfig) => void): void {\n const result: Root.Runtime.HostConfig = {\n aidaAvailability: {\n enabled: true,\n blockedByAge: false,\n blockedByEnterprisePolicy: false,\n blockedByGeo: false,\n disallowLogging: false,\n },\n devToolsConsoleInsights: {\n modelId: '',\n temperature: 0,\n enabled: false,\n },\n devToolsFreestylerDogfood: {\n modelId: '',\n temperature: 0,\n enabled: false,\n },\n devToolsVeLogging: {\n enabled: true,\n testing: false,\n },\n devToolsPrivacyUI: {\n enabled: false,\n },\n isOffTheRecord: false,\n };\n if ('hostConfigForTesting' in globalThis) {\n const {hostConfigForTesting} = (globalThis as unknown as {hostConfigForTesting: Root.Runtime.HostConfig});\n for (const key of Object.keys(hostConfigForTesting)) {\n const mergeEntry = (key: K): void => {\n if (typeof result[key] === 'object' && typeof hostConfigForTesting[key] === 'object') {\n // If the config is an object, merge the settings, but preferring\n // the hostConfigForTesting values over the result values.\n result[key] = {...result[key], ...hostConfigForTesting[key]};\n } else {\n // Override with the testing config if the value is present + not null/undefined.\n result[key] = hostConfigForTesting[key] ?? result[key];\n }\n };\n mergeEntry(key as keyof Root.Runtime.HostConfig);\n }\n }\n callback(result);\n }\n\n upgradeDraggedFileSystemPermissions(fileSystem: FileSystem): void {\n }\n\n indexPath(requestId: number, fileSystemPath: Platform.DevToolsPath.RawPathString, excludedFolders: string): void {\n }\n\n stopIndexing(requestId: number): void {\n }\n\n searchInPath(requestId: number, fileSystemPath: Platform.DevToolsPath.RawPathString, query: string): void {\n }\n\n zoomFactor(): number {\n return 1;\n }\n\n zoomIn(): void {\n }\n\n zoomOut(): void {\n }\n\n resetZoom(): void {\n }\n\n setWhitelistedShortcuts(shortcuts: string): void {\n }\n\n setEyeDropperActive(active: boolean): void {\n }\n\n showCertificateViewer(certChain: string[]): void {\n }\n\n reattach(callback: () => void): void {\n }\n\n readyForTest(): void {\n }\n\n connectionReady(): void {\n }\n\n setOpenNewWindowForPopups(value: boolean): void {\n }\n\n setDevicesDiscoveryConfig(config: Adb.Config): void {\n }\n\n setDevicesUpdatesEnabled(enabled: boolean): void {\n }\n\n performActionOnRemotePage(pageId: string, action: string): void {\n }\n\n openRemotePage(browserId: string, url: string): void {\n }\n\n openNodeFrontend(): void {\n }\n\n showContextMenuAtPoint(x: number, y: number, items: ContextMenuDescriptor[], document: Document): void {\n throw 'Soft context menu should be used';\n }\n\n isHostedMode(): boolean {\n return true;\n }\n\n setAddExtensionCallback(callback: (arg0: ExtensionDescriptor) => void): void {\n // Extensions are not supported in hosted mode.\n }\n\n async initialTargetId(): Promise {\n return null;\n }\n\n doAidaConversation(request: string, streamId: number, callback: (result: DoAidaConversationResult) => void): void {\n callback({\n error: 'Not implemented',\n });\n }\n\n registerAidaClientEvent(request: string, callback: (result: AidaClientResult) => void): void {\n callback({\n error: 'Not implemented',\n });\n }\n\n recordImpression(event: ImpressionEvent): void {\n }\n recordResize(event: ResizeEvent): void {\n }\n recordClick(event: ClickEvent): void {\n }\n recordHover(event: HoverEvent): void {\n }\n recordDrag(event: DragEvent): void {\n }\n recordChange(event: ChangeEvent): void {\n }\n recordKeyDown(event: KeyDownEvent): void {\n }\n}\n\n// @ts-ignore Global injected by devtools-compatibility.js\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport let InspectorFrontendHostInstance: InspectorFrontendHostStub = globalThis.InspectorFrontendHost;\n\nclass InspectorFrontendAPIImpl {\n constructor() {\n for (const descriptor of EventDescriptors) {\n // @ts-ignore Dispatcher magic\n this[descriptor[1]] = this.dispatch.bind(this, descriptor[0], descriptor[2], descriptor[3]);\n }\n }\n\n private dispatch(name: symbol, signature: string[], runOnceLoaded: boolean, ...params: string[]): void {\n // Single argument methods get dispatched with the param.\n if (signature.length < 2) {\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n InspectorFrontendHostInstance.events.dispatchEventToListeners(name, params[0]);\n } catch (error) {\n console.error(error + ' ' + error.stack);\n }\n return;\n }\n const data: {\n [x: string]: string,\n } = {};\n for (let i = 0; i < signature.length; ++i) {\n data[signature[i]] = params[i];\n }\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n InspectorFrontendHostInstance.events.dispatchEventToListeners(name, data);\n } catch (error) {\n console.error(error + ' ' + error.stack);\n }\n }\n\n streamWrite(id: number, chunk: string): void {\n resourceLoaderStreamWrite(id, chunk);\n }\n}\n\n(function(): void {\n\nfunction initializeInspectorFrontendHost(): void {\n let proto;\n if (!InspectorFrontendHostInstance) {\n // Instantiate stub for web-hosted mode if necessary.\n // @ts-ignore Global injected by devtools-compatibility.js\n globalThis.InspectorFrontendHost = InspectorFrontendHostInstance = new InspectorFrontendHostStub();\n } else {\n // Otherwise add stubs for missing methods that are declared in the interface.\n proto = InspectorFrontendHostStub.prototype;\n for (const name of Object.getOwnPropertyNames(proto)) {\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration)\n // @ts-expect-error\n const stub = proto[name];\n // @ts-ignore Global injected by devtools-compatibility.js\n if (typeof stub !== 'function' || InspectorFrontendHostInstance[name]) {\n continue;\n }\n\n console.error(`Incompatible embedder: method Host.InspectorFrontendHost.${name} is missing. Using stub instead.`);\n // @ts-ignore Global injected by devtools-compatibility.js\n InspectorFrontendHostInstance[name] = stub;\n }\n }\n\n // Attach the events object.\n InspectorFrontendHostInstance.events = new Common.ObjectWrapper.ObjectWrapper();\n}\n\n// FIXME: This file is included into both apps, since the devtools_app needs the InspectorFrontendHostAPI only,\n// so the host instance should not be initialized there.\ninitializeInspectorFrontendHost();\n// @ts-ignore Global injected by devtools-compatibility.js\nglobalThis.InspectorFrontendAPI = new InspectorFrontendAPIImpl();\n})();\n\nexport function isUnderTest(prefs?: {\n [x: string]: string,\n}): boolean {\n // Integration tests rely on test queryParam.\n if (Root.Runtime.Runtime.queryParam('test')) {\n return true;\n }\n // Browser tests rely on prefs.\n if (prefs) {\n return prefs['isUnderTest'] === 'true';\n }\n return Common.Settings.Settings.hasInstance() &&\n Common.Settings.Settings.instance().createSetting('isUnderTest', false).get();\n}\n"]}
\ No newline at end of file
diff --git a/public/core/host/InspectorFrontendHostAPI.d.ts b/public/core/host/InspectorFrontendHostAPI.d.ts
index 80e2ff261..0bacdc3a5 100644
--- a/public/core/host/InspectorFrontendHostAPI.d.ts
+++ b/public/core/host/InspectorFrontendHostAPI.d.ts
@@ -297,6 +297,8 @@ export interface SyncInformation {
accountEmail?: string;
/** The image of the account used for syncing. Its a base64 encoded PNG */
accountImage?: string;
+ /** The full name of the account used for syncing */
+ accountFullName?: string;
}
/**
* Enum for recordPerformanceHistogram
diff --git a/public/core/host/InspectorFrontendHostAPI.js.map b/public/core/host/InspectorFrontendHostAPI.js.map
index 8fe114fb5..5b7c47bf7 100644
--- a/public/core/host/InspectorFrontendHostAPI.js.map
+++ b/public/core/host/InspectorFrontendHostAPI.js.map
@@ -1 +1 @@
-{"version":3,"file":"InspectorFrontendHostAPI.js","sourceRoot":"","sources":["../../../../../../front_end/core/host/InspectorFrontendHostAPI.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,yEAAyE;AACzE,6BAA6B;AAK7B,MAAM,CAAN,IAAY,MA+BX;AA/BD,WAAY,MAAM;IAChB,oFAAoF;IACpF,yCAA+B,CAAA;IAC/B,6CAAmC,CAAA;IACnC,iDAAuC,CAAA;IACvC,mDAAyC,CAAA;IACzC,6DAAmD,CAAA;IACnD,mDAAyC,CAAA;IACzC,yEAA+D,CAAA;IAC/D,mFAAyE,CAAA;IACzE,2CAAiC,CAAA;IACjC,6CAAmC,CAAA;IACnC,uDAA6C,CAAA;IAC7C,6DAAmD,CAAA;IACnD,yDAA+C,CAAA;IAC/C,iDAAuC,CAAA;IACvC,iDAAuC,CAAA;IACvC,6CAAmC,CAAA;IACnC,mFAAyE,CAAA;IACzE,qEAA2D,CAAA;IAC3D,2CAAiC,CAAA;IACjC,uCAA6B,CAAA;IAC7B,iDAAuC,CAAA;IACvC,qDAA2C,CAAA;IAC3C,+CAAqC,CAAA;IACrC,+BAAqB,CAAA;IACrB,6CAAmC,CAAA;IACnC,iDAAuC,CAAA;IACvC,2CAAiC,CAAA;IACjC,iCAAuB,CAAA;IACvB,wDAAwD;AAC1D,CAAC,EA/BW,MAAM,KAAN,MAAM,QA+BjB;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,CAAC,MAAM,CAAC,aAAa,EAAE,eAAe,EAAE,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC,MAAM,CAAC,eAAe,EAAE,iBAAiB,EAAE,CAAC,KAAK,CAAC,CAAC;IACpD,CAAC,MAAM,CAAC,iBAAiB,EAAE,mBAAmB,EAAE,EAAE,CAAC;IACnD,CAAC,MAAM,CAAC,kBAAkB,EAAE,oBAAoB,EAAE,EAAE,CAAC;IACrD,CAAC,MAAM,CAAC,uBAAuB,EAAE,yBAAyB,EAAE,CAAC,IAAI,CAAC,CAAC;IACnE,CAAC,MAAM,CAAC,kBAAkB,EAAE,oBAAoB,EAAE,CAAC,OAAO,CAAC,CAAC;IAC5D,CAAC,MAAM,CAAC,6BAA6B,EAAE,+BAA+B,EAAE,CAAC,QAAQ,CAAC,CAAC;IACnF,CAAC,MAAM,CAAC,kCAAkC,EAAE,oCAAoC,EAAE,CAAC,QAAQ,CAAC,CAAC;IAC7F,CAAC,MAAM,CAAC,cAAc,EAAE,gBAAgB,EAAE,CAAC,SAAS,CAAC,CAAC;IACtD,CAAC,MAAM,CAAC,eAAe,EAAE,iBAAiB,EAAE,CAAC,eAAe,CAAC,CAAC;IAC9D,CAAC,MAAM,CAAC,oBAAoB,EAAE,sBAAsB,EAAE,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;IACtF,CAAC,MAAM,CAAC,uBAAuB,EAAE,yBAAyB,EAAE,EAAE,CAAC;IAC/D,CAAC,MAAM,CAAC,qBAAqB,EAAE,uBAAuB,EAAE,CAAC,OAAO,CAAC,CAAC;IAClE,CAAC,MAAM,CAAC,iBAAiB,EAAE,mBAAmB,EAAE,CAAC,aAAa,CAAC,CAAC;IAChE,CAAC,MAAM,CAAC,iBAAiB,EAAE,mBAAmB,EAAE,CAAC,gBAAgB,CAAC,CAAC;IACnE,CAAC,MAAM,CAAC,eAAe,EAAE,iBAAiB,EAAE,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;IAC3E,CAAC,MAAM,CAAC,kCAAkC,EAAE,oCAAoC,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IAClH,CAAC,MAAM,CAAC,2BAA2B,EAAE,6BAA6B,EAAE,CAAC,WAAW,EAAE,gBAAgB,EAAE,WAAW,CAAC,CAAC;IACjH,CAAC,MAAM,CAAC,cAAc,EAAE,gBAAgB,EAAE,CAAC,WAAW,EAAE,gBAAgB,EAAE,QAAQ,CAAC,CAAC;IACpF,CAAC,MAAM,CAAC,YAAY,EAAE,cAAc,EAAE,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;IACtE,CAAC,MAAM,CAAC,iBAAiB,EAAE,mBAAmB,EAAE,CAAC,OAAO,CAAC,CAAC;IAC1D,CAAC,MAAM,CAAC,mBAAmB,EAAE,qBAAqB,EAAE,CAAC,MAAM,CAAC,CAAC;IAC7D,CAAC,MAAM,CAAC,gBAAgB,EAAE,kBAAkB,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC;IACpF,CAAC,MAAM,CAAC,QAAQ,EAAE,UAAU,EAAE,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;IACxD,CAAC,MAAM,CAAC,eAAe,EAAE,iBAAiB,EAAE,CAAC,WAAW,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAC;IACrF,CAAC,MAAM,CAAC,iBAAiB,EAAE,mBAAmB,EAAE,CAAC,OAAO,CAAC,CAAC;IAC1D,CAAC,MAAM,CAAC,cAAc,EAAE,gBAAgB,EAAE,CAAC,aAAa,CAAC,CAAC;IAC1D,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,EAAE,CAAC,WAAW,CAAC,CAAC;CAC/C,CAAC","sourcesContent":["// Copyright (c) 2015 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\nimport type * as Platform from '../../core/platform/platform.js';\nimport type * as Root from '../root/root.js';\n\nexport enum Events {\n /* eslint-disable @typescript-eslint/naming-convention -- Accessed from web_tests */\n AppendedToURL = 'appendedToURL',\n CanceledSaveURL = 'canceledSaveURL',\n ColorThemeChanged = 'colorThemeChanged',\n ContextMenuCleared = 'contextMenuCleared',\n ContextMenuItemSelected = 'contextMenuItemSelected',\n DeviceCountUpdated = 'deviceCountUpdated',\n DevicesDiscoveryConfigChanged = 'devicesDiscoveryConfigChanged',\n DevicesPortForwardingStatusChanged = 'devicesPortForwardingStatusChanged',\n DevicesUpdated = 'devicesUpdated',\n DispatchMessage = 'dispatchMessage',\n DispatchMessageChunk = 'dispatchMessageChunk',\n EnterInspectElementMode = 'enterInspectElementMode',\n EyeDropperPickedColor = 'eyeDropperPickedColor',\n FileSystemsLoaded = 'fileSystemsLoaded',\n FileSystemRemoved = 'fileSystemRemoved',\n FileSystemAdded = 'fileSystemAdded',\n FileSystemFilesChangedAddedRemoved = 'FileSystemFilesChangedAddedRemoved',\n IndexingTotalWorkCalculated = 'indexingTotalWorkCalculated',\n IndexingWorked = 'indexingWorked',\n IndexingDone = 'indexingDone',\n KeyEventUnhandled = 'keyEventUnhandled',\n ReloadInspectedPage = 'reloadInspectedPage',\n RevealSourceLine = 'revealSourceLine',\n SavedURL = 'savedURL',\n SearchCompleted = 'searchCompleted',\n SetInspectedTabId = 'setInspectedTabId',\n SetUseSoftMenu = 'setUseSoftMenu',\n ShowPanel = 'showPanel',\n /* eslint-enable @typescript-eslint/naming-convention */\n}\n\nexport const EventDescriptors = [\n [Events.AppendedToURL, 'appendedToURL', ['url']],\n [Events.CanceledSaveURL, 'canceledSaveURL', ['url']],\n [Events.ColorThemeChanged, 'colorThemeChanged', []],\n [Events.ContextMenuCleared, 'contextMenuCleared', []],\n [Events.ContextMenuItemSelected, 'contextMenuItemSelected', ['id']],\n [Events.DeviceCountUpdated, 'deviceCountUpdated', ['count']],\n [Events.DevicesDiscoveryConfigChanged, 'devicesDiscoveryConfigChanged', ['config']],\n [Events.DevicesPortForwardingStatusChanged, 'devicesPortForwardingStatusChanged', ['status']],\n [Events.DevicesUpdated, 'devicesUpdated', ['devices']],\n [Events.DispatchMessage, 'dispatchMessage', ['messageObject']],\n [Events.DispatchMessageChunk, 'dispatchMessageChunk', ['messageChunk', 'messageSize']],\n [Events.EnterInspectElementMode, 'enterInspectElementMode', []],\n [Events.EyeDropperPickedColor, 'eyeDropperPickedColor', ['color']],\n [Events.FileSystemsLoaded, 'fileSystemsLoaded', ['fileSystems']],\n [Events.FileSystemRemoved, 'fileSystemRemoved', ['fileSystemPath']],\n [Events.FileSystemAdded, 'fileSystemAdded', ['errorMessage', 'fileSystem']],\n [Events.FileSystemFilesChangedAddedRemoved, 'fileSystemFilesChangedAddedRemoved', ['changed', 'added', 'removed']],\n [Events.IndexingTotalWorkCalculated, 'indexingTotalWorkCalculated', ['requestId', 'fileSystemPath', 'totalWork']],\n [Events.IndexingWorked, 'indexingWorked', ['requestId', 'fileSystemPath', 'worked']],\n [Events.IndexingDone, 'indexingDone', ['requestId', 'fileSystemPath']],\n [Events.KeyEventUnhandled, 'keyEventUnhandled', ['event']],\n [Events.ReloadInspectedPage, 'reloadInspectedPage', ['hard']],\n [Events.RevealSourceLine, 'revealSourceLine', ['url', 'lineNumber', 'columnNumber']],\n [Events.SavedURL, 'savedURL', ['url', 'fileSystemPath']],\n [Events.SearchCompleted, 'searchCompleted', ['requestId', 'fileSystemPath', 'files']],\n [Events.SetInspectedTabId, 'setInspectedTabId', ['tabId']],\n [Events.SetUseSoftMenu, 'setUseSoftMenu', ['useSoftMenu']],\n [Events.ShowPanel, 'showPanel', ['panelName']],\n];\n\nexport interface DispatchMessageChunkEvent {\n messageChunk: string;\n messageSize: number;\n}\n\nexport interface EyeDropperPickedColorEvent {\n r: number;\n g: number;\n b: number;\n a: number;\n}\n\nexport interface DevToolsFileSystem {\n type: string;\n fileSystemName: string;\n rootURL: string;\n fileSystemPath: Platform.DevToolsPath.RawPathString;\n}\n\nexport interface FileSystemAddedEvent {\n errorMessage?: string;\n fileSystem: DevToolsFileSystem|null;\n}\n\nexport interface FilesChangedEvent {\n changed: Platform.DevToolsPath.RawPathString[];\n added: Platform.DevToolsPath.RawPathString[];\n removed: Platform.DevToolsPath.RawPathString[];\n}\n\nexport interface IndexingEvent {\n requestId: number;\n fileSystemPath: string;\n}\n\nexport interface IndexingTotalWorkCalculatedEvent extends IndexingEvent {\n totalWork: number;\n}\n\nexport interface IndexingWorkedEvent extends IndexingEvent {\n worked: number;\n}\n\nexport interface KeyEventUnhandledEvent {\n type: string;\n key: string;\n keyCode: number;\n modifiers: number;\n}\n\nexport interface RevealSourceLineEvent {\n url: Platform.DevToolsPath.UrlString;\n lineNumber: number;\n columnNumber: number;\n}\n\nexport interface SavedURLEvent {\n url: Platform.DevToolsPath.RawPathString|Platform.DevToolsPath.UrlString;\n fileSystemPath: Platform.DevToolsPath.RawPathString|Platform.DevToolsPath.UrlString;\n}\n\nexport interface SearchCompletedEvent {\n requestId: number;\n files: Platform.DevToolsPath.RawPathString[];\n}\n\nexport interface DoAidaConversationResult {\n statusCode?: number;\n headers?: {\n [x: string]: string,\n };\n netError?: number;\n netErrorName?: string;\n error?: string;\n detail?: string;\n}\n\nexport interface AidaClientResult {\n response?: string;\n error?: string;\n detail?: string;\n}\n\nexport interface VisualElementImpression {\n id: number;\n type: number;\n parent?: number;\n context?: number;\n width?: number;\n height?: number;\n}\n\nexport interface ImpressionEvent {\n impressions: VisualElementImpression[];\n}\n\nexport interface ResizeEvent {\n veid: number;\n width?: number;\n height?: number;\n}\n\nexport interface ClickEvent {\n veid: number;\n mouseButton?: number;\n context?: number;\n doubleClick: boolean;\n}\n\nexport interface HoverEvent {\n veid: number;\n time?: number;\n context?: number;\n}\n\nexport interface DragEvent {\n veid: number;\n context?: number;\n}\n\nexport interface ChangeEvent {\n veid: number;\n context?: number;\n}\n\nexport interface KeyDownEvent {\n veid?: number;\n context?: number;\n}\n\n// While `EventDescriptors` are used to dynamically dispatch host binding events,\n// the `EventTypes` \"type map\" is used for type-checking said events by TypeScript.\n// `EventTypes` is not used at runtime.\n// Please note that the \"dispatch\" side can't be type-checked as the dispatch is\n// done dynamically.\nexport type EventTypes = {\n [Events.AppendedToURL]: Platform.DevToolsPath.RawPathString|Platform.DevToolsPath.UrlString,\n [Events.CanceledSaveURL]: Platform.DevToolsPath.UrlString,\n [Events.ColorThemeChanged]: void,\n [Events.ContextMenuCleared]: void,\n [Events.ContextMenuItemSelected]: number,\n [Events.DeviceCountUpdated]: number,\n [Events.DevicesDiscoveryConfigChanged]: Adb.Config,\n [Events.DevicesPortForwardingStatusChanged]: void,\n [Events.DevicesUpdated]: void,\n [Events.DispatchMessage]: string,\n [Events.DispatchMessageChunk]: DispatchMessageChunkEvent,\n [Events.EnterInspectElementMode]: void,\n [Events.EyeDropperPickedColor]: EyeDropperPickedColorEvent,\n [Events.FileSystemsLoaded]: DevToolsFileSystem[],\n [Events.FileSystemRemoved]: Platform.DevToolsPath.RawPathString,\n [Events.FileSystemAdded]: FileSystemAddedEvent,\n [Events.FileSystemFilesChangedAddedRemoved]: FilesChangedEvent,\n [Events.IndexingTotalWorkCalculated]: IndexingTotalWorkCalculatedEvent,\n [Events.IndexingWorked]: IndexingWorkedEvent,\n [Events.IndexingDone]: IndexingEvent,\n [Events.KeyEventUnhandled]: KeyEventUnhandledEvent,\n [Events.ReloadInspectedPage]: boolean,\n [Events.RevealSourceLine]: RevealSourceLineEvent,\n [Events.SavedURL]: SavedURLEvent,\n [Events.SearchCompleted]: SearchCompletedEvent,\n [Events.SetInspectedTabId]: string,\n [Events.SetUseSoftMenu]: boolean,\n [Events.ShowPanel]: string,\n};\n\nexport interface InspectorFrontendHostAPI {\n addFileSystem(type?: string): void;\n\n loadCompleted(): void;\n\n indexPath(requestId: number, fileSystemPath: Platform.DevToolsPath.RawPathString, excludedFolders: string): void;\n\n /**\n * Requests inspected page to be placed atop of the inspector frontend with specified bounds.\n */\n setInspectedPageBounds(bounds: {\n x: number,\n y: number,\n width: number,\n height: number,\n }): void;\n\n showCertificateViewer(certChain: string[]): void;\n\n setWhitelistedShortcuts(shortcuts: string): void;\n\n setEyeDropperActive(active: boolean): void;\n\n inspectElementCompleted(): void;\n\n openInNewTab(url: Platform.DevToolsPath.UrlString): void;\n\n openSearchResultsInNewTab(query: string): void;\n\n showItemInFolder(fileSystemPath: Platform.DevToolsPath.RawPathString): void;\n\n removeFileSystem(fileSystemPath: Platform.DevToolsPath.RawPathString): void;\n\n requestFileSystems(): void;\n\n save(url: Platform.DevToolsPath.UrlString, content: string, forceSaveAs: boolean, isBase64: boolean): void;\n\n append(url: Platform.DevToolsPath.UrlString, content: string): void;\n\n close(url: Platform.DevToolsPath.UrlString): void;\n\n searchInPath(requestId: number, fileSystemPath: Platform.DevToolsPath.RawPathString, query: string): void;\n\n stopIndexing(requestId: number): void;\n\n bringToFront(): void;\n\n closeWindow(): void;\n\n copyText(text: string|null|undefined): void;\n\n inspectedURLChanged(url: Platform.DevToolsPath.UrlString): void;\n\n isolatedFileSystem(fileSystemId: string, registeredName: string): FileSystem|null;\n\n loadNetworkResource(\n url: string, headers: string, streamId: number, callback: (arg0: LoadNetworkResourceResult) => void): void;\n\n registerPreference(name: string, options: {synced?: boolean}): void;\n\n getPreferences(callback: (arg0: {\n [x: string]: string,\n }) => void): void;\n\n getPreference(name: string, callback: (arg0: string) => void): void;\n\n setPreference(name: string, value: string): void;\n\n removePreference(name: string): void;\n\n clearPreferences(): void;\n\n getSyncInformation(callback: (arg0: SyncInformation) => void): void;\n\n getHostConfig(callback: (arg0: Root.Runtime.HostConfig) => void): void;\n\n upgradeDraggedFileSystemPermissions(fileSystem: FileSystem): void;\n\n platform(): string;\n\n recordCountHistogram(histogramName: string, sample: number, min: number, exclusiveMax: number, bucketSize: number):\n void;\n\n recordEnumeratedHistogram(actionName: EnumeratedHistogram, actionCode: number, bucketSize: number): void;\n\n recordPerformanceHistogram(histogramName: string, duration: number): void;\n\n recordUserMetricsAction(umaName: string): void;\n\n sendMessageToBackend(message: string): void;\n\n setDevicesDiscoveryConfig(config: Adb.Config): void;\n\n setDevicesUpdatesEnabled(enabled: boolean): void;\n\n performActionOnRemotePage(pageId: string, action: string): void;\n\n openRemotePage(browserId: string, url: string): void;\n\n openNodeFrontend(): void;\n\n setInjectedScriptForOrigin(origin: string, script: string): void;\n\n setIsDocked(isDocked: boolean, callback: () => void): void;\n\n showSurvey(trigger: string, callback: (arg0: ShowSurveyResult) => void): void;\n\n canShowSurvey(trigger: string, callback: (arg0: CanShowSurveyResult) => void): void;\n\n zoomFactor(): number;\n\n zoomIn(): void;\n\n zoomOut(): void;\n\n resetZoom(): void;\n\n showContextMenuAtPoint(x: number, y: number, items: ContextMenuDescriptor[], document: Document): void;\n\n reattach(callback: () => void): void;\n\n readyForTest(): void;\n\n connectionReady(): void;\n\n setOpenNewWindowForPopups(value: boolean): void;\n\n isHostedMode(): boolean;\n\n setAddExtensionCallback(callback: (arg0: ExtensionDescriptor) => void): void;\n\n initialTargetId(): Promise;\n\n doAidaConversation: (request: string, streamId: number, cb: (result: DoAidaConversationResult) => void) => void;\n registerAidaClientEvent: (request: string, cb: (result: AidaClientResult) => void) => void;\n\n recordImpression(event: ImpressionEvent): void;\n recordClick(event: ClickEvent): void;\n recordHover(event: HoverEvent): void;\n recordDrag(event: DragEvent): void;\n recordChange(event: ChangeEvent): void;\n recordKeyDown(event: KeyDownEvent): void;\n}\n\nexport interface ContextMenuDescriptor {\n type: 'checkbox'|'item'|'separator'|'subMenu';\n id?: number;\n label?: string;\n enabled?: boolean;\n checked?: boolean;\n subItems?: ContextMenuDescriptor[];\n shortcut?: string;\n jslogContext?: string;\n}\nexport interface LoadNetworkResourceResult {\n statusCode: number;\n headers?: {\n [x: string]: string,\n };\n netError?: number;\n netErrorName?: string;\n urlValid?: boolean;\n messageOverride?: string;\n}\nexport interface ExtensionDescriptor {\n startPage: string;\n name: string;\n exposeExperimentalAPIs: boolean;\n hostsPolicy?: ExtensionHostsPolicy;\n allowFileAccess?: boolean;\n}\nexport interface ExtensionHostsPolicy {\n runtimeAllowedHosts: string[];\n runtimeBlockedHosts: string[];\n}\nexport interface ShowSurveyResult {\n surveyShown: boolean;\n}\nexport interface CanShowSurveyResult {\n canShowSurvey: boolean;\n}\nexport interface SyncInformation {\n /** Whether Chrome Sync is enabled and active */\n isSyncActive: boolean;\n /** Whether syncing of Chrome Settings is enabled via Chrome Sync is enabled */\n arePreferencesSynced?: boolean;\n /** The email of the account used for syncing */\n accountEmail?: string;\n /** The image of the account used for syncing. Its a base64 encoded PNG */\n accountImage?: string;\n}\n\n/**\n * Enum for recordPerformanceHistogram\n * Warning: There is another definition of this enum in the DevTools code\n * base, keep them in sync:\n * front_end/devtools_compatibility.js\n * @readonly\n */\nexport const enum EnumeratedHistogram {\n /* eslint-disable @typescript-eslint/naming-convention -- Shadows a legacy enum */\n ActionTaken = 'DevTools.ActionTaken',\n PanelShown = 'DevTools.PanelShown',\n PanelShownInLocation = 'DevTools.PanelShownInLocation',\n SidebarPaneShown = 'DevTools.SidebarPaneShown',\n KeyboardShortcutFired = 'DevTools.KeyboardShortcutFired',\n IssueCreated = 'DevTools.IssueCreated',\n IssuesPanelIssueExpanded = 'DevTools.IssuesPanelIssueExpanded',\n IssuesPanelOpenedFrom = 'DevTools.IssuesPanelOpenedFrom',\n IssuesPanelResourceOpened = 'DevTools.IssuesPanelResourceOpened',\n KeybindSetSettingChanged = 'DevTools.KeybindSetSettingChanged',\n ExperimentEnabledAtLaunch = 'DevTools.ExperimentEnabledAtLaunch',\n ExperimentDisabledAtLaunch = 'DevTools.ExperimentDisabledAtLaunch',\n ExperimentEnabled = 'DevTools.ExperimentEnabled',\n ExperimentDisabled = 'DevTools.ExperimentDisabled',\n DeveloperResourceLoaded = 'DevTools.DeveloperResourceLoaded',\n DeveloperResourceScheme = 'DevTools.DeveloperResourceScheme',\n Language = 'DevTools.Language',\n SyncSetting = 'DevTools.SyncSetting',\n RecordingAssertion = 'DevTools.RecordingAssertion',\n RecordingCodeToggled = 'DevTools.RecordingCodeToggled',\n RecordingCopiedToClipboard = 'DevTools.RecordingCopiedToClipboard',\n RecordingEdited = 'DevTools.RecordingEdited',\n RecordingExported = 'DevTools.RecordingExported',\n RecordingReplayFinished = 'DevTools.RecordingReplayFinished',\n RecordingReplaySpeed = 'DevTools.RecordingReplaySpeed',\n RecordingReplayStarted = 'DevTools.RecordingReplayStarted',\n RecordingToggled = 'DevTools.RecordingToggled',\n SourcesPanelFileDebugged = 'DevTools.SourcesPanelFileDebugged',\n SourcesPanelFileOpened = 'DevTools.SourcesPanelFileOpened',\n NetworkPanelResponsePreviewOpened = 'DevTools.NetworkPanelResponsePreviewOpened',\n StyleTextCopied = 'DevTools.StyleTextCopied',\n ManifestSectionSelected = 'DevTools.ManifestSectionSelected',\n CSSHintShown = 'DevTools.CSSHintShown',\n LighthouseModeRun = 'DevTools.LighthouseModeRun',\n LighthouseCategoryUsed = 'DevTools.LighthouseCategoryUsed',\n ColorPickerOpenedFrom = 'DevTools.ColorPickerOpenedFrom',\n CSSPropertyDocumentation = 'DevTools.CSSPropertyDocumentation',\n SwatchActivated = 'DevTools.SwatchActivated',\n AnimationPlaybackRateChanged = 'DevTools.AnimationPlaybackRateChanged',\n AnimationPointDragged = 'DevTools.AnimationPointDragged',\n LegacyResourceTypeFilterNumberOfSelectedChanged = 'DevTools.LegacyResourceTypeFilterNumberOfSelectedChanged',\n LegacyResourceTypeFilterItemSelected = 'DevTools.LegacyResourceTypeFilterItemSelected',\n ResourceTypeFilterNumberOfSelectedChanged = 'DevTools.ResourceTypeFilterNumberOfSelectedChanged',\n ResourceTypeFilterItemSelected = 'DevTools.ResourceTypeFilterItemSelected',\n NetworkPanelMoreFiltersNumberOfSelectedChanged = 'DevTools.NetworkPanelMoreFiltersNumberOfSelectedChanged',\n NetworkPanelMoreFiltersItemSelected = 'DevTools.NetworkPanelMoreFiltersItemSelected',\n /* eslint-disable @typescript-eslint/naming-convention -- Shadows a legacy enum */\n}\n"]}
\ No newline at end of file
+{"version":3,"file":"InspectorFrontendHostAPI.js","sourceRoot":"","sources":["../../../../../../front_end/core/host/InspectorFrontendHostAPI.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) 2015 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\nimport type * as Platform from '../../core/platform/platform.js';\nimport type * as Root from '../root/root.js';\n\nexport enum Events {\n /* eslint-disable @typescript-eslint/naming-convention -- Accessed from web_tests */\n AppendedToURL = 'appendedToURL',\n CanceledSaveURL = 'canceledSaveURL',\n ColorThemeChanged = 'colorThemeChanged',\n ContextMenuCleared = 'contextMenuCleared',\n ContextMenuItemSelected = 'contextMenuItemSelected',\n DeviceCountUpdated = 'deviceCountUpdated',\n DevicesDiscoveryConfigChanged = 'devicesDiscoveryConfigChanged',\n DevicesPortForwardingStatusChanged = 'devicesPortForwardingStatusChanged',\n DevicesUpdated = 'devicesUpdated',\n DispatchMessage = 'dispatchMessage',\n DispatchMessageChunk = 'dispatchMessageChunk',\n EnterInspectElementMode = 'enterInspectElementMode',\n EyeDropperPickedColor = 'eyeDropperPickedColor',\n FileSystemsLoaded = 'fileSystemsLoaded',\n FileSystemRemoved = 'fileSystemRemoved',\n FileSystemAdded = 'fileSystemAdded',\n FileSystemFilesChangedAddedRemoved = 'FileSystemFilesChangedAddedRemoved',\n IndexingTotalWorkCalculated = 'indexingTotalWorkCalculated',\n IndexingWorked = 'indexingWorked',\n IndexingDone = 'indexingDone',\n KeyEventUnhandled = 'keyEventUnhandled',\n ReloadInspectedPage = 'reloadInspectedPage',\n RevealSourceLine = 'revealSourceLine',\n SavedURL = 'savedURL',\n SearchCompleted = 'searchCompleted',\n SetInspectedTabId = 'setInspectedTabId',\n SetUseSoftMenu = 'setUseSoftMenu',\n ShowPanel = 'showPanel',\n /* eslint-enable @typescript-eslint/naming-convention */\n}\n\nexport const EventDescriptors = [\n [Events.AppendedToURL, 'appendedToURL', ['url']],\n [Events.CanceledSaveURL, 'canceledSaveURL', ['url']],\n [Events.ColorThemeChanged, 'colorThemeChanged', []],\n [Events.ContextMenuCleared, 'contextMenuCleared', []],\n [Events.ContextMenuItemSelected, 'contextMenuItemSelected', ['id']],\n [Events.DeviceCountUpdated, 'deviceCountUpdated', ['count']],\n [Events.DevicesDiscoveryConfigChanged, 'devicesDiscoveryConfigChanged', ['config']],\n [Events.DevicesPortForwardingStatusChanged, 'devicesPortForwardingStatusChanged', ['status']],\n [Events.DevicesUpdated, 'devicesUpdated', ['devices']],\n [Events.DispatchMessage, 'dispatchMessage', ['messageObject']],\n [Events.DispatchMessageChunk, 'dispatchMessageChunk', ['messageChunk', 'messageSize']],\n [Events.EnterInspectElementMode, 'enterInspectElementMode', []],\n [Events.EyeDropperPickedColor, 'eyeDropperPickedColor', ['color']],\n [Events.FileSystemsLoaded, 'fileSystemsLoaded', ['fileSystems']],\n [Events.FileSystemRemoved, 'fileSystemRemoved', ['fileSystemPath']],\n [Events.FileSystemAdded, 'fileSystemAdded', ['errorMessage', 'fileSystem']],\n [Events.FileSystemFilesChangedAddedRemoved, 'fileSystemFilesChangedAddedRemoved', ['changed', 'added', 'removed']],\n [Events.IndexingTotalWorkCalculated, 'indexingTotalWorkCalculated', ['requestId', 'fileSystemPath', 'totalWork']],\n [Events.IndexingWorked, 'indexingWorked', ['requestId', 'fileSystemPath', 'worked']],\n [Events.IndexingDone, 'indexingDone', ['requestId', 'fileSystemPath']],\n [Events.KeyEventUnhandled, 'keyEventUnhandled', ['event']],\n [Events.ReloadInspectedPage, 'reloadInspectedPage', ['hard']],\n [Events.RevealSourceLine, 'revealSourceLine', ['url', 'lineNumber', 'columnNumber']],\n [Events.SavedURL, 'savedURL', ['url', 'fileSystemPath']],\n [Events.SearchCompleted, 'searchCompleted', ['requestId', 'fileSystemPath', 'files']],\n [Events.SetInspectedTabId, 'setInspectedTabId', ['tabId']],\n [Events.SetUseSoftMenu, 'setUseSoftMenu', ['useSoftMenu']],\n [Events.ShowPanel, 'showPanel', ['panelName']],\n];\n\nexport interface DispatchMessageChunkEvent {\n messageChunk: string;\n messageSize: number;\n}\n\nexport interface EyeDropperPickedColorEvent {\n r: number;\n g: number;\n b: number;\n a: number;\n}\n\nexport interface DevToolsFileSystem {\n type: string;\n fileSystemName: string;\n rootURL: string;\n fileSystemPath: Platform.DevToolsPath.RawPathString;\n}\n\nexport interface FileSystemAddedEvent {\n errorMessage?: string;\n fileSystem: DevToolsFileSystem|null;\n}\n\nexport interface FilesChangedEvent {\n changed: Platform.DevToolsPath.RawPathString[];\n added: Platform.DevToolsPath.RawPathString[];\n removed: Platform.DevToolsPath.RawPathString[];\n}\n\nexport interface IndexingEvent {\n requestId: number;\n fileSystemPath: string;\n}\n\nexport interface IndexingTotalWorkCalculatedEvent extends IndexingEvent {\n totalWork: number;\n}\n\nexport interface IndexingWorkedEvent extends IndexingEvent {\n worked: number;\n}\n\nexport interface KeyEventUnhandledEvent {\n type: string;\n key: string;\n keyCode: number;\n modifiers: number;\n}\n\nexport interface RevealSourceLineEvent {\n url: Platform.DevToolsPath.UrlString;\n lineNumber: number;\n columnNumber: number;\n}\n\nexport interface SavedURLEvent {\n url: Platform.DevToolsPath.RawPathString|Platform.DevToolsPath.UrlString;\n fileSystemPath: Platform.DevToolsPath.RawPathString|Platform.DevToolsPath.UrlString;\n}\n\nexport interface SearchCompletedEvent {\n requestId: number;\n files: Platform.DevToolsPath.RawPathString[];\n}\n\nexport interface DoAidaConversationResult {\n statusCode?: number;\n headers?: {\n [x: string]: string,\n };\n netError?: number;\n netErrorName?: string;\n error?: string;\n detail?: string;\n}\n\nexport interface AidaClientResult {\n response?: string;\n error?: string;\n detail?: string;\n}\n\nexport interface VisualElementImpression {\n id: number;\n type: number;\n parent?: number;\n context?: number;\n width?: number;\n height?: number;\n}\n\nexport interface ImpressionEvent {\n impressions: VisualElementImpression[];\n}\n\nexport interface ResizeEvent {\n veid: number;\n width?: number;\n height?: number;\n}\n\nexport interface ClickEvent {\n veid: number;\n mouseButton?: number;\n context?: number;\n doubleClick: boolean;\n}\n\nexport interface HoverEvent {\n veid: number;\n time?: number;\n context?: number;\n}\n\nexport interface DragEvent {\n veid: number;\n context?: number;\n}\n\nexport interface ChangeEvent {\n veid: number;\n context?: number;\n}\n\nexport interface KeyDownEvent {\n veid?: number;\n context?: number;\n}\n\n// While `EventDescriptors` are used to dynamically dispatch host binding events,\n// the `EventTypes` \"type map\" is used for type-checking said events by TypeScript.\n// `EventTypes` is not used at runtime.\n// Please note that the \"dispatch\" side can't be type-checked as the dispatch is\n// done dynamically.\nexport type EventTypes = {\n [Events.AppendedToURL]: Platform.DevToolsPath.RawPathString|Platform.DevToolsPath.UrlString,\n [Events.CanceledSaveURL]: Platform.DevToolsPath.UrlString,\n [Events.ColorThemeChanged]: void,\n [Events.ContextMenuCleared]: void,\n [Events.ContextMenuItemSelected]: number,\n [Events.DeviceCountUpdated]: number,\n [Events.DevicesDiscoveryConfigChanged]: Adb.Config,\n [Events.DevicesPortForwardingStatusChanged]: void,\n [Events.DevicesUpdated]: void,\n [Events.DispatchMessage]: string,\n [Events.DispatchMessageChunk]: DispatchMessageChunkEvent,\n [Events.EnterInspectElementMode]: void,\n [Events.EyeDropperPickedColor]: EyeDropperPickedColorEvent,\n [Events.FileSystemsLoaded]: DevToolsFileSystem[],\n [Events.FileSystemRemoved]: Platform.DevToolsPath.RawPathString,\n [Events.FileSystemAdded]: FileSystemAddedEvent,\n [Events.FileSystemFilesChangedAddedRemoved]: FilesChangedEvent,\n [Events.IndexingTotalWorkCalculated]: IndexingTotalWorkCalculatedEvent,\n [Events.IndexingWorked]: IndexingWorkedEvent,\n [Events.IndexingDone]: IndexingEvent,\n [Events.KeyEventUnhandled]: KeyEventUnhandledEvent,\n [Events.ReloadInspectedPage]: boolean,\n [Events.RevealSourceLine]: RevealSourceLineEvent,\n [Events.SavedURL]: SavedURLEvent,\n [Events.SearchCompleted]: SearchCompletedEvent,\n [Events.SetInspectedTabId]: string,\n [Events.SetUseSoftMenu]: boolean,\n [Events.ShowPanel]: string,\n};\n\nexport interface InspectorFrontendHostAPI {\n addFileSystem(type?: string): void;\n\n loadCompleted(): void;\n\n indexPath(requestId: number, fileSystemPath: Platform.DevToolsPath.RawPathString, excludedFolders: string): void;\n\n /**\n * Requests inspected page to be placed atop of the inspector frontend with specified bounds.\n */\n setInspectedPageBounds(bounds: {\n x: number,\n y: number,\n width: number,\n height: number,\n }): void;\n\n showCertificateViewer(certChain: string[]): void;\n\n setWhitelistedShortcuts(shortcuts: string): void;\n\n setEyeDropperActive(active: boolean): void;\n\n inspectElementCompleted(): void;\n\n openInNewTab(url: Platform.DevToolsPath.UrlString): void;\n\n openSearchResultsInNewTab(query: string): void;\n\n showItemInFolder(fileSystemPath: Platform.DevToolsPath.RawPathString): void;\n\n removeFileSystem(fileSystemPath: Platform.DevToolsPath.RawPathString): void;\n\n requestFileSystems(): void;\n\n save(url: Platform.DevToolsPath.UrlString, content: string, forceSaveAs: boolean, isBase64: boolean): void;\n\n append(url: Platform.DevToolsPath.UrlString, content: string): void;\n\n close(url: Platform.DevToolsPath.UrlString): void;\n\n searchInPath(requestId: number, fileSystemPath: Platform.DevToolsPath.RawPathString, query: string): void;\n\n stopIndexing(requestId: number): void;\n\n bringToFront(): void;\n\n closeWindow(): void;\n\n copyText(text: string|null|undefined): void;\n\n inspectedURLChanged(url: Platform.DevToolsPath.UrlString): void;\n\n isolatedFileSystem(fileSystemId: string, registeredName: string): FileSystem|null;\n\n loadNetworkResource(\n url: string, headers: string, streamId: number, callback: (arg0: LoadNetworkResourceResult) => void): void;\n\n registerPreference(name: string, options: {synced?: boolean}): void;\n\n getPreferences(callback: (arg0: {\n [x: string]: string,\n }) => void): void;\n\n getPreference(name: string, callback: (arg0: string) => void): void;\n\n setPreference(name: string, value: string): void;\n\n removePreference(name: string): void;\n\n clearPreferences(): void;\n\n getSyncInformation(callback: (arg0: SyncInformation) => void): void;\n\n getHostConfig(callback: (arg0: Root.Runtime.HostConfig) => void): void;\n\n upgradeDraggedFileSystemPermissions(fileSystem: FileSystem): void;\n\n platform(): string;\n\n recordCountHistogram(histogramName: string, sample: number, min: number, exclusiveMax: number, bucketSize: number):\n void;\n\n recordEnumeratedHistogram(actionName: EnumeratedHistogram, actionCode: number, bucketSize: number): void;\n\n recordPerformanceHistogram(histogramName: string, duration: number): void;\n\n recordUserMetricsAction(umaName: string): void;\n\n sendMessageToBackend(message: string): void;\n\n setDevicesDiscoveryConfig(config: Adb.Config): void;\n\n setDevicesUpdatesEnabled(enabled: boolean): void;\n\n performActionOnRemotePage(pageId: string, action: string): void;\n\n openRemotePage(browserId: string, url: string): void;\n\n openNodeFrontend(): void;\n\n setInjectedScriptForOrigin(origin: string, script: string): void;\n\n setIsDocked(isDocked: boolean, callback: () => void): void;\n\n showSurvey(trigger: string, callback: (arg0: ShowSurveyResult) => void): void;\n\n canShowSurvey(trigger: string, callback: (arg0: CanShowSurveyResult) => void): void;\n\n zoomFactor(): number;\n\n zoomIn(): void;\n\n zoomOut(): void;\n\n resetZoom(): void;\n\n showContextMenuAtPoint(x: number, y: number, items: ContextMenuDescriptor[], document: Document): void;\n\n reattach(callback: () => void): void;\n\n readyForTest(): void;\n\n connectionReady(): void;\n\n setOpenNewWindowForPopups(value: boolean): void;\n\n isHostedMode(): boolean;\n\n setAddExtensionCallback(callback: (arg0: ExtensionDescriptor) => void): void;\n\n initialTargetId(): Promise;\n\n doAidaConversation: (request: string, streamId: number, cb: (result: DoAidaConversationResult) => void) => void;\n registerAidaClientEvent: (request: string, cb: (result: AidaClientResult) => void) => void;\n\n recordImpression(event: ImpressionEvent): void;\n recordClick(event: ClickEvent): void;\n recordHover(event: HoverEvent): void;\n recordDrag(event: DragEvent): void;\n recordChange(event: ChangeEvent): void;\n recordKeyDown(event: KeyDownEvent): void;\n}\n\nexport interface ContextMenuDescriptor {\n type: 'checkbox'|'item'|'separator'|'subMenu';\n id?: number;\n label?: string;\n enabled?: boolean;\n checked?: boolean;\n subItems?: ContextMenuDescriptor[];\n shortcut?: string;\n jslogContext?: string;\n}\nexport interface LoadNetworkResourceResult {\n statusCode: number;\n headers?: {\n [x: string]: string,\n };\n netError?: number;\n netErrorName?: string;\n urlValid?: boolean;\n messageOverride?: string;\n}\nexport interface ExtensionDescriptor {\n startPage: string;\n name: string;\n exposeExperimentalAPIs: boolean;\n hostsPolicy?: ExtensionHostsPolicy;\n allowFileAccess?: boolean;\n}\nexport interface ExtensionHostsPolicy {\n runtimeAllowedHosts: string[];\n runtimeBlockedHosts: string[];\n}\nexport interface ShowSurveyResult {\n surveyShown: boolean;\n}\nexport interface CanShowSurveyResult {\n canShowSurvey: boolean;\n}\nexport interface SyncInformation {\n /** Whether Chrome Sync is enabled and active */\n isSyncActive: boolean;\n /** Whether syncing of Chrome Settings is enabled via Chrome Sync is enabled */\n arePreferencesSynced?: boolean;\n /** The email of the account used for syncing */\n accountEmail?: string;\n /** The image of the account used for syncing. Its a base64 encoded PNG */\n accountImage?: string;\n /** The full name of the account used for syncing */\n accountFullName?: string;\n}\n\n/**\n * Enum for recordPerformanceHistogram\n * Warning: There is another definition of this enum in the DevTools code\n * base, keep them in sync:\n * front_end/devtools_compatibility.js\n * @readonly\n */\nexport const enum EnumeratedHistogram {\n /* eslint-disable @typescript-eslint/naming-convention -- Shadows a legacy enum */\n ActionTaken = 'DevTools.ActionTaken',\n PanelShown = 'DevTools.PanelShown',\n PanelShownInLocation = 'DevTools.PanelShownInLocation',\n SidebarPaneShown = 'DevTools.SidebarPaneShown',\n KeyboardShortcutFired = 'DevTools.KeyboardShortcutFired',\n IssueCreated = 'DevTools.IssueCreated',\n IssuesPanelIssueExpanded = 'DevTools.IssuesPanelIssueExpanded',\n IssuesPanelOpenedFrom = 'DevTools.IssuesPanelOpenedFrom',\n IssuesPanelResourceOpened = 'DevTools.IssuesPanelResourceOpened',\n KeybindSetSettingChanged = 'DevTools.KeybindSetSettingChanged',\n ExperimentEnabledAtLaunch = 'DevTools.ExperimentEnabledAtLaunch',\n ExperimentDisabledAtLaunch = 'DevTools.ExperimentDisabledAtLaunch',\n ExperimentEnabled = 'DevTools.ExperimentEnabled',\n ExperimentDisabled = 'DevTools.ExperimentDisabled',\n DeveloperResourceLoaded = 'DevTools.DeveloperResourceLoaded',\n DeveloperResourceScheme = 'DevTools.DeveloperResourceScheme',\n Language = 'DevTools.Language',\n SyncSetting = 'DevTools.SyncSetting',\n RecordingAssertion = 'DevTools.RecordingAssertion',\n RecordingCodeToggled = 'DevTools.RecordingCodeToggled',\n RecordingCopiedToClipboard = 'DevTools.RecordingCopiedToClipboard',\n RecordingEdited = 'DevTools.RecordingEdited',\n RecordingExported = 'DevTools.RecordingExported',\n RecordingReplayFinished = 'DevTools.RecordingReplayFinished',\n RecordingReplaySpeed = 'DevTools.RecordingReplaySpeed',\n RecordingReplayStarted = 'DevTools.RecordingReplayStarted',\n RecordingToggled = 'DevTools.RecordingToggled',\n SourcesPanelFileDebugged = 'DevTools.SourcesPanelFileDebugged',\n SourcesPanelFileOpened = 'DevTools.SourcesPanelFileOpened',\n NetworkPanelResponsePreviewOpened = 'DevTools.NetworkPanelResponsePreviewOpened',\n StyleTextCopied = 'DevTools.StyleTextCopied',\n ManifestSectionSelected = 'DevTools.ManifestSectionSelected',\n CSSHintShown = 'DevTools.CSSHintShown',\n LighthouseModeRun = 'DevTools.LighthouseModeRun',\n LighthouseCategoryUsed = 'DevTools.LighthouseCategoryUsed',\n ColorPickerOpenedFrom = 'DevTools.ColorPickerOpenedFrom',\n CSSPropertyDocumentation = 'DevTools.CSSPropertyDocumentation',\n SwatchActivated = 'DevTools.SwatchActivated',\n AnimationPlaybackRateChanged = 'DevTools.AnimationPlaybackRateChanged',\n AnimationPointDragged = 'DevTools.AnimationPointDragged',\n LegacyResourceTypeFilterNumberOfSelectedChanged = 'DevTools.LegacyResourceTypeFilterNumberOfSelectedChanged',\n LegacyResourceTypeFilterItemSelected = 'DevTools.LegacyResourceTypeFilterItemSelected',\n ResourceTypeFilterNumberOfSelectedChanged = 'DevTools.ResourceTypeFilterNumberOfSelectedChanged',\n ResourceTypeFilterItemSelected = 'DevTools.ResourceTypeFilterItemSelected',\n NetworkPanelMoreFiltersNumberOfSelectedChanged = 'DevTools.NetworkPanelMoreFiltersNumberOfSelectedChanged',\n NetworkPanelMoreFiltersItemSelected = 'DevTools.NetworkPanelMoreFiltersItemSelected',\n /* eslint-disable @typescript-eslint/naming-convention -- Shadows a legacy enum */\n}\n"]}
\ No newline at end of file
diff --git a/public/core/host/UserMetrics.d.ts b/public/core/host/UserMetrics.d.ts
index c58451f8f..efa495a8e 100644
--- a/public/core/host/UserMetrics.d.ts
+++ b/public/core/host/UserMetrics.d.ts
@@ -220,7 +220,16 @@ export declare enum Action {
InsightsOnboardingNextPage = 157,
InsightsOnboardingPrevPage = 158,
InsightsOnboardingFeatureDisabled = 159,
- MAX_VALUE = 160
+ InsightsOptInTeaserShown = 160,
+ InsightsOptInTeaserSettingsLinkClicked = 161,
+ InsightsOptInTeaserConfirmedInSettings = 162,
+ InsightsReminderTeaserShown = 163,
+ InsightsReminderTeaserConfirmed = 164,
+ InsightsReminderTeaserCanceled = 165,
+ InsightsReminderTeaserSettingsLinkClicked = 166,
+ InsightsReminderTeaserAbortedInSettings = 167,
+ GeneratingInsightWithoutDisclaimer = 168,
+ MAX_VALUE = 169
}
export declare enum PanelCodes {
elements = 1,
@@ -633,13 +642,10 @@ export declare enum DevtoolsExperiments {
'instrumentation-breakpoints' = 61,
'authored-deployed-grouping' = 63,
'just-my-code' = 65,
- 'preloading-status-panel' = 68,
- 'outermost-target-selector' = 71,
'highlight-errors-elements-panel' = 73,
'use-source-map-scopes' = 76,
'network-panel-filter-bar-redesign' = 79,
'autofill-view' = 82,
- 'sources-frame-indentation-markers-temporarily-disable' = 83,
'css-type-component-length-deprecate' = 85,
'timeline-show-postmessage-events' = 86,
'timeline-enhanced-traces' = 90,
@@ -650,7 +656,8 @@ export declare enum DevtoolsExperiments {
'timeline-observations' = 96,
'gen-ai-settings-panel' = 97,
'timeline-server-timings' = 98,
- MAX_VALUE = 99
+ 'timeline-layout-shift-details' = 99,
+ MAX_VALUE = 100
}
export declare const enum ColorPickerOpenedFrom {
SOURCES_PANEL = 0,
diff --git a/public/core/host/UserMetrics.js b/public/core/host/UserMetrics.js
index 2aa11935a..85ade0c23 100644
--- a/public/core/host/UserMetrics.js
+++ b/public/core/host/UserMetrics.js
@@ -458,7 +458,16 @@ export var Action;
Action[Action["InsightsOnboardingNextPage"] = 157] = "InsightsOnboardingNextPage";
Action[Action["InsightsOnboardingPrevPage"] = 158] = "InsightsOnboardingPrevPage";
Action[Action["InsightsOnboardingFeatureDisabled"] = 159] = "InsightsOnboardingFeatureDisabled";
- Action[Action["MAX_VALUE"] = 160] = "MAX_VALUE";
+ Action[Action["InsightsOptInTeaserShown"] = 160] = "InsightsOptInTeaserShown";
+ Action[Action["InsightsOptInTeaserSettingsLinkClicked"] = 161] = "InsightsOptInTeaserSettingsLinkClicked";
+ Action[Action["InsightsOptInTeaserConfirmedInSettings"] = 162] = "InsightsOptInTeaserConfirmedInSettings";
+ Action[Action["InsightsReminderTeaserShown"] = 163] = "InsightsReminderTeaserShown";
+ Action[Action["InsightsReminderTeaserConfirmed"] = 164] = "InsightsReminderTeaserConfirmed";
+ Action[Action["InsightsReminderTeaserCanceled"] = 165] = "InsightsReminderTeaserCanceled";
+ Action[Action["InsightsReminderTeaserSettingsLinkClicked"] = 166] = "InsightsReminderTeaserSettingsLinkClicked";
+ Action[Action["InsightsReminderTeaserAbortedInSettings"] = 167] = "InsightsReminderTeaserAbortedInSettings";
+ Action[Action["GeneratingInsightWithoutDisclaimer"] = 168] = "GeneratingInsightWithoutDisclaimer";
+ Action[Action["MAX_VALUE"] = 169] = "MAX_VALUE";
/* eslint-enable @typescript-eslint/naming-convention */
})(Action || (Action = {}));
export var PanelCodes;
@@ -883,13 +892,10 @@ export var DevtoolsExperiments;
DevtoolsExperiments[DevtoolsExperiments["instrumentation-breakpoints"] = 61] = "instrumentation-breakpoints";
DevtoolsExperiments[DevtoolsExperiments["authored-deployed-grouping"] = 63] = "authored-deployed-grouping";
DevtoolsExperiments[DevtoolsExperiments["just-my-code"] = 65] = "just-my-code";
- DevtoolsExperiments[DevtoolsExperiments["preloading-status-panel"] = 68] = "preloading-status-panel";
- DevtoolsExperiments[DevtoolsExperiments["outermost-target-selector"] = 71] = "outermost-target-selector";
DevtoolsExperiments[DevtoolsExperiments["highlight-errors-elements-panel"] = 73] = "highlight-errors-elements-panel";
DevtoolsExperiments[DevtoolsExperiments["use-source-map-scopes"] = 76] = "use-source-map-scopes";
DevtoolsExperiments[DevtoolsExperiments["network-panel-filter-bar-redesign"] = 79] = "network-panel-filter-bar-redesign";
DevtoolsExperiments[DevtoolsExperiments["autofill-view"] = 82] = "autofill-view";
- DevtoolsExperiments[DevtoolsExperiments["sources-frame-indentation-markers-temporarily-disable"] = 83] = "sources-frame-indentation-markers-temporarily-disable";
DevtoolsExperiments[DevtoolsExperiments["css-type-component-length-deprecate"] = 85] = "css-type-component-length-deprecate";
DevtoolsExperiments[DevtoolsExperiments["timeline-show-postmessage-events"] = 86] = "timeline-show-postmessage-events";
DevtoolsExperiments[DevtoolsExperiments["timeline-enhanced-traces"] = 90] = "timeline-enhanced-traces";
@@ -900,9 +906,10 @@ export var DevtoolsExperiments;
DevtoolsExperiments[DevtoolsExperiments["timeline-observations"] = 96] = "timeline-observations";
DevtoolsExperiments[DevtoolsExperiments["gen-ai-settings-panel"] = 97] = "gen-ai-settings-panel";
DevtoolsExperiments[DevtoolsExperiments["timeline-server-timings"] = 98] = "timeline-server-timings";
+ DevtoolsExperiments[DevtoolsExperiments["timeline-layout-shift-details"] = 99] = "timeline-layout-shift-details";
/* eslint-enable @typescript-eslint/naming-convention */
// Increment this when new experiments are added.
- DevtoolsExperiments[DevtoolsExperiments["MAX_VALUE"] = 99] = "MAX_VALUE";
+ DevtoolsExperiments[DevtoolsExperiments["MAX_VALUE"] = 100] = "MAX_VALUE";
})(DevtoolsExperiments || (DevtoolsExperiments = {}));
// Update DevToolsIssuesPanelIssueExpanded from tools/metrics/histograms/enums.xml if new enum is added.
export var IssueExpanded;
diff --git a/public/core/host/UserMetrics.js.map b/public/core/host/UserMetrics.js.map
index 49454e04a..5ab8dd712 100644
--- a/public/core/host/UserMetrics.js.map
+++ b/public/core/host/UserMetrics.js.map
@@ -1 +1 @@
-{"version":3,"file":"UserMetrics.js","sourceRoot":"","sources":["../../../../../../front_end/core/host/UserMetrics.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright (C) 2011 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n * * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport {InspectorFrontendHostInstance} from './InspectorFrontendHost.js';\nimport {EnumeratedHistogram} from './InspectorFrontendHostAPI.js';\n\nexport class UserMetrics {\n #panelChangedSinceLaunch: boolean;\n #firedLaunchHistogram: boolean;\n #launchPanelName: string;\n constructor() {\n this.#panelChangedSinceLaunch = false;\n this.#firedLaunchHistogram = false;\n this.#launchPanelName = '';\n }\n\n panelShown(panelName: string, isLaunching?: boolean): void {\n const code = PanelCodes[panelName as keyof typeof PanelCodes] || 0;\n InspectorFrontendHostInstance.recordEnumeratedHistogram(EnumeratedHistogram.PanelShown, code, PanelCodes.MAX_VALUE);\n InspectorFrontendHostInstance.recordUserMetricsAction('DevTools_PanelShown_' + panelName);\n // Store that the user has changed the panel so we know launch histograms should not be fired.\n if (!isLaunching) {\n this.#panelChangedSinceLaunch = true;\n }\n }\n\n panelShownInLocation(panelName: string, location: 'main'|'drawer'): void {\n const panelWithLocationName = `${panelName}-${location}`;\n const panelWithLocation = PanelWithLocation[panelWithLocationName as keyof typeof PanelWithLocation] || 0;\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.PanelShownInLocation,\n panelWithLocation,\n PanelWithLocation.MAX_VALUE,\n );\n }\n\n settingsPanelShown(settingsViewId: string): void {\n this.panelShown('settings-' + settingsViewId);\n }\n\n sourcesPanelFileDebugged(mediaType?: string): void {\n const code = (mediaType && MediaTypes[mediaType as keyof typeof MediaTypes]) || MediaTypes.Unknown;\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.SourcesPanelFileDebugged, code, MediaTypes.MAX_VALUE);\n }\n\n sourcesPanelFileOpened(mediaType?: string): void {\n const code = (mediaType && MediaTypes[mediaType as keyof typeof MediaTypes]) || MediaTypes.Unknown;\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.SourcesPanelFileOpened, code, MediaTypes.MAX_VALUE);\n }\n\n networkPanelResponsePreviewOpened(mediaType: string): void {\n const code = (mediaType && MediaTypes[mediaType as keyof typeof MediaTypes]) || MediaTypes.Unknown;\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.NetworkPanelResponsePreviewOpened, code, MediaTypes.MAX_VALUE);\n }\n\n actionTaken(action: Action): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(EnumeratedHistogram.ActionTaken, action, Action.MAX_VALUE);\n }\n\n panelLoaded(panelName: string, histogramName: string): void {\n if (this.#firedLaunchHistogram || panelName !== this.#launchPanelName) {\n return;\n }\n\n this.#firedLaunchHistogram = true;\n // Use rAF and window.setTimeout to ensure the marker is fired after layout and rendering.\n // This will give the most accurate representation of the tool being ready for a user.\n requestAnimationFrame(() => {\n window.setTimeout(() => {\n // Mark the load time so that we can pinpoint it more easily in a trace.\n performance.mark(histogramName);\n // If the user has switched panel before we finished loading, ignore the histogram,\n // since the launch timings will have been affected and are no longer valid.\n if (this.#panelChangedSinceLaunch) {\n return;\n }\n // This fires the event for the appropriate launch histogram.\n // The duration is measured as the time elapsed since the time origin of the document.\n InspectorFrontendHostInstance.recordPerformanceHistogram(histogramName, performance.now());\n }, 0);\n });\n }\n\n setLaunchPanel(panelName: string|null): void {\n this.#launchPanelName = (panelName as string);\n }\n\n performanceTraceLoad(measure: PerformanceMeasure): void {\n InspectorFrontendHostInstance.recordPerformanceHistogram('DevTools.TraceLoad', measure.duration);\n }\n\n keybindSetSettingChanged(keybindSet: string): void {\n const value = KeybindSetSettings[keybindSet as keyof typeof KeybindSetSettings] || 0;\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.KeybindSetSettingChanged, value, KeybindSetSettings.MAX_VALUE);\n }\n\n keyboardShortcutFired(actionId: string): void {\n const action =\n KeyboardShortcutAction[actionId as keyof typeof KeyboardShortcutAction] || KeyboardShortcutAction.OtherShortcut;\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.KeyboardShortcutFired, action, KeyboardShortcutAction.MAX_VALUE);\n }\n\n issuesPanelOpenedFrom(issueOpener: IssueOpener): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.IssuesPanelOpenedFrom, issueOpener, IssueOpener.MAX_VALUE);\n }\n\n issuesPanelIssueExpanded(issueExpandedCategory: string|undefined): void {\n if (issueExpandedCategory === undefined) {\n return;\n }\n\n const issueExpanded = IssueExpanded[issueExpandedCategory as keyof typeof IssueExpanded];\n\n if (issueExpanded === undefined) {\n return;\n }\n\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.IssuesPanelIssueExpanded, issueExpanded, IssueExpanded.MAX_VALUE);\n }\n\n issuesPanelResourceOpened(issueCategory: string, type: string): void {\n const key = issueCategory + type;\n const value = IssueResourceOpened[key as keyof typeof IssueResourceOpened];\n\n if (value === undefined) {\n return;\n }\n\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.IssuesPanelResourceOpened, value, IssueResourceOpened.MAX_VALUE);\n }\n\n issueCreated(code: string): void {\n const issueCreated = IssueCreated[code as keyof typeof IssueCreated];\n if (issueCreated === undefined) {\n return;\n }\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.IssueCreated, issueCreated, IssueCreated.MAX_VALUE);\n }\n\n experimentEnabledAtLaunch(experimentId: string): void {\n const experiment = DevtoolsExperiments[experimentId as keyof typeof DevtoolsExperiments];\n if (experiment === undefined) {\n return;\n }\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.ExperimentEnabledAtLaunch, experiment, DevtoolsExperiments.MAX_VALUE);\n }\n\n experimentDisabledAtLaunch(experimentId: string): void {\n const experiment = DevtoolsExperiments[experimentId as keyof typeof DevtoolsExperiments];\n if (experiment === undefined) {\n return;\n }\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.ExperimentDisabledAtLaunch, experiment, DevtoolsExperiments.MAX_VALUE);\n }\n\n experimentChanged(experimentId: string, isEnabled: boolean): void {\n const experiment = DevtoolsExperiments[experimentId as keyof typeof DevtoolsExperiments];\n if (experiment === undefined) {\n return;\n }\n const actionName = isEnabled ? EnumeratedHistogram.ExperimentEnabled : EnumeratedHistogram.ExperimentDisabled;\n InspectorFrontendHostInstance.recordEnumeratedHistogram(actionName, experiment, DevtoolsExperiments.MAX_VALUE);\n }\n\n developerResourceLoaded(developerResourceLoaded: DeveloperResourceLoaded): void {\n if (developerResourceLoaded >= DeveloperResourceLoaded.MAX_VALUE) {\n return;\n }\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.DeveloperResourceLoaded, developerResourceLoaded, DeveloperResourceLoaded.MAX_VALUE);\n }\n\n developerResourceScheme(developerResourceScheme: DeveloperResourceScheme): void {\n if (developerResourceScheme >= DeveloperResourceScheme.MAX_VALUE) {\n return;\n }\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.DeveloperResourceScheme, developerResourceScheme, DeveloperResourceScheme.MAX_VALUE);\n }\n\n language(language: Intl.UnicodeBCP47LocaleIdentifier): void {\n const languageCode = Language[language as keyof typeof Language];\n if (languageCode === undefined) {\n return;\n }\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.Language, languageCode, Language.MAX_VALUE);\n }\n\n syncSetting(devtoolsSyncSettingEnabled: boolean): void {\n InspectorFrontendHostInstance.getSyncInformation(syncInfo => {\n let settingValue = SyncSetting.CHROME_SYNC_DISABLED;\n if (syncInfo.isSyncActive && !syncInfo.arePreferencesSynced) {\n settingValue = SyncSetting.CHROME_SYNC_SETTINGS_DISABLED;\n } else if (syncInfo.isSyncActive && syncInfo.arePreferencesSynced) {\n settingValue = devtoolsSyncSettingEnabled ? SyncSetting.DEVTOOLS_SYNC_SETTING_ENABLED :\n SyncSetting.DEVTOOLS_SYNC_SETTING_DISABLED;\n }\n\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.SyncSetting, settingValue, SyncSetting.MAX_VALUE);\n });\n }\n\n recordingAssertion(value: RecordingAssertion): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.RecordingAssertion, value, RecordingAssertion.MAX_VALUE);\n }\n\n recordingToggled(value: RecordingToggled): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.RecordingToggled, value, RecordingToggled.MAX_VALUE);\n }\n\n recordingReplayFinished(value: RecordingReplayFinished): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.RecordingReplayFinished, value, RecordingReplayFinished.MAX_VALUE);\n }\n\n recordingReplaySpeed(value: RecordingReplaySpeed): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.RecordingReplaySpeed, value, RecordingReplaySpeed.MAX_VALUE);\n }\n\n recordingReplayStarted(value: RecordingReplayStarted): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.RecordingReplayStarted, value, RecordingReplayStarted.MAX_VALUE);\n }\n\n recordingEdited(value: RecordingEdited): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.RecordingEdited, value, RecordingEdited.MAX_VALUE);\n }\n\n recordingExported(value: RecordingExported): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.RecordingExported, value, RecordingExported.MAX_VALUE);\n }\n\n recordingCodeToggled(value: RecordingCodeToggled): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.RecordingCodeToggled, value, RecordingCodeToggled.MAX_VALUE);\n }\n\n recordingCopiedToClipboard(value: RecordingCopiedToClipboard): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.RecordingCopiedToClipboard, value, RecordingCopiedToClipboard.MAX_VALUE);\n }\n\n styleTextCopied(value: StyleTextCopied): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.StyleTextCopied, value, StyleTextCopied.MAX_VALUE);\n }\n\n manifestSectionSelected(sectionTitle: string): void {\n const code =\n ManifestSectionCodes[sectionTitle as keyof typeof ManifestSectionCodes] || ManifestSectionCodes.OtherSection;\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.ManifestSectionSelected, code, ManifestSectionCodes.MAX_VALUE);\n }\n\n cssHintShown(type: CSSHintType): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.CSSHintShown, type, CSSHintType.MAX_VALUE);\n }\n\n lighthouseModeRun(type: LighthouseModeRun): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.LighthouseModeRun, type, LighthouseModeRun.MAX_VALUE);\n }\n\n lighthouseCategoryUsed(type: LighthouseCategoryUsed): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.LighthouseCategoryUsed, type, LighthouseCategoryUsed.MAX_VALUE);\n }\n\n colorPickerOpenedFrom(type: ColorPickerOpenedFrom): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.ColorPickerOpenedFrom, type, ColorPickerOpenedFrom.MAX_VALUE);\n }\n\n cssPropertyDocumentation(type: CSSPropertyDocumentation): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.CSSPropertyDocumentation, type, CSSPropertyDocumentation.MAX_VALUE);\n }\n\n swatchActivated(swatch: SwatchType): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.SwatchActivated, swatch, SwatchType.MAX_VALUE);\n }\n\n animationPlaybackRateChanged(playbackRate: AnimationsPlaybackRate): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.AnimationPlaybackRateChanged, playbackRate, AnimationsPlaybackRate.MAX_VALUE);\n }\n\n animationPointDragged(dragType: AnimationPointDragType): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.AnimationPointDragged, dragType, AnimationPointDragType.MAX_VALUE);\n }\n\n workspacesPopulated(wallClockTimeInMilliseconds: number): void {\n InspectorFrontendHostInstance.recordPerformanceHistogram(\n 'DevTools.Workspaces.PopulateWallClocktime', wallClockTimeInMilliseconds);\n }\n\n visualLoggingProcessingDone(timeInMilliseconds: number): void {\n InspectorFrontendHostInstance.recordPerformanceHistogram(\n 'DevTools.VisualLogging.ProcessingTime', timeInMilliseconds);\n }\n\n legacyResourceTypeFilterNumberOfSelectedChanged(itemCount: number): void {\n const boundItemCount = Math.max(Math.min(itemCount, ResourceType.MAX_VALUE - 1), 1);\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.LegacyResourceTypeFilterNumberOfSelectedChanged, boundItemCount, ResourceType.MAX_VALUE);\n }\n\n legacyResourceTypeFilterItemSelected(resourceTypeName: string): void {\n const resourceType = ResourceType[resourceTypeName as keyof typeof ResourceType];\n if (resourceType === undefined) {\n return;\n }\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.LegacyResourceTypeFilterItemSelected, resourceType, ResourceType.MAX_VALUE);\n }\n\n resourceTypeFilterNumberOfSelectedChanged(itemCount: number): void {\n const boundItemCount = Math.max(Math.min(itemCount, ResourceType.MAX_VALUE - 1), 1);\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.ResourceTypeFilterNumberOfSelectedChanged, boundItemCount, ResourceType.MAX_VALUE);\n }\n\n resourceTypeFilterItemSelected(resourceTypeName: string): void {\n const resourceType = ResourceType[resourceTypeName as keyof typeof ResourceType];\n if (resourceType === undefined) {\n return;\n }\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.ResourceTypeFilterItemSelected, resourceType, ResourceType.MAX_VALUE);\n }\n\n networkPanelMoreFiltersNumberOfSelectedChanged(itemCount: number): void {\n const boundItemCount = Math.max(Math.min(itemCount, NetworkPanelMoreFilters.MAX_VALUE), 0);\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.NetworkPanelMoreFiltersNumberOfSelectedChanged, boundItemCount,\n NetworkPanelMoreFilters.MAX_VALUE);\n }\n\n networkPanelMoreFiltersItemSelected(filterName: string): void {\n const filter = NetworkPanelMoreFilters[filterName as keyof typeof NetworkPanelMoreFilters];\n if (filter === undefined) {\n return;\n }\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.NetworkPanelMoreFiltersItemSelected, filter, NetworkPanelMoreFilters.MAX_VALUE);\n }\n}\n\n/**\n * The numeric enum values are not necessarily continuous! It is possible that\n * values have been removed, which results in gaps in the sequence of values.\n * When adding a new value:\n * 1. Add an entry to the bottom of the enum before 'MAX_VALUE'.\n * 2. Set the value of the new entry to the current value of 'MAX_VALUE'.\n * 2. Increment the value of 'MAX_VALUE' by 1.\n * When removing a value which is no longer needed:\n * 1. Delete the line with the unneeded value\n * 2. Do not update any 'MAX_VALUE' or any other value.\n */\n\n// Codes below are used to collect UMA histograms in the Chromium port.\n// Do not change the values below, additional actions are needed on the Chromium side\n// in order to add more codes.\nexport enum Action {\n /* eslint-disable @typescript-eslint/naming-convention */\n WindowDocked = 1,\n WindowUndocked = 2,\n ScriptsBreakpointSet = 3,\n TimelineStarted = 4,\n ProfilesCPUProfileTaken = 5,\n ProfilesHeapProfileTaken = 6,\n ConsoleEvaluated = 8,\n FileSavedInWorkspace = 9,\n DeviceModeEnabled = 10,\n AnimationsPlaybackRateChanged = 11,\n RevisionApplied = 12,\n FileSystemDirectoryContentReceived = 13,\n StyleRuleEdited = 14,\n CommandEvaluatedInConsolePanel = 15,\n DOMPropertiesExpanded = 16,\n ResizedViewInResponsiveMode = 17,\n TimelinePageReloadStarted = 18,\n ConnectToNodeJSFromFrontend = 19,\n ConnectToNodeJSDirectly = 20,\n CpuThrottlingEnabled = 21,\n CpuProfileNodeFocused = 22,\n CpuProfileNodeExcluded = 23,\n SelectFileFromFilePicker = 24,\n SelectCommandFromCommandMenu = 25,\n ChangeInspectedNodeInElementsPanel = 26,\n StyleRuleCopied = 27,\n CoverageStarted = 28,\n LighthouseStarted = 29,\n LighthouseFinished = 30,\n ShowedThirdPartyBadges = 31,\n LighthouseViewTrace = 32,\n FilmStripStartedRecording = 33,\n CoverageReportFiltered = 34,\n CoverageStartedPerBlock = 35,\n 'SettingsOpenedFromGear-deprecated' = 36,\n 'SettingsOpenedFromMenu-deprecated' = 37,\n 'SettingsOpenedFromCommandMenu-deprecated' = 38,\n TabMovedToDrawer = 39,\n TabMovedToMainPanel = 40,\n CaptureCssOverviewClicked = 41,\n VirtualAuthenticatorEnvironmentEnabled = 42,\n SourceOrderViewActivated = 43,\n UserShortcutAdded = 44,\n ShortcutRemoved = 45,\n ShortcutModified = 46,\n CustomPropertyLinkClicked = 47,\n CustomPropertyEdited = 48,\n ServiceWorkerNetworkRequestClicked = 49,\n ServiceWorkerNetworkRequestClosedQuickly = 50,\n NetworkPanelServiceWorkerRespondWith = 51,\n NetworkPanelCopyValue = 52,\n ConsoleSidebarOpened = 53,\n PerfPanelTraceImported = 54,\n PerfPanelTraceExported = 55,\n StackFrameRestarted = 56,\n CaptureTestProtocolClicked = 57,\n BreakpointRemovedFromRemoveButton = 58,\n BreakpointGroupExpandedStateChanged = 59,\n HeaderOverrideFileCreated = 60,\n HeaderOverrideEnableEditingClicked = 61,\n HeaderOverrideHeaderAdded = 62,\n HeaderOverrideHeaderEdited = 63,\n HeaderOverrideHeaderRemoved = 64,\n HeaderOverrideHeadersFileEdited = 65,\n PersistenceNetworkOverridesEnabled = 66,\n PersistenceNetworkOverridesDisabled = 67,\n BreakpointRemovedFromContextMenu = 68,\n BreakpointsInFileRemovedFromRemoveButton = 69,\n BreakpointsInFileRemovedFromContextMenu = 70,\n BreakpointsInFileCheckboxToggled = 71,\n BreakpointsInFileEnabledDisabledFromContextMenu = 72,\n BreakpointConditionEditedFromSidebar = 73,\n WorkspaceTabAddFolder = 74,\n WorkspaceTabRemoveFolder = 75,\n OverrideTabAddFolder = 76,\n OverrideTabRemoveFolder = 77,\n WorkspaceSourceSelected = 78,\n OverridesSourceSelected = 79,\n StyleSheetInitiatorLinkClicked = 80,\n BreakpointRemovedFromGutterContextMenu = 81,\n BreakpointRemovedFromGutterToggle = 82,\n StylePropertyInsideKeyframeEdited = 83,\n OverrideContentFromSourcesContextMenu = 84,\n OverrideContentFromNetworkContextMenu = 85,\n OverrideScript = 86,\n OverrideStyleSheet = 87,\n OverrideDocument = 88,\n OverrideFetchXHR = 89,\n OverrideImage = 90,\n OverrideFont = 91,\n OverrideContentContextMenuSetup = 92,\n OverrideContentContextMenuAbandonSetup = 93,\n OverrideContentContextMenuActivateDisabled = 94,\n OverrideContentContextMenuOpenExistingFile = 95,\n OverrideContentContextMenuSaveNewFile = 96,\n ShowAllOverridesFromSourcesContextMenu = 97,\n ShowAllOverridesFromNetworkContextMenu = 98,\n AnimationGroupsCleared = 99,\n AnimationsPaused = 100,\n AnimationsResumed = 101,\n AnimatedNodeDescriptionClicked = 102,\n AnimationGroupScrubbed = 103,\n AnimationGroupReplayed = 104,\n OverrideTabDeleteFolderContextMenu = 105,\n WorkspaceDropFolder = 107,\n WorkspaceSelectFolder = 108,\n OverrideContentContextMenuSourceMappedWarning = 109,\n OverrideContentContextMenuRedirectToDeployed = 110,\n NewStyleRuleAdded = 111,\n TraceExpanded = 112,\n InsightConsoleMessageShown = 113,\n InsightRequestedViaContextMenu = 114,\n InsightRequestedViaHoverButton = 115,\n InsightRatedPositive = 117,\n InsightRatedNegative = 118,\n InsightClosed = 119,\n InsightErrored = 120,\n InsightHoverButtonShown = 121,\n SelfXssWarningConsoleMessageShown = 122,\n SelfXssWarningDialogShown = 123,\n SelfXssAllowPastingInConsole = 124,\n SelfXssAllowPastingInDialog = 125,\n ToggleEmulateFocusedPageFromStylesPaneOn = 126,\n ToggleEmulateFocusedPageFromStylesPaneOff = 127,\n ToggleEmulateFocusedPageFromRenderingTab = 128,\n ToggleEmulateFocusedPageFromCommandMenu = 129,\n InsightGenerated = 130,\n InsightErroredApi = 131,\n InsightErroredMarkdown = 132,\n ToggleShowWebVitals = 133,\n InsightErroredPermissionDenied = 134,\n InsightErroredCannotSend = 135,\n InsightErroredRequestFailed = 136,\n InsightErroredCannotParseChunk = 137,\n InsightErroredUnknownChunk = 138,\n InsightErroredOther = 139,\n AutofillReceived = 140,\n AutofillReceivedAndTabAutoOpened = 141,\n AnimationGroupSelected = 142,\n ScrollDrivenAnimationGroupSelected = 143,\n ScrollDrivenAnimationGroupScrubbed = 144,\n FreestylerOpenedFromElementsPanel = 145,\n FreestylerOpenedFromStylesTab = 146,\n ConsoleFilterByContext = 147,\n ConsoleFilterBySource = 148,\n ConsoleFilterByUrl = 149,\n InsightConsentReminderShown = 150,\n InsightConsentReminderCanceled = 151,\n InsightConsentReminderConfirmed = 152,\n InsightsOnboardingShown = 153,\n InsightsOnboardingCanceledOnPage1 = 154,\n InsightsOnboardingCanceledOnPage2 = 155,\n InsightsOnboardingConfirmed = 156,\n InsightsOnboardingNextPage = 157,\n InsightsOnboardingPrevPage = 158,\n InsightsOnboardingFeatureDisabled = 159,\n MAX_VALUE = 160,\n /* eslint-enable @typescript-eslint/naming-convention */\n}\n\nexport enum PanelCodes {\n /* eslint-disable @typescript-eslint/naming-convention */\n elements = 1,\n resources = 2,\n network = 3,\n sources = 4,\n timeline = 5,\n 'heap-profiler' = 6,\n console = 8,\n layers = 9,\n 'console-view' = 10,\n 'animations' = 11,\n 'network.config' = 12,\n 'rendering' = 13,\n 'sensors' = 14,\n 'sources.search' = 15,\n security = 16,\n 'js-profiler' = 17,\n lighthouse = 18,\n 'coverage' = 19,\n 'protocol-monitor' = 20,\n 'remote-devices' = 21,\n 'web-audio' = 22,\n 'changes.changes' = 23,\n 'performance.monitor' = 24,\n 'release-note' = 25,\n 'live-heap-profile' = 26,\n 'sources.quick' = 27,\n 'network.blocked-urls' = 28,\n 'settings-preferences' = 29,\n 'settings-workspace' = 30,\n 'settings-experiments' = 31,\n 'settings-blackbox' = 32,\n 'settings-devices' = 33,\n 'settings-throttling-conditions' = 34,\n 'settings-emulation-locations' = 35,\n 'settings-shortcuts' = 36,\n 'issues-pane' = 37,\n 'settings-keybinds' = 38,\n 'cssoverview' = 39,\n 'chrome-recorder' = 40,\n 'trust-tokens' = 41,\n 'reporting-api' = 42,\n 'interest-groups' = 43,\n 'back-forward-cache' = 44,\n 'service-worker-cache' = 45,\n 'background-service-background-fetch' = 46,\n 'background-service-background-sync' = 47,\n 'background-service-push-messaging' = 48,\n 'background-service-notifications' = 49,\n 'background-service-payment-handler' = 50,\n 'background-service-periodic-background-sync' = 51,\n 'service-workers' = 52,\n 'app-manifest' = 53,\n 'storage' = 54,\n 'cookies' = 55,\n 'frame-details' = 56,\n 'frame-resource' = 57,\n 'frame-window' = 58,\n 'frame-worker' = 59,\n 'dom-storage' = 60,\n 'indexed-db' = 61,\n 'web-sql' = 62,\n 'performance-insights' = 63,\n 'preloading' = 64,\n 'bounce-tracking-mitigations' = 65,\n 'developer-resources' = 66,\n 'autofill-view' = 67,\n /* eslint-enable @typescript-eslint/naming-convention */\n MAX_VALUE = 68,\n}\n\nexport enum PanelWithLocation {\n /* eslint-disable @typescript-eslint/naming-convention */\n 'elements-main' = 1,\n 'elements-drawer' = 2,\n 'resources-main' = 3,\n 'resources-drawer' = 4,\n 'network-main' = 5,\n 'network-drawer' = 6,\n 'sources-main' = 7,\n 'sources-drawer' = 8,\n 'timeline-main' = 9,\n 'timeline-drawer' = 10,\n 'heap_profiler-main' = 11,\n 'heap_profiler-drawer' = 12,\n 'console-main' = 13,\n 'console-drawer' = 14,\n 'layers-main' = 15,\n 'layers-drawer' = 16,\n 'console-view-main' = 17,\n 'console-view-drawer' = 18,\n 'animations-main' = 19,\n 'animations-drawer' = 20,\n 'network.config-main' = 21,\n 'network.config-drawer' = 22,\n 'rendering-main' = 23,\n 'rendering-drawer' = 24,\n 'sensors-main' = 25,\n 'sensors-drawer' = 26,\n 'sources.search-main' = 27,\n 'sources.search-drawer' = 28,\n 'security-main' = 29,\n 'security-drawer' = 30,\n 'lighthouse-main' = 33,\n 'lighthouse-drawer' = 34,\n 'coverage-main' = 35,\n 'coverage-drawer' = 36,\n 'protocol-monitor-main' = 37,\n 'protocol-monitor-drawer' = 38,\n 'remote-devices-main' = 39,\n 'remote-devices-drawer' = 40,\n 'web-audio-main' = 41,\n 'web-audio-drawer' = 42,\n 'changes.changes-main' = 43,\n 'changes.changes-drawer' = 44,\n 'performance.monitor-main' = 45,\n 'performance.monitor-drawer' = 46,\n 'release-note-main' = 47,\n 'release-note-drawer' = 48,\n 'live_heap_profile-main' = 49,\n 'live_heap_profile-drawer' = 50,\n 'sources.quick-main' = 51,\n 'sources.quick-drawer' = 52,\n 'network.blocked-urls-main' = 53,\n 'network.blocked-urls-drawer' = 54,\n 'settings-preferences-main' = 55,\n 'settings-preferences-drawer' = 56,\n 'settings-workspace-main' = 57,\n 'settings-workspace-drawer' = 58,\n 'settings-experiments-main' = 59,\n 'settings-experiments-drawer' = 60,\n 'settings-blackbox-main' = 61,\n 'settings-blackbox-drawer' = 62,\n 'settings-devices-main' = 63,\n 'settings-devices-drawer' = 64,\n 'settings-throttling-conditions-main' = 65,\n 'settings-throttling-conditions-drawer' = 66,\n 'settings-emulation-locations-main' = 67,\n 'settings-emulation-locations-drawer' = 68,\n 'settings-shortcuts-main' = 69,\n 'settings-shortcuts-drawer' = 70,\n 'issues-pane-main' = 71,\n 'issues-pane-drawer' = 72,\n 'settings-keybinds-main' = 73,\n 'settings-keybinds-drawer' = 74,\n 'cssoverview-main' = 75,\n 'cssoverview-drawer' = 76,\n 'chrome_recorder-main' = 77,\n 'chrome_recorder-drawer' = 78,\n 'trust_tokens-main' = 79,\n 'trust_tokens-drawer' = 80,\n 'reporting_api-main' = 81,\n 'reporting_api-drawer' = 82,\n 'interest_groups-main' = 83,\n 'interest_groups-drawer' = 84,\n 'back_forward_cache-main' = 85,\n 'back_forward_cache-drawer' = 86,\n 'service_worker_cache-main' = 87,\n 'service_worker_cache-drawer' = 88,\n 'background_service_backgroundFetch-main' = 89,\n 'background_service_backgroundFetch-drawer' = 90,\n 'background_service_backgroundSync-main' = 91,\n 'background_service_backgroundSync-drawer' = 92,\n 'background_service_pushMessaging-main' = 93,\n 'background_service_pushMessaging-drawer' = 94,\n 'background_service_notifications-main' = 95,\n 'background_service_notifications-drawer' = 96,\n 'background_service_paymentHandler-main' = 97,\n 'background_service_paymentHandler-drawer' = 98,\n 'background_service_periodicBackgroundSync-main' = 99,\n 'background_service_periodicBackgroundSync-drawer' = 100,\n 'service_workers-main' = 101,\n 'service_workers-drawer' = 102,\n 'app_manifest-main' = 103,\n 'app_manifest-drawer' = 104,\n 'storage-main' = 105,\n 'storage-drawer' = 106,\n 'cookies-main' = 107,\n 'cookies-drawer' = 108,\n 'frame_details-main' = 109,\n 'frame_details-drawer' = 110,\n 'frame_resource-main' = 111,\n 'frame_resource-drawer' = 112,\n 'frame_window-main' = 113,\n 'frame_window-drawer' = 114,\n 'frame_worker-main' = 115,\n 'frame_worker-drawer' = 116,\n 'dom_storage-main' = 117,\n 'dom_storage-drawer' = 118,\n 'indexed_db-main' = 119,\n 'indexed_db-drawer' = 120,\n 'web_sql-main' = 121,\n 'web_sql-drawer' = 122,\n 'performance_insights-main' = 123,\n 'performance_insights-drawer' = 124,\n 'preloading-main' = 125,\n 'preloading-drawer' = 126,\n 'bounce_tracking_mitigations-main' = 127,\n 'bounce_tracking_mitigations-drawer' = 128,\n 'developer-resources-main' = 129,\n 'developer-resources-drawer' = 130,\n 'autofill-view-main' = 131,\n 'autofill-view-drawer' = 132,\n /* eslint-enable @typescript-eslint/naming-convention */\n MAX_VALUE = 133,\n}\n\nexport enum ElementsSidebarTabCodes {\n /* eslint-disable @typescript-eslint/naming-convention */\n 'OtherSidebarPane' = 0,\n 'styles' = 1,\n 'computed' = 2,\n 'elements.layout' = 3,\n 'elements.event-listeners' = 4,\n 'elements.dom-breakpoints' = 5,\n 'elements.dom-properties' = 6,\n 'accessibility.view' = 7,\n /* eslint-enable @typescript-eslint/naming-convention */\n MAX_VALUE = 8,\n}\n\nexport enum MediaTypes {\n /* eslint-disable @typescript-eslint/naming-convention */\n Unknown = 0,\n 'text/css' = 2,\n 'text/html' = 3,\n 'application/xml' = 4,\n 'application/wasm' = 5,\n 'application/manifest+json' = 6,\n 'application/x-aspx' = 7,\n 'application/jsp' = 8,\n 'text/x-c++src' = 9,\n 'text/x-coffeescript' = 10,\n 'application/vnd.dart' = 11,\n 'text/typescript' = 12,\n 'text/typescript-jsx' = 13,\n 'application/json' = 14,\n 'text/x-csharp' = 15,\n 'text/x-java' = 16,\n 'text/x-less' = 17,\n 'application/x-httpd-php' = 18,\n 'text/x-python' = 19,\n 'text/x-sh' = 20,\n 'text/x-gss' = 21,\n 'text/x-sass' = 22,\n 'text/x-scss' = 23,\n 'text/markdown' = 24,\n 'text/x-clojure' = 25,\n 'text/jsx' = 26,\n 'text/x-go' = 27,\n 'text/x-kotlin' = 28,\n 'text/x-scala' = 29,\n 'text/x.svelte' = 30,\n 'text/javascript+plain' = 31,\n 'text/javascript+minified' = 32,\n 'text/javascript+sourcemapped' = 33,\n 'text/x.angular' = 34,\n 'text/x.vue' = 35,\n 'text/javascript+snippet' = 36,\n 'text/javascript+eval' = 37, // Scripts resulting from console inputs or page \"eval\"s with no sourceUrl comment.\n /* eslint-enable @typescript-eslint/naming-convention */\n MAX_VALUE = 38,\n}\n\nexport enum KeybindSetSettings {\n /* eslint-disable @typescript-eslint/naming-convention */\n 'devToolsDefault' = 0,\n 'vsCode' = 1,\n /* eslint-enable @typescript-eslint/naming-convention */\n MAX_VALUE = 2,\n}\n\nexport enum KeyboardShortcutAction {\n /* eslint-disable @typescript-eslint/naming-convention */\n OtherShortcut = 0,\n 'quick-open.show-command-menu' = 1,\n 'console.clear' = 2,\n 'console.toggle' = 3,\n 'debugger.step' = 4,\n 'debugger.step-into' = 5,\n 'debugger.step-out' = 6,\n 'debugger.step-over' = 7,\n 'debugger.toggle-breakpoint' = 8,\n 'debugger.toggle-breakpoint-enabled' = 9,\n 'debugger.toggle-pause' = 10,\n 'elements.edit-as-html' = 11,\n 'elements.hide-element' = 12,\n 'elements.redo' = 13,\n 'elements.toggle-element-search' = 14,\n 'elements.undo' = 15,\n 'main.search-in-panel.find' = 16,\n 'main.toggle-drawer' = 17,\n 'network.hide-request-details' = 18,\n 'network.search' = 19,\n 'network.toggle-recording' = 20,\n 'quick-open.show' = 21,\n 'settings.show' = 22,\n 'sources.search' = 23,\n 'background-service.toggle-recording' = 24,\n 'components.collect-garbage' = 25,\n 'console.clear.history' = 26,\n 'console.create-pin' = 27,\n 'coverage.start-with-reload' = 28,\n 'coverage.toggle-recording' = 29,\n 'debugger.breakpoint-input-window' = 30,\n 'debugger.evaluate-selection' = 31,\n 'debugger.next-call-frame' = 32,\n 'debugger.previous-call-frame' = 33,\n 'debugger.run-snippet' = 34,\n 'debugger.toggle-breakpoints-active' = 35,\n 'elements.capture-area-screenshot' = 36,\n 'emulation.capture-full-height-screenshot' = 37,\n 'emulation.capture-node-screenshot' = 38,\n 'emulation.capture-screenshot' = 39,\n 'emulation.show-sensors' = 40,\n 'emulation.toggle-device-mode' = 41,\n 'help.release-notes' = 42,\n 'help.report-issue' = 43,\n 'input.start-replaying' = 44,\n 'input.toggle-pause' = 45,\n 'input.toggle-recording' = 46,\n 'inspector-main.focus-debuggee' = 47,\n 'inspector-main.hard-reload' = 48,\n 'inspector-main.reload' = 49,\n 'live-heap-profile.start-with-reload' = 50,\n 'live-heap-profile.toggle-recording' = 51,\n 'main.debug-reload' = 52,\n 'main.next-tab' = 53,\n 'main.previous-tab' = 54,\n 'main.search-in-panel.cancel' = 55,\n 'main.search-in-panel.find-next' = 56,\n 'main.search-in-panel.find-previous' = 57,\n 'main.toggle-dock' = 58,\n 'main.zoom-in' = 59,\n 'main.zoom-out' = 60,\n 'main.zoom-reset' = 61,\n 'network-conditions.network-low-end-mobile' = 62,\n 'network-conditions.network-mid-tier-mobile' = 63,\n 'network-conditions.network-offline' = 64,\n 'network-conditions.network-online' = 65,\n 'profiler.heap-toggle-recording' = 66,\n 'profiler.js-toggle-recording' = 67,\n 'resources.clear' = 68,\n 'settings.documentation' = 69,\n 'settings.shortcuts' = 70,\n 'sources.add-folder-to-workspace' = 71,\n 'sources.add-to-watch' = 72,\n 'sources.close-all' = 73,\n 'sources.close-editor-tab' = 74,\n 'sources.create-snippet' = 75,\n 'sources.go-to-line' = 76,\n 'sources.go-to-member' = 77,\n 'sources.jump-to-next-location' = 78,\n 'sources.jump-to-previous-location' = 79,\n 'sources.rename' = 80,\n 'sources.save' = 81,\n 'sources.save-all' = 82,\n 'sources.switch-file' = 83,\n 'timeline.jump-to-next-frame' = 84,\n 'timeline.jump-to-previous-frame' = 85,\n 'timeline.load-from-file' = 86,\n 'timeline.next-recording' = 87,\n 'timeline.previous-recording' = 88,\n 'timeline.record-reload' = 89,\n 'timeline.save-to-file' = 90,\n 'timeline.show-history' = 91,\n 'timeline.toggle-recording' = 92,\n 'sources.increment-css' = 93,\n 'sources.increment-css-by-ten' = 94,\n 'sources.decrement-css' = 95,\n 'sources.decrement-css-by-ten' = 96,\n 'layers.reset-view' = 97,\n 'layers.pan-mode' = 98,\n 'layers.rotate-mode' = 99,\n 'layers.zoom-in' = 100,\n 'layers.zoom-out' = 101,\n 'layers.up' = 102,\n 'layers.down' = 103,\n 'layers.left' = 104,\n 'layers.right' = 105,\n 'help.report-translation-issue' = 106,\n 'rendering.toggle-prefers-color-scheme' = 107,\n 'chrome-recorder.start-recording' = 108,\n 'chrome-recorder.replay-recording' = 109,\n 'chrome-recorder.toggle-code-view' = 110,\n 'chrome-recorder.copy-recording-or-step' = 111,\n 'changes.revert' = 112,\n 'changes.copy' = 113,\n 'elements.new-style-rule' = 114,\n 'elements.refresh-event-listeners' = 115,\n 'coverage.clear' = 116,\n 'coverage.export' = 117,\n /* eslint-enable @typescript-eslint/naming-convention */\n MAX_VALUE = 118,\n}\n\nexport const enum IssueOpener {\n CONSOLE_INFO_BAR = 0,\n LEARN_MORE_LINK_COEP = 1,\n STATUS_BAR_ISSUES_COUNTER = 2,\n HAMBURGER_MENU = 3,\n ADORNER = 4,\n COMMAND_MENU = 5,\n MAX_VALUE = 6,\n}\n\n/**\n * This list should contain the currently active Devtools Experiments,\n * gaps are expected.\n */\nexport enum DevtoolsExperiments {\n /* eslint-disable @typescript-eslint/naming-convention */\n 'apply-custom-stylesheet' = 0,\n 'capture-node-creation-stacks' = 1,\n 'live-heap-profile' = 11,\n 'protocol-monitor' = 13,\n 'sampling-heap-profiler-timeline' = 17,\n 'show-option-tp-expose-internals-in-heap-snapshot' = 18,\n 'timeline-invalidation-tracking' = 26,\n 'timeline-show-all-events' = 27,\n 'timeline-v8-runtime-call-stats' = 28,\n 'apca' = 39,\n 'font-editor' = 41,\n 'full-accessibility-tree' = 42,\n 'contrast-issues' = 44,\n 'experimental-cookie-features' = 45,\n 'styles-pane-css-changes' = 55,\n 'instrumentation-breakpoints' = 61,\n 'authored-deployed-grouping' = 63,\n 'just-my-code' = 65,\n 'preloading-status-panel' = 68,\n 'outermost-target-selector' = 71,\n 'highlight-errors-elements-panel' = 73,\n 'use-source-map-scopes' = 76,\n 'network-panel-filter-bar-redesign' = 79,\n 'autofill-view' = 82,\n 'sources-frame-indentation-markers-temporarily-disable' = 83,\n 'css-type-component-length-deprecate' = 85,\n 'timeline-show-postmessage-events' = 86,\n 'timeline-enhanced-traces' = 90,\n 'timeline-compiled-sources' = 91,\n 'timeline-debug-mode' = 93,\n 'perf-panel-annotations' = 94,\n 'timeline-rpp-sidebar' = 95,\n 'timeline-observations' = 96,\n 'gen-ai-settings-panel' = 97,\n 'timeline-server-timings' = 98,\n /* eslint-enable @typescript-eslint/naming-convention */\n\n // Increment this when new experiments are added.\n MAX_VALUE = 99,\n}\n\nexport const enum ColorPickerOpenedFrom {\n SOURCES_PANEL = 0,\n STYLES_TAB = 1,\n MAX_VALUE = 2,\n}\n\nexport const enum CSSPropertyDocumentation {\n SHOWN = 0,\n TOGGLED_ON = 1,\n TOGGLED_OFF = 2,\n MAX_VALUE = 3,\n}\n\n// Update DevToolsIssuesPanelIssueExpanded from tools/metrics/histograms/enums.xml if new enum is added.\nexport enum IssueExpanded {\n /* eslint-disable @typescript-eslint/naming-convention */\n CrossOriginEmbedderPolicy = 0,\n MixedContent = 1,\n SameSiteCookie = 2,\n HeavyAd = 3,\n ContentSecurityPolicy = 4,\n Other = 5,\n Generic = 6,\n ThirdPartyPhaseoutCookie = 7,\n GenericCookie = 8,\n /* eslint-enable @typescript-eslint/naming-convention */\n MAX_VALUE = 9,\n}\n\nexport enum IssueResourceOpened {\n /* eslint-disable @typescript-eslint/naming-convention */\n CrossOriginEmbedderPolicyRequest = 0,\n CrossOriginEmbedderPolicyElement = 1,\n MixedContentRequest = 2,\n SameSiteCookieCookie = 3,\n SameSiteCookieRequest = 4,\n HeavyAdElement = 5,\n ContentSecurityPolicyDirective = 6,\n ContentSecurityPolicyElement = 7,\n /* eslint-enable @typescript-eslint/naming-convention */\n MAX_VALUE = 13,\n}\n\n/**\n * This list should contain the currently active issue types,\n * gaps are expected.\n */\nexport enum IssueCreated {\n /* eslint-disable @typescript-eslint/naming-convention */\n MixedContentIssue = 0,\n 'ContentSecurityPolicyIssue::kInlineViolation' = 1,\n 'ContentSecurityPolicyIssue::kEvalViolation' = 2,\n 'ContentSecurityPolicyIssue::kURLViolation' = 3,\n 'ContentSecurityPolicyIssue::kTrustedTypesSinkViolation' = 4,\n 'ContentSecurityPolicyIssue::kTrustedTypesPolicyViolation' = 5,\n 'HeavyAdIssue::NetworkTotalLimit' = 6,\n 'HeavyAdIssue::CpuTotalLimit' = 7,\n 'HeavyAdIssue::CpuPeakLimit' = 8,\n 'CrossOriginEmbedderPolicyIssue::CoepFrameResourceNeedsCoepHeader' = 9,\n 'CrossOriginEmbedderPolicyIssue::CoopSandboxedIFrameCannotNavigateToCoopPage' = 10,\n 'CrossOriginEmbedderPolicyIssue::CorpNotSameOrigin' = 11,\n 'CrossOriginEmbedderPolicyIssue::CorpNotSameOriginAfterDefaultedToSameOriginByCoep' = 12,\n 'CrossOriginEmbedderPolicyIssue::CorpNotSameSite' = 13,\n 'CookieIssue::ExcludeSameSiteNoneInsecure::ReadCookie' = 14,\n 'CookieIssue::ExcludeSameSiteNoneInsecure::SetCookie' = 15,\n 'CookieIssue::WarnSameSiteNoneInsecure::ReadCookie' = 16,\n 'CookieIssue::WarnSameSiteNoneInsecure::SetCookie' = 17,\n 'CookieIssue::WarnSameSiteStrictLaxDowngradeStrict::Secure' = 18,\n 'CookieIssue::WarnSameSiteStrictLaxDowngradeStrict::Insecure' = 19,\n 'CookieIssue::WarnCrossDowngrade::ReadCookie::Secure' = 20,\n 'CookieIssue::WarnCrossDowngrade::ReadCookie::Insecure' = 21,\n 'CookieIssue::WarnCrossDowngrade::SetCookie::Secure' = 22,\n 'CookieIssue::WarnCrossDowngrade::SetCookie::Insecure' = 23,\n 'CookieIssue::ExcludeNavigationContextDowngrade::Secure' = 24,\n 'CookieIssue::ExcludeNavigationContextDowngrade::Insecure' = 25,\n 'CookieIssue::ExcludeContextDowngrade::ReadCookie::Secure' = 26,\n 'CookieIssue::ExcludeContextDowngrade::ReadCookie::Insecure' = 27,\n 'CookieIssue::ExcludeContextDowngrade::SetCookie::Secure' = 28,\n 'CookieIssue::ExcludeContextDowngrade::SetCookie::Insecure' = 29,\n 'CookieIssue::ExcludeSameSiteUnspecifiedTreatedAsLax::ReadCookie' = 30,\n 'CookieIssue::ExcludeSameSiteUnspecifiedTreatedAsLax::SetCookie' = 31,\n 'CookieIssue::WarnSameSiteUnspecifiedLaxAllowUnsafe::ReadCookie' = 32,\n 'CookieIssue::WarnSameSiteUnspecifiedLaxAllowUnsafe::SetCookie' = 33,\n 'CookieIssue::WarnSameSiteUnspecifiedCrossSiteContext::ReadCookie' = 34,\n 'CookieIssue::WarnSameSiteUnspecifiedCrossSiteContext::SetCookie' = 35,\n 'SharedArrayBufferIssue::TransferIssue' = 36,\n 'SharedArrayBufferIssue::CreationIssue' = 37,\n LowTextContrastIssue = 41,\n 'CorsIssue::InsecurePrivateNetwork' = 42,\n 'CorsIssue::InvalidHeaders' = 44,\n 'CorsIssue::WildcardOriginWithCredentials' = 45,\n 'CorsIssue::PreflightResponseInvalid' = 46,\n 'CorsIssue::OriginMismatch' = 47,\n 'CorsIssue::AllowCredentialsRequired' = 48,\n 'CorsIssue::MethodDisallowedByPreflightResponse' = 49,\n 'CorsIssue::HeaderDisallowedByPreflightResponse' = 50,\n 'CorsIssue::RedirectContainsCredentials' = 51,\n 'CorsIssue::DisallowedByMode' = 52,\n 'CorsIssue::CorsDisabledScheme' = 53,\n 'CorsIssue::PreflightMissingAllowExternal' = 54,\n 'CorsIssue::PreflightInvalidAllowExternal' = 55,\n 'CorsIssue::NoCorsRedirectModeNotFollow' = 57,\n 'QuirksModeIssue::QuirksMode' = 58,\n 'QuirksModeIssue::LimitedQuirksMode' = 59,\n DeprecationIssue = 60,\n 'ClientHintIssue::MetaTagAllowListInvalidOrigin' = 61,\n 'ClientHintIssue::MetaTagModifiedHTML' = 62,\n 'CorsIssue::PreflightAllowPrivateNetworkError' = 63,\n 'GenericIssue::CrossOriginPortalPostMessageError' = 64,\n 'GenericIssue::FormLabelForNameError' = 65,\n 'GenericIssue::FormDuplicateIdForInputError' = 66,\n 'GenericIssue::FormInputWithNoLabelError' = 67,\n 'GenericIssue::FormAutocompleteAttributeEmptyError' = 68,\n 'GenericIssue::FormEmptyIdAndNameAttributesForInputError' = 69,\n 'GenericIssue::FormAriaLabelledByToNonExistingId' = 70,\n 'GenericIssue::FormInputAssignedAutocompleteValueToIdOrNameAttributeError' = 71,\n 'GenericIssue::FormLabelHasNeitherForNorNestedInput' = 72,\n 'GenericIssue::FormLabelForMatchesNonExistingIdError' = 73,\n 'GenericIssue::FormHasPasswordFieldWithoutUsernameFieldError' = 74,\n 'GenericIssue::FormInputHasWrongButWellIntendedAutocompleteValueError' = 75,\n 'StylesheetLoadingIssue::LateImportRule' = 76,\n 'StylesheetLoadingIssue::RequestFailed' = 77,\n 'CorsIssue::PreflightMissingPrivateNetworkAccessId' = 78,\n 'CorsIssue::PreflightMissingPrivateNetworkAccessName' = 79,\n 'CorsIssue::PrivateNetworkAccessPermissionUnavailable' = 80,\n 'CorsIssue::PrivateNetworkAccessPermissionDenied' = 81,\n 'CookieIssue::WarnThirdPartyPhaseout::ReadCookie' = 82,\n 'CookieIssue::WarnThirdPartyPhaseout::SetCookie' = 83,\n 'CookieIssue::ExcludeThirdPartyPhaseout::ReadCookie' = 84,\n 'CookieIssue::ExcludeThirdPartyPhaseout::SetCookie' = 85,\n /* eslint-enable @typescript-eslint/naming-convention */\n MAX_VALUE = 86,\n}\n\nexport const enum DeveloperResourceLoaded {\n LOAD_THROUGH_PAGE_VIA_TARGET = 0,\n LOAD_THROUGH_PAGE_VIA_FRAME = 1,\n LOAD_THROUGH_PAGE_FAILURE = 2,\n LOAD_THROUGH_PAGE_FALLBACK = 3,\n FALLBACK_AFTER_FAILURE = 4,\n FALLBACK_PER_OVERRIDE = 5,\n FALLBACK_PER_PROTOCOL = 6,\n FALLBACK_FAILURE = 7,\n MAX_VALUE = 8,\n}\n\nexport const enum DeveloperResourceScheme {\n OTHER = 0,\n UKNOWN = 1,\n HTTP = 2,\n HTTPS = 3,\n HTTP_LOCALHOST = 4,\n HTTPS_LOCALHOST = 5,\n DATA = 6,\n FILE = 7,\n BLOB = 8,\n MAX_VALUE = 9,\n}\n\nexport enum ResourceType {\n /* eslint-disable @typescript-eslint/naming-convention -- Used by web_tests. */\n all = 0,\n Document = 1,\n JavaScript = 2,\n 'Fetch and XHR' = 3,\n CSS = 4,\n Font = 5,\n Image = 6,\n Media = 7,\n Manifest = 8,\n WebSocket = 9,\n WebAssembly = 10,\n Other = 11,\n /* eslint-enable @typescript-eslint/naming-convention */\n MAX_VALUE = 12,\n}\n\nexport enum NetworkPanelMoreFilters {\n /* eslint-disable @typescript-eslint/naming-convention */\n 'Hide data URLs' = 0,\n 'Hide extension URLs' = 1,\n 'Blocked response cookies' = 2,\n 'Blocked requests' = 3,\n '3rd-party requests' = 4,\n /* eslint-enable @typescript-eslint/naming-convention */\n MAX_VALUE = 5,\n}\n\nexport enum Language {\n /* eslint-disable @typescript-eslint/naming-convention */\n 'af' = 1,\n 'am' = 2,\n 'ar' = 3,\n 'as' = 4,\n 'az' = 5,\n 'be' = 6,\n 'bg' = 7,\n 'bn' = 8,\n 'bs' = 9,\n 'ca' = 10,\n 'cs' = 11,\n 'cy' = 12,\n 'da' = 13,\n 'de' = 14,\n 'el' = 15,\n 'en-GB' = 16,\n 'en-US' = 17,\n 'es-419' = 18,\n 'es' = 19,\n 'et' = 20,\n 'eu' = 21,\n 'fa' = 22,\n 'fi' = 23,\n 'fil' = 24,\n 'fr-CA' = 25,\n 'fr' = 26,\n 'gl' = 27,\n 'gu' = 28,\n 'he' = 29,\n 'hi' = 30,\n 'hr' = 31,\n 'hu' = 32,\n 'hy' = 33,\n 'id' = 34,\n 'is' = 35,\n 'it' = 36,\n 'ja' = 37,\n 'ka' = 38,\n 'kk' = 39,\n 'km' = 40,\n 'kn' = 41,\n 'ko' = 42,\n 'ky' = 43,\n 'lo' = 44,\n 'lt' = 45,\n 'lv' = 46,\n 'mk' = 47,\n 'ml' = 48,\n 'mn' = 49,\n 'mr' = 50,\n 'ms' = 51,\n 'my' = 52,\n 'ne' = 53,\n 'nl' = 54,\n 'no' = 55,\n 'or' = 56,\n 'pa' = 57,\n 'pl' = 58,\n 'pt-PT' = 59,\n 'pt' = 60,\n 'ro' = 61,\n 'ru' = 62,\n 'si' = 63,\n 'sk' = 64,\n 'sl' = 65,\n 'sq' = 66,\n 'sr-Latn' = 67,\n 'sr' = 68,\n 'sv' = 69,\n 'sw' = 70,\n 'ta' = 71,\n 'te' = 72,\n 'th' = 73,\n 'tr' = 74,\n 'uk' = 75,\n 'ur' = 76,\n 'uz' = 77,\n 'vi' = 78,\n 'zh' = 79,\n 'zh-HK' = 80,\n 'zh-TW' = 81,\n 'zu' = 82,\n /* eslint-enable @typescript-eslint/naming-convention */\n MAX_VALUE = 83,\n}\n\nexport const enum SyncSetting {\n CHROME_SYNC_DISABLED = 1,\n CHROME_SYNC_SETTINGS_DISABLED = 2,\n DEVTOOLS_SYNC_SETTING_DISABLED = 3,\n DEVTOOLS_SYNC_SETTING_ENABLED = 4,\n MAX_VALUE = 5,\n}\n\nexport const enum RecordingToggled {\n RECORDING_STARTED = 1,\n RECORDING_FINISHED = 2,\n MAX_VALUE = 3,\n}\n\nexport const enum RecordingAssertion {\n ASSERTION_ADDED = 1,\n PROPERTY_ASSERTION_EDITED = 2,\n ATTRIBUTE_ASSERTION_EDITED = 3,\n MAX_VALUE = 4,\n}\n\nexport const enum RecordingReplayFinished {\n SUCCESS = 1,\n TIMEOUT_ERROR_SELECTORS = 2,\n TIMEOUT_ERROR_TARGET = 3,\n OTHER_ERROR = 4,\n MAX_VALUE = 5,\n}\n\nexport const enum RecordingReplaySpeed {\n NORMAL = 1,\n SLOW = 2,\n VERY_SLOW = 3,\n EXTREMELY_SLOW = 4,\n MAX_VALUE = 5,\n}\n\nexport const enum RecordingReplayStarted {\n REPLAY_ONLY = 1,\n REPLAY_WITH_PERFORMANCE_TRACING = 2,\n REPLAY_VIA_EXTENSION = 3,\n MAX_VALUE = 4,\n}\n\nexport const enum RecordingEdited {\n SELECTOR_PICKER_USED = 1,\n STEP_ADDED = 2,\n STEP_REMOVED = 3,\n SELECTOR_ADDED = 4,\n SELECTOR_REMOVED = 5,\n SELECTOR_PART_ADDED = 6,\n SELECTOR_PART_EDITED = 7,\n SELECTOR_PART_REMOVED = 8,\n TYPE_CHANGED = 9,\n OTHER_EDITING = 10,\n MAX_VALUE = 11,\n}\n\nexport const enum RecordingExported {\n TO_PUPPETEER = 1,\n TO_JSON = 2,\n TO_PUPPETEER_REPLAY = 3,\n TO_EXTENSION = 4,\n TO_LIGHTHOUSE = 5,\n MAX_VALUE = 6,\n}\n\nexport const enum RecordingCodeToggled {\n CODE_SHOWN = 1,\n CODE_HIDDEN = 2,\n MAX_VALUE = 3,\n}\n\nexport const enum RecordingCopiedToClipboard {\n COPIED_RECORDING_WITH_PUPPETEER = 1,\n COPIED_RECORDING_WITH_JSON = 2,\n COPIED_RECORDING_WITH_REPLAY = 3,\n COPIED_RECORDING_WITH_EXTENSION = 4,\n COPIED_STEP_WITH_PUPPETEER = 5,\n COPIED_STEP_WITH_JSON = 6,\n COPIED_STEP_WITH_REPLAY = 7,\n COPIED_STEP_WITH_EXTENSION = 8,\n MAX_VALUE = 9,\n}\n\nexport const enum StyleTextCopied {\n DECLARATION_VIA_CHANGED_LINE = 1,\n ALL_CHANGES_VIA_STYLES_TAB = 2,\n DECLARATION_VIA_CONTEXT_MENU = 3,\n PROPERTY_VIA_CONTEXT_MENU = 4,\n VALUE_VIA_CONTEXT_MENU = 5,\n DECLARATION_AS_JS_VIA_CONTEXT_MENU = 6,\n RULE_VIA_CONTEXT_MENU = 7,\n ALL_DECLARATIONS_VIA_CONTEXT_MENU = 8,\n ALL_DECLARATINS_AS_JS_VIA_CONTEXT_MENU = 9,\n SELECTOR_VIA_CONTEXT_MENU = 10,\n MAX_VALUE = 11,\n}\n\nexport enum ManifestSectionCodes {\n /* eslint-disable @typescript-eslint/naming-convention -- Indexed access. */\n OtherSection = 0,\n 'Identity' = 1,\n 'Presentation' = 2,\n 'Protocol Handlers' = 3,\n 'Icons' = 4,\n 'Window Controls Overlay' = 5,\n /* eslint-enable @typescript-eslint/naming-convention */\n MAX_VALUE = 6,\n}\n\n// The names here match the CSSRuleValidator names in CSSRuleValidator.ts.\nexport const enum CSSHintType {\n OTHER = 0,\n ALIGN_CONTENT = 1,\n FLEX_ITEM = 2,\n FLEX_CONTAINER = 3,\n GRID_CONTAINER = 4,\n GRID_ITEM = 5,\n FLEX_GRID = 6,\n MULTICOL_FLEX_GRID = 7,\n PADDING = 8,\n POSITION = 9,\n Z_INDEX = 10,\n SIZING = 11,\n FLEX_OR_GRID_ITEM = 12,\n FONT_VARIATION_SETTINGS = 13,\n MAX_VALUE = 14,\n}\n\nexport const enum LighthouseModeRun {\n NAVIGATION = 0,\n TIMESPAN = 1,\n SNAPSHOT = 2,\n LEGACY_NAVIGATION = 3,\n MAX_VALUE = 4,\n}\n\nexport const enum LighthouseCategoryUsed {\n PERFORMANCE = 0,\n ACCESSIBILITY = 1,\n BEST_PRACTICES = 2,\n SEO = 3,\n PWA = 4,\n PUB_ADS = 5,\n MAX_VALUE = 6,\n}\n\nexport const enum SwatchType {\n VAR_LINK = 0,\n ANIMATION_NAME_LINK = 1,\n COLOR = 2,\n ANIMATION_TIMING = 3,\n SHADOW = 4,\n GRID = 5,\n FLEX = 6,\n ANGLE = 7,\n LENGTH = 8,\n POSITION_TRY_LINK = 10,\n MAX_VALUE = 11,\n}\n\nexport const enum BadgeType {\n GRID = 0,\n SUBGRID = 1,\n FLEX = 2,\n AD = 3,\n SCROLL_SNAP = 4,\n CONTAINER = 5,\n SLOT = 6,\n TOP_LAYER = 7,\n REVEAL = 8,\n MAX_VALUE = 9,\n}\n\nexport const enum AnimationsPlaybackRate {\n PERCENT_100 = 0,\n PERCENT_25 = 1,\n PERCENT_10 = 2,\n OTHER = 3,\n MAX_VALUE = 4,\n}\n\nexport const enum AnimationPointDragType {\n // Animation is dragged as a whole in the Animations panel.\n ANIMATION_DRAG = 0,\n // A keyframe point inside animation timeline is dragged.\n KEYFRAME_MOVE = 1,\n // Start point of the animation inside animation timeline is dragged.\n START_ENDPOINT_MOVE = 2,\n // Finish point of the animation inside animation timeline is dragged.\n FINISH_ENDPOINT_MOVE = 3,\n OTHER = 4,\n MAX_VALUE = 5,\n}\n"]}
\ No newline at end of file
+{"version":3,"file":"UserMetrics.js","sourceRoot":"","sources":["../../../../../../front_end/core/host/UserMetrics.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright (C) 2011 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n * * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport {InspectorFrontendHostInstance} from './InspectorFrontendHost.js';\nimport {EnumeratedHistogram} from './InspectorFrontendHostAPI.js';\n\nexport class UserMetrics {\n #panelChangedSinceLaunch: boolean;\n #firedLaunchHistogram: boolean;\n #launchPanelName: string;\n constructor() {\n this.#panelChangedSinceLaunch = false;\n this.#firedLaunchHistogram = false;\n this.#launchPanelName = '';\n }\n\n panelShown(panelName: string, isLaunching?: boolean): void {\n const code = PanelCodes[panelName as keyof typeof PanelCodes] || 0;\n InspectorFrontendHostInstance.recordEnumeratedHistogram(EnumeratedHistogram.PanelShown, code, PanelCodes.MAX_VALUE);\n InspectorFrontendHostInstance.recordUserMetricsAction('DevTools_PanelShown_' + panelName);\n // Store that the user has changed the panel so we know launch histograms should not be fired.\n if (!isLaunching) {\n this.#panelChangedSinceLaunch = true;\n }\n }\n\n panelShownInLocation(panelName: string, location: 'main'|'drawer'): void {\n const panelWithLocationName = `${panelName}-${location}`;\n const panelWithLocation = PanelWithLocation[panelWithLocationName as keyof typeof PanelWithLocation] || 0;\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.PanelShownInLocation,\n panelWithLocation,\n PanelWithLocation.MAX_VALUE,\n );\n }\n\n settingsPanelShown(settingsViewId: string): void {\n this.panelShown('settings-' + settingsViewId);\n }\n\n sourcesPanelFileDebugged(mediaType?: string): void {\n const code = (mediaType && MediaTypes[mediaType as keyof typeof MediaTypes]) || MediaTypes.Unknown;\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.SourcesPanelFileDebugged, code, MediaTypes.MAX_VALUE);\n }\n\n sourcesPanelFileOpened(mediaType?: string): void {\n const code = (mediaType && MediaTypes[mediaType as keyof typeof MediaTypes]) || MediaTypes.Unknown;\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.SourcesPanelFileOpened, code, MediaTypes.MAX_VALUE);\n }\n\n networkPanelResponsePreviewOpened(mediaType: string): void {\n const code = (mediaType && MediaTypes[mediaType as keyof typeof MediaTypes]) || MediaTypes.Unknown;\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.NetworkPanelResponsePreviewOpened, code, MediaTypes.MAX_VALUE);\n }\n\n actionTaken(action: Action): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(EnumeratedHistogram.ActionTaken, action, Action.MAX_VALUE);\n }\n\n panelLoaded(panelName: string, histogramName: string): void {\n if (this.#firedLaunchHistogram || panelName !== this.#launchPanelName) {\n return;\n }\n\n this.#firedLaunchHistogram = true;\n // Use rAF and window.setTimeout to ensure the marker is fired after layout and rendering.\n // This will give the most accurate representation of the tool being ready for a user.\n requestAnimationFrame(() => {\n window.setTimeout(() => {\n // Mark the load time so that we can pinpoint it more easily in a trace.\n performance.mark(histogramName);\n // If the user has switched panel before we finished loading, ignore the histogram,\n // since the launch timings will have been affected and are no longer valid.\n if (this.#panelChangedSinceLaunch) {\n return;\n }\n // This fires the event for the appropriate launch histogram.\n // The duration is measured as the time elapsed since the time origin of the document.\n InspectorFrontendHostInstance.recordPerformanceHistogram(histogramName, performance.now());\n }, 0);\n });\n }\n\n setLaunchPanel(panelName: string|null): void {\n this.#launchPanelName = (panelName as string);\n }\n\n performanceTraceLoad(measure: PerformanceMeasure): void {\n InspectorFrontendHostInstance.recordPerformanceHistogram('DevTools.TraceLoad', measure.duration);\n }\n\n keybindSetSettingChanged(keybindSet: string): void {\n const value = KeybindSetSettings[keybindSet as keyof typeof KeybindSetSettings] || 0;\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.KeybindSetSettingChanged, value, KeybindSetSettings.MAX_VALUE);\n }\n\n keyboardShortcutFired(actionId: string): void {\n const action =\n KeyboardShortcutAction[actionId as keyof typeof KeyboardShortcutAction] || KeyboardShortcutAction.OtherShortcut;\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.KeyboardShortcutFired, action, KeyboardShortcutAction.MAX_VALUE);\n }\n\n issuesPanelOpenedFrom(issueOpener: IssueOpener): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.IssuesPanelOpenedFrom, issueOpener, IssueOpener.MAX_VALUE);\n }\n\n issuesPanelIssueExpanded(issueExpandedCategory: string|undefined): void {\n if (issueExpandedCategory === undefined) {\n return;\n }\n\n const issueExpanded = IssueExpanded[issueExpandedCategory as keyof typeof IssueExpanded];\n\n if (issueExpanded === undefined) {\n return;\n }\n\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.IssuesPanelIssueExpanded, issueExpanded, IssueExpanded.MAX_VALUE);\n }\n\n issuesPanelResourceOpened(issueCategory: string, type: string): void {\n const key = issueCategory + type;\n const value = IssueResourceOpened[key as keyof typeof IssueResourceOpened];\n\n if (value === undefined) {\n return;\n }\n\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.IssuesPanelResourceOpened, value, IssueResourceOpened.MAX_VALUE);\n }\n\n issueCreated(code: string): void {\n const issueCreated = IssueCreated[code as keyof typeof IssueCreated];\n if (issueCreated === undefined) {\n return;\n }\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.IssueCreated, issueCreated, IssueCreated.MAX_VALUE);\n }\n\n experimentEnabledAtLaunch(experimentId: string): void {\n const experiment = DevtoolsExperiments[experimentId as keyof typeof DevtoolsExperiments];\n if (experiment === undefined) {\n return;\n }\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.ExperimentEnabledAtLaunch, experiment, DevtoolsExperiments.MAX_VALUE);\n }\n\n experimentDisabledAtLaunch(experimentId: string): void {\n const experiment = DevtoolsExperiments[experimentId as keyof typeof DevtoolsExperiments];\n if (experiment === undefined) {\n return;\n }\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.ExperimentDisabledAtLaunch, experiment, DevtoolsExperiments.MAX_VALUE);\n }\n\n experimentChanged(experimentId: string, isEnabled: boolean): void {\n const experiment = DevtoolsExperiments[experimentId as keyof typeof DevtoolsExperiments];\n if (experiment === undefined) {\n return;\n }\n const actionName = isEnabled ? EnumeratedHistogram.ExperimentEnabled : EnumeratedHistogram.ExperimentDisabled;\n InspectorFrontendHostInstance.recordEnumeratedHistogram(actionName, experiment, DevtoolsExperiments.MAX_VALUE);\n }\n\n developerResourceLoaded(developerResourceLoaded: DeveloperResourceLoaded): void {\n if (developerResourceLoaded >= DeveloperResourceLoaded.MAX_VALUE) {\n return;\n }\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.DeveloperResourceLoaded, developerResourceLoaded, DeveloperResourceLoaded.MAX_VALUE);\n }\n\n developerResourceScheme(developerResourceScheme: DeveloperResourceScheme): void {\n if (developerResourceScheme >= DeveloperResourceScheme.MAX_VALUE) {\n return;\n }\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.DeveloperResourceScheme, developerResourceScheme, DeveloperResourceScheme.MAX_VALUE);\n }\n\n language(language: Intl.UnicodeBCP47LocaleIdentifier): void {\n const languageCode = Language[language as keyof typeof Language];\n if (languageCode === undefined) {\n return;\n }\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.Language, languageCode, Language.MAX_VALUE);\n }\n\n syncSetting(devtoolsSyncSettingEnabled: boolean): void {\n InspectorFrontendHostInstance.getSyncInformation(syncInfo => {\n let settingValue = SyncSetting.CHROME_SYNC_DISABLED;\n if (syncInfo.isSyncActive && !syncInfo.arePreferencesSynced) {\n settingValue = SyncSetting.CHROME_SYNC_SETTINGS_DISABLED;\n } else if (syncInfo.isSyncActive && syncInfo.arePreferencesSynced) {\n settingValue = devtoolsSyncSettingEnabled ? SyncSetting.DEVTOOLS_SYNC_SETTING_ENABLED :\n SyncSetting.DEVTOOLS_SYNC_SETTING_DISABLED;\n }\n\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.SyncSetting, settingValue, SyncSetting.MAX_VALUE);\n });\n }\n\n recordingAssertion(value: RecordingAssertion): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.RecordingAssertion, value, RecordingAssertion.MAX_VALUE);\n }\n\n recordingToggled(value: RecordingToggled): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.RecordingToggled, value, RecordingToggled.MAX_VALUE);\n }\n\n recordingReplayFinished(value: RecordingReplayFinished): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.RecordingReplayFinished, value, RecordingReplayFinished.MAX_VALUE);\n }\n\n recordingReplaySpeed(value: RecordingReplaySpeed): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.RecordingReplaySpeed, value, RecordingReplaySpeed.MAX_VALUE);\n }\n\n recordingReplayStarted(value: RecordingReplayStarted): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.RecordingReplayStarted, value, RecordingReplayStarted.MAX_VALUE);\n }\n\n recordingEdited(value: RecordingEdited): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.RecordingEdited, value, RecordingEdited.MAX_VALUE);\n }\n\n recordingExported(value: RecordingExported): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.RecordingExported, value, RecordingExported.MAX_VALUE);\n }\n\n recordingCodeToggled(value: RecordingCodeToggled): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.RecordingCodeToggled, value, RecordingCodeToggled.MAX_VALUE);\n }\n\n recordingCopiedToClipboard(value: RecordingCopiedToClipboard): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.RecordingCopiedToClipboard, value, RecordingCopiedToClipboard.MAX_VALUE);\n }\n\n styleTextCopied(value: StyleTextCopied): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.StyleTextCopied, value, StyleTextCopied.MAX_VALUE);\n }\n\n manifestSectionSelected(sectionTitle: string): void {\n const code =\n ManifestSectionCodes[sectionTitle as keyof typeof ManifestSectionCodes] || ManifestSectionCodes.OtherSection;\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.ManifestSectionSelected, code, ManifestSectionCodes.MAX_VALUE);\n }\n\n cssHintShown(type: CSSHintType): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.CSSHintShown, type, CSSHintType.MAX_VALUE);\n }\n\n lighthouseModeRun(type: LighthouseModeRun): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.LighthouseModeRun, type, LighthouseModeRun.MAX_VALUE);\n }\n\n lighthouseCategoryUsed(type: LighthouseCategoryUsed): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.LighthouseCategoryUsed, type, LighthouseCategoryUsed.MAX_VALUE);\n }\n\n colorPickerOpenedFrom(type: ColorPickerOpenedFrom): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.ColorPickerOpenedFrom, type, ColorPickerOpenedFrom.MAX_VALUE);\n }\n\n cssPropertyDocumentation(type: CSSPropertyDocumentation): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.CSSPropertyDocumentation, type, CSSPropertyDocumentation.MAX_VALUE);\n }\n\n swatchActivated(swatch: SwatchType): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.SwatchActivated, swatch, SwatchType.MAX_VALUE);\n }\n\n animationPlaybackRateChanged(playbackRate: AnimationsPlaybackRate): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.AnimationPlaybackRateChanged, playbackRate, AnimationsPlaybackRate.MAX_VALUE);\n }\n\n animationPointDragged(dragType: AnimationPointDragType): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.AnimationPointDragged, dragType, AnimationPointDragType.MAX_VALUE);\n }\n\n workspacesPopulated(wallClockTimeInMilliseconds: number): void {\n InspectorFrontendHostInstance.recordPerformanceHistogram(\n 'DevTools.Workspaces.PopulateWallClocktime', wallClockTimeInMilliseconds);\n }\n\n visualLoggingProcessingDone(timeInMilliseconds: number): void {\n InspectorFrontendHostInstance.recordPerformanceHistogram(\n 'DevTools.VisualLogging.ProcessingTime', timeInMilliseconds);\n }\n\n legacyResourceTypeFilterNumberOfSelectedChanged(itemCount: number): void {\n const boundItemCount = Math.max(Math.min(itemCount, ResourceType.MAX_VALUE - 1), 1);\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.LegacyResourceTypeFilterNumberOfSelectedChanged, boundItemCount, ResourceType.MAX_VALUE);\n }\n\n legacyResourceTypeFilterItemSelected(resourceTypeName: string): void {\n const resourceType = ResourceType[resourceTypeName as keyof typeof ResourceType];\n if (resourceType === undefined) {\n return;\n }\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.LegacyResourceTypeFilterItemSelected, resourceType, ResourceType.MAX_VALUE);\n }\n\n resourceTypeFilterNumberOfSelectedChanged(itemCount: number): void {\n const boundItemCount = Math.max(Math.min(itemCount, ResourceType.MAX_VALUE - 1), 1);\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.ResourceTypeFilterNumberOfSelectedChanged, boundItemCount, ResourceType.MAX_VALUE);\n }\n\n resourceTypeFilterItemSelected(resourceTypeName: string): void {\n const resourceType = ResourceType[resourceTypeName as keyof typeof ResourceType];\n if (resourceType === undefined) {\n return;\n }\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.ResourceTypeFilterItemSelected, resourceType, ResourceType.MAX_VALUE);\n }\n\n networkPanelMoreFiltersNumberOfSelectedChanged(itemCount: number): void {\n const boundItemCount = Math.max(Math.min(itemCount, NetworkPanelMoreFilters.MAX_VALUE), 0);\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.NetworkPanelMoreFiltersNumberOfSelectedChanged, boundItemCount,\n NetworkPanelMoreFilters.MAX_VALUE);\n }\n\n networkPanelMoreFiltersItemSelected(filterName: string): void {\n const filter = NetworkPanelMoreFilters[filterName as keyof typeof NetworkPanelMoreFilters];\n if (filter === undefined) {\n return;\n }\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.NetworkPanelMoreFiltersItemSelected, filter, NetworkPanelMoreFilters.MAX_VALUE);\n }\n}\n\n/**\n * The numeric enum values are not necessarily continuous! It is possible that\n * values have been removed, which results in gaps in the sequence of values.\n * When adding a new value:\n * 1. Add an entry to the bottom of the enum before 'MAX_VALUE'.\n * 2. Set the value of the new entry to the current value of 'MAX_VALUE'.\n * 2. Increment the value of 'MAX_VALUE' by 1.\n * When removing a value which is no longer needed:\n * 1. Delete the line with the unneeded value\n * 2. Do not update any 'MAX_VALUE' or any other value.\n */\n\n// Codes below are used to collect UMA histograms in the Chromium port.\n// Do not change the values below, additional actions are needed on the Chromium side\n// in order to add more codes.\nexport enum Action {\n /* eslint-disable @typescript-eslint/naming-convention */\n WindowDocked = 1,\n WindowUndocked = 2,\n ScriptsBreakpointSet = 3,\n TimelineStarted = 4,\n ProfilesCPUProfileTaken = 5,\n ProfilesHeapProfileTaken = 6,\n ConsoleEvaluated = 8,\n FileSavedInWorkspace = 9,\n DeviceModeEnabled = 10,\n AnimationsPlaybackRateChanged = 11,\n RevisionApplied = 12,\n FileSystemDirectoryContentReceived = 13,\n StyleRuleEdited = 14,\n CommandEvaluatedInConsolePanel = 15,\n DOMPropertiesExpanded = 16,\n ResizedViewInResponsiveMode = 17,\n TimelinePageReloadStarted = 18,\n ConnectToNodeJSFromFrontend = 19,\n ConnectToNodeJSDirectly = 20,\n CpuThrottlingEnabled = 21,\n CpuProfileNodeFocused = 22,\n CpuProfileNodeExcluded = 23,\n SelectFileFromFilePicker = 24,\n SelectCommandFromCommandMenu = 25,\n ChangeInspectedNodeInElementsPanel = 26,\n StyleRuleCopied = 27,\n CoverageStarted = 28,\n LighthouseStarted = 29,\n LighthouseFinished = 30,\n ShowedThirdPartyBadges = 31,\n LighthouseViewTrace = 32,\n FilmStripStartedRecording = 33,\n CoverageReportFiltered = 34,\n CoverageStartedPerBlock = 35,\n 'SettingsOpenedFromGear-deprecated' = 36,\n 'SettingsOpenedFromMenu-deprecated' = 37,\n 'SettingsOpenedFromCommandMenu-deprecated' = 38,\n TabMovedToDrawer = 39,\n TabMovedToMainPanel = 40,\n CaptureCssOverviewClicked = 41,\n VirtualAuthenticatorEnvironmentEnabled = 42,\n SourceOrderViewActivated = 43,\n UserShortcutAdded = 44,\n ShortcutRemoved = 45,\n ShortcutModified = 46,\n CustomPropertyLinkClicked = 47,\n CustomPropertyEdited = 48,\n ServiceWorkerNetworkRequestClicked = 49,\n ServiceWorkerNetworkRequestClosedQuickly = 50,\n NetworkPanelServiceWorkerRespondWith = 51,\n NetworkPanelCopyValue = 52,\n ConsoleSidebarOpened = 53,\n PerfPanelTraceImported = 54,\n PerfPanelTraceExported = 55,\n StackFrameRestarted = 56,\n CaptureTestProtocolClicked = 57,\n BreakpointRemovedFromRemoveButton = 58,\n BreakpointGroupExpandedStateChanged = 59,\n HeaderOverrideFileCreated = 60,\n HeaderOverrideEnableEditingClicked = 61,\n HeaderOverrideHeaderAdded = 62,\n HeaderOverrideHeaderEdited = 63,\n HeaderOverrideHeaderRemoved = 64,\n HeaderOverrideHeadersFileEdited = 65,\n PersistenceNetworkOverridesEnabled = 66,\n PersistenceNetworkOverridesDisabled = 67,\n BreakpointRemovedFromContextMenu = 68,\n BreakpointsInFileRemovedFromRemoveButton = 69,\n BreakpointsInFileRemovedFromContextMenu = 70,\n BreakpointsInFileCheckboxToggled = 71,\n BreakpointsInFileEnabledDisabledFromContextMenu = 72,\n BreakpointConditionEditedFromSidebar = 73,\n WorkspaceTabAddFolder = 74,\n WorkspaceTabRemoveFolder = 75,\n OverrideTabAddFolder = 76,\n OverrideTabRemoveFolder = 77,\n WorkspaceSourceSelected = 78,\n OverridesSourceSelected = 79,\n StyleSheetInitiatorLinkClicked = 80,\n BreakpointRemovedFromGutterContextMenu = 81,\n BreakpointRemovedFromGutterToggle = 82,\n StylePropertyInsideKeyframeEdited = 83,\n OverrideContentFromSourcesContextMenu = 84,\n OverrideContentFromNetworkContextMenu = 85,\n OverrideScript = 86,\n OverrideStyleSheet = 87,\n OverrideDocument = 88,\n OverrideFetchXHR = 89,\n OverrideImage = 90,\n OverrideFont = 91,\n OverrideContentContextMenuSetup = 92,\n OverrideContentContextMenuAbandonSetup = 93,\n OverrideContentContextMenuActivateDisabled = 94,\n OverrideContentContextMenuOpenExistingFile = 95,\n OverrideContentContextMenuSaveNewFile = 96,\n ShowAllOverridesFromSourcesContextMenu = 97,\n ShowAllOverridesFromNetworkContextMenu = 98,\n AnimationGroupsCleared = 99,\n AnimationsPaused = 100,\n AnimationsResumed = 101,\n AnimatedNodeDescriptionClicked = 102,\n AnimationGroupScrubbed = 103,\n AnimationGroupReplayed = 104,\n OverrideTabDeleteFolderContextMenu = 105,\n WorkspaceDropFolder = 107,\n WorkspaceSelectFolder = 108,\n OverrideContentContextMenuSourceMappedWarning = 109,\n OverrideContentContextMenuRedirectToDeployed = 110,\n NewStyleRuleAdded = 111,\n TraceExpanded = 112,\n InsightConsoleMessageShown = 113,\n InsightRequestedViaContextMenu = 114,\n InsightRequestedViaHoverButton = 115,\n InsightRatedPositive = 117,\n InsightRatedNegative = 118,\n InsightClosed = 119,\n InsightErrored = 120,\n InsightHoverButtonShown = 121,\n SelfXssWarningConsoleMessageShown = 122,\n SelfXssWarningDialogShown = 123,\n SelfXssAllowPastingInConsole = 124,\n SelfXssAllowPastingInDialog = 125,\n ToggleEmulateFocusedPageFromStylesPaneOn = 126,\n ToggleEmulateFocusedPageFromStylesPaneOff = 127,\n ToggleEmulateFocusedPageFromRenderingTab = 128,\n ToggleEmulateFocusedPageFromCommandMenu = 129,\n InsightGenerated = 130,\n InsightErroredApi = 131,\n InsightErroredMarkdown = 132,\n ToggleShowWebVitals = 133,\n InsightErroredPermissionDenied = 134,\n InsightErroredCannotSend = 135,\n InsightErroredRequestFailed = 136,\n InsightErroredCannotParseChunk = 137,\n InsightErroredUnknownChunk = 138,\n InsightErroredOther = 139,\n AutofillReceived = 140,\n AutofillReceivedAndTabAutoOpened = 141,\n AnimationGroupSelected = 142,\n ScrollDrivenAnimationGroupSelected = 143,\n ScrollDrivenAnimationGroupScrubbed = 144,\n FreestylerOpenedFromElementsPanel = 145,\n FreestylerOpenedFromStylesTab = 146,\n ConsoleFilterByContext = 147,\n ConsoleFilterBySource = 148,\n ConsoleFilterByUrl = 149,\n InsightConsentReminderShown = 150,\n InsightConsentReminderCanceled = 151,\n InsightConsentReminderConfirmed = 152,\n InsightsOnboardingShown = 153,\n InsightsOnboardingCanceledOnPage1 = 154,\n InsightsOnboardingCanceledOnPage2 = 155,\n InsightsOnboardingConfirmed = 156,\n InsightsOnboardingNextPage = 157,\n InsightsOnboardingPrevPage = 158,\n InsightsOnboardingFeatureDisabled = 159,\n InsightsOptInTeaserShown = 160,\n InsightsOptInTeaserSettingsLinkClicked = 161,\n InsightsOptInTeaserConfirmedInSettings = 162,\n InsightsReminderTeaserShown = 163,\n InsightsReminderTeaserConfirmed = 164,\n InsightsReminderTeaserCanceled = 165,\n InsightsReminderTeaserSettingsLinkClicked = 166,\n InsightsReminderTeaserAbortedInSettings = 167,\n GeneratingInsightWithoutDisclaimer = 168,\n MAX_VALUE = 169,\n /* eslint-enable @typescript-eslint/naming-convention */\n}\n\nexport enum PanelCodes {\n /* eslint-disable @typescript-eslint/naming-convention */\n elements = 1,\n resources = 2,\n network = 3,\n sources = 4,\n timeline = 5,\n 'heap-profiler' = 6,\n console = 8,\n layers = 9,\n 'console-view' = 10,\n 'animations' = 11,\n 'network.config' = 12,\n 'rendering' = 13,\n 'sensors' = 14,\n 'sources.search' = 15,\n security = 16,\n 'js-profiler' = 17,\n lighthouse = 18,\n 'coverage' = 19,\n 'protocol-monitor' = 20,\n 'remote-devices' = 21,\n 'web-audio' = 22,\n 'changes.changes' = 23,\n 'performance.monitor' = 24,\n 'release-note' = 25,\n 'live-heap-profile' = 26,\n 'sources.quick' = 27,\n 'network.blocked-urls' = 28,\n 'settings-preferences' = 29,\n 'settings-workspace' = 30,\n 'settings-experiments' = 31,\n 'settings-blackbox' = 32,\n 'settings-devices' = 33,\n 'settings-throttling-conditions' = 34,\n 'settings-emulation-locations' = 35,\n 'settings-shortcuts' = 36,\n 'issues-pane' = 37,\n 'settings-keybinds' = 38,\n 'cssoverview' = 39,\n 'chrome-recorder' = 40,\n 'trust-tokens' = 41,\n 'reporting-api' = 42,\n 'interest-groups' = 43,\n 'back-forward-cache' = 44,\n 'service-worker-cache' = 45,\n 'background-service-background-fetch' = 46,\n 'background-service-background-sync' = 47,\n 'background-service-push-messaging' = 48,\n 'background-service-notifications' = 49,\n 'background-service-payment-handler' = 50,\n 'background-service-periodic-background-sync' = 51,\n 'service-workers' = 52,\n 'app-manifest' = 53,\n 'storage' = 54,\n 'cookies' = 55,\n 'frame-details' = 56,\n 'frame-resource' = 57,\n 'frame-window' = 58,\n 'frame-worker' = 59,\n 'dom-storage' = 60,\n 'indexed-db' = 61,\n 'web-sql' = 62,\n 'performance-insights' = 63,\n 'preloading' = 64,\n 'bounce-tracking-mitigations' = 65,\n 'developer-resources' = 66,\n 'autofill-view' = 67,\n /* eslint-enable @typescript-eslint/naming-convention */\n MAX_VALUE = 68,\n}\n\nexport enum PanelWithLocation {\n /* eslint-disable @typescript-eslint/naming-convention */\n 'elements-main' = 1,\n 'elements-drawer' = 2,\n 'resources-main' = 3,\n 'resources-drawer' = 4,\n 'network-main' = 5,\n 'network-drawer' = 6,\n 'sources-main' = 7,\n 'sources-drawer' = 8,\n 'timeline-main' = 9,\n 'timeline-drawer' = 10,\n 'heap_profiler-main' = 11,\n 'heap_profiler-drawer' = 12,\n 'console-main' = 13,\n 'console-drawer' = 14,\n 'layers-main' = 15,\n 'layers-drawer' = 16,\n 'console-view-main' = 17,\n 'console-view-drawer' = 18,\n 'animations-main' = 19,\n 'animations-drawer' = 20,\n 'network.config-main' = 21,\n 'network.config-drawer' = 22,\n 'rendering-main' = 23,\n 'rendering-drawer' = 24,\n 'sensors-main' = 25,\n 'sensors-drawer' = 26,\n 'sources.search-main' = 27,\n 'sources.search-drawer' = 28,\n 'security-main' = 29,\n 'security-drawer' = 30,\n 'lighthouse-main' = 33,\n 'lighthouse-drawer' = 34,\n 'coverage-main' = 35,\n 'coverage-drawer' = 36,\n 'protocol-monitor-main' = 37,\n 'protocol-monitor-drawer' = 38,\n 'remote-devices-main' = 39,\n 'remote-devices-drawer' = 40,\n 'web-audio-main' = 41,\n 'web-audio-drawer' = 42,\n 'changes.changes-main' = 43,\n 'changes.changes-drawer' = 44,\n 'performance.monitor-main' = 45,\n 'performance.monitor-drawer' = 46,\n 'release-note-main' = 47,\n 'release-note-drawer' = 48,\n 'live_heap_profile-main' = 49,\n 'live_heap_profile-drawer' = 50,\n 'sources.quick-main' = 51,\n 'sources.quick-drawer' = 52,\n 'network.blocked-urls-main' = 53,\n 'network.blocked-urls-drawer' = 54,\n 'settings-preferences-main' = 55,\n 'settings-preferences-drawer' = 56,\n 'settings-workspace-main' = 57,\n 'settings-workspace-drawer' = 58,\n 'settings-experiments-main' = 59,\n 'settings-experiments-drawer' = 60,\n 'settings-blackbox-main' = 61,\n 'settings-blackbox-drawer' = 62,\n 'settings-devices-main' = 63,\n 'settings-devices-drawer' = 64,\n 'settings-throttling-conditions-main' = 65,\n 'settings-throttling-conditions-drawer' = 66,\n 'settings-emulation-locations-main' = 67,\n 'settings-emulation-locations-drawer' = 68,\n 'settings-shortcuts-main' = 69,\n 'settings-shortcuts-drawer' = 70,\n 'issues-pane-main' = 71,\n 'issues-pane-drawer' = 72,\n 'settings-keybinds-main' = 73,\n 'settings-keybinds-drawer' = 74,\n 'cssoverview-main' = 75,\n 'cssoverview-drawer' = 76,\n 'chrome_recorder-main' = 77,\n 'chrome_recorder-drawer' = 78,\n 'trust_tokens-main' = 79,\n 'trust_tokens-drawer' = 80,\n 'reporting_api-main' = 81,\n 'reporting_api-drawer' = 82,\n 'interest_groups-main' = 83,\n 'interest_groups-drawer' = 84,\n 'back_forward_cache-main' = 85,\n 'back_forward_cache-drawer' = 86,\n 'service_worker_cache-main' = 87,\n 'service_worker_cache-drawer' = 88,\n 'background_service_backgroundFetch-main' = 89,\n 'background_service_backgroundFetch-drawer' = 90,\n 'background_service_backgroundSync-main' = 91,\n 'background_service_backgroundSync-drawer' = 92,\n 'background_service_pushMessaging-main' = 93,\n 'background_service_pushMessaging-drawer' = 94,\n 'background_service_notifications-main' = 95,\n 'background_service_notifications-drawer' = 96,\n 'background_service_paymentHandler-main' = 97,\n 'background_service_paymentHandler-drawer' = 98,\n 'background_service_periodicBackgroundSync-main' = 99,\n 'background_service_periodicBackgroundSync-drawer' = 100,\n 'service_workers-main' = 101,\n 'service_workers-drawer' = 102,\n 'app_manifest-main' = 103,\n 'app_manifest-drawer' = 104,\n 'storage-main' = 105,\n 'storage-drawer' = 106,\n 'cookies-main' = 107,\n 'cookies-drawer' = 108,\n 'frame_details-main' = 109,\n 'frame_details-drawer' = 110,\n 'frame_resource-main' = 111,\n 'frame_resource-drawer' = 112,\n 'frame_window-main' = 113,\n 'frame_window-drawer' = 114,\n 'frame_worker-main' = 115,\n 'frame_worker-drawer' = 116,\n 'dom_storage-main' = 117,\n 'dom_storage-drawer' = 118,\n 'indexed_db-main' = 119,\n 'indexed_db-drawer' = 120,\n 'web_sql-main' = 121,\n 'web_sql-drawer' = 122,\n 'performance_insights-main' = 123,\n 'performance_insights-drawer' = 124,\n 'preloading-main' = 125,\n 'preloading-drawer' = 126,\n 'bounce_tracking_mitigations-main' = 127,\n 'bounce_tracking_mitigations-drawer' = 128,\n 'developer-resources-main' = 129,\n 'developer-resources-drawer' = 130,\n 'autofill-view-main' = 131,\n 'autofill-view-drawer' = 132,\n /* eslint-enable @typescript-eslint/naming-convention */\n MAX_VALUE = 133,\n}\n\nexport enum ElementsSidebarTabCodes {\n /* eslint-disable @typescript-eslint/naming-convention */\n 'OtherSidebarPane' = 0,\n 'styles' = 1,\n 'computed' = 2,\n 'elements.layout' = 3,\n 'elements.event-listeners' = 4,\n 'elements.dom-breakpoints' = 5,\n 'elements.dom-properties' = 6,\n 'accessibility.view' = 7,\n /* eslint-enable @typescript-eslint/naming-convention */\n MAX_VALUE = 8,\n}\n\nexport enum MediaTypes {\n /* eslint-disable @typescript-eslint/naming-convention */\n Unknown = 0,\n 'text/css' = 2,\n 'text/html' = 3,\n 'application/xml' = 4,\n 'application/wasm' = 5,\n 'application/manifest+json' = 6,\n 'application/x-aspx' = 7,\n 'application/jsp' = 8,\n 'text/x-c++src' = 9,\n 'text/x-coffeescript' = 10,\n 'application/vnd.dart' = 11,\n 'text/typescript' = 12,\n 'text/typescript-jsx' = 13,\n 'application/json' = 14,\n 'text/x-csharp' = 15,\n 'text/x-java' = 16,\n 'text/x-less' = 17,\n 'application/x-httpd-php' = 18,\n 'text/x-python' = 19,\n 'text/x-sh' = 20,\n 'text/x-gss' = 21,\n 'text/x-sass' = 22,\n 'text/x-scss' = 23,\n 'text/markdown' = 24,\n 'text/x-clojure' = 25,\n 'text/jsx' = 26,\n 'text/x-go' = 27,\n 'text/x-kotlin' = 28,\n 'text/x-scala' = 29,\n 'text/x.svelte' = 30,\n 'text/javascript+plain' = 31,\n 'text/javascript+minified' = 32,\n 'text/javascript+sourcemapped' = 33,\n 'text/x.angular' = 34,\n 'text/x.vue' = 35,\n 'text/javascript+snippet' = 36,\n 'text/javascript+eval' = 37, // Scripts resulting from console inputs or page \"eval\"s with no sourceUrl comment.\n /* eslint-enable @typescript-eslint/naming-convention */\n MAX_VALUE = 38,\n}\n\nexport enum KeybindSetSettings {\n /* eslint-disable @typescript-eslint/naming-convention */\n 'devToolsDefault' = 0,\n 'vsCode' = 1,\n /* eslint-enable @typescript-eslint/naming-convention */\n MAX_VALUE = 2,\n}\n\nexport enum KeyboardShortcutAction {\n /* eslint-disable @typescript-eslint/naming-convention */\n OtherShortcut = 0,\n 'quick-open.show-command-menu' = 1,\n 'console.clear' = 2,\n 'console.toggle' = 3,\n 'debugger.step' = 4,\n 'debugger.step-into' = 5,\n 'debugger.step-out' = 6,\n 'debugger.step-over' = 7,\n 'debugger.toggle-breakpoint' = 8,\n 'debugger.toggle-breakpoint-enabled' = 9,\n 'debugger.toggle-pause' = 10,\n 'elements.edit-as-html' = 11,\n 'elements.hide-element' = 12,\n 'elements.redo' = 13,\n 'elements.toggle-element-search' = 14,\n 'elements.undo' = 15,\n 'main.search-in-panel.find' = 16,\n 'main.toggle-drawer' = 17,\n 'network.hide-request-details' = 18,\n 'network.search' = 19,\n 'network.toggle-recording' = 20,\n 'quick-open.show' = 21,\n 'settings.show' = 22,\n 'sources.search' = 23,\n 'background-service.toggle-recording' = 24,\n 'components.collect-garbage' = 25,\n 'console.clear.history' = 26,\n 'console.create-pin' = 27,\n 'coverage.start-with-reload' = 28,\n 'coverage.toggle-recording' = 29,\n 'debugger.breakpoint-input-window' = 30,\n 'debugger.evaluate-selection' = 31,\n 'debugger.next-call-frame' = 32,\n 'debugger.previous-call-frame' = 33,\n 'debugger.run-snippet' = 34,\n 'debugger.toggle-breakpoints-active' = 35,\n 'elements.capture-area-screenshot' = 36,\n 'emulation.capture-full-height-screenshot' = 37,\n 'emulation.capture-node-screenshot' = 38,\n 'emulation.capture-screenshot' = 39,\n 'emulation.show-sensors' = 40,\n 'emulation.toggle-device-mode' = 41,\n 'help.release-notes' = 42,\n 'help.report-issue' = 43,\n 'input.start-replaying' = 44,\n 'input.toggle-pause' = 45,\n 'input.toggle-recording' = 46,\n 'inspector-main.focus-debuggee' = 47,\n 'inspector-main.hard-reload' = 48,\n 'inspector-main.reload' = 49,\n 'live-heap-profile.start-with-reload' = 50,\n 'live-heap-profile.toggle-recording' = 51,\n 'main.debug-reload' = 52,\n 'main.next-tab' = 53,\n 'main.previous-tab' = 54,\n 'main.search-in-panel.cancel' = 55,\n 'main.search-in-panel.find-next' = 56,\n 'main.search-in-panel.find-previous' = 57,\n 'main.toggle-dock' = 58,\n 'main.zoom-in' = 59,\n 'main.zoom-out' = 60,\n 'main.zoom-reset' = 61,\n 'network-conditions.network-low-end-mobile' = 62,\n 'network-conditions.network-mid-tier-mobile' = 63,\n 'network-conditions.network-offline' = 64,\n 'network-conditions.network-online' = 65,\n 'profiler.heap-toggle-recording' = 66,\n 'profiler.js-toggle-recording' = 67,\n 'resources.clear' = 68,\n 'settings.documentation' = 69,\n 'settings.shortcuts' = 70,\n 'sources.add-folder-to-workspace' = 71,\n 'sources.add-to-watch' = 72,\n 'sources.close-all' = 73,\n 'sources.close-editor-tab' = 74,\n 'sources.create-snippet' = 75,\n 'sources.go-to-line' = 76,\n 'sources.go-to-member' = 77,\n 'sources.jump-to-next-location' = 78,\n 'sources.jump-to-previous-location' = 79,\n 'sources.rename' = 80,\n 'sources.save' = 81,\n 'sources.save-all' = 82,\n 'sources.switch-file' = 83,\n 'timeline.jump-to-next-frame' = 84,\n 'timeline.jump-to-previous-frame' = 85,\n 'timeline.load-from-file' = 86,\n 'timeline.next-recording' = 87,\n 'timeline.previous-recording' = 88,\n 'timeline.record-reload' = 89,\n 'timeline.save-to-file' = 90,\n 'timeline.show-history' = 91,\n 'timeline.toggle-recording' = 92,\n 'sources.increment-css' = 93,\n 'sources.increment-css-by-ten' = 94,\n 'sources.decrement-css' = 95,\n 'sources.decrement-css-by-ten' = 96,\n 'layers.reset-view' = 97,\n 'layers.pan-mode' = 98,\n 'layers.rotate-mode' = 99,\n 'layers.zoom-in' = 100,\n 'layers.zoom-out' = 101,\n 'layers.up' = 102,\n 'layers.down' = 103,\n 'layers.left' = 104,\n 'layers.right' = 105,\n 'help.report-translation-issue' = 106,\n 'rendering.toggle-prefers-color-scheme' = 107,\n 'chrome-recorder.start-recording' = 108,\n 'chrome-recorder.replay-recording' = 109,\n 'chrome-recorder.toggle-code-view' = 110,\n 'chrome-recorder.copy-recording-or-step' = 111,\n 'changes.revert' = 112,\n 'changes.copy' = 113,\n 'elements.new-style-rule' = 114,\n 'elements.refresh-event-listeners' = 115,\n 'coverage.clear' = 116,\n 'coverage.export' = 117,\n /* eslint-enable @typescript-eslint/naming-convention */\n MAX_VALUE = 118,\n}\n\nexport const enum IssueOpener {\n CONSOLE_INFO_BAR = 0,\n LEARN_MORE_LINK_COEP = 1,\n STATUS_BAR_ISSUES_COUNTER = 2,\n HAMBURGER_MENU = 3,\n ADORNER = 4,\n COMMAND_MENU = 5,\n MAX_VALUE = 6,\n}\n\n/**\n * This list should contain the currently active Devtools Experiments,\n * gaps are expected.\n */\nexport enum DevtoolsExperiments {\n /* eslint-disable @typescript-eslint/naming-convention */\n 'apply-custom-stylesheet' = 0,\n 'capture-node-creation-stacks' = 1,\n 'live-heap-profile' = 11,\n 'protocol-monitor' = 13,\n 'sampling-heap-profiler-timeline' = 17,\n 'show-option-tp-expose-internals-in-heap-snapshot' = 18,\n 'timeline-invalidation-tracking' = 26,\n 'timeline-show-all-events' = 27,\n 'timeline-v8-runtime-call-stats' = 28,\n 'apca' = 39,\n 'font-editor' = 41,\n 'full-accessibility-tree' = 42,\n 'contrast-issues' = 44,\n 'experimental-cookie-features' = 45,\n 'styles-pane-css-changes' = 55,\n 'instrumentation-breakpoints' = 61,\n 'authored-deployed-grouping' = 63,\n 'just-my-code' = 65,\n 'highlight-errors-elements-panel' = 73,\n 'use-source-map-scopes' = 76,\n 'network-panel-filter-bar-redesign' = 79,\n 'autofill-view' = 82,\n 'css-type-component-length-deprecate' = 85,\n 'timeline-show-postmessage-events' = 86,\n 'timeline-enhanced-traces' = 90,\n 'timeline-compiled-sources' = 91,\n 'timeline-debug-mode' = 93,\n 'perf-panel-annotations' = 94,\n 'timeline-rpp-sidebar' = 95,\n 'timeline-observations' = 96,\n 'gen-ai-settings-panel' = 97,\n 'timeline-server-timings' = 98,\n 'timeline-layout-shift-details' = 99,\n /* eslint-enable @typescript-eslint/naming-convention */\n\n // Increment this when new experiments are added.\n MAX_VALUE = 100,\n}\n\nexport const enum ColorPickerOpenedFrom {\n SOURCES_PANEL = 0,\n STYLES_TAB = 1,\n MAX_VALUE = 2,\n}\n\nexport const enum CSSPropertyDocumentation {\n SHOWN = 0,\n TOGGLED_ON = 1,\n TOGGLED_OFF = 2,\n MAX_VALUE = 3,\n}\n\n// Update DevToolsIssuesPanelIssueExpanded from tools/metrics/histograms/enums.xml if new enum is added.\nexport enum IssueExpanded {\n /* eslint-disable @typescript-eslint/naming-convention */\n CrossOriginEmbedderPolicy = 0,\n MixedContent = 1,\n SameSiteCookie = 2,\n HeavyAd = 3,\n ContentSecurityPolicy = 4,\n Other = 5,\n Generic = 6,\n ThirdPartyPhaseoutCookie = 7,\n GenericCookie = 8,\n /* eslint-enable @typescript-eslint/naming-convention */\n MAX_VALUE = 9,\n}\n\nexport enum IssueResourceOpened {\n /* eslint-disable @typescript-eslint/naming-convention */\n CrossOriginEmbedderPolicyRequest = 0,\n CrossOriginEmbedderPolicyElement = 1,\n MixedContentRequest = 2,\n SameSiteCookieCookie = 3,\n SameSiteCookieRequest = 4,\n HeavyAdElement = 5,\n ContentSecurityPolicyDirective = 6,\n ContentSecurityPolicyElement = 7,\n /* eslint-enable @typescript-eslint/naming-convention */\n MAX_VALUE = 13,\n}\n\n/**\n * This list should contain the currently active issue types,\n * gaps are expected.\n */\nexport enum IssueCreated {\n /* eslint-disable @typescript-eslint/naming-convention */\n MixedContentIssue = 0,\n 'ContentSecurityPolicyIssue::kInlineViolation' = 1,\n 'ContentSecurityPolicyIssue::kEvalViolation' = 2,\n 'ContentSecurityPolicyIssue::kURLViolation' = 3,\n 'ContentSecurityPolicyIssue::kTrustedTypesSinkViolation' = 4,\n 'ContentSecurityPolicyIssue::kTrustedTypesPolicyViolation' = 5,\n 'HeavyAdIssue::NetworkTotalLimit' = 6,\n 'HeavyAdIssue::CpuTotalLimit' = 7,\n 'HeavyAdIssue::CpuPeakLimit' = 8,\n 'CrossOriginEmbedderPolicyIssue::CoepFrameResourceNeedsCoepHeader' = 9,\n 'CrossOriginEmbedderPolicyIssue::CoopSandboxedIFrameCannotNavigateToCoopPage' = 10,\n 'CrossOriginEmbedderPolicyIssue::CorpNotSameOrigin' = 11,\n 'CrossOriginEmbedderPolicyIssue::CorpNotSameOriginAfterDefaultedToSameOriginByCoep' = 12,\n 'CrossOriginEmbedderPolicyIssue::CorpNotSameSite' = 13,\n 'CookieIssue::ExcludeSameSiteNoneInsecure::ReadCookie' = 14,\n 'CookieIssue::ExcludeSameSiteNoneInsecure::SetCookie' = 15,\n 'CookieIssue::WarnSameSiteNoneInsecure::ReadCookie' = 16,\n 'CookieIssue::WarnSameSiteNoneInsecure::SetCookie' = 17,\n 'CookieIssue::WarnSameSiteStrictLaxDowngradeStrict::Secure' = 18,\n 'CookieIssue::WarnSameSiteStrictLaxDowngradeStrict::Insecure' = 19,\n 'CookieIssue::WarnCrossDowngrade::ReadCookie::Secure' = 20,\n 'CookieIssue::WarnCrossDowngrade::ReadCookie::Insecure' = 21,\n 'CookieIssue::WarnCrossDowngrade::SetCookie::Secure' = 22,\n 'CookieIssue::WarnCrossDowngrade::SetCookie::Insecure' = 23,\n 'CookieIssue::ExcludeNavigationContextDowngrade::Secure' = 24,\n 'CookieIssue::ExcludeNavigationContextDowngrade::Insecure' = 25,\n 'CookieIssue::ExcludeContextDowngrade::ReadCookie::Secure' = 26,\n 'CookieIssue::ExcludeContextDowngrade::ReadCookie::Insecure' = 27,\n 'CookieIssue::ExcludeContextDowngrade::SetCookie::Secure' = 28,\n 'CookieIssue::ExcludeContextDowngrade::SetCookie::Insecure' = 29,\n 'CookieIssue::ExcludeSameSiteUnspecifiedTreatedAsLax::ReadCookie' = 30,\n 'CookieIssue::ExcludeSameSiteUnspecifiedTreatedAsLax::SetCookie' = 31,\n 'CookieIssue::WarnSameSiteUnspecifiedLaxAllowUnsafe::ReadCookie' = 32,\n 'CookieIssue::WarnSameSiteUnspecifiedLaxAllowUnsafe::SetCookie' = 33,\n 'CookieIssue::WarnSameSiteUnspecifiedCrossSiteContext::ReadCookie' = 34,\n 'CookieIssue::WarnSameSiteUnspecifiedCrossSiteContext::SetCookie' = 35,\n 'SharedArrayBufferIssue::TransferIssue' = 36,\n 'SharedArrayBufferIssue::CreationIssue' = 37,\n LowTextContrastIssue = 41,\n 'CorsIssue::InsecurePrivateNetwork' = 42,\n 'CorsIssue::InvalidHeaders' = 44,\n 'CorsIssue::WildcardOriginWithCredentials' = 45,\n 'CorsIssue::PreflightResponseInvalid' = 46,\n 'CorsIssue::OriginMismatch' = 47,\n 'CorsIssue::AllowCredentialsRequired' = 48,\n 'CorsIssue::MethodDisallowedByPreflightResponse' = 49,\n 'CorsIssue::HeaderDisallowedByPreflightResponse' = 50,\n 'CorsIssue::RedirectContainsCredentials' = 51,\n 'CorsIssue::DisallowedByMode' = 52,\n 'CorsIssue::CorsDisabledScheme' = 53,\n 'CorsIssue::PreflightMissingAllowExternal' = 54,\n 'CorsIssue::PreflightInvalidAllowExternal' = 55,\n 'CorsIssue::NoCorsRedirectModeNotFollow' = 57,\n 'QuirksModeIssue::QuirksMode' = 58,\n 'QuirksModeIssue::LimitedQuirksMode' = 59,\n DeprecationIssue = 60,\n 'ClientHintIssue::MetaTagAllowListInvalidOrigin' = 61,\n 'ClientHintIssue::MetaTagModifiedHTML' = 62,\n 'CorsIssue::PreflightAllowPrivateNetworkError' = 63,\n 'GenericIssue::CrossOriginPortalPostMessageError' = 64,\n 'GenericIssue::FormLabelForNameError' = 65,\n 'GenericIssue::FormDuplicateIdForInputError' = 66,\n 'GenericIssue::FormInputWithNoLabelError' = 67,\n 'GenericIssue::FormAutocompleteAttributeEmptyError' = 68,\n 'GenericIssue::FormEmptyIdAndNameAttributesForInputError' = 69,\n 'GenericIssue::FormAriaLabelledByToNonExistingId' = 70,\n 'GenericIssue::FormInputAssignedAutocompleteValueToIdOrNameAttributeError' = 71,\n 'GenericIssue::FormLabelHasNeitherForNorNestedInput' = 72,\n 'GenericIssue::FormLabelForMatchesNonExistingIdError' = 73,\n 'GenericIssue::FormHasPasswordFieldWithoutUsernameFieldError' = 74,\n 'GenericIssue::FormInputHasWrongButWellIntendedAutocompleteValueError' = 75,\n 'StylesheetLoadingIssue::LateImportRule' = 76,\n 'StylesheetLoadingIssue::RequestFailed' = 77,\n 'CorsIssue::PreflightMissingPrivateNetworkAccessId' = 78,\n 'CorsIssue::PreflightMissingPrivateNetworkAccessName' = 79,\n 'CorsIssue::PrivateNetworkAccessPermissionUnavailable' = 80,\n 'CorsIssue::PrivateNetworkAccessPermissionDenied' = 81,\n 'CookieIssue::WarnThirdPartyPhaseout::ReadCookie' = 82,\n 'CookieIssue::WarnThirdPartyPhaseout::SetCookie' = 83,\n 'CookieIssue::ExcludeThirdPartyPhaseout::ReadCookie' = 84,\n 'CookieIssue::ExcludeThirdPartyPhaseout::SetCookie' = 85,\n /* eslint-enable @typescript-eslint/naming-convention */\n MAX_VALUE = 86,\n}\n\nexport const enum DeveloperResourceLoaded {\n LOAD_THROUGH_PAGE_VIA_TARGET = 0,\n LOAD_THROUGH_PAGE_VIA_FRAME = 1,\n LOAD_THROUGH_PAGE_FAILURE = 2,\n LOAD_THROUGH_PAGE_FALLBACK = 3,\n FALLBACK_AFTER_FAILURE = 4,\n FALLBACK_PER_OVERRIDE = 5,\n FALLBACK_PER_PROTOCOL = 6,\n FALLBACK_FAILURE = 7,\n MAX_VALUE = 8,\n}\n\nexport const enum DeveloperResourceScheme {\n OTHER = 0,\n UKNOWN = 1,\n HTTP = 2,\n HTTPS = 3,\n HTTP_LOCALHOST = 4,\n HTTPS_LOCALHOST = 5,\n DATA = 6,\n FILE = 7,\n BLOB = 8,\n MAX_VALUE = 9,\n}\n\nexport enum ResourceType {\n /* eslint-disable @typescript-eslint/naming-convention -- Used by web_tests. */\n all = 0,\n Document = 1,\n JavaScript = 2,\n 'Fetch and XHR' = 3,\n CSS = 4,\n Font = 5,\n Image = 6,\n Media = 7,\n Manifest = 8,\n WebSocket = 9,\n WebAssembly = 10,\n Other = 11,\n /* eslint-enable @typescript-eslint/naming-convention */\n MAX_VALUE = 12,\n}\n\nexport enum NetworkPanelMoreFilters {\n /* eslint-disable @typescript-eslint/naming-convention */\n 'Hide data URLs' = 0,\n 'Hide extension URLs' = 1,\n 'Blocked response cookies' = 2,\n 'Blocked requests' = 3,\n '3rd-party requests' = 4,\n /* eslint-enable @typescript-eslint/naming-convention */\n MAX_VALUE = 5,\n}\n\nexport enum Language {\n /* eslint-disable @typescript-eslint/naming-convention */\n 'af' = 1,\n 'am' = 2,\n 'ar' = 3,\n 'as' = 4,\n 'az' = 5,\n 'be' = 6,\n 'bg' = 7,\n 'bn' = 8,\n 'bs' = 9,\n 'ca' = 10,\n 'cs' = 11,\n 'cy' = 12,\n 'da' = 13,\n 'de' = 14,\n 'el' = 15,\n 'en-GB' = 16,\n 'en-US' = 17,\n 'es-419' = 18,\n 'es' = 19,\n 'et' = 20,\n 'eu' = 21,\n 'fa' = 22,\n 'fi' = 23,\n 'fil' = 24,\n 'fr-CA' = 25,\n 'fr' = 26,\n 'gl' = 27,\n 'gu' = 28,\n 'he' = 29,\n 'hi' = 30,\n 'hr' = 31,\n 'hu' = 32,\n 'hy' = 33,\n 'id' = 34,\n 'is' = 35,\n 'it' = 36,\n 'ja' = 37,\n 'ka' = 38,\n 'kk' = 39,\n 'km' = 40,\n 'kn' = 41,\n 'ko' = 42,\n 'ky' = 43,\n 'lo' = 44,\n 'lt' = 45,\n 'lv' = 46,\n 'mk' = 47,\n 'ml' = 48,\n 'mn' = 49,\n 'mr' = 50,\n 'ms' = 51,\n 'my' = 52,\n 'ne' = 53,\n 'nl' = 54,\n 'no' = 55,\n 'or' = 56,\n 'pa' = 57,\n 'pl' = 58,\n 'pt-PT' = 59,\n 'pt' = 60,\n 'ro' = 61,\n 'ru' = 62,\n 'si' = 63,\n 'sk' = 64,\n 'sl' = 65,\n 'sq' = 66,\n 'sr-Latn' = 67,\n 'sr' = 68,\n 'sv' = 69,\n 'sw' = 70,\n 'ta' = 71,\n 'te' = 72,\n 'th' = 73,\n 'tr' = 74,\n 'uk' = 75,\n 'ur' = 76,\n 'uz' = 77,\n 'vi' = 78,\n 'zh' = 79,\n 'zh-HK' = 80,\n 'zh-TW' = 81,\n 'zu' = 82,\n /* eslint-enable @typescript-eslint/naming-convention */\n MAX_VALUE = 83,\n}\n\nexport const enum SyncSetting {\n CHROME_SYNC_DISABLED = 1,\n CHROME_SYNC_SETTINGS_DISABLED = 2,\n DEVTOOLS_SYNC_SETTING_DISABLED = 3,\n DEVTOOLS_SYNC_SETTING_ENABLED = 4,\n MAX_VALUE = 5,\n}\n\nexport const enum RecordingToggled {\n RECORDING_STARTED = 1,\n RECORDING_FINISHED = 2,\n MAX_VALUE = 3,\n}\n\nexport const enum RecordingAssertion {\n ASSERTION_ADDED = 1,\n PROPERTY_ASSERTION_EDITED = 2,\n ATTRIBUTE_ASSERTION_EDITED = 3,\n MAX_VALUE = 4,\n}\n\nexport const enum RecordingReplayFinished {\n SUCCESS = 1,\n TIMEOUT_ERROR_SELECTORS = 2,\n TIMEOUT_ERROR_TARGET = 3,\n OTHER_ERROR = 4,\n MAX_VALUE = 5,\n}\n\nexport const enum RecordingReplaySpeed {\n NORMAL = 1,\n SLOW = 2,\n VERY_SLOW = 3,\n EXTREMELY_SLOW = 4,\n MAX_VALUE = 5,\n}\n\nexport const enum RecordingReplayStarted {\n REPLAY_ONLY = 1,\n REPLAY_WITH_PERFORMANCE_TRACING = 2,\n REPLAY_VIA_EXTENSION = 3,\n MAX_VALUE = 4,\n}\n\nexport const enum RecordingEdited {\n SELECTOR_PICKER_USED = 1,\n STEP_ADDED = 2,\n STEP_REMOVED = 3,\n SELECTOR_ADDED = 4,\n SELECTOR_REMOVED = 5,\n SELECTOR_PART_ADDED = 6,\n SELECTOR_PART_EDITED = 7,\n SELECTOR_PART_REMOVED = 8,\n TYPE_CHANGED = 9,\n OTHER_EDITING = 10,\n MAX_VALUE = 11,\n}\n\nexport const enum RecordingExported {\n TO_PUPPETEER = 1,\n TO_JSON = 2,\n TO_PUPPETEER_REPLAY = 3,\n TO_EXTENSION = 4,\n TO_LIGHTHOUSE = 5,\n MAX_VALUE = 6,\n}\n\nexport const enum RecordingCodeToggled {\n CODE_SHOWN = 1,\n CODE_HIDDEN = 2,\n MAX_VALUE = 3,\n}\n\nexport const enum RecordingCopiedToClipboard {\n COPIED_RECORDING_WITH_PUPPETEER = 1,\n COPIED_RECORDING_WITH_JSON = 2,\n COPIED_RECORDING_WITH_REPLAY = 3,\n COPIED_RECORDING_WITH_EXTENSION = 4,\n COPIED_STEP_WITH_PUPPETEER = 5,\n COPIED_STEP_WITH_JSON = 6,\n COPIED_STEP_WITH_REPLAY = 7,\n COPIED_STEP_WITH_EXTENSION = 8,\n MAX_VALUE = 9,\n}\n\nexport const enum StyleTextCopied {\n DECLARATION_VIA_CHANGED_LINE = 1,\n ALL_CHANGES_VIA_STYLES_TAB = 2,\n DECLARATION_VIA_CONTEXT_MENU = 3,\n PROPERTY_VIA_CONTEXT_MENU = 4,\n VALUE_VIA_CONTEXT_MENU = 5,\n DECLARATION_AS_JS_VIA_CONTEXT_MENU = 6,\n RULE_VIA_CONTEXT_MENU = 7,\n ALL_DECLARATIONS_VIA_CONTEXT_MENU = 8,\n ALL_DECLARATINS_AS_JS_VIA_CONTEXT_MENU = 9,\n SELECTOR_VIA_CONTEXT_MENU = 10,\n MAX_VALUE = 11,\n}\n\nexport enum ManifestSectionCodes {\n /* eslint-disable @typescript-eslint/naming-convention -- Indexed access. */\n OtherSection = 0,\n 'Identity' = 1,\n 'Presentation' = 2,\n 'Protocol Handlers' = 3,\n 'Icons' = 4,\n 'Window Controls Overlay' = 5,\n /* eslint-enable @typescript-eslint/naming-convention */\n MAX_VALUE = 6,\n}\n\n// The names here match the CSSRuleValidator names in CSSRuleValidator.ts.\nexport const enum CSSHintType {\n OTHER = 0,\n ALIGN_CONTENT = 1,\n FLEX_ITEM = 2,\n FLEX_CONTAINER = 3,\n GRID_CONTAINER = 4,\n GRID_ITEM = 5,\n FLEX_GRID = 6,\n MULTICOL_FLEX_GRID = 7,\n PADDING = 8,\n POSITION = 9,\n Z_INDEX = 10,\n SIZING = 11,\n FLEX_OR_GRID_ITEM = 12,\n FONT_VARIATION_SETTINGS = 13,\n MAX_VALUE = 14,\n}\n\nexport const enum LighthouseModeRun {\n NAVIGATION = 0,\n TIMESPAN = 1,\n SNAPSHOT = 2,\n LEGACY_NAVIGATION = 3,\n MAX_VALUE = 4,\n}\n\nexport const enum LighthouseCategoryUsed {\n PERFORMANCE = 0,\n ACCESSIBILITY = 1,\n BEST_PRACTICES = 2,\n SEO = 3,\n PWA = 4,\n PUB_ADS = 5,\n MAX_VALUE = 6,\n}\n\nexport const enum SwatchType {\n VAR_LINK = 0,\n ANIMATION_NAME_LINK = 1,\n COLOR = 2,\n ANIMATION_TIMING = 3,\n SHADOW = 4,\n GRID = 5,\n FLEX = 6,\n ANGLE = 7,\n LENGTH = 8,\n POSITION_TRY_LINK = 10,\n MAX_VALUE = 11,\n}\n\nexport const enum BadgeType {\n GRID = 0,\n SUBGRID = 1,\n FLEX = 2,\n AD = 3,\n SCROLL_SNAP = 4,\n CONTAINER = 5,\n SLOT = 6,\n TOP_LAYER = 7,\n REVEAL = 8,\n MAX_VALUE = 9,\n}\n\nexport const enum AnimationsPlaybackRate {\n PERCENT_100 = 0,\n PERCENT_25 = 1,\n PERCENT_10 = 2,\n OTHER = 3,\n MAX_VALUE = 4,\n}\n\nexport const enum AnimationPointDragType {\n // Animation is dragged as a whole in the Animations panel.\n ANIMATION_DRAG = 0,\n // A keyframe point inside animation timeline is dragged.\n KEYFRAME_MOVE = 1,\n // Start point of the animation inside animation timeline is dragged.\n START_ENDPOINT_MOVE = 2,\n // Finish point of the animation inside animation timeline is dragged.\n FINISH_ENDPOINT_MOVE = 3,\n OTHER = 4,\n MAX_VALUE = 5,\n}\n"]}
\ No newline at end of file
diff --git a/public/core/i18n/i18n.test.js b/public/core/i18n/i18n.test.js
index 878edf002..df342371d 100644
--- a/public/core/i18n/i18n.test.js
+++ b/public/core/i18n/i18n.test.js
@@ -113,7 +113,7 @@ describe('fetchAndRegisterLocaleData', () => {
// this test. This means we only check the last part of the URL with which `fetch`
// was called.
const actualUrl = fetchStub.args[0][0];
- assert.isTrue(actualUrl.endsWith('gen/front_end/core/i18n/locales/en-US.json'), `Actually called with ${actualUrl}`);
+ assert.isTrue(actualUrl.endsWith('front_end/core/i18n/locales/en-US.json'), `Actually called with ${actualUrl}`);
});
it('fetches non-bundled locale files from the remote service endpoint', async () => {
await i18n.i18n.fetchAndRegisterLocaleData('de', fullLocation);
diff --git a/public/core/i18n/i18n.test.js.map b/public/core/i18n/i18n.test.js.map
index a1c975352..dd80c562a 100644
--- a/public/core/i18n/i18n.test.js.map
+++ b/public/core/i18n/i18n.test.js.map
@@ -1 +1 @@
-{"version":3,"file":"i18n.test.js","sourceRoot":"","sources":["../../../../../../front_end/core/i18n/i18n.test.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2021 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\nimport * as i18nRaw from '../../third_party/i18n/i18n.js';\n\nimport * as i18n from './i18n.js';\n\ndescribe('serializeUIString', () => {\n it('serializes strings without placeholders', () => {\n const output = i18n.i18n.serializeUIString('foo');\n assert.deepEqual(output, JSON.stringify({\n string: 'foo',\n values: {},\n }));\n });\n\n it('serializes strings with placeholder values', () => {\n const output = i18n.i18n.serializeUIString('a string', {PH1: 'value1', PH2: 'value2'});\n assert.deepEqual(output, JSON.stringify({\n string: 'a string',\n values: {PH1: 'value1', PH2: 'value2'},\n }));\n });\n});\n\ndescribe('deserializeUIString', () => {\n it('returns an empty object for an empty string input', () => {\n const output = i18n.i18n.deserializeUIString('');\n assert.deepEqual(output, {string: '', values: {}});\n });\n\n it('deserializes correctly for a string with no placeholders', () => {\n const output = i18n.i18n.deserializeUIString('{\"string\":\"foo\", \"values\":{}}');\n assert.deepEqual(output, {string: 'foo', values: {}});\n });\n\n it('deserializes correctly for a string with placeholders', () => {\n const output = i18n.i18n.deserializeUIString('{\"string\":\"foo\", \"values\":{\"PH1\": \"value1\"}}');\n assert.deepEqual(output, {string: 'foo', values: {PH1: 'value1'}});\n });\n});\n\ndescribe('serialize/deserialize round-trip', () => {\n it('returns a matching input/output', () => {\n const inputString = 'a string';\n const serializedString = i18n.i18n.serializeUIString(inputString);\n const deserializedString = i18n.i18n.deserializeUIString(serializedString);\n assert.deepEqual(deserializedString, {\n string: inputString,\n values: {},\n });\n });\n});\n\ndescribe('getLocalizedLanguageRegion', () => {\n function createMockDevToolsLocale(locale: string): i18n.DevToolsLocale.DevToolsLocale {\n return {locale, forceFallbackLocale: () => {}} as i18n.DevToolsLocale.DevToolsLocale;\n }\n\n it('build the correct language/region string', () => {\n assert.strictEqual(\n i18n.i18n.getLocalizedLanguageRegion('de-AT', createMockDevToolsLocale('en-US')),\n 'German (Austria) - Deutsch (Österreich)');\n assert.strictEqual(\n i18n.i18n.getLocalizedLanguageRegion('de', createMockDevToolsLocale('en-US')), 'German - Deutsch');\n assert.strictEqual(\n i18n.i18n.getLocalizedLanguageRegion('en-US', createMockDevToolsLocale('de')), 'Englisch (USA) - English (US)');\n });\n\n it('uses english for the target locale if the languages match', () => {\n assert.strictEqual(\n i18n.i18n.getLocalizedLanguageRegion('de-AT', createMockDevToolsLocale('de')),\n 'Deutsch (Österreich) - German (Austria)');\n assert.strictEqual(i18n.i18n.getLocalizedLanguageRegion('de', createMockDevToolsLocale('de')), 'Deutsch - German');\n });\n});\n\ndescribe('getFormatLocalizedString', () => {\n let i18nInstance: i18nRaw.I18n.I18n;\n beforeEach(() => {\n i18nInstance = new i18nRaw.I18n.I18n(['en-US'], 'en-US');\n i18nInstance.registerLocaleData('en-US', {}); // Always fall back to UIStrings.\n });\n\n it('returns an HTML element', () => {\n const uiStrings = {simple: 'a simple message'};\n const registeredStrings = i18nInstance.registerFileStrings('test.ts', uiStrings);\n\n const messageElement = i18n.i18n.getFormatLocalizedString(registeredStrings, uiStrings.simple, {});\n\n assert.instanceOf(messageElement, HTMLElement);\n assert.strictEqual(messageElement.innerText, 'a simple message');\n });\n\n it('nests HTML placeholders in the message element', () => {\n const uiStrings = {placeholder: 'a message with a {PH1} placeholder'};\n const registeredStrings = i18nInstance.registerFileStrings('test.ts', uiStrings);\n const placeholder = document.createElement('span');\n placeholder.innerText = 'very pretty';\n\n const messageElement =\n i18n.i18n.getFormatLocalizedString(registeredStrings, uiStrings.placeholder, {PH1: placeholder});\n\n assert.instanceOf(messageElement, HTMLElement);\n assert.strictEqual(messageElement.innerHTML, 'a message with a very pretty placeholder');\n });\n\n it('nests string placeholders in the message element', () => {\n const uiStrings = {placeholder: 'a message with a {PH1} placeholder'};\n const registeredStrings = i18nInstance.registerFileStrings('test.ts', uiStrings);\n\n const messageElement =\n i18n.i18n.getFormatLocalizedString(registeredStrings, uiStrings.placeholder, {PH1: 'somewhat nice'});\n\n assert.instanceOf(messageElement, HTMLElement);\n assert.strictEqual(messageElement.innerHTML, 'a message with a somewhat nice placeholder');\n });\n});\n\ndescribe('fetchAndRegisterLocaleData', () => {\n let fetchStub: sinon.SinonStub;\n\n beforeEach(() => {\n fetchStub = sinon.stub(window, 'fetch');\n fetchStub.returns(Promise.resolve(new window.Response(JSON.stringify({}), {\n // Always return an empty JSON object.\n status: 200,\n headers: {'Content-type': 'application/json'},\n })));\n });\n\n afterEach(() => {\n fetchStub.restore();\n i18n.i18n.resetLocaleDataForTest();\n });\n\n const bundled = 'devtools://devtools/bundled/devtools_app.html';\n const version = '@ffe848af6a5df4fa127e2929331116b7f9f1cb30';\n const remoteOrigin = 'https://chrome-devtools-frontend.appspot.com/';\n const remote = `${remoteOrigin}serve_file/${version}/`;\n const fullLocation = `${bundled}?remoteBase=${remote}&can_dock=true&dockSide=undocked`;\n\n it('fetches bundled locale files the same way as i18nImpl.ts itself is loaded', async () => {\n await i18n.i18n.fetchAndRegisterLocaleData('en-US', fullLocation);\n\n // We can't mock `import.meta.url` from i18nImpl so the Karam host leaks into\n // this test. This means we only check the last part of the URL with which `fetch`\n // was called.\n const actualUrl = fetchStub.args[0][0];\n assert.isTrue(\n actualUrl.endsWith('gen/front_end/core/i18n/locales/en-US.json'), `Actually called with ${actualUrl}`);\n });\n\n it('fetches non-bundled locale files from the remote service endpoint', async () => {\n await i18n.i18n.fetchAndRegisterLocaleData('de', fullLocation);\n\n assert.isTrue(\n fetchStub.calledWith(\n 'devtools://devtools/remote/serve_file/@ffe848af6a5df4fa127e2929331116b7f9f1cb30/core/i18n/locales/de.json'),\n `Actually called with ${fetchStub.args[0][0]}`);\n });\n});\n"]}
\ No newline at end of file
+{"version":3,"file":"i18n.test.js","sourceRoot":"","sources":["../../../../../../front_end/core/i18n/i18n.test.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2021 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\nimport * as i18nRaw from '../../third_party/i18n/i18n.js';\n\nimport * as i18n from './i18n.js';\n\ndescribe('serializeUIString', () => {\n it('serializes strings without placeholders', () => {\n const output = i18n.i18n.serializeUIString('foo');\n assert.deepEqual(output, JSON.stringify({\n string: 'foo',\n values: {},\n }));\n });\n\n it('serializes strings with placeholder values', () => {\n const output = i18n.i18n.serializeUIString('a string', {PH1: 'value1', PH2: 'value2'});\n assert.deepEqual(output, JSON.stringify({\n string: 'a string',\n values: {PH1: 'value1', PH2: 'value2'},\n }));\n });\n});\n\ndescribe('deserializeUIString', () => {\n it('returns an empty object for an empty string input', () => {\n const output = i18n.i18n.deserializeUIString('');\n assert.deepEqual(output, {string: '', values: {}});\n });\n\n it('deserializes correctly for a string with no placeholders', () => {\n const output = i18n.i18n.deserializeUIString('{\"string\":\"foo\", \"values\":{}}');\n assert.deepEqual(output, {string: 'foo', values: {}});\n });\n\n it('deserializes correctly for a string with placeholders', () => {\n const output = i18n.i18n.deserializeUIString('{\"string\":\"foo\", \"values\":{\"PH1\": \"value1\"}}');\n assert.deepEqual(output, {string: 'foo', values: {PH1: 'value1'}});\n });\n});\n\ndescribe('serialize/deserialize round-trip', () => {\n it('returns a matching input/output', () => {\n const inputString = 'a string';\n const serializedString = i18n.i18n.serializeUIString(inputString);\n const deserializedString = i18n.i18n.deserializeUIString(serializedString);\n assert.deepEqual(deserializedString, {\n string: inputString,\n values: {},\n });\n });\n});\n\ndescribe('getLocalizedLanguageRegion', () => {\n function createMockDevToolsLocale(locale: string): i18n.DevToolsLocale.DevToolsLocale {\n return {locale, forceFallbackLocale: () => {}} as i18n.DevToolsLocale.DevToolsLocale;\n }\n\n it('build the correct language/region string', () => {\n assert.strictEqual(\n i18n.i18n.getLocalizedLanguageRegion('de-AT', createMockDevToolsLocale('en-US')),\n 'German (Austria) - Deutsch (Österreich)');\n assert.strictEqual(\n i18n.i18n.getLocalizedLanguageRegion('de', createMockDevToolsLocale('en-US')), 'German - Deutsch');\n assert.strictEqual(\n i18n.i18n.getLocalizedLanguageRegion('en-US', createMockDevToolsLocale('de')), 'Englisch (USA) - English (US)');\n });\n\n it('uses english for the target locale if the languages match', () => {\n assert.strictEqual(\n i18n.i18n.getLocalizedLanguageRegion('de-AT', createMockDevToolsLocale('de')),\n 'Deutsch (Österreich) - German (Austria)');\n assert.strictEqual(i18n.i18n.getLocalizedLanguageRegion('de', createMockDevToolsLocale('de')), 'Deutsch - German');\n });\n});\n\ndescribe('getFormatLocalizedString', () => {\n let i18nInstance: i18nRaw.I18n.I18n;\n beforeEach(() => {\n i18nInstance = new i18nRaw.I18n.I18n(['en-US'], 'en-US');\n i18nInstance.registerLocaleData('en-US', {}); // Always fall back to UIStrings.\n });\n\n it('returns an HTML element', () => {\n const uiStrings = {simple: 'a simple message'};\n const registeredStrings = i18nInstance.registerFileStrings('test.ts', uiStrings);\n\n const messageElement = i18n.i18n.getFormatLocalizedString(registeredStrings, uiStrings.simple, {});\n\n assert.instanceOf(messageElement, HTMLElement);\n assert.strictEqual(messageElement.innerText, 'a simple message');\n });\n\n it('nests HTML placeholders in the message element', () => {\n const uiStrings = {placeholder: 'a message with a {PH1} placeholder'};\n const registeredStrings = i18nInstance.registerFileStrings('test.ts', uiStrings);\n const placeholder = document.createElement('span');\n placeholder.innerText = 'very pretty';\n\n const messageElement =\n i18n.i18n.getFormatLocalizedString(registeredStrings, uiStrings.placeholder, {PH1: placeholder});\n\n assert.instanceOf(messageElement, HTMLElement);\n assert.strictEqual(messageElement.innerHTML, 'a message with a very pretty placeholder');\n });\n\n it('nests string placeholders in the message element', () => {\n const uiStrings = {placeholder: 'a message with a {PH1} placeholder'};\n const registeredStrings = i18nInstance.registerFileStrings('test.ts', uiStrings);\n\n const messageElement =\n i18n.i18n.getFormatLocalizedString(registeredStrings, uiStrings.placeholder, {PH1: 'somewhat nice'});\n\n assert.instanceOf(messageElement, HTMLElement);\n assert.strictEqual(messageElement.innerHTML, 'a message with a somewhat nice placeholder');\n });\n});\n\ndescribe('fetchAndRegisterLocaleData', () => {\n let fetchStub: sinon.SinonStub;\n\n beforeEach(() => {\n fetchStub = sinon.stub(window, 'fetch');\n fetchStub.returns(Promise.resolve(new window.Response(JSON.stringify({}), {\n // Always return an empty JSON object.\n status: 200,\n headers: {'Content-type': 'application/json'},\n })));\n });\n\n afterEach(() => {\n fetchStub.restore();\n i18n.i18n.resetLocaleDataForTest();\n });\n\n const bundled = 'devtools://devtools/bundled/devtools_app.html';\n const version = '@ffe848af6a5df4fa127e2929331116b7f9f1cb30';\n const remoteOrigin = 'https://chrome-devtools-frontend.appspot.com/';\n const remote = `${remoteOrigin}serve_file/${version}/`;\n const fullLocation = `${bundled}?remoteBase=${remote}&can_dock=true&dockSide=undocked`;\n\n it('fetches bundled locale files the same way as i18nImpl.ts itself is loaded', async () => {\n await i18n.i18n.fetchAndRegisterLocaleData('en-US', fullLocation);\n\n // We can't mock `import.meta.url` from i18nImpl so the Karam host leaks into\n // this test. This means we only check the last part of the URL with which `fetch`\n // was called.\n const actualUrl = fetchStub.args[0][0];\n assert.isTrue(actualUrl.endsWith('front_end/core/i18n/locales/en-US.json'), `Actually called with ${actualUrl}`);\n });\n\n it('fetches non-bundled locale files from the remote service endpoint', async () => {\n await i18n.i18n.fetchAndRegisterLocaleData('de', fullLocation);\n\n assert.isTrue(\n fetchStub.calledWith(\n 'devtools://devtools/remote/serve_file/@ffe848af6a5df4fa127e2929331116b7f9f1cb30/core/i18n/locales/de.json'),\n `Actually called with ${fetchStub.args[0][0]}`);\n });\n});\n"]}
\ No newline at end of file
diff --git a/public/core/i18n/locales/en-US.json b/public/core/i18n/locales/en-US.json
index 3aa290ee2..cc78938a3 100644
--- a/public/core/i18n/locales/en-US.json
+++ b/public/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 | eventsource":{"message":"EventSource"},"core/common/ResourceType.ts | fetch":{"message":"Fetch"},"core/common/ResourceType.ts | fetchAndXHR":{"message":"Fetch and XHR"},"core/common/ResourceType.ts | font":{"message":"Font"},"core/common/ResourceType.ts | image":{"message":"Image"},"core/common/ResourceType.ts | img":{"message":"Img"},"core/common/ResourceType.ts | javascript":{"message":"JavaScript"},"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 | signedexchange":{"message":"SignedExchange"},"core/common/ResourceType.ts | stylesheet":{"message":"Stylesheet"},"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 | webtransport":{"message":"WebTransport"},"core/common/ResourceType.ts | ws":{"message":"WS"},"core/common/Revealer.ts | applicationPanel":{"message":"Application panel"},"core/common/Revealer.ts | changesDrawer":{"message":"Changes drawer"},"core/common/Revealer.ts | developerResourcesPanel":{"message":"Developer Resources panel"},"core/common/Revealer.ts | elementsPanel":{"message":"Elements panel"},"core/common/Revealer.ts | issuesView":{"message":"Issues view"},"core/common/Revealer.ts | memoryInspectorPanel":{"message":"Memory inspector panel"},"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/Revealer.ts | timelinePanel":{"message":"Performance panel"},"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/ChildTargetManager.ts | main":{"message":"Main"},"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 | exception":{"message":"Exception"},"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 | returnValue":{"message":"Return value"},"core/sdk/DebuggerModel.ts | script":{"message":"Script"},"core/sdk/DebuggerModel.ts | withBlock":{"message":"With block"},"core/sdk/NetworkManager.ts | fast4G":{"message":"Fast 4G"},"core/sdk/NetworkManager.ts | fastG":{"message":"Slow 4G"},"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":"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 | exemptionReasonCorsOptIn":{"message":"This cookie is allowed by CORS opt-in. Learn more: goo.gle/cors"},"core/sdk/NetworkRequest.ts | exemptionReasonEnterprisePolicy":{"message":"This cookie is allowed by Chrome Enterprise policy. Learn more: goo.gle/ce-3pc"},"core/sdk/NetworkRequest.ts | exemptionReasonScheme":{"message":"This cookie is allowed by the top-level url scheme"},"core/sdk/NetworkRequest.ts | exemptionReasonStorageAccessAPI":{"message":"This cookie is allowed by the Storage Access API. Learn more: goo.gle/saa"},"core/sdk/NetworkRequest.ts | exemptionReasonTopLevelStorageAccessAPI":{"message":"This cookie is allowed by the top-level Storage Access API. Learn more: goo.gle/saa-top"},"core/sdk/NetworkRequest.ts | exemptionReasonTopLevelTPCDDeprecationTrial":{"message":"This cookie is allowed by top-level third-party cookie deprecation trial. Learn more: goo.gle/ps-dt."},"core/sdk/NetworkRequest.ts | exemptionReasonTPCDDeprecationTrial":{"message":"This cookie is allowed by third-party cookie deprecation trial. Learn more: goo.gle/ps-dt."},"core/sdk/NetworkRequest.ts | exemptionReasonTPCDHeuristics":{"message":"This cookie is allowed by third-party cookie heuristics. Learn more: goo.gle/hbe"},"core/sdk/NetworkRequest.ts | exemptionReasonTPCDMetadata":{"message":"This cookie is allowed by a third-party cookie deprecation trial grace period. Learn more: goo.gle/dt-grace."},"core/sdk/NetworkRequest.ts | exemptionReasonUserSetting":{"message":"This cookie is allowed by user preference."},"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 | thirdPartyPhaseout":{"message":"This cookie was blocked either because of Chrome flags or browser configuration. Learn more in the Issues panel."},"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 | thisSetcookieHadADisallowedCharacter":{"message":"This Set-Cookie header contained a disallowed character (a forbidden ASCII control character, or the tab character if it appears in the middle of the cookie name, value, an attribute name, or an attribute value)."},"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 | thisSetcookieWasBlockedDueThirdPartyPhaseout":{"message":"Setting this cookie was blocked either because of Chrome flags or browser configuration. Learn more in the Issues panel."},"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 | customFormatters":{"message":"Custom formatters"},"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 | 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 | networkRequestBlocking":{"message":"Network request blocking"},"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"},"core/sdk/SourceMapScopeChainEntry.ts | block":{"message":"Block"},"core/sdk/SourceMapScopeChainEntry.ts | closure":{"message":"Closure"},"core/sdk/SourceMapScopeChainEntry.ts | global":{"message":"Global"},"core/sdk/SourceMapScopeChainEntry.ts | local":{"message":"Local"},"core/sdk/SourceMapScopeChainEntry.ts | returnValue":{"message":"Return value"},"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":"Keep page focused. Commonly used for debugging disappearing elements."},"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 | forcesCssPrefersreducedtransparencyMedia":{"message":"Forces CSS prefers-reduced-transparency 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/js_app/js_app.ts | networkTitle":{"message":"Scripts"},"entrypoints/js_app/js_app.ts | showNode":{"message":"Show Scripts"},"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 | browserPreference":{"message":"Browser preference"},"entrypoints/main/main-meta.ts | cancelSearch":{"message":"Cancel search"},"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 page"},"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 | switchToBrowserPreferredColor":{"message":"Switch to browser's preferred color theme"},"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 | 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 | useBrowserThemeColors":{"message":"Use browser theme colors"},"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 page"},"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 | CSSCustomStateDeprecatedSyntax":{"message":":--customstatename is deprecated. Please use the :state(customstatename) syntax instead."},"generated/Deprecation.ts | CSSInsetAreaProperty":{"message":"The inset-area property is deprecated. Please use the position-area property instead."},"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 | CSSValueAppearanceSliderVertical":{"message":"CSS appearance value slider-vertical is not standardized and will be removed."},"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 | 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 | GetInnerHTML":{"message":"The getInnerHTML() function is deprecated, and will be removed from this browser very soon. Please use getHTML() instead."},"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 | 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":"