diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-11-18 16:35:47 +0100 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-11-18 15:45:54 +0000 |
commit | 32f5a1c56531e4210bc4cf8d8c7825d66e081888 (patch) | |
tree | eeeec6822f4d738d8454525233fd0e2e3a659e6d /chromium/testing | |
parent | 99677208ff3b216fdfec551fbe548da5520cd6fb (diff) | |
download | qtwebengine-chromium-32f5a1c56531e4210bc4cf8d8c7825d66e081888.tar.gz |
BASELINE: Update Chromium to 87.0.4280.67
Change-Id: Ib157360be8c2ffb2c73125751a89f60e049c1d54
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/testing')
24 files changed, 1873 insertions, 1365 deletions
diff --git a/chromium/testing/PRESUBMIT.py b/chromium/testing/PRESUBMIT.py index 8a8f0d77f91..bce5429b9dd 100644 --- a/chromium/testing/PRESUBMIT.py +++ b/chromium/testing/PRESUBMIT.py @@ -11,11 +11,10 @@ for more details on the presubmit API built into depot_tools. def CommonChecks(input_api, output_api): output = [] - blacklist = [r'gmock.*', r'gtest.*'] output.extend(input_api.canned_checks.RunUnitTestsInDirectory( input_api, output_api, '.', [r'^.+_unittest\.py$'])) output.extend(input_api.canned_checks.RunPylint( - input_api, output_api, black_list=blacklist)) + input_api, output_api, files_to_skip=[r'gmock.*', r'gtest.*'])) return output diff --git a/chromium/testing/buildbot/filters/BUILD.gn b/chromium/testing/buildbot/filters/BUILD.gn index 578f0fca8e8..11a9329f6be 100644 --- a/chromium/testing/buildbot/filters/BUILD.gn +++ b/chromium/testing/buildbot/filters/BUILD.gn @@ -89,6 +89,7 @@ source_set("content_browsertests_filters") { "//testing/buildbot/filters/android.emulator_p.content_browsertests.filter", "//testing/buildbot/filters/cast-linux.content_browsertests.filter", "//testing/buildbot/filters/gpu.skiarenderer_vulkan_content_browsertests.filter", + "//testing/buildbot/filters/lacros.content_browsertests.filter", "//testing/buildbot/filters/site_isolation_android.content_browsertests.filter", "//testing/buildbot/filters/skia_renderer.content_browsertests.filter", "//testing/buildbot/filters/vulkan.content_browsertests.filter", @@ -128,7 +129,6 @@ source_set("fuchsia_filters") { "//testing/buildbot/filters/fuchsia.components_unittests.filter", "//testing/buildbot/filters/fuchsia.content_unittests.filter", "//testing/buildbot/filters/fuchsia.headless_browsertests.filter", - "//testing/buildbot/filters/fuchsia.mojo_unittests.filter", "//testing/buildbot/filters/fuchsia.net_perftests.filter", "//testing/buildbot/filters/fuchsia.net_unittests.filter", "//testing/buildbot/filters/fuchsia.services_unittests.filter", @@ -205,12 +205,6 @@ source_set("viz_unittests_filters") { ] } -source_set("weblayer_browsertests_filters") { - testonly = true - - data = [ "//testing/buildbot/filters/android.emulator_m.weblayer_browsertests.filter" ] -} - source_set("webview_cts_tests_filters") { testonly = true diff --git a/chromium/testing/gtest/BUILD.gn b/chromium/testing/gtest/BUILD.gn index 8c6d211e797..4f8489ea03b 100644 --- a/chromium/testing/gtest/BUILD.gn +++ b/chromium/testing/gtest/BUILD.gn @@ -9,6 +9,13 @@ if (is_ios) { import("//build/config/ios/ios_sdk.gni") } +# This file depends on the legacy global sources assignment filter. It should +# be converted to check target platform before assigning source files to the +# sources variable. Remove this import and set_sources_assignment_filter call +# when the file has been converted. See https://crbug.com/1018739 for details. +import("//build/config/deprecated_default_sources_assignment_filter.gni") +set_sources_assignment_filter(deprecated_default_sources_assignment_filter) + config("gtest_direct_config") { visibility = [ ":*" ] defines = [ "UNIT_TEST" ] @@ -66,7 +73,7 @@ static_library("gtest") { if (gtest_include_platform_test) { sources += [ "../platform_test_mac.mm" ] } - set_sources_assignment_filter(sources_assignment_filter) + set_sources_assignment_filter(deprecated_default_sources_assignment_filter) } if (is_ios && gtest_include_ios_coverage) { diff --git a/chromium/testing/gtest_ios/unittest-Info.plist b/chromium/testing/gtest_ios/unittest-Info.plist index e8972661a56..734695207b0 100644 --- a/chromium/testing/gtest_ios/unittest-Info.plist +++ b/chromium/testing/gtest_ios/unittest-Info.plist @@ -129,7 +129,7 @@ <string>{768, 1024}</string> </dict> </array> - <key>UISupportedInterfaceOrientation</key> + <key>UISupportedInterfaceOrientations</key> <array> <string>UIInterfaceOrientationPortrait</string> <string>UIInterfaceOrientationLandscapeLeft</string> diff --git a/chromium/testing/libfuzzer/fuzzers/BUILD.gn b/chromium/testing/libfuzzer/fuzzers/BUILD.gn index 14039614957..3e5f2f6103d 100644 --- a/chromium/testing/libfuzzer/fuzzers/BUILD.gn +++ b/chromium/testing/libfuzzer/fuzzers/BUILD.gn @@ -122,6 +122,15 @@ fuzzer_test("libpng_progressive_read_fuzzer") { fuzzer_test("v8_script_parser_fuzzer") { sources = [] deps = [ "//v8:parser_fuzzer" ] + asan_options = [ + "allow_user_segv_handler=1", + "handle_sigtrap=1", + ] + msan_options = [ "handle_sigtrap=1" ] + ubsan_options = [ + "handle_sigtrap=1", + "handle_segv=1", + ] dict = "dicts/generated/javascript.dict" seed_corpus = "//v8/test/mjsunit/regress/" libfuzzer_options = [ "only_ascii=1" ] @@ -131,6 +140,15 @@ fuzzer_test("v8_script_parser_fuzzer") { fuzzer_test("v8_json_parser_fuzzer") { sources = [] deps = [ "//v8:json_fuzzer" ] + asan_options = [ + "allow_user_segv_handler=1", + "handle_sigtrap=1", + ] + msan_options = [ "handle_sigtrap=1" ] + ubsan_options = [ + "handle_sigtrap=1", + "handle_segv=1", + ] dict = "dicts/json.dict" environment_variables = [ "AFL_DRIVER_DONT_DEFER=1" ] } @@ -138,6 +156,15 @@ fuzzer_test("v8_json_parser_fuzzer") { fuzzer_test("v8_regexp_parser_fuzzer") { sources = [] deps = [ "//v8:regexp_fuzzer" ] + asan_options = [ + "allow_user_segv_handler=1", + "handle_sigtrap=1", + ] + msan_options = [ "handle_sigtrap=1" ] + ubsan_options = [ + "handle_sigtrap=1", + "handle_segv=1", + ] dict = "dicts/regexp.dict" seed_corpus = "//v8/test/fuzzer/regexp/" libfuzzer_options = [ "max_len=64" ] @@ -147,6 +174,15 @@ fuzzer_test("v8_regexp_parser_fuzzer") { fuzzer_test("v8_regexp_builtins_fuzzer") { sources = [] deps = [ "//v8:regexp_builtins_fuzzer" ] + asan_options = [ + "allow_user_segv_handler=1", + "handle_sigtrap=1", + ] + msan_options = [ "handle_sigtrap=1" ] + ubsan_options = [ + "handle_sigtrap=1", + "handle_segv=1", + ] environment_variables = [ "AFL_DRIVER_DONT_DEFER=1" ] } @@ -158,7 +194,10 @@ fuzzer_test("v8_multi_return_fuzzer") { "handle_sigtrap=1", ] msan_options = [ "handle_sigtrap=1" ] - ubsan_options = [ "handle_sigtrap=1" ] + ubsan_options = [ + "handle_sigtrap=1", + "handle_segv=1", + ] environment_variables = [ "AFL_DRIVER_DONT_DEFER=1" ] } @@ -171,7 +210,10 @@ fuzzer_test("v8_wasm_code_fuzzer") { "handle_sigtrap=1", ] msan_options = [ "handle_sigtrap=1" ] - ubsan_options = [ "handle_sigtrap=1" ] + ubsan_options = [ + "handle_sigtrap=1", + "handle_segv=1", + ] environment_variables = [ "AFL_DRIVER_DONT_DEFER=1" ] } @@ -184,7 +226,10 @@ fuzzer_test("v8_wasm_compile_fuzzer") { "handle_sigtrap=1", ] msan_options = [ "handle_sigtrap=1" ] - ubsan_options = [ "handle_sigtrap=1" ] + ubsan_options = [ + "handle_sigtrap=1", + "handle_segv=1", + ] environment_variables = [ "AFL_DRIVER_DONT_DEFER=1" ] } @@ -199,7 +244,10 @@ fuzzer_test("v8_wasm_fuzzer") { "handle_sigtrap=1", ] msan_options = [ "handle_sigtrap=1" ] - ubsan_options = [ "handle_sigtrap=1" ] + ubsan_options = [ + "handle_sigtrap=1", + "handle_segv=1", + ] environment_variables = [ "AFL_DRIVER_DONT_DEFER=1" ] } @@ -214,7 +262,10 @@ fuzzer_test("v8_wasm_async_fuzzer") { "handle_sigtrap=1", ] msan_options = [ "handle_sigtrap=1" ] - ubsan_options = [ "handle_sigtrap=1" ] + ubsan_options = [ + "handle_sigtrap=1", + "handle_segv=1", + ] environment_variables = [ "AFL_DRIVER_DONT_DEFER=1" ] } @@ -352,7 +403,10 @@ fuzzer_test("v8_fully_instrumented_fuzzer") { "handle_sigtrap=1", ] msan_options = [ "handle_sigtrap=1" ] - ubsan_options = [ "handle_sigtrap=1" ] + ubsan_options = [ + "handle_sigtrap=1", + "handle_segv=1", + ] libfuzzer_options = [ "only_ascii=1" ] } diff --git a/chromium/testing/libfuzzer/libFuzzer_integration.md b/chromium/testing/libfuzzer/libFuzzer_integration.md index 4005a2ad850..f6de265753b 100644 --- a/chromium/testing/libfuzzer/libFuzzer_integration.md +++ b/chromium/testing/libfuzzer/libFuzzer_integration.md @@ -43,8 +43,8 @@ gsutil -m cp -r gs://clusterfuzz-corpus/libfuzzer/<fuzz_target> local_corpus_dir [Buildbot]: https://ci.chromium.org/p/chromium/g/chromium.fuzz/builders [Code Coverage]: https://chromium-coverage.appspot.com/reports/latest_fuzzers_only/linux/index.html -[chromium_libfuzzer.py]: https://code.google.com/p/chromium/codesearch#chromium/build/scripts/slave/recipes/chromium_libfuzzer.py +[chromium_libfuzzer.py]: https://source.chromium.org/chromium/chromium/src/+/HEAD:testing/libfuzzer/libFuzzer_integration.md [ClusterFuzz Fuzzer Stats]: https://clusterfuzz.com/fuzzer-stats/by-fuzzer/fuzzer/libFuzzer/job/libfuzzer_chrome_asan [ClusterFuzz libFuzzer Logs]: https://console.cloud.google.com/storage/browser/clusterfuzz-libfuzzer-logs [Corpus GCS Bucket]: https://console.cloud.google.com/storage/clusterfuzz-corpus/libfuzzer -[fuzzer_test.gni]: https://code.google.com/p/chromium/codesearch#chromium/src/testing/libfuzzer/fuzzer_test.gni +[fuzzer_test.gni]: https://source.chromium.org/chromium/chromium/src/+/HEAD:testing/libfuzzer/fuzzer_test.gni diff --git a/chromium/testing/libfuzzer/proto/json.proto b/chromium/testing/libfuzzer/proto/json.proto index 004e9ee6708..839ee3343c0 100644 --- a/chromium/testing/libfuzzer/proto/json.proto +++ b/chromium/testing/libfuzzer/proto/json.proto @@ -9,11 +9,15 @@ syntax = "proto2"; package json_proto; -message JsonObject { +message JsonObjectField { required string name = 1; required JsonValue value = 2; } +message JsonObject { + repeated JsonObjectField field = 3; +} + message JsonValue { oneof value { // Json value types: diff --git a/chromium/testing/libfuzzer/proto/json_proto_converter.cc b/chromium/testing/libfuzzer/proto/json_proto_converter.cc index 1013be41352..8417d73fdc5 100644 --- a/chromium/testing/libfuzzer/proto/json_proto_converter.cc +++ b/chromium/testing/libfuzzer/proto/json_proto_converter.cc @@ -40,8 +40,16 @@ void JsonProtoConverter::AppendNumber(const NumberValue& number_value) { } void JsonProtoConverter::AppendObject(const JsonObject& json_object) { - data_ << '{' << '"' << json_object.name() << '"' << ':'; - AppendValue(json_object.value()); + data_ << '{'; + bool leading_comma = false; + for (const auto& field : json_object.field()) { + if (leading_comma) { + data_ << ","; + } + leading_comma = true; + data_ << '"' << field.name() << '"' << ':'; + AppendValue(field.value()); + } data_ << '}'; } @@ -61,6 +69,11 @@ void JsonProtoConverter::AppendValue(const JsonValue& json_value) { } } +std::string JsonProtoConverter::Convert(const JsonValue& json_value) { + AppendValue(json_value); + return data_.str(); +} + std::string JsonProtoConverter::Convert(const JsonObject& json_object) { AppendObject(json_object); return data_.str(); diff --git a/chromium/testing/libfuzzer/proto/json_proto_converter.h b/chromium/testing/libfuzzer/proto/json_proto_converter.h index d63eec0c54a..cad0fbf8f51 100644 --- a/chromium/testing/libfuzzer/proto/json_proto_converter.h +++ b/chromium/testing/libfuzzer/proto/json_proto_converter.h @@ -14,6 +14,7 @@ namespace json_proto { class JsonProtoConverter { public: + std::string Convert(const JsonValue& json_value); std::string Convert(const json_proto::JsonObject&); std::string Convert(const json_proto::ArrayValue&); diff --git a/chromium/testing/merge_scripts/code_coverage/merge_results.py b/chromium/testing/merge_scripts/code_coverage/merge_results.py index 76ab743b174..d73f747c7b8 100755 --- a/chromium/testing/merge_scripts/code_coverage/merge_results.py +++ b/chromium/testing/merge_scripts/code_coverage/merge_results.py @@ -119,10 +119,6 @@ def main(): 'w') as f: json.dump(invalid_profiles, f) - if not params.per_cl_coverage: - mark_invalid_shards( - profile_merger.get_shards_to_retry(invalid_profiles), - params.jsons_to_merge) failed = False # If given, always run the additional merge script, even if we only have one @@ -164,28 +160,6 @@ def main(): return 1 if (failed or bool(invalid_profiles)) else 0 -def mark_invalid_shards(bad_shards, jsons_to_merge): - """Removes results json files from bad shards. - - This is needed so that the caller (e.g. recipe) knows to retry, or otherwise - treat the tests in that shard as not having valid results. Note that this only - removes the results from the local machine, as these are expected to remain in - the shard's isolated output. - - Args: - bad_shards: list of task_ids of the shards that are bad or corrupted. - jsons_to_merge: The path to the jsons with the results of the tests. - """ - if not bad_shards: - return - for f in jsons_to_merge: - for task_id in bad_shards: - if task_id in f: - # Remove results json if it corresponds to a bad shard. - os.remove(f) - break - - if __name__ == '__main__': logging.basicConfig( format='[%(asctime)s %(levelname)s] %(message)s', level=logging.INFO) diff --git a/chromium/testing/merge_scripts/code_coverage/merge_results_test.py b/chromium/testing/merge_scripts/code_coverage/merge_results_test.py index 49f08b84c17..cb08ff610d6 100755 --- a/chromium/testing/merge_scripts/code_coverage/merge_results_test.py +++ b/chromium/testing/merge_scripts/code_coverage/merge_results_test.py @@ -237,26 +237,6 @@ class MergeProfilesTest(unittest.TestCase): # The mock method should only apply when merging .profraw files. self.assertFalse(mock_validate_and_convert_profraws.called) - @mock.patch('os.remove') - def test_mark_invalid_shards(self, mock_rm): - merge_results.mark_invalid_shards(['123abc'], [ - '/tmp/123abc/dummy.json', '/tmp/123abc/dummy2.json', - '/tmp/1234abc/dummy.json' - ]) - self.assertEqual([ - mock.call('/tmp/123abc/dummy.json'), - mock.call('/tmp/123abc/dummy2.json') - ], mock_rm.call_args_list) - - def test_get_shards_to_retry(self): - bad_profiles = [ - '/b/s/w/ir/tmp/t/tmpSvBRii/44b643576cf39f10/profraw/default-1.profraw', - '/b/s/w/ir/tmp/t/tmpAbCDEf/44b1234567890123/profraw/default-1.profraw', - '/b/s/w/ir/tmp/t/tmpAbCDEf/44b1234567890123/profraw/default-2.profraw', - ] - self.assertEqual(set(['44b643576cf39f10', '44b1234567890123']), - merger.get_shards_to_retry(bad_profiles)) - @mock.patch('merge_lib._JAVA_PATH', 'java') def test_merge_java_exec_files(self): mock_input_dir_walk = [ diff --git a/chromium/testing/scripts/OWNERS b/chromium/testing/scripts/OWNERS index 7ecff419187..a9d2e40635a 100644 --- a/chromium/testing/scripts/OWNERS +++ b/chromium/testing/scripts/OWNERS @@ -10,9 +10,9 @@ per-file check_static_initializers.py=thomasanderson@chromium.org per-file run_wpt_tests.py=lpz@chromium.org per-file run_wpt_tests.py=robertma@chromium.org -per-file wpt_common.py=lpz@chromium.org -per-file wpt_common.py=robertma@chromium.org -per-file wpt_common.py=rmhasan@chromium.org +per-file wpt_common*.py=lpz@chromium.org +per-file wpt_common*.py=robertma@chromium.org +per-file wpt_common*.py=rmhasan@chromium.org per-file run_performance_tests.py=johnchen@chromium.org per-file run_performance_tests.py=wenbinzhang@google.com diff --git a/chromium/testing/scripts/PRESUBMIT.py b/chromium/testing/scripts/PRESUBMIT.py new file mode 100644 index 00000000000..914728fc34c --- /dev/null +++ b/chromium/testing/scripts/PRESUBMIT.py @@ -0,0 +1,19 @@ +# Copyright 2020 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +"""Top-level presubmit script for testing/trigger_scripts. + +See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts +for more details about the presubmit API built into depot_tools. +""" + +def CommonChecks(input_api, output_api): + return input_api.canned_checks.RunUnitTestsInDirectory( + input_api, output_api, '.', whitelist=[r'^.+_unittest\.py$']) + +def CheckChangeOnUpload(input_api, output_api): + return CommonChecks(input_api, output_api) + +def CheckChangeOnCommit(input_api, output_api): + return CommonChecks(input_api, output_api) diff --git a/chromium/testing/scripts/check_static_initializers.py b/chromium/testing/scripts/check_static_initializers.py index 1dea8ac70e3..76ab89628aa 100755 --- a/chromium/testing/scripts/check_static_initializers.py +++ b/chromium/testing/scripts/check_static_initializers.py @@ -11,10 +11,10 @@ import sys import common -# A list of whitelisted files that are allowed to have static initializers. +# A list of files that are allowed to have static initializers. # If something adds a static initializer, revert it. We don't accept regressions # in static initializers. -_LINUX_SI_FILE_WHITELIST = { +_LINUX_SI_FILE_ALLOWLIST = { 'chrome': [ 'InstrProfilingRuntime.cpp', # Only in coverage builds, not production. 'atomicops_internals_x86.cc', # TODO(crbug.com/973551): Remove. @@ -24,11 +24,28 @@ _LINUX_SI_FILE_WHITELIST = { ], 'nacl_helper_bootstrap': [], } -_LINUX_SI_FILE_WHITELIST['nacl_helper'] = _LINUX_SI_FILE_WHITELIST['chrome'] +_LINUX_SI_FILE_ALLOWLIST['nacl_helper'] = _LINUX_SI_FILE_ALLOWLIST['chrome'] -# Mac can use a whitelist when a dsym is available, otherwise we will fall back +# The lists for Chrome OS are conceptually the same as the Linux ones above. +# If something adds a static initializer, revert it. We don't accept regressions +# in static initializers. +_CROS_SI_FILE_ALLOWLIST = { + 'chrome': [ + 'InstrProfilingRuntime.cpp', # Only in coverage builds, not production. + 'atomicops_internals_x86.cc', # TODO(crbug.com/973551): Remove. + 'debugallocation_shim.cc', # TODO(crbug.com/973552): Remove. + 'iostream.cpp', # TODO(crbug.com/973554): Remove. + 'spinlock.cc', # TODO(crbug.com/973556): Remove. + 'int256.cc', # TODO(crbug.com/537099): Remove. + 'rpc.pb.cc', # TODO(crbug.com/537099): Remove. + ], + 'nacl_helper_bootstrap': [], +} +_CROS_SI_FILE_ALLOWLIST['nacl_helper'] = _LINUX_SI_FILE_ALLOWLIST['chrome'] + +# Mac can use this list when a dsym is available, otherwise it will fall back # to checking the count. -_MAC_SI_FILE_WHITELIST = [ +_MAC_SI_FILE_ALLOWLIST = [ 'InstrProfilingRuntime.cpp', # Only in coverage builds, not in production. 'sysinfo.cc', # Only in coverage builds, not in production. 'iostream.cpp', # Used to setup std::cin/cout/cerr. @@ -102,7 +119,7 @@ def main_mac(src_dir): [dump_static_initializers, chromium_framework_dsym]) for line in stdout: if re.match('0x[0-9a-f]+', line) and not any( - f in line for f in _MAC_SI_FILE_WHITELIST): + f in line for f in _MAC_SI_FILE_ALLOWLIST): ret = 1 print 'Found invalid static initializer: {}'.format(line) print stdout @@ -110,6 +127,7 @@ def main_mac(src_dir): print('Expected <= %d static initializers in %s, but found %d' % (FALLBACK_EXPECTED_MAC_SI_COUNT, chromium_framework_executable, si_count)) + ret = 1 show_mod_init_func = os.path.join(mac_tools_path, 'show_mod_init_func.py') args = [show_mod_init_func] @@ -127,9 +145,11 @@ def main_mac(src_dir): return ret -def main_linux(src_dir): +def main_linux(src_dir, is_chromeos): ret = 0 - for binary_name in _LINUX_SI_FILE_WHITELIST: + allowlist = _CROS_SI_FILE_ALLOWLIST if is_chromeos else \ + _LINUX_SI_FILE_ALLOWLIST + for binary_name in allowlist: if not os.path.exists(binary_name): continue @@ -153,7 +173,7 @@ def main_linux(src_dir): files_with_si.add(parts[1]) for f in files_with_si: - if f not in _LINUX_SI_FILE_WHITELIST[binary_name]: + if f not in allowlist[binary_name]: ret = 1 print('Error: file "%s" is not expected to have static initializers in' ' binary "%s"') % (f, binary_name) @@ -175,7 +195,9 @@ def main_run(args): if sys.platform.startswith('darwin'): rc = main_mac(src_dir) elif sys.platform == 'linux2': - rc = main_linux(src_dir) + is_chromeos = 'buildername' in args.properties and \ + 'chromeos' in args.properties['buildername'] + rc = main_linux(src_dir, is_chromeos) else: sys.stderr.write('Unsupported platform %s.\n' % repr(sys.platform)) return 2 diff --git a/chromium/testing/scripts/common.py b/chromium/testing/scripts/common.py index ea67b5ca88a..0d0811a4147 100644 --- a/chromium/testing/scripts/common.py +++ b/chromium/testing/scripts/common.py @@ -324,6 +324,9 @@ class BaseIsolatedScriptArgsAdapter(object): def clean_up_after_test_run(self): pass + def do_pre_test_run_tasks(self): + pass + def do_post_test_run_tasks(self): pass @@ -331,6 +334,8 @@ class BaseIsolatedScriptArgsAdapter(object): self.parse_args() cmd = self.generate_isolated_script_cmd() + self.do_pre_test_run_tasks() + env = os.environ.copy() # Assume we want to set up the sandbox environment variables all the diff --git a/chromium/testing/scripts/get_compile_targets.py b/chromium/testing/scripts/get_compile_targets.py index 1e5fcf02a96..9aadc7c9fec 100755 --- a/chromium/testing/scripts/get_compile_targets.py +++ b/chromium/testing/scripts/get_compile_targets.py @@ -30,8 +30,10 @@ def main(argv): if filename in ('common.py', 'get_compile_targets.py', 'gpu_integration_test_adapter.py', + 'PRESUBMIT.py', 'sizes_common.py', - 'wpt_common.py'): + 'wpt_common.py', + 'wpt_common_unittest.py'): continue with common.temporary_file() as tempfile_path: diff --git a/chromium/testing/scripts/host_info.py b/chromium/testing/scripts/host_info.py index f23352d2e6f..6aa9b8a2885 100755 --- a/chromium/testing/scripts/host_info.py +++ b/chromium/testing/scripts/host_info.py @@ -68,7 +68,7 @@ def get_device_info(args, failures): 'tools', 'device_status.py'), '--json-output', tempfile_path, - '--blacklist-file', os.path.join( + '--denylist-file', os.path.join( args.paths['checkout'], 'out', 'bad_devices.json') ] if args.args: @@ -86,7 +86,7 @@ def get_device_info(args, failures): results['devices'] = sorted(v['serial'] for v in device_info) details = [ - v['ro.build.fingerprint'] for v in device_info if not v['blacklisted']] + v['ro.build.fingerprint'] for v in device_info if not v['denylisted']] def unique_build_details(index): return sorted(list(set([v.split(':')[index] for v in details]))) @@ -106,8 +106,8 @@ def get_device_info(args, failures): failures.append(k) for v in device_info: - if v['blacklisted']: - failures.append('Device %s blacklisted' % v['serial']) + if v['denylisted']: + failures.append('Device %s denylisted' % v['serial']) return results diff --git a/chromium/testing/scripts/representative_perf_test_data/representatives_frame_times_upper_limit.json b/chromium/testing/scripts/representative_perf_test_data/representatives_frame_times_upper_limit.json index 91466a06398..e9435ce8edd 100644 --- a/chromium/testing/scripts/representative_perf_test_data/representatives_frame_times_upper_limit.json +++ b/chromium/testing/scripts/representative_perf_test_data/representatives_frame_times_upper_limit.json @@ -86,7 +86,9 @@ "balls_javascript_canvas": { "ci_095": 1.324, "avg": 39.475, - "cpu_wall_time_ratio": 0.556 + "cpu_wall_time_ratio": 0.556, + "experimental": true, + "_comment": "crbug.com/1122037" }, "transform_transitions_js_block": { "ci_095": 0.366, @@ -101,7 +103,9 @@ "fill_shapes": { "ci_095": 0.949, "avg": 32.306, - "cpu_wall_time_ratio": 0.539 + "cpu_wall_time_ratio": 0.539, + "experimental": true, + "_comment": "crbug.com/1122037" }, "css_value_type_shadow": { "ci_095": 18.3, @@ -111,7 +115,9 @@ "animometer_webgl_attrib_arrays": { "ci_095": 0.44, "avg": 16.747, - "cpu_wall_time_ratio": 0.375 + "cpu_wall_time_ratio": 0.375, + "experimental": true, + "_comment": "crbug.com/1122394" }, "canvas_05000_pixels_per_second": { "ci_095": 0.177, diff --git a/chromium/testing/scripts/run_rendering_benchmark_with_gated_performance.py b/chromium/testing/scripts/run_rendering_benchmark_with_gated_performance.py index 8daabb47e71..0721aeb9fe4 100755 --- a/chromium/testing/scripts/run_rendering_benchmark_with_gated_performance.py +++ b/chromium/testing/scripts/run_rendering_benchmark_with_gated_performance.py @@ -142,8 +142,6 @@ class RenderingRepresentativePerfTest(object): re_run_test_output = os.path.join(re_run_output_dir, os.path.basename(self.options.isolated_script_test_output)) - re_run_test_perf_output = os.path.join(re_run_output_dir, - os.path.basename(self.options.isolated_script_test_perf_output)) self.set_platform_specific_attributes() @@ -165,8 +163,7 @@ class RenderingRepresentativePerfTest(object): self.args.extend(['--story-tag-filter', self.story_tag]) self.re_run_args = replace_arg_values(list(sys.argv), [ - ('--isolated-script-test-output', re_run_test_output), - ('--isolated-script-test-perf-output', re_run_test_perf_output)]) + ('--isolated-script-test-output', re_run_test_output)]) def parse_csv_results(self, csv_obj): """ Parses the raw CSV data diff --git a/chromium/testing/scripts/run_wpt_tests.py b/chromium/testing/scripts/run_wpt_tests.py index 73aee342fde..b3f730abdce 100755 --- a/chromium/testing/scripts/run_wpt_tests.py +++ b/chromium/testing/scripts/run_wpt_tests.py @@ -16,13 +16,20 @@ Here's the mapping [isolate script flag] : [wpt flag] import json import os +import shutil import sys import common import wpt_common +# The checked-in manifest is copied to a temporary working directory so it can +# be mutated by wptrunner +WPT_CHECKED_IN_MANIFEST = ( + "../../third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json") +WPT_WORKING_COPY_MANIFEST = "../../out/Release/MANIFEST.json" + WPT_CHECKED_IN_METADATA_DIR = "../../third_party/blink/web_tests/external/wpt" -WPT_METADATA_OUTPUT_DIR = "../../wpt_expectations_metadata/" +WPT_METADATA_OUTPUT_DIR = "../../out/Release/wpt_expectations_metadata/" WPT_OVERRIDE_EXPECTATIONS_PATH = ( "../../third_party/blink/web_tests/WPTOverrideExpectations") @@ -37,7 +44,8 @@ class WPTTestAdapter(wpt_common.BaseWptScriptAdapter): "--venv=../../", "--skip-venv-setup", "run", - "chrome", + "chrome" + ] + self.options.test_list + [ "--binary=../../out/Release/chrome", "--binary-arg=--host-resolver-rules=" "MAP nonexistent.*.test ~NOTFOUND, MAP *.test 127.0.0.1", @@ -68,8 +76,8 @@ class WPTTestAdapter(wpt_common.BaseWptScriptAdapter): # a lengthy import/export cycle to refresh. So we allow WPT to # update the manifest in cast it's stale. #"--no-manifest-update", - "--manifest=../../third_party/blink/web_tests/external/" - "WPT_BASE_MANIFEST_8.json", + "--manifest", + WPT_WORKING_COPY_MANIFEST, # (crbug.com/1023835) The flags below are temporary to aid debugging "--log-mach=-", "--log-mach-verbose", @@ -77,22 +85,32 @@ class WPTTestAdapter(wpt_common.BaseWptScriptAdapter): # TODO(lpz): Consider removing --processes and compute automatically # from multiprocessing.cpu_count() #"--processes=5", + "--mojojs-path=../../out/Release/gen/", ]) return rest_args -def main(): - # First, generate WPT metadata files. - common.run_command([ - sys.executable, - os.path.join(wpt_common.BLINK_TOOLS_DIR, 'build_wpt_metadata.py'), - "--metadata-output-dir", - WPT_METADATA_OUTPUT_DIR, - "--additional-expectations", - WPT_OVERRIDE_EXPECTATIONS_PATH, - "--checked-in-metadata-dir", - WPT_CHECKED_IN_METADATA_DIR - ]) + def add_extra_arguments(self, parser): + parser.add_argument('test_list', nargs="*", + help="List of tests or test directories to run") + + def do_pre_test_run_tasks(self): + # Copy the checked-in manifest to the temporary working directory + shutil.copy(WPT_CHECKED_IN_MANIFEST, WPT_WORKING_COPY_MANIFEST) + + # Generate WPT metadata files. + common.run_command([ + sys.executable, + os.path.join(wpt_common.BLINK_TOOLS_DIR, 'build_wpt_metadata.py'), + "--metadata-output-dir", + WPT_METADATA_OUTPUT_DIR, + "--additional-expectations", + WPT_OVERRIDE_EXPECTATIONS_PATH, + "--checked-in-metadata-dir", + WPT_CHECKED_IN_METADATA_DIR + ]) + +def main(): adapter = WPTTestAdapter() return adapter.run_test() diff --git a/chromium/testing/scripts/wpt_common.py b/chromium/testing/scripts/wpt_common.py index de1b7e7266e..940a47c9a57 100644 --- a/chromium/testing/scripts/wpt_common.py +++ b/chromium/testing/scripts/wpt_common.py @@ -5,18 +5,21 @@ import base64 import json import os -import shutil import sys import common BLINK_TOOLS_DIR = os.path.join(common.SRC_DIR, 'third_party', 'blink', 'tools') WEB_TESTS_DIR = os.path.join(BLINK_TOOLS_DIR, os.pardir, 'web_tests') +EXTERNAL_WPT_TESTS_DIR = os.path.join(WEB_TESTS_DIR, 'external', 'wpt') if BLINK_TOOLS_DIR not in sys.path: sys.path.append(BLINK_TOOLS_DIR) from blinkpy.common.host import Host +from blinkpy.common.html_diff import html_diff +from blinkpy.common.system.filesystem import FileSystem +from blinkpy.common.unified_diff import unified_diff from blinkpy.web_tests.models import test_failures class BaseWptScriptAdapter(common.BaseIsolatedScriptArgsAdapter): @@ -25,10 +28,16 @@ class BaseWptScriptAdapter(common.BaseIsolatedScriptArgsAdapter): as integrating output with the results viewer. Subclasses contain other (usually platform-specific) logic.""" - def __init__(self): + def __init__(self, host=None): super(BaseWptScriptAdapter, self).__init__() - host = Host() + if not host: + host = Host() + self.fs = host.filesystem self.port = host.port_factory.get() + self.wpt_manifest = self.port.wpt_manifest("external/wpt") + # Path to the output of the test run. Comes from the args passed to the + # run, parsed after this constructor. Can be overwritten by tests. + self.wpt_output = None def generate_test_output_args(self, output): return ['--log-chromium', output] @@ -44,28 +53,30 @@ class BaseWptScriptAdapter(common.BaseIsolatedScriptArgsAdapter): '--chunk-type=hash'] def do_post_test_run_tasks(self): + if not self.wpt_output and self.options: + self.wpt_output = self.options.isolated_script_test_output + # Move json results into layout-test-results directory - results_dir = os.path.dirname(self.options.isolated_script_test_output) + results_dir = os.path.dirname(self.wpt_output) layout_test_results = os.path.join(results_dir, 'layout-test-results') - if os.path.exists(layout_test_results): - shutil.rmtree(layout_test_results) - os.mkdir(layout_test_results) + if self.fs.exists(layout_test_results): + self.fs.rmtree(layout_test_results) + self.fs.maybe_make_directory(layout_test_results) # Perform post-processing of wptrunner output self.process_wptrunner_output() - shutil.copyfile(self.options.isolated_script_test_output, + self.fs.copyfile(self.wpt_output, os.path.join(layout_test_results, 'full_results.json')) # create full_results_jsonp.js file which is used to # load results into the results viewer - with open(self.options.isolated_script_test_output, 'r') \ - as full_results, \ - open(os.path.join( - layout_test_results, 'full_results_jsonp.js'), 'w') \ - as json_js: - json_js.write('ADD_FULL_RESULTS(%s);' % full_results.read()) + self.fs.write_text_file( + os.path.join(layout_test_results, 'full_results_jsonp.js'), + 'ADD_FULL_RESULTS(%s);' % self.fs.read_text_file( + self.wpt_output)) + # copy layout test results viewer to layout-test-results directory - shutil.copyfile( + self.fs.copyfile( os.path.join(WEB_TESTS_DIR, 'fast', 'harness', 'results.html'), os.path.join(layout_test_results, 'results.html')) @@ -75,15 +86,15 @@ class BaseWptScriptAdapter(common.BaseIsolatedScriptArgsAdapter): This output contains a single large json file containing the raw content or artifacts which need to be extracted into their own files and removed from the json file (to avoid duplication).""" - output_json = json.load( - open(self.options.isolated_script_test_output, "r")) + output_json = json.loads( + self.fs.read_text_file(self.wpt_output)) test_json = output_json["tests"] - results_dir = os.path.dirname(self.options.isolated_script_test_output) + results_dir = os.path.dirname(self.wpt_output) self._process_test_leaves(results_dir, output_json["path_delimiter"], test_json, "") # Write output_json back to the same file after modifying it in memory - with open(self.options.isolated_script_test_output, "w") as output_file: - json.dump(output_json, output_file) + self.fs.write_text_file(self.wpt_output, + json.dumps(output_json)) def _process_test_leaves(self, results_dir, delim, root_node, path_so_far): """Finds and processes each test leaf below the specified root. @@ -105,10 +116,38 @@ class BaseWptScriptAdapter(common.BaseIsolatedScriptArgsAdapter): return log_artifact = root_node["artifacts"].pop("log", None) if log_artifact: - artifact_subpath = self._write_log_artifact( + # Note that the log_artifact is a list of strings, so we join + # them on new lines when writing to file. + actual_text = "\n".join(log_artifact) + actual_subpath = self._write_text_artifact( test_failures.FILENAME_SUFFIX_ACTUAL, - results_dir, path_so_far, log_artifact) - root_node["artifacts"]["actual_text"] = [artifact_subpath] + results_dir, path_so_far, actual_text) + root_node["artifacts"]["actual_text"] = [actual_subpath] + # Try to locate the expected output of this test, if it exists. + expected_subpath, expected_text = \ + self._maybe_write_expected_output(results_dir, path_so_far) + if expected_subpath: + root_node["artifacts"]["expected_text"] = [expected_subpath] + + diff_content = unified_diff(expected_text, actual_text, + expected_subpath, actual_subpath) + diff_subpath = self._write_text_artifact( + test_failures.FILENAME_SUFFIX_DIFF, results_dir, + path_so_far, diff_content) + root_node["artifacts"]["text_diff"] = [diff_subpath] + # We pass the text as bytes here because the html_diff library + # requires that but the file contents is read-in as unicode. + html_diff_content = html_diff(expected_text.encode('utf-8'), + actual_text.encode('utf-8')) + # Ensure the diff itself is properly decoded, to avoid + # UnicodeDecodeErrors when writing to file. This can happen if + # the diff contains unicode characters but the file is written + # as ascii because of the default system-level encoding. + html_diff_content = unicode(html_diff_content, 'utf-8') + html_diff_subpath = self._write_text_artifact( + test_failures.FILENAME_SUFFIX_HTML_DIFF, results_dir, + path_so_far, html_diff_content, extension=".html") + root_node["artifacts"]["pretty_text_diff"] = [html_diff_subpath] screenshot_artifact = root_node["artifacts"].pop("screenshots", None) @@ -121,9 +160,13 @@ class BaseWptScriptAdapter(common.BaseIsolatedScriptArgsAdapter): crashlog_artifact = root_node["artifacts"].pop("wpt_crash_log", None) if crashlog_artifact: - artifact_subpath = self._write_log_artifact( + # Note that the crashlog_artifact is a list of strings, so we + # join them on new lines when writing to file. + artifact_subpath = self._write_text_artifact( test_failures.FILENAME_SUFFIX_CRASH_LOG, - results_dir, path_so_far, crashlog_artifact) + results_dir, path_so_far, "\n".join(crashlog_artifact)) + if artifact_subpath: + root_node["artifacts"]["crash_log"] = [artifact_subpath] return @@ -136,34 +179,80 @@ class BaseWptScriptAdapter(common.BaseIsolatedScriptArgsAdapter): self._process_test_leaves(results_dir, delim, root_node[key], new_path) - def _write_log_artifact(self, suffix, results_dir, test_name, log_artifact): - """Writes a log artifact to disk. + def _maybe_write_expected_output(self, results_dir, test_name): + """Attempts to create an expected output artifact for the test. - A log artifact contains some form of output for a test. It is written to - a txt file with a suffix generated from the log type. + The expected output of tests is checked-in to the source tree beside the + test itself, with a .ini extension. Not all tests have expected output. + + Args: + results_dir: str path to the dir to write the output to + test_name: str name of the test to write expected output for + + Returns: + two strings: + - first is the path to the artifact file that the expected output + was written to, relative to the directory that the original output + is located. Returns None if there is no expected output for this + test. + - second is the text that is written to the file, or empty string if + there is no expected output for this test. + """ + test_file_subpath = self.wpt_manifest.file_path_for_test_url(test_name) + if not test_file_subpath: + # Not all tests in the output have a corresponding test file. This + # could be print-reftests (which are unsupported by the blinkpy + # manifest) or .any.js tests (which appear in the output even though + # they do not actually run - they have corresponding tests like + # .any.worker.html which are covered here). + return None, "" + + test_file_path = os.path.join(EXTERNAL_WPT_TESTS_DIR, test_file_subpath) + expected_ini_path = test_file_path + ".ini" + if not self.fs.exists(expected_ini_path): + return None, "" + + # This test has checked-in expected output. It needs to be copied to the + # results viewer directory and renamed from <test>.ini to + # <test>-expected.txt + contents = self.fs.read_text_file(expected_ini_path) + artifact_subpath = self._write_text_artifact( + test_failures.FILENAME_SUFFIX_EXPECTED, results_dir, test_name, + contents) + return artifact_subpath, contents + + def _write_text_artifact(self, suffix, results_dir, test_name, artifact, + extension=".txt"): + """Writes a text artifact to disk. + + A text artifact contains some form of text output for a test, such as + the actual test output, or a diff of the actual and expected outputs. + It is written to a txt file with a suffix generated from the log type. Args: suffix: str suffix of the artifact to write, e.g. test_failures.FILENAME_SUFFIX_ACTUAL results_dir: str path to the directory that results live in test_name: str name of the test that this artifact is for - log_artifact: list of strings, the log entries for this test from - the json output. + artifact: string, the text to write for this test. + extension: str the filename extension to use. Defaults to ".txt" but + can be changed if needed (eg: to ".html" for pretty-diff) Returns: - string path to the artifact file that the log was written to, - relative to the directory that the original output is located. + string, the path to the artifact file that was written relative + to the |results_dir|. """ log_artifact_sub_path = ( os.path.join("layout-test-results", - self.port.output_filename(test_name, suffix, ".txt")) + self.port.output_filename( + test_name, suffix, extension)) ) log_artifact_full_path = os.path.join(results_dir, log_artifact_sub_path) - if not os.path.exists(os.path.dirname(log_artifact_full_path)): - os.makedirs(os.path.dirname(log_artifact_full_path)) - with open(log_artifact_full_path, "w") as artifact_file: - artifact_file.write("\n".join(log_artifact).encode("utf-8")) + if not self.fs.exists(os.path.dirname(log_artifact_full_path)): + self.fs.maybe_make_directory( + os.path.dirname(log_artifact_full_path)) + self.fs.write_text_file(log_artifact_full_path, artifact) return log_artifact_sub_path @@ -210,9 +299,9 @@ class BaseWptScriptAdapter(common.BaseIsolatedScriptArgsAdapter): result[screenshot_key] = screenshot_sub_path screenshot_full_path = os.path.join(results_dir,screenshot_sub_path) - if not os.path.exists(os.path.dirname(screenshot_full_path)): - os.makedirs(os.path.dirname(screenshot_full_path)) + if not self.fs.exists(os.path.dirname(screenshot_full_path)): + self.fs.maybe_make_directory( + os.path.dirname(screenshot_full_path)) # Note: we are writing raw bytes to this file - with open(screenshot_full_path, "wb") as artifact_file: - artifact_file.write(image_bytes) + self.fs.write_binary_file(screenshot_full_path, image_bytes) return result diff --git a/chromium/testing/scripts/wpt_common_unittest.py b/chromium/testing/scripts/wpt_common_unittest.py new file mode 100755 index 00000000000..66fa51b658d --- /dev/null +++ b/chromium/testing/scripts/wpt_common_unittest.py @@ -0,0 +1,370 @@ +#!/usr/bin/env vpython +# Copyright (c) 2020 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +"""Unit tests for common functionality of wpt testing scripts.""" + +import base64 +import json +import os +import unittest + +from wpt_common import ( + BaseWptScriptAdapter, EXTERNAL_WPT_TESTS_DIR, WEB_TESTS_DIR +) + +from blinkpy.common.host_mock import MockHost +from blinkpy.web_tests.port.factory_mock import MockPortFactory +from blinkpy.w3c.wpt_manifest import BASE_MANIFEST_NAME + +# The path where the output of a wpt run was written. This is the file that +# gets processed by BaseWptScriptAdapter. +OUTPUT_JSON_FILENAME = "out.json" + + +class BaseWptScriptAdapterTest(unittest.TestCase): + def setUp(self): + self.host = MockHost() + self.host.port_factory = MockPortFactory(self.host) + self.port = self.host.port_factory.get() + + # Create a testing manifest containing any test files that we + # might interact with. + self.host.filesystem.write_text_file( + self.port.web_tests_dir() + '/external/' + BASE_MANIFEST_NAME, + json.dumps({ + 'items': { + 'reftest': { + 'reftest.html': [ + 'c3f2fb6f436da59d43aeda0a7e8a018084557033', + [None, [['reftest-ref.html', '==']], {}], + ] + }, + 'testharness': { + 'test.html': [ + 'd933fd981d4a33ba82fb2b000234859bdda1494e', + [None, {}] + ], + 'crash.html': [ + 'd933fd981d4a33ba82fb2b000234859bdda1494e', + [None, {}] + ], + 'variant.html': [ + 'b8db5972284d1ac6bbda0da81621d9bca5d04ee7', + ['variant.html?foo=bar/abc', {}], + ['variant.html?foo=baz', {}], + ], + 'dir': { + 'multiglob.https.any.js': [ + 'd6498c3e388e0c637830fa080cca78b0ab0e5305', + ['dir/multiglob.https.any.window.html', {}], + ['dir/multiglob.https.any.worker.html', {}], + ], + }, + }, + }, + })) + self.host.filesystem.write_text_file( + os.path.join(WEB_TESTS_DIR, "fast", "harness", "results.html"), + "results-viewer-body") + self.wpt_adapter = BaseWptScriptAdapter(self.host) + self.wpt_adapter.wpt_output = OUTPUT_JSON_FILENAME + + def _create_json_output(self, json_dict): + """Writing some json output for processing.""" + self.host.filesystem.write_text_file(OUTPUT_JSON_FILENAME, + json.dumps(json_dict)) + + def _load_json_output(self): + """Loads the json output after post-processing.""" + return json.loads(self.host.filesystem.read_text_file( + OUTPUT_JSON_FILENAME)) + + def test_write_log_artifact(self): + # Ensure that log artifacts are written to the correct location. + json_dict = { + 'tests': { + 'test.html': { + 'expected': 'PASS', + 'actual': 'PASS', + 'artifacts': { + 'wpt_actual_status': ['OK'], + 'log': ['test.html actual text'], + }, + }, + }, + 'path_delimiter': '/', + } + self._create_json_output(json_dict) + self.wpt_adapter.do_post_test_run_tasks() + written_files = self.wpt_adapter.fs.written_files + actual_path = os.path.join("layout-test-results", "test-actual.txt") + self.assertEqual("test.html actual text", written_files[actual_path]) + # Ensure the artifact in the json was replaced with the location of + # the newly-created file. + updated_json = self._load_json_output() + self.assertFalse( + "log" in updated_json["tests"]["test.html"]["artifacts"]) + self.assertEqual( + [actual_path], + updated_json["tests"]["test.html"]["artifacts"]["actual_text"]) + + # Ensure that a diff was also generated. Since there's no expected + # output, the actual text is all new. We don't validate the entire diff + # files to avoid checking line numbers/markup. + diff_path = os.path.join("layout-test-results", "test-diff.txt") + self.assertIn("+test.html actual text", written_files[diff_path]) + self.assertEqual( + [diff_path], + updated_json["tests"]["test.html"]["artifacts"]["text_diff"]) + pretty_diff_path = os.path.join("layout-test-results", + "test-pretty-diff.html") + self.assertIn("test.html actual text", written_files[pretty_diff_path]) + self.assertEqual( + [pretty_diff_path], + updated_json["tests"]["test.html"]["artifacts"]["pretty_text_diff"]) + + def test_write_crashlog_artifact(self): + # Ensure that crash log artifacts are written to the correct location. + json_dict = { + 'tests': { + 'test.html': { + 'expected': 'PASS', + 'actual': 'CRASH', + 'artifacts': { + 'wpt_actual_status': ['CRASH'], + 'wpt_crash_log': ['test.html crashed!'], + }, + }, + }, + 'path_delimiter': '/', + } + self._create_json_output(json_dict) + self.wpt_adapter.do_post_test_run_tasks() + written_files = self.wpt_adapter.fs.written_files + crash_log_path = os.path.join("layout-test-results", + "test-crash-log.txt") + self.assertEqual("test.html crashed!", written_files[crash_log_path]) + # Ensure the artifact in the json was replaced with the location of + # the newly-created file. + updated_json = self._load_json_output() + self.assertFalse( + "wpt_crash_log" in updated_json["tests"]["test.html"]["artifacts"]) + self.assertEqual( + [crash_log_path], + updated_json["tests"]["test.html"]["artifacts"]["crash_log"]) + + def test_write_screenshot_artifacts(self): + # Ensure that screenshots are written to the correct filenames and + # their bytes are base64 decoded. + json_dict = { + 'tests': { + 'reftest.html': { + 'expected': 'PASS', + 'actual': 'PASS', + 'artifacts': { + 'wpt_actual_status': ['PASS'], + 'screenshots': [ + 'reftest.html:abcd', + 'reftest-ref.html:bcde', + ], + }, + }, + }, + 'path_delimiter': '/', + } + self._create_json_output(json_dict) + self.wpt_adapter.do_post_test_run_tasks() + written_files = self.wpt_adapter.fs.written_files + actual_image_path = os.path.join("layout-test-results", + "reftest-actual.png") + self.assertEqual(base64.b64decode('abcd'), + written_files[actual_image_path]) + expected_image_path = os.path.join("layout-test-results", + "reftest-expected.png") + self.assertEqual(base64.b64decode('bcde'), + written_files[expected_image_path]) + # Ensure the artifacts in the json were replaced with the location of + # the newly-created files. + updated_json = self._load_json_output() + self.assertFalse( + "screenshots" in updated_json["tests"]["reftest.html"]["artifacts"]) + self.assertEqual( + [actual_image_path], + updated_json["tests"]["reftest.html"]["artifacts"]["actual_image"]) + self.assertEqual( + [expected_image_path], + updated_json["tests"]["reftest.html"]["artifacts"] + ["expected_image"]) + + def test_copy_expected_output(self): + # Check that an -expected.txt file is created from a checked-in metadata + # ini file if it exists for a test + json_dict = { + 'tests': { + 'test.html': { + 'expected': 'PASS', + 'actual': 'PASS', + 'artifacts': { + 'wpt_actual_status': ['OK'], + 'log': ['test.html actual text'], + }, + }, + }, + 'path_delimiter': '/', + } + self._create_json_output(json_dict) + # Also create a checked-in metadata file for this test + self.host.filesystem.write_text_file( + os.path.join(EXTERNAL_WPT_TESTS_DIR, "test.html.ini"), + "test.html checked-in metadata") + self.wpt_adapter.do_post_test_run_tasks() + written_files = self.wpt_adapter.fs.written_files + actual_path = os.path.join("layout-test-results", "test-actual.txt") + self.assertEqual("test.html actual text", written_files[actual_path]) + # The checked-in metadata file gets renamed from .ini to -expected.txt + expected_path = os.path.join("layout-test-results", "test-expected.txt") + self.assertEqual("test.html checked-in metadata", + written_files[expected_path]) + # Ensure the artifacts in the json were replaced with the locations of + # the newly-created files. + updated_json = self._load_json_output() + self.assertFalse( + "log" in updated_json["tests"]["test.html"]["artifacts"]) + self.assertEqual( + [actual_path], + updated_json["tests"]["test.html"]["artifacts"]["actual_text"]) + self.assertEqual( + [expected_path], + updated_json["tests"]["test.html"]["artifacts"]["expected_text"]) + + # Ensure that a diff was also generated. There should be both additions + # and deletions for this test since we have expected output. We don't + # validate the entire diff files to avoid checking line numbers/markup. + diff_path = os.path.join("layout-test-results", "test-diff.txt") + self.assertIn("-test.html checked-in metadata", + written_files[diff_path]) + self.assertIn("+test.html actual text", written_files[diff_path]) + self.assertEqual( + [diff_path], + updated_json["tests"]["test.html"]["artifacts"]["text_diff"]) + pretty_diff_path = os.path.join("layout-test-results", + "test-pretty-diff.html") + self.assertIn("test.html checked-in metadata", + written_files[pretty_diff_path]) + self.assertIn("test.html actual text", written_files[pretty_diff_path]) + self.assertEqual( + [pretty_diff_path], + updated_json["tests"]["test.html"]["artifacts"]["pretty_text_diff"]) + + def test_expected_output_for_variant(self): + # Check that an -expected.txt file is created from a checked-in metadata + # ini file for a variant test. Variants are a little different because + # we have to use the manifest to map a test name to the test file, and + # determine the associated metadata from the test file. + # Check that an -expected.txt file is created from a checked-in metadata + # ini file if it exists for a test + json_dict = { + 'tests': { + 'variant.html?foo=bar/abc': { + 'expected': 'PASS', + 'actual': 'PASS', + 'artifacts': { + 'wpt_actual_status': ['OK'], + 'log': ['variant bar/abc actual text'], + }, + }, + }, + 'path_delimiter': '/', + } + self._create_json_output(json_dict) + # Also create a checked-in metadata file for this test. This filename + # matches the test *file* name, not the test name (which includes the + # variant). + self.host.filesystem.write_text_file( + os.path.join(EXTERNAL_WPT_TESTS_DIR, "variant.html.ini"), + "variant.html checked-in metadata") + self.wpt_adapter.do_post_test_run_tasks() + written_files = self.wpt_adapter.fs.written_files + actual_path = os.path.join("layout-test-results", + "variant_foo=bar_abc-actual.txt") + self.assertEqual("variant bar/abc actual text", + written_files[actual_path]) + # The checked-in metadata file gets renamed from .ini to -expected.txt + expected_path = os.path.join("layout-test-results", + "variant_foo=bar_abc-expected.txt") + self.assertEqual("variant.html checked-in metadata", + written_files[expected_path]) + # Ensure the artifacts in the json were replaced with the locations of + # the newly-created files. + updated_json = self._load_json_output() + self.assertFalse("log" in updated_json["tests"] + ["variant.html?foo=bar/abc"]["artifacts"]) + self.assertEqual( + [actual_path], + updated_json["tests"]["variant.html?foo=bar/abc"]["artifacts"] + ["actual_text"]) + self.assertEqual( + [expected_path], + updated_json["tests"]["variant.html?foo=bar/abc"]["artifacts"] + ["expected_text"]) + + def test_expected_output_for_multiglob(self): + # Check that an -expected.txt file is created from a checked-in metadata + # ini file for a multiglobal test. Multi-globals are a little different + # because we have to use the manifest to map a test name to the test + # file, and determine the associated metadata from the test file. + # + # Also note that the "dir" is both a directory and a part of the test + # name, so the path delimiter remains a / (ie: dir/multiglob) even on + # Windows. + json_dict = { + 'tests': { + 'dir/multiglob.https.any.worker.html': { + 'expected': 'PASS', + 'actual': 'PASS', + 'artifacts': { + 'wpt_actual_status': ['OK'], + 'log': ['dir/multiglob worker actual text'], + }, + }, + }, + 'path_delimiter': '/', + } + self._create_json_output(json_dict) + # Also create a checked-in metadata file for this test. This filename + # matches the test *file* name, not the test name (which includes test + # scope). + self.host.filesystem.write_text_file( + os.path.join(EXTERNAL_WPT_TESTS_DIR, + "dir/multiglob.https.any.js.ini"), + "dir/multiglob checked-in metadata") + self.wpt_adapter.do_post_test_run_tasks() + written_files = self.wpt_adapter.fs.written_files + actual_path = os.path.join("layout-test-results", + "dir/multiglob.https.any.worker-actual.txt") + self.assertEqual("dir/multiglob worker actual text", + written_files[actual_path]) + # The checked-in metadata file gets renamed from .ini to -expected.txt + expected_path = os.path.join( + "layout-test-results", + "dir/multiglob.https.any.worker-expected.txt") + self.assertEqual("dir/multiglob checked-in metadata", + written_files[expected_path]) + # Ensure the artifacts in the json were replaced with the locations of + # the newly-created files. + updated_json = self._load_json_output() + self.assertFalse("log" in updated_json["tests"] + ["dir/multiglob.https.any.worker.html"]["artifacts"]) + self.assertEqual( + [actual_path], + updated_json["tests"]["dir/multiglob.https.any.worker.html"] + ["artifacts"]["actual_text"]) + self.assertEqual( + [expected_path], + updated_json["tests"]["dir/multiglob.https.any.worker.html"] + ["artifacts"]["expected_text"]) + +if __name__ == '__main__': + unittest.main() diff --git a/chromium/testing/test.gni b/chromium/testing/test.gni index ecc8700a392..0187b24f7e6 100644 --- a/chromium/testing/test.gni +++ b/chromium/testing/test.gni @@ -7,6 +7,7 @@ # ============================================================================== import("//build/config/chromeos/ui_mode.gni") +import("//build_overrides/build.gni") if (is_android) { import("//build/config/android/config.gni") @@ -40,11 +41,21 @@ if ((is_linux && !is_chromeos) || is_mac || is_win || # Define a test as an executable (or apk on Android) with the "testonly" flag # set. # Variable: +# use_xvfb: (optional) whether to run the executable under Xvfb. # use_raw_android_executable: Use executable() rather than android_apk(). # use_native_activity: Test implements ANativeActivity_onCreate(). # win_test_enable_cfi_linker: (Win) Enable CFI linker for this test binary. +# is_xctest: (iOS, optional) whether to build the executable as XCTest. +# Similar to the GN arg 'enable_run_ios_unittests_with_xctest' but +# for build targets. template("test") { + if (!is_ios) { + assert(!defined(invoker.is_xctest) || !invoker.is_xctest, + "is_xctest can be set only for iOS builds") + } if (is_android) { + assert(!defined(invoker.use_xvfb) || !invoker.use_xvfb) + _use_raw_android_executable = defined(invoker.use_raw_android_executable) && invoker.use_raw_android_executable @@ -211,6 +222,8 @@ template("test") { } } } else if (is_fuchsia) { + assert(!defined(invoker.use_xvfb) || !invoker.use_xvfb) + _output_name = invoker.target_name _pkg_target = "${_output_name}_pkg" _exec_target = "${_output_name}__exec" @@ -242,6 +255,9 @@ template("test") { output_name = _exec_target } } else if (is_ios) { + assert(!defined(invoker.use_xvfb) || !invoker.use_xvfb) + _runtime_deps_file = "$root_out_dir/${target_name}.runtime_deps" + declare_args() { # Keep the unittest-as-xctest functionality defaulted to off until the # bots are updated to handle it properly. @@ -273,10 +289,6 @@ template("test") { "@WrappedPath(${_root_build_dir}/${_test_target}.app)", ] - if (enable_run_ios_unittests_with_xctest) { - executable_args += [ "--xctest" ] - } - wrapper_output_name = "${_wrapper_output_name}" } @@ -288,7 +300,10 @@ template("test") { outputs = [ "{{bundle_resources_dir}}/{{source_file_part}}" ] } - if (enable_run_ios_unittests_with_xctest) { + force_xctest = enable_run_ios_unittests_with_xctest || + (defined(invoker.is_xctest) && invoker.is_xctest) + + if (force_xctest) { ios_test_target_type = "ios_xctest_test" } else { ios_test_target_type = "ios_app_bundle" @@ -297,7 +312,7 @@ template("test") { target(ios_test_target_type, _test_target) { testonly = true - if (enable_run_ios_unittests_with_xctest) { + if (force_xctest && build_with_chromium) { xctest_module_target = "//base/test:google_test_runner" } @@ -331,8 +346,11 @@ template("test") { # Include the generate_wrapper as part of data_deps data_deps += [ ":${_wrapper_output_name}" ] + write_runtime_deps = _runtime_deps_file } } else if (is_chromeos && cros_board != "") { + assert(!defined(invoker.use_xvfb) || !invoker.use_xvfb) + # Building for a cros board (ie: not linux-chromeos). _gen_runner_target = "${target_name}__runner" @@ -366,8 +384,10 @@ template("test") { deps += [ ":$_gen_runner_target" ] } } else if (is_chromeos && cros_board == "") { + # TODO(crbug.com/816629) - Make use_xvfb work right in this situation. + not_needed([ "use_xvfb" ]) executable(target_name) { - forward_variables_from(invoker, "*") + forward_variables_from(invoker, "*", [ "use_xvfb" ]) if (!defined(deps)) { deps = [] } @@ -448,6 +468,10 @@ template("test") { deps += [ ":$_gen_runner_target" ] } } else { + if (is_mac || is_win) { + assert(!defined(invoker.use_xvfb) || !invoker.use_xvfb) + } + if ((is_linux && !is_chromeos) || is_mac || is_win) { _runtime_deps_file = "$root_out_dir/${target_name}.runtime_deps" _executable = target_name @@ -502,7 +526,7 @@ template("test") { } executable(target_name) { - forward_variables_from(invoker, "*") + forward_variables_from(invoker, "*", [ "use_xvfb" ]) if (!defined(deps)) { deps = [] } diff --git a/chromium/testing/variations/fieldtrial_testing_config.json b/chromium/testing/variations/fieldtrial_testing_config.json index fbf4bb333c5..e2c9d0c7e47 100644 --- a/chromium/testing/variations/fieldtrial_testing_config.json +++ b/chromium/testing/variations/fieldtrial_testing_config.json @@ -1,4 +1,19 @@ { + "AVFoundationCaptureV2": [ + { + "platforms": [ + "mac" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "AVFoundationCaptureV2" + ] + } + ] + } + ], "AddToHomescreenMessaging": [ { "platforms": [ @@ -26,26 +41,56 @@ ] } ], - "AlignFontDisplayAutoTimeoutWithLCPGoal": [ + "AllPassiveMixedContentAutoupgrade": [ { "platforms": [ "android", - "android_weblayer", - "android_webview", "chromeos", "linux", - "mac", - "windows" + "mac" ], "experiments": [ { - "name": "EnabledWithSwapModeAndTimeout1000ms", + "name": "Enabled_10", "params": { - "intervention-mode": "swap", - "lcp-limit-in-ms": "1000" + "mode": "all-passive" }, "enable_features": [ - "AlignFontDisplayAutoTimeoutWithLCPGoal" + "AutoupgradeMixedContent" + ] + } + ] + } + ], + "AmpBackgroundTab": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "AmpBackgroundTab", + "enable_features": [ + "CCTBackgroundTab" + ] + } + ] + } + ], + "AndroidAppMenuUiRework": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "RegroupBackwardButton", + "params": { + "action_bar": "backward_button" + }, + "enable_features": [ + "TabbedAppOverflowMenuIcons", + "TabbedAppOverflowMenuRegroup" ] } ] @@ -87,6 +132,222 @@ ] } ], + "AndroidDynamicWideColorGamut": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "DynamicColorGamut" + ] + } + ] + } + ], + "AndroidInProductHelpContextualSearchPromotePanelOpen": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "PromotePanelOpeningExperiment", + "params": { + "availability": ">=14", + "event_1": "name:contextual_search_promote_panel_open_iph_trigger;comparator:<2;window:680;storage:680", + "event_2": "name:contextual_search_panel_opened;comparator:<3;window:90;storage:90", + "event_trigger": "name:contextual_search_promote_panel_open_iph_trigger;comparator:==0;window:90;storage:680", + "event_used": "name:contextual_search_panel_opened_for_entity;comparator:==0;window:90;storage:90", + "session_rate": "<1" + }, + "enable_features": [ + "IPH_ContextualSearchPromotePanelOpen" + ] + } + ] + } + ], + "AndroidInProductHelpContextualSearchPromoteTap": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "PromoteTapExperiment", + "params": { + "availability": ">=14", + "event_1": "name:contextual_search_panel_opened;comparator:>=2;window:90;storage:90", + "event_2": "name:contextual_search_promote_tap_iph_trigger;comparator:<2;window:680;storage:680", + "event_trigger": "name:contextual_search_promote_tap_iph_trigger;comparator:==0;window:90;storage:680", + "event_used": "name:contextual_search_panel_opened_after_tap;comparator:==0;window:30;storage:90", + "session_rate": "<1" + }, + "enable_features": [ + "IPH_ContextualSearchPromoteTap" + ] + } + ] + } + ], + "AndroidInProductHelpContextualSearchWebSearch": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "WebSearchExperiment", + "params": { + "availability": ">=14", + "event_1": "name:web_search_performed;comparator:>=1;window:90;storage:90", + "event_2": "name:contextual_search_web_search_iph_trigger;comparator:<2;window:680;storage:680", + "event_3": "name:contextual_search_panel_opened;comparator:>0;window:680;storage:680", + "event_trigger": "name:contextual_search_web_search_iph_trigger;comparator:==0;window:90;storage:680", + "event_used": "name:contextual_search_panel_opened;comparator:==0;window:30;storage:90", + "session_rate": "<1" + }, + "enable_features": [ + "IPH_ContextualSearchWebSearch" + ] + } + ] + } + ], + "AndroidInProductHelpDownloadInfoBarDownloadContinuing": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Tracking", + "params": { + "availability": "any", + "event_trigger": "name:download_infobar_download_continuing_iph_trigger;comparator:==0;window:90;storage:360", + "event_used": "name:download_home_opened;comparator:any;window:90;storage:360", + "session_rate": "<1" + }, + "enable_features": [ + "IPH_DownloadInfoBarDownloadContinuing" + ] + } + ] + } + ], + "AndroidInProductHelpDownloadInfoBarDownloadsAreFaster": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Tracking", + "params": { + "availability": "any", + "event_trigger": "name:download_infobar_downloads_are_faster_iph_trigger;comparator:==0;window:90;storage:360", + "event_used": "name:download_completed;comparator:any;window:90;storage:360", + "session_rate": "<1" + }, + "enable_features": [ + "IPH_DownloadInfoBarDownloadsAreFaster" + ] + } + ] + } + ], + "AndroidInProductHelpDownloadPage": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Tracking", + "params": { + "availability": ">=14", + "event_1": "name:user_has_seen_dino;comparator:>=1;window:90;storage:360", + "event_trigger": "name:download_page_iph_trigger;comparator:==0;window:90;storage:360", + "event_used": "name:download_page_started;comparator:==0;window:90;storage:360", + "session_rate": "<0" + }, + "enable_features": [ + "IPH_DownloadPage" + ] + } + ] + } + ], + "AndroidInProductHelpDownloadPageScreenshot": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "EnabledTracking", + "params": { + "availability": "any", + "event_screenshot_taken": "name:screenshot_taken_chrome_in_foreground;comparator:>=1;window:90;storage:360", + "event_trigger": "name:download_page_iph_would_have_triggered;comparator:==0;window:90;storage:360", + "event_used": "name:download_page_started;comparator:==0;window:90;storage:360", + "session_rate": "<=1", + "tracking_only": "true" + }, + "enable_features": [ + "IPH_DownloadPageScreenshot" + ] + } + ] + } + ], + "AndroidInProductHelpDownloadSettings": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Tracking", + "params": { + "availability": "any", + "event_settings_accessed": "name:download_settings_access_through_download_home;comparator:==0;window:60;storage:360", + "event_trigger": "name:download_settings_iph_trigger;comparator:any;window:90;storage:360", + "event_used": "name:download_settings_opened;comparator:any;window:90;storage:360", + "session_rate": "<1" + }, + "enable_features": [ + "IPH_DownloadSettings" + ] + } + ] + } + ], + "AndroidInProductHelpManualTranslate": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "params": { + "availability": "any", + "event_trigger": "name:translate_menu_button_iph_triggered;comparator:<2;window:30;storage:360", + "event_trigger_delay": "name:translate_menu_button_iph_triggered;comparator:<1;window:1;storage:360", + "event_used": "name:translate_menu_button_clicked;comparator:==0;window:90;storage:360", + "session_rate": "==0" + }, + "enable_features": [ + "IPH_TranslateMenuButton" + ] + } + ] + } + ], "AndroidInProductHelpReengagementNotification": [ { "platforms": [ @@ -109,6 +370,39 @@ ] } ], + "AndroidInlineUpdateFlowStudy": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled_NoNotification", + "params": { + "flow": "best_effort" + }, + "enable_features": [ + "InlineUpdateFlow" + ] + } + ] + } + ], + "AndroidMediaProcessPriority": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "ModerateBindingInBackground", + "enable_features": [ + "BackgroundMediaRendererHasModerateBinding" + ] + } + ] + } + ], "AndroidPartnerCustomizationPhenotype": [ { "platforms": [ @@ -124,6 +418,22 @@ ] } ], + "AndroidPictureInPictureAPI": [ + { + "platforms": [ + "android", + "android_weblayer" + ], + "experiments": [ + { + "name": "Disabled", + "disable_features": [ + "PictureInPictureAPI" + ] + } + ] + } + ], "AndroidSpellChecker": [ { "platforms": [ @@ -142,6 +452,83 @@ ] } ], + "AndroidSwitchToTab": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "OmniboxTabSwitchSuggestions" + ] + } + ] + } + ], + "AndroidSystemTracing": [ + { + "platforms": [ + "android", + "android_weblayer", + "android_webview" + ], + "experiments": [ + { + "name": "EnablePerfettoSystemTracing", + "enable_features": [ + "EnablePerfettoSystemTracing" + ] + } + ] + } + ], + "AppListLaunchRecorder": [ + { + "platforms": [ + "chromeos" + ], + "experiments": [ + { + "name": "AppListLaunchRecorder", + "enable_features": [ + "EnableAppListLaunchRecording" + ] + } + ] + } + ], + "AppListZeroStateMixedTypesRanker": [ + { + "platforms": [ + "chromeos" + ], + "experiments": [ + { + "name": "Enabled_20191017", + "enable_features": [ + "EnableZeroStateMixedTypesRanker" + ] + } + ] + } + ], + "AssistAutocorrect": [ + { + "platforms": [ + "chromeos" + ], + "experiments": [ + { + "name": "Enabled_20200925", + "enable_features": [ + "AssistAutocorrect" + ] + } + ] + } + ], "AssistPersonalInfo": [ { "platforms": [ @@ -149,9 +536,13 @@ ], "experiments": [ { - "name": "AssistPersonalInfo", + "name": "Enabled_20200917", "enable_features": [ - "AssistPersonalInfo" + "AssistPersonalInfo", + "AssistPersonalInfoAddress", + "AssistPersonalInfoEmail", + "AssistPersonalInfoName", + "AssistPersonalInfoPhoneNumber" ] } ] @@ -172,6 +563,21 @@ ] } ], + "AudioServiceSandboxLinux": [ + { + "platforms": [ + "linux" + ], + "experiments": [ + { + "name": "AudioProcessSandboxLinux", + "enable_features": [ + "AudioServiceSandbox" + ] + } + ] + } + ], "AutoScreenBrightness": [ { "platforms": [ @@ -272,56 +678,11 @@ ] } ], - "AutofillCacheServerCardInfo": [ - { - "platforms": [ - "android", - "android_weblayer", - "android_webview", - "chromeos", - "ios", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "AutofillCacheServerCardInfo" - ] - } - ] - } - ], - "AutofillCompany": [ - { - "platforms": [ - "android", - "android_weblayer", - "chromeos", - "ios", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "RejectBirthyearAndSocialTitleAsCompany_20200210", - "enable_features": [ - "AutofillEnableCompanyName", - "AutofillRejectCompanyBirthyear", - "AutofillRejectCompanySocialTitle" - ] - } - ] - } - ], "AutofillCreditCardAuthentication": [ { "platforms": [ - "mac", - "windows" + "android", + "android_webview" ], "experiments": [ { @@ -339,6 +700,7 @@ "android", "android_webview", "chromeos", + "ios", "linux", "mac", "windows" @@ -493,6 +855,27 @@ ] } ], + "AutofillSkipFillingFieldsWithChangedValues": [ + { + "platforms": [ + "android", + "android_weblayer", + "chromeos", + "ios", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "enabled", + "enable_features": [ + "AutofillSkipFillingFieldsWithChangedValues" + ] + } + ] + } + ], "AutofillSmallFormSupport": [ { "platforms": [ @@ -652,6 +1035,7 @@ "params": { "TimeToLiveInBackForwardCacheInSeconds": "180", "allowed_websites": "https://domain1.org,https://domain2.org", + "enable_same_site": "true", "geolocation_supported": "true", "service_worker_supported": "true" }, @@ -680,21 +1064,6 @@ ] } ], - "BackgroundPurgeOnMac": [ - { - "platforms": [ - "mac" - ], - "experiments": [ - { - "name": "BackgrounPurgeOnMac", - "enable_features": [ - "PurgeRendererMemoryWhenBackgrounded" - ] - } - ] - } - ], "BackgroundSync": [ { "platforms": [ @@ -739,27 +1108,6 @@ ] } ], - "BlinkSchedulerHighPriorityInputOnCompositorThread": [ - { - "platforms": [ - "android", - "android_weblayer", - "chromeos", - "ios", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "BlinkSchedulerHighPriorityInputOnCompositorThread" - ] - } - ] - } - ], "BlinkSchedulerPerAgentSchedulingStudy": [ { "platforms": [ @@ -806,43 +1154,6 @@ ] } ], - "BookmarkInProductHelp": [ - { - "platforms": [ - "linux", - "windows" - ], - "experiments": [ - { - "name": "Enabled_1", - "params": { - "availability": "any", - "event_bookmark_added": "name:bookmark_added;comparator:==0;window:3650;storage:3650", - "event_bookmark_session_time_met": "name:bookmark_session_time_met;comparator:>=1;window:3650;storage:3650", - "event_trigger": "name:bookmark_trigger;comparator:==0;window:3650;storage:3650", - "event_used": "name:bookmark_clicked;comparator:any;window:3650;storage:3650", - "session_rate": "<=3", - "x_promo_string": "IDS_BOOKMARK_PROMO_1" - }, - "enable_features": [ - "IPH_Bookmark" - ] - } - ] - } - ], - "BrowserBlacklist": [ - { - "platforms": [ - "windows" - ], - "experiments": [ - { - "name": "Enabled" - } - ] - } - ], "BrowserJankinessProfiling": [ { "platforms": [ @@ -940,47 +1251,6 @@ ] } ], - "CSSReducedFontLoadingLayoutInvalidations": [ - { - "platforms": [ - "android", - "android_weblayer", - "android_webview", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "CSSReducedFontLoadingLayoutInvalidations" - ] - } - ] - } - ], - "CacheStorageEagerReading": [ - { - "platforms": [ - "windows", - "mac", - "chromeos", - "linux", - "android", - "android_weblayer" - ], - "experiments": [ - { - "name": "Enabled2", - "enable_features": [ - "CacheStorageEagerReading" - ] - } - ] - } - ], "CacheStorageSequenceChromeOS": [ { "platforms": [ @@ -988,12 +1258,12 @@ ], "experiments": [ { - "name": "Enabled8_v4", + "name": "Enabled6_v7", "params": { - "max_shared_ops": "8" + "min": "6" }, "enable_features": [ - "CacheStorageParallelOps", + "BrowserThreadPoolAdjustment", "CacheStorageSequence" ] } @@ -1095,6 +1365,28 @@ ] } ], + "CheckOfflineCapability": [ + { + "platforms": [ + "android", + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "params": { + "timeout_second": "10" + }, + "enable_features": [ + "CheckOfflineCapability" + ] + } + ] + } + ], "ChromeCleanupDistribution": [ { "platforms": [ @@ -1114,31 +1406,54 @@ ] } ], - "ChromeDuet": [ + "ChromeOSAssistantDspHotword": [ { "platforms": [ - "android" + "chromeos" ], "experiments": [ { - "name": "Disabled", - "disable_features": [ - "ChromeDuet" + "name": "Enabled", + "enable_features": [ + "EnableDspHotword" ] } ] } ], - "ChromeOSAssistantDspHotword": [ + "ChromeOSCarolineRegularMemoryPolicy": [ { "platforms": [ "chromeos" ], "experiments": [ { - "name": "Enabled", + "name": "RegularMemoryPolicy", + "params": { + "CrOSExtraFreeMb": "0", + "CrOSRamVsSwapWeight": "4" + }, "enable_features": [ - "EnableDspHotword" + "CrOSTuneExtraFree", + "CrOSTuneRamVsSwapWeight" + ] + } + ] + } + ], + "ChromeOSEmojiSuggestion": [ + { + "platforms": [ + "chromeos" + ], + "experiments": [ + { + "name": "UseMap2_20200922", + "params": { + "map": "2" + }, + "enable_features": [ + "EmojiSuggestAddition" ] } ] @@ -1220,16 +1535,17 @@ ] } ], - "ChromeSmartSelection": [ + "ChromeSharingHubClank": [ { "platforms": [ "android" ], "experiments": [ { - "name": "Enabled_Launch", + "name": "Enabled", "enable_features": [ - "ChromeSmartSelection" + "ChromeShareQRCode", + "ChromeSharingHub" ] } ] @@ -1274,26 +1590,36 @@ ] } ], - "CodeCacheDeletionWithoutFilter": [ + "ClientSideDetectionModel": [ { "platforms": [ - "android", "chromeos", "linux", - "mac", - "windows" + "mac" ], "experiments": [ { - "name": "Enabled", + "name": "EnabledWithVisualModel2", + "params": { + "ModelNum": "6" + }, "enable_features": [ - "CodeCacheDeletionWithoutFilter" + "ClientSideDetectionModel" + ] + }, + { + "name": "EnabledDomOnly", + "params": { + "ModelNum": "4" + }, + "enable_features": [ + "ClientSideDetectionModel" ] } ] } ], - "CompositingOptimizations": [ + "CodeCacheDeletionWithoutFilter": [ { "platforms": [ "android", @@ -1306,76 +1632,81 @@ { "name": "Enabled", "enable_features": [ - "CompositingOptimizations" + "CodeCacheDeletionWithoutFilter" ] } ] } ], - "ContentCapture": [ + "CompositeCrossOriginIframes": [ { "platforms": [ "android", "android_weblayer", - "android_webview" + "android_webview", + "chromeos", + "linux", + "mac", + "windows" ], "experiments": [ { - "name": "ContentCaptureUseTextHolder", - "params": { - "task_long_delay_in_milliseconds": "5000", - "task_short_delay_in_milliseconds": "500", - "use_node_id": "false" - }, + "name": "Enabled", "enable_features": [ - "ContentCapture" + "CompositeCrossOriginIframes" ] } ] } ], - "ContentCaptureUserActivatedDelay": [ + "CompositingOptimizations": [ { "platforms": [ "android", - "android_weblayer", - "android_webview" + "chromeos", + "linux", + "mac", + "windows" ], "experiments": [ { - "name": "ContentCaptureUserActivatedDelay", + "name": "Enabled", "enable_features": [ - "ContentCaptureUserActivatedDelay" + "CompositingOptimizations" ] } ] } ], - "ContentIndexingDownloadHome": [ + "ContentCaptureExperiment": [ { "platforms": [ - "android" + "android", + "android_weblayer", + "android_webview" ], "experiments": [ { - "name": "ContentIndexingDownloadHome", + "name": "EnableExperiment", "enable_features": [ - "ContentIndexingDownloadHome" + "ContentCaptureTriggeringForExperiment" ] } ] } ], - "ContentIndexingNTP": [ + "ContentCaptureUserActivatedDelay": [ { "platforms": [ - "android" + "android", + "android_weblayer", + "android_webview" ], "experiments": [ { - "name": "ContentIndexingNTP", + "name": "ContentCaptureUserActivatedDelay", "enable_features": [ - "ContentIndexingNTP" + "ContentCaptureUserActivatedDelay" ] } ] @@ -1440,24 +1771,11 @@ ] } ], - "CopylessPaste": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "CopylessPaste" - ] - } - ] - } - ], - "CorbAllowlistAlsoAppliesToOorCors": [ + "ConversionMeasurement": [ { "platforms": [ + "android", + "android_webview", "chromeos", "linux", "mac", @@ -1465,9 +1783,9 @@ ], "experiments": [ { - "name": "Enabled", + "name": "ConversionMeasurement", "enable_features": [ - "CorbAllowlistAlsoAppliesToOorCors" + "ConversionMeasurement" ] } ] @@ -1510,31 +1828,31 @@ ] } ], - "CrOSUserSpaceLowMemoryNotification": [ + "CrostiniWebUIUpgrader": [ { "platforms": [ "chromeos" ], "experiments": [ { - "name": "Enabled_20200520", + "name": "Enabled", "enable_features": [ - "CrOSUserSpaceLowMemoryNotification" + "CrostiniWebUIUpgrader" ] } ] } ], - "CrostiniWebUIUpgrader": [ + "CryptAuthV2DeviceSync": [ { "platforms": [ "chromeos" ], "experiments": [ { - "name": "Enabled", + "name": "Enabled_20200427", "enable_features": [ - "CrostiniWebUIUpgrader" + "CryptAuthV2DeviceSync" ] } ] @@ -1645,39 +1963,23 @@ ] } ], - "DecodeJpegToYuv": [ + "DeepScanningForAppUsers": [ { "platforms": [ - "android", - "android_weblayer", - "android_webview", - "chromeos", "linux", "mac", "windows" ], "experiments": [ { - "name": "Experiment", + "name": "Prompt for scanning", "enable_features": [ - "DecodeJpeg420ImagesToYUV" + "SafeBrowsingPromptAppForDeepScanning" ] } ] } ], - "DefaultBrowserInfobar": [ - { - "platforms": [ - "windows" - ], - "experiments": [ - { - "name": "SettingsTextNotNow" - } - ] - } - ], "DefaultEnableOopRasterization": [ { "platforms": [ @@ -1732,6 +2034,31 @@ ] } ], + "DelayCompetingLowPriorityRequests": [ + { + "platforms": [ + "android", + "android_weblayer", + "android_webview", + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "params": { + "priority_threshold": "high", + "until": "first_contentful_paint" + }, + "enable_features": [ + "DelayCompetingLowPriorityRequests" + ] + } + ] + } + ], "DeprecateFtp": [ { "platforms": [ @@ -1799,6 +2126,24 @@ ] } ], + "DesktopTabGroupsCollapse": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "TabGroupsCollapse" + ] + } + ] + } + ], "DesynchronizedScrolling": [ { "platforms": [ @@ -1848,7 +2193,7 @@ ] } ], - "DirectCompositionGpuVSync": [ + "DirectCompositionSoftwareOverlays": [ { "platforms": [ "windows" @@ -1857,14 +2202,13 @@ { "name": "Enabled", "enable_features": [ - "DirectCompositionGpuVSync", - "DirectCompositionPresentationFeedback" + "DirectCompositionSoftwareOverlays" ] } ] } ], - "DirectCompositionSoftwareOverlays": [ + "DirectCompositionUseNV12DecodeSwapChain": [ { "platforms": [ "windows" @@ -1873,22 +2217,22 @@ { "name": "Enabled", "enable_features": [ - "DirectCompositionSoftwareOverlays" + "DirectCompositionUseNV12DecodeSwapChain" ] } ] } ], - "DirectCompositionUseNV12DecodeSwapChain": [ + "DisableForceDeferInChildFrames": [ { "platforms": [ - "windows" + "android" ], "experiments": [ { "name": "Enabled", "enable_features": [ - "DirectCompositionUseNV12DecodeSwapChain" + "DisableForceDeferInChildFrames" ] } ] @@ -1910,25 +2254,6 @@ ] } ], - "DisableLatencyRecoveryDesktop": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "DisabledImplDisabledMain", - "disable_features": [ - "ImplLatencyRecovery", - "MainLatencyRecovery" - ] - } - ] - } - ], "DisableMalwareExtensionsRemotely": [ { "platforms": [ @@ -1987,25 +2312,11 @@ ] } ], - "DnsOverHttps": [ - { - "platforms": [ - "android", - "android_weblayer" - ], - "experiments": [ - { - "name": "Enabled_crbug1006105", - "enable_features": [ - "DnsOverHttps" - ] - } - ] - } - ], "DnsOverHttpsUi": [ { "platforms": [ + "android", + "android_weblayer", "chromeos", "mac", "windows" @@ -2014,6 +2325,7 @@ { "name": "EnabledLaunch", "params": { + "DisabledProviders": "Comcast", "ShowUi": "true" }, "enable_features": [ @@ -2122,12 +2434,35 @@ { "name": "Enabled", "params": { - "BlockExtensionList": "mix_dl_blocked_for_testing", - "SilentBlockExtensionList": "mix_dl_silently_blocked_for_testing", + "BlockExtensionList": "", + "SilentBlockExtensionList": "exe,scr,msi,vb,dmg,pkg,crx,zip,iso,rar,7z,tar,gz,bz2", + "TreatBlockListAsAllowlist": "false", + "TreatSilentBlockListAsAllowlist": "false", + "TreatWarnListAsAllowlist": "true", + "WarnExtensionList": "png,gif,jpg,jpeg,tif,tiff,bmp,svg,webp,ico,mp3,wav,wma,m3u,ogg,oga,aiff,m4a,aac,flac,m4b,webm,mp4,mov,wmv,avi,txt" + }, + "enable_features": [ + "TreatUnsafeDownloadsAsActive" + ] + } + ] + } + ], + "DownloadsAsMixedContentAndroid": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "params": { + "BlockExtensionList": "", + "SilentBlockExtensionList": "exe,scr,msi,vb,dmg,pkg,crx", "TreatBlockListAsAllowlist": "false", "TreatSilentBlockListAsAllowlist": "false", "TreatWarnListAsAllowlist": "false", - "WarnExtensionList": "exe,scr,msi,vb,dmg,pkg,crx" + "WarnExtensionList": "zip,iso,rar,7z,tar,gz,bz2" }, "enable_features": [ "TreatUnsafeDownloadsAsActive" @@ -2146,6 +2481,7 @@ { "name": "Enabled", "enable_features": [ + "DownloadLater", "DownloadsAutoResumptionNative" ] } @@ -2197,17 +2533,16 @@ ] } ], - "EduCoexistence": [ + "EnableAutofillPasswordReauthIOS": [ { "platforms": [ - "chromeos" + "ios" ], "experiments": [ { "name": "Enabled", "enable_features": [ - "EduCoexistence", - "EduCoexistenceConsentLog" + "EnableAutofillPasswordReauthIOS" ] } ] @@ -2274,21 +2609,6 @@ ] } ], - "EnableMediaRouter": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled" - } - ] - } - ], "EnableNewBadgeOnMenuItems": [ { "platforms": [ @@ -2384,27 +2704,6 @@ ] } ], - "ExpectCTReporting": [ - { - "platforms": [ - "android", - "android_weblayer", - "chromeos", - "ios", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "ExpectCTReportingEnabled", - "enable_features": [ - "ExpectCTReporting" - ] - } - ] - } - ], "ExploreSitesDense": [ { "platforms": [ @@ -2425,31 +2724,6 @@ ] } ], - "ExtensionContentVerification": [ - { - "platforms": [ - "windows" - ], - "experiments": [ - { - "name": "EnforceStrict" - } - ] - } - ], - "ExtensionInstallVerification": [ - { - "platforms": [ - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enforce" - } - ] - } - ], "ExtensionSettingsOverriddenDialogs": [ { "platforms": [ @@ -2467,24 +2741,6 @@ ] } ], - "ExtensionsToolbarMenu": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "ExtensionsToolbarMenu" - ] - } - ] - } - ], "FeedActionsUpload": [ { "platforms": [ @@ -2507,26 +2763,6 @@ ] } ], - "FilterAdsOnAbusiveSites": [ - { - "platforms": [ - "android", - "android_weblayer", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "FilterAdsOnAbusiveSites" - ] - } - ] - } - ], "FindInPageBestEffortPriority": [ { "platforms": [ @@ -2567,13 +2803,13 @@ ] } ], - "FontSrcLocalMatching": [ + "FlocIdComputedEventLogging": [ { "platforms": [ "android", - "android_weblayer", "android_webview", "chromeos", + "ios", "linux", "mac", "windows" @@ -2582,7 +2818,7 @@ { "name": "Enabled", "enable_features": [ - "FontSrcLocalMatching" + "FlocIdComputedEventLogging" ] } ] @@ -2690,7 +2926,7 @@ ] } ], - "FullscreenBrowserScope": [ + "FullscreenController": [ { "platforms": [ "ios" @@ -2720,30 +2956,6 @@ ] } ], - "GamepadPollingInterval": [ - { - "platforms": [ - "windows", - "mac", - "chromeos", - "linux", - "android", - "android_weblayer", - "android_webview" - ], - "experiments": [ - { - "name": "EnabledGamepadPolling250Hz", - "params": { - "interval-ms": "4" - }, - "enable_features": [ - "GamepadPollingInterval" - ] - } - ] - } - ], "GestureNavigation": [ { "platforms": [ @@ -2753,9 +2965,6 @@ "experiments": [ { "name": "Enabled", - "params": { - "overscroll_history_navigation_bottom_sheet": "false" - }, "enable_features": [ "OverscrollHistoryNavigation" ] @@ -2827,23 +3036,6 @@ ] } ], - "GpuUseDisplayThreadPriority": [ - { - "platforms": [ - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "BlinkCompositorUseDisplayThreadPriority", - "GpuProcessHighPriorityWin", - "GpuUseDisplayThreadPriority" - ] - } - ] - } - ], "GpuWatchdogV2NewTimeout": [ { "platforms": [ @@ -2888,30 +3080,6 @@ ] } ], - "HTTPDangerWarning": [ - { - "platforms": [ - "android", - "android_weblayer", - "chromeos", - "ios", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "enabled", - "params": { - "treatment": "danger-warning" - }, - "enable_features": [ - "MarkHttpAs" - ] - } - ] - } - ], "HappinessTrackingSurveysForDesktopSettings": [ { "platforms": [ @@ -2967,27 +3135,6 @@ ] } ], - "HeapMojoUseContextObserver": [ - { - "platforms": [ - "android", - "android_webview", - "android_weblayer", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "HeapMojoUseContextObserver" - ] - } - ] - } - ], "HeapProfiling": [ { "platforms": [ @@ -3106,7 +3253,7 @@ ] } ], - "IOSChangeTabSwitcherPosition": [ + "IOSCrashReportBreadcrumbs": [ { "platforms": [ "ios" @@ -3115,13 +3262,13 @@ { "name": "Enabled", "enable_features": [ - "ChangeTabSwitcherPosition" + "LogBreadcrumbs" ] } ] } ], - "IOSCrashReportBreadcrumbs": [ + "IOSDefaultBrowserFullscreenPromo": [ { "platforms": [ "ios" @@ -3129,8 +3276,11 @@ "experiments": [ { "name": "Enabled", + "params": { + "min_os_version": "14.0.1" + }, "enable_features": [ - "LogBreadcrumbs" + "DefaultBrowserFullscreenPromo" ] } ] @@ -3182,7 +3332,7 @@ ] } ], - "IOSLegacyTLSInterstitial": [ + "IOSFullPageScreenshots": [ { "platforms": [ "ios" @@ -3191,13 +3341,13 @@ { "name": "Enabled", "enable_features": [ - "IOSLegacyTLSInterstitial" + "EnableFullPageScreenshot" ] } ] } ], - "IOSLookalikeUrlInterstitial": [ + "IOSLegacyTLSInterstitial": [ { "platforms": [ "ios" @@ -3206,13 +3356,13 @@ { "name": "Enabled", "enable_features": [ - "IOSLookalikeUrlNavigationSuggestionsUI" + "IOSLegacyTLSInterstitial" ] } ] } ], - "IOSMessagesOverlay": [ + "IOSLookalikeInterstitials": [ { "platforms": [ "ios" @@ -3221,13 +3371,13 @@ { "name": "Enabled", "enable_features": [ - "InfobarOverlayUI" + "IOSLookalikeUrlNavigationSuggestionsUI" ] } ] } ], - "IOSPageInfoRefactoring": [ + "IOSMessagesOverlay": [ { "platforms": [ "ios" @@ -3236,13 +3386,13 @@ { "name": "Enabled", "enable_features": [ - "PageInfoRefactoring" + "InfobarOverlayUI" ] } ] } ], - "IOSPreloadDelayWebStateReset": [ + "IOSPageInfoRefactoring": [ { "platforms": [ "ios" @@ -3251,13 +3401,13 @@ { "name": "Enabled", "enable_features": [ - "PreloadDelayWebStateReset" + "PageInfoRefactoring" ] } ] } ], - "IOSReloadSadTab": [ + "IOSPreloadDelayWebStateReset": [ { "platforms": [ "ios" @@ -3266,7 +3416,7 @@ { "name": "Enabled", "enable_features": [ - "ReloadSadTab" + "PreloadDelayWebStateReset" ] } ] @@ -3290,22 +3440,6 @@ ] } ], - "IOSSSLCommittedInterstitials": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "SSLCommittedInterstitials", - "SafeBrowsingAvailableOnIOS" - ] - } - ] - } - ], "Identifiability": [ { "platforms": [ @@ -3353,29 +3487,24 @@ ] } ], - "IncludeBetaForumMenuItem": [ + "IllustratedEmptyStates": [ { "platforms": [ - "chromeos", - "linux", - "mac", - "windows" + "ios" ], "experiments": [ { "name": "Enabled", "enable_features": [ - "IncludeBetaForumMenuItem" + "IllustratedEmptyStates" ] } ] } ], - "IncognitoDynamicQuota": [ + "IncludeBetaForumMenuItem": [ { "platforms": [ - "android", - "android_weblayer", "chromeos", "linux", "mac", @@ -3383,36 +3512,33 @@ ], "experiments": [ { - "name": "WideRange", - "params": { - "IncognitoQuotaRatioLowerBound": "0.1", - "IncognitoQuotaRatioUpperBound": "0.2" - }, + "name": "Enabled", "enable_features": [ - "IncognitoDynamicQuota" + "IncludeBetaForumMenuItem" ] } ] } ], - "IncognitoWindowInProductHelp": [ + "IncognitoDynamicQuota": [ { "platforms": [ + "android", + "android_weblayer", + "chromeos", "linux", + "mac", "windows" ], "experiments": [ { - "name": "Enabled", + "name": "WideRange", "params": { - "availability": "any", - "event_incognito_window_session_time_met": "name:incognito_window_session_time_met;comparator:>=1;window:3650;storage:3650", - "event_trigger": "name:incognito_window_trigger;comparator:==0;window:3650;storage:3650", - "event_used": "name:incognito_window_opened;comparator:==0;window:3650;storage:3650", - "session_rate": "<0" + "IncognitoQuotaRatioLowerBound": "0.1", + "IncognitoQuotaRatioUpperBound": "0.2" }, "enable_features": [ - "IPH_IncognitoWindow" + "IncognitoDynamicQuota" ] } ] @@ -3497,20 +3623,6 @@ ] } ], - "InstanceID": [ - { - "platforms": [ - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled" - } - ] - } - ], "InstantApps": [ { "platforms": [ @@ -3613,6 +3725,21 @@ ] } ], + "InterestFeedV2": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "InterestFeedV2" + ] + } + ] + } + ], "IsolatePasswordSites": [ { "platforms": [ @@ -3751,6 +3878,28 @@ ] } ], + "KeyboardAccessorySwipingIPH": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Swiping_IPH_Enabled", + "params": { + "availability": "any", + "event_trigger": "name:keyboard_accessory_bar_swiping_iph_trigger;comparator:<1;window:90;storage:360", + "event_used": "name:keyboard_accessory_bar_swiped;comparator:<2;window:90;storage:360", + "session_rate": "<1" + }, + "enable_features": [ + "IPH_KeyboardAccessoryBarSwiping" + ], + "disable_features": [] + } + ] + } + ], "LauncherSettingsSearch": [ { "platforms": [ @@ -3807,6 +3956,39 @@ ] } ], + "LiteVideo": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "LiteVideo" + ] + } + ] + } + ], + "LiveCaptionInProductHelp": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "IPH_LiveCaption" + ] + } + ] + } + ], "LoadingPredictorDisregardAlwaysAccessesNetwork": [ { "platforms": [ @@ -3865,6 +4047,25 @@ ] } ], + "LookalikeInterstitialForPunycode": [ + { + "platforms": [ + "android", + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "LookalikeInterstitialForPunycode" + ] + } + ] + } + ], "LookalikeTargetEmbeddingHeuristic": [ { "platforms": [ @@ -3959,21 +4160,6 @@ ] } ], - "MacCustomPaperSize": [ - { - "platforms": [ - "mac" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "EnableCustomMacPaperSizes" - ] - } - ] - } - ], "MacSystemMediaPermissionsInfoUI": [ { "platforms": [ @@ -4141,6 +4327,26 @@ ] } ], + "MixedFormWarnings": [ + { + "platforms": [ + "windows", + "android", + "chromeos", + "linux", + "mac" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "AutofillPreventMixedFormsFilling", + "InsecureFormSubmissionInterstitial" + ] + } + ] + } + ], "MyChromeEverywhere": [ { "platforms": [ @@ -4193,16 +4399,16 @@ ] } ], - "NativeNotifications": [ + "NativeContextMenusStudy": [ { "platforms": [ - "windows" + "ios" ], "experiments": [ { "name": "Enabled", "enable_features": [ - "NativeNotifications" + "EnableNativeContextMenus" ] } ] @@ -4279,46 +4485,6 @@ ] } ], - "NetworkServiceSandbox": [ - { - "platforms": [ - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "NetworkServiceSandbox" - ] - } - ] - } - ], - "NewTabInProductHelp": [ - { - "platforms": [ - "linux", - "windows" - ], - "experiments": [ - { - "name": "Enabled_1", - "params": { - "availability": "any", - "event_new_tab_session_time_met": "name:new_tab_session_time_met;comparator:>=1;window:3650;storage:3650", - "event_omnibox_used": "name:omnibox_used;comparator:>=1;window:3650;storage:3650", - "event_trigger": "name:new_tab_trigger;comparator:==0;window:3650;storage:3650", - "event_used": "name:new_tab_opened;comparator:==0;window:3650;storage:3650", - "session_rate": "<0", - "x_promo_string": "0" - }, - "enable_features": [ - "IPH_NewTab" - ] - } - ] - } - ], "NewUsbBackend": [ { "platforms": [ @@ -4362,6 +4528,7 @@ "name": "Enabled", "enable_features": [ "DisableSearchSuggestChips", + "IframeOneGoogleBar", "NtpWebUI" ] } @@ -4388,25 +4555,6 @@ ] } ], - "OfflineCapabilityCheckForInstallablePrompt": [ - { - "platforms": [ - "android", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "CheckOfflineCapability" - ] - } - ] - } - ], "OfflineIndicator": [ { "platforms": [ @@ -4434,6 +4582,21 @@ ] } ], + "OfflineIndicatorV2": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "OfflineIndicatorV2" + ] + } + ] + } + ], "OfflinePagesCctV2": [ { "platforms": [ @@ -4464,7 +4627,7 @@ ] } ], - "OmniboxAssistantVoiceSearchAndroid": [ + "OmniboxAssistantVoiceSearch": [ { "platforms": [ "android" @@ -4506,12 +4669,14 @@ "name": "DesktopExperiments", "params": { "MaxZeroSuggestMatches": "10", + "OmniboxLocalZeroSuggestAgeThreshold": "7", "OmniboxMaxURLMatches": "7", "UIMaxAutocompleteMatches": "8" }, "enable_features": [ "OmniboxDisplayTitleForCurrentUrl", - "OmniboxDocumentProvider", + "OmniboxLocalZeroSuggestAgeThreshold", + "OmniboxLocalZeroSuggestFrecencyRanking", "OmniboxMaxURLMatches", "OmniboxMaxZeroSuggestMatches", "OmniboxReactiveZeroSuggestionsOnNTPOmnibox", @@ -4543,6 +4708,7 @@ "OmniboxCompactSuggestions", "OmniboxMaxURLMatches", "OmniboxMaxZeroSuggestMatches", + "OmniboxOnFocusSuggestionsContextualWebOnContent", "OmniboxUIExperimentMaxAutocompleteMatches" ] } @@ -4561,13 +4727,58 @@ "ZeroSuggestVariant:8:*": "RemoteNoUrl" }, "enable_features": [ - "OmniboxDisableInstantExtendedLimit", "OmniboxOnFocusSuggestions" ] } ] } ], + "OmniboxButtonRowPedalsDesktop": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "ButtonRowWithPedals", + "enable_features": [ + "OmniboxPedalSuggestions", + "OmniboxSuggestionButtonRow" + ] + }, + { + "name": "ButtonRowWithoutPedals", + "enable_features": [ + "OmniboxSuggestionButtonRow" + ], + "disable_features": [ + "OmniboxPedalSuggestions" + ] + } + ] + } + ], + "OmniboxDocumentProviderNonDogfoodExperiments": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled ", + "enable_features": [ + "OmniboxDocumentProvider" + ] + } + ] + } + ], "OmniboxEnableClipboardProviderImageSuggestions": [ { "platforms": [ @@ -4741,14 +4952,13 @@ ] } ], - "OutOfBlinkCors": [ + "OneCopyRasterBufferPlaybackNormalThreadPriority": [ { "platforms": [ "android", "android_weblayer", "android_webview", "chromeos", - "ios", "linux", "mac", "windows" @@ -4756,39 +4966,39 @@ "experiments": [ { "name": "Enabled", - "params": { - "extra-safelisted-request-headers": "x-googapps-allowed-domains", - "extra-safelisted-request-headers-for-enterprise": "x-googapps-allowed-domains" - }, "enable_features": [ - "ExtraSafelistedRequestHeadersForOutOfBlinkCors", - "OutOfBlinkCors" + "OneCopyRasterBufferPlaybackNormalThreadPriority" ] } ] } ], - "OutOfProcessQuarantine": [ + "OptimizationHintsNoPersistentStore": [ { "platforms": [ - "windows" + "android" ], "experiments": [ { - "name": "Enabled", + "name": "Enabled_20200814", + "params": { + "persist_hints_to_disk": "false" + }, "enable_features": [ - "OutOfProcessQuarantine" + "OptimizationHints" ] } ] } ], - "OverflowIconsForMediaControls": [ + "OutOfBlinkCors": [ { "platforms": [ "android", "android_weblayer", + "android_webview", "chromeos", + "ios", "linux", "mac", "windows" @@ -4796,8 +5006,28 @@ "experiments": [ { "name": "Enabled", + "params": { + "extra-safelisted-request-headers": "x-googapps-allowed-domains", + "extra-safelisted-request-headers-for-enterprise": "x-googapps-allowed-domains" + }, "enable_features": [ - "OverflowIconsForMediaControls" + "ExtraSafelistedRequestHeadersForOutOfBlinkCors", + "OutOfBlinkCors" + ] + } + ] + } + ], + "OutOfProcessQuarantine": [ + { + "platforms": [ + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "OutOfProcessQuarantine" ] } ] @@ -4823,6 +5053,21 @@ ] } ], + "PaintPreviewShowOnStartup": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled_20200820", + "enable_features": [ + "PaintPreviewShowOnStartup" + ] + } + ] + } + ], "ParallelDownloadWithQUICAndHTTP2": [ { "platforms": [ @@ -4867,10 +5112,11 @@ ] } ], - "ParkableStringsToDisk": [ + "PartitionConnectionsByNetworkIsolationKey": [ { "platforms": [ "android", + "android_weblayer", "chromeos", "linux", "mac", @@ -4878,19 +5124,35 @@ ], "experiments": [ { - "name": "ParkableStringsToDisk", + "name": "Enabled4", + "enable_features": [ + "PartitionConnectionsByNetworkIsolationKey", + "PartitionHttpServerPropertiesByNetworkIsolationKey", + "PartitionSSLSessionsByNetworkIsolationKey", + "SplitHostCacheByNetworkIsolationKey" + ] + } + ] + } + ], + "PasswordChangeInSettings": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", "enable_features": [ - "ParkableStringsToDisk" + "PasswordChangeInSettings" ] } ] } ], - "PartitionConnectionsByNetworkIsolationKey": [ + "PasswordCompromisedBubble": [ { "platforms": [ - "android", - "android_weblayer", "chromeos", "linux", "mac", @@ -4898,12 +5160,24 @@ ], "experiments": [ { - "name": "Enabled4", + "name": "Enabled", "enable_features": [ - "PartitionConnectionsByNetworkIsolationKey", - "PartitionHttpServerPropertiesByNetworkIsolationKey", - "PartitionSSLSessionsByNetworkIsolationKey", - "SplitHostCacheByNetworkIsolationKey" + "CompromisedPasswordsReengagement" + ] + } + ] + } + ], + "PasswordScriptsFetching": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "PasswordScriptsFetching" ] } ] @@ -4963,6 +5237,59 @@ ] } ], + "PdfPartialLoading": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Disabled", + "disable_features": [ + "PdfIncrementalLoading", + "PdfPartialLoading" + ] + }, + { + "name": "IncrementalOnly", + "enable_features": [ + "PdfIncrementalLoading" + ], + "disable_features": [ + "PdfPartialLoading" + ] + }, + { + "name": "Enabled", + "enable_features": [ + "PdfIncrementalLoading", + "PdfPartialLoading" + ] + } + ] + } + ], + "PdfViewerUpdate": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "PdfViewerUpdate" + ] + } + ] + } + ], "PerProcessReclaim": [ { "platforms": [ @@ -5005,22 +5332,6 @@ ] } ], - "PermissionPromptUIAndroidModal": [ - { - "platforms": [ - "android", - "android_weblayer" - ], - "experiments": [ - { - "name": "ModalToggleEnabled", - "enable_features": [ - "ModalPermissionPrompts" - ] - } - ] - } - ], "PermissionPromptUICocoa": [ { "platforms": [ @@ -5036,23 +5347,6 @@ ] } ], - "PermissionPromptUIViews": [ - { - "platforms": [ - "chromeos", - "linux", - "windows" - ], - "experiments": [ - { - "name": "BlockPromptsEnabled", - "enable_features": [ - "BlockPromptsIfDismissedOften" - ] - } - ] - } - ], "PersistentHistograms": [ { "platforms": [ @@ -5097,21 +5391,6 @@ ] } ], - "PlayStoreAppSearch": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "PlayStoreAppSearch", - "enable_features": [ - "EnablePlayStoreAppSearch" - ] - } - ] - } - ], "PreconnectOnDidFinishNavigation": [ { "platforms": [ @@ -5152,7 +5431,6 @@ "PreconnectToSearch": [ { "platforms": [ - "android", "linux", "windows", "chromeos", @@ -5186,42 +5464,6 @@ ] } ], - "PreloadMetadataLazyLoad": [ - { - "platforms": [ - "android", - "android_weblayer", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "PreloadMetadataLazyLoad" - ] - } - ] - } - ], - "PreviewsNoScript": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "NoScriptWithWhiteList2", - "enable_features": [ - "NoScriptPreviews", - "OptimizationHints" - ] - } - ] - } - ], "PrivacyElevatedAndroid": [ { "platforms": [ @@ -5365,9 +5607,9 @@ { "name": "Enabled", "params": { - "connection_options": "5RTO", "enable_quic": "true", - "quic_version": "h3-Q050" + "quic_version": "h3-29,h3-Q050", + "retransmittable_on_wire_timeout_milliseconds": "200" }, "enable_features": [ "QuicDoesNotUseFeatures" @@ -5451,6 +5693,23 @@ ] } ], + "QuickAnswersLiveExperiment": [ + { + "platforms": [ + "chromeos" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "QuickAnswers", + "QuickAnswersRichUi", + "QuickAnswersTextAnnotator" + ] + } + ] + } + ], "QuietNotificationPrompts": [ { "platforms": [ @@ -5480,45 +5739,21 @@ ] } ], - "QuotaExpandPoolSize": [ + "ReleaseNotesNotification": [ { "platforms": [ - "android", - "android_weblayer", - "chromeos", - "linux", - "mac", - "windows" + "chromeos" ], "experiments": [ { - "name": "Enabled_Pool_Four_Fifths_Origin_ThreeQuarters_20190710", - "params": { - "PerHostRatio": "0.75", - "PoolSizeRatio": "0.8" - }, + "name": "Enabled", "enable_features": [ - "QuotaExpandPoolSize" + "ReleaseNotesNotification" ] } ] } ], - "ReaderModeUI": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "AdaBoost" - }, - { - "name": "Disabled" - } - ] - } - ], "RenderDocument": [ { "platforms": [ @@ -5637,38 +5872,35 @@ ] } ], - "ReportSaveDataSavings": [ + "ReportPoorConnectivity": [ { "platforms": [ "android" ], "experiments": [ { - "name": "Enabled", + "name": "Enabled_2500_v1", + "params": { + "inactivity_threshold_ms": "2500" + }, "enable_features": [ - "ReportSaveDataSavings" + "PreemptiveMobileNetworkActivation", + "ReportPoorConnectivity" ] } ] } ], - "ReportingAPIAndNetworkErrorLogging": [ + "ReportSaveDataSavings": [ { "platforms": [ - "android", - "android_weblayer", - "chromeos", - "ios", - "linux", - "mac", - "windows" + "android" ], "experiments": [ { - "name": "ReportingAndNELEnabled", + "name": "Enabled", "enable_features": [ - "NetworkErrorLogging", - "Reporting" + "ReportSaveDataSavings" ] } ] @@ -5739,21 +5971,6 @@ ] } ], - "SSLCommonNameMismatchHandling": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled" - } - ] - } - ], "SafeBrowsingAdPopupTrigger": [ { "platforms": [ @@ -5799,78 +6016,18 @@ ] } ], - "SafeBrowsingAdSamplerTrigger": [ - { - "platforms": [ - "android", - "android_weblayer", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "AdSampler_NormalRate", - "params": { - "safe_browsing_ad_sampler_frequency_denominator": "1000", - "trigger_type_and_quota_csv": "2,10" - }, - "enable_features": [ - "SafeBrowsingAdSamplerTrigger", - "SafeBrowsingTriggerThrottlerDailyQuota" - ] - }, - { - "name": "Control", - "disable_features": [ - "SafeBrowsingAdSamplerTrigger", - "SafeBrowsingTriggerThrottlerDailyQuota" - ] - }, - { - "name": "Default" - } - ] - } - ], - "SafeBrowsingAndroid": [ + "SafeBrowsingEnhancedProtectionAndroid": [ { "platforms": [ - "android", - "android_weblayer" - ], - "experiments": [ - { - "name": "Enabled", - "params": { - "enabled": "true", - "types_to_check": "0,1,3,6,7,8,9,10,11,13,14,15" - } - }, - { - "name": "Control" - } - ] - } - ], - "SafeBrowsingDelayedWarnings": [ - { - "platforms": [ - "android", - "chromeos", - "linux", - "mac", - "windows" + "android" ], "experiments": [ { "name": "Enabled", - "params": { - "mouse": "true" - }, "enable_features": [ - "SafeBrowsingDelayedWarnings" + "PrivacyReorderedAndroid", + "SafeBrowsingEnhancedProtection", + "SafeBrowsingSecuritySectionUIAndroid" ] } ] @@ -5947,36 +6104,14 @@ ] } ], - "SafeBrowsingRealTimeUrlLookupEnabled": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "SafeBrowsingRealTimeUrlLookupEnabled" - ] - } - ] - } - ], - "SafeBrowsingRealTimeUrlLookupEnabledAndroid": [ + "SafeBrowsingRealTimeUrlLookupEnabledIOS": [ { "platforms": [ - "android", - "android_weblayer" + "ios" ], "experiments": [ { "name": "Enabled", - "params": { - "SafeBrowsingRealTimeUrlLookupMemoryThresholdMb": "4096" - }, "enable_features": [ "SafeBrowsingRealTimeUrlLookupEnabled" ] @@ -5984,21 +6119,6 @@ ] } ], - "SafeBrowsingRealTimeUrlLookupEnabledAndroidAllDevices": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "SafeBrowsingRealTimeUrlLookupEnabledForAllAndroidDevices" - ] - } - ] - } - ], "SafeBrowsingRealTimeUrlLookupEnabledWithToken": [ { "platforms": [ @@ -6032,57 +6152,18 @@ ] } ], - "SafeBrowsingSuspiciousSiteTrigger": [ + "SafetyAndPasswordCheckAndroid": [ { "platforms": [ - "android", - "android_weblayer", - "chromeos", - "linux", - "mac", - "windows" + "android" ], "experiments": [ { "name": "Enabled", - "params": { - "suspicious_site_trigger_quota": "10" - }, - "enable_features": [ - "SafeBrowsingSuspiciousSiteTriggerQuota" - ] - }, - { - "name": "Control", - "disable_features": [ - "SafeBrowsingSuspiciousSiteTriggerQuota" - ] - } - ] - } - ], - "SafeBrowsingThreatDomDetailsTagAttributes": [ - { - "platforms": [ - "android", - "android_weblayer", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "AdIdentifiers", - "params": { - "tag_attribute_csv": "div,data-google-query-id,div,id,iframe,id" - }, "enable_features": [ - "ThreatDomDetailsTagAttributes" + "PasswordCheck", + "SafetyCheckAndroid" ] - }, - { - "name": "Default" } ] } @@ -6105,53 +6186,22 @@ ] } ], - "SameSiteByDefaultCookies_AndroidAw": [ + "SameSiteCookieMessages": [ { "platforms": [ "android", - "android_weblayer", - "android_webview" - ], - "experiments": [ - { - "name": "LaxByDefaultAndNoneRequiresSecure", - "enable_features": [ - "CookiesWithoutSameSiteMustBeSecure", - "SameSiteByDefaultCookies" - ] - } - ] - } - ], - "SameSiteByDefaultCookies_Linux": [ - { - "platforms": [ - "linux" - ], - "experiments": [ - { - "name": "LaxByDefaultAndNoneRequiresSecure", - "enable_features": [ - "CookiesWithoutSameSiteMustBeSecure", - "SameSiteByDefaultCookies" - ] - } - ] - } - ], - "SameSiteByDefaultCookies_WinMacCros": [ - { - "platforms": [ + "android_webview", "chromeos", + "ios", + "linux", "mac", "windows" ], "experiments": [ { - "name": "LaxByDefaultAndNoneRequiresSecure", + "name": "EnabledLaunch", "enable_features": [ - "CookiesWithoutSameSiteMustBeSecure", - "SameSiteByDefaultCookies" + "CookieDeprecationMessages" ] } ] @@ -6329,16 +6379,25 @@ ] } ], - "Show109ObsoleteInfobar": [ + "SimplifiedUrlDisplay": [ { "platforms": [ - "mac" + "chromeos", + "linux", + "mac", + "windows" ], "experiments": [ { - "name": "Enabled", + "name": "AllDisplayExperimentsEnabled", + "params": { + "enable_keyword_elision": "false" + }, "enable_features": [ - "Show109ObsoleteInfobar" + "OmniboxUIExperimentElideToRegistrableDomain", + "OmniboxUIExperimentHideSteadyStateUrlPathQueryAndRefOnInteraction", + "OmniboxUIExperimentRevealSteadyStateUrlPathQueryAndRefOnHover", + "SafeBrowsingDelayedWarnings" ] } ] @@ -6376,7 +6435,7 @@ ], "experiments": [ { - "name": "Enabled_Stable", + "name": "Experiment_Triple_Key_20201001", "enable_features": [ "AppendFrameOriginToNetworkIsolationKey", "SplitCacheByNetworkIsolationKey", @@ -6386,27 +6445,6 @@ ] } ], - "SqlSkipPreload": [ - { - "platforms": [ - "android", - "android_weblayer", - "chromeos", - "linux", - "mac", - "ios", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "SqlSkipPreload" - ] - } - ] - } - ], "StorageServiceOutOfProcess": [ { "platforms": [ @@ -6491,7 +6529,7 @@ ] } ], - "SyncReuploadBookmarkFullTitles": [ + "SyncTriggerFullKeystoreMigration": [ { "platforms": [ "android", @@ -6505,7 +6543,7 @@ { "name": "Enabled", "enable_features": [ - "SyncReuploadBookmarkFullTitles" + "SyncTriggerFullKeystoreMigration" ] } ] @@ -6763,67 +6801,6 @@ ] } ], - "TextureLayerSkipWaitForActivation": [ - { - "platforms": [ - "android", - "android_webview", - "chromeos", - "ios", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "TextureLayerSkipWaitForActivation", - "enable_features": [ - "TextureLayerSkipWaitForActivation" - ] - } - ] - } - ], - "ThirdPartyModulesBlocking": [ - { - "platforms": [ - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "ThirdPartyModulesBlocking" - ] - } - ] - } - ], - "ThrottleDelayable": [ - { - "platforms": [ - "android", - "android_weblayer", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "MaxDelayable_3g_8_Weight3_20190215", - "params": { - "EffectiveConnectionType1": "3G", - "MaxDelayableRequests1": "8", - "NonDelayableWeight1": "3.0" - }, - "enable_features": [ - "ThrottleDelayable" - ] - } - ] - } - ], "ThrottleInstallingServiceWorker": [ { "platforms": [ @@ -6864,27 +6841,6 @@ ] } ], - "TransferableStreams": [ - { - "platforms": [ - "android", - "android_weblayer", - "android_webview", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "TransferableStreams" - ] - } - ] - } - ], "TranslateCompactUI": [ { "platforms": [ @@ -7344,23 +7300,69 @@ ] } ], - "VisualClientSideDetectionModel": [ + "VideoToolboxVp9Decoding": [ { "platforms": [ - "chromeos", - "linux", - "mac", - "windows" + "mac" ], "experiments": [ { "name": "Enabled", + "enable_features": [ + "VideoToolboxVp9Decoding" + ] + } + ] + } + ], + "VideoTutorialDownloadStudy": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "VideoTutorialDownload", "params": { - "ModelNum": "5" + "availability": ">=0", + "event_1": "name:download_completed;comparator:any;window:30;storage:30", + "event_2": "name:video_tutorial_iph_clicked_download;comparator:any;window:30;storage:30", + "event_3": "name:video_tutorial_iph_dismissed_download;comparator:<10;window:30;storage:30", + "event_trigger": "name:tutorial_download_iph_trigger;comparator:any;window:30;storage:30", + "event_used": "name:download;comparator:any;window:30;storage:30", + "session_rate": "any", + "session_rate_impact": "none" }, "enable_features": [ - "ClientSideDetectionModel" - ] + "IPH_VideoTutorial_Download" + ], + "disable_features": [] + } + ] + } + ], + "VideoTutorialSearchStudy": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "VideoTutorialSearch", + "params": { + "availability": ">=0", + "event_1": "name:search_completed;comparator:any;window:30;storage:30", + "event_2": "name:video_tutorial_iph_clicked_search;comparator:any;window:30;storage:30", + "event_3": "name:video_tutorial_iph_dismissed_search;comparator:<10;window:30;storage:30", + "event_trigger": "name:tutorial_search_iph_trigger;comparator:any;window:30;storage:30", + "event_used": "name:omnibox_search;comparator:any;window:30;storage:30", + "session_rate": "any", + "session_rate_impact": "none" + }, + "enable_features": [ + "IPH_VideoTutorial_Search" + ], + "disable_features": [] } ] } @@ -7433,26 +7435,6 @@ ] } ], - "WebAudioAutoplay": [ - { - "platforms": [ - "android", - "android_weblayer", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "disable_features": [ - "AutoplayIgnoreWebAudio" - ] - } - ] - } - ], "WebBluetoothBlocklist": [ { "platforms": [ @@ -7506,13 +7488,10 @@ ] } ], - "WebPaymentsPerMethodCanMakePaymentQuota": [ + "WebProtectConnectors": [ { "platforms": [ - "android", - "android_weblayer", "chromeos", - "ios", "linux", "mac", "windows" @@ -7521,13 +7500,13 @@ { "name": "Enabled", "enable_features": [ - "WebPaymentsPerMethodCanMakePaymentQuota" + "EnterpriseConnectorsEnabled" ] } ] } ], - "WebProtectConnectors": [ + "WebProtectRealTimeURLCheck": [ { "platforms": [ "chromeos", @@ -7539,7 +7518,7 @@ { "name": "Enabled", "enable_features": [ - "EnterpriseConnectorsEnabled" + "SafeBrowsingRealTimeUrlLookupEnabledForEnterprise" ] } ] @@ -7652,41 +7631,6 @@ ] } ], - "WebRTC-LocalIPPermissionCheck": [ - { - "platforms": [ - "android", - "android_weblayer", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled" - } - ] - } - ], - "WebRTC-NewCpuLoadEstimator": [ - { - "platforms": [ - "windows", - "mac", - "chromeos", - "linux" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "NewEncodeCpuLoadEstimator" - ] - } - ] - } - ], "WebRTC-Pacer-BlockAudio": [ { "platforms": [ @@ -7931,16 +7875,22 @@ ] } ], - "WebViewOriginCheckForStreamReader": [ + "WellKnownChangePassword": [ { "platforms": [ - "android_webview" + "android", + "android_webview", + "chromeos", + "ios", + "linux", + "mac", + "windows" ], "experiments": [ { "name": "Enabled", "enable_features": [ - "WebViewOriginCheckForStreamReader" + "WellKnownChangePassword" ] } ] @@ -7993,25 +7943,5 @@ } ] } - ], - "use-new-media-cache": [ - { - "platforms": [ - "android", - "android_weblayer", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "use-new-media-cache" - ] - } - ] - } ] } |