diff --git a/.github/workflows/test-src.yml b/.github/workflows/test-src.yml index 5d0b05fd..d091ba01 100644 --- a/.github/workflows/test-src.yml +++ b/.github/workflows/test-src.yml @@ -24,3 +24,14 @@ jobs: - name: build run: npm run build + + - name: Setup Python + uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3 # v5 + with: + python-version: '3.11' + + - name: Install python seed generator requirements + run: pip install -r seed/requirements.txt + + - name: Compare python and typescript seed generator + run: npm run seed_tools compare_python_gen diff --git a/src/scripts/lint.ts b/src/scripts/lint.ts index e9fbe7fa..8ce3e4b1 100644 --- a/src/scripts/lint.ts +++ b/src/scripts/lint.ts @@ -41,8 +41,7 @@ function getLintAllCommands(options: Options): string[] { return [ 'prettier . --ignore-unknown' + (options.fix ? ' --write' : ' --check'), 'eslint . --config src/.eslintrc.js' + (options.fix ? ' --fix' : ''), - // TODO(goodov): Add a command to lint JSON studies when per-file structure - // appears. + 'npm run seed_tools -- lint studies' + (options.fix ? ' --fix' : ''), ]; } diff --git a/src/seed_tools/commands/compare_python_gen.ts b/src/seed_tools/commands/compare_python_gen.ts new file mode 100644 index 00000000..d8decf3b --- /dev/null +++ b/src/seed_tools/commands/compare_python_gen.ts @@ -0,0 +1,74 @@ +// Copyright (c) 2024 The Brave Authors. All rights reserved. +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this file, +// You can obtain one at https://mozilla.org/MPL/2.0/. + +import { Command } from '@commander-js/extra-typings'; +import { execSync } from 'child_process'; +import { assert } from 'console'; +import { existsSync, promises as fs } from 'fs'; +import * as os from 'os'; +import * as path from 'path'; + +export default function createCommand() { + return new Command('compare_python_gen') + .description( + 'Run python and typescript seed generators and compare results', + ) + .option('--python ', 'Path to python executable', 'python3') + .action(main); +} + +interface Options { + python: string; +} + +async function main(options: Options) { + const tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'seed-compare-')); + const mockSerialNumber = 'mock_serial_number'; + + try { + const pythonSeedFilePath = path.join(tempDir, 'python_seed.bin'); + const typescriptSeedFilePath = path.join(tempDir, 'typescript_seed.bin'); + const pythonSeedSerialNumberFilePath = path.join( + tempDir, + 'python_serialnumber', + ); + const typescriptSeedSerialNumberFilePath = path.join( + tempDir, + 'typescript_serialnumber', + ); + + // Run Python seed generator + execSync( + `${options.python} ./seed/serialize.py ./seed/seed.json --mock_serial_number ${mockSerialNumber}`, + { + stdio: 'inherit', + }, + ); + // Move generated seed.bin and serialnumber to temporary directory. + await moveFile('./seed.bin', pythonSeedFilePath); + await moveFile('./serialnumber', pythonSeedSerialNumberFilePath); + + // Run TypeScript seed generator + execSync( + `npm run seed_tools create ./studies ${typescriptSeedFilePath} -- --mock_serial_number ${mockSerialNumber} --output_serial_number_file ${typescriptSeedSerialNumberFilePath}`, + { stdio: 'inherit' }, + ); + + // Run seed comparator + execSync( + `npm run seed_tools compare_seeds ${pythonSeedFilePath} ${typescriptSeedFilePath} ${pythonSeedSerialNumberFilePath} ${typescriptSeedSerialNumberFilePath}`, + { stdio: 'inherit' }, + ); + } finally { + // Clean up temporary directory + await fs.rm(tempDir, { recursive: true, force: true }); + } +} + +async function moveFile(src: string, dest: string) { + await fs.copyFile(src, dest); + await fs.unlink(src); + assert(!existsSync(src)); +} diff --git a/src/seed_tools/commands/compare_seeds.ts b/src/seed_tools/commands/compare_seeds.ts index b2e84110..8e82793a 100644 --- a/src/seed_tools/commands/compare_seeds.ts +++ b/src/seed_tools/commands/compare_seeds.ts @@ -13,17 +13,19 @@ export default function createCommand() { .description('Compare two seed.bin') .argument('', 'seed1 file') .argument('', 'seed2 file') + .argument('', 'seed1 serialnumber file') + .argument('', 'seed2 serialnumber file') .action(main); } -async function main(seed1FilePath: string, seed2FilePath: string) { +async function main( + seed1FilePath: string, + seed2FilePath: string, + seed1SerialnumberFilePath: string, + seed2SerialnumberFilePath: string, +) { const seed1Binary: Buffer = await fs.readFile(seed1FilePath); const seed2Binary: Buffer = await fs.readFile(seed2FilePath); - if (seed1Binary.equals(seed2Binary)) { - console.log('Seeds are equal'); - process.exit(0); - } - const seed1Content = VariationsSeed.fromBinary(seed1Binary); const seed2Content = VariationsSeed.fromBinary(seed2Binary); @@ -52,9 +54,30 @@ async function main(seed1FilePath: string, seed2FilePath: string) { seed2FilePath, ), ); - } else { + process.exit(1); + } + + if (!seed1Binary.equals(seed2Binary)) { console.error('Seeds semantically equal but binary different'); + process.exit(1); + } + + const seed1Serialnumber: string = await fs.readFile( + seed1SerialnumberFilePath, + 'utf8', + ); + const seed2Serialnumber: string = await fs.readFile( + seed2SerialnumberFilePath, + 'utf8', + ); + if (seed1Content.serial_number !== seed1Serialnumber) { + console.error('Seed1 serial number does not match'); + process.exit(1); + } + if (seed2Content.serial_number !== seed2Serialnumber) { + console.error('Seed2 serial number does not match'); + process.exit(1); } - process.exit(1); + console.log('Seeds are equal'); } diff --git a/src/seed_tools/commands/create.test.ts b/src/seed_tools/commands/create.test.ts index 93bcac97..db282e9f 100644 --- a/src/seed_tools/commands/create.test.ts +++ b/src/seed_tools/commands/create.test.ts @@ -101,6 +101,35 @@ describe('create command', () => { ); }); + describe('serial number is equal in the seed and in the generated file', () => { + const validSeedsDir = path.join(testDataDir, 'valid_seeds'); + it.each(fs_sync.readdirSync(validSeedsDir))( + 'correctly creates %s', + async (testCase) => { + const testCaseDir = path.join(validSeedsDir, testCase); + const studiesDir = path.join(testCaseDir, 'studies'); + const outputFile = path.join(tempDir, 'output.bin'); + const serialNumberPath = path.join(tempDir, 'serial_number.txt'); + + await create().parseAsync([ + 'node', + 'create', + studiesDir, + outputFile, + '--output_serial_number_file', + serialNumberPath, + ]); + + const output = await fs.readFile(outputFile); + const outputSerialNumber = await fs.readFile(serialNumberPath, 'utf-8'); + expect(outputSerialNumber).not.toEqual('1'); + expect(VariationsSeed.fromBinary(output).serial_number).toEqual( + outputSerialNumber, + ); + }, + ); + }); + describe('invalid studies', () => { const invalidStudiesDir = path.join(testDataDir, 'invalid_studies'); it.each(fs_sync.readdirSync(invalidStudiesDir))( @@ -117,8 +146,6 @@ describe('create command', () => { 'create', studiesDir, outputFile, - '--mock_serial_number', - '1', '--output_serial_number_file', serialNumberPath, ]), @@ -143,8 +170,6 @@ describe('create command', () => { 'create', studiesDir, outputFile, - '--mock_serial_number', - '1', '--output_serial_number_file', serialNumberPath, ]), diff --git a/src/seed_tools/seed_tools.ts b/src/seed_tools/seed_tools.ts index 16541469..aebe1553 100644 --- a/src/seed_tools/seed_tools.ts +++ b/src/seed_tools/seed_tools.ts @@ -5,6 +5,7 @@ import { program } from '@commander-js/extra-typings'; +import compare_python_gen from './commands/compare_python_gen'; import compare_seeds from './commands/compare_seeds'; import create from './commands/create'; import lint from './commands/lint'; @@ -13,6 +14,7 @@ import split_seed_json from './commands/split_seed_json'; program .name('seed_tools') .description('Seed tools for manipulating study files.') + .addCommand(compare_python_gen()) .addCommand(compare_seeds()) .addCommand(create()) .addCommand(lint()) diff --git a/studies/AllowCertainClientHintsStudy.json5 b/studies/AllowCertainClientHintsStudy.json5 new file mode 100644 index 00000000..cd4ca57e --- /dev/null +++ b/studies/AllowCertainClientHintsStudy.json5 @@ -0,0 +1,34 @@ +[ + { + name: 'AllowCertainClientHintsStudy', + experiment: [ + { + name: 'Enabled', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'AllowCertainClientHints', + ], + }, + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + min_version: '104.1.44.59', + channel: [ + 'RELEASE', + 'BETA', + 'NIGHTLY', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + 'ANDROID', + ], + }, + }, +] diff --git a/studies/BraveAIChatEnabledStudy.json5 b/studies/BraveAIChatEnabledStudy.json5 new file mode 100644 index 00000000..e3b7e42f --- /dev/null +++ b/studies/BraveAIChatEnabledStudy.json5 @@ -0,0 +1,31 @@ +[ + { + name: 'BraveAIChatEnabledStudy', + experiment: [ + { + name: 'Enabled', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'AIChat', + ], + }, + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + min_version: '119.1.60.0', + channel: [ + 'RELEASE', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + ], + }, + }, +] diff --git a/studies/BraveAdblockExperimentalListDefaultStudy.json5 b/studies/BraveAdblockExperimentalListDefaultStudy.json5 new file mode 100644 index 00000000..a94a9f9c --- /dev/null +++ b/studies/BraveAdblockExperimentalListDefaultStudy.json5 @@ -0,0 +1,33 @@ +[ + { + name: 'BraveAdblockExperimentalListDefaultStudy', + experiment: [ + { + name: 'Enabled', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'BraveAdblockExperimentalListDefault', + ], + }, + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + min_version: '123.1.66.53', + channel: [ + 'BETA', + 'NIGHTLY', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + 'ANDROID', + ], + }, + }, +] diff --git a/studies/BraveAdblockMobileNotificationsListDefault.json5 b/studies/BraveAdblockMobileNotificationsListDefault.json5 new file mode 100644 index 00000000..ca42919e --- /dev/null +++ b/studies/BraveAdblockMobileNotificationsListDefault.json5 @@ -0,0 +1,33 @@ +[ + { + name: 'BraveAdblockMobileNotificationsListDefault', + experiment: [ + { + name: 'Enabled', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'BraveAdblockMobileNotificationsListDefault', + ], + }, + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + channel: [ + 'RELEASE', + 'BETA', + 'NIGHTLY', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + 'ANDROID', + ], + }, + }, +] diff --git a/studies/BraveAds.CreativeAdModelBasedPredictorRecencyStudy.json5 b/studies/BraveAds.CreativeAdModelBasedPredictorRecencyStudy.json5 new file mode 100644 index 00000000..3f61f55a --- /dev/null +++ b/studies/BraveAds.CreativeAdModelBasedPredictorRecencyStudy.json5 @@ -0,0 +1,43 @@ +[ + { + name: 'BraveAds.CreativeAdModelBasedPredictorRecencyStudy', + experiment: [ + { + name: 'NoRecency', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'CreativeNotificationAdModelBasedPredictor', + 'CreativeNewTabPageAdModelBasedPredictor', + 'CreativeInlineContentAdModelBasedPredictor', + ], + }, + param: [ + { + name: 'last_seen_ad_predictor_weight', + value: '0.0', + }, + { + name: 'last_seen_advertiser_predictor_weight', + value: '0.0', + }, + ], + }, + ], + filter: { + max_version: '128.1.69.51', + channel: [ + 'NIGHTLY', + 'BETA', + 'RELEASE', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + 'ANDROID', + 'IOS', + ], + }, + }, +] diff --git a/studies/BraveAdsAdEventStudy.json5 b/studies/BraveAdsAdEventStudy.json5 new file mode 100644 index 00000000..91e915b0 --- /dev/null +++ b/studies/BraveAdsAdEventStudy.json5 @@ -0,0 +1,44 @@ +[ + { + name: 'BraveAdsAdEventStudy', + experiment: [ + { + name: 'Enabled', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'AdEvent', + ], + }, + param: [ + { + name: 'debounce_clicked_ad_event_for', + value: '1s', + }, + { + name: 'deduplicate_clicked_ad_event_for', + value: '1s', + }, + ], + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + channel: [ + 'NIGHTLY', + 'BETA', + 'RELEASE', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + 'ANDROID', + 'IOS', + ], + }, + }, +] diff --git a/studies/BraveAdsConversionsStudy.json5 b/studies/BraveAdsConversionsStudy.json5 new file mode 100644 index 00000000..746f82e3 --- /dev/null +++ b/studies/BraveAdsConversionsStudy.json5 @@ -0,0 +1,40 @@ +[ + { + name: 'BraveAdsConversionsStudy', + experiment: [ + { + name: 'Enabled', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'Conversions', + ], + }, + param: [ + { + name: 'creative_set_conversion_cap', + value: '0', + }, + ], + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + channel: [ + 'NIGHTLY', + 'BETA', + 'RELEASE', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + 'ANDROID', + 'IOS', + ], + }, + }, +] diff --git a/studies/BraveAdsExclusionRulesStudy.json5 b/studies/BraveAdsExclusionRulesStudy.json5 new file mode 100644 index 00000000..aade3ee6 --- /dev/null +++ b/studies/BraveAdsExclusionRulesStudy.json5 @@ -0,0 +1,40 @@ +[ + { + name: 'BraveAdsExclusionRulesStudy', + experiment: [ + { + name: 'Enabled', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'ExclusionRules', + ], + }, + param: [ + { + name: 'should_exclude_ad_if_creative_set_exceeds_conversion_cap', + value: '0', + }, + ], + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + channel: [ + 'NIGHTLY', + 'BETA', + 'RELEASE', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + 'ANDROID', + 'IOS', + ], + }, + }, +] diff --git a/studies/BraveAdsNewTabPageAdsStudy.json5 b/studies/BraveAdsNewTabPageAdsStudy.json5 new file mode 100644 index 00000000..8916704d --- /dev/null +++ b/studies/BraveAdsNewTabPageAdsStudy.json5 @@ -0,0 +1,40 @@ +[ + { + name: 'BraveAdsNewTabPageAdsStudy', + experiment: [ + { + name: 'Enabled', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'NewTabPageAds', + ], + }, + param: [ + { + name: 'minimum_wait_time', + value: '1m', + }, + ], + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + channel: [ + 'NIGHTLY', + 'BETA', + 'RELEASE', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + 'ANDROID', + 'IOS', + ], + }, + }, +] diff --git a/studies/BraveAdsSiteVisitStudy.json5 b/studies/BraveAdsSiteVisitStudy.json5 new file mode 100644 index 00000000..14703b48 --- /dev/null +++ b/studies/BraveAdsSiteVisitStudy.json5 @@ -0,0 +1,44 @@ +[ + { + name: 'BraveAdsSiteVisitStudy', + experiment: [ + { + name: 'Enabled', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'SiteVisitFeature', + ], + }, + param: [ + { + name: 'page_land_after', + value: '5s', + }, + { + name: 'page_land_cap', + value: '0', + }, + ], + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + channel: [ + 'NIGHTLY', + 'BETA', + 'RELEASE', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + 'ANDROID', + 'IOS', + ], + }, + }, +] diff --git a/studies/BraveAdsTextClassificationPageProbabilitiesStudy.json5 b/studies/BraveAdsTextClassificationPageProbabilitiesStudy.json5 new file mode 100644 index 00000000..fb8b2f7b --- /dev/null +++ b/studies/BraveAdsTextClassificationPageProbabilitiesStudy.json5 @@ -0,0 +1,40 @@ +[ + { + name: 'BraveAdsTextClassificationPageProbabilitiesStudy', + experiment: [ + { + name: 'Enabled', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'TextClassification', + ], + }, + param: [ + { + name: 'page_probabilities_history_size', + value: '15', + }, + ], + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + channel: [ + 'NIGHTLY', + 'BETA', + 'RELEASE', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + 'ANDROID', + 'IOS', + ], + }, + }, +] diff --git a/studies/BraveAggressiveModeRetirementExperiment.json5 b/studies/BraveAggressiveModeRetirementExperiment.json5 new file mode 100644 index 00000000..8bd3370d --- /dev/null +++ b/studies/BraveAggressiveModeRetirementExperiment.json5 @@ -0,0 +1,34 @@ +[ + { + name: 'BraveAggressiveModeRetirementExperiment', + experiment: [ + { + name: 'Disabled', + probability_weight: 100, + feature_association: { + disable_feature: [ + 'BraveShowStrictFingerprintingMode', + ], + }, + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + min_version: '120.1.63.110', + channel: [ + 'NIGHTLY', + 'BETA', + 'RELEASE', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + 'ANDROID', + ], + }, + }, +] diff --git a/studies/BraveAutoTranslateStudy.json5 b/studies/BraveAutoTranslateStudy.json5 new file mode 100644 index 00000000..45b0b2be --- /dev/null +++ b/studies/BraveAutoTranslateStudy.json5 @@ -0,0 +1,34 @@ +[ + { + name: 'BraveAutoTranslateStudy', + experiment: [ + { + name: 'AutoTranslateDisabled', + probability_weight: 100, + feature_association: { + disable_feature: [ + 'BraveEnableAutoTranslate', + ], + }, + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + min_version: '107.1.47.31', + channel: [ + 'NIGHTLY', + 'BETA', + 'RELEASE', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + 'ANDROID', + ], + }, + }, +] diff --git a/studies/BraveCleanupSessionCookiesOnSessionRestore.json5 b/studies/BraveCleanupSessionCookiesOnSessionRestore.json5 new file mode 100644 index 00000000..91263bdf --- /dev/null +++ b/studies/BraveCleanupSessionCookiesOnSessionRestore.json5 @@ -0,0 +1,27 @@ +[ + { + name: 'BraveCleanupSessionCookiesOnSessionRestore', + experiment: [ + { + name: 'Disabled', + probability_weight: 100, + feature_association: { + disable_feature: [ + 'BraveCleanupSessionCookiesOnSessionRestore', + ], + }, + }, + ], + filter: { + min_version: '111.1.50.0', + channel: [ + 'RELEASE', + 'BETA', + 'NIGHTLY', + ], + platform: [ + 'MAC', + ], + }, + }, +] diff --git a/studies/BraveDebounceStudy.json5 b/studies/BraveDebounceStudy.json5 new file mode 100644 index 00000000..8fdbe144 --- /dev/null +++ b/studies/BraveDebounceStudy.json5 @@ -0,0 +1,43 @@ +[ + { + name: 'BraveDebounceStudy', + experiment: [ + { + name: 'Enabled', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'BraveDebounce', + ], + }, + }, + { + name: 'Disabled', + probability_weight: 0, + feature_association: { + disable_feature: [ + 'BraveDebounce', + ], + }, + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + min_version: '94.1.32.25', + channel: [ + 'RELEASE', + 'BETA', + 'NIGHTLY', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + 'ANDROID', + ], + }, + }, +] diff --git a/studies/BraveFallbackDoHStudy.json5 b/studies/BraveFallbackDoHStudy.json5 new file mode 100644 index 00000000..30c254cd --- /dev/null +++ b/studies/BraveFallbackDoHStudy.json5 @@ -0,0 +1,37 @@ +[ + { + name: 'BraveFallbackDoHStudy', + experiment: [ + { + name: 'Enabled', + probability_weight: 50, + feature_association: { + enable_feature: [ + 'BraveFallbackDoHProvider', + ], + }, + param: [ + { + name: 'BraveFallbackDoHProviderEndpoint', + value: 'quad9', + }, + ], + }, + { + name: 'Default', + probability_weight: 50, + }, + ], + filter: { + channel: [ + 'NIGHTLY', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + 'ANDROID', + ], + }, + }, +] diff --git a/studies/BraveFeedUpdateStudy.json5 b/studies/BraveFeedUpdateStudy.json5 new file mode 100644 index 00000000..cb369fde --- /dev/null +++ b/studies/BraveFeedUpdateStudy.json5 @@ -0,0 +1,30 @@ +[ + { + name: 'BraveFeedUpdateStudy', + experiment: [ + { + name: 'Enabled', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'BraveNewsFeedUpdate', + ], + }, + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + channel: [ + 'RELEASE', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + ], + }, + }, +] diff --git a/studies/BraveForgetFirstPartyStorage.json5 b/studies/BraveForgetFirstPartyStorage.json5 new file mode 100644 index 00000000..940273e6 --- /dev/null +++ b/studies/BraveForgetFirstPartyStorage.json5 @@ -0,0 +1,119 @@ +[ + { + name: 'BraveForgetFirstPartyStorage', + experiment: [ + { + name: 'Enabled', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'BraveForgetFirstPartyStorage', + ], + }, + }, + { + name: 'Disabled', + probability_weight: 0, + feature_association: { + disable_feature: [ + 'BraveForgetFirstPartyStorage', + ], + }, + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + min_version: '114.1.53.83', + channel: [ + 'BETA', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + 'ANDROID', + ], + }, + }, + { + name: 'BraveForgetFirstPartyStorage', + experiment: [ + { + name: 'Enabled', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'BraveForgetFirstPartyStorage', + ], + }, + }, + { + name: 'Disabled', + probability_weight: 0, + feature_association: { + disable_feature: [ + 'BraveForgetFirstPartyStorage', + ], + }, + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + min_version: '116.1.57.0', + channel: [ + 'RELEASE', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + 'ANDROID', + ], + }, + }, + { + name: 'BraveForgetFirstPartyStorage', + experiment: [ + { + name: 'Enabled', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'BraveForgetFirstPartyStorage', + ], + }, + }, + { + name: 'Disabled', + probability_weight: 0, + feature_association: { + disable_feature: [ + 'BraveForgetFirstPartyStorage', + ], + }, + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + min_version: '112.1.51.57', + channel: [ + 'NIGHTLY', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + 'ANDROID', + ], + }, + }, +] diff --git a/studies/BraveGoogleSignInPermissionStudy.json5 b/studies/BraveGoogleSignInPermissionStudy.json5 new file mode 100644 index 00000000..7dff42b5 --- /dev/null +++ b/studies/BraveGoogleSignInPermissionStudy.json5 @@ -0,0 +1,81 @@ +[ + { + name: 'BraveGoogleSignInPermissionStudy', + experiment: [ + { + name: 'Enabled', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'BraveGoogleSignInPermission', + ], + }, + }, + { + name: 'Disabled', + probability_weight: 0, + feature_association: { + disable_feature: [ + 'BraveGoogleSignInPermission', + ], + }, + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + min_version: '111.1.51.5', + channel: [ + 'NIGHTLY', + 'BETA', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + 'ANDROID', + ], + }, + }, + { + name: 'BraveGoogleSignInPermissionStudy', + experiment: [ + { + name: 'Enabled', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'BraveGoogleSignInPermission', + ], + }, + }, + { + name: 'Disabled', + probability_weight: 0, + feature_association: { + disable_feature: [ + 'BraveGoogleSignInPermission', + ], + }, + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + min_version: '111.1.51.5', + channel: [ + 'RELEASE', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + 'ANDROID', + ], + }, + }, +] diff --git a/studies/BraveHorizontalTabsUpdateEnabledStudy.json5 b/studies/BraveHorizontalTabsUpdateEnabledStudy.json5 new file mode 100644 index 00000000..024c37fb --- /dev/null +++ b/studies/BraveHorizontalTabsUpdateEnabledStudy.json5 @@ -0,0 +1,55 @@ +[ + { + name: 'BraveHorizontalTabsUpdateEnabledStudy', + experiment: [ + { + name: 'Enabled', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'BraveHorizontalTabsUpdate', + ], + }, + }, + ], + filter: { + channel: [ + 'NIGHTLY', + 'BETA', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + ], + }, + }, + { + name: 'BraveHorizontalTabsUpdateEnabledStudy', + experiment: [ + { + name: 'Enabled', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'BraveHorizontalTabsUpdate', + ], + }, + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + channel: [ + 'RELEASE', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + ], + }, + }, +] diff --git a/studies/BraveLocalhostAccessPermissionStudy.json5 b/studies/BraveLocalhostAccessPermissionStudy.json5 new file mode 100644 index 00000000..5b0f2733 --- /dev/null +++ b/studies/BraveLocalhostAccessPermissionStudy.json5 @@ -0,0 +1,32 @@ +[ + { + name: 'BraveLocalhostAccessPermissionStudy', + experiment: [ + { + name: 'Enabled', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'BraveLocalhostAccessPermission', + ], + }, + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + min_version: '115.1.55.5', + channel: [ + 'NIGHTLY', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + 'ANDROID', + ], + }, + }, +] diff --git a/studies/BraveP3AConstellationEnabled.json5 b/studies/BraveP3AConstellationEnabled.json5 new file mode 100644 index 00000000..d657749d --- /dev/null +++ b/studies/BraveP3AConstellationEnabled.json5 @@ -0,0 +1,33 @@ +[ + { + name: 'BraveP3AConstellationEnabled', + experiment: [ + { + name: 'Enabled', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'BraveP3AConstellation', + ], + }, + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + channel: [ + 'NIGHTLY', + 'BETA', + 'RELEASE', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + 'ANDROID', + ], + }, + }, +] diff --git a/studies/BraveP3AJSONOtherDeprecation.json5 b/studies/BraveP3AJSONOtherDeprecation.json5 new file mode 100644 index 00000000..37928e4e --- /dev/null +++ b/studies/BraveP3AJSONOtherDeprecation.json5 @@ -0,0 +1,32 @@ +[ + { + name: 'BraveP3AJSONOtherDeprecation', + experiment: [ + { + name: 'Enabled', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'BraveP3AOtherJSONDeprecation', + ], + }, + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + channel: [ + 'NIGHTLY', + 'BETA', + 'RELEASE', + ], + platform: [ + 'WINDOWS', + 'LINUX', + 'ANDROID', + ], + }, + }, +] diff --git a/studies/BraveP3ANebulaNightlyBeta.json5 b/studies/BraveP3ANebulaNightlyBeta.json5 new file mode 100644 index 00000000..519f989f --- /dev/null +++ b/studies/BraveP3ANebulaNightlyBeta.json5 @@ -0,0 +1,33 @@ +[ + { + name: 'BraveP3ANebulaNightlyBeta', + experiment: [ + { + name: 'Enabled', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'BraveP3ADifferentialSampling', + ], + }, + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + channel: [ + 'NIGHTLY', + 'BETA', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + 'ANDROID', + 'IOS', + ], + }, + }, +] diff --git a/studies/BraveP3ANebulaRelease.json5 b/studies/BraveP3ANebulaRelease.json5 new file mode 100644 index 00000000..1006d251 --- /dev/null +++ b/studies/BraveP3ANebulaRelease.json5 @@ -0,0 +1,32 @@ +[ + { + name: 'BraveP3ANebulaRelease', + experiment: [ + { + name: 'Enabled', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'BraveP3ADifferentialSampling', + ], + }, + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + channel: [ + 'RELEASE', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + 'ANDROID', + 'IOS', + ], + }, + }, +] diff --git a/studies/BraveP3ATypicalJSONDeprecationEnabled.json5 b/studies/BraveP3ATypicalJSONDeprecationEnabled.json5 new file mode 100644 index 00000000..97378561 --- /dev/null +++ b/studies/BraveP3ATypicalJSONDeprecationEnabled.json5 @@ -0,0 +1,33 @@ +[ + { + name: 'BraveP3ATypicalJSONDeprecationEnabled', + experiment: [ + { + name: 'Enabled', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'BraveP3ATypicalJSONDeprecation', + ], + }, + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + channel: [ + 'NIGHTLY', + 'BETA', + 'RELEASE', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + 'ANDROID', + ], + }, + }, +] diff --git a/studies/BraveRequestOTRTabRolloutStudy.json5 b/studies/BraveRequestOTRTabRolloutStudy.json5 new file mode 100644 index 00000000..9028d71e --- /dev/null +++ b/studies/BraveRequestOTRTabRolloutStudy.json5 @@ -0,0 +1,31 @@ +[ + { + name: 'BraveRequestOTRTabRolloutStudy', + experiment: [ + { + name: 'Enabled', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'BraveRequestOTRTab', + ], + }, + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + channel: [ + 'NIGHTLY', + 'BETA', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + ], + }, + }, +] diff --git a/studies/BraveRewardsAllowSelfCustodyProvidersStudy.json5 b/studies/BraveRewardsAllowSelfCustodyProvidersStudy.json5 new file mode 100644 index 00000000..a84f71c2 --- /dev/null +++ b/studies/BraveRewardsAllowSelfCustodyProvidersStudy.json5 @@ -0,0 +1,29 @@ +[ + { + name: 'BraveRewardsAllowSelfCustodyProvidersStudy', + experiment: [ + { + name: 'Enabled', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'BraveRewardsAllowSelfCustodyProviders', + ], + }, + }, + ], + filter: { + channel: [ + 'NIGHTLY', + 'BETA', + 'RELEASE', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + 'ANDROID', + ], + }, + }, +] diff --git a/studies/BraveRewardsWebUiPanelStudy.json5 b/studies/BraveRewardsWebUiPanelStudy.json5 new file mode 100644 index 00000000..2814a368 --- /dev/null +++ b/studies/BraveRewardsWebUiPanelStudy.json5 @@ -0,0 +1,33 @@ +[ + { + name: 'BraveRewardsWebUiPanelStudy', + experiment: [ + { + name: 'Enabled', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'BraveRewardsWebUIPanel', + ], + }, + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + min_version: '103.1.43.9', + channel: [ + 'NIGHTLY', + 'BETA', + 'RELEASE', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + ], + }, + }, +] diff --git a/studies/BraveRoundTimeStampsStudy.json5 b/studies/BraveRoundTimeStampsStudy.json5 new file mode 100644 index 00000000..a4d1682b --- /dev/null +++ b/studies/BraveRoundTimeStampsStudy.json5 @@ -0,0 +1,35 @@ +[ + { + name: 'BraveRoundTimeStampsStudy', + experiment: [ + { + name: 'Disabled', + probability_weight: 100, + feature_association: { + disable_feature: [ + 'BraveRoundTimeStamps', + ], + }, + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + min_version: '125.*', + max_version: '130.1.72.75', + channel: [ + 'NIGHTLY', + 'BETA', + 'RELEASE', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + 'ANDROID', + ], + }, + }, +] diff --git a/studies/BraveScreenFingerprintingBlockerStudy.json5 b/studies/BraveScreenFingerprintingBlockerStudy.json5 new file mode 100644 index 00000000..d18d8b22 --- /dev/null +++ b/studies/BraveScreenFingerprintingBlockerStudy.json5 @@ -0,0 +1,89 @@ +[ + { + name: 'BraveScreenFingerprintingBlockerStudy', + experiment: [ + { + name: 'Enabled', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'BraveBlockScreenFingerprinting', + ], + }, + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + min_version: '108.1.48.19', + channel: [ + 'NIGHTLY', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + ], + }, + }, + { + name: 'BraveScreenFingerprintingBlockerStudy', + experiment: [ + { + name: 'Enabled', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'BraveBlockScreenFingerprinting', + ], + }, + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + min_version: '111.1.50.93', + channel: [ + 'BETA', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + ], + }, + }, + { + name: 'BraveScreenFingerprintingBlockerStudy', + experiment: [ + { + name: 'Enabled', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'BraveBlockScreenFingerprinting', + ], + }, + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + min_version: '111.1.50.93', + channel: [ + 'RELEASE', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + ], + }, + }, +] diff --git a/studies/BraveSearchAdStudy.json5 b/studies/BraveSearchAdStudy.json5 new file mode 100644 index 00000000..9f73f9fa --- /dev/null +++ b/studies/BraveSearchAdStudy.json5 @@ -0,0 +1,67 @@ +[ + { + name: 'BraveSearchAdStudy', + experiment: [ + { + name: 'Enabled', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'ShouldLaunchBraveAdsAsInProcessService', + 'ShouldAlwaysRunBraveAdsService', + 'ShouldSupportSearchResultAds', + 'ShouldAlwaysTriggerBraveSearchResultAdEvents', + ], + }, + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + channel: [ + 'NIGHTLY', + 'BETA', + 'RELEASE', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + 'ANDROID', + ], + }, + }, + { + name: 'BraveSearchAdStudy', + experiment: [ + { + name: 'Enabled', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'ShouldAlwaysRunBraveAdsService', + 'ShouldSupportSearchResultAds', + 'ShouldAlwaysTriggerBraveSearchResultAdEvents', + ], + }, + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + min_version: '122.1.65.32', + channel: [ + 'NIGHTLY', + 'BETA', + 'RELEASE', + ], + platform: [ + 'IOS', + ], + }, + }, +] diff --git a/studies/BraveSearchPromotionBannerStudy.json5 b/studies/BraveSearchPromotionBannerStudy.json5 new file mode 100644 index 00000000..f122b702 --- /dev/null +++ b/studies/BraveSearchPromotionBannerStudy.json5 @@ -0,0 +1,77 @@ +[ + { + name: 'BraveSearchPromotionBannerStudy', + experiment: [ + { + name: 'banner_type_B', + probability_weight: 33, + feature_association: { + enable_feature: [ + 'BraveSearchOmniboxBanner', + ], + }, + param: [ + { + name: 'banner_type', + value: 'type_B', + }, + ], + }, + { + name: 'banner_type_C', + probability_weight: 33, + feature_association: { + enable_feature: [ + 'BraveSearchOmniboxBanner', + ], + }, + param: [ + { + name: 'banner_type', + value: 'type_C', + }, + ], + }, + { + name: 'banner_type_D', + probability_weight: 34, + feature_association: { + enable_feature: [ + 'BraveSearchOmniboxBanner', + ], + }, + param: [ + { + name: 'banner_type', + value: 'type_D', + }, + ], + }, + ], + filter: { + min_version: '117.1.60.41', + channel: [ + 'BETA', + 'NIGHTLY', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + ], + country: [ + 'CA', + 'DE', + 'FR', + 'GB', + 'US', + 'AT', + 'ES', + 'MX', + 'BR', + 'AR', + 'IN', + ], + }, + }, +] diff --git a/studies/BraveSearchPromotionBannerStudyOnStable.json5 b/studies/BraveSearchPromotionBannerStudyOnStable.json5 new file mode 100644 index 00000000..eb2e15c2 --- /dev/null +++ b/studies/BraveSearchPromotionBannerStudyOnStable.json5 @@ -0,0 +1,79 @@ +[ + { + name: 'BraveSearchPromotionBannerStudyOnStable', + experiment: [ + { + name: 'banner_type_B', + probability_weight: 2, + feature_association: { + enable_feature: [ + 'BraveSearchOmniboxBanner', + ], + }, + param: [ + { + name: 'banner_type', + value: 'type_B', + }, + ], + }, + { + name: 'banner_type_C', + probability_weight: 2, + feature_association: { + enable_feature: [ + 'BraveSearchOmniboxBanner', + ], + }, + param: [ + { + name: 'banner_type', + value: 'type_C', + }, + ], + }, + { + name: 'banner_type_D', + probability_weight: 2, + feature_association: { + enable_feature: [ + 'BraveSearchOmniboxBanner', + ], + }, + param: [ + { + name: 'banner_type', + value: 'type_D', + }, + ], + }, + { + name: 'Default', + probability_weight: 94, + }, + ], + filter: { + min_version: '117.1.60.41', + channel: [ + 'RELEASE', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + ], + country: [ + 'CA', + 'DE', + 'FR', + 'GB', + 'AT', + 'ES', + 'MX', + 'BR', + 'AR', + 'IN', + ], + }, + }, +] diff --git a/studies/BraveTranslateStudy.json5 b/studies/BraveTranslateStudy.json5 new file mode 100644 index 00000000..2a5b6838 --- /dev/null +++ b/studies/BraveTranslateStudy.json5 @@ -0,0 +1,36 @@ +[ + { + name: 'BraveTranslateStudy', + experiment: [ + { + name: 'Enabled', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'UseBraveTranslateGo', + 'Translate', + ], + }, + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + min_version: '104.1.43.54', + max_version: '106.1.45.44', + channel: [ + 'NIGHTLY', + 'BETA', + 'RELEASE', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + 'ANDROID', + ], + }, + }, +] diff --git a/studies/BraveWalletAnkrBalancesEnabled.json5 b/studies/BraveWalletAnkrBalancesEnabled.json5 new file mode 100644 index 00000000..da670a65 --- /dev/null +++ b/studies/BraveWalletAnkrBalancesEnabled.json5 @@ -0,0 +1,33 @@ +[ + { + name: 'BraveWalletAnkrBalancesEnabled', + experiment: [ + { + name: 'Enabled', + probability_weight: 0, + feature_association: { + enable_feature: [ + 'BraveWalletAnkrBalances', + ], + }, + }, + { + name: 'Default', + probability_weight: 100, + }, + ], + filter: { + min_version: '120.*', + channel: [ + 'NIGHTLY', + 'BETA', + 'RELEASE', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + ], + }, + }, +] diff --git a/studies/BraveWebViewRoundedCornersStudy.json5 b/studies/BraveWebViewRoundedCornersStudy.json5 new file mode 100644 index 00000000..240ca6c3 --- /dev/null +++ b/studies/BraveWebViewRoundedCornersStudy.json5 @@ -0,0 +1,27 @@ +[ + { + name: 'BraveWebViewRoundedCornersStudy', + experiment: [ + { + name: 'Enabled', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'brave-web-view-rounded-corners', + ], + }, + }, + ], + filter: { + channel: [ + 'NIGHTLY', + 'BETA', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + ], + }, + }, +] diff --git a/studies/BraveWebcompatExceptionsServiceReleaseStudy.json5 b/studies/BraveWebcompatExceptionsServiceReleaseStudy.json5 new file mode 100644 index 00000000..cf41a243 --- /dev/null +++ b/studies/BraveWebcompatExceptionsServiceReleaseStudy.json5 @@ -0,0 +1,32 @@ +[ + { + name: 'BraveWebcompatExceptionsServiceReleaseStudy', + experiment: [ + { + name: 'Enabled', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'BraveWebcompatExceptionsService', + ], + }, + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + min_version: '128.1.69.150', + channel: [ + 'RELEASE', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + 'ANDROID', + ], + }, + }, +] diff --git a/studies/BraveWebcompatExceptionsServiceStudy.json5 b/studies/BraveWebcompatExceptionsServiceStudy.json5 new file mode 100644 index 00000000..0b3fd820 --- /dev/null +++ b/studies/BraveWebcompatExceptionsServiceStudy.json5 @@ -0,0 +1,33 @@ +[ + { + name: 'BraveWebcompatExceptionsServiceStudy', + experiment: [ + { + name: 'Enabled', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'BraveWebcompatExceptionsService', + ], + }, + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + min_version: '128.1.70.66', + channel: [ + 'NIGHTLY', + 'BETA', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + 'ANDROID', + ], + }, + }, +] diff --git a/studies/CanvasKillSwitches.json5 b/studies/CanvasKillSwitches.json5 new file mode 100644 index 00000000..2ff68695 --- /dev/null +++ b/studies/CanvasKillSwitches.json5 @@ -0,0 +1,31 @@ +[ + { + name: 'CanvasKillSwitches', + experiment: [ + { + name: 'Disabled_EmergencyKillSwitch', + probability_weight: 100, + feature_association: { + disable_feature: [ + 'Canvas2DHibernation', + 'EvictionUnlocksResources', + ], + }, + }, + ], + filter: { + max_version: '125.*', + channel: [ + 'NIGHTLY', + 'BETA', + 'RELEASE', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + 'ANDROID', + ], + }, + }, +] diff --git a/studies/ClampPlatformVersionClientHint.json5 b/studies/ClampPlatformVersionClientHint.json5 new file mode 100644 index 00000000..76783d22 --- /dev/null +++ b/studies/ClampPlatformVersionClientHint.json5 @@ -0,0 +1,30 @@ +[ + { + name: 'ClampPlatformVersionClientHint', + experiment: [ + { + name: 'Disabled', + probability_weight: 100, + feature_association: { + disable_feature: [ + 'ClampPlatformVersionClientHint', + ], + }, + }, + ], + filter: { + min_version: '114.1.52.78', + channel: [ + 'RELEASE', + 'BETA', + 'NIGHTLY', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + 'ANDROID', + ], + }, + }, +] diff --git a/studies/CloseWatcher.json5 b/studies/CloseWatcher.json5 new file mode 100644 index 00000000..e2ad2112 --- /dev/null +++ b/studies/CloseWatcher.json5 @@ -0,0 +1,31 @@ +[ + { + name: 'CloseWatcher', + experiment: [ + { + name: 'Disabled_EmergencyKillSwitch', + probability_weight: 100, + feature_association: { + disable_feature: [ + 'CloseWatcher', + ], + }, + }, + ], + filter: { + min_version: '120.*', + max_version: '122.*', + channel: [ + 'NIGHTLY', + 'BETA', + 'RELEASE', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + 'ANDROID', + ], + }, + }, +] diff --git a/studies/CollectWebGPUSupportMetricsKillSwitch.json5 b/studies/CollectWebGPUSupportMetricsKillSwitch.json5 new file mode 100644 index 00000000..c2c7d35f --- /dev/null +++ b/studies/CollectWebGPUSupportMetricsKillSwitch.json5 @@ -0,0 +1,28 @@ +[ + { + name: 'CollectWebGPUSupportMetricsKillSwitch', + experiment: [ + { + name: 'Disabled_CollectWebGPUSupportMetrics', + probability_weight: 100, + feature_association: { + disable_feature: [ + 'CollectWebGPUSupportMetrics', + ], + }, + }, + ], + filter: { + min_version: '119.*', + max_version: '119.*', + channel: [ + 'NIGHTLY', + 'BETA', + 'RELEASE', + ], + platform: [ + 'LINUX', + ], + }, + }, +] diff --git a/studies/CookieListDefaultStudy.json5 b/studies/CookieListDefaultStudy.json5 new file mode 100644 index 00000000..ebf0acaf --- /dev/null +++ b/studies/CookieListDefaultStudy.json5 @@ -0,0 +1,33 @@ +[ + { + name: 'CookieListDefaultStudy', + experiment: [ + { + name: 'Enabled', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'BraveAdblockCookieListDefault', + ], + }, + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + channel: [ + 'RELEASE', + 'BETA', + 'NIGHTLY', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + 'ANDROID', + ], + }, + }, +] diff --git a/studies/CosmeticFilteringChildFramesStudy.json5 b/studies/CosmeticFilteringChildFramesStudy.json5 new file mode 100644 index 00000000..5c36a183 --- /dev/null +++ b/studies/CosmeticFilteringChildFramesStudy.json5 @@ -0,0 +1,33 @@ +[ + { + name: 'CosmeticFilteringChildFramesStudy', + experiment: [ + { + name: 'Enabled', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'BraveAdblockCosmeticFilteringChildFrames', + ], + }, + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + min_version: '106.1.46.14', + channel: [ + 'BETA', + 'NIGHTLY', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + 'ANDROID', + ], + }, + }, +] diff --git a/studies/CrossPlatformVPNStudy.json5 b/studies/CrossPlatformVPNStudy.json5 new file mode 100644 index 00000000..789665c8 --- /dev/null +++ b/studies/CrossPlatformVPNStudy.json5 @@ -0,0 +1,34 @@ +[ + { + name: 'CrossPlatformVPNStudy', + experiment: [ + { + name: 'Enabled', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'BraveVPN', + 'BraveVPNLinkSubscriptionAndroidUI', + ], + }, + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + min_version: '110.1.49.120', + channel: [ + 'NIGHTLY', + 'BETA', + 'RELEASE', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'ANDROID', + ], + }, + }, +] diff --git a/studies/Default1pBlockingStudy.json5 b/studies/Default1pBlockingStudy.json5 new file mode 100644 index 00000000..e7523d27 --- /dev/null +++ b/studies/Default1pBlockingStudy.json5 @@ -0,0 +1,81 @@ +[ + { + name: 'Default1pBlockingStudy', + experiment: [ + { + name: 'Enabled', + probability_weight: 0, + feature_association: { + enable_feature: [ + 'BraveAdblockDefault1pBlocking', + ], + }, + }, + { + name: 'Disabled', + probability_weight: 100, + feature_association: { + disable_feature: [ + 'BraveAdblockDefault1pBlocking', + ], + }, + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + min_version: '92.1.30.57', + channel: [ + 'NIGHTLY', + 'BETA', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + 'ANDROID', + ], + }, + }, + { + name: 'Default1pBlockingStudy', + experiment: [ + { + name: 'Enabled', + probability_weight: 0, + feature_association: { + enable_feature: [ + 'BraveAdblockDefault1pBlocking', + ], + }, + }, + { + name: 'Disabled', + probability_weight: 100, + feature_association: { + disable_feature: [ + 'BraveAdblockDefault1pBlocking', + ], + }, + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + min_version: '92.1.30.57', + channel: [ + 'RELEASE', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + 'ANDROID', + ], + }, + }, +] diff --git a/studies/DefaultBraveCommandsStudy.json5 b/studies/DefaultBraveCommandsStudy.json5 new file mode 100644 index 00000000..627d0b2e --- /dev/null +++ b/studies/DefaultBraveCommandsStudy.json5 @@ -0,0 +1,31 @@ +[ + { + name: 'DefaultBraveCommandsStudy', + experiment: [ + { + name: 'Enabled', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'BraveCommands', + ], + }, + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + channel: [ + 'NIGHTLY', + 'BETA', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + ], + }, + }, +] diff --git a/studies/DefaultBraveOmniboxMoreHistoryStudy.json5 b/studies/DefaultBraveOmniboxMoreHistoryStudy.json5 new file mode 100644 index 00000000..763172d2 --- /dev/null +++ b/studies/DefaultBraveOmniboxMoreHistoryStudy.json5 @@ -0,0 +1,30 @@ +[ + { + name: 'DefaultBraveOmniboxMoreHistoryStudy', + experiment: [ + { + name: 'Enabled', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'HistoryMoreSearchResults', + ], + }, + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + channel: [ + 'NIGHTLY', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + ], + }, + }, +] diff --git a/studies/DefaultPassthroughCommandDecoderStudy.json5 b/studies/DefaultPassthroughCommandDecoderStudy.json5 new file mode 100644 index 00000000..9eae9995 --- /dev/null +++ b/studies/DefaultPassthroughCommandDecoderStudy.json5 @@ -0,0 +1,31 @@ +[ + { + name: 'DefaultPassthroughCommandDecoderStudy', + experiment: [ + { + name: 'Disabled', + probability_weight: 100, + feature_association: { + disable_feature: [ + 'DefaultPassthroughCommandDecoder', + ], + }, + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + min_version: '125.*', + channel: [ + 'NIGHTLY', + 'BETA', + 'RELEASE', + ], + platform: [ + 'ANDROID', + ], + }, + }, +] diff --git a/studies/DefaultPlaylistStudy.json5 b/studies/DefaultPlaylistStudy.json5 new file mode 100644 index 00000000..8ec1071f --- /dev/null +++ b/studies/DefaultPlaylistStudy.json5 @@ -0,0 +1,30 @@ +[ + { + name: 'DefaultPlaylistStudy', + experiment: [ + { + name: 'Enabled', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'Playlist', + ], + }, + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + channel: [ + 'NIGHTLY', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + ], + }, + }, +] diff --git a/studies/DisableCnameUncloakingForAndroid.json5 b/studies/DisableCnameUncloakingForAndroid.json5 new file mode 100644 index 00000000..14cef9e0 --- /dev/null +++ b/studies/DisableCnameUncloakingForAndroid.json5 @@ -0,0 +1,30 @@ +[ + { + name: 'DisableCnameUncloakingForAndroid', + experiment: [ + { + name: 'Disabled', + probability_weight: 100, + feature_association: { + disable_feature: [ + 'BraveAdblockCnameUncloaking', + ], + }, + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + channel: [ + 'NIGHTLY', + 'BETA', + 'RELEASE', + ], + platform: [ + 'ANDROID', + ], + }, + }, +] diff --git a/studies/DisableReduceLanguage.json5 b/studies/DisableReduceLanguage.json5 new file mode 100644 index 00000000..1189650b --- /dev/null +++ b/studies/DisableReduceLanguage.json5 @@ -0,0 +1,38 @@ +[ + { + name: 'DisableReduceLanguage', + experiment: [ + { + name: 'Default', + probability_weight: 0, + feature_association: { + disable_feature: [ + 'BraveReduceLanguage', + ], + }, + }, + { + name: 'Enabled', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'BraveReduceLanguage', + ], + }, + }, + ], + filter: { + channel: [ + 'NIGHTLY', + 'BETA', + 'RELEASE', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + 'ANDROID', + ], + }, + }, +] diff --git a/studies/EphemeralStorageStudy.json5 b/studies/EphemeralStorageStudy.json5 new file mode 100644 index 00000000..2b1e6650 --- /dev/null +++ b/studies/EphemeralStorageStudy.json5 @@ -0,0 +1,81 @@ +[ + { + name: 'EphemeralStorageStudy', + experiment: [ + { + name: 'Enabled', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'EphemeralStorage', + ], + }, + }, + { + name: 'Disabled', + probability_weight: 0, + feature_association: { + disable_feature: [ + 'EphemeralStorage', + ], + }, + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + min_version: '89.1.21.73', + channel: [ + 'RELEASE', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + 'ANDROID', + ], + }, + }, + { + name: 'EphemeralStorageStudy', + experiment: [ + { + name: 'Enabled', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'EphemeralStorage', + ], + }, + }, + { + name: 'Disabled', + probability_weight: 0, + feature_association: { + disable_feature: [ + 'EphemeralStorage', + ], + }, + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + min_version: '89.1.21.73', + channel: [ + 'NIGHTLY', + 'BETA', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + 'ANDROID', + ], + }, + }, +] diff --git a/studies/ExtensionsManifestV2Study.json5 b/studies/ExtensionsManifestV2Study.json5 new file mode 100644 index 00000000..4ca4b5be --- /dev/null +++ b/studies/ExtensionsManifestV2Study.json5 @@ -0,0 +1,32 @@ +[ + { + name: 'ExtensionsManifestV2Study', + experiment: [ + { + name: 'Enabled', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'ExtensionsManifestV2', + ], + }, + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + min_version: '125.1.68.25', + channel: [ + 'NIGHTLY', + 'BETA', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + ], + }, + }, +] diff --git a/studies/ExtensionsManifestV2StudyRelease.json5 b/studies/ExtensionsManifestV2StudyRelease.json5 new file mode 100644 index 00000000..0dc3738b --- /dev/null +++ b/studies/ExtensionsManifestV2StudyRelease.json5 @@ -0,0 +1,31 @@ +[ + { + name: 'ExtensionsManifestV2StudyRelease', + experiment: [ + { + name: 'Enabled', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'ExtensionsManifestV2', + ], + }, + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + min_version: '125.1.68.25', + channel: [ + 'RELEASE', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + ], + }, + }, +] diff --git a/studies/HangWatcher.json5 b/studies/HangWatcher.json5 new file mode 100644 index 00000000..cf8d018e --- /dev/null +++ b/studies/HangWatcher.json5 @@ -0,0 +1,57 @@ +[ + { + name: 'HangWatcher', + experiment: [ + { + name: 'HangWatcherEnableDumps', + probability_weight: 50, + feature_association: { + enable_feature: [ + 'EnableHangWatcher', + ], + }, + param: [ + { + name: 'ui_thread_log_level', + value: '2', + }, + { + name: 'io_thread_log_level', + value: '2', + }, + { + name: 'renderer_process_main_thread_log_level', + value: '2', + }, + { + name: 'renderer_process_io_thread_log_level', + value: '2', + }, + { + name: 'utility_process_main_thread_log_level', + value: '2', + }, + { + name: 'utility_process_io_thread_log_level', + value: '2', + }, + ], + }, + { + name: 'Default', + probability_weight: 50, + }, + ], + filter: { + min_version: '97.1.36.14', + channel: [ + 'NIGHTLY', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + ], + }, + }, +] diff --git a/studies/HeapProfilingMacKillSwitch.json5 b/studies/HeapProfilingMacKillSwitch.json5 new file mode 100644 index 00000000..a9754972 --- /dev/null +++ b/studies/HeapProfilingMacKillSwitch.json5 @@ -0,0 +1,28 @@ +[ + { + name: 'HeapProfilingMacKillSwitch', + experiment: [ + { + name: 'Disabled_EmergencyKillSwitch', + probability_weight: 100, + feature_association: { + disable_feature: [ + 'HeapProfilerReporting', + ], + }, + }, + ], + filter: { + min_version: '122.*', + max_version: '125.*', + channel: [ + 'NIGHTLY', + 'BETA', + 'RELEASE', + ], + platform: [ + 'MAC', + ], + }, + }, +] diff --git a/studies/InnerHTMLParserFastpathStudy.json5 b/studies/InnerHTMLParserFastpathStudy.json5 new file mode 100644 index 00000000..6ee1a353 --- /dev/null +++ b/studies/InnerHTMLParserFastpathStudy.json5 @@ -0,0 +1,34 @@ +[ + { + name: 'InnerHTMLParserFastpathStudy', + experiment: [ + { + name: 'Enabled', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'InnerHTMLParserFastpath', + ], + }, + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + max_version: '114.1.52.999', + channel: [ + 'NIGHTLY', + 'BETA', + 'RELEASE', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + 'ANDROID', + ], + }, + }, +] diff --git a/studies/MacCoreLocationBackendStudy.json5 b/studies/MacCoreLocationBackendStudy.json5 new file mode 100644 index 00000000..f2f18edc --- /dev/null +++ b/studies/MacCoreLocationBackendStudy.json5 @@ -0,0 +1,40 @@ +[ + { + name: 'MacCoreLocationBackendStudy', + experiment: [ + { + name: 'Enabled', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'MacCoreLocationBackend', + ], + }, + }, + { + name: 'Disabled', + probability_weight: 0, + feature_association: { + disable_feature: [ + 'MacCoreLocationBackend', + ], + }, + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + min_version: '91.1.26.74', + channel: [ + 'RELEASE', + 'BETA', + 'NIGHTLY', + ], + platform: [ + 'MAC', + ], + }, + }, +] diff --git a/studies/MetricsAndCrashSampling.json5 b/studies/MetricsAndCrashSampling.json5 new file mode 100644 index 00000000..69284658 --- /dev/null +++ b/studies/MetricsAndCrashSampling.json5 @@ -0,0 +1,30 @@ +[ + { + name: 'MetricsAndCrashSampling', + experiment: [ + { + name: 'Enabled', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'MetricsReporting', + ], + }, + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + channel: [ + 'NIGHTLY', + 'BETA', + 'RELEASE', + ], + platform: [ + 'ANDROID', + ], + }, + }, +] diff --git a/studies/ModuleFileNamePatchStudy.json5 b/studies/ModuleFileNamePatchStudy.json5 new file mode 100644 index 00000000..24b1bed8 --- /dev/null +++ b/studies/ModuleFileNamePatchStudy.json5 @@ -0,0 +1,30 @@ +[ + { + name: 'ModuleFileNamePatchStudy', + experiment: [ + { + name: 'Enabled', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'ModuleFileNamePatch', + ], + }, + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + min_version: '112.1.51.89', + channel: [ + 'NIGHTLY', + 'BETA', + ], + platform: [ + 'WINDOWS', + ], + }, + }, +] diff --git a/studies/ModuleFileNamePatchStudyRelease.json5 b/studies/ModuleFileNamePatchStudyRelease.json5 new file mode 100644 index 00000000..941e0240 --- /dev/null +++ b/studies/ModuleFileNamePatchStudyRelease.json5 @@ -0,0 +1,29 @@ +[ + { + name: 'ModuleFileNamePatchStudyRelease', + experiment: [ + { + name: 'Enabled', + probability_weight: 15, + feature_association: { + enable_feature: [ + 'ModuleFileNamePatch', + ], + }, + }, + { + name: 'Default', + probability_weight: 85, + }, + ], + filter: { + min_version: '112.1.51.89', + channel: [ + 'RELEASE', + ], + platform: [ + 'WINDOWS', + ], + }, + }, +] diff --git a/studies/NavigationThreadingOptimizationsCompatOldVersions.json5 b/studies/NavigationThreadingOptimizationsCompatOldVersions.json5 new file mode 100644 index 00000000..fed3af11 --- /dev/null +++ b/studies/NavigationThreadingOptimizationsCompatOldVersions.json5 @@ -0,0 +1,31 @@ +[ + { + name: 'NavigationThreadingOptimizationsCompatOldVersions', + experiment: [ + { + name: 'Disabled', + probability_weight: 100, + feature_association: { + disable_feature: [ + 'NavigationThreadingOptimizations', + ], + }, + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + max_version: '102.1.39.0', + channel: [ + 'RELEASE', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + ], + }, + }, +] diff --git a/studies/NewiOSPlaylistUIStudy.json5 b/studies/NewiOSPlaylistUIStudy.json5 new file mode 100644 index 00000000..82d27114 --- /dev/null +++ b/studies/NewiOSPlaylistUIStudy.json5 @@ -0,0 +1,29 @@ +[ + { + name: 'NewiOSPlaylistUIStudy', + experiment: [ + { + name: 'Enabled', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'NewPlaylistUI', + ], + }, + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + channel: [ + 'NIGHTLY', + 'BETA', + ], + platform: [ + 'IOS', + ], + }, + }, +] diff --git a/studies/PartitionedCookies.json5 b/studies/PartitionedCookies.json5 new file mode 100644 index 00000000..3ef1b5a8 --- /dev/null +++ b/studies/PartitionedCookies.json5 @@ -0,0 +1,34 @@ +[ + { + name: 'PartitionedCookies', + experiment: [ + { + name: 'Enabled', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'PartitionedCookies', + ], + }, + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + min_version: '122.1.63.0', + channel: [ + 'NIGHTLY', + 'BETA', + 'RELEASE', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + 'ANDROID', + ], + }, + }, +] diff --git a/studies/PostFREFixMetricsAndCrashSampling.json5 b/studies/PostFREFixMetricsAndCrashSampling.json5 new file mode 100644 index 00000000..df97f75e --- /dev/null +++ b/studies/PostFREFixMetricsAndCrashSampling.json5 @@ -0,0 +1,30 @@ +[ + { + name: 'PostFREFixMetricsAndCrashSampling', + experiment: [ + { + name: 'Enabled', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'PostFREFixMetricsReporting', + ], + }, + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + channel: [ + 'NIGHTLY', + 'BETA', + 'RELEASE', + ], + platform: [ + 'ANDROID', + ], + }, + }, +] diff --git a/studies/PrettyPrintJSONDocument.json5 b/studies/PrettyPrintJSONDocument.json5 new file mode 100644 index 00000000..8405a13c --- /dev/null +++ b/studies/PrettyPrintJSONDocument.json5 @@ -0,0 +1,31 @@ +[ + { + name: 'PrettyPrintJSONDocument', + experiment: [ + { + name: 'Disabled_EmergencyKillSwitch', + probability_weight: 100, + feature_association: { + disable_feature: [ + 'PrettyPrintJSONDocument', + ], + }, + }, + ], + filter: { + min_version: '117.0.0.0', + max_version: '119.1.61.0', + channel: [ + 'NIGHTLY', + 'BETA', + 'RELEASE', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + 'ANDROID', + ], + }, + }, +] diff --git a/studies/PrivateNetworkAccessKillswitch.json5 b/studies/PrivateNetworkAccessKillswitch.json5 new file mode 100644 index 00000000..1f539d11 --- /dev/null +++ b/studies/PrivateNetworkAccessKillswitch.json5 @@ -0,0 +1,32 @@ +[ + { + name: 'PrivateNetworkAccessKillswitch', + experiment: [ + { + name: 'Disabled_PrivateNetworkAccessKillSwitch', + probability_weight: 100, + feature_association: { + disable_feature: [ + 'PrivateNetworkAccessForNavigations', + 'PrivateNetworkAccessForNavigationsWarningOnly', + ], + }, + }, + ], + filter: { + min_version: '123.*', + max_version: '125.*', + channel: [ + 'NIGHTLY', + 'BETA', + 'RELEASE', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + 'ANDROID', + ], + }, + }, +] diff --git a/studies/RendererAllocatesImagesKillSwitch.json5 b/studies/RendererAllocatesImagesKillSwitch.json5 new file mode 100644 index 00000000..8b514ed8 --- /dev/null +++ b/studies/RendererAllocatesImagesKillSwitch.json5 @@ -0,0 +1,28 @@ +[ + { + name: 'RendererAllocatesImagesKillSwitch', + experiment: [ + { + name: 'Disabled_RendererAllocatesImages', + probability_weight: 100, + feature_association: { + disable_feature: [ + 'RendererAllocatesImages', + ], + }, + }, + ], + filter: { + min_version: '122.*', + max_version: '124.*', + channel: [ + 'NIGHTLY', + 'BETA', + 'RELEASE', + ], + platform: [ + 'MAC', + ], + }, + }, +] diff --git a/studies/SidebarEnabledStudy.json5 b/studies/SidebarEnabledStudy.json5 new file mode 100644 index 00000000..9be18c92 --- /dev/null +++ b/studies/SidebarEnabledStudy.json5 @@ -0,0 +1,43 @@ +[ + { + name: 'SidebarEnabledStudy', + experiment: [ + { + name: 'group_A', + probability_weight: 2, + feature_association: { + enable_feature: [ + 'SidebarShowAlwaysOnStable', + ], + }, + }, + { + name: 'group_B', + probability_weight: 2, + feature_association: { + enable_feature: [ + 'SidebarShowAlwaysOnStable', + ], + }, + param: [ + { + name: 'open_one_shot_leo_panel', + value: 'true', + }, + ], + }, + { + name: 'Default', + probability_weight: 96, + }, + ], + filter: { + channel: [ + 'RELEASE', + ], + platform: [ + 'WINDOWS', + ], + }, + }, +] diff --git a/studies/SmilAutoSuspendOnLagKillSwitch.json5 b/studies/SmilAutoSuspendOnLagKillSwitch.json5 new file mode 100644 index 00000000..5a2d7de1 --- /dev/null +++ b/studies/SmilAutoSuspendOnLagKillSwitch.json5 @@ -0,0 +1,31 @@ +[ + { + name: 'SmilAutoSuspendOnLagKillSwitch', + experiment: [ + { + name: 'Disabled_EmergencyKillSwitch', + probability_weight: 100, + feature_association: { + disable_feature: [ + 'SmilAutoSuspendOnLag', + ], + }, + }, + ], + filter: { + min_version: '118.*', + max_version: '120.*', + channel: [ + 'NIGHTLY', + 'BETA', + 'RELEASE', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + 'ANDROID', + ], + }, + }, +] diff --git a/studies/Speedreader TTS.json5 b/studies/Speedreader TTS.json5 new file mode 100644 index 00000000..7bb072ea --- /dev/null +++ b/studies/Speedreader TTS.json5 @@ -0,0 +1,37 @@ +[ + { + name: 'Speedreader TTS', + experiment: [ + { + name: 'Enabled', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'Speedreader', + ], + }, + param: [ + { + name: 'tts', + value: 'true', + }, + ], + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + channel: [ + 'NIGHTLY', + 'BETA', + 'RELEASE', + ], + platform: [ + 'WINDOWS', + 'MAC', + ], + }, + }, +] diff --git a/studies/UndecryptablePasswords.json5 b/studies/UndecryptablePasswords.json5 new file mode 100644 index 00000000..24267b24 --- /dev/null +++ b/studies/UndecryptablePasswords.json5 @@ -0,0 +1,33 @@ +[ + { + name: 'UndecryptablePasswords', + experiment: [ + { + name: 'Enabled', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'SkipUndecryptablePasswords', + ], + }, + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + min_version: '127.1.68.107', + channel: [ + 'NIGHTLY', + 'BETA', + 'RELEASE', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + ], + }, + }, +] diff --git a/studies/UseWritePixelsYUV.json5 b/studies/UseWritePixelsYUV.json5 new file mode 100644 index 00000000..6bb457ec --- /dev/null +++ b/studies/UseWritePixelsYUV.json5 @@ -0,0 +1,31 @@ +[ + { + name: 'UseWritePixelsYUV', + experiment: [ + { + name: 'Disabled_UseWritePixelsYUV', + probability_weight: 100, + feature_association: { + disable_feature: [ + 'UseWritePixelsYUV', + ], + }, + }, + ], + filter: { + min_version: '123.*', + max_version: '125.*', + channel: [ + 'NIGHTLY', + 'BETA', + 'RELEASE', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + 'ANDROID', + ], + }, + }, +] diff --git a/studies/UserActivityStudy.json5 b/studies/UserActivityStudy.json5 new file mode 100644 index 00000000..61948c38 --- /dev/null +++ b/studies/UserActivityStudy.json5 @@ -0,0 +1,51 @@ +[ + { + name: 'UserActivityStudy', + experiment: [ + { + name: 'Triggers', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'UserActivity', + ], + }, + param: [ + { + name: 'triggers', + value: '0D0B14110D0B14110D0B14110D0B1411=-1.0;0D0B1411070707=-1.0;07070707=-1.0;0B1512=0.5;0B1513=0.5;0B1514=0.5;06=1.0;04=0.5', + }, + { + name: 'time_window', + value: '1h', + }, + { + name: 'threshold', + value: '0.5', + }, + { + name: 'idle_time_threshold', + value: '5s', + }, + ], + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + min_version: '108.1.47.73', + channel: [ + 'NIGHTLY', + 'BETA', + 'RELEASE', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + ], + }, + }, +] diff --git a/studies/WhatsNewStudy.json5 b/studies/WhatsNewStudy.json5 new file mode 100644 index 00000000..72b20d93 --- /dev/null +++ b/studies/WhatsNewStudy.json5 @@ -0,0 +1,32 @@ +[ + { + name: 'WhatsNewStudy', + experiment: [ + { + name: 'Enabled', + probability_weight: 100, + param: [ + { + name: 'target_major_version_stable', + value: '1.65', + }, + ], + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + min_version: '119.1.60.114', + channel: [ + 'RELEASE', + ], + platform: [ + 'WINDOWS', + 'MAC', + 'LINUX', + ], + }, + }, +] diff --git a/studies/WorkaroundNewWindowFlash.json5 b/studies/WorkaroundNewWindowFlash.json5 new file mode 100644 index 00000000..7d47f250 --- /dev/null +++ b/studies/WorkaroundNewWindowFlash.json5 @@ -0,0 +1,75 @@ +[ + { + name: 'WorkaroundNewWindowFlash', + experiment: [ + { + name: 'Enabled', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'BraveWorkaroundNewWindowFlash', + ], + }, + }, + { + name: 'Disabled', + probability_weight: 0, + feature_association: { + disable_feature: [ + 'BraveWorkaroundNewWindowFlash', + ], + }, + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + min_version: '127.1.70.49', + channel: [ + 'NIGHTLY', + 'BETA', + ], + platform: [ + 'WINDOWS', + ], + }, + }, + { + name: 'WorkaroundNewWindowFlash', + experiment: [ + { + name: 'Enabled', + probability_weight: 100, + feature_association: { + enable_feature: [ + 'BraveWorkaroundNewWindowFlash', + ], + }, + }, + { + name: 'Disabled', + probability_weight: 0, + feature_association: { + disable_feature: [ + 'BraveWorkaroundNewWindowFlash', + ], + }, + }, + { + name: 'Default', + probability_weight: 0, + }, + ], + filter: { + min_version: '127.1.70.49', + channel: [ + 'RELEASE', + ], + platform: [ + 'WINDOWS', + ], + }, + }, +]