diff --git a/tools/OWNERS b/tools/OWNERS
index dbddac9..a9d15b7 100644
--- a/tools/OWNERS
+++ b/tools/OWNERS
@@ -28,6 +28,8 @@
 
 per-file ipc_messages_log.py=yfriedman@chromium.org
 
+per-file mojo_messages_log.py=awillia@chromium.org
+
 per-file roll_webgl_conformance.py=bajones@chromium.org
 per-file roll_webgl_conformance.py=kbr@chromium.org
 per-file roll_webgl_conformance.py=zmo@chromium.org
diff --git a/tools/android/BUILD.gn b/tools/android/BUILD.gn
index bc8a00d1..2e5d39d 100644
--- a/tools/android/BUILD.gn
+++ b/tools/android/BUILD.gn
@@ -3,7 +3,6 @@
 # found in the LICENSE file.
 
 import("//base/allocator/partition_allocator/partition_alloc.gni")
-import("//build/config/sanitizers/sanitizers.gni")
 
 # Intermediate target grouping the android tools needed to run native
 # unittests and instrumentation test apks.
@@ -19,9 +18,6 @@
     "//tools/perf:run_benchmark_wrapper",
     "//tools/perf/clear_system_cache",
   ]
-  if (is_asan) {
-    deps += [ "//tools/android/asan/third_party:asan_device_setup" ]
-  }
   if (use_full_mte) {
     deps += [ "//tools/android/mte:mte_device_setup" ]
   }
diff --git a/tools/android/asan/third_party/BUILD.gn b/tools/android/asan/third_party/BUILD.gn
deleted file mode 100644
index f3d96603..0000000
--- a/tools/android/asan/third_party/BUILD.gn
+++ /dev/null
@@ -1,54 +0,0 @@
-# Copyright 2019 The Chromium Authors
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import("//build/config/android/config.gni")
-import("//build/config/clang/clang.gni")
-import("//build/util/generate_wrapper.gni")
-
-generate_wrapper("asan_device_setup") {
-  testonly = true
-  executable = "with_asan.py"
-  wrapper_script = "$root_out_dir/bin/run_with_asan"
-
-  _lib_archs = []
-
-  if (target_cpu == "arm" || target_cpu == "arm64") {
-    _lib_archs += [
-      "arm",
-      "aarch64",
-    ]
-  } else if (target_cpu == "x86") {
-    _lib_archs += [ "i686" ]
-  } else {
-    assert(false, "No ASAN library available for $target_cpu")
-  }
-
-  _adb_path = "${public_android_sdk_root}/platform-tools/adb"
-  _lib_dir = "${clang_base_path}/lib/clang/${clang_version}/lib/linux"
-  _lib_paths = []
-  foreach(_lib_arch, _lib_archs) {
-    _lib_paths += [ "${_lib_dir}/libclang_rt.asan-${_lib_arch}-android.so" ]
-  }
-  data = [
-    "asan_device_setup.sh",
-    "with_asan.py",
-    _adb_path,
-  ]
-  data += _lib_paths
-
-  data_deps = [
-    "//build/android:devil_chromium_py",
-    "//third_party/catapult/devil",
-  ]
-
-  _rebased_adb_path = rebase_path(_adb_path, root_build_dir)
-  _rebased_lib_dir_path = rebase_path(_lib_dir, root_build_dir)
-
-  executable_args = [
-    "--adb",
-    "@WrappedPath(${_rebased_adb_path})",
-    "--lib",
-    "@WrappedPath(${_rebased_lib_dir_path})",
-  ]
-}
diff --git a/tools/android/asan/third_party/README.chromium b/tools/android/asan/third_party/README.chromium
deleted file mode 100644
index 7bcd2fce..0000000
--- a/tools/android/asan/third_party/README.chromium
+++ /dev/null
@@ -1,8 +0,0 @@
-Name: asan_device_setup.sh
-License: Apache 2.0
-Version: fbb9132e71a2
-URL: https://reviews.llvm.org/source/llvm-github/browse/main/compiler-rt/lib/asan/scripts/asan_device_setup
-Security Critical: no
-Shipped: no
-
-asan_device_setup.sh is a verbatim copy of asan_device_setup in the LLVM trunk.
diff --git a/tools/android/asan/third_party/asan_device_setup.sh b/tools/android/asan/third_party/asan_device_setup.sh
deleted file mode 100755
index 95f9d35f..0000000
--- a/tools/android/asan/third_party/asan_device_setup.sh
+++ /dev/null
@@ -1,466 +0,0 @@
-#!/bin/bash
-#===- lib/asan/scripts/asan_device_setup -----------------------------------===#
-#
-# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-# See https://llvm.org/LICENSE.txt for license information.
-# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-#
-# Prepare Android device to run ASan applications.
-#
-#===------------------------------------------------------------------------===#
-
-set -e
-
-HERE="$(cd "$(dirname "$0")" && pwd)"
-
-revert=no
-extra_options=
-device=
-lib=
-use_su=0
-
-function usage {
-    echo "usage: $0 [--revert] [--device device-id] [--lib path] [--extra-options options]"
-    echo "  --revert: Uninstall ASan from the device."
-    echo "  --lib: Path to ASan runtime library."
-    echo "  --extra-options: Extra ASAN_OPTIONS."
-    echo "  --device: Install to the given device. Use 'adb devices' to find"
-    echo "            device-id."
-    echo "  --use-su: Use 'su -c' prefix for every adb command instead of using"
-    echo "            'adb root' once."
-    echo
-    exit 1
-}
-
-function adb_push {
-  if [ $use_su -eq 0 ]; then
-    $ADB push "$1" "$2"
-  else
-    local FILENAME=$(basename $1)
-    $ADB push "$1" "/data/local/tmp/$FILENAME"
-    $ADB shell su -c "rm \\\"$2/$FILENAME\\\"" >&/dev/null
-    $ADB shell su -c "cat \\\"/data/local/tmp/$FILENAME\\\" > \\\"$2/$FILENAME\\\""
-    $ADB shell su -c "rm \\\"/data/local/tmp/$FILENAME\\\""
-  fi
-}
-
-function adb_remount {
-  if [ $use_su -eq 0 ]; then
-    $ADB remount
-  else
-    local STORAGE=`$ADB shell mount | grep /system | cut -d ' ' -f1`
-    if [ "$STORAGE" != "" ]; then
-      echo Remounting $STORAGE at /system
-      $ADB shell su -c "mount -o rw,remount $STORAGE /system"
-    else
-      echo Failed to get storage device name for "/system" mount point
-    fi
-  fi
-}
-
-function adb_shell {
-  if [ $use_su -eq 0 ]; then
-    $ADB shell $@
-  else
-    $ADB shell su -c "$*"
-  fi
-}
-
-function adb_root {
-  if [ $use_su -eq 0 ]; then
-    $ADB root
-  fi
-}
-
-function adb_wait_for_device {
-  $ADB wait-for-device
-}
-
-function adb_pull {
-  if [ $use_su -eq 0 ]; then
-    $ADB pull "$1" "$2"
-  else
-    local FILENAME=$(basename $1)
-    $ADB shell rm "/data/local/tmp/$FILENAME" >&/dev/null
-    $ADB shell su -c "[ -f \\\"$1\\\" ] && cat \\\"$1\\\" > \\\"/data/local/tmp/$FILENAME\\\" && chown root.shell \\\"/data/local/tmp/$FILENAME\\\" && chmod 755 \\\"/data/local/tmp/$FILENAME\\\"" &&
-    $ADB pull "/data/local/tmp/$FILENAME" "$2" >&/dev/null && $ADB shell "rm \"/data/local/tmp/$FILENAME\""
-  fi
-}
-
-function get_device_arch { # OUT OUT64
-    local _outvar=$1
-    local _outvar64=$2
-    local _ABI=$(adb_shell getprop ro.product.cpu.abi)
-    local _ARCH=
-    local _ARCH64=
-    if [[ $_ABI == x86* ]]; then
-        _ARCH=i686
-    elif [[ $_ABI == armeabi* ]]; then
-        _ARCH=arm
-    elif [[ $_ABI == arm64-v8a* ]]; then
-        _ARCH=arm
-        _ARCH64=aarch64
-    else
-        echo "Unrecognized device ABI: $_ABI"
-        exit 1
-    fi
-    eval $_outvar=\$_ARCH
-    eval $_outvar64=\$_ARCH64
-}
-
-while [[ $# > 0 ]]; do
-  case $1 in
-    --revert)
-      revert=yes
-      ;;
-    --extra-options)
-      shift
-      if [[ $# == 0 ]]; then
-        echo "--extra-options requires an argument."
-        exit 1
-      fi
-      extra_options="$1"
-      ;;
-    --lib)
-      shift
-      if [[ $# == 0 ]]; then
-        echo "--lib requires an argument."
-        exit 1
-      fi
-      lib="$1"
-      ;;
-    --device)
-      shift
-      if [[ $# == 0 ]]; then
-        echo "--device requires an argument."
-        exit 1
-      fi
-      device="$1"
-      ;;
-    --use-su)
-      use_su=1
-      ;;
-    *)
-      usage
-      ;;
-  esac
-  shift
-done
-
-ADB=${ADB:-adb}
-if [[ x$device != x ]]; then
-    ADB="$ADB -s $device"
-fi
-
-if [ $use_su -eq 1 ]; then
-  # Test if 'su' is present on the device
-  SU_TEST_OUT=`$ADB shell su -c "echo foo" 2>&1 | sed 's/\r$//'`
-  if [ $? != 0 -o "$SU_TEST_OUT" != "foo" ]; then
-    echo "ERROR: Cannot use 'su -c':"
-    echo "$ adb shell su -c \"echo foo\""
-    echo $SU_TEST_OUT
-    echo "Check that 'su' binary is correctly installed on the device or omit"
-    echo "            --use-su flag"
-    exit 1
-  fi
-fi
-
-echo '>> Remounting /system rw'
-adb_wait_for_device
-adb_root
-adb_wait_for_device
-adb_remount
-adb_wait_for_device
-
-get_device_arch ARCH ARCH64
-echo "Target architecture: $ARCH"
-ASAN_RT="libclang_rt.asan-$ARCH-android.so"
-if [[ -n $ARCH64 ]]; then
-  echo "Target architecture: $ARCH64"
-  ASAN_RT64="libclang_rt.asan-$ARCH64-android.so"
-fi
-
-RELEASE=$(adb_shell getprop ro.build.version.release)
-PRE_L=0
-if echo "$RELEASE" | grep '^4\.' >&/dev/null; then
-    PRE_L=1
-fi
-ANDROID_O=0
-if echo "$RELEASE" | grep '^8\.0\.' >&/dev/null; then
-    # 8.0.x is for Android O
-    ANDROID_O=1
-fi
-
-if [[ x$revert == xyes ]]; then
-    echo '>> Uninstalling ASan'
-
-    if ! adb_shell ls -l /system/bin/app_process | grep -o '\->.*app_process' >&/dev/null; then
-      echo '>> Pre-L device detected.'
-      adb_shell mv /system/bin/app_process.real /system/bin/app_process
-      adb_shell rm /system/bin/asanwrapper
-    elif ! adb_shell ls -l /system/bin/app_process64.real | grep -o 'No such file or directory' >&/dev/null; then
-      # 64-bit installation.
-      adb_shell mv /system/bin/app_process32.real /system/bin/app_process32
-      adb_shell mv /system/bin/app_process64.real /system/bin/app_process64
-      adb_shell rm /system/bin/asanwrapper
-      adb_shell rm /system/bin/asanwrapper64
-    else
-      # 32-bit installation.
-      adb_shell rm /system/bin/app_process.wrap
-      adb_shell rm /system/bin/asanwrapper
-      adb_shell rm /system/bin/app_process
-      adb_shell ln -s /system/bin/app_process32 /system/bin/app_process
-    fi
-
-    if [[ ANDROID_O -eq 1 ]]; then
-      adb_shell mv /system/etc/ld.config.txt.saved /system/etc/ld.config.txt
-    fi
-
-    echo '>> Restarting shell'
-    adb_shell stop
-    adb_shell start
-
-    # Remove the library on the last step to give a chance to the 'su' binary to
-    # be executed without problem.
-    adb_shell rm /system/lib/$ASAN_RT
-
-    echo '>> Done'
-    exit 0
-fi
-
-if [[ -d "$lib" ]]; then
-    ASAN_RT_PATH="$lib"
-elif [[ -f "$lib" && "$lib" == *"$ASAN_RT" ]]; then
-    ASAN_RT_PATH=$(dirname "$lib")
-elif [[ -f "$HERE/$ASAN_RT" ]]; then
-    ASAN_RT_PATH="$HERE"
-elif [[ $(basename "$HERE") == "bin" ]]; then
-    # We could be in the toolchain's base directory.
-    # Consider ../lib, ../lib/asan, ../lib/linux,
-    # ../lib/clang/$VERSION/lib/linux, and ../lib64/clang/$VERSION/lib/linux.
-    P=$(ls "$HERE"/../lib/"$ASAN_RT" \
-           "$HERE"/../lib/asan/"$ASAN_RT" \
-           "$HERE"/../lib/linux/"$ASAN_RT" \
-           "$HERE"/../lib/clang/*/lib/linux/"$ASAN_RT" \
-           "$HERE"/../lib64/clang/*/lib/linux/"$ASAN_RT" 2>/dev/null | sort | tail -1)
-    if [[ -n "$P" ]]; then
-        ASAN_RT_PATH="$(dirname "$P")"
-    fi
-fi
-
-if [[ -z "$ASAN_RT_PATH" || ! -f "$ASAN_RT_PATH/$ASAN_RT" ]]; then
-    echo ">> ASan runtime library not found"
-    exit 1
-fi
-
-if [[ -n "$ASAN_RT64" ]]; then
-  if [[ -z "$ASAN_RT_PATH" || ! -f "$ASAN_RT_PATH/$ASAN_RT64" ]]; then
-    echo ">> ASan runtime library not found"
-    exit 1
-  fi
-fi
-
-TMPDIRBASE=$(mktemp -d)
-TMPDIROLD="$TMPDIRBASE/old"
-TMPDIR="$TMPDIRBASE/new"
-mkdir "$TMPDIROLD"
-
-if ! adb_shell ls -l /system/bin/app_process | grep -o '\->.*app_process' >&/dev/null; then
-
-    if adb_pull /system/bin/app_process.real /dev/null >&/dev/null; then
-        echo '>> Old-style ASan installation detected. Reverting.'
-        adb_shell mv /system/bin/app_process.real /system/bin/app_process
-    fi
-
-    echo '>> Pre-L device detected. Setting up app_process symlink.'
-    adb_shell mv /system/bin/app_process /system/bin/app_process32
-    adb_shell ln -s /system/bin/app_process32 /system/bin/app_process
-fi
-
-echo '>> Copying files from the device'
-if [[ -n "$ASAN_RT64" ]]; then
-  adb_pull /system/lib/"$ASAN_RT" "$TMPDIROLD" || true
-  adb_pull /system/lib64/"$ASAN_RT64" "$TMPDIROLD" || true
-  adb_pull /system/bin/app_process32 "$TMPDIROLD" || true
-  adb_pull /system/bin/app_process32.real "$TMPDIROLD" || true
-  adb_pull /system/bin/app_process64 "$TMPDIROLD" || true
-  adb_pull /system/bin/app_process64.real "$TMPDIROLD" || true
-  adb_pull /system/bin/asanwrapper "$TMPDIROLD" || true
-  adb_pull /system/bin/asanwrapper64 "$TMPDIROLD" || true
-else
-  adb_pull /system/lib/"$ASAN_RT" "$TMPDIROLD" || true
-  adb_pull /system/bin/app_process32 "$TMPDIROLD" || true
-  adb_pull /system/bin/app_process.wrap "$TMPDIROLD" || true
-  adb_pull /system/bin/asanwrapper "$TMPDIROLD" || true
-fi
-cp -r "$TMPDIROLD" "$TMPDIR"
-
-if [[ -f "$TMPDIR/app_process.wrap" || -f "$TMPDIR/app_process64.real" ]]; then
-    echo ">> Previous installation detected"
-else
-    echo ">> New installation"
-fi
-
-echo '>> Generating wrappers'
-
-cp "$ASAN_RT_PATH/$ASAN_RT" "$TMPDIR/"
-if [[ -n "$ASAN_RT64" ]]; then
-  cp "$ASAN_RT_PATH/$ASAN_RT64" "$TMPDIR/"
-fi
-
-ASAN_OPTIONS=start_deactivated=1
-
-# The name of a symlink to libclang_rt.asan-$ARCH-android.so used in LD_PRELOAD.
-# The idea is to have the same name in lib and lib64 to keep it from falling
-# apart when a 64-bit process spawns a 32-bit one, inheriting the environment.
-ASAN_RT_SYMLINK=symlink-to-libclang_rt.asan
-
-function generate_zygote_wrapper { # from, to
-  local _from=$1
-  local _to=$2
-  if [[ PRE_L -eq 0 ]]; then
-    # LD_PRELOAD parsing is broken in N if it starts with ":". Luckily, it is
-    # unset in the system environment since L.
-    local _ld_preload=$ASAN_RT_SYMLINK
-  else
-    local _ld_preload=\$LD_PRELOAD:$ASAN_RT_SYMLINK
-  fi
-  cat <<EOF >"$TMPDIR/$_from"
-#!/system/bin/sh-from-zygote
-ASAN_OPTIONS=$ASAN_OPTIONS \\
-ASAN_ACTIVATION_OPTIONS=include_if_exists=/data/local/tmp/asan.options.%b \\
-LD_PRELOAD=$_ld_preload \\
-exec $_to "\$@"
-
-EOF
-}
-
-# On Android-L not allowing user segv handler breaks some applications.
-# Since ~May 2017 this is the default setting; included for compatibility with
-# older library versions.
-if [[ PRE_L -eq 0 ]]; then
-    ASAN_OPTIONS="$ASAN_OPTIONS,allow_user_segv_handler=1"
-fi
-
-if [[ x$extra_options != x ]] ; then
-    ASAN_OPTIONS="$ASAN_OPTIONS,$extra_options"
-fi
-
-# Zygote wrapper.
-if [[ -f "$TMPDIR/app_process64" ]]; then
-  # A 64-bit device.
-  if [[ ! -f "$TMPDIR/app_process64.real" ]]; then
-    # New installation.
-    mv "$TMPDIR/app_process32" "$TMPDIR/app_process32.real"
-    mv "$TMPDIR/app_process64" "$TMPDIR/app_process64.real"
-  fi
-  generate_zygote_wrapper "app_process32" "/system/bin/app_process32.real"
-  generate_zygote_wrapper "app_process64" "/system/bin/app_process64.real"
-else
-  # A 32-bit device.
-  generate_zygote_wrapper "app_process.wrap" "/system/bin/app_process32"
-fi
-
-# General command-line tool wrapper (use for anything that's not started as
-# zygote).
-cat <<EOF >"$TMPDIR/asanwrapper"
-#!/system/bin/sh
-LD_PRELOAD=$ASAN_RT_SYMLINK \\
-exec \$@
-
-EOF
-
-if [[ -n "$ASAN_RT64" ]]; then
-  cat <<EOF >"$TMPDIR/asanwrapper64"
-#!/system/bin/sh
-LD_PRELOAD=$ASAN_RT_SYMLINK \\
-exec \$@
-
-EOF
-fi
-
-function install { # from, to, chmod, chcon
-  local _from=$1
-  local _to=$2
-  local _mode=$3
-  local _context=$4
-  local _basename="$(basename "$_from")"
-  echo "Installing $_to/$_basename $_mode $_context"
-  adb_push "$_from" "$_to/$_basename"
-  adb_shell chown root.shell "$_to/$_basename"
-  if [[ -n "$_mode" ]]; then
-    adb_shell chmod "$_mode" "$_to/$_basename"
-  fi
-  if [[ -n "$_context" ]]; then
-    adb_shell chcon "$_context" "$_to/$_basename"
-  fi
-}
-
-if ! ( cd "$TMPDIRBASE" && diff -qr old/ new/ ) ; then
-    # Make SELinux happy by keeping app_process wrapper and the shell
-    # it runs on in zygote domain.
-    ENFORCING=0
-    if adb_shell getenforce | grep Enforcing >/dev/null; then
-        # Sometimes shell is not allowed to change file contexts.
-        # Temporarily switch to permissive.
-        ENFORCING=1
-        adb_shell setenforce 0
-    fi
-
-    if [[ PRE_L -eq 1 ]]; then
-        CTX=u:object_r:system_file:s0
-    else
-        CTX=u:object_r:zygote_exec:s0
-    fi
-
-    echo '>> Pushing files to the device'
-
-    if [[ -n "$ASAN_RT64" ]]; then
-      install "$TMPDIR/$ASAN_RT" /system/lib 644
-      install "$TMPDIR/$ASAN_RT64" /system/lib64 644
-      install "$TMPDIR/app_process32" /system/bin 755 $CTX
-      install "$TMPDIR/app_process32.real" /system/bin 755 $CTX
-      install "$TMPDIR/app_process64" /system/bin 755 $CTX
-      install "$TMPDIR/app_process64.real" /system/bin 755 $CTX
-      install "$TMPDIR/asanwrapper" /system/bin 755
-      install "$TMPDIR/asanwrapper64" /system/bin 755
-
-      adb_shell rm -f /system/lib/$ASAN_RT_SYMLINK
-      adb_shell ln -s $ASAN_RT /system/lib/$ASAN_RT_SYMLINK
-      adb_shell rm -f /system/lib64/$ASAN_RT_SYMLINK
-      adb_shell ln -s $ASAN_RT64 /system/lib64/$ASAN_RT_SYMLINK
-    else
-      install "$TMPDIR/$ASAN_RT" /system/lib 644
-      install "$TMPDIR/app_process32" /system/bin 755 $CTX
-      install "$TMPDIR/app_process.wrap" /system/bin 755 $CTX
-      install "$TMPDIR/asanwrapper" /system/bin 755 $CTX
-
-      adb_shell rm -f /system/lib/$ASAN_RT_SYMLINK
-      adb_shell ln -s $ASAN_RT /system/lib/$ASAN_RT_SYMLINK
-
-      adb_shell rm /system/bin/app_process
-      adb_shell ln -s /system/bin/app_process.wrap /system/bin/app_process
-    fi
-
-    adb_shell cp /system/bin/sh /system/bin/sh-from-zygote
-    adb_shell chcon $CTX /system/bin/sh-from-zygote
-
-    if [[ ANDROID_O -eq 1 ]]; then
-      # For Android O, the linker namespace is temporarily disabled.
-      adb_shell mv /system/etc/ld.config.txt /system/etc/ld.config.txt.saved
-    fi
-
-    if [ $ENFORCING == 1 ]; then
-        adb_shell setenforce 1
-    fi
-
-    echo '>> Restarting shell (asynchronous)'
-    adb_shell stop
-    adb_shell start
-
-    echo '>> Please wait until the device restarts'
-else
-    echo '>> Device is up to date'
-fi
-
-rm -r "$TMPDIRBASE"
diff --git a/tools/android/asan/third_party/with_asan.py b/tools/android/asan/third_party/with_asan.py
deleted file mode 100755
index 481993e..0000000
--- a/tools/android/asan/third_party/with_asan.py
+++ /dev/null
@@ -1,127 +0,0 @@
-#!/usr/bin/env vpython3
-# Copyright 2019 The Chromium Authors
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-
-import argparse
-import contextlib
-import logging
-import os
-import subprocess
-import sys
-
-_SRC_ROOT = os.path.abspath(
-    os.path.join(os.path.dirname(__file__), '..', '..', '..', '..'))
-
-sys.path.append(os.path.join(_SRC_ROOT, 'third_party', 'catapult', 'devil'))
-from devil import base_error
-from devil.android import device_utils
-from devil.android.sdk import adb_wrapper
-from devil.android.sdk import version_codes
-from devil.utils import logging_common
-
-sys.path.append(os.path.join(_SRC_ROOT, 'build', 'android'))
-import devil_chromium
-
-_SCRIPT_PATH = os.path.abspath(
-    os.path.join(
-        os.path.dirname(__file__),
-        'asan_device_setup.sh'))
-
-
-@contextlib.contextmanager
-def _LogDevicesOnFailure(msg):
-  try:
-    yield
-  except base_error.BaseError:
-    logging.exception(msg)
-    logging.error('Devices visible to adb:')
-    for entry in adb_wrapper.AdbWrapper.Devices(desired_state=None,
-                                                long_list=True):
-      logging.error('  %s: %s',
-                    entry[0].GetDeviceSerial(),
-                    ' '.join(entry[1:]))
-    raise
-
-
-@contextlib.contextmanager
-def Asan(args):
-  env = os.environ.copy()
-  env['ADB'] = args.adb
-
-  try:
-    with _LogDevicesOnFailure('Failed to set up the device.'):
-      device = device_utils.DeviceUtils.HealthyDevices(
-          device_arg=args.device)[0]
-      disable_verity = device.build_version_sdk >= version_codes.MARSHMALLOW
-      if disable_verity:
-        device.EnableRoot()
-        # TODO(crbug.com/790202): Stop logging output after diagnosing
-        # issues on android-asan.
-        verity_output = device.adb.DisableVerity()
-        if verity_output:
-          logging.info('disable-verity output:')
-          for line in verity_output.splitlines():
-            logging.info('  %s', line)
-        device.Reboot()
-      # Call EnableRoot prior to asan_device_setup.sh to ensure it doesn't
-      # get tripped up by the root timeout.
-      device.EnableRoot()
-      setup_cmd = [_SCRIPT_PATH, '--lib', args.lib]
-      if args.device:
-        setup_cmd += ['--device', args.device]
-      subprocess.check_call(setup_cmd, env=env)
-      yield
-  finally:
-    with _LogDevicesOnFailure('Failed to tear down the device.'):
-      device.EnableRoot()
-      teardown_cmd = [_SCRIPT_PATH, '--revert']
-      if args.device:
-        teardown_cmd += ['--device', args.device]
-      subprocess.check_call(teardown_cmd, env=env)
-      if disable_verity:
-        # TODO(crbug.com/790202): Stop logging output after diagnosing
-        # issues on android-asan.
-        verity_output = device.adb.EnableVerity()
-        if verity_output:
-          logging.info('enable-verity output:')
-          for line in verity_output.splitlines():
-            logging.info('  %s', line)
-        device.Reboot()
-
-
-def main(raw_args):
-  parser = argparse.ArgumentParser()
-  logging_common.AddLoggingArguments(parser)
-  parser.add_argument(
-      '--adb', type=os.path.realpath, required=True,
-      help='Path to adb binary.')
-  parser.add_argument(
-      '--device',
-      help='Device serial.')
-  parser.add_argument(
-      '--lib', type=os.path.realpath, required=True,
-      help='Path to asan library.')
-  parser.add_argument(
-      'command', nargs='*',
-      help='Command to run with ASAN installed.')
-  args = parser.parse_args()
-
-  # TODO(crbug.com/790202): Remove this after diagnosing issues
-  # with android-asan.
-  if not args.quiet:
-    args.verbose += 1
-
-  logging_common.InitializeLogging(args)
-  devil_chromium.Initialize(adb_path=args.adb)
-
-  with Asan(args):
-    if args.command:
-      return subprocess.call(args.command)
-
-  return 0
-
-
-if __name__ == '__main__':
-  sys.exit(main(sys.argv[1:]))
diff --git a/tools/android/avd/proto/android_v_google_apis_x64.textpb b/tools/android/avd/proto/android_v_google_apis_x64.textpb
new file mode 100644
index 0000000..ca3982c
--- /dev/null
+++ b/tools/android/avd/proto/android_v_google_apis_x64.textpb
@@ -0,0 +1,27 @@
+# Copyright 2024 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# Configuration for an Android V Developer Preview AVD on google_apis on x86_64
+
+emulator_package {
+  package_name: "chromium/third_party/android_sdk/public/emulator"
+  version: "8go0I9U8zwjGFhFFulM3U9vc2dCFmS9m_v7AsPlKFmEC"  # 34.2.13
+  dest_path: "android_v_google_apis_x64"
+}
+
+system_image_package {
+  package_name: "chromium/third_party/android_sdk/public/system-images/android-vanillaicecream/google_apis/x86_64"
+  version: "pYnbszrCPFbN1j_Dv23ipSu1A326FJ89qXO9z2-F_MEC"  # AP31.240322.020
+  dest_path: "android_v_google_apis_x64"
+}
+system_image_name: "system-images;android-VanillaIceCream;google_apis;x86_64"
+
+avd_package {
+  package_name: "chromium/third_party/android_sdk/public/avds/android-vanillaicecream/google_apis/x86_64"
+  # Created in https://ci.chromium.org/ui/b/8749020851740167729
+  # Patched gmscore version 24.08.12 in https://crrev.com/c/5398140
+  version: "kJUtJcTEZM4lFm4Mo-MJvi5a4w9xyWabmO-5TLZvra0C"
+  dest_path: "android_v_google_apis_x64"
+}
+avd_name: "android_v_google_apis_x64"
\ No newline at end of file
diff --git a/tools/android/avd/proto/creation/android_v_google_apis_x64.textpb b/tools/android/avd/proto/creation/android_v_google_apis_x64.textpb
new file mode 100644
index 0000000..074435e
--- /dev/null
+++ b/tools/android/avd/proto/creation/android_v_google_apis_x64.textpb
@@ -0,0 +1,43 @@
+# Copyright 2024 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# Configuration for an Android V Developer Preview AVD on google_apis on x86_64
+
+emulator_package {
+  package_name: "chromium/third_party/android_sdk/public/emulator"
+  version: "8go0I9U8zwjGFhFFulM3U9vc2dCFmS9m_v7AsPlKFmEC"  # 34.2.13
+  dest_path: "android_v_google_apis_x64"
+}
+
+system_image_package {
+  package_name: "chromium/third_party/android_sdk/public/system-images/android-vanillaicecream/google_apis/x86_64"
+  version: "pYnbszrCPFbN1j_Dv23ipSu1A326FJ89qXO9z2-F_MEC"  # AP31.240322.020
+  dest_path: "android_v_google_apis_x64"
+}
+system_image_name: "system-images;android-VanillaIceCream;google_apis;x86_64"
+
+avd_package {
+  package_name: "chromium/third_party/android_sdk/public/avds/android-vanillaicecream/google_apis/x86_64"
+  dest_path: "android_v_google_apis_x64"
+}
+avd_name: "android_v_google_apis_x64"
+
+avd_settings {
+  screen {
+    density: 480
+    height: 1920
+    width: 1080
+  }
+  advanced_features {
+    key: "GLESDynamicVersion"
+    value: "on"
+  }
+}
+
+min_sdk: 34
+additional_apk {
+  package_name: "chrome_internal/third_party/google3/apks/gmscore/x86_64"
+  version: "RFEsa3y2OHTC3iSBQRyQZpX3xRiik-cLbZmXvMX80UEC" # 24.08.12 (190800-608507424)
+  dest_path: "android_v_google_apis_x64/gmscore_apks"
+}
\ No newline at end of file
diff --git a/tools/android/common/adb_connection.cc b/tools/android/common/adb_connection.cc
index 9ae0822..2a063a2 100644
--- a/tools/android/common/adb_connection.cc
+++ b/tools/android/common/adb_connection.cc
@@ -58,7 +58,7 @@
 
   int host_socket = socket(AF_INET, SOCK_STREAM, 0);
   if (host_socket < 0) {
-    LOG(ERROR) << "Failed to create adb socket: " << strerror(errno);
+    PLOG(ERROR) << "Failed to create adb socket";
     return -1;
   }
 
@@ -72,7 +72,7 @@
   addr.sin_port = htons(kAdbPort);
   if (HANDLE_EINTR(connect(host_socket, reinterpret_cast<sockaddr*>(&addr),
                            sizeof(addr))) < 0) {
-    LOG(ERROR) << "Failed to connect adb socket: " << strerror(errno);
+    PLOG(ERROR) << "Failed to connect adb socket";
     CloseSocket(host_socket);
     return -1;
   }
@@ -83,7 +83,7 @@
     int ret = HANDLE_EINTR(send(host_socket, request + bytes_sent,
                                 bytes_remaining, 0));
     if (ret < 0) {
-      LOG(ERROR) << "Failed to send request: " << strerror(errno);
+      PLOG(ERROR) << "Failed to send request";
       CloseSocket(host_socket);
       return -1;
     }
diff --git a/tools/android/dependency_analysis/class_dependency.py b/tools/android/dependency_analysis/class_dependency.py
index d82bc10..1550923 100644
--- a/tools/android/dependency_analysis/class_dependency.py
+++ b/tools/android/dependency_analysis/class_dependency.py
@@ -78,7 +78,7 @@
     @property
     def build_targets(self) -> Set[str]:
         """Which build target(s) contain the class."""
-        # TODO(crbug.com/1124836): Make this return a List, sorted by
+        # TODO(crbug.com/40147556): Make this return a List, sorted by
         # importance.
         return self._build_targets
 
diff --git a/tools/android/dependency_analysis/print_class_dependencies.py b/tools/android/dependency_analysis/print_class_dependencies.py
index 5cbb66cf..e5133ba 100755
--- a/tools/android/dependency_analysis/print_class_dependencies.py
+++ b/tools/android/dependency_analysis/print_class_dependencies.py
@@ -147,7 +147,7 @@
 
     print_backlog: List[Tuple[int, str]] = []
 
-    # TODO(crbug.com/1124836): This is not quite correct because
+    # TODO(crbug.com/40147556): This is not quite correct because
     # sets considered equal can be converted to different strings. Fix this by
     # making JavaClass.build_targets return a List instead of a Set.
     suspect_dependencies = 0
diff --git a/tools/android/elf_compression/compression.py b/tools/android/elf_compression/compression.py
index 633fba6..0278d5f 100644
--- a/tools/android/elf_compression/compression.py
+++ b/tools/android/elf_compression/compression.py
@@ -12,5 +12,5 @@
 def CompressData(data):
   # For the prototyping purposes the compression function is simplified to make
   # debugging easier.
-  # TODO(https://crbug.com/998082): write a compression function.
+  # TODO(crbug.com/41478372): write a compression function.
   return data
diff --git a/tools/android/elf_compression/decompression_hook/decompression_hook.c b/tools/android/elf_compression/decompression_hook/decompression_hook.c
index 5c72674a..66d6076 100644
--- a/tools/android/elf_compression/decompression_hook/decompression_hook.c
+++ b/tools/android/elf_compression/decompression_hook/decompression_hook.c
@@ -40,7 +40,7 @@
 // beginning of the decompression hook to ensure that the arrays are not
 // optimized away.
 //
-// TODO(https://crbug.com/998082): Check if dl_iterate_phdr can replace the
+// TODO(crbug.com/41478372): Check if dl_iterate_phdr can replace the
 // magic bytes approach.
 unsigned char g_dummy_cut_range_begin[8] = {0x2e, 0x2a, 0xee, 0xf6,
                                             0x45, 0x03, 0xd2, 0x50};
@@ -56,7 +56,7 @@
                            void* page_start,
                            size_t page_size,
                            void* buffer) {
-  // TODO(https://crbug.com/998082): Update the method to work with arbitrary
+  // TODO(crbug.com/41478372): Update the method to work with arbitrary
   // block sizes.
 
   // This method is a stub to plug the decompression login into.
@@ -143,7 +143,7 @@
   struct pollfd poll_fd = {.fd = args->uffd, .events = POLLIN};
   PollArrayPush(poll_array, poll_fd);
 
-  // TODO(https://crbug.com/998082): Use epoll instead
+  // TODO(crbug.com/41478372): Use epoll instead
   while (poll_array->size &&
          poll(poll_array->pollfd_array, poll_array->size, -1) >= 0) {
     for (int i = 0; i < poll_array->size; i++) {
diff --git a/tools/android/errorprone_plugin/src/org/chromium/tools/errorprone/plugin/NoResourcesGetColor.java b/tools/android/errorprone_plugin/src/org/chromium/tools/errorprone/plugin/NoResourcesGetColor.java
index 1dae3fae..6563f2b 100644
--- a/tools/android/errorprone_plugin/src/org/chromium/tools/errorprone/plugin/NoResourcesGetColor.java
+++ b/tools/android/errorprone_plugin/src/org/chromium/tools/errorprone/plugin/NoResourcesGetColor.java
@@ -39,7 +39,7 @@
                     .named(METHOD_NAME)
                     .withParameters(int.class.getName());
 
-    // TODO(https://crbug.com/1302803): Remove this in a separate change to minimize revert size.
+    // TODO(crbug.com/40825542): Remove this in a separate change to minimize revert size.
     public static boolean sEnabled = true;
 
     @Override
diff --git a/tools/android/forwarder2/command.cc b/tools/android/forwarder2/command.cc
index d6db57f..c5e1955 100644
--- a/tools/android/forwarder2/command.cc
+++ b/tools/android/forwarder2/command.cc
@@ -59,12 +59,13 @@
   int bytes_read = socket->ReadNumBytesWithTimeout(
       command_buffer, kCommandStringSize, timeout_secs);
   if (bytes_read != kCommandStringSize) {
-    if (bytes_read < 0)
-      LOG(ERROR) << "Read() error: " << base::safe_strerror(errno);
-    else if (!bytes_read)
+    if (bytes_read < 0) {
+      PLOG(ERROR) << "Read() error";
+    } else if (!bytes_read) {
       LOG(ERROR) << "Read() error, endpoint was unexpectedly closed.";
-    else
+    } else {
       LOG(ERROR) << "Read() error, not enough data received from the socket.";
+    }
     return false;
   }
 
diff --git a/tools/android/forwarder2/common.cc b/tools/android/forwarder2/common.cc
index de030e64..4c00be9 100644
--- a/tools/android/forwarder2/common.cc
+++ b/tools/android/forwarder2/common.cc
@@ -14,7 +14,7 @@
 namespace forwarder2 {
 
 void PError(const char* msg) {
-  LOG(ERROR) << msg << ": " << base::safe_strerror(errno);
+  PLOG(ERROR) << msg;
 }
 
 void CloseFD(int fd) {
diff --git a/tools/android/python_utils/PRESUBMIT.py b/tools/android/python_utils/PRESUBMIT.py
index 2cf847e..a3e7473 100644
--- a/tools/android/python_utils/PRESUBMIT.py
+++ b/tools/android/python_utils/PRESUBMIT.py
@@ -17,11 +17,16 @@
     if input_api.is_windows:
         return []
     """Presubmit checks to run on upload and on commit of a CL."""
+    files_to_skip = []
+    # Skip git tests if running on non-git workspace.
+    if input_api.change.scm != 'git':
+        files_to_skip.append('.+git_metadata_utils_unittest\.py$')
+
     checks = input_api.canned_checks.GetUnitTestsRecursively(
         input_api,
         output_api,
         input_api.PresubmitLocalPath(),
         files_to_check=[r'.+_unittest\.py$'],
-        files_to_skip=[])
+        files_to_skip=files_to_skip)
 
     return input_api.RunTests(checks, False)
diff --git a/tools/android/python_utils/git_metadata_utils.py b/tools/android/python_utils/git_metadata_utils.py
index cc3643c..c7b1849 100644
--- a/tools/android/python_utils/git_metadata_utils.py
+++ b/tools/android/python_utils/git_metadata_utils.py
@@ -6,6 +6,7 @@
 
 import datetime as dt
 import functools
+import os
 import pathlib
 import sys
 from typing import Optional, Union
@@ -20,16 +21,20 @@
 
 @functools.lru_cache(maxsize=1)
 def get_chromium_src_path() -> pathlib.Path:
-    """Returns the root 'src' absolute path of this Chromium Git checkout.
+    """Returns the root 'src' absolute path of this Chromium checkout.
 
     Example Path: /home/username/git/chromium/src
 
     Returns:
-        The absolute path to the 'src' root directory of the Chromium Git
-        checkout containing this file.
+        The absolute path to the 'src' root directory of the Chromium checkout
+        containing this file.
     """
     _CHROMIUM_SRC_ROOT = pathlib.Path(__file__).resolve(strict=True).parents[3]
 
+    # .git directory does not exist on cog.
+    if os.getcwd().startswith('/google/cog/cloud'):
+        return _CHROMIUM_SRC_ROOT
+
     try:
         _assert_git_repository(_CHROMIUM_SRC_ROOT)
     except (ValueError, RuntimeError):
diff --git a/tools/binary_size/libsupersize/archive.py b/tools/binary_size/libsupersize/archive.py
index 1c715cd..4a39f59f 100644
--- a/tools/binary_size/libsupersize/archive.py
+++ b/tools/binary_size/libsupersize/archive.py
@@ -655,7 +655,7 @@
         basename)
 
   if not native_spec.map_path:
-    # TODO(crbug.com/1193507): Implement string literal tracking without map
+    # TODO(crbug.com/40757867): Implement string literal tracking without map
     #     files. nm emits some string literal symbols, but most are missing.
     native_spec.track_string_literals = False
     return native_spec
@@ -732,7 +732,7 @@
         cur_elf_path = elf_path
         elf_path = None
       elif tentative_output_dir:
-        # TODO(crbug.com/1337134): Remove handling the legacy library prefix
+        # TODO(crbug.com/40229168): Remove handling the legacy library prefix
         # 'crazy.' when there is no longer interest in size comparisons for
         # these pre-N APKs.
         cur_elf_path = os.path.join(
diff --git a/tools/binary_size/libsupersize/integration_test.py b/tools/binary_size/libsupersize/integration_test.py
index c90a7e7..7876fce 100755
--- a/tools/binary_size/libsupersize/integration_test.py
+++ b/tools/binary_size/libsupersize/integration_test.py
@@ -213,7 +213,7 @@
 
         native_spec = archive.NativeSpec()
 
-        # TODO(crbug.com/1193507): Remove when we implement string literal
+        # TODO(crbug.com/40757867): Remove when we implement string literal
         #     tracking without map files.
         if ignore_linker_map:
           native_spec.track_string_literals = False
diff --git a/tools/binary_size/libsupersize/viewer/caspian/wasmbuild.patch b/tools/binary_size/libsupersize/viewer/caspian/wasmbuild.patch
index 7900b81..26c1b72 100644
--- a/tools/binary_size/libsupersize/viewer/caspian/wasmbuild.patch
+++ b/tools/binary_size/libsupersize/viewer/caspian/wasmbuild.patch
@@ -42,7 +42,7 @@
    # time, so they need to be applied to all translation units, and we may end up
 @@ -766,7 +780,7 @@ config("compiler") {
  
-   # TODO(crbug.com/1374347): Cleanup undefined symbol errors caught by
+   # TODO(crbug.com/40242425): Cleanup undefined symbol errors caught by
    # --no-undefined-version.
 -  if (use_lld && !is_win && !is_mac && !is_ios) {
 +  if (use_lld && !is_win && !is_mac && !is_ios && !is_wasm) {
@@ -65,7 +65,7 @@
 -      if (!is_nacl) {
 +      if (!is_nacl && !is_wasm) {
          cflags += [
-           # TODO(crbug.com/1343975) Evaluate and possibly enable.
+           # TODO(crbug.com/40231599) Evaluate and possibly enable.
            "-Wno-deprecated-builtins",
 @@ -2380,6 +2394,9 @@ config("symbols") {
  
diff --git a/tools/binary_size/libsupersize/viewer/static/tree-worker-wasm.js b/tools/binary_size/libsupersize/viewer/static/tree-worker-wasm.js
index 9df35b79..bbb3a56d 100644
--- a/tools/binary_size/libsupersize/viewer/static/tree-worker-wasm.js
+++ b/tools/binary_size/libsupersize/viewer/static/tree-worker-wasm.js
@@ -314,8 +314,8 @@
     g_buildTreePromise = null;
     sendProgressMessage(0.9);
     const root = await wasmOpen('');
-    // TODO(crbug.com/1290946): Move diffMode to loadResults and do not store it
-    //     the viewer's query parameters.
+    // TODO(crbug.com/40818460): Move diffMode to loadResults and do not store
+    // it the viewer's query parameters.
     return {
       root,
       diffMode,
diff --git a/tools/binary_size/trybot_commit_size_checker.py b/tools/binary_size/trybot_commit_size_checker.py
index a4f0331..0e2449d 100755
--- a/tools/binary_size/trybot_commit_size_checker.py
+++ b/tools/binary_size/trybot_commit_size_checker.py
@@ -315,7 +315,7 @@
   return '{:+,}'.format(number)
 
 
-# TODO(https://crbug.com/1414410): If missing and file is x32y, return xy; else
+# TODO(crbug.com/40256106): If missing and file is x32y, return xy; else
 # return original filename. Basically allows comparing x_32 targets with x
 # targets built under 32bit target_cpu without failing the script due to
 # different file names. Remove once migration is complete.
diff --git a/tools/bisect/README.md b/tools/bisect/README.md
new file mode 100644
index 0000000..2fcf2322
--- /dev/null
+++ b/tools/bisect/README.md
@@ -0,0 +1,89 @@
+# Bisect tool
+
+bisect_builds.py is a script to use pre-built binaries to bisect Chrome and
+Chromium.
+
+bisect_gtests.py is a script to help bisect gtest failures.
+
+The following documents are all for bisect_builds.py.
+
+## Binary sources
+There are 3 binary sources:
+1.  Release build(-r)
+
+This is closest to the binary we release to users.
+  * Almost always able to repro production bugs.
+  * Bisect to a Chrome version. Blamelist contains ~12 hours of CLs.
+  * Binaries are stored forever. You can bisect range can be years old.
+  * Most platforms are supported.
+  * Google employees only.
+
+2.  Official build(-o)
+
+This is the Chrome build with is_branded_build=true.
+*  Highly likely able to repro production bugs.
+*  Bisect to a single commit.
+*  Binaries are stored ~1 month. So only recent regressions can use this.
+*  Most platforms are supported.
+*  Google employees only.
+
+3.  Snapshot
+
+The default option. This is public Chromium build.
+*  Lowest repro possibilities among the 3 sources.
+*  Bisect to a range of blamelists. Depends on the platform, roughly around 1
+   hour to 2 hours of CLs.
+*  Binaries are stored for ~1 year.
+*  Not all platforms are supported.
+*  External developers available.
+
+## Quick start
+For Chromium developers who can already build Chromium:
+
+`$ python3 tools/bisect/bisect_builds.py -b 126.0.6436.0
+ -g 126.0.6435.0 -a linux64`
+
+For everyone else:
+
+1.  follow
+[instructions](https://commondatastorage.googleapis.com/chrome-infra-docs/flat/depot_tools/docs/html/depot_tools_tutorial.html#_setting_up)
+to download depot_tools.
+
+Enter depot tools folder:
+
+`$ cd depot_tools`
+
+2.  For Googlers, you need to sign in gcloud to access internal buckets.
+
+`depot_tools$ python3 gsutil.py config'
+
+Add `sudo` if you hit permission issues.
+
+Proceed by following the instructions (you can pass in 0 for project id),
+use google.com account.
+
+3.  Use this commandline to download the script to the depot_tools folder.
+
+`depot_tools$ curl -s --basic -n
+"https://chromium.googlesource.com/
+chromium/src/+/main/tools/bisect/bisect_builds.py?format=TEXT" |
+ base64 -d > bisect_builds.py`
+
+4.  Start bisection
+
+`depot_tools$ python3 bisect_builds.py -b 126.0.6436.0
+ -g 126.0.6435.0 -a linux64`
+
+## Tips
+* For Googlers, you should use official build for most cases to get to a single
+commit. If official build doesn't work for you, please file a bug.
+
+* If a regression happens to both x64 and arm, using x64 would have a higher
+chance to bisect to a single commit for official build.
+
+## Modify the script
+Please don't add dependencies. There are people who need to only checkout the
+script file and do bisection.
+
+## Support
+For feature requests and bugs, please file a trooper bug.
diff --git a/tools/bisect/bisect_builds.py b/tools/bisect/bisect_builds.py
index bf56dcbb..8a24ce1 100755
--- a/tools/bisect/bisect_builds.py
+++ b/tools/bisect/bisect_builds.py
@@ -174,7 +174,7 @@
         },
     },
     'official': {
-        'arm': {
+        'android-arm': {
             'binary_name': None,
             'listing_platform_dir': 'Android Builder/',
             'archive_name': 'chrome-perf-arm.zip',
@@ -206,7 +206,8 @@
         },
         'lacros64': {
             'binary_name': 'chrome',
-            'listing_platform_dir': 'chromeos-amd64-generic-lacros-builder-perf/',
+            'listing_platform_dir':
+            'chromeos-amd64-generic-lacros-builder-perf/',
             'archive_name': 'chrome-perf-lacros64.zip',
             'archive_extract_dir': 'full-build-linux'
         },
@@ -218,7 +219,8 @@
         },
         'lacros-arm64': {
             'binary_name': 'chrome',
-            'listing_platform_dir': 'chromeos-arm64-generic-lacros-builder-perf/',
+            'listing_platform_dir':
+            'chromeos-arm64-generic-lacros-builder-perf/',
             'archive_name': 'chrome-perf-lacros-arm64.zip',
             'archive_extract_dir': 'full-build-linux'
         }
@@ -306,7 +308,7 @@
 
 # Old storage locations for per CL builds
 OFFICIAL_BACKUP_BUILDS = {
-    'arm': {
+    'android-arm': {
         'listing_platform_dir': ['Android Builder/'],
     },
     'linux64': {
@@ -331,9 +333,11 @@
 
 def RunGsutilCommand(args, can_fail=False, verbose=False):
   if is_verbose:
-    print('Running gsutil command: ' + str([sys.executable, GSUTILS_PATH] + args))
+    print('Running gsutil command: ' +
+          str([sys.executable, GSUTILS_PATH] + args))
   gsutil = subprocess.Popen([sys.executable, GSUTILS_PATH] + args,
-                            stdout=subprocess.PIPE, stderr=subprocess.PIPE,
+                            stdout=subprocess.PIPE,
+                            stderr=subprocess.PIPE,
                             env=None)
   stdout_b, stderr_b = gsutil.communicate()
   stdout = stdout_b.decode("utf-8")
@@ -353,7 +357,8 @@
     elif can_fail:
       return stderr
     else:
-      raise Exception('Error running the gsutil command:\n%s\n%s' % (args, stderr))
+      raise Exception('Error running the gsutil command:\n%s\n%s' %
+                      (args, stderr))
   return stdout
 
 
@@ -369,7 +374,6 @@
     self.is_release = options.release_builds
     self.is_official = options.official_builds
     self.is_asan = options.asan
-    self.flash_path = options.flash_path
     self.build_type = 'release'
     # Whether to cache and use the list of known revisions in a local file to
     # speed up the initialization of the script at the next run.
@@ -420,19 +424,19 @@
         bad_major = int(self.bad_revision.split('.')[0])
         # The new path definitely doesn't exist before M57
         if min(good_major, bad_major) < 58:
-          print ('Linux release archives changed location during the M58 cycle,\n'
-                 'and older builds are currently not supported by this script.\n'
-                 'If you really need to bisect pre-M58 builds, please contact\n'
-                 'prasadv@ or mmoss@ for assistance, otherwise please re-run\n'
-                 'with more recent revision values.')
+          print('Linux release archives changed location during M58, '
+                'and older builds are currently not supported by the script. '
+                'If you really need to bisect pre-M58 builds, please contact '
+                'trooper for assistance, otherwise please re-run '
+                'with more recent revision values.')
           sys.exit(1)
         if min(good_major, bad_major) < 59:
-          print ('-----------------------------------------------------------\n'
-                 'WARNING: Linux release archives changed location during the\n'
-                 'M58 cycle, so this bisect might be be missing some builds.\n'
-                 'If you really need to bisect against all M58 builds, please\n'
-                 'contact prasadv@ or mmoss@ for assistance.\n'
-                 '-----------------------------------------------------------')
+          print('-----------------------------------------------------------\n'
+                'WARNING: Linux release archives changed location during the '
+                'M58 cycle, so this bisect might be be missing some builds. '
+                'If you really need to bisect against all M58 builds, please '
+                'contact trooper for assistance.\n'
+                '-----------------------------------------------------------')
     elif self.is_official:
       test_type = 'official'
     else:
@@ -699,7 +703,7 @@
     else:
       return self._GetSVNRevisionFromGitHashFromGitCheckout(git_sha1, depot)
 
-  def GetRevList(self):
+  def GetRevList(self, archive):
     """Gets the list of revision numbers between self.good_revision and
     self.bad_revision."""
 
@@ -714,13 +718,13 @@
       if self.use_local_cache:
         try:
           with open(cache_filename) as cache_file:
-            for (key, value) in list(json.load(cache_file).items()):
+            for (key, value) in json.load(cache_file).items():
               cache[key] = value
             revisions = cache.get(cache_dict_key, [])
             githash_svn_dict = cache.get('githash_svn_dict', {})
             if revisions:
-              print('Loaded revisions %d-%d from %s' % (revisions[0],
-                  revisions[-1], cache_filename))
+              print('Loaded revisions %d-%d from %s' %
+                    (revisions[0], revisions[-1], cache_filename))
             return (revisions, githash_svn_dict)
         except (EnvironmentError, ValueError):
           pass
@@ -735,8 +739,8 @@
         try:
           with open(cache_filename, 'w') as cache_file:
             json.dump(cache, cache_file)
-          print('Saved revisions %d-%d to %s' % (
-              revlist_all[0], revlist_all[-1], cache_filename))
+          print('Saved revisions %d-%d to %s' %
+                (revlist_all[0], revlist_all[-1], cache_filename))
         except EnvironmentError:
           pass
 
@@ -750,13 +754,38 @@
       if self.is_official:
         revlist_all.extend(list(map(int, self.GetPerCLRevList())))
       else:
-        revlist_all.extend(list(map(int, self.ParseDirectoryIndex(last_known_rev))))
-      revlist_all = list(set(revlist_all))
+        revlist_all.extend(
+            list(map(int, self.ParseDirectoryIndex(last_known_rev))))
       revlist_all.sort()
       _SaveBucketToCache()
 
     revlist = [x for x in revlist_all if x >= int(minrev) and x <= int(maxrev)]
+    if len(revlist) < 2:  # Don't have enough builds to bisect.
+      last_known_rev = revlist_all[-1] if revlist_all else 0
+      first_known_rev = revlist_all[0] if revlist_all else 0
+      # Check for specifying a number before the available range.
+      if maxrev < first_known_rev:
+        msg = (
+            'First available bisect revision for %s is %d. Be sure to specify '
+            'revision numbers, not branch numbers.' %
+            (archive, first_known_rev))
+        raise (RuntimeError(msg))
 
+      # Check for specifying a number beyond the available range.
+      if maxrev > last_known_rev:
+        # Check for the special case of linux where bisect builds stopped at
+        # revision 382086, around March 2016.
+        if archive == 'linux':
+          msg = ('Last available bisect revision for %s is %d. Try linux64 '
+                 'instead.' % (archive, last_known_rev))
+        else:
+          msg = ('Last available bisect revision for %s is %d. Try a different '
+                 'good/bad range.' % (archive, last_known_rev))
+        raise (RuntimeError(msg))
+
+      # Otherwise give a generic message.
+      msg = 'We don\'t have enough builds to bisect. revlist: %s' % revlist
+      raise RuntimeError(msg)
     # Set good and bad revisions to be legit revisions.
     if revlist:
       if self.good_revision < self.bad_revision:
@@ -1018,7 +1047,7 @@
   context, revision, zip_file, profile, num_runs, command, args):
   """Given a zipped revision, unzip it and run the test."""
   print('Trying revision %s...' % str(revision))
-  if context.platform in ['arm', 'arm64']:
+  if context.platform in ['android-arm', 'android-arm64']:
     return RunRevisionForAndroid(context, revision, zip_file)
 
   if context.platform in ['lacros64', 'lacros-arm32', 'lacros-arm64']:
@@ -1077,15 +1106,8 @@
   # Run the build as many times as specified.
   testargs = ['--user-data-dir=%s' % profile] + args
   # The sandbox must be run as root on release Chrome, so bypass it.
-  if ((context.is_release or context.flash_path) and
-      context.platform.startswith('linux')):
+  if ((context.is_release) and context.platform.startswith('linux')):
     testargs.append('--no-sandbox')
-  if context.flash_path:
-    testargs.append('--ppapi-flash-path=%s' % context.flash_path)
-    # We have to pass a large enough Flash version, which currently needs not
-    # be correct. Instead of requiring the user of the script to figure out and
-    # pass the correct version we just spoof it.
-    testargs.append('--ppapi-flash-version=99.9.999.999')
 
   runcommand = []
   for token in shlex.split(command):
@@ -1099,23 +1121,28 @@
   results = []
   if is_verbose:
     print(('Running ' + str(runcommand)))
-  for _ in range(num_runs):
-    subproc = subprocess.Popen(runcommand,
-                               bufsize=-1,
-                               stdout=subprocess.PIPE,
-                               stderr=subprocess.PIPE)
-    (stdout, stderr) = subproc.communicate()
-    results.append((subproc.returncode, stdout, stderr))
-  os.chdir(cwd)
-  try:
-    shutil.rmtree(tempdir, True)
-  except Exception:
-    pass
 
-  for (returncode, stdout, stderr) in results:
-    if returncode:
-      return (returncode, stdout, stderr)
-  return results[0]
+  result = None
+  try:
+    for _ in range(num_runs):
+      use_shell = ('android' in context.platform
+                   or 'webview' in context.platform)
+      subproc = subprocess.Popen(runcommand,
+                                 shell=use_shell,
+                                 bufsize=-1,
+                                 stdout=subprocess.PIPE,
+                                 stderr=subprocess.PIPE)
+      (stdout, stderr) = subproc.communicate()
+      result = (subproc.returncode, stdout, stderr)
+      if subproc.returncode:
+        break
+    return result
+  finally:
+    os.chdir(cwd)
+    try:
+      shutil.rmtree(tempdir, True)
+    except Exception:
+      pass
 
 
 # The arguments release_builds, status, stdout and stderr are unused.
@@ -1241,7 +1268,8 @@
            try_args=(),
            profile='profile',
            evaluate=AskIsGoodBuild,
-           verify_range=False):
+           verify_range=False,
+           archive=None):
   """Runs a binary search on to determine the last known good revision.
 
     Args:
@@ -1281,26 +1309,9 @@
   if context.is_release:
     revlist = context.GetReleaseBuildsList()
   elif context.is_official:
-    revlist = context.GetRevList()
-
-    # https://crbug.com/837719, https://crbug.com/893686
-    # Whenever there is change in Perf builder names (responsible for producing
-    # chrome builds for functional bisects), the storage location for the
-    # builds changes. Due to this the script fails to find the build archives
-    # for older revisions in new location.
-    # OFFICIAL_BACKUP_BUILDS define all such old builds location per platform,
-    # and fallback to search in these folders if build archives are not found in
-    # new location.
-    if len(revlist) < 2:
-      print(('Couldn\'t find enough builds in %s folder, '
-             'checking in other directories...' % context._listing_platform_dir))
-      revlist = context.GetPerfCLRevListFromBackup()
-    build_range = abs(context.bad_revision - context.good_revision) + 1
-    build_percent = (float(len(revlist))* 100) / build_range
-    print(('Total of %d percent of perf builds available in the range'
-            % build_percent))
+    revlist = context.GetRevList(archive)
   else:
-    revlist = context.GetRevList()
+    revlist = context.GetRevList(archive)
 
   # Get a list of revisions to bisect across.
   if len(revlist) < 2:  # Don't have enough builds to bisect.
@@ -1340,6 +1351,7 @@
   fetch.WaitFor()
 
   # Binary search time!
+  prefetch_revisions = True
   while fetch and fetch.zip_file and maxrev - minrev > 1:
     if bad_rev < good_rev:
       min_str, max_str = 'bad', 'good'
@@ -1355,19 +1367,21 @@
     #     out to be good.
     down_pivot = int((pivot - minrev) / 2) + minrev
     down_fetch = None
-    if down_pivot != pivot and down_pivot != minrev:
-      down_rev = revlist[down_pivot]
-      down_fetch = DownloadJob(context, 'down_fetch', down_rev,
-                               _GetDownloadPath(down_rev))
-      down_fetch.Start()
+    if prefetch_revisions:
+      if down_pivot != pivot and down_pivot != minrev:
+        down_rev = revlist[down_pivot]
+        down_fetch = DownloadJob(context, 'down_fetch', down_rev,
+                                 _GetDownloadPath(down_rev))
+        down_fetch.Start()
 
     up_pivot = int((maxrev - pivot) / 2) + pivot
-    up_fetch = None
-    if up_pivot != pivot and up_pivot != maxrev:
-      up_rev = revlist[up_pivot]
-      up_fetch = DownloadJob(context, 'up_fetch', up_rev,
-                             _GetDownloadPath(up_rev))
-      up_fetch.Start()
+    if prefetch_revisions:
+      up_fetch = None
+      if up_pivot != pivot and up_pivot != maxrev:
+        up_rev = revlist[up_pivot]
+        up_fetch = DownloadJob(context, 'up_fetch', up_rev,
+                               _GetDownloadPath(up_rev))
+        up_fetch.Start()
 
     # Run test on the pivot revision.
     exit_status = None
@@ -1386,6 +1400,7 @@
     # other, as described in the comments above.
     try:
       answer = evaluate(rev, context.is_release, exit_status, stdout, stderr)
+      prefetch_revisions = True
       if ((answer == 'g' and good_rev < bad_rev)
           or (answer == 'b' and bad_rev < good_rev)):
         fetch.Stop()
@@ -1409,7 +1424,8 @@
           pivot = down_pivot
           fetch = down_fetch
       elif answer == 'r':
-        pass  # Retry requires no changes.
+        # Don't redundantly prefetch.
+        prefetch_revisions = False
       elif answer == 'u':
         # Nuke the revision from the revlist and choose a new pivot.
         fetch.Stop()
@@ -1606,7 +1622,7 @@
 
   # Catapult repo is required for Android bisect,
   # Update Catapult repo if it exists otherwise checkout repo.
-  if options.archive in ['arm', 'arm64']:
+  if options.archive in ['android-arm', 'android-arm64']:
     SetupAndroidEnvironment()
 
   # Set up verbose logging if requested.
@@ -1616,7 +1632,8 @@
 def SetupAndroidEnvironment():
   def SetupCatapult():
     print('Setting up Catapult in %s.' % CATAPULT_DIR)
-    print('Set the environment var CATAPULT_DIR to override Catapult directory.')
+    print('Set the environment var CATAPULT_DIR to override '
+          'Catapult directory.')
     if (os.path.exists(CATAPULT_DIR)):
       print('Updating Catapult...\n')
       process = subprocess.Popen(
@@ -1711,63 +1728,66 @@
 
   parser = optparse.OptionParser(usage=usage)
   # Strangely, the default help output doesn't include the choice list.
-  choices = ['arm', 'arm64', 'mac', 'mac64', 'mac-arm', 'win', 'win-clang',
-             'win64', 'win64-clang', 'linux64', 'linux-arm', 'chromeos',
-             'lacros64', 'lacros-arm32', 'lacros-arm64']
-  parser.add_option('-a', '--archive',
+  choices = [
+      'android-arm', 'android-arm64', 'mac', 'mac64', 'mac-arm', 'win',
+      'win-clang', 'win64', 'win64-clang', 'linux64', 'linux-arm', 'chromeos',
+      'lacros64', 'lacros-arm32', 'lacros-arm64'
+  ]
+  parser.add_option('-a',
+                    '--archive',
                     choices=choices,
                     help='The buildbot archive to bisect [%s].' %
-                         '|'.join(choices))
+                    '|'.join(choices))
   parser.add_option('-r',
                     action='store_true',
                     dest='release_builds',
                     help='Bisect across release Chrome builds (internal '
-                         'only) instead of Chromium archives.')
+                    'only) instead of Chromium archives.')
   parser.add_option('-o',
                     action='store_true',
                     dest='official_builds',
                     help='Bisect across continuous perf officialChrome builds '
-                         '(internal only) instead of Chromium archives. '
-                         'With this flag, you can provide either commit '
-                         'position numbers (for example, 397000) or '
-                         'version numbers (for example, 53.0.2754.0 '
-                         'as good and bad revisions.')
-  parser.add_option('-b', '--bad',
+                    '(internal only) instead of Chromium archives. '
+                    'With this flag, you can provide either commit '
+                    'position numbers (for example, 397000) or '
+                    'version numbers (for example, 53.0.2754.0 '
+                    'as good and bad revisions.')
+  parser.add_option('-b',
+                    '--bad',
                     type='str',
                     help='A bad revision to start bisection. '
-                         'May be earlier or later than the good revision. '
-                         'Default is HEAD.')
-  parser.add_option('-f', '--flash_path',
-                    type='str',
-                    help='Absolute path to a recent Adobe Pepper Flash '
-                         'binary to be used in this bisection (e.g. '
-                         'on Windows C:\...\pepflashplayer.dll and on Linux '
-                         '/opt/google/chrome/PepperFlash/'
-                         'libpepflashplayer.so).')
-  parser.add_option('-g', '--good',
+                    'May be earlier or later than the good revision. '
+                    'Default is HEAD.')
+  parser.add_option('-g',
+                    '--good',
                     type='str',
                     help='A good revision to start bisection. ' +
-                         'May be earlier or later than the bad revision. ' +
-                         'Default is 0.')
-  parser.add_option('-p', '--profile', '--user-data-dir',
+                    'May be earlier or later than the bad revision. ' +
+                    'Default is 0.')
+  parser.add_option('-p',
+                    '--profile',
+                    '--user-data-dir',
                     type='str',
                     default='profile',
                     help='Profile to use; this will not reset every run. '
-                         'Defaults to a clean profile.')
-  parser.add_option('-t', '--times',
+                    'Defaults to a clean profile.')
+  parser.add_option('-t',
+                    '--times',
                     type='int',
                     default=1,
                     help='Number of times to run each build before asking '
-                         'if it\'s good or bad. Temporary profiles are reused.')
-  parser.add_option('-c', '--command',
+                    'if it\'s good or bad. Temporary profiles are reused.')
+  parser.add_option('-c',
+                    '--command',
                     type='str',
                     default='%p %a',
                     help='Command to execute. %p and %a refer to Chrome '
-                         'executable and specified extra arguments '
-                         'respectively. Use %s to specify all extra arguments '
-                         'as one string. Defaults to "%p %a". Note that any '
-                         'extra paths specified should be absolute.')
-  parser.add_option('-l', '--blink',
+                    'executable and specified extra arguments '
+                    'respectively. Use %s to specify all extra arguments '
+                    'as one string. Defaults to "%p %a". Note that any '
+                    'extra paths specified should be absolute.')
+  parser.add_option('-l',
+                    '--blink',
                     action='store_true',
                     help='Use Blink bisect instead of Chromium. ')
   parser.add_option('-v', '--verbose',
@@ -1814,17 +1834,20 @@
 
 def ParseCommandLine(args=None):
   """Parses the command line for bisect options."""
-  official_choices = ['arm', 'arm64', 'linux64', 'mac', 'mac-arm', 'win64',
-                      'lacros64', 'lacros-arm32', 'lacros-arm64']
+  official_choices = [
+      'android-arm', 'android-arm64', 'linux64', 'mac', 'mac-arm', 'win64',
+      'lacros64', 'lacros-arm32', 'lacros-arm64'
+  ]
   parser = _CreateCommandLineParser()
   opts, args = parser.parse_args(args)
-
   if opts.archive is None:
     print('Error: Missing required parameter: --archive')
     parser.print_help()
     sys.exit(1)
 
-  if not opts.official_builds and opts.archive in ['arm', 'arm64']:
+  if not opts.official_builds and opts.archive in [
+      'android-arm', 'android-arm64'
+  ]:
     raise NotImplementedError(
         'Android bisect is currently supported only on Official builds.')
 
@@ -1840,8 +1863,8 @@
   if opts.asan:
     supported_platforms = ['linux', 'mac', 'win']
     if opts.archive not in supported_platforms:
-      print(('Error: ASAN bisecting only supported on these platforms: [%s].' % (
-            '|'.join(supported_platforms))))
+      print(('Error: ASAN bisecting only supported on these platforms: [%s].' %
+             ('|'.join(supported_platforms))))
       sys.exit(1)
     if opts.release_builds:
       raise NotImplementedError(
@@ -1853,20 +1876,22 @@
 def main():
   opts, args = ParseCommandLine()
 
+  if not opts.bad:
+    print('Please specify a bad version.')
+    return 1
+
+  if not opts.good:
+    print('Please specify a good version.')
+    return 1
+
   try:
     SetupEnvironment(opts)
   except BisectException as e:
     print(e)
     sys.exit(1)
 
-  if opts.official_builds:
-    # Automatically converts version number to commit position number
-    if IsVersionNumber(opts.good):
-      opts.good = GetRevisionFromVersion(opts.good)
-      opts.bad = GetRevisionFromVersion(opts.bad)
-
   device = None
-  if opts.archive in ['arm', 'arm64']:
+  if opts.archive in ['android-arm', 'android-arm64']:
     device = InitializeAndroidDevice(opts.device_id, opts.apk, args)
     if not device:
       raise BisectException('Failed to initialize device.')
@@ -1882,27 +1907,21 @@
   # Create the context. Initialize 0 for the revisions as they are set below.
   context = PathContext(opts, device)
 
-  context.deploy_chrome_path = deploy_chrome_path
-  # Pick a starting point, try to get HEAD for this.
-  if not opts.bad:
-    context.bad_revision = '999.0.0.0'
-    context.bad_revision = GetChromiumRevision(
-        context, context.GetLastChangeURL())
-
-  # Find out when we were good.
-  if not opts.good:
-    context.good_revision = '0.0.0.0' if opts.release_builds else 0
-
-  if opts.flash_path:
-    msg = 'Could not find Flash binary at %s' % opts.flash_path
-    assert os.path.exists(opts.flash_path), msg
-
-  if opts.release_builds:
-    context.good_revision = LooseVersion(context.good_revision)
-    context.bad_revision = LooseVersion(context.bad_revision)
+  if context.is_release:
+    if not IsVersionNumber(opts.good):
+      print('For release, you can only use chrome version to bisect.')
+      return 1
   else:
-    context.good_revision = int(context.good_revision)
-    context.bad_revision = int(context.bad_revision)
+    # For official and snapshot, we convert good and bad to commit position
+    # as int.
+    if IsVersionNumber(opts.good):
+      context.good_revision = GetRevisionFromVersion(opts.good)
+      context.bad_revision = GetRevisionFromVersion(opts.bad)
+    else:
+      context.good_revision = int(context.good_revision)
+      context.bad_revision = int(context.bad_revision)
+
+  context.deploy_chrome_path = deploy_chrome_path
 
   if opts.times < 1:
     print(('Number of times to run (%d) must be greater than or equal to 1.' %
@@ -1922,9 +1941,9 @@
   good_rev = context.good_revision
   bad_rev = context.bad_revision
 
-  (min_chromium_rev, max_chromium_rev, context) = Bisect(
-      context, opts.times, opts.command, args, opts.profile,
-      evaluator, opts.verify_range)
+  (min_chromium_rev, max_chromium_rev,
+   context) = Bisect(context, opts.times, opts.command, args, opts.profile,
+                     evaluator, opts.verify_range, opts.archive)
 
   # Get corresponding blink revisions.
   try:
diff --git a/tools/bisect/bisect_builds_unittest.py b/tools/bisect/bisect_builds_unittest.py
new file mode 100755
index 0000000..8333591
--- /dev/null
+++ b/tools/bisect/bisect_builds_unittest.py
@@ -0,0 +1,99 @@
+#!/usr/bin/env python3
+# Copyright 2024 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import unittest
+import subprocess
+import sys
+import optparse
+
+bisect_builds = __import__('bisect_builds')
+
+
+class FakeProcess:
+  called_num_times = 0
+
+  def __init__(self, returncode):
+    self.returncode = returncode
+    FakeProcess.called_num_times += 1
+
+  def communicate(self):
+    return ('', '')
+
+
+class BisectTest(unittest.TestCase):
+
+  patched = []
+  max_rev = 10000
+  fake_process_return_code = 0
+
+  def monkey_patch(self, obj, name, new):
+    self.patched.append((obj, name, getattr(obj, name)))
+    setattr(obj, name, new)
+
+  def clear_patching(self):
+    for obj, name, old in self.patched:
+      setattr(obj, name, old)
+    self.patched = []
+
+  def setUp(self):
+    FakeProcess.called_num_times = 0
+    self.fake_process_return_code = 0
+    self.monkey_patch(bisect_builds.DownloadJob, 'Start', lambda *args: None)
+    self.monkey_patch(bisect_builds.DownloadJob, 'Stop', lambda *args: None)
+    self.monkey_patch(bisect_builds.DownloadJob, 'WaitFor', lambda *args: None)
+    self.monkey_patch(bisect_builds, 'UnzipFilenameToDir', lambda *args: None)
+    self.monkey_patch(
+        subprocess, 'Popen',
+        lambda *args, **kwargs: FakeProcess(self.fake_process_return_code))
+    self.monkey_patch(bisect_builds.PathContext, 'ParseDirectoryIndex',
+                      lambda *args: range(self.max_rev))
+
+  def tearDown(self):
+    self.clear_patching()
+
+  def bisect(self, good_rev, bad_rev, evaluate, num_runs=1):
+    base_url = bisect_builds.CHROMIUM_BASE_URL
+    archive = 'linux'
+    asan = False
+    use_local_cache = False
+    options = optparse.Values
+    options.good = good_rev
+    options.bad = bad_rev
+    options.archive = 'linux64'
+    options.release_builds = False
+    options.official_builds = False
+    options.asan = False
+    options.use_local_cache = False
+    options.blink = False
+    options.apk = None
+    options.times = num_runs
+    context = bisect_builds.PathContext(options)
+    (minrev, maxrev, _) = bisect_builds.Bisect(context=context,
+                                               evaluate=evaluate,
+                                               num_runs=num_runs,
+                                               profile=None,
+                                               try_args=[])
+    return (minrev, maxrev)
+
+  def testBisectConsistentAnswer(self):
+    self.assertEqual(self.bisect(1000, 100, lambda *args: 'g'), (100, 101))
+    self.assertEqual(self.bisect(100, 1000, lambda *args: 'b'), (100, 101))
+    self.assertEqual(self.bisect(2000, 200, lambda *args: 'b'), (1999, 2000))
+    self.assertEqual(self.bisect(200, 2000, lambda *args: 'g'), (1999, 2000))
+
+  def testBisectMultipleRunsEarlyReturn(self):
+    self.fake_process_return_code = 1
+    self.assertEqual(self.bisect(1, 3, lambda *args: 'b', num_runs=10), (1, 2))
+    self.assertEqual(FakeProcess.called_num_times, 1)
+
+  @unittest.skipIf(sys.platform == 'win32', 'Test fails on Windows due to '
+                   'https://crbug.com/1393138')
+  def testBisectAllRunsWhenAllSucceed(self):
+    self.assertEqual(self.bisect(1, 3, lambda *args: 'b', num_runs=10), (1, 2))
+    self.assertEqual(FakeProcess.called_num_times, 10)
+
+
+if __name__ == '__main__':
+  unittest.main()
diff --git a/tools/bisect/bisect.py b/tools/bisect/bisect_gtests.py
similarity index 100%
rename from tools/bisect/bisect.py
rename to tools/bisect/bisect_gtests.py
diff --git a/tools/cast3p/runtime.version b/tools/cast3p/runtime.version
index bd4f4a80..2619928 100644
--- a/tools/cast3p/runtime.version
+++ b/tools/cast3p/runtime.version
@@ -1 +1 @@
-412122
+413682
diff --git a/tools/cfi/ignores.txt b/tools/cfi/ignores.txt
index 0296b4c..2e753e1 100644
--- a/tools/cfi/ignores.txt
+++ b/tools/cfi/ignores.txt
@@ -1,5 +1,5 @@
 #!special-case-list-v1
-# TODO(https://crbug.com/1515966): update to glob patterns
+# TODO(crbug.com/41488956): update to glob patterns
 
 # This file defines which warnings should be ignored while running clang's
 # control flow integrity sanitizer, as run by the cfi_flags build target.
diff --git a/tools/chromeos/gen_deps.sh b/tools/chromeos/gen_deps.sh
index 1e5147e..9304785 100755
--- a/tools/chromeos/gen_deps.sh
+++ b/tools/chromeos/gen_deps.sh
@@ -65,10 +65,10 @@
 fi
 
 # Directories whose files should be listed separately.
-readonly NO_DIR=("chrome" "chrome/browser" "chrome/browser/extensions"
-                 "chrome/browser/ui" "chrome/browser/ui/views"
-                 "chrome/browser/ui/webui" "chrome/browser/web_applications"
-                 "chrome/common")
+readonly NO_DIR=("chrome" "chrome/browser" "chrome/browser/ash"
+                 "chrome/browser/extensions" "chrome/browser/ui"
+                 "chrome/browser/ui/views" "chrome/browser/ui/webui"
+                 "chrome/browser/web_applications" "chrome/common")
 
 # Check above directories exist.
 for d in ${NO_DIR[@]}; do
@@ -114,4 +114,3 @@
 for i in "${sorted[@]}"; do
   echo "  \"+$i\","
 done
-
diff --git a/tools/clang/iterator_checker/IteratorChecker.cpp b/tools/clang/iterator_checker/IteratorChecker.cpp
index d240febb..3917902 100644
--- a/tools/clang/iterator_checker/IteratorChecker.cpp
+++ b/tools/clang/iterator_checker/IteratorChecker.cpp
@@ -41,7 +41,7 @@
 // GCC-style attributes and pragmas that can help make using the Clang Static
 // Analyzer useful. We aim to provide support for those annotations. For now, we
 // hard code those for "known" interesting classes.
-// TODO(https://crbug.com/1455371) Support source-level annotations.
+// TODO(crbug.com/40272746) Support source-level annotations.
 enum Annotation : uint8_t {
   kNone = 0,
 
@@ -54,7 +54,7 @@
   kReturnEndIterator = 1 << 1,
 
   // Annotate function returning a pair of iterators.
-  // TODO(https://crbug.com/1455371) Not yet implemented.
+  // TODO(crbug.com/40272746) Not yet implemented.
   kReturnIteratorPair = 1 << 2,
 
   // Annotate function invalidating the iterator in its arguments.
@@ -72,7 +72,7 @@
     {"std::next", Annotation::kReturnIterator},
     {"std::prev", Annotation::kReturnIterator},
     {"std::find", Annotation::kReturnIterator},
-    // TODO(https://crbug.com/1455371) Add additional functions.
+    // TODO(crbug.com/40272746) Add additional functions.
 };
 
 static llvm::DenseMap<llvm::StringRef, llvm::DenseMap<llvm::StringRef, uint8_t>>
@@ -134,7 +134,7 @@
                  Annotation::kInvalidateArgs | Annotation::kReturnIterator},
                 {"extract", Annotation::kInvalidateArgs},
                 {"find", Annotation::kReturnIterator},
-                // TODO(https://crbug.com/1455371) Add additional functions.
+                // TODO(crbug.com/40272746) Add additional functions.
             },
         },
         {
@@ -159,7 +159,7 @@
                 // `pop_back` invalidates only the iterator pointed to the last
                 // element, but we have no way to track it.
                 {"pop_back", Annotation::kNone},
-                // TODO(https://crbug.com/1455371) Add additional functions.
+                // TODO(crbug.com/40272746) Add additional functions.
             },
         },
         {
@@ -183,7 +183,7 @@
                 {"emplace_back", Annotation::kInvalidateAll},
                 {"push_front", Annotation::kInvalidateAll},
                 {"emplace_front", Annotation::kInvalidateAll},
-                // TODO(https://crbug.com/1455371) Add additional functions.
+                // TODO(crbug.com/40272746) Add additional functions.
             },
         },
 };
@@ -367,7 +367,7 @@
       return;
     }
 
-    //  TODO(https://crbug.com/1455371): Add support for operator[]
+    //  TODO(crbug.com/40272746): Add support for operator[]
     //  (ArraySubscriptExpr)
   }
 
@@ -502,7 +502,7 @@
     if (annotation & Annotation::kInvalidateArgs) {
       bool found_iterator = false;
 
-      // TODO(https://crbug.com/1455371): Invalid every arguments.
+      // TODO(crbug.com/40272746): Invalid every arguments.
       for (unsigned i = 0; i < callexpr.getNumArgs(); i++) {
         if (auto* iterator = UnwrapAsIterator(callexpr.getArg(i), env)) {
           InfoStream() << "INVALIDATING ONE: " << DebugString(env, *iterator)
@@ -538,7 +538,7 @@
     }
 
     if (annotation & Annotation::kReturnIteratorPair) {
-      //  TODO(https://crbug.com/1455371): Iterator pair are not yet supported.
+      //  TODO(crbug.com/40272746): Iterator pair are not yet supported.
     }
   }
 
@@ -672,7 +672,7 @@
 
       return;
     }
-    // TODO(https://crbug.com/1455371) Handle other kinds of operators.
+    // TODO(crbug.com/40272746) Handle other kinds of operators.
   }
 
   // CastExpr: https://clang.llvm.org/doxygen/classclang_1_1CastExpr.html
diff --git a/tools/clang/plugins/RawPtrHelpers.cpp b/tools/clang/plugins/RawPtrHelpers.cpp
index ba12533..deeba17 100644
--- a/tools/clang/plugins/RawPtrHelpers.cpp
+++ b/tools/clang/plugins/RawPtrHelpers.cpp
@@ -184,7 +184,7 @@
 
 clang::ast_matchers::internal::Matcher<clang::Decl> AffectedRawPtrFieldDecl(
     const RawPtrAndRefExclusionsOptions& options) {
-  // TODO(crbug.com/1381955): Skipping const char pointers as it likely points
+  // TODO(crbug.com/40245402): Skipping const char pointers as it likely points
   // to string literals where raw_ptr isn't necessary. Remove when we have
   // implement const char support.
   auto const_char_pointer_matcher = fieldDecl(hasType(
diff --git a/tools/clang/plugins/tests/raw_ptr_to_stack_allocated.txt b/tools/clang/plugins/tests/raw_ptr_to_stack_allocated.txt
index 034e80b2..18313ae 100644
--- a/tools/clang/plugins/tests/raw_ptr_to_stack_allocated.txt
+++ b/tools/clang/plugins/tests/raw_ptr_to_stack_allocated.txt
@@ -13,13 +13,13 @@
 raw_ptr_to_stack_allocated.cpp:21:47: error: [chromium-raw-ptr-to-stack-allocated] Do not use 'raw_ptr<T>' on a `STACK_ALLOCATED` object 'StackAllocatedType'.
 typedef std::vector<raw_ptr<StackAllocatedType>> ErrTypeG;
                                               ^
-<scratch space>:5:1: note: expanded from here
+<scratch space>:7:1: note: expanded from here
 >
 ^
 raw_ptr_to_stack_allocated.cpp:22:50: error: [chromium-raw-ptr-to-stack-allocated] Do not use 'raw_ptr<T>' on a `STACK_ALLOCATED` object 'StackAllocatedSubType'.
 typedef std::vector<raw_ptr<StackAllocatedSubType>> ErrTypeH;
                                                  ^
-<scratch space>:6:1: note: expanded from here
+<scratch space>:8:1: note: expanded from here
 >
 ^
 raw_ptr_to_stack_allocated.cpp:27:29: error: [chromium-raw-ptr-to-stack-allocated] Do not use 'raw_ptr<T>' on a `STACK_ALLOCATED` object 'StackAllocatedType'.
@@ -37,13 +37,13 @@
 raw_ptr_to_stack_allocated.cpp:33:41: error: [chromium-raw-ptr-to-stack-allocated] Do not use 'raw_ptr<T>' on a `STACK_ALLOCATED` object 'StackAllocatedType'.
   std::vector<raw_ptr<StackAllocatedType>> err_g;
                                         ^
-<scratch space>:11:1: note: expanded from here
+<scratch space>:13:1: note: expanded from here
 >
 ^
 raw_ptr_to_stack_allocated.cpp:34:44: error: [chromium-raw-ptr-to-stack-allocated] Do not use 'raw_ptr<T>' on a `STACK_ALLOCATED` object 'StackAllocatedSubType'.
   std::vector<raw_ptr<StackAllocatedSubType>> err_h;
                                            ^
-<scratch space>:12:1: note: expanded from here
+<scratch space>:14:1: note: expanded from here
 >
 ^
 raw_ptr_to_stack_allocated.cpp:40:29: error: [chromium-raw-ptr-to-stack-allocated] Do not use 'raw_ptr<T>' on a `STACK_ALLOCATED` object 'StackAllocatedType'.
@@ -61,13 +61,13 @@
 raw_ptr_to_stack_allocated.cpp:46:41: error: [chromium-raw-ptr-to-stack-allocated] Do not use 'raw_ptr<T>' on a `STACK_ALLOCATED` object 'StackAllocatedType'.
   std::vector<raw_ptr<StackAllocatedType>> err_g;
                                         ^
-<scratch space>:17:1: note: expanded from here
+<scratch space>:19:1: note: expanded from here
 >
 ^
 raw_ptr_to_stack_allocated.cpp:47:44: error: [chromium-raw-ptr-to-stack-allocated] Do not use 'raw_ptr<T>' on a `STACK_ALLOCATED` object 'StackAllocatedSubType'.
   std::vector<raw_ptr<StackAllocatedSubType>> err_h;
                                            ^
-<scratch space>:18:1: note: expanded from here
+<scratch space>:20:1: note: expanded from here
 >
 ^
 raw_ptr_to_stack_allocated.cpp:50:29: error: [chromium-raw-ptr-to-stack-allocated] Do not use 'raw_ref<T>' on a `STACK_ALLOCATED` object 'StackAllocatedType'.
diff --git a/tools/clang/plugins/tests/unsafe_buffers.txt b/tools/clang/plugins/tests/unsafe_buffers.txt
index 053ece4..597c6d84 100644
--- a/tools/clang/plugins/tests/unsafe_buffers.txt
+++ b/tools/clang/plugins/tests/unsafe_buffers.txt
@@ -35,14 +35,14 @@
 ./unsafe_buffers_not_clean_dir/clean_header.h:33:12: note: expanded from macro 'INSIDE_MACRO_CHECKED'
     return FIELD##s_ + index;                    /
            ^~~~~~~~~
-<scratch space>:18:1: note: expanded from here
+<scratch space>:20:1: note: expanded from here
 ptrs_
 ^~~~~
 ./unsafe_buffers_not_clean_dir/clean_header.h:42:1: note: See //docs/unsafe_buffers.md for help.
 ./unsafe_buffers_not_clean_dir/clean_header.h:33:12: note: expanded from macro 'INSIDE_MACRO_CHECKED'
     return FIELD##s_ + index;                    /
            ^
-<scratch space>:18:1: note: expanded from here
+<scratch space>:20:1: note: expanded from here
 ptrs_
 ^
 In file included from unsafe_buffers.cpp:21:
diff --git a/tools/clang/plugins/tests/unsafe_buffers_unchecked.txt b/tools/clang/plugins/tests/unsafe_buffers_unchecked.txt
index 2fdbdce..9e9b35a0 100644
--- a/tools/clang/plugins/tests/unsafe_buffers_unchecked.txt
+++ b/tools/clang/plugins/tests/unsafe_buffers_unchecked.txt
@@ -17,14 +17,14 @@
 ./unsafe_buffers_not_clean_dir/clean_header.h:33:12: note: expanded from macro 'INSIDE_MACRO_CHECKED'
     return FIELD##s_ + index;                    /
            ^~~~~~~~~
-<scratch space>:10:1: note: expanded from here
+<scratch space>:12:1: note: expanded from here
 ptrs_
 ^~~~~
 ./unsafe_buffers_not_clean_dir/clean_header.h:42:1: note: See //docs/unsafe_buffers.md for help.
 ./unsafe_buffers_not_clean_dir/clean_header.h:33:12: note: expanded from macro 'INSIDE_MACRO_CHECKED'
     return FIELD##s_ + index;                    /
            ^
-<scratch space>:10:1: note: expanded from here
+<scratch space>:12:1: note: expanded from here
 ptrs_
 ^
 4 warnings generated.
diff --git a/tools/clang/rewrite_autofill_form_data/FieldToFunction.cpp b/tools/clang/rewrite_autofill_form_data/FieldToFunction.cpp
index df5186ab..ccb85602 100644
--- a/tools/clang/rewrite_autofill_form_data/FieldToFunction.cpp
+++ b/tools/clang/rewrite_autofill_form_data/FieldToFunction.cpp
@@ -28,6 +28,8 @@
 #include "clang/Tooling/CommonOptionsParser.h"
 #include "clang/Tooling/Core/Replacement.h"
 #include "clang/Tooling/Tooling.h"
+#include "llvm/ADT/SmallVector.h"
+#include "llvm/ADT/StringRef.h"
 #include "llvm/Support/CommandLine.h"
 #include "llvm/Support/FormatVariadic.h"
 #include "llvm/Support/TargetSelect.h"
@@ -58,21 +60,6 @@
     llvm::cl::init("value"),
     llvm::cl::cat(rewriter_category));
 
-// Splits a string at each comma.
-// For example, `Explode("foo,bar,")` returns `{"foo", "bar", ""}`.
-std::vector<std::string> Explode(std::string_view s) {
-  std::vector<std::string> substrings;
-  for (;;) {
-    size_t pos = s.find(',');
-    substrings.push_back(std::string(s.substr(0, pos)));
-    if (pos == std::string::npos) {
-      break;
-    }
-    s = s.substr(pos + 1);
-  }
-  return substrings;
-}
-
 // Generates substitution directives according to the format documented in
 // tools/clang/scripts/run_tool.py.
 //
@@ -191,28 +178,34 @@
 
 auto IsClassOfInterest() {
   using namespace clang::ast_matchers;
-  using namespace clang::ast_matchers::internal;
-  static std::vector<std::string> names = Explode(classes_of_interest_option);
-  return cxxRecordDecl(Matcher<clang::NamedDecl>(new HasNameMatcher(names)));
+  static auto names = [] {
+    llvm::SmallVector<llvm::StringRef> names;
+    llvm::StringRef(classes_of_interest_option).split(names, ",");
+    return names;
+  }();
+  return cxxRecordDecl(hasAnyName(names));
 }
 
 auto IsFieldOfInterest() {
   using namespace clang::ast_matchers;
-  using namespace clang::ast_matchers::internal;
-  static std::vector<std::string> names = Explode(fields_of_interest_option);
-  return fieldDecl(Matcher<clang::NamedDecl>(new HasNameMatcher(names)));
+  static auto names = [] {
+    llvm::SmallVector<llvm::StringRef> names;
+    llvm::StringRef(fields_of_interest_option).split(names, ",");
+    return names;
+  }();
+  return fieldDecl(hasAnyName(names));
 }
 
 // Matches `object.member` and `object->member` where `member` is a
 // member-of-interest of a class-of-interest
 auto IsMemberExprOfInterest() {
   using namespace clang::ast_matchers;
-  return memberExpr(allOf(member(allOf(IsFieldOfInterest(),
-                                       fieldDecl(hasParent(cxxRecordDecl(
-                                           IsClassOfInterest()))))),
-                          // Avoids matching memberExprs in defaulted
-                          // constructors and operators.
-                          unless(hasAncestor(functionDecl(isDefaulted())))))
+  return memberExpr(
+             allOf(member(allOf(IsFieldOfInterest(),
+                                fieldDecl(hasParent(IsClassOfInterest())))),
+                   // Avoids matching memberExprs in defaulted
+                   // constructors and operators.
+                   unless(hasAncestor(functionDecl(isDefaulted())))))
       .bind("member_expr");
 }
 
diff --git a/tools/clang/rewrite_autofill_personal_data_manager/CMakeLists.txt b/tools/clang/rewrite_autofill_personal_data_manager/CMakeLists.txt
new file mode 100644
index 0000000..2aa1f291
--- /dev/null
+++ b/tools/clang/rewrite_autofill_personal_data_manager/CMakeLists.txt
@@ -0,0 +1,28 @@
+set(LLVM_LINK_COMPONENTS
+  BitReader
+  MCParser
+  Option
+  X86AsmParser
+  X86CodeGen
+  )
+
+add_llvm_executable(rewrite_autofill_personal_data_manager
+  ForwardCalls.cpp
+  )
+
+target_link_libraries(rewrite_autofill_personal_data_manager
+  clangAST
+  clangASTMatchers
+  clangAnalysis
+  clangBasic
+  clangDriver
+  clangEdit
+  clangFrontend
+  clangLex
+  clangParse
+  clangSema
+  clangSerialization
+  clangTooling
+  )
+
+cr_install(TARGETS rewrite_autofill_personal_data_manager RUNTIME DESTINATION bin)
diff --git a/tools/clang/rewrite_autofill_personal_data_manager/ForwardCalls.cpp b/tools/clang/rewrite_autofill_personal_data_manager/ForwardCalls.cpp
new file mode 100644
index 0000000..41e6b84
--- /dev/null
+++ b/tools/clang/rewrite_autofill_personal_data_manager/ForwardCalls.cpp
@@ -0,0 +1,190 @@
+// Copyright 2024 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+// Clang tool to change accesses to forward calls to a member function of a
+// class through another member function of that class.
+// This can be useful to update callsites when splitting a large class into
+// subclasses.
+// In particular, this is used to split the `autofill::PersonalDataManager`.
+
+#include <cassert>
+#include <memory>
+#include <string>
+
+#include "clang/AST/ASTContext.h"
+#include "clang/AST/ExprCXX.h"
+#include "clang/ASTMatchers/ASTMatchFinder.h"
+#include "clang/ASTMatchers/ASTMatchers.h"
+#include "clang/ASTMatchers/ASTMatchersMacros.h"
+#include "clang/Basic/SourceManager.h"
+#include "clang/Frontend/CompilerInstance.h"
+#include "clang/Frontend/FrontendActions.h"
+#include "clang/Lex/Lexer.h"
+#include "clang/Tooling/CommonOptionsParser.h"
+#include "clang/Tooling/Core/Replacement.h"
+#include "clang/Tooling/Tooling.h"
+#include "llvm/ADT/SmallVector.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/CommandLine.h"
+#include "llvm/Support/TargetSelect.h"
+
+namespace {
+
+llvm::cl::extrahelp common_help(
+    clang::tooling::CommonOptionsParser::HelpMessage);
+llvm::cl::extrahelp more_help(
+    "The rewriter forwards calls to functions-of-interest on objects of type "
+    "class-of-interest through forward-through.");
+llvm::cl::OptionCategory rewriter_category("Rewriter Options");
+llvm::cl::opt<std::string> class_of_interest_option(
+    "class-of-interest",
+    llvm::cl::desc("Fully qualified names of the class whose "
+                   "calls are to be forwarded"),
+    llvm::cl::init("Foo"),
+    llvm::cl::cat(rewriter_category));
+llvm::cl::opt<std::string> functions_of_interest_option(
+    "functions-of-interest",
+    llvm::cl::desc("Comma-separated function names of the class-of-interest "
+                   "that are to be forwarded"),
+    llvm::cl::init("bar"),
+    llvm::cl::cat(rewriter_category));
+llvm::cl::opt<std::string> forward_through_option(
+    "forward-through",
+    llvm::cl::desc("Name of the function to forward calls through"),
+    llvm::cl::init("baz"),
+    llvm::cl::cat(rewriter_category));
+llvm::cl::opt<std::string> include_header_option(
+    "header",
+    llvm::cl::desc("Name of the header to include in every touched file"),
+    llvm::cl::init("some/file.h"),
+    llvm::cl::cat(rewriter_category));
+
+// Generates substitution directives according to the format documented in
+// tools/clang/scripts/run_tool.py.
+//
+// We do not use `clang::tooling::Replacements` because we don't need any
+// buffering, and we'd need to implement the serialization of
+// `clang::tooling::Replacement` anyway.
+class OutputHelper : public clang::tooling::SourceFileCallbacks {
+ public:
+  // Replaces `replacement_range` with `replacement_text`.
+  void Replace(const clang::CharSourceRange& replacement_range,
+               std::string replacement_text,
+               const clang::SourceManager& source_manager,
+               const clang::LangOptions& lang_opts) {
+    clang::tooling::Replacement replacement(source_manager, replacement_range,
+                                            replacement_text, lang_opts);
+    llvm::StringRef file_path = replacement.getFilePath();
+    if (file_path.empty()) {
+      return;
+    }
+    std::replace(replacement_text.begin(), replacement_text.end(), '\n', '\0');
+    Add(file_path, replacement.getOffset(), replacement.getLength(),
+        replacement_text);
+  }
+
+ private:
+  // clang::tooling::SourceFileCallbacks:
+  bool handleBeginSource(clang::CompilerInstance& compiler) override {
+    const clang::FrontendOptions& frontend_options = compiler.getFrontendOpts();
+
+    assert((frontend_options.Inputs.size() == 1) &&
+           "run_tool.py should invoke the rewriter one file at a time");
+    const clang::FrontendInputFile& input_file = frontend_options.Inputs[0];
+    assert(input_file.isFile() &&
+           "run_tool.py should invoke the rewriter on actual files");
+
+    llvm::outs() << "==== BEGIN EDITS ====\n";
+    return true;
+  }
+
+  void handleEndSource() override { llvm::outs() << "==== END EDITS ====\n"; }
+
+  void Add(llvm::StringRef file_path,
+           unsigned offset,
+           unsigned length,
+           llvm::StringRef replacement_text) {
+    llvm::outs() << "r:::" << file_path << ":::" << offset << ":::" << length
+                 << ":::" << replacement_text << "\n";
+    llvm::outs() << "include-user-header:::" << file_path
+                 << ":::-1:::-1:::" << include_header_option << "\n";
+  }
+};
+
+// Matches `foo.bar()` and `foo->bar()` calls, independently of the parameters
+// to bar, where:
+// - The type of `foo` is `class_name` or derived from it.
+// - `bar` is one of `function_names`.
+auto IsCallOfInterest(llvm::StringRef class_name,
+                      llvm::SmallVector<llvm::StringRef> function_names) {
+  using namespace clang::ast_matchers;
+  return cxxMemberCallExpr(
+             on(anyOf(hasType(cxxRecordDecl(
+                          isSameOrDerivedFrom(hasName(class_name)))),
+                      hasType(pointsTo(cxxRecordDecl(
+                          isSameOrDerivedFrom(hasName(class_name))))))),
+             callee(cxxMethodDecl(hasAnyName(function_names))))
+      .bind("call");
+}
+
+// Rewrites calls of interest (as per `IsCallOfInterest()`) to go through
+// `forward_through_option`. E.g.:
+// - `foo.bar()` -> `foo.baz().bar()`
+// - `foo->bar()` -> `foo->baz().bar()`
+class ForwardCallRewriter
+    : public clang::ast_matchers::MatchFinder::MatchCallback {
+ public:
+  explicit ForwardCallRewriter(OutputHelper* output_helper)
+      : output_helper_(*output_helper) {}
+
+  void AddMatchers(clang::ast_matchers::MatchFinder& match_finder) {
+    llvm::SmallVector<llvm::StringRef> function_names;
+    // `functions_of_interest_option` outlives `ForwardCallRewriter`, so the
+    // `llvm::StringRef`s returned by `split()` remain valid.
+    llvm::StringRef(functions_of_interest_option).split(function_names, ",");
+    match_finder.addMatcher(
+        IsCallOfInterest(class_of_interest_option, std::move(function_names)),
+        this);
+  }
+
+ private:
+  void run(
+      const clang::ast_matchers::MatchFinder::MatchResult& result) override {
+    const auto* call = result.Nodes.getNodeAs<clang::CXXMemberCallExpr>("call");
+    assert(call);
+    clang::CharSourceRange range = clang::CharSourceRange::getTokenRange(
+        clang::SourceRange(call->getCallee()->getExprLoc()));
+    auto source_text = clang::Lexer::getSourceText(
+        range, *result.SourceManager, result.Context->getLangOpts());
+    std::string replacement_text =
+        (forward_through_option + "()." + source_text).str();
+    output_helper_.Replace(range, replacement_text, *result.SourceManager,
+                           result.Context->getLangOpts());
+  }
+
+  OutputHelper& output_helper_;
+};
+
+}  // namespace
+
+int main(int argc, const char* argv[]) {
+  llvm::InitializeNativeTarget();
+  llvm::InitializeNativeTargetAsmParser();
+
+  llvm::Expected<clang::tooling::CommonOptionsParser> options =
+      clang::tooling::CommonOptionsParser::create(argc, argv,
+                                                  rewriter_category);
+  assert(static_cast<bool>(options));
+  clang::tooling::ClangTool tool(options->getCompilations(),
+                                 options->getSourcePathList());
+
+  OutputHelper output_helper;
+  ForwardCallRewriter rewriter(&output_helper);
+  clang::ast_matchers::MatchFinder match_finder;
+  rewriter.AddMatchers(match_finder);
+
+  std::unique_ptr<clang::tooling::FrontendActionFactory> factory =
+      clang::tooling::newFrontendActionFactory(&match_finder, &output_helper);
+  return tool.run(factory.get());
+}
diff --git a/tools/clang/rewrite_autofill_personal_data_manager/OWNERS b/tools/clang/rewrite_autofill_personal_data_manager/OWNERS
new file mode 100644
index 0000000..aa812c7
--- /dev/null
+++ b/tools/clang/rewrite_autofill_personal_data_manager/OWNERS
@@ -0,0 +1 @@
+fleimgruber@google.com
diff --git a/tools/clang/rewrite_autofill_personal_data_manager/tests/forward-calls-expected.cc b/tools/clang/rewrite_autofill_personal_data_manager/tests/forward-calls-expected.cc
new file mode 100644
index 0000000..f3ad836
--- /dev/null
+++ b/tools/clang/rewrite_autofill_personal_data_manager/tests/forward-calls-expected.cc
@@ -0,0 +1,62 @@
+// Copyright 2024 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "some/file.h"
+
+class Foo {
+ public:
+  void bar(int x) {}
+  void not_bar() {}
+  Foo& baz() { return *this; }
+};
+
+class FooDerived : public Foo {};
+
+class NotFoo {
+ public:
+  void bar() {}
+};
+
+Foo& get_foo() {
+  static Foo f;
+  return f;
+}
+
+// Tests that only `bar()` calls on `Foo`s are rewritten.
+void RewritesFoo() {
+  Foo foo;
+  foo.baz().bar(1);
+  foo.not_bar();
+}
+
+// Tests that `bar()` calls on `Foo` pointers are rewritten.
+void RewritesFooPtr() {
+  Foo foo;
+  Foo* foo_ptr = &foo;
+  foo_ptr->baz().bar(3);
+}
+
+// Tests that `bar()` calls on `Foo` referencess are rewritten.
+void RewritesFooRef() {
+  Foo foo;
+  Foo& foo_ref = foo;
+  foo_ref.baz().bar(4);
+}
+
+// Tests that when the `Foo` is retried through a function call, rewrites work.
+void RewritesFooIndirection() {
+  get_foo().baz().bar(5);
+}
+
+// Tests that `bar()` calls on classes derived from `Foo` are rewritten.
+void RewritesFooDerived() {
+  FooDerived foo;
+  foo.baz().bar(6);
+}
+
+// Tests that `bar()` calls on non-`Foo` classes are not rewritten.
+void DoesntRewriteNotFoo() {
+  NotFoo not_foo;
+  not_foo.bar();
+}
diff --git a/tools/clang/rewrite_autofill_personal_data_manager/tests/forward-calls-original.cc b/tools/clang/rewrite_autofill_personal_data_manager/tests/forward-calls-original.cc
new file mode 100644
index 0000000..dad19059
--- /dev/null
+++ b/tools/clang/rewrite_autofill_personal_data_manager/tests/forward-calls-original.cc
@@ -0,0 +1,60 @@
+// Copyright 2024 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+class Foo {
+ public:
+  void bar(int x) {}
+  void not_bar() {}
+  Foo& baz() { return *this; }
+};
+
+class FooDerived : public Foo {};
+
+class NotFoo {
+ public:
+  void bar() {}
+};
+
+Foo& get_foo() {
+  static Foo f;
+  return f;
+}
+
+// Tests that only `bar()` calls on `Foo`s are rewritten.
+void RewritesFoo() {
+  Foo foo;
+  foo.bar(1);
+  foo.not_bar();
+}
+
+// Tests that `bar()` calls on `Foo` pointers are rewritten.
+void RewritesFooPtr() {
+  Foo foo;
+  Foo* foo_ptr = &foo;
+  foo_ptr->bar(3);
+}
+
+// Tests that `bar()` calls on `Foo` referencess are rewritten.
+void RewritesFooRef() {
+  Foo foo;
+  Foo& foo_ref = foo;
+  foo_ref.bar(4);
+}
+
+// Tests that when the `Foo` is retried through a function call, rewrites work.
+void RewritesFooIndirection() {
+  get_foo().bar(5);
+}
+
+// Tests that `bar()` calls on classes derived from `Foo` are rewritten.
+void RewritesFooDerived() {
+  FooDerived foo;
+  foo.bar(6);
+}
+
+// Tests that `bar()` calls on non-`Foo` classes are not rewritten.
+void DoesntRewriteNotFoo() {
+  NotFoo not_foo;
+  not_foo.bar();
+}
diff --git a/tools/clang/rewrite_raw_ptr_fields/tests/affected-expr-expected.cc b/tools/clang/rewrite_raw_ptr_fields/tests/affected-expr-expected.cc
index ed66886..a36bedfd 100644
--- a/tools/clang/rewrite_raw_ptr_fields/tests/affected-expr-expected.cc
+++ b/tools/clang/rewrite_raw_ptr_fields/tests/affected-expr-expected.cc
@@ -274,7 +274,7 @@
   std::string other_str = "other";
 
   // No rewrite expected. (for now)
-  // TODO(crbug.com/1381955) |const char| pointer fields are not supported yet.
+  // TODO(crbug.com/40245402) |const char| pointer fields are not supported yet.
   bool v1 = my_struct.const_char_ptr == other_str;
   bool v2 = other_str == my_struct.const_char_ptr;
   bool v3 = my_struct.const_char_ptr > other_str;
@@ -470,7 +470,7 @@
   MyStruct my_struct(s, s, s);
 
   // No rewrite expected. (for now)
-  // TODO(crbug.com/1381955) |const char| pointer fields are not supported yet.
+  // TODO(crbug.com/40245402) |const char| pointer fields are not supported yet.
   FunctionTakingBasicStringPiece(my_struct.const_char_ptr);
   FunctionTakingBasicStringPieceRef(my_struct.const_char_ptr);
 
diff --git a/tools/clang/rewrite_raw_ptr_fields/tests/affected-expr-original.cc b/tools/clang/rewrite_raw_ptr_fields/tests/affected-expr-original.cc
index 482e800fd..e935f94 100644
--- a/tools/clang/rewrite_raw_ptr_fields/tests/affected-expr-original.cc
+++ b/tools/clang/rewrite_raw_ptr_fields/tests/affected-expr-original.cc
@@ -271,7 +271,7 @@
   std::string other_str = "other";
 
   // No rewrite expected. (for now)
-  // TODO(crbug.com/1381955) |const char| pointer fields are not supported yet.
+  // TODO(crbug.com/40245402) |const char| pointer fields are not supported yet.
   bool v1 = my_struct.const_char_ptr == other_str;
   bool v2 = other_str == my_struct.const_char_ptr;
   bool v3 = my_struct.const_char_ptr > other_str;
@@ -467,7 +467,7 @@
   MyStruct my_struct(s, s, s);
 
   // No rewrite expected. (for now)
-  // TODO(crbug.com/1381955) |const char| pointer fields are not supported yet.
+  // TODO(crbug.com/40245402) |const char| pointer fields are not supported yet.
   FunctionTakingBasicStringPiece(my_struct.const_char_ptr);
   FunctionTakingBasicStringPieceRef(my_struct.const_char_ptr);
 
diff --git a/tools/clang/rewrite_raw_ptr_fields/tests/gen-unions-test.cc b/tools/clang/rewrite_raw_ptr_fields/tests/gen-unions-test.cc
index 942539c4..86ff540 100644
--- a/tools/clang/rewrite_raw_ptr_fields/tests/gen-unions-test.cc
+++ b/tools/clang/rewrite_raw_ptr_fields/tests/gen-unions-test.cc
@@ -29,7 +29,7 @@
 union MyUnion1 {
   SomeClass* some_class_ptr;
   char* char_ptr;
-  // TODO(crbug.com/1381955) |const char| pointer fields are not supported yet.
+  // TODO(crbug.com/40245402) |const char| pointer fields are not supported yet.
   const char* const_char_ptr;
 };
 
diff --git a/tools/clang/rewrite_raw_ptr_fields/tests/various-types-expected.cc b/tools/clang/rewrite_raw_ptr_fields/tests/various-types-expected.cc
index e00af1a..51e1d11 100644
--- a/tools/clang/rewrite_raw_ptr_fields/tests/various-types-expected.cc
+++ b/tools/clang/rewrite_raw_ptr_fields/tests/various-types-expected.cc
@@ -120,7 +120,7 @@
   raw_ptr<uint8_t> unsigned_char_ptr;
   raw_ptr<int8_t> signed_char_ptr;
 
-  // TODO(crbug.com/1381955) |const char| pointer fields are not supported yet.
+  // TODO(crbug.com/40245402) |const char| pointer fields are not supported yet.
   //
   // No rewrite expected (for now).
   const char* const_char_ptr;
diff --git a/tools/clang/rewrite_raw_ptr_fields/tests/various-types-original.cc b/tools/clang/rewrite_raw_ptr_fields/tests/various-types-original.cc
index 46af08e..d0973a3 100644
--- a/tools/clang/rewrite_raw_ptr_fields/tests/various-types-original.cc
+++ b/tools/clang/rewrite_raw_ptr_fields/tests/various-types-original.cc
@@ -117,7 +117,7 @@
   uint8_t* unsigned_char_ptr;
   int8_t* signed_char_ptr;
 
-  // TODO(crbug.com/1381955) |const char| pointer fields are not supported yet.
+  // TODO(crbug.com/40245402) |const char| pointer fields are not supported yet.
   //
   // No rewrite expected (for now).
   const char* const_char_ptr;
diff --git a/tools/clang/scripts/analyze_includes.py b/tools/clang/scripts/analyze_includes.py
index bb661cff..f9121d0 100755
--- a/tools/clang/scripts/analyze_includes.py
+++ b/tools/clang/scripts/analyze_includes.py
@@ -92,7 +92,7 @@
 
       if depth > prev_depth:
         if sys.platform != 'win32':
-          # TODO(crbug.com/1223741): Always assert.
+          # TODO(crbug.com/40187759): Always assert.
           assert depth == prev_depth + 1
         elif depth > prev_depth + 1:
           # Until the bug is fixed, skip these includes.
diff --git a/tools/clang/scripts/build.py b/tools/clang/scripts/build.py
index 98176549..8af5957 100755
--- a/tools/clang/scripts/build.py
+++ b/tools/clang/scripts/build.py
@@ -1201,7 +1201,7 @@
     runtimes_triples_args['i386-unknown-linux-gnu'] = {
         "args": [
             'CMAKE_SYSROOT=%s' % sysroot_i386,
-            # TODO(https://crbug.com/1374690): pass proper flags to i386 tests so they compile correctly
+            # TODO(crbug.com/40242553): pass proper flags to i386 tests so they compile correctly
             'LLVM_INCLUDE_TESTS=OFF',
         ],
         "profile":
diff --git a/tools/clang/scripts/package.py b/tools/clang/scripts/package.py
index d60f3db..3b80e5f 100755
--- a/tools/clang/scripts/package.py
+++ b/tools/clang/scripts/package.py
@@ -105,7 +105,7 @@
         tar_xz.add(os.path.join(directory_path, f),
                    arcname=f,
                    filter=PrintTarProgress)
-        # TODO(crbug.com/1261812) Stop making gzip'ed archives once the
+        # TODO(crbug.com/40202359) Stop making gzip'ed archives once the
         # goma/reclient push processes are updated to consume the .xz files
         # instead.
         tar_gz.add(os.path.join(directory_path, f), arcname=f)
@@ -713,23 +713,6 @@
   PackageInArchive(libclang_dir, libclang_dir)
   MaybeUpload(args.upload, args.bucket, libclang_dir + '.t*z', gcs_platform)
 
-  # Zip up Android x64 ASAN runtime support
-  if sys.platform.startswith('linux'):
-    x64_android_asan_dir = 'x64_android_asan-' + stamp
-    shutil.rmtree(x64_android_asan_dir, ignore_errors=True)
-    subdir = os.path.join('lib', 'clang', RELEASE_VERSION, 'lib', 'linux')
-    dst_dir = os.path.join(x64_android_asan_dir, subdir)
-    os.makedirs(dst_dir)
-    shutil.copy(
-        os.path.join(LLVM_RELEASE_DIR, subdir,
-                     'libclang_rt.asan-x86_64-android.so'), dst_dir)
-    shutil.copy(
-        os.path.join(LLVM_RELEASE_DIR, subdir,
-                     'libclang_rt.asan_static-x86_64-android.a'), dst_dir)
-    PackageInArchive(x64_android_asan_dir, x64_android_asan_dir)
-    MaybeUpload(args.upload, args.bucket, x64_android_asan_dir + '.t*z',
-                gcs_platform)
-
   if sys.platform == 'win32' and args.upload:
     binaries = [f for f in want if f.endswith('.exe') or f.endswith('.dll')]
     assert 'bin/clang-cl.exe' in binaries
diff --git a/tools/clang/scripts/remote_ld.py b/tools/clang/scripts/remote_ld.py
index 3ed2111..c7d4ce7 100755
--- a/tools/clang/scripts/remote_ld.py
+++ b/tools/clang/scripts/remote_ld.py
@@ -35,7 +35,7 @@
   }
 
   def analyze_args(self, args, *posargs, **kwargs):
-    # TODO(crbug.com/1040196): Builds are unreliable when all targets use
+    # TODO(crbug.com/40113922): Builds are unreliable when all targets use
     # distributed ThinLTO, so we only enable it for some targets.
     # For other targets, we fall back to local ThinLTO. We must use ThinLTO
     # because we build with -fsplit-lto-unit, which requires code generation
diff --git a/tools/clang/scripts/update.py b/tools/clang/scripts/update.py
index eded5b4a..d172842 100755
--- a/tools/clang/scripts/update.py
+++ b/tools/clang/scripts/update.py
@@ -36,8 +36,8 @@
 # https://chromium.googlesource.com/chromium/src/+/main/docs/updating_clang.md
 # Reverting problematic clang rolls is safe, though.
 # This is the output of `git describe` and is usable as a commit-ish.
-CLANG_REVISION = 'llvmorg-19-init-8943-gd8503a38'
-CLANG_SUB_REVISION = 3
+CLANG_REVISION = 'llvmorg-19-init-9433-g76ea5feb'
+CLANG_SUB_REVISION = 1
 
 PACKAGE_VERSION = '%s-%s' % (CLANG_REVISION, CLANG_SUB_REVISION)
 RELEASE_VERSION = '19'
@@ -251,9 +251,7 @@
     package_file = 'llvm-code-coverage'
   elif package_name == 'objdump':
     package_file = 'llvmobjdump'
-  elif package_name in [
-      'clang-tidy', 'clangd', 'libclang', 'translation_unit', 'x64_android_asan'
-  ]:
+  elif package_name in ['clang-tidy', 'clangd', 'libclang', 'translation_unit']:
     package_file = package_name
   else:
     print('Unknown package: "%s".' % package_name)
diff --git a/tools/code_coverage/coverage.py b/tools/code_coverage/coverage.py
index e622653d..2039407 100755
--- a/tools/code_coverage/coverage.py
+++ b/tools/code_coverage/coverage.py
@@ -844,7 +844,7 @@
 
 def _GetBinaryPathsFromTargets(targets, build_dir):
   """Return binary paths from target names."""
-  # TODO(crbug.com/899974): Derive output binary from target build definitions
+  # TODO(crbug.com/41423295): Derive output binary from target build definitions
   # rather than assuming that it is always the same name.
   binary_paths = []
   for target in targets:
@@ -874,7 +874,7 @@
 
   cpu_count = multiprocessing.cpu_count()
   if sys.platform == 'win32':
-    # TODO(crbug.com/1190269) - we can't use more than 56
+    # TODO(crbug.com/40755900) - we can't use more than 56
     # cores on Windows or Python3 may hang.
     cpu_count = min(cpu_count, 56)
   cpu_count = max(1, cpu_count // 2)
@@ -894,7 +894,7 @@
 
 def _GetBinaryPathsForAndroid(targets):
   """Return binary paths used when running android tests."""
-  # TODO(crbug.com/899974): Implement approach that doesn't assume .so file is
+  # TODO(crbug.com/41423295): Implement approach that doesn't assume .so file is
   # based on the target's name.
   android_binaries = set()
   for target in targets:
diff --git a/tools/crates/gnrt/lib/deps.rs b/tools/crates/gnrt/lib/deps.rs
index d6a3887..c2dd8b6d 100644
--- a/tools/crates/gnrt/lib/deps.rs
+++ b/tools/crates/gnrt/lib/deps.rs
@@ -262,7 +262,7 @@
         dep.authors = package.authors.clone();
         dep.edition = package.edition.to_string();
 
-        // TODO(crbug.com/1291994): Resolve features independently per kind
+        // TODO(crbug.com/40212956): Resolve features independently per kind
         // and platform. This may require using the unstable unit-graph feature:
         // https://doc.rust-lang.org/cargo/reference/unstable.html#unit-graph
         for (_, kind_info) in dep.dependency_kinds.iter_mut() {
@@ -272,7 +272,7 @@
             // choose to check "default" directly, but virtually none actually
             // do this.
             //
-            // TODO(crbug.com/1291994): Revisit this behavior and maybe keep
+            // TODO(crbug.com/40212956): Revisit this behavior and maybe keep
             // "default" features.
             if let Some(pos) = kind_info.features.iter().position(|x| x == "default") {
                 kind_info.features.remove(pos);
diff --git a/tools/cygprofile/orderfile_generator_backend.py b/tools/cygprofile/orderfile_generator_backend.py
index 8f69187..c193b557 100755
--- a/tools/cygprofile/orderfile_generator_backend.py
+++ b/tools/cygprofile/orderfile_generator_backend.py
@@ -259,10 +259,8 @@
     self._step_recorder.RunCommand(
         ['gn', 'gen',
          str(self._out_dir), '--args=' + ' '.join(gn_args)])
-    # Always build dump_syms as it's required by
-    # generate_breakpad_symbols.GetDumpSymsBinary in order to symbolize stacks.
     self._step_recorder.RunCommand(self._ninja_command +
-                                   [str(self._out_dir), target, 'dump_syms'])
+                                   [str(self._out_dir), target])
 
   def _ForceRelink(self):
     """Forces libmonochrome.so to be re-linked.
@@ -935,8 +933,12 @@
       assert self._options.buildbot, '--clobber is intended for the buildbot.'
       # This is useful on the bot when we need to start from scratch to rebuild.
       if _OUT_PATH.exists():
+        logging.info('Clobbering %s...', _OUT_PATH)
         shutil.rmtree(_OUT_PATH, ignore_errors=True)
-        _OUT_PATH.mkdir()
+        # The bot assumes that `out/Release` is always available.
+        out_release_path = _OUT_PATH / 'Release'
+        logging.info('mkdir %s', out_release_path)
+        out_release_path.mkdir(parents=True)
 
     if self._options.profile:
       self._compiler = ClankCompiler(self._instrumented_out_dir,
diff --git a/tools/determinism/compare_build_artifacts.py b/tools/determinism/compare_build_artifacts.py
index f64fa18..053251bc 100755
--- a/tools/determinism/compare_build_artifacts.py
+++ b/tools/determinism/compare_build_artifacts.py
@@ -63,7 +63,7 @@
 
 def get_files_to_compare_using_isolate(build_dir):
   # First, find all .runtime_deps files in build_dir.
-  # TODO(crbug.com/1066213): This misses some files.
+  # TODO(crbug.com/40124452): This misses some files.
   runtime_deps_files = glob.glob(os.path.join(build_dir, '*.runtime_deps'))
 
   # Then, extract their contents.
diff --git a/tools/fuchsia/size_tests/fyi_sizes_warning.json b/tools/fuchsia/size_tests/fyi_sizes_warning.json
index c56e79a..c7982fa 100644
--- a/tools/fuchsia/size_tests/fyi_sizes_warning.json
+++ b/tools/fuchsia/size_tests/fyi_sizes_warning.json
@@ -5,6 +5,6 @@
   ],
   "far_total_name" : "chrome_fuchsia",
   "size_limits" : {
-    "chrome_fuchsia_compressed": 45165888
+    "chrome_fuchsia_compressed": 45370688
   }
 }
diff --git a/tools/gritsettings/resource_ids.spec b/tools/gritsettings/resource_ids.spec
index b175891..f3ca54d7 100644
--- a/tools/gritsettings/resource_ids.spec
+++ b/tools/gritsettings/resource_ids.spec
@@ -260,7 +260,7 @@
     "includes": [3100],
   },
   "<(SHARED_INTERMEDIATE_DIR)/chrome/browser/resources/commerce/product_specifications/resources.grd": {
-    "META": {"sizes": {"includes": [10]}},
+    "META": {"sizes": {"includes": [20]}},
     "includes": [3120],
   },
   "<(SHARED_INTERMEDIATE_DIR)/chrome/browser/resources/compose/resources.grd": {
@@ -399,7 +399,7 @@
     "includes": [3800],
   },
   "<(SHARED_INTERMEDIATE_DIR)/chrome/browser/resources/side_panel/customize_chrome/resources.grd": {
-    "META": {"sizes": {"includes": [60],}},
+    "META": {"sizes": {"includes": [70],}},
     "includes": [3820],
   },
   "<(SHARED_INTERMEDIATE_DIR)/chrome/browser/resources/side_panel/history_clusters/resources.grd": {
@@ -704,7 +704,7 @@
     "includes": [5320],
   },
   "<(SHARED_INTERMEDIATE_DIR)/chrome/browser/resources/lens/overlay/resources.grd": {
-    "META": {"sizes": {"includes": [30]}},
+    "META": {"sizes": {"includes": [50]}},
     "includes": [5340],
   },
   "<(SHARED_INTERMEDIATE_DIR)/chrome/browser/resources/lens/overlay/search_bubble/resources.grd": {
@@ -816,6 +816,10 @@
     "META": {"sizes": {"includes": [10],}},
     "includes": [5980],
   },
+  "<(SHARED_INTERMEDIATE_DIR)/ash/webui/focus_mode/resources/resources.grd": {
+    "META": {"sizes": {"includes": [10],}},
+    "includes": [5990],
+  },
   "<(SHARED_INTERMEDIATE_DIR)/ash/webui/common/resources/resources.grd": {
     "META": {"sizes": {"includes": [1000]}},
     "includes": [6000],
@@ -1143,23 +1147,23 @@
   },
   "<(SHARED_INTERMEDIATE_DIR)/ash/webui/shimless_rma/resources/resources.grd": {
     "META": {"sizes": {"includes": [100],}},
-    "includes": [7520],
+    "includes": [7500],
   },
   "ash/keyboard/ui/keyboard_resources.grd": {
-    "includes": [7540],
+    "includes": [7520],
   },
   "ash/login/resources/login_resources.grd": {
-    "structures": [7560],
+    "structures": [7540],
   },
   "ash/public/cpp/resources/ash_public_unscaled_resources.grd": {
-    "includes": [7580],
-    "structures": [7600],
+    "includes": [7560],
+    "structures": [7580],
   },
   "ash/system/mahi/resources/mahi_resources.grd": {
-    "structures":[7620],
+    "structures":[7600],
   },
   "ash/system/video_conference/resources/vc_resources.grd": {
-    "structures":[7630],
+    "structures":[7620],
   },
   "base/tracing/protos/resources.grd": {
     "includes": [7640],
diff --git a/tools/json_schema_compiler/cpp_bundle_generator.py b/tools/json_schema_compiler/cpp_bundle_generator.py
index 3230c60..5e80497 100644
--- a/tools/json_schema_compiler/cpp_bundle_generator.py
+++ b/tools/json_schema_compiler/cpp_bundle_generator.py
@@ -145,7 +145,7 @@
       elif platform == Platforms.FUCHSIA:
         ifdefs.append('BUILDFLAG(IS_FUCHSIA)')
       elif platform == Platforms.LACROS:
-        # TODO(https://crbug.com/1052397): For readability, this should become
+        # TODO(crbug.com/40118868): For readability, this should become
         # BUILDFLAG(IS_CHROMEOS) && BUILDFLAG(IS_CHROMEOS_LACROS).
         ifdefs.append('BUILDFLAG(IS_CHROMEOS_LACROS)')
       elif platform == Platforms.LINUX:
diff --git a/tools/json_schema_compiler/js_externs_generator.py b/tools/json_schema_compiler/js_externs_generator.py
index ec7f98a7..f6f4db1b 100644
--- a/tools/json_schema_compiler/js_externs_generator.py
+++ b/tools/json_schema_compiler/js_externs_generator.py
@@ -218,7 +218,7 @@
     """
     params = function.params[:]
     param_names = [param.name for param in params]
-    # TODO(https://crbug.com/1142991): Update this to represent promises better,
+    # TODO(crbug.com/40728031): Update this to represent promises better,
     # rather than just appended as a callback.
     if function.returns_async:
       param_names.append(function.returns_async.name)
diff --git a/tools/json_schema_compiler/js_interface_generator.py b/tools/json_schema_compiler/js_interface_generator.py
index 79d579fc..9ef1699 100644
--- a/tools/json_schema_compiler/js_interface_generator.py
+++ b/tools/json_schema_compiler/js_interface_generator.py
@@ -80,7 +80,7 @@
       names = []
       for param in f.params:
         names.append(param.name)
-      # TODO(https://crbug.com/1142991) Update this to represent promises
+      # TODO(crbug.com/40728031) Update this to represent promises
       # better, rather than just appended as a callback param.
       if f.returns_async:
         names.append(f.returns_async.name)
diff --git a/tools/json_schema_compiler/js_util.py b/tools/json_schema_compiler/js_util.py
index 967936f..259e539 100644
--- a/tools/json_schema_compiler/js_util.py
+++ b/tools/json_schema_compiler/js_util.py
@@ -164,7 +164,7 @@
 
   def _ReturnsAsyncToJsFunction(self, namespace_name, returns_async):
     """Converts a model.ReturnsAsync to a JS function equivalent"""
-    # TODO(https://crbug.com/1142991) update this to generate promise-based
+    # TODO(crbug.com/40728031) update this to generate promise-based
     # types and show that as a return from the API function itself, rather than
     # appended to the params as a callback.
     c = Code()
diff --git a/tools/mb/lib/validation.py b/tools/mb/lib/validation.py
index d9e4250..90f6dbe 100644
--- a/tools/mb/lib/validation.py
+++ b/tools/mb/lib/validation.py
@@ -114,7 +114,7 @@
 
 
 def CheckDebugDCheckOrOfficial(errs, gn_args, builder_group, builder, phase):
-  # TODO(crbug.com/1227171): Figure out how to check this properly
+  # TODO(crbug.com/40189120): Figure out how to check this properly
   # for simplechrome-based bots.
   if gn_args.get('is_chromeos_device'):
     return
diff --git a/tools/mb/mb.py b/tools/mb/mb.py
index b7e7c8ea..5ace0b6 100755
--- a/tools/mb/mb.py
+++ b/tools/mb/mb.py
@@ -928,7 +928,7 @@
     try:
       config = self.ConfigFromArgs()
     except MBErr as e:
-      # TODO(crbug.com/912681) While iOS bots are migrated to use the
+      # TODO(crbug.com/40605452) While iOS bots are migrated to use the
       # Chromium recipe, we want to ensure that we're checking MB's
       # configurations first before going to iOS.
       # This is to be removed once the migration is complete.
@@ -942,7 +942,7 @@
     if isinstance(config, dict):
       return config
 
-    # TODO(crbug.com/912681) Some iOS bots have a definition, with ios_error
+    # TODO(crbug.com/40605452) Some iOS bots have a definition, with ios_error
     # as an indicator that it's incorrect. We utilize this to check the
     # iOS JSON instead, and error out if there exists no definition at all.
     # This is to be removed once the migration is complete.
@@ -1212,7 +1212,7 @@
 
   def RemovePossiblyStaleRuntimeDepsFiles(self, vals, targets, isolate_map,
                                           build_dir):
-    # TODO(crbug.com/932700): Because `gn gen --runtime-deps-list-file`
+    # TODO(crbug.com/41441724): Because `gn gen --runtime-deps-list-file`
     # puts the runtime_deps file in different locations based on the actual
     # type of a target, we may end up with multiple possible runtime_deps
     # files in a given build directory, where some of the entries might be
@@ -1282,7 +1282,7 @@
                                                     isolate_map)
 
     for target, rpaths in possible_rpaths.items():
-      # TODO(crbug.com/932700): We don't know where each .runtime_deps
+      # TODO(crbug.com/41441724): We don't know where each .runtime_deps
       # file might be, but assuming we called
       # RemovePossiblyStaleRuntimeDepsFiles prior to calling `gn gen`,
       # there should only be one file.
@@ -1441,7 +1441,7 @@
     err = ''
     for f in files:
       # Skip a few configs that need extra cleanup for now.
-      # TODO(https://crbug.com/912946): Fix everything on all platforms and
+      # TODO(crbug.com/40605564): Fix everything on all platforms and
       # enable check everywhere.
       if is_android:
         break
@@ -1455,7 +1455,7 @@
       # these will lead to incorrect incremental builds if their directory
       # contents change. Do not add to this list, except for mac bundles until
       # crbug.com/1000667 is fixed.
-      # TODO(https://crbug.com/912946): Remove this if statement.
+      # TODO(crbug.com/40605564): Remove this if statement.
       if ((is_msan and f == 'instrumented_libraries_prebuilt/')
           or f == 'mr_extension/' or  # https://crbug.com/997947
           f.startswith('nacl_test_data/') or
@@ -1673,7 +1673,7 @@
         default_script = 'bin/run_{}'.format(target)
       script = isolate_map[target].get('script', default_script)
 
-      # TODO(crbug.com/816629): remove any use of 'args' from
+      # TODO(crbug.com/40564748): remove any use of 'args' from
       # generated_scripts.
       cmdline += [script] + isolate_map[target].get('args', [])
 
@@ -1683,7 +1683,7 @@
       return cmdline, []
 
 
-    # TODO(crbug.com/816629): Convert all targets to generated_scripts
+    # TODO(crbug.com/40564748): Convert all targets to generated_scripts
     # and delete the rest of this function.
     executable = isolate_map[target].get('executable', target)
     executable_suffix = isolate_map[target].get(
@@ -1757,7 +1757,7 @@
           '--asan=%d' % asan,
           # Enable lsan when asan is enabled except on Windows where LSAN isn't
           # supported.
-          # TODO(https://crbug.com/1320449): Enable on Mac inside asan once
+          # TODO(crbug.com/40223516): Enable on Mac inside asan once
           # things pass.
           # TODO(crbug.com/40632267): Enable on ChromeOS once things pass.
           '--lsan=%d' % lsan
diff --git a/tools/mb/mb_config.pyl b/tools/mb/mb_config.pyl
index 100e01d..f63e899 100644
--- a/tools/mb/mb_config.pyl
+++ b/tools/mb/mb_config.pyl
@@ -765,11 +765,11 @@
     ],
 
     'official_mac_arm_pgo_with_symbols': [
-      'official', 'reclient', 'no_widevine_cdm_host_verification', 'arm64', 'disable_widevine_signing', 'minimal_symbols', 'pgo_phase_1', 'release'
+      'official', 'reclient', 'no_widevine_cdm_host_verification', 'arm64', 'disable_widevine_signing', 'minimal_symbols', 'pgo_phase_1', 'release', 'disable_stripping'
     ],
 
     'official_mac_pgo_with_symbols': [
-      'official', 'reclient', 'no_widevine_cdm_host_verification', 'disable_widevine_signing', 'minimal_symbols', 'pgo_phase_1', 'release'
+      'official', 'reclient', 'no_widevine_cdm_host_verification', 'x64', 'disable_widevine_signing', 'minimal_symbols', 'pgo_phase_1', 'release', 'disable_stripping'
     ],
 
     'official_minimal_symbols_android_arm64': [
@@ -1228,6 +1228,10 @@
       'gn_args': 'devtools_skip_typecheck=false',
     },
 
+    'disable_stripping': {
+      'gn_args': 'enable_stripping=false',
+    },
+
     'disable_widevine_signing': {
       'gn_args': 'enable_widevine_cdm_host_verification = false'
     },
diff --git a/tools/mb/mb_config_expectations/chrome.pgo.json b/tools/mb/mb_config_expectations/chrome.pgo.json
index 5291928..0fc96f65 100644
--- a/tools/mb/mb_config_expectations/chrome.pgo.json
+++ b/tools/mb/mb_config_expectations/chrome.pgo.json
@@ -82,6 +82,7 @@
     "gn_args": {
       "chrome_pgo_phase": 1,
       "dcheck_always_on": false,
+      "enable_stripping": false,
       "enable_widevine_cdm_host_verification": false,
       "ignore_missing_widevine_signing_cert": true,
       "is_chrome_branded": true,
@@ -97,12 +98,14 @@
     "gn_args": {
       "chrome_pgo_phase": 1,
       "dcheck_always_on": false,
+      "enable_stripping": false,
       "enable_widevine_cdm_host_verification": false,
       "ignore_missing_widevine_signing_cert": true,
       "is_chrome_branded": true,
       "is_debug": false,
       "is_official_build": true,
       "symbol_level": 1,
+      "target_cpu": "x64",
       "use_remoteexec": true,
       "v8_is_on_release_branch": true
     }
diff --git a/tools/mb/mb_config_expectations/tryserver.chrome.pgo.json b/tools/mb/mb_config_expectations/tryserver.chrome.pgo.json
index 9b25e948..35e10e8 100644
--- a/tools/mb/mb_config_expectations/tryserver.chrome.pgo.json
+++ b/tools/mb/mb_config_expectations/tryserver.chrome.pgo.json
@@ -82,6 +82,7 @@
     "gn_args": {
       "chrome_pgo_phase": 1,
       "dcheck_always_on": false,
+      "enable_stripping": false,
       "enable_widevine_cdm_host_verification": false,
       "ignore_missing_widevine_signing_cert": true,
       "is_chrome_branded": true,
@@ -97,12 +98,14 @@
     "gn_args": {
       "chrome_pgo_phase": 1,
       "dcheck_always_on": false,
+      "enable_stripping": false,
       "enable_widevine_cdm_host_verification": false,
       "ignore_missing_widevine_signing_cert": true,
       "is_chrome_branded": true,
       "is_debug": false,
       "is_official_build": true,
       "symbol_level": 1,
+      "target_cpu": "x64",
       "use_remoteexec": true,
       "v8_is_on_release_branch": true
     }
diff --git a/tools/metrics/actions/actions.xml b/tools/metrics/actions/actions.xml
index e141366..977fbf05 100644
--- a/tools/metrics/actions/actions.xml
+++ b/tools/metrics/actions/actions.xml
@@ -5500,6 +5500,15 @@
   <description>Please enter the description of this user action.</description>
 </action>
 
+<action name="BookmarkBar_ContextMenu_ToggleShowSavedTabGroups">
+  <owner>dljames@chromium.org</owner>
+  <owner>chrome-desktop-ui-sea@google.com</owner>
+  <description>
+    The user toggled show saved tab groups bar from the bookmark bar context
+    menu.
+  </description>
+</action>
+
 <action name="BookmarkBar_ContextMenu_Undo">
   <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
   <description>Please enter the description of this user action.</description>
@@ -8342,6 +8351,7 @@
 </action>
 
 <action name="CookieControls.Bubble.CookiesInUse">
+  <obsolete>Obsolete as of 2024</obsolete>
   <owner>dullweber@chromium.org</owner>
   <owner>huanzhong@chromium.org</owner>
   <description>
@@ -8350,6 +8360,7 @@
 </action>
 
 <action name="CookieControls.Bubble.NotWorking">
+  <obsolete>Obsolete as of 2024</obsolete>
   <owner>dullweber@chromium.org</owner>
   <owner>huanzhong@chromium.org</owner>
   <description>
@@ -8358,6 +8369,7 @@
 </action>
 
 <action name="CookieControls.Bubble.Opened">
+  <obsolete>Obsolete as of 2024</obsolete>
   <owner>dullweber@chromium.org</owner>
   <owner>huanzhong@chromium.org</owner>
   <description>The cookie controls UI was opened.</description>
@@ -8384,6 +8396,7 @@
 </action>
 
 <action name="CookieControls.Bubble.TooltipShown">
+  <obsolete>Obsolete as of 2024</obsolete>
   <owner>dullweber@chromium.org</owner>
   <owner>huanzhong@chromium.org</owner>
   <description>
@@ -8498,6 +8511,7 @@
 </action>
 
 <action name="CookieControls.OtherConfidence.Opened">
+  <obsolete>Obsolete as of 2024</obsolete>
   <owner>kmg@google.com</owner>
   <owner>sauski@google.com</owner>
   <description>
@@ -8506,6 +8520,7 @@
 </action>
 
 <action name="CookieControls.OtherConfidence.Shown">
+  <obsolete>Obsolete as of 2024</obsolete>
   <owner>kmg@google.com</owner>
   <owner>sauski@google.com</owner>
   <description>
@@ -9050,6 +9065,7 @@
 </action>
 
 <action name="DesktopFeed.FollowSite">
+  <obsolete>Removed as of 05/2024.</obsolete>
   <owner>jianli@chromium.org</owner>
   <owner>feed@chromium.org</owner>
   <description>
@@ -9058,6 +9074,7 @@
 </action>
 
 <action name="DesktopFeed.UnfollowSite">
+  <obsolete>Removed as of 05/2024.</obsolete>
   <owner>jianli@chromium.org</owner>
   <owner>feed@chromium.org</owner>
   <description>
@@ -9729,6 +9746,24 @@
   </description>
 </action>
 
+<action name="DownloadNotificationV2.Button_EditWithMediaApp">
+  <owner>andrewxu@chromium.org</owner>
+  <owner>cros-status-area-eng@google.com</owner>
+  <description>
+    User clicks &quot;Open and Edit&quot; button on a download notification with
+    the downloads integration V2 feature enabled.
+  </description>
+</action>
+
+<action name="DownloadNotificationV2.Button_OpenWithMediaApp">
+  <owner>andrewxu@chromium.org</owner>
+  <owner>cros-status-area-eng@google.com</owner>
+  <description>
+    User clicks &quot;Open&quot; button on a download notification with the
+    downloads integration V2 feature enabled.
+  </description>
+</action>
+
 <action name="DownloadNotificationV2.Button_Pause">
   <owner>andrewxu@chromium.org</owner>
   <owner>cros-system-ui-productivity-eng@google.com</owner>
@@ -26257,7 +26292,7 @@
   <owner>feed@chromium.org</owner>
   <description>
     Recorded when the NTP detects a broken view hierarchy and repairs itself.
-    TODO(crbug.com/1262536): Remove this when issue is fixed.
+    TODO(crbug.com/40799579): Remove this when issue is fixed.
   </description>
 </action>
 
@@ -32748,7 +32783,7 @@
   <owner>kartoffel-core@google.com</owner>
   <description>
     User removed a site that was previously in their allowed sites list.
-    TODO(crbug.com/1378703): Deprecate this action in favor of
+    TODO(crbug.com/40244046): Deprecate this action in favor of
     Settings.PrivacySandbox.Fledge.SiteRemoved after the feature is launched.
   </description>
 </action>
@@ -32759,7 +32794,7 @@
   <owner>kartoffel-core@google.com</owner>
   <description>
     User removed a topic that was previously in their allowed topics list.
-    TODO(crbug.com/1378703): Deprecate this action in favor of
+    TODO(crbug.com/40244046): Deprecate this action in favor of
     Settings.PrivacySandbox.Topics.TopicRemoved after the feature is launched.
   </description>
 </action>
@@ -33082,7 +33117,7 @@
   <owner>kartoffel-core@google.com</owner>
   <description>
     User added back a site that was previously in their removed sites list.
-    TODO(crbug.com/1378703): Deprecate this action in favor of
+    TODO(crbug.com/40244046): Deprecate this action in favor of
     Settings.PrivacySandbox.Fledge.SiteAdded after the feature is launched.
   </description>
 </action>
@@ -33093,7 +33128,7 @@
   <owner>kartoffel-core@google.com</owner>
   <description>
     User added back a topic that was previously in their removed topics list.
-    TODO(crbug.com/1378703): Deprecate this action in favor of
+    TODO(crbug.com/40244046): Deprecate this action in favor of
     Settings.PrivacySandbox.Topics.TopicAdded after the feature is launched.
   </description>
 </action>
@@ -34484,6 +34519,16 @@
   </description>
 </action>
 
+<action name="ShowYouTubeMusicPremiumPage">
+  <owner>hongyulong@google.com</owner>
+  <owner>richui@google.com</owner>
+  <owner>chromeos-wms@google.com</owner>
+  <description>
+    Recorded when a user clicks the Learn More button on the focus mode panel
+    and navigates to the page which shows the user with different premium plans.
+  </description>
+</action>
+
 <action name="Shutdown">
   <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
   <description>Please enter the description of this user action.</description>
@@ -34890,6 +34935,104 @@
   </description>
 </action>
 
+<action name="Signin_AccountsTableView_AccountDetail">
+  <owner>jlebel@chromium.org</owner>
+  <owner>chrome-signin-team@google.com</owner>
+  <description>
+    Recorded when the user opens the detail alert dialog (to choose between
+    MyAccount UI or remove the identity) in the accounts table view. iOS only.
+  </description>
+</action>
+
+<action name="Signin_AccountsTableView_AccountDetail_Cancel">
+  <owner>jlebel@chromium.org</owner>
+  <owner>chrome-signin-team@google.com</owner>
+  <description>
+    Recorded when the user cancels the account detail alert dialog in the
+    accounts table view. iOS only.
+  </description>
+</action>
+
+<action name="Signin_AccountsTableView_AccountDetail_OpenMyGoogleUI">
+  <owner>jlebel@chromium.org</owner>
+  <owner>chrome-signin-team@google.com</owner>
+  <description>
+    Recorded when the user opens MyGoogleUI from the accounts table view. iOS
+    only.
+  </description>
+</action>
+
+<action name="Signin_AccountsTableView_AccountDetail_RemoveAccount">
+  <owner>jlebel@chromium.org</owner>
+  <owner>chrome-signin-team@google.com</owner>
+  <description>
+    Recorded when the user asks to remove an identity in the accounts table
+    view. iOS only.
+  </description>
+</action>
+
+<action
+    name="Signin_AccountsTableView_AccountDetail_RemoveAccount_ConfirmationCancelled">
+  <owner>jlebel@chromium.org</owner>
+  <owner>chrome-signin-team@google.com</owner>
+  <description>
+    Recorded when the user cancels the account removal action in the accounts
+    table view. iOS only.
+  </description>
+</action>
+
+<action name="Signin_AccountsTableView_AccountDetail_RemoveAccount_Confirmed">
+  <owner>jlebel@chromium.org</owner>
+  <owner>chrome-signin-team@google.com</owner>
+  <description>
+    Recorded when the user confirms the account removal action in the accounts
+    table view. iOS only.
+  </description>
+</action>
+
+<action name="Signin_AccountsTableView_AddAccount">
+  <owner>jlebel@chromium.org</owner>
+  <owner>chrome-signin-team@google.com</owner>
+  <description>
+    Recorded when the user taps on &quot;Add Account…&quot; button in the
+    accounts table view. iOS only.
+  </description>
+</action>
+
+<action name="Signin_AccountsTableView_Close">
+  <owner>jlebel@chromium.org</owner>
+  <owner>chrome-signin-team@google.com</owner>
+  <description>
+    Recorded when the user closes the accounts table view. iOS only.
+  </description>
+</action>
+
+<action name="Signin_AccountsTableView_ErrorButton">
+  <owner>jlebel@chromium.org</owner>
+  <owner>chrome-signin-team@google.com</owner>
+  <description>
+    Recorded when the user taps on &quot;Error&quot; button in the accounts
+    table view. iOS only.
+  </description>
+</action>
+
+<action name="Signin_AccountsTableView_Open">
+  <owner>jlebel@chromium.org</owner>
+  <owner>chrome-signin-team@google.com</owner>
+  <description>
+    Recorded when the user opens the account table view. iOS only.
+  </description>
+</action>
+
+<action name="Signin_AccountsTableView_SignOut">
+  <owner>jlebel@chromium.org</owner>
+  <owner>chrome-signin-team@google.com</owner>
+  <description>
+    Recorded when the user taps on &quot;Sign-out&quot; button in the accounts
+    table view. iOS only.
+  </description>
+</action>
+
 <action name="Signin_AddAccountToDevice">
   <owner>gogerald@chromium.org</owner>
   <description>Recorded when the add account dialog is opened.</description>
@@ -34954,7 +35097,7 @@
   <description>
     This user action is triggered when the error dialog is presented. This user
     action will help to understand crbug.com/1482623 using breadcrumbs.
-    TODO(crbug.com/1482623): Remove once the bug will be closed.
+    TODO(crbug.com/40072272): Remove once the bug will be closed.
   </description>
 </action>
 
@@ -34985,7 +35128,7 @@
   <description>
     This user action is triggered when the managed confirmation dialog is
     presented. This user action will help to understand crbug.com/1482623 using
-    breadcrumbs. TODO(crbug.com/1482623): Remove once the bug will be closed.
+    breadcrumbs. TODO(crbug.com/40072272): Remove once the bug will be closed.
   </description>
 </action>
 
@@ -35016,7 +35159,7 @@
   <description>
     This user action is triggered when the switch account dialog is presented.
     This user action will help to understand crbug.com/1482623 using
-    breadcrumbs. TODO(crbug.com/1482623): Remove once the bug will be closed.
+    breadcrumbs. TODO(crbug.com/40072272): Remove once the bug will be closed.
   </description>
 </action>
 
@@ -39389,6 +39532,24 @@
   </description>
 </action>
 
+<action name="TabGroups_SavedTabGroups_ContextMenuTriggeredFromEverythingMenu">
+  <owner>dljames@chromium.org</owner>
+  <owner>chrome-desktop-ui-sea@google.com</owner>
+  <description>
+    User triggered the context menu of a saved tab group item from the
+    Everything menu.
+  </description>
+</action>
+
+<action
+    name="TabGroups_SavedTabGroups_CreateNewGroupTriggeredFromEverythingMenu">
+  <owner>dljames@chromium.org</owner>
+  <owner>chrome-desktop-ui-sea@google.com</owner>
+  <description>
+    User pressed &quot;Create New Tab Group&quot; from the Everything menu.
+  </description>
+</action>
+
 <action name="TabGroups_SavedTabGroups_Deleted">
   <owner>dljames@chromium.org</owner>
   <owner>chrome-desktop-ui-sea@google.com</owner>
@@ -39400,6 +39561,12 @@
   </description>
 </action>
 
+<action name="TabGroups_SavedTabGroups_EverythingButtonPressed">
+  <owner>dljames@chromium.org</owner>
+  <owner>chrome-desktop-ui-sea@google.com</owner>
+  <description>User pressed the Everything button.</description>
+</action>
+
 <action name="TabGroups_SavedTabGroups_Focused">
   <owner>dljames@chromium.org</owner>
   <owner>chrome-desktop-ui-sea@google.com</owner>
@@ -39418,6 +39585,24 @@
   </description>
 </action>
 
+<action name="TabGroups_SavedTabGroups_OpenedFromAppMenu">
+  <owner>dljames@chromium.org</owner>
+  <owner>chrome-desktop-ui-sea@google.com</owner>
+  <description>
+    User opened a SavedTabGroup by clicking a menu item from the &quot;Tab
+    groups&quot; submenu in 3-dot menu.
+  </description>
+</action>
+
+<action name="TabGroups_SavedTabGroups_OpenedFromEverythingMenu">
+  <owner>dljames@chromium.org</owner>
+  <owner>chrome-desktop-ui-sea@google.com</owner>
+  <description>
+    User opened a SavedTabGroup by clicking a menu item from the Everything
+    menu.
+  </description>
+</action>
+
 <action name="TabGroups_SavedTabGroups_Pinned">
   <owner>dljames@chromium.org</owner>
   <owner>chrome-desktop-ui-sea@google.com</owner>
@@ -39486,6 +39671,15 @@
   </description>
 </action>
 
+<action name="TabGroups_TabGroupBubble_DeleteGroup">
+  <owner>dpenning@chromium.org</owner>
+  <owner>chrome-desktop-ui-sea@google.com</owner>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <description>
+    User deleted an existing tab group by clicking the delete button.
+  </description>
+</action>
+
 <action name="TabGroups_TabGroupBubble_GroupSaved">
   <owner>dpenning@chromium.org</owner>
   <owner>chrome-desktop-ui-sea@google.com</owner>
@@ -42236,6 +42430,7 @@
       label="For AddToHomescreen IPH feature."/>
   <suffix name="AddToHomescreenTextBubble"
       label="For AddToHomescreen IPH feature using text bubble (obsolete)."/>
+  <suffix name="AppSpecificHistory" label="For App Specific History feature."/>
   <suffix name="AutoDarkOptOut" label="For AutoDarkOptOut dialog feature."/>
   <suffix name="AutoDarkUserEducationMessage"
       label="For AutoDarkUserEducationMessage feature."/>
@@ -42316,6 +42511,8 @@
   <suffix name="DesktopPwaInstall" label="For desktop PWA install icon."/>
   <suffix name="DesktopPWAsLinkCapturingLaunch"
       label="For desktop PWAs launched via Link Capturing."/>
+  <suffix name="DesktopReEngagement"
+      label="For Desktop Re-Engagement feature."/>
   <suffix name="DesktopSharedHighlighting"
       label="For DesktopSharedHighlighting feature."/>
   <suffix name="DesktopSnoozeFeature"
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index 40ac80b..21341ff 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -10952,10 +10952,10 @@
   <int value="4444" label="DisableThirdPartyStoragePartitioning"/>
   <int value="4445" label="ServiceWorkerFetchHandlerAddedAfterInitialization"/>
   <int value="4446" label="ObsoleteCreateImageBitmapImageOrientationNone"/>
-  <int value="4447" label="WindowManagementPermissionDescriptorUsed"/>
-  <int value="4448" label="WindowPlacementPermissionDescriptorUsed"/>
-  <int value="4449" label="WindowManagementPermissionPolicyParsed"/>
-  <int value="4450" label="WindowPlacementPermissionPolicyParsed"/>
+  <int value="4447" label="OBSOLETE_kWindowManagementPermissionDescriptorUsed"/>
+  <int value="4448" label="OBSOLETE_kWindowPlacementPermissionDescriptorUsed"/>
+  <int value="4449" label="OBSOLETE_kWindowManagementPermissionPolicyParsed"/>
+  <int value="4450" label="OBSOLETE_kWindowPlacementPermissionPolicyParsed"/>
   <int value="4451" label="ContentDispositionInSvgUse"/>
   <int value="4452" label="SameDocumentCrossOriginInitiator"/>
   <int value="4453"
@@ -11525,6 +11525,16 @@
   <int value="4954" label="CSSScrollStartTarget"/>
   <int value="4955" label="FedCmContinueOnResponse"/>
   <int value="4956" label="FedCmMultipleIdentityProviders"/>
+  <int value="4957" label="FedCmWithStorageAccessAPI"/>
+  <int value="4958" label="CSSSelectorUserValid"/>
+  <int value="4959" label="CSSSelectorUserInvalid"/>
+  <int value="4960" label="CrossShadowAtomicMove"/>
+  <int value="4961" label="PrefersReducedMotionMediaFeature"/>
+  <int value="4962" label="PrefersReducedTransparencyMediaFeature"/>
+  <int value="4963" label="PrefersReducedDataMediaFeature"/>
+  <int value="4964" label="ScriptingMediaFeature"/>
+  <int value="4965" label="InvertedColorsMediaFeature"/>
+  <int value="4966" label="CSSLightDark"/>
 </enum>
 
 <enum name="FeaturePolicyFeature">
@@ -11654,6 +11664,18 @@
   <int value="118" label="SpeakerSelection"/>
 </enum>
 
+<enum name="FedCmContinueOnPopupResult">
+  <int value="0" label="TokenReceived"/>
+  <int value="1" label="WindowClosed"/>
+</enum>
+
+<enum name="FedCmContinueOnPopupStatus">
+  <int value="0" label="PopupOpened"/>
+  <int value="1" label="UrlNotSameOrigin"/>
+  <int value="2" label="PopupNotAllowed"/>
+  <int value="3" label="UrlNotSameOriginAndPopupNotAllowed"/>
+</enum>
+
 <enum name="FedCmDisconnectStatus">
   <int value="0" label="Success"/>
   <int value="1" label="TooManyRequests"/>
@@ -11736,7 +11758,7 @@
 </enum>
 
 <enum name="FedCmRequestIdTokenStatus">
-  <int value="0" label="Success"/>
+  <int value="0" label="SuccessUsingTokenInHttpResponse"/>
   <int value="1" label="TooManyRequests"/>
   <int value="2" label="Aborted"/>
   <int value="3" label="UnhandledRequest"/>
@@ -11781,6 +11803,8 @@
   <int value="42" label="OtherIdpChosen"/>
   <int value="43" label="MissingTransientUserActivation"/>
   <int value="44" label="ReplacedByButtonMode"/>
+  <int value="45" label="ContinuationPopupClosedByUser"/>
+  <int value="46" label="SuccessUsingIdentityProviderResolve"/>
 </enum>
 
 <enum name="FedCmRevokeStatus">
@@ -11812,6 +11836,12 @@
   <int value="1" label="Button"/>
 </enum>
 
+<enum name="FedCmRpParameters">
+  <int value="0" label="Has parameters"/>
+  <int value="1" label="Has non-default scope"/>
+  <int value="2" label="Has parameters and non-default scope"/>
+</enum>
+
 <enum name="FedCmSignInStateMatchStatus">
   <int value="0" label="Success"/>
   <int value="1" label="IdpClaimedSignIn"/>
@@ -11819,10 +11849,26 @@
 </enum>
 
 <enum name="FedCmTokenResponseType">
-  <int value="0" label="Token received and no error received"/>
-  <int value="1" label="Token received and error received"/>
-  <int value="2" label="Token not received and error not received"/>
-  <int value="3" label="Token not received and error received"/>
+  <int value="0"
+      label="Token received and error not received and continue_on not
+             received"/>
+  <int value="1"
+      label="Token received and error received and continue_on not received"/>
+  <int value="2"
+      label="Token not received and error not received and continue_on not
+             received"/>
+  <int value="3"
+      label="Token not received and error received and continue_on not
+             received"/>
+  <int value="4"
+      label="Token received and error not received and continue_on received"/>
+  <int value="5"
+      label="Token received and error received and continue_on received"/>
+  <int value="6"
+      label="Token not received and error not received and continue_on
+             received"/>
+  <int value="7"
+      label="Token not received and error received and continue_on received"/>
 </enum>
 
 <enum name="FeedbackAppContactUserConsentType">
@@ -11911,6 +11957,7 @@
   <int value="39" label="Overview Grid"/>
   <int value="40" label="Snap Groups"/>
   <int value="41" label="Birch"/>
+  <int value="42" label="Borealis"/>
 </enum>
 
 <!-- Keep elements in sync with components/feed/core/feed_logging_metrics.cc and
@@ -15319,6 +15366,7 @@
   <int value="37" label="Installer"/>
   <int value="38" label="First run"/>
   <int value="39" label="Welcome Tour"/>
+  <int value="40" label="Focus Mode panel"/>
 </enum>
 
 <enum name="LcppHintStatus">
@@ -16853,6 +16901,7 @@
       label="OmniboxUIExperimentHideSteadyStateUrlTrivialSubdomains:enabled"/>
   <int value="-1931712004" label="ConsolidatedSiteStorageControls:disabled"/>
   <int value="-1930720286" label="nacl-debug-mask"/>
+  <int value="-1930656203" label="TabGroupSyncForceOff:disabled"/>
   <int value="-1930487223"
       label="EnableFrameSinkDesktopCapturerInCrd:disabled"/>
   <int value="-1928198763" label="enable-async-dns"/>
@@ -16980,6 +17029,7 @@
   <int value="-1875836063" label="UserNotes:disabled"/>
   <int value="-1875383510" label="UseGoogleLocalNtp:disabled"/>
   <int value="-1875168316" label="UseMonitorColorSpace:disabled"/>
+  <int value="-1874937563" label="cast-streaming-force-disable-hardware-vp9"/>
   <int value="-1874908826" label="enable-instant-search-clicks"/>
   <int value="-1874842483" label="FeedLoadingPlaceholder:disabled"/>
   <int value="-1874349308" label="PwaUniversalInstallUi:enabled"/>
@@ -17863,6 +17913,7 @@
   <int value="-1478137998" label="lite-video-default-downlink-bandwidth-kbps"/>
   <int value="-1477686864" label="OmniboxRichAutocompletion:enabled"/>
   <int value="-1477560322" label="kiosk"/>
+  <int value="-1477491889" label="cast-streaming-force-enable-hardware-vp9"/>
   <int value="-1476930281" label="Windows10CustomTitlebar:enabled"/>
   <int value="-1475773986" label="FeedBoCSigninInterstitial:enabled"/>
   <int value="-1474724634"
@@ -17938,6 +17989,8 @@
   <int value="-1450657485" label="EnableHardwareMirrorMode:enabled"/>
   <int value="-1450576851" label="OmniboxUIExperimentVerticalLayout:enabled"/>
   <int value="-1449928353" label="TabletToolbarReordering:enabled"/>
+  <int value="-1449728470"
+      label="LegacyTechReportEnableCookieIssueReports:disabled"/>
   <int value="-1449590570" label="RestrictGamepadAccess:enabled"/>
   <int value="-1449358747" label="RemoveStatusBarInWebApps:enabled"/>
   <int value="-1448511207" label="UseMessagesStagingUrl:disabled"/>
@@ -18023,7 +18076,6 @@
       label="UserDisplayModeSyncStandaloneMitigation:enabled"/>
   <int value="-1412230070" label="query-tiles-instant-background-task"/>
   <int value="-1411980923" label="LinkCapturingUiUpdate:enabled"/>
-  <int value="-1411777757" label="WebRtcSendPacketBatch:enabled"/>
   <int value="-1411733990" label="OmniboxDedupeGoogleDriveURLs:disabled"/>
   <int value="-1411459387" label="EnterprisePolicyOnSignin:enabled"/>
   <int value="-1411003295" label="disable-encrypted-media"/>
@@ -18722,6 +18774,8 @@
   <int value="-1106191827" label="VirtualKeyboardNewHeader:enabled"/>
   <int value="-1105686819" label="ShareUsageRanking:enabled"/>
   <int value="-1105637876" label="FilteringScrollPrediction:enabled"/>
+  <int value="-1105274313"
+      label="SecurePaymentConfirmationNetworkAndIssuerIcons:enabled"/>
   <int value="-1104914981" label="frame-throttle-fps"/>
   <int value="-1104746914" label="CrostiniVirtualKeyboardSupport:enabled"/>
   <int value="-1104609838" label="UserMediaCaptureOnFocus:enabled"/>
@@ -18778,6 +18832,7 @@
   <int value="-1081295536"
       label="ContextMenuSearchAndShopWithGoogleLens:enabled"/>
   <int value="-1080893507" label="MessagesForAndroidStackingAnimation:enabled"/>
+  <int value="-1080700029" label="ShowFeaturedEnterpriseSiteSearch:disabled"/>
   <int value="-1080300455" label="ProductivityLauncherImageSearch:disabled"/>
   <int value="-1080220553" label="PrinterSettingsRevamp:enabled"/>
   <int value="-1078892725" label="ReduceAcceptLanguage:enabled"/>
@@ -19788,6 +19843,7 @@
   <int value="-622685174" label="enable-pdf-material-ui"/>
   <int value="-621382525" label="VizDisplayCompositor:enabled"/>
   <int value="-620902693" label="PageInfoHistory:disabled"/>
+  <int value="-620801681" label="EnableCertManagementUIV2:disabled"/>
   <int value="-620030047" label="CrosCompUpdates:disabled"/>
   <int value="-619967827" label="CrosWebAppShortcutUiUpdate:disabled"/>
   <int value="-619740638" label="ListAllDisplayModes:enabled"/>
@@ -20030,6 +20086,7 @@
   <int value="-518104091" label="NewAudioRenderingMixingStrategy:enabled"/>
   <int value="-518037829" label="ProjectorExcludeTranscript:disabled"/>
   <int value="-517913118" label="OmahaMinSdkVersionAndroid:enabled"/>
+  <int value="-517231584" label="CameraAppPdfOcr:disabled"/>
   <int value="-516845951" label="enable-embedded-extension-options"/>
   <int value="-516269317" label="HttpsFirstModeV2:enabled"/>
   <int value="-515913489" label="EphemeralTabUsingBottomSheet:disabled"/>
@@ -20054,6 +20111,7 @@
   <int value="-507719964" label="FeedbackOnContinueSectionRemove:disabled"/>
   <int value="-507183181" label="CommerceHintAndroid:enabled"/>
   <int value="-507066244" label="AndroidDarkSearch:enabled"/>
+  <int value="-506932359" label="CameraAppPdfOcr:enabled"/>
   <int value="-506706655" label="respect-autocomplete-off-autofill"/>
   <int value="-506366023" label="VizHitTest:enabled"/>
   <int value="-506064880" label="EnableIPH:disabled"/>
@@ -20710,6 +20768,7 @@
   <int value="-216219963" label="ash-shelf-color-scheme"/>
   <int value="-216189310"
       label="DebugHistoryInterventionNoUserActivation:enabled"/>
+  <int value="-215930330" label="EnableNearbyBleV2:disabled"/>
   <int value="-215580565"
       label="OmniboxEnableClipboardProviderImageSuggestions:disabled"/>
   <int value="-215534141" label="NativeWindowNavButtons:enabled"/>
@@ -21501,6 +21560,8 @@
   <int value="132907995" label="DownloadProgressMessage:enabled"/>
   <int value="133215861" label="SystemEmojiPickerMojoSearch:enabled"/>
   <int value="133482330" label="AppNotificationStatusMessaging:enabled"/>
+  <int value="133529502"
+      label="EnableNearbyBluetoothClassicAdvertising:enabled"/>
   <int value="134009318" label="FastPairSavedDevices:enabled"/>
   <int value="134136822" label="VcDlcUi:enabled"/>
   <int value="136924140" label="OfflineIndicatorV2:enabled"/>
@@ -21957,6 +22018,7 @@
   <int value="335976368" label="LoadCryptoTokenExtension:disabled"/>
   <int value="335976733" label="NotificationStackingBarRedesign:enabled"/>
   <int value="336105835" label="CameraAppTimeLapse:disabled"/>
+  <int value="336195550" label="AccessibilitySelectToSpeakShortcut:enabled"/>
   <int value="336429189" label="DisallowUnsafeHttpDownloads:disabled"/>
   <int value="336830575" label="DeviceForceScheduledReboot:enabled"/>
   <int value="337637199" label="HttpsFirstModeIncognito:disabled"/>
@@ -22034,6 +22096,8 @@
       label="AutofillUpstreamUseAlternateSecureDataType:disabled"/>
   <int value="365068212" label="PiexWasm:disabled"/>
   <int value="365467768" label="prefetch-search-results"/>
+  <int value="365707981"
+      label="SecurePaymentConfirmationNetworkAndIssuerIcons:disabled"/>
   <int value="365737168" label="SingleTouchSelect:disabled"/>
   <int value="366524741"
       label="ArcTrackpadScrollTouchscreenEmulation:disabled"/>
@@ -22269,6 +22333,7 @@
   <int value="471224152" label="WinUseHybridSpellChecker:enabled"/>
   <int value="471519375" label="NewOsSettingsSearch:disabled"/>
   <int value="471560693" label="webview-verbose-logging"/>
+  <int value="471865485" label="EnableNearbyBleV2ExtendedAdvertising:enabled"/>
   <int value="471969274" label="MediaControlsExpandGesture:enabled"/>
   <int value="473296799" label="NtpBackgroundImageErrorDetection:disabled"/>
   <int value="473958125" label="OmniboxWrapPopupPosition:enabled"/>
@@ -22350,6 +22415,7 @@
   <int value="508272289" label="SharedHighlightingAmp:disabled"/>
   <int value="510066229"
       label="AutofillEnforceMinRequiredFieldsForQuery:enabled"/>
+  <int value="510493780" label="EnableCertManagementUIV2:enabled"/>
   <int value="510759575" label="LeftHandSideActivityIndicators:disabled"/>
   <int value="510814146" label="OfflineBookmarks:enabled"/>
   <int value="510833540" label="UseOutOfProcessVideoDecoding:enabled"/>
@@ -22640,6 +22706,7 @@
   <int value="644189071" label="PermissionsBlacklist:enabled"/>
   <int value="644526367" label="TerminalMultiProfile:disabled"/>
   <int value="645518695" label="EolIncentive:enabled"/>
+  <int value="646163532" label="CameraAppPreviewOcr:enabled"/>
   <int value="646252875" label="ReadItLaterInMenu:enabled"/>
   <int value="646269021" label="UnifiedSidePanel:disabled"/>
   <int value="646738320" label="disable-gesture-editing"/>
@@ -22925,6 +22992,7 @@
   <int value="762073261" label="HideTabOnTabSwitcher:enabled"/>
   <int value="762324154" label="ZeroSuggestPrefetchingOnWeb:disabled"/>
   <int value="762700519" label="enable-checker-imaging"/>
+  <int value="763629028" label="AutofillSkipAndroidBottomSheetForIban:enabled"/>
   <int value="763667542"
       label="AutofillFillCreditCardAsPerFormatString:enabled"/>
   <int value="763947368" label="HomepageLocationPolicy:disabled"/>
@@ -23288,6 +23356,7 @@
   <int value="929462705" label="disable-link-disambiguation-popup"/>
   <int value="929599043" label="PeripheralNotification:enabled"/>
   <int value="930187600" label="WebAssemblyExperimentalJSPI:enabled"/>
+  <int value="930830185" label="EnableNearbyBleV2:enabled"/>
   <int value="931603226" label="ArcTouchscreenEmulation:enabled"/>
   <int value="932468127" label="LauncherPulsingBlocksRefresh:enabled"/>
   <int value="933696491" label="TailoredSecurityDesktopNotice:enabled"/>
@@ -23642,6 +23711,7 @@
   <int value="1091631619" label="disable-accelerated-video-encode"/>
   <int value="1092296990" label="EnableMultiMonitorsInCrd:disabled"/>
   <int value="1092896354" label="EnableFullscreenAppList:disabled"/>
+  <int value="1093479250" label="AccessibilitySelectToSpeakShortcut:disabled"/>
   <int value="1093763764" label="SafeSitesFilterBehaviorPolicyAndroid:enabled"/>
   <int value="1093859961" label="RelatedSearchesSimplifiedUx:disabled"/>
   <int value="1094095931" label="enable-vulkan"/>
@@ -23746,6 +23816,8 @@
   <int value="1135813530" label="FileSystemObserver:enabled"/>
   <int value="1135893278" label="BruschettaAlphaMigrate:enabled"/>
   <int value="1136409654" label="EnableKeyboardRewriterFix:enabled"/>
+  <int value="1138141041"
+      label="NtpMostRelevantTabResumptionModuleDeviceIcon:enabled"/>
   <int value="1138345742" label="PreferConstantFrameRate:disabled"/>
   <int value="1138349838" label="EnableMDRoundedCornersOnDialogs:disabled"/>
   <int value="1138690502" label="PreconnectToSearch:enabled"/>
@@ -23978,6 +24050,8 @@
       label="ExperimentalAccessibilityGoogleTtsLanguagePacks:disabled"/>
   <int value="1240539446" label="SplitKeyboardRefactor:disabled"/>
   <int value="1241162639" label="debug-chime-notification"/>
+  <int value="1241399846"
+      label="SegmentationPlatformAndroidHomeModuleRanker:enabled"/>
   <int value="1241606015" label="OsFeedbackDialog:enabled"/>
   <int value="1242100010" label="AutofillProfileClientValidation:disabled"/>
   <int value="1242632259" label="ContentSuggestionsCategoryOrder:disabled"/>
@@ -24136,6 +24210,7 @@
       label="AutofillParseVcnCardOnFileStandaloneCvcFields:disabled"/>
   <int value="1302421166" label="NativeNotifications:disabled"/>
   <int value="1304523073" label="RetryGetVideoCaptureDeviceInfos:enabled"/>
+  <int value="1304609573" label="TabGroupSyncForceOff:enabled"/>
   <int value="1304636193" label="ArcEnableUnifiedAudioFocus:enabled"/>
   <int value="1304791513" label="EnableFakeMouseHeuristic:disabled"/>
   <int value="1304892658" label="AuthenticateUsingNewWindowsHelloApi:disabled"/>
@@ -24344,6 +24419,8 @@
   <int value="1402940985" label="kScrollableTabStripWithDragging:disabled"/>
   <int value="1403195370" label="ArcCupsApi:enabled"/>
   <int value="1403792475" label="ShareMenu:enabled"/>
+  <int value="1404592684"
+      label="LegacyTechReportEnableCookieIssueReports:enabled"/>
   <int value="1404726271" label="ReduceHorizontalFlingVelocity:enabled"/>
   <int value="1405459667" label="enable-fast-text-autosizing"/>
   <int value="1406046556" label="enable-slimming-paint-v175"/>
@@ -24363,6 +24440,8 @@
   <int value="1411679884"
       label="AutofillLocalCardMigrationUsesStrikeSystemV2:enabled"/>
   <int value="1412874669" label="EnableRestrictedWebApis:enabled"/>
+  <int value="1412998360"
+      label="AutofillSkipAndroidBottomSheetForIban:disabled"/>
   <int value="1413158119" label="WebRtcRemoteEventLog:disabled"/>
   <int value="1413334779" label="WebPaymentsMinimalUI:enabled"/>
   <int value="1413948819" label="NupPrinting:enabled"/>
@@ -24440,6 +24519,7 @@
   <int value="1446904662" label="CCTResizableWindowAboveNavbar:disabled"/>
   <int value="1446946673" label="DesktopRestructuredLanguageSettings:disabled"/>
   <int value="1447295459" label="SyncPseudoUSSApps:enabled"/>
+  <int value="1448537739" label="CameraAppPreviewOcr:disabled"/>
   <int value="1448622238" label="DeferTabSwitcherLayoutCreation:enabled"/>
   <int value="1448684258" label="TabHoverCardImages:enabled"/>
   <int value="1448974280"
@@ -24454,6 +24534,7 @@
   <int value="1451146739"
       label="CellularBypassESimInstallationConnectivityCheck:disabled"/>
   <int value="1451778280" label="AtomicMoveAPI:disabled"/>
+  <int value="1452411293" label="ShowFeaturedEnterpriseSiteSearch:enabled"/>
   <int value="1452546183" label="PwaPersistentNotification:enabled"/>
   <int value="1453393588" label="DiscoverFeedMultiColumn:disabled"/>
   <int value="1453448177"
@@ -24558,6 +24639,8 @@
       label="AutofillReplaceCachedWebElementsByRendererIds:disabled"/>
   <int value="1496135626" label="UploadCrashReportsUsingJobScheduler:enabled"/>
   <int value="1496571153" label="enable-webapk"/>
+  <int value="1496846973"
+      label="EnableNearbyBleV2ExtendedAdvertising:disabled"/>
   <int value="1497284913" label="WASAPIRawAudioCapture:enabled"/>
   <int value="1497609106" label="ContextualNudges:enabled"/>
   <int value="1497924954" label="js-flags"/>
@@ -24661,6 +24744,8 @@
   <int value="1541729827" label="NtpBackgroundImageErrorDetection:enabled"/>
   <int value="1543027970" label="EnableDisplayZoomSetting:disabled"/>
   <int value="1543349770" label="CastUseBlocklistForRemotingQuery:disabled"/>
+  <int value="1543776185"
+      label="SegmentationPlatformAndroidHomeModuleRanker:disabled"/>
   <int value="1544413751" label="PasswordStrengthIndicator:enabled"/>
   <int value="1544561349" label="PdfUseSkiaRenderer:disabled"/>
   <int value="1544887706" label="IPH_ExtensionsRequestAccessButton:enabled"/>
@@ -25054,6 +25139,8 @@
   <int value="1713509078" label="NewBaseUrlInheritanceBehavior:enabled"/>
   <int value="1713822664" label="WebXRHandInput:enabled"/>
   <int value="1714016217" label="EnableHeuristicPalmDetectionFilter:enabled"/>
+  <int value="1714018180"
+      label="EnableNearbyBluetoothClassicAdvertising:disabled"/>
   <int value="1714520147" label="MBIMode:disabled"/>
   <int value="1714751652" label="CaptivePortalErrorPage:disabled"/>
   <int value="1714922056" label="GlobalMediaControls:disabled"/>
@@ -25227,6 +25314,8 @@
   <int value="1793023585"
       label="ClickToCallContextMenuForSelectedText:disabled"/>
   <int value="1793434695" label="VideoPlayerAppHidden:enabled"/>
+  <int value="1793835436"
+      label="NtpMostRelevantTabResumptionModuleDeviceIcon:disabled"/>
   <int value="1794057460" label="AutofillProfileClientValidation:enabled"/>
   <int value="1794586887"
       label="AutofillEnableInfoBarAccountIndicationFooterForSingleAccountUsers:enabled"/>
@@ -29602,6 +29691,17 @@
   <int value="4" label="Long press when menu is already shown to shut down"/>
 </enum>
 
+<enum name="PowerConnectedChargingPorts">
+  <summary>
+    Connected charging ports on Chrome OS, as reported by the kernel.
+  </summary>
+  <int value="0" label="No ports connected"/>
+  <int value="1" label="First port connected"/>
+  <int value="2" label="Second port connected"/>
+  <int value="3" label="First and second ports connected"/>
+  <int value="4" label="More than two ports exist"/>
+</enum>
+
 <enum name="PowerDimEvent">
   <summary>
     The type of dimming/undimming events in powerd, as reported by the kernel.
@@ -29745,6 +29845,23 @@
   <int value="1" label="Lacros">Web page info comes from lacros chrome.</int>
 </enum>
 
+<enum name="PowerSupplyType">
+  <summary>
+    The type of power supply connected to a Chrome OS system, as reported by the
+    kernel.
+  </summary>
+  <int value="0" label="Other"/>
+  <int value="1" label="Mains"/>
+  <int value="2" label="USB"/>
+  <int value="3" label="USB_ACA"/>
+  <int value="4" label="USB_CDP"/>
+  <int value="5" label="USB_DCP"/>
+  <int value="6" label="USB_C"/>
+  <int value="7" label="USB_PD"/>
+  <int value="8" label="USB_PD_DRP"/>
+  <int value="9" label="BrickID (Apple)"/>
+</enum>
+
 <enum name="PredictionGrantLikelihood">
   <int value="0" label="Unknown"/>
   <int value="1" label="Very unlikely"/>
@@ -30977,6 +31094,13 @@
   <int value="143" label="IDC_CONTENT_CONTEXT_SEARCHWEBFORVIDEOFRAME"/>
   <int value="144" label="IDC_CONTENT_CONTEXT_OPENLINKPREVIEW"/>
   <int value="145" label="IDC_CONTENT_CONTEXT_AUTOFILL_FALLBACK_PLUS_ADDRESS"/>
+  <int value="146" label="IDC_CONTENT_CONTEXT_AUTOFILL_FALLBACK_PASSWORDS"/>
+  <int value="147"
+      label="IDC_CONTENT_CONTEXT_AUTOFILL_FALLBACK_PASSWORDS_SELECT_PASSWORD"/>
+  <int value="148"
+      label="IDC_CONTENT_CONTEXT_AUTOFILL_FALLBACK_PASSWORDS_IMPORT_PASSWORDS"/>
+  <int value="149"
+      label="IDC_CONTENT_CONTEXT_AUTOFILL_FALLBACK_PASSWORDS_SUGGEST_PASSWORD"/>
 </enum>
 
 <enum name="ReportProcessingResult">
@@ -34790,6 +34914,8 @@
   <int value="31" label="Isolated Web App: from graphical installer"/>
   <int value="32" label="Isolated Web App: from dev UI"/>
   <int value="33" label="almanac://install-app navigation"/>
+  <int value="34" label="WebAPK Backup and restore"/>
+  <int value="35" label="OOBE Recommended Apps screen on ChromeOS"/>
 </enum>
 
 <enum name="WebAppPreinstalledWindowExperimentUserGroup">
@@ -36281,6 +36407,8 @@
   <int value="86" label="Open Safety Menu settings UI"/>
   <int value="87" label="Show password manager checkup"/>
   <int value="88" label="Set browser as default"/>
+  <int value="89" label="Show saved tab groups"/>
+  <int value="90" label="Show Lens overlay"/>
 </enum>
 
 <enum name="XHRPageDismissalState">
diff --git a/tools/metrics/histograms/histograms_xml_files.gni b/tools/metrics/histograms/histograms_xml_files.gni
index b0e9b40..6aad003 100644
--- a/tools/metrics/histograms/histograms_xml_files.gni
+++ b/tools/metrics/histograms/histograms_xml_files.gni
@@ -85,6 +85,8 @@
   "//tools/metrics/histograms/metadata/event/histograms.xml",
   "//tools/metrics/histograms/metadata/extensions/enums.xml",
   "//tools/metrics/histograms/metadata/extensions/histograms.xml",
+  "//tools/metrics/histograms/metadata/facilitated_payments/enums.xml",
+  "//tools/metrics/histograms/metadata/facilitated_payments/histograms.xml",
   "//tools/metrics/histograms/metadata/families/enums.xml",
   "//tools/metrics/histograms/metadata/families/histograms.xml",
   "//tools/metrics/histograms/metadata/fastpair/enums.xml",
diff --git a/tools/metrics/histograms/metadata/accessibility/enums.xml b/tools/metrics/histograms/metadata/accessibility/enums.xml
index b194dde..6a29ec4 100644
--- a/tools/metrics/histograms/metadata/accessibility/enums.xml
+++ b/tools/metrics/histograms/metadata/accessibility/enums.xml
@@ -1380,6 +1380,11 @@
   <int value="1" label="Language unavailable"/>
   <int value="2" label="Voice unavailable"/>
   <int value="3" label="Invalid argument"/>
+  <int value="4" label="Synthesis failed"/>
+  <int value="5" label="Synthesis unavailable"/>
+  <int value="6" label="Audio busy"/>
+  <int value="7" label="Audio hardware"/>
+  <int value="8" label="Network"/>
 </enum>
 
 <enum name="ReaderModeEntryPoint">
diff --git a/tools/metrics/histograms/metadata/accessibility/histograms.xml b/tools/metrics/histograms/metadata/accessibility/histograms.xml
index aaf8f977..cd96812 100644
--- a/tools/metrics/histograms/metadata/accessibility/histograms.xml
+++ b/tools/metrics/histograms/metadata/accessibility/histograms.xml
@@ -1171,7 +1171,7 @@
 </histogram>
 
 <histogram name="Accessibility.EventProcessingTime3{Variation}" units="ms"
-    expires_after="2024-08-22">
+    expires_after="2024-10-28">
   <owner>grt@chromium.org</owner>
   <owner>aleventhal@chromium.org</owner>
   <summary>
@@ -1769,6 +1769,20 @@
   </summary>
 </histogram>
 
+<histogram name="Accessibility.PDF.OpenedWith{A11yFeature}.PdfOcr"
+    enum="BooleanExists" expires_after="2025-04-18">
+  <owner>kyungjunlee@google.com</owner>
+  <owner>chrome-a11y-core@google.com</owner>
+  <summary>
+    Record when PDF is opened with {A11yFeature} with or without PDF OCR.
+  </summary>
+  <token key="A11yFeature">
+    <variant name="ScreenReader"/>
+    <variant name="SelectToSpeak"
+        summary="Select-to-speak enabed (on ChromeOS only)"/>
+  </token>
+</histogram>
+
 <histogram name="Accessibility.PdfOcr.ActiveWhenInaccessiblePdfOpened"
     enum="BooleanExists" expires_after="2025-02-28">
   <owner>kyungjunlee@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/android/enums.xml b/tools/metrics/histograms/metadata/android/enums.xml
index 80b00a4..128c6c47 100644
--- a/tools/metrics/histograms/metadata/android/enums.xml
+++ b/tools/metrics/histograms/metadata/android/enums.xml
@@ -411,311 +411,130 @@
 </enum>
 
 <enum name="AndroidXWebkitApiCall">
-  <int value="0" label="ADD_WEB_MESSAGE_LISTENER">
-    WebViewCompat#addWebMessageListener(WebView,String,List(String),WebMessageListener)
-  </int>
-  <int value="1" label="CLEAR_PROXY_OVERRIDE">
-    ProxyController#clearProxyOverride(Executor,Runnable)
-  </int>
-  <int value="2" label="GET_PROXY_CONTROLLER">
-    ProxyController#getInstance()
-  </int>
-  <int value="3" label="GET_SAFE_BROWSING_PRIVACY_POLICY_URL">
-    WebViewCompat#getSafeBrowsingPrivacyPolicyUrl()
-  </int>
-  <int value="4" label="GET_SERVICE_WORKER_CONTROLLER">
-    ServiceWorkerControllerCompat#getInstance()
-  </int>
-  <int value="5" label="GET_SERVICE_WORKER_WEB_SETTINGS">
-    ServiceWorkerControllerCompat#getServiceWorkerWebSettings()
-  </int>
-  <int value="6" label="GET_TRACING_CONTROLLER">
-    TracingController#getInstance()
-  </int>
-  <int value="7" label="GET_WEBCHROME_CLIENT">
-    WebViewCompat#getWebchromeClient(WebView)
-  </int>
-  <int value="8" label="GET_WEBVIEW_CLIENT">
-    WebViewCompat#getWebViewClient(WebView)
-  </int>
-  <int value="9" label="GET_WEBVIEW_RENDERER">
-    WebViewCompat#getWebViewRenderer(WebView)
-  </int>
-  <int value="10" label="GET_WEBVIEW_RENDERER_CLIENT">
-    WebViewCompat#getWebViewRenderProcessClient(WebView)
-  </int>
-  <int value="11" label="INIT_SAFE_BROWSING">
-    WebViewCompat#startSafeBrowsing(Context,ValueCallback(Boolean))
-  </int>
-  <int value="12" label="INSERT_VISUAL_STATE_CALLBACK">
-    WebViewCompat#postVisualStateCallback(WebView,long,VisualStateCallback)
-  </int>
-  <int value="13" label="IS_MULTI_PROCESS_ENABLED">
-    WebViewCompat#isMultiProcessEnabled()
-  </int>
-  <int value="14" label="JS_REPLY_POST_MESSAGE">
-    JsReplyProxy#postMessage(String)
-  </int>
-  <int value="15" label="POST_MESSAGE_TO_MAIN_FRAME">
-    WebViewCompat#postWebMessage(WebView,WebMessageCompat,Uri)
-  </int>
-  <int value="16" label="REMOVE_WEB_MESSAGE_LISTENER">
-    WebViewCompat#removeWebMessageListener(WebView,String)
-  </int>
-  <int value="17" label="SERVICE_WORKER_SETTINGS_GET_ALLOW_CONTENT_ACCESS">
-    ServiceWorkerWebSettingsCompat#getAllowContentAccess()
-  </int>
-  <int value="18" label="SERVICE_WORKER_SETTINGS_GET_ALLOW_FILE_ACCESS">
-    ServiceWorkerWebSettingsCompat#getAllowFileAccess()
-  </int>
-  <int value="19" label="SERVICE_WORKER_SETTINGS_GET_BLOCK_NETWORK_LOADS">
-    ServiceWorkerWebSettingsCompat#getBlockNetworkLoads()
-  </int>
-  <int value="20" label="SERVICE_WORKER_SETTINGS_GET_CACHE_MODE">
-    ServiceWorkerWebSettingsCompat#getCacheMode()
-  </int>
-  <int value="21" label="SERVICE_WORKER_SETTINGS_SET_ALLOW_CONTENT_ACCESS">
-    ServiceWorkerWebSettingsCompat#setAllowContentAccess(boolean)
-  </int>
-  <int value="22" label="SERVICE_WORKER_SETTINGS_SET_ALLOW_FILE_ACCESS">
-    ServiceWorkerWebSettingsCompat#setAllowFileAccess(boolean)
-  </int>
-  <int value="23" label="SERVICE_WORKER_SETTINGS_SET_BLOCK_NETWORK_LOADS">
-    ServiceWorkerWebSettingsCompat#setBlockNetworkLoads(boolean)
-  </int>
-  <int value="24" label="SERVICE_WORKER_SETTINGS_SET_CACHE_MODE">
-    ServiceWorkerWebSettingsCompat#setCacheMode(int)
-  </int>
-  <int value="25" label="SET_PROXY_OVERRIDE">
-    ProxyController#setProxyOverride(Executor,Runnable)
-  </int>
-  <int value="26" label="SET_SAFE_BROWSING_ALLOWLIST_DEPRECATED_NAME">
-    WebViewCompat#setSafeBrowsingWhitelist(List(String),ValueCallback(Boolean))
-  </int>
-  <int value="27" label="SET_SERVICE_WORKER_CLIENT">
-    ServiceWorkerControllerCompat#setServiceWorkerClient(ServiceWorkerClientCompat)
-  </int>
-  <int value="28" label="SET_WEBVIEW_RENDERER_CLIENT">
-    WebViewCompat#setWebViewRenderProcessClient(WebView,WebViewRenderProcessClient)
-  </int>
-  <int value="29" label="TRACING_CONTROLLER_IS_TRACING">
-    TracingController#isTracing()
-  </int>
-  <int value="30" label="TRACING_CONTROLLER_START">
-    TracingController#start(TracingConfig)
-  </int>
-  <int value="31" label="TRACING_CONTROLLER_STOP">
-    TracingController#stop(OutputStream,Executor)
-  </int>
-  <int value="32" label="WEB_MESSAGE_GET_DATA">WebMessageCompat#getData()</int>
-  <int value="33" label="WEB_MESSAGE_GET_PORTS">
-    WebMessageCompat#getPorts()
-  </int>
-  <int value="34" label="WEB_MESSAGE_PORT_CLOSE">
-    WebMessagePortCompat#close()
-  </int>
-  <int value="35" label="WEB_MESSAGE_PORT_POST_MESSAGE">
-    WebMessagePortCompat#postMessage(WebMessageCompat)
-  </int>
-  <int value="36" label="WEB_MESSAGE_PORT_SET_CALLBACK">
-    WebMessagePortCompat#setCallback(WebMessageCallbackCompat)
-  </int>
-  <int value="37" label="WEB_MESSAGE_PORT_SET_CALLBACK_WITH_HANDLER">
-    WebMessagePortCompat#setCallback(Handler,WebMessageCallbackCompat)
-  </int>
-  <int value="38" label="WEB_RESOURCE_REQUEST_IS_REDIRECT">
-    WebResourceRequestCompat#isRedirect(WebResourceRequest)
-  </int>
-  <int value="39" label="WEB_SETTINGS_GET_DISABLED_ACTION_MODE_MENU_ITEMS">
-    WebSettingsCompat#getDisabledActionModeMenuItems(WebSettings)
-  </int>
-  <int value="40" label="WEB_SETTINGS_GET_FORCE_DARK">
-    WebSettingsCompat#getForceDark(WebSettings)
-  </int>
-  <int value="41" label="WEB_SETTINGS_GET_FORCE_DARK_BEHAVIOR">
-    WebSettingsCompat#getForceDarkStrategy(WebSettings)
-  </int>
-  <int value="42" label="WEB_SETTINGS_GET_OFFSCREEN_PRE_RASTER">
-    WebSettingsCompat#getOffscreenPreRaster(WebSettings)
-  </int>
-  <int value="43" label="WEB_SETTINGS_GET_SAFE_BROWSING_ENABLED">
-    WebSettingsCompat#getSafeBrowsingEnabled(WebSettings)
-  </int>
-  <int value="44" label="WEB_SETTINGS_GET_WILL_SUPPRESS_ERROR_PAGE">
-    WebSettingsCompat#willSuppressErrorPage(WebSettings)
-  </int>
-  <int value="45" label="WEB_SETTINGS_SET_DISABLED_ACTION_MODE_MENU_ITEMS">
-    WebSettingsCompat#setDisabledActionModeMenuItems(WebSettings,int)
-  </int>
-  <int value="46" label="WEB_SETTINGS_SET_FORCE_DARK">
-    WebSettingsCompat#setForceDark(WebSettings,int)
-  </int>
-  <int value="47" label="WEB_SETTINGS_SET_FORCE_DARK_BEHAVIOR">
-    WebSettingsCompat#setForceDarkStrategy(WebSettings,int)
-  </int>
-  <int value="48" label="WEB_SETTINGS_SET_OFFSCREEN_PRE_RASTER">
-    WebSettingsCompat#setOffscreenPreRaster(WebSettings,boolean)
-  </int>
-  <int value="49" label="WEB_SETTINGS_SET_SAFE_BROWSING_ENABLED">
-    WebSettingsCompat#setSafeBrowsingEnabled(WebSettings,boolean)
-  </int>
-  <int value="50" label="WEB_SETTINGS_SET_WILL_SUPPRESS_ERROR_PAGE">
-    WebSettingsCompat#setWillSuppressErrorPage(WebSettings,boolean)
-  </int>
-  <int value="51" label="WEBVIEW_RENDERER_TERMINATE">
-    WebViewRenderProcess#terminate()
-  </int>
-  <int value="52" label="ADD_DOCUMENT_START_SCRIPT">
-    WebViewCompat#addDocumentStartJavaScript(String,String[])
-  </int>
-  <int value="53" label="REMOVE_DOCUMENT_START_SCRIPT">
-    ScriptReference#remove()
-  </int>
-  <int value="54" label="SET_SAFE_BROWSING_ALLOWLIST">
-    WebViewCompat#setSafeBrowsingAllowlist(Set(String),ValueCallback(Boolean))
-  </int>
-  <int value="55" label="SET_PROXY_OVERRIDE_REVERSE_BYPASS">
-    ProxyController#setProxyOverride(String[][],String[],Runnable,Executor,boolean);
-  </int>
-  <int value="56" label="WEB_SETTINGS_SET_REQUESTED_WITH_HEADER_MODE">
-    WebSettingsCompat#setRequestedWithHeaderMode(int) (deprecated)
-  </int>
-  <int value="57" label="WEB_SETTINGS_GET_REQUESTED_WITH_HEADER_MODE">
-    WebViewCompat#WebSettingsCompat#getRequestedWithHeaderMode() (deprecated)
-  </int>
+  <int value="0" label="WebViewCompat.addWebMessageListener"/>
+  <int value="1" label="ProxyController.clearProxyOverride"/>
+  <int value="2" label="ProxyController.getInstance"/>
+  <int value="3" label="WebViewCompat.getSafeBrowsingPrivacyPolicyUrl"/>
+  <int value="4" label="ServiceWorkerControllerCompat.getInstance"/>
+  <int value="5"
+      label="ServiceWorkerControllerCompat.getServiceWorkerWebSettings"/>
+  <int value="6" label="TracingController.getInstance"/>
+  <int value="7" label="WebViewCompat.getWebchromeClient"/>
+  <int value="8" label="WebViewCompat.getWebViewClient"/>
+  <int value="9" label="WebViewCompat.getWebViewRenderer"/>
+  <int value="10" label="WebViewCompat.getWebViewRenderProcessClient"/>
+  <int value="11" label="WebViewCompat.startSafeBrowsing"/>
+  <int value="12" label="WebViewCompat.postVisualStateCallback"/>
+  <int value="13" label="WebViewCompat.isMultiProcessEnabled"/>
+  <int value="14" label="JsReplyProxy.postMessage"/>
+  <int value="15" label="WebViewCompat.postWebMessage"/>
+  <int value="16" label="WebViewCompat.removeWebMessageListener"/>
+  <int value="17" label="ServiceWorkerWebSettingsCompat.getAllowContentAccess"/>
+  <int value="18" label="ServiceWorkerWebSettingsCompat.getAllowFileAccess"/>
+  <int value="19" label="ServiceWorkerWebSettingsCompat.getBlockNetworkLoads"/>
+  <int value="20" label="ServiceWorkerWebSettingsCompat.getCacheMode"/>
+  <int value="21" label="ServiceWorkerWebSettingsCompat.setAllowContentAccess"/>
+  <int value="22" label="ServiceWorkerWebSettingsCompat.setAllowFileAccess"/>
+  <int value="23" label="ServiceWorkerWebSettingsCompat.setBlockNetworkLoads"/>
+  <int value="24" label="ServiceWorkerWebSettingsCompat.setCacheMode"/>
+  <int value="25" label="ProxyController.setProxyOverride"/>
+  <int value="26" label="WebViewCompat.setSafeBrowsingWhitelist"/>
+  <int value="27" label="ServiceWorkerControllerCompat.setServiceWorkerClient"/>
+  <int value="28" label="WebViewCompat.setWebViewRenderProcessClient"/>
+  <int value="29" label="TracingController.isTracing"/>
+  <int value="30" label="TracingController.start"/>
+  <int value="31" label="TracingController.stop"/>
+  <int value="32" label="WebMessageCompat.getData"/>
+  <int value="33" label="WebMessageCompat.getPorts"/>
+  <int value="34" label="WebMessagePortCompat.close"/>
+  <int value="35" label="WebMessagePortCompat.postMessage"/>
+  <int value="36" label="WebMessagePortCompat.setCallback"/>
+  <int value="37" label="WebMessagePortCompat.setCallback (with handler)"/>
+  <int value="38" label="WebResourceRequestCompat.isRedirect"/>
+  <int value="39" label="WebSettingsCompat.getDisabledActionModeMenuItems"/>
+  <int value="40" label="WebSettingsCompat.getForceDark"/>
+  <int value="41" label="WebSettingsCompat.getForceDarkStrategy"/>
+  <int value="42" label="WebSettingsCompat.getOffscreenPreRaster"/>
+  <int value="43" label="WebSettingsCompat.getSafeBrowsingEnabled"/>
+  <int value="44" label="WebSettingsCompat.willSuppressErrorPage"/>
+  <int value="45" label="WebSettingsCompat.setDisabledActionModeMenuItems"/>
+  <int value="46" label="WebSettingsCompat.setForceDark"/>
+  <int value="47" label="WebSettingsCompat.setForceDarkStrategy"/>
+  <int value="48" label="WebSettingsCompat.setOffscreenPreRaster"/>
+  <int value="49" label="WebSettingsCompat.setSafeBrowsingEnabled"/>
+  <int value="50" label="WebSettingsCompat.setWillSuppressErrorPage"/>
+  <int value="51" label="WebViewRenderProcess.terminate"/>
+  <int value="52" label="WebViewCompat.addDocumentStartJavaScript"/>
+  <int value="53" label="ScriptReference.remove"/>
+  <int value="54" label="WebViewCompat.setSafeBrowsingAllowlist"/>
+  <int value="55" label="ProxyController.setProxyOverride (reverse bypass)"/>
+  <int value="56"
+      label="WebSettingsCompat.setRequestedWithHeaderMode (deprecated)"/>
+  <int value="57"
+      label="WebViewCompat.WebSettingsCompat.getRequestedWithHeaderMode
+             (deprecated)"/>
   <int value="58"
-      label="SERVICE_WORKER_SETTINGS_SET_REQUESTED_WITH_HEADER_MODE">
-    ServiceWorkerWebSettingsCompat#setRequestedWithHeaderMode(int) (deprecated)
-  </int>
+      label="ServiceWorkerWebSettingsCompat.setRequestedWithHeaderMode
+             (deprecated)"/>
   <int value="59"
-      label="SERVICE_WORKER_SETTINGS_GET_REQUESTED_WITH_HEADER_MODE">
-    ServiceWorkerWebSettingsCompat#getRequestedWithHeaderMode() (deprecated)
-  </int>
-  <int value="60" label="GET_VARIATIONS_HEADER">
-    WebViewCompat#getVariationsHeader()
-  </int>
+      label="ServiceWorkerWebSettingsCompat.getRequestedWithHeaderMode
+             (deprecated)"/>
+  <int value="60" label="WebViewCompat.getVariationsHeader"/>
   <int value="61"
-      label="WEB_SETTINGS_SET_ENTERPRISE_AUTHENTICATION_APP_LINK_POLICY_ENABLED">
-    WebSettingsCompat#setEnterpriseAuthenticationAppLinkPolicyEnabled(boolean)
-  </int>
+      label="WebSettingsCompat.setEnterpriseAuthenticationAppLinkPolicyEnabled"/>
   <int value="62"
-      label="WEB_SETTINGS_GET_ENTERPRISE_AUTHENTICATION_APP_LINK_POLICY_ENABLED">
-    WebSettingsCompat#getEnterpriseAuthenticationAppLinkPolicyEnabled()
-  </int>
-  <int value="63" label="WEB_VIEW_COOKIE_MANAGER_GET_COOKIE_INFO">
-    CookieManagerCompat#getCookieInfo()
-  </int>
-  <int value="64" label="WEB_MESSAGE_GET_MESSAGE_PAYLOAD">
-    WebMessageCompat#getMessagePayload()
-  </int>
-  <int value="65" label="WEB_MESSAGE_PAYLOAD_GET_TYPE">
-    WebMessagePayload#getType();
-  </int>
-  <int value="66" label="WEB_MESSAGE_PAYLOAD_GET_AS_STRING">
-    WebMessagePayload#getAsString();
-  </int>
-  <int value="67" label="WEB_MESSAGE_PAYLOAD_GET_AS_ARRAY_BUFFER">
-    WebMessagePayload#getAsArrayBuffer();
-  </int>
+      label="WebSettingsCompat.getEnterpriseAuthenticationAppLinkPolicyEnabled"/>
+  <int value="63" label="CookieManagerCompat.getCookieInfo"/>
+  <int value="64" label="WebMessageCompat.getMessagePayload"/>
+  <int value="65" label="WebMessagePayload.getType"/>
+  <int value="66" label="WebMessagePayload.getAsString"/>
+  <int value="67" label="WebMessagePayload.getAsArrayBuffer"/>
   <int value="68"
-      label="WEB_SETTINGS_SET_REQUESTED_WITH_HEADER_ORIGIN_ALLOWLIST">
-    WebSettingsCompat#setRequestedWithHeaderOriginAllowList(Set(String)
-    allowedOriginRules)
-  </int>
+      label="WebSettingsCompat.setRequestedWithHeaderOriginAllowList"/>
   <int value="69"
-      label="WEB_SETTINGS_GET_REQUESTED_WITH_HEADER_ORIGIN_ALLOWLIST">
-    WebViewCompat#WebSettingsCompat#getRequestedWithHeaderOriginAllowList()
-  </int>
+      label="WebViewCompat.WebSettingsCompat.getRequestedWithHeaderOriginAllowList"/>
   <int value="70"
-      label="SERVICE_WORKER_SETTINGS_SET_REQUESTED_WITH_HEADER_ORIGIN_ALLOWLIST">
-    ServiceWorkerWebSettingsCompat#setRequestedWithHeaderOriginAllowList(Set(String)
-    allowedOriginRules)
-  </int>
+      label="ServiceWorkerWebSettingsCompat.setRequestedWithHeaderOriginAllowList"/>
   <int value="71"
-      label="SERVICE_WORKER_SETTINGS_GET_REQUESTED_WITH_HEADER_ORIGIN_ALLOWLIST">
-    ServiceWorkerWebSettingsCompat#getRequestedWithHeaderOriginAllowList()
-  </int>
-  <int value="72" label="GET_IMAGE_DRAG_DROP_IMPLEMENTATION">
-    WebViewProviderFactory#getDropDataProviderImplementation()
-  </int>
-  <int value="73" label="RESTRICT_SENSITIVE_WEB_CONTENT">
-    WebSettingsCompat#enableRestrictSensitiveWebContent() (deprecated)
-  </int>
-  <int value="74" label="JS_REPLY_POST_MESSAGE_WITH_PAYLOAD">
-    JsReplyProxy#postMessageWithPayload(WebMessagePayload)
-  </int>
-  <int value="75" label="WEB_SETTINGS_SET_USER_AGENT_METADATA">
-    WebSettingsCompat#setUserAgentMetadataFromMap(Map(String, Object)
-    uaMetadataMap)
-  </int>
-  <int value="76" label="WEB_SETTINGS_GET_USER_AGENT_METADATA">
-    WebSettingsCompat#getUserAgentMetadataMap()
-  </int>
-  <int value="77" label="SERVICE_WORKER_CLIENT_SHOULD_INTERCEPT_REQUEST">
-    ServiceWorkerClientCompat#shouldInterceptRequest()
-  </int>
-  <int value="78" label="WEB_SETTINGS_SET_ALGORITHMIC_DARKENING_ALLOWED">
-    WebSettingsCompat#setAlgorithmicDarkeningAllowed()
-  </int>
-  <int value="79" label="WEB_SETTINGS_IS_ALGORITHMIC_DARKENING_ALLOWED">
-    WebSettingsCompat#isAlgorithmicDarkeningAllowed()
-  </int>
-  <int value="80" label="CREATE_WEB_MESSAGE_CHANNEL">
-    WebViewCompat#createWebMessageChannel()
-  </int>
-  <int value="81" label="CREATE_WEBVIEW">WebViewCompat#createWebView()</int>
-  <int value="82" label="GET_STATICS">WebViewCompat#getStatics()</int>
-  <int value="83" label="GET_PROFILE_STORE">ProfileStore#getInstance()</int>
-  <int value="84" label="GET_OR_CREATE_PROFILE">
-    ProfileStore#getOrCreateProfile()
-  </int>
-  <int value="85" label="GET_PROFILE">ProfileStore#getProfile()</int>
-  <int value="86" label="GET_ALL_PROFILE_NAMES">
-    ProfileStore#getAllProfileNames()
-  </int>
-  <int value="87" label="DELETE_PROFILE">ProfileStore#deleteProfile()</int>
-  <int value="88" label="GET_PROFILE_NAME">Profile#getName()</int>
-  <int value="89" label="GET_PROFILE_COOKIE_MANAGER">
-    Profile#getCookieManager()
-  </int>
-  <int value="90" label="GET_PROFILE_WEB_STORAGE">Profile#getWebStorage()</int>
-  <int value="91" label="GET_PROFILE_GEO_LOCATION_PERMISSIONS">
-    Profile#getGeolocationPermissions()
-  </int>
-  <int value="92" label="GET_PROFILE_SERVICE_WORKER_CONTROLLER">
-    Profile#getServiceWorkerController()
-  </int>
-  <int value="93" label="SET_WEBVIEW_PROFILE">
-    WebViewCompat#setProfile(WebView, String)
-  </int>
-  <int value="94" label="GET_WEBVIEW_PROFILE">
-    WebViewCompat#getProfile(WebView)
-  </int>
-  <int value="95" label="SET_ATTRIBUTION_BEHAVIOR">
-    WebSettingsCompat.setAttributionBehavior(int)
-  </int>
-  <int value="96" label="GET_ATTRIBUTION_BEHAVIOR">
-    WebSettingsCompat.getAttributionBehavior(int)
-  </int>
-  <int value="97" label="GET_WEBVIEW_MEDIA_INTEGRITY_API_DEFAULT_STATUS">
-    WebSettingsCompat#getWebViewMediaIntegrityApiStatus()
-  </int>
-  <int value="98" label="GET_WEBVIEW_MEDIA_INTEGRITY_API_OVERRIDE_RULES">
-    WebSettingsCompat#getWebViewMediaIntegrityApiStatus()
-  </int>
-  <int value="99" label="SET_WEBVIEW_MEDIA_INTEGRITY_API_STATUS">
-    WebSettingsCompat#setWebViewMediaIntegrityApiStatus(int,Map(String,Integer))
-  </int>
-  <int value="100" label="SET_AUDIO_MUTED">
-    WebViewCompat#setAudioMuted(boolean)
-  </int>
-  <int value="101" label="IS_AUDIO_MUTED">WebViewCompat#isAudioMuted()</int>
-  <int value="102" label="SET_WEBAUTHN_SUPPORT">
-    WebSettingsCompat#setWebauthnSupport(int)
-  </int>
-  <int value="103" label="GET_WEBAUTHN_SUPPORT">
-    WebSettingsCompat#getWebauthnSupport()
-  </int>
+      label="ServiceWorkerWebSettingsCompat.getRequestedWithHeaderOriginAllowList"/>
+  <int value="72"
+      label="WebViewProviderFactory.getDropDataProviderImplementation"/>
+  <int value="73"
+      label="WebSettingsCompat.enableRestrictSensitiveWebContent (deprecated)"/>
+  <int value="74" label="JsReplyProxy.postMessageWithPayload"/>
+  <int value="75" label="WebSettingsCompat.setUserAgentMetadataFromMap"/>
+  <int value="76" label="WebSettingsCompat.getUserAgentMetadataMap"/>
+  <int value="77" label="ServiceWorkerClientCompat.shouldInterceptRequest"/>
+  <int value="78" label="WebSettingsCompat.setAlgorithmicDarkeningAllowed"/>
+  <int value="79" label="WebSettingsCompat.isAlgorithmicDarkeningAllowed"/>
+  <int value="80" label="WebViewCompat.createWebMessageChannel"/>
+  <int value="81" label="WebViewCompat.createWebView"/>
+  <int value="82" label="WebViewCompat.getStatics"/>
+  <int value="83" label="ProfileStore.getInstance"/>
+  <int value="84" label="ProfileStore.getOrCreateProfile"/>
+  <int value="85" label="ProfileStore.getProfile"/>
+  <int value="86" label="ProfileStore.getAllProfileNames"/>
+  <int value="87" label="ProfileStore.deleteProfile"/>
+  <int value="88" label="Profile.getName"/>
+  <int value="89" label="Profile.getCookieManager"/>
+  <int value="90" label="Profile.getWebStorage"/>
+  <int value="91" label="Profile.getGeolocationPermissions"/>
+  <int value="92" label="Profile.getServiceWorkerController"/>
+  <int value="93" label="WebViewCompat.setProfile"/>
+  <int value="94" label="WebViewCompat.getProfile"/>
+  <int value="95" label="WebSettingsCompat.setAttributionBehavior"/>
+  <int value="96" label="WebSettingsCompat.getAttributionBehavior"/>
+  <int value="97"
+      label="WebSettingsCompat.getWebViewMediaIntegrityApiStatus (default
+             status)"/>
+  <int value="98"
+      label="WebSettingsCompat.getWebViewMediaIntegrityApiStatus (override
+             rules)"/>
+  <int value="99" label="WebSettingsCompat.setWebViewMediaIntegrityApiStatus"/>
+  <int value="100" label="WebViewCompat.setAudioMuted"/>
+  <int value="101" label="WebViewCompat.isAudioMuted"/>
+  <int value="102" label="WebSettingsCompat.setWebauthnSupport"/>
+  <int value="103" label="WebSettingsCompat.getWebauthnSupport"/>
 </enum>
 
 <enum name="ArmCpuPart">
@@ -1186,6 +1005,7 @@
   <int value="45" label="PromptHatsCameraGenericInvitation"/>
   <int value="46" label="PromptHatsMicrophoneCustomInvitation"/>
   <int value="47" label="PromptHatsMicrophoneGenericInvitation"/>
+  <int value="48" label="PermissionBlocked"/>
 </enum>
 
 <enum name="MinimizeAppAndCloseTabType">
@@ -1671,84 +1491,84 @@
 </enum>
 
 <enum name="WebViewApiCall">
-  <int value="0" label="addJavascriptInterface"/>
-  <int value="1" label="autofill"/>
-  <int value="2" label="canGoBack"/>
-  <int value="3" label="canGoBackOrForward"/>
-  <int value="4" label="canGoForward"/>
-  <int value="5" label="canZoomIn"/>
-  <int value="6" label="canZoomOut"/>
-  <int value="7" label="capturePicture"/>
-  <int value="8" label="clearCache"/>
-  <int value="9" label="clearFormData"/>
-  <int value="10" label="clearHistory"/>
-  <int value="11" label="clearMatches"/>
-  <int value="12" label="clearSslPreferences"/>
-  <int value="13" label="clearView"/>
-  <int value="14" label="copyBackForwardList"/>
-  <int value="15" label="createPrintDocumentAdapter"/>
-  <int value="16" label="createWebmessageChannel"/>
-  <int value="17" label="documentHasImages"/>
-  <int value="18" label="doesSupportFullscreen"/>
-  <int value="19" label="evaluateJavascript"/>
-  <int value="20" label="extractSmartClipData"/>
-  <int value="21" label="findNext"/>
-  <int value="22" label="getCertificate"/>
-  <int value="23" label="getContentHeight"/>
-  <int value="24" label="getContentWidth"/>
-  <int value="25" label="getFavicon"/>
-  <int value="26" label="getHitTestResult"/>
-  <int value="27" label="getHttpAuthUsernamePassword"/>
-  <int value="28" label="getOriginalUrl"/>
-  <int value="29" label="getProgress"/>
-  <int value="30" label="getScale"/>
-  <int value="31" label="getSettings"/>
-  <int value="32" label="getTextClassifier"/>
-  <int value="33" label="getTitle"/>
-  <int value="34" label="getUrl"/>
-  <int value="35" label="getWebchromeClient"/>
-  <int value="36" label="getWebviewClient"/>
-  <int value="37" label="goBack"/>
-  <int value="38" label="goBackOrForward"/>
-  <int value="39" label="goForward"/>
-  <int value="40" label="insertVisualStateCallback"/>
-  <int value="41" label="invokeZoomPicker"/>
-  <int value="42" label="isPaused"/>
-  <int value="43" label="isPrivateBrowsingEnabled"/>
-  <int value="44" label="loadData"/>
-  <int value="45" label="loadDataWithBaseUrl"/>
-  <int value="46" label="notifyFindDialogDismissed"/>
-  <int value="47" label="onPause"/>
-  <int value="48" label="onProvideAutofillVirtualStructure"/>
-  <int value="49" label="onResume"/>
-  <int value="50" label="overlayHorizontalScrollbar"/>
-  <int value="51" label="overlayVerticalScrollbar"/>
-  <int value="52" label="pageDown"/>
-  <int value="53" label="pageUp"/>
-  <int value="54" label="pauseTimers"/>
-  <int value="55" label="postMessageToMainFrame"/>
-  <int value="56" label="postUrl"/>
-  <int value="57" label="reload"/>
-  <int value="58" label="removeJavascriptInterface"/>
-  <int value="59" label="requestFocusNodeHref"/>
-  <int value="60" label="requestImageRef"/>
-  <int value="61" label="restoreState"/>
-  <int value="62" label="resumeTimers"/>
-  <int value="63" label="saveState"/>
-  <int value="64" label="setDownloadListener"/>
-  <int value="65" label="setFindListener"/>
-  <int value="66" label="setHorizontalScrollbarOverlay"/>
-  <int value="67" label="setHttpAuthUsernamePassword"/>
-  <int value="68" label="setInitialScale"/>
-  <int value="69" label="setNetworkAvailable"/>
-  <int value="70" label="setPictureListener"/>
-  <int value="71" label="setSmartClipResultHandler"/>
-  <int value="72" label="setTextClassifier"/>
-  <int value="73" label="setVerticalScrollbarOverlay"/>
-  <int value="74" label="setWebchromeClient"/>
-  <int value="75" label="setWebviewClient"/>
-  <int value="76" label="showFindDialog"/>
-  <int value="77" label="stopLoading"/>
+  <int value="0" label="WebView.addJavascriptInterface"/>
+  <int value="1" label="WebView.autofill"/>
+  <int value="2" label="WebView.canGoBack"/>
+  <int value="3" label="WebView.canGoBackOrForward"/>
+  <int value="4" label="WebView.canGoForward"/>
+  <int value="5" label="WebView.canZoomIn"/>
+  <int value="6" label="WebView.canZoomOut"/>
+  <int value="7" label="WebView.capturePicture"/>
+  <int value="8" label="WebView.clearCache"/>
+  <int value="9" label="WebView.clearFormData"/>
+  <int value="10" label="WebView.clearHistory"/>
+  <int value="11" label="WebView.clearMatches"/>
+  <int value="12" label="WebView.clearSslPreferences"/>
+  <int value="13" label="WebView.clearView"/>
+  <int value="14" label="WebView.copyBackForwardList"/>
+  <int value="15" label="WebView.createPrintDocumentAdapter"/>
+  <int value="16" label="WebView.createWebmessageChannel"/>
+  <int value="17" label="WebView.documentHasImages"/>
+  <int value="18" label="WebView.doesSupportFullscreen"/>
+  <int value="19" label="WebView.evaluateJavascript"/>
+  <int value="20" label="WebView.extractSmartClipData"/>
+  <int value="21" label="WebView.findNext"/>
+  <int value="22" label="WebView.getCertificate"/>
+  <int value="23" label="WebView.getContentHeight"/>
+  <int value="24" label="WebView.getContentWidth"/>
+  <int value="25" label="WebView.getFavicon"/>
+  <int value="26" label="WebView.getHitTestResult"/>
+  <int value="27" label="WebView.getHttpAuthUsernamePassword"/>
+  <int value="28" label="WebView.getOriginalUrl"/>
+  <int value="29" label="WebView.getProgress"/>
+  <int value="30" label="WebView.getScale"/>
+  <int value="31" label="WebView.getSettings"/>
+  <int value="32" label="WebView.getTextClassifier"/>
+  <int value="33" label="WebView.getTitle"/>
+  <int value="34" label="WebView.getUrl"/>
+  <int value="35" label="WebView.getWebchromeClient"/>
+  <int value="36" label="WebView.getWebviewClient"/>
+  <int value="37" label="WebView.goBack"/>
+  <int value="38" label="WebView.goBackOrForward"/>
+  <int value="39" label="WebView.goForward"/>
+  <int value="40" label="WebView.insertVisualStateCallback"/>
+  <int value="41" label="WebView.invokeZoomPicker"/>
+  <int value="42" label="WebView.isPaused"/>
+  <int value="43" label="WebView.isPrivateBrowsingEnabled"/>
+  <int value="44" label="WebView.loadData"/>
+  <int value="45" label="WebView.loadDataWithBaseUrl"/>
+  <int value="46" label="WebView.notifyFindDialogDismissed"/>
+  <int value="47" label="WebView.onPause"/>
+  <int value="48" label="WebView.onProvideAutofillVirtualStructure"/>
+  <int value="49" label="WebView.onResume"/>
+  <int value="50" label="WebView.overlayHorizontalScrollbar"/>
+  <int value="51" label="WebView.overlayVerticalScrollbar"/>
+  <int value="52" label="WebView.pageDown"/>
+  <int value="53" label="WebView.pageUp"/>
+  <int value="54" label="WebView.pauseTimers"/>
+  <int value="55" label="WebView.postMessageToMainFrame"/>
+  <int value="56" label="WebView.postUrl"/>
+  <int value="57" label="WebView.reload"/>
+  <int value="58" label="WebView.removeJavascriptInterface"/>
+  <int value="59" label="WebView.requestFocusNodeHref"/>
+  <int value="60" label="WebView.requestImageRef"/>
+  <int value="61" label="WebView.restoreState"/>
+  <int value="62" label="WebView.resumeTimers"/>
+  <int value="63" label="WebView.saveState"/>
+  <int value="64" label="WebView.setDownloadListener"/>
+  <int value="65" label="WebView.setFindListener"/>
+  <int value="66" label="WebView.setHorizontalScrollbarOverlay"/>
+  <int value="67" label="WebView.setHttpAuthUsernamePassword"/>
+  <int value="68" label="WebView.setInitialScale"/>
+  <int value="69" label="WebView.setNetworkAvailable"/>
+  <int value="70" label="WebView.setPictureListener"/>
+  <int value="71" label="WebView.setSmartClipResultHandler"/>
+  <int value="72" label="WebView.setTextClassifier"/>
+  <int value="73" label="WebView.setVerticalScrollbarOverlay"/>
+  <int value="74" label="WebView.setWebchromeClient"/>
+  <int value="75" label="WebView.setWebviewClient"/>
+  <int value="76" label="WebView.showFindDialog"/>
+  <int value="77" label="WebView.stopLoading"/>
   <int value="78" label="WebViewDatabase.getHttpAuthUsernamePassword"/>
   <int value="79" label="WebViewDatabase.clearFormData"/>
   <int value="80" label="WebViewDatabase.clearHttpAuthUsernamePassword"/>
@@ -1860,36 +1680,36 @@
   <int value="184" label="WebSettings.setUserAgentString"/>
   <int value="185" label="WebSettings.supportMultipleWindows"/>
   <int value="186" label="WebSettings.supportZoom"/>
-  <int value="187" label="getRendererRequestedPriority"/>
-  <int value="188" label="getRendererPriorityWaivedWhenNotVisible"/>
-  <int value="189" label="setRendererPriorityPolicy"/>
-  <int value="190" label="loadUrl"/>
-  <int value="191" label="loadUrlAdditionalHeaders"/>
-  <int value="192" label="destroy"/>
-  <int value="193" label="saveWebArchive"/>
-  <int value="194" label="findAllAsync"/>
-  <int value="195" label="getWebViewRenderProcess"/>
-  <int value="196" label="setWebViewRenderProcessClient"/>
-  <int value="197" label="getWebViewRenderProcessClient"/>
-  <int value="198" label="flingScroll"/>
-  <int value="199" label="zoomIn"/>
-  <int value="200" label="zoomOut"/>
-  <int value="201" label="zoomBy"/>
-  <int value="202" label="onProvideContentCaptureStructure"/>
-  <int value="203" label="getAccessibilityNodeProvider"/>
-  <int value="204" label="onProvideVirtualStructure"/>
-  <int value="205" label="setOverScrollMode"/>
-  <int value="206" label="setScrollBarStyle"/>
-  <int value="207" label="setLayoutParams"/>
-  <int value="208" label="performLongClick"/>
-  <int value="209" label="requestFocus"/>
-  <int value="210" label="requestChildRectangleOnScreen"/>
-  <int value="211" label="setBackgroundColor"/>
-  <int value="212" label="setLayerType"/>
-  <int value="213" label="getHandler"/>
-  <int value="214" label="findFocus"/>
-  <int value="215" label="computeScroll"/>
-  <int value="216" label="setWebViewClient"/>
+  <int value="187" label="WebView.getRendererRequestedPriority"/>
+  <int value="188" label="WebView.getRendererPriorityWaivedWhenNotVisible"/>
+  <int value="189" label="WebView.setRendererPriorityPolicy"/>
+  <int value="190" label="WebView.loadUrl"/>
+  <int value="191" label="WebView.loadUrlAdditionalHeaders"/>
+  <int value="192" label="WebView.destroy"/>
+  <int value="193" label="WebView.saveWebArchive"/>
+  <int value="194" label="WebView.findAllAsync"/>
+  <int value="195" label="WebView.getWebViewRenderProcess"/>
+  <int value="196" label="WebView.setWebViewRenderProcessClient"/>
+  <int value="197" label="WebView.getWebViewRenderProcessClient"/>
+  <int value="198" label="WebView.flingScroll"/>
+  <int value="199" label="WebView.zoomIn"/>
+  <int value="200" label="WebView.zoomOut"/>
+  <int value="201" label="WebView.zoomBy"/>
+  <int value="202" label="WebView.onProvideContentCaptureStructure"/>
+  <int value="203" label="WebView.getAccessibilityNodeProvider"/>
+  <int value="204" label="WebView.onProvideVirtualStructure"/>
+  <int value="205" label="WebView.setOverScrollMode"/>
+  <int value="206" label="WebView.setScrollBarStyle"/>
+  <int value="207" label="WebView.setLayoutParams"/>
+  <int value="208" label="WebView.performLongClick"/>
+  <int value="209" label="WebView.requestFocus"/>
+  <int value="210" label="WebView.requestChildRectangleOnScreen"/>
+  <int value="211" label="WebView.setBackgroundColor"/>
+  <int value="212" label="WebView.setLayerType"/>
+  <int value="213" label="WebView.getHandler"/>
+  <int value="214" label="WebView.findFocus"/>
+  <int value="215" label="WebView.computeScroll"/>
+  <int value="216" label="WebView.setWebViewClient"/>
   <int value="217" label="WebSettings.setUserAgent"/>
   <int value="218" label="WebSettings.setForceDark"/>
   <int value="219" label="WebSettings.setAlgorithmicDarkeningAllowed"/>
@@ -1898,78 +1718,78 @@
 </enum>
 
 <enum name="WebViewApiCallStatic">
-  <int value="0" label="findAddress"/>
-  <int value="1" label="getDefaultUserAgent"/>
-  <int value="2" label="setWebContentsDebuggingEnabled"/>
-  <int value="3" label="clearClientCertPreferences"/>
-  <int value="4" label="enableSlowWholeDocumentDraw"/>
-  <int value="5" label="getSafeBrowsingPrivacyPolicyUrl"/>
-  <int value="6" label="parseResult"/>
-  <int value="7" label="startSafeBrowsing"/>
-  <int value="8" label="setSafeBrowsingAllowlist"/>
-  <int value="9" label="isMultiProcessEnabled"/>
-  <int value="10" label="getVariationsHeader"/>
+  <int value="0" label="WebView.findAddress"/>
+  <int value="1" label="WebView.getDefaultUserAgent"/>
+  <int value="2" label="WebView.setWebContentsDebuggingEnabled"/>
+  <int value="3" label="WebView.clearClientCertPreferences"/>
+  <int value="4" label="WebView.enableSlowWholeDocumentDraw"/>
+  <int value="5" label="WebView.getSafeBrowsingPrivacyPolicyUrl"/>
+  <int value="6" label="WebView.parseResult"/>
+  <int value="7" label="WebView.startSafeBrowsing"/>
+  <int value="8" label="WebView.setSafeBrowsingAllowlist"/>
+  <int value="9" label="WebView.isMultiProcessEnabled"/>
+  <int value="10" label="WebView.getVariationsHeader"/>
 </enum>
 
 <enum name="WebViewApiCallSystem">
-  <int value="0" label="onTouchEvent"/>
-  <int value="1" label="onDragEvent"/>
-  <int value="2" label="onCreateInputConnection"/>
-  <int value="3" label="onKeyMultiple"/>
-  <int value="4" label="onKeyDown"/>
-  <int value="5" label="onKeyUp"/>
-  <int value="6" label="onFocusChanged"/>
-  <int value="7" label="dispatchKeyEvent"/>
-  <int value="8" label="onHoverEvent"/>
-  <int value="9" label="onGenericMotionEvent"/>
-  <int value="10" label="onTrackballEvent"/>
-  <int value="11" label="onStartTemporaryDetach"/>
-  <int value="12" label="onFinishTemporaryDetach"/>
-  <int value="13" label="onCheckIsTextEditor"/>
-  <int value="14" label="onWindowFocusChanged"/>
+  <int value="0" label="WebView.onTouchEvent"/>
+  <int value="1" label="WebView.onDragEvent"/>
+  <int value="2" label="WebView.onCreateInputConnection"/>
+  <int value="3" label="WebView.onKeyMultiple"/>
+  <int value="4" label="WebView.onKeyDown"/>
+  <int value="5" label="WebView.onKeyUp"/>
+  <int value="6" label="WebView.onFocusChanged"/>
+  <int value="7" label="WebView.dispatchKeyEvent"/>
+  <int value="8" label="WebView.onHoverEvent"/>
+  <int value="9" label="WebView.onGenericMotionEvent"/>
+  <int value="10" label="WebView.onTrackballEvent"/>
+  <int value="11" label="WebView.onStartTemporaryDetach"/>
+  <int value="12" label="WebView.onFinishTemporaryDetach"/>
+  <int value="13" label="WebView.onCheckIsTextEditor"/>
+  <int value="14" label="WebView.onWindowFocusChanged"/>
 </enum>
 
 <enum name="WebViewCallbackType">
-  <int value="0" label="onReceivedLoginRequest"/>
-  <int value="1" label="onReceivedClientCertRequest"/>
-  <int value="2" label="onReceivedHttpAuthRequest"/>
-  <int value="3" label="onDownloadStart"/>
-  <int value="4" label="onPageStarted"/>
-  <int value="5" label="onPageFinished"/>
-  <int value="6" label="onLoadResource"/>
-  <int value="7" label="onPageCommitVisible"/>
-  <int value="8" label="shouldOverrideUrlLoading"/>
-  <int value="9" label="shouldInterceptRequest"/>
-  <int value="10" label="onReceivedError"/>
-  <int value="11" label="onSafeBrowsingHit"/>
-  <int value="12" label="onReceivedHttpError"/>
-  <int value="13" label="getVisitedHistory"/>
-  <int value="14" label="doUpdateVisitedHistory"/>
-  <int value="15" label="onProgressChanged"/>
-  <int value="16" label="onUnhandledKeyEvent"/>
-  <int value="17" label="onConsoleMessage"/>
-  <int value="18" label="onCreateWindow"/>
-  <int value="19" label="onCloseWindow"/>
-  <int value="20" label="onRequestFocus"/>
-  <int value="21" label="onReceivedTouchIconUrl"/>
-  <int value="22" label="onReceivedIcon"/>
-  <int value="23" label="onReceivedTitle"/>
-  <int value="24" label="shouldOverrideKeyEvent"/>
-  <int value="25" label="onGeolocationPermissionsShowPrompt"/>
-  <int value="26" label="onGeolocationPermissionsHidePrompt"/>
-  <int value="27" label="onPermissionRequest"/>
-  <int value="28" label="onPermissionRequestCanceled"/>
-  <int value="29" label="onJsAlert"/>
-  <int value="30" label="onJsBeforeUnload"/>
-  <int value="31" label="onJsConfirm"/>
-  <int value="32" label="onJsPrompt"/>
-  <int value="33" label="onReceivedSslError"/>
-  <int value="34" label="onFormResubmission"/>
-  <int value="35" label="onShowCustomView"/>
-  <int value="36" label="onHideCustomView"/>
-  <int value="37" label="getDefaultVideoPoster"/>
-  <int value="38" label="onRenderProcessGone"/>
-  <int value="39" label="onScaleChanged"/>
+  <int value="0" label="WebViewClient.onReceivedLoginRequest"/>
+  <int value="1" label="WebViewClient.onReceivedClientCertRequest"/>
+  <int value="2" label="WebViewClient.onReceivedHttpAuthRequest"/>
+  <int value="3" label="DownloadListener.onDownloadStart"/>
+  <int value="4" label="WebViewClient.onPageStarted"/>
+  <int value="5" label="WebViewClient.onPageFinished"/>
+  <int value="6" label="WebViewClient.onLoadResource"/>
+  <int value="7" label="WebViewClient.onPageCommitVisible"/>
+  <int value="8" label="WebViewClient.shouldOverrideUrlLoading"/>
+  <int value="9" label="WebViewClient.shouldInterceptRequest"/>
+  <int value="10" label="WebViewClient.onReceivedError"/>
+  <int value="11" label="WebViewClient.onSafeBrowsingHit"/>
+  <int value="12" label="WebViewClient.onReceivedHttpError"/>
+  <int value="13" label="WebChromeClient.getVisitedHistory"/>
+  <int value="14" label="WebChromeClient.doUpdateVisitedHistory"/>
+  <int value="15" label="WebChromeClient.onProgressChanged"/>
+  <int value="16" label="WebViewClient.onUnhandledKeyEvent"/>
+  <int value="17" label="WebChromeClient.onConsoleMessage"/>
+  <int value="18" label="WebChromeClient.onCreateWindow"/>
+  <int value="19" label="WebChromeClient.onCloseWindow"/>
+  <int value="20" label="WebChromeClient.onRequestFocus"/>
+  <int value="21" label="WebChromeClient.onReceivedTouchIconUrl"/>
+  <int value="22" label="WebChromeClient.onReceivedIcon"/>
+  <int value="23" label="WebChromeClient.onReceivedTitle"/>
+  <int value="24" label="WebViewClient.shouldOverrideKeyEvent"/>
+  <int value="25" label="WebChromeClient.onGeolocationPermissionsShowPrompt"/>
+  <int value="26" label="WebChromeClient.onGeolocationPermissionsHidePrompt"/>
+  <int value="27" label="WebChromeClient.onPermissionRequest"/>
+  <int value="28" label="WebChromeClient.onPermissionRequestCanceled"/>
+  <int value="29" label="WebChromeClient.onJsAlert"/>
+  <int value="30" label="WebChromeClient.onJsBeforeUnload"/>
+  <int value="31" label="WebChromeClient.onJsConfirm"/>
+  <int value="32" label="WebChromeClient.onJsPrompt"/>
+  <int value="33" label="WebViewClient.onReceivedSslError"/>
+  <int value="34" label="WebViewClient.onFormResubmission"/>
+  <int value="35" label="WebChromeClient.onShowCustomView"/>
+  <int value="36" label="WebChromeClient.onHideCustomView"/>
+  <int value="37" label="WebChromeClient.getDefaultVideoPoster"/>
+  <int value="38" label="WebViewClient.onRenderProcessGone"/>
+  <int value="39" label="WebViewClient.onScaleChanged"/>
 </enum>
 
 <enum name="WebViewClientTypeEnum">
diff --git a/tools/metrics/histograms/metadata/android/histograms.xml b/tools/metrics/histograms/metadata/android/histograms.xml
index 884505a5..caa815d9 100644
--- a/tools/metrics/histograms/metadata/android/histograms.xml
+++ b/tools/metrics/histograms/metadata/android/histograms.xml
@@ -147,6 +147,7 @@
   <variant name=".NearOomReduction"/>
   <variant name=".NotificationBlocked"/>
   <variant name=".OfferNotification"/>
+  <variant name=".PermissionBlocked"/>
   <variant name=".PermissionUpdate"/>
   <variant name=".PopupBlocked"/>
   <variant name=".PromptHatsCameraCustomInvitation"/>
@@ -512,7 +513,7 @@
 </histogram>
 
 <histogram name="Android.BackgroundTaskScheduler.ExactTaskCreated"
-    enum="BackgroundTaskId" expires_after="2024-06-05">
+    enum="BackgroundTaskId" expires_after="2024-10-05">
   <owner>nator@chromium.org</owner>
   <owner>knollr@chromium.org</owner>
   <owner>shaktisahu@chromium.org</owner>
@@ -523,7 +524,7 @@
 </histogram>
 
 <histogram name="Android.BackgroundTaskScheduler.SetNotification.{TaskType}"
-    units="ms" expires_after="2024-06-05">
+    units="ms" expires_after="2024-10-05">
   <owner>nyquist@chromium.org</owner>
   <owner>shaktisahu@chromium.org</owner>
   <summary>
@@ -536,14 +537,14 @@
 </histogram>
 
 <histogram name="Android.BackgroundTaskScheduler.TaskCanceled"
-    enum="BackgroundTaskId" expires_after="2024-06-05">
+    enum="BackgroundTaskId" expires_after="2024-10-05">
   <owner>nyquist@chromium.org</owner>
   <owner>shaktisahu@chromium.org</owner>
   <summary>Records that a specific background task has been canceled.</summary>
 </histogram>
 
 <histogram name="Android.BackgroundTaskScheduler.TaskCreated.WithExpiration"
-    enum="BackgroundTaskId" expires_after="2024-06-05">
+    enum="BackgroundTaskId" expires_after="2024-10-05">
   <owner>nator@chromium.org</owner>
   <owner>knollr@chromium.org</owner>
   <owner>shaktisahu@chromium.org</owner>
@@ -554,7 +555,7 @@
 </histogram>
 
 <histogram name="Android.BackgroundTaskScheduler.TaskCreated.WithoutExpiration"
-    enum="BackgroundTaskId" expires_after="2024-06-05">
+    enum="BackgroundTaskId" expires_after="2024-10-05">
   <owner>nator@chromium.org</owner>
   <owner>knollr@chromium.org</owner>
   <owner>shaktisahu@chromium.org</owner>
@@ -565,7 +566,7 @@
 </histogram>
 
 <histogram name="Android.BackgroundTaskScheduler.TaskExpired"
-    enum="BackgroundTaskId" expires_after="2024-06-05">
+    enum="BackgroundTaskId" expires_after="2024-10-05">
   <owner>nator@chromium.org</owner>
   <owner>knollr@chromium.org</owner>
   <owner>shaktisahu@chromium.org</owner>
@@ -576,7 +577,7 @@
 </histogram>
 
 <histogram name="Android.BackgroundTaskScheduler.TaskFinished.{TaskType}"
-    units="ms" expires_after="2024-06-05">
+    units="ms" expires_after="2024-10-05">
   <owner>nyquist@chromium.org</owner>
   <owner>shaktisahu@chromium.org</owner>
   <summary>
@@ -587,7 +588,7 @@
 </histogram>
 
 <histogram name="Android.BackgroundTaskScheduler.TaskLoadedNative"
-    enum="BackgroundTaskId" expires_after="2024-06-05">
+    enum="BackgroundTaskId" expires_after="2024-10-05">
   <owner>nyquist@chromium.org</owner>
   <owner>shaktisahu@chromium.org</owner>
   <summary>
@@ -597,7 +598,7 @@
 </histogram>
 
 <histogram name="Android.BackgroundTaskScheduler.TaskScheduled.Failure"
-    enum="BackgroundTaskId" expires_after="2024-06-05">
+    enum="BackgroundTaskId" expires_after="2024-10-05">
   <owner>nyquist@chromium.org</owner>
   <owner>shaktisahu@chromium.org</owner>
   <summary>
@@ -606,7 +607,7 @@
 </histogram>
 
 <histogram name="Android.BackgroundTaskScheduler.TaskScheduled.Success"
-    enum="BackgroundTaskId" expires_after="2024-06-05">
+    enum="BackgroundTaskId" expires_after="2024-10-05">
   <owner>nyquist@chromium.org</owner>
   <owner>shaktisahu@chromium.org</owner>
   <summary>
@@ -615,14 +616,14 @@
 </histogram>
 
 <histogram name="Android.BackgroundTaskScheduler.TaskStarted"
-    enum="BackgroundTaskId" expires_after="2024-09-15">
+    enum="BackgroundTaskId" expires_after="2024-10-05">
   <owner>nyquist@chromium.org</owner>
   <owner>shaktisahu@chromium.org</owner>
   <summary>Records that a specific background task has been started.</summary>
 </histogram>
 
 <histogram name="Android.BackgroundTaskScheduler.TaskStopped"
-    enum="BackgroundTaskId" expires_after="2024-06-05">
+    enum="BackgroundTaskId" expires_after="2024-10-05">
   <owner>nyquist@chromium.org</owner>
   <owner>shaktisahu@chromium.org</owner>
   <summary>
@@ -1269,7 +1270,7 @@
 </histogram>
 
 <histogram name="Android.DragDrop.Tab.Duration.WithinDestStrip" units="ms"
-    expires_after="2024-08-25">
+    expires_after="2024-10-28">
   <owner>shuyng@google.com</owner>
   <owner>clank-large-form-factors@google.com</owner>
   <summary>
@@ -1281,7 +1282,7 @@
 </histogram>
 
 <histogram name="Android.DragDrop.Tab.FromStrip.Result"
-    enum="DragDropTabResult" expires_after="2024-08-25">
+    enum="DragDropTabResult" expires_after="2024-10-28">
   <owner>shuyng@google.com</owner>
   <owner>clank-large-form-factors@google.com</owner>
   <summary>
@@ -1295,7 +1296,7 @@
 </histogram>
 
 <histogram name="Android.DragDrop.Tab.ReorderStripWithDragDrop" enum="Boolean"
-    expires_after="2024-08-25">
+    expires_after="2024-10-28">
   <owner>shuyng@google.com</owner>
   <owner>clank-large-form-factors@google.com</owner>
   <summary>
@@ -1307,7 +1308,7 @@
 </histogram>
 
 <histogram name="Android.DragDrop.Tab.Type" enum="DragDropType"
-    expires_after="2024-08-25">
+    expires_after="2024-10-28">
   <owner>shuyng@google.com</owner>
   <owner>clank-large-form-factors@google.com</owner>
   <summary>
@@ -1861,7 +1862,7 @@
 </histogram>
 
 <histogram name="Android.IncognitoReauth.PromoImpressionAfterActionCount"
-    units="count" expires_after="2024-08-25">
+    units="count" expires_after="2024-10-28">
   <owner>arabm@google.com</owner>
   <owner>chrome-incognito@google.com</owner>
   <summary>
@@ -4540,7 +4541,7 @@
 </histogram>
 
 <histogram name="Android.TopToolbar.BlockCaptureReason"
-    enum="TopToolbarBlockCaptureReason" expires_after="2024-08-25">
+    enum="TopToolbarBlockCaptureReason" expires_after="2024-10-28">
   <owner>skym@chromium.org</owner>
   <owner>seacow@google.com</owner>
   <summary>
@@ -4769,6 +4770,20 @@
   </summary>
 </histogram>
 
+<histogram name="Android.WebView.AwContentsConstructorTime{IsFirst}" units="ms"
+    expires_after="2024-10-29">
+  <owner>cduvall@chromium.org</owner>
+  <owner>src/android_webview/OWNERS</owner>
+  <summary>
+    Time it takes to run the AwContents constructor. Recorded {IsFirst} time the
+    constructor is run.
+  </summary>
+  <token key="IsFirst">
+    <variant name="" summary="each"/>
+    <variant name=".First" summary="the first"/>
+  </token>
+</histogram>
+
 <histogram name="Android.WebView.Callback.Counts" enum="WebViewCallbackType"
     expires_after="2024-09-01">
   <owner>ntfschr@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/apps/enums.xml b/tools/metrics/histograms/metadata/apps/enums.xml
index 0957e02..ea42c3e 100644
--- a/tools/metrics/histograms/metadata/apps/enums.xml
+++ b/tools/metrics/histograms/metadata/apps/enums.xml
@@ -59,6 +59,7 @@
   <int value="7" label="kInstallDialogNotAccepted"/>
   <int value="8" label="kAppTypeInstallFailed"/>
   <int value="9" label="kUserTypeNotPermitted"/>
+  <int value="10" label="kBadAppRequest"/>
 </enum>
 
 <enum name="AppListAppCollections">
diff --git a/tools/metrics/histograms/metadata/apps/histograms.xml b/tools/metrics/histograms/metadata/apps/histograms.xml
index 25e37d3..6b8d11b 100644
--- a/tools/metrics/histograms/metadata/apps/histograms.xml
+++ b/tools/metrics/histograms/metadata/apps/histograms.xml
@@ -43,6 +43,7 @@
   <variant name=".AppInstallUriUnknown" summary="URI navigation from unknown"/>
   <variant name=".AppPreloadServiceDefault" summary="Default preload"/>
   <variant name=".AppPreloadServiceOem" summary="OEM preload"/>
+  <variant name=".OobeAppRecommendations" summary="OOBE app recommendations"/>
 </variants>
 
 <variants name="AppType">
@@ -213,7 +214,7 @@
 </histogram>
 
 <histogram name="AppPreloadService.FirstLoginFlowTime.{Status}" units="ms"
-    expires_after="2024-08-25">
+    expires_after="2024-10-28">
   <owner>tsergeant@chromium.org</owner>
   <owner>chromeos-apps-foundation-team@google.com</owner>
   <summary>
@@ -230,7 +231,7 @@
 </histogram>
 
 <histogram name="AppPreloadService.ServerResponseCodes"
-    enum="CombinedHttpResponseAndNetErrorCode" expires_after="2024-08-25">
+    enum="CombinedHttpResponseAndNetErrorCode" expires_after="2024-10-27">
   <owner>tsergeant@chromium.org</owner>
   <owner>chromeos-apps-foundation-team@google.com</owner>
   <summary>
@@ -2230,6 +2231,8 @@
         summary="From Discover Tab notification."/>
     <variant name=".FromFileManager" summary="From FileManager."/>
     <variant name=".FromFirstRun" summary="From first run."/>
+    <variant name=".FromFocusMode"
+        summary="From quick setting Focus Mode panel."/>
     <variant name=".FromFullRestore" summary="From full restore."/>
     <variant name=".FromInstalledNotification"
         summary="From installed notification."/>
@@ -2428,7 +2431,7 @@
 </histogram>
 
 <histogram name="Apps.NoteTakingApp.DefaultLaunchResult"
-    enum="NoteTakingAppLaunchResult" expires_after="2024-08-29">
+    enum="NoteTakingAppLaunchResult" expires_after="2024-10-28">
   <owner>glenrob@chromium.org</owner>
   <owner>tbuckley@chromium.org</owner>
   <summary>
@@ -2864,7 +2867,7 @@
 
 <histogram
     name="Apps.TimeDurationBetweenNewUserSessionActivationAndFirstLauncherOpening{TabletOrClamshell}"
-    units="ms" expires_after="2024-08-25">
+    units="ms" expires_after="2024-10-27">
   <owner>andrewxu@chromium.org</owner>
   <owner>tbarzic@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/arc/enums.xml b/tools/metrics/histograms/metadata/arc/enums.xml
index 8adf7a5..5e8a32b 100644
--- a/tools/metrics/histograms/metadata/arc/enums.xml
+++ b/tools/metrics/histograms/metadata/arc/enums.xml
@@ -372,13 +372,6 @@
   <int value="42" label="Disconnect service (ArcHostVpnService)"/>
 </enum>
 
-<enum name="ArcNotificationExpandState">
-  <int value="0" label="Fixed size"/>
-  <int value="1" label="Expandable"/>
-  <int value="2" label="Expanded"/>
-  <int value="3" label="Collapsed"/>
-</enum>
-
 <enum name="ArcNotificationStyle">
   <int value="0" label="No Style"/>
   <int value="1" label="Big Picture Style"/>
diff --git a/tools/metrics/histograms/metadata/arc/histograms.xml b/tools/metrics/histograms/metadata/arc/histograms.xml
index 367793bf..477848b 100644
--- a/tools/metrics/histograms/metadata/arc/histograms.xml
+++ b/tools/metrics/histograms/metadata/arc/histograms.xml
@@ -1477,7 +1477,7 @@
 </histogram>
 
 <histogram name="Arc.NearbyShare.ArcBridgeFailure"
-    enum="NearbyShareArcBridgeFailResult" expires_after="2024-08-04">
+    enum="NearbyShareArcBridgeFailResult" expires_after="2024-10-28">
   <owner>alanding@google.com</owner>
   <owner>arc-app-dev@google.com</owner>
   <summary>
@@ -1606,20 +1606,6 @@
   </summary>
 </histogram>
 
-<histogram name="Arc.Notifications.ExpandState"
-    enum="ArcNotificationExpandState" expires_after="2024-02-25">
-  <owner>yaoqq@google.com</owner>
-  <owner>arc-framework@google.com</owner>
-  <summary>
-    Records the expand state of an Arc notification, the status of
-    fixed_size/expandable is logged when the notification is created, while the
-    status of expanded/collapsed is logged when the user expands/collapses it.
-    Need to note that if it's a grouped notification we are tracking the state
-    of the summary(top level) notification of the group, since we can't easily
-    acquire the state for the child notifications of the group.
-  </summary>
-</histogram>
-
 <histogram name="Arc.Notifications.InlineReplyEnabled" enum="BooleanEnabled"
     expires_after="2024-06-30">
   <owner>yaoqq@google.com</owner>
@@ -1885,7 +1871,7 @@
 </histogram>
 
 <histogram name="Arc.PrintPreview.PreviewEvent" enum="PrintPreviewHelperEvents"
-    expires_after="2024-06-04">
+    expires_after="2025-02-18">
   <owner>bmgordon@chromium.org</owner>
   <owner>project-bolton@google.com</owner>
   <summary>
@@ -1895,7 +1881,7 @@
 </histogram>
 
 <histogram name="Arc.PrintPreview.RendererError" enum="PrintPreviewFailureType"
-    expires_after="2024-08-18">
+    expires_after="2025-02-18">
   <owner>bmgordon@chromium.org</owner>
   <owner>project-bolton@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/ash/enums.xml b/tools/metrics/histograms/metadata/ash/enums.xml
index bba98fb..3b18e3d 100644
--- a/tools/metrics/histograms/metadata/ash/enums.xml
+++ b/tools/metrics/histograms/metadata/ash/enums.xml
@@ -1154,6 +1154,28 @@
   <int value="3" label="Collapse Group"/>
 </enum>
 
+<!-- LINT.IfChange(ExtendedUpdatesDialogEventEnum) -->
+
+<enum name="ExtendedUpdatesDialogEventEnum">
+  <int value="0" label="Dialog shown"/>
+  <int value="1" label="Opt in confirmed"/>
+</enum>
+
+<!-- LINT.ThenChange(//ash/system/extended_updates/extended_updates_metrics.h:ExtendedUpdatesDialogEvent) -->
+
+<!-- LINT.IfChange(ExtendedUpdatesEntryPointEventEnum) -->
+
+<enum name="ExtendedUpdatesEntryPointEventEnum">
+  <int value="0" label="Settings page set up button shown"/>
+  <int value="1" label="Settings page set up button clicked"/>
+  <int value="2" label="Quick settings banner shown"/>
+  <int value="3" label="Quick settings banner clicked"/>
+  <int value="4" label="No ARC notification shown"/>
+  <int value="5" label="No ARC notification clicked"/>
+</enum>
+
+<!-- LINT.ThenChange(//ash/system/extended_updates/extended_updates_metrics.h:ExtendedUpdatesEntryPointEvent) -->
+
 <enum name="FloatingWorkspaceV1RestoredSessionType">
   <int value="0" label="Unknown browser session type"/>
   <int value="1" label="Local browser session"/>
@@ -1675,6 +1697,8 @@
   <int value="0" label="Unknown"/>
   <int value="1" label="User inserts or copies a result."/>
   <int value="2" label="User abandons the session."/>
+  <int value="3" label="User selects an action to open another window."/>
+  <int value="4" label="User selects an action related to text format."/>
 </enum>
 
 <enum name="PinAutosubmitBackfillEvent">
diff --git a/tools/metrics/histograms/metadata/ash/histograms.xml b/tools/metrics/histograms/metadata/ash/histograms.xml
index 61c7b1ed..a3d197c 100644
--- a/tools/metrics/histograms/metadata/ash/histograms.xml
+++ b/tools/metrics/histograms/metadata/ash/histograms.xml
@@ -463,7 +463,7 @@
 </histogram>
 
 <histogram name="Ash.AmbientMode.Enabled" enum="BooleanEnabled"
-    expires_after="2024-08-25">
+    expires_after="2024-10-28">
   <owner>cowmoo@google.com</owner>
   <owner>xiaohuic@chromium.org</owner>
   <summary>
@@ -545,7 +545,7 @@
 </histogram>
 
 <histogram name="Ash.AmbientMode.PhotoSource" enum="AmbientModePhotoSource"
-    expires_after="2024-08-25">
+    expires_after="2024-10-28">
   <owner>cowmoo@google.com</owner>
   <owner>xiaohuic@chromium.org</owner>
   <summary>
@@ -1940,7 +1940,7 @@
 </histogram>
 
 <histogram name="Ash.CaptureModeController.ConsecutiveScreenshots"
-    units="consecutive screenshots" expires_after="2024-08-25">
+    units="consecutive screenshots" expires_after="2024-10-28">
   <owner>afakhry@chromium.org</owner>
   <owner>gzadina@google.com</owner>
   <summary>
@@ -2146,7 +2146,7 @@
 
 <histogram
     name="Ash.CaptureModeController.ScreenRecordingLength.{TabletOrClamshell}"
-    units="seconds" expires_after="2024-08-01">
+    units="seconds" expires_after="2024-10-28">
   <owner>afakhry@chromium.org</owner>
   <owner>gzadina@google.com</owner>
   <summary>
@@ -3461,7 +3461,7 @@
 </histogram>
 
 <histogram name="Ash.EventLatency.{EventType}.TotalLatency"
-    units="microseconds" expires_after="2024-08-27">
+    units="microseconds" expires_after="2024-10-28">
   <owner>xiyuan@chromium.org</owner>
   <owner>yichenz@chromium.org</owner>
   <owner>cros-sw-perf@google.com</owner>
@@ -3503,6 +3503,34 @@
   </token>
 </histogram>
 
+<histogram name="Ash.ExtendedUpdates.DialogEvent"
+    enum="ExtendedUpdatesDialogEventEnum" expires_after="2025-05-01">
+  <owner>aluh@chromium.org</owner>
+  <owner>artyomchen@google.com</owner>
+  <owner>janetmac@google.com</owner>
+  <owner>chromeos-consumer-extended-updates-team@google.com</owner>
+  <summary>
+    The number of times an event on the Extended Updates opt-in dialog happened.
+    Note that a user may open and close the dialog multiple times before finally
+    opting in, so it's more useful to filter on unique clients.
+  </summary>
+</histogram>
+
+<histogram name="Ash.ExtendedUpdates.EntryPointEvent"
+    enum="ExtendedUpdatesEntryPointEventEnum" expires_after="2025-05-01">
+  <owner>aluh@chromium.org</owner>
+  <owner>artyomchen@google.com</owner>
+  <owner>janetmac@google.com</owner>
+  <owner>chromeos-consumer-extended-updates-team@google.com</owner>
+  <summary>
+    The number of times an event related to the various entry points into the
+    Extended Updates opt-in flow happened. These numbers only include owner
+    users on unmanaged and opt-in required devices. Note that these events can
+    happen multiple times for the same user, so it's more useful to filter on
+    unique clients.
+  </summary>
+</histogram>
+
 <histogram name="Ash.Float.FloatWindowCountsPerSession" units="windows"
     expires_after="2024-09-29">
   <owner>nupurjain@google.com</owner>
@@ -6337,6 +6365,18 @@
   </token>
 </histogram>
 
+<histogram name="Ash.PowerNotification.TimeToEmptyForCritialState"
+    units="seconds" expires_after="2025-05-01">
+  <owner>dpad@google.com</owner>
+  <owner>longbowei@google.com</owner>
+  <owner>cros-peripherals@google.com</owner>
+  <summary>
+    Record the remaining battery time when the status changes to critical and
+    the corresponding notification is displayed. This metric is recorded only
+    once per transition to critical state.
+  </summary>
+</histogram>
+
 <histogram name="Ash.PowerSoundsController.PluggedInBatteryLevel" units="%"
     expires_after="2024-09-01">
   <owner>hongyulong@chromium.org</owner>
@@ -8589,7 +8629,7 @@
 </histogram>
 
 <histogram name="Ash.Wallpaper.Preview.Show" enum="BooleanHit"
-    expires_after="2024-08-25">
+    expires_after="2024-10-28">
   <owner>jasontt@chromium.org</owner>
   <owner>assistive-eng@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/ash_user_education/enums.xml b/tools/metrics/histograms/metadata/ash_user_education/enums.xml
index b81b382..b347b2b 100644
--- a/tools/metrics/histograms/metadata/ash_user_education/enums.xml
+++ b/tools/metrics/histograms/metadata/ash_user_education/enums.xml
@@ -111,6 +111,7 @@
   <int value="5" label="kSettingsApp"/>
   <int value="6" label="kShelf"/>
   <int value="7" label="kStatusArea"/>
+  <int value="8" label="kFilesApp"/>
 </enum>
 
 <enum name="WelcomeTourTimeBucket">
diff --git a/tools/metrics/histograms/metadata/assistant/histograms.xml b/tools/metrics/histograms/metadata/assistant/histograms.xml
index 098cad5c..251fc58 100644
--- a/tools/metrics/histograms/metadata/assistant/histograms.xml
+++ b/tools/metrics/histograms/metadata/assistant/histograms.xml
@@ -222,7 +222,7 @@
 </histogram>
 
 <histogram name="Assistant.ServiceState" enum="AssistantServiceState"
-    expires_after="2024-07-07">
+    expires_after="2024-10-28">
   <owner>wutao@chromium.org</owner>
   <owner>assistive-eng@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/autofill/enums.xml b/tools/metrics/histograms/metadata/autofill/enums.xml
index 188b089..45e8041 100644
--- a/tools/metrics/histograms/metadata/autofill/enums.xml
+++ b/tools/metrics/histograms/metadata/autofill/enums.xml
@@ -1587,67 +1587,6 @@
              response"/>
 </enum>
 
-<enum name="AutofillPopupHidingReason">
-  <int value="0" label="A suggestion was accepted."/>
-  <int value="1" label="An interstitial page displaces the popup."/>
-  <int value="2"
-      label="A field isn't edited anymore but remains focused for now."/>
-  <int value="3" label="Focus removed from field. Follows kEndEditing."/>
-  <int value="4"
-      label="Scrolling or zooming into the page displaces the popup."/>
-  <int value="5" label="A navigation on the page or frame level."/>
-  <int value="6" label="The popup is or would become empty."/>
-  <int value="7" label="The renderer explicitly requested closing the popup."/>
-  <int value="8"
-      label="The tab with the popup is destroyed, hidden or has become
-             inactive."/>
-  <int value="9" label="The popup contains stale data."/>
-  <int value="10"
-      label="The user explicitly dismissed the popup (e.g. ESC key)."/>
-  <int value="11"
-      label="The popup view (or its controller) goes out of scope."/>
-  <int value="12" label="The platform-native UI changed (e.g. window resize)."/>
-  <int value="13"
-      label="Not enough space in the content area to display at least one row
-             of the popup within the bounds of the content area."/>
-  <int value="14"
-      label="The popup would overlap with another open prompt, and may hide
-             sensitive information in the prompt."/>
-  <int value="15"
-      label="The anchor element for which the popup would be shown is not
-             visible in the content area."/>
-  <int value="16" label="The frame holds a pointer lock."/>
-  <int value="17"
-      label="The password generation popup would overlap and hide autofill
-             popup."/>
-  <int value="18"
-      label="The Touch To Fill surface is shown instead of autofill
-             suggestions."/>
-  <int value="19"
-      label="The context menu is shown instead of the autofill suggestions."/>
-  <int value="20"
-      label="The Fast Checkout surface is shown instead of autofill
-             suggestions."/>
-  <int value="21"
-      label="The Picture-in-picture window overlaps with the autofill
-             suggestion."/>
-  <int value="22"
-      label="The context menu was open after the autofill popup, which could
-             overlap with the autofill popup."/>
-  <int value="23"
-      label="No frame currently has focus. This case is caught for safety
-             because it might be reachable due to race conditions."/>
-  <int value="24"
-      label="The sub-popup was closed, e.g. because the mouse was moved to a
-             different suggestion in the parent popup."/>
-  <int value="25"
-      label="The user edited the field. Currently applied only to Compose
-             suggestions."/>
-  <int value="26"
-      label="The popup has faded due to an expired timer. Currently applied
-             only to Compose suggestions."/>
-</enum>
-
 <enum name="AutofillPredictionsComparisonResult">
 <!-- Generated from components/autofill/core/browser/field_types.h.
 Called by update_autofill_enums.py.-->
@@ -3451,6 +3390,67 @@
   <int value="3" label="Expiration date did not match, masked server card"/>
 </enum>
 
+<enum name="AutofillSuggestionHidingReason">
+  <int value="0" label="A suggestion was accepted."/>
+  <int value="1" label="An interstitial page displaces the popup."/>
+  <int value="2"
+      label="A field isn't edited anymore but remains focused for now."/>
+  <int value="3" label="Focus removed from field. Follows kEndEditing."/>
+  <int value="4"
+      label="Scrolling or zooming into the page displaces the popup."/>
+  <int value="5" label="A navigation on the page or frame level."/>
+  <int value="6" label="The popup is or would become empty."/>
+  <int value="7" label="The renderer explicitly requested closing the popup."/>
+  <int value="8"
+      label="The tab with the popup is destroyed, hidden or has become
+             inactive."/>
+  <int value="9" label="The popup contains stale data."/>
+  <int value="10"
+      label="The user explicitly dismissed the popup (e.g. ESC key)."/>
+  <int value="11"
+      label="The popup view (or its controller) goes out of scope."/>
+  <int value="12" label="The platform-native UI changed (e.g. window resize)."/>
+  <int value="13"
+      label="Not enough space in the content area to display at least one row
+             of the popup within the bounds of the content area."/>
+  <int value="14"
+      label="The popup would overlap with another open prompt, and may hide
+             sensitive information in the prompt."/>
+  <int value="15"
+      label="The anchor element for which the popup would be shown is not
+             visible in the content area."/>
+  <int value="16" label="The frame holds a pointer lock."/>
+  <int value="17"
+      label="The password generation popup would overlap and hide autofill
+             popup."/>
+  <int value="18"
+      label="The Touch To Fill surface is shown instead of autofill
+             suggestions."/>
+  <int value="19"
+      label="The context menu is shown instead of the autofill suggestions."/>
+  <int value="20"
+      label="The Fast Checkout surface is shown instead of autofill
+             suggestions."/>
+  <int value="21"
+      label="The Picture-in-picture window overlaps with the autofill
+             suggestion."/>
+  <int value="22"
+      label="The context menu was open after the autofill popup, which could
+             overlap with the autofill popup."/>
+  <int value="23"
+      label="No frame currently has focus. This case is caught for safety
+             because it might be reachable due to race conditions."/>
+  <int value="24"
+      label="The sub-popup was closed, e.g. because the mouse was moved to a
+             different suggestion in the parent popup."/>
+  <int value="25"
+      label="The user edited the field. Currently applied only to Compose
+             suggestions."/>
+  <int value="26"
+      label="The popup has faded due to an expired timer. Currently applied
+             only to Compose suggestions."/>
+</enum>
+
 <enum name="AutofillSuggestionManageType">
   <int value="0" label="Other"/>
   <int value="1" label="(Obsolete) Personal Information. Deprecated in M122"/>
@@ -4080,6 +4080,27 @@
   <int value="1" label="Upload was for newly-seen payment method"/>
 </enum>
 
+<enum name="Vcn3dsFlowEvents">
+  <int value="0"
+      label="The flow has started, and the consent dialog or a pop-up are
+             about to be shown"/>
+  <int value="1" label="The consent dialog was skipped"/>
+  <int value="2" label="The consent dialog was accepted"/>
+  <int value="3" label="The consent dialog was declined"/>
+  <int value="4"
+      label="The pop-up was not able to be shown when a show was attempted"/>
+  <int value="5"
+      label="The user cancelled the flow by closing the pop-up before
+             authentication has finished"/>
+  <int value="6" label="The authentication inside of the pop-up failed"/>
+  <int value="7"
+      label="The user cancelled the progress dialog while retrieving the VCN"/>
+  <int value="8"
+      label="The flow failed after pop-up closed while retrieving the VCN"/>
+  <int value="9"
+      label="The flow has successfully completed and retrieved a VCN"/>
+</enum>
+
 <enum name="VirtualCardStandaloneCvcSuggestionFormEvent">
   <int value="0" label="Suggestions shown"/>
   <int value="1" label="Suggestions shown (once)"/>
diff --git a/tools/metrics/histograms/metadata/autofill/histograms.xml b/tools/metrics/histograms/metadata/autofill/histograms.xml
index a642e6fa..b4089edf 100644
--- a/tools/metrics/histograms/metadata/autofill/histograms.xml
+++ b/tools/metrics/histograms/metadata/autofill/histograms.xml
@@ -178,7 +178,7 @@
   <variant name=".Reshows" summary="re-show"/>
 </variants>
 
-<!-- TODO(crbug.com/1472892): Rename PaymentsRpcCardType since we add LocalCard here. -->
+<!-- TODO(crbug.com/40926801): Rename PaymentsRpcCardType since we add LocalCard here. -->
 
 <variants name="Autofill.PaymentsRpcCardType">
   <variant name="LocalCard" summary="local card"/>
@@ -522,6 +522,15 @@
   <variant name=".Upload" summary="Server IBAN save"/>
 </variants>
 
+<variants name="Vcn3ds.ConsentAlreadyGiven">
+  <variant name="ConsentAlreadyGiven"
+      summary="The consent for a pop-up was already given prior to the flow
+               starting"/>
+  <variant name="ConsentNotGivenYet"
+      summary="The consent for a pop-up was not given prior to the flow
+               starting and needs to be requested"/>
+</variants>
+
 <histogram name="Autocomplete.DaysSinceLastUse" units="days"
     expires_after="2024-12-12">
   <owner>battre@chromium.org</owner>
@@ -967,6 +976,18 @@
   </summary>
 </histogram>
 
+<histogram name="Autofill.BetterAuth.EnrollmentPromptOffered" enum="Boolean"
+    expires_after="2024-07-01">
+  <owner>vinnypersky@google.com</owner>
+  <owner>payments-autofill-team@google.com</owner>
+  <summary>
+    Records whether the Better Auth (FIDO) enrollment prompt was offered. Logged
+    at the time of showing the prompt, or if not shown, when the prompt would
+    have been shown. This metric can only be logged from the checkout flow,
+    after a CVC authentication has completed.
+  </summary>
+</histogram>
+
 <histogram
     name="Autofill.BetterAuth.FlowEvents.{BetterAuthFlowType}.{CardType}"
     enum="AutofillCreditCardAuthenticationEvents" expires_after="2024-09-01">
@@ -1560,7 +1581,7 @@
 </histogram>
 
 <histogram name="Autofill.CreditCardUpload.ConfirmationResult.{IsCardUploaded}"
-    enum="AutofillSavePaymentMethodPromptResultEnum" expires_after="2024-08-01">
+    enum="AutofillSavePaymentMethodPromptResultEnum" expires_after="2024-10-28">
   <owner>darwinyang@google.com</owner>
   <owner>chrome-payments-team@google.com</owner>
   <owner>payments-autofill-team@google.com</owner>
@@ -1579,7 +1600,7 @@
 </histogram>
 
 <histogram name="Autofill.CreditCardUpload.ConfirmationShown.{IsCardUploaded}"
-    enum="Boolean" expires_after="2024-08-01">
+    enum="Boolean" expires_after="2024-10-28">
   <owner>darwinyang@google.com</owner>
   <owner>chrome-payments-team@google.com</owner>
   <owner>payments-autofill-team@google.com</owner>
@@ -1599,7 +1620,7 @@
 </histogram>
 
 <histogram name="Autofill.CreditCardUpload.LoadingResult"
-    enum="AutofillSavePaymentMethodPromptResultEnum" expires_after="2024-08-01">
+    enum="AutofillSavePaymentMethodPromptResultEnum" expires_after="2024-10-28">
   <owner>darwinyang@google.com</owner>
   <owner>chrome-payments-team@google.com</owner>
   <owner>payments-autofill-team@google.com</owner>
@@ -1610,7 +1631,7 @@
 </histogram>
 
 <histogram name="Autofill.CreditCardUpload.LoadingShown" enum="Boolean"
-    expires_after="2024-08-01">
+    expires_after="2024-10-28">
   <owner>darwinyang@google.com</owner>
   <owner>chrome-payments-team@google.com</owner>
   <owner>payments-autofill-team@google.com</owner>
@@ -1622,7 +1643,7 @@
 </histogram>
 
 <histogram name="Autofill.CreditCardUpload.RanLocalSaveFallback" enum="Boolean"
-    expires_after="2024-08-01">
+    expires_after="2024-10-28">
   <owner>darwinyang@google.com</owner>
   <owner>chrome-payments-team@google.com</owner>
   <owner>payments-autofill-team@google.com</owner>
@@ -2053,7 +2074,7 @@
 
 <histogram
     name="Autofill.FieldFillingStats{AutofillFillingMethod}{AutofillFormType}{FillingStatus}"
-    units="fields" expires_after="2024-08-25">
+    units="fields" expires_after="2024-10-28">
   <owner>brunobraga@google.com</owner>
   <owner>chrome-autofill-alerts@google.com</owner>
   <summary>
@@ -3038,7 +3059,7 @@
 
 <histogram
     name="Autofill.ManualFallback.ExplicitlyTriggered.{AutocompleteState}.Address"
-    enum="BooleanSelectManualFallback" expires_after="2024-08-25">
+    enum="BooleanSelectManualFallback" expires_after="2024-10-28">
   <owner>fleimgruber@google.com</owner>
   <owner>chrome-autofill-alerts@google.com</owner>
   <summary>
@@ -3431,7 +3452,7 @@
 </histogram>
 
 <histogram name="Autofill.PaymentMethods.CardBenefitsIsEnabled.Startup"
-    enum="BooleanEnabled" expires_after="2024-07-01">
+    enum="BooleanEnabled" expires_after="2024-10-28">
   <owner>alexandertekle@google.com</owner>
   <owner>yishuil@google.com</owner>
   <owner>payments-autofill-team@google.com</owner>
@@ -3706,7 +3727,7 @@
 </histogram>
 
 <histogram name="Autofill.Popup.AcceptanceDelayThresholdNotMet" units="ms"
-    expires_after="2024-05-01">
+    expires_after="2024-06-01">
   <owner>jkeitel@google.com</owner>
   <summary>
     Records instances in which the user attempted to accept an Autofill
@@ -3746,8 +3767,8 @@
   </token>
 </histogram>
 
-<histogram name="Autofill.PopupHidingReason" enum="AutofillPopupHidingReason"
-    expires_after="2024-09-22">
+<histogram name="Autofill.PopupHidingReason"
+    enum="AutofillSuggestionHidingReason" expires_after="2024-09-22">
   <owner>koerber@google.com</owner>
   <owner>mamir@chromium.org</owner>
   <summary>
@@ -3770,7 +3791,7 @@
 
 <histogram name="Autofill.PreFilledFieldClassificationsQuality.{FormType}"
     enum="AutofillPreFilledFieldClassificationsQuality"
-    expires_after="2024-09-22">
+    expires_after="2024-10-20">
   <owner>bwolfgang@google.com</owner>
   <owner>chrome-autofill-alerts@google.com</owner>
   <summary>
@@ -3782,7 +3803,7 @@
 </histogram>
 
 <histogram name="Autofill.PreFilledFields.ByFieldType"
-    enum="AutofillPreFilledFieldStatusByFieldType" expires_after="2024-06-10">
+    enum="AutofillPreFilledFieldStatusByFieldType" expires_after="2024-10-20">
   <owner>bwolfgang@google.com</owner>
   <owner>chrome-autofill-alerts@google.com</owner>
   <summary>
@@ -3792,7 +3813,7 @@
 </histogram>
 
 <histogram name="Autofill.PreFilledFields.{FormType}"
-    enum="AutofillPreFilledFieldStatus" expires_after="2024-07-21">
+    enum="AutofillPreFilledFieldStatus" expires_after="2024-10-20">
   <owner>bwolfgang@google.com</owner>
   <owner>chrome-autofill-alerts@google.com</owner>
   <summary>
@@ -3803,7 +3824,7 @@
 </histogram>
 
 <histogram name="Autofill.PreFilledValueStatus.{FormType}"
-    enum="AutofillPreFilledValueStatus" expires_after="2024-09-22">
+    enum="AutofillPreFilledValueStatus" expires_after="2024-10-20">
   <owner>bwolfgang@google.com</owner>
   <owner>chrome-autofill-alerts@google.com</owner>
   <summary>
@@ -4072,7 +4093,7 @@
 
 <histogram
     name="Autofill.ProfileTokenQuality.ObservationCountBeforeSubmission.{Type}"
-    units="Observations" expires_after="2024-08-25">
+    units="Observations" expires_after="2024-10-28">
   <owner>fleimgruber@google.com</owner>
   <owner>chrome-autofill-alerts@google.com</owner>
   <summary>
@@ -5061,6 +5082,18 @@
   </token>
 </histogram>
 
+<histogram name="Autofill.Suggestion.StrikeSuppression.Address" enum="Boolean"
+    expires_after="2024-12-12">
+  <owner>jihadghanna@google.com</owner>
+  <owner>chrome-autofill-alerts@google.com</owner>
+  <summary>
+    Records whether address suggestions were suppressed because of a field
+    reaching the strike limit due to the user consistently ignoring suggestions
+    on that field. Emitted only on desktop (where strike suppression exists)
+    every time regular (non-manual fallback) address suggestions are triggered.
+  </summary>
+</histogram>
+
 <histogram name="Autofill.SuggestionAccepted.OffTheRecord" units="units"
     expires_after="2024-09-22">
   <owner>arabm@google.com</owner>
@@ -5564,6 +5597,40 @@
   </summary>
 </histogram>
 
+<histogram name="Autofill.Vcn3ds.FlowEvents" enum="Vcn3dsFlowEvents"
+    expires_after="2024-07-01">
+  <owner>vinnypersky@google.com</owner>
+  <owner>payments-autofill-team@google.com</owner>
+  <summary>
+    Tracks when a user starts and completes a VCN 3DS flow, as well as events
+    throughout the flow. The metrics for flow started log when we initiate a VCN
+    3DS auth flow and are about to either show the consent dialog or the pop-up
+    directly. The metrics for flow completion are logged when the full flow is
+    considered completed, and are broken down by completion result. Other events
+    are logged at the moment they occur. This histogram is an aggregated version
+    of the Autofill.Vcn3ds.FlowEvents.{ConsentAlreadyGiven} histogram.
+  </summary>
+</histogram>
+
+<histogram name="Autofill.Vcn3ds.FlowEvents.{ConsentAlreadyGiven}"
+    enum="Vcn3dsFlowEvents" expires_after="2024-07-01">
+  <owner>vinnypersky@google.com</owner>
+  <owner>payments-autofill-team@google.com</owner>
+  <summary>
+    Tracks when a user starts and completes a VCN 3DS flow, as well as events
+    throughout the flow. The metrics for flow started log when we initiate a VCN
+    3DS auth flow and are about to either show the consent dialog or the pop-up
+    directly. The metrics for flow completion are logged when the full flow is
+    considered completed, and are broken down by completion result. Other events
+    are logged at the moment they occur. The histogram is broken down into
+    sub-histograms by whether user consent was already given prior to the flow
+    starting. If consent was already given, the consent dialog is not shown and
+    the pop-up is immediately triggered, otherwise the consent dialog is shown
+    and must be accepted for the pop-up to be triggered.
+  </summary>
+  <token key="ConsentAlreadyGiven" variants="Vcn3ds.ConsentAlreadyGiven"/>
+</histogram>
+
 <histogram name="Autofill.VirtualCard.Enroll.Attempt.{Source}"
     enum="BooleanAttempted" expires_after="2024-09-01">
   <owner>siyua@chromium.org</owner>
@@ -5626,7 +5693,7 @@
 </histogram>
 
 <histogram name="Autofill.VirtualCard.MetadataSynced" enum="BooleanExists"
-    expires_after="2024-07-01">
+    expires_after="2024-10-28">
   <owner>siyua@chromium.org</owner>
   <owner>payments-autofill-team@google.com</owner>
   <summary>
@@ -5798,7 +5865,7 @@
 </histogram>
 
 <histogram name="Autofill.VirtualCardEnrollBubble.LoadingShown"
-    enum="AutofillVirtualCardEnrollBubbleResult" expires_after="2024-08-01">
+    enum="AutofillVirtualCardEnrollBubbleResult" expires_after="2024-10-28">
   <owner>darwinyang@google.com</owner>
   <owner>kavitasoni@google.com</owner>
   <owner>chrome-payments-team@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/blink/histograms.xml b/tools/metrics/histograms/metadata/blink/histograms.xml
index 4a4f4fe..c5e8836 100644
--- a/tools/metrics/histograms/metadata/blink/histograms.xml
+++ b/tools/metrics/histograms/metadata/blink/histograms.xml
@@ -1414,6 +1414,29 @@
   </summary>
 </histogram>
 
+<histogram name="Blink.FedCm.ContinueOn.PopupWindowResult"
+    enum="FedCmContinueOnPopupResult" expires_after="2024-09-29">
+  <owner>cbiesinger@chromium.org</owner>
+  <owner>web-identity-eng@google.com</owner>
+  <summary>
+    Records whether the continue_on popup was closed by the user or by the page
+    finishing the flow. Recorded once per continue_on flow when the window gets
+    closed (at most once per FedCM API call). If the RP tab/window gets closed
+    before the popup, this will not get recorded.
+  </summary>
+</histogram>
+
+<histogram name="Blink.FedCm.ContinueOn.PopupWindowStatus"
+    enum="FedCmContinueOnPopupStatus" expires_after="2024-09-29">
+  <owner>cbiesinger@chromium.org</owner>
+  <owner>web-identity-eng@google.com</owner>
+  <summary>
+    Records whether we could open the continue_on popup or if not, why we
+    couldn't. Recorded once per continue_on popup request when we receive the
+    request, at most once per FedCM API call.
+  </summary>
+</histogram>
+
 <histogram name="Blink.FedCm.Disconnect.FrameType"
     enum="FedCmRequesterFrameType" expires_after="2024-08-13">
   <owner>npm@chromium.org</owner>
@@ -1650,6 +1673,18 @@
   </summary>
 </histogram>
 
+<histogram name="Blink.FedCm.RpParametersAndScopeState"
+    enum="FedCmRpParameters" expires_after="2024-10-06">
+  <owner>cbiesinger@chromium.org</owner>
+  <owner>web-identity-eng@google.com</owner>
+  <summary>
+    Records whether parameters or a non-default scope were specified in the
+    FedCM call by the RP for any IDP. Records once per FedCM call when the
+    request is initiated. Only recorded if parameters or non-default scopes were
+    specified and FedCmAuthz is enabled.
+  </summary>
+</histogram>
+
 <histogram name="Blink.FedCm.SetLoginStatusIgnored"
     enum="FedCmSetLoginStatusIgnoredReason" expires_after="2024-08-27">
   <owner>cbiesinger@chromium.org</owner>
@@ -1791,6 +1826,30 @@
   </summary>
 </histogram>
 
+<histogram name="Blink.FedCm.Timing.ContinueOn.Response" units="ms"
+    expires_after="2024-09-01">
+  <owner>cbiesinger@chromium.org</owner>
+  <owner>web-identity-eng@google.com</owner>
+  <summary>
+    Records the time from when an account is selected to when the continue_on
+    response is received. Only records a sample if and when
+    IdentityProvider.resolve is called from the continue_on popup. Recorded at
+    most once per FedCM call.
+  </summary>
+</histogram>
+
+<histogram name="Blink.FedCm.Timing.ContinueOn.TurnaroundTime" units="ms"
+    expires_after="2024-09-01">
+  <owner>cbiesinger@chromium.org</owner>
+  <owner>web-identity-eng@google.com</owner>
+  <summary>
+    Records the overall time from when the API is called to when the token is
+    received through IdentityProvider.resolve. Only records a sample if and when
+    IdentityProvider.resolve is called from the continue_on popup. Recorded at
+    most once per FedCM call.
+  </summary>
+</histogram>
+
 <histogram name="Blink.FedCm.Timing.ContinueOnDialog" units="ms"
     expires_after="2024-09-01">
   <owner>yigu@chromium.org</owner>
@@ -4437,141 +4496,6 @@
   </summary>
 </histogram>
 
-<histogram name="Blink.UseCounter.FencedFrames.AnimatedCSSProperties"
-    enum="MappedCSSProperties" expires_after="2023-08-30">
-  <owner>toyoshim@chromium.org</owner>
-  <owner>mparc-dev@chromium.org</owner>
-  <summary>
-    Similar to Blink.UseCounter.AnimatedCSSProperties, this records usage of
-    animated CSS properties used on a FencedFrame Page. Either statically or
-    dynamically, from the time the page is initialised to when it is closed or
-    navigated away from. Each property is counted at most once per page per view
-    via PageLoadMetricsObserver.
-
-    This histogram counts CSS properties only when they are animated by a CSS
-    Animation. Refer to Blink.UseCounter.FencedFrames.CSSProperties for more
-    details.
-
-    Not recorded if the page is prerendered and cancelled.
-  </summary>
-</histogram>
-
-<histogram name="Blink.UseCounter.FencedFrames.CSSProperties"
-    enum="MappedCSSProperties" expires_after="2023-08-30">
-  <owner>toyoshim@chromium.org</owner>
-  <owner>mparc-dev@chromium.org</owner>
-  <summary>
-    Similar to Blink.UseCounter.CSSProperties, this records usage of CSS
-    properties used on a FencedFrame Page. Either statically or dynamically,
-    from the time the page is initialised to when it is closed or navigated away
-    from. Each property is counted at most once per page per view via
-    PageLoadMetricsObserver.
-
-    The first time a CSS property is parsed on a page, the histogram is updated
-    to increment the counter. Each histogram bucket corresponds to a CSS
-    property (eg. width, border-radius). The exception is the 'Total pages
-    measured' bucket - this counts the number of pages that CSS properties were
-    counted on. When a page navigation occurs the page count bucket is
-    incremented and tracking of the set of which properties have been seen is
-    reset.
-
-    These numbers give the percentage of pages that use a CSS property. For
-    example, if the 'border-radius' histogram bucket has a count of 250, and the
-    page count bucket (i.e. bucket number 1) has a count of 1000 - this means
-    that 1000 pages were recorded, and border-radius was used on 25% of those
-    pages.
-
-    Note that CSS properties used inside of SVG images are not tracked.
-
-    Not recorded if the page is prerendered and cancelled.
-  </summary>
-</histogram>
-
-<histogram name="Blink.UseCounter.FencedFrames.Features" enum="FeatureObserver"
-    expires_after="2024-09-01">
-  <owner>toyoshim@chromium.org</owner>
-  <owner>mparc-dev@chromium.org</owner>
-  <summary>
-    Similar to Blink.UseCounter.Features, this counts how many page loads use
-    various features across all frames in a FencedFrame page. The PageVisits
-    bucket is incremented for each page load, and the other buckets incremented
-    at most once per PageVisit via blink::UseCounter and
-    UseCounterPageLoadMetricsObserver.
-
-    Note that this histogram only counts FencedFrames page with HTTP/HTTPS URL
-    scheme. Feature used in pages with other URL schemes are not counted.
-
-    Not recorded if the page is prerendered and cancelled.
-  </summary>
-</histogram>
-
-<histogram name="Blink.UseCounter.FencedFrames.MainFrame.Features"
-    enum="FeatureObserver" expires_after="2024-05-05">
-  <owner>toyoshim@chromium.org</owner>
-  <owner>mparc-dev@chromium.org</owner>
-  <summary>
-    Similar to Blink.UseCounter.MainFrame.Features, this counts how many page
-    loads use various features across in the main frame of a FencedFrame page.
-    The PageVisits bucket is incremented at the beginning of each page load and
-    the other buckets incremented at most once per PageVisit via
-    blink::UseCounter and UseCounterPageLoadMetricsObserver throughout the
-    lifetime of a page load metrics observer.
-
-    This histogram counts usage of web features in FencedFrames' main frame
-    only. Refer to Blink.UseCounter.FencedFrames.Features for more details.
-
-    Not recorded if the page is prerendered and cancelled.
-  </summary>
-</histogram>
-
-<histogram name="Blink.UseCounter.FencedFrames.PermissionsPolicy.Allow2"
-    enum="FeaturePolicyFeature" expires_after="2024-08-01">
-  <owner>lbrady@google.com</owner>
-  <owner>shivanisha@chromium.org</owner>
-  <owner>dom@chromium.org</owner>
-  <summary>
-    Similar to Blink.UseCounter.PermissionsPolicy.Allow2, this counts the use of
-    a specific permissions policy feature via the &quot;allow&quot; attribute on
-    iframes under FencedFrames root. Each policy is counted only once per page
-    load. But the page is limited only to FencedFrames pages.
-
-    Not recorded if the page is prerendered and cancelled.
-  </summary>
-</histogram>
-
-<histogram name="Blink.UseCounter.FencedFrames.PermissionsPolicy.Header2"
-    enum="FeaturePolicyFeature" expires_after="2024-08-01">
-  <owner>lbrady@google.com</owner>
-  <owner>shivanisha@chromium.org</owner>
-  <owner>dom@chromium.org</owner>
-  <summary>
-    Similar to Blink.UseCounter.PermissionsPolicy.Header2, this counts the use
-    of a specific permissions policy feature via both &quot;Feature-Policy&quot;
-    and &quot;Permissions-Policy&quot; HTTP response header. Each policy is
-    counted only once per page load. But the page is limited only to
-    FencedFrames pages.
-
-    Not recorded if the page is prerendered and cancelled.
-  </summary>
-</histogram>
-
-<histogram
-    name="Blink.UseCounter.FencedFrames.PermissionsPolicy.Violation.Enforce"
-    enum="FeaturePolicyFeature" expires_after="2024-08-01">
-  <owner>lbrady@google.com</owner>
-  <owner>shivanisha@chromium.org</owner>
-  <owner>dom@chromium.org</owner>
-  <summary>
-    Similar to Blink.UseCounter.PermissionsPolicy.Violation.Enforce, this counts
-    the actual enforced permissions policy violation. The metrics is triggered
-    when ExecutionContext::IsFeatureEnabled with ReportOptions::ReportOnFailure
-    as param returns false, at most once per page visit. But the page is limited
-    only to FencedFrames pages.
-
-    Not recorded if the page is prerendered and cancelled.
-  </summary>
-</histogram>
-
 <histogram name="Blink.UseCounter.File.Features" enum="FeatureObserver"
     expires_after="2024-09-15">
   <owner>yhirano@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/bluetooth/histograms.xml b/tools/metrics/histograms/metadata/bluetooth/histograms.xml
index 2c5b30e6..eb1c5244 100644
--- a/tools/metrics/histograms/metadata/bluetooth/histograms.xml
+++ b/tools/metrics/histograms/metadata/bluetooth/histograms.xml
@@ -1033,7 +1033,7 @@
 </histogram>
 
 <histogram name="Bluetooth.ChromeOS.FastPair.PairDevice.ErrorReason"
-    enum="BluetoothDeviceConnectErrorCode" expires_after="2024-04-28">
+    enum="BluetoothDeviceConnectErrorCode" expires_after="2025-06-28">
   <owner>jackshira@google.com</owner>
   <owner>dclasson@google.com</owner>
   <owner>brandosocarras@google.com</owner>
@@ -1676,7 +1676,7 @@
 
 <histogram
     name="Bluetooth.ChromeOS.PoweredState.Disable.HidWarningDialogBehavior"
-    units="HidWarningDialogDisabledBehavior" expires_after="2025-02-20">
+    enum="HidWarningDialogDisabledBehavior" expires_after="2025-02-20">
   <owner>tjohnsonkanu@google.com</owner>
   <owner>cros-connectivity@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/borealis/enums.xml b/tools/metrics/histograms/metadata/borealis/enums.xml
index db45445..9d4f208 100644
--- a/tools/metrics/histograms/metadata/borealis/enums.xml
+++ b/tools/metrics/histograms/metadata/borealis/enums.xml
@@ -55,6 +55,14 @@
   <int value="13" label="Main app never showed up"/>
 </enum>
 
+<enum name="BorealisLaunchSource">
+  <int value="0" label="Unknown"/>
+  <int value="1" label="chromeos-steam://install"/>
+  <int value="2" label="Unified App Installer"/>
+  <int value="3" label="Steam installer Launcher app"/>
+  <int value="4" label="insert_coin crosh command"/>
+</enum>
+
 <enum name="BorealisStartupResult">
   <int value="0" label="Success"/>
   <int value="1" label="Cancelled"/>
diff --git a/tools/metrics/histograms/metadata/borealis/histograms.xml b/tools/metrics/histograms/metadata/borealis/histograms.xml
index 37b3fad6..d18ca5eb 100644
--- a/tools/metrics/histograms/metadata/borealis/histograms.xml
+++ b/tools/metrics/histograms/metadata/borealis/histograms.xml
@@ -78,28 +78,28 @@
 </histogram>
 
 <histogram name="Borealis.Disk.StatefulReadsDaily" units="KiB"
-    expires_after="2024-08-25">
+    expires_after="2024-10-28">
   <owner>philpearson@google.com</owner>
   <owner>src/chrome/browser/ash/borealis/OWNERS</owner>
   <summary>Borealis stateful KiB read per day. Reported daily.</summary>
 </histogram>
 
 <histogram name="Borealis.Disk.StatefulWritesDaily" units="KiB"
-    expires_after="2024-08-25">
+    expires_after="2024-10-28">
   <owner>philpearson@google.com</owner>
   <owner>src/chrome/browser/ash/borealis/OWNERS</owner>
   <summary>Borealis stateful KiB written per day. Reported daily.</summary>
 </histogram>
 
 <histogram name="Borealis.Disk.SwapReadsDaily" units="KiB"
-    expires_after="2024-08-25">
+    expires_after="2024-10-28">
   <owner>philpearson@google.com</owner>
   <owner>src/chrome/browser/ash/borealis/OWNERS</owner>
   <summary>Borealis swap file KiB read per day. Reported daily.</summary>
 </histogram>
 
 <histogram name="Borealis.Disk.SwapWritesDaily" units="KiB"
-    expires_after="2024-08-25">
+    expires_after="2024-10-28">
   <owner>philpearson@google.com</owner>
   <owner>src/chrome/browser/ash/borealis/OWNERS</owner>
   <summary>Borealis swap file KiB written per day. Reported daily.</summary>
@@ -155,7 +155,7 @@
 </histogram>
 
 <histogram name="Borealis.Install.NumAttempts" enum="BooleanAttempted"
-    expires_after="2024-08-25">
+    expires_after="2024-10-28">
   <owner>philpearson@google.com</owner>
   <owner>src/chrome/browser/ash/borealis/OWNERS</owner>
   <summary>
@@ -211,6 +211,18 @@
   </summary>
 </histogram>
 
+<histogram name="Borealis.Install.Source" enum="BorealisLaunchSource"
+    expires_after="2024-10-11">
+  <owner>philpearson@google.com</owner>
+  <owner>src/chrome/browser/ash/borealis/OWNERS</owner>
+  <summary>
+    The referring source for a Borealis installer launch, for example, a
+    chromeos-steam://install link, the Steam installer app in the Launcher, or a
+    Unified App Installer click. This is recorded at the start of an
+    installation attempt.
+  </summary>
+</histogram>
+
 <histogram name="Borealis.Shutdown.Attempt" enum="BooleanAttempted"
     expires_after="2024-08-25">
   <owner>philpearson@google.com</owner>
@@ -222,7 +234,7 @@
 </histogram>
 
 <histogram name="Borealis.Stability" enum="GuestOsFailureClasses"
-    expires_after="2024-08-25">
+    expires_after="2024-10-28">
   <owner>philpearson@google.com</owner>
   <owner>src/chrome/browser/ash/borealis/OWNERS</owner>
   <summary>
@@ -285,7 +297,7 @@
 </histogram>
 
 <histogram name="Borealis.Startup.Result" enum="BorealisStartupResult"
-    expires_after="2024-08-25">
+    expires_after="2024-10-28">
   <owner>philpearson@google.com</owner>
   <owner>src/chrome/browser/ash/borealis/OWNERS</owner>
   <summary>
@@ -295,7 +307,7 @@
 </histogram>
 
 <histogram name="Borealis.VMPerformance.Generic.SlowFrameRatio" units="%"
-    expires_after="2024-08-25">
+    expires_after="2024-10-28">
   <owner>philpearson@google.com</owner>
   <owner>src/chrome/browser/ash/borealis/OWNERS</owner>
   <summary>
@@ -308,7 +320,7 @@
 </histogram>
 
 <histogram name="Borealis.VMPerformance.Generic.{Variant}" units="fps"
-    expires_after="2024-08-25">
+    expires_after="2024-10-28">
   <owner>philpearson@google.com</owner>
   <owner>src/chrome/browser/ash/borealis/OWNERS</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/browser/histograms.xml b/tools/metrics/histograms/metadata/browser/histograms.xml
index da9ce0e..24cf810 100644
--- a/tools/metrics/histograms/metadata/browser/histograms.xml
+++ b/tools/metrics/histograms/metadata/browser/histograms.xml
@@ -95,6 +95,26 @@
   </summary>
 </histogram>
 
+<histogram name="Browser.ERP.CachedEventsCount" units="events"
+    expires_after="2024-10-31">
+  <owner>lbaraz@chromium.org</owner>
+  <owner>cros-reporting-team@google.com</owner>
+  <summary>
+    Reflects cached events count: presents number of times a single event is
+    received and placed in cache. Per-event count is incremented every time an
+    event is added/replaced in the cache, and the metrics sample is recorded
+    once the event is confirmed by the server (and thus won't be accepted for
+    upload anymore). Expected to be 1 for the majority of the events, although
+    small number of re-uploads is allowed. Counter for an event that has not
+    been confirmed by the server yet will not be presented in UMA even if
+    received and cached multiple times; since ERP guarantees delivery, this
+    would only be a temporary state. Counter is inexact, since it may be reset
+    in the rare cases that the uploader memory usage reaches its limit. To see
+    how common that is, look at the histogram
+    Browser.ERP.UploadMemoryUsagePercent.
+  </summary>
+</histogram>
+
 <histogram name="Browser.ERP.ConfigFileParsingError"
     enum="EnterpriseCloudReportingStatusCode" expires_after="2025-04-01">
   <owner>albertojuarez@google.com</owner>
@@ -1050,6 +1070,18 @@
   </summary>
 </histogram>
 
+<histogram
+    name="BrowserRenderProcessHost.ExistingRendererIsInitializedAndNotDead"
+    enum="Boolean" expires_after="2025-04-26">
+  <owner>cduvall@chromium.org</owner>
+  <owner>swarm-team@google.com</owner>
+  <summary>
+    Whether the existing renderer used is alive. Recorded when
+    RenderProcessHostImpl::GetProcessHostForSiteInstance uses an existing
+    renderer.
+  </summary>
+</histogram>
+
 <histogram name="BrowserRenderProcessHost.FastShutdownIfPossible.DelayReason"
     enum="RenderProcessHostDelayShutdownReason" expires_after="2024-04-28">
   <owner>mych@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/browsing_topics/histograms.xml b/tools/metrics/histograms/metadata/browsing_topics/histograms.xml
index 5608d68..66cb8f5 100644
--- a/tools/metrics/histograms/metadata/browsing_topics/histograms.xml
+++ b/tools/metrics/histograms/metadata/browsing_topics/histograms.xml
@@ -198,7 +198,7 @@
 </histogram>
 
 <histogram name="BrowsingTopics.OverrideList.FileLoadResult"
-    enum="BrowsingTopicsOverrideListFileLoadResult" expires_after="2024-08-25">
+    enum="BrowsingTopicsOverrideListFileLoadResult" expires_after="2024-10-28">
   <owner>robertogden@chromium.org</owner>
   <owner>yaoxia@chromium.org</owner>
   <owner>jkarlin@chromium.org</owner>
@@ -212,7 +212,7 @@
 </histogram>
 
 <histogram name="BrowsingTopics.OverrideList.UsedOverride" enum="Boolean"
-    expires_after="2024-08-25">
+    expires_after="2024-10-27">
   <owner>robertogden@chromium.org</owner>
   <owner>yaoxia@chromium.org</owner>
   <owner>jkarlin@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/chromeos/enums.xml b/tools/metrics/histograms/metadata/chromeos/enums.xml
index 784344b..8d96c19 100644
--- a/tools/metrics/histograms/metadata/chromeos/enums.xml
+++ b/tools/metrics/histograms/metadata/chromeos/enums.xml
@@ -923,6 +923,7 @@
   <int value="8" label="InvalidPatchFileUri"/>
   <int value="9" label="InvalidPatchFile"/>
   <int value="10" label="InstallFailedTimeout"/>
+  <int value="11" label="FailedToGetFirmwareFile"/>
   <int value="100" label="InternalError"/>
   <int value="101" label="InstalledNewerFirmwareVersion"/>
   <int value="102" label="InstalledSameFirmwareVersion"/>
@@ -1318,6 +1319,12 @@
   <int value="4" label="Settings Button"/>
 </enum>
 
+<enum name="MetadataTier">
+  <int value="0" label="NoMetadata"/>
+  <int value="1" label="ClassificationOnly"/>
+  <int value="2" label="HasButtonConfig"/>
+</enum>
+
 <enum name="ModifierKeyDomCodes">
   <int value="0" label="MetaLeft"/>
   <int value="1" label="MetaRight"/>
diff --git a/tools/metrics/histograms/metadata/chromeos/histograms.xml b/tools/metrics/histograms/metadata/chromeos/histograms.xml
index ed10899..f9c417e 100644
--- a/tools/metrics/histograms/metadata/chromeos/histograms.xml
+++ b/tools/metrics/histograms/metadata/chromeos/histograms.xml
@@ -794,9 +794,9 @@
 
 <histogram
     name="ChromeOS.CertProvisioning.CsrSignTime{CertProvisioningProtocolVersion}.{CertProvisioningScope}"
-    units="ms" expires_after="2024-02-01">
+    units="ms" expires_after="2025-04-01">
   <owner>miersh@google.com</owner>
-  <owner>pmarko@chromium.org</owner>
+  <owner>gschwarz@google.com</owner>
   <summary>
     The amount of time it took the {CertProvisioningProtocolVersion} certificate
     provisioning worker with scope {CertProvisioningScope} to sign a CSR.
@@ -809,9 +809,9 @@
 
 <histogram
     name="ChromeOS.CertProvisioning.Event{CertProvisioningProtocolVersion}.{CertProvisioningScope}"
-    enum="CertProvisioningEvent" expires_after="2024-10-06">
+    enum="CertProvisioningEvent" expires_after="2025-04-01">
   <owner>miersh@google.com</owner>
-  <owner>pmarko@chromium.org</owner>
+  <owner>gschwarz@google.com</owner>
   <summary>
     Number of times each event is reached during the
     {CertProvisioningProtocolVersion} certificate provisioning flow with scope
@@ -824,9 +824,9 @@
 
 <histogram
     name="ChromeOS.CertProvisioning.KeypairGenerationTime{CertProvisioningProtocolVersion}.{CertProvisioningScope}"
-    units="ms" expires_after="2024-02-01">
+    units="ms" expires_after="2025-04-01">
   <owner>miersh@google.com</owner>
-  <owner>pmarko@chromium.org</owner>
+  <owner>gschwarz@google.com</owner>
   <summary>
     The amount of time it took the {CertProvisioningProtocolVersion} certificate
     provisioning worker with scope {CertProvisioningScope} to generate one key
@@ -839,9 +839,9 @@
 
 <histogram
     name="ChromeOS.CertProvisioning.Result{CertProvisioningProtocolVersion}.{CertProvisioningScope}"
-    enum="CertProvisioningWorkerState" expires_after="2024-06-30">
+    enum="CertProvisioningWorkerState" expires_after="2025-04-01">
   <owner>miersh@google.com</owner>
-  <owner>pmarko@chromium.org</owner>
+  <owner>gschwarz@google.com</owner>
   <summary>
     For final states (see the list in cert_provisioning::IsFinalState): number
     of times the {CertProvisioningProtocolVersion} certificate provisioning
@@ -855,9 +855,9 @@
 
 <histogram
     name="ChromeOS.CertProvisioning.VaTime{CertProvisioningProtocolVersion}.{CertProvisioningScope}"
-    units="ms" expires_after="2024-02-01">
+    units="ms" expires_after="2025-04-01">
   <owner>miersh@google.com</owner>
-  <owner>pmarko@chromium.org</owner>
+  <owner>gschwarz@google.com</owner>
   <summary>
     The amount of time it took the {CertProvisioningProtocolVersion} certificate
     provisioning worker with scope {CertProvisioningScope} to build one Verified
@@ -1620,7 +1620,7 @@
 2023-05-25. -->
 
 <histogram name="ChromeOS.IioService.SensorClientConcurrent" units="clients"
-    expires_after="2024-05-01">
+    expires_after="2025-05-01">
   <owner>chenghaoyang@chromium.org</owner>
   <owner>chromeos-sensors-eng@google.com</owner>
   <summary>
@@ -1634,7 +1634,7 @@
 2023-05-25. -->
 
 <histogram name="ChromeOS.IioService.SensorObserver" units="observers"
-    expires_after="2024-05-01">
+    expires_after="2025-05-01">
   <owner>chenghaoyang@chromium.org</owner>
   <owner>chromeos-sensors-eng@google.com</owner>
   <summary>
@@ -1648,7 +1648,7 @@
 2023-05-25. -->
 
 <histogram name="ChromeOS.IioService.SensorObserverOpen" units="observers"
-    expires_after="2024-05-01">
+    expires_after="2025-05-01">
   <owner>chenghaoyang@chromium.org</owner>
   <owner>chromeos-sensors-eng@google.com</owner>
   <summary>
@@ -1662,7 +1662,7 @@
 2023-05-25. -->
 
 <histogram name="ChromeOS.IioService.SensorUsage.{Frequency}Hz"
-    enum="ChromeOSIioServiceSensorUsage" expires_after="2024-05-01">
+    enum="ChromeOSIioServiceSensorUsage" expires_after="2025-05-01">
   <owner>chenghaoyang@chromium.org</owner>
   <owner>chromeos-sensors-eng@google.com</owner>
   <summary>
@@ -1789,7 +1789,7 @@
 
 <histogram
     name="ChromeOS.Inputs.InternalKeyboard.CustomTopRowLayout.TopRowKeysPresent"
-    enum="KeyboardTopRowActionKeys" expires_after="2024-07-21">
+    enum="KeyboardTopRowActionKeys" expires_after="2024-10-28">
   <owner>dpad@google.com</owner>
   <owner>cambickel@google.com</owner>
   <owner>cros-peripherals@google.com</owner>
@@ -1962,6 +1962,19 @@
   </token>
 </histogram>
 
+<histogram name="ChromeOS.Inputs.{DeviceType}.MetadataTier" enum="MetadataTier"
+    expires_after="2025-03-10">
+  <owner>wangdanny@google.com</owner>
+  <owner>dpad@google.com</owner>
+  <owner>cros-peripherals@google.com</owner>
+  <summary>Records the number of metadata tiers on {DeviceType}.</summary>
+  <token key="DeviceType">
+    <variant name="GraphicsTablet"/>
+    <variant name="Keyboard"/>
+    <variant name="Mouse"/>
+  </token>
+</histogram>
+
 <histogram name="ChromeOS.Intents.IntentPickerAction"
     enum="IntentPickerDialogAction" expires_after="2024-09-01">
   <owner>tsergeant@chromium.org</owner>
@@ -2765,6 +2778,16 @@
   </summary>
 </histogram>
 
+<histogram name="ChromeOS.Secagentd.CommandLineLength" units="bytes"
+    expires_after="2025-01-31">
+  <owner>rborzello@google.com</owner>
+  <owner>cros-enterprise-security@google.com</owner>
+  <summary>
+    Records the size of the commandline length in bytes. It is emmited once per
+    XDR exec event.
+  </summary>
+</histogram>
+
 <histogram name="ChromeOS.Secagentd.Policy" enum="SecagentdPolicy"
     expires_after="2025-01-31">
   <owner>rborzello@google.com</owner>
@@ -4096,7 +4119,7 @@
 </histogram>
 
 <histogram name="ChromeOS.Zram.PSISomeOrigDataSizeMB" units="MB"
-    expires_after="2024-08-25">
+    expires_after="2024-10-28">
   <owner>erikchen@chromium.org</owner>
   <owner>bgeffon@chromium.org</owner>
   <owner>chromeos-memory@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/chromeos_settings/histograms.xml b/tools/metrics/histograms/metadata/chromeos_settings/histograms.xml
index e38c1cf7..b50a9cf 100644
--- a/tools/metrics/histograms/metadata/chromeos_settings/histograms.xml
+++ b/tools/metrics/histograms/metadata/chromeos_settings/histograms.xml
@@ -572,7 +572,7 @@
 </histogram>
 
 <histogram base="true" name="ChromeOS.Settings.NumClicksUntilChange"
-    units="clicks" expires_after="2024-08-25">
+    units="clicks" expires_after="2024-10-27">
 <!-- Name completed by histogram_suffixes name="OsSettingsChangeType" -->
 
   <owner>wesokuhara@google.com</owner>
@@ -907,7 +907,7 @@
 </histogram>
 
 <histogram name="ChromeOS.Settings.WindowTotalActiveDuration" units="ms"
-    expires_after="2024-08-25">
+    expires_after="2024-10-28">
   <owner>moteva@google.com</owner>
   <owner>wesokuhara@google.com</owner>
   <owner>cros-settings@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/content/histograms.xml b/tools/metrics/histograms/metadata/content/histograms.xml
index 9f0ba4a..e695895 100644
--- a/tools/metrics/histograms/metadata/content/histograms.xml
+++ b/tools/metrics/histograms/metadata/content/histograms.xml
@@ -416,7 +416,7 @@
 </histogram>
 
 <histogram name="ContentSettings.RegularProfile.DefaultStorageAccessSetting"
-    enum="ContentSetting" expires_after="2024-08-25">
+    enum="ContentSetting" expires_after="2024-10-27">
   <owner>dullweber@chromium.org</owner>
   <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/cookie/histograms.xml b/tools/metrics/histograms/metadata/cookie/histograms.xml
index d951a87..e5403431 100644
--- a/tools/metrics/histograms/metadata/cookie/histograms.xml
+++ b/tools/metrics/histograms/metadata/cookie/histograms.xml
@@ -417,7 +417,7 @@
 </histogram>
 
 <histogram name="Cookie.ExpirationDurationMinutesSecure" units="minutes"
-    expires_after="2024-07-01">
+    expires_after="2024-10-28">
   <owner>arichiv@chromium.org</owner>
   <owner>kaustubhag@chromium.org</owner>
   <owner>bingler@chromium.org</owner>
@@ -1096,7 +1096,7 @@
 
 <histogram name="Cookie.TimeBlockedOnLoad" units="ms"
     expires_after="2024-09-22">
-  <owner>nharper@chromium.org</owner>
+  <owner>wfh@chromium.org</owner>
   <summary>
     The amount of time (ms) between the cookie store load starting and
     completing.
diff --git a/tools/metrics/histograms/metadata/cras/histograms.xml b/tools/metrics/histograms/metadata/cras/histograms.xml
index 3b7c8c7..7e0555a 100644
--- a/tools/metrics/histograms/metadata/cras/histograms.xml
+++ b/tools/metrics/histograms/metadata/cras/histograms.xml
@@ -333,7 +333,7 @@
 </histogram>
 
 <histogram name="Cras.DeviceSampleRate.Input{Device}" units="bps"
-    expires_after="2024-08-25">
+    expires_after="2024-10-28">
   <owner>yuhsuan@chromium.org</owner>
   <owner>chromeos-audio@google.com</owner>
   <summary>
@@ -344,7 +344,7 @@
 </histogram>
 
 <histogram name="Cras.DeviceSampleRate.Output{Device}" units="bps"
-    expires_after="2024-08-25">
+    expires_after="2024-10-28">
   <owner>yuhsuan@chromium.org</owner>
   <owner>chromeos-audio@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/custom_tabs/histograms.xml b/tools/metrics/histograms/metadata/custom_tabs/histograms.xml
index 860c0f3..abafa42 100644
--- a/tools/metrics/histograms/metadata/custom_tabs/histograms.xml
+++ b/tools/metrics/histograms/metadata/custom_tabs/histograms.xml
@@ -53,7 +53,7 @@
 </histogram>
 
 <histogram name="CustomTabs.Branding.AppIdType"
-    enum="CustomTabsBrandingAppIdType" expires_after="2024-08-24">
+    enum="CustomTabsBrandingAppIdType" expires_after="2024-10-28">
   <owner>jinsukkim@chromium.org</owner>
   <owner>chrome-connective-tissue@google.com</owner>
   <summary>
@@ -495,7 +495,7 @@
 
 <histogram
     name="CustomTabs.PostMessage.RequestPostMessageChannelWithTargetOrigin"
-    enum="Boolean" expires_after="2024-08-26">
+    enum="Boolean" expires_after="2024-10-28">
   <owner>elabadysayed@chromium.org</owner>
   <owner>chrome-connective-tissue@google.com</owner>
   <summary>
@@ -614,7 +614,7 @@
 </histogram>
 
 <histogram name="CustomTabs.Startup.TimeToFirstCommitNavigation2.{suffix}"
-    units="ms" expires_after="2024-08-25">
+    units="ms" expires_after="2024-10-28">
   <owner>mthiesse@chromium.org</owner>
   <owner>chrome-connective-tissue@google.com</owner>
   <summary>
@@ -643,7 +643,7 @@
 </histogram>
 
 <histogram name="CustomTabs.Startup.TimeToLargestContentfulPaint2.{suffix}"
-    units="ms" expires_after="2024-08-25">
+    units="ms" expires_after="2024-10-28">
   <owner>mthiesse@chromium.org</owner>
   <owner>chrome-connective-tissue@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/download/enums.xml b/tools/metrics/histograms/metadata/download/enums.xml
index d18a6ce..ccd3b6f0 100644
--- a/tools/metrics/histograms/metadata/download/enums.xml
+++ b/tools/metrics/histograms/metadata/download/enums.xml
@@ -26,6 +26,11 @@
 
 <enums>
 
+<enum name="BooleanOpenFromDuplicates">
+  <int value="0" label="Created New file"/>
+  <int value="1" label="Opened existing duplicate"/>
+</enum>
+
 <enum name="BooleanReplaced">
   <int value="0" label="Did Not Replace"/>
   <int value="1" label="Replaced"/>
diff --git a/tools/metrics/histograms/metadata/download/histograms.xml b/tools/metrics/histograms/metadata/download/histograms.xml
index d7fc17e..53db950 100644
--- a/tools/metrics/histograms/metadata/download/histograms.xml
+++ b/tools/metrics/histograms/metadata/download/histograms.xml
@@ -75,6 +75,18 @@
   </summary>
 </histogram>
 
+<histogram name="Download.Android.OpenPdfFromDuplicates"
+    enum="BooleanOpenFromDuplicates" expires_after="2024-12-31">
+  <owner>qinmin@chromium.org</owner>
+  <owner>dtrainor@chromium.org</owner>
+  <summary>
+    Records whether opening a pdf download on Android triggers opening an
+    existing downloaded file, instead of creating a new file. This metric is
+    only recorded when Chrome enables rendering PDFs inside a tab, and it is
+    reorded once each time a PDF is displayed.
+  </summary>
+</histogram>
+
 <histogram name="Download.ApiFunctions" enum="DownloadFunctions"
     expires_after="2024-09-29">
   <owner>dtrainor@chromium.org</owner>
@@ -1133,7 +1145,7 @@
 </histogram>
 
 <histogram name="Download.Start.PerProfileType" enum="BrowserProfileType"
-    expires_after="2024-06-30">
+    expires_after="2024-10-28">
   <owner>sideyilmaz@chromium.org</owner>
   <owner>chrome-incognito@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/enterprise/histograms.xml b/tools/metrics/histograms/metadata/enterprise/histograms.xml
index 8f127959..1dd2f59 100644
--- a/tools/metrics/histograms/metadata/enterprise/histograms.xml
+++ b/tools/metrics/histograms/metadata/enterprise/histograms.xml
@@ -1638,7 +1638,7 @@
 </histogram>
 
 <histogram name="Enterprise.Dlp.PrintingWarned" enum="BooleanWarned"
-    expires_after="2024-08-25">
+    expires_after="2024-10-28">
   <owner>aidazolic@chromium.org</owner>
   <owner>chromeos-dlp@google.com</owner>
   <summary>
@@ -2367,17 +2367,6 @@
 </histogram>
 
 <histogram
-    name="Enterprise.MachineLevelUserCloudPolicyEnrollment.RequestFailureTime"
-    units="ms" expires_after="2022-06-01">
-  <owner>rogerta@chromium.org</owner>
-  <owner>zmin@chromium.org</owner>
-  <summary>
-    Time since the enrollment request was made until an error is returned from
-    the server.
-  </summary>
-</histogram>
-
-<histogram
     name="Enterprise.MachineLevelUserCloudPolicyEnrollment.RequestSuccessTime"
     units="ms" expires_after="2025-05-01">
   <owner>zmin@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/event/histograms.xml b/tools/metrics/histograms/metadata/event/histograms.xml
index 5782f79..e4c5244 100644
--- a/tools/metrics/histograms/metadata/event/histograms.xml
+++ b/tools/metrics/histograms/metadata/event/histograms.xml
@@ -101,7 +101,7 @@
 </histogram>
 
 <histogram name="Event.InputEventPrediction.Scroll.Frame{ScoreType}"
-    units="pixels" expires_after="2024-08-25">
+    units="pixels" expires_after="2024-10-28">
   <owner>flackr@chromium.org</owner>
   <owner>input-dev@chromium.org</owner>
   <summary>
@@ -539,7 +539,7 @@
 </histogram>
 
 <histogram name="Event.Latency.ScrollUpdate.Touch.AverageLagPresentation"
-    units="pixels" expires_after="2024-08-25">
+    units="pixels" expires_after="2024-10-28">
   <owner>flackr@chromium.org</owner>
   <owner>sahir.vellani@microsoft.com</owner>
   <owner>input-dev@chromium.org</owner>
@@ -559,7 +559,7 @@
 
 <histogram
     name="Event.Latency.ScrollUpdate.Touch.AverageLagPresentation.NoPrediction"
-    units="pixels" expires_after="2024-08-25">
+    units="pixels" expires_after="2024-10-28">
   <owner>flackr@chromium.org</owner>
   <owner>sahir.vellani@microsoft.com</owner>
   <owner>input-dev@chromium.org</owner>
@@ -580,7 +580,7 @@
 
 <histogram
     name="Event.Latency.ScrollUpdate.Touch.AverageLagPresentation.RemainingLagPercentage"
-    units="%" expires_after="2024-08-25">
+    units="%" expires_after="2024-10-28">
   <owner>flackr@chromium.org</owner>
   <owner>sahir.vellani@microsoft.com</owner>
   <owner>input-dev@chromium.org</owner>
@@ -612,7 +612,7 @@
 
 <histogram
     name="Event.Latency.ScrollUpdate.Touch.AverageLagPresentation.{PredictionImpact}"
-    units="pixels" expires_after="2024-08-25">
+    units="pixels" expires_after="2024-10-28">
   <owner>flackr@chromium.org</owner>
   <owner>sahir.vellani@microsoft.com</owner>
   <owner>input-dev@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/extensions/enums.xml b/tools/metrics/histograms/metadata/extensions/enums.xml
index 2626243..ad6019a 100644
--- a/tools/metrics/histograms/metadata/extensions/enums.xml
+++ b/tools/metrics/histograms/metadata/extensions/enums.xml
@@ -49,13 +49,14 @@
   <int value="1" label="Has withheld hosts"/>
 </enum>
 
-<enum name="CorruptExtensionDisabledReason">
+<enum name="ContentVerifyJobResult">
   <summary>
-    The reason why content verification flagged an extension as corrupted. See
-    ContentVerifyJob::FailureReason in
-    src/extensions/browser/content_verify_job.h.
+    The result of a content verification job, either indicating success (no
+    failure) or the reason why content verification flagged an extension as
+    corrupted. See ContentVerifyJob::FailureReason in
+    src/extensions/browser/content_verifier/content_verify_job.h.
   </summary>
-  <int value="0" label="Unknown Reason"/>
+  <int value="0" label="No Failure"/>
   <int value="1" label="Missing All Hashes"/>
   <int value="2" label="Corrupted Hashes"/>
   <int value="3" label="No Hashes For File"/>
@@ -2736,6 +2737,10 @@
   <int value="1881" label="USERSCRIPTS_GETWORLDCONFIGURATIONS"/>
   <int value="1882" label="USERSCRIPTS_RESETWORLDCONFIGURATION"/>
   <int value="1883" label="AUTOTESTPRIVATE_WAITFORLOGINANIMATIONEND"/>
+  <int value="1884" label="CHROMEOSINFOPRIVATE_ISRUNNINGONLACROS"/>
+  <int value="1885" label="WEBSTOREPRIVATE_GETFULLCHROMEVERSION"/>
+  <int value="1886"
+      label="ODFSCONFIGPRIVATE_ISFILESYSTEMPROVIDERCONTENTCACHEENABLED"/>
 </enum>
 
 <enum name="ExtensionInstallationCrxInstallError">
diff --git a/tools/metrics/histograms/metadata/extensions/histograms.xml b/tools/metrics/histograms/metadata/extensions/histograms.xml
index 7d80f11..b00e10c9 100644
--- a/tools/metrics/histograms/metadata/extensions/histograms.xml
+++ b/tools/metrics/histograms/metadata/extensions/histograms.xml
@@ -195,7 +195,7 @@
 </histogram>
 
 <histogram name="Extensions.ActiveScriptController.PermittedExtensions"
-    units="Extension Count" expires_after="2024-08-25">
+    units="Extension Count" expires_after="2024-10-27">
   <owner>rdevlin.cronin@chromium.org</owner>
   <owner>extensions-core@chromium.org</owner>
   <summary>
@@ -475,6 +475,32 @@
   </summary>
 </histogram>
 
+<histogram
+    name="Extensions.ContentVerification.DidHashMismatchOnFetchCompleteMV2"
+    enum="Boolean" expires_after="2024-12-01">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <owner>extensions-core@chromium.org</owner>
+  <summary>
+    Reports whether content verification hashes found a hash mismatch when hash
+    fetching completes for a Manifest Version 2 extension. Hash fetching occurs
+    both for a specific content verification job and when the extension first
+    loads.
+  </summary>
+</histogram>
+
+<histogram
+    name="Extensions.ContentVerification.DidHashMismatchOnFetchCompleteMV3"
+    enum="Boolean" expires_after="2024-12-01">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <owner>extensions-core@chromium.org</owner>
+  <summary>
+    Reports whether content verification hashes found a hash mismatch when hash
+    fetching completes for a Manifest Version 3 extension. Hash fetching occurs
+    both for a specific content verification job and when the extension first
+    loads.
+  </summary>
+</histogram>
+
 <histogram name="Extensions.ContentVerification.FetchFailureError"
     enum="CombinedHttpResponseAndNetErrorCode" expires_after="never">
 <!-- expires-never: Monitoring outcomes of admin installed extensions -->
@@ -508,7 +534,7 @@
 
 <histogram
     name="Extensions.ContentVerification.VerifyFailedOnFileMV2{VerifiedFileType}"
-    enum="CorruptExtensionDisabledReason" expires_after="2024-12-01">
+    enum="ContentVerifyJobResult" expires_after="2024-12-01">
   <owner>rdevlin.cronin@chromium.org</owner>
   <owner>extensions-core@chromium.org</owner>
   <summary>
@@ -523,7 +549,7 @@
 
 <histogram
     name="Extensions.ContentVerification.VerifyFailedOnFileMV3{VerifiedFileType}"
-    enum="CorruptExtensionDisabledReason" expires_after="2024-12-01">
+    enum="ContentVerifyJobResult" expires_after="2024-12-01">
   <owner>rdevlin.cronin@chromium.org</owner>
   <owner>extensions-core@chromium.org</owner>
   <summary>
@@ -556,6 +582,28 @@
   </summary>
 </histogram>
 
+<histogram name="Extensions.ContentVerification.VerifyJobResultMV2"
+    enum="ContentVerifyJobResult" expires_after="2024-12-01">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <owner>extensions-core@chromium.org</owner>
+  <summary>
+    Reports the result of a given content verification job succeeded for a
+    Manifest Version 2 extension. Emitted when the job is complete. A content
+    verification job is started for a given extension resource request.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.ContentVerification.VerifyJobResultMV3"
+    enum="ContentVerifyJobResult" expires_after="2024-12-01">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <owner>extensions-core@chromium.org</owner>
+  <summary>
+    Reports the result of a given content verification job succeeded for a
+    Manifest Version 3 extension. Emitted when the job is complete. A content
+    verification job is started for a given extension resource request.
+  </summary>
+</histogram>
+
 <histogram name="Extensions.ContextMenuAction"
     enum="ExtensionContextMenuAction" expires_after="never">
 <!-- expires-never: Monitoring extension usage. -->
@@ -581,7 +629,7 @@
 </histogram>
 
 <histogram name="Extensions.CorruptExtensionDisabledReason"
-    enum="CorruptExtensionDisabledReason" expires_after="2024-11-20">
+    enum="ContentVerifyJobResult" expires_after="2024-11-20">
   <owner>jlulejian@chromium.org</owner>
   <owner>extensions-core@chromium.org</owner>
   <summary>
@@ -898,7 +946,7 @@
 
 <histogram
     name="Extensions.DeclarativeNetRequest.RegexRulesBeforeRequestActionTime.{RegexRulesetSize}"
-    units="microseconds" expires_after="2024-08-28">
+    units="microseconds" expires_after="2024-10-28">
   <owner>rdevlin.cronin@chromium.org</owner>
   <owner>kelvinjiang.cronin@chromium.org</owner>
   <owner>src/extensions/OWNERS</owner>
@@ -1070,9 +1118,9 @@
 </histogram>
 
 <histogram name="Extensions.DeclarativeNetRequest.RulesetReindexSuccessful"
-    enum="BooleanSuccess" expires_after="2024-04-28">
-  <owner>lazyboy@chromium.org</owner>
-  <owner>src/extensions/OWNERS</owner>
+    enum="BooleanSuccess" expires_after="2025-04-28">
+  <owner>kelvinjiang@chromium.org</owner>
+  <owner>extensions-core@chromium.org</owner>
   <summary>
     Indicates whether reindexing of a Declarative Net Request ruleset was
     successful. Called whenever a JSON ruleset for an extension is reindexed,
@@ -1459,10 +1507,9 @@
                  run in the process are persistent, they will generally never
                  be stale and so won't skew the data significantly in the
                  failure case and are therefore mostly comparable."/>
-    <variant name="ExtensionServiceWorker2"
+    <variant name="ExtensionServiceWorker3"
         summary="service worker. Replaced previous version because values
-                 were inconsistent with excluding
-                 EventRouter::DispatchEventToSender() events 2023-09"/>
+                 were temporarily inaccurate due to a bug in logging 2024-04"/>
   </token>
 </histogram>
 
@@ -1705,6 +1752,9 @@
     Emits whether the ServiceWorkerContext::StartingExternalRequest() succeeded
     or failed when
     Extensions.Events.DidDispatchToAckSucceed.ExtensionServiceWorker2 == false.
+
+    Note there is missing data during 2024-04 since the metric was not emitting
+    temporarily.
   </summary>
 </histogram>
 
@@ -4377,7 +4427,7 @@
 
 <histogram
     name="Extensions.ServiceWorkerBackground.FinishedExternalRequest_Result_PostReturn"
-    enum="ServiceWorkerExternalRequestResult" expires_after="2024-08-25">
+    enum="ServiceWorkerExternalRequestResult" expires_after="2024-10-28">
   <owner>jlulejian@chromium.org</owner>
   <owner>extensions-core@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/facilitated_payments/OWNERS b/tools/metrics/histograms/metadata/facilitated_payments/OWNERS
new file mode 100644
index 0000000..c39c5ef6
--- /dev/null
+++ b/tools/metrics/histograms/metadata/facilitated_payments/OWNERS
@@ -0,0 +1,5 @@
+per-file OWNERS=file://tools/metrics/histograms/metadata/METRIC_REVIEWER_OWNERS
+
+# Prefer sending CLs to the owners listed below.
+# Use chromium-metrics-reviews@google.com as a backup.
+rouslan@chromium.org
diff --git a/tools/metrics/histograms/metadata/facilitated_payments/enums.xml b/tools/metrics/histograms/metadata/facilitated_payments/enums.xml
new file mode 100644
index 0000000..cbdbe6ed
--- /dev/null
+++ b/tools/metrics/histograms/metadata/facilitated_payments/enums.xml
@@ -0,0 +1,26 @@
+<!--
+Copyright 2024 The Chromium Authors
+Use of this source code is governed by a BSD-style license that can be
+found in the LICENSE file.
+-->
+
+<!--
+
+This file describes the enumerations referenced by entries in histograms.xml for
+this directory. Some enums may instead be listed in the central enums.xml file
+at src/tools/metrics/histograms/enums.xml when multiple files use them.
+
+For best practices on writing enumerations descriptions, see
+https://chromium.googlesource.com/chromium/src.git/+/HEAD/tools/metrics/histograms/README.md#Enum-Histograms
+
+Please follow the instructions in the OWNERS file in this directory to find a
+reviewer.
+-->
+
+<histogram-configuration>
+
+<!-- Enum types -->
+
+<enums/>
+
+</histogram-configuration>
diff --git a/tools/metrics/histograms/metadata/facilitated_payments/histograms.xml b/tools/metrics/histograms/metadata/facilitated_payments/histograms.xml
new file mode 100644
index 0000000..11294d0
--- /dev/null
+++ b/tools/metrics/histograms/metadata/facilitated_payments/histograms.xml
@@ -0,0 +1,99 @@
+<!--
+Copyright 2024 The Chromium Authors
+Use of this source code is governed by a BSD-style license that can be
+found in the LICENSE file.
+-->
+
+<!--
+This file is used to generate a comprehensive list of Facilitated Payments histograms
+along with a detailed description for each histogram.
+
+For best practices on writing histogram descriptions, see
+https://chromium.googlesource.com/chromium/src.git/+/HEAD/tools/metrics/histograms/README.md
+
+Please follow the instructions in the OWNERS file in this directory to find a
+reviewer.
+-->
+
+<histogram-configuration>
+
+<histograms>
+
+<!-- Note: Update the histogram summaries when adding a new variant.-->
+
+<variants name="FacilitatedPaymentsTypes">
+  <variant name=".Pix"
+      summary="Facilitate a Pix based payment using Google Pay."/>
+</variants>
+
+<histogram
+    name="FacilitatedPayments.{FacilitatedPaymentsType}.GetClientToken.Latency"
+    units="ms" expires_after="2024-09-01">
+  <owner>siashah@google.com</owner>
+  <owner>vishwasuppoor@google.com</owner>
+  <owner>rouslan@google.com</owner>
+  <owner>payments-autofill-team@google.com</owner>
+  <summary>
+    Latency for the call to fetch the client token. The client token is fetched
+    from the platform specific payment library in preparation for facilitating
+    the payment using Google Pay. [Frequency] Logged at most once per page load.
+    [Trigger] Page is loaded and the main frame contains a valid payment code
+    for {FacilitatedPaymentsType}.
+  </summary>
+  <token key="FacilitatedPaymentsType" variants="FacilitatedPaymentsTypes"/>
+</histogram>
+
+<histogram
+    name="FacilitatedPayments.{FacilitatedPaymentsType}.GetClientToken.Result"
+    enum="Boolean" expires_after="2024-09-01">
+  <owner>siashah@google.com</owner>
+  <owner>vishwasuppoor@google.com</owner>
+  <owner>rouslan@google.com</owner>
+  <owner>payments-autofill-team@google.com</owner>
+  <summary>
+    Result of whether the call to fetch the client token was successful or not.
+    The client token is fetched from the platform specific payment library in
+    preparation for facilitating the payment using Google Pay. [Frequency]
+    Logged at most once per page load. [Trigger] Page is loaded and the main
+    frame contains a valid payment code for {FacilitatedPaymentsType}.
+  </summary>
+  <token key="FacilitatedPaymentsType" variants="FacilitatedPaymentsTypes"/>
+</histogram>
+
+<histogram
+    name="FacilitatedPayments.{FacilitatedPaymentsType}.IsApiAvailable.Latency"
+    units="ms" expires_after="2024-09-01">
+  <owner>siashah@google.com</owner>
+  <owner>vishwasuppoor@google.com</owner>
+  <owner>rouslan@google.com</owner>
+  <owner>payments-autofill-team@google.com</owner>
+  <summary>
+    Latency for the call to check whether the FacilitatedPayments API client is
+    available or not. The API client's availability is checked to determine
+    whether Chrome can offer to facilitate the payment using Google Pay.
+    [Frequency] Logged at most once per page load. [Trigger] Page is loaded and
+    the main frame contains a valid payment code for {FacilitatedPaymentsType}.
+  </summary>
+  <token key="FacilitatedPaymentsType" variants="FacilitatedPaymentsTypes"/>
+</histogram>
+
+<histogram
+    name="FacilitatedPayments.{FacilitatedPaymentsType}.IsApiAvailable.Result"
+    enum="Boolean" expires_after="2024-09-01">
+  <owner>siashah@google.com</owner>
+  <owner>vishwasuppoor@google.com</owner>
+  <owner>rouslan@google.com</owner>
+  <owner>payments-autofill-team@google.com</owner>
+  <summary>
+    Result of whether the FacilitatedPayments API client is available or not.
+    The API client's availability is checked to determine whether Chrome can
+    offer to facilitate the payment using Google Pay. [Frequency] Logged at most
+    once per page load. [Trigger] Page is loaded and the main frame contains a
+    valid payment code for {FacilitatedPaymentsType}.
+  </summary>
+  <token key="FacilitatedPaymentsType" variants="FacilitatedPaymentsTypes"/>
+</histogram>
+
+</histograms>
+
+</histogram-configuration>
diff --git a/tools/metrics/histograms/metadata/feature_engagement/histograms.xml b/tools/metrics/histograms/metadata/feature_engagement/histograms.xml
index 7d35faf..8d00a81 100644
--- a/tools/metrics/histograms/metadata/feature_engagement/histograms.xml
+++ b/tools/metrics/histograms/metadata/feature_engagement/histograms.xml
@@ -46,6 +46,7 @@
   <variant name="IPH_AddToHomescreenTextBubble"
       summary="(obsolete) educating users about adding website shortcuts to
                their home screen (using a text bubble)"/>
+  <variant name="IPH_AppSpecificHistory" summary="App Specific History action"/>
   <variant name="IPH_AutoDarkOptOut"
       summary="educating users about disabling auto dark feature globally"/>
   <variant name="IPH_AutoDarkUserEducationMessage"
@@ -140,8 +141,11 @@
   <variant name="IPH_DesktopPwaInstall" summary="desktop PWA install icon"/>
   <variant name="IPH_DesktopPWAsLinkCapturingLaunch"
       summary="PWA launch due to link capturing being enabled"/>
+  <variant name="IPH_DesktopReEngagement"
+      summary="extra help for low-engagement users"/>
   <variant name="IPH_DesktopSharedHighlighting"
       summary="Sharing links with highlighted text"/>
+  <variant name="IPH_DiscardRing" summary="Discard ring for tabs"/>
   <variant name="IPH_DownloadEsbPromo" summary="download ESB promo"/>
   <variant name="IPH_DownloadHome" summary="download home"/>
   <variant name="IPH_DownloadInfobarDownloadContinuing"
@@ -589,6 +593,16 @@
   </summary>
 </histogram>
 
+<histogram name="InProductHelp.Gestural.DismissalReason.iOS"
+    enum="InProductHelpDismissalReason" expires_after="2024-10-06">
+  <owner>ginnyhuang@chromium.org</owner>
+  <owner>adamta@google.com</owner>
+  <summary>
+    Recorded when a gestural in-product help view is dismissed, with the enum
+    signifying the way the dismissal was triggered.
+  </summary>
+</histogram>
+
 <histogram name="InProductHelp.NotifyEventReadyState.{IPHFeature}"
     enum="BooleanSuccess" expires_after="2024-09-01">
   <owner>nyquist@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/file/enums.xml b/tools/metrics/histograms/metadata/file/enums.xml
index 1b5df1c..9751232 100644
--- a/tools/metrics/histograms/metadata/file/enums.xml
+++ b/tools/metrics/histograms/metadata/file/enums.xml
@@ -442,6 +442,7 @@
   <int value="39" label="THROTTLING_TENANT"/>
   <int value="40" label="THROTTLING_APPLICATION"/>
   <int value="41" label="THROTTLING_UNKNOWN"/>
+  <int value="42" label="FROZEN_ACCOUNT"/>
 </enum>
 
 <enum name="FileSystemProviderMountType">
diff --git a/tools/metrics/histograms/metadata/file/histograms.xml b/tools/metrics/histograms/metadata/file/histograms.xml
index 2584aec5..ee79806 100644
--- a/tools/metrics/histograms/metadata/file/histograms.xml
+++ b/tools/metrics/histograms/metadata/file/histograms.xml
@@ -208,14 +208,14 @@
 </histogram>
 
 <histogram name="DriveCommon.Lifecycle.Mount" enum="DriveMountStatus"
-    expires_after="2024-08-25">
+    expires_after="2024-10-28">
   <owner>simmonsjosh@google.com</owner>
   <owner>src/ui/file_manager/OWNERS</owner>
   <summary>Records outcomes of attempts to mount Google Drive.</summary>
 </histogram>
 
 <histogram name="DriveCommon.Lifecycle.MountTime" units="ms"
-    expires_after="2024-08-25">
+    expires_after="2024-10-28">
   <owner>simmonsjosh@google.com</owner>
   <owner>src/ui/file_manager/OWNERS</owner>
   <summary>How long did it take to mount Google Drive.</summary>
@@ -239,7 +239,7 @@
 </histogram>
 
 <histogram name="DriveCommon.LocalSearch.SharedSearchTime" units="ms"
-    expires_after="M124">
+    expires_after="M136">
   <owner>simmonsjosh@google.com</owner>
   <owner>src/ui/file_manager/OWNERS</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/google/histograms.xml b/tools/metrics/histograms/metadata/google/histograms.xml
index fc3b841..7e768ba3 100644
--- a/tools/metrics/histograms/metadata/google/histograms.xml
+++ b/tools/metrics/histograms/metadata/google/histograms.xml
@@ -30,7 +30,7 @@
 </histogram>
 
 <histogram name="GoogleUpdate.InstallDetails.UpdateCohort"
-    enum="GoogleUpdateHashedCohortName" expires_after="2024-06-01">
+    enum="GoogleUpdateHashedCohortName" expires_after="2025-04-25">
   <owner>waffles@chromium.org</owner>
   <owner>chrome-metrics-team@google.com</owner>
   <owner>omaha-team@google.com</owner>
@@ -42,7 +42,7 @@
 </histogram>
 
 <histogram name="GoogleUpdate.InstallDetails.UpdateCohortId"
-    enum="GoogleUpdateHashedCohortId" expires_after="2024-09-01">
+    enum="GoogleUpdateHashedCohortId" expires_after="2025-04-25">
   <owner>waffles@chromium.org</owner>
   <owner>chrome-metrics-team@google.com</owner>
   <owner>omaha-team@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/gpu/histograms.xml b/tools/metrics/histograms/metadata/gpu/histograms.xml
index 08d19c1..8a4382a7 100644
--- a/tools/metrics/histograms/metadata/gpu/histograms.xml
+++ b/tools/metrics/histograms/metadata/gpu/histograms.xml
@@ -813,6 +813,9 @@
     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.
+
+    One some clients this metric will be logged only one time out of one
+    thousand to reduce the overhead of taking the metric.
   </summary>
 </histogram>
 
@@ -831,6 +834,9 @@
     to measure improvement steps. This metric will instead cap at 5s, and allow
     the buckets to give us better visibility into the 15ms-250ms interval
     ranges. We will use this one until we improve the blocking call.
+
+    One some clients this metric will be logged only one time out of one
+    thousand to reduce the overhead of taking the metric.
   </summary>
 </histogram>
 
@@ -1668,6 +1674,24 @@
   <token key="GraphiteDawnOrWebGPU" variants="GraphiteDawnOrWebGPU"/>
 </histogram>
 
+<histogram
+    name="GPU.{GraphiteDawnOrWebGPU}.{Cacheable}.{CacheHitMiss}.Counts.90SecondsPostStartup"
+    units="count" expires_after="2024-12-29">
+  <owner>hitawala@chromium.org</owner>
+  <owner>mdb.webgpu-dev-team@google.com</owner>
+  <summary>
+    Tracks the number of times calls to {Cacheable}.{CacheHitMiss} are emitted
+    within 90 seconds of browser start up. Recorded only for clients that
+    support high-resolution clocks.
+  </summary>
+  <token key="Cacheable" variants="WebGPUCacheable"/>
+  <token key="GraphiteDawnOrWebGPU" variants="GraphiteDawnOrWebGPU"/>
+  <token key="CacheHitMiss">
+    <variant name="CacheHit"/>
+    <variant name="CacheMiss"/>
+  </token>
+</histogram>
+
 <histogram name="GPU.{SchedulerType}.{Stage}" units="microseconds"
     expires_after="2024-08-07">
   <owner>vikassoni@chromium.org</owner>
@@ -1819,7 +1843,7 @@
 </histogram>
 
 <histogram name="Viz.FileDescriptorTracking.TimeToCompute" units="microseconds"
-    expires_after="2024-06-09">
+    expires_after="2025-06-09">
   <owner>petermcneeley@chromium.org</owner>
   <owner>graphics-dev@chromium.org</owner>
   <summary>
@@ -1833,7 +1857,7 @@
 </histogram>
 
 <histogram name="Viz.FileDescriptorTracking.{FdStat}" units="units"
-    expires_after="2024-10-13">
+    expires_after="2025-06-09">
   <owner>petermcneeley@chromium.org</owner>
   <owner>graphics-dev@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/histogram_suffixes_list.xml b/tools/metrics/histograms/metadata/histogram_suffixes_list.xml
index 51afbf7..1daaa0e 100644
--- a/tools/metrics/histograms/metadata/histogram_suffixes_list.xml
+++ b/tools/metrics/histograms/metadata/histogram_suffixes_list.xml
@@ -2965,6 +2965,9 @@
   <suffix name="Malloc.CommittedSize"
       label="Committed memory size for malloc(). Recorded only when
              PartitionAlloc is used as malloc()."/>
+  <suffix name="Malloc.ExtremeLUD"
+      label="Memory stats of the Extreme LUD. Recorded only when the Extreme
+             LUD is enabled."/>
   <suffix name="Malloc.Fragmentation" label="Fragmentation of PartitionAlloc."/>
   <suffix name="Malloc.Fragmentation.After1H"
       label="Fragmentation of PartitionAlloc for processes that have existed
@@ -3335,6 +3338,13 @@
   <suffix name="Malloc.BRPQuarantinedBytesPerMinute"
       label="Total size of BRP quarantined bytes per minute, averaged during
              the last memory dump interval."/>
+  <suffix name="Malloc.ExtremeLUD.CumulativeSizeInBytes"
+      label="Total size of quarantined allocations in the ELUD quarantine
+             since process start, including already dequarantined
+             allocations."/>
+  <suffix name="Malloc.ExtremeLUD.SizeInBytes"
+      label="Size of quarantined allocations in the ELUD quarantine at dump
+             time."/>
   <suffix name="Malloc.Original.ObjectCount"
       label="Number of allocated objects. Only counting malloc memory
              allocated in the partition_alloc original partition."/>
@@ -3428,6 +3438,30 @@
   <suffix name="Malloc.BRPQuarantinedCountPerMinute"
       label="Number of BRP quarantined allocations per minute, averaged
              during the last memory dump interval."/>
+  <suffix name="Malloc.ExtremeLUD.BytesPerMinute"
+      label="Size of ELUD quarantined bytes per minute, averaged during the
+             last memory dump interval."/>
+  <suffix name="Malloc.ExtremeLUD.Count"
+      label="Count of all quarantined allocations in the ELUD quarantine at
+             dump time."/>
+  <suffix name="Malloc.ExtremeLUD.CountPerMinute"
+      label="Number of ELUD quarantined allocations per minute, averaged
+             during the last memory dump interval."/>
+  <suffix name="Malloc.ExtremeLUD.CumulativeCount"
+      label="Total count of quarantined allocations in the ELUD quarantine
+             since process start, including already dequarantined
+             allocations."/>
+  <suffix name="Malloc.ExtremeLUD.MissCountPerMinute"
+      label="Number of ELUD quarantine requests that were not satisfied per
+             minute, averaged during the last memory dump interval."/>
+  <suffix name="Malloc.ExtremeLUD.QuarantinedTime"
+      label="Time to use up the capacity of the ELUD quarantine in
+             milliseconds, estimated from BytesPerMinute. Very rough
+             approximation to how long time allocations are quarantined."/>
+  <suffix name="Malloc.ExtremeLUD.QuarantineMissCount"
+      label="Monotonically increasing count of quarantine requests that were
+             not satisfied due to the configured size limit of the ELUD
+             quarantine."/>
   <suffix name="Malloc.SchedulerLoopQuarantine.Count"
       label="Count of all quarantined allocations in Scheduler-Loop
              Quarantine at dump time."/>
@@ -3893,10 +3927,6 @@
   <suffix name="SECURE_WITH_POLICY_INSTALLED_CERT"
       label="SecurityLevel is SECURE_WITH_POLICY_INSTALLED_CERT."/>
   <suffix name="WARNING" label="SecurityLevel is WARNING."/>
-  <affected-histogram name="Autofill.SaveCreditCardPromptOffer.Local"/>
-  <affected-histogram name="Autofill.SaveCreditCardPromptOffer.Upload"/>
-  <affected-histogram name="Autofill.SaveCreditCardPromptResult.Local"/>
-  <affected-histogram name="Autofill.SaveCreditCardPromptResult.Upload"/>
   <affected-histogram name="Security.PageEndReason"/>
   <affected-histogram name="Security.PageInfo.TimeOpen"/>
   <affected-histogram name="Security.PageInfo.TimeOpen.Action"/>
diff --git a/tools/metrics/histograms/metadata/history/enums.xml b/tools/metrics/histograms/metadata/history/enums.xml
index 2cfd12a..edf184a3 100644
--- a/tools/metrics/histograms/metadata/history/enums.xml
+++ b/tools/metrics/histograms/metadata/history/enums.xml
@@ -133,6 +133,13 @@
   <int value="3" label="Both"/>
 </enum>
 
+<enum name="EmbeddingsUserActions">
+  <int value="0" label="Non-empty query History search"/>
+  <int value="1" label="Embeddings search"/>
+  <int value="2" label="Embeddings non-empty results shown"/>
+  <int value="3" label="Embeddings result clicked"/>
+</enum>
+
 <enum name="HistoryInitStep">
   <int value="0" label="Open"/>
   <int value="1" label="Transaction begin"/>
@@ -151,6 +158,7 @@
   <int value="3" label="Synced Tabs"/>
   <int value="4" label="Signin Promo"/>
   <int value="5" label="Journeys"/>
+  <int value="6" label="ProductSpecificationsLists"/>
 </enum>
 
 <enum name="HistoryResultType">
diff --git a/tools/metrics/histograms/metadata/history/histograms.xml b/tools/metrics/histograms/metadata/history/histograms.xml
index 6e1a20b..a197755e 100644
--- a/tools/metrics/histograms/metadata/history/histograms.xml
+++ b/tools/metrics/histograms/metadata/history/histograms.xml
@@ -1849,6 +1849,20 @@
   </summary>
 </histogram>
 
+<histogram name="History.Embeddings.UserActions" enum="EmbeddingsUserActions"
+    expires_after="2025-04-15">
+  <owner>tommycli@chromium.org</owner>
+  <owner>orinj@chromium.org</owner>
+  <summary>
+    Tracks user actions related to History Embeddings in various bins within a
+    single histogram.
+
+    The first bucket of this histogram is logged for users with History
+    Embeddings disabled too, to provide a baseline, and to serve as a guardian
+    metric for the Embeddings experiments.
+  </summary>
+</histogram>
+
 <histogram name="History.Embeddings.VisibilityModelAvailableAtQuery"
     enum="Boolean" expires_after="2024-12-31">
   <owner>sophiechang@chromium.org</owner>
@@ -2043,6 +2057,17 @@
   </summary>
 </histogram>
 
+<histogram name="History.QueryAppDuration" units="ms" expires_after="M138">
+  <owner>jinsukkim@google.com</owner>
+  <owner>chrome-connective-tissue-team@google.com</owner>
+  <component>1456716</component>
+  <summary>
+    The time in milliseconds the query takes to fetch the list of app IDs. The
+    query is made to the local database only, not to the server side via
+    network. This is called when history UI is opened. Only logged on Android.
+  </summary>
+</histogram>
+
 <histogram name="History.QueryHistory" units="ms" expires_after="M124">
   <owner>mahmadi@chromium.org</owner>
   <owner>chrome-desktop-search@google.com</owner>
@@ -2163,7 +2188,7 @@
 </histogram>
 
 <histogram name="History.VisitedLinks.TryToAddFingerprint"
-    enum="AddFingerprint" expires_after="2024-08-25">
+    enum="AddFingerprint" expires_after="2024-10-27">
   <owner>kyraseevers@chromium.org</owner>
   <owner>brgoldstein@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/input/enums.xml b/tools/metrics/histograms/metadata/input/enums.xml
index 64d796e..c733e7e5 100644
--- a/tools/metrics/histograms/metadata/input/enums.xml
+++ b/tools/metrics/histograms/metadata/input/enums.xml
@@ -576,12 +576,6 @@
   <int value="30998784" label="Generic Error"/>
 </enum>
 
-<enum name="VirtualKeyboardHandwritingCommitType">
-  <int value="0" label="Commit text only"/>
-  <int value="1" label="Commit text with newline"/>
-  <int value="2" label="Commit text with space"/>
-</enum>
-
 </enums>
 
 </histogram-configuration>
diff --git a/tools/metrics/histograms/metadata/input/histograms.xml b/tools/metrics/histograms/metadata/input/histograms.xml
index 461c4b8..7449fcd 100644
--- a/tools/metrics/histograms/metadata/input/histograms.xml
+++ b/tools/metrics/histograms/metadata/input/histograms.xml
@@ -1833,17 +1833,6 @@
   </summary>
 </histogram>
 
-<histogram name="InputMethod.VirtualKeyboard.Handwriting.CommitType"
-    enum="VirtualKeyboardHandwritingCommitType" expires_after="2024-11-01">
-  <owner>curtismcmullan@chromium.org</owner>
-  <owner>essential-inputs-team@google.com</owner>
-  <summary>
-    Warning: this histogram was expired from 2022-02 to 2023-11; data may be
-    missing. What kind of commit method was used when text was committed to an
-    input from the handwriting input method in the virtual keyboard.
-  </summary>
-</histogram>
-
 <histogram
     name="InputMethod.VirtualKeyboard.Handwriting.DWServiceCallbackFailed"
     enum="Boolean" expires_after="2024-06-30">
diff --git a/tools/metrics/histograms/metadata/ios/enums.xml b/tools/metrics/histograms/metadata/ios/enums.xml
index 2e27d25..226ca90 100644
--- a/tools/metrics/histograms/metadata/ios/enums.xml
+++ b/tools/metrics/histograms/metadata/ios/enums.xml
@@ -1127,7 +1127,7 @@
 </enum>
 
 <enum name="WindowActivityOrigin">
-  <int value="0" label="WindowActivityUnknwonOrigin"/>
+  <int value="0" label="WindowActivityUnknownOrigin"/>
   <int value="1" label="WindowActivityExternalOrigin"/>
   <int value="2" label="WindowActivityRestoredOrigin"/>
   <int value="3" label="WindowActivityContextMenuOrigin"/>
diff --git a/tools/metrics/histograms/metadata/ios/histograms.xml b/tools/metrics/histograms/metadata/ios/histograms.xml
index b6130394..916fb45 100644
--- a/tools/metrics/histograms/metadata/ios/histograms.xml
+++ b/tools/metrics/histograms/metadata/ios/histograms.xml
@@ -418,6 +418,16 @@
   </summary>
 </histogram>
 
+<histogram name="IOS.CredentialExtension.FaviconsFetched" units="count"
+    expires_after="2024-12-01">
+  <owner>sebsg@chromium.org</owner>
+  <owner>bling-transactions-eng@google.com</owner>
+  <summary>
+    Recorded when credentials are saved in the CredentialExtension database.
+    Records the number of favicons that have been fetched.
+  </summary>
+</histogram>
+
 <histogram name="IOS.CredentialExtension.FetchPasswordFailure" units="count"
     expires_after="2024-12-01">
   <owner>rkgibson@chromium.org</owner>
@@ -590,6 +600,15 @@
   </summary>
 </histogram>
 
+<histogram name="IOS.CredentialExtension.SyncedStore" enum="Boolean"
+    expires_after="2024-12-01">
+  <owner>sebsg@chromium.org</owner>
+  <owner>bling-transactions-eng@google.com</owner>
+  <summary>
+    Recorded when the CPE syncs its file storage: removing it and re-writing it.
+  </summary>
+</histogram>
+
 <histogram name="IOS.CredentialProviderExtension.Promo.Impression{IsReminder}"
     enum="IOSCredentialProviderPromoSource" expires_after="2024-12-01">
   <owner>huitingyu@google.com</owner>
@@ -1061,7 +1080,7 @@
 </histogram>
 
 <histogram name="IOS.ExperienceKitCalendar.Success"
-    enum="ExperienceKitCalendarTypes" expires_after="2023-06-01">
+    enum="ExperienceKitCalendarTypes" expires_after="2025-04-01">
   <owner>djean@chromium.org</owner>
   <owner>erahmaoui@google.com</owner>
   <summary>
@@ -1954,12 +1973,14 @@
 </histogram>
 
 <histogram name="IOS.MultiWindow.OpenInNewWindow" enum="WindowActivityOrigin"
-    expires_after="2022-06-26">
+    expires_after="2025-03-03">
   <owner>marq@chromium.org</owner>
   <owner>djean@chromium.org</owner>
   <summary>
     The source of &quot;Open in new Window&quot; user requests. Recorded when a
-    newly created window is added to a session.
+    newly created window is added to a session. Collection of
+    WindowActivityRestoredOrigin data is intentionally skipped. Note that
+    computation was wrong until M125.
   </summary>
 </histogram>
 
@@ -2491,7 +2512,7 @@
 </histogram>
 
 <histogram name="IOS.ParcelTracking.Tracked.{Source}" units="count"
-    expires_after="2024-08-25">
+    expires_after="2024-10-28">
   <owner>hiramahmood@google.com</owner>
   <owner>thegreenfrog@chromium.org</owner>
   <summary>Logs number of packages tracked from {Source}.</summary>
@@ -3175,7 +3196,7 @@
 </histogram>
 
 <histogram name="IOS.SandboxMetrics.TotalOTRSessionSize" units="MB"
-    expires_after="2024-05-01">
+    expires_after="2025-05-01">
   <owner>michaeldo@chromium.org</owner>
   <owner>rohitrao@chromium.org</owner>
   <summary>
@@ -3187,7 +3208,7 @@
 </histogram>
 
 <histogram name="IOS.SandboxMetrics.TotalRegularSessionSize" units="MB"
-    expires_after="2024-05-01">
+    expires_after="2025-05-01">
   <owner>michaeldo@chromium.org</owner>
   <owner>rohitrao@chromium.org</owner>
   <summary>
@@ -3211,7 +3232,7 @@
 </histogram>
 
 <histogram name="IOS.SandboxMetrics.WebKitTempSize" units="MB"
-    expires_after="2024-05-01">
+    expires_after="2025-05-01">
   <owner>michaeldo@chromium.org</owner>
   <owner>rohitrao@chromium.org</owner>
   <summary>
@@ -3222,7 +3243,7 @@
 </histogram>
 
 <histogram name="IOS.SandboxMetrics.WebsiteLocalData" units="MB"
-    expires_after="2024-05-01">
+    expires_after="2025-05-01">
   <owner>michaeldo@chromium.org</owner>
   <owner>rohitrao@chromium.org</owner>
   <summary>
@@ -3503,7 +3524,7 @@
 </histogram>
 
 <histogram name="IOS.SearchWith.Trigger" enum="IOSSearchWithContext"
-    expires_after="2024-08-25">
+    expires_after="2024-10-28">
   <owner>olivierrobin@chromium.org</owner>
   <owner>djean@chromium.org</owner>
   <summary>The context in which Search With has been triggered.</summary>
@@ -3863,7 +3884,7 @@
 </histogram>
 
 <histogram name="IOS.TabPickup.TimeSinceLastCrossDeviceSync" units="ms"
-    expires_after="2024-08-25">
+    expires_after="2024-10-28">
   <owner>ewannpv@chromium.org</owner>
   <owner>gambard@chromium.org</owner>
   <owner>chromeleon@google.com</owner>
@@ -4016,6 +4037,19 @@
   </summary>
 </histogram>
 
+<histogram name="IOS.TabSwitcher.Idle.TabGroups" enum="Boolean"
+    expires_after="2025-05-01">
+  <owner>ewannpv@chromium.org</owner>
+  <owner>gambard@chromium.org</owner>
+  <owner>bling-team@google.com</owner>
+  <summary>
+    Tracks whether the user closed the tab groups page without doing any
+    meaningful action on any tab grid pages. Meaningful action is opening a tab.
+    Recorded when the user closed the tab groups page or switched to a tab grid
+    page.
+  </summary>
+</histogram>
+
 <histogram name="IOS.TabSwitcher.PageChangeInteraction"
     enum="IOSTabSwitcherPageChangeInteraction" expires_after="2024-09-01">
   <owner>marq@chromium.org</owner>
@@ -4145,7 +4179,7 @@
 </histogram>
 
 <histogram name="IOS.UnitConversion.DetectedMeasurements" units="measurements"
-    expires_after="2024-08-25">
+    expires_after="2024-10-28">
   <owner>erahmaoui@chromium.org</owner>
   <owner>bling-team@google.com</owner>
   <summary>
@@ -4155,7 +4189,7 @@
 </histogram>
 
 <histogram name="IOS.UnitConversion.{Type}" enum="UnitChangeTypes"
-    expires_after="2024-08-25">
+    expires_after="2024-10-28">
   <owner>erahmaoui@chromium.org</owner>
   <owner>bling-team@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/magic_stack/histograms.xml b/tools/metrics/histograms/metadata/magic_stack/histograms.xml
index b3fa411..916b0beb 100644
--- a/tools/metrics/histograms/metadata/magic_stack/histograms.xml
+++ b/tools/metrics/histograms/metadata/magic_stack/histograms.xml
@@ -119,7 +119,7 @@
 
 <histogram
     name="MagicStack.Clank.{ModuleDelegateHost}.ContextMenu.OpenCustomizeSettings"
-    enum="ModuleType" expires_after="2024-08-25">
+    enum="ModuleType" expires_after="2024-10-28">
   <owner>hanxi@chromium.org</owner>
   <owner>xinyiji@chromium.org</owner>
   <summary>
@@ -236,7 +236,7 @@
 
 <histogram
     name="MagicStack.Clank.{ModuleDelegateHost}.Module.FetchDataDurationMs.{ModuleType}"
-    units="ms" expires_after="2024-08-25">
+    units="ms" expires_after="2024-10-28">
   <owner>hanxi@chromium.org</owner>
   <owner>xinyiji@chromium.org</owner>
   <summary>
@@ -250,7 +250,7 @@
 
 <histogram
     name="MagicStack.Clank.{ModuleDelegateHost}.Module.FetchDataFailedDurationMs.{ModuleType}"
-    units="ms" expires_after="2024-08-25">
+    units="ms" expires_after="2024-10-28">
   <owner>hanxi@chromium.org</owner>
   <owner>xinyiji@chromium.org</owner>
   <summary>
@@ -307,7 +307,7 @@
 
 <histogram
     name="MagicStack.Clank.{ModuleDelegateHost}.Module.FirstModuleShownDurationMs"
-    units="ms" expires_after="2024-08-25">
+    units="ms" expires_after="2024-10-28">
   <owner>hanxi@chromium.org</owner>
   <owner>xinyiji@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/media/histograms.xml b/tools/metrics/histograms/metadata/media/histograms.xml
index 8610c3a6..396959b11 100644
--- a/tools/metrics/histograms/metadata/media/histograms.xml
+++ b/tools/metrics/histograms/metadata/media/histograms.xml
@@ -1038,7 +1038,7 @@
 </histogram>
 
 <histogram name="Media.Audio.Processing.CaptureDelayVarianceMs"
-    units="ms squared" expires_after="2024-07-07">
+    units="ms squared" expires_after="2024-10-28">
   <owner>saza@chromium.org</owner>
   <owner>olka@chromium.org</owner>
   <owner>webrtc-audio-uma@google.com</owner>
@@ -1085,7 +1085,7 @@
 </histogram>
 
 <histogram name="Media.Audio.Processing.TotalDelayVarianceMs"
-    units="ms squared" expires_after="2024-07-07">
+    units="ms squared" expires_after="2024-10-28">
   <owner>saza@chromium.org</owner>
   <owner>olka@chromium.org</owner>
   <owner>webrtc-audio-uma@google.com</owner>
@@ -1162,7 +1162,7 @@
 </histogram>
 
 <histogram name="Media.Audio.Render.OutputDeviceAuthorizationTime" units="ms"
-    expires_after="2024-08-08">
+    expires_after="2024-10-28">
   <owner>olka@chromium.org</owner>
   <owner>henrika@chromium.org</owner>
   <owner>webrtc-audio-uma@google.com</owner>
@@ -4063,7 +4063,7 @@
 </histogram>
 
 <histogram name="Media.MediaDevices.GetDisplayMedia.Result"
-    enum="UserMediaRequestResult" expires_after="2024-08-25">
+    enum="UserMediaRequestResult" expires_after="2024-10-28">
   <owner>toprice@chromium.org</owner>
   <owner>agpalak@chromium.org</owner>
   <owner>video-cmi-apis@google.com</owner>
@@ -4226,7 +4226,7 @@
 </histogram>
 
 <histogram name="Media.MediaRecorder.Codec" enum="MediaRecorderCodec"
-    expires_after="2024-08-25">
+    expires_after="2024-10-28">
   <owner>clarissagarvey@chromium.org</owner>
   <owner>mcasas@chromium.org</owner>
   <summary>
@@ -4297,7 +4297,7 @@
 </histogram>
 
 <histogram
-    name="Media.MediaVideoVisibilityTracker.OccludingRectsCount.{BucketSizeIncreases}.TotalCount"
+    name="Media.MediaVideoVisibilityTracker.OccludingRectsCount.{BucketSizeIncreases}Histogram.TotalCount"
     units="rects" expires_after="2024-12-01">
   <owner>bkeen@google.com</owner>
   <owner>media-dev-uma@chromium.org</owner>
@@ -4743,7 +4743,7 @@
 </histogram>
 
 <histogram name="Media.PlatformVideoDecoding.VideoCodecProfile"
-    enum="VideoCodecProfile" expires_after="2024-08-25">
+    enum="VideoCodecProfile" expires_after="2024-10-28">
   <owner>mcasas@chromium.org</owner>
   <owner>chromeos-gfx-video@google.com</owner>
   <summary>
@@ -5094,7 +5094,7 @@
 </histogram>
 
 <histogram name="Media.RTCVideoDecoderError" enum="MediaStatusCode"
-    expires_after="2024-08-25">
+    expires_after="2024-10-28">
   <owner>posciak@chromium.org</owner>
   <owner>liberato@chromium.org</owner>
   <owner>webrtc-video@google.com</owner>
@@ -5354,7 +5354,7 @@
   </summary>
 </histogram>
 
-<histogram base="true" name="Media.TimeToFirstFrame.{PlaybackType}" units="ms"
+<histogram name="Media.TimeToFirstFrame.{PlaybackType}" units="ms"
     expires_after="never">
 <!-- expires-never: Media pipeline health metric. -->
 
@@ -5373,7 +5373,7 @@
   </token>
 </histogram>
 
-<histogram base="true" name="Media.TimeToMetadata.{PlaybackType}" units="ms"
+<histogram name="Media.TimeToMetadata.{PlaybackType}" units="ms"
     expires_after="never">
 <!-- expires-never: Media pipeline health metric. -->
 
@@ -5392,7 +5392,7 @@
   </token>
 </histogram>
 
-<histogram base="true" name="Media.TimeToPlayReady.{PlaybackType}" units="ms"
+<histogram name="Media.TimeToPlayReady.{PlaybackType}" units="ms"
     expires_after="never">
 <!-- expires-never: Media pipeline health metric. -->
 
@@ -5517,11 +5517,12 @@
   </token>
 </histogram>
 
-<histogram base="true" name="Media.UnderflowDuration2.{PlaybackType}"
-    units="ms" expires_after="never">
+<histogram name="Media.UnderflowDuration2.{PlaybackType}" units="ms"
+    expires_after="never">
 <!-- expires-never: Media pipeline health metric. -->
 
   <owner>dalecurtis@chromium.org</owner>
+  <owner>media-dev-uma@chromium.org</owner>
   <summary>
     The amount of time taken to leave the underflow state (i.e. resume playback)
     for playbacks. This doesn't report initial zero samples, which was
@@ -5615,7 +5616,7 @@
 </histogram>
 
 <histogram name="Media.VaapiWrapper.VADisplayStateInitializeSuccess"
-    enum="BooleanSuccess" expires_after="2024-08-25">
+    enum="BooleanSuccess" expires_after="2024-10-28">
   <owner>mcasas@chromium.org</owner>
   <owner>chromeos-gfx-video@google.com</owner>
   <summary>
@@ -7293,7 +7294,7 @@
 </histogram>
 
 <histogram name="MediaRouter.PresentationRequest.UrlBySink"
-    enum="PresentationUrlBySink" expires_after="2024-05-05">
+    enum="PresentationUrlBySink" expires_after="2025-04-29">
   <owner>mfoltz@chromium.org</owner>
   <owner>openscreen-eng@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/memory/histograms.xml b/tools/metrics/histograms/metadata/memory/histograms.xml
index 72aadd9..06ec80e3 100644
--- a/tools/metrics/histograms/metadata/memory/histograms.xml
+++ b/tools/metrics/histograms/metadata/memory/histograms.xml
@@ -104,32 +104,6 @@
   </summary>
 </histogram>
 
-<histogram name="HeapProfiling.InProcess.AndroidNonChromeFrames{Process}"
-    units="%" expires_after="2023-06-05">
-  <owner>joenotcharles@google.com</owner>
-  <owner>chrome-memory@google.com</owner>
-  <summary>
-    For every stack captured by the in-process heap profiler in {Process} on
-    Android, records the percentage of stack frames whose address was not found
-    in the Chrome module. Emitted at the time a snapshot is taken with an entry
-    for every stack in the snapshot.
-  </summary>
-  <token key="Process" variants="ProfiledProcess"/>
-</histogram>
-
-<histogram name="HeapProfiling.InProcess.AndroidShortStacks{Process}"
-    enum="Boolean" expires_after="2023-06-05">
-  <owner>joenotcharles@google.com</owner>
-  <owner>chrome-memory@google.com</owner>
-  <summary>
-    For every stack captured by the in-process heap profiler in {Process} on
-    Android, records if it has fewer than 5 frames. Stacks with few frames are
-    low-quality and may indicate a problem with the stack unwinder. Emitted at
-    the time a snapshot is taken with an entry for every stack in the snapshot.
-  </summary>
-  <token key="Process" variants="ProfiledProcess"/>
-</histogram>
-
 <histogram name="HeapProfiling.InProcess.Enabled{Process}"
     enum="BooleanEnabled" expires_after="2024-10-06">
   <owner>joenotcharles@google.com</owner>
@@ -152,32 +126,6 @@
   <token key="Process" variants="ProfiledProcess"/>
 </histogram>
 
-<histogram
-    name="HeapProfiling.InProcess.SnapshotInterval.{Platform}.{RecordingTime}{Process}"
-    units="ms" expires_after="2024-10-06">
-  <owner>joenotcharles@google.com</owner>
-  <owner>chrome-memory@google.com</owner>
-  <summary>
-    The time between heap snapshots taken in {Process} on {Platform}. Emitted
-    for each snapshot when the in-process heap profiler is enabled, at the
-    beginning and end of the snapshot interval. *.Scheduled histograms are
-    recorded at the beginning of the interval, when the snapshot is scheduled.
-    *.Taken histograms are recorded at the end of the interval, when the
-    snapshot is taken. Entries in *.Scheduled that don't appear in *.Taken show
-    which snapshot intervals are interrupted before the snapshot is taken.
-  </summary>
-  <token key="Platform">
-    <variant name="Desktop" summary="All desktop platforms"/>
-    <variant name="Mobile" summary="Android and iOS"/>
-  </token>
-  <token key="RecordingTime">
-    <variant name="Scheduled"
-        summary="Recorded when the snapshot is scheduled."/>
-    <variant name="Taken" summary="Recorded when the snapshot is taken."/>
-  </token>
-  <token key="Process" variants="ProfiledProcess"/>
-</histogram>
-
 <histogram name="HeapProfiling.InProcess.TotalSampledMemory{Process}"
     units="MB" expires_after="2024-09-01">
   <owner>joenotcharles@google.com</owner>
@@ -985,7 +933,7 @@
 
 <histogram
     name="Memory.Experimental.UserLevelMemoryPressureSignal.TotalPrivateMemoryFootprintAfter"
-    units="MB" expires_after="2024-07-07">
+    units="MB" expires_after="2024-10-28">
   <owner>tasak@google.com</owner>
   <owner>chrome-memory-tok@google.com</owner>
   <summary>
@@ -996,7 +944,7 @@
 
 <histogram
     name="Memory.Experimental.UserLevelMemoryPressureSignal.TotalPrivateMemoryFootprintBefore"
-    units="MB" expires_after="2024-07-07">
+    units="MB" expires_after="2024-10-28">
   <owner>tasak@google.com</owner>
   <owner>chrome-memory-tok@google.com</owner>
   <summary>
@@ -2330,7 +2278,7 @@
 </histogram>
 
 <histogram name="Memory.VMMMS.{ClientName}.DecisionLatency" units="ms"
-    expires_after="2024-08-25">
+    expires_after="2024-10-28">
   <owner>kalutes@google.com</owner>
   <owner>cwd@google.com</owner>
   <owner>cros-vm-technology@google.com</owner>
@@ -2343,7 +2291,7 @@
 </histogram>
 
 <histogram name="Memory.VMMMS.{ClientName}.DecisionTimeout"
-    enum="VmmmsRequestPriority" expires_after="2024-08-25">
+    enum="VmmmsRequestPriority" expires_after="2024-10-28">
   <owner>kalutes@google.com</owner>
   <owner>cwd@google.com</owner>
   <owner>cros-vm-technology@google.com</owner>
@@ -2356,7 +2304,7 @@
 </histogram>
 
 <histogram name="Memory.VMMMS.{ClientName}.UnnecessaryKill"
-    enum="VmmmsRequestPriority" expires_after="2024-08-25">
+    enum="VmmmsRequestPriority" expires_after="2024-10-28">
   <owner>kalutes@google.com</owner>
   <owner>cwd@google.com</owner>
   <owner>cros-vm-technology@google.com</owner>
@@ -2369,7 +2317,7 @@
 </histogram>
 
 <histogram name="Memory.VMMMS.{VmName}.Deflate" units="MiB"
-    expires_after="2024-08-25">
+    expires_after="2024-10-28">
   <owner>kalutes@google.com</owner>
   <owner>cwd@google.com</owner>
   <owner>cros-vm-technology@google.com</owner>
@@ -2380,7 +2328,7 @@
 </histogram>
 
 <histogram name="Memory.VMMMS.{VmName}.Inflate" units="MiB"
-    expires_after="2024-08-25">
+    expires_after="2024-10-28">
   <owner>kalutes@google.com</owner>
   <owner>cwd@google.com</owner>
   <owner>cros-vm-technology@google.com</owner>
@@ -2391,7 +2339,7 @@
 </histogram>
 
 <histogram name="Memory.VMMMS.{VmName}.ResizeInterval" units="ms"
-    expires_after="2024-08-25">
+    expires_after="2024-10-28">
   <owner>kalutes@google.com</owner>
   <owner>cwd@google.com</owner>
   <owner>cros-vm-technology@google.com</owner>
@@ -2402,7 +2350,7 @@
 </histogram>
 
 <histogram name="Memory.VMMMS.{VmName}.Size10Minutes" units="MiB"
-    expires_after="2024-08-25">
+    expires_after="2024-10-28">
   <owner>kalutes@google.com</owner>
   <owner>cwd@google.com</owner>
   <owner>cros-vm-technology@google.com</owner>
@@ -2413,7 +2361,7 @@
 </histogram>
 
 <histogram name="Memory.VMMMS.{VmName}.StallThroughput" units="MiB/s"
-    expires_after="2024-08-25">
+    expires_after="2024-10-28">
   <owner>kalutes@google.com</owner>
   <owner>cwd@google.com</owner>
   <owner>cros-vm-technology@google.com</owner>
@@ -2474,7 +2422,7 @@
 </histogram>
 
 <histogram name="Memory.VmmSwap.{VmName}.InactiveBeforeEnableDuration"
-    units="Hours" expires_after="2024-06-02">
+    units="Hours" expires_after="2024-10-06">
   <owner>kawasin@google.com</owner>
   <owner>sstan@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/mobile/enums.xml b/tools/metrics/histograms/metadata/mobile/enums.xml
index 33d4c24..665236a 100644
--- a/tools/metrics/histograms/metadata/mobile/enums.xml
+++ b/tools/metrics/histograms/metadata/mobile/enums.xml
@@ -244,6 +244,8 @@
   <int value="20" label="Tab Group Grid Entry"/>
   <int value="21" label="Tab Group View Menu Entry"/>
   <int value="22" label="Tab Group View Tab Entry"/>
+  <int value="23" label="Autofill Manual Fallback All Passwords Entry"/>
+  <int value="24" label="Autofill Manual Fallback Password Entry"/>
 </enum>
 
 <enum name="IOSShareAction">
diff --git a/tools/metrics/histograms/metadata/mobile/histograms.xml b/tools/metrics/histograms/metadata/mobile/histograms.xml
index e6114536..08256c0 100644
--- a/tools/metrics/histograms/metadata/mobile/histograms.xml
+++ b/tools/metrics/histograms/metadata/mobile/histograms.xml
@@ -250,7 +250,7 @@
 </histogram>
 
 <histogram name="Mobile.Messages.Badge.Tapped.{MobileInfobarType}"
-    enum="MobileMessagesBadgeState" expires_after="2024-08-25">
+    enum="MobileMessagesBadgeState" expires_after="2024-10-28">
   <owner>thegreenfrog@chromium.org</owner>
   <owner>bling-team@google.com</owner>
   <summary>
@@ -260,7 +260,7 @@
 </histogram>
 
 <histogram name="Mobile.Messages.Banner.Dismiss.{MobileInfobarType}"
-    enum="MobileMessagesBannerDismissType" expires_after="2024-08-25">
+    enum="MobileMessagesBannerDismissType" expires_after="2024-10-28">
   <owner>thegreenfrog@chromium.org</owner>
   <owner>bling-team@google.com</owner>
   <summary>
@@ -323,7 +323,7 @@
 </histogram>
 
 <histogram name="Mobile.Messages.Modal.Event.{MobileInfobarType}"
-    enum="MobileMessagesModalEvent" expires_after="2024-08-25">
+    enum="MobileMessagesModalEvent" expires_after="2024-10-28">
   <owner>thegreenfrog@chromium.org</owner>
   <owner>bling-team@google.com</owner>
   <summary>Records generic infobar modal events. {MobileInfobarType}</summary>
diff --git a/tools/metrics/histograms/metadata/nearby/histograms.xml b/tools/metrics/histograms/metadata/nearby/histograms.xml
index 0240734..cc793b1 100644
--- a/tools/metrics/histograms/metadata/nearby/histograms.xml
+++ b/tools/metrics/histograms/metadata/nearby/histograms.xml
@@ -1275,7 +1275,7 @@
 </histogram>
 
 <histogram name="Nearby.Share.Medium.ChangedToMedium"
-    enum="NearbyConnectionsMedium" expires_after="2024-07-10">
+    enum="NearbyConnectionsMedium" expires_after="2024-10-28">
   <owner>crisrael@google.com</owner>
   <owner>nearby-share-chromeos-eng@google.com</owner>
   <summary>
@@ -1286,7 +1286,7 @@
 </histogram>
 
 <histogram name="Nearby.Share.Medium.InitiateBandwidthUpgradeResult"
-    enum="BooleanSuccess" expires_after="2024-07-10">
+    enum="BooleanSuccess" expires_after="2024-10-28">
   <owner>pushi@google.com</owner>
   <owner>nearby-share-chromeos-eng@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/net/histograms.xml b/tools/metrics/histograms/metadata/net/histograms.xml
index 8b48b0f..06de7c83 100644
--- a/tools/metrics/histograms/metadata/net/histograms.xml
+++ b/tools/metrics/histograms/metadata/net/histograms.xml
@@ -788,7 +788,7 @@
 </histogram>
 
 <histogram name="Net.ContentEncodingType" enum="ContentEncodingType"
-    expires_after="2024-08-25">
+    expires_after="2024-10-27">
   <owner>nidhijaju@chromium.org</owner>
   <owner>blink-network-stack@google.com</owner>
   <summary>
@@ -800,7 +800,7 @@
 </histogram>
 
 <histogram name="Net.Cors.PreflightCheckError2" enum="CorsAccessCheckError"
-    expires_after="2024-06-30">
+    expires_after="2024-10-28">
   <owner>toyoshim@chromium.org</owner>
   <owner>src/services/network/OWNERS</owner>
   <summary>
@@ -913,7 +913,7 @@
 </histogram>
 
 <histogram name="Net.DNS.DnsConfig.Nsswitch.TooLarge" enum="BooleanExceeded"
-    expires_after="2024-07-24">
+    expires_after="2024-10-28">
   <owner>horo@chromium.org</owner>
   <owner>src/net/OWNERS</owner>
   <summary>
@@ -923,7 +923,7 @@
 </histogram>
 
 <histogram name="Net.DNS.DnsConfig.Resolv.Compatible" enum="BooleanValid"
-    expires_after="2024-05-19">
+    expires_after="2024-10-28">
   <owner>horo@chromium.org</owner>
   <owner>src/net/OWNERS</owner>
   <summary>
@@ -935,38 +935,6 @@
   </summary>
 </histogram>
 
-<histogram name="Net.DNS.DnsConfig.Resolv.FileChange" enum="BooleanChanged"
-    expires_after="2024-04-28">
-  <owner>horo@chromium.org</owner>
-  <owner>src/net/OWNERS</owner>
-  <summary>
-    Counter enum recorded whenever `net::DnsConfigService` detects a change to
-    the resolv.conf DNS configuration file.
-  </summary>
-</histogram>
-
-<histogram name="Net.DNS.DnsConfig.Resolv.Read" enum="BooleanReceived"
-    expires_after="2024-04-28">
-  <owner>horo@chromium.org</owner>
-  <owner>src/net/OWNERS</owner>
-  <summary>
-    Whether or not an attempt to read resolv.conf succeeded and produced a
-    `__res_state` struct for Chrome to attempt to use. Reported on all attempts
-    to read the configuration.
-  </summary>
-</histogram>
-
-<histogram name="Net.DNS.DnsConfig.Resolv.Valid" enum="BooleanValid"
-    expires_after="2024-04-28">
-  <owner>horo@chromium.org</owner>
-  <owner>src/net/OWNERS</owner>
-  <summary>
-    Whether or not the DNS configuration read from a resolv.conf file is
-    considered &quot;valid&quot;, that is that it contains at least one DNS
-    server. Reported whenever a resolv.conf file is successfully read by Chrome.
-  </summary>
-</histogram>
-
 <histogram name="Net.DNS.DnsConfig.SecureDnsMode" enum="SecureDnsModeDetails"
     expires_after="2024-09-01">
   <owner>horo@chromium.org</owner>
@@ -978,7 +946,7 @@
 </histogram>
 
 <histogram name="Net.DNS.DnsConfig.Windows.Compatibility"
-    enum="DNS.WindowsCompatibility" expires_after="2024-05-19">
+    enum="DNS.WindowsCompatibility" expires_after="2024-08-01">
   <owner>horo@chromium.org</owner>
   <owner>src/net/OWNERS</owner>
   <summary>
@@ -990,7 +958,7 @@
 </histogram>
 
 <histogram name="Net.DNS.DnsConfig.Windows.ReadSystemSettings{RetryCount}"
-    enum="DNS.WindowsReadSystemSettingsResult" expires_after="2024-05-19">
+    enum="DNS.WindowsReadSystemSettingsResult" expires_after="2024-10-28">
   <owner>horo@chromium.org</owner>
   <owner>src/net/OWNERS</owner>
   <summary>
@@ -1569,7 +1537,7 @@
 </histogram>
 
 <histogram name="Net.DNS.UI.ValidationAttemptSuccess" enum="Boolean"
-    expires_after="2024-08-25">
+    expires_after="2024-10-28">
   <owner>awillia@chromium.org</owner>
   <owner>src/net/dns/OWNERS</owner>
   <summary>
@@ -1754,7 +1722,7 @@
 </histogram>
 
 <histogram name="Net.HttpAuthTarget" enum="HttpAuthTarget"
-    expires_after="2024-07-21">
+    expires_after="2024-10-28">
   <owner>mpdenton@chromium.org</owner>
   <owner>src/net/OWNERS</owner>
   <summary>
@@ -4662,7 +4630,7 @@
 </histogram>
 
 <histogram name="Net.Reporting.HeaderType" enum="NetReportingHeaderType"
-    expires_after="2024-10-13">
+    expires_after="2025-04-23">
   <owner>rodneyding@google.com</owner>
   <owner>src/net/reporting/OWNERS</owner>
   <summary>
@@ -4675,7 +4643,7 @@
 </histogram>
 
 <histogram name="Net.Reporting.UploadHeaderType"
-    enum="NetReportingUploadHeaderType" expires_after="2024-09-22">
+    enum="NetReportingUploadHeaderType" expires_after="2025-04-23">
   <owner>rodneyding@google.com</owner>
   <owner>src/net/reporting/OWNERS</owner>
   <summary>
@@ -5781,7 +5749,7 @@
 </histogram>
 
 <histogram name="Net.ZstdFilter.CompressionRatio" units="%"
-    expires_after="2024-08-25">
+    expires_after="2024-10-28">
   <owner>nidhijaju@chromium.org</owner>
   <owner>blink-network-stack@google.com</owner>
   <summary>
@@ -5790,7 +5758,7 @@
 </histogram>
 
 <histogram name="Net.ZstdFilter.ErrorCode" enum="ZstdFilterErrorCode"
-    expires_after="2024-08-25">
+    expires_after="2024-10-28">
   <owner>nidhijaju@chromium.org</owner>
   <owner>blink-network-stack@google.com</owner>
   <summary>
@@ -5814,7 +5782,7 @@
 </histogram>
 
 <histogram name="Net.ZstdFilter.Status" enum="ZstdFilterDecodingStatus"
-    expires_after="2024-08-25">
+    expires_after="2024-10-27">
   <owner>nidhijaju@chromium.org</owner>
   <owner>blink-network-stack@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/network/histograms.xml b/tools/metrics/histograms/metadata/network/histograms.xml
index ff0c53c..d320495 100644
--- a/tools/metrics/histograms/metadata/network/histograms.xml
+++ b/tools/metrics/histograms/metadata/network/histograms.xml
@@ -4310,7 +4310,7 @@
 </histogram>
 
 <histogram name="Network.Wifi.Synced.Connection.FailureReason"
-    enum="ConnectionFailureReason" expires_after="2024-08-25">
+    enum="ConnectionFailureReason" expires_after="2025-06-01">
   <owner>jonmann@chromium.org</owner>
   <owner>crisrael@google.com</owner>
   <owner>chromeos-cross-device-eng@google.com</owner>
@@ -4321,7 +4321,7 @@
 </histogram>
 
 <histogram name="Network.Wifi.Synced.Connection.Result" enum="BooleanSuccess"
-    expires_after="2024-10-06">
+    expires_after="2025-06-01">
   <owner>jonmann@chromium.org</owner>
   <owner>crisrael@google.com</owner>
   <owner>chromeos-cross-device-eng@google.com</owner>
@@ -4332,7 +4332,7 @@
 </histogram>
 
 <histogram name="Network.Wifi.Synced.Hidden.Fixed" units="networks"
-    expires_after="2024-06-01">
+    expires_after="2025-06-01">
   <owner>jonmann@chromium.org</owner>
   <owner>tnagel@chromium.org</owner>
   <owner>cros-network-metrics@google.com</owner>
@@ -4345,7 +4345,7 @@
 </histogram>
 
 <histogram name="Network.Wifi.Synced.ManualConnection.FailureReason"
-    enum="ConnectionFailureReason" expires_after="2024-06-01">
+    enum="ConnectionFailureReason" expires_after="2025-06-01">
   <owner>jonmann@chromium.org</owner>
   <owner>crisrael@google.com</owner>
   <owner>chromeos-cross-device-eng@google.com</owner>
@@ -4356,7 +4356,7 @@
 </histogram>
 
 <histogram name="Network.Wifi.Synced.ManualConnection.Result"
-    enum="BooleanSuccess" expires_after="2024-06-01">
+    enum="BooleanSuccess" expires_after="2025-06-01">
   <owner>jonmann@chromium.org</owner>
   <owner>crisrael@google.com</owner>
   <owner>chromeos-cross-device-eng@google.com</owner>
@@ -4367,7 +4367,7 @@
 </histogram>
 
 <histogram name="Network.Wifi.Synced.TotalCount" units="units"
-    expires_after="2024-06-01">
+    expires_after="2025-06-01">
   <owner>jonmann@chromium.org</owner>
   <owner>crisrael@google.com</owner>
   <owner>chromeos-cross-device-eng@google.com</owner>
@@ -4378,7 +4378,7 @@
 </histogram>
 
 <histogram name="Network.Wifi.Synced.UpdateOperation.FailureReason"
-    enum="ConnectionFailureReason" expires_after="2024-06-01">
+    enum="ConnectionFailureReason" expires_after="2025-06-01">
   <owner>jonmann@chromium.org</owner>
   <owner>crisrael@google.com</owner>
   <owner>chromeos-cross-device-eng@google.com</owner>
@@ -4391,7 +4391,7 @@
 
 <histogram
     name="Network.Wifi.Synced.UpdateOperation.GenerateLocalNetworkConfig.Result"
-    enum="BooleanSuccess" expires_after="2024-10-06">
+    enum="BooleanSuccess" expires_after="2025-06-01">
   <owner>jonmann@chromium.org</owner>
   <owner>crisrael@google.com</owner>
   <owner>chromeos-cross-device-eng@google.com</owner>
@@ -4402,7 +4402,7 @@
 </histogram>
 
 <histogram name="Network.Wifi.Synced.UpdateOperation.Result"
-    enum="BooleanSuccess" expires_after="2024-06-01">
+    enum="BooleanSuccess" expires_after="2025-06-01">
   <owner>jonmann@chromium.org</owner>
   <owner>crisrael@google.com</owner>
   <owner>chromeos-cross-device-eng@google.com</owner>
@@ -4414,7 +4414,7 @@
 </histogram>
 
 <histogram name="Network.Wifi.Synced.ZeroNetworksEligibleForSync.Reason"
-    enum="NetworkEligibilityStatus" expires_after="2024-06-01">
+    enum="NetworkEligibilityStatus" expires_after="2025-06-01">
   <owner>jonmann@chromium.org</owner>
   <owner>crisrael@google.com</owner>
   <owner>chromeos-cross-device-eng@google.com</owner>
@@ -4500,7 +4500,7 @@
 </histogram>
 
 <histogram name="NetworkService.IpProtection.EmptyTokenCache"
-    enum="IpProtectionProxyLayer" expires_after="2024-08-25">
+    enum="IpProtectionProxyLayer" expires_after="2024-10-28">
   <owner>djmitche@chromium.org</owner>
   <owner>src/chrome/browser/ip_protection/OWNERS</owner>
   <summary>
@@ -4662,7 +4662,7 @@
 </histogram>
 
 <histogram name="NetworkService.IpProtection.TokenBatchGenerationTime"
-    units="ms" expires_after="2024-08-22">
+    units="ms" expires_after="2024-10-28">
   <owner>ashleynewson@chromium.org</owner>
   <owner>src/android_webview/OWNERS</owner>
   <owner>src/chrome/browser/ip_protection/OWNERS</owner>
diff --git a/tools/metrics/histograms/metadata/new_tab_page/histograms.xml b/tools/metrics/histograms/metadata/new_tab_page/histograms.xml
index 18aa8d5..6efd925 100644
--- a/tools/metrics/histograms/metadata/new_tab_page/histograms.xml
+++ b/tools/metrics/histograms/metadata/new_tab_page/histograms.xml
@@ -1821,6 +1821,17 @@
   </summary>
 </histogram>
 
+<histogram name="NewTabPage.TabResumption.TabCount" units="count"
+    expires_after="2024-09-01">
+  <owner>mfacey@google.com</owner>
+  <owner>romanarora@google.com</owner>
+  <owner>chrome-desktop-ntp@google.com</owner>
+  <summary>
+    Records the number of tabs shown in the Tab Resumption module. Only logged
+    on the 1P NTP and when the Tab Resumption module is enabled.
+  </summary>
+</histogram>
+
 <histogram name="NewTabPage.TabResumption.TimeElapsedSinceLastVisit" units="ms"
     expires_after="2024-09-01">
   <owner>mfacey@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/omnibox/histograms.xml b/tools/metrics/histograms/metadata/omnibox/histograms.xml
index 1bad2dc..39884d0 100644
--- a/tools/metrics/histograms/metadata/omnibox/histograms.xml
+++ b/tools/metrics/histograms/metadata/omnibox/histograms.xml
@@ -861,7 +861,7 @@
 </histogram>
 
 <histogram name="Omnibox.GroupId.ToggledOff" enum="GroupId"
-    expires_after="2024-05-03">
+    expires_after="2025-04-29">
   <owner>mahmadi@google.com</owner>
   <owner>chrome-omnibox-team@google.com</owner>
   <summary>
@@ -873,7 +873,7 @@
 </histogram>
 
 <histogram name="Omnibox.GroupId.ToggledOn" enum="GroupId"
-    expires_after="2024-09-15">
+    expires_after="2025-04-29">
   <owner>mahmadi@google.com</owner>
   <owner>chrome-omnibox-team@google.com</owner>
   <summary>
@@ -2033,7 +2033,7 @@
 </histogram>
 
 <histogram name="Omnibox.SuggestTiles.DeletedTileIndex" units="position"
-    expires_after="2024-06-01">
+    expires_after="2024-10-06">
   <owner>ender@google.com</owner>
   <owner>mahmadi@chromium.org</owner>
   <summary>
@@ -2048,7 +2048,7 @@
 </histogram>
 
 <histogram name="Omnibox.SuggestTiles.DeletedTileType" enum="SuggestTileType"
-    expires_after="2024-06-01">
+    expires_after="2024-10-06">
   <owner>ender@google.com</owner>
   <owner>mahmadi@chromium.org</owner>
   <summary>
@@ -2077,7 +2077,7 @@
 </histogram>
 
 <histogram name="Omnibox.SuggestTiles.SelectedTileType" enum="SuggestTileType"
-    expires_after="2024-06-01">
+    expires_after="2024-10-06">
   <owner>ender@google.com</owner>
   <owner>mahmadi@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/oobe/histograms.xml b/tools/metrics/histograms/metadata/oobe/histograms.xml
index f4534f2b..f0f08c7f 100644
--- a/tools/metrics/histograms/metadata/oobe/histograms.xml
+++ b/tools/metrics/histograms/metadata/oobe/histograms.xml
@@ -27,8 +27,10 @@
   <variant name="Add-child"/>
   <variant name="Ai-intro"/>
   <variant name="App-downloading"/>
+  <variant name="Apply-online-password"/>
   <variant name="Assistant-optin-flow"/>
   <variant name="Autolaunch"/>
+  <variant name="Categories-selection"/>
   <variant name="Choobe"/>
   <variant name="Consolidated-consent"/>
   <variant name="Cryptohome-recovery"/>
@@ -38,25 +40,35 @@
   <variant name="Drive-pinning"/>
   <variant name="Edu-coexistence-login"/>
   <variant name="Encryption-migration"/>
+  <variant name="Enter-old-password"/>
+  <variant name="Factor-setup-success"/>
   <variant name="Family-link-notice"/>
   <variant name="Fingerprint-setup"/>
+  <variant name="Gaia-info"/>
   <variant name="Gaia-password-changed"/>
   <variant name="Gaia-signin"/>
   <variant name="Gesture-navigation"/>
   <variant name="Guest-tos"/>
   <variant name="Hw-data-collection"/>
   <variant name="Kiosk-enable"/>
+  <variant name="Local-data-loss-warning"/>
+  <variant name="Local-password-setup"/>
   <variant name="Local-state-error"/>
   <variant name="Locale-switch"/>
   <variant name="Management-transition"/>
   <variant name="Marketing-opt-in"/>
   <variant name="Multidevice-setup-screen"/>
   <variant name="Offline-login"/>
+  <variant name="Online-authentication-screen"/>
   <variant name="Os-install"/>
   <variant name="Os-trial"/>
+  <variant name="Osauth-error"/>
   <variant name="Parental-handoff"/>
+  <variant name="Password-selection"/>
   <variant name="Pin-setup"/>
+  <variant name="Quick-start"/>
   <variant name="Recommend-apps"/>
+  <variant name="Recovery-check"/>
   <variant name="Reset"/>
   <variant name="Saml-confirm-password"/>
   <variant name="Signin-fatal-error"/>
@@ -68,6 +80,7 @@
   <variant name="Tpm-error-message"/>
   <variant name="Tuna"/>
   <variant name="Update-required"/>
+  <variant name="User-allowlist-check-screen"/>
   <variant name="User-creation"/>
   <variant name="Wrong-hwid"/>
 </variants>
@@ -94,9 +107,11 @@
   <variant name="Add-child"/>
   <variant name="Ai-intro"/>
   <variant name="App-downloading"/>
+  <variant name="Apply-online-password"/>
   <variant name="Assistant-optin-flow"/>
   <variant name="Auto-enrollment-check"/>
   <variant name="Autolaunch"/>
+  <variant name="Categories-selection"/>
   <variant name="Choobe"/>
   <variant name="Consolidated-consent"/>
   <variant name="Consumer-update"/>
@@ -111,6 +126,8 @@
   <variant name="Edu-coexistence-login"/>
   <variant name="Encryption-migration"/>
   <variant name="Enroll"/>
+  <variant name="Enter-old-password"/>
+  <variant name="Factor-setup-success"/>
   <variant name="Family-link-notice"/>
   <variant name="Fingerprint-setup"/>
   <variant name="Gaia-info"/>
@@ -121,6 +138,8 @@
   <variant name="Hid-detection"/>
   <variant name="Hw-data-collection"/>
   <variant name="Kiosk-enable"/>
+  <variant name="Local-data-loss-warning"/>
+  <variant name="Local-password-setup"/>
   <variant name="Local-state-error"/>
   <variant name="Locale-switch"/>
   <variant name="Management-transition"/>
@@ -129,13 +148,18 @@
   <variant name="Network"/>
   <variant name="Network-selection"/>
   <variant name="Offline-login"/>
+  <variant name="Online-authentication-screen"/>
   <variant name="Oobe-update"/>
   <variant name="Os-install"/>
   <variant name="Os-trial"/>
+  <variant name="Osauth-error"/>
   <variant name="Packaged-license"/>
   <variant name="Parental-handoff"/>
+  <variant name="Password-selection"/>
   <variant name="Pin-setup"/>
+  <variant name="Quick-start"/>
   <variant name="Recommend-apps"/>
+  <variant name="Recovery-check"/>
   <variant name="Reset"/>
   <variant name="Saml-confirm-password"/>
   <variant name="Signin-fatal-error"/>
@@ -147,6 +171,7 @@
   <variant name="Tpm-error-message"/>
   <variant name="Tuna"/>
   <variant name="Update-required"/>
+  <variant name="User-allowlist-check-screen"/>
   <variant name="User-creation"/>
   <variant name="Wrong-hwid"/>
 </variants>
@@ -212,10 +237,16 @@
   <variant name="Add-child.SignInAsChild"/>
   <variant name="Ai-intro.Next"/>
   <variant name="App-downloading.Next"/>
+  <variant name="Apply-online-password.Error"/>
+  <variant name="Apply-online-password.Success"/>
   <variant name="Assistant-optin-flow.Next"/>
   <variant name="Auto-enrollment-check.Next"/>
   <variant name="Autolaunch.Canceled"/>
   <variant name="Autolaunch.Completed"/>
+  <variant name="Categories-selection.Next"/>
+  <variant name="Categories-selection.Skip"/>
+  <variant name="Choobe.Selected"/>
+  <variant name="Choobe.Skipped"/>
   <variant name="Connect.EnableDebugging"/>
   <variant name="Connect.Next"/>
   <variant name="Connect.QuickStart"/>
@@ -233,6 +264,10 @@
   <variant name="Consumer-update.UpdateSkipped"/>
   <variant name="Cryptohome-recovery-setup.Done"/>
   <variant name="Cryptohome-recovery-setup.Skipped"/>
+  <variant name="Cryptohome-recovery.Authenticated"/>
+  <variant name="Cryptohome-recovery.Error"/>
+  <variant name="Cryptohome-recovery.FallbackLocal"/>
+  <variant name="Cryptohome-recovery.FallbackOnline"/>
   <variant name="Cryptohome-recovery.GaiaLogin"/>
   <variant name="Cryptohome-recovery.ManualRecovery"/>
   <variant name="Cryptohome-recovery.NoRecoveryFactor"/>
@@ -243,15 +278,25 @@
   <variant name="Demo-preferences.Completed"/>
   <variant name="Demo-setup.Canceled"/>
   <variant name="Demo-setup.Completed"/>
+  <variant name="Display-size.Next"/>
+  <variant name="Drive-pinning.Next"/>
   <variant name="Edu-coexistence-login.Done"/>
+  <variant name="Enter-old-password.Authenticated"/>
+  <variant name="Enter-old-password.CryptohomeError"/>
+  <variant name="Enter-old-password.ForgotOldPassword"/>
   <variant name="Enterprise-enrollment.Back"/>
   <variant name="Enterprise-enrollment.BackToAutoEnrollmentCheck"/>
   <variant name="Enterprise-enrollment.Completed"/>
   <variant name="Enterprise-enrollment.TpmDbusError"/>
   <variant name="Enterprise-enrollment.TpmError"/>
+  <variant name="Factor-setup-success.Proceed"/>
+  <variant name="Factor-setup-success.TimedOut"/>
   <variant name="Family-link-notice.Done"/>
   <variant name="Fingerprint-setup.Done"/>
   <variant name="Fingerprint-setup.Skipped"/>
+  <variant name="Gaia-info.Back"/>
+  <variant name="Gaia-info.EnterQuickStart"/>
+  <variant name="Gaia-info.Manual"/>
   <variant name="Gaia-password-changed.Cancel"/>
   <variant name="Gaia-password-changed.ContinueLogin"/>
   <variant name="Gaia-password-changed.CryptohomeError"/>
@@ -260,6 +305,7 @@
   <variant name="Gaia-signin.BackChild"/>
   <variant name="Gaia-signin.Cancel"/>
   <variant name="Gaia-signin.EnterpriseEnroll"/>
+  <variant name="Gaia-signin.EnterQuickStart"/>
   <variant name="Gaia-signin.StartConsumerKiosk"/>
   <variant name="Gesture-navigation.Next"/>
   <variant name="Gesture-navigation.Skip"/>
@@ -270,6 +316,12 @@
   <variant name="Hw-data-collection.AcceptedWithHWDataUsage"/>
   <variant name="Hw-data-collection.AcceptedWithoutHWDataUsage"/>
   <variant name="Kiosk-enable.Next"/>
+  <variant name="Local-data-loss-warning.Back"/>
+  <variant name="Local-data-loss-warning.Cancel"/>
+  <variant name="Local-data-loss-warning.CryptohomeError"/>
+  <variant name="Local-data-loss-warning.RemoveUser"/>
+  <variant name="Local-password-setup.Back"/>
+  <variant name="Local-password-setup.Done"/>
   <variant name="Locale-switch.LocaleFetchFailed"/>
   <variant name="Locale-switch.LocaleFetchTimeout"/>
   <variant name="Locale-switch.NoSwitchNeeded"/>
@@ -281,8 +333,10 @@
   <variant name="Multidevice-setup-screen.Next"/>
   <variant name="Network-selection.Back"/>
   <variant name="Network-selection.Connected"/>
+  <variant name="Network-selection.QuickStart"/>
   <variant name="Offline-login.Back"/>
   <variant name="Offline-login.ReloadOnlineLogin"/>
+  <variant name="Online-authentication-screen.Back"/>
   <variant name="Oobe-update.UpdateCheckTimeout"/>
   <variant name="Oobe-update.UpdateError"/>
   <variant name="Oobe-update.UpdateNotRequired"/>
@@ -290,15 +344,33 @@
   <variant name="Os-trial.Back"/>
   <variant name="Os-trial.NextInstall"/>
   <variant name="Os-trial.NextTry"/>
+  <variant name="Osauth-error.AbortSignin"/>
+  <variant name="Osauth-error.FallbackLocal"/>
+  <variant name="Osauth-error.FallbackOnline"/>
+  <variant name="Osauth-error.ProceedAuthenticated"/>
   <variant name="Packaged-license.DontEnroll"/>
   <variant name="Packaged-license.Enroll"/>
   <variant name="Parental-Handoff.Done"/>
+  <variant name="Password-selection.Back"/>
+  <variant name="Password-selection.GaiaPasswordChoice"/>
+  <variant name="Password-selection.GaiaPasswordEnterprise"/>
+  <variant name="Password-selection.GaiaPasswordFallback"/>
+  <variant name="Password-selection.LocalPasswordChoice"/>
+  <variant name="Password-selection.LocalPasswordForced"/>
   <variant name="Pin-setup.Done"/>
   <variant name="Pin-setup.Skipped"/>
   <variant name="Pin-setup.TimedOut"/>
+  <variant name="Quick-start.CancelAndReturnToGaiaInfo"/>
+  <variant name="Quick-start.CancelAndReturnToNetwork"/>
+  <variant name="Quick-start.CancelAndReturnToSignin"/>
+  <variant name="Quick-start.CancelAndReturnToWelcome"/>
+  <variant name="Quick-start.FallbackUrlOnGaia"/>
+  <variant name="Quick-start.SetupCompleteNextButton"/>
+  <variant name="Quick-start.WifiCredentialsReceived"/>
   <variant name="Recommend-apps.LoadError"/>
   <variant name="Recommend-apps.Selected"/>
   <variant name="Recommend-apps.Skipped"/>
+  <variant name="Recovery-check.Proceed"/>
   <variant name="Reset.Cancel"/>
   <variant name="Saml-confirm-password.Cancel"/>
   <variant name="Saml-confirm-password.TooManyAttempts"/>
@@ -310,8 +382,11 @@
   <variant name="Terms-of-service.Accepted"/>
   <variant name="Terms-of-service.Declined"/>
   <variant name="Theme-selection.Proceed"/>
+  <variant name="Touchpad-scroll.Next"/>
   <variant name="Tuna.Back"/>
   <variant name="Tuna.Next"/>
+  <variant name="User-allowlist-check-screen.Retry"/>
+  <variant name="User-creation.AddChild"/>
   <variant name="User-creation.Cancel"/>
   <variant name="User-creation.EnterpriseEnrollShortcut"/>
   <variant name="User-creation.EnterpriseEnrollTriage"/>
diff --git a/tools/metrics/histograms/metadata/optimization/enums.xml b/tools/metrics/histograms/metadata/optimization/enums.xml
index 6420ffee..0d91707 100644
--- a/tools/metrics/histograms/metadata/optimization/enums.xml
+++ b/tools/metrics/histograms/metadata/optimization/enums.xml
@@ -666,6 +666,7 @@
   <int value="46" label="CAPITAL_ONE_CREDIT_CARD_STREAMING_BENEFITS"/>
   <int value="47" label="AMERICAN_EXPRESS_CREDIT_CARD_FLIGHT_BENEFITS"/>
   <int value="48" label="AMERICAN_EXPRESS_CREDIT_CARD_SUBSCRIPTION_BENEFITS"/>
+  <int value="55" label="CAPITAL_ONE_CREDIT_CARD_BENEFITS_BLOCKED"/>
 </enum>
 
 <enum name="PageContentAnnotationsStorageStatus">
diff --git a/tools/metrics/histograms/metadata/optimization/histograms.xml b/tools/metrics/histograms/metadata/optimization/histograms.xml
index c2cff665..5524367 100644
--- a/tools/metrics/histograms/metadata/optimization/histograms.xml
+++ b/tools/metrics/histograms/metadata/optimization/histograms.xml
@@ -119,6 +119,10 @@
                of Autofill UKM metrics per origin based on origin popularity."/>
   <variant name="BloomFilterValidation"
       summary="Validates bloom filer allowlist/blocklist based hints"/>
+  <variant name="CapitalOneCreditCardBenefitsBlocked"
+      summary="This optimization provides information about whether a
+               merchant url is eligible to display Capital One credit card
+               benefits."/>
   <variant name="CapitalOneCreditCardDiningBenefits"
       summary="This optimization provides information about whether a
                merchant url is eligible for dining credit card benefits.
diff --git a/tools/metrics/histograms/metadata/others/histograms.xml b/tools/metrics/histograms/metadata/others/histograms.xml
index 441ee08..953b5c7 100644
--- a/tools/metrics/histograms/metadata/others/histograms.xml
+++ b/tools/metrics/histograms/metadata/others/histograms.xml
@@ -467,7 +467,7 @@
 </histogram>
 
 <histogram name="Ads.InterestGroup.Auction.BidFiltered" enum="Boolean"
-    expires_after="2024-08-25">
+    expires_after="2024-10-28">
   <owner>pauljensen@chromium.org</owner>
   <owner>privacy-sandbox-dev@chromium.org</owner>
   <summary>
@@ -482,7 +482,7 @@
 </histogram>
 
 <histogram name="Ads.InterestGroup.Auction.BidScriptTime" units="ms"
-    expires_after="2024-08-25">
+    expires_after="2024-10-27">
   <owner>behamilton@google.com</owner>
   <owner>privacy-sandbox-dev@chromium.org</owner>
   <summary>
@@ -497,7 +497,7 @@
 </histogram>
 
 <histogram name="Ads.InterestGroup.Auction.ConfigPromises.CriticalPathLatency"
-    units="ms" expires_after="2024-06-20">
+    units="ms" expires_after="2024-10-28">
   <owner>orrb@chromium.org</owner>
   <owner>privacy-sandbox-dev@chromium.org</owner>
   <summary>
@@ -517,7 +517,7 @@
 </histogram>
 
 <histogram name="Ads.InterestGroup.Auction.ConfigPromises.Latency" units="ms"
-    expires_after="2024-06-20">
+    expires_after="2024-10-28">
   <owner>orrb@chromium.org</owner>
   <owner>privacy-sandbox-dev@chromium.org</owner>
   <summary>
@@ -535,7 +535,7 @@
 </histogram>
 
 <histogram name="Ads.InterestGroup.Auction.ContextReused" enum="Boolean"
-    expires_after="2024-08-25">
+    expires_after="2024-10-28">
   <owner>pauljensen@chromium.org</owner>
   <owner>privacy-sandbox-dev@chromium.org</owner>
   <summary>
@@ -568,7 +568,7 @@
 </histogram>
 
 <histogram name="Ads.InterestGroup.Auction.FinalReporterState"
-    enum="InterestGroupAuctionReporterState" expires_after="2024-08-25">
+    enum="InterestGroupAuctionReporterState" expires_after="2024-10-28">
   <owner>mmenke@chromium.org</owner>
   <owner>morlovich@chromium.org</owner>
   <summary>
@@ -585,7 +585,7 @@
 </histogram>
 
 <histogram name="Ads.InterestGroup.Auction.First6AuctionsBitsPerPage"
-    units="bitfield" expires_after="2024-08-25">
+    units="bitfield" expires_after="2024-10-28">
   <owner>caraitto@chromium.org</owner>
   <owner>pauljensen@chromium.org</owner>
   <owner>privacy-sandbox-dev@chromium.org</owner>
@@ -608,7 +608,7 @@
 </histogram>
 
 <histogram name="Ads.InterestGroup.Auction.GenerateBidTime" units="ms"
-    expires_after="2024-08-25">
+    expires_after="2024-10-27">
   <owner>pauljensen@chromium.org</owner>
   <owner>privacy-sandbox-dev@chromium.org</owner>
   <summary>
@@ -622,7 +622,7 @@
 </histogram>
 
 <histogram name="Ads.InterestGroup.Auction.GroupFreshness.{Type}"
-    units="minutes" expires_after="2024-08-25">
+    units="minutes" expires_after="2024-10-28">
   <owner>caraitto@chromium.org</owner>
   <owner>pauljensen@chromium.org</owner>
   <owner>privacy-sandbox-dev@chromium.org</owner>
@@ -644,7 +644,7 @@
 </histogram>
 
 <histogram name="Ads.InterestGroup.Auction.LoadGroupsCacheHit" enum="Boolean"
-    expires_after="2024-08-25">
+    expires_after="2024-10-28">
   <owner>abigailkatcoff@chromium.org</owner>
   <owner>privacy-sandbox-dev@chromium.org</owner>
   <summary>
@@ -658,7 +658,7 @@
 </histogram>
 
 <histogram name="Ads.InterestGroup.Auction.LoadGroupsTime" units="ms"
-    expires_after="2024-08-25">
+    expires_after="2024-10-27">
   <owner>pauljensen@chromium.org</owner>
   <owner>privacy-sandbox-dev@chromium.org</owner>
   <summary>
@@ -672,7 +672,7 @@
 </histogram>
 
 <histogram name="Ads.InterestGroup.Auction.LoadGroupsUseInProgressLoad"
-    enum="Boolean" expires_after="2024-08-25">
+    enum="Boolean" expires_after="2024-10-28">
   <owner>abigailkatcoff@chromium.org</owner>
   <owner>privacy-sandbox-dev@chromium.org</owner>
   <summary>
@@ -687,7 +687,7 @@
 </histogram>
 
 <histogram name="Ads.InterestGroup.Auction.LoadNoGroupsTime" units="ms"
-    expires_after="2024-08-25">
+    expires_after="2024-10-28">
   <owner>pauljensen@chromium.org</owner>
   <owner>privacy-sandbox-dev@chromium.org</owner>
   <summary>
@@ -701,7 +701,7 @@
 </histogram>
 
 <histogram name="Ads.InterestGroup.Auction.NumAuctionsPerPage" units="auctions"
-    expires_after="2024-08-25">
+    expires_after="2024-10-27">
   <owner>caraitto@chromium.org</owner>
   <owner>pauljensen@chromium.org</owner>
   <owner>privacy-sandbox-dev@chromium.org</owner>
@@ -718,7 +718,7 @@
 </histogram>
 
 <histogram name="Ads.InterestGroup.Auction.NumAuctionsSkippedDueToAuctionLimit"
-    units="auctions" expires_after="2024-08-25">
+    units="auctions" expires_after="2024-10-28">
   <owner>caraitto@chromium.org</owner>
   <owner>pauljensen@chromium.org</owner>
   <owner>privacy-sandbox-dev@chromium.org</owner>
@@ -733,7 +733,7 @@
 </histogram>
 
 <histogram name="Ads.InterestGroup.Auction.NumberOfPendingScoreAdTasks"
-    units="tasks" expires_after="2024-08-25">
+    units="tasks" expires_after="2024-10-28">
   <owner>abigailkatcoff@chromium.org</owner>
   <owner>privacy-sandbox-dev@chromium.org</owner>
   <summary>
@@ -761,7 +761,7 @@
 </histogram>
 
 <histogram name="Ads.InterestGroup.Auction.NumInterestGroups" units="groups"
-    expires_after="2024-08-25">
+    expires_after="2024-10-27">
   <owner>mmenke@chromium.org</owner>
   <owner>morlovich@chromium.org</owner>
   <summary>
@@ -798,7 +798,7 @@
 </histogram>
 
 <histogram name="Ads.InterestGroup.Auction.NumOwnersWithInterestGroups"
-    units="owners" expires_after="2024-08-25">
+    units="owners" expires_after="2024-10-28">
   <owner>mmenke@chromium.org</owner>
   <owner>morlovich@chromium.org</owner>
   <summary>
@@ -835,7 +835,7 @@
 </histogram>
 
 <histogram name="Ads.InterestGroup.Auction.NumSellersWithBidders"
-    units="sellers" expires_after="2024-08-25">
+    units="sellers" expires_after="2024-10-28">
   <owner>mmenke@chromium.org</owner>
   <owner>morlovich@chromium.org</owner>
   <summary>
@@ -866,7 +866,7 @@
 </histogram>
 
 <histogram name="Ads.InterestGroup.Auction.PercentAuctionsSuccessfulPerPage"
-    units="%" expires_after="2024-08-25">
+    units="%" expires_after="2024-10-28">
   <owner>caraitto@chromium.org</owner>
   <owner>pauljensen@chromium.org</owner>
   <owner>privacy-sandbox-dev@chromium.org</owner>
@@ -898,7 +898,7 @@
 </histogram>
 
 <histogram name="Ads.InterestGroup.Auction.ProcessLaunchTime" units="ms"
-    expires_after="2024-08-25">
+    expires_after="2024-10-28">
   <owner>pauljensen@chromium.org</owner>
   <owner>privacy-sandbox-dev@chromium.org</owner>
   <summary>
@@ -936,7 +936,7 @@
 </histogram>
 
 <histogram name="Ads.InterestGroup.Auction.ScoreAdInputWaitTime" units="ms"
-    expires_after="2024-08-25">
+    expires_after="2024-10-28">
   <owner>abigailkatcoff@chromium.org</owner>
   <owner>privacy-sandbox-dev@chromium.org</owner>
   <summary>
@@ -948,7 +948,7 @@
 </histogram>
 
 <histogram name="Ads.InterestGroup.Auction.ScoreAdQueueTime" units="ms"
-    expires_after="2024-08-25">
+    expires_after="2024-10-28">
   <owner>abigailkatcoff@chromium.org</owner>
   <owner>privacy-sandbox-dev@chromium.org</owner>
   <summary>
@@ -972,7 +972,7 @@
 </histogram>
 
 <histogram name="Ads.InterestGroup.Auction.ScoreAdTime" units="ms"
-    expires_after="2024-08-25">
+    expires_after="2024-10-28">
   <owner>pauljensen@chromium.org</owner>
   <owner>privacy-sandbox-dev@chromium.org</owner>
   <summary>
@@ -985,7 +985,7 @@
 </histogram>
 
 <histogram name="Ads.InterestGroup.Auction.TimeSinceLastAuctionPerPage"
-    units="ms" expires_after="2024-08-25">
+    units="ms" expires_after="2024-10-28">
   <owner>caraitto@chromium.org</owner>
   <owner>pauljensen@chromium.org</owner>
   <owner>privacy-sandbox-dev@chromium.org</owner>
@@ -1031,7 +1031,7 @@
 </histogram>
 
 <histogram name="Ads.InterestGroup.EnumNaming.{When}.{Type}"
-    enum="BooleanDeprecatedJSEnumName" expires_after="2024-08-25">
+    enum="BooleanDeprecatedJSEnumName" expires_after="2024-10-28">
   <owner>caraitto@chromium.org</owner>
   <owner>pauljensen@chromium.org</owner>
   <owner>privacy-sandbox-dev@chromium.org</owner>
@@ -1057,7 +1057,7 @@
 </histogram>
 
 <histogram name="Ads.InterestGroup.GetInterestGroupAdAuctionData.TimeToResolve"
-    units="ms" expires_after="2024-08-25">
+    units="ms" expires_after="2024-10-27">
   <owner>abigailkatcoff@chromium.org</owner>
   <owner>privacy-sandbox-dev@chromium.org</owner>
   <summary>
@@ -1073,7 +1073,7 @@
 </histogram>
 
 <histogram name="Ads.InterestGroup.GetInterestGroupCacheHit" enum="Boolean"
-    expires_after="2024-08-25">
+    expires_after="2024-10-28">
   <owner>abigailkatcoff@chromium.org</owner>
   <owner>privacy-sandbox-dev@chromium.org</owner>
   <summary>
@@ -1088,7 +1088,7 @@
 </histogram>
 
 <histogram name="Ads.InterestGroup.Net.DownloadTime.{Type}" units="ms"
-    expires_after="2024-08-25">
+    expires_after="2024-10-27">
   <owner>pauljensen@chromium.org</owner>
   <owner>privacy-sandbox-dev@chromium.org</owner>
   <summary>
@@ -1102,7 +1102,7 @@
 </histogram>
 
 <histogram name="Ads.InterestGroup.Net.RequestUrlSizeBytes.{Type}"
-    units="bytes" expires_after="2024-08-25">
+    units="bytes" expires_after="2024-10-27">
   <owner>caraitto@chromium.org</owner>
   <owner>pauljensen@chromium.org</owner>
   <owner>privacy-sandbox-dev@chromium.org</owner>
@@ -1118,7 +1118,7 @@
 </histogram>
 
 <histogram name="Ads.InterestGroup.Net.ResponseSizeBytes.{Type}" units="bytes"
-    expires_after="2024-08-25">
+    expires_after="2024-10-27">
   <owner>caraitto@chromium.org</owner>
   <owner>pauljensen@chromium.org</owner>
   <owner>privacy-sandbox-dev@chromium.org</owner>
@@ -1134,7 +1134,7 @@
 
 <histogram
     name="Ads.InterestGroup.NetHeaderResponse.HeaderDirectFromSellerSignals.NumAdSlotsPerResponse"
-    units="ad slots" expires_after="2024-08-25">
+    units="ad slots" expires_after="2024-10-28">
   <owner>caraitto@chromium.org</owner>
   <owner>pauljensen@chromium.org</owner>
   <owner>privacy-sandbox-dev@chromium.org</owner>
@@ -1149,7 +1149,7 @@
 
 <histogram
     name="Ads.InterestGroup.NetHeaderResponse.HeaderDirectFromSellerSignals.NumParseAndFindCalls"
-    units="calls" expires_after="2024-08-25">
+    units="calls" expires_after="2024-10-28">
   <owner>caraitto@chromium.org</owner>
   <owner>pauljensen@chromium.org</owner>
   <owner>privacy-sandbox-dev@chromium.org</owner>
@@ -1164,7 +1164,7 @@
 
 <histogram
     name="Ads.InterestGroup.NetHeaderResponse.HeaderDirectFromSellerSignals.NumResponsesReceivedPerPage"
-    units="responses" expires_after="2024-08-25">
+    units="responses" expires_after="2024-10-28">
   <owner>caraitto@chromium.org</owner>
   <owner>pauljensen@chromium.org</owner>
   <owner>privacy-sandbox-dev@chromium.org</owner>
@@ -1179,7 +1179,7 @@
 
 <histogram
     name="Ads.InterestGroup.NetHeaderResponse.HeaderDirectFromSellerSignals.OneResponseParseTime"
-    units="ms" expires_after="2024-08-25">
+    units="ms" expires_after="2024-10-28">
   <owner>caraitto@chromium.org</owner>
   <owner>pauljensen@chromium.org</owner>
   <owner>privacy-sandbox-dev@chromium.org</owner>
@@ -1194,7 +1194,7 @@
 
 <histogram
     name="Ads.InterestGroup.NetHeaderResponse.HeaderDirectFromSellerSignals.ParseAndFindMatchTime"
-    units="ms" expires_after="2024-08-25">
+    units="ms" expires_after="2024-10-28">
   <owner>caraitto@chromium.org</owner>
   <owner>pauljensen@chromium.org</owner>
   <owner>privacy-sandbox-dev@chromium.org</owner>
@@ -1225,7 +1225,7 @@
 
 <histogram
     name="Ads.InterestGroup.NetHeaderResponse.HeaderDirectFromSellerSignals.QueueDepthAtAdd"
-    units="entries" expires_after="2024-08-25">
+    units="entries" expires_after="2024-10-28">
   <owner>caraitto@chromium.org</owner>
   <owner>pauljensen@chromium.org</owner>
   <owner>privacy-sandbox-dev@chromium.org</owner>
@@ -1241,7 +1241,7 @@
 
 <histogram
     name="Ads.InterestGroup.NetHeaderResponse.HeaderDirectFromSellerSignals.QueueDepthAtDestruction"
-    units="entries" expires_after="2024-08-25">
+    units="entries" expires_after="2024-10-28">
   <owner>caraitto@chromium.org</owner>
   <owner>pauljensen@chromium.org</owner>
   <owner>privacy-sandbox-dev@chromium.org</owner>
@@ -1256,7 +1256,7 @@
 
 <histogram
     name="Ads.InterestGroup.NetHeaderResponse.HeaderDirectFromSellerSignals.ResponseSizeBytes"
-    units="bytes" expires_after="2024-08-25">
+    units="bytes" expires_after="2024-10-28">
   <owner>caraitto@chromium.org</owner>
   <owner>pauljensen@chromium.org</owner>
   <owner>privacy-sandbox-dev@chromium.org</owner>
@@ -1271,7 +1271,7 @@
 
 <histogram
     name="Ads.InterestGroup.NetHeaderResponse.HeaderDirectFromSellerSignals.RoundProcessingTime"
-    units="ms" expires_after="2024-08-25">
+    units="ms" expires_after="2024-10-28">
   <owner>caraitto@chromium.org</owner>
   <owner>pauljensen@chromium.org</owner>
   <owner>privacy-sandbox-dev@chromium.org</owner>
@@ -1287,7 +1287,7 @@
 
 <histogram
     name="Ads.InterestGroup.NetHeaderResponse.HeaderDirectFromSellerSignals.SignalsUsedInAuctionBytes"
-    units="bytes" expires_after="2024-08-25">
+    units="bytes" expires_after="2024-10-28">
   <owner>caraitto@chromium.org</owner>
   <owner>pauljensen@chromium.org</owner>
   <owner>privacy-sandbox-dev@chromium.org</owner>
@@ -1302,7 +1302,7 @@
 
 <histogram name="Ads.InterestGroup.NetHeaderResponse.StartRequestOutcome"
     enum="InterestGroupAdAuctionUrlLoaderInterceptorStartRequestOutcome"
-    expires_after="2024-08-25">
+    expires_after="2024-10-28">
   <owner>caraitto@chromium.org</owner>
   <owner>pauljensen@chromium.org</owner>
   <owner>privacy-sandbox-dev@chromium.org</owner>
@@ -1366,7 +1366,7 @@
 </histogram>
 
 <histogram name="Ads.InterestGroup.Round.GroupsUpdated.TotalCount"
-    units="groups" expires_after="2024-08-25">
+    units="groups" expires_after="2024-10-28">
   <owner>xtlsheep@google.com</owner>
   <owner>privacy-sandbox-dev@chromium.org</owner>
   <summary>
@@ -1614,7 +1614,7 @@
 </histogram>
 
 <histogram name="Ads.InterestGroup.Update.AuctionExecutionMode"
-    enum="InterestGroupAdAuctionExecutionMode" expires_after="2024-08-25">
+    enum="InterestGroupAdAuctionExecutionMode" expires_after="2024-10-28">
   <owner>behamilton@google.com</owner>
   <owner>privacy-sandbox-dev@chromium.org</owner>
   <summary>
@@ -1627,8 +1627,22 @@
   </summary>
 </histogram>
 
-<histogram name="Ads.InterestGroup.{AuctionType}.AbortTime" units="ms"
+<histogram name="Ads.InterestGroup.UpdateIfOlderThan" units="ms"
     expires_after="2024-08-25">
+  <owner>caraitto@chromium.org</owner>
+  <owner>privacy-sandbox-dev@chromium.org</owner>
+  <summary>
+    The updateIfOlderThanMs value passed via the trusted bidding signals server
+    response before clamping has been applied. Recorded when the received
+    updateIfOlderThanMs is processed during an auction.
+
+    See https://github.com/WICG/turtledove/blob/main/FLEDGE.md for the latest
+    version of the FLEDGE explainer.
+  </summary>
+</histogram>
+
+<histogram name="Ads.InterestGroup.{AuctionType}.AbortTime" units="ms"
+    expires_after="2024-10-28">
   <owner>mmenke@chromium.org</owner>
   <owner>morlovich@chromium.org</owner>
   <summary>
@@ -1650,7 +1664,7 @@
 </histogram>
 
 <histogram name="Ads.InterestGroup.{AuctionType}.AuctionWithWinnerTime"
-    units="ms" expires_after="2024-08-25">
+    units="ms" expires_after="2024-10-27">
   <owner>mmenke@chromium.org</owner>
   <owner>morlovich@chromium.org</owner>
   <summary>
@@ -1671,7 +1685,7 @@
 </histogram>
 
 <histogram name="Ads.InterestGroup.{AuctionType}.CompletedWithoutWinnerTime"
-    units="ms" expires_after="2024-08-25">
+    units="ms" expires_after="2024-10-27">
   <owner>mmenke@chromium.org</owner>
   <owner>morlovich@chromium.org</owner>
   <summary>
@@ -1695,7 +1709,7 @@
 </histogram>
 
 <histogram name="Ads.InterestGroup.{AuctionType}.NonKAnonWinnerIsKAnon"
-    enum="Boolean" expires_after="2024-08-25">
+    enum="Boolean" expires_after="2024-10-28">
   <owner>behamilton@google.com</owner>
   <owner>morlovich@chromium.org</owner>
   <summary>
@@ -1732,7 +1746,7 @@
 </histogram>
 
 <histogram name="Ads.InterestGroup.{AuctionType}.ReportingIdType"
-    enum="AuctionReportingIdField" expires_after="2024-08-25">
+    enum="AuctionReportingIdField" expires_after="2024-10-28">
   <owner>behamilton@google.com</owner>
   <owner>pauljensen@chromium.org</owner>
   <owner>privacy-sandbox-dev@chromium.org</owner>
@@ -1751,7 +1765,7 @@
 </histogram>
 
 <histogram name="Ads.InterestGroup.{AuctionType}.Result" enum="AuctionResult"
-    expires_after="2024-08-25">
+    expires_after="2024-10-27">
   <owner>mmenke@chromium.org</owner>
   <owner>morlovich@chromium.org</owner>
   <summary>
@@ -1772,7 +1786,7 @@
 </histogram>
 
 <histogram name="Ads.InterestGroup.{AuctionType}.SignaledAbortTime" units="ms"
-    expires_after="2024-08-25">
+    expires_after="2024-10-28">
   <owner>abigailkatcoff@chromium.org</owner>
   <owner>privacy-sandbox-dev@chromium.org</owner>
   <summary>
@@ -1794,7 +1808,7 @@
 </histogram>
 
 <histogram name="Ads.InterestGroup.{AuctionType}.StateAtAbortTime"
-    enum="AuctionState" expires_after="2024-08-25">
+    enum="AuctionState" expires_after="2024-10-28">
   <owner>abigailkatcoff@chromium.org</owner>
   <owner>privacy-sandbox-dev@chromium.org</owner>
   <summary>
@@ -1816,7 +1830,7 @@
 </histogram>
 
 <histogram name="Ads.InterestGroup.{AuctionType}.StateAtFailTime"
-    enum="AuctionState" expires_after="2024-08-25">
+    enum="AuctionState" expires_after="2024-10-28">
   <owner>abigailkatcoff@chromium.org</owner>
   <owner>privacy-sandbox-dev@chromium.org</owner>
   <summary>
@@ -1838,7 +1852,7 @@
 </histogram>
 
 <histogram name="Ads.InterestGroup.{AuctionType}.TimeToResolve" units="ms"
-    expires_after="2024-08-25">
+    expires_after="2024-10-28">
   <owner>abigailkatcoff@chromium.org</owner>
   <owner>privacy-sandbox-dev@chromium.org</owner>
   <summary>
@@ -3127,7 +3141,7 @@
 </histogram>
 
 <histogram name="Conversions.AggregatableReport.NumContributionsPerReport2"
-    units="contribution" expires_after="2024-08-04">
+    units="contribution" expires_after="2024-10-28">
   <owner>linnan@chromium.org</owner>
   <owner>johnidel@chromium.org</owner>
   <owner>measurement-api-dev+metrics@google.com</owner>
@@ -3229,6 +3243,29 @@
   </summary>
 </histogram>
 
+<histogram name="Conversions.AggregatableReport.TotalBudgetPerReport"
+    units="budget consumed" expires_after="2024-10-30">
+  <owner>linnan@chromium.org</owner>
+  <owner>measurement-api-dev+metrics@google.com</owner>
+  <summary>
+    Measures the total budget consumed per aggregatable report. Recorded as
+    100,000 when the total budget exceeds 65,536. Recorded when creating the
+    aggregatable histogram.
+  </summary>
+</histogram>
+
+<histogram name="Conversions.AllowedByPermissionPolicy" enum="BooleanAllowed"
+    expires_after="2024-12-31">
+  <owner>tquintanilla@chromium.org</owner>
+  <owner>johnidel@chromium.org</owner>
+  <owner>measurement-api-dev+metrics@google.com</owner>
+  <summary>
+    Records whether an attribution event is allowed by the client's permission
+    policy. This is emitted whenever the permission policy is checked upon an
+    attribution event.
+  </summary>
+</histogram>
+
 <histogram name="Conversions.AndroidOperationResult.{Operation}"
     enum="ConversionAndroidOperationResult" expires_after="2024-09-15">
   <owner>linnan@chromium.org</owner>
@@ -3287,7 +3324,7 @@
 </histogram>
 
 <histogram name="Conversions.AttributionSrcRequestStatus"
-    enum="ConversionAttributionSrcRequestStatus" expires_after="2024-08-25">
+    enum="ConversionAttributionSrcRequestStatus" expires_after="2024-10-28">
   <owner>linnan@chromium.org</owner>
   <owner>johnidel@chromium.org</owner>
   <owner>measurement-api-dev+metrics@google.com</owner>
@@ -5052,7 +5089,7 @@
 </histogram>
 
 <histogram name="Drive.PushNotificationRegistered" enum="BooleanRegistered"
-    expires_after="2024-05-19">
+    expires_after="M138">
   <owner>simmonsjosh@google.com</owner>
   <owner>src/ui/file_manager/OWNERS</owner>
   <summary>
@@ -5097,7 +5134,7 @@
 </histogram>
 
 <histogram name="DrmUtil.GetColorSpaceFromEdid.ChecksOutcome"
-    enum="EdidColorSpaceChecksOutcome" expires_after="2024-08-25">
+    enum="EdidColorSpaceChecksOutcome" expires_after="2024-10-28">
   <owner>andrescj@chromium.org</owner>
   <owner>mcasas@chromium.org</owner>
   <owner>sashamcintosh@chromium.org</owner>
@@ -7277,7 +7314,7 @@
 </histogram>
 
 <histogram name="LoadingPredictor.PredictorDatabaseFileSize" units="KiB"
-    expires_after="2024-07-09">
+    expires_after="2024-10-28">
   <owner>yoichio@chromium.org</owner>
   <owner>chrome-loading@chromium.org</owner>
   <component>1457018</component>
@@ -8153,7 +8190,7 @@
 </histogram>
 
 <histogram name="OSCrypt.AsyncInitialization.Result" enum="Boolean"
-    expires_after="2024-08-04">
+    expires_after="2024-10-28">
   <owner>wfh@chromium.org</owner>
   <owner>nparker@chromium.org</owner>
   <summary>
@@ -8164,7 +8201,7 @@
 </histogram>
 
 <histogram name="OSCrypt.AsyncInitialization.Time" units="ms"
-    expires_after="2024-08-04">
+    expires_after="2024-10-28">
   <owner>wfh@chromium.org</owner>
   <owner>nparker@chromium.org</owner>
   <summary>
@@ -8619,7 +8656,7 @@
 </histogram>
 
 <histogram name="PaintHolding.InputTiming4" enum="PaintHoldingInputTiming"
-    expires_after="2024-07-07">
+    expires_after="2024-10-28">
   <owner>pdr@chromium.org</owner>
   <owner>paint-dev@chromium.org</owner>
   <summary>
@@ -9208,7 +9245,7 @@
 </histogram>
 
 <histogram name="ReduceAcceptLanguage.AcceptLanguageNegotiationRestart"
-    enum="AcceptLanguageNegotiationRestart" expires_after="2024-09-22">
+    enum="AcceptLanguageNegotiationRestart" expires_after="M130">
   <owner>victortan@chromium.org</owner>
   <owner>awillia@chromium.org</owner>
   <owner>miketaylr@chromium.org</owner>
@@ -9218,8 +9255,19 @@
   </summary>
 </histogram>
 
+<histogram name="ReduceAcceptLanguage.AcceptLanguagePrefValueIsEmpty"
+    enum="BooleanAvailable" expires_after="M130">
+  <owner>victortan@chromium.org</owner>
+  <owner>awillia@chromium.org</owner>
+  <owner>miketaylr@chromium.org</owner>
+  <summary>
+    Measure how often user accept-language is empty when reading accept-language
+    from prefs.
+  </summary>
+</histogram>
+
 <histogram name="ReduceAcceptLanguage.ClearLatency" units="ms"
-    expires_after="M128">
+    expires_after="M130">
   <owner>victortan@chromium.org</owner>
   <owner>awillia@chromium.org</owner>
   <owner>miketaylr@chromium.org</owner>
@@ -9231,7 +9279,7 @@
 </histogram>
 
 <histogram name="ReduceAcceptLanguage.FetchLatencyUs" units="microseconds"
-    expires_after="2024-09-22">
+    expires_after="M130">
   <owner>victortan@chromium.org</owner>
   <owner>awillia@chromium.org</owner>
   <owner>miketaylr@chromium.org</owner>
@@ -9249,7 +9297,7 @@
 </histogram>
 
 <histogram name="ReduceAcceptLanguage.StoreLatency" units="ms"
-    expires_after="M128">
+    expires_after="M130">
   <owner>victortan@chromium.org</owner>
   <owner>awillia@chromium.org</owner>
   <owner>miketaylr@chromium.org</owner>
@@ -9261,7 +9309,7 @@
 </histogram>
 
 <histogram name="ReduceAcceptLanguage.UpdateSize" units="count"
-    expires_after="M128">
+    expires_after="M130">
   <owner>victortan@chromium.org</owner>
   <owner>awillia@chromium.org</owner>
   <owner>miketaylr@chromium.org</owner>
@@ -9882,7 +9930,7 @@
 </histogram>
 
 <histogram name="Servicification.Startup2" enum="ServicificationStartupMode"
-    expires_after="2024-08-25">
+    expires_after="2024-10-28">
   <owner>hanxi@chromium.org</owner>
   <owner>yfriedman@chromium.org</owner>
   <owner>hnakashima@chromium.org</owner>
@@ -9993,7 +10041,7 @@
 </histogram>
 
 <histogram name="Shutdown.OtherExit.Time2" units="ms"
-    expires_after="2024-07-14">
+    expires_after="2024-10-28">
   <owner>etienneb@chromium.org</owner>
   <owner>gab@chromium.org</owner>
   <summary>
@@ -11957,6 +12005,13 @@
   </summary>
 </histogram>
 
+<histogram name="WebDatabase.DatabaseErrors" enum="SqliteLoggedResultCode"
+    expires_after="2024-10-06">
+  <owner>battre@chromium.org</owner>
+  <owner>asully@chromium.org</owner>
+  <summary>Records the errors reported by SQLite.</summary>
+</histogram>
+
 <histogram name="WebDatabase.FailedMigrationToVersion" units="version"
     expires_after="2024-09-01">
   <owner>battre@chromium.org</owner>
@@ -12454,10 +12509,12 @@
     <variant name="ShowHistory"/>
     <variant name="ShowHistoryClustersSidePanel"/>
     <variant name="ShowKaleidoscope"/>
+    <variant name="ShowLensOverlay"/>
     <variant name="ShowPasswordManager"/>
     <variant name="ShowPaymentMethods"/>
     <variant name="ShowPerformanceSettings"/>
     <variant name="ShowReadingModeSidePanel"/>
+    <variant name="ShowSavedTabGroups"/>
     <variant name="ShowSearchCompanion"/>
     <variant name="ShowSigninWhenPaused"/>
     <variant name="ShowSyncSettings"/>
diff --git a/tools/metrics/histograms/metadata/page/histograms.xml b/tools/metrics/histograms/metadata/page/histograms.xml
index 0b127032b..766fcc4 100644
--- a/tools/metrics/histograms/metadata/page/histograms.xml
+++ b/tools/metrics/histograms/metadata/page/histograms.xml
@@ -2037,7 +2037,7 @@
 
 <histogram
     name="PageLoad.Experimental.PageTiming.CommitSentToFirstSubresourceLoadStart"
-    units="ms" expires_after="2024-08-25">
+    units="ms" expires_after="2024-10-28">
   <owner>cduvall@chromium.org</owner>
   <owner>jam@chromium.org</owner>
   <summary>
@@ -2789,7 +2789,7 @@
 </histogram>
 
 <histogram name="PageLoad.Internal.SuppressedInteractionsCountBeforePaint2"
-    units="count" expires_after="2024-07-07">
+    units="count" expires_after="2024-10-28">
   <owner>mustaq@chromium.org</owner>
   <owner>blink-interactions-team@google.com</owner>
   <summary>
@@ -3211,7 +3211,7 @@
 
 <histogram
     name="PageLoad.PaintTiming.NavigationToLargestContentfulPaint.ImageLCPLessThanLoadEnd"
-    enum="Boolean" expires_after="2024-08-25">
+    enum="Boolean" expires_after="2024-10-28">
   <owner>haoliuk@chromium.org</owner>
   <owner>speed-metrics-dev@chromium.org</owner>
   <summary>
@@ -3235,7 +3235,7 @@
 
 <histogram
     name="PageLoad.PaintTiming.NavigationToLargestContentfulPaint.ImageLoadStartLessThanDocumentTTFB"
-    enum="Boolean" expires_after="2024-08-25">
+    enum="Boolean" expires_after="2024-10-28">
   <owner>haoliuk@chromium.org</owner>
   <owner>speed-metrics-dev@chromium.org</owner>
   <summary>
@@ -3248,7 +3248,7 @@
 <histogram
     name="PageLoad.PaintTiming.NavigationToLargestContentfulPaint.ImageLoadStartLessThanDocumentTtfbCauses"
     enum="LargestContentfulPaintImageLoadStartLessThanDocumentTtfbCauses"
-    expires_after="2024-08-25">
+    expires_after="2024-10-28">
   <owner>haoliuk@chromium.org</owner>
   <owner>speed-metrics-dev@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/password/histograms.xml b/tools/metrics/histograms/metadata/password/histograms.xml
index 72348c1a..2703e1c9 100644
--- a/tools/metrics/histograms/metadata/password/histograms.xml
+++ b/tools/metrics/histograms/metadata/password/histograms.xml
@@ -259,6 +259,19 @@
   </token>
 </histogram>
 
+<histogram name="KeyboardAccessory.TouchEventFiltered" enum="BooleanYesNo"
+    expires_after="2025-04-22">
+  <owner>tchudakov@google.com</owner>
+  <owner>fhorschig@chromium.org</owner>
+  <summary>
+    Android only. Records if the Keyboard Accessory filtered at least one touch
+    event because the Chrome window was fully or partially obscured. The metric
+    is logged immediately if the Keyboard Accessory receives a filtered event.
+    Otherwise, the metric is logged when the Keyboard Accessory if dismissed
+    only if it received at least 1 touch event.
+  </summary>
+</histogram>
+
 <histogram name="PasswordBubble.AddUsernameBubble.UsernameAdded"
     enum="BooleanYesNo" expires_after="M130">
   <owner>sygiet@google.com</owner>
@@ -733,7 +746,7 @@
 </histogram>
 
 <histogram name="PasswordManager.AffiliationFetcher.FetchTime.{Status}"
-    units="ms" expires_after="2024-07-07">
+    units="ms" expires_after="2024-10-28">
   <owner>vsemeniuk@google.com</owner>
   <owner>vasilii@chromium.org</owner>
   <summary>
@@ -748,7 +761,7 @@
 </histogram>
 
 <histogram name="PasswordManager.AffiliationFetcher.ResponseSize.{Status}"
-    units="bytes" expires_after="M126">
+    units="bytes" expires_after="2024-10-28">
   <owner>vsemeniuk@google.com</owner>
   <owner>vasilii@chromium.org</owner>
   <summary>
@@ -1916,6 +1929,19 @@
   </summary>
 </histogram>
 
+<histogram name="PasswordManager.ManualFallback.ShowSuggestions.Latency"
+    units="ms" expires_after="2025-04-25">
+  <owner>tchudakov@google.com</owner>
+  <owner>brunobraga@google.com</owner>
+  <summary>
+    Desktop only. Records the time(ms) elapsed between the user triggering the
+    password manual fallback from the Chrome context menu and the suggestions
+    being displayed. The delay between these two events is caused by the async
+    credential data fetching. This is recorded once per navigation because the
+    fetched data is reset on navigation.
+  </summary>
+</histogram>
+
 <histogram name="PasswordManager.MatchedFormType"
     enum="PasswordManagerMatchedFormType" expires_after="2024-09-22">
   <owner>vsemeniuk@google.com</owner>
@@ -2519,7 +2545,7 @@
 
 <histogram name="PasswordManager.PasswordSharingDesktop.UserAction"
     enum="PasswordManager.PasswordSharingDesktopActions"
-    expires_after="2024-08-25">
+    expires_after="2024-10-28">
   <owner>natiahlyi@google.com</owner>
   <owner>mamir@chromium.org</owner>
   <owner>rgod@google.com</owner>
@@ -2531,7 +2557,7 @@
 
 <histogram name="PasswordManager.PasswordSharingIOS.UserAction"
     enum="PasswordManager.PasswordSharingIOSUserAction"
-    expires_after="2024-06-09">
+    expires_after="2024-10-30">
   <owner>rgod@google.com</owner>
   <owner>mamir@chromium.org</owner>
   <summary>
@@ -3322,7 +3348,7 @@
 </histogram>
 
 <histogram name="PasswordManager.Settings.Export.Event"
-    enum="PasswordExportEvent" expires_after="2024-08-25">
+    enum="PasswordExportEvent" expires_after="2024-10-28">
   <owner>ioanap@chromium.org</owner>
   <owner>atsvirchkova@google.com</owner>
   <summary>
@@ -3333,7 +3359,7 @@
 </histogram>
 
 <histogram name="PasswordManager.Settings.Export.Result2"
-    enum="HistogramExportResult" expires_after="2024-08-25">
+    enum="HistogramExportResult" expires_after="2024-10-28">
   <owner>ioanap@chromium.org</owner>
   <owner>atsvirchkova@google.com</owner>
   <summary>
@@ -3445,7 +3471,7 @@
 </histogram>
 
 <histogram name="PasswordManager.StoresUsedForFillingInLast28Days"
-    enum="PasswordManagerFillingSource" expires_after="2024-05-26">
+    enum="PasswordManagerFillingSource" expires_after="2024-10-26">
   <owner>mamir@chromium.org</owner>
   <owner>treib@chromium.org</owner>
   <summary>
@@ -3457,7 +3483,7 @@
 </histogram>
 
 <histogram name="PasswordManager.StoresUsedForFillingInLast7Days"
-    enum="PasswordManagerFillingSource" expires_after="2024-05-26">
+    enum="PasswordManagerFillingSource" expires_after="2024-10-26">
   <owner>mamir@chromium.org</owner>
   <owner>treib@chromium.org</owner>
   <summary>
@@ -3733,7 +3759,7 @@
 </histogram>
 
 <histogram name="PasswordManager.UnifiedPasswordManager.ActiveStatus2"
-    enum="UnifiedPasswordManagerActiveStatus" expires_after="M129">
+    enum="UnifiedPasswordManagerActiveStatus" expires_after="2024-10-27">
   <owner>kazinova@google.com</owner>
   <owner>ioanap@chromium.org</owner>
   <owner>fhorschig@chromium.org</owner>
@@ -4256,7 +4282,7 @@
 </histogram>
 
 <histogram name="PasswordProtection.PasswordProtectionResponseOrErrorCode"
-    enum="CombinedHttpResponseAndNetErrorCode" expires_after="2024-08-25">
+    enum="CombinedHttpResponseAndNetErrorCode" expires_after="2024-10-28">
   <owner>drubery@chromium.org</owner>
   <owner>chrome-counter-abuse-alerts@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/permissions/enums.xml b/tools/metrics/histograms/metadata/permissions/enums.xml
index a2f2e85..56081ac 100644
--- a/tools/metrics/histograms/metadata/permissions/enums.xml
+++ b/tools/metrics/histograms/metadata/permissions/enums.xml
@@ -95,7 +95,7 @@
 
 <enum name="OsScreenAction">
   <int value="0" label="SystemSettings"/>
-  <int value="1" label="Dismiss"/>
+  <int value="1" label="DismissXButton"/>
   <int value="2" label="DismissScrim"/>
 </enum>
 
diff --git a/tools/metrics/histograms/metadata/permissions/histograms.xml b/tools/metrics/histograms/metadata/permissions/histograms.xml
index 6886a8e..67aeda2 100644
--- a/tools/metrics/histograms/metadata/permissions/histograms.xml
+++ b/tools/metrics/histograms/metadata/permissions/histograms.xml
@@ -63,6 +63,17 @@
   <variant name="FromUser"/>
 </variants>
 
+<variants name="OsScreen">
+  <variant name="OS_PROMPT"/>
+  <variant name="OS_SYSTEM_SETTINGS"/>
+</variants>
+
+<variants name="OsScreenAction">
+  <variant name="DISMISSED_SCRIM"/>
+  <variant name="DISMISSED_X_BUTTON"/>
+  <variant name="SYSTEM_SETTINGS"/>
+</variants>
+
 <variants name="PermissionTypeForElementAnchoredBubble">
   <variant name="AR"/>
   <variant name="AudioAndVideoCapture"/>
@@ -315,7 +326,7 @@
 </histogram>
 
 <histogram name="Permissions.ConfirmationChip.PageInfoDialogAccessType"
-    enum="PageInfoDialogAccessType" expires_after="2024-05-05">
+    enum="PageInfoDialogAccessType" expires_after="2025-05-05">
   <owner>fjacky@chromium.org</owner>
   <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
   <summary>
@@ -573,7 +584,7 @@
 </histogram>
 
 <histogram name="Permissions.OneTimePermission.{PermissionType}.Event"
-    enum="OneTimePermissionEvent" expires_after="2024-08-25">
+    enum="OneTimePermissionEvent" expires_after="2024-10-28">
   <owner>fjacky@chromium.org</owner>
   <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
   <summary>
@@ -611,7 +622,7 @@
 </histogram>
 
 <histogram name="Permissions.PageInfo.Changed.{PermissionType}.{ReloadInfoBar}"
-    enum="PermissionChangeAction" expires_after="2024-04-28">
+    enum="PermissionChangeAction" expires_after="2025-04-28">
   <owner>elklm@chromium.org</owner>
   <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
   <summary>
@@ -912,13 +923,8 @@
     sequentially as part of the same prompt. Is recorded when the screen is
     shown.
   </summary>
-  <token key="PermissionType">
-    <variant name="AR"/>
-    <variant name="AudioAndVideoCapture"/>
-    <variant name="AudioCapture"/>
-    <variant name="Geolocation"/>
-    <variant name="VideoCapture"/>
-  </token>
+  <token key="PermissionType"
+      variants="PermissionTypeForElementAnchoredBubble"/>
 </histogram>
 
 <histogram
@@ -933,10 +939,23 @@
   </summary>
   <token key="PermissionType"
       variants="PermissionTypeForElementAnchoredBubble"/>
-  <token key="OsScreen">
-    <variant name="OS_PROMPT"/>
-    <variant name="OS_SYSTEM_SETTINGS"/>
-  </token>
+  <token key="OsScreen" variants="OsScreen"/>
+</histogram>
+
+<histogram
+    name="Permissions.Prompt.{PermissionType}.ElementAnchoredBubble.{OsScreen}.{OsScreenAction}.TimeToAction"
+    units="ms" expires_after="2025-02-16">
+  <owner>hkamila@chromium.org</owner>
+  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
+  <summary>
+    Tracks the time until an action is taken on a {PermissionType} screen that
+    informs the user about state of the OS settings. Recorded whenever the user
+    takes an action that results in closing the screen.
+  </summary>
+  <token key="PermissionType"
+      variants="PermissionTypeForElementAnchoredBubble"/>
+  <token key="OsScreen" variants="OsScreen"/>
+  <token key="OsScreenAction" variants="OsScreenAction"/>
 </histogram>
 
 <histogram name="Permissions.Prompt.{PermissionType}.{Disposition}.Action"
@@ -1219,7 +1238,7 @@
 </histogram>
 
 <histogram name="Permissions.Revocation.Notifications.SourceUI"
-    enum="PermissionSourceUI" expires_after="2024-08-25">
+    enum="PermissionSourceUI" expires_after="2024-10-28">
   <owner>engedy@chromium.org</owner>
   <owner>willxu@google.com</owner>
   <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
@@ -1277,7 +1296,7 @@
 </histogram>
 
 <histogram name="Permissions.Usage.Notifications.DidRecordUkm" enum="Boolean"
-    expires_after="2024-05-05">
+    expires_after="2025-05-05">
   <owner>engedy@chromium.org</owner>
   <owner>willxu@google.com</owner>
   <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
@@ -1384,22 +1403,6 @@
   </summary>
 </histogram>
 
-<histogram name="WebsiteSettings.GetAllSitesLoadTime" units="ms"
-    expires_after="2024-09-15">
-  <owner>olesiamarukhno@google.com</owner>
-  <owner>sauski@google.com</owner>
-  <owner>kartoffel-core-eng@google.com</owner>
-  <owner>chrome-privacy-controls@google.com</owner>
-  <summary>
-    Records the load time of the &quot;All sites&quot; settings page. The load
-    time is the time between the &quot;GetAllSites&quot; request start and the
-    time when the storage is fetched and the full information is returned to the
-    UI.
-
-    Warning: this histogram was expired from M120 to M123; data may be missing.
-  </summary>
-</histogram>
-
 <histogram name="WebsiteSettings.OriginInfo.PermissionChanged"
     enum="ContentType" expires_after="2024-09-01">
   <owner>andypaicu@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/platform/enums.xml b/tools/metrics/histograms/metadata/platform/enums.xml
index d68de227..362fe79 100644
--- a/tools/metrics/histograms/metadata/platform/enums.xml
+++ b/tools/metrics/histograms/metadata/platform/enums.xml
@@ -531,6 +531,14 @@
   </int>
 </enum>
 
+<enum name="FlexBootMethod">
+  <int value="0" label="Unknown"/>
+  <int value="1" label="Coreboot"/>
+  <int value="2" label="32-bit UEFI"/>
+  <int value="3" label="64-bit UEFI"/>
+  <int value="4" label="BIOS"/>
+</enum>
+
 <enum name="FlexCpuIsaLevel">
   <int value="0" label="Unknown"/>
   <int value="1" label="x86-64-v1"/>
@@ -2460,6 +2468,7 @@
   <int value="666817951" label="CROS Cr50 0.6.211"/>
   <int value="679016111" label="CROS Cr50 0.5.60"/>
   <int value="691364586" label="CROS Cr50 0.0.22 Eve Flags 0xff00(unknown)"/>
+  <int value="698425188" label="CROS Ti50 0.24.90"/>
   <int value="704960859" label="CROS Ti50 0.24.3"/>
   <int value="705140733" label="CROS Cr50 0.6.111"/>
   <int value="707846933" label="CROS Cr50 0.1.1 Flags 0x10(pre-pvt)"/>
diff --git a/tools/metrics/histograms/metadata/platform/histograms.xml b/tools/metrics/histograms/metadata/platform/histograms.xml
index f0d8617..b0180e7 100644
--- a/tools/metrics/histograms/metadata/platform/histograms.xml
+++ b/tools/metrics/histograms/metadata/platform/histograms.xml
@@ -550,6 +550,19 @@
   </summary>
 </histogram>
 
+<histogram name="Platform.FlexBootMethod" enum="FlexBootMethod"
+    expires_after="2024-10-06">
+  <owner>justinoue@google.com</owner>
+  <owner>chromeos-flex-eng@google.com</owner>
+  <summary>
+    ChromeOS Flex runs on a various configurations of x86 firmware. This metric
+    collects the method used to boot the device.
+
+    This metric is only recorded on ChromeOS Flex devices. It is recorded once
+    per boot.
+  </summary>
+</histogram>
+
 <histogram name="Platform.FlexCpuIsaLevel" enum="FlexCpuIsaLevel"
     expires_after="2024-09-01">
   <owner>nicholasbishop@google.com</owner>
@@ -1351,7 +1364,7 @@
 </histogram>
 
 <histogram name="Platform.Missive.StorageDegradationAmount" units="KiB"
-    expires_after="2024-05-31">
+    expires_after="2025-01-31">
   <owner>lbaraz@google.com</owner>
   <owner>cros-reporting-team@google.com</owner>
   <summary>
@@ -1534,7 +1547,7 @@
 </histogram>
 
 <histogram name="Platform.Resourced.MemoryNotificationCountTenMinutes"
-    units="count" expires_after="2024-08-23">
+    units="count" expires_after="2024-10-28">
   <owner>vovoy@chromium.org</owner>
   <owner>chromeos-memory@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/power/histograms.xml b/tools/metrics/histograms/metadata/power/histograms.xml
index aae93b6..e678c8f3 100644
--- a/tools/metrics/histograms/metadata/power/histograms.xml
+++ b/tools/metrics/histograms/metadata/power/histograms.xml
@@ -926,6 +926,19 @@
   </summary>
 </histogram>
 
+<histogram name="Power.BatteryRemainingWhenChargeStarts" units="%"
+    expires_after="2025-04-10">
+  <owner>puthik@chromium.org</owner>
+  <owner>chromeos-platform-power@google.com</owner>
+  <summary>
+    Chrome OS remaining battery charge as percent of the maximum battery charge,
+    sampled when charging starts.
+
+    Warning: this histogram was expired from 2022-05-01 to 2024-04-12; data may
+    be missing.
+  </summary>
+</histogram>
+
 <histogram name="Power.BatterySaver.UserBrightenedSec" units="seconds"
     expires_after="2024-09-01">
   <owner>cwd@google.com</owner>
@@ -956,6 +969,26 @@
   </summary>
 </histogram>
 
+<histogram name="Power.ConnectedChargingPorts"
+    enum="PowerConnectedChargingPorts" expires_after="2025-04-10">
+  <owner>bleung@chromium.org</owner>
+  <owner>puthik@chromium.org</owner>
+  <owner>chromeos-platform-power@google.com</owner>
+  <summary>
+    Connected charging ports on Chrome OS. A sample is reported every time that
+    the power manager polls sysfs (typically every 30 seconds). Ordinals are
+    assigned based on the lexicographical ordering of power supply names from
+    sysfs and have no implied correspondence with ports' physical locations. For
+    example, with ports 'CROS_USB_PD_CHARGER0' and 'CROS_USB_PD_CHARGER1',
+    'first' refers to the former and 'second' to the latter. To determine a
+    port's physical location, see the powerd charging_ports pref in the device's
+    overlay.
+
+    Warning: this histogram was expired from 2022-04-25 to 2024-04-12; data may
+    be missing.
+  </summary>
+</histogram>
+
 <histogram name="Power.CpuTimeSecondsPerProcessType" enum="ProcessType2"
     expires_after="2024-09-01">
   <owner>eseckler@chromium.org</owner>
@@ -1106,6 +1139,21 @@
   </summary>
 </histogram>
 
+<histogram name="Power.DarkResumeWakeupsPerHour" units="units"
+    expires_after="2025-04-10">
+  <owner>mka@chromium.org</owner>
+  <owner>chromeos-platform-power@google.com</owner>
+  <summary>
+    The number of times a system woke up in dark resume in an hour. Note that
+    this value is scaled up or down to an hour based on the amount of time the
+    system spent in suspend. So if the system suspended for 20 minutes and woke
+    up 3 times, it would report a value of 9.
+
+    Warning: this histogram was expired from 2020-08-02 to 2024-04-12; data may
+    be missing.
+  </summary>
+</histogram>
+
 <histogram name="Power.DimEvent{PowerSource}" enum="PowerDimEvent"
     expires_after="2025-03-01">
   <owner>mqg@chromium.org</owner>
@@ -1641,6 +1689,51 @@
   </summary>
 </histogram>
 
+<histogram name="Power.PowerSupplyMaxPower" units="W"
+    expires_after="2025-04-10">
+  <owner>bleung@chromium.org</owner>
+  <owner>puthik@chromium.org</owner>
+  <owner>chromeos-platform-power@google.com</owner>
+  <summary>
+    The maximum power supported by the connected power supply on Chrome OS. A
+    sample is reported every time that the power manager polls sysfs (typically
+    every 30 seconds) and sees a connected supply.
+
+    Warning: this histogram was expired from 2022-04-18 to 2024-04-12; data may
+    be missing.
+  </summary>
+</histogram>
+
+<histogram name="Power.PowerSupplyMaxVoltage" units="V"
+    expires_after="2025-04-10">
+  <owner>bleung@chromium.org</owner>
+  <owner>puthik@chromium.org</owner>
+  <owner>chromeos-platform-power@google.com</owner>
+  <summary>
+    The maximum voltage supported by the connected power supply on Chrome OS. A
+    sample is reported every time that the power manager polls sysfs (typically
+    every 30 seconds) and sees a connected supply.
+
+    Warning: this histogram was expired from 2022-04-18 to 2024-04-12; data may
+    be missing.
+  </summary>
+</histogram>
+
+<histogram name="Power.PowerSupplyType" enum="PowerSupplyType"
+    expires_after="2025-04-10">
+  <owner>bleung@chromium.org</owner>
+  <owner>puthik@chromium.org</owner>
+  <owner>chromeos-platform-power@google.com</owner>
+  <summary>
+    The type of the connected power supply on Chrome OS. A sample is reported
+    every time that the power manager polls sysfs (typically every 30 seconds)
+    and sees a connected supply.
+
+    Warning: this histogram was expired from 2022-04-11 to 2024-04-12; data may
+    be missing.
+  </summary>
+</histogram>
+
 <histogram name="Power.ShutdownReason" enum="ShutdownReason"
     expires_after="2024-09-29">
   <owner>tbroch@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/privacy/histograms.xml b/tools/metrics/histograms/metadata/privacy/histograms.xml
index 1131843..2cfd46d 100644
--- a/tools/metrics/histograms/metadata/privacy/histograms.xml
+++ b/tools/metrics/histograms/metadata/privacy/histograms.xml
@@ -386,7 +386,7 @@
 </histogram>
 
 <histogram name="Privacy.DIPS.DIPSErrorCodes" enum="DIPSErrorCode"
-    expires_after="2024-08-25">
+    expires_after="2024-10-28">
   <owner>wanderview@chromium.org</owner>
   <owner>src/chrome/browser/dips/OWNERS</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/quota/histograms.xml b/tools/metrics/histograms/metadata/quota/histograms.xml
index 59e0400..e53e16a 100644
--- a/tools/metrics/histograms/metadata/quota/histograms.xml
+++ b/tools/metrics/histograms/metadata/quota/histograms.xml
@@ -375,7 +375,7 @@
 </histogram>
 
 <histogram name="Quota.TotalDiskSpaceIsZero" enum="BooleanVolumeZero"
-    expires_after="2024-07-21">
+    expires_after="2024-10-28">
   <owner>ayui@chromium.org</owner>
   <owner>chrome-owp-storage@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/renderer/histograms.xml b/tools/metrics/histograms/metadata/renderer/histograms.xml
index c7489ef..30d35e71 100644
--- a/tools/metrics/histograms/metadata/renderer/histograms.xml
+++ b/tools/metrics/histograms/metadata/renderer/histograms.xml
@@ -56,7 +56,7 @@
 
 <histogram
     name="Renderer.Core.Timing.Performance.SwapsPerPerformanceEntryInsertion"
-    units="swaps" expires_after="2024-08-25">
+    units="swaps" expires_after="2024-10-28">
   <owner>iclelland@chromium.org</owner>
   <owner>speed-metrics-dev@chromium.org</owner>
   <summary>
@@ -481,7 +481,7 @@
 </histogram>
 
 <histogram name="Renderer.PaintPreview.Capture.MainFrameSuccess"
-    enum="BooleanSuccess" expires_after="2024-08-11">
+    enum="BooleanSuccess" expires_after="2024-10-28">
   <owner>ckitagawa@chromium.org</owner>
   <owner>fredmello@chromium.org</owner>
   <owner>chrome-fdt@google.com</owner>
@@ -491,7 +491,7 @@
 </histogram>
 
 <histogram name="Renderer.PaintPreview.Capture.SubframeBlinkCaptureDuration"
-    units="ms" expires_after="2024-08-11">
+    units="ms" expires_after="2024-10-28">
   <owner>ckitagawa@chromium.org</owner>
   <owner>fredmello@chromium.org</owner>
   <owner>chrome-fdt@google.com</owner>
@@ -502,7 +502,7 @@
 </histogram>
 
 <histogram name="Renderer.PaintPreview.Capture.SubframeSuccess"
-    enum="BooleanSuccess" expires_after="2024-08-11">
+    enum="BooleanSuccess" expires_after="2024-10-28">
   <owner>ckitagawa@chromium.org</owner>
   <owner>fredmello@chromium.org</owner>
   <owner>chrome-fdt@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/safe_browsing/histograms.xml b/tools/metrics/histograms/metadata/safe_browsing/histograms.xml
index d3ba45a..591b4602 100644
--- a/tools/metrics/histograms/metadata/safe_browsing/histograms.xml
+++ b/tools/metrics/histograms/metadata/safe_browsing/histograms.xml
@@ -585,7 +585,7 @@
 </histogram>
 
 <histogram name="SafeBrowsing.ClientSafeBrowsingReport.RequestHasToken"
-    enum="BooleanSent" expires_after="2024-08-25">
+    enum="BooleanSent" expires_after="2024-10-28">
   <owner>thefrog@chromium.org</owner>
   <owner>chrome-counter-abuse-alerts@google.com</owner>
   <summary>
@@ -620,7 +620,7 @@
 
 <histogram
     name="SafeBrowsing.Daily.BypassCountLast28Days.{UserState}.AllEvents"
-    units="events" expires_after="2024-08-25">
+    units="events" expires_after="2024-10-28">
   <owner>xinghuilu@chromium.org</owner>
   <owner>chrome-counter-abuse-alerts@google.com</owner>
   <summary>
@@ -2029,8 +2029,11 @@
 </histogram>
 
 <histogram name="SafeBrowsing.Pref.MainProfile.SafeBrowsingState"
-    enum="SafeBrowsingState" expires_after="2024-04-28">
+    enum="SafeBrowsingState" expires_after="never">
+<!-- expires-never: required for Safe Browsing State filter on UMA -->
+
   <owner>jeffcyr@google.com</owner>
+  <owner>drubery@chromium.org</owner>
   <owner>chrome-counter-abuse-alerts@google.com</owner>
   <summary>
     The current Safe Browsing state of the main profile. Recorded for all uma
@@ -2941,7 +2944,7 @@
 </histogram>
 
 <histogram name="SafeBrowsing.V4ProcessFullUpdate.AdditionsHashesCount2"
-    units="entries" expires_after="2024-08-25">
+    units="entries" expires_after="2024-10-28">
   <owner>xinghuilu@chromium.org</owner>
   <owner>chrome-counter-abuse-alerts@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/sb_client/histograms.xml b/tools/metrics/histograms/metadata/sb_client/histograms.xml
index fb662da3..93185288 100644
--- a/tools/metrics/histograms/metadata/sb_client/histograms.xml
+++ b/tools/metrics/histograms/metadata/sb_client/histograms.xml
@@ -174,7 +174,7 @@
 </histogram>
 
 <histogram name="SBClientDownload.DownloadRequestDuration.{Analysis}"
-    units="ms" expires_after="2024-08-25">
+    units="ms" expires_after="2024-10-27">
   <owner>drubery@chromium.org</owner>
   <owner>chrome-counter-abuse-alerts@google.com</owner>
   <summary>
@@ -745,7 +745,7 @@
   </summary>
 </histogram>
 
-<histogram name="SBClientPhishing.PhishingDetectionDuration.{RequestType}"
+<histogram name="SBClientPhishing.PhishingDetectionDuration{RequestType}"
     units="ms" expires_after="2024-09-22">
   <owner>drubery@chromium.org</owner>
   <owner>chrome-counter-abuse-alerts@google.com</owner>
@@ -754,30 +754,18 @@
     by {RequestType} to finish.
   </summary>
   <token key="RequestType">
-    <variant name="ForceRequest" summary="Force request"/>
-    <variant name="KeyboardLockRequested" summary="Keyboard lock requested"/>
-    <variant name="NotificationPermissionPrompt"
+    <variant name="" summary="all request types"/>
+    <variant name=".ForceRequest" summary="Force request"/>
+    <variant name=".KeyboardLockRequested" summary="Keyboard lock requested"/>
+    <variant name=".NotificationPermissionPrompt"
         summary="Notification permission prompt"/>
-    <variant name="PointerLockRequested" summary="Pointer lock requested"/>
-    <variant name="TriggerModel" summary="Trigger model"/>
-    <variant name="Unknown" summary="Unknown"/>
+    <variant name=".PointerLockRequested" summary="Pointer lock requested"/>
+    <variant name=".TriggerModel" summary="Trigger model"/>
+    <variant name=".Unknown" summary="Unknown"/>
   </token>
 </histogram>
 
-<histogram name="SBClientPhishing.PhishingDetectorResult"
-    enum="ClientSidePhishingResult" expires_after="2024-09-01">
-  <owner>drubery@chromium.org</owner>
-  <owner>chrome-counter-abuse-alerts@google.com</owner>
-  <summary>
-    The result enum received from the renderer-side classifier. This is recorded
-    after every renderer classification (roughly every page load not on the
-    allowlist).
-
-    This metric is used to populate a dashboard on go/crsb-site.
-  </summary>
-</histogram>
-
-<histogram name="SBClientPhishing.PhishingDetectorResult.{RequestType}"
+<histogram name="SBClientPhishing.PhishingDetectorResult{RequestType}"
     enum="ClientSidePhishingResult" expires_after="2025-02-14">
   <owner>andysjlim@chromium.org</owner>
   <owner>chrome-counter-abuse-alerts@google.com</owner>
@@ -790,13 +778,14 @@
     This metric is used to populate a dashboard on go/crsb-site.
   </summary>
   <token key="RequestType">
-    <variant name="ForceRequest" summary="Force request"/>
-    <variant name="KeyboardLockRequested" summary="Keyboard lock requested"/>
-    <variant name="NotificationPermissionPrompt"
+    <variant name="" summary="all request types"/>
+    <variant name=".ForceRequest" summary="Force request"/>
+    <variant name=".KeyboardLockRequested" summary="Keyboard lock requested"/>
+    <variant name=".NotificationPermissionPrompt"
         summary="Notification permission prompt"/>
-    <variant name="PointerLockRequested" summary="Pointer lock requested"/>
-    <variant name="TriggerModel" summary="Trigger model"/>
-    <variant name="Unknown" summary="Unknown"/>
+    <variant name=".PointerLockRequested" summary="Pointer lock requested"/>
+    <variant name=".TriggerModel" summary="Trigger model"/>
+    <variant name=".Unknown" summary="Unknown"/>
   </token>
 </histogram>
 
diff --git a/tools/metrics/histograms/metadata/search/histograms.xml b/tools/metrics/histograms/metadata/search/histograms.xml
index 4cebc916..b73087e 100644
--- a/tools/metrics/histograms/metadata/search/histograms.xml
+++ b/tools/metrics/histograms/metadata/search/histograms.xml
@@ -74,7 +74,7 @@
 </histogram>
 
 <histogram name="Search.AuxiliarySearch.DonateTime" units="ms"
-    expires_after="M130">
+    expires_after="2024-10-28">
   <owner>gangwu@chromium.org</owner>
   <owner>chrome-mobile-search@google.com</owner>
   <summary>Time taken for donating contents to the auxiliary search.</summary>
@@ -92,7 +92,7 @@
 </histogram>
 
 <histogram name="Search.AuxiliarySearch.DonationRequestStatus"
-    enum="AuxiliarySearchRequestStatus" expires_after="M130">
+    enum="AuxiliarySearchRequestStatus" expires_after="2024-10-28">
   <owner>gangwu@chromium.org</owner>
   <owner>chrome-mobile-search@google.com</owner>
   <summary>
@@ -103,7 +103,7 @@
 </histogram>
 
 <histogram name="Search.AuxiliarySearch.DonationSent{AuxiliarySearchDataType}"
-    units="count" expires_after="M130">
+    units="count" expires_after="2024-10-28">
   <owner>gangwu@chromium.org</owner>
   <owner>chrome-mobile-search@google.com</owner>
   <summary>
@@ -113,7 +113,7 @@
 </histogram>
 
 <histogram name="Search.AuxiliarySearch.QueryTime{AuxiliarySearchDataType}"
-    units="ms" expires_after="M130">
+    units="ms" expires_after="2024-10-28">
   <owner>gangwu@chromium.org</owner>
   <owner>chrome-mobile-search@google.com</owner>
   <summary>Time taken for query contents for the auxiliary search.</summary>
@@ -229,7 +229,7 @@
 </histogram>
 
 <histogram name="Search.ChoiceScreenShowedEngineAt.CountryMismatch"
-    enum="BooleanSkipped" expires_after="2024-08-04">
+    enum="BooleanSkipped" expires_after="2024-10-28">
   <owner>dgn@chromium.org</owner>
   <owner>chrome-waffle-eng@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/security/histograms.xml b/tools/metrics/histograms/metadata/security/histograms.xml
index ecf88551..3d81e82c 100644
--- a/tools/metrics/histograms/metadata/security/histograms.xml
+++ b/tools/metrics/histograms/metadata/security/histograms.xml
@@ -460,7 +460,7 @@
 </histogram>
 
 <histogram name="Security.PrivateNetworkAccess.CheckResult"
-    enum="PrivateNetworkAccessCheckResult" expires_after="2024-06-24">
+    enum="PrivateNetworkAccessCheckResult" expires_after="2024-10-28">
   <owner>titouan@chromium.org</owner>
   <owner>clamy@chromium.org</owner>
   <owner>mkwst@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/service/histograms.xml b/tools/metrics/histograms/metadata/service/histograms.xml
index df77a78..0a53ec9 100644
--- a/tools/metrics/histograms/metadata/service/histograms.xml
+++ b/tools/metrics/histograms/metadata/service/histograms.xml
@@ -1064,7 +1064,7 @@
 
 <histogram
     name="ServiceWorker.LoadTopLevelScript.{ResultStatus}.{WhetherAlreadyInstalledOrNot}.Time"
-    units="ms" expires_after="2024-06-01">
+    units="ms" expires_after="2024-10-01">
   <owner>chikamune@chromium.org</owner>
   <owner>chrome-worker@google.com</owner>
   <summary>
@@ -1087,7 +1087,7 @@
 </histogram>
 
 <histogram name="ServiceWorker.MainFrame.MainResource.FetchResult"
-    enum="ServiceWorkerFetchEventResult" expires_after="2024-09-01">
+    enum="ServiceWorkerFetchEventResult" expires_after="2024-10-01">
   <owner>yyanagisawa@chromium.org</owner>
   <owner>chrome-worker@google.com</owner>
   <summary>
@@ -1270,6 +1270,19 @@
   </summary>
 </histogram>
 
+<histogram name="ServiceWorker.RouterEvaluator.ConditionDepth" units="count"
+    expires_after="2024-10-01">
+  <owner>yyanagisawa@chromium.org</owner>
+  <owner>chrome-worker@google.com</owner>
+  <summary>
+    Tha max depth of the conditions in rules registered with the ServiceWorker
+    Static Routing API.
+
+    Recorded when the service worker, which has associated routing info, is
+    activated.
+  </summary>
+</histogram>
+
 <histogram name="ServiceWorker.RouterEvaluator.Error"
     enum="ServiceWorkerRouterEvaluatorErrorEnums" expires_after="2024-10-01">
   <owner>yyanagisawa@chromium.org</owner>
@@ -1300,20 +1313,33 @@
   <owner>sisidovski@chromium.org</owner>
   <owner>chrome-worker@google.com</owner>
   <summary>
-    The result of the router evaluation of the Static Routing API. This
-    indicates which source type is used to get the resource. This will be
+    The result of the router evaluation of the ServiceWorker Static Routing API.
+    This indicates which source type is used to get the resource. This will be
     recorded only when the router has matched the incoming resource.
   </summary>
 </histogram>
 
+<histogram name="ServiceWorker.RouterEvaluator.OrConditionWidth" units="count"
+    expires_after="2024-10-01">
+  <owner>yyanagisawa@chromium.org</owner>
+  <owner>chrome-worker@google.com</owner>
+  <summary>
+    Tha max width of the &quot;or&quot; conditions in rules registered with the
+    ServiceWorker Static Routing API.
+
+    Recorded when the service worker, which has associated routing info, is
+    activated.
+  </summary>
+</histogram>
+
 <histogram name="ServiceWorker.RouterEvaluator.RuleCount" units="count"
     expires_after="2024-10-01">
   <owner>sisidovski@chromium.org</owner>
   <owner>chrome-worker@google.com</owner>
   <summary>
-    The sum of registered router rules with the Static Routing API. Recorded
-    when the service worker, which has associated routing info, is activated.
-    This was broken from 2024-02-07 to 2024-04-07.
+    The sum of registered router rules with the ServiceWorker Static Routing
+    API. Recorded when the service worker, which has associated routing info, is
+    activated. This was broken from 2024-02-07 to 2024-04-07.
   </summary>
 </histogram>
 
@@ -1439,7 +1465,7 @@
 </histogram>
 
 <histogram name="ServiceWorker.StartTiming.StartToReceivedStartWorker"
-    units="ms" expires_after="2024-06-01">
+    units="ms" expires_after="2024-10-01">
   <owner>chikamune@chromium.org</owner>
   <owner>chrome-worker@google.com</owner>
   <summary>
@@ -1489,7 +1515,7 @@
 </histogram>
 
 <histogram name="ServiceWorker.StartWorker.Purpose"
-    enum="ServiceWorkerMetrics.EventType" expires_after="2024-09-01">
+    enum="ServiceWorkerMetrics.EventType" expires_after="2024-10-01">
   <owner>yyanagisawa@chromium.org</owner>
   <owner>chrome-worker@google.com</owner>
   <summary>
@@ -1526,7 +1552,7 @@
 </histogram>
 
 <histogram name="ServiceWorker.StartWorker.Time" units="ms"
-    expires_after="2024-09-01">
+    expires_after="2024-10-01">
   <owner>yyanagisawa@chromium.org</owner>
   <owner>chikamune@chromium.org</owner>
   <owner>chrome-worker@google.com</owner>
@@ -1610,7 +1636,7 @@
 </histogram>
 
 <histogram name="ServiceWorker.Storage.PurgeResourceResult"
-    enum="NetErrorCodes" expires_after="2024-06-01">
+    enum="NetErrorCodes" expires_after="2024-10-01">
   <owner>chikamune@chromium.org</owner>
   <owner>chrome-worker@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/settings/enums.xml b/tools/metrics/histograms/metadata/settings/enums.xml
index 428026c..2891714b 100644
--- a/tools/metrics/histograms/metadata/settings/enums.xml
+++ b/tools/metrics/histograms/metadata/settings/enums.xml
@@ -413,6 +413,7 @@
   <int value="29" label="kMediaStorageIdSalt"/>
   <int value="30" label="kModuleBlocklistCacheMD5Digest"/>
   <int value="32" label="kMediaCdmOriginData"/>
+  <int value="33" label="kGoogleServicesLastSignedInUsername"/>
 </enum>
 
 </enums>
diff --git a/tools/metrics/histograms/metadata/settings/histograms.xml b/tools/metrics/histograms/metadata/settings/histograms.xml
index aabecfae..a429156 100644
--- a/tools/metrics/histograms/metadata/settings/histograms.xml
+++ b/tools/metrics/histograms/metadata/settings/histograms.xml
@@ -127,7 +127,7 @@
 </histogram>
 
 <histogram name="Settings.GivenShowHomeButton_HomePageIsNewTabPage2"
-    enum="Boolean" expires_after="2024-06-30">
+    enum="Boolean" expires_after="2024-10-28">
   <owner>mpearson@chromium.org</owner>
   <owner>twellington@chromium.org</owner>
   <summary>
@@ -317,7 +317,7 @@
 </histogram>
 
 <histogram name="Settings.PrivacySandbox.ConsentCheckIsMismatched"
-    enum="Boolean" expires_after="2024-08-28">
+    enum="Boolean" expires_after="2024-10-28">
   <owner>boujane@google.com</owner>
   <owner>koilos@google.com</owner>
   <summary>
@@ -376,7 +376,7 @@
 </histogram>
 
 <histogram name="Settings.PrivacySandbox.NoticeCheckIsMismatched"
-    enum="Boolean" expires_after="2024-08-28">
+    enum="Boolean" expires_after="2024-10-28">
   <owner>boujane@google.com</owner>
   <owner>koilos@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/signin/histograms.xml b/tools/metrics/histograms/metadata/signin/histograms.xml
index a42792a2..8d4e8d5 100644
--- a/tools/metrics/histograms/metadata/signin/histograms.xml
+++ b/tools/metrics/histograms/metadata/signin/histograms.xml
@@ -1006,39 +1006,6 @@
   </token>
 </histogram>
 
-<histogram name="Signin.Intercept.ChromeSignin.AttemptsBeforeAccept"
-    units="attempts" expires_after="2024-08-18">
-  <owner>rsult@google.com</owner>
-  <owner>chrome-signin-team@google.com</owner>
-  <summary>
-    Records the number of times the user declines the Chrome Signin Intercept
-    Bubble before accepting it. The value is recorded when the user accepts the
-    Chrome Signin intercept bubble.
-
-    This histogram is only recorded for the experiment phase, where `UnoDesktop`
-    flag is enabled and where the user could potentially accept/decline the
-    bubble multiple times. The gathered data from the experiment is used to
-    better understand user behavior.
-
-    The behavior for the non experimental implementation records the value in
-    `Signin.Intercept.ChromeSignin.DismissesBeforeAccept` where it records a
-    more accurate value based on the difference in implementation.
-  </summary>
-</histogram>
-
-<histogram name="Signin.Intercept.ChromeSignin.BubbleShownCount"
-    units="shown_count" expires_after="2024-08-18">
-  <owner>rsult@google.com</owner>
-  <owner>chrome-signin-team@google.com</owner>
-  <summary>
-    Records the number of times the Chrome Signin Bubble for a specific account
-    was shown to the user. The value is recorded every time the bubble is shown.
-    The number of impressions is incremented independently for each Google
-    Account the user signs in with, up to the maximum allowed number. Each
-    Chrome profile tracks these numbers separately.
-  </summary>
-</histogram>
-
 <histogram name="Signin.Intercept.ChromeSignin.DismissesBefore{Action}"
     units="attempts" expires_after="2024-08-18">
   <owner>rsult@google.com</owner>
@@ -1759,7 +1726,7 @@
 </histogram>
 
 <histogram name="Signin.SSOAuth.GetIdentities.ErrorCode" enum="ErrSecOSStatus"
-    expires_after="2024-06-30">
+    expires_after="2024-10-28">
   <owner>jlebel@chromium.org</owner>
   <owner>chrome-signin-team@google.com</owner>
   <summary>
@@ -1769,7 +1736,7 @@
 </histogram>
 
 <histogram base="true" name="Signin.SSOIdentityListRequest.CacheState"
-    enum="SigninSSOIdentityListRequestCacheState" expires_after="2024-08-04">
+    enum="SigninSSOIdentityListRequestCacheState" expires_after="2024-10-28">
 <!-- Name completed by histogram_suffixes name="SigninSSOIdentityListRequestCacheRequestState" -->
 
   <owner>jlebel@chromium.org</owner>
@@ -1782,7 +1749,7 @@
 </histogram>
 
 <histogram base="true" name="Signin.SSOIdentityListRequest.Duration" units="ms"
-    expires_after="2024-08-04">
+    expires_after="2024-10-28">
 <!-- Name completed by histogram_suffixes name="SigninSSOIdentityListRequestDurationCacheState" -->
 
   <owner>jlebel@chromium.org</owner>
@@ -1867,7 +1834,7 @@
 </histogram>
 
 <histogram name="Signin.SyncDisabledNotificationShown" enum="SigninAccessPoint"
-    expires_after="2024-08-22">
+    expires_after="2024-10-28">
   <owner>birnie@google.com</owner>
   <owner>bsazonov@chromium.org</owner>
   <owner>chrome-signin-team@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/stability/histograms.xml b/tools/metrics/histograms/metadata/stability/histograms.xml
index 839f230..10c4fab7b 100644
--- a/tools/metrics/histograms/metadata/stability/histograms.xml
+++ b/tools/metrics/histograms/metadata/stability/histograms.xml
@@ -480,7 +480,7 @@
 </histogram>
 
 <histogram name="Stability.iOS.UTE.OSVersion" enum="VersionComparison"
-    expires_after="2024-05-01">
+    expires_after="2025-05-01">
   <owner>michaeldo@chromium.org</owner>
   <owner>olivierrobin@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/startup/histograms.xml b/tools/metrics/histograms/metadata/startup/histograms.xml
index 0843839..d1c4c9b 100644
--- a/tools/metrics/histograms/metadata/startup/histograms.xml
+++ b/tools/metrics/histograms/metadata/startup/histograms.xml
@@ -320,7 +320,7 @@
 </histogram>
 
 <histogram name="Startup.Android.Experimental.{name}.Tabbed.{suffix}"
-    units="ms" expires_after="2024-08-25">
+    units="ms" expires_after="2024-10-28">
   <owner>pasko@chromium.org</owner>
   <owner>mthiesse@chromium.org</owner>
   <owner>yfriedman@chromium.org</owner>
@@ -897,7 +897,7 @@
 </histogram>
 
 <histogram name="Startup.LoadTime.RecordedProcessCreation" enum="Boolean"
-    expires_after="2024-08-25">
+    expires_after="2024-10-28">
   <owner>spvw@chromium.org</owner>
   <owner>fdoray@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/sync/enums.xml b/tools/metrics/histograms/metadata/sync/enums.xml
index c077002..9a89440 100644
--- a/tools/metrics/histograms/metadata/sync/enums.xml
+++ b/tools/metrics/histograms/metadata/sync/enums.xml
@@ -62,6 +62,8 @@
   <int value="43509" label="Error: LEAK_CHECK_SERVICE_RESOURCE_EXHAUSTED"/>
 </enum>
 
+<!-- LINT.IfChange(BookmarkGUIDSource) -->
+
 <enum name="BookmarkGUIDSource">
   <summary>
     Whether a GUID came from BookmarkSpecifics, or, in case it was missing,
@@ -76,6 +78,10 @@
       label="GUID cannot be inferred (possibly update with client tag)"/>
 </enum>
 
+<!-- LINT.ThenChange(/components/sync/engine/bookmark_update_preprocessing.cc:BookmarkGUIDSource) -->
+
+<!-- LINT.IfChange(BookmarksGUIDDuplicates) -->
+
 <enum name="BookmarksGUIDDuplicates">
   <int value="0" label="Matching urls"/>
   <int value="1" label="Matching folders"/>
@@ -84,11 +90,15 @@
   <int value="4" label="Different types"/>
 </enum>
 
+<!-- LINT.ThenChange(/components/sync_bookmarks/bookmark_model_merger.cc:BookmarksGUIDDuplicates) -->
+
 <enum name="BooleanIsSignedIn">
   <int value="0" label="Not signed in"/>
   <int value="1" label="Signed in"/>
 </enum>
 
+<!-- LINT.IfChange(CrossUserSharingDecryptionResult) -->
+
 <enum name="CrossUserSharingDecryptionResult">
   <int value="0" label="Succeeded"/>
   <int value="1" label="Invitation missing required fields"/>
@@ -96,6 +106,10 @@
   <int value="3" label="Failed to parse decrypted invitation"/>
 </enum>
 
+<!-- LINT.ThenChange(/components/sync/engine/model_type_worker.cc:CrossUserSharingDecryptionResult) -->
+
+<!-- LINT.IfChange(CrossUserSharingKeyPairState) -->
+
 <enum name="CrossUserSharingKeyPairState">
   <int value="0" label="Key pair valid"/>
   <int value="1" label="Public key not initialized"/>
@@ -104,12 +118,20 @@
   <int value="4" label="Pending keys are non-empty"/>
 </enum>
 
+<!-- LINT.ThenChange(/components/sync/nigori/nigori_state.cc:CrossUserSharingKeyPairState) -->
+
+<!-- LINT.IfChange(FaviconAvailabilityStatus) -->
+
 <enum name="FaviconAvailabilityStatus">
   <int value="0" label="Favicon available locally"/>
   <int value="1" label="(obsolete) Favicon available via sync"/>
   <int value="2" label="Favicon not available"/>
 </enum>
 
+<!-- LINT.ThenChange(/components/favicon/core/history_ui_favicon_request_handler_impl.h:FaviconAvailabilityStatus) -->
+
+<!-- LINT.IfChange(InvalidBookmarkSpecificsError) -->
+
 <enum name="InvalidBookmarkSpecificsError">
   <int value="0" label="Empty specifics"/>
   <int value="1" label="Invalid URL"/>
@@ -122,12 +144,34 @@
   <int value="8" label="Banned GUID"/>
 </enum>
 
+<!-- LINT.ThenChange(/components/sync_bookmarks/bookmark_specifics_conversions.cc:InvalidBookmarkSpecificsError) -->
+
+<!-- LINT.IfChange(OutgoingPasswordSharingInvitationCommitError) -->
+
 <enum name="OutgoingPasswordSharingInvitationCommitError">
   <int value="0" label="Unknown error"/>
   <int value="1" label="Public Key verions mismatch"/>
   <int value="2" label="Not a family member"/>
 </enum>
 
+<!-- LINT.ThenChange(/components/sync/protocol/password_sharing_invitation_specifics.proto:OutgoingPasswordSharingInvitationCommitError) -->
+
+<!-- LINT.IfChange(PassphraseTypeForMetrics) -->
+
+<enum name="PassphraseTypeForMetrics">
+  <int value="0" label="Unknown"/>
+  <int value="1" label="Inconsistent state across profiles"/>
+  <int value="2" label="Implicit passphrase"/>
+  <int value="3" label="Keystore passphrase"/>
+  <int value="4" label="Frozen implicit passphrase"/>
+  <int value="5" label="Custom passphrase"/>
+  <int value="6" label="Trusted vault passphrase"/>
+</enum>
+
+<!-- LINT.ThenChange(/components/sync/service/passphrase_type_metrics_provider.h:PassphraseTypeForMetrics) -->
+
+<!-- LINT.IfChange(PendingInvalidationStatus) -->
+
 <enum name="PendingInvalidationStatus">
   <int value="0" label="Acknowledged invalidation"/>
   <int value="1" label="Lost invalidation"/>
@@ -138,6 +182,10 @@
   <int value="6" label="ModelType is not connected"/>
 </enum>
 
+<!-- LINT.ThenChange(/components/sync/engine/model_type_worker.h:PendingInvalidationStatus) -->
+
+<!-- LINT.IfChange(RemoteBookmarkUpdateError) -->
+
 <enum name="RemoteBookmarkUpdateError">
   <int value="0"
       label="Remote and local bookmarks types don't match (URL vs. Folder)"/>
@@ -166,6 +214,10 @@
              (deprecated)"/>
 </enum>
 
+<!-- LINT.ThenChange(/components/sync_bookmarks/bookmark_model_merger.cc:RemoteBookmarkUpdateError) -->
+
+<!-- LINT.IfChange(SyncablePref) -->
+
 <enum name="SyncablePref">
   <int value="0" label="(test) SyncablePrefForTesting"/>
   <int value="1" label="AutofillCreditCardEnabled"/>
@@ -546,6 +598,7 @@
   <int value="100276" label="ShowForwardButton"/>
   <int value="100277" label="AccessibilityMagnifierFollowsSts"/>
   <int value="100278" label="AccessibilityReadAnythingLanguagesEnabled"/>
+  <int value="100279" label="KeyboardDefaultSplitModifierSettings"/>
   <int value="200000" label="ArticlesForYouEnabled"/>
   <int value="200001" label="ContextualSearchEnabled_IOS"/>
   <int value="200002" label="DefaultCharset_IOS"/>
@@ -559,6 +612,12 @@
   <int value="200010" label="VoiceSearchLocale"/>
 </enum>
 
+<!-- LINT.ThenChange(/components/sync_preferences/common_syncable_prefs_database.cc:SyncablePref)-->
+
+<!-- TODO(crbug.com/249297195): Check common_, chrome_ OR ios_ file above. -->
+
+<!-- LINT.IfChange(SyncBookmarkModelMetadataCorruptionReason) -->
+
 <enum name="SyncBookmarkModelMetadataCorruptionReason">
   <int value="0" label="No corruption"/>
   <int value="1" label="Entity missing server id"/>
@@ -576,6 +635,10 @@
   <int value="13" label="Entity missing favicon hash"/>
 </enum>
 
+<!-- LINT.ThenChange(/components/sync_bookmarks/synced_bookmark_tracker.h:SyncBookmarkModelMetadataCorruptionReason) -->
+
+<!-- LINT.IfChange(SyncClientToServerMessageContents) -->
+
 <enum name="SyncClientToServerMessageContents">
   <summary>
     Type of a network message sent from the client to the sync server.
@@ -587,6 +650,8 @@
   <int value="5" label="CLEAR_SERVER_DATA"/>
 </enum>
 
+<!-- LINT.ThenChange(/components/sync/protocol/sync.proto:SyncClientToServerMessageContents) -->
+
 <enum name="SyncCryptographerPendingKeysState">
   <int value="0" label="Does not have pending keys"/>
   <int value="1" label="Has pending keys"/>
@@ -597,6 +662,8 @@
   <int value="1" label="Ready"/>
 </enum>
 
+<!-- LINT.IfChange(SyncCustomPassphraseKeyDerivationMethodState) -->
+
 <enum name="SyncCustomPassphraseKeyDerivationMethodState">
   <int value="0" label="Not set"/>
   <int value="1" label="Unsupported method"/>
@@ -604,6 +671,10 @@
   <int value="3" label="SCRYPT_8192_8_11"/>
 </enum>
 
+<!-- LINT.ThenChange(/components/sync/nigori/nigori_sync_bridge_impl.cc:SyncCustomPassphraseKeyDerivationMethodState) -->
+
+<!-- LINT.IfChange(SyncEntityChange) -->
+
 <enum name="SyncEntityChange">
   <summary>
     Type of change of a sync entity. Recorded once for every sync entity
@@ -617,6 +688,10 @@
   <int value="5" label="Remote initial update (updated downstream)"/>
 </enum>
 
+<!-- LINT.ThenChange(/components/sync/engine/cycle/entity_change_metric_recording.h:SyncEntityChange) -->
+
+<!-- LINT.IfChange(SyncerErrorValues) -->
+
 <enum name="SyncerErrorValues">
   <int value="0" label="UNSET"/>
   <int value="1" label="(deprecated) CANNOT_DO_WORK"/>
@@ -643,6 +718,10 @@
   <int value="22" label="SYNCER_OK"/>
 </enum>
 
+<!-- LINT.ThenChange(/components/sync/engine/syncer.h:SyncerErrorValues) -->
+
+<!-- LINT.IfChange(SyncErrorInfobarTypes) -->
+
 <enum name="SyncErrorInfobarTypes">
   <summary>Possible errors that can trigger a sync error infobar.</summary>
   <int value="1" label="Sign in needs update"/>
@@ -654,6 +733,10 @@
   <int value="7" label="Sync trusted vault recoverability degraded"/>
 </enum>
 
+<!-- LINT.ThenChange(/ios/chrome/browser/settings/model/sync/utils/sync_util.mm:SyncErrorInfobarTypes) -->
+
+<!-- LINT.IfChange(SyncErrorType) -->
+
 <enum name="SyncErrorType">
   <summary>Possible errors that can be returned by the sync server.</summary>
   <int value="1" label="(Obsolete) DEPRECATED_ACCESS_DENIED"/>
@@ -676,20 +759,33 @@
     of this.
   </int>
   <int value="13" label="CLIENT_DATA_OBSOLETE"/>
+  <int value="14" label="ENCRYPTION_OBSOLETE"/>
   <int value="100" label="UNKNOWN"/>
 </enum>
 
+<!-- LINT.ThenChange(/ios/chrome/browser/settings/model/sync/utils/sync_util.mm:SyncErrorType) -->
+
+<!-- LINT.IfChange(SyncErrorUiAction) -->
+
 <enum name="SyncErrorUiAction">
   <int value="0" label="Shown"/>
   <int value="1" label="Dismissed"/>
   <int value="2" label="Button clicked"/>
 </enum>
 
+<!-- LINT.ThenChange(/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SyncSettingsUtils.java:SyncErrorUiAction) -->
+
+<!-- LINT.IfChange(SyncFeatureOrTransport) -->
+
 <enum name="SyncFeatureOrTransport">
   <int value="0" label="Full Sync feature."/>
   <int value="1" label="Sync transport only."/>
 </enum>
 
+<!-- LINT.ThenChange(/components/sync/service/sync_service_impl.cc:SyncFeatureOrTransport) -->
+
+<!-- LINT.IfChange(SyncFeatureStatusForSyncToSigninMigration) -->
+
 <enum name="SyncFeatureStatusForSyncToSigninMigration">
   <int value="0" label="Undefined"/>
   <int value="1" label="Disabled or paused"/>
@@ -697,6 +793,10 @@
   <int value="3" label="Active"/>
 </enum>
 
+<!-- LINT.ThenChange(/components/sync/service/sync_feature_status_for_migrations_recorder.h:SyncFeatureStatusForSyncToSigninMigration) -->
+
+<!-- LINT.IfChange(SyncGetUpdatesOrigin) -->
+
 <enum name="SyncGetUpdatesOrigin">
   <summary>
     Equivalent to proto SyncEnums.GetUpdatesOrigin: represents a reason for a
@@ -713,6 +813,10 @@
   <int value="14" label="PROGRAMMATIC"/>
 </enum>
 
+<!-- LINT.ThenChange(/components/sync/protocol/sync_enums.proto:SyncGetUpdatesOrigin) -->
+
+<!-- LINT.IfChange(SyncHistoryDatabaseError) -->
+
 <enum name="SyncHistoryDatabaseError">
   <int value="0"
       label="Error in MergeFullSyncData() or ApplyIncrementalSyncChanges():
@@ -734,6 +838,10 @@
   <int value="7" label="Error in GetAllData(): reading metadata"/>
 </enum>
 
+<!-- LINT.ThenChange(/components/history/core/browser/sync/history_sync_bridge.cc:SyncHistoryDatabaseError) -->
+
+<!-- LINT.IfChange(SyncHistorySpecificsError) -->
+
 <enum name="SyncHistorySpecificsError">
   <int value="0"
       label="Missing required fields (visit time, originator cache GUID, or
@@ -743,6 +851,10 @@
   <int value="3" label="Unwanted URL (e.g. file: or chrome:)"/>
 </enum>
 
+<!-- LINT.ThenChange(/components/history/core/browser/sync/history_sync_bridge.cc:SyncHistorySpecificsError) -->
+
+<!-- LINT.IfChange(SyncIncomingInvalidationStatus) -->
+
 <enum name="SyncIncomingInvalidationStatus">
   <summary>Possible outcomes of handling incoming sync invalidations.</summary>
   <int value="0" label="Success"/>
@@ -750,6 +862,10 @@
   <int value="2" label="Contains only unknown data types"/>
 </enum>
 
+<!-- LINT.ThenChange(/components/sync/service/glue/sync_engine_backend.h:SyncIncomingInvalidationStatus) -->
+
+<!-- LINT.IfChange(SyncInitialState) -->
+
 <enum name="SyncInitialState">
   <int value="0" label="Sync-the-feature can start"/>
   <int value="1" label="No signed in user"/>
@@ -767,11 +883,15 @@
       label="Disallowed by the platform (obsolete, was never recorded)"/>
 </enum>
 
+<!-- LINT.ThenChange(/components/sync/service/sync_service_impl.cc:SyncInitialState) -->
+
 <enum name="SyncKeystoreDecryptionFailure">
   <int value="0" label="No keystore key"/>
   <int value="1" label="Unknown reason"/>
 </enum>
 
+<!-- LINT.IfChange(SyncModelTypeErrorSite) -->
+
 <enum name="SyncModelTypeErrorSite">
   <int value="0" label="ReportError() called by the bridge"/>
   <int value="1" label="Error returned when applying full updates"/>
@@ -783,6 +903,10 @@
              SupportsIncrementalUpdates()"/>
 </enum>
 
+<!-- LINT.ThenChange(/components/sync/model/client_tag_based_model_type_processor.h:SyncModelTypeErrorSite) -->
+
+<!-- LINT.IfChange(SyncModelTypes) -->
+
 <enum name="SyncModelTypes">
   <int value="0" label="Unspecified"/>
   <int value="1"
@@ -853,8 +977,13 @@
   <int value="64" label="Collaboration Groups"/>
   <int value="65" label="Plus Address"/>
   <int value="66" label="Compare"/>
+  <int value="67" label="Cookies"/>
 </enum>
 
+<!-- LINT.ThenChange(/components/sync/base/model_type.h:SyncModelTypes) -->
+
+<!-- LINT.IfChange(SyncPassphraseType) -->
+
 <enum name="SyncPassphraseType">
   <int value="0" label="IMPLICIT_PASSPHRASE"/>
   <int value="1" label="KEYSTORE_PASSPHRASE"/>
@@ -863,15 +992,9 @@
   <int value="4" label="TRUSTED_VAULT_PASSPHRASE"/>
 </enum>
 
-<enum name="SyncPassphraseType2">
-  <int value="0" label="No active syncing profiles"/>
-  <int value="1" label="Inconsistent state across profiles"/>
-  <int value="2" label="Implicit passphrase"/>
-  <int value="3" label="Keystore passphrase"/>
-  <int value="4" label="Frozen implicit passphrase"/>
-  <int value="5" label="Custom passphrase"/>
-  <int value="6" label="Trusted vault passphrase"/>
-</enum>
+<!-- LINT.ThenChange(/components/sync/base/passphrase_enums.h:SyncPassphraseType) -->
+
+<!-- LINT.IfChange(SyncPasswordNotesStateInUpdate) -->
 
 <enum name="SyncPasswordNotesStateInUpdate">
   <int value="0"
@@ -883,12 +1006,20 @@
       label="Notes field is set only in the backup but not decryptable"/>
 </enum>
 
+<!-- LINT.ThenChange(/components/sync/engine/model_type_worker.h:SyncPasswordNotesStateInUpdate) -->
+
+<!-- LINT.IfChange(SyncPlaceholderTabResyncResult) -->
+
 <enum name="SyncPlaceholderTabResyncResult">
   <int value="0" label="PLACEHOLDER_TAB_FOUND"/>
   <int value="1" label="PLACEHOLDER_TAB_RESYNCED"/>
   <int value="2" label="PLACEHOLDER_TAB_NOT_SYNCED"/>
 </enum>
 
+<!-- LINT.ThenChange(/components/sync_sessions/local_session_event_handler_impl.cc:SyncPlaceholderTabResyncResult) -->
+
+<!-- LINT.IfChange(SyncResetEngineReason) -->
+
 <enum name="SyncResetEngineReason">
   <int value="0" label="Shutdown"/>
   <int value="1" label="Unrecoverable error"/>
@@ -901,6 +1032,10 @@
   <int value="7" label="Reset local Sync data"/>
 </enum>
 
+<!-- LINT.ThenChange(/components/sync/service/sync_service_impl.h:SyncResetEngineReason) -->
+
+<!-- LINT.IfChange(SyncSharingMessageCommitErrorCode) -->
+
 <enum name="SyncSharingMessageCommitErrorCode">
   <int value="0" label="Ok"/>
   <int value="1" label="Invalid argument"/>
@@ -918,6 +1053,10 @@
   <int value="13" label="Sync auth error"/>
 </enum>
 
+<!-- LINT.ThenChange(/components/sync/protocol/sharing_message_specifics.proto:SyncSharingMessageCommitErrorCode) -->
+
+<!-- LINT.IfChange(SyncStopSource) -->
+
 <enum name="SyncStopSource">
   <int value="0"
       label="(Obsolete) Profile destruction. Supposedly meant that Sync was
@@ -934,12 +1073,20 @@
       label="(Obsolete) Android main sync setting. Removed on 01/2022."/>
 </enum>
 
+<!-- LINT.ThenChange(/components/sync/base/stop_source.h:SyncStopSource) -->
+
+<!-- LINT.IfChange(SyncToSigninMigrationDataTypeDecision) -->
+
 <enum name="SyncToSigninMigrationDataTypeDecision">
   <int value="0" label="Migrate"/>
   <int value="1" label="Don't migrate, data type disabled"/>
   <int value="2" label="Don't migrate, data type not active"/>
 </enum>
 
+<!-- LINT.ThenChange(/components/browser_sync/sync_to_signin_migration.h:SyncToSigninMigrationDataTypeDecision) -->
+
+<!-- LINT.IfChange(SyncToSigninMigrationDecisionOverall) -->
+
 <enum name="SyncToSigninMigrationDecisionOverall">
   <int value="0" label="Migrate"/>
   <int value="1" label="Don't migrate, not signed in"/>
@@ -951,6 +1098,10 @@
   <int value="7" label="Don't undo: already completed or not necessary"/>
 </enum>
 
+<!-- LINT.ThenChange(/components/browser_sync/sync_to_signin_migration.cc:SyncToSigninMigrationDecisionOverall) -->
+
+<!-- LINT.IfChange(SyncToSigninMigrationReadingListStep) -->
+
 <enum name="SyncToSigninMigrationReadingListStep">
   <summary>
     A step in the ReadingList migration process, within the wider Sync-to-Signin
@@ -962,6 +1113,10 @@
   <int value="3" label="Migration finished successfully"/>
 </enum>
 
+<!-- LINT.ThenChange(/components/sync/base/data_type_histogram.h:SyncToSigninMigrationReadingListStep) -->
+
+<!-- LINT.IfChange(SyncUserEventType) -->
+
 <enum name="SyncUserEventType">
   <int value="0" label="Unknown"/>
   <int value="1" label="TestEvent"/>
@@ -970,12 +1125,20 @@
   <int value="4" label="FlocIdComputedEvent"/>
 </enum>
 
+<!-- LINT.ThenChange(/components/sync_user_events/user_event_service_impl.cc:SyncUserEventType) -->
+
+<!-- LINT.IfChange(TrustedVaultDegradedRecoverabilityValue) -->
+
 <enum name="TrustedVaultDegradedRecoverabilityValue">
   <int value="0" label="Unknown"/>
   <int value="1" label="Not degraded"/>
   <int value="2" label="Degraded"/>
 </enum>
 
+<!-- LINT.ThenChange(/components/trusted_vault/proto/local_trusted_vault.proto:TrustedVaultDegradedRecoverabilityValue) -->
+
+<!-- LINT.IfChange(TrustedVaultDeviceRegistrationOutcome) -->
+
 <enum name="TrustedVaultDeviceRegistrationOutcome">
   <int value="0" label="Success"/>
   <int value="1" label="Already registered"/>
@@ -987,6 +1150,10 @@
   <int value="7" label="Other error"/>
 </enum>
 
+<!-- LINT.ThenChange(/components/trusted_vault/trusted_vault_histograms.h:TrustedVaultDeviceRegistrationOutcome) -->
+
+<!-- LINT.IfChange(TrustedVaultDeviceRegistrationState) -->
+
 <enum name="TrustedVaultDeviceRegistrationState">
   <int value="0" label="Already registered V0"/>
   <int value="1" label="Local keys are stale"/>
@@ -999,6 +1166,10 @@
   <int value="6" label="Already registered V1"/>
 </enum>
 
+<!-- LINT.ThenChange(/components/trusted_vault/trusted_vault_histograms.h:TrustedVaultDeviceRegistrationState) -->
+
+<!-- LINT.IfChange(TrustedVaultDownloadKeysStatus) -->
+
 <enum name="TrustedVaultDownloadKeysStatus">
   <int value="0" label="Success"/>
   <int value="1" label="Member not found or corrupted (deprecated)"/>
@@ -1018,11 +1189,19 @@
   <int value="15" label="Network error"/>
 </enum>
 
+<!-- LINT.ThenChange(/components/trusted_vault/trusted_vault_histograms.h:TrustedVaultDownloadKeysStatus) -->
+
+<!-- LINT.IfChange(TrustedVaultFetchKeysAttempt) -->
+
 <enum name="TrustedVaultFetchKeysAttempt">
   <int value="0" label="First attempt"/>
   <int value="1" label="Second attempt"/>
 </enum>
 
+<!-- LINT.ThenChange(/components/sync/service/sync_service_crypto.cc:TrustedVaultFetchKeysAttempt) -->
+
+<!-- LINT.IfChange(TrustedVaultFileReadStatus) -->
+
 <enum name="TrustedVaultFileReadStatus">
   <int value="0" label="Success"/>
   <int value="1" label="File not found"/>
@@ -1032,17 +1211,29 @@
   <int value="5" label="Data proto deserialization failed"/>
 </enum>
 
+<!-- LINT.ThenChange(/components/trusted_vault/trusted_vault_histograms.h:TrustedVaultFileReadStatus) -->
+
+<!-- LINT.IfChange(TrustedVaultHintDegradedRecoverabilityChangedReason) -->
+
 <enum name="TrustedVaultHintDegradedRecoverabilityChangedReason">
   <int value="0" label="Recovery method added"/>
   <int value="1" label="Persistent auth error resolved"/>
 </enum>
 
+<!-- LINT.ThenChange(/components/trusted_vault/trusted_vault_histograms.h:TrustedVaultHintDegradedRecoverabilityChangedReason) -->
+
+<!-- LINT.IfChange(TrustedVaultRecoverabilityStatus) -->
+
 <enum name="TrustedVaultRecoverabilityStatus">
   <int value="0" label="Not degraded"/>
   <int value="1" label="Degraded"/>
   <int value="2" label="Error"/>
 </enum>
 
+<!-- LINT.ThenChange(/components/trusted_vault/trusted_vault_connection.h:TrustedVaultRecoverabilityStatus) -->
+
+<!-- LINT.IfChange(TrustedVaultUserActionTrigger) -->
+
 <enum name="TrustedVaultUserActionTrigger">
   <int value="0" label="Settings page"/>
   <int value="1" label="Profile menu"/>
@@ -1051,6 +1242,15 @@
   <int value="4" label="Password Manager Error Message"/>
 </enum>
 
+<!-- LINT.ThenChange(/components/sync/service/sync_service_utils.h:TrustedVaultRecoverabilityStatus) -->
+
+<!-- TODO(crbug.com/336793181): `git cl format` deletes the ThenChange above
+     unless this enum is here. Fix the issue and delete this fake enum.  -->
+
+<enum name="ZZZZZZ">
+  <int value="0" label="Z"/>
+</enum>
+
 </enums>
 
 </histogram-configuration>
diff --git a/tools/metrics/histograms/metadata/sync/histograms.xml b/tools/metrics/histograms/metadata/sync/histograms.xml
index e0fb87e..02de046f 100644
--- a/tools/metrics/histograms/metadata/sync/histograms.xml
+++ b/tools/metrics/histograms/metadata/sync/histograms.xml
@@ -56,6 +56,7 @@
   <variant name=".COLLABORATION_GROUP" summary="COLLABORATION_GROUP"/>
   <variant name=".COMPARE" summary="COMPARE"/>
   <variant name=".CONTACT_INFO" summary="CONTACT_INFO"/>
+  <variant name=".COOKIE" summary="COOKIE"/>
   <variant name=".DEVICE_INFO" summary="DEVICE_INFO"/>
   <variant name=".DICTIONARY" summary="DICTIONARY"/>
   <variant name=".EXTENSION" summary="EXTENSION"/>
@@ -922,7 +923,7 @@
 </histogram>
 
 <histogram name="Sync.ModelTypeCount4{SyncModelType}" units="entries"
-    expires_after="2024-08-25">
+    expires_after="2024-10-27">
   <owner>rushans@google.com</owner>
   <owner>mastiz@chromium.org</owner>
   <summary>
@@ -934,7 +935,7 @@
 </histogram>
 
 <histogram name="Sync.ModelTypeEntityChange3{SyncModelType}"
-    enum="SyncEntityChange" expires_after="2024-08-25">
+    enum="SyncEntityChange" expires_after="2024-10-27">
   <owner>treib@chromium.org</owner>
   <owner>rushans@google.com</owner>
   <summary>
@@ -1074,7 +1075,7 @@
 </histogram>
 
 <histogram name="Sync.ModelTypeUpdateDrop.{Reason}" enum="SyncModelTypes"
-    expires_after="2024-08-25">
+    expires_after="2024-10-28">
   <owner>treib@chromium.org</owner>
   <owner>rushans@google.com</owner>
   <summary>
@@ -1138,7 +1139,7 @@
 
 <histogram
     name="Sync.NonReflectionUpdateFreshnessPossiblySkewed2{SyncModelType}"
-    units="ms" expires_after="2024-08-25">
+    units="ms" expires_after="2024-10-27">
   <owner>mastiz@chromium.org</owner>
   <owner>treib@chromium.org</owner>
   <summary>
@@ -1176,13 +1177,32 @@
   <summary>The active sync passphrase type at sync startup.</summary>
 </histogram>
 
-<histogram name="Sync.PassphraseType2" enum="SyncPassphraseType2"
+<histogram name="Sync.PassphraseType2" enum="PassphraseTypeForMetrics"
+    expires_after="2025-04-30">
+  <owner>mmoskvitin@google.com</owner>
+  <owner>mastiz@chromium.org</owner>
+  <summary>
+    TODO(crbug.com/338027160): Remove this histogram once the new
+    PassphraseType3 reaches the stable channel. That one relies on a pref that
+    caches the passphrase type and thus can record the correct value before sync
+    engine initialization.
+
+    Sync passphrase type collected at each metrics upload. Also used for the
+    &quot;Sync passphrase type&quot; filter in the dashboard.
+  </summary>
+</histogram>
+
+<histogram name="Sync.PassphraseType3" enum="PassphraseTypeForMetrics"
     expires_after="never">
 <!-- expires-never: important for UMA filtering. -->
 
-  <owner>mmoskvitin@google.com</owner>
-  <owner>mastiz@chromium.org</owner>
-  <summary>Sync passphrase type collected at each metrics upload.</summary>
+  <owner>victorvianna@google.com</owner>
+  <owner>src/components/sync/OWNERS</owner>
+  <summary>
+    Sync passphrase type collected at each metrics upload. The implementation
+    relies on the kSyncCachedPassphraseType pref, and thus can record the
+    correct value before sync engine initialization.
+  </summary>
 </histogram>
 
 <histogram name="Sync.PassphraseTypeUponNotMyBirthdayOrEncryptionObsolete"
diff --git a/tools/metrics/histograms/metadata/tab/histograms.xml b/tools/metrics/histograms/metadata/tab/histograms.xml
index 8b8114a..baf9b01c7 100644
--- a/tools/metrics/histograms/metadata/tab/histograms.xml
+++ b/tools/metrics/histograms/metadata/tab/histograms.xml
@@ -462,7 +462,7 @@
 </histogram>
 
 <histogram name="Tab.RendererTermination.AliveRenderersCount" units="renderers"
-    expires_after="2024-08-04">
+    expires_after="2024-10-28">
   <owner>ajuma@chromium.org</owner>
   <owner>bling-fundamentals@google.com</owner>
   <summary>
@@ -1040,6 +1040,19 @@
   </summary>
 </histogram>
 
+<histogram name="Tabs.AutoOpenSyncedTabGroupsSwitch.ToggledToState"
+    enum="Boolean" expires_after="2024-10-30">
+  <owner>ckitagawa@chromium.org</owner>
+  <owner>clank-tab-dev@google.com</owner>
+  <summary>
+    Records when a user toggles the settings entry for automatically opening
+    synced tab groups on Android. The default state is enabled and is not
+    recorded. This histogram tracks the new state of the toggle and is emitted
+    each time it is changed. True corresponds to enabled and false corresponds
+    to disabled.
+  </summary>
+</histogram>
+
 <histogram name="Tabs.CountAtResume" units="tabs" expires_after="2024-09-22">
   <owner>marq@chromium.org</owner>
   <owner>olivierrobin@chromium.org</owner>
@@ -1269,7 +1282,7 @@
 </histogram>
 
 <histogram name="Tabs.PageLoad.TimeSinceActive2" units="ms"
-    expires_after="2024-07-07">
+    expires_after="2024-10-28">
   <owner>emshack@chromium.org</owner>
   <owner>chrome-desktop-ui-sea@google.com</owner>
   <summary>
@@ -1525,7 +1538,7 @@
 </histogram>
 
 <histogram name="Tabs.RecentlyClosed.HistoricalSaverCloseType"
-    enum="HistoricalSaverCloseType" expires_after="2024-08-05">
+    enum="HistoricalSaverCloseType" expires_after="2024-10-28">
   <owner>ckitagawa@chromium.org</owner>
   <owner>fredmello@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/uma/histograms.xml b/tools/metrics/histograms/metadata/uma/histograms.xml
index 6cf1914..4838d90 100644
--- a/tools/metrics/histograms/metadata/uma/histograms.xml
+++ b/tools/metrics/histograms/metadata/uma/histograms.xml
@@ -330,7 +330,7 @@
 </histogram>
 
 <histogram name="UMA.InitialStabilityRecordBeacon" enum="Boolean"
-    expires_after="2024-08-22">
+    expires_after="2024-10-28">
   <owner>mpearson@chromium.org</owner>
   <owner>src/base/metrics/OWNERS</owner>
   <summary>
@@ -827,7 +827,7 @@
 </histogram>
 
 <histogram name="UMA.StartupVisibility" enum="StartupVisibility"
-    expires_after="2024-08-25">
+    expires_after="2024-10-28">
   <owner>caitlinfischer@google.com</owner>
   <owner>src/base/metrics/OWNERS</owner>
   <summary>
@@ -957,7 +957,7 @@
 </histogram>
 
 <histogram name="UMA.TruncatedEvents.UserAction" units="events"
-    expires_after="2024-10-20">
+    expires_after="2024-10-28">
   <owner>rkaplow@chromium.org</owner>
   <owner>src/base/metrics/OWNERS</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/update_engine/histograms.xml b/tools/metrics/histograms/metadata/update_engine/histograms.xml
index 8ddb86cd..bb9a3e5 100644
--- a/tools/metrics/histograms/metadata/update_engine/histograms.xml
+++ b/tools/metrics/histograms/metadata/update_engine/histograms.xml
@@ -299,7 +299,7 @@
 </histogram>
 
 <histogram name="UpdateEngine.Check.RollbackTargetVersion"
-    enum="UpdateEngineChromeOsVersionPrefix" expires_after="2024-08-11">
+    enum="UpdateEngineChromeOsVersionPrefix" expires_after="2024-10-28">
   <owner>mpolzer@google.com</owner>
   <owner>crisguerrero@chromium.org</owner>
   <owner>chromeos-commercial-remote-management@google.com</owner>
@@ -568,7 +568,7 @@
 </histogram>
 
 <histogram name="UpdateEngine.Rollback.Result" enum="BooleanSuccess"
-    expires_after="2024-08-25">
+    expires_after="2024-10-28">
   <owner>kimjae@chromium.org</owner>
   <owner>chromeos-core-services@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/v8/histograms.xml b/tools/metrics/histograms/metadata/v8/histograms.xml
index 189b5b51..5a69964 100644
--- a/tools/metrics/histograms/metadata/v8/histograms.xml
+++ b/tools/metrics/histograms/metadata/v8/histograms.xml
@@ -57,7 +57,7 @@
 </histogram>
 
 <histogram name="V8.CFIPageSizeMismatch" enum="BooleanOccurred"
-    expires_after="2024-06-01">
+    expires_after="2025-06-01">
   <owner>sroettger@google.com</owner>
   <owner>v8-security@google.com</owner>
   <summary>
@@ -2056,7 +2056,7 @@
 </histogram>
 
 <histogram name="V8.WasmModuleNumberOfCodeGCsTriggered" units="gcs"
-    expires_after="2024-08-25">
+    expires_after="2024-10-27">
   <owner>ecmziegler@chromium.org</owner>
   <owner>adamk@chromium.org</owner>
   <owner>clemensb@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/web_rtc/histograms.xml b/tools/metrics/histograms/metadata/web_rtc/histograms.xml
index fd1751a3..c017484a 100644
--- a/tools/metrics/histograms/metadata/web_rtc/histograms.xml
+++ b/tools/metrics/histograms/metadata/web_rtc/histograms.xml
@@ -695,7 +695,7 @@
 </histogram>
 
 <histogram name="WebRTC.AudioInputChannelLayout" enum="ChannelLayout"
-    expires_after="2024-07-25">
+    expires_after="2024-10-28">
   <owner>saza@chromium.org</owner>
   <owner>olka@chromium.org</owner>
   <owner>webrtc-audio-uma@google.com</owner>
@@ -1831,7 +1831,7 @@
 </histogram>
 
 <histogram name="WebRTC.Video.CaptureTimeToReferenceTimePlus250.Ms" units="ms"
-    expires_after="2024-08-22">
+    expires_after="2024-10-28">
   <owner>handellm@google.com</owner>
   <owner>webrtc-video@google.com</owner>
   <summary>
@@ -1842,7 +1842,7 @@
 </histogram>
 
 <histogram name="WebRTC.Video.CaptureTimeToTimestampAlignerPlus250.Ms"
-    units="ms" expires_after="2024-08-22">
+    units="ms" expires_after="2024-10-28">
   <owner>handellm@google.com</owner>
   <owner>webrtc-video@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/webapps/histograms.xml b/tools/metrics/histograms/metadata/webapps/histograms.xml
index d075265..fe587af 100644
--- a/tools/metrics/histograms/metadata/webapps/histograms.xml
+++ b/tools/metrics/histograms/metadata/webapps/histograms.xml
@@ -327,6 +327,16 @@
   </summary>
 </histogram>
 
+<histogram name="Webapp.ApplySyncDataToApp.ManifestIdMatch"
+    enum="BooleanSuccess" expires_after="2025-04-29">
+  <owner>glenrob@chromium.org</owner>
+  <owner>desktop-pwas-team@google.com</owner>
+  <summary>
+    Recorded when incoming sync data is applied to an app, whether the resolved
+    manifest ID's path matches the manifest ID path stored in the sync proto.
+  </summary>
+</histogram>
+
 <histogram name="WebApp.AppSettingsPage.EntryPoints"
     enum="AppSettingsPageEntryPoints" expires_after="2023-08-08">
   <owner>phillis@chromium.org</owner>
@@ -362,6 +372,16 @@
   </summary>
 </histogram>
 
+<histogram name="Webapp.CreateWebApp.ManifestIdMatch" enum="BooleanSuccess"
+    expires_after="2025-04-29">
+  <owner>glenrob@chromium.org</owner>
+  <owner>desktop-pwas-team@google.com</owner>
+  <summary>
+    Recorded at web app database read time for each app, whether the resolved
+    manifest ID's path matches the manifest ID path stored in the sync proto.
+  </summary>
+</histogram>
+
 <histogram name="WebApp.Database.WriteResult" enum="BooleanSuccess"
     expires_after="never">
 <!-- expires-never: The dPWA team uses this from time to time to look into success rates for database writes for web apps. desktop-pwas-team@ -->
@@ -1048,6 +1068,18 @@
   </summary>
 </histogram>
 
+<histogram name="WebApp.MLInstallPromo.UserResponse"
+    enum="WebAppMlInstallResponse" expires_after="2025-04-25">
+  <owner>dibyapal@chromium.org</owner>
+  <owner>desktop-pwa-team@google.com</owner>
+  <summary>
+    Similar to WebApp.MlInstall.DialogResponse, but measures the user response
+    only if ML triggered the install dialog for PWAs. This is a subset of the
+    information that will be sent to the Segmentation system for training, and
+    is useful in understanding the exact outputs of the ML model.
+  </summary>
+</histogram>
+
 <histogram name="WebApp.NewCraftedAppInstalled.ByUser" enum="BooleanSuccess"
     expires_after="2025-03-21">
   <owner>dibyapal@chromium.org</owner>
@@ -1539,7 +1571,7 @@
 </histogram>
 
 <histogram name="Webapp.Update.ManifestUpdateResult"
-    enum="WebAppManifestUpdateResult" expires_after="2024-08-27">
+    enum="WebAppManifestUpdateResult" expires_after="2024-10-28">
   <owner>alancutter@chromium.org</owner>
   <owner>desktop-pwas-team@google.com</owner>
   <summary>
diff --git a/tools/metrics/metrics_python_tests.py b/tools/metrics/metrics_python_tests.py
index 3d9d531..ca171ac0 100755
--- a/tools/metrics/metrics_python_tests.py
+++ b/tools/metrics/metrics_python_tests.py
@@ -25,7 +25,7 @@
         tests=resolve(
             'actions/extract_actions_test.py',
 
-            # TODO(crbug.com/1220251) - the test ordering is very sensitive due
+            # TODO(crbug.com/40772738) - the test ordering is very sensitive due
             # to potential name collisions between ukm/pretty_print.py and
             # histograms/pretty_print.py and the implementation in typ.
             #
diff --git a/tools/metrics/structured/codegen.py b/tools/metrics/structured/codegen.py
index bf387cf9..412ebaa 100644
--- a/tools/metrics/structured/codegen.py
+++ b/tools/metrics/structured/codegen.py
@@ -51,7 +51,7 @@
     """
     event_name = Util.sanitize_name(event_name)
     project_name = Util.sanitize_name(project_name)
-    # TODO(crbug.com/1148168): Once the minimum python version is 3.6+, rewrite
+    # TODO(crbug.com/40156926): Once the minimum python version is 3.6+, rewrite
     # this .format and others using f-strings.
     return Util.hash_name('{}::{}::{}'.format(platform, project_name,
                                               event_name))
diff --git a/tools/metrics/structured/codegen_unittest.py b/tools/metrics/structured/codegen_unittest.py
index cb00dc5..4ca8b35 100755
--- a/tools/metrics/structured/codegen_unittest.py
+++ b/tools/metrics/structured/codegen_unittest.py
@@ -6,7 +6,7 @@
 """Tests for codegen.py.
 """
 
-# TODO(crbug.com/1148168): Set up these tests to run on the tryjobs.
+# TODO(crbug.com/40156926): Set up these tests to run on the tryjobs.
 
 import unittest
 from codegen import Util
diff --git a/tools/metrics/structured/sync/model.py b/tools/metrics/structured/sync/model.py
index adaec57..27aeb189 100644
--- a/tools/metrics/structured/sync/model.py
+++ b/tools/metrics/structured/sync/model.py
@@ -22,13 +22,6 @@
 # Default scope if not explicitly specified in the XML.
 DEFAULT_PROJECT_SCOPE = "device"
 
-# Project name for event sequencing.
-#
-# This project name should be consistent with the name in structured.xml as well
-# as the server.
-EVENT_SEQUENCE_PROJECT_NAME = "CrOSEvents"
-
-
 def wrap(text: str, indent: str) -> str:
   wrapper = tw.TextWrapper(width=80,
                            initial_indent=indent,
@@ -341,13 +334,13 @@
     if self.type == "int-array":
       self.max_size = int(util.get_attr(elem, "max", Model.MAX_REGEX))
 
-    if self.type == "raw-string" and (project.id != "none" and project.name
-                                      != EVENT_SEQUENCE_PROJECT_NAME):
+    if self.type == "raw-string" and (project.id != "none" and
+                                      not project.is_event_sequence_project):
       util.error(
           elem,
           "raw-string metrics must be in a project with id type "
-          f"'none' or project name '{EVENT_SEQUENCE_PROJECT_NAME}',"
-          f" but {project.name} has id type '{project.id}'",
+          f"'none' or sequenced project, but {project.name} has "
+          f"id type '{project.id}'",
       )
 
   def is_array(self) -> bool:
diff --git a/tools/metrics/structured/sync/model_unittest.py b/tools/metrics/structured/sync/model_unittest.py
index 8516aa43..9f003472 100755
--- a/tools/metrics/structured/sync/model_unittest.py
+++ b/tools/metrics/structured/sync/model_unittest.py
@@ -5,7 +5,7 @@
 # found in the LICENSE file.
 """Tests for model.py."""
 
-# TODO(crbug.com/1148168): Set up these tests to run on the tryjobs.
+# TODO(crbug.com/40156926): Set up these tests to run on the tryjobs.
 
 import sync.model as model
 import unittest
diff --git a/tools/metrics/structured/sync/structured.xml b/tools/metrics/structured/sync/structured.xml
index d2842401..9b587588 100644
--- a/tools/metrics/structured/sync/structured.xml
+++ b/tools/metrics/structured/sync/structured.xml
@@ -997,7 +997,179 @@
   <summary>
     Project used to record a sequence of events that are related to each other.
   </summary>
+  <enum name="CameraAppLaunchType">
+    <variant value="0">DEFAULT</variant>
+    <variant value="1">ASSISTANT</variant>
+  </enum>
 
+  <enum name="CameraAppMode">
+    <variant value="0">PHOTO</variant>
+    <variant value="1">VIDEO</variant>
+    <variant value="2">SCAN</variant>
+    <variant value="3">PORTRAIT</variant>
+  </enum>
+
+  <enum name="CameraAppFacing">
+    <variant value="0">ENVIRONMENT</variant>
+    <variant value="1">USER</variant>
+    <variant value="2">EXTERNAL</variant>
+    <variant value="3">UNKNOWN</variant>
+  </enum>
+
+  <enum name="CameraAppGridType">
+    <variant value="0">NONE</variant>
+    <variant value="1">THREE_BY_THREE</variant>
+    <variant value="2">FOUR_BY_FOUR</variant>
+    <variant value="3">GOLDEN</variant>
+  </enum>
+
+  <enum name="CameraAppTimerType">
+    <variant value="0">NONE</variant>
+    <variant value="1">THREE_SECONDS</variant>
+    <variant value="2">TEN_SECONDS</variant>
+  </enum>
+
+  <enum name="CameraAppShutterType">
+    <variant value="0">UNKNOWN</variant>
+    <variant value="1">ASSISTANT</variant>
+    <variant value="2">KEYBOARD</variant>
+    <variant value="3">MOUSE</variant>
+    <variant value="4">TOUCH</variant>
+    <variant value="5">VOLUME_KEY</variant>
+  </enum>
+
+  <enum name="CameraAppAndroidIntentResultType">
+    <variant value="0">NON_INTENT</variant>
+    <variant value="1">CONFIRMED</variant>
+    <variant value="2">CANCELED</variant>
+  </enum>
+
+  <enum name="CameraAppResolutionLevel">
+    <variant value="0">UNKNOWN</variant>
+    <variant value="1">FOUR_K</variant>
+    <variant value="2">QUAD_HD</variant>
+    <variant value="3">FULL_HD</variant>
+    <variant value="4">HD</variant>
+    <variant value="5">THREE_HUNDRED_THIRTY_P</variant>
+    <variant value="6">FULL</variant>
+    <variant value="7">MEDIUM</variant>
+  </enum>
+
+  <enum name="CameraAppAspectRatioSet">
+    <variant value="0">OTHERS</variant>
+    <variant value="1">FOUR_TO_THREE</variant>
+    <variant value="2">SIXTEEN_TO_NINE</variant>
+    <variant value="3">SQUARE</variant>
+  </enum>
+
+  <enum name="CameraAppRecordType">
+    <variant value="0">NOT_RECORDING</variant>
+    <variant value="1">NORMAL</variant>
+    <variant value="2">GIF</variant>
+    <variant value="3">TIMELAPSE</variant>
+  </enum>
+
+  <enum name="CameraAppGifResultType">
+    <variant value="0">NOT_GIF</variant>
+    <variant value="1">RETAKE</variant>
+    <variant value="2">SHARE</variant>
+    <variant value="3">SAVE</variant>
+  </enum>
+
+  <enum name="CameraAppDocScanActionType">
+    <variant value="0">ADD_PAGE</variant>
+    <variant value="1">DELETE_PAGE</variant>
+    <variant value="2">FIX</variant>
+  </enum>
+
+  <enum name="CameraAppDocScanResultType">
+    <variant value="0">CANCEL</variant>
+    <variant value="1">SAVE_AS_PDF</variant>
+    <variant value="2">SAVE_AS_PHOTO</variant>
+    <variant value="3">SHARE</variant>
+  </enum>
+
+  <enum name="CameraAppLowStorageActionType">
+    <variant value="0">MANAGE_STORAGE_AUTO_STOP</variant>
+    <variant value="1">MANAGE_STORAGE_CANNOT_START</variant>
+    <variant value="2">SHOW_AUTO_STOP_DIALOG</variant>
+    <variant value="3">SHOW_CANNOT_START_DIALOG</variant>
+    <variant value="4">SHOW_WARNING_MESSAGE</variant>
+  </enum>
+
+  <enum name="CameraAppBarcodeContentType">
+    <variant value="0">TEXT</variant>
+    <variant value="1">URL</variant>
+    <variant value="2">WIFI</variant>
+  </enum>
+
+  <enum name="CameraAppWifiSecurityType">
+    <variant value="0">NONE</variant>
+    <variant value="1">EAP</variant>
+    <variant value="2">WEP</variant>
+    <variant value="3">WPA</variant>
+  </enum>
+
+  <enum name="CameraAppPerfEventType">
+    <variant value="0">CAMERA_SWITCHING</variant>
+    <variant value="1">GIF_CAPTURE_POST_PROCESSING</variant>
+    <variant value="2">LAUNCHING_FROM_LAUNCH_APP_COLD</variant>
+    <variant value="3">LAUNCHING_FROM_LAUNCH_APP_WARM</variant>
+    <variant value="4">LAUNCHING_FROM_WINDOW_CREATION</variant>
+    <variant value="5">MODE_SWITCHING</variant>
+    <variant value="6">PHOTO_CAPTURE_POST_PROCESSING</variant>
+    <variant value="7">PHOTO_CAPTURE_SHUTTER</variant>
+    <variant value="8">PHOTO_TAKING</variant>
+    <variant value="9">PORTRAIT_MODE_CAPTURE_POST_PROCESSING</variant>
+    <variant value="10">TIMELAPSE_CAPTURE_POST_PROCESSING</variant>
+    <variant value="11">VIDEO_CAPTURE_POST_PROCESSING</variant>
+  </enum>
+
+  <enum name="CampaignButtonId">
+    <variant value="0">PRIMARY</variant>
+    <variant value="1">SECONDARY</variant>
+  </enum>
+
+  <enum name="QuickStartAbortFlowReason">
+    <variant value="0">USER_CLICKED_BACK</variant>
+    <variant value="1">USER_CLICKED_CANCEL</variant>
+    <variant value="2">SIGNIN_SCHOOL</variant>
+    <variant value="3">ENTERPRISE_ENROLLMENT</variant>
+    <variant value="4">QS_ERROR</variant>
+    <variant value="5">ADD_CHILD</variant>
+  </enum>
+
+  <enum name="QuickStartEntryPoint">
+    <variant value="0">WELCOME_SCREEN</variant>
+    <variant value="1">NETWORK_SCREEN</variant>
+    <variant value="2">GAIA_INFO_SCREEN</variant>
+    <variant value="3">GAIA_SCREEN</variant>
+  </enum>
+
+  <enum name="QuickStartScreenName">
+    <variant value="0">OTHER</variant>
+    <variant value="1">NONE</variant>
+    <variant value="2">WELCOME_SCREEN</variant>
+    <variant value="3">NETWORK_SCREEN</variant>
+    <variant value="4">GAIA_SCREEN</variant>
+    <variant value="5">QS_SETUP_WITH_ANDROID_PHONE</variant>
+    <variant value="6">QS_CONNECTING_TO_WIFI</variant>
+    <variant value="7">CHECKING_FOR_UPDATE_AND_DETERMINING_DEVICE_CONFIG</variant>
+    <variant value="8">CHOOSE_CHROMEBOOK_SETUP</variant>
+    <variant value="9">CONSUMER_UPDATE</variant>
+    <variant value="10">QS_RESUMING_CONNECTION_AFTER_UPDATE</variant>
+    <variant value="11">QS_GETTING_GOOGLE_ACCOUNT_INFO</variant>
+    <variant value="12">QS_COMPLETE</variant>
+    <variant value="13">SETUP_DEVICE_PIN</variant>
+    <variant value="14">ADD_CHILD</variant>
+    <variant value="15">REVIEW_PRIVACY_AND_TERMS</variant>
+    <variant value="16">UNIFIED_SETUP</variant>
+    <variant value="17">GAIA_INFO_SCREEN</variant>
+    <variant value="18">QS_WIFI_CREDENTIALS_RECEIVED</variant>
+    <variant value="19">QS_SELECT_GOOGLE_ACCOUNT</variant>
+    <variant value="20">QS_CREATING_ACCOUNT</variant>
+    <variant value="21">QS_FALLBACK_URL</variant>
+  </enum>
   <event name="AppDiscovery.AppInstalled">
     <summary>
       Recorded whenever a new app is installed on Chrome OS.
@@ -1183,134 +1355,6 @@
     </metric>
   </event>
 
-  <enum name="CameraAppLaunchType">
-    <variant value="0">DEFAULT</variant>
-    <variant value="1">ASSISTANT</variant>
-  </enum>
-
-  <enum name="CameraAppMode">
-    <variant value="0">PHOTO</variant>
-    <variant value="1">VIDEO</variant>
-    <variant value="2">SCAN</variant>
-    <variant value="3">PORTRAIT</variant>
-  </enum>
-
-  <enum name="CameraAppFacing">
-    <variant value="0">ENVIRONMENT</variant>
-    <variant value="1">USER</variant>
-    <variant value="2">EXTERNAL</variant>
-    <variant value="3">UNKNOWN</variant>
-  </enum>
-
-  <enum name="CameraAppGridType">
-    <variant value="0">NONE</variant>
-    <variant value="1">THREE_BY_THREE</variant>
-    <variant value="2">FOUR_BY_FOUR</variant>
-    <variant value="3">GOLDEN</variant>
-  </enum>
-
-  <enum name="CameraAppTimerType">
-    <variant value="0">NONE</variant>
-    <variant value="1">THREE_SECONDS</variant>
-    <variant value="2">TEN_SECONDS</variant>
-  </enum>
-
-  <enum name="CameraAppShutterType">
-    <variant value="0">UNKNOWN</variant>
-    <variant value="1">ASSISTANT</variant>
-    <variant value="2">KEYBOARD</variant>
-    <variant value="3">MOUSE</variant>
-    <variant value="4">TOUCH</variant>
-    <variant value="5">VOLUME_KEY</variant>
-  </enum>
-
-  <enum name="CameraAppAndroidIntentResultType">
-    <variant value="0">NON_INTENT</variant>
-    <variant value="1">CONFIRMED</variant>
-    <variant value="2">CANCELED</variant>
-  </enum>
-
-  <enum name="CameraAppResolutionLevel">
-    <variant value="0">UNKNOWN</variant>
-    <variant value="1">FOUR_K</variant>
-    <variant value="2">QUAD_HD</variant>
-    <variant value="3">FULL_HD</variant>
-    <variant value="4">HD</variant>
-    <variant value="5">THREE_HUNDRED_THIRTY_P</variant>
-    <variant value="6">FULL</variant>
-    <variant value="7">MEDIUM</variant>
-  </enum>
-
-  <enum name="CameraAppAspectRatioSet">
-    <variant value="0">OTHERS</variant>
-    <variant value="1">FOUR_TO_THREE</variant>
-    <variant value="2">SIXTEEN_TO_NINE</variant>
-    <variant value="3">SQUARE</variant>
-  </enum>
-
-  <enum name="CameraAppRecordType">
-    <variant value="0">NOT_RECORDING</variant>
-    <variant value="1">NORMAL</variant>
-    <variant value="2">GIF</variant>
-    <variant value="3">TIMELAPSE</variant>
-  </enum>
-
-  <enum name="CameraAppGifResultType">
-    <variant value="0">NOT_GIF</variant>
-    <variant value="1">RETAKE</variant>
-    <variant value="2">SHARE</variant>
-    <variant value="3">SAVE</variant>
-  </enum>
-
-  <enum name="CameraAppDocScanActionType">
-    <variant value="0">ADD_PAGE</variant>
-    <variant value="1">DELETE_PAGE</variant>
-    <variant value="2">FIX</variant>
-  </enum>
-
-  <enum name="CameraAppDocScanResultType">
-    <variant value="0">CANCEL</variant>
-    <variant value="1">SAVE_AS_PDF</variant>
-    <variant value="2">SAVE_AS_PHOTO</variant>
-    <variant value="3">SHARE</variant>
-  </enum>
-
-  <enum name="CameraAppLowStorageActionType">
-    <variant value="0">MANAGE_STORAGE_AUTO_STOP</variant>
-    <variant value="1">MANAGE_STORAGE_CANNOT_START</variant>
-    <variant value="2">SHOW_AUTO_STOP_DIALOG</variant>
-    <variant value="3">SHOW_CANNOT_START_DIALOG</variant>
-    <variant value="4">SHOW_WARNING_MESSAGE</variant>
-  </enum>
-
-  <enum name="CameraAppBarcodeContentType">
-    <variant value="0">TEXT</variant>
-    <variant value="1">URL</variant>
-    <variant value="2">WIFI</variant>
-  </enum>
-
-  <enum name="CameraAppWifiSecurityType">
-    <variant value="0">NONE</variant>
-    <variant value="1">EAP</variant>
-    <variant value="2">WEP</variant>
-    <variant value="3">WPA</variant>
-  </enum>
-
-  <enum name="CameraAppPerfEventType">
-    <variant value="0">CAMERA_SWITCHING</variant>
-    <variant value="1">GIF_CAPTURE_POST_PROCESSING</variant>
-    <variant value="2">LAUNCHING_FROM_LAUNCH_APP_COLD</variant>
-    <variant value="3">LAUNCHING_FROM_LAUNCH_APP_WARM</variant>
-    <variant value="4">LAUNCHING_FROM_WINDOW_CREATION</variant>
-    <variant value="5">MODE_SWITCHING</variant>
-    <variant value="6">PHOTO_CAPTURE_POST_PROCESSING</variant>
-    <variant value="7">PHOTO_CAPTURE_SHUTTER</variant>
-    <variant value="8">PHOTO_TAKING</variant>
-    <variant value="9">PORTRAIT_MODE_CAPTURE_POST_PROCESSING</variant>
-    <variant value="10">TIMELAPSE_CAPTURE_POST_PROCESSING</variant>
-    <variant value="11">VIDEO_CAPTURE_POST_PROCESSING</variant>
-  </enum>
-
   <event name="CameraApp.StartSession">
     <summary>
       Event recorded when the camera app is started.
@@ -1613,6 +1657,7 @@
     <summary>
       Event recorded when a barcode is detected and it is unsupported protocol.
     </summary>
+
   </event>
 
   <event name="CameraApp.EndSession">
@@ -1624,6 +1669,12 @@
         The duration of the camera app session in milliseconds.
       </summary>
     </metric>
+  </event>
+
+  <event name="CameraApp.MemoryUsage">
+    <summary>
+      Event recorded the memory usage summary of the camera session sent at the end of a camera session.
+    </summary>
     <metric name="Behaviors" type="int">
       <summary>
         Bit mask indicating the combination of user behavior(s) that the user
@@ -1637,11 +1688,6 @@
     </metric>
   </event>
 
-  <enum name="CampaignButtonId">
-    <variant value="0">PRIMARY</variant>
-    <variant value="1">SECONDARY</variant>
-  </enum>
-
   <event name="Growth.Ui.ButtonPressed">
     <summary>
       Event recorded when the button in the UI is pressed.
@@ -2257,6 +2303,210 @@
     </metric>
   </event>
 
+  <enum name="PickerInputFieldType">
+    <variant value="0">NONE</variant>
+    <variant value="1">PLAIN_TEXT</variant>
+    <variant value="2">RICH_TEXT</variant>
+    <variant value="3">PASSWORD</variant>
+    <variant value="4">SEARCH</variant>
+    <variant value="5">EMAIL</variant>
+    <variant value="6">NUMBER</variant>
+    <variant value="7">TELEPHONE</variant>
+    <variant value="8">URL</variant>
+    <variant value="9">DATE_TIME</variant>
+    <variant value="10">OTHER</variant>
+  </enum>
+
+  <event name="Picker.StartSession">
+    <summary>
+      Recorded when user opens the picker window and starts a session.
+    </summary>
+    <metric name="InputFieldType" type="PickerInputFieldType">
+      <summary>
+        Type of input field that was focused when the session starts.
+      </summary>
+    </metric>
+    <metric name="SelectionLength" type="int">
+      <summary>
+        Number of UTF-16 code units selected when the session starts.
+      </summary>
+    </metric>
+  </event>
+
+  <enum name="PickerSessionOutcome">
+    <variant value="0">UNKNOWN</variant>
+    <variant value="1">INSERTED_OR_COPIED</variant>
+    <variant value="2">ABANDONED</variant>
+    <variant value="3">REDIRECTED</variant>
+    <variant value="4">FORMAT</variant>
+  </enum>
+
+  <enum name="PickerAction">
+    <variant value="0">UNKNOWN</variant>
+    <variant value="1">OPEN_EDITOR_WRITE</variant>
+    <variant value="2">OPEN_EDITOR_REWRITE</variant>
+    <variant value="3">OPEN_LINKS</variant>
+    <variant value="4">OPEN_EXPRESSIONS</variant>
+    <variant value="5">OPEN_CLIPBOARD</variant>
+    <variant value="6">OPEN_DRIVE_FILES</variant>
+    <variant value="7">OPEN_LOCAL_FILES</variant>
+    <variant value="8">OPEN_DATES_TIMES</variant>
+    <variant value="9">OPEN_UNITS_MATHS</variant>
+    <variant value="10">TRANSFORM_UPPER_CASE</variant>
+    <variant value="11">TRANSFORM_LOWER_CASE</variant>
+    <variant value="12">TRANSFORM_SENTENCE_CASE</variant>
+    <variant value="13">TRANSFORM_TITLE_CASE</variant>
+    <variant value="14">CAPS_ON</variant>
+    <variant value="15">CAPS_OFF</variant>
+  </enum>
+
+  <enum name="PickerResultSource">
+    <variant value="0">UNKNOWN</variant>
+    <variant value="1">OMNIBOX</variant>
+    <variant value="2">EMOJI</variant>
+    <variant value="3">CLIPBOARD</variant>
+    <variant value="4">DRIVE_FILES</variant>
+    <variant value="5">LOCAL_FILES</variant>
+    <variant value="6">DATES_TIMES</variant>
+    <variant value="7">UNITS_MATHS</variant>
+    <variant value="8">CASE_TRANSFORM</variant>
+    <variant value="9">TENOR</variant>
+  </enum>
+
+  <enum name="PickerResultType">
+    <variant value="0">UNKNOWN</variant>
+    <variant value="1">TEXT</variant>
+    <variant value="2">EMOJI</variant>
+    <variant value="3">SYMBOL</variant>
+    <variant value="4">EMOTICON</variant>
+    <variant value="5">CLIPBOARD_FILE</variant>
+    <variant value="6">CLIPBOARD_TEXT</variant>
+    <variant value="7">CLIPBOARD_IMAGE</variant>
+    <variant value="8">CLIPBOARD_HTML</variant>
+    <variant value="9">GIF</variant>
+    <variant value="10">LINK</variant>
+    <variant value="11">LOCAL_FILE</variant>
+    <variant value="12">DRIVE_FILE</variant>
+  </enum>
+
+  <event name="Picker.FinishSession">
+    <summary>
+      Recorded when user closes the picker window and finishes a session.
+    </summary>
+    <metric name="Outcome" type="PickerSessionOutcome">
+      <summary>
+        Outcome of the session.
+      </summary>
+    </metric>
+    <metric name="Action" type="PickerAction">
+      <summary>
+        Action the user takes during a session. The user can only take at most
+        1 action during a session. UNKNOWN if the user didn't take any action.
+      </summary>
+    </metric>
+    <metric name="ResultSource" type="PickerResultSource">
+      <summary>
+        Source of the inserted result. UNKNOWN if no result is inserted.
+      </summary>
+    </metric>
+    <metric name="ResultType" type="PickerResultType">
+      <summary>
+        Type of the inserted result. UNKNOWN if no result is inserted.
+      </summary>
+    </metric>
+    <metric name="TotalEdits" type="int">
+      <summary>
+        Total number of edits of the query text during the session.
+      </summary>
+    </metric>
+    <metric name="FinalQuerySize" type="int">
+      <summary>
+        Number of UTF-16 code units of the query text when the session
+        finishes.
+      </summary>
+    </metric>
+    <metric name="ResultIndex" type="int">
+      <summary>
+        Index of the inserted result. -1 no result is inserted.
+      </summary>
+    </metric>
+  </event>
+  
+  <event name="QuickStart.ScreenOpened">
+    <summary>
+      Recorded when a new UI view is shown to a Quick Start user. It can either be
+      a new OOBE screen that occurs in the middle of Quick Start or one of the
+      Quick Start UI views.
+    </summary>
+    <metric name="ScreenName" type="QuickStartScreenName">
+      <summary>
+        Screen shown to Quick Start user.
+      </summary>
+    </metric>
+  </event>
+
+  <event name="QuickStart.ScreenClosed">
+    <summary>
+      Recorded when a UI view shown to a Quick Start user leaves. It can either be
+      a new OOBE screen that occurs in the middle of Quick Start or one of the
+      Quick Start UI views.
+    </summary>
+    <metric name="ScreenName" type="QuickStartScreenName">
+      <summary>
+        Screen closed for Quick Start user.
+      </summary>
+    </metric>
+  </event>
+
+  <event name="QuickStart.Initiated">
+    <summary>
+      Recorded when a user initiates Quick Start.
+    </summary>
+    <metric name="EntryPoint" type="QuickStartEntryPoint">
+      <summary>
+        Entry Point from where the user entered Quick Start.
+      </summary>
+    </metric>
+  </event>
+
+  <event name="QuickStart.FlowAborted">
+    <summary>
+      Recorded when the Quick Start flow is prematurely aborted, either due to an
+      error or user action.
+    </summary>
+    <metric name="Reason" type="QuickStartAbortFlowReason">
+      <summary>
+        Reason the Quick Start flow is aborted.
+      </summary>
+    </metric>
+  </event>
+
+  <event name="QuickStart.EstablishConnection">
+    <summary>
+      Recorded once a connection is established with the source device or an error
+      occurs attempting to bootstrap the connection.
+    </summary>
+    <metric name="Success" type="int">
+      <summary>
+        Boolean indicating whether the connection is successfully established.
+      </summary>
+    </metric>
+  </event>
+
+  <event name="QuickStart.AutomaticResumeAfterUpdate">
+    <summary>
+      Recorded once a connection is automatically established with the source
+      device after an update or when an error occurs attempting to automatically
+      bootstrap the connection.
+    </summary>
+    <metric name="Success" type="int">
+      <summary>
+        Boolean indicating whether the connection is successfully established during
+        the automatic resume attempt.
+      </summary>
+    </metric>
+  </event>
+
   <event name="UserLogin">
     <summary>
       An event to signify a user is using the system.
@@ -2764,4 +3014,26 @@
   </event>
 </project>
 
+<project name="SequencedTestProject" cros_events="true">
+  <owner>andrewbregger@google.com</owner>
+  <id>per-project</id>
+  <scope>profile</scope>
+  <key-rotation>90</key-rotation>
+  <summary>
+    Project for unit testing, do not use.
+  </summary>
+
+  <event name="Test1">
+    <summary>
+      Test event used for unit tests to ensure that the code-gen for the event
+      sequence project is working properly.
+    </summary>
+    <metric name="Metric1" type="double">
+      <summary>
+        Test metric1
+      </summary>
+    </metric>
+  </event>
+</project>
+
 </structured-metrics>
\ No newline at end of file
diff --git a/tools/mojo_messages_log.py b/tools/mojo_messages_log.py
new file mode 100755
index 0000000..848aa63
--- /dev/null
+++ b/tools/mojo_messages_log.py
@@ -0,0 +1,198 @@
+#!/usr/bin/env python3
+# Copyright 2024 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import os
+import sys
+from collections import defaultdict
+
+DESCRIPTION = \
+'''This script takes in a Chromium trace file and extracts info about Mojo
+messages that were sent/received.
+
+Trace files can be created using chrome://tracing or from passing
+'--enable-tracing' to a Chrome or browser test executable. In the
+chrome://tracing UI, ensure that the 'mojom' and 'toplevel' categories are
+selected when setting up a new trace. Also, the trace events available will
+have much more information (including message contents and return values) if
+the executable generating the trace file is built with the
+`extended_tracing_enabled = true` gn arg.
+'''
+
+PERFETTO_NOT_FOUND_HELP_TEXT = \
+'''Error: perfetto module not found.
+
+This script requires the perfetto Python module. To install it, use something
+like `pip install perfetto`, or for Googlers on gLinux use the following (in a
+Chromium checkout):
+```
+sudo apt-get install python3-venv
+python3 -m venv venv
+./venv/bin/python3 -mpip install perfetto
+./venv/bin/python3 tools/mojo_messages_log.py <script args>
+```
+'''
+
+# Note: Ignore 'mojo::Message::Message' (from the disabled by default 'mojom'
+# category) because there is usually higher-level information that's more
+# helpful, even in release builds.
+
+# TODO(awillia): The 'Send mojo message' and 'Receive mojo sync reply' trace
+# events (both from the toplevel.flow category) should have a message ID
+# associated with them but I'm not sure how to access it. With the former we
+# could figure out the sender of a message, but without the message ID the
+# events aren't very helpful.
+MOJO_EVENTS_QUERY = \
+'''INCLUDE PERFETTO MODULE slices.with_context;
+SELECT
+  (ts - (SELECT start_ts FROM trace_bounds)) / 1000000000.0 AS ts_delta,
+  process_name,
+  pid, -- Useful for distinguishing renderer processes
+  thread_name,
+  name,
+  category AS event_category,
+  GROUP_CONCAT(args.key || ": " ||
+               COALESCE(args.int_value,
+                        args.string_value,
+                        args.real_value)) AS parameters
+  -- Note that we could get argument type info as well if that's worthwhile
+  FROM thread_slice
+  LEFT JOIN args on args.arg_set_id = thread_slice.arg_set_id
+  WHERE (category IS 'mojom' AND name GLOB 'Send *') OR
+        (category IS 'mojom' AND name GLOB 'Call *') OR
+        (category IS 'toplevel' AND name GLOB 'Receive *') OR
+        (category IS 'toplevel' AND name IS 'Closed mojo endpoint')
+  GROUP BY thread_slice.id, args.arg_set_id
+  ORDER BY ts;
+'''
+
+SUMMARY_FIELDS = ['ts_delta', 'process_name', 'name']
+
+VERBOSE_FIELDS = ['ts_delta', 'process_name', 'pid', 'thread_name', 'name']
+ADDITIONAL_DATA_FIELDS = ['name', 'event_category', 'parameters']
+
+
+def is_valid_path(parser, path):
+  if not os.path.exists(path):
+    parser.error("Invalid path: %s" % (path))
+  else:
+    return path
+
+
+def process_mojo_msg_info(extra, spacing=2):
+  if not extra or len(extra) != len(ADDITIONAL_DATA_FIELDS):
+    return
+  output = ''
+  spacer = ' ' * spacing
+  event_name, event_category, parameters = extra
+
+  # The parameters exist as a single comma separated line, so break it into
+  # separate lines. Each if statement block here corresponds to a WHERE
+  # condition in the SQL query.
+  if (event_category == 'mojom' and event_name.startswith("Send ")) or \
+     (event_category == 'mojom' and event_name.startswith("Call ")):
+    if parameters is None:
+      # The call has no parameters
+      parameters = []
+    else:
+      assert (parameters.startswith('debug.'))
+      parameters = parameters.replace('debug.', '', 1)
+      parameters = parameters.split(',debug.')
+
+  elif (event_category == 'toplevel' and event_name.startswith("Receive ")) or \
+       (event_category == 'toplevel' and event_name == "Closed mojo endpoint"):
+    if parameters is None:
+      parameters = []
+    elif parameters.startswith('chrome_mojo_event_info.'):
+      parameters = parameters.replace('chrome_mojo_event_info.', '', 1)
+      parameters = parameters.split(',chrome_mojo_event_info.')
+      parameters = ['chrome_mojo_event_info.' + x for x in parameters]
+    else:
+      assert (parameters.startswith('args.'))
+      parameters = parameters.replace('args.', '', 1)
+      parameters = parameters.split(',args.')
+
+  results = defaultdict(lambda: [])
+  for parameter in parameters:
+    info_type, info = parameter.split('.', 1)
+    results[info_type].append(info)
+
+  for info_type in results:
+    output += spacer + info_type + ':\n'
+    for entry in results[info_type]:
+      output += spacer * 2 + entry + '\n'
+  return output
+
+
+# Formats the event data into the structured data that can be shown in the
+# displayed table and additional unstructured data that should be shown
+# underneath each event.
+def process_events(args, events):
+  rows = []
+  extras = []
+  for row_data in events:
+    row = []
+    extra = []
+    if args.summary:
+      for field in SUMMARY_FIELDS:
+        row.append(str(getattr(row_data, field)))
+    else:
+      for field in VERBOSE_FIELDS:
+        row.append(str(getattr(row_data, field)))
+
+      for field in ADDITIONAL_DATA_FIELDS:
+        extra.append(getattr(row_data, field))
+      extra = process_mojo_msg_info(extra)
+    rows.append(row)
+    extras.append(extra)
+  return rows, extras
+
+
+try:
+  from perfetto.trace_processor import TraceProcessor
+except ModuleNotFoundError:
+  print(PERFETTO_NOT_FOUND_HELP_TEXT)
+  sys.exit(1)
+
+
+def main():
+  import argparse
+  parser = argparse.ArgumentParser(
+      formatter_class=argparse.RawDescriptionHelpFormatter,
+      description=DESCRIPTION)
+  parser.add_argument('tracefile',
+                      type=lambda path: is_valid_path(parser, path))
+  parser.add_argument('--summary', action="store_true")
+  args = parser.parse_args()
+
+  tp = TraceProcessor(file_path=args.tracefile)
+
+  results = tp.query(MOJO_EVENTS_QUERY)
+
+  rows, extras = process_events(args, results)
+
+  # Add headers for the table.
+  if args.summary:
+    rows.insert(0, SUMMARY_FIELDS)
+  else:
+    rows.insert(0, VERBOSE_FIELDS)
+  # Keep `extras` the same length as `rows`.
+  extras.insert(0, None)
+
+  # Calculate the appropriate widths of each column.
+  widths = [max(map(len, column)) for column in zip(*rows)]
+
+  for i in range(len(rows)):
+    row = rows[i]
+    extra = extras[i]
+    # Format the structured data so the fields align with the table headers.
+    out = (value.ljust(width) for value, width in zip(row, widths))
+    out = "  ".join(out).rstrip()
+    print(out)
+    if extra:
+      print(extra)
+
+
+if __name__ == '__main__':
+  sys.exit(main())
diff --git a/tools/msan/ignorelist.txt b/tools/msan/ignorelist.txt
index ef33dc8..3a3552c4 100644
--- a/tools/msan/ignorelist.txt
+++ b/tools/msan/ignorelist.txt
@@ -10,3 +10,4 @@
 src:*/third_party/breakpad/breakpad/src/*
 src:*/components/crash/core/app/breakpad_linux.cc
 
+src:*/third_party/swiftshader/*
diff --git a/tools/perf/benchmarks/benchmark_smoke_unittest.py b/tools/perf/benchmarks/benchmark_smoke_unittest.py
index ed57318..db335ced 100644
--- a/tools/perf/benchmarks/benchmark_smoke_unittest.py
+++ b/tools/perf/benchmarks/benchmark_smoke_unittest.py
@@ -76,7 +76,7 @@
       results_processor.ProcessOptions(options)
 
       return_code = benchmark_class().Run(options)
-      # TODO(crbug.com/1019139): Make 111 be the exit code that means
+      # TODO(crbug.com/40105219): Make 111 be the exit code that means
       # "no stories were run.".
       if return_code in (-1, 111):
         self.skipTest('The benchmark was not run.')
diff --git a/tools/perf/benchmarks/rendering.py b/tools/perf/benchmarks/rendering.py
index 6843286..286fda19 100644
--- a/tools/perf/benchmarks/rendering.py
+++ b/tools/perf/benchmarks/rendering.py
@@ -42,7 +42,7 @@
 
 
 class _RenderingBenchmark(perf_benchmark.PerfBenchmark):
-  # TODO(crbug/1205829): Capturing video is causing long cycle time and timeout
+  # TODO(crbug.com/40764818): Capturing video is causing long cycle time and timeout
   # on some Pixel devices. Disabling this option until the issue can be fixed.
   #options = {
   #    'capture_screen_video': True
@@ -125,14 +125,7 @@
 
   def SetExtraBrowserOptions(self, options):
     super(RenderingDesktop, self).SetExtraBrowserOptions(options)
-    # The feature below is only needed for macOS.
-    # We found that the normal priorities used for mac is resulting into
-    # unreliable values for avg_fps and frame_times. Increasing the priority
-    # and using it in telemetry tests can help with more accurate values.
-    # crbug.com/970607
     if sys.platform == 'darwin':
-      options.AppendExtraBrowserArgs(
-          '--use-gpu-high-thread-priority-for-perf-tests')
       # Mac bots without a physical display fallbacks to SRGB. This flag forces
       # them to use a color profile (P3), which matches the usual color profile
       # on Mac monitors and changes the cost of some overlay operations to match
diff --git a/tools/perf/benchmarks/system_health.py b/tools/perf/benchmarks/system_health.py
index a5dbb9a..d041c6f 100644
--- a/tools/perf/benchmarks/system_health.py
+++ b/tools/perf/benchmarks/system_health.py
@@ -251,7 +251,7 @@
     options = timeline_based_measurement.Options()
     options.SetTimelineBasedMetrics(['webviewStartupMetric'])
     options.config.enable_atrace_trace = True
-    # TODO(crbug.com/1028882): Recording a Chrome trace at the same time as
+    # TODO(crbug.com/40109346): Recording a Chrome trace at the same time as
     # atrace causes events to stack incorrectly. Fix this by recording a
     # system+Chrome trace via system perfetto on the device instead.
     options.config.enable_chrome_trace = False
diff --git a/tools/perf/benchmarks/system_health_smoke_test.py b/tools/perf/benchmarks/system_health_smoke_test.py
index 5459d2a..5395892 100644
--- a/tools/perf/benchmarks/system_health_smoke_test.py
+++ b/tools/perf/benchmarks/system_health_smoke_test.py
@@ -151,7 +151,7 @@
         self.skipTest('Test is explicitly disabled')
       single_page_benchmark = SinglePageBenchmark()
       return_code = single_page_benchmark.Run(options)
-      # TODO(crbug.com/1019139): Make 111 be the exit code that means
+      # TODO(crbug.com/40105219): Make 111 be the exit code that means
       # "no stories were run.".
       if return_code in (-1, 111):
         self.skipTest('The benchmark was not run.')
diff --git a/tools/perf/contrib/leak_detection/leak_detection.py b/tools/perf/contrib/leak_detection/leak_detection.py
index 3c880b7..4806452 100644
--- a/tools/perf/contrib/leak_detection/leak_detection.py
+++ b/tools/perf/contrib/leak_detection/leak_detection.py
@@ -25,14 +25,14 @@
     return tbm_options
 
   def CustomizeOptions(self, finder_options, possible_browser=None):
-    # TODO(crbug.com/936805): Note this is a hack. Perf benchmarks should not
+    # TODO(crbug.com/40615991): Note this is a hack. Perf benchmarks should not
     # override the CustomizeOptions method.
     finder_options.browser_options.AppendExtraBrowserArgs(
         '--js-flags=--expose-gc')
     finder_options.browser_options.AppendExtraBrowserArgs('--disable-perfetto')
 
   def CustomizeBrowserOptions(self, _):
-    # TODO(crbug.com/936805): Note this is a hack. Perf benchmarks should not
+    # TODO(crbug.com/40615991): Note this is a hack. Perf benchmarks should not
     # override the CustomizeBrowserOptions method.
     pass
 
diff --git a/tools/perf/contrib/leak_detection/page_sets.py b/tools/perf/contrib/leak_detection/page_sets.py
index a14ada85..4e54679 100644
--- a/tools/perf/contrib/leak_detection/page_sets.py
+++ b/tools/perf/contrib/leak_detection/page_sets.py
@@ -155,7 +155,7 @@
         'https://www.hotstar.com/',
         'https://www.incometaxindiaefiling.gov.in/',
         'https://stackoverflow.com/',
-        # TODO(crbug.com/1005035) Memory dump fails flakily.
+        # TODO(crbug.com/40099304) Memory dump fails flakily.
         # 'https://www.irctc.co.in/nget/',
         'https://www.hdfcbank.com/',
         'https://www.whatsapp.com/',
@@ -198,7 +198,7 @@
         'http://www.airbnb.ch',
         'http://www.livedoor.jp',
         'http://www.blu-ray.com',
-        # TODO(953195): Test times out.
+        # TODO(crbug.com/40623301): Test times out.
         # 'http://www.block.io',
         'http://www.hockeybuzz.com',
         'http://www.silverpop.com',
diff --git a/tools/perf/contrib/shared_storage/utils/xvfb.py b/tools/perf/contrib/shared_storage/utils/xvfb.py
index 092c10ac..c5fda1b 100644
--- a/tools/perf/contrib/shared_storage/utils/xvfb.py
+++ b/tools/perf/contrib/shared_storage/utils/xvfb.py
@@ -14,7 +14,7 @@
 
 
 def ShouldStartXvfb():
-  # TODO(crbug.com/973847): Note that you can locally change this to return
+  # TODO(crbug.com/40631966): Note that you can locally change this to return
   # False to diagnose timeouts for dev server tests.
   return platform.system() == 'Linux'
 
diff --git a/tools/perf/contrib/vr_benchmarks/desktop_runtimes/openxr_runtimes.py b/tools/perf/contrib/vr_benchmarks/desktop_runtimes/openxr_runtimes.py
index 0160e41..a3c86d2 100644
--- a/tools/perf/contrib/vr_benchmarks/desktop_runtimes/openxr_runtimes.py
+++ b/tools/perf/contrib/vr_benchmarks/desktop_runtimes/openxr_runtimes.py
@@ -38,7 +38,7 @@
     # environment variable pointing towards the mock implementation. When OpenXR
     # starts, it checks if this is set, and if so, uses the specified
     # implementation.
-    # TODO(https://crbug.com/944890): Switch to setting these only when the
+    # TODO(crbug.com/40619671): Switch to setting these only when the
     # browser is started once the functionality is added.
     os.environ[self.OPENXR_CONFIG_PATH] = os.path.join(
         self._mock_runtime_directory, self.OPENXR_CONFIG_PATH_VALUE)
diff --git a/tools/perf/core/benchmark_runner_test.py b/tools/perf/core/benchmark_runner_test.py
index 206fb23d..baba7293 100644
--- a/tools/perf/core/benchmark_runner_test.py
+++ b/tools/perf/core/benchmark_runner_test.py
@@ -74,7 +74,7 @@
 
   def RunBenchmark(self, benchmark_class):
     """Run a benchmark, process results, and return generated histograms."""
-    # TODO(crbug.com/985712): Ideally we should be able to just call
+    # TODO(crbug.com/40636798): Ideally we should be able to just call
     # telemetry.command_line.RunCommand(self.options) with the right set
     # of options chosen. However, argument parsing and command running are
     # currently tangled in Telemetry. In particular the class property
@@ -98,7 +98,7 @@
     return histograms
 
   @decorators.Disabled(
-      'chromeos',  # TODO(https://crbug.com/1098412): Fix the test.
+      'chromeos',  # TODO(crbug.com/40137013): Fix the test.
       'android-nougat',  # Flaky: https://crbug.com/1342706
       'mac')  # Failing: https://crbug.com/1370958
   def testTimelineBasedEndToEnd(self):
diff --git a/tools/perf/core/bot_platforms.py b/tools/perf/core/bot_platforms.py
index de36545..9eb1716 100644
--- a/tools/perf/core/bot_platforms.py
+++ b/tools/perf/core/bot_platforms.py
@@ -101,7 +101,7 @@
 
   @property
   def benchmarks_to_run(self):
-    # TODO(crbug.com/965158): Deprecate this in favor of benchmark_configs
+    # TODO(crbug.com/40628256): Deprecate this in favor of benchmark_configs
     # as part of change to make sharding scripts accommodate abridged
     # benchmarks.
     return frozenset({b.benchmark for b in self._benchmark_configs})
@@ -250,12 +250,12 @@
     'speedometer3-nominorms',
     'speedometer3-predictable',
 ])
-# TODO(crbug.com/965158): Remove OFFICIAL_BENCHMARK_NAMES once sharding
+# TODO(crbug.com/40628256): Remove OFFICIAL_BENCHMARK_NAMES once sharding
 # scripts are no longer using it.
 OFFICIAL_BENCHMARK_NAMES = frozenset(
     b.name for b in OFFICIAL_BENCHMARK_CONFIGS.Frozenset())
 
-# TODO(crbug.com/1030840): Stop using these 'OFFICIAL_EXCEPT' suites and instead
+# TODO(crbug.com/40110184): Stop using these 'OFFICIAL_EXCEPT' suites and instead
 # define each benchmarking config separately as is already done for many of the
 # suites below.
 _OFFICIAL_EXCEPT_DISPLAY_LOCKING = PerfSuite(OFFICIAL_BENCHMARK_CONFIGS).Remove(
@@ -413,7 +413,7 @@
         'speedometer3-predictable',
     ])
 _LINUX_EXECUTABLE_CONFIGS = frozenset([
-    # TODO(crbug.com/811766): Add views_perftests.
+    # TODO(crbug.com/40562709): Add views_perftests.
     _base_perftests(200),
     _load_library_perf_tests(),
     _performance_browser_tests(165),
@@ -705,7 +705,7 @@
     'Low end windows 10 HP laptops. HD Graphics 5500, x86-64-i3-5005U, '
     'SSD, 4GB RAM.',
     _WIN_10_LOW_END_BENCHMARK_CONFIGS,
-    # TODO(crbug.com/1305291): Increase the count back to 46 when issue fixed.
+    # TODO(crbug.com/40218037): Increase the count back to 46 when issue fixed.
     40,
     'win',
     pinpoint_only=True)
diff --git a/tools/perf/core/perf_data_generator.py b/tools/perf/core/perf_data_generator.py
index e620bf82..a17ebbf 100755
--- a/tools/perf/core/perf_data_generator.py
+++ b/tools/perf/core/perf_data_generator.py
@@ -237,7 +237,7 @@
         }],
         'platform':
         'fuchsia-wes',
-        # TODO(crbug.com/1453742): Replace with long-term solution for ssh in Fuchsia img,
+        # TODO(crbug.com/40272046): Replace with long-term solution for ssh in Fuchsia img,
         # or codify as long-term solution.
         'cipd': {
             "cipd_package": "fuchsia/third_party/openssh-portable/${platform}",
@@ -264,7 +264,7 @@
         }],
         'platform':
         'fuchsia-wes',
-        # TODO(crbug.com/1453742): Replace with long-term solution for ssh in Fuchsia img,
+        # TODO(crbug.com/40272046): Replace with long-term solution for ssh in Fuchsia img,
         # or codify as long-term solution.
         'cipd': {
             "cipd_package": "fuchsia/third_party/openssh-portable/${platform}",
@@ -296,7 +296,7 @@
         'dimension': {
             'pool':
             'chrome.tests.perf-fyi',
-            # TODO(crbug.com/971204): Explicitly set the gpu to None to make
+            # TODO(crbug.com/41463380): Explicitly set the gpu to None to make
             # chromium_swarming recipe_module ignore this dimension.
             'gpu':
             None,
@@ -326,7 +326,7 @@
         32,
         'dimension': {
             'pool': 'chrome.tests',
-            # TODO(crbug.com/971204): Explicitly set the gpu to None to make
+            # TODO(crbug.com/41463380): Explicitly set the gpu to None to make
             # chromium_swarming recipe_module ignore this dimension.
             'gpu': None,
             'os': 'ChromeOS',
@@ -1344,7 +1344,7 @@
         64,
         'dimension': {
             'pool': 'chrome.tests.perf',
-            # TODO(crbug.com/971204): Explicitly set the gpu to None to make
+            # TODO(crbug.com/41463380): Explicitly set the gpu to None to make
             # chromium_swarming recipe_module ignore this dimension.
             'gpu': None,
             'os': 'ChromeOS',
@@ -1369,7 +1369,7 @@
         64,
         'dimension': {
             'pool': 'chrome.tests.perf',
-            # TODO(crbug.com/971204): Explicitly set the gpu to None to make
+            # TODO(crbug.com/41463380): Explicitly set the gpu to None to make
             # chromium_swarming recipe_module ignore this dimension.
             'gpu': None,
             'os': 'ChromeOS',
@@ -1946,7 +1946,7 @@
       # supports swarming. It doesn't hurt.
       'can_use_on_swarming_builders': True,
       'expiration': 2 * 60 * 60,  # 2 hours pending max
-      # TODO(crbug.com/865538): once we have plenty of windows hardwares,
+      # TODO(crbug.com/40585750): once we have plenty of windows hardwares,
       # to shards perf benchmarks on Win builders, reduce this hard timeout
       # limit to ~2 hrs.
       # Note that the builder seems to time out after 7 hours
@@ -1957,7 +1957,7 @@
       # This is effectively the timeout for a
       # benchmarking subprocess to run since we intentionally do not stream
       # subprocess output to the task stdout.
-      # TODO(crbug.com/865538): Reduce this once we can reduce hard_timeout.
+      # TODO(crbug.com/40585750): Reduce this once we can reduce hard_timeout.
       'io_timeout': test.get('timeout', 6 * 60 * 60),
       'dimensions': tester_config['dimension'],
       'service_account': _TESTER_SERVICE_ACCOUNT,
@@ -1975,7 +1975,7 @@
   if 'additional_compile_targets' in condensed_config:
     config['additional_compile_targets'] = (
         condensed_config['additional_compile_targets'])
-  # TODO(crbug.com/1078675): remove this setting
+  # TODO(crbug.com/40129604): remove this setting
   if 'perf_processor' in condensed_config:
     config['merge'] = {
         'script': '//tools/perf/process_perf_results.py',
diff --git a/tools/perf/core/perfetto_binary_roller/binary_deps.json b/tools/perf/core/perfetto_binary_roller/binary_deps.json
index 6e4395a..c776e2e 100644
--- a/tools/perf/core/perfetto_binary_roller/binary_deps.json
+++ b/tools/perf/core/perfetto_binary_roller/binary_deps.json
@@ -1,28 +1,28 @@
 {
     "trace_processor_shell": {
         "linux_arm64": {
-            "hash": "25d83290db92c9119160451f946eb88841fa7928",
-            "full_remote_path": "perfetto-luci-artifacts/v44.0/linux-arm64/trace_processor_shell"
+            "hash": "a0da990a2c2be46736a058abc4737a51bf294f7e",
+            "full_remote_path": "perfetto-luci-artifacts/3d6618bf4621a52967401b8b6ec9cee427131319/linux-arm64/trace_processor_shell"
         },
         "win": {
-            "hash": "9650ff6e27c1f4c454af0e3d91edd7258d9970d5",
-            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/win/234fd02711c642ec5211da272283db8fd8d91af4/trace_processor_shell.exe"
+            "hash": "9c13b9cff7f817510fbbe1be6b4ee8189c82c344",
+            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/win/6aaa8a1fb15659d1b68179e20993e969d9f500f8/trace_processor_shell.exe"
         },
         "linux_arm": {
-            "hash": "d8e27d961be1db97db098c6826017aec0397ecfd",
-            "full_remote_path": "perfetto-luci-artifacts/v44.0/linux-arm/trace_processor_shell"
+            "hash": "f7aeb993ad5808f080dbdd97afd0eb0748ddf6e5",
+            "full_remote_path": "perfetto-luci-artifacts/3d6618bf4621a52967401b8b6ec9cee427131319/linux-arm/trace_processor_shell"
         },
         "mac": {
             "hash": "f5d83eca972747f7c3db9f35c07ed57902418e8c",
             "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/mac/881ad50c05049ca13d4b34e4f92f4167de5ac52a/trace_processor_shell"
         },
         "mac_arm64": {
-            "hash": "ee10ca191028b98c1a4bc29b0da403411bfd391b",
-            "full_remote_path": "perfetto-luci-artifacts/v44.0/mac-arm64/trace_processor_shell"
+            "hash": "301e30a1a8907353fe56fab32176829fda999b81",
+            "full_remote_path": "perfetto-luci-artifacts/3d6618bf4621a52967401b8b6ec9cee427131319/mac-arm64/trace_processor_shell"
         },
         "linux": {
-            "hash": "46f4391cc3ac746ec2ee3fc395eabc19c80dca29",
-            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux/234fd02711c642ec5211da272283db8fd8d91af4/trace_processor_shell"
+            "hash": "7980bcc2dc066207ea17a0fdd016f60822c88ce7",
+            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux/6aaa8a1fb15659d1b68179e20993e969d9f500f8/trace_processor_shell"
         }
     },
     "power_profile.sql": {
diff --git a/tools/perf/core/results_dashboard.py b/tools/perf/core/results_dashboard.py
index d9d262b..90c7292d 100755
--- a/tools/perf/core/results_dashboard.py
+++ b/tools/perf/core/results_dashboard.py
@@ -31,7 +31,7 @@
 else:
   import http.client as httplib  # pylint: disable=import-error
 
-# TODO(crbug.com/996778): Figure out how to get httplib2 hermetically.
+# TODO(crbug.com/40641687): Figure out how to get httplib2 hermetically.
 import httplib2  # pylint: disable=import-error
 
 from core import path_util
diff --git a/tools/perf/core/results_processor/compute_metrics.py b/tools/perf/core/results_processor/compute_metrics.py
index 91c7aa38..4bd0bcc 100644
--- a/tools/perf/core/results_processor/compute_metrics.py
+++ b/tools/perf/core/results_processor/compute_metrics.py
@@ -99,7 +99,7 @@
     return
 
   if CONCATENATED_PROTO_NAME not in artifacts:
-    # TODO(crbug.com/990304): This is only a warning now, because proto trace
+    # TODO(crbug.com/40638725): This is only a warning now, because proto trace
     # generation is enabled only on selected bots. Make this an error
     # when Telemetry is switched over to proto trace generation everywhere.
     # Also don't forget to call util.SetUnexpectedFailure(test_result).
diff --git a/tools/perf/core/results_processor/formatters/json3_output.py b/tools/perf/core/results_processor/formatters/json3_output.py
index 2ee8932..d43dc31 100644
--- a/tools/perf/core/results_processor/formatters/json3_output.py
+++ b/tools/perf/core/results_processor/formatters/json3_output.py
@@ -98,7 +98,7 @@
 
 
 def _DedupedStatus(values):
-  # TODO(crbug.com/754825): The following logic is a workaround for how the
+  # TODO(crbug.com/40534832): The following logic is a workaround for how the
   # flakiness dashboard determines whether a test is flaky. As a test_case
   # (i.e. story) may be run multiple times, we squash as sequence of PASS
   # results to a single one. Note this does not affect the total number of
diff --git a/tools/perf/core/results_processor/formatters/json3_output_unittest.py b/tools/perf/core/results_processor/formatters/json3_output_unittest.py
index 6e8dbd3..db32a41 100644
--- a/tools/perf/core/results_processor/formatters/json3_output_unittest.py
+++ b/tools/perf/core/results_processor/formatters/json3_output_unittest.py
@@ -53,7 +53,7 @@
     self.assertNotIn('shard', test_result)
     self.assertEqual(results['num_failures_by_type'], {'PASS': 1})
 
-  # TODO(crbug.com/983993): Remove this test when all stories have
+  # TODO(crbug.com/40636038): Remove this test when all stories have
   # url-friendly names without special characters.
   def testUrlAsStoryName(self):
     results = self.Convert([
diff --git a/tools/perf/core/results_processor/processor.py b/tools/perf/core/results_processor/processor.py
index 83d6cf6..ac9e1be8 100644
--- a/tools/perf/core/results_processor/processor.py
+++ b/tools/perf/core/results_processor/processor.py
@@ -75,7 +75,7 @@
 
   test_results = _LoadTestResults(options.intermediate_dir)
   if not test_results:
-    # TODO(crbug.com/981349): Make sure that no one is expecting Results
+    # TODO(crbug.com/40634925): Make sure that no one is expecting Results
     # Processor to output results in the case of empty input
     # and make this an error.
     logging.warning('No test results to process.')
@@ -249,7 +249,7 @@
   artifacts = test_result.get('outputArtifacts', {})
   proto_traces = [name for name in artifacts if _IsProtoTrace(name)]
 
-  # TODO(crbug.com/990304): After implementation of TBMv3-style clock sync,
+  # TODO(crbug.com/40638725): After implementation of TBMv3-style clock sync,
   # it will be possible to convert the aggregated proto trace, not
   # individual ones.
   for proto_trace_name in proto_traces:
@@ -343,7 +343,7 @@
   """
   artifacts = test_result.get('outputArtifacts', {})
   for name, artifact in artifacts.items():
-    # TODO(crbug.com/981349): Think of a more general way to
+    # TODO(crbug.com/40634925): Think of a more general way to
     # specify which artifacts deserve uploading.
     if name in [DIAGNOSTICS_NAME, MEASUREMENTS_NAME]:
       continue
diff --git a/tools/perf/core/results_processor/util.py b/tools/perf/core/results_processor/util.py
index 683ed3e..db1ec00 100644
--- a/tools/perf/core/results_processor/util.py
+++ b/tools/perf/core/results_processor/util.py
@@ -35,7 +35,7 @@
     # crbug.com/953365.
     cpu_count = multiprocessing.cpu_count() // 2
     if sys.platform == 'win32':
-      # TODO(crbug.com/1190269) - we can't use more than 56
+      # TODO(crbug.com/40755900) - we can't use more than 56
       # cores on Windows or Python3 may hang.
       cpu_count = min(cpu_count, 56)
 
diff --git a/tools/perf/core/services/dashboard_service.py b/tools/perf/core/services/dashboard_service.py
index 7f2c5f15..bde5630a 100644
--- a/tools/perf/core/services/dashboard_service.py
+++ b/tools/perf/core/services/dashboard_service.py
@@ -69,7 +69,7 @@
 def Timeseries(test_path, days=30):
   """Get timeseries for the given test path.
 
-  TODO(crbug.com/907121): Remove when no longer needed.
+  TODO(crbug.com/40603244): Remove when no longer needed.
 
   Args:
     test_path: test path to get timeseries for.
@@ -94,7 +94,7 @@
 def ListTestPaths(test_suite, sheriff):
   """Lists test paths for the given test_suite.
 
-  TODO(crbug.com/907121): Remove when no longer needed.
+  TODO(crbug.com/40603244): Remove when no longer needed.
 
   Args:
     test_suite: String with test suite to get paths for.
diff --git a/tools/perf/core/services/dashboard_service_test.py b/tools/perf/core/services/dashboard_service_test.py
index 06c31d2..e69e06c 100644
--- a/tools/perf/core/services/dashboard_service_test.py
+++ b/tools/perf/core/services/dashboard_service_test.py
@@ -5,7 +5,7 @@
 import unittest
 from unittest import mock
 
-# TODO(crbug.com/996778): Figure out how to get httplib2 hermetically.
+# TODO(crbug.com/40641687): Figure out how to get httplib2 hermetically.
 import httplib2  # pylint: disable=import-error
 
 from core.services import dashboard_service
diff --git a/tools/perf/core/services/request.py b/tools/perf/core/services/request.py
index 61a9ba3..36d8b9e 100644
--- a/tools/perf/core/services/request.py
+++ b/tools/perf/core/services/request.py
@@ -8,7 +8,7 @@
 import six
 import six.moves.urllib.parse  # pylint: disable=import-error
 
-# TODO(crbug.com/996778): Figure out how to get httplib2 hermetically.
+# TODO(crbug.com/40641687): Figure out how to get httplib2 hermetically.
 import httplib2  # pylint: disable=import-error
 
 from core import path_util
diff --git a/tools/perf/core/services/request_test.py b/tools/perf/core/services/request_test.py
index 7d7b4c4..740483ef 100644
--- a/tools/perf/core/services/request_test.py
+++ b/tools/perf/core/services/request_test.py
@@ -7,7 +7,7 @@
 import unittest
 from unittest import mock
 
-# TODO(crbug.com/996778): Figure out how to get httplib2 hermetically.
+# TODO(crbug.com/40641687): Figure out how to get httplib2 hermetically.
 import httplib2  # pylint: disable=import-error
 
 from core.services import request
diff --git a/tools/perf/core/sharding_map_generator.py b/tools/perf/core/sharding_map_generator.py
index ff0aff33..cd001d7 100644
--- a/tools/perf/core/sharding_map_generator.py
+++ b/tools/perf/core/sharding_map_generator.py
@@ -133,7 +133,7 @@
   # For efficient removal of story timing list's elements & to keep the
   # ordering of benchmark alphabetically sorted in the shards' assignment, we
   # reverse the |story_timing_list|.
-  #TODO(crbug/1195146): fix extra story repeat
+  #TODO(crbug.com/40175917): fix extra story repeat
   for i in range(num_shards):
     if len(repeating_benchmark_timing_list) == 0:
       for benchmark, timing_list in repeated_benchmark_to_timing_list.items():
diff --git a/tools/perf/core/tbmv3/metrics/console_error_metric.proto b/tools/perf/core/tbmv3/metrics/console_error_metric.proto
index 3424aea..b10865a 100644
--- a/tools/perf/core/tbmv3/metrics/console_error_metric.proto
+++ b/tools/perf/core/tbmv3/metrics/console_error_metric.proto
@@ -6,7 +6,7 @@
 package perfetto.protos;
 
 import "protos/perfetto/metrics/metrics.proto";
-// TODO(crbug.com/1012687): Ideally we won't need this second import.
+// TODO(crbug.com/40102479): Ideally we won't need this second import.
 import "protos/perfetto/metrics/custom_options.proto";
 
 message ConsoleErrorMetric {
diff --git a/tools/perf/core/tbmv3/run_tbmv3_metric.py b/tools/perf/core/tbmv3/run_tbmv3_metric.py
index 18cd40c..58b0c4c 100755
--- a/tools/perf/core/tbmv3/run_tbmv3_metric.py
+++ b/tools/perf/core/tbmv3/run_tbmv3_metric.py
@@ -11,7 +11,7 @@
 import os
 import sys
 
-# TODO(crbug.com/1012687): Adding tools/perf to path. We can remove this when
+# TODO(crbug.com/40102479): Adding tools/perf to path. We can remove this when
 # we have a wrapper script under tools/perf that sets up import paths more
 # nicely.
 sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..'))
diff --git a/tools/perf/core/tbmv3/trace_processor.py b/tools/perf/core/tbmv3/trace_processor.py
index f2f1fc8..60c62cf6 100644
--- a/tools/perf/core/tbmv3/trace_processor.py
+++ b/tools/perf/core/tbmv3/trace_processor.py
@@ -117,7 +117,7 @@
   """
   metric_suffix = '_metric'
   suffix_length = len(metric_suffix)
-  # TODO(crbug.com/1012687): Decide on whether metrics should always have
+  # TODO(crbug.com/40102479): Decide on whether metrics should always have
   # '_metric' suffix.
   if metric_name[-suffix_length:] == metric_suffix:
     scope = metric_name[:-suffix_length]
diff --git a/tools/perf/generate_perf_sharding.py b/tools/perf/generate_perf_sharding.py
index 39050e03..72a76224 100755
--- a/tools/perf/generate_perf_sharding.py
+++ b/tools/perf/generate_perf_sharding.py
@@ -341,7 +341,7 @@
               benchmark=benchmark, path=platform.shards_map_file_path))
 
   # Check that every official benchmark is scheduled on some shard map.
-  # TODO(crbug.com/963614): Note that this check can be deleted if we
+  # TODO(crbug.com/40627632): Note that this check can be deleted if we
   # find some way other than naming the benchmark with prefix "UNSCHEDULED_"
   # to make it clear that a benchmark is not running.
   scheduled_benchmarks = set()
diff --git a/tools/perf/page_sets/rendering/key_silk_cases.py b/tools/perf/page_sets/rendering/key_silk_cases.py
index b645fb1..3d5a3c3 100644
--- a/tools/perf/page_sets/rendering/key_silk_cases.py
+++ b/tools/perf/page_sets/rendering/key_silk_cases.py
@@ -570,7 +570,7 @@
       action_runner.WaitForJavaScriptCondition('window.done')
 
 
-# TODO(crbug.com/760553):remove this class after smoothness.key_silk_cases
+# TODO(crbug.com/40537750):remove this class after smoothness.key_silk_cases
 # benchmark is completely replaced by rendering benchmarks
 class KeySilkCasesPageSet(story.StorySet):
 
diff --git a/tools/perf/page_sets/rendering/tough_animation_cases.py b/tools/perf/page_sets/rendering/tough_animation_cases.py
index 1b57af1..227008f4 100644
--- a/tools/perf/page_sets/rendering/tough_animation_cases.py
+++ b/tools/perf/page_sets/rendering/tough_animation_cases.py
@@ -604,7 +604,7 @@
   BASE_NAME = 'offscreen_animation_no_damage'
   URL = 'file://../tough_animation_cases/offscreen_animation_no_damage.html'
 
-# TODO(crbug.com/760553):remove this class after
+# TODO(crbug.com/40537750):remove this class after
 # smoothness.tough_animation_cases benchmark is completely
 # replaced by rendering benchmarks
 class ToughAnimationCasesPageSet(story.StorySet):
diff --git a/tools/perf/page_sets/rendering/tough_compositor_cases.py b/tools/perf/page_sets/rendering/tough_compositor_cases.py
index dec4e42..4812002 100644
--- a/tools/perf/page_sets/rendering/tough_compositor_cases.py
+++ b/tools/perf/page_sets/rendering/tough_compositor_cases.py
@@ -168,6 +168,38 @@
          'js_opacity_plus_n_layers.html?layer_count=306&visible_layers=46')
 
 
+# Why: JS driven layer creation with 0%-ile layer count """
+class JSToggleLayerPlusNLayers0(ToughCompositorWaitPage):
+  BASE_NAME = 'js_toggle_layer_plus_n_layers_0'
+  SUPPORTED_PLATFORMS = platforms.MOBILE_ONLY
+  URL = ('file://../../../../chrome/test/data/perf/tough_compositor_cases/'
+         'js_toggle_layer_plus_n_layers.html?layer_count=1&visible_layers=1')
+
+
+# Why: JS driven layer creation with 50%-ile layer count """
+class JSToggleLayerPlusNLayers50(ToughCompositorWaitPage):
+  BASE_NAME = 'js_toggle_layer_plus_n_layers_50'
+  SUPPORTED_PLATFORMS = platforms.NO_PLATFORMS
+  URL = ('file://../../../../chrome/test/data/perf/tough_compositor_cases/'
+         'js_toggle_layer_plus_n_layers.html?layer_count=31&visible_layers=10')
+
+
+# Why: JS driven layer creation with 75%-ile layer count """
+class JSToggleLayerPlusNLayers75(ToughCompositorWaitPage):
+  BASE_NAME = 'js_toggle_layer_plus_n_layers_75'
+  SUPPORTED_PLATFORMS = platforms.MOBILE_ONLY
+  URL = ('file://../../../../chrome/test/data/perf/tough_compositor_cases/'
+         'js_toggle_layer_plus_n_layers.html?layer_count=53&visible_layers=16')
+
+
+# Why: JS driven layer creation with 99%-ile layer count """
+class JSToggleLayerPlusNLayers99(ToughCompositorWaitPage):
+  BASE_NAME = 'js_toggle_layer_plus_n_layers_99'
+  SUPPORTED_PLATFORMS = platforms.ALL_PLATFORMS
+  URL = ('file://../../../../chrome/test/data/perf/tough_compositor_cases/'
+         'js_toggle_layer_plus_n_layers.html?layer_count=306&visible_layers=46')
+
+
 # Why: Painting 1 layer baseline """
 class JSPaintPlusNLayers0(ToughCompositorWaitPage):
   BASE_NAME = 'js_paint_plus_n_layers_0'
diff --git a/tools/perf/page_sets/system_health/browsing_stories.py b/tools/perf/page_sets/system_health/browsing_stories.py
index f8ff7815..4d231742 100644
--- a/tools/perf/page_sets/system_health/browsing_stories.py
+++ b/tools/perf/page_sets/system_health/browsing_stories.py
@@ -2042,7 +2042,7 @@
   TAGS = [
       story_tags.HEALTH_CHECK, story_tags.INFINITE_SCROLL, story_tags.YEAR_2021
   ]
-  # TODO(crbug.com/862077): Story breaks if login is skipped during replay.
+  # TODO(crbug.com/40584277): Story breaks if login is skipped during replay.
   SKIP_LOGIN = False
 
   def _Login(self, action_runner):
diff --git a/tools/perf/page_sets/system_health/long_running_stories.py b/tools/perf/page_sets/system_health/long_running_stories.py
index 972185db..93c2921 100644
--- a/tools/perf/page_sets/system_health/long_running_stories.py
+++ b/tools/perf/page_sets/system_health/long_running_stories.py
@@ -69,7 +69,7 @@
 
 class _LongRunningGmailMobileBase(_LongRunningGmailBase):
   SUPPORTED_PLATFORMS = platforms.MOBILE_ONLY
-  # TODO(crbug.com/862077): Story breaks if login is skipped during replay.
+  # TODO(crbug.com/40584277): Story breaks if login is skipped during replay.
   SKIP_LOGIN = False
 
   def _DidLoadDocument(self, action_runner):
diff --git a/tools/perf/process_perf_results.py b/tools/perf/process_perf_results.py
index 41cdaba..95b4e89 100755
--- a/tools/perf/process_perf_results.py
+++ b/tools/perf/process_perf_results.py
@@ -74,7 +74,7 @@
       if build_properties.get('builder_group', False):
         legacy_builder_group = build_properties['builder_group']
       else:
-        # TODO(crbug.com/1153958): remove reference to mastername.
+        # TODO(crbug.com/40159248): remove reference to mastername.
         legacy_builder_group = build_properties['mastername']
       if builder_group_mapping.get(legacy_builder_group):
         machine_group = builder_group_mapping[legacy_builder_group]
@@ -130,7 +130,7 @@
   if _is_histogram(json_to_upload):
     args.append('--send-as-histograms')
 
-  #TODO(crbug.com/1072729): log this in top level
+  #TODO(crbug.com/40127249): log this in top level
   logging.info('upload_results_to_perf_dashboard: %s.' % args)
 
   # Duplicate part of the results upload to staging.
@@ -239,7 +239,7 @@
             # flakiness dashboard since we don't monitor the ref build
             test_results_list.append(json_results)
       except IOError as e:
-        # TODO(crbug.com/936602): Figure out how to surface these errors. Should
+        # TODO(crbug.com/40615891): Figure out how to surface these errors. Should
         # we have a non-zero exit code if we error out?
         logging.error('Failed to obtain test results for %s: %s',
                       benchmark_name, e)
@@ -446,7 +446,7 @@
       with open(filename) as pf:
         collected_results.append(json.load(pf))
     except IOError as e:
-      # TODO(crbug.com/936602): Figure out how to surface these errors. Should
+      # TODO(crbug.com/40615891): Figure out how to surface these errors. Should
       # we have a non-zero exit code if we error out?
       logging.error('Failed to obtain perf results from %s: %s',
                     directory, e)
@@ -521,7 +521,7 @@
   try:
     cpu_count = multiprocessing.cpu_count()
     if sys.platform == 'win32':
-      # TODO(crbug.com/1190269) - we can't use more than 56
+      # TODO(crbug.com/40755900) - we can't use more than 56
       # cores on Windows or Python3 may hang.
       cpu_count = min(cpu_count, 56)
     return cpu_count
@@ -654,7 +654,7 @@
     output_json_file = os.path.join(
         output_results_dir, (str(uuid.uuid4()) + benchmark_name))
     results_dict[benchmark_name] = output_json_file
-    #TODO(crbug.com/1072729): pass final arguments instead of build properties
+    #TODO(crbug.com/40127249): pass final arguments instead of build properties
     # and configuration_name
     invocations.append((
         benchmark_name, directories, configuration_name,
@@ -670,7 +670,7 @@
   try:
     async_result = pool.map_async(
         _upload_individual_benchmark, invocations)
-    # TODO(crbug.com/947035): What timeout is reasonable?
+    # TODO(crbug.com/40620578): What timeout is reasonable?
     results = async_result.get(timeout=4000)
   except multiprocessing.TimeoutError:
     upload_result_timeout = True
diff --git a/tools/perf/pylintrc b/tools/perf/pylintrc
index b2f08fb..9d44dba 100644
--- a/tools/perf/pylintrc
+++ b/tools/perf/pylintrc
@@ -30,7 +30,7 @@
   too-many-public-methods,
   too-many-statements,
   too-many-return-statements,
-  # TODO(crbug/1342770): added for pylint 2.7
+  # TODO(crbug.com/40231155): added for pylint 2.7
   raise-missing-from, # python3 only
   useless-object-inheritance, # python3 only
   super-with-arguments, # python3 only
diff --git a/tools/perf/scripts_smoke_unittest.py b/tools/perf/scripts_smoke_unittest.py
index 1061b358..af74dd4 100644
--- a/tools/perf/scripts_smoke_unittest.py
+++ b/tools/perf/scripts_smoke_unittest.py
@@ -29,7 +29,7 @@
     self.options = options_for_unittests.GetCopy()
 
   def RunPerfScript(self, args, env=None):
-    # TODO(crbug.com/985712): Switch all clients to pass a list of args rather
+    # TODO(crbug.com/40636798): Switch all clients to pass a list of args rather
     # than a string which we may not be parsing correctly.
     if not isinstance(args, list):
       args = args.split(' ')
diff --git a/tools/polymer/css_to_wrapper.py b/tools/polymer/css_to_wrapper.py
index 69a70225..5f9e90c 100644
--- a/tools/polymer/css_to_wrapper.py
+++ b/tools/polymer/css_to_wrapper.py
@@ -43,7 +43,7 @@
 `.content);
 styleMod.register(\'%(id)s\');"""
 
-_POLYMER_VARS_TEMPLATE = """%(imports)s
+_VARS_TEMPLATE = """%(imports)s
 export {};
 
 const sheet = new CSSStyleSheet();
@@ -59,18 +59,12 @@
   return instance || (instance = [...[%(deps)s], css`%(content)s`]);
 }"""
 
-_LIT_VARS_TEMPLATE = """import {css} from '%(scheme)s//resources/lit/v3_0/lit.rollup.js';
-%(imports)s
-
-const result = css`%(content)s`;
-document.adoptedStyleSheets = [...document.adoptedStyleSheets, result.styleSheet!];"""
-
 # Map holding all the different types of CSS files to generate wrappers for.
 _TEMPLATE_MAP = {
     'style': _POLYMER_STYLE_TEMPLATE,
     'style-lit': _LIT_STYLE_TEMPLATE,
-    'vars': _POLYMER_VARS_TEMPLATE,
-    'vars-lit': _LIT_VARS_TEMPLATE,
+    'vars': _VARS_TEMPLATE,
+    'vars-lit': _VARS_TEMPLATE,
 }
 
 # A suffix used for style files that are copies of Polymer styles ported into
diff --git a/tools/polymer/css_to_wrapper_test.py b/tools/polymer/css_to_wrapper_test.py
index abccd80..6c4fd5d 100755
--- a/tools/polymer/css_to_wrapper_test.py
+++ b/tools/polymer/css_to_wrapper_test.py
@@ -91,7 +91,7 @@
   def testCssToWrapperVarsLit(self):
     self._run_test('css_to_wrapper/foo_vars_lit_only.css',
                    'css_to_wrapper/foo_vars_lit_only.css.ts',
-                   'css_to_wrapper/expected/foo_vars_lit_only.css.ts')
+                   'css_to_wrapper/expected/foo_vars.css.ts')
 
   def testCssToWrapperMinify(self):
     self._run_test('css_to_wrapper/foo_style.css',
diff --git a/tools/polymer/tests/css_to_wrapper/expected/foo_vars_lit_only.css.ts b/tools/polymer/tests/css_to_wrapper/expected/foo_vars_lit_only.css.ts
deleted file mode 100644
index 64afca9..0000000
--- a/tools/polymer/tests/css_to_wrapper/expected/foo_vars_lit_only.css.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-import {css} from 'chrome://resources/lit/v3_0/lit.rollup.js';
-import './other1.css.js';
-import './other2.css.js';
-
-const result = css`
-html {
-  --my-var: 9px;
-}
-
-@media (prefers-color-scheme: dark) {
-  html {
-    --my-var: 10px;
-  }
-}`;
-document.adoptedStyleSheets = [...document.adoptedStyleSheets, result.styleSheet!];
\ No newline at end of file
diff --git a/tools/rust/README.md b/tools/rust/README.md
index dc473162..4a6c5d1 100644
--- a/tools/rust/README.md
+++ b/tools/rust/README.md
@@ -184,7 +184,7 @@
 
 - Run manual tests locally (see the "Building and testing the tools locally"
   section below).
-  TODO(https://crbug.com/1329611): These manual steps should
+  TODO(crbug.com/40226863): These manual steps should
   be made obsolete once Rust-specific tryjobs cover Crubit
   tests.
 
@@ -233,5 +233,5 @@
 Crubit tests are under `//build/rust/tests/test_rs_bindings_from_cc`.  Until
 Crubit is built on the bots, the tests are commented out in
 `//build/rust/tests/BUILD.gn`, but they should still be built and run before
-rolling Crubit.  TODO(https://crbug.com/1329611): Rephrase this paragraph
+rolling Crubit.  TODO(crbug.com/40226863): Rephrase this paragraph
 after Crubit is built and tested on the bots.
diff --git a/tools/rust/build_rust.py b/tools/rust/build_rust.py
index 7d00e4f..060dcaf 100755
--- a/tools/rust/build_rust.py
+++ b/tools/rust/build_rust.py
@@ -29,7 +29,7 @@
 Ideally our build would begin with our own trusted stage0 rustc. As it is
 simpler, for now we use an official build.
 
-TODO(https://crbug.com/1245714): Do a proper 3-stage build
+TODO(crbug.com/40196262): Do a proper 3-stage build
 
 '''
 
@@ -147,7 +147,7 @@
 OPENSSL_CIPD_MAC_AMD_VERSION = '1.1.1j.chromium.2'
 OPENSSL_CIPD_MAC_ARM_PATH = 'infra/3pp/static_libs/openssl/mac-arm64'
 OPENSSL_CIPD_MAC_ARM_VERSION = '1.1.1j.chromium.2'
-# TODO(crbug.com/1271215): Pull Windows OpenSSL from 3pp when it exists.
+# TODO(crbug.com/40205621): Pull Windows OpenSSL from 3pp when it exists.
 
 if sys.platform == 'win32':
     LD_PATH_FLAG = '/LIBPATH:'
@@ -706,7 +706,7 @@
     else:
         libxml2_dirs = None
 
-    # TODO(crbug.com/1271215): OpenSSL is somehow already present on the Windows
+    # TODO(crbug.com/40205621): OpenSSL is somehow already present on the Windows
     # builder, but we should change to using a package from 3pp when it is
     # available.
     if (sys.platform != 'win32' and not args.sync_for_gnrt):
diff --git a/tools/rust/package_rust.py b/tools/rust/package_rust.py
index 3de009d..fc76052 100755
--- a/tools/rust/package_rust.py
+++ b/tools/rust/package_rust.py
@@ -26,7 +26,7 @@
 RUST_TOOLCHAIN_PACKAGE_NAME = f'rust-toolchain-{PACKAGE_VERSION}.tar.xz'
 
 
-# TODO(https://crbug.com/1329611): Use this function (after integrating Crubit
+# TODO(crbug.com/40226863): Use this function (after integrating Crubit
 # into Chromium; this work is on hold right now - see also
 # https://crbug.com/1510943#c2).
 def BuildCrubit(build_mac_arm):
@@ -34,12 +34,12 @@
         build_cmd = [sys.executable, os.path.join(THIS_DIR, 'build_crubit.py')]
         if build_mac_arm:
             build_cmd.append('--build-mac-arm')
-        # TODO(https://crbug.com/1329611): Default to `fail_hard` once we
+        # TODO(crbug.com/40226863): Default to `fail_hard` once we
         # actually depend on the build step (i.e. once we start packaging
         # Crubit).
         TeeCmd(build_cmd, log, fail_hard=False)
 
-    # TODO(https://crbug.com/1329611): Rename this function to
+    # TODO(crbug.com/40226863): Rename this function to
     # BuildAndInstallCrubit and actually install Crubit binaries into
     # RUST_TOOLCHAIN_OUT_DIR/bin (once we gain confidence that Crubit continues
     # to build uneventfully on the bots).
diff --git a/tools/rust/update_rust.py b/tools/rust/update_rust.py
index 029016f..c35ab40 100755
--- a/tools/rust/update_rust.py
+++ b/tools/rust/update_rust.py
@@ -35,8 +35,8 @@
 # In the case that a Rust roll fails and you want to roll Clang alone, reset
 # this back to its previous value _AND_ set `OVERRIDE_CLANG_REVISION` below
 # to the `CLANG_REVISION` that was in place before the roll.
-RUST_REVISION = '584f183dc0e0ce8d981811ebbf67886c0cfef9e0'
-RUST_SUB_REVISION = 2
+RUST_REVISION = '31e6e8c6c5b6ce62656c922c7384d3376018c980'
+RUST_SUB_REVISION = 1
 
 # If not None, this overrides the `CLANG_REVISION` in
 # //tools/clang/scripts/update.py in order to download a Rust toolchain that
diff --git a/tools/search_engine_choice/generate_search_engine_icons.py b/tools/search_engine_choice/generate_search_engine_icons.py
index 7bf40f0..34e5f4f 100644
--- a/tools/search_engine_choice/generate_search_engine_icons.py
+++ b/tools/search_engine_choice/generate_search_engine_icons.py
@@ -71,6 +71,9 @@
     for (engine, keyword
          ) in search_engine_icons_utils.get_used_engines_with_keywords(src_dir)
 }
+# Sort the engines so that the order of the engines in the generated files is
+# deterministic.
+engine_keywords = sorted(engine_keywords)
 generate_icon_path_map(generated_icon_utils_file, engine_keywords)
 generate_icon_resource_id_map(generated_search_engine_resource_ids_file,
                               engine_keywords)
diff --git a/tools/style_variable_generator/templates/css_generator.tmpl b/tools/style_variable_generator/templates/css_generator.tmpl
index 9f6add5a..5fe97bf 100644
--- a/tools/style_variable_generator/templates/css_generator.tmpl
+++ b/tools/style_variable_generator/templates/css_generator.tmpl
@@ -45,7 +45,7 @@
 {#
 The :not(body) adds extra selector specificity so that these colors 'win'
 against paper-styles/color.html.
-TODO(https://crbug.com/1062154): Remove once deprecated colors are removed from
+TODO(crbug.com/40122747): Remove once deprecated colors are removed from
 Chrome OS pages.
 -#}
 html:not(body) {
@@ -98,7 +98,7 @@
 {#-
 The :not(body) adds extra selector specificity so that these colors 'win'
 against paper-styles/color.html.
-TODO(https://crbug.com/1062154): Remove once deprecated colors are removed from
+TODO(crbug.com/40122747): Remove once deprecated colors are removed from
 Chrome OS pages.
 #}
 html:not(body) {
diff --git a/tools/tracing/metadata_extractor.py b/tools/tracing/metadata_extractor.py
index 17aea88..4fdf99f2 100644
--- a/tools/tracing/metadata_extractor.py
+++ b/tools/tracing/metadata_extractor.py
@@ -97,7 +97,7 @@
   def Initialize(self):
     """Extracts metadata from perfetto system trace.
     """
-    # TODO(crbug/1239694): Implement Trace Processor method to run multiple
+    # TODO(crbug.com/40193968): Implement Trace Processor method to run multiple
     # SQL queries without processing trace for every query.
 
     if self._initialized:
diff --git a/tools/tracing/profile_chrome_startup b/tools/tracing/profile_chrome_startup
index a40b6eb..af1de5f 100755
--- a/tools/tracing/profile_chrome_startup
+++ b/tools/tracing/profile_chrome_startup
@@ -58,7 +58,7 @@
   # Run Tracing
   trace_file = None
   if options.platform.lower() == 'android':
-    # TODO(crbug/1239748): Fix manual tracing. Setting flag --time=0 stalls and fails
+    # TODO(crbug.com/40193989): Fix manual tracing. Setting flag --time=0 stalls and fails
     # to download the collected trace.
     trace_file = adb_profile_chrome_startup.ProfileChrome(options)
   else:
diff --git a/tools/traffic_annotation/safe_list.txt b/tools/traffic_annotation/safe_list.txt
index 30e370d..10e42e8e 100644
--- a/tools/traffic_annotation/safe_list.txt
+++ b/tools/traffic_annotation/safe_list.txt
@@ -29,7 +29,7 @@
 missing,components/manta/mahi_provider.cc
 
 # Android-specific annotations.
-# TODO(crbug.com/995852): Complete these.
+# TODO(crbug.com/40641204): Complete these.
 missing,android_webview/browser/network_service/aw_proxy_config_monitor.cc
 missing,chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/suggestions/TabSuggestionsServerFetcher.java
 missing,chrome/android/java/src/org/chromium/chrome/browser/download/OMADownloadHandler.java
diff --git a/tools/traffic_annotation/scripts/extractor.py b/tools/traffic_annotation/scripts/extractor.py
index b3126af..aa13bfc 100755
--- a/tools/traffic_annotation/scripts/extractor.py
+++ b/tools/traffic_annotation/scripts/extractor.py
@@ -250,7 +250,7 @@
   """
   # Look for "//" on the same line in the reversed string.
   return bool(re.match(r'[^\n]*//', string[pos::-1]))
-  # TODO(crbug/966883): Add multi-line comment support.
+  # TODO(crbug.com/40629071): Add multi-line comment support.
 
 
 def may_contain_annotations(file_path: Path) -> bool:
@@ -374,7 +374,7 @@
   annotation_definitions = []
 
   # Parse all the files.
-  # TODO(crbug/966883): Do this in parallel.
+  # TODO(crbug.com/40629071): Do this in parallel.
   for file_path in args.file_paths:
     if not args.no_filter and file_path.resolve() not in compdb_files:
       continue
diff --git a/tools/traffic_annotation/summary/annotations.xml b/tools/traffic_annotation/summary/annotations.xml
index 66b5550..cbb98e4 100644
--- a/tools/traffic_annotation/summary/annotations.xml
+++ b/tools/traffic_annotation/summary/annotations.xml
@@ -69,7 +69,7 @@
  <item id="downloads_dom_handler" added_in_milestone="73" content_hash_code="082cc10b" os_list="linux,windows,chromeos" file_path="chrome/browser/ui/webui/downloads/downloads_dom_handler.cc" />
  <item id="drag_download_file" added_in_milestone="62" content_hash_code="078a20ba" os_list="linux,windows,chromeos,android" file_path="content/browser/download/drag_download_file.cc" />
  <item id="drive_service" added_in_milestone="90" content_hash_code="059e2023" os_list="linux,windows,chromeos" file_path="chrome/browser/new_tab_page/modules/file_suggestion/drive_service.cc" />
- <item id="early_hints_preload" added_in_milestone="91" content_hash_code="028fe27a" os_list="linux,windows,chromeos,android" file_path="content/browser/loader/navigation_early_hints_manager.cc" />
+ <item id="early_hints_preload" added_in_milestone="91" content_hash_code="075686e5" os_list="linux,windows,chromeos,android" file_path="content/browser/loader/navigation_early_hints_manager.cc" />
  <item id="enterprise_safe_browsing_realtime_url_lookup" added_in_milestone="86" content_hash_code="00d66dca" os_list="linux,windows,chromeos" file_path="chrome/browser/safe_browsing/chrome_enterprise_url_lookup_service.cc" />
  <item id="extension_blacklist" added_in_milestone="62" content_hash_code="06f7911b" os_list="linux,windows,chromeos" file_path="chrome/browser/extensions/blocklist_state_fetcher.cc" />
  <item id="extension_crx_fetcher" added_in_milestone="62" content_hash_code="05d3e86d" os_list="linux,windows,chromeos" file_path="extensions/browser/updater/extension_downloader.cc" />
@@ -464,5 +464,6 @@
  <item id="wallpaper_request" added_in_milestone="125" content_hash_code="0192ac19" os_list="chromeos" file_path="chrome/browser/ash/wallpaper_handlers/sea_pen_fetcher.cc" />
  <item id="cws_fetch_item_snippet" added_in_milestone="124" content_hash_code="05d82ce1" os_list="linux,windows,chromeos" file_path="chrome/browser/extensions/webstore_data_fetcher.cc" />
  <item id="remoting_cloud_provision_gce_instance" added_in_milestone="125" content_hash_code="020ad462" os_list="linux,windows,android,chromeos" file_path="remoting/base/cloud_service_client.cc" />
- <item id="lens_overlay" added_in_milestone="125" content_hash_code="06fbffac" os_list="linux,windows,chromeos" file_path="chrome/browser/lens/lens_overlay/lens_overlay_query_controller.cc" />
+ <item id="lens_overlay" added_in_milestone="125" content_hash_code="06fbffac" os_list="linux,windows,chromeos" file_path="chrome/browser/ui/lens/lens_overlay_query_controller.cc" />
+ <item id="register_push_notification_service" added_in_milestone="124" type="partial" second_id="oauth2_api_call_flow" content_hash_code="04e0c60d" os_list="chromeos" semantics_fields="1,2,3,4,5,7,8,9" policy_fields="3,4" file_path="chrome/browser/push_notification/server_client/push_notification_server_client_desktop_impl.cc" />
 </annotations>
diff --git a/tools/traffic_annotation/summary/grouping.xml b/tools/traffic_annotation/summary/grouping.xml
index 59d04a94..da00cc1d 100644
--- a/tools/traffic_annotation/summary/grouping.xml
+++ b/tools/traffic_annotation/summary/grouping.xml
@@ -322,6 +322,7 @@
       <annotation id="cws_fetch_item_snippet"/>
       <annotation id="remoting_cloud_provision_gce_instance"/>
       <annotation id="lens_overlay"/>
+      <annotation id="register_push_notification_service"/>
     </sender>
   </group>
   <group name="Admin Features" hidden="true">
diff --git a/tools/typescript/definitions/accessibility_features.d.ts b/tools/typescript/definitions/accessibility_features.d.ts
index 9675d21..e4c285c 100644
--- a/tools/typescript/definitions/accessibility_features.d.ts
+++ b/tools/typescript/definitions/accessibility_features.d.ts
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 /** @fileoverview Definitions for chrome.accessibilityFeatures API. */
-// TODO(crbug.com/1203307): Auto-generate this file
+// TODO(crbug.com/40179454): Auto-generate this file
 // from chrome/common/extensions/api/accessibility_features.json.
 
 import {ChromeEvent} from './chrome_event.js';
diff --git a/tools/typescript/definitions/activity_log_private.d.ts b/tools/typescript/definitions/activity_log_private.d.ts
index d8c899a..8350be64 100644
--- a/tools/typescript/definitions/activity_log_private.d.ts
+++ b/tools/typescript/definitions/activity_log_private.d.ts
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 /** @fileoverview Definitions for chrome.activityLogPrivate API. */
-// TODO(crbug.com/1203307): Auto-generate this file.
+// TODO(crbug.com/40179454): Auto-generate this file.
 
 import {ChromeEvent} from './chrome_event.js';
 
diff --git a/tools/typescript/definitions/autofill_private.d.ts b/tools/typescript/definitions/autofill_private.d.ts
index 5f1caf5..125ee67 100644
--- a/tools/typescript/definitions/autofill_private.d.ts
+++ b/tools/typescript/definitions/autofill_private.d.ts
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 /** @fileoverview Definitions for chrome.autofillPrivate API */
-// TODO(crbug.com/1203307): Auto-generate this file.
+// TODO(crbug.com/40179454): Auto-generate this file.
 
 import {ChromeEvent} from './chrome_event.js';
 
diff --git a/tools/typescript/definitions/bookmark_manager_private.d.ts b/tools/typescript/definitions/bookmark_manager_private.d.ts
index 97ec32e..28b1358 100644
--- a/tools/typescript/definitions/bookmark_manager_private.d.ts
+++ b/tools/typescript/definitions/bookmark_manager_private.d.ts
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 /** @fileoverview Definitions for chrome.bookmarkManagerPrivate API. */
-// TODO(crbug.com/1203307): Auto-generate this file.
+// TODO(crbug.com/40179454): Auto-generate this file.
 
 import {ChromeEvent} from './chrome_event.js';
 
diff --git a/tools/typescript/definitions/bookmarks.d.ts b/tools/typescript/definitions/bookmarks.d.ts
index e7e3269..e2dc031 100644
--- a/tools/typescript/definitions/bookmarks.d.ts
+++ b/tools/typescript/definitions/bookmarks.d.ts
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 /** @fileoverview Definitions for chrome.bookmarks API. */
-// TODO(crbug.com/1203307): Auto-generate this file.
+// TODO(crbug.com/40179454): Auto-generate this file.
 
 import {ChromeEvent} from './chrome_event.js';
 
diff --git a/tools/typescript/definitions/chrome_test.d.ts b/tools/typescript/definitions/chrome_test.d.ts
index 4172e5c..769e95e 100644
--- a/tools/typescript/definitions/chrome_test.d.ts
+++ b/tools/typescript/definitions/chrome_test.d.ts
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 /** @fileoverview Definitions for chrome.test API */
-// TODO(crbug.com/1203307): Auto-generate this file.
+// TODO(crbug.com/40179454): Auto-generate this file.
 
 declare namespace chrome {
   export namespace test {
diff --git a/tools/typescript/definitions/chromeos_info_private.d.ts b/tools/typescript/definitions/chromeos_info_private.d.ts
index 9a7f19eb..44e422a 100644
--- a/tools/typescript/definitions/chromeos_info_private.d.ts
+++ b/tools/typescript/definitions/chromeos_info_private.d.ts
@@ -109,5 +109,7 @@
 
     export function isTabletModeEnabled(): Promise<boolean>;
 
+    export function isRunningOnLacros(): Promise<boolean>;
+
   }
-}
\ No newline at end of file
+}
diff --git a/tools/typescript/definitions/developer_private.d.ts b/tools/typescript/definitions/developer_private.d.ts
index e2354706..7fb0cb39 100644
--- a/tools/typescript/definitions/developer_private.d.ts
+++ b/tools/typescript/definitions/developer_private.d.ts
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 /** @fileoverview Definitions for chrome.developerPrivate API */
-// TODO(crbug.com/1203307): Auto-generate this file.
+// TODO(crbug.com/40179454): Auto-generate this file.
 
 import {ChromeEvent} from './chrome_event.js';
 
diff --git a/tools/typescript/definitions/feedback_private.d.ts b/tools/typescript/definitions/feedback_private.d.ts
index 39793be0..8fb852a 100644
--- a/tools/typescript/definitions/feedback_private.d.ts
+++ b/tools/typescript/definitions/feedback_private.d.ts
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 /** @fileoverview Definitions for chrome.feedbackPrivate API */
-// TODO(crbug.com/1203307): Auto-generate this file.
+// TODO(crbug.com/40179454): Auto-generate this file.
 
 declare namespace chrome {
   export namespace feedbackPrivate {
diff --git a/tools/typescript/definitions/input_method_private.d.ts b/tools/typescript/definitions/input_method_private.d.ts
index abc44424..3b9486c 100644
--- a/tools/typescript/definitions/input_method_private.d.ts
+++ b/tools/typescript/definitions/input_method_private.d.ts
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 /** @fileoverview Definitions for chrome.inputMethodPrivate API */
-// TODO(crbug.com/1203307): Auto-generate this file.
+// TODO(crbug.com/40179454): Auto-generate this file.
 
 import {ChromeEvent} from './chrome_event.js';
 
diff --git a/tools/typescript/definitions/language_settings_private.d.ts b/tools/typescript/definitions/language_settings_private.d.ts
index c51c21d1..4a0ceb3 100644
--- a/tools/typescript/definitions/language_settings_private.d.ts
+++ b/tools/typescript/definitions/language_settings_private.d.ts
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 /** @fileoverview Definitions for chrome.languageSettingsPrivate API */
-// TODO(crbug.com/1203307): Auto-generate this file.
+// TODO(crbug.com/40179454): Auto-generate this file.
 
 import {ChromeEvent} from './chrome_event.js';
 
diff --git a/tools/typescript/definitions/management.d.ts b/tools/typescript/definitions/management.d.ts
index e04025c..cd50527b 100644
--- a/tools/typescript/definitions/management.d.ts
+++ b/tools/typescript/definitions/management.d.ts
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 /** @fileoverview Definitions for chrome.management API. */
-// TODO(crbug.com/1203307): Auto-generate this file.
+// TODO(crbug.com/40179454): Auto-generate this file.
 
 declare namespace chrome {
   export namespace management {
@@ -17,7 +17,7 @@
       mayDisable: boolean;
       mayEnable?: boolean;
       enabled: boolean;
-      // TODO(crbug.com/1189595): Define commented out fields as needed.
+      // TODO(crbug.com/40173780): Define commented out fields as needed.
       //disabledReason?: ExtensionDisabledReason;
       isApp: boolean;
       //type: ExtensionType;
diff --git a/tools/typescript/definitions/mime_handler_private.d.ts b/tools/typescript/definitions/mime_handler_private.d.ts
index 6ee85fe2..e37c57d 100644
--- a/tools/typescript/definitions/mime_handler_private.d.ts
+++ b/tools/typescript/definitions/mime_handler_private.d.ts
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 /** @fileoverview Definitions for chrome.mimeHandlerPrivate API. */
-// TODO(crbug.com/1203307): Auto-generate this file.
+// TODO(crbug.com/40179454): Auto-generate this file.
 
 import {ChromeEvent} from './chrome_event.js';
 
diff --git a/tools/typescript/definitions/notifications.d.ts b/tools/typescript/definitions/notifications.d.ts
index 87bd889..1b7b1e1 100644
--- a/tools/typescript/definitions/notifications.d.ts
+++ b/tools/typescript/definitions/notifications.d.ts
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 /** @fileoverview Minimum definitions for chrome.notifications API */
-// TODO(crbug.com/1203307): Auto-generate this file.
+// TODO(crbug.com/40179454): Auto-generate this file.
 
 import {ChromeEvent} from './chrome_event.js';
 
diff --git a/tools/typescript/definitions/passwords_private.d.ts b/tools/typescript/definitions/passwords_private.d.ts
index 159bf283..1824d4b 100644
--- a/tools/typescript/definitions/passwords_private.d.ts
+++ b/tools/typescript/definitions/passwords_private.d.ts
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 /** @fileoverview Definitions for chrome.passwordsPrivate API */
-// TODO(crbug.com/1203307): Auto-generate this file.
+// TODO(crbug.com/40179454): Auto-generate this file.
 
 import {ChromeEvent} from './chrome_event.js';
 
diff --git a/tools/typescript/definitions/pdf_viewer_private.d.ts b/tools/typescript/definitions/pdf_viewer_private.d.ts
index 8cf9e83..7a73ce43 100644
--- a/tools/typescript/definitions/pdf_viewer_private.d.ts
+++ b/tools/typescript/definitions/pdf_viewer_private.d.ts
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 /** @fileoverview Definitions for chrome.pdfViewerPrivate API. */
-// TODO(crbug.com/1203307): Auto-generate this file.
+// TODO(crbug.com/40179454): Auto-generate this file.
 
 import {ChromeEvent} from './chrome_event.js';
 
diff --git a/tools/typescript/definitions/quick_unlock_private.d.ts b/tools/typescript/definitions/quick_unlock_private.d.ts
index c112cc4..9c5ab8a 100644
--- a/tools/typescript/definitions/quick_unlock_private.d.ts
+++ b/tools/typescript/definitions/quick_unlock_private.d.ts
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 /** @fileoverview Definitions for chrome.quickUnlockPrivate API */
-// TODO(crbug.com/1203307): Auto-generate this file.
+// TODO(crbug.com/40179454): Auto-generate this file.
 
 import {ChromeEvent} from './chrome_event.js';
 
@@ -37,42 +37,42 @@
         maxLength: number;
       }
 
-      // TODO(crbug/1368302) Update to use promises instead of callback
+      // TODO(crbug.com/40240258) Update to use promises instead of callback
       export const onActiveModesChanged:
           ChromeEvent<(activeModes: QuickUnlockMode[]) => void>;
 
-      // TODO(crbug/1368302) Update to use promises instead of callback
+      // TODO(crbug.com/40240258) Update to use promises instead of callback
       export function canAuthenticatePin(
           onComplete: (success: boolean) => void): void;
 
-      // TODO(crbug/1368302) Update to use promises instead of callback
+      // TODO(crbug.com/40240258) Update to use promises instead of callback
       export function getActiveModes(
           onComplete: (modes: QuickUnlockMode[]) => void): void;
 
-      // TODO(crbug/1368302) Update to use promises instead of callback
+      // TODO(crbug.com/40240258) Update to use promises instead of callback
       export function getAuthToken(
           accountPassword: string, onComplete: (info: TokenInfo) => void): void;
 
-      // TODO(crbug/1368302) Update to use promises instead of callback
+      // TODO(crbug.com/40240258) Update to use promises instead of callback
       export function setLockScreenEnabled(
           token: string, enabled: boolean, onComplete?: () => void): void;
 
-      // TODO(crbug/1368302) Update to use promises instead of callback
+      // TODO(crbug.com/40240258) Update to use promises instead of callback
       export function setModes(
           token: string, modes: QuickUnlockMode[], credentials: string[],
           onComplete: () => void): void;
 
-      // TODO(crbug/1368302) Update to use promises instead of callback
+      // TODO(crbug.com/40240258) Update to use promises instead of callback
       export function setPinAutosubmitEnabled(
           token: string, pin: string, enabled: boolean,
           onComplete: (success: boolean) => void): void;
 
-      // TODO(crbug/1368302) Update to use promises instead of callback
+      // TODO(crbug.com/40240258) Update to use promises instead of callback
       export function checkCredential(
           mode: QuickUnlockMode, credential: string,
           onComplete: (check: CredentialCheck) => void): void;
 
-      // TODO(crbug/1368302) Update to use promises instead of callback
+      // TODO(crbug.com/40240258) Update to use promises instead of callback
       export function getCredentialRequirements(
           mode: QuickUnlockMode,
           onComplete: (requirements: CredentialRequirements) => void): void;
diff --git a/tools/typescript/definitions/resources_private.d.ts b/tools/typescript/definitions/resources_private.d.ts
index 88c6a332..e714f56 100644
--- a/tools/typescript/definitions/resources_private.d.ts
+++ b/tools/typescript/definitions/resources_private.d.ts
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 /** @fileoverview Definitions for chrome.resourcesPrivate API. */
-// TODO(crbug.com/1203307): Auto-generate this file.
+// TODO(crbug.com/40179454): Auto-generate this file.
 
 declare namespace chrome {
   export namespace resourcesPrivate {
diff --git a/tools/typescript/definitions/runtime.d.ts b/tools/typescript/definitions/runtime.d.ts
index 3a635be9..cad6d96 100644
--- a/tools/typescript/definitions/runtime.d.ts
+++ b/tools/typescript/definitions/runtime.d.ts
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 /** @fileoverview Definitions for chrome.runtime API */
-// TODO(crbug.com/1203307): Auto-generate this file.
+// TODO(crbug.com/40179454): Auto-generate this file.
 
 import type {ChromeEvent} from './chrome_event.js';
 
diff --git a/tools/typescript/definitions/scripting.d.ts b/tools/typescript/definitions/scripting.d.ts
index 95af84d..a8d9e7aa 100644
--- a/tools/typescript/definitions/scripting.d.ts
+++ b/tools/typescript/definitions/scripting.d.ts
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 /** @fileoverview Definitions for chrome.scripting API. */
-// TODO(crbug.com/1203307): Auto-generate this file from
+// TODO(crbug.com/40179454): Auto-generate this file from
 // chrome/common/extensions/api/scripting.idl.
 
 declare namespace chrome {
diff --git a/tools/typescript/definitions/settings_private.d.ts b/tools/typescript/definitions/settings_private.d.ts
index 451df9a..1df097f 100644
--- a/tools/typescript/definitions/settings_private.d.ts
+++ b/tools/typescript/definitions/settings_private.d.ts
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 /** @fileoverview Definitions for chrome.settingsPrivate API */
-// TODO(crbug.com/1203307): Auto-generate this file.
+// TODO(crbug.com/40179454): Auto-generate this file.
 
 import {ChromeEvent} from './chrome_event.js';
 
@@ -35,8 +35,8 @@
         PARENT_SUPERVISED = 'PARENT_SUPERVISED',
       }
 
-      // TODO(crbug/1373934) Update existing usages of PrefObject to be typed,
-      // removing the need to use any here.
+      // TODO(crbug.com/40242259) Update existing usages of PrefObject to be
+      // typed, removing the need to use any here.
       export interface PrefObject<T = any> {
         key: string;
         type:
diff --git a/tools/typescript/definitions/system_display.d.ts b/tools/typescript/definitions/system_display.d.ts
index ff8fabf9..c509707 100644
--- a/tools/typescript/definitions/system_display.d.ts
+++ b/tools/typescript/definitions/system_display.d.ts
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 /** @fileoverview Type definitions for chrome.system.display API. */
-// TODO(crbug.com/1203307): Auto-generate this file.
+// TODO(crbug.com/40179454): Auto-generate this file.
 
 import {ChromeEvent} from './chrome_event.js';
 
diff --git a/tools/typescript/definitions/tabs.d.ts b/tools/typescript/definitions/tabs.d.ts
index 7d74be4c..66ac554ab 100644
--- a/tools/typescript/definitions/tabs.d.ts
+++ b/tools/typescript/definitions/tabs.d.ts
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 /** @fileoverview Definitions for chrome.tabs API. */
-// TODO(crbug.com/1203307): Auto-generate this file.
+// TODO(crbug.com/40179454): Auto-generate this file.
 
 import {ChromeEvent} from './chrome_event.js';
 
diff --git a/tools/typescript/definitions/users_private.d.ts b/tools/typescript/definitions/users_private.d.ts
index e831d7db..318fd45 100644
--- a/tools/typescript/definitions/users_private.d.ts
+++ b/tools/typescript/definitions/users_private.d.ts
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 /** @fileoverview Definitions for chrome.usersPrivate API */
-// TODO(crbug.com/1203307): Auto-generate this file.
+// TODO(crbug.com/40179454): Auto-generate this file.
 
 declare namespace chrome {
   export namespace usersPrivate {
diff --git a/tools/typescript/definitions/windows.d.ts b/tools/typescript/definitions/windows.d.ts
index 421502f..f03c1ce 100644
--- a/tools/typescript/definitions/windows.d.ts
+++ b/tools/typescript/definitions/windows.d.ts
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 /** @fileoverview Definitions for chrome.windows API. */
-// TODO(crbug.com/1203307): Auto-generate this file.
+// TODO(crbug.com/40179454): Auto-generate this file.
 
 declare namespace chrome {
   export namespace windows {
diff --git a/tools/typescript/path_mappings.py b/tools/typescript/path_mappings.py
index 20be8b40..168f35d3 100644
--- a/tools/typescript/path_mappings.py
+++ b/tools/typescript/path_mappings.py
@@ -140,7 +140,7 @@
     return True
 
   exceptions = [
-      # TODO(https://crbug.com/1506299): Remove this incorrect dependency
+      # TODO(crbug.com/40946949): Remove this incorrect dependency
       'chrome/browser/resources/settings',
   ]
 
diff --git a/tools/typescript/validate_tsconfig.py b/tools/typescript/validate_tsconfig.py
index eca3a83..adf95a0a 100644
--- a/tools/typescript/validate_tsconfig.py
+++ b/tools/typescript/validate_tsconfig.py
@@ -139,14 +139,14 @@
 
   # Specific exceptions for directories that are still migrating to TS.
   migrating_directories = [
-      # TODO(crbug.com/1337318): Migrate bluetooth-internals to TypeScript and
+      # TODO(crbug.com/40848285): Migrate bluetooth-internals to TypeScript and
       # remove exception.
       'chrome/browser/resources/bluetooth_internals',
       'chrome/browser/resources/chromeos/accessibility',
       # TODO(crbug.com/41484340): Migrate to TypeScript.
       'chrome/browser/resources/device_log',
       'chrome/test/data/webui',
-      # TODO(crbug.com/1337318): Migrate bluetooth-internals to TypeScript and
+      # TODO(crbug.com/40848285): Migrate bluetooth-internals to TypeScript and
       # remove exception.
       'chrome/test/data/webui/bluetooth_internals',
       'chrome/test/data/webui/chromeos',
diff --git a/tools/ubsan/ignorelist.txt b/tools/ubsan/ignorelist.txt
index add42cc..83992ba1 100644
--- a/tools/ubsan/ignorelist.txt
+++ b/tools/ubsan/ignorelist.txt
@@ -1,5 +1,5 @@
 #!special-case-list-v1
-# TODO(https://crbug.com/1515966): update to glob patterns
+# TODO(crbug.com/41488956): update to glob patterns
 
 #############################################################################
 # UBSan ignorelist.
diff --git a/tools/ubsan/security_ignorelist.txt b/tools/ubsan/security_ignorelist.txt
index 706bfade..50e90da 100644
--- a/tools/ubsan/security_ignorelist.txt
+++ b/tools/ubsan/security_ignorelist.txt
@@ -1,5 +1,5 @@
 #!special-case-list-v1
-# TODO(https://crbug.com/1515966): update to glob patterns
+# TODO(crbug.com/41488956): update to glob patterns
 
 # This ignore list is the subset of ignorelist.txt that's needed in
 # is_ubsan_security builds. is_ubsan_security builds also use
diff --git a/tools/utr/builders.py b/tools/utr/builders.py
index e066a88..d938c90 100644
--- a/tools/utr/builders.py
+++ b/tools/utr/builders.py
@@ -13,6 +13,8 @@
 # ensure tools/utr/recipe.py is not using the public reclient instance
 _BUILDER_PROP_DIRS = _SRC_DIR.joinpath('infra', 'config', 'generated',
                                        'builders')
+_INTERNAL_BUILDER_PROP_DIRS = _SRC_DIR.joinpath('internal', 'infra', 'config',
+                                                'generated', 'builders')
 
 
 def find_builder_props(bucket_name, builder_name):
@@ -26,21 +28,37 @@
     Tuple of (Dict of the builder's input props, Swarming server the builder
       runs on). Both elements will be None if the builder wasn't found.
   """
-  # TODO(crbug.com/41492688): Allow bucket_name to be optional?
+
+  def _walk_props_dir(props_dir):
+    matches = []
+    # TODO(crbug.com/41492688): Allow bucket_name to be optional?
+    for bucket_path in props_dir.iterdir():
+      if not bucket_path.is_dir() or bucket_path.name != bucket_name:
+        continue
+      for builder_path in bucket_path.iterdir():
+        if builder_path.name != builder_name:
+          continue
+        prop_file = builder_path.joinpath('properties.json')
+        if not prop_file.exists():
+          logging.warning(
+              'Found generated dir for builder at %s, but no prop file?',
+              builder_path)
+          continue
+        matches.append(prop_file)
+    return matches
+
+  swarming_server = 'chrome-swarming'
   possible_matches = []
-  for bucket_path in _BUILDER_PROP_DIRS.iterdir():
-    if not bucket_path.is_dir() or bucket_path.name != bucket_name:
-      continue
-    for builder_path in bucket_path.iterdir():
-      if builder_path.name != builder_name:
-        continue
-      prop_file = builder_path.joinpath('properties.json')
-      if not prop_file.exists():
-        logging.warning(
-            'Found generated dir for builder at %s, but no prop file?',
-            builder_path)
-        continue
-      possible_matches.append(prop_file)
+  if _INTERNAL_BUILDER_PROP_DIRS.exists():
+    possible_matches += _walk_props_dir(_INTERNAL_BUILDER_PROP_DIRS)
+
+  public_matches = _walk_props_dir(_BUILDER_PROP_DIRS)
+  if public_matches:
+    # It's probably safe to assume src implies chromium-swarm and src-internal
+    # implies chrome-swarming. If it's not, cr-buildbucket.cfg attaches the
+    # swarming to each and every builder. So could use that instead.
+    swarming_server = 'chromium-swarm'
+    possible_matches += public_matches
 
   if not possible_matches:
     logging.error(
@@ -59,8 +77,4 @@
   with open(possible_matches[0]) as f:
     props = json.load(f)
 
-  # TODO(crbug.com/41492688): Support src-internal configs too. Fow now, assume
-  # chromium builders correlate to "chromium-swarm".
-  swarming_server = 'chromium-swarm'
-
   return props, swarming_server
diff --git a/tools/utr/builders_test.py b/tools/utr/builders_test.py
index 8e104bd..27d90a6c 100755
--- a/tools/utr/builders_test.py
+++ b/tools/utr/builders_test.py
@@ -19,13 +19,20 @@
 
   def setUp(self):
     self.tmp_dir = pathlib.Path(tempfile.mkdtemp())
+    self.tmp_internal_dir = pathlib.Path(tempfile.mkdtemp())
 
     patch_props_dir = mock.patch('builders._BUILDER_PROP_DIRS', self.tmp_dir)
     patch_props_dir.start()
     self.addCleanup(patch_props_dir.stop)
 
+    patch_internal_props_dir = mock.patch(
+        'builders._INTERNAL_BUILDER_PROP_DIRS', self.tmp_internal_dir)
+    patch_internal_props_dir.start()
+    self.addCleanup(patch_internal_props_dir.stop)
+
   def tearDown(self):
     shutil.rmtree(self.tmp_dir)
+    shutil.rmtree(self.tmp_internal_dir)
 
   def testNoProps(self):
     # Empty base dir
@@ -51,6 +58,26 @@
     props, _ = builders.find_builder_props('some-bucket', 'some-builder')
     self.assertEqual(props['some-key'], 'some-val')
 
+  def testInternalProps(self):
+    # Create props for a public and internal builder, then fetch those props.
+    builder_dir = self.tmp_dir.joinpath('some-bucket', 'some-public-builder')
+    os.makedirs(builder_dir)
+    with open(builder_dir.joinpath('properties.json'), 'w') as f:
+      json.dump({'some-key': 'some-public-val'}, f)
+
+    internal_builder_dir = self.tmp_dir.joinpath('some-bucket',
+                                                 'some-internal-builder')
+    os.makedirs(internal_builder_dir)
+    with open(internal_builder_dir.joinpath('properties.json'), 'w') as f:
+      json.dump({'some-key': 'some-internal-val'}, f)
+
+    props, _ = builders.find_builder_props('some-bucket', 'some-public-builder')
+    self.assertEqual(props['some-key'], 'some-public-val')
+
+    props, _ = builders.find_builder_props('some-bucket',
+                                           'some-internal-builder')
+    self.assertEqual(props['some-key'], 'some-internal-val')
+
 
 if __name__ == '__main__':
   unittest.main()
diff --git a/tools/utr/recipe.py b/tools/utr/recipe.py
index 6494a92..c29c89c 100644
--- a/tools/utr/recipe.py
+++ b/tools/utr/recipe.py
@@ -26,6 +26,11 @@
 _THIS_DIR = pathlib.Path(__file__).resolve().parent
 _SRC_DIR = _THIS_DIR.parents[1]
 
+_RECLIENT_CLI = _SRC_DIR.joinpath('buildtools', 'reclient_cfgs',
+                                  'configure_reclient_cfgs.py')
+_SISO_CLI = _SRC_DIR.joinpath('build', 'config', 'siso', 'configure_siso.py')
+_DEFAULT_RBE_PROJECT = 'rbe-chrome-untrusted'
+
 RerunOption = namedtuple('RerunOption', ['prompt', 'properties'])
 
 
@@ -92,7 +97,8 @@
                skip_compile,
                skip_test,
                skip_prompts,
-               build_dir=None):
+               build_dir=None,
+               additional_test_args=None):
     """Constructor for LegacyRunner
 
     Args:
@@ -107,6 +113,7 @@
       skip_prompts: If True, skip Y/N prompts for warnings.
       build_dir: pathlib.Path to the build dir to build in. Will use the UTR's
           default otherwise if needed.
+      additional_test_args: List of additional args to pass to the tests.
     """
     self._recipes_py = recipes_py
     self._swarming_server = swarming_server
@@ -114,12 +121,22 @@
     self._console_printer = console.Console()
     assert self._recipes_py.exists()
 
+    # Put all results in "try" realms. "try" should be writable for most devs,
+    # while other realms like "ci" likely aren't. "try" is generally where we
+    # confine untested code, so it's the best fit for our results here.
+    self._luci_realm = 'chrome:try'
+    if self._swarming_server == 'chromium-swarm':
+      self._luci_realm = 'chromium:try'
+
     # Add UTR recipe props. Its schema is located at:
     # https://chromium.googlesource.com/chromium/tools/build/+/HEAD/recipes/recipes/chromium/universal_test_runner.proto
     input_props = builder_props.copy()
     input_props['checkout_path'] = str(_SRC_DIR)
     input_props['$recipe_engine/path'] = {'cache_dir': str(_SRC_DIR.parent)}
     input_props['test_names'] = tests
+    input_props['$build/chromium_swarming'] = {'task_realm': self._luci_realm}
+    if additional_test_args:
+      input_props['additional_test_args'] = additional_test_args
     if build_dir:
       input_props['build_dir'] = str(build_dir.absolute())
     # The recipe will overwrite this property so we have to put it preserve it
@@ -148,17 +165,43 @@
             },
         },
     }
-    # TODO(crbug.com/41492688): Use the chrome version for internal builders
+    # TODO(crbug.com/41492688): Ensure the chrome version for internal builders
     # when they are added.
     # Set reclient and siso to use untrusted even for imitating ci builders
     if not '$build/reclient' in input_props:
       input_props['$build/reclient'] = {}
-    input_props['$build/reclient']['instance'] = 'rbe-chromium-untrusted'
+    input_props['$build/reclient']['instance'] = self._get_reclient_instance()
     if not '$build/siso' in input_props:
       input_props['$build/siso'] = {}
-    input_props['$build/siso']['project'] = 'rbe-chromium-untrusted'
+    input_props['$build/siso']['project'] = self._get_siso_project()
     self._input_props = input_props
 
+  def _get_cmd_output(self, cmd):
+    p = subprocess.run(cmd,
+                       stdout=subprocess.PIPE,
+                       stderr=subprocess.STDOUT,
+                       text=True,
+                       check=False)
+    if p.returncode == 0:
+      return p.stdout.strip()
+    return ''
+
+  def _get_reclient_instance(self):
+    cmd = [
+        'python3',
+        str(_RECLIENT_CLI),
+        '--get-rbe-instance',
+    ]
+    return self._get_cmd_output(cmd) or _DEFAULT_RBE_PROJECT
+
+  def _get_siso_project(self):
+    cmd = [
+        'python3',
+        str(_SISO_CLI),
+        '--get-siso-project',
+    ]
+    return self._get_cmd_output(cmd) or _DEFAULT_RBE_PROJECT
+
   def _run(self, adapter, rerun_props=None):
     """Internal implementation of invoking `recipes.py run`.
 
@@ -175,13 +218,6 @@
     input_props['rerun_options'] = rerun_props or {}
     with tempfile.TemporaryDirectory() as tmp_dir:
 
-      # TODO(crbug.com/41492688): Support both chrome and chromium realms. Just
-      # hard-code 'chromium' for now.
-      # Put all results in "try" realms. "try" should be writable for most devs,
-      # while other realms like "ci" likely aren't. "try" is generally where we
-      # confine untested code, so it's the best fit for our results here.
-      rdb_realm = 'chromium:try'
-
       output_path = pathlib.Path(tmp_dir).joinpath('out.json')
       rerun_props_path = pathlib.Path(tmp_dir).joinpath('rerun_props.json')
       input_props['output_properties_file'] = str(rerun_props_path)
@@ -190,7 +226,7 @@
           'stream',
           '-new',
           '-realm',
-          rdb_realm,
+          self._luci_realm,
           '--',
           self._recipes_py,
           'run',
diff --git a/tools/utr/run.py b/tools/utr/run.py
index bedf92c..97938a55 100755
--- a/tools/utr/run.py
+++ b/tools/utr/run.py
@@ -6,6 +6,13 @@
 
 Using a specified builder name, this tool can build and/or launch a test the
 same way it's done on the bots. See the README.md in //tools/utr/ for more info.
+
+Any additional args passed at the end of the invocation will be passed down
+as-is to all triggered tests. Example uses:
+
+- vpython3 run.py -B $BUCKET -b $BUILDER -t $TEST compile
+- vpython3 run.py -B $BUCKET -b $BUILDER -t $TEST compile-and-test
+- vpython3 run.py -B $BUCKET -b $BUILDER -t $TEST test --gtest_filter=Test.Case
 """
 
 import argparse
@@ -62,6 +69,7 @@
       'test binaries. Will use the output path used by the builder if not '
       'specified (likely //out/Release/).')
   parser.add_argument(
+      '--recipe-dir',
       '--recipe-path',
       '-r',
       type=pathlib.Path,
@@ -81,6 +89,13 @@
       "Will use the builder's settings if not specified.")
 
 
+def add_test_args(parser):
+  parser.add_argument(
+      'additional_test_args',
+      nargs='*',
+      help='The args listed here will be appended to the test cmd-lines.')
+
+
 def parse_args(args=None):
   """Parse cmd line args.
 
@@ -89,25 +104,37 @@
   Returns:
     An argparse.ArgumentParser.
   """
-  parser = argparse.ArgumentParser(description=__doc__)
+  parser = argparse.ArgumentParser(
+      description=__doc__,
+      # Custom formatter to preserve line breaks in the docstring
+      formatter_class=argparse.RawDescriptionHelpFormatter)
   add_common_args(parser)
   subparsers = parser.add_subparsers(dest='run_mode')
 
   compile_subp = subparsers.add_parser(
-      'compile', help='Only compiles. WARNING: this mode is not yet supported.')
+      'compile',
+      aliases=['build'],
+      help='Only compiles. WARNING: this mode is not yet supported.')
   add_compile_args(compile_subp)
 
-  subparsers.add_parser(
+  test_subp = subparsers.add_parser(
       'test',
       help='Only run/trigger tests. WARNING: this mode is not yet supported.')
+  add_test_args(test_subp)
 
   compile_and_test_subp = subparsers.add_parser(
       'compile-and-test',
+      aliases=['build-and-test', 'run'],
       help='Both compile and run/trigger tests. WARNING: this mode is not yet '
       'supported.')
   add_compile_args(compile_and_test_subp)
+  add_test_args(compile_and_test_subp)
 
-  return parser.parse_args(args)
+  args = parser.parse_args(args)
+  if not args.run_mode:
+    parser.print_help()
+    parser.error('Please select a run_mode: compile,test,compile-and-test')
+  return args
 
 
 def main():
@@ -131,10 +158,10 @@
   if not recipe.check_rdb_auth():
     return 1
 
-  if not args.recipe_path:
+  if not args.recipe_dir:
     recipes_path = cipd.fetch_recipe_bundle(args.verbosity).joinpath('recipes')
   else:
-    recipes_path = args.recipe_path.joinpath('recipes', 'recipes.py')
+    recipes_path = args.recipe_dir.joinpath('recipes', 'recipes.py')
 
   builder_props, swarming_server = builders.find_builder_props(
       args.bucket, args.builder)
@@ -154,6 +181,7 @@
       skip_test,
       args.force,
       args.build_dir,
+      additional_test_args=None if skip_test else args.additional_test_args,
   )
   exit_code, error_msg = recipe_runner.run_recipe(
       filter_stdout=args.verbosity < 2)
diff --git a/tools/utr/run_test.py b/tools/utr/run_test.py
index cee8fbc..54580fe 100755
--- a/tools/utr/run_test.py
+++ b/tools/utr/run_test.py
@@ -38,6 +38,18 @@
     with self.assertRaises(SystemExit):
       args = run.parse_args(argv)
 
+    argv = [
+        '-B',
+        'bucket',
+        '-b',
+        'builder',
+        '-t',
+        'some_test',
+    ]
+    # No run_mode choice should make the parser error out.
+    with self.assertRaises(SystemExit):
+      args = run.parse_args(argv)
+
   def testTests(self):
     argv = [
         '-B',
@@ -60,10 +72,13 @@
         '-t',
         'test2',
         'test',
+        '--',
+        '--gtest_repeat=100',
     ]
     args = run.parse_args(argv)
     self.assertEqual(args.tests, ['test1', 'test2'])
     self.assertEqual(args.run_mode, 'test')
+    self.assertEqual(args.additional_test_args, ['--gtest_repeat=100'])
 
 
 if __name__ == '__main__':
diff --git a/tools/v8_context_snapshot/BUILD.gn b/tools/v8_context_snapshot/BUILD.gn
index 6b38d3f..80d4b3d 100644
--- a/tools/v8_context_snapshot/BUILD.gn
+++ b/tools/v8_context_snapshot/BUILD.gn
@@ -31,6 +31,7 @@
   header = "buildflags.h"
   flags = [
     "USE_V8_CONTEXT_SNAPSHOT=$use_v8_context_snapshot",
+    "INCLUDE_BOTH_V8_SNAPSHOTS=$include_both_v8_snapshots",
     "V8_CONTEXT_SNAPSHOT_FILENAME=\"$v8_context_snapshot_filename\"",
   ]
 }
@@ -108,7 +109,7 @@
       ldflags = [ "/OPT:NOICF" ]  # link.exe, but also lld-link.exe.
     } else if (is_apple && !use_lld) {
       ldflags = [ "-Wl,-no_deduplicate" ]  # ld64.
-    } else if (use_gold || use_lld) {
+    } else if (use_lld) {
       ldflags = [ "-Wl,--icf=none" ]
     }
   }
diff --git a/tools/v8_context_snapshot/v8_context_snapshot.gni b/tools/v8_context_snapshot/v8_context_snapshot.gni
index 185d9ce9..d3f2426a 100644
--- a/tools/v8_context_snapshot/v8_context_snapshot.gni
+++ b/tools/v8_context_snapshot/v8_context_snapshot.gni
@@ -13,16 +13,23 @@
 import("//v8/gni/v8.gni")
 
 declare_args() {
-  # TODO(crbug.com/764576): Enable the feature on more environments.
+  # If set, both snapshots are included. At this time, this only applicable to
+  # android. In other words, it will not work correctly on other platforms.
+  include_both_v8_snapshots = false
+}
+
+declare_args() {
+  # TODO(crbug.com/40539769): Enable the feature on more environments.
   # Disable in mac and win cross builds since building Blink twice is slow.
   use_v8_context_snapshot =
-      !is_chromeos && !is_android && !is_castos && !is_fuchsia &&
-      # Android may build for both 64 bit and 32bit. When this happens, the
-      # v8_target_cpu will not equal the target_cpu (for example,
-      # v8_target_cpu == "arm" but target_os == "arm64").
-      (v8_target_cpu == target_cpu || target_os == "android") &&
-      !(host_toolchain == default_toolchain && is_msan) &&
-      !(is_win && host_os != "win") && !(is_mac && host_os != "mac")
+      include_both_v8_snapshots ||
+      (!is_chromeos && !is_android && !is_castos && !is_fuchsia &&
+       # Android may build for both 64 bit and 32bit. When this happens, the
+       # v8_target_cpu will not equal the target_cpu (for example,
+       # v8_target_cpu == "arm" but target_os == "arm64").
+       (v8_target_cpu == target_cpu || target_os == "android") &&
+       !(host_toolchain == default_toolchain && is_msan) &&
+       !(is_win && host_os != "win") && !(is_mac && host_os != "mac"))
 
   # We use a different filename for arm64 macOS builds so that the arm64 and
   # x64 snapshots can live side-by-side in a universal macOS app.
diff --git a/tools/visual_debugger/README.md b/tools/visual_debugger/README.md
index 4ca8b64..59f1d49 100644
--- a/tools/visual_debugger/README.md
+++ b/tools/visual_debugger/README.md
@@ -53,6 +53,14 @@
 
 ### Security
 
-For official builds all visual debug macros are compiled out and the VizDebugger is reduced to a selective few method stubs. This means there are no security concerns for this system with exception of mutable side effects in the creation of input variables to the logging macros. These concerns for mutable side effects already exist for any other code; so no special attention is warranted for these macros.
+For official builds all visual debug macros end up as chrome traces. This means there are minimal security concerns for this system with exception of mutable side effects in the creation of input variables to the logging macros. These concerns for mutable side effects already exist for any other code; so no special attention is warranted for these macros.
 
 For non-official (debug) builds the dev-tools remote debugging port command line argument must be provided for the viz debugger to collect and stream data. Thus the security of this new system is identical to that of the remote dev tools for the case of debugging builds.
+
+### Visual debugger to trace (Prototype)
+
+For official builds the visual debugger is disabled but the logging feeds into the chrome tracing system. This visual debugger specific tracing is reported with the 'viz.visual_debugger' tracing category. These traces can be imported into the visual debugger using the import trace button.
+
+The overhead of these optional traces has been evaluated and the cost has been found to be acceptable.
+[Trace Macro Overhead in Official Builds](https://docs.google.com/document/d/1oWtNgW0XXU5UCO_0mJlYwTLE0nMQIMJO6oIyKs15Ci8/)
+
diff --git a/tools/web_dev_style/resource_checker.py b/tools/web_dev_style/resource_checker.py
index 8365d9bb..124e499 100644
--- a/tools/web_dev_style/resource_checker.py
+++ b/tools/web_dev_style/resource_checker.py
@@ -38,7 +38,7 @@
 
   def RunChecks(self):
     msg = 'Found resources style issues in %s'
-    # TODO(crbug.com/931798): is_error for Mojo check when -lite is majority?
+    # TODO(crbug.com/40613816): is_error for Mojo check when -lite is majority?
     return self._RunCheckOnAffectedFiles(self.DeprecatedMojoBindingsCheck,
         msg, only_changed_lines=True) + \
         self._RunCheckOnAffectedFiles(self.SelfClosingIncludeCheck, msg)