summaryrefslogtreecommitdiff
path: root/chromium/tools
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2019-02-13 15:05:36 +0100
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2019-02-14 10:33:47 +0000
commite684a3455bcc29a6e3e66a004e352dea4e1141e7 (patch)
treed55b4003bde34d7d05f558f02cfd82b2a66a7aac /chromium/tools
parent2b94bfe47ccb6c08047959d1c26e392919550e86 (diff)
downloadqtwebengine-chromium-e684a3455bcc29a6e3e66a004e352dea4e1141e7.tar.gz
BASELINE: Update Chromium to 72.0.3626.110 and Ninja to 1.9.0
Change-Id: Ic57220b00ecc929a893c91f5cc552f5d3e99e922 Reviewed-by: Michael BrĂ¼ning <michael.bruning@qt.io>
Diffstat (limited to 'chromium/tools')
-rw-r--r--chromium/tools/android/errorprone_plugin/BUILD.gn1
-rw-r--r--chromium/tools/binary_size/README.md191
-rw-r--r--chromium/tools/binary_size/html_report_faq.md6
-rwxr-xr-xchromium/tools/binary_size/libsupersize/ar.py15
-rw-r--r--chromium/tools/binary_size/libsupersize/archive.py47
-rw-r--r--chromium/tools/binary_size/libsupersize/demangle.py24
-rwxr-xr-xchromium/tools/binary_size/libsupersize/generate_milestone_report.py24
-rwxr-xr-x[-rw-r--r--]chromium/tools/binary_size/libsupersize/linker_map_parser.py128
-rw-r--r--chromium/tools/binary_size/libsupersize/nm.py50
-rwxr-xr-xchromium/tools/binary_size/libsupersize/obj_analyzer.py10
-rw-r--r--chromium/tools/binary_size/libsupersize/static/index.html7
-rw-r--r--chromium/tools/binary_size/libsupersize/static/infocard-ui.js39
-rw-r--r--chromium/tools/binary_size/libsupersize/static/infocard.css6
-rw-r--r--chromium/tools/binary_size/libsupersize/static/options.css2
-rw-r--r--chromium/tools/binary_size/libsupersize/static/shared.js2
-rw-r--r--chromium/tools/binary_size/libsupersize/static/tree-worker.js44
-rw-r--r--chromium/tools/binary_size/libsupersize/static/viewer.html2
-rwxr-xr-xchromium/tools/binary_size/trybot_commit_size_checker.py6
-rwxr-xr-xchromium/tools/bisect-builds.py3
-rw-r--r--chromium/tools/cfi/blacklist.txt11
-rw-r--r--chromium/tools/checkteamtags/owners_file_tags.py2
-rw-r--r--chromium/tools/chrome_proxy/integration_tests/chrome_proxy_measurements.py1
-rw-r--r--chromium/tools/chrome_proxy/webdriver/lite_page.py41
-rw-r--r--chromium/tools/clang/blink_gc_plugin/BadPatternFinder.cpp60
-rw-r--r--chromium/tools/clang/blink_gc_plugin/DiagnosticsReporter.cpp26
-rw-r--r--chromium/tools/clang/blink_gc_plugin/DiagnosticsReporter.h6
-rwxr-xr-xchromium/tools/clang/scripts/package.py159
-rwxr-xr-xchromium/tools/clang/scripts/update.py44
-rwxr-xr-xchromium/tools/code_coverage/coverage.py86
-rwxr-xr-xchromium/tools/code_coverage/coverage_test.py293
-rw-r--r--chromium/tools/code_coverage/coverage_utils.py7
-rwxr-xr-xchromium/tools/code_coverage/update_clang_coverage_tools.py99
-rw-r--r--chromium/tools/cygprofile/cluster.py275
-rwxr-xr-xchromium/tools/cygprofile/cluster_unittest.py136
-rwxr-xr-xchromium/tools/cygprofile/compare_orderfiles.py42
-rw-r--r--chromium/tools/cygprofile/cygprofile_utils.py4
-rwxr-xr-xchromium/tools/cygprofile/orderfile_generator_backend.py56
-rwxr-xr-xchromium/tools/cygprofile/phased_orderfile.py326
-rwxr-xr-xchromium/tools/cygprofile/phased_orderfile_unittest.py122
-rwxr-xr-xchromium/tools/cygprofile/process_profiles.py68
-rwxr-xr-xchromium/tools/cygprofile/process_profiles_unittest.py35
-rwxr-xr-xchromium/tools/cygprofile/profile_android_startup.py23
-rw-r--r--chromium/tools/cygprofile/symbol_extractor.py115
-rwxr-xr-xchromium/tools/cygprofile/symbol_extractor_unittest.py65
-rwxr-xr-xchromium/tools/determinism/compare_build_artifacts.py92
-rw-r--r--chromium/tools/determinism/deterministic_build_whitelist.pyl156
-rw-r--r--chromium/tools/fuchsia/fidlgen_js/BUILD.gn60
-rw-r--r--chromium/tools/fuchsia/fidlgen_js/DEPS4
-rw-r--r--chromium/tools/fuchsia/fidlgen_js/fidl.py549
-rwxr-xr-xchromium/tools/fuchsia/fidlgen_js/gen.py320
-rw-r--r--chromium/tools/fuchsia/fidlgen_js/runtime/fidl.mjs136
-rw-r--r--chromium/tools/fuchsia/fidlgen_js/runtime/zircon.cc178
-rw-r--r--chromium/tools/fuchsia/fidlgen_js/runtime/zircon.h17
-rw-r--r--chromium/tools/fuchsia/fidlgen_js/third_party/__init__.py0
-rw-r--r--chromium/tools/fuchsia/fidlgen_js/third_party/enum34/LICENSE32
-rw-r--r--chromium/tools/fuchsia/fidlgen_js/third_party/enum34/README.chromium15
-rw-r--r--chromium/tools/fuchsia/fidlgen_js/third_party/enum34/__init__.py837
-rw-r--r--chromium/tools/gdb/gdb_chrome.py31
-rw-r--r--chromium/tools/gdb/gdbinit2
-rw-r--r--chromium/tools/gdb/util/class_methods.py185
-rwxr-xr-xchromium/tools/gen_keyboard_overlay_data/gen_keyboard_overlay_data.py515
-rwxr-xr-xchromium/tools/generate_stubs/generate_stubs.py133
-rwxr-xr-xchromium/tools/generate_stubs/generate_stubs_unittest.py19
-rwxr-xr-xchromium/tools/gn/bootstrap/bootstrap.py6
-rwxr-xr-xchromium/tools/grit/grit.py2
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/__init__.py1
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/clique.py1
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/constants.py1
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/exception.py1
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/extern/BogoFP.py1
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/extern/FP.py1
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/extern/tclib.py1
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/format/__init__.py1
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/format/android_xml.py1
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/format/c_format.py1
-rw-r--r--chromium/tools/grit/grit/format/chrome_messages_json.py18
-rwxr-xr-xchromium/tools/grit/grit/format/chrome_messages_json_unittest.py32
-rwxr-xr-xchromium/tools/grit/grit/format/gen_predetermined_ids_unittest.py4
-rwxr-xr-xchromium/tools/grit/grit/format/html_inline.py16
-rwxr-xr-xchromium/tools/grit/grit/format/html_inline_unittest.py2
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/format/js_map_format.py1
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/format/policy_templates_json.py1
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/format/rc.py1
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/format/rc_header.py1
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/format/resource_map.py14
-rwxr-xr-xchromium/tools/grit/grit/format/resource_map_unittest.py2
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/gather/__init__.py1
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/gather/admin_template.py1
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/gather/chrome_html.py1
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/gather/chrome_scaled_image.py1
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/gather/interface.py1
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/gather/json_loader.py1
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/gather/policy_json.py1
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/gather/rc.py1
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/gather/regexp.py1
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/gather/skeleton_gatherer.py1
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/gather/tr_html.py1
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/gather/txt.py1
-rwxr-xr-xchromium/tools/grit/grit/grit_runner.py107
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/lazy_re.py1
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/node/__init__.py1
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/node/base.py1
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/node/custom/__init__.py1
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/node/custom/filename.py1
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/node/empty.py1
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/node/include.py5
-rwxr-xr-xchromium/tools/grit/grit/node/include_unittest.py16
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/node/io.py1
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/node/mapping.py1
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/node/message.py1
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/node/misc.py1
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/node/structure.py1
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/node/variant.py1
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/pseudo.py1
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/pseudo_rtl.py1
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/scons.py1
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/shortcuts.py1
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/tclib.py1
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/tool/__init__.py1
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/tool/android2grd.py8
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/tool/build.py14
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/tool/buildinfo.py18
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/tool/count.py18
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/tool/diff_structures.py7
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/tool/interface.py5
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/tool/menu_from_parts.py1
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/tool/newgrd.py18
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/tool/postprocess_interface.py1
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/tool/preprocess_interface.py1
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/tool/rc2grd.py13
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/tool/resize.py7
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/tool/test.py1
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/tool/transl2tc.py4
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/tool/unit.py18
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/tool/xmb.py7
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/util.py1
-rw-r--r--[-rwxr-xr-x]chromium/tools/grit/grit/xtb_reader.py1
-rwxr-xr-xchromium/tools/grit/grit_info.py4
-rw-r--r--chromium/tools/grit/grit_rule.gni6
-rw-r--r--chromium/tools/gritsettings/resource_ids150
-rw-r--r--chromium/tools/gritsettings/startup_resources_win.txt425
-rw-r--r--chromium/tools/gritsettings/translation_expectations.pyl24
-rwxr-xr-xchromium/tools/idl_parser/idl_parser.py8
-rw-r--r--chromium/tools/idl_parser/test_parser/typedef_web.idl15
-rw-r--r--chromium/tools/ipc_fuzzer/fuzzer/fuzzer.cc9
-rw-r--r--chromium/tools/ipc_fuzzer/scripts/play_testcase.py1
-rw-r--r--chromium/tools/ipc_fuzzer/scripts/utils.py13
-rw-r--r--chromium/tools/json_schema_compiler/feature_compiler.py4
-rw-r--r--chromium/tools/json_schema_compiler/js_util.py2
-rwxr-xr-xchromium/tools/licenses.py14
-rwxr-xr-xchromium/tools/make-gtest-filter.py67
-rwxr-xr-xchromium/tools/mb/mb.py14
-rw-r--r--chromium/tools/mb/mb_config.pyl154
-rwxr-xr-xchromium/tools/mb/mb_unittest.py22
-rw-r--r--chromium/tools/metrics/actions/README.md5
-rw-r--r--chromium/tools/metrics/actions/actions.xml527
-rw-r--r--chromium/tools/metrics/histograms/README.md4
-rw-r--r--chromium/tools/metrics/histograms/enums.xml1734
-rw-r--r--chromium/tools/metrics/histograms/histograms.xml6560
-rwxr-xr-xchromium/tools/metrics/histograms/update_feature_policy_enum.py3
-rw-r--r--chromium/tools/metrics/ukm/ukm.xml547
-rw-r--r--chromium/tools/metrics/ukm/ukm_model.py43
-rw-r--r--chromium/tools/perf/chrome_telemetry_build/BUILD.gn10
-rw-r--r--chromium/tools/polymer/OWNERS1
-rwxr-xr-xchromium/tools/real_world_impact/real_world_impact.py3
-rwxr-xr-xchromium/tools/roll_swiftshader.py4
-rw-r--r--chromium/tools/strict_enum_value_checker/OWNERS2
-rw-r--r--chromium/tools/traffic_annotation/auditor/BUILD.gn4
-rw-r--r--chromium/tools/traffic_annotation/auditor/auditor_result.cc17
-rw-r--r--chromium/tools/traffic_annotation/auditor/auditor_result.h5
-rw-r--r--chromium/tools/traffic_annotation/auditor/traffic_annotation_auditor.cc14
-rw-r--r--chromium/tools/traffic_annotation/auditor/traffic_annotation_auditor.h2
-rw-r--r--chromium/tools/traffic_annotation/auditor/traffic_annotation_auditor_unittest.cc3
-rw-r--r--chromium/tools/traffic_annotation/auditor/traffic_annotation_exporter.cc57
-rw-r--r--chromium/tools/traffic_annotation/auditor/traffic_annotation_exporter.h20
-rw-r--r--chromium/tools/traffic_annotation/bin/OWNERS1
-rw-r--r--chromium/tools/traffic_annotation/bin/README.md4
-rw-r--r--chromium/tools/traffic_annotation/bin/linux64/traffic_annotation_auditor.sha12
-rw-r--r--chromium/tools/traffic_annotation/bin/win32/traffic_annotation_auditor.exe.sha12
-rwxr-xr-xchromium/tools/traffic_annotation/scripts/check_annotations.py56
-rw-r--r--chromium/tools/traffic_annotation/summary/annotations.xml23
-rw-r--r--chromium/tools/ubsan/vptr_blacklist.txt5
-rw-r--r--chromium/tools/vim/chromium.ycm_extra_conf.py4
-rw-r--r--chromium/tools/vscode/OWNERS1
-rw-r--r--chromium/tools/vscode/README.md5
-rw-r--r--chromium/tools/vscode/keybindings.json550
-rw-r--r--chromium/tools/vscode/launch.json573
-rw-r--r--chromium/tools/vscode/settings.json571
-rw-r--r--chromium/tools/vscode/tasks.json5141
-rw-r--r--chromium/tools/web_dev_style/OWNERS1
-rw-r--r--chromium/tools/win/DebugVisualizers/webkit.natvis50
191 files changed, 12219 insertions, 5168 deletions
diff --git a/chromium/tools/android/errorprone_plugin/BUILD.gn b/chromium/tools/android/errorprone_plugin/BUILD.gn
index 437eb497fb9..d28a2cf850c 100644
--- a/chromium/tools/android/errorprone_plugin/BUILD.gn
+++ b/chromium/tools/android/errorprone_plugin/BUILD.gn
@@ -16,6 +16,7 @@ java_library("errorprone_plugin_java") {
# Necessary to avoid dependency cycle
enable_errorprone = false
+ enable_bytecode_rewriter = false
# So that we don't need to inject emma runtime into the compiler's classpath.
emma_never_instrument = true
diff --git a/chromium/tools/binary_size/README.md b/chromium/tools/binary_size/README.md
index 2d4ed3e38d5..f0448982927 100644
--- a/chromium/tools/binary_size/README.md
+++ b/chromium/tools/binary_size/README.md
@@ -10,63 +10,40 @@ There is also a dedicated mailing-list for binary size discussions:
* https://groups.google.com/a/chromium.org/forum/#!forum/binary-size
-Bugs are tracked here:
+Bugs and feature requests are tracked in crbug under:
* [Tools > BinarySize](https://bugs.chromium.org/p/chromium/issues/list?q=component%3ATools>BinarySize)
-[TOC]
-
-## diagnose_bloat.py
-
-Determine the cause of binary size bloat between two commits. Works for Android
-and Linux (although Linux symbol diffs have issues, as noted below).
-
-### How it Works
-
-1. Builds multiple revisions using release GN args.
- * Default is to build just two revisions (before & after commit)
- * Rather than building, can fetch build artifacts and `.size` files from perf
- bots (`--cloud`)
-1. Measures all outputs using `resource_size.py` and `supersize`.
-1. Saves & displays a breakdown of the difference in binary sizes.
-
-### Example Usage
+Per-Milestone Binary Size Breakdowns:
-``` bash
-# Build and diff monochrome_public_apk HEAD^ and HEAD.
-tools/binary_size/diagnose_bloat.py HEAD -v
+ * https://storage.googleapis.com/chrome-supersize/index.html
-# Build and diff monochrome_apk HEAD^ and HEAD.
-tools/binary_size/diagnose_bloat.py HEAD --enable-chrome-android-internal -v
+[TOC]
-# Build and diff monochrome_public_apk HEAD^ and HEAD without is_official_build.
-tools/binary_size/diagnose_bloat.py HEAD --gn-args="is_official_build=false" -v
+## Binary Size Trybot (android-binary-size)
-# Diff BEFORE_REV and AFTER_REV using build artifacts downloaded from perf bots.
-tools/binary_size/diagnose_bloat.py AFTER_REV --reference-rev BEFORE_REV --cloud -v
+ * Introduced October 2018 as a mandatory CQ bot.
+ * Example builds: https://ci.chromium.org/p/chromium/builders/luci.chromium.try/android-binary-size
+ * Provides size per-patch size analysis via `resource_sizes.py` and SuperSize.
+ * Forces a `Binary-Size:` footer to be present for commits that are larger than
+ 16KiB (autorollers exempted).
-# Fetch a .size, libmonochrome.so, and MonochromePublic.apk from perf bots (Googlers only):
-tools/binary_size/diagnose_bloat.py AFTER_REV --cloud --unstripped --single
+## resource_sizes.py
-# Build and diff all contiguous revs in range BEFORE_REV..AFTER_REV for src/v8.
-tools/binary_size/diagnose_bloat.py AFTER_REV --reference-rev BEFORE_REV --subrepo v8 --all -v
+ * [//build/android/resource_sizes.py](https://cs.chromium.org/chromium/src/build/android/resource_sizes.py)
+ * Able to run on an `.apk` without having the build directory available.
+ * Reports the size metrics captured by our perf builders. Viewable at
+ [chromeperf](https://chromeperf.appspot.com/report) under
+ `Test suite="resource_sizes ($APK)"`.
+ * Metrics reported by this tool are described in
+ [//docs/speed/binary_size/metrics.md](../../docs/speed/binary_size/metrics.md).
-# Display detailed usage info (there are many options).
-tools/binary_size/diagnose_bloat.py -h
-```
+## SuperSize
-## Super Size
-
-Collect, archive, and analyze Chrome's binary size.
+Collects, archives, and analyzes Chrome's binary size.
Supports Android and Linux (although Linux
[has issues](https://bugs.chromium.org/p/chromium/issues/detail?id=717550)).
-`.size` files are archived on perf builders so that regressions can be quickly
-analyzed (via `diagnose_bloat.py --cloud`).
-
-`.size` files are archived on official builders so that symbols can be diff'ed
-between milestones.
-
### Technical Details
#### What's in a .size File?
@@ -82,18 +59,22 @@ between milestones.
#### How are Symbols Collected?
-##### Native Symbols
+##### Native Symbols (.text, .rodata, .data, .data.rel.ro, .bss)
-1. Symbol list is Extracted from linker `.map` file.
+1. Symbol list is extracted from linker `.map` file.
* Map files contain some unique pieces of information compared to `nm`
output, such as `** merge strings` entries, and some unnamed symbols
(which although unnamed, contain the `.o` path).
+ * Generated in `is_official_build=true` builds if `generate_linker_map` is
+ true. In official builds on Android generate_linker_map is true by default.
1. `.o` files are mapped to `.cc` files by parsing `.ninja` files.
* This means that `.h` files are never listed as sources. No information
about inlined symbols is gathered.
1. `** merge strings` symbols are further broken down into individual string
literal symbols. This is done by reading string literals from `.o` files, and
then searching for them within the `** merge strings` sections.
+ * For LLD with [ThinLTO](https://clang.llvm.org/docs/ThinLTO.html),
+ `llvm-bcanalyzer` is used to extract string literals.
1. Symbol aliases:
* Aliases have the same address and size, but report their `.pss` as
`.size / .num_aliases`.
@@ -102,13 +83,16 @@ between milestones.
* Type 2: Same names, different paths. Caused by inline functions defined in
`.h` files.
* These are collected by running `nm` on each `.o` file.
+ * For LLD with ThinLTO, `llvm-bcanalyzer` is used to process `.o` files,
+ which are actually LLVM Bitcode files.
* Normally represented using one alias per path, but are sometimes
collapsed into a single symbol with a path of `{shared}/$SYMBOL_COUNT`.
- This collapsing is done only for symbols owned by a large number of paths.
+ This collapsing is done only for symbols owned by a large number of
+ paths.
* Type 3: String literals that are de-duped at link-time.
* These are found as part of the string literal extraction process.
-##### Pak Symbols
+##### Pak Symbols (.pak.nontranslated and .pak.translations)
1. Grit creates a mapping between numeric id and textual id for grd files.
* A side effect of pak whitelist generation is a mapping of `.cc` to numeric
@@ -121,7 +105,7 @@ between milestones.
* This is the case of pak files for translations.
* The original grd file paths are stored in the full name of each symbol.
-##### Dex Symbols
+##### Dex Symbols (.dex and .dex.method)
1. Java compile targets create a mapping between java fully qualified names
(FQN) and source files.
@@ -138,15 +122,32 @@ between milestones.
file to find associated source files for the dex entries found in all of the
apk's `.dex` files.
-##### Common Symbols
-
-1. Shared bytes are stored in symbols with names starting with `Overhead: `.
- * Elf file, dex file, pak files, apk files all have compression overhead.
- * These are treated as padding-only symbols to de-emphasize them in diffs.
- * It is expected that these symbols have minor fluctuations since they are
- affected by changes in compressibility.
-1. All other files in an apk have one symbol each under the `.other` section
- with their corresponding path in the apk as their associated path.
+##### Other Symbols (.other)
+
+All files in an apk that are not broken down into sub-entries are tracked by a
+symbol within the `.other` section.
+
+##### Overhead Symbols
+
+Overhead symbols track bytes that are generally unactionable. They are recorded
+as `size=0, padding=$size` (padding-only symbols) to de-emphasize them in diffs.
+
+* **\*\* symbol gap**: A gap between symbols that is larger than what could be
+ due to alignment.
+* **Overhead: ELF file**: `elf_file_size - sum(elf_sections)`.
+ * Captures bytes taken up by ELF headers and section alignment.
+* **Overhead: APK file**: `apk_file_size - sum(compressed_file_sizes)`
+ * Captures bytes taken up by `.zip` metadata and zipalign padding.
+* **Overhead: ${NAME}.pak**: `pak_file_size - sum(pak_entries)`
+* **Overhead: Pak compression artifacts**:
+ `compressed_size_of_paks - sum(pak_entries)`
+ * It would be possible to correctly attribute compressed size to pak symbols,
+ but doing so makes diffs very noisy (any change in compression ratio causes
+ every symbol to change by a small amount). Instead, SuperSize uses a
+ hard-coded compression ratio for compressed .pak symbols, and captures any
+ remainder in this overhead symbol.
+ * TODO([crbug/894320](https://crbug.com/894320)): Improve how compression is
+ tracked.
#### What Other Processing Happens?
@@ -168,6 +169,11 @@ between milestones.
* `template_name`: Name without argument parameters.
* `full_name`: Name with all parameters.
+1. Special cases:
+ * LLVM function outlining creates many OUTLINED_FUNCTION_* symbols. These
+ renamed to '** outlined functions' or '** outlined functions * (count)',
+ and are deduped so an address can have at most one such symbol.
+
1. Clustering:
* Compiler & linker optimizations can cause symbols to be broken into
multiple parts to become candidates for inlining ("partial inlining").
@@ -190,10 +196,9 @@ between milestones.
* The constant is chosen so that it minimizes overall discrepancy with
actual total compressed sizes.
-#### Is Super Size a Generic Tool?
+#### Is SuperSize a Generic Tool?
-No. Most of the logic is would could work for any ELF executable. However, being
-a generic tool is not a goal. Some examples of existing Chrome-specific logic:
+No. Some examples of why it's Chrome-specific:
* Assumes `.ninja` build rules are available.
* Heuristic for locating `.so` given `.apk`.
@@ -229,10 +234,9 @@ tools/binary_size/supersize archive chrome.size --elf-file out/Release/chrome -v
### Usage: html_report
-Creates an interactive size breakdown (by source path) as a stand-alone html
-report.
-
-Example output: https://notwoods.github.io/chrome-supersize-reports/
+Creates an `.ndjson` (newline-delimited JSON) file that the
+[SuperSize viewer](https://storage.googleapis.com/chrome-supersize/viewer.html)
+is able to load.
Example Usage:
@@ -249,8 +253,8 @@ tools/binary_size/supersize html_report after.size --diff-with before.size --rep
### Usage: start_server
-Locally view the data file generated by `html_report`, by starting a web server
-that links to a data file.
+Locally view the `.ndjson` file generated by `html_report`, by starting a web
+server that links to the file.
Example Usage:
@@ -264,7 +268,8 @@ tools/binary_size/supersize start_server report.ndjson -a localhost -p 8080
### Usage: diff
-A convenience command equivalent to: `console before.size after.size --query='Print(Diff(size_info1, size_info2))'`
+A convenience command equivalent to:
+`console before.size after.size --query='Print(Diff(size_info1, size_info2))'`
Example Usage:
@@ -309,13 +314,47 @@ Example session:
>>> Print((t[1] for t in ReadStringLiterals(syms)), to_file='strings.txt')
```
-### Roadmap
+## diagnose_bloat.py
+
+Determines the cause of binary size bloat between two commits. Works for Android
+and Linux (although Linux symbol diffs have issues, as noted below).
+
+### How it Works
+
+1. Builds multiple revisions using release GN args.
+ * Default is to build just two revisions (before & after commit)
+ * Rather than building, can fetch build artifacts and `.size` files from perf
+ bots (`--cloud`)
+1. Measures all outputs using `resource_size.py` and `supersize`.
+1. Saves & displays a breakdown of the difference in binary sizes.
+
+### Example Usage
+
+``` bash
+# Build and diff monochrome_public_apk HEAD^ and HEAD.
+tools/binary_size/diagnose_bloat.py HEAD -v
+
+# Build and diff monochrome_apk HEAD^ and HEAD.
+tools/binary_size/diagnose_bloat.py HEAD --enable-chrome-android-internal -v
+
+# Build and diff monochrome_public_apk HEAD^ and HEAD without is_official_build.
+tools/binary_size/diagnose_bloat.py HEAD --gn-args="is_official_build=false" -v
+
+# Diff BEFORE_REV and AFTER_REV using build artifacts downloaded from perf bots.
+tools/binary_size/diagnose_bloat.py AFTER_REV --reference-rev BEFORE_REV --cloud -v
+
+# Fetch a .size, libmonochrome.so, and MonochromePublic.apk from perf bots (Googlers only):
+tools/binary_size/diagnose_bloat.py AFTER_REV --cloud --unstripped --single
+
+# Build and diff all contiguous revs in range BEFORE_REV..AFTER_REV for src/v8.
+tools/binary_size/diagnose_bloat.py AFTER_REV --reference-rev BEFORE_REV --subrepo v8 --all -v
+
+# Display detailed usage info (there are many options).
+tools/binary_size/diagnose_bloat.py -h
+```
+
+## Other Size Tools
-1. [Better Linux support](https://bugs.chromium.org/p/chromium/issues/detail?id=717550) (clang+lld+lto vs gcc+gold).
-1. More `console` features:
- * Add `SplitByName()` - Like `GroupByName()`, but recursive.
- * A canned query, that does what ShowGlobals does (as described in [Windows Binary Sizes](https://www.chromium.org/developers/windows-binary-sizes)).
-1. Integrate with `resource_sizes.py` so that it tracks size of major
- components separately: chrome vs blink vs skia vs v8.
-1. Add dependency graph info, perhaps just on a per-file basis.
- * No idea how to do this, but Windows can do it via `tools\win\linker_verbose_tracking.py`
+### Bloaty McBloatface
+ * https://github.com/google/bloaty
+ * Our usage tracked in [crbug/698733](https://crbug.com/698733)
diff --git a/chromium/tools/binary_size/html_report_faq.md b/chromium/tools/binary_size/html_report_faq.md
index 9cd321e6524..bc9b25c3600 100644
--- a/chromium/tools/binary_size/html_report_faq.md
+++ b/chromium/tools/binary_size/html_report_faq.md
@@ -50,9 +50,9 @@ _*_ | Expand all sibling containers of the current node.
## Symbols
-### What are "Other entries"?
-The symbol type "Other entries" refers to symbols that don't fall in one of the
-defined symbol categories. This includes images and `.bin` files.
+A description of how size information is collected, including descriptions of
+each symbol type, is detailed in
+[README.md](README.md#how-are-symbols-collected).
### What are "Other small" symbols for?
To reduce the size of the generated data file, small symbols are omitted by
diff --git a/chromium/tools/binary_size/libsupersize/ar.py b/chromium/tools/binary_size/libsupersize/ar.py
index 40713cf81c3..9337577c371 100755
--- a/chromium/tools/binary_size/libsupersize/ar.py
+++ b/chromium/tools/binary_size/libsupersize/ar.py
@@ -20,6 +20,11 @@ def IsThinArchive(path):
def CreateThinObjectPath(archive_path, subpath):
"""Given the .a path and .o subpath, returns the .o path."""
+ # |subpath| is path complete under Gold, and incomplete under LLD. Check its
+ # prefix to test completeness, and if not, use |archive_path| to supply the
+ # required prefix.
+ if subpath.startswith('obj/'):
+ return subpath
# .o subpaths in thin archives are relative to the directory of the .a.
parent_path = os.path.dirname(archive_path)
return os.path.normpath(os.path.join(parent_path, subpath))
@@ -106,16 +111,6 @@ def ExpandThinArchives(paths, output_directory):
return expanded_paths, thin_paths
-def CreateThinObjectPath(archive_path, subpath):
- # |subpath| is path complete under Gold, and incomplete under LLD. Check its
- # prefix to test completeness, and if not, use |archive_path| to supply the
- # required prefix.
- if subpath.startswith('obj/'):
- return subpath
- parent_path = os.path.dirname(archive_path)
- return os.path.normpath(os.path.join(parent_path, subpath))
-
-
def main():
parser = argparse.ArgumentParser()
parser.add_argument('ar_path')
diff --git a/chromium/tools/binary_size/libsupersize/archive.py b/chromium/tools/binary_size/libsupersize/archive.py
index ce8f8263627..73e7569b973 100644
--- a/chromium/tools/binary_size/libsupersize/archive.py
+++ b/chromium/tools/binary_size/libsupersize/archive.py
@@ -376,8 +376,13 @@ def _AssignNmAliasPathsAndCreatePathAliases(raw_symbols, object_paths_by_name):
for symbol in raw_symbols:
ret.append(symbol)
full_name = symbol.full_name
- if (symbol.IsBss() or
- symbol.IsStringLiteral() or
+ # Don't skip if symbol.IsBss(). This is needed for LLD-LTO to work, since
+ # .bss object_path data are unavailable for linker_map_parser, and need to
+ # be extracted here. For regular LLD flow, incorrect aliased symbols can
+ # arise. But that's a lesser evil compared to having LLD-LTO .bss missing
+ # object_path and source_path.
+ # TODO(huangs): Fix aliased symbols for the LLD case.
+ if (symbol.IsStringLiteral() or
not full_name or
full_name[0] in '*.' or # e.g. ** merge symbols, .Lswitch.table
full_name == 'startup'):
@@ -596,7 +601,7 @@ def _FindComponentRoot(start_path, cache, knobs):
SRC_ROOT.
cache: Dict of OWNERS paths. Used instead of filesystem if paths are present
in the dict.
- knobs: Instance of SectionSizeKnobs. Tunable knobs and options.
+ knobs: Instance of SectionSizeKnobs with tunable knobs and options.
Returns:
COMPONENT belonging to |start_path|, or empty string if not found.
@@ -636,6 +641,22 @@ def _PopulateComponents(raw_symbols, knobs):
symbol.component = _FindComponentRoot(folder_path, seen_paths, knobs)
+def _UpdateSymbolNamesFromNm(raw_symbols, names_by_address):
+ """Updates raw_symbols names with extra information from nm."""
+ logging.debug('Update symbol names')
+ # linker_map_parser extracts '** outlined function' without knowing how many
+ # such symbols exist at each address. nm has this information, and stores the
+ # value as, e.g., '** outlined function * 5'. Copy the information over.
+ for s in raw_symbols:
+ if s.full_name.startswith('** outlined function'):
+ name_list = names_by_address.get(s.address)
+ if name_list:
+ for name in name_list:
+ if name.startswith('** outlined function'):
+ s.full_name = name
+ break
+
+
def _AddNmAliases(raw_symbols, names_by_address):
"""Adds symbols that were removed by identical code folding."""
# Step 1: Create list of (index_of_symbol, name_list).
@@ -715,7 +736,7 @@ def CreateMetadata(map_path, elf_path, apk_path, tool_prefix, output_directory,
apk_path: Path to the .apk file to measure.
tool_prefix: Prefix for c++filt & nm.
output_directory: Build output directory.
- linker_name: 'gold', 'lld_v#' (# is a number), 'lld-lto_v#', or None.
+ linker_name: A coded linker name (see linker_map_parser.py).
Returns:
None if |elf_path| is not supplied. Otherwise returns dict mapping string
@@ -840,6 +861,8 @@ def _ParseElfInfo(map_path, elf_path, tool_prefix, track_string_literals,
'Adding symbols removed by identical code folding (as reported by nm)')
# This normally does not block (it's finished by this time).
names_by_address = elf_nm_result.get()
+ _UpdateSymbolNamesFromNm(raw_symbols, names_by_address)
+
raw_symbols = _AddNmAliases(raw_symbols, names_by_address)
if outdir_context:
@@ -848,7 +871,6 @@ def _ParseElfInfo(map_path, elf_path, tool_prefix, track_string_literals,
'Fetched path information for %d symbols from %d files',
len(object_paths_by_name),
len(outdir_context.elf_object_paths) + len(missed_object_paths))
-
# For aliases, this provides path information where there wasn't any.
logging.info('Creating aliases for symbols shared by multiple paths')
raw_symbols = _AssignNmAliasPathsAndCreatePathAliases(
@@ -1172,13 +1194,20 @@ def CreateSectionSizesAndSymbols(
Args:
map_path: Path to the linker .map(.gz) file to parse.
- elf_path: Path to the corresponding unstripped ELF file. Used to find symbol
- aliases and inlined functions. Can be None.
tool_prefix: Prefix for c++filt & nm (required).
output_directory: Build output directory. If None, source_paths and symbol
alias information will not be recorded.
+ elf_path: Path to the corresponding unstripped ELF file. Used to find symbol
+ aliases and inlined functions. Can be None.
+ apk_path: Path to the .apk file to measure.
track_string_literals: Whether to break down "** merge string" sections into
smaller symbols (requires output_directory).
+ metadata: Metadata dict from CreateMetadata().
+ apk_so_path: Path to an .so file within an APK file.
+ pak_files: List of paths to .pak files.
+ pak_info_file: Path to a .pak.info file.
+ linker_name: A coded linker name (see linker_map_parser.py).
+ knobs: Instance of SectionSizeKnobs with tunable knobs and options.
Returns:
A tuple of (section_sizes, raw_symbols).
@@ -1478,8 +1507,8 @@ def DeduceMainPaths(args, parser):
map_path += '.gz'
if not os.path.exists(map_path):
parser.error('Could not find .map(.gz)? file. Ensure you have built with '
- 'is_official_build=true, or use --map-file to point me a '
- 'linker map file.')
+ 'is_official_build=true and generate_linker_map=true, or '
+ 'use --map-file to point me a linker map file.')
linker_name = _DetectLinkerName(map_path)
logging.info('Linker name: %s' % linker_name)
diff --git a/chromium/tools/binary_size/libsupersize/demangle.py b/chromium/tools/binary_size/libsupersize/demangle.py
index 748bf7b3b9d..40ba4879181 100644
--- a/chromium/tools/binary_size/libsupersize/demangle.py
+++ b/chromium/tools/binary_size/libsupersize/demangle.py
@@ -6,17 +6,39 @@
import collections
import logging
+import re
import subprocess
import path_util
+_PROMOTED_GLOBAL_NAME_DEMANGLED_PATTERN = re.compile(
+ r' \((\.\d+)?\.llvm\.\d+\)$')
+_PROMOTED_GLOBAL_NAME_RAW_PATTERN = re.compile(r'(\.\d+)?\.llvm\.\d+$')
+
+def StripLlvmPromotedGlobalNames(name):
+ """Strips LLVM promoted global names suffix, and returns the result.
+
+ LLVM can promote global names by adding the suffix '.llvm.1234', or
+ '.1.llvm.1234', where the last numeric suffix is a hash. If demangle is
+ sucessful, the suffix transforms into, e.g., ' (.llvm.1234)' or
+ ' (.1.llvm.1234)'. Otherwise the suffix is left as is. This function strips
+ the suffix to prevent it from intefering with name comparison.
+ """
+ llvm_pos = name.find('.llvm.')
+ if llvm_pos < 0:
+ return name # Handles most cases.
+ if name.endswith(')'):
+ return _PROMOTED_GLOBAL_NAME_DEMANGLED_PATTERN.sub('', name)
+ return _PROMOTED_GLOBAL_NAME_RAW_PATTERN.sub('', name)
+
+
def _DemangleNames(names, tool_prefix):
"""Uses c++filt to demangle a list of names."""
proc = subprocess.Popen([path_util.GetCppFiltPath(tool_prefix)],
stdin=subprocess.PIPE, stdout=subprocess.PIPE)
stdout = proc.communicate('\n'.join(names))[0]
assert proc.returncode == 0
- ret = stdout.splitlines()
+ ret = [StripLlvmPromotedGlobalNames(line) for line in stdout.splitlines()]
if logging.getLogger().isEnabledFor(logging.INFO):
fail_count = sum(1 for s in ret if s.startswith('_Z'))
if fail_count:
diff --git a/chromium/tools/binary_size/libsupersize/generate_milestone_report.py b/chromium/tools/binary_size/libsupersize/generate_milestone_report.py
index 02b060838f6..79d8516ab4c 100755
--- a/chromium/tools/binary_size/libsupersize/generate_milestone_report.py
+++ b/chromium/tools/binary_size/libsupersize/generate_milestone_report.py
@@ -46,11 +46,10 @@ REPORT_URL_TEMPLATE_VIEW = '{cpu}/{apk}/report_{version2}.ndjson'
REPORT_URL_TEMPLATE_COMP = '{cpu}/{apk}/report_{version1}_{version2}.ndjson'
DESIRED_CPUS = ['arm', 'arm_64']
-# TODO: Add AndroidWebview.apk
-DESIRED_APKS = ['Monochrome.apk', 'ChromeModern.apk']
+DESIRED_APKS = ['Monochrome.apk', 'ChromeModern.apk', 'AndroidWebview.apk']
# Versions are manually gathered from
# https://omahaproxy.appspot.com/history?os=android&channel=stable
-DESIRED_VERSION = [
+DESIRED_VERSIONS = [
'60.0.3112.116',
'61.0.3163.98',
'62.0.3202.84',
@@ -62,9 +61,17 @@ DESIRED_VERSION = [
'68.0.3440.85',
'69.0.3497.91',
'70.0.3538.17', # Beta
+ '71.0.3574.0', # Dev
]
+def _GetDesiredVersions(apk):
+ if apk != 'AndroidWebview.apk':
+ return DESIRED_VERSIONS
+ # Webview .size files do not exist before M71.
+ return [v for v in DESIRED_VERSIONS if int(v.split('.')[0]) >= 71]
+
+
class Report(collections.namedtuple(
'Report', ['cpu', 'apk', 'version1', 'version2'])):
PUSH_URL_REGEX_VIEW = re.compile((PUSH_URL + REPORT_URL_TEMPLATE_VIEW).format(
@@ -122,10 +129,11 @@ def _SizeInfoFromGsPath(path):
def _PossibleReportFiles():
cpu_and_apk_combos = list(itertools.product(DESIRED_CPUS, DESIRED_APKS))
for cpu, apk in cpu_and_apk_combos:
- for version2 in DESIRED_VERSION:
+ apk_versions = _GetDesiredVersions(apk)
+ for version2 in apk_versions:
yield Report(cpu, apk, None, version2)
- for i, version1 in enumerate(DESIRED_VERSION):
- for version2 in DESIRED_VERSION[i + 1:]:
+ for i, version1 in enumerate(apk_versions):
+ for version2 in apk_versions[i + 1:]:
yield Report(cpu, apk, version1, version2)
@@ -136,7 +144,7 @@ def _SetPushedReports(directory):
'pushed': {
'cpu': DESIRED_CPUS,
'apk': DESIRED_APKS,
- 'version': DESIRED_VERSION,
+ 'version': DESIRED_VERSIONS,
},
}
json.dump(pushed_reports_obj, out_file)
@@ -171,7 +179,7 @@ def _BuildReport(paths):
if before_size_path:
size_info = diff.Diff(_SizeInfoFromGsPath(before_size_path), size_info)
- html_report.BuildReportFromSizeInfo(outpath, size_info, all_symbols=True)
+ html_report.BuildReportFromSizeInfo(outpath, size_info, all_symbols=False)
return outpath
diff --git a/chromium/tools/binary_size/libsupersize/linker_map_parser.py b/chromium/tools/binary_size/libsupersize/linker_map_parser.py
index 679b90124c4..4efdc6886da 100644..100755
--- a/chromium/tools/binary_size/libsupersize/linker_map_parser.py
+++ b/chromium/tools/binary_size/libsupersize/linker_map_parser.py
@@ -1,11 +1,33 @@
+#!/usr/bin/env python
# Copyright 2017 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.
+"""Parser for linker map files.
+
+The format of a linker map file depends on the linker that generates it. This
+file uses "coded linker name" to identify formats and variants:
+
+ 'gold': The gold linker (usage is being deprecated by Chrome).
+ 'lld_v0': LLD linker (no LTO), old format.
+ 'lld-lto_v0': LLD linker with ThinLTO, old format.
+ 'lld_v1': LLD linker (no LTO), new format.
+ 'lld-lto_v1': LLD linker with ThinLTO, new format.
+
+The |linker_name| parameter in various functions must take one of the above
+coded linker name values.
+"""
+
+from __future__ import print_function
+
+import argparse
+import code
import logging
import os
import re
+import readline
+import demangle
import models
# About linker maps:
@@ -98,21 +120,23 @@ class MapFileParserGold(object):
# 0x00290711 base::AutoLock::~AutoLock()
# 0x00290711 base::AutoLock::~AutoLock()
# .text._ZNK5blink15LayoutBlockFlow31mustSeparateMarginAfterForChildERK...
-# 0xffffffffffffffff 0x46 obj/...
-# 0x006808e1 blink::LayoutBlockFlow::...
+# 0xffffffffffffffff 0x46 obj/...
+# 0x006808e1 blink::LayoutBlockFlow::...
+# .text.OUTLINED_FUNCTION_0
+# 0x002a2000 0x20 obj/net/net/tag.o
# .bss
# .bss._ZGVZN11GrProcessor11initClassIDI10LightingFPEEvvE8kClassID
-# 0x02d4b294 0x4 obj/skia/skia/SkLightingShader.o
-# 0x02d4b294 guard variable for void GrProcessor::initClassID
+# 0x02d4b294 0x4 obj/skia/skia/SkLightingShader.o
+# 0x02d4b294 guard variable for void GrProcessor::initClassID
# .data 0x0028c600 0x22d3468
# .data.rel.ro._ZTVN3gvr7android19ScopedJavaGlobalRefIP12_jfloatArrayEE
-# 0x02d1e668 0x10 ../../third_party/.../libfoo.a(bar.o)
-# 0x02d1e668 vtable for gvr::android::GlobalRef<_jfloatArray*>
+# 0x02d1e668 0x10 ../../third_party/.../libfoo.a(bar.o)
+# 0x02d1e668 vtable for gvr::android::GlobalRef<_jfloatArray*>
# ** merge strings
# 0x0255fb00 0x1f2424
# ** merge constants
# 0x0255fb00 0x8
-# ** common 0x02db5700 0x13ab48
+# ** common 0x02db5700 0x13ab48
syms = self._symbols
while True:
line = self._SkipToLineWithPrefix('.')
@@ -242,6 +266,10 @@ class MapFileParserGold(object):
if mangled_name and (not name or mangled_name.startswith('_Z') or
'._Z' in mangled_name):
full_name = mangled_name
+ # Handle outlined functions. These are actual LLD features, but we
+ # handle them here for Gold to facilitate testing.
+ if full_name and full_name.startswith('OUTLINED_FUNCTION_'):
+ full_name = '** outlined function'
sym = models.Symbol(section_name, size, address=address,
full_name=full_name, object_path=path)
@@ -310,6 +338,15 @@ class MapFileParserLld(object):
# 194 194 13 1 <internal>:(.interp)
# 1a8 1a8 22d8 4 .ARM.exidx
# 1b0 1b0 8 4 obj/sandbox/syscall.o:(.ARM.exidx)
+# 400 400 123400 64 .text
+# 600 600 14 4 obj/...:(.text.OUTLINED_FUNCTION_0)
+# 600 600 0 1 $x.3
+# 600 600 14 1 OUTLINED_FUNCTION_0
+# 123800 123800 20000 256 .rodata
+# 123800 123800 4 4 ...:o:(.rodata._ZN3fooE.llvm.1234)
+# 123800 123800 4 1 foo (.llvm.1234)
+# 123804 123804 4 4 ...:o:(.rodata.bar.llvm.1234)
+# 123804 123804 4 1 bar.llvm.1234
# Older format:
# Address Size Align Out In Symbol
# 00000000002002a8 000000000000001c 1 .interp
@@ -333,6 +370,7 @@ class MapFileParserLld(object):
sym_maker = _SymbolMaker()
cur_section = None
cur_section_is_useful = None
+ promoted_name_count = 0
for line in lines:
m = pattern.match(line)
@@ -345,7 +383,8 @@ class MapFileParserLld(object):
if indent_size == 0:
sym_maker.Flush()
- self._section_sizes[tok] = size
+ if not tok.startswith('PROVIDE_HIDDEN'):
+ self._section_sizes[tok] = size
cur_section = tok
# E.g., Want to convert "(.text._name)" -> "_name" later.
mangled_start_idx = len(cur_section) + 2
@@ -374,21 +413,36 @@ class MapFileParserLld(object):
else:
# e.g. <internal>:(.text.thunk)
sym_maker.cur_sym.full_name = '** ' + mangled_name
- elif cur_obj == 'lto.tmp' or cur_obj.startswith('thinlto-cache'):
+ elif cur_obj == 'lto.tmp' or 'thinlto-cache' in cur_obj:
pass
else:
sym_maker.cur_sym.object_path = cur_obj
elif indent_size == 16:
+ # Ignore anything with '.L_MergedGlobals' prefix. This seems to only
+ # happen for ARM (32-bit) builds.
+ if tok.startswith('.L_MergedGlobals'):
+ continue
# If multiple entries exist, take the first on that reports a size.
# Zero-length symbols look like "$t.4", "$d.5".
if size and not sym_maker.cur_sym.full_name:
+ # Outlined functions have names like OUTLINED_FUNCTION_0, which can
+ # appear 1000+ time that can cause false aliasing. We treat these as
+ # special cases by designating them as a placeholder symbols and
+ # renaming them to '** outlined function'.
+ if tok.startswith('OUTLINED_FUNCTION_'):
+ tok = '** outlined function'
+ stripped_tok = demangle.StripLlvmPromotedGlobalNames(tok)
+ if len(tok) != len(stripped_tok):
+ promoted_name_count += 1
+ tok = stripped_tok
sym_maker.cur_sym.full_name = tok
-
else:
logging.error('Problem line: %r', line)
sym_maker.Flush()
+ if promoted_name_count:
+ logging.info('Found %d promoted global names', promoted_name_count)
return self._section_sizes, sym_maker.syms
@@ -426,7 +480,15 @@ def _DetectLto(lines):
def DetectLinkerNameFromMapFile(lines):
- """Scans linker map file, and returns a coded linker name."""
+ """Heuristic linker detection from partial scan of the linker map.
+
+ Args:
+ lines: Iterable of lines from the linker map.
+
+ Returns:
+ A coded linker name.
+
+ """
first_line = next(lines)
if first_line.startswith('Address'):
@@ -442,12 +504,13 @@ def DetectLinkerNameFromMapFile(lines):
class MapFileParser(object):
- """Parses a linker map file, with heuristic linker detection."""
+ """Parses a linker map file generated from a specified linker."""
def Parse(self, linker_name, lines):
"""Parses a linker map file.
Args:
- lines: Iterable of lines.
+ linker_name: Coded linker name to specify a linker.
+ lines: Iterable of lines from the linker map.
Returns:
A tuple of (section_sizes, symbols).
@@ -467,3 +530,42 @@ class MapFileParser(object):
# Thin archives' paths will get fixed in |ar.CreateThinObjectPath|.
sym.object_path = os.path.normpath(sym.object_path)
return (section_sizes, syms)
+
+
+def main():
+ parser = argparse.ArgumentParser()
+ parser.add_argument('linker_file', type=os.path.realpath)
+ parser.add_argument(
+ '-v',
+ '--verbose',
+ default=0,
+ action='count',
+ help='Verbose level (multiple times for more)')
+ args = parser.parse_args()
+
+ logging.basicConfig(
+ level=logging.WARNING - args.verbose * 10,
+ format='%(levelname).1s %(relativeCreated)6d %(message)s')
+
+ with open(args.linker_file, 'r') as map_file:
+ linker_name = DetectLinkerNameFromMapFile(map_file)
+ print('Linker type: %s' % linker_name)
+
+ with open(args.linker_file, 'r') as map_file:
+ section_sizes, syms = MapFileParser().Parse(linker_name, map_file)
+
+ # Enter interactive shell.
+ readline.parse_and_bind('tab: complete')
+ variables = {'section_sizes': section_sizes, 'syms': syms}
+ banner_lines = [
+ '*' * 80,
+ 'Variables:',
+ ' section_sizes: Map from section to sizes.',
+ ' syms: Raw symbols parsed from the linker map file.',
+ '*' * 80,
+ ]
+ code.InteractiveConsole(variables).interact('\n'.join(banner_lines))
+
+
+if __name__ == '__main__':
+ main()
diff --git a/chromium/tools/binary_size/libsupersize/nm.py b/chromium/tools/binary_size/libsupersize/nm.py
index 466ade1830f..3c71c5344a5 100644
--- a/chromium/tools/binary_size/libsupersize/nm.py
+++ b/chromium/tools/binary_size/libsupersize/nm.py
@@ -76,12 +76,28 @@ def CollectAliasesByAddress(elf_path, tool_prefix):
# Constructors often show up twice, so use sets to ensure no duplicates.
names_by_address = collections.defaultdict(set)
+ # Many OUTLINED_FUNCTION_* entries can coexist on a single address, possibly
+ # mixed with regular symbols. However, naively keeping these is bad because:
+ # * OUTLINED_FUNCTION_* can have many duplicates. Keeping them would cause
+ # false associations downstream, when looking up object_paths from names.
+ # * For addresses with multiple OUTLINED_FUNCTION_* entries, we can't get the
+ # associated object_path (exception: the one entry in the .map file, for LLD
+ # without ThinLTO). So keeping copies around is rather useless.
+ # Our solution is to merge OUTLINED_FUNCTION_* entries at the same address
+ # into a single symbol. We'd also like to keep track of the number of copies
+ # (although it will not be used to compute PSS computation). This is done by
+ # writing the count in the name, e.g., '** outlined function * 5'.
+ num_outlined_functions_at_address = collections.Counter()
+
# About 60mb of output, but piping takes ~30s, and loading it into RAM
# directly takes 3s.
args = [path_util.GetNmPath(tool_prefix), '--no-sort', '--defined-only',
elf_path]
- output = subprocess.check_output(args)
- for line in output.splitlines():
+ proc = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ # llvm-nm may write to stderr. Discard to denoise.
+ stdout, _ = proc.communicate()
+ assert proc.returncode == 0
+ for line in stdout.splitlines():
space_idx = line.find(' ')
address_str = line[:space_idx]
section = line[space_idx + 1]
@@ -97,7 +113,15 @@ def CollectAliasesByAddress(elf_path, tool_prefix):
address = int(address_str, 16)
if not address:
continue
- names_by_address[address].add(mangled_name)
+ if mangled_name.startswith('OUTLINED_FUNCTION_'):
+ num_outlined_functions_at_address[address] += 1
+ else:
+ names_by_address[address].add(mangled_name)
+
+ # Need to add before demangling because |names_by_address| changes type.
+ for address, count in num_outlined_functions_at_address.iteritems():
+ name = '** outlined function' + (' * %d' % count if count > 1 else '')
+ names_by_address[address].add(name)
# Demangle all names.
names_by_address = demangle.DemangleSetsInDicts(names_by_address, tool_prefix)
@@ -105,7 +129,12 @@ def CollectAliasesByAddress(elf_path, tool_prefix):
# Since this is run in a separate process, minimize data passing by returning
# only aliased symbols.
# Also: Sort to ensure stable ordering.
- return {k: sorted(v) for k, v in names_by_address.iteritems() if len(v) > 1}
+ return {
+ addr: sorted(names)
+ for addr, names in names_by_address.iteritems()
+ if len(names) > 1 or num_outlined_functions_at_address.get(addr, 0) > 1
+ }
+
def _CollectAliasesByAddressAsyncHelper(elf_path, tool_prefix):
@@ -159,8 +188,14 @@ def RunNmOnIntermediates(target, tool_prefix, output_directory):
args.append(target)
else:
args.extend(target)
- output = subprocess.check_output(args, cwd=output_directory)
- lines = output.splitlines()
+ proc = subprocess.Popen(args, cwd=output_directory, stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE)
+ # llvm-nm can print 'no symbols' to stderr. Capture and count the number of
+ # lines, to be returned to the caller.
+ stdout, stderr = proc.communicate()
+ assert proc.returncode == 0
+ num_no_symbols = len(stderr.splitlines())
+ lines = stdout.splitlines()
# Empty .a file has no output.
if not lines:
return concurrent.EMPTY_ENCODED_DICT, concurrent.EMPTY_ENCODED_DICT
@@ -191,4 +226,5 @@ def RunNmOnIntermediates(target, tool_prefix, output_directory):
# TODO(agrieve): We could use path indices as keys rather than paths to cut
# down on marshalling overhead.
return (concurrent.EncodeDictOfLists(symbol_names_by_path),
- concurrent.EncodeDictOfLists(string_addresses_by_path))
+ concurrent.EncodeDictOfLists(string_addresses_by_path),
+ num_no_symbols)
diff --git a/chromium/tools/binary_size/libsupersize/obj_analyzer.py b/chromium/tools/binary_size/libsupersize/obj_analyzer.py
index 93c82eb3ed5..e53ae283a8f 100755
--- a/chromium/tools/binary_size/libsupersize/obj_analyzer.py
+++ b/chromium/tools/binary_size/libsupersize/obj_analyzer.py
@@ -146,7 +146,9 @@ class _BulkObjectFileAnalyzerWorker(object):
# Names are still mangled.
all_paths_by_name = self._paths_by_name
- for encoded_syms, encoded_strs in results:
+ total_no_symbols = 0
+ for encoded_syms, encoded_strs, num_no_symbols in results:
+ total_no_symbols += num_no_symbols
symbol_names_by_path = concurrent.DecodeDictOfLists(encoded_syms)
for path, names in symbol_names_by_path.iteritems():
for name in names:
@@ -154,6 +156,8 @@ class _BulkObjectFileAnalyzerWorker(object):
if encoded_strs != concurrent.EMPTY_ENCODED_DICT:
self._encoded_string_addresses_by_path_chunks.append(encoded_strs)
+ if total_no_symbols:
+ logging.warn('nm found no symbols in %d objects.', total_no_symbols)
def _RunLlvmBcAnalyzer(self, paths_by_type):
"""Calls llvm-bcanalyzer to extract string data (for LLD-LTO)."""
@@ -353,7 +357,9 @@ class _BulkObjectFileAnalyzerSlave(object):
if message[0] == _MSG_ANALYZE_PATHS:
assert self._allow_analyze_paths, (
'Cannot call AnalyzePaths() after AnalyzeStringLiterals()s.')
- paths = message[1].split('\x01')
+ # Invert '\x01'.join(paths), favoring paths = [] over paths = [''] since
+ # the latter is less likely to happen.
+ paths = message[1].split('\x01') if message[1] else []
self._job_queue.put(lambda: self._worker_analyzer.AnalyzePaths(paths))
elif message[0] == _MSG_SORT_PATHS:
assert self._allow_analyze_paths, (
diff --git a/chromium/tools/binary_size/libsupersize/static/index.html b/chromium/tools/binary_size/libsupersize/static/index.html
index aae68e1d4ff..b2ddbbe5491 100644
--- a/chromium/tools/binary_size/libsupersize/static/index.html
+++ b/chromium/tools/binary_size/libsupersize/static/index.html
@@ -123,7 +123,10 @@ function isGreaterOrEqual(v1, v2) {
form.addEventListener('submit', event => {
event.preventDefault();
const dataUrl = getDataUrl();
- window.open(`viewer.html?load_url=milestones/${dataUrl}`);
+ // Exclude unwind_cfi via a filter as a work-around for it being included
+ // in the size data. It's a file that exists in dev but not beta/stable.
+ window.open(`viewer.html?load_url=milestones/${dataUrl}` +
+ `&exclude=assets%2Funwind_cfi`);
});
})();
</script>
@@ -167,6 +170,8 @@ function isGreaterOrEqual(v1, v2) {
Open report
</button>
<div class="msg-bad-compare">Version 1 must be older than Version 2</div>
+ <div style="margin:20pt 0 10pt"><b>Note:</b> AndroidWebview.apk size information exists only for M71 and above.</div>
+ <div>To upload your own .ndjson file, use the upload button within <a href="viewer.html">the viewer</a>.</div>
</form>
</body>
diff --git a/chromium/tools/binary_size/libsupersize/static/infocard-ui.js b/chromium/tools/binary_size/libsupersize/static/infocard-ui.js
index fd2f1ece5cb..98deefab468 100644
--- a/chromium/tools/binary_size/libsupersize/static/infocard-ui.js
+++ b/chromium/tools/binary_size/libsupersize/static/infocard-ui.js
@@ -74,21 +74,32 @@ const displayInfocard = (() => {
}
/**
- * Updates the path text, which shows the idPath of the node but highlights
- * the symbol name portion using bold text.
+ * Updates the path text, which shows the idPath for directory nodes, and
+ * srcPath / component for symbol nodes.
* @param {TreeNode} node
*/
- _updatePath(node) {
- const path = node.idPath.slice(0, node.shortNameIndex);
- const boldShortName = dom.textElement(
- 'span',
- shortName(node),
- 'symbol-name-info'
- );
- const pathFragment = dom.createFragment([
- document.createTextNode(path),
- boldShortName,
- ]);
+ _updatePaths(node) {
+ let pathFragment;
+ if (node.srcPath) {
+ pathFragment = dom.createFragment([
+ dom.textElement('span', 'Path: ', 'symbol-name-info'),
+ document.createTextNode(node.srcPath),
+ document.createElement('br'),
+ dom.textElement('span', 'Component: ', 'symbol-name-info'),
+ document.createTextNode(node.componet || '(No component)'),
+ ]);
+ } else {
+ const path = node.idPath.slice(0, node.shortNameIndex);
+ const boldShortName = dom.textElement(
+ 'span',
+ shortName(node),
+ 'symbol-name-info'
+ );
+ pathFragment = dom.createFragment([
+ document.createTextNode(path),
+ boldShortName,
+ ]);
+ }
// Update DOM
dom.replace(this._pathInfo, pathFragment);
@@ -145,7 +156,7 @@ const displayInfocard = (() => {
// Update DOM
this._updateSize(node);
- this._updatePath(node);
+ this._updatePaths(node);
if (type !== this._lastType) {
// No need to create a new icon if it is identical.
const icon = getIconTemplate(type);
diff --git a/chromium/tools/binary_size/libsupersize/static/infocard.css b/chromium/tools/binary_size/libsupersize/static/infocard.css
index 2c7a84a25eb..385cdf4ae08 100644
--- a/chromium/tools/binary_size/libsupersize/static/infocard.css
+++ b/chromium/tools/binary_size/libsupersize/static/infocard.css
@@ -9,7 +9,7 @@
left: 8px;
right: 8px;
margin: 0 auto;
- max-width: 512px;
+ max-width: 720px;
max-height: 50vh;
overflow-y: auto;
background: white;
@@ -94,6 +94,7 @@
border-top: 1px solid #dadce0;
padding-top: 8px;
clear: right;
+ text-align: left;
}
.canvas-overlay {
position: absolute;
@@ -108,9 +109,6 @@
min-width: 100%;
font-size: 14px;
}
-.type-breakdown-info th {
- text-align: left;
-}
.type-breakdown-info th[scope='row'] {
font-weight: normal;
}
diff --git a/chromium/tools/binary_size/libsupersize/static/options.css b/chromium/tools/binary_size/libsupersize/static/options.css
index d0fc637571b..184d57ff0a7 100644
--- a/chromium/tools/binary_size/libsupersize/static/options.css
+++ b/chromium/tools/binary_size/libsupersize/static/options.css
@@ -4,7 +4,7 @@
/** Body modifier class, indicates when options should be visible. */
.show-options {
- grid-template-columns: auto 256px;
+ grid-template-columns: auto 306px;
}
.show-options .options {
diff --git a/chromium/tools/binary_size/libsupersize/static/shared.js b/chromium/tools/binary_size/libsupersize/static/shared.js
index b0c084d7a73..53ea8d52cdf 100644
--- a/chromium/tools/binary_size/libsupersize/static/shared.js
+++ b/chromium/tools/binary_size/libsupersize/static/shared.js
@@ -18,6 +18,8 @@
* arrays indicate this is a leaf node.
* @prop {TreeNode | null} parent Parent tree node. null if this is a root node.
* @prop {string} idPath Full path to this node.
+ * @prop {string} srcPath Path to the source containing this symbol.
+ * @prop {string} component OWNERS Component for this symbol.
* @prop {number} shortNameIndex The name of the node is include in the idPath.
* This index indicates where to start to slice the idPath to read the name.
* @prop {number} size Byte size of this node and its children.
diff --git a/chromium/tools/binary_size/libsupersize/static/tree-worker.js b/chromium/tools/binary_size/libsupersize/static/tree-worker.js
index efc101f7419..db7af6a6cc0 100644
--- a/chromium/tools/binary_size/libsupersize/static/tree-worker.js
+++ b/chromium/tools/binary_size/libsupersize/static/tree-worker.js
@@ -50,6 +50,14 @@ function getSourcePath(fileEntry) {
}
/**
+ * @param {Meta} meta
+ * @param {FileEntry} fileEntry
+ */
+function getComponent(meta, fileEntry) {
+ return meta.components[fileEntry[_KEYS.COMPONENT_INDEX]];
+}
+
+/**
* Find the last index of either '/' or `sep` in the given path.
* @param {string} path
* @param {string} sep
@@ -91,6 +99,8 @@ function _compareFunc(a, b) {
function createNode(options) {
const {
idPath,
+ srcPath,
+ component,
type,
shortNameIndex,
size = 0,
@@ -102,6 +112,8 @@ function createNode(options) {
children: [],
parent: null,
idPath,
+ srcPath,
+ component,
type,
shortNameIndex,
size,
@@ -128,13 +140,16 @@ class TreeBuilder {
* @param {(symbolNode: TreeNode) => boolean} options.highlightTest Called to
* see if a symbol should be highlighted.
* @param {string} options.sep Path seperator used to find parent names.
+ * @param {Meta} options.meta Metadata associated with this tree.
*/
constructor(options) {
this._getPath = options.getPath;
this._filterTest = options.filterTest;
this._highlightTest = options.highlightTest;
this._sep = options.sep || _PATH_SEP;
+ this._meta = options.meta;
+ // srcPath and component don't make sense for the root node.
this.rootNode = createNode({
idPath: this._sep,
shortNameIndex: 0,
@@ -234,6 +249,8 @@ class TreeBuilder {
if (classNode == null) {
classNode = createNode({
idPath: classIdPath,
+ srcPath: node.srcPath,
+ component: node.component,
shortNameIndex: childNode.shortNameIndex,
type: _CONTAINER_TYPES.JAVA_CLASS,
});
@@ -341,6 +358,9 @@ class TreeBuilder {
// get parent from cache if it exists, otherwise create it
parentNode = this._parents.get(parentPath);
if (parentNode == null) {
+ // srcPath and component are not available for parent nodes, since they
+ // are stored alongside FileEntry. We could extract srcPath from idPath,
+ // but it doesn't really add enough value to warrent doing so.
parentNode = createNode({
idPath: parentPath,
shortNameIndex: lastIndexOf(parentPath, this._sep) + 1,
@@ -365,9 +385,13 @@ class TreeBuilder {
*/
addFileEntry(fileEntry, diffMode) {
const idPath = this._getPath(fileEntry);
+ const srcPath = getSourcePath(fileEntry);
+ const component = getComponent(this._meta, fileEntry);
// make node for this
const fileNode = createNode({
idPath,
+ srcPath,
+ component,
shortNameIndex: lastIndexOf(idPath, this._sep) + 1,
type: _CONTAINER_TYPES.FILE,
});
@@ -384,6 +408,8 @@ class TreeBuilder {
const symbolNode = createNode({
// Join file path to symbol name with a ":"
idPath: `${idPath}:${symbol[_KEYS.SYMBOL_NAME]}`,
+ srcPath,
+ component,
shortNameIndex: idPath.length + 1,
size,
type,
@@ -707,20 +733,13 @@ async function buildTree(groupBy, filterTest, highlightTest, onProgress) {
/** @type {{ [gropyBy: string]: (fileEntry: FileEntry) => string }} */
const getPathMap = {
component(fileEntry) {
- const component = meta.components[fileEntry[_KEYS.COMPONENT_INDEX]];
+ const component = getComponent(meta, fileEntry);
const path = getSourcePath(fileEntry);
return `${component || '(No component)'}>${path}`;
},
source_path: getSourcePath,
};
- builder = new TreeBuilder({
- sep: groupBy === 'component' ? '>' : _PATH_SEP,
- getPath: getPathMap[groupBy],
- filterTest,
- highlightTest,
- });
-
/**
* Creates data to post to the UI thread. Defaults will be used for the root
* and percent values if not specified.
@@ -767,6 +786,15 @@ async function buildTree(groupBy, filterTest, highlightTest, onProgress) {
// First line of data is used to store meta information.
meta = /** @type {Meta} */ (dataObj);
diffMode = meta.diff_mode;
+
+ builder = new TreeBuilder({
+ getPath: getPathMap[groupBy],
+ filterTest,
+ highlightTest,
+ sep: groupBy === 'component' ? '>' : _PATH_SEP,
+ meta,
+ });
+
postToUi();
} else {
builder.addFileEntry(/** @type {FileEntry} */ (dataObj), diffMode);
diff --git a/chromium/tools/binary_size/libsupersize/static/viewer.html b/chromium/tools/binary_size/libsupersize/static/viewer.html
index 0b24204dc43..47b05cb8b4b 100644
--- a/chromium/tools/binary_size/libsupersize/static/viewer.html
+++ b/chromium/tools/binary_size/libsupersize/static/viewer.html
@@ -95,7 +95,7 @@ if ('serviceWorker' in navigator) {
<label class="checkbox-label" for="methodcount">Method Count Mode</label>
</div>
<p class="select-wrapper">
- <select id="byteunit" name="byteunit" data-dynamic>
+ <select id="byteunit" class="sel-big" name="byteunit" data-dynamic>
<option value="B">B - bytes</option>
<option value="KiB" selected>KiB - kibibytes</option>
<option value="MiB">MiB - mebibytes</option>
diff --git a/chromium/tools/binary_size/trybot_commit_size_checker.py b/chromium/tools/binary_size/trybot_commit_size_checker.py
index 07f1844d454..7d367595329 100755
--- a/chromium/tools/binary_size/trybot_commit_size_checker.py
+++ b/chromium/tools/binary_size/trybot_commit_size_checker.py
@@ -39,8 +39,10 @@ There is guidance at:
https://chromium.googlesource.com/chromium/src/+/master/docs/speed/apk_size_regressions.md#Debugging-Apk-Size-Increase
If the growth is expected / justified, then you can bypass this bot failure by
-adding "Binary-Size: $JUSTIFICATION" to your commit description. Here are some
-examples:
+adding "Binary-Size: $JUSTIFICATION" footer to your commit message (must go at
+the bottom of the message, similar to "Bug:").
+
+Here are some examples:
Binary-Size: Increase is due to translations and so cannot be avoided.
Binary-Size: Increase is due to new images, which are already optimally encoded.
diff --git a/chromium/tools/bisect-builds.py b/chromium/tools/bisect-builds.py
index 01cd7eef836..71875792ebf 100755
--- a/chromium/tools/bisect-builds.py
+++ b/chromium/tools/bisect-builds.py
@@ -235,7 +235,7 @@ class PathContext(object):
if self.platform == 'chromeos':
extract_dir = 'chrome-chromeos'
elif self.platform in ('win', 'win64'):
- extract_dir = 'chrome-winp'
+ extract_dir = 'chrome-win'
return os.path.join(extract_dir, self._binary_name)
@@ -738,6 +738,7 @@ def VerifyEndpoint(fetch, context, rev, profile, num_runs, command, try_args,
context, rev, fetch.zip_file, profile, num_runs, command, try_args)
except Exception, e:
print >> sys.stderr, e
+ raise SystemExit
if (evaluate(rev, exit_status, stdout, stderr) != expected_answer):
print 'Unexpected result at a range boundary! Your range is not correct.'
raise SystemExit
diff --git a/chromium/tools/cfi/blacklist.txt b/chromium/tools/cfi/blacklist.txt
index bffce270d94..031761248b6 100644
--- a/chromium/tools/cfi/blacklist.txt
+++ b/chromium/tools/cfi/blacklist.txt
@@ -20,10 +20,6 @@ type:*SkBlockComRef*
type:*RemoveIUnknown*
src:*atlcomcli.h
-# invalid downcasts for IPC messages
-# https://crbug.com/520760
-src:*nacl_message_scanner.cc*
-
# src/base/win/event_trace_provider_unittest.cc
type:*EtwTraceProvider*
@@ -162,7 +158,10 @@ src:*ui/accessibility/platform/ax_platform_node_auralinux.cc
src:*ui/accessibility/platform/ax_platform_atk_hyperlink.cc
src:*chrome/browser/ui/zoom/chrome_zoom_level_prefs.cc
+# Temporary needs both paths until the WebRTC changed is rolled in again
+# see https://bugs.chromium.org/p/chromium/issues/detail?id=901319#c14
src:*third_party/webrtc/modules/desktop_capture/x11/x_server_pixel_buffer.cc
+src:*third_party/webrtc/modules/desktop_capture/linux/x_server_pixel_buffer.cc
src:*media/cdm/*
src:*third_party/swiftshader/*
src:*base/native_library_unittest.cc
@@ -200,10 +199,6 @@ src:*third_party/blink/renderer/platform/wtf/*
# v8/src/intl.cc
fun:*LocaleConvertCase*
-# Casts away const qualifier
-# third_party/boringssl/src/crypto/pem/pem_lib.c
-fun:*PEM_ASN1_write*
-
# PropertyCallbackArguments::Call methods cast function pointers
src:*v8/src/api-arguments-inl.h
diff --git a/chromium/tools/checkteamtags/owners_file_tags.py b/chromium/tools/checkteamtags/owners_file_tags.py
index 2bae6b445f6..5cf6937cd45 100644
--- a/chromium/tools/checkteamtags/owners_file_tags.py
+++ b/chromium/tools/checkteamtags/owners_file_tags.py
@@ -109,7 +109,7 @@ def aggregate_components_from_owners(all_owners_data, root,
# is being exported in its own file and being used by sergiyb's scripts.
# Add dir-to-team mapping unless there is also dir-to-component mapping.
if (include_subdirs and team and not component and
- rel_dirname.startswith('third_party/WebKit/LayoutTests')):
+ rel_dirname.startswith('third_party/blink/web_tests')):
dir_to_team[rel_dirname] = team
if include_subdirs and rel_dirname not in dir_to_component:
diff --git a/chromium/tools/chrome_proxy/integration_tests/chrome_proxy_measurements.py b/chromium/tools/chrome_proxy/integration_tests/chrome_proxy_measurements.py
index 78a663a0807..3049c4caa35 100644
--- a/chromium/tools/chrome_proxy/integration_tests/chrome_proxy_measurements.py
+++ b/chromium/tools/chrome_proxy/integration_tests/chrome_proxy_measurements.py
@@ -9,7 +9,6 @@ import urlparse
from common import chrome_proxy_measurements as measurements
from common.chrome_proxy_measurements import ChromeProxyValidation
from integration_tests import chrome_proxy_metrics as metrics
-from metrics import loading
from telemetry.core import exceptions, util
from telemetry.page import legacy_page_test
diff --git a/chromium/tools/chrome_proxy/webdriver/lite_page.py b/chromium/tools/chrome_proxy/webdriver/lite_page.py
index 655abe7c236..8dcc3a6d861 100644
--- a/chromium/tools/chrome_proxy/webdriver/lite_page.py
+++ b/chromium/tools/chrome_proxy/webdriver/lite_page.py
@@ -195,6 +195,47 @@ class LitePage(IntegrationTest):
self.assertEqual(1, btf_response)
self.assertGreater(1, image_responses)
+ # Tests that the stale previews UI is shown on a stale Lite page.
+ @AndroidOnly
+ @ChromeVersionEqualOrAfterM(65)
+ def testStaleLitePageNano(self):
+ # If it was attempted to run with another experiment, skip this test.
+ if common.ParseFlags().browser_args and ('--data-reduction-proxy-experiment'
+ in common.ParseFlags().browser_args):
+ self.skipTest('This test cannot be run with other experiments.')
+ with TestDriver() as test_driver:
+ test_driver.AddChromeArg('--enable-spdy-proxy-auth')
+ test_driver.AddChromeArg('--enable-features='
+ 'Previews,DataReductionProxyDecidesTransform')
+ test_driver.AddChromeArg('--force-effective-connection-type=2G')
+ # Set exp=client_test_nano to force Lite page response.
+ test_driver.AddChromeArg(
+ '--data-reduction-proxy-experiment=client_test_nano')
+ # LoadURL waits for onLoadFinish so the Previews UI will be showing by
+ # then since it's triggered on commit.
+ test_driver.LoadURL(
+ 'http://check.googlezip.net/cacheable/test.html?age_seconds=360')
+
+ histogram = test_driver.GetHistogram(
+ 'Previews.StalePreviewTimestampShown')
+ self.assertEqual(1, histogram['count'])
+ # Check that there is a single entry in the 'Timestamp Shown' bucket.
+ self.assertEqual(
+ {'count': 1, 'high': 1, 'low': 0},
+ histogram['buckets'][0])
+
+ # Go to a non stale page and check that the stale timestamp is not shown.
+ test_driver.LoadURL(
+ 'http://check.googlezip.net/cacheable/test.html?age_seconds=0')
+
+ histogram = test_driver.GetHistogram(
+ 'Previews.StalePreviewTimestampShown')
+ # Check that there is still a single entry in the 'Timestamp Shown'
+ # bucket.
+ self.assertEqual(
+ {'count': 1, 'high': 1, 'low': 0},
+ histogram['buckets'][0])
+
# Lo-Fi fallback is not supported without the
# DataReductionProxyDecidesTransform feature. Check that no Lo-Fi response
# is received if a Lite Page is not served.
diff --git a/chromium/tools/clang/blink_gc_plugin/BadPatternFinder.cpp b/chromium/tools/clang/blink_gc_plugin/BadPatternFinder.cpp
index f3bec427ad9..ef1da662ac7 100644
--- a/chromium/tools/clang/blink_gc_plugin/BadPatternFinder.cpp
+++ b/chromium/tools/clang/blink_gc_plugin/BadPatternFinder.cpp
@@ -5,6 +5,7 @@
#include "BadPatternFinder.h"
#include "DiagnosticsReporter.h"
+#include <algorithm>
#include "clang/AST/ASTContext.h"
#include "clang/ASTMatchers/ASTMatchFinder.h"
#include "clang/ASTMatchers/ASTMatchers.h"
@@ -82,6 +83,62 @@ class OptionalGarbageCollectedMatcher : public MatchFinder::MatchCallback {
DiagnosticsReporter& diagnostics_;
};
+class MissingMixinMarker : public MatchFinder::MatchCallback {
+ public:
+ explicit MissingMixinMarker(clang::ASTContext& ast_context,
+ DiagnosticsReporter& diagnostics)
+ : ast_context_(ast_context), diagnostics_(diagnostics) {}
+
+ void Register(MatchFinder& match_finder) {
+ auto class_missing_mixin_marker = cxxRecordDecl(
+ decl().bind("bad_class"),
+ // Definition of a garbage-collected class
+ isDefinition(),
+ isDerivedFrom(cxxRecordDecl(decl().bind("gc_base_class"),
+ hasName("::blink::GarbageCollected"))),
+ // ...which derives some mixin...
+ isDerivedFrom(cxxRecordDecl(decl().bind("mixin_base_class"),
+ hasName("::blink::GarbageCollectedMixin"))),
+ // ...and doesn't use USING_GARBAGE_COLLECTED_MIXIN
+ unless(isSameOrDerivedFrom(
+ has(fieldDecl(hasName("mixin_constructor_marker_"))))),
+ // ...and might end up actually being constructed
+ unless(hasMethod(isPure())), unless(matchesName("::SameSizeAs")));
+ match_finder.addDynamicMatcher(class_missing_mixin_marker, this);
+ }
+
+ void run(const MatchFinder::MatchResult& result) {
+ auto* bad_class = result.Nodes.getNodeAs<clang::CXXRecordDecl>("bad_class");
+ auto* gc_base_class =
+ result.Nodes.getNodeAs<clang::CXXRecordDecl>("gc_base_class");
+ auto* mixin_base_class =
+ result.Nodes.getNodeAs<clang::CXXRecordDecl>("mixin_base_class");
+
+ clang::CXXBasePaths paths;
+ if (!bad_class->isDerivedFrom(mixin_base_class, paths))
+ return;
+ const auto& path = paths.front();
+
+ // It's most useful to describe the most derived "mixin" class (i.e. which
+ // does not derive the concrete GarbageCollected base).
+ auto mixin_it = std::find_if(
+ path.begin(), path.end(),
+ [gc_base_class](const clang::CXXBasePathElement& path_element) {
+ return !path_element.Class->isDerivedFrom(gc_base_class);
+ });
+ const clang::CXXRecordDecl* mixin_class = mixin_it->Class;
+ diagnostics_.MissingMixinMarker(bad_class, mixin_class, path.begin()->Base);
+
+ ++mixin_it;
+ for (auto it = path.begin() + 1; it != mixin_it; ++it)
+ diagnostics_.MissingMixinMarkerNote(it->Base);
+ }
+
+ private:
+ clang::ASTContext& ast_context_;
+ DiagnosticsReporter& diagnostics_;
+};
+
} // namespace
void FindBadPatterns(clang::ASTContext& ast_context,
@@ -94,5 +151,8 @@ void FindBadPatterns(clang::ASTContext& ast_context,
OptionalGarbageCollectedMatcher optional_gc(diagnostics);
optional_gc.Register(match_finder);
+ MissingMixinMarker missing_mixin_marker(ast_context, diagnostics);
+ missing_mixin_marker.Register(match_finder);
+
match_finder.matchAST(ast_context);
}
diff --git a/chromium/tools/clang/blink_gc_plugin/DiagnosticsReporter.cpp b/chromium/tools/clang/blink_gc_plugin/DiagnosticsReporter.cpp
index 032f3ffe7a3..65dba9ba98b 100644
--- a/chromium/tools/clang/blink_gc_plugin/DiagnosticsReporter.cpp
+++ b/chromium/tools/clang/blink_gc_plugin/DiagnosticsReporter.cpp
@@ -162,6 +162,13 @@ const char kOptionalUsedWithGC[] =
"[blink-gc] Disallowed construction of %0 found; %1 is a garbage-collected "
"type. optional cannot hold garbage-collected objects.";
+const char kMissingMixinMarker[] =
+ "[blink-gc] Garbage-collected class %0 derives mixin class %1. "
+ "You must add USING_GARBAGE_COLLECTED_MIXIN(%2).";
+
+const char kMissingMixinMarkerNote[] =
+ "[blink-gc] Mixin base class derived here:";
+
} // namespace
DiagnosticBuilder DiagnosticsReporter::ReportDiagnostic(
@@ -275,6 +282,10 @@ DiagnosticsReporter::DiagnosticsReporter(
diagnostic_.getCustomDiagID(getErrorLevel(), kUniquePtrUsedWithGC);
diag_optional_used_with_gc_ =
diagnostic_.getCustomDiagID(getErrorLevel(), kOptionalUsedWithGC);
+ diag_missing_mixin_marker_ =
+ diagnostic_.getCustomDiagID(getErrorLevel(), kMissingMixinMarker);
+ diag_missing_mixin_marker_note_ = diagnostic_.getCustomDiagID(
+ DiagnosticsEngine::Note, kMissingMixinMarkerNote);
}
bool DiagnosticsReporter::hasErrorOccurred() const
@@ -600,3 +611,18 @@ void DiagnosticsReporter::OptionalUsedWithGC(
ReportDiagnostic(expr->getBeginLoc(), diag_optional_used_with_gc_)
<< optional << gc_type << expr->getSourceRange();
}
+
+void DiagnosticsReporter::MissingMixinMarker(
+ const clang::CXXRecordDecl* bad_class,
+ const clang::CXXRecordDecl* mixin_class,
+ const clang::CXXBaseSpecifier* first_base) {
+ ReportDiagnostic(first_base->getBaseTypeLoc(), diag_missing_mixin_marker_)
+ << bad_class << mixin_class << bad_class->getName()
+ << first_base->getSourceRange();
+}
+
+void DiagnosticsReporter::MissingMixinMarkerNote(
+ const clang::CXXBaseSpecifier* base) {
+ ReportDiagnostic(base->getBaseTypeLoc(), diag_missing_mixin_marker_note_)
+ << base->getSourceRange();
+}
diff --git a/chromium/tools/clang/blink_gc_plugin/DiagnosticsReporter.h b/chromium/tools/clang/blink_gc_plugin/DiagnosticsReporter.h
index 512874d646e..2d8b0c7ade1 100644
--- a/chromium/tools/clang/blink_gc_plugin/DiagnosticsReporter.h
+++ b/chromium/tools/clang/blink_gc_plugin/DiagnosticsReporter.h
@@ -86,6 +86,10 @@ class DiagnosticsReporter {
void OptionalUsedWithGC(const clang::Expr* expr,
const clang::CXXRecordDecl* optional,
const clang::CXXRecordDecl* gc_type);
+ void MissingMixinMarker(const clang::CXXRecordDecl* bad_class,
+ const clang::CXXRecordDecl* mixin_class,
+ const clang::CXXBaseSpecifier* first_base);
+ void MissingMixinMarkerNote(const clang::CXXBaseSpecifier* base);
private:
clang::DiagnosticBuilder ReportDiagnostic(
@@ -150,6 +154,8 @@ class DiagnosticsReporter {
unsigned diag_unique_ptr_used_with_gc_;
unsigned diag_optional_used_with_gc_;
+ unsigned diag_missing_mixin_marker_;
+ unsigned diag_missing_mixin_marker_note_;
};
#endif // TOOLS_BLINK_GC_PLUGIN_DIAGNOSTICS_REPORTER_H_
diff --git a/chromium/tools/clang/scripts/package.py b/chromium/tools/clang/scripts/package.py
index 745362c73e7..e616533ae17 100755
--- a/chromium/tools/clang/scripts/package.py
+++ b/chromium/tools/clang/scripts/package.py
@@ -8,7 +8,6 @@ to a tgz file."""
import argparse
import fnmatch
-import glob
import itertools
import os
import shutil
@@ -249,39 +248,124 @@ def main():
'lib/libBlinkGCPlugin.' + so_ext,
])
if sys.platform == 'darwin':
- want.extend([# Copy only the OSX and iossim (ASan, fuzzer and profile)
- # runtime libraries:
- 'lib/clang/*/lib/darwin/*asan_osx*',
- 'lib/clang/*/lib/darwin/*asan_iossim*',
- 'lib/clang/*/lib/darwin/*fuzzer_no_main*',
- 'lib/clang/*/lib/darwin/*profile_osx*',
- 'lib/clang/*/lib/darwin/*profile_iossim*',
- # And the OSX and ios builtin libraries (iossim is lipo'd into
- # ios) for the _IsOSVersionAtLeast runtime function.
- 'lib/clang/*/lib/darwin/*.ios.a',
- 'lib/clang/*/lib/darwin/*.osx.a',
- ])
+ want.extend([
+ # AddressSanitizer runtime.
+ 'lib/clang/*/lib/darwin/libclang_rt.asan_iossim_dynamic.dylib',
+ 'lib/clang/*/lib/darwin/libclang_rt.asan_osx_dynamic.dylib',
+
+ # Fuzzing instrumentation (-fsanitize=fuzzer-no-link).
+ 'lib/clang/*/lib/darwin/libclang_rt.fuzzer_no_main_osx.a',
+
+ # OS X and iOS builtin libraries (iossim is lipo'd into ios) for the
+ # _IsOSVersionAtLeast runtime function.
+ 'lib/clang/*/lib/darwin/libclang_rt.ios.a',
+ 'lib/clang/*/lib/darwin/libclang_rt.osx.a',
+
+ # Profile runtime (used by profiler and code coverage).
+ 'lib/clang/*/lib/darwin/libclang_rt.profile_iossim.a',
+ 'lib/clang/*/lib/darwin/libclang_rt.profile_osx.a',
+ ])
elif sys.platform.startswith('linux'):
# Add llvm-ar and lld for LTO.
want.append('bin/llvm-ar')
want.append('bin/lld')
- # Copy only
- # lib/clang/*/lib/linux/libclang_rt.{[atm]san,san,ubsan,fuzzer,profile}-*.a,
- # but not dfsan.
- want.extend(['lib/clang/*/lib/linux/*[atm]san*',
- 'lib/clang/*/lib/linux/*ubsan*',
- 'lib/clang/*/lib/linux/*libclang_rt.fuzzer_no_main*',
- 'lib/clang/*/lib/linux/*libclang_rt.san*',
- 'lib/clang/*/lib/linux/*profile*',
- 'lib/clang/*/share/msan_blacklist.txt',
- ])
+ want.extend([
+ # AddressSanitizer C runtime (pure C won't link with *_cxx).
+ 'lib/clang/*/lib/linux/libclang_rt.asan-i386.a',
+ 'lib/clang/*/lib/linux/libclang_rt.asan-x86_64.a',
+ 'lib/clang/*/lib/linux/libclang_rt.asan-x86_64.a.syms',
+
+ # AddressSanitizer C++ runtime.
+ 'lib/clang/*/lib/linux/libclang_rt.asan_cxx-i386.a',
+ 'lib/clang/*/lib/linux/libclang_rt.asan_cxx-x86_64.a',
+ 'lib/clang/*/lib/linux/libclang_rt.asan_cxx-x86_64.a.syms',
+
+ # AddressSanitizer Android runtime.
+ 'lib/clang/*/lib/linux/libclang_rt.asan-aarch64-android.so',
+ 'lib/clang/*/lib/linux/libclang_rt.asan-arm-android.so',
+ 'lib/clang/*/lib/linux/libclang_rt.asan-i686-android.so',
+
+ # Fuzzing instrumentation (-fsanitize=fuzzer-no-link).
+ 'lib/clang/*/lib/linux/libclang_rt.fuzzer_no_main-x86_64.a',
+
+ # MemorySanitizer C runtime (pure C won't link with *_cxx).
+ 'lib/clang/*/lib/linux/libclang_rt.msan-x86_64.a',
+ 'lib/clang/*/lib/linux/libclang_rt.msan-x86_64.a.syms',
+
+ # MemorySanitizer C++ runtime.
+ 'lib/clang/*/lib/linux/libclang_rt.msan_cxx-x86_64.a',
+ 'lib/clang/*/lib/linux/libclang_rt.msan_cxx-x86_64.a.syms',
+
+ # Profile runtime (used by profiler and code coverage).
+ 'lib/clang/*/lib/linux/libclang_rt.profile-i386.a',
+ 'lib/clang/*/lib/linux/libclang_rt.profile-x86_64.a',
+ 'lib/clang/*/lib/linux/libclang_rt.profile-aarch64-android.a',
+ 'lib/clang/*/lib/linux/libclang_rt.profile-arm-android.a',
+
+ # ThreadSanitizer C runtime (pure C won't link with *_cxx).
+ 'lib/clang/*/lib/linux/libclang_rt.tsan-x86_64.a',
+ 'lib/clang/*/lib/linux/libclang_rt.tsan-x86_64.a.syms',
+
+ # ThreadSanitizer C++ runtime.
+ 'lib/clang/*/lib/linux/libclang_rt.tsan_cxx-x86_64.a',
+ 'lib/clang/*/lib/linux/libclang_rt.tsan_cxx-x86_64.a.syms',
+
+ # UndefinedBehaviorSanitizer C runtime (pure C won't link with *_cxx).
+ 'lib/clang/*/lib/linux/libclang_rt.ubsan_standalone-i386.a',
+ 'lib/clang/*/lib/linux/libclang_rt.ubsan_standalone-x86_64.a',
+ 'lib/clang/*/lib/linux/libclang_rt.ubsan_standalone-x86_64.a.syms',
+
+ # UndefinedBehaviorSanitizer C++ runtime.
+ 'lib/clang/*/lib/linux/libclang_rt.ubsan_standalone_cxx-i386.a',
+ 'lib/clang/*/lib/linux/libclang_rt.ubsan_standalone_cxx-x86_64.a',
+ 'lib/clang/*/lib/linux/libclang_rt.ubsan_standalone_cxx-x86_64.a.syms',
+
+ # UndefinedBehaviorSanitizer Android runtime, needed for CFI.
+ 'lib/clang/*/lib/linux/libclang_rt.ubsan_standalone-aarch64-android.so',
+ 'lib/clang/*/lib/linux/libclang_rt.ubsan_standalone-arm-android.so',
+
+ # Blacklist for MemorySanitizer (used on Linux only).
+ 'lib/clang/*/share/msan_blacklist.txt',
+ ])
elif sys.platform == 'win32':
- want.extend(['lib/clang/*/lib/windows/clang_rt.asan*.dll',
- 'lib/clang/*/lib/windows/clang_rt.asan*.lib',
- 'lib/clang/*/lib/windows/clang_rt.fuzzer_no_main*.lib',
- 'lib/clang/*/lib/windows/clang_rt.profile*.lib',
- 'lib/clang/*/lib/windows/clang_rt.ubsan*.lib',
- ])
+ want.extend([
+ # AddressSanitizer C runtime (pure C won't link with *_cxx).
+ 'lib/clang/*/lib/windows/clang_rt.asan-i386.lib',
+ 'lib/clang/*/lib/windows/clang_rt.asan-x86_64.lib',
+
+ # AddressSanitizer C++ runtime.
+ 'lib/clang/*/lib/windows/clang_rt.asan_cxx-i386.lib',
+ 'lib/clang/*/lib/windows/clang_rt.asan_cxx-x86_64.lib',
+
+ # Fuzzing instrumentation (-fsanitize=fuzzer-no-link).
+ 'lib/clang/*/lib/windows/clang_rt.fuzzer_no_main-x86_64.lib',
+
+ # Thunk for AddressSanitizer needed for static build of a shared lib.
+ 'lib/clang/*/lib/windows/clang_rt.asan_dll_thunk-i386.lib',
+ 'lib/clang/*/lib/windows/clang_rt.asan_dll_thunk-x86_64.lib',
+
+ # AddressSanitizer runtime for component build.
+ 'lib/clang/*/lib/windows/clang_rt.asan_dynamic-i386.dll',
+ 'lib/clang/*/lib/windows/clang_rt.asan_dynamic-i386.lib',
+ 'lib/clang/*/lib/windows/clang_rt.asan_dynamic-x86_64.dll',
+ 'lib/clang/*/lib/windows/clang_rt.asan_dynamic-x86_64.lib',
+
+ # Thunk for AddressSanitizer for component build of a shared lib.
+ 'lib/clang/*/lib/windows/clang_rt.asan_dynamic_runtime_thunk-i386.lib',
+ 'lib/clang/*/lib/windows/clang_rt.asan_dynamic_runtime_thunk-x86_64.lib',
+
+ # Profile runtime (used by profiler and code coverage).
+ 'lib/clang/*/lib/windows/clang_rt.profile-i386.lib',
+ 'lib/clang/*/lib/windows/clang_rt.profile-x86_64.lib',
+
+ # UndefinedBehaviorSanitizer C runtime (pure C won't link with *_cxx).
+ 'lib/clang/*/lib/windows/clang_rt.ubsan_standalone-i386.lib',
+ 'lib/clang/*/lib/windows/clang_rt.ubsan_standalone-x86_64.lib',
+
+ # UndefinedBehaviorSanitizer C++ runtime.
+ 'lib/clang/*/lib/windows/clang_rt.ubsan_standalone_cxx-i386.lib',
+ 'lib/clang/*/lib/windows/clang_rt.ubsan_standalone_cxx-x86_64.lib',
+ ])
if sys.platform in ('linux2', 'darwin'):
# Include libclang_rt.builtins.a for Fuchsia targets.
@@ -398,23 +482,6 @@ def main():
filter=PrintTarProgress)
MaybeUpload(args, cfiverifydir, platform)
- # Zip up the SafeStack runtime for Linux
- safestackdir = 'safestack-' + stamp
- shutil.rmtree(safestackdir, ignore_errors=True)
- os.makedirs(os.path.join(safestackdir, 'lib'))
- for build in glob.glob(os.path.join(LLVM_RELEASE_DIR, 'lib', 'clang', '*')):
- version = os.path.basename(build)
- dest_dir = os.path.join(safestackdir, 'lib', 'clang', version,
- 'lib', 'linux')
- os.makedirs(dest_dir)
- for lib in glob.glob(os.path.join(build, 'lib', 'linux',
- '*libclang_rt.safestack*')):
- shutil.copy(lib, dest_dir)
- with tarfile.open(safestackdir + '.tgz', 'w:gz') as tar:
- tar.add(os.path.join(safestackdir, 'lib'), arcname='lib',
- filter=PrintTarProgress)
- MaybeUpload(args, safestackdir, platform)
-
# On Mac, lld isn't part of the main zip. Upload it in a separate zip.
if sys.platform == 'darwin':
llddir = 'lld-' + stamp
diff --git a/chromium/tools/clang/scripts/update.py b/chromium/tools/clang/scripts/update.py
index 6cd0319de4f..8b762dc72a6 100755
--- a/chromium/tools/clang/scripts/update.py
+++ b/chromium/tools/clang/scripts/update.py
@@ -27,7 +27,7 @@ import zipfile
# Do NOT CHANGE this if you don't know what you're doing -- see
# https://chromium.googlesource.com/chromium/src/+/master/docs/updating_clang.md
# Reverting problematic clang rolls is safe, though.
-CLANG_REVISION = '344066'
+CLANG_REVISION = '346388'
use_head_revision = bool(os.environ.get('LLVM_FORCE_HEAD_REVISION', '0')
in ('1', 'YES'))
@@ -35,7 +35,7 @@ if use_head_revision:
CLANG_REVISION = 'HEAD'
# This is incremented when pushing a new build of Clang at the same revision.
-CLANG_SUB_REVISION=1
+CLANG_SUB_REVISION=5
PACKAGE_VERSION = "%s-%s" % (CLANG_REVISION, CLANG_SUB_REVISION)
@@ -347,7 +347,7 @@ def AddGnuWinToPath():
return
gnuwin_dir = os.path.join(LLVM_BUILD_TOOLS_DIR, 'gnuwin')
- GNUWIN_VERSION = '8'
+ GNUWIN_VERSION = '9'
GNUWIN_STAMP = os.path.join(gnuwin_dir, 'stamp')
if ReadStampFile(GNUWIN_STAMP) == GNUWIN_VERSION:
print 'GNU Win tools already up to date.'
@@ -358,6 +358,17 @@ def AddGnuWinToPath():
os.environ['PATH'] = gnuwin_dir + os.pathsep + os.environ.get('PATH', '')
+ # find.exe, mv.exe and rm.exe are from MSYS (see crrev.com/389632). MSYS uses
+ # Cygwin under the hood, and initializing Cygwin has a race-condition when
+ # getting group and user data from the Active Directory is slow. To work
+ # around this, use a horrible hack telling it not to do that.
+ # See https://crbug.com/905289
+ etc = os.path.join(gnuwin_dir, '..', '..', 'etc')
+ EnsureDirExists(etc)
+ with open(os.path.join(etc, 'nsswitch.conf'), 'w') as f:
+ f.write('passwd: files\n')
+ f.write('group: files\n')
+
win_sdk_dir = None
dia_dll = None
@@ -781,6 +792,14 @@ def UpdateClang(args):
'i686': 'x86',
}[target_arch]])
+ # NDK r16 "helpfully" installs libc++ as libstdc++ "so the compiler will
+ # pick it up by default". Only these days, the compiler tries to find
+ # libc++ instead. See https://crbug.com/902270.
+ shutil.copy(os.path.join(toolchain_dir, 'sysroot/usr/lib/libstdc++.a'),
+ os.path.join(toolchain_dir, 'sysroot/usr/lib/libc++.a'))
+ shutil.copy(os.path.join(toolchain_dir, 'sysroot/usr/lib/libstdc++.so'),
+ os.path.join(toolchain_dir, 'sysroot/usr/lib/libc++.so'))
+
# Build compiler-rt runtimes needed for Android in a separate build tree.
build_dir = os.path.join(LLVM_BUILD_DIR, 'android-' + target_arch)
if not os.path.exists(build_dir):
@@ -802,6 +821,7 @@ def UpdateClang(args):
'-DLLVM_CONFIG_PATH=' + os.path.join(LLVM_BUILD_DIR, 'bin/llvm-config'),
'-DCMAKE_C_FLAGS=' + ' '.join(cflags),
'-DCMAKE_CXX_FLAGS=' + ' '.join(cflags),
+ '-DCMAKE_ASM_FLAGS=' + ' '.join(cflags),
'-DSANITIZER_CXX_ABI=none',
'-DSANITIZER_CXX_ABI_LIBRARY=' + abi_libs,
'-DCMAKE_SHARED_LINKER_FLAGS=-Wl,-u__cxa_demangle',
@@ -894,6 +914,15 @@ def UpdateClang(args):
return 0
+def gn_arg(v):
+ if v == 'True':
+ return True
+ if v == 'False':
+ return False
+ raise argparse.ArgumentTypeError('Expected one of %r or %r' % (
+ 'True', 'False'))
+
+
def main():
parser = argparse.ArgumentParser(description='Build Clang.')
parser.add_argument('--bootstrap', action='store_true',
@@ -928,10 +957,12 @@ def main():
'and using prebuilt cmake binaries')
parser.add_argument('--verify-version',
help='verify that clang has the passed-in version')
+ parser.add_argument('--with-android', type=gn_arg, nargs='?', const=True,
+ help='build the Android ASan runtime (linux only)',
+ default=sys.platform.startswith('linux'))
parser.add_argument('--without-android', action='store_false',
help='don\'t build Android ASan runtime (linux only)',
- dest='with_android',
- default=sys.platform.startswith('linux'))
+ dest='with_android')
parser.add_argument('--without-fuchsia', action='store_false',
help='don\'t build Fuchsia clang_rt runtime (linux/mac)',
dest='with_fuchsia',
@@ -985,9 +1016,6 @@ def main():
PACKAGE_VERSION = CLANG_REVISION + '-0'
args.force_local_build = True
- if 'OS=android' not in os.environ.get('GYP_DEFINES', ''):
- # Only build the Android ASan rt on ToT bots when targetting Android.
- args.with_android = False
# Don't build fuchsia runtime on ToT bots at all.
args.with_fuchsia = False
diff --git a/chromium/tools/code_coverage/coverage.py b/chromium/tools/code_coverage/coverage.py
index 0ad4f5e7c80..b239b24a55f 100755
--- a/chromium/tools/code_coverage/coverage.py
+++ b/chromium/tools/code_coverage/coverage.py
@@ -42,13 +42,14 @@
python tools/code_coverage/coverage.py pdfium_fuzzer \\
-b out/coverage -o out/report \\
- -c 'out/coverage/pdfium_fuzzer -runs=<runs> <corpus_dir>' \\
+ -c 'out/coverage/pdfium_fuzzer -runs=0 <corpus_dir>' \\
-f third_party/pdfium
where:
<corpus_dir> - directory containing samples files for this format.
- <runs> - number of times to fuzz target function. Should be 0 when you just
- want to see the coverage on corpus and don't want to fuzz at all.
+
+ To learn more about generating code coverage reports for fuzz targets, see
+ https://chromium.googlesource.com/chromium/src/+/master/testing/libfuzzer/efficient_fuzzer.md#Code-Coverage
* Sample workflow for running Blink web tests:
@@ -87,7 +88,7 @@ sys.path.append(
os.path.join(
os.path.dirname(__file__), os.path.pardir, os.path.pardir, 'tools',
'clang', 'scripts'))
-import update as clang_update
+from update import LLVM_BUILD_DIR
sys.path.append(
os.path.join(
@@ -96,10 +97,10 @@ sys.path.append(
from collections import defaultdict
import coverage_utils
+import update_clang_coverage_tools
# Absolute path to the code coverage tools binary. These paths can be
# overwritten by user specified coverage tool paths.
-LLVM_BUILD_DIR = clang_update.LLVM_BUILD_DIR
LLVM_BIN_DIR = os.path.join(LLVM_BUILD_DIR, 'bin')
LLVM_COV_PATH = os.path.join(LLVM_BIN_DIR, 'llvm-cov')
LLVM_PROFDATA_PATH = os.path.join(LLVM_BIN_DIR, 'llvm-profdata')
@@ -164,7 +165,7 @@ def _ConfigureLLVMCoverageTools(args):
LLVM_COV_PATH = os.path.join(llvm_bin_dir, 'llvm-cov')
LLVM_PROFDATA_PATH = os.path.join(llvm_bin_dir, 'llvm-profdata')
else:
- DownloadCoverageToolsIfNeeded()
+ update_clang_coverage_tools.DownloadCoverageToolsIfNeeded()
coverage_tools_exist = (
os.path.exists(LLVM_COV_PATH) and os.path.exists(LLVM_PROFDATA_PATH))
@@ -172,7 +173,6 @@ def _ConfigureLLVMCoverageTools(args):
'both \'%s\' and \'%s\' exist.') % (
LLVM_COV_PATH, LLVM_PROFDATA_PATH)
-
def _GetPathWithLLVMSymbolizerDir():
"""Add llvm-symbolizer directory to path for symbolized stacks."""
path = os.getenv('PATH')
@@ -197,74 +197,6 @@ def _IsIOS():
return _GetTargetOS() == 'ios'
-# TODO(crbug.com/759794): remove this function once tools get included to
-# Clang bundle:
-# https://chromium-review.googlesource.com/c/chromium/src/+/688221
-def DownloadCoverageToolsIfNeeded():
- """Temporary solution to download llvm-profdata and llvm-cov tools."""
-
- def _GetRevisionFromStampFile(stamp_file_path):
- """Returns a pair of revision number by reading the build stamp file.
-
- Args:
- stamp_file_path: A path the build stamp file created by
- tools/clang/scripts/update.py.
- Returns:
- A pair of integers represeting the main and sub revision respectively.
- """
- if not os.path.exists(stamp_file_path):
- return 0, 0
-
- with open(stamp_file_path) as stamp_file:
- stamp_file_line = stamp_file.readline()
- if ',' in stamp_file_line:
- package_version = stamp_file_line.rstrip().split(',')[0]
- else:
- package_version = stamp_file_line.rstrip()
-
- clang_revision_str, clang_sub_revision_str = package_version.split('-')
- return int(clang_revision_str), int(clang_sub_revision_str)
-
- host_platform = coverage_utils.GetHostPlatform()
- clang_revision, clang_sub_revision = _GetRevisionFromStampFile(
- clang_update.STAMP_FILE)
-
- coverage_revision_stamp_file = os.path.join(
- os.path.dirname(clang_update.STAMP_FILE), 'cr_coverage_revision')
- coverage_revision, coverage_sub_revision = _GetRevisionFromStampFile(
- coverage_revision_stamp_file)
-
- has_coverage_tools = (
- os.path.exists(LLVM_COV_PATH) and os.path.exists(LLVM_PROFDATA_PATH))
-
- if (has_coverage_tools and coverage_revision == clang_revision and
- coverage_sub_revision == clang_sub_revision):
- # LLVM coverage tools are up to date, bail out.
- return
-
- package_version = '%d-%d' % (clang_revision, clang_sub_revision)
- coverage_tools_file = 'llvm-code-coverage-%s.tgz' % package_version
-
- # The code bellow follows the code from tools/clang/scripts/update.py.
- if host_platform == 'mac':
- coverage_tools_url = clang_update.CDS_URL + '/Mac/' + coverage_tools_file
- elif host_platform == 'linux':
- coverage_tools_url = (
- clang_update.CDS_URL + '/Linux_x64/' + coverage_tools_file)
- else:
- assert host_platform == 'win'
- coverage_tools_url = (clang_update.CDS_URL + '/Win/' + coverage_tools_file)
-
- try:
- clang_update.DownloadAndUnpack(coverage_tools_url,
- clang_update.LLVM_BUILD_DIR)
- with open(coverage_revision_stamp_file, 'w') as file_handle:
- file_handle.write('%s,%s' % (package_version, host_platform))
- file_handle.write('\n')
- except urllib2.URLError:
- raise Exception(
- 'Failed to download coverage tools: %s.' % coverage_tools_url)
-
def _GeneratePerFileLineByLineCoverageInHtml(binary_paths, profdata_file_path,
filters, ignore_filename_regex):
@@ -730,7 +662,7 @@ def _GetBinaryPath(command):
if _IsIOSCommand(command):
# For a given application bundle, the binary resides in the bundle and has
# the same name with the application without the .app extension.
- app_path = command_parts[-1].rstrip(os.path.sep)
+ app_path = command_parts[1].rstrip(os.path.sep)
app_name = os.path.splitext(os.path.basename(app_path))[0]
return os.path.join(app_path, app_name)
@@ -1009,7 +941,7 @@ def Main():
# Setup coverage binaries even when script is called with empty params. This
# is used by coverage bot for initial setup.
if len(sys.argv) == 1:
- DownloadCoverageToolsIfNeeded()
+ update_clang_coverage_tools.DownloadCoverageToolsIfNeeded()
print(__doc__)
return
diff --git a/chromium/tools/code_coverage/coverage_test.py b/chromium/tools/code_coverage/coverage_test.py
new file mode 100755
index 00000000000..ab9bf5b20c5
--- /dev/null
+++ b/chromium/tools/code_coverage/coverage_test.py
@@ -0,0 +1,293 @@
+#!/usr/bin/python
+# Copyright 2018 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.
+"""Tests for code coverage tools."""
+
+import os
+import re
+import shutil
+import subprocess
+import unittest
+
+import coverage_utils
+
+
+def _RecursiveDirectoryListing(dirpath):
+ """Returns a list of relative paths to all files in a given directory."""
+ result = []
+ for root, _, files in os.walk(dirpath):
+ for f in files:
+ result.append(os.path.relpath(os.path.join(root, f), dirpath))
+ return result
+
+
+def _ReadFile(filepath):
+ """Returns contents of a given file."""
+ with open(filepath) as f:
+ return f.read()
+
+
+class CoverageTest(unittest.TestCase):
+
+ def setUp(self):
+ self.maxDiff = 1000
+ self.COVERAGE_TOOLS_DIR = os.path.abspath(os.path.dirname(__file__))
+ self.COVERAGE_SCRIPT = os.path.join(self.COVERAGE_TOOLS_DIR, 'coverage.py')
+ self.COVERAGE_UTILS = os.path.join(self.COVERAGE_TOOLS_DIR,
+ 'coverage_utils.py')
+
+ self.CHROMIUM_SRC_DIR = os.path.dirname(
+ os.path.dirname(self.COVERAGE_TOOLS_DIR))
+ self.BUILD_DIR = os.path.join(self.CHROMIUM_SRC_DIR, 'out',
+ 'code_coverage_tools_test')
+
+ self.REPORT_DIR_1 = os.path.join(self.BUILD_DIR, 'report1')
+ self.REPORT_DIR_1_NO_COMPONENTS = os.path.join(self.BUILD_DIR,
+ 'report1_no_components')
+ self.REPORT_DIR_2 = os.path.join(self.BUILD_DIR, 'report2')
+ self.REPORT_DIR_3 = os.path.join(self.BUILD_DIR, 'report3')
+
+ self.LLVM_COV = os.path.join(self.CHROMIUM_SRC_DIR, 'third_party',
+ 'llvm-build', 'Release+Asserts', 'bin',
+ 'llvm-cov')
+
+ self.PYTHON = 'python'
+ self.PLATFORM = coverage_utils.GetHostPlatform()
+ if self.PLATFORM == 'win32':
+ self.LLVM_COV += '.exe'
+ self.PYTHON += '.exe'
+
+ # Even though 'is_component_build=false' is recommended, we intentionally
+ # use 'is_component_build=true' to test handling of shared libraries.
+ self.GN_ARGS = """use_clang_coverage=true
+ dcheck_always_on=true
+ ffmpeg_branding=\"ChromeOS\"
+ is_component_build=true
+ is_debug=false
+ proprietary_codecs=true
+ use_libfuzzer=true"""
+
+ shutil.rmtree(self.BUILD_DIR, ignore_errors=True)
+
+ gn_gen_cmd = ['gn', 'gen', self.BUILD_DIR, '--args=%s' % self.GN_ARGS]
+ self.run_cmd(gn_gen_cmd)
+
+ build_cmd = [
+ 'autoninja', '-C', self.BUILD_DIR, 'crypto_unittests',
+ 'libpng_read_fuzzer'
+ ]
+ self.run_cmd(build_cmd)
+
+ def tearDown(self):
+ shutil.rmtree(self.BUILD_DIR, ignore_errors=True)
+
+ def run_cmd(self, cmd):
+ return subprocess.check_output(cmd, cwd=self.CHROMIUM_SRC_DIR)
+
+ def verify_component_view(self, filepath):
+ """Asserts that a given component view looks correct."""
+ # There must be several Blink and Internals components.
+ with open(filepath) as f:
+ data = f.read()
+
+ counts = data.count('Blink') + data.count('Internals')
+ self.assertGreater(counts, 5)
+
+ def verify_directory_view(self, filepath):
+ """Asserts that a given directory view looks correct."""
+ # Directory view page does a redirect to another page, extract its URL.
+ with open(filepath) as f:
+ data = f.read()
+
+ url = re.search(r'.*refresh.*url=([a-zA-Z0-9_\-\/.]+).*', data).group(1)
+ directory_view_path = os.path.join(os.path.dirname(filepath), url)
+
+ # There must be at least 'crypto' and 'third_party' directories.
+ with open(directory_view_path) as f:
+ data = f.read()
+
+ self.assertTrue('crypto' in data and 'third_party' in data)
+
+ def verify_file_view(self, filepath):
+ """Asserts that a given file view looks correct."""
+ # There must be hundreds of '.*crypto.*' files and 10+ of '.*libpng.*'.
+ with open(filepath) as f:
+ data = f.read()
+
+ self.assertGreater(data.count('crypto'), 100)
+ self.assertGreater(data.count('libpng'), 10)
+
+ def test_different_workflows_and_cross_check_the_results(self):
+ """Test a few different workflows and assert that the results are the same
+
+ and look legit.
+ """
+ # Testcase 1. End-to-end report generation using coverage.py script. This is
+ # the workflow of a regular user.
+ cmd = [
+ self.COVERAGE_SCRIPT,
+ 'crypto_unittests',
+ 'libpng_read_fuzzer',
+ '-v',
+ '-b',
+ self.BUILD_DIR,
+ '-o',
+ self.REPORT_DIR_1,
+ '-c'
+ '%s/crypto_unittests' % self.BUILD_DIR,
+ '-c',
+ '%s/libpng_read_fuzzer -runs=0 third_party/libpng/' % self.BUILD_DIR,
+ ]
+ self.run_cmd(cmd)
+
+ output_dir = os.path.join(self.REPORT_DIR_1, self.PLATFORM)
+ self.verify_component_view(
+ os.path.join(output_dir, 'component_view_index.html'))
+ self.verify_directory_view(
+ os.path.join(output_dir, 'directory_view_index.html'))
+ self.verify_file_view(os.path.join(output_dir, 'file_view_index.html'))
+
+ # Also try generating a report without components view. Useful for cross
+ # checking with the report produced in the testcase #3.
+ cmd = [
+ self.COVERAGE_SCRIPT,
+ 'crypto_unittests',
+ 'libpng_read_fuzzer',
+ '-v',
+ '-b',
+ self.BUILD_DIR,
+ '-o',
+ self.REPORT_DIR_1_NO_COMPONENTS,
+ '-c'
+ '%s/crypto_unittests' % self.BUILD_DIR,
+ '-c',
+ '%s/libpng_read_fuzzer -runs=0 third_party/libpng/' % self.BUILD_DIR,
+ '--no-component-view',
+ ]
+ self.run_cmd(cmd)
+
+ output_dir = os.path.join(self.REPORT_DIR_1_NO_COMPONENTS, self.PLATFORM)
+ self.verify_directory_view(
+ os.path.join(output_dir, 'directory_view_index.html'))
+ self.verify_file_view(os.path.join(output_dir, 'file_view_index.html'))
+ self.assertFalse(
+ os.path.exists(os.path.join(output_dir, 'component_view_index.html')))
+
+ # Testcase #2. Run the script for post processing in Chromium tree. This is
+ # the workflow of the code coverage bots.
+ instr_profile_path = os.path.join(self.REPORT_DIR_1, self.PLATFORM,
+ 'coverage.profdata')
+
+ cmd = [
+ self.COVERAGE_SCRIPT,
+ 'crypto_unittests',
+ 'libpng_read_fuzzer',
+ '-v',
+ '-b',
+ self.BUILD_DIR,
+ '-p',
+ instr_profile_path,
+ '-o',
+ self.REPORT_DIR_2,
+ ]
+ self.run_cmd(cmd)
+
+ # Verify that the output dirs are the same except of the expected diff.
+ report_1_listing = set(_RecursiveDirectoryListing(self.REPORT_DIR_1))
+ report_2_listing = set(_RecursiveDirectoryListing(self.REPORT_DIR_2))
+ logs_subdir = os.path.join(self.PLATFORM, 'logs')
+ self.assertEqual(
+ set([
+ os.path.join(self.PLATFORM, 'coverage.profdata'),
+ os.path.join(logs_subdir, 'crypto_unittests_output.log'),
+ os.path.join(logs_subdir, 'libpng_read_fuzzer_output.log'),
+ ]), report_1_listing - report_2_listing)
+
+ output_dir = os.path.join(self.REPORT_DIR_2, self.PLATFORM)
+ self.verify_component_view(
+ os.path.join(output_dir, 'component_view_index.html'))
+ self.verify_directory_view(
+ os.path.join(output_dir, 'directory_view_index.html'))
+ self.verify_file_view(os.path.join(output_dir, 'file_view_index.html'))
+
+ # Verify that the file view pages are binary equal.
+ report_1_file_view_data = _ReadFile(
+ os.path.join(self.REPORT_DIR_1, self.PLATFORM, 'file_view_index.html'))
+ report_2_file_view_data = _ReadFile(
+ os.path.join(self.REPORT_DIR_2, self.PLATFORM, 'file_view_index.html'))
+ self.assertEqual(report_1_file_view_data, report_2_file_view_data)
+
+ # Testcase #3, run coverage_utils.py on manually produced report and summary
+ # file. This is the workflow of OSS-Fuzz code coverage job.
+ objects = [
+ '-object=%s' % os.path.join(self.BUILD_DIR, 'crypto_unittests'),
+ '-object=%s' % os.path.join(self.BUILD_DIR, 'libpng_read_fuzzer'),
+ ]
+
+ cmd = [
+ self.PYTHON,
+ self.COVERAGE_UTILS,
+ '-v',
+ 'shared_libs',
+ '-build-dir=%s' % self.BUILD_DIR,
+ ] + objects
+
+ shared_libraries = self.run_cmd(cmd)
+ objects.extend(shared_libraries.split())
+
+ instr_profile_path = os.path.join(self.REPORT_DIR_1_NO_COMPONENTS,
+ self.PLATFORM, 'coverage.profdata')
+ cmd = [
+ self.LLVM_COV,
+ 'show',
+ '-format=html',
+ '-output-dir=%s' % self.REPORT_DIR_3,
+ '-instr-profile=%s' % instr_profile_path,
+ ] + objects
+ if self.PLATFORM in ['linux', 'mac']:
+ cmd.extend(['-Xdemangler', 'c++filt', '-Xdemangler', '-n'])
+ self.run_cmd(cmd)
+
+ cmd = [
+ self.LLVM_COV,
+ 'export',
+ '-summary-only',
+ '-instr-profile=%s' % instr_profile_path,
+ ] + objects
+ summary_output = self.run_cmd(cmd)
+
+ summary_path = os.path.join(self.REPORT_DIR_3, 'summary.json')
+ with open(summary_path, 'w') as f:
+ f.write(summary_output)
+
+ cmd = [
+ self.PYTHON,
+ self.COVERAGE_UTILS,
+ '-v',
+ 'post_process',
+ '-src-root-dir=%s' % self.CHROMIUM_SRC_DIR,
+ '-summary-file=%s' % summary_path,
+ '-output-dir=%s' % self.REPORT_DIR_3,
+ ]
+ self.run_cmd(cmd)
+
+ output_dir = os.path.join(self.REPORT_DIR_3, self.PLATFORM)
+ self.verify_directory_view(
+ os.path.join(output_dir, 'directory_view_index.html'))
+ self.verify_file_view(os.path.join(output_dir, 'file_view_index.html'))
+ self.assertFalse(
+ os.path.exists(os.path.join(output_dir, 'component_view_index.html')))
+
+ # Verify that the file view pages are binary equal.
+ report_1_file_view_data_no_component = _ReadFile(
+ os.path.join(self.REPORT_DIR_1_NO_COMPONENTS, self.PLATFORM,
+ 'file_view_index.html'))
+ report_3_file_view_data = _ReadFile(
+ os.path.join(self.REPORT_DIR_3, self.PLATFORM, 'file_view_index.html'))
+ self.assertEqual(report_1_file_view_data_no_component,
+ report_3_file_view_data)
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/chromium/tools/code_coverage/coverage_utils.py b/chromium/tools/code_coverage/coverage_utils.py
index 9bbf84752c5..fab56ceb3ba 100644
--- a/chromium/tools/code_coverage/coverage_utils.py
+++ b/chromium/tools/code_coverage/coverage_utils.py
@@ -749,12 +749,13 @@ def _CmdSharedLibraries(args):
logging.error('No binaries are specified.')
return 1
- paths = GetSharedLibraries(args.object, args.build_dir)
- if not paths:
+ library_paths = GetSharedLibraries(args.object, args.build_dir)
+ if not library_paths:
return 0
# Print output in the format that can be passed to llvm-cov tool.
- output = ' '.join(['-object=%s' % path for path in paths])
+ output = ' '.join(
+ '-object=%s' % os.path.normpath(path) for path in library_paths)
print(output)
return 0
diff --git a/chromium/tools/code_coverage/update_clang_coverage_tools.py b/chromium/tools/code_coverage/update_clang_coverage_tools.py
new file mode 100755
index 00000000000..8da3ef89836
--- /dev/null
+++ b/chromium/tools/code_coverage/update_clang_coverage_tools.py
@@ -0,0 +1,99 @@
+#!/usr/bin/env python
+# Copyright 2018 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.
+"""Download clang coverage tools (llvm-cov + llvm-profdata)"""
+
+import os
+import sys
+import urllib2
+
+sys.path.append(
+ os.path.join(
+ os.path.dirname(__file__), os.path.pardir, os.path.pardir,
+ 'third_party'))
+import coverage_utils
+
+sys.path.append(
+ os.path.join(
+ os.path.dirname(__file__), os.path.pardir, os.path.pardir, 'tools',
+ 'clang', 'scripts'))
+import update as clang_update
+
+
+# TODO(crbug.com/759794): remove this function once tools get included to
+# Clang bundle:
+# https://chromium-review.googlesource.com/c/chromium/src/+/688221
+def DownloadCoverageToolsIfNeeded():
+ """Temporary solution to download llvm-profdata and llvm-cov tools."""
+
+ def _GetRevisionFromStampFile(stamp_file_path):
+ """Returns a pair of revision number by reading the build stamp file.
+
+ Args:
+ stamp_file_path: A path the build stamp file created by
+ tools/clang/scripts/update.py.
+ Returns:
+ A pair of integers represeting the main and sub revision respectively.
+ """
+ if not os.path.exists(stamp_file_path):
+ return 0, 0
+
+ with open(stamp_file_path) as stamp_file:
+ stamp_file_line = stamp_file.readline()
+ if ',' in stamp_file_line:
+ package_version = stamp_file_line.rstrip().split(',')[0]
+ else:
+ package_version = stamp_file_line.rstrip()
+
+ clang_revision_str, clang_sub_revision_str = package_version.split('-')
+ return int(clang_revision_str), int(clang_sub_revision_str)
+
+ cov_path = os.path.join(clang_update.LLVM_BUILD_DIR, 'llvm-cov')
+ profdata_path = os.path.join(clang_update.LLVM_BUILD_DIR, 'llvm-profdata')
+
+ host_platform = coverage_utils.GetHostPlatform()
+ clang_revision, clang_sub_revision = _GetRevisionFromStampFile(
+ clang_update.STAMP_FILE)
+
+ coverage_revision_stamp_file = os.path.join(
+ os.path.dirname(clang_update.STAMP_FILE), 'cr_coverage_revision')
+ coverage_revision, coverage_sub_revision = _GetRevisionFromStampFile(
+ coverage_revision_stamp_file)
+
+ has_coverage_tools = (
+ os.path.exists(cov_path)
+ and os.path.exists(profdata_path))
+
+ if (has_coverage_tools and coverage_revision == clang_revision and
+ coverage_sub_revision == clang_sub_revision):
+ # LLVM coverage tools are up to date, bail out.
+ return
+
+ package_version = '%d-%d' % (clang_revision, clang_sub_revision)
+ coverage_tools_file = 'llvm-code-coverage-%s.tgz' % package_version
+
+ # The code below follows the code from tools/clang/scripts/update.py.
+ if host_platform == 'mac':
+ coverage_tools_url = clang_update.CDS_URL + '/Mac/' + coverage_tools_file
+ elif host_platform == 'linux':
+ coverage_tools_url = (
+ clang_update.CDS_URL + '/Linux_x64/' + coverage_tools_file)
+ else:
+ assert host_platform == 'win'
+ coverage_tools_url = (clang_update.CDS_URL + '/Win/' + coverage_tools_file)
+
+ try:
+ clang_update.DownloadAndUnpack(
+ coverage_tools_url, clang_update.LLVM_BUILD_DIR)
+ with open(coverage_revision_stamp_file, 'w') as file_handle:
+ file_handle.write('%s,%s' % (package_version, host_platform))
+ file_handle.write('\n')
+ except urllib2.URLError:
+ raise Exception(
+ 'Failed to download coverage tools: %s.' % coverage_tools_url)
+
+
+if __name__ == '__main__':
+ DownloadCoverageToolsIfNeeded()
+ sys.exit(0)
diff --git a/chromium/tools/cygprofile/cluster.py b/chromium/tools/cygprofile/cluster.py
new file mode 100644
index 00000000000..b20372aed82
--- /dev/null
+++ b/chromium/tools/cygprofile/cluster.py
@@ -0,0 +1,275 @@
+# Copyright 2018 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.
+
+"""Clustering for function call-graph.
+
+See the Clustering class for a detailed description.
+"""
+
+import collections
+import itertools
+import logging
+
+
+Neighbor = collections.namedtuple('Neighbor', ('src', 'dst', 'dist'))
+
+
+class Clustering(object):
+ """Cluster symbols.
+
+ We are given a list of the first function calls, ordered by
+ time. There are multiple lists: different benchmarks run multiple
+ times, as well as list from startup and then a second list after
+ startup (5 seconds) that runs until the benchmark memory dump.
+
+ We have evidence (see below) that this simple ordering of code from a
+ single profiling run (a load of a website) improves performance,
+ presumably by improving code locality. To reconstruct this ordering
+ using profiling information from multiple files, we cluster. Doing
+ this clustering over multiple runs on the speedometer benchmark
+ recovered speedometer performance compared with the legacy benchmark.
+
+ For each offset list, we record the distances between each symbol and
+ its neighborhood of the following k symbols (k=19, chosen
+ arbitrarily). For example, if we have an offset list of symbols
+ 'abcdef', we add the neighbors (a->b, 1), (a->c, 2), (b->c, 1), (b->e,
+ 3), etc. Then we average distances of a given neighbor pair over all
+ seen symbol lists. If we see an inversion (for example, (b->a, 3), we
+ use this as a distance of -3). For each file that a given pair does
+ not appear, that is, if the pair does not appear in that file or they
+ are separated by 20 symbols, we use a large distance D (D=1000). The
+ distances are then averages over all files. If the average is
+ negative, the neighbor pair is inverted and the distance flipped. The
+ idea is that if two symbols appear near each other in all profiling
+ runs, there is high confidence that they are usually called
+ together. If they don't appear near in some runs, there is less
+ confidence that they should be colocated. Symbol distances are taken
+ only as following distances to avoid confusing double-counting
+ possibilities as well as to give a clear ordering to combining
+ clusters.
+
+ Neighbors are sorted, and starting with the shortest distance, symbols
+ are coalesced into clusters. If the neighbor pair is (a->b), the
+ clusters containing a and b are combined in that order. If a and b are
+ already in the same cluster, nothing happens. After processing all
+ neighbors there is usually only one cluster; if there are multiple
+ clusters they are combined in order from largest to smallest (although
+ that choice may not matter).
+
+ Cluster merging may optionally be halted if they get above the size
+ of an android page. As of November 2018 this slightly reduces
+ performance and should not be used (1.7% decline in speedometer2,
+ 450K native library memory regression).
+ """
+ NEIGHBOR_DISTANCE = 20
+ FAR_DISTANCE = 1000
+ MAX_CLUSTER_SIZE = 4096 # 4k pages on android.
+
+ class _Cluster(object):
+ def __init__(self, syms, size):
+ assert len(set(syms)) == len(syms), 'Duplicated symbols in cluster'
+ self._syms = syms
+ self._size = size
+
+ @property
+ def syms(self):
+ return self._syms
+
+ @property
+ def binary_size(self):
+ return self._size
+
+ @classmethod
+ def ClusteredSymbolLists(cls, sym_lists, size_map):
+ c = cls()
+ c.AddSymbolLists(sym_lists)
+ return c.ClusterToList(size_map)
+
+ def __init__(self):
+ self._num_lists = None
+ self._neighbors = None
+ self._cluster_map = {}
+ self._symbol_size = lambda _: 0 # Maps a symbol to a size.
+
+ def _MakeCluster(self, syms):
+ c = self._Cluster(syms, sum(self._symbol_size(s) for s in syms))
+ for s in syms:
+ self._cluster_map[s] = c
+ return c
+
+ def ClusterOf(self, s):
+ if isinstance(s, self._Cluster):
+ assert self._cluster_map[s.syms[0]] == s
+ return s
+ if s in self._cluster_map:
+ return self._cluster_map[s]
+ return self._MakeCluster([s])
+
+ def Combine(self, a, b):
+ """Combine clusters.
+
+ Args:
+ a, b: Clusters or str. The canonical cluster (ClusterOf) will be
+ used to do the combining.
+
+ Returns:
+ A merged cluster from a and b, or None if a and b are in the same cluster.
+ """
+ canonical_a = self.ClusterOf(a)
+ canonical_b = self.ClusterOf(b)
+ if canonical_a == canonical_b:
+ return None
+ return self._MakeCluster(canonical_a._syms + canonical_b._syms)
+
+ def AddSymbolLists(self, sym_lists):
+ self._num_lists = len(sym_lists)
+ self._neighbors = self._CoalesceNeighbors(
+ self._ConstructNeighbors(sym_lists))
+
+ def _ConstructNeighbors(self, sym_lists):
+ neighbors = []
+ for sym_list in sym_lists:
+ for i, s in enumerate(sym_list):
+ for j in xrange(i + 1, min(i + self.NEIGHBOR_DISTANCE, len(sym_list))):
+ if s == sym_list[j]:
+ # Free functions that are static inline seem to be the only
+ # source of these duplicates.
+ continue
+ neighbors.append(Neighbor(s, sym_list[j], j - i))
+ logging.info('Constructed %s symbol neighbors', len(neighbors))
+ return neighbors
+
+ def _CoalesceNeighbors(self, neighbors):
+ pairs = collections.defaultdict(list)
+ for n in neighbors:
+ pairs[(n.src, n.dst)].append(n.dist)
+ coalesced = []
+ logging.info('Will coalesce over %s neighbor pairs', len(pairs))
+ count = 0
+ for (s, t) in pairs:
+ assert s != t, '{} != {}'.format(s, t)
+ if (t, s) in pairs and t < s:
+ # Only process each unordered pair once.
+ continue
+ count += 1
+ if not (count % 1e6):
+ logging.info('tick')
+ distances = []
+ if (s, t) in pairs:
+ distances.extend(pairs[(s, t)])
+ if (t, s) in pairs:
+ distances.extend(-d for d in pairs[(t, s)])
+ if distances:
+ num_missing = self._num_lists - len(distances)
+ avg_distance = (float(sum(distances)) +
+ self.FAR_DISTANCE * num_missing) / self._num_lists
+ if avg_distance > 0:
+ coalesced.append(Neighbor(s, t, avg_distance))
+ else:
+ coalesced.append(Neighbor(t, s, avg_distance))
+ return coalesced
+
+ def ClusterToList(self, size_map=None):
+ """Merge the clusters with the smallest distances.
+
+ Args:
+ size_map ({symbol: size} or None): Map symbol names to their size. Cluster
+ growth will be stopped at MAX_CLUSTER_SIZE. If None, sizes are taken to
+ be zero and cluster growth is not stopped.
+
+ Returns:
+ An ordered list of symbols from AddSymbolLists, appropriately clustered.
+ """
+ if size_map:
+ self._symbol_size = lambda s: size_map[s]
+ if not self._num_lists or not self._neighbors:
+ # Some sort of trivial set of symbol lists, such as all being
+ # length 1. Return an empty ordering.
+ return []
+ logging.info('Sorting %s neighbors', len(self._neighbors))
+ self._neighbors.sort(key=lambda n: (-n.dist, n.src, n.dst))
+ logging.info('Clustering...')
+ count = 0
+ while self._neighbors:
+ count += 1
+ if not (count % 1e6):
+ logging.info('tock')
+ neighbor = self._neighbors.pop()
+ src = self.ClusterOf(neighbor.src)
+ dst = self.ClusterOf(neighbor.dst)
+ if (src == dst or
+ src.binary_size + dst.binary_size > self.MAX_CLUSTER_SIZE):
+ continue
+ self.Combine(src, dst)
+ if size_map:
+ clusters_by_size = sorted(list(set(self._cluster_map.values())),
+ key=lambda c: -c.binary_size)
+ else:
+ clusters_by_size = sorted(list(set(self._cluster_map.values())),
+ key=lambda c: -len(c.syms))
+ logging.info('Produced %s clusters', len(clusters_by_size))
+ logging.info('Top sizes: %s', ['{}/{}'.format(len(c.syms), c.binary_size)
+ for c in clusters_by_size[:4]])
+ logging.info('Bottom sizes: %s', ['{}/{}'.format(len(c.syms), c.binary_size)
+ for c in clusters_by_size[-4:]])
+ ordered_syms = []
+ for c in clusters_by_size:
+ ordered_syms.extend(c.syms)
+ assert len(ordered_syms) == len(set(ordered_syms)), 'Duplicated symbols!'
+ return ordered_syms
+
+
+def ClusterOffsets(profiles, processor, limit_cluster_size=False):
+ """Cluster profile offsets.
+
+ Args:
+ profiles (ProfileManager) Manager of the profile dump files.
+ processor (SymbolOffsetProcessor) Symbol table processor for the dumps.
+
+ Returns:
+ A list of clustered symbol offsets.
+ """
+ raw_offsets = profiles.GetProcessOffsetLists()
+ process_symbols = collections.defaultdict(list)
+ seen_symbols = set()
+ for p in raw_offsets:
+ for offsets in raw_offsets[p]:
+ symbol_names = processor.GetOrderedSymbols(
+ processor.GetReachedOffsetsFromDump(offsets))
+ process_symbols[p].append(symbol_names)
+ seen_symbols |= set(symbol_names)
+ if limit_cluster_size:
+ name_map = processor.NameToSymbolMap()
+ size_map = {name: name_map[name].size for name in seen_symbols}
+ else:
+ size_map = None
+
+ # Process names from the profile dumps that are treated specially.
+ _RENDERER = 'renderer'
+ _BROWSER = 'browser'
+
+ assert _RENDERER in process_symbols
+ assert _BROWSER in process_symbols
+
+ renderer_clustering = Clustering.ClusteredSymbolLists(
+ process_symbols[_RENDERER], size_map)
+ browser_clustering = Clustering.ClusteredSymbolLists(
+ process_symbols[_BROWSER], size_map)
+ other_lists = []
+ for process, syms in process_symbols.items():
+ if process not in (_RENDERER, _BROWSER):
+ other_lists.extend(syms)
+ if other_lists:
+ other_clustering = Clustering.ClusteredSymbolLists(other_lists, size_map)
+ else:
+ other_clustering = []
+
+ # Start with the renderer cluster to favor rendering performance.
+ final_ordering = [s for s in renderer_clustering]
+ seen = set(final_ordering)
+ final_ordering.extend(s for s in browser_clustering if s not in seen)
+ seen |= set(browser_clustering)
+ final_ordering.extend(s for s in other_clustering if s not in seen)
+
+ return final_ordering
diff --git a/chromium/tools/cygprofile/cluster_unittest.py b/chromium/tools/cygprofile/cluster_unittest.py
new file mode 100755
index 00000000000..249811ca0e3
--- /dev/null
+++ b/chromium/tools/cygprofile/cluster_unittest.py
@@ -0,0 +1,136 @@
+#!/usr/bin/env vpython
+# Copyright 2018 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.
+
+"""Tests for cluster.py."""
+
+import unittest
+
+import cluster
+import process_profiles
+from test_utils import (ProfileFile,
+ SimpleTestSymbol,
+ TestProfileManager,
+ TestSymbolOffsetProcessor)
+
+
+class ClusteringTestCase(unittest.TestCase):
+ def testClusterOf(self):
+ clstr = cluster.Clustering()
+ c = clstr.ClusterOf('a')
+ self.assertEqual(['a'], c.syms)
+ c = clstr._MakeCluster(['a', 'b', 'c'])
+ self.assertEqual(c, clstr.ClusterOf('a'))
+ self.assertEqual(c, clstr.ClusterOf('b'))
+ self.assertEqual(c, clstr.ClusterOf('c'))
+
+ def testClusterCombine(self):
+ clstr = cluster.Clustering()
+ x = clstr._MakeCluster(['a', 'b'])
+ self.assertEqual(x, clstr.ClusterOf('a'))
+ self.assertEqual(x, clstr.ClusterOf('b'))
+
+ y = clstr._MakeCluster(['c'])
+ self.assertEqual(y, clstr.ClusterOf('c'))
+
+ z = clstr.Combine(y, x)
+ self.assertEqual(['c', 'a', 'b'], z.syms)
+ self.assertEqual(z, clstr.ClusterOf('a'))
+ self.assertEqual(z, clstr.ClusterOf('b'))
+ self.assertEqual(z, clstr.ClusterOf('c'))
+
+ def testClusteringDistances(self):
+ c = cluster.Clustering()
+ c.NEIGHBOR_DISTANCE = 3
+ c.AddSymbolLists([list('abcd'), list('acbe'), list('bacf'),
+ list('badf'), list('baef')])
+ distances = {}
+ for n in c._neighbors:
+ self.assertFalse((n.src, n.dst) in distances)
+ distances[(n.src, n.dst)] = n.dist
+ self.assertEqual(13, len(distances))
+ self.assertEqual((2 + 1 + 1 + 2000) / 5., distances[('a', 'c')])
+ self.assertEqual((1 + 4000) / 5., distances[('a', 'd')])
+ self.assertEqual((1 + 4000) / 5., distances[('a', 'e')])
+ self.assertEqual((2 + 2 + 2 + 2000) / 5., distances[('a', 'f')])
+ self.assertEqual(0, distances[('b', 'a')])
+ self.assertEqual((1 + -1 + 2 + 2000) / 5., distances[('b', 'c')])
+ self.assertTrue(('b', 'd') in distances)
+ self.assertTrue(('b', 'e') in distances)
+ self.assertTrue(('c', 'd') in distances)
+ self.assertTrue(('c', 'e') in distances)
+ self.assertTrue(('c', 'f') in distances)
+ self.assertTrue(('d', 'f') in distances)
+ self.assertTrue(('e', 'f') in distances)
+
+ def testClusterToList(self):
+ c = cluster.Clustering()
+ c.NEIGHBOR_DISTANCE = 3
+ c.AddSymbolLists([list('abcd'), list('acbe'), list('bacf'),
+ list('badf'), list('baef')])
+ self.assertEqual(list('bacfed'), c.ClusterToList())
+
+ def testClusterOneList(self):
+ c = cluster.Clustering()
+ c.NEIGHBOR_DISTANCE = 3
+ c.AddSymbolLists([list('fedcba')])
+ self.assertEqual(list('fedcba'), c.ClusterToList())
+
+ def testClusterShortList(self):
+ c = cluster.Clustering()
+ c.NEIGHBOR_DISTANCE = 3
+ c.AddSymbolLists([list('ab')])
+ self.assertEqual(list('ab'), c.ClusterToList())
+
+ def testClusterReallyShortList(self):
+ c = cluster.Clustering()
+ c.NEIGHBOR_DISTANCE = 3
+ c.AddSymbolLists([list('a')])
+ self.assertEqual([], c.ClusterToList())
+
+ def testSizedClusterToList(self):
+ c = cluster.Clustering()
+ c.NEIGHBOR_DISTANCE = 3
+ c.MAX_CLUSTER_SIZE = 1 # Will supress all clusters
+ size_map = {'a': 3,
+ 'b': 4,
+ 'c': 5,
+ 'd': 6,
+ 'e': 7,
+ 'f': 8}
+ c.AddSymbolLists([list('abcd'), list('acbe'), list('bacf'),
+ list('badf'), list('baef')])
+ self.assertEqual(list('fedcba'), c.ClusterToList(size_map))
+
+
+ def testClusterOffsets(self):
+ processor = TestSymbolOffsetProcessor([
+ SimpleTestSymbol('linker_script_start_of_text', 0, 0),
+ SimpleTestSymbol('1', 1000, 999),
+ SimpleTestSymbol('2', 2000, 999),
+ SimpleTestSymbol('3', 3000, 999),
+ SimpleTestSymbol('4', 4000, 16),
+ SimpleTestSymbol('5', 5000, 16),
+ SimpleTestSymbol('6', 6000, 999),
+ SimpleTestSymbol('7', 7000, 16),
+ SimpleTestSymbol('8', 8000, 999),
+ SimpleTestSymbol('9', 9000, 16),
+ ])
+ mgr = TestProfileManager({
+ ProfileFile(40, 0, ''): [1000, 2000, 3000],
+ ProfileFile(50, 1, ''): [3000, 4000, 5000],
+ ProfileFile(51, 0, 'renderer'): [2000, 3000, 6000],
+ ProfileFile(51, 1, 'gpu-process'): [6000, 7000],
+ ProfileFile(70, 0, ''): [1000, 2000, 6000, 8000, 9000],
+ ProfileFile(70, 1, ''): [9000, 5000, 3000]})
+ syms = cluster.ClusterOffsets(mgr, processor, False)
+ self.assertListEqual(list('236148957'), syms)
+
+ syms = cluster.ClusterOffsets(mgr, processor, True)
+ self.assertListEqual(list('236489517'), syms)
+
+
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/chromium/tools/cygprofile/compare_orderfiles.py b/chromium/tools/cygprofile/compare_orderfiles.py
index 272afeb0417..a3634af9ef3 100755
--- a/chromium/tools/cygprofile/compare_orderfiles.py
+++ b/chromium/tools/cygprofile/compare_orderfiles.py
@@ -32,17 +32,30 @@ def ParseOrderfile(filename):
with open(filename, 'r') as f:
lines = [line.strip() for line in f]
- for entry in lines:
- # Keep only sections, not symbols (symbols don't contain '.').
- # We could only keep symbols, but then old orderfiles would not be parsed.
- if '.' not in entry:
- continue
- # Example: .text.startup.BLA
- symbol_name = entry[entry.rindex('.'):]
- if symbol_name in already_seen or symbol_name == '*' or entry == '.text':
- continue
- already_seen.add(symbol_name)
- symbols.append(symbol_name)
+ # The (new) orderfiles that are oriented at the LLD linker contain only symbol
+ # names (i.e. not prefixed with '.text'). The (old) orderfiles aimed at the
+ # Gold linker were patched by duplicating symbols prefixed with '.text.hot.',
+ # '.text.unlikely.' and '.text.', hence the appearance of '.text' on the first
+ # symbol indicates such a legacy orderfile.
+ if not lines[0].startswith('.text.'):
+ for entry in lines:
+ symbol_name = entry.rstrip('\n')
+ assert symbol_name != '*' and symbol_name != '.text'
+ already_seen.add(symbol_name)
+ symbols.append(symbol_name)
+ else:
+ for entry in lines:
+ # Keep only (input) section names, not symbol names (only rare special
+ # symbols contain '.'). We could only keep symbols, but then some even
+ # older orderfiles would not be parsed.
+ if '.' not in entry:
+ continue
+ # Example: .text.startup.BLA
+ symbol_name = entry[entry.rindex('.'):]
+ if symbol_name in already_seen or symbol_name == '*' or entry == '.text':
+ continue
+ already_seen.add(symbol_name)
+ symbols.append(symbol_name)
return symbols
@@ -167,6 +180,8 @@ def CreateArgumentParser():
parser = argparse.ArgumentParser()
parser.add_argument('--first', help='First orderfile')
parser.add_argument('--second', help='Second orderfile')
+ parser.add_argument('--keep', default=False, action='store_true',
+ help='Keep the downloaded orderfiles')
parser.add_argument('--from-commit', help='Analyze the difference in the '
'orderfile from an orderfile bot commit.')
parser.add_argument('--csv-output', help='Appends the result to a CSV file.')
@@ -190,8 +205,9 @@ def main():
f.write('%s,%d,%d,%d,%d,%f\n' % tuple(
[args.from_commit] + list(result)))
finally:
- os.remove(first)
- os.remove(second)
+ if not args.keep:
+ os.remove(first)
+ os.remove(second)
else:
return False
return True
diff --git a/chromium/tools/cygprofile/cygprofile_utils.py b/chromium/tools/cygprofile/cygprofile_utils.py
index 4169c6b755d..6d83d8f5f11 100644
--- a/chromium/tools/cygprofile/cygprofile_utils.py
+++ b/chromium/tools/cygprofile/cygprofile_utils.py
@@ -9,6 +9,10 @@ import logging
import os
import re
+
+START_OF_TEXT_SYMBOL = 'linker_script_start_of_text'
+
+
class WarningCollector(object):
"""Collects warnings, but limits the number printed to a set value."""
def __init__(self, max_warnings, level=logging.WARNING):
diff --git a/chromium/tools/cygprofile/orderfile_generator_backend.py b/chromium/tools/cygprofile/orderfile_generator_backend.py
index b043fce3650..f1eee550d18 100755
--- a/chromium/tools/cygprofile/orderfile_generator_backend.py
+++ b/chromium/tools/cygprofile/orderfile_generator_backend.py
@@ -27,10 +27,10 @@ import sys
import tempfile
import time
+import cluster
import cyglog_to_orderfile
import cygprofile_utils
import patch_orderfile
-import phased_orderfile
import process_profiles
import profile_android_startup
import symbol_extractor
@@ -269,10 +269,6 @@ class ClankCompiler(object):
'is_chrome_branded=true',
'is_debug=false',
'is_official_build=true',
- # We have to build with no symbols if profiling and minimal symbols
- # otherwise for libchrome.so to fit under the 4 GB limit.
- # crbug.com/574476
- 'symbol_level=' + ('0' if instrumented else '1'),
'target_cpu="' + self._arch + '"',
'target_os="android"',
'use_goma=' + str(self._use_goma).lower(),
@@ -531,25 +527,11 @@ class OrderfileGenerator(object):
profiles = process_profiles.ProfileManager(files)
processor = process_profiles.SymbolOffsetProcessor(
self._compiler.lib_chrome_so)
- phaser = phased_orderfile.PhasedAnalyzer(profiles, processor)
- if self._options.offsets_for_memory:
- profile_offsets = phaser.GetOffsetsForMemoryFootprint()
- else:
- profile_offsets = phaser.GetOffsetsForStartup()
- self._output_data['orderfile_size'] = {
- 'startup_kib': processor.OffsetsPrimarySize(
- profile_offsets.startup) / 1024,
- 'common_kib': processor.OffsetsPrimarySize(
- profile_offsets.common) / 1024,
- 'interaction_kib': processor.OffsetsPrimarySize(
- profile_offsets.interaction) / 1024}
-
- offsets_list = (profile_offsets.startup +
- profile_offsets.common +
- profile_offsets.interaction)
- ordered_symbols = processor.GetOrderedSymbols(offsets_list)
+ ordered_symbols= cluster.ClusterOffsets(profiles, processor)
if not ordered_symbols:
raise Exception('Failed to get ordered symbols')
+ self._output_data['offsets_kib'] = processor.SymbolsSize(
+ ordered_symbols) / 1024
with open(self._GetUnpatchedOrderfileFilename(), 'w') as orderfile:
orderfile.write('\n'.join(ordered_symbols))
@@ -658,7 +640,7 @@ class OrderfileGenerator(object):
Args:
filename: (str) Orderfile to upload.
"""
- # First compute hashes so that we can download them later if we need to
+ # First compute hashes so that we can download them later if we need to.
self._step_recorder.BeginStep('Compute hash for ' + filename)
self._RecordHash(filename)
if self._options.buildbot:
@@ -666,6 +648,13 @@ class OrderfileGenerator(object):
self._orderfile_updater.UploadToCloudStorage(
filename, use_debug_location=False)
+ def UploadReadyOrderfiles(self):
+ self._step_recorder.BeginStep('Upload Ready Orderfiles')
+ for file_name in [self._GetUnpatchedOrderfileFilename(),
+ self._GetPathToOrderfile()]:
+ self._orderfile_updater.UploadToCloudStorage(
+ file_name, use_debug_location=False)
+
def _GetHashFilePathAndContents(self, base_file):
"""Gets the name and content of the hash file created from uploading the
given file.
@@ -707,7 +696,11 @@ class OrderfileGenerator(object):
self._options.max_load, self._options.use_goma,
self._options.goma_dir, self._options.system_health_orderfile,
self._options.monochrome)
- self._compiler.CompileChromeApk(True)
+ if not self._options.pregenerated_profiles:
+ # If there are pregenerated profiles, the instrumented build should
+ # not be changed to avoid invalidating the pregenerated profile
+ # offsets.
+ self._compiler.CompileChromeApk(True)
self._GenerateAndProcessProfile()
self._MaybeArchiveOrderfile(self._GetUnpatchedOrderfileFilename())
profile_uploaded = True
@@ -719,7 +712,7 @@ class OrderfileGenerator(object):
with file(self._options.manual_symbol_offsets) as f:
symbol_offsets = [int(x) for x in f.xreadlines()]
processor = process_profiles.SymbolOffsetProcessor(
- self._options.manual_libname)
+ self._compiler.manual_libname)
generator = cyglog_to_orderfile.OffsetOrderfileGenerator(
processor, cyglog_to_orderfile.ObjectFileProcessor(
self._options.manual_objdir))
@@ -815,7 +808,7 @@ def CreateArgumentParser():
'--use-goma', action='store_true', help='Enable GOMA.', default=False)
parser.add_argument('--adb-path', help='Path to the adb binary.')
- parser.add_argument('--no-system-health-orderfile', action='store_false',
+ parser.add_argument('--nosystem-health-orderfile', action='store_false',
dest='system_health_orderfile', default=True,
help=('Create an orderfile based on an about:blank '
'startup benchmark instead of system health '
@@ -823,10 +816,6 @@ def CreateArgumentParser():
parser.add_argument('--monochrome', action='store_true',
help=('Compile and instrument monochrome (for post-N '
'devices).'))
- parser.add_argument('--offsets-for-memory', action='store_true',
- help=('Favor memory savings in the orderfile. Used '
- 'with --system-health-orderfile.'),
- default=False)
parser.add_argument('--manual-symbol-offsets', default=None, type=str,
help=('File of list of ordered symbol offsets generated '
@@ -846,6 +835,11 @@ def CreateArgumentParser():
help=('Directory to save any profiles created. These can '
'be used with --pregenerated-profiles. Cannot be '
'used with --skip-profiles.'))
+ parser.add_argument('--upload-ready-orderfiles', action='store_true',
+ help=('Skip orderfile generation and manually upload '
+ 'orderfiles (both patched and unpatched) from '
+ 'their normal location in the tree to the cloud '
+ 'storage. DANGEROUS! USE WITH CARE!'))
profile_android_startup.AddProfileCollectionArguments(parser)
return parser
@@ -868,6 +862,8 @@ def CreateOrderfile(options, orderfile_updater_class):
try:
if options.verify:
generator._VerifySymbolOrder()
+ elif options.upload_ready_orderfiles:
+ return generator.UploadReadyOrderfiles()
else:
return generator.Generate()
finally:
diff --git a/chromium/tools/cygprofile/phased_orderfile.py b/chromium/tools/cygprofile/phased_orderfile.py
deleted file mode 100755
index 73b20b9f96e..00000000000
--- a/chromium/tools/cygprofile/phased_orderfile.py
+++ /dev/null
@@ -1,326 +0,0 @@
-#!/usr/bin/env vpython
-# Copyright 2018 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.
-
-"""Utilities for creating a phased orderfile.
-
-The profile dump format is described in process_profiles.py. These tools assume
-profiling has been done with two phases.
-
-The first phase, labeled 0 in the filename, is called "startup" and the second,
-labeled 1, is called "interaction". These two phases are used to create an
-orderfile with three parts: the code touched only in startup, the code
-touched only during interaction, and code common to the two phases. We refer to
-these parts as the orderfile phases.
-
-Example invocation, with PROFILE_DIR the location of the profile data pulled
-from a device and LIBTYPE either monochrome or chrome as appropriate.
-./tools/cygprofile/phased_orderfile.py \
- --profile-directory=PROFILE_DIR \
- --instrumented-build-dir=out-android/Orderfile/ \
- --library-name=libLIBTYPE.so --offset-output-base=PROFILE_DIR/offset
-"""
-
-import argparse
-import collections
-import glob
-import itertools
-import logging
-import os.path
-
-import process_profiles
-
-
-# Files matched when using this script to analyze directly (see main()).
-PROFILE_GLOB = 'profile-hitmap-*.txt_*'
-
-
-OrderfilePhaseOffsets = collections.namedtuple(
- 'OrderfilePhaseOffsets', ('startup', 'common', 'interaction'))
-
-
-class PhasedAnalyzer(object):
- """A class which collects analysis around phased orderfiles.
-
- It maintains common data such as symbol table information to make analysis
- more convenient.
- """
- # The process name of the browser as used in the profile dumps.
- BROWSER = 'browser'
-
- def __init__(self, profiles, processor):
- """Intialize.
-
- Args:
- profiles (ProfileManager) Manager of the profile dump files.
- processor (SymbolOffsetProcessor) Symbol table processor for the dumps.
- """
- self._profiles = profiles
- self._processor = processor
-
- # These members cache various computed values.
- self._phase_offsets = None
- self._annotated_offsets = None
- self._process_list = None
-
- def GetOffsetsForMemoryFootprint(self):
- """Get offsets organized to minimize the memory footprint.
-
- The startup, common and interaction offsets are computed for each
- process. Any symbols used by one process in startup or interaction that are
- used in a different phase by another process are moved to the common
- section. This should minimize the memory footprint by keeping startup- or
- interaction-only pages clean, at the possibly expense of startup time, as
- more of the common section will need to be loaded. To mitigate that effect,
- symbols moved from startup are placed at the beginning of the common
- section, and those moved from interaction are placed at the end.
-
- Browser startup symbols are placed at the beginning of the startup section
- in the hope of working out with native library prefetching to minimize
- startup time.
-
- Returns:
- OrdrerfilePhaseOffsets as described above.
- """
- startup = []
- common_head = []
- common = []
- common_tail = []
- interaction = []
-
- process_offsets = {p: self._GetCombinedProcessOffsets(p)
- for p in self._GetProcessList()}
- assert self.BROWSER in process_offsets.keys()
-
- any_startup = set()
- any_interaction = set()
- any_common = set()
- for offsets in process_offsets.itervalues():
- any_startup |= set(offsets.startup)
- any_interaction |= set(offsets.interaction)
- any_common |= set(offsets.common)
-
- already_added = set()
- # This helper function splits |offsets|, adding to |alternate| all offsets
- # that are in |interfering| or are already known to be common, and otherwise
- # adding to |target|.
- def add_process_offsets(offsets, interfering, target, alternate):
- for o in offsets:
- if o in already_added:
- continue
- if o in interfering or o in any_common:
- alternate.append(o)
- else:
- target.append(o)
- already_added.add(o)
-
- # This helper updates |common| with new members of |offsets|.
- def add_common_offsets(offsets):
- for o in offsets:
- if o not in already_added:
- common.append(o)
- already_added.add(o)
-
- add_process_offsets(process_offsets[self.BROWSER].startup,
- any_interaction, startup, common_head)
- add_process_offsets(process_offsets[self.BROWSER].interaction,
- any_startup, interaction, common_tail)
- add_common_offsets(process_offsets[self.BROWSER].common)
-
- for p in process_offsets:
- if p == self.BROWSER:
- continue
- add_process_offsets(process_offsets[p].startup,
- any_interaction, startup, common_head)
- add_process_offsets(process_offsets[p].interaction,
- any_startup, interaction, common_tail)
- add_common_offsets(process_offsets[p].common)
-
- return OrderfilePhaseOffsets(
- startup=startup,
- common=(common_head + common + common_tail),
- interaction=interaction)
-
- def GetOffsetsForStartup(self):
- """Get offsets organized to minimize startup time.
-
- The startup, common and interaction offsets are computed for each
- process. Any symbol used by one process in interaction that appears in a
- different phase in another process is moved to common, but any symbol that
- appears in startup for *any* process stays in startup.
-
- This should maximize startup performance at the expense of increasing the
- memory footprint, as some startup symbols will not be able to page out.
-
- The startup symbols in the browser process appear first in the hope of
- working out with native library prefetching to minimize startup time.
- """
- startup = []
- common = []
- interaction = []
- already_added = set()
-
- process_offsets = {p: self._GetCombinedProcessOffsets(p)
- for p in self._GetProcessList()}
- startup.extend(process_offsets[self.BROWSER].startup)
- already_added |= set(process_offsets[self.BROWSER].startup)
- common.extend(process_offsets[self.BROWSER].common)
- already_added |= set(process_offsets[self.BROWSER].common)
- interaction.extend(process_offsets[self.BROWSER].interaction)
- already_added |= set(process_offsets[self.BROWSER].interaction)
-
- for process, offsets in process_offsets.iteritems():
- if process == self.BROWSER:
- continue
- startup.extend(o for o in offsets.startup
- if o not in already_added)
- already_added |= set(offsets.startup)
- common.extend(o for o in offsets.common
- if o not in already_added)
- already_added |= set(offsets.common)
- interaction.extend(o for o in offsets.interaction
- if o not in already_added)
- already_added |= set(offsets.interaction)
-
- return OrderfilePhaseOffsets(
- startup=startup, common=common, interaction=interaction)
-
- def _GetCombinedProcessOffsets(self, process):
- """Combine offsets across runs for a particular process.
-
- Args:
- process (str) The process to combine.
-
- Returns:
- OrderfilePhaseOffsets, the startup, common and interaction offsets for the
- process in question. The offsets are sorted arbitrarily.
- """
- (startup, common, interaction) = ([], [], [])
- assert self._profiles.GetPhases() == set([0,1]), (
- 'Unexpected phases {}'.format(self._profiles.GetPhases()))
- for o in self._GetAnnotatedOffsets():
- startup_count = o.Count(0, process)
- interaction_count = o.Count(1, process)
- if not startup_count and not interaction_count:
- continue
- if startup_count and interaction_count:
- common.append(o.Offset())
- elif startup_count:
- startup.append(o.Offset())
- else:
- interaction.append(o.Offset())
- return OrderfilePhaseOffsets(
- startup=startup, common=common, interaction=interaction)
-
- def _GetAnnotatedOffsets(self):
- if self._annotated_offsets is None:
- self._annotated_offsets = self._profiles.GetAnnotatedOffsets()
- self._processor.TranslateAnnotatedSymbolOffsets(self._annotated_offsets)
- # A warning for missing offsets has already been emitted in
- # TranslateAnnotatedSymbolOffsets.
- self._annotated_offsets = filter(
- lambda offset: offset.Offset() is not None,
- self._annotated_offsets)
- return self._annotated_offsets
-
- def _GetProcessList(self):
- if self._process_list is None:
- self._process_list = set()
- for o in self._GetAnnotatedOffsets():
- self._process_list.update(o.Processes())
- return self._process_list
-
- def _GetOrderfilePhaseOffsets(self):
- """Compute the phase offsets for each run.
-
- Returns:
- [OrderfilePhaseOffsets] Each run corresponds to an OrderfilePhaseOffsets,
- which groups the symbol offsets discovered in the runs.
- """
- if self._phase_offsets is not None:
- return self._phase_offsets
-
- assert self._profiles.GetPhases() == set([0, 1]), (
- 'Unexpected phases {}'.format(self._profiles.GetPhases()))
- self._phase_offsets = []
- for first, second in zip(self._profiles.GetRunGroupOffsets(phase=0),
- self._profiles.GetRunGroupOffsets(phase=1)):
- all_first_offsets = self._processor.GetReachedOffsetsFromDump(first)
- all_second_offsets = self._processor.GetReachedOffsetsFromDump(second)
- first_offsets_set = set(all_first_offsets)
- second_offsets_set = set(all_second_offsets)
- common_offsets_set = first_offsets_set & second_offsets_set
- first_offsets_set -= common_offsets_set
- second_offsets_set -= common_offsets_set
-
- startup = [x for x in all_first_offsets
- if x in first_offsets_set]
-
- interaction = [x for x in all_second_offsets
- if x in second_offsets_set]
-
- common_seen = set()
- common = []
- for x in itertools.chain(all_first_offsets, all_second_offsets):
- if x in common_offsets_set and x not in common_seen:
- common_seen.add(x)
- common.append(x)
-
- self._phase_offsets.append(OrderfilePhaseOffsets(
- startup=startup,
- interaction=interaction,
- common=common))
-
- return self._phase_offsets
-
-
-def _CreateArgumentParser():
- parser = argparse.ArgumentParser(
- description='Compute statistics on phased orderfiles')
- parser.add_argument('--profile-directory', type=str, required=True,
- help=('Directory containing profile runs. Files '
- 'matching {} are used.'.format(PROFILE_GLOB)))
- parser.add_argument('--instrumented-build-dir', type=str,
- help='Path to the instrumented build (eg, out/Orderfile)',
- required=True)
- parser.add_argument('--library-name', default='libchrome.so',
- help=('Chrome shared library name (usually libchrome.so '
- 'or libmonochrome.so'))
- parser.add_argument('--offset-output-base', default=None, type=str,
- help=('If present, a base name to output offsets to. '
- 'No offsets are output if this is missing. The '
- 'base name is suffixed with _for_memory and '
- '_for_startup, corresponding to the two sets of '
- 'offsets produced.'))
- return parser
-
-
-def main():
- logging.basicConfig(level=logging.INFO)
- parser = _CreateArgumentParser()
- args = parser.parse_args()
- profiles = process_profiles.ProfileManager(itertools.chain.from_iterable(
- glob.glob(os.path.join(d, PROFILE_GLOB))
- for d in args.profile_directory.split(',')))
- processor = process_profiles.SymbolOffsetProcessor(os.path.join(
- args.instrumented_build_dir, 'lib.unstripped', args.library_name))
- phaser = PhasedAnalyzer(profiles, processor)
- for name, offsets in (
- ('_for_memory', phaser.GetOffsetsForMemoryFootprint()),
- ('_for_startup', phaser.GetOffsetsForStartup())):
- logging.info('%s Offset sizes (KiB):\n'
- '%s startup\n%s common\n%s interaction',
- name, processor.OffsetsPrimarySize(offsets.startup) / 1024,
- processor.OffsetsPrimarySize(offsets.common) / 1024,
- processor.OffsetsPrimarySize(offsets.interaction) / 1024)
- if args.offset_output_base is not None:
- with file(args.offset_output_base + name, 'w') as output:
- output.write('\n'.join(
- str(i) for i in (offsets.startup + offsets.common +
- offsets.interaction)))
- output.write('\n')
-
-
-if __name__ == '__main__':
- main()
diff --git a/chromium/tools/cygprofile/phased_orderfile_unittest.py b/chromium/tools/cygprofile/phased_orderfile_unittest.py
deleted file mode 100755
index 100121c9ea9..00000000000
--- a/chromium/tools/cygprofile/phased_orderfile_unittest.py
+++ /dev/null
@@ -1,122 +0,0 @@
-#!/usr/bin/env vpython
-# Copyright 2018 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.
-
-"""Tests for phased_orderfile.py."""
-
-import collections
-import unittest
-
-import phased_orderfile
-import process_profiles
-
-from test_utils import (ProfileFile,
- SimpleTestSymbol,
- TestSymbolOffsetProcessor,
- TestProfileManager)
-
-
-class Mod10Processor(process_profiles.SymbolOffsetProcessor):
- """A restricted mock for a SymbolOffsetProcessor.
-
- This only implements {Translate,Get}ReacheOffsetsFromDump, and works by
- mapping a dump offset to offset - (offset % 10). If the dump offset is
- negative, it is marked as not found.
- """
- def __init__(self):
- super(Mod10Processor, self).__init__(None)
-
- def _TranslateReachedOffsetsFromDump(self, items, get, update):
- for i in items:
- x = get(i)
- if x >= 0:
- update(i, x - (x % 10))
- else:
- update(i, None)
-
-
-class IdentityProcessor(process_profiles.SymbolOffsetProcessor):
- """A restricted mock for a SymbolOffsetProcessor.
-
- This only implements {Translate,Get}ReachedOffsetsFromDump, and maps the dump
- offset to itself. If the dump offset is negative, it is marked as not found.
- """
- def __init__(self):
- super(IdentityProcessor, self).__init__(None)
-
- def _TranslateReachedOffsetsFromDump(self, items, get, update):
- for i in items:
- x = get(i)
- if x >= 0:
- update(i, x)
- else:
- update(i, None)
-
-
-class PhasedOrderfileTestCase(unittest.TestCase):
-
- def setUp(self):
- self._file_counter = 0
-
- def testGetOrderfilePhaseOffsets(self):
- mgr = TestProfileManager({
- ProfileFile(0, 0): [12, 21, -1, 33],
- ProfileFile(0, 1): [31, 49, 52],
- ProfileFile(100, 0): [113, 128],
- ProfileFile(200, 1): [132, 146],
- ProfileFile(300, 0): [19, 20, 32],
- ProfileFile(300, 1): [24, 39]})
- phaser = phased_orderfile.PhasedAnalyzer(mgr, Mod10Processor())
- opo = lambda s, c, i: phased_orderfile.OrderfilePhaseOffsets(
- startup=s, common=c, interaction=i)
- self.assertListEqual([opo([10, 20], [30], [40, 50]),
- opo([110, 120], [], []),
- opo([], [], [130, 140]),
- opo([10], [20, 30], [])],
- phaser._GetOrderfilePhaseOffsets())
-
- def testGetCombinedProcessOffsets(self):
- mgr = TestProfileManager({
- ProfileFile(40, 0, ''): [1, 2, 3],
- ProfileFile(50, 1, ''): [3, 4, 5],
- ProfileFile(51, 0, 'renderer'): [2, 3, 6],
- ProfileFile(51, 1, 'gpu-process'): [6, 7],
- ProfileFile(70, 0, ''): [2, 8, 9],
- ProfileFile(70, 1, ''): [9]})
- phaser = phased_orderfile.PhasedAnalyzer(mgr, IdentityProcessor())
- offsets = phaser._GetCombinedProcessOffsets('browser')
- self.assertListEqual([1, 2, 8], sorted(offsets.startup))
- self.assertListEqual([4, 5], sorted(offsets.interaction))
- self.assertListEqual([3, 9], sorted(offsets.common))
-
- offsets = phaser._GetCombinedProcessOffsets('gpu-process')
- self.assertListEqual([], sorted(offsets.startup))
- self.assertListEqual([6, 7], sorted(offsets.interaction))
- self.assertListEqual([], sorted(offsets.common))
-
- self.assertListEqual(['browser', 'gpu-process', 'renderer'],
- sorted(phaser._GetProcessList()))
-
- def testGetOffsetVariations(self):
- mgr = TestProfileManager({
- ProfileFile(40, 0, ''): [1, 2, 3],
- ProfileFile(50, 1, ''): [3, 4, -10, 5],
- ProfileFile(51, 0, 'renderer'): [2, 3, 6],
- ProfileFile(51, 1, 'gpu-process'): [6, 7],
- ProfileFile(70, 0, ''): [2, 6, 8, 9],
- ProfileFile(70, 1, ''): [9]})
- phaser = phased_orderfile.PhasedAnalyzer(mgr, IdentityProcessor())
- offsets = phaser.GetOffsetsForMemoryFootprint()
- self.assertListEqual([1, 2, 8], offsets.startup)
- self.assertListEqual([6, 3, 9], offsets.common)
- self.assertListEqual([4, 5, 7], offsets.interaction)
-
- offsets = phaser.GetOffsetsForStartup()
- self.assertListEqual([1, 2, 6, 8], offsets.startup)
- self.assertListEqual([3, 9], offsets.common)
- self.assertListEqual([4, 5, 7], offsets.interaction)
-
-
-if __name__ == "__main__":
- unittest.main()
diff --git a/chromium/tools/cygprofile/process_profiles.py b/chromium/tools/cygprofile/process_profiles.py
index 592cce9441f..1da9861e1e9 100755
--- a/chromium/tools/cygprofile/process_profiles.py
+++ b/chromium/tools/cygprofile/process_profiles.py
@@ -6,6 +6,7 @@
"""Lists all the reached symbols from an instrumentation dump."""
import argparse
+import collections
import logging
import operator
import os
@@ -15,6 +16,7 @@ _SRC_PATH = os.path.abspath(os.path.join(
os.path.dirname(__file__), os.pardir, os.pardir))
path = os.path.join(_SRC_PATH, 'tools', 'cygprofile')
sys.path.append(path)
+import cygprofile_utils
import symbol_extractor
@@ -147,19 +149,21 @@ class SymbolOffsetProcessor(object):
symbols.append(self.OffsetToPrimaryMap()[o - 1].name)
else:
not_found += 1
- logging.warning('%d offsets do not have matching symbol', not_found)
+ if not_found:
+ logging.warning('%d offsets do not have matching symbol', not_found)
return symbols
- def OffsetsPrimarySize(self, offsets):
- """Computes the total primary size of a set of offsets.
+ def SymbolsSize(self, symbols):
+ """Computes the total size of a set of symbol names.
Args:
- offsets (int iterable) a set of offsets.
+ offsets (str iterable) a set of symbols.
Returns
int The sum of the primary size of the offsets.
"""
- return sum(self.OffsetToPrimaryMap()[x].size for x in offsets)
+ name_map = self.NameToSymbolMap()
+ return sum(name_map[sym].size for sym in symbols)
def GetReachedOffsetsFromDump(self, dump):
"""Find the symbol offsets from a list of binary offsets.
@@ -229,22 +233,15 @@ class SymbolOffsetProcessor(object):
update: (lambda item, int) As described above.
"""
dump_offset_to_symbol_info = self._GetDumpOffsetToSymbolInfo()
- logging.info('Offset to Symbol size = %d', len(dump_offset_to_symbol_info))
- reached_return_addresses_not_found = 0
for i in items:
dump_offset = get(i)
- idx = dump_offset / 4
- assert idx < len(dump_offset_to_symbol_info), (
+ idx = dump_offset / 2
+ assert dump_offset >= 0 and idx < len(dump_offset_to_symbol_info), (
'Dump offset out of binary range')
symbol_info = dump_offset_to_symbol_info[idx]
- if symbol_info is None:
- reached_return_addresses_not_found += 1
- update(i, None)
- else:
- update(i, symbol_info.offset)
- if reached_return_addresses_not_found:
- logging.warning('%d return addresses don\'t map to any symbol',
- reached_return_addresses_not_found)
+ assert symbol_info, ('A return address (offset = 0x{:08x}) does not map '
+ 'to any symbol'.format(dump_offset))
+ update(i, symbol_info.offset)
def _GetDumpOffsetToSymbolInfo(self):
"""Computes an array mapping each word in .text to a symbol.
@@ -254,14 +251,28 @@ class SymbolOffsetProcessor(object):
section, maps it to a symbol, or None.
"""
if self._offset_to_symbol_info is None:
- min_offset = min(s.offset for s in self.SymbolInfos())
+ start_syms = [s for s in self.SymbolInfos()
+ if s.name == cygprofile_utils.START_OF_TEXT_SYMBOL]
+ assert len(start_syms) == 1, 'Can\'t find unique start of text symbol'
+ start_of_text = start_syms[0].offset
max_offset = max(s.offset + s.size for s in self.SymbolInfos())
- text_length_words = (max_offset - min_offset) / 4
- self._offset_to_symbol_info = [None for _ in xrange(text_length_words)]
- for s in self.SymbolInfos():
- offset = s.offset - min_offset
- for i in range(offset / 4, (offset + s.size) / 4):
- self._offset_to_symbol_info[i] = s
+ text_length_halfwords = (max_offset - start_of_text) / 2
+ self._offset_to_symbol_info = [None] * text_length_halfwords
+ for sym in self.SymbolInfos():
+ offset = sym.offset - start_of_text
+ assert offset >= 0, ('Unexpected symbol before the start of text. '
+ 'Has the linker script broken?')
+ # The low bit of offset may be set to indicate a thumb instruction. The
+ # actual offset is still halfword aligned and so the low bit may be
+ # safely ignored in the division by two below.
+ for i in range(offset / 2, (offset + sym.size) / 2):
+ assert i < text_length_halfwords
+ other_symbol = self._offset_to_symbol_info[i]
+ # There may be overlapping symbols, for example fancy
+ # implementations for __ltsf2 and __gtsf2 (merging common tail
+ # code). In this case, keep the one that started first.
+ if other_symbol is None or other_symbol.offset > sym.offset:
+ self._offset_to_symbol_info[i] = sym
return self._offset_to_symbol_info
@@ -411,6 +422,13 @@ class ProfileManager(object):
phase, process)
return offset_map.values()
+ def GetProcessOffsetLists(self):
+ """Returns all symbol offsets lists, grouped by process."""
+ offsets_by_process = collections.defaultdict(list)
+ for f in self._filenames:
+ offsets_by_process[self._ProcessName(f)].append(self._ReadOffsets(f))
+ return offsets_by_process
+
def GetRunGroupOffsets(self, phase=None):
"""Merges files from each run group and returns offset list for each.
@@ -441,7 +459,7 @@ class ProfileManager(object):
@classmethod
def _ProcessName(cls, filename):
# The filename starts with 'profile-hitmap-' and ends with
- # '-PID-TIMESTAMP.text_X'. Anything in between is the process name. The
+ # '-PID-TIMESTAMP.txt_X'. Anything in between is the process name. The
# browser has an empty process name, which is insterted here.
process_name_parts = os.path.basename(filename).split('-')[2:-2]
if not process_name_parts:
diff --git a/chromium/tools/cygprofile/process_profiles_unittest.py b/chromium/tools/cygprofile/process_profiles_unittest.py
index 3bda20d02d0..d65c3880692 100755
--- a/chromium/tools/cygprofile/process_profiles_unittest.py
+++ b/chromium/tools/cygprofile/process_profiles_unittest.py
@@ -16,15 +16,16 @@ from test_utils import (ProfileFile,
TestProfileManager)
class ProcessProfilesTestCase(unittest.TestCase):
+ START_SYMBOL = 'linker_script_start_of_text'
def setUp(self):
- self.symbol_0 = SimpleTestSymbol('0', 0, 0)
- self.symbol_1 = SimpleTestSymbol('1', 8, 16)
+ self.symbol_0 = SimpleTestSymbol(self.START_SYMBOL, 0, 0)
+ self.symbol_1 = SimpleTestSymbol('1', 6, 16)
self.symbol_2 = SimpleTestSymbol('2', 32, 8)
self.symbol_3 = SimpleTestSymbol('3', 40, 12)
self.offset_to_symbol_info = (
- [None, None] + [self.symbol_1] * 4 + [None] * 2 + [self.symbol_2] * 2
- + [self.symbol_3] * 3)
+ [None] * 3 + [self.symbol_1] * 8 + [None] * 5 + [self.symbol_2] * 4 +
+ [self.symbol_3] * 6)
self.symbol_infos = [self.symbol_0, self.symbol_1,
self.symbol_2, self.symbol_3]
self._file_counter = 0
@@ -36,8 +37,22 @@ class ProcessProfilesTestCase(unittest.TestCase):
def testGetOffsetToSymbolInfo(self):
processor = TestSymbolOffsetProcessor(self.symbol_infos)
- offset_to_symbol_info = processor._GetDumpOffsetToSymbolInfo()
- self.assertListEqual(self.offset_to_symbol_info, offset_to_symbol_info)
+ self.assertListEqual(self.offset_to_symbol_info,
+ processor._GetDumpOffsetToSymbolInfo())
+
+ def testOverlappingSymbols(self):
+ symbol_1 = SimpleTestSymbol(self.START_SYMBOL, 6, 8)
+ symbol_2 = SimpleTestSymbol('2', 10, 10)
+ processor = TestSymbolOffsetProcessor([symbol_1, symbol_2])
+ self.assertListEqual([symbol_1] * 4 + [symbol_2] * 3,
+ processor._GetDumpOffsetToSymbolInfo())
+
+ def testSymbolsBeforeStart(self):
+ self.symbol_infos = [SimpleTestSymbol(s.name, s.offset + 8, s.size)
+ for s in self.symbol_infos]
+ self.symbol_infos.append(SimpleTestSymbol('early', 0, 4))
+ processor = TestSymbolOffsetProcessor(self.symbol_infos)
+ self.assertRaises(AssertionError, processor._GetDumpOffsetToSymbolInfo)
def testGetReachedOffsetsFromDump(self):
processor = TestSymbolOffsetProcessor(self.symbol_infos)
@@ -60,8 +75,8 @@ class ProcessProfilesTestCase(unittest.TestCase):
def testGetOrderedSymbols(self):
processor = TestSymbolOffsetProcessor(self.symbol_infos)
- self.assertListEqual(['1', '3', '0'],
- processor.GetOrderedSymbols([8, 41, 6, 0]))
+ self.assertListEqual(['1', '3', self.START_SYMBOL],
+ processor.GetOrderedSymbols([7, 41, 5, 0]))
def testOffsetToSymbolsMap(self):
symbol_infos = [SimpleTestSymbol('1', 8, 16),
@@ -92,13 +107,13 @@ class ProcessProfilesTestCase(unittest.TestCase):
self.assertListEqual(symbols[1:3],
processor.MatchSymbolNames(['Y', 'X']))
- def testOffsetsPrimarySize(self):
+ def testSymbolsSize(self):
symbols = [SimpleTestSymbol('W', 10, 1),
SimpleTestSymbol('X', 20, 2),
SimpleTestSymbol('Y', 30, 4),
SimpleTestSymbol('Z', 40, 8)]
processor = TestSymbolOffsetProcessor(symbols)
- self.assertEqual(13, processor.OffsetsPrimarySize([10, 30, 40]))
+ self.assertEqual(13, processor.SymbolsSize(['W', 'Y', 'Z']))
def testMedian(self):
self.assertEquals(None, process_profiles._Median([]))
diff --git a/chromium/tools/cygprofile/profile_android_startup.py b/chromium/tools/cygprofile/profile_android_startup.py
index fc75e81cfec..fbe4faa228e 100755
--- a/chromium/tools/cygprofile/profile_android_startup.py
+++ b/chromium/tools/cygprofile/profile_android_startup.py
@@ -186,7 +186,7 @@ class AndroidProfileTool(object):
# order to keep devices tidy.
_LEGACY_PROFILE_DIRS = ['/data/local/tmp/chrome/cyglog']
- TEST_URL = 'https://www.google.com/#hl=en&q=science'
+ TEST_URL = 'http://en.m.wikipedia.org/wiki/Science'
_WPR_ARCHIVE = os.path.join(
os.path.dirname(__file__), 'memory_top_10_mobile_000.wprgo')
@@ -226,6 +226,7 @@ class AndroidProfileTool(object):
Args:
files: ([str]) List of pregenerated files.
"""
+ logging.info('Using pregenerated profiles')
self._pregenerated_profiles = files
def RunCygprofileTests(self):
@@ -264,6 +265,7 @@ class AndroidProfileTool(object):
logging.info('Using pregenerated profiles instead of running profile')
logging.info('Profile files: %s', '\n'.join(self._pregenerated_profiles))
return self._pregenerated_profiles
+ self._device.adb.Logcat(clear=True)
self._Install(apk)
try:
changer = self._SetChromeFlags(package_info)
@@ -274,6 +276,11 @@ class AndroidProfileTool(object):
self._RunProfileCollection(package_info, self._simulate_user)
else:
self._RunProfileCollection(package_info, self._simulate_user)
+ except device_errors.CommandFailedError as exc:
+ logging.error('Exception %s; dumping logcat', exc)
+ for logcat_line in self._device.adb.Logcat(dump=True):
+ logging.error(logcat_line)
+ raise
finally:
self._RestoreChromeFlags(changer)
@@ -293,6 +300,12 @@ class AndroidProfileTool(object):
Raises:
NoProfileDataError: No data was found on the device.
"""
+ if self._pregenerated_profiles:
+ logging.info('Using pregenerated profiles instead of running '
+ 'system health profile')
+ logging.info('Profile files: %s', '\n'.join(self._pregenerated_profiles))
+ return self._pregenerated_profiles
+ logging.info('Running system health profile')
self._SetUpDeviceFolders()
self._RunCommand(['tools/perf/run_benchmark',
'--device={}'.format(self._device.serial),
@@ -350,6 +363,7 @@ class AndroidProfileTool(object):
_SimulateSwipe(self._device, 200, 700, 200, 1000)
_SimulateSwipe(self._device, 200, 700, 200, 1000)
time.sleep(30)
+ self._AssertRunning(package_info)
self._KillChrome(package_info)
def Cleanup(self):
@@ -418,8 +432,13 @@ class AndroidProfileTool(object):
extras={'create_new_tab': True}),
blocking=True, force_stop=True)
+ def _AssertRunning(self, package_info):
+ assert self._device.GetApplicationPids(package_info.package), (
+ 'Expected at least one pid associated with {} but found none'.format(
+ package_info.package))
+
def _KillChrome(self, package_info):
- self._device.KillAll(package_info.package)
+ self._device.ForceStop(package_info.package)
def _DeleteHostData(self):
"""Clears out profile storage locations on the host."""
diff --git a/chromium/tools/cygprofile/symbol_extractor.py b/chromium/tools/cygprofile/symbol_extractor.py
index 4b9e8082c06..91d8f47b665 100644
--- a/chromium/tools/cygprofile/symbol_extractor.py
+++ b/chromium/tools/cygprofile/symbol_extractor.py
@@ -35,6 +35,56 @@ def SetArchitecture(arch):
_arch = arch
+# Regular expression to match lines printed by 'objdump -t -w'. An example of
+# such line looks like this:
+# 018db2de l F .text 00000060 .hidden _ZN8SkBitmapC2ERKS_
+#
+# The regex intentionally allows matching more than valid inputs. This gives
+# more protection against potentially incorrectly silently ignoring unmatched
+# input lines. Instead a few assertions early in _FromObjdumpLine() check the
+# validity of a few parts matched as groups.
+_OBJDUMP_LINE_RE = re.compile(r'''
+ # The offset of the function, as hex.
+ (?P<offset>^[0-9a-f]+)
+
+ # The space character.
+ [ ]
+
+ # The 7 groups of flag characters, one character each.
+ (
+ (?P<assert_scope>.) # Global, local, unique local, etc.
+ (?P<assert_weak_or_strong>.)
+ (?P<assert_4spaces>.{4}) # Constructor, warning, indirect ref,
+ # debugger symbol.
+ (?P<symbol_type>.) # Function, object, file or normal.
+ )
+
+ [ ]
+
+ # The section name should start with ".text", can be ".text.foo". With LLD,
+ # and especially LTO the traces of input sections are not preserved. Support
+ # ".text.foo" for a little longer time because it is easy.
+ (?P<section>.text[^0-9a-f]*)
+
+ (?P<assert_tab> \s+)
+
+ # The size of the symbol, as hex.
+ (?P<size>[0-9a-f]+)
+
+ # Normally separated out by 14 spaces, but some bits in ELF may theoretically
+ # affect this length.
+ (?P<assert_14spaces>[ ]+)
+
+ # Hidden symbols should be treated as usual.
+ (.hidden [ ])?
+
+ # The symbol name.
+ (?P<name>.*)
+
+ $
+ ''', re.VERBOSE)
+
+
def _FromObjdumpLine(line):
"""Create a SymbolInfo by parsing a properly formatted objdump output line.
@@ -44,29 +94,57 @@ def _FromObjdumpLine(line):
Returns:
An instance of SymbolInfo if the line represents a symbol, None otherwise.
"""
- # All of the symbol lines we care about are in the form
- # 0000000000 g F .text.foo 000000000 [.hidden] foo
- # where g (global) might also be l (local) or w (weak).
- parts = line.split()
- if len(parts) < 6 or parts[2] != 'F':
+ m = _OBJDUMP_LINE_RE.match(line)
+ if not m:
return None
- assert len(parts) == 6 or (len(parts) == 7 and parts[5] == '.hidden')
- accepted_scopes = set(['g', 'l', 'w'])
- assert parts[1] in accepted_scopes
+ assert m.group('assert_scope') in set(['g', 'l']), line
+ assert m.group('assert_weak_or_strong') in set(['w', ' ']), line
+ assert m.group('assert_tab') == '\t', line
+ assert m.group('assert_4spaces') == ' ' * 4, line
+ assert m.group('assert_14spaces') == ' ' * 14, line
+ name = m.group('name')
+ offset = int(m.group('offset'), 16)
+
+ # Output the label that contains the earliest offset. It is needed later for
+ # translating offsets from the profile dumps.
+ if name == cygprofile_utils.START_OF_TEXT_SYMBOL:
+ return SymbolInfo(name=name, offset=offset, section='.text', size=0)
+
+ # Check symbol type for validity and ignore some types.
+ # From objdump manual page: The symbol is the name of a function (F) or a file
+ # (f) or an object (O) or just a normal symbol (a space). The 'normal' symbols
+ # seens so far has been function-local labels.
+ symbol_type = m.group('symbol_type')
+ if symbol_type == ' ':
+ # Ignore local goto labels. Unfortunately, v8 builtins (like 'Builtins_.*')
+ # are indistinguishable from labels of size 0 other than by name.
+ return None
+ # Guard against file symbols, since they are normally not seen in the
+ # binaries we parse.
+ assert symbol_type != 'f', line
+
+ # Extract the size from the ELF field. This value sometimes does not reflect
+ # the real size of the function. One reason for that is the '.size' directive
+ # in the assembler. As a result, a few functions in .S files have the size 0.
+ # They are not instrumented (yet), but maintaining their order in the
+ # orderfile may be important in some cases.
+ size = int(m.group('size'), 16)
- offset = int(parts[0], 16)
- section = parts[3]
- size = int(parts[4], 16)
- name = parts[-1].rstrip('\n')
# Forbid ARM mapping symbols and other unexpected symbol names, but allow $
# characters in a non-initial position, which can appear as a component of a
# mangled name, e.g. Clang can mangle a lambda function to:
# 02cd61e0 l F .text 000000c0 _ZZL11get_globalsvENK3$_1clEv
# The equivalent objdump line from GCC is:
# 0325c58c l F .text 000000d0 _ZZL11get_globalsvENKUlvE_clEv
- assert re.match('^[a-zA-Z0-9_.][a-zA-Z0-9_.$]*$', name)
- return SymbolInfo(name=name, offset=offset, section=section, size=size)
+ #
+ # Also disallow .internal and .protected symbols (as well as other flags),
+ # those have not appeared in the binaries we parse. Rejecting these extra
+ # prefixes is done by disallowing spaces in symbol names.
+ assert re.match('^[a-zA-Z0-9_.][a-zA-Z0-9_.$]*$', name), name
+
+ return SymbolInfo(name=name, offset=offset, section=m.group('section'),
+ size=size)
def _SymbolInfosFromStream(objdump_lines):
@@ -81,9 +159,14 @@ def _SymbolInfosFromStream(objdump_lines):
name_to_offsets = collections.defaultdict(list)
symbol_infos = []
for line in objdump_lines:
- symbol_info = _FromObjdumpLine(line)
+ symbol_info = _FromObjdumpLine(line.rstrip('\n'))
if symbol_info is not None:
- name_to_offsets[symbol_info.name].append(symbol_info.offset)
+ # On ARM the LLD linker inserts pseudo-functions (thunks) that allow
+ # jumping distances farther than 16 MiB. Such thunks are known to often
+ # reside on multiple offsets, they are not instrumented and hence they do
+ # not reach the orderfiles. Exclude the thunk symbols from the warning.
+ if not symbol_info.name.startswith('__ThumbV7PILongThunk_'):
+ name_to_offsets[symbol_info.name].append(symbol_info.offset)
symbol_infos.append(symbol_info)
repeated_symbols = filter(lambda s: len(name_to_offsets[s]) > 1,
diff --git a/chromium/tools/cygprofile/symbol_extractor_unittest.py b/chromium/tools/cygprofile/symbol_extractor_unittest.py
index f85240144d4..32e43164a7b 100755
--- a/chromium/tools/cygprofile/symbol_extractor_unittest.py
+++ b/chromium/tools/cygprofile/symbol_extractor_unittest.py
@@ -6,37 +6,67 @@
import symbol_extractor
import unittest
+
+# The number of spaces that objdump prefixes each symbol with.
+SPACES = ' ' * 14
+
+
class TestSymbolInfo(unittest.TestCase):
def testIgnoresBlankLine(self):
symbol_info = symbol_extractor._FromObjdumpLine('')
self.assertIsNone(symbol_info)
def testIgnoresMalformedLine(self):
- # This line is too short.
- line = ('00c1b228 F .text 00000060 _ZN20trace_event')
- symbol_info = symbol_extractor._FromObjdumpLine(line)
- self.assertIsNone(symbol_info)
- # This line has the wrong marker.
- line = '00c1b228 l f .text 00000060 _ZN20trace_event'
+ # This line is too short: only 6 flags.
+ line = ('00c1b228 F .text\t00000060' + SPACES + '_ZN20trace_event')
symbol_info = symbol_extractor._FromObjdumpLine(line)
self.assertIsNone(symbol_info)
+ def testWrongSymbolType(self):
+ # This line has unsupported 'f' as symbol type.
+ line = '00c1b228 l f .text\t00000060' + SPACES + '_ZN20trace_event'
+ self.assertRaises(AssertionError, symbol_extractor._FromObjdumpLine, line)
+
def testAssertionErrorOnInvalidLines(self):
# This line has an invalid scope.
- line = ('00c1b228 z F .text 00000060 _ZN20trace_event')
+ line = ('00c1b228 z F .text\t00000060' + SPACES + '_ZN20trace_event')
self.assertRaises(AssertionError, symbol_extractor._FromObjdumpLine, line)
- # This line has too many fields.
- line = ('00c1b228 l F .text 00000060 _ZN20trace_event too many')
+ # This line has the symbol name with spaces in it.
+ line = ('00c1b228 l F .text\t00000060' + SPACES +
+ '_ZN20trace_event too many')
self.assertRaises(AssertionError, symbol_extractor._FromObjdumpLine, line)
- # This line has invalid characters in the symbol.
- line = ('00c1b228 l F .text 00000060 _ZN20trace_?bad')
+ # This line has invalid characters in the symbol name.
+ line = ('00c1b228 l F .text\t00000060' + SPACES + '_ZN20trace_?bad')
self.assertRaises(AssertionError, symbol_extractor._FromObjdumpLine, line)
# This line has an invalid character at the start of the symbol name.
- line = ('00c1b228 l F .text 00000060 $_ZN20trace_bad')
+ line = ('00c1b228 l F .text\t00000060' + SPACES + '$_ZN20trace_bad')
self.assertRaises(AssertionError, symbol_extractor._FromObjdumpLine, line)
+ def testSymbolTypeObject(self):
+ # Builds with ThinLTO produce symbols of type 'O'.
+ line = ('009faf60 l O .text\t00000500' + SPACES + 'AES_Td')
+ symbol_info = symbol_extractor._FromObjdumpLine(line)
+ self.assertIsNotNone(symbol_info)
+ self.assertEquals(0x009faf60, symbol_info.offset)
+ self.assertEquals('.text', symbol_info.section)
+ self.assertEquals(0x500, symbol_info.size)
+ self.assertEquals('AES_Td', symbol_info.name)
+
+ def testSymbolFromLocalLabel(self):
+ line = ('00f64b80 l .text\t00000000' + SPACES + 'Builtins_Abort')
+ symbol_info = symbol_extractor._FromObjdumpLine(line)
+ self.assertIsNone(symbol_info)
+
+ def testStartOfText(self):
+ line = ('00918000 l .text\t00000000' + SPACES +
+ '.hidden linker_script_start_of_text')
+ symbol_info = symbol_extractor._FromObjdumpLine(line)
+ self.assertIsNotNone(symbol_info)
+ self.assertEquals(0x00918000, symbol_info.offset)
+ self.assertEquals('linker_script_start_of_text', symbol_info.name)
+
def testSymbolInfo(self):
- line = ('00c1c05c l F .text 0000002c '
+ line = ('00c1c05c l F .text\t0000002c' + SPACES +
'_GLOBAL__sub_I_chrome_main_delegate.cc')
test_name = '_GLOBAL__sub_I_chrome_main_delegate.cc'
test_offset = 0x00c1c05c
@@ -50,7 +80,7 @@ class TestSymbolInfo(unittest.TestCase):
self.assertEquals(test_section, symbol_info.section)
def testHiddenSymbol(self):
- line = ('00c1c05c l F .text 0000002c '
+ line = ('00c1c05c l F .text\t0000002c' + SPACES +
'.hidden _GLOBAL__sub_I_chrome_main_delegate.cc')
test_name = '_GLOBAL__sub_I_chrome_main_delegate.cc'
test_offset = 0x00c1c05c
@@ -66,7 +96,8 @@ class TestSymbolInfo(unittest.TestCase):
def testDollarInSymbolName(self):
# A $ character elsewhere in the symbol name is fine.
# This is an example of a lambda function name from Clang.
- line = ('00c1b228 l F .text 00000060 _ZZL11get_globalsvENK3$_1clEv')
+ line = ('00c1b228 l F .text\t00000060' + SPACES +
+ '_ZZL11get_globalsvENK3$_1clEv')
symbol_info = symbol_extractor._FromObjdumpLine(line)
self.assertIsNotNone(symbol_info)
self.assertEquals(0xc1b228, symbol_info.offset)
@@ -79,10 +110,10 @@ class TestSymbolInfosFromStream(unittest.TestCase):
def testSymbolInfosFromStream(self):
lines = ['Garbage',
'',
- '00c1c05c l F .text 0000002c first',
+ '00c1c05c l F .text\t0000002c' + SPACES + 'first',
''
'more garbage',
- '00155 g F .text 00000012 second']
+ '00155 g F .text\t00000012' + SPACES + 'second']
symbol_infos = symbol_extractor._SymbolInfosFromStream(lines)
self.assertEquals(len(symbol_infos), 2)
first = symbol_extractor.SymbolInfo('first', 0x00c1c05c, 0x2c, '.text')
diff --git a/chromium/tools/determinism/compare_build_artifacts.py b/chromium/tools/determinism/compare_build_artifacts.py
index 4dac137ff93..3546f763980 100755
--- a/chromium/tools/determinism/compare_build_artifacts.py
+++ b/chromium/tools/determinism/compare_build_artifacts.py
@@ -17,6 +17,7 @@ import struct
import subprocess
import sys
import time
+import zipfile
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
@@ -81,35 +82,10 @@ def get_files_to_compare_using_isolate(build_dir):
for inner_file in files:
ret_files.add(os.path.join(root, inner_file))
- # Also add any .isolated files that exist.
- for isolated in glob.glob(os.path.join(build_dir, '*.isolated')):
- ret_files.add(isolated)
-
# Convert back to a relpath since that's what the caller is expecting.
return set(os.path.relpath(f, build_dir) for f in ret_files)
-def diff_dict(a, b):
- """Returns a yaml-like textural diff of two dict.
-
- It is currently optimized for the .isolated format.
- """
- out = ''
- for key in set(a) | set(b):
- va = a.get(key)
- vb = b.get(key)
- if va.__class__ != vb.__class__:
- out += '- %s: %r != %r\n' % (key, va, vb)
- elif isinstance(va, dict):
- c = diff_dict(va, vb)
- if c:
- out += '- %s:\n%s\n' % (
- key, '\n'.join(' ' + l for l in c.splitlines()))
- elif va != vb:
- out += '- %s: %s != %s\n' % (key, va, vb)
- return out.rstrip()
-
-
def diff_binary(first_filepath, second_filepath, file_len):
"""Returns a compact binary diff if the diff is small enough."""
BLOCK_SIZE = 8192
@@ -154,6 +130,49 @@ def diff_binary(first_filepath, second_filepath, file_len):
return result
+def diff_zips(first_filepath, second_filepath):
+ with zipfile.ZipFile(first_filepath) as z1, \
+ zipfile.ZipFile(second_filepath) as z2:
+ names1 = z1.namelist()
+ names2 = z2.namelist()
+ # This kind of difference is rare, so don't put effort into printing the
+ # exact difference.
+ if names1 != names2:
+ diff = sorted(set(names1).symmetric_difference(names2))
+ if diff:
+ return ' Zip file lists differ:\n' + '\n'.join(
+ ' ' + f for f in diff)
+ else:
+ return ' Zips contain same files, but in different orders.'
+
+ diffs = []
+ for info1 in z1.infolist():
+ info2 = z2.getinfo(info1.filename)
+ # Check for the two most common errors. The binary diff will still run
+ # to check the rest.
+ if info1.CRC != info2.CRC:
+ diffs.append(' {}: CRCs differ'.format(info1.filename))
+ if info1.date_time != info2.date_time:
+ diffs.append(' {}: Timestamps differ'.format(info1.filename))
+ # Don't be too spammy.
+ if len(diffs) > 5:
+ diffs[5:] = [' ...']
+ return '\n'.join(diffs)
+
+
+def memoize(f):
+ memo = {}
+ def helper(*args):
+ if args not in memo:
+ memo[args] = f(*args)
+ return memo[args]
+ return helper
+
+
+# compare_deps() can be called with different targets that all depend on
+# "all" targets, so memoize the results of this function to make sure we
+# don't compare "all" files more than once.
+@memoize
def compare_files(first_filepath, second_filepath):
"""Compares two binaries and return the number of differences between them.
@@ -164,23 +183,18 @@ def compare_files(first_filepath, second_filepath):
if not os.path.exists(second_filepath):
return 'file does not exist %s' % second_filepath
-
- if first_filepath.endswith('.isolated'):
- with open(first_filepath, 'rb') as f:
- lhs = json.load(f)
- with open(second_filepath, 'rb') as f:
- rhs = json.load(f)
- diff = diff_dict(lhs, rhs)
- if diff:
- return '\n' + '\n'.join(' ' + line for line in diff.splitlines())
- # else, falls through binary comparison, it must be binary equal too.
-
+ ret = None
file_len = os.stat(first_filepath).st_size
if file_len != os.stat(second_filepath).st_size:
- return 'different size: %d != %d' % (
- file_len, os.stat(second_filepath).st_size)
+ ret = 'different size: %d != %d' % (file_len,
+ os.stat(second_filepath).st_size)
+ else:
+ ret = diff_binary(first_filepath, second_filepath, file_len)
- return diff_binary(first_filepath, second_filepath, file_len)
+ if ret and zipfile.is_zipfile(first_filepath) and zipfile.is_zipfile(
+ second_filepath):
+ ret += '\n' + diff_zips(first_filepath, second_filepath)
+ return ret
def get_deps(ninja_path, build_dir, target):
diff --git a/chromium/tools/determinism/deterministic_build_whitelist.pyl b/chromium/tools/determinism/deterministic_build_whitelist.pyl
index 804fbcb7ece..78d8002743b 100644
--- a/chromium/tools/determinism/deterministic_build_whitelist.pyl
+++ b/chromium/tools/determinism/deterministic_build_whitelist.pyl
@@ -11,8 +11,6 @@
# List of files that are known to be _not_ deterministic. This is a "temporary"
# workaround to find regression on the deterministic builders.
#
-# PNaCl general bug: https://crbug.com/429358
-#
# TODO(sebmarchand): Remove this once all the files are deterministic.
{
# https://crbug.com/383340
@@ -21,63 +19,64 @@
# https://crbug.com/330263
'linux': [
- 'ppapi_nacl_tests_pnacl_newlib_x64.nexe',
-
- # TODO(tikuta): Remove this when crbug.com/870611 is fixed.
- 'remoting-webapp.v2.zip',
-
- 'zucchini_apply_fuzzer_seed_corpus.zip',
-
- 'browser_tests.isolated',
-
- 'mr_extension',
- 'mr_extension/release',
+ # https://crbug.com/908463
+ 'fontconfig_caches/df1acc8c-39d5-4a8b-8507-b1a7396ac3ac-le64.cache-7',
+
+ # nacl stuff, https://crbug.com/429358
+ 'nacl_helper_nonsfi',
+ 'nacl_helper_nonsfi_unittests_main',
+ 'nacl_test_data/nonsfi/irt_exception_test_pnacl_newlib_x32_nonsfi.nexe',
+ 'nacl_test_data/nonsfi/irt_manifest_file_pnacl_newlib_x32_nonsfi.nexe',
+ 'ppapi_nacl_tests_pnacl_newlib_x32_nonsfi.nexe',
+ 'test_data/ppapi/tests/extensions/packaged_app/nonsfi/ppapi_tests_extensions_packaged_app_pnacl_newlib_x32_nonsfi.nexe',
],
'linux_component': [
- # TODO(tikuta): Remove this when crbug.com/870584 is fixed.
- 'v8_context_snapshot.bin',
+ # https://crbug.com/900696
+ 'remoting-webapp.v2.zip',
+
+ # https://crbug.com/908474
+ 'app_shell_unittests',
+ 'browser_tests',
+ 'chrome',
+ 'chrome_app_unittests',
+ 'components_browsertests',
+ 'components_unittests',
+ 'content_browsertests',
+ 'content_shell',
+ 'crashpad_tests',
+ 'extensions_browsertests',
+ 'extensions_unittests',
+ 'headless_browsertests',
+ 'headless_unittests',
+ 'interactive_ui_tests',
+ 'libboringssl.so',
+ 'libcrashpad_snapshot_test_module.so',
+ 'libcrashpad_snapshot_test_module_large.so',
+ 'libcrashpad_snapshot_test_module_small.so',
+ 'libheadless.so',
+ 'performance_browser_tests',
+ 'sync_integration_tests',
+ 'unit_tests',
- 'app_shell_unittests.isolated',
- 'blink_heap_unittests.isolated',
- 'chrome_app_unittests.isolated',
- 'chromedriver_py_tests.isolated',
- 'components_browsertests.isolated',
- 'components_perftests.isolated',
- 'components_unittests.isolated',
- 'content_browsertests.isolated',
- 'content_shell_crash_test.isolated',
- 'content_unittests.isolated',
- 'extensions_browsertests.isolated',
- 'extensions_unittests.isolated',
- 'gin_unittests.isolated',
- 'headless_browsertests.isolated',
- 'headless_unittests.isolated',
- 'interactive_ui_tests.isolated',
- 'media_blink_unittests.isolated',
- 'performance_browser_tests.isolated',
- 'performance_test_suite.isolated',
- 'performance_webview_test_suite.isolated',
- 'services_unittests.isolated',
- 'sync_integration_tests.isolated',
- 'telemetry_gpu_integration_test.isolated',
- 'telemetry_perf_unittests.isolated',
- 'telemetry_unittests.isolated',
- 'unit_tests.isolated',
- 'vr_common_perftests.isolated',
- 'vr_common_unittests.isolated',
- 'vr_pixeltests.isolated',
- 'webkit_layout_tests.isolated',
- 'webkit_layout_tests_exparchive.isolated',
- 'webkit_unit_tests.isolated',
+ # additional nacl stuff, https://crbug.com/429358
+ 'nacl_helper',
+ 'nacl_helper_bootstrap',
+ 'nacl_loader_unittests',
],
# https://crbug.com/330262
'mac': [
+ # ld64 in current Xcode versions is not deterministic. Most smaller binaries
+ # are fine, but larger binaries often get different outputs.
+ # To reduce flakiness, list most binaries here.
+ # TODO(erikchen): Once our fix for this has made it into Xcode and that
+ # is on all the bots, remove most binaries.
'accelerated_widget_mac_unittests',
'accessibility_unittests',
'angle_end2end_tests',
'angle_unittests',
+ 'angle_white_box_tests',
'App Shell',
'app_shell_unittests',
'ar_sample_test_driver',
@@ -200,20 +199,13 @@
'viz_benchmark',
'webkit_unit_tests',
'wtf_unittests',
-
- # TODO(tikuta): Remove this when crbug.com/870584 is fixed.
- 'v8_context_snapshot.bin',
],
# https://crbug.com/330260
'win': [
- # These two targets force symbol_level to be at least 1, they will work
- # once we've figured out the PDB aging field.
- 'crashpad_snapshot_test_image_reader.exe',
- 'crashpad_snapshot_test_image_reader_module.dll',
-
- # TODO(thakis): Figure out what's up with these two.
+ # TODO(thakis): Figure out what's up with these three (and their isolate).
'mini_installer.exe',
+ 'mini_installer.exe.pdb',
'previous_version_mini_installer.exe',
# These probably have mtimes in the zip headers and the scripts creating
@@ -221,52 +213,10 @@
'mini_installer_tests.zip',
'policy_templates.zip',
- # TODO(tikuta): Remove this when crbug.com/870611 is fixed.
- 'remoting-me2me-host-win.zip',
- 'remoting-webapp.v2.zip',
-
- # TODO(tikuta): Remove this when crbug.com/870584 is fixed.
- 'v8_context_snapshot.bin',
-
- # TODO(thakis): Figure out what's up with these two.
- 'ppapi_nacl_tests_pnacl_newlib_x32.nexe',
- 'ppapi_nacl_tests_pnacl_newlib_x64.nexe',
-
-
- 'app_shell_unittests.isolated',
- 'blink_heap_unittests.isolated',
- 'browser_tests.isolated',
- 'chrome_app_unittests.isolated',
- 'chrome_elf_import_unittests.isolated',
- 'chromedriver_py_tests.isolated',
- 'components_browsertests.isolated',
- 'components_perftests.isolated',
- 'components_unittests.isolated',
- 'content_browsertests.isolated',
- 'content_shell_crash_test.isolated',
- 'content_unittests.isolated',
- 'crashpad_tests.isolated',
- 'extensions_browsertests.isolated',
- 'extensions_unittests.isolated',
- 'gin_unittests.isolated',
- 'headless_browsertests.isolated',
- 'interactive_ui_tests.isolated',
- 'media_blink_unittests.isolated',
- 'mini_installer_tests.isolated',
- 'performance_browser_tests.isolated',
- 'performance_test_suite.isolated',
- 'performance_webview_test_suite.isolated',
- 'services_unittests.isolated',
- 'sync_integration_tests.isolated',
- 'telemetry_gpu_integration_test.isolated',
- 'telemetry_perf_unittests.isolated',
- 'telemetry_unittests.isolated',
- 'unit_tests.isolated',
- 'vr_common_perftests.isolated',
- 'vr_common_unittests.isolated',
- 'vr_pixeltests.isolated',
- 'webkit_layout_tests.isolated',
- 'webkit_layout_tests_exparchive.isolated',
- 'webkit_unit_tests.isolated',
+ # These two started being non-deterministic days 2 out of 3 builds days
+ # after we switched to using two distinct build dirs, for no apparent
+ # reason.
+ 'nacl_irt_x86_32.nexe',
+ 'nacl_irt_x86_32.nexe.debug',
],
}
diff --git a/chromium/tools/fuchsia/fidlgen_js/BUILD.gn b/chromium/tools/fuchsia/fidlgen_js/BUILD.gn
deleted file mode 100644
index 7a4e8f4df88..00000000000
--- a/chromium/tools/fuchsia/fidlgen_js/BUILD.gn
+++ /dev/null
@@ -1,60 +0,0 @@
-# Copyright 2018 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.
-
-import("//build/config/fuchsia/fidl_library.gni")
-import("//testing/test.gni")
-
-test("fidlgen_js_unittests") {
- testonly = true
-
- sources = [
- "test/fidlgen_js_unittest.cc",
- ]
-
- deps = [
- ":fidljstest",
- ":runtime",
- "//base/test:test_support",
- "//gin:gin_test",
- "//testing/gtest",
- "//v8",
- ]
-
- configs += [
- "//tools/v8_context_snapshot:use_v8_context_snapshot",
- "//v8:external_startup_data",
- ]
-
- data_deps = [
- "//tools/v8_context_snapshot:v8_context_snapshot",
- ]
-
- data = [
- "runtime/fidl.mjs",
- ]
-}
-
-static_library("runtime") {
- sources = [
- "runtime/zircon.cc",
- "runtime/zircon.h",
- ]
-
- deps = [
- "//gin",
- "//v8",
- ]
-}
-
-fidl_library("fidljstest") {
- testonly = true
- sources = [
- "test/simple.fidl",
- ]
-
- languages = [
- "cpp",
- "js",
- ]
-}
diff --git a/chromium/tools/fuchsia/fidlgen_js/DEPS b/chromium/tools/fuchsia/fidlgen_js/DEPS
deleted file mode 100644
index 681254d0f3e..00000000000
--- a/chromium/tools/fuchsia/fidlgen_js/DEPS
+++ /dev/null
@@ -1,4 +0,0 @@
-include_rules = [
- "+gin",
- "+v8/include",
-]
diff --git a/chromium/tools/fuchsia/fidlgen_js/fidl.py b/chromium/tools/fuchsia/fidlgen_js/fidl.py
deleted file mode 100644
index 6f8b99f4413..00000000000
--- a/chromium/tools/fuchsia/fidlgen_js/fidl.py
+++ /dev/null
@@ -1,549 +0,0 @@
-# Copyright 2018 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.
-
-# This was generated (and can be regenerated) by pasting
-# zircon/system/host/fidl/schema.json from Fuchsia into
-# https://app.quicktype.io and choosing Python 2.7 output. The only manual
-# change is to modify the import path for Enum.
-
-from third_party.enum34 import Enum
-
-
-def from_str(x):
- assert isinstance(x, (str, unicode))
- return x
-
-
-def from_int(x):
- assert isinstance(x, int) and not isinstance(x, bool)
- return x
-
-
-def from_none(x):
- assert x is None
- return x
-
-
-def from_union(fs, x):
- for f in fs:
- try:
- return f(x)
- except:
- pass
- assert False
-
-
-def from_bool(x):
- assert isinstance(x, bool)
- return x
-
-
-def to_class(c, x):
- assert isinstance(x, c)
- return x.to_dict()
-
-
-def to_enum(c, x):
- assert isinstance(x, c)
- return x.value
-
-
-def from_list(f, x):
- assert isinstance(x, list)
- return [f(y) for y in x]
-
-
-def from_dict(f, x):
- assert isinstance(x, dict)
- return { k: f(v) for (k, v) in x.items() }
-
-
-class Attribute:
- def __init__(self, name, value):
- self.name = name
- self.value = value
-
- @staticmethod
- def from_dict(obj):
- assert isinstance(obj, dict)
- name = from_str(obj.get(u"name"))
- value = from_str(obj.get(u"value"))
- return Attribute(name, value)
-
- def to_dict(self):
- result = {}
- result[u"name"] = from_str(self.name)
- result[u"value"] = from_str(self.value)
- return result
-
-
-class TypeKind(Enum):
- ARRAY = u"array"
- HANDLE = u"handle"
- IDENTIFIER = u"identifier"
- PRIMITIVE = u"primitive"
- REQUEST = u"request"
- STRING = u"string"
- VECTOR = u"vector"
-
-
-class TypeClass:
- def __init__(self, element_count, element_type, kind, maybe_element_count, nullable, subtype, identifier):
- self.element_count = element_count
- self.element_type = element_type
- self.kind = kind
- self.maybe_element_count = maybe_element_count
- self.nullable = nullable
- self.subtype = subtype
- self.identifier = identifier
-
- @staticmethod
- def from_dict(obj):
- assert isinstance(obj, dict)
- element_count = from_union([from_int, from_none], obj.get(u"element_count"))
- element_type = from_union([TypeClass.from_dict, from_none], obj.get(u"element_type"))
- kind = TypeKind(obj.get(u"kind"))
- maybe_element_count = from_union([from_int, from_none], obj.get(u"maybe_element_count"))
- nullable = from_union([from_bool, from_none], obj.get(u"nullable"))
- subtype = from_union([from_str, from_none], obj.get(u"subtype"))
- identifier = from_union([from_str, from_none], obj.get(u"identifier"))
- return TypeClass(element_count, element_type, kind, maybe_element_count, nullable, subtype, identifier)
-
- def to_dict(self):
- result = {}
- result[u"element_count"] = from_union([from_int, from_none], self.element_count)
- result[u"element_type"] = from_union([lambda x: to_class(TypeClass, x), from_none], self.element_type)
- result[u"kind"] = to_enum(TypeKind, self.kind)
- result[u"maybe_element_count"] = from_union([from_int, from_none], self.maybe_element_count)
- result[u"nullable"] = from_union([from_bool, from_none], self.nullable)
- result[u"subtype"] = from_union([from_str, from_none], self.subtype)
- result[u"identifier"] = from_union([from_str, from_none], self.identifier)
- return result
-
-
-class ConstantKind(Enum):
- IDENTIFIER = u"identifier"
- LITERAL = u"literal"
-
-
-class LiteralKind(Enum):
- DEFAULT = u"default"
- FALSE = u"false"
- NUMERIC = u"numeric"
- STRING = u"string"
- TRUE = u"true"
-
-
-class Literal:
- def __init__(self, kind, value):
- self.kind = kind
- self.value = value
-
- @staticmethod
- def from_dict(obj):
- assert isinstance(obj, dict)
- kind = LiteralKind(obj.get(u"kind"))
- value = from_union([from_str, from_none], obj.get(u"value"))
- return Literal(kind, value)
-
- def to_dict(self):
- result = {}
- result[u"kind"] = to_enum(LiteralKind, self.kind)
- result[u"value"] = from_union([from_str, from_none], self.value)
- return result
-
-
-class Constant:
- def __init__(self, identifier, kind, literal):
- self.identifier = identifier
- self.kind = kind
- self.literal = literal
-
- @staticmethod
- def from_dict(obj):
- assert isinstance(obj, dict)
- identifier = from_union([from_str, from_none], obj.get(u"identifier"))
- kind = ConstantKind(obj.get(u"kind"))
- literal = from_union([Literal.from_dict, from_none], obj.get(u"literal"))
- return Constant(identifier, kind, literal)
-
- def to_dict(self):
- result = {}
- result[u"identifier"] = from_union([from_str, from_none], self.identifier)
- result[u"kind"] = to_enum(ConstantKind, self.kind)
- result[u"literal"] = from_union([lambda x: to_class(Literal, x), from_none], self.literal)
- return result
-
-
-class Const:
- def __init__(self, maybe_attributes, name, type, value):
- self.maybe_attributes = maybe_attributes
- self.name = name
- self.type = type
- self.value = value
-
- @staticmethod
- def from_dict(obj):
- assert isinstance(obj, dict)
- maybe_attributes = from_union([lambda x: from_list(Attribute.from_dict, x), from_none], obj.get(u"maybe_attributes"))
- name = from_str(obj.get(u"name"))
- type = TypeClass.from_dict(obj.get(u"type"))
- value = Constant.from_dict(obj.get(u"value"))
- return Const(maybe_attributes, name, type, value)
-
- def to_dict(self):
- result = {}
- result[u"maybe_attributes"] = from_union([lambda x: from_list(lambda x: to_class(Attribute, x), x), from_none], self.maybe_attributes)
- result[u"name"] = from_str(self.name)
- result[u"type"] = to_class(TypeClass, self.type)
- result[u"value"] = to_class(Constant, self.value)
- return result
-
-
-class DeclarationsMap(Enum):
- CONST = u"const"
- ENUM = u"enum"
- INTERFACE = u"interface"
- STRUCT = u"struct"
- UNION = u"union"
-
-
-class EnumMember:
- def __init__(self, name, value):
- self.name = name
- self.value = value
-
- @staticmethod
- def from_dict(obj):
- assert isinstance(obj, dict)
- name = from_str(obj.get(u"name"))
- value = Constant.from_dict(obj.get(u"value"))
- return EnumMember(name, value)
-
- def to_dict(self):
- result = {}
- result[u"name"] = from_str(self.name)
- result[u"value"] = to_class(Constant, self.value)
- return result
-
-
-class IntegerType(Enum):
- INT16 = u"int16"
- INT32 = u"int32"
- INT64 = u"int64"
- INT8 = u"int8"
- UINT16 = u"uint16"
- UINT32 = u"uint32"
- UINT64 = u"uint64"
- UINT8 = u"uint8"
-
-
-class EnumDeclarationElement:
- def __init__(self, maybe_attributes, members, name, type):
- self.maybe_attributes = maybe_attributes
- self.members = members
- self.name = name
- self.type = type
-
- @staticmethod
- def from_dict(obj):
- assert isinstance(obj, dict)
- maybe_attributes = from_union([lambda x: from_list(Attribute.from_dict, x), from_none], obj.get(u"maybe_attributes"))
- members = from_list(EnumMember.from_dict, obj.get(u"members"))
- name = from_str(obj.get(u"name"))
- type = IntegerType(obj.get(u"type"))
- return EnumDeclarationElement(maybe_attributes, members, name, type)
-
- def to_dict(self):
- result = {}
- result[u"maybe_attributes"] = from_union([lambda x: from_list(lambda x: to_class(Attribute, x), x), from_none], self.maybe_attributes)
- result[u"members"] = from_list(lambda x: to_class(EnumMember, x), self.members)
- result[u"name"] = from_str(self.name)
- result[u"type"] = to_enum(IntegerType, self.type)
- return result
-
-
-class InterfaceMethodParameter:
- def __init__(self, alignment, name, offset, size, type):
- self.alignment = alignment
- self.name = name
- self.offset = offset
- self.size = size
- self.type = type
-
- @staticmethod
- def from_dict(obj):
- assert isinstance(obj, dict)
- alignment = from_int(obj.get(u"alignment"))
- name = from_str(obj.get(u"name"))
- offset = from_int(obj.get(u"offset"))
- size = from_int(obj.get(u"size"))
- type = TypeClass.from_dict(obj.get(u"type"))
- return InterfaceMethodParameter(alignment, name, offset, size, type)
-
- def to_dict(self):
- result = {}
- result[u"alignment"] = from_int(self.alignment)
- result[u"name"] = from_str(self.name)
- result[u"offset"] = from_int(self.offset)
- result[u"size"] = from_int(self.size)
- result[u"type"] = to_class(TypeClass, self.type)
- return result
-
-
-class InterfaceMethod:
- def __init__(self, has_request, has_response, maybe_attributes, maybe_request, maybe_request_alignment, maybe_request_size, maybe_response, maybe_response_alignment, maybe_response_size, name, ordinal):
- self.has_request = has_request
- self.has_response = has_response
- self.maybe_attributes = maybe_attributes
- self.maybe_request = maybe_request
- self.maybe_request_alignment = maybe_request_alignment
- self.maybe_request_size = maybe_request_size
- self.maybe_response = maybe_response
- self.maybe_response_alignment = maybe_response_alignment
- self.maybe_response_size = maybe_response_size
- self.name = name
- self.ordinal = ordinal
-
- @staticmethod
- def from_dict(obj):
- assert isinstance(obj, dict)
- has_request = from_bool(obj.get(u"has_request"))
- has_response = from_bool(obj.get(u"has_response"))
- maybe_attributes = from_union([lambda x: from_list(Attribute.from_dict, x), from_none], obj.get(u"maybe_attributes"))
- maybe_request = from_union([lambda x: from_list(InterfaceMethodParameter.from_dict, x), from_none], obj.get(u"maybe_request"))
- maybe_request_alignment = from_union([from_int, from_none], obj.get(u"maybe_request_alignment"))
- maybe_request_size = from_union([from_int, from_none], obj.get(u"maybe_request_size"))
- maybe_response = from_union([lambda x: from_list(InterfaceMethodParameter.from_dict, x), from_none], obj.get(u"maybe_response"))
- maybe_response_alignment = from_union([from_int, from_none], obj.get(u"maybe_response_alignment"))
- maybe_response_size = from_union([from_int, from_none], obj.get(u"maybe_response_size"))
- name = from_str(obj.get(u"name"))
- ordinal = from_int(obj.get(u"ordinal"))
- return InterfaceMethod(has_request, has_response, maybe_attributes, maybe_request, maybe_request_alignment, maybe_request_size, maybe_response, maybe_response_alignment, maybe_response_size, name, ordinal)
-
- def to_dict(self):
- result = {}
- result[u"has_request"] = from_bool(self.has_request)
- result[u"has_response"] = from_bool(self.has_response)
- result[u"maybe_attributes"] = from_union([lambda x: from_list(lambda x: to_class(Attribute, x), x), from_none], self.maybe_attributes)
- result[u"maybe_request"] = from_union([lambda x: from_list(lambda x: to_class(InterfaceMethodParameter, x), x), from_none], self.maybe_request)
- result[u"maybe_request_alignment"] = from_union([from_int, from_none], self.maybe_request_alignment)
- result[u"maybe_request_size"] = from_union([from_int, from_none], self.maybe_request_size)
- result[u"maybe_response"] = from_union([lambda x: from_list(lambda x: to_class(InterfaceMethodParameter, x), x), from_none], self.maybe_response)
- result[u"maybe_response_alignment"] = from_union([from_int, from_none], self.maybe_response_alignment)
- result[u"maybe_response_size"] = from_union([from_int, from_none], self.maybe_response_size)
- result[u"name"] = from_str(self.name)
- result[u"ordinal"] = from_int(self.ordinal)
- return result
-
-
-class Interface:
- def __init__(self, maybe_attributes, methods, name):
- self.maybe_attributes = maybe_attributes
- self.methods = methods
- self.name = name
-
- @staticmethod
- def from_dict(obj):
- assert isinstance(obj, dict)
- maybe_attributes = from_union([lambda x: from_list(Attribute.from_dict, x), from_none], obj.get(u"maybe_attributes"))
- methods = from_list(InterfaceMethod.from_dict, obj.get(u"methods"))
- name = from_str(obj.get(u"name"))
- return Interface(maybe_attributes, methods, name)
-
- def to_dict(self):
- result = {}
- result[u"maybe_attributes"] = from_union([lambda x: from_list(lambda x: to_class(Attribute, x), x), from_none], self.maybe_attributes)
- result[u"methods"] = from_list(lambda x: to_class(InterfaceMethod, x), self.methods)
- result[u"name"] = from_str(self.name)
- return result
-
-
-class Library:
- def __init__(self, declarations, name):
- self.declarations = declarations
- self.name = name
-
- @staticmethod
- def from_dict(obj):
- assert isinstance(obj, dict)
- declarations = from_dict(DeclarationsMap, obj.get(u"declarations"))
- name = from_str(obj.get(u"name"))
- return Library(declarations, name)
-
- def to_dict(self):
- result = {}
- result[u"declarations"] = from_dict(lambda x: to_enum(DeclarationsMap, x), self.declarations)
- result[u"name"] = from_str(self.name)
- return result
-
-
-class StructMember:
- def __init__(self, alignment, maybe_default_value, name, offset, size, type):
- self.alignment = alignment
- self.maybe_default_value = maybe_default_value
- self.name = name
- self.offset = offset
- self.size = size
- self.type = type
-
- @staticmethod
- def from_dict(obj):
- assert isinstance(obj, dict)
- alignment = from_int(obj.get(u"alignment"))
- maybe_default_value = from_union([Constant.from_dict, from_none], obj.get(u"maybe_default_value"))
- name = from_str(obj.get(u"name"))
- offset = from_int(obj.get(u"offset"))
- size = from_int(obj.get(u"size"))
- type = TypeClass.from_dict(obj.get(u"type"))
- return StructMember(alignment, maybe_default_value, name, offset, size, type)
-
- def to_dict(self):
- result = {}
- result[u"alignment"] = from_int(self.alignment)
- result[u"maybe_default_value"] = from_union([lambda x: to_class(Constant, x), from_none], self.maybe_default_value)
- result[u"name"] = from_str(self.name)
- result[u"offset"] = from_int(self.offset)
- result[u"size"] = from_int(self.size)
- result[u"type"] = to_class(TypeClass, self.type)
- return result
-
-
-class Struct:
- def __init__(self, max_handles, maybe_attributes, members, name, size):
- self.max_handles = max_handles
- self.maybe_attributes = maybe_attributes
- self.members = members
- self.name = name
- self.size = size
-
- @staticmethod
- def from_dict(obj):
- assert isinstance(obj, dict)
- max_handles = from_union([from_int, from_none], obj.get(u"max_handles"))
- maybe_attributes = from_union([lambda x: from_list(Attribute.from_dict, x), from_none], obj.get(u"maybe_attributes"))
- members = from_list(StructMember.from_dict, obj.get(u"members"))
- name = from_str(obj.get(u"name"))
- size = from_int(obj.get(u"size"))
- return Struct(max_handles, maybe_attributes, members, name, size)
-
- def to_dict(self):
- result = {}
- result[u"max_handles"] = from_union([from_int, from_none], self.max_handles)
- result[u"maybe_attributes"] = from_union([lambda x: from_list(lambda x: to_class(Attribute, x), x), from_none], self.maybe_attributes)
- result[u"members"] = from_list(lambda x: to_class(StructMember, x), self.members)
- result[u"name"] = from_str(self.name)
- result[u"size"] = from_int(self.size)
- return result
-
-
-class UnionMember:
- def __init__(self, alignment, name, offset, size, type):
- self.alignment = alignment
- self.name = name
- self.offset = offset
- self.size = size
- self.type = type
-
- @staticmethod
- def from_dict(obj):
- assert isinstance(obj, dict)
- alignment = from_int(obj.get(u"alignment"))
- name = from_str(obj.get(u"name"))
- offset = from_int(obj.get(u"offset"))
- size = from_int(obj.get(u"size"))
- type = TypeClass.from_dict(obj.get(u"type"))
- return UnionMember(alignment, name, offset, size, type)
-
- def to_dict(self):
- result = {}
- result[u"alignment"] = from_int(self.alignment)
- result[u"name"] = from_str(self.name)
- result[u"offset"] = from_int(self.offset)
- result[u"size"] = from_int(self.size)
- result[u"type"] = to_class(TypeClass, self.type)
- return result
-
-
-class UnionDeclarationElement:
- def __init__(self, alignment, max_handles, maybe_attributes, members, name, size):
- self.alignment = alignment
- self.max_handles = max_handles
- self.maybe_attributes = maybe_attributes
- self.members = members
- self.name = name
- self.size = size
-
- @staticmethod
- def from_dict(obj):
- assert isinstance(obj, dict)
- alignment = from_int(obj.get(u"alignment"))
- max_handles = from_union([from_int, from_none], obj.get(u"max_handles"))
- maybe_attributes = from_union([lambda x: from_list(Attribute.from_dict, x), from_none], obj.get(u"maybe_attributes"))
- members = from_list(UnionMember.from_dict, obj.get(u"members"))
- name = from_str(obj.get(u"name"))
- size = from_int(obj.get(u"size"))
- return UnionDeclarationElement(alignment, max_handles, maybe_attributes, members, name, size)
-
- def to_dict(self):
- result = {}
- result[u"alignment"] = from_int(self.alignment)
- result[u"max_handles"] = from_union([from_int, from_none], self.max_handles)
- result[u"maybe_attributes"] = from_union([lambda x: from_list(lambda x: to_class(Attribute, x), x), from_none], self.maybe_attributes)
- result[u"members"] = from_list(lambda x: to_class(UnionMember, x), self.members)
- result[u"name"] = from_str(self.name)
- result[u"size"] = from_int(self.size)
- return result
-
-
-class Fidl:
- def __init__(self, const_declarations, declaration_order, declarations, enum_declarations, interface_declarations, library_dependencies, name, struct_declarations, union_declarations, version):
- self.const_declarations = const_declarations
- self.declaration_order = declaration_order
- self.declarations = declarations
- self.enum_declarations = enum_declarations
- self.interface_declarations = interface_declarations
- self.library_dependencies = library_dependencies
- self.name = name
- self.struct_declarations = struct_declarations
- self.union_declarations = union_declarations
- self.version = version
-
- @staticmethod
- def from_dict(obj):
- assert isinstance(obj, dict)
- const_declarations = from_list(Const.from_dict, obj.get(u"const_declarations"))
- declaration_order = from_list(from_str, obj.get(u"declaration_order"))
- declarations = from_dict(DeclarationsMap, obj.get(u"declarations"))
- enum_declarations = from_list(EnumDeclarationElement.from_dict, obj.get(u"enum_declarations"))
- interface_declarations = from_list(Interface.from_dict, obj.get(u"interface_declarations"))
- library_dependencies = from_list(Library.from_dict, obj.get(u"library_dependencies"))
- name = from_str(obj.get(u"name"))
- struct_declarations = from_list(Struct.from_dict, obj.get(u"struct_declarations"))
- union_declarations = from_list(UnionDeclarationElement.from_dict, obj.get(u"union_declarations"))
- version = from_str(obj.get(u"version"))
- return Fidl(const_declarations, declaration_order, declarations, enum_declarations, interface_declarations, library_dependencies, name, struct_declarations, union_declarations, version)
-
- def to_dict(self):
- result = {}
- result[u"const_declarations"] = from_list(lambda x: to_class(Const, x), self.const_declarations)
- result[u"declaration_order"] = from_list(from_str, self.declaration_order)
- result[u"declarations"] = from_dict(lambda x: to_enum(DeclarationsMap, x), self.declarations)
- result[u"enum_declarations"] = from_list(lambda x: to_class(EnumDeclarationElement, x), self.enum_declarations)
- result[u"interface_declarations"] = from_list(lambda x: to_class(Interface, x), self.interface_declarations)
- result[u"library_dependencies"] = from_list(lambda x: to_class(Library, x), self.library_dependencies)
- result[u"name"] = from_str(self.name)
- result[u"struct_declarations"] = from_list(lambda x: to_class(Struct, x), self.struct_declarations)
- result[u"union_declarations"] = from_list(lambda x: to_class(UnionDeclarationElement, x), self.union_declarations)
- result[u"version"] = from_str(self.version)
- return result
-
-
-def fidl_from_dict(s):
- return Fidl.from_dict(s)
-
-
-def fidl_to_dict(x):
- return to_class(Fidl, x)
-
diff --git a/chromium/tools/fuchsia/fidlgen_js/gen.py b/chromium/tools/fuchsia/fidlgen_js/gen.py
deleted file mode 100755
index 3d3aae14faa..00000000000
--- a/chromium/tools/fuchsia/fidlgen_js/gen.py
+++ /dev/null
@@ -1,320 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright 2018 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.
-
-import argparse
-from fidl import *
-import json
-
-
-class _CompoundIdentifier(object):
- def __init__(self, library, name):
- self.library = library
- self.name = name
-
-
-def _ParseLibraryName(lib):
- return lib.split('.')
-
-
-def _ParseCompoundIdentifier(ident):
- parts = ident.split('/', 2)
- raw_library = ''
- raw_name = parts[0]
- if len(parts) == 2:
- raw_library, raw_name = parts
- library = _ParseLibraryName(raw_library)
- return _CompoundIdentifier(library, raw_name)
-
-
-def _ChangeIfReserved(name):
- # TODO(crbug.com/883496): Remap any JS keywords.
- return name
-
-
-def _CompileCompoundIdentifier(compound, ext=''):
- result = _ChangeIfReserved(compound.name) + ext
- return result
-
-
-def _CompileIdentifier(ident):
- return _ChangeIfReserved(ident)
-
-
-def _JsTypeForPrimitiveType(t):
- mapping = {
- IntegerType.INT16: 'number',
- IntegerType.INT32: 'number',
- IntegerType.INT64: 'BigInt',
- IntegerType.INT8: 'number',
- IntegerType.UINT16: 'number',
- IntegerType.UINT32: 'number',
- IntegerType.UINT64: 'BigInt',
- IntegerType.UINT8: 'number',
- }
- return mapping[t]
-
-
-def _InlineSizeOfType(t):
- if t.kind == TypeKind.PRIMITIVE:
- return {
- 'int16': 2,
- 'int32': 4,
- 'int64': 8,
- 'int8': 1,
- 'uint16': 2,
- 'uint32': 4,
- 'uint64': 8,
- 'uint8': 1,
- }[t.subtype]
- else:
- raise NotImplementedError()
-
-
-def _CompileConstant(val):
- if val.kind == ConstantKind.IDENTIFIER:
- raise NotImplementedError()
- elif val.kind == ConstantKind.LITERAL:
- return _CompileLiteral(val.literal)
- else:
- raise Exception('unexpected kind')
-
-
-def _CompileLiteral(val):
- if val.kind == LiteralKind.STRING:
- # TODO(crbug.com/883496): This needs to encode the string in an escaped
- # form suitable to JS. Currently using the escaped Python representation,
- # which is passably compatible, but surely has differences in edge cases.
- return repr(val.value)
- elif val.kind == LiteralKind.NUMERIC:
- return val.value
- elif val.kind == LiteralKind.TRUE:
- return 'true'
- elif val.kind == LiteralKind.FALSE:
- return 'false'
- elif val.kind == LiteralKind.DEFAULT:
- return 'default'
- else:
- raise Exception('unexpected kind')
-
-
-class Compiler(object):
- def __init__(self, fidl, output_file):
- self.fidl = fidl
- self.f = output_file
-
- def Compile(self):
- self._EmitHeader()
- for c in self.fidl.const_declarations:
- self._CompileConst(c)
- for e in self.fidl.enum_declarations:
- self._CompileEnum(e)
- if self.fidl.union_declarations:
- raise NotImplementedError()
- if self.fidl.struct_declarations:
- raise NotImplementedError()
- for i in self.fidl.interface_declarations:
- self._CompileInterface(i)
-
- def _EmitHeader(self):
- self.f.write('''// Copyright 2018 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.
-//
-// WARNING: This file is machine generated by fidlgen_js.
-
-''')
-
- def _CompileConst(self, c):
- self.f.write('''/**
- * @const {%(type)s}
- */
-const %(name)s = %(value)s;
-''' % c.to_dict())
-
- def _CompileEnum(self, enum):
- compound = _ParseCompoundIdentifier(enum.name)
- name = _CompileCompoundIdentifier(compound)
- js_type = _JsTypeForPrimitiveType(enum.type)
- data = { 'js_type': js_type, 'type': enum.type.value, 'name': name }
- self.f.write('''/**
- * @enum {%(js_type)s}
- */
-const %(name)s = {
-''' % data)
- for member in enum.members:
- self.f.write(''' %s: %s,\n''' %
- (member.name, _CompileConstant(member.value)))
- self.f.write('};\n')
- self.f.write('const _kTT_%(name)s = _kTT_%(type)s;\n\n' % data)
-
-
- def _CompileType(self, t):
- if t.kind == TypeKind.PRIMITIVE:
- return t.subtype
- elif t.kind == TypeKind.STRING:
- return 'String' + ('_Nullable' if t.nullable else '_Nonnull')
- elif t.kind == TypeKind.IDENTIFIER:
- compound = _ParseCompoundIdentifier(t.identifier)
- name = _CompileCompoundIdentifier(compound)
- return name
- elif t.kind == TypeKind.VECTOR:
- element_ttname = self._CompileType(t.element_type)
- ttname = ('VEC_' + ('Nullable_' if t.nullable else 'Nonnull_') +
- element_ttname)
- throw_if_null = '/* v may be null */'
- pointer_set = ''' if (v === null || v === undefined) {
- e.data.setUint32(o + 8, 0, $fidl__kLE);
- e.data.setUint32(o + 12, 0, $fidl__kLE);
- } else {
- e.data.setUint32(o + 8, 0xffffffff, $fidl__kLE);
- e.data.setUint32(o + 12, 0xffffffff, $fidl__kLE);
- }'''
- if not t.nullable:
- throw_if_null = ('if (v === null || v === undefined) '
- 'throw "non-null vector required";')
- pointer_set = ''' e.data.setUint32(o + 8, 0xffffffff, $fidl__kLE);
- e.data.setUint32(o + 12, 0xffffffff, $fidl__kLE);'''
-
- self.f.write(
-'''const _kTT_%(ttname)s = {
- enc: function(e, o, v) {
- %(throw_if_null)s
- e.data.setUint32(o, v.length, $fidl__kLE);
- e.data.setUint32(o + 4, 0, $fidl__kLE);
-%(pointer_set)s
- e.outOfLine.push([function(e, body) {
- var start = e.alloc(body.length * %(element_size)s);
- for (var i = 0; i < body.length; i++) {
- _kTT_%(element_ttname)s.enc(e, start + (i * %(element_size)s), body[i]);
- }
- },
- v]);
- },
-};
-
-''' % { 'ttname': ttname,
- 'element_ttname': element_ttname,
- 'element_size': _InlineSizeOfType(t.element_type),
- 'pointer_set': pointer_set,
- 'throw_if_null': throw_if_null })
- return ttname
- else:
- raise NotImplementedError()
-
-
- def _GenerateJsInterfaceForInterface(self, name, interface):
- """Generates a JS @interface for the given FIDL interface."""
- self.f.write('''/**
- * @interface
- */
-function %(name)s() {}
-
-''' % { 'name': name })
-
- # Define a JS interface part for the interface for typechecking.
- for method in interface.methods:
- method_name = _CompileIdentifier(method.name)
- if method.has_request:
- param_names = [_CompileIdentifier(x.name)
- for x in method.maybe_request]
- if len(param_names):
- self.f.write('/**\n')
- # TODO(crbug.com/883496): Emit @param type comments here.
- self.f.write(' */\n')
- self.f.write('%(name)s.prototype.%(method_name)s = '
- 'function(%(param_names)s) {};\n\n' % {
- 'name': name,
- 'method_name': method_name,
- 'param_names': ', '.join(param_names)})
-
- # Emit message ordinals for later use.
- for method in interface.methods:
- method_name = _CompileIdentifier(method.name)
- self.f.write(
- 'const _k%(name)s_%(method_name)s_Ordinal = %(ordinal)s;\n' % {
- 'name': name,
- 'method_name': method_name,
- 'ordinal': method.ordinal})
-
- self.f.write('\n')
-
- def _GenerateJsProxyForInterface(self, name, interface):
- """Generates the JS side implementation of a proxy class implementing the
- given interface."""
- proxy_name = name + 'Proxy'
- self.f.write('''/**
- * @constructor
- * @implements %(name)s
- */
-function %(proxy_name)s() {
- this.channel = zx.ZX_HANDLE_INVALID;
-}
-
-%(proxy_name)s.prototype.$bind = function(channel) {
- this.channel = channel;
-};
-
-''' % { 'name': name,
- 'proxy_name': proxy_name })
- for method in interface.methods:
- method_name = _CompileIdentifier(method.name)
- if method.has_request:
- type_tables = []
- for param in method.maybe_request:
- type_tables.append(self._CompileType(param.type))
- param_names = [_CompileIdentifier(x.name) for x in method.maybe_request]
- self.f.write(
-'''%(proxy_name)s.prototype.%(method_name)s = function(%(param_names)s) {
- if (this.channel === zx.ZX_HANDLE_INVALID) {
- throw "channel closed";
- }
- var $encoder = new $fidl_Encoder(_k%(name)s_%(method_name)s_Ordinal);
- $encoder.alloc(%(size)s - $fidl_kMessageHeaderSize);
-''' % { 'name': name,
- 'proxy_name': proxy_name,
- 'method_name': method_name,
- 'param_names': ', '.join(param_names),
- 'size': method.maybe_request_size})
-
- for param, ttname in zip(method.maybe_request, type_tables):
- self.f.write(
-''' _kTT_%(type_table)s.enc($encoder, %(offset)s, %(param_name)s);
-''' % { 'type_table': ttname,
- 'param_name': _CompileIdentifier(param.name),
- 'offset': param.offset })
-
- self.f.write(
-''' var $result = zx.channelWrite(this.channel,
- $encoder.messageData(),
- $encoder.messageHandles());
- if ($result !== zx.ZX_OK) {
- throw "zx.channelWrite failed: " + $result;
- }
-};
-
-''')
-
- def _CompileInterface(self, interface):
- compound = _ParseCompoundIdentifier(interface.name)
- name = _CompileCompoundIdentifier(compound)
- self._GenerateJsInterfaceForInterface(name, interface)
- self._GenerateJsProxyForInterface(name, interface)
-
-
-def main():
- parser = argparse.ArgumentParser()
- parser.add_argument('json')
- parser.add_argument('--output', required=True)
- args = parser.parse_args()
-
- fidl = fidl_from_dict(json.load(open(args.json, 'r')))
- with open(args.output, 'w') as f:
- c = Compiler(fidl, f)
- c.Compile()
-
-
-if __name__ == '__main__':
- main()
diff --git a/chromium/tools/fuchsia/fidlgen_js/runtime/fidl.mjs b/chromium/tools/fuchsia/fidlgen_js/runtime/fidl.mjs
deleted file mode 100644
index 7ccc51558aa..00000000000
--- a/chromium/tools/fuchsia/fidlgen_js/runtime/fidl.mjs
+++ /dev/null
@@ -1,136 +0,0 @@
-// Copyright 2018 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.
-
-// This is the JS runtime support library for code generated by fidlgen_js. It
-// mostly consists of helpers to facilitate encoding and decoding of FIDL
-// messages.
-
-const $fidl_kInitialBufferSize = 1024;
-
-const $fidl_kMessageHeaderSize = 16;
-const $fidl_kMessageTxidOffset = 0;
-const $fidl_kMessageOrdinalOffset = 12;
-
-const $fidl__kAlignment = 8;
-const $fidl__kAlignmentMask = 0x7;
-
-const $fidl__kLE = true;
-
-function $fidl__align(size) {
- return size + (($fidl__kAlignment - (size & $fidl__kAlignmentMask)) &
- $fidl__kAlignmentMask);
-}
-
-/**
- * @constructor
- * @param {number} ordinal
- */
-function $fidl_Encoder(ordinal) {
- var buf = new ArrayBuffer($fidl_kInitialBufferSize);
- this.data = new DataView(buf);
- this.extent = 0;
- this.handles = [];
- this.outOfLine = [];
- this._encodeMessageHeader(ordinal);
-}
-
-/**
- * @param {number} ordinal
- */
-$fidl_Encoder.prototype._encodeMessageHeader = function(ordinal) {
- this.alloc($fidl_kMessageHeaderSize);
- this.data.setUint32($fidl_kMessageOrdinalOffset, ordinal, $fidl__kLE);
-};
-
-/**
- * @param {number} size
- */
-$fidl_Encoder.prototype.alloc = function(size) {
- var offset = this.extent;
- this._claimMemory($fidl__align(size));
- return offset;
-};
-
-/**
- * @param {number} claimSize
- */
-$fidl_Encoder.prototype._claimMemory = function(claimSize) {
- this.extent += claimSize;
- if (this.extent > this.data.byteLength) {
- var newSize = this.data.byteLength + claimSize;
- newSize += newSize * 2;
- this._grow(newSize);
- }
-};
-
-/**
- * @param {number} newSize
- */
-$fidl_Encoder.prototype._grow = function(newSize) {
- var newBuffer = new ArrayBuffer(newSize);
- new Uint8Array(newBuffer).set(new Uint8Array(this.data.buffer));
- this.data = new DataView(newBuffer);
-};
-
-$fidl_Encoder.prototype.messageData = function() {
- // Add all out of line data.
- var len = this.outOfLine.length;
- for (var i = 0; i < len; i++) {
- this.outOfLine[i][0](this, this.outOfLine[i][1]);
- }
-
- // Return final result.
- return new DataView(this.data.buffer, 0, this.extent);
-};
-
-$fidl_Encoder.prototype.messageHandles = function() {
- return this.handles;
-};
-
-
-// Type tables and encoding helpers for generated Proxy code.
-const _kTT_int8 = {
- enc: function(e, o, v) { e.data.setInt8(o, v, $fidl__kLE); },
-};
-
-const _kTT_int16 = {
- enc: function(e, o, v) { e.data.setInt16(o, v, $fidl__kLE); },
-};
-
-const _kTT_int32 = {
- enc: function(e, o, v) { e.data.setUint32(o, v, $fidl__kLE); },
-};
-
-const _kTT_uint8 = {
- enc: function(e, o, v) { e.data.setUint8(o, v, $fidl__kLE); },
-};
-
-const _kTT_uint16 = {
- enc: function(e, o, v) { e.data.setUint16(o, v, $fidl__kLE); },
-};
-
-const _kTT_uint32 = {
- enc: function(e, o, v) { e.data.setUint32(o, v, $fidl__kLE); },
-};
-
-const _kTT_String_Nonnull = {
- enc: function(e, o, v) {
- if (v === null || v === undefined) throw "non-null string required";
- // Both size and data are uint64, but that's awkward in JS, so for now only
- // support a maximum of 32b lengths.
- var asUtf8 = zx.strToUtf8Array(v);
- e.data.setUint32(o, asUtf8.length, $fidl__kLE);
- e.data.setUint32(o + 4, 0, $fidl__kLE);
- e.data.setUint32(o + 8, 0xffffffff, $fidl__kLE);
- e.data.setUint32(o + 12, 0xffffffff, $fidl__kLE);
- e.outOfLine.push([$fidl_OutOfLineStringEnc, asUtf8]);
- },
-};
-
-function $fidl_OutOfLineStringEnc(e, strAsUtf8Array) {
- var start = e.alloc(strAsUtf8Array.length);
- for (var i = 0; i < strAsUtf8Array.length; i++) {
- e.data.setUint8(start + i, strAsUtf8Array[i], $fidl__kLE);
- }
-}
diff --git a/chromium/tools/fuchsia/fidlgen_js/runtime/zircon.cc b/chromium/tools/fuchsia/fidlgen_js/runtime/zircon.cc
deleted file mode 100644
index 7ae91489fba..00000000000
--- a/chromium/tools/fuchsia/fidlgen_js/runtime/zircon.cc
+++ /dev/null
@@ -1,178 +0,0 @@
-// Copyright 2018 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.
-
-#include "tools/fuchsia/fidlgen_js/runtime/zircon.h"
-
-#include <lib/zx/channel.h>
-#include <zircon/errors.h>
-#include <zircon/syscalls.h>
-#include <zircon/types.h>
-
-#include "base/bind.h"
-#include "gin/arguments.h"
-#include "gin/array_buffer.h"
-#include "gin/converter.h"
-#include "gin/data_object_builder.h"
-#include "gin/function_template.h"
-
-namespace {
-
-v8::Local<v8::Object> ZxChannelCreate(v8::Isolate* isolate) {
- zx::channel c1, c2;
- zx_status_t status = zx::channel::create(0, &c1, &c2);
- return gin::DataObjectBuilder(isolate)
- .Set("status", status)
- .Set("first", c1.release())
- .Set("second", c2.release())
- .Build();
-}
-
-zx_status_t ZxChannelWrite(gin::Arguments* args) {
- zx_handle_t handle;
- if (!args->GetNext(&handle)) {
- args->ThrowError();
- return ZX_ERR_INVALID_ARGS;
- }
-
- gin::ArrayBufferView data;
- if (!args->GetNext(&data)) {
- args->ThrowError();
- return ZX_ERR_INVALID_ARGS;
- }
-
- std::vector<zx_handle_t> handles;
- if (!args->GetNext(&handles)) {
- args->ThrowError();
- return ZX_ERR_INVALID_ARGS;
- }
-
- zx_status_t status =
- zx_channel_write(handle, 0, data.bytes(), data.num_bytes(),
- handles.data(), handles.size());
- return status;
-}
-
-v8::Local<v8::Value> StrToUtf8Array(gin::Arguments* args) {
- std::string str;
- // This converts the string to utf8 from ucs2, so then just repackage the
- // string as an array and return it.
- if (!args->GetNext(&str)) {
- args->ThrowError();
- return v8::Local<v8::Object>();
- }
-
- // TODO(crbug.com/883496): Not sure how to make a Uint8Array to return here
- // which would be a bit more efficient.
- std::vector<int> data;
- std::copy(str.begin(), str.end(), std::back_inserter(data));
- return gin::ConvertToV8(args->isolate(), data);
-}
-
-v8::Local<v8::Object> GetOrCreateZxObject(v8::Isolate* isolate,
- v8::Local<v8::Object> global) {
- v8::Local<v8::Object> zx;
- v8::Local<v8::Value> zx_value = global->Get(gin::StringToV8(isolate, "zx"));
- if (zx_value.IsEmpty() || !zx_value->IsObject()) {
- zx = v8::Object::New(isolate);
- global->Set(gin::StringToSymbol(isolate, "zx"), zx);
- } else {
- zx = v8::Local<v8::Object>::Cast(zx);
- }
- return zx;
-}
-
-} // namespace
-
-namespace fidljs {
-
-void InjectZxBindings(v8::Isolate* isolate, v8::Local<v8::Object> global) {
- v8::Local<v8::Object> zx = GetOrCreateZxObject(isolate, global);
-
-#define SET_CONSTANT(k) \
- zx->Set(gin::StringToSymbol(isolate, #k), gin::ConvertToV8(isolate, k))
-
- // zx_status_t.
- SET_CONSTANT(ZX_OK);
- SET_CONSTANT(ZX_ERR_INTERNAL);
- SET_CONSTANT(ZX_ERR_NOT_SUPPORTED);
- SET_CONSTANT(ZX_ERR_NO_RESOURCES);
- SET_CONSTANT(ZX_ERR_NO_MEMORY);
- SET_CONSTANT(ZX_ERR_INTERNAL_INTR_RETRY);
- SET_CONSTANT(ZX_ERR_INVALID_ARGS);
- SET_CONSTANT(ZX_ERR_BAD_HANDLE);
- SET_CONSTANT(ZX_ERR_WRONG_TYPE);
- SET_CONSTANT(ZX_ERR_BAD_SYSCALL);
- SET_CONSTANT(ZX_ERR_OUT_OF_RANGE);
- SET_CONSTANT(ZX_ERR_BUFFER_TOO_SMALL);
- SET_CONSTANT(ZX_ERR_BAD_STATE);
- SET_CONSTANT(ZX_ERR_TIMED_OUT);
- SET_CONSTANT(ZX_ERR_SHOULD_WAIT);
- SET_CONSTANT(ZX_ERR_CANCELED);
- SET_CONSTANT(ZX_ERR_PEER_CLOSED);
- SET_CONSTANT(ZX_ERR_NOT_FOUND);
- SET_CONSTANT(ZX_ERR_ALREADY_EXISTS);
- SET_CONSTANT(ZX_ERR_ALREADY_BOUND);
- SET_CONSTANT(ZX_ERR_UNAVAILABLE);
- SET_CONSTANT(ZX_ERR_ACCESS_DENIED);
- SET_CONSTANT(ZX_ERR_IO);
- SET_CONSTANT(ZX_ERR_IO_REFUSED);
- SET_CONSTANT(ZX_ERR_IO_DATA_INTEGRITY);
- SET_CONSTANT(ZX_ERR_IO_DATA_LOSS);
- SET_CONSTANT(ZX_ERR_IO_NOT_PRESENT);
- SET_CONSTANT(ZX_ERR_IO_OVERRUN);
- SET_CONSTANT(ZX_ERR_IO_MISSED_DEADLINE);
- SET_CONSTANT(ZX_ERR_IO_INVALID);
- SET_CONSTANT(ZX_ERR_BAD_PATH);
- SET_CONSTANT(ZX_ERR_NOT_DIR);
- SET_CONSTANT(ZX_ERR_NOT_FILE);
- SET_CONSTANT(ZX_ERR_FILE_BIG);
- SET_CONSTANT(ZX_ERR_NO_SPACE);
- SET_CONSTANT(ZX_ERR_NOT_EMPTY);
- SET_CONSTANT(ZX_ERR_STOP);
- SET_CONSTANT(ZX_ERR_NEXT);
- SET_CONSTANT(ZX_ERR_ASYNC);
- SET_CONSTANT(ZX_ERR_PROTOCOL_NOT_SUPPORTED);
- SET_CONSTANT(ZX_ERR_ADDRESS_UNREACHABLE);
- SET_CONSTANT(ZX_ERR_ADDRESS_IN_USE);
- SET_CONSTANT(ZX_ERR_NOT_CONNECTED);
- SET_CONSTANT(ZX_ERR_CONNECTION_REFUSED);
- SET_CONSTANT(ZX_ERR_CONNECTION_RESET);
- SET_CONSTANT(ZX_ERR_CONNECTION_ABORTED);
-
- // Handle APIs.
- zx->Set(gin::StringToSymbol(isolate, "handleClose"),
- gin::CreateFunctionTemplate(isolate,
- base::BindRepeating(&zx_handle_close))
- ->GetFunction());
- SET_CONSTANT(ZX_HANDLE_INVALID);
-
- // Channel APIs.
- zx->Set(gin::StringToSymbol(isolate, "channelCreate"),
- gin::CreateFunctionTemplate(isolate,
- base::BindRepeating(&ZxChannelCreate))
- ->GetFunction());
- zx->Set(
- gin::StringToSymbol(isolate, "channelWrite"),
- gin::CreateFunctionTemplate(isolate, base::BindRepeating(&ZxChannelWrite))
- ->GetFunction());
- SET_CONSTANT(ZX_CHANNEL_READABLE);
- SET_CONSTANT(ZX_CHANNEL_WRITABLE);
- SET_CONSTANT(ZX_CHANNEL_PEER_CLOSED);
- SET_CONSTANT(ZX_CHANNEL_READ_MAY_DISCARD);
- SET_CONSTANT(ZX_CHANNEL_MAX_MSG_BYTES);
- SET_CONSTANT(ZX_CHANNEL_MAX_MSG_HANDLES);
-
- // Utility to make string handling easier to convert from a UCS2 JS string to
- // an array of UTF-8 (which is how strings are represented in FIDL).
- // TODO(crbug.com/883496): This is not really zx, should move to a generic
- // runtime helper file if there are more similar C++ helpers required.
- zx->Set(
- gin::StringToSymbol(isolate, "strToUtf8Array"),
- gin::CreateFunctionTemplate(isolate, base::BindRepeating(&StrToUtf8Array))
- ->GetFunction());
-
-#undef SET_CONSTANT
-}
-
-} // namespace fidljs
diff --git a/chromium/tools/fuchsia/fidlgen_js/runtime/zircon.h b/chromium/tools/fuchsia/fidlgen_js/runtime/zircon.h
deleted file mode 100644
index 7bf6ea77a50..00000000000
--- a/chromium/tools/fuchsia/fidlgen_js/runtime/zircon.h
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright 2018 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.
-
-#ifndef TOOLS_FUCHSIA_FIDLGEN_JS_RUNTIME_ZIRCON_H_
-#define TOOLS_FUCHSIA_FIDLGEN_JS_RUNTIME_ZIRCON_H_
-
-#include "v8/include/v8.h"
-
-namespace fidljs {
-
-// Adds Zircon APIs bindings to |global|, for use by JavaScript callers.
-void InjectZxBindings(v8::Isolate* isolate, v8::Local<v8::Object> global);
-
-} // namespace fidljs
-
-#endif // TOOLS_FUCHSIA_FIDLGEN_JS_RUNTIME_ZIRCON_H_
diff --git a/chromium/tools/fuchsia/fidlgen_js/third_party/__init__.py b/chromium/tools/fuchsia/fidlgen_js/third_party/__init__.py
deleted file mode 100644
index e69de29bb2d..00000000000
--- a/chromium/tools/fuchsia/fidlgen_js/third_party/__init__.py
+++ /dev/null
diff --git a/chromium/tools/fuchsia/fidlgen_js/third_party/enum34/LICENSE b/chromium/tools/fuchsia/fidlgen_js/third_party/enum34/LICENSE
deleted file mode 100644
index 9003b8850e7..00000000000
--- a/chromium/tools/fuchsia/fidlgen_js/third_party/enum34/LICENSE
+++ /dev/null
@@ -1,32 +0,0 @@
-Copyright (c) 2013, Ethan Furman.
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-
- Redistributions of source code must retain the above
- copyright notice, this list of conditions and the
- following disclaimer.
-
- Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials
- provided with the distribution.
-
- Neither the name Ethan Furman nor the names of any
- contributors may be used to endorse or promote products
- derived from this software without specific prior written
- permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
diff --git a/chromium/tools/fuchsia/fidlgen_js/third_party/enum34/README.chromium b/chromium/tools/fuchsia/fidlgen_js/third_party/enum34/README.chromium
deleted file mode 100644
index 4d0ef07c43e..00000000000
--- a/chromium/tools/fuchsia/fidlgen_js/third_party/enum34/README.chromium
+++ /dev/null
@@ -1,15 +0,0 @@
-Name: enum34
-Short Name: enum34
-URL: https://bitbucket.org/stoneleaf/enum34
-License: BSD
-License File: LICENSE
-Revision: f24487b
-Security Critical: no
-
-
-Description:
-
-'Enum' backported from Python 3.4 to earlier Python versions. Only LICENSE and
-__init__.py are taken, other packaging files, documentation, etc. removed.
-
-Only used at build time.
diff --git a/chromium/tools/fuchsia/fidlgen_js/third_party/enum34/__init__.py b/chromium/tools/fuchsia/fidlgen_js/third_party/enum34/__init__.py
deleted file mode 100644
index d6ffb3a40fe..00000000000
--- a/chromium/tools/fuchsia/fidlgen_js/third_party/enum34/__init__.py
+++ /dev/null
@@ -1,837 +0,0 @@
-"""Python Enumerations"""
-
-import sys as _sys
-
-__all__ = ['Enum', 'IntEnum', 'unique']
-
-version = 1, 1, 6
-
-pyver = float('%s.%s' % _sys.version_info[:2])
-
-try:
- any
-except NameError:
- def any(iterable):
- for element in iterable:
- if element:
- return True
- return False
-
-try:
- from collections import OrderedDict
-except ImportError:
- OrderedDict = None
-
-try:
- basestring
-except NameError:
- # In Python 2 basestring is the ancestor of both str and unicode
- # in Python 3 it's just str, but was missing in 3.1
- basestring = str
-
-try:
- unicode
-except NameError:
- # In Python 3 unicode no longer exists (it's just str)
- unicode = str
-
-class _RouteClassAttributeToGetattr(object):
- """Route attribute access on a class to __getattr__.
-
- This is a descriptor, used to define attributes that act differently when
- accessed through an instance and through a class. Instance access remains
- normal, but access to an attribute through a class will be routed to the
- class's __getattr__ method; this is done by raising AttributeError.
-
- """
- def __init__(self, fget=None):
- self.fget = fget
-
- def __get__(self, instance, ownerclass=None):
- if instance is None:
- raise AttributeError()
- return self.fget(instance)
-
- def __set__(self, instance, value):
- raise AttributeError("can't set attribute")
-
- def __delete__(self, instance):
- raise AttributeError("can't delete attribute")
-
-
-def _is_descriptor(obj):
- """Returns True if obj is a descriptor, False otherwise."""
- return (
- hasattr(obj, '__get__') or
- hasattr(obj, '__set__') or
- hasattr(obj, '__delete__'))
-
-
-def _is_dunder(name):
- """Returns True if a __dunder__ name, False otherwise."""
- return (name[:2] == name[-2:] == '__' and
- name[2:3] != '_' and
- name[-3:-2] != '_' and
- len(name) > 4)
-
-
-def _is_sunder(name):
- """Returns True if a _sunder_ name, False otherwise."""
- return (name[0] == name[-1] == '_' and
- name[1:2] != '_' and
- name[-2:-1] != '_' and
- len(name) > 2)
-
-
-def _make_class_unpicklable(cls):
- """Make the given class un-picklable."""
- def _break_on_call_reduce(self, protocol=None):
- raise TypeError('%r cannot be pickled' % self)
- cls.__reduce_ex__ = _break_on_call_reduce
- cls.__module__ = '<unknown>'
-
-
-class _EnumDict(dict):
- """Track enum member order and ensure member names are not reused.
-
- EnumMeta will use the names found in self._member_names as the
- enumeration member names.
-
- """
- def __init__(self):
- super(_EnumDict, self).__init__()
- self._member_names = []
-
- def __setitem__(self, key, value):
- """Changes anything not dundered or not a descriptor.
-
- If a descriptor is added with the same name as an enum member, the name
- is removed from _member_names (this may leave a hole in the numerical
- sequence of values).
-
- If an enum member name is used twice, an error is raised; duplicate
- values are not checked for.
-
- Single underscore (sunder) names are reserved.
-
- Note: in 3.x __order__ is simply discarded as a not necessary piece
- leftover from 2.x
-
- """
- if pyver >= 3.0 and key in ('_order_', '__order__'):
- return
- elif key == '__order__':
- key = '_order_'
- if _is_sunder(key):
- if key != '_order_':
- raise ValueError('_names_ are reserved for future Enum use')
- elif _is_dunder(key):
- pass
- elif key in self._member_names:
- # descriptor overwriting an enum?
- raise TypeError('Attempted to reuse key: %r' % key)
- elif not _is_descriptor(value):
- if key in self:
- # enum overwriting a descriptor?
- raise TypeError('Key already defined as: %r' % self[key])
- self._member_names.append(key)
- super(_EnumDict, self).__setitem__(key, value)
-
-
-# Dummy value for Enum as EnumMeta explicity checks for it, but of course until
-# EnumMeta finishes running the first time the Enum class doesn't exist. This
-# is also why there are checks in EnumMeta like `if Enum is not None`
-Enum = None
-
-
-class EnumMeta(type):
- """Metaclass for Enum"""
- @classmethod
- def __prepare__(metacls, cls, bases):
- return _EnumDict()
-
- def __new__(metacls, cls, bases, classdict):
- # an Enum class is final once enumeration items have been defined; it
- # cannot be mixed with other types (int, float, etc.) if it has an
- # inherited __new__ unless a new __new__ is defined (or the resulting
- # class will fail).
- if type(classdict) is dict:
- original_dict = classdict
- classdict = _EnumDict()
- for k, v in original_dict.items():
- classdict[k] = v
-
- member_type, first_enum = metacls._get_mixins_(bases)
- __new__, save_new, use_args = metacls._find_new_(classdict, member_type,
- first_enum)
- # save enum items into separate mapping so they don't get baked into
- # the new class
- members = dict((k, classdict[k]) for k in classdict._member_names)
- for name in classdict._member_names:
- del classdict[name]
-
- # py2 support for definition order
- _order_ = classdict.get('_order_')
- if _order_ is None:
- if pyver < 3.0:
- try:
- _order_ = [name for (name, value) in sorted(members.items(), key=lambda item: item[1])]
- except TypeError:
- _order_ = [name for name in sorted(members.keys())]
- else:
- _order_ = classdict._member_names
- else:
- del classdict['_order_']
- if pyver < 3.0:
- _order_ = _order_.replace(',', ' ').split()
- aliases = [name for name in members if name not in _order_]
- _order_ += aliases
-
- # check for illegal enum names (any others?)
- invalid_names = set(members) & set(['mro'])
- if invalid_names:
- raise ValueError('Invalid enum member name(s): %s' % (
- ', '.join(invalid_names), ))
-
- # save attributes from super classes so we know if we can take
- # the shortcut of storing members in the class dict
- base_attributes = set([a for b in bases for a in b.__dict__])
- # create our new Enum type
- enum_class = super(EnumMeta, metacls).__new__(metacls, cls, bases, classdict)
- enum_class._member_names_ = [] # names in random order
- if OrderedDict is not None:
- enum_class._member_map_ = OrderedDict()
- else:
- enum_class._member_map_ = {} # name->value map
- enum_class._member_type_ = member_type
-
- # Reverse value->name map for hashable values.
- enum_class._value2member_map_ = {}
-
- # instantiate them, checking for duplicates as we go
- # we instantiate first instead of checking for duplicates first in case
- # a custom __new__ is doing something funky with the values -- such as
- # auto-numbering ;)
- if __new__ is None:
- __new__ = enum_class.__new__
- for member_name in _order_:
- value = members[member_name]
- if not isinstance(value, tuple):
- args = (value, )
- else:
- args = value
- if member_type is tuple: # special case for tuple enums
- args = (args, ) # wrap it one more time
- if not use_args or not args:
- enum_member = __new__(enum_class)
- if not hasattr(enum_member, '_value_'):
- enum_member._value_ = value
- else:
- enum_member = __new__(enum_class, *args)
- if not hasattr(enum_member, '_value_'):
- enum_member._value_ = member_type(*args)
- value = enum_member._value_
- enum_member._name_ = member_name
- enum_member.__objclass__ = enum_class
- enum_member.__init__(*args)
- # If another member with the same value was already defined, the
- # new member becomes an alias to the existing one.
- for name, canonical_member in enum_class._member_map_.items():
- if canonical_member.value == enum_member._value_:
- enum_member = canonical_member
- break
- else:
- # Aliases don't appear in member names (only in __members__).
- enum_class._member_names_.append(member_name)
- # performance boost for any member that would not shadow
- # a DynamicClassAttribute (aka _RouteClassAttributeToGetattr)
- if member_name not in base_attributes:
- setattr(enum_class, member_name, enum_member)
- # now add to _member_map_
- enum_class._member_map_[member_name] = enum_member
- try:
- # This may fail if value is not hashable. We can't add the value
- # to the map, and by-value lookups for this value will be
- # linear.
- enum_class._value2member_map_[value] = enum_member
- except TypeError:
- pass
-
-
- # If a custom type is mixed into the Enum, and it does not know how
- # to pickle itself, pickle.dumps will succeed but pickle.loads will
- # fail. Rather than have the error show up later and possibly far
- # from the source, sabotage the pickle protocol for this class so
- # that pickle.dumps also fails.
- #
- # However, if the new class implements its own __reduce_ex__, do not
- # sabotage -- it's on them to make sure it works correctly. We use
- # __reduce_ex__ instead of any of the others as it is preferred by
- # pickle over __reduce__, and it handles all pickle protocols.
- unpicklable = False
- if '__reduce_ex__' not in classdict:
- if member_type is not object:
- methods = ('__getnewargs_ex__', '__getnewargs__',
- '__reduce_ex__', '__reduce__')
- if not any(m in member_type.__dict__ for m in methods):
- _make_class_unpicklable(enum_class)
- unpicklable = True
-
-
- # double check that repr and friends are not the mixin's or various
- # things break (such as pickle)
- for name in ('__repr__', '__str__', '__format__', '__reduce_ex__'):
- class_method = getattr(enum_class, name)
- obj_method = getattr(member_type, name, None)
- enum_method = getattr(first_enum, name, None)
- if name not in classdict and class_method is not enum_method:
- if name == '__reduce_ex__' and unpicklable:
- continue
- setattr(enum_class, name, enum_method)
-
- # method resolution and int's are not playing nice
- # Python's less than 2.6 use __cmp__
-
- if pyver < 2.6:
-
- if issubclass(enum_class, int):
- setattr(enum_class, '__cmp__', getattr(int, '__cmp__'))
-
- elif pyver < 3.0:
-
- if issubclass(enum_class, int):
- for method in (
- '__le__',
- '__lt__',
- '__gt__',
- '__ge__',
- '__eq__',
- '__ne__',
- '__hash__',
- ):
- setattr(enum_class, method, getattr(int, method))
-
- # replace any other __new__ with our own (as long as Enum is not None,
- # anyway) -- again, this is to support pickle
- if Enum is not None:
- # if the user defined their own __new__, save it before it gets
- # clobbered in case they subclass later
- if save_new:
- setattr(enum_class, '__member_new__', enum_class.__dict__['__new__'])
- setattr(enum_class, '__new__', Enum.__dict__['__new__'])
- return enum_class
-
- def __bool__(cls):
- """
- classes/types should always be True.
- """
- return True
-
- def __call__(cls, value, names=None, module=None, type=None, start=1):
- """Either returns an existing member, or creates a new enum class.
-
- This method is used both when an enum class is given a value to match
- to an enumeration member (i.e. Color(3)) and for the functional API
- (i.e. Color = Enum('Color', names='red green blue')).
-
- When used for the functional API: `module`, if set, will be stored in
- the new class' __module__ attribute; `type`, if set, will be mixed in
- as the first base class.
-
- Note: if `module` is not set this routine will attempt to discover the
- calling module by walking the frame stack; if this is unsuccessful
- the resulting class will not be pickleable.
-
- """
- if names is None: # simple value lookup
- return cls.__new__(cls, value)
- # otherwise, functional API: we're creating a new Enum type
- return cls._create_(value, names, module=module, type=type, start=start)
-
- def __contains__(cls, member):
- return isinstance(member, cls) and member.name in cls._member_map_
-
- def __delattr__(cls, attr):
- # nicer error message when someone tries to delete an attribute
- # (see issue19025).
- if attr in cls._member_map_:
- raise AttributeError(
- "%s: cannot delete Enum member." % cls.__name__)
- super(EnumMeta, cls).__delattr__(attr)
-
- def __dir__(self):
- return (['__class__', '__doc__', '__members__', '__module__'] +
- self._member_names_)
-
- @property
- def __members__(cls):
- """Returns a mapping of member name->value.
-
- This mapping lists all enum members, including aliases. Note that this
- is a copy of the internal mapping.
-
- """
- return cls._member_map_.copy()
-
- def __getattr__(cls, name):
- """Return the enum member matching `name`
-
- We use __getattr__ instead of descriptors or inserting into the enum
- class' __dict__ in order to support `name` and `value` being both
- properties for enum members (which live in the class' __dict__) and
- enum members themselves.
-
- """
- if _is_dunder(name):
- raise AttributeError(name)
- try:
- return cls._member_map_[name]
- except KeyError:
- raise AttributeError(name)
-
- def __getitem__(cls, name):
- return cls._member_map_[name]
-
- def __iter__(cls):
- return (cls._member_map_[name] for name in cls._member_names_)
-
- def __reversed__(cls):
- return (cls._member_map_[name] for name in reversed(cls._member_names_))
-
- def __len__(cls):
- return len(cls._member_names_)
-
- __nonzero__ = __bool__
-
- def __repr__(cls):
- return "<enum %r>" % cls.__name__
-
- def __setattr__(cls, name, value):
- """Block attempts to reassign Enum members.
-
- A simple assignment to the class namespace only changes one of the
- several possible ways to get an Enum member from the Enum class,
- resulting in an inconsistent Enumeration.
-
- """
- member_map = cls.__dict__.get('_member_map_', {})
- if name in member_map:
- raise AttributeError('Cannot reassign members.')
- super(EnumMeta, cls).__setattr__(name, value)
-
- def _create_(cls, class_name, names=None, module=None, type=None, start=1):
- """Convenience method to create a new Enum class.
-
- `names` can be:
-
- * A string containing member names, separated either with spaces or
- commas. Values are auto-numbered from 1.
- * An iterable of member names. Values are auto-numbered from 1.
- * An iterable of (member name, value) pairs.
- * A mapping of member name -> value.
-
- """
- if pyver < 3.0:
- # if class_name is unicode, attempt a conversion to ASCII
- if isinstance(class_name, unicode):
- try:
- class_name = class_name.encode('ascii')
- except UnicodeEncodeError:
- raise TypeError('%r is not representable in ASCII' % class_name)
- metacls = cls.__class__
- if type is None:
- bases = (cls, )
- else:
- bases = (type, cls)
- classdict = metacls.__prepare__(class_name, bases)
- _order_ = []
-
- # special processing needed for names?
- if isinstance(names, basestring):
- names = names.replace(',', ' ').split()
- if isinstance(names, (tuple, list)) and isinstance(names[0], basestring):
- names = [(e, i+start) for (i, e) in enumerate(names)]
-
- # Here, names is either an iterable of (name, value) or a mapping.
- item = None # in case names is empty
- for item in names:
- if isinstance(item, basestring):
- member_name, member_value = item, names[item]
- else:
- member_name, member_value = item
- classdict[member_name] = member_value
- _order_.append(member_name)
- # only set _order_ in classdict if name/value was not from a mapping
- if not isinstance(item, basestring):
- classdict['_order_'] = ' '.join(_order_)
- enum_class = metacls.__new__(metacls, class_name, bases, classdict)
-
- # TODO: replace the frame hack if a blessed way to know the calling
- # module is ever developed
- if module is None:
- try:
- module = _sys._getframe(2).f_globals['__name__']
- except (AttributeError, ValueError):
- pass
- if module is None:
- _make_class_unpicklable(enum_class)
- else:
- enum_class.__module__ = module
-
- return enum_class
-
- @staticmethod
- def _get_mixins_(bases):
- """Returns the type for creating enum members, and the first inherited
- enum class.
-
- bases: the tuple of bases that was given to __new__
-
- """
- if not bases or Enum is None:
- return object, Enum
-
-
- # double check that we are not subclassing a class with existing
- # enumeration members; while we're at it, see if any other data
- # type has been mixed in so we can use the correct __new__
- member_type = first_enum = None
- for base in bases:
- if (base is not Enum and
- issubclass(base, Enum) and
- base._member_names_):
- raise TypeError("Cannot extend enumerations")
- # base is now the last base in bases
- if not issubclass(base, Enum):
- raise TypeError("new enumerations must be created as "
- "`ClassName([mixin_type,] enum_type)`")
-
- # get correct mix-in type (either mix-in type of Enum subclass, or
- # first base if last base is Enum)
- if not issubclass(bases[0], Enum):
- member_type = bases[0] # first data type
- first_enum = bases[-1] # enum type
- else:
- for base in bases[0].__mro__:
- # most common: (IntEnum, int, Enum, object)
- # possible: (<Enum 'AutoIntEnum'>, <Enum 'IntEnum'>,
- # <class 'int'>, <Enum 'Enum'>,
- # <class 'object'>)
- if issubclass(base, Enum):
- if first_enum is None:
- first_enum = base
- else:
- if member_type is None:
- member_type = base
-
- return member_type, first_enum
-
- if pyver < 3.0:
- @staticmethod
- def _find_new_(classdict, member_type, first_enum):
- """Returns the __new__ to be used for creating the enum members.
-
- classdict: the class dictionary given to __new__
- member_type: the data type whose __new__ will be used by default
- first_enum: enumeration to check for an overriding __new__
-
- """
- # now find the correct __new__, checking to see of one was defined
- # by the user; also check earlier enum classes in case a __new__ was
- # saved as __member_new__
- __new__ = classdict.get('__new__', None)
- if __new__:
- return None, True, True # __new__, save_new, use_args
-
- N__new__ = getattr(None, '__new__')
- O__new__ = getattr(object, '__new__')
- if Enum is None:
- E__new__ = N__new__
- else:
- E__new__ = Enum.__dict__['__new__']
- # check all possibles for __member_new__ before falling back to
- # __new__
- for method in ('__member_new__', '__new__'):
- for possible in (member_type, first_enum):
- try:
- target = possible.__dict__[method]
- except (AttributeError, KeyError):
- target = getattr(possible, method, None)
- if target not in [
- None,
- N__new__,
- O__new__,
- E__new__,
- ]:
- if method == '__member_new__':
- classdict['__new__'] = target
- return None, False, True
- if isinstance(target, staticmethod):
- target = target.__get__(member_type)
- __new__ = target
- break
- if __new__ is not None:
- break
- else:
- __new__ = object.__new__
-
- # if a non-object.__new__ is used then whatever value/tuple was
- # assigned to the enum member name will be passed to __new__ and to the
- # new enum member's __init__
- if __new__ is object.__new__:
- use_args = False
- else:
- use_args = True
-
- return __new__, False, use_args
- else:
- @staticmethod
- def _find_new_(classdict, member_type, first_enum):
- """Returns the __new__ to be used for creating the enum members.
-
- classdict: the class dictionary given to __new__
- member_type: the data type whose __new__ will be used by default
- first_enum: enumeration to check for an overriding __new__
-
- """
- # now find the correct __new__, checking to see of one was defined
- # by the user; also check earlier enum classes in case a __new__ was
- # saved as __member_new__
- __new__ = classdict.get('__new__', None)
-
- # should __new__ be saved as __member_new__ later?
- save_new = __new__ is not None
-
- if __new__ is None:
- # check all possibles for __member_new__ before falling back to
- # __new__
- for method in ('__member_new__', '__new__'):
- for possible in (member_type, first_enum):
- target = getattr(possible, method, None)
- if target not in (
- None,
- None.__new__,
- object.__new__,
- Enum.__new__,
- ):
- __new__ = target
- break
- if __new__ is not None:
- break
- else:
- __new__ = object.__new__
-
- # if a non-object.__new__ is used then whatever value/tuple was
- # assigned to the enum member name will be passed to __new__ and to the
- # new enum member's __init__
- if __new__ is object.__new__:
- use_args = False
- else:
- use_args = True
-
- return __new__, save_new, use_args
-
-
-########################################################
-# In order to support Python 2 and 3 with a single
-# codebase we have to create the Enum methods separately
-# and then use the `type(name, bases, dict)` method to
-# create the class.
-########################################################
-temp_enum_dict = {}
-temp_enum_dict['__doc__'] = "Generic enumeration.\n\n Derive from this class to define new enumerations.\n\n"
-
-def __new__(cls, value):
- # all enum instances are actually created during class construction
- # without calling this method; this method is called by the metaclass'
- # __call__ (i.e. Color(3) ), and by pickle
- if type(value) is cls:
- # For lookups like Color(Color.red)
- value = value.value
- #return value
- # by-value search for a matching enum member
- # see if it's in the reverse mapping (for hashable values)
- try:
- if value in cls._value2member_map_:
- return cls._value2member_map_[value]
- except TypeError:
- # not there, now do long search -- O(n) behavior
- for member in cls._member_map_.values():
- if member.value == value:
- return member
- raise ValueError("%s is not a valid %s" % (value, cls.__name__))
-temp_enum_dict['__new__'] = __new__
-del __new__
-
-def __repr__(self):
- return "<%s.%s: %r>" % (
- self.__class__.__name__, self._name_, self._value_)
-temp_enum_dict['__repr__'] = __repr__
-del __repr__
-
-def __str__(self):
- return "%s.%s" % (self.__class__.__name__, self._name_)
-temp_enum_dict['__str__'] = __str__
-del __str__
-
-if pyver >= 3.0:
- def __dir__(self):
- added_behavior = [
- m
- for cls in self.__class__.mro()
- for m in cls.__dict__
- if m[0] != '_' and m not in self._member_map_
- ]
- return (['__class__', '__doc__', '__module__', ] + added_behavior)
- temp_enum_dict['__dir__'] = __dir__
- del __dir__
-
-def __format__(self, format_spec):
- # mixed-in Enums should use the mixed-in type's __format__, otherwise
- # we can get strange results with the Enum name showing up instead of
- # the value
-
- # pure Enum branch
- if self._member_type_ is object:
- cls = str
- val = str(self)
- # mix-in branch
- else:
- cls = self._member_type_
- val = self.value
- return cls.__format__(val, format_spec)
-temp_enum_dict['__format__'] = __format__
-del __format__
-
-
-####################################
-# Python's less than 2.6 use __cmp__
-
-if pyver < 2.6:
-
- def __cmp__(self, other):
- if type(other) is self.__class__:
- if self is other:
- return 0
- return -1
- return NotImplemented
- raise TypeError("unorderable types: %s() and %s()" % (self.__class__.__name__, other.__class__.__name__))
- temp_enum_dict['__cmp__'] = __cmp__
- del __cmp__
-
-else:
-
- def __le__(self, other):
- raise TypeError("unorderable types: %s() <= %s()" % (self.__class__.__name__, other.__class__.__name__))
- temp_enum_dict['__le__'] = __le__
- del __le__
-
- def __lt__(self, other):
- raise TypeError("unorderable types: %s() < %s()" % (self.__class__.__name__, other.__class__.__name__))
- temp_enum_dict['__lt__'] = __lt__
- del __lt__
-
- def __ge__(self, other):
- raise TypeError("unorderable types: %s() >= %s()" % (self.__class__.__name__, other.__class__.__name__))
- temp_enum_dict['__ge__'] = __ge__
- del __ge__
-
- def __gt__(self, other):
- raise TypeError("unorderable types: %s() > %s()" % (self.__class__.__name__, other.__class__.__name__))
- temp_enum_dict['__gt__'] = __gt__
- del __gt__
-
-
-def __eq__(self, other):
- if type(other) is self.__class__:
- return self is other
- return NotImplemented
-temp_enum_dict['__eq__'] = __eq__
-del __eq__
-
-def __ne__(self, other):
- if type(other) is self.__class__:
- return self is not other
- return NotImplemented
-temp_enum_dict['__ne__'] = __ne__
-del __ne__
-
-def __hash__(self):
- return hash(self._name_)
-temp_enum_dict['__hash__'] = __hash__
-del __hash__
-
-def __reduce_ex__(self, proto):
- return self.__class__, (self._value_, )
-temp_enum_dict['__reduce_ex__'] = __reduce_ex__
-del __reduce_ex__
-
-# _RouteClassAttributeToGetattr is used to provide access to the `name`
-# and `value` properties of enum members while keeping some measure of
-# protection from modification, while still allowing for an enumeration
-# to have members named `name` and `value`. This works because enumeration
-# members are not set directly on the enum class -- __getattr__ is
-# used to look them up.
-
-@_RouteClassAttributeToGetattr
-def name(self):
- return self._name_
-temp_enum_dict['name'] = name
-del name
-
-@_RouteClassAttributeToGetattr
-def value(self):
- return self._value_
-temp_enum_dict['value'] = value
-del value
-
-@classmethod
-def _convert(cls, name, module, filter, source=None):
- """
- Create a new Enum subclass that replaces a collection of global constants
- """
- # convert all constants from source (or module) that pass filter() to
- # a new Enum called name, and export the enum and its members back to
- # module;
- # also, replace the __reduce_ex__ method so unpickling works in
- # previous Python versions
- module_globals = vars(_sys.modules[module])
- if source:
- source = vars(source)
- else:
- source = module_globals
- members = dict((name, value) for name, value in source.items() if filter(name))
- cls = cls(name, members, module=module)
- cls.__reduce_ex__ = _reduce_ex_by_name
- module_globals.update(cls.__members__)
- module_globals[name] = cls
- return cls
-temp_enum_dict['_convert'] = _convert
-del _convert
-
-Enum = EnumMeta('Enum', (object, ), temp_enum_dict)
-del temp_enum_dict
-
-# Enum has now been created
-###########################
-
-class IntEnum(int, Enum):
- """Enum where members are also (and must be) ints"""
-
-def _reduce_ex_by_name(self, proto):
- return self.name
-
-def unique(enumeration):
- """Class decorator that ensures only unique members exist in an enumeration."""
- duplicates = []
- for name, member in enumeration.__members__.items():
- if name != member.name:
- duplicates.append((name, member.name))
- if duplicates:
- duplicate_names = ', '.join(
- ["%s -> %s" % (alias, name) for (alias, name) in duplicates]
- )
- raise ValueError('duplicate names found in %r: %s' %
- (enumeration, duplicate_names)
- )
- return enumeration
diff --git a/chromium/tools/gdb/gdb_chrome.py b/chromium/tools/gdb/gdb_chrome.py
index fdbf6ff2178..c8e25947fe0 100644
--- a/chromium/tools/gdb/gdb_chrome.py
+++ b/chromium/tools/gdb/gdb_chrome.py
@@ -30,6 +30,11 @@ import sys
sys.path.insert(0, os.path.join(
os.path.dirname(os.path.abspath(__file__)),
+ 'util'))
+import class_methods
+
+sys.path.insert(0, os.path.join(
+ os.path.dirname(os.path.abspath(__file__)),
'..', '..', 'third_party', 'blink', 'tools', 'gdb'))
try:
import blink
@@ -375,3 +380,29 @@ pp_set.add_printer('content::RenderProcessHostImpl',
gdb.printing.register_pretty_printer(gdb, pp_set, replace=_DEBUGGING)
+
+
+"""Implementations of inlined libc++ std container functions."""
+@class_methods.Class('std::__1::vector', template_types=['T'])
+class LibcppVector(object):
+ @class_methods.member_function('T&', 'operator[]', ['int'])
+ def element(obj, i):
+ return obj['__begin_'][i]
+
+ @class_methods.member_function('size_t', 'size', [])
+ def size(obj):
+ return obj['__end_'] - obj['__begin_']
+
+@class_methods.Class('std::__1::unique_ptr', template_types=['T'])
+class LibcppUniquePtr(object):
+ @class_methods.member_function('T*', 'get', [])
+ def get(obj):
+ return obj['__ptr_']['__value_']
+
+ @class_methods.member_function('T*', 'operator->', [])
+ def arrow(obj):
+ return obj['__ptr_']['__value_']
+
+ @class_methods.member_function('T&', 'operator*', [])
+ def dereference(obj):
+ return obj['__ptr_']['__value_'].dereference()
diff --git a/chromium/tools/gdb/gdbinit b/chromium/tools/gdb/gdbinit
index c19bef38a6f..18cc9b61078 100644
--- a/chromium/tools/gdb/gdbinit
+++ b/chromium/tools/gdb/gdbinit
@@ -34,7 +34,7 @@ def load_libcxx_pretty_printers(compile_dir):
src_dir, _ = git.communicate()
if git.returncode:
return
- libcxx_pretty_printers = os.path.join(src_dir.rstrip(), 'third_party',
+ libcxx_pretty_printers = os.path.join(str(src_dir).rstrip(), 'third_party',
'libcxx-pretty-printers', 'src')
if not os.path.isdir(libcxx_pretty_printers):
return
diff --git a/chromium/tools/gdb/util/class_methods.py b/chromium/tools/gdb/util/class_methods.py
new file mode 100644
index 00000000000..53bf5ef372e
--- /dev/null
+++ b/chromium/tools/gdb/util/class_methods.py
@@ -0,0 +1,185 @@
+# Copyright (c) 2018 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.
+
+"""Helper library for defining XMethod implementations on C++ classes.
+
+Include this library and then define python implementations of C++ methods
+using the Class and member_function decorator functions.
+"""
+
+import gdb
+import gdb.xmethod
+import operator
+import re
+
+
+class MemberFunction(object):
+ def __init__(self, return_type, name, arguments, wrapped_function):
+ self.return_type = return_type
+ self.name = name
+ self.arguments = arguments
+ self.function_ = wrapped_function
+
+ def __call__(self, *args):
+ self.function_(*args)
+
+
+def member_function(return_type, name, arguments):
+ """Decorate a member function.
+
+ See Class decorator for example usage within a class.
+
+ Args:
+ return_type: The return type of the function (e.g. 'int')
+ name: The function name (e.g. 'sum')
+ arguments: The argument types for this function (e.g. ['int', 'int'])
+
+ Each type can be a string (e.g. 'int', 'std::string', 'T*') or a
+ function which constructs the return type. See CreateTypeResolver
+ for details about type resolution.
+ """
+ def DefineMember(fn):
+ return MemberFunction(return_type, name, arguments, fn)
+ return DefineMember
+
+
+def Class(class_name, template_types):
+ """Decorate a python class with its corresponding C++ type.
+ Args:
+ class_name: The canonical string identifier for the class (e.g. base::Foo)
+ template_types: An array of names for each templated type (e.g. ['K',
+ 'V'])
+
+ Example:
+ As an example, the following is an implementation of size() and operator[]
+ on std::__1::vector, functions which are normally inlined and not
+ normally callable from gdb.
+
+ @class_methods.Class('std::__1::vector', template_types=['T'])
+ class LibcppVector(object):
+ @class_methods.member_function('T&', 'operator[]', ['int'])
+ def element(obj, i):
+ return obj['__begin_'][i]
+
+ @class_methods.member_function('size_t', 'size', [])
+ def size(obj):
+ return obj['__end_'] - obj['__begin_']
+
+ Note:
+ Note that functions are looked up by the function name, which means that
+ functions cannot currently have overloaded implementations for different
+ arguments.
+ """
+
+ class MethodWorkerWrapper(gdb.xmethod.XMethod):
+ """Wrapper of an XMethodWorker class as an XMethod."""
+ def __init__(self, name, worker_class):
+ super(MethodWorkerWrapper, self).__init__(name)
+ self.name = name
+ self.worker_class = worker_class
+
+
+ class ClassMatcher(gdb.xmethod.XMethodMatcher):
+ """Matches member functions of one class template."""
+ def __init__(self, obj):
+ super(ClassMatcher, self).__init__(class_name)
+
+ # Constructs a regular expression to match this type.
+ self._class_regex = re.compile(
+ '^' + re.escape(class_name) +
+ ('<.*>' if len(template_types) > 0 else '') + '$')
+
+ # Construct a dictionary and array of methods
+ self.dict = {}
+ self.methods = []
+ for name in dir(obj):
+ attr = getattr(obj, name)
+ if not isinstance(attr, MemberFunction):
+ continue
+
+ name = attr.name
+ return_type = CreateTypeResolver(attr.return_type)
+ arguments = [CreateTypeResolver(arg) for arg in
+ attr.arguments]
+ method = MethodWorkerWrapper(
+ attr.name,
+ CreateTemplatedMethodWorker(return_type,
+ arguments, attr.function_))
+ self.methods.append(method)
+
+ def match(self, class_type, method_name):
+ if not re.match(self._class_regex, class_type.tag):
+ return None
+ templates = [class_type.template_argument(i) for i in
+ range(len(template_types))]
+ return [method.worker_class(templates) for method in self.methods
+ if method.name == method_name and method.enabled]
+
+
+ def CreateTypeResolver(type_desc):
+ """Creates a callback which resolves to the appropriate type when
+ invoked.
+
+ This is a helper to allow specifying simple types as strings when
+ writing function descriptions. For complex cases, a callback can be
+ passed which will be invoked when template instantiation is known.
+
+ Args:
+ type_desc: A callback generating the type or a string description of
+ the type to lookup. Supported types are classes in the
+ template_classes array (e.g. T) which will be looked up when those
+ templated classes are known, or globally visible type names (e.g.
+ int, base::Foo).
+
+ Types can be modified by appending a '*' or '&' to denote a
+ pointer or reference.
+
+ If a callback is used, the callback will be passed an array of the
+ instantiated template types.
+
+ Note:
+ This does not parse complex types such as std::vector<T>::iterator,
+ to refer to types like these you must currently write a callback
+ which constructs the appropriate type.
+ """
+ if callable(type_desc):
+ return type_desc
+ if type_desc == 'void':
+ return lambda T: None
+ if type_desc[-1] == '&':
+ inner_resolver = CreateTypeResolver(type_desc[:-1])
+ return lambda template_types: inner_resolver(template_types).reference()
+ if type_desc[-1] == '*':
+ inner_resolver = CreateTypeResolver(type_desc[:-1])
+ return lambda template_types: inner_resolver(template_types).pointer()
+ try:
+ template_index = template_types.index(type_desc)
+ return operator.itemgetter(template_index)
+ except ValueError:
+ return lambda template_types: gdb.lookup_type(type_desc)
+
+
+ def CreateTemplatedMethodWorker(return_callback, args_callbacks,
+ method_callback):
+ class TemplatedMethodWorker(gdb.xmethod.XMethodWorker):
+ def __init__(self, templates):
+ super(TemplatedMethodWorker, self).__init__()
+ self._templates = templates
+
+ def get_arg_types(self):
+ return [cb(self._templates) for cb in args_callbacks]
+
+ def get_result_type(self, obj):
+ return return_callback(self._templates)
+
+ def __call__(self, *args):
+ return method_callback(*args)
+ return TemplatedMethodWorker
+
+ def DefineClass(obj):
+ matcher = ClassMatcher(obj)
+ gdb.xmethod.register_xmethod_matcher(None, matcher)
+ return matcher
+
+ return DefineClass
diff --git a/chromium/tools/gen_keyboard_overlay_data/gen_keyboard_overlay_data.py b/chromium/tools/gen_keyboard_overlay_data/gen_keyboard_overlay_data.py
deleted file mode 100755
index 073ef0bfdce..00000000000
--- a/chromium/tools/gen_keyboard_overlay_data/gen_keyboard_overlay_data.py
+++ /dev/null
@@ -1,515 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2012 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.
-
-"""Generate keyboard layout and hotkey data for the keyboard overlay.
-
-This script fetches data from the keyboard layout and hotkey data spreadsheet,
-and output the data depending on the option.
-
- --cc: Rewrites a part of C++ code in
- chrome/browser/chromeos/webui/keyboard_overlay_ui.cc
-
- --grd: Rewrites a part of grd messages in
- chrome/app/generated_resources.grd
-
- --js: Rewrites the entire JavaScript code in
- chrome/browser/resources/keyboard_overlay/keyboard_overlay_data.js
-
-These options can be specified at the same time.
-
-e.g.
-python gen_keyboard_overlay_data.py --cc --grd --js
-
-The output directory of the generated files can be changed with --outdir.
-
-e.g. (This will generate tmp/keyboard_overlay.js)
-python gen_keyboard_overlay_data.py --outdir=tmp --js
-"""
-
-import cStringIO
-import datetime
-import gdata.spreadsheet.service
-import getpass
-import json
-import optparse
-import os
-import re
-import sys
-
-MODIFIER_SHIFT = 1 << 0
-MODIFIER_CTRL = 1 << 1
-MODIFIER_ALT = 1 << 2
-
-KEYBOARD_GLYPH_SPREADSHEET_KEY = '0Ao3KldW9piwEdExLbGR6TmZ2RU9aUjFCMmVxWkVqVmc'
-HOTKEY_SPREADSHEET_KEY = '0AqzoqbAMLyEPdE1RQXdodk1qVkFyTWtQbUxROVM1cXc'
-CC_OUTDIR = 'chrome/browser/ui/webui/chromeos'
-CC_FILENAME = 'keyboard_overlay_ui.cc'
-GRD_OUTDIR = 'chrome/app'
-GRD_FILENAME = 'chromeos_strings.grdp'
-JS_OUTDIR = 'chrome/browser/resources/chromeos'
-JS_FILENAME = 'keyboard_overlay_data.js'
-CC_START = r'IDS_KEYBOARD_OVERLAY_INSTRUCTIONS_HIDE },'
-CC_END = r'};'
-GRD_START = r' <!-- BEGIN GENERATED KEYBOARD OVERLAY STRINGS -->'
-GRD_END = r' <!-- END GENERATED KEYBOARD OVERLAY STRINGS -->'
-
-LABEL_MAP = {
- 'glyph_arrow_down': 'down',
- 'glyph_arrow_left': 'left',
- 'glyph_arrow_right': 'right',
- 'glyph_arrow_up': 'up',
- 'glyph_back': 'back',
- 'glyph_backspace': 'backspace',
- 'glyph_brightness_down': 'bright down',
- 'glyph_brightness_up': 'bright up',
- 'glyph_enter': 'enter',
- 'glyph_forward': 'forward',
- 'glyph_fullscreen': 'full screen',
- # Kana/Eisu key on Japanese keyboard
- 'glyph_ime': u'\u304b\u306a\u0020\u002f\u0020\u82f1\u6570',
- 'glyph_lock': 'lock',
- 'glyph_overview': 'switch window',
- 'glyph_power': 'power',
- 'glyph_right': 'right',
- 'glyph_reload': 'reload',
- 'glyph_search': 'search',
- 'glyph_shift': 'shift',
- 'glyph_tab': 'tab',
- 'glyph_tools': 'tools',
- 'glyph_volume_down': 'vol. down',
- 'glyph_volume_mute': 'mute',
- 'glyph_volume_up': 'vol. up',
-};
-
-INPUT_METHOD_ID_TO_OVERLAY_ID = {
- 'xkb:be::fra': 'fr',
- 'xkb:be::ger': 'de',
- 'xkb:be::nld': 'nl',
- 'xkb:bg::bul': 'bg',
- 'xkb:bg:phonetic:bul': 'bg',
- 'xkb:br::por': 'pt_BR',
- 'xkb:ca::fra': 'fr_CA',
- 'xkb:ca:eng:eng': 'ca',
- 'xkb:ch::ger': 'de',
- 'xkb:ch:fr:fra': 'fr',
- 'xkb:cz::cze': 'cs',
- 'xkb:de::ger': 'de',
- 'xkb:de:neo:ger': 'de_neo',
- 'xkb:dk::dan': 'da',
- 'xkb:ee::est': 'et',
- 'xkb:es::spa': 'es',
- 'xkb:es:cat:cat': 'ca',
- 'xkb:fi::fin': 'fi',
- 'xkb:fr::fra': 'fr',
- 'xkb:gb:dvorak:eng': 'en_GB_dvorak',
- 'xkb:gb:extd:eng': 'en_GB',
- 'xkb:gr::gre': 'el',
- 'xkb:hr::scr': 'hr',
- 'xkb:hu::hun': 'hu',
- 'xkb:il::heb': 'iw',
- 'xkb:it::ita': 'it',
- 'xkb:jp::jpn': 'ja',
- 'xkb:latam::spa': 'es_419',
- 'xkb:lt::lit': 'lt',
- 'xkb:lv:apostrophe:lav': 'lv',
- 'xkb:no::nob': 'no',
- 'xkb:pl::pol': 'pl',
- 'xkb:pt::por': 'pt_PT',
- 'xkb:ro::rum': 'ro',
- 'xkb:rs::srp': 'sr',
- 'xkb:ru::rus': 'ru',
- 'xkb:ru:phonetic:rus': 'ru',
- 'xkb:se::swe': 'sv',
- 'xkb:si::slv': 'sl',
- 'xkb:sk::slo': 'sk',
- 'xkb:tr::tur': 'tr',
- 'xkb:ua::ukr': 'uk',
- 'xkb:us::eng': 'en_US',
- 'xkb:us::fil': 'en_US',
- 'xkb:us::ind': 'en_US',
- 'xkb:us::msa': 'en_US',
- 'xkb:us:altgr-intl:eng': 'en_US_altgr_intl',
- 'xkb:us:colemak:eng': 'en_US_colemak',
- 'xkb:us:dvorak:eng': 'en_US_dvorak',
- 'xkb:us:intl:eng': 'en_US_intl',
- 'xkb:us:intl:nld': 'en_US_intl',
- 'xkb:us:intl:por': 'en_US_intl',
- 'xkb:us:workman:eng': 'en_US_workman',
- 'xkb:us:workman-intl:eng': 'en_US_workman_intl',
-}
-
-# The file was first generated in 2012 and we have a policy of not updating
-# copyright dates.
-COPYRIGHT_HEADER=\
-"""// Copyright (c) 2012 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.
-
-// This is a generated file but may contain local modifications. See
-// src/tools/gen_keyboard_overlay_data/gen_keyboard_overlay_data.py --help
-"""
-
-# A snippet for grd file
-GRD_SNIPPET_TEMPLATE=""" <message name="%s" desc="%s">
- %s
- </message>
-"""
-
-# A snippet for C++ file
-CC_SNIPPET_TEMPLATE=""" { "%s", %s },
-"""
-
-
-def SplitBehavior(behavior):
- """Splits the behavior to compose a message or i18n-content value.
-
- Examples:
- 'Activate last tab' => ['Activate', 'last', 'tab']
- 'Close tab' => ['Close', 'tab']
- """
- return [x for x in re.split('[ ()"-.,]', behavior) if len(x) > 0]
-
-
-def ToMessageName(behavior):
- """Composes a message name for grd file.
-
- Examples:
- 'Activate last tab' => IDS_KEYBOARD_OVERLAY_ACTIVATE_LAST_TAB
- 'Close tab' => IDS_KEYBOARD_OVERLAY_CLOSE_TAB
- """
- segments = [segment.upper() for segment in SplitBehavior(behavior)]
- return 'IDS_KEYBOARD_OVERLAY_' + ('_'.join(segments))
-
-
-def ToMessageDesc(description):
- """Composes a message description for grd file."""
- message_desc = 'The text in the keyboard overlay to explain the shortcut'
- if description:
- message_desc = '%s (%s).' % (message_desc, description)
- else:
- message_desc += '.'
- return message_desc
-
-
-def Toi18nContent(behavior):
- """Composes a i18n-content value for HTML/JavaScript files.
-
- Examples:
- 'Activate last tab' => keyboardOverlayActivateLastTab
- 'Close tab' => keyboardOverlayCloseTab
- """
- segments = [segment.lower() for segment in SplitBehavior(behavior)]
- result = 'keyboardOverlay'
- for segment in segments:
- result += segment[0].upper() + segment[1:]
- return result
-
-
-def ToKeys(hotkey):
- """Converts the action value to shortcut keys used from JavaScript.
-
- Examples:
- 'Ctrl - 9' => '9<>CTRL'
- 'Ctrl - Shift - Tab' => 'tab<>CTRL<>SHIFT'
- """
- values = hotkey.split(' - ')
- modifiers = sorted(value.upper() for value in values
- if value in ['Shift', 'Ctrl', 'Alt', 'Search'])
- keycode = [value.lower() for value in values
- if value not in ['Shift', 'Ctrl', 'Alt', 'Search']]
- # The keys which are highlighted even without modifier keys.
- base_keys = ['backspace', 'power']
- if not modifiers and (keycode and keycode[0] not in base_keys):
- return None
- return '<>'.join(keycode + modifiers)
-
-
-def ParseOptions():
- """Parses the input arguemnts and returns options."""
- # default_username = os.getusername() + '@google.com';
- default_username = '%s@google.com' % os.environ.get('USER')
- parser = optparse.OptionParser()
- parser.add_option('--key', dest='key',
- help='The key of the spreadsheet (required).')
- parser.add_option('--username', dest='username',
- default=default_username,
- help='Your user name (default: %s).' % default_username)
- parser.add_option('--password', dest='password',
- help='Your password.')
- parser.add_option('--account_type', default='GOOGLE', dest='account_type',
- help='Account type used for gdata login (default: GOOGLE)')
- parser.add_option('--js', dest='js', default=False, action='store_true',
- help='Output js file.')
- parser.add_option('--grd', dest='grd', default=False, action='store_true',
- help='Output resource file.')
- parser.add_option('--cc', dest='cc', default=False, action='store_true',
- help='Output cc file.')
- parser.add_option('--outdir', dest='outdir', default=None,
- help='Specify the directory files are generated.')
- (options, unused_args) = parser.parse_args()
-
- if not options.username.endswith('google.com'):
- print 'google.com account is necessary to use this script.'
- sys.exit(-1)
-
- if (not (options.js or options.grd or options.cc)):
- print 'Either --js, --grd, or --cc needs to be specified.'
- sys.exit(-1)
-
- # Get the password from the terminal, if needed.
- if not options.password:
- options.password = getpass.getpass(
- 'Application specific password for %s: ' % options.username)
- return options
-
-
-def InitClient(options):
- """Initializes the spreadsheet client."""
- client = gdata.spreadsheet.service.SpreadsheetsService()
- client.email = options.username
- client.password = options.password
- client.source = 'Spread Sheet'
- client.account_type = options.account_type
- print 'Logging in as %s (%s)' % (client.email, client.account_type)
- client.ProgrammaticLogin()
- return client
-
-
-def PrintDiffs(message, lhs, rhs):
- """Prints the differences between |lhs| and |rhs|."""
- dif = set(lhs).difference(rhs)
- if dif:
- print message, ', '.join(dif)
-
-
-def FetchSpreadsheetFeeds(client, key, sheets, cols):
- """Fetch feeds from the spreadsheet.
-
- Args:
- client: A spreadsheet client to be used for fetching data.
- key: A key string of the spreadsheet to be fetched.
- sheets: A list of the sheet names to read data from.
- cols: A list of columns to read data from.
- """
- worksheets_feed = client.GetWorksheetsFeed(key)
- print 'Fetching data from the worksheet: %s' % worksheets_feed.title.text
- worksheets_data = {}
- titles = []
- for entry in worksheets_feed.entry:
- worksheet_id = entry.id.text.split('/')[-1]
- list_feed = client.GetListFeed(key, worksheet_id)
- list_data = []
- # Hack to deal with sheet names like 'sv (Copy of fl)'
- title = list_feed.title.text.split('(')[0].strip()
- titles.append(title)
- if title not in sheets:
- continue
- print 'Reading data from the sheet: %s' % list_feed.title.text
- for i, entry in enumerate(list_feed.entry):
- line_data = {}
- for k in entry.custom:
- if (k not in cols) or (not entry.custom[k].text):
- continue
- line_data[k] = entry.custom[k].text
- list_data.append(line_data)
- worksheets_data[title] = list_data
- PrintDiffs('Exist only on the spreadsheet: ', titles, sheets)
- PrintDiffs('Specified but do not exist on the spreadsheet: ', sheets, titles)
- return worksheets_data
-
-
-def FetchKeyboardGlyphData(client):
- """Fetches the keyboard glyph data from the spreadsheet."""
- glyph_cols = ['scancode', 'p0', 'p1', 'p2', 'p3', 'p4', 'p5', 'p6', 'p7',
- 'p8', 'p9', 'label', 'format', 'notes']
- keyboard_glyph_data = FetchSpreadsheetFeeds(
- client, KEYBOARD_GLYPH_SPREADSHEET_KEY,
- INPUT_METHOD_ID_TO_OVERLAY_ID.values(), glyph_cols)
- ret = {}
- for lang in keyboard_glyph_data:
- ret[lang] = {}
- keys = {}
- for line in keyboard_glyph_data[lang]:
- scancode = line.get('scancode')
- if (not scancode) and line.get('notes'):
- ret[lang]['layoutName'] = line['notes']
- continue
- del line['scancode']
- if 'notes' in line:
- del line['notes']
- if 'label' in line:
- line['label'] = LABEL_MAP.get(line['label'], line['label'])
- keys[scancode] = line
- # Add a label to space key
- if '39' not in keys:
- keys['39'] = {'label': 'space'}
- ret[lang]['keys'] = keys
- return ret
-
-
-def FetchLayoutsData(client):
- """Fetches the keyboard glyph data from the spreadsheet."""
- layout_names = ['U_layout', 'J_layout', 'E_layout', 'B_layout']
- cols = ['scancode', 'x', 'y', 'w', 'h']
- layouts = FetchSpreadsheetFeeds(client, KEYBOARD_GLYPH_SPREADSHEET_KEY,
- layout_names, cols)
- ret = {}
- for layout_name, layout in layouts.items():
- ret[layout_name[0]] = []
- for row in layout:
- line = []
- for col in cols:
- value = row.get(col)
- if not value:
- line.append('')
- else:
- if col != 'scancode':
- value = float(value)
- line.append(value)
- ret[layout_name[0]].append(line)
- return ret
-
-
-def FetchHotkeyData(client):
- """Fetches the hotkey data from the spreadsheet."""
- hotkey_sheet = ['Cross Platform Behaviors']
- hotkey_cols = ['behavior', 'context', 'kind', 'actionctrlctrlcmdonmac',
- 'chromeos', 'descriptionfortranslation']
- hotkey_data = FetchSpreadsheetFeeds(client, HOTKEY_SPREADSHEET_KEY,
- hotkey_sheet, hotkey_cols)
- action_to_id = {}
- id_to_behavior = {}
- # (behavior, action)
- result = []
- for line in hotkey_data['Cross Platform Behaviors']:
- if (not line.get('chromeos')) or (line.get('kind') != 'Key'):
- continue
- action = ToKeys(line['actionctrlctrlcmdonmac'])
- if not action:
- continue
- behavior = line['behavior'].strip()
- description = line.get('descriptionfortranslation')
- result.append((behavior, action, description))
- return result
-
-
-def UniqueBehaviors(hotkey_data):
- """Retrieves a sorted list of unique behaviors from |hotkey_data|."""
- return sorted(set((behavior, description) for (behavior, _, description)
- in hotkey_data),
- cmp=lambda x, y: cmp(ToMessageName(x[0]), ToMessageName(y[0])))
-
-
-def GetPath(path_from_src):
- """Returns the absolute path of the specified path."""
- path = os.path.join(os.path.dirname(__file__), '../..', path_from_src)
- if not os.path.isfile(path):
- print 'WARNING: %s does not exist. Maybe moved or renamed?' % path
- return path
-
-
-def OutputFile(outpath, snippet):
- """Output the snippet into the specified path."""
- out = file(outpath, 'w')
- out.write(COPYRIGHT_HEADER + '\n')
- out.write(snippet)
- print 'Output ' + os.path.normpath(outpath)
-
-
-def RewriteFile(start, end, original_dir, original_filename, snippet,
- outdir=None):
- """Replaces a part of the specified file with snippet and outputs it."""
- original_path = GetPath(os.path.join(original_dir, original_filename))
- original = file(original_path, 'r')
- original_content = original.read()
- original.close()
- if outdir:
- outpath = os.path.join(outdir, original_filename)
- else:
- outpath = original_path
- out = file(outpath, 'w')
- rx = re.compile(r'%s\n.*?%s\n' % (re.escape(start), re.escape(end)),
- re.DOTALL)
- new_content = re.sub(rx, '%s\n%s%s\n' % (start, snippet, end),
- original_content)
- out.write(new_content)
- out.close()
- print 'Output ' + os.path.normpath(outpath)
-
-
-def OutputJson(keyboard_glyph_data, hotkey_data, layouts, var_name, outdir):
- """Outputs the keyboard overlay data as a JSON file."""
- action_to_id = {}
- for (behavior, action, _) in hotkey_data:
- i18nContent = Toi18nContent(behavior)
- action_to_id[action] = i18nContent
- data = {'keyboardGlyph': keyboard_glyph_data,
- 'shortcut': action_to_id,
- 'layouts': layouts,
- 'inputMethodIdToOverlayId': INPUT_METHOD_ID_TO_OVERLAY_ID}
-
- if not outdir:
- outdir = JS_OUTDIR
- outpath = GetPath(os.path.join(outdir, JS_FILENAME))
- json_data = json.dumps(data, sort_keys=True, indent=2)
- # Remove redundant spaces after ','
- json_data = json_data.replace(', \n', ',\n')
- # Replace double quotes with single quotes to avoid lint warnings.
- json_data = json_data.replace('\"', '\'')
- snippet = 'var %s = %s;\n' % (var_name, json_data)
- OutputFile(outpath, snippet)
-
-
-def OutputGrd(hotkey_data, outdir):
- """Outputs a part of messages in the grd file."""
- snippet = cStringIO.StringIO()
- for (behavior, description) in UniqueBehaviors(hotkey_data):
- # Do not generate message for 'Show wrench menu'. It is handled manually
- # based on branding.
- if behavior == 'Show wrench menu':
- continue
- snippet.write(GRD_SNIPPET_TEMPLATE %
- (ToMessageName(behavior), ToMessageDesc(description),
- behavior))
-
- RewriteFile(GRD_START, GRD_END, GRD_OUTDIR, GRD_FILENAME, snippet.getvalue(),
- outdir)
-
-
-def OutputCC(hotkey_data, outdir):
- """Outputs a part of code in the C++ file."""
- snippet = cStringIO.StringIO()
- for (behavior, _) in UniqueBehaviors(hotkey_data):
- message_name = ToMessageName(behavior)
- output = CC_SNIPPET_TEMPLATE % (Toi18nContent(behavior), message_name)
- # Break the line if the line is longer than 80 characters
- if len(output) > 80:
- output = output.replace(' ' + message_name, '\n %s' % message_name)
- snippet.write(output)
-
- RewriteFile(CC_START, CC_END, CC_OUTDIR, CC_FILENAME, snippet.getvalue(),
- outdir)
-
-
-def main():
- options = ParseOptions()
- client = InitClient(options)
- hotkey_data = FetchHotkeyData(client)
-
- if options.js:
- keyboard_glyph_data = FetchKeyboardGlyphData(client)
-
- if options.js:
- layouts = FetchLayoutsData(client)
- OutputJson(keyboard_glyph_data, hotkey_data, layouts, 'keyboardOverlayData',
- options.outdir)
- if options.grd:
- OutputGrd(hotkey_data, options.outdir)
- if options.cc:
- OutputCC(hotkey_data, options.outdir)
-
-
-if __name__ == '__main__':
- main()
diff --git a/chromium/tools/generate_stubs/generate_stubs.py b/chromium/tools/generate_stubs/generate_stubs.py
index 7d2f91b8b67..70ad5ff269d 100755
--- a/chromium/tools/generate_stubs/generate_stubs.py
+++ b/chromium/tools/generate_stubs/generate_stubs.py
@@ -3,29 +3,29 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
-"""Creates windows and posix stub files for a given set of signatures.
+"""Creates Windows and POSIX stub files for a given set of signatures.
For libraries that need to be loaded outside of the standard executable startup
path mechanism, stub files need to be generated for the wanted functions. In
-windows, this is done via "def" files and the delay load mechanism. On a posix
+Windows, this is done via "def" files and the delay load mechanism. On a POSIX
system, a set of stub functions need to be generated that dispatch to functions
found via dlsym.
This script takes a set of files, where each file is a list of C-style
-signatures (one signature per line). The output is either a windows def file,
-or a header + implementation file of stubs suitable for use in a posix system.
+signatures (one signature per line). The output is either a Windows def file,
+or a header + implementation file of stubs suitable for use in a POSIX system.
-This script also handles varidiac functions, e.g.
+This script also handles variadic functions, e.g.
void printf(const char* s, ...);
-TODO(hclam): Fix the situation for varidiac functions.
+TODO(hclam): Fix the situation for variadic functions.
Stub for the above function will be generated and inside the stub function it
is translated to:
void printf(const char* s, ...) {
printf_ptr(s, (void*)arg1);
}
-Only one argument from the varidiac arguments is used and it will be used as
+Only one argument from the variadic arguments is used and it will be used as
type void*.
"""
@@ -63,9 +63,9 @@ class SubprocessError(Error):
#
# 1) Starts with [_a-ZA-Z] (C++ spec 2.10).
# 2) Continues with [_a-ZA-Z0-9] (C++ spec 2.10).
-# 3) Preceeds an opening parenthesis by 0 or more whitespace chars.
+# 3) Precedes an opening parenthesis by 0 or more whitespace chars.
#
-# From that, all preceeding characters are considered the return value.
+# From that, all preceding characters are considered the return value.
# Trailing characters should have a substring matching the form (.*). That
# is considered the arguments.
SIGNATURE_REGEX = re.compile('(?P<return_type>.+?)'
@@ -75,7 +75,7 @@ SIGNATURE_REGEX = re.compile('(?P<return_type>.+?)'
# Used for generating C++ identifiers.
INVALID_C_IDENT_CHARS = re.compile('[^_a-zA-Z0-9]')
-# Constants defning the supported file types options.
+# Constants defining the supported file types options.
FILE_TYPE_WIN_X86 = 'windows_lib'
FILE_TYPE_WIN_X64 = 'windows_lib_x64'
FILE_TYPE_POSIX_STUB = 'posix_stubs'
@@ -143,6 +143,7 @@ void %(export)s %(name)s(%(params)s) {
# following named parameters:
# guard_name: The macro to use as the header guard.
# namespace: The namespace for the stub functions.
+# logging_include: Header file where the logging function is defined.
STUB_HEADER_PREAMBLE = """// This is generated file. Do not modify directly.
#ifndef %(guard_name)s
@@ -153,7 +154,7 @@ STUB_HEADER_PREAMBLE = """// This is generated file. Do not modify directly.
#include <string>
#include <vector>
-#include "base/logging.h"
+#include "%(logging_include)s"
namespace %(namespace)s {
"""
@@ -168,7 +169,7 @@ STUB_HEADER_CLOSER = """} // namespace %(namespace)s
"""
# The standard includes needed for the stub implementation file. Takes one
-# string substition with the path to the associated stub header file.
+# string substitution with the path to the associated stub header file.
IMPLEMENTATION_PREAMBLE = """// This is generated file. Do not modify directly.
#include "%s"
@@ -217,7 +218,7 @@ FUNCTION_POINTER_SECTION_COMMENT = (
""")
# Template for the module initialization check function. This template
-# takes two parameteres: the function name, and the conditional used to
+# takes two parameters: the function name, and the conditional used to
# verify the module's initialization.
MODULE_INITIALIZATION_CHECK_FUNCTION = (
"""// Returns true if all stubs have been properly initialized.
@@ -236,11 +237,14 @@ bool %s() {
# name: The name of the function.
# return_type: The return type.
# params: The parameters to the function.
+# logging_function: Function call for error logging.
STUB_POINTER_INITIALIZER = """ %(name)s_ptr =
reinterpret_cast<%(return_type)s (*)(%(parameters)s)>(
dlsym(module, "%(name)s"));
- VLOG_IF(1, !%(name)s_ptr) << "Couldn't load %(name)s, dlerror() says:\\n"
- << dlerror();
+ if (!%(name)s_ptr) {
+ %(logging_function)s << "Couldn't load %(name)s, dlerror() says:\\n"
+ << dlerror();
+ }
"""
# Template for module initializer function start and end. This template takes
@@ -283,6 +287,7 @@ UMBRELLA_INITIALIZER_CLEANUP_FUNCTION = (
""")
# Function to initialize each DSO for the given paths.
+# logging_function: Function call that will be used for error logging.
UMBRELLA_INITIALIZER_INITIALIZE_FUNCTION_START = (
"""bool InitializeStubs(const StubPathMap& path_map) {
StubHandleMap opened_libraries;
@@ -306,7 +311,7 @@ UMBRELLA_INITIALIZER_INITIALIZE_FUNCTION_START = (
module_opened = true;
opened_libraries[cur_module] = handle;
} else {
- VLOG(1) << "dlopen(" << dso_path->c_str() << ") failed, "
+ %(logging_function)s << "dlopen(" << dso_path->c_str() << ") failed, "
<< "dlerror() says:\\n" << dlerror();
}
}
@@ -360,7 +365,7 @@ def ExtractModuleName(infile_path):
"""Infers the module name from the input file path.
The input filename is supposed to be in the form "ModuleName.sigs".
- This function splits the filename from the extention on that basename of
+ This function splits the filename from the extension on that basename of
the path and returns that as the module name.
Args:
@@ -427,11 +432,11 @@ def ParseSignatures(infile):
def WriteWindowsDefFile(module_name, signatures, outfile):
- """Writes a windows def file to the given output file object.
+ """Writes a Windows def file to the given output file object.
The def file format is basically a list of function names. Generation is
simple. After outputting the LIBRARY and EXPORTS lines, print out each
- function name, one to a line, preceeded by 2 spaces.
+ function name, one to a line, preceded by 2 spaces.
Args:
module_name: The name of the module we are writing a stub for.
@@ -459,7 +464,7 @@ def QuietRun(args, filter=None, write_to=sys.stdout):
def CreateWindowsLib(module_name, signatures, intermediate_dir, outdir_path,
machine):
- """Creates a windows library file.
+ """Creates a Windows library file.
Calling this function will create a lib file in the outdir_path that exports
the signatures passed into the object. A temporary def file will be created
@@ -474,7 +479,7 @@ def CreateWindowsLib(module_name, signatures, intermediate_dir, outdir_path,
machine: String holding the machine type, 'X86' or 'X64'.
Raises:
- SubprocessError: If invoking the windows "lib" tool fails, this is raised
+ SubprocessError: If invoking the Windows "lib" tool fails, this is raised
with the error code.
"""
def_file_path = os.path.join(intermediate_dir,
@@ -489,7 +494,7 @@ def CreateWindowsLib(module_name, signatures, intermediate_dir, outdir_path,
# Invoke the "lib" program on Windows to create stub .lib files for the
# generated definitions. These .lib files can then be used during
- # delayloading of the dynamic libraries.
+ # delay loading of the dynamic libraries.
ret = QuietRun(['lib', '/nologo',
'/machine:' + machine,
'/def:' + def_file_path,
@@ -509,11 +514,11 @@ class PosixStubWriter(object):
delays loading of the dynamic library/resolution of the symbols until one of
the needed functions are accessed.
- In posix, RTLD_LAZY does something similar with DSOs. This is the default
+ In POSIX, RTLD_LAZY does something similar with DSOs. This is the default
link mode for DSOs. However, even though the symbol is not resolved until
first usage, the DSO must be present at load time of the main binary.
- To simulate the windows delay load procedure, we need to create a set of
+ To simulate the Windows delay load procedure, we need to create a set of
stub functions that allow for correct linkage of the main binary, but
dispatch to the dynamically resolved symbol when the module is initialized.
@@ -521,7 +526,8 @@ class PosixStubWriter(object):
functions plus initialization code for them.
"""
- def __init__(self, module_name, export_macro, signatures):
+ def __init__(self, module_name, export_macro, signatures, logging_function,
+ logging_include):
"""Initializes PosixStubWriter for this set of signatures and module_name.
Args:
@@ -530,10 +536,14 @@ class PosixStubWriter(object):
an EXPORT marking, to control visibility.
signatures: The list of signature hashes, as produced by ParseSignatures,
to create stubs for.
+ logging_function: Function call that will be used for error logging.
+ logging_include: Header file where the logging function is defined.
"""
self.signatures = signatures
self.module_name = module_name
self.export_macro = export_macro
+ self.logging_function = logging_function
+ self.logging_include = logging_include
@classmethod
def CStyleIdentifier(cls, identifier):
@@ -618,7 +628,7 @@ class PosixStubWriter(object):
Args:
signature: A signature hash, as produced by ParseSignatures,
- representating the function signature.
+ representing the function signature.
Returns:
A string with the declaration of the function pointer for the signature.
@@ -637,7 +647,7 @@ class PosixStubWriter(object):
Args:
signature: A signature hash, as produced by ParseSignatures,
- representating the function signature.
+ representing the function signature.
Returns:
A string with the stub function definition.
@@ -649,12 +659,18 @@ class PosixStubWriter(object):
# Generate the argument list.
arguments = [re.split('[\*& ]', arg)[-1].strip() for arg in
signature['params']]
+ # Remove square brackets from arrays, otherwise we will end with a
+ # compilation failure.
+ for i in range(0, len(arguments)):
+ if arguments[i].endswith('[]'):
+ arguments[i] = arguments[i][0:-2]
+
arg_list = ', '.join(arguments)
if arg_list == 'void':
arg_list = ''
if arg_list != '' and len(arguments) > 1 and arguments[-1] == '...':
- # If the last argment is ... then this is a variadic function.
+ # If the last argument is ... then this is a variadic function.
if return_prefix != '':
return VARIADIC_STUB_FUNCTION_DEFINITION % {
'return_type': signature['return_type'],
@@ -691,7 +707,8 @@ class PosixStubWriter(object):
outfile.write(IMPLEMENTATION_PREAMBLE % header_path)
@classmethod
- def WriteUmbrellaInitializer(cls, module_names, namespace, outfile):
+ def WriteUmbrellaInitializer(cls, module_names, namespace, outfile,
+ logging_function):
"""Writes a single function that will open + initialize each module.
This intializer will take in an stl map of that lists the correct
@@ -711,9 +728,10 @@ class PosixStubWriter(object):
outfile.write(UMBRELLA_INITIALIZER_START % namespace)
outfile.write(UMBRELLA_INITIALIZER_CLEANUP_FUNCTION)
- # Create the initializaiton function that calls all module initializers,
+ # Create the initialization function that calls all module initializers,
# checks if they succeeded, and backs out module loads on an error.
- outfile.write(UMBRELLA_INITIALIZER_INITIALIZE_FUNCTION_START)
+ outfile.write(UMBRELLA_INITIALIZER_INITIALIZE_FUNCTION_START % {
+ 'logging_function': logging_function})
outfile.write(
'\n // Initialize each module if we have not already failed.\n')
for module in module_names:
@@ -733,7 +751,8 @@ class PosixStubWriter(object):
outfile.write('\n} // namespace %s\n' % namespace)
@classmethod
- def WriteHeaderContents(cls, module_names, namespace, header_guard, outfile):
+ def WriteHeaderContents(cls, module_names, namespace, header_guard, outfile,
+ logging_include):
"""Writes a header file for the stub file generated for module_names.
The header file exposes the following:
@@ -748,11 +767,13 @@ class PosixStubWriter(object):
namespace: The namespace these functions should be in.
header_guard: The macro to use as our header guard.
outfile: The output handle to populate.
+ logging_include: Header file where the logging function is defined.
"""
outfile.write(STUB_HEADER_PREAMBLE %
- {'guard_name': header_guard, 'namespace': namespace})
+ {'guard_name': header_guard, 'namespace': namespace,
+ 'logging_include': logging_include})
- # Generate the Initializer protoypes for each module.
+ # Generate the Initializer prototypes for each module.
outfile.write('// Individual module initializer functions.\n')
for name in module_names:
outfile.write(MODULE_FUNCTION_PROTOTYPES % {
@@ -847,7 +868,7 @@ class PosixStubWriter(object):
ptr_names = ['%s_ptr' % sig['name'] for sig in self.signatures]
# Construct the conditional expression to check the initialization of
- # all the function pointers above. It should generate a conjuntion
+ # all the function pointers above. It should generate a conjunction
# with each pointer on its own line, indented by six spaces to match
# the indentation level of MODULE_INITIALIZATION_CHECK_FUNCTION.
initialization_conditional = ' &&\n '.join(ptr_names)
@@ -863,7 +884,8 @@ class PosixStubWriter(object):
outfile.write(STUB_POINTER_INITIALIZER % {
'name': sig['name'],
'return_type': sig['return_type'],
- 'parameters': ', '.join(sig['params'])})
+ 'parameters': ', '.join(sig['params']),
+ 'logging_function': self.logging_function})
outfile.write(MODULE_INITIALIZE_END)
# Create function that uninitializes the module (sets all pointers to
@@ -924,7 +946,7 @@ def CreateOptionParser():
dest='extra_stub_header',
default=None,
help=('File to insert after the system includes in the '
- 'generated stub implemenation file. Ignored for '
+ 'generated stub implementation file. Ignored for '
'%s and %s types.' %
(FILE_TYPE_WIN_X86, FILE_TYPE_WIN_X64)))
parser.add_option('-m',
@@ -939,7 +961,17 @@ def CreateOptionParser():
default='',
help=('A macro to place between the return type and '
'function name, e.g. MODULE_EXPORT, to control the '
- 'visbility of the stub functions.'))
+ 'visibility of the stub functions.'))
+ parser.add_option('-l',
+ '--logging-function',
+ dest='logging_function',
+ default='VLOG(1)',
+ help=('Function call that will be used for error logging.'))
+ parser.add_option('-n',
+ '--logging-include',
+ dest='logging_include',
+ default='base/logging.h',
+ help=('Header file where the logging function is defined.'))
return parser
@@ -1016,12 +1048,12 @@ def CreateOutputDirectories(options):
def CreateWindowsLibForSigFiles(sig_files, out_dir, intermediate_dir, machine,
export_macro):
- """For each signature file, create a windows lib.
+ """For each signature file, create a Windows lib.
Args:
sig_files: Array of strings with the paths to each signature file.
out_dir: String holding path to directory where the generated libs go.
- intermediate_dir: String holding path to directory generated intermdiate
+ intermediate_dir: String holding path to directory generated intermediate
artifacts.
machine: String holding the machine type, 'X86' or 'X64'.
export_macro: A preprocessor macro used to annotate stub symbols with
@@ -1041,7 +1073,7 @@ def CreateWindowsLibForSigFiles(sig_files, out_dir, intermediate_dir, machine,
def CreateWindowsDefForSigFiles(sig_files, out_dir, module_name):
- """For all signature files, create a single windows def file.
+ """For all signature files, create a single Windows def file.
Args:
sig_files: Array of strings with the paths to each signature file.
@@ -1068,8 +1100,9 @@ def CreateWindowsDefForSigFiles(sig_files, out_dir, module_name):
def CreatePosixStubsForSigFiles(sig_files, stub_name, out_dir,
intermediate_dir, path_from_source,
- extra_stub_header, export_macro):
- """Create a posix stub library with a module for each signature file.
+ extra_stub_header, export_macro,
+ logging_function, logging_include):
+ """Create a POSIX stub library with a module for each signature file.
Args:
sig_files: Array of strings with the paths to each signature file.
@@ -1082,6 +1115,8 @@ def CreatePosixStubsForSigFiles(sig_files, stub_name, out_dir,
into the generated header for the stub library.
export_macro: A preprocessor macro used to annotate stub symbols with
an EXPORT marking, to control visibility.
+ logging_function: Function call that will be used for error logging.
+ logging_include: Header file where the logging function is defined.
"""
header_base_name = stub_name + '.h'
header_path = os.path.join(out_dir, header_base_name)
@@ -1118,12 +1153,13 @@ def CreatePosixStubsForSigFiles(sig_files, stub_name, out_dir,
signatures = ParseSignatures(infile)
finally:
infile.close()
- writer = PosixStubWriter(name, export_macro, signatures)
+ writer = PosixStubWriter(name, export_macro, signatures, logging_function,
+ logging_include)
writer.WriteImplementationContents(namespace, impl_file)
# Lastly, output the umbrella function for the file.
PosixStubWriter.WriteUmbrellaInitializer(module_names, namespace,
- impl_file)
+ impl_file, logging_function)
finally:
impl_file.close()
@@ -1131,7 +1167,8 @@ def CreatePosixStubsForSigFiles(sig_files, stub_name, out_dir,
header_file = open(header_path, 'w')
try:
PosixStubWriter.WriteHeaderContents(module_names, namespace,
- header_guard, header_file)
+ header_guard, header_file,
+ logging_include)
finally:
header_file.close()
@@ -1149,7 +1186,9 @@ def main():
elif options.type == FILE_TYPE_POSIX_STUB:
CreatePosixStubsForSigFiles(args, options.stubfile_name, out_dir,
intermediate_dir, options.path_from_source,
- options.extra_stub_header, options.export_macro)
+ options.extra_stub_header, options.export_macro,
+ options.logging_function,
+ options.logging_include)
elif options.type == FILE_TYPE_WIN_DEF:
CreateWindowsDefForSigFiles(args, out_dir, options.module_name)
diff --git a/chromium/tools/generate_stubs/generate_stubs_unittest.py b/chromium/tools/generate_stubs/generate_stubs_unittest.py
index 85a74c086b7..6a9b441b171 100755
--- a/chromium/tools/generate_stubs/generate_stubs_unittest.py
+++ b/chromium/tools/generate_stubs/generate_stubs_unittest.py
@@ -6,7 +6,7 @@
"""Unittest for the generate_stubs.py.
Since generate_stubs.py is a code generator, it is hard to do a very good
-test. Instead of creating a golden-file test, which might be flakey, this
+test. Instead of creating a golden-file test, which might be flaky, this
test elects instead to verify that various components "exist" within the
generated file as a sanity check. In particular, there is a simple hit
test to make sure that umbrella functions, etc., do try and include every
@@ -40,6 +40,8 @@ SIMPLE_SIGNATURES = [
('void quux(void)', _MakeSignature('void', 'quux', ['void'])),
('void waldo(void);', _MakeSignature('void', 'waldo', ['void'])),
('int corge(void);', _MakeSignature('int', 'corge', ['void'])),
+ ('int ferda(char **argv[]);',
+ _MakeSignature('int', 'ferda', ['char **argv[]'])),
]
TRICKY_SIGNATURES = [
@@ -165,7 +167,8 @@ class PosixStubWriterUnittest(unittest.TestCase):
self.module_name = 'my_module-1'
self.signatures = [sig[1] for sig in SIMPLE_SIGNATURES]
self.out_dir = 'out_dir'
- self.writer = gs.PosixStubWriter(self.module_name, '', self.signatures)
+ self.writer = gs.PosixStubWriter(self.module_name, '', self.signatures,
+ 'VLOG(1)', 'base/logging.h')
def testEnumName(self):
self.assertEqual('kModuleMy_module1',
@@ -211,6 +214,13 @@ int* TEST_EXPORT foo(bool b) {
return foo_ptr(b);
}""", gs.PosixStubWriter.StubFunction(sig))
+ # Test for a signature where an array is passed. It should be passed without
+ # square brackets otherwise the compilation failure will occur..
+ self.assertEqual("""extern int ferda(char **argv[]) __attribute__((weak));
+int ferda(char **argv[]) {
+ return ferda_ptr(argv);
+}""", gs.PosixStubWriter.StubFunction(SIMPLE_SIGNATURES[6][1]))
+
def testWriteImplemenationContents(self):
outfile = StringIO.StringIO()
self.writer.WriteImplementationContents('my_namespace', outfile)
@@ -250,7 +260,7 @@ int* TEST_EXPORT foo(bool b) {
# Make the header.
outfile = StringIO.StringIO()
self.writer.WriteHeaderContents(module_names, 'my_namespace', 'GUARD_',
- outfile)
+ outfile, 'base/logging.h')
contents = outfile.getvalue()
# Check for namespace and header guard.
@@ -284,7 +294,8 @@ int* TEST_EXPORT foo(bool b) {
# Make the header.
outfile = StringIO.StringIO()
- self.writer.WriteUmbrellaInitializer(module_names, 'my_namespace', outfile)
+ self.writer.WriteUmbrellaInitializer(module_names, 'my_namespace', outfile,
+ 'VLOG(1)')
contents = outfile.getvalue()
# Check for umbrella initializer declaration.
diff --git a/chromium/tools/gn/bootstrap/bootstrap.py b/chromium/tools/gn/bootstrap/bootstrap.py
index 261fddde780..1945852c419 100755
--- a/chromium/tools/gn/bootstrap/bootstrap.py
+++ b/chromium/tools/gn/bootstrap/bootstrap.py
@@ -46,10 +46,6 @@ def main(argv):
'--build-path',
help='The directory in which to build gn, '
'relative to the src directory. (eg. out/Release)')
- parser.add_option(
- '--with-sysroot',
- action='store_true',
- help='Download and build with the Debian sysroot.')
parser.add_option('-v', '--verbose', help='ignored')
parser.add_option(
'--skip-generate-buildfiles',
@@ -76,8 +72,6 @@ def main(argv):
'--no-last-commit-position',
'--out-path=' + gn_build_dir,
]
- if not options.with_sysroot:
- cmd.append('--no-sysroot')
if options.debug:
cmd.append('--debug')
subprocess.check_call(cmd)
diff --git a/chromium/tools/grit/grit.py b/chromium/tools/grit/grit.py
index 2813b93bc8a..d8074e4e808 100755
--- a/chromium/tools/grit/grit.py
+++ b/chromium/tools/grit/grit.py
@@ -12,4 +12,4 @@ import grit.grit_runner
if __name__ == '__main__':
- grit.grit_runner.Main(sys.argv[1:])
+ sys.exit(grit.grit_runner.Main(sys.argv[1:]))
diff --git a/chromium/tools/grit/grit/__init__.py b/chromium/tools/grit/grit/__init__.py
index a1eeaca42be..766fd3492ad 100755..100644
--- a/chromium/tools/grit/grit/__init__.py
+++ b/chromium/tools/grit/grit/__init__.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
diff --git a/chromium/tools/grit/grit/clique.py b/chromium/tools/grit/grit/clique.py
index 7607e5d51a8..f5549d83b93 100755..100644
--- a/chromium/tools/grit/grit/clique.py
+++ b/chromium/tools/grit/grit/clique.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
diff --git a/chromium/tools/grit/grit/constants.py b/chromium/tools/grit/grit/constants.py
index 77faf2a2c1f..02f29280e83 100755..100644
--- a/chromium/tools/grit/grit/constants.py
+++ b/chromium/tools/grit/grit/constants.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
diff --git a/chromium/tools/grit/grit/exception.py b/chromium/tools/grit/grit/exception.py
index d30d782330e..23aff8278b5 100755..100644
--- a/chromium/tools/grit/grit/exception.py
+++ b/chromium/tools/grit/grit/exception.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
diff --git a/chromium/tools/grit/grit/extern/BogoFP.py b/chromium/tools/grit/grit/extern/BogoFP.py
index 3d9cad3d2e1..5af21fd87d0 100755..100644
--- a/chromium/tools/grit/grit/extern/BogoFP.py
+++ b/chromium/tools/grit/grit/extern/BogoFP.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
diff --git a/chromium/tools/grit/grit/extern/FP.py b/chromium/tools/grit/grit/extern/FP.py
index 3bde18dcfcc..69892cab3de 100755..100644
--- a/chromium/tools/grit/grit/extern/FP.py
+++ b/chromium/tools/grit/grit/extern/FP.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
diff --git a/chromium/tools/grit/grit/extern/tclib.py b/chromium/tools/grit/grit/extern/tclib.py
index a9b1a39f228..d7294731ee7 100755..100644
--- a/chromium/tools/grit/grit/extern/tclib.py
+++ b/chromium/tools/grit/grit/extern/tclib.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
diff --git a/chromium/tools/grit/grit/format/__init__.py b/chromium/tools/grit/grit/format/__init__.py
index 28a4dc707a3..55d56b8cfd7 100755..100644
--- a/chromium/tools/grit/grit/format/__init__.py
+++ b/chromium/tools/grit/grit/format/__init__.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
diff --git a/chromium/tools/grit/grit/format/android_xml.py b/chromium/tools/grit/grit/format/android_xml.py
index 42ba6bcbad2..2d87867338e 100755..100644
--- a/chromium/tools/grit/grit/format/android_xml.py
+++ b/chromium/tools/grit/grit/format/android_xml.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
diff --git a/chromium/tools/grit/grit/format/c_format.py b/chromium/tools/grit/grit/format/c_format.py
index 5e10b988da9..6d5d9e647b9 100755..100644
--- a/chromium/tools/grit/grit/format/c_format.py
+++ b/chromium/tools/grit/grit/format/c_format.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
diff --git a/chromium/tools/grit/grit/format/chrome_messages_json.py b/chromium/tools/grit/grit/format/chrome_messages_json.py
index 27a9da1c5f0..43853547025 100644
--- a/chromium/tools/grit/grit/format/chrome_messages_json.py
+++ b/chromium/tools/grit/grit/format/chrome_messages_json.py
@@ -15,15 +15,11 @@ from grit.node import message
def Format(root, lang='en', output_dir='.'):
"""Format the messages as JSON."""
- yield '{\n'
+ yield '{'
encoder = JSONEncoder(ensure_ascii=False)
- format = (' "%s": {\n'
- ' "message": %s%s\n'
- ' }')
- placeholder_format = (' "%i": {\n'
- ' "content": "$%i"\n'
- ' }')
+ format = '"%s":{"message":%s%s}'
+ placeholder_format = '"%i":{"content":"$%i"}'
first = True
for child in root.ActiveDescendants():
if isinstance(child, message.MessageNode):
@@ -50,15 +46,15 @@ def Format(root, lang='en', output_dir='.'):
break
loc_message = loc_message.replace('$%d' % i, '$%d$' % i)
if placeholders:
- placeholders += ',\n'
+ placeholders += ','
placeholders += placeholder_format % (i, i)
if not first:
- yield ',\n'
+ yield ','
first = False
if placeholders:
- placeholders = ',\n "placeholders": {\n%s\n }' % placeholders
+ placeholders = ',"placeholders":{%s}' % placeholders
yield format % (id, loc_message, placeholders)
- yield '\n}\n'
+ yield '}'
diff --git a/chromium/tools/grit/grit/format/chrome_messages_json_unittest.py b/chromium/tools/grit/grit/format/chrome_messages_json_unittest.py
index cf6de6c77be..ae9c7a6e579 100755
--- a/chromium/tools/grit/grit/format/chrome_messages_json_unittest.py
+++ b/chromium/tools/grit/grit/format/chrome_messages_json_unittest.py
@@ -6,6 +6,7 @@
"""Unittest for chrome_messages_json.py.
"""
+import json
import os
import sys
if __name__ == '__main__':
@@ -20,6 +21,10 @@ from grit.tool import build
class ChromeMessagesJsonFormatUnittest(unittest.TestCase):
+ # The default unittest diff limit is too low for our unittests.
+ # Allow the framework to show the full diff output all the time.
+ maxDiff = None
+
def testMessages(self):
root = util.ParseGrdForUnittest(u"""
<messages>
@@ -96,7 +101,7 @@ class ChromeMessagesJsonFormatUnittest(unittest.TestCase):
}
}
"""
- self.assertEqual(test.strip(), output.strip())
+ self.assertEqual(json.loads(test), json.loads(output))
def testTranslations(self):
root = util.ParseGrdForUnittest("""
@@ -121,7 +126,7 @@ class ChromeMessagesJsonFormatUnittest(unittest.TestCase):
}
}
"""
- self.assertEqual(test.strip(), output.strip())
+ self.assertEqual(json.loads(test), json.loads(output))
def testSkipMissingTranslations(self):
grd = """<?xml version="1.0" encoding="UTF-8"?>
@@ -141,12 +146,25 @@ class ChromeMessagesJsonFormatUnittest(unittest.TestCase):
build.RcBuilder.ProcessNode(root, DummyOutput('chrome_messages_json', 'fr'),
buf)
output = buf.getvalue()
- test = u"""
-{
+ test = u'{}'
+ self.assertEqual(test, output)
-}
-"""
- self.assertEqual(test.strip(), output.strip())
+ def testVerifyMinification(self):
+ root = util.ParseGrdForUnittest(u"""
+ <messages>
+ <message name="IDS">
+ <ph name="BEGIN">$1<ex>a</ex></ph>test<ph name="END">$2<ex>b</ex></ph>
+ </message>
+ </messages>
+ """)
+
+ buf = StringIO.StringIO()
+ build.RcBuilder.ProcessNode(root, DummyOutput('chrome_messages_json', 'en'),
+ buf)
+ output = buf.getvalue()
+ test = (u'{"IDS":{"message":"$1$test$2$","placeholders":'
+ u'{"1":{"content":"$1"},"2":{"content":"$2"}}}}')
+ self.assertEqual(test, output)
class DummyOutput(object):
diff --git a/chromium/tools/grit/grit/format/gen_predetermined_ids_unittest.py b/chromium/tools/grit/grit/format/gen_predetermined_ids_unittest.py
index 230acf015cf..0866147d327 100755
--- a/chromium/tools/grit/grit/format/gen_predetermined_ids_unittest.py
+++ b/chromium/tools/grit/grit/format/gen_predetermined_ids_unittest.py
@@ -35,8 +35,8 @@ class GenPredeterminedIdsUnittest(unittest.TestCase):
''')
resources = {}
gen_predetermined_ids.ReadResourceIdsFromFile(f, resources)
- self.assertEqual({12500: 'IDS_BOOKMARKS_NO_ITEMS',
- 12501: 'IDS_BOOKMARK_BAR_IMPORT_LINK',
+ self.assertEqual({12500: 'IDS_BOOKMARKS_OPEN_ALL',
+ 12501: 'IDS_BOOKMARKS_OPEN_ALL_INCOGNITO',
12502: 'IDS_BOOKMARK_X'}, resources)
if __name__ == '__main__':
diff --git a/chromium/tools/grit/grit/format/html_inline.py b/chromium/tools/grit/grit/format/html_inline.py
index d777019e54a..6c9d74799d5 100755
--- a/chromium/tools/grit/grit/format/html_inline.py
+++ b/chromium/tools/grit/grit/format/html_inline.py
@@ -437,18 +437,18 @@ def DoInline(
return pattern % InlineCSSText(text, filepath)
-
def InlineCSSImages(text, filepath=input_filepath):
"""Helper function that inlines external images in CSS backgrounds."""
# Replace contents of url() for css attributes: content, background,
# or *-image.
- return re.sub('(content|background|[\w-]*-image):[^;]*' +
- '(url\((?P<quote1>"|\'|)[^"\'()]*(?P=quote1)\)|' +
- 'image-set\(' +
- '([ ]*url\((?P<quote2>"|\'|)[^"\'()]*(?P=quote2)\)' +
- '[ ]*[0-9.]*x[ ]*(,[ ]*)?)+\))',
- lambda m: InlineCSSUrls(m, filepath),
- text)
+ property_re = '(content|background|[\w-]*-image):[^;]*'
+ url_value_re = 'url\((?!\[\[|{{)(?P<quote1>"|\'|)[^"\'()]*(?P=quote1)\)'
+ image_set_value_re = 'image-set\(([ ]*url\((?!\[\[|{{)' + \
+ '(?P<quote2>"|\'|)[^"\'()]*(?P=quote2)\)' + \
+ '[ ]*[0-9.]*x[ ]*(,[ ]*)?)+\)'
+ value_re = '(%s|%s)' % (url_value_re, image_set_value_re)
+ css_re = property_re + value_re
+ return re.sub(css_re, lambda m: InlineCSSUrls(m, filepath), text)
def InlineCSSUrls(src_match, filepath=input_filepath):
"""Helper function that inlines each url on a CSS image rule match."""
diff --git a/chromium/tools/grit/grit/format/html_inline_unittest.py b/chromium/tools/grit/grit/format/html_inline_unittest.py
index 5040fa38ee2..25d5fef5617 100755
--- a/chromium/tools/grit/grit/format/html_inline_unittest.py
+++ b/chromium/tools/grit/grit/format/html_inline_unittest.py
@@ -58,6 +58,8 @@ class HtmlInlineUnittest(unittest.TestCase):
'test.css': '''
.image {
background: url('test.png');
+ background-image: url([[ignoreMe]]);
+ background-image: image-set(url({{alsoMe}}), 1x);
}
''',
diff --git a/chromium/tools/grit/grit/format/js_map_format.py b/chromium/tools/grit/grit/format/js_map_format.py
index 8cc8eb25e72..c789fb42eb7 100755..100644
--- a/chromium/tools/grit/grit/format/js_map_format.py
+++ b/chromium/tools/grit/grit/format/js_map_format.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
diff --git a/chromium/tools/grit/grit/format/policy_templates_json.py b/chromium/tools/grit/grit/format/policy_templates_json.py
index 13f680e4bdf..f4531f5db34 100755..100644
--- a/chromium/tools/grit/grit/format/policy_templates_json.py
+++ b/chromium/tools/grit/grit/format/policy_templates_json.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright 2017 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.
diff --git a/chromium/tools/grit/grit/format/rc.py b/chromium/tools/grit/grit/format/rc.py
index 47ad5a03ecd..e7d716d3ecd 100755..100644
--- a/chromium/tools/grit/grit/format/rc.py
+++ b/chromium/tools/grit/grit/format/rc.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
diff --git a/chromium/tools/grit/grit/format/rc_header.py b/chromium/tools/grit/grit/format/rc_header.py
index 825ef1eeae1..da2f1565e70 100755..100644
--- a/chromium/tools/grit/grit/format/rc_header.py
+++ b/chromium/tools/grit/grit/format/rc_header.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
diff --git a/chromium/tools/grit/grit/format/resource_map.py b/chromium/tools/grit/grit/format/resource_map.py
index 5fee06b8540..aa39c501de2 100755..100644
--- a/chromium/tools/grit/grit/format/resource_map.py
+++ b/chromium/tools/grit/grit/format/resource_map.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
@@ -16,14 +15,16 @@ from grit import util
def GetFormatter(type):
if type == 'resource_map_header':
return _FormatHeader
- if type == 'resource_map_source':
- return partial(_FormatSource, _GetItemName)
if type == 'resource_file_map_source':
return partial(_FormatSource, _GetItemPath)
+ if type == 'resource_map_source':
+ return partial(_FormatSource, _GetItemName)
if type == 'gzipped_resource_map_header':
return partial(_FormatHeader, include_gzipped=True)
if type == 'gzipped_resource_file_map_source':
return partial(_FormatSource, _GetItemPath, include_gzipped=True)
+ if type == 'gzipped_resource_map_source':
+ return partial(_FormatSource, _GetItemName, include_gzipped=True)
def GetMapName(root):
@@ -143,4 +144,9 @@ def _GetItemName(item):
def _GetItemPath(item):
- return item.GetInputPath().replace("\\", "/")
+ path = item.GetInputPath().replace("\\", "/")
+ # resource_maps don't currently work with variables. See crbug.com/899437
+ # for why you might not need this, and if you still think you need it then
+ # comment 17 has a patch for how to make it work.
+ assert '$' not in path, 'see comment above'
+ return path
diff --git a/chromium/tools/grit/grit/format/resource_map_unittest.py b/chromium/tools/grit/grit/format/resource_map_unittest.py
index 8be4167be79..f82b6abb8fc 100755
--- a/chromium/tools/grit/grit/format/resource_map_unittest.py
+++ b/chromium/tools/grit/grit/format/resource_map_unittest.py
@@ -42,6 +42,8 @@ class FormatResourceMapUnittest(unittest.TestCase):
<include type="foo" file="jkl" name="IDS_LANGUAGESPECIFIC" />
</if>
<include type="foo" file="mno" name="IDS_THIRDPRESENT" />
+ <include type="foo" file="opq" name="IDS_FOURTHPRESENT"
+ skip_in_resource_map="true" />
</includes>
</release>''', run_gatherers=True)
output = util.StripBlankLinesAndComments(''.join(
diff --git a/chromium/tools/grit/grit/gather/__init__.py b/chromium/tools/grit/grit/gather/__init__.py
index e52734a5b53..2d578f56435 100755..100644
--- a/chromium/tools/grit/grit/gather/__init__.py
+++ b/chromium/tools/grit/grit/gather/__init__.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
diff --git a/chromium/tools/grit/grit/gather/admin_template.py b/chromium/tools/grit/grit/gather/admin_template.py
index edf783b3a18..1b8340a8215 100755..100644
--- a/chromium/tools/grit/grit/gather/admin_template.py
+++ b/chromium/tools/grit/grit/gather/admin_template.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
diff --git a/chromium/tools/grit/grit/gather/chrome_html.py b/chromium/tools/grit/grit/gather/chrome_html.py
index a0bd999680e..12f570c636c 100755..100644
--- a/chromium/tools/grit/grit/gather/chrome_html.py
+++ b/chromium/tools/grit/grit/gather/chrome_html.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
diff --git a/chromium/tools/grit/grit/gather/chrome_scaled_image.py b/chromium/tools/grit/grit/gather/chrome_scaled_image.py
index a0663edf4a6..b7bcf2d3bfb 100755..100644
--- a/chromium/tools/grit/grit/gather/chrome_scaled_image.py
+++ b/chromium/tools/grit/grit/gather/chrome_scaled_image.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
diff --git a/chromium/tools/grit/grit/gather/interface.py b/chromium/tools/grit/grit/gather/interface.py
index c277d379b3c..5d3ef1d9367 100755..100644
--- a/chromium/tools/grit/grit/gather/interface.py
+++ b/chromium/tools/grit/grit/gather/interface.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
diff --git a/chromium/tools/grit/grit/gather/json_loader.py b/chromium/tools/grit/grit/gather/json_loader.py
index 6370b10f9ed..ca1f4359954 100755..100644
--- a/chromium/tools/grit/grit/gather/json_loader.py
+++ b/chromium/tools/grit/grit/gather/json_loader.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
diff --git a/chromium/tools/grit/grit/gather/policy_json.py b/chromium/tools/grit/grit/gather/policy_json.py
index d11de7560d1..d0a7d672300 100755..100644
--- a/chromium/tools/grit/grit/gather/policy_json.py
+++ b/chromium/tools/grit/grit/gather/policy_json.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
diff --git a/chromium/tools/grit/grit/gather/rc.py b/chromium/tools/grit/grit/gather/rc.py
index f1e8982ec7a..a33275864fb 100755..100644
--- a/chromium/tools/grit/grit/gather/rc.py
+++ b/chromium/tools/grit/grit/gather/rc.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
diff --git a/chromium/tools/grit/grit/gather/regexp.py b/chromium/tools/grit/grit/gather/regexp.py
index 16bc323a131..de64c1747a3 100755..100644
--- a/chromium/tools/grit/grit/gather/regexp.py
+++ b/chromium/tools/grit/grit/gather/regexp.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
diff --git a/chromium/tools/grit/grit/gather/skeleton_gatherer.py b/chromium/tools/grit/grit/gather/skeleton_gatherer.py
index 38b504c3812..564ccceb637 100755..100644
--- a/chromium/tools/grit/grit/gather/skeleton_gatherer.py
+++ b/chromium/tools/grit/grit/gather/skeleton_gatherer.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
diff --git a/chromium/tools/grit/grit/gather/tr_html.py b/chromium/tools/grit/grit/gather/tr_html.py
index d5122f6e825..f0bd13227b9 100755..100644
--- a/chromium/tools/grit/grit/gather/tr_html.py
+++ b/chromium/tools/grit/grit/gather/tr_html.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
diff --git a/chromium/tools/grit/grit/gather/txt.py b/chromium/tools/grit/grit/gather/txt.py
index e8c20de8352..a2a6cfc91b7 100755..100644
--- a/chromium/tools/grit/grit/gather/txt.py
+++ b/chromium/tools/grit/grit/gather/txt.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
diff --git a/chromium/tools/grit/grit/grit_runner.py b/chromium/tools/grit/grit/grit_runner.py
index 58160e43163..09994dadfc0 100755
--- a/chromium/tools/grit/grit/grit_runner.py
+++ b/chromium/tools/grit/grit/grit_runner.py
@@ -80,6 +80,9 @@ _HIDDEN = 3 # optional key - presence indicates tool is hidden
# Maps tool names to the tool's module. Done as a list of (key, value) tuples
# instead of a map to preserve ordering.
_TOOLS = [
+ ['android2grd', {
+ _FACTORY: ToolAndroid2Grd,
+ _REQUIRES_INPUT : False }],
['build', { _FACTORY : ToolFactoryBuild, _REQUIRES_INPUT : True }],
['buildinfo', { _FACTORY : ToolFactoryBuildInfo, _REQUIRES_INPUT : True }],
['count', { _FACTORY : ToolFactoryCount, _REQUIRES_INPUT : True }],
@@ -99,9 +102,6 @@ _TOOLS = [
_REQUIRES_INPUT : False }],
['unit', { _FACTORY : ToolFactoryUnit, _REQUIRES_INPUT : False }],
['xmb', { _FACTORY : ToolFactoryXmb, _REQUIRES_INPUT : True }],
- ['android2grd', {
- _FACTORY: ToolAndroid2Grd,
- _REQUIRES_INPUT : False }],
]
@@ -155,7 +155,7 @@ class Options(object):
def ReadOptions(self, args):
"""Reads options from the start of args and returns the remainder."""
- (opts, args) = getopt.getopt(args, 'vxi:p:h:')
+ (opts, args) = getopt.getopt(args, 'vxi:p:h:', ('help',))
for (key, val) in opts:
if key == '-h': self.hash = val
elif key == '-i': self.input = val
@@ -168,6 +168,9 @@ class Options(object):
self.extra_verbose = True
util.extra_verbose = True
elif key == '-p': self.profile_dest = val
+ elif key == '--help':
+ PrintUsage()
+ sys.exit(0)
if not self.input:
if 'GRIT_INPUT' in os.environ:
@@ -196,57 +199,65 @@ def Main(args):
"""Parses arguments and does the appropriate thing."""
util.ChangeStdoutEncoding()
- if sys.version_info < (2, 6):
- print "GRIT requires Python 2.6 or later."
- return 2
- elif not args or (len(args) == 1 and args[0] == 'help'):
- PrintUsage()
- return 0
- elif len(args) == 2 and args[0] == 'help':
- tool = args[1].lower()
- if not _GetToolInfo(tool):
- print "No such tool. Try running 'grit help' for a list of tools."
- return 2
-
- print ("Help for 'grit %s' (for general help, run 'grit help'):\n"
- % (tool))
- print _GetToolInfo(tool)[_FACTORY]().__doc__
- return 0
- else:
- options = Options()
+ options = Options()
+ try:
args = options.ReadOptions(args) # args may be shorter after this
- if not args:
- print "No tool provided. Try running 'grit help' for a list of tools."
- return 2
- tool = args[0]
- if not _GetToolInfo(tool):
- print "No such tool. Try running 'grit help' for a list of tools."
- return 2
-
- try:
- if _GetToolInfo(tool)[_REQUIRES_INPUT]:
- os.stat(options.input)
- except OSError:
- print ('Input file %s not found.\n'
- 'To specify a different input file:\n'
- ' 1. Use the GRIT_INPUT environment variable.\n'
- ' 2. Use the -i command-line option. This overrides '
- 'GRIT_INPUT.\n'
- ' 3. Specify neither GRIT_INPUT or -i and GRIT will try to load '
- "'resource.grd'\n"
- ' from the current directory.' % options.input)
- return 2
-
- if options.hash:
- grit.extern.FP.UseUnsignedFingerPrintFromModule(options.hash)
+ except getopt.GetoptError as e:
+ print "grit:", str(e)
+ print "Try running 'grit help' for valid options."
+ return 1
+ if not args:
+ print "No tool provided. Try running 'grit help' for a list of tools."
+ return 2
+
+ tool = args[0]
+ if tool == 'help':
+ if len(args) == 1:
+ PrintUsage()
+ return 0
+ else:
+ tool = args[1]
+ if not _GetToolInfo(tool):
+ print "No such tool. Try running 'grit help' for a list of tools."
+ return 2
+
+ print ("Help for 'grit %s' (for general help, run 'grit help'):\n"
+ % (tool))
+ _GetToolInfo(tool)[_FACTORY]().ShowUsage()
+ return 0
+ if not _GetToolInfo(tool):
+ print "No such tool. Try running 'grit help' for a list of tools."
+ return 2
+
+ try:
+ if _GetToolInfo(tool)[_REQUIRES_INPUT]:
+ os.stat(options.input)
+ except OSError:
+ print ('Input file %s not found.\n'
+ 'To specify a different input file:\n'
+ ' 1. Use the GRIT_INPUT environment variable.\n'
+ ' 2. Use the -i command-line option. This overrides '
+ 'GRIT_INPUT.\n'
+ ' 3. Specify neither GRIT_INPUT or -i and GRIT will try to load '
+ "'resource.grd'\n"
+ ' from the current directory.' % options.input)
+ return 2
+
+ if options.hash:
+ grit.extern.FP.UseUnsignedFingerPrintFromModule(options.hash)
+ try:
toolobject = _GetToolInfo(tool)[_FACTORY]()
if options.profile_dest:
import hotshot
prof = hotshot.Profile(options.profile_dest)
- prof.runcall(toolobject.Run, options, args[1:])
+ return prof.runcall(toolobject.Run, options, args[1:])
else:
- toolobject.Run(options, args[1:])
+ return toolobject.Run(options, args[1:])
+ except getopt.GetoptError as e:
+ print "grit: %s: %s" % (tool, str(e))
+ print "Try running 'grit help %s' for valid options." % (tool,)
+ return 1
if __name__ == '__main__':
diff --git a/chromium/tools/grit/grit/lazy_re.py b/chromium/tools/grit/grit/lazy_re.py
index a532cd04c18..ae67d04889e 100755..100644
--- a/chromium/tools/grit/grit/lazy_re.py
+++ b/chromium/tools/grit/grit/lazy_re.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
diff --git a/chromium/tools/grit/grit/node/__init__.py b/chromium/tools/grit/grit/node/__init__.py
index f285e2dc053..2fc0d3360c2 100755..100644
--- a/chromium/tools/grit/grit/node/__init__.py
+++ b/chromium/tools/grit/grit/node/__init__.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
diff --git a/chromium/tools/grit/grit/node/base.py b/chromium/tools/grit/grit/node/base.py
index 76fbb31e0f6..bd6b2079530 100755..100644
--- a/chromium/tools/grit/grit/node/base.py
+++ b/chromium/tools/grit/grit/node/base.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
diff --git a/chromium/tools/grit/grit/node/custom/__init__.py b/chromium/tools/grit/grit/node/custom/__init__.py
index 3e13ca131d5..e179cf77301 100755..100644
--- a/chromium/tools/grit/grit/node/custom/__init__.py
+++ b/chromium/tools/grit/grit/node/custom/__init__.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
diff --git a/chromium/tools/grit/grit/node/custom/filename.py b/chromium/tools/grit/grit/node/custom/filename.py
index 79a7744f2eb..416eac51486 100755..100644
--- a/chromium/tools/grit/grit/node/custom/filename.py
+++ b/chromium/tools/grit/grit/node/custom/filename.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
diff --git a/chromium/tools/grit/grit/node/empty.py b/chromium/tools/grit/grit/node/empty.py
index b3759a27ceb..f2a1a1ec0d4 100755..100644
--- a/chromium/tools/grit/grit/node/empty.py
+++ b/chromium/tools/grit/grit/node/empty.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
diff --git a/chromium/tools/grit/grit/node/include.py b/chromium/tools/grit/grit/node/include.py
index f7a51ed1270..5e89129d10c 100755..100644
--- a/chromium/tools/grit/grit/node/include.py
+++ b/chromium/tools/grit/grit/node/include.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
@@ -53,6 +52,7 @@ class IncludeNode(base.Node):
'relativepath': 'false',
'use_base_dir': 'true',
'skip_minify': 'false',
+ 'skip_in_resource_map': 'false',
}
def GetInputPath(self):
@@ -120,7 +120,8 @@ class IncludeNode(base.Node):
allow_external_script=allow_external_script)
def IsResourceMapSource(self):
- return True
+ skip = self.attrs.get('skip_in_resource_map', 'false') == 'true'
+ return not skip
@staticmethod
def Construct(parent, name, type, file, translateable=True,
diff --git a/chromium/tools/grit/grit/node/include_unittest.py b/chromium/tools/grit/grit/node/include_unittest.py
index 3bf1a6891a6..25b8a398ad9 100755
--- a/chromium/tools/grit/grit/node/include_unittest.py
+++ b/chromium/tools/grit/grit/node/include_unittest.py
@@ -79,10 +79,20 @@ class IncludeNodeUnittest(unittest.TestCase):
compressed = inc.GetDataPackValue(lang='en', encoding=1)
decompressed_data = zlib.decompress(compressed, 16 + zlib.MAX_WBITS)
- self.assertEqual(util.ReadFile(util.PathFromRoot('grit/testdata')
- + "/test_text.txt", util.BINARY),
- decompressed_data)
+ def testSkipInResourceMap(self):
+ root = util.ParseGrdForUnittest('''
+ <includes>
+ <include name="TEST1_TXT" file="test1_text.txt" type="BINDATA"/>
+ <include name="TEST2_TXT" file="test1_text.txt" type="BINDATA"
+ skip_in_resource_map="true"/>
+ <include name="TEST3_TXT" file="test1_text.txt" type="BINDATA"
+ skip_in_resource_map="false"/>
+ </includes>''', base_dir = util.PathFromRoot('grit/testdata'))
+ inc = root.GetChildrenOfType(include.IncludeNode)
+ self.assertTrue(inc[0].IsResourceMapSource())
+ self.assertFalse(inc[1].IsResourceMapSource())
+ self.assertTrue(inc[2].IsResourceMapSource())
if __name__ == '__main__':
unittest.main()
diff --git a/chromium/tools/grit/grit/node/io.py b/chromium/tools/grit/grit/node/io.py
index 83e14b1f769..0e17717e483 100755..100644
--- a/chromium/tools/grit/grit/node/io.py
+++ b/chromium/tools/grit/grit/node/io.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
diff --git a/chromium/tools/grit/grit/node/mapping.py b/chromium/tools/grit/grit/node/mapping.py
index 71b250b22c0..659f0e019a5 100755..100644
--- a/chromium/tools/grit/grit/node/mapping.py
+++ b/chromium/tools/grit/grit/node/mapping.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
diff --git a/chromium/tools/grit/grit/node/message.py b/chromium/tools/grit/grit/node/message.py
index 1b887c2d028..da34af277c9 100755..100644
--- a/chromium/tools/grit/grit/node/message.py
+++ b/chromium/tools/grit/grit/node/message.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
diff --git a/chromium/tools/grit/grit/node/misc.py b/chromium/tools/grit/grit/node/misc.py
index 91c9913f9c7..2d561aa1159 100755..100644
--- a/chromium/tools/grit/grit/node/misc.py
+++ b/chromium/tools/grit/grit/node/misc.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
diff --git a/chromium/tools/grit/grit/node/structure.py b/chromium/tools/grit/grit/node/structure.py
index 3d2012ab6c2..48304b72e6e 100755..100644
--- a/chromium/tools/grit/grit/node/structure.py
+++ b/chromium/tools/grit/grit/node/structure.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
diff --git a/chromium/tools/grit/grit/node/variant.py b/chromium/tools/grit/grit/node/variant.py
index 487f7f9d060..7d3a526ded2 100755..100644
--- a/chromium/tools/grit/grit/node/variant.py
+++ b/chromium/tools/grit/grit/node/variant.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
diff --git a/chromium/tools/grit/grit/pseudo.py b/chromium/tools/grit/grit/pseudo.py
index cb57daab580..23b784d5347 100755..100644
--- a/chromium/tools/grit/grit/pseudo.py
+++ b/chromium/tools/grit/grit/pseudo.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
diff --git a/chromium/tools/grit/grit/pseudo_rtl.py b/chromium/tools/grit/grit/pseudo_rtl.py
index dee448365c4..f307ea04960 100755..100644
--- a/chromium/tools/grit/grit/pseudo_rtl.py
+++ b/chromium/tools/grit/grit/pseudo_rtl.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
diff --git a/chromium/tools/grit/grit/scons.py b/chromium/tools/grit/grit/scons.py
index 8545767d219..71d45fcaec2 100755..100644
--- a/chromium/tools/grit/grit/scons.py
+++ b/chromium/tools/grit/grit/scons.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
diff --git a/chromium/tools/grit/grit/shortcuts.py b/chromium/tools/grit/grit/shortcuts.py
index 30bdbf7e525..bae61ccfbe3 100755..100644
--- a/chromium/tools/grit/grit/shortcuts.py
+++ b/chromium/tools/grit/grit/shortcuts.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
diff --git a/chromium/tools/grit/grit/tclib.py b/chromium/tools/grit/grit/tclib.py
index 509c3aaddc1..4101824d1f4 100755..100644
--- a/chromium/tools/grit/grit/tclib.py
+++ b/chromium/tools/grit/grit/tclib.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
diff --git a/chromium/tools/grit/grit/tool/__init__.py b/chromium/tools/grit/grit/tool/__init__.py
index 4f769f2a354..cc455b36e73 100755..100644
--- a/chromium/tools/grit/grit/tool/__init__.py
+++ b/chromium/tools/grit/grit/tool/__init__.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
diff --git a/chromium/tools/grit/grit/tool/android2grd.py b/chromium/tools/grit/grit/tool/android2grd.py
index e9e0ed156d8..4326209556a 100755..100644
--- a/chromium/tools/grit/grit/tool/android2grd.py
+++ b/chromium/tools/grit/grit/tool/android2grd.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
@@ -9,6 +8,7 @@
import getopt
import os.path
import StringIO
+import sys
from xml.dom import Node
import xml.dom.minidom
@@ -125,7 +125,8 @@ OPTIONS may be any of the following:
Android2Grd._HEADER_DIR_FLAG,
Android2Grd._XTB_DIR_FLAG,
Android2Grd._XML_DIR_FLAG, ]
- (opts, args) = getopt.getopt(args, None, ['%s=' % o for o in flags])
+ (opts, args) = getopt.getopt(
+ args, None, ['%s=' % o for o in flags] + ['help'])
for key, val in opts:
# Get rid of the preceding hypens.
@@ -144,6 +145,9 @@ OPTIONS may be any of the following:
self.xtb_dir = val
elif k == Android2Grd._XML_DIR_FLAG:
self.xml_res_dir = val
+ elif k == 'help':
+ self.ShowUsage()
+ sys.exit(0)
return args
def Run(self, opts, args):
diff --git a/chromium/tools/grit/grit/tool/build.py b/chromium/tools/grit/grit/tool/build.py
index 71f05d28469..43ebe8d66b8 100755..100644
--- a/chromium/tools/grit/grit/tool/build.py
+++ b/chromium/tools/grit/grit/tool/build.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
@@ -34,6 +33,7 @@ _format_modules = {
'data_package': 'data_pack',
'gzipped_resource_file_map_source': 'resource_map',
'gzipped_resource_map_header': 'resource_map',
+ 'gzipped_resource_map_source': 'resource_map',
'js_map_format': 'js_map_format',
'policy_templates': 'policy_templates_json',
'rc_all': 'rc',
@@ -163,6 +163,7 @@ are exported to translation interchange files (e.g. XMB files), etc.
replace_ellipsis = True
(own_opts, args) = getopt.getopt(args, 'a:p:o:D:E:f:w:t:',
('depdir=','depfile=','assert-file-list=',
+ 'help',
'output-all-resource-defines',
'no-output-all-resource-defines',
'no-replace-ellipsis',
@@ -209,6 +210,9 @@ are exported to translation interchange files (e.g. XMB files), etc.
js_minifier = val
elif key == '--whitelist-support':
whitelist_support = True
+ elif key == '--help':
+ self.ShowUsage()
+ sys.exit(0)
if len(args):
print 'This tool takes no tool-specific arguments.'
@@ -332,10 +336,12 @@ are exported to translation interchange files (e.g. XMB files), etc.
# Microsoft's RC compiler can only deal with single-byte or double-byte
# files (no UTF-8), so we make all RC files UTF-16 to support all
# character sets.
- if output_type in ('rc_header', 'resource_map_header',
- 'resource_map_source', 'resource_file_map_source',
+ if output_type in ('rc_header', 'resource_file_map_source',
+ 'resource_map_header', 'resource_map_source',
+ 'gzipped_resource_file_map_source',
'gzipped_resource_map_header',
- 'gzipped_resource_file_map_source'):
+ 'gzipped_resource_map_source',
+ ):
return 'cp1252'
if output_type in ('android', 'c_format', 'js_map_format', 'plist',
'plist_strings', 'doc', 'json', 'android_policy',
diff --git a/chromium/tools/grit/grit/tool/buildinfo.py b/chromium/tools/grit/grit/tool/buildinfo.py
index f21d54c22e0..5ef1a0126d4 100755..100644
--- a/chromium/tools/grit/grit/tool/buildinfo.py
+++ b/chromium/tools/grit/grit/tool/buildinfo.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
@@ -8,13 +7,20 @@
import getopt
import os
+import sys
from grit import grd_reader
from grit.node import structure
from grit.tool import interface
class DetermineBuildInfo(interface.Tool):
- """Determine what files will be read and output by GRIT."""
+ """Determine what files will be read and output by GRIT.
+Outputs the list of generated files and inputs used to stdout.
+
+Usage: grit buildinfo [-o DIR]
+
+The output directory is used for display only.
+"""
def __init__(self):
pass
@@ -25,13 +31,15 @@ class DetermineBuildInfo(interface.Tool):
'output by GRIT with a given input.')
def Run(self, opts, args):
- """Main method for the buildinfo tool. Outputs the list
- of generated files and inputs used to stdout."""
+ """Main method for the buildinfo tool."""
self.output_directory = '.'
- (own_opts, args) = getopt.getopt(args, 'o:')
+ (own_opts, args) = getopt.getopt(args, 'o:', ('help',))
for (key, val) in own_opts:
if key == '-o':
self.output_directory = val
+ elif key == '--help':
+ self.ShowUsage()
+ sys.exit(0)
if len(args) > 0:
print 'This tool takes exactly one argument: the output directory via -o'
return 2
diff --git a/chromium/tools/grit/grit/tool/count.py b/chromium/tools/grit/grit/tool/count.py
index 1517b16c1f4..1a45d89d1b0 100755..100644
--- a/chromium/tools/grit/grit/tool/count.py
+++ b/chromium/tools/grit/grit/tool/count.py
@@ -1,10 +1,12 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
'''Count number of occurrences of a given message ID.'''
+import getopt
+import sys
+
from grit import grd_reader
from grit.tool import interface
@@ -18,7 +20,21 @@ class CountMessage(interface.Tool):
def ShortDescription(self):
return 'Count the number of times a given message ID is used.'
+ def ParseOptions(self, args):
+ """Set this objects and return all non-option arguments."""
+ own_opts, args = getopt.getopt(args, '', ('help',))
+ for key, val in own_opts:
+ if key == '--help':
+ self.ShowUsage()
+ sys.exit(0)
+ return args
+
def Run(self, opts, args):
+ args = self.ParseOptions(args)
+ if len(args) != 1:
+ print ('This tool takes a single tool-specific argument, the message '
+ 'ID to count.')
+ return 2
self.SetOptions(opts)
id = args[0]
diff --git a/chromium/tools/grit/grit/tool/diff_structures.py b/chromium/tools/grit/grit/tool/diff_structures.py
index e2b10b9a9b4..681d01ecf97 100755..100644
--- a/chromium/tools/grit/grit/tool/diff_structures.py
+++ b/chromium/tools/grit/grit/tool/diff_structures.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
@@ -8,6 +7,7 @@
import os
import getopt
+import sys
import tempfile
from grit.node import structure
@@ -49,7 +49,7 @@ class DiffStructures(interface.Tool):
def Run(self, global_opts, args):
(opts, args) = getopt.getopt(args, 's:e:t:',
- ['left_encoding=', 'right_encoding='])
+ ('help', 'left_encoding=', 'right_encoding='))
for key, val in opts:
if key == '-s':
self.section = val
@@ -62,6 +62,9 @@ class DiffStructures(interface.Tool):
self.left_encoding = val
elif key == '--right_encoding':
self.right_encoding == val
+ elif key == '--help':
+ self.ShowUsage()
+ sys.exit(0)
if len(args) != 2:
print "Incorrect usage - 'grit help sdiff' for usage details."
diff --git a/chromium/tools/grit/grit/tool/interface.py b/chromium/tools/grit/grit/tool/interface.py
index bec4e1cc8d6..27fbbb7ab72 100755..100644
--- a/chromium/tools/grit/grit/tool/interface.py
+++ b/chromium/tools/grit/grit/tool/interface.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
@@ -39,6 +38,10 @@ class Tool(object):
def __init__(self):
self.o = None
+ def ShowUsage(self):
+ '''Show usage text for this tool.'''
+ print self.__doc__
+
def SetOptions(self, opts):
self.o = opts
diff --git a/chromium/tools/grit/grit/tool/menu_from_parts.py b/chromium/tools/grit/grit/tool/menu_from_parts.py
index c7be7bd9c24..c8c3619c1e2 100755..100644
--- a/chromium/tools/grit/grit/tool/menu_from_parts.py
+++ b/chromium/tools/grit/grit/tool/menu_from_parts.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
diff --git a/chromium/tools/grit/grit/tool/newgrd.py b/chromium/tools/grit/grit/tool/newgrd.py
index 1dc7a7d3ed8..24c863f9001 100755..100644
--- a/chromium/tools/grit/grit/tool/newgrd.py
+++ b/chromium/tools/grit/grit/tool/newgrd.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
@@ -6,6 +5,9 @@
'''Tool to create a new, empty .grd file with all the basic sections.
'''
+import getopt
+import sys
+
from grit.tool import interface
from grit import constants
from grit import util
@@ -60,8 +62,18 @@ where in the file.'''
def ShortDescription(self):
return 'Create a new empty .grd file.'
- def Run(self, global_options, my_arguments):
- if not len(my_arguments) == 1:
+ def ParseOptions(self, args):
+ """Set this objects and return all non-option arguments."""
+ own_opts, args = getopt.getopt(args, '', ('help',))
+ for key, val in own_opts:
+ if key == '--help':
+ self.ShowUsage()
+ sys.exit(0)
+ return args
+
+ def Run(self, opts, args):
+ args = self.ParseOptions(args)
+ if len(args) != 1:
print 'This tool requires exactly one argument, the name of the output file.'
return 2
filename = my_arguments[0]
diff --git a/chromium/tools/grit/grit/tool/postprocess_interface.py b/chromium/tools/grit/grit/tool/postprocess_interface.py
index c870b932a0b..08566ebea27 100755..100644
--- a/chromium/tools/grit/grit/tool/postprocess_interface.py
+++ b/chromium/tools/grit/grit/tool/postprocess_interface.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
diff --git a/chromium/tools/grit/grit/tool/preprocess_interface.py b/chromium/tools/grit/grit/tool/preprocess_interface.py
index eea10b21e42..97404e9f41d 100755..100644
--- a/chromium/tools/grit/grit/tool/preprocess_interface.py
+++ b/chromium/tools/grit/grit/tool/preprocess_interface.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
diff --git a/chromium/tools/grit/grit/tool/rc2grd.py b/chromium/tools/grit/grit/tool/rc2grd.py
index a0ef77fc5cb..4850e8246bb 100755..100644
--- a/chromium/tools/grit/grit/tool/rc2grd.py
+++ b/chromium/tools/grit/grit/tool/rc2grd.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
@@ -10,6 +9,7 @@ import os.path
import getopt
import re
import StringIO
+import sys
import types
import grit.node.empty
@@ -157,11 +157,12 @@ C preprocessor on the .rc file or manually edit it before using this tool.
self.pre_process = None
self.post_process = None
- def ParseOptions(self, args):
+ def ParseOptions(self, args, help_func=None):
'''Given a list of arguments, set this object's options and return
all non-option arguments.
'''
- (own_opts, args) = getopt.getopt(args, 'e:h:u:n:r', ['pre=', 'post='])
+ (own_opts, args) = getopt.getopt(args, 'e:h:u:n:r',
+ ('help', 'pre=', 'post='))
for (key, val) in own_opts:
if key == '-e':
self.input_encoding = val
@@ -177,6 +178,12 @@ C preprocessor on the .rc file or manually edit it before using this tool.
self.pre_process = val
elif key == '--post':
self.post_process = val
+ elif key == '--help':
+ if help_func is None:
+ self.ShowUsage()
+ else:
+ help_func()
+ sys.exit(0)
return args
def Run(self, opts, args):
diff --git a/chromium/tools/grit/grit/tool/resize.py b/chromium/tools/grit/grit/tool/resize.py
index 3daffa432f7..3891717921c 100755..100644
--- a/chromium/tools/grit/grit/tool/resize.py
+++ b/chromium/tools/grit/grit/tool/resize.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
@@ -8,6 +7,7 @@
import getopt
import os
+import sys
from grit import grd_reader
from grit import pseudo
@@ -194,7 +194,7 @@ near the top of the file, before you open it in Visual Studio.
def Run(self, opts, args):
self.SetOptions(opts)
- own_opts, args = getopt.getopt(args, 'l:f:c:D:')
+ own_opts, args = getopt.getopt(args, 'l:f:c:D:', ('help',))
for key, val in own_opts:
if key == '-l':
self.SetLanguage(val)
@@ -206,6 +206,9 @@ near the top of the file, before you open it in Visual Studio.
if key == '-D':
name, val = util.ParseDefine(val)
self.defines[name] = val
+ elif key == '--help':
+ self.ShowUsage()
+ sys.exit(0)
res_tree = grd_reader.Parse(opts.input, debug=opts.extra_verbose)
res_tree.OnlyTheseTranslations([self.lang])
diff --git a/chromium/tools/grit/grit/tool/test.py b/chromium/tools/grit/grit/tool/test.py
index 8f4cdd91884..1fcf23caab1 100755..100644
--- a/chromium/tools/grit/grit/tool/test.py
+++ b/chromium/tools/grit/grit/tool/test.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
diff --git a/chromium/tools/grit/grit/tool/transl2tc.py b/chromium/tools/grit/grit/tool/transl2tc.py
index a8af6ed16ea..d75e2b5c3fa 100755..100644
--- a/chromium/tools/grit/grit/tool/transl2tc.py
+++ b/chromium/tools/grit/grit/tool/transl2tc.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
@@ -6,6 +5,7 @@
'''The 'grit transl2tc' tool.
'''
+import sys
from grit import grd_reader
from grit import util
@@ -60,7 +60,7 @@ Bulk Translation Upload tool.
if len(args) and args[0] == '-l':
self.limits = util.ReadFile(args[1], util.RAW_TEXT).split('\n')
args = args[2:]
- return self.rc2grd.ParseOptions(args)
+ return self.rc2grd.ParseOptions(args, help_func=self.ShowUsage)
def Run(self, globopt, args):
args = self.Setup(globopt, args)
diff --git a/chromium/tools/grit/grit/tool/unit.py b/chromium/tools/grit/grit/tool/unit.py
index 00ffcb1e4e4..c78ae0b9ef8 100755..100644
--- a/chromium/tools/grit/grit/tool/unit.py
+++ b/chromium/tools/grit/grit/tool/unit.py
@@ -1,11 +1,11 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
'''GRIT tool that runs the unit test suite for GRIT.'''
-
+import getopt
+import sys
import unittest
import grit.test_suite_all
@@ -19,6 +19,20 @@ This happens in the environment that is set up by the basic GRIT runner.'''
def ShortDescription(self):
return 'Use this tool to run all the unit tests for GRIT.'
+ def ParseOptions(self, args):
+ """Set this objects and return all non-option arguments."""
+ own_opts, args = getopt.getopt(args, '', ('help',))
+ for key, val in own_opts:
+ if key == '--help':
+ self.ShowUsage()
+ sys.exit(0)
+ return args
+
def Run(self, opts, args):
+ args = self.ParseOptions(args)
+ if args:
+ print 'This tool takes no arguments.'
+ return 2
+
return unittest.TextTestRunner(verbosity=2).run(
grit.test_suite_all.TestSuiteAll())
diff --git a/chromium/tools/grit/grit/tool/xmb.py b/chromium/tools/grit/grit/tool/xmb.py
index eb10e7164e9..150652b47a1 100755..100644
--- a/chromium/tools/grit/grit/tool/xmb.py
+++ b/chromium/tools/grit/grit/tool/xmb.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
@@ -8,6 +7,7 @@
import getopt
import os
+import sys
from xml.sax import saxutils
@@ -172,7 +172,7 @@ Other options:
limit_file = None
limit_is_grd = False
limit_file_dir = None
- own_opts, args = getopt.getopt(args, 'l:D:ih')
+ own_opts, args = getopt.getopt(args, 'l:D:ih', ('help',))
for key, val in own_opts:
if key == '-l':
limit_file = open(val, 'r')
@@ -188,6 +188,9 @@ Other options:
elif key == '-E':
(env_name, env_value) = val.split('=', 1)
os.environ[env_name] = env_value
+ elif key == '--help':
+ self.ShowUsage()
+ sys.exit(0)
if not len(args) == 1:
print ('grit xmb takes exactly one argument, the path to the XMB file '
'to output.')
diff --git a/chromium/tools/grit/grit/util.py b/chromium/tools/grit/grit/util.py
index aac2dd917cd..c3e004b7b45 100755..100644
--- a/chromium/tools/grit/grit/util.py
+++ b/chromium/tools/grit/grit/util.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
diff --git a/chromium/tools/grit/grit/xtb_reader.py b/chromium/tools/grit/grit/xtb_reader.py
index df6d9f89487..8d5f58f50a2 100755..100644
--- a/chromium/tools/grit/grit/xtb_reader.py
+++ b/chromium/tools/grit/grit/xtb_reader.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2012 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.
diff --git a/chromium/tools/grit/grit_info.py b/chromium/tools/grit/grit_info.py
index 3b85dab068f..7c57aff822a 100755
--- a/chromium/tools/grit/grit_info.py
+++ b/chromium/tools/grit/grit_info.py
@@ -171,10 +171,6 @@ def DoMain(argv):
def main(argv):
- if sys.version_info < (2, 6):
- print "GRIT requires Python 2.6 or later."
- return 1
-
try:
result = DoMain(argv[1:])
except WrongNumberOfArguments, e:
diff --git a/chromium/tools/grit/grit_rule.gni b/chromium/tools/grit/grit_rule.gni
index c50895a26d9..b6b3d8cf738 100644
--- a/chromium/tools/grit/grit_rule.gni
+++ b/chromium/tools/grit/grit_rule.gni
@@ -329,12 +329,18 @@ template("grit") {
inputs = [
invoker.source,
+ asserted_list_file,
]
if (resource_ids != "") {
# The script depends on the ID file. Only add this dependency if the ID
# file is specified.
inputs += [ resource_ids ]
}
+ if (grit_predetermined_resource_ids_file != "") {
+ # If the predetermined ID file is present, the script outputs depend on
+ # it too.
+ inputs += [ grit_predetermined_resource_ids_file ]
+ }
depfile = "$depfile_dir/${grit_output_name}_stamp.d"
outputs = [ "${depfile}.stamp" ] + grit_outputs + pak_info_outputs
diff --git a/chromium/tools/gritsettings/resource_ids b/chromium/tools/gritsettings/resource_ids
index 0d621a15e32..95e9bf70c41 100644
--- a/chromium/tools/gritsettings/resource_ids
+++ b/chromium/tools/gritsettings/resource_ids
@@ -94,61 +94,68 @@
"chrome/browser/resources/invalidations_resources.grd": {
"includes": [12400],
},
- "chrome/browser/resources/md_extensions/extensions_resources_vulcanized.grd": {
+ "chrome/browser/resources/local_ntp_resources.grd": {
"includes": [12440],
},
+ "chrome/browser/resources/md_extensions/extensions_resources_vulcanized.grd": {
+ "includes": [12500],
+ },
"chrome/browser/resources/md_extensions/extensions_resources.grd": {
- "structures": [12450],
+ "structures": [12510],
},
"chrome/browser/resources/net_internals_resources.grd": {
- "includes": [12540],
+ "includes": [12600],
},
"chrome/browser/resources/print_preview/print_preview_resources_vulcanized.grd": {
- "includes": [12550],
+ "includes": [12610],
},
"chrome/browser/resources/print_preview/print_preview_resources.grd": {
- "structures": [12560],
+ "structures": [12620],
},
"chrome/browser/resources/quota_internals_resources.grd": {
- "includes": [12750],
+ "includes": [12810],
},
"chrome/browser/resources/settings/settings_resources_vulcanized.grd": {
- "includes": [12770],
+ "includes": [12830],
},
"chrome/browser/resources/settings/settings_resources.grd": {
- "structures": [12780],
+ "structures": [12840],
},
"chrome/browser/resources/sync_file_system_internals_resources.grd": {
- "includes": [13280],
+ "includes": [13340],
},
"chrome/browser/resources/task_scheduler_internals/resources.grd": {
- "includes": [13310],
+ "includes": [13360],
},
"chrome/browser/resources/translate_internals_resources.grd": {
- "includes": [13320],
+ "includes": [13370],
},
"chrome/browser/resources/webapks_ui_resources.grd": {
- "includes": [13340],
+ "includes": [13380],
+ },
+ "chrome/browser/resources/welcome/onboarding_welcome/onboarding_welcome_resources.grd": {
+ "includes": [13390],
+ "structures": [13440],
},
"chrome/browser/vr/testapp/vr_testapp_resources.grd": {
- "includes": [13350],
+ "includes": [13480],
},
# END chrome/browser section.
# START chrome/ miscellaneous section.
"chrome/common/common_resources.grd": {
- "includes": [13380],
+ "includes": [13650],
},
"chrome/credential_provider/gaiacp/gaia_resources.grd": {
- "includes": [13400],
- "messages": [13410],
+ "includes": [13670],
+ "messages": [13680],
},
"chrome/renderer/resources/renderer_resources.grd": {
- "includes": [13500],
- "structures": [13600],
+ "includes": [13720],
+ "structures": [13830],
},
"chrome/test/data/webui_test_resources.grd": {
- "includes": [13650],
+ "includes": [13870],
},
# END chrome/ miscellaneous section.
@@ -162,10 +169,6 @@
# END chromeos/ section.
# START components/ section.
- "components/autofill/android/autofill_strings.grd": {
- "messages": [15000],
- },
-
"components/chrome_apps/chrome_apps_resources.grd": {
"includes": [15020],
},
@@ -289,139 +292,134 @@
"messages": [23510],
},
+ "ash/app_list/resources/app_list_resources.grd": {
+ "structures": [23520],
+ },
"ash/ash_strings.grd": {
- "messages": [23520],
+ "messages": [23530],
},
"ash/components/ash_components_strings.grd": {
- "messages": [24050],
+ "messages": [24100],
},
"ash/components/resources/ash_components_resources.grd": {
- "structures": [24250],
+ "structures": [24350],
+ },
+ "ash/login/resources/login_resources.grd": {
+ "structures": [24360],
},
"ash/public/cpp/resources/ash_public_unscaled_resources.grd": {
- "includes": [24260],
+ "includes": [24370],
},
"ash/shell/ash_shell_resources.grd": {
- "includes": [24290],
+ "includes": [24380],
},
+
"chromecast/browser/cast_browser_resources.grd": {
- "includes": [24300],
+ "includes": [24400],
+ },
+ "chromecast/renderer/resources/extensions_renderer_resources.grd": {
+ "includes": [24410],
},
"cloud_print/virtual_driver/win/install/virtual_driver_setup_resources.grd": {
- "includes": [24350],
- "messages": [24360],
+ "includes": [24450],
+ "messages": [24460],
},
"device/bluetooth/bluetooth_strings.grd": {
- "messages": [24400],
+ "messages": [24500],
},
"device/fido/fido_strings.grd": {
- "messages": [24440],
+ "messages": [24540],
},
"extensions/browser/resources/extensions_browser_resources.grd": {
- "structures": [24450],
+ "structures": [24550],
},
"extensions/extensions_resources.grd": {
- "includes": [24460],
+ "includes": [24560],
},
"extensions/renderer/resources/extensions_renderer_resources.grd": {
- "includes": [24470],
- "structures": [24600],
+ "includes": [24570],
+ "structures": [24700],
},
"extensions/shell/app_shell_resources.grd": {
- "includes": [24610],
+ "includes": [24710],
},
"extensions/strings/extensions_strings.grd": {
- "messages": [24620],
+ "messages": [24720],
},
"headless/lib/resources/headless_lib_resources.grd": {
- "includes": [24700],
+ "includes": [24800],
},
"mojo/public/js/mojo_bindings_resources.grd": {
- "includes": [24750],
+ "includes": [24850],
},
"net/base/net_resources.grd": {
- "includes": [24760],
+ "includes": [24860],
},
"remoting/resources/remoting_strings.grd": {
- "messages": [24800],
+ "messages": [24900],
},
"third_party/blink/public/blink_image_resources.grd": {
- "structures": [25300],
+ "structures": [25400],
},
"third_party/blink/public/blink_resources.grd": {
- "includes": [25400],
+ "includes": [25500],
},
"third_party/blink/renderer/modules/media_controls/resources/media_controls_resources.grd": {
- "includes": [25500],
- "structures": [25600],
+ "includes": [25600],
+ "structures": [25700],
},
"third_party/libaddressinput/chromium/address_input_strings.grd": {
- "messages": [25800],
- },
-
- "ash/app_list/resources/app_list_resources.grd": {
- "structures": [25900],
- },
-
- "ash/login/resources/login_resources.grd": {
- "structures": [25910],
+ "messages": [25900],
},
"ui/chromeos/resources/ui_chromeos_resources.grd": {
- "structures": [25920],
+ "structures": [26000],
},
"ui/chromeos/ui_chromeos_strings.grd": {
- "messages": [26020],
+ "messages": [26100],
},
"ui/file_manager/file_manager_resources.grd": {
- "includes": [26450],
+ "includes": [26550],
},
"ui/keyboard/keyboard_resources.grd": {
- "includes": [26700],
+ "includes": [26800],
},
"ui/login/login_resources.grd": {
- "includes": [26800],
+ "includes": [26900],
},
"ui/resources/ui_resources.grd": {
- "structures": [26900],
+ "structures": [27000],
},
"ui/resources/ui_unscaled_resources.grd": {
- "includes": [27150],
+ "includes": [27250],
},
"ui/strings/app_locale_settings.grd": {
- "messages": [27200],
+ "messages": [27300],
},
"ui/strings/ui_strings.grd": {
- "messages": [27250],
+ "messages": [27350],
},
"ui/views/resources/views_resources.grd": {
- "structures": [27450],
+ "structures": [27550],
},
"ui/webui/resources/webui_resources.grd": {
- "includes": [27750],
- "structures": [27950],
+ "includes": [27850],
+ "structures": [28050],
},
# This file is generated during the build.
"<(SHARED_INTERMEDIATE_DIR)/devtools/devtools_resources.grd": {
- "includes": [28750],
- },
- "devtools_resources.grd": {
- "includes": [28750],
- },
-
- "chromecast/renderer/resources/extensions_renderer_resources.grd": {
- "includes": [28900],
+ "includes": [28850],
},
# END "everything else" section.
diff --git a/chromium/tools/gritsettings/startup_resources_win.txt b/chromium/tools/gritsettings/startup_resources_win.txt
index 3c56a679f87..6477be1c94a 100644
--- a/chromium/tools/gritsettings/startup_resources_win.txt
+++ b/chromium/tools/gritsettings/startup_resources_win.txt
@@ -1,223 +1,210 @@
-IDR_MOJO_CONTENT_BROWSER_MANIFEST 101
-IDR_CHROME_CONTENT_BROWSER_MANIFEST_OVERLAY 102
-IDR_MOJO_CONTENT_GPU_MANIFEST 103
-IDR_CHROME_CONTENT_GPU_MANIFEST_OVERLAY 104
-IDR_MOJO_CONTENT_PACKAGED_SERVICES_MANIFEST 105
-IDR_CHROME_CONTENT_PACKAGED_SERVICES_MANIFEST_OVERLAY 106
-IDR_MOJO_CONTENT_PLUGIN_MANIFEST 107
-IDR_CHROME_CONTENT_PLUGIN_MANIFEST_OVERLAY 108
-IDR_MOJO_CONTENT_RENDERER_MANIFEST 109
-IDR_CHROME_CONTENT_RENDERER_MANIFEST_OVERLAY 110
-IDR_MOJO_CONTENT_UTILITY_MANIFEST 111
-IDR_CHROME_CONTENT_UTILITY_MANIFEST_OVERLAY 112
-IDR_MOJO_CATALOG_MANIFEST 113
-IDR_NACL_LOADER_MANIFEST 114
-IDR_NACL_BROKER_MANIFEST 115
-IDR_DOWNLOAD_FILE_TYPES_PB 116
-IDR_PLUGIN_DB_JSON 117
-IDS_DEFAULT_PROFILE_NAME 118
-IDS_LEGACY_DEFAULT_PROFILE_NAME 119
-IDS_ACCEPT_LANGUAGES 120
-IDS_DEFAULT_ENCODING 121
-IDS_STANDARD_FONT_FAMILY 122
-IDS_FIXED_FONT_FAMILY 123
-IDS_FIXED_FONT_FAMILY_ALT_WIN 124
-IDS_SERIF_FONT_FAMILY 125
-IDS_SANS_SERIF_FONT_FAMILY 126
-IDS_CURSIVE_FONT_FAMILY 127
-IDS_FANTASY_FONT_FAMILY 128
-IDS_PICTOGRAPH_FONT_FAMILY 129
-IDS_STANDARD_FONT_FAMILY_JAPANESE 130
-IDS_FIXED_FONT_FAMILY_JAPANESE 131
-IDS_SERIF_FONT_FAMILY_JAPANESE 132
-IDS_SANS_SERIF_FONT_FAMILY_JAPANESE 133
-IDS_STANDARD_FONT_FAMILY_KOREAN 134
-IDS_SERIF_FONT_FAMILY_KOREAN 135
-IDS_SANS_SERIF_FONT_FAMILY_KOREAN 136
-IDS_STANDARD_FONT_FAMILY_SIMPLIFIED_HAN 137
-IDS_SERIF_FONT_FAMILY_SIMPLIFIED_HAN 138
-IDS_SANS_SERIF_FONT_FAMILY_SIMPLIFIED_HAN 139
-IDS_STANDARD_FONT_FAMILY_TRADITIONAL_HAN 140
-IDS_SERIF_FONT_FAMILY_TRADITIONAL_HAN 141
-IDS_SANS_SERIF_FONT_FAMILY_TRADITIONAL_HAN 142
-IDS_CURSIVE_FONT_FAMILY_SIMPLIFIED_HAN 143
-IDS_CURSIVE_FONT_FAMILY_TRADITIONAL_HAN 144
-IDS_FIXED_FONT_FAMILY_ARABIC 145
-IDS_SANS_SERIF_FONT_FAMILY_ARABIC 146
-IDS_STANDARD_FONT_FAMILY_CYRILLIC 147
-IDS_FIXED_FONT_FAMILY_CYRILLIC 148
-IDS_SERIF_FONT_FAMILY_CYRILLIC 149
-IDS_SANS_SERIF_FONT_FAMILY_CYRILLIC 150
-IDS_STANDARD_FONT_FAMILY_GREEK 151
-IDS_FIXED_FONT_FAMILY_GREEK 152
-IDS_SERIF_FONT_FAMILY_GREEK 153
-IDS_SANS_SERIF_FONT_FAMILY_GREEK 154
-IDS_FIXED_FONT_FAMILY_KOREAN 155
-IDS_CURSIVE_FONT_FAMILY_KOREAN 156
-IDS_FIXED_FONT_FAMILY_SIMPLIFIED_HAN 157
-IDS_FIXED_FONT_FAMILY_TRADITIONAL_HAN 158
-IDS_DEFAULT_FONT_SIZE 159
-IDS_DEFAULT_FIXED_FONT_SIZE 160
-IDS_MINIMUM_FONT_SIZE 161
-IDS_MINIMUM_LOGICAL_FONT_SIZE 162
-IDS_SPELLCHECK_DICTIONARY 163
-IDR_PREF_HASH_SEED_BIN 164
-IDS_POLICY_VALUE_FORMAT_ERROR 165
-IDS_POLICY_LIST_ENTRY_ERROR 166
-IDS_BOOKMARK_BAR_FOLDER_NAME 167
-IDS_BOOKMARK_BAR_OTHER_FOLDER_NAME 168
-IDS_BOOKMARK_BAR_MOBILE_FOLDER_NAME 169
-IDS_PRODUCT_NAME 170
-IDS_PROFILES_DEFAULT_NAME 171
-IDR_BOOKMARKS_MANIFEST 172
-IDR_CLOUDPRINT_MANIFEST 173
-IDS_WEBSTORE_APP_DESCRIPTION 174
-IDS_WEBSTORE_NAME_STORE 175
-IDR_WEBSTORE_MANIFEST 176
-IDR_HANGOUT_SERVICES_MANIFEST 177
-IDR_FEEDBACK_MANIFEST 178
-IDR_NETWORK_SPEECH_SYNTHESIS_MANIFEST 179
-IDR_CRYPTOTOKEN_MANIFEST 180
-IDR_PDF_MANIFEST 181
-IDS_CHROME_WELCOME_URL 182
-IDS_NEW_TAB_CHROME_WELCOME_PAGE_TITLE 183
-IDS_WEBSTORE_URL 184
-IDS_EXTENSION_WEB_STORE_TITLE 185
-IDR_EXTENSIONS_FAVICON 186
-IDS_BOOKMARK_BAR_MANAGED_FOLDER_DEFAULT_NAME 187
-IDS_BOOKMARK_BAR_SUPERVISED_FOLDER_DEFAULT_NAME 188
-IDS_CRASH_RECOVERY_TITLE 189
-IDS_CRASH_RECOVERY_CONTENT 190
-IDR_CONTENT_RIGHT_SIDE 191
-IDR_CONTENT_BOTTOM_CENTER 192
-IDR_CONTENT_LEFT_SIDE 193
-IDS_UI_FONT_FAMILY 194
-IDS_UI_FONT_SIZE_SCALER 195
-IDS_MINIMUM_UI_FONT_SIZE 196
-IDS_APP_COPY 197
-IDS_APP_SELECT_ALL 198
-IDR_TEXTBUTTON_HOVER_TOP_LEFT 199
-IDR_TEXTBUTTON_HOVER_TOP 200
-IDR_TEXTBUTTON_HOVER_TOP_RIGHT 201
-IDR_TEXTBUTTON_HOVER_LEFT 202
-IDR_TEXTBUTTON_HOVER_CENTER 203
-IDR_TEXTBUTTON_HOVER_RIGHT 204
-IDR_TEXTBUTTON_HOVER_BOTTOM_LEFT 205
-IDR_TEXTBUTTON_HOVER_BOTTOM 206
-IDR_TEXTBUTTON_HOVER_BOTTOM_RIGHT 207
-IDR_TEXTBUTTON_PRESSED_TOP_LEFT 208
-IDR_TEXTBUTTON_PRESSED_TOP 209
-IDR_TEXTBUTTON_PRESSED_TOP_RIGHT 210
-IDR_TEXTBUTTON_PRESSED_LEFT 211
-IDR_TEXTBUTTON_PRESSED_CENTER 212
-IDR_TEXTBUTTON_PRESSED_RIGHT 213
-IDR_TEXTBUTTON_PRESSED_BOTTOM_LEFT 214
-IDR_TEXTBUTTON_PRESSED_BOTTOM 215
-IDR_TEXTBUTTON_PRESSED_BOTTOM_RIGHT 216
-IDR_AVATAR_GLASS_BUTTON_NORMAL_TOP_LEFT 217
-IDR_AVATAR_GLASS_BUTTON_NORMAL_TOP 218
-IDR_AVATAR_GLASS_BUTTON_NORMAL_TOP_RIGHT 219
-IDR_AVATAR_GLASS_BUTTON_NORMAL_LEFT 220
-IDR_AVATAR_GLASS_BUTTON_NORMAL_CENTER 221
-IDR_AVATAR_GLASS_BUTTON_NORMAL_RIGHT 222
-IDR_AVATAR_GLASS_BUTTON_NORMAL_BOTTOM_LEFT 223
-IDR_AVATAR_GLASS_BUTTON_NORMAL_BOTTOM 224
-IDR_AVATAR_GLASS_BUTTON_NORMAL_BOTTOM_RIGHT 225
-IDR_AVATAR_GLASS_BUTTON_HOVER_TOP_LEFT 226
-IDR_AVATAR_GLASS_BUTTON_HOVER_TOP 227
-IDR_AVATAR_GLASS_BUTTON_HOVER_TOP_RIGHT 228
-IDR_AVATAR_GLASS_BUTTON_HOVER_LEFT 229
-IDR_AVATAR_GLASS_BUTTON_HOVER_CENTER 230
-IDR_AVATAR_GLASS_BUTTON_HOVER_RIGHT 231
-IDR_AVATAR_GLASS_BUTTON_HOVER_BOTTOM_LEFT 232
-IDR_AVATAR_GLASS_BUTTON_HOVER_BOTTOM 233
-IDR_AVATAR_GLASS_BUTTON_HOVER_BOTTOM_RIGHT 234
-IDR_AVATAR_GLASS_BUTTON_PRESSED_TOP_LEFT 235
-IDR_AVATAR_GLASS_BUTTON_PRESSED_TOP 236
-IDR_AVATAR_GLASS_BUTTON_PRESSED_TOP_RIGHT 237
-IDR_AVATAR_GLASS_BUTTON_PRESSED_LEFT 238
-IDR_AVATAR_GLASS_BUTTON_PRESSED_CENTER 239
-IDR_AVATAR_GLASS_BUTTON_PRESSED_RIGHT 240
-IDR_AVATAR_GLASS_BUTTON_PRESSED_BOTTOM_LEFT 241
-IDR_AVATAR_GLASS_BUTTON_PRESSED_BOTTOM 242
-IDR_AVATAR_GLASS_BUTTON_PRESSED_BOTTOM_RIGHT 243
-IDR_AVATAR_GLASS_BUTTON_AVATAR 244
-IDS_TOOLTIP_NEW_TAB 245
-IDS_ACCNAME_NEWTAB 246
-IDR_TAB_DROP_DOWN 247
-IDS_TOOLTIP_BACK 248
-IDS_ACCNAME_BACK 249
-IDS_TOOLTIP_FORWARD 250
-IDS_ACCNAME_FORWARD 251
-IDS_RELOAD_MENU_NORMAL_RELOAD_ITEM 252
-IDS_RELOAD_MENU_HARD_RELOAD_ITEM 253
-IDS_RELOAD_MENU_EMPTY_AND_HARD_RELOAD_ITEM 254
-IDS_ACCNAME_RELOAD 255
-IDS_TOOLTIP_HOME 256
-IDS_ACCNAME_HOME 257
-IDR_DEVELOPER_MODE_HIGHLIGHT_TOP_LEFT 258
-IDR_DEVELOPER_MODE_HIGHLIGHT_TOP 259
-IDR_DEVELOPER_MODE_HIGHLIGHT_TOP_RIGHT 260
-IDR_DEVELOPER_MODE_HIGHLIGHT_LEFT 261
-IDR_DEVELOPER_MODE_HIGHLIGHT_CENTER 262
-IDR_DEVELOPER_MODE_HIGHLIGHT_RIGHT 263
-IDR_DEVELOPER_MODE_HIGHLIGHT_BOTTOM_LEFT 264
-IDR_DEVELOPER_MODE_HIGHLIGHT_BOTTOM 265
-IDR_DEVELOPER_MODE_HIGHLIGHT_BOTTOM_RIGHT 266
-IDR_MENU_DROPARROW 267
-IDS_ACCNAME_APP 268
-IDS_APPMENU_TOOLTIP 269
-IDS_APP_TAB_KEY 270
-IDS_REGISTER_PROTOCOL_HANDLER_TOOLTIP 271
-IDS_TOOLTIP_SAVE_CREDIT_CARD 272
-IDS_TOOLTIP_TRANSLATE 273
-IDS_TOOLTIP_STAR 274
-IDS_DEFAULT_TAB_TITLE 275
-IDS_BROWSER_WINDOW_TITLE_FORMAT 276
-IDR_DEFAULT_FAVICON 277
-IDS_NEW_TAB_TITLE 278
-IDS_ACCNAME_CLOSE 279
-IDS_ACCNAME_BOOKMARKS_CHEVRON 280
-IDS_BOOKMARK_BAR_APPS_SHORTCUT_NAME 281
-IDS_BOOKMARK_BAR_APPS_SHORTCUT_TOOLTIP 282
-IDR_BOOKMARK_BAR_APPS_SHORTCUT 283
-IDS_BOOKMARKS_NO_ITEMS 284
-IDS_BOOKMARK_BAR_IMPORT_LINK 285
+IDS_DEFAULT_PROFILE_NAME 101
+IDS_LEGACY_DEFAULT_PROFILE_NAME 102
+IDR_MOJO_CONTENT_BROWSER_MANIFEST 103
+IDR_CHROME_CONTENT_BROWSER_MANIFEST_OVERLAY 104
+IDR_MOJO_CONTENT_GPU_MANIFEST 105
+IDR_CHROME_CONTENT_GPU_MANIFEST_OVERLAY 106
+IDR_MOJO_CONTENT_PACKAGED_SERVICES_MANIFEST 107
+IDR_CHROME_CONTENT_PACKAGED_SERVICES_MANIFEST_OVERLAY 108
+IDR_MOJO_CONTENT_PLUGIN_MANIFEST 109
+IDR_CHROME_CONTENT_PLUGIN_MANIFEST_OVERLAY 110
+IDR_MOJO_CONTENT_RENDERER_MANIFEST 111
+IDR_CHROME_CONTENT_RENDERER_MANIFEST_OVERLAY 112
+IDR_MOJO_CONTENT_UTILITY_MANIFEST 113
+IDR_CHROME_CONTENT_UTILITY_MANIFEST_OVERLAY 114
+IDR_MOJO_CATALOG_MANIFEST 115
+IDR_NACL_LOADER_MANIFEST 116
+IDR_NACL_BROKER_MANIFEST 117
+IDR_PDF_COMPOSITOR_MANIFEST 118
+IDR_CHROME_RENDERER_SERVICE_MANIFEST 119
+IDR_DOWNLOAD_FILE_TYPES_PB 120
+IDR_PLUGIN_DB_JSON 121
+IDS_ACCEPT_LANGUAGES 122
+IDS_DEFAULT_ENCODING 123
+IDS_STANDARD_FONT_FAMILY 124
+IDS_FIXED_FONT_FAMILY 125
+IDS_FIXED_FONT_FAMILY_ALT_WIN 126
+IDS_SERIF_FONT_FAMILY 127
+IDS_SANS_SERIF_FONT_FAMILY 128
+IDS_CURSIVE_FONT_FAMILY 129
+IDS_FANTASY_FONT_FAMILY 130
+IDS_PICTOGRAPH_FONT_FAMILY 131
+IDS_STANDARD_FONT_FAMILY_JAPANESE 132
+IDS_FIXED_FONT_FAMILY_JAPANESE 133
+IDS_SERIF_FONT_FAMILY_JAPANESE 134
+IDS_SANS_SERIF_FONT_FAMILY_JAPANESE 135
+IDS_STANDARD_FONT_FAMILY_KOREAN 136
+IDS_SERIF_FONT_FAMILY_KOREAN 137
+IDS_SANS_SERIF_FONT_FAMILY_KOREAN 138
+IDS_STANDARD_FONT_FAMILY_SIMPLIFIED_HAN 139
+IDS_SERIF_FONT_FAMILY_SIMPLIFIED_HAN 140
+IDS_SANS_SERIF_FONT_FAMILY_SIMPLIFIED_HAN 141
+IDS_STANDARD_FONT_FAMILY_TRADITIONAL_HAN 142
+IDS_SERIF_FONT_FAMILY_TRADITIONAL_HAN 143
+IDS_SANS_SERIF_FONT_FAMILY_TRADITIONAL_HAN 144
+IDS_CURSIVE_FONT_FAMILY_SIMPLIFIED_HAN 145
+IDS_CURSIVE_FONT_FAMILY_TRADITIONAL_HAN 146
+IDS_FIXED_FONT_FAMILY_ARABIC 147
+IDS_SANS_SERIF_FONT_FAMILY_ARABIC 148
+IDS_STANDARD_FONT_FAMILY_CYRILLIC 149
+IDS_FIXED_FONT_FAMILY_CYRILLIC 150
+IDS_SERIF_FONT_FAMILY_CYRILLIC 151
+IDS_SANS_SERIF_FONT_FAMILY_CYRILLIC 152
+IDS_STANDARD_FONT_FAMILY_GREEK 153
+IDS_FIXED_FONT_FAMILY_GREEK 154
+IDS_SERIF_FONT_FAMILY_GREEK 155
+IDS_SANS_SERIF_FONT_FAMILY_GREEK 156
+IDS_FIXED_FONT_FAMILY_KOREAN 157
+IDS_CURSIVE_FONT_FAMILY_KOREAN 158
+IDS_FIXED_FONT_FAMILY_SIMPLIFIED_HAN 159
+IDS_FIXED_FONT_FAMILY_TRADITIONAL_HAN 160
+IDS_DEFAULT_FONT_SIZE 161
+IDS_DEFAULT_FIXED_FONT_SIZE 162
+IDS_MINIMUM_FONT_SIZE 163
+IDS_MINIMUM_LOGICAL_FONT_SIZE 164
+IDS_SPELLCHECK_DICTIONARY 165
+IDS_BOOKMARK_BAR_FOLDER_NAME 166
+IDS_BOOKMARK_BAR_OTHER_FOLDER_NAME 167
+IDS_BOOKMARK_BAR_MOBILE_FOLDER_NAME 168
+IDS_PRODUCT_NAME 169
+IDS_PROFILES_DEFAULT_NAME 170
+IDR_CLOUDPRINT_MANIFEST 171
+IDS_WEBSTORE_APP_DESCRIPTION 172
+IDS_WEBSTORE_NAME_STORE 173
+IDR_WEBSTORE_MANIFEST 174
+IDR_CRYPTOTOKEN_MANIFEST 175
+IDR_PDF_MANIFEST 176
+IDS_VERSION_UI_UNOFFICIAL 177
+IDS_CRASH_RECOVERY_TITLE 178
+IDS_CRASH_RECOVERY_CONTENT 179
+IDS_BOOKMARK_BAR_MANAGED_FOLDER_DEFAULT_NAME 180
+IDS_APP_ACCNAME_MINIMIZE 181
+IDS_APP_ACCNAME_MAXIMIZE 182
+IDS_APP_ACCNAME_RESTORE 183
+IDS_APP_ACCNAME_CLOSE 184
+IDS_TOOLTIP_NEW_TAB 185
+IDS_ACCNAME_NEWTAB 186
+IDR_TAB_DROP_DOWN 187
+IDS_UI_FONT_FAMILY 188
+IDS_UI_FONT_SIZE_SCALER 189
+IDS_MINIMUM_UI_FONT_SIZE 190
+IDS_APP_COPY 191
+IDS_APP_SELECT_ALL 192
+IDS_TOOLTIP_BACK 193
+IDS_ACCNAME_BACK 194
+IDS_ACCDESCRIPTION_BACK 195
+IDS_TOOLTIP_FORWARD 196
+IDS_ACCNAME_FORWARD 197
+IDS_ACCDESCRIPTION_FORWARD 198
+IDS_RELOAD_MENU_NORMAL_RELOAD_ITEM 199
+IDS_RELOAD_MENU_HARD_RELOAD_ITEM 200
+IDS_RELOAD_MENU_EMPTY_AND_HARD_RELOAD_ITEM 201
+IDS_ACCNAME_RELOAD 202
+IDS_TOOLTIP_HOME 203
+IDS_ACCNAME_HOME 204
+IDS_MEDIA_ROUTER_ABOUT 205
+IDS_LEARN_MORE 206
+IDS_MEDIA_ROUTER_HELP 207
+IDS_MEDIA_ROUTER_ALWAYS_SHOW_TOOLBAR_ACTION 208
+IDS_MEDIA_ROUTER_TOGGLE_MEDIA_REMOTING 209
+IDS_MEDIA_ROUTER_CLOUD_SERVICES_TOGGLE 210
+IDS_MEDIA_ROUTER_REPORT_ISSUE 211
+IDS_MEDIA_ROUTER_ICON_TOOLTIP_TEXT 212
+IDS_GENERIC_USER_AVATAR_LABEL 213
+IDS_ACCNAME_APP 214
+IDS_APPMENU_TOOLTIP 215
+IDS_OMNIBOX_PLACEHOLDER_TEXT 216
+IDS_AUTOCOMPLETE_MATCH_DESCRIPTION_SEPARATOR 217
+IDS_REGISTER_PROTOCOL_HANDLER_TOOLTIP 218
+IDS_OMNIBOX_CLEAR_ALL 219
+IDS_EMPTY_KEYWORD_VALUE 220
+IDS_DEFAULT_TAB_TITLE 221
+IDS_BROWSER_WINDOW_TITLE_FORMAT 222
+IDS_EXTENSION_WEB_STORE_TITLE_SHORT 223
+IDS_WEBSTORE_URL 224
+IDS_NTP_CONFIRM_MSG_SHORTCUT_REMOVED 225
+IDS_NEW_TAB_REMOVE_THUMBNAIL_TOOLTIP 226
+IDS_NEW_TAB_UNDO_THUMBNAIL_REMOVE 227
+IDS_NEW_TAB_RESTORE_THUMBNAILS_SHORT_LINK 228
+IDS_NEW_TAB_ATTRIBUTION_INTRO 229
+IDS_NEW_TAB_TITLE 230
+IDS_NEW_TAB_MOST_VISITED 231
+IDS_GOOGLE_SEARCH_BOX_EMPTY_HINT_MD 232
+IDS_NTP_CUSTOM_BG_CUSTOMIZE_BACKGROUND 233
+IDS_NTP_CUSTOM_BG_GOOGLE_PHOTOS 234
+IDS_NTP_CUSTOM_BG_CHROME_WALLPAPERS 235
+IDS_NTP_CUSTOM_BG_UPLOAD_AN_IMAGE 236
+IDS_NTP_CUSTOM_BG_RESTORE_DEFAULT 237
+IDS_NTP_CUSTOM_BG_SELECT_A_COLLECTION 238
+IDS_NTP_CUSTOM_BG_DAILY_REFRESH 239
+IDS_NTP_CUSTOM_LINKS_DONE 240
+IDS_NTP_CUSTOM_BG_CANCEL 241
+IDS_NTP_CUSTOM_BG_SELECT_GOOGLE_ALBUM 242
+IDS_NTP_CONNECTION_ERROR_NO_PERIOD 243
+IDS_NTP_CONNECTION_ERROR 244
+IDS_NTP_ERROR_MORE_INFO 245
+IDS_NTP_CUSTOM_BG_BACKGROUNDS_UNAVAILABLE 246
+IDS_NTP_CUSTOM_BG_CUSTOMIZE_NTP_LABEL 247
+IDS_NTP_CUSTOM_BG_BACK_LABEL 248
+IDS_NTP_CUSTOM_BG_GOOGLE_PHOTO_LABEL 249
+IDS_NTP_CUSTOM_BG_PHOTO_SELECTED 250
+IDS_NTP_CUSTOM_LINKS_ADD_SHORTCUT_TITLE 251
+IDS_NTP_CUSTOM_LINKS_ADD_SHORTCUT_TOOLTIP 252
+IDS_NTP_CUSTOM_LINKS_EDIT_SHORTCUT 253
+IDS_NTP_CUSTOM_LINKS_EDIT_SHORTCUT_TOOLTIP 254
+IDS_NTP_CUSTOM_LINKS_NAME 255
+IDS_NTP_CUSTOM_LINKS_URL 256
+IDS_NTP_CUSTOM_LINKS_REMOVE 257
+IDS_NTP_CUSTOM_LINKS_CANCEL 258
+IDS_NTP_CUSTOM_LINKS_INVALID_URL 259
+IDS_NTP_CONFIRM_MSG_SHORTCUT_EDITED 260
+IDS_NTP_CONFIRM_MSG_SHORTCUT_ADDED 261
+IDS_NTP_CONFIRM_MSG_RESTORE_DEFAULTS 262
+IDS_NTP_CUSTOM_LINKS_CANT_CREATE 263
+IDS_NTP_CUSTOM_LINKS_CANT_EDIT 264
+IDS_NTP_CUSTOM_LINKS_CANT_REMOVE 265
+IDS_NEW_TAB_VOICE_AUDIO_ERROR 266
+IDS_NEW_TAB_VOICE_DETAILS 267
+IDS_CLICK_TO_VIEW_DOODLE 268
+IDS_TOOLTIP_MIC_SEARCH 269
+IDS_NEW_TAB_VOICE_LANGUAGE_ERROR 270
+IDS_NEW_TAB_VOICE_LISTENING 271
+IDS_NEW_TAB_VOICE_NETWORK_ERROR 272
+IDS_NEW_TAB_VOICE_NO_TRANSLATION 273
+IDS_NEW_TAB_VOICE_NO_VOICE 274
+IDS_NEW_TAB_VOICE_PERMISSION_ERROR 275
+IDS_NEW_TAB_VOICE_READY 276
+IDS_NEW_TAB_VOICE_TRY_AGAIN 277
+IDS_NEW_TAB_VOICE_WAITING 278
+IDS_NEW_TAB_VOICE_OTHER_ERROR 279
+IDR_DEFAULT_FAVICON 280
+IDS_ACCNAME_CLOSE 281
+IDS_BOOKMARK_BAR_APPS_SHORTCUT_NAME 282
+IDS_BOOKMARK_BAR_APPS_SHORTCUT_TOOLTIP 283
+IDR_BOOKMARK_BAR_APPS_SHORTCUT 284
+IDS_ACCNAME_BOOKMARKS_CHEVRON 285
IDR_BOOKMARK_BAR_FOLDER 286
IDR_BOOKMARK_BAR_FOLDER_MANAGED 287
-IDR_BOOKMARK_BAR_FOLDER_SUPERVISED 288
+IDR_SSL_ERROR_ASSISTANT_PB 288
IDS_WEB_FONT_SIZE 289
IDS_WEB_FONT_FAMILY 290
-IDS_DEFAULT_BROWSER_INFOBAR_SHORT_TEXT 291
-IDS_DEFAULT_BROWSER_INFOBAR_OK_BUTTON_LABEL 292
-IDR_CONTENT_BOTTOM_RIGHT_CORNER 293
-IDR_CONTENT_BOTTOM_LEFT_CORNER 294
-IDS_UTILITY_PROCESS_PROXY_RESOLVER_NAME 295
-IDS_UTILITY_PROCESS_MANIFEST_PARSER_NAME 296
-IDR_MOST_VISITED_SINGLE_HTML 297
-IDR_MOST_VISITED_SINGLE_CSS 298
-IDR_MOST_VISITED_SINGLE_JS 299
-IDR_NEWTAB_CHROME_WELCOME_PAGE_THUMBNAIL 300
-IDR_PRODUCT_LOGO_16 301
-IDR_NEWTAB_WEBSTORE_THUMBNAIL 302
-IDR_WEBSTORE_ICON_16 303
-IDR_CLOSE_3_MASK 304
-IDS_AUTOCOMPLETE_SEARCH_DESCRIPTION 305
-IDS_AUTOCOMPLETE_MATCH_DESCRIPTION_SEPARATOR 306
-IDS_UTILITY_PROCESS_EXTENSION_UNPACKER_NAME 307
-IDS_NEW_TAB_MOST_VISITED 308
-IDS_RECENTLY_CLOSED 309
-IDS_NEW_WINDOW 310
-IDS_NEW_INCOGNITO_WINDOW 311
-IDS_EXTENSION_USB_DEVICE_PRODUCT_NAME_AND_VENDOR 312
-IDS_APP_SHORTCUTS_SUBDIR_NAME 313
-IDR_LOCAL_NTP_HTML 314
-IDR_LOCAL_NTP_CSS 315
-IDS_NEW_TAB_THUMBNAIL_REMOVED_NOTIFICATION 316
-IDS_NEW_TAB_REMOVE_THUMBNAIL_TOOLTIP 317
-IDS_NEW_TAB_UNDO_THUMBNAIL_REMOVE 318
-IDS_NEW_TAB_RESTORE_THUMBNAILS_SHORT_LINK 319
-IDS_NEW_TAB_ATTRIBUTION_INTRO 320
-IDS_SEARCH_BOX_EMPTY_HINT 321
-IDR_LOCAL_NTP_JS 322
-IDR_ADDITIONAL_MODULE_IDS 323
+IDR_LOCAL_NTP_HTML 291
+IDS_LOAD_STATE_WAITING_FOR_DELEGATE_GENERIC 292
+IDS_UTILITY_PROCESS_PROXY_RESOLVER_NAME 293
+IDR_LOCAL_NTP_CSS 294
+IDR_LOCAL_NTP_VOICE_CSS 295
+IDR_LOCAL_NTP_CUSTOM_BACKGROUNDS_CSS 296
+IDR_LOCAL_NTP_CUSTOM_BACKGROUNDS_JS 297
+IDR_LOCAL_NTP_JS 298
+IDR_LOCAL_NTP_VOICE_JS 299
+IDR_MOST_VISITED_SINGLE_HTML 300
+IDR_CUSTOM_LINKS_EDIT_HTML 301
+IDR_MOST_VISITED_SINGLE_CSS 302
+IDR_MOST_VISITED_SINGLE_JS 303
+IDR_CUSTOM_LINKS_EDIT_CSS 304
+IDR_CUSTOM_LINKS_EDIT_JS 305
+IDR_WEBSTORE_ICON_32 306
+IDS_NTP_FONT_FAMILY 307
+IDR_CUSTOM_LINKS_EDIT_MENU_SVG 308
+IDR_CUSTOM_LINKS_ADD_SVG 309
+IDS_TOOLTIP_STARRED 310 \ No newline at end of file
diff --git a/chromium/tools/gritsettings/translation_expectations.pyl b/chromium/tools/gritsettings/translation_expectations.pyl
index 957e685783e..bc6da8279d0 100644
--- a/chromium/tools/gritsettings/translation_expectations.pyl
+++ b/chromium/tools/gritsettings/translation_expectations.pyl
@@ -20,9 +20,12 @@
"te", "th", "tr", "uk", "vi", "zh-CN", "zh-TW",
],
"files": [
+ "android_webview/java/strings/android_webview_strings.grd",
"android_webview/ui/aw_strings.grd",
"ash/ash_strings.grd",
"ash/components/ash_components_strings.grd",
+ "chrome/android/java/strings/android_chrome_strings.grd",
+ "chrome/android/webapk/strings/android_webapk_strings.grd",
"chrome/app/chromium_strings.grd",
"chrome/app/generated_resources.grd",
"chrome/app/google_chrome_strings.grd",
@@ -30,11 +33,14 @@
"chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings.grd",
"chrome/credential_provider/gaiacp/gaia_resources.grd",
"chromeos/chromeos_strings.grd",
+ "components/autofill/android/java/strings/autofill_strings.grd",
"components/components_chromium_strings.grd",
"components/components_google_chrome_strings.grd",
"components/components_strings.grd",
+ "components/embedder_support/android/java/strings/web_contents_delegate_android_strings.grd",
"components/policy/resources/policy_templates.grd",
"content/app/strings/content_strings.grd",
+ "content/public/android/java/strings/android_content_strings.grd",
"device/bluetooth/bluetooth_strings.grd",
"device/fido/fido_strings.grd",
"extensions/strings/extensions_strings.grd",
@@ -50,27 +56,11 @@
"remoting/resources/remoting_strings.grd",
"third_party/libaddressinput/chromium/address_input_strings.grd",
"ui/accessibility/extensions/strings/accessibility_extensions_strings.grd",
+ "ui/android/java/strings/android_ui_strings.grd",
"ui/chromeos/ui_chromeos_strings.grd",
"ui/strings/ui_strings.grd",
],
},
- "android_grds": {
- "languages": [
- "am", "ar", "bg", "ca", "cs", "da", "de", "el", "en-GB", "es", "es-419",
- "fa", "fi", "fil", "fr", "hi", "hr", "hu", "id", "it", "iw", "ja", "ko",
- "lt", "lv", "nl", "no", "pl", "pt-BR", "pt-PT", "ro", "ru", "sk", "sl",
- "sr", "sv", "sw", "th", "tr", "uk", "vi", "zh-CN", "zh-TW",
- ],
- "files": [
- "android_webview/java/strings/android_webview_strings.grd",
- "chrome/android/java/strings/android_chrome_strings.grd",
- "chrome/android/webapk/strings/android_webapk_strings.grd",
- "components/autofill/android/java/strings/autofill_strings.grd",
- "components/embedder_support/android/java/strings/web_contents_delegate_android_strings.grd",
- "content/public/android/java/strings/android_content_strings.grd",
- "ui/android/java/strings/android_ui_strings.grd",
- ],
- },
# Grd files that contain <message> or <translations> elements, but that
# shouldn't be translated as part of the normal translation process. Each
# entry needs an explanation for why it shouldn't be translated.
diff --git a/chromium/tools/idl_parser/idl_parser.py b/chromium/tools/idl_parser/idl_parser.py
index 028170cc03d..97c2e1d0ac5 100755
--- a/chromium/tools/idl_parser/idl_parser.py
+++ b/chromium/tools/idl_parser/idl_parser.py
@@ -932,10 +932,12 @@ class IDLParser(object):
p[0] = self.BuildProduction('UnionType', p, 1, members)
def p_UnionMemberType(self, p):
- """UnionMemberType : NonAnyType
+ """UnionMemberType : ExtendedAttributeList NonAnyType
| UnionType Null"""
- if len(p) == 2:
- p[0] = self.BuildProduction('Type', p, 1, p[1])
+ if p[1] is None:
+ p[0] = self.BuildProduction('Type', p, 1, p[2])
+ elif p[1].GetClass() == 'ExtAttributes':
+ p[0] = self.BuildProduction('Type', p, 1, ListFromConcat(p[2], p[1]))
else:
p[0] = self.BuildProduction('Type', p, 1, ListFromConcat(p[1], p[2]))
diff --git a/chromium/tools/idl_parser/test_parser/typedef_web.idl b/chromium/tools/idl_parser/test_parser/typedef_web.idl
index 7ba169fc8f9..177e7ab6341 100644
--- a/chromium/tools/idl_parser/test_parser/typedef_web.idl
+++ b/chromium/tools/idl_parser/test_parser/typedef_web.idl
@@ -165,3 +165,18 @@ typedef record<ByteString, int> MyRecord;
* Error(Unexpected keyword "double" after "<".)
*/
typedef record<double, ByteString> MyInvalidRecord;
+
+/** TREE
+ *Typedef(MyAnnotationInUnion)
+ * Type()
+ * UnionType()
+ * Type()
+ * StringType(DOMString)
+ * ExtAttributes()
+ * ExtAttribute(TreatNullAs) = "EmptyString"
+ * Type()
+ * PrimitiveType(long)
+ * ExtAttributes()
+ * ExtAttribute(Clamp)
+ */
+typedef ([TreatNullAs=EmptyString] DOMString or [Clamp] long) MyAnnotationInUnion;
diff --git a/chromium/tools/ipc_fuzzer/fuzzer/fuzzer.cc b/chromium/tools/ipc_fuzzer/fuzzer/fuzzer.cc
index af3ba54820b..f7ff72090a2 100644
--- a/chromium/tools/ipc_fuzzer/fuzzer/fuzzer.cc
+++ b/chromium/tools/ipc_fuzzer/fuzzer/fuzzer.cc
@@ -9,6 +9,7 @@
#include <utility>
#include <vector>
+#include "base/compiler_specific.h"
#include "base/macros.h"
#include "base/memory/ptr_util.h"
#include "base/memory/shared_memory_handle.h"
@@ -33,14 +34,6 @@
#include "tools/ipc_fuzzer/message_lib/all_messages.h"
#include "tools/ipc_fuzzer/message_lib/all_message_null_macros.h"
-#if defined(COMPILER_GCC)
-#define PRETTY_FUNCTION __PRETTY_FUNCTION__
-#elif defined(COMPILER_MSVC)
-#define PRETTY_FUNCTION __FUNCSIG__
-#else
-#define PRETTY_FUNCTION __FUNCTION__
-#endif
-
namespace IPC {
class Message;
} // namespace IPC
diff --git a/chromium/tools/ipc_fuzzer/scripts/play_testcase.py b/chromium/tools/ipc_fuzzer/scripts/play_testcase.py
index bac348b5fca..dd5b0e247a9 100644
--- a/chromium/tools/ipc_fuzzer/scripts/play_testcase.py
+++ b/chromium/tools/ipc_fuzzer/scripts/play_testcase.py
@@ -87,7 +87,6 @@ def main():
prefixes = {
'--renderer-cmd-prefix',
- '--gpu-launcher',
'--plugin-launcher',
'--ppapi-plugin-launcher',
'--utility-cmd-prefix',
diff --git a/chromium/tools/ipc_fuzzer/scripts/utils.py b/chromium/tools/ipc_fuzzer/scripts/utils.py
index 24c3285dcd6..3f1984598a3 100644
--- a/chromium/tools/ipc_fuzzer/scripts/utils.py
+++ b/chromium/tools/ipc_fuzzer/scripts/utils.py
@@ -17,11 +17,13 @@ FUZZ_PREFIX = 'fuzz-'
IPC_FUZZER_APPLICATION = 'ipc_fuzzer'
IPC_REPLAY_APPLICATION = 'ipc_fuzzer_replay'
IPCDUMP_EXTENSION = '.ipcdump'
-LAUNCH_PREFIXES = [
- '--gpu-launcher',
+UNCOMMON_PREFIX_CHANCE = 10 # 1 in 10
+COMMON_LAUNCH_PREFIXES = [
+ '--renderer-cmd-prefix',
+]
+UNCOMMON_LAUNCH_PEFIXES = [
'--plugin-launcher',
'--ppapi-plugin-launcher',
- '--renderer-cmd-prefix',
'--utility-cmd-prefix',
]
@@ -35,7 +37,10 @@ def application_name_for_platform(application_name):
def create_flags_file(ipcdump_testcase_path):
"""Create a flags file to add launch prefix to application command line."""
- random_launch_prefix = random.choice(LAUNCH_PREFIXES)
+ prefixes = (UNCOMMON_LAUNCH_PREFIXES if
+ random.randint(1, UNCOMMON_PREFIX_CHANCE) == 1 else
+ COMMON_LAUNCH_PREFIXES)
+ random_launch_prefix = random.choice(prefixes)
application_name = application_name_for_platform(IPC_REPLAY_APPLICATION)
file_content = '%s=%%APP_DIR%%%s%s' % (random_launch_prefix, os.path.sep,
application_name)
diff --git a/chromium/tools/json_schema_compiler/feature_compiler.py b/chromium/tools/json_schema_compiler/feature_compiler.py
index fbfcf575a59..34ccc31f369 100644
--- a/chromium/tools/json_schema_compiler/feature_compiler.py
+++ b/chromium/tools/json_schema_compiler/feature_compiler.py
@@ -192,10 +192,10 @@ FEATURE_GRAMMAR = (
list: {'subtype': unicode}
},
'max_manifest_version': {
- int: {'values': [1]}
+ int: {'values': [1, 2]}
},
'min_manifest_version': {
- int: {'values': [2]}
+ int: {'values': [2, 3]}
},
'noparent': {
bool: {'values': [True]}
diff --git a/chromium/tools/json_schema_compiler/js_util.py b/chromium/tools/json_schema_compiler/js_util.py
index 285ece1d3b7..5a23c862fef 100644
--- a/chromium/tools/json_schema_compiler/js_util.py
+++ b/chromium/tools/json_schema_compiler/js_util.py
@@ -182,7 +182,7 @@ class JsUtil(object):
# documentation, rather than if it's a private API. Most private APIs
# aren't documented, but some are. For example:
# - https://developer.chrome.com/apps/developerPrivate exists
- # - https://developer.chrome.com/apps/screenlockPrivate does not
+ # - https://developer.chrome.com/apps/mediaPlayerPrivate does not
if namespace_name.endswith('Private'):
return
diff --git a/chromium/tools/licenses.py b/chromium/tools/licenses.py
index f9c1ed55626..56eb9fa9b76 100755
--- a/chromium/tools/licenses.py
+++ b/chromium/tools/licenses.py
@@ -194,18 +194,15 @@ SPECIAL_CASES = {
"License": "Apache 2.0",
},
os.path.join('third_party', 'blink'): {
- "Name": "Blink",
- "URL": "https://wwww.chromium.org/",
- "License": "BSD and LGPL v2 and LGPL v2.1",
- # Absolute path here is resolved as relative to the source root.
- "License File": "/LICENSE",
- },
- os.path.join('third_party', 'WebKit'): {
+ # about:credits doesn't show "Blink" but "WebKit".
+ # Blink is a fork of WebKit, and Chromium project has maintained it
+ # since the fork. about:credits needs to mention the code before
+ # the fork.
"Name": "WebKit",
"URL": "http://webkit.org/",
"License": "BSD and LGPL v2 and LGPL v2.1",
# Absolute path here is resolved as relative to the source root.
- "License File": "/third_party/WebKit/LICENSE_FOR_ABOUT_CREDITS",
+ "License File": "/third_party/blink/LICENSE_FOR_ABOUT_CREDITS",
},
os.path.join('third_party', 'webpagereplay'): {
"Name": "webpagereplay",
@@ -281,7 +278,6 @@ KNOWN_NON_IOS_LIBRARIES = set([
os.path.join('chrome', 'test', 'data', 'third_party', 'spaceport'),
os.path.join('chrome', 'third_party', 'mock4js'),
os.path.join('chrome', 'third_party', 'mozilla_security_manager'),
- os.path.join('third_party', 'WebKit'),
os.path.join('third_party', 'angle'),
os.path.join('third_party', 'apple_apsl'),
os.path.join('third_party', 'apple_sample_code'),
diff --git a/chromium/tools/make-gtest-filter.py b/chromium/tools/make-gtest-filter.py
new file mode 100755
index 00000000000..22c0e1d7660
--- /dev/null
+++ b/chromium/tools/make-gtest-filter.py
@@ -0,0 +1,67 @@
+#!/usr/bin/env python
+# Copyright (c) 2018 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.
+"""Reads lines from files or stdin and identifies C++ tests.
+
+Outputs a filter that can be used with --gtest_filter to run only the tests
+identified.
+
+Usage:
+
+Outputs filter for all test fixtures in a directory. --class-only avoids an
+overly long filter string.
+> cat components/mycomp/**test.cc | make-gtest-filter.py --class-only
+
+Outputs filter for all tests in a file.
+> make-gtest-filter.py ./myfile_unittest.cc
+
+Outputs filter for only test at line 123
+> make-gtest-filter.py --line=123 ./myfile_unittest.cc
+"""
+
+import argparse
+import fileinput
+import re
+import sys
+
+parser = argparse.ArgumentParser()
+parser.add_argument('--line', type=int)
+parser.add_argument('--class-only', action='store_true')
+args, left = parser.parse_known_args()
+file_input = fileinput.input(left)
+
+if args.line:
+ # If --line is used, restrict text to a few lines around the requested
+ # line.
+ requested_line = args.line
+ selected_lines = []
+ for line in file_input:
+ if (fileinput.lineno() >= requested_line and
+ fileinput.lineno() <= requested_line + 1):
+ selected_lines.append(line)
+ txt = ''.join(selected_lines)
+else:
+ txt = ''.join(list(file_input))
+
+# This regex is not exhaustive, and should be updated as needed.
+rx = re.compile(
+ r'^(?:TYPED_)?(?:IN_PROC_BROWSER_)?TEST(_F|_P)?\(\s*(\w+)\s*,\s*(\w+)\s*\)',
+ flags=re.DOTALL | re.M)
+tests = []
+for m in rx.finditer(txt):
+ tests.append(m.group(2) + '.' + m.group(3))
+
+# Note: Test names have the following structures:
+# * FixtureName.TestName
+# * InstantiationName/FixtureName.TestName/##
+# Since this script doesn't parse instantiations, we generate filters to match
+# either regular tests or instantiated tests.
+if args.class_only:
+ fixtures = set([t.split('.')[0] for t in tests])
+ test_filters = [c + '.*' for c in fixtures]
+ instantiation_filters = ['*/' + c + '.*/*' for c in fixtures]
+ print ':'.join(test_filters + instantiation_filters)
+else:
+ instantiations = ['*/' + c + '/*' for c in tests]
+ print ':'.join(tests + instantiations)
diff --git a/chromium/tools/mb/mb.py b/chromium/tools/mb/mb.py
index 8260745c009..d6691464fbd 100755
--- a/chromium/tools/mb/mb.py
+++ b/chromium/tools/mb/mb.py
@@ -368,6 +368,7 @@ class MetaBuildWrapper(object):
self.PathJoin(self.chromium_src_dir, 'tools', 'swarming_client',
'isolate.py'),
'remap',
+ '--collapse_symlinks',
'-s', self.PathJoin(self.args.path, self.args.target + '.isolated'),
'-o', zip_dir
]
@@ -1047,6 +1048,17 @@ class MetaBuildWrapper(object):
# the last instance of each arg is listed.
gn_args = gn_helpers.ToGNString(gn_helpers.FromGNArgs(gn_args))
+ # If we're using the Simple Chrome SDK, add a comment at the top that
+ # points to the doc. This must happen after the gn_helpers.ToGNString()
+ # call above since gn_helpers strips comments.
+ if vals['cros_passthrough']:
+ simplechrome_comment = [
+ '# These args are generated via the Simple Chrome SDK. See the link',
+ '# below for more details:',
+ '# https://chromium.googlesource.com/chromiumos/docs/+/master/simple_chrome_workflow.md', # pylint: disable=line-too-long
+ ]
+ gn_args = '%s\n%s' % ('\n'.join(simplechrome_comment), gn_args)
+
args_file = vals.get('args_file', None)
if args_file:
gn_args = ('import("%s")\n' % vals['args_file']) + gn_args
@@ -1111,7 +1123,6 @@ class MetaBuildWrapper(object):
cmdline = [
'../../testing/xvfb.py',
'./' + str(executable) + executable_suffix,
- '--brave-new-test-launcher',
'--test-launcher-bot-mode',
'--asan=%d' % asan,
'--msan=%d' % msan,
@@ -1122,7 +1133,6 @@ class MetaBuildWrapper(object):
cmdline = [
'../../testing/test_env.py',
'./' + str(executable) + executable_suffix,
- '--brave-new-test-launcher',
'--test-launcher-bot-mode',
'--asan=%d' % asan,
'--msan=%d' % msan,
diff --git a/chromium/tools/mb/mb_config.pyl b/chromium/tools/mb/mb_config.pyl
index 564e402a573..6e44b0b2467 100644
--- a/chromium/tools/mb/mb_config.pyl
+++ b/chromium/tools/mb/mb_config.pyl
@@ -31,9 +31,9 @@
'mac-rel': 'release_bot_mac_strip',
'mac-dbg': 'debug_bot',
'win32-rel': 'release_bot_x86_minimal_symbols_enable_archive_compression',
- 'win32-dbg': 'debug_bot',
+ 'win32-dbg': 'debug_bot_x86_minimal_symbols',
'win-rel': 'release_bot_minimal_symbols_enable_archive_compression',
- 'win-dbg': 'debug_bot',
+ 'win-dbg': 'debug_bot_minimal_symbols',
},
'chromium.android': {
@@ -65,6 +65,7 @@
'android-cronet-x86-dbg': 'android_cronet_debug_static_bot_x86',
'android-cronet-x86-rel': 'android_cronet_release_bot_minimal_symbols_x86',
'android-incremental-dbg': 'android_incremental_debug_bot',
+ 'android-jumbo-rel': 'android_jumbo_release_bot_minimal_symbols',
'android-kitkat-arm-rel': 'android_release_bot_minimal_symbols',
'android-marshmallow-arm64-rel': 'android_release_bot_minimal_symbols_arm64',
},
@@ -118,7 +119,6 @@
'CrWinAsanCov': 'asan_clang_edge_fuzzer_static_v8_heap_minimal_symbols_release_tot',
'linux-win_cross-rel': 'clang_tot_win_release_cross',
- 'SafeStack Linux ToT': 'safestack_cfi_tot',
'ToTAndroid': 'android_clang_tot_release_minimal_symbols',
'ToTAndroid64': 'android_clang_tot_release_arm64',
'ToTAndroidASan': 'android_clang_tot_asan',
@@ -145,6 +145,7 @@
'ToTWin64': 'clang_tot_official_minimal_symbols_static_release',
'ToTWin64(dbg)': 'clang_tot_shared_debug',
'ToTWin64(dll)': 'clang_tot_shared_release_dcheck',
+ 'ToTWinASanLibfuzzer': 'libfuzzer_windows_asan_clang_tot_release_bot',
'ToTWinCFI': 'clang_tot_win_cfi_full_cfi_diag_thin_lto_release_static_dcheck_always_on_x86',
'ToTWinCFI64': 'clang_tot_win_cfi_full_cfi_diag_thin_lto_release_static_dcheck_always_on',
'ToTWinLibcxx64': 'clang_tot_official_optimize_minimal_symbols_static_release_libcxx',
@@ -153,6 +154,35 @@
'UBSanVptr Linux': 'ubsan_vptr_release_bot',
},
+ 'chromium.fuzz': {
+ 'ASAN Debug': 'asan_lsan_edge_debug_bot',
+ 'ASAN Release Media': 'asan_lsan_edge_fuzzer_v8_heap_chromeos_codecs_release_bot',
+ 'ASAN Release': 'asan_lsan_edge_fuzzer_v8_heap_release_bot',
+ 'ASan Debug (32-bit x86 with V8-ARM)': 'asan_edge_v8_heap_debug_bot_hybrid',
+ 'ASan Release (32-bit x86 with V8-ARM)': 'asan_edge_fuzzer_v8_heap_release_bot_hybrid',
+ 'ASan Release Media (32-bit x86 with V8-ARM)': 'asan_edge_fuzzer_v8_heap_chromeos_codecs_release_bot_hybrid',
+ 'Afl Upload Linux ASan': 'afl_asan_release_bot',
+ 'ChromiumOS ASAN Release': 'chromeos_asan_lsan_edge_fuzzer_v8_heap_release_bot',
+ 'Libfuzzer Upload Chrome OS ASan': 'libfuzzer_chromeos_asan_release_bot',
+ 'Libfuzzer Upload Linux ASan': 'libfuzzer_asan_release_bot',
+ 'Libfuzzer Upload Linux ASan Debug': 'libfuzzer_asan_debug_bot',
+ 'Libfuzzer Upload Linux MSan': 'libfuzzer_msan_release_bot',
+ 'Libfuzzer Upload Linux UBSan': 'libfuzzer_ubsan_release_bot',
+ 'Libfuzzer Upload Mac ASan': 'libfuzzer_mac_asan_release_bot',
+ 'Libfuzzer Upload Windows ASan': 'libfuzzer_windows_asan_release_bot',
+ 'MSAN Release (chained origins)': 'msan_edge_release_bot',
+ 'MSAN Release (no origins)': 'msan_no_origins_edge_release_bot',
+ 'Mac ASAN Debug': 'asan_disable_nacl_edge_fuzzer_v8_heap_debug_symbols_static_bot',
+ 'Mac ASAN Release Media': 'asan_disable_nacl_edge_fuzzer_v8_heap_chrome_with_codecs_release_bot',
+ 'Mac ASAN Release': 'asan_disable_nacl_edge_fuzzer_v8_heap_release_bot',
+ 'TSAN Debug': 'tsan_disable_nacl_debug_bot',
+ 'TSAN Release': 'tsan_disable_nacl_release_bot',
+ 'UBSan Release': 'ubsan_release_bot',
+ 'UBSan vptr Release': 'ubsan_vptr_edge_release_bot',
+ 'Win ASan Release Media': 'asan_fuzzer_v8_heap_chrome_with_codecs_release_bot_x86',
+ 'Win ASan Release': 'asan_fuzzer_v8_heap_release_bot',
+ },
+
'chromium.fyi': {
'Afl Upload Linux ASan': 'afl_asan_release_bot',
'Android Builder (dbg)': 'android_debug_static_bot_vrdata',
@@ -213,6 +243,7 @@
'Jumbo Linux x64': 'jumbo_large_chunks_release_bot_minimal_symbols',
'Jumbo Mac': 'jumbo_release_bot_minimal_symbols',
'Jumbo Win x64': 'jumbo_release_bot_minimal_symbols',
+ 'Libfuzzer Upload Chrome OS ASan': 'libfuzzer_chromeos_asan_release_bot',
'Libfuzzer Upload Linux ASan': 'libfuzzer_asan_release_bot',
'Libfuzzer Upload Linux ASan Debug': 'libfuzzer_asan_debug_bot',
'Libfuzzer Upload Linux MSan': 'libfuzzer_msan_release_bot',
@@ -229,7 +260,7 @@
'linux-blink-heap-incremental-marking': 'debug_bot_enable_blink_heap_incremental_marking',
'linux-blink-heap-verification': 'release_bot_enable_blink_heap_verification_dcheck_always_on',
'linux-chromium-tests-staging-builder': 'release_bot',
- 'linux-code-coverage-generation': 'clang_code_coverage',
+ 'linux-code-coverage': 'clang_code_coverage',
'Mac deterministic': 'release_bot_mac_strip',
'Mac deterministic (dbg)': 'debug_bot',
@@ -237,13 +268,13 @@
'Mojo ChromiumOS': 'chromeos_with_codecs_release_trybot',
'Mojo Android': 'android_release_bot_minimal_symbols_arm64',
'Mojo Linux': 'release_trybot',
+ 'mac-mojo-rel': 'release_trybot',
'Mojo Windows': 'release_bot_x86_minimal_symbols',
'Site Isolation Android': 'android_release_bot_minimal_symbols_arm64',
'VR Linux': 'vr_release_bot',
'linux-tcmalloc-rel': 'tcmalloc_release_bot',
'Win 10 Fast Ring': 'release_trybot',
- 'Windows deterministic': 'release_bot_x86_no_symbols',
'Windows Clang deterministic': 'clang_release_bot_minimal_symbols_x86',
'win-annotator-rel': 'release_bot',
},
@@ -259,6 +290,8 @@
'Chromium Linux Goma RBE Staging': 'release_bot',
'Chromium Linux Goma RBE Staging (dbg) (clobber)': 'debug_bot',
'Chromium Linux Goma RBE Staging (dbg)': 'debug_bot',
+ 'Chromium Mac Goma RBE Staging (clobber)': 'release_bot',
+ 'Chromium Android ARM 32-bit Goma RBE Staging': 'android_release_bot_minimal_symbols',
},
'chromium.gpu': {
@@ -324,16 +357,16 @@
'Cast Linux': 'cast_release_bot',
'Deterministic Linux (dbg)': 'debug_bot',
'Deterministic Linux': 'release_bot',
- 'Fuchsia ARM64 Cast Audio': 'release_bot_fuchsia_arm64_cast_audio',
'Fuchsia ARM64': 'release_bot_fuchsia_arm64',
- 'Fuchsia x64 Cast Audio': 'release_bot_fuchsia_cast_audio',
'Fuchsia x64': 'release_bot_fuchsia',
'Leak Detection Linux': 'release_bot',
'Linux Builder (dbg)': 'gpu_tests_debug_bot',
'Linux Builder (dbg)(32)': 'gpu_tests_debug_bot_x86',
'Linux Builder': 'gpu_tests_release_bot',
+ 'fuchsia-arm64-cast': 'release_bot_fuchsia_arm64_cast',
+ 'fuchsia-x64-cast': 'release_bot_fuchsia_cast',
'linux-gcc-rel': 'release_bot_x86_minimal_symbols_no_clang_cxx11',
- 'linux-jumbo-rel': 'jumbo_release_bot_minimal_symbols',
+ 'linux-jumbo-rel': 'jumbo_large_chunks_release_bot_minimal_symbols',
'linux-ozone-rel': 'ozone_linux_release_bot',
'linux-xenial-rel': 'release_bot',
},
@@ -362,7 +395,7 @@
'chromium.mac': {
'Mac Builder': 'gpu_tests_release_bot_minimal_symbols',
'Mac Builder (dbg)': 'gpu_tests_debug_bot',
- 'mac-jumbo-rel': 'jumbo_release_bot_minimal_symbols',
+ 'mac-jumbo-rel': 'jumbo_large_chunks_release_bot_minimal_symbols',
'ios-device': 'ios',
'ios-device-xcode-clang': 'ios',
'ios-simulator': 'ios',
@@ -381,6 +414,9 @@
'Linux MSan Builder': 'msan_release_bot',
'Linux TSan Builder': 'tsan_disable_nacl_release_bot',
'Mac ASan 64 Builder': 'asan_minimal_symbols_disable_nacl_release_bot_dcheck_always_on',
+ 'WebKit Linux Trusty ASAN': 'asan_lsan_release_bot',
+ 'WebKit Linux Trusty Leak': 'release_bot',
+ 'WebKit Linux Trusty MSAN': 'msan_release_bot',
'win-asan': 'asan_clang_fuzzer_static_v8_heap_minimal_symbols_release',
},
@@ -456,10 +492,10 @@
},
'chromium.webrtc': {
- 'Android Builder': 'android_debug_static_bot_arm64',
- 'Linux Builder': 'gpu_tests_release_bot',
- 'Mac Builder': 'gpu_tests_release_bot',
- 'Win Builder': 'release_bot_x86_minimal_symbols_no_com_init_hooks_with_codecs',
+ 'WebRTC Chromium Android Builder': 'android_debug_static_bot_arm64',
+ 'WebRTC Chromium Linux Builder': 'gpu_tests_release_bot',
+ 'WebRTC Chromium Mac Builder': 'gpu_tests_release_bot',
+ 'WebRTC Chromium Win Builder': 'release_bot_x86_minimal_symbols_no_com_init_hooks_with_codecs',
},
'chromium.webrtc.fyi': {
@@ -478,9 +514,10 @@
# Windows bots take too long to link w/ full symbols and time out.
'Win Builder': 'gpu_tests_release_bot_x86_minimal_symbols',
'Win Builder (dbg)': 'gpu_tests_debug_bot_x86_minimal_symbols',
- 'win-jumbo-rel': 'jumbo_release_bot_minimal_symbols',
+ 'win-jumbo-rel': 'jumbo_large_chunks_release_bot_minimal_symbols',
'Win x64 Builder': 'gpu_tests_release_bot_minimal_symbols',
'Win x64 Builder (dbg)': 'gpu_tests_debug_bot_minimal_symbols',
+ 'Windows deterministic': 'release_bot_x86_minimal_symbols',
},
'internal.client.kitchensync': {
@@ -587,31 +624,38 @@
'tryserver.chromium.chromiumos': {
'chromeos-amd64-generic-rel': 'cros_chrome_sdk_headless_ozone_dcheck_always_on',
- 'chromeos-daisy-rel': 'cros_chrome_sdk',
+ 'chromeos-daisy-rel': 'cros_chrome_sdk_dchecks_always_on',
'linux-chromeos-rel': 'chromeos_with_codecs_release_trybot',
'linux-chromeos-compile-dbg': 'chromeos_with_codecs_debug_bot',
'linux-chromeos-dbg': 'chromeos_with_codecs_debug_bot',
},
+ 'tryserver.chromium.dawn': {
+ 'linux-dawn-rel': 'gpu_fyi_tests_release_trybot',
+ 'mac-dawn-rel': 'gpu_fyi_tests_release_trybot',
+ 'win-dawn-rel': 'gpu_fyi_tests_release_trybot_x86',
+ },
+
'tryserver.chromium.linux': {
'cast_shell_audio_linux': 'cast_audio_release_trybot',
'cast_shell_linux': 'cast_release_trybot',
'chromium_presubmit': 'presubmit',
'closure_compilation': 'closure_compilation',
'fuchsia_arm64': 'release_trybot_fuchsia_arm64',
- 'fuchsia_arm64_cast_audio': 'release_trybot_fuchsia_arm64_cast_audio',
+ 'fuchsia-arm64-cast': 'release_trybot_fuchsia_arm64_cast',
'fuchsia-fyi-x64-dbg': 'debug_trybot_fuchsia',
'fuchsia_x64': 'release_trybot_fuchsia',
- 'fuchsia_x64_cast_audio': 'release_trybot_fuchsia_cast_audio',
+ 'fuchsia-x64-cast': 'release_trybot_fuchsia_cast',
'layout_test_leak_detection': 'release_trybot',
'leak_detection_linux': 'release_trybot',
'linux-blink-gen-property-trees': 'release_trybot',
'linux-blink-heap-incremental-marking': 'debug_trybot_enable_blink_heap_incremental_marking',
'linux-blink-heap-verification-try': 'release_trybot_enable_blink_heap_verification',
+ 'linux-coverage-rel': 'clang_code_coverage_trybot',
'linux-dcheck-off-rel': 'release_trybot_dcheck_off',
'linux-goma-rbe-staging-rel': 'gpu_tests_release_trybot_no_symbols',
'linux-gcc-rel': 'release_bot_x86_minimal_symbols_no_clang_cxx11',
- 'linux-jumbo-rel': 'jumbo_release_bot_minimal_symbols',
+ 'linux-jumbo-rel': 'jumbo_large_chunks_release_bot_minimal_symbols',
'linux-libfuzzer-asan-rel': 'libfuzzer_asan_release_trybot',
'linux-ozone-rel': 'ozone_linux_release_trybot',
'linux-xenial-rel': 'release_trybot',
@@ -654,7 +698,7 @@
'ios-simulator-full-configs': 'ios',
'ios-simulator-cronet': 'ios',
'ios-simulator-xcode-clang': 'ios',
- 'mac-jumbo-rel': 'jumbo_release_bot_minimal_symbols',
+ 'mac-jumbo-rel': 'jumbo_large_chunks_release_bot_minimal_symbols',
'mac_chromium_10.10': 'gpu_tests_release_trybot',
'mac_chromium_10.12_rel_ng': 'gpu_tests_release_trybot',
'mac_chromium_10.13_rel_ng': 'release_trybot',
@@ -687,7 +731,8 @@
'win10_chromium_x64_rel_ng_exp': 'release_trybot',
'win-annotator-rel': 'release_trybot',
'win-asan': 'asan_clang_fuzzer_static_v8_heap_minimal_symbols_release',
- 'win-jumbo-rel': 'jumbo_release_bot_minimal_symbols',
+ 'win-jumbo-rel': 'jumbo_large_chunks_release_bot_minimal_symbols',
+ 'win-libfuzzer-asan-rel': 'libfuzzer_windows_asan_release_trybot',
'win_x64_archive': 'release_trybot',
'win_archive': 'release_trybot_x86',
'win_chromium_compile_dbg_ng': 'gpu_tests_debug_trybot_x86_minimal_symbols',
@@ -893,6 +938,10 @@
'android', 'incremental', 'debug_bot',
],
+ 'android_jumbo_release_bot_minimal_symbols': [
+ 'android', 'jumbo', 'release_bot', 'minimal_symbols',
+ ],
+
'android_ndk_next_release_bot_minimal_symbols': [
'android', 'ndk_next', 'release_bot', 'minimal_symbols', 'strip_debug_info',
],
@@ -1081,6 +1130,11 @@
'release_bot', 'clang', 'use_clang_coverage', 'no_symbols',
],
+ 'clang_code_coverage_trybot': [
+ 'gpu_tests', 'use_dummy_lastchange', 'release_trybot', 'clang', 'use_clang_coverage', 'no_symbols',
+ 'partial_clang_instrumentation'
+ ],
+
'clang_release_bot_minimal_symbols_x86': [
'clang', 'release_bot', 'minimal_symbols', 'x86',
],
@@ -1193,6 +1247,10 @@
'cros_chrome_sdk',
],
+ 'cros_chrome_sdk_dchecks_always_on': [
+ 'cros_chrome_sdk', 'dcheck_always_on',
+ ],
+
'cros_chrome_sdk_headless_ozone': [
'cros_chrome_sdk', 'ozone_platform_headless',
],
@@ -1409,6 +1467,9 @@
'libfuzzer_asan_debug_bot': [
'libfuzzer', 'asan', 'debug_bot', 'chromeos_codecs', 'pdf_xfa', 'disable_nacl', 'optimize_for_fuzzing',
],
+ 'libfuzzer_chromeos_asan_release_bot': [
+ 'libfuzzer', 'asan', 'chromeos_with_codecs', 'shared_release_bot', 'pdf_xfa', 'disable_nacl', 'optimize_for_fuzzing',
+ ],
'libfuzzer_asan_release_bot': [
'libfuzzer', 'asan', 'release_bot', 'chromeos_codecs', 'pdf_xfa', 'disable_nacl', 'optimize_for_fuzzing',
],
@@ -1431,6 +1492,12 @@
'libfuzzer_windows_asan_release_bot': [
'libfuzzer', 'asan', 'release_bot', 'chrome_with_codecs', 'pdf_xfa', 'disable_nacl', 'minimal_symbols',
],
+ 'libfuzzer_windows_asan_clang_tot_release_bot': [
+ 'libfuzzer', 'asan', 'clang_tot', 'release', 'chrome_with_codecs', 'pdf_xfa', 'disable_nacl', 'minimal_symbols',
+ ],
+ 'libfuzzer_windows_asan_release_trybot': [
+ 'libfuzzer', 'asan', 'release_trybot', 'chrome_with_codecs', 'pdf_xfa', 'disable_nacl', 'minimal_symbols',
+ ],
'libfuzzer_msan_release_bot': [
'libfuzzer', 'msan', 'release_bot', 'chromeos_codecs', 'pdf_xfa', 'disable_nacl', 'optimize_for_fuzzing',
@@ -1525,16 +1592,16 @@
'release_bot', 'fuchsia',
],
- 'release_bot_fuchsia_cast_audio': [
- 'release_bot', 'fuchsia', 'cast', 'cast_audio', 'no_symbols',
+ 'release_bot_fuchsia_cast': [
+ 'release_bot', 'fuchsia', 'cast', 'cast', 'no_symbols',
],
'release_bot_fuchsia_arm64': [
'release_bot', 'fuchsia', 'arm64',
],
- 'release_bot_fuchsia_arm64_cast_audio': [
- 'release_bot', 'fuchsia', 'arm64', 'cast', 'cast_audio', 'no_symbols',
+ 'release_bot_fuchsia_arm64_cast': [
+ 'release_bot', 'fuchsia', 'arm64', 'cast', 'no_symbols',
],
'release_bot_mac_strip': [
@@ -1555,8 +1622,6 @@
'release_bot_minimal_symbols': [ 'release_bot', 'minimal_symbols' ],
'release_bot_x86_minimal_symbols': [ 'release_bot', 'x86', 'minimal_symbols' ],
- 'release_bot_x86_no_symbols': [ 'release_bot', 'x86', 'no_symbols' ],
-
'release_bot_minimal_symbols_enable_archive_compression': [
'release_bot', 'minimal_symbols', 'enable_archive_compression'
],
@@ -1589,16 +1654,16 @@
'release_trybot', 'fuchsia',
],
- 'release_trybot_fuchsia_cast_audio': [
- 'release_trybot', 'fuchsia', 'cast', 'cast_audio',
+ 'release_trybot_fuchsia_cast': [
+ 'release_trybot', 'fuchsia', 'cast',
],
'release_trybot_fuchsia_arm64': [
'release_trybot', 'fuchsia', 'arm64',
],
- 'release_trybot_fuchsia_arm64_cast_audio': [
- 'release_trybot', 'fuchsia', 'arm64', 'cast', 'cast_audio',
+ 'release_trybot_fuchsia_arm64_cast': [
+ 'release_trybot', 'fuchsia', 'arm64', 'cast',
],
'release_trybot_x86': [
@@ -1613,10 +1678,6 @@
'release_bot', 'x86', 'minimal_symbols', 'no_clang', 'use_cxx11',
],
- 'safestack_cfi_tot': [
- 'safestack', 'cfi', 'cfi_diag', 'clang_tot', 'dcheck_always_on',
- ],
-
'tcmalloc_release_bot': [
'tcmalloc', 'release_bot',
],
@@ -1760,10 +1821,6 @@
'gn_args': 'use_cfi_recover=true',
},
- 'safestack': {
- 'gn_args': 'is_safestack=true',
- },
-
'chrome_with_codecs': {
'mixins': ['ffmpeg_branding_chrome', 'proprietary_codecs'],
},
@@ -1845,7 +1902,7 @@
},
'debug_bot': {
- 'mixins': ['debug', 'shared', 'goma'],
+ 'mixins': ['debug', 'shared', 'goma', 'minimal_symbols'],
},
'debug_symbols_static_bot': {
@@ -1857,7 +1914,7 @@
},
'debug_trybot': {
- 'mixins': ['debug_bot', 'minimal_symbols'],
+ 'mixins': ['debug_bot'],
},
'disable_nacl': {
@@ -1920,11 +1977,9 @@
},
'goma': {
- # The MB code will properly escape goma_dir if necessary in the GYP
- # code path; the GN code path needs no escaping.
- # We also set strip_absolute_paths to ensure that we can get deterministic
- # builds. This isn't just on by default when goma is on so that devs
- # can do goma builds but still be able to debug by default.
+ # strip_absolute_paths_from_debug_symbols is on by default on Linux and
+ # Windows, but not elsewhere. Since it helps goma's cache, set this to
+ # help Android builds.
'gn_args': 'use_goma=true strip_absolute_paths_from_debug_symbols=true',
},
@@ -2049,6 +2104,15 @@
'gn_args': 'ozone_platform_headless=true',
},
+ # Used to pass the list of files to instrument for coverage to the compile
+ # wrapper. See:
+ # https://cs.chromium.org/chromium/build/scripts/slave/recipe_modules/clang_coverage/api.py
+ # and
+ # https://cs.chromium.org/chromium/src/docs/clang_code_coverage_wrapper.md
+ 'partial_clang_instrumentation': {
+ 'gn_args': 'coverage_instrumentation_input_file="//.clang-coverage/files_to_instrument.txt"'
+ },
+
'pdf_xfa': {
'gn_args': 'pdf_enable_xfa=true',
},
diff --git a/chromium/tools/mb/mb_unittest.py b/chromium/tools/mb/mb_unittest.py
index bf6a771e355..3367ffecf04 100755
--- a/chromium/tools/mb/mb_unittest.py
+++ b/chromium/tools/mb/mb_unittest.py
@@ -6,6 +6,7 @@
"""Tests for mb.py."""
import json
+import os
import StringIO
import sys
import unittest
@@ -110,6 +111,7 @@ TEST_CONFIG = """\
'fake_master': {
'fake_builder': 'rel_bot',
'fake_debug_builder': 'debug_goma',
+ 'fake_simplechrome_builder': 'cros_chrome_sdk',
'fake_args_bot': '//build/args/bots/fake_master/fake_args_bot.gn',
'fake_multi_phase': { 'phase_1': 'phase_1', 'phase_2': 'phase_2'},
'fake_args_file': 'args_file_goma',
@@ -119,12 +121,16 @@ TEST_CONFIG = """\
'configs': {
'args_file_goma': ['args_file', 'goma'],
'args_file_twice': ['args_file', 'args_file'],
+ 'cros_chrome_sdk': ['cros_chrome_sdk'],
'rel_bot': ['rel', 'goma', 'fake_feature1'],
'debug_goma': ['debug', 'goma'],
'phase_1': ['phase_1'],
'phase_2': ['phase_2'],
},
'mixins': {
+ 'cros_chrome_sdk': {
+ 'cros_passthrough': True,
+ },
'fake_feature1': {
'gn_args': 'enable_doom_melon=true',
},
@@ -217,11 +223,17 @@ class UnitTest(unittest.TestCase):
mbw.files[path] = contents
return mbw
- def check(self, args, mbw=None, files=None, out=None, err=None, ret=None):
+ def check(self, args, mbw=None, files=None, out=None, err=None, ret=None,
+ env=None):
if not mbw:
mbw = self.fake_mbw(files)
- actual_ret = mbw.Main(args)
+ try:
+ prev_env = os.environ.copy()
+ os.environ = env if env else prev_env
+ actual_ret = mbw.Main(args)
+ finally:
+ os.environ = prev_env
self.assertEqual(actual_ret, ret)
if out is not None:
@@ -583,6 +595,12 @@ class UnitTest(unittest.TestCase):
'""" to _path_/args.gn.\n\n'
'/fake_src/buildtools/linux64/gn gen _path_\n'))
+ def test_lookup_simplechrome(self):
+ simplechrome_env = {
+ 'GN_ARGS': 'is_chromeos=1 target_os="chromeos"',
+ }
+ self.check(['lookup', '-c', 'cros_chrome_sdk'], ret=0, env=simplechrome_env)
+
def test_help(self):
orig_stdout = sys.stdout
try:
diff --git a/chromium/tools/metrics/actions/README.md b/chromium/tools/metrics/actions/README.md
index 71614931dd7..6361c0382a0 100644
--- a/chromium/tools/metrics/actions/README.md
+++ b/chromium/tools/metrics/actions/README.md
@@ -14,7 +14,8 @@ enable different analyses. They're complementary.
## Coding (Emitting to User Actions)
Generally you'll want to call `base::RecordAction()`, which is defined in
-[https://cs.chromium.org/chromium/src/base/metrics/user_metrics.h](user_metrics.h).
+[user_metrics.h](https://cs.chromium.org/chromium/src/base/metrics/user_metrics.h).
+
### Emit at a High-Level, not Deep in the Implementation
@@ -97,7 +98,7 @@ actions (see [advice above](#Do-Not-Emit-Redundantly)) and not emitted
excessively (see [advice above](#Do-Not-Emit-Excessively)).
In addition to testing interactively, you can have unit tests check the number
-of times a user action was emitted. See [user_action_tester.h](https://cs.chromium.org/chromium/src/base/test/user_action_tester.h)
+of times a user action was emitted. See [user_action_tester.h](https://cs.chromium.org/chromium/src/base/test/metrics/user_action_tester.h)
for details.
## Interpreting the Resulting Data
diff --git a/chromium/tools/metrics/actions/actions.xml b/chromium/tools/metrics/actions/actions.xml
index ebe388f5d78..db6b0995d2b 100644
--- a/chromium/tools/metrics/actions/actions.xml
+++ b/chromium/tools/metrics/actions/actions.xml
@@ -576,6 +576,13 @@ should be able to be added at any place in this file.
<description>Please enter the description of this user action.</description>
</action>
+<action name="Accel_Focus_Pip">
+ <owner>omrilio@chromium.org</owner>
+ <description>
+ Keyboard accelerator to focus picture in picture window.
+ </description>
+</action>
+
<action name="Accel_Focus_Previous_Pane">
<owner>Please list the metric's owners. Add more owner tags as needed.</owner>
<description>Please enter the description of this user action.</description>
@@ -920,6 +927,10 @@ should be able to be added at any place in this file.
</action>
<action name="Accel_Show_Keyboard_Overlay">
+ <obsolete>
+ Deprecated 10/2018. The keyboard overlay was removed and replaced by
+ keyboard shortcut viewer.
+ </obsolete>
<owner>Please list the metric's owners. Add more owner tags as needed.</owner>
<description>Please enter the description of this user action.</description>
</action>
@@ -1158,6 +1169,42 @@ should be able to be added at any place in this file.
<description>Please enter the description of this user action.</description>
</action>
+<action name="Accessibility.Autoclick.DoubleClick">
+ <owner>katie@chromium.org</owner>
+ <owner>dtseng@chromium.org</owner>
+ <owner>dmazzoni@chromium.org</owner>
+ <description>
+ A user has used autoclick to perform a double click action.
+ </description>
+</action>
+
+<action name="Accessibility.Autoclick.DragAndDrop">
+ <owner>katie@chromium.org</owner>
+ <owner>dtseng@chromium.org</owner>
+ <owner>dmazzoni@chromium.org</owner>
+ <description>
+ A user has used autoclick to perform a drag and drop action.
+ </description>
+</action>
+
+<action name="Accessibility.Autoclick.LeftClick">
+ <owner>katie@chromium.org</owner>
+ <owner>dtseng@chromium.org</owner>
+ <owner>dmazzoni@chromium.org</owner>
+ <description>
+ A user has used autoclick to perform a left click action.
+ </description>
+</action>
+
+<action name="Accessibility.Autoclick.RightClick">
+ <owner>katie@chromium.org</owner>
+ <owner>dtseng@chromium.org</owner>
+ <owner>dmazzoni@chromium.org</owner>
+ <description>
+ A user has used autoclick to perform a right click action.
+ </description>
+</action>
+
<action name="Accessibility.ChromeVox.Jump">
<owner>dmazzoni@chromium.org</owner>
<description>
@@ -2248,6 +2295,20 @@ should be able to be added at any place in this file.
</description>
</action>
+<action name="Autofill_ParsedCreditCardForm">
+ <owner>sebsg@chromium.org</owner>
+ <description>
+ This user action is logged when a credit card form is parsed.
+ </description>
+</action>
+
+<action name="Autofill_ParsedProfileForm">
+ <owner>sebsg@chromium.org</owner>
+ <description>
+ This user action is logged when a profile form is parsed.
+ </description>
+</action>
+
<action name="Autofill_PolledCreditCardSuggestions">
<owner>sebsg@chromium.org</owner>
<description>
@@ -2300,6 +2361,30 @@ should be able to be added at any place in this file.
</description>
</action>
+<action name="AutofillAddressesViewed">
+ <owner>nikunjb@chromium.org</owner>
+ <owner>sebsg@chromium.org</owner>
+ <description>
+ Recorded when user visits chrome://settings/autofill page.
+ </description>
+</action>
+
+<action name="AutofillCreditCardsAdded">
+ <owner>nikunjb@chromium.org</owner>
+ <owner>sebsg@chromium.org</owner>
+ <description>
+ Recorded when user adds card via chrome://settings/payments page.
+ </description>
+</action>
+
+<action name="AutofillCreditCardsViewed">
+ <owner>nikunjb@chromium.org</owner>
+ <owner>sebsg@chromium.org</owner>
+ <description>
+ Recorded when user visits chrome://settings/payments page.
+ </description>
+</action>
+
<action name="AutomaticReset_WebUIBanner_BannerShown">
<owner>Please list the metric's owners. Add more owner tags as needed.</owner>
<description>Please enter the description of this user action.</description>
@@ -3831,6 +3916,41 @@ should be able to be added at any place in this file.
<description>User switched to basic tab.</description>
</action>
+<action name="ClearBrowsingData_Sync_NavigateToError">
+ <owner>dullweber@chromium.org</owner>
+ <owner>msramek@chromium.org</owner>
+ <description>
+ The user clicked on the &quot;visit sync settings&quot; link in the sync
+ error message in the Clear Browsing Data footer.
+ </description>
+</action>
+
+<action name="ClearBrowsingData_Sync_NavigateToPassphrase">
+ <owner>dullweber@chromium.org</owner>
+ <owner>msramek@chromium.org</owner>
+ <description>
+ The user clicked on the &quot;enter your passphrase&quot; link in the error
+ message in the Clear Browsing Data footer, which was shown due to a missing
+ sync passphrase.
+ </description>
+</action>
+
+<action name="ClearBrowsingData_Sync_Pause">
+ <owner>dullweber@chromium.org</owner>
+ <owner>msramek@chromium.org</owner>
+ <description>
+ User paused sync from the Clear Browsing Data footer.
+ </description>
+</action>
+
+<action name="ClearBrowsingData_Sync_SignIn">
+ <owner>dullweber@chromium.org</owner>
+ <owner>msramek@chromium.org</owner>
+ <description>
+ User started to sign in from the Clear Browsing Data footer to unpause sync.
+ </description>
+</action>
+
<action name="ClearBrowsingData_TimePeriodChanged_Everything">
<owner>dullweber@chromium.org</owner>
<owner>msramek@chromium.org</owner>
@@ -4314,6 +4434,13 @@ should be able to be added at any place in this file.
</description>
</action>
+<action name="ContextualSuggestions">
+ <owner>huayinz@chromium.org</owner>
+ <owner>twellington@chromium.com</owner>
+ <owner>wylieb@chromium.com</owner>
+ <description>Android: User interacts with the feature directly.</description>
+</action>
+
<action name="ContextualSuggestions.ContextMenu">
<owner>huayinz@chromium.org</owner>
<owner>twellington@chromium.com</owner>
@@ -4446,6 +4573,11 @@ should be able to be added at any place in this file.
</description>
</action>
+<action name="CustomTabs.CloseButtonClicked.GoToModuleManagedUrl">
+ <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+ <description>Please enter the description of the metric.</description>
+</action>
+
<action name="CustomTabs.StartedInitially">
<owner>tedchoc@chromium.org</owner>
<description>A CustomTabActivity was stared for the first time.</description>
@@ -4669,6 +4801,23 @@ should be able to be added at any place in this file.
<description>Please enter the description of this user action.</description>
</action>
+<action name="DemoMode.ExitFromShelf">
+ <owner>michaelpg@chromium.org</owner>
+ <owner>wzang@chromium.org</owner>
+ <description>
+ Recorded when user exits Demo Mode from the logout button on the shelf.
+ </description>
+</action>
+
+<action name="DemoMode.ExitFromSystemTray">
+ <owner>michaelpg@chromium.org</owner>
+ <owner>wzang@chromium.org</owner>
+ <description>
+ Recorded when user exits Demo Mode from the logout button in the system
+ tray.
+ </description>
+</action>
+
<action name="Desktop_SwitchTask">
<owner>bruthig@google.com</owner>
<owner>tdanderson@google.com</owner>
@@ -7361,6 +7510,13 @@ should be able to be added at any place in this file.
<description>Please enter the description of this user action.</description>
</action>
+<action name="IOSLaunchedBySearchInChromeIntent">
+ <owner>justincohen@chromium.org</owner>
+ <description>
+ User opened Chrome with a `Search in Chrome` Siri Shortcut.
+ </description>
+</action>
+
<action name="Italic">
<owner>Please list the metric's owners. Add more owner tags as needed.</owner>
<description>Please enter the description of this user action.</description>
@@ -9993,6 +10149,202 @@ should be able to be added at any place in this file.
<description>The chrome://management page was viewed.</description>
</action>
+<action name="ManualFallback_Close">
+ <owner>javierrobles@chromium.org</owner>
+ <description>
+ The user closed the Manual Fallback view by tapping the keyboard icon.
+ </description>
+</action>
+
+<action name="ManualFallback_ClosePopover">
+ <owner>javierrobles@chromium.org</owner>
+ <description>
+ The user closed the Manual Fallback Popover view. This happens when the user
+ taps outside the popover.
+ </description>
+</action>
+
+<action name="ManualFallback_ClosePull">
+ <owner>javierrobles@chromium.org</owner>
+ <description>
+ The user closed the Manual Fallback view by pulling. This happens when the
+ user pulls enough to the right, similar to &quot;pull to refresh&quot;.
+ </description>
+</action>
+
+<action name="ManualFallback_CreditCard_OpenManageCreditCard">
+ <owner>javierrobles@chromium.org</owner>
+ <description>
+ The user tapped on &quot;Manage credit cards&quot; on the Password Manual
+ Fallback view.
+ </description>
+</action>
+
+<action name="ManualFallback_CreditCard_SelectCardholderName">
+ <owner>javierrobles@chromium.org</owner>
+ <description>
+ The user tapped on a cardholder name in the Credit Card Fallback view.
+ </description>
+</action>
+
+<action name="ManualFallback_CreditCard_SelectCardNumber">
+ <owner>javierrobles@chromium.org</owner>
+ <description>
+ The user tapped on a credit card number in the Credit Card Fallback view.
+ </description>
+</action>
+
+<action name="ManualFallback_CreditCard_SelectExpirationMonth">
+ <owner>javierrobles@chromium.org</owner>
+ <description>
+ The user tapped on an expiration month in the Credit Card Fallback view.
+ </description>
+</action>
+
+<action name="ManualFallback_CreditCard_SelectExpirationYear">
+ <owner>javierrobles@chromium.org</owner>
+ <description>
+ The user tapped on an expiration year in the Credit Card Fallback view.
+ </description>
+</action>
+
+<action name="ManualFallback_OpenCreditCard">
+ <owner>javierrobles@chromium.org</owner>
+ <description>The user opened Credit Card Manual Fallback view.</description>
+</action>
+
+<action name="ManualFallback_OpenPassword">
+ <owner>javierrobles@chromium.org</owner>
+ <description>The user opened the Password Manual Fallback view.</description>
+</action>
+
+<action name="ManualFallback_OpenProfile">
+ <owner>javierrobles@chromium.org</owner>
+ <description>The user opened the Profile Manual Fallback view.</description>
+</action>
+
+<action name="ManualFallback_Password_OpenManagePassword">
+ <owner>javierrobles@chromium.org</owner>
+ <description>
+ The user tapped on &quot;Manage passwords&quot; on the Password Manual
+ Fallback view.
+ </description>
+</action>
+
+<action name="ManualFallback_Password_OpenOtherPassword">
+ <owner>javierrobles@chromium.org</owner>
+ <description>
+ The user tapped on &quot;Use other password&quot; on the Password Manual
+ Fallback view.
+ </description>
+</action>
+
+<action name="ManualFallback_Password_SelectPassword">
+ <owner>javierrobles@chromium.org</owner>
+ <description>
+ The user tapped on a password in the Password Manual Fallback view.
+ </description>
+</action>
+
+<action name="ManualFallback_Password_SelectUsername">
+ <owner>javierrobles@chromium.org</owner>
+ <description>
+ The user tapped on a username in the Password Manual Fallback view.
+ </description>
+</action>
+
+<action name="ManualFallback_Profiles_Address1">
+ <owner>javierrobles@chromium.org</owner>
+ <description>
+ The user tapped on line 1 in the Address Manual Fallback view.
+ </description>
+</action>
+
+<action name="ManualFallback_Profiles_Address2">
+ <owner>javierrobles@chromium.org</owner>
+ <description>
+ The user tapped on line 2 in the Address Manual Fallback view.
+ </description>
+</action>
+
+<action name="ManualFallback_Profiles_City">
+ <owner>javierrobles@chromium.org</owner>
+ <description>
+ The user tapped on a city in the Address Manual Fallback view.
+ </description>
+</action>
+
+<action name="ManualFallback_Profiles_Company">
+ <owner>javierrobles@chromium.org</owner>
+ <description>
+ The user tapped on a company name in the Address Manual Fallback view.
+ </description>
+</action>
+
+<action name="ManualFallback_Profiles_Country">
+ <owner>javierrobles@chromium.org</owner>
+ <description>
+ The user tapped on a country in the Address Manual Fallback view.
+ </description>
+</action>
+
+<action name="ManualFallback_Profiles_EmailAddress">
+ <owner>javierrobles@chromium.org</owner>
+ <description>
+ The user tapped on an email address in the Address Manual Fallback view.
+ </description>
+</action>
+
+<action name="ManualFallback_Profiles_OpenManageProfiles">
+ <owner>javierrobles@chromium.org</owner>
+ <description>
+ The user tapped on &quot;Manage addresses&quot; on the Password Manual
+ Fallback view.
+ </description>
+</action>
+
+<action name="ManualFallback_Profiles_PhoneNumber">
+ <owner>javierrobles@chromium.org</owner>
+ <description>
+ The user tapped on a phone number in the Address Manual Fallback view.
+ </description>
+</action>
+
+<action name="ManualFallback_Profiles_SelectFirstName">
+ <owner>javierrobles@chromium.org</owner>
+ <description>
+ The user tapped on a first name in the Address Manual Fallback view.
+ </description>
+</action>
+
+<action name="ManualFallback_Profiles_SelectLastName">
+ <owner>javierrobles@chromium.org</owner>
+ <description>
+ The user tapped on a last name in the Address Manual Fallback view.
+ </description>
+</action>
+
+<action name="ManualFallback_Profiles_SelectMiddleName">
+ <owner>javierrobles@chromium.org</owner>
+ <description>
+ The user tapped on a middle name in the Address Manual Fallback view.
+ </description>
+</action>
+
+<action name="ManualFallback_Profiles_State">
+ <owner>javierrobles@chromium.org</owner>
+ <description>
+ The user tapped on a state / province in the Address Manual Fallback view.
+ </description>
+</action>
+
+<action name="ManualFallback_Profiles_Zip">
+ <owner>javierrobles@chromium.org</owner>
+ <description>
+ The user tapped on a zip code in the Address Manual Fallback view.
+ </description>
+</action>
+
<action name="MaxButton_Clk_ExitFS">
<owner>Please list the metric's owners. Add more owner tags as needed.</owner>
<description>Please enter the description of this user action.</description>
@@ -10095,6 +10447,20 @@ should be able to be added at any place in this file.
<description>The user clicked on the cast overlay button.</description>
</action>
+<action name="Media.Controls.ClickAnywhereToPause">
+ <owner>jazzhsu@chromium.org</owner>
+ <description>
+ The user clicked anywhere in the video frame to pause.
+ </description>
+</action>
+
+<action name="Media.Controls.ClickAnywhereToPlay">
+ <owner>jazzhsu@chromium.org</owner>
+ <description>
+ The user clicked anywhere in the video frame to play.
+ </description>
+</action>
+
<action name="Media.Controls.ClosedCaptionHide">
<owner>mlamouri@chromium.org</owner>
<description>The user hid the closed caption from the controls.</description>
@@ -11469,6 +11835,45 @@ should be able to be added at any place in this file.
</description>
</action>
+<action name="MobileOmniboxShortcutsOpenBookmarks">
+ <owner>stkhapugin@chromium.org</owner>
+ <description>
+ The user clicked the Bookmarks shortcut in Omnibox popup shortcuts. iOS
+ only.
+ </description>
+</action>
+
+<action name="MobileOmniboxShortcutsOpenHistory">
+ <owner>stkhapugin@chromium.org</owner>
+ <description>
+ The user clicked the History shortcut in Omnibox popup shortcuts. iOS only.
+ </description>
+</action>
+
+<action name="MobileOmniboxShortcutsOpenMostVisitedItem">
+ <owner>stkhapugin@chromium.org</owner>
+ <description>
+ The user clicked one of the Most Visited tiles in Omnibox popup shortcuts.
+ iOS only.
+ </description>
+</action>
+
+<action name="MobileOmniboxShortcutsOpenReadingList">
+ <owner>stkhapugin@chromium.org</owner>
+ <description>
+ The user clicked the Reading List shortcut in Omnibox popup shortcuts. iOS
+ only.
+ </description>
+</action>
+
+<action name="MobileOmniboxShortcutsOpenRecentTabs">
+ <owner>stkhapugin@chromium.org</owner>
+ <description>
+ The user clicked the Recent Tabs shortcut in Omnibox popup shortcuts. iOS
+ only.
+ </description>
+</action>
+
<action name="MobileOmniboxUse">
<owner>mpearson@chromium.org</owner>
<owner>tedchoc@chromium.org</owner>
@@ -11727,6 +12132,15 @@ should be able to be added at any place in this file.
<description>User shared to the device's bookmarks.</description>
</action>
+<action name="MobileShareMenuCancel">
+ <owner>gambard@chromium.org</owner>
+ <owner>pkl@chromium.org</owner>
+ <description>
+ The user cancelled the share action menu (i.e. closed it without taking any
+ action).
+ </description>
+</action>
+
<action name="MobileShareMenuFindInPage">
<owner>gambard@chromium.org</owner>
<description>
@@ -11968,6 +12382,24 @@ should be able to be added at any place in this file.
<description>Please enter the description of this user action.</description>
</action>
+<action name="MobileToolbarCloseAllIncognitoTabsButtonTap">
+ <owner>amaralp@chromium.org</owner>
+ <owner>mdjones@chromium.org</owner>
+ <description>
+ User tapped the close all incognito tabs button in the tab switcher bottom
+ toolbar.
+ </description>
+</action>
+
+<action name="MobileToolbarCloseAllRegularTabsButtonTap">
+ <owner>amaralp@chromium.org</owner>
+ <owner>mdjones@chromium.org</owner>
+ <description>
+ User tapped the close all regular tabs button in the tab switcher bottom
+ toolbar.
+ </description>
+</action>
+
<action name="MobileToolbarDownloadPage">
<owner>dfalcantara@chromium.org</owner>
<owner>twellington@chromium.org</owner>
@@ -17086,6 +17518,7 @@ should be able to be added at any place in this file.
</action>
<action name="Signin_Signin_FromForceSigninWarning">
+ <obsolete>Deprecated as the warning dialog is no longer used.</obsolete>
<owner>zmin@chromium.org</owner>
<description>
Record when a user signs in again from the force sign in auth error warning
@@ -17093,6 +17526,14 @@ should be able to be added at any place in this file.
</description>
</action>
+<action name="Signin_Signin_FromMachineLogon">
+ <owner>rogerta@chromium.org</owner>
+ <owner>tienmai@chromium.org</owner>
+ <description>
+ Record when a user signs in using a Windows machine's logon screen.
+ </description>
+</action>
+
<action name="Signin_Signin_FromManageCardsBubble">
<owner>manasverma@google.com</owner>
<owner>jsaul@chromium.org</owner>
@@ -18523,12 +18964,12 @@ should be able to be added at any place in this file.
</action>
<action name="StatusArea_DictationDisabled">
- <owner>zhelfins@chromium.org</owner>
+ <owner>anastasi@google.com</owner>
<description>Ash system menu: Accessibility: Disable Dictation.</description>
</action>
<action name="StatusArea_DictationEnabled">
- <owner>zhelfins@chromium.org</owner>
+ <owner>anastasi@google.com</owner>
<description>Ash system menu: Accessibility: Enable Dictation.</description>
</action>
@@ -19558,11 +19999,17 @@ should be able to be added at any place in this file.
</action>
<action name="TodayExtension.ExtensionDismissed">
+ <obsolete>
+ Deprecated. Replaced by IOS.SearchExtension.Action histogram.
+ </obsolete>
<owner>olivierrobin@chromium.org</owner>
<description>Dismissed the Chrome Today extension.</description>
</action>
<action name="TodayExtension.ExtensionDisplayed">
+ <obsolete>
+ Deprecated. Replaced by IOS.SearchExtension.Action histogram.
+ </obsolete>
<owner>olivierrobin@chromium.org</owner>
<description>
Displayed the notification center and display the Chrome Today extension.
@@ -19570,6 +20017,9 @@ should be able to be added at any place in this file.
</action>
<action name="TodayExtension.ExtensionInitialized">
+ <obsolete>
+ Deprecated. Replaced by IOS.SearchExtension.Action histogram.
+ </obsolete>
<owner>olivierrobin@chromium.org</owner>
<description>
Displayed the notification center and initialize the Chrome Today extension.
@@ -19577,6 +20027,9 @@ should be able to be added at any place in this file.
</action>
<action name="TodayExtension.NewTabPressed">
+ <obsolete>
+ Deprecated. Replaced by IOS.SearchExtension.Action histogram.
+ </obsolete>
<owner>olivierrobin@chromium.org</owner>
<description>
Tapped on the &quot;New Tab&quot; button in the Chrome Today extension.
@@ -19584,6 +20037,9 @@ should be able to be added at any place in this file.
</action>
<action name="TodayExtension.OpenClipboardPressed">
+ <obsolete>
+ Deprecated. Replaced by IOS.SearchExtension.Action histogram.
+ </obsolete>
<owner>olivierrobin@chromium.org</owner>
<description>
Tapped on the &quot;Open Copied Link&quot; button in the Chrome Today
@@ -19602,6 +20058,9 @@ should be able to be added at any place in this file.
</action>
<action name="TodayExtension.VoiceSearchPressed">
+ <obsolete>
+ Deprecated. Replaced by IOS.SearchExtension.Action histogram.
+ </obsolete>
<owner>olivierrobin@chromium.org</owner>
<description>
Tapped on the &quot;Voice Search&quot; button in the Chrome Today extension.
@@ -19779,6 +20238,10 @@ should be able to be added at any place in this file.
</action>
<action name="Tray_SwipeToClose_Successful">
+ <obsolete>
+ No longer needed since swipe on the tray bubble to close it has been
+ disabled and unified system tray has been launched.
+ </obsolete>
<owner>omrilio@chromium.org</owner>
<owner>minch@chromium.org</owner>
<description>
@@ -19789,6 +20252,10 @@ should be able to be added at any place in this file.
</action>
<action name="Tray_SwipeToClose_Unsuccessful">
+ <obsolete>
+ No longer needed since swipe on the tray bubble to close has been disabled
+ and unified system tray has been launched.
+ </obsolete>
<owner>omrilio@chromium.org</owner>
<owner>minch@chromium.org</owner>
<description>
@@ -19799,6 +20266,10 @@ should be able to be added at any place in this file.
</action>
<action name="Tray_SwipeToOpen_Successful">
+ <obsolete>
+ No longer needed since swipe on the status area tray to open it has been
+ disabled and unified system tray has been launched.
+ </obsolete>
<owner>omrilio@chromium.org</owner>
<owner>minch@chromium.org</owner>
<description>
@@ -19809,6 +20280,10 @@ should be able to be added at any place in this file.
</action>
<action name="Tray_SwipeToOpen_Unsuccessful">
+ <obsolete>
+ No longer needed since swipe on the status area tray to open it has been
+ disabled and unified system tray has been launched.
+ </obsolete>
<owner>omrilio@chromium.org</owner>
<owner>minch@chromium.org</owner>
<description>
@@ -19818,6 +20293,44 @@ should be able to be added at any place in this file.
</description>
</action>
+<action name="TrustedWebActivity.DisclosureAccepted">
+ <owner>peconn@chromium.org</owner>
+ <owner>pshmakov@chromium.org</owner>
+ <owner>peter@chromium.org</owner>
+ <description>
+ Recorded when a user accepts the &quot;Running in Chrome&quot; disclosure
+ seen in a Trusted Web Activity.
+ </description>
+</action>
+
+<action name="TrustedWebActivity.DisclosureShown">
+ <owner>peconn@chromium.org</owner>
+ <owner>pshmakov@chromium.org</owner>
+ <owner>peter@chromium.org</owner>
+ <description>
+ Recorded when a user sees the &quot;Running in Chrome&quot; disclosure in a
+ Trusted Web Activity.
+ </description>
+</action>
+
+<action name="TrustedWebActivity.OpenedSettingsViaManageSpace">
+ <owner>peconn@chromium.org</owner>
+ <owner>pshmakov@chromium.org</owner>
+ <owner>peter@chromium.org</owner>
+ <description>
+ Recorded when site settings are opened via &quot;Manage Space&quot; button
+ in TWA client app's settings.
+ </description>
+</action>
+
+<action name="UI_DevTools_Connect">
+ <owner>weili@chromium.org</owner>
+ <description>
+ Records when a user connects to a UI DevTools HTTP server, i.e., by clicking
+ on the 'inspect' link on chrome://inspect/#other.
+ </description>
+</action>
+
<action name="Underline">
<owner>Please list the metric's owners. Add more owner tags as needed.</owner>
<description>Please enter the description of this user action.</description>
@@ -20532,6 +21045,8 @@ should be able to be added at any place in this file.
<suffix name="NewTabTip" label="For NewTabTip feature."/>
<suffix name="PreviewsOmniboxUI"
label="For the Previews UI in the Android Omnibox feature."/>
+ <suffix name="ReopenTab" label="For ReopenTab feature."/>
+ <suffix name="TranslateMenuButton" label="For translate menu button."/>
<affected-action name="InProductHelp.NotifyEvent.IPH"/>
<affected-action name="InProductHelp.NotifyUsedEvent.IPH"/>
<affected-action name="InProductHelp.ShouldTriggerHelpUI.IPH"/>
@@ -20574,6 +21089,7 @@ should be able to be added at any place in this file.
<suffix name="Open" label="User opened an offline item."/>
<suffix name="Pause" label="User paused downloading an offline item."/>
<suffix name="Resume" label="User resumed downloading an offline item."/>
+ <suffix name="Retry" label="User retried downloading an offline item."/>
<affected-action name="Android.DownloadManager.List.View.Action"/>
</action-suffix>
@@ -20589,4 +21105,11 @@ should be able to be added at any place in this file.
<affected-action name="Android.DownloadManager.Menu.Action"/>
</action-suffix>
+<action-suffix separator="." ordering="suffix">
+ <suffix name="SuggestionClicked"
+ label="The suggestion was clicked directly."/>
+ <suffix name="ToolbarButtonClicked" label="The toolbar button was shown."/>
+ <affected-action name="ContextualSuggestions"/>
+</action-suffix>
+
</actions>
diff --git a/chromium/tools/metrics/histograms/README.md b/chromium/tools/metrics/histograms/README.md
index 4d9a183255e..c72eec11a66 100644
--- a/chromium/tools/metrics/histograms/README.md
+++ b/chromium/tools/metrics/histograms/README.md
@@ -16,7 +16,7 @@ etc., where each group organizes related histograms.
## Coding (Emitting to Histograms)
Generally you'll be best served by using one of the macros in
-[https://cs.chromium.org/chromium/src/base/metrics/histogram_macros.h](histogram_macros.h)
+[histogram_macros.h](https://cs.chromium.org/chromium/src/base/metrics/histogram_macros.h)
if possible.
### Don't Use the Same Histogram Logging Call in Multiple Places
@@ -212,7 +212,7 @@ friends, as well as helpers such as SCOPED_UMA_HISTOGRAM_TIMER. Many timing
histograms are used for performance monitoring; if this is the case for you,
please read [this document about how to structure timing histograms to make
them more useful and
-actionable](https://chromium.googlesource.com/chromium/src/+/lkcr/docs/speed/diagnostic_metrics.md).
+actionable](https://chromium.googlesource.com/chromium/src/+/lkgr/docs/speed/diagnostic_metrics.md).
### Percentage or Ratio Histograms
diff --git a/chromium/tools/metrics/histograms/enums.xml b/chromium/tools/metrics/histograms/enums.xml
index 7ffc7cef583..f57522f8bca 100644
--- a/chromium/tools/metrics/histograms/enums.xml
+++ b/chromium/tools/metrics/histograms/enums.xml
@@ -67,6 +67,13 @@ uploading your change for review. These are checked by presubmit scripts.
<int value="2" label="ScrolledMainFrameWithUnacceleratedFixedRootBackground"/>
</enum>
+<enum name="AccessibilityAndroidAnimationsEnabled">
+ <int value="0"
+ label="ANIMATOR_DURATION_SCALE flag not defined or not a float"/>
+ <int value="1" label="Animations disabled"/>
+ <int value="2" label="Animations enabled"/>
+</enum>
+
<enum name="AccessibilityAndroidServiceInfoEnum">
<summary>
Track flags and capabilities of enabled accessibility services on Android.
@@ -691,6 +698,7 @@ uploading your change for review. These are checked by presubmit scripts.
<int value="3" label="CANCEL"/>
<int value="4" label="MENU_SHARE"/>
<int value="5" label="MENU_DELETE"/>
+ <int value="6" label="RETRY"/>
</enum>
<enum name="Android.DownloadManager.Menu.Actions">
@@ -1122,6 +1130,15 @@ uploading your change for review. These are checked by presubmit scripts.
<int value="15"
label="Visible renderer in foreground app allocation failure"/>
<int value="16" label="All renderer allocation failure"/>
+ <int value="17" label="Utility process foreground OOM"/>
+ <int value="18" label="All utility process crashes"/>
+</enum>
+
+<enum name="AndroidProcessedMinidumps">
+ <int value="0" label="Other"/>
+ <int value="1" label="Browser"/>
+ <int value="2" label="Renderer"/>
+ <int value="3" label="Gpu"/>
</enum>
<enum name="AndroidResourceExtractionStatus">
@@ -1404,6 +1421,8 @@ uploading your change for review. These are checked by presubmit scripts.
<int value="18" label="LAUNCH_SOURCE_CHROME_INTERNAL"/>
<int value="19" label="LAUNCH_SOURCE_TEST"/>
<int value="20" label="LAUNCH_SOURCE_INSTALLED_NOTIFICATION"/>
+ <int value="21" label="LAUNCH_SOURCE_CONTEXT_MENU"/>
+ <int value="22" label="LAUNCH_SOURCE_ARC"/>
</enum>
<enum name="AppleScriptCommandEvents">
@@ -1550,6 +1569,7 @@ uploading your change for review. These are checked by presubmit scripts.
<int value="0" label="Search Key"/>
<int value="1" label="Shelf Button"/>
<int value="2" label="Swipe Up From Shelf"/>
+ <int value="3" label="Shown Via Tablet Mode Transition"/>
</enum>
<enum name="AppListStateTransitionSource">
@@ -1702,6 +1722,7 @@ uploading your change for review. These are checked by presubmit scripts.
<int value="7" label="Opted Out from OOBE"/>
<int value="8" label="Opted In from session"/>
<int value="9" label="Opted Out from session"/>
+ <int value="10" label="Opted In from OOBE (Configuration)"/>
</enum>
<enum name="ArcOptInCancel">
@@ -1779,6 +1800,19 @@ uploading your change for review. These are checked by presubmit scripts.
<int value="5" label="N_TO_P"/>
</enum>
+<enum name="ArcShareFilesOnExit">
+ <summary>
+ Describes whether Share files feature on ARC is correctly exiting or not
+ </summary>
+ <int value="0" label="SINGLE_FILE_SUCCESS"/>
+ <int value="1" label="SINGLE_FILE_BACKROLLED"/>
+ <int value="2" label="SINGLE_FILE_MISC_ERROR"/>
+ <int value="3" label="MULTIPLE_FILES_SUCCESS"/>
+ <int value="4" label="MULTIPLE_FILES_BACKROLLED"/>
+ <int value="5" label="MULTIPLE_FILES_MISC_ERROR"/>
+ <int value="6" label="BAD_RESPONSE_FROM_DOCUMENTS_UI"/>
+</enum>
+
<enum name="ArcSupervisionTransitionResult">
<summary>
Defines Arc supervision transition success and failure reasons
@@ -1884,6 +1918,28 @@ uploading your change for review. These are checked by presubmit scripts.
<int value="4" label="[80 to 100) (warmest)"/>
</enum>
+<enum name="AssistantEntryPoint">
+ <int value="0" label="kUnspecified"/>
+ <int value="1" label="kDeepLink"/>
+ <int value="2" label="kHotkey"/>
+ <int value="3" label="kHotword"/>
+ <int value="4" label="kLauncherSearchBox"/>
+ <int value="5" label="kLongPressLauncher"/>
+ <int value="6" label="kSetup"/>
+ <int value="7" label="kStylus"/>
+</enum>
+
+<enum name="AssistantExitPoint">
+ <int value="0" label="kUnspecified"/>
+ <int value="1" label="kCloseButton"/>
+ <int value="2" label="kHotkey"/>
+ <int value="3" label="kNewBrowserTabFromServer"/>
+ <int value="4" label="kNewBrowserTabFromUser"/>
+ <int value="5" label="kOutsidePress"/>
+ <int value="6" label="kSetup"/>
+ <int value="7" label="kStylus"/>
+</enum>
+
<enum name="AssistantGestureType">
<int value="0" label="Not recognized"/>
<int value="1" label="Horizontal stroke"/>
@@ -1905,17 +1961,6 @@ uploading your change for review. These are checked by presubmit scripts.
<int value="11" label="READY_SCREEN_CONTINUED"/>
</enum>
-<enum name="AssistantSource">
- <int value="0" label="kUnspecified"/>
- <int value="1" label="kDeepLink"/>
- <int value="2" label="kHotkey"/>
- <int value="3" label="kHotword"/>
- <int value="4" label="kLauncherSearchBox"/>
- <int value="5" label="kLongPressLauncher"/>
- <int value="6" label="kSetup"/>
- <int value="7" label="kStylus"/>
-</enum>
-
<enum name="AsyncDNSConfigParsePosix">
<int value="0" label="OK"/>
<int value="1" label="RES_INIT_FAILED"/>
@@ -2035,6 +2080,15 @@ uploading your change for review. These are checked by presubmit scripts.
<int value="4" label="FAILED_HOSTS">Failed during watching HOSTS.</int>
</enum>
+<enum name="AsyncHitTestReasons">
+ <int value="0" label="Not async hit test"/>
+ <int value="1" label="Iframe has overlapped region"/>
+ <int value="2" label="Iframe is irregularly clipped"/>
+ <int value="3" label="Iframe is not active"/>
+ <int value="4" label="Iframe has perspective transform"/>
+ <int value="5" label="Hit test data submitted by viz hit test draw quad"/>
+</enum>
+
<enum name="AsyncRevalidationResult">
<int value="0" label="LOADED">A new entry was stored in the cache.</int>
<int value="1" label="REVALIDATED">
@@ -2304,6 +2358,9 @@ uploading your change for review. These are checked by presubmit scripts.
</enum>
<enum name="AudioServiceProcessTerminationStatus">
+ <obsolete>
+ Deprecated 10/2018.
+ </obsolete>
<int value="0" label="Disconnected">Normal process termination.</int>
<int value="1" label="Crashed">Process crashed.</int>
<int value="2" label="Killed">
@@ -2465,6 +2522,18 @@ uploading your change for review. These are checked by presubmit scripts.
<int value="4" label="Cannot proceed"/>
</enum>
+<enum name="AutocompleteEvents">
+ <int value="0" label="Suggestions Shown"/>
+ <int value="1" label="Suggestion Selected"/>
+</enum>
+
+<enum name="AutofillCardholderNameFixFlowPromptEvent">
+ <int value="0" label="Shown"/>
+ <int value="1" label="Accepted"/>
+ <int value="2" label="Dismissed"/>
+ <int value="3" label="Closed without user interaction"/>
+</enum>
+
<enum name="AutofillCardUploadDecision">
<obsolete>
Deprecated as of 2/2016, replaced by AutofillCardUploadDecisionExpanded.
@@ -2878,10 +2947,13 @@ uploading your change for review. These are checked by presubmit scripts.
<int value="25"
label="Submitted with fail-luhn-check card without selecting
suggestions (once)"/>
- <int value="26" label="The form changed dynamically"/>
+ <int value="26" label="The form changed dynamically (Deprecated)"/>
<int value="27" label="The form changed dynamically and was fillable"/>
<int value="28" label="The form changed dynamically and was re-filled"/>
<int value="29" label="The form changed dynamically again after the refill"/>
+ <int value="30" label="The popup was suppressed"/>
+ <int value="31" label="The popup was suppressed (once)"/>
+ <int value="32" label="The form was parsed"/>
</enum>
<enum name="AutofillFormSubmittedState">
@@ -2926,12 +2998,17 @@ uploading your change for review. These are checked by presubmit scripts.
<enum name="AutofillLocalCardMigrationDialogOffer">
<int value="0" label="Shown"/>
<int value="1" label="Not shown due to legal message being invalid"/>
+ <int value="2" label="Feedback dialog shown"/>
+ <int value="3" label="Feedback server error dialog shown"/>
</enum>
<enum name="AutofillLocalCardMigrationDialogUserInteraction">
<int value="0" label="User explicitly accepted dialog"/>
<int value="1" label="User explicitly denied dialog"/>
<int value="2" label="User clicked legal message link"/>
+ <int value="3" label="User clicked view card button"/>
+ <int value="4" label="User clicked done button"/>
+ <int value="5" label="User clicked delete card icon"/>
</enum>
<enum name="AutofillMacAddressBook">
@@ -2945,6 +3022,21 @@ uploading your change for review. These are checked by presubmit scripts.
<int value="2" label="Manage cards button pressed"/>
</enum>
+<enum name="AutofillMetadataEncodingType">
+ <int value="-1" label="Invalid"/>
+ <int value="0" label="Bit 0"/>
+ <int value="1" label="Bit 1"/>
+ <int value="2" label="Bit 2"/>
+ <int value="3" label="Bit 3"/>
+ <int value="4" label="Bit 4"/>
+ <int value="5" label="Bit 5"/>
+ <int value="6" label="Bit 6"/>
+ <int value="7" label="Bit 7"/>
+ <int value="8" label="Even Bits"/>
+ <int value="9" label="Odd Bits"/>
+ <int value="10" label="All Bits"/>
+</enum>
+
<enum name="AutofillProfileAction">
<int value="0" label="Existing profile used"/>
<int value="1" label="Existing profile updated"/>
@@ -2988,6 +3080,13 @@ uploading your change for review. These are checked by presubmit scripts.
<int value="2" label="Bad Rationalization"/>
</enum>
+<enum name="AutofillSaveCardRequestExpirationDateReason">
+ <int value="0" label="Has empty month only"/>
+ <int value="1" label="Has empty year only"/>
+ <int value="2" label="Has both empty month and year"/>
+ <int value="3" label="Has expired expiration date"/>
+</enum>
+
<enum name="AutofillSaveCreditCardPrompt">
<int value="0" label="Show requested"/>
<int value="1" label="Shown"/>
@@ -3007,6 +3106,7 @@ uploading your change for review. These are checked by presubmit scripts.
label="CVC fix flow ended, navigated away from page while prompt hidden"/>
<int value="13"
label="CVC fix flow dismissed, user clicked a legal message link"/>
+ <int value="14" label="Omnibox icon shown, but not bubble (max strikes)"/>
</enum>
<enum name="AutofillSaveType">
@@ -3074,6 +3174,13 @@ uploading your change for review. These are checked by presubmit scripts.
<int value="3" label="Expiration date did not match, masked server card"/>
</enum>
+<enum name="AutofillSyncState">
+ <int value="0" label="Signed Out"/>
+ <int value="1" label="Signed In"/>
+ <int value="2" label="Signed In and Wallet Sync Transport Enabled"/>
+ <int value="3" label="Signed In and Sync Feature Enabled"/>
+</enum>
+
<enum name="AutofillTypeQuality">
<int value="0" label="Unknown"/>
<int value="1" label="Match"/>
@@ -3215,6 +3322,38 @@ uploading your change for review. These are checked by presubmit scripts.
<int value="2" label="dual source"/>
</enum>
+<enum name="AutoScreenBrightnessAlsReaderStatus">
+ <int value="0" label="Success"/>
+ <int value="1" label="InProgress"/>
+ <int value="2" label="Disabled"/>
+ <int value="3" label="IncorrectConfig"/>
+ <int value="4" label="MissingPath"/>
+</enum>
+
+<enum name="AutoScreenBrightnessBrightnessMonitorStatus">
+ <int value="0" label="Initializing"/>
+ <int value="1" label="Success"/>
+ <int value="2" label="Disabled"/>
+</enum>
+
+<enum name="AutoScreenBrightnessDataError">
+ <int value="0" label="kAlsValue"/>
+ <int value="1" label="kBrightnessPercent"/>
+</enum>
+
+<enum name="AutoScreenBrightnessParameterError">
+ <int value="0" label="ModelError"/>
+ <int value="1" label="AdapterError"/>
+</enum>
+
+<enum name="AutoScreenBrightnessUserAdjustment">
+ <obsolete>
+ Deprecated as of 11/2018. The corresponding histogram has been deprecated.
+ </obsolete>
+ <int value="0" label="NoPriorModelAdjustment"/>
+ <int value="1" label="WithPriorModelAdjustment"/>
+</enum>
+
<enum name="AutoSigninFirstRun">
<int value="0" label="No action"/>
<int value="1" label="Turn off"/>
@@ -3319,7 +3458,8 @@ uploading your change for review. These are checked by presubmit scripts.
<int value="13" label="Download resumption task"/>
<int value="14" label="Feed refresh task"/>
<int value="15" label="Component update task"/>
- <int value="16" label="Explore Sites refresh task"/>
+ <int value="16" label="Deprecated Explore Sites refresh task"/>
+ <int value="17" label="Explore Sites refresh task"/>
</enum>
<enum name="BackgroundTracingState">
@@ -3362,7 +3502,7 @@ uploading your change for review. These are checked by presubmit scripts.
<int value="4" label="RFH_NO_PROXY_TO_PARENT"/>
<int value="5" label="RPH_DESERIALIZATION_FAILED"/>
<int value="6" label="OBSOLETE_RVH_CAN_ACCESS_FILES_OF_PAGE_STATE"/>
- <int value="7" label="RFH_FILE_CHOOSER_PATH"/>
+ <int value="7" label="OBSOLETE_RFH_FILE_CHOOSER_PATH"/>
<int value="8" label="OBSOLETE_RWH_SYNTHETIC_GESTURE"/>
<int value="9" label="OBSOLETE_RWH_FOCUS"/>
<int value="10" label="OBSOLETE_RWH_BLUR"/>
@@ -3576,6 +3716,10 @@ uploading your change for review. These are checked by presubmit scripts.
<int value="204" label="RFPH_BLOB_URL_TOKEN_FOR_NON_BLOB_URL"/>
<int value="205" label="RFH_ERROR_PROCESS_NON_ERROR_COMMIT"/>
<int value="206" label="RFH_ERROR_PROCESS_NON_UNIQUE_ORIGIN_COMMIT"/>
+ <int value="207" label="RFH_CANNOT_RENDER_FALLBACK_CONTENT"/>
+ <int value="208" label="RFH_CHILD_FRAME_NEEDS_OWNER_ELEMENT_TYPE"/>
+ <int value="209" label="RFH_INVALID_WEB_REPORTING_CRASH_ID"/>
+ <int value="210" label="RFH_DETACH_MAIN_FRAME"/>
</enum>
<enum name="BadMessageReasonExtensions">
@@ -4210,6 +4354,11 @@ uploading your change for review. These are checked by presubmit scripts.
<int value="1" label="Allowed"/>
</enum>
+<enum name="BooleanAnchorElementSameHost">
+ <int value="0" label="Anchor element has different host than document host"/>
+ <int value="1" label="Anchor element has same host as document host"/>
+</enum>
+
<enum name="BooleanAttached">
<int value="0" label="Detached"/>
<int value="1" label="Attached"/>
@@ -4245,6 +4394,11 @@ uploading your change for review. These are checked by presubmit scripts.
<int value="1" label="Broken"/>
</enum>
+<enum name="BooleanBrowserSwitch">
+ <int value="0" label="Stay"/>
+ <int value="1" label="Switch browser"/>
+</enum>
+
<enum name="BooleanCacheHit">
<int value="0" label="Miss"/>
<int value="1" label="Hit"/>
@@ -4845,6 +4999,11 @@ uploading your change for review. These are checked by presubmit scripts.
<int value="1" label="On Battery"/>
</enum>
+<enum name="BooleanOptedIn">
+ <int value="0" label="Not opted-in"/>
+ <int value="1" label="Opted-in"/>
+</enum>
+
<enum name="BooleanOriginHeaderSameAsRequestOrigin">
<int value="0" label="Headers differ"/>
<int value="1" label="Headers match"/>
@@ -5315,6 +5474,15 @@ uploading your change for review. These are checked by presubmit scripts.
<int value="31" label="Chooser Permissions Bubble"/>
</enum>
+<enum name="CachedImageFetcherEvent">
+ <int value="0" label="Request for an image"/>
+ <int value="1" label="Cache hit"/>
+ <int value="2" label="Cache miss"/>
+ <int value="3" label="Cache decoding error"/>
+ <int value="4" label="Network transcoding error"/>
+ <int value="5" label="Failure to fetch the image from the network"/>
+</enum>
+
<enum name="CacheResult">
<int value="0" label="MEMORY_CACHE_HIT"/>
<int value="1" label="DISK_CACHE_HIT"/>
@@ -5347,6 +5515,7 @@ uploading your change for review. These are checked by presubmit scripts.
<int value="20" label="kDeleteImplBackendClosed"/>
<int value="21" label="kKeysImplBackendClosed"/>
<int value="22" label="kCreateBackendDidCreateFailed"/>
+ <int value="23" label="kStorageGetAllMatchedEntriesBackendClosed"/>
</enum>
<enum name="CacheStorageErrorType">
@@ -5417,9 +5586,17 @@ uploading your change for review. These are checked by presubmit scripts.
<int value="3" label="webgl"/>
<int value="4" label="webgl2"/>
<int value="5" label="bitmaprenderer"/>
+ <int value="6" label="XRP present"/>
+ <int value="7" label="webgl2-compute"/>
+ <int value="8" label="unknown"/>
</enum>
<enum name="CanvasContextUsage">
+ <obsolete>
+ Deprecated 10/2018 Blink.Canvas.IsComposited,
+ Blink.Canvas.ResourceProviderIsAccelerated,
+ Blink.Canvas.ResourceProviderType and Blink.Canvas.2DLayerBridgeIsDeferred
+ </obsolete>
<int value="0" label="CanvasCreated"/>
<int value="1" label="GPUAccelerated2DCanvasImageBufferCreated"/>
<int value="2" label="(obsolete) DisplayList2DCanvasImageBufferCreated"/>
@@ -5433,14 +5610,14 @@ uploading your change for review. These are checked by presubmit scripts.
</enum>
<enum name="CanvasCreateImageBitmapSource">
- <int value="0" label="CreateImageBitmapFromBlob"/>
- <int value="1" label="CreateImageBitmapFromImageBitmap"/>
- <int value="2" label="CreateImageBitmapFromImageData"/>
- <int value="3" label="CreateImageBitmapFromHTMLCanvasElement"/>
- <int value="4" label="CreateImageBitmapFromHTMLImageElement"/>
- <int value="5" label="CreateImageBitmapFromHTMLVideoElement"/>
- <int value="6" label="CreateImageBitmapFromOffscreenCanvas"/>
- <int value="7" label="CreateImageBitmapFromSVGImageElement"/>
+ <int value="0" label="Blob"/>
+ <int value="1" label="ImageBitmap"/>
+ <int value="2" label="ImageData"/>
+ <int value="3" label="HTML Canvas Element"/>
+ <int value="4" label="HTML Image Element"/>
+ <int value="5" label="HTML Video Element"/>
+ <int value="6" label="OffscreenCanvas"/>
+ <int value="7" label="SVG Image Element"/>
</enum>
<enum name="CanvasDisplayListFallbackReason">
@@ -5487,31 +5664,36 @@ uploading your change for review. These are checked by presubmit scripts.
</enum>
<enum name="CanvasGPUAccelerated2DCanvasDisableDeferralReason">
- <int value="0" label="Unknown (Should not be seen in production)."/>
- <int value="1" label="Canvas not cleared between consecutive frames."/>
- <int value="2"
- label="Canvas state stack too large (unbalanced save/restore?)."/>
- <int value="3" label="Direct pixel write."/>
- <int value="4" label="Draw image of animated 2d canvas"/>
- <int value="5" label="Sub-pixel text anti-aliasing support (expect 0)"/>
+ <int value="0" label="Unknown (Should not be seen in production)"/>
+ <int value="1" label="Expensive overdraw heuristic"/>
+ <int value="2" label="Using texture backed pattern"/>
+ <int value="3" label="Draw image of video"/>
+ <int value="4" label="Draw image of animated 2D canvas"/>
+ <int value="5" label="Sub-pixel text anti-aliasing support"/>
<int value="6" label="drawImage called with a texture backed source image"/>
<int value="7" label="Running on low-end device"/>
</enum>
<enum name="CanvasHibernationEvent">
- <int value="0" label="HibernationScheduled"/>
+ <int value="0" label="Scheduled"/>
<int value="1"
- label="HibernationAbortedDueToDestructionWhileHibernatePending"/>
- <int value="2" label="HibernationAbortedDueToPendingDestruction (obsolete)"/>
- <int value="3" label="HibernationAbortedDueToVisibilityChange"/>
- <int value="4" label="HibernationAbortedDueGpuContextLoss"/>
- <int value="5" label="HibernationAbortedDueToSwitchToUnacceleratedRendering"/>
- <int value="6" label="HibernationAbortedDueToAllocationFailure"/>
- <int value="7" label="HibernationEndedNormally"/>
- <int value="8" label="HibernationEndedWithSwitchToBackgroundRendering"/>
- <int value="9" label="HibernationEndedWithFallbackToSW"/>
- <int value="10" label="HibernationEndedWithTeardown"/>
- <int value="11" label="HibernationAbortedBecauseNoSurface"/>
+ label="Aborted due to destruction while hibernate was pending"/>
+ <int value="2" label="Aborted due to pending destruction (obsolete)"/>
+ <int value="3" label="Aborted due to visibility change"/>
+ <int value="4" label="Aborted due to GPU Context loss"/>
+ <int value="5" label="Aborted due to switch to unaccelerated rendering"/>
+ <int value="6" label="Aborted due to allocation failure"/>
+ <int value="7" label="Ended normally"/>
+ <int value="8" label="Ended with switch to background rendering"/>
+ <int value="9" label="Ended with fallback to software"/>
+ <int value="10" label="Ended with teardown"/>
+ <int value="11" label="Aborted because there was no surface"/>
+</enum>
+
+<enum name="CanvasResourceProviderType">
+ <int value="0" label="Texture"/>
+ <int value="1" label="Bitmap"/>
+ <int value="2" label="Shared Bitmap"/>
</enum>
<enum name="CAPSUpdaterStep">
@@ -6941,6 +7123,12 @@ histogram as enum -->
<int value="2" label="Read Text"/>
</enum>
+<enum name="ClockdriftLevel">
+ <int value="0" label="None"/>
+ <int value="1" label="Probable"/>
+ <int value="2" label="Verified"/>
+</enum>
+
<enum name="ClockStates">
<int value="0"
label="CLOCK_STATE_UNKNOWN: accuracy of system clock is unknown"/>
@@ -7847,6 +8035,13 @@ Called by update_net_error_codes.py.-->
<int value="37" label="Client hints setting"/>
<int value="38" label="Sensors setting"/>
<int value="39" label="Accessibility events setting"/>
+ <int value="40" label="Clipboard read"/>
+ <int value="41" label="Clipboard write"/>
+ <int value="42" label="Plugins data"/>
+ <int value="43" label="Payment handler"/>
+ <int value="44" label="USB guard"/>
+ <int value="45" label="Background fetch"/>
+ <int value="46" label="Intent picker display"/>
</enum>
<enum name="ContentTypeParseableResult">
@@ -7989,6 +8184,7 @@ Called by update_net_error_codes.py.-->
<int value="35" label="Open in browser (CCT)"/>
<int value="36" label="Open in Chrome (Fullscreen)"/>
<int value="37" label="Share link"/>
+ <int value="38" label="Sneak peek (Ephemeral tab)"/>
</enum>
<enum name="ContextMenuSaveImage">
@@ -8941,6 +9137,7 @@ Called by update_net_error_codes.py.-->
<int value="2" label="INSTALL_FAILURE"/>
<int value="3" label="MOUNT_FAILURE"/>
<int value="4" label="COMPATIBILITY_CHECK_FAILED"/>
+ <int value="5" label="NOT_FOUND"/>
</enum>
<enum name="CrosDictationToggleDictationMethod">
@@ -9212,6 +9409,10 @@ Called by update_net_error_codes.py.-->
<int value="1" label="Click"/>
</enum>
+<enum name="CrosSystemTrayManagedType">
+ <int value="0" label="Enterprise"/>
+</enum>
+
<enum name="CrosSystemTrayToggleExpanded">
<int value="0" label="Toggled by button"/>
<int value="1" label="Toggled by gesture"/>
@@ -9235,6 +9436,17 @@ Called by update_net_error_codes.py.-->
<int value="8" label="Error Offline"/>
<int value="9" label="Error Fetching Ssh Keys"/>
<int value="10" label="Error Mounting Container"/>
+ <int value="11" label="Error Setting Up Container"/>
+ <int value="12" label="User Cancelled At Start"/>
+ <int value="13" label="User Cancelled While Installing Image Loader"/>
+ <int value="14" label="User Cancelled While Starting Concierge"/>
+ <int value="15" label="User Cancelled While Creating Disk Image"/>
+ <int value="16" label="User Cancelled While Starting Termina VM"/>
+ <int value="17" label="User Cancelled While Creating Container"/>
+ <int value="18" label="User Cancelled While Starting Container"/>
+ <int value="19" label="User Cancelled While Setting Up Container"/>
+ <int value="20" label="User Cancelled While Fetching SSH Keys"/>
+ <int value="21" label="User Cancelled While Mounting Container"/>
</enum>
<enum name="CrostiniUISurface">
@@ -9257,6 +9469,18 @@ Called by update_net_error_codes.py.-->
<int value="5" label="Failed to query dictionary attack counter"/>
</enum>
+<enum name="CryptAuthSoftwareFeature">
+ <int value="0" label="UNKNOWN_FEATURE"/>
+ <int value="1" label="BETTER_TOGETHER_HOST"/>
+ <int value="2" label="BETTER_TOGETHER_CLIENT"/>
+ <int value="3" label="EASY_UNLOCK_HOST"/>
+ <int value="4" label="EASY_UNLOCK_CLIENT"/>
+ <int value="5" label="MAGIC_TETHER_HOST"/>
+ <int value="6" label="MAGIC_TETHER_CLIENT"/>
+ <int value="7" label="SMS_CONNECT_HOST"/>
+ <int value="8" label="SMS_CONNECT_CLIENT"/>
+</enum>
+
<enum name="CryptohomeChecksumStatus">
<int value="0" label="Checksum OK"/>
<int value="1" label="Checksum does not exist"/>
@@ -10359,6 +10583,7 @@ Called by update_net_error_codes.py.-->
<int value="6" label="Failed transparent"/>
<int value="7" label="Failed non-root renderpass"/>
<int value="8" label="Failed too many overlays"/>
+ <int value="9" label="Failed no hw overlay support"/>
</enum>
<enum name="DeclarativeAPIFunctionType">
@@ -10522,6 +10747,11 @@ Called by update_net_error_codes.py.-->
<int value="18" label="YouTube"/>
</enum>
+<enum name="DemoModeIdleLogoutWarningEvent">
+ <int value="0" label="Shown"/>
+ <int value="1" label="Canceled"/>
+</enum>
+
<enum name="DemoModeResourcesRemovalReason">
<int value="0" label="Low available disk space"/>
<int value="1" label="Device enterprise enrolled"/>
@@ -10560,6 +10790,9 @@ Called by update_net_error_codes.py.-->
</enum>
<enum name="DesktopIOSPromotionDismissalReason">
+ <obsolete>
+ Deprecated 11/2018 in issue 894963.
+ </obsolete>
<int value="0" label="Focus lost."/>
<int value="1" label="No thanks clicked."/>
<int value="2" label="Close button clicked."/>
@@ -10568,6 +10801,9 @@ Called by update_net_error_codes.py.-->
</enum>
<enum name="DesktopIOSPromotionEntryPoint">
+ <obsolete>
+ Deprecated 11/2018 in issue 894963.
+ </obsolete>
<int value="1" label="Save Passwords new bubble."/>
<int value="2" label="Bookmarks new bubble."/>
<int value="3" label="Bookmarks footnote."/>
@@ -10696,6 +10932,7 @@ Called by update_net_error_codes.py.-->
<int value="30" label="Audits finished"/>
<int value="31" label="Showed third party badges"/>
<int value="32" label="Audits' view trace clicked"/>
+ <int value="33" label="Network panel film strip started recording"/>
</enum>
<enum name="DevToolsPanel">
@@ -11595,6 +11832,26 @@ Called by update_net_error_codes.py.-->
<int value="0" label="UNDETERMINED"/>
</enum>
+<enum name="DownloadARModelState">
+ <int value="0" label="Created">
+ AR model download was created but not yet started.
+ </int>
+ <int value="1" label="Started">AR model download was started.</int>
+ <int value="2" label="Successful">AR model download was successful.</int>
+ <int value="3" label="Unauthorized Failure">
+ AR model download failed due to either a 401 or 403 HTTP response.
+ </int>
+ <int value="4" label="Wrong MIME Type Failure">
+ AR model download did not download the correct MIME type. This can happen in
+ the case of web server redirects.
+ </int>
+ <int value="5" label="Other Failure">
+ AR model download failed for a reason other than 401/403 HTTP response or
+ incorrect MIME type. Does not include items already counted in the more
+ specific buckets, e.g., UnauthorizedFailure and WrongMimeTypeFailure.
+ </int>
+</enum>
+
<enum name="DownloadAudioType">
<int value="0" label="UNRECOGNIZED"/>
<int value="1" label="AAC"/>
@@ -11639,6 +11896,7 @@ Called by update_net_error_codes.py.-->
<int value="8" label="Has percent encoded strings"/>
<int value="9" label="Has RFC 2047 encoded strings"/>
<int value="10" label="Has 'name' attribute only (Obsolete 04/2015)"/>
+ <int value="11" label="Filename is a single quoted string"/>
</enum>
<enum name="DownloadContentType">
@@ -11773,6 +12031,27 @@ Called by update_net_error_codes.py.-->
</int>
</enum>
+<enum name="DownloadFrameGesture">
+ <obsolete>
+ Deprecated 11/2018.
+ </obsolete>
+ <summary>
+ The type of frame in which a download occurs and whether the download
+ involves a transient user gesture. It is only recorded for downloads
+ originated from navigations or from HTML anchor download attributes.
+ </summary>
+ <int value="0" label="MainFrame_NoGesture"/>
+ <int value="1" label="MainFrame_Gesture"/>
+ <int value="2" label="SameOriginAdSubframe_NoGesture"/>
+ <int value="3" label="SameOriginAdSubframe_Gesture"/>
+ <int value="4" label="SameOriginNonAdSubframe_NoGesture"/>
+ <int value="5" label="SameOriginNonAdSubframe_Gesture"/>
+ <int value="6" label="CrossOriginAdSubframe_NoGesture"/>
+ <int value="7" label="CrossOriginAdSubframe_Gesture"/>
+ <int value="8" label="CrossOriginNonAdSubframe_NoGesture"/>
+ <int value="9" label="CrossOriginNonAdSubframe_Gesture"/>
+</enum>
+
<enum name="DownloadFunctions">
<int value="0" label="download"/>
<int value="1" label="search"/>
@@ -12159,6 +12438,9 @@ Called by update_net_error_codes.py.-->
<int value="315" label="osax"/>
<int value="316" label="settingcontent-ms"/>
<int value="317" label="oxt"/>
+ <int value="318" label="pyd"/>
+ <int value="319" label="pyo"/>
+ <int value="320" label="desktop"/>
</enum>
<enum name="DownloadItem.DangerType">
@@ -12211,6 +12493,28 @@ Called by update_net_error_codes.py.-->
<int value="6" label="Virtual Contact File">text/vcard MIME type.</int>
<int value="7" label="iCalendar">text/calendar MIME type.</int>
<int value="8" label="Universal Scene Description">model/usd MIME type.</int>
+ <int value="9" label="Apple Disk Image">
+ application/x-apple-diskimage MIME type.
+ </int>
+ <int value="10" label="Apple Installer Package">
+ application/vnd.apple.installer+xml MIME type.
+ </int>
+ <int value="11" label="7 Zip Archive">
+ application/x-7z-compressed MIME type.
+ </int>
+ <int value="12" label="RAR Archive">
+ application/x-rar-compressed MIME type.
+ </int>
+ <int value="13" label="Tar Archive">application/x-tar MIME type.</int>
+ <int value="14" label="Adobe Flash">
+ application/x-shockwave-flash MIME type.
+ </int>
+ <int value="15" label="Amazon Kindle eBook">
+ application/vnd.amazon.ebook MIME type.
+ </int>
+ <int value="16" label="Binary Data">application/octet-stream MIME type.</int>
+ <int value="17" label="Bit Torrent">application/x-bittorrent MIME type.</int>
+ <int value="18" label="Java Archive">application/java-archive MIME type.</int>
</enum>
<enum name="DownloadNotificationForegroundLifecycle">
@@ -12339,6 +12643,9 @@ Called by update_net_error_codes.py.-->
</enum>
<enum name="DrawResult">
+ <obsolete>
+ Deprecated 10/2018.
+ </obsolete>
<int value="0" label="Invalid"/>
<int value="1" label="Success"/>
<int value="2" label="Abort: checkerboard animation"/>
@@ -12455,6 +12762,9 @@ Called by update_net_error_codes.py.-->
<int value="0" label="Success"/>
<int value="1" label="UnknownFailure"/>
<int value="2" label="TemporaryUnavailable"/>
+ <int value="3" label="InvocationFailure"/>
+ <int value="4" label="UnexpectedDisconnect"/>
+ <int value="5" label="Timeout"/>
</enum>
<enum name="DriveUploadProtocol">
@@ -14180,6 +14490,15 @@ Called by update_net_error_codes.py.-->
<int value="56" label="Store DM token failed">
Failed to store DM token into the local state.
</int>
+ <int value="57" label="License list fetch failed">
+ Failed to get available licenses from server.
+ </int>
+ <int value="58" label="Consumer account with packaged license">
+ Can't enroll a device with a packaged license to a consumer account.
+ </int>
+ <int value="59" label="Device not pre-provisioned">
+ The device is not pre-provisioned for Zero-Touch.
+ </int>
</enum>
<enum name="EnterpriseExistingInstallAttributesLockType">
@@ -14662,7 +14981,7 @@ Called by update_net_error_codes.py.-->
<int value="441" label="ChromeCleanupEnabled"/>
<int value="442" label="ChromeCleanupReportingEnabled"/>
<int value="443" label="DeveloperToolsAvailability"/>
- <int value="444" label="AllowedUILocales"/>
+ <int value="444" label="AllowedLanguages"/>
<int value="445" label="IsolateOriginsAndroid"/>
<int value="446" label="SitePerProcessAndroid"/>
<int value="447" label="ArcAppInstallEventLoggingEnabled"/>
@@ -14710,6 +15029,21 @@ Called by update_net_error_codes.py.-->
<int value="489" label="NTLMShareAuthenticationEnabled"/>
<int value="490" label="NetworkFileSharesPreconfiguredShares"/>
<int value="491" label="AllowWakeLocks"/>
+ <int value="492" label="ScreenBrightnessPercent"/>
+ <int value="493" label="CloudReportingEnabled"/>
+ <int value="494" label="AlternativeBrowserPath"/>
+ <int value="495" label="AlternativeBrowserParameters"/>
+ <int value="496" label="BrowserSwitcherUrlList"/>
+ <int value="497" label="BrowserSwitcherUrlGreylist"/>
+ <int value="498" label="BrowserSwitcherUseIeSitelist"/>
+ <int value="499" label="ReportExtensionsAndPluginsData"/>
+ <int value="500" label="ReportSafeBrowsingData"/>
+ <int value="501" label="DeviceWiFiFastTransitionEnabled"/>
+ <int value="502" label="DeviceDisplayResolution"/>
+ <int value="503" label="PluginVmAllowed"/>
+ <int value="504" label="PluginVmImage"/>
+ <int value="505" label="CloudManagementEnrollmentMandatory"/>
+ <int value="521" label="ForceNetworkInProcess"/>
</enum>
<enum name="EnterprisePolicyInvalidations">
@@ -15133,6 +15467,11 @@ Called by update_net_error_codes.py.-->
<int value="8" label="Undefined"/>
</enum>
+<enum name="ExitConcurrentPlaybackContents">
+ <int value="0" label="Most recently audible web contents"/>
+ <int value="1" label="Older audible web contents"/>
+</enum>
+
<enum name="ExpectCTHeaderResult">
<int value="0" label="EXPECT_CT_HEADER_BAD_VALUE"/>
<int value="1" label="EXPECT_CT_HEADER_BUILD_NOT_TIMELY"/>
@@ -15378,8 +15717,8 @@ Called by update_net_error_codes.py.-->
<int value="84" label="DOWNLOADS_ON_CREATED"/>
<int value="85" label="DOWNLOADS_ON_DETERMINING_FILENAME"/>
<int value="86" label="DOWNLOADS_ON_ERASED"/>
- <int value="87" label="EASY_UNLOCK_PRIVATE_ON_START_AUTO_PAIRING"/>
- <int value="88" label="EASY_UNLOCK_PRIVATE_ON_USER_INFO_UPDATED"/>
+ <int value="87" label="DELETED_EASY_UNLOCK_PRIVATE_ON_START_AUTO_PAIRING"/>
+ <int value="88" label="DELETED_EASY_UNLOCK_PRIVATE_ON_USER_INFO_UPDATED"/>
<int value="89" label="DELETED_EXPERIENCE_SAMPLING_PRIVATE_ON_DECISION"/>
<int value="90" label="DELETED_EXPERIENCE_SAMPLING_PRIVATE_ON_DISPLAYED"/>
<int value="91" label="EXPERIMENTAL_DEVTOOLS_CONSOLE_ON_MESSAGE_ADDED"/>
@@ -15535,7 +15874,8 @@ Called by update_net_error_codes.py.-->
<int value="239" label="SOCKETS_UDP_ON_RECEIVE"/>
<int value="240" label="SOCKETS_UDP_ON_RECEIVE_ERROR"/>
<int value="241" label="STORAGE_ON_CHANGED"/>
- <int value="242" label="STREAMS_PRIVATE_ON_EXECUTE_MIME_TYPE_HANDLER"/>
+ <int value="242"
+ label="DELETED_STREAMS_PRIVATE_ON_EXECUTE_MIME_TYPE_HANDLER"/>
<int value="243" label="SYNC_FILE_SYSTEM_ON_FILE_STATUS_CHANGED"/>
<int value="244" label="SYNC_FILE_SYSTEM_ON_SERVICE_STATUS_CHANGED"/>
<int value="245" label="SYSTEM_DISPLAY_ON_DISPLAY_CHANGED"/>
@@ -15597,7 +15937,7 @@ Called by update_net_error_codes.py.-->
<int value="301" label="WEBRTC_AUDIO_PRIVATE_ON_SINKS_CHANGED"/>
<int value="302" label="WEBSTORE_ON_DOWNLOAD_PROGRESS"/>
<int value="303" label="WEBSTORE_ON_INSTALL_STAGE_CHANGED"/>
- <int value="304" label="WEBSTORE_WIDGET_PRIVATE_ON_SHOW_WIDGET"/>
+ <int value="304" label="DELETED_WEBSTORE_WIDGET_PRIVATE_ON_SHOW_WIDGET"/>
<int value="305" label="WEBVIEW_TAG_CLOSE"/>
<int value="306" label="WEBVIEW_TAG_CONSOLEMESSAGE"/>
<int value="307" label="WEBVIEW_TAG_CONTENTLOAD"/>
@@ -15633,8 +15973,8 @@ Called by update_net_error_codes.py.-->
<int value="337" label="DIAL_ON_ERROR"/>
<int value="338" label="CAST_CHANNEL_ON_MESSAGE"/>
<int value="339" label="CAST_CHANNEL_ON_ERROR"/>
- <int value="340" label="SCREENLOCK_PRIVATE_ON_CHANGED"/>
- <int value="341" label="SCREENLOCK_PRIVATE_ON_AUTH_ATTEMPTED"/>
+ <int value="340" label="DELETED_SCREENLOCK_PRIVATE_ON_CHANGED"/>
+ <int value="341" label="DELETED_SCREENLOCK_PRIVATE_ON_AUTH_ATTEMPTED"/>
<int value="342" label="TYPES_CHROME_SETTING_ON_CHANGE"/>
<int value="343"
label="DELETED_TYPES_PRIVATE_CHROME_DIRECT_SETTING_ON_CHANGE"/>
@@ -15685,9 +16025,10 @@ Called by update_net_error_codes.py.-->
<int value="386" label="WEB_VIEW_INTERNAL_ON_BEFORE_REDIRECT"/>
<int value="387" label="WEB_VIEW_INTERNAL_ON_ERROR_OCCURRED"/>
<int value="388" label="WEB_VIEW_INTERNAL_ON_SEND_HEADERS"/>
- <int value="389" label="EASY_UNLOCK_PRIVATE_ON_CONNECTION_STATUS_CHANGED"/>
- <int value="390" label="EASY_UNLOCK_PRIVATE_ON_DATA_RECEIVED"/>
- <int value="391" label="EASY_UNLOCK_PRIVATE_ON_SEND_COMPLETED"/>
+ <int value="389"
+ label="DELETED_EASY_UNLOCK_PRIVATE_ON_CONNECTION_STATUS_CHANGED"/>
+ <int value="390" label="DELETED_EASY_UNLOCK_PRIVATE_ON_DATA_RECEIVED"/>
+ <int value="391" label="DELETED_EASY_UNLOCK_PRIVATE_ON_SEND_COMPLETED"/>
<int value="392" label="DISPLAY_SOURCE_ON_SINKS_UPDATED"/>
<int value="393" label="INPUT_IME_ON_COMPOSITION_BOUNDS_CHANGED"/>
<int value="394" label="INPUT_METHOD_PRIVATE_ON_IME_MENU_ACTIVATION_CHANGED"/>
@@ -15728,6 +16069,9 @@ Called by update_net_error_codes.py.-->
<int value="423" label="SYSTEM_POWER_SOURCE_ONPOWERCHANGED"/>
<int value="424" label="WEB_REQUEST_ON_ACTION_IGNORED"/>
<int value="425" label="ARC_APPS_PRIVATE_ON_INSTALLED"/>
+ <int value="426"
+ label="FILE_MANAGER_PRIVATE_ON_CROSTINI_SHARED_PATHS_CHANGED"/>
+ <int value="427" label="AUTOMATION_INTERNAL_ON_GET_TEXT_LOCATION_RESULT"/>
</enum>
<enum name="ExtensionFileWriteResult">
@@ -16381,9 +16725,9 @@ Called by update_net_error_codes.py.-->
<int value="626" label="BOOKMARKMANAGERPRIVATE_SETMETAINFO"/>
<int value="627" label="FILESYSTEMPROVIDER_MOUNT"/>
<int value="628" label="AUTOTESTPRIVATE_GETEXTENSIONSINFO"/>
- <int value="629" label="SCREENLOCKPRIVATE_GETLOCKED"/>
- <int value="630" label="SCREENLOCKPRIVATE_SETLOCKED"/>
- <int value="631" label="SCREENLOCKPRIVATE_SHOWMESSAGE"/>
+ <int value="629" label="DELETED_SCREENLOCKPRIVATE_GETLOCKED"/>
+ <int value="630" label="DELETED_SCREENLOCKPRIVATE_SETLOCKED"/>
+ <int value="631" label="DELETED_SCREENLOCKPRIVATE_SHOWMESSAGE"/>
<int value="632" label="FEEDBACKPRIVATE_GETHISTOGRAMS"/>
<int value="633" label="SYSTEM_NETWORK_GETNETWORKINTERFACES"/>
<int value="634" label="SERIAL_GETDEVICES"/>
@@ -16405,7 +16749,7 @@ Called by update_net_error_codes.py.-->
<int value="649" label="MEDIAGALLERIES_GETMETADATA"/>
<int value="650" label="INPUT_IME_SENDKEYEVENTS"/>
<int value="651" label="VIRTUALKEYBOARDPRIVATE_LOCKKEYBOARD"/>
- <int value="652" label="SCREENLOCKPRIVATE_SHOWCUSTOMICON"/>
+ <int value="652" label="DELETED_SCREENLOCKPRIVATE_SHOWCUSTOMICON"/>
<int value="653" label="INPUT_IME_HIDEINPUTVIEW"/>
<int value="654" label="BOOKMARKMANAGERPRIVATE_UNDO"/>
<int value="655" label="BOOKMARKMANAGERPRIVATE_REDO"/>
@@ -16443,10 +16787,10 @@ Called by update_net_error_codes.py.-->
<int value="686" label="ACTIVITYLOGPRIVATE_DELETEACTIVITIES"/>
<int value="687" label="NETWORKINGPRIVATE_SETWIFITDLSENABLEDSTATE"/>
<int value="688" label="NETWORKINGPRIVATE_GETWIFITDLSSTATUS"/>
- <int value="689" label="SCREENLOCKPRIVATE_HIDECUSTOMICON"/>
- <int value="690" label="SCREENLOCKPRIVATE_SETAUTHTYPE"/>
- <int value="691" label="SCREENLOCKPRIVATE_GETAUTHTYPE"/>
- <int value="692" label="SCREENLOCKPRIVATE_ACCEPTAUTHATTEMPT"/>
+ <int value="689" label="DELETED_SCREENLOCKPRIVATE_HIDECUSTOMICON"/>
+ <int value="690" label="DELETED_SCREENLOCKPRIVATE_SETAUTHTYPE"/>
+ <int value="691" label="DELETED_SCREENLOCKPRIVATE_GETAUTHTYPE"/>
+ <int value="692" label="DELETED_SCREENLOCKPRIVATE_ACCEPTAUTHATTEMPT"/>
<int value="693" label="DELETED_WEBVIEW_FIND"/>
<int value="694" label="DELETED_WEBVIEW_STOPFINDING"/>
<int value="695" label="DELETED_WEBVIEW_CONTEXTMENUSCREATE"/>
@@ -16549,7 +16893,7 @@ Called by update_net_error_codes.py.-->
<int value="780" label="ENTERPRISE_PLATFORMKEYS_IMPORTCERTIFICATE"/>
<int value="781" label="ENTERPRISE_PLATFORMKEYS_REMOVECERTIFICATE"/>
<int value="782" label="FILEMANAGERPRIVATE_OPENINSPECTOR"/>
- <int value="783" label="STREAMSPRIVATE_ABORT"/>
+ <int value="783" label="DELETED_STREAMSPRIVATE_ABORT"/>
<int value="784" label="MANAGEMENT_SETLAUNCHTYPE"/>
<int value="785" label="MANAGEMENT_GENERATEAPPFORLINK"/>
<int value="786" label="DELETED_GUESTVIEWINTERNAL_ALLOCATEINSTANCEID"/>
@@ -16609,18 +16953,19 @@ Called by update_net_error_codes.py.-->
<int value="839" label="APPVIEWINTERNAL_ATTACHFRAME"/>
<int value="840" label="APPVIEWINTERNAL_DENYREQUEST"/>
<int value="841" label="FILEMANAGERPRIVATEINTERNAL_GETDOWNLOADURL"/>
- <int value="842" label="EASYUNLOCKPRIVATE_PERFORMECDHKEYAGREEMENT"/>
- <int value="843" label="EASYUNLOCKPRIVATE_GENERATEECP256KEYPAIR"/>
- <int value="844" label="EASYUNLOCKPRIVATE_CREATESECUREMESSAGE"/>
- <int value="845" label="EASYUNLOCKPRIVATE_UNWRAPSECUREMESSAGE"/>
+ <int value="842" label="DELETED_EASYUNLOCKPRIVATE_PERFORMECDHKEYAGREEMENT"/>
+ <int value="843" label="DELETED_EASYUNLOCKPRIVATE_GENERATEECP256KEYPAIR"/>
+ <int value="844" label="DELETED_EASYUNLOCKPRIVATE_CREATESECUREMESSAGE"/>
+ <int value="845" label="DELETED_EASYUNLOCKPRIVATE_UNWRAPSECUREMESSAGE"/>
<int value="846" label="DELETED_LOGPRIVATE_STARTEVENTRECODER"/>
<int value="847" label="DELETED_LOGPRIVATE_STOPEVENTRECODER"/>
<int value="848" label="DELETED_LOGPRIVATE_DUMPLOGS"/>
<int value="849" label="SOCKET_SECURE"/>
<int value="850" label="SOCKETS_TCP_SECURE"/>
<int value="851" label="DELETED_EXPERIENCESAMPLINGPRIVATE_GETBROWSERINFO"/>
- <int value="852" label="EASYUNLOCKPRIVATE_SEEKBLUETOOTHDEVICEBYADDRESS"/>
- <int value="853" label="EASYUNLOCKPRIVATE_GETSTRINGS"/>
+ <int value="852"
+ label="DELETED_EASYUNLOCKPRIVATE_SEEKBLUETOOTHDEVICEBYADDRESS"/>
+ <int value="853" label="DELETED_EASYUNLOCKPRIVATE_GETSTRINGS"/>
<int value="854" label="NOTIFICATIONPROVIDER_SENDONCLEAR"/>
<int value="855" label="NOTIFICATIONPROVIDER_NOTIFYONCLEARED"/>
<int value="856" label="NOTIFICATIONPROVIDER_NOTIFYONCLICKED"/>
@@ -16643,28 +16988,28 @@ Called by update_net_error_codes.py.-->
<int value="873" label="BROWSINGDATA_REMOVESERVICEWORKERS"/>
<int value="874" label="USBPRIVATE_GETDEVICES"/>
<int value="875" label="USBPRIVATE_GETDEVICEINFO"/>
- <int value="876" label="EASYUNLOCKPRIVATE_UPDATESCREENLOCKSTATE"/>
+ <int value="876" label="DELETED_EASYUNLOCKPRIVATE_UPDATESCREENLOCKSTATE"/>
<int value="877" label="CAST_CHANNEL_GETLOGS"/>
- <int value="878" label="EASYUNLOCKPRIVATE_SETPERMITACCESS"/>
- <int value="879" label="EASYUNLOCKPRIVATE_GETPERMITACCESS"/>
- <int value="880" label="EASYUNLOCKPRIVATE_CLEARPERMITACCESS"/>
- <int value="881" label="EASYUNLOCKPRIVATE_SETREMOTEDEVICES"/>
- <int value="882" label="EASYUNLOCKPRIVATE_GETREMOTEDEVICES"/>
+ <int value="878" label="DELETED_EASYUNLOCKPRIVATE_SETPERMITACCESS"/>
+ <int value="879" label="DELETED_EASYUNLOCKPRIVATE_GETPERMITACCESS"/>
+ <int value="880" label="DELETED_EASYUNLOCKPRIVATE_CLEARPERMITACCESS"/>
+ <int value="881" label="DELETED_EASYUNLOCKPRIVATE_SETREMOTEDEVICES"/>
+ <int value="882" label="DELETED_EASYUNLOCKPRIVATE_GETREMOTEDEVICES"/>
<int value="883" label="FILESYSTEMPROVIDER_GETALL"/>
<int value="884"
- label="EASYUNLOCKPRIVATE_CONNECTTOBLUETOOTHSERVICEINSECURELY"/>
+ label="DELETED_EASYUNLOCKPRIVATE_CONNECTTOBLUETOOTHSERVICEINSECURELY"/>
<int value="885" label="MEDIAGALLERIES_ADDGALLERYWATCH"/>
<int value="886" label="MEDIAGALLERIES_REMOVEGALLERYWATCH"/>
<int value="887" label="DELETED_MEDIAGALLERIES_GETALLGALLERYWATCH"/>
<int value="888" label="DELETED_MEDIAGALLERIES_REMOVEALLGALLERYWATCH"/>
<int value="889" label="MANAGEMENT_GETSELF"/>
<int value="890" label="APP_CURRENTWINDOWINTERNAL_SETVISIBLEONALLWORKSPACES"/>
- <int value="891" label="EASYUNLOCKPRIVATE_GETSIGNINCHALLENGE"/>
- <int value="892" label="EASYUNLOCKPRIVATE_TRYSIGNINSECRET"/>
+ <int value="891" label="DELETED_EASYUNLOCKPRIVATE_GETSIGNINCHALLENGE"/>
+ <int value="892" label="DELETED_EASYUNLOCKPRIVATE_TRYSIGNINSECRET"/>
<int value="893" label="ACCESSIBILITY_PRIVATE_SETFOCUSRING"/>
<int value="894" label="USB_GETCONFIGURATION"/>
<int value="895" label="WEBVIEWINTERNAL_SETALLOWTRANSPARENCY"/>
- <int value="896" label="EASYUNLOCKPRIVATE_GETUSERINFO"/>
+ <int value="896" label="DELETED_EASYUNLOCKPRIVATE_GETUSERINFO"/>
<int value="897" label="HOTWORDPRIVATE_GETLAUNCHSTATE"/>
<int value="898" label="HOTWORDPRIVATE_SETHOTWORDALWAYSONSEARCHENABLED"/>
<int value="899" label="WEBVIEWINTERNAL_LOADDATAWITHBASEURL"/>
@@ -16709,26 +17054,26 @@ Called by update_net_error_codes.py.-->
<int value="937" label="DELETED_COPRESENCEENDPOINTS_CREATELOCALENDPOINT"/>
<int value="938" label="DELETED_COPRESENCEENDPOINTS_DESTROYLOCALENDPOINT"/>
<int value="939" label="DELETED_COPRESENCEENDPOINTS_SEND"/>
- <int value="940" label="INLINE_INSTALL_PRIVATE_INSTALL"/>
+ <int value="940" label="DELETED_INLINE_INSTALL_PRIVATE_INSTALL"/>
<int value="941" label="LAUNCHERPAGE_SETENABLED"/>
<int value="942" label="DELETED_CRYPTOTOKENPRIVATE_REQUESTPERMISSION"/>
<int value="943" label="BLUETOOTHPRIVATE_DISCONNECTALL"/>
<int value="944" label="FILEMANAGERPRIVATEINTERNAL_GETMIMETYPE"/>
<int value="945" label="USB_SETCONFIGURATION"/>
- <int value="946" label="EASYUNLOCKPRIVATE_GETCONNECTIONINFO"/>
+ <int value="946" label="DELETED_EASYUNLOCKPRIVATE_GETCONNECTIONINFO"/>
<int value="947" label="FILEMANAGERPRIVATEINTERNAL_COMPUTECHECKSUM"/>
<int value="948" label="PRINTERPROVIDERINTERNAL_REPORTPRINTRESULT"/>
<int value="949" label="PRINTERPROVIDERINTERNAL_REPORTPRINTERCAPABILITY"/>
<int value="950" label="PRINTERPROVIDERINTERNAL_REPORTPRINTERS"/>
<int value="951" label="FILESYSTEMPROVIDER_GET"/>
<int value="952" label="FILEMANAGERPRIVATE_SEARCHFILESBYHASHES"/>
- <int value="953" label="EASYUNLOCKPRIVATE_SHOWERRORBUBBLE"/>
+ <int value="953" label="DELETED_EASYUNLOCKPRIVATE_SHOWERRORBUBBLE"/>
<int value="954" label="EXTENSIONVIEWINTERNAL_NAVIGATE"/>
<int value="955" label="NETWORKING_CONFIG_SETNETWORKFILTER"/>
<int value="956" label="NETWORKING_CONFIG_FINISHAUTHENTICATION"/>
<int value="957" label="PLATFORMKEYSINTERNAL_SELECTCLIENTCERTIFICATES"/>
<int value="958" label="CRYPTOTOKENPRIVATE_CANORIGINASSERTAPPID"/>
- <int value="959" label="EASYUNLOCKPRIVATE_SETAUTOPAIRINGRESULT"/>
+ <int value="959" label="DELETED_EASYUNLOCKPRIVATE_SETAUTOPAIRINGRESULT"/>
<int value="960" label="FILEMANAGERPRIVATE_ISUMAENABLED"/>
<int value="961" label="WEBVIEWINTERNAL_SETALLOWSCALING"/>
<int value="962" label="PLATFORMKEYSINTERNAL_GETPUBLICKEY"/>
@@ -16762,7 +17107,7 @@ Called by update_net_error_codes.py.-->
<int value="989" label="SETTINGSPRIVATE_GETALLPREFS"/>
<int value="990" label="SETTINGSPRIVATE_GETPREF"/>
<int value="991" label="NETWORKINGPRIVATE_FORGETNETWORK"/>
- <int value="992" label="EASYUNLOCKPRIVATE_HIDEERRORBUBBLE"/>
+ <int value="992" label="DELETED_EASYUNLOCKPRIVATE_HIDEERRORBUBBLE"/>
<int value="993" label="WEBVIEWINTERNAL_SETZOOMMODE"/>
<int value="994" label="WEBVIEWINTERNAL_GETZOOMMODE"/>
<int value="995" label="LAUNCHERSEARCHPROVIDER_SETSEARCHRESULTS"/>
@@ -16802,7 +17147,7 @@ Called by update_net_error_codes.py.-->
<int value="1028" label="DELETED_SEARCHENGINESPRIVATE_UPDATESEARCHENGINE"/>
<int value="1029" label="DELETED_SEARCHENGINESPRIVATE_OPTINTOHOTWORDING"/>
<int value="1030" label="WEBSTOREWIDGETPRIVATE_INSTALLWEBSTOREITEM"/>
- <int value="1031" label="WEBSTOREWIDGETPRIVATE_GETSTRINGS"/>
+ <int value="1031" label="DELETED_WEBSTOREWIDGETPRIVATE_GETSTRINGS"/>
<int value="1032" label="WEBRTCDESKTOPCAPTUREPRIVATE_CHOOSEDESKTOPMEDIA"/>
<int value="1033"
label="WEBRTCDESKTOPCAPTUREPRIVATE_CANCELCHOOSEDESKTOPMEDIA"/>
@@ -16859,14 +17204,16 @@ Called by update_net_error_codes.py.-->
<int value="1080" label="CERTIFICATEPROVIDERINTERNAL_REPORTSIGNATURE"/>
<int value="1081" label="CERTIFICATEPROVIDERINTERNAL_REPORTCERTIFICATES"/>
<int value="1082" label="BLUETOOTHPRIVATE_PAIR"/>
- <int value="1083" label="EASYUNLOCKPRIVATE_FINDSETUPCONNECTION"/>
+ <int value="1083" label="DELETED_EASYUNLOCKPRIVATE_FINDSETUPCONNECTION"/>
<int value="1084" label="RESOURCESPRIVATE_GETSTRINGS"/>
<int value="1085" label="USB_GETCONFIGURATIONS"/>
- <int value="1086" label="EASYUNLOCKPRIVATE_SETUPCONNECTIONSTATUS"/>
- <int value="1087" label="EASYUNLOCKPRIVATE_SETUPCONNECTIONDISCONNECT"/>
- <int value="1088" label="EASYUNLOCKPRIVATE_SETUPCONNECTIONSEND"/>
+ <int value="1086" label="DELETED_EASYUNLOCKPRIVATE_SETUPCONNECTIONSTATUS"/>
+ <int value="1087"
+ label="DELETED_EASYUNLOCKPRIVATE_SETUPCONNECTIONDISCONNECT"/>
+ <int value="1088" label="DELETED_EASYUNLOCKPRIVATE_SETUPCONNECTIONSEND"/>
<int value="1089" label="DATAREDUCTIONPROXY_GETDATAUSAGE"/>
- <int value="1090" label="EASYUNLOCKPRIVATE_SETUPCONNECTIONGETDEVICEADDRESS"/>
+ <int value="1090"
+ label="DELETED_EASYUNLOCKPRIVATE_SETUPCONNECTIONGETDEVICEADDRESS"/>
<int value="1091" label="TABCAPTURE_CAPTUREOFFSCREENTAB"/>
<int value="1092" label="LANGUAGESETTINGSPRIVATE_ADDSPELLCHECKWORD"/>
<int value="1093" label="LANGUAGESETTINGSPRIVATE_REMOVESPELLCHECKWORD"/>
@@ -17055,7 +17402,7 @@ Called by update_net_error_codes.py.-->
<int value="1270" label="ENTERPRISEREPORTINGPRIVATE_GETDEVICEID"/>
<int value="1271"
label="ENTERPRISE_HARDWAREPLATFORM_GETHARDWAREPLATFORMINFO"/>
- <int value="1272" label="FILEMANAGERPRIVATEINTERNAL_SHAREPATHWITHCROSTINI"/>
+ <int value="1272" label="FILEMANAGERPRIVATEINTERNAL_SHAREPATHSWITHCROSTINI"/>
<int value="1273" label="AUTOTESTPRIVATE_SETCROSTINIENABLED"/>
<int value="1274" label="AUTOTESTPRIVATE_GETHISTOGRAM"/>
<int value="1275" label="TABCAPTURE_GETMEDIASTREAMID"/>
@@ -17071,7 +17418,20 @@ Called by update_net_error_codes.py.-->
<int value="1285" label="ACCESSIBILITY_PRIVATE_ENABLECHROMEVOXMOUSEEVENTS"/>
<int value="1286" label="ACCESSIBILITY_PRIVATE_SENDSYNTHETICMOUSEEVENT"/>
<int value="1287" label="FILEMANAGERPRIVATE_DETECTCHARACTERENCODING"/>
+ <int value="1288" label="FILEMANAGERPRIVATEINTERNAL_GETLINUXPACKAGEINFO"/>
+ <int value="1289" label="TABS_GOFORWARD"/>
+ <int value="1290" label="TABS_GOBACK"/>
+ <int value="1291"
+ label="BRAILLEDISPLAYPRIVATE_UPDATEBLUETOOTHBRAILLEDISPLAYADDRESS"/>
+ <int value="1292" label="AUTOTESTPRIVATE_SETASSISTANTENABLED"/>
<int value="1293" label="AUTOTESTPRIVATE_ISARCPROVISIONED"/>
+ <int value="1294" label="CRYPTOTOKENPRIVATE_CANPROXYTOWEBAUTHN"/>
+ <int value="1295" label="INPUTMETHODPRIVATE_GETSETTING"/>
+ <int value="1296" label="INPUTMETHODPRIVATE_SETSETTING"/>
+ <int value="1297" label="FILEMANAGERPRIVATEINTERNAL_UNSHAREPATHWITHCROSTINI"/>
+ <int value="1298"
+ label="PASSWORDSPRIVATE_RECORDPASSWORDSPAGEACCESSINSETTINGS"/>
+ <int value="1299" label="AUTOFILLPRIVATE_SERVERCARDLINKCLICKED"/>
</enum>
<enum name="ExtensionIconState">
@@ -17080,6 +17440,34 @@ Called by update_net_error_codes.py.-->
<int value="2" label="OVERFLOWED"/>
</enum>
+<enum name="ExtensionInstallationCrxInstallError">
+ <int value="0" label="NONE"/>
+ <int value="1" label="CONVERT_USER_SCRIPT_TO_EXTENSION_FAILED"/>
+ <int value="2" label="UNEXPECTED_ID"/>
+ <int value="3" label="UNEXPECTED_VERSION"/>
+ <int value="4" label="MISMATCHED_VERSION"/>
+ <int value="5" label="MANIFEST_INVALID"/>
+ <int value="6" label="INSTALL_NOT_ENABLED"/>
+ <int value="7" label="OFFSTORE_INSTALL_DISALLOWED"/>
+ <int value="8" label="INCORRECT_APP_CONTENT_TYPE"/>
+ <int value="9" label="NOT_INSTALLED_FROM_GALLERY"/>
+ <int value="10" label="INCORRECT_INSTALL_HOST"/>
+ <int value="11" label="DEPENDENCY_NOT_SHARED_MODULE"/>
+ <int value="12" label="DEPENDENCY_OLD_VERSION"/>
+ <int value="13" label="DEPENDENCY_NOT_ALLOWLISTED"/>
+ <int value="14" label="UNSUPPORTED_REQUIREMENTS"/>
+ <int value="15" label="EXTENSION_IS_BLOCKLISTED"/>
+ <int value="16" label="DISALLOWED_BY_POLICY"/>
+ <int value="17" label="KIOSK_MODE_ONLY"/>
+ <int value="18" label="OVERLAPPING_WEB_EXTENT"/>
+ <int value="19" label="CANT_DOWNGRADE_VERSION"/>
+ <int value="20" label="MOVE_DIRECTORY_TO_PROFILE_FAILED"/>
+ <int value="21" label="CANT_LOAD_EXTENSION"/>
+ <int value="22" label="USER_CANCELED"/>
+ <int value="23" label="USER_ABORTED"/>
+ <int value="24" label="UPDATE_NON_EXISTING_EXTENSION"/>
+</enum>
+
<enum name="ExtensionInstallationFailureReason">
<int value="0" label="UNKNOWN"/>
<int value="1" label="INVALID_ID"/>
@@ -17099,6 +17487,9 @@ Called by update_net_error_codes.py.-->
<int value="15" label="MANIFEST_FETCH_FAILED"/>
<int value="16" label="MANIFEST_INVALID"/>
<int value="17" label="NO_UPDATE"/>
+ <int value="18" label="CRX_INSTALL_ERROR_DECLINED"/>
+ <int value="19" label="CRX_INSTALL_ERROR_SANDBOXED_UNPACKER_FAILURE"/>
+ <int value="20" label="CRX_INSTALL_ERROR_OTHER"/>
</enum>
<enum name="ExtensionInstallCause">
@@ -17290,7 +17681,7 @@ Called by update_net_error_codes.py.-->
<int value="54" label="kSearchProvider"/>
<int value="55" label="kStartupPages"/>
<int value="56" label="kMediaGalleriesAllGalleriesDelete"/>
- <int value="57" label="kScreenlockPrivate"/>
+ <int value="57" label="kDeleted_ScreenlockPrivate"/>
<int value="58" label="kOverrideBookmarksUI"/>
<int value="59" label="kAutomation"/>
<int value="60" label="kAccessibilityFeaturesModify"/>
@@ -17378,7 +17769,7 @@ Called by update_net_error_codes.py.-->
<int value="52" label="kDownloadsInternal"/>
<int value="53" label="kDownloadsOpen"/>
<int value="54" label="kDownloadsShelf"/>
- <int value="55" label="kEasyUnlockPrivate"/>
+ <int value="55" label="kDeleted_EasyUnlockPrivate"/>
<int value="56" label="kEchoPrivate"/>
<int value="57" label="kEmbeddedExtensionOptions"/>
<int value="58" label="kEnterprisePlatformKeys"/>
@@ -17414,7 +17805,7 @@ Called by update_net_error_codes.py.-->
<int value="88" label="kIdltest"/>
<int value="89" label="kIdle"/>
<int value="90" label="kImeWindowEnabled"/>
- <int value="91" label="kInlineInstallPrivate"/>
+ <int value="91" label="kDeleted_InlineInstallPrivate"/>
<int value="92" label="kInput"/>
<int value="93" label="kInputMethodPrivate"/>
<int value="94" label="kDeleted_InterceptAllKeys"/>
@@ -17490,7 +17881,7 @@ Called by update_net_error_codes.py.-->
<int value="164" label="kWebstoreWidgetPrivate"/>
<int value="165" label="kWebView"/>
<int value="166" label="kWindowShape"/>
- <int value="167" label="kScreenlockPrivate"/>
+ <int value="167" label="kDeleted_ScreenlockPrivate"/>
<int value="168" label="kSystemCpu"/>
<int value="169" label="kSystemMemory"/>
<int value="170" label="kSystemNetwork"/>
@@ -20218,7 +20609,7 @@ Called by update_net_error_codes.py.-->
<int value="2319" label="CSSSelectorWebkitUnknownPseudo"/>
<int value="2320" label="FilterAsContainingBlockMayChangeOutput"/>
<int value="2321" label="DispatchMouseUpDownEventOnDisabledFormControl"/>
- <int value="2322" label="CSSSelectorPseudoMatches"/>
+ <int value="2322" label="CSSSelectorPseudoIs"/>
<int value="2323" label="V8RTCRtpSender_ReplaceTrack_Method"/>
<int value="2324" label="InputTypeFileSecureOriginOpenChooser"/>
<int value="2325" label="InputTypeFileInsecureOriginOpenChooser"/>
@@ -20331,7 +20722,7 @@ Called by update_net_error_codes.py.-->
<int value="2428" label="ShapeOutsideMarginBox"/>
<int value="2429" label="PerformanceTimeline"/>
<int value="2430" label="UserTiming"/>
- <int value="2431" label="CSSSelectorPseudoIS"/>
+ <int value="2431" label="CSSSelectorPseudoWhere"/>
<int value="2432" label="KeyboardApiGetLayoutMap"/>
<int value="2433" label="WebRtcVaapiHWVP8Encoding"/>
<int value="2434" label="PerformanceResourceTimingInitiatorType"/>
@@ -20443,7 +20834,7 @@ Called by update_net_error_codes.py.-->
<int value="2532" label="V8WasmSharedMemory"/>
<int value="2533" label="V8WasmThreadOpcodes"/>
<int value="2534" label="CacheStorageAddAllSuccessWithDuplicate"/>
- <int value="2535" label="LegendDelegateFocusOrAccessKey"/>
+ <int value="2535" label="OBSOLETE_LegendDelegateFocusOrAccessKey"/>
<int value="2536" label="FeaturePolicyReport"/>
<int value="2537" label="V8Window_WebkitRTCPeerConnection_ConstructorGetter"/>
<int value="2538" label="V8Window_WebkitMediaStream_ConstructorGetter"/>
@@ -20524,41 +20915,78 @@ Called by update_net_error_codes.py.-->
<int value="2609" label="V8AttemptOverrideReadOnlyOnPrototypeSloppy"/>
<int value="2610" label="V8AttemptOverrideReadOnlyOnPrototypeStrict"/>
<int value="2611" label="HTMLCanvasElementLowLatency"/>
+ <int value="2612" label="V8OptimizedFunctionWithOneShotBytecode"/>
+ <int value="2613" label="SVGGeometryPropertyHasNonZeroUnitlessValue"/>
+ <int value="2614" label="CSSValueAppearanceNoImplementationSkipBorder"/>
+ <int value="2615" label="InstantiateModuleScript"/>
+ <int value="2616" label="DynamicImportModuleScript"/>
+ <int value="2617" label="HistoryPushState"/>
+ <int value="2618" label="HistoryReplaceState"/>
+ <int value="2619" label="GetDisplayMedia"/>
+ <int value="2620" label="CursorImageGT64x64"/>
+ <int value="2621" label="AdClick"/>
+ <int value="2622" label="UpdateWithoutShippingOptionOnShippingAddressChange"/>
+ <int value="2623" label="UpdateWithoutShippingOptionOnShippingOptionChange"/>
+ <int value="2624" label="CSSSelectorEmptyWhitespaceOnlyFail"/>
+ <int value="2625" label="ActivatedImplicitRootScroller"/>
+ <int value="2626" label="CSSUnknownNamespacePrefixInSelector"/>
+ <int value="2627" label="PageLifeCycleFreeze"/>
+ <int value="2628" label="DefaultInCustomIdent"/>
+ <int value="2629" label="HTMLAnchorElementHrefTranslateAttribute"/>
+ <int value="2630" label="WebKitUserModifyEffective"/>
+ <int value="2631" label="PlainTextEditingEffective"/>
+ <int value="2632" label="NavigationDownloadInSandboxWithUserGesture"/>
+ <int value="2633" label="NavigationDownloadInSandboxWithoutUserGesture"/>
+ <int value="2634" label="LegacyTLSVersionInMainFrameResource"/>
+ <int value="2635" label="LegacyTLSVersionInSubresource"/>
+ <int value="2636" label="LegacyTLSVersionInSubframeMainResource"/>
+ <int value="2637" label="RTCMaxAudioBufferSize"/>
+ <int value="2638" label="WebKitUserModifyReadWriteEffective"/>
+ <int value="2639" label="WebKitUserModifyReadOnlyEffective"/>
+ <int value="2640" label="WebKitUserModifyPlainTextEffective"/>
+ <int value="2641" label="CSSAtRuleFontFeatureValues"/>
+ <int value="2642" label="FlexboxSingleLineAlignContent"/>
+ <int value="2643" label="SignedExchangeInnerResponseInMainFrame"/>
+ <int value="2644" label="SignedExchangeInnerResponseInSubFrame"/>
+ <int value="2645" label="CSSSelectorNotWithValidList"/>
+ <int value="2646" label="CSSSelectorNotWithInvalidList"/>
+ <int value="2647" label="CSSSelectorNotWithPartiallyValidList"/>
</enum>
<enum name="FeaturePolicyFeature">
<!-- Generated from third_party/blink/public/mojom/feature_policy/feature_policy.mojom.-->
- <int value="0" label="kNotFound"/>
- <int value="1" label="kAutoplay"/>
- <int value="2" label="kCamera"/>
- <int value="3" label="kEncryptedMedia"/>
- <int value="4" label="kFullscreen"/>
- <int value="5" label="kGeolocation"/>
- <int value="6" label="kMicrophone"/>
- <int value="7" label="kMidiFeature"/>
- <int value="8" label="kPayment"/>
- <int value="9" label="kSpeaker"/>
- <int value="10" label="kDocumentCookie"/>
- <int value="11" label="kDocumentDomain"/>
- <int value="12" label="kSyncScript"/>
- <int value="13" label="kSyncXHR"/>
- <int value="14" label="kUsb"/>
- <int value="15" label="kAccessibilityEvents"/>
- <int value="16" label="kWebVr"/>
- <int value="17" label="kAccelerometer"/>
- <int value="18" label="kAmbientLightSensor"/>
- <int value="19" label="kGyroscope"/>
- <int value="20" label="kMagnetometer"/>
- <int value="21" label="kUnsizedMedia"/>
- <int value="22" label="kLegacyImageFormats"/>
- <int value="23" label="kImageCompression"/>
- <int value="24" label="kAnimations"/>
- <int value="25" label="kMaxDownscalingImage"/>
- <int value="26" label="kPictureInPicture"/>
- <int value="27" label="kVerticalScroll"/>
- <int value="28" label="kDocumentWrite"/>
- <int value="29" label="kLazyLoad"/>
+ <int value="0" label="NotFound"/>
+ <int value="1" label="Autoplay"/>
+ <int value="2" label="Camera"/>
+ <int value="3" label="EncryptedMedia"/>
+ <int value="4" label="Fullscreen"/>
+ <int value="5" label="Geolocation"/>
+ <int value="6" label="Microphone"/>
+ <int value="7" label="MidiFeature"/>
+ <int value="8" label="Payment"/>
+ <int value="9" label="Speaker"/>
+ <int value="10" label="DocumentCookie"/>
+ <int value="11" label="DocumentDomain"/>
+ <int value="12" label="SyncScript"/>
+ <int value="13" label="SyncXHR"/>
+ <int value="14" label="Usb"/>
+ <int value="15" label="AccessibilityEvents"/>
+ <int value="16" label="WebVr"/>
+ <int value="17" label="Accelerometer"/>
+ <int value="18" label="AmbientLightSensor"/>
+ <int value="19" label="Gyroscope"/>
+ <int value="20" label="Magnetometer"/>
+ <int value="21" label="UnsizedMedia"/>
+ <int value="22" label="LegacyImageFormats"/>
+ <int value="23" label="UnoptimizedImages"/>
+ <int value="24" label="Animations"/>
+ <int value="25" label="OversizedImages"/>
+ <int value="26" label="PictureInPicture"/>
+ <int value="27" label="VerticalScroll"/>
+ <int value="28" label="DocumentWrite"/>
+ <int value="29" label="LazyLoad"/>
+ <int value="30" label="LayoutAnimations"/>
</enum>
<enum name="FeedbackSource">
@@ -21473,6 +21901,9 @@ Called by update_net_error_codes.py.-->
<int value="10" label="Toggle show hidden Android folders (on)"/>
<int value="11" label="Toggle show hidden Android folders (off)"/>
<int value="12" label="Share with Linux"/>
+ <int value="13" label="Manage Linux sharing menu"/>
+ <int value="14" label="Manage Linux sharing toast"/>
+ <int value="15" label="Manage Linux sharing toast startup"/>
</enum>
<enum name="FileManagerQuickViewWayToOpen">
@@ -21645,6 +22076,7 @@ Called by update_net_error_codes.py.-->
<int value="1" label="Enabled, at First Run"/>
<int value="2" label="Enabled, not at First Run"/>
<int value="3" label="Disabled, Conversion Window expired"/>
+ <int value="4" label="Disabled, Legacy User upgraded"/>
</enum>
<enum name="FirstMeaningfulPaintOrdering">
@@ -23317,6 +23749,27 @@ Called by update_net_error_codes.py.-->
<int value="3" label="Timeout"/>
</enum>
+<enum name="GestureEventFilterResults">
+ <int value="0"
+ label="GestureScrollBegin allowed by main thread touch action"/>
+ <int value="1"
+ label="GestureScrollBegin allowed by compositor thread touch action"/>
+ <int value="2"
+ label="GestureScrollBegin filtered by main thread touch action"/>
+ <int value="3"
+ label="GestureScrollBegin filtered by compositor thread touch action"/>
+ <int value="4" label="GestureScrollBegin deferred"/>
+ <int value="5"
+ label="GestureScrollUpdate allowed by main thread touch action"/>
+ <int value="6"
+ label="GestureScrollUpdate allowed by compositor thread touch action"/>
+ <int value="7"
+ label="GestureScrollUpdate filtered by main thread touch action"/>
+ <int value="8"
+ label="GestureScrollUpdate filtered by compositor thread touch action"/>
+ <int value="9" label="GestureScrollUpdate deferred"/>
+</enum>
+
<enum name="GestureMergeState">
<int value="0" label="Neither token had a gesture"/>
<int value="1" label="Only the old token had a gesture"/>
@@ -23333,9 +23786,12 @@ Called by update_net_error_codes.py.-->
<enum name="GetEncryptionKeyAction">
<int value="0" label="Key is successfully found - not first time"/>
<int value="1" label="Key is successfully found for the first time"/>
- <int value="2" label="Overwriting of the key is prevented"/>
- <int value="3" label="Key is added to the Keychain"/>
- <int value="4" label="Other error"/>
+ <int value="2" label="(Obsolete) Overwriting of the key is prevented"/>
+ <int value="3" label="New key is added to the Keychain"/>
+ <int value="4" label="Other error during lookup"/>
+ <int value="5" label="New key was created, old key potentially overwritten"/>
+ <int value="6" label="New key creation failed, old key not found"/>
+ <int value="7" label="Error adding a new key"/>
</enum>
<enum name="GetOutputDeviceInfoCacheHit">
@@ -23405,6 +23861,18 @@ Called by update_net_error_codes.py.-->
<int value="1286" label="0x0506 - GL_INVALID_FRAMEBUFFER_OPERATION"/>
</enum>
+<enum name="GLImplementation">
+ <int value="0" label="kGLImplementationNone"/>
+ <int value="1" label="kGLImplementationDesktopGL"/>
+ <int value="2" label="kGLImplementationDesktopGLCoreProfile"/>
+ <int value="3" label="kGLImplementationSwiftShaderGL"/>
+ <int value="4" label="kGLImplementationAppleGL"/>
+ <int value="5" label="kGLImplementationEGLGLES2"/>
+ <int value="6" label="kGLImplementationMockGL)"/>
+ <int value="7" label="kGLImplementationStubGL"/>
+ <int value="8" label="kGLImplementationDisabled"/>
+</enum>
+
<enum name="GoogleCaptchaEvent">
<int value="0" label="Google CAPTCHA shown"/>
<int value="1" label="Google CAPTCHA solved"/>
@@ -24357,6 +24825,24 @@ Called by update_gpu_driver_bug_workaround_entries.py.-->
<int value="1" label="Software"/>
</enum>
+<enum name="GpuSeriesType">
+ <summary>
+ User device GPU generation. Currently only meaningful with Intel GPUs.
+ </summary>
+ <int value="0" label="Unknown (mostly Non-Intel)"/>
+ <int value="1" label="Intel SandyBridge"/>
+ <int value="2" label="Intel ValleyView (BayTrail)"/>
+ <int value="3" label="Intel IvyBridge"/>
+ <int value="4" label="Intel Haswell"/>
+ <int value="5" label="Intel CherryView (Braswell)"/>
+ <int value="6" label="Intel Broadwell"/>
+ <int value="7" label="Intel ApolloLake"/>
+ <int value="8" label="Intel SkyLake"/>
+ <int value="9" label="Intel GeminiLake"/>
+ <int value="10" label="Intel KabyLake"/>
+ <int value="11" label="Intel CoffeeLake"/>
+</enum>
+
<enum name="GPUsetIsAcceleratedCompositingActive">
<summary>
Combinations of input parameter active and previous active state set in
@@ -24435,6 +24921,23 @@ Called by update_gpu_driver_bug_workaround_entries.py.-->
<int value="1" label="Broadcast"/>
</enum>
+<enum name="GwpAsanCrashAnalysisResult">
+ <int value="0" label="The crash is not caused by GWP-ASan"/>
+ <int value="1" label="The crash is caused by GWP-ASan"/>
+ <int value="2" label="The ProcessMemory from the snapshot was null"/>
+ <int value="3"
+ label="Failed to read the crashing process' memory of the global
+ allocator"/>
+ <int value="4"
+ label="The crashing process' global allocator members failed sanity
+ checks"/>
+ <int value="5" label="Failed to read crash stack traces"/>
+ <int value="6" label="The ExceptionSnapshot CPU context was null"/>
+ <int value="7"
+ label="The crashing process' bitness does not match the crash handler"/>
+ <int value="8" label="The allocator computed an invalid slot index"/>
+</enum>
+
<enum name="GzipEncodingFixupResult">
<int value="0" label="Gzip encoding left as-is"/>
<int value="1" label="MIME type indicated GZIP content"/>
@@ -24955,6 +25458,7 @@ Called by update_gpu_driver_bug_workaround_entries.py.-->
<int value="4" label="Not joined, not GET"/>
<int value="5" label="Not joined, read-only"/>
<int value="6" label="Cache read, no Writers"/>
+ <int value="7" label="Not joined, too big for cache"/>
</enum>
<enum name="HttpCachePattern">
@@ -25189,6 +25693,11 @@ Called by update_gpu_driver_bug_workaround_entries.py.-->
<int value="16" label="host(private)_host(public)"/>
<int value="17" label="host(public)_host(private)"/>
<int value="18" label="host(public)_host(public)"/>
+ <int value="19" label="host(named)_host(named)"/>
+ <int value="20" label="host(named)_host(private)"/>
+ <int value="21" label="host(named)_host(public)"/>
+ <int value="22" label="host(private)_host(named)"/>
+ <int value="23" label="host(public)_host(named)"/>
</enum>
<enum name="IceConnectionStates">
@@ -25496,11 +26005,11 @@ Called by update_gpu_driver_bug_workaround_entries.py.-->
<enum name="IMEExtensionMojoEvent">
<int value="0" label="Unknown"/>
- <int value="1" label="Init Sucess"/>
+ <int value="1" label="Init Success"/>
<int value="2" label="Init Failed"/>
<int value="3" label="Activate IME Success"/>
<int value="4" label="Activate IME Failed"/>
- <int value="5" label="Rulebased Process Failed"/>
+ <int value="5" label="Service disconnected"/>
</enum>
<enum name="IMEGestureTypingEvent">
@@ -25725,6 +26234,13 @@ Called by update_gpu_driver_bug_workaround_entries.py.-->
<int value="2" label="Has access"/>
</enum>
+<enum name="InitiatorAccess2">
+ <int value="0" label="Initiator absent"/>
+ <int value="1" label="Initiator opaque"/>
+ <int value="2" label="No access"/>
+ <int value="3" label="Has access"/>
+</enum>
+
<enum name="InjectedAdType">
<int value="0" label="Invalid"/>
<int value="1" label="IFrame"/>
@@ -26604,6 +27120,15 @@ Called by update_gpu_driver_bug_workaround_entries.py.-->
<int value="8" label="AVX2"/>
</enum>
+<enum name="IntentHeadersResult">
+ <int value="0" label="First Party No Headers"/>
+ <int value="1" label="First Party Only Safe Headers"/>
+ <int value="2" label="First Party Unsafe Headers"/>
+ <int value="3" label="Third Party No Headers"/>
+ <int value="4" label="Third Party Only Safe Headers"/>
+ <int value="5" label="Third Party Unsafe Headers"/>
+</enum>
+
<enum name="InternalErrorLoadEvent">
<summary>Internal Errors in the page_load_metrics system</summary>
<int value="0" label="Invalid timing IPC sent from renderer (deprecated)"/>
@@ -26679,6 +27204,13 @@ Called by update_gpu_driver_bug_workaround_entries.py.-->
<int value="1" label="GCMNetworkChannel"/>
</enum>
+<enum name="InvalidatorState">
+ <int value="0" label="Enabled"/>
+ <int value="1" label="Error"/>
+ <int value="2" label="Credentials Rejected"/>
+ <int value="3" label="Shutting Down"/>
+</enum>
+
<enum name="IOSExternalURLRequestStatus">
<int value="0" label="MainFrameAllowed"/>
<int value="1" label="SubframeAllowed"/>
@@ -26806,6 +27338,18 @@ Called by update_gpu_driver_bug_workaround_entries.py.-->
<int value="3" label="Page Control Drag"/>
</enum>
+<enum name="IOSWKWebViewLinkPreviewAction">
+ <summary>
+ This enum is used to track the user actions that occur when previewing links
+ using the WKWebView 3D touch API. This feature is not currently supported,
+ and &quot;Preview Attempted&quot; will be used to gauge user interest in 3D
+ touch link previewing.
+ </summary>
+ <int value="0" label="Preview Attempted">
+ Recorded when a WKWebView link preview is attempted.
+ </int>
+</enum>
+
<enum name="IPCAttachmentBrokerPrivilegedBrokerAttachmentError">
<int value="0" label="DESTINATION_FOUND">
The brokerable attachment had a valid destination. This is the success case.
@@ -28117,6 +28661,10 @@ Called by update_gpu_driver_bug_workaround_entries.py.-->
<int value="19" label="LM_SHORTCUT_START_MENU">
Launched from a Start Menu shortcut (Windows).
</int>
+ <int value="20" label="LM_GCPW_LOGON">
+ Launched as a logon stub for the Google Credential Provider for Windows
+ (Windows).
+ </int>
</enum>
<enum name="LaunchType">
@@ -28376,6 +28924,11 @@ Called by update_gpu_driver_bug_workaround_entries.py.-->
<int value="1" label="Failed"/>
<int value="2" label="Copied everything"/>
<int value="3" label="The standard login database is encrypted"/>
+ <int value="4" label="The migration is about to be attempted"/>
+ <int value="5" label="No access to the native backend"/>
+ <int value="6" label="Could not create or write into the temporary file"/>
+ <int value="7" label="Could not read from the native backend"/>
+ <int value="8" label="Could not replace old database"/>
</enum>
<enum name="LinuxSandboxStatus">
@@ -28716,6 +29269,7 @@ Don't remove entries when removing a flag; they are still used to decode data
from previous Chrome versions.
-->
+ <int value="-2146832142" label="SyncPseudoUSSSearchEngines:enabled"/>
<int value="-2146613579" label="V8Future:disabled"/>
<int value="-2145472146" label="OfflinePagesResourceBasedSnapshot:disabled"/>
<int value="-2143961262" label="D3DVsync:disabled"/>
@@ -28728,6 +29282,7 @@ from previous Chrome versions.
<int value="-2134333982" label="ShowArcFilesApp:enabled"/>
<int value="-2134244069" label="HttpFormWarning:enabled"/>
<int value="-2133892372" label="ResamplingInputEvents:disabled"/>
+ <int value="-2133277113" label="CCTModuleCustomHeader:disabled"/>
<int value="-2132591642" label="enable-input-view"/>
<int value="-2124839789"
label="OmniboxUIExperimentHideSteadyStateUrlSchemeAndSubdomains:enabled"/>
@@ -28742,6 +29297,7 @@ from previous Chrome versions.
<int value="-2117621241" label="ExperimentalProductivityFeatures:enabled"/>
<int value="-2117201726" label="disable-gpu-rasterization"/>
<int value="-2114831248" label="disable-new-ntp"/>
+ <int value="-2113783491" label="ArcFilePickerExperiment:enabled"/>
<int value="-2113705745"
label="CrossOriginMediaPlaybackRequiresUserGesture:enabled"/>
<int value="-2108564200" label="AutofillUpstream:disabled"/>
@@ -28795,6 +29351,8 @@ from previous Chrome versions.
<int value="-2030217301" label="password-export:disabled"/>
<int value="-2029912304" label="StaleWhileRevalidate2:enabled"/>
<int value="-2028232016" label="spurious-power-button-lid-angle-change"/>
+ <int value="-2026156288"
+ label="LookalikeUrlNavigationSuggestionsUI:disabled"/>
<int value="-2025367104" label="enable-material-design-ntp"/>
<int value="-2021954068" label="TapVisualizerApp:disabled"/>
<int value="-2020721975" label="smart-virtual-keyboard"/>
@@ -28814,6 +29372,7 @@ from previous Chrome versions.
<int value="-1999892428" label="force-ui-direction"/>
<int value="-1998927516" label="enable-md-settings"/>
<int value="-1989747818" label="TabStripKeyboardFocus:disabled"/>
+ <int value="-1985239289" label="AutofillRichMetadataQueries:enabled"/>
<int value="-1985025593" label="file-manager-enable-new-gallery"/>
<int value="-1983569861" label="WebXROrientationSensorDevice:disabled"/>
<int value="-1982700103" label="EnableAppsGridGapFeature:enabled"/>
@@ -28841,6 +29400,9 @@ from previous Chrome versions.
<int value="-1956747298" label="LayeredAPI:enabled"/>
<int value="-1956349722" label="disable-smooth-scrolling"/>
<int value="-1955923385" label="EnableGamepadButtonAxisEvents:enabled"/>
+ <int value="-1954246274"
+ label="enable-experimental-accessibility-switch-access"/>
+ <int value="-1953121360" label="EphemeralTab:disabled"/>
<int value="-1948540128" label="disable-webrtc-hw-encoding (deprecated)"/>
<int value="-1946595906" label="enable-push-api-background-mode"/>
<int value="-1946522787" label="VrCustomTabBrowsing:disabled"/>
@@ -28849,6 +29411,7 @@ from previous Chrome versions.
<int value="-1943507605" label="enable-new-video-renderer"/>
<int value="-1943313820" label="SystemKeyboardLock:disabled"/>
<int value="-1942730618" label="WebAuthenticationTouchId:disabled"/>
+ <int value="-1942419166" label="SyncPseudoUSSApps:disabled"/>
<int value="-1941852572" label="floating-virtual-keyboard"/>
<int value="-1940806558" label="enable-syncfs-directory-operation"/>
<int value="-1940377152" label="MacRTL:enabled"/>
@@ -28865,6 +29428,8 @@ from previous Chrome versions.
<int value="-1930720286" label="nacl-debug-mask"/>
<int value="-1928198763" label="enable-async-dns"/>
<int value="-1925117279" label="disable-quic-https"/>
+ <int value="-1919199528"
+ label="AlwaysShowServerCardsInSyncTransport:disabled"/>
<int value="-1916060206" label="enable-display-zoom-setting"/>
<int value="-1915854488" label="enable-offline-pages"/>
<int value="-1913801713"
@@ -28877,6 +29442,7 @@ from previous Chrome versions.
label="OverlayScrollbarFlashAfterAnyScrollUpdate:enabled"/>
<int value="-1907565048" label="HtmlBaseUsernameDetector:disabled"/>
<int value="-1907342706" label="ReadItLaterInMenu:disabled"/>
+ <int value="-1903365454" label="SyncPseudoUSSPreferences:disabled"/>
<int value="-1899715534" label="GamepadPollingInterval:enabled"/>
<int value="-1895719323" label="VrBrowsingTabsView:enabled"/>
<int value="-1893668420"
@@ -28933,10 +29499,10 @@ from previous Chrome versions.
<int value="-1832221649" label="disable-out-of-process-pac"/>
<int value="-1826649921" label="ContextualSuggestionsButton:disabled"/>
<int value="-1821058653" label="enable-delay-agnostic-aec"/>
+ <int value="-1818947212" label="OutOfBlinkCors:disabled"/>
<int value="-1817209284" label="PayWithGoogleV1:enabled"/>
<int value="-1816066138" label="CastAllowAllIPs:enabled"/>
<int value="-1812579951" label="ContentSuggestionsCategoryRanker:enabled"/>
- <int value="-1811887751" label="ChromeModernFullRoll:disabled"/>
<int value="-1811394154" label="disable-webrtc-hw-vp8-encoding"/>
<int value="-1810294310" label="AndroidPaymentApps:enabled"/>
<int value="-1809891158" label="WebAuthenticationCable:enabled"/>
@@ -28967,6 +29533,8 @@ from previous Chrome versions.
<int value="-1749176684" label="PauseBackgroundTabs:disabled"/>
<int value="-1746767834" label="ssl-interstitial-v2-gray"/>
<int value="-1746255521" label="NewOverviewUi:enabled"/>
+ <int value="-1743079191" label="SyncPseudoUSSPriorityPreferences:enabled"/>
+ <int value="-1742376665" label="SyncPseudoUSSPasswords:disabled"/>
<int value="-1740519217" label="disable-software-rasterizer"/>
<int value="-1738416948" label="OptimizationHints:enabled"/>
<int value="-1736075054" label="EnableFullscreenAppList:enabled"/>
@@ -28975,6 +29543,7 @@ from previous Chrome versions.
<int value="-1732561795" label="ConsistentOmniboxGeolocation:enabled"/>
<int value="-1731149013" label="AndroidMessagesIntegration:enabled"/>
<int value="-1729926412" label="enable-webusb-notifications"/>
+ <int value="-1727530898" label="LookalikeUrlNavigationSuggestionsUI:enabled"/>
<int value="-1725507605" label="enable-web-midi"/>
<int value="-1720653947" label="WebRtcHybridAgc:disabled"/>
<int value="-1719833926" label="disable-answers-in-suggest"/>
@@ -28987,6 +29556,7 @@ from previous Chrome versions.
<int value="-1710772665" label="disable-my-files-navigation"/>
<int value="-1703709912" label="enable-new-ntp"/>
<int value="-1703308540" label="disable-webaudio"/>
+ <int value="-1701123067" label="ShowManagedUi:enabled"/>
<int value="-1696366449" label="disable-permissions-bubbles"/>
<int value="-1695774453" label="skip-extra-ash-window-positioning"/>
<int value="-1694353093" label="ArcVpn:disabled"/>
@@ -29007,6 +29577,7 @@ from previous Chrome versions.
<int value="-1662646099" label="NTPOfflinePageSuggestions:enabled"/>
<int value="-1662447331" label="wake-on-packets"/>
<int value="-1660972490" label="gpu-rasterization-msaa-sample-count"/>
+ <int value="-1657110277" label="GestureNavigation:disabled"/>
<int value="-1655535052" label="enable-pointer-events"/>
<int value="-1654344175" label="disable-extension-info-dialog"/>
<int value="-1653838003" label="PauseBackgroundTabs:enabled"/>
@@ -29065,7 +29636,9 @@ from previous Chrome versions.
<int value="-1555510175" label="PasswordImport:enabled"/>
<int value="-1553477903" label="ash-disable-text-filtering-in-overview-mode"/>
<int value="-1552898031" label="SingleTabMode:enabled"/>
+ <int value="-1550760918" label="PipRoundedCorners:disabled"/>
<int value="-1549871007" label="OneGoogleBarOnLocalNtp:disabled"/>
+ <int value="-1549356351" label="SyncPseudoUSSExtensionSettings:enabled"/>
<int value="-1547247328" label="OverrideTranslateTriggerInIndia:disabled"/>
<int value="-1546903171" label="enable-touch-drag-drop"/>
<int value="-1546029755" label="OverrideTranslateTriggerInIndia:enabled"/>
@@ -29079,8 +29652,10 @@ from previous Chrome versions.
<int value="-1536293422" label="SharedArrayBuffer:enabled"/>
<int value="-1536242739" label="security-chip"/>
<int value="-1535758690" label="AutoplayIgnoreWebAudio:disabled"/>
+ <int value="-1533258008" label="CalculateNativeWinOcclusion:enabled"/>
<int value="-1532035450" label="DragTabsInTabletMode:disabled"/>
<int value="-1532014193" label="disable-encryption-migration"/>
+ <int value="-1529907580" label="ImeServiceConnectable:disabled"/>
<int value="-1528455406" label="OmniboxPedalSuggestions:enabled"/>
<int value="-1520855274" label="PWAFullCodeCache:disabled"/>
<int value="-1517518406" label="force-update-menu-type"/>
@@ -29143,6 +29718,7 @@ from previous Chrome versions.
<int value="-1438279809" label="GamepadExtensions:disabled"/>
<int value="-1436251034" label="VoiceSearchOnLocalNtp:disabled"/>
<int value="-1433719718" label="enable-webrtc-stun-origin"/>
+ <int value="-1433452630" label="AllowRemoteContextForNotifications:enabled"/>
<int value="-1433087548" label="enable-app-install-alerts"/>
<int value="-1431563697" label="WebPaymentsMethodSectionOrderV2:enabled"/>
<int value="-1426817842" label="BlockTabUnders:enabled"/>
@@ -29171,6 +29747,8 @@ from previous Chrome versions.
<int value="-1392562498" label="disable-origin-chip"/>
<int value="-1391693054"
label="ContentSuggestionsFaviconsFromNewServer:disabled"/>
+ <int value="-1390331361"
+ label="SyncPseudoUSSHistoryDeleteDirectives:enabled"/>
<int value="-1388817073" label="OmniboxReverseAnswers:disabled"/>
<int value="-1386966873" label="disable-mac-views-native-app-windows"/>
<int value="-1385221197"
@@ -29223,6 +29801,7 @@ from previous Chrome versions.
<int value="-1310737697" label="MaterialDesignSettings:enabled"/>
<int value="-1308600417" label="NewNetErrorPageUI:disabled"/>
<int value="-1304957199" label="OfflinePagesShowAlternateDinoPage:enabled"/>
+ <int value="-1304758527" label="SyncSendTabToSelf:disabled"/>
<int value="-1303995589" label="shelf-new-ui"/>
<int value="-1302904242" label="enable-navigation-tracing"/>
<int value="-1302859198" label="enable-stylus-virtual-keyboard:disabled"/>
@@ -29245,6 +29824,7 @@ from previous Chrome versions.
<int value="-1269084216" label="ash-md"/>
<int value="-1268836676" label="disable-out-of-process-pdf"/>
<int value="-1267958145" label="disable-pdf-material-ui"/>
+ <int value="-1262730949" label="EnableDspHotword:enabled"/>
<int value="-1262152606" label="disable-lock-screen-apps"/>
<int value="-1261972671" label="OmniboxDocumentProvider:disabled"/>
<int value="-1261263046"
@@ -29264,6 +29844,7 @@ from previous Chrome versions.
<int value="-1235586511" label="enable-datasaver-prompt"/>
<int value="-1234740672" label="UsePdfCompositorServiceForPrint:disabled"/>
<int value="-1232629319" label="ResamplingScrollEvents:disabled"/>
+ <int value="-1225629234" label="SyncPseudoUSSFavicons:enabled"/>
<int value="-1225198073" label="ReaderModeInCCT:disabled"/>
<int value="-1224962996" label="PwaImprovedSplashScreen:disabled"/>
<int value="-1222805155" label="PdfIsolation:enabled"/>
@@ -29277,6 +29858,7 @@ from previous Chrome versions.
<int value="-1212273428" label="enable-experimental-app-list"/>
<int value="-1212167260" label="disable-app-window-cycling"/>
<int value="-1208501269" label="AutofillScanThemeDialog:enabled"/>
+ <int value="-1206875404" label="EnableIncognitoWindowCounter:enabled"/>
<int value="-1206698676" label="MacV2Sandbox:disabled"/>
<int value="-1206337150"
label="OmniboxUIExperimentHideSuggestionUrlScheme:disabled"/>
@@ -29297,8 +29879,11 @@ from previous Chrome versions.
label="FramebustingNeedsSameOriginOrUserGesture:disabled"/>
<int value="-1176493523" label="enable-md-extensions"/>
<int value="-1174267639" label="ClientLoFi:disabled"/>
+ <int value="-1173361620" label="CCTModulePostMessage:disabled"/>
<int value="-1172572865" label="NTPShowGoogleGInOmnibox:enabled"/>
<int value="-1172204005" label="enable-offline-auto-reload-visible-only"/>
+ <int value="-1167992523" label="DesktopPWAsCustomTabUI:disabled"/>
+ <int value="-1166715563" label="ChromeOSAssistant:disabled"/>
<int value="-1162944097" label="enable-color-correct-rendering"/>
<int value="-1161409696" label="MediaRemotingEncrypted:enabled"/>
<int value="-1161384421" label="ContextualSuggestionsAboveArticles:enabled"/>
@@ -29317,6 +29902,7 @@ from previous Chrome versions.
<int value="-1137696948" label="enable-chromeos-account-manager"/>
<int value="-1137442543" label="enable-slimming-paint"/>
<int value="-1136627751" label="ignore-autocomplete-off-autofill"/>
+ <int value="-1136602572" label="AwaitOptimization:disabled"/>
<int value="-1136509631" label="ssl-interstitial-v1"/>
<int value="-1134307340" label="stop-loading-in-background:enabled"/>
<int value="-1132704128" label="AndroidPaymentAppsFilter:disabled"/>
@@ -29328,9 +29914,11 @@ from previous Chrome versions.
<int value="-1122853453" label="LazyImageLoading:enabled"/>
<int value="-1121931029" label="DownloadsForeground:enabled"/>
<int value="-1119700637" label="ui-disable-partial-swap"/>
+ <int value="-1118921985" label="ForceEnableSystemAec:enabled"/>
<int value="-1114080030" label="ResourceLoadingHints:enabled"/>
<int value="-1112782121" label="AndroidSigninPromos:disabled"/>
<int value="-1107762575" label="enable-data-reduction-proxy-config-client"/>
+ <int value="-1107103335" label="FsNosymfollow:enabled"/>
<int value="-1102212525" label="enable-tcp-fastopen"/>
<int value="-1099142083" label="V8Ignition:disabled"/>
<int value="-1099135056" label="AsyncDns:enabled"/>
@@ -29341,6 +29929,7 @@ from previous Chrome versions.
<int value="-1085492638" label="FetchKeepaliveTimeoutSetting:enabled"/>
<int value="-1084855234" label="UnfilteredBluetoothDevices:disabled"/>
<int value="-1084055006" label="disable-web-notification-custom-layouts"/>
+ <int value="-1083547717" label="NotificationExpansionAnimation:disabled"/>
<int value="-1082302549" label="scan-cards-in-web-payments"/>
<int value="-1078093206" label="ash-debug-shortcuts"/>
<int value="-1077752943" label="enable-password-generation"/>
@@ -29447,6 +30036,7 @@ from previous Chrome versions.
<int value="-886912558" label="ChromeHomePromo:enabled"/>
<int value="-885601782" label="enable-contextual-search"/>
<int value="-884864731" label="WebPaymentsSingleAppUiSkip:enabled"/>
+ <int value="-883694393" label="SyncPseudoUSSSupervisedUsers:disabled"/>
<int value="-881447505" label="ash-disable-shelf-model-synchronization"/>
<int value="-881054479" label="WebAssemblyStreaming:disabled"/>
<int value="-879055117" label="ClipboardContentSetting:enabled"/>
@@ -29456,7 +30046,6 @@ from previous Chrome versions.
<int value="-872764392" label="ContextualSuggestionsBottomSheet:disabled"/>
<int value="-867087281" label="enable-virtual-keyboard"/>
<int value="-866993841" label="OfflinePagesCTV2:disabled"/>
- <int value="-865390600" label="NativeSmb:enabled"/>
<int value="-864266073" label="cros-regions-mode"/>
<int value="-864234985" label="UseDdljsonApi:enabled"/>
<int value="-864205629" label="enable-offline-load-stale-cache"/>
@@ -29480,18 +30069,18 @@ from previous Chrome versions.
<int value="-835672415" label="PointerEventV1SpecCapturing:disabled"/>
<int value="-834661509" label="ModalPermissionPrompts:disabled"/>
<int value="-832561975" label="enable-picture-in-picture"/>
- <int value="-828070439" label="NativeSmb:disabled"/>
<int value="-825942229" label="tab-management-experiment-type-elderberry"/>
<int value="-823165021" label="MaterialDesignUserMenu:enabled"/>
<int value="-820041355" label="enable-transition-compositing"/>
<int value="-816984237" label="OfflinePagesAsyncDownload:enabled"/>
+ <int value="-816895294" label="DiscoverApp:disabled"/>
<int value="-814097014" label="disable-session-crashed-bubble"/>
<int value="-813753274" label="VrBrowsing:disabled"/>
<int value="-813474479" label="site-per-process"/>
+ <int value="-813269144" label="SyncPseudoUSSPriorityPreferences:disabled"/>
<int value="-812461825" label="AutofillCreditCardSigninPromo:enabled"/>
<int value="-810684526"
label="AutofillToolkitViewsCreditCardDialogsMac:disabled"/>
- <int value="-810373609" label="ChromeModernFullRoll:enabled"/>
<int value="-808486493" label="NewWallpaperPicker:disabled"/>
<int value="-803233334" label="AutofillRefreshStyleAndroid:disabled"/>
<int value="-802348444" label="disable-site-engagement-service"/>
@@ -29511,6 +30100,7 @@ from previous Chrome versions.
<int value="-775321548" label="UseNewDoodleApi:disabled"/>
<int value="-773238824" label="AutoplayWhitelistSettings:disabled"/>
<int value="-772679248" label="MojoVideoEncodeAccelerator:enabled"/>
+ <int value="-772608284" label="MyFilesVolume:enabled"/>
<int value="-771080109" label="GrantNotificationsToDSE:disabled"/>
<int value="-770319039" label="enable-touch-editing"/>
<int value="-769865314" label="AutofillCacheQueryResponses:disabled"/>
@@ -29530,6 +30120,7 @@ from previous Chrome versions.
<int value="-742469530" label="DriveFS:disabled"/>
<int value="-741806604" label="DownloadsUi:disabled"/>
<int value="-738957187" label="OmniboxUIExperimentSwapTitleAndUrl:disabled"/>
+ <int value="-727860269" label="WebAuthenticationBle:disabled"/>
<int value="-726892130" label="AndroidMessagesIntegration:disabled"/>
<int value="-723224470" label="enable-password-force-saving:enabled"/>
<int value="-722474177" label="browser-side-navigation:disabled"/>
@@ -29557,11 +30148,15 @@ from previous Chrome versions.
label="AutofillSaveCardDialogUnlabeledExpirationDate:disabled"/>
<int value="-697751423" label="disable-quickoffice-component-app"/>
<int value="-696693295" label="Canvas2DImageChromium:disabled"/>
+ <int value="-694187898" label="MashOopViz:disabled"/>
<int value="-684900739" label="disable-merge-key-char-events"/>
<int value="-684223908" label="enable-android-wallpapers-app"/>
+ <int value="-683370370" label="EnableAppDataSearch:enabled"/>
+ <int value="-683306022" label="OverscrollHistoryNavigation:enabled"/>
<int value="-680787130" label="ExperimentalVRFeatures:disabled"/>
<int value="-680589442" label="MacRTL:disabled"/>
<int value="-674804217" label="SoleIntegration:enabled"/>
+ <int value="-673804828" label="EnablePlayStoreAppSearch:disabled"/>
<int value="-671992446" label="TranslateRankerEnforcement:disabled"/>
<int value="-670188266" label="enable-zip-archiver-unpacker"/>
<int value="-667517406" label="overscroll-history-navigation"/>
@@ -29601,7 +30196,6 @@ from previous Chrome versions.
<int value="-596337171" label="disable-ash-sidebar"/>
<int value="-593536514" label="ExperimentalTabController:enabled"/>
<int value="-589096918" label="ash-enable-fullscreen-app-list"/>
- <int value="-584624723" label="AndroidSiteSettingsUI:enabled"/>
<int value="-579192400" label="disable-input-view"/>
<int value="-572112724" label="DialogTouchBar:disabled"/>
<int value="-567920515" label="disable-experimental-hotwording"/>
@@ -29613,6 +30207,7 @@ from previous Chrome versions.
<int value="-557742250" label="ContentSuggestionsCategories:disabled"/>
<int value="-548495403" label="AutofillDynamicForms:enabled"/>
<int value="-548082154" label="protect-sync-credential:disabled"/>
+ <int value="-547301855" label="SyncPseudoUSSSupervisedUsers:enabled"/>
<int value="-541611402" label="OfflinePagesPrefetching:enabled"/>
<int value="-540150399" label="TapVisualizerApp:enabled"/>
<int value="-536289234" label="ssl-interstitial-v2-colorful"/>
@@ -29656,11 +30251,14 @@ from previous Chrome versions.
<int value="-474806100" label="DataReductionProxyMainMenu:enabled"/>
<int value="-474322576" label="disable-quick-unlock-pin"/>
<int value="-473087416" label="DragTabsInTabletMode:enabled"/>
+ <int value="-472477695" label="AutofillSaveCardImprovedUserConsent:enabled"/>
<int value="-472014137" label="HomepageTile:disabled"/>
<int value="-472013317" label="WebRTC-H264WithOpenH264FFmpeg:disabled"/>
<int value="-471405972" label="ViewsProfileChooser:disabled"/>
<int value="-471085510" label="MultiDeviceApi:enabled"/>
<int value="-470948890" label="OfflinePagesDescriptivePendingStatus:enabled"/>
+ <int value="-470247915"
+ label="AutofillUpstreamEditableExpirationDate:enabled"/>
<int value="-468697885" label="ArcInputMethod:enabled"/>
<int value="-462205750" label="enable-service-worker-sync"/>
<int value="-461292699" label="ContentSuggestionsCategoryOrder:enabled"/>
@@ -29668,6 +30266,7 @@ from previous Chrome versions.
<int value="-460081932" label="CustomFeedbackUi:disabled"/>
<int value="-457292000" label="HappinessTrackingSurveysForDesktop:enabled"/>
<int value="-457174225" label="Av1Decoder:enabled"/>
+ <int value="-456321929" label="ForceEnableSystemAec:disabled"/>
<int value="-455203267" label="use_new_features_summary"/>
<int value="-449465495" label="disable-browser-task-scheduler"/>
<int value="-436470115" label="TouchpadAndWheelScrollLatching:enabled"/>
@@ -29677,6 +30276,8 @@ from previous Chrome versions.
<int value="-426815606" label="HomepageTile:enabled"/>
<int value="-424701311" label="SignedHTTPExchange:disabled"/>
<int value="-418868128" label="enable-experimental-web-platform-features"/>
+ <int value="-416660617" label="EnforceTLS13Downgrade:disabled"/>
+ <int value="-415186532" label="AndroidSiteSettingsUIRefresh:enabled"/>
<int value="-410852857" label="ImprovedA2HS:disabled"/>
<int value="-406850932" label="EnableEmojiContextMenu:enabled"/>
<int value="-405380243" label="enable-encryption-migration"/>
@@ -29697,6 +30298,7 @@ from previous Chrome versions.
<int value="-374657496" label="OmniboxEnableClipboardProvider:enabled"/>
<int value="-374423260" label="OmniboxTabSwitchSuggestions:disabled"/>
<int value="-373233195" label="SyncUSSAutofillWalletData:enabled"/>
+ <int value="-372171039" label="BlinkGenPropertyTrees:disabled"/>
<int value="-367474066" label="DialogTouchBar:enabled"/>
<int value="-366949535" label="KeyboardShortcutViewerApp:enabled"/>
<int value="-365920680" label="ImageCaptureAPI:disabled"/>
@@ -29774,6 +30376,7 @@ from previous Chrome versions.
<int value="-234966279" label="PointerEvent:disabled"/>
<int value="-234687894"
label="NonValidatingReloadOnRefreshContentV2:disabled"/>
+ <int value="-233770301" label="GestureNavigation:enabled"/>
<int value="-231922000" label="enable-renderer-mojo-channel"/>
<int value="-230824955" label="NTPMostLikelyFaviconsFromServer:enabled"/>
<int value="-225505731" label="CCTModule:enabled"/>
@@ -29797,11 +30400,14 @@ from previous Chrome versions.
<int value="-181590721"
label="AutofillEnforceMinRequiredFieldsForHeuristics:enabled"/>
<int value="-181093956" label="ScrollAnchoring:enabled"/>
+ <int value="-174706795"
+ label="WebPaymentsPerMethodCanMakePaymentQuota:enabled"/>
<int value="-174564579"
label="ServiceWorkerImportedScriptUpdateCheck:enabled"/>
<int value="-174319545" label="BulkPrinters:enabled"/>
<int value="-171173736" label="VrBrowsingExperimentalFeatures:disabled"/>
<int value="-170986053" label="EnableManualFallbacksFilling:enabled"/>
+ <int value="-169745744" label="SyncPseudoUSSPreferences:enabled"/>
<int value="-167744090" label="EnableHomeLauncher:enabled"/>
<int value="-165756594" label="enable-touch-feedback"/>
<int value="-161782023" label="AndroidMessagesProdEndpoint:enabled"/>
@@ -29812,12 +30418,17 @@ from previous Chrome versions.
<int value="-147283486" label="enable-network-portal-notification"/>
<int value="-146552997" label="enable-affiliation-based-matching"/>
<int value="-144134779" label="AndroidPayIntegrationV2:disabled"/>
+ <int value="-143819280" label="google-password-manager:disabled"/>
<int value="-143382681" label="InstantTethering:enabled"/>
<int value="-141516902" label="UseModernMediaControls:enabled"/>
<int value="-138983372" label="DesktopPWAWindowing:disabled"/>
<int value="-138773929" label="PassiveDocumentEventListeners:enabled"/>
+ <int value="-138760381" label="AutofillManualFallbackAndroid:enabled"/>
<int value="-137303226" label="enable-chromevox-developer-option"/>
<int value="-135223364" label="AutofillShowTypePredictions:disabled"/>
+ <int value="-133098377" label="SyncPseudoUSSSearchEngines:disabled"/>
+ <int value="-128687277"
+ label="OmniboxUIExperimentHideSteadyStateUrlPathQueryAndRef:disabled"/>
<int value="-127231994" label="VrBrowsingNativeAndroidUi:disabled"/>
<int value="-122492389" label="enable-browser-task-scheduler"/>
<int value="-120521482" label="DirectManipulationStylus:enabled"/>
@@ -29857,7 +30468,9 @@ from previous Chrome versions.
<int value="-59401847" label="ContentSuggestionsLargeThumbnail:disabled"/>
<int value="-58242474" label="ash-disable-swipe-to-close-in-overview-mode"/>
<int value="-57986995" label="DisablePostScriptPrinting:enabled"/>
+ <int value="-56235502" label="WebRtcHideLocalIpsWithMdns:enabled"/>
<int value="-55944747" label="disable-child-account-detection"/>
+ <int value="-55592344" label="SyncPseudoUSSDictionary:disabled"/>
<int value="-52483823" label="disable-new-video-renderer"/>
<int value="-52241456" label="enable-single-click-autofill"/>
<int value="-50628385"
@@ -29900,12 +30513,13 @@ from previous Chrome versions.
<int value="7533886" label="disable-offer-store-unmasked-wallet-cards"/>
<int value="10458238" label="disable-print-preview-simplify"/>
<int value="11698808" label="enable-dom-distiller-button-animation"/>
- <int value="17689762" label="crostini-files"/>
<int value="19815558" label="EnableSettingsShortcutSearch:disabled"/>
<int value="23556595" label="MarkHttpAs:enabled"/>
+ <int value="26875005" label="disable-explicit-dma-fences"/>
<int value="27507364" label="apps-keep-chrome-alive"/>
<int value="29212695" label="OfflineIndicator:enabled"/>
<int value="31848187" label="ViewsTaskManager:disabled"/>
+ <int value="32488630" label="EphemeralTab:enabled"/>
<int value="33778663" label="OriginTrials:enabled"/>
<int value="36422284"
label="AutofillSaveCardDialogUnlabeledExpirationDate:enabled"/>
@@ -29913,6 +30527,7 @@ from previous Chrome versions.
<int value="37045987" label="AutofillPreviewStyleExperiment:disabled"/>
<int value="42098736" label="TranslateAndroidManualTrigger:disabled"/>
<int value="42844603" label="AndroidSurfaceControl:disabled"/>
+ <int value="43951968" label="DesktopPWAsCustomTabUI:enabled"/>
<int value="44088203" label="ExpensiveBackgroundTimerThrottling:enabled"/>
<int value="48159177" label="reduced-referrer-granularity"/>
<int value="48223610" label="SiteSettings:disabled"/>
@@ -29920,6 +30535,7 @@ from previous Chrome versions.
<int value="52368742" label="enable-pixel-canvas-recording:disabled"/>
<int value="54571864" label="EnableDisplayZoomSetting:enabled"/>
<int value="56723110" label="enable-webfonts-intervention"/>
+ <int value="56900498" label="OmniboxOneClickUnelide:enabled"/>
<int value="57555893" label="NewContactsPicker:disabled"/>
<int value="57639188" label="SoundContentSetting:disabled"/>
<int value="57791920" label="MemoryCoordinator:enabled"/>
@@ -29945,6 +30561,8 @@ from previous Chrome versions.
label="ChromeHomePersonalizedOmniboxSuggestions:enabled"/>
<int value="84911198" label="ScanCardsInWebPayments:disabled"/>
<int value="88437020" label="FeaturePolicy:enabled"/>
+ <int value="89785725"
+ label="DataReductionProxyEnabledWithNetworkService:disabled"/>
<int value="91938915" label="enable-suggestions-service"/>
<int value="92327255" label="DisplayMoveWindowAccels:disabled"/>
<int value="98134240" label="material-design-ink-drop-animation-speed"/>
@@ -29952,6 +30570,8 @@ from previous Chrome versions.
<int value="105046382" label="ParallelDownloading:disabled"/>
<int value="106840653" label="mus"/>
<int value="107900612" label="ChromeHomePersistentIph:disabled"/>
+ <int value="115915570"
+ label="OmniboxUIExperimentHideSteadyStateUrlPathQueryAndRef:enabled"/>
<int value="118991027" label="enable-accelerated-fixed-root-background"/>
<int value="119185738"
label="OmniboxUIExperimentMaxAutocompleteMatches:disabled"/>
@@ -29998,6 +30618,7 @@ from previous Chrome versions.
label="enable-manual-fallback-for-password-saving:disabled"/>
<int value="241187301" label="BrowserTouchBar:disabled"/>
<int value="244697230" label="enable-theme-color-in-tabbed-mode"/>
+ <int value="245896533" label="SearchSuggestionsOnLocalNtp:enabled"/>
<int value="250855010" label="WebAssemblyBaseline:disabled"/>
<int value="255375615" label="stop-non-timers-in-background:enabled"/>
<int value="259021228" label="OffMainThreadFetch:disabled"/>
@@ -30014,6 +30635,7 @@ from previous Chrome versions.
<int value="278756320" label="disable-app-list-app-info"/>
<int value="280644887" label="mash"/>
<int value="283232244" label="OmniboxUIExperimentNarrowDropdown:enabled"/>
+ <int value="288012253" label="CrostiniFiles:enabled"/>
<int value="292560715" label="ViewsCastDialog:disabled"/>
<int value="293134455" label="AutofillSendBillingCustomerNumber:disabled"/>
<int value="293996306" label="ArrayPrototypeValues:disabled"/>
@@ -30022,6 +30644,7 @@ from previous Chrome versions.
<int value="303058039" label="AccountConsistency:disabled"/>
<int value="303252119" label="AutofillExpandedPopupViews:disabled"/>
<int value="304901781" label="NewUsbBackend:enabled"/>
+ <int value="306641800" label="AndroidSiteSettingsUIRefresh:disabled"/>
<int value="307543404" label="disable-team-drives"/>
<int value="313253630" label="AutofillRefreshStyleAndroid:enabled"/>
<int value="313303258" label="WebPaymentsModifiers:disabled"/>
@@ -30034,6 +30657,7 @@ from previous Chrome versions.
<int value="327045548" label="SafeSearchUrlReporting:enabled"/>
<int value="328722396" label="NTPCondensedLayout:disabled"/>
<int value="330138076" label="enable-clear-browsing-data-counters"/>
+ <int value="330439654" label="SyncPseudoUSSExtensions:enabled"/>
<int value="332391072" label="cs-contextual-cards-bar-integration"/>
<int value="334802038" label="OfflinePreviews:disabled"/>
<int value="336429189" label="DisallowUnsafeHttpDownloads:disabled"/>
@@ -30041,14 +30665,17 @@ from previous Chrome versions.
<int value="341152650" label="SoundContentSetting:enabled"/>
<int value="345664265" label="BlinkHeapIncrementalMarking:disabled"/>
<int value="346711293" label="enable-save-password-bubble"/>
+ <int value="348043155" label="AwaitOptimization:enabled"/>
<int value="348115702" label="new-password-form-parsing-for-saving:enabled"/>
<int value="348854923" label="v8-cache-strategies-for-cache-storage"/>
<int value="350399958" label="ModuleScriptsImportMetaUrl:disabled"/>
+ <int value="351005753" label="enable-experimental-accessibility-autoclick"/>
<int value="352191859" label="disabled-new-style-notification"/>
<int value="352937987" label="OverflowIconsForMediaControls:disabled"/>
<int value="357138275" label="enable-floating-virtual-keyboard:disabled"/>
<int value="358399482" label="enable-high-dpi-fixed-position-compositing"/>
<int value="358493847" label="BackgroundLoader:disabled"/>
+ <int value="359601954" label="CrostiniUsbSupport:enabled"/>
<int value="360391863" label="NTPOfflineBadge:enabled"/>
<int value="360599302" label="enable-gpu-rasterization"/>
<int value="365467768" label="prefetch-search-results"/>
@@ -30138,10 +30765,13 @@ from previous Chrome versions.
<int value="513356954" label="InstantTethering:disabled"/>
<int value="513372959" label="ViewsProfileChooser:enabled"/>
<int value="517568645" label="AnimatedAppMenuIcon:disabled"/>
+ <int value="533064367" label="WebRtcHideLocalIpsWithMdns:disabled"/>
<int value="535131384" label="OmniboxTailSuggestions:enabled"/>
<int value="535976218" label="enable-plugin-power-saver"/>
+ <int value="537857256" label="PipRoundedCorners:enabled"/>
<int value="538468149" label="OfflinePagesCT:enabled"/>
<int value="538600423" label="OmniboxDocumentProvider:enabled"/>
+ <int value="546043947" label="ImplicitRootScroller:enabled"/>
<int value="546520086" label="enable-data-reduction-proxy-savings-promo"/>
<int value="546710806" label="disable-easy-signin"/>
<int value="549483647" label="EnableUnifiedMultiDeviceSettings:disabled"/>
@@ -30164,6 +30794,8 @@ from previous Chrome versions.
<int value="588333474" label="OfflineIndicator:disabled"/>
<int value="592050831" label="disable-slimming-paint"/>
<int value="593707592" label="disable-network-portal-notification"/>
+ <int value="594756372" label="MyFilesVolume:disabled"/>
+ <int value="595168244" label="NotificationExpansionAnimation:enabled"/>
<int value="595371145" label="OmniboxRichEntitySuggestions:disabled"/>
<int value="596106994" label="CustomFeedbackUi:enabled"/>
<int value="598827460" label="enable-roboto-font-ui"/>
@@ -30177,10 +30809,12 @@ from previous Chrome versions.
<int value="606288133" label="enable-print-preview-register-promos"/>
<int value="606512202" label="AutofillCreditCardPopupLayout:enabled"/>
<int value="606834606" label="force-color-profile"/>
+ <int value="606969417" label="DiscoverApp:enabled"/>
<int value="609112512" label="touch-selection-strategy"/>
<int value="609580715" label="ArcCupsApi:disabled"/>
<int value="610545308" label="enable-potentially-annoying-security-features"/>
<int value="613629912" label="LookalikeUrlNavigationSuggestions:enabled"/>
+ <int value="623772100" label="EnableIncognitoWindowCounter:disabled"/>
<int value="624317932" label="print-pdf-as-image"/>
<int value="624368375" label="OmniboxEntitySuggestions:enabled"/>
<int value="625273056" label="disable-boot-animation"/>
@@ -30235,30 +30869,39 @@ from previous Chrome versions.
<int value="694985670" label="OmniboxUIExperimentNarrowDropdown:disabled"/>
<int value="695385040" label="enable-external-drive-rename"/>
<int value="696600628" label="VibrateRequiresUserGesture:disabled"/>
+ <int value="698273842" label="SyncSendTabToSelf:enabled"/>
<int value="698809951" label="WebRtcHWVP8Encoding:enabled"/>
<int value="699149897" label="ContentSuggestionsDebugLog:disabled"/>
<int value="701766325" label="PerNavigationMojoInterface:enabled"/>
+ <int value="705407202" label="AutofillSaveCardImprovedUserConsent:disabled"/>
<int value="705713283" label="EasyUnlockPromotions:disabled"/>
<int value="709850261" label="disable-touch-editing"/>
<int value="711424932" label="enable-cloud-print-xps"/>
<int value="715617684" label="OriginTrials:disabled"/>
+ <int value="716073306" label="AssistantVoiceMatch:disabled"/>
<int value="716080990" label="restrict-iframe-permissions"/>
<int value="719267310"
label="KeepAliveRendererForKeepaliveRequests:disabled"/>
+ <int value="720931007" label="WebAuthenticationBle:enabled"/>
<int value="721225492" label="PolicyTool:enabled"/>
<int value="723619383" label="TopSitesFromSiteEngagement:enabled"/>
<int value="724208771" label="TabsInCBD:enabled"/>
<int value="725270017" label="ScrollAnchorSerialization:disabled"/>
<int value="726764779" label="WebXRGamepadSupport:enabled"/>
+ <int value="727270087" label="PromosOnLocalNtp:enabled"/>
<int value="727571565" label="PasswordForceSaving"/>
<int value="728656094" label="PasswordForceSaving:disabled"/>
<int value="730024226" label="enable-out-of-process-pdf"/>
<int value="730750097" label="PermissionsBlacklist:disabled"/>
+ <int value="731779469" label="BlinkHeapUnifiedGarbageCollection:enabled"/>
<int value="732703958" label="enable-gesture-tap-highlight"/>
<int value="734900932" label="RecurrentInterstitialFeature:enabled"/>
<int value="736911267" label="ExperimentalCrostiniUI:disabled"/>
<int value="737421745" label="enable-accessibility-object-model"/>
<int value="738868972" label="GdiTextPrinting:disabled"/>
+ <int value="739938466"
+ label="WebPaymentsPerMethodCanMakePaymentQuota:disabled"/>
+ <int value="740056959" label="ImeServiceConnectable:enabled"/>
<int value="745783589" label="translate-force-trigger-on-english"/>
<int value="745868416" label="disable-system-timezone-automatic-detection"/>
<int value="746944193" label="enable-automatic-password-saving:disabled"/>
@@ -30277,6 +30920,8 @@ from previous Chrome versions.
<int value="772348426" label="AffiliationBasedMatching:enabled"/>
<int value="772360813"
label="enable-fullscreen-handwriting-virtual-keyboard:enabled"/>
+ <int value="773070364" label="AlwaysShowServerCardsInSyncTransport:enabled"/>
+ <int value="773563826" label="CrostiniUsbSupport:disabled"/>
<int value="773743944" label="show-android-files-in-files-app"/>
<int value="773919225" label="disable-office-editing-component-extension"/>
<int value="777667507" label="DesktopPWAsLinkCapturing:enabled"/>
@@ -30317,7 +30962,6 @@ from previous Chrome versions.
<int value="857445869" label="enable-captive-portal-bypass-proxy"/>
<int value="860336036" label="ChromeModernDesign:enabled"/>
<int value="862453793" label="TranslateUI2016Q2:enabled"/>
- <int value="863770274" label="AndroidSiteSettingsUI:disabled"/>
<int value="867512869" label="mark-non-secure-as"/>
<int value="868009556" label="AutofillUpstream:enabled"/>
<int value="869531646" label="enable-session-crashed-bubble"/>
@@ -30329,6 +30973,7 @@ from previous Chrome versions.
<int value="879992337" label="disable-pull-to-refresh-effect"/>
<int value="880510010" label="enable-permissions-bubbles"/>
<int value="884106779" label="supervised-user-safesites"/>
+ <int value="885971656" label="EnablePlayStoreAppSearch:enabled"/>
<int value="886907524" label="autoplay-policy"/>
<int value="887011602" label="enable-spelling-auto-correct"/>
<int value="892899792" label="MaterialDesignIncognitoNTP:disabled"/>
@@ -30356,14 +31001,19 @@ from previous Chrome versions.
<int value="941036016" label="ContentSuggestionsSettings:disabled"/>
<int value="941883332" label="ProactiveTabFreezeAndDiscard:disabled"/>
<int value="943319566" label="enable-intent-picker"/>
+ <int value="946185008" label="EnableAppDataSearch:disabled"/>
<int value="946688335" label="OmniboxSpareRenderer:disabled"/>
<int value="952558794" label="enable-remote-assistance"/>
<int value="955340765" label="ChromeHomeOptOutSnackbar:enabled"/>
<int value="963457392" label="ChromeHomeModernLayout:disabled"/>
<int value="963671232" label="DrawOcclusion:disabled"/>
+ <int value="966415988" label="SyncPseudoUSSPasswords:enabled"/>
+ <int value="969340095" label="EnableDspHotword:disabled"/>
<int value="972228058" label="SyncUSSSessions:disabled"/>
+ <int value="973601997" label="SafeBrowsingUseLocalBlacklistsV2:disabled"/>
<int value="975104092" label="show-taps"/>
<int value="976079108" label="TouchpadOverscrollHistoryNavigation:disabled"/>
+ <int value="976278412" label="google-password-manager:enabled"/>
<int value="979445973" label="OmniboxSpareRenderer:enabled"/>
<int value="980396200" label="enable-new-korean-ime"/>
<int value="981818901" label="AppBanners:enabled"/>
@@ -30412,6 +31062,7 @@ from previous Chrome versions.
<int value="1050664817" label="CSSFragmentIdentifiers:enabled"/>
<int value="1053743655" label="NewOverviewAnimations:enabled"/>
<int value="1054910800" label="enable-timezone-tracking-option"/>
+ <int value="1057014709" label="EnforceTLS13Downgrade:enabled"/>
<int value="1057887829" label="AutofillScanThemeDialog:disabled"/>
<int value="1059007599" label="enable-gpu-appcontainer"/>
<int value="1059698271" label="EnableZeroStateSuggestions:disabled"/>
@@ -30439,6 +31090,7 @@ from previous Chrome versions.
<int value="1092896354" label="EnableFullscreenAppList:disabled"/>
<int value="1094506652" label="UseGoogleLocalNtp:enabled"/>
<int value="1095061640" label="enable-prominent-url-app-flow"/>
+ <int value="1096477444" label="AssistantVoiceMatch:enabled"/>
<int value="1098823967" label="ash-enable-window-cycle-ui"/>
<int value="1104948452" label="manual-enhanced-bookmarks-optout"/>
<int value="1105439588" label="enable-swipe-selection"/>
@@ -30448,6 +31100,7 @@ from previous Chrome versions.
<int value="1111871757" label="ForceUnifiedConsentBump:enabled"/>
<int value="1112051724" label="DetectingHeavyPages:enabled"/>
<int value="1112885300" label="VizHitTestDrawQuad:disabled"/>
+ <int value="1113196543" label="ShowManagedUi:disabled"/>
<int value="1113365156" label="tab-management-experiment-type-chive"/>
<int value="1114629582" label="enable-floating-virtual-keyboard"/>
<int value="1115476442" label="PolicyTool:disabled"/>
@@ -30473,6 +31126,7 @@ from previous Chrome versions.
<int value="1155923106" label="NTPOfflinePages:enabled"/>
<int value="1163255347" label="ash-enable-touch-view-touch-feedback"/>
<int value="1166169237" label="disable-delay-agnostic-aec"/>
+ <int value="1166789664" label="SyncPseudoUSSAppList:disabled"/>
<int value="1166897718" label="TextSuggestionsTouchBar:disabled"/>
<int value="1167613030" label="enable-permission-action-reporting"/>
<int value="1169418814" label="ManualFallbacksFilling:enabled"/>
@@ -30528,6 +31182,8 @@ from previous Chrome versions.
<int value="1253698118" label="ash-disable-stable-overview-order"/>
<int value="1257482622" label="PageAlmostIdle:enabled"/>
<int value="1257980502" label="disable-accelerated-video-decode"/>
+ <int value="1258747457"
+ label="SyncPseudoUSSHistoryDeleteDirectives:disabled"/>
<int value="1260186484" label="spurious-power-button-screen-accel"/>
<int value="1261713150" label="ChromeHomeOptOutSnackbar:disabled"/>
<int value="1266525177"
@@ -30538,6 +31194,7 @@ from previous Chrome versions.
<int value="1269952439" label="AndroidAIAFetching:disabled"/>
<int value="1272699563" label="enable-hosted-mode"/>
<int value="1272923911" label="NewMessageListView:disabled"/>
+ <int value="1274717741" label="top-chrome-touch-ui"/>
<int value="1275507565" label="OfflinePagesRenovations:enabled"/>
<int value="1276209777" label="ntp-switch-to-existing-tab"/>
<int value="1277386636" label="QueryInOmnibox:disabled"/>
@@ -30550,6 +31207,7 @@ from previous Chrome versions.
<int value="1285905715" label="WebXRHitTest:enabled"/>
<int value="1291257442" label="TabsInCBD:disabled"/>
<int value="1291966558" label="ScrollAnchoring:disabled"/>
+ <int value="1292091029" label="OmniboxOneClickUnelide:disabled"/>
<int value="1292763218" label="SystemTrayUnified:disabled"/>
<int value="1294131571" label="disable-winrt-midi-api"/>
<int value="1296958520" label="hide-active-apps-from-shelf"/>
@@ -30578,13 +31236,16 @@ from previous Chrome versions.
<int value="1343050930" label="ContextualSearchUnityIntegration:enabled"/>
<int value="1343516821" label="ignore-previews-blocklist"/>
<int value="1344833841" label="ImeThread:enabled"/>
+ <int value="1346994602" label="SyncPseudoUSSDictionary:enabled"/>
<int value="1351830811" label="do-not-ignore-autocomplete-off"/>
<int value="1352447982" label="enable-lcd-text"/>
+ <int value="1353629763" label="MediaSessionAccelerators:enabled"/>
<int value="1355923367" label="CrOSContainer:disabled"/>
<int value="1359972809" label="enable-gesture-deletion"/>
<int value="1361047396" label="disable-click-delay"/>
<int value="1361073386" label="ContentSuggestionsNotifications:enabled"/>
<int value="1363136936" label="VrCustomTabBrowsing:enabled"/>
+ <int value="1363151585" label="SyncPseudoUSSAppList:enabled"/>
<int value="1367467733" label="AutoplayIgnoreWebAudio:enabled"/>
<int value="1367487214" label="VaapiJpegImageDecodeAcceleration:enabled"/>
<int value="1367529437" label="NTPAssetDownloadSuggestions:enabled"/>
@@ -30607,6 +31268,7 @@ from previous Chrome versions.
label="OmniboxUIExperimentHideSuggestionUrlTrivialSubdomains:disabled"/>
<int value="1389729816" label="data-reduction-proxy-lo-fi"/>
<int value="1393500952" label="EnableVirtualKeyboardUkm:disabled"/>
+ <int value="1393722373" label="SaveEditedPDFForm:disabled"/>
<int value="1397069250" label="NetworkService:disabled"/>
<int value="1403195370" label="ArcCupsApi:enabled"/>
<int value="1405459667" label="enable-fast-text-autosizing"/>
@@ -30621,6 +31283,7 @@ from previous Chrome versions.
<int value="1410697724" label="mediadrm-enable-non-compositing"/>
<int value="1413158119" label="WebRtcRemoteEventLog:disabled"/>
<int value="1413948819" label="NupPrinting:enabled"/>
+ <int value="1416309272" label="only-new-password-form-parsing:enabled"/>
<int value="1416592483" label="ash-enable-mirrored-screen"/>
<int value="1418054870" label="SpecialLocale:enabled"/>
<int value="1421620678" label="simple-clear-browsing-data-support-string"/>
@@ -30632,11 +31295,14 @@ from previous Chrome versions.
<int value="1442798825" label="enable-quic"/>
<int value="1442830837" label="MemoryAblation:disabled"/>
<int value="1444320426" label="VizHitTestDrawQuad:enabled"/>
+ <int value="1447295459" label="SyncPseudoUSSApps:enabled"/>
<int value="1452546183" label="PwaPersistentNotification:enabled"/>
+ <int value="1454006695" label="BlinkHeapUnifiedGarbageCollection:disabled"/>
<int value="1454143461" label="CaptureThumbnailOnNavigatingAway:disabled"/>
<int value="1454363479" label="disable-storage-manager"/>
<int value="1454527518" label="ArcNativeBridgeExperiment:enabled"/>
<int value="1455881930" label="V8VmFuture:enabled"/>
+ <int value="1458255488" label="BlinkGenPropertyTrees:enabled"/>
<int value="1458583431" label="arc-use-auth-endpoint"/>
<int value="1459529277" label="disable-text-input-focus-manager"/>
<int value="1460747747" label="GdiTextPrinting:enabled"/>
@@ -30649,8 +31315,10 @@ from previous Chrome versions.
<int value="1474861626" label="disable-multi-mirroring"/>
<int value="1479248574" label="disable-voice-input"/>
<int value="1481562816" label="disable-password-link"/>
+ <int value="1482039233" label="SearchSuggestionsOnLocalNtp:disabled"/>
<int value="1486171015" label="disable-fill-on-account-select"/>
<int value="1487341558" label="MacViewsAutofillPopup:enabled"/>
+ <int value="1488193175" label="ChromeOSAssistant:enabled"/>
<int value="1488700164" label="password-import:disabled"/>
<int value="1489915799" label="disable-permissions-blacklist"/>
<int value="1490043732" label="enable-fill-on-account-select"/>
@@ -30668,15 +31336,18 @@ from previous Chrome versions.
<int value="1510659184" label="MacMDDownloadShelf:enabled"/>
<int value="1511140997" label="OfflinePagesAsyncDownload:disabled"/>
<int value="1511161758" label="BackgroundLoader:enabled"/>
+ <int value="1511961044" label="ArcFilePickerExperiment:disabled"/>
<int value="1514036945"
label="OmniboxUIExperimentElideSuggestionUrlAfterHost:disabled"/>
<int value="1514066770" label="DisplayCutoutAPI:enabled"/>
<int value="1514119870" label="enable-file-manager-touch-mode"/>
<int value="1515196403" label="fast-user-switching"/>
<int value="1517863401" label="history-entry-requires-user-gesture"/>
+ <int value="1524874202" label="only-new-password-form-parsing:disabled"/>
<int value="1529979182" label="EnablePasswordSelection:enabled"/>
<int value="1530113113" label="disable-pushstate-throttle"/>
<int value="1530177325" label="LanguagesPreference:disabled"/>
+ <int value="1531164533" label="SyncPseudoUSSFavicons:disabled"/>
<int value="1534222388" label="EnableEphemeralFlashPermission:enabled"/>
<int value="1536921097" label="NavigationMojoResponse:disabled"/>
<int value="1538685213" label="DownloadHomeV2:enabled"/>
@@ -30692,12 +31363,15 @@ from previous Chrome versions.
<int value="1567839560"
label="ChromeHomePersonalizedOmniboxSuggestions:disabled"/>
<int value="1571998166" label="DetectingHeavyPages:disabled"/>
+ <int value="1577205328"
+ label="DataReductionProxyEnabledWithNetworkService:enabled"/>
<int value="1579461102" label="MemoryCoordinator:disabled"/>
<int value="1586022426" label="AutofillCreditCardAssist:enabled"/>
<int value="1587521886" label="SSLCommittedInterstitials:enabled"/>
<int value="1589341623" label="disable-easy-unlock"/>
<int value="1590278995"
label="AutofillSendExperimentIdsInPaymentsRPCs:enabled"/>
+ <int value="1590300329" label="CCTModulePostMessage:enabled"/>
<int value="1591653786" label="SpeculativePreconnect:enabled"/>
<int value="1593720927" label="GamepadVibration:disabled"/>
<int value="1593917165" label="SimplifiedNTP:disabled"/>
@@ -30706,15 +31380,18 @@ from previous Chrome versions.
<int value="1600926040" label="TranslateCompactUI:enabled"/>
<int value="1605611615" label="enable-webrtc-srtp-aes-gcm"/>
<int value="1611522475" label="AutofillPrimaryInfoStyleExperiment:disabled"/>
+ <int value="1612206633" label="CCTModuleCustomHeader:enabled"/>
<int value="1612446645" label="enable-weak-memorycache"/>
<int value="1612871297" label="WebPayments:disabled"/>
<int value="1612974229" label="allow-insecure-localhost"/>
<int value="1614596813" label="CloseButtonsInactiveTabs:disabled"/>
<int value="1615988672" label="GrantNotificationsToDSE:enabled"/>
<int value="1617187093" label="enable-improved-a2hs"/>
+ <int value="1618633341" label="MashOopViz:enabled"/>
<int value="1621298798" label="VrBrowserKeyboard:enabled"/>
<int value="1622131033" label="ozone-test-single-overlay-support"/>
<int value="1626824478" label="ExperimentalAppBanners:disabled"/>
+ <int value="1628831121" label="SafeBrowsingUseLocalBlacklistsV2:enabled"/>
<int value="1630988998" label="VrBrowsingExperimentalRendering:disabled"/>
<int value="1632112977" label="ash-disable-tablet-autohide-titlebars"/>
<int value="1633456034" label="chrome-home-swipe-logic"/>
@@ -30724,9 +31401,11 @@ from previous Chrome versions.
<int value="1636721063"
label="AutofillLocalCardMigrationShowFeedback:enabled"/>
<int value="1636962093" label="disable-material-design-ntp"/>
+ <int value="1638927687" label="AutofillRichMetadataQueries:disabled"/>
<int value="1639314588" label="LookalikeUrlNavigationSuggestions:disabled"/>
<int value="1640386037" label="ContextualSuggestionsSlimPeekUI:disabled"/>
<int value="1646498561" label="OfflineBookmarks:disabled"/>
+ <int value="1651141490" label="SaveEditedPDFForm:enabled"/>
<int value="1657713458" label="disable-virtual-keyboard-overscroll"/>
<int value="1658644418" label="disable-app-list-voice-search"/>
<int value="1659082220" label="EnableManualSaving:disabled"/>
@@ -30760,6 +31439,7 @@ from previous Chrome versions.
<int value="1702090999" label="ClearOldBrowsingData:disabled"/>
<int value="1702821235" label="WebAssembly:enabled"/>
<int value="1705724232" label="use-android-midi-api"/>
+ <int value="1707283026" label="SyncPseudoUSSExtensions:disabled"/>
<int value="1713230497" label="ColorCorrectRendering:disabled"/>
<int value="1715338237" label="ContextualSearchSecondTap:disabled"/>
<int value="1716104463" label="enable-fullscreen-app-list"/>
@@ -30773,8 +31453,10 @@ from previous Chrome versions.
<int value="1730236697" label="force-device-scale-factor"/>
<int value="1730416578" label="NTPCondensedLayout:enabled"/>
<int value="1731522433" label="enable-offer-store-unmasked-wallet-cards"/>
+ <int value="1731612996" label="CrostiniFiles:disabled"/>
<int value="1733390925" label="force-enable-stylus-tools"/>
<int value="1735934914" label="OverlayScrollbarFlashWhenMouseEnter:disabled"/>
+ <int value="1736698988" label="FsNosymfollow:disabled"/>
<int value="1739456903" label="PWAFullCodeCache:enabled"/>
<int value="1747279677" label="disable-delegated-renderer"/>
<int value="1752168018" label="enable-stale-while-revalidate"/>
@@ -30796,6 +31478,7 @@ from previous Chrome versions.
<int value="1786386775" label="TranslateCompactUI:disabled"/>
<int value="1789517771" label="MacV2Sandbox:enabled"/>
<int value="1792609232" label="NTPShortcuts:enabled"/>
+ <int value="1795186324" label="SyncPseudoUSSExtensionSettings:disabled"/>
<int value="1798347197"
label="ContextualSuggestionsIPHReverseScroll:disabled"/>
<int value="1803465156" label="enable-zero-suggest-most-visited"/>
@@ -30812,6 +31495,7 @@ from previous Chrome versions.
<int value="1820317896" label="NTPShowGoogleGInOmnibox:disabled"/>
<int value="1820451991" label="enable-offline-auto-reload"/>
<int value="1821723343" label="disable-saml-signin"/>
+ <int value="1823102966" label="disable-ipc-flooding-protection"/>
<int value="1825940786" label="ChromeHomePromo:disabled"/>
<int value="1827369558" label="AndroidPayIntegrationV1:disabled"/>
<int value="1828660283" label="enable-webfonts-intervention-trigger"/>
@@ -30822,6 +31506,8 @@ from previous Chrome versions.
<int value="1835523483" label="OmniboxUIExperimentSwapTitleAndUrl:enabled"/>
<int value="1838990777" label="V8Future:enabled"/>
<int value="1839740266" label="LocationHardReload:disabled"/>
+ <int value="1842219851" label="enable-incognito-window-counter"/>
+ <int value="1843088575" label="OutOfBlinkCors:enabled"/>
<int value="1844110073" label="enable-app-view"/>
<int value="1845131710" label="Newblue:enabled"/>
<int value="1847024354" label="enable-hotword-hardware"/>
@@ -30841,6 +31527,7 @@ from previous Chrome versions.
<int value="1865963858" label="tls13-variant"/>
<int value="1866079109" label="team-drives"/>
<int value="1866656400" label="DisplayCutoutAPI:disabled"/>
+ <int value="1866963423" label="SyncPseudoUSSThemes:enabled"/>
<int value="1867085340" label="brotli-encoding:enabled"/>
<int value="1872185826" label="LocationHardReload:enabled"/>
<int value="1874195462" label="ChromeHomeMenuItemsExpandSheet:disabled"/>
@@ -30848,6 +31535,7 @@ from previous Chrome versions.
<int value="1878331098" label="GuestViewCrossProcessFrames:enabled"/>
<int value="1881036528" label="disable-multilingual-spellchecker"/>
<int value="1881174782" label="disable-brotli"/>
+ <int value="1887031213" label="AutofillManualFallbackAndroid:disabled"/>
<int value="1887882558" label="RTCUnifiedPlanByDefault:enabled"/>
<int value="1888812860" label="ChromeModernAlternateCardLayout:enabled"/>
<int value="1889076955" label="disable-app-link"/>
@@ -30868,6 +31556,7 @@ from previous Chrome versions.
<int value="1913298816" label="OverlayScrollbar:enabled"/>
<int value="1913926782" label="ChromeModernAlternateCardLayout:disabled"/>
<int value="1915178511" label="disable-blink-features"/>
+ <int value="1919917329" label="ImplicitRootScroller:disabled"/>
<int value="1924192543" label="ProactiveTabFreezeAndDiscard:enabled"/>
<int value="1925627218" label="FullscreenToolbarReveal:disabled"/>
<int value="1926524951" label="SystemWebApps:disabled"/>
@@ -30876,8 +31565,10 @@ from previous Chrome versions.
<int value="1928407249" label="NewPhotoPicker:enabled"/>
<int value="1930901873" label="disable-sync-app-list"/>
<int value="1931309368" label="fill-on-account-select:disabled"/>
+ <int value="1932204471" label="SyncPseudoUSSThemes:disabled"/>
<int value="1932732886" label="OpenVR:enabled"/>
<int value="1936810062" label="WebVrVsyncAlign:enabled"/>
+ <int value="1938279796" label="PromosOnLocalNtp:disabled"/>
<int value="1939413645" label="enable-invalid-cert-collection"/>
<int value="1940625534" label="NewOverviewUi:disabled"/>
<int value="1942911276" label="enable-grouped-history"/>
@@ -30891,6 +31582,8 @@ from previous Chrome versions.
<int value="1955677113" label="trace-export-events-to-etw"/>
<int value="1957273171" label="PageAlmostIdle:disabled"/>
<int value="1957358530" label="ContextualSearchSecondTap:enabled"/>
+ <int value="1957472162"
+ label="AutofillUpstreamEditableExpirationDate:disabled"/>
<int value="1958387645" label="ScanCardsInWebPayments:enabled"/>
<int value="1959148757" label="OffMainThreadFetch:enabled"/>
<int value="1960169775" label="NewPhotoPicker:disabled"/>
@@ -30942,6 +31635,7 @@ from previous Chrome versions.
<int value="2043321329" label="OfflinePagesPrefetchingUI:disabled"/>
<int value="2056572020" label="EnableUsernameCorrection:disabled"/>
<int value="2058283872" label="CCTModuleCache:disabled"/>
+ <int value="2058439723" label="CalculateNativeWinOcclusion:disabled"/>
<int value="2059322877" label="new-avatar-menu"/>
<int value="2063091429" label="OfflinePagesSharing:enabled"/>
<int value="2067634730" label="LsdPermissionPrompt:disabled"/>
@@ -30987,12 +31681,15 @@ from previous Chrome versions.
<int value="2129184006" label="NTPOfflinePageDownloadSuggestions:enabled"/>
<int value="2129251171" label="memlog-sampling"/>
<int value="2129929643" label="enable-use-zoom-for-dsf"/>
+ <int value="2134480727" label="MediaSessionAccelerators:disabled"/>
+ <int value="2135408204" label="OverscrollHistoryNavigation:disabled"/>
<int value="2137347307" label="enable-drive-apps-in-app-list"/>
<int value="2137599770" label="enable-win32k-renderer-lockdown"/>
<int value="2138146331" label="OmniboxVoiceSearchAlwaysVisible:enabled"/>
<int value="2139048614" label="UseSurfaceLayerForVideo:enabled"/>
<int value="2141067485" label="SystemWebApps:enabled"/>
<int value="2141463681" label="enable-offer-upload-credit-cards"/>
+ <int value="2142661816" label="AllowRemoteContextForNotifications:disabled"/>
<int value="2142979536" label="EnableManualFallbacksFilling:disabled"/>
</enum>
@@ -31022,6 +31719,8 @@ from previous Chrome versions.
<int value="10" label="TPM error"/>
<int value="11" label="Failed to get username hash"/>
<int value="12" label="Failed to get OAuth2 token"/>
+ <int value="13" label="Cryptohome missing from disk"/>
+ <int value="14" label="Authentication disabled for user"/>
</enum>
<enum name="LoginIsKnownUser">
@@ -31213,6 +31912,7 @@ from previous Chrome versions.
<int value="2" label="ClosedRelaunch"/>
<int value="3" label="ClosedFail"/>
<int value="4" label="ClosedAbort"/>
+ <int value="5" label="ClosedFailAndIgnore"/>
</enum>
<enum name="MachKernReturn">
@@ -31591,6 +32291,16 @@ from previous Chrome versions.
</int>
</enum>
+<enum name="ManagePasswordsReferrer">
+ <int value="0" label="Chrome Settings"/>
+ <int value="1" label="Manage Passwords Bubble"/>
+ <int value="2" label="Password Context Manu"/>
+ <int value="3" label="Password Dropdown"/>
+ <int value="4" label="Password Generation Confirmation"/>
+ <int value="5" label="Profile Chooser"/>
+ <int value="6" label="Passwords Accessory Sheet"/>
+</enum>
+
<enum name="ManifestFetchResultType">
<int value="0" label="Fetch succeeded"/>
<int value="1" label="Fetch failed because of empty URL"/>
@@ -32657,6 +33367,7 @@ Called by update_use_counter_css.py.-->
<int value="6" label="Fail to retrieve video thumbnail"/>
<int value="7" label="Failed to parse media file"/>
<int value="8" label="Successfully parsed media file"/>
+ <int value="9" label="Timeout and failed"/>
</enum>
<enum name="MediaPlayerExitStatus">
@@ -32813,11 +33524,12 @@ Called by update_use_counter_css.py.-->
<enum name="MediaRouterUserAction">
<int value="0" label="Change Mode"/>
- <int value="1" label="Start Local"/>
- <int value="2" label="Stop Local"/>
+ <int value="1" label="Start Local Route"/>
+ <int value="2" label="Stop Local Route"/>
<int value="3" label="Close"/>
<int value="4" label="Status Remote"/>
<int value="5" label="Replace Local Route"/>
+ <int value="6" label="Stop Remote Route"/>
</enum>
<enum name="MediaRouteType">
@@ -33072,6 +33784,15 @@ Called by update_use_counter_css.py.-->
<int value="1" label="Http Live Stream Type"/>
</enum>
+<enum name="MediaVideoHeight">
+ <int value="0" label="~360 or lower"/>
+ <int value="1" label="~480"/>
+ <int value="2" label="~720"/>
+ <int value="3" label="~1080"/>
+ <int value="4" label="~1440"/>
+ <int value="5" label="~2160 or higher"/>
+</enum>
+
<enum name="MemCacheWriteResult">
<int value="0" label="Success"/>
<int value="1" label="Invalid Argument"/>
@@ -33172,6 +33893,22 @@ Called by update_use_counter_css.py.-->
<int value="6" label="Render process no longer exists"/>
</enum>
+<enum name="MhtmlLoadResult">
+ <int value="0" label="Success">Archive loaded successfully</int>
+ <int value="1" label="Empty file">
+ Failed to load archive because the file was empty
+ </int>
+ <int value="2" label="URL scheme not allowed">
+ Failed to load archive because the url wasn't http(s), file, or content
+ </int>
+ <int value="3" label="Invalid archive">
+ Failed to load archive because it was not valid MHTML
+ </int>
+ <int value="4" label="Missing main resource">
+ Failed to load archive because it had no main resource
+ </int>
+</enum>
+
<enum name="MicrophoneMuteResult">
<int value="0" label="Muted"/>
<int value="1" label="Not muted"/>
@@ -33332,6 +34069,9 @@ Called by update_use_counter_css.py.-->
<int value="2" label="Resumption button clicked"/>
<int value="3" label="Resumption failed"/>
<int value="4" label="Resumption auto started"/>
+ <int value="5" label="Resumption started while browser process is running"/>
+ <int value="6"
+ label="Resumption started while browser process is not running"/>
</enum>
<enum name="MobileDownloadStoragePermission">
@@ -33404,6 +34144,7 @@ Called by update_use_counter_css.py.-->
<int value="3" label="Shutdown in foreground; no log; with memory warning"/>
<int value="4" label="Shutdown in foreground; with log; with memory warning"/>
<int value="5" label="First launch after upgrade"/>
+ <int value="6" label="Shutdown in foreground, main thread not responding"/>
</enum>
<enum name="MobileSessionStartAction">
@@ -33589,12 +34330,80 @@ Called by update_use_counter_css.py.-->
<int value="2" label="SUCCESS">All operations succeeded.</int>
</enum>
+<enum name="MultiDevice_DeviceSyncService_DeviceSyncRequestFailureReason">
+ <int value="0" label="Requested succeeded but unexpected result"/>
+ <int value="1" label="Service not yet initialized"/>
+ <int value="2" label="Device offline"/>
+ <int value="3" label="Server endpoint not found"/>
+ <int value="4" label="Authentication error"/>
+ <int value="5" label="Bad request"/>
+ <int value="6" label="Response malformed"/>
+ <int value="7" label="Internal server error"/>
+ <int value="8" label="Unknown network error"/>
+ <int value="9" label="Unknown error"/>
+</enum>
+
+<enum name="MultiDevice_DeviceSyncService_Features">
+ <int value="0" label="Unknown"/>
+ <int value="1" label="Better Together Suite"/>
+ <int value="2" label="Smart Lock"/>
+ <int value="3" label="Instant Tethering"/>
+ <int value="4" label="Messages"/>
+ <int value="5" label="Unexpected Client Feature"/>
+</enum>
+
+<enum name="MultiDevice_DeviceSyncService_ForceCryptAuthOperationResult">
+ <int value="0" label="Success"/>
+ <int value="1" label="Service not ready"/>
+</enum>
+
+<enum name="MultiDevice_FeatureState">
+ <int value="0" label="Prohibited by policy"/>
+ <int value="1" label="Disabled by user"/>
+ <int value="2" label="Enabled by user"/>
+ <int value="3" label="Not support by Chromebook"/>
+ <int value="4" label="Not supported by phone"/>
+ <int value="5" label="Unable, no verified host"/>
+ <int value="6" label="Unavailable, insufficient security"/>
+ <int value="7" label="Unavailable, suite disabled"/>
+ <int value="8" label="Further setup required"/>
+</enum>
+
+<enum name="MultiDevice_PostOOBESetupFlow_Page">
+ <int value="0" label="Unknown page"/>
+ <int value="1" label="Start page"/>
+ <int value="2" label="Password page"/>
+ <int value="3" label="Success page"/>
+</enum>
+
+<enum name="MultiDevice_Setup_HostStatus">
+ <int value="0" label="No eligible hosts"/>
+ <int value="1" label="Eligible host exists but no host set"/>
+ <int value="2" label="Host set locally but waiting for backend confirmation"/>
+ <int value="3" label="Host set but not yet verified"/>
+ <int value="4" label="Host verified"/>
+</enum>
+
+<enum name="MultiDevice_VerifyAndForgetHostConfirmationState">
+ <int value="0" label="Button clicked"/>
+ <int value="1" label="Completed Setup"/>
+</enum>
+
<enum name="MultiDeviceSetupNotification">
<int value="0" label="New user, potential host exists"/>
<int value="1" label="Existing user, host switched"/>
<int value="2" label="Existing user, new Chromebook added"/>
</enum>
+<enum name="MultiDeviceSetupOOBEUserChoice">
+ <int value="0" label="MULTI_DEVICE_SETUP_OOBE_USER_CHOICE_ACCEPTED">
+ Accepted MultiDevice OOBE Setup.
+ </int>
+ <int value="1" label="MULTI_DEVICE_SETUP_OOBE_USER_CHOICE_DECLINED">
+ Declined MultiDevice OOBE Setup.
+ </int>
+</enum>
+
<enum name="MultiDisplayModeDisplayCountRanges">
<summary>
Defines the ranges in which the number of displays connected in multi
@@ -33874,6 +34683,13 @@ Called by update_use_counter_css.py.-->
<int value="3" label="Not found"/>
<int value="4" label="Unsupported device"/>
<int value="5" label="Mount exists"/>
+ <int value="6" label="Invalid URL format"/>
+ <int value="7" label="Invalid operation"/>
+ <int value="8" label="D-Bus failure"/>
+ <int value="9" label="Out of memory"/>
+ <int value="10" label="Operation aborted"/>
+ <int value="11" label="I/O error"/>
+ <int value="12" label="Too many opened"/>
</enum>
<enum name="NatTypeCounters">
@@ -33901,6 +34717,16 @@ Called by update_use_counter_css.py.-->
<int value="2" label="Back">Scrolled back</int>
</enum>
+<enum name="NavigationDownloadPolicy">
+ <int value="0" label="Allowed"/>
+ <int value="1" label="Disallowed (view-source)"/>
+ <int value="2" label="Disallowed (interstitial)"/>
+ <int value="3" label="Allowed (opener)"/>
+ <int value="4" label="Allowed (no gesture)"/>
+ <int value="5" label="Allowed (x-origin)"/>
+ <int value="6" label="Allowed (no gesture and x-origin)"/>
+</enum>
+
<enum name="NavigationInterceptResult">
<int value="0" label="Created external intent"/>
<int value="1" label="Created external intent with tab clobbering"/>
@@ -33913,6 +34739,40 @@ Called by update_use_counter_css.py.-->
<int value="1" label="Same process navigation"/>
</enum>
+<enum name="NavigationNeedsReloadType">
+ <int value="0" label="kRequestedByClient"/>
+ <int value="1" label="kRestoreSession"/>
+ <int value="2" label="kCopyStateFrom"/>
+</enum>
+
+<enum name="NavigationPredictorAccuracyActionTaken">
+ <int value="0" label="No action was taken by the predictor"/>
+ <int value="1" label="Click was to the same URL as the prefetch URL"/>
+ <int value="2"
+ label="Click was to a URL with the same origin but different URL as the
+ prefetch URL"/>
+ <int value="3"
+ label="Click was to a URL with different origin than the prefetch URL"/>
+ <int value="4"
+ label="Click was to a URL with the same origin as the preconnected
+ origin"/>
+ <int value="5"
+ label="Click was to a URL with different origin than the preconnected
+ origin"/>
+</enum>
+
+<enum name="NavigationPredictorActionTaken">
+ <int value="0" label="Unknown"/>
+ <int value="1" label="None"/>
+ <int value="2" label="A host was preresolved"/>
+ <int value="3" label="An origin was preconnected to at onLoad"/>
+ <int value="4" label="A URL was prefetched"/>
+ <int value="5"
+ label="An origin was preconnected to when tab was foregrounded"/>
+ <int value="6"
+ label="An origin was preconnected to when app was foregrounded"/>
+</enum>
+
<enum name="NavigationScheme">
<int value="0" label="(Unknown)"/>
<int value="1" label="http"/>
@@ -34401,17 +35261,22 @@ Called by update_net_error_codes.py.-->
An error page was shown with at least a &quot;Download Page Later&quot;
button on it and the user pressed that button.
</int>
- <int value="24" label="Offline Suggestions Shown">
- An error page was shown with at least one offline content suggestion.
+ <int value="24" label="Offline Suggestions List Shown">
+ A list containing at least one item of offline content suggestions was shown
+ in the expanded/shown state.
</int>
- <int value="25" label="Offline Suggestion Clicked">
- The user pressed a button to open an offline content suggestion.
+ <int value="25" label="Offline Suggestion List Item Clicked">
+ An item from the offline content suggestions list was clicked.
</int>
<int value="26" label="Downloads Page Button Clicked">
- The user pressed a button to open the downloads page.
+ A link that opens the downloads page was clicked.
</int>
<int value="27" label="Offline Content Summary Shown">
- A summary of available offline content was presented.
+ A summary of available offline content was shown.
+ </int>
+ <int value="28" label="Offline Suggestions List Shown Collapsed">
+ A list containing at least one item of offline content suggestions was shown
+ in the collapsed/hidden state.
</int>
</enum>
@@ -36199,6 +37064,7 @@ Called by update_net_trust_anchors.py.-->
<int value="1" label="Arc++"/>
<int value="2" label="Web Page"/>
<int value="3" label="System Component"/>
+ <int value="4" label="Crostini"/>
</enum>
<enum name="NotifyResult">
@@ -36211,7 +37077,7 @@ Called by update_net_trust_anchors.py.-->
<enum name="NotStreamingReason">
<int value="0" label="DEPRECATED: Already loaded"/>
<int value="1" label="Not HTTP"/>
- <int value="2" label="Reload"/>
+ <int value="2" label="Revalidation"/>
<int value="3" label="Context not valid"/>
<int value="4" label="Encoding not supported"/>
<int value="5" label="Thread busy"/>
@@ -36268,6 +37134,7 @@ Called by update_net_trust_anchors.py.-->
<int value="5" label="HTTP-layer external estimate provider"/>
<int value="6" label="Transport-layer cached"/>
<int value="7" label="Transport-layer default"/>
+ <int value="8" label="H2 pings"/>
</enum>
<enum name="NTPBackgroundCustomizationAvailability">
@@ -36519,6 +37386,16 @@ Called by update_net_trust_anchors.py.-->
<int value="2" label="Null"/>
</enum>
+<enum name="NuxEmailInterstitialInteractions">
+ <summary>
+ Interactions a user can take on the email interstitial onboarding step.
+ </summary>
+ <int value="0" label="Page Shown"/>
+ <int value="1" label="Navigated Away"/>
+ <int value="2" label="Skip"/>
+ <int value="3" label="Next"/>
+</enum>
+
<enum name="NuxEmailProvidersInteractions">
<summary>
All possible user journeys when interacting with the NUX email provider
@@ -36533,6 +37410,8 @@ Called by update_net_trust_anchors.py.-->
<int value="6" label="Clicked disabled next button then navigated away"/>
<int value="7" label="Clicked disabled next button then chose skip"/>
<int value="8" label="Clicked disabled next button then chose next"/>
+ <int value="9" label="Did nothing and clicked next"/>
+ <int value="10" label="Navigated away through browser history"/>
</enum>
<enum name="NuxEmailProvidersSelections">
@@ -36548,9 +37427,19 @@ Called by update_net_trust_anchors.py.-->
<summary>
The button that a user pressed when interacting with the Google Apps NUX.
</summary>
- <int value="0" label="Prompt Seen"/>
- <int value="1" label="No Thanks"/>
- <int value="2" label="Get Started"/>
+ <int value="0" label="Page Shown"/>
+ <int value="1" label="No Thanks (deprecated)"/>
+ <int value="2" label="Get Started (deprecated)"/>
+ <int value="3" label="Did nothing and navigated away"/>
+ <int value="4" label="Did nothing and clicked skip"/>
+ <int value="5" label="Chose an option then navigated away"/>
+ <int value="6" label="Chose an option then chose skip"/>
+ <int value="7" label="Chose an option then chose next"/>
+ <int value="8" label="Clicked disabled next button then navigated away"/>
+ <int value="9" label="Clicked disabled next button then chose skip"/>
+ <int value="10" label="Clicked disabled next button then chose next"/>
+ <int value="11" label="Did nothing and clicked next"/>
+ <int value="12" label="Navigated away through browser history"/>
</enum>
<enum name="NuxGoogleAppsSelections">
@@ -36563,6 +37452,40 @@ Called by update_net_trust_anchors.py.-->
<int value="5" label="Chrome Web Store"/>
</enum>
+<enum name="NuxLandingPageInteractions">
+ <summary>
+ Interactions a user can take on the initial onboarding step.
+ </summary>
+ <int value="0" label="Page Shown"/>
+ <int value="1" label="Navigated Away"/>
+ <int value="2" label="New User"/>
+ <int value="3" label="Existing User"/>
+</enum>
+
+<enum name="NuxSetAsDefaultInteractions">
+ <summary>
+ Interactions a user can take on the &quot;Set as default&quot; onboarding
+ step.
+ </summary>
+ <int value="0" label="Page Shown"/>
+ <int value="1" label="Navigated Away"/>
+ <int value="2" label="Skip"/>
+ <int value="3" label="Clicked Set Default"/>
+ <int value="4" label="Successfully Set Default"/>
+ <int value="5" label="Navigated Away Through Browser History"/>
+</enum>
+
+<enum name="NuxSignInInterstitialInteractions">
+ <summary>
+ Interactions a user can take on the sign in interstitial onboarding step.
+ </summary>
+ <int value="0" label="Page Shown"/>
+ <int value="1" label="Navigated Away"/>
+ <int value="2" label="Skip"/>
+ <int value="3" label="Sign In"/>
+ <int value="4" label="Navigated Away Through Browser History"/>
+</enum>
+
<enum name="OAuth2LoginAccountRevokedMigrationState">
<int value="0" label="Account ID migration not started"/>
<int value="1" label="Account ID migration in progress"/>
@@ -36577,6 +37500,15 @@ Called by update_net_trust_anchors.py.-->
label="Account was not seeded before FireRefreshTokenAvailable"/>
</enum>
+<enum name="OAuthMultiloginResponseStatus">
+ <int value="0" label="UNKNOWN_STATUS"/>
+ <int value="1" label="OK"/>
+ <int value="2" label="RETRY"/>
+ <int value="3" label="INVALID_INPUT"/>
+ <int value="4" label="INVALID_TOKENS"/>
+ <int value="5" label="ERROR"/>
+</enum>
+
<enum name="OCSPResponseStatus">
<int value="0" label="Not checked"/>
<int value="1" label="Missing"/>
@@ -36819,7 +37751,8 @@ Called by update_net_trust_anchors.py.-->
Namespace used when offline page is saved as last_n page.
</int>
<int value="3" label="Async_loading">
- Namespace used when offline page is saved from save page later on dino page.
+ Namespace used when offline page is saved after the user clicks a button on
+ the dino page.
</int>
<int value="4" label="Custom_tabs">
Namespace used when offline page is saved from custom tabs.
@@ -36839,6 +37772,10 @@ Called by update_net_trust_anchors.py.-->
<int value="9" label="Live_page_sharing">
Namespace used when offline page is saved for live page sharing.
</int>
+ <int value="10" label="Auto_async_loading">
+ Namespace used for temporary offline pages requested to be downloaded when
+ the user landed in a dino page.
+ </int>
</enum>
<enum name="OfflinePagesOfflineUsage">
@@ -37142,6 +38079,10 @@ Called by update_net_trust_anchors.py.-->
<int value="1100" label="STALE_AT_UNKNOWN">
Entry became stale at an unknown state.
</int>
+ <int value="1150" label="STUCK">
+ The item was terminated because it remained in the pipeline for more than 7
+ days.
+ </int>
<int value="1200" label="GET_OPERATION_MAX_ATTEMPTS_REACHED">
Exceeding maximum retries for get operation request.
</int>
@@ -37158,6 +38099,10 @@ Called by update_net_trust_anchors.py.-->
The importing was not completed probably due to that Chrome was killed
before it was done.
</int>
+ <int value="1700" label="SUGGESTION_INVALIDATED">
+ The page suggestion is no longer valid, so the item no longer needs to be
+ downloaded.
+ </int>
</enum>
<enum name="OfflinePrefetchItemState">
@@ -37264,6 +38209,9 @@ Called by update_net_trust_anchors.py.-->
</enum>
<enum name="OmniboxEnteredKeywordMode">
+ <obsolete>
+ Deprecated 10/2018 and replaced with OmniboxEnteredKeywordMode2.
+ </obsolete>
<int value="0" label="via tab"/>
<int value="1" label="via space at end"/>
<int value="2" label="via space in middle"/>
@@ -37273,6 +38221,18 @@ Called by update_net_trust_anchors.py.-->
<int value="6" label="tap gesture on hint view"/>
</enum>
+<enum name="OmniboxEnteredKeywordMode2">
+ <int value="0" label="invalid"/>
+ <int value="1" label="via tab"/>
+ <int value="2" label="via space at end"/>
+ <int value="3" label="via space in middle"/>
+ <int value="4" label="keyboard shortcut"/>
+ <int value="5" label="question mark"/>
+ <int value="6" label="mouse click on hint view"/>
+ <int value="7" label="tap gesture on hint view"/>
+ <int value="8" label="select suggestion"/>
+</enum>
+
<enum name="OmniboxFocusReason">
<int value="0" label="Omnibox tapped."/>
<int value="1" label="Omnibox long-pressed."/>
@@ -37673,6 +38633,35 @@ Called by update_net_trust_anchors.py.-->
</int>
</enum>
+<enum name="OSXFastUserSwitchEvent">
+ <int value="0" label="User Became Active"/>
+ <int value="1" label="User Became Inactive"/>
+</enum>
+
+<enum name="OSXFilesystem">
+ <int value="0" label="Unknown"/>
+ <int value="1" label="Other"/>
+ <int value="2" label="Apple Xsan"/>
+ <int value="3" label="AFP network share"/>
+ <int value="4" label="APFS"/>
+ <int value="5" label="ISO9660 CD"/>
+ <int value="6" label="CD digital audio">!</int>
+ <int value="7" label="exFAT"/>
+ <int value="8" label="FTP"/>
+ <int value="9" label="HFS family"/>
+ <int value="10" label="HFS read-only disk image">
+ An HFS read-only disk image, likely the original Chromium distribution disk
+ image.
+ </int>
+ <int value="11" label="FAT12/16/32"/>
+ <int value="12" label="NFS"/>
+ <int value="13" label="NTFS"/>
+ <int value="14" label="SMB network share"/>
+ <int value="15" label="UDF"/>
+ <int value="16" label="WebDAV"/>
+ <int value="17" label="Google Drive File Stream"/>
+</enum>
+
<enum name="OSXFullscreenParameters">
<int value="0" label="IMMERSIVE_SECONDARY_SHARED_SINGLE">INVALID</int>
<int value="1" label="APPKIT_SECONDARY_SHARED_SINGLE">INVALID</int>
@@ -37792,6 +38781,15 @@ Called by update_net_trust_anchors.py.-->
</int>
</enum>
+<enum name="OSXStagingDirectoryStep">
+ <int value="0" label="failure"/>
+ <int value="1" label="NSItemReplacementDirectory"/>
+ <int value="2" label="Sibling directory"/>
+ <int value="3" label="NSTemporaryDirectory"/>
+ <int value="4" label="TMPDIR"/>
+ <int value="5" label="/tmp"/>
+</enum>
+
<enum name="OtherPossibleUsernamesUsage">
<int value="0" label="Nothing to Autofill"/>
<int value="1" label="No other possible usernames"/>
@@ -38029,6 +39027,15 @@ Called by update_net_trust_anchors.py.-->
<int value="23" label="Longest input delay less than first input delay"/>
</enum>
+<enum name="PageLoadTimingUnderStat">
+ <int value="0" label="Total count of metric values"/>
+ <int value="1" label="Metric value was less than 1 seconds"/>
+ <int value="2" label="Metric value was less than 2 seconds"/>
+ <int value="3" label="Metric value was less than 5 seconds"/>
+ <int value="4" label="Metric value was less than 8 seconds"/>
+ <int value="5" label="Metric value was less than 10 seconds"/>
+</enum>
+
<enum name="PageScaleFactorRange">
<int value="0" label="&lt;25%"/>
<int value="1" label="25-49%"/>
@@ -38323,6 +39330,17 @@ Called by update_net_trust_anchors.py.-->
<int value="5" label="Weak signature algorithm"/>
</enum>
+<enum name="PasswordDropdownSelectedOption">
+ <int value="0" label="Password"/>
+ <int value="1" label="Manage passwords"/>
+ <int value="2" label="Generate password"/>
+</enum>
+
+<enum name="PasswordDropdownState">
+ <int value="0" label="Password suggestions"/>
+ <int value="1" label="Passwords and generate new password"/>
+</enum>
+
<enum name="PasswordFormQueryVolume">
<int value="0" label="New password query"/>
<int value="1" label="Current query"/>
@@ -38364,7 +39382,7 @@ Called by update_net_trust_anchors.py.-->
<int value="0" label="Password accepted"/>
<int value="1" label="Password edited"/>
<int value="2" label="Password deleted"/>
- <int value="3" label="Password rejected in modal dialog"/>
+ <int value="3" label="Password rejected in modal dialog (obsolete)"/>
</enum>
<enum name="PasswordImportFromCSVResult">
@@ -38837,6 +39855,21 @@ Called by update_net_trust_anchors.py.-->
<int value="1" label="From Android"/>
</enum>
+<enum name="PasswordManagerHttpCredentialType">
+ <summary>
+ This enum records the type of a given HTTP credential. Depending on its
+ username and the password, an HTTP credential can have no matching, an
+ equivalent or a conflicting HTTPS credentials. Also the corresponding
+ website can be served with or without HSTS enabled.
+ </summary>
+ <int value="0" label="Conflicting HTTPS, HSTS disabled"/>
+ <int value="1" label="Conflicting HTTPS, HSTS enabled"/>
+ <int value="2" label="Equivalent HTTPS, HSTS disabled"/>
+ <int value="3" label="Equivalent HTTPS, HSTS enabled"/>
+ <int value="4" label="No Matching HTTPS, HSTS disabled"/>
+ <int value="5" label="No Matching HTTPS, HSTS enabled"/>
+</enum>
+
<enum name="PasswordManagerOfferedAndroidCredentials">
<int value="0" label="None from Android"/>
<int value="1" label="1+ from Android"/>
@@ -39379,6 +40412,26 @@ Called by update_net_trust_anchors.py.-->
<int value="3" label="Foreground XFA (XFAF)"/>
</enum>
+<enum name="PeerConnectionAnswererState">
+ <int value="0" label="NotStarted"/>
+ <int value="1" label="SetRemoteOfferPending"/>
+ <int value="2" label="SetRemoteOfferRejected"/>
+ <int value="3" label="SetRemoteOfferResolved"/>
+ <int value="4" label="CreateAnswerPending"/>
+ <int value="5" label="CreateAnswerRejected"/>
+ <int value="6" label="CreateAnswerResolved"/>
+ <int value="7" label="SetLocalAnswerPending"/>
+ <int value="8" label="SetLocalAnswerRejected"/>
+ <int value="9" label="SetLocalAnswerResolved"/>
+</enum>
+
+<enum name="PeerConnectionCallSetupState">
+ <int value="0" label="NotStarted"/>
+ <int value="1" label="Started"/>
+ <int value="2" label="Failed"/>
+ <int value="3" label="Succeeded"/>
+</enum>
+
<enum name="PeerConnectionCounters">
<int value="0" label="PeerConnection enabled with IPv4."/>
<int value="1" label="PeerConnection enabled with Ipv6."/>
@@ -39400,6 +40453,19 @@ Called by update_net_trust_anchors.py.-->
<int value="5" label="SDES Data"/>
</enum>
+<enum name="PeerConnectionOffererState">
+ <int value="0" label="NotStarted"/>
+ <int value="1" label="CreateOfferPending"/>
+ <int value="2" label="CreateOfferRejected"/>
+ <int value="3" label="CreateOfferResolved"/>
+ <int value="4" label="SetLocalOfferPending"/>
+ <int value="5" label="SetLocalOfferRejected"/>
+ <int value="6" label="SetLocalOfferResolved"/>
+ <int value="7" label="SetRemoteAnswerPending"/>
+ <int value="8" label="SetRemoteAnswerRejected"/>
+ <int value="9" label="SetRemoteAnswerResolved"/>
+</enum>
+
<enum name="PeerConnectionRtcpMux">
<int value="0" label="Disabled"/>
<int value="1" label="Enabled"/>
@@ -39432,6 +40498,12 @@ Called by update_net_trust_anchors.py.-->
<int value="2" label="Unified Plan"/>
</enum>
+<enum name="PeerConnectionSdpUsageCategory">
+ <int value="0" label="Safe"/>
+ <int value="1" label="Unsafe"/>
+ <int value="2" label="Unknown"/>
+</enum>
+
<enum name="PepperBrokerAction">
<int value="0" label="Create"/>
<int value="1" label="Connect"/>
@@ -39634,11 +40706,7 @@ Called by update_net_trust_anchors.py.-->
<int value="2126196629" label="PPB_UDPSocket_Private;0.4"/>
</enum>
-<enum name="PerformanceMeasurePassedInParameterType">
- <obsolete>
- Deprecated 05/2018. Made decision in issue 758385 with already acquired
- data. So this is no longer needed.
- </obsolete>
+<enum name="PerformanceMeasureParameterType">
<int value="0" label="OBJECT_OBJECT"/>
<int value="1" label="UNLOAD_EVENT_START"/>
<int value="2" label="UNLOAD_EVENT_END"/>
@@ -39649,6 +40717,22 @@ Called by update_net_trust_anchors.py.-->
<int value="7" label="LOAD_EVENT_START"/>
<int value="8" label="LOAD_EVENT_END"/>
<int value="9" label="OTHER"/>
+ <int value="10" label="UNDEFINED_OR_NULL"/>
+ <int value="11" label="NUMBER"/>
+ <int value="12" label="UNPROVIDED"/>
+ <int value="13" label="NAVIGATION_START"/>
+ <int value="14" label="REDIRECT_START"/>
+ <int value="15" label="REDIRECT_END"/>
+ <int value="16" label="FETCH_START"/>
+ <int value="17" label="DOMAIN_LOOKUP_START"/>
+ <int value="18" label="DOMAIN_LOOKUP_END"/>
+ <int value="19" label="CONNECT_START"/>
+ <int value="20" label="CONNECT_END"/>
+ <int value="21" label="SECURE_CONNECTION_START"/>
+ <int value="22" label="REQUEST_START"/>
+ <int value="23" label="RESPONSE_START"/>
+ <int value="24" label="RESPONSE_END"/>
+ <int value="25" label="DOM_LOADING"/>
</enum>
<enum name="PermissionAction">
@@ -40823,7 +41907,7 @@ Called by update_net_trust_anchors.py.-->
presented.
</summary>
<int value="0" label="Successful">
- The dialog was sucessesfully presented.
+
</int>
<int value="1" label="Another Add Passes View Controller Is Presented">
The dialog cannot be presented, because another PKAddPassesViewController is
@@ -40847,6 +41931,24 @@ Called by update_net_trust_anchors.py.-->
<int value="7" label="RemotePlayback"/>
</enum>
+<enum name="PresentQLPreviewController">
+ <int value="0" label="Successful">
+ The AR model was sucessesfully presented.
+ </int>
+ <int value="1" label="Invalid File">
+ The AR model cannot be presented, because the file is invalid.
+ </int>
+ <int value="2" label="Another QLPreviewController Is Presented">
+ The AR model cannot be presented, because another QLPreviewController is
+ already presented.
+ </int>
+ <int value="3" label="Another View Controller Is Presented">
+ The AR model cannot be presented, because another view controller is already
+ presented. Does not include items already counted in the more specific
+ bucket (Another QLPreviewController Is Presented).
+ </int>
+</enum>
+
<enum name="PreTapEvents">
<int value="0" label="no event"/>
<int value="1" label="tapdown"/>
@@ -40871,7 +41973,7 @@ Called by update_net_trust_anchors.py.-->
<int value="4" label="User is blacklisted for all hosts."/>
<int value="5" label="User is blacklisted for the specific host."/>
<int value="6" label="The network quality estimate is not available."/>
- <int value="7" label="The network is not slow enough to show previews."/>
+ <int value="7" label="Network is not slow per preview threshold."/>
<int value="8"
label="The page was being reloaded and the preview type can not be
shown on a reload."/>
@@ -40879,12 +41981,14 @@ Called by update_net_trust_anchors.py.-->
label="Host blacklisted by server rules provided to the client."/>
<int value="10"
label="Host not whitelisted by server rules provided to the client."/>
- <int value="11" label="Preview Allowed without server rule check."/>
+ <int value="11"
+ label="Preview Allowed without server rule check (obsolete)."/>
<int value="12" label="Committed Preview."/>
<int value="13" label="Received no-transform directive.">
Response header had Cache-Control:no-transform directive (developer
opt-out).
</int>
+ <int value="14" label="Network is not slow per session threshold."/>
</enum>
<enum name="PreviewsInfoBarAction">
@@ -40953,6 +42057,7 @@ Called by update_net_trust_anchors.py.-->
<int value="0" label="Path suffix"/>
<int value="1" label="Navigation to Previews Domain"/>
<int value="2" label="Navigation to Private Domain"/>
+ <int value="3" label="The requested host was blacklisted by the server"/>
</enum>
<enum name="PreviewsServerLitePageIneligibleReason">
@@ -40963,6 +42068,7 @@ Called by update_net_trust_anchors.py.-->
<int value="4" label="Infobar hasn't been seen by the user and needs to be"/>
<int value="5" label="Network was not slow"/>
<int value="6" label="User opted out of this preview (pre-s13n only)"/>
+ <int value="7" label="The user has blocked cookies for the original page"/>
</enum>
<enum name="PreviewsServerLitePageServerResponse">
@@ -42843,6 +43949,7 @@ Called by update_net_trust_anchors.py.-->
<int value="50" label="NetworkingWithURLLoaderAnnotation"/>
<int value="51" label="WorkerAnimation"/>
<int value="52" label="MainThreadTaskQueueCleanup"/>
+ <int value="55" label="InternalTranslation"/>
</enum>
<enum name="RendererSchedulerTaskUseCase">
@@ -44194,6 +45301,8 @@ Called by update_net_trust_anchors.py.-->
<int value="315" label="OSAX"/>
<int value="316" label="SETTINGCONTENT-MS"/>
<int value="317" label="OXT"/>
+ <int value="318" label="PYD"/>
+ <int value="319" label="PYO"/>
</enum>
<enum name="SBClientDownloadIsSignedBinary">
@@ -44805,6 +45914,9 @@ Called by update_net_trust_anchors.py.-->
</enum>
<enum name="ServiceWorkerMainResourceRequestDestination">
+ <obsolete>
+ Not used since November 2018
+ </obsolete>
<summary>
Describes whether a main resource request went to service worker or network
or errored.
@@ -45117,6 +46229,12 @@ Called by update_net_trust_anchors.py.-->
</int>
</enum>
+<enum name="SettingsNavigationSources">
+ <int value="0" label="Other"/>
+ <int value="1" label="From TWA clear data dialog"/>
+ <int value="2" label="From TWA manage space activity"/>
+</enum>
+
<enum name="SettingsResetPromptConfigError">
<int value="1" label="Config Ok"/>
<int value="2" label="Missing domain_hashes param"/>
@@ -45250,6 +46368,26 @@ Called by update_net_trust_anchors.py.-->
label="Unpacking the (possibly patched) uncompressed archive failed."/>
</enum>
+<enum name="SetupInstallServiceInstallResult">
+ <int value="0" label="Failed fresh install of service."/>
+ <int value="1" label="Failed install new service after upgrade failed."/>
+ <int value="2" label="Failed to open the SC manager."/>
+ <int value="3" label="Succeeded change service config."/>
+ <int value="4" label="Succeeded fresh install of service."/>
+ <int value="5" label="Succeeded install new and delete original service."/>
+ <int value="6"
+ label="Succeeded install new but failed delete original service."/>
+ <int value="7"
+ label="Succeeded, service correctly configured, nothing to be done."/>
+</enum>
+
+<enum name="SetupInstallServiceRollbackResult">
+ <int value="0" label="Failed to delete the currently installed service."/>
+ <int value="1" label="Failed to rollback to the original service config."/>
+ <int value="2" label="Succeeded deleting the currently installed service."/>
+ <int value="3" label="Succeeded rollback to the original service config."/>
+</enum>
+
<enum name="SetupSingletonAcquisitionResult">
<int value="0" label="The setup singleton was acquired successfully."/>
<int value="1" label="Acquisition of the exit event mutex timed out."/>
@@ -45697,9 +46835,16 @@ Called by update_net_trust_anchors.py.-->
<int value="8" label="User turned off sync from DICE UI.">
User turned off sync from the Desktop Identity Consistency internals UI.
</int>
- <int value="9" label="(Android) Account removed from device">
+ <int value="9" label="[Android] Account removed from device">
Signout forced because account was removed from device.
</int>
+ <int value="10" label="Account removed from device">
+ Signout forced when profile is loaded as browser sign-in is no longer
+ allowed.
+ </int>
+ <int value="11" label="[Tests] Force sign-out">
+ Signout is forced. Used only for tests.
+ </int>
</enum>
<enum name="SigninSource">
@@ -45738,6 +46883,7 @@ Called by update_net_trust_anchors.py.-->
<int value="6" label="Regular to None"/>
<int value="7" label="Load Regular"/>
<int value="8" label="Load Invalid"/>
+ <int value="9" label="Load Invalid (no token for primary)"/>
</enum>
<enum name="SigninTokenTableReadTokenFromDBResult">
@@ -45815,6 +46961,7 @@ Called by update_net_trust_anchors.py.-->
<int value="7" label="kUpgradeIndexV5V6Failed"/>
<int value="8" label="kWriteFakeIndexFileFailed"/>
<int value="9" label="kReplaceFileFailed"/>
+ <int value="10" label="kBadFakeIndexReadSize"/>
</enum>
<enum name="SimpleCacheHeaderSizeChange">
@@ -46067,12 +47214,37 @@ Called by update_net_trust_anchors.py.-->
<int value="3" label="Large Downscale"/>
</enum>
+<enum name="SmartLockAuthResultFailureReason">
+ <int value="0" label="Unlock not allowed"/>
+ <int value="1" label="Already attempting auth"/>
+ <int value="2" label="Empty user account"/>
+ <int value="3" label="Invalid account id"/>
+ <int value="4" label="Auth attempt cannot start"/>
+ <int value="5" label="No pending or active host"/>
+ <int value="6" label="Failed to notify host device that Smart Lock was used"/>
+ <int value="7" label="Failed to send unlock request"/>
+ <int value="8" label="Authentication channel dropped"/>
+ <int value="9" label="Authentication attempt timed out"/>
+ <int value="10" label="Unlock event sent but not attempting auth"/>
+ <int value="11" label="Unlock request sent but not attempting auth"/>
+ <int value="12" label="Failed to decrypt sign-in"/>
+</enum>
+
<enum name="SmartLockEnabledState">
<int value="0" label="Enabled"/>
<int value="1" label="Disabled"/>
<int value="2" label="Unset"/>
</enum>
+<enum name="SmartLockGetRemoteStatusResultFailureReason">
+ <int value="0" label="Timed out Bluetooth disabled"/>
+ <int value="1" label="Timed out could not establish authenticated channel"/>
+ <int value="2" label="Timed out did not receive remote status update"/>
+ <int value="3" label="User entered password while Bluetooth disabled"/>
+ <int value="4" label="User entered password while connecting"/>
+ <int value="5" label="Authenticated channel dropped"/>
+</enum>
+
<enum name="SnackbarIdentifier">
<int value="-2" label="TEST_SNACKBAR"/>
<int value="-1" label="UNKNOWN"/>
@@ -46105,6 +47277,7 @@ Called by update_net_trust_anchors.py.-->
<int value="26" label="FEED_NTP_STREAM"/>
<int value="27" label="UMA_WEBAPK_PRIVACY_DISCLOSURE"/>
<int value="28" label="UMA_TWA_PRIVACY_DISCLOSURE"/>
+ <int value="29" label="UMA_AUTOFILL_ASSISTANT_STOP_UNDO"/>
</enum>
<enum name="SnippetOpenMethod">
@@ -46272,6 +47445,25 @@ Called by update_net_trust_anchors.py.-->
<int value="3" label="User-initiated with logs enabled"/>
</enum>
+<enum name="SourceForRefreshTokenOperation">
+ <int value="0" label="Unknown"/>
+ <int value="1" label="TokenService::LoadCredentials"/>
+ <int value="2" label="SupervisedUser::InitSync"/>
+ <int value="3" label="InlineLoginHandler::Signin"/>
+ <int value="4" label="SigninManager::ClearPrimaryAccount"/>
+ <int value="5" label="SigninManager::LegacyPreDiceSigninFlow"/>
+ <int value="6" label="UserMenu:RemoveAccount"/>
+ <int value="7" label="UserMenu::SignOutAllAccounts"/>
+ <int value="8" label="Settings::Signout"/>
+ <int value="9" label="Settings::PauseSync"/>
+ <int value="10" label="AccountReconcilor::GaiaCookiesDeletedByUser"/>
+ <int value="11" label="AccountReconcilor::GaiaCookiesUpdated"/>
+ <int value="12" label="AccountReconcilor::Reconcile"/>
+ <int value="13" label="DiceResponseHandler::Signin"/>
+ <int value="14" label="DiceResponseHandler::Signout"/>
+ <int value="15" label="DiceTurnOnSyncHelper::Abort"/>
+</enum>
+
<enum name="SpareProcessMaybeTakeAction">
<int value="0" label="NoSparePresent"/>
<int value="1" label="MismatchedBrowserContext"/>
@@ -47520,6 +48712,32 @@ Called by update_net_trust_anchors.py.-->
<int value="2" label="MemoryCached StyleSheetContents was reused"/>
</enum>
+<enum name="SubframeDownloadSandboxOriginAdGesture">
+ <summary>
+ For a download that occurs in subframe, record whether the frame is
+ sandboxed, whether the origin is same to the top frame, whether it's an ad
+ subframe, and whether the download involves a transient user gesture. It is
+ only recorded for downloads originated from navigations or from HTML anchor
+ download attributes.
+ </summary>
+ <int value="0" label="NotSandboxed_SameOrigin_NonAd_NoGesture"/>
+ <int value="1" label="NotSandboxed_SameOrigin_NonAd_Gesture"/>
+ <int value="2" label="NotSandboxed_SameOrigin_Ad_NoGesture"/>
+ <int value="3" label="NotSandboxed_SameOrigin_Ad_Gesture"/>
+ <int value="4" label="NotSandboxed_CrossOrigin_NonAd_NoGesture"/>
+ <int value="5" label="NotSandboxed_CrossOrigin_NonAd_Gesture"/>
+ <int value="6" label="NotSandboxed_CrossOrigin_Ad_NoGesture"/>
+ <int value="7" label="NotSandboxed_CrossOrigin_Ad_Gesture"/>
+ <int value="8" label="Sandboxed_SameOrigin_NonAd_NoGesture"/>
+ <int value="9" label="Sandboxed_SameOrigin_NonAd_Gesture"/>
+ <int value="10" label="Sandboxed_SameOrigin_Ad_NoGesture"/>
+ <int value="11" label="Sandboxed_SameOrigin_Ad_Gesture"/>
+ <int value="12" label="Sandboxed_CrossOrigin_NonAd_NoGesture"/>
+ <int value="13" label="Sandboxed_CrossOrigin_NonAd_Gesture"/>
+ <int value="14" label="Sandboxed_CrossOrigin_Ad_NoGesture"/>
+ <int value="15" label="Sandboxed_CrossOrigin_Ad_Gesture"/>
+</enum>
+
<enum name="SubmissionIndicatorEvent">
<int value="0" label="No submission"/>
<int value="1" label="HTML form submission"/>
@@ -48069,6 +49287,18 @@ would be helpful to identify which type is being sent.
<int value="3" label="Did not expect restored types but found some"/>
</enum>
+<enum name="SyncBookmarkModelMetadataCorruptionReason">
+ <int value="0" label="No corruption"/>
+ <int value="1" label="Entity missing server id"/>
+ <int value="2" label="Tombstone has a bookmark id"/>
+ <int value="3" label="Non-tombstone is missing a bookmark id"/>
+ <int value="4"
+ label="Number of bookmarks doesn't match number of metadata entities"/>
+ <int value="5"
+ label="Ids in the bookmarks model don't match the ids in the metadata
+ entities"/>
+</enum>
+
<enum name="SyncBookmarkModelSyncState">
<summary>
The state of the local bookmark model version compared to Sync. Corresponds
@@ -48080,6 +49310,17 @@ would be helpful to identify which type is being sent.
<int value="3" label="Local version is ahead"/>
</enum>
+<enum name="SyncClientToServerMessageContents">
+ <summary>
+ Type of a network message sent from the client to the sync server.
+ </summary>
+ <int value="1" label="COMMIT"/>
+ <int value="2" label="GET_UPDATES"/>
+ <int value="3" label="AUTHENTICATE"/>
+ <int value="4" label="DEPRECATED_4"/>
+ <int value="5" label="CLEAR_SERVER_DATA"/>
+</enum>
+
<enum name="SyncConfigureResult">
<summary>
Sync data type configure results. The codes are listed in
@@ -48162,8 +49403,9 @@ would be helpful to identify which type is being sent.
<int value="0" label="Local deletion (commited upstream)"/>
<int value="1" label="Local creation (commited upstream)"/>
<int value="2" label="Local update (commited upstream)"/>
- <int value="3" label="Remote deletion (updated downstream)"/>
- <int value="4" label="Remote update (updated downstream)"/>
+ <int value="3" label="Remote incremental deletion (updated downstream)"/>
+ <int value="4" label="Remote incremental update (updated downstream)"/>
+ <int value="5" label="Remote initial update (updated downstream)"/>
</enum>
<enum name="SyncErrorInfobarTypes">
@@ -48277,6 +49519,7 @@ would be helpful to identify which type is being sent.
<int value="39" label="User Events"/>
<int value="40" label="Mountain Shares"/>
<int value="41" label="User Consents"/>
+ <int value="42" label="Send Tab"/>
</enum>
<enum name="SyncModelTypeStoreInitResult">
@@ -48452,6 +49695,7 @@ would be helpful to identify which type is being sent.
<int value="25" label="VPN"/>
<int value="26" label="Night light"/>
<int value="27" label="Do not disturb"/>
+ <int value="28" label="Language"/>
</enum>
<enum name="SystemNotificationType">
@@ -48468,6 +49712,7 @@ would be helpful to identify which type is being sent.
<int value="10" label="Browser Actions"/>
<int value="11" label="Webapp Actions"/>
<int value="12" label="Offline Content Suggestion"/>
+ <int value="13" label="Sites shown in Trusted Web Activities"/>
</enum>
<enum name="TabBackgroundLoadStatus">
@@ -48660,9 +49905,9 @@ would be helpful to identify which type is being sent.
<enum name="TemporaryReferenceRemovedReason">
<int value="0" label="Embedded"/>
- <int value="1" label="Dropped"/>
+ <int value="1" label="Dropped (Obsolete)"/>
<int value="2" label="Skipped"/>
- <int value="3" label="Invalidated"/>
+ <int value="3" label="Invalidated (Obsolete)"/>
<int value="4" label="Expired"/>
</enum>
@@ -48763,6 +50008,28 @@ would be helpful to identify which type is being sent.
<int value="1835109015" label="patts: Chrome OS Indian English"/>
</enum>
+<enum name="ThirdPartyStatus">
+ <int value="0" label="Success"/>
+ <int value="1" label="FilePathNotFoundInRegistry"/>
+ <int value="2" label="FileNotFound"/>
+ <int value="3" label="FileEmpty"/>
+ <int value="4" label="FileArraySizeZero"/>
+ <int value="5" label="FileAccessDenied"/>
+ <int value="6" label="FileUnexpectedFailure"/>
+ <int value="7" label="FileMetadataReadFailure"/>
+ <int value="8" label="FileInvalidFormatVersion"/>
+ <int value="9" label="FileArrayTooBig"/>
+ <int value="10" label="FileArrayReadFailure"/>
+ <int value="11" label="FileArrayNotSorted"/>
+ <int value="12" label="LogsCreateMutexFailure"/>
+ <int value="13" label="HookInitImportsFailure"/>
+ <int value="14" label="HookUnsupportedOs"/>
+ <int value="15" label="HookVirtualProtectFailure"/>
+ <int value="16" label="HookApplyFailure"/>
+ <int value="17" label="HookCreateMutexFailure"/>
+ <int value="18" label="StatusCodeResetFailure"/>
+</enum>
+
<enum name="ThreadType">
<int value="0" label="UI"/>
<int value="1" label="Blocking"/>
@@ -48827,6 +50094,13 @@ would be helpful to identify which type is being sent.
<int value="3" label="Request is cancelled."/>
</enum>
+<enum name="TLS13DowngradeType">
+ <int value="0" label="Known root with RSA key exchange"/>
+ <int value="1" label="Known root with ECDHE key exchange"/>
+ <int value="2" label="Unknown root with RSA key exchange"/>
+ <int value="3" label="Unknown root with ECDHE key exchange"/>
+</enum>
+
<enum name="TLSRenegotiationPatched">
<int value="0" label="Not renegotiation patched"/>
<int value="1" label="Renegotiation patched"/>
@@ -49666,6 +50940,13 @@ Full version information for the fingerprint enum values:
<int value="80" label="TRIM_MEMORY_COMPLETE"/>
</enum>
+<enum name="TrustedWebActivityDelegatedNotificationSmallIconFallback">
+ <int value="0" label="No fallback"/>
+ <int value="1" label="Fallback icon mot provided"/>
+ <int value="2" label="Fallback for Status Bar"/>
+ <int value="3" label="Fallback for Status Bar and content"/>
+</enum>
+
<enum name="UIEventType">
<int value="0" label="Unknown"/>
<int value="1" label="Touch released"/>
@@ -49719,6 +51000,11 @@ Full version information for the fingerprint enum values:
<int value="9" label="Empty URL"/>
</enum>
+<enum name="UkmResetReason">
+ <int value="0" label="OnSyncPrefsChanged"/>
+ <int value="1" label="UpdatePermissions"/>
+</enum>
+
<enum name="UkmSyncDisableInfo">
<int value="0" label="Enabled"/>
<int value="1" label="Disabled by history"/>
@@ -49816,11 +51102,12 @@ Full version information for the fingerprint enum values:
<enum name="UnifiedConsentSyncAndGoogleServicesSettings">
<int value="0" label="None of the services are enabled"/>
- <int value="1" label="'Sync and all Google services' is enabled"/>
+ <int value="1" label="(Obsolete)'Sync and all Google services' is enabled"/>
<int value="2" label="'Activity and interactions' is enabled"/>
<int value="3" label="'Make searches and browsing better' is enabled"/>
<int value="4" label="'Safe browsing extended reporting' is enabled"/>
<int value="5" label="'Enhanced spell check' is enabled"/>
+ <int value="6" label="All services were enabled during opt-in"/>
</enum>
<enum name="UniformityTrialGroupNotActive">
@@ -49930,6 +51217,7 @@ Full version information for the fingerprint enum values:
<int value="5" label="Cellular"/>
<int value="6" label="Tethered (Ethernet)"/>
<int value="7" label="Tethered (Wifi)"/>
+ <int value="8" label="Disconnected"/>
</enum>
<enum name="UpdateEngineDownloadErrorCode">
@@ -51109,6 +52397,9 @@ Full version information for the fingerprint enum values:
</enum>
<enum name="VideoFrameColorSpace">
+ <obsolete>
+ Deprecated as of 10/2018.
+ </obsolete>
<int value="0" label="Unspecified, usually Rec 601"/>
<int value="1" label="Jpeg"/>
<int value="2" label="HD Rec 709"/>
@@ -51484,6 +52775,12 @@ Full version information for the fingerprint enum values:
<int value="1" label="Chrome Tab"/>
</enum>
+<enum name="VizHitTestResultsMatchEnums">
+ <int value="0" label="Results do not match"/>
+ <int value="1" label="Results match"/>
+ <int value="2" label="Results changed"/>
+</enum>
+
<enum name="VoiceInteractionEventSource">
<int value="0" label="Omnibox"/>
<int value="1" label="NTP"/>
@@ -51945,6 +53242,16 @@ Full version information for the fingerprint enum values:
<int value="4" label="Fullscreen"/>
</enum>
+<enum name="WebAppInstallResultCode">
+ <int value="0" label="Success"/>
+ <int value="1" label="AlreadyInstalled"/>
+ <int value="2" label="FailedUnknownReason"/>
+ <int value="3" label="GetWebApplicationInfoFailed"/>
+ <int value="4" label="PreviouslyUninstalled"/>
+ <int value="5" label="WebContentsDestroyed"/>
+ <int value="6" label="WriteDataFailed"/>
+</enum>
+
<enum name="WebAppInstallSource">
<obsolete>
Removed from code Jan 2018.
@@ -52193,6 +53500,17 @@ Full version information for the fingerprint enum values:
<int value="5" label="Unknown"/>
</enum>
+<enum name="WebRequestEventListenerFlag">
+ <int value="0" label="Total"/>
+ <int value="1" label="None"/>
+ <int value="2" label="requestHeaders"/>
+ <int value="3" label="responseHeaders"/>
+ <int value="4" label="blocking"/>
+ <int value="5" label="asyncBlocking"/>
+ <int value="6" label="requestBody"/>
+ <int value="7" label="extraHeaders"/>
+</enum>
+
<enum name="WebRequestEventResponse">
<int value="0" label="Ignored"/>
<int value="1" label="Observed"/>
@@ -52281,6 +53599,63 @@ Full version information for the fingerprint enum values:
<int value="1" label="Error"/>
</enum>
+<enum name="WebRtcLoggingUploadFailureReason">
+ <summary>
+ Failure reason can be either a response code (except 200 OK) for the upload
+ HTTP request, or another reason prior to uploading (values less than 100).
+ HTTP response codes copied from enum &quot;HttpResponseCode&quot;.
+ </summary>
+ <int value="0" label="Invalid state"/>
+ <int value="1" label="Stored log not found"/>
+ <int value="100" label="100: Continue"/>
+ <int value="101" label="101: Switching Protocols"/>
+ <int value="102" label="102: Processing"/>
+ <int value="103" label="103: Early Hints"/>
+ <int value="201" label="201: Created"/>
+ <int value="202" label="202: Accepted"/>
+ <int value="203" label="203: Non-Authoritative Information"/>
+ <int value="204" label="204: No Content"/>
+ <int value="205" label="205: Reset Content"/>
+ <int value="206" label="206: Partial Content"/>
+ <int value="300" label="300: Multiple Choices"/>
+ <int value="301" label="301: Moved Permanently"/>
+ <int value="302" label="302: Found"/>
+ <int value="303" label="303: See Other"/>
+ <int value="304" label="304: Not Modified"/>
+ <int value="305" label="305: Use Proxy"/>
+ <int value="306" label="306: (Unused)"/>
+ <int value="307" label="307: Temporary Redirect"/>
+ <int value="400" label="400: Bad Request"/>
+ <int value="401" label="401: Unauthorized"/>
+ <int value="402" label="402: Payment Required"/>
+ <int value="403" label="403: Forbidden"/>
+ <int value="404" label="404: Not Found"/>
+ <int value="405" label="405: Method Not Allowed"/>
+ <int value="406" label="406: Not Acceptable"/>
+ <int value="407" label="407: Proxy Authentication Required"/>
+ <int value="408" label="408: Request Timeout"/>
+ <int value="409" label="409: Conflict"/>
+ <int value="410" label="410: Gone"/>
+ <int value="411" label="411: Length Required"/>
+ <int value="412" label="412: Precondition Failed"/>
+ <int value="413" label="413: Request Entity Too Large"/>
+ <int value="414" label="414: Request-URI Too Long"/>
+ <int value="415" label="415: Unsupported Media Type"/>
+ <int value="416" label="416: Requested Range Not Satisfiable"/>
+ <int value="417" label="417: Expectation Failed"/>
+ <int value="500" label="500: Internal Server Error"/>
+ <int value="501" label="501: Not Implemented"/>
+ <int value="502" label="502: Bad Gateway"/>
+ <int value="503" label="503: Service Unavailable"/>
+ <int value="504" label="504: Gateway Timeout"/>
+ <int value="505" label="505: HTTP Version Not Supported"/>
+</enum>
+
+<enum name="WebRtcLoggingWebAppIdHash">
+ <int value="-100222544" label="Hangouts"/>
+ <int value="0" label="Undefined"/>
+</enum>
+
<enum name="WebRtcNativeRate">
<int value="0" label="8kHz"/>
<int value="1" label="16kHz"/>
@@ -52710,6 +54085,28 @@ Full version information for the fingerprint enum values:
<int value="1" label="Revoked ephemeral permission"/>
</enum>
+<enum name="WebViewClientTypeEnum">
+ <int value="0" label="Regular WebViewClient"/>
+ <int value="1" label="WebViewClientCompat (via AndroidX)"/>
+</enum>
+
+<enum name="WebViewUrlScheme">
+ <int value="0" label="Empty URL"/>
+ <int value="1" label="Unknown scheme"/>
+ <int value="2" label="HTTP"/>
+ <int value="3" label="HTTPS"/>
+ <int value="4" label="File"/>
+ <int value="5" label="Ftp"/>
+ <int value="6" label="Data"/>
+ <int value="7" label="Javascript"/>
+ <int value="8" label="About"/>
+ <int value="9" label="Chrome"/>
+ <int value="10" label="Blob"/>
+ <int value="11" label="Content"/>
+ <int value="12" label="Intent"/>
+ <int value="13" label="android_asset or android_res"/>
+</enum>
+
<enum name="WelcomeSignInPromptOutcome">
<int value="0" label="User navigated away from page"/>
<int value="1" label="User clicked the No Thanks button"/>
@@ -52960,6 +54357,13 @@ Full version information for the fingerprint enum values:
<int value="3" label="Desktop Aura"/>
</enum>
+<enum name="WindowOcclusionState">
+ <int value="0" label="Unknown"/>
+ <int value="1" label="Visible"/>
+ <int value="2" label="Occluded"/>
+ <int value="3" label="Hidden"/>
+</enum>
+
<enum name="WindowOpenDisposition">
<int value="0" label="Unknown"/>
<int value="1" label="Current Tab"/>
diff --git a/chromium/tools/metrics/histograms/histograms.xml b/chromium/tools/metrics/histograms/histograms.xml
index 7b46b76ced3..25a076c9325 100644
--- a/chromium/tools/metrics/histograms/histograms.xml
+++ b/chromium/tools/metrics/histograms/histograms.xml
@@ -25,6 +25,37 @@ uploading your change for review.
<histograms>
+<histogram name="Accessibility.Android.AnimationsEnabled" enum="BooleanEnabled"
+ expires_after="2019-11-02">
+ <obsolete>
+ Deprecated 11/2018 because a need was discovered for a non-boolean value.
+ Superseded by Accessibility.Android.AnimationsEnabled2.
+ </obsolete>
+ <owner>dmazzoni@chromium.org</owner>
+ <owner>smcgruer@chromium.org</owner>
+ <summary>
+ Tracks whether animations are enabled on Android (e.g. if the animator
+ duration scale is non-zero.) The purpose is to inform the design of the
+ prefers-reduced-motion media feature; see http://crbug.com/722548. This is
+ checked once, 45 seconds after startup.
+ </summary>
+</histogram>
+
+<histogram name="Accessibility.Android.AnimationsEnabled2"
+ enum="AccessibilityAndroidAnimationsEnabled" expires_after="2019-11-02">
+ <owner>dmazzoni@chromium.org</owner>
+ <owner>smcgruer@chromium.org</owner>
+ <summary>
+ Tracks whether animations are enabled on Android (e.g. if the animator
+ duration scale is non-zero.) The purpose is to inform the design of the
+ prefers-reduced-motion media feature; see http://crbug.com/722548. This is
+ checked once, 45 seconds after startup.
+
+ This replaced Accessibility.Android.AnimationsEnabled because the older
+ histogram did not capture the default (e.g. no flag) case.
+ </summary>
+</histogram>
+
<histogram name="Accessibility.Android.TabSwitcherPreferenceEnabled"
enum="BooleanEnabled">
<owner>twellington@chromium.org</owner>
@@ -75,9 +106,10 @@ uploading your change for review.
<owner>dmazzoni@chromium.org</owner>
<owner>kenjibaheux@google.com</owner>
<owner>tengs@chromium.org</owner>
+ <owner>katie@chromium.org</owner>
<summary>
If the user has enabled Autoclick, this is the delay set by the user for
- autoclicks to occur, in milliseconds.
+ autoclicks to occur, in milliseconds, at startup and when changed.
</summary>
</histogram>
@@ -91,7 +123,7 @@ uploading your change for review.
<histogram name="Accessibility.CrosChromeVoxAfterSwitchAccess"
enum="BooleanEnabled">
- <owner>zhelfins@chromium.org</owner>
+ <owner>anastasi@google.com</owner>
<owner>dtseng@chromium.org</owner>
<summary>
When ChromeVox is enabled, true if Switch Access was previously enabled.
@@ -117,7 +149,7 @@ uploading your change for review.
</histogram>
<histogram name="Accessibility.CrosDictation" enum="BooleanEnabled">
- <owner>zhelfins@chromium.org</owner>
+ <owner>anastasi@google.com</owner>
<owner>dtseng@chromium.org</owner>
<summary>
Whether the ChromeOS dictation feature is enabled (checked once 45 secs
@@ -127,7 +159,7 @@ uploading your change for review.
<histogram name="Accessibility.CrosDictation.ToggleDictationMethod"
enum="CrosDictationToggleDictationMethod">
- <owner>zhelfins@chromium.org</owner>
+ <owner>anastasi@google.com</owner>
<owner>dtseng@chromium.org</owner>
<summary>Records how users invoke Dictation.</summary>
</histogram>
@@ -271,7 +303,7 @@ uploading your change for review.
<histogram name="Accessibility.CrosSwitchAccessAfterChromeVox"
enum="BooleanEnabled">
- <owner>zhelfins@chromium.org</owner>
+ <owner>anastasi@google.com</owner>
<owner>dtseng@chromium.org</owner>
<summary>
When Switch Access is enabled, true if ChromeVox was previously enabled.
@@ -312,7 +344,7 @@ uploading your change for review.
</histogram>
<histogram name="Accessibility.Mac.DifferentiateWithoutColor"
- enum="BooleanEnabled">
+ enum="BooleanEnabled" expires_after="2019-11-02">
<owner>ellyjones@chromium.org</owner>
<summary>
Whether the &quot;differentiate without color&quot; Mac system setting is
@@ -321,7 +353,7 @@ uploading your change for review.
</histogram>
<histogram name="Accessibility.Mac.FullKeyboardAccessEnabled"
- enum="BooleanEnabled">
+ enum="BooleanEnabled" expires_after="2019-11-02">
<owner>ellyjones@chromium.org</owner>
<summary>
Whether the &quot;full keyboard access&quot; Mac system setting is enabled.
@@ -329,7 +361,8 @@ uploading your change for review.
</summary>
</histogram>
-<histogram name="Accessibility.Mac.IncreaseContrast" enum="BooleanEnabled">
+<histogram name="Accessibility.Mac.IncreaseContrast" enum="BooleanEnabled"
+ expires_after="2019-11-02">
<owner>ellyjones@chromium.org</owner>
<summary>
Whether the &quot;increase contrast&quot; Mac system setting is enabled.
@@ -337,7 +370,20 @@ uploading your change for review.
</summary>
</histogram>
-<histogram name="Accessibility.Mac.ReduceTransparency" enum="BooleanEnabled">
+<histogram name="Accessibility.Mac.ReduceMotion" enum="BooleanEnabled"
+ expires_after="2019-11-02">
+ <owner>dmazzoni@chromium.org</owner>
+ <owner>smcgruer@chromium.org</owner>
+ <summary>
+ Tracks whether the accessibilityDisplayShouldReduceMotion system property is
+ enabled. The purpose is to inform the design of the prefers-reduced-motion
+ media feature; see http://crbug.com/722548. This is checked once, 45 seconds
+ after startup.
+ </summary>
+</histogram>
+
+<histogram name="Accessibility.Mac.ReduceTransparency" enum="BooleanEnabled"
+ expires_after="2019-11-02">
<owner>ellyjones@chromium.org</owner>
<summary>
Whether the &quot;reduce transparency&quot; Mac system setting is enabled.
@@ -376,6 +422,34 @@ uploading your change for review.
</summary>
</histogram>
+<histogram base="true" name="Accessibility.ScreenReader.Image.MinSize"
+ units="px" expires_after="2019-04-01">
+<!-- Name completed by histogram_suffixes
+ name="AccessibilityScreenReaderImage" -->
+
+ <owner>katie@chromium.org</owner>
+ <owner>dmazzoni@chromium.org</owner>
+ <summary>
+ For every image on a page with screen reader accessibility mode enabled,
+ this histogram will be used to understand minimum dimension of the image,
+ i.e. either the width or height in px.
+ </summary>
+</histogram>
+
+<histogram base="true" name="Accessibility.ScreenReader.Image.SizeRatio"
+ units="%" expires_after="2019-04-01">
+<!-- Name completed by histogram_suffixes
+ name="AccessibilityScreenReaderImage" -->
+
+ <owner>katie@chromium.org</owner>
+ <owner>dmazzoni@chromium.org</owner>
+ <summary>
+ For every image on a page with screen reader accessibility mode enabled,
+ this histogram will be used to understand the size ratio of the image. This
+ is the smaller dimension divided by the larger dimension.
+ </summary>
+</histogram>
+
<histogram name="Accessibility.State" enum="BooleanEnabled">
<obsolete>
Deprecated 12/2016 in Issue 672205 with the addition of
@@ -390,13 +464,26 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Accessibility.Win.AnimationsEnabled" enum="BooleanEnabled"
+ expires_after="2019-11-02">
+ <owner>dmazzoni@chromium.org</owner>
+ <owner>smcgruer@chromium.org</owner>
+ <summary>
+ Tracks whether the SPI_GETCLIENTAREAANIMATION system property is enabled.
+ The purpose is to inform the design of the prefers-reduced-motion media
+ feature; see http://crbug.com/722548. This is checked once, 45 seconds after
+ startup.
+ </summary>
+</histogram>
+
<histogram name="Accessibility.WinAPIs" enum="AccessibilityWinAPIEnum">
<owner>dmazzoni@chromium.org</owner>
<owner>nektar@chromium.org</owner>
<summary>Tracks usage of all public Windows accessibility APIs.</summary>
</histogram>
-<histogram name="Accessibility.WinAudioDescription" enum="BooleanEnabled">
+<histogram name="Accessibility.WinAudioDescription" enum="BooleanEnabled"
+ expires_after="2019-11-02">
<owner>dmazzoni@chromium.org</owner>
<owner>kenjibaheux@google.com</owner>
<summary>
@@ -405,7 +492,8 @@ uploading your change for review.
</summary>
</histogram>
-<histogram name="Accessibility.WinJAWS" enum="BooleanEnabled">
+<histogram name="Accessibility.WinJAWS" enum="BooleanEnabled"
+ expires_after="2019-11-02">
<owner>dmazzoni@chromium.org</owner>
<owner>kenjibaheux@google.com</owner>
<summary>
@@ -414,7 +502,8 @@ uploading your change for review.
</summary>
</histogram>
-<histogram name="Accessibility.WinNVDA" enum="BooleanEnabled">
+<histogram name="Accessibility.WinNVDA" enum="BooleanEnabled"
+ expires_after="2019-11-02">
<owner>dmazzoni@chromium.org</owner>
<owner>kenjibaheux@google.com</owner>
<summary>
@@ -423,7 +512,8 @@ uploading your change for review.
</summary>
</histogram>
-<histogram name="Accessibility.WinSAToGo" enum="BooleanEnabled">
+<histogram name="Accessibility.WinSAToGo" enum="BooleanEnabled"
+ expires_after="2019-11-02">
<owner>dmazzoni@chromium.org</owner>
<owner>kenjibaheux@google.com</owner>
<summary>
@@ -432,7 +522,8 @@ uploading your change for review.
</summary>
</histogram>
-<histogram name="Accessibility.WinScreenReader" enum="BooleanEnabled">
+<histogram name="Accessibility.WinScreenReader" enum="BooleanEnabled"
+ expires_after="2019-11-02">
<owner>dmazzoni@chromium.org</owner>
<owner>kenjibaheux@google.com</owner>
<summary>
@@ -443,7 +534,8 @@ uploading your change for review.
</summary>
</histogram>
-<histogram name="Accessibility.WinStickyKeys" enum="BooleanEnabled">
+<histogram name="Accessibility.WinStickyKeys" enum="BooleanEnabled"
+ expires_after="2019-11-02">
<owner>dmazzoni@chromium.org</owner>
<owner>kenjibaheux@google.com</owner>
<summary>
@@ -451,7 +543,8 @@ uploading your change for review.
</summary>
</histogram>
-<histogram name="Accessibility.WinZoomText" enum="BooleanEnabled">
+<histogram name="Accessibility.WinZoomText" enum="BooleanEnabled"
+ expires_after="2019-11-02">
<owner>dmazzoni@chromium.org</owner>
<owner>kenjibaheux@google.com</owner>
<summary>
@@ -644,6 +737,14 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Ads.Media.BytesReceived" units="KB" expires_after="2019-10-20">
+ <owner>johnidel@chromium.org</owner>
+ <summary>
+ Total number of bytes buffered over the lifetime of a WebMediaPlayer inside
+ of an adframe. Suffixed by type of playback.
+ </summary>
+</histogram>
+
<histogram name="Ads.Media.LoadType" enum="MediaLoadType"
expires_after="2019-09-18">
<owner>johnidel@chromium.org</owner>
@@ -834,6 +935,25 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="AnchorElementMetrics.Clicked.OnDSE.SameHost"
+ enum="BooleanAnchorElementSameHost">
+ <owner>tbansal@chromium.org</owner>
+ <summary>
+ True if the target link of the anchor element has the same host as the root
+ document. Recorded only on default search engine pages.
+ </summary>
+</histogram>
+
+<histogram name="AnchorElementMetrics.Clicked.OnNonDSE.SameHost"
+ enum="BooleanAnchorElementSameHost">
+ <owner>tbansal@chromium.org</owner>
+ <summary>
+ True if the target link of the anchor element has the same host as the root
+ document. Recorded only on pages whose URL do not match the default search
+ engine.
+ </summary>
+</histogram>
+
<histogram name="AnchorElementMetrics.Clicked.RatioContainsImage_ContainsImage"
units="%">
<owner>chelu@chromium.org</owner>
@@ -974,6 +1094,13 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="AnchorElementMetrics.IsAdFrameElement" units="Boolean">
+ <owner>tbansal@chromium.org</owner>
+ <summary>
+ True if the anchor element was inside an iframe tagged as an ad iframe.
+ </summary>
+</histogram>
+
<histogram base="true" name="AnchorElementMetrics.IsInIFrame" enum="Boolean">
<owner>chelu@chromium.org</owner>
<owner>tbansal@chromium.org</owner>
@@ -1888,6 +2015,15 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Android.IntentHeaders" enum="IntentHeadersResult">
+ <owner>peconn@chromium.org</owner>
+ <summary>
+ Records the usage of the Browser.EXTRA_HEADERS field for Intents that Chrome
+ receives, breaking down by type of header and by whether the launching app
+ was first or third party.
+ </summary>
+</histogram>
+
<histogram name="Android.IsLastSharedAppInfoRetrieved"
enum="BooleanIsLastSharedAppInfoRetrieved">
<owner>jaekyun@chromium.org</owner>
@@ -1946,6 +2082,24 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Android.ManageSpace.TotalDiskUsageMB" units="MB">
+ <owner>dmurph@chromium.org</owner>
+ <summary>
+ Recorded when the user opens the 'Manage Space' screen for Chrome, after the
+ disk usage is calculated. The disk usage value represents the accumulated
+ disk usage by websites.
+ </summary>
+</histogram>
+
+<histogram name="Android.ManageSpace.UnimportantDiskUsageMB" units="MB">
+ <owner>dmurph@chromium.org</owner>
+ <summary>
+ Recorded when the user opens the 'Manage Space' screen for Chrome, after the
+ disk usage is calculated. The disk usage value represents the accumulated
+ disk usage by websites that are not considered 'important'.
+ </summary>
+</histogram>
+
<histogram name="Android.MemoryPressureMonitor.GetMyMemoryState.Failed.Time"
units="microseconds">
<owner>dskiba@chromium.org</owner>
@@ -2603,6 +2757,17 @@ uploading your change for review.
<summary>The number of bytes written for the tab metadata file.</summary>
</histogram>
+<histogram name="Android.WebView.LoadDataWithBaseUrl.BaseUrl"
+ enum="WebViewUrlScheme" expires_after="2019-05-05">
+ <owner>ntfschr@chromium.org</owner>
+ <owner>torne@chromium.org</owner>
+ <summary>
+ Records the scheme for the baseUrl parameter to loadDataWithBaseURL. This
+ also records if this value is &quot;empty&quot;, as determined by
+ TextUtils.isEmpty().
+ </summary>
+</histogram>
+
<histogram name="Android.WebView.LoadDataWithBaseUrl.HistoryUrl"
enum="HistoryUrlType">
<owner>jamwalla@chromium.org</owner>
@@ -2621,6 +2786,19 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Android.WebView.LoadUrl.UrlScheme" enum="WebViewUrlScheme"
+ expires_after="2019-05-05">
+ <owner>ntfschr@chromium.org</owner>
+ <owner>torne@chromium.org</owner>
+ <summary>
+ Records the scheme for the URL loaded by a browser-initiated navigation.
+ Specifically, this is the scheme of the URL passed to loadUrl() (and its
+ overloads), postUrl(), and loadData (this is implicitly &quot;data:&quot;).
+ also records if this value is &quot;empty&quot;, which means either null or
+ &quot;about:blank&quot;. This intentionally excludes loadDataWithBaseURL().
+ </summary>
+</histogram>
+
<histogram name="Android.WebView.SplitApkWorkaroundResult"
enum="SplitApkWorkaroundResult" expires_after="M72">
<owner>tiborg@chromium.org</owner>
@@ -2662,6 +2840,18 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Android.WebView.SupportLibrary.ClientIsCompat"
+ enum="WebViewClientTypeEnum" expires_after="2019-05-05">
+ <owner>ntfschr@chromium.org</owner>
+ <owner>changwan@chromium.org</owner>
+ <summary>
+ Records whether the WebViewClient provided by the app is an instance of
+ WebViewClientCompat (and therefore exposes AndroidX callbacks). This is
+ recorded each time the app sets a new WebViewClient via
+ WebView#setWebViewClient().
+ </summary>
+</histogram>
+
<histogram name="Android.WebView.TargetSdkVersion" enum="AndroidApiLevel">
<owner>changwan@chromium.org</owner>
<summary>
@@ -2683,6 +2873,42 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="AndroidSms.MultiDeviceFeatureState"
+ enum="MultiDevice_FeatureState">
+ <owner>jlklein@chromium.org</owner>
+ <summary>
+ Indicates the feature state of the Messages feature. This metric is emitted
+ to at the creation of the user session (when the user logs in), and when
+ feature state updates occur.
+ </summary>
+</histogram>
+
+<histogram name="AndroidSms.PWAInstallationResult"
+ enum="WebAppInstallResultCode">
+ <owner>azeemarshad@chromium.org</owner>
+ <summary>
+ Records installation result code when Android Messages for Web PWA is
+ installed through Multidevice setup or settings.
+ </summary>
+</histogram>
+
+<histogram name="AndroidSms.ServiceWorkerLifetime" units="ms">
+ <owner>azeemarshad@chromium.org</owner>
+ <summary>
+ Tracks the duration of time for which the Android Messages for Web Service-
+ Worker is handling background connection.
+ </summary>
+</histogram>
+
+<histogram name="AndroidSms.ServiceWorkerMessageDispatchStatus"
+ enum="BooleanSuccess">
+ <owner>azeemarshad@chromium.org</owner>
+ <summary>
+ Tracks dispatch success/failure status of the start streaming message sent
+ to the Android Messages for Web Service-Worker.
+ </summary>
+</histogram>
+
<histogram name="AndroidTabCloseUndo.Toast"
enum="AndroidTabCloseUndoToastEvent">
<owner>dtrainor@chromium.org</owner>
@@ -2713,6 +2939,30 @@ uploading your change for review.
</summary>
</histogram>
+<histogram
+ name="Animation.AnimationWorklet.Dispatcher.SynchronousMutateDuration"
+ units="microseconds" expires_after="M77">
+ <owner>majidvp@chromium.org</owner>
+ <owner>animations-dev@chromium.org</owner>
+ <summary>
+ The time it takes the WorkletMutatorDispatcher to dispatch to and mutate all
+ animation worklet mutators synchronously. This includes the time that it
+ takes each AnimationWorkletGlobalScope to produce its output (which includes
+ V8 script execution) and also any queuing cost associated with posting
+ mutation tasks and recieving responses.
+ </summary>
+</histogram>
+
+<histogram name="Animation.AnimationWorklet.GlobalScope.MutateDuration"
+ units="microseconds" expires_after="M77">
+ <owner>majidvp@chromium.org</owner>
+ <owner>animations-dev@chromium.org</owner>
+ <summary>
+ The time it takes for AnimationWorkletGlobalScope to produce a mutation
+ update. This includes all V8 script execution cost.
+ </summary>
+</histogram>
+
<histogram name="AppBanners.BeforeInstallEvent"
enum="AppBannersBeforeInstallEvent">
<owner>dominickn@chromium.org</owner>
@@ -3751,6 +4001,40 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Arc.EngagementTime.Background" units="seconds">
+ <owner>maajid@google.com</owner>
+ <owner>shaochuan@google.com</owner>
+ <owner>shihuis@google.com</owner>
+ <summary>
+ Times when user is engaged and ARC++ apps are running in the background, but
+ the user isn't focusing on an ARC++ app window. See Arc.EngagementTime.Total
+ for definition of engagement and details.
+ </summary>
+</histogram>
+
+<histogram name="Arc.EngagementTime.Foreground" units="seconds">
+ <owner>maajid@google.com</owner>
+ <owner>shaochuan@google.com</owner>
+ <owner>shihuis@google.com</owner>
+ <summary>
+ Times when user is engaged and focuses on an ARC++ app window. See
+ Arc.EngagementTime.Total for definition of engagement and details.
+ </summary>
+</histogram>
+
+<histogram name="Arc.EngagementTime.Total" units="seconds">
+ <owner>maajid@google.com</owner>
+ <owner>shaochuan@google.com</owner>
+ <owner>shihuis@google.com</owner>
+ <summary>
+ Total user session time (from login to logout) excluding times when user
+ &quot;disengages&quot;: screen is locked or dims down due to user idle.
+ Engagement time metrics, along with foreground and background time, are only
+ collected on users with ARC++ enabled. All three metrics are accumulated and
+ recorded to UMA once a day.
+ </summary>
+</histogram>
+
<histogram name="Arc.FirstAppLaunchDelay.TimeDelta" units="ms">
<owner>yusukes@google.com</owner>
<owner>khmel@google.com</owner>
@@ -3903,7 +4187,17 @@ uploading your change for review.
<owner>khmel@google.com</owner>
<summary>
Arc Silent Auth Code status. This status is set during the ARC
- reauthorization flow.
+ Device/Primary Account reauthorization flow.
+ </summary>
+</histogram>
+
+<histogram name="Arc.OptInSilentAuthCode.SecondaryAccount"
+ enum="ArcOptInSilentAuthCode">
+ <owner>khmel@google.com</owner>
+ <summary>
+ Arc Silent Auth Code status. This status is set during the minting of an
+ auth code for a Secondary Account. It can be set for Secondary Account
+ signin or reauthorization.
</summary>
</histogram>
@@ -3998,6 +4292,23 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Arc.Secondary.Signin.Result" enum="ArcProvisioningResult">
+ <owner>khmel@google.com</owner>
+ <summary>
+ The result (success or the type of failure) of ARC Secondary Account signin/
+ reauthorization.
+ </summary>
+</histogram>
+
+<histogram name="Arc.ShareFilesOnExit" enum="ArcShareFilesOnExit">
+ <owner>weifangsun@google.com</owner>
+ <owner>djacobo@google.com</owner>
+ <summary>
+ Exit code coming from ARC's share files feature. Used to observe stability
+ for the feature.
+ </summary>
+</histogram>
+
<histogram name="Arc.ShutdownTime" units="ms">
<owner>elijahtaylor@google.com</owner>
<summary>
@@ -5282,6 +5593,24 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Assistant.EntryPoint" enum="AssistantEntryPoint"
+ expires_after="2019-11-01">
+ <owner>xiaohuic@chromium.org</owner>
+ <owner>meilinw@chromium.org</owner>
+ <summary>
+ Record the Assistant entry point where Assistant UI becomes visible.
+ </summary>
+</histogram>
+
+<histogram name="Assistant.ExitPoint" enum="AssistantExitPoint"
+ expires_after="2019-11-19">
+ <owner>xiaohuic@chromium.org</owner>
+ <owner>meilinw@chromium.org</owner>
+ <summary>
+ Record the Assistant exit point where Assistant UI becomes invisible.
+ </summary>
+</histogram>
+
<histogram name="Assistant.HotwordEnableNotification" enum="BooleanHit">
<owner>updowndota@chromium.org</owner>
<summary>
@@ -5313,34 +5642,49 @@ uploading your change for review.
<summary>Record the status of the Assistant opt-in flow.</summary>
</histogram>
-<histogram name="Assistant.QueryCountPerEntryPoint" enum="AssistantSource"
+<histogram name="Assistant.QueryCountPerEntryPoint" enum="AssistantEntryPoint"
expires_after="2019-10-15">
<owner>xiaohuic@chromium.org</owner>
<owner>meilinw@chromium.org</owner>
<summary>Number of queries fired for each entry point.</summary>
</histogram>
+<histogram name="Assistant.ServiceEnabledUserCount" enum="BooleanEnabled"
+ expires_after="2019-11-13">
+ <owner>xiaohuic@chromium.org</owner>
+ <owner>meilinw@chromium.org</owner>
+ <summary>
+ Among eligible users, whether the user has the Assistant service enabled.
+ Recorded once for every UMA upload. The set of eligible users includes all
+ users with profiles that can allow Assistant service to be enabled
+ (AssistantAllowedState is limited by locale, policy, etc).
+ </summary>
+</histogram>
+
<histogram name="Assistant.ServiceStartTime" units="ms">
<owner>updowndota@chromium.org</owner>
<summary>Amount of time spent in starting Assistant service.</summary>
</histogram>
<histogram name="AsyncDNS.AttemptCountFail">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
Count of DnsAttempts before DnsTransaction completes with failure.
</summary>
</histogram>
<histogram name="AsyncDNS.AttemptCountSuccess">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
Count of DnsAttempts before DnsTransaction completes successfully.
</summary>
</histogram>
<histogram name="AsyncDNS.ConfigChange" enum="BooleanSuccess">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
Whether DnsConfigService::OnConfigChange actually corresponded to a change
in DnsConfig.
@@ -5348,19 +5692,22 @@ uploading your change for review.
</histogram>
<histogram name="AsyncDNS.ConfigNotifyInterval" units="ms">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
Duration of time between calls to DnsConfigService::InvalidateConfig.
</summary>
</histogram>
<histogram name="AsyncDNS.ConfigParseDuration" units="ms">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>Duration of time spent parsing DnsConfig.</summary>
</histogram>
<histogram name="AsyncDNS.ConfigParsePosix" enum="AsyncDNSConfigParsePosix">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
Counts of results of parsing DnsConfig in DnsConfigServicePosix.
</summary>
@@ -5375,7 +5722,8 @@ uploading your change for review.
</histogram>
<histogram name="AsyncDNS.ConfigParseWin" enum="AsyncDNSConfigParseWin">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
Counts of results of parsing DnsConfig in DnsConfigServiceWin.
</summary>
@@ -5392,7 +5740,8 @@ uploading your change for review.
</histogram>
<histogram name="AsyncDNS.DnsClientDisabledReason" enum="NetErrorCodes">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
Counts of specific error codes returned by DnsTask if a subsequent ProcTask
succeeded, at the end of a streak of failures after which the DnsClient was
@@ -5401,7 +5750,8 @@ uploading your change for review.
</histogram>
<histogram name="AsyncDNS.DnsClientEnabled" enum="BooleanSuccess">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
TRUE counts the events when a valid DnsConfig is received and used to enable
DnsClient, while FALSE counts the events when DnsClient is disabled after a
@@ -5410,21 +5760,24 @@ uploading your change for review.
</histogram>
<histogram name="AsyncDNS.FallbackFail" units="ms">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
Duration of time spent by ProcTask in failing fallback resolutions.
</summary>
</histogram>
<histogram name="AsyncDNS.FallbackSuccess" units="ms">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
Duration of time spent by ProcTask in successful fallback resolutions.
</summary>
</histogram>
<histogram name="AsyncDNS.HaveDnsConfig" enum="BooleanSuccess">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
Whether there was a valid DNS configuration at the start of a job which
eventually completed successfully.
@@ -5432,12 +5785,14 @@ uploading your change for review.
</histogram>
<histogram name="AsyncDNS.HostParseResult" enum="BooleanSuccess">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>Whether DnsHosts were parsed successfully.</summary>
</histogram>
<histogram name="AsyncDNS.HostsChange" enum="BooleanSuccess">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
Whether DnsConfigService::OnHostsChange actually corresponded to a change in
DnsHosts.
@@ -5445,26 +5800,30 @@ uploading your change for review.
</histogram>
<histogram name="AsyncDNS.HostsNotifyInterval" units="ms">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
Duration of time between calls to DnsConfigService::InvalidateHosts.
</summary>
</histogram>
<histogram name="AsyncDNS.HostsParseDuration" units="ms">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>Duration of time spent parsing DnsHosts.</summary>
</histogram>
<histogram name="AsyncDNS.HostsParseWin" enum="AsyncDNSHostsParseWin">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
Counts of results of parsing DnsHosts in DnsConfigServiceWin.
</summary>
</histogram>
<histogram name="AsyncDNS.HostsSize" units="bytes">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
The size of the HOSTS file observed before each attempt to parse it.
</summary>
@@ -5630,7 +5989,8 @@ uploading your change for review.
</histogram>
<histogram name="AsyncDNS.ParseToAddressList" enum="AsyncDNSParseResult">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
Counts of results of parsing addresses out of DNS responses in successful
DnsTransactions.
@@ -5750,7 +6110,8 @@ uploading your change for review.
</histogram>
<histogram name="AsyncDNS.ServerCount">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
Count of servers in DnsConfig. Recorded on every new DnsSession, which is
created on DNS change.
@@ -5758,14 +6119,16 @@ uploading your change for review.
</histogram>
<histogram name="AsyncDNS.ServerFailureIndex">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
Index in DnsConfig of the failing server, recorded at the time of failure.
</summary>
</histogram>
<histogram name="AsyncDNS.ServerFailuresAfterNetworkChange">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
Count of server failures after network change before first success in the
DnsSession. Recorded at the time of first success.
@@ -5773,7 +6136,8 @@ uploading your change for review.
</histogram>
<histogram name="AsyncDNS.ServerFailuresAfterSuccess">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
Count of server failures after success until the end of the session. Server
has reported success at some point during the session. Recorded at the end
@@ -5782,7 +6146,8 @@ uploading your change for review.
</histogram>
<histogram name="AsyncDNS.ServerFailuresBeforeSuccess">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
Count of server failures before success. This is NOT the first success in
the DnsSession. Recorded at the time of success.
@@ -5790,7 +6155,8 @@ uploading your change for review.
</histogram>
<histogram name="AsyncDNS.ServerFailuresWithoutSuccess">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
Count of server failures without success until the end of the session.
Server has never reported success during the DnsSession. Recorded at the end
@@ -5809,7 +6175,8 @@ uploading your change for review.
</histogram>
<histogram name="AsyncDNS.SortFailure" units="ms">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
Duration of time taken in failing calls to AddressSorter in dual-stack
resolutions using DnsTask.
@@ -5817,7 +6184,8 @@ uploading your change for review.
</histogram>
<histogram name="AsyncDNS.SortSuccess" units="ms">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
Duration of time taken in successful calls to AddressSorter in dual-stack
resolutions using DnsTask.
@@ -5825,7 +6193,8 @@ uploading your change for review.
</histogram>
<histogram name="AsyncDNS.SuffixSearchDone">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
The number of names from the search name list consumed during a successful
transaction (QTYPE A only).
@@ -5833,7 +6202,8 @@ uploading your change for review.
</histogram>
<histogram name="AsyncDNS.SuffixSearchRemain">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
The number of names left on the search name list at the end of a successful
transaction (QTYPE A only).
@@ -5841,7 +6211,8 @@ uploading your change for review.
</histogram>
<histogram name="AsyncDNS.SuffixSearchStart">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
The number of names on the search name list at the start of a transaction
(QTYPE A only).
@@ -5849,7 +6220,8 @@ uploading your change for review.
</histogram>
<histogram name="AsyncDNS.TCPAttemptFail" units="ms">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
Duration of time taken by DnsTCPAttempt in failed attempts. Excludes
timeouts.
@@ -5857,42 +6229,48 @@ uploading your change for review.
</histogram>
<histogram name="AsyncDNS.TCPAttemptSuccess" units="ms">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
Duration of time taken by DnsTCPAttempt in successful attempts.
</summary>
</histogram>
<histogram name="AsyncDNS.TimeoutErrorHistogram" units="ms">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
Difference between RTT and timeout calculated using Histogram algorithm.
</summary>
</histogram>
<histogram name="AsyncDNS.TimeoutErrorHistogramUnder" units="ms">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
Difference between timeout calculated using Histogram algorithm and RTT.
</summary>
</histogram>
<histogram name="AsyncDNS.TimeoutErrorJacobson" units="ms">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
Difference between RTT and timeout calculated using Jacobson algorithm.
</summary>
</histogram>
<histogram name="AsyncDNS.TimeoutErrorJacobsonUnder" units="ms">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
Difference between timeout calculated using Jacobson algorithm and RTT.
</summary>
</histogram>
<histogram name="AsyncDNS.TimeoutSpentHistogram" units="ms">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
Duration of time that would be spent waiting for lost request using
Histogram algorithm.
@@ -5900,7 +6278,8 @@ uploading your change for review.
</histogram>
<histogram name="AsyncDNS.TimeoutSpentJacobson" units="ms">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
Duration of time that would be spent waiting for lost request using Jacobson
algorithm.
@@ -5932,7 +6311,8 @@ uploading your change for review.
</histogram>
<histogram name="AsyncDNS.TransactionFailure" units="ms">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
Duration of time taken in failing DnsTransactions. This includes server
failures, timeouts and NXDOMAIN results.
@@ -5940,7 +6320,8 @@ uploading your change for review.
</histogram>
<histogram name="AsyncDNS.TransactionSuccess" units="ms">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
Duration of time taken in successful DnsTransactions. This includes all
NOERROR answers, even if they indicate the name has no addresses or they
@@ -5949,21 +6330,24 @@ uploading your change for review.
</histogram>
<histogram name="AsyncDNS.TransactionSuccess_A" units="ms">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
Same as AsyncDNS.TransactionSuccess but limited to A query type.
</summary>
</histogram>
<histogram name="AsyncDNS.TransactionSuccess_AAAA" units="ms">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
Same as AsyncDNS.TransactionSuccess but limited to AAAA query type.
</summary>
</histogram>
<histogram name="AsyncDNS.TTL" units="ms">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
TTL of the resolved addresses, as in the response received from the server.
For results served from local cache, the TTL is from the original response.
@@ -5971,7 +6355,8 @@ uploading your change for review.
</histogram>
<histogram name="AsyncDNS.UDPAttemptFail" units="ms">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
Duration of time taken by DnsUDPAttempt in failed attempts. Excludes
timeouts.
@@ -5979,7 +6364,8 @@ uploading your change for review.
</histogram>
<histogram name="AsyncDNS.UDPAttemptSuccess" units="ms">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
Duration of time taken by DnsUDPAttempt in successful attempts. Includes
responses arriving after timeout, if multiple attempts are allowed.
@@ -5987,7 +6373,8 @@ uploading your change for review.
</histogram>
<histogram name="AsyncDNS.UnchangedConfigInterval" units="ms">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
Duration of time since the last empty config result to the time a non-change
OnConfigChange is received.
@@ -5995,7 +6382,8 @@ uploading your change for review.
</histogram>
<histogram name="AsyncDNS.UnchangedHostsInterval" units="ms">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
Duration of time since the last empty config result to the time a non-change
OnHostsChange is received.
@@ -6003,7 +6391,8 @@ uploading your change for review.
</histogram>
<histogram name="AsyncDNS.WatchStatus" enum="AsyncDNSWatchStatus">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
The result of DnsConfigService watch. Counts STARTED on every initialization
and FAILED_* on any failure.
@@ -6453,6 +6842,14 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Autocomplete.Events" enum="AutocompleteEvents">
+ <owner>seblalancette@chromium.org</owner>
+ <summary>
+ Autocomplete events recorded when the user interacts with suggestions served
+ from Autocomplete.
+ </summary>
+</histogram>
+
<histogram name="AutodetectEncoding.Attempted" enum="BooleanAttempted">
<obsolete>
Deprecated as of 2/2016.
@@ -6572,6 +6969,18 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Autofill.CardholderNameFixFlowPrompt.Events"
+ enum="AutofillCardholderNameFixFlowPromptEvent" expires_after="2019-12-01">
+ <owner>dlkumar@google.com</owner>
+ <owner>jsaul@google.com</owner>
+ <owner>chrome-autofill@google.com</owner>
+ <summary>
+ Events tracking the usage of the cardholder name fix flow prompt. This
+ prompt is triggered whenever cardholder name must be explicitly requested
+ from the user in order to upload the card to Google Payments.
+ </summary>
+</histogram>
+
<histogram name="Autofill.CardUploadDecision" enum="AutofillCardUploadDecision">
<obsolete>
Deprecated as of 2/2016, replaced by Autofill.CardUploadDecisionMetric.
@@ -6885,6 +7294,17 @@ uploading your change for review.
<summary>The autofill state related to a submitted form.</summary>
</histogram>
+<histogram name="Autofill.HadUserOptedIn_To_WalletSyncTransportServerCards"
+ enum="BooleanOptedIn" expires_after="M74">
+ <owner>sebsg@chromium.org</owner>
+ <owner>ftirelo@chromium.org</owner>
+ <summary>
+ Whether the user had opted-in to seeing their server cards in Wallet Sync
+ Transport mode. Recorded when showing the autofill dropdown for credit
+ cards.
+ </summary>
+</histogram>
+
<histogram name="Autofill.HasModifiedProfile.CreditCardFormSubmission"
enum="Boolean">
<owner>csashi@google.com</owner>
@@ -7397,6 +7817,9 @@ uploading your change for review.
<histogram name="Autofill.ResetFullServerCards.NumberOfCardsReset.DryRun"
units="Cards">
+ <obsolete>
+ Deprecated as of 10/2018 (M72).
+ </obsolete>
<owner>sebsg@chromium.org</owner>
<summary>The number of full server cards that would have been reset.</summary>
</histogram>
@@ -7458,6 +7881,16 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Autofill.SaveCardRequestExpirationDateReason"
+ enum="AutofillSaveCardRequestExpirationDateReason">
+ <owner>hozhng@google.com</owner>
+ <owner>jsaul@google.com</owner>
+ <summary>
+ Records the reason expiration date was explicitly requested from the user
+ during credit card save.
+ </summary>
+</histogram>
+
<histogram name="Autofill.SaveCardWithFirstAndLastNameComplete" enum="Boolean">
<owner>sebsg@chromium.org</owner>
<!-- Name completed by histogram_suffixes name="AutofillCreditCardType" -->
@@ -7502,6 +7935,16 @@ uploading your change for review.
<summary>Usage of the &quot;Scan card&quot; control item.</summary>
</histogram>
+<histogram name="Autofill.ServerCardLinkClicked" enum="AutofillSyncState"
+ expires_after="M75">
+ <owner>sebsg@chromium.org</owner>
+ <owner>ftirelo@chromium.org</owner>
+ <summary>
+ Logged when the user clicks on the server credit card link in the settings
+ page.
+ </summary>
+</histogram>
+
<histogram name="Autofill.ServerExperimentId" enum="AutofillExperimentId">
<obsolete>
Deprecated as of 6/2011, replaced by Autofill.ServerExperimentId.Query.
@@ -7639,6 +8082,16 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Autofill.StrikeDatabase.StrikeDatabaseInitFailed"
+ units="attempts" expires_after="2019-03-18">
+ <owner>jsaul@google.com</owner>
+ <owner>annelim@google.com</owner>
+ <summary>
+ When a StrikeDatabase fails to initialize, records the number of consecutive
+ failed initialization attempts.
+ </summary>
+</histogram>
+
<histogram name="Autofill.StrikeDatabase.StrikesPresentWhenLocalCardSaved"
units="strikes" expires_after="2019-03-18">
<owner>jsaul@google.com</owner>
@@ -7855,6 +8308,24 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Autofill.Upload.MetadataConfigIsValid" enum="BooleanValid">
+ <owner>rogerm@chromium.org</owner>
+ <summary>
+ Tracks whether or not the configuration fo metadata upload encoding is valid
+ or invalid. Note that if the configuration is invalid, the client will fall
+ back to a default configuration that sends 4 bits per byte (i.e., either the
+ even or odd bits encoding).
+ </summary>
+</histogram>
+
+<histogram name="Autofill.Upload.MetadataEncodingType"
+ enum="AutofillMetadataEncodingType">
+ <owner>rogerm@chromium.org</owner>
+ <summary>
+ The metadata encoding scheme used by the client to encode rich uploads.
+ </summary>
+</histogram>
+
<histogram name="Autofill.Upload.RequestDuration" units="ms"
expires_after="M73">
<owner>rogerm@chromium.org</owner>
@@ -7907,7 +8378,25 @@ uploading your change for review.
</summary>
</histogram>
+<histogram base="true" name="Autofill.WalletAddresses" units="addresses"
+ expires_after="2019-06-01">
+<!-- Name completed by histogram_suffixes name="AutofillWalletCardsDiff" -->
+
+ <owner>sebsg@chromium.org</owner>
+ <owner>jkrcal@chromium.org</owner>
+ <summary>
+ The number of Wallet addresses that were added to Chrome or removed from
+ Chrome via Sync. Recorded when receiving an AUTOFILL_WALLET_DATA update from
+ the Sync server. Recorded only if both the user had previously non-empty
+ data set locally and the new data set is also non-empty (to rule out initial
+ sync and wiping out data).
+ </summary>
+</histogram>
+
<histogram name="Autofill.WalletAddressesAdded" units="addresses">
+ <obsolete>
+ Deprecated as of 11/2018, replaced by Autofill.WalletAddresses.Added.
+ </obsolete>
<owner>sebsg@chromium.org</owner>
<owner>treib@chromium.org</owner>
<summary>
@@ -7920,6 +8409,10 @@ uploading your change for review.
</histogram>
<histogram name="Autofill.WalletAddressesAddedOrRemoved" units="addresses">
+ <obsolete>
+ Deprecated as of 11/2018, replaced by
+ Autofill.WalletAddresses.AddedOrRemoved.
+ </obsolete>
<owner>sebsg@chromium.org</owner>
<owner>treib@chromium.org</owner>
<summary>
@@ -7933,6 +8426,9 @@ uploading your change for review.
</histogram>
<histogram name="Autofill.WalletAddressesRemoved" units="addresses">
+ <obsolete>
+ Deprecated as of 11/2018, replaced by Autofill.WalletAddresses.Removed.
+ </obsolete>
<owner>sebsg@chromium.org</owner>
<owner>treib@chromium.org</owner>
<summary>
@@ -7944,7 +8440,25 @@ uploading your change for review.
</details>
</histogram>
+<histogram base="true" name="Autofill.WalletCards" units="credit cards"
+ expires_after="2019-06-01">
+<!-- Name completed by histogram_suffixes name="AutofillWalletCardsDiff" -->
+
+ <owner>sebsg@chromium.org</owner>
+ <owner>jkrcal@chromium.org</owner>
+ <summary>
+ The number of Wallet credit cards that were added to Chrome or removed from
+ Chrome via Sync. Recorded when receiving an AUTOFILL_WALLET_DATA update from
+ the Sync server. Recorded only if both the user had previously non-empty
+ data set locally and the new data set is also non-empty (to rule out initial
+ sync and wiping out data).
+ </summary>
+</histogram>
+
<histogram name="Autofill.WalletCardsAdded" units="credit cards">
+ <obsolete>
+ Deprecated as of 11/2018, replaced by Autofill.WalletCards.Added.
+ </obsolete>
<owner>sebsg@chromium.org</owner>
<owner>treib@chromium.org</owner>
<summary>
@@ -7957,6 +8471,9 @@ uploading your change for review.
</histogram>
<histogram name="Autofill.WalletCardsAddedOrRemoved" units="credit cards">
+ <obsolete>
+ Deprecated as of 11/2018, replaced by Autofill.WalletCards.AddedOrRemoved.
+ </obsolete>
<owner>sebsg@chromium.org</owner>
<owner>treib@chromium.org</owner>
<summary>
@@ -7970,6 +8487,9 @@ uploading your change for review.
</histogram>
<histogram name="Autofill.WalletCardsRemoved" units="credit cards">
+ <obsolete>
+ Deprecated as of 11/2018, replaced by Autofill.WalletCards.Removed.
+ </obsolete>
<owner>sebsg@chromium.org</owner>
<owner>treib@chromium.org</owner>
<summary>
@@ -8016,6 +8536,93 @@ uploading your change for review.
<summary>Whether the user changed autofilled field.</summary>
</histogram>
+<histogram name="AutoScreenBrightness.AlsReaderStatus"
+ enum="AutoScreenBrightnessAlsReaderStatus">
+ <owner>tby@chromium.org</owner>
+ <summary>Whether the ALS is enabled or the error otherwise.</summary>
+</histogram>
+
+<histogram name="AutoScreenBrightness.BrightnessMonitorStatus"
+ enum="AutoScreenBrightnessBrightnessMonitorStatus">
+ <owner>tby@chromium.org</owner>
+ <summary>
+ Whether the brightness monitor is enabled or the error otherwise.
+ </summary>
+</histogram>
+
+<histogram name="AutoScreenBrightness.DailyUserAdjustment.NoAls" units="count">
+ <owner>jiameng@chromium.org</owner>
+ <summary>
+ Number of times that a user has made brightness adjustments on a device
+ without an ambient sensor. Reported daily. The count is accumulated through
+ the day, spanning reboots, and sent once the system clock indicates that a
+ full day or more has passed since the last report. If the system is
+ suspended or off for more than a day, the current count will be reported
+ immediately the next time the system boots, but the skipped days will not be
+ reported. Chrome OS only.
+ </summary>
+</histogram>
+
+<histogram name="AutoScreenBrightness.DailyUserAdjustment.SupportedAls"
+ units="count">
+ <owner>jiameng@chromium.org</owner>
+ <summary>
+ Number of times that a user has made brightness adjustments on a device with
+ an ambient sensor that is supported by the auto screen brightness model.
+ Reported daily. The count is accumulated through the day, spanning reboots,
+ and sent once the system clock indicates that a full day or more has passed
+ since the last report. If the system is suspended or off for more than a
+ day, the current count will be reported immediately the next time the system
+ boots, but the skipped days will not be reported. Chrome OS only.
+ </summary>
+</histogram>
+
+<histogram name="AutoScreenBrightness.DailyUserAdjustment.UnsupportedAls"
+ units="count">
+ <owner>jiameng@chromium.org</owner>
+ <summary>
+ Number of times that a user has made brightness adjustments on a device with
+ an ambient sensor that is not supported by the auto screen brightness model.
+ Reported daily. The count is accumulated through the day, spanning reboots,
+ and sent once the system clock indicates that a full day or more has passed
+ since the last report. If the system is suspended or off for more than a
+ day, the current count will be reported immediately the next time the system
+ boots, but the skipped days will not be reported. Chrome OS only.
+ </summary>
+</histogram>
+
+<histogram name="AutoScreenBrightness.DataError"
+ enum="AutoScreenBrightnessDataError">
+ <owner>jiameng@chromium.org</owner>
+ <summary>
+ Type of error seen when handling data related to automatic screen brightness
+ adjustments. Only reported on Chrome OS.
+ </summary>
+</histogram>
+
+<histogram name="AutoScreenBrightness.ParameterError"
+ enum="AutoScreenBrightnessParameterError">
+ <owner>tby@chromium.org</owner>
+ <summary>
+ When there is an error in the automatic screen brightness parameters, this
+ records which kind of parameter is invalid.
+ </summary>
+</histogram>
+
+<histogram name="AutoScreenBrightness.PersonalCurveValid" enum="BooleanValid">
+ <owner>tby@chromium.org</owner>
+ <summary>Whether the user's personal brightness curve is valid.</summary>
+</histogram>
+
+<histogram name="AutoScreenBrightness.UserAdjustment"
+ enum="AutoScreenBrightnessUserAdjustment">
+ <obsolete>
+ Deprecated as of 11/2018. It has been replaced by DailyUserAdjustment.
+ </obsolete>
+ <owner>jiameng@chromium.org</owner>
+ <summary>Type of user manual screen brightness adjustment.</summary>
+</histogram>
+
<histogram base="true" name="BackgroundFetch.EventDispatchFailure.Dispatch"
enum="ServiceWorkerStatusCode">
<!-- Name completed by histogram_suffixes name="BackgroundFetchEvents" -->
@@ -8101,6 +8708,9 @@ uploading your change for review.
<histogram name="BackgroundFetch.RegistrationCreatedError"
enum="BackgroundFetchError">
+ <obsolete>
+ Deprecated 10/2018 since DB tasks record this more accurately.
+ </obsolete>
<owner>peter@chromium.org</owner>
<owner>rayankans@chromium.org</owner>
<summary>
@@ -8111,6 +8721,9 @@ uploading your change for review.
<histogram name="BackgroundFetch.RegistrationDeletedError"
enum="BackgroundFetchError">
+ <obsolete>
+ Deprecated 10/2018 since DB tasks record this more accurately.
+ </obsolete>
<owner>peter@chromium.org</owner>
<owner>rayankans@chromium.org</owner>
<summary>
@@ -8121,6 +8734,9 @@ uploading your change for review.
<histogram name="BackgroundFetch.SchedulerFinishedError"
enum="BackgroundFetchError">
+ <obsolete>
+ Deprecated 10/2018 since DB tasks record this more accurately.
+ </obsolete>
<owner>peter@chromium.org</owner>
<owner>rayankans@chromium.org</owner>
<summary>
@@ -8640,7 +9256,37 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Blink.Canvas.2DLayerBridgeIsDeferred" enum="BooleanSuccess"
+ expires_after="2019-12-31">
+ <owner>aaronhk@chromium.org</owner>
+ <owner>fserb@chromium.org</owner>
+ <summary>
+ Records if a 2D Layer Bridge is using deferred rendering when it is
+ destroyed. Emitted in Canvas2DLayerBridge::~Canvas2DLayerBridge.
+ </summary>
+</histogram>
+
+<histogram name="Blink.Canvas.ContextType" enum="CanvasContextType">
+ <owner>fserb@chromium.org</owner>
+ <owner>davidqu@chromium.org</owner>
+ <summary>
+ Records the context type names used to create canvas rendering contexts.
+ </summary>
+</histogram>
+
+<histogram name="Blink.Canvas.CreateImageBitmapSource"
+ enum="CanvasCreateImageBitmapSource" expires_after="2019-12-31">
+ <owner>fserb@chromium.org</owner>
+ <owner>davidqu@chromium.org</owner>
+ <summary>
+ The source from which an ImageBitmap is created by a createImageBitmap call.
+ </summary>
+</histogram>
+
<histogram name="Blink.Canvas.DrawImage" units="microseconds">
+ <obsolete>
+ Replaced with Blink.Canvas.DrawImage.Duration in 10/2018.
+ </obsolete>
<owner>junov@chromium.org</owner>
<summary>
Time spent on 2D canvas drawImage API call.
@@ -8653,7 +9299,33 @@ uploading your change for review.
</summary>
</histogram>
+<histogram base="true" name="Blink.Canvas.DrawImage.Duration"
+ units="microseconds">
+ <owner>fserb@chromium.org</owner>
+ <owner>davidqu@chromium.org</owner>
+ <summary>
+ Time spent on the main thread during a 2D canvas drawImage API call.
+
+ Note: This metric drops reports on clients with low-resolution clocks, which
+ means these reports will be biased against a portion of the population on
+ Windows. See Windows.HasHighResolutionTimeTicks for the affected sample.
+ </summary>
+</histogram>
+
+<histogram base="true" name="Blink.Canvas.DrawImage.SqrtNumberOfPixels"
+ units="sqrt(pixels)" expires_after="2019-12-31">
+ <owner>fserb@chromium.org</owner>
+ <owner>davidqu@chromium.org</owner>
+ <summary>
+ Stores the square root of the number of pixels drawn into a Canvas.
+ Different histograms per CanvasImageSource.
+ </summary>
+</histogram>
+
<histogram name="Blink.Canvas.GetImageData" units="microseconds">
+ <obsolete>
+ Replaced with Blink.Canvas.GetImageDataScaledDuration in 10/2018.
+ </obsolete>
<owner>junov@chromium.org</owner>
<summary>
Time spent on 2D canvas getImageData API call.
@@ -8666,7 +9338,64 @@ uploading your change for review.
</summary>
</histogram>
+<histogram base="true" name="Blink.Canvas.GetImageDataScaledDuration"
+ units="microseconds * 10/sqrt(pixels)" expires_after="2019-12-31">
+ <owner>fserb@chromium.org</owner>
+ <owner>davidqu@chromium.org</owner>
+ <summary>
+ Time in microseconds * 10 (10e-5 seconds) spent on the 2D canvas
+ getImageData API call, divided by the square root of the total number of
+ pixels of the image extracted from the canvas. Smaller is faster.
+
+ The idea behind this elaborated unit is that the bigger the area of a canvas
+ the longer the operation GetImageData takes, so we want a way to measure the
+ overall performance regardless of the size of the canvas.
+ </summary>
+</histogram>
+
+<histogram name="Blink.Canvas.GPUAccelerated2DCanvasDisableDeferralReason"
+ enum="CanvasGPUAccelerated2DCanvasDisableDeferralReason"
+ expires_after="2019-12-31">
+ <owner>fserb@chromium.org</owner>
+ <owner>davidqu@chromium.org</owner>
+ <summary>
+ The reasons why a GPU accelerated canvas stopped deferring its rendering
+ operations.
+ </summary>
+</histogram>
+
+<histogram name="Blink.Canvas.HibernationEvents" enum="CanvasHibernationEvent"
+ expires_after="2019-12-31">
+ <owner/>
+ <summary>
+ Records the occurrence of events related to 2D canvas GPU resource
+ hibernation.
+ </summary>
+</histogram>
+
+<histogram name="Blink.Canvas.IsComposited" enum="BooleanSuccess"
+ expires_after="2020-10-24">
+ <owner>aaronhk@chromium.org</owner>
+ <owner>fserb@chromium.org</owner>
+ <summary>
+ Records if the canvas context is composited or not. Recorded in
+ HTMLCanvasElement::GetCanvasRenderingContext.
+ </summary>
+</histogram>
+
+<histogram name="Blink.Canvas.NumCanvasesPerPage" units="canvases"
+ expires_after="2020-8-30">
+ <owner>aaronhk@chromium.org</owner>
+ <owner>fserb@chromium.org</owner>
+ <summary>
+ When a Document is shutdown, reports the number of canvases on that page.
+ </summary>
+</histogram>
+
<histogram name="Blink.Canvas.OffscreenCommitTimer" units="microseconds">
+ <obsolete>
+ Deprecated in 10/2018. Offscreen Canvas no longer needs commits.
+ </obsolete>
<owner>junov@chromium.org</owner>
<owner>xidachen@chromium.org</owner>
<summary>
@@ -8681,6 +9410,9 @@ uploading your change for review.
</histogram>
<histogram name="Blink.Canvas.PutImageData" units="microseconds">
+ <obsolete>
+ Replaced with Blink.Canvas.PutImageDataScaledDuration in 10/2018.
+ </obsolete>
<owner>junov@chromium.org</owner>
<summary>
Time spent on 2D canvas putImageData API call.
@@ -8693,10 +9425,62 @@ uploading your change for review.
</summary>
</histogram>
-<histogram name="Blink.Canvas.ToBlob.CompleteEncodingDelay"
+<histogram base="true" name="Blink.Canvas.PutImageDataScaledDuration"
+ units="microseconds * 10/sqrt(pixels)" expires_after="2019-12-31">
+ <owner>fserb@chromium.org</owner>
+ <owner>davidqu@chromium.org</owner>
+ <summary>
+ Time in microseconds * 10 (10e-5 seconds) spent on the 2D canvas
+ putImageData API call, divided by the square root of the total number of
+ pixels of the imageData painted into the canvas. Smaller is faster.
+
+ The idea behind this elaborated unit is that the bigger the area of a canvas
+ the longer the operation PutImageData takes, so we want a way to measure the
+ overall performance regardless of the size of the canvas.
+ </summary>
+</histogram>
+
+<histogram base="true" name="Blink.Canvas.RequestedImageMimeTypes"
+ enum="RequestedImageMimeType" expires_after="2019-12-31">
+ <owner>fserb@chromium.org</owner>
+ <owner>davidqu@chromium.org</owner>
+ <summary>
+ Records the occurence of image file formats passed into toDataURL and toBlob
+ functions in canvas.
+ </summary>
+</histogram>
+
+<histogram name="Blink.Canvas.ResourceProviderIsAccelerated"
+ enum="BooleanEnabled">
+ <owner>aaronhk@chromium.org</owner>
+ <owner>fserb@chromium.org</owner>
+ <summary>Logs if the canvas resource provider is accelerated or not.</summary>
+</histogram>
+
+<histogram name="Blink.Canvas.ResourceProviderType"
+ enum="CanvasResourceProviderType">
+ <owner>aaronhk@chromium.org</owner>
+ <owner>fserb@chromium.org</owner>
+ <summary>
+ Records the type of resource provider used for a canvas (texture, bitmap or
+ shared bitmap).
+ </summary>
+</histogram>
+
+<histogram name="Blink.Canvas.SqrtNumberOfPixels" units="sqrt(pixels)"
+ expires_after="2020-8-30">
+ <owner>aaronhk@chromium.org</owner>
+ <owner>fserb@chromium.org</owner>
+ <summary>
+ Stores the square root of the number of pixels in a new or resized offscreen
+ canvas. Emitted from CanvasRenderingContextHost::RecordCanvasSizeToUMA.
+ </summary>
+</histogram>
+
+<histogram base="true" name="Blink.Canvas.ToBlob.CompleteEncodingDelay"
units="microseconds">
- <owner>junov@chromium.org</owner>
- <owner>xlai@chromium.org</owner>
+ <owner>fserb@chromium.org</owner>
+ <owner>davidqu@chromium.org</owner>
<summary>
This metric measures the total time spent on completing encoding all the
rows of an image (jpeg or png), as part of a canvas.toBlob API call.
@@ -8715,11 +9499,9 @@ uploading your change for review.
same as canvas.toBlob. It's worth to note that the values can come from idle
tasks on either main or worker thread.
- Warning: This metric may include reports from clients with low-resolution
- clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports
- will cause this metric to have an abnormal distribution. When considering
- revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the
- solution.
+ Note: This metric drops reports on clients with low-resolution clocks, which
+ means these reports will be biased against a portion of the population on
+ Windows. See Windows.HasHighResolutionTimeTicks for the affected sample.
</summary>
</histogram>
@@ -8737,9 +9519,10 @@ uploading your change for review.
</summary>
</histogram>
-<histogram name="Blink.Canvas.ToBlob.IdleTaskStatus" enum="IdleTaskStatus">
- <owner>junov@chromium.org</owner>
- <owner>xlai@chromium.org</owner>
+<histogram base="true" name="Blink.Canvas.ToBlob.IdleTaskStatus"
+ enum="IdleTaskStatus">
+ <owner>fserb@chromium.org</owner>
+ <owner>davidqu@chromium.org</owner>
<summary>
Records the status of the idle task when finishing a toBlob call.
@@ -8750,10 +9533,10 @@ uploading your change for review.
</summary>
</histogram>
-<histogram name="Blink.Canvas.ToBlob.InitiateEncodingDelay"
+<histogram base="true" name="Blink.Canvas.ToBlob.InitiateEncodingDelay"
units="microseconds">
- <owner>junov@chromium.org</owner>
- <owner>xlai@chromium.org</owner>
+ <owner>fserb@chromium.org</owner>
+ <owner>davidqu@chromium.org</owner>
<summary>
This metric measures the time spent from initiating image encoding (jpeg or
png) on idle task to the actual execution time of initiation, as part of a
@@ -8769,15 +9552,35 @@ uploading your change for review.
same as canvas.toBlob. It's worth to note that the values can come from idle
tasks on either main or worker thread.
- Warning: This metric may include reports from clients with low-resolution
- clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports
- will cause this metric to have an abnormal distribution. When considering
- revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the
- solution.
+ Note: This metric drops reports on clients with low-resolution clocks, which
+ means these reports will be biased against a portion of the population on
+ Windows. See Windows.HasHighResolutionTimeTicks for the affected sample.
+ </summary>
+</histogram>
+
+<histogram base="true" name="Blink.Canvas.ToBlob.ScaledDuration"
+ units="microseconds/sqrt(pixels)" expires_after="2019-12-31">
+ <owner>fserb@chromium.org</owner>
+ <owner>davidqu@chromium.org</owner>
+ <summary>
+ Time in microseconds spent on the 2D canvas toBlob API call, divided by the
+ square root of the total number of pixels of the canvas.
+
+ In addition, metric values from OffscreenCanvas.convertToBlob API call are
+ also gathered into this histogram, because the logic flow is exactly the
+ same as canvas.toBlob. It's worth to note that the values can come from idle
+ tasks on either main or worker thread.
+
+ Note: This metric drops reports on clients with low-resolution clocks, which
+ means these reports will be biased against a portion of the population on
+ Windows. See Windows.HasHighResolutionTimeTicks for the affected sample.
</summary>
</histogram>
<histogram name="Blink.Canvas.ToBlobDuration" units="microseconds">
+ <obsolete>
+ Replaced with Blink.Canvas.ToBlob.ScaledDuration in 10/2018.
+ </obsolete>
<owner>junov@chromium.org</owner>
<owner>xlai@chromium.org</owner>
<summary>
@@ -8797,6 +9600,9 @@ uploading your change for review.
</histogram>
<histogram name="Blink.Canvas.ToDataURL" units="microseconds">
+ <obsolete>
+ Replaced with Blink.Canvas.ToDataURLScaledDuration in 10/2018.
+ </obsolete>
<owner>junov@chromium.org</owner>
<summary>
Time spent on 2D canvas toDataURL API call.
@@ -8809,6 +9615,20 @@ uploading your change for review.
</summary>
</histogram>
+<histogram base="true" name="Blink.Canvas.ToDataURLScaledDuration"
+ units="microseconds/sqrt(pixels)" expires_after="2019-12-31">
+ <owner>fserb@chromium.org</owner>
+ <owner>davidqu@chromium.org</owner>
+ <summary>
+ Time spent on 2D canvas toDataURL API call divided by the square root of the
+ total number of pixels of the image. Smaller is faster.
+
+ The idea behind this unit is that the bigger the area of a canvas the longer
+ the operation ToDataURL takes, so we want a way to measure the overall
+ performance regardless of the size of the canvas.
+ </summary>
+</histogram>
+
<histogram name="Blink.CheckerableImageCount" enum="CheckerableImageType">
<obsolete>
Deprecated on 2018-05-04.
@@ -9302,9 +10122,7 @@ uploading your change for review.
<summary>
The percentage of time between a BeginMainFrame and paint results commit in
- Blink that is used for committing paint results to the compositor. The
- reported value is an average over the time since the previous record: 30
- seconds unless the frame is disposed of.
+ Blink that is used for committing paint results to the compositor.
</summary>
</histogram>
@@ -9314,9 +10132,7 @@ uploading your change for review.
<summary>
The percentage of time between a BeginMainFrame and paint results commit in
- Blink that is used for computing Compositing. The reported value is an
- average over the time since the previous record: 30 seconds unless the frame
- is disposed of.
+ Blink that is used for computing Compositing.
</summary>
</histogram>
@@ -9328,21 +10144,18 @@ uploading your change for review.
<summary>
The time between each paint results commit used in computing forced style
recalc and layouts for this document and ancestors as a percentage of the
- Blink local frame lifecycle update time. The reported value is an average
- over the time since the previous record: 30 seconds unless the frame is
- disposed of.
+ Blink local frame lifecycle update time.
</summary>
</histogram>
-<histogram base="true" name="Blink.MainFrame.IntersectionRatio" units="%">
+<histogram base="true" name="Blink.MainFrame.IntersectionObservationRatio"
+ units="%">
<owner>paint-dev@chromium.org</owner>
<!-- Name completed by histogram_suffixes name="BlinkMainFrameUpdateTimeSuffixes" -->
<summary>
The percentage of time between a BeginMainFrame and paint results commit in
- Blink that is used for computing Intersection Observations. The reported
- value is an average over the time since the previous record: 30 seconds
- unless the frame is disposed of.
+ Blink that is used for computing Intersection Observations.
</summary>
</histogram>
@@ -9352,9 +10165,7 @@ uploading your change for review.
<summary>
The percentage of time between a BeginMainFrame and paint results commit in
- Blink that is used for computing Paint. The reported value is an average
- over the time since the previous record: 30 seconds unless the frame is
- disposed of.
+ Blink that is used for computing Paint.
</summary>
</histogram>
@@ -9364,9 +10175,7 @@ uploading your change for review.
<summary>
The percentage of time between a BeginMainFrame and paint results commit in
- Blink that is used for computing PrePaint. The reported value is an average
- over the time since the previous record: 30 seconds unless the frame is
- disposed of.
+ Blink that is used for computing PrePaint.
</summary>
</histogram>
@@ -9376,9 +10185,7 @@ uploading your change for review.
<summary>
The percentage of time between a BeginMainFrame and paint results commit in
- Blink that is used for computing Style and Layout. The reported value is an
- average over the time since the previous record: 30 seconds unless the frame
- is disposed of.
+ Blink that is used for computing Style and Layout.
</summary>
</histogram>
@@ -9444,6 +10251,52 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Blink.OffscreenCanvas.ContextType" enum="CanvasContextType">
+ <owner>aaronhk@chromium.org</owner>
+ <owner>fserb@chromium.org</owner>
+ <summary>
+ Records the context type names used to create offscreen canvas rendering
+ contexts. Recorded in OffscreenCanvas::GetCanvasRenderingContext
+ </summary>
+</histogram>
+
+<histogram name="Blink.OffscreenCanvas.NewOffscreenCanvas" enum="Boolean">
+ <owner>aaronhk@chromium.org</owner>
+ <owner>fserb@chromium.org</owner>
+ <summary>
+ Records the creation of a new offscreen canvas in OffscreenCanvas::Create.
+ </summary>
+</histogram>
+
+<histogram name="Blink.OffscreenCanvas.SqrtNumberOfPixels" units="sqrt(pixels)"
+ expires_after="2020-8-30">
+ <owner>aaronhk@chromium.org</owner>
+ <owner>fserb@chromium.org</owner>
+ <summary>
+ Stores the square root of the number of pixels in a new or resized offscreen
+ canvas. Emitted from CanvasRenderingContextHost::RecordCanvasSizeToUMA.
+ </summary>
+</histogram>
+
+<histogram name="Blink.OffscreenCanvas.TransferControlToOffscreen"
+ enum="Boolean">
+ <owner>aaronhk@chromium.org</owner>
+ <owner>fserb@chromium.org</owner>
+ <summary>
+ Records a call to transfer a canvas offscreen. True indicates a successful
+ transfer, false for a failure.
+ </summary>
+</histogram>
+
+<histogram name="Blink.OffscreenCanvas.Transferred" enum="Boolean">
+ <owner>aaronhk@chromium.org</owner>
+ <owner>fserb@chromium.org</owner>
+ <summary>
+ Records when an offscreen canvas has been transferred from the main thread
+ to a worker.
+ </summary>
+</histogram>
+
<histogram name="Blink.Paint.UpdateTime" units="microseconds">
<owner>paint-dev@chromium.org</owner>
<summary>
@@ -9637,7 +10490,7 @@ uploading your change for review.
</histogram>
<histogram name="Blink.Script.SchedulingType" enum="ScriptSchedulingType"
- expires_after="2018-12-31">
+ expires_after="2020-10-24">
<owner>kouhei@chromium.org</owner>
<owner>hiroshige@chromium.org</owner>
<summary>
@@ -9831,8 +10684,17 @@ uploading your change for review.
</details>
</histogram>
+<histogram name="Blink.UseCounter.FeaturePolicy.Allow"
+ enum="FeaturePolicyFeature" expires_after="2019-10-31">
+ <owner>iclelland@chromium.org</owner>
+ <summary>
+ Counts the use of a specific feature policy via the &quot;allow&quot;
+ attribute. Each policy is counted only once per page load.
+ </summary>
+</histogram>
+
<histogram name="Blink.UseCounter.FeaturePolicy.Header"
- enum="FeaturePolicyFeature">
+ enum="FeaturePolicyFeature" expires_after="2019-10-31">
<owner>iclelland@chromium.org</owner>
<summary>
Counts the use of a specific feature policy via the
@@ -10191,6 +11053,14 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="BlinkGC.TimeForGCCycle" units="ms">
+ <owner>oilpan-reviews@chromium.org</owner>
+ <summary>
+ Sum of all durations of individual phases within one Blink garbage
+ collection. Reported once per garbage collection at the end.
+ </summary>
+</histogram>
+
<histogram name="BlinkGC.TimeForGlobalWeakProcessing" units="ms">
<owner>haraken@chromium.org</owner>
<summary>
@@ -10212,6 +11082,14 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="BlinkGC.TimeForNestedInV8" units="ms">
+ <owner>oilpan-reviews@chromium.org</owner>
+ <summary>
+ Duration of the time of Blink garbage collection spent nested in a V8
+ garbage collection. Reported once per garbage collection at the end.
+ </summary>
+</histogram>
+
<histogram name="BlinkGC.TimeForStoppingThreads" units="ms">
<obsolete>
As of 02/2017, the code to stop Blink threads was removed.
@@ -11185,7 +12063,9 @@ uploading your change for review.
</histogram>
<histogram name="Browser.Responsiveness.JankyIntervalsPerThirtySeconds"
- units="janks" expires_after="M75">
+ units="janks">
+<!-- Name completed by histogram_suffixes name="JankyIntervalsPerThirtySeconds" -->
+
<owner>erikchen@chromium.org</owner>
<owner>tdresser@chromium.org</owner>
<summary>
@@ -11194,6 +12074,10 @@ uploading your change for review.
number of these intervals that were &quot;janky&quot;. See
https://docs.google.com/document/d/1vDSGFvJblh7yJ3U3RVB_7qZLubyfTbQdQjuN1GoUNkc/edit
for more details.
+
+ On desktop platforms, this metric measures native events, as well as tasks
+ posted to the UI and IO threads of the browser process. On Android, this
+ metric only measures tasks posted to the UI and IO threads.
</summary>
</histogram>
@@ -11369,16 +12253,30 @@ uploading your change for review.
</summary>
</histogram>
-<histogram name="BrowserServices.ServiceTabResolveInfoQuery" units="ms">
+<histogram name="BrowserServices.ClientAppDataLoad" units="ms"
+ expires_after="M78">
<owner>peconn@chromium.org</owner>
+ <owner>peter@chromium.org</owner>
+ <summary>
+ Triggered when any Android app is uninstalled or has its data cleared. This
+ measures how long it takes to read data from Preferences to determine
+ whether we need to act.
+ </summary>
+</histogram>
+
+<histogram name="BrowserServices.ServiceTabResolveInfoQuery" units="ms"
+ expires_after="M78">
+ <owner>peconn@chromium.org</owner>
+ <owner>peter@chromium.org</owner>
<summary>
Triggered when an Android background service attempts to create a Tab. We
time how long the Android package manager queryIntentActivities call takes.
</summary>
</histogram>
-<histogram name="BrowserServices.TwaOpenTime" units="ms">
+<histogram name="BrowserServices.TwaOpenTime" units="ms" expires_after="M78">
<owner>peconn@chromium.org</owner>
+ <owner>peter@chromium.org</owner>
<summary>
Triggered when a TrustedWebActivity is paused, recording the time since it
had been resumed.
@@ -11388,12 +12286,89 @@ uploading your change for review.
<histogram name="BrowserServices.VerificationResult"
enum="BrowserServicesVerificationResult">
<owner>peconn@chromium.org</owner>
+ <owner>peter@chromium.org</owner>
<summary>
The result of Digital Asset Link verification performed when starting a
Trusted Web Activity.
</summary>
</histogram>
+<histogram name="BrowserSwitcher.Decision" enum="BooleanBrowserSwitch">
+ <owner>nicolaso@chromium.org</owner>
+ <owner>pastarmovj@chromium.org</owner>
+ <summary>
+ On navigation and redirect, whether to switch browsers or not. Only measured
+ when Legacy Browser Support is enabled via the BrowserSwitcher* policies.
+ When this is true, Chrome attempts to launch an alternative browser
+ (typically IE) with the navigation URL. Desktop Chrome only.
+ </summary>
+</histogram>
+
+<histogram name="BrowserSwitcher.ExternalSitelistSize" units="rules">
+ <owner>nicolaso@chromium.org</owner>
+ <owner>pastarmovj@chromium.org</owner>
+ <summary>
+ Number of rules that come from an external sitelist XML file. Measured when
+ the sitelist is loaded during browser startup. Desktop Chrome only.
+ </summary>
+</histogram>
+
+<histogram name="BrowserSwitcher.GreylistSize" units="rules">
+ <owner>nicolaso@chromium.org</owner>
+ <owner>pastarmovj@chromium.org</owner>
+ <summary>
+ Number of rules in the BrowserSwitcherUrlGreylist policy. Measured when the
+ policy is loaded. Desktop Chrome only.
+ </summary>
+</histogram>
+
+<histogram name="BrowserSwitcher.GreylistWildcard" enum="BooleanPresent">
+ <owner>nicolaso@chromium.org</owner>
+ <owner>pastarmovj@chromium.org</owner>
+ <summary>
+ Whether there is a wildcard (&quot;*&quot;) rule in the
+ BrowserSwitcherUrlGreylist policy. Measured when the
+ BrowserSwitcherUrlGreylist policy gets updated. Desktop Chrome only.
+ </summary>
+</histogram>
+
+<histogram name="BrowserSwitcher.IeemSitelistSize" units="rules">
+ <owner>nicolaso@chromium.org</owner>
+ <owner>pastarmovj@chromium.org</owner>
+ <summary>
+ Number of rules that come from Internet Explorer Enterprise Mode's sitelist.
+ Measured when the sitelist is loaded during browser startup. Windows only.
+ </summary>
+</histogram>
+
+<histogram name="BrowserSwitcher.LaunchSuccess" enum="BooleanSuccess">
+ <owner>nicolaso@chromium.org</owner>
+ <owner>pastarmovj@chromium.org</owner>
+ <summary>
+ Records whether an attempt to launch an alternate browser failed or
+ succeeded. Desktop Chrome only.
+ </summary>
+</histogram>
+
+<histogram name="BrowserSwitcher.UrlListSize" units="rules">
+ <owner>nicolaso@chromium.org</owner>
+ <owner>pastarmovj@chromium.org</owner>
+ <summary>
+ Number of rules in the BrowserSwitcherUrlList policy. Measured when the
+ policy gets updated. Desktop Chrome only.
+ </summary>
+</histogram>
+
+<histogram name="BrowserSwitcher.UrlListWildcard" enum="BooleanPresent">
+ <owner>nicolaso@chromium.org</owner>
+ <owner>pastarmovj@chromium.org</owner>
+ <summary>
+ Whether there is a wildcard (&quot;*&quot;) rule in the
+ BrowserSwitcherUrlList policy. Measured when the BrowserSwitcherUrlList
+ policy gets updated. Desktop Chrome only.
+ </summary>
+</histogram>
+
<histogram name="BrowserWindow.Resize.Duration" units="ms">
<owner>sadrul@chromium.org</owner>
<owner>mustash-team@google.com</owner>
@@ -11500,7 +12475,61 @@ uploading your change for review.
<summary>A bubble was given to the bubble manager but not shown.</summary>
</histogram>
+<histogram name="CachedImageFetcher.Events" enum="CachedImageFetcherEvent"
+ expires_after="2019-12-01">
+ <owner>fgorski@chromium.org</owner>
+ <owner>wylieb@chromium.org</owner>
+ <summary>
+ Events that track the lifecycle and performance of the cached_image_fetcher.
+ The events reported include: success/failure conditions, various recoverable
+ errors and a couple of dead-end errors.
+ </summary>
+</histogram>
+
+<histogram name="CachedImageFetcher.ImageLoadFromCacheTime" units="ms"
+ expires_after="2019-12-01">
+ <owner>fgorski@chromium.org</owner>
+ <owner>wylieb@chromium.org</owner>
+ <summary>
+ The time it takes for cached_image_fetcher to load an image from the cache.
+ </summary>
+</histogram>
+
+<histogram name="CachedImageFetcher.ImageLoadFromNetworkAfterCacheHit"
+ units="ms" expires_after="2019-12-01">
+ <owner>fgorski@chromium.org</owner>
+ <owner>wylieb@chromium.org</owner>
+ <summary>
+ The time it takes for cached_image_fetcher to load an image from the network
+ after a cache hit.
+ </summary>
+</histogram>
+
+<histogram name="CachedImageFetcher.ImageLoadFromNetworkTime" units="ms"
+ expires_after="2019-12-01">
+ <owner>fgorski@chromium.org</owner>
+ <owner>wylieb@chromium.org</owner>
+ <summary>
+ The time it takes for cached_image_fetcher to load an image from the
+ network.
+ </summary>
+</histogram>
+
+<histogram name="CachedImageFetcher.TimeSinceLastCacheLRUEviction" units="ms"
+ expires_after="2019-12-01">
+ <owner>fgorski@chromium.org</owner>
+ <owner>wylieb@chromium.org</owner>
+ <summary>
+ The time since the last LRU eviction from the image cache. Recorded when two
+ LRU evictions occur within closure proximity to one another. Will be used to
+ determine if LRU eviction is happening too frequently.
+ </summary>
+</histogram>
+
<histogram name="Canvas.ContextType" enum="CanvasContextType">
+ <obsolete>
+ Replaced with Blink.Canvas.ContextType in 10/2018.
+ </obsolete>
<owner>junov@chromium.org</owner>
<owner>kbr@chromium.org</owner>
<summary>
@@ -11510,6 +12539,9 @@ uploading your change for review.
<histogram name="Canvas.CreateImageBitmapSource"
enum="CanvasCreateImageBitmapSource">
+ <obsolete>
+ Replaced with Blink.Canvas.CreateImageBitmapSource in 10/2018.
+ </obsolete>
<owner>junov@chromium.org</owner>
<owner>zakerinasab@chromium.org</owner>
<summary>
@@ -11531,6 +12563,10 @@ uploading your change for review.
<histogram name="Canvas.GPUAccelerated2DCanvasDisableDeferralReason"
enum="CanvasGPUAccelerated2DCanvasDisableDeferralReason">
+ <obsolete>
+ Replaced with Blink.Canvas.GPUAccelerated2DCanvasDisableDeferralReason in
+ 10/2018.
+ </obsolete>
<owner>junov@chromium.org</owner>
<summary>
The reasons why a GPU accelerated canvas stopped deferring its rendering
@@ -11539,6 +12575,9 @@ uploading your change for review.
</histogram>
<histogram name="Canvas.HibernationEvents" enum="CanvasHibernationEvent">
+ <obsolete>
+ Replaced with Blink.Canvas.HibernationEvents in 10/2018.
+ </obsolete>
<owner>junov@chromium.org</owner>
<summary>
Records the occurrence of events related to 2D canvas GPU resource
@@ -11547,6 +12586,9 @@ uploading your change for review.
</histogram>
<histogram name="Canvas.Offscreen.CommitType" enum="OffscreenCanvasCommitType">
+ <obsolete>
+ Deprecated 10/2018 with Blink.OffscreenCanvas histograms
+ </obsolete>
<owner>xidachen@chromium.org</owner>
<owner>junov@chromium.org</owner>
<summary>
@@ -11555,6 +12597,9 @@ uploading your change for review.
</histogram>
<histogram name="Canvas.RequestedImageMimeTypes" enum="RequestedImageMimeType">
+ <obsolete>
+ Replaced with Blink.Canvas.RequestedImageMimeTypes in 10/2018.
+ </obsolete>
<owner>xlai@chromium.org</owner>
<summary>
Records the occurence of image file formats passed into toDataURL and toBlob
@@ -12522,6 +13567,28 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="ChromeElf.ApplyHookResult" enum="NTSTATUS">
+ <owner>pmonette@chromium.org</owner>
+ <summary>
+ Records the NTSTATUS result that was returned when attempting to hook
+ NtMapViewOfSection during chrome_elf.dll initialization. Emitted
+ asynchronously shortly after startup.
+ </summary>
+</histogram>
+
+<histogram name="ChromeElf.ThirdPartyStatus" enum="ThirdPartyStatus">
+ <owner>pmonette@chromium.org</owner>
+ <summary>
+ Records the different status codes that are emitted by chrome_elf.dll while
+ initializing the NtMapViewOfSection hook used to blocked third-party DLLs.
+ Multiple status codes can be emitted per initialization since some of those
+ status codes represent non-fatal failures. E.g. Failure to clear the
+ previous failure codes. This also means that duplicates are possible. This
+ is recorded shortly after Chrome launches, since chrome_elf.dll doesn't have
+ access to the //base API.
+ </summary>
+</histogram>
+
<histogram name="ChromeGeneratedCustomTab.IntentToFirstCommitNavigationTime"
units="ms">
<obsolete>
@@ -12774,6 +13841,15 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="ChromeOS.SystemTray.OpenHelpPageForManaged"
+ enum="CrosSystemTrayManagedType">
+ <owner>yamaguchi@chromium.org</owner>
+ <summary>
+ Type of the support page which user opened by clicking the indicator of
+ managed device type in the unified system tray bubble.
+ </summary>
+</histogram>
+
<histogram name="ChromeOS.SystemTray.TimeToClick" units="ms">
<owner>tetsui@chromium.org</owner>
<summary>
@@ -13451,8 +14527,10 @@ uploading your change for review.
</summary>
</histogram>
-<histogram name="Compositing.Browser.DrawResult" enum="DrawResult"
- expires_after="M72">
+<histogram name="Compositing.Browser.DrawResult" enum="DrawResult">
+ <obsolete>
+ Deprecated 10/2018. This metric didn't end up being useful.
+ </obsolete>
<owner>kylechar@chromium.org</owner>
<summary>
How often the layer compositor successfully submitted content to the display
@@ -13961,8 +15039,10 @@ uploading your change for review.
</summary>
</histogram>
-<histogram name="Compositing.Renderer.DrawResult" enum="DrawResult"
- expires_after="M72">
+<histogram name="Compositing.Renderer.DrawResult" enum="DrawResult">
+ <obsolete>
+ Deprecated 10/2018. This metric didn't end up being useful.
+ </obsolete>
<owner>kylechar@chromium.org</owner>
<summary>
How often the layer compositor successfully submitted content to the display
@@ -14256,6 +15336,9 @@ uploading your change for review.
<histogram
name="Compositing.SurfaceAggregator.LatestInFlightSurface.ManhattanDistanceToPrimary"
units="surfaces">
+ <obsolete>
+ Deprecated 10/2018. This metric didn't end up being useful.
+ </obsolete>
<owner>akaba@chromium.org</owner>
<owner>fsamuel@chromium.org</owner>
<summary>
@@ -14293,6 +15376,9 @@ uploading your change for review.
<histogram
name="Compositing.SurfaceAggregator.SurfaceDrawQuad.UsingFallbackSurface"
units="quads">
+ <obsolete>
+ Deprecated 10/2018. This metric didn't end up being useful.
+ </obsolete>
<owner>fsamuel@chromium.org</owner>
<summary>
The number of SurfaceDrawQuads where the primary SurfaceId does not have a
@@ -14303,6 +15389,9 @@ uploading your change for review.
<histogram name="Compositing.SurfaceAggregator.SurfaceDrawQuad.ValidSurface"
units="quads">
+ <obsolete>
+ Deprecated 10/2018. This metric didn't end up being useful.
+ </obsolete>
<owner>kylechar@chromium.org</owner>
<summary>
The number of SurfaceDrawQuads where the surface exists and has an active
@@ -14312,6 +15401,9 @@ uploading your change for review.
<histogram name="Compositing.SurfaceDependencyDeadline.DeadlineHit"
units="Boolean">
+ <obsolete>
+ Deprecated as of 10/2018. This metric didn't end up being useful.
+ </obsolete>
<owner>fsamuel@chromium.org</owner>
<summary>
Tracks whether an activation of a surface was due to due to a deadline or
@@ -14783,6 +15875,9 @@ uploading your change for review.
</histogram>
<histogram name="ContentSettings.NumberOfAllowCookiesExceptions">
+ <obsolete>
+ Deprecated Oct 2018 in favor of ContentSettings.Exceptions.cookies.Allow
+ </obsolete>
<owner>battre@chromium.org</owner>
<summary>
The number of user defined cookies setting exceptions for allowing cookies
@@ -14791,6 +15886,9 @@ uploading your change for review.
</histogram>
<histogram name="ContentSettings.NumberOfBlockCookiesExceptions">
+ <obsolete>
+ Deprecated Oct 2018 in favor of ContentSettings.Exceptions.cookies.Block
+ </obsolete>
<owner>battre@chromium.org</owner>
<summary>
The number of user defined cookies setting exceptions for blocking cookies
@@ -14807,6 +15905,10 @@ uploading your change for review.
</histogram>
<histogram name="ContentSettings.NumberOfSessionOnlyCookiesExceptions">
+ <obsolete>
+ Deprecated Oct 2018 in favor of
+ ContentSettings.Exceptions.cookies.SessionOnly
+ </obsolete>
<owner>battre@chromium.org</owner>
<summary>
The number of user defined cookies setting exceptions for 'clearing cookies
@@ -15140,6 +16242,15 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="ContentSuggestions.Feed.Network.Duration" units="ms"
+ expires_after="2019-10-01">
+ <owner>fgorski@chromium.org</owner>
+ <owner>skym@chromium.org</owner>
+ <summary>
+ The amount of time fetching articles takes, regardless of success.
+ </summary>
+</histogram>
+
<histogram name="ContentSuggestions.Feed.Network.RequestSizeKB.Compressed"
units="KB" expires_after="2019-10-01">
<owner>pnoland@chromium.org</owner>
@@ -16288,6 +17399,10 @@ uploading your change for review.
</histogram>
<histogram name="CrashReport.CrashBackgroundUploadDelay" units="ms">
+ <obsolete>
+ Deprecated as of 03/2018 when Chrome for iOS stopped uploading crash dumps
+ in the background.
+ </obsolete>
<owner>olivierrobin@chromium.org</owner>
<owner>pkl@chromium.org</owner>
<summary>
@@ -16297,6 +17412,10 @@ uploading your change for review.
</histogram>
<histogram name="CrashReport.PendingReportsOnBackgroundWakeUp">
+ <obsolete>
+ Deprecated as of 03/2018 when Chrome for iOS stopped uploading crash dumps
+ in the background.
+ </obsolete>
<owner>olivierrobin@chromium.org</owner>
<owner>pkl@chromium.org</owner>
<summary>
@@ -16482,6 +17601,15 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Crostini.DiskImageSize" units="GiB" expires_after="2019-11-20">
+ <owner>sidereal@google.com</owner>
+ <owner>nverne@chromium.org</owner>
+ <summary>
+ The maximum space allowed for a VM disk image, as set at install time. This
+ is recorded each time a disk image is successfully created.
+ </summary>
+</histogram>
+
<histogram name="Crostini.SetupResult" enum="CrostiniSetupResult">
<owner>benwells@chromium.org</owner>
<owner>tbuckley@chromium.org</owner>
@@ -16536,13 +17664,30 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="CryptAuth.DeviceSync.Result" enum="BooleanSuccess">
+ <owner>hansberry@chromium.org</owner>
+ <summary>Indicates success of performing a DeviceSync.</summary>
+</histogram>
+
<histogram name="CryptAuth.DeviceSyncSoftwareFeaturesResult"
enum="BooleanSuccess">
<owner>hansberry@chromium.org</owner>
<summary>
Indicates that there was no issue retrieving supported and enabled software
features, or that there were enabled features which were not in the
- supported feature set.
+ supported feature set. See the histogram
+ &quot;CryptAuth.DeviceSyncSoftwareFeaturesResult.Failures&quot; for a
+ breakdown of failures by feature type.
+ </summary>
+</histogram>
+
+<histogram name="CryptAuth.DeviceSyncSoftwareFeaturesResult.Failures"
+ enum="CryptAuthSoftwareFeature">
+ <owner>hansberry@chromium.org</owner>
+ <summary>
+ Breaks down by feature type
+ &quot;CryptAuth.DeviceSyncSoftwareFeaturesResult&quot;'s count of enabled
+ features which were not in the supported feature set.
</summary>
</histogram>
@@ -16997,6 +18142,15 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="CustomTabs.DynamicModule.EntryPointInitTime" units="ms"
+ expires_after="2019-04-22">
+ <owner>amalova@chromium.org</owner>
+ <summary>
+ Time to initialize the entry point class for a custom tabs dynamic module.
+ Android only.
+ </summary>
+</histogram>
+
<histogram name="CustomTabs.DynamicModule.EntryPointLoadClassTime" units="ms">
<owner>mvanouwerkerk@chromium.org</owner>
<summary>
@@ -17133,7 +18287,7 @@ uploading your change for review.
</histogram>
<histogram base="true" name="CustomTabs.ResourcePrefetch.Duration" units="ms"
- expires_after="M72">
+ expires_after="M73">
<owner>alexilin@chromium.org</owner>
<summary>
Time between the start of a detached resource request for resource prefetch
@@ -17142,7 +18296,7 @@ uploading your change for review.
</histogram>
<histogram name="CustomTabs.ResourcePrefetch.FinalStatus" enum="NetErrorCodes"
- expires_after="M72">
+ expires_after="M73">
<owner>alexilin@chromium.org</owner>
<summary>
Reports the final status of the detached request for resource prefetch,
@@ -18700,12 +19854,18 @@ uploading your change for review.
<histogram name="DataUse.BytesReceived" units="bytes">
<owner>tbansal@chromium.org</owner>
- <summary>Count of total bytes received by the Chrome on the network.</summary>
+ <summary>
+ Count of total bytes received by the Chrome on the network. With network
+ servicification this is recorded when requests complete.
+ </summary>
</histogram>
<histogram name="DataUse.BytesSent" units="bytes">
<owner>tbansal@chromium.org</owner>
- <summary>Count of total bytes sent by the Chrome on the network.</summary>
+ <summary>
+ Count of total bytes sent by the Chrome on the network. With network
+ servicification this is recorded when requests complete.
+ </summary>
</histogram>
<histogram name="DataUse.ContentType.Services" enum="DataUseContentType">
@@ -19181,6 +20341,19 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="DemoMode.IdleLogoutWarningEvent"
+ enum="DemoModeIdleLogoutWarningEvent" expires_after="M73">
+ <owner>michaelpg@chromium.org</owner>
+ <owner>ovanieva@chromium.org</owner>
+ <owner>wzang@chromium.org</owner>
+ <summary>
+ Tracks whether the idle logout warning was canceled or proceeded to logout.
+ Note: the count of &quot;shown&quot; includes both cases, so the count of
+ &quot;shown and proceeded&quot; is equal to &quot;shown&quot; minus
+ &quot;canceled&quot;.
+ </summary>
+</histogram>
+
<histogram name="DemoMode.ResourcesRemoval.Reason"
enum="DemoModeResourcesRemovalReason" expires_after="M73">
<owner>michaelpg@chromium.org</owner>
@@ -19224,6 +20397,18 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="DemoMode.UniqueAppsLaunched" expires_after="2019-11-13">
+ <owner>danan@chromium.org</owner>
+ <owner>michaelpg@chromium.org</owner>
+ <summary>
+ Records how many unique apps have been launched by a user using the device
+ during Demo mode. The sample is recorded when the DemoMode session is idle
+ for a defined period, implying that a user has finished using the device in
+ Demo mode, or if and when there have been any app launches between the time
+ the last recording occurred and the time the DemoMode session closes.
+ </summary>
+</histogram>
+
<histogram name="DeprecatedInvalidatorRegistrar.CrashStatus"
enum="HandlerOwnerType" expires_after="M75">
<owner>melandory@chromium.org</owner>
@@ -19238,6 +20423,9 @@ uploading your change for review.
<histogram name="DesktopIOSPromotion.DismissalReason"
enum="DesktopIOSPromotionDismissalReason">
+ <obsolete>
+ Deprecated 11/2018 in issue 894963.
+ </obsolete>
<owner>mrefaat@chromium.org</owner>
<summary>
The dimissal reason of the desktop to iOS promotion entry point.
@@ -19248,6 +20436,9 @@ uploading your change for review.
<histogram name="DesktopIOSPromotion.ImpressionFromEntryPoint"
enum="DesktopIOSPromotionEntryPoint">
+ <obsolete>
+ Deprecated 11/2018 in issue 894963.
+ </obsolete>
<owner>mrefaat@chromium.org</owner>
<summary>
The type of the desktop to iOS promotion that was shown to the user. This
@@ -19257,6 +20448,9 @@ uploading your change for review.
<histogram name="DesktopIOSPromotion.IOSSigninReason"
enum="DesktopIOSPromotionEntryPoint">
+ <obsolete>
+ Deprecated 11/2018 in issue 894963.
+ </obsolete>
<owner>mrefaat@chromium.org</owner>
<summary>
[IOS] For users who sign-in on Chrome for iOS, log the type of the desktop
@@ -19271,6 +20465,9 @@ uploading your change for review.
<histogram name="DesktopIOSPromotion.OAuthTokenCompletion"
enum="BooleanSuccess">
+ <obsolete>
+ Deprecated 11/2018 in issue 894963.
+ </obsolete>
<owner>justincohen@chromium.org</owner>
<summary>
Whether getting the OAuth token was successful for a desktop to iOS
@@ -19280,6 +20477,9 @@ uploading your change for review.
<histogram name="DesktopIOSPromotion.OAuthTokenResponseCode"
enum="CombinedHttpResponseAndNetErrorCode">
+ <obsolete>
+ Deprecated 11/2018 in issue 894963.
+ </obsolete>
<owner>justincohen@chromium.org</owner>
<summary>
HTTP Response code returned by the server when trying to fetch the OAuth
@@ -19289,6 +20489,9 @@ uploading your change for review.
<histogram name="DesktopIOSPromotion.QueryPhoneNumberSucceeded"
enum="BooleanSuccess">
+ <obsolete>
+ Deprecated 11/2018 in issue 894963.
+ </obsolete>
<owner>mrefaat@chromium.org</owner>
<summary>
Whether the SMS service api called from the desktop to iOS promotion
@@ -19298,6 +20501,9 @@ uploading your change for review.
</histogram>
<histogram name="DesktopIOSPromotion.SendSMSSucceeded" enum="BooleanSuccess">
+ <obsolete>
+ Deprecated 11/2018 in issue 894963.
+ </obsolete>
<owner>mrefaat@chromium.org</owner>
<summary>
Whether the SMS service api initiated SMS sending successfully from the
@@ -19306,6 +20512,9 @@ uploading your change for review.
</histogram>
<histogram name="DesktopIOSPromotion.SMSToSigninTime" units="hours">
+ <obsolete>
+ Deprecated 11/2018 in issue 894963.
+ </obsolete>
<owner>mrefaat@chromium.org</owner>
<summary>
[IOS] The difference between the client time of triggering the SMS action on
@@ -19320,6 +20529,9 @@ uploading your change for review.
</histogram>
<histogram base="true" name="DesktopIOSPromotion.VariationSigninReason">
+ <obsolete>
+ Deprecated 11/2018 in issue 894963.
+ </obsolete>
<owner>mrefaat@chromium.org</owner>
<summary>
[IOS] For users who sign-in on Chrome for iOS, log which variation of the
@@ -20320,8 +21532,10 @@ uploading your change for review.
</summary>
</histogram>
-<histogram base="true" name="DisplayScheduler.ShouldNotDraw" enum="Boolean"
- expires_after="M72">
+<histogram base="true" name="DisplayScheduler.ShouldNotDraw" enum="Boolean">
+ <obsolete>
+ Deprecated after M72 since no longer needed.
+ </obsolete>
<!-- Name completed by histogram_suffixes
name="DisplaySchedulerNotDrawReason" -->
@@ -20343,7 +21557,11 @@ uploading your change for review.
</histogram>
<histogram name="DNS.AttemptDiscarded">
- <owner>mgersh@chromium.org</owner>
+ <obsolete>
+ Deprecated 11/2018.
+ </obsolete>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
The attempt which completed after the job was already cancelled OR the
attempt that has finished after host resolution was already completed by an
@@ -20352,7 +21570,11 @@ uploading your change for review.
</histogram>
<histogram name="DNS.AttemptFailDuration" units="ms">
- <owner>mgersh@chromium.org</owner>
+ <obsolete>
+ Deprecated 11/2018.
+ </obsolete>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
Duration of time taken in OS resolutions for actual navigations. These
attempts which completed after the job was already canceled OR after the job
@@ -20362,12 +21584,20 @@ uploading your change for review.
</histogram>
<histogram name="DNS.AttemptFailure">
- <owner>mgersh@chromium.org</owner>
+ <obsolete>
+ Deprecated 11/2018.
+ </obsolete>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>The attempt that has not resolved the host successfully.</summary>
</histogram>
<histogram name="DNS.AttemptFirstFailure">
- <owner>mgersh@chromium.org</owner>
+ <obsolete>
+ Deprecated 11/2018.
+ </obsolete>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
The attempt that resolved the host first and the resolution was not
successful.
@@ -20375,19 +21605,31 @@ uploading your change for review.
</histogram>
<histogram name="DNS.AttemptFirstSuccess">
- <owner>mgersh@chromium.org</owner>
+ <obsolete>
+ Deprecated 11/2018.
+ </obsolete>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
The attempt that resolved the host first and the resolution was successful.
</summary>
</histogram>
<histogram name="DNS.AttemptSuccess">
- <owner>mgersh@chromium.org</owner>
+ <obsolete>
+ Deprecated 11/2018.
+ </obsolete>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>The attempt that has resolved the host successfully.</summary>
</histogram>
<histogram name="DNS.AttemptSuccessDuration" units="ms">
- <owner>mgersh@chromium.org</owner>
+ <obsolete>
+ Deprecated 11/2018.
+ </obsolete>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
Duration of time taken in OS resolutions that succeeded and were requested
for actual navigations. These attempts which completed after the job was
@@ -20452,12 +21694,20 @@ uploading your change for review.
</histogram>
<histogram name="DNS.HostCache.Erase" enum="DNS.HostCache.EraseReason">
- <owner>mgersh@chromium.org</owner>
+ <obsolete>
+ Deprecated as of 11/2018.
+ </obsolete>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>The reason for erasing a DNS entry from the host cache.</summary>
</histogram>
<histogram name="DNS.HostCache.EraseStale.ExpiredBy" units="ms">
- <owner>mgersh@chromium.org</owner>
+ <obsolete>
+ Deprecated as of 11/2018.
+ </obsolete>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
When erasing a stale (expired or old-network) DNS entry from the host cache,
how long past the expiration time it is.
@@ -20465,7 +21715,11 @@ uploading your change for review.
</histogram>
<histogram name="DNS.HostCache.EraseStale.NetworkChanges" units="changes">
- <owner>mgersh@chromium.org</owner>
+ <obsolete>
+ Deprecated as of 11/2018.
+ </obsolete>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
When erasing a stale (expired or old-network) DNS entry from the host cache
how many network changes happened between setting and erasing it.
@@ -20473,7 +21727,11 @@ uploading your change for review.
</histogram>
<histogram name="DNS.HostCache.EraseStale.StaleHits" units="hits">
- <owner>mgersh@chromium.org</owner>
+ <obsolete>
+ Deprecated as of 11/2018.
+ </obsolete>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
When erasing a stale (expired or old-network) DNS entry from the host cache
how many hits it received while stale.
@@ -20481,7 +21739,11 @@ uploading your change for review.
</histogram>
<histogram name="DNS.HostCache.EraseValid.ValidFor" units="ms">
- <owner>mgersh@chromium.org</owner>
+ <obsolete>
+ Deprecated as of 11/2018.
+ </obsolete>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
When erasing a valid DNS entry from the host cache, for how much longer it
would have remained valid.
@@ -20489,12 +21751,20 @@ uploading your change for review.
</histogram>
<histogram name="DNS.HostCache.Lookup" enum="DNS.HostCache.LookupOutcome">
- <owner>mgersh@chromium.org</owner>
+ <obsolete>
+ Deprecated as of 11/2018.
+ </obsolete>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>The outcome of looking up a DNS entry in the host cache.</summary>
</histogram>
<histogram name="DNS.HostCache.LookupStale.ExpiredBy" units="ms">
- <owner>mgersh@chromium.org</owner>
+ <obsolete>
+ Deprecated as of 11/2018.
+ </obsolete>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
When looking up a stale DNS entry in the host cache, how long past the
expiration time it is.
@@ -20502,7 +21772,11 @@ uploading your change for review.
</histogram>
<histogram name="DNS.HostCache.LookupStale.NetworkChanges" units="changes">
- <owner>mgersh@chromium.org</owner>
+ <obsolete>
+ Deprecated as of 11/2018.
+ </obsolete>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
When looking up a stale DNS entry in the host cache, how many network
changes happened between setting it and looking it up.
@@ -20510,27 +21784,37 @@ uploading your change for review.
</histogram>
<histogram name="DNS.HostCache.RestoreSize" units="entries">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
Number of HostCache entries persisted to disk, measured at restore time.
</summary>
</histogram>
<histogram name="DNS.HostCache.RestoreSuccess" enum="BooleanSuccess">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
Whether the persisted HostCache entries were restored successfully.
</summary>
</histogram>
<histogram name="DNS.HostCache.Set" enum="DNS.HostCache.SetOutcome">
- <owner>mgersh@chromium.org</owner>
+ <obsolete>
+ Deprecated as of 11/2018.
+ </obsolete>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>The outcome of setting a DNS entry in the host cache.</summary>
</histogram>
<histogram name="DNS.HostCache.UpdateStale.AddressListDelta"
enum="DNS.AddressListDeltaType">
- <owner>mgersh@chromium.org</owner>
+ <obsolete>
+ Deprecated as of 11/2018.
+ </obsolete>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
When updating a stale (expired or old-network) DNS entry in the host cache,
and both results are successful, how the address list differs between the
@@ -20539,7 +21823,11 @@ uploading your change for review.
</histogram>
<histogram name="DNS.HostCache.UpdateStale.ExpiredBy" units="ms">
- <owner>mgersh@chromium.org</owner>
+ <obsolete>
+ Deprecated as of 11/2018.
+ </obsolete>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
When updating a stale (expired or old-network) DNS entry in the host cache,
how long past the expiration time the old entry was.
@@ -20547,7 +21835,11 @@ uploading your change for review.
</histogram>
<histogram name="DNS.HostCache.UpdateStale.NetworkChanges" units="changes">
- <owner>mgersh@chromium.org</owner>
+ <obsolete>
+ Deprecated as of 11/2018.
+ </obsolete>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
When updating a stale (expired or old-nework) DNS entry in the host cache,
how many network changes happened between setting the old entry and setting
@@ -20556,7 +21848,11 @@ uploading your change for review.
</histogram>
<histogram name="DNS.HostCache.UpdateStale.StaleHits" units="hits">
- <owner>mgersh@chromium.org</owner>
+ <obsolete>
+ Deprecated as of 11/2018.
+ </obsolete>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
The number of hits received to an updated stale DNS entry in the host cache
while it was stale.
@@ -21044,7 +22340,8 @@ uploading your change for review.
</histogram>
<histogram name="DNS.StaleHostResolver.NetworkEarly" units="ms">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
When a DNS request made through StaleHostResolver returns, a stale cached
result was available, and the network responded before or exactly at the
@@ -21053,7 +22350,8 @@ uploading your change for review.
</histogram>
<histogram name="DNS.StaleHostResolver.NetworkLate" units="ms">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
When a DNS request made through StaleHostResolver returns, a stale cached
result was available, and the network responded after the stale delay, how
@@ -21063,7 +22361,8 @@ uploading your change for review.
<histogram name="DNS.StaleHostResolver.RequestOutcome"
enum="DNS.StaleHostResolverRequestOutcome">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
When a DNS request made through StaleHostResolver returns or is canceled,
the outcome of the request.
@@ -21071,7 +22370,8 @@ uploading your change for review.
</histogram>
<histogram name="DNS.StaleHostResolver.RestoreSizeOnCacheMiss">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
When a DNS request made through StaleHostResolver has no stale cached result
available, the number of host cache entries that were restored from prefs.
@@ -21079,7 +22379,8 @@ uploading your change for review.
</histogram>
<histogram name="DNS.StaleHostResolver.SizeOnCacheMiss">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
When a DNS request made through StaleHostResolver has no stale cached result
available, the number of entries in the host cache.
@@ -21088,7 +22389,8 @@ uploading your change for review.
<histogram name="DNS.StaleHostResolver.StaleAddressListDelta"
enum="DNS.AddressListDeltaType">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
When a DNS request made through StaleHostResolver had a stale cached result
and both the stale and network results were successful, the difference
@@ -21163,7 +22465,8 @@ uploading your change for review.
</histogram>
<histogram name="DnsProbe.ErrorPageUpdateStatus" enum="DnsProbe.ProbeStatus">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>Status of DNS probe updates sent to a DNS error page.</summary>
</histogram>
@@ -21294,12 +22597,14 @@ uploading your change for review.
</histogram>
<histogram name="DnsProbe.ProbeDuration" units="ms">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>Time between starting and finishing DNS probe.</summary>
</histogram>
<histogram name="DnsProbe.ProbeResult" enum="DnsProbe.ProbeStatus">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>Result of DNS probes sent by the probe service.</summary>
</histogram>
@@ -22594,6 +23899,18 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Download.FrameGesture" enum="DownloadFrameGesture">
+ <obsolete>
+ Deprecated 11/2018.
+ </obsolete>
+ <owner>yaoxia@chromium.org</owner>
+ <summary>
+ The type of frame in which a download occurs and whether the download
+ involves a transient user gesture. It is only recorded for downloads
+ originated from navigations or from HTML anchor download attributes.
+ </summary>
+</histogram>
+
<histogram name="Download.HistorySize">
<owner>dtrainor@chromium.org</owner>
<summary>
@@ -22708,15 +24025,26 @@ uploading your change for review.
</summary>
</histogram>
-<histogram name="Download.IOSDownloadedFileAction" enum="DownloadedFileAction">
- <owner>bdibello@chromium.org</owner>
+<histogram name="Download.IOSDownloadARModelState.USDZ"
+ enum="DownloadARModelState">
+ <owner>mahmadi@chromium.org</owner>
+ <summary>
+ Logged at different stages of downloading a USDZ MIME type AR model on iOS.
+ </summary>
+</histogram>
+
+<histogram name="Download.IOSDownloadedFileAction" enum="DownloadedFileAction"
+ expires_after="2020-01-15">
+ <owner>eugenebut@chromium.org</owner>
<summary>
The action that a user takes on a file after it has been successfully
downloaded on iOS.
</summary>
</histogram>
-<histogram name="Download.IOSDownloadedFileNetError" enum="NetErrorCodes">
+<histogram name="Download.IOSDownloadedFileNetError" enum="NetErrorCodes"
+ expires_after="2020-01-15">
+ <owner>eugenebut@chromium.org</owner>
<owner>mrefaat@chromium.org</owner>
<summary>
Positive net error codes that happens in the case of download content fetch
@@ -22724,17 +24052,17 @@ uploading your change for review.
</summary>
</histogram>
-<histogram name="Download.IOSDownloadedFileStatusCode">
- <owner>stkhapugin@chromium.org</owner>
+<histogram name="Download.IOSDownloadedFileStatusCode"
+ expires_after="2020-01-15">
<owner>eugenebut@chromium.org</owner>
- <owner>stuartmorgan@chromium.org</owner>
+ <owner>stkhapugin@chromium.org</owner>
<summary>
HTTP status code returned when file download completes on iOS.
</summary>
</histogram>
<histogram name="Download.IOSDownloadFileInBackground"
- enum="DownloadFileInBackground">
+ enum="DownloadFileInBackground" expires_after="2020-01-15">
<owner>eugenebut@chromium.org</owner>
<summary>
Logged when the download is completed (successfully or not) or in-progress
@@ -22744,13 +24072,16 @@ uploading your change for review.
</summary>
</histogram>
-<histogram name="Download.IOSDownloadFileResult" enum="DownloadFileResult">
- <owner>bdibello@chromium.org</owner>
+<histogram name="Download.IOSDownloadFileResult" enum="DownloadFileResult"
+ expires_after="2020-01-15">
+ <owner>eugenebut@chromium.org</owner>
<summary>Result when a user attempts to download a file on iOS.</summary>
</histogram>
-<histogram name="Download.IOSDownloadInstallDrivePromoShown" enum="Boolean">
+<histogram name="Download.IOSDownloadInstallDrivePromoShown" enum="Boolean"
+ expires_after="2020-01-15">
<owner>eugenebut@chromium.org</owner>
+ <owner>pkl@chromium.org</owner>
<summary>
Logged when the download was successfully completed. Bool value indicates
whether or not Install Google Drive promo was shown to the user.
@@ -22766,8 +24097,8 @@ uploading your change for review.
</histogram>
<histogram name="Download.IOSDownloadPassKitResult"
- enum="DownloadPassKitResult">
- <owner>gchatz@chromium.org</owner>
+ enum="DownloadPassKitResult" expires_after="2020-01-15">
+ <owner>eugenebut@chromium.org</owner>
<summary>
Result when a user attempts to download a PassKit file on iOS.
</summary>
@@ -22789,6 +24120,23 @@ uploading your change for review.
<summary>Result of an attempt to present Add Passes dialog on iOS.</summary>
</histogram>
+<histogram name="Download.IOSPresentQLPreviewControllerResult"
+ enum="PresentQLPreviewController">
+ <owner>mahmadi@chromium.org</owner>
+ <summary>
+ Result of an attempt to present a USDZ MIME type AR model on iOS.
+ </summary>
+</histogram>
+
+<histogram name="Download.MainFrame.HasGesture" enum="Boolean">
+ <owner>yaoxia@chromium.org</owner>
+ <summary>
+ Whether the main frame download involves a transient user gesture. It is
+ only recorded for downloads originated from navigations or from HTML anchor
+ download attributes.
+ </summary>
+</histogram>
+
<histogram name="Download.MaliciousDownloadClassified"
enum="DownloadItem.DangerType">
<owner>dtrainor@chromium.org</owner>
@@ -22852,6 +24200,14 @@ uploading your change for review.
<summary>Records events for local media metadata parsing.</summary>
</histogram>
+<histogram name="Download.MediaParser.CompletionTime" units="ms"
+ expires_after="2019-07-30">
+ <owner>xingliu@chromium.org</owner>
+ <summary>
+ Records the duration to successfully complete the media file parsing.
+ </summary>
+</histogram>
+
<histogram name="Download.MediaParser.Event" enum="MediaParserEvent"
expires_after="2019-07-30">
<owner>dtrainor@chromium.org</owner>
@@ -23472,6 +24828,18 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Download.Subframe.SandboxOriginAdGesture"
+ enum="SubframeDownloadSandboxOriginAdGesture">
+ <owner>yaoxia@chromium.org</owner>
+ <summary>
+ For a download that occurs in subframe, record whether the frame is
+ sandboxed, whether the origin is same to the top frame, whether it's an ad
+ subframe, and whether the download involves a transient user gesture. It is
+ only recorded for downloads originated from navigations or from HTML anchor
+ download attributes.
+ </summary>
+</histogram>
+
<histogram name="Download.TargetConnectionSecurity"
enum="DownloadConnectionSecurity">
<owner>jialiul@chromium.org</owner>
@@ -23608,8 +24976,8 @@ uploading your change for review.
</histogram>
<histogram name="Drive.DeltaFeedLoadTime" units="ms" expires_after="2019-01-01">
+ <owner>slangley@chromium.org</owner>
<owner>weifangsun@chromium.org</owner>
- <owner>sashab@chromium.org</owner>
<summary>
Time spent to load the delta change list information from the server.
</summary>
@@ -23617,8 +24985,8 @@ uploading your change for review.
<histogram name="Drive.DirectoryFeedLoadTime" units="ms"
expires_after="2019-01-01">
+ <owner>slangley@chromium.org</owner>
<owner>weifangsun@chromium.org</owner>
- <owner>sashab@chromium.org</owner>
<summary>
Time spent to load the list of files in a single directory from Google Drive
server.
@@ -23683,8 +25051,8 @@ uploading your change for review.
</histogram>
<histogram name="Drive.FullFeedLoadTime" units="ms" expires_after="2019-01-01">
+ <owner>slangley@chromium.org</owner>
<owner>weifangsun@chromium.org</owner>
- <owner>sashab@chromium.org</owner>
<summary>
Time spent to load the entire file system information from the server
</summary>
@@ -23736,6 +25104,15 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Drive.MigrateDirtyFilesCount" expires_after="2019-10-01">
+ <owner>dats@chromium.org</owner>
+ <owner>sammc@chromium.org</owner>
+ <summary>
+ Records the number of dirty (unsynced) files migrated from legacy Drive to
+ DriveFs.
+ </summary>
+</histogram>
+
<histogram name="Drive.NumberOfCacheFilesRecoveredAfterDBCorruption">
<owner>joshwoodward@google.com</owner>
<summary>
@@ -24044,6 +25421,9 @@ uploading your change for review.
</histogram>
<histogram name="EasyUnlock.AuthProximity.TimeSinceLastZeroRssi" units="ms">
+ <obsolete>
+ Deprecated as of 11/2018.
+ </obsolete>
<owner>tengs@chromium.org</owner>
<owner>xiaowenx@chromium.org</owner>
<summary>
@@ -24061,6 +25441,9 @@ uploading your change for review.
</histogram>
<histogram name="EasyUnlock.AuthProximity.TransmitPowerDelta" units="dBm">
+ <obsolete>
+ Deprecated as of 11/2018.
+ </obsolete>
<owner>tengs@chromium.org</owner>
<owner>xiaowenx@chromium.org</owner>
<summary>
@@ -24744,6 +26127,24 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Enterprise.EnrollmentAttestationBased"
+ enum="EnterpriseEnrollmentType">
+ <owner>drcrash@chromium.org</owner>
+ <summary>
+ Events related to attestation-based enrollment (Zero-Touch) of Chrome OS
+ devices.
+ </summary>
+</histogram>
+
+<histogram name="Enterprise.EnrollmentConfiguration"
+ enum="EnterpriseEnrollmentType">
+ <owner>antrim@chromium.org</owner>
+ <summary>
+ Events related to Chrome OS enterprise enrollment automated by OOBE
+ configuration.
+ </summary>
+</histogram>
+
<histogram name="Enterprise.EnrollmentForced" enum="EnterpriseEnrollmentType">
<owner>tnagel@chromium.org</owner>
<summary>
@@ -24751,6 +26152,54 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Enterprise.EnrollmentForcedAttestationBased"
+ enum="EnterpriseEnrollmentType">
+ <owner>drcrash@chromium.org</owner>
+ <summary>
+ Events related to attestation-based re-enrollment (Auto RE) of Chrome OS
+ devices.
+ </summary>
+</histogram>
+
+<histogram name="Enterprise.EnrollmentForcedInitial"
+ enum="EnterpriseEnrollmentType" expires_after="2020-05-02">
+ <owner>drcrash@chromium.org</owner>
+ <owner>pmarko@chromium.org</owner>
+ <summary>
+ Events related to forced initial enrollment of Chrome OS devices during the
+ first startup of a device.
+ </summary>
+</histogram>
+
+<histogram name="Enterprise.EnrollmentForcedInitialAttestationBased"
+ enum="EnterpriseEnrollmentType" expires_after="2020-05-02">
+ <owner>drcrash@chromium.org</owner>
+ <owner>pmarko@chromium.org</owner>
+ <summary>
+ Events related to attestation-based initial enrollment (Zero-Touch) of
+ Chrome OS devices during the first startup of a device.
+ </summary>
+</histogram>
+
+<histogram name="Enterprise.EnrollmentForcedInitialManualFallback"
+ enum="EnterpriseEnrollmentType" expires_after="2020-05-02">
+ <owner>drcrash@chromium.org</owner>
+ <owner>pmarko@chromium.org</owner>
+ <summary>
+ Events related to manual fallback from attestation-based initial enrollment
+ (Zero-Touch) of Chrome OS devices during the first startup of a device.
+ </summary>
+</histogram>
+
+<histogram name="Enterprise.EnrollmentForcedManualFallback"
+ enum="EnterpriseEnrollmentType">
+ <owner>drcrash@chromium.org</owner>
+ <summary>
+ Events related to manual fallback from attestation-based re-enrollment (Auto
+ RE) of Chrome OS devices.
+ </summary>
+</histogram>
+
<histogram name="Enterprise.EnrollmentRecovery" enum="EnterpriseEnrollmentType">
<owner>tnagel@chromium.org</owner>
<summary>
@@ -25029,6 +26478,11 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Enterprise.ResourceCacheTiming" units="ms">
+ <owner>nikitapodguzov@chromium.org</owner>
+ <summary>The time to perform operations on the ResourceCache object.</summary>
+</histogram>
+
<histogram base="true" name="Enterprise.RetrievePolicyResponse"
enum="EnterpriseRetrievePolicyResponseType">
<!-- Name completed by histogram_suffixes name="EnterpriseRetrievePolicyResponse" -->
@@ -25737,6 +27191,87 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Event.InputEventPrediction.Accuracy.Mouse" units="pixels">
+<!-- Name completed by histogram_suffixes
+ name="InputEventPredictionAccuracy" -->
+
+ <owner>eirage@chromium.org</owner>
+ <summary>
+ Records the euclidean distance from a mouse event's position to the
+ predicted position at the event time when prediction is available.
+ Prediction is available after the predictor selected by feature flag gets a
+ few continuous mouse events.
+
+ Team: input-dev@chromium.org.
+ </summary>
+</histogram>
+
+<histogram name="Event.InputEventPrediction.Accuracy.Scroll" units="pixels">
+<!-- Name completed by histogram_suffixes
+ name="InputEventPredictionAccuracy" -->
+
+ <owner>eirage@chromium.org</owner>
+ <summary>
+ Records the euclidean distance from a ScrollUpdate event's absolute scroll
+ position (count by accumulated delta) to the predicted scrolling position at
+ the event time when prediction is available. Prediction is available after
+ the predictor selected by feature flag gets a few continuous
+ GestureScrollUpdate events.
+
+ Team: input-dev@chromium.org.
+ </summary>
+</histogram>
+
+<histogram name="Event.InputEventPrediction.Accuracy.Scroll.OverPredict"
+ units="pixels" expires_after="M80">
+<!-- Name completed by histogram_suffixes
+ name="InputEventPredictionAccuracy" -->
+
+ <owner>eirage@chromium.org</owner>
+ <summary>
+ Records y direction distance from a ScrollUpdate event's absolute scroll
+ position (count by accumulated delta) to the predicted scrolling position at
+ the event time when prediction is available and also the predicted result is
+ 'OverPredict'. Over predict means the absolute value of predicted scroll
+ delta is larger than the real delta in the same time period.
+
+ Team: input-dev@chromium.org.
+ </summary>
+</histogram>
+
+<histogram name="Event.InputEventPrediction.Accuracy.Scroll.UnderPredict"
+ units="pixels" expires_after="M80">
+<!-- Name completed by histogram_suffixes
+ name="InputEventPredictionAccuracy" -->
+
+ <owner>eirage@chromium.org</owner>
+ <summary>
+ Records y direction distance from a ScrollUpdate event's absolute scroll
+ position (count by accumulated delta) to the predicted scrolling position at
+ the event time when prediction is available and also the predicted result is
+ 'UnderPredict'. Under predict means the absolute value of predicted scroll
+ delta is smaller than the real delta in the same time period.
+ GestureScrollUpdate events.
+
+ Team: input-dev@chromium.org.
+ </summary>
+</histogram>
+
+<histogram name="Event.InputEventPrediction.Accuracy.Touch" units="pixels">
+<!-- Name completed by histogram_suffixes
+ name="InputEventPredictionAccuracy" -->
+
+ <owner>eirage@chromium.org</owner>
+ <summary>
+ Records the euclidean distance from a touch event's position to the
+ predicted position at the event time when prediction is available.
+ Prediction is available after the predictor selected by feature flag gets a
+ few continuous touches with same ids.
+
+ Team: input-dev@chromium.org.
+ </summary>
+</histogram>
+
<histogram name="Event.Latency.BlockingTime.KeyPressDefaultAllowed" units="ms">
<owner>tdresser@chromium.org</owner>
<owner>input-dev@chromium.org</owner>
@@ -26700,6 +28235,19 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Event.Latency.ScrollBegin.Touch.AverageLag" units="pixels"
+ expires_after="M79">
+ <owner>eirage@chromium.org</owner>
+ <owner>nzolghadr@chromium.org</owner>
+ <summary>
+ Measures an average distance that represents how the page sticks to the
+ finger when user scrolls. Only reports touch scrolling. See
+ https://docs.google.com/document/d/154jddNiKtxELBvrjLz9v6A7sA1J3iwQQzySHgtY12Oo/
+
+ Team: input-dev@chromium.org.
+ </summary>
+</histogram>
+
<histogram
name="Event.Latency.ScrollBegin.Touch.BrowserNotifiedToBeforeGpuSwap2"
units="microseconds">
@@ -27179,6 +28727,19 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Event.Latency.ScrollUpdate.Touch.AverageLag" units="pixels"
+ expires_after="M79">
+ <owner>eirage@chromium.org</owner>
+ <owner>nzolghadr@chromium.org</owner>
+ <summary>
+ Measures an average distance that represents how the page sticks to the
+ finger when user scrolls. Only reports touch scrolling. See
+ https://docs.google.com/document/d/154jddNiKtxELBvrjLz9v6A7sA1J3iwQQzySHgtY12Oo/
+
+ Team: input-dev@chromium.org.
+ </summary>
+</histogram>
+
<histogram
name="Event.Latency.ScrollUpdate.Touch.BrowserNotifiedToBeforeGpuSwap2"
units="microseconds">
@@ -28251,6 +29812,16 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Event.VizHitTest.AsyncHitTestReasons"
+ enum="AsyncHitTestReasons">
+ <owner>sunxd@chromium.org</owner>
+ <owner>event-targeting@chromium.org</owner>
+ <summary>
+ Tracks the reasons why sychronous hit testing could not be done for each hit
+ test requests processd by HitTestQuery.
+ </summary>
+</histogram>
+
<histogram name="Event.VizHitTest.HitTestRegions" units="regions">
<owner>riajiang@chromium.org</owner>
<owner>event-targeting@chromium.org</owner>
@@ -28301,7 +29872,8 @@ uploading your change for review.
</summary>
</histogram>
-<histogram name="Event.VizHitTestSurfaceLayer.ResultsMatch" enum="Boolean">
+<histogram name="Event.VizHitTestSurfaceLayer.ResultsMatch"
+ enum="VizHitTestResultsMatchEnums">
<owner>sunxd@chormium.org</owner>
<owner>event-targeting@chromium.org</owner>
<summary>
@@ -29263,6 +30835,9 @@ uploading your change for review.
<histogram name="Extensions.BackgroundContentsServiceStartupTime" units="ms"
expires_after="2018-08-30">
+ <obsolete>
+ Expired
+ </obsolete>
<owner>rdevlin.cronin@chromium.org</owner>
<summary>
Time taken to load BackgroundContents for apps at startup when the extension
@@ -29405,7 +30980,10 @@ uploading your change for review.
</histogram>
<histogram name="Extensions.BookmarkApp.Icon.HttpStatusCodeClassOnCreate"
- enum="HttpStatusCodeClass">
+ enum="HttpStatusCodeClass" expires_after="2020-01-01">
+ <obsolete>
+ Deprecated 11/2018 in favor of WebApp.Icon.HttpStatusCodeClassOnCreate.
+ </obsolete>
<owner>alancutter@chromium.org</owner>
<owner>mgiuca@chromium.org</owner>
<summary>
@@ -29655,7 +31233,11 @@ uploading your change for review.
</summary>
</histogram>
-<histogram name="Extensions.CorruptPolicyExtensionDetected" enum="BooleanHit">
+<histogram name="Extensions.CorruptPolicyExtensionDetected" enum="BooleanHit"
+ expires_after="2019-05-31">
+ <obsolete>
+ Deprecated 11/2018. Renamed to Extensions.CorruptPolicyExtensionDetected2.
+ </obsolete>
<owner>asargent@chromium.org</owner>
<summary>
Fires when we detect corruption in an enterprise policy forced install
@@ -29664,7 +31246,19 @@ uploading your change for review.
</summary>
</histogram>
-<histogram name="Extensions.CorruptPolicyExtensionResolved" units="ms">
+<histogram name="Extensions.CorruptPolicyExtensionDetected2" enum="BooleanHit"
+ expires_after="2019-05-31">
+ <owner>extensions-core@chromium.org</owner>
+ <owner>poromov@chromium.org</owner>
+ <summary>
+ Fires when we detect corruption in an enterprise policy forced install
+ extension and begin the process of reinstalling it. Compare to
+ CorruptPolicyExtensionResolved to judge success rate.
+ </summary>
+</histogram>
+
+<histogram name="Extensions.CorruptPolicyExtensionResolved" units="ms"
+ expires_after="2019-05-31">
<owner>asargent@chromium.org</owner>
<summary>
Fires when we've successfully resinstalled a corrupt enterprise policy
@@ -29936,6 +31530,35 @@ uploading your change for review.
<summary>Time spent until rules storage delegate gets ready.</summary>
</histogram>
+<histogram name="Extensions.DeclarativeSetIconWasVisible" enum="BooleanVisible"
+ expires_after="2019-02-01">
+ <owner>dbertoni@chromium.org</owner>
+ <owner>extensions-core@chromium.org</owner>
+ <summary>
+ Reports whether an icon specified in the declarativeContent.SetIcon API is
+ considered visible by our icon analysis code. This stat is emitted when we
+ create the underlying object that sets the icon when the declarative rule is
+ applied.
+ </summary>
+</histogram>
+
+<histogram name="Extensions.DeclarativeSetIconWasVisibleRendered"
+ enum="BooleanVisible" expires_after="2019-09-07">
+ <owner>dbertoni@chromium.org</owner>
+ <owner>extensions-core@chromium.org</owner>
+ <summary>
+ Reports whether an icon specified in the declarativeContent.SetIcon API is
+ considered visible by our icon analysis code. This stat is emitted when we
+ create the underlying object that sets the icon when the declarative rule is
+ applied.
+
+ This replaces the previous stat, DeclarativeSetIconWasVisibleRendered, due
+ to a change to our analysis algorithm. The new algorithm renders the icon
+ against the toolbar background color and determines how visible the
+ resulting pixels are.
+ </summary>
+</histogram>
+
<histogram
name="Extensions.DeclarativeWebRequest.WebViewRequestDeclarativeRules"
enum="BooleanDeclarativeRules">
@@ -30152,7 +31775,7 @@ uploading your change for review.
</histogram>
<histogram name="Extensions.DynamicExtensionActionIconWasVisible"
- enum="Boolean" expires_after="2019-08-21">
+ enum="BooleanVisible" expires_after="2019-02-01">
<owner>dbertoni@chromium.org</owner>
<owner>extensions-core@chromium.org</owner>
<summary>
@@ -30161,6 +31784,21 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Extensions.DynamicExtensionActionIconWasVisibleRendered"
+ enum="BooleanVisible" expires_after="2019-08-21">
+ <owner>dbertoni@chromium.org</owner>
+ <owner>extensions-core@chromium.org</owner>
+ <summary>
+ Reports whether a call to set a dynamic icon in the toolbar passed an icon
+ considered visible by our icon analysis code.
+
+ This replaces the previous stat, DynamicExtensionActionIconWasVisible, due
+ to a change to our analysis algorithm. The new algorithm renders the icon
+ against the toolbar background color and determines how visible the
+ resulting pixels are.
+ </summary>
+</histogram>
+
<histogram name="Extensions.EnhancedBookmarksManagerNumEventListeners">
<obsolete>
Obsolete since the enhanced bookmarks manager is no longer using an event
@@ -30441,6 +32079,28 @@ uploading your change for review.
<summary>An extension has been uninstalled.</summary>
</histogram>
+<histogram name="Extensions.ExtensionUpdaterFirstUpdateCheckErrorsGoogleUrl"
+ enum="CombinedHttpResponseAndNetErrorCode" expires_after="M75">
+ <owner>mxnguyen@chromium.org</owner>
+ <summary>
+ Records the error codes of the extension updater update check errors. These
+ events are triggered only when the extension updater gets an error for the
+ first time (before any retry) in the update check phase for a google.com
+ domain.
+ </summary>
+</histogram>
+
+<histogram name="Extensions.ExtensionUpdaterFirstUpdateCheckErrorsNonGoogleUrl"
+ enum="CombinedHttpResponseAndNetErrorCode" expires_after="M75">
+ <owner>mxnguyen@chromium.org</owner>
+ <summary>
+ Records the error codes of the extension updater update check errors. These
+ events are triggered only when the extension updater gets an error for the
+ first time (before any retry) in the update check phase for a non google.com
+ domain.
+ </summary>
+</histogram>
+
<histogram name="Extensions.ExtensionUpdaterRawUpdateCalls" units="extensions">
<owner>mxnguyen@chromium.org</owner>
<summary>
@@ -30562,6 +32222,18 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Extensions.ForceInstalledFailureCrxInstallError"
+ enum="ExtensionInstallationCrxInstallError" expires_after="2019-07-01">
+ <owner>poromov@chromium.org</owner>
+ <owner>rdevlin.cronin@chromium.org</owner>
+ <summary>
+ Detailed reason why CRX installation failed for enterprise policy forced
+ extensions. Recorded for each forced extension that failed to install after
+ 5 minutes with Extensions.ForceInstalledFailureReason equal to
+ CRX_INSTALL_ERROR_*.
+ </summary>
+</histogram>
+
<histogram name="Extensions.ForceInstalledFailureReason"
enum="ExtensionInstallationFailureReason" expires_after="2019-07-01">
<owner>poromov@chromium.org</owner>
@@ -31092,6 +32764,17 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Extensions.IsRenderedIconSufficientlyVisibleTime"
+ units="microseconds" expires_after="2019-12-01">
+ <owner>dbertoni@chromium.org</owner>
+ <owner>extensions-core@chromium.org</owner>
+ <summary>
+ The amount of elapsed time taken to render an icon against a specified
+ background color and determine whether it would be visible to the user.
+ Recorded every time the analysis code is called.
+ </summary>
+</histogram>
+
<histogram name="Extensions.LoadAll">
<owner>rdevlin.cronin@chromium.org</owner>
<summary>The number of extensions and themes loaded at profile open.</summary>
@@ -31311,26 +32994,60 @@ uploading your change for review.
</histogram>
<histogram name="Extensions.ManifestIconSetIconWasVisibleForPacked"
- enum="Boolean" expires_after="2019-09-07">
+ enum="BooleanVisible" expires_after="2019-02-01">
+ <owner>dbertoni@chromium.org</owner>
+ <owner>extensions-core@chromium.org</owner>
+ <summary>
+ Reports whether an icon that's specified in the manifest is considered
+ visible by our icon analysis code. This stat is only for packed extensions,
+ which we check dynamically when the icon is requested. The stat is emitted
+ the first time the default icon is requested, since we cache the icon that's
+ selected.
+ </summary>
+</histogram>
+
+<histogram name="Extensions.ManifestIconSetIconWasVisibleForPackedRendered"
+ enum="BooleanVisible" expires_after="2019-09-07">
<owner>dbertoni@chromium.org</owner>
<owner>extensions-core@chromium.org</owner>
<summary>
- Reports whether loading an icon that's specified in the manifest is
- considered visible by our icon analysis code. This stat is only for packed
- extensions, which we check dynamically when the icon is requested. This stat
- is emitted the first time the default icon is requested, since we cache the
- icon that's selected.
+ Reports whether an icon that's specified in the manifest is considered
+ visible by our icon analysis code. This stat is only for packed extensions,
+ which we check dynamically when the icon is requested. The stat is emitted
+ the first time the default icon is requested, since we cache the icon that's
+ selected.
+
+ This replaces the previous stat, ManifestIconSetIconWasVisibleForPacked, due
+ to a change to our analysis algorithm. The new algorithm renders the icon
+ against the toolbar background color and determines how visible the
+ resulting pixels are.
</summary>
</histogram>
<histogram name="Extensions.ManifestIconSetIconWasVisibleForUnpacked"
- enum="Boolean" expires_after="2019-09-07">
+ enum="BooleanVisible" expires_after="2019-02-01">
+ <owner>dbertoni@chromium.org</owner>
+ <owner>extensions-core@chromium.org</owner>
+ <summary>
+ Reports whether loading an icon declarated in the extension's manifest icon
+ set is considered visible by our icon analysis code. This stat is only for
+ unpacked extensions, which we check at load time.
+ </summary>
+</histogram>
+
+<histogram name="Extensions.ManifestIconSetIconWasVisibleForUnpackedRendered"
+ enum="BooleanVisible" expires_after="2019-09-07">
<owner>dbertoni@chromium.org</owner>
<owner>extensions-core@chromium.org</owner>
<summary>
Reports whether loading an icon declarated in the extension's manifest icon
set is considered visible by our icon analysis code. This stat is only for
unpacked extensions, which we check at load time.
+
+ This replaces the previous stat, ManifestIconSetIconWasVisibleForUnpacked,
+ due to a change to our analysis algorithm. The new algorithm renders the
+ icon against the toolbar background color and determines how visible the
+ resulting pixels are.
</summary>
</histogram>
@@ -32521,8 +34238,23 @@ uploading your change for review.
<summary>Updates grouped by Extension::HistogramType.</summary>
</histogram>
+<histogram name="Extensions.WebRequest.EventListenerFlag"
+ enum="WebRequestEventListenerFlag" expires_after="2019-05-28">
+ <owner>karandeepb@chromium.org</owner>
+ <owner>rdevlin.cronin@chromium.org</owner>
+ <summary>
+ Records any flags that were registered in the extraInfoSpec of a webRequest
+ listener, as well as the total number of listeners registered. Recorded each
+ time a new listener is registered.
+ </summary>
+</histogram>
+
<histogram name="Extensions.WebRequest.InitiatorAccess" enum="InitiatorAccess"
expires_after="2018-12-31">
+ <obsolete>
+ Deprecated November 2018. Replaced with
+ Extensions.WebRequest.InitiatorAccess2.
+ </obsolete>
<owner>karandeepb@chromium.org</owner>
<owner>rdevlin.cronin@chromium.org</owner>
<summary>
@@ -32532,6 +34264,18 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Extensions.WebRequest.InitiatorAccess2"
+ enum="InitiatorAccess2" expires_after="2019-04-30">
+ <owner>karandeepb@chromium.org</owner>
+ <owner>rdevlin.cronin@chromium.org</owner>
+ <summary>
+ Describes the different cases pertaining to host permissions check for the
+ initiator URL of a network request. This is emitted whenever an extension is
+ found to have access to a request url for the WebRequest or Declarative Net
+ Request API.
+ </summary>
+</histogram>
+
<histogram name="Extensions.WebRequest.ModifiedResponseHeaders"
enum="WebRequestResponseHeaderType">
<obsolete>
@@ -32576,7 +34320,7 @@ uploading your change for review.
</histogram>
<histogram name="Extensions.WebRequest.SetCookieResponseHeaderChanged"
- enum="BooleanChanged" expires_after="M72">
+ enum="BooleanChanged" expires_after="M73">
<owner>cduvall@chromium.org</owner>
<owner>karandeepb@chromium.org</owner>
<summary>
@@ -32586,12 +34330,12 @@ uploading your change for review.
onHeadersReceived events.
This histogram is temporary, for investigating https://crbug.com/827582. It
- can probably be removed by M72.
+ can probably be removed by M73.
</summary>
</histogram>
<histogram name="Extensions.WebRequest.SetCookieResponseHeaderRemoved"
- enum="BooleanRemoved" expires_after="M72">
+ enum="BooleanRemoved" expires_after="M73">
<owner>cduvall@chromium.org</owner>
<owner>karandeepb@chromium.org</owner>
<summary>
@@ -32601,7 +34345,7 @@ uploading your change for review.
onHeadersReceived events.
This histogram is temporary, for investigating https://crbug.com/827582. It
- can probably be removed by M72.
+ can probably be removed by M73.
</summary>
</histogram>
@@ -32623,7 +34367,7 @@ uploading your change for review.
</histogram>
<histogram name="Extensions.WebRequest.SpecialRequestHeadersChanged"
- enum="WebRequestSpecialRequestHeaderModification" expires_after="M72">
+ enum="WebRequestSpecialRequestHeaderModification" expires_after="M73">
<owner>cduvall@chromium.org</owner>
<owner>karandeepb@chromium.org</owner>
<summary>
@@ -32634,12 +34378,12 @@ uploading your change for review.
onBeforeSendHeaders events.
This histogram is temporary, for investigating https://crbug.com/827582. It
- can probably be removed by M72.
+ can probably be removed by M73.
</summary>
</histogram>
<histogram name="Extensions.WebRequest.SpecialRequestHeadersRemoved"
- enum="WebRequestSpecialRequestHeaderModification" expires_after="M72">
+ enum="WebRequestSpecialRequestHeaderModification" expires_after="M73">
<owner>cduvall@chromium.org</owner>
<owner>karandeepb@chromium.org</owner>
<summary>
@@ -32650,7 +34394,7 @@ uploading your change for review.
onBeforeSendHeaders events.
This histogram is temporary, for investigating https://crbug.com/827582. It
- can probably be removed by M72.
+ can probably be removed by M73.
</summary>
</histogram>
@@ -32666,6 +34410,18 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Extensions.WebRequest.TotalExtraHeadersRequestTime" units="ms"
+ expires_after="2019-05-27">
+ <owner>karandeepb@chromium.org</owner>
+ <owner>rdevlin.cronin@chromium.org</owner>
+ <summary>
+ The total time a network request took when at least one Web Request listener
+ with 'extraHeaders' in the extraInfoSpec was registered at the start of the
+ request. Measures from onBeforeRequest to onCompleted/onErrorOccurred, and
+ does not include canceled or redirected requests.
+ </summary>
+</histogram>
+
<histogram name="Extensions.WebRequest.TotalRequestTime" units="ms"
expires_after="2019-05-13">
<owner>karandeepb@chromium.org</owner>
@@ -33134,8 +34890,8 @@ uploading your change for review.
<histogram name="FileBrowser.ChangeDirectory.RootType"
enum="FileManagerRootType">
- <owner>sashab@chromium.org</owner>
<owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
<summary>
Chrome OS File Browser: Counts the number of directory-changed events,
bucketed by the RootType of the directory newly displayed.
@@ -33144,8 +34900,8 @@ uploading your change for review.
<histogram name="FileBrowser.CloudImport.UserAction"
enum="CloudImportUserAction">
- <owner>sashab@chromium.org</owner>
<owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
<summary>
Chrome OS File Browser - Specific actions taken by user such initiating
cloud import, canceling import, selecting a directory, or opting-in to
@@ -33153,9 +34909,21 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="FileBrowser.ComputersCount" units="Computers"
+ expires_after="M76">
+ <owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
+ <summary>
+ Chrome OS File Browser: number of Computers a user has available in the
+ Files app. Computed every time the File Browser is opened (including file
+ picker dialogs). NOTE: This data is biased towards users that use the Files
+ App more often.
+ </summary>
+</histogram>
+
<histogram name="FileBrowser.Create" enum="FileDialogType">
- <owner>sashab@chromium.org</owner>
<owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
<summary>Chrome OS File Browser opening mode.</summary>
</histogram>
@@ -33178,8 +34946,8 @@ uploading your change for review.
</histogram>
<histogram name="FileBrowser.DirectoryScan" units="ms">
- <owner>sashab@chromium.org</owner>
<owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
<summary>
Chrome OS File Browser: time to scan a directory. Measured on every File
Browser directory change.
@@ -33188,8 +34956,8 @@ uploading your change for review.
<histogram name="FileBrowser.DownloadDestination.IsGoogleDrive.Changed"
enum="BooleanEnabled">
- <owner>sashab@chromium.org</owner>
<owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
<summary>
Tracks whether download destination is set to a Google Drive folder when the
download destination is changed by the user in the settings page.
@@ -33198,8 +34966,8 @@ uploading your change for review.
<histogram name="FileBrowser.DownloadDestination.IsGoogleDrive.Started"
enum="BooleanEnabled">
- <owner>sashab@chromium.org</owner>
<owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
<summary>
Tracks whether download destination is set to a Google Drive folder on
startup.
@@ -33207,8 +34975,8 @@ uploading your change for review.
</histogram>
<histogram name="FileBrowser.DownloadsCount">
- <owner>sashab@chromium.org</owner>
<owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
<summary>
Chrome OS File Browser: number of files and directories in the Downloads
directory (not including the contents of nested directories). Computed every
@@ -33216,9 +34984,29 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="FileBrowser.DriveDuplicateFinder.LongComputeHash" units="ms"
+ expires_after="M79">
+ <owner>slangley@gchromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
+ <summary>
+ The time taken to calculate the hash of a file, only recorded if the time
+ exceeds a local threshold that is currenty 5 seconds.
+ </summary>
+</histogram>
+
+<histogram name="FileBrowser.DriveDuplicateFinder.LongSearchByHash" units="ms"
+ expires_after="M79">
+ <owner>slangley@gchromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
+ <summary>
+ The time taken to search for a file using it's hash value, only recorded if
+ the time exceeds a local threshold that is currently 1 second.
+ </summary>
+</histogram>
+
<histogram name="FileBrowser.FolderShortcut.Add">
- <owner>sashab@chromium.org</owner>
<owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
<summary>
Chrome OS File Browser: this is recorded when the user adds a folder
shortcut.
@@ -33226,8 +35014,8 @@ uploading your change for review.
</histogram>
<histogram name="FileBrowser.FolderShortcut.Count">
- <owner>sashab@chromium.org</owner>
<owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
<summary>
Chrome OS File Browser: number of saved folder shorcuts. This is recorded
when the Files app is launched.
@@ -33235,8 +35023,8 @@ uploading your change for review.
</histogram>
<histogram name="FileBrowser.FolderShortcut.Navigate">
- <owner>sashab@chromium.org</owner>
<owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
<summary>
Chrome OS File Browser: this is recorded when the user clicks or selects a
folder shortcut and is navigated to the target folder.
@@ -33244,8 +35032,8 @@ uploading your change for review.
</histogram>
<histogram name="FileBrowser.FolderShortcut.Remove">
- <owner>sashab@chromium.org</owner>
<owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
<summary>
Chrome OS File Browser: this is recorded when the user removes a folder
shortcut.
@@ -33257,8 +35045,8 @@ uploading your change for review.
<obsolete>
The bug which the UMA was investigating got fixed.
</obsolete>
- <owner>sashab@chromium.org</owner>
<owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
<summary>
Chrome OS File Browser: time from the SuspendDone event to the DiskRemoved
event. The UMA is added temporarily for crbug.com/433734.
@@ -33270,17 +35058,34 @@ uploading your change for review.
<obsolete>
The bug which the UMA was investigating got fixed.
</obsolete>
- <owner>sashab@chromium.org</owner>
<owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
<summary>
Chrome OS File Browser: time from the DiskRemoved event to the Suspend
event. The UMA is added temporarily for crbug.com/433734.
</summary>
</histogram>
+<histogram name="FileBrowser.ImportController.DeviceYanked" enum="Boolean"
+ expires_after="M79">
+ <owner>slangley@chromium.org</owner>
+ <summary>
+ Chrome OS Files App: Whether an external media device was removed during the
+ upload process.
+ </summary>
+</histogram>
+
+<histogram name="FileBrowser.ImportController.ImportCancelled"
+ enum="BooleanCanceled" expires_after="M79">
+ <owner>slangley@chromium.org</owner>
+ <summary>
+ Chrome OS Files App: Whether the media import process was cancelled.
+ </summary>
+</histogram>
+
<histogram name="FileBrowser.Load" units="ms">
- <owner>sashab@chromium.org</owner>
<owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
<summary>
Chrome OS File Browser is an built-in extension without a background page.
Its main.html file is loaded every time the user opens a File Browser tab or
@@ -33291,8 +35096,8 @@ uploading your change for review.
<histogram name="FileBrowser.Location.OnEntryExpandedOrCollapsed.NonTopLevel"
enum="FileManagerRootType">
- <owner>sashab@chromium.org</owner>
<owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
<summary>
Chrome OS Files App: The locations (root types) of non-top-level entries
when they are expanded or collapsed (expand icon clicked) in the directory
@@ -33302,8 +35107,8 @@ uploading your change for review.
<histogram name="FileBrowser.Location.OnEntryExpandedOrCollapsed.TopLevel"
enum="FileManagerRootType">
- <owner>sashab@chromium.org</owner>
<owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
<summary>
Chrome OS Files App: The locations (root types) of top-level entries (root
entries) when they are expanded or collapsed (expand icon clicked) in the
@@ -33313,8 +35118,8 @@ uploading your change for review.
<histogram name="FileBrowser.Location.OnEntrySelected.NonTopLevel"
enum="FileManagerRootType">
- <owner>sashab@chromium.org</owner>
<owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
<summary>
Chrome OS Files App: The locations (root types) of non-top-level entries
when they are clicked in the directory tree.
@@ -33323,17 +35128,70 @@ uploading your change for review.
<histogram name="FileBrowser.Location.OnEntrySelected.TopLevel"
enum="FileManagerRootType">
- <owner>sashab@chromium.org</owner>
<owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
<summary>
Chrome OS Files App: The locations (root types) of top-level entries (root
entries) when they are clicked in the directory tree.
</summary>
</histogram>
+<histogram name="FileBrowser.MediaImport.Cancelled" enum="BooleanCanceled"
+ expires_after="M79">
+ <owner>slangley@chromium.org</owner>
+ <summary>
+ Chrome OS Files App: Whether the media import (Photos/Video) from external
+ media was cancelled.
+ </summary>
+</histogram>
+
+<histogram name="FileBrowser.MediaImport.Duplicates" units="count"
+ expires_after="M79">
+ <owner>slangley@chromium.org</owner>
+ <summary>
+ Chrome OS Files App: Count of duplicate media (Photos/Videos) files that
+ were skipped during a single upload session.
+ </summary>
+</histogram>
+
+<histogram name="FileBrowser.MediaImport.ErrorCount" units="count"
+ expires_after="M79">
+ <owner>slangley@chromium.org</owner>
+ <summary>
+ Chrome OS Files App: Number of errors that occured during an upload session.
+ </summary>
+</histogram>
+
+<histogram name="FileBrowser.MediaImport.ImportCount" units="count"
+ expires_after="M79">
+ <owner>slangley@chromium.org</owner>
+ <summary>
+ Chrome OS Files App: Count of individual media (Photos/Videos) uploaded from
+ a single upload session.
+ </summary>
+</histogram>
+
+<histogram name="FileBrowser.MediaImport.ImportMB" units="MBytes"
+ expires_after="M79">
+ <owner>slangley@chromium.org</owner>
+ <summary>
+ Chrome OS Files App: Size of the media (Photos/Videos) uploaded from a
+ single upload session.
+ </summary>
+</histogram>
+
+<histogram name="FileBrowser.MediaImport.Started" enum="BooleanAttempted"
+ expires_after="M79">
+ <owner>slangley@chromium.org</owner>
+ <summary>
+ Chrome OS Files App: Whether the media import (Photos/Video) from external
+ media was started.
+ </summary>
+</histogram>
+
<histogram name="FileBrowser.MenuItemSelected" enum="FileManagerMenuCommands">
- <owner>sashab@chromium.org</owner>
<owner>slangley@chromium.org</owner>
+ <owner>wiefangsun@chromium.org</owner>
<summary>
Chrome OS Files App: The commands selected in the menu by the files app.
</summary>
@@ -33342,7 +35200,8 @@ uploading your change for review.
<histogram name="FileBrowser.MountCrostiniContainer" units="ms"
expires_after="2019-05-30">
<owner>joelhockey@google.com</owner>
- <owner>sashab@google.com</owner>
+ <owner>slangley@chromium.org</owner>
+ <owner>wiefangsun@chromium.org</owner>
<summary>
Chrome OS File Browser: time to start and mount the crostini container in
order to show Linux Files.
@@ -33350,8 +35209,8 @@ uploading your change for review.
</histogram>
<histogram name="FileBrowser.OpenFiles.RootType" enum="FileManagerRootType">
- <owner>sashab@chromium.org</owner>
<owner>slangley@chromium.org</owner>
+ <owner>wiefangsun@chromium.org</owner>
<summary>
Chrome OS File Browser: The locations (root types) of files which are opened
by the file picker.
@@ -33362,14 +35221,14 @@ uploading your change for review.
<obsolete>
Deprecated 4/2013, and replaced by FileBrowser.ViewingFileType.
</obsolete>
- <owner>sashab@chromium.org</owner>
<owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
<summary>File types that were tried to be opened through browser.</summary>
</histogram>
<histogram name="FileBrowser.PhotoEditor.DisplayTime" units="ms">
- <owner>sashab@chromium.org</owner>
<owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
<summary>
Chrome OS Photo Editor: time to display an image. Measured from the moment
the user selected the image till the moment it is displayed (not counting
@@ -33378,41 +35237,41 @@ uploading your change for review.
</histogram>
<histogram name="FileBrowser.PhotoEditor.FileType" enum="PhotoEditorFileType">
- <owner>sashab@chromium.org</owner>
<owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
<summary>Chrome OS Photo Editor: the type of the file opened.</summary>
</histogram>
<histogram name="FileBrowser.PhotoEditor.LoadMode" enum="PhotoEditorLoadMode">
- <owner>sashab@chromium.org</owner>
<owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
<summary>Chrome OS Photo Editor: the way the image has been loaded.</summary>
</histogram>
<histogram name="FileBrowser.PhotoEditor.LoadTime" units="ms">
- <owner>sashab@chromium.org</owner>
<owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
<summary>Chrome OS Photo Editor: time to load an image from a file.</summary>
</histogram>
<histogram name="FileBrowser.PhotoEditor.SaveResult"
enum="PhotoEditorSaveResult">
- <owner>sashab@chromium.org</owner>
<owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
<summary>
Chrome OS Photo Editor: the result of a file save operation.
</summary>
</histogram>
<histogram name="FileBrowser.PhotoEditor.SaveTime" units="ms">
- <owner>sashab@chromium.org</owner>
<owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
<summary>Chrome OS Photo Editor: time to save an image to a file.</summary>
</histogram>
<histogram name="FileBrowser.PhotoEditor.Size.MB" units="MBytes">
- <owner>sashab@chromium.org</owner>
<owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
<summary>
Chrome OS Photo Editor: size of an image file in megabytes. Measured on
every image load.
@@ -33420,8 +35279,8 @@ uploading your change for review.
</histogram>
<histogram name="FileBrowser.PhotoEditor.Size.MPix" units="MPixels">
- <owner>sashab@chromium.org</owner>
<owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
<summary>
Chrome OS Photo Editor: size of an image in megapixels. Measured on every
image load.
@@ -33429,14 +35288,17 @@ uploading your change for review.
</histogram>
<histogram name="FileBrowser.PhotoEditor.Tool" enum="PhotoEditorToolType">
- <owner>sashab@chromium.org</owner>
<owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
<summary>Chrome OS Photo Editor: the button which the user clicked.</summary>
</histogram>
<histogram name="FileBrowser.PhotoImport.Action" enum="ExternalDeviceAction">
- <owner>sashab@chromium.org</owner>
+ <obsolete>
+ Code seems to have been removed at an unknown time.
+ </obsolete>
<owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
<summary>
Chrome OS Photo Import flow: action chosen in the Action Choice dialog for
the external device.
@@ -33444,8 +35306,11 @@ uploading your change for review.
</histogram>
<histogram name="FileBrowser.PhotoImport.ImportCount">
- <owner>sashab@chromium.org</owner>
+ <obsolete>
+ Code seems to have been removed at an unknown time.
+ </obsolete>
<owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
<summary>
Chrome OS Photo Import flow: the number of photos imported. Measured on
every successfull import operation.
@@ -33453,8 +35318,11 @@ uploading your change for review.
</histogram>
<histogram name="FileBrowser.PhotoImport.ImportPercentage" units="%">
- <owner>sashab@chromium.org</owner>
+ <obsolete>
+ Code seems to have been removed at an unknown time.
+ </obsolete>
<owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
<summary>
Chrome OS Photo Import flow: the percent of photos imported among all the
photos on the device. Measured on every successfull import operation.
@@ -33462,8 +35330,11 @@ uploading your change for review.
</histogram>
<histogram name="FileBrowser.PhotoImport.Load" units="ms">
- <owner>sashab@chromium.org</owner>
+ <obsolete>
+ Code seems to have been removed at an unknown time.
+ </obsolete>
<owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
<summary>
Chrome OS Photo Import flow: time to load the action dialog. Measured
between the moment window appears and the moment user see all available
@@ -33472,49 +35343,52 @@ uploading your change for review.
</histogram>
<histogram name="FileBrowser.PhotoImport.Scan" units="ms">
- <owner>sashab@chromium.org</owner>
+ <obsolete>
+ Code seems to have been removed at an unknown time.
+ </obsolete>
<owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
<summary>
Chrome OS Photo Import flow: time to scan the external device.
</summary>
</histogram>
<histogram name="FileBrowser.QuickView.DialogType" enum="FileDialogType">
- <owner>sashab@chromium.org</owner>
<owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
<summary>
File dialog type (e.g. Full page, Save as file) when quick view is launched.
</summary>
</histogram>
<histogram name="FileBrowser.QuickView.FileType" enum="ViewFileType">
- <owner>sashab@chromium.org</owner>
<owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
<summary>File types that were tried to be opened with quick view.</summary>
</histogram>
<histogram name="FileBrowser.QuickView.FileTypeOnLaunch" enum="ViewFileType">
- <owner>sashab@chromium.org</owner>
<owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
<summary>File types that were selected when quick view is launched.</summary>
</histogram>
<histogram name="FileBrowser.QuickView.VolumeType" enum="FileManagerVolumeType">
- <owner>sashab@chromium.org</owner>
<owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
<summary>The volume type where quick view is opened.</summary>
</histogram>
<histogram name="FileBrowser.QuickView.WayToOpen"
enum="FileManagerQuickViewWayToOpen">
- <owner>sashab@chromium.org</owner>
<owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
<summary>How quick view was opened.</summary>
</histogram>
<histogram name="FileBrowser.Recent.LoadArcMedia" units="ms">
- <owner>sashab@chromium.org</owner>
<owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
<summary>
Time to load a recently modified file list from Media Views. It is triggered
when the user opens or reloads Recent view in the Files app.
@@ -33522,8 +35396,8 @@ uploading your change for review.
</histogram>
<histogram name="FileBrowser.Recent.LoadDownloads" units="ms">
- <owner>sashab@chromium.org</owner>
<owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
<summary>
Time to load a recently modified file list from Downloads. It is triggered
when the user opens or reloads Recent view in the Files app.
@@ -33531,8 +35405,8 @@ uploading your change for review.
</histogram>
<histogram name="FileBrowser.Recent.LoadDrive" units="ms">
- <owner>sashab@chromium.org</owner>
<owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
<summary>
Time to load a recently modified file list from Drive. It is triggered when
the user opens or reloads Recent view in the Files app.
@@ -33540,8 +35414,8 @@ uploading your change for review.
</histogram>
<histogram name="FileBrowser.Recent.LoadTotal" units="ms">
- <owner>sashab@chromium.org</owner>
<owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
<summary>
Time to load a recently modified file list from all sources. It is triggered
when the user opens or reloads Recent view in the Files app.
@@ -33550,8 +35424,8 @@ uploading your change for review.
<histogram name="FileBrowser.SuggestApps.CloseDialog"
enum="SuggestAppsDialogCloseReason">
- <owner>sashab@chromium.org</owner>
<owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
<summary>
Chrome OS File Browser: the reason why the suggest apps dialog was closed.
</summary>
@@ -33559,8 +35433,8 @@ uploading your change for review.
<histogram name="FileBrowser.SuggestApps.Install"
enum="SuggestAppsDialogInstall">
- <owner>sashab@chromium.org</owner>
<owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
<summary>
Chrome OS File Browser: whether the Webstore item user selected was
successfully installed or not.
@@ -33568,8 +35442,8 @@ uploading your change for review.
</histogram>
<histogram name="FileBrowser.SuggestApps.Load" enum="SuggestAppsDialogLoad">
- <owner>sashab@chromium.org</owner>
<owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
<summary>
Chrome OS File Browser: whether the initialization of the dialog succeeded
or not.
@@ -33577,8 +35451,8 @@ uploading your change for review.
</histogram>
<histogram name="FileBrowser.SuggestApps.LoadTime" units="ms">
- <owner>sashab@chromium.org</owner>
<owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
<summary>
Chrome OS File Browser: time to load the suggest apps dialog. Measured
between the moment window appears and the moment all the contents in the
@@ -33588,8 +35462,8 @@ uploading your change for review.
<histogram name="FileBrowser.TeamDrivesCount" units="Team Drives"
expires_after="M75">
- <owner>sashab@chromium.org</owner>
<owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
<summary>
Chrome OS File Browser: number of Team Drives a user has available in the
Files app. Computed every time the File Browser is opened (including file
@@ -33599,8 +35473,8 @@ uploading your change for review.
</histogram>
<histogram name="FileBrowser.ToggleFileListType" enum="FileManagerListType">
- <owner>sashab@chromium.org</owner>
<owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
<summary>
Chrome OS Files App: Recorded when the Grid View/List View toggle menu icon
is selected.
@@ -33608,34 +35482,101 @@ uploading your change for review.
</histogram>
<histogram name="FileBrowser.ViewingFileType" enum="ViewFileType">
- <owner>sashab@chromium.org</owner>
<owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
<summary>
File types that were tried to be viewed through browser. This is recorded
when the user tries to view a file from the Files app.
</summary>
</histogram>
+<histogram name="FileBrowser.ViewingFileType.Offline" enum="ViewFileType"
+ expires_after="2019-12-31">
+ <owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
+ <summary>
+ File types that were tried to be viewed through browser while the user is
+ offline. This is recorded when the user tries to view a file from the Files
+ app.
+ </summary>
+</histogram>
+
+<histogram name="FileBrowser.ViewingFileType.Online" enum="ViewFileType"
+ expires_after="2019-12-31">
+ <owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
+ <summary>
+ File types that were tried to be viewed through browser while the user is
+ online. This is recorded when the user tries to view a file from the Files
+ app.
+ </summary>
+</histogram>
+
<histogram name="FileBrowser.ViewingRootType" enum="FileManagerRootType">
- <owner>sashab@chromium.org</owner>
<owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
<summary>
Chrome OS File Browser: The locations (root types) of files which are opened
in stand-alone mode. This does not include files opened in file picker mode.
</summary>
</histogram>
+<histogram name="FileBrowser.ViewingRootType.Offline"
+ enum="FileManagerRootType" expires_after="2019-12-31">
+ <owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
+ <summary>
+ Chrome OS File Browser: The locations (root types) of files which are opened
+ in stand-alone mode while the user is offline. This does not include files
+ opened in file picker mode.
+ </summary>
+</histogram>
+
+<histogram name="FileBrowser.ViewingRootType.Online" enum="FileManagerRootType"
+ expires_after="2019-12-31">
+ <owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
+ <summary>
+ Chrome OS File Browser: The locations (root types) of files which are opened
+ in stand-alone mode while the user is online. This does not include files
+ opened in file picker mode.
+ </summary>
+</histogram>
+
<histogram name="FileBrowser.ViewingTaskType" enum="FileManagerTaskType">
- <owner>sashab@chromium.org</owner>
<owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
<summary>
Chrome OS File Browser: The type of the handler to be used to open files.
+ This is recorded when the user tries to view a file from the Files app.
+ </summary>
+</histogram>
+
+<histogram name="FileBrowser.ViewingTaskType.Offline"
+ enum="FileManagerTaskType" expires_after="2019-12-31">
+ <owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
+ <summary>
+ Chrome OS File Browser: The type of the handler to be used to open files
+ when the user is offline. This is recorded when the user tries to view a
+ file from the Files app.
+ </summary>
+</histogram>
+
+<histogram name="FileBrowser.ViewingTaskType.Online" enum="FileManagerTaskType"
+ expires_after="2019-12-31">
+ <owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
+ <summary>
+ Chrome OS File Browser: The type of the handler to be used to open files
+ when the user is online. This is recorded when the user tries to view a file
+ from the Files app.
</summary>
</histogram>
<histogram name="FileBrowser.VolumeType" enum="FileManagerVolumeType">
- <owner>sashab@chromium.org</owner>
<owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
<summary>
Chrome OS File Browser: counts the number of times volumes are mounted for
each volume type.
@@ -33643,8 +35584,8 @@ uploading your change for review.
</histogram>
<histogram name="FileBrowser.ZipFileTask" enum="FileManagerZipHandlerType">
- <owner>sashab@chromium.org</owner>
<owner>slangley@chromium.org</owner>
+ <owner>weifangsun@chromium.org</owner>
<summary>
Chrome OS File Browser: counts the number of times ZIP file was opened or
created, categorized by component extensions and its operation types.
@@ -33839,47 +35780,92 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="FirstRun.NewUserExperience.EmailInterstitialInteraction"
+ enum="NuxEmailInterstitialInteractions" expires_after="2019-03-31">
+ <owner>hcarmona@chromium.org</owner>
+ <owner>scottchen@chromium.org</owner>
+ <summary>
+ Records when a user interacted with the email interstitial of the onboarding
+ process. We record that the page was seen and what action the user took.
+ </summary>
+</histogram>
+
<histogram name="FirstRun.NewUserExperience.EmailProvidersInteraction"
- enum="NuxEmailProvidersInteractions">
+ enum="NuxEmailProvidersInteractions" expires_after="2019-03-31">
+ <owner>hcarmona@chromium.org</owner>
<owner>scottchen@chromium.org</owner>
<summary>
- This histogram records when a user interacted with the Email Providers new
- user experience. We record the number of times the page is seen, how they
- interacted with the page (i.e. interacting with presented options and button
- clicks), and through what method they leave the page (i.e. confirm, cancel,
- neither). The new user experience should only be shown once to new profiles.
- Hence, the leaving method should be recorded at most once.
+ Records when a user interacted with the Email Providers new user experience.
+ We record the number of times the page is seen, how they interacted with the
+ page (i.e. interacting with presented options and button clicks), and
+ through what method they leave the page (i.e. confirm, cancel, neither). The
+ new user experience should only be shown once to new profiles. Hence, the
+ leaving method should be recorded at most once.
</summary>
</histogram>
<histogram name="FirstRun.NewUserExperience.EmailProvidersSelection"
- enum="NuxEmailProvidersSelections">
+ enum="NuxEmailProvidersSelections" expires_after="2019-03-31">
+ <owner>hcarmona@chromium.org</owner>
<owner>scottchen@chromium.org</owner>
<summary>
- This histogram records what email provider was selected as part of the Email
- Providers New User Experience. Histogram is only recorded when a user
- confirms adding an email provider.
+ Records what email provider was selected as part of the Email Providers New
+ User Experience. Histogram is only recorded when a user confirms adding an
+ email provider.
</summary>
</histogram>
<histogram name="FirstRun.NewUserExperience.GoogleAppsInteraction"
- enum="NuxGoogleAppsInteractions">
+ enum="NuxGoogleAppsInteractions" expires_after="2019-03-31">
<owner>hcarmona@chromium.org</owner>
+ <owner>scottchen@chromium.org</owner>
<summary>
- This histogram records when a user interacted with the Google Apps new user
- experience. We record both accept and reject but are not recording when a
- user ignored the prompt completely. Users can ignore this prompt by closing
- the tab or navigating away, we record when the prompt is shown.
+ Records when a user interacted with the Google Apps new user experience. We
+ record both accept and reject but are not recording when a user ignored the
+ prompt completely. Users can ignore this prompt by closing the tab or
+ navigating away, we record when the prompt is shown.
</summary>
</histogram>
<histogram name="FirstRun.NewUserExperience.GoogleAppsSelection"
- enum="NuxGoogleAppsSelections">
+ enum="NuxGoogleAppsSelections" expires_after="2019-03-31">
<owner>hcarmona@chromium.org</owner>
+ <owner>scottchen@chromium.org</owner>
<summary>
- This histogram records what Google apps were selected as part of the Google
- Apps New User Experience. Histogram is only recorded when a user accepts the
- prompt to add Google Apps.
+ Records what Google apps were selected as part of the Google Apps New User
+ Experience. Histogram is only recorded when a user accepts the prompt to add
+ Google Apps.
+ </summary>
+</histogram>
+
+<histogram name="FirstRun.NewUserExperience.LandingPageInteraction"
+ enum="NuxLandingPageInteractions" expires_after="2019-03-31">
+ <owner>hcarmona@chromium.org</owner>
+ <owner>scottchen@chromium.org</owner>
+ <summary>
+ Records when a user interacted with the landing page of the onboarding
+ process. We record that the page was seen and what action the user took.
+ </summary>
+</histogram>
+
+<histogram name="FirstRun.NewUserExperience.SetAsDefaultInteraction"
+ enum="NuxSetAsDefaultInteractions" expires_after="2019-03-31">
+ <owner>hcarmona@chromium.org</owner>
+ <owner>scottchen@chromium.org</owner>
+ <summary>
+ Records when a user interacted with the set default page of the onboarding
+ process. We record that the page was seen and what action the user took.
+ </summary>
+</histogram>
+
+<histogram name="FirstRun.NewUserExperience.SignInInterstitialInteraction"
+ enum="NuxSignInInterstitialInteractions" expires_after="2019-03-31">
+ <owner>hcarmona@chromium.org</owner>
+ <owner>scottchen@chromium.org</owner>
+ <summary>
+ Records when a user interacted with the sign in interstitial of the
+ onboarding process. We record that the page was seen and what action the
+ user took.
</summary>
</histogram>
@@ -33953,6 +35939,26 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="FontFallback.GetLinkedFonts.CacheMissTiming" units="ms"
+ expires_after="2019-05-01">
+ <owner>etienneb@chromium.org</owner>
+ <summary>
+ Time to retrieve the fallback fonts on the system when not found in cache.
+ </summary>
+</histogram>
+
+<histogram name="FontFallback.GetLinkedFonts.FontCount" units="count"
+ expires_after="2019-05-01">
+ <owner>etienneb@chromium.org</owner>
+ <summary>The amount of font returned for a given font family.</summary>
+</histogram>
+
+<histogram name="FontFallback.GetLinkedFonts.Timing" units="ms"
+ expires_after="2019-05-01">
+ <owner>etienneb@chromium.org</owner>
+ <summary>Time to retrieve the fallback fonts on the system.</summary>
+</histogram>
+
<histogram name="Gaia.AuthFetcher.ListAccounts.NetErrorCodes"
enum="NetErrorCodes" expires_after="2019-08-30">
<owner>droger@chromium.org</owner>
@@ -33963,6 +35969,19 @@ uploading your change for review.
</summary>
</histogram>
+<histogram base="true" name="Gaia.AuthFetcher.ListAccounts.NetErrorCodes.Retry"
+ enum="NetErrorCodes" expires_after="2019-08-30">
+ <owner>droger@chromium.org</owner>
+ <owner>msarda@chromium.org</owner>
+<!-- Name completed by histogram_suffixes name="GaiaListAccountsRetry" -->
+
+ <summary>
+ Reports the network error code for requests to the ListAccounts Gaia
+ endpoint. There are suffixes for individual tries (0 is the initial request,
+ and 1-8 are retries).
+ </summary>
+</histogram>
+
<histogram name="Gaia.AuthFetcher.ListAccounts.ProcessUptime.Error" units="ms"
expires_after="2019-08-30">
<owner>droger@chromium.org</owner>
@@ -35186,6 +37205,9 @@ uploading your change for review.
</histogram>
<histogram name="GPU.AtExitMBytesAllocated" units="MB">
+ <obsolete>
+ Removed sometime around M55.
+ </obsolete>
<owner>vmiura@chromium.org</owner>
<summary>
The amount of GPU memory that was currently allocated as of just before the
@@ -35194,6 +37216,9 @@ uploading your change for review.
</histogram>
<histogram name="GPU.AtExitMBytesAllocatedMax" units="MB">
+ <obsolete>
+ Removed sometime around M55.
+ </obsolete>
<owner>vmiura@chromium.org</owner>
<summary>
The maximum amount of GPU memory that had ever been allocated during the GPU
@@ -35202,6 +37227,9 @@ uploading your change for review.
</histogram>
<histogram name="GPU.AtExitMBytesLimit" units="MB">
+ <obsolete>
+ Removed sometime around M55.
+ </obsolete>
<owner>vmiura@chromium.org</owner>
<summary>
The GPU memory manager's limit on the amount of GPU memory that can be
@@ -35219,6 +37247,9 @@ uploading your change for review.
</histogram>
<histogram name="GPU.AtExitWindowCount">
+ <obsolete>
+ Removed sometime around M55.
+ </obsolete>
<owner>vmiura@chromium.org</owner>
<summary>
The number of windows that the GPU memory manager believed to exist as of
@@ -35414,6 +37445,9 @@ uploading your change for review.
</histogram>
<histogram name="GPU.DirectComposition.DCLayerResult" enum="DCLayerResult">
+ <obsolete>
+ Deprecated 11/2018. Replaced by GPU.DirectComposition.DCLayerResult2.Clear.
+ </obsolete>
<owner>jbauman@chromium.org</owner>
<summary>
Recorded for each quad (on overlay processing) the reason it was or wasn't
@@ -35421,6 +37455,18 @@ uploading your change for review.
</summary>
</histogram>
+<histogram base="true" name="GPU.DirectComposition.DCLayerResult2"
+ enum="DCLayerResult" expires_after="2020-12-31">
+<!-- Name completed by histogram_suffixes name="GPU.DirectComposition.ProtectedVideoType" -->
+
+ <owner>magchen@chromium.org</owner>
+ <owner>zmo@chromium.org</owner>
+ <summary>
+ Recorded for each quad (on overlay processing) with protected video type the
+ reason it was or wasn't put in an overlay.
+ </summary>
+</histogram>
+
<histogram name="GPU.DirectComposition.FramesSinceColorSpaceChange"
units="frames">
<owner>jbauman@chromium.org</owner>
@@ -35606,6 +37652,15 @@ uploading your change for review.
<summary>The error states generated by OpenGL calls.</summary>
</histogram>
+<histogram base="true" name="GPU.EstablishGpuChannelDuration" units="ms"
+ expires_after="M73">
+ <owner>kylechar@chromium.org</owner>
+ <summary>
+ The duration from when a request to establish a GPU channel arrives in
+ viz::GpuClient and to when the response for the request is sent.
+ </summary>
+</histogram>
+
<histogram name="GPU.FenceSupport" enum="BooleanAvailable">
<owner>reveman@chromium.org</owner>
<summary>
@@ -35614,6 +37669,25 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="GPU.GLImplementation" enum="GLImplementation"
+ expires_after="2020-11-01">
+ <owner>magchen@chromium.org</owner>
+ <owner>zmo@chromium.org</owner>
+ <summary>
+ Records the OpenGL implementation mode. Recorded during GPU process
+ initilization.
+ </summary>
+</histogram>
+
+<histogram name="GPU.GpuGeneration" enum="GpuSeriesType" expires_after="M75">
+ <owner>sunnyps@chromium.org</owner>
+ <owner>zmo@chromium.org</owner>
+ <summary>
+ Records user device's GPU generation. Only recorded on Windows platform at
+ GPU process launch time. Currently only meaningful with Intel GPUs.
+ </summary>
+</histogram>
+
<histogram name="GPU.GPUProcessDetailedExitStatus"
enum="ProcessDetailedExitStatus">
<owner>wnwen@chromium.org</owner>
@@ -35665,6 +37739,11 @@ uploading your change for review.
</histogram>
<histogram name="GPU.GPUProcessSoftwareRendering" enum="GPUProcessType">
+ <obsolete>
+ This histogram is no longer recorded. Use GPU.GLImplementation ==
+ kGLImplementationSwiftShaderGL to check if the gpu process is launched with
+ software rendering.
+ </obsolete>
<owner>vmiura@chromium.org</owner>
<summary>
A boolean indicating whether the gpu process that was launched uses software
@@ -36259,6 +38338,41 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Graphics.PresentationTimestamp.InvalidBeforeSwap" units="ms"
+ expires_after="2019-03-31">
+ <owner>sadrul@chromium.org</owner>
+ <summary>
+ Presentation timestamp comes from the driver when showing a display frame on
+ screen. These timestamps could be invalid, and be earlier than the swap
+ time. This metric records how much time before the swap-time such invalid
+ timestamps are. If the presentation timestamp is after the swap-time, then
+ this metric is not recorded.
+ </summary>
+</histogram>
+
+<histogram name="Graphics.PresentationTimestamp.InvalidFromFuture" units="ms"
+ expires_after="2019-03-31">
+ <owner>sadrul@chromium.org</owner>
+ <summary>
+ Presentation timestamp comes from the driver when showing a display frame on
+ screen. These timestamps can sometimes be in the future. This metric records
+ how far in the future these timestamps can be. If the timestamp is not in
+ the future, then this metric is not recorded.
+ </summary>
+</histogram>
+
+<histogram name="Graphics.PresentationTimestamp.LargePresentationDelta"
+ units="ms">
+ <owner>sadrul@chromium.org</owner>
+ <summary>
+ Measures very large (more than 3 minutes) delay in presenting display
+ frames. Presentation timestamp comes from the driver when showing a display
+ frame on screen. There are times when the presentation can be delayed a long
+ time. This metric reports how often this can happen. This is reported only
+ if the presentation takes 3 minutes or more.
+ </summary>
+</histogram>
+
<histogram name="GraphicsPipeline.ReceivedBeginFrame" units="microseconds">
<owner>yiyix@chromium.org</owner>
<owner>chrome-gpu-metrics@google.com</owner>
@@ -36284,6 +38398,17 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="GwpAsan.CrashAnalysisResult" enum="GwpAsanCrashAnalysisResult"
+ expires_after="M76">
+ <owner>vtsyrklevich@chromium.org</owner>
+ <owner>dynamic-tools@google.com</owner>
+ <summary>
+ Reports the GWP-ASan crash analysis result. That can either be a
+ determination that the crash was related to GWP-ASan, not related to
+ GWP-ASan, or an error making that determination. Recorded with every crash.
+ </summary>
+</histogram>
+
<histogram name="Hardware.Display.Count.OnChange">
<owner>erikchen@chromium.org</owner>
<summary>
@@ -36580,6 +38705,17 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Histogram.TooManyBuckets.1000" enum="HistogramNameHash"
+ expires_after="M73">
+ <owner>asvitkine@chromium.org</owner>
+ <owner>bcwhite@chromium.org</owner>
+ <summary>
+ The hash codes of histograms that were found to request more than 1000
+ buckets. These would be DCHECK exceptions in debug builds if the limit is
+ lowered so are being logged before that change.
+ </summary>
+</histogram>
+
<histogram name="History.AttemptedToFixProfileError">
<owner>brettw@chromium.org</owner>
<summary>
@@ -37159,15 +39295,19 @@ uploading your change for review.
</histogram>
<histogram name="History.TopHostsVisitsByRank" units="rank">
+ <obsolete>
+ Deprecated as of 11/2018, not used in production since 2/2018.
+ </obsolete>
<owner>twifkak@chromium.org</owner>
<owner>bengr@chromium.org</owner>
<summary>
Page visits to each of a user's top 50 hosts. The bucket is the 1-based rank
of the host. Visits to all other hosts go into the 51st bucket.
- Android-only. Only counts the last URL in a redirect chain. The list of top
- hosts is computed approximately nightly. This means that a given day will
- likely include a recalculation of top hosts, and therefore a given bucket
- may represent two different hosts at different times of day.
+ Android-only. Only counts the last URL in a redirect chain and does not
+ include reloads. The list of top hosts is computed approximately nightly.
+ This means that a given day will likely include a recalculation of top
+ hosts, and therefore a given bucket may represent two different hosts at
+ different times of day.
</summary>
</histogram>
@@ -37702,7 +39842,7 @@ uploading your change for review.
</histogram>
<histogram name="Import.IncludesPasswords.Firefox" enum="BooleanChecked">
- <owner>vabr@chromium.org</owner>
+ <owner>vasilii@chromium.org</owner>
<owner>hurims@gmail.com</owner>
<summary>
Whether or not the password checkbox is checked when importing a profile of
@@ -37711,7 +39851,7 @@ uploading your change for review.
</histogram>
<histogram name="Import.NumberOfImportedPasswords.Firefox">
- <owner>vabr@chromium.org</owner>
+ <owner>vasilii@chromium.org</owner>
<owner>hurims@gmail.com</owner>
<summary>
The number of passwords that are imported from Firefox. This is recorded
@@ -37725,6 +39865,9 @@ uploading your change for review.
<histogram name="Import.ShowDialog.FromBookmarkBarView" units="seconds"
expires_after="2018-08-30">
+ <obsolete>
+ Deprecated and removed BookmarkBarView
+ </obsolete>
<owner>Please list the metric's owners. Add more owner tags as needed.</owner>
<summary>
The amount of time from install time to time that user opens import dialog
@@ -37734,6 +39877,9 @@ uploading your change for review.
<histogram name="Import.ShowDialog.FromFloatingBookmarkBarView" units="seconds"
expires_after="2018-08-30">
+ <obsolete>
+ Deprecated and removed BookmarkBarView
+ </obsolete>
<owner>Please list the metric's owners. Add more owner tags as needed.</owner>
<summary>
The amount of time from install time to time that user opens import dialog
@@ -39338,6 +41484,16 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="InstantTethering.MultiDeviceFeatureState"
+ enum="MultiDevice_FeatureState">
+ <owner>hansberry@chromium.org</owner>
+ <summary>
+ Indicates the feature state of the Instant Tethering feature. This metric is
+ emitted to at the creation of the user session (when the user logs in), and
+ when feature state updates occur.
+ </summary>
+</histogram>
+
<histogram name="InstantTethering.NotificationInteractionType"
enum="InstantTethering_NotificationInteractionType">
<owner>hansberry@chromium.org</owner>
@@ -39889,6 +42045,9 @@ uploading your change for review.
</histogram>
<histogram name="interstitial.ssl_error_handler.superfish" enum="Boolean">
+ <obsolete>
+ Deprecated 2018-11.
+ </obsolete>
<owner>estark@chromium.org</owner>
<summary>
When encountering a certificate error, Chrome looks for the well-known
@@ -39996,6 +42155,14 @@ uploading your change for review.
<summary>Network channel used for invalidations.</summary>
</histogram>
+<histogram name="Invalidations.StatusChanged" enum="InvalidatorState">
+ <owner>melandory@chromium.org</owner>
+ <summary>
+ Status of the invalidation component. The metric is recorded on startup
+ unless invalidations are disabled, plus when the state changes.
+ </summary>
+</histogram>
+
<histogram name="IOS.CanonicalURLResult" enum="CanonicalURLResult">
<obsolete>
Deprecated 2018-01. As of M65 use Mobile.CanonicalURLResult.
@@ -40006,6 +42173,19 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="IOS.CommittedNavigationHasContext" enum="Boolean"
+ expires_after="2019-05-01">
+ <owner>danyao@chromium.org</owner>
+ <summary>
+ When a navigation is committed, it should have a non-null NavigationContext.
+ This histogram counts the frequency of this invariant holding at the time
+ when a new navigation is committed. It is used to verify the effectiveness
+ of code fixes because this issue is not currently reproducible in testing
+ (http://crbug.com/864769). True means a non-null NavigationContext is
+ present.
+ </summary>
+</histogram>
+
<histogram name="IOS.CommittedURLMatchesCurrentItem" enum="Boolean">
<owner>danyao@chromium.org</owner>
<summary>
@@ -40066,6 +42246,31 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="IOS.FinishedNavigationHasContext" enum="Boolean"
+ expires_after="2019-05-01">
+ <owner>danyao@chromium.org</owner>
+ <summary>
+ When a navigation is finished, it should have a non-null NavigationContext.
+ This histogram counts the frequency of this invariant holding at the time
+ when a new navigation is finished. It is used to verify the effectiveness of
+ code fixes because this issue is not currently reproducible in testing
+ (http://crbug.com/864769). True means a non-null NavigationContext is
+ present.
+ </summary>
+</histogram>
+
+<histogram name="IOS.FinishedNavigationHasItem" enum="Boolean"
+ expires_after="2019-05-01">
+ <owner>danyao@chromium.org</owner>
+ <summary>
+ When a navigation is finished, it should have a non-null NavigationItem.
+ This histogram counts the frequency of this invariant holding at the time
+ when a new navigation is finished. It is used to verify the effectiveness of
+ code fixes because this issue is not currently reproducible in testing
+ (http://crbug.com/864769). True means a non-null NavigationItem is present.
+ </summary>
+</histogram>
+
<histogram name="IOS.FinishedURLMatchesCurrentItem" enum="Boolean">
<owner>danyao@chromium.org</owner>
<summary>
@@ -40100,6 +42305,17 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="IOS.MainThreadFreezeDetection.RecoveredAfter" units="ms"
+ expires_after="2019-11-30">
+ <owner>olivierrobin@chromium.org</owner>
+ <summary>
+ The time during which main thread was not responding. 0 if application was
+ killed before recovering. Logged after an action posted on the main thread
+ is not executed immediately. The histogram is sent when the task is finally
+ executed or on next application startup.
+ </summary>
+</histogram>
+
<histogram name="IOS.NTP.Impression" enum="IOSNTPImpression">
<owner>gambard@chromium.org</owner>
<summary>
@@ -40310,6 +42526,21 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="IOS.TabGridMediator.GetActiveTabIDNilWebStateList"
+ enum="BooleanNil" expires_after="2019-05-01">
+ <owner>edchin@chromium.org</owner>
+ <owner>marq@chromium.org</owner>
+ <summary>
+ WebStateList should be guaranteed to be non-nil during a
+ WebStateListObserver callback. This histogram counts the frequency of this
+ invariant holding when GetActiveTabID() is invoked in TabGridMediator.
+ Violations of this invariant is the cause of real-world crashes
+ (https://crbug.com/877792), which were not currently reproducible in
+ testing. This histogram is used to retain visibility of the severity of this
+ issue, while preventing the crashes with a no-op.
+ </summary>
+</histogram>
+
<histogram name="IOS.TabSwitcher.PageChangeInteraction"
enum="IOSTabSwitcherPageChangeInteraction">
<owner>marq@chromium.org</owner>
@@ -40329,6 +42560,15 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="IOS.WKWebViewLinkPreview" enum="IOSWKWebViewLinkPreviewAction"
+ expires_after="M73">
+ <owner>kkhorimoto@chromium.org</owner>
+ <owner>pkl@chromium.org</owner>
+ <summary>
+ Records the user actions related to the WKWebView 3D touch link preview API.
+ </summary>
+</histogram>
+
<histogram name="IPC.AttachmentBrokerPrivileged.BrokerAttachmentError"
enum="IPCAttachmentBrokerPrivilegedBrokerAttachmentError">
<owner>erikchen@chromium.org</owner>
@@ -40608,6 +42848,15 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="KeyboardAccessory.GeneratedPasswordDialog"
+ enum="BooleanAccepted">
+ <owner>ioanap@chromium.org</owner>
+ <owner>vasilii@chromium.org</owner>
+ <summary>
+ Android only. Records the interaction with the password generation dialog.
+ </summary>
+</histogram>
+
<histogram name="Kiosk.Launch.CryptohomeFailure" enum="LoginFailureReason">
<owner>xiyuan@chromium.org</owner>
<summary>Tracks cryptohome failure during kiosk launch.</summary>
@@ -41533,6 +43782,14 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="LocalStorageContext.OnConnectionDestroyed" enum="Boolean">
+ <owner>mek@chromium.org</owner>
+ <owner>dullweber@chromium.org</owner>
+ <summary>
+ Recorded when the database connection is closed unexpectedly.
+ </summary>
+</histogram>
+
<histogram name="LocalStorageContext.OpenError" enum="LocalStorageOpenError">
<owner>mek@chromium.org</owner>
<summary>
@@ -41877,6 +44134,70 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="ManualFallback.PresentedOptions.AllPasswords"
+ units="Credentials" expires_after="2019-12-31">
+ <owner>javierrobles@chromium.org</owner>
+ <summary>
+ Tracks the number of credentials presented to the user in the &quot;Use
+ other password...&quot; view in Manual Fallback. This is logged everytime
+ the user opens this view.
+ </summary>
+</histogram>
+
+<histogram name="ManualFallback.PresentedOptions.CreditCards" units="Cards"
+ expires_after="2019-12-31">
+ <owner>javierrobles@chromium.org</owner>
+ <summary>
+ Tracks the number of cards presented to the user in Manual Fallback. This is
+ logged everytime the user opens this view.
+ </summary>
+</histogram>
+
+<histogram name="ManualFallback.PresentedOptions.Passwords" units="Credentials"
+ expires_after="2019-12-31">
+ <owner>javierrobles@chromium.org</owner>
+ <summary>
+ Tracks the number of credentials presented to the user in the Passwords
+ Manual Fallback view. This is logged everytime the user opens this view.
+ </summary>
+</histogram>
+
+<histogram name="ManualFallback.PresentedOptions.Profiles" units="Profiles"
+ expires_after="2019-12-31">
+ <owner>javierrobles@chromium.org</owner>
+ <summary>
+ Tracks the number of profiles presented to the user in Manual Fallback. This
+ is logged everytime the user opens this view.
+ </summary>
+</histogram>
+
+<histogram name="ManualFallback.VisibleSuggestions.OpenCreditCards"
+ units="Suggestions" expires_after="2019-12-31">
+ <owner>javierrobles@chromium.org</owner>
+ <summary>
+ Tracks the number of autofill suggestions present when the user taps on the
+ credit card button in manual fallback.
+ </summary>
+</histogram>
+
+<histogram name="ManualFallback.VisibleSuggestions.OpenPasswords"
+ units="Suggestions" expires_after="2019-12-31">
+ <owner>javierrobles@chromium.org</owner>
+ <summary>
+ Tracks the number of password suggestions present when the user taps on the
+ password button in manual fallback.
+ </summary>
+</histogram>
+
+<histogram name="ManualFallback.VisibleSuggestions.OpenProfiles"
+ units="Suggestions" expires_after="2019-12-31">
+ <owner>javierrobles@chromium.org</owner>
+ <summary>
+ Tracks the number of autofill suggestions present when the user taps on the
+ profiles (address) button in manual fallback.
+ </summary>
+</histogram>
+
<histogram name="Media.AcceleratedCompositingActive" enum="BooleanSuccess">
<obsolete>
Deprecated as of July 21, 2014.
@@ -41969,6 +44290,16 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Media.Audible.CloseNewestToExitConcurrentPlayback"
+ enum="ExitConcurrentPlaybackContents" expires_after="2019-05-30">
+ <owner>beccahughes@chromium.org</owner>
+ <owner>media-dev@chromium.org</owner>
+ <summary>
+ Records when an audible tab is closed and we now only have one audible tab
+ open.
+ </summary>
+</histogram>
+
<histogram name="Media.Audible.ConcurrentTabsTime" units="ms">
<owner>mlamouri@chromium.org</owner>
<summary>
@@ -42492,7 +44823,8 @@ uploading your change for review.
</summary>
</histogram>
-<histogram name="Media.Audio.Processing.CaptureDelayVarianceMs" units="ms">
+<histogram name="Media.Audio.Processing.CaptureDelayVarianceMs"
+ units="ms squared">
<owner>ossu@chromium.org, grunell@chromium.org</owner>
<summary>
The variance of the capture delay in milliseconds (see
@@ -42510,7 +44842,8 @@ uploading your change for review.
</summary>
</histogram>
-<histogram name="Media.Audio.Processing.RenderDelayVarianceMs" units="ms">
+<histogram name="Media.Audio.Processing.RenderDelayVarianceMs"
+ units="ms squared">
<owner>ossu@chromium.org, grunell@chromium.org</owner>
<summary>
The variance of the render delay in milliseconds (see
@@ -42527,7 +44860,8 @@ uploading your change for review.
</summary>
</histogram>
-<histogram name="Media.Audio.Processing.TotalDelayVarianceMs" units="ms">
+<histogram name="Media.Audio.Processing.TotalDelayVarianceMs"
+ units="ms squared">
<owner>ossu@chromium.org, grunell@chromium.org</owner>
<summary>
The variance of the total delay in milliseconds (see
@@ -42902,6 +45236,27 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Media.Audio.TrackAudioRenderer.DeviceStatus"
+ enum="OutputDeviceStatus" expires_after="2019-06-01">
+ <owner>olka@chromium.org</owner>
+ <owner>maxmorin@chromium.org</owner>
+ <summary>
+ Device status received during TrackAudioRenderer initialization. This is a
+ specific case of Media.Audio.Render.OutputDeviceStatus histogram.
+ </summary>
+</histogram>
+
+<histogram name="Media.Audio.TrackAudioRenderer.SwitchDeviceStatus"
+ enum="OutputDeviceStatus" expires_after="2019-06-01">
+ <owner>olka@chromium.org</owner>
+ <owner>maxmorin@chromium.org</owner>
+ <summary>
+ Device status received by TrackAudioRenderer when switching the output
+ device. This is a specific case of Media.Audio.Render.OutputDeviceStatus
+ histogram.
+ </summary>
+</histogram>
+
<histogram name="Media.Audio.UptimeMac" units="hours">
<obsolete>
Deprecated as of Aug 2018.
@@ -42913,6 +45268,27 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Media.Audio.WebRTCAudioRenderer.DeviceStatus"
+ enum="OutputDeviceStatus" expires_after="2019-06-01">
+ <owner>olka@chromium.org</owner>
+ <owner>maxmorin@chromium.org</owner>
+ <summary>
+ Device status received during WebRTCAudioRenderer initialization. This is a
+ specific case of Media.Audio.Render.OutputDeviceStatus histogram.
+ </summary>
+</histogram>
+
+<histogram name="Media.Audio.WebRTCAudioRenderer.SwitchDeviceStatus"
+ enum="OutputDeviceStatus" expires_after="2019-06-01">
+ <owner>olka@chromium.org</owner>
+ <owner>maxmorin@chromium.org</owner>
+ <summary>
+ Device status received by WebRTCAudioRenderer when switching the output
+ device. This is a specific case of Media.Audio.Render.OutputDeviceStatus
+ histogram.
+ </summary>
+</histogram>
+
<histogram name="Media.AudioBitsPerChannel">
<owner>dalecurtis@chromium.org</owner>
<summary>Bits per channel of HTML5 audio sample data.</summary>
@@ -43182,6 +45558,18 @@ uploading your change for review.
<summary>Captures statistics for various AudioRendererImpl events.</summary>
</histogram>
+<histogram name="Media.AudioRendererImpl.SinkStatus" enum="OutputDeviceStatus">
+ <owner>olka@chromium.org</owner>
+ <owner>dalecurtis@chromium.org</owner>
+ <summary>
+ Status of audio sink used by AudioRendererImpl. If not OK, a NullAudioSink
+ will be used for audio output instead. This is logged for every call to
+ AudioRendererImpl::Initialize, which generally occurs once per active audio
+ session (i.e., between a play and pause). If audio track changes are ever
+ enabled, it may additionally be called for every audio track change.
+ </summary>
+</histogram>
+
<histogram name="Media.AudioRendererIpcStreams">
<obsolete>
Deprecated 02/2017. No longer needed.
@@ -43303,6 +45691,11 @@ uploading your change for review.
<histogram name="Media.AudioService.ObservedProcessTerminationStatus"
enum="AudioServiceProcessTerminationStatus">
+ <obsolete>
+ Deprecated 10/2018. Covered by the more generic stats
+ ChildProcess.Crashed.UtilityProcessHash and
+ ChildProcess.Launched.UtilityProcessHash.
+ </obsolete>
<owner>marinaciocea@chromium.org</owner>
<owner>maxmorin@chromium.org</owner>
<owner>olka@chromium.org</owner>
@@ -43489,6 +45882,16 @@ uploading your change for review.
<summary>Kb read by from network into MultiBuffer cache.</summary>
</histogram>
+<histogram base="true" name="Media.BytesReceived" units="KB"
+ expires_after="2019-10-15">
+ <owner>hubbe@chromium.org</owner>
+ <owner>dalecurtis@chromium.org</owner>
+ <summary>
+ Total number of bytes buffered over the lifetime of a WebMediaPlayer,
+ suffixed by type of playback.
+ </summary>
+</histogram>
+
<histogram name="Media.CacheUseful" enum="BooleanSuccess">
<owner>scherkus@chromium.org</owner>
<summary>
@@ -44183,6 +46586,9 @@ uploading your change for review.
</histogram>
<histogram name="Media.Engagement.ScoreAtStartup" units="%">
+ <obsolete>
+ Deprecated 11/2018 in Issue 900679 as we are no longer using this.
+ </obsolete>
<owner>beccahughes@chromium.org</owner>
<owner>media-dev@chromium.org</owner>
<summary>
@@ -44953,6 +47359,17 @@ uploading your change for review.
<summary>Counts of video decode errors reported to plugin.</summary>
</histogram>
+<histogram base="true" name="Media.PepperVideoDecoderOutputPictureCount"
+ enum="MediaVideoHeight" expires_after="2019-11-01">
+ <owner>sandersd@chromium.org</owner>
+ <owner>dalecurtis@chromium.org</owner>
+ <summary>
+ Counts every output picture emitted to a PPAPI client, categorized by size
+ and decoder type. Flash will only use platform decoders, but NaCl clients
+ can use either decoder type.
+ </summary>
+</histogram>
+
<histogram name="Media.PepperVideoDecoderPictureCount">
<owner>ihf@chromium.org</owner>
<owner>posciak@chromium.org</owner>
@@ -45476,6 +47893,16 @@ uploading your change for review.
</summary>
</histogram>
+<histogram base="true" name="Media.TimeToFirstFrame.SRC.ManyVideos" units="ms">
+ <owner>hubbe@chromium.org</owner>
+ <owner>media-dev@chromium.org</owner>
+ <summary>
+ Time in milliseconds from when WebMediaPlayerImpl starts loading until the
+ first video frame has been shown IFF six or more videos are loading in
+ parallel.
+ </summary>
+</histogram>
+
<histogram base="true" name="Media.TimeToMetadata" units="ms">
<owner>dalecurtis@chromium.org</owner>
<owner>media-dev@chromium.org</owner>
@@ -45775,6 +48202,9 @@ uploading your change for review.
</histogram>
<histogram name="Media.Video.KeyFrameDistance" units="ms">
+ <obsolete>
+ Deprecated as of 11/2018 -- no longer used and expensive to monitor.
+ </obsolete>
<owner>avayvod@chromium.org</owner>
<owner>dalecurtis@chromium.org</owner>
<summary>
@@ -46193,14 +48623,6 @@ uploading your change for review.
<summary>Video frame color space. Emitted for each video frame.</summary>
</histogram>
-<histogram name="Media.VideoFrameColorSpace" enum="VideoFrameColorSpace">
- <owner>mcasas@chromium.org</owner>
- <owner>watk@chromium.org</owner>
- <summary>
- Color space or range used in HTML5 video. Emitted on video load.
- </summary>
-</histogram>
-
<histogram name="Media.VideoFramePixelFormat" enum="VideoFramePixelFormat">
<obsolete>
Replaced by Media.VideoPixelFormatUnion 08/2015.
@@ -46348,6 +48770,9 @@ uploading your change for review.
</histogram>
<histogram name="Media.VpxVideoDecoder.Vp9DecodeTime" units="ms">
+ <obsolete>
+ Deprecated 11/2018 -- shows nothing interesting; it's been static for years.
+ </obsolete>
<owner>dalecurtis@chromium.org</owner>
<summary>Amount of time taken to decode one VP9 frame.</summary>
</histogram>
@@ -46404,6 +48829,9 @@ uploading your change for review.
<histogram name="Media.WebAudioSourceProvider.SinkStatus"
enum="OutputDeviceStatus">
+ <obsolete>
+ Replaced by Media.AudioRendererImpl.SinkStatus in Nov 2018.
+ </obsolete>
<owner>olka@chromium.org</owner>
<owner>dalecurtis@chromium.org</owner>
<summary>
@@ -46975,6 +49403,18 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Memory.AudioService.ResidentSet" units="MiB"
+ expires_after="2019-01-31">
+ <owner>fdoray@chromium.org</owner>
+ <summary>
+ The size of the resident memory in a audio service process. This is
+ influenced by factors we control (e.g. memory that is not accessed can be
+ swapped) and factors we don't control (e.g. an unrelated process using a lot
+ of memory can force memory in our process to be swapped). Recorded once per
+ UMA ping on Windows/Linux/ChromeOS/Android.
+ </summary>
+</histogram>
+
<histogram name="Memory.AudioService.SharedMemoryFootprint" units="MB">
<owner>marinaciocea@chromium.org</owner>
<owner>maxmorin@chromium.org</owner>
@@ -47060,6 +49500,18 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Memory.Browser.ResidentSet" units="MiB"
+ expires_after="2019-01-31">
+ <owner>fdoray@chromium.org</owner>
+ <summary>
+ The size of the resident memory in the browser process. This is influenced
+ by factors we control (e.g. memory that is not accessed can be swapped) and
+ factors we don't control (e.g. an unrelated process using a lot of memory
+ can force memory in our process to be swapped). Recorded once per UMA ping
+ on Windows/Linux/ChromeOS/Android.
+ </summary>
+</histogram>
+
<histogram name="Memory.Browser.SharedMemoryFootprint" units="MB">
<owner>erikchen@chromium.org</owner>
<summary>
@@ -47453,6 +49905,60 @@ uploading your change for review.
</summary>
</histogram>
+<histogram
+ name="Memory.Experimental.OomIntervention.ReducedBlinkUsageAfter10secs"
+ units="MB">
+ <owner>yuzus@chromium.org</owner>
+ <summary>
+ Reduced amount of blink usage after 10 seconds of intervention.
+ </summary>
+</histogram>
+
+<histogram
+ name="Memory.Experimental.OomIntervention.ReducedBlinkUsageAfter20secs"
+ units="MB">
+ <owner>yuzus@chromium.org</owner>
+ <summary>
+ Reduced amount of blink usage after 20 seconds of intervention.
+ </summary>
+</histogram>
+
+<histogram
+ name="Memory.Experimental.OomIntervention.ReducedBlinkUsageAfter30secs"
+ units="MB">
+ <owner>yuzus@chromium.org</owner>
+ <summary>
+ Reduced amount of blink usage after 30 seconds of intervention.
+ </summary>
+</histogram>
+
+<histogram
+ name="Memory.Experimental.OomIntervention.ReducedRendererPMFAfter10secs"
+ units="MB">
+ <owner>yuzus@chromium.org</owner>
+ <summary>
+ Reduced amount of renderer pmf after 10 seconds of intervention.
+ </summary>
+</histogram>
+
+<histogram
+ name="Memory.Experimental.OomIntervention.ReducedRendererPMFAfter20secs"
+ units="MB">
+ <owner>yuzus@chromium.org</owner>
+ <summary>
+ Reduced amount of renderer pmf after 20 seconds of intervention.
+ </summary>
+</histogram>
+
+<histogram
+ name="Memory.Experimental.OomIntervention.ReducedRendererPMFAfter30secs"
+ units="MB">
+ <owner>yuzus@chromium.org</owner>
+ <summary>
+ Reduced amount of renderer pmf after 30 seconds of intervention.
+ </summary>
+</histogram>
+
<histogram name="Memory.Experimental.OomIntervention.RendererBlinkUsage"
units="MB">
<owner>yuzus@chromium.org</owner>
@@ -47732,6 +50238,18 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Memory.Extension.ResidentSet" units="MiB"
+ expires_after="2019-01-31">
+ <owner>fdoray@chromium.org</owner>
+ <summary>
+ The size of the resident memory in an extension process. This is influenced
+ by factors we control (e.g. memory that is not accessed can be swapped) and
+ factors we don't control (e.g. an unrelated process using a lot of memory
+ can force memory in our process to be swapped). Recorded once per UMA ping
+ on Windows/Linux/ChromeOS/Android.
+ </summary>
+</histogram>
+
<histogram name="Memory.Extension.SharedMemoryFootprint" units="MB">
<owner>erikchen@chromium.org</owner>
<owner>ssid@chromium.org</owner>
@@ -47800,6 +50318,17 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Memory.Gpu.ResidentSet" units="MiB" expires_after="2019-01-31">
+ <owner>fdoray@chromium.org</owner>
+ <summary>
+ The size of the resident memory in the GPU process. This is influenced by
+ factors we control (e.g. memory that is not accessed can be swapped) and
+ factors we don't control (e.g. an unrelated process using a lot of memory
+ can force memory in our process to be swapped). Recorded once per UMA ping
+ on Windows/Linux/ChromeOS/Android.
+ </summary>
+</histogram>
+
<histogram name="Memory.Gpu.SharedMemoryFootprint" units="MB">
<owner>erikchen@chromium.org</owner>
<owner>ssid@chromium.org</owner>
@@ -47990,6 +50519,83 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Memory.ParkableString.CompressedSizeKb" units="KB">
+ <owner>lizeb@chromium.org</owner>
+ <summary>
+ Total size of compressed ParkableStrings, in KB. Recorded at the same time
+ as &quot;Memory.ParkableString.TotalSizeKb&quot;.
+ </summary>
+</histogram>
+
+<histogram name="Memory.ParkableString.Compression.Latency"
+ units="microseconds">
+ <owner>lizeb@chromium.org</owner>
+ <summary>Time to compress a parkable string, in ms.</summary>
+</histogram>
+
+<histogram name="Memory.ParkableString.Compression.SizeKb" units="KB">
+ <owner>lizeb@chromium.org</owner>
+ <summary>
+ Size of a compressed parkable string, recorded at compression time.
+ </summary>
+</histogram>
+
+<histogram name="Memory.ParkableString.Compression.ThroughputMBps" units="MBps">
+ <owner>lizeb@chromium.org</owner>
+ <summary>
+ Size of a compressed parkable string, recorded at compression time.
+ </summary>
+</histogram>
+
+<histogram name="Memory.ParkableString.CompressionRatio" units="KB">
+ <owner>lizeb@chromium.org</owner>
+ <summary>
+ Average compression ratio, 100 * compressed_size / initial_size, for all
+ compressed ParkableStrings. Recorded at the same time as
+ &quot;Memory.ParkableString.TotalSizeKb&quot;.
+ </summary>
+</histogram>
+
+<histogram name="Memory.ParkableString.Decompression.Latency"
+ units="microseconds">
+ <owner>lizeb@chromium.org</owner>
+ <summary>Time to decompress a parkable string, in ms.</summary>
+</histogram>
+
+<histogram name="Memory.ParkableString.Decompression.SizeKb" units="KB">
+ <owner>lizeb@chromium.org</owner>
+ <summary>
+ Original size of a compressed parkable string, recorded at decompression
+ time.
+ </summary>
+</histogram>
+
+<histogram name="Memory.ParkableString.Decompression.ThroughputMBps"
+ units="MBps">
+ <owner>lizeb@chromium.org</owner>
+ <summary>
+ Original size of a compressed parkable string, recorded at decompression
+ time.
+ </summary>
+</histogram>
+
+<histogram name="Memory.ParkableString.SavingsKb" units="KB">
+ <owner>lizeb@chromium.org</owner>
+ <summary>
+ Sum of memory saved by compression, in KB. Recorded at the same time as
+ &quot;Memory.ParkableString.TotalSizeKb&quot;.
+ </summary>
+</histogram>
+
+<histogram name="Memory.ParkableString.TotalSizeKb" units="KB">
+ <owner>lizeb@chromium.org</owner>
+ <summary>
+ Total size of ParkableStrings assuming no compression, in KB. Recorded 30s
+ after compression was triggered, provided that the renderer stayed
+ backgrounded.
+ </summary>
+</histogram>
+
<histogram name="Memory.PepperFlashPlugin" units="KB">
<obsolete>
Deprecated 11/2017. No direct replacement.
@@ -48169,6 +50775,18 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Memory.Renderer.ResidentSet" units="MiB"
+ expires_after="2019-01-31">
+ <owner>fdoray@chromium.org</owner>
+ <summary>
+ The size of the resident memory in a renderer process. This is influenced by
+ factors we control (e.g. memory that is not accessed can be swapped) and
+ factors we don't control (e.g. an unrelated process using a lot of memory
+ can force memory in our process to be swapped). Recorded once per UMA ping
+ on Windows/Linux/ChromeOS/Android.
+ </summary>
+</histogram>
+
<histogram name="Memory.Renderer.SharedMemoryFootprint" units="MB">
<owner>erikchen@chromium.org</owner>
<owner>ssid@chromium.org</owner>
@@ -48792,6 +51410,18 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Memory.Total.ResidentSet" units="MiB"
+ expires_after="2019-01-31">
+ <owner>fdoray@chromium.org</owner>
+ <summary>
+ The size of the resident memory in all processes. This is influenced by
+ factors we control (e.g. memory that is not accessed can be swapped) and
+ factors we don't control (e.g. an unrelated process using a lot of memory
+ can force memory in our process to be swapped). Recorded once per UMA ping
+ on Windows/Linux/ChromeOS/Android.
+ </summary>
+</histogram>
+
<histogram name="Memory.Total.SharedMemoryFootprint" units="MB">
<owner>erikchen@chromium.org</owner>
<owner>ssid@chromium.org</owner>
@@ -48844,6 +51474,18 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Memory.Utility.ResidentSet" units="MiB"
+ expires_after="2019-01-31">
+ <owner>fdoray@chromium.org</owner>
+ <summary>
+ The size of the resident memory in a utility process. This is influenced by
+ factors we control (e.g. memory that is not accessed can be swapped) and
+ factors we don't control (e.g. an unrelated process using a lot of memory
+ can force memory in our process to be swapped). Recorded once per UMA ping
+ on Windows/Linux/ChromeOS/Android.
+ </summary>
+</histogram>
+
<histogram name="Memory.Utility.SharedMemoryFootprint" units="MB">
<owner>jam@chromium.org</owner>
<summary>
@@ -49030,6 +51672,9 @@ uploading your change for review.
</histogram>
<histogram name="MessageLoop.DelayedTaskQueueForUI.PendingTasksCountOnIdle">
+ <obsolete>
+ Deprecated as of 11/2018.
+ </obsolete>
<owner>gab@chromium.org</owner>
<summary>
The size of the delayed task queue when the loop becomes idle on a UI
@@ -49239,6 +51884,16 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="MobileDownload.InterruptedDownloadsRemovedFromHistory"
+ units="downloads" expires_after="M73">
+ <owner>qinmin@chromium.org</owner>
+ <owner>dtrainor@chromium.org</owner>
+ <summary>
+ Android: Records the number of interrupted download that are cleaned up from
+ the history, after loading all the downloads from the history DB on startup.
+ </summary>
+</histogram>
+
<histogram name="MobileDownload.InterruptionsCount">
<owner>qinmin@chromium.org</owner>
<summary>
@@ -49443,6 +52098,14 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="MobileOmnibox.PopupOpenDuration" units="ms">
+ <owner>stkhapugin@chromium.org</owner>
+ <summary>
+ Recorded when the omnibox popup is closed. Indicates the duration it was
+ open.
+ </summary>
+</histogram>
+
<histogram name="MobileOmnibox.PressedClipboardSuggestionAge" units="ms">
<owner>jif@chromium.org</owner>
<owner>mpearson@chromium.org</owner>
@@ -49547,7 +52210,7 @@ uploading your change for review.
</histogram>
<histogram name="MobileStartup.LoadedHomepageOnColdStart" enum="BooleanIsNtp"
- expires_after="M72">
+ expires_after="M75">
<owner>tedchoc@chromium.org</owner>
<owner>danielpark@chromium.org</owner>
<owner>twellington@chromium.org</owner>
@@ -50148,6 +52811,9 @@ uploading your change for review.
</histogram>
<histogram name="MPArch.RWH_OnMsgResizeOrRepaintACK">
+ <obsolete>
+ Deprecated 09/2018 as message no longer exists.
+ </obsolete>
<owner>fsamuel@chromium.org</owner>
<owner>piman@chromium.org</owner>
<summary>
@@ -50198,17 +52864,284 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="MultiDevice.BetterTogetherSuite.MultiDeviceFeatureState"
+ enum="MultiDevice_FeatureState">
+ <owner>hansberry@chromium.org</owner>
+ <owner>khorimoto@chromium.org</owner>
+ <summary>
+ Indicates the feature state of the Better Together Suite feature. This
+ metric is emitted to at the creation of the user session (when the user logs
+ in), and when feature state updates occur.
+ </summary>
+</histogram>
+
+<histogram name="MultiDevice.DeviceSyncService.FindEligibleDevices.Result"
+ enum="BooleanSuccess">
+ <owner>hansberry@chromium.org</owner>
+ <owner>khorimoto@chromium.org</owner>
+ <summary>Result of trying to find eligible devices.</summary>
+</histogram>
+
+<histogram
+ name="MultiDevice.DeviceSyncService.FindEligibleDevices.Result.FailureReason"
+ enum="MultiDevice_DeviceSyncService_DeviceSyncRequestFailureReason">
+ <owner>hansberry@chromium.org</owner>
+ <owner>khorimoto@chromium.org</owner>
+ <summary>
+ Breaks down the percentages of reasons when failure occurs on
+ FindEligibleDevices.
+ </summary>
+</histogram>
+
+<histogram name="MultiDevice.DeviceSyncService.ForceEnrollmentNow.Result"
+ enum="MultiDevice_DeviceSyncService_ForceCryptAuthOperationResult">
+ <owner>hansberry@chromium.org</owner>
+ <owner>khorimoto@chromium.org</owner>
+ <summary>Result for when ForceEnrollmentNow is called.</summary>
+</histogram>
+
+<histogram name="MultiDevice.DeviceSyncService.ForceSyncNow.Result"
+ enum="MultiDevice_DeviceSyncService_ForceCryptAuthOperationResult">
+ <owner>hansberry@chromium.org</owner>
+ <owner>khorimoto@chromium.org</owner>
+ <summary>Result for when ForceSyncNow is called.</summary>
+</histogram>
+
+<histogram
+ name="MultiDevice.DeviceSyncService.SetSoftwareFeatureState.Disable.FailedFeature"
+ enum="MultiDevice_DeviceSyncService_Features">
+ <owner>hansberry@chromium.org</owner>
+ <owner>khorimoto@chromium.org</owner>
+ <summary>
+ Breaks down which features failed when attempted to disable.
+ </summary>
+</histogram>
+
+<histogram
+ name="MultiDevice.DeviceSyncService.SetSoftwareFeatureState.Enable.FailedFeature"
+ enum="MultiDevice_DeviceSyncService_Features">
+ <owner>hansberry@chromium.org</owner>
+ <owner>khorimoto@chromium.org</owner>
+ <summary>Breaks down which features failed when attempted to enable.</summary>
+</histogram>
+
+<histogram name="MultiDevice.DeviceSyncService.SetSoftwareFeatureState.Result"
+ enum="BooleanSuccess">
+ <owner>hansberry@chromium.org</owner>
+ <owner>khorimoto@chromium.org</owner>
+ <summary>Result of enabling and disabling features for devices.</summary>
+</histogram>
+
+<histogram
+ name="MultiDevice.DeviceSyncService.SetSoftwareFeatureState.Result.FailureReason"
+ enum="MultiDevice_DeviceSyncService_DeviceSyncRequestFailureReason">
+ <owner>hansberry@chromium.org</owner>
+ <owner>khorimoto@chromium.org</owner>
+ <summary>
+ Breaks down the percentages of reasons when failure occurs on
+ SetSoftwareFeatureState.
+ </summary>
+</histogram>
+
+<histogram name="MultiDevice.ForgetHostConfirmed"
+ enum="MultiDevice_VerifyAndForgetHostConfirmationState">
+ <owner>hansberry@chromium.org</owner>
+ <owner>khorimoto@chromium.org</owner>
+ <summary>
+ Compares when the Forget Host Button is pressed and when setup completes.
+ </summary>
+</histogram>
+
+<histogram name="MultiDevice.PostOOBESetupFlow.PageShown"
+ enum="MultiDevice_PostOOBESetupFlow_Page">
+ <owner>hansberry@chromium.org</owner>
+ <owner>khorimoto@chromium.org</owner>
+ <summary>
+ Provides a count of how many times each page of the MultiDevice setup flow
+ was reached. This allows analysis of user dropoff between subsequent pages.
+
+ The formula &quot;Success page&quot; / &quot;Start page&quot; provides the
+ overall &quot;success rate&quot; of the MultiDevice setup flow, at a quick
+ glance.
+
+ The sum of each bucket's count is not meaningful.
+ </summary>
+</histogram>
+
+<histogram
+ name="MultiDevice.SecureChannel.BLE.GattConnectionToAuthentication.EffectiveSuccessRateWithRetries"
+ enum="BooleanSuccess">
+ <owner>hansberry@chromium.org</owner>
+ <owner>khorimoto@chromium.org</owner>
+ <summary>
+ A histogram measuring the success rate of authenticating a BLE channel once
+ a GATT connection has been established. This metric measures the effective
+ rate; i.e., a failure followed by a successful retry is counted as a
+ success.
+ </summary>
+</histogram>
+
+<histogram
+ name="MultiDevice.SecureChannel.BLE.Performance.ConnectionToAuthenticationDuration.Background"
+ units="ms">
+ <owner>hansberry@chromium.org</owner>
+ <owner>khorimoto@chromium.org</owner>
+ <summary>
+ A time histogram measuring the time from the moment a GATT connection is
+ made to the remote device, to the moment that an authenticated channel is
+ established with the remote device.
+
+ In this context, &quot;background&quot; refers to the BLE advertising scheme
+ under which the remote device is persistently advertising &quot;in the
+ background&quot; at low power.
+ </summary>
+</histogram>
+
+<histogram
+ name="MultiDevice.SecureChannel.BLE.Performance.ReceiveAdvertisementToConnectionDuration.Background"
+ units="ms">
+ <owner>hansberry@chromium.org</owner>
+ <owner>khorimoto@chromium.org</owner>
+ <summary>
+ A time histogram measuring the time from the moment a background
+ advertisement is received, to the moment that a GATT connection is made to
+ the remote device.
+
+ In this context, &quot;background&quot; refers to the BLE advertising scheme
+ under which the remote device is persistently advertising &quot;in the
+ background&quot; at low power.
+ </summary>
+</histogram>
+
+<histogram
+ name="MultiDevice.SecureChannel.BLE.Performance.StartScanToAuthenticationDuration.Background"
+ units="ms">
+ <owner>hansberry@chromium.org</owner>
+ <owner>khorimoto@chromium.org</owner>
+ <summary>
+ A time histogram measuring the time it takes to create a secure connection
+ to a remote device, from the moment a SecureChannelService client asks for a
+ new connection (start scanning), to the moment that an authenticated channel
+ is established with the remote device.
+
+ In this context, &quot;background&quot; refers to the BLE advertising scheme
+ under which the remote device is persistently advertising &quot;in the
+ background&quot; at low power.
+ </summary>
+</histogram>
+
+<histogram
+ name="MultiDevice.SecureChannel.BLE.Performance.StartScanToConnectionDuration.Background"
+ units="ms">
+ <owner>hansberry@chromium.org</owner>
+ <owner>khorimoto@chromium.org</owner>
+ <summary>
+ A time histogram measuring the time it from the moment SecureChannelService
+ starts scanning for a background advertisement, to the moment that it
+ establishes a GATT connection to the remote device.
+
+ In this context, &quot;background&quot; refers to the BLE advertising scheme
+ under which the remote device is persistently advertising &quot;in the
+ background&quot; at low power.
+ </summary>
+</histogram>
+
+<histogram
+ name="MultiDevice.SecureChannel.BLE.Performance.StartScanToReceiveAdvertisementDuration.Background"
+ units="ms">
+ <owner>hansberry@chromium.org</owner>
+ <owner>khorimoto@chromium.org</owner>
+ <summary>
+ A time histogram measuring the time it from the moment SecureChannelService
+ starts scanning for a background advertisement, to the moment that it
+ receives an advertisement from the expected remote device.
+
+ In this context, &quot;background&quot; refers to the BLE advertising scheme
+ under which the remote device is persistently advertising &quot;in the
+ background&quot; at low power.
+ </summary>
+</histogram>
+
+<histogram
+ name="MultiDevice.SecureChannel.BLE.ReceiveAdvertisementToAuthentication.EffectiveSuccessRateWithRetries"
+ enum="BooleanSuccess">
+ <owner>hansberry@chromium.org</owner>
+ <owner>khorimoto@chromium.org</owner>
+ <summary>
+ A histogram measuring the success rate of authenticating a BLE channel once
+ an advertisement has been received. This metric measures the effective rate;
+ i.e., a failure followed by a successful retry is counted as a success.
+ </summary>
+</histogram>
+
+<histogram
+ name="MultiDevice.SecureChannel.BLE.ReceiveAdvertisementToGattConnection.EffectiveSuccessRateWithRetries"
+ enum="BooleanSuccess">
+ <owner>hansberry@chromium.org</owner>
+ <owner>khorimoto@chromium.org</owner>
+ <summary>
+ A histogram measuring the success rate of creating a GATT connection once an
+ advertisement has been received. This metric measures the effective rate;
+ i.e., a failure followed by a successful retry is counted as a success.
+ </summary>
+</histogram>
+
+<histogram name="MultiDevice.Setup.HostStatus"
+ enum="MultiDevice_Setup_HostStatus">
+ <owner>hansberry@chromium.org</owner>
+ <owner>khorimoto@chromium.org</owner>
+ <summary>
+ Breaks down percentages of host statuses. This metric is emitted to at the
+ creation of the user session (when the user logs in), and when host status
+ updates occur.
+ </summary>
+</histogram>
+
+<histogram name="MultiDevice.VerifyButtonClicked"
+ enum="MultiDevice_VerifyAndForgetHostConfirmationState">
+ <owner>hansberry@chromium.org</owner>
+ <owner>khorimoto@chromium.org</owner>
+ <summary>
+ Compares when the Verify Host Button is pressed to when setup completes.
+ </summary>
+</histogram>
+
+<histogram name="MultiDeviceSetup.OOBE.UserChoice"
+ enum="MultiDeviceSetupOOBEUserChoice">
+ <owner>hansberry@chromium.org</owner>
+ <owner>khorimoto@chromium.org</owner>
+ <owner>hsuregan@chromium.org</owner>
+ <summary>
+ Breaks down the percentage of users who either accepted or declined
+ MultiDevice OOBE setup.
+ </summary>
+</histogram>
+
<histogram name="MultiDeviceSetup_NotificationClicked"
enum="MultiDeviceSetupNotification">
<owner>jordynass@chromium.org</owner>
+ <owner>khorimoto@chromium.org</owner>
<summary>
Counts the number of each MultiDevice setup notification clicked by a user.
+ This metric should be compared with MultiDeviceSetup_NotificationShown.
+ </summary>
+</histogram>
+
+<histogram name="MultiDeviceSetup_NotificationDismissed"
+ enum="MultiDeviceSetupNotification">
+ <owner>hansberry@chromium.org</owner>
+ <owner>khorimoto@chromium.org</owner>
+ <summary>
+ Counts the number of each MultiDevice setup notification dismissed by a
+ user. This metric should be compared with
+ MultiDeviceSetup_NotificationShown.
</summary>
</histogram>
<histogram name="MultiDeviceSetup_NotificationShown"
enum="MultiDeviceSetupNotification">
<owner>jordynass@chromium.org</owner>
+ <owner>khorimoto@chromium.org</owner>
<summary>
Counts the number of each MultiDevice setup notification shown to a user.
</summary>
@@ -50956,6 +53889,9 @@ uploading your change for review.
<histogram name="Navigation.DeferredDocumentLoading.StatesV4"
enum="DocumentStateForDeferredLoadingV4">
+ <obsolete>
+ Deprecated 11/2018 because LazyLoading has real stats now.
+ </obsolete>
<owner>dgrogan@chromium.org</owner>
<summary>
Why and if cross-origin documents would be loaded if we were to defer
@@ -50967,6 +53903,16 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Navigation.DownloadPolicy" enum="NavigationDownloadPolicy"
+ expires_after="2019-11-01">
+ <owner>csharrison@chromium.org</owner>
+ <owner>yaoxia@chromium.org</owner>
+ <summary>
+ When a navigation results in a download, logs the download policy applied to
+ that navigation.
+ </summary>
+</histogram>
+
<histogram name="Navigation.EngagementTime.HTTP" units="ms">
<owner>felt@chromium.org</owner>
<summary>
@@ -51051,6 +53997,18 @@ uploading your change for review.
<summary>Whether the navigation led to a change of process or not.</summary>
</histogram>
+<histogram name="Navigation.LoadIfNecessaryType"
+ enum="NavigationNeedsReloadType">
+ <owner>boliu@chromium.org</owner>
+ <owner>alexmos@chromium.org</owner>
+ <summary>
+ The type of the source of a load from LoadIfNecessary. Recorded when
+ LoadIfNecessary starts a page load. For example, on Android,
+ kRequestedByClient is recorded when user switch back to a tab with a dead
+ renderer, which causes the tab to reload.
+ </summary>
+</histogram>
+
<histogram name="Navigation.MainFrameHasEmbeddedCredentials" enum="Boolean">
<obsolete>
Deprecated 03/2017 in Issue 703460.
@@ -51397,6 +54355,24 @@ uploading your change for review.
</summary>
</histogram>
+<histogram base="true" name="NavigationPredictor.AccuracyActionTaken"
+ enum="NavigationPredictorAccuracyActionTaken">
+ <owner>tbansal@chromium.org</owner>
+ <summary>
+ Tracks the accuracy of the action taken by navigation predictor. Recorded at
+ the time of page click.
+ </summary>
+</histogram>
+
+<histogram base="true" name="NavigationPredictor.ActionTaken"
+ enum="NavigationPredictorActionTaken">
+ <owner>tbansal@chromium.org</owner>
+ <summary>
+ Tracks action taken by navigation predictor. Recorded at the time of page
+ load.
+ </summary>
+</histogram>
+
<histogram name="NavigationSuggestion.Event" enum="NavigationSuggestionEvent">
<owner>meacer@chromium.org</owner>
<summary>
@@ -54212,8 +57188,36 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Net.DNS.Android.AutoDohPrivate" enum="Boolean">
+ <owner>pauljensen@chromium.org</owner>
+ <summary>
+ For devices using Android private DNS, are their DNS servers known to
+ support DNS-over-HTTPS.
+ </summary>
+</histogram>
+
+<histogram name="Net.DNS.Android.AutoDohPublic" enum="Boolean">
+ <owner>pauljensen@chromium.org</owner>
+ <summary>
+ For devices not using Android private DNS, are their DNS servers known to
+ support DNS-over-HTTPS, thus potential candidates for automatic upgrading
+ from regular DNS to DNS-over-HTTPS.
+ </summary>
+</histogram>
+
+<histogram name="Net.DNS.Android.DotExplicit" enum="Boolean">
+ <owner>pauljensen@chromium.org</owner>
+ <summary>
+ For devices using Android private DNS, was their DNS-over-TLS server
+ specified explicitly in their Android settings. When false, they were
+ automatically upgraded from the standard DNS protocol to DNS-over-TLS via
+ auto-detection.
+ </summary>
+</histogram>
+
<histogram name="Net.DNS.DnsTask.ErrorBeforeFallback.Fast" enum="NetErrorCodes">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
Counts of specific error codes returned by DnsTask. Only counts failures
that took less than 10ms, which are probably local failures.
@@ -54221,7 +57225,8 @@ uploading your change for review.
</histogram>
<histogram name="Net.DNS.DnsTask.ErrorBeforeFallback.Slow" enum="NetErrorCodes">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
Counts of specific error codes returned by DnsTask. Only counts failures
that took at least 10ms, which are probably remote failures or connectivity
@@ -54230,7 +57235,8 @@ uploading your change for review.
</histogram>
<histogram name="Net.DNS.DnsTask.Errors" enum="NetErrorCodes">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
Counts of specific error codes returned by DnsTask if a subsequent ProcTask
succeeded.
@@ -54238,7 +57244,8 @@ uploading your change for review.
</histogram>
<histogram name="Net.DNS.DnsTask.FailureTime" units="ms">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
Duration of time taken by DnsTask in resolutions that failed. Excludes time
spent in the subsequent fallback.
@@ -54246,14 +57253,19 @@ uploading your change for review.
</histogram>
<histogram name="Net.DNS.DnsTask.SuccessTime" units="ms">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
Duration of time taken by DnsTask in resolutions that succeeded.
</summary>
</histogram>
<histogram name="Net.DNS.JobQueueTime" units="ms">
- <owner>mgersh@chromium.org</owner>
+ <obsolete>
+ Deprecated 11/2018.
+ </obsolete>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
Time elapsed between the time the HostResolverImpl::Job was created and the
time the Job was started.
@@ -54261,7 +57273,11 @@ uploading your change for review.
</histogram>
<histogram name="Net.DNS.JobQueueTimeAfterChange" units="ms">
- <owner>mgersh@chromium.org</owner>
+ <obsolete>
+ Deprecated 11/2018.
+ </obsolete>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
Time elapsed between the last time the priority of a HostResolverImpl::Job
changed (when a Request was attached or detached) and the time the Job was
@@ -54270,21 +57286,30 @@ uploading your change for review.
</histogram>
<histogram name="Net.DNS.ProcTask.FailureTime" units="ms">
- <owner>mgersh@chromium.org</owner>
+ <obsolete>
+ Deprecated 11/2018.
+ </obsolete>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
Duration of time taken by ProcTask in resolutions that failed.
</summary>
</histogram>
<histogram name="Net.DNS.ProcTask.SuccessTime" units="ms">
- <owner>mgersh@chromium.org</owner>
+ <obsolete>
+ Deprecated 11/2018.
+ </obsolete>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
Duration of time taken by ProcTask in resolutions that succeeded.
</summary>
</histogram>
<histogram name="Net.DNS.ResolveCategory" enum="ResolutionCategory">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
Whether a DNS resolution (single HostResolverImpl::Job) succeeded or failed,
and whether it was speculative.
@@ -54292,7 +57317,8 @@ uploading your change for review.
</histogram>
<histogram name="Net.DNS.ResolveError.Fast" enum="NetErrorCodes">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
For DNS resolutions that failed after less than 10 ms, which are probably
local failures, what error code the jobs failed with.
@@ -54300,7 +57326,8 @@ uploading your change for review.
</histogram>
<histogram name="Net.DNS.ResolveError.Slow" enum="NetErrorCodes">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
For DNS resolutions that failed after at least 10 ms, which are probably
remote failures or connectivity problems, what error code the jobs failed
@@ -54309,7 +57336,8 @@ uploading your change for review.
</histogram>
<histogram name="Net.DNS.ResolveFailureTime" units="ms">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
Duration of time taken by HostResolverImpl::Job in resolutions that failed.
This is the time to resolve a hostname from start to finish. The main
@@ -54318,7 +57346,8 @@ uploading your change for review.
</histogram>
<histogram name="Net.DNS.ResolveSuccessTime" units="ms">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
Duration of time taken by HostResolverImpl::Job in resolutions that
succeeded. This is the time to resolve a hostname from start to finish. The
@@ -54341,7 +57370,8 @@ uploading your change for review.
</histogram>
<histogram name="Net.DNS.TotalTime" units="ms">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
Duration of time since a HostResolverImpl::Resolve request to the time a
result is posted. Excludes canceled, evicted, and aborted requests. Includes
@@ -54350,7 +57380,8 @@ uploading your change for review.
</histogram>
<histogram name="Net.DNS.TotalTimeNotCached" units="ms">
- <owner>mgersh@chromium.org</owner>
+ <owner>pauljensen@chromium.org</owner>
+ <owner>mef@chromium.org</owner>
<summary>
Duration of time since a HostResolverImpl::Resolve request to the time a
result is posted. Excludes canceled, evicted, and aborted requests and
@@ -54359,6 +57390,18 @@ uploading your change for review.
</summary>
</histogram>
+<histogram base="true" name="Net.DNS.TotalTimeTyped" units="ms">
+<!-- Name completed by histogram_suffixes
+ name="DnsTotalTimeType" -->
+
+ <owner>pauljensen@chromium.org</owner>
+ <summary>
+ Duration of time since a HostResolverImpl::Resolve request to the time a
+ result is posted. Excludes canceled, evicted, and aborted requests. Includes
+ cache hits (recorded as 0). Excludes speculative requests.
+ </summary>
+</histogram>
+
<histogram name="Net.DNS_Resolution_And_TCP_Connection_Latency">
<obsolete>
Deprecated- see Net.DNS_Resolution_And_TCP_Connection_Latency2
@@ -54989,6 +58032,18 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Net.FileSVGZLoadCount" enum="BooleanAttempted"
+ expires_after="2019-03-12">
+ <owner>cmumford@chromium.org</owner>
+ <summary>
+ A compressed SVG file was loaded from the file scheme. This is a temporary
+ counter to determine how often (if at all) this feature is used. Recorded
+ during creation of file-request for .svgz resource. See
+ http://crbug.com/857117 for more information. This value will only be
+ recorded in M72 and removed from M73.
+ </summary>
+</histogram>
+
<histogram name="Net.ForceAlternativeService" enum="BooleanForced">
<obsolete>
Data collection ended, corresponding feature removed.
@@ -55002,9 +58057,9 @@ uploading your change for review.
</summary>
</histogram>
-<histogram name="Net.FoundSystemTrustRootsAndroid" enum="Boolean"
- expires_after="2018-08-30">
- <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+<histogram name="Net.FoundSystemTrustRootsAndroid" enum="BooleanFound">
+ <owner>davidben@chromium.org</owner>
+ <owner>rsleevi@chromium.org</owner>
<summary>
Whether or not system installed trust anchors could be distinguished from
user installed trust anchors. Recorded on first certificate verification on
@@ -55230,6 +58285,10 @@ uploading your change for review.
</histogram>
<histogram name="Net.HttpAuthCacheEntriesExaminedWhenNoMatch">
+ <obsolete>
+ Deprecated 10/2018 when changing the cache implementation such that the
+ number of entries examined no longer applies.
+ </obsolete>
<owner>chlily@chromium.org</owner>
<summary>
The number of entries examined (equal to the cache size) when attempting to
@@ -55241,6 +58300,10 @@ uploading your change for review.
</histogram>
<histogram name="Net.HttpAuthCacheLookupByPathPosition">
+ <obsolete>
+ Deprecated 10/2018 when changing the cache implementation such that the
+ lookup position no longer applies.
+ </obsolete>
<owner>asanka@chromium.org</owner>
<summary>
When looking up an HTTP auth cache entry by path, the position (1-indexed)
@@ -55249,6 +58312,10 @@ uploading your change for review.
</histogram>
<histogram name="Net.HttpAuthCacheLookupPosition">
+ <obsolete>
+ Deprecated 10/2018 when changing the cache implementation such that the
+ lookup position no longer applies.
+ </obsolete>
<owner>asanka@chromium.org</owner>
<summary>
When looking up an HTTP auth cache entry by realm, the position (1-indexed)
@@ -56194,6 +59261,9 @@ uploading your change for review.
</histogram>
<histogram name="Net.OSErrorsForGetAddrinfo" enum="ErrorCodesGetaddrinfo_All">
+ <obsolete>
+ Deprecated 11/2018.
+ </obsolete>
<owner>mgersh@chromium.org</owner>
<summary>
Positive error code that was returned by the system library
@@ -56204,6 +59274,9 @@ uploading your change for review.
<histogram name="Net.OSErrorsForGetAddrinfo_Linux"
enum="ErrorCodesGetaddrinfo_Linux">
+ <obsolete>
+ Deprecated 11/2018.
+ </obsolete>
<owner>mgersh@chromium.org</owner>
<summary>
Positive error code that was returned by the system library
@@ -56213,6 +59286,9 @@ uploading your change for review.
<histogram name="Net.OSErrorsForGetAddrinfo_Mac"
enum="ErrorCodesGetaddrinfo_Mac">
+ <obsolete>
+ Deprecated 11/2018.
+ </obsolete>
<owner>mgersh@chromium.org</owner>
<summary>
Positive error code that was returned by the system library
@@ -56222,6 +59298,9 @@ uploading your change for review.
<histogram name="Net.OSErrorsForGetAddrinfo_Win"
enum="ErrorCodesGetaddrinfo_Win">
+ <obsolete>
+ Deprecated 11/2018.
+ </obsolete>
<owner>mgersh@chromium.org</owner>
<summary>
Positive error code that was returned by the system library
@@ -57474,6 +60553,14 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Net.QuicSession.ClosedByPublicReset" enum="Boolean">
+ <owner>wub@chromium.org</owner>
+ <summary>
+ For a QUIC session that is closed by a public reset, this boolean shows
+ whether it is a public reset sent from a Google server or not.
+ </summary>
+</histogram>
+
<histogram name="Net.QuicSession.ClosedDuringInitializeSession" enum="Boolean"
expires_after="2018-08-30">
<owner>rch@chromium.org</owner>
@@ -57578,6 +60665,15 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Net.QuicSession.ConnectionCloseErrorCodeClientGoogle"
+ enum="QuicErrorCodes">
+ <owner>rch@chromium.org</owner>
+ <summary>
+ The QUIC error code which resulted in the connection being closed by the
+ client to a server ending in .google.com.
+ </summary>
+</histogram>
+
<histogram name="Net.QuicSession.ConnectionCloseErrorCodeServer"
enum="QuicErrorCodes">
<owner>rch@chromium.org</owner>
@@ -57587,6 +60683,15 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Net.QuicSession.ConnectionCloseErrorCodeServerGoogle"
+ enum="QuicErrorCodes">
+ <owner>rch@chromium.org</owner>
+ <summary>
+ The QUIC error code which resulted in the connection being closed by the
+ server with a name ending in .google.com.
+ </summary>
+</histogram>
+
<histogram name="Net.QuicSession.ConnectionFlowControlBlocked"
enum="BooleanBlocked">
<owner>rch@chromium.org</owner>
@@ -58432,6 +61537,25 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Net.QuicStreamFactory.AttemptMigrationBeforeHandshake"
+ enum="BooleanAttempted" expires_after="2020-11-01">
+ <owner>zhongyi@chromium.org</owner>
+ <summary>
+ Records if a new connection on the alternate network is attempted when a
+ connection fails before handshake is confirmed.
+ </summary>
+</histogram>
+
+<histogram
+ name="Net.QuicStreamFactory.AttemptMigrationBeforeHandshake.FailedConnectionType"
+ enum="NetworkConnectionType" expires_after="2020-12-01">
+ <owner>zhongyi@chromium.org</owner>
+ <summary>
+ Connection type of the default network when the connection fails with
+ handshake not confirmed.
+ </summary>
+</histogram>
+
<histogram name="Net.QuicStreamFactory.BadPacketLossEvents5"
enum="QuicBadPacketLossEvents">
<owner>rch@chromium.org</owner>
@@ -58442,6 +61566,16 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Net.QuicStreamFactory.ConnectionOnNonDefaultNetwork"
+ enum="BooleanSuccess" expires_after="2020-12-01">
+ <owner>zhongyi@chromium.org</owner>
+ <summary>
+ Status of the connection on the non-default network when it finishes. A
+ connection may stay on the non-default network during the initial setup when
+ the platform's default network changes.
+ </summary>
+</histogram>
+
<histogram name="Net.QuicStreamFactory.DefaultNetworkMatch"
enum="BooleanMatched">
<owner>zhongyi@chromium.org</owner>
@@ -58462,6 +61596,57 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Net.QuicStreamFactory.MigrationBeforeHandshake"
+ enum="BooleanSuccess" expires_after="2020-11-01">
+ <obsolete>
+ Deprecated 11/2018. Replaced by MigrationBeforeHandshake2.
+ </obsolete>
+ <owner>zhongyi@chromium.org</owner>
+ <summary>
+ Status of the connection which is created for migration before handshake is
+ confirmed.
+ </summary>
+</histogram>
+
+<histogram
+ name="Net.QuicStreamFactory.MigrationBeforeHandshake.NewConnectionType"
+ enum="NetworkConnectionType" expires_after="2020-12-01">
+ <owner>zhongyi@chromium.org</owner>
+ <summary>
+ Connection type of the alternate network when a connection is about to be
+ attempted when the original connection fails on the default network with
+ handshake not confirmed.
+ </summary>
+</histogram>
+
+<histogram name="Net.QuicStreamFactory.MigrationBeforeHandshake2"
+ enum="BooleanSuccess" expires_after="2020-12-01">
+ <owner>zhongyi@chromium.org</owner>
+ <summary>
+ Status of the connection which is created for migration before handshake is
+ confirmed.
+ </summary>
+</histogram>
+
+<histogram name="Net.QuicStreamFactory.MigrationBeforeHandshakeFailedReason"
+ enum="NetErrorCodes" expires_after="2020-12-01">
+ <owner>zhongyi@chromium.org</owner>
+ <summary>
+ The network error code returned when the retried connection on the alternate
+ network before handshake fails.
+ </summary>
+</histogram>
+
+<histogram
+ name="Net.QuicStreamFactory.NetworkChangeDuringMigrationBeforeHandshake"
+ enum="BooleanChanged" expires_after="2020-12-01">
+ <owner>zhongyi@chromium.org</owner>
+ <summary>
+ Captures whether the default network has been changed when the new
+ connection succeeds on the &quot;alternate&quot; network.
+ </summary>
+</histogram>
+
<histogram name="Net.QuicStreamFactory.PublicResetsPostHandshake"
units="resets">
<owner>ckrasic@chromium.org</owner>
@@ -58764,6 +61949,9 @@ uploading your change for review.
<histogram name="Net.ResourceDispatcherHost.RequestMode.Get"
enum="FetchRequestMode" expires_after="M69">
+ <obsolete>
+ Removed from code as of 11/2018.
+ </obsolete>
<owner>yhirano@chromium.org</owner>
<owner>toyoshim@chromium.org</owner>
<summary>
@@ -58774,6 +61962,9 @@ uploading your change for review.
<histogram name="Net.ResourceDispatcherHost.RequestMode.Post"
enum="FetchRequestMode" expires_after="M69">
+ <obsolete>
+ Removed from code as of 11/2018.
+ </obsolete>
<owner>yhirano@chromium.org</owner>
<owner>toyoshim@chromium.org</owner>
<summary>
@@ -58784,6 +61975,9 @@ uploading your change for review.
<histogram name="Net.ResourceDispatcherHost.RequestMode.Post.WithPort"
enum="FetchRequestMode" expires_after="M69">
+ <obsolete>
+ Removed from code as of 11/2018.
+ </obsolete>
<owner>yhirano@chromium.org</owner>
<owner>toyoshim@chromium.org</owner>
<summary>
@@ -60125,8 +63319,19 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Net.SSLTLS13Downgrade" enum="BooleanDowngrade"
+ expires_after="2019-06-30">
+ <owner>svaldez@chromium.org</owner>
+ <owner>davidben@chromium.org</owner>
+ <summary>
+ For each HTTPS connection, whether the TLS 1.3 anti-downgrade mechanism
+ would have fired. This is only recorded if enforcement has been disabled and
+ includes samples from non-1.3 servers. See https://crbug.com/boringssl/226.
+ </summary>
+</histogram>
+
<histogram name="Net.SSLTLS13DowngradeTLS13Experiment" enum="BooleanDowngrade"
- expires_after="2019-03-31">
+ expires_after="2019-06-30">
<owner>svaldez@chromium.org</owner>
<owner>davidben@chromium.org</owner>
<summary>
@@ -60137,6 +63342,27 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Net.SSLTLS13DowngradeType" enum="TLS13DowngradeType"
+ expires_after="2019-06-30">
+ <owner>svaldez@chromium.org</owner>
+ <owner>davidben@chromium.org</owner>
+ <summary>
+ For each HTTPS connection that triggered the TLS 1.3 anti-downgrade
+ mechanism, the key exchange and whether the root was known.
+ </summary>
+</histogram>
+
+<histogram name="Net.SSLTLS13DowngradeTypeTLS13Experiment"
+ enum="TLS13DowngradeType" expires_after="2019-06-30">
+ <owner>svaldez@chromium.org</owner>
+ <owner>davidben@chromium.org</owner>
+ <summary>
+ For each HTTPS connection to the TLS 1.3 experiment server set that
+ triggered the TLS 1.3 anti-downgrade mechanism, the key exchange and whether
+ the root was known.
+ </summary>
+</histogram>
+
<histogram name="Net.SSLv3FallbackToRenegoPatchedServer"
enum="TLSRenegotiationPatched">
<obsolete>
@@ -64922,6 +68148,16 @@ uploading your change for review.
<summary>Histogram for NTP notification promo activity.</summary>
</histogram>
+<histogram name="NewTabPage.Promos.RequestLatency" units="ms"
+ expires_after="M76">
+ <owner>kmilka@chromium.org</owner>
+ <owner>ramyan@chromium.org</owner>
+ <summary>
+ The time it took until a request from the New Tab page for the middle slot
+ promo script was served. Recorded only on the local NTP.
+ </summary>
+</histogram>
+
<histogram name="NewTabPage.RecentTabsPage.TimeVisibleAndroid" units="ms">
<owner>pkotwicz@chromium.org</owner>
<summary>
@@ -66048,6 +69284,15 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Notifications.NotifierType" enum="NotifierType">
+ <owner>tetsui@chromium.org</owner>
+ <owner>toshikikikuchi@google.com</owner>
+ <summary>
+ The number of times a notification was added for the various types of
+ sources.
+ </summary>
+</histogram>
+
<histogram name="Notifications.PerNotificationActions"
enum="NotificationActionType">
<owner>dewittj@chromium.org</owner>
@@ -66225,6 +69470,9 @@ uploading your change for review.
</histogram>
<histogram name="Notifications.Windows.ImageRetainerDestructionTime" units="ms">
+ <obsolete>
+ Obsolete 10/2018 as we no long record this metric.
+ </obsolete>
<owner>chengx@chromium.org</owner>
<owner>finnur@chromium.org</owner>
<owner>peter@chromium.org</owner>
@@ -66236,6 +69484,9 @@ uploading your change for review.
<histogram name="Notifications.Windows.ImageRetainerInitializationTime"
units="ms">
+ <obsolete>
+ Obsolete 10/2018 as we no long record this metric.
+ </obsolete>
<owner>chengx@chromium.org</owner>
<owner>finnur@chromium.org</owner>
<owner>peter@chromium.org</owner>
@@ -66411,6 +69662,9 @@ uploading your change for review.
</histogram>
<histogram name="NQE.BDPComputationKbps.OnECTComputation" units="Kbps">
+ <obsolete>
+ Obsoleted in October 2018
+ </obsolete>
<owner>devdeepray@chromium.org</owner>
<owner>tbansal@chromium.org</owner>
<summary>
@@ -66421,6 +69675,9 @@ uploading your change for review.
</histogram>
<histogram name="NQE.BDPComputationTransportRTT.OnECTComputation" units="ms">
+ <obsolete>
+ Obsoleted in October 2018
+ </obsolete>
<owner>devdeepray@chromium.org</owner>
<owner>tbansal@chromium.org</owner>
<summary>
@@ -66431,6 +69688,9 @@ uploading your change for review.
</histogram>
<histogram name="NQE.BDPKbits.OnECTComputation" units="kbits">
+ <obsolete>
+ Obsoleted in October 2018
+ </obsolete>
<owner>devdeepray@chromium.org</owner>
<owner>tbansal@chromium.org</owner>
<summary>
@@ -68219,6 +71479,21 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="OfflinePages.OfflineUsage.NotOfflineResilient"
+ enum="OfflinePagesOfflineUsage" expires_after="2019-05-31">
+ <owner>carlosk@chromium.org</owner>
+ <owner>dimich@chromium.org</owner>
+ <summary>
+ Counts user-days when Chrome was used in specific ways regarding navigation
+ to online and offline content. Buckets are mutually exclusive so that only
+ one bucket is incremented per reported day.
+
+ This metric is a mirror of OfflinePages.OfflineUsage but it doesn't use any
+ of the offline resilient mechanisms that one has. Ideally both should report
+ exactly the same values but it is expected this one will lose more samples.
+ </summary>
+</histogram>
+
<histogram name="OfflinePages.OnlineOnOpen" enum="Boolean">
<obsolete>
Deprecated 5/2016. Offline pages no longer depend on bookmarks UI.
@@ -68633,6 +71908,36 @@ uploading your change for review.
</summary>
</histogram>
+<histogram base="true" name="OfflinePages.SavePage.AddPageTime" units="ms"
+ expires_after="2019-05-31">
+ <owner>carlosk@chromium.org</owner>
+ <owner>dimich@chromium.org</owner>
+ <summary>
+ Time taken to successfully create the store metadata entry for an offline
+ page archive during the process of saving an offline page.
+ </summary>
+</histogram>
+
+<histogram base="true" name="OfflinePages.SavePage.ComputeDigestTime"
+ units="ms" expires_after="2019-05-31">
+ <owner>carlosk@chromium.org</owner>
+ <owner>dimich@chromium.org</owner>
+ <summary>
+ Time taken to successfully compute the digest of an offline page archive
+ during the process of saving an offline page.
+ </summary>
+</histogram>
+
+<histogram base="true" name="OfflinePages.SavePage.CreateArchiveTime"
+ units="ms" expires_after="2019-05-31">
+ <owner>carlosk@chromium.org</owner>
+ <owner>dimich@chromium.org</owner>
+ <summary>
+ Time taken to successfully create an offline page archive during the process
+ of saving an offline page.
+ </summary>
+</histogram>
+
<histogram name="OfflinePages.SavePage.FreeSpaceMB" units="MB">
<obsolete>
Deprecated as of 03/2018. Replaced by similar metric
@@ -68668,6 +71973,16 @@ uploading your change for review.
</summary>
</histogram>
+<histogram base="true" name="OfflinePages.SavePage.PublishArchiveTime"
+ units="ms" expires_after="2019-05-31">
+ <owner>carlosk@chromium.org</owner>
+ <owner>dimich@chromium.org</owner>
+ <summary>
+ Time taken to successfully move an offline page archive to the public
+ downloads folder during the process of saving an offline page.
+ </summary>
+</histogram>
+
<histogram name="OfflinePages.SavePageCount"
enum="OfflinePagesNamespaceEnumeration">
<owner>romax@chromium.org</owner>
@@ -69100,7 +72415,7 @@ uploading your change for review.
</histogram>
<histogram name="Omnibox.DocumentSuggest.ResultCount" units="count"
- expires_after="M72">
+ expires_after="M74">
<owner>skare@chromium.org</owner>
<summary>
Number of results returned in each document suggestion reply. Logged for
@@ -69109,6 +72424,10 @@ uploading your change for review.
</histogram>
<histogram name="Omnibox.EnteredKeywordMode" enum="OmniboxEnteredKeywordMode">
+ <obsolete>
+ Deprecated 10/2018 and replaced with
+ &quot;Omnibox.EnteredKeywordMode2&quot;.
+ </obsolete>
<owner>mpearson@chromium.org</owner>
<summary>
The number of times users enter keyword hint mode &quot;Search ___
@@ -69116,6 +72435,17 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Omnibox.EnteredKeywordMode2" enum="OmniboxEnteredKeywordMode2">
+ <owner>mpearson@chromium.org</owner>
+ <summary>
+ The new enumeration of how many times users enter keyword hint mode
+ &quot;Search ___ for:&quot; and how. Note that we don't recognize the
+ changing of the keyword itself as entering keyword mode, if the user never
+ left keyword mode e.g. if the user was arrowing around the suggestions, so
+ we'll preserve the original keyword mode entry method in this case.
+ </summary>
+</histogram>
+
<histogram name="Omnibox.FocusToEditTime" units="ms">
<owner>mpearson@chromium.org</owner>
<summary>
@@ -70133,6 +73463,9 @@ uploading your change for review.
</histogram>
<histogram name="OSCrypt.EncryptionKeyOverwritingPreventions">
+ <obsolete>
+ Obsolete as of Chrome 72.
+ </obsolete>
<owner>tsabolcec@google.com</owner>
<owner>vasilii@chromium.com</owner>
<summary>
@@ -70142,7 +73475,7 @@ uploading your change for review.
</histogram>
<histogram name="OSCrypt.GetEncryptionKeyAction" enum="GetEncryptionKeyAction">
- <owner>tsabolcec@google.com</owner>
+ <owner>cfroussios@chromium.org</owner>
<owner>vasilii@chromium.com</owner>
<summary>
Action taken when retrieving the encryption key from the Keychain. This
@@ -70172,6 +73505,14 @@ uploading your change for review.
<summary>Events seen by the OSX NSException swizzle.</summary>
</histogram>
+<histogram name="OSX.FastUserSwitch" enum="OSXFastUserSwitchEvent"
+ expires_after="2019-12-31">
+ <owner>avi@chromium.org</owner>
+ <owner>rsesek@chromium.org</owner>
+ <owner>mark@chromium.org</owner>
+ <summary>Records the Fast User Switching events that occur.</summary>
+</histogram>
+
<histogram name="OSX.Fullscreen.Enter" enum="OSXFullscreenParameters">
<obsolete>
Deprecated as of Chrome 40. See OSX.Fullscreen.Enter.Style,
@@ -70219,6 +73560,9 @@ uploading your change for review.
</histogram>
<histogram name="OSX.Fullscreen.ToolbarStyle" enum="OSXFullscreenToolbarStyle">
+ <obsolete>
+ Deprecated as of 11/2018.
+ </obsolete>
<owner>spqchan@chromium.org</owner>
<summary>
This event is recorded each time a user triggers fullscreen and when the
@@ -70235,6 +73579,14 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="OSX.InstallationFilesystem" enum="OSXFilesystem"
+ expires_after="2019-12-31">
+ <owner>avi@chromium.org</owner>
+ <owner>rsesek@chromium.org</owner>
+ <owner>mark@chromium.org</owner>
+ <summary>Records the filesystem type that the app lives on.</summary>
+</histogram>
+
<histogram name="OSX.KeychainReauthorizeIfNeeded" units="count">
<owner>kerrnel@chromium.org</owner>
<owner>mark@chromium.org</owner>
@@ -70280,6 +73632,15 @@ uploading your change for review.
</summary>
</histogram>
+<histogram base="true" name="OSX.OtherInstances" expires_after="2019-12-31">
+ <owner>avi@chromium.org</owner>
+ <owner>rsesek@chromium.org</owner>
+ <owner>mark@chromium.org</owner>
+ <summary>
+ Records how many other instances of this binary are running at startup.
+ </summary>
+</histogram>
+
<histogram name="OSX.RendererHost.SurfaceWaitTime" units="ms">
<obsolete>
Deprecated as of 11/2015.
@@ -70313,6 +73674,14 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="OSX.StagingDirectoryLocation" enum="OSXStagingDirectoryStep"
+ expires_after="2019-12-31">
+ <owner>avi@chromium.org</owner>
+ <owner>rsesek@chromium.org</owner>
+ <owner>mark@chromium.org</owner>
+ <summary>Records first staging directory location that works.</summary>
+</histogram>
+
<histogram name="OSX.SystemHotkeyMap.LoadSuccess" enum="BooleanSuccess"
expires_after="2018-08-30">
<owner>erikchen@chromium.org</owner>
@@ -71157,6 +74526,24 @@ uploading your change for review.
<histogram
name="PageLoad.Clients.DataReductionProxy.Experimental.Bytes.Network.CompressionRatio"
units="%">
+ <obsolete>
+ Deprecated 10/2018
+ </obsolete>
+ <owner>bengr@chromium.org</owner>
+ <owner>ryansturm@chromium.org</owner>
+ <summary>
+ 100 times the ratio of network bytes received to network bytes the user
+ would have seen without data reduction proxy (not including headers) in a
+ page load that had its main resource loaded through data reduction proxy.
+ Recorded as a percent if the data reduction proxy saved the user data.
+ Recorded per page load when the user navigates away, hides the tab, or
+ backgrounds the app.
+ </summary>
+</histogram>
+
+<histogram
+ name="PageLoad.Clients.DataReductionProxy.Experimental.Bytes.Network.CompressionRatio2"
+ units="%">
<owner>bengr@chromium.org</owner>
<owner>ryansturm@chromium.org</owner>
<summary>
@@ -71172,6 +74559,22 @@ uploading your change for review.
<histogram
name="PageLoad.Clients.DataReductionProxy.Experimental.Bytes.Network.Inflation"
units="KB">
+ <obsolete>
+ Deprecated 10/2018
+ </obsolete>
+ <owner>bengr@chromium.org</owner>
+ <owner>ryansturm@chromium.org</owner>
+ <summary>
+ The number of network kilobytes (not including headers) that the data
+ reduction proxy inflated for the user in a page load that had its main
+ resource was loaded through data reduction proxy. Recorded per page load
+ when the user navigates away, hides the tab, or backgrounds the app.
+ </summary>
+</histogram>
+
+<histogram
+ name="PageLoad.Clients.DataReductionProxy.Experimental.Bytes.Network.Inflation2"
+ units="KB">
<owner>bengr@chromium.org</owner>
<owner>ryansturm@chromium.org</owner>
<summary>
@@ -71185,6 +74588,23 @@ uploading your change for review.
<histogram
name="PageLoad.Clients.DataReductionProxy.Experimental.Bytes.Network.InflationPercent"
units="%">
+ <obsolete>
+ Deprecated 10/2018
+ </obsolete>
+ <owner>bengr@chromium.org</owner>
+ <owner>ryansturm@chromium.org</owner>
+ <summary>
+ The inflation in network kilobytes (not including headers) the user saw due
+ to using data reduction proxy in a page load that had its main resource was
+ loaded through data reduction proxy. Recorded as a percent when the user saw
+ inflated data. Recorded per page load when the user navigates away, hides
+ the tab, or backgrounds the app.
+ </summary>
+</histogram>
+
+<histogram
+ name="PageLoad.Clients.DataReductionProxy.Experimental.Bytes.Network.InflationPercent2"
+ units="%">
<owner>bengr@chromium.org</owner>
<owner>ryansturm@chromium.org</owner>
<summary>
@@ -71199,6 +74619,22 @@ uploading your change for review.
<histogram
name="PageLoad.Clients.DataReductionProxy.Experimental.Bytes.Network.NonProxied"
units="KB">
+ <obsolete>
+ Deprecated 10/2018
+ </obsolete>
+ <owner>bengr@chromium.org</owner>
+ <owner>ryansturm@chromium.org</owner>
+ <summary>
+ The number of network kilobytes that were not fetched through the data
+ reduction proxy (not including headers) in a page load that had its main
+ resource was loaded through data reduction proxy. Recorded per page load
+ when the user navigates away, hides the tab, or backgrounds the app.
+ </summary>
+</histogram>
+
+<histogram
+ name="PageLoad.Clients.DataReductionProxy.Experimental.Bytes.Network.NonProxied2"
+ units="KB">
<owner>bengr@chromium.org</owner>
<owner>ryansturm@chromium.org</owner>
<summary>
@@ -71212,6 +74648,22 @@ uploading your change for review.
<histogram
name="PageLoad.Clients.DataReductionProxy.Experimental.Bytes.Network.Original"
units="KB">
+ <obsolete>
+ Deprecated 10/2018
+ </obsolete>
+ <owner>bengr@chromium.org</owner>
+ <owner>ryansturm@chromium.org</owner>
+ <summary>
+ The number of network kilobytes (not including headers) that the user would
+ have seen without using data reduction proxy in a page load that had its
+ main resource was loaded through data reduction proxy. Recorded per page
+ load when the user navigates away, hides the tab, or backgrounds the app.
+ </summary>
+</histogram>
+
+<histogram
+ name="PageLoad.Clients.DataReductionProxy.Experimental.Bytes.Network.Original2"
+ units="KB">
<owner>bengr@chromium.org</owner>
<owner>ryansturm@chromium.org</owner>
<summary>
@@ -71225,6 +74677,22 @@ uploading your change for review.
<histogram
name="PageLoad.Clients.DataReductionProxy.Experimental.Bytes.Network.PercentProxied"
units="%">
+ <obsolete>
+ Deprecated 10/2018
+ </obsolete>
+ <owner>bengr@chromium.org</owner>
+ <owner>ryansturm@chromium.org</owner>
+ <summary>
+ The percent of network kilobytes (not including headers) in a page load that
+ went through data reduction proxy when the main resource was loaded through
+ data reduction proxy. Recorded per page load when the user navigates away,
+ hides the tab, or backgrounds the app.
+ </summary>
+</histogram>
+
+<histogram
+ name="PageLoad.Clients.DataReductionProxy.Experimental.Bytes.Network.PercentProxied2"
+ units="%">
<owner>bengr@chromium.org</owner>
<owner>ryansturm@chromium.org</owner>
<summary>
@@ -71238,6 +74706,22 @@ uploading your change for review.
<histogram
name="PageLoad.Clients.DataReductionProxy.Experimental.Bytes.Network.Proxied"
units="KB">
+ <obsolete>
+ Deprecated 10/2018
+ </obsolete>
+ <owner>bengr@chromium.org</owner>
+ <owner>ryansturm@chromium.org</owner>
+ <summary>
+ The number of network kilobytes that were fetched through the data reduction
+ proxy (not including headers) in a page load that had its main resource was
+ loaded through data reduction proxy. Recorded per page load when the user
+ navigates away, hides the tab, or backgrounds the app.
+ </summary>
+</histogram>
+
+<histogram
+ name="PageLoad.Clients.DataReductionProxy.Experimental.Bytes.Network.Proxied2"
+ units="KB">
<owner>bengr@chromium.org</owner>
<owner>ryansturm@chromium.org</owner>
<summary>
@@ -71251,6 +74735,22 @@ uploading your change for review.
<histogram
name="PageLoad.Clients.DataReductionProxy.Experimental.Bytes.Network.Savings"
units="KB">
+ <obsolete>
+ Deprecated 10/2018
+ </obsolete>
+ <owner>bengr@chromium.org</owner>
+ <owner>ryansturm@chromium.org</owner>
+ <summary>
+ The number of network kilobytes (not including headers) that the data
+ reduction proxy saved the user in a page load that had its main resource was
+ loaded through data reduction proxy. Recorded per page load when the user
+ navigates away, hides the tab, or backgrounds the app.
+ </summary>
+</histogram>
+
+<histogram
+ name="PageLoad.Clients.DataReductionProxy.Experimental.Bytes.Network.Savings2"
+ units="KB">
<owner>bengr@chromium.org</owner>
<owner>ryansturm@chromium.org</owner>
<summary>
@@ -71264,6 +74764,9 @@ uploading your change for review.
<histogram
name="PageLoad.Clients.DataReductionProxy.Experimental.CompletedResources.Network.PercentProxied"
units="%">
+ <obsolete>
+ Deprecated 10/2018
+ </obsolete>
<owner>bengr@chromium.org</owner>
<owner>ryansturm@chromium.org</owner>
<summary>
@@ -71274,6 +74777,20 @@ uploading your change for review.
</summary>
</histogram>
+<histogram
+ name="PageLoad.Clients.DataReductionProxy.Experimental.CompletedResources.Network2"
+ units="%">
+ <owner>bengr@chromium.org</owner>
+ <owner>ryansturm@chromium.org</owner>
+ <summary>
+ Records info about the completed resources loaded from network in a page
+ load that use data reduction proxy when the main resource was loaded through
+ data reduction proxy. Recorded per page load when the user navigates away,
+ hides the tab, or backgrounds the app. The number of proxies, non-proxied,
+ percent of proxied are recorded as suffixes.
+ </summary>
+</histogram>
+
<histogram name="PageLoad.Clients.DelayNavigation.Delay.Actual" units="ms">
<obsolete>
Deprecated March 2018
@@ -71380,6 +74897,30 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="PageLoad.Clients.Scheme.HTTP.PaintTiming.UnderStat"
+ enum="PageLoadTimingUnderStat">
+ <owner>tbansal@chromium.org</owner>
+ <summary>
+ Records if the time from navigation to first contentful paint was less than
+ the specified threshold. Also, records the total number of first contentful
+ paints. For a single first contentful paint event, data may be recorded in
+ multiple buckets. Recorded at the time when first contentful paint happens.
+ Recorded only for page loads that have scheme http://.
+ </summary>
+</histogram>
+
+<histogram name="PageLoad.Clients.Scheme.HTTPS.PaintTiming.UnderStat"
+ enum="PageLoadTimingUnderStat">
+ <owner>tbansal@chromium.org</owner>
+ <summary>
+ Records if the time from navigation to first contentful paint was less than
+ the specified threshold. Also, records the total number of first contentful
+ paints. For a single first contentful paint event, data may be recorded in
+ multiple buckets. Recorded at the time when first contentful paint happens.
+ Recorded only for page loads that have scheme https://.
+ </summary>
+</histogram>
+
<histogram name="PageLoad.Clients.ServiceWorker.PageTransition"
enum="CorePageTransition">
<obsolete>
@@ -71402,6 +74943,29 @@ uploading your change for review.
</summary>
</histogram>
+<histogram base="true"
+ name="PageLoad.Clients.StaleWhileRevalidate.PaintTiming.FirstContentfulPaint"
+ units="ms" expires_after="M75">
+ <owner>dtapuska@chromium.org</owner>
+ <owner>kenjibaheux@google.com</owner>
+ <summary>
+ Measures the time from navigation start to first contentful paint. Recorded
+ for pages that contain a resource that may benefit from stale while
+ revalidate.
+ </summary>
+</histogram>
+
+<histogram base="true"
+ name="PageLoad.Clients.StaleWhileRevalidate.PaintTiming.ParseToFirstContentfulPaint"
+ units="ms" expires_after="M75">
+ <owner>dtapuska@chromium.org</owner>
+ <owner>kenjibaheux@google.com</owner>
+ <summary>
+ Measures the time from parse start to first contentful paint. Recorded for
+ pages that contain a resource that may benefit from stale while revalidate.
+ </summary>
+</histogram>
+
<histogram name="PageLoad.Clients.SubresourceFilter.ActivationDecision"
enum="SubresourceFilterActivationDecision">
<obsolete>
@@ -71657,6 +75221,17 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="PageLoad.Experimental.Bytes.NetworkIncludingHeaders"
+ units="KB">
+ <owner>jkarlin@chromium.org</owner>
+ <summary>
+ The number of prefiltered (e.g., compressed) KiloBytes loaded over the
+ network via the browser process for a page load. This includes network
+ headers/overhead. Recorded when the page load is terminated. Recorded for
+ incomplete resources.
+ </summary>
+</histogram>
+
<histogram name="PageLoad.Experimental.Bytes.Total" units="KB">
<owner>jkarlin@chromium.org</owner>
<summary>
@@ -71762,6 +75337,15 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="PageLoad.Experimental.LayoutStability.JankScore"
+ units="scorex10">
+ <owner>skobes@chromium.org</owner>
+ <summary>
+ Measures the amount of layout jank (bit.ly/lsm-explainer) that has occurred
+ during the session.
+ </summary>
+</histogram>
+
<histogram name="PageLoad.Experimental.NavigationToInteractive" units="ms">
<owner>dproy@chromium.org</owner>
<owner>tdresser@chromium.org</owner>
@@ -71940,6 +75524,56 @@ uploading your change for review.
</histogram>
<histogram
+ name="PageLoad.Experimental.PaintTiming.NavigationToLargestImagePaint"
+ units="ms" expires_after="2019-04-23">
+ <owner>maxlg@chromium.org</owner>
+ <owner>speed-metrics-dev@chromium.org</owner>
+ <summary>
+ Measures the time from navigation timing's navigation start to the time the
+ largest image is first painted after fully loaded, for main frame documents.
+ The value is recorded at the end of each page load. See
+ http://bit.ly/fcp_plus_plus for details.
+ </summary>
+</histogram>
+
+<histogram
+ name="PageLoad.Experimental.PaintTiming.NavigationToLargestTextPaint"
+ units="ms" expires_after="2019-04-23">
+ <owner>maxlg@chromium.org</owner>
+ <owner>speed-metrics-dev@chromium.org</owner>
+ <summary>
+ Measures the time from navigation timing's navigation start to the time the
+ largest text is first painted, for main frame documents. The value is
+ recorded at the end of each page load. See http://bit.ly/fcp_plus_plus for
+ details.
+ </summary>
+</histogram>
+
+<histogram name="PageLoad.Experimental.PaintTiming.NavigationToLastImagePaint"
+ units="ms" expires_after="2019-04-23">
+ <owner>maxlg@chromium.org</owner>
+ <owner>speed-metrics-dev@chromium.org</owner>
+ <summary>
+ Measures the time from navigation timing's navigation start to the time the
+ last image is first painted after fully loaded, for main frame documents.
+ The value is recorded at the end of each page load. See
+ http://bit.ly/fcp_plus_plus for details.
+ </summary>
+</histogram>
+
+<histogram name="PageLoad.Experimental.PaintTiming.NavigationToLastTextPaint"
+ units="ms" expires_after="2019-04-23">
+ <owner>maxlg@chromium.org</owner>
+ <owner>speed-metrics-dev@chromium.org</owner>
+ <summary>
+ Measures the time from navigation timing's navigation start to the time the
+ last text is first painted, for main frame documents. The value is recorded
+ at the end of each page load. The value is recorded at the end of each page
+ load. See http://bit.ly/fcp_plus_plus for details.
+ </summary>
+</histogram>
+
+<histogram
name="PageLoad.Experimental.PaintTiming.ParseStartToFirstMeaningfulPaint"
units="ms">
<owner>ksakamoto@chromium.org</owner>
@@ -72392,6 +76026,33 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="PageLoad.Internal.Renderer.PresentationTime.DeltaFromSwapTime"
+ units="ms">
+ <owner>sadrul@chromium.org</owner>
+ <summary>
+ 'Swap time' is the timestamp of the renderer submitting a CompositorFrame,
+ and 'Presentation time' is the timestamp of the frame becoming visible on
+ screen. This metric measures the duration between the swap-time and the
+ presentation-time. This is recorded only if a valid presentation-timestamp
+ is available. See PageLoad.Internal.Renderer.PresentationTime.Valid for how
+ often the presentation-timestamp is valid. This is reported only for
+ compositor-frames that report a paint-timing metric (e.g.
+ FirstContentfulPaint etc.), and after that frame has been displayed on
+ screen.
+ </summary>
+</histogram>
+
+<histogram name="PageLoad.Internal.Renderer.PresentationTime.Valid"
+ enum="Boolean">
+ <owner>sadrul@chromium.org</owner>
+ <summary>
+ This boolean keeps track of whether a valid presentation-timestamp was
+ received or not. This is reported only for compositor-frames that report a
+ paint-timing metric (e.g. FirstContentfulPaint etc.), and after that frame
+ has been displayed on screen.
+ </summary>
+</histogram>
+
<histogram name="PageLoad.Navigation.RedirectChainLength" units="urls">
<owner>csharrison@chromium.org</owner>
<summary>
@@ -72993,6 +76654,13 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="PageSerialization.MhtmlLoading.LoadResult"
+ enum="MhtmlLoadResult">
+ <owner>iwells@chromium.org</owner>
+ <owner>carlosk@chromium.org</owner>
+ <summary>Reports the result of an attempt to load an MHTML archive.</summary>
+</histogram>
+
<histogram name="PageSerialization.ProblemDetection.LoadedCSSPercentage"
units="%">
<owner>romax@chromium.org</owner>
@@ -73276,8 +76944,8 @@ uploading your change for review.
<histogram name="PasswordGeneration.SubmissionAvailableEvent"
enum="PasswordSubmissionEvent">
- <owner>gcasto@chromium.org</owner>
- <owner>vabr@chromium.org</owner>
+ <owner>dvadym@chromium.org</owner>
+ <owner>kolos@chromium.org</owner>
<summary>
Measures the frequency of submission events for passwords that could have
been generated, but the user didn't choose to use the feature. This is to
@@ -73287,8 +76955,8 @@ uploading your change for review.
<histogram name="PasswordGeneration.SubmissionEvent"
enum="PasswordSubmissionEvent">
- <owner>gcasto@chromium.org</owner>
- <owner>vabr@chromium.org</owner>
+ <owner>dvadym@chromium.org</owner>
+ <owner>kolos@chromium.org</owner>
<summary>
Measures the frequency of submission events for generated passwords. This is
similar to PasswordManager.ActionsTakenWithPsl but only tracks events which
@@ -73307,9 +76975,24 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="PasswordGeneration.UserDecision"
+ enum="PasswordGenerationUserEvent">
+ <owner>ioanap@chromium.org</owner>
+ <owner>vasilii@chromium.org</owner>
+ <summary>
+ Records user-triggered events related to a generated password. Only the last
+ occurring event is logged. The recording takes place when the password form
+ is destroyed.
+ </summary>
+</histogram>
+
<histogram name="PasswordGeneration.UserEvent"
enum="PasswordGenerationUserEvent">
+ <obsolete>
+ Deprecated 10/2018 in favor of PasswordGeneration.UserDecision.
+ </obsolete>
<owner>ioanap@chromium.org</owner>
+ <owner>vasilii@chromium.org</owner>
<summary>
Records user-triggered events related to a generated password. Each event is
logged at most once per lifetime of the generated password.
@@ -73356,7 +77039,8 @@ uploading your change for review.
<histogram name="PasswordManager.AccessPasswordInSettings"
enum="AccessPasswordInSettingsEvent">
- <owner>vabr@chromium.org</owner>
+ <owner>jdoerrie@chromium.org</owner>
+ <owner>vasilii@chromium.org</owner>
<summary>
Recorded whenever the user accesses the passwords in the settings page.
</summary>
@@ -73409,8 +77093,8 @@ uploading your change for review.
</histogram>
<histogram name="PasswordManager.AccountsPerSite">
- <owner>gcasto@chromium.org</owner>
- <owner>vabr@chromium.org</owner>
+ <owner>dvadym@chromium.org</owner>
+ <owner>vasilii@chromium.org</owner>
<summary>
The number of accounts stored per site in the password manager (one event
per site)
@@ -73418,8 +77102,9 @@ uploading your change for review.
</histogram>
<histogram name="PasswordManager.AccountsReusingPassword" units="accounts">
+ <owner>dvadym@chromium.org</owner>
<owner>engedy@chromium.org</owner>
- <owner>vabr@chromium.org</owner>
+ <owner>vasilii@chromium.org</owner>
<summary>
Records, for each account, the number of other accounts (across all sites
and usernames) that reuse the same password. Only non-blacklisted,
@@ -73444,7 +77129,6 @@ uploading your change for review.
<obsolete>
Deprecated as of Chrome 32. See PasswordManagerActionsTakenWithPsl
</obsolete>
- <owner>vabr@chromium.org</owner>
<summary>
Stats documenting how we handle every form containing a password, bucketed
by the actions taken.
@@ -73462,8 +77146,8 @@ uploading your change for review.
<histogram name="PasswordManager.ActionsTakenV3"
enum="PasswordManagerActionsTakenV3">
- <owner>vabr@chromium.org</owner>
- <owner>yfriedman@chromium.org</owner>
+ <owner>dvadym@chromium.org</owner>
+ <owner>vasilii@chromium.org</owner>
<summary>
Stats documenting how we handle every form containing a password, bucketed
by the actions taken.
@@ -73475,7 +77159,6 @@ uploading your change for review.
<obsolete>
Deprecated as of 3/18/2014. See PasswordManagerActionsTakenV3.
</obsolete>
- <owner>vabr@chromium.org</owner>
<owner>yfriedman@chromium.org</owner>
<summary>
Stats documenting how we handle every form containing a password, bucketed
@@ -73569,7 +77252,8 @@ uploading your change for review.
<histogram name="PasswordManager.Android.ExportPasswordsProgressBarUsage"
enum="PasswordManagerAndroidExportPasswordsProgressBarUsage">
- <owner>vabr@chromium.org</owner>
+ <owner>fhorschig@chromium.org</owner>
+ <owner>vasilii@chromium.org</owner>
<summary>
Records what happened to the progress bar during exporting passwords when
its dismissal was requested.
@@ -73578,8 +77262,8 @@ uploading your change for review.
<histogram name="PasswordManager.Android.PasswordCredentialEntry"
enum="PasswordManagerAndroidPasswordEntryActions">
+ <owner>fhorschig@chromium.org</owner>
<owner>jdoerrie@chromium.org</owner>
- <owner>vabr@chromium.org</owner>
<summary>
Records the action taken with a password credential entry on Android.
</summary>
@@ -73587,8 +77271,8 @@ uploading your change for review.
<histogram name="PasswordManager.Android.PasswordCredentialEntry.Password"
enum="PasswordManagerAndroidPasswordActions">
+ <owner>fhorschig@chromium.org</owner>
<owner>jdoerrie@chromium.org</owner>
- <owner>vabr@chromium.org</owner>
<summary>
Records the action taken with a password of a password credential entry on
Android.
@@ -73597,8 +77281,8 @@ uploading your change for review.
<histogram name="PasswordManager.Android.PasswordCredentialEntry.Username"
enum="PasswordManagerAndroidUsernameActions">
+ <owner>fhorschig@chromium.org</owner>
<owner>jdoerrie@chromium.org</owner>
- <owner>vabr@chromium.org</owner>
<summary>
Records the action taken with a username of a password credential entry on
Android.
@@ -73607,8 +77291,8 @@ uploading your change for review.
<histogram name="PasswordManager.Android.PasswordCredentialEntry.Website"
enum="PasswordManagerAndroidWebsiteActions">
+ <owner>fhorschig@chromium.org</owner>
<owner>jdoerrie@chromium.org</owner>
- <owner>vabr@chromium.org</owner>
<summary>
Records the action taken with a website of a password credential entry on
Android.
@@ -73617,8 +77301,8 @@ uploading your change for review.
<histogram name="PasswordManager.Android.PasswordExceptionEntry"
enum="PasswordManagerAndroidPasswordEntryActions">
+ <owner>fhorschig@chromium.org</owner>
<owner>jdoerrie@chromium.org</owner>
- <owner>vabr@chromium.org</owner>
<summary>
Records the action taken with a password exception entry on Android.
</summary>
@@ -73626,8 +77310,8 @@ uploading your change for review.
<histogram name="PasswordManager.Android.PasswordExceptionEntry.Website"
enum="PasswordManagerAndroidWebsiteActions">
+ <owner>fhorschig@chromium.org</owner>
<owner>jdoerrie@chromium.org</owner>
- <owner>vabr@chromium.org</owner>
<summary>
Records the action taken with a website of a password exception entry on
Android.
@@ -73663,7 +77347,6 @@ uploading your change for review.
<histogram name="PasswordManager.BlacklistedDuplicates"
units="duplicated forms" expires_after="M73">
<owner>jdoerrie@chromium.org</owner>
- <owner>vabr@chromium.org</owner>
<summary>
The number of duplicates forms from the password store. Recorded once for
the profile on startup.
@@ -73671,8 +77354,8 @@ uploading your change for review.
</histogram>
<histogram name="PasswordManager.BlacklistedSites">
- <owner>gcasto@chromium.org</owner>
- <owner>vabr@chromium.org</owner>
+ <owner>jdoerrie@chromium.org</owner>
+ <owner>vasilii@chromium.org</owner>
<summary>
The total number of sites that the user has blacklisted. Recorded by
iterating over stored passwords once per run of Chrome.
@@ -73681,9 +77364,9 @@ uploading your change for review.
<histogram
name="PasswordManager.BlacklistedSites.NeedRemoveBlacklistDuplicates"
- enum="BooleanNeedsDeDuplication" expires_after="M72">
- <owner>gemene@google.com</owner>
+ enum="BooleanNeedsDeDuplication" expires_after="M75">
<owner>jdoerrie@chromium.org</owner>
+ <owner>vasilii@chromium.org</owner>
<summary>
Records once on startup whether the blacklisted sites in the password store
need to be cleared of duplications.
@@ -73704,9 +77387,9 @@ uploading your change for review.
</histogram>
<histogram name="PasswordManager.BlacklistedSites.PreventedAddingDuplicates"
- enum="BooleanAddingBlacklistedDuplicatesPrevented" expires_after="M72">
- <owner>gemene@google.com</owner>
+ enum="BooleanAddingBlacklistedDuplicatesPrevented" expires_after="M75">
<owner>jdoerrie@chromium.org</owner>
+ <owner>vasilii@chromium.org</owner>
<summary>
Boolean indicating whether adding a blacklist entry was prevented due to an
already existing entry. Recorded after every blacklist site submission.
@@ -73716,7 +77399,7 @@ uploading your change for review.
<histogram name="PasswordManager.CertificateErrorsWhileSeeingForms"
enum="PasswordCertificateError">
<owner>battre@chromium.org</owner>
- <owner>vabr@chromium.org</owner>
+ <owner>dvadym@chromium.org</owner>
<summary>
When the password manager sees new forms on the page, it records in this
histogram whether there were any SSL certificate errors. The presence of SSL
@@ -73761,8 +77444,8 @@ uploading your change for review.
</histogram>
<histogram name="PasswordManager.DynamicFormChanges" expires_after="M75">
+ <owner>battre@chromium.org</owner>
<owner>dvadym@chromium.org</owner>
- <owner>vabr@chromium.org</owner>
<summary>
Records a bitmask of password form changes after the first time this form is
seen by Password Manager. Recorded once per a form when the form is removed
@@ -73859,7 +77542,8 @@ uploading your change for review.
</histogram>
<histogram name="PasswordManager.Enabled" enum="BooleanEnabled">
- <owner>vabr@chromium.org</owner>
+ <owner>dvadym@chromium.org</owner>
+ <owner>vasilii@chromium.org</owner>
<summary>
Indicates whether the password manager is enabled when a tab is opened. This
includes prerendered tabs.
@@ -73869,7 +77553,7 @@ uploading your change for review.
<histogram name="PasswordManager.ExportedPasswordsPerUserInCSV">
<owner>cfroussios@chromium.org</owner>
<owner>ioanap@chromium.org</owner>
- <owner>vabr@chromium.org</owner>
+ <owner>vasilii@chromium.org</owner>
<summary>The number of passwords exported in CSV format per user.</summary>
</histogram>
@@ -73877,7 +77561,7 @@ uploading your change for review.
enum="ExportPasswordsResult">
<owner>cfroussios@chromium.org</owner>
<owner>ioanap@chromium.org</owner>
- <owner>vabr@chromium.org</owner>
+ <owner>vasilii@chromium.org</owner>
<summary>The success or error type of exporting passwords into CSV.</summary>
</histogram>
@@ -73913,8 +77597,8 @@ uploading your change for review.
<histogram name="PasswordManager.GeneratedFormHasNoFormManager"
enum="BooleanFormManager">
- <owner>gcasto@chromium.org</owner>
- <owner>vabr@chromium.org</owner>
+ <owner>dvadym@chromium.org</owner>
+ <owner>kolos@chromium.org</owner>
<owner>deepak.m1@samsung.com</owner>
<summary>
When the generation state of a password was changed, records whether an
@@ -73947,8 +77631,23 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="PasswordManager.HttpCredentials"
+ enum="PasswordManagerHttpCredentialType">
+ <owner>jdoerrie@chromium.org</owner>
+ <owner>vasilii@chromium.org</owner>
+ <summary>
+ Breakdown of HTTP credentials with regard to the existence of a HTTPS
+ credential with the same username and whether the corresponding website has
+ HSTS enabled. Recorded once for each HTTP credential of the profile on
+ startup.
+ </summary>
+</histogram>
+
<histogram name="PasswordManager.HttpCredentialsWithConflictingHttpsCredential"
units="saved credentials" expires_after="M72">
+ <obsolete>
+ Deprecated as of M72. Superseded by PasswordManager.HttpCredentials.
+ </obsolete>
<owner>gemene@google.com</owner>
<owner>jdoerrie@chromium.org</owner>
<summary>
@@ -73960,6 +77659,9 @@ uploading your change for review.
<histogram name="PasswordManager.HttpCredentialsWithEquivalentHttpsCredential"
units="saved credentials" expires_after="M72">
+ <obsolete>
+ Deprecated as of M72. Superseded by PasswordManager.HttpCredentials.
+ </obsolete>
<owner>gemene@google.com</owner>
<owner>jdoerrie@chromium.org</owner>
<summary>
@@ -73971,6 +77673,9 @@ uploading your change for review.
<histogram name="PasswordManager.HttpCredentialsWithoutMatchingHttpsCredential"
units="saved credentials" expires_after="M72">
+ <obsolete>
+ Deprecated as of M72. Superseded by PasswordManager.HttpCredentials.
+ </obsolete>
<owner>gemene@google.com</owner>
<owner>jdoerrie@chromium.org</owner>
<summary>
@@ -74003,7 +77708,6 @@ uploading your change for review.
Deprecated as of 07/2018. This metric was deleted at
https://chromium-review.googlesource.com/c/chromium/src/+/1131495.
</obsolete>
- <owner>vabr@chromium.org</owner>
<summary>
The result of importing passwords stored in IE7 into Chrome's password
store.
@@ -74012,14 +77716,14 @@ uploading your change for review.
<histogram name="PasswordManager.ImportedPasswordsPerUserInCSV">
<owner>xunlu@chromium.org</owner>
- <owner>vabr@chromium.org</owner>
+ <owner>vasilii@chromium.org</owner>
<summary>The number of passwords imported in CSV format per user</summary>
</histogram>
<histogram name="PasswordManager.ImportPasswordFromCSVResult"
enum="PasswordImportFromCSVResult">
<owner>xunlu@chromium.org</owner>
- <owner>vabr@chromium.org</owner>
+ <owner>vasilii@chromium.org</owner>
<summary>
The response code of successful or failed password import attempt from a CSV
file.
@@ -74039,7 +77743,6 @@ uploading your change for review.
Deprecated as of 03/2016. This metric has been replaced by
PasswordManager.UIDismissalReason.
</obsolete>
- <owner>vabr@chromium.org</owner>
<summary>
The distribution of responses to the &quot;Do you want Chrome to remember
this password&quot;? info bar prompt.
@@ -74048,8 +77751,8 @@ uploading your change for review.
<histogram name="PasswordManager.InvalidtHttpsCredentialsNeedToBeCleared"
enum="BooleanNeedsClearing" expires_after="M73">
- <owner>vabr@chromium.org</owner>
<owner>jdoerrie@chromium.org</owner>
+ <owner>vasilii@chromium.org</owner>
<summary>
Records once on startup whether forms with wrong signon_realm created by
HTTP to HTTPS migration need to be removed. See https://crbug.com/881731 for
@@ -74162,8 +77865,8 @@ uploading your change for review.
</histogram>
<histogram name="PasswordManager.LinuxBackendStatistics">
+ <owner>cfroussios@chromium.org</owner>
<owner>dvadym@chromium.org</owner>
- <owner>vabr@chromium.org</owner>
<summary>
Information about usage of password storage backends on Linux. It also
includes whether a command line flag for a specific backend is given.
@@ -74183,6 +77886,28 @@ uploading your change for review.
<summary>An error on LoginDatabase initialization.</summary>
</histogram>
+<histogram name="PasswordManager.ManagePasswordsReferrer"
+ enum="ManagePasswordsReferrer">
+ <owner>jdoerrie@chromium.org</owner>
+ <owner>vasilii@chromium.org</owner>
+ <summary>
+ Referrer of a navigation to the &quot;Manage Passwords&quot; page. Recorded
+ when the user attempts to see their list of passwords, either via native or
+ Web UI.
+ </summary>
+</histogram>
+
+<histogram name="PasswordManager.ManagePasswordsReferrerSignedInAndSyncing"
+ enum="ManagePasswordsReferrer">
+ <owner>ioanap@chromium.org</owner>
+ <owner>vasilii@chromium.org</owner>
+ <summary>
+ Referrer of a navigation to the &quot;Manage Passwords&quot; page. Recorded
+ only for signed in users syncing passwords without a custom passprase, when
+ the user attempts to see their list of passwords.
+ </summary>
+</histogram>
+
<histogram name="PasswordManager.MediationOptional"
enum="CredentialManagerGetResult">
<owner>jdoerrie@chromium.org</owner>
@@ -74237,7 +77962,7 @@ uploading your change for review.
</histogram>
<histogram name="PasswordManager.NumPasswordsDeletedByBulkDelete">
- <owner>vabr@chromium.org</owner>
+ <owner>vasilii@chromium.org</owner>
<summary>
Number of passwords deleted when the user chooses to clear passwords via the
clear browsing data UI.
@@ -74255,7 +77980,6 @@ uploading your change for review.
<obsolete>
Deprecated as of 08/2015.
</obsolete>
- <owner>vabr@chromium.org</owner>
<summary>
When the user chooses to never remember passwords for a form, we remove all
previously saved credentials for that form. This is the count of those
@@ -74264,7 +77988,7 @@ uploading your change for review.
</histogram>
<histogram name="PasswordManager.NumPasswordsNotShown">
- <owner>vabr@chromium.org</owner>
+ <owner>dvadym@chromium.org</owner>
<summary>
The password manager only shows those credentials that are considered the
best match for a particular form. This stat keep track of the credentials
@@ -74274,7 +77998,7 @@ uploading your change for review.
<histogram name="PasswordManager.OsPasswordStatus"
enum="PasswordManagerOsPasswordStatus">
- <owner>vabr@chromium.org</owner>
+ <owner>battre@chromium.org</owner>
<owner>wfh@chromium.org</owner>
<summary>
Indicates whether the user's OS password is blank or not at browser startup.
@@ -74283,13 +78007,29 @@ uploading your change for review.
<histogram name="PasswordManager.OtherPossibleUsernamesUsage"
enum="OtherPossibleUsernamesUsage">
- <owner>vabr@chromium.org</owner>
+ <owner>dvadym@chromium.org</owner>
<summary>
Breakdown of how other possible usernames are displayed. Recorded every time
we autofill a password form.
</summary>
</histogram>
+<histogram name="PasswordManager.PasswordDropdownItemSelected"
+ enum="PasswordDropdownSelectedOption" expires_after="2019-07-01">
+ <owner>dvadym@chromium.org</owner>
+ <owner>vasilii@chromium.org</owner>
+ <summary>
+ Logs the type of the suggestion in the password dropdown when selected.
+ </summary>
+</histogram>
+
+<histogram name="PasswordManager.PasswordDropdownShown"
+ enum="PasswordDropdownState" expires_after="2019-07-01">
+ <owner>dvadym@chromium.org</owner>
+ <owner>vasilii@chromium.org</owner>
+ <summary>Logs the state of the password dropdown when it's shown.</summary>
+</histogram>
+
<histogram name="PasswordManager.PasswordReuse.MainFrameMatchCsdWhitelist"
enum="Boolean">
<obsolete>
@@ -74430,7 +78170,7 @@ uploading your change for review.
<histogram name="PasswordManager.ProvisionalSaveFailure"
enum="ProvisionalSaveFailure">
- <owner>vabr@chromium.org</owner>
+ <owner>dvadym@chromium.org</owner>
<summary>
Breakdown of cases where a password is submitted, but we don't even try and
save it. Recorded for every password form submit.
@@ -74439,8 +78179,8 @@ uploading your change for review.
<histogram name="PasswordManager.PslDomainMatchTriggering"
enum="PasswordManagerPslDomainMatchTriggering">
- <owner>vabr@chromium.org</owner>
- <owner>yfriedman@chromium.org</owner>
+ <owner>dvadym@chromium.org</owner>
+ <owner>vasilii@chromium.org</owner>
<summary>
Breakdown on trigger rate of providing a password form autofill entry based
on matching stored information using the public suffix list (PSL) for
@@ -74463,7 +78203,7 @@ uploading your change for review.
<histogram name="PasswordManager.ReauthToAccessPasswordInSettings"
enum="ReauthToAccessPasswordInSettingsEvent">
- <owner>vabr@chromium.org</owner>
+ <owner>vasilii@chromium.org</owner>
<summary>
Recorded whenever the user interacts with reauthentication in order to
access the passwords in settings, or when such reauthentication is skipped
@@ -74548,7 +78288,6 @@ uploading your change for review.
<obsolete>
Deprecated as of 03/2016.
</obsolete>
- <owner>vabr@chromium.org</owner>
<summary>
Indicates whether the save password prompt disappeared in less than one
second. This most likely indicates that the prompt was dismissed
@@ -74561,7 +78300,6 @@ uploading your change for review.
<obsolete>
Deprecated as of 03/2016.
</obsolete>
- <owner>vabr@chromium.org</owner>
<summary>Indicates whether the save password prompt was displayed.</summary>
</histogram>
@@ -74570,7 +78308,6 @@ uploading your change for review.
<obsolete>
Deprecated as of 03/2016.
</obsolete>
- <owner>vabr@chromium.org</owner>
<summary>
Breakdown of which response the user selected from the save password prompt.
</summary>
@@ -74646,7 +78383,6 @@ uploading your change for review.
moot. See https://crbug.com/871509#c3.
</obsolete>
<owner>dvadym@chromium.org</owner>
- <owner>vabr@chromium.org</owner>
<summary>
Records results of the new and the old algorithm for detecting whether to
show a password prompt to the user. Recorded on each password form
@@ -74735,7 +78471,6 @@ uploading your change for review.
Deprecated as of 14 September 2017, due to being no longer useful.
</obsolete>
<owner>xunlu@chromium.org</owner>
- <owner>vabr@chromium.org</owner>
<summary>
Whether password manager stored passwords imported from CSV file
successfully.
@@ -74796,7 +78531,6 @@ uploading your change for review.
<obsolete>
Deprecated since August 28, 2018, due to removing the corresponding feature.
</obsolete>
- <owner>vabr@chromium.org</owner>
<summary>
When the user logs in with their sync credential, PasswordManager checks if
there are any outdated copies of it in the password store, in order to purge
@@ -74807,7 +78541,7 @@ uploading your change for review.
<histogram name="PasswordManager.SubmitNavigatesToDifferentDomain"
enum="PostSubmitNavigation">
- <owner>vabr@chromium.org</owner>
+ <owner>dvadym@chromium.org</owner>
<summary>
Indicates whether submitting a password login form changes the registry
controlled domain of the main frame.
@@ -74825,8 +78559,8 @@ uploading your change for review.
</histogram>
<histogram name="PasswordManager.SubmittedFormType" enum="PasswordFormType">
- <owner>gcasto@chromium.org</owner>
- <owner>vabr@chromium.org</owner>
+ <owner>dvadym@chromium.org</owner>
+ <owner>kolos@chromium.org</owner>
<summary>
The type (e.g. signup, login, change password) of all submitted password
forms. This is logged on form submission, but doesn't require that the
@@ -74899,8 +78633,8 @@ uploading your change for review.
<histogram name="PasswordManager.SyncCredentialFiltered"
enum="CredentialFilteredType">
- <owner>gcasto@chromium.org</owner>
- <owner>vabr@chromium.org</owner>
+ <owner>battre@chromium.org</owner>
+ <owner>vasilii@chromium.org</owner>
<summary>
This histogram is reported for those forms on accounts.google.com, on which
Chrome is forced by Finch/flags during autofilling to remove sync
@@ -74912,8 +78646,8 @@ uploading your change for review.
<histogram name="PasswordManager.SyncingAccountState"
enum="PasswordManagerSyncingAccountState">
- <owner>gcasto@chromium.org</owner>
- <owner>vabr@chromium.org</owner>
+ <owner>battre@chromium.org</owner>
+ <owner>vasilii@chromium.org</owner>
<summary>
Information about the user's current sync status crossed with whether their
synced password is saved.
@@ -74932,8 +78666,8 @@ uploading your change for review.
<histogram name="PasswordManager.TimeBetweenStoreAndServer" units="ms"
expires_after="2019-05-01">
+ <owner>battre@chromium.org</owner>
<owner>dvadym@chromium.org</owner>
- <owner>vabr@chromium.org</owner>
<summary>
The time between receiving saved credentials from the password store and
predictions from the Autofill server. Recorded each time when predictions
@@ -74942,9 +78676,9 @@ uploading your change for review.
</histogram>
<histogram name="PasswordManager.TimeReadingExportedPasswords" units="ms">
+ <owner>battre@chromium.org</owner>
<owner>cfroussios@chromium.org</owner>
<owner>ioanap@chromium.org</owner>
- <owner>vabr@chromium.org</owner>
<summary>
The time it takes to fetch and serialise the passwords for export.
</summary>
@@ -74955,8 +78689,6 @@ uploading your change for review.
Deprecated as of 11/11/14. New statistic is
PasswordManager.TimesPasswordUsed.AutoGenerated.
</obsolete>
- <owner>gcasto@chromium.org</owner>
- <owner>vabr@chromium.org</owner>
<summary>
The number of times each generated password has been used to log in.
Recorded by iterating over stored passwords once per run. This information
@@ -74965,8 +78697,8 @@ uploading your change for review.
</histogram>
<histogram name="PasswordManager.TimesPasswordUsed">
- <owner>gcasto@chromium.org</owner>
- <owner>vabr@chromium.org</owner>
+ <owner>battre@chromium.org</owner>
+ <owner>dvadym@chromium.org</owner>
<summary>
The number of times each saved password has been used to log in. Does not
include generated passwords. Recorded by iterating over stored passwords
@@ -74975,7 +78707,7 @@ uploading your change for review.
</histogram>
<histogram base="true" name="PasswordManager.TotalAccounts">
- <owner>vabr@chromium.org</owner>
+ <owner>battre@chromium.org</owner>
<owner>vasilii@chromium.org</owner>
<summary>
The number of accounts stored in the password manager (across all sites),
@@ -74987,7 +78719,7 @@ uploading your change for review.
<histogram base="true" name="PasswordManager.TotalAccountsHiRes.WithScheme"
units="accounts">
<owner>engedy@chromium.org</owner>
- <owner>vabr@chromium.org</owner>
+ <owner>vasilii@chromium.org</owner>
<summary>
The number of accounts stored in the password manager (across all sites) for
origins with the scheme (e.g., HTTP, HTTPS, FTP) as given in the histogram
@@ -75180,6 +78912,14 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="PasswordProtection.PageZoomFactor">
+ <owner>drubery@chromium.org</owner>
+ <summary>
+ Reports the zoom factor for a login page, when the protected password is
+ entered.
+ </summary>
+</histogram>
+
<histogram base="true" name="PasswordProtection.PasswordAlertModeOutcome"
enum="PasswordProtectionRequestOutcome">
<owner>jialiul@chromium.org</owner>
@@ -75710,29 +79450,31 @@ uploading your change for review.
</summary>
</histogram>
-<histogram name="Performance.PerformanceMeasurePassedInParameter.EndMark"
- enum="PerformanceMeasurePassedInParameterType">
- <obsolete>
- Deprecated 05/2018. Made decision in issue 758385 with already acquired
- data. So this is no longer needed.
- </obsolete>
+<histogram name="Performance.MeasureParameter.EndMark"
+ enum="PerformanceMeasureParameterType" expires_after="2019-06-01">
<owner>maxlg@chromium.org</owner>
<summary>
- The count of possible string of the endMark parameter in
- performance.measure().
+ The count of possible incoming values to the endMark parameter in
+ performance.measure(). The purpose is to investigate how much the change of
+ API of User Timing L3 will impact the real world use cases. This histogram
+ was deprecated in 05/2018 and re-reenabled in 11/2018. The re-enabled
+ histogram adds the counting of undefined, null, number and unprovided, to
+ the original navigation-timing names, object and string. This value is
+ recorded at each call to performance.measure().
</summary>
</histogram>
-<histogram name="Performance.PerformanceMeasurePassedInParameter.StartMark"
- enum="PerformanceMeasurePassedInParameterType">
- <obsolete>
- Deprecated 05/2018. Made decision in issue 758385 with already acquired
- data. So this is no longer needed.
- </obsolete>
+<histogram name="Performance.MeasureParameter.StartMark"
+ enum="PerformanceMeasureParameterType" expires_after="2019-06-01">
<owner>maxlg@chromium.org</owner>
<summary>
- The count of possible string of the startMark parameter in
- performance.measure().
+ The count of possible incoming values to the startMark parameter in
+ performance.measure(). The purpose is to investigate how much the change of
+ API of User Timing L3 will impact the real world use cases. This histogram
+ was deprecated in 05/2018 and re-reenabled in 11/2018. The re-enabled
+ histogram adds the counting of undefined, null, number and unprovided, to
+ the original navigation-timing names, object and string. This value is
+ recorded at each call to performance.measure().
</summary>
</histogram>
@@ -77882,26 +81624,30 @@ uploading your change for review.
</summary>
</histogram>
-<histogram name="Platform.Temperature.Sensor00" units="Celsius"
- expires_after="2018-08-30">
- <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+<histogram name="Platform.Temperature.Sensor00" units="Celsius">
+ <owner>fletcherw@chromium.org</owner>
<summary>
- Temperature reading at sensor 0 (I2C_CPU-Die) taken every 30s.
+ Temperature reading from EC temperature sensor 0 (TSR0) taken every 30s.
+
+ This metric is specific to Chrome OS
</summary>
</histogram>
<histogram name="Platform.Temperature.Sensor01" units="Celsius">
- <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+ <owner>fletcherw@chromium.org</owner>
<summary>
- Temperature reading at sensor 1 (I2C_CPU-Object) taken every 30s.
+ Temperature reading from EC temperature sensor 1 (TSR1) taken every 30s.
+
+ This metric is specific to Chrome OS
</summary>
</histogram>
-<histogram name="Platform.Temperature.Sensor02" units="Celsius"
- expires_after="2018-08-30">
- <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+<histogram name="Platform.Temperature.Sensor02" units="Celsius">
+ <owner>fletcherw@chromium.org</owner>
<summary>
- Temperature reading at sensor 2 (I2C_PCH-Die) taken every 30s.
+ Temperature reading from EC temperature sensor 2 (TSR2) taken every 30s.
+
+ This metric is specific to Chrome OS
</summary>
</histogram>
@@ -78348,7 +82094,6 @@ uploading your change for review.
<obsolete>
Deprecated as of 2014-06.
</obsolete>
- <owner>vabr@chromium.org</owner>
<summary>
The PLT.Abandoned histogram for pages loaded after WebRequest API was used.
</summary>
@@ -78473,7 +82218,6 @@ uploading your change for review.
<obsolete>
No longer needed.
</obsolete>
- <owner>vabr@chromium.org</owner>
<summary>
The PLT.BeginToFinish histogram for pages loaded by following a link, after
WebRequest API was used.
@@ -78535,7 +82279,6 @@ uploading your change for review.
<obsolete>
No longer needed.
</obsolete>
- <owner>vabr@chromium.org</owner>
<summary>
The PLT.BeginToFinish histogram for pages reloaded by JavaScript or by
following a link, after WebRequest API was used.
@@ -78597,7 +82340,6 @@ uploading your change for review.
<obsolete>
No longer needed.
</obsolete>
- <owner>vabr@chromium.org</owner>
<summary>
The PLT.BeginToFinish histogram for pages loads initiated by back/forward
buttons, or by a change of encoding, after WebRequest API was used.
@@ -78655,7 +82397,6 @@ uploading your change for review.
<obsolete>
No longer needed.
</obsolete>
- <owner>vabr@chromium.org</owner>
<summary>
The PLT.BeginToFinish histogram for pages loaded by entering a URL or a
search query into Omnibox, after WebRequest API was used.
@@ -82014,6 +85755,21 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Prerender.PrerenderLoadedOnFirstNTP" enum="Boolean">
+ <owner>justincohen@chromium.org</owner>
+ <summary>
+ Whether or not a successful prerender happens on a NTP with no history.
+ </summary>
+</histogram>
+
+<histogram name="Prerender.PrerenderLoadedOnIndex">
+ <owner>justincohen@chromium.org</owner>
+ <summary>
+ The last comitted index before a successful preload is committed. Recorded
+ only on iOS.
+ </summary>
+</histogram>
+
<histogram name="Prerender.PrerenderNotSwappedInPLT" units="ms">
<obsolete>
Deprecated 2017-03.
@@ -82033,6 +85789,16 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Prerender.PrerenderStartToReleaseContentsTime" units="ms"
+ expires_after="2019-12-06">
+ <owner>justincohen@chromium.org</owner>
+ <summary>
+ This is the time from when a prerendered page begins to load to when it is
+ swapped in as the main page load. Recorded when the swap occurs, only on
+ iOS.
+ </summary>
+</histogram>
+
<histogram name="Prerender.RelTypesLinkAdded" enum="PrerenderRelTypes">
<owner>pasko@chromium.org</owner>
<summary>
@@ -82302,7 +86068,9 @@ uploading your change for review.
reports the reason for disallowing it. If the preview is allowed, then this
generally reports &quot;Previews Allowed&quot;. It may instead report
&quot;Previews Allowed without server rule check&quot; for a preview that
- expects to check server rules but they are not enabled.
+ expects to check server rules but they are not enabled. Recorded throughout
+ navigation at the beginning of each navigation, after each redirect, and
+ during commit.
</summary>
</histogram>
@@ -82433,6 +86201,11 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Previews.PageEndReason" enum="PageEndReason">
+ <owner>robertogden@chromium.org</owner>
+ <summary>Records why the page load ended on a given preview type.</summary>
+</histogram>
+
<histogram name="Previews.ProcessHintsResult" enum="PreviewsProcessHintsResult">
<owner>dougarnett@chromium.org</owner>
<summary>
@@ -82452,6 +86225,15 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Previews.ServerLitePage.HostBlacklistedOnBypass"
+ enum="Boolean">
+ <owner>robertogden@chromium.org</owner>
+ <summary>
+ Whether or not the server directed Chrome to blacklist the requested host on
+ a bypass response.
+ </summary>
+</histogram>
+
<histogram name="Previews.ServerLitePage.HttpOnlyFallbackPenalty" units="ms">
<owner>robertogden@chromium.org</owner>
<summary>
@@ -82471,6 +86253,34 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Previews.ServerLitePage.NotReportedNavigationRestartPenalty"
+ units="ms">
+ <owner>robertogden@chromium.org</owner>
+ <summary>
+ Every time a navigation is restarted on account of this preview we attempt
+ to report the cumulative total penalty to page load metrics. This histogram
+ tracks penalties that were not successfully reported. The penalty is the
+ amount of time between the navigation start of the original (i.e.:
+ user-initiated) navigation and the current navigation when this histogram is
+ reported. This histogram is reported at the start of every navigation for
+ every navigation seen by the Lite Page Redirect Navigation Throttle.
+ </summary>
+</histogram>
+
+<histogram name="Previews.ServerLitePage.ReportedNavigationRestartPenalty"
+ units="ms">
+ <owner>robertogden@chromium.org</owner>
+ <summary>
+ Every time a navigation is restarted on account of this preview we attempt
+ to report the cumulative total penalty to page load metrics. This histogram
+ tracks penalties that were successfully reported. The penalty is the amount
+ of time between the navigation start of the original (i.e.: user-initiated)
+ navigation and the current navigation when this histogram is reported. This
+ histogram is reported at the start of every navigation for every navigation
+ seen by the Lite Page Redirect Navigation Throttle.
+ </summary>
+</histogram>
+
<histogram name="Previews.ServerLitePage.ServerResponse"
enum="PreviewsServerLitePageServerResponse">
<owner>robertogden@chromium.org</owner>
@@ -82497,6 +86307,17 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Previews.Triggered.EffectiveConnectionType"
+ enum="NQEEffectiveConnectionType">
+ <owner>dougarnett@chromium.org</owner>
+ <summary>
+ Records the effective connection type of a navigation that triggers a
+ preview. This is captured for slow page preview types - that is, ones that
+ support variable thresholds depending on matching a page pattern in the
+ optimization guide hints.
+ </summary>
+</histogram>
+
<histogram name="PrinterService.PrinterServiceEvent"
enum="PrinterServiceEventType">
<owner>vitalybuka@chromium.org</owner>
@@ -82913,6 +86734,30 @@ uploading your change for review.
<summary>Time taken to render to PDF for print preview.</summary>
</histogram>
+<histogram name="PrintPreview.SiteIsolation.CrossSiteFrameCount" units="frames">
+ <owner>alexmos@chromium.org</owner>
+ <summary>
+ The number of cross-site frames contained in a document being printed, as
+ defined by comparing scheme and eTLD+1.
+ </summary>
+</histogram>
+
+<histogram name="PrintPreview.SiteIsolation.CrossSiteVisibleFrameCount"
+ units="frames">
+ <owner>alexmos@chromium.org</owner>
+ <summary>
+ The number of cross-site visible frames contained in a document being
+ printed.
+ </summary>
+</histogram>
+
+<histogram name="PrintPreview.SiteIsolation.RemoteFrameCount" units="frames">
+ <owner>alexmos@chromium.org</owner>
+ <summary>
+ The number of out-of-process frames contained in a document being printed.
+ </summary>
+</histogram>
+
<histogram name="PrintPreview.UserAction" enum="PrintPreviewUserActionType">
<owner>vitalybuka@chromium.org</owner>
<summary>
@@ -83717,6 +87562,62 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="ProtoDB.DestroySuccess" enum="BooleanSuccess">
+ <owner>thildebr@chromium.org</owner>
+ <summary>Whether a ProtoDB Destroy call was successful or not.</summary>
+</histogram>
+
+<histogram name="ProtoDB.GetErrorStatus" enum="LevelDBStatus">
+ <owner>thildebr@chromium.org</owner>
+ <summary>
+ The LevelDB Status returned from a failed ProtoDatabase Get call.
+ </summary>
+</histogram>
+
+<histogram name="ProtoDB.GetFound" enum="Boolean">
+ <owner>thildebr@chromium.org</owner>
+ <summary>Whether a ProtoDB Get call found what was requested.</summary>
+</histogram>
+
+<histogram name="ProtoDB.GetSuccess" enum="BooleanSuccess">
+ <owner>thildebr@chromium.org</owner>
+ <summary>Whether a ProtoDB Get call was successful or not.</summary>
+</histogram>
+
+<histogram name="ProtoDB.InitStatus" enum="LevelDBStatus">
+ <owner>thildebr@chromium.org</owner>
+ <summary>The LevelDB Status from a ProtoDatabase Init call.</summary>
+</histogram>
+
+<histogram name="ProtoDB.LoadEntriesSuccess" enum="BooleanSuccess">
+ <owner>thildebr@chromium.org</owner>
+ <summary>Whether a ProtoDB LoadEntries call was successful or not.</summary>
+</histogram>
+
+<histogram name="ProtoDB.LoadKeysAndEntriesSuccess" enum="BooleanSuccess">
+ <owner>thildebr@chromium.org</owner>
+ <summary>
+ Whether a ProtoDB LoadKeysAndEntries call was successful or not.
+ </summary>
+</histogram>
+
+<histogram name="ProtoDB.LoadKeysSuccess" enum="BooleanSuccess">
+ <owner>thildebr@chromium.org</owner>
+ <summary>Whether a ProtoDB LoadKeys call was successful or not.</summary>
+</histogram>
+
+<histogram name="ProtoDB.UpdateErrorStatus" enum="LevelDBStatus">
+ <owner>thildebr@chromium.org</owner>
+ <summary>
+ The LevelDB Status returned from a failed Protodatabase UpdateEntries call.
+ </summary>
+</histogram>
+
+<histogram name="ProtoDB.UpdateSuccess" enum="BooleanSuccess">
+ <owner>thildebr@chromium.org</owner>
+ <summary>Whether a ProtoDB UpdateEntries call was successful or not.</summary>
+</histogram>
+
<histogram name="ProximityAuth.BleWeaveConnectionResult"
enum="ProximityAuth_BleWeaveConnectionResult">
<owner>hansberry@chromium.org</owner>
@@ -83937,6 +87838,16 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="PushMessaging.QueuedMessagesCount" expires_after="2019-11-01">
+ <owner>mamir@chromium.org</owner>
+ <summary>
+ When a message arrives for a lazy subscription and Chrome isn't in the
+ foreground, it is persisted on disk until next time Chrome is in the
+ foreground. This is recorded before adding the message the persisted queue
+ to estimate how large does the queue grow.
+ </summary>
+</histogram>
+
<histogram name="PushMessaging.ReceivedMessageInBackground" enum="Boolean">
<owner>dgn@chromium.org</owner>
<summary>
@@ -83974,6 +87885,29 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="PushMessaging.TimeToCheckIfSubscriptionLazy" units="ms"
+ expires_after="2019-11-01">
+ <owner>mamir@chromium.org</owner>
+ <summary>
+ When a message arrives to a subscription while Chrome is in the background,
+ the subscription is checked first for being lazy, and accordingly the
+ message is forwarded or persisted on disk. Since this check may require disk
+ access, this histogram measures the time spent in checking if the
+ subscription is lazy.
+ </summary>
+</histogram>
+
+<histogram name="PushMessaging.TimeToReadPersistedMessages" units="ms"
+ expires_after="2019-11-01">
+ <owner>mamir@chromium.org</owner>
+ <summary>
+ When a message arrives for a lazy subscription and Chrome isn't in the
+ foreground, it is persisted on disk until next time Chrome is in the
+ foreground. This histogram measures the time spent in reading and replaying
+ persisted messages when Chrome goes to the foreground.
+ </summary>
+</histogram>
+
<histogram name="PushMessaging.UnregistrationGCMResult" enum="GCMClientResult">
<owner>johnme@google.com</owner>
<summary>
@@ -84019,75 +87953,86 @@ uploading your change for review.
</summary>
</histogram>
-<histogram name="Quickoffice.csvFormattedCellCount">
- <owner>dskelton@google.com</owner>
+<histogram name="Quickoffice.csvFormattedCellCount" expires_after="2020-02-29">
+ <owner>snopanen@google.com</owner>
+ <owner>sdoerner@google.com</owner>
<summary>
Records the number of cells that contain formatting data in the default
worksheet when a comma separated value spreadsheet is opened.
</summary>
</histogram>
-<histogram name="Quickoffice.csvNonEmptyCellCount">
- <owner>dskelton@google.com</owner>
+<histogram name="Quickoffice.csvNonEmptyCellCount" expires_after="2020-02-29">
+ <owner>snopanen@google.com</owner>
+ <owner>sdoerner@google.com</owner>
<summary>
Records the number of non-empty cells in the default worksheet when a comma
separated value spreadsheet is opened.
</summary>
</histogram>
-<histogram name="Quickoffice.csvSheetCount">
- <owner>dskelton@google.com</owner>
+<histogram name="Quickoffice.csvSheetCount" expires_after="2020-02-29">
+ <owner>snopanen@google.com</owner>
+ <owner>sdoerner@google.com</owner>
<summary>
Records the number of worksheets when a comma separated value spreadsheet is
opened.
</summary>
</histogram>
-<histogram name="Quickoffice.docPageCount">
- <owner>joshwoodward@google.com</owner>
+<histogram name="Quickoffice.docPageCount" expires_after="2020-02-29">
+ <owner>snopanen@google.com</owner>
+ <owner>sdoerner@google.com</owner>
<summary>
Records the page count when a compound binary format document is opened.
</summary>
</histogram>
-<histogram name="Quickoffice.docParagraphCount">
- <owner>joshwoodward@google.com</owner>
+<histogram name="Quickoffice.docParagraphCount" expires_after="2020-02-29">
+ <owner>snopanen@google.com</owner>
+ <owner>sdoerner@google.com</owner>
<summary>
Records the paragraph count when a compound binary format document is
opened.
</summary>
</histogram>
-<histogram name="Quickoffice.docSectionCount">
- <owner>joshwoodward@google.com</owner>
+<histogram name="Quickoffice.docSectionCount" expires_after="2020-02-29">
+ <owner>snopanen@google.com</owner>
+ <owner>sdoerner@google.com</owner>
<summary>
Records the section count when a compound binary format document is opened.
</summary>
</histogram>
-<histogram name="Quickoffice.docxPageCount">
- <owner>joshwoodward@google.com</owner>
+<histogram name="Quickoffice.docxPageCount" expires_after="2020-02-29">
+ <owner>snopanen@google.com</owner>
+ <owner>sdoerner@google.com</owner>
<summary>
Records the page count when an OOXML format document is opened.
</summary>
</histogram>
-<histogram name="Quickoffice.docxParagraphCount">
- <owner>joshwoodward@google.com</owner>
+<histogram name="Quickoffice.docxParagraphCount" expires_after="2020-02-29">
+ <owner>snopanen@google.com</owner>
+ <owner>sdoerner@google.com</owner>
<summary>
Records the paragraph count when an OOXML format document is opened.
</summary>
</histogram>
-<histogram name="Quickoffice.docxSectionCount">
- <owner>joshwoodward@google.com</owner>
+<histogram name="Quickoffice.docxSectionCount" expires_after="2020-02-29">
+ <owner>snopanen@google.com</owner>
+ <owner>sdoerner@google.com</owner>
<summary>
Records the section count when an OOXML format document is opened.
</summary>
</histogram>
-<histogram name="Quickoffice.ErrorTypes" enum="QuickofficeErrorTypes">
- <owner>joshwoodward@google.com</owner>
+<histogram name="Quickoffice.ErrorTypes" enum="QuickofficeErrorTypes"
+ expires_after="2020-02-29">
+ <owner>snopanen@google.com</owner>
+ <owner>sdoerner@google.com</owner>
<summary>
Records the various different error types encountered when opening and
reading MS Office file formats in the Quickoffice viewer. These range from
@@ -84097,8 +88042,10 @@ uploading your change for review.
</summary>
</histogram>
-<histogram name="Quickoffice.FileFormat" enum="QuickofficeFileFormat">
- <owner>joshwoodward@google.com</owner>
+<histogram name="Quickoffice.FileFormat" enum="QuickofficeFileFormat"
+ expires_after="2020-02-29">
+ <owner>snopanen@google.com</owner>
+ <owner>sdoerner@google.com</owner>
<summary>
Records the various different file types supported by Quickoffice (like MS
Word, Excel, Powerpoint files) when they opened in the browser to measure
@@ -84106,79 +88053,89 @@ uploading your change for review.
</summary>
</histogram>
-<histogram name="Quickoffice.pptMasterCount">
- <owner>joshwoodward@google.com</owner>
+<histogram name="Quickoffice.pptMasterCount" expires_after="2020-02-29">
+ <owner>snopanen@google.com</owner>
+ <owner>sdoerner@google.com</owner>
<summary>
Records the number of slide masters when a compound binary format
presentation is opened.
</summary>
</histogram>
-<histogram name="Quickoffice.pptSlideCount">
- <owner>joshwoodward@google.com</owner>
+<histogram name="Quickoffice.pptSlideCount" expires_after="2020-02-29">
+ <owner>snopanen@google.com</owner>
+ <owner>sdoerner@google.com</owner>
<summary>
Records the slide count when a compound binary format presentation is
opened.
</summary>
</histogram>
-<histogram name="Quickoffice.pptxMasterCount">
- <owner>joshwoodward@google.com</owner>
+<histogram name="Quickoffice.pptxMasterCount" expires_after="2020-02-29">
+ <owner>snopanen@google.com</owner>
+ <owner>sdoerner@google.com</owner>
<summary>
Records the number of slide masters when an OOXML format presentation is
opened.
</summary>
</histogram>
-<histogram name="Quickoffice.pptxSlideCount">
- <owner>joshwoodward@google.com</owner>
+<histogram name="Quickoffice.pptxSlideCount" expires_after="2020-02-29">
+ <owner>snopanen@google.com</owner>
+ <owner>sdoerner@google.com</owner>
<summary>
Records the slide count when an OOXML format presentation is opened.
</summary>
</histogram>
-<histogram name="Quickoffice.xlsFormattedCellCount">
- <owner>joshwoodward@google.com</owner>
+<histogram name="Quickoffice.xlsFormattedCellCount" expires_after="2020-02-29">
+ <owner>snopanen@google.com</owner>
+ <owner>sdoerner@google.com</owner>
<summary>
Records the number of cells that contain formatting data in the default
worksheet when a compound binary format spreadsheet is opened.
</summary>
</histogram>
-<histogram name="Quickoffice.xlsNonEmptyCellCount">
- <owner>joshwoodward@google.com</owner>
+<histogram name="Quickoffice.xlsNonEmptyCellCount" expires_after="2020-02-29">
+ <owner>snopanen@google.com</owner>
+ <owner>sdoerner@google.com</owner>
<summary>
Records the number of non-empty cells in the default worksheet when a
compound binary format spreadsheet is opened.
</summary>
</histogram>
-<histogram name="Quickoffice.xlsSheetCount">
- <owner>joshwoodward@google.com</owner>
+<histogram name="Quickoffice.xlsSheetCount" expires_after="2020-02-29">
+ <owner>snopanen@google.com</owner>
+ <owner>sdoerner@google.com</owner>
<summary>
Records the number of worksheets when a compound binary format spreadsheet
is opened.
</summary>
</histogram>
-<histogram name="Quickoffice.xlsxFormattedCellCount">
- <owner>joshwoodward@google.com</owner>
+<histogram name="Quickoffice.xlsxFormattedCellCount" expires_after="2020-02-29">
+ <owner>snopanen@google.com</owner>
+ <owner>sdoerner@google.com</owner>
<summary>
Records the number of cells that contain formatting data in the default
worksheet when an OOXML format spreadsheet is opened.
</summary>
</histogram>
-<histogram name="Quickoffice.xlsxNonEmptyCellCount">
- <owner>joshwoodward@google.com</owner>
+<histogram name="Quickoffice.xlsxNonEmptyCellCount" expires_after="2020-02-29">
+ <owner>snopanen@google.com</owner>
+ <owner>sdoerner@google.com</owner>
<summary>
Records the number of non-empty cells when an OOXML format spreadsheet is
opened.
</summary>
</histogram>
-<histogram name="Quickoffice.xlsxSheetCount">
- <owner>joshwoodward@google.com</owner>
+<histogram name="Quickoffice.xlsxSheetCount" expires_after="2020-02-29">
+ <owner>snopanen@google.com</owner>
+ <owner>sdoerner@google.com</owner>
<summary>
Records the number of worksheets when an OOXML format spreadsheet is opened.
</summary>
@@ -86836,6 +90793,25 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="RenderTextHarfBuzz.GetFallbackFontsTime" units="ms">
+ <owner>ccameron@chromium.org</owner>
+ <owner>etienneb@chromium.org</owner>
+ <summary>
+ Time retrieve the fallback fonts on the system used for
+ RenderTextHarfBuzz::ShapeRuns. This metric is known to be quite slow on bad
+ cases.
+ </summary>
+</histogram>
+
+<histogram name="RenderTextHarfBuzz.ShapeRunsWithFallbackFontsTime" units="ms">
+ <owner>ccameron@chromium.org</owner>
+ <owner>etienneb@chromium.org</owner>
+ <summary>
+ Time to perform RenderTextHarfBuzz::ShapeRuns with retrieved the fallback
+ fonts. This metric is known to be quite slow on bad cases.
+ </summary>
+</histogram>
+
<histogram name="RenderViewContextMenu.OpenLinkAsUser" enum="OpenLinkAsUser">
<owner>jochen@chromium.org</owner>
<summary>
@@ -87296,6 +91272,19 @@ uploading your change for review.
</summary>
</histogram>
+<histogram
+ name="ResourceLoadingHints.ResourcePatternsAvailableAtCommitForRedirect"
+ enum="BooleanAvailable">
+ <owner>tbansal@chromium.org</owner>
+ <owner>dougarnett@chromium.org</owner>
+ <summary>
+ Records if the resource patterns were available at the time of page commit
+ if the committed previews type was RESOURCE_LOADING_HINTS and the navigation
+ was redirected. This is a subset of the ResourcePatternsAvailableAtCommit
+ histogram.
+ </summary>
+</histogram>
+
<histogram name="ResourcePrefetchPredictor.CachePattern"
enum="HttpCachePattern">
<obsolete>
@@ -87840,6 +91829,9 @@ uploading your change for review.
</histogram>
<histogram name="ResourcePrefetchPredictor.PrefetchingDuration" units="ms">
+ <obsolete>
+ Deprecated at M72. No longer recorded.
+ </obsolete>
<owner>alexilin@chromium.org</owner>
<summary>
Amount of time available for prefetching. Specifically, this is a time
@@ -87901,6 +91893,9 @@ uploading your change for review.
<histogram name="ResourcePrefetchPredictor.ReportingEvent"
enum="ResourcePrefetchPredictorReportingEvent">
+ <obsolete>
+ Deprecated at M72. No longer recorded.
+ </obsolete>
<owner>alexilin@chromium.org</owner>
<summary>
Records stats about various interesting events such as - when partial or all
@@ -88469,7 +92464,7 @@ uploading your change for review.
<histogram name="SafeBrowsing.ContentsSize.Height" units="DIPs"
expires_after="M73">
- <owner>jialiul@chrormium.org</owner>
+ <owner>jialiul@chromium.org</owner>
<owner>nparker@chromium.org</owner>
<summary>
Records the height of content area when the user opens a new browser window
@@ -88479,7 +92474,7 @@ uploading your change for review.
<histogram name="SafeBrowsing.ContentsSize.Width" units="DIPs"
expires_after="M73">
- <owner>jialiul@chrormium.org</owner>
+ <owner>jialiul@chromium.org</owner>
<owner>nparker@chromium.org</owner>
<summary>
Records the width of content area when the user opens a new browser window
@@ -88573,6 +92568,32 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="SafeBrowsing.FontSize.Default" units="pts" expires_after="M73">
+ <owner>drubery@chromium.org</owner>
+ <owner>nparker@chromium.org</owner>
+ <summary>Records the default font size on user startup.</summary>
+</histogram>
+
+<histogram name="SafeBrowsing.FontSize.DefaultFixed" units="pts"
+ expires_after="M73">
+ <owner>drubery@chromium.org</owner>
+ <owner>nparker@chromium.org</owner>
+ <summary>Records the default fixed font size on user startup.</summary>
+</histogram>
+
+<histogram name="SafeBrowsing.FontSize.Minimum" units="pts" expires_after="M73">
+ <owner>drubery@chromium.org</owner>
+ <owner>nparker@chromium.org</owner>
+ <summary>Records the minimum font size on user startup.</summary>
+</histogram>
+
+<histogram name="SafeBrowsing.FontSize.MinimumLogical" units="pts"
+ expires_after="M73">
+ <owner>drubery@chromium.org</owner>
+ <owner>nparker@chromium.org</owner>
+ <summary>Records the minimum logical font size on user startup.</summary>
+</histogram>
+
<histogram name="SafeBrowsing.GetV4HashHttpResponseOrErrorCode"
enum="CombinedHttpResponseAndNetErrorCode">
<obsolete>
@@ -90507,6 +94528,9 @@ uploading your change for review.
</histogram>
<histogram name="SB2.RemoteCall.CheckDispatchTime" units="microseconds">
+ <obsolete>
+ Deprecated Oct 2018
+ </obsolete>
<owner>csharrison@chromium.org</owner>
<owner>vakh@chromium.org</owner>
<summary>
@@ -93917,7 +97941,8 @@ uploading your change for review.
</summary>
</histogram>
-<histogram name="Search.ContextualSearchBarNoOverlap.PeekDuration" units="ms">
+<histogram name="Search.ContextualSearchBarNoOverlap.PeekDuration" units="ms"
+ expires_after="M72">
<owner>donnd@chromium.org</owner>
<owner>twellington@chromium.org</owner>
<summary>
@@ -93937,7 +97962,8 @@ uploading your change for review.
</summary>
</histogram>
-<histogram name="Search.ContextualSearchBarOverlap.PeekDuration" units="ms">
+<histogram name="Search.ContextualSearchBarOverlap.PeekDuration" units="ms"
+ expires_after="M72">
<owner>donnd@chromium.org</owner>
<owner>twellington@chromium.org</owner>
<summary>
@@ -93948,7 +97974,7 @@ uploading your change for review.
</histogram>
<histogram name="Search.ContextualSearchBarOverlapSeen"
- enum="ContextualSearchBarOverlapSeen">
+ enum="ContextualSearchBarOverlapSeen" expires_after="M72">
<owner>donnd@chromium.org</owner>
<owner>twellington@chromium.org</owner>
<summary>
@@ -93958,7 +97984,7 @@ uploading your change for review.
</histogram>
<histogram name="Search.ContextualSearchBasePageProtocol"
- enum="ContextualSearchBasePageProtocol">
+ enum="ContextualSearchBasePageProtocol" expires_after="M72">
<owner>donnd@chromium.org</owner>
<owner>twellington@chromium.org</owner>
<summary>
@@ -94003,7 +98029,7 @@ uploading your change for review.
</histogram>
<histogram name="Search.ContextualSearchDurationBetweenTriggerAndScrollNotSeen"
- units="ms">
+ units="ms" expires_after="M72">
<owner>donnd@chromium.org</owner>
<owner>twellington@chromium.org</owner>
<summary>
@@ -94015,7 +98041,7 @@ uploading your change for review.
</histogram>
<histogram name="Search.ContextualSearchDurationBetweenTriggerAndScrollSeen"
- units="ms">
+ units="ms" expires_after="M72">
<owner>donnd@chromium.org</owner>
<owner>twellington@chromium.org</owner>
<summary>
@@ -94050,7 +98076,8 @@ uploading your change for review.
</summary>
</histogram>
-<histogram name="Search.ContextualSearchDurationSeen" units="ms">
+<histogram name="Search.ContextualSearchDurationSeen" units="ms"
+ expires_after="M72">
<owner>donnd@chromium.org</owner>
<owner>twellington@chromium.org</owner>
<summary>
@@ -94059,7 +98086,8 @@ uploading your change for review.
</summary>
</histogram>
-<histogram name="Search.ContextualSearchDurationUnseen" units="ms">
+<histogram name="Search.ContextualSearchDurationUnseen" units="ms"
+ expires_after="M72">
<owner>donnd@chromium.org</owner>
<owner>twellington@chromium.org</owner>
<summary>
@@ -94069,7 +98097,8 @@ uploading your change for review.
</summary>
</histogram>
-<histogram name="Search.ContextualSearchDurationUnseenChained" units="ms">
+<histogram name="Search.ContextualSearchDurationUnseenChained" units="ms"
+ expires_after="M72">
<owner>donnd@chromium.org</owner>
<owner>twellington@chromium.org</owner>
<summary>
@@ -94080,7 +98109,7 @@ uploading your change for review.
</histogram>
<histogram name="Search.ContextualSearchEnterClosed"
- enum="ContextualSearchEnterClosedStateChange">
+ enum="ContextualSearchEnterClosedStateChange" expires_after="M72">
<owner>donnd@chromium.org</owner>
<owner>twellington@chromium.org</owner>
<summary>
@@ -94090,7 +98119,7 @@ uploading your change for review.
</histogram>
<histogram name="Search.ContextualSearchEnterExpanded"
- enum="ContextualSearchEnterExpandedStateChange">
+ enum="ContextualSearchEnterExpandedStateChange" expires_after="M72">
<owner>donnd@chromium.org</owner>
<owner>twellington@chromium.org</owner>
<summary>
@@ -94100,7 +98129,7 @@ uploading your change for review.
</histogram>
<histogram name="Search.ContextualSearchEnterMaximized"
- enum="ContextualSearchEnterMaximizedStateChange">
+ enum="ContextualSearchEnterMaximizedStateChange" expires_after="M72">
<owner>donnd@chromium.org</owner>
<owner>twellington@chromium.org</owner>
<summary>
@@ -94110,7 +98139,7 @@ uploading your change for review.
</histogram>
<histogram name="Search.ContextualSearchEnterPeeked"
- enum="ContextualSearchEnterPeekedStateChange">
+ enum="ContextualSearchEnterPeekedStateChange" expires_after="M72">
<owner>donnd@chromium.org</owner>
<owner>twellington@chromium.org</owner>
<summary>
@@ -94131,7 +98160,7 @@ uploading your change for review.
</histogram>
<histogram name="Search.ContextualSearchExitClosed"
- enum="ContextualSearchExitClosedStateChange">
+ enum="ContextualSearchExitClosedStateChange" expires_after="M72">
<owner>donnd@chromium.org</owner>
<owner>twellington@chromium.org</owner>
<summary>
@@ -94141,7 +98170,7 @@ uploading your change for review.
</histogram>
<histogram name="Search.ContextualSearchExitExpanded"
- enum="ContextualSearchExitExpandedStateChange">
+ enum="ContextualSearchExitExpandedStateChange" expires_after="M72">
<owner>donnd@chromium.org</owner>
<owner>twellington@chromium.org</owner>
<summary>
@@ -94151,7 +98180,7 @@ uploading your change for review.
</histogram>
<histogram name="Search.ContextualSearchExitMaximized"
- enum="ContextualSearchExitMaximizedStateChange">
+ enum="ContextualSearchExitMaximizedStateChange" expires_after="M72">
<owner>donnd@chromium.org</owner>
<owner>twellington@chromium.org</owner>
<summary>
@@ -94181,7 +98210,7 @@ uploading your change for review.
</histogram>
<histogram name="Search.ContextualSearchFirstRunFlowOutcome"
- enum="ContextualSearchPreferenceState">
+ enum="ContextualSearchPreferenceState" expires_after="M72">
<owner>donnd@chromium.org</owner>
<owner>twellington@chromium.org</owner>
<summary>
@@ -94191,7 +98220,7 @@ uploading your change for review.
</histogram>
<histogram name="Search.ContextualSearchFirstRunPanelSeen"
- enum="ContextualSearchFirstRunPanelSeen">
+ enum="ContextualSearchFirstRunPanelSeen" expires_after="M72">
<owner>donnd@chromium.org</owner>
<owner>twellington@chromium.org</owner>
<summary>
@@ -94227,7 +98256,8 @@ uploading your change for review.
</summary>
</histogram>
-<histogram name="Search.ContextualSearchLiteralSearchDuration" units="ms">
+<histogram name="Search.ContextualSearchLiteralSearchDuration" units="ms"
+ expires_after="M72">
<owner>donnd@chromium.org</owner>
<owner>twellington@chromium.org</owner>
<summary>
@@ -94238,7 +98268,7 @@ uploading your change for review.
</histogram>
<histogram name="Search.ContextualSearchLowPrioritySearchRequestStatus"
- enum="ContextualSearchSearchRequestStatus">
+ enum="ContextualSearchSearchRequestStatus" expires_after="M72">
<owner>donnd@chromium.org</owner>
<owner>twellington@chromium.org</owner>
<summary>
@@ -94268,7 +98298,8 @@ uploading your change for review.
</summary>
</histogram>
-<histogram name="Search.ContextualSearchPanelOpenDuration" units="ms">
+<histogram name="Search.ContextualSearchPanelOpenDuration" units="ms"
+ expires_after="M72">
<owner>donnd@chromium.org</owner>
<owner>twellington@chromium.org</owner>
<summary>
@@ -94372,7 +98403,8 @@ uploading your change for review.
</summary>
</histogram>
-<histogram name="Search.ContextualSearchPrevious28DayCtr" units="%">
+<histogram name="Search.ContextualSearchPrevious28DayCtr" units="%"
+ expires_after="M72">
<owner>donnd@chromium.org</owner>
<owner>twellington@chromium.org</owner>
<summary>
@@ -94382,7 +98414,8 @@ uploading your change for review.
</summary>
</histogram>
-<histogram name="Search.ContextualSearchPrevious28DayImpressions" units="views">
+<histogram name="Search.ContextualSearchPrevious28DayImpressions" units="views"
+ expires_after="M72">
<owner>donnd@chromium.org</owner>
<owner>twellington@chromium.org</owner>
<summary>
@@ -94392,7 +98425,8 @@ uploading your change for review.
</summary>
</histogram>
-<histogram name="Search.ContextualSearchPreviousWeekCtr" units="%">
+<histogram name="Search.ContextualSearchPreviousWeekCtr" units="%"
+ expires_after="M72">
<owner>donnd@chromium.org</owner>
<owner>twellington@chromium.org</owner>
<summary>
@@ -94402,7 +98436,8 @@ uploading your change for review.
</summary>
</histogram>
-<histogram name="Search.ContextualSearchPreviousWeekImpressions" units="views">
+<histogram name="Search.ContextualSearchPreviousWeekImpressions" units="views"
+ expires_after="M72">
<owner>donnd@chromium.org</owner>
<owner>twellington@chromium.org</owner>
<summary>
@@ -94421,7 +98456,7 @@ uploading your change for review.
</histogram>
<histogram name="Search.ContextualSearchPromoOutcomeByGesture"
- enum="ContextualSearchOutcomeByGesture">
+ enum="ContextualSearchOutcomeByGesture" expires_after="M72">
<owner>donnd@chromium.org</owner>
<owner>twellington@chromium.org</owner>
<summary>
@@ -94510,7 +98545,8 @@ uploading your change for review.
</summary>
</histogram>
-<histogram name="Search.ContextualSearchQuickActions.Shown" enum="BooleanShown">
+<histogram name="Search.ContextualSearchQuickActions.Shown" enum="BooleanShown"
+ expires_after="M72">
<owner>donnd@chromium.org</owner>
<owner>twellington@chromium.org</owner>
<summary>
@@ -94554,7 +98590,7 @@ uploading your change for review.
</histogram>
<histogram name="Search.ContextualSearchRecentScrollSuppression"
- enum="ContextualSearchTapSuppression">
+ enum="ContextualSearchTapSuppression" expires_after="M72">
<owner>donnd@chromium.org</owner>
<owner>twellington@chromium.org</owner>
<summary>
@@ -94563,7 +98599,8 @@ uploading your change for review.
</summary>
</histogram>
-<histogram name="Search.ContextualSearchResolutionDuration" units="ms">
+<histogram name="Search.ContextualSearchResolutionDuration" units="ms"
+ expires_after="M72">
<owner>donnd@chromium.org</owner>
<owner>twellington@chromium.org</owner>
<summary>
@@ -94572,7 +98609,8 @@ uploading your change for review.
</summary>
</histogram>
-<histogram name="Search.ContextualSearchResolvedSearchDuration" units="ms">
+<histogram name="Search.ContextualSearchResolvedSearchDuration" units="ms"
+ expires_after="M72">
<owner>donnd@chromium.org</owner>
<owner>twellington@chromium.org</owner>
<summary>
@@ -94583,7 +98621,7 @@ uploading your change for review.
</histogram>
<histogram name="Search.ContextualSearchResolvedTermWords"
- enum="ContextualSearchResolvedTermWords">
+ enum="ContextualSearchResolvedTermWords" expires_after="M72">
<owner>donnd@chromium.org</owner>
<owner>twellington@chromium.org</owner>
<summary>
@@ -94629,7 +98667,7 @@ uploading your change for review.
</histogram>
<histogram name="Search.ContextualSearchScreenTopSuppressed"
- enum="ContextualSearchTapSuppression">
+ enum="ContextualSearchTapSuppression" expires_after="M72">
<owner>donnd@chromium.org</owner>
<owner>twellington@chromium.org</owner>
<summary>
@@ -94660,7 +98698,8 @@ uploading your change for review.
</summary>
</histogram>
-<histogram name="Search.ContextualSearchSelectionLengthNotSeen" units="chars">
+<histogram name="Search.ContextualSearchSelectionLengthNotSeen" units="chars"
+ expires_after="M72">
<owner>donnd@chromium.org</owner>
<owner>twellington@chromium.org</owner>
<summary>
@@ -94670,7 +98709,8 @@ uploading your change for review.
</summary>
</histogram>
-<histogram name="Search.ContextualSearchSelectionLengthSeen" units="chars">
+<histogram name="Search.ContextualSearchSelectionLengthSeen" units="chars"
+ expires_after="M72">
<owner>donnd@chromium.org</owner>
<owner>twellington@chromium.org</owner>
<summary>
@@ -94681,7 +98721,7 @@ uploading your change for review.
</histogram>
<histogram name="Search.ContextualSearchSelectionLengthSuppression"
- enum="ContextualSearchTapSuppression">
+ enum="ContextualSearchTapSuppression" expires_after="M72">
<owner>donnd@chromium.org</owner>
<owner>twellington@chromium.org</owner>
<summary>
@@ -94691,7 +98731,7 @@ uploading your change for review.
</histogram>
<histogram name="Search.ContextualSearchSelectionValid"
- enum="ContextualSearchSelectionValid">
+ enum="ContextualSearchSelectionValid" expires_after="M72">
<owner>donnd@chromium.org</owner>
<owner>twellington@chromium.org</owner>
<summary>
@@ -94737,7 +98777,8 @@ uploading your change for review.
</summary>
</histogram>
-<histogram name="Search.ContextualSearchTapDurationNotSeen" units="ms">
+<histogram name="Search.ContextualSearchTapDurationNotSeen" units="ms"
+ expires_after="M72">
<owner>donnd@chromium.org</owner>
<owner>twellington@chromium.org</owner>
<summary>
@@ -94747,7 +98788,8 @@ uploading your change for review.
</summary>
</histogram>
-<histogram name="Search.ContextualSearchTapDurationSeen" units="ms">
+<histogram name="Search.ContextualSearchTapDurationSeen" units="ms"
+ expires_after="M72">
<owner>donnd@chromium.org</owner>
<owner>twellington@chromium.org</owner>
<summary>
@@ -94769,7 +98811,7 @@ uploading your change for review.
</histogram>
<histogram name="Search.ContextualSearchTapLongDurationSeen"
- enum="ContextualSearchResultsSeen">
+ enum="ContextualSearchResultsSeen" expires_after="M72">
<owner>donnd@chromium.org</owner>
<owner>twellington@chromium.org</owner>
<summary>
@@ -94779,7 +98821,7 @@ uploading your change for review.
</histogram>
<histogram name="Search.ContextualSearchTapLongWordSeen"
- enum="ContextualSearchResultsSeen">
+ enum="ContextualSearchResultsSeen" expires_after="M72">
<owner>donnd@chromium.org</owner>
<owner>twellington@chromium.org</owner>
<summary>
@@ -94789,7 +98831,7 @@ uploading your change for review.
</histogram>
<histogram name="Search.ContextualSearchTapOnWordMiddleSeen"
- enum="ContextualSearchResultsSeen">
+ enum="ContextualSearchResultsSeen" expires_after="M72">
<owner>donnd@chromium.org</owner>
<owner>twellington@chromium.org</owner>
<summary>
@@ -94799,7 +98841,7 @@ uploading your change for review.
</histogram>
<histogram name="Search.ContextualSearchTapShortDurationSeen"
- enum="ContextualSearchResultsSeen">
+ enum="ContextualSearchResultsSeen" expires_after="M72">
<owner>donnd@chromium.org</owner>
<owner>twellington@chromium.org</owner>
<summary>
@@ -94809,7 +98851,7 @@ uploading your change for review.
</histogram>
<histogram name="Search.ContextualSearchTapShortWordSeen"
- enum="ContextualSearchResultsSeen">
+ enum="ContextualSearchResultsSeen" expires_after="M72">
<owner>donnd@chromium.org</owner>
<owner>twellington@chromium.org</owner>
<summary>
@@ -94818,7 +98860,8 @@ uploading your change for review.
</summary>
</histogram>
-<histogram name="Search.ContextualSearchTapsSinceOpenDecided" units="taps">
+<histogram name="Search.ContextualSearchTapsSinceOpenDecided" units="taps"
+ expires_after="M72">
<owner>donnd@chromium.org</owner>
<owner>twellington@chromium.org</owner>
<summary>
@@ -94827,7 +98870,8 @@ uploading your change for review.
</summary>
</histogram>
-<histogram name="Search.ContextualSearchTapsSinceOpenUndecided" units="taps">
+<histogram name="Search.ContextualSearchTapsSinceOpenUndecided" units="taps"
+ expires_after="M72">
<owner>donnd@chromium.org</owner>
<owner>twellington@chromium.org</owner>
<summary>
@@ -94851,7 +98895,7 @@ uploading your change for review.
<histogram
name="Search.ContextualSearchTapSuppressionSeen.AnyHeuristicSatisfied"
- enum="ContextualSearchSuppressionResultsSeen">
+ enum="ContextualSearchSuppressionResultsSeen" expires_after="M72">
<owner>donnd@chromium.org</owner>
<owner>twellington@chromium.org</owner>
<summary>
@@ -94861,7 +98905,8 @@ uploading your change for review.
</summary>
</histogram>
-<histogram name="Search.ContextualSearchTimeToSearch" units="ms">
+<histogram name="Search.ContextualSearchTimeToSearch" units="ms"
+ expires_after="M72">
<owner>donnd@chromium.org</owner>
<owner>twellington@chromium.org</owner>
<summary>
@@ -94870,7 +98915,8 @@ uploading your change for review.
</summary>
</histogram>
-<histogram name="Search.ContextualSearchTopLocationNotSeen" units="dps">
+<histogram name="Search.ContextualSearchTopLocationNotSeen" units="dps"
+ expires_after="M72">
<owner>donnd@chromium.org</owner>
<owner>twellington@chromium.org</owner>
<summary>
@@ -94879,7 +98925,8 @@ uploading your change for review.
</summary>
</histogram>
-<histogram name="Search.ContextualSearchTopLocationSeen" units="dps">
+<histogram name="Search.ContextualSearchTopLocationSeen" units="dps"
+ expires_after="M72">
<owner>donnd@chromium.org</owner>
<owner>twellington@chromium.org</owner>
<summary>
@@ -95027,6 +99074,15 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Search.iOS.SelectDefaultSearchEngine"
+ enum="OmniboxSearchEngineType" expires_after="2020-02-04">
+ <owner>mrsuyi@chromium.org</owner>
+ <summary>
+ When an iOS user changes the default search engine in chrome Settings,
+ records the search engine's type.
+ </summary>
+</histogram>
+
<histogram name="Search.MigratedPrefToDictionaryValue" enum="BooleanHit">
<obsolete>
Deprecated after migrator is deleted in 12/2016.
@@ -95808,6 +99864,9 @@ uploading your change for review.
</histogram>
<histogram name="ServiceWorker.EventDispatchingDelay" units="ms">
+ <obsolete>
+ Removed Oct 2018 (M72)
+ </obsolete>
<owner>horo@chromium.org</owner>
<summary>
The time taken between sending an event IPC from the browser process to a
@@ -96035,7 +100094,7 @@ uploading your change for review.
name="ServiceWorker.LoadTiming.MainFrame.MainResource.FetchHandlerEndToFallbackNetwork"
units="ms" expires_after="2021-10-31">
<owner>bashi@chromium.org</owner>
- <owner>falken@chromium.org</owner>
+ <owner>chrome-worker@google.com</owner>
<summary>
The time taken from (a) renderer process sends an IPC message to notify that
a resource loading request needs to be fall back to network, to (b) browser
@@ -96052,7 +100111,7 @@ uploading your change for review.
name="ServiceWorker.LoadTiming.MainFrame.MainResource.FetchHandlerEndToResponseReceived"
units="ms" expires_after="2021-10-31">
<owner>bashi@chromium.org</owner>
- <owner>falken@chromium.org</owner>
+ <owner>chrome-worker@google.com</owner>
<summary>
The time taken from (a) renderer process sends an IPC message to notify that
a promise of respondWith() is settled, to (b) browser process received the
@@ -96069,7 +100128,7 @@ uploading your change for review.
name="ServiceWorker.LoadTiming.MainFrame.MainResource.FetchHandlerStartToFetchHandlerEnd"
units="ms" expires_after="2021-10-31">
<owner>bashi@chromium.org</owner>
- <owner>falken@chromium.org</owner>
+ <owner>chrome-worker@google.com</owner>
<summary>
The time taken from (a) a fetch event is dispatched, to (b) respondWith() is
settled for the fetch event, or fetch event dispatch is finished without
@@ -96085,7 +100144,7 @@ uploading your change for review.
name="ServiceWorker.LoadTiming.MainFrame.MainResource.ForwardServiceWorkerToWorkerReady"
units="ms" expires_after="2021-10-31">
<owner>bashi@chromium.org</owner>
- <owner>falken@chromium.org</owner>
+ <owner>chrome-worker@google.com</owner>
<summary>
The time taken from (a) a resource loading request is routed to service
worker path, to (b) a service worker is ready to handle the request.
@@ -96099,16 +100158,36 @@ uploading your change for review.
<histogram
name="ServiceWorker.LoadTiming.MainFrame.MainResource.ResponseReceivedToCompleted"
units="ms" expires_after="2021-10-31">
+ <obsolete>
+ Deprecated 2018-11 in favor of
+ ServiceWorker.LoadTiming.MainFrame.MainResource.ResponseReceivedToCompleted2.
+ </obsolete>
<owner>bashi@chromium.org</owner>
- <owner>falken@chromium.org</owner>
+ <owner>chrome-worker@google.com</owner>
<summary>
The time taken from (a) response headers from service worker are received,
- to (b) reading response body is completed.
+ to (b) reading response body is completed. Recorded when a fetch event
+ handler handled the request.
- Recorded when a fetch event handler handled the request. Recorded for each
- navigation request (including redirects) where there is a fetch event
- handler and the fetch event was successfully dispatched to the service
- worker.
+ Recorded for each navigation request (including redirects) where there is a
+ fetch event handler and the fetch event was successfully dispatched to the
+ service worker.
+ </summary>
+</histogram>
+
+<histogram
+ name="ServiceWorker.LoadTiming.MainFrame.MainResource.ResponseReceivedToCompleted2"
+ units="ms" expires_after="2021-10-31">
+ <owner>bashi@chromium.org</owner>
+ <owner>chrome-worker@google.com</owner>
+ <summary>
+ The time taken from (a) response headers from service worker are received,
+ to (b) reading response body is completed. Recorded when a fetch event
+ handler handled the request.
+
+ Recorded for each navigation request (including redirects) where there is a
+ fetch event handler and the fetch event was successfully dispatched to the
+ service worker.
</summary>
</histogram>
@@ -96116,7 +100195,7 @@ uploading your change for review.
name="ServiceWorker.LoadTiming.MainFrame.MainResource.StartToForwardServiceWorker"
units="ms" expires_after="2021-10-31">
<owner>bashi@chromium.org</owner>
- <owner>falken@chromium.org</owner>
+ <owner>chrome-worker@google.com</owner>
<summary>
The time taken from (a) the start of a navigation request, to (b) the
request is forwarded to a service worker code path. This includes looking up
@@ -96132,7 +100211,7 @@ uploading your change for review.
name="ServiceWorker.LoadTiming.MainFrame.MainResource.WorkerReadyToFetchHandlerStart"
units="ms" expires_after="2021-10-31">
<owner>bashi@chromium.org</owner>
- <owner>falken@chromium.org</owner>
+ <owner>chrome-worker@google.com</owner>
<summary>
The time taken from (a) browser process sends an IPC message to dispatch a
fetch event, to (b) a renderer process received the IPC message and is about
@@ -96144,6 +100223,104 @@ uploading your change for review.
</summary>
</histogram>
+<histogram
+ name="ServiceWorker.LoadTiming.Subresource.FetchHandlerEndToFallbackNetwork"
+ units="ms" expires_after="2021-10-31">
+ <owner>bashi@chromium.org</owner>
+ <owner>chrome-worker@google.com</owner>
+ <summary>
+ The time taken from (a) service worker sends a mojo message to notify that a
+ resource loading request needs to be fall back to network, to (b) the mojo
+ message is received on the other side of mojo endpoint (a background thread
+ executing subresource loading). Recorded when no fetch event handler
+ provided a response to the request.
+
+ Recorded for each subresource request where there is a fetch event handler
+ and the fetch event was successfully dispatched to the service worker.
+ </summary>
+</histogram>
+
+<histogram
+ name="ServiceWorker.LoadTiming.Subresource.FetchHandlerEndToResponseReceived"
+ units="ms" expires_after="2021-10-31">
+ <owner>bashi@chromium.org</owner>
+ <owner>chrome-worker@google.com</owner>
+ <summary>
+ The time taken from (a) service worker sends a mojo message to notify that a
+ promise of respondWith() is settled, to (b) the mojo message is received on
+ the other side of mojo endpoint (a background thread executing subresource
+ loading). Recorded when a fetch event handler handled the request and
+ provided a response to the request.
+
+ Recorded for each subresource request where there is a fetch event handler
+ and the fetch event was successfully dispatched to the service worker.
+ </summary>
+</histogram>
+
+<histogram
+ name="ServiceWorker.LoadTiming.Subresource.ForwardServiceWorkerToWorkerReady"
+ units="ms" expires_after="2021-10-31">
+ <obsolete>
+ Deprecated 2018-11 in favor of
+ ServiceWorker.LoadTiming.Subresource.ForwardServiceWorkerToWorkerReady2.
+ </obsolete>
+ <owner>bashi@chromium.org</owner>
+ <owner>chrome-worker@google.com</owner>
+ <summary>
+ The time taken from (a) a subresource request is routed to the URLLoader (on
+ a background thread) for service worker controlled loads starts handling a
+ subresource request, to (b) a service worker is ready to handle the request.
+
+ Recorded for each subresource request where there is a fetch event handler
+ and the fetch event was successfully dispatched to the service worker.
+ </summary>
+</histogram>
+
+<histogram
+ name="ServiceWorker.LoadTiming.Subresource.ForwardServiceWorkerToWorkerReady2"
+ units="ms" expires_after="2021-10-31">
+ <owner>bashi@chromium.org</owner>
+ <owner>chrome-worker@google.com</owner>
+ <summary>
+ The time taken from (a) a subresource request is routed to the URLLoader (on
+ a background thread) for service worker controlled loads starts handling a
+ subresource request, to (b) a service worker is ready to handle the request.
+
+ Recorded for each subresource request where there is a fetch event handler
+ and the fetch event was successfully dispatched to the service worker.
+ </summary>
+</histogram>
+
+<histogram
+ name="ServiceWorker.LoadTiming.Subresource.ResponseReceivedToCompleted"
+ units="ms" expires_after="2021-10-31">
+ <owner>bashi@chromium.org</owner>
+ <owner>chrome-worker@google.com</owner>
+ <summary>
+ The time taken from (a) response headers from service worker are received,
+ to (b) reading response body is completed. Only recorded when a fetch event
+ handler handled the request.
+
+ Recorded for each subresource request where there is a fetch event handler
+ and the fetch event was successfully dispatched to the service worker.
+ </summary>
+</histogram>
+
+<histogram
+ name="ServiceWorker.LoadTiming.Subresource.WorkerReadyToFetchHandlerEnd"
+ units="ms" expires_after="2021-10-31">
+ <owner>bashi@chromium.org</owner>
+ <owner>chrome-worker@google.com</owner>
+ <summary>
+ The time taken from (a) a fetch event is dispatched, to (b) respondWith() is
+ settled for the fetch event, or fetch event dispatch is finished without
+ respondWith() being called.
+
+ Recorded for each subresource request where there is a fetch event handler
+ and the fetch event was successfully dispatched to the service worker.
+ </summary>
+</histogram>
+
<histogram name="ServiceWorker.MainFramePageLoad" enum="ServiceWorkerSite">
<owner>horo@chromium.org</owner>
<summary>
@@ -96179,8 +100356,11 @@ uploading your change for review.
<histogram name="ServiceWorker.MainResourceRequestDestination"
enum="ServiceWorkerMainResourceRequestDestination"
expires_after="2018-12-01">
+ <obsolete>
+ Removed 2018-11, see https://crbug.com/902100
+ </obsolete>
<owner>falken@chromium.org</owner>
- <owner>worker-dev@chromium.org</owner>
+ <owner>chrome-worker@google.com</owner>
<summary>
Describes whether a main resource request (i.e., a request for a main frame,
subframe, or shared worker) was routed to service worker or network and why.
@@ -97081,7 +101261,7 @@ uploading your change for review.
</histogram>
<histogram name="ServiceWorkerCache.Scheduler.IsOperationSlow" enum="Boolean">
- <owner>jkarlin@chromium.org</owner>
+ <owner>wanderview@chromium.org</owner>
<summary>
An operation is slow (true) if it takes at least 10 seconds to run. If an
operation never completes, it will still be recorded as slow.
@@ -97089,21 +101269,47 @@ uploading your change for review.
</histogram>
<histogram name="ServiceWorkerCache.Scheduler.OperationDuration" units="ms">
- <owner>jkarlin@chromium.org</owner>
+ <obsolete>
+ This histogram was deprecated in M72 in favor of
+ ServiceWorkerCache.Scheduler.OperationDuration2.
+ </obsolete>
+ <owner>wanderview@chromium.org</owner>
<summary>
The time in ms from when an operation is started until it completes.
</summary>
</histogram>
+<histogram name="ServiceWorkerCache.Scheduler.OperationDuration2" units="ms">
+ <owner>wanderview@chromium.org</owner>
+ <summary>
+ The time in ms from when an operation is started until it completes. This
+ histogram differs from the old OperationDuration in that it uses a different
+ bucket size to measure longer values.
+ </summary>
+</histogram>
+
<histogram name="ServiceWorkerCache.Scheduler.QueueDuration" units="ms">
- <owner>jkarlin@chromium.org</owner>
+ <obsolete>
+ This histogram was deprecated in M72 in favor of
+ ServiceWorkerCache.Scheduler.QueueDuration2.
+ </obsolete>
+ <owner>wanderview@chromium.org</owner>
+ <summary>
+ The time in ms from when an operation was queued until its task is posted.
+ </summary>
+</histogram>
+
+<histogram name="ServiceWorkerCache.Scheduler.QueueDuration2" units="ms">
+ <owner>wanderview@chromium.org</owner>
<summary>
The time in ms from when an operation was queued until its task is posted.
+ This histogram differs from the old QueueDuration in that it uses a
+ different bucket size to measure longer values.
</summary>
</histogram>
<histogram name="ServiceWorkerCache.Scheduler.QueueLength" units="operations">
- <owner>jkarlin@chromium.org</owner>
+ <owner>wanderview@chromium.org</owner>
<summary>
The number of operations in the scheduling queue just before enqueuing a new
operation.
@@ -97325,9 +101531,6 @@ uploading your change for review.
milliseconds.
Desktop: This also takes into account user interaction and audio events.
- Starting from M55 the session length is recorded by discounting for default
- inactivity timeout. Also, until M69, there was a bug that caused
- double-counting of some sessions.
Android: This histogram isn't logged on Android. See instead
Session.TotalDuration.
@@ -97746,6 +101949,14 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="SessionStorageContext.OnConnectionDestroyed" enum="Boolean">
+ <owner>dmurph@chromium.org</owner>
+ <owner>dullweber@chromium.org</owner>
+ <summary>
+ Recorded when the database connection is closed unexpectedly.
+ </summary>
+</histogram>
+
<histogram name="SessionStorageContext.OpenError" enum="LocalStorageOpenError">
<owner>dmurph@chromium.org</owner>
<summary>
@@ -97961,6 +102172,9 @@ uploading your change for review.
</histogram>
<histogram name="Settings.JsonDataWriteCount" units="count">
+ <obsolete>
+ Removed 11/2018 due to lack of use.
+ </obsolete>
<owner>raymes@chromium.org</owner>
<summary>
The number of writes of a JSON file that occur in every 5 minute period of
@@ -98723,6 +102937,24 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Setup.Install.ServiceInstallResult"
+ enum="SetupInstallServiceInstallResult" expires_after="2020-12-30">
+ <owner>ganesh@chromium.org</owner>
+ <owner>sorin@chromium.org</owner>
+ <owner>xiaolingbao@chromium.org</owner>
+ <summary>The outcome of attempting to install a service on Windows.</summary>
+</histogram>
+
+<histogram name="Setup.Install.ServiceRollbackResult"
+ enum="SetupInstallServiceRollbackResult" expires_after="2020-12-30">
+ <owner>ganesh@chromium.org</owner>
+ <owner>sorin@chromium.org</owner>
+ <owner>xiaolingbao@chromium.org</owner>
+ <summary>
+ The outcome of attempting to rollback an install of a service on Windows.
+ </summary>
+</histogram>
+
<histogram name="Setup.Install.SingletonAcquisitionResult"
enum="SetupSingletonAcquisitionResult">
<owner>fdoray@chromium.org</owner>
@@ -98771,6 +103003,16 @@ uploading your change for review.
</summary>
</histogram>
+<histogram base="true" name="Setup.Install.Win32ApiError"
+ enum="WinGetLastError" expires_after="2020-12-30">
+<!-- Name completed by histogram_suffixes name="SetupInstallWin32Apis". -->
+
+ <owner>ganesh@chromium.org</owner>
+ <owner>sorin@chromium.org</owner>
+ <owner>xiaolingbao@chromium.org</owner>
+ <summary>Win32 APIs that error out during setup.</summary>
+</histogram>
+
<histogram name="SharedMemory.CreateError" enum="SharedMemoryCreateError"
expires_after="2018-08-30">
<owner>erikchen@chromium.org</owner>
@@ -99026,6 +103268,39 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="SignedExchange.Prefetch.LoadResult"
+ enum="SignedExchangeLoadResult" expires_after="2019-10-11">
+ <owner>kinuko@chromium.org</owner>
+ <owner>kouhei@chromium.org</owner>
+ <summary>
+ Records if the prefetched Signed Exchange was properly formatted and passed
+ verification steps. Reported for each completed SignedExchange prefetch.
+ </summary>
+</histogram>
+
+<histogram name="SignedExchange.Prefetch.Precision.30Seconds"
+ enum="BooleanUsage" expires_after="2019-10-11">
+ <owner>kinuko@chromium.org</owner>
+ <owner>kouhei@chromium.org</owner>
+ <summary>
+ Records if the prefetched Signed Exchange was actually the target of a
+ navigation which happened within 30 seconds. Reported when a corresponding
+ navigation is observed, or from an periodic timer event which cleans up the
+ unmatched prefetch entries.
+ </summary>
+</histogram>
+
+<histogram name="SignedExchange.Prefetch.Recall.30Seconds" enum="BooleanUsage"
+ expires_after="2019-10-11">
+ <owner>kinuko@chromium.org</owner>
+ <owner>kouhei@chromium.org</owner>
+ <summary>
+ Records how much Signed Exchange navigations were prefetched and not
+ prefetched. Matched against 30 seconds window. Reported for each Signed
+ Exchange navigations.
+ </summary>
+</histogram>
+
<histogram name="SignedExchange.SignatureVerificationError.Expired"
units="seconds" expires_after="2019-09-20">
<owner>kinuko@chromium.org</owner>
@@ -99190,6 +103465,13 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Signin.AndroidGetAccountIdsTime" units="ms">
+ <owner>bsazonov@chromium.org</owner>
+ <summary>
+ The time it takes to retrieve Gaia ids for all accounts from GoogleAuthUtil.
+ </summary>
+</histogram>
+
<histogram name="Signin.AndroidGetAccountsTime" units="ms">
<owner>nyquist@chromium.org</owner>
<summary>
@@ -99475,6 +103757,19 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Signin.Multilogin.NumberOfAccounts" expires_after="2019-11-01">
+ <owner>droger@chromium.org</owner>
+ <owner>msarda@chromium.org</owner>
+ <summary>Number of accounts in tokens sent to Gaia Multilogin.</summary>
+</histogram>
+
+<histogram name="Signin.Multilogin.ResponseStatus"
+ enum="OAuthMultiloginResponseStatus" expires_after="2019-11-01">
+ <owner>droger@chromium.org</owner>
+ <owner>msarda@chromium.org</owner>
+ <summary>Response status received from gaia Multilogin.</summary>
+</histogram>
+
<histogram name="Signin.MultiloginFinished" enum="GoogleServiceAuthError"
expires_after="2019-11-01">
<owner>droger@chromium.org</owner>
@@ -99602,6 +103897,18 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Signin.RefreshTokenRevocationCompleted"
+ enum="GaiaTokenRevocationStatus" expires_after="2019-03-31">
+ <owner>droger@chromium.org</owner>
+ <owner>msarda@chromium.org</owner>
+ <summary>
+ Reports the status (including error details) of token revocation requests
+ after they complete. This is recorded once per token, even if the request is
+ retried multiple times. It will be either a success if the token has been
+ revoked or the error on the last retry.
+ </summary>
+</histogram>
+
<histogram name="Signin.RefreshTokenRevocationRequestProgress"
enum="SigninRefreshTokenRevocationRequestProgress">
<owner>droger@chromium.org</owner>
@@ -99615,12 +103922,48 @@ uploading your change for review.
<histogram name="Signin.RefreshTokenRevocationStatus"
enum="GaiaTokenRevocationStatus">
<owner>droger@chromium.org</owner>
+ <owner>msarda@chromium.org</owner>
<summary>
Reports the status (including error details) of token revocation requests
after they complete.
</summary>
</histogram>
+<histogram name="Signin.RefreshTokenRevoked.Source"
+ enum="SourceForRefreshTokenOperation">
+ <owner>droger@chromium.org</owner>
+ <owner>msarda@chromium.org</owner>
+ <summary>
+ Source for refresh token revocation. This is used to track the sources for
+ signing out of Google accounts and is required to validate that the browser
+ is not revoking tokens for large parts of the user population.
+ </summary>
+</histogram>
+
+<histogram name="Signin.RefreshTokenUpdated.ToInvalidToken.Source"
+ enum="SourceForRefreshTokenOperation">
+ <owner>droger@chromium.org</owner>
+ <owner>msarda@chromium.org</owner>
+ <summary>
+ Source for refresh token updated to invalid tokens. The refresh token is
+ updated to an permanently invalid token when the user attempts to sign out
+ of the primary account without turning off sync. This histogram is used to
+ track the sources for invalidating the token of the primary account and is
+ required to validate that the browser is not invalidating the token of the
+ primary account for large parts of the user population.
+ </summary>
+</histogram>
+
+<histogram name="Signin.RefreshTokenUpdated.ToValidToken.Source"
+ enum="SourceForRefreshTokenOperation">
+ <owner>droger@chromium.org</owner>
+ <owner>msarda@chromium.org</owner>
+ <summary>
+ Source for refresh token updated to valid tokens. This is used to track the
+ sources for adding Google accounts to the browser.
+ </summary>
+</histogram>
+
<histogram name="Signin.RequestHeaderOperation.Dice"
enum="SigninRequestHeaderOperation">
<owner>msarda@chromium.org</owner>
@@ -100659,6 +105002,17 @@ uploading your change for review.
<summary>Number of retries until the final response was recorded.</summary>
</histogram>
+<histogram name="SingleWebsitePreferences.NavigatedFromToReset"
+ enum="SettingsNavigationSources" expires_after="M78">
+ <owner>pshmakov@chromium.org</owner>
+ <owner>peconn@chromium.org</owner>
+ <owner>peter@chromium.org</owner>
+ <summary>
+ Logs which way had the user navigated into settings screens when they press
+ &quot;Clear and Reset&quot; button in settings of a single website.
+ </summary>
+</histogram>
+
<histogram name="SiteEngagementService.DaysSinceLastShortcutLaunch"
units="days">
<owner>calamity@chromium.org</owner>
@@ -101857,6 +106211,23 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="SmartLock.AuthResult.Unlock" enum="BooleanSuccess">
+ <owner>hansberry@chromium.org</owner>
+ <summary>
+ Count of successful and failed attempts to unlock the Chromebook, after the
+ user selects their profile photo.
+ </summary>
+</histogram>
+
+<histogram name="SmartLock.AuthResult.Unlock.Failure"
+ enum="SmartLockAuthResultFailureReason">
+ <owner>hansberry@chromium.org</owner>
+ <summary>
+ Shows why an unlock attempt failed during the authentication phase. Breaks
+ down the failure bucket of SmartLock.AuthResult.Unlock.
+ </summary>
+</histogram>
+
<histogram name="SmartLock.EligibleDevicesCount" units="devices">
<owner>jhawkins@chromium.org</owner>
<summary>
@@ -101887,6 +106258,33 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="SmartLock.GetRemoteStatus.Unlock" enum="BooleanSuccess">
+ <owner>hansberry@chromium.org</owner>
+ <summary>
+ Count of successful and failed attempts to get the 'remote status' of the
+ host device, i.e., determine if the Chromebook can be unlocked.
+ </summary>
+</histogram>
+
+<histogram name="SmartLock.GetRemoteStatus.Unlock.Failure"
+ enum="SmartLockGetRemoteStatusResultFailureReason">
+ <owner>hansberry@chromium.org</owner>
+ <summary>
+ Shows why an unlock attempt failed during the connection phase. Breaks down
+ the failure bucket of SmartLock.ConnectionResult.
+ </summary>
+</histogram>
+
+<histogram name="SmartLock.MultiDeviceFeatureState"
+ enum="MultiDevice_FeatureState">
+ <owner>hansberry@chromium.org</owner>
+ <summary>
+ Indicates the feature state of the SmartLock feature. This metric is emitted
+ to at the creation of the user session (when the user logs in), and when
+ feature state updates occur.
+ </summary>
+</histogram>
+
<histogram name="SmartLock.ToggleFeature" enum="BooleanEnabled">
<owner>jhawkins@chromium.org</owner>
<summary>
@@ -102821,6 +107219,19 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Stability.Android.ProcessedMinidumps"
+ enum="AndroidProcessedMinidumps" expires_after="M74">
+ <owner>mheikal@chromium.org</owner>
+ <owner>smaier@chromium.org</owner>
+ <owner>wnwen@chromium.org</owner>
+ <summary>
+ Records the number of minidumps processed by Crashpad, split by process
+ type. This metric is similar to one that could be computed server-side based
+ on received crash uploads; but the client-side metric also includes any
+ minidumps that were not successfully uploaded.
+ </summary>
+</histogram>
+
<histogram name="Stability.Android.RendererCrash" enum="Boolean">
<owner>wnwen@chromium.org</owner>
<summary>
@@ -103034,6 +107445,37 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="StackSamplingProfiler.DeserializeAllPendingProfilesTime"
+ units="ms" expires_after="2019-05-21">
+ <owner>chengx@chromium.org</owner>
+ <owner>wittman@chromium.org</owner>
+ <summary>
+ Amount of time taken to deserialize all pending call stack profiles.
+ </summary>
+</histogram>
+
+<histogram name="StackSamplingProfiler.ProfileDeserializationTime" units="ms"
+ expires_after="2019-01-24">
+ <obsolete>
+ Removed 11/2018 as we no longer record this metric.
+ </obsolete>
+ <owner>chengx@chromium.org</owner>
+ <owner>wittman@chromium.org</owner>
+ <summary>
+ Amount of time taken to deserialize a call stack profile string.
+ </summary>
+</histogram>
+
+<histogram name="StackSamplingProfiler.ProfileSerializationTime" units="ms"
+ expires_after="2019-01-24">
+ <obsolete>
+ Removed 11/2018 as we no longer record this metric.
+ </obsolete>
+ <owner>chengx@chromium.org</owner>
+ <owner>wittman@chromium.org</owner>
+ <summary>Amount of time taken to serialize a call stack profile.</summary>
+</histogram>
+
<histogram name="Stars.Goog_Related" units="%">
<owner>yefim@chromium.org</owner>
<summary>
@@ -105669,6 +110111,17 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Sync.BookmarksModelMetadataCorruptionReason"
+ enum="SyncBookmarkModelMetadataCorruptionReason" expires_after="M75">
+ <owner>mamir@chromium.org</owner>
+ <summary>
+ The reason why the persisted metadata for a bookmark model is considered
+ corrupted. It either has corrupted data or doesn't match the bookmark model.
+ It's recorded at start up only if the initial sync has been performed
+ already. It's recorded after loading the metadata.
+ </summary>
+</histogram>
+
<histogram name="Sync.BookmarksModelSyncStateAtNewDuplication"
enum="SyncBookmarkModelSyncState">
<owner>stanisc@chromium.org</owner>
@@ -105960,6 +110413,9 @@ uploading your change for review.
</histogram>
<histogram name="Sync.CustomSync" enum="UserSelectableSyncType">
+ <obsolete>
+ Deprecated 10/2018, replaced by Sync.CustomSync2.
+ </obsolete>
<owner>zea@chromium.org</owner>
<summary>
Samples are taken every time sync is (re)configured, and the unique userid
@@ -105968,6 +110424,16 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Sync.CustomSync2" enum="SyncModelTypes">
+ <owner>treib@chromium.org</owner>
+ <summary>
+ For users who have *not* selected the &quot;Sync Everything&quot; option,
+ this records all the data types they have selected to sync. Samples are
+ taken every time the Sync data types are (re)configured, which typically
+ happens during startup and when the user changes any Sync settings.
+ </summary>
+</histogram>
+
<histogram name="Sync.DatatypePrefRecovery">
<obsolete>
Deprecated in M53.
@@ -106145,6 +110611,18 @@ uploading your change for review.
</summary>
</histogram>
+<histogram base="true" name="Sync.E2ELatency" units="ms" expires_after="M75">
+ <owner>melandory@chromium.org</owner>
+ <summary>
+ Recorded for a subset of users (Finch-controlled) per sync reflection, that
+ is, server-side updates that represent a local change. The time represents
+ the E2E time from the local change happening, the corresponding invalidation
+ being received and the relevant updates being fetched from the sync server.
+ Note: This is only recorded with a data type suffix. The base version is
+ never recorded.
+ </summary>
+</histogram>
+
<histogram name="Sync.EncryptAllData">
<obsolete>
Deprecated as of m26.
@@ -106629,6 +111107,20 @@ uploading your change for review.
</summary>
</histogram>
+<histogram base="true" name="Sync.ModelTypeConfigurationTime.Ephemeral"
+ units="ms" expires_after="2020-05-01">
+ <owner>jkrcal@chromium.org</owner>
+ <owner>mastiz@chromium.org</owner>
+ <summary>
+ Recorded once per activation of an ephemeral (in-memory) data type; the
+ value is the duration of the setup (time from the start of the configuration
+ of sync until the data type receives all its sync data and the data is ready
+ for the user). This metric is used for monitoring general health of sync
+ client-side code. Note: This is only recorded with a data type suffix. The
+ base version is never recorded.
+ </summary>
+</histogram>
+
<histogram name="Sync.ModelTypeCount" units="entries">
<obsolete>
Deprecated as of 7/2018. Replaced by Sync.ModelTypeCount2 which does record
@@ -106686,6 +111178,36 @@ uploading your change for review.
<histogram base="true" name="Sync.ModelTypeEntityChange"
enum="SyncEntityChange" expires_after="2020-02-01">
+ <obsolete>
+ Deprecated as of 10/2018. Replaced by Sync.ModelTypeEntityChange3 which
+ splits initial remote updates from incremental remote updates.
+ </obsolete>
+ <owner>jkrcal@chromium.org</owner>
+ <summary>
+ Recorded once for every sync entity change (whenever it is commited to the
+ server or updated from the server). This metric is used for monitoring
+ general health of sync client-side code. Note: This is only recorded with a
+ data type suffix. The base version is never recorded.
+ </summary>
+</histogram>
+
+<histogram base="true" name="Sync.ModelTypeEntityChange2"
+ enum="SyncEntityChange" expires_after="2020-04-01">
+ <obsolete>
+ Deprecated as of 11/2018. Replaced by Sync.ModelTypeEntityChange3 which
+ fixes a bug affecting a subset of datatypes (directory codepath).
+ </obsolete>
+ <owner>jkrcal@chromium.org</owner>
+ <summary>
+ Recorded once for every sync entity change (whenever it is commited to the
+ server or updated from the server). This metric is used for monitoring
+ general health of sync client-side code. Note: This is only recorded with a
+ data type suffix. The base version is never recorded.
+ </summary>
+</histogram>
+
+<histogram base="true" name="Sync.ModelTypeEntityChange3"
+ enum="SyncEntityChange" expires_after="2020-04-01">
<owner>jkrcal@chromium.org</owner>
<summary>
Recorded once for every sync entity change (whenever it is commited to the
@@ -106716,9 +111238,18 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Sync.ModelTypeStoreCommitCount" enum="SyncModelTypes"
+ expires_after="2019-03-01">
+ <owner>mastiz@chromium.org</owner>
+ <summary>
+ Records the number of write batches committed to leveldb
+ (ModelTypeStoreBackend) per datatype.
+ </summary>
+</histogram>
+
<histogram name="Sync.ModelTypeStoreInitResult"
enum="SyncModelTypeStoreInitResult">
- <owner>pavely@chromium.org</owner>
+ <owner>mastiz@chromium.org</owner>
<summary>
Records the result of ModelTypeStoreBackend initialization. Used to analyze
frequency and causes of backend initialization failures.
@@ -106954,6 +111485,15 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Sync.PostedClientToServerMessage"
+ enum="SyncClientToServerMessageContents">
+ <owner>mastiz@chromium.org</owner>
+ <summary>
+ Number of network requests issued by sync to the sync server, grouped by
+ content type.
+ </summary>
+</histogram>
+
<histogram name="Sync.PreferenceAssociationTime" units="ms">
<obsolete>
Deprecated in M53.
@@ -107364,6 +111904,9 @@ uploading your change for review.
</histogram>
<histogram name="Sync.SyncEverything">
+ <obsolete>
+ Deprecated 10/2018, replaced by Sync.SyncEverything2.
+ </obsolete>
<owner>zea@chromium.org</owner>
<summary>
Boolean histogram for whether the &quot;Sync Everything&quot; option was
@@ -107373,6 +111916,16 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Sync.SyncEverything2" enum="Boolean">
+ <owner>treib@chromium.org</owner>
+ <summary>
+ Boolean histogram for whether the &quot;Sync Everything&quot; option was
+ selected by the user. Samples are taken every time the Sync data types are
+ (re)configured, which typically happens during startup and when the user
+ changes any Sync settings.
+ </summary>
+</histogram>
+
<histogram name="Sync.ThemeAssociationTime" units="ms">
<obsolete>
Deprecated as of m19
@@ -107541,6 +112094,15 @@ uploading your change for review.
<summary>Time it took sync to load models for USS datatypes.</summary>
</histogram>
+<histogram base="true" name="Sync.USSMigrationEntityCount" units="entries"
+ expires_after="2020-02-01">
+ <owner>mastiz@chromium.org</owner>
+ <summary>
+ Counts the number of sync entities per model type successfully migrated from
+ directory to USS.
+ </summary>
+</histogram>
+
<histogram name="Sync.USSMigrationFailure" enum="SyncModelTypes">
<owner>maxbogue@chromium.org</owner>
<summary>Counts directory to USS migration failures per model type.</summary>
@@ -107949,8 +112511,10 @@ uploading your change for review.
</summary>
</histogram>
-<histogram name="Tab.PullDownGesture" enum="PullDownGestureAction">
- <owner>jbbegue@google.com</owner>
+<histogram name="Tab.PullDownGesture" enum="PullDownGestureAction"
+ expires_after="2020-01-15">
+ <owner>gambard@chromium.org</owner>
+ <owner>kkhorimoto@chromium.org</owner>
<summary>
Record the action executed when the user performs a pull down gesture. This
feature is currently iOS only.
@@ -108100,8 +112664,10 @@ uploading your change for review.
</summary>
</histogram>
-<histogram name="Tab.StateAtRendererTermination" enum="TabForegroundState">
- <owner>stuartmorgan@chromium.org</owner>
+<histogram name="Tab.StateAtRendererTermination" enum="TabForegroundState"
+ expires_after="2019-08-07">
+ <owner>olivierrobin@chromium.org</owner>
+ <owner>pkl@chromium.org</owner>
<summary>
The state (foreground/background) of a tab when its renderer is terminated.
</summary>
@@ -109737,6 +114303,33 @@ uploading your change for review.
</summary>
</histogram>
+<histogram base="true" name="Tabs.Tasks.TabCreated.Count" units="tabs"
+ expires_after="2019-06-30">
+<!-- Name completed by histogram_suffixes name="TabCreatedReason" -->
+
+ <owner>yusufo@chromium.org</owner>
+ <owner>wychen@chromium.org</owner>
+ <owner>zea@chromium.org</owner>
+ <summary>
+ This recorded value is the number of currently open tabs that were created
+ from a given source. This is recorded when entering the tab switcher mode.
+ </summary>
+</histogram>
+
+<histogram base="true" name="Tabs.Tasks.TabCreated.Percent" units="%"
+ expires_after="2019-06-30">
+<!-- Name completed by histogram_suffixes name="TabCreatedReason" -->
+
+ <owner>yusufo@chromium.org</owner>
+ <owner>wychen@chromium.org</owner>
+ <owner>zea@chromium.org</owner>
+ <summary>
+ The recorded value is the percentage of the number of currently open tabs
+ that are created from a given source, relative to the total number of
+ currently open tabs. This is recorded when entering the tab switcher mode.
+ </summary>
+</histogram>
+
<histogram name="Tabs.Tasks.TabGroupCount" units="groups">
<owner>yusufo@chromium.org</owner>
<owner>wychen@chromium.org</owner>
@@ -109856,6 +114449,12 @@ uploading your change for review.
<histogram name="TaskScheduler.BlockShutdownTasksPostedDuringShutdown"
units="tasks">
+ <obsolete>
+ Deprecated 10/2018. Instead of recording a histogram with the number of
+ BLOCK_SHUTDOWN tasks posted during shutdown, we generate a crash when too
+ many BLOCK_SHUTDOWN tasks are posted during shutdown. A crash dump is more
+ actionnable than a histogram.
+ </obsolete>
<owner>fdoray@chromium.org</owner>
<summary>
Number of BLOCK_SHUTDOWN tasks that were posted to a base::TaskScheduler
@@ -110134,6 +114733,37 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="ThirdPartyModules.Heartbeat.BlockedModulesCount"
+ units="modules">
+ <owner>pmonette@chromium.org</owner>
+ <summary>
+ Records the number of modules that were blocked from loading into the
+ browser process by the third-party DLL blocking feature. This is recorded
+ every 5 minutes.
+ </summary>
+</histogram>
+
+<histogram
+ name="ThirdPartyModules.Heartbeat.PrintingWorkaround.BlockingEnabled"
+ enum="BooleanEnabled">
+ <owner>pmonette@chromium.org</owner>
+ <summary>
+ Records whether or not Chrome is still blocking third-party DLLs. This is a
+ bit that turns to false when the in-process printing is invoked. Recorded
+ every 5 minutes.
+ </summary>
+</histogram>
+
+<histogram name="ThirdPartyModules.Heartbeat.UniqueBlockedModulesCount"
+ units="modules">
+ <owner>pmonette@chromium.org</owner>
+ <summary>
+ Records the number of unique modules that were blocked from loading into the
+ browser process by the third-party DLL blocking feature. This is recorded
+ every 5 minutes.
+ </summary>
+</histogram>
+
<histogram name="ThirdPartyModules.InputMethodEditorsCount" units="counts">
<owner>pmonette@chromium.org</owner>
<summary>
@@ -110563,6 +115193,15 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="TouchAction.GestureEventFilterResults"
+ enum="GestureEventFilterResults">
+ <owner>xidachen@chromium.org</owner>
+ <owner>nzolghadr@chromium.org</owner>
+ <summary>
+ Track whether a gesture event is allowed or filtered or deferred.
+ </summary>
+</histogram>
+
<histogram name="TouchBar.Default.Metrics" enum="DefaultTouchBarActions">
<owner>spqchan@chromium.org</owner>
<summary>Tracks the usage of the default touch bar buttons.</summary>
@@ -111386,6 +116025,62 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="TrustedWebActivity.ClearDataDialogOnClearAppDataAccepted"
+ enum="Boolean" expires_after="M78">
+ <owner>pshmakov@chromium.org</owner>
+ <owner>peconn@chromium.org</owner>
+ <owner>peter@chromium.org</owner>
+ <summary>
+ Emits true if the user went to site settings from the dialog that is shown
+ after a Trusted Web Activity client app has had its data cleared.
+ </summary>
+</histogram>
+
+<histogram name="TrustedWebActivity.ClearDataDialogOnUninstallAccepted"
+ enum="Boolean" expires_after="M78">
+ <owner>pshmakov@chromium.org</owner>
+ <owner>peconn@chromium.org</owner>
+ <owner>peter@chromium.org</owner>
+ <summary>
+ Emits true if the user went to site settings from the dialog that is shown
+ after a Trusted Web Activity client app has been uninstalled.
+ </summary>
+</histogram>
+
+<histogram name="TrustedWebActivity.DelegatedNotificationSmallIconFallback"
+ enum="TrustedWebActivityDelegatedNotificationSmallIconFallback"
+ expires_after="M78">
+ <owner>pshmakov@chromium.org</owner>
+ <owner>peconn@chromium.org</owner>
+ <owner>peter@chromium.org</owner>
+ <summary>
+ Logs which kind of fallback for notification small icon was used for Trusted
+ Web Activity notification delegation.
+ </summary>
+</histogram>
+
+<histogram name="TrustedWebActivity.TimeInVerifiedOrigin" units="ms"
+ expires_after="M78">
+ <owner>pshmakov@chromium.org</owner>
+ <owner>peconn@chromium.org</owner>
+ <owner>peter@chromium.org</owner>
+ <summary>
+ Time spent in a verified origin until navigating to an unverified one or
+ pausing the Trusted Web Activity.
+ </summary>
+</histogram>
+
+<histogram name="TrustedWebActivity.TimeOutOfVerifiedOrigin" units="ms"
+ expires_after="M78">
+ <owner>pshmakov@chromium.org</owner>
+ <owner>peconn@chromium.org</owner>
+ <owner>peter@chromium.org</owner>
+ <summary>
+ Time spent out of verified origins until navigating back to a verified one
+ or pausing the Trusted Web Activity.
+ </summary>
+</histogram>
+
<histogram name="TryScroll.SlowScroll" enum="ScrollThread">
<obsolete>
Deprecated 02/2016 in Issue 1741103002, and replaced by
@@ -111438,7 +116133,19 @@ uploading your change for review.
<owner>rkaplow@chromium.org</owner>
<summary>
The actual interval between log upload start and previous log upload
- finished within the same process.
+ finished within the same process. A value of 0 indicates there was no
+ previous upload. Prior to M71, logging for this metric was broken.
+ </summary>
+</histogram>
+
+<histogram name="UKM.BuildAndStoreLogIsEmpty" enum="Boolean">
+ <owner>bmcquade@chromium.org</owner>
+ <owner>holte@chromium.org</owner>
+ <owner>rkaplow@chromium.org</owner>
+ <summary>
+ Emitted when UKM Service attempts to build and store a log. Emits true if it
+ was empty (no sources or entries) which means no log is written, false
+ otherwise.
</summary>
</histogram>
@@ -111522,6 +116229,16 @@ uploading your change for review.
<summary>The status when loading UKM PersistedLogs from Prefs.</summary>
</histogram>
+<histogram name="UKM.ResetReason" enum="UkmResetReason">
+ <owner>bmcquade@chromium.org</owner>
+ <owner>holte@chromium.org</owner>
+ <owner>rkaplow@chromium.org</owner>
+ <summary>
+ Recorded when a UKM client state (client_id, session_id) is reset. This
+ emits the reason the resetting was triggered.
+ </summary>
+</histogram>
+
<histogram name="UKM.Sources.Dropped" enum="UkmDataDroppedReason">
<owner>holte@chromium.org</owner>
<owner>rkaplow@chromium.org</owner>
@@ -111541,11 +116258,29 @@ uploading your change for review.
</histogram>
<histogram name="UKM.Sources.SerializedCount" units="sources">
+ <obsolete>
+ Deprecated 10/2018 by UKM.Sources.SerializedCount2.
+ </obsolete>
+ <owner>holte@chromium.org</owner>
+ <owner>rkaplow@chromium.org</owner>
+ <summary>Number of serialized UKM sources when storing a UKM log.</summary>
+</histogram>
+
+<histogram name="UKM.Sources.SerializedCount2" units="sources">
<owner>holte@chromium.org</owner>
<owner>rkaplow@chromium.org</owner>
<summary>Number of serialized UKM sources when storing a UKM log.</summary>
</histogram>
+<histogram name="UKM.Sources.UnmatchedSourcesCount" units="sources">
+ <owner>bmcquade@chromium.org</owner>
+ <owner>rkaplow@chromium.org</owner>
+ <summary>
+ Number of UKM sources that were not sent because they did not match a
+ navigation source URL.
+ </summary>
+</histogram>
+
<histogram name="UKM.Sources.UnsentSourcesCount" units="sources">
<owner>asvitkine@chromium.org</owner>
<owner>bmcquade@chromium.org</owner>
@@ -111608,7 +116343,8 @@ uploading your change for review.
<owner>asvitkine@chromium.org</owner>
<summary>
The actual interval between log upload start and previous log upload
- finished within the same process.
+ finished within the same process. A value of 0 indicates there was no
+ previous upload. Prior to M71, logging for this metric was broken.
</summary>
</histogram>
@@ -111857,29 +116593,6 @@ uploading your change for review.
</summary>
</histogram>
-<histogram name="UMA.ExpiredHistogram.BugReportTest" expires_after="2018-07-20">
- <owner>gayane@chromium.org</owner>
- <summary>Not logged. Used for testing histogram expiry checker.</summary>
-</histogram>
-
-<histogram name="UMA.ExpiredHistogram.Milestone.BugReportTest"
- expires_after="M68">
- <owner>gayane@chromium.org</owner>
- <summary>Not logged. Used for testing histogram expiry checker.</summary>
-</histogram>
-
-<histogram name="UMA.ExpiredHistogram.Milestone.Soon.BugReportTest"
- expires_after="M69">
- <owner>gayane@chromium.org</owner>
- <summary>Not logged. Used for testing histogram expiry checker.</summary>
-</histogram>
-
-<histogram name="UMA.ExpiredHistogram.Soon.BugReportTest"
- expires_after="2018-08-01">
- <owner>gayane@chromium.org</owner>
- <summary>Not logged. Used for testing histogram expiry checker.</summary>
-</histogram>
-
<histogram name="UMA.ExternalExperiment.GroupCount" units="groups"
expires_after="2018-08-30">
<owner>asvitkine@chromium.org</owner>
@@ -112186,9 +116899,9 @@ uploading your change for review.
</histogram>
<histogram name="UMA.LogUpload.Canceled.CellularConstraint"
- enum="BooleanCanceled">
+ enum="BooleanCanceled" expires_after="2019-04-30">
+ <owner>holte@chromium.org</owner>
<owner>asvitkine@chromium.org</owner>
- <owner>gayane@chromium.org</owner>
<summary>
Logs whether a log was not uploaded due to cellular log throttling logic.
Android only.
@@ -112513,9 +117226,9 @@ uploading your change for review.
</details>
</histogram>
-<histogram name="UMA.UnsentLogs.Dropped">
+<histogram name="UMA.UnsentLogs.Dropped" expires_after="2019-04-30">
+ <owner>holte@chromium.org</owner>
<owner>asvitkine@chromium.org</owner>
- <owner>gayane@chromium.org</owner>
<summary>
Counter for number of UMA unsent logs removed from persistent storage.
</summary>
@@ -112590,8 +117303,18 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="UncompressAndParseSkiaVectorAsset" units="microseconds">
+ <owner>malaykeshav@chromium.org</owner>
+ <summary>
+ Records the time spent in uncompressing a gzipped animation file.
+ </summary>
+</histogram>
+
<histogram name="UnifiedConsent.ConsentBump.Action"
- enum="UnifiedConsentBumpAction" expires_after="2019-08-01">
+ enum="UnifiedConsentBumpAction">
+ <obsolete>
+ Removed 2018/11, because the consent bump was removed.
+ </obsolete>
<owner>tangltom@chromium.org</owner>
<owner>msarda@chromium.org</owner>
<summary>
@@ -112599,8 +117322,10 @@ uploading your change for review.
</summary>
</histogram>
-<histogram name="UnifiedConsent.ConsentBump.EligibleAtStartup" enum="Boolean"
- expires_after="2019-08-01">
+<histogram name="UnifiedConsent.ConsentBump.EligibleAtStartup" enum="Boolean">
+ <obsolete>
+ Removed 2018/11, because the consent bump was removed.
+ </obsolete>
<owner>droger@chromium.org</owner>
<owner>msarda@chromium.org</owner>
<owner>tangltom@chromium.org</owner>
@@ -112612,7 +117337,10 @@ uploading your change for review.
</histogram>
<histogram name="UnifiedConsent.ConsentBump.SuppressReason"
- enum="UnifiedConsentBumpSuppressReason" expires_after="2019-08-01">
+ enum="UnifiedConsentBumpSuppressReason">
+ <obsolete>
+ Removed 2018/11, because the consent bump was removed.
+ </obsolete>
<owner>tangltom@chromium.org</owner>
<owner>msarda@chromium.org</owner>
<summary>
@@ -112621,8 +117349,10 @@ uploading your change for review.
</summary>
</histogram>
-<histogram name="UnifiedConsent.RevokeReason" enum="UnifiedConsentRevokeReason"
- expires_after="2019-08-01">
+<histogram name="UnifiedConsent.RevokeReason" enum="UnifiedConsentRevokeReason">
+ <obsolete>
+ Removed 2018/11 because it's no longer necessary.
+ </obsolete>
<owner>droger@chromium.org</owner>
<owner>msarda@chromium.org</owner>
<owner>tangltom@chromium.org</owner>
@@ -114330,6 +119060,14 @@ uploading your change for review.
<summary>Time spent in LowMemoryNotifications.</summary>
</histogram>
+<histogram name="V8.GCMarkCompactor" units="ms">
+ <owner>mlippautz@chromium.org</owner>
+ <summary>
+ Sum of all durations of individual phases within one V8 mark-compact garbage
+ collection. Reported once per garbage collection.
+ </summary>
+</histogram>
+
<histogram name="V8.GCMarkCompactReason" enum="GarbageCollectionReason">
<owner>ulan@chromium.org</owner>
<summary>Reason a mark-compact garbage collection was started in V8.</summary>
@@ -115334,8 +120072,10 @@ uploading your change for review.
</summary>
</histogram>
-<histogram name="Variations.SeedProcessingTime" units="ms">
- <owner>gayane@chromium.org</owner>
+<histogram name="Variations.SeedProcessingTime" units="ms"
+ expires_after="2019-04-30">
+ <owner>isherman@chromium.org</owner>
+ <owner>asvitkine@chromium.org</owner>
<summary>
Records how long it takes to load and process variations seed. This metric
is recorded only when loading and processing of the seed is successful.
@@ -115667,6 +120407,14 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Viz.DisplayCompositor.SurfaceEmbeddingTime" units="ms">
+ <owner>jonross@chromium.org</owner>
+ <summary>
+ Records the delta from when a viz::LocalSurfaceId was allocated, to the time
+ where it is first embedded by the Viz Service.
+ </summary>
+</histogram>
+
<histogram name="VoiceInteraction.DismissedEventSource"
enum="VoiceInteractionEventSource">
<owner>thildebr@chromium.org</owner>
@@ -116590,6 +121338,19 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="WebApp.Icon.HttpStatusCodeClassOnCreate"
+ enum="HttpStatusCodeClass" expires_after="2021-01-01">
+ <owner>alancutter@chromium.org</owner>
+ <owner>mgiuca@chromium.org</owner>
+ <owner>loyso@chromium.org</owner>
+ <summary>
+ The HTTP status code class returned for each icon loaded during a WebApp's
+ creation. See corresponding
+ Extensions.BookmarkApp.Icon.HttpStatusCodeClassOnCreate histogram for legacy
+ extension-based system.
+ </summary>
+</histogram>
+
<histogram name="Webapp.Install.DisplayMode" enum="WebAppDisplayMode">
<owner>piotrs@chromium.org</owner>
<summary>
@@ -117115,6 +121876,11 @@ uploading your change for review.
</histogram>
<histogram name="WebCore.CanvasContextUsage" enum="CanvasContextUsage">
+ <obsolete>
+ Deprecated 10/2018 with Blink.Canvas.IsComposited,
+ Blink.Canvas.ResourceProviderIsAccelerated,
+ Blink.Canvas.ResourceProviderType and Blink.Canvas.2DLayerBridgeIsDeferred
+ </obsolete>
<owner>zmin@chromium.org</owner>
<owner>junov@chromium.org</owner>
<summary>
@@ -117364,6 +122130,9 @@ uploading your change for review.
</histogram>
<histogram name="WebCore.IndexedDB.LevelDB.Transaction.CommitTime" units="ms">
+ <obsolete>
+ Removed in M72.
+ </obsolete>
<owner>cmumford@chromium.org</owner>
<summary>
The time that it takes to commit an IndexedDB transaction to its LevelDB
@@ -117569,6 +122338,9 @@ uploading your change for review.
</histogram>
<histogram name="WebCore.IndexedDB.OpenTime.Blocked" units="ms">
+ <obsolete>
+ Deprecated 2018-11. No longer needed.
+ </obsolete>
<owner>cmumford@chromium.org</owner>
<summary>
The delay between the receipt of the request to open an IndexedDB database
@@ -117577,6 +122349,9 @@ uploading your change for review.
</histogram>
<histogram name="WebCore.IndexedDB.OpenTime.Error" units="ms">
+ <obsolete>
+ Deprecated 2018-11. No longer needed.
+ </obsolete>
<owner>cmumford@chromium.org</owner>
<summary>
The delay between the receipt of the request to open an IndexedDB database
@@ -117585,6 +122360,9 @@ uploading your change for review.
</histogram>
<histogram name="WebCore.IndexedDB.OpenTime.Success" units="ms">
+ <obsolete>
+ Deprecated 2018-11. No longer needed.
+ </obsolete>
<owner>cmumford@chromium.org</owner>
<summary>
The delay between the receipt of the request to open an IndexedDB database
@@ -117593,6 +122371,9 @@ uploading your change for review.
</histogram>
<histogram name="WebCore.IndexedDB.OpenTime.UpgradeNeeded" units="ms">
+ <obsolete>
+ Deprecated 2018-11. No longer needed.
+ </obsolete>
<owner>cmumford@chromium.org</owner>
<summary>
The delay between the receipt of the request to open an IndexedDB database
@@ -119104,6 +123885,15 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="WebRTC.Audio.EchoCanceller.Clockdrift" enum="ClockdriftLevel"
+ expires_after="2019-11-30">
+ <owner>gustaf@chromium.org</owner>
+ <summary>
+ This histogram logs whether clockdrift is detected in the WebRTC echo
+ canceller. A new value is logged every 10 seconds.
+ </summary>
+</histogram>
+
<histogram name="WebRTC.Audio.EchoCanceller.ComfortNoiseBand0"
units="dBFS (negated)">
<owner>peah@chromium.org</owner>
@@ -119205,6 +123995,26 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="WebRTC.Audio.EchoCanceller.MaxCaptureJitter"
+ units="frames (10 ms)" expires_after="2019-05-01">
+ <owner>peah@chromium.org</owner>
+ <owner>gustaf@chromium.org</owner>
+ <summary>
+ This histogram logs the observed maximum number of capture API calls in a
+ row in the unit of frames (10 ms). A new value is logged every 10 seconds.
+ </summary>
+</histogram>
+
+<histogram name="WebRTC.Audio.EchoCanceller.MaxRenderJitter"
+ units="frames (10 ms)" expires_after="2019-05-01">
+ <owner>peah@chromium.org</owner>
+ <owner>gustaf@chromium.org</owner>
+ <summary>
+ This histogram logs the observed maximum number of render API calls in a row
+ in the unit of frames (10 ms). A new value is logged every 10 seconds.
+ </summary>
+</histogram>
+
<histogram name="WebRTC.Audio.EchoCanceller.MaxSkewShiftCount"
units="events/minute">
<owner>peah@chromium.org</owner>
@@ -119221,6 +124031,26 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="WebRTC.Audio.EchoCanceller.MinCaptureJitter"
+ units="frames (10 ms)" expires_after="2019-05-01">
+ <owner>peah@chromium.org</owner>
+ <owner>gustaf@chromium.org</owner>
+ <summary>
+ This histogram logs the observed minimum number of capture API calls in a
+ row in the unit of frames (10 ms). A new value is logged every 10 seconds.
+ </summary>
+</histogram>
+
+<histogram name="WebRTC.Audio.EchoCanceller.MinRenderJitter"
+ units="frames (10 ms)" expires_after="2019-05-01">
+ <owner>peah@chromium.org</owner>
+ <owner>gustaf@chromium.org</owner>
+ <summary>
+ This histogram logs the observed minimum number of render API calls in a row
+ in the unit of frames (10 ms). A new value is logged every 10 seconds.
+ </summary>
+</histogram>
+
<histogram name="WebRTC.Audio.EchoCanceller.ModelBasedAecFeasible"
enum="Boolean">
<owner>peah@chromium.org</owner>
@@ -119687,6 +124517,9 @@ uploading your change for review.
</histogram>
<histogram name="WebRTC.Call.TimeSendingAudioRtpPacketsInSeconds" units="s">
+ <obsolete>
+ Deprecated 11/2018 due to little use and high implementation complexity.
+ </obsolete>
<owner>saza@chromium.org</owner>
<summary>
The amount of time between sending the first and the last audio RTP packets
@@ -119781,6 +124614,75 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="WebRTC.PeerConnection.CallSetupState.AnswererState"
+ enum="PeerConnectionAnswererState">
+ <owner>hbos@chromium.org</owner>
+ <summary>
+ Setting up a call involves a number of steps; this enum describes which
+ &quot;answerer step&quot; the peer connection reached in its most successful
+ attempt. See blink::AnswererState for more information.
+ </summary>
+</histogram>
+
+<histogram name="WebRTC.PeerConnection.CallSetupState.CallSetupState"
+ enum="PeerConnectionCallSetupState">
+ <owner>hbos@chromium.org</owner>
+ <summary>
+ Setting up a call involves a number of steps; this enum describes the status
+ of the most successful attempt. See blink::CallSetupState for more
+ information.
+ </summary>
+</histogram>
+
+<histogram name="WebRTC.PeerConnection.CallSetupState.OffererState"
+ enum="PeerConnectionOffererState">
+ <owner>hbos@chromium.org</owner>
+ <summary>
+ Setting up a call involves a number of steps; this enum describes which
+ &quot;answerer step&quot; the peer connection reached in its most successful
+ attempt. See blink::OffererState for more information.
+ </summary>
+</histogram>
+
+<histogram name="WebRTC.PeerConnection.CallSetupStateWithGum.AnswererState"
+ enum="PeerConnectionAnswererState">
+ <owner>hbos@chromium.org</owner>
+ <summary>
+ Setting up a call involves a number of steps; this enum describes which
+ &quot;answerer step&quot; the peer connection reached in its most successful
+ attempt. See blink::AnswererState for more information. This is the same as
+ &quot;WebRTC.PeerConnection.CallSetupState.AnswererState&quot; except it is
+ only reported for peer connections on pages where getUserMedia() has been
+ called.
+ </summary>
+</histogram>
+
+<histogram name="WebRTC.PeerConnection.CallSetupStateWithGum.CallSetupState"
+ enum="PeerConnectionCallSetupState">
+ <owner>hbos@chromium.org</owner>
+ <summary>
+ Setting up a call involves a number of steps; this enum describes the status
+ of the most successful attempt. See blink::CallSetupState for more
+ information. This is the same as
+ &quot;WebRTC.PeerConnection.CallSetupState.CallSetupState&quot; except it is
+ only reported for peer connections on pages where getUserMedia() has been
+ called.
+ </summary>
+</histogram>
+
+<histogram name="WebRTC.PeerConnection.CallSetupStateWithGum.OffererState"
+ enum="PeerConnectionOffererState">
+ <owner>hbos@chromium.org</owner>
+ <summary>
+ Setting up a call involves a number of steps; this enum describes which
+ &quot;answerer step&quot; the peer connection reached in its most successful
+ attempt. See blink::OffererState for more information. This is the same as
+ &quot;WebRTC.PeerConnection.CallSetupState.OffererState&quot; except it is
+ only reported for peer connections on pages where getUserMedia() has been
+ called.
+ </summary>
+</histogram>
+
<histogram name="WebRTC.PeerConnection.CandidatePairType"
enum="IceCandidatePairTypes">
<owner>guoweis@chromium.org</owner>
@@ -119900,6 +124802,76 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="WebRTC.PeerConnection.SdpComplexUsage.CreateAnswer"
+ enum="PeerConnectionSdpUsageCategory">
+ <owner>hbos@chromium.org</owner>
+ <summary>
+ The SDP usage category (&quot;safe&quot;, &quot;unsafe&quot; or
+ &quot;unknown&quot;) of createAnswer(). Using complex SDP without explicitly
+ specifying the sdpSemantics is considered unsafe in this context because
+ such usage is sensitive to the rollout of a different default SDP semantic.
+ </summary>
+</histogram>
+
+<histogram name="WebRTC.PeerConnection.SdpComplexUsage.CreateOffer"
+ enum="PeerConnectionSdpUsageCategory">
+ <owner>hbos@chromium.org</owner>
+ <summary>
+ The SDP usage category (&quot;safe&quot;, &quot;unsafe&quot; or
+ &quot;unknown&quot;) of createOffer(). Using complex SDP without explicitly
+ specifying the sdpSemantics is considered unsafe in this context because
+ such usage is sensitive to the rollout of a different default SDP semantic.
+ </summary>
+</histogram>
+
+<histogram name="WebRTC.PeerConnection.SdpComplexUsage.SetLocalAnswer"
+ enum="PeerConnectionSdpUsageCategory">
+ <owner>hbos@chromium.org</owner>
+ <summary>
+ The SDP usage category (&quot;safe&quot;, &quot;unsafe&quot; or
+ &quot;unknown&quot;) of setLocalDescription(answer). Using complex SDP
+ without explicitly specifying the sdpSemantics is considered unsafe in this
+ context because such usage is sensitive to the rollout of a different
+ default SDP semantic.
+ </summary>
+</histogram>
+
+<histogram name="WebRTC.PeerConnection.SdpComplexUsage.SetLocalOffer"
+ enum="PeerConnectionSdpUsageCategory">
+ <owner>hbos@chromium.org</owner>
+ <summary>
+ The SDP usage category (&quot;safe&quot;, &quot;unsafe&quot; or
+ &quot;unknown&quot;) of setLocalDescription(offer). Using complex SDP
+ without explicitly specifying the sdpSemantics is considered unsafe in this
+ context because such usage is sensitive to the rollout of a different
+ default SDP semantic.
+ </summary>
+</histogram>
+
+<histogram name="WebRTC.PeerConnection.SdpComplexUsage.SetRemoteAnswer"
+ enum="PeerConnectionSdpUsageCategory">
+ <owner>hbos@chromium.org</owner>
+ <summary>
+ The SDP usage category (&quot;safe&quot;, &quot;unsafe&quot; or
+ &quot;unknown&quot;) of setRemoteDescription(answer). Using complex SDP
+ without explicitly specifying the sdpSemantics is considered unsafe in this
+ context because such usage is sensitive to the rollout of a different
+ default SDP semantic.
+ </summary>
+</histogram>
+
+<histogram name="WebRTC.PeerConnection.SdpComplexUsage.SetRemoteOffer"
+ enum="PeerConnectionSdpUsageCategory">
+ <owner>hbos@chromium.org</owner>
+ <summary>
+ The SDP usage category (&quot;safe&quot;, &quot;unsafe&quot; or
+ &quot;unknown&quot;) of setRemoteDescription(offer). Using complex SDP
+ without explicitly specifying the sdpSemantics is considered unsafe in this
+ context because such usage is sensitive to the rollout of a different
+ default SDP semantic.
+ </summary>
+</histogram>
+
<histogram name="WebRTC.PeerConnection.SdpFormatReceived"
enum="PeerConnectionSdpFormatReceived">
<owner>steveanton@chromium.org</owner>
@@ -121433,6 +126405,24 @@ uploading your change for review.
<summary>Time for capturing one frame in window capturing.</summary>
</histogram>
+<histogram base="true" name="WebRtcTextLogging"
+ enum="WebRtcLoggingWebAppIdHash" expires_after="2019-07-01">
+ <owner>grunell@chromium.org</owner>
+ <summary>
+ Counts the number of WebRTC text log events per web application. Suffixed by
+ event.
+ </summary>
+</histogram>
+
+<histogram name="WebRtcTextLogging.UploadFailureReason"
+ enum="WebRtcLoggingUploadFailureReason" expires_after="2019-07-01">
+ <owner>grunell@chromium.org</owner>
+ <summary>
+ Counts upload failures for WebRTC text log. Recorded when an upload attempt
+ fails.
+ </summary>
+</histogram>
+
<histogram name="WebShare.ApiCount" enum="WebShareMethod">
<owner>mgiuca@chromium.org</owner>
<summary>
@@ -121601,6 +126591,9 @@ uploading your change for review.
</histogram>
<histogram name="websql.Async.OpenTime.Error" units="ms">
+ <obsolete>
+ Deprecated 12/2018. We're no longer monitoring WebSQL performance.
+ </obsolete>
<owner>cmumford@chromium.org</owner>
<summary>
The time required to try (and fail) to open a Web SQL database.
@@ -121608,6 +126601,9 @@ uploading your change for review.
</histogram>
<histogram name="websql.Async.OpenTime.Success" units="ms">
+ <obsolete>
+ Deprecated 12/2018. We're no longer monitoring WebSQL performance.
+ </obsolete>
<owner>cmumford@chromium.org</owner>
<summary>The time required to successfully open a Web SQL database.</summary>
</histogram>
@@ -121830,6 +126826,15 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="WindowOcclusionChanged" enum="WindowOcclusionState"
+ expires_after="2019-12-02">
+ <owner>davidbienvenu@chromium.org</owner>
+ <owner>fdoray@chromium.org</owner>
+ <summary>
+ A top level window's occlusion state. Recorded each time the state changes.
+ </summary>
+</histogram>
+
<histogram name="Windows.ComputeNativeWindowOcclusionTime" units="microseconds">
<owner>fdoray@chromium.org</owner>
<summary>
@@ -121920,6 +126925,16 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Windows.OOPSelectFileDialog.ProcessError" enum="BooleanError">
+ <owner>pmonette@chromium.org</owner>
+ <summary>
+ Indicates whether a connection error occured between the browser and the
+ shell handler process. This is usually caused by a crash in the utility
+ process. This is logged every time SelectFile() function is called and the
+ WinOOPSelectFileDialog feature is enabled.
+ </summary>
+</histogram>
+
<histogram name="Windows.ParentProcessNameHash" enum="ProcessNameHash">
<owner>wfh@chromium.org</owner>
<summary>
@@ -122453,6 +127468,14 @@ uploading your change for review.
<histogram_suffixes_list>
+<histogram_suffixes name="AccessibilityScreenReaderImage" separator=".">
+ <suffix name="ExplicitlyUnlabeled" label="explicitly unlabeled image"/>
+ <suffix name="Labeled" label="labeled image"/>
+ <suffix name="Unlabeled" label="unlabeled image"/>
+ <affected-histogram name="Accessibility.ScreenReader.Image.MinSize"/>
+ <affected-histogram name="Accessibility.ScreenReader.Image.SizeRatio"/>
+</histogram_suffixes>
+
<histogram_suffixes name="AccessorySheetType" separator=".">
<suffix name="Passwords" label="Password suggestions and generation."/>
<affected-histogram name="KeyboardAccessory.AccessorySheetSuggestionCount"/>
@@ -122878,6 +127901,9 @@ uploading your change for review.
name="AutofillLocalCardMigrationDialogDurationWithCloseEvent" separator=".">
<suffix name="Accepted"
label="The dialog was closed due to the user clicking the save button."/>
+ <suffix name="Closed"
+ label="The dialog was closed due to the user clicking the view cards or
+ done button."/>
<suffix name="Denied"
label="The dialog was closed due to the user clicking the cancel
button."/>
@@ -122944,6 +127970,14 @@ uploading your change for review.
<affected-histogram name="Autofill.SaveCreditCardPrompt.Upload.Reshows"/>
</histogram_suffixes>
+<histogram_suffixes name="AutofillSaveCreditCardPromptRequestingExpirationDate"
+ separator=".">
+ <suffix name="RequestingExpirationDate"
+ label="Expiration date was explicitly requested in prompt"/>
+ <affected-histogram name="Autofill.SaveCreditCardPrompt.Upload.FirstShow"/>
+ <affected-histogram name="Autofill.SaveCreditCardPrompt.Upload.Reshows"/>
+</histogram_suffixes>
+
<histogram_suffixes name="AutofillSaveCreditCardPromptShow" separator=".">
<suffix name="FirstShow"
label="first time prompt is shown for a single credit card submit"/>
@@ -123004,6 +128038,19 @@ uploading your change for review.
<affected-histogram name="Autofill.StoredServerCreditCardCount"/>
</histogram_suffixes>
+<histogram_suffixes name="AutofillSyncState" separator=".">
+ <suffix name="SignedIn" label="Signed in"/>
+ <suffix name="SignedInAndSyncFeature" label="Signed in and sync feature"/>
+ <suffix name="SignedInAndWalletSyncTransportEnabled"
+ label="Signed in and sync transport enabled for Wallet data types"/>
+ <suffix name="SignedOut" label="Signed out"/>
+ <suffix name="Unknown" label="Unknown"/>
+ <affected-histogram name="Autofill.FormEvents.Address"/>
+ <affected-histogram name="Autofill.FormEvents.CreditCard"/>
+ <affected-histogram name="Autofill.IsEnabled.PageLoad"/>
+ <affected-histogram name="Autofill.SaveCreditCardPrompt"/>
+</histogram_suffixes>
+
<histogram_suffixes name="AutofillUnmaskPromptCloseReasonEvents" separator=".">
<suffix name="AbandonUnmasking" label="Abandon unmasking"/>
<suffix name="Failure" label="Failure"/>
@@ -123024,6 +128071,12 @@ uploading your change for review.
<affected-histogram name="Autofill.UploadEvent"/>
</histogram_suffixes>
+<histogram_suffixes name="AutofillWalletCardsDiff" separator=".">
+ <suffix name="Added" label="Added"/>
+ <suffix name="AddedOrRemoved" label="Added or removed"/>
+ <suffix name="Removed" label="Removed"/>
+</histogram_suffixes>
+
<histogram_suffixes name="BackgroundFetchDatabaseStorageErrors" separator=".">
<suffix name="CleanupTask" label="CleanupTask"/>
<suffix name="CreateMetadataTask" label="CreateMetadata DatabaseTask"/>
@@ -123038,6 +128091,7 @@ uploading your change for review.
label="MarkRegistrationForDeletion DatabaseTask"/>
<suffix name="MarkRequestCompleteTask"
label="MarkRequestComplete DatabaseTask"/>
+ <suffix name="MatchRequestsTask" label="MatchRequests DatabaseTask"/>
<suffix name="StartNextPendingRequestTask"
label="StartNextPendingRequest DatabaseTask"/>
<suffix name="UpdateRegistrationUITask"
@@ -123050,7 +128104,7 @@ uploading your change for review.
<suffix name="ClickEvent" label="BackgroundFetchClickEvent"/>
<suffix name="FailEvent" label="BackgroundFetchFailEvent"/>
<suffix name="FetchedEvent" label="BackgroundFetchedEvent"/>
- <suffix name="FetchSuccessEvent" label="BackgroundFetchSuccessEvent"/>
+ <suffix name="SuccessEvent" label="BackgroundFetchSuccessEvent"/>
<affected-histogram name="BackgroundFetch.EventDispatchFailure.Dispatch"/>
<affected-histogram name="BackgroundFetch.EventDispatchFailure.FindWorker"/>
<affected-histogram name="BackgroundFetch.EventDispatchFailure.StartWorker"/>
@@ -123107,14 +128161,35 @@ uploading your change for review.
<affected-histogram name="WebRTC.Stun.BatchSuccessPercent.UnknownNAT"/>
</histogram_suffixes>
-<histogram_suffixes name="BlinkCanvasDrawImageType" separator=".">
- <suffix name="Canvas"/>
+<histogram_suffixes name="BlinkCanvasDrawImageSizeType" separator=".">
+ <suffix name="Canvas.CPU"/>
+ <suffix name="Canvas.GPU"/>
+ <suffix name="CssImage"/>
<suffix name="ImageBitmap"/>
- <suffix name="OffscreenCanvas"/>
- <suffix name="Others"/>
+ <suffix name="ImageElement"/>
+ <suffix name="OffscreenCanvas.CPU"/>
+ <suffix name="OffscreenCanvas.GPU"/>
<suffix name="SVG"/>
+ <suffix name="Unknown"/>
<suffix name="Video"/>
- <affected-histogram name="Blink.Canvas.DrawImage"/>
+ <affected-histogram name="Blink.Canvas.DrawImage.SqrtNumberOfPixels"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="BlinkCanvasDrawImageType" separator=".">
+ <suffix base="true" name="Canvas"/>
+ <suffix base="true" name="CssImage"/>
+ <suffix base="true" name="ImageBitmap"/>
+ <suffix base="true" name="ImageElement"/>
+ <suffix base="true" name="OffscreenCanvas"/>
+ <suffix base="true" name="Others">
+ <obsolete>
+ Deprecated 10/2018 with the addition of CssImage and Unknown.
+ </obsolete>
+ </suffix>
+ <suffix base="true" name="SVG"/>
+ <suffix base="true" name="Unknown"/>
+ <suffix base="true" name="Video"/>
+ <affected-histogram name="Blink.Canvas.DrawImage.Duration"/>
</histogram_suffixes>
<histogram_suffixes name="BlinkCanvasDurationBySource" separator=".">
@@ -123125,12 +128200,14 @@ uploading your change for review.
</obsolete>
</suffix>
<suffix name="GPU"/>
- <affected-histogram name="Blink.Canvas.DrawImage.Canvas"/>
- <affected-histogram name="Blink.Canvas.DrawImage.ImageBitmap"/>
- <affected-histogram name="Blink.Canvas.DrawImage.OffscreenCanvas"/>
- <affected-histogram name="Blink.Canvas.DrawImage.Others"/>
- <affected-histogram name="Blink.Canvas.DrawImage.SVG"/>
- <affected-histogram name="Blink.Canvas.DrawImage.Video"/>
+ <affected-histogram name="Blink.Canvas.DrawImage.Duration.Canvas"/>
+ <affected-histogram name="Blink.Canvas.DrawImage.Duration.CssImage"/>
+ <affected-histogram name="Blink.Canvas.DrawImage.Duration.ImageBitmap"/>
+ <affected-histogram name="Blink.Canvas.DrawImage.Duration.ImageElement"/>
+ <affected-histogram name="Blink.Canvas.DrawImage.Duration.OffscreenCanvas"/>
+ <affected-histogram name="Blink.Canvas.DrawImage.Duration.SVG"/>
+ <affected-histogram name="Blink.Canvas.DrawImage.Duration.Unknown"/>
+ <affected-histogram name="Blink.Canvas.DrawImage.Duration.Video"/>
<affected-histogram name="Blink.Canvas.GetImageData"/>
<affected-histogram name="Blink.Canvas.PutImageData"/>
</histogram_suffixes>
@@ -123163,10 +128240,10 @@ uploading your change for review.
<suffix name="JPEG"/>
<suffix name="PNG"/>
<suffix name="WEBP"/>
- <affected-histogram name="Blink.Canvas.ToBlobDuration"/>
+ <affected-histogram name="Blink.Canvas.ToBlob.ScaledDuration"/>
</histogram_suffixes>
-<histogram_suffixes name="BlinkCanvasToDataURLTime" separator=".">
+<histogram_suffixes name="BlinkCanvasToDataURLMimeType" separator=".">
<suffix name="BMP">
<obsolete>
Removed in Oct 2016
@@ -123195,7 +128272,7 @@ uploading your change for review.
</obsolete>
</suffix>
<suffix name="WEBP"/>
- <affected-histogram name="Blink.Canvas.ToDataURL"/>
+ <affected-histogram name="Blink.Canvas.ToDataURLScaledDuration"/>
</histogram_suffixes>
<histogram_suffixes name="BlinkCompositingLayerCount" separator=".">
@@ -123243,7 +128320,7 @@ uploading your change for review.
<affected-histogram name="Blink.MainFrame.CompositingCommitRatio"/>
<affected-histogram name="Blink.MainFrame.CompositingRatio"/>
<affected-histogram name="Blink.MainFrame.ForcedStyleAndLayoutRatio"/>
- <affected-histogram name="Blink.MainFrame.IntersectionRatio"/>
+ <affected-histogram name="Blink.MainFrame.IntersectionObservationRatio"/>
<affected-histogram name="Blink.MainFrame.PaintRatio"/>
<affected-histogram name="Blink.MainFrame.PrePaintRatio"/>
<affected-histogram name="Blink.MainFrame.StyleAndLayoutRatio"/>
@@ -123864,6 +128941,17 @@ uploading your change for review.
<affected-histogram name="PLT.LoadType"/>
</histogram_suffixes>
+<histogram_suffixes name="ContentSetting" separator=".">
+ <suffix name="Allow" label="Allow"/>
+ <suffix name="Ask" label="Ask"/>
+ <suffix name="Block" label="Block"/>
+ <suffix name="DetectImportantContent" label="Detect important content"/>
+ <suffix name="SessionOnly" label="Session only"/>
+ <affected-histogram name="ContentSettings.Exceptions.cookies"/>
+ <affected-histogram name="ContentSettings.Exceptions.popups"/>
+ <affected-histogram name="ContentSettings.Exceptions.subresource-filter"/>
+</histogram_suffixes>
+
<histogram_suffixes name="ContentSettingsType" separator=".">
<suffix name="app-banner" label="App banner exceptions"/>
<suffix name="auto-select-certificate" label="Auto-select cert exceptions"/>
@@ -123878,6 +128966,7 @@ uploading your change for review.
<suffix name="images" label="Images exceptions"/>
<suffix name="javascript" label="JavaScript exceptions"/>
<suffix name="keygen" label="Keygen exceptions"/>
+ <suffix name="media-engagement" label="Media engagement exceptions"/>
<suffix name="media-stream-camera" label="Camera exceptions"/>
<suffix name="media-stream-mic" label="Microphone exceptions"/>
<suffix name="midi-sysex" label="Midi exceptions"/>
@@ -124993,6 +130082,9 @@ uploading your change for review.
<histogram_suffixes name="DesktopIOSEntryPoints" separator="."
ordering="prefix">
+ <obsolete>
+ Deprecated 11/2018 in issue 894963.
+ </obsolete>
<suffix name="BookmarksFootNote"/>
<suffix name="BookmarksNewBubble"/>
<suffix name="HistoryPage"/>
@@ -125003,6 +130095,9 @@ uploading your change for review.
<histogram_suffixes name="DesktopIOSPromotionSMSSent" separator="."
ordering="prefix">
+ <obsolete>
+ Deprecated 11/2018 in issue 894963.
+ </obsolete>
<suffix name="NoSMS" label="No SMS was sent from the promotion."/>
<suffix name="SMSSent" label="SMS sent from the promotion."/>
<affected-histogram name="DesktopIOSPromotion.IOSSigninReason"/>
@@ -125052,6 +130147,9 @@ uploading your change for review.
</histogram_suffixes>
<histogram_suffixes name="DisplaySchedulerNotDrawReason" separator=".">
+ <obsolete>
+ Deprecated after M72 since no longer needed.
+ </obsolete>
<suffix name="DrawNotNeeded" label="DrawNotNeeded"/>
<suffix name="NotVisible" label="NotVisible"/>
<suffix name="OutputSurfaceLost" label="OutputSurfaceLost"/>
@@ -125151,6 +130249,24 @@ uploading your change for review.
<affected-histogram name="DNS.ResolveSuccess"/>
</histogram_suffixes>
+<histogram_suffixes name="DnsTotalTimeType" separator=".">
+ <suffix name="Async" label="using Chromium's resolver"/>
+ <suffix name="AsyncPrivateSupportsDoh"
+ label="using Chromium's resolver, with a DNS server that supports
+ DNS-over-HTTPS"/>
+ <suffix name="System" label="using the system resolver"/>
+ <suffix name="SystemPrivate"
+ label="using the system resolver using private DNS"/>
+ <suffix name="SystemSupportsDoh"
+ label="using the system resolver, with a DNS server that supports
+ DNS-over-HTTPS. Note that on Android the DNS servers are not
+ passed to native code when private DNS is used so we cannot
+ detect when private DNS is used with servers that support
+ DNS-over-HTTPS, so this bucket will fall into the SystemPrivate
+ bucket."/>
+ <affected-histogram name="Net.DNS.TotalTimeTyped"/>
+</histogram_suffixes>
+
<histogram_suffixes name="DocsSpecific" separator=".">
<suffix name="Docs" label="Only for docs.google.com"/>
<affected-histogram name="appcache.MainResourceResponseRetrieval"/>
@@ -125278,6 +130394,7 @@ uploading your change for review.
<suffix name="InternalAPI" label="InternalAPI."/>
<suffix name="Navigation" label="Navigation."/>
<suffix name="OfflinePage" label="OfflinePage."/>
+ <suffix name="Retry" label="Retry."/>
<suffix name="UnknownSource" label="UnknownSource."/>
<suffix name="WebContentsAPI" label="WebContentsAPI."/>
<affected-histogram name="Download.Counts"/>
@@ -125407,6 +130524,37 @@ uploading your change for review.
<affected-histogram name="SiteEngagementService.EngagementScoreBucket"/>
</histogram_suffixes>
+<histogram_suffixes name="Enterprise.ResourceCacheTiming" separator=".">
+ <suffix name="Clear"
+ label="The time to perform the 'clear' operation on a ResourceCache,
+ which deletes all subkeys of given key."/>
+ <suffix name="Delete"
+ label="The time to perform the 'delete' operation on a ResourceCache,
+ which deletes given subkey."/>
+ <suffix name="FilterSubkeys"
+ label="The time to perform the 'filterSubkeys' operation on a
+ ResourceCache, which deletes filtered subkeys of given key."/>
+ <suffix name="Init"
+ label="The time to perform the initialization of a ResourceCache."/>
+ <suffix name="Load"
+ label="The time to perform the 'load' operation on a ResourceCache,
+ which loads the content of given key."/>
+ <suffix name="LoadAllSubkeys"
+ label="The time to perform the 'loadAllSubkeys' operation on a
+ ResourceCache, which loads the content of all subkeys of given
+ key."/>
+ <suffix name="PurgeOtherKeys"
+ label="The time to perform the 'purgeOtherKeys' operation on a
+ ResourceCache, which deletes all keys except given."/>
+ <suffix name="PurgeOtherSubkeys"
+ label="The time to perform the 'purgeOtherSubkeys' operation on a
+ ResourceCache, which deletes all subkeys except given."/>
+ <suffix name="Store"
+ label="The time to perform the 'store' operation on a ResourceCache,
+ which stores data under given key."/>
+ <affected-histogram name="Enterprise.ResourceCacheTiming"/>
+</histogram_suffixes>
+
<histogram_suffixes name="EnterpriseAutoEnrollmentType" separator=".">
<suffix name="ForcedReenrollment" label="Forced Re-Enrollment"/>
<suffix name="InitialEnrollment" label="Initial Enrollment Exchange"/>
@@ -125646,9 +130794,12 @@ uploading your change for review.
</histogram_suffixes>
<histogram_suffixes name="FileBrowserCrostiniSharedPathsDepth" separator=".">
- <suffix name="downloads" label="Shared path in Downloads volume."/>
- <suffix name="drive" label="Shared path in Drive volume."/>
- <suffix name="other" label="Shared path in any other volume."/>
+ <suffix name="Downloads" label="Shared path in Downloads volume."/>
+ <suffix name="DriveComputers" label="Shared path in Drive Computers volume."/>
+ <suffix name="MyDrive" label="Shared path in My Drive volume."/>
+ <suffix name="Other" label="Shared path in any other volume."/>
+ <suffix name="Removable" label="Shared path in removable USB volume."/>
+ <suffix name="TeamDrive" label="Shared path in Team Drive volume."/>
<affected-histogram name="FileBrowser.CrostiniSharedPaths.Depth"/>
</histogram_suffixes>
@@ -125788,6 +130939,19 @@ uploading your change for review.
<affected-histogram name="PLT.PT_StartToFinish"/>
</histogram_suffixes>
+<histogram_suffixes name="GaiaListAccountsRetry" separator="_">
+ <suffix name="0" label="Inital request"/>
+ <suffix name="1" label="1st retry"/>
+ <suffix name="2" label="2nd retry"/>
+ <suffix name="3" label="3rd retry"/>
+ <suffix name="4" label="4th retry"/>
+ <suffix name="5" label="5th retry"/>
+ <suffix name="6" label="6th retry"/>
+ <suffix name="7" label="7th retry"/>
+ <suffix name="8" label="8th retry"/>
+ <affected-histogram name="Gaia.AuthFetcher.ListAccounts.NetErrorCodes.Retry"/>
+</histogram_suffixes>
+
<histogram_suffixes name="GeolocationSettingsDialogSource" separator=".">
<suffix name="DSE" label="Default search engine"/>
<suffix name="NonDSE" label="Non-default search engine"/>
@@ -125875,6 +131039,15 @@ uploading your change for review.
<suffix name="NV12" label="NV12"/>
<suffix name="YUY2" label="YUY2"/>
<affected-histogram name="GPU.DirectComposition.OverlaySupportFlags2"/>
+ <affected-histogram name="GPU.DirectComposition.SwapChainCreationResult"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="GPU.DirectComposition.ProtectedVideoType"
+ separator=".">
+ <suffix name="Clear" label="Clear"/>
+ <suffix name="HardwareProtected" label="HardwareProtected"/>
+ <suffix name="SoftwareProtected" label="SoftwareProtected"/>
+ <affected-histogram name="GPU.DirectComposition.DCLayerResult2"/>
</histogram_suffixes>
<histogram_suffixes name="GPU.MemorySamplingTime" separator=".">
@@ -125897,6 +131070,12 @@ uploading your change for review.
<affected-histogram name="GPU.BlacklistFeatureTestResultsWindows2"/>
</histogram_suffixes>
+<histogram_suffixes name="GpuChannelResponse" separator=".">
+ <suffix name="Failure" label="Failed Request"/>
+ <suffix name="Success" label="Successful Request"/>
+ <affected-histogram name="GPU.EstablishGpuChannelDuration"/>
+</histogram_suffixes>
+
<histogram_suffixes name="GraphicsPipeline" separator="." ordering="prefix">
<suffix name="Browser" label="for browser process."/>
<suffix name="Exo" label="for Exo clients."/>
@@ -126067,6 +131246,7 @@ uploading your change for review.
<histogram_suffixes name="HandshakeConfirmed" separator=".">
<suffix name="HandshakeConfirmed" label="the handshake was confirmed"/>
+ <affected-histogram name="Net.QuicSession.ClosedByPublicReset"/>
<affected-histogram name="Net.QuicSession.ConnectionCloseErrorCodeClient"/>
<affected-histogram name="Net.QuicSession.ConnectionCloseErrorCodeServer"/>
</histogram_suffixes>
@@ -126280,6 +131460,19 @@ uploading your change for review.
<affected-histogram name="WebCore.IndexedDB.LevelDBWriteErrors.PFE"/>
</histogram_suffixes>
+<histogram_suffixes name="InputEventPredictionAccuracy" separator=".">
+ <suffix name="Long" label="predicted time between 20 to 35ms."/>
+ <suffix name="Middle" label="predicted time between 10 to 20ms."/>
+ <suffix name="Short" label="predicted time less than 10ms."/>
+ <affected-histogram name="Event.InputEventPrediction.Accuracy.Mouse"/>
+ <affected-histogram name="Event.InputEventPrediction.Accuracy.Scroll"/>
+ <affected-histogram
+ name="Event.InputEventPrediction.Accuracy.Scroll.OverPredict"/>
+ <affected-histogram
+ name="Event.InputEventPrediction.Accuracy.Scroll.UnderPredict"/>
+ <affected-histogram name="Event.InputEventPrediction.Accuracy.Touch"/>
+</histogram_suffixes>
+
<histogram_suffixes name="InstallerDownloadSources" separator="">
<suffix name="HttpPeer" label="Download Source: HTTP Peer"/>
<suffix name="HttpServer" label="Download Source: HTTP Server"/>
@@ -126497,6 +131690,10 @@ uploading your change for review.
<suffix name="IPH_NewTabTip" label="In product help new tab tip."/>
<suffix name="IPH_PreviewsOmniboxUI"
label="In product help for the Previews UI in the Android Omnibox."/>
+ <suffix name="IPH_ReopenTab"
+ label="In product help for reopening closed tabs."/>
+ <suffix name="IPH_TranslateMenuButton"
+ label="In product help translate menu button."/>
<affected-histogram name="InProductHelp.NotifyEventReadyState"/>
<affected-histogram name="InProductHelp.ShouldTriggerHelpUI"/>
</histogram_suffixes>
@@ -126518,6 +131715,15 @@ uploading your change for review.
<affected-histogram name="DNS.PrefetchResolution"/>
</histogram_suffixes>
+<histogram_suffixes name="JankyIntervalsPerThirtySeconds" separator=".">
+ <suffix name="NonStartup"
+ label="Does not include jank in the first 30 seconds [startup]."/>
+ <suffix name="Startup"
+ label="Only counts jank in the first 30 seconds [startup]."/>
+ <affected-histogram
+ name="Browser.Responsiveness.JankyIntervalsPerThirtySeconds"/>
+</histogram_suffixes>
+
<histogram_suffixes name="JSDialogs.DialogType" separator=".">
<suffix name="Alert" label="window.alert() dialog"/>
<suffix name="BeforeUnload" label="dialog caused by window.onbeforeunload"/>
@@ -126688,6 +131894,16 @@ uploading your change for review.
<affected-histogram name="LevelDB.ApproximateMemoryUse"/>
<affected-histogram name="LevelDB.ApproximateMemTableMemoryUse"/>
<affected-histogram name="LevelDB.Open"/>
+ <affected-histogram name="ProtoDB.DestroySuccess"/>
+ <affected-histogram name="ProtoDB.GetErrorStatus"/>
+ <affected-histogram name="ProtoDB.GetFound"/>
+ <affected-histogram name="ProtoDB.GetSuccess"/>
+ <affected-histogram name="ProtoDB.InitStatus"/>
+ <affected-histogram name="ProtoDB.LoadEntriesSuccess"/>
+ <affected-histogram name="ProtoDB.LoadKeysAndEntriesSuccess"/>
+ <affected-histogram name="ProtoDB.LoadKeysSuccess"/>
+ <affected-histogram name="ProtoDB.UpdateErrorStatus"/>
+ <affected-histogram name="ProtoDB.UpdateSuccess"/>
</histogram_suffixes>
<histogram_suffixes name="LevelDBEnvBackupRestore" separator="">
@@ -127039,6 +132255,16 @@ uploading your change for review.
<affected-histogram name="Media.AudioOutputController"/>
</histogram_suffixes>
+<histogram_suffixes name="MediaBytesReceivedTypes" separator=".">
+ <suffix name="EME"
+ label="Bytes appended to EME SourceBuffers. Can include either SRC or
+ MSE bytes, but is predominantly MSE."/>
+ <suffix name="MSE" label="Bytes appended to all MSE SourceBuffers."/>
+ <suffix name="SRC" label="Bytes received for the SRC from the network."/>
+ <affected-histogram name="Ads.Media.BytesReceived"/>
+ <affected-histogram name="Media.BytesReceived"/>
+</histogram_suffixes>
+
<histogram_suffixes name="MediaControlsElements" separator=".">
<suffix name="CastButton" label="Cast button"/>
<suffix name="CastOverflowButton" label="Cast overflow button"/>
@@ -127066,6 +132292,12 @@ uploading your change for review.
<affected-histogram name="Media.Controls.CTR"/>
</histogram_suffixes>
+<histogram_suffixes name="MediaDecoderType" separator=".">
+ <suffix name="HW" label="Platform decoder"/>
+ <suffix name="SW" label="Software decoder"/>
+ <affected-histogram name="Media.PepperVideoDecoderOutputPictureCount"/>
+</histogram_suffixes>
+
<histogram_suffixes name="MediaElementConfigurations" separator=".">
<suffix name="FullscreenLandscape"/>
<suffix name="FullscreenPortrait"/>
@@ -127522,6 +132754,18 @@ uploading your change for review.
<affected-histogram name="Navigation.TimeToReadyToCommit"/>
</histogram_suffixes>
+<histogram_suffixes name="NavigationPredictor.DSEAffix" separator="."
+ ordering="prefix">
+ <suffix name="OnDSE"
+ label="Recorded only for pages whose URL matches the URL of the search
+ results page of the user's default search engine."/>
+ <suffix name="OnNonDSE"
+ label="Recorded only for pages whose URL does not match the URL of the
+ search results page of the user's default search engine."/>
+ <affected-histogram name="NavigationPredictor.AccuracyActionTaken"/>
+ <affected-histogram name="NavigationPredictor.ActionTaken"/>
+</histogram_suffixes>
+
<histogram_suffixes name="NavigationPreloadEnabled" separator="_">
<suffix name="NavigationPreloadEnabled" label="Navigation preload occurred."/>
<affected-histogram
@@ -129088,6 +134332,12 @@ uploading your change for review.
<affected-histogram name="NewTabPage.OneGoogleBar.RequestLatency"/>
</histogram_suffixes>
+<histogram_suffixes name="NewTabPage.Promos.RequestLatency" separator=".">
+ <suffix name="Failure" label="Failed to fetch middle-slot Promo"/>
+ <suffix name="Success" label="Successfully fetched middle-slot Promo"/>
+ <affected-histogram name="NewTabPage.Promos.RequestLatency"/>
+</histogram_suffixes>
+
<histogram_suffixes name="NewTabPageIconTypes" separator=".">
<suffix name="IconsColor"
label="Icons using a fallback color (favicon resolution too low)."/>
@@ -129656,6 +134906,8 @@ uploading your change for review.
<histogram_suffixes name="OfflinePagesNamespace" separator=".">
<suffix name="async_loading" label="Offline async loaded pages"/>
+ <suffix name="auto_async_loading"
+ label="Automatic offline async loaded pages"/>
<suffix name="bookmark" label="Offline bookmark cache"/>
<suffix name="browser_actions" label="Offline Browser Actions pages"/>
<suffix name="custom_tabs" label="Offline custom tabs"/>
@@ -129694,6 +134946,10 @@ uploading your change for review.
<affected-histogram name="OfflinePages.PageSize"/>
<affected-histogram name="OfflinePages.PageSizeOnAccess.Offline"/>
<affected-histogram name="OfflinePages.PageSizeOnAccess.Online"/>
+ <affected-histogram name="OfflinePages.SavePage.AddPageTime"/>
+ <affected-histogram name="OfflinePages.SavePage.ComputeDigestTime"/>
+ <affected-histogram name="OfflinePages.SavePage.CreateArchiveTime"/>
+ <affected-histogram name="OfflinePages.SavePage.PublishArchiveTime"/>
<affected-histogram name="OfflinePages.SavePageResult"/>
<affected-histogram name="OfflinePages.SavePageTime"/>
</histogram_suffixes>
@@ -130101,10 +135357,18 @@ uploading your change for review.
separator=".">
<suffix name="NonProxied"
label="Resources not loaded through data reduction proxy."/>
+ <suffix name="PercentProxied"
+ label="Percent of resources loaded through data reduction proxy."/>
<suffix name="Proxied"
label="Resources loaded through data reduction proxy."/>
<affected-histogram
- name="PageLoad.Clients.DataReductionProxy.Experimental.CompletedResources.Network"/>
+ name="PageLoad.Clients.DataReductionProxy.Experimental.CompletedResources.Network">
+ <obsolete>
+ Deprecated 10/2018
+ </obsolete>
+ </affected-histogram>
+ <affected-histogram
+ name="PageLoad.Clients.DataReductionProxy.Experimental.CompletedResources.Network2"/>
</histogram_suffixes>
<histogram_suffixes name="PageLoadMetricsClientsDocWrite" separator="."
@@ -130446,8 +135710,10 @@ uploading your change for review.
<suffix name="Clients.Scheme.HTTPS"
label="PageLoadMetrics that are a result of a navigation to a main
resource where the committed URL is HTTPS."/>
+ <affected-histogram name="PageLoad.Experimental.NavigationToInteractive"/>
<affected-histogram
name="PageLoad.Experimental.PaintTiming.NavigationToFirstMeaningfulPaint"/>
+ <affected-histogram name="PageLoad.Internal.NavigationStartedInForeground"/>
<affected-histogram
name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"/>
<affected-histogram name="PageLoad.ParseTiming.NavigationToParseStart"/>
@@ -131645,6 +136911,7 @@ uploading your change for review.
<suffix name="LitePage" label="Lite page previews"/>
<suffix name="LitePageRedirect" label="Lite page redirection previews"/>
<suffix name="LoFi" label="LoFi previews"/>
+ <suffix name="None" label="No preview was served"/>
<suffix name="NoScript" label="NoScript previews"/>
<suffix name="Offline" label="Offline previews"/>
<suffix name="ResourceLoadingHints"
@@ -131654,6 +136921,8 @@ uploading your change for review.
<affected-histogram name="Previews.OmniboxAction"/>
<affected-histogram name="Previews.OptimizationFilterStatus"/>
<affected-histogram name="Previews.OptOut.UserOptedOut"/>
+ <affected-histogram name="Previews.PageEndReason"/>
+ <affected-histogram name="Previews.Triggered.EffectiveConnectionType"/>
</histogram_suffixes>
<histogram_suffixes name="ProcessMemoryAllocator2" separator=".">
@@ -131682,9 +136951,21 @@ uploading your change for review.
<suffix name="PartitionAlloc.Partitions.Layout"
label="Only counting memory used by Layout partition."/>
<suffix name="PrivateMemoryFootprint"
- label="Only counting private resident + swapped/compressed memory."/>
- <suffix name="Resident" label="Only counting resident memory."/>
- <suffix name="SharedMemoryFootprint" label="Only counting shared memory."/>
+ label="Only counting private resident + swapped/compressed memory.">
+ <obsolete>
+ Removed 03/2018.
+ </obsolete>
+ </suffix>
+ <suffix name="Resident" label="Only counting resident memory.">
+ <obsolete>
+ Removed 03/2018.
+ </obsolete>
+ </suffix>
+ <suffix name="SharedMemoryFootprint" label="Only counting shared memory.">
+ <obsolete>
+ Removed 03/2018.
+ </obsolete>
+ </suffix>
<suffix name="SiteStorage"
label="Only counting memory used by Web storage API."/>
<suffix name="SiteStorage.BlobStorage"
@@ -133032,6 +138313,8 @@ uploading your change for review.
<histogram_suffixes name="SecurityInterstitialSBType" separator="."
ordering="prefix">
+ <suffix name="billing"/>
+ <suffix name="billing_subresource"/>
<suffix name="harmful"/>
<suffix name="harmful_subresource"/>
<suffix name="malware"/>
@@ -133446,10 +138729,43 @@ uploading your change for review.
<suffix name="CacheStorage" label="Collected from a CacheStorage instance"/>
<affected-histogram name="ServiceWorkerCache.Scheduler.IsOperationSlow"/>
<affected-histogram name="ServiceWorkerCache.Scheduler.OperationDuration"/>
+ <affected-histogram name="ServiceWorkerCache.Scheduler.OperationDuration2"/>
<affected-histogram name="ServiceWorkerCache.Scheduler.QueueDuration"/>
+ <affected-histogram name="ServiceWorkerCache.Scheduler.QueueDuration2"/>
<affected-histogram name="ServiceWorkerCache.Scheduler.QueueLength"/>
</histogram_suffixes>
+<histogram_suffixes name="ServiceWorkerSchedulerOp" separator=".">
+ <suffix name="Close"/>
+ <suffix name="Delete"/>
+ <suffix name="GetAllMatched"/>
+ <suffix name="Has"/>
+ <suffix name="Init"/>
+ <suffix name="Keys"/>
+ <suffix name="Match"/>
+ <suffix name="MatchAll"/>
+ <suffix name="Open"/>
+ <suffix name="Put"/>
+ <suffix name="Size"/>
+ <suffix name="SizeThenClose"/>
+ <suffix name="WriteIndex"/>
+ <suffix name="WriteSideData"/>
+ <affected-histogram
+ name="ServiceWorkerCache.Cache.Scheduler.IsOperationSlow"/>
+ <affected-histogram
+ name="ServiceWorkerCache.Cache.Scheduler.OperationDuration2"/>
+ <affected-histogram name="ServiceWorkerCache.Cache.Scheduler.QueueDuration2"/>
+ <affected-histogram name="ServiceWorkerCache.Cache.Scheduler.QueueLength"/>
+ <affected-histogram
+ name="ServiceWorkerCache.CacheStorage.Scheduler.IsOperationSlow"/>
+ <affected-histogram
+ name="ServiceWorkerCache.CacheStorage.Scheduler.OperationDuration2"/>
+ <affected-histogram
+ name="ServiceWorkerCache.CacheStorage.Scheduler.QueueDuration2"/>
+ <affected-histogram
+ name="ServiceWorkerCache.CacheStorage.Scheduler.QueueLength"/>
+</histogram_suffixes>
+
<histogram_suffixes name="ServiceWorkerSpecialAppsForEventDispatchingDelay"
separator=".">
<obsolete>
@@ -133579,6 +138895,14 @@ uploading your change for review.
<affected-histogram name="Setup.Install.UnpackFullArchiveTime"/>
</histogram_suffixes>
+<histogram_suffixes name="SetupInstallWin32Apis" separator=".">
+ <suffix name="ChangeServiceConfig"/>
+ <suffix name="CreateService"/>
+ <suffix name="DeleteService"/>
+ <suffix name="OpenSCManager"/>
+ <affected-histogram name="Setup.Install.Win32ApiError"/>
+</histogram_suffixes>
+
<histogram_suffixes name="ShillCumulativeTimeOnline" separator=".">
<suffix name="Any" label="Any connection type"/>
<suffix name="Cellular" label="Cellular connection"/>
@@ -133902,6 +139226,16 @@ uploading your change for review.
<affected-histogram name="PLT.BeginToFinish_NormalLoad"/>
</histogram_suffixes>
+<histogram_suffixes name="StaleWhileRevalidate" separator=".">
+ <suffix name="Cache"/>
+ <suffix name="Network"/>
+ <suffix name="StaleCache"/>
+ <affected-histogram
+ name="PageLoad.Clients.StaleWhileRevalidate.PaintTiming.FirstContentfulPaint"/>
+ <affected-histogram
+ name="PageLoad.Clients.StaleWhileRevalidate.PaintTiming.ParseToFirstContentfulPaint"/>
+</histogram_suffixes>
+
<histogram_suffixes name="StartupProfilingAbandonState" separator="_">
<suffix name="NoLoad" label="Abandoned before first main frame load."/>
<suffix name="NoPaint" label="Abandoned before first paint."/>
@@ -134162,6 +139496,7 @@ uploading your change for review.
<suffix name="PROXY_TABS" label="PROXY_TABS"/>
<suffix name="READING_LIST" label="READING_LIST"/>
<suffix name="SEARCH_ENGINE" label="SEARCH_ENGINE"/>
+ <suffix name="SEND_TAB_TO_SELF" label="SEND_TAB_TO_SELF"/>
<suffix name="SESSION" label="SESSION"/>
<suffix name="SYNCED_NOTIFICATION" label="SYNCED_NOTIFICATION">
<obsolete>
@@ -134185,6 +139520,7 @@ uploading your change for review.
<affected-histogram
name="Sync.DuplicateClientTagHashWithDifferentServerIdsInApplyPendingUpdates"/>
<affected-histogram name="Sync.DuplicateServerIdInApplyPendingUpdates"/>
+ <affected-histogram name="Sync.ModelTypeConfigurationTime.Ephemeral"/>
<affected-histogram name="Sync.ModelTypeCount">
<obsolete>
Deprecated 7/2018. Replaced by Sync.ModelTypeCount2.
@@ -134201,8 +139537,19 @@ uploading your change for review.
</obsolete>
</affected-histogram>
<affected-histogram name="Sync.ModelTypeCount4"/>
- <affected-histogram name="Sync.ModelTypeEntityChange"/>
+ <affected-histogram name="Sync.ModelTypeEntityChange">
+ <obsolete>
+ Deprecated 10/2018. Replaced by Sync.ModelTypeEntityChange3.
+ </obsolete>
+ </affected-histogram>
+ <affected-histogram name="Sync.ModelTypeEntityChange2">
+ <obsolete>
+ Deprecated 11/2018. Replaced by Sync.ModelTypeEntityChange3.
+ </obsolete>
+ </affected-histogram>
+ <affected-histogram name="Sync.ModelTypeEntityChange3"/>
<affected-histogram name="Sync.ModelTypeMemoryKB"/>
+ <affected-histogram name="Sync.USSMigrationEntityCount"/>
</histogram_suffixes>
<histogram_suffixes name="SyncModelTypeByMacro" separator="" ordering="prefix">
@@ -134253,6 +139600,7 @@ uploading your change for review.
<suffix name="PriorityPreferences" label="Priority preferences"/>
<suffix name="ReadingList" label="Reading list"/>
<suffix name="SearchEngines" label="Search engines"/>
+ <suffix name="SendTabToSelf" label="Send tab to self"/>
<suffix name="Sessions" label="Sessions"/>
<suffix name="SyncedNotificationAppInfo" label="Synced notification app info">
<obsolete>
@@ -134327,6 +139675,25 @@ uploading your change for review.
<affected-histogram name="Startup.BrowserOpenTabs"/>
</histogram_suffixes>
+<histogram_suffixes name="TabCreatedReason" separator=".">
+ <suffix name="FromExternalApp"
+ label="This bucket is for any tabs that are created because of custom
+ tabs or intends from other apps. This includes tab creation via
+ intent from other app, creation via homescreen link, creation
+ via custom tab."/>
+ <suffix name="FromManuallyCreated"
+ label="This bucket is for any tabs that are created manually. This
+ includes new tab creation from toolbar menu, creation from long
+ press open, creation at tab switcher, creation from launcher
+ shortcut menu by long press the Chrome icon."/>
+ <suffix name="FromOthers" label="This is the default bucket."/>
+ <suffix name="FromTargetBlank"
+ label="This bucket is for any tabs that were created from a target
+ blank link. e.g. tehchmeme.com will create tabs this way."/>
+ <affected-histogram name="Tabs.Tasks.TabCreated.Count"/>
+ <affected-histogram name="Tabs.Tasks.TabCreated.Percent"/>
+</histogram_suffixes>
+
<histogram_suffixes name="TabNewTabOnload" separator=".">
<suffix name="Google" label="New Tab page for Google."/>
<suffix name="Local" label="Local New Tab page."/>
@@ -134581,6 +139948,12 @@ uploading your change for review.
<affected-histogram name="Drive.FullFeedLoadTime"/>
</histogram_suffixes>
+<histogram_suffixes name="ThisOrOtherUser" separator=".">
+ <suffix name="OtherUser" label="Having a different EUID."/>
+ <suffix name="ThisUser" label="Sharing the same EUID."/>
+ <affected-histogram name="OSX.OtherInstances"/>
+</histogram_suffixes>
+
<histogram_suffixes name="ThreadWatcher" separator=".">
<suffix name="CACHE" label="where watched thread is CACHE BrowserThread."/>
<suffix name="DB" label="where watched thread is DB BrowserThread."/>
@@ -134675,6 +140048,13 @@ uploading your change for review.
name="TrafficStatsAmortizer.PreAmortizationRunDataUseBytes"/>
</histogram_suffixes>
+<histogram_suffixes name="UkmSourceIdTypes" separator=".">
+ <suffix name="App" label="Restricted to app source id types."/>
+ <suffix name="Navigation" label="Restricted to navigation source id types."/>
+ <suffix name="Ukm" label="Restricted to UKM source id types."/>
+ <affected-histogram name="UKM.Sources.SerializedCount2"/>
+</histogram_suffixes>
+
<histogram_suffixes name="UnackedPackets" separator=".">
<obsolete>
Deprecated as of 08/2016.
@@ -134992,6 +140372,16 @@ uploading your change for review.
<affected-histogram name="WebRTC.Audio.EchoCanceller.SuppressorGainBand1"/>
</histogram_suffixes>
+<histogram_suffixes name="WebRtcLoggingEvent" separator=".">
+ <suffix name="Discard" label="Discard"/>
+ <suffix name="Start" label="Start"/>
+ <suffix name="UploadFailed" label="Upload failed"/>
+ <suffix name="UploadStarted" label="Upload started"/>
+ <suffix name="UploadStoredStarted" label="Upload of a stored log started"/>
+ <suffix name="UploadSuccessful" label="Upload successful"/>
+ <affected-histogram name="WebRtcTextLogging"/>
+</histogram_suffixes>
+
<histogram_suffixes name="WebRTCMediaType" separator=".">
<suffix name="Audio" label="Audio"/>
<suffix name="Data" label="Data"/>
diff --git a/chromium/tools/metrics/histograms/update_feature_policy_enum.py b/chromium/tools/metrics/histograms/update_feature_policy_enum.py
index 9bb585f435d..78cbc92ca78 100755
--- a/chromium/tools/metrics/histograms/update_feature_policy_enum.py
+++ b/chromium/tools/metrics/histograms/update_feature_policy_enum.py
@@ -25,4 +25,5 @@ if __name__ == '__main__':
UpdateHistogramEnum(histogram_enum_name='FeaturePolicyFeature',
source_enum_path=source_file,
start_marker='^enum FeaturePolicyFeature {',
- end_marker='^};')
+ end_marker='^};',
+ strip_k_prefix=True)
diff --git a/chromium/tools/metrics/ukm/ukm.xml b/chromium/tools/metrics/ukm/ukm.xml
index a762ab2a756..ce9c141fa51 100644
--- a/chromium/tools/metrics/ukm/ukm.xml
+++ b/chromium/tools/metrics/ukm/ukm.xml
@@ -603,6 +603,14 @@ be describing additional metrics about the same event.
The average time taken by the compositing phase in microseconds in the
event period.
</summary>
+ <aggregation>
+ <history>
+ <index fields="profile.country"/>
+ <statistics>
+ <quantiles type="std-percentiles"/>
+ </statistics>
+ </history>
+ </aggregation>
</metric>
<metric name="Compositing.AverageRatio">
<summary>
@@ -628,6 +636,14 @@ be describing additional metrics about the same event.
The average time taken by the compositing commit at the end of the blink
lifecycle, in microseconds in the event period.
</summary>
+ <aggregation>
+ <history>
+ <index fields="profile.country"/>
+ <statistics>
+ <quantiles type="std-percentiles"/>
+ </statistics>
+ </history>
+ </aggregation>
</metric>
<metric name="CompositingCommit.AverageRatio">
<summary>
@@ -654,6 +670,14 @@ be describing additional metrics about the same event.
The average time taken by all forced style recalcs and layouts in
microseconds in the event period.
</summary>
+ <aggregation>
+ <history>
+ <index fields="profile.country"/>
+ <statistics>
+ <quantiles type="std-percentiles"/>
+ </statistics>
+ </history>
+ </aggregation>
</metric>
<metric name="ForcedStyleAndLayout.AverageRatio">
<summary>
@@ -680,6 +704,14 @@ be describing additional metrics about the same event.
The average time taken to compute IntersectionObserver observations in
microseconds in the event period.
</summary>
+ <aggregation>
+ <history>
+ <index fields="profile.country"/>
+ <statistics>
+ <quantiles type="std-percentiles"/>
+ </statistics>
+ </history>
+ </aggregation>
</metric>
<metric name="IntersectionObservation.AverageRatio">
<summary>
@@ -706,6 +738,14 @@ be describing additional metrics about the same event.
The average time between a BeginMainFrame and the commit of paint results,
in microseconds.
</summary>
+ <aggregation>
+ <history>
+ <index fields="profile.country"/>
+ <statistics>
+ <quantiles type="std-percentiles"/>
+ </statistics>
+ </history>
+ </aggregation>
</metric>
<metric name="MainFrame.WorstCase">
<summary>
@@ -718,6 +758,14 @@ be describing additional metrics about the same event.
The average time taken by the paint phase in microseconds in the event
period.
</summary>
+ <aggregation>
+ <history>
+ <index fields="profile.country"/>
+ <statistics>
+ <quantiles type="std-percentiles"/>
+ </statistics>
+ </history>
+ </aggregation>
</metric>
<metric name="Paint.AverageRatio">
<summary>
@@ -743,6 +791,14 @@ be describing additional metrics about the same event.
The average time taken by the pre-paint phase in microseconds in the event
period.
</summary>
+ <aggregation>
+ <history>
+ <index fields="profile.country"/>
+ <statistics>
+ <quantiles type="std-percentiles"/>
+ </statistics>
+ </history>
+ </aggregation>
</metric>
<metric name="PrePaint.AverageRatio">
<summary>
@@ -763,11 +819,53 @@ be describing additional metrics about the same event.
the sample window. An int in the range [0,100].
</summary>
</metric>
+ <metric name="ScrollingCoordinator.Average">
+ <summary>
+ The average time taken by the style and layout phases in microseconds in
+ the event period.
+ </summary>
+ <aggregation>
+ <history>
+ <index fields="profile.country"/>
+ <statistics>
+ <quantiles type="std-percentiles"/>
+ </statistics>
+ </history>
+ </aggregation>
+ </metric>
+ <metric name="ScrollingCoordinator.AverageRatio">
+ <summary>
+ The average over frames within the event period of the ratio of time taken
+ to update the scrolling coordinator after painting to the total time for
+ the main frame, expressed as a percentage. An int in the range [0,100].
+ </summary>
+ </metric>
+ <metric name="ScrollingCoordinator.WorstCase">
+ <summary>
+ The longest single time within the event period that was used to update
+ the ScrollingCoordinator after painting (in microseconds).
+ </summary>
+ </metric>
+ <metric name="ScrollingCoordinator.WorstCaseRatio">
+ <summary>
+ The highest proportion of a frame within the event period that was used to
+ update the ScrollingCoordinator after painting, expressed as a percentage.
+ An int in the range [0,100].
+ </summary>
+ </metric>
<metric name="StyleAndLayout.Average">
<summary>
The average time taken by the style and layout phases in microseconds in
the event period.
</summary>
+ <aggregation>
+ <history>
+ <index fields="profile.country"/>
+ <statistics>
+ <quantiles type="std-percentiles"/>
+ </statistics>
+ </history>
+ </aggregation>
</metric>
<metric name="StyleAndLayout.AverageRatio">
<summary>
@@ -1162,10 +1260,11 @@ be describing additional metrics about the same event.
</metric>
<metric name="TriggerEvent">
<summary>
- Emits an integer in the range 0-1 to indicate whether the peeking sheet
- was ever triggered and how it was triggered. A value of 0 indicates
- never-shown, a 1 indicates peeked in response to a reverse-scroll (the
- only trigger currently supported).
+ Emits an integer in the range 0-2 to indicate whether the contextual
+ suggestions UI was ever triggered and how it was triggered. A value of 0
+ indicates never-shown, a 1 indicates peeked in response to a
+ reverse-scroll (deprecated), and 2 indicates that the toolbar button was
+ shown (the only trigger currently supported).
</summary>
</metric>
</event>
@@ -1426,6 +1525,13 @@ be describing additional metrics about the same event.
the event, no recording is made. The first GSU of every scrolling sequence
is excluded from this metric.
</summary>
+ <aggregation>
+ <history>
+ <statistics>
+ <quantiles type="std-percentiles"/>
+ </statistics>
+ </history>
+ </aggregation>
</metric>
</event>
@@ -1456,6 +1562,13 @@ be describing additional metrics about the same event.
a given scroll gesture event sequence. If no swap was induced by the
event, no recording is made.
</summary>
+ <aggregation>
+ <history>
+ <statistics>
+ <quantiles type="std-percentiles"/>
+ </statistics>
+ </history>
+ </aggregation>
</metric>
</event>
@@ -2637,6 +2750,18 @@ be describing additional metrics about the same event.
Measure of memory consumed by live objects in the main heap of V8.
</summary>
</metric>
+ <metric name="V8.Main.Heap.CodeLargeObjectSpace">
+ <summary>
+ Measure of memory consumed by the code large object space of the main heap
+ of V8.
+ </summary>
+ </metric>
+ <metric name="V8.Main.Heap.CodeLargeObjectSpace.AllocatedObjects">
+ <summary>
+ Measure of memory consumed by live objects in the code large object space
+ of the main heap of V8.
+ </summary>
+ </metric>
<metric name="V8.Main.Heap.CodeSpace">
<summary>
Measure of memory consumed by the code space of the main heap of V8.
@@ -2768,6 +2893,87 @@ be describing additional metrics about the same event.
</metric>
</event>
+<event name="Memory.TabFootprint">
+ <owner>tommckee@chromium.org</owner>
+ <summary>
+ Measure of memory used by the processes that host an instance of a tab.
+ Intended as a high-level metric for analyzing effective memory use of
+ individual sites.
+ </summary>
+ <metric name="MainFrameProcessPMF">
+ <summary>
+ Measure of private memory, in MB, consumed by the render process dedicated
+ to hosting the main frame. Undefined if the main frame is hosted by a
+ render process used by other tabs. If this is undefined, TabPMF will be
+ undefined.
+ </summary>
+ <aggregation>
+ <history>
+ <statistics>
+ <quantiles type="std-percentiles"/>
+ </statistics>
+ </history>
+ </aggregation>
+ </metric>
+ <metric name="SubFrameProcessPMF.Excluded">
+ <summary>
+ Number of render processes that were blocked from contributing to
+ SubFrameProcessPMF.Total. A process can have its contribution blocked if
+ the process has responsiblities outside the scope of the relevant tab. If
+ this is non-zero, TabPMF will be undefined.
+ </summary>
+ <aggregation>
+ <history>
+ <statistics>
+ <quantiles type="std-percentiles"/>
+ </statistics>
+ </history>
+ </aggregation>
+ </metric>
+ <metric name="SubFrameProcessPMF.Included">
+ <summary>
+ Number of render processes that contributed to SubFrameProcessPMF.Total.
+ </summary>
+ <aggregation>
+ <history>
+ <statistics>
+ <quantiles type="std-percentiles"/>
+ </statistics>
+ </history>
+ </aggregation>
+ </metric>
+ <metric name="SubFrameProcessPMF.Total">
+ <summary>
+ Measure of total private memory, in MB, consumed by the render processes
+ dedicated to hosting sub-frames of the tab. Note that, if a render process
+ hosts frames of other tabs, it isn't considered to be 'dedicated' and so
+ it doesn't contribute to this total.
+ </summary>
+ <aggregation>
+ <history>
+ <statistics>
+ <quantiles type="std-percentiles"/>
+ </statistics>
+ </history>
+ </aggregation>
+ </metric>
+ <metric name="TabPMF">
+ <summary>
+ Measure of private memory, in MB, consumed by all render processes
+ dedicated to hosting some part of a tab. Undefined if there are processes
+ responsible for hosting parts of this tab while hosting parts of other
+ tabs.
+ </summary>
+ <aggregation>
+ <history>
+ <statistics>
+ <quantiles type="std-percentiles"/>
+ </statistics>
+ </history>
+ </aggregation>
+ </metric>
+</event>
+
<event name="Notification">
<owner>peter@chromium.org</owner>
<summary>
@@ -2957,12 +3163,26 @@ be describing additional metrics about the same event.
start to the time the DOMContentLoaded event is fired, for main frame
documents.
</summary>
+ <aggregation>
+ <history>
+ <statistics>
+ <quantiles type="std-percentiles"/>
+ </statistics>
+ </history>
+ </aggregation>
</metric>
<metric name="DocumentTiming.NavigationToLoadEventFired">
<summary>
Measures the time in milliseconds from navigation timing's navigation
start to the time the load event is fired, for main frame documents.
</summary>
+ <aggregation>
+ <history>
+ <statistics>
+ <quantiles type="std-percentiles"/>
+ </statistics>
+ </history>
+ </aggregation>
</metric>
<metric name="Experimental.InputToNavigationStart">
<summary>
@@ -2985,6 +3205,45 @@ be describing additional metrics about the same event.
start to the first meaningful paint (http://bit.ly/ttfmp-doc), for main
frame documents.
</summary>
+ <aggregation>
+ <history>
+ <statistics>
+ <quantiles type="std-percentiles"/>
+ </statistics>
+ </history>
+ </aggregation>
+ </metric>
+ <metric name="Experimental.PaintTiming.NavigationToLargestImagePaint">
+ <summary>
+ Measures the time in milliseconds from navigation timing's navigation
+ start to the time when the page first paints the largest image within
+ viewport after the image finishes loading. The value is recorded at the
+ end of each page load. See http://bit.ly/fcp_plus_plus for more details.
+ </summary>
+ </metric>
+ <metric name="Experimental.PaintTiming.NavigationToLargestTextPaint">
+ <summary>
+ Measures the time in milliseconds from navigation timing's navigation
+ start to the time when the page first paints the largest text within
+ viewport. The value is recorded at the end of each page load. See
+ http://bit.ly/fcp_plus_plus for more details.
+ </summary>
+ </metric>
+ <metric name="Experimental.PaintTiming.NavigationToLastImagePaint">
+ <summary>
+ Measures the time in milliseconds from navigation timing's navigation
+ start to the time when the page first paints the last image within
+ viewport after the image finishes loading. The value is recorded at the
+ end of each page load. See http://bit.ly/fcp_plus_plus for more details.
+ </summary>
+ </metric>
+ <metric name="Experimental.PaintTiming.NavigationToLastTextPaint">
+ <summary>
+ Measures the time in milliseconds from navigation timing's navigation
+ start to the time when the page first paints the last Text within
+ viewport. The value is recorded at the end of each page load. See
+ http://bit.ly/fcp_plus_plus for more details.
+ </summary>
</metric>
<metric name="InteractiveTiming.FirstInputDelay">
<summary>
@@ -2993,6 +3252,13 @@ be describing additional metrics about the same event.
meaningful input per navigation. See https://goo.gl/tr1oTZ for a detailed
explanation. In ms.
</summary>
+ <aggregation>
+ <history>
+ <statistics>
+ <quantiles type="std-percentiles"/>
+ </statistics>
+ </history>
+ </aggregation>
</metric>
<metric name="InteractiveTiming.FirstInputTimestamp">
<summary>
@@ -3014,6 +3280,12 @@ be describing additional metrics about the same event.
meaningful input with longest queuing delay per navigation. In ms.
</summary>
</metric>
+ <metric name="LayoutStability.JankScore">
+ <summary>
+ Measures the amount of layout jank (bit.ly/lsm-explainer) that has
+ occurred during the session.
+ </summary>
+ </metric>
<metric name="MainFrameResource.ConnectDelay">
<summary>
The duration between the start of the connection establishment to the end
@@ -3047,6 +3319,12 @@ be describing additional metrics about the same event.
headers were received. Recorded only for the main frame request. In ms.
</summary>
</metric>
+ <metric name="MainFrameResource.SocketReused">
+ <summary>
+ True if the socket was reused when establishing connection to the origin
+ of the main frame request.
+ </summary>
+ </metric>
<metric name="Navigation.PageEndReason">
<summary>
The |page_load_metrics::PageEndReason| for the main frame navigation of
@@ -3144,12 +3422,26 @@ be describing additional metrics about the same event.
start to the time when the page first paints content. A contentful paint
includes a paint of text, image, SVG, or canvas.
</summary>
+ <aggregation>
+ <history>
+ <statistics>
+ <quantiles type="std-percentiles"/>
+ </statistics>
+ </history>
+ </aggregation>
</metric>
<metric name="PaintTiming.NavigationToFirstPaint">
<summary>
Measures the time in milliseconds from navigation timing's navigation
start to the time the first paint is performed.
</summary>
+ <aggregation>
+ <history>
+ <statistics>
+ <quantiles type="std-percentiles"/>
+ </statistics>
+ </history>
+ </aggregation>
</metric>
<metric name="ParseTiming.NavigationToParseStart">
<summary>
@@ -3203,6 +3495,15 @@ be describing additional metrics about the same event.
distinguish two forms on the same site.
</summary>
</metric>
+ <metric name="FillOnLoad">
+ <summary>
+ Deprecated in November 2018, because the decision this metric supported
+ was made. Records the comparison of the old and new decision about filling
+ a form on load. Should only be logged for fillig with non-PSL matched
+ credentials, in non-Incognito mode. Values are from
+ password_manager::PasswordFormMetricsRecorder::FillOnLoad.
+ </summary>
+ </metric>
<metric name="Generation.GeneratedPassword">
<summary>
Records '1' if the user has generated a password on this form.
@@ -3302,8 +3603,7 @@ be describing additional metrics about the same event.
<summary>
Records the event that led the password manager to believe the submission
was successful. Metrics is recorded only when the password is saved.
- Recorded values correspond to the enum
- autofill::PasswordForm::SubmissionIndicatorEvent.
+ Recorded values correspond to the enum autofill::SubmissionIndicatorEvent.
</summary>
</metric>
<metric name="Submission.Observed">
@@ -3486,6 +3786,14 @@ be describing additional metrics about the same event.
interactions with them. No events are created for pages that don't contain
password forms.
</summary>
+ <metric name="FormManagerAvailable">
+ <summary>
+ Records whether Chrome was sufficiently aware of forms during various
+ stages of saving a credential on the site, or whether saving was aborted
+ due to absence of the corresponding form manager. Values correspond to the
+ enum PasswordManagerMetricsRecorder::FormManagerAvailable.
+ </summary>
+ </metric>
<metric name="PageLevelUserAction">
<summary>
Records if the user interacts with the password manager in a way that
@@ -3566,7 +3874,6 @@ be describing additional metrics about the same event.
<metric name="Source">
<summary>
An enum of type PermissionSourceUI. The UI surface for this action.
- Currently we only record when this is PROMPT.
</summary>
</metric>
</event>
@@ -3582,7 +3889,7 @@ be describing additional metrics about the same event.
<owner>ryansturm@chromium.org</owner>
<summary>
Previews related metrics associated with a page load. See
- //componenets/previews/.
+ //components/previews/.
</summary>
<metric name="client_lofi">
<summary>
@@ -3594,6 +3901,18 @@ be describing additional metrics about the same event.
Set to 1 when a user is shown a lite page in page load.
</summary>
</metric>
+ <metric name="lite_page_redirect">
+ <summary>
+ Set to 1 when a user is shown a lite page redirect in page load.
+ </summary>
+ </metric>
+ <metric name="navigation_restart_penalty">
+ <summary>
+ Set to the number of milliseconds spent restarting navigations when a Lite
+ Page Redirect preview is attempted, whether or not it is committed, during
+ the page load.
+ </summary>
+ </metric>
<metric name="noscript">
<summary>
Set to 1 when a user is shown a NoScript preview on a page load.
@@ -3634,6 +3953,58 @@ be describing additional metrics about the same event.
</metric>
</event>
+<event name="PreviewsResourceLoadingHints" singular="True">
+ <owner>jegray@chromium.org</owner>
+ <summary>
+ Metrics associated with loading a resource loading hints based preview. This
+ is recorded when the URL's document finishes loading. See
+ //components/previews/.
+ </summary>
+ <metric name="blocked_high_priority">
+ <summary>
+ The number of high priority resource requests that were blocked by the
+ resource loading hints based preview while the URL's document was loading.
+ </summary>
+ </metric>
+ <metric name="blocked_low_priority">
+ <summary>
+ The number of low priority resource requests that were blocked by the
+ resource loading hints based preview while the URL's document was loading.
+ </summary>
+ </metric>
+ <metric name="blocked_medium_priority">
+ <summary>
+ The number of medium priority resource requests that were blocked by the
+ resource loading hints based preview while the URL's document was loading.
+ </summary>
+ </metric>
+ <metric name="blocked_very_high_priority">
+ <summary>
+ The number of very high priority resource requests that were blocked by
+ the resource loading hints based preview while the URL's document was
+ loading.
+ </summary>
+ </metric>
+ <metric name="blocked_very_low_priority">
+ <summary>
+ The number of very low priority resource requests that were blocked by the
+ resource loading hints based preview while the URL's document was loading.
+ </summary>
+ </metric>
+ <metric name="patterns_to_block_total">
+ <summary>
+ The total number of patterns to block included in the resource loading
+ hints based preview.
+ </summary>
+ </metric>
+ <metric name="patterns_to_block_used">
+ <summary>
+ The number of patterns that blocked at least one resource request in the
+ resource loading hints based preview while the URL's document was loading.
+ </summary>
+ </metric>
+</event>
+
<event name="ResponsivenessMeasurement">
<owner>npm@chromium.org</owner>
<owner>tdresser@chromium.org</owner>
@@ -3763,6 +4134,20 @@ be describing additional metrics about the same event.
popup opener's URL (not the URL of the popup).
</summary>
</metric>
+ <metric name="NumInteractions">
+ <summary>
+ Integer value representing how many user interactions the popup had. This
+ is capped at 100. See IsUserInteractionInputType in web_contents_impl for
+ what an interaction is. Currently it is a mouse, scroll begin, touch
+ start, or raw key down event.
+ </summary>
+ </metric>
+ <metric name="Trusted">
+ <summary>
+ Boolean value representing whether the popup was opened via some trusted
+ event (e.g. context menu, ctrl-click, etc).
+ </summary>
+ </metric>
<metric name="UserInitiatedClose">
<summary>
Boolean value to represent whether the popup was closed by user gesture.
@@ -3960,12 +4345,28 @@ be describing additional metrics about the same event.
The final SecurityLevel of the page before it is closed or another
navigation occurs. Based on the enum security_state::SecurityLevel.
</summary>
+ <aggregation>
+ <history>
+ <index fields="profile.country"/>
+ <statistics>
+ <enumeration/>
+ </statistics>
+ </history>
+ </aggregation>
</metric>
<metric name="InitialSecurityLevel">
<summary>
The initial SecurityLevel of the page when the navigation commits. Based
on the enum security_state::SecurityLevel.
</summary>
+ <aggregation>
+ <history>
+ <index fields="profile.country"/>
+ <statistics>
+ <enumeration/>
+ </statistics>
+ </history>
+ </aggregation>
</metric>
<metric name="ScoreDelta">
<summary>
@@ -4182,6 +4583,12 @@ be describing additional metrics about the same event.
brought to foreground again.
</summary>
</metric>
+ <metric name="LabelId">
+ <summary>
+ An int64 random number generated when TabManager.TabMetric is logged. The
+ same number is also logged here, so that feature label can be paired.
+ </summary>
+ </metric>
<metric name="MRUIndex">
<summary>
Index of the tab in most-recently-used order. A value of N means there are
@@ -4190,10 +4597,14 @@ be describing additional metrics about the same event.
</summary>
</metric>
<metric name="SequenceId">
+ <obsolete>
+ Deprecated 11/2018 in favor LabelId.
+ </obsolete>
<summary>
- The sequence of this event and TabManager.TabMetrics event in the current
- session. Incremented by 1 each time one of the two events is logged to
- provide an ordering of events.
+ This metric is obsolete in 11/2018 in favor of LabelId for pairing with
+ Tabmanager.TabMetrics event. The sequence of this event and
+ TabManager.TabMetrics event in the current session. Incremented by 1 each
+ time one of the two events is logged to provide an ordering of events.
</summary>
</metric>
<metric name="TimeFromBackgrounded">
@@ -4989,17 +5400,36 @@ be describing additional metrics about the same event.
Number of key events that were sent to the page.
</summary>
</metric>
+ <metric name="LabelId">
+ <summary>
+ An int64 random number generated at logging time. The same number will
+ also be logged to the TabManager.Background.ForegroundedOrClosed event, so
+ that feature label can be paired.
+ </summary>
+ </metric>
<metric name="MouseEventCount">
<summary>
Number of mouse events that were sent to the page.
</summary>
</metric>
+ <metric name="MRUIndex">
+ <summary>
+ Index of the tab in most-recently-used order. A value of N means there are
+ N tabs more recently used than the one that is being foregrounded or
+ closed.
+ </summary>
+ </metric>
<metric name="NavigationEntryCount">
<summary>
Number of navigation entries in the tab's NavigationController.
Corresponds to the size of the tab's back/forward list.
</summary>
</metric>
+ <metric name="NumReactivationBefore">
+ <summary>
+ Number of reactivations that this tab had till now.
+ </summary>
+ </metric>
<metric name="PageTransitionCoreType">
<summary>
Type of the page transition for this navigation. Uses the core values from
@@ -5018,11 +5448,23 @@ be describing additional metrics about the same event.
PageTransition type may not be accurate.
</summary>
</metric>
+ <metric name="QueryId">
+ <summary>
+ An int64 random number generated at query time of
+ TabManager::GetSortedLifecycleUnitsFromTabRanker. Tabs with the same
+ QueryId will be later on combined in one full list for further analysis.
+ </summary>
+ </metric>
<metric name="SequenceId">
+ <obsolete>
+ Deprecated 11/2018 in favor LabelId.
+ </obsolete>
<summary>
- The sequence of this event and TabManager.ForegroundedOrClosed event in
- the current session. Incremented by 1 each time one of the two events is
- logged to provide an ordering of events.
+ This metric is obsolete in 11/2018 in favor of LabelId for pairing with
+ Tabmanager.ForegroundedOrClosed event. The sequence of this event and
+ TabManager.ForegroundedOrClosed event in the current session. Incremented
+ by 1 each time one of the two events is logged to provide an ordering of
+ events.
</summary>
</metric>
<metric name="SiteEngagementScore">
@@ -5031,6 +5473,18 @@ be describing additional metrics about the same event.
10 to limit granularity.
</summary>
</metric>
+ <metric name="TimeFromBackgrounded">
+ <summary>
+ Duration in MS from when the tab is backgrounded to when it is brought to
+ foreground or closed.
+ </summary>
+ </metric>
+ <metric name="TotalTabCount">
+ <summary>
+ Total number of tabs open across all non-incognito browser windows. Helps
+ contextualize the MRUIndex value.
+ </summary>
+ </metric>
<metric name="TouchEventCount">
<summary>
Number of touch events that were sent to the page.
@@ -5043,9 +5497,39 @@ be describing additional metrics about the same event.
</summary>
</metric>
<metric name="WindowId">
+ <obsolete>
+ Deprecated 11/2018 in favor of putting window features directly in this
+ event.
+ </obsolete>
<summary>
WindowId of the WindowMetrics entry corresponding to the browser window
- containing this tab.
+ containing this tab. This metrics is not populated from 11/2018 because we
+ don't need to join this event with other WindowMetrics any more.
+ </summary>
+ </metric>
+ <metric name="WindowIsActive">
+ <summary>
+ Boolean value indicating whether the window is the active (frontmost)
+ window.
+ </summary>
+ </metric>
+ <metric name="WindowShowState">
+ <summary>
+ Enumeration of the window show state, such as fullscreen or minimized.
+ Values are enumerated in metrics::WindowMetricsEvent::ShowState.
+ </summary>
+ </metric>
+ <metric name="WindowTabCount">
+ <summary>
+ Number of tabs in the tab strip. Rounded down to the nearest exponential
+ bucket (with a bucket spacing factor of 1.5). Will be 1 for windows with
+ only one top-level WebContents, such as app windows.
+ </summary>
+ </metric>
+ <metric name="WindowType">
+ <summary>
+ Enumeration for the type of the window. Values are enumerated in
+ metrics::WindowMetricsEvent::Type.
</summary>
</metric>
</event>
@@ -5182,6 +5666,14 @@ be describing additional metrics about the same event.
Type of a input field which the user is trying to use the Virtual Keyboard
on.
</summary>
+ <aggregation>
+ <history>
+ <index fields="profile.form_factor"/>
+ <statistics>
+ <enumeration/>
+ </statistics>
+ </history>
+ </aggregation>
</metric>
</event>
@@ -5202,6 +5694,24 @@ be describing additional metrics about the same event.
</metric>
</event>
+<event name="WebRTC.ComplexSdp">
+ <owner>hbos@chromium.org</owner>
+ <owner>guidou@chromium.org</owner>
+ <summary>
+ Logged when an application uses complex SDP in a WebRTC PeerConnection or
+ experiences an error attempting to parse SDP. Such cases will result in
+ errors if the application assumes the wrong default SDP format. This is an
+ important concern during the transition of the default SDP format from Plan
+ B to Unified Plan.
+ </summary>
+ <metric name="Category">
+ <summary>
+ A value that represents how complex/unparsable SDP is used. The categories
+ are defined in blink::ComplexSdpCategory.
+ </summary>
+ </metric>
+</event>
+
<event name="IOS.FindInPageSearchMatches">
<owner>thegreenfrog@chromium.org</owner>
<owner>michaeldo@chromium.org</owner>
@@ -5227,6 +5737,13 @@ be describing additional metrics about the same event.
<summary>
True if there was a mismatch.
</summary>
+ <aggregation>
+ <history>
+ <statistics>
+ <enumeration/>
+ </statistics>
+ </history>
+ </aggregation>
</metric>
</event>
diff --git a/chromium/tools/metrics/ukm/ukm_model.py b/chromium/tools/metrics/ukm/ukm_model.py
index 1149dc76566..5bf4bec6279 100644
--- a/chromium/tools/metrics/ukm/ukm_model.py
+++ b/chromium/tools/metrics/ukm/ukm_model.py
@@ -16,6 +16,48 @@ _SUMMARY_TYPE = models.TextNodeType('summary')
_LOWERCASE_NAME_FN = lambda n: n.attributes['name'].value.lower()
+_ENUMERATION_TYPE = models.ObjectNodeType(
+ 'enumeration',
+ attributes=[],
+ single_line=True)
+
+_QUANTILES_TYPE = models.ObjectNodeType(
+ 'quantiles',
+ attributes=[
+ ('type', unicode),
+ ],
+ single_line=True)
+
+_INDEX_TYPE = models.ObjectNodeType(
+ 'index',
+ attributes=[
+ ('fields', unicode),
+ ],
+ single_line=True)
+
+_STATISTICS_TYPE = models.ObjectNodeType(
+ 'statistics',
+ attributes=[],
+ children=[
+ models.ChildType('quantiles', _QUANTILES_TYPE, False),
+ models.ChildType('enumeration', _ENUMERATION_TYPE, False),
+ ])
+
+_HISTORY_TYPE = models.ObjectNodeType(
+ 'history',
+ attributes=[],
+ children=[
+ models.ChildType('index', _INDEX_TYPE, False),
+ models.ChildType('statistics', _STATISTICS_TYPE, True),
+ ])
+
+_AGGREGATION_TYPE = models.ObjectNodeType(
+ 'aggregation',
+ attributes=[],
+ children=[
+ models.ChildType('history', _HISTORY_TYPE, False),
+ ])
+
_METRIC_TYPE = models.ObjectNodeType(
'metric',
attributes=[
@@ -26,6 +68,7 @@ _METRIC_TYPE = models.ObjectNodeType(
models.ChildType('obsolete', _OBSOLETE_TYPE, False),
models.ChildType('owners', _OWNER_TYPE, True),
models.ChildType('summary', _SUMMARY_TYPE, False),
+ models.ChildType('aggregation', _AGGREGATION_TYPE, True),
])
_EVENT_TYPE = models.ObjectNodeType(
diff --git a/chromium/tools/perf/chrome_telemetry_build/BUILD.gn b/chromium/tools/perf/chrome_telemetry_build/BUILD.gn
index 712c02f49c0..885f7475995 100644
--- a/chromium/tools/perf/chrome_telemetry_build/BUILD.gn
+++ b/chromium/tools/perf/chrome_telemetry_build/BUILD.gn
@@ -4,7 +4,8 @@
import("//build/config/compiler/compiler.gni")
if (is_android) {
- import("//build/config/android/config.gni") # For public_android_sdk
+ # Pull in enable_chrome_android_internal and public_android_sdk
+ import("//build/config/android/config.gni")
}
if (is_chromeos) {
import("//build/config/chromeos/rules.gni")
@@ -21,6 +22,9 @@ group("telemetry_chrome_test") {
if (is_android) {
data_deps += [ "//chrome/android:chrome_public_apk" ]
+ if (enable_chrome_android_internal) {
+ data_deps += [ "//clank:telemetry_clank_test" ]
+ }
if (public_android_sdk) {
data_deps += [
"//android_webview:system_webview_apk",
@@ -83,9 +87,7 @@ group("telemetry_chrome_test_without_chrome") {
"//third_party/catapult:telemetry_chrome_test_support",
]
if (!is_android) {
- data_deps += [
- "//third_party/catapult/telemetry:bitmaptools",
- ]
+ data_deps += [ "//third_party/catapult/telemetry:bitmaptools" ]
}
data = [
diff --git a/chromium/tools/polymer/OWNERS b/chromium/tools/polymer/OWNERS
index d1f55b15f0f..9620dc3fd0f 100644
--- a/chromium/tools/polymer/OWNERS
+++ b/chromium/tools/polymer/OWNERS
@@ -1,3 +1,4 @@
+dbeam@chromium.org
dpapad@chromium.org
jklein@chromium.org
michaelpg@chromium.org
diff --git a/chromium/tools/real_world_impact/real_world_impact.py b/chromium/tools/real_world_impact/real_world_impact.py
index 07249098da8..494d68bb188 100755
--- a/chromium/tools/real_world_impact/real_world_impact.py
+++ b/chromium/tools/real_world_impact/real_world_impact.py
@@ -280,8 +280,7 @@ def RunDrtTask(url):
p = subprocess.Popen([content_shell,
"--run-web-tests",
additional_content_shell_flags,
- # The single quote is not a typo, it's a separator!
- html_path + "'--pixel-test"
+ html_path
],
shell=False,
stdout=subprocess.PIPE,
diff --git a/chromium/tools/roll_swiftshader.py b/chromium/tools/roll_swiftshader.py
index ba0f63462ec..785e9c2865e 100755
--- a/chromium/tools/roll_swiftshader.py
+++ b/chromium/tools/roll_swiftshader.py
@@ -26,10 +26,6 @@ extra_cq_trybots = [
"buildernames": ["linux_optional_gpu_tests_rel"]
},
{
- "mastername": "master.tryserver.chromium.linux",
- "buildernames": ["linux_chromium_cfi_rel_ng"]
- },
- {
"mastername": "luci.chromium.try",
"buildernames": ["android_optional_gpu_tests_rel"]
}
diff --git a/chromium/tools/strict_enum_value_checker/OWNERS b/chromium/tools/strict_enum_value_checker/OWNERS
index 0d6b2067616..f0569bada76 100644
--- a/chromium/tools/strict_enum_value_checker/OWNERS
+++ b/chromium/tools/strict_enum_value_checker/OWNERS
@@ -1,3 +1,3 @@
rdevlin.cronin@chromium.org
-rockot@chromium.org
+rockot@google.com
diff --git a/chromium/tools/traffic_annotation/auditor/BUILD.gn b/chromium/tools/traffic_annotation/auditor/BUILD.gn
index 4b50c8cade7..6e2e4678b18 100644
--- a/chromium/tools/traffic_annotation/auditor/BUILD.gn
+++ b/chromium/tools/traffic_annotation/auditor/BUILD.gn
@@ -5,8 +5,8 @@
import("//testing/test.gni")
import("//third_party/protobuf/proto_library.gni")
-# Works only on desktop platforms.
-assert(is_win || is_linux || is_mac)
+# Works only on Windows and Linux.
+assert(is_win || is_linux)
proto_library("chrome_settings_full_runtime") {
proto_out_dir = "/tools/traffic_annotation"
diff --git a/chromium/tools/traffic_annotation/auditor/auditor_result.cc b/chromium/tools/traffic_annotation/auditor/auditor_result.cc
index 320a884dac3..501b89dd6bd 100644
--- a/chromium/tools/traffic_annotation/auditor/auditor_result.cc
+++ b/chromium/tools/traffic_annotation/auditor/auditor_result.cc
@@ -22,14 +22,16 @@ AuditorResult::AuditorResult(Type type,
type == AuditorResult::Type::ERROR_HASH_CODE_COLLISION ||
type == AuditorResult::Type::ERROR_REPEATED_ID ||
type == AuditorResult::Type::ERROR_MERGE_FAILED ||
- type == AuditorResult::Type::ERROR_ANNOTATIONS_XML_UPDATE);
+ type == AuditorResult::Type::ERROR_ANNOTATIONS_XML_UPDATE ||
+ type == AuditorResult::Type::ERROR_INVALID_OS);
DCHECK(!message.empty() || type == AuditorResult::Type::RESULT_OK ||
type == AuditorResult::Type::RESULT_IGNORE ||
type == AuditorResult::Type::ERROR_MISSING_TAG_USED ||
type == AuditorResult::Type::ERROR_NO_ANNOTATION ||
type == AuditorResult::Type::ERROR_MISSING_SECOND_ID ||
type == AuditorResult::Type::ERROR_DIRECT_ASSIGNMENT ||
- type == AuditorResult::Type::ERROR_TEST_ANNOTATION);
+ type == AuditorResult::Type::ERROR_TEST_ANNOTATION ||
+ type == AuditorResult::Type::ERROR_INVALID_OS);
if (!message.empty())
details_.push_back(message);
};
@@ -168,6 +170,17 @@ std::string AuditorResult::ToText() const {
return base::StringPrintf("Annotation for tests is used in '%s:%i'.",
file_path_.c_str(), line_);
+ case AuditorResult::Type::ERROR_INVALID_OS:
+ return base::StringPrintf("Invalid OS '%s' in annotation '%s' at %s",
+ details_[0].c_str(), details_[1].c_str(),
+ file_path_.c_str());
+
+ case AuditorResult::Type::ERROR_DEPRECATED_WITH_OS:
+ return base::StringPrintf(
+ "Annotation '%s' has a deprecation date and at least one active OS "
+ "at %s.",
+ details_[0].c_str(), file_path_.c_str());
+
default:
return std::string();
}
diff --git a/chromium/tools/traffic_annotation/auditor/auditor_result.h b/chromium/tools/traffic_annotation/auditor/auditor_result.h
index 9d1ba078d11..d65c7a70797 100644
--- a/chromium/tools/traffic_annotation/auditor/auditor_result.h
+++ b/chromium/tools/traffic_annotation/auditor/auditor_result.h
@@ -45,6 +45,9 @@ class AuditorResult {
// list expresssion.
ERROR_ANNOTATIONS_XML_UPDATE, // Annotations XML requires update.
ERROR_TEST_ANNOTATION, // Annotation for tests is used.
+ ERROR_INVALID_OS, // Invalid 'os_list' in annotations.xml
+ ERROR_DEPRECATED_WITH_OS, // Marked deprecated, but 'os_list' is not
+ // empty in annotations.xml.
};
static const int kNoCodeLineSpecified;
@@ -86,4 +89,4 @@ class AuditorResult {
int line_;
};
-#endif // TOOLS_TRAFFIC_ANNOTATION_AUDITOR_AUDITOR_RESULT_H_ \ No newline at end of file
+#endif // TOOLS_TRAFFIC_ANNOTATION_AUDITOR_AUDITOR_RESULT_H_
diff --git a/chromium/tools/traffic_annotation/auditor/traffic_annotation_auditor.cc b/chromium/tools/traffic_annotation/auditor/traffic_annotation_auditor.cc
index 1ee9d95801f..eb2a867f8cd 100644
--- a/chromium/tools/traffic_annotation/auditor/traffic_annotation_auditor.cc
+++ b/chromium/tools/traffic_annotation/auditor/traffic_annotation_auditor.cc
@@ -764,12 +764,14 @@ void TrafficAnnotationAuditor::AddMissingAnnotations(
bool TrafficAnnotationAuditor::RunAllChecks(
const std::vector<std::string>& path_filters,
bool report_xml_updates) {
- std::set<int> deprecated_ids;
-
- if (!exporter_.GetDeprecatedHashCodes(&deprecated_ids)) {
+ if (exporter_.GetArchivedAnnotations().empty() &&
+ !exporter_.LoadAnnotationsXML()) {
return false;
}
+ std::set<int> deprecated_ids;
+ exporter_.GetDeprecatedHashCodes(&deprecated_ids);
+
if (path_filters.size())
AddMissingAnnotations(path_filters);
@@ -786,10 +788,8 @@ bool TrafficAnnotationAuditor::RunAllChecks(
CheckAllRequiredFunctionsAreAnnotated();
if (errors_.empty()) {
- if (!exporter_.UpdateAnnotations(extracted_annotations_,
- GetReservedIDsMap())) {
- return false;
- }
+ exporter_.UpdateAnnotations(extracted_annotations_, GetReservedIDsMap(),
+ &errors_);
}
// If |report_xml_updates| is true, check annotations.xml whether or not it is
diff --git a/chromium/tools/traffic_annotation/auditor/traffic_annotation_auditor.h b/chromium/tools/traffic_annotation/auditor/traffic_annotation_auditor.h
index 2ef563f9c4d..e6b2d32395b 100644
--- a/chromium/tools/traffic_annotation/auditor/traffic_annotation_auditor.h
+++ b/chromium/tools/traffic_annotation/auditor/traffic_annotation_auditor.h
@@ -199,4 +199,4 @@ class TrafficAnnotationAuditor {
std::map<std::string, bool> checked_dependencies_;
};
-#endif // TOOLS_TRAFFIC_ANNOTATION_AUDITOR_TRAFFIC_ANNOTATION_AUDITOR_H_ \ No newline at end of file
+#endif // TOOLS_TRAFFIC_ANNOTATION_AUDITOR_TRAFFIC_ANNOTATION_AUDITOR_H_
diff --git a/chromium/tools/traffic_annotation/auditor/traffic_annotation_auditor_unittest.cc b/chromium/tools/traffic_annotation/auditor/traffic_annotation_auditor_unittest.cc
index d7a886362c8..dba6d0f8398 100644
--- a/chromium/tools/traffic_annotation/auditor/traffic_annotation_auditor_unittest.cc
+++ b/chromium/tools/traffic_annotation/auditor/traffic_annotation_auditor_unittest.cc
@@ -909,7 +909,8 @@ TEST_F(TrafficAnnotationAuditorTest, AnnotationsXML) {
TrafficAnnotationExporter exporter(source_path());
EXPECT_TRUE(exporter.LoadAnnotationsXML());
- EXPECT_TRUE(exporter.CheckArchivedAnnotations());
+ exporter.CheckArchivedAnnotations(errors());
+ EXPECT_TRUE(errors()->empty());
}
// Tests if 'annotations.xml' is read and has at least one item.
diff --git a/chromium/tools/traffic_annotation/auditor/traffic_annotation_exporter.cc b/chromium/tools/traffic_annotation/auditor/traffic_annotation_exporter.cc
index 1dd41a45a16..ae0828a3e91 100644
--- a/chromium/tools/traffic_annotation/auditor/traffic_annotation_exporter.cc
+++ b/chromium/tools/traffic_annotation/auditor/traffic_annotation_exporter.cc
@@ -77,12 +77,9 @@ TrafficAnnotationExporter::TrafficAnnotationExporter(
const base::FilePath& source_path)
: source_path_(source_path), modified_(false) {
all_supported_platforms_.push_back("linux");
- all_supported_platforms_.push_back("mac");
all_supported_platforms_.push_back("windows");
#if defined(OS_LINUX)
current_platform_ = "linux";
-#elif defined(OS_MACOSX)
- current_platform_ = "mac";
#elif defined(OS_WIN)
current_platform_ = "windows";
#else
@@ -169,11 +166,12 @@ bool TrafficAnnotationExporter::LoadAnnotationsXML() {
return all_ok;
}
-bool TrafficAnnotationExporter::UpdateAnnotations(
+void TrafficAnnotationExporter::UpdateAnnotations(
const std::vector<AnnotationInstance>& annotations,
- const std::map<int, std::string>& reserved_ids) {
- if (archive_.empty() && !LoadAnnotationsXML())
- return false;
+ const std::map<int, std::string>& reserved_ids,
+ std::vector<AuditorResult>* errors) {
+ CHECK(!archive_.empty());
+ DCHECK(errors);
std::set<int> current_platform_hashcodes;
@@ -273,7 +271,7 @@ bool TrafficAnnotationExporter::UpdateAnnotations(
}
}
- return CheckArchivedAnnotations();
+ CheckArchivedAnnotations(errors);
}
std::string TrafficAnnotationExporter::GenerateSerializedXML() const {
@@ -349,41 +347,56 @@ bool TrafficAnnotationExporter::SaveAnnotationsXML() const {
xml_content.c_str(), xml_content.length()) != -1;
}
-bool TrafficAnnotationExporter::GetDeprecatedHashCodes(
+void TrafficAnnotationExporter::GetDeprecatedHashCodes(
std::set<int>* hash_codes) {
- if (archive_.empty() && !LoadAnnotationsXML())
- return false;
+ CHECK(!archive_.empty());
hash_codes->clear();
for (const auto& item : archive_) {
if (!item.second.deprecation_date.empty())
hash_codes->insert(item.second.unique_id_hash_code);
}
- return true;
}
-bool TrafficAnnotationExporter::CheckArchivedAnnotations() {
+void TrafficAnnotationExporter::CheckArchivedAnnotations(
+ std::vector<AuditorResult>* errors) {
+ DCHECK(errors);
// Check for annotation hash code duplications.
- std::set<int> used_codes;
+ std::map<int, std::string> used_codes;
for (auto& item : archive_) {
if (base::ContainsKey(used_codes, item.second.unique_id_hash_code)) {
- LOG(ERROR) << "Unique id hash code " << item.second.unique_id_hash_code
- << " is used more than once.";
- return false;
+ AuditorResult error(AuditorResult::Type::ERROR_HASH_CODE_COLLISION);
+ error.AddDetail(used_codes[item.second.unique_id_hash_code]);
+ error.AddDetail(item.first);
+ errors->push_back(std::move(error));
} else {
- used_codes.insert(item.second.unique_id_hash_code);
+ used_codes[item.second.unique_id_hash_code] = item.first;
}
}
// Check for coexistence of OS(es) and deprecation date.
for (auto& item : archive_) {
if (!item.second.deprecation_date.empty() && !item.second.os_list.empty()) {
- LOG(ERROR) << "Annotation " << item.first
- << " has a deprecation date and at least one active OS.";
- return false;
+ errors->push_back(
+ AuditorResult(AuditorResult::Type::ERROR_DEPRECATED_WITH_OS,
+ item.first, kAnnotationsXmlPath.MaybeAsASCII(),
+ AuditorResult::kNoCodeLineSpecified));
+ }
+ }
+
+ // Check that listed OSes are valid.
+ for (const auto& pair : archive_) {
+ for (const auto& os : pair.second.os_list) {
+ if (!base::ContainsValue(all_supported_platforms_, os)) {
+ AuditorResult error(AuditorResult::Type::ERROR_INVALID_OS,
+ std::string(), kAnnotationsXmlPath.MaybeAsASCII(),
+ AuditorResult::kNoCodeLineSpecified);
+ error.AddDetail(os);
+ error.AddDetail(pair.first);
+ errors->push_back(std::move(error));
+ }
}
}
- return true;
}
unsigned TrafficAnnotationExporter::GetXMLItemsCountForTesting() {
diff --git a/chromium/tools/traffic_annotation/auditor/traffic_annotation_exporter.h b/chromium/tools/traffic_annotation/auditor/traffic_annotation_exporter.h
index 1ba6f29e25f..2d4e1213a71 100644
--- a/chromium/tools/traffic_annotation/auditor/traffic_annotation_exporter.h
+++ b/chromium/tools/traffic_annotation/auditor/traffic_annotation_exporter.h
@@ -42,10 +42,12 @@ class TrafficAnnotationExporter {
// Loads annotations from annotations.xml file into |archive_|.
bool LoadAnnotationsXML();
- // Updates |archive_| with current set of extracted annotations and
- // reserved ids. Sets the |modified_| flag if any item is updated.
- bool UpdateAnnotations(const std::vector<AnnotationInstance>& annotations,
- const std::map<int, std::string>& reserved_ids);
+ // Updates |archive_| with current set of extracted annotations and reserved
+ // ids. Sets the |modified_| flag if any item is updated. Appends errors to
+ // |errors|.
+ void UpdateAnnotations(const std::vector<AnnotationInstance>& annotations,
+ const std::map<int, std::string>& reserved_ids,
+ std::vector<AuditorResult>* errors);
// Saves |archive_| into annotations.xml.
bool SaveAnnotationsXML() const;
@@ -53,14 +55,14 @@ class TrafficAnnotationExporter {
// Returns the required updates for annotations.xml.
std::string GetRequiredUpdates();
- // Produces the list of deprecated hash codes. Returns false if
- // annotations.xml is not loaded and cannot be loaded.
- bool GetDeprecatedHashCodes(std::set<int>* hash_codes);
+ // Produces the list of deprecated hash codes. Requires annotations.xml to be
+ // loaded.
+ void GetDeprecatedHashCodes(std::set<int>* hash_codes);
bool modified() const { return modified_; }
// Runs tests on content of |archive_|.
- bool CheckArchivedAnnotations();
+ void CheckArchivedAnnotations(std::vector<AuditorResult>* errors);
const std::map<std::string, ArchivedAnnotation>& GetArchivedAnnotations()
const {
@@ -99,4 +101,4 @@ class TrafficAnnotationExporter {
bool modified_;
};
-#endif // TOOLS_TRAFFIC_ANNOTATION_AUDITOR_TRAFFIC_ANNOTATION_EXPORTER_H_ \ No newline at end of file
+#endif // TOOLS_TRAFFIC_ANNOTATION_AUDITOR_TRAFFIC_ANNOTATION_EXPORTER_H_
diff --git a/chromium/tools/traffic_annotation/bin/OWNERS b/chromium/tools/traffic_annotation/bin/OWNERS
index b5290efa84e..33258f6e051 100644
--- a/chromium/tools/traffic_annotation/bin/OWNERS
+++ b/chromium/tools/traffic_annotation/bin/OWNERS
@@ -1,2 +1,3 @@
georgesak@chromium.org
+nicolaso@chromium.org
rhalavati@chromium.org
diff --git a/chromium/tools/traffic_annotation/bin/README.md b/chromium/tools/traffic_annotation/bin/README.md
index af731e3377d..47738e9e300 100644
--- a/chromium/tools/traffic_annotation/bin/README.md
+++ b/chromium/tools/traffic_annotation/bin/README.md
@@ -74,5 +74,5 @@ and land the resulting CL.
The following two lines will be updated by the above script, and the modified
README should be committed along with the updated .sha1 checksums.
-CLANG_REVISION = '338452'
-LASTCHANGE=91de2a347a0372128c51c770e912097ce4c07a70-refs/heads/master@{#581211}
+CLANG_REVISION = '344066'
+LASTCHANGE=66e8edfc93db414d075188874db8697526225b42-refs/heads/master@{#602257}
diff --git a/chromium/tools/traffic_annotation/bin/linux64/traffic_annotation_auditor.sha1 b/chromium/tools/traffic_annotation/bin/linux64/traffic_annotation_auditor.sha1
index fae343b3f03..1f4868fe672 100644
--- a/chromium/tools/traffic_annotation/bin/linux64/traffic_annotation_auditor.sha1
+++ b/chromium/tools/traffic_annotation/bin/linux64/traffic_annotation_auditor.sha1
@@ -1 +1 @@
-3efcac84415fa69a73040bdf02080e66261dc245 \ No newline at end of file
+b0ad62b575576e1b786be9e488052a395d7f20a0 \ No newline at end of file
diff --git a/chromium/tools/traffic_annotation/bin/win32/traffic_annotation_auditor.exe.sha1 b/chromium/tools/traffic_annotation/bin/win32/traffic_annotation_auditor.exe.sha1
index 8da88a2346c..58cfeee2dc1 100644
--- a/chromium/tools/traffic_annotation/bin/win32/traffic_annotation_auditor.exe.sha1
+++ b/chromium/tools/traffic_annotation/bin/win32/traffic_annotation_auditor.exe.sha1
@@ -1 +1 @@
-3183ab75a1945d54e1d09c60e4770036b032a684 \ No newline at end of file
+450d7f5bf3087b16b89e9ab90d77541d3f09d9f8 \ No newline at end of file
diff --git a/chromium/tools/traffic_annotation/scripts/check_annotations.py b/chromium/tools/traffic_annotation/scripts/check_annotations.py
index 2ff7ae15115..f68d218e0bf 100755
--- a/chromium/tools/traffic_annotation/scripts/check_annotations.py
+++ b/chromium/tools/traffic_annotation/scripts/check_annotations.py
@@ -25,6 +25,7 @@ CHANGELIST_SIZE_TO_TRIGGER_FULL_TEST = 100
class NetworkTrafficAnnotationChecker():
EXTENSIONS = ['.cc', '.mm',]
+ ANNOTATIONS_FILE = 'annotations.xml'
def __init__(self, build_path=None):
"""Initializes a NetworkTrafficAnnotationChecker object.
@@ -36,11 +37,47 @@ class NetworkTrafficAnnotationChecker():
"""
self.tools = NetworkTrafficAnnotationTools(build_path)
+ def IsAnnotationsFile(self, file_path):
+ """Returns true if the given file is the annotations file."""
+ return os.path.basename(file_path) == self.ANNOTATIONS_FILE
+
def ShouldCheckFile(self, file_path):
"""Returns true if the input file has an extension relevant to network
traffic annotations."""
return os.path.splitext(file_path)[1] in self.EXTENSIONS
+ def GetFilePaths(self, complete_run, limit):
+ if complete_run:
+ return []
+
+ # Get list of modified files. If failed, silently ignore as the test is
+ # run in error resilient mode.
+ file_paths = self.tools.GetModifiedFiles() or []
+
+ annotations_file_changed = any(
+ self.IsAnnotationsFile(file_path) for file_path in file_paths)
+
+ # If the annotations file has changed, trigger a full test to avoid
+ # missing a case where the annotations file has changed, but not the
+ # corresponding file, causing a mismatch that is not detected by just
+ # checking the changed .cc and .mm files.
+ if annotations_file_changed:
+ return []
+
+ file_paths = [
+ file_path for file_path in file_paths if self.ShouldCheckFile(
+ file_path)]
+ if not file_paths:
+ return None
+
+ # If the number of changed files in the CL exceeds a threshold, trigger
+ # full test to avoid sending very long list of arguments and possible
+ # failure in argument buffers.
+ if len(file_paths) > CHANGELIST_SIZE_TO_TRIGGER_FULL_TEST:
+ file_paths = []
+
+ return file_paths
+
def CheckFiles(self, complete_run, limit):
"""Passes all given files to traffic_annotation_auditor to be checked for
possible violations of network traffic annotation rules.
@@ -59,22 +96,9 @@ class NetworkTrafficAnnotationChecker():
"are required to do it.")
return 0
- if complete_run:
- file_paths = []
- else:
- # Get list of modified files. If failed, silently ignore as the test is
- # run in error resilient mode.
- file_paths = self.tools.GetModifiedFiles() or []
- file_paths = [
- file_path for file_path in file_paths if self.ShouldCheckFile(
- file_path)]
- if not file_paths:
- return 0
- # If the number of changed files in the CL exceeds a threshold, trigger
- # full test to avoid sending very long list of arguments and possible
- # failure in argument buffers.
- if len(file_paths) > CHANGELIST_SIZE_TO_TRIGGER_FULL_TEST:
- file_paths = []
+ file_paths = self.GetFilePaths(complete_run, limit)
+ if file_paths is None:
+ return 0
args = ["--test-only", "--limit=%i" % limit, "--error-resilient"] + \
file_paths
diff --git a/chromium/tools/traffic_annotation/summary/annotations.xml b/chromium/tools/traffic_annotation/summary/annotations.xml
index 84eb764b1c9..073874b5ea0 100644
--- a/chromium/tools/traffic_annotation/summary/annotations.xml
+++ b/chromium/tools/traffic_annotation/summary/annotations.xml
@@ -8,10 +8,10 @@ Refer to README.md for content description and update process.
-->
<annotations>
- <item id="CRD_dns_blackhole_checker" hash_code="7634838" type="0" content_hash_code="86431305" os_list="linux,mac,windows" file_path="remoting/host/dns_blackhole_checker.cc"/>
+ <item id="CRD_dns_blackhole_checker" hash_code="7634838" type="0" content_hash_code="86431305" os_list="linux,windows" file_path="remoting/host/dns_blackhole_checker.cc"/>
<item id="CRD_ice_config_request" hash_code="49825319" type="0" content_hash_code="8740825" os_list="linux,windows" file_path="remoting/protocol/http_ice_config_request.cc"/>
<item id="CRD_relay_session_request" hash_code="24058523" type="0" content_hash_code="36997811" os_list="linux,windows" file_path="remoting/protocol/port_allocator.cc"/>
- <item id="CRD_service_client" hash_code="25502614" type="0" content_hash_code="76861209" os_list="linux,mac,windows" file_path="remoting/host/setup/service_client.cc"/>
+ <item id="CRD_service_client" hash_code="25502614" type="0" content_hash_code="76861209" os_list="linux,windows" file_path="remoting/host/setup/service_client.cc"/>
<item id="CRD_telemetry_log" hash_code="18670926" type="0" content_hash_code="49025478" os_list="linux,windows" file_path="remoting/base/telemetry_log_writer.cc"/>
<item id="accounts_image_fetcher" hash_code="98658519" type="0" content_hash_code="45432230" os_list="linux,windows" file_path="components/signin/core/browser/account_fetcher_service.cc"/>
<item id="adb_client_socket" hash_code="87775794" type="0" content_hash_code="56654828" os_list="linux,windows" file_path="chrome/browser/devtools/device/adb/adb_client_socket.cc"/>
@@ -32,6 +32,7 @@ Refer to README.md for content description and update process.
<item id="blob_reader" hash_code="5154306" type="0" deprecated="2018-06-14" content_hash_code="39702178" file_path=""/>
<item id="bluetooth_socket" hash_code="94099818" type="0" content_hash_code="30932349" os_list="linux,windows" file_path="device/bluetooth/bluetooth_socket_net.cc"/>
<item id="brandcode_config" hash_code="109679553" type="0" content_hash_code="128843792" os_list="linux,windows" file_path="chrome/browser/profile_resetter/brandcode_config_fetcher.cc"/>
+ <item id="browser_switcher_ieem_sitelist" hash_code="97159948" type="0" content_hash_code="9996111" os_list="windows" file_path="chrome/browser/browser_switcher/browser_switcher_service.cc"/>
<item id="captive_portal_service" hash_code="88754904" type="0" content_hash_code="70737580" os_list="linux,windows" file_path="chrome/browser/captive_portal/captive_portal_service.cc"/>
<item id="cast_channel_send" hash_code="103172229" type="0" deprecated="2018-08-23" content_hash_code="33946302" file_path=""/>
<item id="cast_keep_alive_delegate" hash_code="134755844" type="0" deprecated="2018-08-23" content_hash_code="66118796" file_path=""/>
@@ -69,7 +70,7 @@ Refer to README.md for content description and update process.
<item id="data_reduction_proxy_pingback" hash_code="68561428" type="0" content_hash_code="78407792" os_list="linux,windows" file_path="components/data_reduction_proxy/content/browser/data_reduction_proxy_pingback_client_impl.cc"/>
<item id="data_reduction_proxy_secure_proxy_check" hash_code="131236802" type="0" content_hash_code="122297136" os_list="linux,windows" file_path="components/data_reduction_proxy/core/browser/secure_proxy_checker.cc"/>
<item id="data_reduction_proxy_warmup" hash_code="8250451" type="0" content_hash_code="6321249" os_list="linux,windows" file_path="components/data_reduction_proxy/core/browser/warmup_url_fetcher.cc"/>
- <item id="desktop_ios_promotion" hash_code="13694792" type="0" content_hash_code="19776951" os_list="windows" file_path="chrome/browser/ui/desktop_ios_promotion/sms_service.cc"/>
+ <item id="desktop_ios_promotion" hash_code="13694792" type="0" deprecated="2018-11-04" content_hash_code="19776951" file_path=""/>
<item id="device_geolocation_request" hash_code="77673751" type="0" deprecated="2017-10-20" content_hash_code="97181773" file_path=""/>
<item id="device_management_service" hash_code="117782019" type="0" content_hash_code="127535409" os_list="linux,windows" file_path="components/policy/core/common/cloud/device_management_service.cc"/>
<item id="devtools_free_data_source" hash_code="22774132" type="0" content_hash_code="35733000" os_list="linux,windows" file_path="chrome/browser/ui/webui/devtools_ui.cc"/>
@@ -119,7 +120,7 @@ Refer to README.md for content description and update process.
<item id="gaia_oauth_client_get_tokens" hash_code="5637379" type="0" content_hash_code="12099176" os_list="linux,windows" file_path="google_apis/gaia/gaia_oauth_client.cc"/>
<item id="gaia_oauth_client_get_user_info" hash_code="83476155" type="0" content_hash_code="35159007" os_list="linux,windows" file_path="google_apis/gaia/gaia_oauth_client.cc"/>
<item id="gaia_oauth_client_refresh_token" hash_code="82462683" type="0" content_hash_code="22305252" os_list="linux,windows" file_path="google_apis/gaia/gaia_oauth_client.cc"/>
- <item id="gcd_rest_client" hash_code="105985951" type="0" content_hash_code="70710803" os_list="mac" file_path="remoting/host/gcd_rest_client.cc"/>
+ <item id="gcd_rest_client" hash_code="105985951" type="0" deprecated="2018-10-17" content_hash_code="70710803" file_path="remoting/host/gcd_rest_client.cc"/>
<item id="gcm_channel_status_request" hash_code="18300705" type="0" content_hash_code="53862393" os_list="linux,windows" file_path="components/gcm_driver/gcm_channel_status_request.cc"/>
<item id="gcm_checkin" hash_code="65957842" type="0" content_hash_code="98259579" os_list="linux,windows" file_path="google_apis/gcm/engine/checkin_request.cc"/>
<item id="gcm_connection_factory" hash_code="29057242" type="0" content_hash_code="75279835" os_list="linux,windows" file_path="google_apis/gcm/engine/connection_factory_impl.cc"/>
@@ -140,6 +141,7 @@ Refer to README.md for content description and update process.
<item id="interest_feed_send" hash_code="76717919" type="0" content_hash_code="34678180" os_list="linux,windows" file_path="components/feed/core/feed_networking_host.cc"/>
<item id="intranet_redirect_detector" hash_code="21785164" type="0" content_hash_code="62025595" os_list="linux,windows" file_path="chrome/browser/intranet_redirect_detector.cc"/>
<item id="invalidation_service" hash_code="72354423" type="0" content_hash_code="78425687" os_list="linux,windows" file_path="components/invalidation/impl/gcm_network_channel.cc"/>
+ <item id="journey_journey_info_json_request" hash_code="62660788" type="0" content_hash_code="77009071" os_list="linux,windows" file_path="components/journey/journey_info_json_request.cc"/>
<item id="lib_address_input" hash_code="50816767" type="0" content_hash_code="57977576" os_list="linux,windows" file_path="third_party/libaddressinput/chromium/chrome_metadata_source.cc"/>
<item id="logo_tracker" hash_code="36859107" type="0" content_hash_code="67588075" os_list="linux,windows" file_path="components/search_provider_logos/logo_tracker.cc"/>
<item id="md_downloads_dom_handler" hash_code="65603364" type="0" content_hash_code="134779147" os_list="linux,windows" file_path="chrome/browser/ui/webui/md_downloads/md_downloads_dom_handler.cc"/>
@@ -153,15 +155,15 @@ Refer to README.md for content description and update process.
<item id="network_location_provider" hash_code="23472048" type="1" second_id="96590038" content_hash_code="41087976" os_list="linux,windows" semantics_fields="1" policy_fields="3,4" file_path="services/device/geolocation/network_location_provider.cc"/>
<item id="network_location_request" hash_code="96590038" type="2" content_hash_code="80741011" os_list="linux,windows" semantics_fields="2,3,4,5" policy_fields="-1" file_path="services/device/geolocation/network_location_request.cc"/>
<item id="network_time_component" hash_code="46188932" type="0" content_hash_code="28051857" os_list="linux,windows" file_path="components/network_time/network_time_tracker.cc"/>
- <item id="ntp_custom_link_checker_request" hash_code="78408551" type="0" content_hash_code="13407730" os_list="linux,mac,windows" file_path="chrome/browser/search/instant_service.cc"/>
<item id="ntp_contextual_suggestions_fetch" hash_code="95711309" type="0" content_hash_code="107035434" os_list="linux,windows" file_path="components/ntp_snippets/contextual/contextual_suggestions_fetch.cc"/>
+ <item id="ntp_custom_link_checker_request" hash_code="78408551" type="0" deprecated="2018-10-26" content_hash_code="13407730" file_path=""/>
<item id="ntp_icon_source" hash_code="29197139" type="0" content_hash_code="16399294" os_list="linux,windows" file_path="chrome/browser/search/ntp_icon_source.cc"/>
<item id="ntp_snippets_fetch" hash_code="15418154" type="0" content_hash_code="10078959" os_list="linux,windows" file_path="components/ntp_snippets/remote/json_request.cc"/>
<item id="oauth2_access_token_fetcher" hash_code="27915688" type="0" content_hash_code="33501872" os_list="linux,windows" file_path="google_apis/gaia/oauth2_access_token_fetcher_impl.cc"/>
<item id="oauth2_api_call_flow" hash_code="29188932" type="2" content_hash_code="108831236" os_list="linux,windows" policy_fields="-1" file_path="google_apis/gaia/oauth2_api_call_flow.cc"/>
<item id="oauth2_mint_token_flow" hash_code="1112842" type="1" second_id="29188932" content_hash_code="91581432" os_list="linux,windows" semantics_fields="1,2,3,4,5" policy_fields="3,4" file_path="google_apis/gaia/oauth2_mint_token_flow.cc"/>
<item id="ocsp_start_url_request" hash_code="60921996" type="0" content_hash_code="24127780" os_list="linux" file_path="net/cert_net/nss_ocsp.cc"/>
- <item id="offline_prefetch" hash_code="19185953" type="0" content_hash_code="57248156" os_list="linux,windows" file_path="components/offline_pages/core/prefetch/prefetch_request_fetcher.cc"/>
+ <item id="offline_prefetch" hash_code="19185953" type="0" content_hash_code="112039446" os_list="linux,windows" file_path="components/offline_pages/core/prefetch/prefetch_request_fetcher.cc"/>
<item id="omnibox_documentsuggest" hash_code="6055066" type="0" content_hash_code="126973249" os_list="linux,windows" file_path="components/omnibox/browser/document_suggestions_service.cc"/>
<item id="omnibox_navigation_observer" hash_code="61684939" type="0" content_hash_code="70941231" os_list="linux,windows" file_path="chrome/browser/ui/omnibox/chrome_omnibox_navigation_observer.cc"/>
<item id="omnibox_prefetch_image" hash_code="109200878" type="0" content_hash_code="107906693" os_list="linux,windows" file_path="chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc"/>
@@ -192,11 +194,13 @@ Refer to README.md for content description and update process.
<item id="popular_sites_fetch" hash_code="50755044" type="0" content_hash_code="6910083" os_list="linux,windows" file_path="components/ntp_tiles/popular_sites_impl.cc"/>
<item id="port_forwarding_controller_socket" hash_code="95075845" type="0" content_hash_code="122163428" os_list="linux,windows" file_path="chrome/browser/devtools/device/port_forwarding_controller.cc"/>
<item id="ppapi_download_request" hash_code="135967426" type="0" content_hash_code="110461402" os_list="linux,windows" file_path="chrome/browser/safe_browsing/download_protection/ppapi_download_request.cc"/>
- <item id="prefetch_download" hash_code="44583172" type="0" content_hash_code="100587691" os_list="linux,windows" file_path="components/offline_pages/core/prefetch/prefetch_downloader_impl.cc"/>
+ <item id="prefetch_download" hash_code="44583172" type="0" content_hash_code="21424542" os_list="linux,windows" file_path="components/offline_pages/core/prefetch/prefetch_downloader_impl.cc"/>
+ <item id="prefetch_thumbnail" hash_code="83519268" type="0" content_hash_code="6947363" os_list="linux,windows" file_path="components/offline_pages/core/prefetch/thumbnail_fetch_by_url.cc"/>
<item id="printer_job_handler" hash_code="67638271" type="1" second_id="111712433" content_hash_code="75712693" os_list="linux,windows" semantics_fields="2,3,4" file_path="chrome/service/cloud_print/printer_job_handler.cc"/>
<item id="privet_http_impl" hash_code="71251498" type="0" content_hash_code="107348604" os_list="linux,windows" file_path="chrome/browser/printing/cloud_print/privet_http_impl.cc"/>
<item id="profile_avatar" hash_code="51164680" type="0" content_hash_code="113550845" os_list="linux,windows" file_path="chrome/browser/profiles/profile_avatar_downloader.cc"/>
<item id="profile_resetter_upload" hash_code="105330607" type="0" content_hash_code="129329171" os_list="linux,windows" file_path="chrome/browser/profile_resetter/reset_report_uploader.cc"/>
+ <item id="promo_service" hash_code="67052219" type="0" content_hash_code="32939033" os_list="linux,windows" file_path="chrome/browser/search/promos/promo_service.cc"/>
<item id="proxy_config_direct" hash_code="119015679" type="0" content_hash_code="119931568" os_list="linux,windows" file_path="net/proxy_resolution/proxy_config_with_annotation.cc"/>
<item id="proxy_config_headless" hash_code="133221587" type="0" content_hash_code="77459277" os_list="linux,windows" file_path="headless/lib/browser/headless_request_context_manager.cc"/>
<item id="proxy_config_settings" hash_code="136468456" type="0" content_hash_code="19527377" os_list="linux,windows" file_path="components/proxy_config/pref_proxy_config_tracker_impl.cc"/>
@@ -233,10 +237,9 @@ Refer to README.md for content description and update process.
<item id="sdch_dictionary_fetch" hash_code="47152935" type="0" deprecated="2017-09-16" content_hash_code="16764294" file_path=""/>
<item id="security_key_socket" hash_code="31074955" type="0" content_hash_code="11296409" os_list="linux,windows" file_path="remoting/host/security_key/security_key_socket.cc"/>
<item id="service_worker_navigation_preload" hash_code="129872904" type="0" content_hash_code="79473248" os_list="linux,windows" file_path="content/browser/service_worker/service_worker_fetch_dispatcher.cc"/>
- <item id="service_worker_update_checker" hash_code="130931413" type="0" content_hash_code="46608086" os_list="linux,mac,windows" file_path="content/browser/service_worker/service_worker_single_script_update_checker.cc"/>
+ <item id="service_worker_update_checker" hash_code="130931413" type="0" content_hash_code="46608086" os_list="linux,windows" file_path="content/browser/service_worker/service_worker_single_script_update_checker.cc"/>
<item id="service_worker_write_to_cache_job" hash_code="117963307" type="0" content_hash_code="18065724" os_list="linux,windows" file_path="content/browser/service_worker/service_worker_write_to_cache_job.cc"/>
<item id="services_http_server_error_response" hash_code="59302801" type="0" content_hash_code="127774041" os_list="linux,windows" file_path="services/network/public/cpp/server/http_server.cc"/>
- <item id="shared_worker_script_load" hash_code="107347227" type="0" content_hash_code="64293499" os_list="linux,mac,windows" file_path="content/browser/shared_worker/shared_worker_script_fetcher.cc"/>
<item id="sigined_exchange_cert_fetcher" hash_code="79442849" type="0" content_hash_code="8138156" os_list="linux,windows" file_path="content/browser/web_package/signed_exchange_cert_fetcher.cc"/>
<item id="signed_in_profile_avatar" hash_code="108903331" type="0" content_hash_code="72850619" os_list="linux,windows" file_path="chrome/browser/profiles/profile_downloader.cc"/>
<item id="socket_bio_adapter" hash_code="516551" type="0" content_hash_code="21643352" os_list="linux,windows" file_path="net/socket/socket_bio_adapter.cc"/>
@@ -270,6 +273,7 @@ Refer to README.md for content description and update process.
<item id="url_fetcher_downloader" hash_code="113231892" type="0" content_hash_code="61085066" os_list="linux,windows" file_path="components/update_client/url_fetcher_downloader.cc"/>
<item id="url_prevision_fetcher" hash_code="118389509" type="0" content_hash_code="66145513" os_list="linux,windows" file_path="content/browser/media/url_provision_fetcher.cc"/>
<item id="user_info_fetcher" hash_code="22265491" type="0" content_hash_code="72016232" os_list="linux,windows" file_path="components/policy/core/common/cloud/user_info_fetcher.cc"/>
+ <item id="viz_devtools_server" hash_code="16292315" type="0" content_hash_code="70061664" os_list="linux,windows" file_path="components/ui_devtools/devtools_server.cc"/>
<item id="web_history_counter" hash_code="137457845" type="1" second_id="110307337" content_hash_code="49663381" os_list="linux,windows" semantics_fields="2,3,4" policy_fields="4" file_path="components/browsing_data/core/counters/history_counter.cc"/>
<item id="web_history_expire" hash_code="60946824" type="1" second_id="110307337" content_hash_code="92626030" os_list="linux,windows" semantics_fields="2,3,4" policy_fields="4" file_path="components/history/core/browser/browsing_history_service.cc"/>
<item id="web_history_expire_between_dates" hash_code="126122632" type="1" second_id="110307337" content_hash_code="34304787" os_list="linux,windows" semantics_fields="2,3,4" policy_fields="4" file_path="components/history/core/browser/history_service.cc"/>
@@ -284,5 +288,6 @@ Refer to README.md for content description and update process.
<item id="webstore_install_helper" hash_code="25921771" type="0" content_hash_code="10206361" os_list="linux,windows" file_path="chrome/browser/extensions/webstore_install_helper.cc"/>
<item id="webstore_installer" hash_code="18764319" type="0" content_hash_code="11030110" os_list="linux,windows" file_path="chrome/browser/extensions/webstore_installer.cc"/>
<item id="webui_content_scripts_download" hash_code="100545943" type="0" content_hash_code="119898059" os_list="linux,windows" file_path="extensions/browser/guest_view/web_view/web_ui/web_ui_url_fetcher.cc"/>
+ <item id="worker_script_load" hash_code="72087791" type="0" content_hash_code="24889169" os_list="linux,windows" file_path="content/browser/worker_host/worker_script_fetcher.cc"/>
<item id="xmpp_signal_strategy" hash_code="88906454" type="0" content_hash_code="88958321" os_list="linux,windows" file_path="remoting/signaling/xmpp_signal_strategy.cc"/>
</annotations>
diff --git a/chromium/tools/ubsan/vptr_blacklist.txt b/chromium/tools/ubsan/vptr_blacklist.txt
index 3e24d8a0fb9..39da577115c 100644
--- a/chromium/tools/ubsan/vptr_blacklist.txt
+++ b/chromium/tools/ubsan/vptr_blacklist.txt
@@ -134,8 +134,3 @@ fun:*forbidGCDuringConstruction*
# "vptr". See crbug.com/609786.
src:*/third_party/libc\+\+abi/trunk/src/private_typeinfo.cpp
-
-#############################################################################
-# invalid downcasts for IPC messages
-# https://crbug.com/520760
-src:*nacl_message_scanner.cc
diff --git a/chromium/tools/vim/chromium.ycm_extra_conf.py b/chromium/tools/vim/chromium.ycm_extra_conf.py
index 58133c0983c..fb9c2b0a0fd 100644
--- a/chromium/tools/vim/chromium.ycm_extra_conf.py
+++ b/chromium/tools/vim/chromium.ycm_extra_conf.py
@@ -248,6 +248,10 @@ def GetClangOptionsFromCommandLine(clang_commandline, out_dir,
clang_flags.append(include_match.group(1) + path)
elif flag.startswith('-std') or flag == '-nostdinc++':
clang_flags.append(flag)
+ elif flag.startswith('-march=arm'):
+ # Value armv7-a of this flag causes a parsing error with a message
+ # "ClangParseError: Failed to parse the translation unit."
+ continue
elif flag.startswith('-') and flag[1] in 'DWFfmO':
if flag == '-Wno-deprecated-register' or flag == '-Wno-header-guard':
# These flags causes libclang (3.3) to crash. Remove it until things
diff --git a/chromium/tools/vscode/OWNERS b/chromium/tools/vscode/OWNERS
new file mode 100644
index 00000000000..3b5b2bb69ff
--- /dev/null
+++ b/chromium/tools/vscode/OWNERS
@@ -0,0 +1 @@
+cmp@chromium.org \ No newline at end of file
diff --git a/chromium/tools/vscode/README.md b/chromium/tools/vscode/README.md
new file mode 100644
index 00000000000..c3db7d38876
--- /dev/null
+++ b/chromium/tools/vscode/README.md
@@ -0,0 +1,5 @@
+Example settings for VSCode, to be adopted/moved into a src/.vscode or
+~/.vscode directory.
+While these files are not spec-compliant json, they do indeed work with the
+VSCode settings. It's likely that VSCode has a custom JSON interpreter for this
+custom JSON format. Please refer to src/docs/vscode.md for more info.
diff --git a/chromium/tools/vscode/keybindings.json5 b/chromium/tools/vscode/keybindings.json5
new file mode 100644
index 00000000000..e1e0b063d71
--- /dev/null
+++ b/chromium/tools/vscode/keybindings.json5
@@ -0,0 +1,50 @@
+// Place your key bindings in this file to overwrite the defaults
+[
+ // Run the task marked as "isTestCommand": true, see tasks.json.
+ { "key": "ctrl+shift+t", "command": "workbench.action.tasks.test" },
+ // Jump to the previous change in the built-in diff tool.
+ { "key": "ctrl+up", "command": "workbench.action.compareEditor.previousChange" },
+ // Jump to the next change in the built-in diff tool.
+ { "key": "ctrl+down", "command": "workbench.action.compareEditor.nextChange" },
+ // Jump to previous location in the editor (useful to get back from viewing a symbol definition).
+ { "key": "alt+left", "command": "workbench.action.navigateBack" },
+ // Jump to next location in the editor.
+ { "key": "alt+right", "command": "workbench.action.navigateForward" },
+ // Get a blame view of the current file. Requires the annotator extension.
+ { "key": "ctrl+alt+a", "command": "annotator.annotate" },
+ // Toggle header/source with the Toggle Header/Source extension (overrides the
+ // key binding from the C/C++ extension as I found it to be slow).
+ { "key": "alt+o", "command": "togglehs.toggleHS" },
+ // Quickly run a task, see tasks.json. Since we named them 1-, 2- etc., it is
+ // suffucient to press the corresponding number.
+ { "key": "ctrl+r", "command": "workbench.action.tasks.runTask",
+ "when": "!inDebugMode" },
+ // The following keybindings are useful on laptops with small keyboards such as
+ // Chromebooks that don't provide all keys.
+ { "key": "shift+alt+down", "command": "cursorColumnSelectDown",
+ "when": "editorTextFocus" },
+ { "key": "shift+alt+left", "command": "cursorColumnSelectLeft",
+ "when": "editorTextFocus" },
+ { "key": "shift+alt+pagedown", "command": "cursorColumnSelectPageDown",
+ "when": "editorTextFocus" },
+ { "key": "shift+alt+pageup", "command": "cursorColumnSelectPageUp",
+ "when": "editorTextFocus" },
+ { "key": "shift+alt+right", "command": "cursorColumnSelectRight",
+ "when": "editorTextFocus" },
+ { "key": "shift+alt+up", "command": "cursorColumnSelectUp",
+ "when": "editorTextFocus" },
+ { "key": "alt+down", "command": "scrollPageDown",
+ "when": "editorTextFocus" },
+ { "key": "alt+up", "command": "scrollPageUp",
+ "when": "editorTextFocus" },
+ { "key": "alt+backspace", "command": "deleteRight",
+ "when": "editorTextFocus && !editorReadonly" },
+ { "key": "ctrl+right", "command": "cursorEnd",
+ "when": "editorTextFocus" },
+ { "key": "ctrl+shift+right", "command": "cursorEndSelect",
+ "when": "editorTextFocus" },
+ { "key": "ctrl+left", "command": "cursorHome",
+ "when": "editorTextFocus" },
+ { "key": "ctrl+shift+left", "command": "cursorHomeSelect",
+ "when": "editorTextFocus" },
+ ] \ No newline at end of file
diff --git a/chromium/tools/vscode/launch.json5 b/chromium/tools/vscode/launch.json5
new file mode 100644
index 00000000000..85915776988
--- /dev/null
+++ b/chromium/tools/vscode/launch.json5
@@ -0,0 +1,73 @@
+{
+ "version": "0.2.0",
+ "configurations": [
+ {
+ "name": "Chrome Debug",
+ "type": "cppdbg",
+ "request": "launch",
+ "targetArchitecture": "x64",
+ "program": "${workspaceRoot}/out/Debug/chrome",
+ "args": [], // Optional command line args
+ "preLaunchTask": "1-build_chrome_debug",
+ "stopAtEntry": false,
+ "cwd": "${workspaceRoot}/out/Debug/",
+ "environment": [],
+ "externalConsole": true
+ },
+ {
+ "name": "Chrome Release",
+ "type": "cppdbg",
+ "request": "launch",
+ "targetArchitecture": "x64",
+ "program": "${workspaceRoot}/out/Release/chrome",
+ "args": [], // Optional command line args
+ "preLaunchTask": "2-build_chrome_release",
+ "stopAtEntry": false,
+ "cwd": "${workspaceRoot}/out/Release/",
+ "environment": [],
+ "externalConsole": true
+ },
+ {
+ "name": "Custom Test Debug",
+ "type": "cppdbg",
+ "request": "launch",
+ "targetArchitecture": "x64",
+ "program": "${workspaceRoot}/out/Debug/unit_tests",
+ "args": ["--gtest_filter=*",
+ "--single_process",
+ "--ui-test-action-max-timeout=1000000",
+ "--test-launcher-timeout=1000000"],
+ "preLaunchTask": "5-build_test_debug",
+ "stopAtEntry": false,
+ "cwd": "${workspaceRoot}/out/Debug/",
+ "environment": [],
+ "externalConsole": true
+ },
+ {
+ "name": "Attach Debug",
+ "type": "cppdbg",
+ "request": "launch",
+ "targetArchitecture": "x64",
+ "program": "${workspaceRoot}/out/Debug/chrome",
+ "args": ["--remote-debugging-port=2224"],
+ "stopAtEntry": false,
+ "cwd": "${workspaceRoot}/out/Debug/",
+ "environment": [],
+ "externalConsole": false
+ },
+ {
+ // Must be running before launching: out/Debug/bin/chrome_public_apk gdb --ide
+ "name": "Attach Android",
+ "type": "cppdbg",
+ "request": "launch",
+ "targetArchitecture": "arm",
+ "program": "/tmp/adb-gdb-support-${env:USER}/app_process",
+ "miDebuggerPath": "/tmp/adb-gdb-support-${env:USER}/gdb",
+ "miDebuggerServerAddress": "ignored",
+ "cwd": "${workspaceRoot}",
+ "customLaunchSetupCommands": [{
+ "text": "-interpreter-exec console \"source -v /tmp/adb-gdb-support-${env:USER}/gdbinit\""
+ }],
+ "launchCompleteCommand": "None",
+ }]
+} \ No newline at end of file
diff --git a/chromium/tools/vscode/settings.json5 b/chromium/tools/vscode/settings.json5
new file mode 100644
index 00000000000..055f7faac5b
--- /dev/null
+++ b/chromium/tools/vscode/settings.json5
@@ -0,0 +1,71 @@
+{
+ // Suggested vscode default settings for simplifying initial setup. These
+ // settings are hoped to be convenient and helpful for those beginning to use
+ // vscode with Chrome. Please modify and change as necessary.
+ // All settings are optional, but some more "optional" settings are disabled
+ // by default. Feel free to enable them.
+
+ // Default tab size of 2, for consistency with internal codebase.
+ "editor.tabSize": 2,
+ // Do not figure out tab size from opening a file.
+ "editor.detectIndentation": false,
+ // Add a line at 80 characters.
+ "editor.rulers": [80],
+ // Trim tailing whitespace on save.
+ "files.trimTrailingWhitespace": true,
+
+ // Optional: Highlight current line at the left of the editor.
+ // "editor.renderLineHighlight": "gutter",
+ // Optional: Don't automatically add closing brackets. It gets in the way.
+ // "editor.autoClosingBrackets": false,
+ // Optional: Enable a tiny 30k feet view of your doc.
+ // "editor.minimap.enabled": true,
+ // "editor.minimap.maxColumn": 80,
+ // "editor.minimap.renderCharacters": false,
+ // Optional: Don't continuously fetch remote changes.
+ //"git.autofetch": false,
+ // Optional: Do not open files in 'preview' mode. Opening a new file in can
+ // replace an existing one in preview mode, which can be confusing.
+ //"workbench.editor.enablePreview": false,
+ // Optional: Same for files opened from quick open (Ctrl+P).
+ //"workbench.editor.enablePreviewFromQuickOpen": false,
+
+ "files.associations": {
+ // Adds xml syntax highlighting for grd files.
+ "*.grd" : "xml",
+ // Optional: .gn and .gni are not JavaScript, but at least it gives some
+ // approximate syntax highlighting. Ignore the linter warnings!
+ "*.gni" : "javascript",
+ "*.gn" : "javascript"
+ },
+
+ "files.exclude": {
+ // Ignore build output folders.
+ "out*/**": true
+ },
+
+ "files.watcherExclude": {
+ // Don't watch out*/ and third_party/ for changes to fix an issue
+ // where vscode doesn't notice that files have changed.
+ // https://github.com/Microsoft/vscode/issues/3998
+ // There is currently another issue that requires a leading **/ for
+ // watcherExlude. Beware that this pattern might affect other out* folders
+ // like src/cc/output/.
+ "**/out*/**": true,
+ "**/third_party/**": true
+ },
+
+ // Wider author column for annotator extension.
+ "annotator.annotationColumnWidth": "24em",
+
+ // C++ clang format settings.
+ "C_Cpp.clang_format_path": "${workspaceRoot}/third_party/depot_tools/clang-format",
+ "C_Cpp.clang_format_sortIncludes": true,
+ "C_Cpp.clang_format_formatOnSave": true,
+
+ // YouCompleteMe
+ "ycmd.path": "<full_path_to_your_home>/.ycmd", // Please replace this path
+ "ycmd.global_extra_config": "${workspaceRoot}/tools/vim/chromium.ycm_extra_conf.py",
+ "ycmd.confirm_extra_conf": false,
+}
+
diff --git a/chromium/tools/vscode/tasks.json5 b/chromium/tools/vscode/tasks.json5
new file mode 100644
index 00000000000..b90e8128799
--- /dev/null
+++ b/chromium/tools/vscode/tasks.json5
@@ -0,0 +1,141 @@
+{
+ "version": "0.1.0",
+ "runner": "terminal",
+ "showOutput": "always",
+ "echoCommand": true,
+ "tasks": [
+ {
+ "taskName": "1-build_chrome_debug",
+ "command": "ninja -C out/Debug -j 2000 chrome",
+ "isShellCommand": true,
+ "isTestCommand": true,
+ "problemMatcher": [
+ {
+ "owner": "cpp",
+ "fileLocation": ["relative", "${workspaceRoot}"],
+ "pattern": {
+ "regexp": "^../../(.*):(\\d+):(\\d+):\\s+(warning|\\w*\\s?error):\\s+(.*)$",
+ "file": 1, "line": 2, "column": 3, "severity": 4, "message": 5
+ }
+ },
+ {
+ "owner": "cpp",
+ "fileLocation": ["relative", "${workspaceRoot}"],
+ "pattern": {
+ "regexp": "^../../(.*?):(.*):\\s+(warning|\\w*\\s?error):\\s+(.*)$",
+ "file": 1, "severity": 3, "message": 4
+ }
+ }]
+ },
+ {
+ "taskName": "2-build_chrome_release",
+ "command": "ninja -C out/Release -j 2000 chrome",
+ "isShellCommand": true,
+ "isBuildCommand": true,
+ "problemMatcher": [
+ {
+ "owner": "cpp",
+ "fileLocation": ["relative", "${workspaceRoot}"],
+ "pattern": {
+ "regexp": "^../../(.*):(\\d+):(\\d+):\\s+(warning|\\w*\\s?error):\\s+(.*)$",
+ "file": 1, "line": 2, "column": 3, "severity": 4, "message": 5
+ }
+ },
+ {
+ "owner": "cpp",
+ "fileLocation": ["relative", "${workspaceRoot}"],
+ "pattern": {
+ "regexp": "^../../(.*?):(.*):\\s+(warning|\\w*\\s?error):\\s+(.*)$",
+ "file": 1, "severity": 3, "message": 4
+ }
+ }]
+ },
+ {
+ "taskName": "3-build_all_debug",
+ "command": "ninja -C out/Debug -j 2000",
+ "isShellCommand": true,
+ "problemMatcher": [
+ {
+ "owner": "cpp",
+ "fileLocation": ["relative", "${workspaceRoot}"],
+ "pattern": {
+ "regexp": "^../../(.*):(\\d+):(\\d+):\\s+(warning|\\w*\\s?error):\\s+(.*)$",
+ "file": 1, "line": 2, "column": 3, "severity": 4, "message": 5
+ }
+ },
+ {
+ "owner": "cpp",
+ "fileLocation": ["relative", "${workspaceRoot}"],
+ "pattern": {
+ "regexp": "^../../(.*?):(.*):\\s+(warning|\\w*\\s?error):\\s+(.*)$",
+ "file": 1, "severity": 3, "message": 4
+ }
+ }]
+ },
+ {
+ "taskName": "4-build_all_release",
+ "command": "ninja -C out/Release -j 2000",
+ "isShellCommand": true,
+ "problemMatcher": [
+ {
+ "owner": "cpp",
+ "fileLocation": ["relative", "${workspaceRoot}"],
+ "pattern": {
+ "regexp": "^../../(.*):(\\d+):(\\d+):\\s+(warning|\\w*\\s?error):\\s+(.*)$",
+ "file": 1, "line": 2, "column": 3, "severity": 4, "message": 5
+ }
+ },
+ {
+ "owner": "cpp",
+ "fileLocation": ["relative", "${workspaceRoot}"],
+ "pattern": {
+ "regexp": "^../../(.*?):(.*):\\s+(warning|\\w*\\s?error):\\s+(.*)$",
+ "file": 1, "severity": 3, "message": 4
+ }
+ }]
+ },
+ {
+ "taskName": "5-build_test_debug",
+ "command": "ninja -C out/Debug -j 2000 unit_tests components_unittests browser_tests",
+ "isShellCommand": true,
+ "problemMatcher": [
+ {
+ "owner": "cpp",
+ "fileLocation": ["relative", "${workspaceRoot}"],
+ "pattern": {
+ "regexp": "^../../(.*):(\\d+):(\\d+):\\s+(warning|\\w*\\s?error):\\s+(.*)$",
+ "file": 1, "line": 2, "column": 3, "severity": 4, "message": 5
+ }
+ },
+ {
+ "owner": "cpp",
+ "fileLocation": ["relative", "${workspaceRoot}"],
+ "pattern": {
+ "regexp": "^../../(.*?):(.*):\\s+(warning|\\w*\\s?error):\\s+(.*)$",
+ "file": 1, "severity": 3, "message": 4
+ }
+ }]
+ },
+ {
+ "taskName": "6-build_current_file",
+ "command": "compile_single_file --build-dir=out/Debug --file-path=${file}",
+ "isShellCommand": true,
+ "problemMatcher": [
+ {
+ "owner": "cpp",
+ "fileLocation": ["relative", "${workspaceRoot}"],
+ "pattern": {
+ "regexp": "^../../(.*):(\\d+):(\\d+):\\s+(warning|\\w*\\s?error):\\s+(.*)$",
+ "file": 1, "line": 2, "column": 3, "severity": 4, "message": 5
+ }
+ },
+ {
+ "owner": "cpp",
+ "fileLocation": ["relative", "${workspaceRoot}"],
+ "pattern": {
+ "regexp": "^../../(.*?):(.*):\\s+(warning|\\w*\\s?error):\\s+(.*)$",
+ "file": 1, "severity": 3, "message": 4
+ }
+ }]
+ }]
+} \ No newline at end of file
diff --git a/chromium/tools/web_dev_style/OWNERS b/chromium/tools/web_dev_style/OWNERS
index 7dc2b5348d3..ca467ff7f2e 100644
--- a/chromium/tools/web_dev_style/OWNERS
+++ b/chromium/tools/web_dev_style/OWNERS
@@ -1 +1,2 @@
+dbeam@chromium.org
dpapad@chromium.org
diff --git a/chromium/tools/win/DebugVisualizers/webkit.natvis b/chromium/tools/win/DebugVisualizers/webkit.natvis
index 6001763bca0..6b1f023550d 100644
--- a/chromium/tools/win/DebugVisualizers/webkit.natvis
+++ b/chromium/tools/win/DebugVisualizers/webkit.natvis
@@ -25,16 +25,16 @@
</Type>
<Type Name="WTF::StringImpl">
<DisplayString IncludeView="bare"
- Condition="is8_bit_">{(this+1),[length_]sb}</DisplayString>
+ Condition="is_8bit_">{(this+1),[length_]sb}</DisplayString>
<DisplayString
- Condition="is8_bit_">[{length_}] {(this+1),[length_]s}</DisplayString>
+ Condition="is_8bit_">[{length_}] {(this+1),[length_]s}</DisplayString>
<DisplayString IncludeView="bare">{(this+1),[length_]sub}</DisplayString>
<DisplayString>[{length_}] {(this+1),[length_]su}</DisplayString>
<Expand>
<Item Name="Length">length_</Item>
<Item Name="Hash">hash_</Item>
- <Item Name="AsciiText" Condition="is8_bit_">(this+1),[length_]s</Item>
- <Item Name="UnicodeText" Condition="!is8_bit_">(wchar_t*)(this+1),[length_]su</Item>
+ <Item Name="AsciiText" Condition="is_8bit_">(char*)(this+1),[length_]s</Item>
+ <Item Name="UnicodeText" Condition="!is_8bit_">(wchar_t*)(this+1),[length_]su</Item>
</Expand>
</Type>
<Type Name="WTF::AtomicString">
@@ -197,11 +197,11 @@
</LinkedListItems>
</Expand>
</Type>
- <Type Name="blink::LineBoxList">
+ <Type Name="blink::InlineBoxList&lt;blink::InlineFlowBox&gt;">
<Expand>
<LinkedListItems>
- <HeadPointer>first_line_box_</HeadPointer>
- <NextPointer>next_line_box_</NextPointer>
+ <HeadPointer>first_</HeadPointer>
+ <NextPointer>(blink::InlineFlowBox*)next_</NextPointer>
<ValueNode>this</ValueNode>
</LinkedListItems>
</Expand>
@@ -210,14 +210,8 @@
<DisplayString>{layout_object_}</DisplayString>
</Type>
<!-- Layout: LayoutNG -->
- <Type Name="blink::NGBlockNode">
- <DisplayString>{*box_}</DisplayString>
- </Type>
- <Type Name="blink::NGInlineNode">
- <DisplayString>{*box_}</DisplayString>
- <Expand>
- <Item Name="inline_node_data">*((blink::LayoutNGBlockFlow*)box_)->ng_inline_node_data_</Item>
- </Expand>
+ <Type Name="blink::NGLayoutInputNode">
+ <DisplayString>{(NGLayoutInputNode::NGLayoutInputNodeType)type_} {box_}</DisplayString>
</Type>
<Type Name="blink::NGInlineItem">
<DisplayString>{(NGInlineItem::NGInlineItemType)type_} {start_offset_}-{end_offset_} {*layout_object_}</DisplayString>
@@ -225,8 +219,26 @@
<Type Name="blink::NGFragment">
<DisplayString>{physical_fragment_}</DisplayString>
</Type>
+ <Type Name="blink::NGPaintFragment">
+ <DisplayString>{*physical_fragment_.ptr_}</DisplayString>
+ <Expand>
+ <Synthetic Name="Children">
+ <DisplayString>{first_child_.ptr_}</DisplayString>
+ <Expand>
+ <LinkedListItems>
+ <HeadPointer>first_child_.ptr_</HeadPointer>
+ <NextPointer>next_sibling_.ptr_</NextPointer>
+ <ValueNode>this</ValueNode>
+ </LinkedListItems>
+ </Expand>
+ </Synthetic>
+ </Expand>
+ </Type>
<Type Name="blink::NGPhysicalFragment">
- <DisplayString>{(blink::NGPhysicalFragment::NGFragmentType)type_} {layout_object_} {size_} {offset_}</DisplayString>
+ <DisplayString>{(blink::NGPhysicalFragment::NGFragmentType)type_} {size_} {*layout_object_}</DisplayString>
+ <Expand>
+ <Item Name="children_" Condition="type_ == 0 || type_ == 2">((blink::NGPhysicalContainerFragment*)this)->children_</Item>
+ </Expand>
</Type>
<Type Name="blink::NGLogicalOffset">
<DisplayString>({inline_offset}, {block_offset})</DisplayString>
@@ -242,7 +254,7 @@
</Type>
<!-- Layout: TextRun -->
<Type Name="blink::TextRun">
- <DisplayString Condition="is8_bit_">{data_.characters8,[len_]s}</DisplayString>
+ <DisplayString Condition="is_8bit_">{data_.characters8,[len_]s}</DisplayString>
<DisplayString>{(data_.characters16),[len_]su}</DisplayString>
</Type>
<Type Name="blink::BidiRun">
@@ -274,6 +286,6 @@
<DisplayString>{platform_data_}</DisplayString>
</Type>
<Type Name="blink::FontPlatformData">
- <DisplayString>{*typeface_.fPtr}, {text_size_}px</DisplayString>
+ <DisplayString>{*typeface_.ptr_}, {text_size_}px</DisplayString>
</Type>
-</AutoVisualizer> \ No newline at end of file
+</AutoVisualizer>