summaryrefslogtreecommitdiff
path: root/chromium/testing
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2020-11-18 16:35:47 +0100
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2020-11-18 15:45:54 +0000
commit32f5a1c56531e4210bc4cf8d8c7825d66e081888 (patch)
treeeeeec6822f4d738d8454525233fd0e2e3a659e6d /chromium/testing
parent99677208ff3b216fdfec551fbe548da5520cd6fb (diff)
downloadqtwebengine-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')
-rw-r--r--chromium/testing/PRESUBMIT.py3
-rw-r--r--chromium/testing/buildbot/filters/BUILD.gn8
-rw-r--r--chromium/testing/gtest/BUILD.gn9
-rw-r--r--chromium/testing/gtest_ios/unittest-Info.plist2
-rw-r--r--chromium/testing/libfuzzer/fuzzers/BUILD.gn66
-rw-r--r--chromium/testing/libfuzzer/libFuzzer_integration.md4
-rw-r--r--chromium/testing/libfuzzer/proto/json.proto6
-rw-r--r--chromium/testing/libfuzzer/proto/json_proto_converter.cc17
-rw-r--r--chromium/testing/libfuzzer/proto/json_proto_converter.h1
-rwxr-xr-xchromium/testing/merge_scripts/code_coverage/merge_results.py26
-rwxr-xr-xchromium/testing/merge_scripts/code_coverage/merge_results_test.py20
-rw-r--r--chromium/testing/scripts/OWNERS6
-rw-r--r--chromium/testing/scripts/PRESUBMIT.py19
-rwxr-xr-xchromium/testing/scripts/check_static_initializers.py42
-rw-r--r--chromium/testing/scripts/common.py5
-rwxr-xr-xchromium/testing/scripts/get_compile_targets.py4
-rwxr-xr-xchromium/testing/scripts/host_info.py8
-rw-r--r--chromium/testing/scripts/representative_perf_test_data/representatives_frame_times_upper_limit.json12
-rwxr-xr-xchromium/testing/scripts/run_rendering_benchmark_with_gated_performance.py5
-rwxr-xr-xchromium/testing/scripts/run_wpt_tests.py50
-rw-r--r--chromium/testing/scripts/wpt_common.py173
-rwxr-xr-xchromium/testing/scripts/wpt_common_unittest.py370
-rw-r--r--chromium/testing/test.gni40
-rw-r--r--chromium/testing/variations/fieldtrial_testing_config.json2342
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"
- ]
- }
- ]
- }
]
}