From 8dd2f1add978a4747a5962f2874b8ad20f86b01c Mon Sep 17 00:00:00 2001 From: emilylange Date: Mon, 18 Nov 2024 23:17:07 +0100 Subject: [PATCH] chromium: fetch src from git instead of using release tarball This builds upon Yureka's work to build electron from source. A lot of the newly introduced changes to the chromium derivation and update script are 1-to-1 copies or slight derivates of that work. Especially the newly added depot_tools.py to resolve the DEPS files does most of the heavy lifting and is an ever so slightly modified version of that section Yureka implemented in electron's update.py. Some coordination between the chromium and electron maintainers should allow us to deduplicate a lot of the duplicated code fairly easily in the future. That just wasn't a goal with this commit, due to time constraints and the urgency to switch away from the release tarballs. Instead of taking just a few hours for a tarball to be available for download after a release, it now takes multiple days at least. At the time of writing, roughly a week after M131 was released, the tarball is still not available. It's unclear if it will ever be. Reason for this are CI issues on Google's side. Note that virtually every release contains some security critical fixes. Also note that this commit is written with a lot of conditionals so the electron derivation doesn't change (just yet). The new update.mjs update script is still very much work-in-progress but gets the job done. Co-Authored-By: Yureka --- .../networking/browsers/chromium/common.nix | 103 +- .../networking/browsers/chromium/default.nix | 8 +- .../browsers/chromium/depot_tools.py | 122 ++ .../browsers/chromium/files/gclient_args.gni | 12 + .../networking/browsers/chromium/info.json | 1514 +++++++++++++++++ .../browsers/chromium/recompress-tarball.nix | 56 - .../networking/browsers/chromium/update.mjs | 227 +++ .../networking/browsers/chromium/update.py | 300 ---- .../browsers/chromium/upstream-info.nix | 37 - .../tools/selenium/chromedriver/binary.nix | 11 +- 10 files changed, 1979 insertions(+), 411 deletions(-) create mode 100755 pkgs/applications/networking/browsers/chromium/depot_tools.py create mode 100644 pkgs/applications/networking/browsers/chromium/files/gclient_args.gni create mode 100644 pkgs/applications/networking/browsers/chromium/info.json delete mode 100644 pkgs/applications/networking/browsers/chromium/recompress-tarball.nix create mode 100755 pkgs/applications/networking/browsers/chromium/update.mjs delete mode 100755 pkgs/applications/networking/browsers/chromium/update.py delete mode 100644 pkgs/applications/networking/browsers/chromium/upstream-info.nix diff --git a/pkgs/applications/networking/browsers/chromium/common.nix b/pkgs/applications/networking/browsers/chromium/common.nix index 469c6fda5ad2..2fab4ce46d22 100644 --- a/pkgs/applications/networking/browsers/chromium/common.nix +++ b/pkgs/applications/networking/browsers/chromium/common.nix @@ -1,5 +1,7 @@ { stdenv, lib, fetchpatch -, recompressTarball +, zstd +, fetchFromGitiles +, fetchNpmDeps , buildPackages , pkgsBuildBuild # Channel data: @@ -10,6 +12,8 @@ # Native build inputs: , ninja, pkg-config , python3, perl +, nodejs +, npmHooks , which , libuuid , overrideCC @@ -145,12 +149,64 @@ let else throw "no chromium Rosetta Stone entry for os: ${platform.config}"; }; + isElectron = packageName == "electron"; + + chromiumDeps = lib.mapAttrs (path: args: fetchFromGitiles (removeAttrs args [ "recompress" ] // lib.optionalAttrs args.recompress or false { + name = "source.tar.zstd"; + downloadToTemp = false; + passthru.unpack = true; + postFetch = '' + tar \ + --use-compress-program="${lib.getExe zstd} -T$NIX_BUILD_CORES" \ + --sort=name \ + --mtime="1970-01-01" \ + --owner=root --group=root \ + --numeric-owner --mode=go=rX,u+rw,a-s \ + --remove-files \ + --directory="$out" \ + -cf "$TMPDIR/source.zstd" . + mv "$TMPDIR/source.zstd" "$out" + ''; + })) upstream-info.DEPS; + + unpackPhaseSnippet = lib.concatStrings (lib.mapAttrsToList (path: dep: + (if dep.unpack or false + then '' + mkdir -p ${path} + pushd ${path} + unpackFile ${dep} + popd + '' + else '' + mkdir -p ${builtins.dirOf path} + cp -r ${dep}/. ${path} + '' + ) + '' + chmod u+w -R ${path} + '') chromiumDeps); + base = rec { pname = "${lib.optionalString ungoogled "ungoogled-"}${packageName}-unwrapped"; inherit (upstream-info) version; inherit packageName buildType buildPath; - src = recompressTarball { inherit version; inherit (upstream-info) hash; }; + unpackPhase = '' + runHook preUnpack + + ${unpackPhaseSnippet} + sourceRoot=src + + runHook postUnpack + ''; + + npmRoot = "third_party/node"; + npmDeps = (fetchNpmDeps { + src = chromiumDeps."src"; + sourceRoot = npmRoot; + hash = upstream-info.deps.npmHash; + }).overrideAttrs (p: { + nativeBuildInputs = p.nativeBuildInputs or [ ] ++ [ zstd ]; + }); nativeBuildInputs = [ ninja pkg-config @@ -158,6 +214,9 @@ let which buildPackages.rustc.llvmPackages.bintools bison gperf + ] ++ lib.optionals (!isElectron) [ + nodejs + npmHooks.npmConfigHook ]; depsBuildBuild = [ @@ -317,7 +376,32 @@ let }) ]; - postPatch = '' + postPatch = lib.optionalString (!isElectron) '' + ln -s ${./files/gclient_args.gni} build/config/gclient_args.gni + + echo 'LASTCHANGE=${upstream-info.DEPS."src".rev}-refs/heads/master@{#0}' > build/util/LASTCHANGE + echo "$SOURCE_DATE_EPOCH" > build/util/LASTCHANGE.committime + + cat << EOF > gpu/config/gpu_lists_version.h + /* Generated by lastchange.py, do not edit.*/ + #ifndef GPU_CONFIG_GPU_LISTS_VERSION_H_ + #define GPU_CONFIG_GPU_LISTS_VERSION_H_ + #define GPU_LISTS_VERSION "${upstream-info.DEPS."src".rev}" + #endif // GPU_CONFIG_GPU_LISTS_VERSION_H_ + EOF + + cat << EOF > skia/ext/skia_commit_hash.h + /* Generated by lastchange.py, do not edit.*/ + #ifndef SKIA_EXT_SKIA_COMMIT_HASH_H_ + #define SKIA_EXT_SKIA_COMMIT_HASH_H_ + #define SKIA_COMMIT_HASH "${upstream-info.DEPS."src/third_party/skia".rev}-" + #endif // SKIA_EXT_SKIA_COMMIT_HASH_H_ + EOF + + echo -n '${upstream-info.DEPS."src/third_party/dawn".rev}' > gpu/webgpu/DAWN_VERSION + + mkdir -p third_party/jdk/current/bin + '' + '' # Workaround/fix for https://bugs.chromium.org/p/chromium/issues/detail?id=1313361: substituteInPlace BUILD.gn \ --replace '"//infra/orchestrator:orchestrator_all",' "" @@ -513,6 +597,11 @@ let # enable those features in our stable builds. preConfigure = '' export RUSTC_BOOTSTRAP=1 + '' + lib.optionalString (!isElectron) '' + ( + cd third_party/node + grep patch update_npm_deps | sh + ) ''; configurePhase = '' @@ -570,11 +659,9 @@ let ''; passthru = { - updateScript = ./update.py; - chromiumDeps = { - gn = gnChromium; - }; - inherit recompressTarball; + updateScript = ./update.mjs; + } // lib.optionalAttrs (!isElectron) { + inherit chromiumDeps npmDeps; }; } # overwrite `version` with the exact same `version` from the same source, diff --git a/pkgs/applications/networking/browsers/chromium/default.nix b/pkgs/applications/networking/browsers/chromium/default.nix index 0fa5c35cdf8b..ecce9b395a75 100644 --- a/pkgs/applications/networking/browsers/chromium/default.nix +++ b/pkgs/applications/networking/browsers/chromium/default.nix @@ -10,7 +10,7 @@ # package customization # Note: enable* flags should not require full rebuilds (i.e. only affect the wrapper) -, upstream-info ? (import ./upstream-info.nix).${if !ungoogled then "stable" else "ungoogled-chromium"} +, upstream-info ? (lib.importJSON ./info.json).${if !ungoogled then "chromium" else "ungoogled-chromium"} , proprietaryCodecs ? true , enableWideVine ? false , ungoogled ? false # Whether to build chromium or ungoogled-chromium @@ -49,9 +49,10 @@ let inherit proprietaryCodecs cupsSupport pulseSupport ungoogled; gnChromium = buildPackages.gn.overrideAttrs (oldAttrs: { - inherit (upstream-info.deps.gn) version; + version = if (upstream-info.deps.gn ? "version") then upstream-info.deps.gn.version else "0"; src = fetchgit { - inherit (upstream-info.deps.gn) url rev hash; + url = "https://gn.googlesource.com/gn"; + inherit (upstream-info.deps.gn) rev hash; }; } // lib.optionalAttrs (chromiumVersionAtLeast "127") { # Relax hardening as otherwise gn unstable 2024-06-06 and later fail with: @@ -64,7 +65,6 @@ let # As a work around until gn is updated again, we filter specifically that patch out. patches = lib.filter (e: lib.getName e != "LFS64.patch") oldAttrs.patches; }); - recompressTarball = callPackage ./recompress-tarball.nix { inherit chromiumVersionAtLeast; }; }); browser = callPackage ./browser.nix { diff --git a/pkgs/applications/networking/browsers/chromium/depot_tools.py b/pkgs/applications/networking/browsers/chromium/depot_tools.py new file mode 100755 index 000000000000..077d59077c7c --- /dev/null +++ b/pkgs/applications/networking/browsers/chromium/depot_tools.py @@ -0,0 +1,122 @@ +#! /usr/bin/env nix-shell +#! nix-shell -i python -p python3 +""" +This is a heavily simplified variant of electron's update.py +for use in ./update.mjs and should not be called manually. + +It resolves chromium's DEPS file recursively when called with +a working depot_tools checkout and a ref to fetch and prints +the result as JSON to stdout. +""" +import base64 +import json +from typing import Optional +from urllib.request import urlopen + +import sys + +if len(sys.argv) != 3: + print("""This internal script has been called with the wrong amount of parameters. +This script is not supposed to be called manually. +Refer to ./update.mjs instead.""") + exit(1) + +_, depot_tools_checkout, chromium_version = sys.argv + +sys.path.append(depot_tools_checkout) +import gclient_eval +import gclient_utils + + +class Repo: + fetcher: str + args: dict + + def __init__(self) -> None: + self.deps: dict = {} + self.hash = "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=" + + def get_deps(self, repo_vars: dict, path: str) -> None: + print( + "evaluating " + json.dumps(self, default=vars, sort_keys=True), + file=sys.stderr, + ) + + deps_file = self.get_file("DEPS") + evaluated = gclient_eval.Parse(deps_file, vars_override=repo_vars, filename="DEPS") + + repo_vars = dict(evaluated.get("vars", {})) | repo_vars + + prefix = f"{path}/" if evaluated.get("use_relative_paths", False) else "" + + self.deps = { + prefix + dep_name: repo_from_dep(dep) + for dep_name, dep in evaluated.get("deps", {}).items() + if ( + gclient_eval.EvaluateCondition(dep["condition"], repo_vars) + if "condition" in dep + else True + ) + and repo_from_dep(dep) != None + } + + for key in evaluated.get("recursedeps", []): + dep_path = prefix + key + if dep_path in self.deps and dep_path != "src/third_party/squirrel.mac": + self.deps[dep_path].get_deps(repo_vars, dep_path) + + def flatten_repr(self) -> dict: + return {"fetcher": self.fetcher, "hash": self.hash, **self.args} + + def flatten(self, path: str) -> dict: + out = {path: self.flatten_repr()} + for dep_path, dep in self.deps.items(): + out |= dep.flatten(dep_path) + return out + + def get_file(self, filepath: str) -> str: + raise NotImplementedError + + +class GitilesRepo(Repo): + def __init__(self, url: str, rev: str) -> None: + super().__init__() + self.fetcher = "fetchFromGitiles" + self.args = { + "url": url, + "rev": rev, + } + + def get_file(self, filepath: str) -> str: + return base64.b64decode( + urlopen( + f"{self.args['url']}/+/{self.args['rev']}/{filepath}?format=TEXT" + ).read() + ).decode("utf-8") + + +def repo_from_dep(dep: dict) -> Optional[Repo]: + if "url" in dep: + url, rev = gclient_utils.SplitUrlRevision(dep["url"]) + return GitilesRepo(url, rev) + else: + # Not a git dependency; skip + return None + + + +chromium = GitilesRepo("https://chromium.googlesource.com/chromium/src.git", chromium_version) +chromium.get_deps( + { + **{ + f"checkout_{platform}": platform == "linux" or platform == "x64" or platform == "arm64" or platform == "arm" + for platform in ["ios", "chromeos", "android", "mac", "win", "linux"] + }, + **{ + f"checkout_{arch}": True + for arch in ["x64", "arm64", "arm", "x86", "mips", "mips64"] + }, + }, + "", +) +print(json.dumps(chromium.flatten("src"))) diff --git a/pkgs/applications/networking/browsers/chromium/files/gclient_args.gni b/pkgs/applications/networking/browsers/chromium/files/gclient_args.gni new file mode 100644 index 000000000000..7440c81587f1 --- /dev/null +++ b/pkgs/applications/networking/browsers/chromium/files/gclient_args.gni @@ -0,0 +1,12 @@ +build_with_chromium = true +checkout_android = false +checkout_android_prebuilts_build_tools = false +checkout_clang_coverage_tools = false +checkout_copybara = false +checkout_ios_webkit = false +checkout_nacl = false +checkout_openxr = false +checkout_src_internal = false +cros_boards = "" +cros_boards_with_qemu_images = "" +generate_location_tags = true diff --git a/pkgs/applications/networking/browsers/chromium/info.json b/pkgs/applications/networking/browsers/chromium/info.json new file mode 100644 index 000000000000..78bb958588a7 --- /dev/null +++ b/pkgs/applications/networking/browsers/chromium/info.json @@ -0,0 +1,1514 @@ +{ + "chromium": { + "version": "130.0.6723.116", + "chromedriver": { + "hash_darwin": "sha256-PpBPxgQSVWTlsenlwaqqCBx4Lah0xWa8chOzZOEk75M=", + "hash_darwin_aarch64": "sha256-bMQZ2U3cR10TSPpz2A3LhCTjDfxLQNva2/9bvNjNFKc=" + }, + "deps": { + "depot_tools": { + "rev": "22df6f8e622dc3e8df8dc8b5d3e3503b169af78e", + "hash": "sha256-C8U5BFLBCorwHvfKvh1xmAzOaDcBAbe3GhwJebENZD4=" + }, + "gn": { + "rev": "20806f79c6b4ba295274e3a589d85db41a02fdaa", + "hash": "sha256-iNXRq3Mr8+wmY1SR4sV7yd2fDiIZ94eReelwFI0UhGU=" + }, + "npmHash": "sha256-4w5m/bTMygidlb4TZHMx1Obp784DLxMwrfe1Uvyyfp8=" + }, + "DEPS": { + "src": { + "url": "https://chromium.googlesource.com/chromium/src.git", + "rev": "130.0.6723.116", + "hash": "sha256-KSUDdIHSzsZBYC+ApQE3iolGOAC0MZETlI2ARNXE0Vg=", + "recompress": true + }, + "src/third_party/clang-format/script": { + "url": "https://chromium.googlesource.com/external/github.com/llvm/llvm-project/clang/tools/clang-format.git", + "rev": "3c0acd2d4e73dd911309d9e970ba09d58bf23a62", + "hash": "sha256-whD8isX2ZhLrFzdxHhFP1S/sZDRgyrzLFaVd7OEFqYo=" + }, + "src/third_party/libc++/src": { + "url": "https://chromium.googlesource.com/external/github.com/llvm/llvm-project/libcxx.git", + "rev": "50ab693ecb611942ce4440d8c9ed707ee65ed5e8", + "hash": "sha256-hKlmY2Bn1f6w0Gmx/Le/LwWk/Gf6hzXqR5C+/w+0CNA=" + }, + "src/third_party/libc++abi/src": { + "url": "https://chromium.googlesource.com/external/github.com/llvm/llvm-project/libcxxabi.git", + "rev": "29b2e9a0f48688da116692cb04758393053d269c", + "hash": "sha256-GtK8z2jn4es3uuxpAgm5AoQvUjvhAunAyUwm3HEqLVA=" + }, + "src/third_party/libunwind/src": { + "url": "https://chromium.googlesource.com/external/github.com/llvm/llvm-project/libunwind.git", + "rev": "dc70138c3e68e2f946585f134e20815851e26263", + "hash": "sha256-5xsrVVSu9b+78GEKeLGNpo7ySxrJ2SeuuKghN6NHlSU=" + }, + "src/chrome/test/data/perf/canvas_bench": { + "url": "https://chromium.googlesource.com/chromium/canvas_bench.git", + "rev": "a7b40ea5ae0239517d78845a5fc9b12976bfc732", + "hash": "sha256-svOuyBGKloBLM11xLlWCDsB4PpRjdKTBdW2UEW4JQjM=" + }, + "src/chrome/test/data/perf/frame_rate/content": { + "url": "https://chromium.googlesource.com/chromium/frame_rate/content.git", + "rev": "c10272c88463efeef6bb19c9ec07c42bc8fe22b9", + "hash": "sha256-t4kcuvH0rkPBkcdiMsoNQaRwU09eU+oSvyHDiAHrKXo=" + }, + "src/chrome/test/data/xr/webvr_info": { + "url": "https://chromium.googlesource.com/external/github.com/toji/webvr.info.git", + "rev": "c58ae99b9ff9e2aa4c524633519570bf33536248", + "hash": "sha256-BsAPwc4oEWri0TlqhyxqFNqKdfgVSrB0vQyISmYY4eg=" + }, + "src/docs/website": { + "url": "https://chromium.googlesource.com/website.git", + "rev": "052e29447b43b18da32fff653b9d58ef79fbc836", + "hash": "sha256-XK22S9WwNN4zQZ5teiQ1sZA5m/8rArwq3jCgM6H9KQY=" + }, + "src/media/cdm/api": { + "url": "https://chromium.googlesource.com/chromium/cdm.git", + "rev": "eb21edc44e8e5a82095037be80c8b15c51624293", + "hash": "sha256-6J6aSYW0or99VAgMNJJOdJqMJspoG7w1HxDN50MV5bw=" + }, + "src/net/third_party/quiche/src": { + "url": "https://quiche.googlesource.com/quiche.git", + "rev": "9808dac40e034f09d7af53d3d79589a02e39c211", + "hash": "sha256-NJKJ5cc+wEcmCIFYXWQX4x9BZblbS+wqj+25CcUiPZM=" + }, + "src/testing/libfuzzer/fuzzers/wasm_corpus": { + "url": "https://chromium.googlesource.com/v8/fuzzer_wasm_corpus.git", + "rev": "f650ff816f2ef227f61ea2e9f222aa69708ab367", + "hash": "sha256-qWsGQNUptbz0jYvUuxP7woNf5QQrfn9k3uvr82Yk0QM=" + }, + "src/third_party/accessibility_test_framework/src": { + "url": "https://chromium.googlesource.com/external/github.com/google/Accessibility-Test-Framework-for-Android.git", + "rev": "4a764c690353ea136c82f1a696a70bf38d1ef5fe", + "hash": "sha256-mzVgoxxBWebesG6okyMxxmO6oH+TITA4o9ucHHMMzkQ=" + }, + "src/third_party/angle": { + "url": "https://chromium.googlesource.com/angle/angle.git", + "rev": "fffbc739779a2df56a464fd6853bbfb24bebb5f6", + "hash": "sha256-OtpF7+KQzk0MWhgBlNV1DheHywtBMDQIPhGUOss9Dtg=" + }, + "src/third_party/angle/third_party/glmark2/src": { + "url": "https://chromium.googlesource.com/external/github.com/glmark2/glmark2", + "rev": "ca8de51fedb70bace5351c6b002eb952c747e889", + "hash": "sha256-L7+zWM0qn8WFhmON7DGvarTsN1YHt1sn5+hazTOZrrk=" + }, + "src/third_party/angle/third_party/rapidjson/src": { + "url": "https://chromium.googlesource.com/external/github.com/Tencent/rapidjson", + "rev": "781a4e667d84aeedbeb8184b7b62425ea66ec59f", + "hash": "sha256-btUl1a/B0sXwf/+hyvCvVJjWqIkXfVYCpHm3TeBuOxk=" + }, + "src/third_party/angle/third_party/VK-GL-CTS/src": { + "url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/VK-GL-CTS", + "rev": "1df39e522f4aa358012180fd4cf876af68aff78d", + "hash": "sha256-yPQG/Ddat9H4XZq6Zu5S3VzcZeMhLBcM//KI/3Kxaxg=" + }, + "src/third_party/anonymous_tokens/src": { + "url": "https://chromium.googlesource.com/external/github.com/google/anonymous-tokens.git", + "rev": "6ea6ec78f9e4998d0a7a5677b2aec08f0ac858f8", + "hash": "sha256-PMB49+zW9ewlS9ym+xi0xYQYLN0j5Urx6yBXWd8FjjI=" + }, + "src/third_party/content_analysis_sdk/src": { + "url": "https://chromium.googlesource.com/external/github.com/chromium/content_analysis_sdk.git", + "rev": "9a408736204513e0e95dd2ab3c08de0d95963efc", + "hash": "sha256-f5Jmk1MiGjaRdLun+v/GKVl8Yv9hOZMTQUSxgiJalcY=" + }, + "src/third_party/dav1d/libdav1d": { + "url": "https://chromium.googlesource.com/external/github.com/videolan/dav1d.git", + "rev": "6b3c489a2ee2c030f351f21987c27611b4cbe725", + "hash": "sha256-qJSUt8gMFB+IhOnEAw3t6nj1y7XUY91pLQBF8CeYtas=" + }, + "src/third_party/dawn": { + "url": "https://dawn.googlesource.com/dawn.git", + "rev": "70a01d28c3ecd75b67a87e4643bd4d55fc391ce6", + "hash": "sha256-x5Fm7DGAFfDmZ9p6JY16+QSPPztxNrG/HvQrZ26NnZM=" + }, + "src/third_party/dawn/third_party/glfw": { + "url": "https://chromium.googlesource.com/external/github.com/glfw/glfw", + "rev": "b35641f4a3c62aa86a0b3c983d163bc0fe36026d", + "hash": "sha256-E1zXIDiw87badrLOZTvV+Wh9NZHu51nb70ZK9vlAlqE=" + }, + "src/third_party/dawn/third_party/dxc": { + "url": "https://chromium.googlesource.com/external/github.com/microsoft/DirectXShaderCompiler", + "rev": "05334a70d3e5355fc86c94bb4e3cfe1c31a65999", + "hash": "sha256-CrR08tw9e+4U+fa6E9xoP/4puPNHEjLrxtSju8psLlk=" + }, + "src/third_party/dawn/third_party/dxheaders": { + "url": "https://chromium.googlesource.com/external/github.com/microsoft/DirectX-Headers", + "rev": "980971e835876dc0cde415e8f9bc646e64667bf7", + "hash": "sha256-0Miw1Cy/jmOo7bLFBOHuTRDV04cSeyvUEyPkpVsX9DA=" + }, + "src/third_party/dawn/third_party/webgpu-headers": { + "url": "https://chromium.googlesource.com/external/github.com/webgpu-native/webgpu-headers", + "rev": "8049c324dc7b3c09dc96ea04cb02860f272c8686", + "hash": "sha256-J3PcwYoO79HqrACFgk77BZLTCi7oi5k2J6v3wlcFVD4=" + }, + "src/third_party/dawn/third_party/khronos/OpenGL-Registry": { + "url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/OpenGL-Registry", + "rev": "5bae8738b23d06968e7c3a41308568120943ae77", + "hash": "sha256-K3PcRIiD3AmnbiSm5TwaLs4Gu9hxaN8Y91WMKK8pOXE=" + }, + "src/third_party/dawn/third_party/khronos/EGL-Registry": { + "url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/EGL-Registry", + "rev": "7dea2ed79187cd13f76183c4b9100159b9e3e071", + "hash": "sha256-Z6DwLfgQ1wsJXz0KKJyVieOatnDmx3cs0qJ6IEgSq1A=" + }, + "src/third_party/dawn/third_party/webgpu-cts": { + "url": "https://chromium.googlesource.com/external/github.com/gpuweb/cts", + "rev": "a5065e398d2430c83e17ef9cbad6eae31d1efa8f", + "hash": "sha256-heIL8hhaVr0uRi2lD+7RFltggVFW48ZY9Tdl0yVRdac=" + }, + "src/third_party/highway/src": { + "url": "https://chromium.googlesource.com/external/github.com/google/highway.git", + "rev": "8295336dd70f1201d42c22ab5b0861de38cf8fbf", + "hash": "sha256-PXsXIqWB4NNiFhanRjMIFSWYuW/IRuQo8mMPUBEentY=" + }, + "src/third_party/google_benchmark/src": { + "url": "https://chromium.googlesource.com/external/github.com/google/benchmark.git", + "rev": "344117638c8ff7e239044fd0fa7085839fc03021", + "hash": "sha256-gztnxui9Fe/FTieMjdvfJjWHjkImtlsHn6fM1FruyME=" + }, + "src/third_party/boringssl/src": { + "url": "https://boringssl.googlesource.com/boringssl.git", + "rev": "58f3bc83230d2958bb9710bc910972c4f5d382dc", + "hash": "sha256-on+VonYXZ710oqgaK/OKa9Huq2mSXp8SJcj9CciHsf8=" + }, + "src/third_party/breakpad/breakpad": { + "url": "https://chromium.googlesource.com/breakpad/breakpad.git", + "rev": "6b0c5b7ee1988a14a4af94564e8ae8bba8a94374", + "hash": "sha256-kTkwRfaqw5ZCHEvu2YPZ+1vCfekHkY5pY3m9snDN64g=" + }, + "src/third_party/cast_core/public/src": { + "url": "https://chromium.googlesource.com/cast_core/public", + "rev": "71f51fd6fa45fac73848f65421081edd723297cd", + "hash": "sha256-AalRQhJmornCqmvE2+36J/3LubaA0jr6P1PXy32lX4I=" + }, + "src/third_party/catapult": { + "url": "https://chromium.googlesource.com/catapult.git", + "rev": "296226a4a0067c8cffeb8831fb87526a8035f3cc", + "hash": "sha256-IHubCuEBE9W0wRudOmjUoaOvT66JuVTzEBUOTvdnXqQ=" + }, + "src/third_party/ced/src": { + "url": "https://chromium.googlesource.com/external/github.com/google/compact_enc_det.git", + "rev": "ba412eaaacd3186085babcd901679a48863c7dd5", + "hash": "sha256-ySG74Rj2i2c/PltEgHVEDq+N8yd9gZmxNktc56zIUiY=" + }, + "src/third_party/chromium-variations": { + "url": "https://chromium.googlesource.com/chromium-variations.git", + "rev": "6aa57f2c6b49402b55ec607c17bd7ee8946970b0", + "hash": "sha256-DR5rJdnDKunS/PHtVK1n4zk0MmK54LhlawZW74711LY=" + }, + "src/third_party/cld_3/src": { + "url": "https://chromium.googlesource.com/external/github.com/google/cld_3.git", + "rev": "b48dc46512566f5a2d41118c8c1116c4f96dc661", + "hash": "sha256-C3MOMBUy9jgkT9BAi/Fgm2UH4cxRuwSBEcRl3hzM2Ss=" + }, + "src/third_party/colorama/src": { + "url": "https://chromium.googlesource.com/external/colorama.git", + "rev": "3de9f013df4b470069d03d250224062e8cf15c49", + "hash": "sha256-6ZTdPYSHdQOLYMSnE+Tp7PgsVTs3U2awGu9Qb4Rg/tk=" + }, + "src/third_party/cpu_features/src": { + "url": "https://chromium.googlesource.com/external/github.com/google/cpu_features.git", + "rev": "936b9ab5515dead115606559502e3864958f7f6e", + "hash": "sha256-E8LoVzhe+TAmARWZTSuINlsVhzpUJMxPPCGe/dHZcyA=" + }, + "src/third_party/cpuinfo/src": { + "url": "https://chromium.googlesource.com/external/github.com/pytorch/cpuinfo.git", + "rev": "ca678952a9a8eaa6de112d154e8e104b22f9ab3f", + "hash": "sha256-UKy9TIiO/UJ5w+qLRlMd085CX2qtdVH2W3rtxB5r6MY=" + }, + "src/third_party/crc32c/src": { + "url": "https://chromium.googlesource.com/external/github.com/google/crc32c.git", + "rev": "d3d60ac6e0f16780bcfcc825385e1d338801a558", + "hash": "sha256-KBraGaO5LmmPP+p8RuDogGldbTWdNDK+WzF4Q09keuE=" + }, + "src/third_party/cros_system_api": { + "url": "https://chromium.googlesource.com/chromiumos/platform2/system_api.git", + "rev": "2f88f9c4581a9c854604fa23516de8c9c13b227b", + "hash": "sha256-9rM9m6VRX7B+h9JiICN5O9rBYdQEHNlCUnQMuaTy/1s=" + }, + "src/third_party/crossbench": { + "url": "https://chromium.googlesource.com/crossbench.git", + "rev": "2b812597dd143dbdc560ff2f28d5f8d3adc700d4", + "hash": "sha256-7IuhXuxXD3xBkgazg3B9GZknlNv8Xi0eTHkeQv63ayk=" + }, + "src/third_party/depot_tools": { + "url": "https://chromium.googlesource.com/chromium/tools/depot_tools.git", + "rev": "22df6f8e622dc3e8df8dc8b5d3e3503b169af78e", + "hash": "sha256-C8U5BFLBCorwHvfKvh1xmAzOaDcBAbe3GhwJebENZD4=" + }, + "src/third_party/devtools-frontend/src": { + "url": "https://chromium.googlesource.com/devtools/devtools-frontend", + "rev": "deee9c11c9f76ef595b7d0b52fcf677d25aac5f2", + "hash": "sha256-gRc2ei5m7a5KVKEMIivPGy1IQqDIaJxUJHLd5k2F+GQ=" + }, + "src/third_party/dom_distiller_js/dist": { + "url": "https://chromium.googlesource.com/chromium/dom-distiller/dist.git", + "rev": "199de96b345ada7c6e7e6ba3d2fa7a6911b8767d", + "hash": "sha256-yuEBD2XQlV3FGI/i7lTmJbCqzeBiuG1Qow8wvsppGJw=" + }, + "src/third_party/eigen3/src": { + "url": "https://chromium.googlesource.com/external/gitlab.com/libeigen/eigen.git", + "rev": "134b526d6110061469168e7e0511822a8e30bcaf", + "hash": "sha256-U4SMReXTFZg7YGyefI6MXIB66nt5OiANMH0HUyr/xIc=" + }, + "src/third_party/farmhash/src": { + "url": "https://chromium.googlesource.com/external/github.com/google/farmhash.git", + "rev": "816a4ae622e964763ca0862d9dbd19324a1eaf45", + "hash": "sha256-5n58VEUxa/K//jAfZqG4cXyfxrp50ogWDNYcgiXVHdc=" + }, + "src/third_party/fast_float/src": { + "url": "https://chromium.googlesource.com/external/github.com/fastfloat/fast_float.git", + "rev": "3e57d8dcfb0a04b5a8a26b486b54490a2e9b310f", + "hash": "sha256-0eVovauN7SnO3nSIWBRWAJ4dR7q5beZrIGUZ18M2pao=" + }, + "src/third_party/ffmpeg": { + "url": "https://chromium.googlesource.com/chromium/third_party/ffmpeg.git", + "rev": "91903c28af60a732a051c343b496e1188eec9b05", + "hash": "sha256-HnpWlSfXxa951UkFgL/2zKoaBeveuVkTZz/iqYXjkH8=" + }, + "src/third_party/flac": { + "url": "https://chromium.googlesource.com/chromium/deps/flac.git", + "rev": "689da3a7ed50af7448c3f1961d1791c7c1d9c85c", + "hash": "sha256-gvTFPNOlBfozptaH7lTb9iD/09AmpdT3kCl9ClszjEs=" + }, + "src/third_party/flatbuffers/src": { + "url": "https://chromium.googlesource.com/external/github.com/google/flatbuffers.git", + "rev": "8db59321d9f02cdffa30126654059c7d02f70c32", + "hash": "sha256-tbc45o0MbMvK5XqRUJt5Eg8BU6+TJqlmwFgQhHq6wRM=" + }, + "src/third_party/fontconfig/src": { + "url": "https://chromium.googlesource.com/external/fontconfig.git", + "rev": "14d466b30a8ab4a9d789977ed94f2c30e7209267", + "hash": "sha256-W5WIgC6A52kY4fNkbsDEa0o+dfd97Rl5NKfgnIRpI00=" + }, + "src/third_party/fp16/src": { + "url": "https://chromium.googlesource.com/external/github.com/Maratyszcza/FP16.git", + "rev": "0a92994d729ff76a58f692d3028ca1b64b145d91", + "hash": "sha256-m2d9bqZoGWzuUPGkd29MsrdscnJRtuIkLIMp3fMmtRY=" + }, + "src/third_party/gemmlowp/src": { + "url": "https://chromium.googlesource.com/external/github.com/google/gemmlowp.git", + "rev": "13d57703abca3005d97b19df1f2db731607a7dc2", + "hash": "sha256-O5wD8wxgis0qYMaY+xZ21GBDVQFphMRvInCOswS6inA=" + }, + "src/third_party/grpc/src": { + "url": "https://chromium.googlesource.com/external/github.com/grpc/grpc.git", + "rev": "822dab21d9995c5cf942476b35ca12a1aa9d2737", + "hash": "sha256-64JEVCx/PCM0dvv7kAQvSjLc0QbRAZVBDzwD/FAV6T8=" + }, + "src/third_party/freetype/src": { + "url": "https://chromium.googlesource.com/chromium/src/third_party/freetype2.git", + "rev": "83af801b552111e37d9466a887e1783a0fb5f196", + "hash": "sha256-w5Zd4yvGoMQ0BmDGa2b9gK/+7f+UaZDRYqEdMGH/zKg=" + }, + "src/third_party/freetype-testing/src": { + "url": "https://chromium.googlesource.com/external/github.com/freetype/freetype2-testing.git", + "rev": "7a69b1a2b028476f840ab7d4a2ffdfe4eb2c389f", + "hash": "sha256-2aHPchIK5Oce5+XxdXVCC+8EM6i0XT0rFbjSIVa2L1A=" + }, + "src/third_party/fxdiv/src": { + "url": "https://chromium.googlesource.com/external/github.com/Maratyszcza/FXdiv.git", + "rev": "63058eff77e11aa15bf531df5dd34395ec3017c8", + "hash": "sha256-LjX5kivfHbqCIA5pF9qUvswG1gjOFo3CMpX0VR+Cn38=" + }, + "src/third_party/harfbuzz-ng/src": { + "url": "https://chromium.googlesource.com/external/github.com/harfbuzz/harfbuzz.git", + "rev": "1da053e87f0487382404656edca98b85fe51f2fd", + "hash": "sha256-iR49rfGDKxPObCff1/30hYHpP5FpZ28ROgMZhNk9eFY=" + }, + "src/third_party/instrumented_libs": { + "url": "https://chromium.googlesource.com/chromium/third_party/instrumented_libraries.git", + "rev": "bb6dbcf2df7a9beb34c3773ef4df161800e3aed9", + "hash": "sha256-kHKGADAgzlaeckXFbpU1GhJK+zkiRd9XvdtPF6qrQFY=" + }, + "src/third_party/emoji-segmenter/src": { + "url": "https://chromium.googlesource.com/external/github.com/google/emoji-segmenter.git", + "rev": "6b8f235b72deba7d6ef113631129b274c14941ef", + "hash": "sha256-sI6UgXTWxXJajB2h2LH3caf7cqRbBshD5GoLocrUivk=" + }, + "src/third_party/ots/src": { + "url": "https://chromium.googlesource.com/external/github.com/khaledhosny/ots.git", + "rev": "46bea9879127d0ff1c6601b078e2ce98e83fcd33", + "hash": "sha256-kiUXrXsaGOzPkKh0dVmU1I13WHt0Stzj7QLMqHN9FbU=" + }, + "src/third_party/libgav1/src": { + "url": "https://chromium.googlesource.com/codecs/libgav1.git", + "rev": "a2f139e9123bdb5edf7707ac6f1b73b3aa5038dd", + "hash": "sha256-+ss9S5t+yoHzqbtX68+5OyyUbJVecYLwp+C3EXfAziE=" + }, + "src/third_party/googletest/src": { + "url": "https://chromium.googlesource.com/external/github.com/google/googletest.git", + "rev": "0953a17a4281fc26831da647ad3fcd5e21e6473b", + "hash": "sha256-jccFUondvjWgCBC3oCLUXqtLV07pkEq8IEZ+FLu1MrE=" + }, + "src/third_party/hunspell_dictionaries": { + "url": "https://chromium.googlesource.com/chromium/deps/hunspell_dictionaries.git", + "rev": "41cdffd71c9948f63c7ad36e1fb0ff519aa7a37e", + "hash": "sha256-67mvpJRFFa9eMfyqFMURlbxOaTJBICnk+gl0b0mEHl8=" + }, + "src/third_party/icu": { + "url": "https://chromium.googlesource.com/chromium/deps/icu.git", + "rev": "9408c6fd4a39e6fef0e1c4077602e1c83b15f3fb", + "hash": "sha256-YlX+PaPhvYh9JzHT9WtS1beUK+cQrHGVUl+IBbv7GeQ=" + }, + "src/third_party/jsoncpp/source": { + "url": "https://chromium.googlesource.com/external/github.com/open-source-parsers/jsoncpp.git", + "rev": "42e892d96e47b1f6e29844cc705e148ec4856448", + "hash": "sha256-bSLNcoYBz3QCt5VuTR056V9mU2PmBuYBa0W6hFg2m8Q=" + }, + "src/third_party/leveldatabase/src": { + "url": "https://chromium.googlesource.com/external/leveldb.git", + "rev": "23e35d792b9154f922b8b575b12596a4d8664c65", + "hash": "sha256-y3awFXL8ih2UhEqWj8JRgkhzSxfQciLztb020JHJ350=" + }, + "src/third_party/libFuzzer/src": { + "url": "https://chromium.googlesource.com/external/github.com/llvm/llvm-project/compiler-rt/lib/fuzzer.git", + "rev": "487e79376394754705984c5de7c4ce7f82f2bd7c", + "hash": "sha256-xQXfRIcQmAVP0k2mT7Blv1wBxL6wDaWTbIPGcTiMZRo=" + }, + "src/third_party/fuzztest/src": { + "url": "https://chromium.googlesource.com/external/github.com/google/fuzztest.git", + "rev": "a29e31cb00ec9b123dec5a0c6b8d4bc12c2480c8", + "hash": "sha256-g+iJrywURQfdYpco26VN+OlhZkVcFzmAK18C7W7/WLU=" + }, + "src/third_party/domato/src": { + "url": "https://chromium.googlesource.com/external/github.com/googleprojectzero/domato.git", + "rev": "053714bccbda79cf76dac3fee48ab2b27f21925e", + "hash": "sha256-fYxoA0fxKe9U23j+Jp0MWj4m7RfsRpM0XjF6/yOhX1I=" + }, + "src/third_party/libaddressinput/src": { + "url": "https://chromium.googlesource.com/external/libaddressinput.git", + "rev": "e8712e415627f22d0b00ebee8db99547077f39bd", + "hash": "sha256-xvUUQSPrvqUp5DI9AqlRTWurwDW087c6v4RvI+4sfOQ=" + }, + "src/third_party/libaom/source/libaom": { + "url": "https://aomedia.googlesource.com/aom.git", + "rev": "d5265b173616ce62de231cd1b1eae853ad03641e", + "hash": "sha256-uFUIodoC9qpLycwtWRgc0iqaqcUsvVmwAAQGHKolWto=" + }, + "src/third_party/libavif/src": { + "url": "https://chromium.googlesource.com/external/github.com/AOMediaCodec/libavif.git", + "rev": "c2177c3316a49505dcd592ba21073f7abc25cd37", + "hash": "sha256-2GKqPgWs1TD0nPW7VoSo8dz3ugPsZhcy2K1V35XflSk=" + }, + "src/third_party/crabbyavif/src": { + "url": "https://chromium.googlesource.com/external/github.com/webmproject/CrabbyAvif.git", + "rev": "adfb834d76c6a064f28bb3a694689fc14a42425e", + "hash": "sha256-9ooMkYOHRYbV2kdxu8VWUNgBeBsrN4kWUb8cZJwZfiU=" + }, + "src/third_party/libavifinfo/src": { + "url": "https://aomedia.googlesource.com/libavifinfo.git", + "rev": "8d8b58a3f517ef8d1794baa28ca6ae7d19f65514", + "hash": "sha256-61OPjdMCIbHvWncmBzNw6sqlHcuc1kyqm9k1j4UTcZ0=" + }, + "src/third_party/nearby/src": { + "url": "https://chromium.googlesource.com/external/github.com/google/nearby-connections.git", + "rev": "3c8737f92d765407e4ff6c87b8758ba99ede40ed", + "hash": "sha256-RZsdeT1gkbrOuHvngs+Iavl9YE27jLx4AXXYOvSXZoI=" + }, + "src/third_party/beto-core/src": { + "url": "https://beto-core.googlesource.com/beto-core.git", + "rev": "89563fec14c756482afa08b016eeba9087c8d1e3", + "hash": "sha256-QPFGjtu/I0r4+dTQ2eSlWIEYwJ43B3yW0q4QtVFTVGY=" + }, + "src/third_party/securemessage/src": { + "url": "https://chromium.googlesource.com/external/github.com/google/securemessage.git", + "rev": "fa07beb12babc3b25e0c5b1f38c16aa8cb6b8f84", + "hash": "sha256-GS4ccnuiqxMs/LVYAtvSlVAYFp4a5GoZsxcriTX3k78=" + }, + "src/third_party/speedometer/v3.0": { + "url": "https://chromium.googlesource.com/external/github.com/WebKit/Speedometer.git", + "rev": "8d67f28d0281ac4330f283495b7f48286654ad7d", + "hash": "sha256-qMQ4naX+4uUu3vtzzinjkhxX9/dNoTwj6vWCu4FdQmU=" + }, + "src/third_party/ukey2/src": { + "url": "https://chromium.googlesource.com/external/github.com/google/ukey2.git", + "rev": "0275885d8e6038c39b8a8ca55e75d1d4d1727f47", + "hash": "sha256-aaLs6ZS+CdBlCJ6ZhsmdAPFxiBIij6oufsDcNeRSV1E=" + }, + "src/third_party/cros-components/src": { + "url": "https://chromium.googlesource.com/external/google3/cros_components.git", + "rev": "08a6ca6559c8d07c79fb5576a44e016e3126c221", + "hash": "sha256-gEhAwW6u8VgBRFmAddRBlosbf/a9lhRLgs70Dvh1zos=" + }, + "src/third_party/libdrm/src": { + "url": "https://chromium.googlesource.com/chromiumos/third_party/libdrm.git", + "rev": "ad78bb591d02162d3b90890aa4d0a238b2a37cde", + "hash": "sha256-woSYEDUfcEBpYOYnli13wLMt754A7KnUbmTEcFQdFGw=" + }, + "src/third_party/expat/src": { + "url": "https://chromium.googlesource.com/external/github.com/libexpat/libexpat.git", + "rev": "624da0f593bb8d7e146b9f42b06d8e6c80d032a3", + "hash": "sha256-Iwu9+i/0vsPyu6pOWFxjNNblVxMl6bTPW5eWyaju4Mg=" + }, + "src/third_party/libipp/libipp": { + "url": "https://chromium.googlesource.com/chromiumos/platform2/libipp.git", + "rev": "2209bb84a8e122dab7c02fe66cc61a7b42873d7f", + "hash": "sha256-gxU92lHLd6uxO8T3QWhZIK0hGy97cki705DV0VimCPY=" + }, + "src/third_party/libjpeg_turbo": { + "url": "https://chromium.googlesource.com/chromium/deps/libjpeg_turbo.git", + "rev": "927aabfcd26897abb9776ecf2a6c38ea5bb52ab6", + "hash": "sha256-qgHXAjCDFxQ+QqJ8pSmI1NUvHvKKTi4MkIe1I/+hUAI=" + }, + "src/third_party/liblouis/src": { + "url": "https://chromium.googlesource.com/external/liblouis-github.git", + "rev": "9700847afb92cb35969bdfcbbfbbb74b9c7b3376", + "hash": "sha256-EI/uaHXe0NlqdEw764q0SjerThYEVLRogUlmrsZwXnY=" + }, + "src/third_party/libphonenumber/dist": { + "url": "https://chromium.googlesource.com/external/libphonenumber.git", + "rev": "140dfeb81b753388e8a672900fb7a971e9a0d362", + "hash": "sha256-3hSnTFTD3KAdbyxfKg12qbIYTmw6YlTCH64gMP/HUJo=" + }, + "src/third_party/libprotobuf-mutator/src": { + "url": "https://chromium.googlesource.com/external/github.com/google/libprotobuf-mutator.git", + "rev": "a304ec48dcf15d942607032151f7e9ee504b5dcf", + "hash": "sha256-ZyPweW+V5foxFQwjjMLkaRUo+FNV+kEDGIH/4oRV614=" + }, + "src/third_party/libsrtp": { + "url": "https://chromium.googlesource.com/chromium/deps/libsrtp.git", + "rev": "000edd791434c8738455f10e0dd6b268a4852c0b", + "hash": "sha256-4qEZ9MD97MoqCUlZtbEhIKy+fDO1iIWqyrBsKwkjXTg=" + }, + "src/third_party/libsync/src": { + "url": "https://chromium.googlesource.com/aosp/platform/system/core/libsync.git", + "rev": "f4f4387b6bf2387efbcfd1453af4892e8982faf6", + "hash": "sha256-Mkl6C1LxF3RYLwYbxiSfoQPt8QKFwQWj/Ati2sNJ32E=" + }, + "src/third_party/libvpx/source/libvpx": { + "url": "https://chromium.googlesource.com/webm/libvpx.git", + "rev": "fbf63dff1f528d44f24bd662abb89fd01a4a1c25", + "hash": "sha256-fXEPPgUdTsvzbLc8mp7v0MWw/9FfOooIIKjRshvYi2o=" + }, + "src/third_party/libwebm/source": { + "url": "https://chromium.googlesource.com/webm/libwebm.git", + "rev": "26d9f667170dc75e8d759a997bb61c64dec42dda", + "hash": "sha256-Mn3snC2g4BDKBJsS6cxT3BZL7LZknOWg77+60Nr4Hy0=" + }, + "src/third_party/libwebp/src": { + "url": "https://chromium.googlesource.com/webm/libwebp.git", + "rev": "845d5476a866141ba35ac133f856fa62f0b7445f", + "hash": "sha256-xuRpEwOnaLGZmrPvfUn3DSoJANd94CG+JXcN7Mdmk5I=" + }, + "src/third_party/libyuv": { + "url": "https://chromium.googlesource.com/libyuv/libyuv.git", + "rev": "4620f1705822fd6ab99939f43ce63099bd3d9ae0", + "hash": "sha256-tQ7eCY1udoGHRoFr83obQ994IMfxqaH68StvXJ6obZ8=" + }, + "src/third_party/lss": { + "url": "https://chromium.googlesource.com/linux-syscall-support.git", + "rev": "ce877209e11aa69dcfffbd53ef90ea1d07136521", + "hash": "sha256-hE8uZf9Fst66qJkoVYChiB8G41ie+k9M4X0W+5JUSdw=" + }, + "src/third_party/material_color_utilities/src": { + "url": "https://chromium.googlesource.com/external/github.com/material-foundation/material-color-utilities.git", + "rev": "13434b50dcb64a482cc91191f8cf6151d90f5465", + "hash": "sha256-Y85XU+z9W6tvmDNHJ/dXQnUKXvvDkO3nH/kUJRLqbc4=" + }, + "src/third_party/minigbm/src": { + "url": "https://chromium.googlesource.com/chromiumos/platform/minigbm.git", + "rev": "3018207f4d89395cc271278fb9a6558b660885f5", + "hash": "sha256-9HwvjTETerbQ7YKXH9kUB2eWa8PxGWMAJfx1jAluhrs=" + }, + "src/third_party/nasm": { + "url": "https://chromium.googlesource.com/chromium/deps/nasm.git", + "rev": "f477acb1049f5e043904b87b825c5915084a9a29", + "hash": "sha256-SiRXHsUlWXtH6dbDjDjqNAm105ibEB3jOfNtQAM4CaY=" + }, + "src/third_party/neon_2_sse/src": { + "url": "https://chromium.googlesource.com/external/github.com/intel/ARM_NEON_2_x86_SSE.git", + "rev": "a15b489e1222b2087007546b4912e21293ea86ff", + "hash": "sha256-299ZptvdTmCnIuVVBkrpf5ZTxKPwgcGUob81tEI91F0=" + }, + "src/third_party/openh264/src": { + "url": "https://chromium.googlesource.com/external/github.com/cisco/openh264", + "rev": "478e5ab3eca30e600006d5a0a08b176fd34d3bd1", + "hash": "sha256-S7dS2IZwt4p4ZrF6K7E5HnwKuI3owU2I7vwtu95uTkE=" + }, + "src/third_party/openscreen/src": { + "url": "https://chromium.googlesource.com/openscreen", + "rev": "b720e33d337c68353e5d80a72491fb438f27d93a", + "hash": "sha256-y2XOZ3CmGdI0S/DLnOwAhm0kGTf/ayJ6OwPVlQCQqBw=" + }, + "src/third_party/openscreen/src/buildtools": { + "url": "https://chromium.googlesource.com/chromium/src/buildtools", + "rev": "4e0e9c73a0f26735f034f09a9cab2a5c0178536b", + "hash": "sha256-suuxUL//BfAMmG8os8ChI7ic9EjGTi7y5kjxiAyrEQc=" + }, + "src/third_party/openscreen/src/third_party/tinycbor/src": { + "url": "https://chromium.googlesource.com/external/github.com/intel/tinycbor.git", + "rev": "d393c16f3eb30d0c47e6f9d92db62272f0ec4dc7", + "hash": "sha256-fMKBFUSKmODQyg4hKIa1hwnEKIV6WBbY1Gb8DOSnaHA=" + }, + "src/third_party/pdfium": { + "url": "https://pdfium.googlesource.com/pdfium.git", + "rev": "2b675cf15ab4b68bf1ed4e0511ba2479e11f1605", + "hash": "sha256-znfeKj2ttFWalFPeP9o8NPYLHD+pWAKuWVudX59MhLw=" + }, + "src/third_party/perfetto": { + "url": "https://android.googlesource.com/platform/external/perfetto.git", + "rev": "9170899ab284db894f14439e561f02f83a04d88e", + "hash": "sha256-ej8yXGOlmqwnWBbKR99qtIn3MvImaqV5ResVp95zdcM=" + }, + "src/third_party/protobuf-javascript/src": { + "url": "https://chromium.googlesource.com/external/github.com/protocolbuffers/protobuf-javascript", + "rev": "e34549db516f8712f678fcd4bc411613b5cc5295", + "hash": "sha256-TmP6xftUVTD7yML7UEM/DB8bcsL5RFlKPyCpcboD86U=" + }, + "src/third_party/pthreadpool/src": { + "url": "https://chromium.googlesource.com/external/github.com/Maratyszcza/pthreadpool.git", + "rev": "560c60d342a76076f0557a3946924c6478470044", + "hash": "sha256-rGg6lgLkmbYo+a9CdaXz9ZUyrqJ1rxLcjLJeBEOPAlE=" + }, + "src/third_party/pyelftools": { + "url": "https://chromium.googlesource.com/chromiumos/third_party/pyelftools.git", + "rev": "19b3e610c86fcadb837d252c794cb5e8008826ae", + "hash": "sha256-I/7p3IEvfP/gkes4kx18PvWwhAKilQKb67GXoW4zFB4=" + }, + "src/third_party/quic_trace/src": { + "url": "https://chromium.googlesource.com/external/github.com/google/quic-trace.git", + "rev": "caa0a6eaba816ecb737f9a70782b7c80b8ac8dbc", + "hash": "sha256-Nf9ZDLcE1JunhbpEMHhrY2ROnbgrvVZoRkPwWq1DU0g=" + }, + "src/third_party/pywebsocket3/src": { + "url": "https://chromium.googlesource.com/external/github.com/GoogleChromeLabs/pywebsocket3.git", + "rev": "50602a14f1b6da17e0b619833a13addc6ea78bc2", + "hash": "sha256-WEqqu2/7fLqcf/2/IcD7/FewRSZ6jTgVlVBvnihthYQ=" + }, + "src/third_party/re2/src": { + "url": "https://chromium.googlesource.com/external/github.com/google/re2.git", + "rev": "6dcd83d60f7944926bfd308cc13979fc53dd69ca", + "hash": "sha256-IeANwJlJl45yf8iu/AZNDoiyIvTCZIeK1b74sdCfAIc=" + }, + "src/third_party/ruy/src": { + "url": "https://chromium.googlesource.com/external/github.com/google/ruy.git", + "rev": "c08ec529fc91722bde519628d9449258082eb847", + "hash": "sha256-4NVvqUZn2BdwTxJINTHwPeRqbGXZrWdcd7jv1Y+eoKY=" + }, + "src/third_party/skia": { + "url": "https://skia.googlesource.com/skia.git", + "rev": "3c64459d5df2fa9794b277f0959ed8a92552bf4c", + "hash": "sha256-u/K96HEBcx1sge4wSf3m4xDkZEoFaxekHafgmC4rjVQ=" + }, + "src/third_party/smhasher/src": { + "url": "https://chromium.googlesource.com/external/smhasher.git", + "rev": "e87738e57558e0ec472b2fc3a643b838e5b6e88f", + "hash": "sha256-RyC//me08hwGXRrWcK8GZ1uhIkBq4FByA7fHCVDsniw=" + }, + "src/third_party/snappy/src": { + "url": "https://chromium.googlesource.com/external/github.com/google/snappy.git", + "rev": "c9f9edf6d75bb065fa47468bf035e051a57bec7c", + "hash": "sha256-5fV6NfO8vmqK+iCwpLtE2YjYOzjsshctauyjNIOxrH0=" + }, + "src/third_party/sqlite/src": { + "url": "https://chromium.googlesource.com/chromium/deps/sqlite.git", + "rev": "567495a62a62dc013888500526e82837d727fe01", + "hash": "sha256-ltl3OTk/wZPSj3yYthNlKd3mBxef6l5uW6UYTwebNek=" + }, + "src/third_party/swiftshader": { + "url": "https://swiftshader.googlesource.com/SwiftShader.git", + "rev": "2afc8c97882a5c66abf5f26670ae420d2e30adc3", + "hash": "sha256-U29q1G3gnJdoucdLGZEbwpkGpDE4C2lv2b5WqpUf2Ho=" + }, + "src/third_party/text-fragments-polyfill/src": { + "url": "https://chromium.googlesource.com/external/github.com/GoogleChromeLabs/text-fragments-polyfill.git", + "rev": "c036420683f672d685e27415de0a5f5e85bdc23f", + "hash": "sha256-4rW2u1cQAF4iPWHAt1FvVXIpz2pmI901rEPks/w/iFA=" + }, + "src/third_party/tflite/src": { + "url": "https://chromium.googlesource.com/external/github.com/tensorflow/tensorflow.git", + "rev": "d29299c16ec49623af1294900dba53fc8864f0bb", + "hash": "sha256-HtvrZur/vifocB/TKLDkzTLjFbGee4xGUhRLShozo9M=" + }, + "src/third_party/vulkan-deps": { + "url": "https://chromium.googlesource.com/vulkan-deps", + "rev": "c045c2192ab45a144b419033dffe6190be5d8c93", + "hash": "sha256-U8iB5HlLHzpeBJjd9XODWONDy7GTfNbM2kjGBIAhabU=" + }, + "src/third_party/glslang/src": { + "url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/glslang", + "rev": "dc1012140e015d43711514d1294ac6f626890a40", + "hash": "sha256-6lVjQb8FOyGmRGEcNDzL55s/9bcDY3jIz4Xm3BK3GoI=" + }, + "src/third_party/spirv-cross/src": { + "url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/SPIRV-Cross", + "rev": "b8fcf307f1f347089e3c46eb4451d27f32ebc8d3", + "hash": "sha256-H43M9DXfEuyKuvo6rjb5k0KEbYOSFodbPJh8ZKY4PQg=" + }, + "src/third_party/spirv-headers/src": { + "url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/SPIRV-Headers", + "rev": "2a9b6f951c7d6b04b6c21fe1bf3f475b68b84801", + "hash": "sha256-o1yRTvP7a+XVwendTKBJKNnelVGWLD0gH258GGeUDhQ=" + }, + "src/third_party/spirv-tools/src": { + "url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/SPIRV-Tools", + "rev": "37d2fcb485bf3fcadb18ef90aab6f283dcc4be72", + "hash": "sha256-13y7Z6wMeAmV2dgMepgQPB+c+Pjc2O3C2G0kdlBVsNE=" + }, + "src/third_party/vulkan-headers/src": { + "url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Headers", + "rev": "c6391a7b8cd57e79ce6b6c832c8e3043c4d9967b", + "hash": "sha256-8q6uu3v7j7poTMkn0oxj+RewIqhjCOuBz/QG/oFnWBI=" + }, + "src/third_party/vulkan-loader/src": { + "url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Loader", + "rev": "1108bba6c97174d172d45470a7470a3d6a564647", + "hash": "sha256-dA9yc8nv8HDF8WA7bSReqI2JtUU41/Xl4J/CQlq0nuU=" + }, + "src/third_party/vulkan-tools/src": { + "url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Tools", + "rev": "4c63e845962ff3b197855f3ae4907a47d0863f5a", + "hash": "sha256-eEJ9S1/fF5WMT+fRq+ZTzRfb+gxDA8drK8uwPVrFoNc=" + }, + "src/third_party/vulkan-utility-libraries/src": { + "url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Utility-Libraries", + "rev": "ea5774a13e3017b6d5d79af6fba9f0d72ca5c61a", + "hash": "sha256-4jK6OQT5Za46HixUe1kOay2NlTYtf9OHkbZrZ0y6pdI=" + }, + "src/third_party/vulkan-validation-layers/src": { + "url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-ValidationLayers", + "rev": "ef846ac0883cde5e69ced0e7d7af59fe92f34e25", + "hash": "sha256-vwd7n30odVW/Q39lIiVuhyWhnm20giEHlzP14ONXyuw=" + }, + "src/third_party/vulkan_memory_allocator": { + "url": "https://chromium.googlesource.com/external/github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator.git", + "rev": "56300b29fbfcc693ee6609ddad3fdd5b7a449a21", + "hash": "sha256-YzxHZagz/M8Y54UnI4h1wu5jSTuaOgv0ifC9d3fJZlQ=" + }, + "src/third_party/wayland/src": { + "url": "https://chromium.googlesource.com/external/anongit.freedesktop.org/git/wayland/wayland.git", + "rev": "a156431ea66fe67d69c9fbba8a8ad34dabbab81c", + "hash": "sha256-oK0Z8xO2ILuySGZS0m37ZF0MOyle2l8AXb0/6wai0/w=" + }, + "src/third_party/wayland-protocols/src": { + "url": "https://chromium.googlesource.com/external/anongit.freedesktop.org/git/wayland/wayland-protocols.git", + "rev": "7d5a3a8b494ae44cd9651f9505e88a250082765e", + "hash": "sha256-o/adWEXYSqWib6KoK7XMCWbojapcS4O/CEPxv7iFCw8=" + }, + "src/third_party/wayland-protocols/kde": { + "url": "https://chromium.googlesource.com/external/github.com/KDE/plasma-wayland-protocols.git", + "rev": "0b07950714b3a36c9b9f71fc025fc7783e82926e", + "hash": "sha256-Dmcp/2ms/k7NxPPmPkp0YNfM9z2Es1ZO0uX10bc7N2Y=" + }, + "src/third_party/wayland-protocols/gtk": { + "url": "https://chromium.googlesource.com/external/github.com/GNOME/gtk.git", + "rev": "40ebed3a03aef096addc0af09fec4ec529d882a0", + "hash": "sha256-75XNnLkF5Lt1LMRGT+T61k0/mLa3kkynfN+QWvZ0LiQ=" + }, + "src/third_party/webdriver/pylib": { + "url": "https://chromium.googlesource.com/external/github.com/SeleniumHQ/selenium/py.git", + "rev": "fc5e7e70c098bfb189a9a74746809ad3c5c34e04", + "hash": "sha256-WIqWXIKVgElgg8P8laLAlUrgwodGdeVcwohZxnPKedw=" + }, + "src/third_party/webgl/src": { + "url": "https://chromium.googlesource.com/external/khronosgroup/webgl.git", + "rev": "1b6371436a0a60e6b9a4ae2a40a8eba198e3af02", + "hash": "sha256-Yn0e1bpvtD4mGdZaRiBytc+upLulYVyHJqXJiTWEfmA=" + }, + "src/third_party/webgpu-cts/src": { + "url": "https://chromium.googlesource.com/external/github.com/gpuweb/cts.git", + "rev": "2f55512456a725e77f3baac3d951de5c6c5e28a3", + "hash": "sha256-3ruYKYHOkqlJcrjl4xvQV+OtULbgNUvXGBfrd5WTGyY=" + }, + "src/third_party/webrtc": { + "url": "https://webrtc.googlesource.com/src.git", + "rev": "28b793b4dd275bf2b901b87e01c0ee8d4f5732fc", + "hash": "sha256-4URlxWupNm67GeUGLJe3Dz1IONIq1mCjG5Lf4csKFKo=" + }, + "src/third_party/wuffs/src": { + "url": "https://skia.googlesource.com/external/github.com/google/wuffs-mirror-release-c.git", + "rev": "e3f919ccfe3ef542cfc983a82146070258fb57f8", + "hash": "sha256-373d2F/STcgCHEq+PO+SCHrKVOo6uO1rqqwRN5eeBCw=" + }, + "src/third_party/weston/src": { + "url": "https://chromium.googlesource.com/external/anongit.freedesktop.org/git/wayland/weston.git", + "rev": "ccf29cb237c3ed09c5f370f35239c93d07abfdd7", + "hash": "sha256-y2srFaPUOoB2umzpo4+hFfhNlqXM2AoMGOpUy/ZSacg=" + }, + "src/third_party/xdg-utils": { + "url": "https://chromium.googlesource.com/chromium/deps/xdg-utils.git", + "rev": "cb54d9db2e535ee4ef13cc91b65a1e2741a94a44", + "hash": "sha256-WuQ9uDq+QD17Y20ACFGres4nbkeOiTE2y+tY1avAT5U=" + }, + "src/third_party/xnnpack/src": { + "url": "https://chromium.googlesource.com/external/github.com/google/XNNPACK.git", + "rev": "c4a28daf28c98300da9d9b5213c53f762908825e", + "hash": "sha256-VBrBNjoF3hsRXpBfXP2g9xOujVsmm7AkV6wE4ZwW2ts=" + }, + "src/tools/page_cycler/acid3": { + "url": "https://chromium.googlesource.com/chromium/deps/acid3.git", + "rev": "a926d0a32e02c4c03ae95bb798e6c780e0e184ba", + "hash": "sha256-s/49EaYQRsyxuLejXc1zGDYTD7uO0ddaQIJBP50Bvw0=" + }, + "src/third_party/zstd/src": { + "url": "https://chromium.googlesource.com/external/github.com/facebook/zstd.git", + "rev": "20707e3718ee14250fb8a44b3bf023ea36bd88df", + "hash": "sha256-/IUfh0De9m7ACrisqKlpxZsb+asoAWGXCaK6L+s24Q8=" + }, + "src/v8": { + "url": "https://chromium.googlesource.com/v8/v8.git", + "rev": "9ae5f73732808d0b574e8efe88fcdbc72850fbd0", + "hash": "sha256-Ip7+Qs+U8iIDo0ZxEYSzRQUc/Ipeu7DtD8DS4hTNxJw=" + } + } + }, + "ungoogled-chromium": { + "version": "130.0.6723.116", + "deps": { + "depot_tools": { + "rev": "22df6f8e622dc3e8df8dc8b5d3e3503b169af78e", + "hash": "sha256-C8U5BFLBCorwHvfKvh1xmAzOaDcBAbe3GhwJebENZD4=" + }, + "gn": { + "rev": "20806f79c6b4ba295274e3a589d85db41a02fdaa", + "hash": "sha256-iNXRq3Mr8+wmY1SR4sV7yd2fDiIZ94eReelwFI0UhGU=" + }, + "ungoogled-patches": { + "rev": "130.0.6723.116-1", + "hash": "sha256-+94tSSaOp6vzWkXN1qF3UXMm/Rs3pKmjf+U4x+af818=" + }, + "npmHash": "sha256-4w5m/bTMygidlb4TZHMx1Obp784DLxMwrfe1Uvyyfp8=" + }, + "DEPS": { + "src": { + "url": "https://chromium.googlesource.com/chromium/src.git", + "rev": "130.0.6723.116", + "hash": "sha256-KSUDdIHSzsZBYC+ApQE3iolGOAC0MZETlI2ARNXE0Vg=", + "recompress": true + }, + "src/third_party/clang-format/script": { + "url": "https://chromium.googlesource.com/external/github.com/llvm/llvm-project/clang/tools/clang-format.git", + "rev": "3c0acd2d4e73dd911309d9e970ba09d58bf23a62", + "hash": "sha256-whD8isX2ZhLrFzdxHhFP1S/sZDRgyrzLFaVd7OEFqYo=" + }, + "src/third_party/libc++/src": { + "url": "https://chromium.googlesource.com/external/github.com/llvm/llvm-project/libcxx.git", + "rev": "50ab693ecb611942ce4440d8c9ed707ee65ed5e8", + "hash": "sha256-hKlmY2Bn1f6w0Gmx/Le/LwWk/Gf6hzXqR5C+/w+0CNA=" + }, + "src/third_party/libc++abi/src": { + "url": "https://chromium.googlesource.com/external/github.com/llvm/llvm-project/libcxxabi.git", + "rev": "29b2e9a0f48688da116692cb04758393053d269c", + "hash": "sha256-GtK8z2jn4es3uuxpAgm5AoQvUjvhAunAyUwm3HEqLVA=" + }, + "src/third_party/libunwind/src": { + "url": "https://chromium.googlesource.com/external/github.com/llvm/llvm-project/libunwind.git", + "rev": "dc70138c3e68e2f946585f134e20815851e26263", + "hash": "sha256-5xsrVVSu9b+78GEKeLGNpo7ySxrJ2SeuuKghN6NHlSU=" + }, + "src/chrome/test/data/perf/canvas_bench": { + "url": "https://chromium.googlesource.com/chromium/canvas_bench.git", + "rev": "a7b40ea5ae0239517d78845a5fc9b12976bfc732", + "hash": "sha256-svOuyBGKloBLM11xLlWCDsB4PpRjdKTBdW2UEW4JQjM=" + }, + "src/chrome/test/data/perf/frame_rate/content": { + "url": "https://chromium.googlesource.com/chromium/frame_rate/content.git", + "rev": "c10272c88463efeef6bb19c9ec07c42bc8fe22b9", + "hash": "sha256-t4kcuvH0rkPBkcdiMsoNQaRwU09eU+oSvyHDiAHrKXo=" + }, + "src/chrome/test/data/xr/webvr_info": { + "url": "https://chromium.googlesource.com/external/github.com/toji/webvr.info.git", + "rev": "c58ae99b9ff9e2aa4c524633519570bf33536248", + "hash": "sha256-BsAPwc4oEWri0TlqhyxqFNqKdfgVSrB0vQyISmYY4eg=" + }, + "src/docs/website": { + "url": "https://chromium.googlesource.com/website.git", + "rev": "052e29447b43b18da32fff653b9d58ef79fbc836", + "hash": "sha256-XK22S9WwNN4zQZ5teiQ1sZA5m/8rArwq3jCgM6H9KQY=" + }, + "src/media/cdm/api": { + "url": "https://chromium.googlesource.com/chromium/cdm.git", + "rev": "eb21edc44e8e5a82095037be80c8b15c51624293", + "hash": "sha256-6J6aSYW0or99VAgMNJJOdJqMJspoG7w1HxDN50MV5bw=" + }, + "src/net/third_party/quiche/src": { + "url": "https://quiche.googlesource.com/quiche.git", + "rev": "9808dac40e034f09d7af53d3d79589a02e39c211", + "hash": "sha256-NJKJ5cc+wEcmCIFYXWQX4x9BZblbS+wqj+25CcUiPZM=" + }, + "src/testing/libfuzzer/fuzzers/wasm_corpus": { + "url": "https://chromium.googlesource.com/v8/fuzzer_wasm_corpus.git", + "rev": "f650ff816f2ef227f61ea2e9f222aa69708ab367", + "hash": "sha256-qWsGQNUptbz0jYvUuxP7woNf5QQrfn9k3uvr82Yk0QM=" + }, + "src/third_party/accessibility_test_framework/src": { + "url": "https://chromium.googlesource.com/external/github.com/google/Accessibility-Test-Framework-for-Android.git", + "rev": "4a764c690353ea136c82f1a696a70bf38d1ef5fe", + "hash": "sha256-mzVgoxxBWebesG6okyMxxmO6oH+TITA4o9ucHHMMzkQ=" + }, + "src/third_party/angle": { + "url": "https://chromium.googlesource.com/angle/angle.git", + "rev": "fffbc739779a2df56a464fd6853bbfb24bebb5f6", + "hash": "sha256-OtpF7+KQzk0MWhgBlNV1DheHywtBMDQIPhGUOss9Dtg=" + }, + "src/third_party/angle/third_party/glmark2/src": { + "url": "https://chromium.googlesource.com/external/github.com/glmark2/glmark2", + "rev": "ca8de51fedb70bace5351c6b002eb952c747e889", + "hash": "sha256-L7+zWM0qn8WFhmON7DGvarTsN1YHt1sn5+hazTOZrrk=" + }, + "src/third_party/angle/third_party/rapidjson/src": { + "url": "https://chromium.googlesource.com/external/github.com/Tencent/rapidjson", + "rev": "781a4e667d84aeedbeb8184b7b62425ea66ec59f", + "hash": "sha256-btUl1a/B0sXwf/+hyvCvVJjWqIkXfVYCpHm3TeBuOxk=" + }, + "src/third_party/angle/third_party/VK-GL-CTS/src": { + "url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/VK-GL-CTS", + "rev": "1df39e522f4aa358012180fd4cf876af68aff78d", + "hash": "sha256-yPQG/Ddat9H4XZq6Zu5S3VzcZeMhLBcM//KI/3Kxaxg=" + }, + "src/third_party/anonymous_tokens/src": { + "url": "https://chromium.googlesource.com/external/github.com/google/anonymous-tokens.git", + "rev": "6ea6ec78f9e4998d0a7a5677b2aec08f0ac858f8", + "hash": "sha256-PMB49+zW9ewlS9ym+xi0xYQYLN0j5Urx6yBXWd8FjjI=" + }, + "src/third_party/content_analysis_sdk/src": { + "url": "https://chromium.googlesource.com/external/github.com/chromium/content_analysis_sdk.git", + "rev": "9a408736204513e0e95dd2ab3c08de0d95963efc", + "hash": "sha256-f5Jmk1MiGjaRdLun+v/GKVl8Yv9hOZMTQUSxgiJalcY=" + }, + "src/third_party/dav1d/libdav1d": { + "url": "https://chromium.googlesource.com/external/github.com/videolan/dav1d.git", + "rev": "6b3c489a2ee2c030f351f21987c27611b4cbe725", + "hash": "sha256-qJSUt8gMFB+IhOnEAw3t6nj1y7XUY91pLQBF8CeYtas=" + }, + "src/third_party/dawn": { + "url": "https://dawn.googlesource.com/dawn.git", + "rev": "70a01d28c3ecd75b67a87e4643bd4d55fc391ce6", + "hash": "sha256-x5Fm7DGAFfDmZ9p6JY16+QSPPztxNrG/HvQrZ26NnZM=" + }, + "src/third_party/dawn/third_party/glfw": { + "url": "https://chromium.googlesource.com/external/github.com/glfw/glfw", + "rev": "b35641f4a3c62aa86a0b3c983d163bc0fe36026d", + "hash": "sha256-E1zXIDiw87badrLOZTvV+Wh9NZHu51nb70ZK9vlAlqE=" + }, + "src/third_party/dawn/third_party/dxc": { + "url": "https://chromium.googlesource.com/external/github.com/microsoft/DirectXShaderCompiler", + "rev": "05334a70d3e5355fc86c94bb4e3cfe1c31a65999", + "hash": "sha256-CrR08tw9e+4U+fa6E9xoP/4puPNHEjLrxtSju8psLlk=" + }, + "src/third_party/dawn/third_party/dxheaders": { + "url": "https://chromium.googlesource.com/external/github.com/microsoft/DirectX-Headers", + "rev": "980971e835876dc0cde415e8f9bc646e64667bf7", + "hash": "sha256-0Miw1Cy/jmOo7bLFBOHuTRDV04cSeyvUEyPkpVsX9DA=" + }, + "src/third_party/dawn/third_party/webgpu-headers": { + "url": "https://chromium.googlesource.com/external/github.com/webgpu-native/webgpu-headers", + "rev": "8049c324dc7b3c09dc96ea04cb02860f272c8686", + "hash": "sha256-J3PcwYoO79HqrACFgk77BZLTCi7oi5k2J6v3wlcFVD4=" + }, + "src/third_party/dawn/third_party/khronos/OpenGL-Registry": { + "url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/OpenGL-Registry", + "rev": "5bae8738b23d06968e7c3a41308568120943ae77", + "hash": "sha256-K3PcRIiD3AmnbiSm5TwaLs4Gu9hxaN8Y91WMKK8pOXE=" + }, + "src/third_party/dawn/third_party/khronos/EGL-Registry": { + "url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/EGL-Registry", + "rev": "7dea2ed79187cd13f76183c4b9100159b9e3e071", + "hash": "sha256-Z6DwLfgQ1wsJXz0KKJyVieOatnDmx3cs0qJ6IEgSq1A=" + }, + "src/third_party/dawn/third_party/webgpu-cts": { + "url": "https://chromium.googlesource.com/external/github.com/gpuweb/cts", + "rev": "a5065e398d2430c83e17ef9cbad6eae31d1efa8f", + "hash": "sha256-heIL8hhaVr0uRi2lD+7RFltggVFW48ZY9Tdl0yVRdac=" + }, + "src/third_party/highway/src": { + "url": "https://chromium.googlesource.com/external/github.com/google/highway.git", + "rev": "8295336dd70f1201d42c22ab5b0861de38cf8fbf", + "hash": "sha256-PXsXIqWB4NNiFhanRjMIFSWYuW/IRuQo8mMPUBEentY=" + }, + "src/third_party/google_benchmark/src": { + "url": "https://chromium.googlesource.com/external/github.com/google/benchmark.git", + "rev": "344117638c8ff7e239044fd0fa7085839fc03021", + "hash": "sha256-gztnxui9Fe/FTieMjdvfJjWHjkImtlsHn6fM1FruyME=" + }, + "src/third_party/boringssl/src": { + "url": "https://boringssl.googlesource.com/boringssl.git", + "rev": "58f3bc83230d2958bb9710bc910972c4f5d382dc", + "hash": "sha256-on+VonYXZ710oqgaK/OKa9Huq2mSXp8SJcj9CciHsf8=" + }, + "src/third_party/breakpad/breakpad": { + "url": "https://chromium.googlesource.com/breakpad/breakpad.git", + "rev": "6b0c5b7ee1988a14a4af94564e8ae8bba8a94374", + "hash": "sha256-kTkwRfaqw5ZCHEvu2YPZ+1vCfekHkY5pY3m9snDN64g=" + }, + "src/third_party/cast_core/public/src": { + "url": "https://chromium.googlesource.com/cast_core/public", + "rev": "71f51fd6fa45fac73848f65421081edd723297cd", + "hash": "sha256-AalRQhJmornCqmvE2+36J/3LubaA0jr6P1PXy32lX4I=" + }, + "src/third_party/catapult": { + "url": "https://chromium.googlesource.com/catapult.git", + "rev": "296226a4a0067c8cffeb8831fb87526a8035f3cc", + "hash": "sha256-IHubCuEBE9W0wRudOmjUoaOvT66JuVTzEBUOTvdnXqQ=" + }, + "src/third_party/ced/src": { + "url": "https://chromium.googlesource.com/external/github.com/google/compact_enc_det.git", + "rev": "ba412eaaacd3186085babcd901679a48863c7dd5", + "hash": "sha256-ySG74Rj2i2c/PltEgHVEDq+N8yd9gZmxNktc56zIUiY=" + }, + "src/third_party/chromium-variations": { + "url": "https://chromium.googlesource.com/chromium-variations.git", + "rev": "6aa57f2c6b49402b55ec607c17bd7ee8946970b0", + "hash": "sha256-DR5rJdnDKunS/PHtVK1n4zk0MmK54LhlawZW74711LY=" + }, + "src/third_party/cld_3/src": { + "url": "https://chromium.googlesource.com/external/github.com/google/cld_3.git", + "rev": "b48dc46512566f5a2d41118c8c1116c4f96dc661", + "hash": "sha256-C3MOMBUy9jgkT9BAi/Fgm2UH4cxRuwSBEcRl3hzM2Ss=" + }, + "src/third_party/colorama/src": { + "url": "https://chromium.googlesource.com/external/colorama.git", + "rev": "3de9f013df4b470069d03d250224062e8cf15c49", + "hash": "sha256-6ZTdPYSHdQOLYMSnE+Tp7PgsVTs3U2awGu9Qb4Rg/tk=" + }, + "src/third_party/cpu_features/src": { + "url": "https://chromium.googlesource.com/external/github.com/google/cpu_features.git", + "rev": "936b9ab5515dead115606559502e3864958f7f6e", + "hash": "sha256-E8LoVzhe+TAmARWZTSuINlsVhzpUJMxPPCGe/dHZcyA=" + }, + "src/third_party/cpuinfo/src": { + "url": "https://chromium.googlesource.com/external/github.com/pytorch/cpuinfo.git", + "rev": "ca678952a9a8eaa6de112d154e8e104b22f9ab3f", + "hash": "sha256-UKy9TIiO/UJ5w+qLRlMd085CX2qtdVH2W3rtxB5r6MY=" + }, + "src/third_party/crc32c/src": { + "url": "https://chromium.googlesource.com/external/github.com/google/crc32c.git", + "rev": "d3d60ac6e0f16780bcfcc825385e1d338801a558", + "hash": "sha256-KBraGaO5LmmPP+p8RuDogGldbTWdNDK+WzF4Q09keuE=" + }, + "src/third_party/cros_system_api": { + "url": "https://chromium.googlesource.com/chromiumos/platform2/system_api.git", + "rev": "2f88f9c4581a9c854604fa23516de8c9c13b227b", + "hash": "sha256-9rM9m6VRX7B+h9JiICN5O9rBYdQEHNlCUnQMuaTy/1s=" + }, + "src/third_party/crossbench": { + "url": "https://chromium.googlesource.com/crossbench.git", + "rev": "2b812597dd143dbdc560ff2f28d5f8d3adc700d4", + "hash": "sha256-7IuhXuxXD3xBkgazg3B9GZknlNv8Xi0eTHkeQv63ayk=" + }, + "src/third_party/depot_tools": { + "url": "https://chromium.googlesource.com/chromium/tools/depot_tools.git", + "rev": "22df6f8e622dc3e8df8dc8b5d3e3503b169af78e", + "hash": "sha256-C8U5BFLBCorwHvfKvh1xmAzOaDcBAbe3GhwJebENZD4=" + }, + "src/third_party/devtools-frontend/src": { + "url": "https://chromium.googlesource.com/devtools/devtools-frontend", + "rev": "deee9c11c9f76ef595b7d0b52fcf677d25aac5f2", + "hash": "sha256-gRc2ei5m7a5KVKEMIivPGy1IQqDIaJxUJHLd5k2F+GQ=" + }, + "src/third_party/dom_distiller_js/dist": { + "url": "https://chromium.googlesource.com/chromium/dom-distiller/dist.git", + "rev": "199de96b345ada7c6e7e6ba3d2fa7a6911b8767d", + "hash": "sha256-yuEBD2XQlV3FGI/i7lTmJbCqzeBiuG1Qow8wvsppGJw=" + }, + "src/third_party/eigen3/src": { + "url": "https://chromium.googlesource.com/external/gitlab.com/libeigen/eigen.git", + "rev": "134b526d6110061469168e7e0511822a8e30bcaf", + "hash": "sha256-U4SMReXTFZg7YGyefI6MXIB66nt5OiANMH0HUyr/xIc=" + }, + "src/third_party/farmhash/src": { + "url": "https://chromium.googlesource.com/external/github.com/google/farmhash.git", + "rev": "816a4ae622e964763ca0862d9dbd19324a1eaf45", + "hash": "sha256-5n58VEUxa/K//jAfZqG4cXyfxrp50ogWDNYcgiXVHdc=" + }, + "src/third_party/fast_float/src": { + "url": "https://chromium.googlesource.com/external/github.com/fastfloat/fast_float.git", + "rev": "3e57d8dcfb0a04b5a8a26b486b54490a2e9b310f", + "hash": "sha256-0eVovauN7SnO3nSIWBRWAJ4dR7q5beZrIGUZ18M2pao=" + }, + "src/third_party/ffmpeg": { + "url": "https://chromium.googlesource.com/chromium/third_party/ffmpeg.git", + "rev": "91903c28af60a732a051c343b496e1188eec9b05", + "hash": "sha256-HnpWlSfXxa951UkFgL/2zKoaBeveuVkTZz/iqYXjkH8=" + }, + "src/third_party/flac": { + "url": "https://chromium.googlesource.com/chromium/deps/flac.git", + "rev": "689da3a7ed50af7448c3f1961d1791c7c1d9c85c", + "hash": "sha256-gvTFPNOlBfozptaH7lTb9iD/09AmpdT3kCl9ClszjEs=" + }, + "src/third_party/flatbuffers/src": { + "url": "https://chromium.googlesource.com/external/github.com/google/flatbuffers.git", + "rev": "8db59321d9f02cdffa30126654059c7d02f70c32", + "hash": "sha256-tbc45o0MbMvK5XqRUJt5Eg8BU6+TJqlmwFgQhHq6wRM=" + }, + "src/third_party/fontconfig/src": { + "url": "https://chromium.googlesource.com/external/fontconfig.git", + "rev": "14d466b30a8ab4a9d789977ed94f2c30e7209267", + "hash": "sha256-W5WIgC6A52kY4fNkbsDEa0o+dfd97Rl5NKfgnIRpI00=" + }, + "src/third_party/fp16/src": { + "url": "https://chromium.googlesource.com/external/github.com/Maratyszcza/FP16.git", + "rev": "0a92994d729ff76a58f692d3028ca1b64b145d91", + "hash": "sha256-m2d9bqZoGWzuUPGkd29MsrdscnJRtuIkLIMp3fMmtRY=" + }, + "src/third_party/gemmlowp/src": { + "url": "https://chromium.googlesource.com/external/github.com/google/gemmlowp.git", + "rev": "13d57703abca3005d97b19df1f2db731607a7dc2", + "hash": "sha256-O5wD8wxgis0qYMaY+xZ21GBDVQFphMRvInCOswS6inA=" + }, + "src/third_party/grpc/src": { + "url": "https://chromium.googlesource.com/external/github.com/grpc/grpc.git", + "rev": "822dab21d9995c5cf942476b35ca12a1aa9d2737", + "hash": "sha256-64JEVCx/PCM0dvv7kAQvSjLc0QbRAZVBDzwD/FAV6T8=" + }, + "src/third_party/freetype/src": { + "url": "https://chromium.googlesource.com/chromium/src/third_party/freetype2.git", + "rev": "83af801b552111e37d9466a887e1783a0fb5f196", + "hash": "sha256-w5Zd4yvGoMQ0BmDGa2b9gK/+7f+UaZDRYqEdMGH/zKg=" + }, + "src/third_party/freetype-testing/src": { + "url": "https://chromium.googlesource.com/external/github.com/freetype/freetype2-testing.git", + "rev": "7a69b1a2b028476f840ab7d4a2ffdfe4eb2c389f", + "hash": "sha256-2aHPchIK5Oce5+XxdXVCC+8EM6i0XT0rFbjSIVa2L1A=" + }, + "src/third_party/fxdiv/src": { + "url": "https://chromium.googlesource.com/external/github.com/Maratyszcza/FXdiv.git", + "rev": "63058eff77e11aa15bf531df5dd34395ec3017c8", + "hash": "sha256-LjX5kivfHbqCIA5pF9qUvswG1gjOFo3CMpX0VR+Cn38=" + }, + "src/third_party/harfbuzz-ng/src": { + "url": "https://chromium.googlesource.com/external/github.com/harfbuzz/harfbuzz.git", + "rev": "1da053e87f0487382404656edca98b85fe51f2fd", + "hash": "sha256-iR49rfGDKxPObCff1/30hYHpP5FpZ28ROgMZhNk9eFY=" + }, + "src/third_party/instrumented_libs": { + "url": "https://chromium.googlesource.com/chromium/third_party/instrumented_libraries.git", + "rev": "bb6dbcf2df7a9beb34c3773ef4df161800e3aed9", + "hash": "sha256-kHKGADAgzlaeckXFbpU1GhJK+zkiRd9XvdtPF6qrQFY=" + }, + "src/third_party/emoji-segmenter/src": { + "url": "https://chromium.googlesource.com/external/github.com/google/emoji-segmenter.git", + "rev": "6b8f235b72deba7d6ef113631129b274c14941ef", + "hash": "sha256-sI6UgXTWxXJajB2h2LH3caf7cqRbBshD5GoLocrUivk=" + }, + "src/third_party/ots/src": { + "url": "https://chromium.googlesource.com/external/github.com/khaledhosny/ots.git", + "rev": "46bea9879127d0ff1c6601b078e2ce98e83fcd33", + "hash": "sha256-kiUXrXsaGOzPkKh0dVmU1I13WHt0Stzj7QLMqHN9FbU=" + }, + "src/third_party/libgav1/src": { + "url": "https://chromium.googlesource.com/codecs/libgav1.git", + "rev": "a2f139e9123bdb5edf7707ac6f1b73b3aa5038dd", + "hash": "sha256-+ss9S5t+yoHzqbtX68+5OyyUbJVecYLwp+C3EXfAziE=" + }, + "src/third_party/googletest/src": { + "url": "https://chromium.googlesource.com/external/github.com/google/googletest.git", + "rev": "0953a17a4281fc26831da647ad3fcd5e21e6473b", + "hash": "sha256-jccFUondvjWgCBC3oCLUXqtLV07pkEq8IEZ+FLu1MrE=" + }, + "src/third_party/hunspell_dictionaries": { + "url": "https://chromium.googlesource.com/chromium/deps/hunspell_dictionaries.git", + "rev": "41cdffd71c9948f63c7ad36e1fb0ff519aa7a37e", + "hash": "sha256-67mvpJRFFa9eMfyqFMURlbxOaTJBICnk+gl0b0mEHl8=" + }, + "src/third_party/icu": { + "url": "https://chromium.googlesource.com/chromium/deps/icu.git", + "rev": "9408c6fd4a39e6fef0e1c4077602e1c83b15f3fb", + "hash": "sha256-YlX+PaPhvYh9JzHT9WtS1beUK+cQrHGVUl+IBbv7GeQ=" + }, + "src/third_party/jsoncpp/source": { + "url": "https://chromium.googlesource.com/external/github.com/open-source-parsers/jsoncpp.git", + "rev": "42e892d96e47b1f6e29844cc705e148ec4856448", + "hash": "sha256-bSLNcoYBz3QCt5VuTR056V9mU2PmBuYBa0W6hFg2m8Q=" + }, + "src/third_party/leveldatabase/src": { + "url": "https://chromium.googlesource.com/external/leveldb.git", + "rev": "23e35d792b9154f922b8b575b12596a4d8664c65", + "hash": "sha256-y3awFXL8ih2UhEqWj8JRgkhzSxfQciLztb020JHJ350=" + }, + "src/third_party/libFuzzer/src": { + "url": "https://chromium.googlesource.com/external/github.com/llvm/llvm-project/compiler-rt/lib/fuzzer.git", + "rev": "487e79376394754705984c5de7c4ce7f82f2bd7c", + "hash": "sha256-xQXfRIcQmAVP0k2mT7Blv1wBxL6wDaWTbIPGcTiMZRo=" + }, + "src/third_party/fuzztest/src": { + "url": "https://chromium.googlesource.com/external/github.com/google/fuzztest.git", + "rev": "a29e31cb00ec9b123dec5a0c6b8d4bc12c2480c8", + "hash": "sha256-g+iJrywURQfdYpco26VN+OlhZkVcFzmAK18C7W7/WLU=" + }, + "src/third_party/domato/src": { + "url": "https://chromium.googlesource.com/external/github.com/googleprojectzero/domato.git", + "rev": "053714bccbda79cf76dac3fee48ab2b27f21925e", + "hash": "sha256-fYxoA0fxKe9U23j+Jp0MWj4m7RfsRpM0XjF6/yOhX1I=" + }, + "src/third_party/libaddressinput/src": { + "url": "https://chromium.googlesource.com/external/libaddressinput.git", + "rev": "e8712e415627f22d0b00ebee8db99547077f39bd", + "hash": "sha256-xvUUQSPrvqUp5DI9AqlRTWurwDW087c6v4RvI+4sfOQ=" + }, + "src/third_party/libaom/source/libaom": { + "url": "https://aomedia.googlesource.com/aom.git", + "rev": "d5265b173616ce62de231cd1b1eae853ad03641e", + "hash": "sha256-uFUIodoC9qpLycwtWRgc0iqaqcUsvVmwAAQGHKolWto=" + }, + "src/third_party/libavif/src": { + "url": "https://chromium.googlesource.com/external/github.com/AOMediaCodec/libavif.git", + "rev": "c2177c3316a49505dcd592ba21073f7abc25cd37", + "hash": "sha256-2GKqPgWs1TD0nPW7VoSo8dz3ugPsZhcy2K1V35XflSk=" + }, + "src/third_party/crabbyavif/src": { + "url": "https://chromium.googlesource.com/external/github.com/webmproject/CrabbyAvif.git", + "rev": "adfb834d76c6a064f28bb3a694689fc14a42425e", + "hash": "sha256-9ooMkYOHRYbV2kdxu8VWUNgBeBsrN4kWUb8cZJwZfiU=" + }, + "src/third_party/libavifinfo/src": { + "url": "https://aomedia.googlesource.com/libavifinfo.git", + "rev": "8d8b58a3f517ef8d1794baa28ca6ae7d19f65514", + "hash": "sha256-61OPjdMCIbHvWncmBzNw6sqlHcuc1kyqm9k1j4UTcZ0=" + }, + "src/third_party/nearby/src": { + "url": "https://chromium.googlesource.com/external/github.com/google/nearby-connections.git", + "rev": "3c8737f92d765407e4ff6c87b8758ba99ede40ed", + "hash": "sha256-RZsdeT1gkbrOuHvngs+Iavl9YE27jLx4AXXYOvSXZoI=" + }, + "src/third_party/beto-core/src": { + "url": "https://beto-core.googlesource.com/beto-core.git", + "rev": "89563fec14c756482afa08b016eeba9087c8d1e3", + "hash": "sha256-QPFGjtu/I0r4+dTQ2eSlWIEYwJ43B3yW0q4QtVFTVGY=" + }, + "src/third_party/securemessage/src": { + "url": "https://chromium.googlesource.com/external/github.com/google/securemessage.git", + "rev": "fa07beb12babc3b25e0c5b1f38c16aa8cb6b8f84", + "hash": "sha256-GS4ccnuiqxMs/LVYAtvSlVAYFp4a5GoZsxcriTX3k78=" + }, + "src/third_party/speedometer/v3.0": { + "url": "https://chromium.googlesource.com/external/github.com/WebKit/Speedometer.git", + "rev": "8d67f28d0281ac4330f283495b7f48286654ad7d", + "hash": "sha256-qMQ4naX+4uUu3vtzzinjkhxX9/dNoTwj6vWCu4FdQmU=" + }, + "src/third_party/ukey2/src": { + "url": "https://chromium.googlesource.com/external/github.com/google/ukey2.git", + "rev": "0275885d8e6038c39b8a8ca55e75d1d4d1727f47", + "hash": "sha256-aaLs6ZS+CdBlCJ6ZhsmdAPFxiBIij6oufsDcNeRSV1E=" + }, + "src/third_party/cros-components/src": { + "url": "https://chromium.googlesource.com/external/google3/cros_components.git", + "rev": "08a6ca6559c8d07c79fb5576a44e016e3126c221", + "hash": "sha256-gEhAwW6u8VgBRFmAddRBlosbf/a9lhRLgs70Dvh1zos=" + }, + "src/third_party/libdrm/src": { + "url": "https://chromium.googlesource.com/chromiumos/third_party/libdrm.git", + "rev": "ad78bb591d02162d3b90890aa4d0a238b2a37cde", + "hash": "sha256-woSYEDUfcEBpYOYnli13wLMt754A7KnUbmTEcFQdFGw=" + }, + "src/third_party/expat/src": { + "url": "https://chromium.googlesource.com/external/github.com/libexpat/libexpat.git", + "rev": "624da0f593bb8d7e146b9f42b06d8e6c80d032a3", + "hash": "sha256-Iwu9+i/0vsPyu6pOWFxjNNblVxMl6bTPW5eWyaju4Mg=" + }, + "src/third_party/libipp/libipp": { + "url": "https://chromium.googlesource.com/chromiumos/platform2/libipp.git", + "rev": "2209bb84a8e122dab7c02fe66cc61a7b42873d7f", + "hash": "sha256-gxU92lHLd6uxO8T3QWhZIK0hGy97cki705DV0VimCPY=" + }, + "src/third_party/libjpeg_turbo": { + "url": "https://chromium.googlesource.com/chromium/deps/libjpeg_turbo.git", + "rev": "927aabfcd26897abb9776ecf2a6c38ea5bb52ab6", + "hash": "sha256-qgHXAjCDFxQ+QqJ8pSmI1NUvHvKKTi4MkIe1I/+hUAI=" + }, + "src/third_party/liblouis/src": { + "url": "https://chromium.googlesource.com/external/liblouis-github.git", + "rev": "9700847afb92cb35969bdfcbbfbbb74b9c7b3376", + "hash": "sha256-EI/uaHXe0NlqdEw764q0SjerThYEVLRogUlmrsZwXnY=" + }, + "src/third_party/libphonenumber/dist": { + "url": "https://chromium.googlesource.com/external/libphonenumber.git", + "rev": "140dfeb81b753388e8a672900fb7a971e9a0d362", + "hash": "sha256-3hSnTFTD3KAdbyxfKg12qbIYTmw6YlTCH64gMP/HUJo=" + }, + "src/third_party/libprotobuf-mutator/src": { + "url": "https://chromium.googlesource.com/external/github.com/google/libprotobuf-mutator.git", + "rev": "a304ec48dcf15d942607032151f7e9ee504b5dcf", + "hash": "sha256-ZyPweW+V5foxFQwjjMLkaRUo+FNV+kEDGIH/4oRV614=" + }, + "src/third_party/libsrtp": { + "url": "https://chromium.googlesource.com/chromium/deps/libsrtp.git", + "rev": "000edd791434c8738455f10e0dd6b268a4852c0b", + "hash": "sha256-4qEZ9MD97MoqCUlZtbEhIKy+fDO1iIWqyrBsKwkjXTg=" + }, + "src/third_party/libsync/src": { + "url": "https://chromium.googlesource.com/aosp/platform/system/core/libsync.git", + "rev": "f4f4387b6bf2387efbcfd1453af4892e8982faf6", + "hash": "sha256-Mkl6C1LxF3RYLwYbxiSfoQPt8QKFwQWj/Ati2sNJ32E=" + }, + "src/third_party/libvpx/source/libvpx": { + "url": "https://chromium.googlesource.com/webm/libvpx.git", + "rev": "fbf63dff1f528d44f24bd662abb89fd01a4a1c25", + "hash": "sha256-fXEPPgUdTsvzbLc8mp7v0MWw/9FfOooIIKjRshvYi2o=" + }, + "src/third_party/libwebm/source": { + "url": "https://chromium.googlesource.com/webm/libwebm.git", + "rev": "26d9f667170dc75e8d759a997bb61c64dec42dda", + "hash": "sha256-Mn3snC2g4BDKBJsS6cxT3BZL7LZknOWg77+60Nr4Hy0=" + }, + "src/third_party/libwebp/src": { + "url": "https://chromium.googlesource.com/webm/libwebp.git", + "rev": "845d5476a866141ba35ac133f856fa62f0b7445f", + "hash": "sha256-xuRpEwOnaLGZmrPvfUn3DSoJANd94CG+JXcN7Mdmk5I=" + }, + "src/third_party/libyuv": { + "url": "https://chromium.googlesource.com/libyuv/libyuv.git", + "rev": "4620f1705822fd6ab99939f43ce63099bd3d9ae0", + "hash": "sha256-tQ7eCY1udoGHRoFr83obQ994IMfxqaH68StvXJ6obZ8=" + }, + "src/third_party/lss": { + "url": "https://chromium.googlesource.com/linux-syscall-support.git", + "rev": "ce877209e11aa69dcfffbd53ef90ea1d07136521", + "hash": "sha256-hE8uZf9Fst66qJkoVYChiB8G41ie+k9M4X0W+5JUSdw=" + }, + "src/third_party/material_color_utilities/src": { + "url": "https://chromium.googlesource.com/external/github.com/material-foundation/material-color-utilities.git", + "rev": "13434b50dcb64a482cc91191f8cf6151d90f5465", + "hash": "sha256-Y85XU+z9W6tvmDNHJ/dXQnUKXvvDkO3nH/kUJRLqbc4=" + }, + "src/third_party/minigbm/src": { + "url": "https://chromium.googlesource.com/chromiumos/platform/minigbm.git", + "rev": "3018207f4d89395cc271278fb9a6558b660885f5", + "hash": "sha256-9HwvjTETerbQ7YKXH9kUB2eWa8PxGWMAJfx1jAluhrs=" + }, + "src/third_party/nasm": { + "url": "https://chromium.googlesource.com/chromium/deps/nasm.git", + "rev": "f477acb1049f5e043904b87b825c5915084a9a29", + "hash": "sha256-SiRXHsUlWXtH6dbDjDjqNAm105ibEB3jOfNtQAM4CaY=" + }, + "src/third_party/neon_2_sse/src": { + "url": "https://chromium.googlesource.com/external/github.com/intel/ARM_NEON_2_x86_SSE.git", + "rev": "a15b489e1222b2087007546b4912e21293ea86ff", + "hash": "sha256-299ZptvdTmCnIuVVBkrpf5ZTxKPwgcGUob81tEI91F0=" + }, + "src/third_party/openh264/src": { + "url": "https://chromium.googlesource.com/external/github.com/cisco/openh264", + "rev": "478e5ab3eca30e600006d5a0a08b176fd34d3bd1", + "hash": "sha256-S7dS2IZwt4p4ZrF6K7E5HnwKuI3owU2I7vwtu95uTkE=" + }, + "src/third_party/openscreen/src": { + "url": "https://chromium.googlesource.com/openscreen", + "rev": "b720e33d337c68353e5d80a72491fb438f27d93a", + "hash": "sha256-y2XOZ3CmGdI0S/DLnOwAhm0kGTf/ayJ6OwPVlQCQqBw=" + }, + "src/third_party/openscreen/src/buildtools": { + "url": "https://chromium.googlesource.com/chromium/src/buildtools", + "rev": "4e0e9c73a0f26735f034f09a9cab2a5c0178536b", + "hash": "sha256-suuxUL//BfAMmG8os8ChI7ic9EjGTi7y5kjxiAyrEQc=" + }, + "src/third_party/openscreen/src/third_party/tinycbor/src": { + "url": "https://chromium.googlesource.com/external/github.com/intel/tinycbor.git", + "rev": "d393c16f3eb30d0c47e6f9d92db62272f0ec4dc7", + "hash": "sha256-fMKBFUSKmODQyg4hKIa1hwnEKIV6WBbY1Gb8DOSnaHA=" + }, + "src/third_party/pdfium": { + "url": "https://pdfium.googlesource.com/pdfium.git", + "rev": "2b675cf15ab4b68bf1ed4e0511ba2479e11f1605", + "hash": "sha256-znfeKj2ttFWalFPeP9o8NPYLHD+pWAKuWVudX59MhLw=" + }, + "src/third_party/perfetto": { + "url": "https://android.googlesource.com/platform/external/perfetto.git", + "rev": "9170899ab284db894f14439e561f02f83a04d88e", + "hash": "sha256-ej8yXGOlmqwnWBbKR99qtIn3MvImaqV5ResVp95zdcM=" + }, + "src/third_party/protobuf-javascript/src": { + "url": "https://chromium.googlesource.com/external/github.com/protocolbuffers/protobuf-javascript", + "rev": "e34549db516f8712f678fcd4bc411613b5cc5295", + "hash": "sha256-TmP6xftUVTD7yML7UEM/DB8bcsL5RFlKPyCpcboD86U=" + }, + "src/third_party/pthreadpool/src": { + "url": "https://chromium.googlesource.com/external/github.com/Maratyszcza/pthreadpool.git", + "rev": "560c60d342a76076f0557a3946924c6478470044", + "hash": "sha256-rGg6lgLkmbYo+a9CdaXz9ZUyrqJ1rxLcjLJeBEOPAlE=" + }, + "src/third_party/pyelftools": { + "url": "https://chromium.googlesource.com/chromiumos/third_party/pyelftools.git", + "rev": "19b3e610c86fcadb837d252c794cb5e8008826ae", + "hash": "sha256-I/7p3IEvfP/gkes4kx18PvWwhAKilQKb67GXoW4zFB4=" + }, + "src/third_party/quic_trace/src": { + "url": "https://chromium.googlesource.com/external/github.com/google/quic-trace.git", + "rev": "caa0a6eaba816ecb737f9a70782b7c80b8ac8dbc", + "hash": "sha256-Nf9ZDLcE1JunhbpEMHhrY2ROnbgrvVZoRkPwWq1DU0g=" + }, + "src/third_party/pywebsocket3/src": { + "url": "https://chromium.googlesource.com/external/github.com/GoogleChromeLabs/pywebsocket3.git", + "rev": "50602a14f1b6da17e0b619833a13addc6ea78bc2", + "hash": "sha256-WEqqu2/7fLqcf/2/IcD7/FewRSZ6jTgVlVBvnihthYQ=" + }, + "src/third_party/re2/src": { + "url": "https://chromium.googlesource.com/external/github.com/google/re2.git", + "rev": "6dcd83d60f7944926bfd308cc13979fc53dd69ca", + "hash": "sha256-IeANwJlJl45yf8iu/AZNDoiyIvTCZIeK1b74sdCfAIc=" + }, + "src/third_party/ruy/src": { + "url": "https://chromium.googlesource.com/external/github.com/google/ruy.git", + "rev": "c08ec529fc91722bde519628d9449258082eb847", + "hash": "sha256-4NVvqUZn2BdwTxJINTHwPeRqbGXZrWdcd7jv1Y+eoKY=" + }, + "src/third_party/skia": { + "url": "https://skia.googlesource.com/skia.git", + "rev": "3c64459d5df2fa9794b277f0959ed8a92552bf4c", + "hash": "sha256-u/K96HEBcx1sge4wSf3m4xDkZEoFaxekHafgmC4rjVQ=" + }, + "src/third_party/smhasher/src": { + "url": "https://chromium.googlesource.com/external/smhasher.git", + "rev": "e87738e57558e0ec472b2fc3a643b838e5b6e88f", + "hash": "sha256-RyC//me08hwGXRrWcK8GZ1uhIkBq4FByA7fHCVDsniw=" + }, + "src/third_party/snappy/src": { + "url": "https://chromium.googlesource.com/external/github.com/google/snappy.git", + "rev": "c9f9edf6d75bb065fa47468bf035e051a57bec7c", + "hash": "sha256-5fV6NfO8vmqK+iCwpLtE2YjYOzjsshctauyjNIOxrH0=" + }, + "src/third_party/sqlite/src": { + "url": "https://chromium.googlesource.com/chromium/deps/sqlite.git", + "rev": "567495a62a62dc013888500526e82837d727fe01", + "hash": "sha256-ltl3OTk/wZPSj3yYthNlKd3mBxef6l5uW6UYTwebNek=" + }, + "src/third_party/swiftshader": { + "url": "https://swiftshader.googlesource.com/SwiftShader.git", + "rev": "2afc8c97882a5c66abf5f26670ae420d2e30adc3", + "hash": "sha256-U29q1G3gnJdoucdLGZEbwpkGpDE4C2lv2b5WqpUf2Ho=" + }, + "src/third_party/text-fragments-polyfill/src": { + "url": "https://chromium.googlesource.com/external/github.com/GoogleChromeLabs/text-fragments-polyfill.git", + "rev": "c036420683f672d685e27415de0a5f5e85bdc23f", + "hash": "sha256-4rW2u1cQAF4iPWHAt1FvVXIpz2pmI901rEPks/w/iFA=" + }, + "src/third_party/tflite/src": { + "url": "https://chromium.googlesource.com/external/github.com/tensorflow/tensorflow.git", + "rev": "d29299c16ec49623af1294900dba53fc8864f0bb", + "hash": "sha256-HtvrZur/vifocB/TKLDkzTLjFbGee4xGUhRLShozo9M=" + }, + "src/third_party/vulkan-deps": { + "url": "https://chromium.googlesource.com/vulkan-deps", + "rev": "c045c2192ab45a144b419033dffe6190be5d8c93", + "hash": "sha256-U8iB5HlLHzpeBJjd9XODWONDy7GTfNbM2kjGBIAhabU=" + }, + "src/third_party/glslang/src": { + "url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/glslang", + "rev": "dc1012140e015d43711514d1294ac6f626890a40", + "hash": "sha256-6lVjQb8FOyGmRGEcNDzL55s/9bcDY3jIz4Xm3BK3GoI=" + }, + "src/third_party/spirv-cross/src": { + "url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/SPIRV-Cross", + "rev": "b8fcf307f1f347089e3c46eb4451d27f32ebc8d3", + "hash": "sha256-H43M9DXfEuyKuvo6rjb5k0KEbYOSFodbPJh8ZKY4PQg=" + }, + "src/third_party/spirv-headers/src": { + "url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/SPIRV-Headers", + "rev": "2a9b6f951c7d6b04b6c21fe1bf3f475b68b84801", + "hash": "sha256-o1yRTvP7a+XVwendTKBJKNnelVGWLD0gH258GGeUDhQ=" + }, + "src/third_party/spirv-tools/src": { + "url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/SPIRV-Tools", + "rev": "37d2fcb485bf3fcadb18ef90aab6f283dcc4be72", + "hash": "sha256-13y7Z6wMeAmV2dgMepgQPB+c+Pjc2O3C2G0kdlBVsNE=" + }, + "src/third_party/vulkan-headers/src": { + "url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Headers", + "rev": "c6391a7b8cd57e79ce6b6c832c8e3043c4d9967b", + "hash": "sha256-8q6uu3v7j7poTMkn0oxj+RewIqhjCOuBz/QG/oFnWBI=" + }, + "src/third_party/vulkan-loader/src": { + "url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Loader", + "rev": "1108bba6c97174d172d45470a7470a3d6a564647", + "hash": "sha256-dA9yc8nv8HDF8WA7bSReqI2JtUU41/Xl4J/CQlq0nuU=" + }, + "src/third_party/vulkan-tools/src": { + "url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Tools", + "rev": "4c63e845962ff3b197855f3ae4907a47d0863f5a", + "hash": "sha256-eEJ9S1/fF5WMT+fRq+ZTzRfb+gxDA8drK8uwPVrFoNc=" + }, + "src/third_party/vulkan-utility-libraries/src": { + "url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Utility-Libraries", + "rev": "ea5774a13e3017b6d5d79af6fba9f0d72ca5c61a", + "hash": "sha256-4jK6OQT5Za46HixUe1kOay2NlTYtf9OHkbZrZ0y6pdI=" + }, + "src/third_party/vulkan-validation-layers/src": { + "url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-ValidationLayers", + "rev": "ef846ac0883cde5e69ced0e7d7af59fe92f34e25", + "hash": "sha256-vwd7n30odVW/Q39lIiVuhyWhnm20giEHlzP14ONXyuw=" + }, + "src/third_party/vulkan_memory_allocator": { + "url": "https://chromium.googlesource.com/external/github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator.git", + "rev": "56300b29fbfcc693ee6609ddad3fdd5b7a449a21", + "hash": "sha256-YzxHZagz/M8Y54UnI4h1wu5jSTuaOgv0ifC9d3fJZlQ=" + }, + "src/third_party/wayland/src": { + "url": "https://chromium.googlesource.com/external/anongit.freedesktop.org/git/wayland/wayland.git", + "rev": "a156431ea66fe67d69c9fbba8a8ad34dabbab81c", + "hash": "sha256-oK0Z8xO2ILuySGZS0m37ZF0MOyle2l8AXb0/6wai0/w=" + }, + "src/third_party/wayland-protocols/src": { + "url": "https://chromium.googlesource.com/external/anongit.freedesktop.org/git/wayland/wayland-protocols.git", + "rev": "7d5a3a8b494ae44cd9651f9505e88a250082765e", + "hash": "sha256-o/adWEXYSqWib6KoK7XMCWbojapcS4O/CEPxv7iFCw8=" + }, + "src/third_party/wayland-protocols/kde": { + "url": "https://chromium.googlesource.com/external/github.com/KDE/plasma-wayland-protocols.git", + "rev": "0b07950714b3a36c9b9f71fc025fc7783e82926e", + "hash": "sha256-Dmcp/2ms/k7NxPPmPkp0YNfM9z2Es1ZO0uX10bc7N2Y=" + }, + "src/third_party/wayland-protocols/gtk": { + "url": "https://chromium.googlesource.com/external/github.com/GNOME/gtk.git", + "rev": "40ebed3a03aef096addc0af09fec4ec529d882a0", + "hash": "sha256-75XNnLkF5Lt1LMRGT+T61k0/mLa3kkynfN+QWvZ0LiQ=" + }, + "src/third_party/webdriver/pylib": { + "url": "https://chromium.googlesource.com/external/github.com/SeleniumHQ/selenium/py.git", + "rev": "fc5e7e70c098bfb189a9a74746809ad3c5c34e04", + "hash": "sha256-WIqWXIKVgElgg8P8laLAlUrgwodGdeVcwohZxnPKedw=" + }, + "src/third_party/webgl/src": { + "url": "https://chromium.googlesource.com/external/khronosgroup/webgl.git", + "rev": "1b6371436a0a60e6b9a4ae2a40a8eba198e3af02", + "hash": "sha256-Yn0e1bpvtD4mGdZaRiBytc+upLulYVyHJqXJiTWEfmA=" + }, + "src/third_party/webgpu-cts/src": { + "url": "https://chromium.googlesource.com/external/github.com/gpuweb/cts.git", + "rev": "2f55512456a725e77f3baac3d951de5c6c5e28a3", + "hash": "sha256-3ruYKYHOkqlJcrjl4xvQV+OtULbgNUvXGBfrd5WTGyY=" + }, + "src/third_party/webrtc": { + "url": "https://webrtc.googlesource.com/src.git", + "rev": "28b793b4dd275bf2b901b87e01c0ee8d4f5732fc", + "hash": "sha256-4URlxWupNm67GeUGLJe3Dz1IONIq1mCjG5Lf4csKFKo=" + }, + "src/third_party/wuffs/src": { + "url": "https://skia.googlesource.com/external/github.com/google/wuffs-mirror-release-c.git", + "rev": "e3f919ccfe3ef542cfc983a82146070258fb57f8", + "hash": "sha256-373d2F/STcgCHEq+PO+SCHrKVOo6uO1rqqwRN5eeBCw=" + }, + "src/third_party/weston/src": { + "url": "https://chromium.googlesource.com/external/anongit.freedesktop.org/git/wayland/weston.git", + "rev": "ccf29cb237c3ed09c5f370f35239c93d07abfdd7", + "hash": "sha256-y2srFaPUOoB2umzpo4+hFfhNlqXM2AoMGOpUy/ZSacg=" + }, + "src/third_party/xdg-utils": { + "url": "https://chromium.googlesource.com/chromium/deps/xdg-utils.git", + "rev": "cb54d9db2e535ee4ef13cc91b65a1e2741a94a44", + "hash": "sha256-WuQ9uDq+QD17Y20ACFGres4nbkeOiTE2y+tY1avAT5U=" + }, + "src/third_party/xnnpack/src": { + "url": "https://chromium.googlesource.com/external/github.com/google/XNNPACK.git", + "rev": "c4a28daf28c98300da9d9b5213c53f762908825e", + "hash": "sha256-VBrBNjoF3hsRXpBfXP2g9xOujVsmm7AkV6wE4ZwW2ts=" + }, + "src/tools/page_cycler/acid3": { + "url": "https://chromium.googlesource.com/chromium/deps/acid3.git", + "rev": "a926d0a32e02c4c03ae95bb798e6c780e0e184ba", + "hash": "sha256-s/49EaYQRsyxuLejXc1zGDYTD7uO0ddaQIJBP50Bvw0=" + }, + "src/third_party/zstd/src": { + "url": "https://chromium.googlesource.com/external/github.com/facebook/zstd.git", + "rev": "20707e3718ee14250fb8a44b3bf023ea36bd88df", + "hash": "sha256-/IUfh0De9m7ACrisqKlpxZsb+asoAWGXCaK6L+s24Q8=" + }, + "src/v8": { + "url": "https://chromium.googlesource.com/v8/v8.git", + "rev": "9ae5f73732808d0b574e8efe88fcdbc72850fbd0", + "hash": "sha256-Ip7+Qs+U8iIDo0ZxEYSzRQUc/Ipeu7DtD8DS4hTNxJw=" + } + } + } +} diff --git a/pkgs/applications/networking/browsers/chromium/recompress-tarball.nix b/pkgs/applications/networking/browsers/chromium/recompress-tarball.nix deleted file mode 100644 index ab1c81338f97..000000000000 --- a/pkgs/applications/networking/browsers/chromium/recompress-tarball.nix +++ /dev/null @@ -1,56 +0,0 @@ -{ zstd -, fetchurl -, lib -, chromiumVersionAtLeast -}: - -{ version -, hash ? "" -} @ args: - -fetchurl ({ - name = "chromium-${version}.tar.zstd"; - url = "https://commondatastorage.googleapis.com/chromium-browser-official/chromium-${version}.tar.xz"; - inherit hash; - - # chromium xz tarballs are multiple gigabytes big and are sometimes downloaded multiples - # times for different versions as part of our update script. - # We originally inherited fetchzip's default for downloadToTemp (true). - # Given the size of the /run/user tmpfs used defaults to logind's RuntimeDirectorySize=, - # which in turn defaults to 10% of the total amount of physical RAM, this often lead to - # "no space left" errors, eventually resulting in its own section in our chromium - # README.md (for users wanting to run the update script). - # Nowadays, we use fetchurl instead of fetchzip, which defaults to false instead of true. - # We just want to be explicit and provide a place to document the history and reasoning - # behind this. - downloadToTemp = false; - - nativeBuildInputs = [ zstd ]; - - postFetch = '' - cat "$downloadedFile" \ - | xz -d --threads=$NIX_BUILD_CORES \ - | tar xf - \ - --warning=no-timestamp \ - --one-top-level=source \ - --exclude=third_party/llvm \ - --exclude=third_party/rust-src \ - --exclude='build/linux/debian_*-sysroot' \ - '' + lib.optionalString (chromiumVersionAtLeast "127") '' - --exclude='*.tar.[a-zA-Z0-9][a-zA-Z0-9]' \ - --exclude='*.tar.[a-zA-Z0-9][a-zA-Z0-9][a-zA-Z0-9]' \ - --exclude=third_party/llvm-build \ - --exclude=third_party/rust-toolchain \ - --exclude=third_party/instrumented_libs \ - '' + '' - --strip-components=1 - - tar \ - --use-compress-program "zstd -T$NIX_BUILD_CORES" \ - --sort name \ - --mtime "1970-01-01" \ - --owner=root --group=root \ - --numeric-owner --mode=go=rX,u+rw,a-s \ - -cf $out source - ''; -} // removeAttrs args [ "version" ]) diff --git a/pkgs/applications/networking/browsers/chromium/update.mjs b/pkgs/applications/networking/browsers/chromium/update.mjs new file mode 100755 index 000000000000..6a596c354a4c --- /dev/null +++ b/pkgs/applications/networking/browsers/chromium/update.mjs @@ -0,0 +1,227 @@ +#! /usr/bin/env nix-shell +/* +#! nix-shell -i zx -p zx +*/ + +cd(__dirname) +const nixpkgs = (await $`git rev-parse --show-toplevel`).stdout.trim() +const $nixpkgs = $({ + cwd: nixpkgs +}) + +const dummy_hash = 'sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=' + +const lockfile_file = './info.json' +const lockfile_initial = fs.readJsonSync(lockfile_file) +function flush_to_file() { + fs.writeJsonSync(lockfile_file, lockfile, { spaces: 2 }) +} +const flush_to_file_proxy = { + get(obj, prop) { + const value = obj[prop] + return typeof value == 'object' ? new Proxy(value, flush_to_file_proxy) : value + }, + + set(obj, prop, value) { + obj[prop] = value + flush_to_file() + return true + }, +} +const lockfile = new Proxy(structuredClone(lockfile_initial), flush_to_file_proxy) + + +for (const attr_path of Object.keys(lockfile)) { + if (!argv[attr_path]) { + console.log(`[${attr_path}] Skipping ${attr_path}. Pass --${attr_path} as argument to update.`) + continue + } + + const ungoogled = attr_path === 'ungoogled-chromium' + const version_nixpkgs = !ungoogled ? lockfile[attr_path].version : lockfile[attr_path].deps["ungoogled-patches"].rev + const version_upstream = !ungoogled ? await get_latest_chromium_release() : await get_latest_ungoogled_release() + + console.log(`[${attr_path}] ${chalk.red(version_nixpkgs)} (nixpkgs)`) + console.log(`[${attr_path}] ${chalk.green(version_upstream)} (upstream)`) + + if (version_greater_than(version_upstream, version_nixpkgs)) { + console.log(`[${attr_path}] ${chalk.green(version_upstream)} from upstream is newer than our ${chalk.red(version_nixpkgs)}...`) + + // unconditionally remove ungoogled-chromium's epoch/sub-version (e.g. 130.0.6723.116-1 -> 130.0.6723.116) + const version_chromium = version_upstream.split('-')[0] + + lockfile[attr_path] = { + version: version_chromium, + chromedriver: !ungoogled ? await fetch_chromedriver_binaries(version_chromium) : undefined, + deps: { + depot_tools: {}, + gn: {}, + "ungoogled-patches": ungoogled ? await fetch_ungoogled(version_upstream) : undefined, + npmHash: dummy_hash, + }, + DEPS: {}, + } + + const depot_tools = await fetch_depot_tools(version_chromium, lockfile_initial[attr_path].deps.depot_tools) + lockfile[attr_path].deps.depot_tools = { + rev: depot_tools.rev, + hash: depot_tools.hash, + } + + const gn = await fetch_gn(version_chromium, lockfile_initial[attr_path].deps.gn) + lockfile[attr_path].deps.gn = { + rev: gn.rev, + hash: gn.hash, + } + + // DEPS update loop + lockfile[attr_path].DEPS = await resolve_DEPS(depot_tools.out, version_chromium) + for (const [path, value] of Object.entries(lockfile[attr_path].DEPS)) { + delete value.fetcher + delete value.postFetch + + if (value.url === 'https://chromium.googlesource.com/chromium/src.git') { + value.recompress = true + } + + const cache = lockfile_initial[attr_path].DEPS[path] + const cache_hit = + cache !== undefined && + value.url === cache.url && + value.rev === cache.rev && + value.recompress === cache.recompress && + cache.hash !== undefined && + cache.hash !== '' && + cache.hash !== dummy_hash + if (cache_hit) { + console.log(`[${chalk.green(path)}] Reusing hash from previous info.json for ${cache.url}@${cache.rev}`) + value.hash = cache.hash + continue + } + + console.log(`[${chalk.red(path)}] FOD prefetching ${value.url}@${value.rev}...`) + value.hash = await prefetch_FOD('-A', `${attr_path}.browser.passthru.chromiumDeps."${path}"`) + console.log(`[${chalk.green(path)}] FOD prefetching successful`) + } + + lockfile[attr_path].deps.npmHash = await prefetch_FOD('-A', `${attr_path}.browser.passthru.npmDeps`) + + console.log(chalk.green(`[${attr_path}] Done updating ${attr_path} from ${version_nixpkgs} to ${version_upstream}!`)) + } +} + + +async function fetch_gn(chromium_rev, gn_previous) { + const DEPS_file = await get_gitiles_file('https://chromium.googlesource.com/chromium/src', chromium_rev, 'DEPS') + const gn_rev = /^\s+'gn_version': 'git_revision:(?.+)',$/m.exec(DEPS_file).groups.rev + const hash = gn_rev === gn_previous.rev ? gn_previous.hash : '' + + return await prefetch_gitiles('https://gn.googlesource.com/gn', gn_rev, hash) +} + + +async function fetch_chromedriver_binaries(chromium_version) { + // https://developer.chrome.com/docs/chromedriver/downloads/version-selection + const prefetch = async (url) => { + const expr = [`(import ./. {}).fetchzip { url = "${url}"; hash = ""; }`] + const derivation = await $nixpkgs`nix-instantiate --expr ${expr}` + return await prefetch_FOD(derivation) + } + + // if the URL ever changes, the URLs in the chromedriver derivations need updating as well! + const url = (platform) => `https://storage.googleapis.com/chrome-for-testing-public/${chromium_version}/${platform}/chromedriver-${platform}.zip` + return { + hash_darwin: await prefetch(url('mac-x64')), + hash_darwin_aarch64: await prefetch(url('mac-arm64')), + } +} + + +async function resolve_DEPS(depot_tools_checkout, chromium_rev) { + const { stdout } = await $`./depot_tools.py ${depot_tools_checkout} ${chromium_rev}` + const deps = JSON.parse(stdout) + return Object.fromEntries(Object.entries(deps).map(([k, { url, rev, hash }]) => [k, { url, rev, hash }])) +} + + +async function get_latest_chromium_release() { + const url = `https://versionhistory.googleapis.com/v1/chrome/platforms/linux/channels/stable/versions/all/releases?` + new URLSearchParams({ + order_by: 'version desc', + filter: 'endtime=none,fraction>=0.5' + }) + + const response = await (await fetch(url)).json() + return response.releases[0].version +} + + +async function get_latest_ungoogled_release() { + const ungoogled_tags = await (await fetch('https://api.github.com/repos/ungoogled-software/ungoogled-chromium/tags')).json() + const chromium_releases = await (await fetch('https://versionhistory.googleapis.com/v1/chrome/platforms/linux/channels/stable/versions/all/releases')).json() + const chromium_release_map = chromium_releases.releases.map((x) => x.version) + return ungoogled_tags.find((x) => chromium_release_map.includes(x.name.split('-')[0])).name +} + + +async function fetch_ungoogled(rev) { + const expr = (hash) => [`(import ./. {}).fetchFromGitHub { owner = "ungoogled-software"; repo = "ungoogled-chromium"; rev = "${rev}"; hash = "${hash}"; }`] + const hash = await prefetch_FOD('--expr', expr('')) + + const checkout = await $nixpkgs`nix-build --expr ${expr(hash)}` + + await fs.copy(`${checkout.stdout.trim()}/flags.gn`, './ungoogled-flags.toml') + + return { + rev, + hash, + } +} + + +function version_greater_than(greater, than) { + return greater.localeCompare(than, undefined, { numeric: true, sensitivity: 'base' }) === 1 +} + + +async function get_gitiles_file(repo, rev, path) { + const base64 = await (await fetch(`${repo}/+/${rev}/${path}?format=TEXT`)).text() + return Buffer.from(base64, 'base64').toString('utf-8') +} + + +async function fetch_depot_tools(chromium_rev, depot_tools_previous) { + const depot_tools_rev = await get_gitiles_file('https://chromium.googlesource.com/chromium/src', chromium_rev, 'third_party/depot_tools') + const hash = depot_tools_rev === depot_tools_previous.rev ? depot_tools_previous.hash : '' + return await prefetch_gitiles('https://chromium.googlesource.com/chromium/tools/depot_tools', depot_tools_rev, hash) +} + + +async function prefetch_gitiles(url, rev, hash = '') { + const expr = () => [`(import ./. {}).fetchFromGitiles { url = "${url}"; rev = "${rev}"; hash = "${hash}"; }`] + + if (hash === '') { + hash = await prefetch_FOD('--expr', expr()) + } + + const { stdout } = await $nixpkgs`nix-build --expr ${expr()}` + + return { + url, + rev, + hash, + out: stdout.trim(), + } +} + + +async function prefetch_FOD(...args) { + const { stderr } = await $nixpkgs`nix-build ${args}`.nothrow() + const hash = /\s+got:\s+(?.+)$/m.exec(stderr)?.groups?.hash + + if (hash == undefined) { + throw new Error(chalk.red('Expected to find hash in nix-build stderr output:') + stderr) + } + + return hash +} + diff --git a/pkgs/applications/networking/browsers/chromium/update.py b/pkgs/applications/networking/browsers/chromium/update.py deleted file mode 100755 index 17bd20c1a794..000000000000 --- a/pkgs/applications/networking/browsers/chromium/update.py +++ /dev/null @@ -1,300 +0,0 @@ -#! /usr/bin/env nix-shell -#! nix-shell -i python -p python3Packages.looseversion nix nixfmt-classic nix-prefetch-git - -"""This script automatically updates chromium, google-chrome, chromedriver, and ungoogled-chromium -via upstream-info.nix.""" -# Usage: ./update.py [--commit] - -import base64 -import csv -import json -import re -import subprocess -import sys - -from codecs import iterdecode -from collections import OrderedDict -from datetime import datetime -from looseversion import LooseVersion -from os.path import abspath, dirname -from urllib.request import urlopen - -RELEASES_URL = 'https://versionhistory.googleapis.com/v1/chrome/platforms/linux/channels/all/versions/all/releases' - -PIN_PATH = dirname(abspath(__file__)) + '/upstream-info.nix' -UNGOOGLED_FLAGS_PATH = dirname(abspath(__file__)) + '/ungoogled-flags.toml' -COMMIT_MESSAGE_SCRIPT = dirname(abspath(__file__)) + '/get-commit-message.py' -NIXPKGS_PATH = subprocess.check_output(["git", "rev-parse", "--show-toplevel"], cwd=dirname(PIN_PATH)).strip() - -def load_as_json(path): - """Loads the given nix file as JSON.""" - out = subprocess.check_output(['nix-instantiate', '--eval', '--strict', '--json', path]) - return json.loads(out) - -def save_dict_as_nix(path, input): - """Saves the given dict/JSON as nix file.""" - json_string = json.dumps(input) - nix = subprocess.check_output(['nix-instantiate', '--eval', '--expr', '{ json }: builtins.fromJSON json', '--argstr', 'json', json_string]) - formatted = subprocess.check_output(['nixfmt'], input=nix) - with open(path, 'w') as out: - out.write(formatted.decode()) - -def prefetch_src_sri_hash(attr_path, version): - """Prefetches the fixed-output-derivation source tarball and returns its SRI-Hash.""" - print(f'nix-build (FOD prefetch) {attr_path} {version}') - out = subprocess.run( - ["nix-build", "--expr", f'(import ./. {{}}).{attr_path}.browser.passthru.recompressTarball {{ version = "{version}"; }}'], - cwd=NIXPKGS_PATH, - stderr=subprocess.PIPE - ).stderr.decode() - - for line in iter(out.split("\n")): - match = re.match(r"\s+got:\s+(.+)$", line) - if match: - print(f'Hash: {match.group(1)}') - return match.group(1) - print(f'{out}\n\nError: Expected hash in nix-build stderr output.', file=sys.stderr) - sys.exit(1) - -def nix_prefetch_url(url, algo='sha256'): - """Prefetches the content of the given URL.""" - print(f'nix store prefetch-file {url}') - out = subprocess.check_output(['nix', 'store', 'prefetch-file', '--json', '--hash-type', algo, url]) - return json.loads(out)['hash'] - - -def nix_prefetch_git(url, rev): - """Prefetches the requested Git revision of the given repository URL.""" - print(f'nix-prefetch-git {url} {rev}') - out = subprocess.check_output(['nix-prefetch-git', '--quiet', '--url', url, '--rev', rev]) - return json.loads(out) - - -def get_file_revision(revision, file_path): - """Fetches the requested Git revision of the given Chromium file.""" - url = f'https://chromium.googlesource.com/chromium/src/+/refs/tags/{revision}/{file_path}?format=TEXT' - with urlopen(url) as http_response: - resp = http_response.read() - return base64.b64decode(resp) - -def get_ungoogled_file_revision(revision, file_path): - """Fetches the requested Git revision of the given Chromium file.""" - url = f'https://raw.githubusercontent.com/ungoogled-software/ungoogled-chromium/{revision}/{file_path}' - with urlopen(url) as http_response: - resp = http_response.read() - return resp.decode("utf-8") - -def get_chromedriver(channel): - """Get the latest chromedriver builds given a channel""" - # See https://chromedriver.chromium.org/downloads/version-selection#h.4wiyvw42q63v - chromedriver_versions_url = f'https://googlechromelabs.github.io/chrome-for-testing/last-known-good-versions-with-downloads.json' - print(f'GET {chromedriver_versions_url}') - with urlopen(chromedriver_versions_url) as http_response: - chromedrivers = json.load(http_response) - channel = chromedrivers['channels'][channel] - downloads = channel['downloads']['chromedriver'] - - def get_chromedriver_url(platform): - for download in downloads: - if download['platform'] == platform: - return download['url'] - - return { - 'version': channel['version'], - 'hash_linux': nix_prefetch_url(get_chromedriver_url('linux64')), - 'hash_darwin': nix_prefetch_url(get_chromedriver_url('mac-x64')), - 'hash_darwin_aarch64': nix_prefetch_url(get_chromedriver_url('mac-arm64')) - } - - -def get_channel_dependencies(version): - """Gets all dependencies for the given Chromium version.""" - deps = get_file_revision(version, 'DEPS') - gn_pattern = b"'gn_version': 'git_revision:([0-9a-f]{40})'" - gn_commit = re.search(gn_pattern, deps).group(1).decode() - gn = nix_prefetch_git('https://gn.googlesource.com/gn', gn_commit) - return { - 'gn': { - 'version': datetime.fromisoformat(gn['date']).date().isoformat(), - 'url': gn['url'], - 'rev': gn['rev'], - 'hash': gn['hash'] - } - } - - -def get_latest_ungoogled_chromium_tag(linux_stable_versions): - """Returns the latest ungoogled-chromium tag for linux using the GitHub API.""" - api_tag_url = 'https://api.github.com/repos/ungoogled-software/ungoogled-chromium/tags' - with urlopen(api_tag_url) as http_response: - tags = json.load(http_response) - for tag in tags: - if not tag['name'].split('-')[0] in linux_stable_versions: - continue - - return tag['name'] - - -def get_latest_ungoogled_chromium_build(linux_stable_versions): - """Returns a dictionary for the latest ungoogled-chromium build.""" - tag = get_latest_ungoogled_chromium_tag(linux_stable_versions) - version = tag.split('-')[0] - return { - 'name': 'chrome/platforms/linux/channels/ungoogled-chromium/versions/', - 'version': version, - 'ungoogled_rev': tag - } - -def get_ungoogled_chromium_build_by_ref(ungoogled_chromium_ref): - """Returns a dictionary for an ungoogled-chromium build referenced by a ref in the ungoogled-chromium repository.""" - version = get_ungoogled_file_revision(ungoogled_chromium_ref, "chromium_version.txt").strip("\n ") - return { - 'name': 'chrome/platforms/linux/channels/ungoogled-chromium/versions/', - 'version': version, - 'ungoogled_rev': ungoogled_chromium_ref - } - - -def get_ungoogled_chromium_gn_flags(revision): - """Returns ungoogled-chromium's GN build flags for the given revision.""" - gn_flags_url = f'https://raw.githubusercontent.com/ungoogled-software/ungoogled-chromium/{revision}/flags.gn' - return urlopen(gn_flags_url).read().decode() - - -def channel_name_to_attr_name(channel_name): - """Maps a channel name to the corresponding main Nixpkgs attribute name.""" - if channel_name == 'stable': - return 'chromium' - if channel_name == 'ungoogled-chromium': - return 'ungoogled-chromium' - print(f'Error: Unexpected channel: {channel_name}', file=sys.stderr) - sys.exit(1) - - -def get_channel_key(item): - """Orders Chromium channels by their name.""" - channel_name = item[0] - if channel_name == 'stable': - return 0 - if channel_name == 'beta': - return 1 - if channel_name == 'dev': - return 2 - if channel_name == 'ungoogled-chromium': - return 3 - print(f'Error: Unexpected channel: {channel_name}', file=sys.stderr) - sys.exit(1) - - -def print_updates(channels_old, channels_new): - """Print a summary of the updates.""" - print('Updates:') - for channel_name in channels_old: - version_old = channels_old[channel_name]["version"] - version_new = channels_new[channel_name]["version"] - if LooseVersion(version_old) < LooseVersion(version_new): - attr_name = channel_name_to_attr_name(channel_name) - print(f'- {attr_name}: {version_old} -> {version_new}') - - -channels = {} -last_channels = load_as_json(PIN_PATH) - -src_hash_cache = {} - - -print(f'GET {RELEASES_URL}', file=sys.stderr) -with urlopen(RELEASES_URL) as resp: - releases = json.load(resp)['releases'] - - if len(sys.argv) == 3 and sys.argv[1] == 'ungoogled-rev': - releases.append(get_ungoogled_chromium_build_by_ref(sys.argv[2])) - else: - linux_stable_versions = [release['version'] for release in releases if release['name'].startswith('chrome/platforms/linux/channels/stable/versions/')] - releases.append(get_latest_ungoogled_chromium_build(linux_stable_versions)) - - for release in releases: - channel_name = re.findall("chrome/platforms/linux/channels/(.*)/versions/", release['name'])[0] - - # If we've already found a newer release for this channel, we're - # no longer interested in it. - if channel_name in channels: - continue - - # We only look for channels that are listed in our version pin file. - if channel_name not in last_channels: - continue - - # If we're back at the last release we used, we don't need to - # keep going -- there's no new version available, and we can - # just reuse the info from last time. - if release['version'] == last_channels[channel_name]['version']: - channels[channel_name] = last_channels[channel_name] - continue - - channel = {'version': release['version']} - if channel_name == 'dev': - google_chrome_suffix = 'unstable' - elif channel_name == 'ungoogled-chromium': - google_chrome_suffix = 'stable' - else: - google_chrome_suffix = channel_name - - try: - version = release["version"] - existing_releases = dict(map(lambda channel: (channel[1]['version'], channel[1]['hash']), last_channels.items())) - - if version in src_hash_cache: - print(f'Already got hash {src_hash_cache[version]} for {version}, skipping FOD prefetch for {channel_name_to_attr_name(channel_name)}') - - channel["hash"] = src_hash_cache[version] - elif version in existing_releases: - print(f'Already got hash {existing_releases[version]} for {version} (from upstream-info.nix), skipping FOD prefetch for {channel_name_to_attr_name(channel_name)}') - - channel["hash"] = existing_releases[version] - else: - channel["hash"] = prefetch_src_sri_hash( - channel_name_to_attr_name(channel_name), - version - ) - src_hash_cache[version] = channel["hash"] - except subprocess.CalledProcessError: - # This release isn't actually available yet. Continue to - # the next one. - continue - - channel['deps'] = get_channel_dependencies(channel['version']) - if channel_name == 'stable': - channel['chromedriver'] = get_chromedriver('Stable') - elif channel_name == 'ungoogled-chromium': - ungoogled_repo_url = 'https://github.com/ungoogled-software/ungoogled-chromium.git' - channel['deps']['ungoogled-patches'] = { - 'rev': release['ungoogled_rev'], - 'hash': nix_prefetch_git(ungoogled_repo_url, release['ungoogled_rev'])['hash'] - } - with open(UNGOOGLED_FLAGS_PATH, 'w') as out: - out.write(get_ungoogled_chromium_gn_flags(release['ungoogled_rev'])) - - channels[channel_name] = channel - - -sorted_channels = OrderedDict(sorted(channels.items(), key=get_channel_key)) -if len(sys.argv) == 2 and sys.argv[1] == '--commit': - for channel_name in sorted_channels.keys(): - version_old = last_channels[channel_name]['version'] - version_new = sorted_channels[channel_name]['version'] - if LooseVersion(version_old) < LooseVersion(version_new): - last_channels[channel_name] = sorted_channels[channel_name] - save_dict_as_nix(PIN_PATH, last_channels) - attr_name = channel_name_to_attr_name(channel_name) - commit_message = f'{attr_name}: {version_old} -> {version_new}' - if channel_name == 'stable': - body = subprocess.check_output([COMMIT_MESSAGE_SCRIPT, version_new]).decode('utf-8') - commit_message += '\n\n' + body - elif channel_name == 'ungoogled-chromium': - subprocess.run(['git', 'add', UNGOOGLED_FLAGS_PATH], check=True) - subprocess.run(['git', 'add', JSON_PATH], check=True) - subprocess.run(['git', 'commit', '--file=-'], input=commit_message.encode(), check=True) -else: - save_dict_as_nix(PIN_PATH, sorted_channels) - print_updates(last_channels, sorted_channels) diff --git a/pkgs/applications/networking/browsers/chromium/upstream-info.nix b/pkgs/applications/networking/browsers/chromium/upstream-info.nix deleted file mode 100644 index e990e0d66204..000000000000 --- a/pkgs/applications/networking/browsers/chromium/upstream-info.nix +++ /dev/null @@ -1,37 +0,0 @@ -{ - stable = { - chromedriver = { - hash_darwin = "sha256-+Pcd++19/nJVsqGr2jzyjMTWYfb2U9wSgnNccDyGuGU="; - hash_darwin_aarch64 = - "sha256-vrbIpHrBwbzqars7D546eJ7zhEhAB0abq7MXiqlU4ts="; - hash_linux = "sha256-NbZ1GULLWJ6L3kczz23HoUhGk6VgBOXcjZlL7t4Z6Ec="; - version = "130.0.6723.116"; - }; - deps = { - gn = { - hash = "sha256-iNXRq3Mr8+wmY1SR4sV7yd2fDiIZ94eReelwFI0UhGU="; - rev = "20806f79c6b4ba295274e3a589d85db41a02fdaa"; - url = "https://gn.googlesource.com/gn"; - version = "2024-09-09"; - }; - }; - hash = "sha256-eOCUKhFv205MD1gEY1FQQNCwxyELNjIAxUlPcRn74Lk="; - version = "130.0.6723.116"; - }; - ungoogled-chromium = { - deps = { - gn = { - hash = "sha256-iNXRq3Mr8+wmY1SR4sV7yd2fDiIZ94eReelwFI0UhGU="; - rev = "20806f79c6b4ba295274e3a589d85db41a02fdaa"; - url = "https://gn.googlesource.com/gn"; - version = "2024-09-09"; - }; - ungoogled-patches = { - hash = "sha256-+94tSSaOp6vzWkXN1qF3UXMm/Rs3pKmjf+U4x+af818="; - rev = "130.0.6723.116-1"; - }; - }; - hash = "sha256-eOCUKhFv205MD1gEY1FQQNCwxyELNjIAxUlPcRn74Lk="; - version = "130.0.6723.116"; - }; -} diff --git a/pkgs/development/tools/selenium/chromedriver/binary.nix b/pkgs/development/tools/selenium/chromedriver/binary.nix index ace1f1e8f270..e4b9b65909a3 100644 --- a/pkgs/development/tools/selenium/chromedriver/binary.nix +++ b/pkgs/development/tools/selenium/chromedriver/binary.nix @@ -1,7 +1,7 @@ { lib, stdenv, - fetchurl, + fetchzip, unzip, testers, chromedriver, @@ -9,19 +9,18 @@ let upstream-info = - (import ../../../../applications/networking/browsers/chromium/upstream-info.nix) - .stable.chromedriver; + (lib.importJSON ../../../../applications/networking/browsers/chromium/info.json).chromium; # See ./source.nix for Linux allSpecs = { x86_64-darwin = { system = "mac-x64"; - hash = upstream-info.hash_darwin; + hash = upstream-info.chromedriver.hash_darwin; }; aarch64-darwin = { system = "mac-arm64"; - hash = upstream-info.hash_darwin_aarch64; + hash = upstream-info.chromedriver.hash_darwin_aarch64; }; }; @@ -35,7 +34,7 @@ stdenv.mkDerivation { pname = "chromedriver"; inherit version; - src = fetchurl { + src = fetchzip { url = "https://storage.googleapis.com/chrome-for-testing-public/${version}/${spec.system}/chromedriver-${spec.system}.zip"; inherit (spec) hash; };